Análisis sintáctico (Look ahead LR)

Slides:



Advertisements
Presentaciones similares
Análisis Sintáctico Ascendente
Advertisements

Análisis Sintáctico Predictivo No Recursivo
Análisis Sintáctico Descendente
INSTITUTO TECNOLÓGICO DE MINATITLÁN
Compiladores e intérpretes Análisis Sintáctico II
Compiladores e intérpretes
Compiladores e intérpretes Análisis Sintáctico III
Gramáticas, lenguajes y reconocedores
Analizador Sintáctico
Gramáticas Libres de Contexto
Autómatas de pila (Pushdown automata)
Autómatas Finitos.
Diseño de AFN’s.
Máquinas de Turing (MT)
Procesadores de Lenguaje
Caratula.
Área 5 Metodología de implantación de un nuevo modelo horario laboral Área 5: Plan de trabajo y seguimiento de la implantation 5.1. Programa de trabajo.
GRACET. Elementos Etapas Etapas Definen situaciones. Definen situaciones. Se representan con cuadrados. Se representan con cuadrados. Acciones Acciones.
S1.
Intersección Plano-Plano
Representacion de diagramas y tablas.
Organización de Lenguajes y Compiladores 1
ANALIZADOR SINTACTICO
Analizadores Sintácticos Descendentes Predictivos
Unidad 3. Análisis Sintáctico
2º curso Ingeniería Técnica en Informática de Sistemas UNED
Expresiones regulares
Tema 2 Autómatas finitos 1. Autómata finito determinista
4. Máquinas de Turing 4.1. Modelo básico.
UNIDAD VI: CIRCUITOS LÓGICOS SECUENCIALES
UNIDAD VI: CIRCUITOS LÓGICOS SECUENCIALES
SEGURIDAD EN EL LABORATORIO
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.
Circuitos Integrados de Aplicación Específica
Teoría de Autómatas y Lenguajes Formales Alma María Pisabarro, 2007
ANALISIS SINTACTICO DESCENDENTE
EJERCICIOS DE EXPRESIONES REGULARES Y AUTOMATAS
Tema 4. Gramáticas y Análisis Sintáctico PARSER
Lógica Temporal. Tablas semánticas.
Expresiones Regulares
Teoría de lenguajes y compiladores
Analizador Sintáctico Descendente
Manuel Mazo y Marta Marrón. Departamento de Electrónica 1 Ajuste de Controladores Borrosos.
Derivación de Contraejemplos para Model Checking Cuantitativo
Tema 2 Lenguajes Formales.
Algoritmos para calcular el Conjunto Primero y el Conjunto Siguiente
Análisis sintáctico LR: SLR (LR simple)
Instituto Tecnologico de Durango Programacion de Sistemas II
Lenguajes Libres de Contexto
Lenguajes Independientes del Contexto
Autómatas de Pila Teoría del Autómata.
ANALISIS SINTACTICO Parte I
Clasificación de Gramáticas y Manejo de Errores
ANALISIS SINTACTICO ASCENDENTE
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
Lenguajes regulares Teoría del Autómata.
Teoría de lenguajes y compiladores Analizadores lexicográficos
Compiladores e intérpretes Análisis Sintáctico III
Teoría de Autómatas I 2º curso Ingeniería Técnica en Informática de Sistemas UNED.
Compiladores e intérpretes
Analizadores LR(1) y LALR()
1 AFDAFN AF Gramáticas lineales derecha Expresiones regulares Tema 2 Método de los AF Método de las derivadas Sistemas de Ecuaciones Tema 1.
Teoría de lenguajes y compiladores
Teoría de lenguajes y compiladores
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.
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.
Transcripción de la presentación:

Análisis sintáctico (Look ahead LR) Método LALR Análisis sintáctico (Look ahead LR)

Análisis Sintáctico LR Este tipo de análisis se puede realizar mediante 3 técnicas: LR(k): Leen la entrada de izquierda a derecha (Left to rigth). SLR(1): Mejora el LR(1) pero hace uso de la búsqueda hacia delante. LALR(1): Más potente que SLR(1) y más sencillo que LR(1).

Análisis Sintáctico LALR Conceptos Significa «lookahead LR« Esta técnica generalmente se usa en la practica. Este es un análisis sintáctico de búsqueda hacia adelante. Esta técnica es mas larga de realizar, pero también es la mas efectiva. Es una técnica intermedia entre SLR(1) y LR(k). Aquí básicamente lo que se hace la unión de los conjuntos de elementos que tengan elementos comunes en sus goto(Ui, α), y que únicamente varíe la parte del lookahead de cada conjunto.

