改进语法谓词错误消息?

时间:2013-04-22 22:06:17

标签: antlr

我正在尝试改进antlr给出的错误消息,并注意到语法谓词似乎是错误消息的根源。

这是我目前正在进行的工作。这是语法结构的一个例子。对不起,我无法提供实际的语法。希望这说明了这一点。

defs
:   (a) => a | b
;


a
:   A B c
;

//b is actually much further down the chain and due to ordering can't be moved up.
b
:   A c
;

问题是,例如,如果您有令牌“A B D”。您获得的错误消息来自'b'规则。我希望错误消息来自'a'规则。意思是如果“A B”匹配,那么如果“c”不匹配,我想要一个错误。

我想也许你可以做到这一点

a
:   (A B) => A B c | {EmitErrorMessage("error");}
;

1 个答案:

答案 0 :(得分:1)

您应该放松defs中的句法谓词,而不是将{1}添加到a

defs
    :   (A B) => a
    |   b
    ;

这将使解析器选择第一个替代方案,并仅基于两个符号a输入A B规则。