Vous êtes sur la page 1sur 26

19/09/2013

UNIDAD I.- ANALISIS SEMANTICO 1.1.- Arboles de expresiones. 1.2.- Acciones semnti
cas de un analizador sintctico. 1.3.- Comprobaciones de tipos en expresiones . 1.
4.- Pila semntica en un analizador sintctico. 1.5.- Esquema de traduccin. 1.6.- Gen
eracin de la tabla de smbolo y de direcciones. 1.7.- Manejo de errores semnticos.
2
MATERIA: LENGUAJES Y AUTMATAS II
Dra. Miriam Martnez Arroyo
Introduccin
El lenguaje es un vehculo por el cual se transmiten instrucciones a un procesador
para que las ejecute y produzca ciertos resultados. Es tarea del compilador ext
raer el contenido semntico incluido en las sentencias del programa. Ciertos aspec
tos relativos a la correccin de un programa no se pueden expresar claramente medi
ante el lenguaje de programacin. Es necesario dotar al compilador de rutinas auxi
liares para captar todo lo que no se ha expresado mediante la sintaxis del lengu
aje.
4
INTRODUCCIN
3
El compilador hasta ahora
Anlisis lxico
Detecta entradas de tokens legales
5
Introduccin
Semntica: conjunto de reglas que espe significado de cualquier sentencia sintctica
mente correcta y escrita en un determinado lenguaje. El anlisis semntico, a difere
ncia de otras no se realiza claramente diferenciado del resto de las tareas del
compilador.
Fase en la que se obtiene informacin necesaria para la compilacin, tras conocer la
estructura sintctica del programa. Completa las fases de anlisis lxico y sintctico
incorporando comprobaciones que no pueden asimilarse al mero reconocimiento de u
na cadena dentro de un lenguaje
6
Anlisis Sintctico
Detecta entradas con rboles mal formados.
Anlisis Semntico
Detecta todos los errores restantes
1

19/09/2013
Objetivo del anlisis semntico
La semntica del lenguaje forma parte de la especificacin del mismo. Normalmente la
semntica de un lenguaje se describe de manera informal. El objetivo del anlisis s
emntico es comprobar si la semntica del programa que se est compilando cumple las e
specificaciones de la semntica del lenguaje fuente.
7
Objetivo del anlisis semntico
Algunas de estas comprobaciones son: Para realizar el anlisis semntico se utilizan
gramticas de atributos, que bsicamente, son gramticas independientes del contexto
en las que los smbolos tienen asignados atributos o valores semnticos. Hay dos tip
os de atributos:
sintetizados: corresponden al no terminal de la parte izquierda de una regla. Se
calculan a partir de los atributos de los smbolos de la parte derecha de la regl
a. heredados: corresponden a los smbolos de la parte derecha de la regla. Se cons
truyen a partir de los atributos de los smbolos de ambas partes de la regla.
8
Por qu necesitamos el anlisis semntico
9
Qu hace el anlisis semntico?
Verificaciones de varias clases, tpicamente:
Que todos los identificadores estn declarados. Los tipos de las expresiones y la
compatibilidad de las asignaciones. Invocacin de mtodos compatibles con las declar
aciones etc Los requerimientos dependes del lenguaje.
10
El analizador sintctico no puede detectar todos los errores.
s del lenguaje no son libres de contexto
Ejemplo: declaracin de identificadores y su uso. No puedes
describir que alguna palabra particulares aparezca dos veces en
ada por un texto en medio. Una versin abstracta del problema
* }
declaracin uso