Análisis Sintáctico LALR Algoritmo ENCONTRANDO FIRS Y FOLLOW Simbolo First/Primero Si x es terminal F(x) ={x} Si x ->e Anadir e al F(x) X -> YZW Anadir F(U) al F(x) Simbolo Follow/Look a head Si x es simbolo inicial F(x) {$} Si x -> αYM F(Y) =F(M) Si el F(M) contiene e entonces añadir el first(X) al F(Y) Si x -> αY Anadir el F(x) al F(Y)

Análisis Sintáctico LALR Algoritmo Por ejemplo si tenemos dos conjuntos Ui y Uj Podemos hacer la unión de sus lookahead , creando así un conjunto Uij, así: Ui = X->Y ·Z {a} Uj = X->Y ·Z {b} Ui = X->Y ·Z {a} Uij = X->Y ·Z {a,b} Uj = X->Y ·Z {b}

Análisis Sintáctico LALR Algoritmo Entrada: Gramática aumentada G’ Método: Construir la colección de conjuntos de elementos LR(1). Para cada conjunto en LR(1), encontrar todos los conjuntos con los mismos elementos y sustituir todos por su unión de lookahead. Construir las acciones de análisis sintáctico para cada nuevo estado (acción e ir_a iguales que el algoritmo de LR Canónico).

Análisis Sintáctico LALR Ejemplo Construiremos las transiciones de la siguiente gramática: (1)S → A (2)S → xb (3)A → aAb (4)A → B (5)B → x • Necesitaremos aumentarla, asi: (0)S’ → S$

Análisis Sintáctico LALR Ejemplo Haciendo las transiciones (siguiendo la plantilla del método LR) , hacemos los goto de nuestros conjuntos: Para empezar nuestro So: Lookahead S’ -> •S {$} S -> •A {$} S -> • xb {$} A -> • aAb {$} A -> •B {$} B -> •x {$}

Creando Goto S1: Goto (So, S): S4: Goto (So, x) S’ -> S • • {$} Ahora hacemos los goto(Si, α), donde Si es el conjunto que vamos a crear y α es el terminal o no terminal a donde vamos a movernos; copiando sus lookahead de la producción padre. S1: Goto (So, S): S4: Goto (So, x) (0)S’ →• S (1)S → •A (2)S → •xb (3)A → •aAb (4)A →• B (5)B → •x S’ -> S • • {$} S -> x b {$} A -> x {$} • • • • S2: Goto (So, A) S’ -> A • • {$} S5: Goto(So, a) S5:Goto(S0, a) A -> a Ab {$} A -> •aAb {$} A -> •B {$} B -> •x {$} S3: Goto (So, B) • • A’ -> B • • {$}

Análisis Sintáctico LALR Ejemplo S1:Goto(S0,S) S4:Goto (S0, x) S’ -> S • {$} S -> x •b {$} A -> x • {$} S2:Goto(S0, A) S5:Goto(S0, a) S -> A • {$} A -> a •Ab {$} A -> •aAb {$} S3:Goto (S0, B) A -> •B {$} A -> B • {$} A -> •x {$} Tendremos en cuenta que cuando movemos el • con un No terminal y este es el ultimo elemento este pasa a ser un kernel.

Análisis Sintáctico LALR Ejemplo S13:Goto (S4,b) S -> xb • {$} S6:Goto (S5,A): S8:Goto (S5,B)(Goto S7,B) A -> a •Ab {$} A -> B • {$} A -> •aAb {b} A-> •B {b} S9:Goto (S5,x) Goto(S7,x): B -> •x {b} B -> x • {$} S7:Goto (S5,a) Goto(S7,a): A -> a •Ab {b} A -> •B {b} B -> •x {b}

Análisis Sintáctico LALR Ejemplo S10:Goto (S6,b) S -> xb • {$} S11:Goto (S7,A) S -> aA•b {b} S12:Goto (S11,b) S -> aAb• {$}

