analisis sintactico parte i universidad nacional de jujuy facultad de ingeniería compiladores...

21
ANALISIS SINTACTICO ANALISIS SINTACTICO Parte I Parte I Universidad Nacional de Jujuy Facultad de Ingeniería COMPILADORES COMPILADORES Elizabeth Reinoso [email protected]

Upload: nita-castrejon

Post on 23-Jan-2016

226 views

Category:

Documents


2 download

TRANSCRIPT

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

ANALISIS SINTACTICOANALISIS SINTACTICOParte IParte I

Universidad Nacional de JujuyFacultad de Ingeniería

COMPILADORESCOMPILADORES

Elizabeth Reinoso [email protected]

Page 2: ANALISIS SINTACTICO Parte I Universidad Nacional de Jujuy Facultad de Ingeniería COMPILADORES 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: [email protected]

Usuario
Page 3: ANALISIS SINTACTICO Parte I Universidad Nacional de Jujuy Facultad de Ingeniería COMPILADORES Elizabeth 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: [email protected]

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

Introducción Función

Comprobar el orden en que llegan los tokens

Construir una representación del programa fuente

Si es sintacticamente incorrecto generar error

Elizabeth Reinoso: [email protected]

Fuente Analizador Léxico

Tabla de Símbolo

AnalizadorSintácticoTOKENS

Siguiente Token()

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

Introducción

Función principalEl 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.

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

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

Parser

Árbol de análisis

sintáctico

Tablas de símbolos y de tipos

token

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

Diseño de gramáticas

EjemploE::=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*id3Por la izq: E::=E*E=>E+E*E=>id1+E*E=>id1+id2*E=>id1+id2*id3

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

Diseño de Gramaticas

Para construir el árbol sintáctico

E

EE

EE

*

id3+

id2id1

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

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

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

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.

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

Dificultades

La ambigüedadSi 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|λ

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

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

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

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)

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

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

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

Tipos de Analizadores

AnalizadoresSintácticos

Descendentes

Ascendentes

LL(1)

SLR (1)

LR (1)

LALR (1)

Es predictivo, solo necesita un componente léxico

Se aplica las producciones de izquierda

Orden de lectura de la entrada de izquierda a derecha

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

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.

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

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

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

Diagrama de Sintaxis

BNF Diagrama de sintaxis

(A)*

(A)+

A

A

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

Ejemplos

Secuencia::=(sentencia “;”)+

Sentencia::=identificador “=“ Numero

Sentencia ;

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

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

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

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)