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

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

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

Apresentações semelhantes


Apresentação em tema: "Faculdade Pernambuca - FAPE Compiladores Abril/2007 Compiladores Abril/2007."— Transcrição da apresentação:

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

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

3 Conceitos Analisador Léxico Tradutor Dirigido pela Sintaxe Fluxo de Caracteres de entrada Fluxo de Tokens Representação Intermediária Estrutura da Vanguarda de nosso Compilador

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

5 Conceitos Definição da Sintaxe If-else ( ) – são tokens Expr 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.

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

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

8 Conceitos Definição da Sintaxe Produções: lista -> lista + dígito | lista – dígito | dígito digito -> 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 Tokens: + - 0 1 2... 9 Terminais: 0 1 2... 9 Não Terminais: lista e dígito Uma cadeia de tokens é uma sequência de 0 ou mais tokens.

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

10 Conceitos Exemplo 2: Sequencia de comandos, separados por ponto e vírgula, encontrada nos blocos bengin-end de Pascal. Blocl -> begin cmds_opcs end cmds_opcs -> lista_cmds | E lista_cmds -> lista_cmds; cmd | cmd

11 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

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

13 Conceitos Árvores Gramaticais lista lista dígito dígito 9 - 5 + 2 Árvore gramatical para 9 – 5 + 2

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

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

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

17 Conceitos Ambigüidade Gramática ambígua: Cadeia -> cadeia + cadeia | cadeia – cadeia | cadeia Cadeia -> 0 | 1 |... | 9 Ver exemplos: Precisamos resolver a ambigüidade das gramáticas!

18 Conceitos Ambigüidade cadeia cadeia cadeia + cadeia cadeia - cadeia cadeia - cadeia cadeia + cadeia 95 29 52 Duas Árvores Gramaticais para 9-5+2

19 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 | letra letra -> a | b |... | z

20 Conceitos Associatividade dos Operadores   Exemplo: a=b=c e 9 – 5 – 2 direita lista letra = direita lista - digito a letra = direita lista - digito letra digito b c9 5 2 Árvore gramatical para operadores associativos à esquerda e à direita

21 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 | termo Termo -> termo * fator | termo/fator | fator Fator -> digito | (expr)

22 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


Carregar ppt "Faculdade Pernambuca - FAPE Compiladores Abril/2007 Compiladores Abril/2007."

Apresentações semelhantes


Anúncios Google