2010-09-19 50 views
2

我有一个源代码,我想添加行号。Lex:打印行号

我所做的:

%{ 
    int lines=0; 
%} 

LINE \n 

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

不过,我不知道如何捕捉到第一线。 你能帮我吗?

回答

2

添加一行:

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

在主要的第一件事。它是一个黑客,而是一个有效的:)

编辑:结果应该是这个样子:

%{ 
    int lines=0; 
%} 

LINE \n 

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

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

免责声明:从一本书的语法,而不是实际编译。你可能需要稍微按摩一下。

+0

感谢您的提示 – g123k 2010-09-20 17:52:20

2

试试这个:看

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


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

int main() 
{ 

yylex(); 
return 0; 
} 
1
%{ 
int yylineno=0; 
%} 


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

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

检查您的版本提供了一个名为 “yylineno” 变量,其中许多人做的。

我知道flex 2.6.0的确如此。