!752 static O interpret(S java) { ret new JavaInterpreter().interpret(java); } // to trigger function inclusion static void dummy() { eq(null, null); collapseWord(null); } static class JavaInterpreter { int i; L tok; L allowedFunctions = litlist("eq", "collapseWord"); O interpret(S java) { i = 1; tok = javaTok(java); if (litlist("ret", "returns").contains(get(tok, i))) { i += 2; O result = expression(); consume(";"); ret result; } throw fail("huh? " + i + " " + get(tok, i)); } void consume(S x) { assertEquals(get(tok, i), x); i += 2; } S consume() { S t = t(); assertNotNull(t); i += 2; ret t; } S t() { ret get(tok, i); } O expression() { if (isQuoted(t())) ret unquote(consume()); if (isIdentifier(t())) { S fname = consume(); consume("("); new L args; while (neq(t(), ")")) { args.add(expression()); if (eq(t(), ",")) consume(); } consume(")"); ret call(mainClass(), fname, toObjectArray(args)); } throw fail(t()); } }