25
Compiladores Prof. Bruno Moreno Aula 4 – 11/03/2011

Compiladores Prof. Bruno Moreno Aula 4 – 11/03/2011

Embed Size (px)

Citation preview

Page 1: Compiladores Prof. Bruno Moreno Aula 4 – 11/03/2011

Compiladores

Prof. Bruno Moreno

Aula 4 – 11/03/2011

Page 2: Compiladores Prof. Bruno Moreno Aula 4 – 11/03/2011

Especificação de uma LP

Uma linguagem de programação pode ser definida pela Descrição da aparência de seus programas

Sintaxe Descrição do que os programas significam

Semântica

Page 3: Compiladores Prof. Bruno Moreno Aula 4 – 11/03/2011

Para especificar a sintaxe

... utilizamos uma BNFBackus-Naur Form

Gramática Livre de Contexto

Page 4: Compiladores Prof. Bruno Moreno Aula 4 – 11/03/2011

Gramática Livre de Contexto

Utilizada como auxílio para guiar a tradução de programas Tradução dirigida por sintaxe

Descreve uma estrutura hierárquica de muitas construções de linguagens de programação Exemplo (C)

Comando if-else

if (expressão) comando else comando

Page 5: Compiladores Prof. Bruno Moreno Aula 4 – 11/03/2011

Gramática Livre de Contexto

Comando if-else if (expressão) comando else comando cmd if (expr ) cmd else cmd

Regra de Produção

token token

Não-terminais

Page 6: Compiladores Prof. Bruno Moreno Aula 4 – 11/03/2011

Gramática Livre de Contexto

Possui quatro componentes (1) Conjunto de tokens

Símbolos terminais (2) Conjunto de não-terminais (3) Conjunto de regras de produção

Produção é formada por um não-terminal do lado esquerdo, uma seta e uma seqüência de tokens e/ou não terminais no lado direito da seta

(4) Uma designação de um dos não-terminais como símbolos de partida

Page 7: Compiladores Prof. Bruno Moreno Aula 4 – 11/03/2011

Gramática Livre de Contexto

O símbolo de partida figura na frente dos demais

Símbolos terminais Dígitos, sinais (<=, <, +, etc) e cadeias de caracters

em negrito (e.g while, for) Não-terminais

Itálico OU

|

Page 8: Compiladores Prof. Bruno Moreno Aula 4 – 11/03/2011

Gramática Livre de Contexto

Exemplo 1 Gramática para construir as seguintes expressões

9 – 5 + 2 3 – 1 7

lista lista + dígito lista lista - digito lista dígito dígito 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9

lista lista + digito |

lista - digito |

dígito

Símbolos não-terminais

Símbolos terminais = tokens

Page 9: Compiladores Prof. Bruno Moreno Aula 4 – 11/03/2011

Gramática Livre de Contexto

Exemplo 2 A linguagem PASCAL permite definir uma lista

vazia A gramática abaixo permite a construção de uma

lista em PASCAL

bloco begin cmd_opcs endcmd_opcs lista_cmds | lista_cmds lista_cmds ; cmd | cmd

Page 10: Compiladores Prof. Bruno Moreno Aula 4 – 11/03/2011

Árvores Gramaticais

Utilizadas para mostrar como um símbolo de partida, definido em uma gramática, gera uma cadeia de linguagem (frase)

A X Y Z

A

X Y Z

Page 11: Compiladores Prof. Bruno Moreno Aula 4 – 11/03/2011

Árvores Gramaticais

Árvore gramatical para 9 – 5 + 2

9

lista

lista

dígito

lista dígito

dígito

2–

5

+

lista lista + digito | lista - digito | dígito

Page 12: Compiladores Prof. Bruno Moreno Aula 4 – 11/03/2011

Árvores Gramaticais

Uma árvore gramatical possui as seguintes propriedades

1. A raiz é rotulada pelo símbolo de entrada da gramática

2. Cada folha é um token ou

3. Cada nó interior é um não-terminal

4. Se A é um não-terminal e X1, X2 e Xn são seus filhos

