不明确的 ANTLR 解析器规则

Ambiguous ANTLR parser rule

我有一个非常简单的示例文本,我想用 ANTLR 对其进行解析,但由于规则定义不明确,我得到了错误的结果。

语法如下:

grammar SimpleExampleGrammar;

prog : event EOF;

event : DEFINE EVT_HEADER eventName=eventNameRule;

eventNameRule : DIGIT+;

DEFINE : '#define';

EVT_HEADER : 'EVT_';

DIGIT                   :           [0-9a-zA-Z_];

WS     :   ('' | ' ' | '\r' | '\n' | '\t') -> channel(HIDDEN);

第一个文本示例:

#define EVT_EX1

第二个文本示例:

#define EVT_EX1
#define EVT_EX2

所以,第一个例子被正确解析了。

但是,第二个示例不起作用,因为 eventNameRule 匹配下一个“#define ...”并且解析树不正确

感谢任何更改语法以正确解析此内容的帮助。

谢谢, 布西

正如 Adrian 所指出的,我在这里的主要错误是在初始规则 (prog) 中我使用了 "event" 而不是 "event+" 这将解决问题。

谢谢阿德里安。

除了缺少循环说明符之外,您的 WS 规则也有问题。第一个 alt 匹配任何内容。删除它。而且,顺便说一句,给你的 DIGIT 规则一个不同的名字。它匹配的不仅仅是数字。