ANTLR语法错误意外令牌:+

时间:2011-04-30 19:07:32

标签: tree antlr grammar

您好我的ANTLR树语法有一个小问题。我正在使用ANTLRWorks 1.4。在解析器语法中,我有这样的规则:

declaration
:       'variable' IDENTIFIER ( ',' IDENTIFIER)* ':' TYPE ';'
->    ^('variable' IDENTIFIER TYPE)+

所以我想要每个IDENTIFIER都有一棵树。

在树语法中我只留下了重写规则:

declaration
:     ^('variable' IDENTIFIER TYPE)+

但是当我检查语法时,我得到语法错误意外的令牌+。并且它是树语法中声明规则末尾的+符号。那么我做错了什么?

解析器语法正常工作并按预期构建AST树。我为C#生成了lexer和parser,并测试了它的输入。

1 个答案:

答案 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

相关问题