A apresentação está carregando. Por favor, espere

A apresentação está carregando. Por favor, espere

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

Apresentações semelhantes


Apresentação em tema: "Prof. Bruno Moreno Aula 4 – 11/03/2011"— Transcrição da apresentação:

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

2 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

3 Para especificar a sintaxe
... utilizamos uma BNF Backus-Naur Form Gramática Livre de Contexto

4 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

5 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

6 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

7 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 |

8 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 Símbolos não-terminais lista lista + digito | lista - digito | dígito Símbolos terminais = tokens

9 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 end cmd_opcs lista_cmds | lista_cmds lista_cmds ; cmd | cmd

10 Árvores Gramaticais A X Y Z
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

11 Árvores Gramaticais Árvore gramatical para 9 – 5 + 2 + – 2 5 9 lista
lista lista + digito | lista - digito | dígito lista + dígito 2 lista dígito dígito 5 9

12 Á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:

13 Árvores Gramaticais A leitura sempre deve ser feita da esquerda para a direita lista lista + dígito lista dígito 2 dígito 5 9

14 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

15 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”?

16 Ambiguidade + - – 2 9 5 5 2 9 cadeia cadeia cadeia cadeia cadeia

17 Associatividade dos Operadores
(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

18 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

19 Gramática de geração de operador associativo à esquerda
Deve ser provado com uma árvore de decisão

20 Associatividade dos Operadores
lista direita lista + dígito letra = direita lista dígito 2 a letra = direita b letra dígito 5 c 9

21 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

22 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

23 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)

24 Sintaxe de Expressões expr expr + termo | expr – termo | termo termo termo * fator | termo / fator | fator fator digito | (expr)

25 Sintaxe de Comandos cmd id := expr | if expr then cmd | if expr then cmd else cmd | while expr do cmd | begin cmd_opcs end


Carregar ppt "Prof. Bruno Moreno Aula 4 – 11/03/2011"

Apresentações semelhantes


Anúncios Google