我正在尝试在ANTLR中定义一个令牌片段。它是Unicode范围!
到~
中的一系列字符,但不能包含空格或任何分隔符。
fragment RegularCharRange : '\u0021'..'\u007e' ;
fragment WhitespaceChar : [\u0000\t\n\f\r ] ;
fragment DelimiterChar : [()<>[\]{}/%] ;
以下是无效的ANTLR语法,但它表达了我尝试做的事情。
fragment RegularChar : RegularCharRange & ~WhitespaceChar & ~DelimiterChar ;
一旦定义,片段就会像这样使用:
Name : '/' RegularChar* ;
如何构造RegularChar
规则以保持我的小词法语法的可读性,而不是将其定义为unicode范围列表(这也会迫使我学习每个空格的顺序)和分隔符字符,使它们适合上述范围内的正确位置)?
修改的: 我知道我可以实现这样的正确行为,但我希望从可重用的片段构建我的词法分析器规则:
fragment RegularChar
: ~( '\u0000'..'\u0020' | '\u007f'..'\uffff' | [\u0000\t\n\f\r ] | [()<>[\]{}/%] )
;
答案 0 :(得分:1)
不,遗憾的是这里没有捷径。您可以单独定义范围,也可以像在编辑中那样取消。