[antlr-interest] Problem splicing island grammar subtree into main AST

Mike J. Bell ckimyt at gmail.com
Fri May 29 07:51:10 PDT 2009


And here's my solution:

subordinate[CommonTree subAST] : -> ^({$subAST});

somerule: body = subordinatebody subordinate[$body.node] ;

There we go!  Just had to read the string template pages really carefully to
figure it out.

Mike


On Fri, May 29, 2009 at 10:07 AM, Mike J. Bell <ckimyt at gmail.com> wrote:

> OK, I finally figured out what my problem was...I'm not splicing an island
> grammar AST into the main AST properly.  Extrapolating from the island
> grammar example, I made something like:
>
>
> // note that a queue is required as there is delayed communication from
> lexer to parser
>
> SUBORDINATE
>     :    '{'
>     {
>         SubordinateLexer l = new SubordinateLexer(input);
>         CommonTokenStream cts = new CommonTokenStream(l);
>         SubordinateParser p = new SubordinateParser(cts);
>         SubordinateParser.root_return subordinate = p.root();
>         subordinateQueue.queue((CommonTree) subordinate.tree);
>     };
>
> subordinatebody returns [CommonTree node]
>     :    SUBORDINATE { $node = subordinateQueue.dequeue(); };
>
> subordinate
>     :    s=subordinatebody -> ^($s);
>
>
> So the problem here is that I don't want to splice in $s...I want to splice
> in $s.node, which is the valid returned subtree that I made in the lexer.
> But that's not valid syntax.
>
> Any ideas on how I can get what I want?  I thought about putting in a Java
> code snippet that is mangled to get the $s.node manually, but I thought
> that's a nasty solution that could break if ANTLR internals change in the
> future.  Surely there must be some way I can express this tree splicing in
> ANTLR directly?
>
> Thanks again in advance for any ideas...
>
> --
> Mike J. Bell on gmail
>



-- 
Mike J. Bell on gmail
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://www.antlr.org/pipermail/antlr-interest/attachments/20090529/f4fcb9bb/attachment.html 


More information about the antlr-interest mailing list