Buscar

Sistemas de Programação Aula 23 Macro montadores

Prévia do material em texto

PCS-3216 
Sistemas de Programação 
João José Neto 
Aula 23 – Projeto de um Macro Montador 
Introdução 
Nesta aula, propõe-se uma especificação de um 
macro-montador que estenda o montador do 
projeto desenvolvido na disciplina, com a 
finalidade de exercitar o conceito de pré-
processamento de linguagens simbólicas com o 
intuito de elevar ligeiramente seu nível de 
abstração, passando de linguagem simbólica 
simples para linguagem simbólica com a 
possibilidade de definir e utilizar procedimentos de 
código aberto (ou seja, macros) 
Compiladores - 3 - Geração de código 2 
Conceitos 
• Macro é o nome técnico que se dá a um mecanismo de 
abreviação. Uma macro é uma forma mnemônica 
abreviada usada para denotar um conjunto de 
elementos da linguagem em que é utilizada. 
• Em geral, um pré-processamento é aplicado sobre o 
texto que contenha macros, antes da sua utilização. 
• Nessa ocasião, o pré-processador substitui as macros 
(abreviaturas) pela respectiva forma extensa, e o texto 
resultante é liberado para ser devidamente processado. 
 
Compiladores - 3 - Geração de código 3 
Contextualização no Sistema de Programação 
• A figura no próximo slide mostra a relação direta 
que existe entre os processadores de macros e os 
programas de sistema que eles apoiam (no caso, 
um compilador ou um montador), contextualizados 
no ambiente computacional, mostrando portanto o 
fluxo das informações entre os diversos programas 
do sistema que direta ou indiretamente interagem 
com os expansores de macros. 
Compiladores - 3 - Geração de código 4 
5 Compiladores - 3 - Geração de código 
Contextualização de 
expansores de macros 
em um sistema de 
programação 
 
 
 
 
 
 
Máquina Virtual MVN 
Programa Fonte 
do Aplicativo 
(em linguagem de 
alto nível sem macros) 
dados 
Simulador MVN 
Montador da MVN 
Ambiente de Execução 
(em formato objeto 
Relocável da MVN) Compilador 
Programa Objeto 
do Aplicativo 
(programa-fonte em 
linguagem MVN de 
montagem sem macros) 
Loader MVN 
Programa Objeto 
(Absoluto MVN) 
Relocador da MVN 
Programa Aplicativo 
(em formato objeto 
Relocável da MVN) 
resultados 
Java / PC 
Programa Fonte do 
Ambiente de Execução 
(em linguagem MVN de 
montagem sem macros) 
Expansor de Macros para 
linguagem de alto nível 
Programa Fonte 
do Aplicativo 
(em linguagem de 
alto nível com macros) 
Programa Fonte 
do Aplicativo 
(em linguagem MVN de 
montagem com macros) 
Expansor de Macros para a 
linguagem de montagem da MVN 
Especificação resumida 
• Pretende-se incluir no conjunto de pseudo-
instruções do montador no mínimo o seguinte 
conjunto de novas pseudos: 
– Declaração do nome da nova macro 
– Declaração do nome de um parâmetro da nova macro 
– Início do corpo da nova macro 
– Final do corpo da nova macro 
– Chamada de uma macro 
– Declaração de argumento associado a um parâmetro 
 
6 Compiladores - 3 - Geração de código 
Significado da declaração da macro 
• Um cabeçalho declara o nome e os parâmetros da 
nova macro, e se encerra ao ser encontrada a pseudo 
que marca o início do corpo da macro que está 
sendo declarada 
• O corpo da macro se encerra ao ser encontrada a 
pseudo instrução correspondente no programa-fonte 
• No corpo da macro as chamadas que forem feitas da 
macro em questão devem ser substituídas em um 
momento anterior à montagem. 
• A montagem definitiva será aplicada ao texto do 
código expandido, resultante dessas substituições. 
Compiladores - 3 - Geração de código 7 
O processador de macros 
• Por questão de uniformidade, convém (embora não seja 
obrigatório) que um processador de macros a ser usado com 
um montador realize seus comandos e declarações através do 
emprego de pseudo instruções similares às já existentes na 
sua linguagem simbólica. 
• Um processador de macros, usado como pré-processador do 
montador, forma, com este último, um macro-montador 
• Se o macro-montador for projetado e utilizado como um 
invólucro do montador, este nem precisará ser alterado para 
que passe a incorporar o recurso de macros para a sua 
programação. 
Compiladores - 3 - Geração de código 8 
Uma arquitetura do macro montador 
Compiladores - 3 - Geração de código 9 
Montador 
Pré processador 
de macros 
Texto fonte, 
com 
declarações e 
chamadas de 
macros 
Repositório de 
novas macros: 
-- nome 
-- parâmetros 
-- corpo da macro 
Texto fonte puro, 
isento de macros 
Declarações 
de macros 
Chamadas 
de macros 
Texto puro, 
sem macros 
O montador, nesta arquitetura, 
fica preservado em sua forma original, 
operando o processador de macros 
como pré-processador do texto fonte. 
Formato do texto completo, com macros 
• Convenciona-se que o texto fonte se 
inicie com uma sequência de 
declarações de novas macros. 
• Após as declarações, inicia-se um texto 
arbitrário em linguagem de montagem, 
contendo eventuais chamadas das 
macros declaradas, inseridas em um 
programa-fonte simbólico usual, que se 
estende até o final do programa-fonte. 
Compiladores - 3 - Geração de código 10 
Texto fonte, 
com 
declarações e 
chamadas de 
macros 
Declarações 
de macros 
Chamadas 
de macros 
+Texto puro, 
sem macros 
Formato da declaração de macro 
• Cada macro declarada no texto-fonte deve 
apresentar-se com os seguintes elementos: 
– o nome da macro que está sendo declarada 
– os parâmetros da macro 
(uma declaração separada para cada parâmetro) 
– Uma pseudo instrução diferenciada, para marcar o 
início do corpo da macro 
– Um texto arbitrariamente longo, correspondente ao 
corpo da macro propriamente dito 
– Uma pseudo instrução diferenciada, para marcar o 
final do corpo da macro 
 
