flex 词法分析器中的定义 - 如何定义科学记数法
Definitions in flex lexical analyzer - How to define scientific notation
我刚开始使用 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}+
一个可能的解决方案,比你的稍微短一点,是:
{digit}+"."{digit}*([eE][-+]?{digit}+)?
分解
{digit}+"."{digit}
匹配正实数(它不会识别整数)。
(...)?
将下一部分括在括号中后跟一个问号,使里面的内容可选。
[eE][-+]?{digit}+
匹配指数。请注意,在这种情况下,-
没有在方括号 中转义 因为它是列表的第一个或最后一个字符,正如@rici 指出的那样。
我只想指出,您在这里没有识别负数,但我不知道这是不是故意的。
我刚开始使用 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}+
一个可能的解决方案,比你的稍微短一点,是:
{digit}+"."{digit}*([eE][-+]?{digit}+)?
分解
{digit}+"."{digit}
匹配正实数(它不会识别整数)。(...)?
将下一部分括在括号中后跟一个问号,使里面的内容可选。[eE][-+]?{digit}+
匹配指数。请注意,在这种情况下,-
没有在方括号 中转义 因为它是列表的第一个或最后一个字符,正如@rici 指出的那样。
我只想指出,您在这里没有识别负数,但我不知道这是不是故意的。