语义谓词影响范围

时间:2018-06-15 11:41:28

标签: antlr antlr4 predicates

请考虑以下语法,这会给我带来意想不到的行为:

lexer grammar TLexer;
WS                      : [ \t]+  -> channel(HIDDEN) ;
NEWLINE                 : '\n' -> channel(HIDDEN) ;
ASTERISK                : '*' ;
SIMPLE_IDENTIFIER       : [a-zA-Z_] [a-zA-Z0-9_$]* ;
NUMBER                  : [0-9] [0-9_]* ;

parser grammar TParser;
options { tokenVocab=TLexer; }
seq_input_list :
   level_input_list | edge_input_list ;

level_input_list :
  ( level_symbol_any )+ ;

edge_input_list :
  ( level_symbol_any )*  edge_symbol ;

level_symbol_any :
  {getCurrentToken().getText().matches("[0a]")}? ( NUMBER | SIMPLE_IDENTIFIER ) ;

edge_symbol :
  SIMPLE_IDENTIFIER | ASTERISK ;

输入0 *被解析得很好,但解析器无法识别0 f(在输入'f'处没有可行的选择)。如果我更改seq_input_list中规则的顺序,则会识别两个输入。

我的问题是,如果这确实是一个ANTLR问题,或者我理解语义谓词的使用是错误的。我希望输入0 f被识别为(seq_input_list (edge_input_list (level_symbol_any ( NUMBER) edge_symbol ( SIMPLE_IDENTIFIER ) ) )

提前谢谢!

儒略

0 个答案:

没有答案