如何创建给定形状的antlr树?

时间:2011-01-07 16:59:02

标签: c# antlr antlr3 abstract-syntax-tree

我有一个类似规则的antlr语法:

rule:
ID (COMMA ID)*
;

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

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

ITEM 
    ID
ITEM
    ID
....

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

如何使用树重写语法进行此类操作?

通常,如果我想收集所有ID,我只会使用

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

但这会生成树:

ITEM
    ID 
    ID
    .... 

我正在使用C#,如果它与实现语言和ANTLR 3.1.3

一样重要

1 个答案:

答案 0 :(得分:1)

在提出问题后我很快意识到了。

要获得树形状,我需要使用重写语法,如下所示:

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