Procesadores de lenguajes Proyecto: Generador Lenguaje M
Enviado por tomas • 9 de Enero de 2019 • 3.217 Palabras (13 Páginas) • 482 Visitas
...
Una vez que se comience a leer la parte de las entradas, lo primero que se hace es hacer el manejo de las clases de tokens, donde cada token es sustituido en la entrada para poder hacer uso de la tabla SLR1.
Cuando la clase que hace el manejo del algoritmo tiene todas sus estructuras de datos llenas, se manda a llamar el análisis de las entradas. En este análisis lo que se hace primero es buscar en la tabla SLR si existe algo en la posición tope pila estados con el tope de la pila de la entrada; si no existe nada el algoritmo muestra que hay un error, pero si existe algo puede haber 3 escenarios.
El primer escenario es que la celda contenga la operación shift en cuyo caso lo que se hace es hacer un push a la pila de estados el estado correspondiente al shift y remover el primer carácter de la lista que contiene la entrada y agregarlo a la pila de símbolos.
El segundo escenario que se puede dar es que la celda contenga la operación reduce, lo que se hace en este caso es extraer de la gramática la producción que indica la regla a la que se le tiene que aplicar el reduce, con la producción extraída se tiene que ver si la longitud de la ésta es menor o igual al tamaño de la pila de estados, se pueden dar dos escenarios; el primero es que la producción sea épsilon entonces en la tabla de símbolos se inserta la cabeza de la producción, el segundo escenario es que sea algo distinto a épsilon entonces se comparan los n elementos del cuerpo de la producción con los n elementos del tope de la pila de símbolos, si los n elementos son iguales, entonces se reemplazan éstos de la pila de símbolos por la cabeza de la producción y se aplica la función goto del tope de la pila de estados con la cabeza de producción y se agrega el estado obtenido de la tabla SLR a la pila de estados.
El tercer y último escenario es que la acción a realizar sea aceptar, si se llega a éste escenario quiere decir que se acepta la cadena.
Para hacer la impresión de la tabla en consola, se utiliza un string al cual se le concatenan los atributos a imprimir y se imprime dicha cadena al final de cada iteración del ciclo.
Si al final del algoritmo el resultado es falso (una variable boolean), se imprime que la cadena no fue aceptada; si fue verdadero, se imprime que la cadena fue aceptada.
Nótese que se apoyó de el software grammophone (http://mdaines.github.io/grammophone/) para la construcción de dicha tabla.
Gramática:
- S -> Commands .
- S -> func id ( Outs ) { Commands } S .
- S -> .
- Commands -> Command Commands' .
- Commands' -> Commands .
- Commands' -> .
- Command -> id Command' .
- Command -> If_exp .
- Command -> While .
- Command -> For .
- Command' -> Assign .
- Command' -> Assign2 .
- Assign2 -> [ Numbers ] = Expr ; .
- Numbers -> number Numbers2 .
- Numbers2 -> , Numbers .
- Numbers2 -> .
- Command' -> Func .
- Assign -> = Assign' ; .
- Assign' -> Expr .
- Assign' -> Matrix .
- Assign' -> ' string ' .
- Assign' -> id [ Numbers ] .
- Expr2 -> + Factor .
- Expr2 -> - Factor .
- Expr -> Factor Expr3 .
- Expr3 -> Expr2 Expr3 .
- Expr3 -> .
- Factor -> Term Factor2 .
- Factor2 -> Factor' Factor2 .
- Factor2 -> .
- Factor' -> * Term .
- Factor' -> / Term .
- Term -> ( Expr ) .
- Term -> number .
- Term -> id .
- If_exp -> if ( Comparison ) { Commands } ElseIf Else .
- ElseIf -> elseif ( Comparison ) { Commands } ElseIf .
- ElseIf -> .
- Else -> else { Commands } .
- Else -> .
- Comparison -> Expr Expr' .
- Expr' -> > Expr .
- Expr' ->
- Expr' -> >= Expr .
- Expr' ->
- Expr' -> == Expr .
- Expr' -> != Expr .
- Comparison -> ! ( Comparison ) .
- While -> while ( Comparison ) { Commands } .
- For -> for ( id = Expr until Expr ) { Commands } .
- Func -> ( Func' ) ; .
- Func' -> id Func2 .
- Func2 -> , Func' .
- Func2 -> .
- Outs -> out id Outs' .
- Outs -> in Ins .
- Outs' -> .
- Outs' -> , Outs .
- Ins -> id Ins' .
- Ins' -> .
- Ins' -> , in Ins .
- Matrix -> [ Matrix' .
- Matrix' -> Z ] .
- Matrix' -> Y ] .
- Z -> [ Y ] Z' .
-
...