Antlr 字符串匹配顺序



我正在尝试将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 会尝试匹配最长的字符串,所以"文本......"将与值匹配。

相关内容

  • 没有找到相关文章

最新更新