 |
Boletín de ejercicios II: análisis sintáctico |
|
EJERCICIO 1
Dada la siguiente gramática:
G=<ET, EN, S, P>
ET={0,1}
EN={S,A,B}
S=S
P={S -> 11
S -> 1B
S -> 0A
A -> 0S
A -> 1
B -> 1S0
B -> 1
}
De las siguientes palabras, ¿cuál (es) pertenecen al lenguaje
generado por la gramática?: 00, 10, 11, 100, 1100, 11000
EJERCICIO 2
Dada la siguiente gramática:
G=<ET, EN, S, P>
ET={0,1}
EN={S,A,B}
S=S
P={S -> 0A
S -> 1B
A -> 0S1
A -> 0
B -> 1S0
B -> 1
}
De las siguientes palabras, ¿cuál (es) pertenecen al lenguaje
generado por la gramática?: 00, 10, 11, 100, 1100, 11000
EJERCICIO 3
Escriba una gramática que defina el lenguaje de todas las cadenas no
vacías del alfabeto {a, b, c, d} que
no contengan a la subcadena abc.
EJERCICIO 4
Demuestre que la gramática con las siguientes producciones es
ambigua. Halle una gramática equivalente que no sea ambigua.
G=<ET, EN, S, P>
ET={0,1}
EN={S,B}
S=S
P={S -> 11
S -> 1B
B -> 1S0
B -> 1
}
EJERCICIO 5
El lenguaje de programación C tienen un gran número de operadores,
defina una gramática no ambigua para las expresiones de C tomando en
cuenta el siguiente sub-conjunto de operadores.
Operador | Descripción | Asociatividad |
* / | Multiplicación, División | Izquierda |
+ - | Suma, Resta | Izquierda |
< <= > >= = | Relacional | Izquierda |
EJERCICIO 6
Defina, por medio de una gramática independiente del contexto un
lenguaje de expresiones aritméticas que tenga las siguientes
características:
La suma (operador +) y la multiplicación (operador x) de
expresiones aritméticas es una expresión aritmética.
Una expresión aritmética entre paréntesis es
una expresión aritmética.
Las constantes númericas positivas o 0 son
expresiones aritméticas.
El alfabeto de tokens a utilizar para definir el lenguaje es el
siguiente: {NUM, +, x, (, ) }. El token NUM representa una constante
númerica positiva o 0 (una cadena de dígitos). Se desea
que las expresiones entre paréntesis sólamente puedan aparecer
precedidas del operador de multiplicación (x).
Ejemplos de cadenas del lenguaje pedido son las siguientes:
3 + 5 x 7
7 x (3 + 5)
3
7 x (3 x (5 x 2))
7 x 3 + 5
7 x 3 x 5 x 2
Ejemplos de cadenas que no pertenecen al lenguaje pedido son las
siguientes:
(3)
3 + (5 x 4)
7 x ((5 x 2))
EJERCICIO 7
Para cada una de las gramáticas indicadas a continuación
escriba una expresión regular que defina el mismo lenguaje que la
gramática dada.
-
G=<ET,EN,S,P>
ET={a, b}
EN={S, A, B}
S= S
P={
S -> A S, S -> A,
A -> a A, A -> b B,
B -> a B, B -> a
}
-
G=<ET,EN,S,P>
ET={a, b, c}
EN={S, A, B, C}
S= S
P={
S -> A S, S -> b,
A -> a B, A -> b C,
B -> b B, B -> c,
C -> b C, C -> a
}
EJERCICIO 8
A continuación se presentan 7 definiciones de lenguajes (6 gramáticas y una expresión regular):
Definición 1 (gramática):
G=<ET,EN,S,P>
ET={a, b}
EN={S}
S=S
P={S -> a S a, S -> b}
|
Definición 2 (gramática):
G=<ET,EN,S,P>
ET={a, b}
EN={S, A, B}
S=S
P={S -> b, S -> a B, B -> ba, B -> A a, A -> a B}
|
Definición 3 (gramática):
G=<ET,EN,S,P>
ET={a, b}
EN={S}
S=S
P={S -> a S a, S -> b, S -> a S, S -> S a}
|
Definición 4 (gramática):
G=<ET,EN,S,P>
ET={a, b}
EN={S, A}
S=S
P={S -> a A, A -> ba, A -> S a}
|
Definición 5 (gramática):
G=<ET,EN,S,P>
ET={a, b}
EN={S, A}
S=S
P={S -> a A, A -> a A a, A -> ba}
|
Definición 6 (gramática):
G=<ET,EN,S,P>
ET={a, b}
EN={S}
S=S
P={S-> a S a, S -> aba}
|
Definición 7 (expresión regular):
Sin embargo, estas definiciones no definen 7 lenguajes distintos.
Indique cuantos lenguajes distintos son definidos y, para cada
lenguaje, indique cual o cuáles de las definiciones dadas lo
identifican.
EJERCICIO 9
Considere las siguientes gramáticas:
Gramática G1:
G1=<ET, EN, S, P}
ET= {=, *, i}
EN= {S, L, R}
S= S
P= {S -> L = R, S -> R,
L -> * R, L -> i,
R -> L}
|
Gramática G2:
G2=<ET, EN, S, P}
ET= {i, +, *}
EN= {E}
S= E
P= {E -> E + E, E -> E * E,
E -> i}
|
Gramática G3:
G3=<ET, EN, S, P}
ET= {a, b, c}
EN= {S, A}
S= S
P= {S -> a S b, S -> A,
A -> c A, A -> c}
|
Gramática G4:
G4=<ET, EN, S, P}
ET= {a, b, c}
EN= {S, A, B, C}
S= S
P= {S -> A a, S -> B b, S -> S a S,
S -> a C, S -> a b, A -> c A,
A -> c, B -> c c, C -> a C,
C -> b}
|
Para cada una de estas gramáticas conteste a las siguientes
preguntas:
Obtenga el autómata LR(0) correspondiente a la gramática.
Para cada no terminal de la gramática calcule la función
SIGUIENTE.
A la vista de los resultados obtenidos en los 2 apartados
anteriores, indique si el analizador SLR para la gramática tiene algún
conflicto. Si la respuesta es afirmativa, indique en que estados del
autómata hay conflictos y de que tipo.
Indique que podemos concluir acerca de si la gramática es o no
ambigua. Razone la respuesta.
Analice con el analizador SLR la cadena que se indica a
continuación, mostrando la secuencia de pasos (desplazamiento,
reducción, aceptar y error) que realizaría el analizador. En cada paso
muestre el contenido de la pila de estados y la parte de la cadena
pendiente de consumir.
Cadena para G1: **i=i
Cadena para G2: i*i+i
Cadena para G3: aaccb
Cadena para G4: ccaaabaa
Nota: en el caso de que la gramática presente algún conflicto,
utilizaremos los siguientes criterios para resolver los conflictos y
poder realizar el análisis. En el caso de los conflictos
desplazamiento-reducción optaremos por desplazar. En el caso de los
conflictos reducción-reducción optaremos por reducir utilizando la regla
de producción que esté definida primero en la gramática.
EJERCICIO 10
Considere la regla de producción A ->A B C que forma parte de
la gramática G, donde A, B y C son símbolos
no terminales. Se sabe que se asocia a los no terminales A y
C un mismo interfaz, llamado AC y al no terminal
B se le asocia el interfaz B.
Escriba la clase Java que correspondería a esta regla de producción
como parte de las clases Java que habría que definir para representar
árboles de sintaxis abstracta para G.
EJERCICIO 11
Para cada una de las siguientes expresiones regulares, escriba una
gramática que defina el mismo lenguaje:
- a*(ab(bc|a)*)+
- (a|b)+
- ab ((ab|ba)+|bcb)+
- a*b*