有问题的lex

时间:2011-08-07 08:20:13

标签: 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,而不是4245.等数字(缩进的匹配)

输出:

1.
1.
.1
    .1

12
12

我的目标是匹配整数和浮点数。

这里有人可以告诉我上面有什么问题吗?

1 个答案:

答案 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;
}