A X1 X2 Xn é uma produção

5. Se A , então deve possui um único filho:

Page 13: Compiladores Prof. Bruno Moreno Aula 4 – 11/03/2011

Árvores Gramaticais

A leitura sempre deve ser feita da esquerda para a direita

9

lista

lista

dígito

lista dígito

dígito

2–

5

+

Page 14: Compiladores Prof. Bruno Moreno Aula 4 – 11/03/2011

Ambiguidade

Uma gramática que pode ter mais do que uma árvore gramatical gerando uma mesma cadeia de tokens é dita ambígua

Para mostrar que uma gramática é ambigua é necessário encontrar uma cadeia de tokens que tenha mais do que uma árvore gramatical

Page 15: Compiladores Prof. Bruno Moreno Aula 4 – 11/03/2011

Ambiguidade

As LPs devem ser definidas de modo a não permitir amiguidades

cadeia cadeia + cadeia| cadeia - cadeia| 0 | 1 | 2 | 3 | 4| 5 | 6 | 7 | 8 | 9

Qual seria a árvore sintática para a expressão “9 – 5 + 2”?

Page 16: Compiladores Prof. Bruno Moreno Aula 4 – 11/03/2011

Ambiguidade

9

cadeia

cadeia

cadeia

cadeia cadeia

cadeia

2–

5

+ cadeia

cadeia

cadeia

9

-

cadeiacadeia

5

+

2

Page 17: Compiladores Prof. Bruno Moreno Aula 4 – 11/03/2011

Associatividade dos Operadores

9 + 5 + 2 (9 + 5) + 2 9 + (5 + 2)

Quando um operando recebe operadores à esquerda e à direita São necessárias convenções para saber que

operador recebe o operando primeiramente Na maioria das LPs os quatro operadores

aritméticos são associativos a esquerda

Page 18: Compiladores Prof. Bruno Moreno Aula 4 – 11/03/2011

Associatividade dos Operadores

O operador de atribuição em C é associativo a direita a = b = c a = c

Gramática de geração de operador associativo à direita direita letra = direita | letra letra a | b | ... | z

Page 19: Compiladores Prof. Bruno Moreno Aula 4 – 11/03/2011

Gramática de geração de operador associativo

à esquerda

Deve ser provado com uma árvore de decisão

Page 20: Compiladores Prof. Bruno Moreno Aula 4 – 11/03/2011

Associatividade dos Operadores

9

lista

lista

dígito

lista dígito

dígito

2–

5

+ letra

direita

direita

=a

=

letra

b

direita

letra

c

Page 21: Compiladores Prof. Bruno Moreno Aula 4 – 11/03/2011

Precedência de Operadores

9 + 5 * 2 (9 + 5) * 2 9 + (5 * 2)

A associatividade de + e de * não resolve essa ambigüidade pelo fato de que os operadores da direita e da esquerda dos operandos são diferentes Precisamos conhecer a precedência relativa dos

operadores

Page 22: Compiladores Prof. Bruno Moreno Aula 4 – 11/03/2011

Precedência de Operadores

Na matemática, * e ÷ têm precedência mais alta do que + e –

9 + 5 * 2 A precedência e a associatividade de

operadores pode ser representada em uma gramática

Page 23: Compiladores Prof. Bruno Moreno Aula 4 – 11/03/2011

Sintaxe de Expressões

São criados dois não-terminais para representar os dois níveis de precedência expr e termo

É criado um não-terminal extra para gerar as unidades básicas das expressões fator

termo termo * fator | termo / fator | fator

expr expr + termo| expr - termo| termo

fator digito | (expr)

Page 24: Compiladores Prof. Bruno Moreno Aula 4 – 11/03/2011

Sintaxe de Expressões

expr expr + termo | expr – termo | termotermo termo * fator | termo / fator | fatorfator digito | (expr)

Page 25: Compiladores Prof. Bruno Moreno Aula 4 – 11/03/2011

Sintaxe de Comandos

cmd id := expr| if expr then cmd| if expr then cmd else cmd| while expr do cmd| begin cmd_opcs end