Tema 3: Análisis sintáctico - Ejercicios de modelado sintáctico con GPDR
Solución del ejercicio 4.A
Categoría léxica | Expresión regular | Emitir u omitir | Atributos |
---|---|---|---|
suma | \+ | emitir | |
resta | - | emitir | |
multiplicación | [xX] | emitir | |
constante | [0-7]+ | emitir | valor |
variable | [a-wyz] | emitir | lexema |
abreParéntesis | \( | emitir | |
cierraParéntesis | \) | emitir | |
abreCorchete | \[ | emitir | |
cierraCorchete | \] | emitir |
Solución del ejercicio 4.B
<Cad> -> abreCorchete abreCorchete <Expresión> cierraCorchete cierraCorchete
<Expresión> -> <Término> <Operador> <Expresión>
<Expresión> -> <Término>
<Operador> -> suma
<Operador> -> resta
<Operador> -> multiplicación
<Término> -> constante
<Término> -> variable
<Término> -> abreParéntesis <Expresión> cierraParéntesis
<Término> -> abreCorchete <Expresión> cierraCorchete
En esta solución la asociatividad por la derecha de los operadores se ha modelado mediante recursividad por la derecha, y el nivel de precedencia de los operadores se ha modelado haciendo que el no terminal <Operador> se reescriba como cualquiera de ellos. De este modo la gramática no es ambigua.
Como ejercicio adicional, piensa si es LL(1) y, en caso de no serlo, cómo resolverlo.