Compiladores e intérpretes

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.
ANALIZADOR SINTACTICO
Análisis Sintáctico Capítulo 4.
Análisis Sintáctico Descendente
INSTITUTO TECNOLÓGICO DE MINATITLÁN
Filminas Segunda semana
Filminas Octava Semana CI-1322 Autómatas y Compiladores Elaborado por: Sergio Pastrana Espinoza A33888.
Compiladores e intérpretes Análisis Sintáctico II
Compiladores e intérpretes Generación de código intermedio II
Compiladores e intérpretes Análisis Sintáctico III
Compiladores e intérpretes Análisis Sintáctico VI
Cb00843 Traductores Rogelio Dávila Pérez Profesor Planta
Analizador Sintáctico
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.
CARRERA: INGENIERIA CIVIL UNI-RUACS
ALGORITMOS.
Organización de Lenguajes y Compiladores 1
ANALIZADOR SINTACTICO
Analizadores Sintácticos Descendentes Predictivos
Unidad 1. Introducción al proceso de compilación.
Unidad 3. Análisis Sintáctico
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.
Programación 1 Introducción
Teoría de Autómatas y Lenguajes Formales Alma María Pisabarro, 2007
Traducción dirigida por la Sintaxis
ANALISIS SINTACTICO DESCENDENTE
Teoría de lenguajes y compiladores
Tema 4. Gramáticas y Análisis Sintáctico PARSER
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
Analizador Sintáctico Descendente
PROGRAMACIÓN LÓGICA.
Tema 2 Lenguajes Formales.
M.C. Meliza Contreras González
Análisis sintáctico LR: SLR (LR simple)
Instituto Tecnologico de Durango Programacion de Sistemas II
Procesadores del Lenguaje
M.C. Juan Carlos Olivares Rojas
Teoría de lenguajes y compiladores
M.C. Juan Carlos Olivares Rojas
ANALISIS SINTACTICO Parte I
Clasificación de Gramáticas y Manejo de Errores
Teoría de lenguajes y compiladores
Teoría de lenguajes y compiladores
Procesadores de Lenguajes
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
Teoría de lenguajes y compiladores Analizadores lexicográficos
Compiladores e intérpretes Análisis Sintáctico III
Programación de Sistemas
Compiladores e intérpretes
Tema 1. Introducción y Conceptos Básicos
Análisis Léxico Área Software de Base.
Programación de Sistemas FEI – 2008
Unidad 1. Introducción a los Compiladores.
UNIVERSIDAD LATINA (UNILA)
1 Sebastián Argüello A60490 semana 3 Autómatas y compiladores CI-1322.
Teoría de lenguajes y compiladores
Teoría de lenguajes y compiladores
El proceso de compilación
Unidad 3 Analizador Sintáctico
IV. GRAMÁTICAS DISTRIBUIDAS Y TABLAS DE SÍMBOLOS
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.
República Bolivariana de Venezuela Ministerio del Poder Popular para la Educación Superior Universidad Valle del Momboy Carvajal, Trujillo Alumnas Luzmila.
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 Análisis Sintáctico I Profesor: Eridan Otto

Análisis Sintáctico I Introducción Tipos de análisis sintáctico

Análisis sintáctico I: Introducción Compiladores e intérpretes Análisis sintáctico I: Introducción Cada lenguaje de programación tiene reglas que determinan la estructura sintáctica que indica la correcta formación de los mismos. La sintaxis de un lenguaje de programación puede ser descrita por gramáticas libres de contexto o notación BNF (Bakus-Naur Form) Ventajas de usar gramáticas: Son especificaciones sintácticas precisas de los lenguajes Fáciles de comprender Para algunas clases de gramáticas se puede construir un parser automáticamente El proceso de construcción de un abalizador sintáctico puede llevar a descubrir ambigüedades Una gramática bien diseñada, imparte estructura al lenguaje de programación, siendo más fácil generar código y detectar errores. Los lenguajes evolucionan en el tiempo, una gramática bien definida permite ampliar o modificar más fácilmente el lenguaje y la implementación de su compliador

