Top Banner
Análisis semántico Tabla de símbolos, chequeo de tipos y representaciones internas An´ alisis sem´ atico v1.2 c 2005 Jos´ e Fortes– p.1
23

Análisis semántico - serdis.dis.ulpgc.esserdis.dis.ulpgc.es/~ii-pl/ftp/transp/tr-asem-ver.pdf · programador desarrolla los componentes de la estructura. Cuestiones: Puede ser conveniente

Feb 01, 2018

Download

Documents

trantuyen
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: Análisis semántico - serdis.dis.ulpgc.esserdis.dis.ulpgc.es/~ii-pl/ftp/transp/tr-asem-ver.pdf · programador desarrolla los componentes de la estructura. Cuestiones: Puede ser conveniente

Análisis semánticoTabla de símbolos, chequeo de tipos y

representaciones internas

Analisis sematico v1.2 c©2005 Jose Fortes– p.1 .

Page 2: Análisis semántico - serdis.dis.ulpgc.esserdis.dis.ulpgc.es/~ii-pl/ftp/transp/tr-asem-ver.pdf · programador desarrolla los componentes de la estructura. Cuestiones: Puede ser conveniente

¿Análisis? ... ¿semántico?

La semántica corresponde al significado asociado a lasestructuras formales (sintaxis) del lenguaje.

Como las gramáticas (E)BNF —además normalmentelimitadas a LR o LL— no pueden describir todos loselementos sintácticos del lenguaje, se hace preciso algúnaná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

Analisis sematico v1.2 c©2005 Jose Fortes– p.2 .

Page 3: Análisis semántico - serdis.dis.ulpgc.esserdis.dis.ulpgc.es/~ii-pl/ftp/transp/tr-asem-ver.pdf · programador desarrolla los componentes de la estructura. Cuestiones: Puede ser conveniente

¿Análisis? ... ¿semántico?

La semántica corresponde al significado asociado a lasestructuras formales (sintaxis) del lenguaje.Como las gramáticas (E)BNF —además normalmentelimitadas a LR o LL— no pueden describir todos loselementos sintácticos del lenguaje, se hace preciso algúnaná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

Analisis sematico v1.2 c©2005 Jose Fortes– p.2 .

Page 4: Análisis semántico - serdis.dis.ulpgc.esserdis.dis.ulpgc.es/~ii-pl/ftp/transp/tr-asem-ver.pdf · programador desarrolla los componentes de la estructura. Cuestiones: Puede ser conveniente

¿Análisis? ... ¿semántico?

La semántica corresponde al significado asociado a lasestructuras formales (sintaxis) del lenguaje.Como las gramáticas (E)BNF —además normalmentelimitadas a LR o LL— no pueden describir todos loselementos sintácticos del lenguaje, se hace preciso algúnaná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

Analisis sematico v1.2 c©2005 Jose Fortes– p.2 .

Page 5: Análisis semántico - serdis.dis.ulpgc.esserdis.dis.ulpgc.es/~ii-pl/ftp/transp/tr-asem-ver.pdf · programador desarrolla los componentes de la estructura. Cuestiones: Puede ser conveniente

¿Análisis? ... ¿semántico?

La semántica corresponde al significado asociado a lasestructuras formales (sintaxis) del lenguaje.Como las gramáticas (E)BNF —además normalmentelimitadas a LR o LL— no pueden describir todos loselementos sintácticos del lenguaje, se hace preciso algúnaná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

Analisis sematico v1.2 c©2005 Jose Fortes– p.2 .

Page 6: Análisis semántico - serdis.dis.ulpgc.esserdis.dis.ulpgc.es/~ii-pl/ftp/transp/tr-asem-ver.pdf · programador desarrolla los componentes de la estructura. Cuestiones: Puede ser conveniente

Ejemplo de extensióndel análisis sintáctico

La tabla de símbolos permite que el analizador léxicodevuelva un token distinto según la categoría delidentificador en ese contexto. Con esta técnica:

En el fondo, estamos introduciendo “dependenciadel contexto” sobre una gramática independiente delcontexto.

Por tanto, aumentamos la potencia delanálisis sintáctico

Podemos resolver algunos conflictos y así evitarmodificar la gramática o el lenguaje

Analisis sematico v1.2 c©2005 Jose Fortes– p.3 .

Page 7: Análisis semántico - serdis.dis.ulpgc.esserdis.dis.ulpgc.es/~ii-pl/ftp/transp/tr-asem-ver.pdf · programador desarrolla los componentes de la estructura. Cuestiones: Puede ser conveniente

Tabla(s) de símbolos

Va conteniendo un registro por cada identificadordefinido/declarado por el programador, añadiéndoseinformació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 ocampos; si incompletamente definido; etc.

Analisis sematico v1.2 c©2005 Jose Fortes– p.4 .

