在ANTLR4中解析任何字符,直到分号

时间:2016-12-22 19:38:05

标签: parsing antlr grammar antlr4

我正在尝试解析以下语法,其中Value可以是分号之外的任何字符,但我无法使其正常工作:

grammar Test;

pragmaDirective : 'pragma' Identifier Value ';' ;

Identifier : [a-z]+ ;

Value : ~';'* ;

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

当我使用pragma foo bar;对其进行测试时,出现以下错误:

line 1:6 extraneous input ' ' expecting Identifier
line 1:11 extraneous input 'bar' expecting ';'

2 个答案:

答案 0 :(得分:1)

试试这个:

{{1}}

并删除{{1}}规则。那应该可以胜任。

建议:为文字定义 lexer 规则(如“pragma”),而不是直接在解析器规则中定义它们。

答案 1 :(得分:0)

价值规则过于贪婪。 Lexer规则尝试尽可能匹配,因此对于这样的输入:pragma mu foo;,Value规则将匹配pragma mu foo。毕竟,除了分号之外,这是零个或多个字符。

Value不适合用作词法分析器规则。我建议你重新考虑一下你的做法。也许创建一个与value和其他词法规则相匹配的解析器规则Identifier。如果没有看到很多“真正的”语法,很难提出建议(你可能发布了一个你正在研究的语法的愚蠢版本)。