Análisis sintáctico I: Introducción Compiladores e intérpretes Análisis sintáctico I: Introducción Funciones: Comprobar que los componentes léxicos entregados por el analizador léxico, cumple con las reglas de la gramática. Reporte de errores de sintaxis y recuperación de los mismos, de manera que reporte la mayor cantidas posible de errores Generar el árbol sintáctico par la próxima fase de compilación. Manejo de Errores Programa Fuente Analizador léxico Componente léxico Analizador sintáctico Arbol sintáctico Obtener otro Componente léxico Tabla de Símbolos

Análisis sintáctico I: Tipos Compiladores e intérpretes Análisis sintáctico I: Tipos Tres tipos generales de analizadores sintácticos. Métodos universales : Cocke-Younger-Kasami y Early Sirven para cualquier gramática Son ineficientes para su uso en lenguajes reales Descendentes (TOP-DOWN) Construyen el árbol de análisis sintáctico de arriba (No terminal inicial) hacia abajo (terminales), todos los analizadores de este tipo reconocen un subconjunto de gramáticas: Analizadores descendentes recursivos Analizadores LL(1) con tabla (PDA determinista) Ascendentes (BOTTOM-UP) Construyen el árbol de análisis sintáctico de abajo hacia arriba, tampoco son capaces de reconocer todas las GLC Analizadores de precedencia de operador Analizadores LR(1)

Análisis sintáctico I: Tipos Compiladores e intérpretes Análisis sintáctico I: Tipos Tanto para el análisis descendente como para el ascendente: La entrada se examina de izquierda a derecha, un símbolo cada vez Se trabaja con subclases de gramática En general las gramáticas serán LL y LR LL(K) es subconjunto de LR(k) En la práctica sólo seutilizan LL(1) y LR(1) Muchos compiladores se denomina “parse diriven”, debido a que la fáse sintáctica es muy relevante y va dirigiendo al analizador léxico. Al igual que con los analizadores léxicos existen herramientas para generar automáticamente analizadores sintácticos como YACC y Bison.

Análisis sintáctico I: Tipos Compiladores e intérpretes Análisis sintáctico I: Tipos Descendente (visión general): Algoritmo Símbolo inicial de la gramática, debe ubicarse como raiz del árbol de derivación. Hata que sólo hayan símbolos terminales, derivar por la izquierda. Ejemplo: Gramática de expresiones: EXPRESION::= EXPRESION * TERMINO| EXPRESION + TERMINO| TERMINO TERMINO ::= Id | Numero Entrada : Id * Id + Id Derivación: EXPRESION  EXPRESION + TERMINO  EXPRESION * TERMINO + TERMINO  TERMINO * TERMINO + TERMINO  Id * TERMINO + TERMINO  Id * Id + TERMINO  Id * Id + Id

Análisis sintáctico I: Tipos Compiladores e intérpretes Análisis sintáctico I: Tipos Ascendente (visión general): Definición:Pivote Secuencia más larga de símbolos (Terminales y No Terminales) en la parte más izquierda de la entrada que se puede encontrar en la parte derecha de una producción y tal que los símbolos a su derecha son terminales. Ejemplo para la gramatica de expersiones anterior: Si la entrada es: EXPRESION * TERMINO + Id El pivote es: EXPRESION * TERMINO Algoritmo: Empezar con la cadena de entrada Intentar llegar hasta el símbolo inicial, encontrando en cada paso un pivote y reduciéndolo con el no terminal de la producción correspondiente. Ejemplo: Id * Id + Id TERMINO * Id + Id  EXPRESION * Id + Id  EXPRESION * TERMINO + Id  EXPRESION + Id  EXPRESION + TERMINO  EXPRESION

Análisis sintáctico I: Problemas del AS Compiladores e intérpretes Análisis sintáctico I: Problemas del AS Descendentes Más de una opción : A::= con el mismo terminal o secuencia de terminales como primeros símbolo de cada producción Esto implica que el analizador debe poder retroceder (Backtracking) Analizar varios elementos de la entrada hacia delante. Recursividad izquierda Eliminación de la recursividad Ambigüedad Factorización por la izquierda Ascendentes: Más de una opción: A::= y es el pivote Otros: Problemas semánticos

