不明确的ANTLR解析器规则
我有一个非常简单的示例文本,我想用ANTLR解析,但由于规则的含糊不清而导致错误的结果。不明确的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 ...” 并解析树是不正确
感谢所有帮助改变语法来正确地解析它。
感谢, 布西
除了缺少循环说明符之外,您的WS规则中也有问题。第一个ALT匹配任何东西。删除。顺便说一句,给你的数字规则一个不同的名字。它不仅仅是数字。
你当然是对的,谢谢! – baruchl 2015-04-01 08:31:30
阿德里安指出的那样,我在这里主要错误是,在初始规则(前卫),我用“事件”,而不是“事件+”,这将解决这一问题。
谢谢阿德里安。
尽管如此,即使丢失循环,它也不应该与第二个#define匹配,因为哈希符号不是数字规则的一部分。也许树打印输出是越野车? – 2015-04-01 07:08:03
谢谢迈克。请注意,他与“#define”不匹配,红色部分表示意外输入。 – baruchl 2015-04-01 08:30:56
啊,这当然是有道理的。 – 2015-04-01 09:52:14
您是如何生成图表的?第二个例子根据你的语法无效,因为'prog'只是一个'event'。 – 2015-03-31 14:50:06
嗨艾德里安,感谢您的评论。 我使用AntlWorks2来生成图形。 http://tunnelvisionlabs.com/products/demo/antlrworks – baruchl 2015-03-31 17:01:55