2010-09-19 26 views
2

J'ai un code source et j'aimerais ajouter des numéros de ligne.Lex: numéros de ligne d'impression

Ce que je l'ai fait:

%{ 
    int lines=0; 
%} 

LINE \n 

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

Cependant, je ne sais pas comment attraper la première ligne. Pouvez-vous m'aider?

Répondre

2

Ajouter la ligne:

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

comme la première chose principale. C'est un hack, mais un moyen efficace :) un

Edit: Le résultat devrait ressembler à ceci:

%{ 
    int lines=0; 
%} 

LINE \n 

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

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

Avertissement: la syntaxe d'un livre, pas réellement compilé. Vous devrez peut-être le masser un peu.

+0

Merci pour l'indice – g123k

2

Essayez ceci:

%{ 
#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

Vérifiez si votre version fournit une variable nommée "yylineno", beaucoup d'entre eux.

Je sais que flex 2.6.0 fait.