Page 8: Análisis semántico - serdis.dis.ulpgc.esserdis.dis.ulpgc.es/~ii-pl/ftp/transp/tr-asem-ver.pdf · programador desarrolla los componentes de la estructura. Cuestiones: Puede ser conveniente

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 lade una tabla hash, asociada a pila de ámbitos activos.

Truco: mover (insertar, al menos) el elemento actual a lacabeza de la lista

Las ristras (identificadores, constantes) pueden ir enlista(s) aparte. Analisis sematico v1.2 c©2005 Jose Fortes– p.5 .

Page 9: Análisis semántico - serdis.dis.ulpgc.esserdis.dis.ulpgc.es/~ii-pl/ftp/transp/tr-asem-ver.pdf · programador desarrolla los componentes de la estructura. Cuestiones: Puede ser conveniente

Ejemplo con open hashing

↓ int s(double, int);

↓ char c;

↓ int main() {

↓ typedef double real;

↓ while (c==0) {

↓ real x = 0.1;

↓ int c = 1;

↓ c = s(x, c);

↓ }

↓ }

↓ int s(double c, int d) {

↓ return c+d;

↓ }

c

?

?

s

main

Analisis sematico v1.2 c©2005 Jose Fortes– p.6 .

Page 10: Análisis semántico - serdis.dis.ulpgc.esserdis.dis.ulpgc.es/~ii-pl/ftp/transp/tr-asem-ver.pdf · programador desarrolla los componentes de la estructura. Cuestiones: Puede ser conveniente

Ejemplo con open hashing

↓ int s(double, int);

↓ char c;

↓ int main() {

↓ typedef double real;

↓ while (c==0) {

↓ real x = 0.1;

↓ int c = 1;

↓ c = s(x, c);

↓ }

↓ }

↓ int s(double c, int d) {

↓ return c+d;

↓ }

c

?

?

s

main

real

Analisis sematico v1.2 c©2005 Jose Fortes– p.6 .

Page 11: Análisis semántico - serdis.dis.ulpgc.esserdis.dis.ulpgc.es/~ii-pl/ftp/transp/tr-asem-ver.pdf · programador desarrolla los componentes de la estructura. Cuestiones: Puede ser conveniente

Ejemplo con open hashing

↓ int s(double, int);

↓ char c;

↓ int main() {

↓ typedef double real;

↓ while (c==0) {

↓ real x = 0.1;

↓ int c = 1;

↓ c = s(x, c);

↓ }

↓ }

↓ int s(double c, int d) {

↓ return c+d;

↓ }

c

?

?

s

main

real

x

c

Analisis sematico v1.2 c©2005 Jose Fortes– p.6 .

Page 12: Análisis semántico - serdis.dis.ulpgc.esserdis.dis.ulpgc.es/~ii-pl/ftp/transp/tr-asem-ver.pdf · programador desarrolla los componentes de la estructura. Cuestiones: Puede ser conveniente

Ejemplo con open hashing

↓ int s(double, int);

↓ char c;

↓ int main() {

↓ typedef double real;

↓ while (c==0) {

↓ real x = 0.1;

↓ int c = 1;

↓ c = s(x, c);

↓ }

↓ }

↓ int s(double c, int d) {

↓ return c+d;

↓ }

c

?

?

s

main

real

Analisis sematico v1.2 c©2005 Jose Fortes– p.6 .

Page 13: Análisis semántico - serdis.dis.ulpgc.esserdis.dis.ulpgc.es/~ii-pl/ftp/transp/tr-asem-ver.pdf · programador desarrolla los componentes de la estructura. Cuestiones: Puede ser conveniente

Ejemplo con open hashing

↓ int s(double, int);

↓ char c;

↓ int main() {

↓ typedef double real;

↓ while (c==0) {

↓ real x = 0.1;

↓ int c = 1;

↓ c = s(x, c);

↓ }

↓ }

↓ int s(double c, int d) {

↓ return c+d;

↓ }

c

?

?

s

main

Analisis sematico v1.2 c©2005 Jose Fortes– p.6 .

Page 14: Análisis semántico - serdis.dis.ulpgc.esserdis.dis.ulpgc.es/~ii-pl/ftp/transp/tr-asem-ver.pdf · programador desarrolla los componentes de la estructura. Cuestiones: Puede ser conveniente

Ejemplo con open hashing

↓ int s(double, int);

↓ char c;

↓ int main() {

↓ typedef double real;

↓ while (c==0) {

↓ real x = 0.1;

↓ int c = 1;

↓ c = s(x, c);

↓ }

↓ }

↓ int s(double c, int d) {

↓ return c+d;

↓ }

c

c

s

main

d

Analisis sematico v1.2 c©2005 Jose Fortes– p.6 .

Page 15: Análisis semántico - serdis.dis.ulpgc.esserdis.dis.ulpgc.es/~ii-pl/ftp/transp/tr-asem-ver.pdf · programador desarrolla los componentes de la estructura. Cuestiones: Puede ser conveniente

