【发布时间】:2011-04-14 15:00:18
【问题描述】:
我有一个问题困扰了一段时间,如果可能的话,我将不胜感激。
我在 ANTLR tree 语法中有几条规则:
block
: compoundstatement
| ^(VAR declarations) compoundstatement
;
declarations
: (^(t=type idlist))+
;
idlist
: IDENTIFIER+
;
type
: REAL
| i=INTEGER
;
我编写了一个 Java 类 VarTable,我将在源文件开头声明的所有变量插入到该类中。该表还将保存它们的变量类型(即实数或整数)。我还可以使用这个变量表来检查未声明的变量或重复声明等。
所以基本上我希望能够将变量类型从“声明”规则发送到“idlist”规则,然后遍历 idlist 规则中的每个标识符,将它们一一添加到我的变量表中。
我遇到的主要问题是,如果“声明”规则中的 $t 变量(这是一个引用类型的变量),当我尝试访问“文本”属性时,我得到了 NullPointerException。
然而,如果我尝试在“类型”规则中访问 $i 变量的“文本”属性,则没有问题。
我查看了 Java 文件中生成 NullPointerException 的位置,但对我来说仍然没有意义。
是否存在多种类型的问题,因为规则是
(^(typeidlist))+
??
当我开始使用 idlist 规则时,我遇到了同样的问题,因为我不确定如何编写一个操作来让我遍历找到的所有 IDENTIFIER 令牌。
感谢任何帮助或 cmets。
干杯
【问题讨论】:
-
我认为这是树语法,而不是解析器语法。对吗?
-
没错。这是一个树语法。很抱歉有歧义。
-
没问题,乔,我也这么想,但想在回答之前先确认一下。
标签: antlr