我的意思如下:
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
,而不是42
,45.
等数字(缩进的匹配)
输出:
1.
1.
.1
.1
12
12
我的目标是匹配整数和浮点数。
这里有人可以告诉我上面有什么问题吗?
答案 0 :(得分:1)
对你的问题的回答很晚......但是对于它的价值,我尝试用{{1}替换原始lex文件中的*
(DNUM
的第二种模式) (因为这确保你至少在小数点的右边有一个数字,以便将数字计算为小数......)并且它似乎对我有用,至少。希望这可以帮助将来的某个人。
lex档案:
+
示例输入(在命令行上):
%{
#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;
}