ANTLR语法错误意外令牌:+
问题描述:
嗨我的ANTLR树语法有一个小问题。我正在使用ANTLRWorks 1.4。在语法分析器语法中,我有这样的规则:ANTLR语法错误意外令牌:+
declaration
: 'variable' IDENTIFIER (',' IDENTIFIER)* ':' TYPE ';'
-> ^('variable' IDENTIFIER TYPE)+
所以我想每个标识符一棵树。
,并在树的语法,我只保留重写规则:
declaration
: ^('variable' IDENTIFIER TYPE)+
但是,当我检查语法我有语法错误意外的标记+。树语法中声明规则末尾的这个+符号。那么我做错了什么?
解析器语法正常工作,并按预期构建AST树。我为C#生成了词法分析器和解析器,并测试了它的一些输入。
答
当解析来源:
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
?
我试过了,它说决定可以匹配输入,如变量使用多个替代方案1,2 – vldmrrdjcc 2011-04-30 19:15:40
@Vladimir,我编辑了我的答案。 – 2011-04-30 19:17:26
嗯,这是解决:) – vldmrrdjcc 2011-04-30 19:25:46