不明确的ANTLR解析器规则

时间:2015-03-31 12:13:02

标签: parsing antlr antlr4

我有一个非常简单的示例文本,我想用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

因此,第一个例子被正确解析。

enter image description here

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

enter image description here

感谢任何帮助改变语法以正确解析它。

谢谢, 布丝

2 个答案:

答案 0 :(得分:1)

除了丢失的循环说明符之外,您的WS规则中也存在问题。第一个alt匹配任何东西。删除它。而且,顺便说一下,给你的DIGIT规则一个不同的名字。它匹配的不仅仅是数字。

答案 1 :(得分:0)

正如阿德里安指出的那样,我在这里的主要错误是在初始规则(编程)中我使用了"事件"而不是"事件+"这将解决问题。

感谢阿德里安。