Lex:打印行号

时间:2010-09-19 21:46:17

标签: count numbers line lex

我有源代码,我想添加行号。

我做了什么:

%{
    int lines=0;
%}

LINE \n

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

然而,我不知道如何抓住第一线。 你能救我吗?

4 个答案:

答案 0 :(得分:3)

添加以下行:

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

作为主要的第一件事。它是一个黑客,但一个有效的:)

编辑:结果应如下所示:

%{
    int lines=0;
%}

LINE \n

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

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

免责声明:书中的语法,实际上并未编译。你可能需要按摩一下。

答案 1 :(得分:2)

试试这个:

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


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

int main()
{

yylex();
return 0;
}

答案 2 :(得分:1)

%{
int yylineno=0;
%}


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

int main(int argc, char **argv)
{
yyin=fopen(argv[1],"r");
yylex();
fclose(yyin);
}

答案 3 :(得分:0)

检查您的版本是否提供名为&#34; yylineno&#34;的变量,其中许多都是。

我知道flex 2.6.0可以。