2014-02-16 58 views
1

我正在试图使用ANTLR和一种文件,其中要检索的值可以是除{和}之外的任何字符序列。Antlr字符串匹配顺序

text = {Valid;String} 
text = {Another"Valid"-String} 

但现在值匹配从一开始的行:

线1:0不匹配输入 '文本=' 期待 '文本'

我做错了什么?不应该首先与TEXT匹配?

grammar Example; 

example : (TEXT '=' '{' VALUE '}')+; 

WS : [ \t\r\n]+ -> skip ; 

TEXT : 'text'; 

VALUE : ~('{'|'}')+; 

回答

0

由于特伦斯(ANTLR Guy)提到,规则VALUE贪婪地匹配text =。您可以让VALUE规则包含大括号而不是将它们作为单独的标记进行匹配:

example : (TEXT '=' VALUE)+; 

WS : [ \t\r\n]+ -> skip ; 

TEXT : 'text'; 

VALUE : '{' ~('{'|'}')+ '}'; 
0

我认为这是因为ANTLR 4会尝试匹配最长的字符串,所以“text ...”将匹配VALUE。