Algunos constructore
utilizar una GLC para
una cadena separ
es: {wcw | w
(a | b)

Se asocia informacin a las construcciones del lenguaje de programacin proporcionan


do atributos a los smbolos de la gramtica. Ejemplo: el valor de una expresin, el ti
po de una variable, su mbito, un trozo de cdigo, el nmero de argumentos de una func
in, etc. Los valores de los atributos se calculan mediante reglas semnticas asocia
das a las producciones gramaticales.
El anlisis semntico incluye:
11

La construccin de la Tabla de Smbolos para llevar un seguimiento del significado d


e los identificadores en el programa:
variables, funciones, tipos, parmetros y mtodos de paso de parmetros en func
Etc.
12
Realizar la comprobacin e inferencia de tipos en expresiones y sentencias. Por ej

emplo:
que ambos lados de una asignacin tengan tipos adecuados, que no se declaren varia
bles con el mismo nombre, que los parmetros de llamada a una funcin tengan tipos a
decuados, nmero de parmetros correcto, Etc.
2

19/09/2013
1.1.-ARBOL DE EXPRESIONES
14
1.1.- Arboles de expresiones.
13
Las expresiones regulares que se pueden representar a travs de los smbolos conteni
dos en un alfabeto, tambin se pueden representar a travs de rboles, que se denomina
n rboles de expresiones. La informacin contenida en los rboles de expresio-nes tien
en las siguientes caractersticas. Se almacena en forma de estructura jerrquica, po
rque los componentes estn en diferentes niveles.
La informacin se almacena en forma Dinmica porque su forma, tamao y contenido puede
n variar durante la ejecucin. Los datos son almacenados de forma Organizada porqu
e importa la forma en que est dispuesto el contenido. La consulta de los datos se
hace de manera rpida y eficiente obteniendo mejores resultados.
15
Propiedades de los rboles Los rboles de expresiones estn compuestos por los siguien
tes elementos: Token.- es una Unidad mnima de informacin entendible por un compila
dor. Puede ser un ope-rando o un operador. Operandos.- Los operandos pueden ser
las hojas de los nodos. Raz.- La raz de un rbol puede ser cuaquier operador aritmtic
o.
16
Reglas para un rbol La reglas para representar una expresin mediante un rbol son la
s siguientes:
17
rboles de expresin
Representan un orden de ejecucin
18
+
para la expresin siguiente:
1.- Cada hoja est etiquetada con un operando y solo consta de ese operando. 2.- C
ada nodo interior n est etiquetado con un solo operador. 3.- Las hojas estn represen
tadas por los operandos y los nodos por la raz de cada rbol.
(A* B) + C * D + E
A
*
B C
+
*
D
E

19/09/2013
Otro ejemplo de rbol sintctico para una expresin Aritmtica: (7 + 12) * (-9)
19
20
*
+ 7
12
9
21
Ejemplo: x=(x+y)*(a-b)
22
23
24
4

-171

19/09/2013
25
26
27
28
29
30
5

19/09/2013
31
32
http://www.esdebian.org/wiki/interpretprete-funciones-mediante-arbol-binario-exp
resiones
33
34
35
36
6

19/09/2013
37
38
1.2. Acciones Semnticas de un Analizador Sintctico
Dependiendo del tipo de sentencias, semnticas pueden agruparse en: las acciones
40
1.2. Acciones Semnticas de un Analizador Sintctico
39
Sentencias de Declaracin: Se utilizan para completar la seccin de tipos de la Tabl
a de Smbolos. Sentencias ejecutables: Se utilizan para realizar comprobaciones de t
ipos entre los operandos implicados.

Algunas de estas comprobaciones son: comprobacin de tipos en sentencias de asigna


cin comprobacin de tipos en operaciones aritmtico-lgicas comprobacin de tipos en las
sentencias condicionales comprobacin de la declaracin de las variables antes de su
uso comprobacin de unicidad de identificadores comprobacin del indexado de vector
es
Continuacin
41
Funciones y procedimientos: Se utilizan para comprobar el nmero, orden y tipo de
los parmetros actuales en cada llamada a una funcin o procedimiento. Identificacin
de variables: Se utilizan para comprobar si un identificador ha sido declarado a
ntes de utilizarlo. Etiquetas: comprobar si hay etiquetas repetidas y validacin.
42
7

19/09/2013
Continuacin Constantes: comprobar que no se utilicen en la parte izquierda de una
asignacin. Conversiones y equivalencias de tipo: realizan la verificacin de las co
nstantes para que stas sean de un mismo tipo. Sobrecarga de operadores y funcione
s: en las funciones y los procedimientos, se utilizan para detectar y solventar
la autenticidad de los datos.
43
mbitos
Consiste en empatar las declaraciones de identificadores con su uso El mbito de u
n identificador es la porcin del programa en la cual el identificador es accesibl
e. El mismo identificador se puede referir a diferentes cosas en diferentes part
es del programa. mbitos diferentes para el mismo nombre no se sobreponen. Un iden
tificador puede tener mbitos restringidos. Es decir solo es visible en reas partic
ulares del programa
44
mbitos estticos vs dinmicos
La mayora de los lenguajes tienen mbitos estticos.
El mbito slo depende del texto del programa no de la conducta en tiempo de ejecucin
. Java, C, C++, Pascal, Modula, cool, etc. Tienen mbito esttico.
45
Ejemplo de mbito esttico
int x; -- variable global o campo esttico float convert_speed(float y) { float x;
--una x diferente (variable local) x=y*1.6 return x; } (El uso de x se refiere
a la definicin ms cercana )
46
Pocos lenguajes tiene mbitos dinmicos
Lisp, SNOBOL El mbito depende de la ejecucin del programa
mbito en lenguajes OO
No todas las clases de identificadores siguen la regla del anidamiento ms cercano
Por ejemplo las definiciones de clases
Todas son visibles globalmente
47
Ms sobre mbito
Los nombres de mtodos y atributos tienen reglas complejas. Los nombres de campos
son globales dentro de cualquier clase. Pero los mtodos y campos no necesitan est
ar definidos en la clase en la cual se estn utilizando, pero si en una clase padr
e (herencia) Los mtodos se pueden redefinir (sobreescritura)
48
Declaracin de campos en Java
Visibles a todos los mtodos en una clase Y algunas veces a otras clases tambin
Dependiendo si son pblicas o privadas, etc.
8

19/09/2013
Implementacin de la regla anidada ms cercana
La mayor parte del anlisis semntico se puede expresar como un recorrido descendent
e recursivo de un rbol o AST.
Procesa un nodo n Procesa los hijos de n Finaliza procesando el nodo n
49
1.3.- Comprobaciones de Tipos en Expresiones
50
En cualquier porcin del rbol (contexto en el programa), necesitamos saber que iden
tificadores estn definidos.
1.3.-Comprobacin de tipos en Expresiones La comprobacin de tipos es una forma de a
segurar que los identificadores relacionados sean de tipos compatibles. Dos iden
tificadores son compatibles de acuerdo a lo siguiente:
Cuando forman el lado izquierdo y el lado derecho de un operador. Cuando forman
el lado izquierdo y el lado derecho de una proposicin de asignacin. Cuando sean pa
rmetros reales y formales.
51
Las comprobaciones de consistencia que se efectan antes de la ejecucin del program
a fuente, se denominan comprobaciones estticas. Las comprobaciones que se realiza
n durante la ejecucin del programa objeto se denominan comprobaciones dinmicas. La
revisin de la sintaxis de un programa fuente es un ejemplo de comprobacin esttica,
mientras que la comprobacin de tipos, es un ejemplo de comprobacin que con frecue
ncia puede efectuarse en forma esttica y que en ocasiones debe realizarse dinmicam
ente.
52
Tipos
Qu es un tipo?
La nocin vara de lenguaje a lenguaje.
53
Tipos y operaciones
Ciertas Operaciones son legales para cada tipo
No tiene sentido sumar un apuntador a funcin y un entero en C Tiene sentido sumar
dos enteros Pero ambos tienen la misma implementacin en lenguaje ensamblador!
54
Consenso
Un conjunto de valores Un conjunto de operadores sobre los valores
Las clases son una instanciacin moderna de la nocin de tipo
9

19/09/2013
Sistema de tipos
Un sistema de tipos de un lenguaje especifica las operaciones que son vlidas para
cada tipo. La meta de la verificacin de tipos es asegurar que las operaciones se
utilizan con los tipos correctos.
Hace cumplir la interpretacin de los valores. Algunas veces puede realizar conver
siones automticas cuando el lenguaje permite modos mezclados y promocin de tipos.
55
Traslacin dirigida por la sintaxis
La mayora de los compiladores son de mltiples pasadas. Recorre el AST (rbol de anlis
is sintctico) para el anlisis semntico, verificacin de tipos. Recorre este otra vez
para optimizacin. y generacin de cdigo .. etc.
56
El sistema de tipos provee una formalizacin concisa de las reglas de verificacin s
emntica.
Compilacin de una pasada
Bajo ciertas circunstancias, es posible construir un compilador completo de una
sola pasada. Es posible con ciertas condiciones del lenguaje
Particularmente cuando se declara antes de que se use.
Verificacin de tipos 57
Existen aspectos a considerar en la verificacin de tipos de un compilador Procesa
r las declaraciones y mantener una tabla de smbolos. Almacenar el tipo de cada id
entificador en la tabla de smbolos. Realizar la verificacin de tipos y hacer cumpl
ir las reglas semnticas en expresiones y otros elementos del lenguaje (e.g. Lista
de argumentos, etc.) Buscar el tipo de los identificadores usados. Inferir los
tipos de constantes Calcular el tipo de los nodos que denotan expresiones.
58
Esto requiere que la traslacin se realice durante un recorrido del rbol en profund
idad.
La forma en que el analizador sintctico se mueve a travs del rbol
Verificacin de tipos con aseveraciones
En cada regla declaramos la aseveracin que se debe cumplir si el programa es vlido
. ASSERT(condicin) mensaje significa:
La condicin se supone debe cumplirse Si no es verdadera, imprime mensaje.
59
Ejemplo de verificacin de tipos (un ejemplo similar esta en la Sec. 6.4.4 de Kenn
eth)
60
Assert (Visual Studio 2012 ) Prueba una asercin de software en tiempo de compilac
in. Si la expresin constante especificada es false, el compilador muestra el mensa
je especificado y la compilacin emite un error; si no, la declaracin no tiene ningn
efecto.
static_assert( constant-expression, string-literal );
Puede usarse una macro en C para este propsito

#define ASSERT(x,y) if (!x) printf(line %d: %s\n,lineno, (y))


10

19/09/2013
Verificacin de tipos en Bison
61
Verificacin de tipos (Cont.)
62
Expresiones de Tipos El tipo de una construccin de un lenguaje se denotar mediante
una Expresin de tipo. Una expresin de tipo es, o bien un tipo bsico o se forma aplic
ando un operador llamado constructor de tipos a otras expresiones de tipos. Los
conjuntos de tipos y construcciones dependen del lenguaje que deba comprobarse.
bsicas
63
Se utilizar la siguiente definicin de expresiones de tipos: 1. Un tipo bsico es una
expresin de tipo. Entre los tipos bsicos se encuentran bolean, char, integer y re
al. Un tipo bsico especial, la funcin error_tipo(), sealar un error durante la com-p
robacin de tipos. 2- Como se puede dar nombre a las expresiones de tipos, el nomb
re de un tipo es una expresin de tipo.
64
3.-Un constructor de tipos aplicado a expresiones de tipos es una expresin de tip
o. Los constructores incluyen:
Matrices, Productos, Registros, apuntadores y funciones).
65
b) Productos. Si T1 y T2 son expresiones de tipo, entonces su producto cartesian
o T1 x T2 es una expresin de tipo. Se supone que x es asociativa por la izquierda
. c) Registros. La diferencia entre un registro y un producto es que los campos
de un registro tienen nombres. El constructor de tipos record se aplicar a un con
junto ordenado formado con nombres de campos y tipos de campos. Por ejemplo, el
fragmento de programa en Pascal: Type fila = record Direccin: integer; Lexema: ar
ray [1..15] of char end; var tabla: array [1..10] of fila;
66
a) Matrices. Si T es una expresin de tipo, entonces array (I, T) es una expresin d
e tipo que indica el tipo de una matriz con elementos de tipo T y conjunto de ndi
ces I, I con frecuencia es un rango de enteros. Por ejemplo, la declaracin en Pas
cal Var A: array[1..10] of integer; Asocia la expresin de tipo array(1..10, integ
er) con A.
11