Compiladores - 3 - Geração de código 11 
Exemplo 
• Como ilustração, vamos definir uma macro SOMA 
que efetua uma operação de adição cujas 
parcelas são os dois parâmetros X e Y da macro: 
 
SOMA DEFMACRO 
X PARAM 
Y PARAM 
 INICMACRO 
 LDA X 
 + Y 
 FIMMACRO 
 
Compiladores - 3 - Geração de código 12 
Declaração de uma nova macro 
• Para a macro SOMA, o 
repositório recebe um 
elemento contendo as três 
informações: 
– Nome – SOMA. 
– 2 Parâmetros – X e Y. 
– Corpo da macro – é a string: 
“ LDA X 
 + Y” 
Compiladores - 3 - Geração de código 13 
Repositório de 
novas macros: 
-- nome 
-- parâmetros 
-- corpo da macro 
Declarações 
de macros 
Chamada da macro 
• A chamada da macro corresponde a uma sequência que se inicia 
no ponto em que o montador identifica a pseudo-instrução 
correspondente no programa-fonte. 
• A cada parâmetro declarado na macro deve estar associado um 
argumento correspondente na sequência de chamada da macro. 
• Cada pseudo que identifica um argumento deve vir associada a 
um texto, que irá substituir, no corpo da macro, cada uma das 
ocorrências do correspondente parâmetro. 
• A sequência de chamada se encerra após a leitura do último 
argumento no programa fonte. 
• Feitas todas as substituições, o corpo da macro, alterado 
devidamente pelas substituições efetuadas, é inserido no lugar 
da sequência de chamada da macro. 
Compiladores - 3 - Geração de código 14 
Formato da chamada de macro 
• No campo dos mnemônicos, deve aparecer o 
nome da macro 
• Nas linhas seguintes, os argumentos 
associados aos vários parâmetros vão sendo 
declarados no campo dos operandos da 
pseudo instrução ARG (argumento). 
Compiladores - 3 - Geração de código15 
Exemplo 
• A chamada da pseudo-instrução SOMA com os 
argumentos 25 e ABC+1 assume o seguinte 
aspecto: 
 
 SOMA 
 ARG 25 
 ARG ABC+1 
Compiladores - 3 - Geração de código 16 
Processamento da chamada de macro 
 
Compiladores - 3 - Geração de código 17 
Montador 
Pré processador 
de macros 
Repositório de 
novas macros: 
-- nome 
-- parâmetros 
-- corpo da macro 
Texto fonte puro, 
isento de macros 
Chamadas 
de macros 
Expansão de macros 
• O montador deve coletar todas as definições de 
macros (nome, parâmetros e corpo) contidos no 
programa-fonte e montar um repositório. 
• O montador deve identificar todas as sequências 
de chamada de macros, utilizar as definições 
coletadas e efetuar as correspondentes 
substituições, gerando como saída um texto-
fonte isento de definições e de chamadas de 
macros. 
• O montador pode então processar o programa 
fonte resultante normalmente. 
Compiladores - 3 - Geração de código 18 
Exercício 
• Projetar um pré-processador, para ser usado em 
conjunto com o montador que está sendo 
construído, que utilize as técnicas estudadas na 
disciplina (especialmente motores de eventos e 
projeto incremental), e que seja capaz de efetuar o 
processamento de macros conforme a 
especificação apresentada nos slides anteriores. 
Compiladores - 3 - Geração de código 19 
 
Compiladores - 3 - Geração de código 20

Continue navegando