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