

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

