Escolar Documentos
Profissional Documentos
Cultura Documentos
Introduo
No descreve toda a sintaxe das linguagens de programao. Algumas transformaes podem ser aplicadas s gramticas a fim de adequ-las aos diversos mtodos de reconhecimento sinttico.
Eliminar ambiguidade Eliminar recurso esquerda Fatorar esquerda
http://erinaldosn.wordpress.com 2
Tudo o que pode ser descrito por uma expresso regular tambm pode ser descrito por uma gramtica livre de contexto.
http://erinaldosn.wordpress.com
A expresses regulares so mais adequadas para descrever a estrutura de construes como identificadores, palavras-chave e espao em branco. As gramticas so mais teis para descrever estruturas aninhadas como parnteses balanceados, a combinao das construes if-else correspondentes, e assim por diante.
http://erinaldosn.wordpress.com 4
Gramticas Ambguas
Uma gramtica pode permitir que uma cadeia tenha mais de uma rvore de anlise sinttica. Uma gramtica que gera uma cadeia com duas rvores de anlise sinttica distintas ambgua.
http://erinaldosn.wordpress.com
Tratar ambiguidade
Estabelecer uma regra que especifique qual rvore sinttica a correta. Alterar a gramtica para forar a construo da rvore de anlise sinttica correta.
http://erinaldosn.wordpress.com
Considere a gramtica aritmtica de inteiros: exp exp op exp | (exp) | numero op + | - | * Considere a cadeia 34-3*42.
http://erinaldosn.wordpress.com
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
http://erinaldosn.wordpress.com
exp
exp op exp numero op exp numero exp numero exp op exp numero numero op exp numero numero * exp numero numero * numero
http://erinaldosn.wordpress.com
Qual das duas rvores sintticas anteriores representa a interpretao correta da cadeia?
A primeira indica que a expresso deve avaliar primeiro a subtrao, e depois a multiplicao. A segunda indica que a multiplicao deve ser efetuada antes, e depois a subtrao.
Precedncia e Associatividade
Agrupar os operadores em classes de igual precedncia. Para cada precedncia escrever uma regra distinta.
http://erinaldosn.wordpress.com
11
Cascata de precedncias
exp exp soma exp | termo soma + | termo termo mult termo | fator mult * fator (exp) | numero
http://erinaldosn.wordpress.com
12
A multiplicao agrupada sob a regra termo. A adio e a subtrao so agrupadas sob a regra exp. Como a base para exp termo, a adio e a subtrao aparecero mais perto da raiz (menor precedncia).
http://erinaldosn.wordpress.com
13
No especifica a associatividade dos operadores Ainda ambgua: a recurso nos dois lados do operador possibilita que qualquer um dos lados case com repeties do operador em uma derivao. Soluo: substituir um das recurses pelo caso base. exp exp soma termo | termo
http://erinaldosn.wordpress.com 14
Recurso 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
http://erinaldosn.wordpress.com 15
Remoo de ambiguidade nas regas BNF para expresses aritmticas simples. exp exp soma termo | termo soma + | termo termo mult fator | fator mult * fator (exp) | numero
http://erinaldosn.wordpress.com 16
http://erinaldosn.wordpress.com
17
http://erinaldosn.wordpress.com
18
http://erinaldosn.wordpress.com
20
http://erinaldosn.wordpress.com
21
Essa cadeia tem duas rvores de anlise sinttica (ambgua). A escolha de qual a correta depende de querermos associar a parte else primeira ou segunda declarao if.
http://erinaldosn.wordpress.com
22
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;
http://erinaldosn.wordpress.com 23
Uma soluo:
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
http://erinaldosn.wordpress.com
24
Casam-decl ocorre apenas antes de um else em uma declaraao if Fora todas as partes else casar assim que possvel.
http://erinaldosn.wordpress.com
25
http://erinaldosn.wordpress.com
26
Ambiguidade No-Essencial
Uma gramtica ambgua, ainda assim, pode produzir rvores de sintaxe abstrata nicas. Denominada ambiguidade no-essencial. A semntica associada no depende da regra de eliminao de ambiguidade que utilizada.
http://erinaldosn.wordpress.com
27
Exerccios
1. Dada a gramtica E E soma T | T soma + | T T mult F | F mult * F (E) | id escreva derivaes esquerda, rvores de anlise sinttica e rvores sintticas para as expresses a seguir: a) 3+4*5-6 b) 3*(4-5+6) c) 3-(4+5*6)
http://erinaldosn.wordpress.com 28
2. Dada a gramtica a seguir declaracao if-decl | outra | if-decl if (exp) declaracao else-parte else-parte else declaracao | a) Desenhe uma rvore de anlise sinttica para a cadeia if (0) if (1) outra else else outra b) Para que servem os dois elses? c) Algum cdigo similar admissvel em C? Explique.
http://erinaldosn.wordpress.com 29
3. Mostre que a seguinte tentativa de resoluo 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
http://erinaldosn.wordpress.com
30