Tema 5: Traducción dirigida por la sintaxis

Documentos relacionados
Tema 5: Traducción dirigida por la sintaxis

Tema 5 (2 a parte): Traductores ascendentes. Algoritmo de análisis ascendente. Procesamiento de Lenguajes. E E op T E T T num

Tema 5 (2 a parte): Traductores ascendentes

Tema 5. Análisis semántico

UNIVERSIDAD NACIONAL DE EDUCACIÓN A DISTANCIA Escuela Técnica Superior de Ingeniería Informática Procesadores de Lenguajes. Tema 5

Compiladores e Intérpretes Análisis Semántico I

ANÁLISIS SEMÁNTICO ETDS VS DDS

Conceptos básicos sobre gramáticas

Gramáticas de Atributos

COMPILADORES. Tema 4. Análisis semántico

Tema 1: Introducción

UNIDAD V. Analisis Semantico. 5.1 Introduccion. Analizador Semántico. Verifica que el significado de las construcciones del lenguaje tengan sentido.

PROCESADORES DE LENGUAJE EXAMEN FINAL 8-JUNIO-07

Traducción Dirigida por Sintaxis

Procesamiento de Lenguajes (PL) Curso 2014/2015. Práctica 1: analizador descendente recursivo

Análisis semántico I Traducción dirigida por la sintaxis

Tema 2: Análisis léxico

Análisis Semántico y Traducción Dirigida por la Sintaxis. Programación II Margarita Álvarez

INTRODUCCIÓN AL PROCESO DE COMPILACIÓN

Funciones Definición de función

Controla el flujo de tokens reconocidos por parte del analizador léxico. 4.2 Introduccion a las gramaticas libres de contexto y arboles de derivacion

Análisis semántico. Análisis semántico. Índice (I)

Tema 4: Análisis sintáctico ascendente. Análisis sintáctico ascendente: un ejemplo

Introducción. Análisis Semántico. José M. Castaño. Teoría de Lenguajes 2011 Departamento de Computación FCEyN, UBA

Tema 2: Análisis léxico

18 Análisis sintáctico III Compiladores - Profr. Edgardo Adrián Franco Martínez. Clasificación de métodos de análisis sintáctico Análisis descendente

Análisis semántico Tabla de símbolos, chequeo de tipos y representaciones internas

Tema 1.2. Un lenguaje mínimo y su procesador: Gramáticas de atributos y tabla de símbolos

PROCESADORES DE LENGUAJES I PRÁCTICA DE LABORATORIO 4

Qué es el análisis semántico?

Capítulo 5: Traducción Dirigida por Sintaxis

ANÁLISIS DESCENDENTE. Compruébese que la siguiente gramática es LL(1) sin modificarla.

Examen de Procesadores de Lenguaje

Compiladores e Intérpretes Análisis Semántico IV

ANÁLISIS SEMÁNTICO GRAMÁTICAS DE ATRIBUTOS Y TIPOS

Traducción dirigida por la sintaxis

TEMA 3: ANÁLISIS SEMÁNTICO

Lección 3: Análisis Semántico

Definición de la sintaxis (1) Definición de la sintaxis (2) Definición de la sintaxis (3)

Yacc/Bison. Introducción

Compiladores: Sesión 15. Análisis semántico, traducción dirigida por sintaxis

UNIVERSIDAD NACIONAL DE EDUCACIÓN A DISTANCIA Escuela Técnica Superior de Ingeniería Informática Procesadores de Lenguajes. Tema 2.

Procesadores de lenguaje Tema 6 La tabla de símbolos

Java. Introducción a la Programación Orientada a Objetos

Unidad Didáctica 2. Elementos básicos del lenguaje Java Tipos, declaraciones, expresiones y asignaciones

Compiladores: Sesión 16. Análisis semántico, traducción dirigida por sintaxis

Procesadores de lenguaje Tema 6 La tabla de símbolos

