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

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

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

Apresentações semelhantes


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

1 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 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 cmdif (expr ) cmd else cmd Regra de Produção 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 – – 1 7 listalista + dígito listalista - digito listadígito dígito 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 listalista + digito | lista - digito | dígito Símbolos não-terminais 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_opcslista_cmds | lista_cmds lista_cmds ; cmd | cmd

10 Árvores Gramaticais Utilizadas para mostrar como um símbolo de partida, definido em uma gramática, gera uma cadeia de linguagem (frase) AX Y Z A XYZXYZ

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

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 AX1 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 9 lista dígito listadígito 2 – 5 +

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 9 cadeia 2 –

17 Associatividade dos Operadores (9 + 5) (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 direitaletra = direita | letra letraa | 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 9 lista dígito listadígito 2– 5 + letra direita =a = letra b direita letra c

21 Precedência de Operadores * 2 (9 + 5) * (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 – * 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 exprexpr + termo | expr – termo | termo termotermo * fator | termo / fator | fator fatordigito | (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 "Compiladores Prof. Bruno Moreno Aula 4 – 11/03/2011."

Apresentações semelhantes


Anúncios Google