[antlr-interest] I'm stuck with my parser tree generator ..
whaefelinger
ora.et.labora at web.de
Mon Oct 11 13:35:16 PDT 2004
I do not get the picture about this parser trees and how to utilitze
them. Here's my very simple problem:
My parser should accept a list of (simple) expressions, for
example:
5+4 ; 3*2;
My parser should then further evaluate each expression in the
list and summarize them up. So my input 5+4 ;3*2; should end
up in printing 15.
Here's my Parser:
class CalcParser extends Parser;
options { buildAST = true; }
tokens { EXPR; }
stmts
: (
expr {
// tree construction rule here?
}
";"!
)+
;
expr
: INT ((PLUS^|MULT^) INT)*
;
and this is my tree parser:
class CalcTreeWalker extends TreeParser;
stmts returns [float r]
{
float a = 0;
r = 0;
}
: #(EXPR a=expr) { r+=a ; }
;
expr returns [float r]
{
float a,b;
r=0;
}
: #(PLUS a=expr b=expr) { r = a+b; }
| #(MULT a=expr b=expr) { r = a*b; }
| i:INT {r = (float)Integer.parseInt(i.getText());}
;
In my main function I do then basically this:
public static void main(String[] args)
{
...
// Parse the input expression
parser.stmts();
CommonAST t = (CommonAST)parser.getAST();
// Print the resulting tree out in LISP notation
System.out.println(t.toStringTree());
CalcTreeWalker walker = new CalcTreeWalker();
// Traverse the tree created by the parser
float sum = walker.stmts(t);
System.out.println("*sum => " + sum);
...
}
When I run my parser on input "5+4 ; 3*2;" I do get this
output (line numbering by me):
001 /opt/jdk32/142_03/bin/java antlr.Tool calc.g
002 ANTLR Parser Generator Version 2.7.4 1989-2004 jGuru.com
003 ( + 5 4 )
004 <AST>:0:0: expecting EXPR, found '+'
005 *sum => 0.0
The error message in 004 is what I (more or less) expected as
there is no 'EXPR' node. But how would I construct it?
Please be aware that I deliberatly do not want to "summarize"
in the 'expr' rule of my parser tree.
I wonder whether someone can give me some help?
Yahoo! Groups Links
<*> To visit your group on the web, go to:
http://groups.yahoo.com/group/antlr-interest/
<*> To unsubscribe from this group, send an email to:
antlr-interest-unsubscribe at yahoogroups.com
<*> Your use of Yahoo! Groups is subject to:
http://docs.yahoo.com/info/terms/
More information about the antlr-interest
mailing list