[antlr-interest] Conditional tree parsing

VAUCHER Laurent VAUCHER at fermat.eu
Tue Oct 31 07:47:19 PST 2006


  Hi.

  I'm currently implementing an expression evaluator as a TreeParser,
so,
for correct evaluation semantic, I need to conditionnally evaluate some
parts of the parse tree.

  For instance my parse tree for the equivalent of Java's 
(testexpr ? expr1 : expr2) is something like

#(IF_TOKEN testexprAST expr1AST expr2AST)

  When evaluating, I need to direct the tree parser to only walk the
correct branch of the tree (expr1AST is testexpr is true, expr2Ast
otherwise).

  My first try was to write:

#(IF_TOKEN t=expression v1=expression v2=expression)

  but then both expression are evaluated (wrong!)


  My second try was:

#(IF_TOKEN t=expression e1:expression e2:expression)
  { if (t) { result = eval(e1); } else { result = eval(e2); }}

  Well, it works, but expressions are still evaluated first.


  Is there a way to extract 'any' AST at a given position?
Something like:

#(IF_TOKEN t=expression e1:? e2:?)  



Laurent.




More information about the antlr-interest mailing list