1

我有一个 antlr 语法,它的规则如下:

rule:
ID (COMMA ID)*
;

其中 ID 是用于匹配典型变量名称的词法分析器规则,逗号是匹配逗号的词法分析器规则。所以规则匹配一个或多个逗号分隔的变量

我想创建一棵看起来像这样的树:

ITEM 
    ID
ITEM
    ID
....

其中 ITEM 是我在找到的每个 ID 前面插入的虚构节点。

我将如何用树重写语法做这样的事情?

通常,如果我想收集我会使用的所有 id

rule:
ID (COMMA ID)*  -> ^(ITEM ID+)
;

但这会产生树:

ITEM
    ID 
    ID
    .... 

如果它作为实现语言和 ANTLR 3.1.3 很重要,我正在使用 C#

4

1 回答 1

1

问完这个问题,我很快回过神来。

要获得树形,我需要像这样使用重写语法:

rule:
ID (COMMA ID)*  -> ^(ITEM ID)+
;
于 2011-01-07T17:20:56.730 回答