Documente Academic
Documente Profesional
Documente Cultură
Anlisis Sintctico
Eliminacin de Recursividad
Eliminacin de Factorizacin
Indice
Resumen
Recordando Ambiguedad
Recursividad por la Izquierda
Eliminacin de la Factorizacin
Expresiones Regulares,
Gramticas y Lenguajes
Una expresin regular puede ser escrita usando:
Caracteres en el alfabeto
Operadores de expresiones regulares:
* | + ? ( )
Ejemplo:
(-| ) (0|1|2|3|4|5|6|7|8|9)+ (. (0|1|2|3|4|5|6|7|8|9)*)?
Sintaxis
Como se ve un programa
Representacin textual o estructura
Es posible una definicin matemtica precisa
Semntica
Cul es el significado de un programa
Es ms difcil dar una definicin matemtica
Por qu hacer anlisis sintctico?
Podemos proveer una definicin precisa y fcil
de entender
Una gramtica apropiada imparte estructura a
un lenguaje de programacin
Podemos construir automticamente un parser
que determine si el programa es sintcticamente
correcto
Ayuda en el proceso de traduccin
Fcil modificar/aadir al lenguaje
Entrada y Salida de un Parser
Entrada: - (123.3 + 23.6)
left_paren_op
-
num(123.3)
plus_op
( )
num(23.6)
right_paren_op
123.3 23.6
+
Mismo string Dos derivaciones
num + num * num
<expr> <expr>
AA|
Donde y son cadenas de terminales y no terminales y no comienza en A.
Esta regla genera todas las cadenas de la forma , , Todas las cadenas
comienzan con una , seguida por (0 o mas ).
A A
A A|
A A | A ||A n | | | | m
A A| A|.| m A
A A| A|.| n A|
Se ordenan los no terminales S, A. No hay recursin directa por la izquierda entre las
producciones de S, de modo que no ocurre nada durante el paso 2 para el caso i=1.
Para i=2, se sustituyen las producciones de S en A Sd para obtener las siguientes
producciones de A.
A Ac|Aad | bd |
EJEMPLO Resolucin
Compiladores
Introduccin al Anlisis Sintctico
E TE S(E){$,)}
P(E){(, num, id}
E +TE | -TE | S(E){$,)}
P(E){+, -, }
T FT S(T){+,-,$,)}
P(T){(,num,id}
T *FT | /FT | S(T){+,-,$,)}
P(T){*,/, }
F (E) | num | id S(F){+,/,*-,$,)}
P(F){(,num,id}
TABLA DE ANALISIS
SINTACTICO
+ - * / ( ) num id $
E TE TE TE
E +TE -TE
T FT FT FT
T *FT /FT
F (E) num id
VALIDAR CADENA LL(1)
PILA ENTRADA
$E num+id*num$
$E'T num+id*num$
$E'T'F num+id*num$
$E'T'F num+id*num$
$E'T'num +id*num$
$E'T' +id*num$
$E' +id*num$
$E'T+ +id*num$
$E'T'F id*num$
$E'T'id id*num$
$E'T' *num$
$E'R'F* *num$
$E'T'F num$
$E'T'num num$
$E'T' $
$E' $
$ $
ENTRADA a + b $
Tabla de anlisis
Sintctico M