• Like
Tr asem-ver
Upcoming SlideShare
Loading in...5
×

Tr asem-ver

  • 515 views
Uploaded on

 

  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Be the first to comment
    Be the first to like this
No Downloads

Views

Total Views
515
On Slideshare
0
From Embeds
0
Number of Embeds
0

Actions

Shares
Downloads
1
Comments
0
Likes
0

Embeds 0

No embeds

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
    No notes for slide

Transcript

  • 1. Análisis semánticoTabla de símbolos, chequeo de tipos y representaciones internas An´ lisis sem´ tico v1.1 c 2005 Jos´ Fortes G´ lvez– p.1 a a e a
  • 2. ¿Análisis? ... ¿semántico? La semántica corresponde al significado asociado a las estructuras formales (sintaxis) del lenguaje. An´ lisis sem´ tico v1.1 c 2005 Jos´ Fortes G´ lvez– p.2 a a e a
  • 3. ¿Análisis? ... ¿semántico? La semántica corresponde al significado asociado a las estructuras formales (sintaxis) del lenguaje. Como las gramáticas (E)BNF —además normalmente limitadas a LR o LL— no pueden describir todos los elementos sintácticos del lenguaje, se hace preciso algún análisis adicional... An´ lisis sem´ tico v1.1 c 2005 Jos´ Fortes G´ lvez– p.2 a a e a
  • 4. ¿Análisis? ... ¿semántico? La semántica corresponde al significado asociado a las estructuras formales (sintaxis) del lenguaje. Como las gramáticas (E)BNF —además normalmente limitadas a LR o LL— no pueden describir todos los elementos sintácticos del lenguaje, se hace preciso algún análisis adicional... Así, se denomina tradicionalmente “análisis semántico” a todo aquello que forma parte del frontal [front-end] más allá de lo que la gramática utilizada nos permite: An´ lisis sem´ tico v1.1 c 2005 Jos´ Fortes G´ lvez– p.2 a a e a
  • 5. ¿Análisis? ... ¿semántico? La semántica corresponde al significado asociado a las estructuras formales (sintaxis) del lenguaje. Como las gramáticas (E)BNF —además normalmente limitadas a LR o LL— no pueden describir todos los elementos sintácticos del lenguaje, se hace preciso algún análisis adicional... Así, se denomina tradicionalmente “análisis semántico” a todo aquello que forma parte del frontal [front-end] más allá de lo que la gramática utilizada nos permite: Tabla de símbolos Chequeos de tipos (y otros) Generación de representación interna An´ lisis sem´ tico v1.1 c 2005 Jos´ Fortes G´ lvez– p.2 a a e a
  • 6. Ejemplo de extensióndel análisis sintáctico La tabla de símbolos permite que el analizador léxico devuelva un token distinto según la categoría del identificador en ese contexto. Con esta técnica: En el fondo, estamos introduciendo “dependencia del contexto” sobre una gramática independiente del contexto. Por tanto, aumentamos la potencia del análisis sintáctico Podemos resolver algunos conflictos y así evitar modificar la gramática o el lenguaje An´ lisis sem´ tico v1.1 c 2005 Jos´ Fortes G´ lvez– p.3 a a e a
  • 7. Tabla(s) de símbolos Va conteniendo un registro por cada identificador definido/declarado por el programador, añadiéndose información asociada: Ristra del identificador (¿mayúsculas y minúsculas?) Categoría: variable, constante, tipo, campo, procedimiento, función, parámetro, clase, etiqueta, módulo, macro, etc. A qué ámbito pertenece (profundidad) Otra información según categoría: tamaño; ubicación; valor; enlaces a tipo, parámetros o campos (enlaces); si parcialmente definido; etc. An´ lisis sem´ tico v1.1 c 2005 Jos´ Fortes G´ lvez– p.4 a a e a
  • 8. Estructura de la tabla de símbolos Su estructura lógica viene determinada por: El tipo de ámbito (estático o dinámico) Los mecanismos de ámbito del lenguaje: procedimientos, bloques, herencia, módulos, espacios de nombres, registros, with, ... Si se da más de una pasada. Compilación separada: ficheros con tablas Su implementación física más eficiente suele ser la de una tabla hash, asociada a pila de ámbitos activos. Truco: mover (insertar, al menos) el elemento actual a la cabeza de la lista Las ristras (identificadores, constantes) pueden ir en lista(s) aparte. An´ lisis sem´ tico v1.1 c 2005 Jos´ Fortes G´ lvez– p.5 a a e a
  • 9. Una buena función hash Si llamamos ci a los códigos de los caracteres y n la longitud de la ristra: h0 = 0 hi = khi−1 + ci H = (hn mod 230 ) mod 1008 Pueden usarse valores de k = 613 (preferentemente) o k = 4 (más rápido pero peor distribución) An´ lisis sem´ tico v1.1 c 2005 Jos´ Fortes G´ lvez– p.6 a a e a
  • 10. Chequeos de tipos (y otros) Un compilador debe realizar una serie de chequeos estáticos, como chequeos de tipos: Consistencia: unicidad, existencia, no-ciclicidad, ... Equivalencia y compatibilidad de tipos Conversión explícita [cast] o forzada [coercion] Inferencia de tipos (en valores) Sobrecarga de funciones y operadores Funciones polimórficas, u otros (p.e., consistencia de instrucciones de control). En otros casos, debe generar código para realizar che- queos dinámicos (p.e., valor dentro de rango). An´ lisis sem´ tico v1.1 c 2005 Jos´ Fortes G´ lvez– p.7 a a e a
  • 11. Definiciones de tipos También llamadas “expresiones de tipos”, en las que el programador desarrolla los componentes de la estructura. Cuestiones: Puede ser conveniente construir un árbol/grafo: En caso de equivalencia estructural Para comprobación de no-ciclicidad: type a=b; b=a; (Descomponer en) tipos anónimos Las definiciones incompletas (declaraciones) son necesa- rias para definiciones recursivas: entrada en tabla provi- sionalmente “vacía” para tipo base. An´ lisis sem´ tico v1.1 c 2005 Jos´ Fortes G´ lvez– p.8 a a e a
  • 12. El árbol sintáctico abstracto (1/2) En inglés (abstract) syntax tree, AST, para distinguirlo del árbol del análisis según la gramática [parse tree]. if(a<3) {b=2*a;}; if-then < := a 3 b * 2 a An´ lisis sem´ tico v1.1 c 2005 Jos´ Fortes G´ lvez– p.9 a a e a
  • 13. El árbol sintáctico abstracto (2/2) Representación compacta correspondiente a una gramática sin limitaciones de método de análisis, caracterizada por que los nodos interiores son operadores, en sentido amplio. Útil para ser “anotado” o “decorado” con atributos en recorridos ulteriores, y a partir de ahí: Realizar chequeos Generar código (intermedio) Con frecuencia se puede simular su recorrido (sin cons- truirlo) durante el análisis sintáctico. An´ lisis sem´ tico v1.1 c 2005 Jos´ Fortes G´ lvez– p.10 a a e a
  • 14. Representaciones internas (1/2) Intermedias entre frontal [front-end] y dorsal [back-end], permiten desacoplar los diseños de unos y otros. Orientadas a: Su optimización (instrucciones claras y simples) Generar código de distintas máquinas objeto El diseño debe permitir su fácil generación por el analiza- dor semático. An´ lisis sem´ tico v1.1 c 2005 Jos´ Fortes G´ lvez– p.11 a a e a
  • 15. Representaciones internas (2/2) Podemos clasificarlas por su nivel de abstracción (distancia a la máquina objeto real): Alto: próxima al árbol abstracto, con correspondencia con las estructuras del lenguaje Medio: instrucciones de máquina virtual (a veces realmente implementada: P-code, bytecode), tales como tuplas de tres direcciones Bajo: máquina próxima al ensamblador, con un amplio número de registros Algunos compiladores pasan por varias representaciones de distintos niveles de abstracción. An´ lisis sem´ tico v1.1 c 2005 Jos´ Fortes G´ lvez– p.12 a a e a
  • 16. CuádruplasOperaciones con hasta tres direcciones, que pueden servariables del programa o temporales: x := y op z Ó x := op z ó x := z x := y[z] ó x[y] := z if x op y goto L ó goto L param x1 , ..., param xn , call p(n)Podemos entenderlas como una linealización de un ciertotipo de árbol abstracto. An´ lisis sem´ tico v1.1 c 2005 Jos´ Fortes G´ lvez– p.13 a a e a
  • 17. Ejemplo de cuádruplas ... := i a := t8 b for i in a..b do if >goto i t8 L5 ... L4: ... endfor; if = goto i t8 L5 := + i i 1 goto L4 L5: ... An´ lisis sem´ tico v1.1 c 2005 Jos´ Fortes G´ lvez– p.14 a a e a
  • 18. C/C++ como lenguaje objeto Generar C/C++ en lugar de bajo nivel aporta ventajas: Nos ahorramos programar (al menos inicialmente) la generación de código objeto “real” Permite descargar en C/C++ la mayor parte de la gestión de pila, heap, E/S, ... Permite aprovechar la optimización de un buen compilador de C/C++ Independencia de la máquina objeto (o casi: tamaños de referencias, p.e.) y del s.o. con los inconvenientes de que la eficiencia de los ejecu- tables no será óptima y de estar sujetos a las limitaciones del compilador de C/C++. An´ lisis sem´ tico v1.1 c 2005 Jos´ Fortes G´ lvez– p.15 a a e a
  • 19. Generación de C/C++ Posible implementación para lenguajes imperativos: Una función void C/C++ por cada rutina del lenguaje fuente Se crean localmente variables temporales conforme se necesitan (C++ más práctico); el optimizador las podrá eliminar en su caso Una union de vectores de tipos básicos contendrá las variables de cada ámbito, incluyendo las auxiliares como enlaces, parámetros, ... Si áreas locales englobadas: gestionar pila de punteros usando enlaces estáticos o display An´ lisis sem´ tico v1.1 c 2005 Jos´ Fortes G´ lvez– p.16 a a e a
  • 20. Conclusión Elementos mínimos para la práctica de análisis semántico: Implementar una tabla de símbolos (no es necesario que sea hash) Implementar al menos parte del chequeo de tipos del lenguaje An´ lisis sem´ tico v1.1 c 2005 Jos´ Fortes G´ lvez– p.17 a a e a