Post on 11-Dec-2015
description
1.4 Pila semántica de un analizador
sintácticoANGEL FELIPE SUASTE TUZ
LUIS ANTONIO CHAN CHUCMIRIAM C. POOT PECH
JUAN ISAI CHUC TUZIRVING S. CHE CANUL
Para recordar…
Alfabeto
• Se llama alfabeto a un conjunto finito, no vacío. Los elementos de un alfabeto se llaman símbolos. Un alfabeto se define por enumeración de los símbolos que contiene (Alfonseca, 2006).
Ejemplo:
Palabra
• Se llama palabra, formada con los símbolos de un alfabeto, a una secuencia finita de los símbolos de ese alfabeto. Se utilizarán letras minúsculas como x o y para representar las palabras de un alfabeto (Alfonseca, 2006).
Ejemplo:
Conjunto de palabras
• El conjunto de todas las palabras que se pueden formar con las letras de un alfabeto se llama lenguaje universal de Σ. De momento se utilizará la notación W(Σ) para representarlo. Es evidente que W(Σ) es un conjunto infinito (Alfonseca, 2006).
Ejemplo:
Lenguaje
• Se llama lenguaje sobre el alfabeto a todo subconjunto del lenguaje universal de Σ( Alfonseca, 2006).
Ejemplo:
System.out.println("Ahora sí, entremos
en materia");
Analizador sintáctico
En teoría, se supone que la salida del analizador sintáctico es alguna representación del árbol sintáctico que reconoce la secuencia de tokens suministrada por el analizador léxico.
Analizador sintáctico
Funciones
• Acceder a la tabla de símbolos (para hacer parte del trabajo del analizador semántico).• Chequeo de tipos ( del analizador semántico).• Generar código intermedio.• Generar errores cuando se producen.
Tipos de errores al compilar
• Léxicos, producidos al escribir mal un identificador, una palabra clave o un operador.• Sintácticos, por una expresión aritmética o paréntesis no
equilibrados.• Semánticos, como un operador aplicado a un operando
incompatible.• Lógicos, puede ser una llamada infinitamente recursiva.
Manejo de errores
• Indicar los errores de forma clara y precisa. Aclarar el tipo de error y su localización.• Recuperarse del error, para poder seguir examinando la
entrada.• No ralentizar significativamente la compilación.
Gramática
La gramática que acepta el analizador sintáctico es una gramática de contexto libre:Gramática : G (N, T, P, S)N = No terminales.T = Terminales.P = Reglas de Producción.S = Axioma Inicial.
Ejemplo : Se considera la gramática que reconoce las operaciones aritméticas.EE + T|TT T * F| FF ID|NUM|( E )
Donde:
En el que: N = {E, T, F} están a la izquierda de la regla.T = {ID, NUM, ( ,) ,+ ,*}P = Son las tres reglas de producción.S = Axioma inicial. Podría ser cualquiera, en este caso es E.
Derivaciones
Derivaciones : La idea central es que se considera una producción como una regla de reescritura, donde el no terminal de la izquierda es sustituido por la cadena del lado derecho de la producción.
Tipos de Derivaciones1. Por la izquierda2. Por la derecha
Derivaciones por izquierda e izquierda• Derivación por la izquierda : Derivación donde solo el no
terminal de más a la izquierda de cualquier forma de frase se sustituye en cada paso.• Derivación por la derecha o Derivación canónica: Derivación
donde el no terminal más a la derecha se sustituye en cada paso.
Todo tiene más sentido con un ejemplo:Sea la gramáticaSaAAaBbCBbCc
Queda:
Izquierda:
SaAaaBbCaabbCaabbc (1234)
Derecha:
SaAaaBbCaaBbcaabbc (3421)
Ahora, un poco más de nivel
Sea la gramáticaE E + E| E - E| E * E| E / E| E ^ E| id
• Constrúyase una derivación por la izquierda y por la derecha para la siguiente frase:
id1 * id2 + id3
Todo tiene más sentido con un ejemplo:izquierda:E E + E E * E + E id1 * E + E id1 * id2 + E id1 * id2 + id3
derecha:E E + E E + id3 E * E + id3 E * id2 + id3 id1 * id2 + id3
Árbol sintáctico
• Es una representación que se utiliza para describir el proceso de derivación de dicha sentencia.• Como nodos internos del árbol, se sitúan los elementos no
terminales de las reglas de producción que vayamos aplicando, y tantos hijos como símbolos existan en la parte derecha de dichas reglas.
Sea la gramática anterior.E E + T | TT T * F | FF ( E ) | a | b
Supongamos que hay que reconocer: ( a + b ) * a + b
Si el árbol puede construirse, es que la sentencia es correcta:
Ambigüedad
• Una gramática G es ambigua si existe xÎL(G) con al menos dos árboles de derivación diferentes.• Ej: La gramática S SbS|ScS|a es ambigüa
Materializando con JFlap
• JFLAP is software for experimenting with formal languages topics including nondeterministic finite automata, nondeterministic pushdown automata, multi-tape Turing machines, several types of grammars, parsing, and L-systems. In addition to constructing and testing examples for these, JFLAP allows one to experiment with construction proofs from one form to another, such as converting an NFA to a DFA to a minimal state DFA to a regular expression or regular grammar.
Empecemos…
Ejercicios
SaS|cAAbA|cB| ɛBcB|a| ɛ
Construir cadena acbb
Fuentes consultadas
Traductores, Compiladores e Intérpretes de María del Mar Aguilera Sierra y Sergio Gálvez Rojas