2010-09-19 93 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的確如此。