You are getting exactly what you asked for.
"ifStat" recursively calls "body" which dumps the tree for every "stat".
I imagine an output action in "prog" will deliver what you are looking for.
On 2011 May 27, at 09:32, David Smith wrote:
> I'm trying to parse an if statement of this form:
> if a > b
> a = b + 1
> elseif a < b
> b = a - b
> c = 42
> d = 4
> else
> b = 4
> c = a - b
> end
>
> ... using the following grammar snippet:
>
> prog: body EOF!
> ;
>
> body :
> ( (stat {if($stat.tree!=null)
> System.out.println($stat.tree.toStringTree());}
> | ifStat) {if($ifStat.tree!=null)
> System.out.println($ifStat.tree.toStringTree());} )*
> ;
>
> stat:
> (ID GETS) => ID GETS expr NEWLINE -> ^(GETS ID expr)
> | expr NEWLINE -> expr
> | NEWLINE ->
> ;
>
> ifStat
> : IF^ expr body
> (ELSEIF expr body)*
> (ELSE body)?
> END
> ;
>
> ... Amazingly enough, it's trying to work but with the following very
> odd behavior. the tree output is like this:
> (= a (+ b 1))
> (= b (- a b))
> (= c 42)
> (= d 4)
> (= b 4)
> (= c (- a b))
> (if (> a b) (= a (+ b 1)) elseif (< a b) (= b (- a b)) (= c 42) (= d
> 4) else (= b 4) (= c (- a b)) end)
>
> ... It seems to be putting all the body statements into the tree and
> then putting them "correctly" into the (if ...) node.
> Furthermore, if i have comments after the if statement, the (if ...)
> node is repeated for each comment.
>
> Is there a way to suppress unwanted tree output?
>
> DMS
>
>
> David M. Smith http://www.cc.gatech.edu/fac/David.Smith
> Georgia Institute of Technology, College of Computing
> Sent from my ASR-33 Teletype
>
>
> List: http://www.antlr.org/mailman/listinfo/antlr-interest
> Unsubscribe:
> http://www.antlr.org/mailman/options/antlr-interest/your-email-address
--
Trevor John Thompson (425) 246-4023
net: [email protected]
Quidquid Latine dictum sit, altum videtur.
List: http://www.antlr.org/mailman/listinfo/antlr-interest
Unsubscribe:
http://www.antlr.org/mailman/options/antlr-interest/your-email-address
--
You received this message because you are subscribed to the Google Groups
"il-antlr-interest" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to
[email protected].
For more options, visit this group at
http://groups.google.com/group/il-antlr-interest?hl=en.