/** For debugging. Usage: $ rlwrap rune -cpa e-on-cl/antlr/ ? def [pp, c] := (, stdout, println) ? c(pp("E.code(goes, here)")) */ def setup(, stdout, println) :any { #def := def := def := def makeEParser := def makeEALexer := def makeQuasiLexer := def makeTokenMultiBuffer := def makeTokenStreamSelector := def makeDumpASTVisitor := def pp(text) :any { def fname := "ktest" def elexer := makeEALexer((text)) def qlexer := makeQuasiLexer(elexer.getInputState()) def tb := makeTokenMultiBuffer(["e", "quasi"], [elexer, qlexer]) elexer.setSelector(tb) qlexer.setSelector(tb) elexer.setFilename(fname) qlexer.setFilename(fname) def parser := makeEParser(tb) parser.setFilename(fname) parser.start() def ast := parser.getAST() def visitor := makeDumpASTVisitor() visitor.visit(ast) if (ast != null) { println(ast.toStringTree()) } return ast } pragma.enable("accumulator") def tokenSymbols := accum [] for tn in makeEParser.get_tokenNames() { _.with("|" + tn.replaceAll("\\", "\\\\").replaceAll("|", "\\|") + "|") }; null def c(var ast) :void { while (ast != null) { stdout.print(" ((", tokenSymbols[ast.getType()], " ") stdout.quote(ast.getText()) stdout.print(")") c(ast.getFirstChild()) stdout.print(")") ast := ast.getNextSibling() } } return [pp, c] }