Procesadores de lenguaje Ejercicios Análisis semántico
Procesadores de lenguaje Ejercicios Análisis semántico
Procesadores de lenguaje Ejercicios Análisis semántico
You also want an ePaper? Increase the reach of your titles
YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.
<strong>Procesadores</strong> <strong>de</strong> <strong>lenguaje</strong><strong>Ejercicios</strong> <strong>Análisis</strong> <strong>semántico</strong>Salvador Sánchez, Daniel RodríguezDepartamento <strong>de</strong> Ciencias <strong>de</strong> la ComputaciónUniversidad <strong>de</strong> Alcalá
Ejercicio 1 (propuesto)• A partir <strong>de</strong> gramática <strong>de</strong> abajo se pi<strong>de</strong>:– Mostrar el árbol sintáctico <strong>de</strong>corado para la ca<strong>de</strong>na <strong>de</strong> entrada “aaaa”– Elaborar el grafo <strong>de</strong> <strong>de</strong>pen<strong>de</strong>ncias para la evaluación en el or<strong>de</strong>ncorrecto <strong>de</strong> todos los atributos.– Indique la salida que produce el análisis <strong>de</strong> la entrada “aaaa”S’→SS → ASS → AA → aprintf(“%d”,S.v);S 0.v = A.vA.x = S 1.vA.x = 0S.v = A.vA.v = A.x + 1<strong>Procesadores</strong> <strong>de</strong> <strong>lenguaje</strong> – Tema 4: <strong>Análisis</strong> <strong>semántico</strong>Salvador Sánchez, Daniel Rodríguez
Ejercicio 2: Binario a <strong>de</strong>cimal• Consi<strong>de</strong>rar la siguiente gramática que genera númerosbinarios:A → AB | BB → 0 | 1• Obtener la gramática con atributos que al analizar unnúmero binario calcule su equivalente en <strong>de</strong>cimal.• Mostrar el árbol para la ca<strong>de</strong>na <strong>de</strong> entrada 101<strong>Procesadores</strong> <strong>de</strong> <strong>lenguaje</strong> – Tema 4: <strong>Análisis</strong> <strong>semántico</strong>Salvador Sánchez, Daniel Rodríguez
Ejercicio 2: Binario a <strong>de</strong>cimal• Gramática con atributos:A → AB { A 0 .val = 2*A 1 .val + B.val }A → B{ A.val = B.val}B → 0 { B.val = 0 }B → 1 { B.val = 1 }<strong>Procesadores</strong> <strong>de</strong> <strong>lenguaje</strong> – Tema 4: <strong>Análisis</strong> <strong>semántico</strong>Salvador Sánchez, Daniel Rodríguez
Ejercicio 2: Binario a <strong>de</strong>cimal<strong>Procesadores</strong> <strong>de</strong> <strong>lenguaje</strong> – Tema 4: <strong>Análisis</strong> <strong>semántico</strong>Salvador Sánchez, Daniel Rodríguez
Ejercicio 3 (propuesto)• Consi<strong>de</strong>rar la siguiente gramática:num → dig num | digdig → 0 | 1 | … | 9• Añadirle atributos y acciones semánticas para que calculesu valor en <strong>de</strong>cimal<strong>Procesadores</strong> <strong>de</strong> <strong>lenguaje</strong> – Tema 4: <strong>Análisis</strong> <strong>semántico</strong>Salvador Sánchez, Daniel Rodríguez
Ejercicio 4: octal-<strong>de</strong>cimal• Dada la gramática <strong>de</strong> la página siguiente:– Dibujar las gráficas <strong>de</strong> <strong>de</strong>pen<strong>de</strong>ncias para cada regla– Dibujar el árbol sintáctico para la expresión 345o– Dibujar la gráfica <strong>de</strong> <strong>de</strong>pen<strong>de</strong>ncia para el árbol sintáctico anterior yestablecer una clasificación topológica para el mismo– Generar el código correspondiente a las reglas semánticas asociadas alanálisis <strong>de</strong> la expresión anterior<strong>Procesadores</strong> <strong>de</strong> <strong>lenguaje</strong> – Tema 4: <strong>Análisis</strong> <strong>semántico</strong>Salvador Sánchez, Daniel Rodríguez
Ejercicio octal-<strong>de</strong>cimal (semántica)num-base → numcarbasecarbase → ocarbase → dnum → num dígitonum → dígitodígito → 0...dígito →7dígito → 8dígito → 9num-base.val = num.val;num.base = carbase.basecarbase.base = 8carbase.base = 10num 1.val =if dígito.val = error or num 2.val = errorthen errorelse num 2.val * num 1.base + dígito.valnum 2.base= num 1.basedígito.base = num 1.basenum.val = dígito.valdígito.base = num.basedígito.val = 0…dígito.val = 7dígito.val = if dígito.base == 8 then error else8dígito.val = if dígito.base == 8 then error else9<strong>Procesadores</strong> <strong>de</strong> <strong>lenguaje</strong> – Tema 4: <strong>Análisis</strong> <strong>semántico</strong>Salvador Sánchez, Daniel Rodríguez
Octal-<strong>de</strong>cimal. (Graf. <strong>de</strong> <strong>de</strong>pen<strong>de</strong>ncias)<strong>Procesadores</strong> <strong>de</strong> <strong>lenguaje</strong> – Tema 4: <strong>Análisis</strong> <strong>semántico</strong>Salvador Sánchez, Daniel Rodríguez
Octal-<strong>de</strong>cimal. (Árbol sintáctico 345o)num_basenumcarbasenumdigitonumdigitodigito<strong>Procesadores</strong> <strong>de</strong> <strong>lenguaje</strong> – Tema 4: <strong>Análisis</strong> <strong>semántico</strong>Salvador Sánchez, Daniel Rodríguez
Octal-<strong>de</strong>cimal. (Gráf. <strong>de</strong> <strong>de</strong>pen<strong>de</strong>ncia)<strong>Procesadores</strong> <strong>de</strong> <strong>lenguaje</strong> – Tema 4: <strong>Análisis</strong> <strong>semántico</strong>Salvador Sánchez, Daniel Rodríguez
Octal-<strong>de</strong>cimal. (Código intermedio)a 1 =8; //carbase.base=8a 2 =a 1 ; //m.base=8a 3 =a 2 ; //m.base=8a 4 =a 3 ; //m.basea 5 =a 4 ; //digito.base=8a 6 =3;a 7 =a 6 ;a 8 = a 3 ;a 8 =4;if (a 9 =error||a 7 ==error) then a 10 =error else a 10 =a 7 *a 3 +a 9 ;// a 10 =3*8+4=28a 11 =a 2 ; //a 11 =8a 12 =5;if (a 12 =error||a 10 ==error) then a 13 =error else a 13 =a 10 *a 2 +a 12 ;// a 13 =28*8+5a 13 =a 13 ;<strong>Procesadores</strong> <strong>de</strong> <strong>lenguaje</strong> – Tema 4: <strong>Análisis</strong> <strong>semántico</strong>Salvador Sánchez, Daniel Rodríguez
Ejercicio 5 (propuesto)• A partir <strong>de</strong> la gramática siguiente, amplíala con atributossintetizados <strong>de</strong> manera que, cuando se reduzca por S,se muestre el número <strong>de</strong> a y b que contiene una frasecualquiera <strong>de</strong>l <strong>lenguaje</strong> generado por la gramática:S → (A)A → A , DA → DD → aD → bD → (A)<strong>Procesadores</strong> <strong>de</strong> <strong>lenguaje</strong> – Tema 4: <strong>Análisis</strong> <strong>semántico</strong>Salvador Sánchez, Daniel Rodríguez
Ejercicio 6 (propuesto)• Amplie la gramática siguiente con atributos sintetizados para queobtenga el número <strong>de</strong>cimal correspondiente al número binario <strong>de</strong>entrada:S → CC → 0 CC → 1 CC → 0C → 1• Construya el árbol sintáctico para la entrada 110101 incluyendoinfomación topológica para nodos y hojas.• Evalúe el árbol aplicando las reglas semánticas.<strong>Procesadores</strong> <strong>de</strong> <strong>lenguaje</strong> – Tema 4: <strong>Análisis</strong> <strong>semántico</strong>Salvador Sánchez, Daniel Rodríguez
Ejercicio 6.• Amplíe la gramática siguiente con atributos sintetizadospara que calcule el valor mínimo y máximo <strong>de</strong> una lista <strong>de</strong>enteros.S → LL → num , LL → num• Presente las diferentes acciones semánticas para laentrada siguiente:7, 8, 5, 3 $<strong>Procesadores</strong> <strong>de</strong> <strong>lenguaje</strong> – Tema 4: <strong>Análisis</strong> <strong>semántico</strong>Salvador Sánchez, Daniel Rodríguez
Ejercicio 6. (Solución)S → LL0 → num , L1L → numS.maximo = L.maximoS.minimo = L.minimoL 0 .minimo = MIN (num.valor, L 1 .minimo)L 0 .maximo = MAX (num.valor, L 1 .maximo)L.maximo = num.valorL.minimo = num.valor<strong>Procesadores</strong> <strong>de</strong> <strong>lenguaje</strong> – Tema 4: <strong>Análisis</strong> <strong>semántico</strong>Salvador Sánchez, Daniel Rodríguez
Ejercicio 7a• Complete la gramática <strong>de</strong>l ejercicio 7a con accionessemánticas que permitan calcular el número <strong>de</strong> listas <strong>de</strong>una expresión <strong>de</strong> entrada.L → (A)A → A (A) | €• Tenga en cuenta que una lista está formada por unapareja <strong>de</strong> paréntesis balanceados, por lo que:()(()) 3 listas(()) 2 listas()() 2 listas(()(())) 4 listas<strong>Procesadores</strong> <strong>de</strong> <strong>lenguaje</strong> – Tema 4: <strong>Análisis</strong> <strong>semántico</strong>Salvador Sánchez, Daniel Rodríguez
Ejercicio 7a. (Solución)L → (A)A → A(A)A.listas_antes = 1L.total_listas = A.listas_<strong>de</strong>spuesA 1 .listas_antes = A 0 .listas_antesA 2 .listas_antes = A 1 .listas_<strong>de</strong>spues + 1A 0 .listas_<strong>de</strong>spues = A 2 .listas_<strong>de</strong>spuesA → €A.listas_<strong>de</strong>spues = A.listas_antes<strong>Procesadores</strong> <strong>de</strong> <strong>lenguaje</strong> – Tema 4: <strong>Análisis</strong> <strong>semántico</strong>Salvador Sánchez, Daniel Rodríguez
Ejercicio 7b• Complete la gramática siguiente con acciones semánticasque permitan calcular la profundidad <strong>de</strong> una expresión <strong>de</strong>entrada, entendida como el máximo número <strong>de</strong>anidamiento <strong>de</strong> todas las listas <strong>de</strong> la expresión.• Ejemplos:()(()) Profundidad 2(()) Profundidad 2()() Profundidad 1(()(())) Profundidad 3<strong>Procesadores</strong> <strong>de</strong> <strong>lenguaje</strong> – Tema 4: <strong>Análisis</strong> <strong>semántico</strong>Salvador Sánchez, Daniel Rodríguez
Ejercicio 7b . (Solución)L → (A)L.p = A.p + 1A → A(A)si A 1 .p > A 2 .p entonces A 0 .p = A 1 .psi_no A 0 .p = A 2 .p + 1A → €A 0 .p = 0<strong>Procesadores</strong> <strong>de</strong> <strong>lenguaje</strong> – Tema 4: <strong>Análisis</strong> <strong>semántico</strong>Salvador Sánchez, Daniel Rodríguez
Ejercicio 7b (Árbol sintáctico).<strong>Procesadores</strong> <strong>de</strong> <strong>lenguaje</strong> – Tema 4: <strong>Análisis</strong> <strong>semántico</strong>Salvador Sánchez, Daniel Rodríguez
Ejercicio 7b. Profundidadp=2p=1p=1p=0p=0 p=0<strong>Procesadores</strong> <strong>de</strong> <strong>lenguaje</strong> – Tema 4: <strong>Análisis</strong> <strong>semántico</strong>Salvador Sánchez, Daniel Rodríguez