Ejemplos de fuentes lex

Solo disponible en BuenasTareas
  • Páginas : 3 (526 palabras )
  • Descarga(s) : 0
  • Publicado : 1 de diciembre de 2010
Leer documento completo
Vista previa del texto
Autómatas y lenguajes formales.

Área de Lenguajes y Sistemas Informáticos. Universidad de Burgos.

Ejemplos de fuentes LEX
Ejemplo 1. Programa para detectar números.
%% [\n\t ] ;-?(([0-9]+)|([0-9]*\.[0-9]+)([eE][-+]?[0-9]+)?) { printf("num:\ %s\n",yytext); } . ; %% main() { yylex(); }

Ejemplo 2. Programa para detectar (casi) comentarios.
%{ int comments, code, whiteSpace; %} %sCOMMENT %% ^[ \t]*"/*" { BEGIN COMMENT; /* inicio de comentario */ } ^[ \t]*"/*".*"*/"[ \t]*\n { comments++; /* comentario autocontenido */ } "*/"[ \t]*\n { BEGIN 0; comments++;} "*/" { BEGIN 0; } \n{ comments++; } .\n { comments++; } ^[ \t]*\n { whiteSpace++; }

.+"/*".*"*/".*\n { code++; } .*"/*".*"*/".+\n { code++; } .+"/*".*\n { code++; BEGIN COMMENT; } .\n { code++; } . ; /* cualquierotra cosa es ignorada */ %% main() { yylex(); printf("líneas de código: %d, de comentario %d, en blanco %d\n", code, comments, whiteSpace); }

Autómatas y lenguajes formales.

Área de Lenguajes ySistemas Informáticos. Universidad de Burgos. Ejemplo 3. Programa contador de caracteres, palabras y líneas.
%{ unsigned charCount = 0, wordCount = 0, lineCount = 0; %} word [^ \t\n]+ eol \n %%{word} { wordCount++; charCount += yyleng; } {eol} { charCount++; lineCount++; } . charCount++; %% main(argc,argv) int argc; char **argv; { if (argc > 1) { FILE *file; file = fopen(argv[1], "r"); if(!file) { fprintf(stderr,"No se puede abrir %s\n",argv[1]); exit(1); } yyin = file;

} yylex(); printf("\t%d\t%d\t%d\t%s\n",charCount, wordCount, lineCount,argv[1]); return 0; }

Autómatas ylenguajes formales.

Área de Lenguajes y Sistemas Informáticos. Universidad de Burgos. Ejemplo 4. Programa contador de caracteres, palabras y líneas (múltiples ficheros).
%{ unsigned long charCount = 0,wordCount = 0, lineCount = 0; #undef yywrap /* algunas veces una macro por defecto */ %} word eol \n %% [^ \t\n]+

{word} {wordCount++; charCount+=yyleng; } {eol} { charCount++; lineCount++; } ....
tracking img