·

Engenharia da Computação ·

Compiladores

Send your question to AI and receive an answer instantly

Ask Question

Preview text

TEORIA DA COMPUTAÇÃO E COMPILADORES Prof MSc Renato Matroniani Compiladores Bibliografia Sugerida AHO A V et al Compiladores Princípios Técnicas e Ferramentas São Paulo PearsonAddisonWesley 2008 HOPCROFT J E ULLMAN J D Introdução à Teoria dos Autômatos Linguagens e Computação Rio de Janeiro Campus 2003 MENEZES P B Linguagens Formais e Autômatos Porto Alegre Sagra Luzzatto 3ª Ed 2000 178p EMENTA Gramáticas contexto Tipos de reconhecedores Operações com linguagens Propriedades das linguagens Autômatos de estados finitos Autômatos de pilha Máquina de Turing Análise léxica e sintática Tabelas de símbolos Linguagens regulares livresde Esquemas de tradução contexto e sensíveisao Ambientes de tempo de execução Linguagens intermediárias Geração e otimização de código Montadores Ligadores Projeto e implementação de um compilador Conceitos básicos Há uma relação básica entre linguagens montadores compiladores e interpretadores Para entender isso vamos aos conceitos Linguagem De acordo com João José Neto no contexto de compiladores a linguagem é a forma que podemos nos comunicar com o computador através de um programa que ele possa entender Essas linguagens são as linguagens de programação de alto nível ou também conhecidas como linguagens de alto nível imperativas que são as linguagens muito utilizadas nos dias de hoje que permitem construir programas executáveis Veja que aqui estamos tratando de linguagens de programação e não mais as linguagens regulares livres de contexto etc Montadores Linguagens mais arcaicas denotam em sentido simbólico linguagens de baixo nível ou seja próxima da linguagem da máquina Montadores são de acordo com João José Neto programas de sistemas responsáveis pela preparação para a execução de linguagens simbólicas de baixo nível Os montadores costumam a serem estudados em outras disciplinas como Sistemas de Programação ou similares Compiladores Através dos compiladores é possível implementar uma linguagem de alto nível a partir de uma linguagem de entrada para a linguagem que a máquina reconhece Se pensarmos como um processo temos de forma simplificada o seguinte esquema de funcionamento Isso quer dizer que há necessidade de um processamento de informações para que o computador entenda a linguagem Interpretadores A ideia do interpretador é muito parecida com o compilador mas um interpretador executa os comandos do programa fonte aos poucos Os interpretadores são utilizadas para a construção para a simulação de simulação de sistemas reativos interpretação de ambientes de execução e de linguagens de script Para entende um tradutor e sua diferença para um interpretador seria um programa que interpretaria sim as linhas de programação escrita e traduziria todo o contexto para a linguagem de máquina Linguagens de programação paradigmas Características modo imperativo programas em formas de texto contendo comandos que devem ser executados na sequência indicada por quem programou como a linguagem C Qual a ideiasentido de imperativo aqui funcional os programas se resumem a declarações de funções dependentes uma da outra Na sua execução ela se limita à avaliação dessa função que representa o programa como um todo como no caso do LISP utilizada em IA lógico o programador insere uma série de regras e fatos e o computador se encarrega de combinar essas entradas para uma saída adequada ainda assim orientada pelo programa como no caso da linguagem PROLOG também utilizada em IA visual neste tipo de programação o programador dispõe de ícones e associaos ao procedimento desejado de execução como no caso do VISUAL BASIC Essas linguagens permitem ao programador representar as rotinas e funções através de ícones orientada a objetos geralmente associado ao modo imperativo como a linguagem SmallTalk As classes nessas linguagens São as funções que determinam o comportamento do objeto A sequência de eventos ocorre de acordo com o que foi programado e há ligação entre cada módulo ou objeto em cada etapa Pode estar associado aos programas visuais As demais linguagens costumam associar mais de um tipo dessas aqui apresentadas Linguagens de programação paradigmas Características Linguagem com paradigma imperativo versus paradigma orientado a objetos Na linguagem estruturada imperativa o programa é escrito em rotinas e subrotinas Mesmo com as subrotinas no final temos uma grande rotina que executa todo o programa Fonte httpswwwaluracombrartigospooprogramacaoorientadaaobjetos acesso em 17mai2021 Também nesse tipode linguagem são geradas muitas variáveis que pode gerar uma perda de eficiência no processamento Linguagem com paradigma imperativo versus paradigma orientado a objetos Já na programação orientada a objetos como alternativa à programação estruturada temos o objeto como algo tangível o que traz mais proximidade da linguagem à necessidades do mundo real Exemplos dessas linguagens C C Java Resumindo de acordo com a Digital House 2020 no paradigma da programação estruturada temos procedimentos ou funções que são aplicados globalmente na aplicação No caso da orientada a objetos temos atributos e métodos que são aplicados aos dados de cada objeto Embora de procedimentos iguais a diferença se direciona aos seus escopos httpswwwdigitalhousecombr acesso em 18mai2021 Linguagens de Programação em formas de texto componentes elementos básicos de representação caracteres ASCII em arquivos txt comentários útil apenas para o programador não para o compilador abreviaturas funções rotinas subrotinas elementos léxicos identificadores números inteiros números de pontos flutuantes sinais de formatação sinais de agrupamento espaçamento é o vocabulário da linguagem construções sintáticas lista de identificadores constates parâmetros argumentos sequências expressões em outras palavras comandos das linguagens Construções sintáticas específicas declarações comandos blocos estruturas de dados estruturas de controle Compilação definição e como ocorre De acordo com João José Neto compilação é a obtenção de um programa em modo executável a partir de um programa fonte escrito pelo programador Basicamente o compilador executa as seguintes operações análise léxica decompõe o programafonte extraindo as partículas elementares e converte a sequência obtida em outra formada apenas por elementos léxicos da linguagem análise sintática aplicação sucessiva do processo às sequências até que o programa seja totalmente executado geração de código as estruturas sintáticas formadas são interpretadas e a partir disso é construído um código objeto executável equivalente outras atividades produção de listagens relatórios identificação e geração dos logs de erros otimização do código etc Compilação Desenho do Processo Geral Interpretadores Interpretação ocorre após a identificação dos diversos componentes léxicos e sintáticos do programa atribuir significado a eles mediante a execução de procedimentos de tratamento que levam em consideração a sintaxe encontrada e a situação da execução no instante em questão As rotinas de tratamento podem gerar ocorrências de eventos dependentes cujas rotinas são atividades de geração de códigos em compiladores e de interpretação direta em interpretadores Ciclo de teste de desenvolvimento de um compilador Fonte João José Neto httpwwwuspbrportal acesso em 18mai2021 FrontEnd de um compilador Fonte João José Neto httpwwwuspbrportal acesso em 18mai2021 FrontEnd de um compilador parte do compilador que trabalha mais próximo do programafonte revisar linguagens intermediárias de baixo e alto nível Esquema de construção de um complador baseada em seus componentes comuns Fonte João José Neto httpwwwuspbrportal acesso em 18mai2021 revisar linguagens intermediárias de baixo e alto nível Esquema de construção de um compilador baseada em seus componentes comuns Fonte Adap AHO A V et al Compiladores Princípios Técnicas e Ferramentas São Paulo PearsonAddisonWesley 2008 p 160