【问题标题】:ANTLR: Define new channel in grammarANTLR:在语法中定义新通道
【发布时间】:2011-08-20 20:06:03
【问题描述】:

我知道可以在 ANTLR 语法中的默认和隐藏令牌通道之间切换,但假​​设我想要第三个通道。如何在语法中定义新的令牌通道?例如,假设我想要一个名为 ALTERNATIVE 的频道。

【问题讨论】:

    标签: antlr token grammar antlr3


    【解决方案1】:

    它们只是Token class 中的final int,因此您可以像这样在您的词法分析器中简单地引入一个额外的int

    grammar T;
    
    @lexer::members {
      public static final int ALTERNATIVE = HIDDEN + 1;
    }
    
    // parser rules ...
    
    FOO
      :  'foo' {$type=ALTERNATIVE;}
      ;
    
    // other lexer rules ...
    

    相关问答:How do I get an Antlr Parser rule to read from both default AND hidden channel

    【讨论】:

      【解决方案2】:

      对于 C 目标,您可以使用

      //This must be assigned somewhere
      @lexer::context {
        ANTLR3_UINT32 defaultChannel;
      }
      
      TOKEN : 'blah' {$channel=defaultChannel;};
      

      这会在每条规则之后重置,因此如果您希望通道分配在规则之间保持不变,您可能必须覆盖 nextTokenStr()。

      【讨论】:

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