background="http://www.zonalibre.org/blog/arrakis/archives/fo.jpg" width="470" height="311" border="0" bgproperties="fixed">
cromo.gif

Abril 16, 2004

Antes de comer

Yo me he tragado este truño sin patatas y ahora vosotros tambien.
!!! 3 Horitas con el ejercicio ¡¡¡¡

PRACTICA COMPILACIÓN

Propósito: Entender de una manera práctica como actua un compilador en su fase de análisis.

Gramática aceptada por nuestro compilador:

Entero íd | id, id
Leer (id)
Id =ent | expression
EXPRESION = id | ent | id * id | id + ent | id - ent
EXPRESION = EXPRESION + EXPRESION
Si (EXPRESION Imprimir (EXPRESION,CADENA)
Cadena = ‘str’
Mientras (EXPRESION < EXPRESION)
Fin Mientras
hacer EXPRESION
hacer EXPRESION
Fin si

Código Ejemplo:
0. Entero A,B
1. Entero C
2. leer (A)
3. leer (B)
4. C = (A * B) + 2
5. Si (C>0)
6. Imprimir (C,’es positivo’)
7. Si no
8. Imprimir (C,’es negativo’)
9. Fin si

Análisis Léxico
Entero id1,id2
Entero id3
Leer id1
Leer id2
Id3 = (id1 * id2) + 2
Si (id3 >0)
Imprimir (id3,’es positivo’)
Si no
Imprimir (id3,’es negativo’)
Fin si

Análisis Sintáctico y Semántico
Entero id1,id2
Entero id3
Ent = leer id1 Válido
Ent = leer id2 Válido
Id3 = expresion
Expresion = expresion + expresion
Expresion = id1 * id2 + expresion
Expresion = id1 * id2 + ent Válido
Si (Expresion < Expresion)
id3 = Ent < Expresion = ent Válido
(Además se comprueba la concordancia de tipos con la tabla de simbolos ent Imprimir (Expresion, cadena)
Expresion= ent. Válido
Si no Válido
Imprimir (Expresion, cadena)
Expresion= ent. Válido
Fin si.


Ejercicio 1

Con la gramática definida anteriormente y siguiendo el ejemplo, describir la fase de análisis para el código dado (análisis léxico, sintáctico y semántico) dibujando su correspondiente tabla de símbolos.
Pon tres ejemplos de error lexico, sintactico y semantico


Entero W,X
Entero Y,Z
Entero N
N=0
Leer (W)
Leer (X)
Leer (Y)
Z= W * X + Y * 5
Mientras (W < Z)
hacer Z=Z-1
hacer N=N+1
Fin Mientras
Imprimir ( N, ‘Unidades de diferencia entre W y Z=(W* X + Y *5)’)

Lexico:
Entero id1,id2
Entero id3,id4
Entero id5
Id5=ent
Leer id1
Leer id2
Leer id3
Id4=(id1*id2+id3*ent)

Mientras (id1 Hacer id4=id4 – ent
Hacer id5=id6+ent
Fin mientras
Imprimir (id5, ‘unidades de diferencia entre id1 y id4 = (id1*id2+id3+ent’)
Fin si

Sintactico semantico
Entero id1,id2
Entero id3,id4
Entero id5
Id5= ent
Leer id1Valido
Leer id2Valido
Leer id3Valido
Id4=exp
expresión= expresión + expresion
mientras (id1 < id4)
hacer id4 = expresion
hacer id4=id4-ent
hacer id5=expresión
fin mientras
Imprimir (exp,cadena)
Fin si

Ejercicio 2

Siguiendo el ejemplo pero esta vez a la inversa, define una gramatica de compilador válida para el siguiente código:

Entero A ,resultado
1. leer (A)
2. resultado = 1
3. mientras (A>1)
4. resultado = resultado * A
5. A = A – 1
6. fin mientras
7. imprimir (resultado)

gramatica

Entero íd , id
Leer (id)
Id =ent | exp
Mientras (expresión > expresion)
EXPRESION = id | ent | id * id | id - ent
Fin Mientras
Imprimir (id)
Fin si

Garabateado por Chechu a las Abril 16, 2004 02:47 PM
Cosas que habeis dicho

la respuesta es la a)

Escrito por El Abuelo Cascarrabias a las Abril 16, 2004 04:27 PM
Dime que opinas









¿Recordar informacion personal?