[antlr-interest] Island Parsing - a different way, seems to work
mark.mandel at gmail.com
Mon Jun 18 00:23:18 PDT 2007
I've been playing around with Island Parsing, and I think I've come up
with a much simpler way of doing it other than the one that is in the
I wanted to run it past you, in case there is something that I have missed.
I'll chop out a lot of the extraneous code around what I'm doing, so
hopefully I don't break it in the process.
I needed to be able to do some island parsing, simply where I just had
a string to parse, and wanted to be able to insert the island grammar
tree into my current AST.
The code ended up looking pretty much like this:
sto=START_TAG_OPEN stc=START_TAG_CLOSE tc=tagContent
-> ^(CFTAG[$sto] START_TAG_CLOSE
The only issue I had here, was that I couldn't use $tc, because for
some reason ANTLR couldn't recognise it - so I just set it explicitly,
and everything seemed happy.
>From there, I was able to write my own parseScript function that
returns a CommonTree,
protected Tree parseCFScript(Token start, ParserRuleReturnScope stop)
org.antlr.runtime.BitSet bit = new org.antlr.runtime.BitSet();
List otherTokens =
StringBuffer buffer = new StringBuffer();
for(Object t : otherTokens)
CharStream input = new ANTLRNoCaseStringStream(buffer.toString());
CFScriptLexer lexer = new CFScriptLexer(input);
CommonTokenStream tokens = new CommonTokenStream(lexer);
CFScriptParser parser = new CFScriptParser(tokens);
CFScriptParser.script_return root = parser.script();
Tree ast = (Tree)root.getTree();
ErrorEvent event = new ErrorEvent(exc, "CFScript Error");
E: mark.mandel at gmail.com
More information about the antlr-interest