Escolar Documentos
Profissional Documentos
Cultura Documentos
Hipottica a Pilha
MEPA
Mquina de Execuo para Pascal e
sua linguagem de montagem
MEPA
composta de 3 Regies
No tem HEAP, pois o PS no permite variveis dinmicas
Cdigo ...
2
1
Pilha 0
+ Display: D(b)
Dados (Vetor dos
Estticos Registradores
de Base que
Regio de programa: Regio da Pilha de apontam para
P(i) Dados: M(s) M)
Gerao de Cdigo
Uma vez que o programa da MEPA est carregado na regio P, e os
registradores tm seus valores iniciais, o funcionamento da mquina
muito simples:
Linguagem
LF LO Linguagem
C
fonte de alto
Objeto
nvel
LD
1. Avaliao de expresses
2. Comando de atribuio
3. Comandos Iterativos e Condicionais
4. Procedimentos pr-definidos de E/S
5. Programas sem procedimentos
6. Procedimentos sem parmetros
? ? s v2 v2
s s
? v1 v1 v
s ? m ? m ? m ? m
M M M M
Ex1: a + (b div 9 -3) * c
(operadores com prioridade diferente)
PORQUE????
rvore de Derivao para a expresso
a + (b div 9 -3) * c
E
E + T
T T * F
F ( E ) c
a E - T
T div F F
F 9 3
E -> E + T| E T | T b
T -> T div F | T * F | F
F -> (E) | not F | ID | NRO
Programa-objeto da traduo
CRCT 1
CRVL A (endereo de a na pilha M, obtido da TS)
SUBT
CRVL B
SOMA
2. Comando de atribuio
ARMZ n
M[n] := M[s] alterado
s := s - 1
Ex3: a := a + b * c
CRVL 100
CRVL 102
CRVL 99
MULT
SOMA
ARMZ 100
3. Comandos Iterativos e Condicionais
1. DSVS p
Usados sem
2. DSVF p alterao
3. NADA
CRVL Q
DSVF L1
CRCT 1
ARMZ A
DSVS L2
L1 NADA
CRCT 2
ARMZ A
L2 NADA
Ex 5: if a>b then q := p and q
else if a <2 *b then p := true
else q := false
Programa-objeto da traduo
L7 NADA MULT
CRVL S SOMA
CRVL N ARMZ S
CMEG DSVS L7
DSVF L8 L8 NADA
CRVL S
CRCT 3
CRVL S
Exerccio: Fazer a traduo para o comando FOR
e o exerccio
29. <comando repetitivo 2> ::= for <identificador> := <expresso>
(to|downto) <expresso> do <comando>
fatorial 100
i 101
n 102
For VC := E1 to E2 do C For VC := E1 downto E2 do C
...} traduo de E1 ...} traduo de E1
ARMZ VC ARMZ VC
L1 NADA L1 NADA
CRVL VC CRVL VC
...} traduo de E2 ...} traduo de E2
CMEG { VC > CF: FIM } CMAG { VC < CF: FIM }
DSVF FIM DSVF FIM
...} traduo de C ...} traduo de C
CRVL VC CRVL VC
CRCT 1 INC CRCT 1 DEC
SOMA SUBT
ARMZ VC ARMZ VC
DSVS L1 DSVS L1
FIM NADA FIM NADA
fatorial 100
i 101
n 102
CRCT 2
ARMZ 101
CRVL 101
L1 NADA
CRCT 1 INC
CRVL 101 SOMA
CRVL 102 ARMZ 101
CMEG { VC > CF: FIM } DSVS L1
DSVF FIM FIM NADA
CRVL 100
CRVL 101
MULT
ARMZ 100
Exerccio: Fazer a traduo para o comando
REPEAT e o exerccio
30. <comando repetitivo 3> ::= repeat <comando> { ; <comando>} until <expresso>
x 101
Repeat C {; C} Until E
L1 NADA
... } traduo de C1...Cn
... } traduo de E
L1 NADA
CRVL 101
CRCT 1
SOMA
ARMZ 101
CRVL 101
CRCT 10
CMIG
DSVF L1
L2 NADA
Exerccio casa: Fazer a traduo para o comando
CASE com valores constante nicos e depois a
mais geral (Drago Roxo, ingls, pg. 418)
26. <comando condicional 2> ::=
case <expresso> of <elemento do case> { ; <elemento do case> } end
27.<elemento do case> ::= <constante> : <comando>
Case idade of
V1: write(X); 1. Traduza E e guarde em t
V2: write(Y); 2. Desvie para o rtulo de
V3: write(Z); TESTE (no final da traduo
V4: write(W) de Cis) que implementa uma
end tabela que pareia Vi com Ci
e DSVS em cada par para o
rtulo do Ci
Restries Semnticas: 3. Traduza cada Ci (tem um
1. <expresso> deve ser do tipo ordinal rtulo para cada um) e Gere
2. As constantes devem ser nicas (TABELA no um DSVS FIM aps cada um
compilador para guardar valor e rtulo ) 4. O rtulo FIM est no final da
3. O tipo das constantes deve ser tabela
compatvel com o tipo da expresso
4. Procedimentos pr-definidos de E/S
Usados sem
alterao
Traduo
CRVL X
LEIT IMPR
ARMZ A CRVL X
LEIT CRVL Y
ARMZ B MULT
IMPR
5. Programas sem procedimentos
1. PARA
( a ltima instruo de um programa)
2. INPP
s := -1 alterado
3. AMEN n
(usado para reservar posies de memria para cada linha de
declarao de variveis)
O compilador pode calcular facilmente os endereos das
variveis v1,v2,...vn que devero ser 0,1,...n-1 (quando
esta a primeira declarao)
Usados sem
alterao
Ex 10
M[s] := M[m+k]
alterados
... z2
z3
...
z1
z1 z
z2
z1
... ...
y
y
...
z2 z z1
x z3
x z
y
z4 z
y
Os smbolos z1,z2,z3 e z4
x y
denotam os valores das
encarnaes sucessivas de z x
x
Traduo do programa
INPP
AMEN 0,2 CRCT 1
DSVS L1 ARMZ 1
L2 NADA L4 NADA
AMEN 2,1 CRVL 1
CRVL 0 CRVL 2
ARMZ 2 MULT
CRVL 0
ARMZ 1
CRCT 1
SUBT DMEN 2,1
ARMZ 0 RTPR
Programa
CRVL 2 L1 NADA principal
CRCT 1 LEIT
CMMA ARMZ 0
DSVF L3 CHPR L2
CHPR L2 CRVL 0
DSVS L4 IMPR
L3 NADA
CRVL 1
IMPR
DMEN 0,2
Note o uso de DSVS L1 para pular o cdigo do
procedimento p ao iniciar-se a execuo PARA
Casos de declarao de mais de 1 procedimento,
com suas variveis locais
b c
b
2
1 c inacessvel
c
2
0
b 1
b
0
a
a
M M
8. Atacando o problema dos endereos fixos
CRVL m,n
ARMZ m,n
AMEN n
DMEN n
Usados como mostra a folha da MEPA, A
INPP
CHPR p (igual verso 6)
ENPR k Usado como mostra a folha da MEPA B; primeira
instruo de um proc, k o nvel; salva o reg de base
RTPR k
D[k] := M[s]
Restaura o reg de base
i := M[s-1]
s := s - 2
8. Agora com parmetros passados por valor e ref
CREN usada para empilhar o valor do par real passado por ref.