UNIVERSIDAD NACIONAL DE EDUCACIÓN A DISTANCIA Escuela Técnica Superior de Ingeniería Informática Procesadores de Lenguajes. Tema 3.

Práctica 4 Análisis LALR para milenguaje y construcción de un traductor de milenguaje

ANÁLISIS SINTÁCTICO II GENERADOR DE ANALIZADORES SINTÁCTICOS ASCENDENTES

Lenguajes y Compiladores Traducción Dirigida por la Sintaxis

Análisis semántico. Análisis semántico. Índice


Procesamiento de Lenguajes (PL) Curso 2015/2016. Práctica 5: traductor a código m2r

VARIABLES, CONSTANTES Y EXPRESIONES ASIGNACIÓN. TIPOS ELEMENTALES. PRECEDENCIA DE LOS ESTRUCTURAS DE CONTROL. CONDICIONAL E

Problemas de Procesadores de Lenguaje Juan Antonio Pérez Ortiz, japerez[en]dlsi.ua.es

GENERACIÓN DE CÓDIGO INTERMEDIO ÁRBOLES DE SINTAXIS ABSTRACTA (ASA)

Lenguajes y Compiladores Análisis Sintáctico Parte I. Teoría Lenguajes 1

CÓMO DESARROLLAR Y PROBAR PROGRAMAS?, COMPRUÉBALO!

FLEX: A FAST LEXICAL ANALYZER GENERATOR

16 Análisis sintáctico I

ÁRBOLES DE SINTAXIS. Los nodos no terminales (nodos interiores) están rotulados por los símbolos no terminales.

Generación de Código Intermedio

Práctica 2. Reutilización de código Elementos básicos del lenguaje Java Definición de variables, expresiones y asignaciones

Examen de Traductores, Intérpretes y Compiladores. Convocatoria ordinaria de Junio de er Curso de I.T. Informática de Sistemas.

Análisis semántico Tabla de símbolos, chequeo de tipos y representaciones internas

Instituto Tecnológico de Celaya

Analizador Léxico. Programación II Margarita Álvarez. Analizador Léxico - Funciones

Teoría de lenguajes Oscar BRUNO

Elementos para el estudio de los compiladores

PRÁCTICA. Apellidos, Nombre: Calificación:

Curso de Java Introducción a la Programación II

Bison. Introducción. Índice. Introducción Uso de Bison con Flex. Formato del fichero de especificación de Bison

Objetivos Que el estudiante logre conocer, comprender y manejar conceptos y técnicas vinculados con el Analizador Léxico, para lo cual debe:

Compiladores: Introducción

18. Interfaces Declaración de una interfaz

INTRODUCCIóN A LA PROGRAMACIóN APUNTES DE JAVA APUNTES DE JAVA

Tema: Análisis Semántico

NOMBRE DEL CURSO: Organización de Lenguajes y Compiladores 2 CÓDIGO: 781 CRÉDITOS: 5 ÁREA A LA QUE PERTENECE: POST-REQUISITO:

Procesadores de lenguaje Tema 4 Análisis semántico

Lenguajes y Compiladores Aspectos Formales (Parte 2) Compiladores

TEÓRICO ID ; = [ ], $

Diseño de Compiladores I. Estructura General de un Compilador

ANÁLISIS SEMÁNTICO LA TABLA DE SÍMBOLOS

GENERACIÓN DE CÓDIGO INTERMEDIO EJEMPLOS PARA DISTINTAS ESTRUCTURAS DE DATOS

UNIVERSIDAD DE GUADALAJARA

Procesadores de lenguaje Tema 4 Análisis semántico

Agenda. Introducción Analizador léxico Analysis El problema de analizar sintácticamente Analizador sintáctico descendeterecursivo

NOMBRE DEL CURSO: Organización de Lenguajes y Compiladores 2

PROCESADORES DEL LENGUAJES Ev. Alternativa

Apunte Laboratorio ALPI - El lenguaje de programación Pascal