S10 A -> aAb • {$} S1 S3 A -> B • {$} S’ -> S • {$} S6 b A -> aA •b {$} S2 S -> A • {$} S B S7 A -> a •Ab {b} A -> •aAb {b} A-> •B {b} B -> •x {b} A S0 S5 S’ -> •S {$} S -> •A {$} S -> •xb {$} A -> •aAb {$} A -> •B {$} B -> •x {$} A -> a •Ab {$} A -> •aAb {b} A-> •B {b} B -> •x {b} A A a x a S9 x B S11 B -> x • {b} a A -> aA• b {b} B S8 b x A -> B • {b} S12 S4 S13 A -> aAb• {b} S -> x•b {$} B -> x • {$} b S -> xb • {$}

Y así con todos los demás.. Ahora trataremos de unir todos los conjuntos que tengan elementos en común y también uniendo sus lookahead. Con estos Conjuntos: S3 con S8 S5 con S7 S6 con S11 S10 con S12 Teniendo S3={A→B• {$}} S8={A→B• {b} Pasaremos a: S3_8={A→B• {$,b} Y así con todos los demás.. Nota: al unir estos conjuntos tenemos que unir también sus transiciones.

S10_12 A -> aAb • {$,b} S1 S3_8 A -> B • {b,$} S’ -> S • {$} b B S2 S6_11 S S -> A • {$} A -> aA •b {$, b} B S0 A S’ -> •S {$} S -> •A {$} S -> •xb {$} A -> •aAb {$} A -> •B {$} B -> •x {$} A S5_7 A -> a •Ab {$,b} A -> •aAb {b} A-> •B {b} B -> •x {b} a a S9 x B -> x • {b} x S4 S13 S -> x•b {$} B -> x • {$} b S -> xb • {$}

Construcción de la Tabla de AS 1. Construir la colección de conjuntos de elementos. 2. Ui es el estado i. Las acciones se determinan: Si A -> α · aβ está en Ui e ir_a(Ui, a) = Uj entonces “desplazar j” en acción[i, a]. Si A -> α · está en Ui entonces “reducir A -> α” en acción [i, a] para toda a en Look a head(A). Si S´ -> S · está en Ui entonces “aceptar” en acción[i,$]. 3. Si ir_a(Ui, A) = Uj, entonces ir_a(i, A) = j 4. Todas las entradas no definidas por 2 y 3 son error. 5. El estado inicial del analizador es el que contiene [S´ -> · S]

Construcción de Tabla de AS Evaluar Cadena No terminales Estados Si Terminales a b x $ S’ S A B d5_7 d4 1 2 3_8 Acepta r1 r4 4 d13 r5 5_7 d9 6_11 d10_12 9 10_12 r3 13 r2 Los Goto son desplazar y los kernel son reducir

Evaluar una cadena de entrada. Cadena de entrada: aaxbb Para iniciar en nuestra pila tenemos 0 y a la par tenemos nuestra cadena de entrada. Vamos evaluando (0,a)=S5_7, movemos a la pila a, seguido de 5_7 Cuando encontramos un ri en la tabla, nos vamos al numero de producción que lo produjo y reemplazamos la producción por el no terminal. (0)S’ → S$ (1)S → A (2)S → xb (3)A → aAb (4)A → B (5)B → x Pila Entrada Tabla LALR aaxbb$ (0,a) = S5_7 0a5_7 axbb$ (5_7,a)= S5_7

*Si la casilla esta vacia es error Pila Entrada Tabla LALR aaxbb$ (0,a)= S5_7 0a5_7a5_7 axbb$ (5_7,a)= S5_7 0a5_7 xbb%$ (5_7,x)= S9 Ver Tabla 0a5_7a5_7x9 bb$ (9,b) = r5 -> B -> x bb$ 0a5_7a5_7B (5_7,B) = 3_8 0a5_7a5_7B3_8 bb$ (3_8,b) = r4 -> A -> B 0a5_7a5_7A bb$ (5_7,A)= 6_11 0a5_7a5_7A6_11 bb$ (6_11,b) =S10_12 (0)S’ → S$ (1)S → A (2)S → xb (3)A → aAb (4)A → B (5)B → x b$ 0a5_7a5_7A6_11b10_12 (10_12,b)=r3 -> A -> aAb 0a5_7A b$ (5_7, A)= 6_11 (6_11,b)=S10_12 0a5_7A6_11 b$ 0a5_7A6_11b10_12 $ (10_12,$)=r3-> A->aAb 0A (0,A)=2 $ 0A2 $ (2,$)=r1 -> S->A 0S $ (0,S)=1 0S1 $ (1,$)= ACEPTADA *Si la casilla esta vacia es error

Cadena Aceptada FIN