next up previous contents index PLPL moodlepserratamodulosperlmonksperldocapuntes LHPgoogleetsiiullpcgull
Sig: El Análisis Léxico en Sup: La Gramática de yapp Ant: El Cuerpo Err: Si hallas una errata ...


La Cola: Diferencias entre yacc y yapp

La cola de un program yapp contiene las rutinas de soporte.
tail:   /*empty*/
    |   TAILCODE
el terminal TAILCODE al igual que los terminales CODE y HEADCODE indican que en ese punto se puede encontrar código Perl. La detección de TAILCODE y HEADCODE son mas sencillas que las de CODE.

La cola de un programa yacc es similar. Para el programa yacc cuya cabecera y cuerpo se mostraron en la sección 7.19.2 la cola es:

 1 %%
 2 
 3 extern FILE * yyin;
 4 
 5 main(int argc, char **argv) {
 6   if (argc > 1) yyin = fopen(argv[1],"r");
 7   /* yydebug = 1;
 8   */
 9   yyparse();
10 }
11 
12 yyerror(char *s) {
13   printf("%s\n",s);
14 }

La declaración del manejador de fichero yyin en la línea 14 referencia el archivo de entrada para el analizador. La variable (comentada, línea 7) yydebug controla la información para la depuración de la gramática. Para que sea realmente efectiva, el programa deberá además compilarse definiendo la macro YYDEBUG. Sigue un ejemplo de Makefile:

 1   inherited: y.tab.c lex.yy.c
 2      gcc -DYYDEBUG=1 -g -o inherited1 y.tab.c lex.yy.c
 3   y.tab.c y.tab.h: inherited1.y 
 4      yacc -d -v inherited1.y 
 5   lex.yy.c: inherited1.l y.tab.h
 6      flex -l inherited1.l
 7   clean:
 8      - rm -f y.tab.c lex.yy.c *.o core inherited1

Al compilar tenemos:

pl@nereida:~/src/inherited$ make
yacc -d -v inherited1.y
flex -l inherited1.l
gcc -DYYDEBUG=1 -g -o inherited1 y.tab.c lex.yy.c
pl@nereida:~/src/inherited$ ls -ltr
total 232
-rw-r-----  1 pl users   242 Dec 10  2003 Makefile
-rw-r-----  1 pl users   404 Dec 10  2003 inherited1.l
-rw-r-----  1 pl users   878 Dec 10  2003 inherited1.y
-rw-rw----  1 pl users  1891 Jan 26 15:41 y.tab.h
-rw-rw----  1 pl users 30930 Jan 26 15:41 y.tab.c
-rw-rw----  1 pl users  2365 Jan 26 15:41 y.output
-rw-rw----  1 pl users 44909 Jan 26 15:41 lex.yy.c
-rwxrwx--x  1 pl users 56336 Jan 26 15:41 inherited1


next up previous contents index PLPL moodlepserratamodulosperlmonksperldocapuntes LHPgoogleetsiiullpcgull
Sig: El Análisis Léxico en Sup: La Gramática de yapp Ant: El Cuerpo Err: Si hallas una errata ...
Casiano Rodríguez León
2012-05-22