Tema: Análisis Sintáctico

Transcripción:

Tema 5: Traducción dirigida por la sintaxis Procesamiento de Lenguajes Dept. de Lenguajes y Sistemas Informáticos Universidad de Alicante Procesamiento de Lenguajes Tema 5: Traducción dirigida por la sintaxis 1 / 35 Ejemplo 1 de traducción E E + T E T T T * F T F F id F num F pari E pard a+4*b suma(a,mul(4,b)) E a T a F a id a E suma(a,mul(4,b)) + T 4 F 4 num 4 T mul(4,b) * F b id b Procesamiento de Lenguajes Tema 5: Traducción dirigida por la sintaxis 2 / 35

Ejemplo 1 de traducción (2) GRAMÁTICA DE ATRIBUTOS REGLA ACCIÓN SEMÁNTICA E E + T E.trad := suma( E 1.trad, T.trad ) E T E.trad := T.trad T T * F T.trad := mul( T 1.trad, F.trad ) T F T.trad := F.trad F id F.trad := id.lexema F num F.trad := num.lexema F pari E pard F.trad := E.trad IMPORTANTE: no es posible acceder a atributos de símbolos que no estén en la regla Procesamiento de Lenguajes Tema 5: Traducción dirigida por la sintaxis 3 / 35 Ejemplo 2 de traducción D T id L T float T int L coma id L L ɛ int a,b a,b:integer T integer int D a,b:integer id a L,b coma id b L ɛ Procesamiento de Lenguajes Tema 5: Traducción dirigida por la sintaxis 4 / 35

Ejemplo 2 de traducción (2) REGLA GRAMÁTICA DE ATRIBUTOS ACCIÓN SEMÁNTICA D T id L D.trad := id.lexema L.trad : T.trad T float T.trad := real T int T.trad := integer L coma id L L.trad :=, id.lexema L 1.trad L ɛ L.trad := Procesamiento de Lenguajes Tema 5: Traducción dirigida por la sintaxis 5 / 35 Implementación del traductor Existen dos posibilidades: 1 El analizador sintáctico construye el árbol (decorado con los atributos de los terminales), y en una segunda pasada se recorre el árbol calculando los atributos que falten hasta completar la traducción (traducción de dos o más pasadas) 2 El analizador sintáctico no construye explícitamente el árbol (aunque hace un recorrido virtual por el árbol), y va calculando todos los atributos a la vez que va recorriendo el árbol (traducción de una sola pasada) Procesamiento de Lenguajes Tema 5: Traducción dirigida por la sintaxis 6 / 35

Recorrido virtual del árbol realizado por el A.S. E 13 E E + T E T T T * F T F F id F num F pari E pard E 4 T 3 F 2 id 1 + 5 T 12 T 8 F 7 num 6 * 9 F 11 id 10 Procesamiento de Lenguajes Tema 5: Traducción dirigida por la sintaxis 7 / 35 Ejemplo 3 de traducción D T id L T float T int L coma id L L ɛ T integer D a:integer;b:integer id a L integer ;b:integer int int a,b a:integer;b:integer coma id b L integer ɛ Procesamiento de Lenguajes Tema 5: Traducción dirigida por la sintaxis 8 / 35

Ejemplo 3 de traducción (2) REGLA GRAMÁTICA DE ATRIBUTOS ACCIÓN SEMÁNTICA D T id L L.th := T.trad; D.trad := id.lexema : T.trad L.trad T float T.trad := real T int T.trad := integer L coma id L L 1.th := L.th; L.trad := ; id.lexema : L.th L 1.trad L ɛ L.trad := Algunos no terminales tienen más de un atributo Algunos atributos se calculan a partir de atributos de hermanos o padres en el árbol. Estos atributos se llaman atributos heredados (los demás atributos se llaman sintetizados). Procesamiento de Lenguajes Tema 5: Traducción dirigida por la sintaxis 9 / 35 Grafo de dependencias D a:integer;b:integer T integer int id a L integer ;b:integer coma id b L integer ɛ Procesamiento de Lenguajes Tema 5: Traducción dirigida por la sintaxis 10 / 35

