[antlr-interest] NullPointerException in TreeRewriter
Terence Parr
parrt at cs.usfca.edu
Wed Mar 25 13:20:20 PDT 2009
weird. oh, if you look at code it thinks the adaptor is null...maybe
you set it incorrectly or don't have one on the nodestream or reducer?
Ter
On Mar 25, 2009, at 12:10 PM, Anders Hessellund wrote:
> Hi,
>
> I just updated to 3.1.3 to try TreeRewriter but I get a strange
> NullPointerException?
>
> This is my tree grammar:
>
> tree grammar Reducer;
> options {
> tokenVocab=Expression;
> ASTLabelType=CommonTree;
> output=AST;
> filter=true;
> }
> topdown
> : ^(MULT a=. b=INT {$b.int==0}?) -> $b // x*0 -> 0
> ;
> bottomup
> : ^(DIV a=. b=INT {$b.int==0}?) -> $b // x*0 -> 0
> ;
>
> I use the following code to invoke the Reducer. (tree is the
> CommonTree object from my parse)
>
> final CommonTreeNodeStream nodes = new CommonTreeNodeStream(tree);
> final McAntlrExpressionReducer reducer = new
> McAntlrExpressionReducer(nodes,env);
> tree = (CommonTree) reducer.downup(tree);
>
> When I run this on the following expression "3*0" I get the
> following error:
>
> 20:09:08.226 [main] DEBUG expression.Expression - parsing '3*0'
> results in this AST: (* 3 0)
> 20:09:08.226 [main] DEBUG expression.Expression - before reduction:
> (* 3 0)
> java.lang.NullPointerException
> at
> org
> .antlr
> .runtime.tree.CommonTreeNodeStream.<init>(CommonTreeNodeStream.java:
> 67)
> at
> org.antlr.runtime.tree.TreeRewriter.applyOnce(TreeRewriter.java:56)
> at org.antlr.runtime.tree.TreeRewriter$1.pre(TreeRewriter.java:86)
> at org.antlr.runtime.tree.TreeVisitor.visit(TreeVisitor.java:28)
> at org.antlr.runtime.tree.TreeRewriter.downup(TreeRewriter.java:
> 89)
> at
> com
> .maconomy
> .expression.McAbstractExpression.reduce(McAbstractExpression.java:58)
> at
> com.maconomy.expression.test.MtReducerTest.add(MtReducerTest.java:27)
> at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
> at
> sun
> .reflect
> .NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
> at
> sun
> .reflect
> .DelegatingMethodAccessorImpl
> .invoke(DelegatingMethodAccessorImpl.java:25)
> at java.lang.reflect.Method.invoke(Method.java:597)
> at
> org
> .junit
> .internal
> .runners.TestMethodRunner.executeMethodBody(TestMethodRunner.java:99)
> at
> org
> .junit
> .internal
> .runners.TestMethodRunner.runUnprotected(TestMethodRunner.java:81)
> at
> org
> .junit
> .internal
> .runners.BeforeAndAfterRunner.runProtected(BeforeAndAfterRunner.java:
> 34)
> at
> org
> .junit
> .internal.runners.TestMethodRunner.runMethod(TestMethodRunner.java:75)
> at
> org
> .junit.internal.runners.TestMethodRunner.run(TestMethodRunner.java:45)
> at
> org
> .junit
> .internal
> .runners
> .TestClassMethodsRunner.invokeTestMethod(TestClassMethodsRunner.java:
> 66)
> at
> org
> .junit
> .internal
> .runners.TestClassMethodsRunner.run(TestClassMethodsRunner.java:35)
> at org.junit.internal.runners.TestClassRunner
> $1.runUnprotected(TestClassRunner.java:42)
> at
> org
> .junit
> .internal
> .runners.BeforeAndAfterRunner.runProtected(BeforeAndAfterRunner.java:
> 34)
> at
> org.junit.internal.runners.TestClassRunner.run(TestClassRunner.java:
> 52)
> at
> org
> .eclipse
> .jdt
> .internal
> .junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:45)
> at
> org
> .eclipse
> .jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)
> at
> org
> .eclipse
> .jdt
> .internal
> .junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:460)
> at
> org
> .eclipse
> .jdt
> .internal
> .junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:673)
> at
> org
> .eclipse
> .jdt
> .internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:386)
> at
> org
> .eclipse
> .jdt
> .internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:
> 196)
>
> Can anyone help me with this?
>
> -- Anders
>
> List: http://www.antlr.org/mailman/listinfo/antlr-interest
> Unsubscribe: http://www.antlr.org/mailman/options/antlr-interest/your-email-address
More information about the antlr-interest
mailing list