gilberto - federal university of rio de janeiro · obtenÇÃo do grau de mestre em ciÊncias...
TRANSCRIPT
L í g i a B a r r o s C a Ú l a
DE P~S-GRADUAÇÃO DE ENGENHARIA DA UNIVE RS IDBDE FEDERAL DO
R I O DE J A N E I R O COMO PARTE DOS R E Q U I S I T O S NECESSARIOS PARA A
OBTENÇÃO DO GRAU DE MESTRE EM CIÊNCIAS ( M . S c . ) .
A p r o v a d a por:
E s t e v a m G i l b e r t o de Simone \
N e l s o n M a c u l a n F'ilh'Ó
i/ S u e l i M e n d e s dos Santos
R I O DE J A N E I R O , R J - B R A S I L
NOVEMBRO DE 1 9 7 8
C A ~ L A , ~f GIA BARROS
PLMIX - Um M o d e l o de L i n g u a g e m de ~ é d i o N í v e l
e s eu c o m p i l a d o r IRio de ~ a n e i r o l 1 9 7 8
1 .89 , I X 2 9 , 7 cm (COPPE-UFRJ, M.Sc, E n g e -
nhar ia de S i s t e m a s e ~omputação, 1 9 7 8 ) .
T e s e - U n i v . Fed. R i o de Janeiro. Fac. E n g e -
nharia.
1. Um M o d e l o de L i n g u a g e m de ~ é d i o ~ i v e l e
seu C o m p i l a d o s . I .COPEE/UFRJ . 11. P L M i X - Um M o d e -
10 de L i n g u a g e m de ~ é d i o N í v e l e seu C o m p i l a d o r .
A Meus Pais,
M i n h a AVÕ A r l i n d a ,
e Eduardo.
iii
A G R A D E C I M E N T O S
Ao Professor Estevam Gi lbe r to de Simone pe -
l a s i d é i a s e pac ien te o r i en tação minis t rada .
Aos Professores ~ o s é Lucas ~ o u r ã o Range1
Netto e Jano Moreira de Souza pe las va l iosas suges tões .
Ao Professor Gerhard Schwarz e 5 colega
L i l i a n Markenzon, pe lo i n t e r e s s e e colaboração.
Aos colegas do Programa de Engenharia
Sistemas e computação pelo apoio que receb i .
A meus amigos, em e s p e c i a l meu marido,
10 incen t ivo .
À COPPE, CAPES e FINEP pelos recursos
recidos durante a execução d e s t e t r aba lho .
de
PS
ofe -
P a r a p e r m i t i r e s p e c i f i c a r os c r i t é r i o s de
p r o j e t o pa ra l inguagens de programação de médio n í v e l , f o i
c r i ada a linguagem PLMIX p a r a o computador h i p o t é t i c o M I X ,
def in ido por D.E. Knuth.
apresentada uma conceituação de l ingua -
gens de médio n í v e l e propost0.s c r i t é r i o s que j u s t i f i c a m as
decisões tomadas na elaboração da s i n t a x e , sobre o s t i p o s de
v a r i á v e i s , ações semânticas e geração de código.
Paralelamente são apresentadas a e s t r u t u -
r a do compilador para a linguagem-usando na a n á l i s e s i n t á t i -
ca o metodo
mas r o t i n a s
de matr iz de t r ans ição - e a descr ição de a l g u -
semânticas.
Finalmente é f e i t a uma aval iação da l i n -
guagem comparando-se algori tmos e s c r i t o s em MIXAL , por Knutb,
com as traduções para MIXAL dos mesmos algoritmos e s c r i t o s em
PLMIX, e julgando a s d i fe renças encontradas no código.
A B S T R A C T - - - - - - - -
A language PLMIX f o r t h e h y p o t h e t i c a l com -
p u t e r MIX c r e a t e d by D.E. Knuth, was def ined j u s t on ly a s a
means t o s p e c i f y t h e c r i t e r i a f o r designing medium l e v e 1
prograrnrning 1 anguages . Besides p r e s e n t i n g a d e f i n i t i o n o f medium
le*el programming languagea w e propose c r i t e r i a t h a t j u s t i f y
t h e s p e c i f i c form taken by t h e syntax of PLMiX, i t s v a r i a b l e
types , semant ic a c t i o n s and code genera t ion .
W e p r e s e n t a l s o the s t r u c t u r e o f the compi -
ler and t h e d e s c r i p t i o n o f some semant ic rou t ines . The compiler
uses t h e t r a n s i t i o n ma t r ix method f o r t h e pa r s ing .
F ina ly t o e v a l u a t e the performance of PLMIX
w e compare t h e length o f t h e code genera ted by MIXAL w i t h t h e
code genera ted by PLMIX f o r exac t ly t h e same a lgor i thms.
I N D I C E ......
................................. C A P ~ TULO I . ~ n t r o d u ç ã o
.......................... C A P ~ T U L O I1 . Descr ição do M I X
................................ 11.1. A Máquina
11.1.1. Memória ........................... 1 1 . 1 . 2 . Reg i s t ro s ......................... 11.1.3. Ind i cadores ....................... 11.1.4. D i s p o s i t i v o s d e E n t r a d a e s a í d a ...
..................... 1 1 . 2 . Linguagem d e ~ á q u i n a
11.2.1. Formato da 1ns t r u ç ã o .............. 11.2.2. Notação U t i l i z a d a ................. 11.2.3. ~ n s t r u ç & s ........................
11.2.3.1. 1nst ruçÕes de Carga ..... 11.2.3.2. 1nst ruçÕes de Armazenamen -
...................... t o
. I1 -2.3.3. 1nstruçÕes ~ r i t m é t i c a s . . . 1 1 . 2 . 3.4 1ns t r u ç õ e s Imediatas ....
11.2.3.5. 1nst ruçÕes de comparação . I I . 2 .3. 6 . 1ns t r u ç õ e s de De s v i o .... 11.2.3.7. 1nst ruçÕes de Ent rada e
................... s a í d a
11.2.3.8. 1nst ruçÕes de converção . . 11.2.3.9. Outras 1nstruçÕes .......
.............. CAPÍTULO 111 - Decrição d a Linguagem PLMIX
.................. 111.1. E s t r u t u r a da Linguagem
.................. 111.2. Notação pa ra a S in t axe
v i i
111.3. ~5pecif icação da L i n g u a g e m ................ 2 6
C A P ~ T U L O I V . E s t r u t u r a do C o m p i l a d o r ..................... 8 7
I V . 1 . A s p e c t o s G e r a i s ............................ 8 7
.......................... I V . 2 . A n a l i s a d o r ~ é x i c o 88
I V . 3 . A n a l i s a d o r s in tá t i co ....................... 9 5
I V . 3 . 1 . ~ é t o d o de c o m p i l a ç ã o ................ 9 5
I V . 3 . 2 . ~ r a m á t i c a s de M a t r i z de ~ r a n s i ç ã o ... 9 6
IV . 3 . 2 .i.. ~ e f i n i ç ã o ................. 9 6
I V . 3 . 3 . D e t e r m i n a ç ã o da M a t r i z de ~ r a n s i ç ã o .. 9 9
I V . 4 . C ó d i g o O b j e t o e A l g u m a s R o t i n a s semânticas . . 9 9
I V . 4 . 1 . E s t r u t u r a dos D a d o s no C o m p i l a d o r ... 1 0 0
V I . 4 . 2 . A l g o r i t m o do C o m p i l a d o r ............. 1 0 9
I V . 4 .2 . 1. A l g o r i t m o de " P a r s i n g " .... 1 1 0
I V . 4 . 2 . 2 . E s q u e m a do P r o g r a m a ....... 1 1 0
I V . 4 . 2 . 3 . A l g u m a s R o t i n a s s e m â n t i c a s . 113
....................... I V . 5 . T r a t a m e n t e de E r r o s 1 3 0
CAP~TULO V - vali ação da L i n g u a g e m ....................... 1 3 5
............................ V . l . E x e m p l o N ú m e r o 1 135
........................... V . 1 . 1 . P r o g r a m a T 1 3 7
V . 1 . 2 . P r o g r a m a e m PLMiX para T ............. 1 3 9
V:l .3. P r o g r a m a e m PLMIX E s t r u t u r a n d o o A l g o -
................................ ritmo 1 4 1
............................ V.2 . E x e m p l o ~ Ú m e r o 2 1 4 3
........................... V . 2 . 1 . P r o g r a m a S 1 4 3
V . 2 . 2 . P r o g r a m a e m PLMIX para S ............. 1 4 4
V . 2 . 3 . P r o g r a m a e m PLMIX E s t r u t u r a n d o o A l g o -
................................ r i t m o 1 4 7
............................ V . 3 . E x e m p l o N ú m e r o 3 1 4 9
v i i i
V . 3.1 . P r o g r a m a B .......................... 1 4 9
V . 3 . 2 . P r o g r a m a e m PLMiX para B ............ 158
V . 3.3. P r o g r a m a e m PLMIX E s t r u t u r a n d o o A l g o -
r i t m o ............................... 153
V . 4 . E x e m p l o N ú m e r o 4 ........................... 155
V.4 . 1. P r o g r a m a A .......................... 1 5 6
V . 4 . 2 . P r o g r a m a e m P L M I X para A ............ 158
V . 4 . 3 . p r o g r a m a e m P L M I X E s t r u t u r a n d o o Algo -
r i t m o ............................... 1 6 2
CAP~TULO V i . ~ o n c l u s õ e s ................................. 1 6 7
............................................. BIBLIOGRAFIA 18 7
C A P Í T U L O I - - - - - - e - -
PFO j e t o s de novas 1 inguagens de programação
surgem com a evolução da u t i l i z a ç ã o do computador t a n t o no as -
pecto q u a n t i t a t i v o como q u a l i t a t i v o . ~ l é m d i s so , h á uma v a r i e -
dade de c a r a c t e r í s t i c a s de a r q u i t e t u r a que fazem com que c e r -
t a s l inguagens sejam adequadas ou mais faci lmente traduz&das
em determinadas máquinas, enquanto que p a r a o u t r a s a r q u i t e t u -
r a s s e r i a dese j ável uma linguagem com e s t r u t u r a d i f e r e n t e .
Para o usuário f i n a l as linguagens tendem
a e v o l u i r p a r a o mais a l t o n í v e l poss íve l , vo l t adas pa ra as - a
p l icações desejadas e o mais independentes da máquina.
A programação de "software" bás ico e de s u -
por te t e m s i d o normalmente f e i t a com linguagem dependente da
máquina.
Durante muito tempo a linguagem dependente
da máquina u t i l i z a d a e r a a linguagem montada. Ela permite ao
programador uma gerência sobre memória e r e g i s t r o s e código - e
f i c i e n t e . porém a s i n t a x e usual faz com que se produzam t e - x
t o s longos, de d i f i c i l l e i t u r a e acompanhamento da l ó g i c a e
depuração demorada.
A linguagem de a l t o n í v e l impede este geren -
ciamento pois o "software" necessár io t a n t o para compilação co - mo para execução dispõe da memória e dos r e g i s t r o s de maneira
v a r i á v e l , imprevis íve l o u kncontrolável p a r a o programador.
~ l é m d i s s o e s t a s l inguagens não fornecem, e m g e r a l , mecanismos
pa ra que o programador a tue diretamente sobre a máquina, p o r
exemplo, impedindo ou tornando complexa a introdução de código
de linguagem montada no t e x t o do programa.
Com os concei tos de programação e s t r u t u r a d a
e a de f in ição dos t i p o s bás icos de e s t r u t u r a s necessá r i a s e
s u f i c i e n t e s p a r a s e e s c r e v e r programas es t ru turados (Wulf [r1] )
surgiram p r o j e t o s de l inguagens, que visam p e r m i t i r a c r i a ç ã o
des tas e s t r u t u r a s b á s i c a s de modo simples s e m perderem a s c a -
r a c t e r i s k i c a s da linguagem montada em gerência de memória e r e - g i s t r o s e e f i c i ê n c i a de código gerado.
Chamaremos e s t a c l a s s e de linguagens de m é -
d i o n i v e l apresentando a s segu in tes c a r a c t e r i s ti cas :
- permitem ao programador a gerência de me -
mória e r e g i s t r o s , t a l como as linguagens montadas;
- deverão procurar englobar todo o po tenc i -
a 1 das ins t ruções de msquina, s e j a em comandos es t ru tu rados , funções ou in t rodução d i r e t a do código e m linguagem montada;
- s u a s i n t a x e é do t i p o da s i n t a x e das l i n -
guagens de a l t o n í v e l , mais difundidas, com blocos , procedimen -
t o s , expressões, ins t ruções condicionaas , i t e r a t i v a s , de cha -
veamento e declaração de t i p o s ;
- os t i p o s permitidos são o s p r e v i s t o s pe lo
hardware ou es t ru tu rados com simplicidade (sem necessidade de
d e s c r i t o r e s ) a p a r t i r dos t i p o s simples;
- o código gerado deve ser o mais e f i c i e n -
te e o m a i s próximo p o s s i v e l da linguagem montada;
- a tradução dos comandos tem uma sequên - tia de códigos f i x a e deverá s e r apresentada ao programador.
Cumpre r e s s a l t a r que a terminologia l ingua - gem de médio n í v e l não é restri ta à l inguagens com a s c a r a c t e
r í s t i c a s acima. E la é usada p a r a l inguagens cu ja u t i l i z a ç ã o da
memória e r e g i s t r o s é f e i t a sem conhecimento do programador , com a t radução v a r i á v e l dos mmandos, e t c . En t re tan to a s ca - r a c t e r i s t i c a s da linguagem não permitem que sejam cons idera
das de a l t o n í v e l .
O o b j e t i v o des te t r aba lho é e s t a b e l e c e r
c r i t é r i o s para o desenvolvimento de p r o j e t o s de l inguagens de
médio n í v e l , levando-se em consideração a s no tas sobre p r o j e
tos de linguagens e s c r i t a s por Hoare L2] . Em vez de se f a z e r uma enumeração desses
c r i t é r i o s f o i p ro je tada uma linguagem onde a apresentação das
i n s t ruções , dos t i p o s pe rmi t i dos , a s justificativas das dec i
sões tomadas e as e x p l i cações complementares caracter izam e s -
t e s c r i t é r i o s .
A escolha da máquina r e c a i u sobre o MIX
(Knuth E3] ) por possu i r um jogo de ins t ruções que permitem
um p r o j e t o amplo, por s e r u t i l i z a d o em cursos de graduação e
pós-graduação em vár i a s i n s t i t u i ç õ e s de ensino e por e x i s t i r
um simulador desenvolvido por Markenzon r] e implementado no
computador MITRA 1 5 do ~ a b o r a t ó r i o de ~utomação de Sistemas e
simulação da COPPE-UFRJ, como parte do projeto de um ~ a b o r a t ó -
r i o de Ensino de computação.
O M I X é um computador h i p o t é t i c o c r i a d o com
f i n s d i d á t i c o s por Donald E . Knuth C3] e apresentado no l i v r o
"Fundamental Algorithms" no c a p i t u l o I , seções 1.3.1 e 1 . 3 . 2 . Devido a - f ina l idade proposta o p r o j e t o apre -
s e n t a uma e s t r u t u r a e uma linguagem simples e de f á c i l aprendi -
zagem e no en tan to poderosa o s u f i c i e n t e para p e r m i t i r que s e -
jam e s c r i t o s pequenos programas para a maioria dos algoritmos
propostos por Knuth r3" " 5] .
A memória M I X é composta de 4000 pa lavras ,
cada uma com 5 bytes mais s i n a l "+" Ou I ' - "
O by te é a unidade b á s i c a de informação s e n -
do capaz de aamazenar no mínimo 6 4 va lores e no máximo 100 va -
l o r e s d i s t i n t o s . E s t a var iaçgo é decorrente da p o s s i b i l i d a d e
do M I X poder ser b i n á r i o ou decimal. É importante r e s s a l t a r que
o programador deve escrever programas que possam s e r executa - dos emqualquer implementação, i s t o é, assumindo que o byte
não pode representar mais que 6 4 valores.
Na implementação do simulador exis tente no
MITRA 15 do ~ a b o r a t õ r i o de Sistemas da COPPE-UFRJ, f e i t a por
Markenzon C6] assumiu-se o máximo de 6 4 valores e assim o by
te é composto de 6 b i t s .
1 1 . 1 . 2 . - REGISTROS
O M I X possui 9 regis t ros sendo que dois
com cinco bytes mais s i n a l ( regis t ro A e r eg i s t ro X) e s e t e
com dois bytes mais s i n a l ( regis t ros 11, 12, 13, 1 4 , 15, I 6 e
reg is t ro J).
- Registro A ( r A ) -
G o reg is t ro acumulador no qual são efe tua - das operações ari tméticas, de deslocamento e conversão.
- Registro x ( r X ) -
~ x t e n s ã o 5 d i r e i t a do acumulador. E usado
junto com o reg i s t ro A para formar dez bytes necessários 2s
operações de multiplicação, divisão e conversão, ou para arma -
zenar informações produzidas por deslocamento 2 d i r e i t a do re - gis t ro A.
- Registros I r 2 r 1 4 r e
r I 6 ) -
são regis t ros de índice usados geralmente
como contadores e para modificar endereços de acesso 5 mem6 -
ri a.
- - Registro J ( xJ)
contém o endereço da instrução seguinte a
uma instrução de desvio e é usado basicamente para retorno de
subro t ina .
11.1.3. - INDICADORES
são dois os indicadores:
- b i t de overflow (OVF)
Modificado pelas instruções ari tméticas ,
" jump on overf low" (JOV) e " jump on no overflow" (JNOV) . - indicador de comparação
4
Assume valores menor; igual ou maior e e
controlado pelas operações de comparação (CMPA, CMPX e CMPi) .
1 1 . 1 . 4 . DISPOSITIVOS DE ENTRADA E SAÍDA
O s d i s p o s i t i v o s dependem dos e x i s t e n t e s na
máquina onde será f e i t a a simulação. Para a implementação f e i -
t a por Markenzon C6] temos a s seguin tes e spec i f icações . - Disco M I X
A s e spec i f i cações do d i sco são fornecidas
por Knuth na página $62 do l i v r o "Sor t ing and Searching" C5] . Sua capacidade de armazenarnento é de v i n t e
milhões de c a r a c t e r e s , d i s t r i b u í d a s em duzeritos c i l i n d r o s de
v i n t e t r i l h a s , cada uma com 5.000 c a r a c t e r e s .
A s informações t ransmi t idas em operações
de e n t r a d a e s a i d a s ã o armazenadas em blocos de cem pa lavras .
A r e f e r ê n c i a a um p a r t i c u l a r b loco é especi f icada pe lo conte6 -
do dos dois by tes menos s i g n i f i c a t i v o s de rX.
- F i t a M I X
A s c a r a c t e r í s t i c a s da unidade de f i t a s e
encontram na página 320 do l i v r o "Sor t ing and Searching" r]. A unidade lê e escreve 800 c a r a c t e r e s por
polegada de f i t a , com velocidade de 75 polegadas por segundo.
I s t o s i g n i f i c a que um c a r a t e r é l i d o ou e s c r i t o cada 1/60 m s .
Cada c a r r e t e l contém 2.400 pés de f i t a .
A s informações são armazenadas por blocos
na f i t a , sendo que cada ins t rução de l e i t u r a ou impressão - a
c a r r e t a a transmissão de um Único bloco. Cada bloco tem 100
palavras e o intervalo entre os blocos é de 480 caracteres.
- Teletipo
Definida conforme as caracter is ti cas do mo -
de10 ASR33 C7] que apresenta velocidade de impressão de 1 0 ca -
racteres por segundo. Note-se que cada reg is t ro possui 70 ca -
racteres , equivalente a 1 4 palavras MiX.
A transmissão é f e i t a caracter a caracter ,
onde cada byte representa um caracter .
- - Leitora de cartões
Definida conforme as especificações de mo -
de10 LC300 r7] que 16 cartões standard de 80 colunas (16 pala -
vras M I X ) à velocidade de 300 cartões por minuto.
A transmissão é f e i t a caracter a caracter.
1 1 . 2 . - LINGUAGEM DE MAQUINA
II .2 . I. FORMATO DA INS TRUCÃO
A maioria das instruções M i X permite ao
programador um acesso dire to à partes (bytes) da palavra e
para permitir i d e n t i f i c a r os by.&es a serem acessados e l e s são
numerados da segu in te forma:
A s palavras que contém ins t ruções s ã o codi -
f i cadas segundo o s e g u i n t e formato:
byte . by te
onde :
by te -1
- + - AA : endereço.
A i n s t r u ç ã o MIX u t i l i z a endereçamento d i r e -
t o . O s i n a l da pa lavra per tence ao endereço.
- I : espec i f i cação de í n d i c e
I? usado pa ra a l t e r a r o v a l o r do endereço . Se I = O , f AA é usado sem modificação. O s ou t ros va lo res pe r -
mitidos variam de 1 a 6 correspondendo aos r e g i s t r o s de í n d i -
c e e x i s t e n t e s na máquina. Neste caso o v a l o r do r e g i s t r o de
í n d i c e indicado é somado algebricamente ao v a l o r de f AA sen -
do o resul tado usado como endereço. Es te processo de indexa -
ção ocorre para. qualquer ins t rução .
- F : modificação do código de ins t rução
E m ge ra l F r ep resen ta uma espec i f i cação de
campo (L :R) , onde L é o número do byte mais à esquerda e R
do byte mais à d i r e i t a . Para p e r m i t i r a representação d e s t a
especi f icação F 6 calculado a t r a v é s da fórmula 8*L + R.
Algumas ins t ruções u t i l i z a m o campo F com
o u t r o s i g n i f i c a d o t a l como número do d i s p o s i t i v o de e n t r a d a e
s a í d a , modificador do código de desvio incondic ional , tornan -
do-o condicional , t i p o do deslocamento a s e r efetuado, e t c .
- C : código de operação
Na descr ição da linguagem P L M I X algumas ve -
zes se rão re fe renc iadas a s i n s t r u ç õ e s de máquina corresponden -
tes 5s ins t ruções PLMIX. A representação da ins t rução será
f e i t a da forma
OP + - AA, I (F)
onde OP é o mneunÔnico do código de ins t rução ( c ) . Admite-se
opcionalmente a s segu in tes a l t e r a ç õ e s :
- s e I = 0 , pode ser omitido
- s e F é a espec i f i cação padrão da i n s k r u - ção, pode ser omitido.
1 1 . 2 . 2 . NOTAÇÃO - UTILIZADA
r R : reg is t ros quaisquer
rAX: regis t ros r A e r X formando 1 0 bytes
i : número de 1 a 6
M : endereço resul tante após indexação
C (M) : conteúdo da posição de memória M
campo: especificação de bytes de uma palavra
V : valor de um campo específico de C(M)
PC : endereço da próxima instrução
A -+ B: A recebe o valor de B.
A tabela com os códigos e as especificações
padrão de F está no ~ p ê n d i c e número 1.
11.2.3.1. - INSTRUÇ~ES DE CARGA
"load r R " : LDA, LDX, L D i
ação : r R -+ C (M)
"load r R negative": LDAN, LDXN, L D i N
ação : r R +- - C ( M )
Em todas a s operações onde u m campo p a r c i a l
é u t i l i z a d o o s i n a l é usado s e e l e f az p a r t e do campo (espec i -
f i cação (O:k), O - < k - < 51, caso c o n t r á r i o assume-se s i n a l +. O
campo é deslocado p a r a a d i r e i t a do r e g i s t r o onde será car rega -
do.
N a a t r i b u i ç ã o aos r e g i s t r o s I i como este só
t e m 2 bytes , se o campo englobar mais de dois bytes , o s ou t ros
deverão ser necessariamente igua i s a zero. Caso c o n t r á r i o a
ins t rução será considerada indef in ida .
11.2.3.2. - INSTRUÇÕES DE ARMAZENAMENTO
" s t o r e r R " : STA, STX, S T i , STJ
ação: M + r R
" s t o r e zero" : STZ
ação: M + O
Nas ins t ruções de armazenamento o número de
bytes do campo dese jado 6 tomado do lado d i r e i t o do r e g i s t r o e
inser i (do n a posição espec i f icada pe lo campo.
O s r e g i s t r o s rIi s e comportam como s e t i v e s -
sem 5 bytes m a i s s i n a l , porém com os by tes 1, 2 e 3 i g u a i s a
zero. Para rJ o s i n a l é sempre p o s i t i v o e só são a l t e r a d o s o s
by tes 1 e 2 , p o i s e l e s representam um endereço.
ADD (adição)
ação: r A -+ r A + V
Se o resultado prec isar de mais de 5 bytes
para sua representação, OVF é l igado e r A armazena os cinco
bytes à d i r e i t a do resultado e seu s i n a l .
sUB (subtração)
ação: r A -+ r A - V
poderá ocorrer transbordo e s e r á t ra tado
como na adição.
MUL (mul t i p l i caç ão)
ação: r A X -+ r A * V
O s s ina i s de r A e r X recebem o s i n a l algé -
brico do produto, i s t o é, I'+" s e r A e r.V são do mesmo s i n a l e
11 11 caso contrário.
D I V (divisão)
ação: r A -+ r A / V ; r X -+ ( r A X ) MOD V
O s i n a l de r A X é o de r A . Se V = O ou o re -
sultado é maior que 5 bytes r A e r X ficam com valores indef i -
nidos e OVF 6 l igado. Caso contrário r A recebe o quociente
e o s i n a l algébrico da operação, r X é s u b s t i t u í d o pelo resto
e o s i n a l de A ( de antes da o p e r a ç ã o ) .
" e n t e r r R " : ENTA, ENTX, E N T i
ação: r R -+ M
Se M = O o s i n a l da instrução é carregado.
"enter negative r R " : ENNA, ENNX, E N N i
ação: r R -+ - M
" i n c r e m e n t r R " : INCA, INCX, I N C i
ação: r R -+ r R + M
" d e c r e m e n t r R " : DECA, DECX, D E C i
ação: r R -+ r R - M
" c o m p a r e r R " : CMPA, CMPX, CMPi
ação: comparar um c a m p o especificado de r R com o m e s m o
c a m p o de C (M) . Se r R > C ( M ) então C 1 -+ MAIOR
Se r R < C (M) então C 1 -+ MENOR
Se r R = C ( M ) então C 1 -+ IGUAL
Uma comparação com campo (0:O) sempre fornece re -
sultado IGUAL pois + O é igual a - 0 .
I N STRUÇÕES DE DE SVIO -
O registro J é alterado toda vez que ocor -
re r u m desvio (exceto na instrução J S J ) , recebendo o endereço
da instrução seguinte aquela onde se deu o desvio.
JMP (jump)
ação: rJ -+ PC;
PC -+ M;
J S J (jump save J)
ação: rJ inalterado
PC -+ M
J O V (jump on overflow)
ação: s e OVF = true então rJ -+ P C
PC -+ M
senão ;
JNOV (jump on no overfiow)
ação: se OVF = false então rJ -+ PC
PC -+ M
senão OVF -+ false
J L , J E , J G , J G E , JNE, JLE (jump on less , equal , greater,
non-less , non-equal, non-greater) .
açao: o desvio ocor re se o indicador de comparação
apresenta a condição indicada.
JAN, J A Z , J A P , JANN, JANZ, JANP (jump A nega t ive , zero,
p o s i t i v e , nonneggtive , nonzero , nonposi t ive) .
J X N , J X Z , J X P , J X N N , J X N Z , J X N P (jump X nega t ive , zero,
p o s i t i v e , nonnegative , nonzero, nonpos i t ive) .
J i N , J i Z , J i P , J i N N , J i N Z , J i N P (jump I i negat ive , ze -
ro , p o s i t i v e , nonnegative, nonzero, nonpos i t ive) . ação: o desvio ocorre s e o conteúdo de r R s a t i s f i z e r a
condição, caso c o n t r á r i o nada ocorre .
11.2.3.7. - INSTRUÇÕES DE ENTRADA E S A ~ D A
I N (en t rada)
ação: é i n i c i a d a a t r a n s f e r s n c i a de informação da uni
dade e s p e c i f i c a d a p a r a posições consecutivas da
menaória a p a r t i r de M.. O nhnero de c é l u l a s da me -
mória agetada é i g u a l ao tamanho do bloco d e s t a
uni dade.
OUT ( s a í d a )
ação: são t r a n s f e r i d a s informações a p a r t i r da posição
M da memória para o d i s p o s i t i v o indicado.
Para I N e para OUT a máquina aguarda a l ibe -
ração do disposit ivo se e le e s t ive r executando uma operação. A
transferência de informação dura um intervalo de tempo que de -
pende da velocidade da unidade que e s t á sendo u t i l izada . A s s i m
não é aconselhável fazer refergncias, sem precauções, às posi -
çÕes de memória que es tão sendo al teradas , a t é que a operação
s e ja completada.
IOC (controle de entrada e saída)
ação : .ima operação .de controle é executada, dependen -
do do disposit ivo:
F i t a magnética: Se M = O a f i t a é reenrolada.
Se M < O a f i t a volta M reg is t ros ou
vol ta para -o i n í c i o da f i t a , o que ocorrer primeiro.
S e M > O a f i t a avança (a operação s e -
rã ignorada e a unidade sul; -
pensa se avançar mais do que
o Último regis t ro e sc r i to na
f i t a ) .
Disco: M deve ser zero. Pos iciona o disposit ivo de a - cordo com r X para economizar tempo da próxima
instrução I N ou OUT.
J R E D (jurnp ready)
ação: o desvio ocorre s e a unidade especificada t e r m i -
nou a operação inic iada por I N , OUT ou IOC.
J B U S (jump busy)
ação: o desvio ocorre se a unidade requerida não e s t i -
ver l iberada.
NUM (conversão a numérico)
ação: converte código de caracteres para código numé -
r ico. rAX 6 considerado um número de 1 0 bytes
e s c r i t o e m caracteres que são convertidos a um
número decimal armazenado em r A . O valor de r X
e o s i n a l de r A permanecem inalterados. É possí - 4
vel ocorrer tansbordo e neste caso o r e s to e
armazenado.
CHAR (conversão a caracteres)
ação: converte código numérico a código de caracteres,
necessário para a sa ída e m cartões ou t e l e t ipo .
O valor contido em A 6 convertido a u m número de -
cima1 de 1 0 bytes em rAX. 0s s i n a i s de r A e r X
não sofrem alterações.
MOVE
ação: t r a n s f e r e o número de palavras e s p e c i f i c a d a s por
F começando da pos ição de memória M pa ra a pos i -
ção de memória dada pe lo conteúdo de rI1. trans -
f e r i d a uma pa lavra de cada vez e r11 é incfremen -
tado do va lo r de F ao f i m d a operação. Se F = O
nada acontece.
SLA, SRA, SLAX, SRAX, SLC, SRC ( s h i f t l e f t A, s h i f t
r i g h t A, s h i f t l e f t AX, s h i f t r i g h t AX, s h i f t
l e f t AX c i r c u l a r , s h i f t r i g h t AX c i r c u l a r ) .
ação: r R é movimentado o numero de by tes especi f icado.
por M.
O s s i n a i s de r A e r X não são afe tados nas
operações. SLA e SRA não afetam r X , o s ou t ros operadores a l t e -
ram r X . Nas i n s t r u ç õ e s SLA, SRA, S L A X e SRAXbytes "desapare
cem" de um lado enquanto zeros são colocados do o u t r o lado . SLC e SRC efetuam deslocamentos c i r c u l a r e s , i s t o é, o s bytes
que "desaparecem" de um lado , "surgem" do outro.
NOP (no opera t ion)
ação: nada ocorre
HLT ( h a l t )
ação: a máquina para
A s i n s t ruções abaixo não constam da d e f i n i -
ção o r i g i n a l . Foram acrescentadas no simulador p r o j e t a d o por
Markenzon C6] visando f a c i l i t a r a depuração e a medida do de -
sempenho dos programas. Para e s t a s ins t ruções o r e l ó g i o do s i -
mulador não é incrementado, não afetando assim a medida do
tempo de process amento.
Para maiores d e t a l h e s sobre e s t a s i n s t r u -
ções v e r páginas 20, 64 e 65 da r e f e r ê n c i a C6].
CLOC
ação: o relÕgio M I X é impresso
LOOP
ação: o campo (18 b i t s ) formado pe las p a r t e s Ai4 e I
da i n s t r u ç ã o é incrementado de 1 e o novo va lo r
guardado no mesmo campo d e s t a ins t rução .
OUTL
ação: imprime o campo formado pe las p a r t e s AA e I do
endereço mencionado..
TRCE ( t r a c e )
ação: imprin-e a p a r t i r des te ponto, em cada i n s t r u ç ã o :
a i n s t r u ç ã o cor ren te , e os conteúdos dos r e g i s -
t r o s r A , r X , rI1, r I 2 , r I 3 , r I 4 , r I 5 , r I 6 .
NTRC (no t race)
ação: desl igar o rastreamento, s e ligado. Caso contrá - r i o nada ocorre.
111.1. ESTRUTURA DA LINGUAGEM
PLMiX é uma linguagem de médio n í v e l com
a s c a r a c t e r í s t i c a s apresentadas na introdução (páginas 2 e
3 ) e com uma s i n t a x e semelhante a do ALCDL 60 L 2 l ) .
Um programa P L M I X é um bloco, i s t o é, é um
conjunto de i n s t r u ç õ e s , precedidas por declarações e ence r ra -
das e n t r e 'begin ' e ' end ' .
A s declarações fornecem informações sobre
as v a r i á v e i s e estabelecem a alocação de memória. A alocação
é e s t á t i c a e a semântica de cada declaração e s p e c i f i c a como
6 f e i t a a ocupação de memõria p a r a aquela v a r i á v e l , permi t in -
do a s s i m ao programador uma gerência sobre o s endereços.
O s t i p o s de va r i áve i s são o s e x i s t e n t e s
no ' hardware ' e alguns faci lmente e s t ru tu rados a p a r t i r des -
t e s . Es ta exigência é p a r a e v i t a r que s e j a necesá r io o uso
de d e s c r i t o r e s e ins t ruções e x t r a s in t roduz idas no código pg
ra c á l c u l o de acesso a endereço. Deste modo é ev i t ado o uso
de posições de memória pe lo compilador s e m o conhecimento do
programador.
0s procedimentos podem ou não ter parâme -
t r o s e o corpo é um bloco ou um comando composto ou apenas
uma ins t rução . Quando houver declarações de va r i ãve t s e s t a s
são l o c a i s ao procedimento, havendo ve r i f i cação de escopo . ~ ã o é permi t ida a declaração de procedimento no corpo de ou -
t r a , porém é permit ida a chamada desde que e s t a já tenha s i -
do declarada. A passagem dos parâmetros 6 por v a l o r -resii lka -
do ou por v a l o r C2 4] . Na chamada os p a r h e t r o s formais são
i n i c i a l i z a d o s com os va lo res dos parâmetros r e a i s correspon -
dentes. No r e t o m o os parâmetros r e a i s do t i p o v a l o r - r e s u l t a -
do, recebem o va lo r do parâmetro formal correspondente. O s
demais permanecem i n a l t e r a d o s . A s i n s t r u ç õ e s podem ser compostas, e n c e r -
radas e n t r e ' beg in ' e 'end' ou 'C ' e ' I'. Algumas refletem
diretamente ins t ruções da máquina, como p o r exemplo, a s i n s -
t ruções de deslocamento, a r i t m ê t i c a s , t r a n s f e r ê n c i a , conver -
são. Outras são compostas por v á r i a s i n s t r u ç õ e s , como OS
comandos i t e r a t i v o s , condic ionais , de chamamento (CASE ) , pc r é m é d e f i n i d a na semântica uma tradução f i x a de modo que o
programador possa s a b e r exatamente o código gerado por d e t e r -
minada i n s t r u ç ã o . O s procedimentos podem s e r chamados de
qualquer ponto do programa.
A a t r i b u i ç ã o de expressões à s v a r i á v e i s
de memória é f e i t a indicando-se na s i n t a x e em que r e g i s t r o
s e r á efetuado o c á l c u l o , pa ra e v i t a r que s e j a m tomadas deci -
sões pe lo compilador. É f e i t a exceção apenas p a r a cá lcu lo de
expressão e m uma condição. porém a a u s k c i a da espec i f i cação
do r e g i s t r o i n d i c a que s e r á u t i l i z a d o o r e g i s t r o acumulador
í r A ) .
A s ins t ruções in t roduzidas por Markenzon
C6] no simulador também tem declarações e ins t ruções co r res -
pondentes e m PLMIX.
N ~ O há necessidade da introdução de código
montado no programa p o i s todas as i n s t r u ç õ e s de máquina do
M I X tem, d i r e t a ou indi re tamente , equiva lente em PLMIX.
A descr ição das ca tegor ias s i n t á t i c a s da
linguagem u t i l i z a uma var iação da forma normalizada de Backus.
Sua p r i n c i p a l c a r a c t e r í s t i c a é diminuir o número de c a t e g o r i -
as s i n t á t i c a s .
O exemplo abaixo u t i l i z a todas a s regras
da representação.
. as categorias s i n t á t i c a s são as palavras delimitadas por
" c " e " > " .
. as palavras reservadas são e s c r i t a s com l e t r a s maiúsculas.
. o s i n a l :: = é l i d o como " é definido por".
. O s i n a l + é l i d o como " é seguido por".
. o s i n a l - é l i d o como "ou seguido por".
. O ( s ) número (s) ao lado de cada l inha ind ica (ni) o (s) número
( s ) da (s) definição (Ões) da (s) categor ia (s) s i n t á t i c a : (s)
referenciada (s ) naquela l inha .
1 <programa>: : =
-BEGIN -lista>- E N D
O corpo do programa é const i tu ído de de -
clarações separadas por " ;" e seguidas por ins t ruções também
separadas por " ; " .
As declarações dão informações sobre as ca -
r ac te r í s t i c a s das variáveis que serão u t i l i zadas no programa
- t ipo, área de memória associada, valor i n i c i a l , e t c . É f e i -
t a uma assoçiação en t re o ident i f icador e uma ou mais posi
çÕes de memória, um reg i s t ro , um grupo de instruções, uma t a -
bela de endereços, e t c .
Um ident i f icador só pode aparecer uma vez
nas declarações "globais". Dentro da declaração de procedimen -
to é permitido declarar variáveis com um nome já dech.arado , pois e l a s são locais ao procedimento.
Todas as variáveis devem s e r declaradas.
A instrução é a unidade de operação da l i n -
guagem. O conjunto das instruções é a representação do algo -
ritmo proposto para resolução de um problema.
Normalmente as instruções são executadas se -
quencialmente, podendo es ta ordem s e r modificada por um coman -
do expl íc i to de desvio ou uma alteração do resultado de um
t e s t e de condição em um comando condicional. Um desvio incon -
dicional é f e i t o indicando-se o rótulo da instrução a s e r exe -
cutada após o desvio.
A declaração de procedimento associa .um
i d e n t i f i cador a uma instrução ou a uma sequência de instruções . O ident i f icador pelo qual o procedimento é referenciado é O
que aparece na declaração.
~ ã o ex i s t e o procedimento t ip i f icado ( fun -
ção). I s t o 6 devido ao f a t o de, para o cálculo da função que
e s t á sendo chamada em uma expressão, haver a possibil idade de
estarem sendo usados e eventualmente a l terados, sem e s t a r v i -
s í v e l para o programador, os mesmos regis t ros que aparecem nes -
t a expressão. Para e v i t a r e s t e s problemas s e r i a necessário
guardar os valores destes reg is t ros em variáveis temporárias an -
t e s de executar a função e restaurá-los apõs o término do cá1 -
culo. Este t i po de solução não se enquadra nas carac te r i s t i c a s
propostas para linguagem de médio nível , por não s e r permitido
o uso de temporãrias pelo compilador.
. ' C <declaração de constante I
/-<declaração de variável simples 2--1 declaração de variável equate -1
t- declaração de rótulo>
I-<declaração de tabela de desvios I k d e c l a r a ç ã o de contadores: I
L
O i d e n t i f i c a d o r deve começ:ar por uma l e -
t r a e pode t e r a t é 1 0 c a r a c t e r e s , e n t r e l e t r a s e d i g i t o s .
composta>
ro tu lada>
de c o n t r o l e >
de entrada/sai"da>
de conversão >
de t r a n f e r ê n c i a >
de chamada>
de desvio>
i t e r a t i v a h
condicional >
de a t r i b u i ç ã o >
pana depuração>
< ins t rução
< ins t rução
< ins t rução
< ins t rução
< ins t rução
: instrução
+ins t rução
- <ins t rução
< ins t rução
c ins t rução
c ins t rução
-instrução
4
BEGIN -+ < l i s t a sem procedimento-END 3 1
instrução composta 1 7
instrução > 5
Um procedimento pode ou não conter decla
ração de variáveis. Se houver declarações e s t a s serão loca is
ao procedimento e cada referência à variável é testada para
verificação do escopo. A alocação destas variáveis 6 e s t á t i c a .
A alocação de memória por um procedimento
6 f e i t a do seguinte modo:
1. Uma palavra para cada parâmetro formal
2 . área para as variáveis locais ( se hou -
ve r)
3. uma ins!trução para aguardar o endereço
de retorno
4 . instruções do procedimento
5. instrução de desvio para a instrução - a
pós à chamada ao procedimento.
A necessidade da reserva de palavras para
os parâmetros e devido ao método de transmissão de parâmetros:
a) na chamada ao procedimento o parâmetro r e a l é calculado e
seu valor é o valor i n i c i a l do parâmetro fo:~mal corrqpondem -
t e ; b) após a execução os parâmetros rea is correspondentes aos
parâmetros formais de t ipo VALUE não são al terados, os d6mai.s
recebem o valor f i n a l dos parâmetros formais correspondentes.
Deste modo a transmissão dos parâmetros
pode s e r "by value" ou "by value-result". O formalismo das de -
f inições destes métodos se encontra em P r a t t [24J nas seções
6 . 9 e 6.10.
Estes métodos foram adotados devido ao f a -
t o do MIX não possuir reg is t ros de indireção . Neste caso O
uso de passagem de parâmetros "by reference" s e tornar ia ex -
cessivamente oneroso, pois a cada acesso ao parâmetro t e r i a -
mos necessariamente uma instrução de carga. A transmissão de
parâmetros "by name" é claramente incompatível com os ob jeti -
vos propostos para linguagens de médio nível , além de apresen -
t a r problema semelhante.
De qualquer forma, o uso de subprogramas
com parâmetros 6 claramente desaconselhável , devendo o progra -
mador u t i l i z a r os regis t ros da máquina para esse fim.
N ~ O 6 permitida a declaração de procedi - mento dentro do corpo de outro procedimento. porém é permiti -
da a chamada a u m outro procedimento previamente declarado , não se permitindo recursão. A responsabilidade por e v i t a r r e -
cursão f i c a a cargo do programador.
Exemplc :
PROCEDURE TESTE (VALUE WORD COMP; WORD VAR) ;
BEGIN
< l i s t a sem prccedimento>
END
pós a compilação teremos:
TESTE na tabela de símbolos aponta para X.
M£ZM~RIA
VAR
endereço do 19 parâmetro formal 1 / IJ,endereço do 29 p a r h e t r o formal
- -
R 1 JMP *
' área para variáveis locais
I ( se houver)
I instruções do corpo do procedi -
mento
8 < l i s t a dos p a s h e t r o s formais>: : =
I
I WORD I ' 6
A palavra VALUE iq-dkca transmissão "by
value". O parâmetro sem e s t a especificação é transmitido "by
value-result" . N ~ O fo i permitido o uso de vetores como
p a r h e t r o s pois , com o metodo de transmissão adotado, s ign i -
f i c a r i a incentivar desperdicio de memória e m casos que pode -
riam s e r solucionados de forma mais economica através da u t i -
l ização adequada de regis t ros , o que acontece com grande f r e -
quência.
A declaração de constante associa um
identif icador a um valor, sem alocação de memória. A i n i c i a -
l ização de constante obedece ãs mesmas regras de i n i c i a l i z a -
ção de variável t ipo WORD que serão v is tas em ( 1 0 ) .
Exemplo
CON STANT DEZ = 1 0 , PRINTER = 18;
A compilação desta declaração a t r i b u i va -
l o r ao ident i f icador na tabela de símbolos e equivale 5 pseu -
do-instrução "CON" do assembler MIX.
1 0 <declaração de variável simples>:: =
4 i
ident> 6
LI
1
ident> = exprcte > 6,32
1
cadeia > 3 3
A declaração de variável associa um i d e n t i -
f icador a uma posição de m e d r i a podendo ou não s e r i n i c i a l i z a -
da.
A variável t ipo WORD ocupa os 5 bytes e
mais o byte de s i n a l .
1
Se a <exprcte> necessi tar ,de mais de 5 bx
tes p a r a s u a representação o compilador envia uma mensagem de
e r r o . A in i : c i a l i zação com uma cadeia 6 f e i t a alocando-se cada
c a r a c t e r e m um b y t e da esquerda pa ra a d i r e i t a . Se a cade ia
t i v e r m a i s de 5 c a r a c t e r e s s ó s e r ã o u t i l i z a d o s o s 5 pr imeiros .
Se t i v e r menos de 5 , os bytes não i n i c i a l i z a d o s ficam com va -
l o r e s inde f in idos .
A v a r i á v e l s imples t i p o BYTE ocupa uma
posição de memória mas somente um ou alguns bytes contíguos da L
p a l a v r a e s t ã o associados ao i d e n t i f i c a d o r . A <exprc te> i n d i c a 3
o b y t e m a i s à esquerda e <exprc te>, o byte mais à d i r e i t a . A s - 2 3
s i m devemos t e r a r e l ação <exprc te> - < <exprc te> conforme a
numeração dos by tes def in ida em 1 1 1 . 2 . 1 .
Na i n i c i a l i z a ç ã o de uma v a r i á v e l BYTE s o -
mente os bytes especi f icados recebem o va lo r a ser a t r i b u í d o
f icando os o u t r o s by tes com valores indef in idos .
O compilador envia mensagem de e r r o pa ra
o s segu in tes casos: a ) t e n t a t i v a de a t r i b u i r um número com
s i n a l a uma v a r i á v e l BYTE onde o by te de s i n a l (by te v) não
faz p a r t e da e spec i f i cação do campo; b ) i n i c i a l i z a r somente o
byte g; c) i n i c i a l i z a r com um número cu ja representação exige
um n ú m r o de by tes maior que o campo.
O byte da pa lavra de memÕria f i c a r á com
v a l o r inde f in ido s e a i n i c i a l i z a ç ã o f o r com uma cadeia .
O conteúdo de urna posição de memória não
i n i c i a l i z a d a é indef in ido .
Exemp 10 :
BYTE (0:3) AB;
BYTE (3:5) COD = ' A ' ;
BYTE ( 4 : 4 ) I N I C = 1;
? = v a l o r inde f in ido
INIC
11 <declaração de record>:: =
1
+-RECORD-ident- : <corpo do record
- ident
Um record a s s o c i a uma ou mais palavras a
um i d e n t i f i c a d o r . Cada uma dessas pa lavras terá um i d e n t i f i c a -
dor que permite seu acesso ind iv idua l . Cada pa lavra poderá a i n -
da ter bytes contíguos r e ferenciados por out ros i .dent i f icadores.
E s t a h ierarquização s e r 3 expl icada em ( 3 4 ) .
A cláusula STRUCTURE permite a criação de
um novo record com as mesmas carac ter í s t icas do record de no - L
me <ident>. A s s i m para haver uma dist inção dos subcampos do
record, cada um . terá seu nome composto: Cident. record> .<ident *
nível> ( * será v i s t o em (34) ) .
Exemplos:
RE CORD NO :
.1 WORD I N F O
.I WORD PONT
. 2 BYTE ( 1 : 2 ) ESQ
.2 BYTE (3:4) D I R
FECORD N 0 1 : STRUCTUm NO
1 2 <declaração de variável equate>: : =
A declaração de equate associa um ident i -
ficador a u m reg is t ro . Este identif icador não aloca memória . Na compilação qualquer referência a uma variável deste t ipo é
t ra tada como uma referência ao r eg i s t ro associado.
Exemplo :
EQUATE I N D I C E = X1, ACUMULADOR = RAC
1 3 <declaração de vetar>: : =
O s a r r a n j o s são unidimens i o n a i s , com l i m i -
te i n f e r i o r i g u a l a zero (v) e l i m i t e s u p e r i o r i g u a l ao v a l o r
da <exprc te> menos 1.
A r e s t r i ç ã o a a r ran jos unidimensionais obe -
dece 5 f i l o s o f i a da linguagem de não u t i l i z a r pa lavras da memó
r i a s e m expresso conhecimento do programador.
O uso de a r r a n j o s multidimensionais impl i -
caris, necessariamente, em u t i l i z a r memória pa ra d e s c r i t o r e s e
/ou g e r a r ins t ruções a d i c i o n a i s pa ra acesso, além de impl icar
obviamente em problemas de o t imi zação de código.
Se o número de pa lavras a s e r e m i n i c i a l i z a -
das f o r menor que o alocado. p e l o v e t o r , as pa lavras não i n i c i a -
l i z a d a s t e m v a l o r inde f in ido . Se o número f o r maior será envia -
da uma mensagem de e r r o .
O s a r r a n j o s de t i p o record são armazenados
de forma a evitar o uso de d e s c r i t o r e s e geração de ins t ruções
para cá lculo de acesso. Cada n í v e l é considerado c o m um ve - t o r e m separado. D e s t e modo o acesso pa lavra de í n d i c e I de
um determinado n í v e l 6 f e i t o atr ibuindo-se I a um r e g i s t r o de
í n d i c e e usando como endereço base o endereço do n í v e l . Temos
a s s i m t an tos a r r a n j o s quanto o número de palavras da e s t r u t u r a .
Exemplos :
CONSTANT VINTE = 20
ARRAY VINTE WORD ITENS
ARRAY 8 WORD COD = [1,*2[10] , - 1 6 , ' ~ ' I
ARRAY 2 0 RECORD MATERIAL :
.1 WORD NOMECODIF
.1 WORD Q UAN T I DADE
.1 WORD CLASSIF
. 2 BYTE ( 1 : 2 ) TIPO
- 2 BYTE ( 3 : 5 ) ESPECIE
NOMECODIF O
19
QUANTIDADE O
1 9
CLASSIF ( * ) O
( * ) o endereço de CLASSIF é o mesmo de TIPO e ESPECIE.
locação de memória pa ra a declaração do
v e t o r do record .
O s r ó t u l o s associam um i d e n t i f i c a d o r a
uma posição de m e m o r i a que contem uma ins t rução . E l e s são usa -
dos e m ins t ruções de desvio incondic ional (GOTO) .
Exemp 10 :
LABEL A Q U I , F I M .
15 <declaração de tabe la de desvios>:: =
Para utilizarmos a instrução de CASE-OF é
necessário dispormos de uma tabela com os endereços de cada uma
das instruções correspondentes a cada um dos valores do desvio.
Como toda ut i l ização de memória deve s e r
alocada pelo programador é necessário que e l e indique ao com -
pilador a reserva de área necessária para a tabela dos endere -
ÇOS . A <exprcte> indica o n6mero de opções den -
t r o do CASE-OF porém é ut i l izada uma palavra a mais. Sendo EM,
E l , . . . En-i os endereços de desvio para a primeira, segunda ,
. . . , enésima instrução, En é o endereço da primeira instrução
após o CASE-OF.
Cada instrução CASE-OF deve t e r uma declara
ção associada.
CASE
Exemplo :
CASO1 : 1 0
+ COUNTER t é n L
Um contador 6 usado como um r ó t u l o e pode
s e r re ferenciado como t a l .
Sua função é computar quantas vezes f o i
executada a i n s t r u ç ã o à qual e l e e s t á associado.
Ao encont rar um contador o compilador gera
a i n s t r u ç ã o LOOP a n t e s da ins t rução a s e r controlada. A i n s -
t rução t e m u m formato d i f e r e n t e das ins t ruções do "assembler"
M i X . O campo 2 AA é i n t eg rado ao campo I , formando um campo
com 3 b y t e s , que 6 i n i c i a l i z a d o com zero. Durante a execução
do programa a cada passagem p e l a ins t rução é incrementado o
campo do contador de 1. Es ta ins t rução não i n f l u e n c i a no tem -
po do re lóg io simulado.
A impressão d e s t e contador a t r a v é s da i n s -
t rução OUTCOUNTER permite descobr i r , por exemplo, quantas ve -
zes f o i executado determinado l a ç o de i t e r a ç ã o .
Es ta f a c i l i d a d e não f a z p a r t e da def in ição
do M i X f e i t a por Knuth C 3 ] . E l a f o i implementada por Marken -
zon p] no simulador do MIX.
Exemplo :
COUNTER LOOP1, LOOP2
formato da pseudo ins t rução
contador
A ins t rução composta reúne uma ou mais i n s -
t ruções e n t r e del imitadores BEGIN-END ou .[ - 7 , de modo que
e l a s possam s e r t r a t a d a s como uma Única ins t rução .
A i n s t r u ç ã o r o t u l a d a permite que uma i n s -
t rução possa s e r re ferenciada e que o c o r r a um desvio da s e -
quência de execução das i n s t r u ç õ e s a t r avés de um desvio incon -
d i c ional . Se < i d e n t > f o r um contador, a cada passagem
por < ins t rução> , durante a execução do programa, o contador s e -
r5 incrementado de 1.
A i n s t r u ç ã o I O C i n d i c a algumas operações de 1
con t ro le sobre determinado p e r i f é r i c o . a'exprcte > i n d i c a o 2
p e r i f é r i c o a s e r t r a t a d o e <exprc te> informa sobre a operação
a s e r e fe tuada . A tradução d e s t e comando 6 a i n s t r u ç ã o assem - 2 1
b l e r IOC com + - AA = <exprc te> e F = <exprcte>.
A opção ON f a z com que ocorra um desvio pa
r a a ins t rução de r ó t u l o < i d e n t > dependendo do es tado do p e r i -
f é r i c o : l i v r e ou ocupado.
A opção WAIT r ep resen ta uma espera já que
é f e i t o um desvio pa ra a mesma posição do t e s t e . Logo a condi -
ção do desvio deve s e r t rocada.
ON e WAIT geram as mesmas i n s t r u ç õ e s JBUS
e J R E D , d i f e r i n d o apenas o s endereços dos desvios.
Para maiores de ta lhes l e r a seção 11.2.3.7.
Exemplos :
PLMIX
I O C 3, -1
I O C 18 I O C O (18)
ON IIEADER READY GOTO VOLTA J m D 1000 (16 )
( 1 0 0 0 é o endereço de vo l ta )
WAIT P R I N T E R READY JBUS 500 (18)
(500 é o endereço da ins t rução J B U S )
<exprcte> é o p e r i f é r i c o onde ocorrerá a
operação de entrada/saída. <var iável> é nome da área que fun -
ciona como "buffer".
Maiores deta lhes sobre as operações de en -
t rada/saída es tão na seção 1 1 . 2 . 3 . 7 .
Exemplos :
INPUT ( 6 , DADOS RI^] ) I N 1000 ( 6 )
(1000 endereço de DADOS [R111 )
OUTPUT (PRINTER,RESULT [ o , R I ~ ] ) OUT 2000 (18)
(2000 endereço de RESULT [ O ] )
CHAR converte código numérico (em r A ) para
código c a r a c t e r com o resu l t ado em r A e rX.
NUI)I converte 1 0 by tes ( r A e r X ) de código
c a r a c t e r pa ra código numérico f icando o va lo r r e s u l t a n t e em
r A . O s de ta lhes des tas operações se encon t ~ a m
na seção 11.2.3.8.
A ins t rução de t r ans fe rênc ia permite que
sejam copiadas informações de uma posição de memória p a r a ou - t r a .
Se < v a r i á v e l > f o r um i d e n t i f i c a d o r de va - r i á v e 1 simples ou indexada são t r a n s f e r i d a s <exprc te> p a l a -
1 vras a p a r t i r do endereço de <var iáve l> pa ra o endereço de
2
< v a r i á v e l > ou o endereço que e s t á e m rI1. Para i n d i c a r a s e - gunda opção usa-se a pa lavra reservada ENDRX1.
A ~ Õ S a execução da i n s t r u ç ã o , r11 = endere -
1 Se <var iáve l> f o r um i d e n t i f i c a d o r de r e -
cord, MOVE t r a n s f e r e todas as pa lavras do record. Neste caso
<exprc te> deverá ser i g u a l a 1 para e v i t a r e r r o . No f i n a l t e - 2
remos r11 = endereço de < v a r i á v e l > + número de pa lavras do
record. 1
Se < v a r i á v e l > f o r um i d e n t i f i c a d o r de ve -
t o r de records são t r a n s f e r i d o s <exprc te> records que c o r r e s - pondem a <exprc te> x (número de pa lavras do record) posições
2
de memória. Neste caso < v a r i á v e l > também deverá s e r i d e n t i f i -
cador de v e t o r de record. A opção E N D R I 1 não poderá ser usada
pois nes te caso p a r a g e r a r código para a i n s t r u ç ã o é necessá -
r i o termos o endereço da ent rada na t abe la de simbolos do no -
me do record para local izarmos o s endereços dos diversos n l -
v e i s do record.
E x e m p l o s :
PLMIX -- MIXAL
MOVE DOADOR [RI 31 TO RECEP [RI 4 1 FOR 2 S T 1 RECEP, 4
MOVE DOADOR, 3 ( 2 )
MOVE FONTE L0 RI^] TO ENDR1 FOR 8 MOVE FONTE, 5 ( 8 )
Supondo as segu in tes declarações :
ARRAY 4 RECORD ARVORE:
.1 WORD I N F O
.1 WORD PONT
- 2 BYTE ( 1 : 2 ) ESQ
. 2 BYTE ( 4 : s ) D I R
ARRAY 4 RECORD NOVAARV: STRUCTURE ARVORE
e a ins t ruçao
MOVE ARVORE RI^] TO NOVAARV[RI~] FOR 4 S T 1 N 1 , 6
MOVE A 1 , 6 ( 4 )
S T L N 2 , 6
MOVE A 2 , 6 ( 4 )
Supondo :
A 1 = endereço ARVORE. I N F O
A2 = endereço ARVORE. PONT
N 1 = endereço NOVAARV.INF0
N2 = endereço NOVAARV.PONT
Para melhor compreensão deste Ü l t i m r , código
gerado será mostrada a memória para as declarações dos records
acima.
ARVORE. INFO
ARVORE. PONT
NOVAARV. INFO
NOVAARV. PONT
<ident> 6 71 A L
( - < l i s t a param reais>-) 3 8
A chamada a um procedimento pode o c o r r e r e m
qualquer ponto do programa, i n c l u s i v e numa declaração de proce - a dimento. N ~ O 6 permi t ida uma chamada recurs iva , porém não e
f e i t o t e s t e p a r a deteção d e s t e e r r o .
Se não há passagem de p a r k e t r o s a chamada
se reduz a uma i n s t r u ç ã o de desvio incondic ional p a r a o i n í c i o
do corpo do procedimento.
Havendo passagem de p a r h e t r o s a i n i c i a l i za -
ção dos parâmetros formais, e a s a t r ibu ições de re torno dos
parâmetros de t i p o "va lue- resul t" , se faz a t r a v é s de r A . N e s -
te caso a i n s t r u ç ã o de chamada s e t raduz por: a ) a t r i b u i ç ã o a
cada um dos parâmetros formais; b ) ins t rução de desvio p a r a
o i n i c i o do corpo do procedimento; c ) a t r i b u i ç ã o aos parâme -
t r o s t ransmi t idos "by va lue- resul t" .
Exemplos :
na declaração:
PROCEDURE IMP ;
<corpo procedimento>
na chamada:
IMP ;
SOMA (1 O , VAR)
JMP IMJ?
ENTA 10
S TA CCINST
LDA VAR
STA RESULT
JMP SOMA
LDA RES ULT
STA VAR
GOTO ----<i dent
2
LCASE+regi>-/-<ident>- OF - < i n s t r composta
A i n s t r u ç ã o GOTO gera um desvio incondic io - 1
na1 pa ra a ins t rução de r ó t u l o < iden t> . E la pode o c o r r e r em
qualquer ponto do programa, i n c l u s i v e em um corpo de procedi -
mento, estando o r ó t u l o dent ro ou f o r a de le .
A i n s t r u ç ã o CASE-OF t r a t a dos desvios - a 2
t r a v é s de uma t a b e l a de endereços. <i:dent> é o nome da t a b e -
l a e deve e s t a r na declaração de CASE associada.
E f e i t o um t e s t e an tes de ser executada a
ins t rução para e v i t a r que s e j a dado um desvio para uma i n s t r u -
.ção f o r a do CASE-OF introduzindo e r r o s de maneira i n c o n t r o l á - v e l e 5s vezes impercept ivel pa ra o programador. Deste modo
s ã o geradas a s segu in tes i n s t r u ç õ e s antes do desvio do CASE-
OF :
suponha a seguin te declaração:
1 CASE < i d e n t > : <numero>
e a ins t rução
1
CASE <reg i> /< iden t> OF < i n s tr composta>
teremos :
J < r e g i > NN
JMP
DEC<regi>
J < r e g i > NN
INC<regi>
JMP
ERIO ENT<regi >
JMP
* + 2 % t e s t a se > O - ERRO
<numero > % testa se c (rI: ) <nmro>
ERRO
<numero> % r e s t a u r a < r e g i >
* + 2
<numero > % desvia la. i n t r a& CASE-OF
< iden t> , < r e g i > B desvio pa ra t a b e l a
O s va lores permit idos pa ra rIi variam de O
a <numero>-1. pós cada i n s t r u ç ã o correspondente a uma opção
é gerado um desvio para pr imeira i n s t r u ç ã o após o CASE-OF.
E x e m p l o s
GOTO S A I JMP S A I
CASE RI2/CASO1 O F
BEGIN
VP;L,RAC:=3; % R I 2 4
BEGIN % RI2=1
R I 5 : = VALI + MAX;
VAL: = O
END;
VAL,RAC:+27; % R I 2 = 2
J2NN * + 2
JMP 5F
DEC2 3
J2NN 5F
INC2 3
JMP * i- 2
5 H ENT2 3
JMP CASO1,2
< i n s t r O >
JMP 6F
< i n s t r 1 >
JMP 6 F
-7- REPEAT-<reg i >- TIMES -instrução
2
REPEAT -<instrução>- condição 5 , 4 0
2
WHILE --+condição > instrução 4 0 , 5
L c < i n s t r u ç ã o for 4 1
A ins t rução i t e r a t i v a permite a execução de
uma ins t rução , em g e r a l composta, um determinado número de ve -
zes sem que e s t a s ins t ruções sejam ins t ruções com contadores ou
t e s t e s de s a í d a ( e x p l í c i t o s ) . A ins t rução gera um comando de
desvio condicional
do da i n s t r u ç ã o .
que é u t i l i z a d o de modos d i f e r e n t e s dependen -
1 A i n s t r u ç ã o REPEAT < r e g i > TIMES < ins t rução>
1
f a z com que a < ins t rução> s e j a executada um número de vezes
i g u a l ao conteúdo do r e g i s t r o I i associado à i n s t rução .
O r e g i s t r o deve s e r carregado antes da i n s -
t rução. Se o conteúdo do r e g i s t r o f o r zero ou negat ivo ,, 1
<ins t rução> será executada uma vez.
Para que o número de i t e r a ç õ e s s e j a i g u a l
ao va lo r carregado in ic i a lmen te em rIi e s t e não deve s e r a l t e r a - 1
do e m < ins t rução>. porém não ê f e i t o nenhum t e s t e para v e r i f i -
c a r a a l t e r a ç ã o do conteúdo do r e g i s t r o .
1 A cada execução de < ins t rução> o v a l o r do
r e g i s t r o é decrementado de 1, interrompendo a i t e r a ç ã o quando
este va lo r for ' zero ou negat ivo.
I Segundo o esquema abaixo a compilação será:
1
XXX < ins t rução>
DEC<regi>l
J< r e g i >P XXXX
2 1
A ins t rução REPEAT -< ins t r> UNTIL <condição> 2
f a z com que < ins t rução> s e j a executada enquanto a <condição>
f o r f a l s a , sendo que a ins t rução é executada pe lo menos uma vez.
Para que a i t e r a ç ã o termine é necessár io 1
que pelo menos um dos elementos que fazem p a r t e de <condição> 2
tenha s e u v a l o r a l t e r a d o no corpo de <ins t rução>.
Para o esquema da i n s t r u ç ã o o código gerado
s e r á :
2 XXX < ins t rução >
* as ins t ruções que são geradas para o t e s t e de condição s e r ã o
v i s t a s e m ( 4 0 ) .
2 3 A ins t rução W H I L E < C O ~ ~ ~ Ç ~ O > DO < ins t rução>
permite a i t e r a ç ã o enquanto a condição f o r verdadeira . Se no 3
primeiro teste a condição f o r f a l s a , < ins t rução> não é executa -
da nenhuma -vez.
Para que a i t e r a ç ã o processe um número f i n i -
t o de vezes 6 necessá r io que pe lo menos um dos elementos que
fazem p a r t e da condição s e j a a l t e rado .
Com o esquema teremos :
XXX C i n s t r p / t e s t e condição>
2 J 7 <condição> Z Z Z
3 <ins t rução>
JMF' XXX
zz z
26 < ins t rução condicional?: : =
1 -IF -condição>- THEN + i n s t r u ç ã o > q 4 9 , 5
A i n s t rução condicional permite que apõs um
t e s t e sejam executadas ou s a l t a d a s uma ou mais i n s t r u ç õ e s .
Se a condição t e s t a d a f o r verdadei ra a i n a -
t rução após o THEN é executada, sendo s a l t a d a a seguin te ao
ELSE, s e houver. Para condição f a l s a é executada a i n s t r u ç ã o a - pós o ELSE, se houver.
Se houver v á r i a s ins t ruções I F aninhadas, é
obedecida a r e g r a que um ELSE s e r e l ac iona sempre com o THEN
mais próximo. A a l t e r a ç ã o d e s t a r e g r a é f e 2 t a usando-se i n s t r u -
ção compos t a .
1 Para a compilação de I F <cond> THEN < i n s t r >
temos :
1 2
Para I F <cond> THEN < i n s t r > ELSE < i n s t r > t e -
FALSA
<condição >- <ins tr p/tes t e condição >
remos :
i VERDADEI RA
1 <instrução>
-
Cinstr p/teste mndição>
J 7 <mndição> XXX 1
<instrução> <instrução>
m zzz
J -I <condição> XXX
1 <instrução>
XXX
zzz
+atribuição de expressão 3 varizvel via r e g i s t r o 4 4 4
A ins t rução de a t r i b u i ç ã o permite , após o
cá lcu lo da expressão 2 d i r e i t a do s i n a l de a t r i b u i ç ã o (:=) ,
a l t e r a r o conteúdo de um r e g i s t r o , uma ou mais posições de me -
mória associadas a v a r i á v e i s s imples , indexadas ou i d e n t i f i c a -
dor de n í v e l de record subst i tuindo-o pe lo r e su l t ado do c á l c u -
10 efetuado.
Na a t r i b u i ç ã o à var iáve l indexada não e
f e i t o t e s t e para v e r i f i c a ç ã o s e o acesso e s t a f o r a dos l i m i
tes da declaração.
28 < ins t ruções para depuração>: : =
TRACEON
TRACEOFF 4,
CLOCK
OUTCOUNTER ---<ident>
A ins t rução TRACEON av i sa que a p a r t i r
d e s t e ponto antes de cada ins t rução se rão impressos o código
da ins t rução , e os conteúdos. de r A , r X e rIi, 1 - < i - < 6.
A i n s t rução TRACEOFF das a t i v a a ins t rução
TRACEON . A i n s t r u ç ã o CLOCK f a z com que s e j a impres -
s o o conteúdo do r e l ó g i o do simulador.
OUTCOUNTER < i d e n t > imprime o conteúdo des -
te contador.
N e n h u m a destas instruções afeta o conteúdo
do relógio.
E s t a s ins t ruções não e x i s t e m na definição
f e i t a por K n u t h L3] e f o r a m in t roduz idas no s i m u l a d o r do M i X
por M a r k e n z o n C6], cujo trabalho deve ser procurado para m a i o -
res detalhes.
E x e m p l o : PLMIX
COUNTER LOOP1;
M I XAL
P C
RAC: = 1 0 ; 1 ENTA 1 O
TRACEON ; 3 TRCE
REPEAT R I 2 TIMES 4 LOOP
B E G I N 5 INCA 0 11
LOOP1: RAC : =RAC + R I 1 6 ENT3 0 1 1
R I 3 : = R I 1 - 3 7 DEC 3 3
END
TRACEOFF ;
OUTCOUNTER LOOP 1;
8 DEC2 1
9 J 2 P 4
1 0 NTRC
11 OUTL 3
60
Na execução teremos na impressora:
INST = 5 A = 10 I1 = 20 I2 = 2 I3 = ?
X = ? I4 = ? I5 = ? I6 = ?
INST = 51 A = 30 I1 = 20 I2 = 2 I3 = 20
X = ? I4 = ? I5 = ? I6 = ?
INST = 51 A = 30 I1 = 20 I2 = 2 I3 = 17
X = ? I4 = ? I5 = ? I6 = ?
INST = 50 A = 30 I1 = 20 I2 = 1 I3 = 17
X = ? I4 = ? I5 = ? I6 = ?
INST = 42 A = 30 I1 = 20 I2 = 1 I3 = 17
X = ? I4 = ? I5 = ? I6 = ?
INST = 5 A = 30 I1 = 20 I2 = 1 I3 = 17
X = ? I4 = ? I5 = ? I6 = ?
INST = 4 8
INST = 51
INST = 5 1
INST = 5 0
** LOOP : 2
31 < l i s t a s e m procedimento>: : =
A < l i s t a sem procedimento> aparece na d e f i -
nição do <corpo do procedimento> para i n d i c a r na s i n t a x e , a
imposs ib i l idade de declaração de s ubprograma no corpo de ou
t r o .
Uma expressão cons tante é uma expressão que
pode ser computada em tempo de compilação. Deste modo os compg
nentes da expressão são n h e r o s ou i d e n t i f i c a d o r e s de constan -
tes já de f in idas .
O compilador sempre t r a b a l h a com o r e s u l t a -
Exemplo :
PLMIX MIXAL
CONSTANT VINTE = 20
RAC: = VINTE + 1 7 + R I 2
RAC: = R I 2 + VINTE + 17
ENTA 37
INCA O f 2
ENTA 0 1 2
INCA 20
INCA 1 7
No segundo exemplo, como as expressões são
calculadas da esquerda para a d i r e i t a sem precedência, a prg
sença de R I 2 indica não estarmos tratando de expressões cons -
t an tes , logo o compilador t r a t a r á cada constante em separado,
o que j u s t i f i c a o código.
- > L I - I L c a r a c t e r
Uma cadeia é uma sequência de caracteres,
inclusive branco, encerrada en t re p l i c s ( ' ) . I? permitido o ca -
rac te r p l i c dentro da cadeia mas deverão s e r e sc r i to s dois
p l i c s juntos, sem espaço entre e l e s , e um só s e r á considerado
o p l i c da cadeia, o outro se rv i r á apenas como informação para
o analisador léxico.
Exemplo :
' ISTO E" 'UM EXEMPLO'
a cadeia será ISTO E" UM EXEMPLO.
. -numero >T WORD -ident
BYTE --( cexprcte >: Cexprcte >) -<ident
O n í v e l s u p e r i o r é aquele d a de f in ição t i p o 1
WORD. E l a a s soc ia < i d e n t > a uma posição de memória.
A s declarações de t i p o BYTE que seguem a 1
declaração WORD s e referem à pa lavra associada a < iden t> . E s -
t a s declarações de BYTE dão nomes a bytes contíguos d e s t a pg
l av ra . poderá haver declarações que s e superponham, i s t o é , dar um m m e aos bytes ( 0 : 3) , dar o u t r o nome ao campo ( 2 : 3) e
um o u t r o a ( 2 : 2 ) .
O v a l o r de <numero> é i r r e l e v a n t e p a r a O
compilador . A r e f e r ê n c i a a u m n í v e l é f e i t a
< i d e n t i f i c a d o r record>. < i d e n t i f i c a d o r n í v e l > .
E x e m p l o :
RECORD MATRICULA :
. O 1 WORD CODIGO
. O 1 WORD NASCIM
.O2 BYTE ( 1 : 4 ) DATA
- 0 3 BYTE ( 1 : 2 ) ANO
. O 3 BYTE ( 3 : 4 ) MES
.O2 BYTE (5:5) SEXO
A entidade < r e g i x > engloba referências a
- um r eg i s t ro de í nd i ce ou ao reg is t ro RX, que é a extensão a
direi ta do a c u m u l a d o r ( r A ) .
A inic ia l ização de um vetor obedece ãs mes -
mas regras que a inic ia l ização de variável simples t ipo WORD
(10 1.
Se várias palavras vão s e r inic ia l izadas
com um mesmo valor, então usa-se o f a t o r de repetição 1
*<exprcte> e o valor a s e r repetido entre colchetes ( [ e ] ) .
Exemplo :
ARRAY 1 0 WORD VAL = [20,30,-17,*5[31], ' A B ' , ' cD']
Uma <variável> é uma variável simples ou
indexada.
O indice deve s e r um regis t ro de índice ,
um ident i f icador de equate (associado a um regis t ro de índi -
ce) , ou uma expressão R I . Uma expressão R i é calculada em um
r eg i s t ro de índice e neste caso é necessário indicar em qual
reg is t ro se rá efetuado o cálculo. Uma expressão constante t a m -
bém é uma expressãó R I . Neste caso após o compilador aval iar
o valor da expressão, e l a 6 atr ibuida ao reg is t ro de h d i c e i n -
d i cado.
Exemplo :
DADO
VALOR [RII]
TABELA [R12 + VINTE - 1 0 , RI^]
38 < l i s t a de parâmetros reais>: : =
I '1
O s parâmetros rea is devem corresponder em
tipo e número aos parâmetros formais.
Para os parâmetros de t ipo BYTE não 6 f e i -
t a verif icação s e o campo do parâmetro rea l é Igual ao do -par2 -
metro formal.
Na execução do procedimento só 6 ut i l izado
o campo especificado na declaração dos p a r k e t ros formais .
Exemplo :
TESTE (MAX, 20 + R13, ITEM RI^])
o s i n a l e são
nas v a r i áve is
O s r e g i s t r o s de í n d i c e tem dois by tes m a i s
usados basicamente como contadores e í n d i c e s
indexadas . A operação de comparação pode ser f e i t a mm
um dos elementos do t e s t e no r e g i s t r o de índ ice . Neste caso
supõe-se que rIi t e m cinco b y t e s , sendo que os bytes 1, 2 e 3
são i g u a i s a zero.
Q - POS
- N E G -
- Z E R O -
- N N E G -
-NZERO -
Para o t e s t e de condição <expressão> é caL
culada no reg is t ro A e depois executada a instrução de compara -
ção - CMPA - entre o r A e uma posição de memória. Dependendo 3
do resultado é ligado o indicador de m N O R , I G U A L ou MAIOR.
Se 4.expcessão> fo r somente um regis t ro de
Indice ou r X ou uma variável equate associada a um desses r e -
gis tros , a comparação é f e i t a com e s t e regis t ro .
A comparação também pode s e r f e i t a com ex -
pressões R I calculadas em um reg is t ro , evitando assim u t i l i z a r
rA. É necessário então indicar em qual reg is t ro se rá efetuado o
cálculo da expressão R I e posterior comparação.
A instrução de desvio não a l t e r a o indica -
dor de comparação.
Uma comparação de t- O e - O r e su l t a em
I GUAL .
Para desvio usando o resultado no indica -
dor de comparação a compilação gera a negação da relação t e s t a -
da. A s s i m teremos:
J N E
J E
J L E
J L
J G E
J G
O s r eg i s t ros podem s e r testados para condi - ções: posi t ivo, negativo, zero, não posi t ivo, não negativo e
não zero. Para t a i s condições teremos na compilação:
P O S
NEG
ZE R 0
N P O S
NNEG
NZERO
onde <reg> pode s e r A , X ou I i , 1 - < i - < 6.
Exemplos :
P L M I X
IF I N D I C E G T MAX
THEN <instrução>
MIXAL
LDA I N D I C E
CMPA MAX
JLE XXX
<instrução>
XXX
PLMIX MIXAL
WHILE [FIM + 16 + R I 6 , RI^] LT F I N A L
DO < ins t rução>
REPEAT < ins t rução>
UNTIL RAC ZERO
LD4 F I M
I N C 4 16
INC4 0 r6
CMP4 FINAL
J 4 GE ZZZ
JMP XXX
z z z XXX < ins t rução>
L DA TESTE
JAN Z XXX
1 N
1 1 2
- FOR -i identz- := -<expressao>- STEP 4exprcte>- WIL -<expressão>@
A < ins t rução f o r > f a z com que < i n s t r u ç ã o > se -
ja executada uma ou mais vezes, dependendo de uma v a r i á v e l ou
r e g i s t r o de cont ro le .
Esta variável ou regis t ro recebe um valor 1 1 1
i n i c i a l <expressão> ou <exprRI > (<exprcte>) antes do i n i c i o
da i teração. pós cada execução de <instrução>, a variável
ou reg is t ro de controle 6 a l te rada de um valor constante , 1
chamado passo. (<exprcte>) . A i teração é repetida a t é que a 2
variável (ou reg is t ro) se j a i n f e r i o r ao valor f i n a l <exp~iess%>,
ou superior ao valor f i n a l , para passo positivo.
A variável -(ou regis t ro) de controle pode
s e r usada em <instrução>, porém a al teração exp l i c i t a ( prelo
programador) de s e u valor, acarcretará na modificação no núme -
ro de i terações.
O esquema abaixo é geral e serão mostra -
dos códigos gerados para variável de controle sendo uma va -
r iável simples e sendo um regis t ro
t supondo passo pos i t ih
código gerado para <ident>, expressão no r A
e passo posit ivo
1
< i n s t r para cálculo <expressão> >
STA XXX
2
c i n s t r para cálculo <expressão> >
S TA YYY
J M P Z Z Z
YYY
z z z <instrução>
LDA XXX
INCA <passo >
CMPA YYY
JLE Z Z Z
XXX endereço da variável de controle
YYY posição de memória que contém o valor l imite . ne -
cessário guardar e s t a informação na memória, pois só
é possível fazermos comparação ent re reg is t ro e posi - .
ção de memória.
código gerado para <regi> ( ou <ident> e
uma variável equate) , passo negativo.
1 Kins t r para cá lcu lo <exprRI > >
2
< i n s t r para cá lculo <exprRI> >
STA YYY
JMP Z Z Z
YYY
Z Z Z < ins t rução>
D E C I i <passo>
C M P I i
J G E Z Z Z
1
(1) a < e x p r r I > s e r á calculada no <reg ix> usado como
v a r i á v e l de cont ro le . Deste modo o v a l o r i n i c i a l
já e s t a n e l e e não é p r e c i s o ins t rução de carga.
2
( 2 ) <exprI> s e r á ca lculada no r A p a r a e v i t a r des -
t r u i r o conteúdo do r e g i s t r o de con t ro le .
Deste modo qualquer ins t rução " f o r " a l t e r a O
conteúdo de r A .
O segundo exemplo de código gerado é i g u a l
pa ra o rX.
d e x p r e s são > e 4 8
6
A operação de a t r i b u i ç ã o a r e g i s t r o , 6 uma
indicação do r e g i s t r o sobre o q u a l s e r á ca lculada a expressão
à d i r e i t a do s i n a l de a t r i b u i ç ã o , e onde f i c a r á o r e su l t ado . Quando <expressão> f o r uma <expressão constante >, e s t a será
ca lculada pelo compilador e depois carregada no r e g i s t r o a t r a -
vés d a i n s t r u ç ã o do t i p o ENT <reg>.
1 2
< i d e n t > e ' ident> são va r i áve i s do t i p o - e 1 2
qua te , sendo < i d e n t > associada ao r A e < i d e n t > associada a r X
SÕ é f e i t a indicação no "bi t . de overflow "
s e e s t e o c o r r e r no r e g i s t r o r A . Para o s r e g i s t r o s r X e rIi
não 6 fornec ida nenhuma informação p e l a máquina.
N a a t r i b u i ç ã o de uma v a r i á v e l t i p o BYTE o
conteúdo do campo especi f icado é a t r i b u i d o ao r e g i s t r o ( r A ,
r X ou rIi) a jus tado à d i r e i t a e os outros by tes do r e g i s t r o
são zerados. Se o campo de uma va r i áve l BYTE não i n c l u i o b l
t e de s i n a l , após a a t r i b u i ç ã o o- r e g i s t r o f i c a com s i n a l pos i
t i v o .
Exemplos :
PLMIX
RAC : = VAR * COD RI^] - 13 SLA 2
MIXAL --
LDA VAR
MUL COD ,1
DECA 1 3
SLA 2
Suponha DELTA e MAX constantes e CONT v a r i á -
R I 1 : = CONT + DELTA - MAX + RI3 L D 1 CONT
I N C 1 DELTA
DEC1 MAX
I N C 1 013
4 3 < a t r i b u i ç ã o de r e g i s t r o a va r i áve l> : : =
A v a r i á v e l t i p o WORD t e m todos os seus bx
tes a l t e rados quando recebe r A , rX, rIi ou uma v a r i á v e l dec la - 1
rada EQUATE ( < i d e n t > ) com um desses r e g i s t r o s . N a a t r i b u i ç ã o
do r e g i s t r o rJ somente são. a l t e rados os bytes 1 e 2 e o s i n a l ,
que $ sempre pos i t ivo . Atribuindo-se um r e g i s t r o de í n d i c e os
bytes 1 , 2 e 3 serão zerados e só recebem valores os bytes 4 e 5 .
Se a variável t i p o BYTE só ocupar alguns by
tes da palavra, somente e s t e s serão alterados, permanecendo os
demais com o conteúdo anter ior ã operação. A atr ibuição é f e i -
t a tomando-se os bytes do reg is t ro à p a r t i r da d i r e i t a e efe -
tuando um deslocamento para à esquerda, se necessário, para i n -
s e r i r no campo especificado.
~ l é m dos regis t ros poderá- s e r f e i t a a a t r i -
buição do valor zero, que corresponde ã instrução S E (store
zero) . Na inicia l ização de uma variável com e s t e valor, & acon -
selhãvel e s t a atribuição pois e l a gasta apenas uma instrução ,
enquanto que uma atribuição via regis t ro demandara duas ina t ru -
ções - uma para carregar o reg is t ro e outra para t r ans fe r i r o
conteúdo do reg is t ro para a memória.
O mesmo negistro pode s e r atribuido a mais
de uma variável e neste caso s e fa rá da esquerda para a d i r e i -
t a .
Exemplos :
VALTR: = RAC
A , B , D RI^]: = R I 2
STA
S TZ
STZ
VALOR
NO ( L I N K )
I N I C I O , 4
4 4 <atribuiçãc de expressãc a variável via registre>:: =
Esta atribuiçãc permite que uma ou mais va -
riáveis recebam uma expressãc. Ccmc a atribuiçãc à mem6ria s6
pede se r f e i t a através de regis t rc , é necessáric indicar qual
será wsadc. A
ref erenciadc . expressãc deve pcder ser calculada nc regi-.strc
A atribuiçãc na l i s t a será f e i t a da esquer - da para a d i re i t a , sendc válidas as cbservaçces fe i t as em ( 4 3 )
scbre atribuiçãc de registrc à variável.
Exemplcs :
PLMIX
LDA MATRIZ, 4
?mL DEZ
mCA 5
STA VAL
STA 11AD3 ,RI4
TESTE [lO -k MAX, RI^] , RI1 : = CONT + 5
A expressãc de r e g i s t r e I s6 admite cs cpe -
raddres de s c m a e sub t r açãc que ccrrespcndem 2s instruçc'es
INC e DEC. O s f a t c r e s s5 pedem s e r r e g i s t r c s , nÚmercs e u iden - t i £ icadcres de ccns t a n t e eu equate .
Uma var i áve l só pode aparecer como primei -
ro elemento da expressão.
A expressão é ava l i ada da esquerda p a r a a
d i r e i t a .
O r e g i s t r o que e s t g à esquerda do s i n a l
de a t r i b u i ç ã o s ó poderá aparecer na expressão s e fdr o p*mei -
ro elemento d e s t a , caso c o n t r á r i o o compilador e n v i a r á uma
mensagem de e r r o e não c a l c u l a r á a expressão.
Se o r e su l t ado da operação não puder s e r
colocado e m 2 bytes o r e g i s t r o f i c a com va lo r inde f in ido e
não ocor re rá ação sobre o indicador de "overflow".
Exemplos :
Supondo as decl ar ações :
PLMIX
WORD VAR;
BYTE (3:4) ABC;
CONSTANT MAX = 100;
ARRAY 5 WORD A;
RECORD NO :
.1 WORD INFO
.1 WORD PONT
PLMIX -- . 2 BYTE ( 1 : 2 ) ESQ
. 2 BYTE ( 3 : 4 ) D I R ;
ARRAY 3 RECORD T I P O : STRUCTURE NO;
R I 1 : = MAX
R I 6 : = NO.ESQ
RI5 : = R I 5 - 3 9
R 1 3 : = - R I 2
RI4 : = A L R I ~ ] + R I 2 - 1 5
VAR, R I 6 : = VAR + MAX
y e x p r e s são RAC> I 51
M I XAL
E N T 1
'TiD6
DC 5
ENN 3
LD4
I N C 4
DE C4
ENT3
DEC 3
LD2
I N C 2
MAX
0 , 1
TIFQ, 3 (DIR)
0,5
VAR
MAX
VAR
Uma expressão deverá ser calculada no a c u m u -
lador.
49 <operador de relação, : : =
Na compilação dtas instruções com condição a
relação tes tada será a negação da relação e s c r i t a no programa
(vide ( 4 0 ) ) .
O segundo elemento de uma comparação deverá
s e r sempre referenciável por um endereço de memória.
Esta res t r ição deriva dos t e s t e s serem sem -
pre en t re r eg i s t ro e var iável , e da impossibilidade de serem
usadas variáveis temporárias pelo compilador . Se f oasem permi -
t i das expressões no segundo membro da comparação, a ut i l ização
de v a r i á v e i s temporárias seria i n e v i t á v e l , conforme o exemplo :
A * B > C * D
e x i g i r i a s u a transformação em
A * B - C * D > O
com uso o b r i g a t ó r i o de temporária.
I -<ident>
- RAC
- SLAX -1
1 <ident> - ident i f icador de constante
L
<ident> - ident i f icador de variável equate
A expressão é calculada da esquerda para a
d i r e i t a sem prioridade entre os operadores. Cada uma das opg
rações tem um tratamento sendo que o resultado f i c a em r A . A
operação seguinte trabalha com o novo conteúdo de r A .
tu ação dos operadores :
adição: s e a magnitude do resultado f o r maior que
o permitido o indicador de "overflow" é li -
gado e permanece no acumulador o valor r e - manescente do resultado que couber em 5 by
t e s . A par te mais s ign i f i ca t iva f i c a r á em
um regis t ro esquerda de A.
Se o resultado f o r nulo o s i n a l do acumuda -
dor não é alterado.
subtração: mesmo procedimento da adição.
multiplicação: a multiplicação é fetuada sempre o r A
e uma variável. O resultado obtido é arma-
zenado em 1 0 bytes ( r A e r X ) e os bytes me
nos s ign i f ica t ivos ficam em r X . O s bytes
de s i n a l recebem o s i n a l algébrico do prg
duto .
divisão: o valor em r A e r X , t ratado com um número
de 1 0 bytes com o s i n a l de r A , 6 dividido
pelo v a l o r da v a r i á v e l . Se a v a r i á v e l f o r
i g u a l a zero ou o quociente p r e c i s a r de
mais de 5 bytes p a r a armazenar s e u v a l o r ,
r A e r X ficam com valores inde f in idos e é
l igado o indicador de "overflow". Caso
c o n t r á r i o o quociente f i c a em rA e o r e s t o
em r X . O s i n a l de rA é o s i n a l a lgebr ico
da operação e r X recebe o s i n a l de r A , an 7
t e r i o r à divisão .
deslocamento : e m PLMIX o s deslocamentos são operado -
r e s b i n á r i o s . Maiores de ta lhes sobre a tua - ção dos operadores e s t ã o em 11.2.3.9.
Exemplos
Suponha as declarações; :
WORD VAR;
BYTE (3:4) ABC;
CONSTANT MAX = 100;
ARRAY 5 WORD A
RECORD NO:
.1 WORD I N F O
.1 WORD PONT
.2 BYTE ( 1 : 2 ) ESQ
.2 BYTE (3:4) D I R ;
ARRAY 3 RECORD TIPO: STRUCTURE NO;
EQUATE I = R I 1 ;
RAC : = - ABC LDN ÃBC ( 3 : 4 )
RAC : = RAC * A RI^] MUL A f 4
RAC : = RAC SLA 2 + NO.DIR SL A 2
ADD NO ( D I R )
RAC : = TIPO.DIR[~ RI^] /~r~-! -5 , lU2] ENT1 3
LDA TIPOJ (DIR)
ENT2 MAX
INC2 5
D I V A I 2
RAC : = VAR+MAX*ABC-A [I] + I LDA VAR
INCA MAX
MUL A B C ( 3 : 4 )
SUB A, 1
INCA 0 11
RAC : = TIPOJPONT[A[I]-MAX-RI~,RI~] LD2 A 1 1
DEC2 MAX
DEC2 0 1 3
LDA TIPO ,2 (PCNT)
RAC : = - 3 5 0 + MAX / VAR
RAC : = -I + RI^ - AIRIS]
ENNA 2 5 0
D I V VAR
C A P Í T U L O I V - - - - e - - - -
ESTRUTURA DO COMPILADOR
IV. 1. - ASPECTOS GERAIS
O compilador PLMIX é um t r a d u t o r de um pas -
so. Em uma passagem pelo programa a s e r compilado reconhece
os símbolos, r e a l i z a a n á l i s e s i n t á t i c a , cons t ro i t a b e l a de
símbolos, r e so lve r e f e r ê n c i a s , a s s i n a l a e r ros e g e r a código - obje to .
A compilação em um passo f o i p o s s í v e l devi - do à s c a r a c t e r i s t i cas da linguagem de t e r todas as v a r i á v e i s
declaradas e d ispensar otimização de código. Para cada coman -
do da linguagem e x i s t e uma tradução de f in ida , de modo que a
otimização de código deverá s e r f e i t a pe lo próprio programa -
dor. O uso p r e v i s t o de l inguagens de médio n í v e l , t i p o PBMIX,
exige que a otimização de subexpressões e a l t e r a ç õ e s da e s t r u -
t u r a do programa visando otimização de código sejam t ã o r a d i -
ca i s que não é poss íve l efetuá- los automaticamente durante a
compilação , a custos razoáveis (Knuth 5 ] ) . A ex igênc ia de declaração de todas a s va -
r i á v e i s e r ó t u l o s a serem usados no programa, f a c i l i t o u a e s -
c r i t a do compilador permitindo s a b e r , a cada momento, o cÓdi -
go a s e r gerado.
IV. 2. ANALISADOR - L ~ X I C O
A função b á s i c a do ana l i sador l é x i c o é exa -
minar o t e x t o fon te e devolver o próximo símbolo te rminal
(" token") ao ana l i sador s i n t á t i c o . O s comentários e os b ran -
cos são reconhecidos pe lo anal i sador l é x i c o e não são subme -
t i d o s ao a n a l i s ador s i n t á t i c o .
Entidades s i n t á t i c a s como i d e n t i f i c a d o r e s ,
constantes numéricas e cadeias são reconheci das e devo.lvidas
ao ana l i sador s i n t á t i c o com uma codif icação numérica, as s i m
como as pa lavras reservadas e os símbolos e s p e c i a i s que t a m -
bém são def in idos como símbolos te rminais .
Para determinar s e uma sequência de ca rac -
t e r e s r ep resen ta um i d e n t i f i c a d o r , uma p a l a v r a reservada ou
um i d e n t i f i c a d o r de cons tante , o ana l i sador l éx ico consu l t a a
t a b e l a de símbolos, que guarda informações sobre uma determi -
nada sequência de c a r a c t e r e s .
No que concerne ao ana l i sador l é x i c o a t a -
b e l a de símbolos é uma t a b e l a t i p o "hashing" com a e s t r u t u r a
def in ida em I V . 4 . 1 . e que u t i l i z a a função abaixo para ca lcu -
l a r o .endereço de en t rada na t a b e l a e o incremento para caso
de co l i são (endereço a b e r t o com hash duplo) . O s 10 by tes r e -
servados p a r a o i d e n t i f i c a d o r são numerados a s e g u i r , p a r a f a -
c i l i t a r a descr ição do cá lcu lo .
NOME [O : 161 = NaME [O : 161 $ NOME [16 : 161 0 NOME 1132 : 161 @ NOIE [4 8 : 161 +
Q NQME c64 : 161
~ ~ [ 0 : 1 6 ] = NOME[^:^ ] * NOME[~O: 61
ENDEREp = NOME c4 : 81
INcREME'I)310 = NOME c12 : 47
No i n l c i o da compilação a t a b e l a de símbolos
contém todas as pa lavras reservadas, guardadas em endereços c a l -
culados pelo método de Brent C2 3] . O ana l i sador l é x i c o reconhece os elementos
gramat ica is da linguagem def in idos p e l a s segu in tes r eg ras
r eg ra -- c8 digo - - informação adic ional
1 -<le t ra>- i I i d e n t i f i c a d o r entra& tabela shboios
I i d e n t . cons t a n t e
numero
3 - v L c a r a t e r Jv - c a r a c t e r em cadeia
v a l o r constante
v a l o r
caracter
regra
1
BEGIN
END
informação adicional -
1
palavra reservada
r e g r a
ARRAY
RECORD
STRUCTURE
CASE
ON
GOTO
WAI T
INPUT
OUTPUT
CHAR
NUM
OF
MOVE
TO
FOR
ENDRI 1
REPEAT
UNT IL
código
pa lavra reservada
informação a d i
c i o n a l
r e g r a --
TIMES
WHILE
DO
STEP
I F
THEN
TRACEON
TRACEOFF
CLOCK
OUTCOUNTER
R J
PROCEDURE
BYTE
WORD
LABEL
EQUATE
CONSTANT
COUNTER
có di go -- informação a d i c i o - na1
pa lavra reservada
r e g r a
mADY
B USY
I O C
RI 5
RI 6
O.VFL
NOTOVF
EQ
GE
LT
LE
ELSE
RX
c6 digo
pa lavra reservada
informação ad ic iona l -
regra --
S L A
SRA
SLAX
SRAX
SLCAX
SRCAX
RAC
VALUE
POS
NE G
ZERO
NPOS
NNE G
código - informação adicional
palavra reservada
NZERO
Para as regras número 1, 2 , 3 , 6 , 13 e 1 4
são uti l izados automatos f i n i t o s . Para as regras nÚmero 4 ,
5 , de 7 a 1 2 e de 15 a 1 9 é u t i l i zada a tradução d i r e t a , v is -
t o serem símbolos com um só elemento e que não dão origem a
dúvidas .
Para as r eg ras a p a r t i r do n h e r o 2 0 , a s
pa lavras reservadas in ic i a lmen te são reconhecidas como i d e n t i -
f i cadores e depois recebem codi f icação c o r r e t a após consu l t a à
t a b e l a de s h b o l o s . Procedimento i d e n t i c o ocorre para i d e n t i f - i
cador de cons tante .
É f e i t a uma deteção dos e r r o s que ' indepen -
dem do contexto, t a i s como c a r a c t e r e s i n v á l i d o s e i d e n t i f i c a d o -
r e s com mais de 10 l e t r a s .
I V . 3 . ANALISADOR - SINTATICO
O ana l i sador s i n t á t i c o usa o método da ma -
t r i z de t r a n s i ç ã o (Gries C9] ) para f a z e r o "parsing" do progra -
ma. Trata-se de um método "bottom-up" com a n á l i s e f e i t a d e t e r -
minando-se repetidamente o "handle" (u) da forma sen t e n c i a1
que e s t á sendo ana l i sada e reduzindo-o a um não-terminal U, - u
sando a r e g r a U: : = u. O método é essencialmente de te rmin í s t i -
co e o tempo de "parsing" é proporcional ao comprimento do t e x -
t o fonte .
O método exige que a gramática o r i g i n a l es -
t e j a na forma de gramática de operadores ( G r i e s ) e que p e r -
tença à c l a s s e de gramática t r a t á v e i s por matr iz de t r a n s i ç ã o .
in ic ia lmente é f e i t a uma transformação na gramática de modo a
reduz i r o comprimento dos lados d i r e i t o s das produções a l i m i -
tes i n f e r i o r e s ou i g u a i s a 3 símbolos, a t r avés d a adição de
novos não-terminais denominados "não-terminais e s t r e l a d o s " .
IV . 3 . 2 . GRAMTICAS DE MATRIZ DE TRANSIÇÃO
Para usa r o método de matr iz de t r a n s i ç ã o é
necessá r i a que a gramática de def in ição da s i n t a x e da l ingua -
gem s e j a uma gramática que chamaremos de "matr iz de t r ans ição"
(GMT) . Uma GMT é uma gramática de operadores ( 9 0 ) com algumas
r e s t r i ç õ e s .
a) Se ja G ( N , C , P , S ) uma gramática l i v r e
de contexto onde:
1. N é um conjunto f i n i t o de simbolos não
terminais
2 . C 6 um conjunto f i n i t o de símbolos t e r -
minais e N C = g. *
3 . P é um subconjunto f i n i t o de N x ( N U C) ;
um elemento ( a , $ ) em P é e s c r i t o como
a +- 6 e é chamado de produção
4 . S é um símbolo de N chamado de s h b o l o
i n i c i a l .
b ) Sejam .U, V e W , a representaçãc de s i m
bolos não terminais ; a , b , c a represen -
tação de simbolos te rminais e a , 8 , y , 6
a representação de formas s e n t e n c i a i s
+ que são subconjuntos de ( C N ) .
c ) Se ja U* a representação de um não- termi -
na1 es t r e l ado . Estes não- te rminais são
- gerados quando a gramática o r i g i n a l e
transformada conforme o algoritmo de - s
c r i t o por Gries E9] , página
d) Se ja P R (T ) o conjunto dos predecessores
de T:
PR (T) = { T ~ I . . . TIT. . . é uma forma s e n t e n c i -
a i I
e ) G R A ~ T I C A DE OPERADORES
G é uma GO s e não e x i s t e e m P nenhuma pm -
dução da forma U -+ . . . VW . . . , onde V
e W são não t e rmina i s (
f) GRAMÁTICA DE MATRIZ DE TRANSIÇÃO
G é uma GMT s e e l a f o r uma GO e obedecer
às segu in tes condições a d i c i o n a i s :
condição 1:
- para cada par . (U* , T ) no máximo uma das
relações abaixo é válida
a) existe a regra
U -t U*, V E P R ( T ) , U é Único
b) existe a regra
c ) existe a regra
condição 2:
- para cada t r i p l a (U* , U , T ) no máximo
uma das três relações abaixo prevalece :
a ) exis te a regra
U e U2 únicos 1
b) exis te a regra
* U; -+ U*U2T, U2 => U; U2 é Único
c) existe a regra
U; + U2T, U* E P R ( T ) , U2 é único
I V . 3.3. DETERMINAÇÃO' DA MATRIZ DE TRANSIÇÃO
O cá lculo da matr iz de t r a n s i ç ã o envolve , in ic ia lmente , a transformação na gramática o r i g i n a l a t r á v e s
da introdução dos não-terminais e s t r e l a d o s . A gramática t r a n s -
formada, chamada de gramática aumentada de operadores é eq.ui -
va len te à gramática o r i g i n a l .
Utilizamos pa ra o cá lculo da matr iz de
t r a n s i ç ã o o gerador de ana l i sadores s i n t á t i c o s "NHÃONHÃO"
(Simone r']) que nos fornece a gramática aumentada, a mat r iz
de t r a n s i ç ã o compactada e seu método de acesso.
I V . 4 . C ~ D I G O OBJETO E ALGUMAS ROTINAS SEMANTICAS
Para o r i e n t a r o p ro je to da linguagem e a
geração do código foram u t i l i z a d o s os postulados: f e i t o s por
Wirth ['I para o p r o j e t o do PL360 :
1 - i n s t ruções que expressam operações
sobre dados devem corresponde:r, de ma -
n e i r a Õbvia, à s i n s t r u ç õ e s de máquina.
Sua e s t r u t u r a deve s e r t a l que possa
s e r decomposta em elementos e . s t ru tu ra -
i s , cada um correspondenfio diretamente
a uma Gnica ins t rução .
2 - nenhuma u t i l i z a ç ã o de memória deve s e r
ocul tada do programador. Em p a r t i c u l a r
o uso de r e g i s t r o s deve s e r e x p l k i t a -
do no programa . 3 - o con t ro le de sequência deve e s t a r ex -
pressa implicitamente na e s t r u t u r a de
c e r t o s comandos.
IV .4 .1. ESTRUTURA DOS DADOS NO COMPILADOR
a r r a y MEMO L0:3999]
s ign i f i cando um v e t o r de 4000 posições com elementos de t a -
manho de 32 b i t s .
1 .l. ~ e p r e s e n t a ç ã o p a r a ins t rução
S - s i n a l (00 - p o s i t i v o e 1 0 negat ivo)
AA - endereço
I - r e g i s t r o de í n d i c e
F - modificador
C - código
No compilador se rá usada a seguinte notação:
S ( X ) = MEMO[IX]. [31:2]
A A ( X ) = MEMO[X]. [29:12]
I (X) = MEMO Lx] . [17:6]
F (X) = MEMO[X] . [11:6]
c ( x ) = MEMO[X] [5:6]
1 . 2 . ~ e ~ r e s e n t a ç ã o para dados
A s variáveis são alocadas a p a r t i r do endere -
ço zero da memória.
são alocadas todas as variáveis e procedimen -
t o (variáveis e instruções) e após são alocadas as instruções
do programa propriamente di tas .
A s variáveis que representam expressão l i m i -
t e de comandos "FOR" ocupam posições de men6ria entre as i n s t r u -
çoes.
Uma alocação t í p i c a de memória é apresentada
no esquema.
1) endereços de variáveis t ipo
WORD, BYTE, ARRAY, RFCORD
ARRAY RECORD, TABELA CASE
parâmetros
forma is 1
variãveis locais
t i p o (1)
(se houver)
in s truções 4
variáveis t ipo (1)
procedimento
i n s t ruç Ões
2. P i l h a do compilador
a r r a y STACK D: 2001
Representando um a r r a n j o de 200 elementos com comprimento 9:
b i t s cada. E s t a p i l h a conterá os não-terminais e s t r e l a d o s
(U*) i n d i c a t i v o s da porção esquerda do t e x t o ainda não com -
pletamente reduzida, para p e r m i t i r o tratamento de um
"handle" mais à d i r e i t a no t ex to . O va lo r 200 poderá ser a 1 -
te rado durante geração do compilador.
3 . P i l h a de Ponte i ros
a r r a y STACKPONT [O : 2 001
Representando 200 elementos cada um de 12 b i t s . O STACKPONT
6 uma p i l h a p a r a l e l a a STACK. Para cada e s t r e l a d o na p i l h a
STACK, STACKPONT aponta para uma á rea a u x i l i a r com informa -
çÕes que foram guardadas quando o e s t r e l a d o en t rou na p i l h a .
STACKPONT [x] = O s i g n i f i c a que não há informação na á rea
a u x i l i a r .
4 . P i l h a com informações
a r r a y AREA [0:600]
Representando 6 00 elementos. de 32 b i t s . Guarda informações
de a t r i b u t o s herdados (Kennedy [I8]) , ponte i ros p a r a memória
ou para a t a b e l a de símbolos.
5. Tabela de s h b o l o s
a r r a y TABSIM [0:255]
Representando um a r r a n j o com 256 elementos com 1 4 4 b i t s c a -
da um. A t a b e l a de simbolos contém informações sobre a s p a -
l a v r a s reservadas e o s i d e n t i f i c a d o r e s declarados. A d i s -
t r i b u i ç ã o das informações é f e i t a nos seguin tes campos :
b i t O 47
b i t 48 79 80 8 3 8 4 8 5 8 6 9 0 9 1 95
b i t 9 6 1 0 1 1 0 2 113 1 1 4 125 126 133 134 1 4 1 1 4 2 143
(1) NOME(x) =TABSIMB[X~. [0:80-I - nome do i d e n t i f i c a d o r
( 2 ) TIPO (x ) =TA'B.SIMB [x] . [80 : 41 - t i p o da va r i áve l
(3) JADEF (x)=TABSIMB [x] . 684 : 11 - se i g u a l a 1 e s t ã o completas
a s informações sobre o iden-
t i f i c a d o r . Caso c o n t r á r i o , é
i g u a l a D.
( 4 ) OCUPADO ( X ) = TABSIMB [x] . [85 : l] - se i g u a l a 1 i n d i c a en t rada
na t a b e l a ocupada. Caso con - t r á r i o i g u a l a O .
( 5 ) BYTESQ(X) = TABSIMB [x] . [86:5] - número do b i t m a i s a esquer -
da do campo da pa lavra .
(6) NBYTES ( X ) = TABSIMB [x] . [91:5] - número de bytes a s e r e m u t i -
l i zados .
( 7 ) F ~ ( x ) = TABSIMB[X]. [96:6] - v a l o r do campo F do código do
record.
NPAL ( X ) = TABSIM[X] . [96 :61 - número de pakavras por nó do
record.
NPARM (X) = TABSIMB [x] . C96 : 6) - número de parâmetros do p r g
cedimento.
REGISTRO (X) =TABSIM[X] . [96 :6] - número do r e g i s t r o associado
- a v a r i á v e l t i p o EQUATE.
(8) ENDEREGO ( X ) = TABSIMBLX] . [102: 1 2 1 - endereço na m e m ó r i a
TAMARREC ( X ) = ?~IBSIMB[X] . 1102 : 1 2 1 - número de elementos de um ve -
t o r de records . CODIGO ( X ) = TABSIMB [x] . C102 :12] - código d a pa lavra reservada
(9 ) L I N K ( X ) = TABSIMB [x] . r114 :12] - l i gação para a m e m ó r i a
DIMENS ( X ) =TABSIME3 1x1 . C114 : 1 2 9 - número pa lavras vetor WORD
(10)LINKT ( X ) =TABSIMB [X] . r126 : 81 - l i gação pa ra t a b e l a de s í h o -
10s.
(~~)REPETIDO(X)=TABSIMB[X]. [134:8]- se d i f e r e n t e d e HEXWFF" api2. -
t a para e n t r a d a na t a b e l a
de símbolos de i d e n t i f i c a d o r
com mesmo nome.
( 1 2 ) SINALCTE (X) =TABSIMB [x] . L143 :2] - s i n a l de uma cons tan te
(13) VALORCTE(X.)=TABSIMBF.j. [96:30] - v a l o r de uma cons tante
Alguns campos s e superpõem, porque são mutuamente exclusivos,
minimizando a l a r g u r a da área ocupada.
Para cada t i p o de va r i áve l admissível na linguagem s ã o apre -
sentadas as informações armazenadas na t a b e l a de símbolos, - a
l é m do nome.
A s observações abaixo referem-se à t a b e l a na próxima fo lha .
(1) s e dent ro de record , aponta para próxima def in ição de n í v e l
(2 ) se dent ro d e record , aponta para nome do record
s e dentro de procedure, aponta pa ra próxima de f in ição de va -
r i á v e l 10 c a l .
( 3 ) l i gação para pr imeira pa lavra do record
( 4 ) s e dentro de procedure, aponta para próxima de f in ição de va -
r i á v e l l o c a l
( 5 ) l igação para pr imeiro parâmetro formal, s e houver. Se não , l i gação para a pr imeira declaração de va r i áve l l o c a l , s e
houver.
( 6 ) l i g a ç ã o pa ra a memória com a pr imeira ins t rução com re fe rên -
tia f u t u r a .
x - i rwresen ta presença de informação com conteúdo va r i áye l
PALAVRA 1IESERVATlA
WORD
BYTE
RECORD
ARRAY WRD I
AWIP;Y RECORD
PWXZmURE
LABFL
EQUATE
CONS?iIANT
YABE;LA CASE
COup.JTER
PARAM.mRM. WORD
PAF!AM.FORM.BYTE
i d
i d
i d
i d
i d
i d
i d
I i d
i d
i d
i d
i d
i d
i d
O
1
2
3
4
5
6
7
8
9
10
11
12
13
F1 = 5
F1 = X X
NPX
F1 = 5 X
N P X X
NPARM
X REGISTR.3
1
1
1
x
x
x
x
x
1
1
1
x
1
1
1
x
1
1
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
5
x
5
5
x
x
X
x
x
X
x
x
x
X
x(2)
~ ( 2 )
x(4)
x(4)
~ ( 4 )
x(5)
x(4)
~ ( 4 )
cdDrc0 X
ENDEXEÇO X
EJKEREÇO
X ENIEREÇO
X T.?mAXm
X ENIEREÇO
X
x
x
x
X
X
X LINK (1)
X
LINK (1) X
LINK (3) X
DIMENS X
LINK (3)
X
LINK (6)
x(4)
x(4)
x(4)
~ ( 2 )
~ ( 2 )
X
F1 = 5 X
F1
X
X
ImIxREÇO X
ENDEBFJÇO X
EJXEREp
I
X
m m s
LINK (6)
1 - NOME
2 - T I P O
3 - J A D E F
4 - OCUPADO
5 - BYTESQ
6 - NBYTES
7 - F1 , N P A L , NPARM, R E G I S T R O
8 - ENDEREÇO, TAMARREC , CÓDIGO
9 - L I N K , D I M E S
1 0 - L I N K T
11 - R E P E T I D O
1 2 - QINALCTE
6 . T a b e l a de códigos
array CODIGO [O : 73
R e p r e s e n t a n d o 7 e l e m e n t o s de 4 8 b i t s cada. A tabela geral de
códigos se encontra no apêndice. Para se c o m p r e e n d e r as i n -
f o r m a ç õ e s e m a l g u m a s r o t i na s é m o s t r a d a a e s t r u t u r a da tabe -
l a , e m se tratando de valores dos códigos e m relação aos re -
g i s t r o s . E x e m p l o : LOAD
CODIGO [1].[0:6] - LDA
C O D I G O [ l ] . [ i * 6 : 6 ] - L D i , 1 < - i < 6
CODIGO [I]. [42:6] - LDX
I V . 4 . 2 . - ALGORITMO DO COMPILADOR
O compilador recebe do gerador de ana l i sado -
res s i n t á t i c o s "NHÃONHÃO" (Simone L1 '1) a matr iz de t r a n s i ç ã o
com as informações sobre a r e l ação e n t r e cada (U*,U,T) e a r e -
dução a s e E efetuada. ~ l é m d i s so o gerador fornece uma i n d i c a -
ção do t i p o de redução a s e r efetuada:
> s e usadas a s condições a.1. ou a.2. da Sec.IV.3.2.1
f ls . 97 e 98.
= se usadas a s condições b.1. o u b . 2 . da Sec.IV. 3.2.1,
f l s . 9 7 e 9 8 .
< s e usadas as condições c.1. ou c. 2 . da Sec.IV.3.2.1
f l s . 97 e 98.
A compilação é i n i c i a d a com o de l imi tador
de programa ( $ ) na p i l h a STACK. Es te de l imi tador é o usado na
produção e x t r a da gramática: <S> + $ <programa> $ para permi -
t ir informar ao compilador a ocorrência do f i n a l f í s i c o do p q
grama.
A compilação é processada "token" a "token"
e quando é encontrado o "token" $ o anal i sador l éx ico informa
ao ana l i sador s i n t á t i c o o fim da ent rada . A compilação é enceg
rada, es tando o código o b j e t o pronto para a execução assim que
é encontrado " $ " , caso o programa e s t e j a c o r r e t o .
I V . 4 . 2 . 1 . ALGORITMO DE PARSING
O a lgori tmo de "pars ing" u t i l i z a uma p i l h a
para não-terminais e s t r e l a d o s , uma va r i áve l para não- terminal
simples e a matr iz de con t ro le . A cada momento tem-se o "es -
t r e l ado" (U*) no topo da p i l h a , a v a r i á v e l que rep resen ta a
úl t ima redução efe tuada ( U ) e. o símbolo enviado pelo a n a l i s a -
dor l éx ico ( T I . Fazendo-se uma entrada na matr iz p e l a l i n h a
correspondente a U* e coluna equ iva len te a T , obtém-se a redu -
ção a s e r usada. Para cada redução tem-se uma r o t i n a semânti -
ca associada e o teste para o não-terminal U. I s t o 6 o que
chamaremos uma r o t i n a pa ra a t r i p l a (U*, U , T ) . A decomposição do ana l i sador em d ive r sas
r o t i n a s , cada uma encarregada do tratamento de uma s i t u a ç ã o
p rec i sa (U*, U, T ) f a c i l i t a a determinação dos e r r o s , gerando
mensagens c l a r a s ao usuár io e procedimentos de recuperação de
e r ros convenientes.
I V . 4 . 2 . 2 . - ESQUEMA DO PROGRAMA -
s e r ã mostrado um esquema s impl i f i cado do
compilador usando a linguagem ALGOL para representá- lo .
begin
SCANNER;
while NAOACABOU do -- v
begin
T R I P L A ;
case RELAÇÃO - o f
begin
1: % re lação MENOR
SEMANTICA(URED) ;
PUSH;
U:= E P S ;
SCANNER ;
2: % r e l ação MAIOR
S E ~ N T I C A (URED) ;
U: = U W D ;
P O P ;
3: % r e l ação IGUAL
SEI!@&TICA (URED)
P O P ;
PUSH;
U: = E P S
SCANNER;
end; end -
en d -
% URED fornec ido pe -
10 gerador
% E P S s i g n i f i c a au- s6nci.a de s$mbolo
% e m V-.
SCANNER fornece o p r ó x i m o s í ' m b o l o , c o m o ex -
plicado na seção I V . 2 . e i n f o r m a quando t e r m i n a a cadeia de e n -
trada.
A r o t i n a T R I P L A fornece a relação e n t r e U*
e T e a redução URED. Para u m a relação MENOR, URED: : = U T I T ;
para MAIOR, URED: : = U* U I U* e para I G U A L , URED:: = U * U T ~ U * T .
SEMÂNTICA é a rot ina onde são t o m a d a s as
ações s e m â n t i c a s e gerado o código objeto. E m geral a cada URED
corresponde u m a ação s e m â n t i c a . A l g u m a s vezes para u m m e s m o
URED são t o m a d a s ações s e m â n t i c a s diferentes e m função de U*
ou u.
A e s t r u t u r a da ro t ina s e m â n t i c a se r e s u m e a:
case URED of -- -
beg - i n
URED2: case U of -- v
begin
end;
URED4 : case U* of
begin
end
UREDN
end
IV . 4 . 2 . 3 . ALGUMAS - ROTINAS SEMÂNTICAS
se rão apresentadas a s r o t i n a s semânticas r e -
l a t i v a s a c e r t a s produções da gramática aumentada, ref i le t indo
alguns comandos da linguagem e mostrando o código gerado, a s i -
tuação da p i l h a do compilador, das duas p i l h a s a u x i l i a r e s e da
memória.
A tradução dos comandos f o i apresentada na
de f in ição da linguagem, p a s é m achamos conveniente r e p e t i r e s t e
esquema para melhor compreensão das r o t i n a s d e s c r i t a s .
E s t a seção pretende apenas e v i t a r a exposi -
ção completa do compilador n e s t e t r aba lho , devido 5 s u a exten -
são. O programa completo e s t a r á disponível quando de sua implg
mentação no MITRA 15 do Laboratór io de ~u tomação e simulação
de Sistemas da COPPE-UFRJ.
DCL: = t r u e ; % acabou declaração de procedure e pog
% s o receber novas declarações
% r e t i r a r as v a r i á v e i s l o c a i s da t a b e l a de símbolos
DISP: = STACKPONT [TOP] ; % apontador para á rea onde
% e s t ã o informações a u x i l i a -
% r e s .
LK : = LINKT (AREA [DISP] ) ; % aponta p a r a pr imeiro ~ a r â -
% metro formal ( s e houver )
% ou p a r a pr imeira v a r i á v e l
% l o c a l .
TP : = TIPO (AREA [DISP] ) : % t i p o do i d e n t i f i c a d o r
whi le LK = 4 " FF"
do begin
% TP = 6 - procedure
% TP = 1 2 - p a r h e t r o formal word
% TP = 13 - parâmetro formal by te
then begin % retirar .da t a b e l a
OCUPADO (LK) = O ;
i f REP : = REPETIDO (LK) -I = 4"FF" % no caso de
then REPETIDO (REP) : = ~ " F F " % v a r i á v z l mm
end;
LK: = LINKT (LK) ;
% mesmo nome
% na t a b e l a
TP: = TSPO (LK) ;
end;
AREA
95: % < i n s t r u ç ã o >
175: % < i n s t r > : : GOTO < i d e n t >
i f AA1: = ROTULO (ENDER) 1 = - 1
then GERACODIGO (PC, O , AA1, O , 0 , 3 9 ) % IMP
else ERROM ( ) ;
observação : a r o t i n a ROTULO devolve em AA1 o endereço do l a b e l
< iden t> se este já t i v e r aparecido no programa. Se
e l e l i g a o Último desvio não resolv ido a e s t e , sen -
do que e s t e recebe 4"FF" no campo de endereço.
Se < iden t> não e s t i v e r numa deklaração LABEL, AA1
recebe o va lo r - 1.
Esquema quando r ó t u l o a inda não f o i d e f i n i -
<i dent:
TABS IMB
L I N K
3
188: % < i n s t r . j : : = REPEAT < i n s t r > UNTIL <condição>
% completar informação na Ú l t i m a i n s t r u ç ã o gerada
Esquema :
XXX < i n s t r >
AREA
XXX
PC -t
1 9 i n s -
t r u ç ão
REPEAT
188 = REPEAT < i n s t r > UNTIL
1 8 9 : % < i n s t r > : : REPEAT < r e q i > ' TIMES < i n s t r >
DISP : = STACKPONT [TOP] ;
C l : = C O D I G O [ ~ ,AREA[DISP + 111 ; % código para decre -
% m e n t a r e m função
% de < r e g i > .
GERACODIGO (PC, 0 , 1 , 0 , 1 , C l ) ; % DEC < r e g i > 1
C 1 : = CODIGO ,AREA [DISP + I]] ; % código de desvio
% e m função do <yegi>
E s q u e m a :
XXX < i n s t r >
D E C i 1
J i N N XXX
DECi 1 -
J i N N XXX
la. i n s t r
EPEAT
189 = - REPEAT < r e g i > TIMES
1 9 1 : % < i n s t r > : : = WHILE < c o n d > DO < i n s t r >
DISP: = STACKPONT [TOP]
GERACODIGO (PC, O ,AREA[DISP] , O , O , 3 9 ) ; % JMP
% c o m p l e t a r J i < c o n d > XXX
AA (AREA [DISP + 11 ) : = PC ; % xxx = PC
E s q u e m a : :
X Y Z "LDA"
" CMPA "
WWW J l < c o n d > XXX
XXX
JMP XYZ
1 9 1 = WHILE < c o n d > DO
i f AREA[DISP] = 1 % se = 1 -t var controle 6 < r e g i >
t hen begin
AA1: = AREA@ISP] .EE; % especificação dos c a m p o s
REG: = AREAEDISP] . RR; % da variável de controle.
GERACODIGO (PC , O , A A l , REG ,FD, 8) ; % LDA < v a r >
C1: = CODIGO ~ ~ , A R E A [ D I S P + 111 ; % INC ou DEC e m função
% do registro de cálculo .
i £ AREA[DISP + 21 > O % passo
them! begin
F1: = O ; % INC
F 2 : = 9 ; % J L E
end
else begin
F1: = 1; % DEC
F 2 : = 7; % J G E
e nd;
GERACODIGO (PC ,AREA [DI SP + 21 , O , F1 ,C1) ; % I N C < r e g > passo
% ou D E C < r e g > p a s s o
C1 : = CODIGO [8 ,AREA [DISP + 111 ; % CMP e m função de re -
% g i s t r o
% LIMITE
GERACODIGO(PC,O,AREA[DISP + 3 ] + 1 , 0 , ~ 2 , 3 9 ) ; % JLE O U
% JGE
E s q u e m a para estrelado 1 9 6
"LDA" < e x p r 2 > , % c a l c u l a valor i n i c i a l
STA < v a r > % i n i c i a l i z a var controle
"LDA" < e x p r 2 > , % c a l c u l a LIMITE
XYZ 1 I % endereço onde está armazenado LIMITE
XXX < i n s t r u ç ã o >
LDA < v a r >
INCA < e x p r c t e > % ou DECA
CMPA XYZ % compara com valor LIMITE
J L E XXX % ou JGE
AREA
(passo)
1 9 6 = FOR < i d e n t > : = < e x p r 2 > STEP < e x p r c t e > UNTIL < e x p r 2 > DO
95: % < i n s t r >
2 0 2 : % < i n s t r > : : E F < c o n d > THEN < h s t r >
I cálculo
% < i n s t r > : : I F Y THEN < e l s e c l >
% a t u a l i z a r J l < c o n d >
AA (AREA [STACKPONT [TOP] ) : = PC;
Esquema
WWW J ?<cond> XXX
< i n s t r>
XXX
AREA
20.2: I F <cond> THEN
instruções
THEN
b) IF <cond> THEN <elsecl>
< cond>
17 <cond> XYZ
< i n s t r >
WWW JMP XXX
X Y Z < i n s . t r >
XXX
STACK , STACKPONT e AREA
i g u a i s ao a n t e r i o r
XXX = P C -t
J M P XXX
NP: = * + 1:
DISP: = STACKPONT [TOP] + 1;
i f N P > NPARM
t h e n ERROM ( )
else b e g l n
<cond>
p a r t e I THEN
p a r t e
FASE
i f MEIO = 1 0 3 % < i d e n t >
then beg in
AREA [DISP] .EE: = ENDEREÇO ( E N D 1 ) ; % END1 entrada
STACK
AREA [DI SP] . FF : = F1 (END1) ; % na TABSIMB
% parâmetro formal
AREA[DIsP + 11 - .EE : = ENDEREÇO (ENDER) ; % ENDER en t ra -
AREALDISP + 11 .FF: = F1 (ENDER) % da na TABSIMB
DISP: = * + 2; % param. r ea l
RET: = * + 1; % num param. com passagem "by vaiue - % resu l t "
end;
E N D 1 : = L I N K T ( E N D 1 ) ; % próximo parâmetro formal
AREA
I STACKPONT I I
137: -% <express>:: = <expri>,<regi>
% o reg is t ro onde será efetuado o cálculo da expressão
% só é conhecido após gerado o código.
% Destle modo o código é gerado supondo ser calculado' em
% RAC e depois é somado a cada código o valor do
endereço idc ic pro cedure
parâmetro formal
pargmetro rea l
foram passa parâmetro fórmal -
dos "by va - parãmetro r e a l lle resulltlt
AA
AA
AA
AA
FF
FF
FF
FF
STACK
316
% r e g i s t r e de índ ice para dar c c6dige real.
f o r I : = AREA [STACKPONT [TOP - 111 s t e p 1 u n t i l
AREA [STACKPONT [TOP] 1
do C ( 1 ) : = * + REG;
AREA
S TACKPONT
177: %
STACK
i f NP = NPARM
then begin
D I S P : = STACKPONT [TOP]
GERACODIGO (PC , O ,AREA [DISP] , O , O , 39 ) ; % JMP pa ra sub -
% r o t i n a
% a t r i b u i ç ã o de re torno aos parâmetros r e a i s
% que são passados por va lor - resul tado
f o r J: = 1 s t e p 1 u n t i l RET
do begin
' > % LDA L-) PARAM FORMAL
AA1: = AREA [DISP + J] .EE ;
FD : = AREA [DISP + J] .FF;
GERACODIGO (PC,O ,AA1 , O , F D , 8 ) ;
% STA @ PARAM REAL
A A ~ : = AREA[DISP + J + 11 .EE;
FD : = AREA[DISP + J + 11 .FF;
GERACODIGO(PC,O , A A ~ , O , F D , 2 4 ) ;
end;
STACKPONT
I enderep inicio pmcedure
p*tm formal
parãn-etro real
181: % CASE < r e q i > / < i d e n t > E BEGIN < l i s t a i n s t r > j3NJ
% pr imeira en t rada na t a b e l a dase é o endereço d a pró -
xima i n s t r u ç ã o após o CASE
% a t u a l i z a r endereços dos desvios de s 6 d a p a r a cada
% opção do CASE
EN D1: = AREA [DI SP + 21 ; % do p r i ~ i r o desvio n% resolvi-
do begin
T: = END1;
END1: = AA ( E N D 1 ) ; % próximo desvio
end
u n t i l E N D 1 = 4"FFF" ;
ECASE: = f a l s e ;
AREA
n? de
i n s tr
C A S
ENDER
T ! E
19 J M P
n% re -
solvi-
do
JMP €-
JMP 4
if TIPO (ENDER) -I 7 o r TIPO (ENDER) -I = 11
then ERRO (
else i£ JAEXISTE(ENDER)= 1 % dupla ocorrência
then ERRO (
else begin
JAEXISTE (ENDER) : = 1;
ENDEREÇO (ENDER) : = PC;
i f TIPO (ENDER) = 1 % contador
then begin % gera c ~ d i g o i n s t r . LOOP
MEM3 [PC] . C31 : 201 : = 0 ; % i n i c i a l i za contador
MEMO[PC]. [ll:6]: = 4 ; % FD = 4
MEMO[PC]. [5:6]: = 5; % C = 5
end;
% resolvendo as r e fe rênc ias fu tu ras
E N D ~ : = LINK (ENDER) ;
i f E N D 1 7 = 4 "FFF"
then do % exis tem re fe rênc ias
begin
T: = A A ( E N D 1 ) ;
A A ( E N D 1 ) : = PC;
E N D 1 : = T
end
u n t i l E N D 1 = 4"FFF";
observação: mesmo esquema de -- GOTO<ident>.
I V . 5. TRATAMENTO DE ERROS
Tratamento de erros é o processo de determi - nar como cont inuar a a n a l i s a r o programa fon te após t e r s i d o
encontrado um e r r o .
O s erros podem ser c l a s s i f i c a d o s e m erros
l é x i c o s , s i n t á t i c o s ou semânticos, dependendo da f a s e da anã -
l ise e m que ocorrem.
a. Erros na f a s e de ~ n á l i s e Léxica
A função do anal i sador l é x i c o é t ransformar
uma sequ&cia de c a r a c t e r e s , que consti tuem o programa f o n t e ,
em uma sequência de símbolos (" tokens") . Cada c l a s s e de símbo - 10s tem uma especi f icação que é um conjunto regu la r . Sk após
algum processamento o anal i sador descobre que o c a r a c t e r OU
conjunto de c a r a c t e r e s não pertence a nenhuma c l a s s e então 5
chamada uma r o t i n a de e r r o . O t ra tamento de e r r o s na f a s e l é - x i c a s e reduz a s a l t a r o s ca rac te res e r rados a t é achar um novo
símbolo. E s t e tratamento simples é devido a f a l t a de e s p e c i f i - cação no n í v e l l éx ico da linguagem.
b. Erros na Fase de Anál ise s i n t á t i c a
Frequentemente a p a r t e r e l evan te da deteção
e tratamento de e r r o s no processo de compilação ocor re n a anã -
l i s e s i n t á t i c a . Uma das razões é o a l t o grau de prec isão que
pode s e r alcançado na espec i f i cação da s i n t a x e das l inguagens
usando-se gramáti cas l i v r e s de contexto.
O a n a l i s a d o r s i n t á t i c o d e t e t a um e r r o qu-
do não! h á uma t r a n s i ç ã o l e g a l de sua configuração p a r a o u t r a , que 6 determinada por seu e s t a d o , o conteúdo da p i l h a e o s i m -
bolo recebido.
Existem vár ios estudos sobre t ra tamento de
e r r o s incluíndo:
1. correção de nomes de i d e n t i f i c a d o r e s com
l e t r a s aparentemente t rocadas ou com omissão ou inse rção de
uma l e t r a . A recuperação f o i t r a t a d a por Freeman [l 21 e Morgan
3] com complexidade que só é ap l i cáve l e m es tudos t e ó r i c o s .
2 . Tratamento baseado na d i s t â n c i a de
Hamming (Gries ["I) com algokitmos da ordem n3 l o g n de tem -
po, sendo n a cadeia que e s t á sendo anal i sada .
3 . ~ e f i n i ç ã o de gramática com produções ex -
t r a s p a r a e f e t u a r t r ans ições de es t ado mesmo na presença de
e r r o . Neste caso a gramática torna-se muito ex tensa acaracetan - do compiladores que ocupam muito espaço e l e n t o s .
4 . ~ n t r o d u ç ã o de aequência de simbolos t e r -
minais na cadeia de en t rada ou de símbolos na p i lha . E s t e e s -
quema pode i n t r o d u z i r uma sequência imprevis ta de e r r o s que
podem não serem detetados na compilação e gerarem um programa
o b j e t o com l ó g i c a d i f e r e n t e da pre tendida pe lo programador e
impercept ível p a r a e s t e .
5. "Panic .Mode" - subkração de símbolos da
en t rada e da p i l h a d té achar uma c o n f i g u r a ç k topo da p i l h a - símbolo de en t rada que permita o prosseguimento da a n á l i s e . O método é simples de implementar garant indo uma rapidez de
an:álise. En t re tan to podem ser in t roduzidos e r r o s devido a
eliminação de algumas informações e da presença de algumas - a
ções semânticas que já haviam s i d o tomadas e que não foram
d e s f e i t a s . E s t a t é c n i c a f o i u t i l i z a d a no compilador XPL desen
volvido por McKeeman e Horning 57. O nome i r o n i c o f o i dado
ao método por Gries '1 . A u t i l i z a ç ã o do método de matr iz de t r a n s i -
ção permite que o e r r o s e j a detetado o mais cedo p o s s í v e l - e
vitando reduções e ações semânticas desnecessár ias . O acesso
à matriz &t ravés da l i n h a que corresponde ao e s t r e l a d o no t o -
po do s t a c k e da coluna r e f e r e n t e ao terminal recebido acusa ou
uma re lação c o r r e t a ( < O , z , O > ) ou uma re lação vaz ia ( ) . Es te
Ú1.timo caso representando um e r r o .
Segundo G r i e s ['I mais d a metade dos elemen -
t o s da matr iz representam pares i l e g a i s e assim podem ser dete -
tadas v á r i a s condições de e r r o s d i f e r e n t e s .
Supondo um p.asso t zp ico do anal i sador no m é -
todo de matr iz temos:
p i l h a e n t r a d a a se r ana l i sa -
da
Podemos d i s t i n g u i r t r ê s t i p o s de e r r o s :
2. S, - > T1 mas não e x i s t e nenhuma regra do t i p o
U:: = Sk. . . S, t a l que Skel se relacione. com
U e com TI. I s t o quer d i z e r não e x i s t e a t r i p l a
3. S, i T i mas Sk.. .S,T não é pre f ixo do lado d i r e i -
to . I s t o é não e x i s t e Uf: : = U*T1, onde U*
Para o s t rês t i p o s de e r r o s o - compilador usa
a t é c n i c a de "panic mode" procurando na e n t r a d a o simbolo END
ou ; , fazendo a v a r i á v e l U = ' ' e descendo a p i l h a a t é achar
um e s t r e l a d o U* t a l que exista uma re lação e n t r e U* e TI.
c . Erros na Fase de ~ n á l i s e semântica
O tratamento de e r r o s na f a se semântica a i n -
da 6 f e i t o de um modo ad hoc. A recuperação 6 f e i t a basicamen - te p a r a i d e n t i f i c a d o r e s não declarados que nes te caso são i n - cluídos na t a b e l a de simbolos pe lo ana l i sador , com a s informa -
ções mais adequadas ao contexto onde s e encont ra , porém com u m
informação e x t r a - .de que f o i colocado sob condição de e r r o
(Aho [l 6] )
O tratamento proposto nes te compilador b a - se ia - se na e s t r a t é g i a de "panic mde" sendo que exis tem duas
r o t i n a s d i s t i n t a s de t ra tamento de e r r o .
A ERROM é chamada quando ocor re e r r o s e m k - t i c o na redução maior ( - > ) . s in tá t icamente a f r a s e e s t á c o r r e -
t a mas exis tem informações incompatíveis. A ação tomada é aban - donar a redução efe tuada ( U -+ ' ' ) e prossegui r a a n á l i s e com
o símbolo do topo da p i l h a e o símbolo l i d o .
Quando o e r r o ocor re no i n i c i o ou no meio
de uma produção, i s t o é, numa re lação < * ou - devem s e r e l i m i - nados te rminais da entrada e elementos da p i l h a a t é que s e j a
encontrada uma t r i p l a U*UT que permita o prosseguimento da anã - l i s e . A r o t i n a ERRO recebe informaçÕes sobre quais te rminais ~p -
dem s e r a c e i t o s e paralelamente quais e s t r e l a d o s devem s e r
acessados na p i l h a para s e ter uma t r i p l a co r re ta . E s t a i n f o r -
mação permite procurar símbolos além de E N D e ; t a i s como I
),I-
AVALI AÇÃO DA LINGUAGEM -
se rão apresentados alguns algoritmos que s e
encontram nos l i v r o s de Knuth [ 3 - 5 ] e OS programas e s c r i t o s em
MIXAL r3] (seção 1.3.2. ) p a r a resolvê-los .
Para cada algoritmo proposto se rão e s c r i t o s
dois programas e m PLMIX - um deles s e g u i r á exatamente o a lgo -
ritmo e o o u t r o r e so lve rá o problema segundo as t écn icas de
programação e s t ru tu rada . ~ p 6 s cada programa será apresentado o
código por e l e gerado e s e r ã o f e i t o s alguns comentários, porém
não s e r á anal i sado o tempo de execução para e s t e s programas.
Algori tmo pa ra a t r a v e s s a r uma árvore b i n á -
r i a em ordem s i m é t r i c a . O algoritmo e s t á na página 317 e O
progGama na página 323 da r e f e r ê n c i a r3 ] . Algoritmo T ,
T é o pon te i ro para a árvore b i n á r i a segun -
do a f i g u r a V.1. O algoritmo v i s i t a todos o s nós da árvore em
ordem s i m é t r i c a , fazendo uso de uma p i l h a a u x i l i a r A.
Tl.[inicializar]. Tomar a pi lha A vazia.
I n i c i a l i z a r a variável de ligação
T 2 . [P = x?J Se P = X vá para T4.
T3. b i l h a -+ P] (agora P aponta para uma árvore b inár ia
não vazia a s e r atravessada) .
vá para T2
T4 . CP <= pilha] s e A e s t i v e r vazia o algoritmo termina;
caso contrário faça P <= A.
T6. [v i s i te P] " v i s i t a r " NO [P] . P + RUNK (P) . vá para T 2 .
P +- LLINK (P )
vá para T2
Figura V.1 .
V.1.1. PROGRAMA T
A p i l h a f i c a nas posições A i 1, A + 2 , ... A + MAX; Pode o c o r r e r "OVERFLOW" se a p i l h a c resce demais. r16
é o ponte i ro para a p i l h a . r15 r P. O programa es tá l igeiramen -
t e d ' i ferente do algoritmo T , e d e s t e modo não é f e i t o o teste
para p i l h a vaz ia quando v a i de T3 pa ra T2 para T4.
E s t r u t u r a do nó de informação
I I LTAG 1 I L L I N K I I INFO1
LLINK EQU
RLINK EQU
T 1 LD5
T2B J5 Z
ENT6
T3 DEC6
J6NN
INC6
ST5
LD5
T2 A J5NZ
T4 LD5
DECG
1 :2
1 :2
HEAD (LLINK)
DONE
o
MAX
OVERFLOW
MAX+1
A , 6
0 ,5 ( L I N K )
T3
A , 6
1
T 1 i n i c i a l i z a r P + T
p a r a s e P = X
T3 p i l h a < = P - p i l h a cheia ?
Se não, i n c r e m n t a r
pon te i ro
guarde P na p i l h a
P -+ LLINK (P)
pa ra T3 se P f X
T4 P < = - p i l h a
decresce p o n t e i r o p i lha
1 2 T5 JMP V I S I T
1 3 LD5 1 r 5
1 4 T2 J 5 N Z T3
1 5 J6NZ T4
DONE ---e
T5 v i s i t e P - P + RLINK(P)
T2 P = A?
teste se p i l h a v a z i a
V. 1 .2. - PROGRAMA EM PLMIX , SEGUINDO 0 ALGORITMO T
begin
constant MAX = ? , TAMARV = ? ; % i nde f in ido no -
array TAMARV record ARVORE : -- --
.1 WORD ESQ
.2 BYTE (0:O) LTAG
. 2 BYTE ( 1 : 2 ) LLINK
. 2 BYTE ( 3 : 5 ) ' I N F 0 1
.l WORD DIR
. 2 BYTE (0:O) RTAG
.2 BYTE ( 1 : 2 ) RLINK
programa M I X
. 2 BYTE ( 3 : 5 ) INF02;
w o r d MAXIMO = MAX; -- record HEAD : s t r u c t u r e ARVORE ; -- - arrax MAX w o r d -- A; % p i l h a
eguate PTR = R I 6 , -
label DONE, T 3 , T4; --
HEAD.LLINK: = O ; % não será mostrado o código gerado
% pois Knu th assume esta inf.ormação
% já pronta .no s eu programa.
% programa para algori tmo T
P : = HEAD.LLINK; . % P + T
i i f P zero then goto DONE; -- -- % pare s e P = A
PTR: = 0 ;
T3 : PTR: = PTR - MAX; % v e r i f i c a r t ransbordo
i £ PTR poç then goto OVERFLOW - --
A~PTR] : = - P ; % p i l h a < = P
P: = ARVOF~.LLINK[P] ; % P -+ LLINK(P)
i £ P nzero then goto T 3 ; -- % para T 3 s e P f X
T4: P : = A[PTR] :; % P -+ p i l h a
PTR: = PTR - 1;
V I S I T A ; % v i s i t e P
P : = ARVORE. RLINK [P] ; % P + R L I N K ( P )
i £ P nzero then goto T 3 ; -- - -- % s e P f A vá para T 3
i£ P T R nzero then goto T 4 ; % - -- - v-
DONE :
end
~ r a d u ç ã o do programa acima em MIXAL
S T 5
J 5 N Z
JMP
ENT6
DEC6
JGNP
JMP
INC6
S T 5
HEAD ( 1 : 2 )
* + 2
DONE
o
MAX
* + 2
OVERFLOW
MAX + 1
A, 6
LD5
5 5 Z
JMP
T4 LD5
DEC6
JMP
LD5
J5 Z
JMP
J5Z
JMP
DONE . . .
0,5 ( L L I N K )
* + 2
T 3
A, 6
1
V I SI TA
1 , 5 ( R L I N K )
* + 2
T 3
* + 2
T4
são omit idas algumas informações no progra -
m a MIXAL como p o r exemplo a s declarações dos procedimentos
"OVERFLOW" e "VISITA" e o s va lo res i n i c i a i s das constantes MAX
e TAMARV. Es tas informações não são dadas no programa do li -
vro pois são consideradas p resen tes em um programa de i n i c i a -
l i a a ç ã o g e r a l . En t re tan to , i s t o não i n f l u e n c i a na avaliação..
A tradução do programa em PLMIX produziu
5 ins t ruções a mais. Elas correspondem 2s s a í d a s dos t e s t e s
condicionaLs da e s t r u t u r a do comando " i £ ':thenn a s e g u i r
<condição>
J i <cvond>
< i n t r t h e n > <desvio incondicional > (goto)
N a l i n g u a g e m m o n t a d a o teste é f e i t o ev i t an -
do-se estes dois desvios seguidos. O c o m p i l a d o r en t r e t an to não
f a z n e n h u m teste para ver i f icar esta sequência desnecessária
de dois desvios.
V. 1 .3 . PROGRAMA EM PLMIX ESTRUTURANDO-SE O ALGORITMO PROPOSTO
A s declarações são as m e s m a s para o p r o g r a m a
e m V . 1 . 2 . , c o m excessão da declaração LABEL que aqui torna-se
desnecessária.
P : = HEAD = LLINK;
PTR: = O ;
repeat
begin
w h i l e P nzero do
begin
PTR: = P T R + 1;
i£ P T R GT. MAXIMO then cjdto OVERFLOW; - -- A[PTRJ: = P;
P : = ARVORE . LLINK [PI end
P: = A[PTR];
PTR: = P T R - 1;
V I S I T A ;
P : = ARVORE. RLINK [P]
end --
u n t i l P T R z e r o ;
L D5
ENT6
J5Z
INC6
CMP6
J6 LE
JMP
ST 5
LD5
JMP
LD5
DE C6
JMP
LD5
J 6 N Z
a obtenção de um
~ r a d u ç ã o do programa a n t e r i o r pa ra MIXAL
HEAD (1:2)
o
E2
1
MAXIMO
* + 2
OVE RFLOW
AI6
0,6 ( L L I N K )
E 1
A,6
1
VISITA
1,s (RLINK)
E 1
Apesar da a l t e r a ç ã o da e s t r u t u r a e l a pe rmi t iu
código t raduzido com o mesmo número de i n s t r u -
çÕes do programa e s c r i t o em linguagem montada e com algumas trans -
formações p a r a aumentar a e f i c i ê n c i a .
V. 2. EXEMPLO N Ú ~ R O 2
Este exemplo se encontra no l i v r o "Sorting
and Searching" r] nas páginas 139 e 1 4 0 .
O algoritmo proposto é para e fe tuar ordena -
ção de chaves pelo método de seleção.
Algoritmo S (ordenação por seleção d i r e t a ) .
O s reg is t ros R . . . , R são rearran jados e 1' n
após completada a ordenação as chaves es tarão em ordem (kl 5 . . . - < kn) . O método seleciona em primeiro lugar a maior chave.
S I . [laço com j] execute os passos S2 e 53 para
j = N , N - 1, ... , ' 2 .
S i . [ache o máximo de (kll ,. . . ,kn)] busca en t re as cha -
ves k j , kj-l,,. .. ,kl para achar a maior chave.
Vamos chamá-la de ki
S3. [troca com R .I troque os regis t ros Ri ++ R I j
(agora os reg is t ros R . . ,R, es tão em suas posi j -
ções f i n a i s ) .
V . 2 . 1 . PROGRAMA S
O s r e g i s t ~ o s estão nas posições de I N P U T + 1 a I N P U T + N e são ordenados nas mesmas posições de memória
que ocupam. A chave ocupa uma palavra. r A r mkimo a tua l I
r J - 1, r Z K ( índice para busca), r13 5 i. Assume-se
0 1 START
0 2 2 H
0 3
0 4
05 8H
0 6
0 7
O 8
0 9
1 0
11
1 2
1 3
1 4
15
E N T 1
ENT2
E N T 3
LDA
CMPA
J G E
E N T 3
LDA
DEC 2
J 2 P
L DX
STX
STA
DEC1
J 1 P
N - 1
0 ,I
1,1
INPUT , 3
INPUT , 2
* + 3
0 , 2
I N P U T , 3
1
8B
Sl . laço c o m j , j + N -
S 2 . ache o m á x i m o k+ j-1 -
i c j
r A -+ k i
pule se k i > Kk -
senão i + k
r A -+ k i
k + k - 1
repete-se k > O
I N P U T + 1 , 1 - S3. troque c o m R j
INPUT, 3 R~ c R j
V . 2 . 2 . - PROGRAMA E S C R I T O EM MIX SEGUNDO O ALGORITMO S
begin
constant N = ?; % indef in ido no programa MIX
array N w o r d ENTRADA -- l abe l I N I C I O ,VOLTA ,MAIOR;
equate - J = R I 1 , K = R I 2 , I = R I 3 , MAX = RAC;
J: = N;
I N I C I O : K: = J - 1;
VOLTA :
MAIOR:
end
0 1
02 2 H
O 3
0 4
05
06 8H
07
08
09
1 0 3H
I : = J
MAX : = ENTRADA [I]
i f MAX lt ENTRADA [K] ; -
then begin
I : = K;
MAX : = ENTRADA [I]
end - K: = K - 1;
i f K pos then goto VOLTA; - -- ENTRADA [I] , RX : = ENTRADA [I]
ENTRADA [J] : = MAX ;
J: = J - 1;
R I 4 : = J - 2 ;
i f R I 4 nneg then goto I N I C I O ; - --
~radupão do p r o g r a m a a c i m a para MIXAL
ENT1
ENT2
DEC2
ENT 3
LDA
CMP A
J G E
ENT 3
LDA
DEC2
N
0 1 1
1
0
INPUT , .3
I N P U T , 2
3F
0 1 2
INPUT ,3
1
J2NP
JMP
LDX
STX
STA
DEC1
ENT4
DEC4
J 4 N I
JMP
4F
8B
I N P U T , 1
INPUT ,3
I N P U T ,1
1
0 r 1
2
5F
2B
A s i n s t r u ç õ e s nas l i n h a s 2 e 3 podem ser e s -
c r i t a s em um Único comando, ENT2 1,l. Ent re tan to o compilador
gera o s códigos separadamente porque não há otimização de ex -
pressões .
A s i n s t ruções n a s l i n h a s 1 7 e 1 8 são i n s t r u -
ções p a r a s a l v a r o r e g i s t r o R I 1 . A comparação com um v a l o r nu -
mérito ou expressão cons tante d e s t r o i o v a l o r o r e g i s t r o onde
se dá o teste. Deste modo f o i usado o r e g i s t r o I 4 p a r a maríker
i n a l t e r a d o o conteúdo de R I 1 .
A s o u t r a s duas i n s t r u ç õ e s e x t r a s são des -
vios de s a í d a da construção " i f <cond> then <ins t rução>" .
V. 2 . 3 . PROGRAMA MIXAL USANDO TÉCNICAS DE P ROGRAMAÇÃO E STRUTURADA
be gin
cons tant N = ?; % i nde f in ido no programa MIX
a r r a y N word ENTRADA; -
g u a t e J = R I 1 , K = R I 2 , I = R I 3 , MAX = RAC;
repe a t
begin -- K : = J - 1
r e p e a t -
begin -
i £ MAX LT ENTRADA [K] 7
then be g in
I: = K;
MAX ; = ENTRADA [I]
end; --
K : = K - 1
u n t i l K npos
ENTRADA [K] , RX : = ENTRADA [I] ;
ENTRADA [J] : = MAX ;
RI4: = J - 2 end -
u n t i l RI4 neg - e nd -
~radução para M I X A L
E N T 1
E N T 2
D E C 2
E N T 3
LDA
CMPA
J G E
E N T 3
L D A
DEC2
J 2 P
LDX
S T X
S T A
D E C 1
E N T 4
DEC4
J 4 N N
N
0 1 1
1
1
I N P U T , 3
I N P U T , 2
3F
0 , 2
I N P U T , 3
1
8B
I N P U T ,1
I N P U T ,3
I N P U T j.1
1
1
2
2 B
observações :
C o m este p r o g r a m a f o r a m desne:cessários dois
testes do t i p o " i f " deixando-se a s s i m de se u s a r duas i n s t r u - ções de desvio. E s t a é a Ú n i c a diferença do exemplo anter ior .
Algoritmo para e fe tua r ordenação de chaves
pelo método de troca por seleção, conhecido por "bubbde :sortf'.
O algoritmo se encontra na página 1 0 7 da referência 1'1.
Algoritmo B
O s regis t ros R1 , . . . ,Rn devem s e r ordenados,
de mdo que suas chaves satisfaçam a condição K1 < . . . - < KN.
B 1 . [ in ic ia l izar BOUND] Faça BOUND -+ (BOUND aponta
para o r eg i s t ro de maior ordem, ainda não ordena -
do; neste caso estamos indicando que toda a e n -
t rada e s t á , possivelmente, desordenada) . B2. [laço cam j] Faça t +- O . Execute o passo B3 para
j = 1 , 2 , . . . ,BOUND - 1, e depoia vá para B4.
B3. [comparação/troca R : R j+l j ] se K~ > K ~ + ~ troque
R -5' Rj+l e faça t' -+ j j
B4. [alguma t roca ?] Se t = O , o algoritmo acaba. Ca -
s o contrário faça BOUND -+ t volte para B2.
V.3.1. - PROGRAMA B
O s reg is t ros serão ordenados nas posições
I N P U T + 1 a I N P U T + N. r11 t ; r 1 2 = j .
START E N T 1
1 H S T 1
ENT2
E N T l
JMP
3H LDA
CMPA
J L E
LDX
STX
STA
E N T l
2 H I N C 2
BOUND ENTX
J X N
4 H J1P
N B 1 . i n i c i a l i z a BOUND. t-+N - BOUND(1:2) BOUND -+ t
1 B 2 . laço c o m j
o t - + O
BOUND f i m se j - > BOUND
INPUT, 2 - B 3 . c o m p a r a ç ã o e troca R :R .+1 j J
2 F não troca se K < K + 1 j - j
I N P U T + 1 , 2 ( R . a n t i g o ) -t R j +
1
0 1 2 t + j
1 j - + j + l
- *, 2 r X -+ j-BOUND ( i n s t r u ç ã o m o d i -
f i c a d a )
3 B 1 < j < BOUND 7 -
1 B - B 4 . a l g u m a troca ? vai para
B 2 se t > O
V. 3 . 2 . PROGRAMA EM PLMIX SEGUNDO O ALGORITMO B --
w o r d BOUND = N ;
array N word INPUT;
equate T = R I 1 , J = R I 2 -- l abe l I N I C I O ; --
I N I C I O : T : = O
7 L I M
f o r J: = 1 s t e p 1 u n t i l BOUND - 1 do - -
i f INPUT[J] > INPUT[J + 1, ~ 1 3 1 - then begin % t r o c a
RX: = I N P U T C R I ~ ] ;
I N P U T RI^] : = RAC ; % R A C = I N P U T [J]
I N P U T [J] : = RX;
i f T nzero - then begin -- --
BOUND: = T
goto I N I C I O
end
E N T 1
E N T 2
L DA
DE CA
S T A
J M P
LDA
E N T 3
I N C 3
o
1
BOUND
1
* + :2
* + 2
I N P U T , 2
0 , 2
1
CMPA
JLE
LDX
STX
JLE
I N P U T , 3
2F
I N P U T , 3
I N P U T , 3
I N P U T , 2
012
1
L I M
4B
5F
BOUND
1 B
A ins t rução " f o r -- - - s t e p - -- u n t i l " in t roduz iu
ins t ruções que não e s t ã o presentes na versão do a u t o r , a1 é m
de ocupar uma posição de memória a mais ( l i n h a n? 7) p a r a a r -
mazenar o v a l o r do l i m i t e s u p e r i o r da i t e r a ç ã o . ~ l é m disso. f o i
gerada uma i n s t r u ç ã o a mais para o cá lculo de < r e g i s t r o > já
que a geração de código para expressão é da esquerda para a d i -
r e i t a . Deste modo geramos
ENT3 012
INC3 1
CMPA INPUT ,3
quando poderia s e r e s c r i t o simplesmente
CMPA I N P U T i- 1, 2
V. 3.3.. PROGRAMA EM P L M I X , ESTRUTURANDO-SE O ALGORITMO P R O P O S T O
begin
constant N = ; -
w o r d BOUND ;
array N w o r d I N P U T ;
e uate T = R I 1 , J = R I 2 ; 4-
repeat
begin
BOUND: = T ;
w h i l e J BOUND do --
then begin
RX: = INPUT[RI~]
I N P U T [J] : RX ;
end
end
end - u n t i l T z e r o
end
~radução para MIXAL
E N T l
S T1
E N T l
E N T 2
CMP2
J G E
LDA
E N T 3
I N C 3
CMPA
J L E
LDX
S T A
S T X
E N T l
I N C 2
J M P
J l N Z
N
BOUND
o
1
BOUND
2 F
I N P U T , 2
0 1 2
1
I N P U T , 3
3F
I N P U T ,3
I N P U T , 3
I N P U T , 2
0 1 2
1
4 B
5B
A s i n s t ruções a m a i s ( l i n h a s 9 e 1 0 ) são pa - =a o cálculo do í n d i c e [J + 1, ~ 1 3 1 , que no p r o g r a m a o r i g i n a l
é f e i t o e m u m a instrução.
V . 4 . EXEMPLO' NOMERO 4
Algcritmo para e f e t u a r a soma de do i s po l ino - mias. O a lgori tmo e s t á na página 273 da r e f e r ê n c i a 1 3 1 .
E s t e a lgori tmo soma o polinomio P ao po l ino -
mio Q , assumindo que P e Q são ponte i ros para os polinomios da
forma da f i g u r a V.4 .1 . A l i s t a P f i c a r á i n a l t e r a d a e na l i s t a Q
f i c a r á a soma. O s ponte i ros P e Q retornam ao ponto i n i c i a l ao
término do algoritmo; s ã o usados ponte i ros a u x i l i a r e s Ql e 42.
I I I c=$=$+ i J + 5
Figura V . 4 . 1 .
Cada temmo do pol.inomio ocupa duas pa lavras-
uma para o c o e f i c i e n t e e o u t r a p a r a os expoentes do termo xyz
e a l igação para o o u t r o termo, conforme a f i g u r a V . 4 . 2 .
r I I I COEF I
I I
Figura V. 4 .:2.
A 2 . I ABC ( P ) : ABC (Q) I Se ABC ( P ) < ABC (Q) , faça Q 1 + Q2 e
Q t LINK (Q) e r ep i t a este passo. Se A B C ( P ) = ABC(Q)
vá para A 3 . Se A B C ( P ) > ABC(Q) vá para A5 .
A 3 . l s o m a coeficientesl ( E n c o n t r a m o s t e r m o s c o m expoen -
tes i g u a i s ) . Se A B C ( P ) < O o a l g o r i t m o t e r m i n a . C a -
s o contrário faça COEF (Q) t- COEF(Q) + C O E F ( P ) . Se
COEF(Q) = O vá para A4 . senão, faça Q 1 + Q , P -+ LINK(P),
Q +- LINK (Q) e vá para A2 .
W4.l apagar t e r m o i g u a l a z e r o ] Faça Q2 + Q , L I N K (Q1) +
Q + L I N K ( Q ) . A V A I L < = Q2. ( f o i removido o t e r m o
i g u a l a z e r o , criado e m A 3 ) . Faça P + LINK ( P ) e vá
para A 2 .
A 5 . linsere novo t e r m o 1 (O polinomio P t e m u m t e r m o que
não está presente e m Q, então ele será i n s e r i d o e m
O). Faça Q 2 < = AVAIL, C O E F ( Q 2 ) +- C O E F ( P ) , A B c ( Q 2 ) +
+ A B C ( P ) , L I N K ( Q 2 ) -+ Q , L I N K ( Q 1 ) -+ Q 2 , Q 1 +- Q2 I
P + L I N K ( P ) e re torne para o passo A2.
V . 4 . 1 . PROGRAMA A
N o código a s e g u i r t e m o s : P E rI1, Q z r i 2 , Q 1 r13 e Q2 r r16 .
LINK
ABC
ADD
6H
JJH
EQU
EQU
S T J
ENT3
LD1
LDA
LD2
CMPA
JE
J G
ENT3
JMP
JAN
LDA
ADD
S TA
JAN Z
ENT6
LD2
LDX
STX
S T6
S T 2
JMP
LD6
J 6 Z
L DX
STX
4 : 5 definição do c a m p o LINK
0:3 definição do campo ABC
3F entrada da s u b r o t i n a
0 1 2 A l . - ~ n i c i a l i z a ç ã o Q 1 -+ Q
i,i (LINK) P +- L I N K ( P )
1 , 1 ( A B C ) r A ( O : 3 ) -+ ABC(P)
1 , 3 ( L I N K ) Q -+ L I N K ( Q 1 )
1 , 2 ( A B C ) A2 . - ABC(P):ABC(Q)
3F S e i gua l , vá para A 3 .
5F S e m a i o r , vá para A!?.
0 , 2 S e m e n o r , faça Q 1 +- Q
1 B repi ta
* A 3 . S o m a coeficientes --
O 11 COEF ( P )
0 , 2 + COEF (Q)
0 1 2 -t COEF (Q)
6 B o resultado é zero?
0 , 2 A 4 . - A p a g a t e r m o ze ro . Q2+Q
1 , 2 (LINK) Q -+ L I N K ( Q )
AVAI L
1 , 6 ( L I N K ) AVAIL (ii. Q2
AVAIL
!JB
I 1 , 3 (LINK) LINK ( Q l ) -+ Q
avança P
AVAIL
A5 . Insere novo t e r m o - Q2 (Z AVAIL
AVAIL
STA 1 , 6 (ABC) ABC ( Q 2 ) + ABC ( P )
LDA 0 1 1 r A -+ C O E F ( P )
STA 0 1 6 C O E F ( Q 2 ) + r A
S T 2 1 , 6 (L INK) LINK ( Q 2 ) -+ Q
S T 6 1 , 3 (LINK) L I N K ( Q 1 ) -+ Q2
ENT3 0 1 6 Q 1 + Q2
JMP MB avança P
V . 4 . 2 . - PROGRAMA EM PLMIX, SEGUINDO O ALGORITMO A
b eg in --
cons tan t N = ? ; % indef in ido no p r o g r a m a M I X -
array N record P O L I P : - .1 w o r d COEF
.1 w o r d EXPO
. 2 bxte - ( 0 : 3 ) ABC
. 2 b y t e (4:5) LINK
array N record P0LI:Q: s t r u c t i 7
u r e P O L I P ; - e u a t e P = R I 1 , Q = R I 2 , Q 1 = R I 3 , Q2 = R 1 6 ; 3-
w o r d -- AVAIL; % ponte i ra para disponível
label L 6 , L g , L 1 , OVERFLOW;
L 6 : Q 1 : = Q;
LÇY : P : = POEIP. LINK [P] ;
LI : Q : = POLIQ.LINK[Q~];
i f POLIP.ABC[P] < POLIQ.ABC[Q] -
then begin
Q 1 : = Q;
goto L 1 --
end
e l s e i £ RAC = POLIQ.ABC[Q] % RAC = POLIP.ABC[P] - -- thkn begin - % somar c o e f i c i e n t e s
POLIQ.COEF[Q], RX: = POLIP.C~F[P] + POLIQ.QIEF[Q],
i f RAC nzero
then go t o L6 --
e l s e be* % apagar termo i g u a l a zero --
POLIQ .LINK [Q2] , RX: = AVAiL ;
AVAIL: = Q2;
goto L 6
end
end --
e3se begin % i n s e r e novo termo - 4 2 : = AVAIL;
i f Q2 = O then goto OVERFLOW;
AVAIL, RX: = POLIQ.LINK [Q2] ;
POLIQ.ABC[Q~]: = RAC; % RAC ainda contém
P O L I P .ABC [P]
P O L I Q . C O E F ~ ~ ] , RAC: = POLIQ.COEFLP];
POLIQ. LINK [Q2] : = Q ;
end
A n t e s da tradução será m o s t r a d o c o m o - está - a
locada a m e m ó r i a para os p o l i n o m i o s P O L I P e POLIQ.
P O L I P . COE F [O]
POLIP.EXPO [o] 5 POLIP .ABC [o] POLIP . UNK [O]
POLIP. EXFO [N-i] = POW . ABC [N- 11 z - POLIP .LINK [N-11 P O L I Q . COEF [O]
POLIQ. COEF CN - 11 POLIQ . EXPO [O) E POUQ .ABC [o1 z
Figura V.4 . 3 .
O s endereços de P O L I P . COEF [O] , P O L I P .EXPO b] , POLIQ.COEF[O] e POLIQ.EXPO[O] serão referenciados por P 1 , P 2 , Q 1
e Q2 respectivamente, c o n f o r m e exernplificado na f i g u r a V. 4 . 3 .
ENT3
L D 1
L D2
LDA
CMPA
JGE
ENT 3
J M P
CMPA
JNE
LDA
ADD
STA
JAZ
JMP
ENT6
LD2
LDX
STX
S T6
S T 2
JMP
L D6
J 6 NZ
0 1 2
P 2 , l (LINK)
Q 2 , 3 (LINK)
P 2 , l (ABC)
Q 2 , 2 (ABC)
7F
O f 2
1 B
Q 2 r 2 (ABC)
5F
P1,l
Q 1 1 2
Q 1 , 2
* + 2
6 B
0 , 2
Q2 ,2 (LINK)
AVAIL
Q2 ;6 (LINK)
AVAI L
Q 2 , 3 (LINK)
VB
AVAIL
* + 2
J M P
LDX
S TX
STA
LDA
STA
ST2
ST6
ENT 3
J M P
mulador ( r A C ) nas
OVERFLOW
Q 2 , 6 ( L I N K )
AVAI L
Q2,6 (ABC)
P 1 , l
Q1 ,6
Q2,6 ( L I N K )
Q2,3 ( L I N K )
8 r 6
m
observações :
Levando-se em consideração o .conteúdo do acu -
diversas comparações, evitou-se carregamento
desnecessário do reg is t ro , podendo assim termos um texto em
PLMIX que f icou com o código gerado praticamente igual ao e s c r i -
t o pelo autor. Foram ut i l izadas es t ra tég ias de movimentação dos
ponteiros e m pontos do programa que também permitiram essa eco -
nomia de código.
V. 4.3. - PROGRAMA EM PLMIX, ESTRUTURANDO-SE O ALGORITMO PROPOSTO
são válidas as declarações f e i t a s para O
programa em V. 4 . 2 . , com as seguintes alterações : - r e t i r a r a de -
claração de l a b e l e i n c l u i r a declaração:
equate NAOACABOU = RI4; % será usada como v a r i á v e l 1 Ó -
g i oa.
NAOACABOU: = 1;
whi le NAOACABOU nzero do -- -- - beg in
whi le P O L I P .ABC[PI < P O L I Q .ABC [Q]
begin
Q1: = Q;
end - i £ RAC = POLIQ .ABC [Q] - then i f RAC neg --
then NAOACABOU: = O
e l s e begin
POLIQ . COEF [Q] , RAC: = POLIP. COEF [P]
i f RAC zero % s e coef = v - - then begin % e l imina nó
Q : = P O L I Q .LINK [Q] ;
P O L I Q . L I N K [ Q ~ I , RX: = AVAIL;
AVAIL: = Q 2
P O L I Q .LINK L Q ~ ] : = Q
end
e l s e begin % coef = --
end -
P: = POLIP.LINK[P]
en d
else begin % i n s e r e novo termo -- -- Q2: = AVAIL
i£ Q2 zero then goto OVERFLOW; - --- AVAIL, RX: = POLIQ.LINK LQ~] ; POLIQ . ABC [Q] : = RAC ;
POLIQ . COEF [Q] , RAC : = POLIP . COEF [P] ;
POLIQ.LINKEQ~]: = Q;
POLIQ.LINK[Q~] : = Q2;
Ql: = Q2;
P: = POLIP .LINK [P]
en d - % f i n a l do whi le
O s endereços dos termos dos polinomios r e f e -
renciados na t radução pa ra MIX, são os da f i g u r a V. 4 . 3 .
ENT4
J4 Z
L DA
CMPA
JGE
ENT3
LD2
JMP
CMPA
JNE
JANN
ENT4
JMP
LDA
ADD
STA
JAN Z
EN T6
LD2
LDX
STX
S T6
ST2
JMP
ENT 3
LD2
LD1
JMP
LD6
J6NZ
JMP
LDX
STX
STA
LDA
STA
ST6
ENT3
7F
* + 3
0
9 F
p1,1
Q 1 , 2
Q 1 , 2
4 F
0 12
Q2,2 (LINK)
AVAIL
Q2,6 (LINK)
AVAIL
Q 2 , 3 (LINK)
8F
0 12
Q2 , 2 (LINK)
P2 ,1 (LINK)
6 F
AVAIL
* + 2
OVERFLOW
Q2,6 (LINK)
AVA I L
Q 2 , 2 (LINK)
p1,1
Q1,2
Q 2 , 2 (LINK)
0 '6
P 2 , l (LINK)
2B
O grande número de ins t ruções a m a i s é devi - do a dois f a t o r e s bás icos : - u t i l i z a ç ã o da i n s t r u ç ã o "i£-then-
e l s e " e da necessidade de r e p e t i r in s t ruções p a r a p e r m i t i r e s -
t r u t u r a r o programa.
A importância d e s t e p r o j e t o é devido ao f a t o
das l inguagens de médio n í v e l , com as c a r a c t e r í s t i c a s ap resen ta -
das na introdução d e s t e t r aba lho , tenderem a s u b s t i t u i r gradual -
mente a linguagem montada (assembler) . Sua p r i n c i p a l vantagem é
a s s o c i a r a potencia l idade da linguagem montada com as e s t r u t u -
ras t í p i c a s necessá r i a s p a r a se esc rever programas es t ru tu rados
e a s i n t a x e semelhante à das l inguagens de a l t o n í v e l usuais.
Sua maior u t i l i z a ç ã o é em p r o j e t o s de "software" bás ico e de
supor te .
Voltado p a r a o o b j e t i v o de e s t a b e l e c e r c r i t é -
r ios que or ientem no p r o j e t o de novas l inguagens, a apresentação
do t r aba lho a t r avés da def in ição de uma linguagem especz f i ca , além de c o n f e r i r um s e n t i d o p r á t i c o com grandes poss ib i l idades
de u t i l i z a ç ã o a c u r t o prazo, assume a genera l idade de um estudo
t e ó r i c o sobre p r o j e t o s de linguagens.
A a n á l i s e da s i n t a x e e semântica da l i n g u a -
gem a t r a e s de j u s t i f i c a t i v a s das soluções adotadas e e x p l i c a -
çÕes de ordem g e r a l , permite que a apresentação adqu i ra c a r a c t e -
r í s t i c a s d i d á t i c a s . En t re tan to , e s t e t r aba lho não se paopÕe a
s e r completo, já que uma obra d i d á t i c a é um es tudo mais amplo
e complelzo.
Uma boa avaliação da linguagem e s t á no fa to
de podermos expressar com facil idade os algoritmos propostos
por Knuth na s é r i e "The A r t of Computer Programming", s e m per
der em ef ic iência e sem onerar o tempo de processamento dos
programas traduzidos do P L M I X , em relação aos programs e s c r i -
tos em MIXAL pelo autor. O PLMIX permite ainda o acompanhamen -
to pormenorizado dos programas através de rastreamento , impres V
são dos contadores e verificação do tempo de execução, com a
introdução das instruções criadas por Markenzon r6]. Com a ut i l ização em maior escala da lingua -
gem, surgirão certamente propostas para expansões, que poderão
se r facilmente introduzidas devido ao método de anál ise s i n t ã -
t i c a adotado e principalmente por não considerarmos o trabalho
totalmente completo, infaexxvel e hermético.
A escolha do método de matriz de transição
para e fe tuar a anál ise s i n t á t i c a permitiu-nos ava l i a r um &to -
do que havia s ido abandonado com a introaução de novas classes
de gramáticas. pós o estudo e avaliação podemos suger i r sua
adoção em compiladores de linguagens que s e propõem a a t i n g i r
uma faixa de usuários ainda inexperientes , por permitir uma es v
pecificação clara das mensagens de erros. e uma recuperação dos
e r ros de urna forma. simples e rápida. ~ l é m disso o método é de
f á c i l implementação, principalmente com a ut i l ização da gera -
ção automática da matriz de transição através do NHÃONHÃO
(Simone ) . A implementação do compilador se rá no compu -
tadar MITRA 15 do ~ a b o r a t ó r i o de ~utomação de Sistemas e Simu v
lação, v is to que nele e s t á implementado o simulador do MIX
(Markenzon 1 1 ) . O compilador s e r á e s c r i to eni LP15. Como as f - a
ci l idades de depuração no MITRA 15 são r e s t r i t a s , optamos por
escrever o compilador em duas etapas. Na primeira o compilador
se rá implementado no computador Burroughs B6 700, no ~ Ú c l e o de
Computação ~ l e t r õ n i c a , escxito em ALGOL. O programa t e r á uma
sintaxe a mais próxima possível do LP15, evitando recursos do
ALGOL de d í f i c i l tradução para o LP15. Deste modo, após comple -
tada a primeira etapa, a implementação f i n a l se rá um tr:abaLho
s imp les , rápido, com apenas algumas adaptações.
A P E N D I C E NQ 1 - - - - - - - - v -
Não O p e r a
NOP (O)
r X -+ resto
DIV(O:5)
FDIV ( 6 )
rA f V r11 + V r 1 2 -+ -V r 1 3 -+ - V
LDAN ( 0 : 5 ) LDIN(O:5) LD2N(O :5) LD3N ( 0 : 5 )
20 2 2 1 1 2 2 2 2 2 3 2
r 1 4 +- -V r 1 5 -+ -V r16 -+ -V r X + -V
LD5N ( O : 5 ) LD6N ( O : 5 ) LDXN (0 : 5 )
2 25 2 26 2 27 2
r A -+ r A + V
ADD ( O : 5 )
FADD ( 6 )
0 5 1
r A -+ r A - V
SUl3(0:5)
FSUB ( 6 )
F(M) -+ r 1 4
ST4 ( 0 : 5)
3 2 1 2
F(M) +- rJ
0 6
rAX -+ rA x V
MUL(O:5)
FMUL ( 6 )
S T J ( O : 2 )
2 0 7
E s p e c i a l
NUM ( O )
CHAR (1 )
HLT ( 2 )
1 + 2 F
0 9
F(M) -+ r 1 5
ST5 (O:5)
STZ ( O :5 ) I J B U S ( 0 )
2
desvios b y t e s
SLA (0) SRA (1)
=(2) sRAx(3)
SLC (4) SLC (5)
3 3
IOC ( O )
BDVE F palavras
de M para r11
MOVE (1)
1 0
F (M) -+ r 1 6
ST6 ( O :,5)
2
11 2
r11 -+ V
LD1 (O : 5 )
34
F (M) -+ rX
STX(O:5)
Ii'(M) -+ O
2
r 1 2 -+ V
LD2 ( O : 5 )
1 4 I 2 I 1 3
1 3 5
2
ünidade F ocupada
1 + T
r 1 3 -+ V
LD3 ( 0 : 5 )
Contmle,Unidade F
1 5 2
continuação
I r A : , d e s v i o ( rI1: 0 , desvio
1 3 6 - 1 +T
E n t r a d a , u n i d a d e F
I N (0
3 7
FCMP ( 6 )
, 6 0 I 2
r 1 2 : 0 , desvio I r I 3 : 0 , d e s v i o
1 + T
r 1 6 : 0 , desvio I r X : 0 , desvio
&darunidade F
OUT (O )
Unidade F pronta
JRED ( O )
6 1
INC2 (O)DEC2 (1) 1 INC3 (O) DF,C2 (1)
Desvios
m ( 0 ) JsJ (1)
JOV(2) JNOV(3)
tqn&rnl* hzbaixo
4 2
2
r16+ (:r16 1 ??M INC6 (O)- DEC6 (1) INCX (O)DECX(l)
ENTG (2) DEC6 (3) WTX (2) D E X (3)
4 3 1 1
r 1 6 ( F ) :V + c1 I r X ( F ) : V -+ C 1
r 1 2 ( F ) :V -+ C 1
CMP2 ( 0 : 5 )
r T 5 : (F) :V -+ C 1
CMP3 (O : 5 )
r A = r e g i s t r o A
r X = r e g i s t r o X
r A X = r e g i s t r o AX
rIi= index reg. i,l < i < 6 - - rJ = r e g i s t r o J
C1 = ind. comparação
I * / : 1 + 1 JL(4) < N ( O )
J E ( 5 ) = Z ( 1 )
J G ( 6 ) > P ( 2 )
J G E ( 7 ) L - N N ( 3 )
JNE ( 8 ) # NZ ( 4 )
J L E ( 9 ) < - N P ( 5 )
A P E N D I C E N ? 2 ---
N a descr ição de cada ca tegor ia s i n t á t i c a s e -
rão usadas a s segu in tes re fe renc ias :
< ca tegor ia s i n t a t i c a > A
<descr ição da s i n t a x e >
A - n h e r o da def in ição da ca tegor ia
B - página onde s e encontra a def in ição
C - números das def in ições dos não terminais envolv i -
dos n e s t a def in ição .
h PROCEDURE -ident r . -< 'p~>EFQpr0&6,7 . -
< l i s t a param. formais > 8
constante >
variável simples>
record>
variável equate:
vetar>
rotuho>
tabela de desvios-
contadores >
k - <declaração
<declaração
< de c1 araç ão
<declaração
- < de c1 araç ão
<declaração
: decLaração
de c l a raç $0
A -
-letra
l e t r a
d i g i t o
composta> I
ro tu lada>
de c o n t r o l e >
de entrada/saida-
de conversão>
de t r a n s f e rênci a+
de chamada>
de desvio,
i t e r a t i v a p
condi c i o n a 1 7
de a t r i b u i ç ã o >
pa ra depuração>
< ins t rução i
<ins t rução
-instrução
F i n s t rução
: instrução
< ins t rução
:ins t rução
< ins t rução
< ins t rução
< ins t rução
< ins t rução
< ins t rução
<l is t a sem procedimento-END
r
8 < l i s t a dos parnmetros f o r m a i s > : : = (33)
LBYTE -( < e x p r c t e > : < e x p r c t e >)-< i d e n t J 32,32,6
--b- CONSTANT
1 0 < d e c l a r a ç ã o de variável s imples > (34)
T R C i d e n t > > 6
ident* = 6,32
cadeia 3 3
Ti den t - 9 2 , 32.6
i d e n t > = p e x p r c t e 6,32
.--t-RECORD +ident>-: r corpo do record 6,34 3 6 STRUCTURE < i d e n t
1 2 <declaração de variável equate>: : = (37)
I - A R R A Y --4exprcte -132 l6
ident> = -[<inic vetar>]-6,36
declaração de re cord-11
15 <declaração de tabela de desvios>:: = (41
-CASE -ident- : *exprcte-
- COUNTER I d a
I O C N e x p r c t e > 3 2
I -exprcte 3 2
- ON - 4 e x p r c t e
T B m U S Z y
GOTO A i d e n t - 3 2 , 6
W A I T -exprcte-READY 32
- MOVE --<variavel* TO F O R 4 e x p r c t e 1 - 37,37,32
--+-cident>
( <lis ta parametros r e a i s >)-
GOTO + iden t>
CASE-regi*/-<ident* OF + i n s t r composta*
REPEAT --<regi+ TIMES -instrução >
REPEAT -instrução- UNTIL --<condição>--
WHILE - <condição *DO -+instrução>
< ins t rução f o r >
<at r ibu ição a F 42
a t r i bu i ção de r e g i s t r o a va r iave l 4 3
a t r i bu i ção de expressão a var iavel v i a r e g i s t r o 4 4
2 8 < ins t ruções para depuração>: : = (58)
't- =J OUTCOUNTER <i den t
31 < l i s t a sem procedimento>:: = (62)
1
t Y
O +numero WORD -ident> t BYTE -(<exprcte>: <exprcte%ident>-
32,32,6
38 < l i s t a parametros reais>: : =
expressão
_i- prabr relação~<oomparador* 48,5O, 51
47,35
e x p r c t e 32
r e g i x 35
exprcte
42 < a t r i b u i ç ã o a r e g i s t r o > : : = (74)
:;"::3 : = -L< expri '
exprcte
4 3 < a t r i b u i ç ã o de r e g i s t r o a v a r i a v e l > (76)
v a r i a v e l
i d e n t > * < i d e n t
4 4 < a t r i b u i ç ã o de expressão a v a r i a v e l v i a r e g i s t r o > : : = (78)
*< variavel>* , RAC - := 4 expressão+37,48
i d e n t > .( i d e n t 6 16
expressão RAC 51
4 7
3 2
-€ l e t r a >- 29
d i g i t o g 30
4 ! I ( I ) I + I - 1 * I / I = I $ 1 < I > I I ; I : I ' 1 -
variave lZ
ident>* < identz
regi-
numem>. -cident> <ident>-- - -<regi>
RAC nunem:
2
1 ' 1 Wulf, W . -ItACase Against the GOTO" - Proc. ACM ( 1 9 7 2 ) ,
7 9 1 - 796 .
1 1 Hoare , C .A. R. - "Hints on Programming Language Design" -
Stanford A r t i f i c i a l I n t e l l i g e n c e Laboratory - MEMO AIM
(1973)
1 1 Knuth, D.E . - "The A r t of Computer Programming" - sol. 1:
Fundamental Algori thm, Addison-Wesley ( 1 9 6 8 )
1 1 Knuth, D.E. - "The A r t of Computer Programming" - vol . 2 :
Seminumeri c a l Algorithms , Addison-Wesley ( 1 9 6 8)
1 1 Knuth, D.E. - "The A r t o f Computer Programming" - vol . 3:
Sor t ing and Searching, Addison-Wesley ( 1 9 6 8) . ( 1 Markenzon , L. - " Simulador/Montador MIX em Mini-Computador
com Sistema de Tempo Compartilhado" - Tese n? 1009 - Depar -
tamento de Sistemas e computação , COPPE/UFFU ( 1 9 7 8) . 1 1 MITRA 15 - "Manue.1 d l U t i l i z a t i o n : ~ é r i p h é r i q u e s " - Compa-
nhie In te rnac iona le pour 1 'Informatique, 19 73.
1 1 Wirth, N. - "PL360 - A Programrning Language f o r t h e 360
Computers" - JACM 15 ( j a n 1968) , 37-74.
1 1 G r i e s , D . - "Compiler Cons t r u c t i o n f o r D i g i t a l Computers" - W i l ey ( 1 9 71) .
1 1 De Simone, E . - "Tese de Doutoramento, a p u b l i c a r " .
Knuth, D .E . - "An Empir ica l Study f o r For txan Programst'-
Sof tware P r a c t i c e and Experiente 1, (1971) 105-133.
Freeman, D. - "Error Cor rec t ion i n CORC: The C o r n e l l Com
p u t i n g Language" - Tese, Corne l l Un ive r s i t y (1963) . Morgan, H.L. - " S p e l l i n g Cor rec t ion i n System ~ r o g r a m s " -
CACM 13 ( f e v . l 9 7 0 ) , 90-94.
Gr i e s , D. - " E r r o r Recovery and Cor rec t ion - An I n t r o d u c -
t i o n t o t h e L i t e r a t u r e " - Compiler Cons t ruc t ion - a n
advanced Course (628-6 31) , Springer-Verlag (1976) . MacKeeman e t a l . - "A, Compiler Generator " - Pren t i ce -Ha l l
(19 70 ) . Aho, A.U. e t a l . - " P r i n c i p l e s o f Compiler Design" - Addison-Wesley (19 78) . Hartmann , - " A Concurrent Pasca l Compiler f o r Mini-
computers" - Lectures Notes on Computer Sc i ence no
Spr inger-Verlag (1977) . Kennedy, K . e t a l . - "Automatic Generat ion o f Eff iccient
Eva lua tors f o r A t t r i b u t e G r a m m a r s " - Conference o f t h e
Thi rd ACM Symposium on P r i n c i p l e s o£ Programmin Languages
(1976) . Bauer, F.L. e t a l . - "Compiler Cons t ruc t ion - an Advanced
Cours e" - Springer-Verlag (19 76 ) . MITRA 15 - "Manuel d 1 U t i l i z a t i o n : Langage LP15, LP15,EV'-
Compagnie I n t e r n a t i o n a l e pour 1 ' Informat ique (1975) .
1 2 1 1 Naur, P. e t a l . - "Revised Repoxt on t h e Algor i thmic
Language ALGOL 60" - CACM 6 ( Jan 73) , 1-16
1 2 2 1 G r i e s , D. - " U s e o£ T r a n s i t i o n Matrices i n Compiling" - CACM 11 ( j a n 1968) , 26-31.
) 1 Brent , R.P. - "Reducing t h e R e t r i e v a l Time o£ S c a t t e r
StQrage Tecniques" - CACM 1 6 ( fev. 1973) , 105-109.
1 1 P r a t t , T. - "Programming Languages : Design and Implemen -
t a t i o n l ' - Prent ice -Hal l (1975) . ) 2 5 1 Knuth, D . E . - "An Empir ica l Study o f F o r t r a n ProgramsW-
Software - P r a c t i c e and Exper ience 1, (19 71) , 105-133.