19/09/2013
Declara que el nombre de tipo fila representa la expresin de tipo. Record (direcc
in x integer ) x (lexema x array (1..15, char)) Y que la variable tabla es una ma
triz de registro de este tipo. d) Apuntadores.- Si T es una funcin de tipo, enton
ces pointer (T) es una expresin de tipo que indica el tipo apuntador a un objeto d
e T. Por ejemplo, en Pascal, la declaracin Var pila: fila Declara que la variable
pila tiene tipo pointer (fila)
67
e) Funciones.- matemticamente una funcin transforma los elementos de un conjunto,
el dominio, a elementos de otro conjunto, el rango. Se pueden considerar las fun
ciones dentro de los lenguajes de programacin como transformaciones de un dominio
de tipo D a un rango tipo R. La expresin tipo D R indica el tipo de dicha funcin.
Por ejemplo, la funcin predefinida mod de Pascal tiene un dominio de tipo int x
int, es decir, un par de enteros, y rango de tipo int. De esta forma, se dice qu
e mod tiene el tipo1. int x int int
68
Con frecuencia existen, por razones de implantacin, limitaciones que en cuanto al
tipo que una funcin puede devolver; por ejemplo, matrices o funciones. Sin embar
go existen lenguajes que permiten que las funciones devuelvan objetos de tipos a
rbitrarios, as que se puede definir una funcin g de tipo (integer integer); (integ
er integer)
69
4.- Las expresiones de tipo pueden contener variables cuyos valores son expresio
nes de tipos. Una manera conveniente de representar expresiones de tipo es utili
zando un grafo. Con el enfoque de la traduccin dirigida por la sintaxis se puede
construir un rbol o un GDA para una expresin de tipo, con nodos interiores para lo
s constructores de tipos y hojas para los tipos bsicos, nombres de tipos, y varia
bles de tipos.
70
Es decir, g toma como argumento una funcin que transforma un entero en un entero
y g produce como resultado otra funcin del mismo tipo.
Por ejemplo, consideremos la siguiente declaracin: Str : array [0..80] of char; I
: integer; Estticamente puede que no se cumpla la condicin: 0 <= i <= 80 al utili
zar str [i]; es decir, esta comprobacin debe efectuarse en forma dinmica. Sin emba
rgo, es posible, por ejemplo, comprobar estticamente si la asignacin: str [i] := c
h; est permitida, o sea, si ambos lados de la proposicin de asignacin son de tipos
compatibles. Para ello es necesario consultar la tabla de smbolos.
71
A continuacin se presenta un breve ejemplo de cmo introducir las reglas que permit
en la comprobacin de tipos de expresiones aritmticas. TipoE, TipoT y TipoF, repres
entan el tipo de una expresin, trminos, etc.; se emplean subndices para distinguir
entre varias ocurrencias de un mismo smbolo no Terminal. Se usar el siguiente subc
onjunto de la gramtica G0 con las reglas correspondientes:
72
12

