La descarga está en progreso. Por favor, espere

La descarga está en progreso. Por favor, espere

ANALISIS SINTACTICO Parte I

Presentaciones similares


Presentación del tema: "ANALISIS SINTACTICO Parte I"— Transcripción de la presentación:

1 ANALISIS SINTACTICO Parte I
Universidad Nacional de Jujuy Facultad de Ingeniería COMPILADORES ANALISIS SINTACTICO Parte I Elizabeth Reinoso

2 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:

3 Índice General Introducción Árboles de análisis sintáctico
Especificación de un analizador sintáctico Tipos de analizadores sintácticos Elizabeth Reinoso:

4 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:

5 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

6 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

7 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

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

9 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

10 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

11 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|λ

12 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

13 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)

14 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))

15 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)

16 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.

17 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

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

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

20 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

21 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)


Descargar ppt "ANALISIS SINTACTICO Parte I"

Presentaciones similares


Anuncios Google