Análisis sintáctico I: Problemas del AS Compiladores e intérpretes Análisis sintáctico I: Problemas del AS Recursividad Izquierda en un paso, caso una producción simple: Se produce cuando una producción tiene la forma: A::= A | Se resuelve transformando la producción o regla de derivación original en dos reglas: A::= A’::= Ejemplo: Considere la gramática de expresiones siguiente y elimine su recursividad izquierda: E ::= E+T|T T ::= T *F|F F ::= (E) | Id, aplicando la regla anterior la gramática queda: E::= TE’ E’::= +TE’| T ::= FT’ T’::= *FT’| F ::= (E) | Id

Análisis sintáctico I: Problemas del AS Compiladores e intérpretes Análisis sintáctico I: Problemas del AS Recursividad Izquierda en un paso, caso múltiples producciones Se produce cuando una producción tiene la forma: A::= Se resuelve transformando la producción o regla de derivación original en dos reglas: A’::= Ejemplo: Considere la gramática de expresiones siguiente y elimine su recursividad izquierda: EXPRESION::= EXPRESION * TERMINO | EXPRESION + TERMINO| TERMINO aplicando la regla anterior, las producciones quedan: EXPRESION::= TERMINO A A ::= * TERMINO A| + TERMINOA|

Análisis sintáctico I: Problemas del AS Compiladores e intérpretes Análisis sintáctico I: Problemas del AS Una gramática es recursiva por la izquierda si tiene un no terminal tal que exista una derivación A para alguna cadena Ejemplo: S ::=Aa | b A ::=Ac |Sd| El no terminal S es recursivo en más de un paso: S -> Aa -> Sda El siguiente algoritmo elimina sistemáticamente la recursividad izquierda de una gramática: Disponer de los símbolos no términales en algún orden For i:=1 to n For j:=1 to i-1 - Reemplazar cada producción por donde son todas las producciones de - Eliminar recursividad izquierda de las Este algoritmo está asegurado cuando en la gramática no existen ciclos (derivaciones que llevan exactamente al mismo no terminal) ni producciones

Análisis sintáctico I: Problemas del AS Compiladores e intérpretes Análisis sintáctico I: Problemas del AS Para el ejemplo, la producción epsilon no afecta el resultado. Se ordena S, A. Para i=1 no sucede nada y tampoco hay recursividad izquierda en las producciones de S. Para i = 2, se sustituyen las producciones de S (j=1) en A::=Sd obteniendo A ::=Ac | Aad |bd| Eliminando la recursividad inmediata: S ::= Aa | b A::= bdA’|A’ A’:= cA’|adA’|

Análisis sintáctico I: Problemas del AS Compiladores e intérpretes Análisis sintáctico I: Problemas del AS Factorización por la izquierda La idea básica, es que cuando no está claro cuál, entre dos producciones alternativas usar para expandir un no terminal A , se deben re escribir las producciones de A para diferir la decisión hasta que el analizador haya procesado suficiente entrada como para hacer la elección correcta. Ejemplo: sent::= IF expr THEN sent ELSE sent | IF expr THEN sent | REPEAT sent UNTIL expr | REPEAT sent FOREVER Algoritmo , deja gramática factorizada por la izquierda: Para cada noterminal A, encuentre el prefijo común a dos o más alternativas de la forma donde representa todas las alternativas que no comienzan con , por: Aquí A’ es un nuevo no terminal. Aplicar repetidamente esta transformación hasta que no existan dos alternativas para un no terminal con el mismo prefijo.

Análisis sintáctico I: Problemas del AS Compiladores e intérpretes Análisis sintáctico I: Problemas del AS Para el ejemplo, se deben corregir los IF THEN y REPEAT. Aplicando el algoritmo las producciones quedan: sent::= IF expr THEN sentA1 | REPEAT sentA2 A1::=ELSE sent | A2::=UNTIL expr| FOREVER