Flex 词法分析器中的定义 - 如何定义科学记数法

问题描述 投票:0回答:2

我是使用 flex 的新手,需要定义真正的文字数字,即。 3.1 或 3.0e-10 为可接受的数字。这是我到目前为止所拥有的:

digit       [0-9]
int     {digit}+
real_literal  ({digit}+)("."{digit}*)

根据我的理解,这适用于小数,而不接受像 12.52.23 这样的东西

我如何定义接受科学记数法的数字,例如上面提到的 3.0e-10?

会是这样吗?

real_literal  ({digit}+)("."{digit}*)|({digit}+)("."{digit})[Ee]["-""+"]{digit}+
regex flex-lexer
2个回答
0
投票

一个可能的解决方案,比你的短一点,是:

{digit}+"."{digit}*([eE][-+]?{digit}+)?

崩溃

  • {digit}+"."{digit}
    匹配正实数(它不会识别整数)。
  • (...)?
    将下一部分括在括号中,后跟问号,使得里面的内容是可选的。
  • [eE][-+]?{digit}+
    匹配指数。请注意,
    -
    不会在方括号内转义在这种情况下,因为它是列表的第一个或最后一个字符,正如@rici指出的那样。

我只是想指出你在这里无法识别负数,但我不知道这是否是故意的。


0
投票

使用上述规则时,我看到奇怪的 segv。完全不明白。这是指数部分存在“e”。如果仅使用“E”一切都很好。

这只发生在 Linux 上。

© www.soinside.com 2019 - 2024. All rights reserved.