Beruflich Dokumente
Kultur Dokumente
ACCIONES AGREGADAS EN UN ANALIZADOR SINTCTICO DESCENDENTE (TOP-DOWN). ................. 2 PILA SEMANTICA EN UN ANALIZADOR SINTACTICO ASCENDENTE (BOTTOM - UP) ........................... 8 Bibliografa .......................................................................................................................................... 9
En un parser recursivo-descendente, las acciones semnticas son los valores retornados por las funciones de parsing, o los efectos laterales de esas funciones o ambos. Por cada smbolo terminal y no terminal, asociamos un tipo (desde el lenguaje de implementacin del LP del compilador) de valor semntico representando frases derivadas desde ese smbolo. Los tokens ID y NUM deben ahora acarrear valores de tipo string e int, respectivamente. Asumiremos que existe una tabla lookup que mapea identificadores a enteros. El tipo asociado con E, T, F, etc., es int, y la accin semntica es fcil de implementar. Muchas de las actividades que realiza un analizador semntico no son estndares, dependern del objetivo del lenguaje de programacin; por ejemplo, en algunas aplicaciones es interesante conocer que los datos estn en algn rango vlido o que ciertos valores se utilicen para uso reservado Acciones agregadas a un analizador semntico En algunas ocasiones nos interesa conocer el significado delas palabras de algn lenguaje dependiendo del contexto(gramticas de tipo 1) para diferenciar palabras poli semnticas
La Web es una base de datos en la mayora de los casos sinsentidos por lo que la tercera generacin de la Web ser la llamada Web semntica.
Los operadores didicos (o binarios) pueden especificarse mediante tres notaciones principales: Prefija: El operador didico es analizado antes que sus operandos. Infija: el operador didico es analizado entre sus operandos. Sufija: El operados didico es analizado despus que sus operandos. En los lenguajes de programacin clsicos, los operadores didicos se representan usualmente en notacin infija. La notacin prefija permite al operados influir sobre la manera en que se procesan sus operandos, pero a cambio suele exigir mucha mas memoria. La sufija no permite esa influencia, pero es ptima en proceso de memoria y permite eliminar el procesado de los parntesis. Los operadores mondicos solo pueden presentarse en notacin prefija o sufija.
Notacin sufija.
Llamada tambin postfija o polaca inversa, se usa para representar expresiones sin necesidad de parntesis. Ejemplo a*b ab* abcd/
a*(b+c/d) +* a*b+c*d
ab*cd*+ Los identificadores aparecen en el mismo orden. Los operadores en el de evaluacin( de izquierda a derecha). Problema: operadores mondicos (unarios). O bien se transforman en didicos (binarios) o se cambia el smbolo.
Ejemplo: -a se convierte en 0-a o en @a a*(-b+c/d) ab@cd/+* Existen dos problemas principales: Construir la notacin sufija a partir de la infija Analizar la notacin sufija en el segundo paso de la compilacin. Rutina semntica para transformar de infijo a sufijo Si el analizador sintctico es bottom-up, hacemos la siguiente suposicin:" Cuando aparece un no terminal V en el asidero, la cadena polaca correspondiente a la subcadena que se redujo a V ya ha sido generada". Se utiliza una pila donde se genera la salida, inicialmente vaca. Las acciones semnticas asociadas a las reglas son: E ::= E + T + E ::= E T -E ::= TT ::= T * F ::= T / F ::= F F ::= I F ::= (E) F ::= - F Push @ Push i Push Push Push * T Push / T
<Operador mondico> ::= @ | ... Algoritmo de evaluacin de una expresin en notacin sufija que utiliza una pila: Si el prximo smbolo es un identificador, se pasa a la pila. Corresponde a la aplicacin de la regla <Operando> ::= id Si el prximo smbolo es una constante, se pasa a la pila. Corresponde a la aplicacin de la regla <Operando> ::= cte Si el prximo smbolo es un operador diadico, se aplica el operador a los dos operandos situados en lo alto de la pila y se sustituyen estos por el resultado de la operacin. Corresponde a la aplicacin de la regla. <Operando> ::= <Operando> <Operando> <Operador didico> Si el prximo smbolo es un operados monadico, se aplica el operados al operando situado en lo alto de la pila y se sustituye este por el resultado de la operacin. Corresponde a la aplicacin de la regla <Operando> ::= <Operando> <Operador didico>
Subndices: a[exp1; exp2; ...; expn] se convierte en a exp1 exp2 ... expn SUBIN-n No se pone el resultado, se sustituye por referencias a tripletes. Por ejemplo: La expresin a*b+c*d equivale a: (1) (*,a,b) (2) (*,c,d) (3) (+,(1),(2)) mientras que a*b+1 equivale a: (1) (*,a,b) (2) (*,(1),1) Tripletes indirectos: Se numeran arbitrariamente los tripletes y se da el orden de ejecucin. Ejemplo, sean las instrucciones: a := b*c b := b*c Equivalen a los tripletes (1) (*,b,c) (2) (:=,(1),a) (3) (:=,(1),b) Y el orden de ejecucin es (1),(2),(1),(3). Esta forma es til para preparar la optimizacin de cdigo. Si hay que alterar el orden de las operaciones o eliminar alguna, es ms fcil hacerlo ah. Generacin automtica de cudruplas En un anlisis bottom-up, asociamos a cada smbolo no terminal una informacin semntica, y a cada regla de produccin una accin semntica. Ejemplo, sea la gramtica E ::= E + T E
::= E - T E ::= T T ::= T * F T ::= T / F T ::= F F ::= i F ::= (E) F ::= -F La regla F::=i asocia a F como informacin semntica el identificador concreto. La regla F::=(E) asocia a F como informacin semntica la informacin semntica asociada a E. La regla U::=V asocia a U como informacin semntica la informacin semntica asociada a V. La regla U::=VoW analiza la compatibilidad de los operandos, crea la cudrupla. (o,Sem(V),Sem(W),Ti) y asocia a U la informacin semntica Ti. La regla U::=oV crea la cudrupla (o,Sem(V),,Ti) y asocia a U la informacin semntica Ti. La informacin semntica se suele almacenar en otra pila paralela.
Tambin es una extensin de la notacin de Backus que consiste en introducir en reglas sintcticas ciertos smbolos adicionales no sintcticos (smbolos de accin) que, en definitiva, se reducen a llamas implcitas o explicitas a rutinas semnticas.
Bibliografa
Louden, K. (1997). Compiler Construction. Ullman, J. S. (1990). Compiladores: Principios, tecnicas y herramientas. Aho.