19/09/2013
E E1
T E2 + T
(* TipoE := TipoT; *) (* TipoE1 := ifTipoE2 = integer end TipoT = integer then i
nteger else error_tipo; *) (* TipoT := TipoF *) (* TipoT1 := ifTipoT2 = integer
end TipoF = integer then integer else error_tipo; *) (* TipoF := buscar_Tipo(x);
*) (* TipoF := buscar_Tipo(y); *) (* TipoF := TipoE; *)
73
El procedimiento buscar Tipo(...) se utiliza para determinar el tipo de un ident
ificador por medio de la revisin de la tabla de smbolos. Por ejemplo, el tipo de u
na expresin formada donde se aplica el operador + a una subexpresin y un trmino, es e
ntero, si el tipo de la subexpresin y el trmino es entero; en caso contrario ser un
error de tipo. La formulacin de reglas para semnticas (tipo Pascal), que establec
en, por ejemplo, que Entero * Real genera un resultado de tipo Real, es obvia y
puede verse cmo se propagar un tipo.
74
T T1
F T2 * F
F F F
x y (E
De esta forma, durante el proceso de anlisis semntico, se puede determinar donde s
e requieren cambios forzados de tipo y qu operadores deben relacionarse (por ejem
plo, multiplicacin entera o de punto flotante). Se debe sealar que no todos los le
nguajes de programacin permiten una comprobacin esttica de tipos como la que se aca
ba de exponer, para ello se tiene que implementar en su diseo, para que pueda ser
considerada.
75
1.4.- Pila Semntica en un Analizador Sintctico
76
Pila semntica en un ASem
La pila juega un papel fundamental en el desarrollo de cualquier analizador semnt
ico. Dentro de cada elemento de la pila se guardan los valores que pueden tener
una expresin.
Admon. Tabla de Smbolos
La tabla de smbolos tambin recibe el nombre de ambiente. Un ambiente contiene un c
onjunto de parmetros que slo son visibles en ese ambiente. La tabla de smbolos se m
antiene durante todo el proceso de traduccin agregando elementos especficos en cad
a paso.
13

19/09/2013

Tabla de Smbolos Tabla de smbolos


Funcionalidades bsicas: Inserta(smbolo) Existe(nombre) Se agrega una primitiva m
Tipo (nombre) El anlisis lxico crea la tabla de smbolos? No

Cmo se agrega la semntica al analizador sintctico? Declaracin TIPO {tipo=obtengo(yy


t());} listavar PYC listavar var {inserta(smbolo);} | var {inserta(simbolo);} var
ID {simbolo=yytext; smbolo.tipo=tipo; simbolo.amb=ambito;}
Tabla de Smbolos
Exprlog
PI exprlog{A=A;} PD | NOT exprlog {A=A;} | exprlog {A1=A;} OPLOG exprlog
{ A2=A if(A1==INT && A2==INT) A=INT; else A=ERROR_TIPO; }
int a; a = (int) 10.1;
Tabla de Smbolos 83
Una tabla de smbolos es una estructura de datos empleada para registrar las decla
raciones de identificadores. Los identificadores se almacenan cuando se declaran
Con atributos
Nombres de clases, mtodos, variables, etc
Implementacin de la tabla de smbolos 84
La estructura es una pila
O una lista ligada que opera como pila
Operaciones
add_symbol(x) inserta x y la informacin asociada, tal como el tipo, en la pila. f
ind_symbol(x) busca en la pila, comenzando del tope de la pila.Regresa el primer
x encontrado o NULL si no se encontro. remove_symbol() saca elemento de la pila
Y sub-atributos
public, private, integer, float, static, array, etc Su localizacin en la pila si
es variable local
La tabla de smbolos se consulta para cualquier uso.
Verificacin semntica y generacin de cdigo.
14

19/09/2013
Definicin de clase Una tabla de smbolos ms elaborada
enter_scope() comenzar un nuevo mbito anidado find_symbol(x) encuentra el x actua
l (o null) add_symbol(x) agrega un smbolo x a la tabla check_scope(x) verdadero s
i x esta definido en el mbito actual (verificar declaraciones mltiples) exit_scope
() salir del mbito Descartar todos los smbolos del mbito reciente
85
Los nombres de clases se pueden usar antes de que sean definidos. Usualmente no
se puede verificar esto para los nombres de clases.
Usando una tabla de smbolos (compilacin separada?) O en una pasada (a menos que se
requieran prototipos)
86
Definicin de clase
Solucin usual
Fase 1: Junta todos los nombres de clases (+ otras cosas) Fase 2: Realiza la ver
ificacin
87
Implementacin de una Tabla de Smbolos simple
88
El anlisis semntico completo requiere varias pasadas.
Probablemente ms de una
La mayora de compiladores en JAVA busca por archivos de clases previamente compil
adas.
Anlisis semntico esttico: se realiza en tiempo de compilation, no de execution. 1.
Cmo vamos a especificar (describir) la estructura semntica de un lenguaje?
Mediante gramticas de atributos.
89
1.5.- Esquemas de Traduccin Los programas de aplicacin, los videojuegos y otras he
rramientas que se ejecutan en las computadoras, generalmente se realizan en leng
uajes de alto nivel. Estos programas escritos en lenguajes de alto nivel necesit
an ser traducidos a un lenguaje que sea entendible por la computadora, este leng
uaje es el lenguaje de bajo nivel.
90
2. Cmo vamos a implementar la estructura semntica de un lenguaje?
A partir de la construccin del rbol de anlisis sintctico, lo recorreremos en un dete
rminado orden y calcularemos en cada nodo la informacin semntica necesaria (el val
or de una expresin, el tipo de una variable, su mbito de declaracin, el nmero de arg
umentos de una funcin, etc).
15

19/09/2013
1.3.- Comprobaciones de Tipos en Expresiones 1.4.- Pila Semntica en un Analizador
Sintctico
91
Sistemas de Tipos. El diseo de un comprobador de tipos para un lenguaje se basa e
n informacin acerca de las construcciones sintcticas del lenguaje, la nocin de tipo
s y las reglas para asignar tipos a las construcciones de lenguajes. Los siguien
tes extractos de Pascal y del manual de referencia de C, respectivamente, son ej
emplos de la informacin con la que el diseador de un compilador podra verse obligad
o a comenzar.
92
Si ambos operandos de los operadores aritmticos de suma, sustraccin y multiplicacin
son de tipo entero, entonces el resultado es de tipo entero. El resultado del oper
ando unario & es un apuntador hacia el objeto al que se refiere el operando. Si
el tipo del operando es Un Arreglo, o el tipo del resultado es apuntador a . En los a
nteriores extractos se encuentra implcita la idea de que cada expresin tiene asoci
ado un tipo.
93
En los lenguajes Pascal y C, los tipos de datos son bsicos o construidos. Los tip
os bsicos son los tipos atmicos sin estructura interna por lo que concierne al pro
gramador. En Pascal, los tipos bsicos son bolean, carcter, integer y real. Los tip
os de subrango, como 1..10, y los tipos enumerados, como: (Violeta, azul, verde,
amarillo, naranja, rojo) Se pueden considerar como tipos bsicos.
94
El lenguaje Pascal admite que un programador construya tipos a partir de tipos bs
icos y otros tipos construidos, como por ejemplo, las matrices o arreglos (array
), los registros (record) y los conjuntos (set). Adems, los apuntadores y las fun
ciones tambin pueden considerarse como tipos construidos. Estos son algunos ejemp
los de tipos de datos construidos que se pueden realizar con los lenguajes de al
to nivel.
95
Todos los programas escritos en lenguajes de alto nivel deben ser traducidos a l
enguaje de mquina mediante un traductor. La funcin de un traductor de un lenguaje
de programacin, es traducir programas escritos en un lenguaje de alto nivel a pro
gramas equivalentes, expresados en lenguaje mquina. Despus del proceso de traduccin
, los programas pueden ejecutarse en cualquier computadora a travs de un intrprete
microprogramado
96
16

19/09/2013
La siguiente figura muestra el funcionamiento de un traductor mediante un compil
ador de cuatro pasos con las dems actividades que intervienen durante la compilac
in de un programa hasta llegar a convertir el programa escrito en lenguaje de alt
o nivel a un programa escrito en lenguaje ensamblador o lenguaje binario, para q
ue posteriormente se convierta en programa objeto:
97
98
Tipos de Traduccin de lenguajes.
99
Compilados.- Los lenguajes por lo general como el C, Pascal, java, son lenguajes
que se compilan. Esto significa que los programas en estos lenguajes se traduce
n ordinariamente al lenguaje mquina de la computadora real que s esta usando antes
que inicie la ejecucin, y la simulacin est confinada a un con-junto de rutinas de
apoyo en tiempos de ejecucin que simulan operaciones primitivas en el lenguaje fu
ente para las cuales no existe un anlogo cercano en el lenguaje mquina.
100
Interpretados.- Este tipo de traduccin lee y ejecu-ta instruccin por instruccin. LI
PS, Prolog, Basic y Smalltalk, se suelen implementar a travs del uso de un interp
rete . En esta clase de lenguajes, el traductor no procede cdigo de mquina para la
computadora que s esta utilizando. En su lugar, el traductor produce alguna form
a inter-media del programa cuya ejecucin es ms fcil que la forma del programa origi
nal, pero que es distinta del cdigo mquina.
Existe otro tipo de traduccin que se realiza directa-mente por el procesador, est
a traduccin se describe a continuacin: Ensamblador.-Es un traductor cuyo lenguaje
objeto es tambin alguna variedad de lenguaje mquina para una computadora real pero
cuyo lenguaje fuente, un lenguaje ensamblador constituye en gran medida una rep
resentacin simblica del cdigo de mquina objeto. Casi todas las instrucciones en el l
enguaje fuente se traducen una por una a cada instruccin del lenguaje objeto.
101
Cargador.- es un traductor cuyo lenguaje objeto es un cdigo de mquina real y cuyo
lenguaje fuente es casi idntico; y est compuesto por lo general de programas en le
nguaje mquina en forma reubicable junto con tablas de datos que especifican punto
s donde el cdigo reubicable se debe codificar para volverlo automticamente ejecuta
ble. Preprocesador o Macroprocesador.- es un tra-ductor cuyo lenguaje fuente es
una forma ampliada de un lenguaje de alto nivel cuyo lenguaje objeto es la forma
estndar del mismo lenguaje.
102
17

19/09/2013
1.6.- Generacin de la Tabla de Smbolos y de Direcciones.
Una tabla de smbolos es una estructura de datos que contiene una entrada para cad
a identificador encontrado en el programa fuente. Con el objeto de que el compil
ador pueda llevar un control de la informacin sobre el mbito y el enlace de los no
mbres de datos que intervienen en el progra-ma fuente. 1.6.- Generacin de la Tabl
a de Smbolos y de Direcciones. Los campos de cada entrada en la tabla de sm-bolos
corresponden a los atributos de cada i-dentificador. (Tipo, valor, direccin, parme
tros, etc.).
104
103
Durante la compilacin de un programa, cada vez que se encuentra un identificador
en la ta-bla de smbolos, se puede realizar lo siguiente:
La tabla puede ser consultada para ver si es necesario dar de alta el nuevo iden
tificador. En la tabla se puede completar los atributos faltantes de un identifi
cador ya existente. Se pueden recuperar los atributo de un iden-tificador ya exi
stente en la tabla de smbolos.
105
Los dos mecanismos para tablas de smbolos presentadas a continuacin son listas lin
eales y tablas de dispersin. Cada uno de estos mecanismos se evala basn-dose en el
tiempo necesario para aadir n entra-das y realizar e consultas. Una lista lineal
es lo ms fcil de implantar, pero su rendimiento es pobre cuando e y n se vuelven ms
grandes. Las tablas de dispersin proporcionan un mayor rendimiento con esfuerzo
algo mayor de programacin y gasto de espacio. Ambos mecanismos pueden adaptarse rp
ida-mente funcionar las reglas del anidamiento ms cercano. para
106

Un mecanismo de tabla de smbolos debe permitir aadir nuevas entradas y encontrar l


as entradas existentes de un analizador lxico eficientemente.
Un compilador debe ser capaz de aumentar dinmicamente la tabla de smbolos durante
la compilacin. Si la tabla de smbolos tiene tamao fijo al escribir el compilador, e
ntonces el tamao debe de ser lo suficientemente grande como para almacenar cualqu
ier programa fuente. Es muy probable que dicho tamao sea demasiado grande para la
mayora de los programa e inadecuado para algunos. Para mantener uniformes los re
gistros de la tabla de smbolos, es conveniente guardar una parte de la informacin
de un nombre fuera de la entrada de la tabla, almacenando en el registro slo un a
puntador a esta infor-macin, para hacer referencia a l.
107
Administracin de la Tabla de Smbolos.
Cada entrada de la tabla de smbolos corresponde a la declaracin de un nombre. El f
ormato de las entradas no tiene que ser uniforme porque la informacin de un nombr
e depende del uso de dicho nombre. Cada entrada se puede implantar como un regis
tro que conste de una secuencia de palabras consecutivas de memoria. No toda la
informacin se introduce en la tabla de smbolos. Las palabras clave se introducen,
al inicio. El analizador lxico busca secuencias de letras y dgitos en la tabla de
smbolos para determinar si se ha encontrado una palabra clave o un nombre.

108
18

19/09/2013
Las palabras clave deben estar en la tabla de smbolos antes de que comience el anl
isis lxico.
109
Si el analizador lxico reconoce las palabras clave, entonces no necesitan aparece
r en la tabla de smbolos. Si el lenguaje no convierte en palabras reservadas las
palabras clave, entonces es indispensable que las palabras clave se introduzcan
en la tabla de smbolos advirtiendo su posible uso como palabras clave. La entrada
misma de la tabla de smbolos puede establecerse cuando se aclara el papel de un
nombre, y se llenan los valores de los atributos cuando se dispone de la informa
cin. En algunos casos, el analizador lxico puede iniciar la entrada en cuanto apar
ezca un nombre en los datos de entrada.
110
Fig. Una tabla de smbolos separada en dos partes, utilizando una parte como apunt
ador a dicha tabla para hacer referencia a los nombres almacenados en ella.
Un nombre puede indicar varios objetos distintos, quizs incluso en el mismo bloqu
e o procedimiento. Por ejemplo, las declaraciones en C. int x; struct x { float
y, z; } ; Utilizan x como entero y como etiqueta de una estructura con dos campo
s. En ambos casos, el analizador lxico slo puede devolver al analizador sintctico e
l nombre solo (o un apuntador al lexema que forma dicho nombre), en lugar de un
apuntador a la entrada en la tabla de smbolos.
Se crea el registro en la tabla de smbolos cuando se descubre el papel sintctico q
ue desempea este nombre.
111
Para las declaraciones de la expresin, se crearan dos entradas en la tabla de smbol
os para x; una con x como entero y otra como estructura. Los atributos de un nom
bre se introducen en respuesta a las declaraciones, que pueden ser implcitas. Las
etiquetas son identificadores seguidos de dos puntos, as que una accin asociada c
on el reconocimiento de dicho identifica-dor puede ser introducir este hecho en
la tabla de smbolos. La sintaxis de las declaraciones de los procedimientos espec
ifican que algunos identificadores son parmetros formales.
112
1.7.- Manejo de Errores Semnticos
114
Los errores que puede detectar el Analizador Sintctico son aquellos que no cumple
n las reglas de una gramtica independiente del contexto. Una de las caractersticas
de un lenguaje de programacin es que no puede enunciarse con las reglas independ
ientes del contexto, ya que dependen de l; por ejemplo, la restriccin de que los i
dentificadores deben declararse previamente antes de ser utilizados.
1.7.- Manejo de Errores Semnticos
113
19

19/09/2013
Por tanto, los principales errores semnticos son los siguientes: a).-Identificado
res no definidos; b).-Operadores y operandos incompatibles; Es mucho ms difcil int
roducir mtodos formales para la recuperacin de errores semnticos que para la recupe
racin de errores sintcticos, ya que con frecuencia la recuperacin es ambigua.
115
No obstante, puede requerirse que, por lo menos, el error semntico sea informado
al programador, que se le ignore y que, por tanto, se suprimir la generacin de cdig
o. Sin embargo, la mayora de los errores semnticos pueden ser detectados mediante
la revisin de la tabla de smbolos.
116
FUENTES DE INFORMACION
1. Aho, Sethi, Ullman. Compiladores Principios, tcnicas y herramientas. Ed. Addis
on Wesley.
117
FUENTES DE INFORMACION
118
2. Lemone Karen A. , Fundamentos de Compiladores Cmo traducir al lenguaje de comp
utadora. Ed. Compaa Editorial Continental. 3. Kenneth C. Louden. Construccin de com
piladores Principios y prctica. Ed. Thomson. 4. Martin John, Lenguajes Formales y
Teora de la Computacin, ED. Mc Graw Hill. 5. Hopcroft John E., Introduccin a la Te
ora de Autmatas, Lenguajes y Computacin, ED. Addison Wesley 6. Guerra Crespo. Hecto
r. Compiladores. Ed. Tecnolgica Didctica. 7. Ronald Mark. Writing Compilers and In
terpreters. Ed. Wiley Computer Publishing. 8. Fischer, LeBlanc. Crafting a compi
ler with C. Ed. Cummings Publishing Company, Inc. 9. Salas Parrilla, Jess. Sistem
as Operativos y Compiladores. Ed. McGraw Hill.
10. Beck. Software de Sistemas, Introduccin a la programacin de Sistemas. Ed. Addi
son-Wesley Iberoamericana. 11. Teufel, Schmidt, Teufel. Compiladores Conceptos F
undamentales. Ed. Addison-Wesley Iberoamericana. 12. C. Louden, Kenneth. Lenguaj
es de programacin Principios y prctica. Ed. Thomson. 13. Levine Gutirrez, Guillermo
. Computacin y programacin moderna Perspectiva integral de la informtica. Ed. Pears
on Educacin. 14. Abel, Peter. Lenguaje ensamblador y programacin para PC IBM y com
patibles. Ed. Pearson Educacin. 15. Mak, Ronald. Writing compilers and interprete
rs. Wiley Computer. Ed. Publishing. 16. Pittman, Thomas, Peters, James. The art
of compiler design Theory and prctice. Prentice Hall.
Dudas????
119
20

Vous aimerez peut-être aussi