Compiladores e intérpretes Generación de código intermedio II

Slides:



Advertisements
Presentaciones similares
ÁRBOLES DE SINTAXIS ÁRBOL grafo dirigido acíclico.
Advertisements

ANALIZADOR SEMANTICO DIANA CAROLINA CASTAÑO YANCI VIVIANA CASTRO PEDRO LUIS FLÓREZ SANTIAGO GUTIÉRREZ A.
Infijo a postfijo Expr -> Expr + Término Expr -> Expr - Término
Análisis Sintáctico Capítulo 4.
Análisis Sintáctico Predictivo No Recursivo
Análisis Sintáctico Descendente
A NIMACIONES PL-P RÁCTICA 12 CUP. A NÁLISIS CON CUP Introducción. La expresión que va a ser analizada es la siguiente: Se utilizará la misma nomenclatura.
Clasificación de los compiladores
Compiladores e intérpretes Análisis Sintáctico II
Compiladores e intérpretes
Compiladores e intérpretes
Compiladores e intérpretes Análisis Sintáctico III
Compiladores e intérpretes Análisis Sintáctico VI
Prof. Ing.Maria Rosa Damaso Rios
Cb00843 Traductores Rogelio Dávila Pérez Profesor Planta
Gramáticas Libres de Contexto
Análisis Lexicográfico
¿Compilador ? Es un traductor que convierte un texto escrito en un lenguaje fuente y lo traduce a un programa objeto en código máquina.
Procesadores de Lenguaje
Prototipo de compilador didáctico del lenguaje LC99
OPTIMIZACION DE CODIGO
Type tipo_bf = ; tipo_dato = word; tipo_puntero = ^tipo_nodo; tipo_nodo = record dato: tipo_dato; izquierdo, derecho: tipo_puntero; bf: tipo_bf;
ANALIZADOR SINTACTICO
Analizador Léxico. 4 scanners:
ALGORÍTMICA Dpto. Ingeniería de Sistemas y Automática
Traducción dirigida por la Sintaxis
ANALISIS SINTACTICO DESCENDENTE
Teoría de lenguajes y compiladores
Analizadores semánticos: DDS y EDT
Análisis Semántico y Chequeo de Tipos
ANALISIS SINTACTICO El análisis gramatical es la tarea de determinar la sintaxis, o estructura, de un programa. Por esta razón también se le conoce como.
Teoría de lenguajes y compiladores
TRAMPAS EN EL DISEÑO DE LENGUAJES CON RELACIÓN A LOS NOMBRES - REGLAS DE ALCANCE - COMPILACIÓN POR SEPARADO CONTROL DE FLUJO - EVALUACIÓN DE EXPRESIONES.
Docente. Christian Alexander Martínez Arteaga
Tema 9 Estructuras.
Programación de sistemas
M.C. Meliza Contreras González
Análisis sintáctico LR: SLR (LR simple)
Procesadores del Lenguaje
M.C. Juan Carlos Olivares Rojas
TIPOS Y ESTRUCTURAS BÁSICAS DE DATOS
Traducción Dirigida por la Sintáxis
ANALISIS SINTACTICO Parte I
Estructura de Datos y Algoritmos
Resumen de Compilación Preparado por Manuel E. Bermúdez, Ph.D. Associate Professor University of Florida Traducido por Christian Torres Universidad Ricardo.
Clasificación de Gramáticas y Manejo de Errores
ESTRUCTURA DE DATOS ESD-243
Diseño lógico combinacional mediante VHDL
Teoría de lenguajes y compiladores
Todo traductor esta basado en una gramática para el lenguaje fuente. Todo traductor esta basado en una gramática para el lenguaje fuente. Una gramática.
Introducción al Análisis Sintáctico
(false and (74 >= 34)) xor 45 < 78 ; El análisis semántico en CUP se hace de forma ascendente, por ello se parte del árbol completo para su explicación.
Compiladores e intérpretes Análisis Sintáctico III
Programación de Sistemas
Compiladores e intérpretes
Control de Flujo.
Tema 1. Introducción y Conceptos Básicos
Unidad 1. Introducción a los Compiladores.
UNIVERSIDAD LATINA (UNILA)
LE, EI, Profesor Ramón Castro Liceaga UNIVERSIDAD LATINA (UNILA) TRADUCTORES Y ANALIZADOR LEXICOGRÁFICO.
1 Sebastián Argüello A60490 semana 3 Autómatas y compiladores CI-1322.
Teoría de lenguajes y compiladores
LA ARQUITECTURA O LA FUNCIONALIDAD DEL SISTEMA DefiniciónDefiniciónDefinición Declaración y reglas sintácticas.Declaración y reglas sintácticas.Declaración.
Teoría de lenguajes y compiladores
Teoría de lenguajes y compiladores
El proceso de compilación
IV. GRAMÁTICAS DISTRIBUIDAS Y TABLAS DE SÍMBOLOS
Programación de Sistemas
Estructura de Datos PILA Universidad Hispanoamericana Prof. Ing. Erick López.
Sintaxis y Semántica. S.Takahashi Fases en el proceso de análisis de lenguajes Lexer Parser caracteres tokensrespuesta.
Transcripción de la presentación:

Compiladores e intérpretes Generación de código intermedio II Profesor: Eridan Otto

Generación de código intermedio II Uso de notación polaca En parser desendente recursivo

