[antlr-interest] Number of children

shmuel siegel antlr at shmuelhome.mine.nu
Mon Feb 15 04:12:06 PST 2010


On 2/15/2010 10:22 AM, Nazim Oztahtaci wrote:
> Hello,
>
> I have written a grammar based on an example on the Net to parse an expression like (a OR B)AND(C OR D) to a tree like
>       AND
> OR       OR
> A B       C D
> It works fine but if expression has more then 2 children, like (A OR B OR C)AND(D OR E OR F)
> Then it creates problem because it does something like
> AND
>
> D     OR
>         E    F
> I want it to be like
>
> OR
> D  E  F
>
> In other words, a tree node might have capability to have more then 2 nodes as children. How can I set this? I work on C# but couldnt find any setter function in library.
> Best regards,
> Nazim
>   		 	   		
>    
I am not sure if this is too simple for your needs but this allows a 
more generic tree structure for your example.

grammar test;
options
{
   output = AST;
}
expr : andexpr EOF;
andexpr : orexpr (AND orexpr)+ -> ^(AND orexpr+);
orexpr : WORD (OR WORD)+ -> ^(OR WORD+)
     | LPAREN! orexpr RPAREN!;

LPAREN : '(' ;
RPAREN : ')' ;
AND : 'AND';
OR : 'OR';
WS :  ( ' ' | '\t' | '\r' | '\n') {$channel=HIDDEN;}  ;
WORD :  (~( ' ' | '\t' | '\r' | '\n' | '(' | ')' ))*;



More information about the antlr-interest mailing list