1 / 25

Compiladores

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. Para especificar a sintaxe. ... utilizamos uma BNF.

nguyet
Download Presentation

Compiladores

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


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

  5. Gramática Livre de Contexto • Comando if-else • if(expressão) comando elsecomando • cmd if(expr) cmd elsecmd 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 begincmd_opcsend cmd_opcslista_cmds| lista_cmdslista_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) • A X Y Z A X Y Z

  11. Árvores Gramaticais • Árvore gramatical para 9 – 5 + 2 lista lista lista + digito | lista - digito | dígito + lista dígito 2 – lista dígito 5 dígito 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 tokenou 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 2 lista dígito – 5 dígito 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 cadeia cadeia + cadeia cadeia - cadeia cadeia cadeia cadeia 2 – cadeia cadeia 9 + 5 2 5 cadeia 9

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

  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 • 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 – 2 lista dígito a = letra direita b letra 5 dígito 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 • expretermo • É criado um não-terminal extra para gerar as unidades básicas das expressões • fator • termo termo * fator • | termo / fator • | fator • exprexpr + termo • | expr - termo • | termo • fator digito | (expr)

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

  25. Sintaxe de Comandos cmd id := expr | ifexprthencmd | ifexprthencmd elsecmd | whileexprdo cmd | begincmd_opcsend

More Related