documentación
documentación
documentación
Create successful ePaper yourself
Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.
El valor del token ENTERO es pasado a la acción asociada con la regla lineas . En la acción de<br />
ésta, $2 se refiere al valor de linea.<br />
La tercera parte del ejemplo contiene una sentencia #include que incluye el código fuente<br />
del analizador léxico.<br />
Una especificación para una simple Máquina de Sumar<br />
Se trata de una máquina que lleva una cuenta total y permite sumar o restar de ese total.<br />
También se puede resetear el total a cero o a cualquier otro valor. La entrada consiste en un<br />
número opcionalmente precedido por un +, un -, o un =. Por ejemplo, si la primera entrada es 4 o<br />
+4, se imprime =4. Si la próxima entrada es -3, se imprime =1. Si la entrada es = o =0, el total se<br />
resetea a 0, y se imprime =0.<br />
Especificación para Yacc:<br />
%{<br />
int sum_total = 0;<br />
%}<br />
%token ENTERO<br />
%%<br />
lineas: /* vacía */<br />
| lineas linea<br />
;<br />
linea: ´\n´<br />
| expr´\n´<br />
{ printf(¨= %d\n¨, sum_total); }<br />
;<br />
expr: ENTERO {sum_total += $1; }<br />
| ´+´ ENTERO {sum_total += $2; }<br />
| ´-´ ENTERO {sum_total -= $2; }<br />
| ´=´ ENTERO {sum_total = $2; }<br />
| ´=´ {sum_total = 0; }<br />
;<br />
%%<br />
#include ¨lexyy.c¨<br />
La acción principal en esta especificación es setear la variable sum_total de acuerdo con la<br />
entrada y luego imprimir el nuevo valor. La sección de declaraciones contiene la declaración e<br />
inicialización de sum_total. Se crea esta variable para llevar el total. Luego, se declara un único<br />
token, ENTERO.<br />
La primera regla es la misma que la del ejemplo anterior. Esta vez, sin embargo, no hay<br />
acción asociada. Permite leer una serie de líneas, no sólo una.<br />
La regla para linea tiene definiciones alternativas. Un newline o una expr seguida por un<br />
newline son aceptadas. Así, se pueden ingresar líneas en blanco al programa sin causar un error<br />
de sintaxis. Un newline o una expr seguida por un newline ejecuta la acción de imprimir el total<br />
actual.<br />
12