[antlr-interest] Help with Tree Parser (ANTLR 2.7.5)
    Jeff Barnes 
    jbarnesweb at yahoo.com
       
    Tue Jan 31 00:29:31 PST 2006
    
    
  
To the list this time...
Hi,
I'm not real experienced with ANTLR tree parsers, but
I believe what you are trying to accomplish is
something along the lines of this:
singleCommand returns [String s = null]
{
    int val;
    String id;
    boolean expr = false;
    String thenStr = null, elseStr = null;
}
:
   ...
    | #(D_SCIF expr=expression thenStr=singleCommand
elseStr=singleCommand) {s = "if "+expr+"\n"+thenStr
+"\nelse\n"+elseStr
    | #(D_SCWHILE expression singleCommand)
   ...
    ;
expression returns [boolean exprResult = false] :
...
//boolean expressions
...
;
Or you may be trying to do this, not sure which...
singleCommand returns [String s = null]
{
    int val;
    String id;
    boolean expr = false;
    String thenStr = null, elseStr = null;
}
   ...
    | #(D_SCIF expr=expression
            (
                 {expr}? singleCommand 
            |    singleCommand
            )
    | #(D_SCWHILE expression singleCommand)
   ...
    ;
--- Zack Nammari <xx_ayu at hotmail.com> wrote:
---------------------------------
Hello all,
 
I'm trying to use ANTLR 2.7.5 and Java to write a
small interpreter but I'm not sure how to get the tree
parser to branch on certain conditions.
 
A part of my tree parser grammer is below:
 
singleCommand
{
    int val;
    String id;
}
   ...
    | #(D_SCIF expression singleCommand singleCommand)
    | #(D_SCWHILE expression singleCommand)
   ...
    ;
I would like the D_SCIF to operate as follows:
 
if (expression == true)
  singleCommand
else
  singleCommand
 
... and for the D_SCWHILE:
 
while (expression == true)
  LOOP singleCommand
 
Is this possible???
 
I was hoping something like this would work:
 
#(D_SCIF val=expression { if (val) }singleCommand {
else }singleCommand)
 
... but curly brackets {} are needed for the if-else
to operate correctly and I can't find a way to include
them inside an action.
 
Thank you in advance for any help.
 
Kind regards,
 
Zack Nammari
=========
Jeff Barnes
(206)245-6100
There are two rules for being a successful consultant: Rule 1 - Don't tell people everything you know.
    
    
More information about the antlr-interest
mailing list