Una función hash

Si llamamos ci a los códigos de los caracteres y n lalongitud de la ristra:

h0 = 0

hi = k(hi−1 mod 220) + ciH = hn mod T

Para una tabla de tamaño T = 1008 pueden usarsevalores de k1 = 613 (preferentemente) o k2 = 4 (másrápido pero peor distribución).Si open hashing:

Hj = (h(k1)n + jh(k2)

n ) mod T, j = 0, 1, · · ·Analisis sematico v1.2 c©2005 Jose Fortes– p.7 .

Page 16: Análisis semántico - serdis.dis.ulpgc.esserdis.dis.ulpgc.es/~ii-pl/ftp/transp/tr-asem-ver.pdf · programador desarrolla los componentes de la estructura. Cuestiones: Puede ser conveniente

Chequeos de tipos (y otros)

Un compilador debe realizar una serie de chequeosestá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).Analisis sematico v1.2 c©2005 Jose Fortes– p.8 .

Page 17: Análisis semántico - serdis.dis.ulpgc.esserdis.dis.ulpgc.es/~ii-pl/ftp/transp/tr-asem-ver.pdf · programador desarrolla los componentes de la estructura. Cuestiones: Puede ser conveniente

Definiciones de tipos

También llamadas “expresiones de tipos”, en las que elprogramador desarrolla los componentes de la estructura.Cuestiones:

Puede ser conveniente construir un árbol/grafo:En caso de equivalencia estructuralPara 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.Analisis sematico v1.2 c©2005 Jose Fortes– p.9 .

Page 18: Análisis semántico - serdis.dis.ulpgc.esserdis.dis.ulpgc.es/~ii-pl/ftp/transp/tr-asem-ver.pdf · programador desarrolla los componentes de la estructura. Cuestiones: Puede ser conveniente

El árbol sintáctico abstracto (1/2)

En inglés (abstract) syntax tree, AST, para distinguirlo del árbol delanálisis según la gramática [parse tree].

if(a<3) {b=2*a;};

2 a

*a 3

<

b

if-then

:=

Analisis sematico v1.2 c©2005 Jose Fortes– p.10 .

Page 19: Análisis semántico - serdis.dis.ulpgc.esserdis.dis.ulpgc.es/~ii-pl/ftp/transp/tr-asem-ver.pdf · programador desarrolla los componentes de la estructura. Cuestiones: Puede ser conveniente

El árbol sintáctico abstracto (2/2)

Representación compacta correspondiente a unagramática sin limitaciones de método de análisis,caracterizada por que los nodos interiores sonoperadores, en sentido amplio.

Útil para ser “anotado” o “decorado” con atributosen recorridos ulteriores, y a partir de ahí:

Realizar chequeosGenerar código (intermedio)

Con frecuencia se puede simular su recorrido (sin cons-

truirlo) durante el análisis sintáctico.

Analisis sematico v1.2 c©2005 Jose Fortes– p.11 .

Page 20: Análisis semántico - serdis.dis.ulpgc.esserdis.dis.ulpgc.es/~ii-pl/ftp/transp/tr-asem-ver.pdf · programador desarrolla los componentes de la estructura. Cuestiones: Puede ser conveniente

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.

Analisis sematico v1.2 c©2005 Jose Fortes– p.12 .

Page 21: Análisis semántico - serdis.dis.ulpgc.esserdis.dis.ulpgc.es/~ii-pl/ftp/transp/tr-asem-ver.pdf · programador desarrolla los componentes de la estructura. Cuestiones: Puede ser conveniente

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, concorrespondencia con las estructuras del lenguaje

Medio: instrucciones de máquina virtual (a vecesrealmente implementada: P-code, bytecode), talescomo tuplas de tres direcciones

Bajo: máquina próxima al ensamblador, con unamplio número de registros

Algunos compiladores pasan por varias representaciones

de distintos niveles de abstracción.

Analisis sematico v1.2 c©2005 Jose Fortes– p.13 .

Page 22: Análisis semántico - serdis.dis.ulpgc.esserdis.dis.ulpgc.es/~ii-pl/ftp/transp/tr-asem-ver.pdf · programador desarrolla los componentes de la estructura. Cuestiones: Puede ser conveniente

Cuádruplas

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

tipo de árbol abstracto.

Analisis sematico v1.2 c©2005 Jose Fortes– p.14 .

Page 23: Análisis semántico - serdis.dis.ulpgc.esserdis.dis.ulpgc.es/~ii-pl/ftp/transp/tr-asem-ver.pdf · programador desarrolla los componentes de la estructura. Cuestiones: Puede ser conveniente

Ejemplo de cuádruplas

for i in a..b do

...

endfor;

...:= i a:= t8 b

if >goto i t8 L5L4: ...

if = goto i t8 L5:= + i i 1goto L4

L5: ...

Analisis sematico v1.2 c©2005 Jose Fortes– p.15 .