ANTLR4键/值语法

时间:2012-12-27 01:19:15

标签: antlr antlr4

我有一个非常简单的键/值语法(不是我正在处理的实际语法,但这是我能提出的最简单的语法,显示我的问题)似乎在ANTLR中的词法分析器匹配顺序有问题4.0b4。语法是:

grammar test;

r     : HELLO COLON VALUE;
HELLO : 'hello';
COLON : ':';
VALUE : .+;

鉴于这个语法和输入'hello:world',我希望它能正确解析,但是看起来整个输入被拉入单个VALUE令牌并因此失败:

hello:world
[@0,0:11='hello:world\n',<3>,1:0]
[@1,12:11='<EOF>',<-1>,2:12]
line 1:0 mismatched input 'hello:world\n' expecting 'hello'

我做错了什么?

1 个答案:

答案 0 :(得分:3)

语法编译器应该发出关于在词法分析器中使用贪心.+的警告。

VALUE规则字面上说“尽可能多地使用字符,而不考虑字符是什么”。如果您的输入不是完全 hello:,那么您的词法分析器将使用包含整个输入的单个VALUE标记。

也许下面的词法分析器更接近你所追求的目标:

lexer grammar textLexer;

HELLO : 'hello';
COLON : ':' -> pushMode(ValueMode);

mode ValueMode;

    VALUE : ~[\r\n]+ -> popMode;