【问题标题】:ANTLR rewrite rules in grammar file语法文件中的 ANTLR 重写规则
【发布时间】:2013-05-08 21:54:26
【问题描述】:

我有一个如下所示的规则:

a : (b | c) d;

b : 'B';

c : 'C';

d : 'D';

使用这种语法,ANTLR 构建了一个扁平的解析树。如何重写第一条规则(并保持其他两条不变),以便在名为 A 的根节点下返回匹配的内容?

如果第一条产生式规则是这样的:

a : b d;

那么它可以被重写为

a : b d -> ^(A b d)

它会解决我的问题。然而,第一个语法规则为生成的解析树 ^(A b d)^(A c d) 提供了不止一种可能性。

重写规则时如何表达?

【问题讨论】:

  • 这和 C# 有什么关系?标签已移除

标签: parsing tree antlr


【解决方案1】:

您可以在重写中使用? 运算符,如下所示。

a : (b | c) d -> ^(A b? c? d);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多