Upload
luna-santarem-canto
View
247
Download
5
Embed Size (px)
Citation preview
Faculdade Pernambuca - FAPE
Compiladores
Abril/2007
Conceitos
Uma linguagem de programação pode ser definida pela descrição da aparência de seus programas (sintaxe) e do que os mesmos significam (semântica).
Para especificar a sintaxe da linguagem usamos gramáticas livres de contexto (gramática).
Ela também é usada para guiar a tradução de programas.– A compilação orientada por gramática é conhecida
como tradução dirigida pela sintaxe.
Conceitos
Analisador Léxico
TradutorDirigido pela
Sintaxe
Fluxo de Caracteres de entrada
Fluxo de Tokens
Representação Intermediária
Estrutura da Vanguarda de nosso Compilador
Conceitos
Definição da Sintaxe Uma gramática descreve naturalmente a
estrutura hierárquica de muitas construções das linguagens de programação. Exemplo de if-else em C:
comando em C: if (expressão) comando else comando
Regra de produção: cmd -> if (expr) cmd else cmd
( -> significa poder ter a forma ou produz)
Conceitos
Definição da Sintaxe
If-else ( ) – são tokensExpr e cmd – Representam sequências de tokens e são
chamados não terminais.
Uma gramática livre de contexto possui quatro componentes:– Um conjunto de tokens, conhecidos como símbolos
terminais.– Um conjunto de não-terminais.– Um conjunto de produções– Uma designação a um dos não-terminais como o
símbolo de partida.
Conceitos
Definição da Sintaxe Produções consistem em um não-terminal,
chamado de lado esquerdo da produção, uma seta e uma sequência de tokens e/ou não terminais, chamados de lado direito da produção.
As gramáticas são especificadas pela listagem de suas produções onde a primeira contém o símbolo de partida.
Assumimos que dígitos, sinas (<=, >=, +, - , etc), palavras reservadas sejam terminais.
Conceitos
Definição da Sintaxe
As produções com o mesmo não terminal a esquerda podem ser agrupadas. Exemplo:
digito -> 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9
Exemplo 1:
Gramática para descrever uma lista de dígitos separados por sinais de mais ou de menos.
Conceitos
Definição da Sintaxe
Produções:
lista -> lista + dígito | lista – dígito | dígitodigito -> 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9
Tokens: + - 0 1 2 ... 9Terminais: 0 1 2 ... 9Não Terminais: lista e dígito
Uma cadeia de tokens é uma sequência de 0 ou mais tokens.
Conceitos
Definição da Sintaxe
Uma gramática deriva cadeias começando pelo símbolo de partida. As cadeias de tokens geradas formam a linguagem definida pela gramática.
Exemplo de cadeia: 9 – 5 + 2 Pela gramática anterior temos:
a) 9 é uma lista.b) 9 – 5 é uma lista.c) 9 – 5 + 2 é uma lista.
Conceitos
Exemplo 2:
Sequencia de comandos, separados por ponto e vírgula, encontrada nos blocos bengin-end de Pascal.
Blocl -> begin cmds_opcs endcmds_opcs -> lista_cmds | Elista_cmds -> lista_cmds; cmd | cmd
Conceitos
Árvores Gramaticais
Uma árvore gramatical mostra como o símbolo de partida de uma gramática deriva uma cadeia de uma linguagem.
Se um não terminal A possui uma produção A -> XYZ, então uma árvore pode ter um nó A com três filhos.
A / | \
X Y Z
Conceitos
Árvores Gramaticais
Formalmente, dada uma gramática livre de contexto, uma árvore gramatical possui as seguintes propriedades:– A raiz é rotulada pelo símbolo de partida.– Cada folha é rotulada por um token ou por E.– Cada nó interior é rotulado por um não-terminal.– Se A é um não-terminal rotulando algum nó interior e
X1, x2, ... , Xn são os rótulos dos seus filhos, então A ->X1X2,..,Xn é uma produção.
Conceitos
Árvores Gramaticais
lista
lista dígito
lista dígito
dígito 9 - 5 + 2
Árvore gramaticalpara 9 – 5 + 2
Conceitos
Árvores Gramaticais
Na árvore anterior temos:lista – Raiz é rotulada lista (símbolo de partida).lista + dígito – Filhos da raíz.lista -> lista + dígito é uma produção na gramática.
As folhas da árvore gramatical, lidas da esquerda para a direita formam o produto da árvore, que é a cadeia gerada ou derivada a partir do não-terminal à raiz da árvore gramatical.
Conceitos
Árvores Gramaticais
Outra definição da linguagem gerada por uma gramática é a de um conjunto de cadeias que podem ser representadas por alguma árvore gramatical.
O processo de encontrar uma árvore gramatical para uma dada cadeia de tokens é chamado de análise gramatical ou análise sintática daquela cadeia.
Conceitos
Ambigüidade
É importante observar que uma gramática pode ter mais de uma árvore gramatical gerando uma dada cadeia de tokens. Tal gramática é dita ambígua.
Exemplo: basta encontrar uma cadeia de tokens que tenha mais de uma árvore gramatical.
Conceitos
Ambigüidade
Gramática ambígua:
Cadeia -> cadeia + cadeia | cadeia – cadeia | cadeiaCadeia -> 0 | 1 | ... | 9
Ver exemplos:
Precisamos resolver a ambigüidade das gramáticas!
Conceitos
Ambigüidade
cadeia cadeia
cadeia + cadeia cadeia - cadeia
cadeia - cadeia cadeia + cadeia
9 5
2 9
5 2
Duas Árvores Gramaticais para 9-5+2
Conceitos
Associatividade dos Operadores
Convencionalmente, 9+5+2 é equivalente a (9+5)+2 e 9-5-2 a (9-5)-2. Na maioria das linguagens os operadores +, -, * e / são
associados à esquerda. Exponenciação tem associação à direita. Em C o
operador de atribuição tem associação à direita também
direita -> letra = direita | letraletra -> a | b | ... | z
Conceitos
Associatividade dos Operadores
Exemplo: a=b=c e 9 – 5 – 2
direita lista letra = direita lista - digito
a letra = direita lista - digito
letra digitob
c 9
5
2
Árvore gramatical para operadores associativos à esquerda e à direita
Precedência de Operadores
Para a expressão 9+5*2 existem duas possíveis interpretações para a mesma (9+5)*2 ou 9+(5*2)
* e / tem precedência mais alta que + e –
Sintaxe das expressões
Expr -> expr + termo | expr – termo | termoTermo -> termo * fator | termo/fator | fator Fator -> digito | (expr)
Precedência de Operadores
Sintaxe dos comandos
cmd -> id := expr | if expr then cmd | if expr then cmd else cmd | while expr do cmd | begin cmds_opcs end