ANIMACIÓN Traductor DDT con CUP. En esta animación se puede ver el árbol generado del traductor ascendente mediante transparencias realizadas en PowerPoint.

Slides:



Advertisements
Presentaciones similares
FUNDAMENTALS OF THE JAVA PROGRAMMING LANGUAGE (SL-110) CAPÍTULO 5: DECLARACIÓN, INICIALIZACIÓN Y USO DE VARIABLES Ing. Ronald Criollo.
Advertisements

ANALIZADOR SEMANTICO DIANA CAROLINA CASTAÑO YANCI VIVIANA CASTRO PEDRO LUIS FLÓREZ SANTIAGO GUTIÉRREZ A.
ANALIZADOR SINTACTICO
Infijo a postfijo Expr -> Expr + Término Expr -> Expr - Término
Análisis Sintáctico Capítulo 4.
Traductor DDS en CUP Expresiones lógicas.
Animación del Traductor DDS con CUP
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.
Compiladores e intérpretes Análisis Sintáctico II
Compiladores e intérpretes Generación de código intermedio II
Archivos de Texto. Introducción Los archivos son una secuencia de bits que se guarda en el disco duro. La ventaja de utilizar archivos es que los datos.
Arithmetic Operators & Operators Precedence
Procesadores de Lenguaje
PROF. ING. JULIO CESAR CANO RAMIREZ
Bucles o Estructura repetitivas
Nicole Chung. Ejercicio 1 Realizar una aplicación que genere los cinco números de la loto (esto es cinco números aleatorios entre 1 y 99 no repetidos)
Elementos de Pascal Escribir un programa en Pascal que lea los valores de los catetos de un triángulo rectángulo y calcule y muestre la hipotenusa. program.
Ejercicios de algoritmos y diagramas de flujo
TRABAJO PRÁCTICO 2 Florencia Glasbauer y Luciana Pierangeli 1ºB.
Modularidad Estructura de datos.
ANALIZADOR SINTACTICO
1 Parsing Un parser podría ser definido como un programa que analiza una porción de texto para determinar su estructura lógica: la fase de parsing en un.
Módulo 5: Estructuras de Decisión y Bucles
Procesadores de Lenguajes I
Tema 1. Introducción a la programación (Lenguaje java).
2.3 Cola de números enteros.
2.2 Pila de números enteros
1.2 Sintaxis del lenguaje Java.
Tema 5 Grafos. Recorridos..
2.4 Construcción de un TAD a partir de otro.
FORTRAN 77 y Cómputo Científico
Traducción dirigida por la Sintaxis
ANALISIS SINTACTICO DESCENDENTE
El lenguaje simbólico de la Lógica Proposicional
Los problemas semánticos de las expresiones del Lenguaje Proposicional
Algebra Booleana y Compuertas Lógicas
Analizadores semánticos: DDS y EDT
La estructura básica de los programas en java, algo a tener en cuenta y que debemos recordar siempre es el archivo debe llevar el nombre de la clase con.
Método en Java.
Laboratorio: Empezando a usar el debugger de Eclipse.
T RADUCTORES DDS CON CUP Práctica Optativa 12. CASO DE PRUEBA DDS CON CUP A continuación realizaremos una representación del árbol generado para la siguiente.
Traductores DDS con CUP Ejemplo. Cadena de entrada : false or ( 1 >= 0 ) ;
MÓDULO DE PROCEDIMIENTOS Los módulos también pueden contener subrutinas y funciones → MÓDULO DE PROCEDIMIENTOS  PROCEDIMIENTOS → son compilados como parte.
ALGORITMOS Y ESTRUCTURA DE DATOS
Analizador Sintáctico Descendente
Igor Santos Grueiro. De este tipo de pilas NO vamos a hablar.
Arboles Binarios de expresiones
Docente. Christian Alexander Martínez Arteaga
If anidados y Switch Prof. Lillian Bras.
Input – Scanner y Cajas de diálogo
Traductores EDT con ANTLR. Introducción Los siguientes pasos facilitarán el seguimiento de la animación:  Primero se mostrará la expresión aritmética.
JAVA J.A.C..
Estructuras de control Introducción a la programación.
Unidad III Elementos del lenguaje C++
Lógica Proposicional Inteligencia Artificial Luis Villaseñor Pineda
Control de flujo: Bucles
3.  Recursividad.
ESTRUCTURAS DO-WHILE Y FOR.
ANALISIS SINTACTICO Parte I
Sintaxis.
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
EVALUACIÓN DE SECUENCIAS DIDÁCTICAS ¿EN LA SECUENCIA DIDÁCTICA SE ESPECIFICA EL PROPÓSITO QUE SE PERSIGUE EN LA MISMA?
(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.
El Concepto de Tipo Los tipos permiten indicar la característica de los valores (datos) manipulados en un programa. Toda variable tiene asociado un tipo.
Traductores DDS con CUP. Introducción Los siguientes pasos facilitarán el seguimiento de la animación:  Primero se mostrará la expresión lógica que se.
Términos algoritmo diseñar algoritmo implementar algoritmo
Teoría de lenguajes y compiladores
Se considera la expresión (a-b)*(c+(d/e)) su árbol es:
Maestría en Ciencias de la Computación Arquitectura de Computadoras
Transcripción de la presentación:

ANIMACIÓN Traductor DDT con CUP

En esta animación se puede ver el árbol generado del traductor ascendente mediante transparencias realizadas en PowerPoint. Previamente realizado a mano. En cada paso (derivación/reducción), se ha especificado la producción aplicada en el caso de la construcción del árbol. Posteriormente se ha construido la evolución que sigue el traductor CUP para evaluar el resultado de la expresión. El caso de prueba a analizar es: (false and (74 >= 34)) xor 45 < 78 ; Este es el que aparece en el enunciado de la práctica, y el resultado es el siguiente:

A Partiendo desde el axioma construiremos el árbol correspondiente:

A := L

L := L xor J

J := C

C := numero opmenor numero

L := J

J := apertura_parentesis L cierre_parentesis

L := L and J

J := apertura_parentesis L cierre_parentesis

L := J

J := C

C := numero opmayori numero

L := J

J := vfalse

J:=vfalse {: Simbolo s=new Simbolo(); s.valor=false; RESULT = s; :} Ahora que hemos construido el árbol sintáctico, se procede a evaluarlo de manera ascendente:

L::=J:eval {: Simbolo s=new Simbolo(); s.valor=eval.valor; RESULT = s; :}

C::=numero:n1 opmayori numero:n2 {:int v1=Integer.parseInt(n1); int v2=Integer.parseInt(n2); Simbolo s=new Simbolo(); s.valor=(v1 >= v2); RESULT = s; :}

J::=C:eval {: Simbolo s=new Simbolo(); s.valor=eval.valor; RESULT = s; :}

L::=J:eval {: Simbolo s=new Simbolo(); s.valor=eval.valor; RESULT = s; :}

J::=apertura_parentesis L:eval cierre_parentesis {: Simbolo s=new Simbolo(); s.valor=(eval.valor); RESULT = s; :}

L::=L:ev1 opand J:ev2 {: Simbolo s=new Simbolo(); s.valor=(ev1.valor && ev2.valor); RESULT = s; :}

J::=apertura_parentesis L:eval cierre_parentesis {: Simbolo s=new Simbolo(); s.valor=(eval.valor); RESULT = s; :}

L::=J:eval {: Simbolo s=new Simbolo(); s.valor=eval.valor; RESULT = s; :}

C::=numero:n1 opmenor numero:n2 {: int v1=Integer.parseInt(n1); int v2=Integer.parseInt(n2); Simbolo s=new Simbolo(); s.valor=(v1 < v2); RESULT = s; :}

J::= C:eval {: Simbolo s=new Simbolo(); s.valor=eval.valor; RESULT = s; :}

L::= L:ev1 opxor J:ev2 {: Simbolo s=new Simbolo(); s.valor=(ev1.valor ^ ev2.valor); RESULT = s; :}

A::=L:eval semicolon {: System.out.println("\n\nExpresion logica correcta. Valor final: "+ eval.valor +"\n\n"); :}; El resultado que imprime por pantalla es: APERTURA_PAR [(]FALSE [false] OPAND [and] APERTURA_PAR [(]NUMERO [74] OPMAYORI [>=] NUMERO [34]CIERRE_PAR [)]CIERRE_PAR [)] OPXOR [xor] NUMERO [45] OPMENOR [<] NUMERO [78] SEMICOLON [;] NUMERO [345] Expresion logica correcta. Valor final: true