Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/cmake/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
ANTLR:在语法中定义新通道_Antlr_Token_Grammar_Antlr3 - Fatal编程技术网

ANTLR:在语法中定义新通道

ANTLR:在语法中定义新通道,antlr,token,grammar,antlr3,Antlr,Token,Grammar,Antlr3,我知道在ANTLR语法中可以在默认和隐藏令牌通道之间切换,但假设我想要第三个通道。如何在gramar中定义新的令牌通道?例如,假设我想要一个名为ALTERNATIVE的频道。它们只是中的最终int,因此您可以简单地在lexer中引入一个额外的int,如下所示: grammar T; @lexer::members { public static final int ALTERNATIVE = HIDDEN + 1; } // parser rules ... FOO : 'foo

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

它们只是中的
最终int
,因此您可以简单地在lexer中引入一个额外的
int
,如下所示:

grammar T;

@lexer::members {
  public static final int ALTERNATIVE = HIDDEN + 1;
}

// parser rules ...

FOO
  :  'foo' {$type=ALTERNATIVE;}
  ;

// other lexer rules ...

一个相关的Q&A:

用于您可以使用的C目标

//This must be assigned somewhere
@lexer::context {
  ANTLR3_UINT32 defaultChannel;
}

TOKEN : 'blah' {$channel=defaultChannel;};
这会在每个规则之后重置,因此如果您希望通道分配在规则之间保持不变,则可能必须重写nextTokenStr()