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