Professional Documents
Culture Documents
Sintaxe
especificada usando gramticas livres de contexto (BNF Backus-Naur Form):
Conjunto finito de smbolos terminais: >=, while, ;.
Conjunto finito de smbolos no-terminais: Programa, Comando, Expresso, Declarao.
Um Smbolo inicial (um dos no-terminais):
Programa:Conjunto finito de regras de produo.
rvore Sinttica
Cada gramtica livre de contexto G gera uma linguagem (seqncia de smbolos
terminais).
Uma rvore sinttica de G uma rvore com labels ordenada em que: as folhas so
smbolos terminais; os ns so smbolos no-terminais.
Uma frase de G uma seqncia de smbolos terminais de uma rvore sinttica.
Uma sentena de G uma S-frase de G, onde S o smbolo inicial.
Sintaxe
Sintaxe concreta:
Define a estrutura das frases, a ordem em que sub-frases devem ser escritas, e os
smbolos terminais que as delimitam;
Define como escrever programas sintaticamente bem formados;
No utilizada para a descrio semntica do programa;
Sintaxe Abstrata
Usada como referncia na descrio semntica do programa
No gera frases, mas se baseia na estrutura das frases do programa
Gera rvores sintticas abstratas (Abstract Syntax Trees ASTs)
Nas ASTs cada n representa uma produo, com uma sub-rvore para cada subfrase
Restries Contextuais
Necessrias para expressar situaes em que a possibilidade de a frase ser bem
formada depende do seu contexto.
Regras de escopo: ocorrncia de ligao (declarao) x ocorrncia de uso
Exemplos: declarao de variveis, let
Ligao esttica x Ligao dinmica
Esttica = em tempo de compilao, sem rodar o programa;
Dinmica: s rodando o programa
Regras de Tipos
Normalmente, valores so classificados em tipos.
Cada operao na linguagem tem uma regra de tipos, que define os tipos esperados
para os operandos e o tipo do resultado (se existir).
Qualquer operao utilizando um valor com tipo de errado gera um erro de tipos.
Classificao de Linguagens em Relao a Tipos
Estaticamente tipada: todos os erros de tipos podem ser detectados estaticamente, sem
executar o programa.
Dinamicamente tipada, se (alguns) erros de tipos s podem ser detectados durante a
execuo do programa.
Regras de tipos: exemplo
Regra de tipos para o operador >:
se os dois operandos so do tipo int, ento o resultado do tipo bool;
Regra de tipos para while E do C:
E deve ser do tipo bool;
Let;
Tradutores e Compiladores
x86 assembler
Assembler x Compilador
Disassembler
De(s)compilador
Linguagens
Linguagem fonte
Linguagem destino
Linguagem de implementao
Programa expresso
na linguagem
Mquina M
Tradutor de S para T
Representao de
expresso na
um interpretador
linguagem L
Cross-compiler
Roda em uma mquina hospedeira, mas gera cdigo para outra mquina.
Compiladores
Interpretadores
Uso de Interpretadores
Execuo (de linguagem de alto nvel) at 100 vezes mais lenta que a verso
compilada;
Interpretao de um programa P
expresso em uma linguagem S,
usando um interpretador para S
executando na mquina M
Interpretive Compiler
Combina caractersticas de
interpretadores e compiladores.
Compiladores Portveis
O Processo de Compilao
Fases da compilao
Anlise contextual
Gerao de cdigo
Scanning/Parsing
Passos
Exemplo
public class Compiler {
public static void compileProgram (...) {
Parser parser = new Parser (...);
Checker checker = new Checker (...);
Encoder generator = new Encoder(...);
Program theAST = parser.parse();
checker.check(theAST);
generate.encode(theAST);
}
...
Anlise Sinttica Parte 1
Subfases:
Gramticas
| , *, ( )
XY|XZ
X (Y | Z)
Bottom-up parsing
Top-down parsing
Top-down.
Expresso
Declarao
Viso geral
Anlise Lxica
Fase da compilao responsvel por extrair os tokens do cdigo fonte de um
programa.
identifier
intLiteral
Anlise Sinttica
Recursive-descent / LL(1)
Bottom-up
Recursive descent
Algoritmo baseado em previses
Funes mutuamente recursivas
Uma funo para cada no-terminal
Uma clusula para cada produo
Uma gramtica ambgua se a partir dela uma sentena pode dar origem a duas
arvores de parsing
Problemticas para a compilao
Eliminao de ambigidade quase sempre possvel
Transformaes na gramtica
Mais um top down
Algoritmos bottom-up
Algoritmos LL(k) precisam decidir que produo usar tendo visto apenas k tokens
da entrada
Algoritmos bottom-up so baseados em tcnicas LR(k)
Left-to-right parse, Right-most derivation, k-symbol-lookahead
Baseados no conceito de autmato a pilha
Pilha + lookahead
Duas tipos de aes
Shift:
Coloca o primeiro token da entrada no topo da pilha
Reduce:
Escolhe a regra X::= A B C
Retira C, B, A da pilha
Coloca X na pilha
Gramticas LR
LR(0)
Olham apenas para a pilha
SLR
Melhoramento sobre o LR(0)
LR(1)
Lookahead de 1 smbolo
Consegue descrever a maioria das linguagens de programao
LALR(1)
Melhoramento sobre o LR(1)
Diminu o tamanho da tabela de parsing
Parsing LR de Gramticas Ambguas
Gramticas ambguas ocasionam conflitos em parsers LR
Shift-reduce conflict
O parser no consegue decidir se empilha o prximo smbolo da
entrada, ou se reduz para uma regra j disponvel
Reduce-reduce conflict
O parser pode realizar uma reduo para duas regras distintas
Anlise Contextual
Identificao
Cada definio tem o seu escopo parte do programa sobre a qual ela tem efeito.
Regras de escopo:
Plana: Fortran;
Ambiente padro
java.lang em Java
Prelude em Haskell
Verificao de Tipos
Equivalncia de tipos
41
Respostas 2002-1
1 - Fases do Front-End do Compilador: Analise lxica, Analise sinttica, Analise Semntica
e Gerao de Cdigo intermedirio
2 - Fases do Back-End do Compilador: Analise da representao intermediria(Compiler
analysis), Otimizao e Gerao de cdigo
3 As fases que fazem uso da tabela de simbolo so: ........................................
4 As fases que se comunicam pelo envio/solicitao de tokens so Analise lxica,
Analise sinttica
5 Na Analise contextual/semantica se verifica se a quantidade de argumentos passados
para uma funo est correto
6 A fase da analise lxica responsavel por reconhecer se uma determinada sequencia
de caracteres valida
7 A verificao de tipos feita na analise semntica