Lenguajes y Autómatas II Unidad I Sem 2 (2013) (1)

download Lenguajes y Autómatas II Unidad I Sem 2 (2013) (1)

of 20

Transcript of Lenguajes y Autómatas II Unidad I Sem 2 (2013) (1)

  • 5/27/2018 Lenguajes y Aut matas II Unidad I Sem 2 (2013) (1)

    1/20

    19/09/

    MATERIA: LENGUAJES YAUTMATAS II

    Dra. Miriam Martnez Arroyo

    UNIDAD I.- ANALISIS SEMANTICO

    1.1.- Arboles de expresiones.1.2.- Acciones semnticas 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.- Generacin de la tabla de smbolo y de direcciones.1.7.- Manejo de errores semnticos.

    2

    INTRODUCCIN3

    Introduccin

    El lenguaje es un vehculo por el cual se transmiten instrucciones a unprocesador para que las ejecute y produzca ciertos resultados.

    Es tarea del compilador extraer el contenido semntico incluido en lassentencias del programa.

    Ciertos aspectos relativos a la correccin de un programa no se puedenexpresar claramente mediante el lenguaje de programacin.

    Es necesario dotar al compilador de rutinas auxiliares para captar todo loque no se ha expresado mediante la sintaxis del lenguaje.

    4

    5El compilador hasta ahora

    Anlisis lxicoDetecta entradas de tokens legales

    Anlisis SintcticoDetecta entradas con rboles mal formados.

    Anlisis SemnticoDetecta todos los errores restantes

    6Introduccin

    Semntica: conjunto de reglas que espe significado de cualquiersentencia sintcticamente correcta y escrita en un determinadolenguaje.

    El anlisis semntico, a diferencia de otras no se realiza claramentediferenciado del resto de las tareas del compilador.

    Fase en la que se obtiene informacin necesaria para la compilacin, trasconocer la estructura sintcticadel programa.

    Completa las fases de anlisis lxico y sintctico incorporando comprobacionesque no pueden asimilarse al mero reconocimiento de una cadena dentro de unlenguaje

  • 5/27/2018 Lenguajes y Aut matas II Unidad I Sem 2 (2013) (1)

    2/20

    19/09/

    7Objetivo del anlisis semntico

    La semntica del lenguaje forma parte de la especificacin delmismo. Normalmentela semntica de un lenguaje se describe demanera informal.

    El objetivo del anlisis semnticoescomprobar si la semntica delprograma que se est compilando cumple las especificaciones de lasemntica del lenguaje fuente.

    8Objetivo del anlisis semnticoAlgunas de estas comprobaciones son:

    Para realizar el anlisis semntico se utilizan gramticas deatributos, que bsicamente, son gramticas independientes delcontexto en las que los smbolos tienen asignados atributos o valoressemnticos.

    Hay dos tipos 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 laregla.

    heredados: corresponden a los smbolos de la parte derecha de la regla. Seconstruyen a partir de los atributos de los smbolos de ambas partes de la regla.

    Por qu necesitamos el anlisis semntico

    El analizador sintctico no puede detectar todos los errores.

    Algunos constructores del lenguaje no son libres de contextoEjemplo: declaracin de identificadores y su uso.No puedes utilizar una GLC para describir que alguna palabra

    particulares aparezca dos veces en una cadena separada por un textoen medio.

    Una versin abstracta del problema es:{wcw | w (a | b)* }

    declaracin uso

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

    Los requerimientos dependes del lenguaje.

    10

    11 Se asocia informacin a las construcciones del lenguaje de programacin

    proporcionando atributos a los smbolos de la gramtica.

    Ejemplo: el valor de una expresin, el tipo de una variable, su mbito, un trozo de cdigo, el nmero de argumentos de una funcin, etc.

    Los valores de los atributos se calculan mediante reglas semnticasasociadas a las producciones gramaticales.

    12El anlisis semntico incluye:

    La construccin de la Tabla de Smbolos para llevar un seguimiento delsignificado de los identificadores en el programa:

    variables, funciones, tipos, parmetros y mtodos de paso de parmetros en funciones, Etc.

    Realizar la comprobacin e inferencia de tipos en expresiones ysentencias. Por ejemplo:

    que ambos lados de una asignacin tengan tipos adecuados, que no se declaren variables con el mismo nombre, que los parmetros de llamada a una funcin tengan tipos adecuados, nmero de parmetros correcto, Etc.

  • 5/27/2018 Lenguajes y Aut matas II Unidad I Sem 2 (2013) (1)

    3/20

    19/09/

    1.1.- Arboles de expresiones. 13

    1.1.-ARBOL DE EXPRESIONES

    Las expresiones regulares que se pueden representar a travs de lossmbolos contenidos en un alfabeto, tambin se pueden representara travs de rboles, que se denominan rboles de expresiones.

    La informacin contenida en los rboles de expresio-nes tienen lassiguientes caractersticas.

    Se almacena en forma de estructura jerrquica, porque loscomponentes estn en diferentes niveles.

    14

    La informacin se almacena en formaDinmicaporque suforma, tamao y contenido pueden variar durante laejecucin.

    Los datos son almacenados de forma Organizadaporqueimporta la forma en que est dispuesto el contenido.

    La consulta de los datos se hace de manera rpida yeficienteobteniendo mejores resultados.

    15 Propiedades de los rboles

    Los rboles de expresiones estn compuestos por lossiguientes elementos:

    Token.- es una Unidad mnima de informacin entendible porun compilador. Puede ser un ope-rando o un operador.

    Operandos.- Los operandos pueden ser las hojas de losnodos.

    Raz.- La raz de un rbol puede ser cuaquier operador

    aritmtico.

    16

    Reglas para un rbol

    La reglas para representar una expresin mediante un rbolson las siguientes:

    1.- Cada hoja est etiquetada con un operando y solo consta deese operando.

    2.- Cada nodo interior n est etiquetado con un solooperador.

    3.- Las hojas estn representadas por los operandos y los nodospor la raz de cada rbol.

    17 rboles de expresin

    Representan un orden de ejecucinpara la expresin siguiente:

    (A* B) + C * D + E

    +

    +*

    BA * E

    DC

    18

  • 5/27/2018 Lenguajes y Aut matas II Unidad I Sem 2 (2013) (1)

    4/20

    19/09/

    *

    + -

    7 12 9

    Otro ejemplo de rbol sintctico para una expresinAritmtica:

    (7 + 12) * (-9)

    -171

    19 20

    Ejemplo:

    x=(x+y)*(a-b)

    21 22

    23 24

  • 5/27/2018 Lenguajes y Aut matas II Unidad I Sem 2 (2013) (1)

    5/20

    19/09/

    25 26

    27 28

    29 30

  • 5/27/2018 Lenguajes y Aut matas II Unidad I Sem 2 (2013) (1)

    6/20

    19/09/

    31 32

    33 34

    http://www.esdebian.org/wiki/interpretprete-funciones-mediante-arbol-binario-expresiones

    35 36

  • 5/27/2018 Lenguajes y Aut matas II Unidad I Sem 2 (2013) (1)

    7/20

    19/09/

    37 38

    1.2. Acciones Semnticas de un AnalizadorSintctico 39

    1.2. Acciones Semnticas de un AnalizadorSintctico

    Dependiendo del tipo de sentencias, las accionessemnticas pueden agruparse en:

    Sentencias de Declaracin: Se utilizan para completarla seccin de tiposde la Tabla de Smbolos.

    Sentencias ejecutables: Se utilizan para realizarcomprobaciones de tipos entre los operandos implicados.

    40

    41Algunas de estas comprobaciones son:

    comprobacin de tipos en sentencias de asignacincomprobacin de tipos en operaciones aritmtico-lgicascomprobacin de tipos en las sentencias condicionalescomprobacin de la declaracin de las variables antes de su

    uso

    comprobacin de unicidad de identificadores

    comprobacin del indexado de vectores

    Continuacin

    Funciones y procedimientos: Se utilizan paracomprobar el nmero, orden y tipo de los parmetrosactuales en cada llamada a una funcin oprocedimiento.

    Identificacin de variables: Se utilizan paracomprobar si un identificador ha sido declarado antes deutilizarlo.

    Etiquetas: comprobar si hay etiquetas repetidas yvalidacin.

    42

  • 5/27/2018 Lenguajes y Aut matas II Unidad I Sem 2 (2013) (1)

    8/20

    19/09/

    Continuacin

    Constantes: comprobar que no se utilicen en la parteizquierda de una asignacin.

    Conversiones y equivalencias de tipo: realizan laverificacin de las constantes para que stas sean de unmismo tipo.

    Sobrecarga de operadores y funciones: en lasfunciones y los procedimientos, se utilizan para detectary solventar la autenticidad de los datos.

    43 mbitos

    Consiste en empatar las declaraciones de identificadores con su

    usoEl mbito de un identificador es la porcin del programa en la

    cual el identificador es accesible.

    El mismo identificador se puede referir a diferentes cosas endiferentes partes del programa.

    mbitos diferentes para el mismo nombre no se sobreponen.

    Un identificador puede tener mbitos restringidos.Es decir solo es visible en reas particulares 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.

    Pocos lenguajes tiene mbitos dinmicosLisp, SNOBOLEl mbito depende de la ejecucin del programa

    45 Ejemplo de mbito esttico

    int x;-- variable global o campo estticofloat convert_speed(float y ){

    float x; --una x diferente (variable local)x=y*1.6return x;

    }(El uso de x se refiere a la definicin ms cercana )

    46

    mbito en lenguajes OO

    No todas las clases de identificadores siguen la regla delanidamiento ms cercano

    Por ejemplo las definiciones de clasesTodas son visibles globalmente

    Declaracin de campos en JavaVisibles a todos los mtodos en una claseY algunas veces a otras clases tambin

    Dependiendo si son pblicas o privadas, etc.

    47 Ms sobre mbito

    Los nombres de mtodos y atributos tienen reglascomplejas.

    Los nombres de campos son globales dentro de cualquierclase.

    Pero los mtodos y campos no necesitan estar definidosen la clase en la cual se estn utilizando, pero si en unaclase padre (herencia)

    Los mtodos se pueden redefinir (sobreescritura)

    48

  • 5/27/2018 Lenguajes y Aut matas II Unidad I Sem 2 (2013) (1)

    9/20

    19/09/

    Implementacin de la regla anidada mscercana

    La mayor parte del anlisis semntico se puede expresarcomo un recorrido descendente recursivo de un rbol oAST.

    Procesa un nodo nProcesa los hijos de nFinaliza procesando el nodo n

    En cualquier porcin del rbol (contexto en el programa),necesitamos saber que identificadores estn definidos.

    49

    1.3.- Comprobaciones de Tipos en Expresiones50

    La comprobacin de tipos es una forma de asegurar quelos identificadores relacionados sean de tiposcompatibles.

    Dos identificadores son compatibles de acuerdo a losiguiente:

    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 parmetros reales y formales.

    511.3.-Comprobacin de tipos en Expresiones 52Las comprobaciones de consistencia que se efectanantes de la ejecucin del programa fuente, sedenominan comprobaciones estticas.

    Las comprobaciones que se realizan durante laejecucin del programa objeto se denominancomprobaciones dinmicas.

    Larevisin de la sintaxisde un programa fuente esun ejemplo de comprobacinesttica,

    mientras que la comprobacin de tipos, es unejemplo de comprobacin que con frecuencia puedeefectuarse en forma estticay que en ocasionesdebe realizarse dinmicamente.

    Tipos

    Qu es un tipo? La nocin vara de lenguaje a lenguaje.

    Consenso Un conjunto de valores Un conjunto de operadores sobre los valores

    Las clases son una instanciacin moderna de la nocin de tipo

    53

    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!

    Tipos y operaciones 54

  • 5/27/2018 Lenguajes y Aut matas II Unidad I Sem 2 (2013) (1)

    10/20

    19/09/

    Sistema de tiposUn 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 operacionesse utilizan con los tipos correctos.

    Hace cumplir la interpretacin de los valores. Algunas veces puede realizar conversiones automticas cuando el lenguaje

    permite modos mezclados y promocin de tipos.

    El sistema de tipos provee una formalizacin concisa de las reglasde verificacin semntica.

    55 Traslacin dirigida por la sintaxis

    La mayora de los compiladores son de mltiples pasadas.Recorre el AST (rbol de anlisis sintctico) para el anlisis

    semntico, verificacin de tipos.

    Recorre este otra vez para optimizacin.

    y generacin de cdigo

    .. etc.

    56

    Compilacin de una pasada

    Bajo ciertas circunstancias, es posible construir uncompilador completo de una sola pasada.

    Es posible con ciertas condiciones del lenguajeParticularmente cuando se declara antes de que se use.

    Esto requiere que la traslacin se realice durante unrecorrido del rbol en profundidad.

    La forma en que el analizador sintctico se mueve a travs delrbol

    57Verificacin de tiposExisten aspectos a considerar en la verificacin de tipos de un

    compilador

    Procesar las declaraciones y mantener una tabla de smbolos.Almacenar el tipo de cada identificador en la tabla de

    smbolos.

    Realizar la verificacin de tipos y hacer cumplir las reglassemnticas 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

    58

    Verificacin de tipos con aseveraciones

    En cada regla declaramos la aseveracin que se debe cumplir si elprograma es vlido.

    ASSERT(condicin) mensajesignifica: La condicin se supone debe cumplirse Si no es verdadera, imprime mensaje.

    Assert (Visual Studio 2012 ) Prueba una asercin de software en tiempo de compilacin. Si la expresin constante

    especificada es false, el compilador muestra el mensaje especificado y la compilacinemite un error; si no, la declaracin no tiene ningn efecto.

    Puede usarse una macro en C para este propsito#define ASSERT(x,y) if (!x) printf(line %d: %s\n,lineno, (y))

    59

    static_assert( constant-expression, string-literal );

    Ejemplo de verificacin de tipos (un ejemplo

    similar esta en la Sec. 6.4.4 de Kenneth)

    60

  • 5/27/2018 Lenguajes y Aut matas II Unidad I Sem 2 (2013) (1)

    11/20

    19/09/

    Verificacin de tipos en Bison 61 Verificacin de tipos (Cont.) 62

    Expresiones de Tipos

    El tipo de una construccin de un lenguaje se denotarmediante una Expresinde tipo.

    Una expresin de tipo es, o bien un tipo bsico o seforma aplicando un operador llamado constructor detipos a otras expresiones de tipos.

    Los conjuntos de tipos y construcciones bsicasdependen del lenguaje que deba comprobarse.

    63 Se utilizar la siguiente definicin de expresiones de tipos:

    1. Un tipo bsico es una expresin de tipo. Entre los tiposbsicos se encuentranbolean, char, integer y real. Un tipobsico especial, la funcinerror_tipo(),sealar un errordurante la com-probacin de tipos.

    2- Como se puede dar nombre a las expresiones de tipos,elnombre de un tipoes una expresin de tipo.

    64

    65

    3.-Un constructor de tipos aplicado a expresiones de tipos es unaexpresin de tipo. Los constructores incluyen:

    Matrices, Productos,

    Registros, apuntadores y funciones).

    a) Matrices. Si Tes una expresin de tipo, entonces array ( I, T) es unaexpresin de tipo que indica el tipo de una matriz con elementos detipoTy conjunto de ndicesI, Icon frecuencia es un rango de enteros.

    Por ejemplo, la declaracin en PascalVarA: array[1..10] of integer;

    Asocia la expresin de tipo a rray(1..10, integer) conA.

    66b) Productos.Si T1yT2son expresiones de tipo, entonces su producto

    cartesianoT1 x T 2es una expresin de tipo. Se supone que x esasociativa por la izquierda.

    c) Registros. La diferencia entre un registro y un producto es que loscampos de un registro tienen nombres. El constructor de tiposrecordse aplicar a un conjunto ordenado formado con nombres decampos y tipos de campos. Por ejemplo, el fragmento de programaen Pascal:

    Type fila = recordDireccin: integer;Lexema: array [1..15] of charend;

    var tabla: array [1..10] of fila;

  • 5/27/2018 Lenguajes y Aut matas II Unidad I Sem 2 (2013) (1)

    12/20

    19/09/

    67Declara que el nombre de tipo fila representa la expresin de tipo.

    Record(direccin x integer ) x (lexema x array (1..15, char))

    Y que la variable tablaes una matriz de registro de este tipo.

    d) Apuntadores.- Si Tes una funcin de tipo, entoncespointer(T) esuna expresin de tipo que indica el tipo apuntador a un objeto deT.

    Por ejemplo, en Pascal, la declaracin

    Var pila: fila

    Declara que la variable pila tiene tipopointer(fila)

    68e) Funciones.- matemticamente una funcin transforma los

    elementos de un conjunto, el dominio, a elementos de otroconjunto, el rango. Se pueden considerar las funciones dentro de loslenguajes de programacin como transformaciones de un dominio detipoDa un rango tipoR. La expresin tipoD R indica el tipo de

    dicha funcin.

    Por ejemplo, la funcin predefinidamodde Pascal tiene un dominiode tipo int x int, es decir, un par de enteros, y rango de tipo int. Deesta forma, se dice quemodtiene el tipo1.

    int x int int

    69

    Con frecuencia existen, por razones de implantacin, limitaciones queen cuanto al tipo que una funcin puede devolver; por ejemplo,matrices o funciones.

    Sin embargo existen lenguajes que permiten que las funcionesdevuelvan objetos de tipos arbitrarios, as que se puede definir unafuncingde tipo

    (integer integer); (integer integer)

    Es decir, g toma como argumento una funcin que transforma unentero en un entero y g produce como resultado otra funcin delmismo tipo.

    704.-Las expresiones de tipo pueden contener variables cuyos

    valores son expresiones de tipos.

    Una manera conveniente de representar expresiones detipo es utilizando un grafo.

    Con el enfoque de la traduccin dirigida por la sintaxis sepuede construir un rbol o un GDA para una expresin detipo, con nodos interiores para los constructores de tipos yhojas para los tipos bsicos, nombres de tipos, y variablesde tipos.

    71

    Por ejemplo, consideremos la siguiente declaracin:

    Str : array [0..80] of char;

    I : integer;

    Estticamente puede que no se cumpla la condicin:0

  • 5/27/2018 Lenguajes y Aut matas II Unidad I Sem 2 (2013) (1)

    13/20

    19/09/

    73E T (* TipoE := TipoT; *)

    E1 E2 + T (* TipoE1:= ifTipoE2= integer end

    TipoT = integer then integer

    else error_tipo; *)T F (* TipoT := TipoF *)

    T1 T2* F (* TipoT1:= ifTipoT2= integer end

    TipoF = integer then integer

    else error_tipo; *)

    F x (* TipoF := buscar_Tipo(x); *)

    F y (* TipoF := buscar_Tipo(y); *)

    F ( E (* TipoF := TipoE; *)

    74El procedimiento buscar Tipo(...) se utiliza para determinar el tipo

    de un identificador por medio de la revisin de la tabla de smbolos.

    Por ejemplo, el tipo de una expresin formada donde se aplica el

    operador + a una subexpresin y un trmino, es entero, si el tipode la subexpresin y el trmino es entero; en caso contrario ser unerror de tipo.

    La formulacin de reglas para semnticas (tipo Pascal), queestablecen, por ejemplo, que Entero * Realgenera un resultado detipoReal, es obvia y puede verse cmo se propagar un tipo.

    De esta forma, durante el proceso de anlisis semntico, sepuede determinar donde se requieren cambios forzados detipo y qu operadores deben relacionarse (por ejemplo,multiplicacin entera o de punto flotante).

    Se debe sealar que no todos los lenguajes deprogramacin permiten una comprobacin esttica de tiposcomo la que se acaba de exponer, para ello se tiene queimplementar en su diseo, para que pueda ser considerada.

    75

    1.4.- Pila Semntica en un Analizador Sintctico76

    Pila semntica en un ASem

    La pila juega un papel fundamental en el desarrollo de cualquieranalizador semntico. Dentro de cada elemento de la pila seguardan 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 conjunto de parmetros que slo sonvisibles en ese ambiente.

    La tabla de smbolos se mantiene durante todo el proceso detraduccin agregando elementos especficos en cada paso.

  • 5/27/2018 Lenguajes y Aut matas II Unidad I Sem 2 (2013) (1)

    14/20

    19/09/

    Tabla de smbolos

    Funcionalidades bsicas:

    Inserta(smbolo)

    Existe(nombre)

    Se agrega una primitiva ms: Tipo (nombre)

    El anlisis lxi co crea la tabla de smbolos?

    No

    Tabla de Smbolos

    Cmo se agrega la semntica al analizador sintctico?

    DeclaracinTIPO {tipo=obtengo(yytext());} 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

    Una tabla de smbolos es una estructura de datos empleadapara registrar las declaraciones de identificadores.

    Los identificadores se almacenan cuando se declaranCon atributos

    Nombres de clases, mtodos, variables, etcY 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.

    83Implementacin de la tabla de smbolos

    La estructura es una pilaO una lista ligada que opera como pila

    Operacionesadd_symbol(x) inserta x y la informacin asociada, tal como el

    tipo, en la pila.find_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

    84

  • 5/27/2018 Lenguajes y Aut matas II Unidad I Sem 2 (2013) (1)

    15/20

    19/09/

    Una tabla de smbolos ms elaborada

    enter_scope() comenzar un nuevombito anidado find_symbol(x) encuentra el x actual

    (o null) add_symbol(x) agrega un smbolo x

    a la tabla check_scope(x) verdadero si x esta

    definido en el mbitoactual (verificardeclaraciones mltiples)

    exit_scope() salir del mbito Descartar todos los smbolos del mbito reciente

    85Definicin de clase

    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 usualFase 1: Junta todos los nombres de clases (+ otras cosas)Fase 2: Realiza la verificacin

    El anlisis semntico completo requiere varias pasadas.Probablemente ms de una

    La mayora de compiladores en JAVA busca por archivosde clases previamente compiladas.

    87 Implementacin de una Tabla de Smbolos

    simple 88

    89

    Anlisis semntico esttico:

    se realiza en tiempo de compilation, no de execution.

    1. Cmo vamos a especificar (describir) la estructura semnticade un lenguaje? Mediante gramticas de atributos.

    2. Cmo vamos a implementar la estructura semntica de unlenguaje? A partir de la construccin del rbol de anlisis sintctico, lo recorreremos

    en un determinado orden y calcularemos en cada nodo la informacinsemntica necesaria (el valor de una expresin, el tipo de una variable, sumbito de declaracin, el nmero de argumentos de una funcin, etc).

    1.5.- Esquemas de Traduccin

    Los programas de aplicacin, los videojuegos y otrasherramientas que se ejecutan en las computadoras,generalmente se realizan en lenguajes de alto nivel.

    Estos programas escritos en lenguajes de alto nivel ne-cesitan ser traducidos a un lenguaje que sea entendiblepor la computadora, este lenguaje es el lenguaje de bajonivel.

    90

  • 5/27/2018 Lenguajes y Aut matas II Unidad I Sem 2 (2013) (1)

    16/20

    19/09/

    1.4.- Pila Semntica en un Analizador Sintctico 91

    1.3.- Comprobaciones de Tipos en Expresiones

    Sistemas de Tipos.

    El diseo de un comprobador de tipos para un lenguaje se basa eninformacin acerca de lasconstrucciones sintcticas del lenguaje, lanocin de tipos y las reglas para asignar tipos a las construcciones delenguajes.

    Los siguientes extractos de Pascal y del manual de referencia de C,respectivamente, son ejemplos de la informacin con la que el diseadorde un compilador podra verse obligado a comenzar.

    92

    Si ambos operandos de los operadores aritmticos desuma, sustraccin y multiplicacin son de tipo entero,entonces el resultado es de tipo entero.

    Elresultado del operando unario & es un apuntador haciael objeto al que se refiere el operando. Si el tipo deloperando es Un Arreglo, o el tipo del resultado esapuntador a .

    En los anteriores extractos se encuentra implcita la ideade que cada expresin tiene asociado un tipo.

    93 En los lenguajes Pascal y C, los tipos de datos son

    bsicos o construidos. Los tipos bsicos son los tiposatmicos sin estructura interna por lo que concierne alprogramador.En Pascal, los tipos bsicos son bolean, carcter, integery real.

    Los tipos de subrango, como 1..10, y los tiposenumerados, 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 bsicos y otros tipos construidos,como por ejemplo, las matrices o arreglos (array), losregistros (record) y los conjuntos (set).

    Adems, los apuntadores y las funciones tambin puedenconsiderarse como tipos construidos.

    Estos son algunos ejemplos de tipos de datos construidosque se pueden realizar con los lenguajes de alto nivel.

    95 Todos los programas escritos en lenguajes de alto nivel

    deben ser traducidos a lenguaje de mquina mediante untraductor.

    La funcin de un traductor de un lenguaje de pro-gramacin, es traducir programas escritos en un lenguajede alto nivel a programas equivalentes, expresados enlenguaje mquina.

    Despus del proceso de traduccin, los programas puedenejecutarse en cualquier computadora a travs de unintrprete microprogramado

    96

  • 5/27/2018 Lenguajes y Aut matas II Unidad I Sem 2 (2013) (1)

    17/20

    19/09/

    La siguiente figura muestra el funcionamiento de un traductormediante un compilador de cuatro pasos con las dems

    actividades que intervienen durante la compilacin de unprograma hasta llegar a convertir el programa escrito enlenguaje de alto nivel a un programa escrito en lenguajeensamblador o lenguaje binario, para que posteriormente seconvierta en programa objeto:

    97 98

    Tipos de Traduccin de lenguajes.

    Interpretados.- Este tipo de traduccin lee y ejecu-tainstruccin por instruccin. LIPS, Prolog, Basic y Smalltalk, sesuelen implementar a travs del uso de un interprete .En esta clase de lenguajes, el traductor no procede cdigo demquina para la computadora que s esta utilizando.En su lugar, el traductor produce alguna forma inter-mediadel programa cuya ejecucin es ms fcil que la forma del

    programa original, pero que es distinta del cdigo mquina.

    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 setraducen ordinariamente al lenguaje mquina de lacomputadora real que s esta usando antes que inicie laejecucin,

    y la simulacin est confinada a un con-junto de rutinas deapoyo en tiempos de ejecucin que simulan operacionesprimitivas en el lenguaje fuente para las cuales no existeun anlogo cercano en el lenguaje mquina.

    100

    Existe otro tipo de traduccin que se realiza directa-mentepor el procesador, esta traduccin se describe a

    continuacin:

    Ensamblador.-Es un traductor cuyo lenguaje objeto estambin alguna variedad de lenguaje mquina para unacomputadora real pero cuyo lenguaje fuente, un lenguajeensamblador constituye en gran medida una representacinsimblica del cdigo de mquina objeto.

    Casi todas las instrucciones en el lenguaje fuente setraducen una por una a cada instruccin del lenguajeobjeto.

    101Cargador.- es un traductor cuyo lenguaje objeto es uncdigo de mquina real y cuyo lenguaje fuente es casi

    idntico; y est compuesto por lo general de programas enlenguaje mquina en forma reubicable junto con tablas dedatos que especifican puntos donde el cdigo reubicable sedebe codificar para volverlo automticamente ejecutable.

    102

    Preprocesador o Macroprocesador.- es un tra-ductor cuyolenguaje fuente es una forma ampliada de un lenguaje dealto nivel cuyo lenguaje objeto es la forma estndar delmismo lenguaje.

  • 5/27/2018 Lenguajes y Aut matas II Unidad I Sem 2 (2013) (1)

    18/20

    19/09/

    1.6.- Generacin de la Tabla de Smbolos y de Direcciones.103

    1.6.- Generacin de la Tabla de Smbolos yde Direcciones.

    Una tabla de smbolos es una estructura de datos que contiene unaentrada para cada identificador encontrado en el programa fuente.Con el objeto de que el compilador pueda llevar un control de lainformacin sobre el mbito y el enlace de los nombres de datos queintervienen en el progra-ma fuente.

    Los campos de cada entrada en la tabla de sm-bolos corresponden alos atributos de cada i-dentificador. (Tipo, valor, direccin,parmetros, etc.).

    104

    Durante la compilacin de un programa, cada vez que se encuentra unidentificador 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 nuevoidentificador.

    En la tabla se puede completar los atributos faltantes de un identificador yaexistente.

    Se pueden recuperar los atributo de un iden-tificador ya existente en la tablade smbolos.

    Un mecanismo de tabla de smbolos debe permitir aadir nuevasentradas y encontrar las entradas existentes de un analizador lxicoeficientemente.

    105 Los dos mecanismos para tablas de smbolos presentadas a

    continuacin sonlistas linealesytablas de dispersin.

    Cada uno de estos mecanismos se evala basn-dose en el tiemponecesario para aadirnentra-das y realizareconsultas.

    Una lista lineales lo ms fcil de implantar, pero su rendimientoes pobre cuandoeynse vuelven ms grandes.

    Las tablas de dispersinproporcionan un mayor rendimiento conesfuerzo algo mayor de programacin y gasto de espacio.

    Ambos mecanismos pueden adaptarse rpida-mente para

    funcionar las reglas del anidamiento ms cercano.

    106

    107 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,entonces el tamao debe de ser lo suficientemente grande comopara almacenar cualquier programa fuente.

    Es muy probable que dicho tamao sea demasiado grande para lamayora de los programa e inadecuado para algunos.

    Para mantener uniformes los registros de la tabla de smbolos, esconveniente guardar una parte de la informacin de un nombre fuerade la entrada de la tabla, almacenando en el registro slo unapuntador a esta infor-macin, para hacer referencia a l.

    Administracin de la Tabla de Smbolos.

    Cada entrada de la tabla de smbolos corresponde a ladeclaracin de un nombre. El formato de las entradas no tieneque ser uniforme porque la informacin de un nombre dependedel uso de dicho nombre.

    Cada entrada se puede implantar como un registro que constede 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 lxicobusca secuencias de letras y dgitos en la tabla de smbolos paradeterminar si se ha encontrado una palabra clave o un nombre.

    108

  • 5/27/2018 Lenguajes y Aut matas II Unidad I Sem 2 (2013) (1)

    19/20

    19/09/

    Fig. Una tabla de smbolos separada en dos partes,utilizando una parte como apuntador a dicha tabla parahacer referencia a los nombres almacenados en ella.

    109 110

    Las palabras clave deben estar en la tabla de smbolos antes de quecomience el anlisis lxico.

    Si el analizador lxico reconoce las palabras clave, entonces nonecesitan aparecer 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 latabla de smbolos advirtiendo su posible uso como palabras clave.

    La entrada misma de la tabla de smbolos puede establecerse cuandose aclara el papel de un nombre, y se llenan los valores de losatributos cuando se dispone de la informacin.

    En algunos casos, el analizador lxico puede iniciar la entrada encuanto aparezca un nombre en los datos de entrada.

    Un nombre puede indicar varios objetos distintos, quizs incluso en elmismo bloque o procedimiento.

    Por ejemplo, las declaraciones en C.

    int x;struct x { float y, z; } ;

    Utilizan xcomo entero y como etiqueta de una estructura con doscampos.

    En ambos casos, el analizador lxico slo puede devolver al analizadorsintctico el nombre solo (o un apuntador al lexema que forma dichonombre), en lugar de un apuntador a la entrada en la tabla desmbolos.

    111 112

    Se crea el registro en la tabla de smbolos cuando se descubre elpapel sintctico que desempea este nombre.

    Para las declaraciones de la expresin, se crearan dos entradas enla tabla de smbolos para x; una con x como entero y otra comoestructura.

    Los atributos de un nombre se introducen en respuesta a lasdeclaraciones, que pueden ser implcitas.

    Las etiquetas son identificadores seguidos de dos puntos, as que unaaccin asociada con el reconocimiento de dicho identifica-dor puedeser introducir este hecho en la tabla de smbolos.

    La sintaxis de las declaraciones de los procedimientos especificanque algunos identificadores son parmetros formales.

    1.7.- Manejo de Errores Semnticos113

    1.7.- Manejo de Errores Semnticos

    Los errores que puede detectar el Analizador Sintcticoson aquellos que no cumplen las reglas de una gramticaindependiente del contexto.

    Una de las caractersticas de un lenguaje deprogramacin es que no puede enunciarse con las reglasindependientes del contexto, ya que dependen de l; porejemplo, la restriccin de que los identificadores debendeclararse previamente antes de ser utilizados.

    114

  • 5/27/2018 Lenguajes y Aut matas II Unidad I Sem 2 (2013) (1)

    20/20

    19/09/

    Por tanto, los principales errores semnticos sonlos siguientes:

    a).-Identificadores no definidos;b).-Operadores y operandos incompatibles;

    Es mucho ms difcil introducir mtodos formalespara la recuperacin de errores semnticos quepara la recuperacin de errores sintcticos, ya quecon frecuencia la recuperacin es ambigua.

    115 116No obstante, puede requerirse que, por lo menos,el error semntico sea informado al programador,que se le ignore y que, por tanto, se suprimir lageneracin de cdigo.

    Sin embargo, la mayora de los errores semnticospueden ser detectados mediante la revisin de latabla de smbolos.

    FUENTES DE INFORMACION

    1. Aho, Sethi, Ullman. Compiladores Principios, tcnicas y herramientas. Ed. Addison Wesley.

    2. Lemone Karen A. , Fundamentos de Compiladores Cmo traducir al lenguaje de computadora. Ed.Compaa Editorial Continental.

    3. Kenneth C. Louden. Construccin de compiladores 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 Teora de Autmatas, Lenguajes y Computacin, ED. Addison Wesley

    6. Guerra Crespo. Hector. Compiladores. Ed. Tecnolgica Didctica.

    7. Ronald Mark. Writing Compilers and Interpreters. Ed. Wiley Computer Publishing.

    8. Fischer, LeBlanc. Crafting a compiler with C. Ed. Cummings Publishing Company, Inc.

    9. Salas Parrilla, Jess. Sistemas Operativos y Compiladores. Ed. McGraw Hill.

    117

    10. Beck. Software de Sistemas, Introduccin a la programacin de Sistemas. Ed. Addison-WesleyIberoamericana.

    11. Teufel, Schmidt, Teufel. Compiladores Conceptos Fundamentales. Ed. Addison-Wesley Iberoamericana.

    12. C. Louden, Kenneth. Lenguajes de programacin Principios y prctica. Ed. Thomson.

    13. Levine Gutirrez, Guillermo. Computacin y programacin moderna Perspectiva integral de lainformtica. Ed. Pearson Educacin.

    14. Abel, Peter. Lenguaje ensamblador y programacin para PC IBM y compatibles. Ed. PearsonEducacin.

    15. Mak, Ronald. Writing compilers and interpreters. Wiley Computer. Ed. Publishing.

    16. Pittman, Thomas, Peters, James. The art of compiler design Theory and prctice. Prentice Hall.

    FUENTES DE INFORMACION 118

    Dudas???? 119