package org.hccp.lisp; import java.util.*; import java.lang.reflect.*; /** * This class has been deprecated. Please use {@link Interpreter} instead. * @deprecated */ public class TestInterpreter extends Interpreter { Map env; public TestInterpreter() { env = new HashMap(); env.put(Constants.ADD, ADD.class); env.put(Constants.SUB, SUB.class); env.put(Constants.MUL, MUL.class); env.put(Constants.DIV, DIV.class); env.put(Constants.EQ, EQ.class); env.put(Constants.IF, IF.class); } public Sexp compile(Object o, Iterator itr) { if (o instanceof java.lang.Double) { return new Atom(o); } else if (o instanceof java.util.List) { return compile((java.util.List)o, null); } else { return null; } } public Sexp compile(java.util.List l, Iterator itr) { Iterator i = l.iterator(); Class c = (Class)env.get(i.next()); java.util.List args = new Vector(); while (i.hasNext()) { Object o = i.next(); if (o instanceof java.util.List) { if (isFunction((java.util.List)o)) { args.add(compile((java.util.List)o, null)); } else { args.add(new org.hccp.lisp.List(l)); } } else { args.add(new Atom(o)); } } Sexp s = null; try { Constructor con = c.getConstructor(new Class[] { java.util.List.class, java.util.Map.class }); s = (Sexp)con.newInstance(new Object[] { args, env }); } catch (NoSuchMethodException nsme) { nsme.printStackTrace(); } catch (InstantiationException ie) { ie.printStackTrace(); } catch (IllegalAccessException iae) { iae.printStackTrace(); } catch (ClassCastException cce) { System.out.println("CLASS CAST EXCEPTION: " + c ); cce.printStackTrace(); } catch (Exception e) { e.printStackTrace(); } return s; } public boolean isFunction(java.util.List list) { if (list.size() > 0) { return env.containsKey(list.get(0)); } return false; } public java.util.List interpret(java.util.List l) { Iterator i = l.iterator(); Class c = (Class)env.get(i.next()); java.util.List args = new Vector(); while (i.hasNext()) { Object o = i.next(); Sexp val = null; if (o instanceof Function) { System.out.print("is Function!"); //val } else if (o instanceof java.util.List) { System.out.print("is List!"); val = new org.hccp.lisp.List((java.util.List)o); } else { val= new Atom(o); } args.add(val); } System.out.println(args); try { System.out.println("HERE1!"); Constructor con = c.getConstructor(new Class[] { java.util.List.class, java.util.Map.class }); System.out.println("HERE2!"); Object inst = con.newInstance(new Object[] { args }); System.out.println("HERE3!"); Sexp result = ((Sexp)inst).evaluate(); if (result instanceof Atom) System.out.println(((Atom)result).getValue()); } catch (Exception e) { e.printStackTrace(); } return new Vector(); } public static void display(java.util.List l) { Iterator i = l.iterator(); System.out.println(i.next().toString()); while (i.hasNext()) { Object o = i.next(); if (o instanceof java.util.List) { display((java.util.List)o); } } } }