Download - Escrever Uma Gramc3a1tica
![Page 1: Escrever Uma Gramc3a1tica](https://reader034.vdocuments.site/reader034/viewer/2022042521/55721098497959fc0b8d6b46/html5/thumbnails/1.jpg)
Escrever uma Gramática
Análise Sintática
Eliminar ambiguidade
Eliminar recursão à esquerda
FACULDADE ANGLO AMERICANO – FOZ DO IGUAÇU Curso de Ciência da Computação – 7º Periodo Disciplina: Compiladores Prof. Erinaldo Sanches Nascimento
![Page 2: Escrever Uma Gramc3a1tica](https://reader034.vdocuments.site/reader034/viewer/2022042521/55721098497959fc0b8d6b46/html5/thumbnails/2.jpg)
Introdução
• Não descreve toda a sintaxe das linguagens de programação.
• Algumas transformações podem ser aplicadas às gramáticas a fim de adequá-las aos diversos métodos de reconhecimento sintático.
– Eliminar ambiguidade
– Eliminar recursão à esquerda
– Fatorar à esquerda
2 http://erinaldosn.wordpress.com
![Page 3: Escrever Uma Gramc3a1tica](https://reader034.vdocuments.site/reader034/viewer/2022042521/55721098497959fc0b8d6b46/html5/thumbnails/3.jpg)
Tudo o que pode ser descrito por uma expressão regular também pode ser descrito por uma gramática livre de contexto.
3 http://erinaldosn.wordpress.com
![Page 4: Escrever Uma Gramc3a1tica](https://reader034.vdocuments.site/reader034/viewer/2022042521/55721098497959fc0b8d6b46/html5/thumbnails/4.jpg)
• A expressões regulares são mais adequadas para descrever a estrutura de construções como identificadores, palavras-chave e espaço em branco.
• As gramáticas são mais úteis para descrever estruturas aninhadas como parênteses balanceados, a combinação das construções if-else correspondentes, e assim por diante.
4 http://erinaldosn.wordpress.com
![Page 5: Escrever Uma Gramc3a1tica](https://reader034.vdocuments.site/reader034/viewer/2022042521/55721098497959fc0b8d6b46/html5/thumbnails/5.jpg)
Gramáticas Ambíguas
• Uma gramática pode permitir que uma cadeia tenha mais de uma árvore de análise sintática.
• Uma gramática que gera uma cadeia com duas árvores de análise sintática distintas é ambígua.
5 http://erinaldosn.wordpress.com
![Page 6: Escrever Uma Gramc3a1tica](https://reader034.vdocuments.site/reader034/viewer/2022042521/55721098497959fc0b8d6b46/html5/thumbnails/6.jpg)
Tratar ambiguidade
• Estabelecer uma regra que especifique qual árvore sintática é a correta.
• Alterar a gramática para forçar a construção da árvore de análise sintática correta.
6 http://erinaldosn.wordpress.com
![Page 7: Escrever Uma Gramc3a1tica](https://reader034.vdocuments.site/reader034/viewer/2022042521/55721098497959fc0b8d6b46/html5/thumbnails/7.jpg)
• Considere a gramática aritmética de inteiros:
exp exp op exp | (exp) | numero
op + | - | *
• Considere a cadeia 34-3*42.
7 http://erinaldosn.wordpress.com
![Page 8: Escrever Uma Gramc3a1tica](https://reader034.vdocuments.site/reader034/viewer/2022042521/55721098497959fc0b8d6b46/html5/thumbnails/8.jpg)
• exp exp op exp
exp op exp op exp
numero op exp op exp
numero – exp op exp
numero – numero op exp
numero – numero * op exp
numero – numero * numero
8 http://erinaldosn.wordpress.com
![Page 9: Escrever Uma Gramc3a1tica](https://reader034.vdocuments.site/reader034/viewer/2022042521/55721098497959fc0b8d6b46/html5/thumbnails/9.jpg)
exp exp op exp
numero op exp
numero – exp
numero – exp op exp
numero – numero op exp
numero – numero * exp
numero – numero * numero
9 http://erinaldosn.wordpress.com
![Page 10: Escrever Uma Gramc3a1tica](https://reader034.vdocuments.site/reader034/viewer/2022042521/55721098497959fc0b8d6b46/html5/thumbnails/10.jpg)
• Qual das duas árvores sintáticas anteriores representa a interpretação correta da cadeia?
– A primeira indica que a expressão deve avaliar primeiro a subtração, e depois a multiplicação.
– A segunda indica que a multiplicação deve ser efetuada antes, e depois a subtração.
• A matemática determina como correta a segunda interpretaç ão.
10 http://erinaldosn.wordpress.com
![Page 11: Escrever Uma Gramc3a1tica](https://reader034.vdocuments.site/reader034/viewer/2022042521/55721098497959fc0b8d6b46/html5/thumbnails/11.jpg)
Precedência e Associatividade
• Agrupar os operadores em classes de igual precedência.
• Para cada precedência escrever uma regra distinta.
11 http://erinaldosn.wordpress.com
![Page 12: Escrever Uma Gramc3a1tica](https://reader034.vdocuments.site/reader034/viewer/2022042521/55721098497959fc0b8d6b46/html5/thumbnails/12.jpg)
Cascata de precedências
exp exp soma exp | termo
soma + | -
termo termo mult termo | fator
mult *
fator (exp) | numero
12 http://erinaldosn.wordpress.com
![Page 13: Escrever Uma Gramc3a1tica](https://reader034.vdocuments.site/reader034/viewer/2022042521/55721098497959fc0b8d6b46/html5/thumbnails/13.jpg)
• A multiplicação é agrupada sob a regra termo.
• A adição e a subtração são agrupadas sob a regra exp.
• Como a base para exp é termo, a adição e a subtração aparecerão mais perto da raiz (menor precedência).
13 http://erinaldosn.wordpress.com
![Page 14: Escrever Uma Gramc3a1tica](https://reader034.vdocuments.site/reader034/viewer/2022042521/55721098497959fc0b8d6b46/html5/thumbnails/14.jpg)
• Não especifica a associatividade dos operadores
• Ainda é ambígua: a recursão nos dois lados do operador possibilita que qualquer um dos lados case com repetições do operador em uma derivação.
• Solução: substituir um das recursões pelo caso base.
exp exp soma termo | termo
14 http://erinaldosn.wordpress.com
![Page 15: Escrever Uma Gramc3a1tica](https://reader034.vdocuments.site/reader034/viewer/2022042521/55721098497959fc0b8d6b46/html5/thumbnails/15.jpg)
Recursão Associativa
• Uma regra recursiva à esquerda faz os operadores associarem à esquerda.
exp exp soma termo | termo
• Uma regra recursiva à direita os faz associarem à direita.
exp termo soma exp | termo
15 http://erinaldosn.wordpress.com
![Page 16: Escrever Uma Gramc3a1tica](https://reader034.vdocuments.site/reader034/viewer/2022042521/55721098497959fc0b8d6b46/html5/thumbnails/16.jpg)
• Remoção de ambiguidade nas regas BNF para expressões aritméticas simples.
exp exp soma termo | termo
soma + | -
termo termo mult fator | fator
mult *
fator (exp) | numero
16 http://erinaldosn.wordpress.com
![Page 17: Escrever Uma Gramc3a1tica](https://reader034.vdocuments.site/reader034/viewer/2022042521/55721098497959fc0b8d6b46/html5/thumbnails/17.jpg)
• Árvore sintática para a expressão 34-3*42.
17 http://erinaldosn.wordpress.com
![Page 18: Escrever Uma Gramc3a1tica](https://reader034.vdocuments.site/reader034/viewer/2022042521/55721098497959fc0b8d6b46/html5/thumbnails/18.jpg)
• A árvore de análise sintática para a expressão 34-3-42.
18 http://erinaldosn.wordpress.com
![Page 19: Escrever Uma Gramc3a1tica](https://reader034.vdocuments.site/reader034/viewer/2022042521/55721098497959fc0b8d6b46/html5/thumbnails/19.jpg)
Else vazio (pendente)
• Considere a gramática:
declaracao if-decl | outra
if-decl if (exp) declaracao |
if (exp) declaracao else declaracao
exp 0 | 1
• Considere a cadeia
if (0) if (1) outra else outra
19 http://erinaldosn.wordpress.com
![Page 20: Escrever Uma Gramc3a1tica](https://reader034.vdocuments.site/reader034/viewer/2022042521/55721098497959fc0b8d6b46/html5/thumbnails/20.jpg)
20 http://erinaldosn.wordpress.com
![Page 21: Escrever Uma Gramc3a1tica](https://reader034.vdocuments.site/reader034/viewer/2022042521/55721098497959fc0b8d6b46/html5/thumbnails/21.jpg)
21 http://erinaldosn.wordpress.com
![Page 22: Escrever Uma Gramc3a1tica](https://reader034.vdocuments.site/reader034/viewer/2022042521/55721098497959fc0b8d6b46/html5/thumbnails/22.jpg)
• Essa cadeia tem duas árvores de análise sintática (ambígua).
• A escolha de qual é a correta depende de querermos associar a parte else à primeira ou à segunda declaração if.
22 http://erinaldosn.wordpress.com
![Page 23: Escrever Uma Gramc3a1tica](https://reader034.vdocuments.site/reader034/viewer/2022042521/55721098497959fc0b8d6b46/html5/thumbnails/23.jpg)
• Observe:
if (x != 0)
if (y == 1/x) ok = TRUE;
else z = 1/x;
if (x != 0)
{if (y == 1/x) ok = TRUE;}
else z = 1/x;
23 http://erinaldosn.wordpress.com
![Page 24: Escrever Uma Gramc3a1tica](https://reader034.vdocuments.site/reader034/viewer/2022042521/55721098497959fc0b8d6b46/html5/thumbnails/24.jpg)
• Uma solução: declaracao casam-decl | sem-casam-decl
casam-decl if (exp) casam-decl else casam-decl | outra
sem-casam-decl if (exp) declaracao
| if (exp) casam-decl else sem-casam-decl
exp 0 | 1
24 http://erinaldosn.wordpress.com
![Page 25: Escrever Uma Gramc3a1tica](https://reader034.vdocuments.site/reader034/viewer/2022042521/55721098497959fc0b8d6b46/html5/thumbnails/25.jpg)
• Casam-decl ocorre apenas antes de um else em uma declaraçao if
• Força todas as partes else casar assim que possível.
25 http://erinaldosn.wordpress.com
![Page 26: Escrever Uma Gramc3a1tica](https://reader034.vdocuments.site/reader034/viewer/2022042521/55721098497959fc0b8d6b46/html5/thumbnails/26.jpg)
26 http://erinaldosn.wordpress.com
![Page 27: Escrever Uma Gramc3a1tica](https://reader034.vdocuments.site/reader034/viewer/2022042521/55721098497959fc0b8d6b46/html5/thumbnails/27.jpg)
Ambiguidade Não-Essencial
• Uma gramática ambígua, ainda assim, pode produzir árvores de sintaxe abstrata únicas.
• Denominada ambiguidade não-essencial.
• A semântica associada não depende da regra de eliminação de ambiguidade que é utilizada.
27 http://erinaldosn.wordpress.com
![Page 28: Escrever Uma Gramc3a1tica](https://reader034.vdocuments.site/reader034/viewer/2022042521/55721098497959fc0b8d6b46/html5/thumbnails/28.jpg)
Exercícios
1. Dada a gramática E E soma T | T soma + | - T T mult F | F mult * F (E) | id escreva derivações à esquerda, árvores de análise
sintática e árvores sintáticas para as expressões a seguir: a) 3+4*5-6 b) 3*(4-5+6) c) 3-(4+5*6)
28 http://erinaldosn.wordpress.com
![Page 29: Escrever Uma Gramc3a1tica](https://reader034.vdocuments.site/reader034/viewer/2022042521/55721098497959fc0b8d6b46/html5/thumbnails/29.jpg)
2. Dada a gramática a seguir declaracao if-decl | outra |
if-decl if (exp) declaracao else-parte
else-parte else declaracao |
a) Desenhe uma árvore de análise sintática para a cadeia
if (0) if (1) outra else else outra
b) Para que servem os dois else’s? c) Algum código similar é admissível em C?
Explique.
29 http://erinaldosn.wordpress.com
![Page 30: Escrever Uma Gramc3a1tica](https://reader034.vdocuments.site/reader034/viewer/2022042521/55721098497959fc0b8d6b46/html5/thumbnails/30.jpg)
3. Mostre que a seguinte tentativa de resolução da ambiguidade de else pendente ainda é ambigua:
declaracao if (exp) declaracao | casam-decl
casam-decl if (exp) casam-decl else declaracao |
outra
exp 0 | 1
30 http://erinaldosn.wordpress.com