ANALIZADOR SINTACTICO

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.
Análisis Sintáctico Ascendente
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
Filminas Segunda semana
Compiladores e intérpretes Análisis Sintáctico II
Compiladores e intérpretes Generación de código intermedio II
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
¿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.
Teoría de Autómatas y Compiladores
Procesadores de Lenguaje
REFERENCIA AL OBJETO DE LA CLASE BASE
Organización de Lenguajes y Compiladores 1
ANALIZADOR SINTACTICO
Analizadores Sintácticos Descendentes Predictivos
Unidad 3. Análisis Sintáctico
Traducción dirigida por la Sintaxis
ANALISIS SINTACTICO DESCENDENTE
Teoría de lenguajes y compiladores
CAPITULO 2 La Representación del Conocimiento
Definición del lenguaje XML mediante una gramática
Analizadores semánticos: DDS y EDT
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.
Teoría de lenguajes y compiladores
Analizador Sintáctico Descendente
Algoritmos para calcular el Conjunto Primero y el Conjunto Siguiente
TRADUCTOR DE UN PROGRAMA
M.C. Meliza Contreras González
Análisis sintáctico LR: SLR (LR simple)
Procesadores del Lenguaje
M.C. Juan Carlos Olivares Rojas
Gestión del Tiempo del Proyecto
ANALISIS SINTACTICO Parte I
Procesamiento Práctico del lenguaje Natural Capítulo XXIII.
Clasificación de Gramáticas y Manejo de Errores
Universidad Nacional de Jujuy Facultad de Ingeniería
INSTITUTO DE ESTUDIOS SUPERIORES DE CHIHUAHUA COMPUTACION Ciclo: segundo cuatrimestre Lic. Roberto Servando Roque Corona.
Teoría de lenguajes y compiladores
PROGRAMACION DE SISTEMAS
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
Compiladores e intérpretes Análisis Sintáctico III
Compiladores e intérpretes
Análisis Léxico Área Software de Base.
COMPILADORES DIANA ROCIO OLAYA MESA.
INFORMATICA VII (Programación e implementación de sistemas)
Programación de Sistemas FEI – 2008
Programación III Clase #03 Operadores. Expresiones Es cualquier cosa que retorne un valor. En C++ CASI todo son expresiones. Ejemplo: –5 –3 + 2 Las expresiones.
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
Autómatas y Compiladores Novena Semana. Ricardo Vargas Del Valle A35469.
Teoría de lenguajes y compiladores
El proceso de compilación
IV. GRAMÁTICAS DISTRIBUIDAS Y TABLAS DE SÍMBOLOS
Semana #8 Kathryn Jones Pérez A Analizadores sintácticos LR Existen tres técnicas para construir tablas de análisis sintáctico LR para una gramática.
Programación de Sistemas
Autómatas y Compiladores. Segunda Semana. Ricardo Vargas Del Valle A35469.
Autómatas y Compiladores Semana 13. Ricardo Vargas Del Valle A35469.
REPÚBLICA BOLIVARIANA DE VENEZUELA MINISTERIO DEL PODER POPULAR PARA LA EDUCACION SUPERIOR UNIVERSIDAD VALLE DEL MOMBOY CARVAJAL EDO. TRUJILLO ENERO 2014.
Transcripción de la presentación:

ANALIZADOR SINTACTICO Diana Carolina Castaño Yanci Viviana Castro Pedro Luis Flórez Santiago Gutiérrez A.

ANALIZADOR SINTACTICO Es una de las partes de un compilador que transforma su entrada en un árbol de derivación. El análisis sintáctico convierte el texto de entrada en otras estructuras (comúnmente árboles), que son más útiles para el posterior análisis y capturan la jerarquía implícita de la entrada.

OBJETIVO Construir un analizador sintáctico en la herramienta PLY, que imprima un AST de la manera especificada en el documento.

METODOLOGÍA La construcción del analizador sintáctico empezó con la construcción de los archivo. Se declaro un constructor, que recibe la lista de tokens y crea un Lexer y lo inicializa. Una lista de precedencia, excepto que contenía el token ELSE para evitar una ambigüedad. Para todas las producciones especificadas en el lenguaje se declararon funciones, se hizo una depuración para evitar los shift/reduce y reduce/reduce hasta que ya la gramática no fue ambigua.

Se crearon las clases del AST, se agregaron las declaraciones necesarias en cada función que representaba una producción para construir el AST, y se genero un método imprimir en cada clase para imprimir el archivo final del AST. Finalmente se modifico el programa principal para que aceptara la opción –dump-ast y construyera el árbol.

ALGUNAS FUNCIONES CREADAS PARA EVITAR AMBIGUIEDADES Tabla de precedencia, el ELSE fue una adición para evitar ambiguedad. precedence = ( ('right', '='), ('left', 'OR'), ('left', 'AND'), ('left', 'IGUAL', 'DIFERENTE'), ('left', '<', 'MENOROIGUAL', '>', 'MAYOROIGUAL'), ('left', '''+''', '''-'''), ('left', '''*''', '''/''', '''%'''), ('right', '''!''', 'NEW'), ('left', '''[''', ''']''', '''(''', ''')''', '''.'''), ('right', 'ELSE') )

* Se creo un token especial BRACKETS para evitar ambigüedad def p_Type4(self, p): '''TYPE : ID BRACKETS''' p[1] = Type(p[1], False, True) p[0] = p[1] def p_Type5(self, p): '''TYPE : STRING BRACKETS''' p[1] = Type(p[1], True, True) * Producción creada para evitar un reduce potencialmente peligroso def p_Expr11(self, p): '''EXPR : ID '.' LENGTH''' p[0] = Length(Location(0, p[1]))

* El no-terminal BinOp fue reemplazado directamente para facilitar la precedencia def p_Expr12(self, p): '''EXPR : EXPR '+' EXPR''' p[0] = BinaryOp(p[2], p[1], p[3]) def p_Expr13(self, p): '''EXPR : EXPR '-' EXPR''' * Manejo de errores def p_error(self, p): raise SyntacticalError('Linea %d, "%s" : Error sintactico, token no valido' % (p.lineno, p.value))

DIFICULTADES La ambigüedad en la gramática fue la mayor dificultad, tuvimos que reescribir varias reglas varias veces hasta que se eliminaron todas las ambigüedades. La construcción del método imprimir en cada clase también fue difícil debido a la gran cantidad de clase y a que se debían especificar cosas distintas en cada una.

EJEMPLO