Ejemplo 4 de traducción D L T T real T integer L L coma id L id L int int a;int b D int a;int b T int integer a,b integer int a;int b L int int a id a coma id b IMPORTANTE: hay herencia de derecha a izquierda en el árbol Procesamiento de Lenguajes Tema 5: Traducción dirigida por la sintaxis 11 / 35 Ejemplo 4 de traducción (2) REGLA GRAMÁTICA DE ATRIBUTOS ACCIÓN SEMÁNTICA D L T L.th := T.trad; D.trad := L.trad T real T.trad := double T integer T.trad := int L L coma id L 1.th := L.th; L.trad := L 1.trad ; L.th id.lexema L id L.trad := L.th id.lexema La herencia de derecha (T ) a izquierda (L) implica que cuando se está analizando/traduciendo L todavía no se conoce la traducción de T Por tanto, no es posible traducir a la vez que se analiza, no es posible la traducción en una pasada. El analizador tiene que construir explícitamente el árbol, y cuando termine, en una segunda pasada, podrá generar la traducción. Procesamiento de Lenguajes Tema 5: Traducción dirigida por la sintaxis 12 / 35

Gramática de atributos por la izquierda DEFINICIÓN: una gramática de atributos se dice que es una gramática de atributos por la izquierda (l-attributed grammar) si solamente hay herencia de padres a hijos o bien de izquierda a derecha en el árbol, pero no de derecha a izquierda Las gramáticas de atributos por la izquierda (GAI) son aquellas que permiten evaluar los atributos a la vez que se hace el análisis sintáctico (en una sola pasada). Cuando la gramática de atributos no cumple las condiciones de las GAI (porque tiene herencia de derecha a izquierda en el árbol), el analizador sintáctico debe construir un árbol decorado con atributos y, en una segunda pasada se evaluarán los atributos que no se hayan podido evaluar en la primera pasada. Procesamiento de Lenguajes Tema 5: Traducción dirigida por la sintaxis 13 / 35 Tabla de símbolos La tabla de símbolos se utiliza para almacenar los símbolos (identificadores) declarados en el programa fuente, junto con su tipo y posiblemente alguna información más (dirección de memoria, etc). Ejemplo: int a,b; float c,d; NOMBRE TIPO DIRECCIÓN a ENTERO 0 b ENTERO 2 c REAL 4 d REAL 8 Procesamiento de Lenguajes Tema 5: Traducción dirigida por la sintaxis 14 / 35

Tabla de símbolos (2) Cuando el compilador procesa las declaraciones, tiene que añadir las variables declaradas a la tabla de símbolos (comprobando que no se declara dos veces el mismo identificador en el mismo ámbito). En el código (instrucciones, expresiones, etc), cuando aparece un identificador el compilador debe buscarlo en la tabla de símbolos, y obtener sus datos: tipo, dirección, etc. Procesamiento de Lenguajes Tema 5: Traducción dirigida por la sintaxis 15 / 35 Ejemplo 5 de traducción En este ejemplo, el traductor no genera traducción, pero debe almacenar los símbolos en la tabla de símbolos: int a,b,c NOMBRE TIPO DIRECCIÓN a ENTERO 0 b ENTERO 2 c ENTERO 4 REGLA DEFINICIÓN DIRIGIDA POR LA SINTAXIS ACCIÓN SEMÁNTICA D T id L L.th := T.tipo; anadirts(id.lexema, T.tipo) T float T.tipo := REAL T int T.tipo := ENTERO L coma id L L 1.th := L.th; anadirts(id.lexema, L.th) L ɛ Cuando una gramática de atributos tiene acciones que no calculan atributos, se denomina Definición dirigida por la sintaxis (DDS) Procesamiento de Lenguajes Tema 5: Traducción dirigida por la sintaxis 16 / 35

