Antlr字符串匹配顺序

时间:2014-02-16 20:22:08

标签: antlr antlr4

我正在试图将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 : ~('{'|'}')+;

2 个答案:

答案 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 : '{' ~('{'|'}')+ '}';