2010-04-20 23 views
1

我认为ANTLR词法分析器正在将我在范围表达式"1...3"中的尝试当作浮点数处理。表达"x={1...3}"是走出词法分析器作为"x={.3}"当我用下面的标记定义:ANTLR lexing越来越困惑'...'并漂浮

FLOAT 
    : ('0'..'9')+ ('.' '0'..'9'+)? EXPONENT? 
    | ('.' '0'..'9')+ EXPONENT? 
    ; 

AUTO : '...'; 

当我改变FLOAT只检查整数,像这样:

FLOAT : ('0'..'9')+; 

则表达式"x={1...3}"被正确标记。任何人都可以帮我解决这个问题吗?

谢谢!

+0

是表达式“x = {1..3}”还是“x = {1 ... 3}”。你有两种写法。 – 2010-04-20 19:19:32

+0

表达式是“x = {1 ... 3}”,只是一个错字。 – 2010-04-20 19:51:23

回答

1

我认为词法分析器会将您的第一个时间段放入FLOAT标记中,然后剩下的两个时间段不会生成您的AUTO标记。您将需要一个谓词来确定句点是否应该是浮动或自动令牌的一部分。

那么,为什么你使用三个句点而不是两个,必须使用两个句点作为“范围”,语言应该确定该句点是否属于浮动的一部分或基于下面的“字符”范围。

您可能需要查看有关如何为不同规则构建谓词的定义ANTLR参考。

希望这可以帮助您找到完成任务的正确方法。

1

WayneH点击您的问题。你已经允许浮动格式为“.3”(没有前导0)。所以,词法分析器识别最后一个。和3并认为它是一个浮点数。结果它没有看到三个点。它看到两个点和一个浮点。

对于语言来说,禁止这种浮点格式并要求小数点左边至少有一位数(即使是0)是很常见的。我相信对语法的改变可以解决你的问题。

可能有一种方法可以用谓词修复它,但我还没有花足够的时间与ANTLR一起看到明显的方式。