análisis semánticoserdis.dis.ulpgc.es/~ii-pl/ftp/transp/tr-asem-imp.pdf · 2006-01-25 ·...

24
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 G´ alvez– p.1

Upload: others

Post on 13-Mar-2020

4 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Análisis semánticoserdis.dis.ulpgc.es/~ii-pl/ftp/transp/tr-asem-imp.pdf · 2006-01-25 · caracterizada por que los nodos interiores son operadores, en sentido amplio. Útil para

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

representaciones internas

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

Page 2: Análisis semánticoserdis.dis.ulpgc.es/~ii-pl/ftp/transp/tr-asem-imp.pdf · 2006-01-25 · caracterizada por que los nodos interiores son operadores, en sentido amplio. Útil para

¿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 Galvez– p.2 .

Page 3: Análisis semánticoserdis.dis.ulpgc.es/~ii-pl/ftp/transp/tr-asem-imp.pdf · 2006-01-25 · caracterizada por que los nodos interiores son operadores, en sentido amplio. Útil para

¿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 Galvez– p.2 .

Page 4: Análisis semánticoserdis.dis.ulpgc.es/~ii-pl/ftp/transp/tr-asem-imp.pdf · 2006-01-25 · caracterizada por que los nodos interiores son operadores, en sentido amplio. Útil para

¿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 Galvez– p.2 .

Page 5: Análisis semánticoserdis.dis.ulpgc.es/~ii-pl/ftp/transp/tr-asem-imp.pdf · 2006-01-25 · caracterizada por que los nodos interiores son operadores, en sentido amplio. Útil para

¿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 Galvez– p.2 .

Page 6: Análisis semánticoserdis.dis.ulpgc.es/~ii-pl/ftp/transp/tr-asem-imp.pdf · 2006-01-25 · caracterizada por que los nodos interiores son operadores, en sentido amplio. Útil para

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 Galvez– p.3 .

Page 7: Análisis semánticoserdis.dis.ulpgc.es/~ii-pl/ftp/transp/tr-asem-imp.pdf · 2006-01-25 · caracterizada por que los nodos interiores son operadores, en sentido amplio. Útil para

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 Galvez– p.4 .

Page 8: Análisis semánticoserdis.dis.ulpgc.es/~ii-pl/ftp/transp/tr-asem-imp.pdf · 2006-01-25 · caracterizada por que los nodos interiores son operadores, en sentido amplio. Útil para

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 Galvez– p.5 .

Page 9: Análisis semánticoserdis.dis.ulpgc.es/~ii-pl/ftp/transp/tr-asem-imp.pdf · 2006-01-25 · caracterizada por que los nodos interiores son operadores, en sentido amplio. Útil para

Ejemplo de tabla de símbolos

↓ char c;

↓ int s(double, int);

↓ int main() {

↓ typedef double real;

↓ while (c==0) {

↓ real y = 0.1;

↓ int c = 1;

↓ c = s(y, c);

↓ }

↓ }

↓ int i = -1;

↓ int s(double c, int d) {

↓ return c+d;

↓ }

main

?

?

s

c

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

Page 10: Análisis semánticoserdis.dis.ulpgc.es/~ii-pl/ftp/transp/tr-asem-imp.pdf · 2006-01-25 · caracterizada por que los nodos interiores son operadores, en sentido amplio. Útil para

Ejemplo de tabla de símbolos

↓ char c;

↓ int s(double, int);

↓ int main() {

↓ typedef double real;

↓ while (c==0) {

↓ real y = 0.1;

↓ int c = 1;

↓ c = s(y, c);

↓ }

↓ }

↓ int i = -1;

↓ int s(double c, int d) {

↓ return c+d;

↓ }

main

real

?

?

s

c

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

Page 11: Análisis semánticoserdis.dis.ulpgc.es/~ii-pl/ftp/transp/tr-asem-imp.pdf · 2006-01-25 · caracterizada por que los nodos interiores son operadores, en sentido amplio. Útil para

Ejemplo de tabla de símbolos

↓ char c;

↓ int s(double, int);

↓ int main() {

↓ typedef double real;

↓ while (c==0) {

↓ real y = 0.1;

↓ int c = 1;

↓ c = s(y, c);

↓ }

↓ }

↓ int i = -1;

↓ int s(double c, int d) {

↓ return c+d;

↓ }

main

real

y

c

?

?

s

c

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

Page 12: Análisis semánticoserdis.dis.ulpgc.es/~ii-pl/ftp/transp/tr-asem-imp.pdf · 2006-01-25 · caracterizada por que los nodos interiores son operadores, en sentido amplio. Útil para

Ejemplo de tabla de símbolos

↓ char c;

↓ int s(double, int);

↓ int main() {

↓ typedef double real;

↓ while (c==0) {

↓ real y = 0.1;

↓ int c = 1;

↓ c = s(y, c);

↓ }

↓ }

↓ int i = -1;

↓ int s(double c, int d) {

↓ return c+d;

↓ }

main

real

?

?

s

c

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

