Escolar Documentos
Profissional Documentos
Cultura Documentos
Estrutura e funcionamento
de um compilador
• Teleaula nº: 1
Conceitos
Estrutura de um
compilador
Linguagem de Programação
Linguagem de programação: é um método que segue um
padrão para transmitir instruções para um computador
• Linguagens de baixo nível;
• Linguagens de alto nível.
Linguagens de Programação
Assembly: MOV AX, 5; // Move 5 para AX
• Próxima a linguagem de máquina (baixo nível); MOV BX, 4; //Move 4 para BX
ADD AX, BX; // Soma AX com BX
• É relacionada com a arquitetura
HLT; //Finaliza o programa
de computadores;
FORTRAN, ALGOL, COBOL:
• Primeiras linguagens de alto nível.
LISP:
• Paradigma funcional;
• U)liza expressões matemá)cas como estrutura de
dados elementares
Linguagens de Programação
• Sintaxe: descreve se o programa foi escrito
corretamente;
• Nomes: regras para nomear as en)dades;
• Tipos: )pos de valores que a linguagem pode
manipular (decimal, booleano, árvores ...)
• Semân>ca: efeito que determinado comando tem
sobre os valores envolvidos.
a = b ; // a semân)ca deve analisar se os
//)pos das variáveis a e b são
//compadveis com as regras da LP;
Paradigmas de Programação
Paradigma imperativo:
• Fundamentado no modelo de von Neumann;
• O programa quanto as suas variáveis são
armazenados juntos;
• A estrutura e os recursos da linguagem, permitem
uma transcrição quase direta da solução algorítmica;
• Cobol, Fortran, C, Ada e Perl.
Paradigmas de Programação
Paradigma orientado a objeto:
• O programa é uma coleção de objetos, o qual
interagem entre si, trocando mensagens;
• Modelar o mundo como peças (objetos), de forma
abstrata sem atribuir valores, e somente depois
desenvolver (implementar) a solução relacionando
os diversos objetos e comportamentos;
• C++, C#, Java, Python.
Paradigma Funcional:
• Modela um problema computacional como uma
coleção de funções matemá)cas;
Paradigma Lógico:
• Modela um problema declarando qual resultado o
programa deve obter, em vez de como ele deve ser
ob)do.
esta(umido, true).
esta(pra_chuva, true) :- esta(umido,true).
?- esta(pra_chuva, Resposta).
Tipos de Compiladores
• Montadores: traduz o código Assembly em código de
máquina;
• Compiladores: traduz o código em alto-nível em uma
linguagem alvo;
• Interpretadores: as instruções são executadas
diretamente;
• Compiladores híbridos: todos os passos de uma
compilação, mas gera código intermediário, que será
executado por uma MV.
Fonte: Livro texto
Conceitos
Fundamentos de
linguagens formais
Linguagens Formais
• Alfabeto (∑): É um conjunto finito, não vazio, de
símbolos os quais são formadas as cadeias.
Ex.: ∑= {a, b}.
a = aaa
a’= bbb
b = aa’ = aaabbb
a³= aaaaaaaaa
Linguagens Formais
A representação de todas as palavras sobre um
alfabeto , é ∑*, onde:
∑* denota o conjunto de todas as palavras possíveis
sobre o alfabeto (incluindo ε);
∑" representa o conjunto de todas as palavras possíveis
sobre o alfabeto , exceto a palavra vazia
Linguagens Formais
Linguagem formal (L):
Uma linguagem formal L é um conjunto de palavras
sobre um alfabeto;
Hierarquia de
Chomsky e BNF
Fundamentos das Linguagens Formais
Uma linguagem L qualquer é definida pela
gramá)ca de um determinado alfabeto å, sendo a
gramá)ca o conjunto das regras e o alfabeto um
conjunto finito, não vazio.
Projeto NEW
(Language New
Compiler )
• Você deve apresentar os princípios projeto de
uma linguagem e os )pos de paradigmas
existentes;
• Apresentar o conceito da linguagem modelo
LOGO;
• Apresentar os elementos básicos de uma
linguagem;
• Qual seria a melhor técnica de representar uma
linguagem?
Princípios de uma Linguagem:
• Sintaxe: descreve se o programa foi escrito
corretamente;
• Nomes: regras para nomear as en)dades;
• Tipos: )pos de valores que a linguagem pode
manipular (decimal, booleano, árvores ...)
• Semân>ca: efeito que determinado comando
tem sobre os valores envolvidos.
Paradigmas de Linguagem:
• Paradigma Impera)vo;
• Paradigma Orientado a objetos;
• Paradigma Funcional;
• Paradigma Lógico;
Elementos de uma Linguagem:
• regra do nome das variáveis, )pos dos dados,
instruções de controle, além da indicação de
início e fim de programa.
Apresentação da Linguagem modelo LOGO:
Exercício
Classifique as linguagens Formais
Conceitos
Planejamento da
construção de um
Compilador
Bootstrapping
O primeiro compilador foi escrito em código de máquina,
sua construção foi trabalhosa, porém, como vantagem a
rapidez e serviu como base para todos os outros através do
processo de bootstraping.
Ferramentas para o
desenvolvimento
de um Compilador
Ferramentas de Apoio
Ferramentas de apoio para o desenvolvimento dos
compiladores:
• Geradores de analisadores léxicos;
• Geradores de analisadores sintá)cos; e
• Geradores de código.
Termos
• Token: é o nome da produção da gramá)ca;
• Lexema: é o elemento do token;
• Scanner: é o gerador de analisador léxico;
• Lexer: é o analisador léxico;
• Parser: é o gerador de analisador sintá)co;
• Parsing: é o analisador sintá)co;
• Assembly: linguagem de baixo nível;
• Assembler: é o compilador para a linguagem assembly.
Geradores de analisadores léxicos:
• Permitem a automa)zação do processo de
criação de autômatos;
Etapas do
desenvolvimento
• Apresentar uma proposta de cronograma e as
ferramentas necessárias para desenvolver o
compilador;
Eficiência
Linguagem
Padronizando
e-mails
• O banco de dados de um cliente apresenta duplicidades
e dados inválidos ou fora das normas;
nome-parte-local@dominio. )po.pais.
<letra> ::= ‘a’ | ‘b’ | ‘c’ | ... | ‘z’ | ‘A’ | ‘B’ | ‘C’ | ... | ‘Z’
<digito> ::= ‘0’ | ‘1’ | ’2’ | ‘3’ | ... | ‘9’
<caracter> ::= ‘!’ | ‘#’ | ‘$’ | ‘%’ | ‘&’ | ‘-‘ | ‘_’ | ‘~’
Interação
Exercício
Sobre os paradigmas de programação clássicos, analise as
afirma)vas a seguir:
I- O paradigma impera)vo tem uma natureza matemá)ca,
sendo muito u)lizado em programação para inteligência
ar)ficial.
II- O paradigma orientado a objetos tem como princípio a
abstração de dados. Linguagem como C++, Java e C# são
exemplos de linguagens orientadas a objetos.
III- O paradigma lógico visa desenvolver a solução
declarando qual resultado o programa deve alcançar, em
vez de como o programa deve alcançar tal resultado.
Conceitos
Recapitulando
Fonte: (Aho, 2008)
Ø Conceitos de linguagem:
• Alfabeto;
• Palavra;
• Linguagem;
• Gramá)ca.
Ø BNF e EBNF.
Fonte: Livro texto
Ferramentas de apoio para o desenvolvimento
dos compiladores:
• Geradores de analisadores léxicos;
• Geradores de analisadores sintá)cos; e
• Geradores de código.