• Nenhum resultado encontrado

Publicações do PESC Gerador de Compiladores de Microassembler

N/A
N/A
Protected

Academic year: 2021

Share "Publicações do PESC Gerador de Compiladores de Microassembler"

Copied!
214
0
0

Texto

(1)

- -

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

(2)

NOVAES, FREDERICO J. B. M.

GERADOR DE COMPILADORES DE MICROASSEMBLER

-

RJ

-

1982

iii, 76p. (COPPE

-

UFRJ

,

M. Sc.

,

Engenharia de Sistemas, 1982)

TESE

-

UNIVERSIDADE FEDERAL DO RIO DE JANEIRO

(3)

Essa 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.

(4)

INDICE

.

CAPITULO I

-

INTRODUCAO 1. DESCRIÇAO DO PROBLEMA 2. ORGANIZAÇKO DA TESE

.

CAPITULO I1

-

FUNDAMENTOS TEORICOS 1. ESTRUTURA DE UM COMPILADOR

2. 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çIIO

2. 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ÇKO

2. GERADOR DE TABELA 3. MONTADOR

.

CAPITULO V

-

MANUAL DE UTILIZA(+p;O 1. GERADOR DE TABELAS

2, MONTABOR

.

CAPITULO VI

-

CONCLUSOES

(5)

CAPITULO I

-

INTRODUCKO 1. DESCRIÇKO DO.PROBLEMA

Com 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).

(6)

CAPITULO I

-

