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
--
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.