Compiladores e intérpretes Generación de código intermedio II:Uso de notación polaca El código se genera cuando se encuentra el operador Ejemplo: Pila Entrada Godigo Generado $ SABC*+:=$ $S ABC*+:=$ $SA BC*+:=$ $SAB C*+:=$ $SABC *+:=$ (*,B,C,T1) $SA T1 +:=$ (+,A,T1,T2) $ST2 :=$ (:=,T2, ,S) $ $ (end,, ,)

Compiladores e intérpretes Generación de código intermedio II:En parser desendente recursivo Se pueden utilizar las rutinas de las analizadores sintácticos desendentes para ir creando Arboles de Sintaxis Abstracta (ASA), a partir del código. Recordar un no terminal es un procedimiento. Supongamos que se genera con el análisis un arbol binario con tres campos por nodo: Info, información del nodo Izda, puntero al subarbol izquierdo Dcha, puntero al subárbol derecho Se pueden definir las funciones: CreaNodo: crea nodo del árbol CreaHoja :crea hoja del árbol Se añade un parámetro a cada procedimiento que genera el árbol, el cual contiene la referencia al árbol hasta el momento Una vez el árbol terminado, sepuede recorrer y generar grafos dirigidos para optimizar las expresiones matemáticas

Compiladores e intérpretes Generación de código intermedio II:En parser desendente recursivo Ejemplo, código para producción E::= identificador:=E’ Regla semántica CreaHoja(‘identificador’,id.puntero):=E’.nodo Funcion E(VAR arbol:arbol) c:=GetToken IF c=‘identificador’ THEN BEGIN nodo:= CreaHoja(‘identificador’,token.puntero(c)) c:= GetToken if c= ‘:=‘ THEN arbol:=CreaNodo(‘:=‘,arbol,NIL) E’(nodo.dcha(arbol)) ELSE error() END

Compiladores e intérpretes Generación de código intermedio II:En parser desendente recursivo Definición dirigida por sintaxis para construir un ASA de una gramática para expresiones matemáticas. Por ejemplo, al analizar a-4+2+c se genera el siguiente árbol de sintáxis abstracta: En líneas punteadas aparece el arbol sintáctico con nodos etiquetados E y T usando atributo sintetizado .nodo, como puntero a un nodo del árbol ASA Para las producciones T::=id y T::=num, hay un puntero a una hoja identificador o valor numérico

Compiladores e intérpretes Generación de código intermedio II:En parser desendente recursivo Ejemplo: a-4+2+c E.nodo E.nodo T.nodo + + E.nodo + + T.nodo id T.nodo T.nodo - num 2 id - id num Entrada id c id 4 + Entrada id a + c - 2 Ejemplo: a-4+2+c, ASA a 4

Compiladores e intérpretes Generación de código intermedio II:En parser desendente recursivo Ejercicio: derivar de a+a*(b-c)+(b-c)*d su ASA y optimizar + * + - a * d c b a - c b + optimizando, generando Un grafo dirigico acíclico * + * d - a c b

Compiladores e intérpretes Generación de código intermedio II:Generación de cuartetos Asignación y expresiones matemáticas con cuartetos

Compiladores e intérpretes Generación de código intermedio II:Generación de cuartetos Asignación y expresiones matemáticas con cuartetos, Ejercicio, derivar los cuartetos a partir de la sintaxis para a:= b*c+d E.codigo=(*,b,c,t1) (+,t1,d,t2) (:=,t2,a,) S E E.valor=t2 id := E.codigo=(*,b,c,t1) (+,t1,d,t2) E.valor=t1 + E.codigo=(*,b,c,t1) E E E.valor=d E.codigo=‘’ E.valor=b id E * E E.codigo=‘’ E.valor=c E.codigo=‘’ id id

Compiladores e intérpretes Generación de código intermedio II:Generación de cuartetos Asignación y expresiones booleanas. Para el código intermedio se supondrá valor 0 representa a falso y valor 1 reprenta a verdadero. Representación de una expresión booleana para los operadores lógicos, con el flujo de control del código intermedio. Por ejemplo, dadas las expresiones E1 or E2 ,si se determina que E1 es verdadera, la expresión completa es verdadera, sin nececitar evaluar E2 . And al contrario requiere de E1 fala para ser toda la expesión falsa. Agregando a las definiciones de asignación:

Compiladores e intérpretes Generación de código intermedio II:Generación de cuartetos Asignación y expresiones booleanas. Eo:=E1 ‘and’ E2 Eo:=id1 relop id2 Eo.true:=newlabel Eo.false:=newlabel Eo.sale:=newlabel Eo.valor:=newtemp Eo.codigo:= Gen(relop, id1 , id2, Eo.true) Gen(GOTO, ,, Eo.false) Gen(LABEL, , Eo.true) Gen(:=, 1 , , Eo.valor) Gen(GOTO, ,, Eo.sale) Gen(LABEL, , Eo.false) Gen(:=, 0 , , Eo.valor) Gen(LABEL, , Eo.sale) relop := < | > | <= |>= |= | <>

Compiladores e intérpretes Generación de código intermedio II:Generación de cuartetos Ejercicio, genere código intermedio para: a>b or c<d Sentencias de control de flujo , las expresiones booleanas se definieron en el contexto de su utilidad para las definiciones condicionales y de ciclo Ejercicio:Escriba las reglas semánticas para IF E THEN S, de manera de generar los cuartetos correspondientes

Compiladores e intérpretes Generación de código intermedio II:Generación de cuartetos Sentencia de repetición Escriba las reglas semánticas para REPEAT S UNTIL E, de manera de generar los cuartetos correspondientes