我有一个非常简单的示例文本,我想用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 ...”并且解析树不正确
感谢任何帮助改变语法以正确解析它。
谢谢, 布丝
答案 0 :(得分:1)
除了丢失的循环说明符之外,您的WS规则中也存在问题。第一个alt匹配任何东西。删除它。而且,顺便说一下,给你的DIGIT规则一个不同的名字。它匹配的不仅仅是数字。
答案 1 :(得分:0)
正如阿德里安指出的那样,我在这里的主要错误是在初始规则(编程)中我使用了"事件"而不是"事件+"这将解决问题。
感谢阿德里安。