Page 13: Análisis semánticoserdis.dis.ulpgc.es/~ii-pl/ftp/transp/tr-asem-imp.pdf · 2006-01-25 · caracterizada por que los nodos interiores son operadores, en sentido amplio. Útil para

Ejemplo de tabla de símbolos

↓ char c;

↓ int s(double, int);

↓ int main() {

↓ typedef double real;

↓ while (c==0) {

↓ real y = 0.1;

↓ int c = 1;

↓ c = s(y, c);

↓ }

↓ }

↓ int i = -1;

↓ int s(double c, int d) {

↓ return c+d;

↓ }

main

?

?

s

c

i

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

Page 14: Análisis semánticoserdis.dis.ulpgc.es/~ii-pl/ftp/transp/tr-asem-imp.pdf · 2006-01-25 · caracterizada por que los nodos interiores son operadores, en sentido amplio. Útil para

Ejemplo de tabla de símbolos

↓ char c;

↓ int s(double, int);

↓ int main() {

↓ typedef double real;

↓ while (c==0) {

↓ real y = 0.1;

↓ int c = 1;

↓ c = s(y, c);

↓ }

↓ }

↓ int i = -1;

↓ int s(double c, int d) {

↓ return c+d;

↓ }

main

d

c

s

c

i

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

Page 15: Análisis semánticoserdis.dis.ulpgc.es/~ii-pl/ftp/transp/tr-asem-imp.pdf · 2006-01-25 · caracterizada por que los nodos interiores son operadores, en sentido amplio. Útil para

Ejemplo de tabla de símbolos

↓ char c;

↓ int s(double, int);

↓ int main() {

↓ typedef double real;

↓ while (c==0) {

↓ real y = 0.1;

↓ int c = 1;

↓ c = s(y, c);

↓ }

↓ }

↓ int i = -1;

↓ int s(double c, int d) {

↓ return c+d;

↓ }

main

s

c

i

d—c—

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

Page 16: Análisis semánticoserdis.dis.ulpgc.es/~ii-pl/ftp/transp/tr-asem-imp.pdf · 2006-01-25 · caracterizada por que los nodos interiores son operadores, en sentido amplio. Útil para

Una función de dispersión [hashing]

Sean ci los códigos de los caracteres de la ristrar = c1 · · · cn. Para enteros de w bits, tabla de tamañoT = 2p, y p.e. q = 613 y a ' (

√5− 1)/2 :

k1 = c1

ki = (qki−1 + ci) mod 2w, 1 < i ≤ n

h = bT (kna mod 1)c, 0 < a < 1

Si doble dispersión [rehashing], usando p.e. a′ ' e/9para h′:

hj = (h+ j(2bh′/2c+ 1)) mod T, j = 0, 1, . . .

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

Page 17: Análisis semánticoserdis.dis.ulpgc.es/~ii-pl/ftp/transp/tr-asem-imp.pdf · 2006-01-25 · caracterizada por que los nodos interiores son operadores, en sentido amplio. Útil para

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 Galvez– p.8 .

Page 18: Análisis semánticoserdis.dis.ulpgc.es/~ii-pl/ftp/transp/tr-asem-imp.pdf · 2006-01-25 · caracterizada por que los nodos interiores son operadores, en sentido amplio. Útil para

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 Galvez– p.9 .

Page 19: Análisis semánticoserdis.dis.ulpgc.es/~ii-pl/ftp/transp/tr-asem-imp.pdf · 2006-01-25 · caracterizada por que los nodos interiores son operadores, en sentido amplio. Útil para

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 Galvez– p.10 .

Page 20: Análisis semánticoserdis.dis.ulpgc.es/~ii-pl/ftp/transp/tr-asem-imp.pdf · 2006-01-25 · caracterizada por que los nodos interiores son operadores, en sentido amplio. Útil para

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 Galvez– p.11 .

Page 21: Análisis semánticoserdis.dis.ulpgc.es/~ii-pl/ftp/transp/tr-asem-imp.pdf · 2006-01-25 · caracterizada por que los nodos interiores son operadores, en sentido amplio. Útil para

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 Galvez– p.12 .

Page 22: Análisis semánticoserdis.dis.ulpgc.es/~ii-pl/ftp/transp/tr-asem-imp.pdf · 2006-01-25 · caracterizada por que los nodos interiores son operadores, en sentido amplio. Útil para

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, sinrestricción de número de registros

Algunos compiladores pasan por varias representaciones

de distintos niveles de abstracción.

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

Page 23: Análisis semánticoserdis.dis.ulpgc.es/~ii-pl/ftp/transp/tr-asem-imp.pdf · 2006-01-25 · caracterizada por que los nodos interiores son operadores, en sentido amplio. Útil para

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 Galvez– p.14 .

Page 24: Análisis semánticoserdis.dis.ulpgc.es/~ii-pl/ftp/transp/tr-asem-imp.pdf · 2006-01-25 · caracterizada por que los nodos interiores son operadores, en sentido amplio. Útil para

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 Galvez– p.15 .