ANALISIS SINTACTICO Parte I

Slides:



Advertisements
Presentaciones similares
ANALIZADOR SINTACTICO
Advertisements

Análisis Sintáctico Ascendente
Análisis Sintáctico Capítulo 4.
Análisis Sintáctico Predictivo No Recursivo
INSTITUTO TECNOLÓGICO DE MINATITLÁN
Filminas Segunda semana
Clasificación de los compiladores
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
Compiladores e intérpretes Análisis Sintáctico III
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.
Procesadores de Lenguaje
Procesadores de Lenguaje
Clase 2 Tipos de datos Asignación de valores Estructura IF Ejercicios
Organización de Lenguajes y Compiladores 1
ANALIZADOR SINTACTICO
Analizadores Sintácticos Descendentes Predictivos
Unidad 3. Análisis Sintáctico
Teoría de lenguajes y compiladores
UNIVERSIDAD NACIONAL AUTÓNOMA DE MÉXICO FACULTAD DE INGENIERIA DIVISIÓN DE INGENIERÍA ELÉCTRICA COMPUTACIÓN PARA INGENIEROS NOTA IMPORTANTE: Para complementar.
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
Definición del lenguaje XML mediante una gramática
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
Tema 2 Lenguajes Formales.
Algoritmos para calcular el Conjunto Primero y el Conjunto Siguiente
CONDICIONES DE LA MATERIA
M.C. Meliza Contreras González
Procesadores del Lenguaje
Teoría de lenguajes y compiladores
M.C. Juan Carlos Olivares Rojas
INGENIERIA EN SISTEMAS COMPUTACIONALES
Clasificación de Gramáticas y Manejo de Errores
Universidad Nacional de Jujuy Facultad de Ingeniería
ESTRUCTURA DE DATOS ESD-243
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
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
Análisis Léxico Área Software de Base.
INFORMATICA VII (Programación e implementación de sistemas)
UNIVERSIDAD VALLE DEL MOMBOY FACULTAD DE INGENIERIA ESCUELA DE COMPUTACIÓN CATEDRA: EDUMATICA Br: JENNY CORONADO C.I
Programación de Sistemas FEI – 2008
Términos algoritmo diseñar algoritmo implementar algoritmo
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
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 Semana 13. Ricardo Vargas Del Valle A35469.
Conceptos y Lenguaje Imperativo
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.
Cobol C Pascal Fortran 2. OBJETOS DE DATOS SmallTalk Java C++
Transcripción de la presentación:

ANALISIS SINTACTICO Parte I Universidad Nacional de Jujuy Facultad de Ingeniería COMPILADORES ANALISIS SINTACTICO Parte I Elizabeth Reinoso edrreinoso@fi.unju.edu.ar

Objetivos del Tema Introducir el funcionamiento de un A. sintáctico Introducir términos utilizados Presentar la especificación en forma de gramáticas Identificar los tipos de analizadores sintácticos Eliz2abeth Reinoso: edrreinoso@fi.unju.edu.ar

Índice General Introducción Árboles de análisis sintáctico Especificación de un analizador sintáctico Tipos de analizadores sintácticos Elizabeth Reinoso: edrreinoso@fi.unju.edu.ar

Introducción Comprobar el orden en que llegan los tokens Función Construir una representación del programa fuente Si es sintacticamente incorrecto generar error Fuente Analizador Léxico Tabla de Símbolo Sintáctico TOKENS Siguiente Token() De las siguientes opciones cual no es una funcion del analisis sintactico: a) Si es lexicamente incorrecto generar error Comprobar el orden en que llegan los tokens b) Construir una representación del programa fuente c) Si es sintacticamente incorrecto generar error Elizabeth Reinoso: edrreinoso@fi.unju.edu.ar

Introducción Función principal El parser es la unidad que guía todo el proceso, o casi todo, de la compilación, ya que por un lado va solicitando al lexer los tokens y al mismo tiempo va dirigiendo el proceso de análisis semántico y generación de código intermedio. De acuerdo a la funcion principal del analisis sintactico cual de las siguientes opciones no es una de ella: El parser es la unidad que guia todo el proceso de la compilacion Por un lado va solictando al lexer los tokens y al mismo tiempo va dirigiendo el proceso de analisis lexico Por un lado va solictando al lexer los tokens y al mismo tiempo va dirigiendo el proceso de analisis semantico y generacion de codigo intermedio (verdadera) Por un lado va solictando al lexer los tokens y al mismo tiempo va dirigiendo el proceso de analisis semantico y generacion de codigo

Tablas de símbolos y de tipos Funcionamiento Obtienen un árbol teórico que permite expresar el orden de los lexemas, según van apareciendo. Ese árbol debe ser el modelo de donde sale el análisis semántico. Para generar un parser tenemos 2 tecnicas: A manos Mediante herramientas que lo generan automáticamente. Para que un AS funcione debemos especificar el lenguaje que debe leer El lenguaje debe ser formal (tener reglas bien definida) Estas reglas se llaman gramáticas. Programa fuente lexer Tablas de símbolos y de tipos token Parser Árbol de análisis sintáctico

