- -
E'REDERICO JOSE BANDEIRA DE MELLO E NOVAES
TESE SUBMETIDA AO CORPO DOCENTE DA COORDENAÇXO DOS PROGRAMAS DE POS-GRADUAGKO DE ENGENHARIA DA UNIVERSIDADE FEDERAL DO RIO DE JANEIRO COMO PARTE DOS REQUISITOS NECESSARIOS PARA A OBTENCKO DO GRAU DE MESTRE EM CIÊNCIAS (M.SC. )
Aprovada por :
JOSE
LUCAS M O U ~ O RANGEL NETTO (Presidente)EDIL SEVERIANO TAVARES FERNANDES
EDUARDO LESSA PEIXOTO DE AZEVEDO
Rio d e J a n e i r o , R J , BRASIL KOSTO DE 1982
NOVAES, FREDERICO J. B. M.
GERADOR DE COMPILADORES DE MICROASSEMBLER
-
RJ-
1982iii, 76p. (COPPE
-
UFRJ,
M. Sc.,
Engenharia de Sistemas, 1982)
TESE
-
UNIVERSIDADE FEDERAL DO RIO DE JANEIROEssa t e s e apresenta o p r o j e t o e a implementação de um sistema gerador de compiladores para montar microlinguagens, voltados para o uso de microprogramaçEío.
O p r o j e t o nasceu da necessidade de uma ferramenta g e r a l de microprogramação que s e r v i s s e t a n t o a engenheiros de hardware quanto de software.
O sistema f o i totalmente implantado no computador COBRA-500 e programado na linguagem LPS.
Abstracts
This t h e s i s p r e s e n t s t h e design and implementation o£ a system which generates compilers t o assembly microprogramming languages.
The aim o£ t h e p r o j e c t was t o c r e a t e a general to01 f o r e i t h e r software o r hardware engineers t o w r i t e t h e i r microprograms.
The system is already a v a i l a b l e i n t h e COBRA-500 computer, and it was prograrmed i n LPS.
INDICE
.
CAPITULO I-
INTRODUCAO 1. DESCRIÇAO DO PROBLEMA 2. ORGANIZAÇKO DA TESE.
CAPITULO I1-
FUNDAMENTOS TEORICOS 1. ESTRUTURA DE UM COMPILADOR2. ANALISE LEXICA COM AUTOMATO FINITO 3. ANALISE SINTATICA DESCENDENTE
4. ANALISE SINTATICA DE CONTEXTO E STNTESE SEMDITICA
.
CAPITULO I11-
PROJETO GERAL DO SISTEMA 1. MICROPRCGRAMAçIIO2. CONSTRUÇKO DE MICROPROGRAMAS
3. A ESPECIFICAÇAO DO MICROASSEMBLER 4. DEFIN1G.O DESSE PROJETO
5, ESTRUTURA GERAL
.
CAPITULO IV-
MANUAL DE LOGICA 1. INTRODUÇKO2. GERADOR DE TABELA 3. MONTADOR
.
CAPITULO V-
MANUAL DE UTILIZA(+p;O 1. GERADOR DE TABELAS2, MONTABOR
.
CAPITULO VI-
CONCLUSOESCAPITULO I
-
INTRODUCKO 1. DESCRIÇKO DO.PROBLEMACom o advento das memdrias de leitura exclusiva (ROM's), a utilização de microprogramação tornou-se uma ferramenta bdsica de projetos de hardware de computadores com certo nivel de sofisticação.
A estrutura do microprograma C definida de acordo com o mbdulo da arquitetura do computador que a caracteriza
-
unidade central de processamento, canais de controle, etc-
e, evidentemente, varia de mdquina para mdquina.Existem dois m&todos de tradução para o microprograma: o primeiro exige o. trabalho meticuloso do engenheiro de hardware que manipula diretamente a informação bindria, naturalmente sujeito a vdrios tipos de erro; o segundo atrav&s de um projeto de software, o tradutor de micro-assembler, que permite ao engenheiro de hardware trabalhar com os mnemonicos dessa linguagem, o que lhe dd ganhos em tempo, eficiencia e correção de erros.
Na COBRA tem-se experiência em ambos os m&todos de tradução citados. Ficou comprovado no caso da unidade central de processamento do COBRA-500 as vantagens do m&todo de tradução a partir do projeto de software.
A necessdria diversificação da linha 500, com a previsão da utilização de variados microassembler, levou à definição desse projeto. Assim, obtem-se um instrumento geral para a drea de microprogramação.
Duas caracteristicas marcantes do montador de microprograma o distingue de outros montadores : o formato multi-campo redefinivel do cddigo objeto e as necessidades especiais do usudrio desse montador.
Um segmento de microprograma deve especificar muitas coisas : a seqüência do fluxo de controle do microprograma, cbdigos de controle para a unidade ldgica aritmCtica (ULA), endereços de registradores, condições de controle de reldgio e de inibições para chaveamento, constantes de bits para comparações ou para mãscaras, etc.
A microinstrução tipica, portanto, 6 um padrão de bits de muitos campos. Cada campo, ou microordem, tem um comprimento em bits.
Um microprograma tlpico para microprocessador C aprontado em tres passos
-
conforme figura. Cada passo requer etapas de processamento. Na fase de definição,
o formato da microinstrução 6 definido com seus campos e cddigos de operação conforme especificação do projetista (1). Nessa fase o montador faz uso de definições relativamente fixas da familia de chips usada (2).
Na fase de montagem
,
o projetista entra com a "linguagem de montagem" (3) para gerar um programa de microinstruções, selecionando seqtiências de cddigos de operação e valores. Nessa fase obtem-se a listagem do microprograma montado (4).
A fase de pds-processamento reformata o cbdigo objeto bin2irio para seu uso. O uso pode ser a implementação em PROM (5) ou a simulação em memdria de controle alterdvel (6).
CAPITULO I
-
INTRODU(JX0 1. DESCRIÇKO DO PROBLEMA FIGURA FASE DE DEFINIÇXO (1)I---
I
( 2 ) comprimento da instrução->Icampos
---
>
I
I
I
<--
controlador especifico/c&digo codigos de operacao---
>
1
I
da ULAdefault-s
---
> I
I---
I
I
I
I
I
I
formato da microinstruçãoI
I
\/
FASE DE MONTAGEMI
(3)I---
I
(4) endereços de carga---
r b t u l o s---
> I
>
I
I
I
i n s t r u ç õ e s---
>
I
I
>
listagem constantes---
>
I
I
CAPITULO I
-
INTRODUCAO 2. OFiGANIZAÇXO DA TESEO s c a p i t u l o s em que s e d i v i d e o p r e s e n t e t r a b a l h o apresentam a s e g u i n t e e s t r u t u r a :
.CAPITULO I1
-
FUNDAMENTOS TEORICOSApresenta uma rdpida v i s ã o s o b r e a e s t r u t u r a de um compilador e a s e t a p a s em que C geralmente esquematizado. Todos o s algoritmos u t i l i z a d o s nas d i v e r s a s e t a p a s são a 1 d e s c r i t o s .
.CAPITULO 111
-
PROJETO GERAL DO SISTEMAApresenta o s c o n c e i t o s M s i c o s de microprogramação seguindo a l i n h a t e d r i c a proposta no l i v r o Foundations of Microprograrnming
-
A r c h i t e c t u r e , Software and Applications dos a u t o r e s A. K. Agrawala e T. G. Rauscher. Compara a s duas formas u s u a i s de construção de microprogramas. Apresenta o esquema g e r a l do Gerador de Compiladores de Microassembier a p a r t i r d a i desenvolvido..CAPITULO I V
-
MANUAL DE LOGICADescreve e m d e t a l h e s a implementação dos d o i s mdduios em que s e d i v i d e o Gerador de Compiladores. Apresenta a s p r i n c i p a i s r o t i n a s de cada mddulo.
.CAPITULO V
-
MANUAL DE UTILIZACAODescreve a forma de uso de cada mddulo, apresentando informações s o b r e o uso de c o n s t a n t e s , i d e n t i f i c a d o r e s , d i r e t i v a de execução e s i n t a x e da gramdtica de e s p e c i f i c a ç ã o de cada mddulo.
.CAPITULO V I
-
CONCLUSOESFaz um balanço do uso p r d t i c o desse t r a b a l h o e apresenta p s s l v e i s extensões.
A b i b l i o g r a f i a usada, a s l i s t a g e n s dos mddulos e um exemplo de u t i l i z a ç ã o compem o s anexos.
4 CAPITULO I1
-
FUNDAMENTOS TEORICOS 1. ESTRUTURA DE UM COMPILADORUm compilador t e m como entrada um programa-fonte que se deseja t r a d u z i r para um programa-objeto em instruções de maquina, caracterizado como seu produto d e saida. E s s e processo de tradução & t ã o complexo que & t r a t a d o como uma s & r i e de subprocessos chamados fases.
A primeira f a s e
e
a de a n a l i s e l e x i c a , que divide o texto-fonte em grupos de c a r a c t e r e s a f i n s . O s i d e n t i f i c a d o r e s são t r a t a d o s como pares ordenados onde a primeira informação $ o cbdigo i n t e i r o que o c a r a c t e r i z a e a segunda pode s e r um ponteiro para uma tabela. A e s s e grupo de c a r a c t e r e s assim i d e n t i f i c a d o chama-se token. O s tokens geralmente encontrados são palavras reservadas, i d e n t i f i c a d o r e s , nfimeros e sirnbolos de operação e pontuação.A segunda f a s e & a de a n a l i s e s i n t a t i c a que grupa o s tokens em e s t r u t u r a s s i n t d t i c a s . A e s t r u t u r a s i n t a t i c a pode s e r v i s t a como uma arvore c u j a s f o l h a s são o s tokens.
A 6ltima f a s e , a de geragão de c6dig0, produz o programa-objeto. Essa f a s e pode ser d i v i d i d a em t r e s p a r t e s : a geração de um cbdigo intermedidrio que a p a r t i r do analisador s i n t a t i c o c r i a uma cadeia de instruções simples que não e s p e c i f i c a ainda d e t a l h e s como por exemplo o s r e g i s t r a d o r e s a serem usados em cada operação; a otimização de cbdigo, que & opcional, cuja s a i d a tarnbem & um cbdigo intermediario tentativamente aperfeiçoado em tempo e/ou espaço; e a geração de cbdigo prbpriamente d i t a que decide alocação de mem6ria para dados, seleciona c6digo para acessar dados e seleciona r e g i s t r o s de trabalho.
Embora não constituam f a s e s de um compilador, duas ferramentas dessa e s t r u t u r a devem ser r e s s a l t a d a s : a gerência da t a b e l a de simbolos que armazena o s dados ( i d e n t i f i c a d o r e s , n&meros r e a i s ou i n t e i r o s , p a l a v r a s reservadas) e a manipulação de e r r o s , que comunica ao programador o diagndstico dos e r r o s encontrados e o r i e n t a sua correção.
A d i v i s ã o do programa compilador em f a s e s não necessariamente implica que cada f a s e deve ocorrer apds o t&rmirio da a n t e r i o r . Essa d i v i s ã o & para f i n s de estudo e p r o j e t o . A d i v i s ã o em passos do compilador pode ser a mais conveniente para f i n s de irnplementação.
CAPTTULO I1
-
FUNDAMENTOS TEORICOS 2. ANALISE L?XICA COM AUT&IATO FINITOA s s i m como um reconhecedor de uma linguagem L B um programa que a p a r t i r de uma cadeia de entrada responde se e l a uma sentença de L ou não, a p a r t e do a n a l i s a d o r lBxico que i d e n t i f i c a a e x i s t e n c i a de tokens um reconhecedor da linguagem que d e f i n e o s tokens.
Expressões regulares são a notação n a t u r a l para descrever a linguagem dos tokens.
Autômato f i n i t o & um diagrama de t r a n s i ç ã o , com simbolos terminais apenas, para linguagens regulares, i s t o &, aquelas que podem s e r d e f i n i d a s por expressões regulares.
A s e g u i r apresentamos um exemplo do uso de autômato f i n i t o na descrição dos nbmeros i n t e i r o s ou r e a i s conforme sua d e f i n i ç ã o na linguagem LPS (conforme consta na referência 8 da B i b l i o g r a f i a ) ,
A express80 regular que define o s n b e r o s em LPS, conforme a notação de Viena, 6 :
onde d = 8111
...
19; E indica precisão simples e D precisão dupla.Automato E'inito definido a p a r t i r dessa sentença expresso da seguinte forma:
Nesse diagrama são adotadas a s convenções:
+---i-
I
II
-
estado i n i c i a l +--36
CAPITULO I1
-
FZINDAMENTOS TEORICOS 2. ANALISE LEXICA COM AUTOMATO FINITOTodas as situações não previstas são consideradas como de erro lexico
-
por exemplo o aparecimento no estado 0 do caracter "c".CAPITULO I1
-
FUNDAMENTOS TEORICOS3. ANWISE SINTATICA DESCENDENTE
Para gramãticas não ambiguas, a seqbência de producoes usadas para d e r i v a r qualquer sentença C b i c a e determina a e s t r u t u r a s i n t h t i c a dessa sentença. São d e f i n i d o s d o i s t i p o s de derivação associados ao não terminal a s e r expandido: derivação à d i r e i t a e à esquerda.
A a n a l i s e s i n t 8 t i c a v e r i f i c a s e e x i s t e uma derivação na gramAtica que corresponda à sentença desejada, tendo como p a r t i d a o simbolo i n i c i a l dessa gramtitica. Essa v e r i f i c a ç ã o pode basear-se num dos d o i s t i p o s de derivação, caracterizando-se nos d o i s mCtodos de a n h l i s e : DESCENDENTE, baseado na derivação mais à esquerda e ASCENDENTE, baseado na derivação mais à
d i r e i t a , considerada na ordem inversa.
Tomemos como exemplo a gramAtica G1((EtT,F],(a,+,*,(,)),~,E), c u j a s produções são assim d e f i n i d a s :
P : l . E = > E + T 2. E => T 3 . T = > T * F 4. T
=>
F 5. F=>
( E ) 6. F=>
aSeja a sentenca S1 : a*a+a.
A e s t r u t u r a s i n t d t i c a de S1 pode s e r determinada atravCs das produções u t i l i z a d a s numa derivação mais à esquerda :
A arvore de derivação para S1 (com a ordem de uso das produções indicada) C:
O resultado da a n a l i s e s i n t a t i c a descendente de uma sentença C portanto a seqfiência de produções que a geram ou a seqbência de configurações da a r v o r e de derivação.
Abordaremos nesse trabalho o mCtodo L L ( 1 ) de a n a l i s e s i n t h t i c a descendente, que k na verdade muito semelhante à representação t a b u l a r do mktodo de descida recursiva.
8 CAPITULO 11
-
FUNDAMENTOS TEORICOS 3. ANALISE SINTATICA DESCENDENTE 3.1. MCtodo L L ( 1 )Pode s e r mostrado que uma g r a f i t i c a G & L L ( 1 ) s e e apenas s e para A => a l f a
I
beta, duas produções d i s t i n t a s em G onde A & um simbolo não-terminal e a l f a e beta duas seqfiências de simbolos, são verdadeiras a s seguintes condições :1. Não e x i s t a simbolo terminal que i n i c i e cadeias derivadas a p a r t i r de a l f a e beta.
2. Pelo menos uma e n t r e a s cadeias a l f a e beta pode d e r i v a r a cadeia vazia.
*
3. Se beta => e p s i l o n , onde e p s i l o n s i g n i f i c a a cadeia vazia, a l f a não deriva nenhuma cadeia que comece com algum terminal pertencente a J?OLLOW (A)
.
A função FOLLOW(A) C definida para um não-terminal A como o conjunto de terminais que podem aparecer imediatamente à d i r e i t a de A em alguna forma s e n t e n c i a l . Se A f o r o simbolo mais à d i r e i t a para alguma forma s e n t e n c i a l , deve ser incluido no conjunto de terminais de FOLLOW(A) o simbolo que indique fim de cadeia
-
nesse trabalho indicado por S.O metodo L L ( 1 ) s e u t i l i z a de uma entrada com a sentença a s e r analisada, uma p i l h a que contCm a descrição do r e s t o da sentença de entrada, uma t a b e l a de a n d l i s e p r e d i t i v a e uma saida.
O não terminal que s e encontra no topo da p i l h a representa (ou s e j a deve d e r i v a r ) a p a r t e i n i c i a l do trecho ainda não l i d o da seqfiência de entrada; a p a r t e jd l i d a da seqfiência de entrada corresponde aos não terminais jd desempilhados anteriormente. A presença de um terminal na p i l h a indica que e l e deve ocorrer na seqfiência de entrada na posição correspondente.
O nome L L ( 1 ) provem de t r e s f a t o s : a a n a l i s e 1Cxica começar pela esquerda (LEFT) da seqfiência de entrada; conduzir a a n d l i s e de acordo com uma derivação mais à esquerda (LEI;TNOST) e d e c i d i r baseado na a n d l i s e de 1 simbolo de entrada.
CAPITULO I1
-
FUNDAMENTOS TEORICOS 3. ANALISE SINTATICA DESCENDENTE3.2. Algoritmo de Construção da Tabela T de Analise P r e d i t i v a
O analisador L L ( 1 ) compõe-se de um algoritmo padrão, cujo funcionamento segue uma t a b e l a T ( t a b e l a de anAlise p r e d i t i v a ) que para cada simbolo não-terminal (do topo da p i l h a ) e para cada simbolo d e entrada indica a produção a s e r u t i l i z a d a .
Construção de T :
1. Para todas a s produções A => a l f a da g r a d t i c a G , r e p i t a o s passos 2 e
2. Para cada terminal a pertencente a FIRST(alfa), coloque a produção A => a l f a na entrada ~ [ ~ T a l f a ] da tabela.
3. Se e p s i l o n pertencer a FIRST(alfa), coloque A => a l f a em T[A,b]
,
onde b pertence a FOLLOW(A).
4. Cada entrada de T não preenchida corresponde a uma s i t u a ç ã o de e r r o . A função FIRST(a1fa) 6 o conjunto de terminais que começam cadeias derivadas a p a r t i r d e a l f a . Se a l f a ==> e p s i l o n , então e p s i l o n pertence a FIRST ( a l f a )
.
O s algoritmos que definem o s elementos das funções FIRST e FOLLOW e s t ã o d e s c r i t o s nas paginas 188 e 189 do l i v r o The Principies of Compiler Design
-
AHO e ULLMAN.10 CAPíTULO I1
-
FUNDAMENTOS TEORICOS 3. ANALISE SINTATICA DESCENDENTE3 . 3 . Algoritmo de Analise Preditiva
A a n a l i s e p r e d i t i v a funciona a p a r t i r do simbolo X que s e encontra no topo da p i l h a e do terminal a que C o a t u a l simbolo da sentença de entrada. Esses d o i s sirnbolos determinam uma das t r e s seguintes ações :
1. Se X=a=$ : o a n a l i s a d o r para e anuncia fim de a n a l i s e .
2. Se X=a $ : X C r e t i r a d o da p i l h a e C l i d o o prbximo simbolo de entrada. 3. Se X t5 não terminal : consulta a t a b e l a T de anAlise p r e d i t i v a , podendo
e s t a entrada de T ser de 2 t i p o s :
i. T[X,a]={X=>u V W)
-
s u b s t i t u i - s e X na p i l h a por W V U ( U no topo).
ii.T[X,a]=ERRO
-
cl chamada a r o t i n a de recuperação de e r r o s . Trabalhemos e m cima de um exemplo a p a r t i r da g r a n ~ a t i c a G 1 do exemplo a n t e r i o r , modificada para tornA-la L L ( 1 ) .1. E => T E1 2. E 1
=>
+
E 3. E 1 => e p s i l o n 4. T => F T1 5. T1=>
*
T 6. T1=>
e p s i l o n 7. F => (E) 8. F => a Tabela de a n d l i s e p r e d i t i v a :CAPITULO I1
-
FUNDAMENTOS TEORICOS3. ANALISE SINTATICA DESCENDENTE
3.3. Algoritmo de Andlise P r e d i t i v a
Analisemos a sentença a*(a+a) :
PILHA ENTRADA PRODUGKO USADA ATITUDE W ALGORITMO
Aqui o analisador anuncia fim de sentença de entrada sem e r r o e fornece a seq0ência de produções usadas para o b t e r a sentença S1 a p a r t i r do simbolo i n i c i a l da gramdtica com derivações mais à esquerda.
12 CAPTTULO I1
-
FUNDAMENTOS TEORICOS4. ANALISE SINTATICA DEPENDENTE DE CONTEXTO E STNTESE SEmTICA
Existem convenções s i n t a t i c a s que não podem s e r expressas na gramtitica livre-de-contexto da linguagem d e programação. O s exemplos mais comuns dessas convenções são:
-
Nenhum i d e n t i f i c a d o r pode s e r declarado mais de uma vez;-
Todas a s v a r i ã v e i s devem s e r d e f i n i d a s a n t e s do uso;-
0 s argumentos de uma chamada de função devem s e r compativeis t a n t o em nlimero quanto em a t r i b u t o s com a d e f i n i ç ã o da função.Um compilador, para observar s e regras desse t i p o e s t ã o sendo obedecidas, n e c e s s i t a do que s e convencionou chamar de a n a l i s e s i n t A t i c a dependente de contexto.
Semântica de uma linguagem de programação k um conjunto de r e g r a s que dão s i g n i f i c a d o aos programas e s c r i t o s nessa linguagem. Essas regras associam e s t r u t u r a s s i n t A t i c a s a o b j e t o s que representem o s i g n i f i c a d o dessas e s t r u t u r a s . São exemplos de ação representadas nessas regras:
-
A abertura de espaço em memdria para varitiveis;-
A execução de instruções nas linguagens interpretadas;-
A geração de uma tabela.A s i n t e s e semântica gera a p a r t i r da a n b l i s e s i n t a t i c a e dos a t r i b u t o s semânticos, herdados ou s i n t e t i z a d o s , o produto-objeto da compilação.
Ainda não f o i d e f i n i d o nenhum meio para e s p e c i f i c a r t a n t o a antilise s i n t ã t i c a dependente d e contexto como a semântica de uma linguagem que ajude s a t i s f a t o r i a m e n t e a construção de um compilador.
Em linguagens onde a a n ã l i s e s i n t a t i c a $ f e i t a a t r a v k s do m&todo descendente podemos u n i r a s duas f a s e s acima d e s c r i t a s a t r a v & s da
introdução de novos sirnbolos na sua gramãtica que indiquem pontos de chamada de r o t i n a s de ação.
Esses simbolos, aqui chamados simbolos de ação, são colocados: 1
-
No i n i c i o da produção, quando e l a 15 escolhida pelo algoritmo; 2-
Entre o s sirnbolos da produção, bastando i n s e r i r um indicador de chamada de r o t i n a e n t r e o s simbolos correspondentes, ao empilhar o lado d i r e i t o da produção.CWTTULO I11
-
PROJETO GERAL DO SISTEMA 1. MICROPROGRAMA(J-IOMicroprogramação b tradicionalmente um m&todo a l t e r n a t i v o de implementação de i n s t r u ç õ e s de linguagem d e mttquina num computador, -podendo reduzir a complexidade e a i n f l e x i b i l i d a d e de sua unidade de controle. Baseia-se na observação que uma operação complexa b completamente definida por urna seqflência d e operações p r i m i t i v a s e que unidades de memdria podem ser usadas para armazenar informações sobre operações primitivas. Cada operação primitiva C representada na memdria como urna microordem. A unidade de memdria que contCm a s microordens C chamada de memdria de c o n t r o l e ou memdria de microprograma.
Executar uma microordem s i g n i f i c a a busca dessa instrução pela unidade de c o n t r o l e e a geração dos s i n a i s de c o n t r o l e s necessdrios à ativação da operação primitiva r e l a t i v a a essa microordem.
Embora microprogramas contenham informações que controlam o hardware a um n i v e l primitivo, e l e s sã0 armazenados na memdria e são executados como programas. I s s o dtt a microprogramação um n í v e l de software t a n t o quanto de hardware
-
d a i o t e m o firmware, que designa microprograrnas r e s i d e n t e s na memdria de c o n t r o l e do computador.Embora ainda a microprogramação s e j a um t i de programação v a l e e n f a t i z a r alguns aspectos que a distinguem do conceito comum de programação :
1
-
O n í v e l de c o n t r o l e-
microinstruções exercem c o n t r o l e d i r e t o sobre recursos primitivos de hardware, enquanto programas manipulam e s t r u t u r a s de dados d e f i n i d o s para usudrio,2
-
O r e p e r t õ r i o de instruções-
o conjunto de microordens b geralmente pequeno, enquanto o conjunto de operações de programa pode s e r grande.3
-
Paralelismo-
a &quina permite execução simultânea d e vArias microordens,4
-
Memdria de c o n t r o l e-
microprogramas são geralmente armazenados em unidades de memdria e s p e c i a i s que são muito rApidas e c a r a s , logo representam um recurso limitado.O desenvolvimento de memdrias rApidas de l e i t u r a e e s c r i t a (RAM's) fizeram com que a microprogramação deixasse de s e r apenas instrumento para a Area d e hardware sendo u t i l i z a d a tambbm pelos p r o j e t i s t a s de software para, por exemplo, p a r t e s do sistema operacional normalmente muito executados em ambientes multi-usudrios.
14
CAPITULO I11
-
PROJETO GERAL 00 SISTEMA 2. CONSTRU~IO DE MICROPROGRNVIASAntes d e microprogramar um computador para uma aplicação e s p e c i f i c a , deve-se conhecer a a r q u i t e t u r a desse computador. Annado com t a l informação, parte-se para a d e f i n i ç ã o da mieroinstrução com a s microordens que a constituem. Cada microordem associada a um conjunto de mnemonicos.
A s prdximas f a s e s são de e s c r i t a na linguagem microassembler, formada pelos mnemônicos j B definidos, e tradução dessa linguagem para a representação binAria que a &quina possa i n t e r p r e t a r .
A s e t a p a s f i n a i s s ã o de documentação e de inevitAveis a l t e r a ç õ e s que sempre s e fazem necessdrias, sejam por e r r o de avaliação sejam por readequação de p r o j e t o ou inclusa0 de novas c a r a c t e r k t i c a s .
Caso a tradução para a representação b i n à r i a s e j a manual, a probabilidade de e r r o s aumenta consideravelmente em função do f a t o r humano assim como o descompasso com a documentação. A necessidade de a l t e r a ç õ e s torna mais pesado e s s e t r a b a l h o principalmente por causa da mudança dos endereços que provoca a introdução de novas microinstruções.
A tradução por software para a representação binAria c r i a f a c i l i d a d e s de e s c r i t a , geração e depuração de microprogramas. Cria tamb&m, a t r a v e s do uso de r d t u l o s no micro-programa, a f a c i l i d a d e de relocação automAtica de novas microinstruções. Como argumento f i n a l d e sua maior u t i l i d a d e hà a geração automdtica da documentação.
CAPITULO 111
-
PROJETO GERAL DO SISTEMA3 . A ESPECIFICAÇXO DO MICROASSEMBLER
O p r o j e t o do rnicroassembler começa pela especificação da informação necessdria para c o n t r o l a r o s recursos de hardware e como essa informação montada numa palavra da microinstrução.
De i n i c i o deve s e r determinado o nbrnero de recursos de hardware que cada microinstrução controla; ou s e j a , o n h e r o de microordens que cada rnicroinstrução pode executar. A i f i c a tambem determinado o nbmero de b i t s que compoE a palavra da microinstrução.
No p r o j e t o de microassembler mais simples possivel, não h& codificação na representação da microinstrução: cada b i t representa uma microordem.
Num p r o j e t o de codificação d i r e t a , a s microordens que acessam um recurso qualquer de hardware são representadas por um campo de b i t s e m vez de b i t s individuais. Por exemplo, consideremos uma unidade d e ldgica a r i t m e t i c a (ULA) que faça o i t o d i f e r e n t e s operações a r i t m e t i c a s e lbgicas. Se não houver codificação, o i t o b i t s são necess;arios para e s p e c i f i c a r cada uma das operações. Entretanto, uma microinstrução s 6 n e c e s s i t a uma das operações da ULA a cada vez; logo num p r o j e t o de codificação d i r e t a cada operação pode s e r especificada com t r e s b i t s .
Num p r o j e t o d e codificação de d o i s n i v e i s , alem de microordens mutuamente exclusivas serem combinadas para formar canqxs, o s i g n i f i c a d o de um campo não depende apenas do seu v a l o r mas tambem do v a l o r contido geralmente em outro campo de microinstrução.
Durante a execução de uma microinstrução C necessArio determinar o endereço da prbxima microinstrução a s e r executada. Existem bdsicamente duas t e c n i c a s de seqbenciamento de microinstrução: na primeira, o endereço de c o n t r o l e da prdxima microinstrução a s e r executada i g u a l ao da microinstrução sendo executada mais um; na o u t r a , cada microinstrução contem um campo com o endereço de c o n t r o l e da prbxima microinstrução a s e r executada.
16 CAPITULO 111
-
PROJETO GERAL DO SISTEMA 4. DEPINIÇXO DESSE PROJETOEsse p r o j e t o f o i d e f i n i d o a p a r t i r de reuniões com p r o j e t i s t a s de hardware da COBRA, que manifestaram suas necessidades e reuniões com o orientador da t e s e , onde se apontava formas p r a t i c a s para a concretização dos objetivos.
Nas reuniões com o s p r o j e t i s t a s de hardware ficaram d e f i n i d a s a s p r i n c i p a i s bases do projeto:
1
-
A representação da microinstrução deve a c e i t a r codificação de d o i s niveis.2
-
O nilimero mdximo de mnemônicos de uma microordem C 256.3
-
O uso de coristantes em s u b s t i t u i ç ã o a conjunto de microordens, podendo mesmo s u b s t i t u i r toda a microinstrução.4
-
O nilimero m?iximo de b i t s d e uma microordem 16.5
-
Tamanho mdximo da palavra de membria de controle: 1 word = 32.767 Pretende-se posteriormente expandir o p r o j e t o de forma a i n c l u i r : 1-
C r i t i c a em tempo de montagem de combinações mutuamente exclusivas emuma mesma microinstrução.
2
-
Implementação d e macro-expansores que f a c i l i t e m o uso para p r o j e t i s t a s de software bdsico.Durante o p r o j e t o foram decididos d e t a l h e s de implenientação t a i s como uso de a n 8 l i s e s i n t d t i c a L L ( l ) , uso de função de hash para preenchimento e consulta da tabela de sirnbolos, definição p r e c i s a do metodo de a n a l i s e lexica a s e r usada.
CAPITULO I11
-
PROJETO GERAL DO SISTEMA5. ESTRUTURA GERAL DO GERADOR DE COlirlPILADORES DE MICROSSEMBLER
O t r a b a l h o aqui desenvolvido e s t ã dividido e m duas p a r t e s : a primeira opera sobre a especificação do microassembler
-
informações sobre o n&mero de b i t s da palavra da microinstrução, sobre o nhmero de b i t s de cada microordem e s e u s mnemonicos associados, sobre o d e f a u l t de preenchimento de cada microordem, sobre o t i p o de codificação usado ( d i r e t a ou de d o i s n i v e i s ) , sobre o campo da microinstrução reservado para endereçamento-
gerando uma tabela com a s informações necessArias à segunda p a r t e dotrabalho que C a f a s e de montagem.
A f a s e de montagem opera com duas entradas: a tabela acima d e s c r i t a e o microprograma-fonte a s e r montado. A saida dessa f a s e depende do usubrio: s e e l e a deseja para p r o j e t o s de hardware, a saida & a t r a n s c r i ç ã o binAria dos mnemonicos e endereços no microprograma-fonte; s e e l e a d e s e j a para p r o j e t o s de software, a saida C um m6dulo-objeto a ser relocado e ligado com o u t r o s mddulos-objeto do seu sistema.
Ambas a s f a s e s acima d e s c r i t a s foram programadas na linguagem LPS. A linguagem LPS
-
projetada para o desenvolvimento de software dos produtos da COBRA-
C e s t r u t u r a d a e de a l t o n i v e l . Permite, p r & m , ao programador usar t r e c h o s em assembler, o que a c a r a c t e r i z a como unza linguagem h i b r i d a .Essas duas f a s e s foram implementadas no computador Cobra 530. O s sistemas da s e r i e Cobra 500 são computadores que podem assumir configurações de mini e medi0 porte. Sua unidade c e n t r a l de processamento & microprogramada e C implementada em suas funções p r i n c i p a i s a t r a v e s da tecnologia b i p l a r do t i p o "LSI Bit-Slice". Possui capacidade de endereçar 1 Mbyte d e memdria p r i n c i p a l . Seu sistema operacional C um conjunto de processos que permite ao usubrio a t u a r em tempo compartilhado, processamento em l o t e s , entrada de dados e comunicação de dados. A alocação de memdria & gerenciada por um processo que t a n t o p d e a t u a r atravCs de alocação dinâmica quanto pela u t i l i z a ç ã o de p a r t i ç õ e s f i x a s .
18
CAPI?'ULO I V
-
MANUAL DE LOGICA 1. INTRODUGKOO GERADOR DE COMPILADORES estA dividido em dois mbdulos: o GEWBOR DE
TABELA e o MONTADOR.
OGERADOR DE TABELA aceita como entrada a especificação do
microassembler gerando como saida a tabela relativa a esse microassembler.
O MONTADOR possui duas entradas: a tabela do microassembler e o
microprograma-fonte. A saida dessa fase ser8 o programa-objeto a ser utilizado na gravação de PROM'S ou o mddulo-objeto a ser posteriormente link-editado.
O esquema do GERADOR DE COMPILADORES C o seguinte:
A ativação de cada mddulo C definido no respectivo manual de utilização.
CAPITULO IV
-
MANUAL DE LOGICA2. GERADOR DE TABELA 2.1 Introdução
A entrada desse mddulo C um programa escrito numa linguagem especialmente definida para especificar as caracteristicas de qualquer microassembler. Logo esse mddulo e um compilador cujo c6digo gerado C a
tabela a ser usada na fase de montagem.
Em função da simplicidade da linguagem, que C do tipo PASCX, foi escolhido como mCtodo para analise sintBtica a t&cnica LL(1).
O algoritmo do analisador sintAtico preditivo conforme consta de Principles of Compiler Design, AHO-ULLMAN, sec.5.5
-
C usado como o nucleo que comanda esse mddulo. Esse nucleo controla tanto o analisador lCxico, que gerencia a tabela de sirnbolos, quanto o analisador semantico, que gera o codigo. ESQUEMA DE FCTNCIONAMENTO:/
Analisador/---
>
/ Analisador//
SintBtico /<---
/ Semântico / /--- / /--- /I
I
I
v/
Geração / / de C6digo /2CI CAPITULO IV
-
MANUAL DE LOGICA2. GERADOR DE TABELA
2.2 Analisador Sintdtico
A partir da graniatica definida no Manual de Utilização, constroi-se uma nova gramdtica compctada de forma a facilitar o trabalho do analisador sintatico. Monta-se entao a tabela LL(1) que sera consultada para a
I I A pilha de simbolos e preenchida inicialmente cc
primeira produção da gramdtica, que ser3 substituido por outras produções conforme a indicação da tabela LL(1)
.
A cadeia de simbolos terminais de entrada & uma sequencia de tokens, reconhecidos pelo analisador l&xico.
2.2.1 GramAtica compactada.
0 S
->
DV maquina id: tam = dec, enc = LIT, campx DC fim $1 DV
->
constante id = N ; LDM DV1I
1x71 3,4 N - > b i nI
hex 5,6 LDM->
id = N ; I B M1
epsilon 7,8 DV1->
tipo id : DTC ; LTC1
eps i lon9 1 DTC
->
tam = dec,
éric = LIT,
ET1
id 11,12 LIT->
idI
N 13,14 ET->
literalI
( id LM) 15,16 LM->
,
id LM1
epsi íon 17,18 LTC->
id : CTC ; LTC1
eps i ion19,2CI DC
->
i6 : pos = dec, DTC ; LC DC1Icaso id : pos = der, DTC de id : (id : pos : dec, DTC; LC) LP ; fim LC
21,22 LC
->
id : p s = dec,
DTC ; LC1
eps i lon23,24 DCl
->
ceso id : p s = dec, DTC de id : (id : p s = dec, DTC; LC); LF fim LC2.2 Analisador Sintdtico
25,26 LF
->
Id : (id : p s = dec, DTC; LC) ; LF22 CWIWLO I V
-
MANUAL DE LOGICA2. GERADOR DE TABELA
2.2 Analisador Sinttitico
2.2.2 Construção d e Tabela L L ( 1 ) .
2.2.2.1 Definição de FIRST e FOLLOW das Produções
Conforme o s algoritmos de FIRST e FOLLOW constantes no l i v r o P r i n c i p l e s of Compiler Design de AHO-ULLMAN, serd construida a seguinte tabela para o s simbolos não-terminais da gramdtica compactada:
I
/
constante,I
I
I
DVI
e p s i l o n ,I
maquinaI
I
I
t i p oI
I
I
ET1
l i t e r a l , (I
; , d eI
I
I
I
I
I
I
I
LTCI
i d , e p s i l o nI
maquinaI
I
I
I
+----+--- 3I
I
I
I
I
/
CCI
id,cnsoI
fimI
I
I
I
I
3CAPI?'ULO I V
-
FANUAL DE LCGICAS. GERADOR DE TABELA
2.2 Analisaclor SintAtico
3
I
I
I
I
I
ETCI
id,tamI
;,deI
I
I
I
I
+
I
I
I
I
I L C Iid,I
firn,),casoI
I
I
epsilonI
I
I
I
I
I
I
DCll
caso,I
fimI
I
I
epsilonI
I
I
I
I
I
I
LFI
id,epsilonI
fimI
I
I
I
$----+--- -I-I
CAPITULO IV
-
MANUAL DE LOSICA2. GERADOR DE TABELA
2.2 Analisador Sintdtico
2.2.2.2 Tabela LL(1)
Gerada igualmente atraves de algoritmo constante do livro Principles o£ Compiler Dsign de AHO-ULLMAN.
CAPITULO I V
-
MVJNUAL DE LCGICA2. GERADOR DE TABELA
2.2 Analisador S i n t ã t i c o
2.2.3
-
P i l h a de SimbolosE implementada a t r a v e s da c r i a ç ã o de d o i s v e t o r e s : um armazena o topo das produções indicadas pela t a b e l a L L ( 1 ) - no programa GERATAB e s s a v a r i d v e l chama-se PILHA. ENDER.SIMB-e o o u t r o armazena o nilimero de simbolos e x i s t e n t e s no lado d i r e i t o dessa produções
-
no programa chama-se NUM.SIILIB.LADO.DIR. Considera-se topo de uma produção o seu simbolo i n i c i a l , contado da esquerda par a d i r e i t a . Esses v e t o r e s admitem a t e 287 p s i ç õ e s que equivalem à soma do nilimero mtixiino de mrnenônicos num campo (256) com o nilimero m8ximo de sirnbolos no lado d i r e i t o de uma produção ( 3 1 ) .2.2.4
-
Armazenamento d a s Produções de GramaticaA s produções s e r ã o armazenadas em t a b e l a s , onde cada produção e s t 8 d e s c r i t a conforme a s e g u i n t e expressão r e g u l a r :
*
PROD = (NSIMB SIMB )
NSIMB
-
b y t e que indica o nilimero de simbolos do lado d i r e i t o da produçãoSIMB = TIPOSIM3 QUALSIMB TIPOSIMB = TERM
I
NTERMTERM = "0"
-
i n d i c a sirnbolo terminal NTERM = "1"-
i n d i c a simbolo não-terminal7
QUALSIMB = BIT
QIJALSIMB & uma informação fornecida pelo a n a l i s a d o r l e x i c o e corresponde à i d e n t i f i c a ç ã o de determinado token.
Seja por exemplo a produção 7 c o n s t a n t e no item 2.2.1. O seu armazenamento s e r & da f orma :
onde 6 r e p r e s e n t a o nilimero de simbolos do lado d i r e i t o da produção; TIPO, ID,DOIS.PT e PT.VG são sirnbolos t e r m i n a i s armazenados em bytes onde o b i t mais s i g n i f i c a t i v o v a l e 0; DTC e LTC são simbolos não-terminais igualmente armazenados em b y t e s mas com o b i t mais s i g n i f i c a t i v o ligado.
Para f a c i l i t a r o acesso à s produções assim respresentadas, f o i c r i a d o um v e t o r
-
chamado PONT.LADO.DIF?-
onde são armazenados o s p o n t e i r o s para o26 CAPITULO I V
-
iYANUAL DE L E I C A2. GERADOR DE TABELA
2.3 Analisador Lexico
Esse segmento do GERADOR DE TABELA reconhece como entrada t e x t o s que obdecem à seguinte expressão regular:
*
TEXTO = ( ( PAL! NUM) (BRANCOS ! SU) )
PAL = i d
I
"macjuina" IWtam"I
"enc" Itlcampos"I "fim"I
"constante"
I
" t i p o " ( " l i t e r a l "I
"posl'I
"caso"I
"de" NUM = BINI
DECI
HEX+
B I N = $ BIT
+
DEC = N\AB
A saida do a n a l i s a d o r l&xico dar& informações sobre qual token f o i reconhecido, o tamanho da cadeia e o endereço onde e l a i n i c i a , o s d o i s filtimos pela p i l h a de a t r i b u t o s .
No caso de i d e n t i f i c a d o r , serd colocado tambem na p i l h a de a t r i b u t o s o seu endereço na t a b e l a de simbolos.
No caso de numeros s e r 8 colocado o valor armazenado em uma palavra (16 b i t s )
.
A t a b e l a de simbolos & preenchida sequencialmente mas s 6 acessada a t r a v e s de uma t a b e l a de ponteiros preenchida por uma função de HASH. (ver item 3.4.2)
CAPITULO I V
-
I W U A L DE LOGICA2. GERADOR DE TABELA
2.3 Analisador LCxico
Cada entrada da t a b e l a de sinibolos ocupa 16 bytes d i v i d i d o s nos carnpos :
1
-
Nome do i d e n t i f i c a d o r-
9 bytes.2
-
Controle da entrada-
1 byte-
indica se o i d e n t i f i c a d o r & nome de mnemonico, de t i p o ou de l i t e r a l .3
-
Ponteiro para prdxima entrada-
2 bytes-
indica prbxima entrada no caso de c o l i s ã o na tabela de ponteiros.4
-
O s 4 bytes que faltam dependem do t i p o de entrada:-
Se nome de mnemonico: 1 byte para o n h e r o de b i t s que o mnem onico possui, 2 bytes para a descrição dos b i t s .-
Se nome de t i p o : 1 b y t e para tamanho do campo, 1 byte para d e f a u l t de preenchimento, 2 b y t e s para t e c l a a u x i l i a r da l i s t a de mnemonicos.O autônomo f i n i t o , implementado atravCs de um comando CASE, para i n t e r p r e t a r a expressão regular definida acima possui a seguinte forma grtif i c a :
LETRA ou ARAB
LETRA I
1-
--
O... i d e n t i f i c a d o r ou palavra reservadaI
I
I
ARAI3 ! ARABI _ _ _ _ ~ _ ~ - _ - _ _ _
O... ntimero decimalI
I
I
$ ! BITI---
O....,... ntimero bin8rioI
I
I
# ! HEXADI_____________
O... ntimero hexadecimalI
I
I
su
I______-____-
O... simbolos 6nicosA c l a s s e de um token C, p r t a n t o , determinada pelo seu primeiro c a r a c t e r . A sua implementação faz-se atravhs da indexação do primeiro c a r a c t e r do token num v e t o r que possui para cada c a r a c t e r ASCII o v a l o r da sua c l a s s e
-
LETRA = fl, DECI~L=1,BINARIO=2, HEXAüECIMAL=3,SIMBOLOS UNICOS =4 e OUTROS=5.28 CAPITULO I V
-
MANUAL DE LOSICA2. GERADOR DE TABELA
2 - 4 Analisador Semântico
A anAlise semântica foi feita com a inclusão de pontos de chamada de rotinas de ação semântica na gramtitica compactada descrita no item 2.2.1. O analisador semântico controla a geração de c6digo.
2.4.1
-
Gramdtica Compactada com Slmbolos de Ação Semântica. S->
DV maquina id: tam = dec, enc = L I T (61, campos DC fim $N
->
biriI
hex LDM-> id = N (0); LDM1
epsi lon DV1->
tipo id (1): DTC ; LTC1
epsilonDTC
->
tam = dec,
enc = L I T ( 3 1 , E T ( 5 )lid ( 4 ) L I T
->
id (2)I
LM->,
id (12) LM1
eps i lon LTC->
id (1) : DTC ; LTC1
epsilon DC->
id : pos = dec (71, DTC (8); LC DC1Icaso id : pos = dec (71, DTC (9) de id {lfl): (id : p s : dec,
(7)
DTC (8); L C ) ; L F,
fim (11) LCLC
->
id : pos = dec (71, DTC (8); LC1
eps i lon~1
->
caso id : pos = dec (71, DTC ( 9 ) de id (10): (id : p s = dec{7), DTC ( 8 ) ; L C ) ; L F fim {ll) LC1
epsilonL F
->
id {lB) : (id : p s = dec {7), DTC (8); LC) ; L F1
eps i lonCAPITULO I V
-
MANUAL DE L G I C A2. GERADOR DE TABELA
2.4 Analisador Semântico
O s pontos de chamada de ação semântica (ou simbolos de ação semântica) são o s nhmeros e s c r i t o s , e n t r e chaves. Cada nhmero corresponde a uma determinada ação semântica
-
ver item 2.6.10.2.4.2 Cddigo Gerado
Ser& uma t a b e l a a s e r armazenada e m arquivo de organização seqbencial, onde cada entrada ou r e g i s t r o corresponde a um campo ou microordem, a menos do primeiro r e g i s t r o que guarda informações sobre a mdquina como um todo.
O primeiro r e g i s t r o C composto p e l a s seguintes informações:
-
nome da mdquina-
9 bytes-
corresbwnde ao <nome-m&quina>-
ver item 1.5.-
tamanho em b i t s da palavra a ser gerada-
2 bytes-
d e f a u l t de preenchimento do programa-objeto em endereços não d e f i n i d o s no microprograma-fonte-
1 byte-
n&meros de nhmero de campos p o s s i v e i s-
cada nhmero de campos p o s s i v e i s ocupa um byte-
essa informação s e j u s t i f i c a conforme o t i p o de microprogramação f o r de codificação d i r e t a ou de d o i s n i v e i s .O s o u t r o s r e g i s t r o s referem-se aos campos da microinstrução que podem s e r f i x o s , condicionais, varidveis ou l i t e r a i s .
Todos o s campos possuem formato i d e n t i c o a t e o byte 5 :
Posição do campo : 1 word
-
refere-se à posição i n i c i a l do campa na microinstrução.Controle : 1 b y t e
-
indica s e o campo C FIXO, CONDICIONAL, VARIAVEL ou LITERAL.Tamanho : 1 b y t e
-
indica o nfimero de b i t s ocupados por e s s e campo. Default de preenchimento : 1 b y t e-
refere-se ao v a l o r de preenchimento quando e s s a microordem C deixada em branco no microprograma.Se o campo f o r f i x o ou condicional essa seqoência s e r 8 seguida por 9*(2**TAM) bytes, onde serão armazenados o s mnemônicos nos l u g a r e s r e l a t i v o s aos b i t s que representam. Se o campo f o r v a r i d v e l , haver8 2 bytes para receber a cadeia de b i t s do mnemonico que o s i n a l i z a ; depois teremos o mesmo do d e s c r i t o acima. Campo l i t e r a l não precisa de mais informações, p i s ser$ sempre preenchido por um endereço no microprograma passado atravds de constante ou rbtulo.
3 0
CAPITULO IV
-
MANUAL DE LOGICA 2. GERADOR DE TABELA2.5 Arquivos Utilizados
2.5.1 Arquivo de entrada
Contem o programa-fonte escrito na linguagem descrita no item 1.5 do MANUAL DE UTILIZACRO.
2.5.2 Arquivo de saida
Contem a tabela necessaria a montagem de qualquer microprograma referente a essa maquina.
E
criado durante a execução do GERADOR DE TABELA com o nome que designa a maquina. Essa informação e passada na linguagem de especifição do microassembler.2.5.3 Arquivo de listagem
Contem a listagem do programa-fonte com cabeçalho, erros e outras informações
.
CAPITULO I V
-
MANUAL DE LOGICA2. GERADOR DE TABELA
2 .G P r i n c i p a i s Rotinas
2.6.1 Introdução
Como jd f o i d i t o , o algoritmo de parser p r e d i t i v o controla o programa como um todo (ver Fundamentos Te6ricos). Antes da execução desse algoritmo, são chamadas r o t i n a s que analisam a s informações dos arquivos de entrada e s a i d a , que empilham a produção i n i c i a l da gramatica e iniciam a a n a l i s e lkxica devolvendo o primeiro token.
Função :
Analise l e x i c a dos parâmetros passados na d i r e t i v a de execução do GERATAB e o preenchimento de uma a r e a com a s informações passadas. Caso não tenha havido opção por passagem de parâmetros são assumidos o s d e f a u l t s .
Sintaxe dos parâmetros :
Rotinas Chamadas: EXIJA SIMBOLO MOVE .NOME AVANCA. PT VOLUME DISCO Ern.PARMS Função :
Alocar e a b r i r arquivo de entrada. Preencher e imprimir cabeçalhos de pAgina e de i n i c i o d e compilação. Abrir arquivo de listagem.
Chamada :
---
PUSH.LADO.DIR (PRODUGKO)
parâmetro PRODUÇAO
-
indica o nhnero da produção a ser empilhada. Função :---
3 2 CAPITULO I V
-
MANUAL DE LOGICA2. GERACOR DE TABELA
2.6 P r i n c i p a i s Rotinas
de simbolos. Reconhecer s e a produção a s e r empilhada & vazia. Controlar estouro de p i l h a de simbolos.
Função :
Ler arquivo com programa-fonte, desprezando r e g i s t r o s com comentdrios. Ao fim dessa r o t i n a , & devolvido ao a n a l i s a d o r s i n t A t i c o o prbximo tolten a s e r validado.
Rotinas Chamadas:
---
LE
.
ARQENTANALISADOR. LEXICO Rotinas que a Chamam: RNALISADOR.SINTATICO ERRO
Função :
---
A p 5 s desprezar o s c a r a c t e r e s brancos, d i v i d e em c l a s s e s a cadeia de c a r a c t e r e s recebidos, implementando um autômato f i n i t o : i d e n t i f i c a d o r ou palavra reservada ( c l a s s e 0)' nfimero decimal ( c l a s s e l), nfimero b i n d r i o ( c l a s s e 2 ) , nhmero hexadecimal ( c l a s s e 3)
,
simbolos hnicos ( c l a s s e 4),
simbolos inesperados ( c l a s s e 5 ) . Em cada uma dessas c a t e g o r i a s , preenche a p i l h a de a t r i b u t o s , gerenciando a t a b e l a de simbolos no caso de i d e n t i f i c a d o r e s . Rotinas Chamadas: COME.BRANCOS LETRA DIGITO AVANCA.
PT ERRO MONTA.CADEIA I-IASHCAPITULO IV
-
IV1F;NUAL DE LOGICA 2. GERADOR DE TABELA2 -6 Principais Rotinas
2.6 -7 HASH Função :
E
uma word procedure que implementa uma função de hash e devolve o endereço de entrada na tabela de simbolos para o identificador.A função de hash passa por tres fases:
-
fase de ou-exclusivo-
& feito ou-exclusivo entre words compostas pela associação de cada dois caracteres do identificador, sendo que de cada caracter & retirado o 10. e 50. bit mais significativo para então ser compactado em 6 bits e ser transcrito na word.-
fase de potência-
a word resultante da fase anterior & levada ao quadrado e então são tomados os 10 bits menos significativos para entrada na tabela de simbolos.-
fase de colisão-
em caso de colisao & preenchido o ponteiro da entrada na tabela de simbolos para a pr6xima entrada livre dessa tabela.Rotina Chamada:
---
PREENCHE.TSEQ.SIMi3
Função :
---
Desempilhar o simbolo do topo da pilha de sirnboloç. Rotinas que a chamam:
mALIsADOR.SINTATICO ERRO ACAO.SEMANTICA 2.6.9 ERRO Chamada :
---
ERRO (NUM. ERRO) Função :
---
Apontar onde e qual erro foi detectado. No caso de erro sintdtico, & adotada a t&cnica do panic mode. Contar nhmero de erros e advertências. Rotinas que a chamam:
3 4 CAPITULO IV
-
MANUAL DE L&ICA2. GERADOR DE TABELA 2 -6 Principais Rotinas ANALISADOR.SINTATIC0 PREENCHE. LISTA.MNEM ACAO
.
SEMANTICA 2.6 .10 ACAO.
SEMANTICA Chamada :---
AGRO
.
SEMANTICA (AGRO)parametro AÇKO
-
indica o nilimero da ação semantica desejada. Função :Fazer as ações semanticas conforme gramdtica compactada modificada para analise dos atributos. São as seguintes:
Ação 0: DV
-->
constante id = N (0); LDM DV1---
LDM-->
id = N (0); LDM-
Situação da Pilha de Atributos (P.A.) : 0 : 1D.EhlDER (entrada na tab simb) 1 : NUM DE BITS.2 : Valor do BinArio 1D.CONSTANTE
-
Se ID.JA1.DECL, ERRO.-
Entrada & 1D.CONSTANTE (CTL.CPO.TAB:=CPO.TAB.CTE).-
Armazenar na tab simb as informações da pilha.-
Esvaziar a pilha.Aç3o 1: DV1
-->
tipo id (1): DTC; LTCLTC
-->
ID (1) : DTC ; LTC-
Situação da P.A.: 0 : ID.ENDER-
Se ID.
JA'.
DECL,
ERRO.-
Entrada ID.TIP0 (CTL.CPO.TAB:=CPO .TAB.TIP).
Agão 2: LIT-->
id (23---
-
Situação da P.A. :0 : 1D.ENDER de ID.TIP0
1 : Valor do decimal referente a TAM.CP0 2 : 1D.ENDER de ID.CONSTAS\ITE
CAPITULO IV
-
MANUAL DE LOGICA 2. GERADOR DE TABELA 2.6-
-
-
-
Ação 3: Principais Rotinas Se ID.NAO.DECL, ERRO. Se ID.NAO.CONSTANTE, ERRO.Substitui na P.A. 1D.ENDER de 1D.CONSTANTE pelas informações NüM DE BITS e valor bin8rio referente a essa entrada na tab sirnb. Situação da P.A.:
0 : 1D.ENDER de ID.TIP0
1 : Valor do decimal referente a TAM.CP0
2 : NUM DE BITS de ENC.CP0
3 : Valor do bin8rio referente a ENC.CP0 DTC
-->
tam = dec, enc = LIT (31, ET (5)Situação da P.A.:
0 : 1D.ENDER de ID,TIPO
1 : Valor do decimal referente a TAM.CP0
2 : NUM DE BITS de ENC.CP0
3 : Valor do bin8rio referente a ENC.CP0
Armazena na tab simb, na entrada ID.ENDER, as informações constantes na P.A.
Se TAM.DIFER.NUM.DE.BITS, ADVERTENCIA. Serão considerados os bits mais a direita de ENC.CP0
Deixar na pilha apenas ID.ENDER. DTC
-->
id ( 4 )Situação da P.A,:
0 : ID-ENDER de ID.TIP0.
1 : 1D.ENDER de ID.TIP0 j A declarado anteriormente. Se ID .NA0
.
DECL,
ERRO.Se ID .NA0 ,TIPO, ERRO.
Se ID .AINDA .NA0 .PREENCHIDO, ERRO.
Mover informações da entrada da tab sirnb em P.A.(l) para P.A. ( 0 ) .
Esvaziar P.A.
DTC
-->
tam = dec, enc = LIT ( 31, ET ( 51Situação da P.A. se ID.TIP0 for LITERAL: 0 : 1D.ENDER de ID-TIPO.
36 CAPITULO IV
-
MANUAL DE LOGICA2 . GERADOR DE TABELA
2.6 Principais Rotinas
-
Se LITERAL, CTL.CPO.TAE3 := CPO.TAB.LIT-
Se não LITERAL, transcrever endereços de ID.CONSTANTE para a tabela auxiliar, passando a primeira posição dessa tabela simbolos (campo PONT. LISTA).
-
Esvaziar P.A.Ação 6: S
-->
DV mdquina id: tam = dec, enc = LIT (61, campos DC fim $-
Situação da P.A.:0 : ID.ENDER de 1D.MAQ. 1 : Valor decimal de TAM.PAL
2 : NUM DE BITS de ENC-PAL 3 : Valor binario de ENC.PAL
-
Se ID. JA' .DECL,
ERRO.-
Transcrever para AREA.DE.CODIG0: ID.MAQ, TAM.PAL e EbJC.PAL.-
Se TAM.PAL.DIFER.NUM.DE.BITS, ADVERTENCIA.-
Inicio da fase de geração de cbdigo.-
Criação do arquivo seqUência1 que guarda esse cbdigo.-
Gravação do primeiro registro do cbdigo com as infom~ações em AREA.
DE. CODIGO.
-
Esvaziar P.A.Ação 7:
...
id: pos = dec (71, DTC...
-
Situação da P .A. :0 : ID.ENDER de 1D.CPO.
1 : Valor decimal da posição de ID.CP0 na palavra
-
Se IB.JA.DECL, ERRO.-
Entrada na tab sirnb 12 ID.TIP0 (CTL.CPO.TAB:=CPO.TAB.TIP).-
Cbdigo gerado para campo fixo (CTL.CPO.COD:=CPO.COD.FIX).-
Desempilhar posição de ID.CPO passando para AREA.DE.CODIG0.CAPITULO I V
-
MANUAL DE L G I C A2, GERADOR DE TABELA
2.6 P r i n c i p a i s Rotinas
-
Checar se e s s a posição I5 i g u a l a do campo a n t e r i o r mais o tamanho do campo a n t e r i o r . Se não f o r , ERRO.-
Situação da P.A.:0 : 1D.ENDER de ID.CPO.
Ação 8:
...
i d : pos = dec (71, DTC ( 8 ) ; LC...
-
P.A. vazia.-
Informações a serem passadas para AREA.DE.CODIG0 e s t ã o em END.TAB (entrada para t a b simb) :TAM.CP0, ENC.CP0, s e campo & LITERAL, se não LITERAL l i s t a de rnnemônicos c o n s t a n t e s da t a b e l a a u x i l i a r .
-
Se campo e s t d d e n t r o de um CASO (informação passada p e l a AGE0 1 0 ) , C preenchido a d e s c r i ç ã o b i n d r i a que c a r a c t e r i z a o uso d e s s e campo (MNEM.CAR) assim como o c o n t r o l e de campoI5 preenchido como variAvel (CTL.CPO.COD:=! o r CPO.COD.VAR)
.
-
Gravação de r e g i s t r o de campo de microinstrução no cõdigo com a s informações da AREÃ.DE.CODIG0,-
TAM .ANTERIOR: =TM .CPO .COD.
-
N h e r o de campos da microinstrução & incrementado. Ação 9:...
i d : pos : dec (71, DTC ( 9 ) de i d (10)...
-
Repete Ação 8.-
Controle do campo 4 condicional.-
Controle não pode s e r l i t e r a l .-
Guarda posição e tamanho do campo condicional.-
Guarda informações de CPO.COND em Area inviolAve1.-
Define, pelo tamanho do campo condicional, o nfimero d e nhrneros d e campoAção 10:
...
id: pos = dec (71, DTC (9) de i d (10): (...-e---
---
Situação da P .A. :0 : 1D.ENDER de ID.CPO.CAS0
-
Se ID.NAO.DECL, ERRO.38
CAPITULO IV
-
MANUAL DE LOGICA2. GERADOR DE TABELA
2 .6 Principais ~ o t h a s
-
Se ID.NAO.ESP.LISTA.COND, ERRO.-
Campos seguintes estão dentro de CASO, sinalizados por I D.
CPO .CASO-
Armazena valor binArio de ID.CPO.CAS0.-
Trata POS.ANTERIOR e TAM.ANTERIOR para compatibilizara
cada ID.CPO.CAS0.-
Esvaziar P.A.Aqão 11:
. .
.
DTC (8) ; LC) ; LF fim (11) L€-
P.A. vazia.-
Campos seguintes não estão mais dentro de CASO. Ação 12: ET-->
(id (12) LM)---
-
Se ID.NAO.DECL, ERRO. Rotinas Chamactas :---
POP .TOPO ERRO GRAVA. COD PREENCHE.LISTA.MENM 2.6.11 PREENCHE.LISTA.MNEM Chamada :---
PREENCHE.LISTA.MNEM (ACAO 9)parâmetro AGE0 9
-
indica, sendo verdadeiro ou falso, se esta rotina estA sendo chamada a partir da ação semântica 9 ou ação semântica 8, respectivamente.Preencher e gravar no arquivo-objeto
a
Area de c6digo relativa a lista de mnemônicos associadosa
determinado campo. O mnemônico & colocado na psição relativa ou seu valor.Rotinas Chamadas: ERRO
GRAVA. COD
Rotina que a Chama: ACAO
.
SEMANTI CACAPITULO IV
-
MANUAL DE LOGICA3. MONTADOR
3.1 Introdução
Esse mddulo exige como entrada a tabela gerada no m6dulo anterior e o programa escrito na microlinguagem. Essa microlinguagem
-
cuja gramatica estd descrita no Manual de Utilizacao, item 2.5-
& na verdade uma lista de microinstruções compostas por mnemônicos e endereços absolutos de memdria.Esn função da simplicidade da gramdtica associado a falta de recursão à esquerda na sua descrição, adotou-se tambem nesse m6dulo o mCtodo LL(1) para a analise sint8tica.
O nkleo desse mbdulo 5 o algoritmo sintAtico preditivo, assim como no mddulo GERADOR DE TABELA. Esse nhcleo controla os analisadores lCxicos e
semânticos
-
que al&m de gerar o cbdigo, gerencia a tabela de sirnbolos. ESQUEMA DE FUNCIONAMENTO/Analisador/
<---
i- +----
---
/ Ana1 i sado r// L&xico /
/
semântico / /--- / +---> /--- /I
I
I
I
I
I
I
I
I
I
I
v/---
/I
/---
/
/ Tabela de/
<---
4/
Geração de/
/
Simbolos //
C6digo /4 B CWITULO I V
-
WNUAL DE LCGICA3. MONTADOR
3 -2 Analisador S i n t d t i c o
A seqflência algoritmica desse m6dulo & i d ê n t i c a a do m6dulo a n t e r i o r : a p a r t i r da gramdtica compactada, baseada na definida para o programa-fonte desse mddulo, nonta-se uma t a b e l a L L ( 1 ) e s p e c i f i c a a s e r consultada para cada s i t u a ç ã o nova e n t r e a p i l h a de simbolos, preenchida p e l o s lados d i r e i t o s d a s produções da g r a d t i c a compactada começando com a produção
i n i c i a l , e a cadeia de tokens traduzida pelo analisador lkxico a p a r t i r do t e x t o de entrada. A s s i t u a ç õ e s não p r e v i s t a s na t a b e l a L L ( 1 ) equivalem a e r r o s s i n t d t i c o s .
3.2.1 Gramdtica Compactada
Para e f e i t o de a n a l i s e s i n t ã t i c a , a gramãtica a ser trabalhada C a seguinte : 1 P
->
mAquina i d A L I . 4,5 E->
D ; AI
MIS 6,7 D->
= N I externa 8,9 N - > decI
hex 10,11 MLS->
: LCI
LC1 14,15 C->
i dI
e p s i l o n 16 , l 7 LC1->
,
LCI
e p s i l o n L8 , l 9 CT->
b i n1
hex 20,21,22 B->
org hexI
LC1I
CT LC1 23 '24 L I->
; I L II
e p s i l o n 25,26 I->
BI
i d MISCAPITULO IV
-
F'IANUAL DE LWICA3. MONTADOR
3.2 Analisador Sintdtico
3.2.2 Construção da tabela LL(1)
.
3.2.2.1 Definição de FIRST e FOLLOW das produções
1
I
FIRSTI
FOLLOW1
+---+---+---+
I
PI
mãquinaI
$I
I
BI
org,,,bin,hex,I
i,.I
I
I
epsilonI
I
I
CTI
hex,binI
i ;I
+---+---+--- 31
EI
=,externa,:,,
, I
;,.
I
I
I
epsilonI
I
4I
DI
=,externaI
; $---+---+--- 4I
I
NI
dec,hexI
; +---4---3--- 4I
I
II
id,org,bin,hex,l ;!.1
I
I
,,epsilonI
I
4 2 CAPITULO I V
-
MANUAL DE LOGICA3. MONTADOR
3.2 Analisador SintAtico
3.2.2.2
-
Tabela L L ( 1 )3.2.3 Pilha d e Simbolos
E simulada a t r a v d s da c r i a ç ã o de d o i s vetores: um armazena o nfimero de simbolos dos lados d i r e i t o s d a s produções a serem empilhadas
-
no programa MONTADOR e s s e v e t o r de variAveis chama-se NSIMB-LDS-
e o outro armazena o topo dessa produção (considera-se topo o simbolo i n i c i a l , da esquerda para a d i r e i t a )-
no programa chama-se PEND.SIMB. Esses v e t o r e s admitem a t e 127 w s i ç õ e s-
v a l o r de TPSIMB.3.2.4 Armazenamento das produções
CAPITULO I V
-
PIANUÃL DE LOGICÃ3 . MONTADOR
3.3 Analisador Lbxico
Esse segmento admite c a d e i a s de c a r a c t e r e s como entrada de acordo com a s e g u i n t e gramdtica regular:
*
TEXTO: ((PALAVRAINUMIBRANCOS) DELIM) PALAVRA: ("maquina", "org"
,
"id",
"externa") NUM: (BIN,
DEC,
HEX)-I- B I N = $ BIT
ARAB = BITI1'2"1
...
l"9"+
HEX = # HEXAD
HEXAD = ARAB
I
"A"I
"
B"I
. . .
I
"F"+
BRANCOS: ( I 1 I ' )
A s a i d a desse segmento, que implementa um algoritmo baseado em
autômato f i n i t o , devolve a s informações de q u a l i f i c a ç ã o do token, n h e r o de simbolos que o cornpem e endereço do i n i c i o de sua cadeia de simbolos.