Definiciones dirigidas por la sintaxis (DDS) Las DDS son como las gramáticas de atributos, pero pueden incluir acciones que no calculen atributos, con efectos secundarios (como guardar símbolos en la tabla de símbolos), por lo que todas las gramáticas de atributos son también DDS De igual manera que existen las gramáticas de atributos por la izquierda (GAI), existen también las definiciones dirigidas por la sintaxis con atributos por la izquierda (DDSI), que son las que permiten la traducción en una sola pasada. IMPORTANTE: las DDS solamente especifican las acciones que es necesario realizar en cada regla, pero no el orden en el que hay que ejecutarlas. Las DDS son una herramienta para el diseño de alto nivel del traductor, sin entrar en los detalles de implementación. El orden de ejecución de las acciones es muy importante Procesamiento de Lenguajes Tema 5: Traducción dirigida por la sintaxis 17 / 35 Restricciones formales de las acciones semánticas Dada una regla A α, y una acción semántica b := f (c 1, c 2,..., c n ), en una gramática de atributos o en una DDS (o en un ETDS), se tiene que cumplir una de las dos siguientes restricciones: 1 b es un atributo sintetizado de A, y c 1, c 2,..., c n son constantes o atributos de los símbolos de la producción (de A o de α) 2 b es un atributo heredado de algún no terminal de α, y c 1, c 2,..., c n son constantes o atributos de los símbolos de la producción (de A o de α) Si b es un atributo heredado de un no terminal α i, y se cumple que c 1, c 2,..., c n son atributos de A o de otros símbolos α j, con j < i, entonces la gramática de atributos o DDS cumple la condición para ser una GAI o DDSI (si se cumple también en las demás acciones semánticas, por supuesto). Procesamiento de Lenguajes Tema 5: Traducción dirigida por la sintaxis 18 / 35

Ejemplo 5 de traducción (2) int a,b,c NOMBRE TIPO DIRECCIÓN a ENTERO 0 b ENTERO 2 c ENTERO 4 ESQUEMA DE TRADUCCIÓN DIRIGIDO POR LA SINTAXIS (ETDS) D T id {anadirts(id.lexema, T.tipo); L.th := T.tipo}L T float {T.tipo := REAL} T int {T.tipo := ENTERO} L coma id {anadirts(id.lexema, L.th); L 1.th := L.th}L L ɛ Un esquema de traducción dirigido por la sintaxis (ETDS) es como una DDSI en la que las acciones semánticas se insertan en la parte derecha de la regla, en el momento exacto del análisis en el que se tienen que ejecutar. Procesamiento de Lenguajes Tema 5: Traducción dirigida por la sintaxis 19 / 35 Esquema de traducción dirigido por la sintaxis (ETDS) Los ETDS son la herramienta para diseñar traductores de una sola pasada Las acciones semánticas se situan (encerradas entre llaves) en el punto de la parte derecha de la regla en que se deben ejecutar. Se tienen que cumplir las siguientes restricciones: 1 Un atributo heredado de un símbolo α i de la parte derecha de la regla se debe calcular en una acción semántica situada antes de α i 2 Una acción semántica no puede referirse a un atributo sintetizado de un símbolo situado a la derecha de la acción en la regla 3 Un atributo sintetizado de la parte izquierda de la regla A solo se puede calcular después de haber calculado todos los atributos que se usan para calcularlo (preferentemente al final de la regla). Procesamiento de Lenguajes Tema 5: Traducción dirigida por la sintaxis 20 / 35

