[antlr-interest] Antlr Book Chapter 3 troubles
Tim Halloran
hallorant at gmail.com
Fri Sep 5 12:44:31 PDT 2008
I'm having trouble trying to get the tree grammar example in Chapter 3 to
work, I get a NPE when I try to generate code for my Eval.g in ANTLRWorks.
I have changed the output directory to "." in the ANTLRWorks settings.
Here is the file:
tree grammar Eval;
options {
tokenVocab=Expr;
ASTLabelType=CommonTree;
}
@header {
import java.util.HashMap;
}
@members {
final HashMap<String,Integer> f_memory = new HashMap<String,Integer>();
}
expr returns [int value]
: ^('+' a=expr b=expr) {$value = a+b;}
| ^('-' a=expr b=expr) {$value = a-b;}
| ^('*' a=expr b=expr) {$value = a*b;}
| ID {
final Integer v = f_memory.get($ID.text);
if (v != null)
$value = v.intValue();
else
System.err.println("undefined variable " + $ID.text);
}
| INT {$value = Integer.parseInt($INT.text);}
;
prog : stat+
;
stat
: expr {System.out.println($expr.value);}
| ^('=' ID.expr) {f_memory.put($ID.text, $expr.value);}
;
In the tool (downloaded today):
[15:36:23] Checking Grammar...
The grammar checks oky-doky...but when I try to generate the code
[15:36:28] error(10): internal error: /Users/tim/Source/antlr-Work/Ch3 Expr
AST/src/Eval.g : java.lang.NullPointerException
org.antlr.codegen.CodeGenTreeWalker.atom(CodeGenTreeWalker.java:1959)
org.antlr.codegen.CodeGenTreeWalker.atom(CodeGenTreeWalker.java:2158)
org.antlr.codegen.CodeGenTreeWalker.element(CodeGenTreeWalker.java:1684)
org.antlr.codegen.CodeGenTreeWalker.tree(CodeGenTreeWalker.java:2252)
org.antlr.codegen.CodeGenTreeWalker.element(CodeGenTreeWalker.java:1609)
org.antlr.codegen.CodeGenTreeWalker.alternative(CodeGenTreeWalker.java:1288)
org.antlr.codegen.CodeGenTreeWalker.block(CodeGenTreeWalker.java:1063)
org.antlr.codegen.CodeGenTreeWalker.rule(CodeGenTreeWalker.java:779)
org.antlr.codegen.CodeGenTreeWalker.rules(CodeGenTreeWalker.java:570)
org.antlr.codegen.CodeGenTreeWalker.grammarSpec(CodeGenTreeWalker.java:512)
org.antlr.codegen.CodeGenTreeWalker.grammar(CodeGenTreeWalker.java:318)
org.antlr.codegen.CodeGenerator.genRecognizer(CodeGenerator.java:426)
org.antlr.Tool.generateRecognizer(Tool.java:419)
org.antlr.Tool.process(Tool.java:286)
org.antlr.works.generate.CodeGenerate.generate(Unknown Source)
org.antlr.works.generate.CodeGenerate.run(Unknown Source)
java.lang.Thread.run(Thread.java:637)
The Expr.tokens file contains:
WS=7
NEWLINE=4
T__12=12
T__11=11
T__13=13
T__10=10
INT=6
ID=5
T__9=9
T__8=8
'='=8
'('=12
'*'=11
'-'=10
'+'=9
')'=13
Any ideas?
Best regards,
Tim Halloran
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://www.antlr.org/pipermail/antlr-interest/attachments/20080905/2dcada3a/attachment.html
More information about the antlr-interest
mailing list