Поздний ответ на ваш вопрос ... но ради чего я пытался заменить *
, который вы имели в исходном файле 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;
}
пример ввода (в командной строке):
$ echo "4.12 .2 42 45. " | ./lexer
dnum: 4.12
dnum: .2
lnum: 42
lnum: 45.