Programa LEX para agregar números de línea a un archivo dado

Lex es un programa de computadora que genera analizadores léxicos y fue escrito por Mike Lesk y Eric Schmidt.
Lex lee un flujo de entrada que especifica el analizador léxico y genera el código fuente que implementa el lexer en el lenguaje de programación C.

Requisito previo: Flex (generador de analizador léxico rápido)

Ejemplo:

Input:
#include<stdio.h>
// Driver Code
int main()
{
int a; 
/* we have to delete comments */
return 0;
}

Output:
1 #include<stdio.h>
2 // Driver Code
3 int main()
4 {
5 int a; 
6 /* we have to delete comments */
7 return 0;
8 }

Enfoque:
se encuentra una nueva línea debido a /n . Para contar el número de líneas, cuente el número de /n ocurrido con un valor inicial de 1, ya que existe una única línea inicial. Todas las demás cosas pueden ignorarse ya que el foco está en el número de /n . Tome un contador inicialmente establecido en 1 e increméntelo cada vez que ocurra una nueva línea (/n).

Archivo de entrada: testtest.c

A continuación se muestra la implementación para agregar números de línea a un archivo determinado.

/* Program to add line numbers
 to a given file*/
%{
int line_number = 1;  // initializing line number to 1
%}
  
/* simple name definitions to simplify
the scanner specification name 
definition of line*/
line .*\n    
  
%%
{line} { printf("%10d %s", line_number++, yytext); } 
  
 /* whenever a line is encountered increment count*/
  
 /* 10 specifies the padding from left side to 
                    present the line numbers*/
   
 /* yytext The text of the matched pattern is stored
                           in this variable (char*)*/
%%
  
int yywrap(){} 
  
int main(int argc, char*argv[])
{
extern FILE *yyin;    // yyin as pointer of File type
  
yyin = fopen("testtest.c","r");  /* yyin points to the file 
                                   testtest.c and opens it
                                   in read mode.*/
  
yylex();   // The function that starts the analysis.
  
return 0;
}

Producción:

Publicación traducida automáticamente

Artículo escrito por nickhilrawat y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *