我的lex如下:
LNUM [0-9]+
DNUM([0-9]*"."[0-9]+)|([0-9]+"."[0-9]*)
%%
{LNUM} {
printf("\t");ECHO;printf("\r\n");
}
{DNUM} {
printf("\t");ECHO;printf("\r\n");
}
但事实证明它只能匹配像这样的数字4.12
.2
,not 42
,45.
等等(那些缩进是匹配的)
Output:
1.
1.
.1
.1
12
12
我的目标是匹配整数和浮点数。
这里有人能告诉我上面出了什么问题吗?
迟到回答你的问题......但为了它的价值,我尝试更换*
你在原始的 lex 文件中(第二个模式为DNUM
)与一个+
(因为这确保了小数点右侧至少有一位数字,以便该数字被计为小数......)并且它至少对我来说似乎有用。希望这对将来的人有帮助。
莱克斯文件:
%{
#include <iostream>
using namespace std;
%}
LNUM [0-9]+
DNUM ([0-9]*"."[0-9]+)|([0-9]+"."[0-9]+)
%option noyywrap
%%
{LNUM}* { cout << "lnum: " << yytext << endl; }
{DNUM}* { cout << "dnum: " << yytext << endl; }
%%
int main(int argc, char ** argv)
{
yylex();
return 0;
}
输入示例(在命令行上):
$ echo "4.12 .2 42 45. " | ./lexer
dnum: 4.12
dnum: .2
lnum: 42
lnum: 45.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)