E::=E+E|E*E|num|id|(E) Diseño de gramáticas Ejemplo E::=E+T|T T::=T*F|F F::=id|F|(E) Si queremos construir una cadena de tokens que sean generados por una gramática, podemos hacerlo aplicando las reglas de la gramática. Por ejemplo: dada la siguiente gramática: E::=E+E|E*E|num|id|(E) Intentaremos derivar el tokens: id1+id2*id3 Por la izq: E::=E*E=>E+E*E=>id1+E*E=>id1+id2*E=>id1+id2*id3

Diseño de Gramaticas Para construir el árbol sintáctico E E E * E E + id3 id1 id2

Dificultades La recursividad: se expresa por medio de una o mas reglas no recursivas que son la base y una o mas regla que son recursivas y que permite hacer crecer la estructura del lenguaje aplicándose así misma una y otra vez A::=aAb

Dificultades La ambigüedad: cuando una gramática contiene una cadena para la que hay mas de un árbol de análisis sintáctico se dice que es ambigua. Debido a que una gramática de estas característica permite que a partir del mismo código fuente se puedan obtener diferentes códigos intermedios, no es valida para construir un compilador. De las siguientes opciones cual no es una dificultad: Recursividad Ambigüedad dificultad Parentizacion

Dificultades La ambigüedad Si una gramática tiene alguna de estas característica podremos afirmar que es ambigua Gramatica con ciclo: S::=A|S::=a|A::=S Gramatica con alguna regla de la forma: E::=E…..E Gramatica que ofrezcan caminos alternativos S::=B|S::=C|B::=C Producciones recursivas en las que las variables no recursivas de la produccion puedan derivar a la cadena vacia S::=ABS|S::=s|A::=a|λ|B::=b|a|λ

Dificultades La asociatividad: es cuando se operan tres o mas operandos Por ejemplo:6/3/2, si el operador tiene asociatividad por la izquierda, primero se opera 6/3 y el resultado con /2 La precedencia: indica el orden en el que se aplicara respecto a los demas operadores en caso de poder aplicar mas de uno. Es decir si en una regla podemos aplicar mas de un operador, comenzaremos aplicando el de mas precedencia y terminaremos por aplicar el de menor precedencia

Dificultades La parentizacion: incluir paréntesis a la hora de evaluar expresiones en una gramática, se añade una variable que produzca expresiones entre paréntesis. Los operandos se ponen a la mayor distancia posible del símbolo inicial (porque tiene la mayor precedencia)

Análisis Sintáctico Lineal Hay varios algoritmos de análisis sintáctico (incluso para gramáticas ambiguas), pero su coste computacional es elevado. Si se consigue eliminar la ambigüedad, podemos utilizar 2 estrategias: Análisis descendentes: partimos de la raíz del árbol sintáctico y aplicamos las reglas por la izquierda (LL(k)) Análisis ascendentes: partimos de la cadena de entrada y construimos el árbol a partir de las hojas para llegar a la raíz (LR(k))

Tipos de Analizadores Descendentes LL(1) Analizadores Sintácticos Es predictivo, solo necesita un componente léxico Se aplica las producciones de izquierda Orden de lectura de la entrada de izquierda a derecha Analizadores Sintácticos SLR (1) Que significa LL(1), indicar cual de las siguientes opciones es la correcta: Que es un analizador sintactico ascendente de orden de lectura de la entrada de izquierda a derecha, se aplican las producciones de izquierda y es predictivo. Que es un analizador sintactico descendente de orden de lectura de la entrada de izquierda a derecha, se aplican las producciones de izquierda y es predictivo. Que es un analizador sintactico ascendente de orden de lectura de la entrada de izquierda a derecha, se aplican las producciones de derecha y es predictivo. Que es un analizador sintactico descendente de orden de lectura de la entrada de izquierda a derecha, se aplican las producciones de izquierda y no es predictivo. Ascendentes LR (1) LALR (1)

Diagrama de Sintaxis Son grafos dirigidos donde los elementos no terminales de la gramática aparecen como rectángulos y los terminales como círculos o elipses Todo diagrama de sintaxis se supone que tiene un origen y un destino aunque no se dibujan.

Diagrama de sintaxis Correspondencia entre la notación BNF y los diagramas de sintaxis. BNF Diagrama de sintaxis AB A|B A|λ A B A B A

Diagrama de Sintaxis BNF Diagrama de sintaxis (A)* (A)+ A A

Ejemplos Secuencia::=(sentencia “;”)+ Sentencia::=identificador “=“ Numero Sentencia ;

Ejercicios Diseñar una gramática no ambigua para el lenguaje de las expresiones que se pueden construir con true y false y los operadores booleanos or, and, not y paréntesis. La precedencia de mayor o menor es not and or los dos últimos son asociativos por la derecha

Ejercicios Crear los diagramas de sintaxis para esta gramática: Programa::=Declaraciones Sentencias Declaraciones::=(Decl “;”)+ Decl::=Entero Identificador Sentencia::=(Asignacion “;”)+ Asignacion::=ParteIzq “=“ ParteDer ParteIzq::=Identificador ParteDer::=Expresion Expresion::=(Expresion “+” Expresion)|(Expresion “-” Expresion) Expresion::= (Identificador | Numero)