您好我的ANTLR树语法有一个小问题。我正在使用ANTLRWorks 1.4。在解析器语法中,我有这样的规则:
declaration
: 'variable' IDENTIFIER ( ',' IDENTIFIER)* ':' TYPE ';'
-> ^('variable' IDENTIFIER TYPE)+
所以我想要每个IDENTIFIER都有一棵树。
在树语法中我只留下了重写规则:
declaration
: ^('variable' IDENTIFIER TYPE)+
但是当我检查语法时,我得到语法错误意外的令牌+。并且它是树语法中声明规则末尾的+符号。那么我做错了什么?
解析器语法正常工作并按预期构建AST树。我为C#生成了lexer和parser,并测试了它的输入。
答案 0 :(得分:2)
解析来源时:
variable a, b, c : int;
你正在尝试构建一个看起来像这样的AST:
variable variable variable
/ | \
a b c
/ | \
int int int
但由于'variable'
和TYPE
始终是相同的令牌,我认为没有必要创建所有这些重复的节点。为什么不这样做:
declaration
: 'variable' IDENTIFIER ( ',' IDENTIFIER)* ':' TYPE ';'
-> ^('variable' TYPE IDENTIFIER+)
;
将创建一个AST:
variable
/ | | \
int a b c