空指针异常 - ANTLR TreeWalker

时间:2012-08-22 14:09:36

标签: nullpointerexception antlr abstract-syntax-tree

我在TreeWalker中不断收到NullPoiterException,但我似乎无法找到原因。

我无法发布整个语法,因为它太长了。

这是treeWalker中的规则,其中antlrWorks说问题是:

collection_name returns [MyType value]
    : ID { $value = (MyType) database.get($collection_name.text); }
    ;

请注意,数据库是HashMap。

谢谢!

1 个答案:

答案 0 :(得分:2)

  

我无法发布整个语法,因为它太长了。

以下是更多"可读"并且与原始规则完全相同:

collection_name returns [MyType value]
 : ID { $value = (MyType) database.get($ID.text); }
 ;

或许做一些健全性检查:

collection_name returns [MyType value]
 : ID 
   {
     Object v = database.get($ID.text);
     if(v == null) {
       throw new RuntimeException($ID.text + " unknown in database!");
     }
     $value = (MyType) v;
   }
 ;

修改

正如您已经发现的那样,在树语法中无法访问规则的.text属性(仅在解析器语法中)。在树语法中,每个规则都是Tree类型,而是知道.start.end属性。可以在解析器和树语法中访问相同的标记。所以$ID.text可以正常工作。