static Lisp lispParse(S s) { ret new lispParse_X(s).parse(); } sclass lispParse_X { L tok; int i; *(S s) { tok = javaTokC(s); } Lisp parse() { if (i >= l(tok)) null; S t = tok.get(i++); Lisp l = lisp(unquote(t)); if (i >= l(tok)) ret l; assertEquals("(", tok.get(i++)); while (i < l(tok)) { l.add(parse()); if (eq(get(tok, i), ",")) ++i; } assertEquals(")", tok.get(i++)); ret l; } }