我正在尝试将ANTLR与一种文件一起使用,其中要检索的值可以是除{和}之外的任何字符序列。
text = {Valid;String}
text = {Another"Valid"-String}
但是现在 VALUE 从一开始就匹配了这条线:
第 1:0 行 不匹配的输入"文本 ="期望"文本"
我做错了什么?不应该先与文本匹配吗?
grammar Example;
example : (TEXT '=' '{' VALUE '}')+;
WS : [ trn]+ -> skip ;
TEXT : 'text';
VALUE : ~('{'|'}')+;
正如Terence(ANTLR家伙)所提到的,规则VALUE
贪婪地匹配text =
。您可以让VALUE
规则包含大括号,而不是将它们作为单独的标记进行匹配:
example : (TEXT '=' VALUE)+;
WS : [ trn]+ -> skip ;
TEXT : 'text';
VALUE : '{' ~('{'|'}')+ '}';
我认为这是因为 ANTLR 4 会尝试匹配最长的字符串,所以"文本......"将与值匹配。