11.07.2015 Views

Procesadores de lenguaje Ejercicios Análisis semántico

Procesadores de lenguaje Ejercicios Análisis semántico

Procesadores de lenguaje Ejercicios Análisis semántico

SHOW MORE
SHOW LESS

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

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!