Lex: печатать номера строк - PullRequest
       11

Lex: печатать номера строк

2 голосов
/ 20 сентября 2010

У меня есть исходный код, и я хотел бы добавить номера строк.

Что я сделал:

%{
    int lines=0;
%}

LINE \n

%%
{LINE} {ECHO;printf("%d", ++lines);}

Однако я не знаю, как поймать первую строку. Вы можете мне помочь?

Ответы [ 4 ]

3 голосов
/ 20 сентября 2010

Добавьте строку:

printf("%d", ++lines);

как первое в главном.Это хак, но эффективный:)

Редактировать: Результат должен выглядеть примерно так:

%{
    int lines=0;
%}

LINE \n

%%
{LINE} {ECHO;printf("%d", ++lines);}
%%

main()
{
    printf("%d", ++lines);
    yylex();
}

Отказ от ответственности: синтаксис из книги, фактически не скомпилированный.Возможно, вам придется немного помассировать.

2 голосов
/ 30 марта 2011

Попробуйте это:

%{
#include<stdio.h>    
int lines=0;
%}


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

int main()
{

yylex();
return 0;
}
1 голос
/ 11 апреля 2014
%{
int yylineno=0;
%}


%%
^(.*)\n {printf("%4d %s",++yylineno,yytext);
%%

int main(int argc, char **argv)
{
yyin=fopen(argv[1],"r");
yylex();
fclose(yyin);
}
0 голосов
/ 19 октября 2016

Проверьте, содержит ли ваша версия переменную с именем "yylineno", многие из них делают.

Я знаю, что flex 2.6.0 делает.

...