LINUX.ORG.RU

входной поток flex


0

0

Как переопределить входной поток flex в указанном ниже примере?


Из своей программы вызываю yylex(); для распознавания строк вида x=1.
Нужно читать произвольное число строк.

[ccode]
extern int X;
extern int d;
%}

Ds [0-9]+
S [ \t]*

%%

x{S}={S}{Ds} {
std::istringstream str(yytext);
std::string temp;
getline(str,temp,'=')>>d;
return X;
}

\n|. {}

%%

int yywrap(){
return 0;
}
[/ccode]

главная программа
[ccode]
include <iostream>
#include "lex.yy.c"

int X;
int d;

int main(){
yylex();
std::cout << "X=" << d << std::endl;
}
[/ccode]


Вызываю так
[code]
cat data | ./a.out
[/code]

а в data строки
x=12
x=13
x=14

Пока обрабатывается только первая строка, а нужно обработать все причем их число неизвестно заранее.

anonymous

> extern int X;

Заменить на enum yytokentype {X = 1};

> int X;

Убрать нафиг.

> yylex();

Заменить на while(yylex());

И таки неплохо было бы вдумчиво проработать info flex, прежде чем лезть ко взрослым людям с детскими проблемами. :P

ero-sennin ★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.