INTRODU(JX0 1. DESCRIÇKO DO PROBLEMA FIGURA FASE DE DEFINIÇXO (1)

I---

I

( 2 ) comprimento da instrução->I

campos

---

>

I

I

I

<--

controlador especifico/c&digo codigos de operacao

---

>

1

I

da ULA

default-s

---

> I

I---

I

I

I

I

I

I

formato da microinstrução

I

I

\

/

FASE DE MONTAGEM

I

(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

(7)

CAPITULO I

-

INTRODUCAO 2. OFiGANIZAÇXO DA TESE

O 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 TEORICOS

Apresenta 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 SISTEMA

Apresenta 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 LOGICA

Descreve 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 UTILIZACAO

Descreve 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

-

CONCLUSOES

Faz 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.

(8)

4 CAPITULO I1

-

FUNDAMENTOS TEORICOS 1. ESTRUTURA DE UM COMPILADOR

Um 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.

(9)

CAPTTULO I1

-

FUNDAMENTOS TEORICOS 2. ANALISE L?XICA COM AUT&IATO FINITO

A 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

I

I

-

estado i n i c i a l +--3

(10)

6

CAPITULO I1

-

FZINDAMENTOS TEORICOS 2. ANALISE LEXICA COM AUTOMATO FINITO

Todas as situações não previstas são consideradas como de erro lexico

-

por exemplo o aparecimento no estado 0 do caracter "c".

(11)

CAPITULO I1

-

FUNDAMENTOS TEORICOS

3. 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

=>

a

Seja 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.

(12)

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.

(13)

CAPITULO I1

-

FUNDAMENTOS TEORICOS 3. ANALISE SINTATICA DESCENDENTE

3.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.

(14)

10 CAPíTULO I1

-

FUNDAMENTOS TEORICOS 3. ANALISE SINTATICA DESCENDENTE

3 . 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 :

(15)

CAPITULO I1

-

FUNDAMENTOS TEORICOS

3. 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.

(16)

12 CAPTTULO I1

-

FUNDAMENTOS TEORICOS

4. 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.

(17)

CWTTULO I11

-

PROJETO GERAL DO SISTEMA 1. MICROPROGRAMA(J-IO

Microprogramaçã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.

(18)

14

CAPITULO I11

-

PROJETO GERAL 00 SISTEMA 2. CONSTRU~IO DE MICROPROGRNVIAS

Antes 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.

(19)

CAPITULO 111

-

PROJETO GERAL DO SISTEMA

3 . 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.

(20)

16 CAPITULO 111

-

PROJETO GERAL DO SISTEMA 4. DEPINIÇXO DESSE PROJETO

Esse 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 em

uma 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.

(21)

CAPITULO I11

-

PROJETO GERAL DO SISTEMA

5. 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 do

trabalho 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 .

(22)

18

CAPI?'ULO I V

-

MANUAL DE LOGICA 1. INTRODUGKO

O 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.

(23)

CAPITULO IV

-

MANUAL DE LOGICA

2. 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 /

(24)

2CI CAPITULO IV

-

MANUAL DE LOGICA

2. 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 DV1

I

1x71 3,4 N - > b i n

I

hex 5,6 LDM

->

id = N ; I B M

1

epsilon 7,8 DV1

->

tipo id : DTC ; LTC

1

eps i lon

9 1 DTC

->

tam = dec

,

éric = LIT

,

ET

1

id 11,12 LIT

->

id

I

N 13,14 ET

->

literal

I

( id LM) 15,16 LM

->

,

id LM

1

epsi íon 17,18 LTC

->

id : CTC ; LTC

1

eps i ion

19,2CI DC

->

i6 : pos = dec, DTC ; LC DC1

Icaso id : pos = der, DTC de id : (id : pos : dec, DTC; LC) LP ; fim LC

21,22 LC

->

id : p s = dec

,

DTC ; LC

1

eps i lon

23,24 DCl

->

ceso id : p s = dec, DTC de id : (id : p s = dec, DTC; LC); LF fim LC

(25)

2.2 Analisador Sintdtico

25,26 LF

->

Id : (id : p s = dec, DTC; LC) ; LF

(26)

22 CWIWLO I V

-

MANUAL DE LOGICA

2. 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

DV

I

e p s i l o n ,

I

maquina

I

I

I

t i p o

I

I

I

ET

1

l i t e r a l , (

I

; , d e

I

I

I

I

I

I

I

I

LTC

I

i d , e p s i l o n

I

maquina

I

I

I

I

+----+--- 3

I

I

I

I

I

/

CC

I

id,cnso

I

fim

I

I

I

I

I

3

(27)

CAPI?'ULO I V

-

FANUAL DE LCGICA

S. GERADOR DE TABELA

2.2 Analisaclor SintAtico

3

I

I

I

I

I

ETC

I

id,tam

I

;,de

I

I

I

I

I

+

I

I

I

I

I L C Iid,

I

firn,),caso

I

I

I

epsilon

I

I

I

I

I

I

I

DCl

l

caso,

I

fim

I

I

I

epsilon

I

I

I

I

I

I

I

LF

I

id,epsilon

I

fim

I

I

I

I

$----+--- -I-

I

(28)

CAPITULO IV

-

MANUAL DE LOSICA

2. 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.

(29)

CAPITULO I V

-

MVJNUAL DE LCGICA

2. GERADOR DE TABELA

2.2 Analisador S i n t ã t i c o

2.2.3

-

P i l h a de Simbolos

E 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 Gramatica

A 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ção

SIMB = TIPOSIM3 QUALSIMB TIPOSIMB = TERM

I

NTERM

TERM = "0"

-

i n d i c a sirnbolo terminal NTERM = "1"

-

i n d i c a simbolo não-terminal

7

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 o

(30)

26 CAPITULO I V

-

iYANUAL DE L E I C A

2. 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 = BIN

I

DEC

I

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)

(31)

CAPITULO I V

-

I W U A L DE LOGICA

2. 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 reservada

I

I

I

ARAI3 ! ARAB

I _ _ _ _ ~ _ ~ - _ - _ _ _

O... ntimero decimal

I

I

I

$ ! BIT

I---

O....,... ntimero bin8rio

I

I

I

# ! HEXAD

I_____________

O... ntimero hexadecimal

I

I

I

su

I______-____-

O... simbolos 6nicos

A 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.

(32)

28 CAPITULO I V

-

MANUAL DE LOSICA

2. 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

->

biri

I

hex LDM-> id = N (0); LDM

1

epsi lon DV1

->

tipo id (1): DTC ; LTC

1

epsilon

DTC

->

tam = dec

,

enc = L I T ( 3 1 , E T ( 5 )

lid ( 4 ) L I T

->

id (2)

I

LM->

,

id (12) LM

1

eps i lon LTC

->

id (1) : DTC ; LTC

1

epsilon DC

->

id : pos = dec (71, DTC (8); LC DC1

Icaso id : pos = dec (71, DTC (9) de id {lfl): (id : p s : dec,

(7)

DTC (8); L C ) ; L F

,

fim (11) LC

LC

->

id : pos = dec (71, DTC (8); LC

1

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) LC

1

epsilon

L F

->

id {lB) : (id : p s = dec {7), DTC (8); LC) ; L F

1

eps i lon

(33)

CAPITULO I V

-

MANUAL DE L G I C A

2. 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.

(34)

3 0

CAPITULO IV

-

MANUAL DE LOGICA 2. GERADOR DE TABELA

2.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

.

(35)

CAPITULO I V

-

MANUAL DE LOGICA

2. 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 :

---

(36)

3 2 CAPITULO I V

-

MANUAL DE LOGICA

2. 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

.

ARQENT

ANALISADOR. 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-IASH

(37)

CAPITULO IV

-

IV1F;NUAL DE LOGICA 2. GERADOR DE TABELA

2 -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:

(38)

3 4 CAPITULO IV

-

MANUAL DE L&ICA

2. 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; LTC

LTC

-->

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

(39)

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 ( 51

Situação da P.A. se ID.TIP0 for LITERAL: 0 : 1D.ENDER de ID-TIPO.

(40)

36 CAPITULO IV

-

MANUAL DE LOGICA

2 . 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.

(41)

CAPITULO I V

-

MANUAL DE L G I C A

2, 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 campo

I5 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 campo

Açã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.

(42)

38

CAPITULO IV

-

MANUAL DE LOGICA

2. 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 compatibilizar

a

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 associados

a

determinado campo. O mnemônico & colocado na psição relativa ou seu valor.

Rotinas Chamadas: ERRO

GRAVA. COD

Rotina que a Chama: ACAO

.

SEMANTI CA

(43)

CAPITULO IV

-

MANUAL DE LOGICA

3. 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 /

(44)

4 B CWITULO I V

-

WNUAL DE LCGICA

3. 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 ; A

I

MIS 6,7 D

->

= N I externa 8,9 N - > dec

I

hex 10,11 MLS

->

: LC

I

LC1 14,15 C

->

i d

I

e p s i l o n 16 , l 7 LC1

->

,

LC

I

e p s i l o n L8 , l 9 CT

->

b i n

1

hex 20,21,22 B

->

org hex

I

LC1

I

CT LC1 23 '24 L I

->

; I L I

I

e p s i l o n 25,26 I

->

B

I

i d MIS

(45)

CAPITULO IV

-

F'IANUAL DE LWICA

3. 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

FIRST

I

FOLLOW

1

+---+---+---

+

I

P

I

mãquina

I

$

I

I

B

I

org,,,bin,hex,

I

i,.

I

I

I

epsilon

I

I

I

CT

I

hex,bin

I

i ;

I

+---+---+--- 3

1

E

I

=,externa,:

,,

, I

;

,.

I

I

I

epsilon

I

I

4

I

D

I

=,externa

I

; $---+---+--- 4

I

I

N

I

dec,hex

I

; +---4---3--- 4

I

I

I

I

id,org,bin,hex,l ;!.

1

I

I

,,epsilon

I

I

(46)

4 2 CAPITULO I V

-

MANUAL DE LOGICA

3. 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

(47)

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.

Referências

Documentos relacionados

libras ou pedagogia com especialização e proficiência em libras 40h 3 Imediato 0821FLET03 FLET Curso de Letras - Língua e Literatura Portuguesa. Estudos literários

O princípio de igualdade entre os seres humanos não é uma descrição de uma suposta igualdade concreta entre os humanos: é uma prescrição de como deveríamos tratar os

forficata recém-colhidas foram tratadas com escarificação mecânica, imersão em ácido sulfúrico concentrado durante 5 e 10 minutos, sementes armazenadas na geladeira (3 ± 1

Users who join Reddit earlier post more and longer comments than those who join later, while users who survive longer start out both more active and more likely to comment than

One final consideration regards the stress scores identified by our study: when compared to most previous studies about stress among parents of preterm infants and term infants with

Haveria ainda para tratar outras interfaces produtivas que a autora refere, aliás, logo no primeiro capítulo do livro: entre Pragmática e Sintaxe, por exemplo, dado que a

Com os resultados obtidos nas simulações, foram aplicados dois métodos diferentes de fixação dos sensores e estudada a deformação vertical da placa, quando sujeita a

Especificamente as questões levantadas buscam avaliar qual o contributo das espécies mais representativas da área amostral (Bolbochenous maritimus (L.) Palla,