Sie sind auf Seite 1von 9

ndice

ACCIONES AGREGADAS EN UN ANALIZADOR SINTCTICO DESCENDENTE (TOP-DOWN). ................. 2 PILA SEMANTICA EN UN ANALIZADOR SINTACTICO ASCENDENTE (BOTTOM - UP) ........................... 8 Bibliografa .......................................................................................................................................... 9

ACCIONES AGREGADAS EN UN ANALIZADOR SINTCTICO DESCENDENTE (TOP-DOWN).


Analizador sintctico descendente (Top-Down-Parser): un analizador puede empezar con el smbolo inicial e intentar transformarlo en la entrada intuitivamente esto sera ir dividiendo la entrada progresivamente en partes cada vez ms pequeas de esta forma funcionan los analizadores. En un parser recursivo-descendente, el cdigo de las acciones semnticas es mezclado dentro del flujo de control de las acciones del parser. En un parser especificado en javaCC, las acciones semnticas son fragmentos de cdigo de programa en java unido a las producciones gramaticales. Cada smbolo terminal y no terminal puede asociarse con su propio tipo de valor semntico. Los otros tokens no necesitaran tener un valor. Por otra parte el tipo asociado a un token debe por supuesto coincidir con el tipo de token que el scanner retorne. Recursivo-descendente

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.

Generacin de representaciones Intermedias


Existen dos representaciones intermedias principales: Notacin Sufija Cudruplas

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

Anlisis de la notacin sufija


La gramtica completa que permite analizar la notacin sufija es :<Operando> ::= id | cte | <Operando> <Operando> <Operador didico> | <Operando> <Operador mondico> <Operador didico> ::= + | - | * | / | ...

<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>

Extensin de la notacin sufija a otros operadores


La asignacion, teniendo en cuenta que podemos no querer valor resultante. Adems, no interesa tener una pila el valor del identificador izquierdo, sino su direccin. a;=b*c+d abc*d+:= La tranferencia (GOTO) GOTO LL TR La instruccin condicional if p then inst1 else inst2 se convierte en p L1 TRZ inst1 L2 TR inst2 L1: L2:

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.

PILA SEMANTICA EN UN ANALIZADOR SINTACTICO ASCENDENTE (BOTTOM - UP)


Analizador sintctico ascendente (Bottom-Up-Parser): un analizador puede empezar con la entrada e intentar llegar hasta el smbolo inicial intuitivamente el analizador intenta encontrar los smbolos ms pequeos y progresivamente construir la jerarqua de smbolos hasta el inicial, los analizadores LR funcionan as y un ejemplo es el Yacc. El diseo ascendente se refiere a la identificacin de aquellos procesos que necesitan computarizarse con forme vayan apareciendo, su anlisis como sistema y su codificacin, o bien, la adquisicin de paquetes de software para satisfacer el problema inmediato. Los problemas de integracin entre los subsistemas son sumamente costosos y muchos de ellos no se solucionan hasta que la programacin alcanza la fecha lmite para la integracin total del sistema. En el diseo ascendente el usuario debe crear sus herramientas conforme vayan generndose nuevas necesidades, por lo cual tendr que modificar los procesos o si es necesario crear nuevos, con el fin de poder cubrir estas necesidades. En muchas ocasiones surgen problemas de integracin entre los subsistemas o procesos, al momento de construir el sistema lo cual causa un entorpecimiento en el avance de este, para resolver este tipo de conflictos es necesario llevar un registro de todos aquellas modificaciones que se realicen a este con el fin de poder resolver estos conflictos y cumplir con los periodos de tiempos. Pila semntica Los problemas de integracin entre los subsistemas son sumamente costosos y muchos de ellos no se solucionan hasta que la programacin alcanza la fecha lmite para la integracin total del sistema. Se necesita una memoria auxiliar que nos permita guardar los datos intermedios para poder hacer la comparacin.

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.

Das könnte Ihnen auch gefallen