APUNTES DE COMPILADORES
SECUENCIA: 4NM51
PROGRAMA ACADÉMICO: INGENIERÍA EN INFORMÁTICA
ALUMNO: ENRÍQUEZ ESPARRAGOZA DANIEL
NIVELES DE APRENDIZAJE ASOCIADOS DE MANERA
ASCENDENTE:
5.- ADMINISTRACIÓN DE TECNOLOGÍAS
4.- COMPILADORES, SISTEMAS EN TIEMPO REAL
3.- SISTEMAS OPERATIVOS, ALGORITMOS COMPUTACIONALES
2.- TEORÍA DE LA COMPUTACIÓN, ESTRUCTURA DE DATOS
1.- MATEMÁTICAS DISCRETAS.
FORMA DE EVALUACIÓN:
1er Departamental: 50% Examen escrito 25% Participaciones 25%
Tareas
2do Departamental: 50% Examen escrito 25% Participaciones 25%
Tareas
3er Departamental: 50% Examen escrito 25% Participaciones 25%
Tareas
80% Asistencia; En caso de falta, justifica con receta médica.
1er Departamental
Sistemas de Traducción y Compilación.
ARCHIVO COMPILADOR PROGRAMA.EXE
TRADUCTOR
INTERPRETE
COMPILADOR
Fases de compilación
=
<id,1> <=> <id,2> <+>
A=B+C*60; <id,1> +
<id,3> <*> <60>
<id,2> *
<id,3> 60
ANALIZADOR LÉXICO
ANALIZADOR SINTÁCTICO
=
T1=inttofloat(60)
<id,1> + LDF R2, id3
T2=id3 * T1 T1 = id3 * 60.0
<id,2> * MULF R2,R2
T3= id2 + t2 id1=id2+T1
<id,3> float LDF R1,id2
id1=T3 OPTIMIZADOR DE
60 CÓDIGO ADDF R1,R1,R2
GENERADOR DE
ANALIZADOR SEMÁNTICO CÓDIGO INTERMEDIO STF i d1,R1
GENERADOR DE CÓDIGO
EJERCICIO 1.3.1: Indique cuál de los siguientes términos se aplican a los siguientes lenguajes:
RESPUESTAS:
a) ->1,2,5
b) ->7
c) ->1,4
d) ->2,5
e) ->7
f) ->1,2,3,4,5,6
g) ->2,5,10
h) ->5,8,9
Declaration Type
Int a = 1 B1-B3
Int b = 1 B1-B2
Int b=2 B2-B4
Int a=3 B3
Int b =4 B4
#define a (x+1)
int x = 2;
void b(){int x=1; printf(“%d\n”,a);}
void c(){printf(“%d\n”, a);}
void main(){b(); c();}
Programa 1 Análisis del valor de a
1. i=i+1
2. t1=a[i]
3. if t1 < v goto 1
Programa 3 Código de tres direcciones del Programa 2 basado en la Ilustración
1. i=i+1
2. t1=a[i]
3. if t1 < v goto 1
4. j=j-1
5. t2=a[j]
6. if t2 > v goto 4
7. if FALSE i>=j goto 9
8. goto 14
9. x=a[i]
10. t3=a[j]
11. a[i]=t3
12. a[j]=x
13. goto 1
14.
Programa 4 Código optimizado del Programa 2
ROBOT
Ilustración 5 Izq. Plano Cartesiano en la que se mueve el robot Der. Controles para su movimiento, así como un botón de reset y sus coordenadas
actuales
En 2 dimensiones tenemos que meter la secuencia: begin east, south, north, west y decirnos su posición.
Instrwest Seq.x = -1
Seq.y = 0
Instrsouth Seq.x = 0
Seq.y = -1
NOTACIÓN POLACA
Infija Prefija +XY
X+Y Postfija XY+
X -> OP1 Y->OP2 + -> OPBinario
Expresión matemática:
−b ± √ b2−4 ac
x 1,2=
2a
Codificación: +, -, *, /, ↑, (, ), =
Infija
X1=(¬b+(b↑2-4*a*c) ↑(1/2))/(2*a) X2=(¬b-(b↑2-4*a*c) ↑(1/2))/(2*a)
PREFIJA
=X1/+¬b↑-↑2**4ac/12*2a
POSTFIJA
X1b¬b2↑4a*c*-12/↑+2a*/=
Syntax definition
If(expr) instr else instr
G={N,T,S,P}
Instr if ( expr) instr else instr
Expr expr + factor
| expr – term
| term
Term term * factor | term / factor | factor
Factordigit | (expr)
Digit 0|1|2|3|4|5|6|7|8|9
Ejercicio:
9-5*(2↑3)
9-(5*2) ↑3
(9-5)*(2+3)
Stmt expr
| if (expr) stmt
A grammar for some sentences in C and Java
| for (optexpr ; optexpr ; optexpr) stmt
| other
Optexpr expr | Ꜫ
Sentencia a analizar
For ( ; expr; expr) other
void instr(){
Switch(preanálisis){
Case expr:
Match(expr); match(‘;’);
break;
Case if:
Match(if); match(‘(‘); match(expr); match(‘)’); instr();
Case for:
Match(for); match(‘(‘); expropc(); match(‘;’);
expropc(); match(‘;’); expropc(); match(‘)’); instr(); break;
Case other:
Match(other); break;
Default:
Report(“Syntax error”);
}
}
Void expropc(){
If(preanálisis==expr)match(expr);
}
Void match(terminal t){
If(preanálisis==t) preanálisis = nextTerminal;
Else report(“Syntax error”);
}
RESPUESTAS DEL EXAMEN 1ER DEPARTAMENTAL
a) P=>QVRVS
PREFIJA =>PVVQRS
POSTFIJA PQRVSV=>
b) Qʌ¬(R<=>PVQ)
PREFIJA ʌQ¬<=>RVPQ
POSTFIJA QRPQV<=>¬ʌ
c) ¬¬PVQʌRV¬Q
PREFIJA VV¬¬PʌQR¬Q
POSTFIJA P¬¬QRʌVQ¬V
2do Departamental
Figura 3.34
/ER/= (a U b)
/ER/= (a U b)abb
Tabla de transiciones:
Q a b Ꜫ-Cerraddura Función de composición
0 φ φ {0,1,2,4,7} Δ(Ꜫ-Cerradura(0),a)={3,8}
1 φ φ {1,2,4} Δ(Ꜫ-Cerradura(0),b)={5}
2 {3} φ {2} Ꜫ-Cerradura(3) U Ꜫ-Cerradura(8) = {1,2,3,4,5,6,7,8}
3 φ φ {3,6,7,1,2,4} ∑ =
4 φ {5} {4} {a,b}
5 φ φ {5,6,7,1,2,4} Ꜫ-
6 φ φ {6,7,1,2,4}
7 {8} φ {7}
8 φ {9} {8}
9 φ {10} {9}
10 φ φ {10}
Cerradura(Δ(Ꜫ-Cerradura(qi),a))
Ꜫ-Cerradura(Δ(Ꜫ-Cerradura(qi),b))
DE FORMA GENERAL
OPERADORES RELACIONALES
Diagrama de transiciones hipotético para identificadores (id) y palabras clave
Cadena utilizando la gramática:
Declarate foo real fixed real
floating
S(E) = { ) , $ }
S(E’) = { ) , $ }
S(T) = { + , - , $ , ) } Por lo tanto:
S(T’) = { + , - , $ , ) } S(E’) = S(E) = { ) , $ }
S(F) = {+ , - , * , / , $ , ) } S(T’) = S(T) = { + , - , $ , ) }
S(F) = {+ , - , * , / , $ , ) }
Entrada: cba
Gramáticas LL(1)
Left to Right
Left most derivation
No terminal Id + * ( ) $
ETE’ E ETE ETE’
E’+TE’E | Ꜫ E’
T TFT’
E’+TE’
TFT’
E’ Ꜫ E’ Ꜫ
TFT’ T’
F Fid
T’ Ꜫ T’*FT’
F( E )
T’ Ꜫ T’ Ꜫ
T’*FT’ | Ꜫ
F ( E ) | id
Cadena entrada id + id * id
TE’
FT’E’
IdT’E’
id ꜪE’
id Ꜫ+TE’
id Ꜫ+FT’E’
id Ꜫ+idT’E’
id Ꜫ+id*FT’E’
id Ꜫ+id*idT’E’
id Ꜫ+id*id ꜪE’
id Ꜫ+id*id Ꜫ Ꜫ
EJERCICIOS DE PRÁCTICA
GRAMÁTICA LL(1)
SE
SE APLICANDO
ETE’
EE+T | T AAα |β
E’+TE | Ꜫ
↓
TT*F | F TFT’
A Βr
Fid | ( E ) T’*FT’ | Ꜫ
R αR | Ꜫ
F id | ( E )
PRIMERO ( E ) ={( , id }
PRIMERO ( E' ) ={+ , Ꜫ }
PRIMERO ( T )={¿
PRIMERO ( T ' )={∗, Ꜫ }
PRIMERO ( F )={¿
SIGUIENTE ( A ) → $
A → αB
° SIGUIENTE ( B ) → SIGUIENTE ( A )
A → αBᵦ
° SIGUIENTE ( B ) → PRIMERO ( ᵦ ) ∄ ε
SIGUIENTE ( E )={), $ }
SIGUIENTE ( E' )={) , $ }
SIGUIENTE ( T )= {+ , ) , $ }
SIGUIENTE ( T ' )= {+ , ) , $ }
SIGUIENTE ( F )= {¿ ,+ , ) , $ }
NT / T + * ( ) id $
E TE’ TE’
E’ +TE’ Ꜫ Ꜫ
T FT’ FT’
T’ Ꜫ FT’ Ꜫ Ꜫ
F (E) id
Determinamos los estados que conformarán al autómata aplicando las funciones CERRADURA e IR_A
I 0=CERRADURA ( { P→ . S } )= { P → . S , S → . id X , S → .id Y end }
I 1=ir a (I 0 , S)=CERRADURA ( { P → S . } )={ P → S . }
I 2=ir a (I 0 , id )=CERRADURA ( { S → id . X , S → id .Y end } ) ={ S → id . X , S → id .Y end , X →. otro , X → . ,Y → .begin X end
I3
I0 I2 otro
id Xotro.
P.S Sid.X
S.id X Sid. Y end
S.id Y end X.otro
begin otro
X.
S Y.begin X end
Y.
I7
Ybegin . X end
I1 X X.otro
Y
X.
APS.
I5 X
Sid Y. end I8
I4 Y begin X . end
Sid X. end
end
Autómata reducido para su mejor comprensión