Baixe o app para aproveitar ainda mais
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
Compartilhar