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.
Debido a que un mismo número puede ser usado para identificar a una regla y también a un<br />
estado, puede producirse alguna confusión. La acción:<br />
. reduce 18<br />
se refiere a la regla 18 de la gramática, mientras que la acción:<br />
IF shift 34<br />
se refiere al estado 34.<br />
Supongamos que la regla:<br />
A : x y z ;<br />
está siendo reducida. La acción reduce depende del símbolo a la izquierda (A, en este caso)<br />
y el número de símbolos en el lado derecho (tres, en este caso). Al reducir, las tres estados en el<br />
tope de la pila se desapilan. (En general, el número de estados desapilados iguala al número de<br />
símbolos en el lado derecho de la regla). En efecto, estos estados eran los que se apilaron al<br />
reconocer x, y y z, y ya no servirán para ningún propósito. Al desapilar estos estados, queda<br />
descubierto el estado en que el parser estaba al comenzar a procesar la regla. Usando esta<br />
estado y el símbolo del lado izquierdo de la regla, se ejecuta un shift de un nuevo estado a pila, y<br />
el parsing continúa. Sin embargo, hay diferencias entre un shift normal y el procesamiento del<br />
símbolo del lado izquierdo, así que a esta acción se la llama goto. En particular, el token<br />
anticipado es borrado por un shift, pero no es afectado por un goto. Así que el estado<br />
descubierto al hacer el reduce contendrá una acción como la siguiente:<br />
A goto 20<br />
que produce que el estado 20 se apile y se convierta en el estado actual.<br />
En efecto, la acción reduce vuelve atrás el reloj del parser, desapilando estados hasta<br />
descubrir el estado en el que el lado derecho de la regla fue visto por primera vez. El parser se<br />
comporta, entonces, como si hubiera visto el lado izquierdo en ese momento.<br />
Las otras dos acciones del parser son conceptualmente mucho más simples. La acción<br />
accept indica que el parser ha visto la entrada completa y que ésta cumple con la<br />
especificación. Esta acción aparece sólo cuando el token anticipado es la marca de fin de<br />
archivo, e indica que parser ha completado su trabajo. La acción error representa un lugar<br />
donde el parser no puede continuar el proceso de acuerdo con la especificación. Los tokens que<br />
ha visto, junto con el anticipado, no pueden ser seguidos por nada que constituya una entrada<br />
legal. El parser reporta el error e intenta recuperar la situación y continuar con el parsing.<br />
Sea la siguiente especificación Yacc:<br />
%token A B C<br />
%%<br />
lista : inicio fin<br />
;<br />
inicio : A B<br />
;<br />
fin : C<br />
;<br />
Cuando Yacc es ejecutado con la opción -v, produce un archivo llamado y.out que contiene<br />
una descripción legible del parser. El archivo y.out correspondiente a la gramática anterior (con<br />
algunas estadísticas al final) es el siguiente:<br />
6