Académique Documents
Professionnel Documents
Culture Documents
Taller:Compiladores
ANALIZADOR SINTÁCTICO
Clasificación:
Es del tipo LL1 porque empezamos derivando por la izquierda, y los caracteres son
leídos de izquierda a derecha, el 1 por que se lee 1 solo elemento de entrada.
- Eliminar Ambigüedad
- Eliminar Recursividad por la Izquierda
- Factorizar
- Primeros y siguientes
Ambigüedad
Ejemplo:
Una gramática es recursiva por la izquierda si tiene un no Terminal A tal que existe
una derivación A->Aα para alguna cadena. Es decir por simple observación podemos
identificar.
Gramática Recursiva
1. Un programa conductor
2. Una entrada
3. Una salida
4. Una tabla de análisis sintáctico, compuesta de 2 partes (ACCIÓN Y GOTO)
Cabe acotar que el programa conductor es siempre igual, solo variando para cada
lenguaje la tabla de análisis sintáctico.
El algoritmo para reconocer cadenas es el siguiente: dado el primer carácter de la
cadena y el estado inicial de la tabla, buscar qué acción corresponde en la tabla de
acción.
1. S->A.cB
2. Si c es un no terminal, se agregan todos los ítems que tengan a c como
cabeza de la producción y el punto al principio de la cola,
1. Se amplía la gramática
2. Dado el símbolo inicial de la gramática ampliada, se calcula su clausura y
este se define como un estado inicial.
3. Para cada estado: se agrupan las producciones según el carácter que está
después del punto, si todavía no se definió el estado, se corre el punto un
carácter a la derecha, se crea el nuevo estado con esta producciones, y la
clausura de cada una de ellas, se define el carácter que estaba después del
punto en el estado de origen como el carácter de la transición.
4. Si el estado tiene en alguna producción el punto al final, este estado se
marca como un estado final del autómata.
5. Se sigue hasta que ya no se tenga más estados nuevos posibles.
Ejemplo
• Considere la gramática:
E E + (E) int
Repite
Hasta str = S
BIBLIOGRAFIA