27.08.2013 Views

documentación

documentación

documentación

SHOW MORE
SHOW LESS

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

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!