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 

+0

我试过了,它说决定可以匹配输入,如变量使用多个替代方案1,2 – vldmrrdjcc 2011-04-30 19:15:40

+0

@Vladimir,我编辑了我的答案。 – 2011-04-30 19:17:26

+0

嗯,这是解决:) – vldmrrdjcc 2011-04-30 19:25:46