[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