Lenguajes y automatas 2 : Pilas Sematica 1.4

Post on 11-Dec-2015

34 views 11 download

description

Unidad 1, tema 1.4, pilas semanticas de la materia de lenguajes y automatas 2.Presentacion universitaria

Transcript of Lenguajes y automatas 2 : Pilas Sematica 1.4

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