Traductor DDS en CUP Expresiones lógicas.

Slides:



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

Análisis Sintáctico Capítulo 4.
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.
Animación del segundo ejercicio de la práctica 12 opcional (herramienta ANTLR)
Filminas Segunda semana
Interprete o máquina real
Compiladores e intérpretes Análisis Sintáctico II
Compiladores e intérpretes Generación de código intermedio II
¿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
Entendiendo la definición de clases
ANALIZADOR SINTACTICO
Abstracciones y Modelos
Módulo 5: Estructuras de Decisión y Bucles
Genéricos en Java Jaime Ramírez, Ángel Lucas González
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.
Traducción dirigida por la Sintaxis
Analizadores semánticos: DDS y EDT
Oscar Bedoya. Edificio 331, 2º piso, E.I.S.C. Estructuras de datos y algoritmos.
VISUAL BASIC CONSOLA Todas las ordenes o instrucciones se digitan dentro de sub Main() y End Sub ÁREA DE TRABAJO: Las aplicaciones de consola son aquellas.
1 Cadenas de caracteres Es un objeto de la clase String Una cadena de caracteres es una matriz unidimensional de elementos de tipo Char New. Utilizado.
Método en Java.
ANIMACIÓN Traductor DDT con CUP. En esta animación se puede ver el árbol generado del traductor ascendente mediante transparencias realizadas en PowerPoint.
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 ) ;
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.
Analizador sintáctico Prácticas EDI - © Juan Ramón Pérez1.
Analizador Sintáctico Descendente
Java Orientado a Objetos CLASES,OBJETOS Y MÉTODOS
Creación de Aplicaciones
Igor Santos Grueiro. De este tipo de pilas NO vamos a hablar.
Tema 6: Clases Antonio J. Sierra.
If anidados y Switch Prof. Lillian Bras.
Clasificación del Software
Algoritmos para calcular el Conjunto Primero y el Conjunto Siguiente
Input – Scanner y Cajas de diálogo
Programación orientada a objetos
Procesadores del Lenguaje
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..
INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS Objetos.
Control de flujo: Bucles
Algoritmos y Desarrollo de Programas I
Manejo de Vectores y Matirces
ANALISIS SINTACTICO Parte I
Java. Java nació el año 1991, por un par de ingenieros de la Sun Microsystems.
ESTRUCTURA DE DATOS EN JAVA
INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS Encapsulamiento.
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.
(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.
(1+5*5)+(3*2); El análisis semántico en ANTLR se hace de forma descendente, por ello se va desarrollando el árbol completo desde el inicio para su explicación.
EDT con ANTLR a e; e1t )e ( f Entrada: (1+5)*5; 1 a t1 f OPMULT numerote1 ft1 numero e1t OPSUMA ft1 numero En esta diapositiva se muestra el árbol.
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.
1 Sebastián Argüello A60490 semana 3 Autómatas y compiladores CI-1322.
Presente un cuestionario con los aspectos mas importantes sobre los
Programación de Computadores
FUNDAMENTOS DE PROGRAMACIÓN
IV. GRAMÁTICAS DISTRIBUIDAS Y TABLAS DE SÍMBOLOS
Prof. Víctor Aquino Urrutia
LENGUAJE DE PROGRAMACIÓN
OPERADORES Y EXPRESIONES Ing Esp. Ricardo Cujar. Operadores y Expresiones  Operador: Es un símbolo que representa una operación.  Expresión: Es la combinación.
Estructuras de control selectivas Fundamentos de Programación Departamento de Lenguajes y Sistemas Informáticos Versión Práctica 3.
Tipos genéricos Fundamentos de Programación Departamento de Lenguajes y Sistemas Informáticos Unidad Didáctica 3.
PRÁCTICAS DE LABORATORIO ANÁLISIS SINTÁCTICO (2) LENGUAJES FORMALES Y AUTÓMATAS CURSO 2006/2007 UNIVERSIDAD DE SEVILLA E. T. S. INGENIERÍA INFORMÁTICA.
Transcripción de la presentación:

Traductor DDS en CUP Expresiones lógicas

Clase Simbolo La clase Simbolo de java permite almacenar el valor asociado a una determinada producción. Para este traductor es suficiente con definirla de la siguiente manera: public class Simbolo { boolean valor; public Simbolo(boolean valor) this.valor = valor; }

Gramática en CUP terminal String semicolon, apertura_parentesis, cierre_parentesis, opand, opor, opnand, opnor, opxor, opxnor, opnot, opigual, opdist, opmenor, opmayor, opmenori, opmayori, vtrue, vfalse, numero; non terminal Simbolo A, L, J, C; start with A; A ::= L:eval semicolon {: System.out.println("Valor final:" + eval.valor + "\n\n"); :} A | L:eval semicolon {: :} ; L ::= L:e1 opand J:e2 {: RESULT = new Simbolo(e1.valor && e2.valor); | L:e1 opor J:e2 {: RESULT = new Simbolo(e1.valor || e2.valor);

Gramática en CUP | L:e1 opnand J:e2 {: RESULT = new Simbolo(!(e1.valor && e2.valor)); :} | L:e1 opnor J:e2 {: RESULT = new Simbolo(!(e1.valor || e2.valor)); | L:e1 opxor J:e2 {: RESULT = new Simbolo(e1.valor ^ e2.valor); | L:e1 opxnor J:e2 {: RESULT = new Simbolo(!(e1.valor ^ e2.valor)); | J:eval {: RESULT = new Simbolo(eval.valor); ; J ::= apertura_parentesis L:eval cierre_parentesis {:

Gramática en CUP | vtrue {: RESULT = new Simbolo(true); :} | vfalse {: RESULT = new Simbolo(false); | opnot apertura_parentesis L:eval cierre_parentesis {: RESULT = new Simbolo(!eval.valor); | C:eval {: RESULT = new Simbolo(eval.valor); ; C ::= numero:n1 opigual numero:n2 {: RESULT = new Simbolo(Integer.parseInt(n1) == Integer.parseInt(n2)); | numero:n1 opdist numero:n2 {: RESULT = new Simbolo(Integer.parseInt(n1) != Integer.parseInt(n2));

Gramática en CUP | numero:n1 opmenor numero:n2 {: RESULT = new Simbolo(Integer.parseInt(n1) < Integer.parseInt(n2)); :} | numero:n1 opmayor numero:n2 {: RESULT = new Simbolo(Integer.parseInt(n1) > Integer.parseInt(n2)); | numero:n1 opmenori numero:n2 {: RESULT = new Simbolo(Integer.parseInt(n1) <= Integer.parseInt(n2)); | numero:n1 opmayori numero:n2 {: RESULT = new Simbolo(Integer.parseInt(n1) >= Integer.parseInt(n2)); ;

Proceso de traducción En la animación siguiente se muestra el proceso de traducción que sigue la expresión lógica: (false and (74 >= 34)); En cada fotograma se muestra el árbol sintáctico en un determinado estado del traductor. En rojo aparece la producción que se está analizando y en verde las acciones semánticas relacionadas.

Proceso de traducción a Primera producción  “a”, reconoce la(s) expresión(es) que terminan en “;”. Cadena involucrada en la producción  (false and (74 >= 34));

Proceso de traducción l a ; Siguiente producción  “l”, analiza y procesa la expresión completa Cadena involucrada en la producción  (false and (74 >= 34));

Proceso de traducción l j a ; Siguiente producción  “j”, analiza y procesa elementos terminales, expresiones dentro de paréntesis y comparaciones de números. Cadena involucrada en la producción  (false and (74 >= 34));

Proceso de traducción ( l j l a ; ) Siguiente producción  “l”, analiza y procesa la expresión completa Cadena involucrada en la producción  (false and (74 >= 34));

Proceso de traducción ( l l j l and a ; ) j Siguiente producción  “l”, analiza y procesa la expresión completa Cadena involucrada en la producción  (false and (74 >= 34));

Proceso de traducción ( l j l j l and a ; ) j Siguiente producción  “j”, analiza y procesa elementos terminales, expresiones dentro de paréntesis y comparaciones de números. Cadena involucrada en la producción  (false and (74 >= 34));

Proceso de traducción false ( l j false l j l and a ; ) j Elemento terminal  “false”, se devuelve un nuevo símbolo con el valor lógico del elemento terminal. Cadena involucrada en la producción  (false and (74 >= 34));

Proceso de traducción false ( l j false l j l and a ; ) j “j” devuelve el correspondiente símbolo con el valor de la expresión calculada. Cadena involucrada en la producción  (false and (74 >= 34));

Proceso de traducción ( l j false l j l and a ; ) j Siguiente producción  “j”, analiza y procesa elementos terminales, expresiones dentro de paréntesis y comparaciones de números. Cadena involucrada en la producción  (false and (74 >= 34));

Proceso de traducción ( l j false l j l and ( a ; ) j l ) Siguiente producción  “l”, analiza y procesa la expresión completa Cadena involucrada en la producción  (false and (74 >= 34));

Proceso de traducción ( l j false l j l and ( a ; ) j l j ) Siguiente producción  “j”, analiza y procesa elementos terminales, expresiones dentro de paréntesis y comparaciones de números. Cadena involucrada en la producción  (false and (74 >= 34));

Proceso de traducción ( l j false l j l and ( a ; ) j l j c ) Siguiente producción  “c”, analiza y procesa comparaciones de números. Cadena involucrada en la producción  (false and (74 >= 34));

Proceso de traducción ( l j false l j l and ( 74 a ; ) j l j c >= ) 34 true Elementos terminales  “74 >= 34”, se devuelve un nuevo símbolo con el valor lógico del resultado de la operación lógica. Cadena involucrada en la producción  (false and (74 >= 34));

Proceso de traducción ( l j false l j l and ( 74 a ; ) j l j c >= true ) 34 “c” devuelve el correspondiente símbolo con el valor de la expresión calculada. Cadena involucrada en la producción  (false and (74 >= 34));

Proceso de traducción ( l j false l j l and ( 74 a ; ) j l j c >= true ) 34 “j” devuelve el correspondiente símbolo con el valor de la expresión calculada. Cadena involucrada en la producción  (false and (74 >= 34));

Proceso de traducción ( l j false l j l and ( 74 a ; ) j l j c >= true ) 34 “l” devuelve el correspondiente símbolo con el valor de la expresión calculada. Cadena involucrada en la producción  (false and (74 >= 34));

Proceso de traducción ( l j false l j l and ( 74 a ; ) j l j c >= false (false and true) ) 34 “j” devuelve el correspondiente símbolo con el valor de la expresión calculada (false and true). Cadena involucrada en la producción  (false and (74 >= 34));

Proceso de traducción ( l j false l j l and ( 74 a false ; ) j l j c >= ) 34 “l” devuelve el correspondiente símbolo con el valor de la expresión calculada (false and true). Cadena involucrada en la producción  (false and (74 >= 34));

Proceso de traducción ( l j false l j l and ( 74 a false ; ) j l j c >= ) 34 “j” devuelve el correspondiente símbolo con el valor de la expresión calculada (false and true). Cadena involucrada en la producción  (false and (74 >= 34));

Proceso de traducción ( l j false false l j l and ( 74 a ; ) j l j c >= ) 34 “l” devuelve el correspondiente símbolo con el valor de la expresión calculada (false and true). Cadena involucrada en la producción  (false and (74 >= 34));

Proceso de traducción ( l j false Resultado= false l j l and ( 74 a ; ) j l j c >= ) 34 Finalmente “a” recibe el valor de la expresión lógica calculada en la producción “l” y se muestra por pantalla. Cadena involucrada en la producción  (false and (74 >= 34));