【发布时间】:2013-04-16 09:21:12
【问题描述】:
我正在为具有两个当前“冲突”功能的 DSL 开发解析器:
-
123.4等浮点数。 - 范围指定为
ID[2..5](ID 定义为'a'..'z'+,并不重要。'[2..5]' 部分最重要。
应该解析它的测试语法如下所示:
grammar DotTest;
span returns [double value]
: ID'['e=INT'..'f=INT']' { /*some code to process the values*/ $value = (double)(Int32.Parse($e.text) + Int32.Parse($f.text)); } ;
num returns [double value]
: DOUBLE {$value = double.Parse($DOUBLE.text); } ;
INT : '0'..'9'+ ;
DOUBLE : '0'..'9'+'.''0'..'9'+ ;
ID : 'a'..'z'+ ;
WS : ( ' ' | '\t' | '\r' | '\n' ) {$channel=HIDDEN;} ;
问题:规则span 无法正确解析其输入,因为它与DOUBLE 令牌冲突。词法分析器尝试将2..5 匹配为DOUBLE 并失败。以下是它在 ANTLR Works 中的外观:
解决此冲突并正确解析span 中的两个INTs 的正确方法是什么?
P.S.我使用的是 ANTLR 3 而不是 ANTLR 4,因为我要生成一个 C# 解析器,目前 ANTLR 4 中没有实现。
【问题讨论】:
-
仅供参考,有一个针对 ANTLR4 的 C# 目标的早期版本:groups.google.com/forum/#!topic/antlr-discussion/1vhJja-k6NQ
-
@BartKiers 我正在尝试将链接问题的答案改编为我的语法。完成后,我将关闭问题作为重复或将语法作为解决方案发布。
-
@BartKiers 成功了,谢谢!另一个问题是为什么它有效。希望尽快解决。