Ejemplo 3 de traducción, con ETDS REGLA GRAMÁTICA DE ATRIBUTOS ACCIÓN SEMÁNTICA D T id L L.th := T.trad; D.trad := id.lexema : T.trad L.trad T float T.trad := real T int T.trad := integer L coma id L L 1.th := L.th; L.trad := ; id.lexema : L.th L 1.trad L ɛ L.trad := ESQUEMA DE TRADUCCIÓN DIRIGIDO POR LA SINTAXIS D T id {L.th := T.trad}L {D.trad := id.lexema : T.trad L.trad} T float {T.trad := real } T int {T.trad := integer } L coma id {L 1.th := L.th}L {L.trad := ; id.lexema : L.th L 1.trad} L ɛ {L.trad := } Procesamiento de Lenguajes Tema 5: Traducción dirigida por la sintaxis 21 / 35 Implementación de ETDS 1 Con un analizador ascendente: hay que utilizar marcadores para implementar las acciones en mitad de la parte derecha (ver libro de A. Garrido et al., pp. 130 y siguientes), incluso con yacc. 2 Con un analizador descendente recursivo: Los atributos sintetizados deben ser devueltos por las funciones de los no terminales (cuando hay más de un atributo es mejor devolver un struct o un objeto con todos los atributos de los no terminales) Los atributos heredados son parámetros que se les pasan a las funciones de los no terminales IMPORTANTE: es necesario almacenar el lexema de los tokens antes de llamar a la función empareja. La traducción de la cadena de entrada es devuelta por la función que analiza el símbolo inicial de la gramática. Procesamiento de Lenguajes Tema 5: Traducción dirigida por la sintaxis 22 / 35

Implementación de ETDS (2) Ejemplo 3 de traducción, implementado con un ASDR: String D() // D -> T id L { String ttrad,idlexema,ltrad; } ttrad = T(); idlexema = lexema; empareja(id); ltrad = L(ttrad); // L.th := T.trad return idlexema + ":" + ttrad + ltrad; String L(String th) // L -> coma id L epsilon { if (token == COMA) { String idlexema,ltrad; } emparejar(coma); idlexema = lexema; emparejar(id); ltrad = L(th); // L1.th := L.th return ";" + idlexema + ":" + th + ltrad; } else if (token == FINFICHERO) return ""; // L -> epsilon { L.trad := "" } else errorsintactico(...); Procesamiento de Lenguajes Tema 5: Traducción dirigida por la sintaxis 23 / 35 Traducción de expresiones aritméticas con ETDS a+b-c+d a+b-c sum(res(sum(a,b),c),d) res(sum(a,b),c) La asociatividad por la izquierda de los operadores + y - implica utilizar una gramática con recursividad por la izquierda: E E op T E T T id T ( E ) Procesamiento de Lenguajes Tema 5: Traducción dirigida por la sintaxis 24 / 35

Traducción de expresiones aritméticas con ETDS (2) E res(sum(a,b),c) E E op T E T T id T ( E ) E a E sum(a,b) op + T b op - T c id c a+b-c res(sum(a,b),c) T a id a id b Procesamiento de Lenguajes Tema 5: Traducción dirigida por la sintaxis 25 / 35 Traducción de expresiones aritméticas con ETDS (3) El ETDS quedaría de esta manera: E E op T {E.trad := op.trad ( E 1.trad, T.trad ) } E T {E.trad := T.trad} T id {T.trad := id.lexema} T ( E ) {T.trad := E.trad} Procesamiento de Lenguajes Tema 5: Traducción dirigida por la sintaxis 26 / 35

Traducción de expresiones aritméticas con ETDS (4) Si queremos realizar la misma traducción con una gramática sin recursividad por la izquierda (porque por ejemplo queremos usar un ASDR), la gramática sería: E T E E op T E E ɛ T id T ( E ) Procesamiento de Lenguajes Tema 5: Traducción dirigida por la sintaxis 27 / 35 Traducción de expresiones aritméticas con ETDS (5) E res(sum(a,b),c) T a E a res(sum(a,b),c) id a E T E E op T E E ɛ T id T ( E ) op + T b id b E sum(a,b) res(sum(a,b),c) a+b-c res(sum(a,b),c) op - T c E res(sum(a,b),c) res(sum(a,b),c) id c ɛ Procesamiento de Lenguajes Tema 5: Traducción dirigida por la sintaxis 28 / 35

