ANTLR语法:如果与其他规则匹配则拒绝

时间:2020-07-02 03:08:44

标签: antlr

我是antlr的初学者, 我尝试按照以下规则编写antlr语法(.g4文件):

  • 接受两个变量之间的AND(&):A&B,ABC&X,...
  • 接受Unicode字符串以U&'hex string'开头:U&'000b',U&'0020',...
  • 接受变量(字符串类型)和字符串之间的concat字符串:A&'123',ABC&'XyZ',...

我的问题是如何拒绝 U&'XyZ'之间的concat字符串?因为 U&是Unicode字符串的前缀

感谢您阅读

1 个答案:

答案 0 :(得分:0)

U&'XyZ'永远不能被解析器识别为AND表达式,因为U&'XyZ'已经在词法分析器中被标记为单个Unicode字符串标记:

expr
 : expr '&' expr
 | STRING
 | ID
 ;

STRING
 : 'U&'? '\'' ( ~[\\'\r\n] | '\\' ~[\r\n] )* '\''
 ;

ID
 : [a-zA-Z_] [a-zA-Z_0-9]*
 ;

它将以此解析U&'XyZ'&X

enter image description here

相关问题