Vous êtes sur la page 1sur 30

FACULDADE ANGLO AMERICANO FOZ DO IGUAU Curso de Cincia da Computao 7 Periodo Disciplina: Compiladores Prof.

Erinaldo Sanches Nascimento

Escrever uma Gramtica


Anlise Sinttica
Eliminar ambiguidade Eliminar recurso esquerda

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.

A matemtica determina como correta a segunda interpretao.


http://erinaldosn.wordpress.com 10

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

rvore sinttica para a expresso 34-3*42.

http://erinaldosn.wordpress.com

17

A rvore de anlise sinttica para a expresso 34-3-42.

http://erinaldosn.wordpress.com

18

Else vazio (pendente)


Considere a gramtica: 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
http://erinaldosn.wordpress.com 19

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