Traducción de expresiones aritméticas con ETDS (6) El ETDS quedaría: E T {E.th := T.trad}E {E.trad := E.trad} E op T {E 1.th := op.trad ( E.th, T.trad ) } E {E.trad := E 1.trad} E ɛ {E.trad := E.th} T id {T.trad := id.lexema} T ( E ) {T.trad := E.trad} Procesamiento de Lenguajes Tema 5: Traducción dirigida por la sintaxis 29 / 35 Ejercicio 1 (examen febrero 1998) (1 de 2) Diseña un ETDS para traducir declaraciones de funciones en C a Pascal. El proceso de traducción se puede especificar con los siguientes ejemplos de traducción: int f(void), g(float a,int *b); function f:integer; function g(a:real;var b:integer):integer; void h(int a,float *c), procedure h(a:integer;var c:real); j(void); procedure j; float f(int a); int f(int a,int b,int c), g(int d), h(int e); function f(a:integer):real; function f(a:integer;b:integer;c:integer):integer; function g(d:integer):integer; function h(e:integer):integer; Procesamiento de Lenguajes Tema 5: Traducción dirigida por la sintaxis 30 / 35

Ejercicio 1 (examen febrero 1998) (2 de 2) Debes diseñar el ETDS utilizando como base la siguiente gramática, que genera el lenguaje fuente: S TipoFun L puntoycoma TipoFun void TipoFun int TipoFun float L F Lp Lp coma F Lp Lp ɛ F ident lpar A rpar A void A Argu M M coma Argu M M ɛ Argu Tipo ident Argu Tipo asterisco ident Tipo int Tipo float Procesamiento de Lenguajes Tema 5: Traducción dirigida por la sintaxis 31 / 35 Ejercicio 2 (examen marzo 1997) (1 de 2) Diseña un ETDS para traducir declaraciones de funciones y procedimientos anidados en Pascal a C. El proceso de traducción se puede especificar con los siguientes ejemplos de traducción: function f:integer; codigo endfunc; procedure p1; procedure p2; codigo endproc; codigo endproc; int f(); void p1(); void p1_p2(); procedure p1; procedure p2; codigo endproc; function f1:real; codigo endfunc; procedure p3; procedure p4; codigo endproc; codigo endproc; codigo endproc; void p1(); void p1_p2(); float p1_f1(); void p1_p3(); void p1_p3_p4(); Procesamiento de Lenguajes Tema 5: Traducción dirigida por la sintaxis 32 / 35

Ejercicio 2 (examen marzo 1997) (2 de 2) Debes diseñar el ETDS utilizando como base la siguiente gramática, que genera el lenguaje fuente: S P P procedure id ; L endproc ; P function id : T ; L endfunc ; L P L L codigo T integer T real Procesamiento de Lenguajes Tema 5: Traducción dirigida por la sintaxis 33 / 35 Ejercicio 3 (1 de 2) Dada la siguiente gramática (que permite declarar clases anidadas y sus métodos para un determinado lenguaje orientado a objetos): S C C class id { B V } B public : P B ɛ V private : P V ɛ P D P P ɛ D T id ( T id L ) D C L, T id L L ɛ T int T float Procesamiento de Lenguajes Tema 5: Traducción dirigida por la sintaxis 34 / 35

Ejercicio 3 (2 de 2) Construye un ETDS que traduzca a una notación como la indicada en este ejemplo: class A { public: int f1(int n,float s) private: class B { private: float f2 (float r,float s,float t) class C {} } } clase A { público: A::f1 (entero x real -> entero) privado: clase A::B { privado: A::B::f2 (real x real x real -> real) clase A::B::C {} } } Procesamiento de Lenguajes Tema 5: Traducción dirigida por la sintaxis 35 / 35