гибкий синтаксический анализ - сложный символ - PullRequest
1 голос
/ 29 января 2020

Я новичок в flex, я просто пытаюсь разобрать число:

%{
  #include <iostream>
  using namespace std;
  extern int yylex();
%}
%option noyywrap

DIGIT    [0-9]
ID       [a-z][a-z0-9]*
NUM      {DIGIT}*"."{DIGIT}* | {DIGIT}+

%%
{NUM}   {printf("Number encountered : %s\n",yytext);}
%%
int main(int, char**) {
  while (yylex());
}

Когда я заменяю строку Number encountered на

{DIGIT}+    { printf( "Number %s\n", yytext);}
{DIGIT}*"."{DIGIT}*       { printf( "Number %s\n", yytext);}

Я получаю вывод , но теперь я не.

Я имею в виду, что это не правильно анализирует. Ничего не печатается.

Как можно решить эту проблему?

Текущий код:

%{
  #include <iostream>
  using namespace std;
  extern int yylex();
%}
%option noyywrap

WS  [ \t\n]+
DIGIT    [0-9]
NUM      ({DIGIT}*"."{DIGIT}*|{DIGIT}+)
%%
NUM {printf("num : %s\n",yytext);}
%%

Ответы [ 2 ]

0 голосов
/ 06 февраля 2020

Просто сделайте это:

NUMBER  {N}+|{N}+"."{N}+|"."{N}+|{N}+"."
0 голосов
/ 29 января 2020

Шаблоны не могут содержать неэкранированные пробелы, поэтому шаблон в первой попытке недопустим.

Удалите пробелы вокруг |.

...