22
Faculdade Pernambuca - FAPE Compiladores Abril/2007

Faculdade Pernambuca - FAPE Compiladores Abril/2007 Compiladores Abril/2007

Embed Size (px)

Citation preview

Page 1: Faculdade Pernambuca - FAPE Compiladores Abril/2007 Compiladores Abril/2007

Faculdade Pernambuca - FAPE

Compiladores

Abril/2007

Page 2: Faculdade Pernambuca - FAPE Compiladores Abril/2007 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.

Page 3: Faculdade Pernambuca - FAPE Compiladores Abril/2007 Compiladores Abril/2007

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

Page 4: Faculdade Pernambuca - FAPE Compiladores Abril/2007 Compiladores Abril/2007

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)

Page 5: Faculdade Pernambuca - FAPE Compiladores Abril/2007 Compiladores Abril/2007

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.

Page 6: Faculdade Pernambuca - FAPE Compiladores Abril/2007 Compiladores Abril/2007

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.

Page 7: Faculdade Pernambuca - FAPE Compiladores Abril/2007 Compiladores Abril/2007

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.

Page 8: Faculdade Pernambuca - FAPE Compiladores Abril/2007 Compiladores Abril/2007

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.

Page 9: Faculdade Pernambuca - FAPE Compiladores Abril/2007 Compiladores Abril/2007

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.

Page 10: Faculdade Pernambuca - FAPE Compiladores Abril/2007 Compiladores Abril/2007

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

Page 11: Faculdade Pernambuca - FAPE Compiladores Abril/2007 Compiladores Abril/2007

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

Page 12: Faculdade Pernambuca - FAPE Compiladores Abril/2007 Compiladores Abril/2007

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.

Page 13: Faculdade Pernambuca - FAPE Compiladores Abril/2007 Compiladores Abril/2007

Conceitos

Árvores Gramaticais

lista

lista dígito

lista dígito

dígito 9 - 5 + 2

Árvore gramaticalpara 9 – 5 + 2

Page 14: Faculdade Pernambuca - FAPE Compiladores Abril/2007 Compiladores Abril/2007

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.

Page 15: Faculdade Pernambuca - FAPE Compiladores Abril/2007 Compiladores Abril/2007

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.

Page 16: Faculdade Pernambuca - FAPE Compiladores Abril/2007 Compiladores Abril/2007

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.

Page 17: Faculdade Pernambuca - FAPE Compiladores Abril/2007 Compiladores Abril/2007

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!

Page 18: Faculdade Pernambuca - FAPE Compiladores Abril/2007 Compiladores Abril/2007

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

Page 19: Faculdade Pernambuca - FAPE Compiladores Abril/2007 Compiladores Abril/2007

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

Page 20: Faculdade Pernambuca - FAPE Compiladores Abril/2007 Compiladores Abril/2007

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

Page 21: Faculdade Pernambuca - FAPE Compiladores Abril/2007 Compiladores Abril/2007

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)

Page 22: Faculdade Pernambuca - FAPE Compiladores Abril/2007 Compiladores Abril/2007

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