You are on page 1of 33

David Ferrer Erick Felix Jeferson Meira Marcelo Henrique Roberto Rufino

Anlise Sinttica
Analisa os TOKENS recebidos do Analisador Lxico
A partir da, produz uma rvore de derivao Responsabilidade de eliminar redundncia e elementos suprfluos A rvore hierrquica composta por TOKENS possui

um significado coletivo Agrupa os TOKENS na forma de regras gramaticais

Anlise Sinttica
Para entender como funciona o Analisador Sinttico,

deve-se entender o que uma regra gramatical


Definem construes de linguagem So descritas atravs de produo cujos elementos

incluem

Smbolos Terminais Aqueles que fazem parte do cdigo fonte Smbolos No-terminais Aqueles que geram outras regras

O que uma BNF?


Regras gramaticais so representadas na forma de BNF

Exemplo de um Conjunto de Regras Gramaticais (1)


< comando > < while > < atribuicao > < exp_booleana> < exp_aritimetica > < termo > < variavel > < numero > < while > | < atribuicao > | ... while (< exp_booleana >) { < comando > }; < variavel > = < exp_aritimetica > ; < exp_aritimetica > < < exp_aritimetica > ; | < exp_aritimetica > > < exp_aritimetica > ; | ... < exp_aritimetica > + < termo > ; | < termo > ; < anuncio > ; | < variavel > ; i | j | ... 100 | ...

Exemplo de rvore construda (1)


< comando > < while >

while

< exp_booleana >

< comando >

< exp_aritmetica >

<

< exp_aritmetica >

< atribuicao >

< termo > < variavel >


i

< termo >


< numero >

< variavel>

< exp_aritmetica >


+ < termo >

< exp_aritmetica > i < termo >

100

< variavel > < variavel > j i

Exemplo de um Conjunto de Regras Gramaticais (2)


<enunciado> <expressao> <expressao> | [ ] <identificador> | <numero> | <expressao> := <expressao> | <expressao> + <expressao> <identificador> <numero> Qualquer combinao de letras que palavras no-reservadas Qualquer combinao de numeros

Exemplo de rvore construda (2)


< enunciado>

< expressao>

< identificador >

< expressao >

< expressao>

< expressao >

< identificador >

< expressao > < identificador>

< expressao > < numero >

montante

:=

deposito_inicial

taxa_de_juros *

60

Especificao de uma LP
Uma linguagem de programao pode ser definida pela: Descrio da aparncia de seus programas

Sintaxe Semntica

Descrio do que os programas significam

Para especificar a sintaxe


... utilizamos uma BNF
Backus-Naur Form Gramtica Livre de Contexto

Gramtica Livre de Contexto


Utilizada como auxlio para guiar a traduo de

programas
Traduo dirigida por sintaxe

Descreve uma estrutura hierrquica de muitas

construes de linguagens de programao


Exemplo (C)

Comando if-else

if (expresso) comando else comando

Gramtica Livre de Contexto


Comando if-else if (expresso) comando else comando cmd if (expr ) cmd else cmd
Regra de Produo

token

token

No-terminais

Gramtica Livre de Contexto


Possui quatro componentes (1) Conjunto de tokens
Smbolos terminais

(2) Conjunto de no-terminais (3) Conjunto de regras de produo


Produo formada por um no-terminal do lado

esquerdo, uma seta e uma seqncia de tokens e/ou no terminais no lado direito da seta

(4) Uma designao de um dos no-terminais como smbolos de partida

Gramtica Livre de Contexto


O smbolo de partida figura na frente dos demais
Smbolos terminais
Dgitos, sinais (<=, <, +, etc) e cadeias de caracters em

negrito (e.g while, for)

No-terminais
Itlico

OU
|

Gramtica Livre de Contexto


Exemplo 1
Gramtica para construir as seguintes expresses 95+2 31 7

Smbolos no-terminais

lista lista lista dgito

lista + dgito lista - digito dgito

lista

lista + digito | lista - digito | dgito

0|1|2|3|4|5|6|7|8|9
Smbolos terminais = tokens

Gramtica Livre de Contexto

Exemplo 2 A linguagem PASCAL permite definir uma lista vazia A gramtica abaixo permite a construo de uma lista em PASCAL
bloco begin cmd_opcs end cmd_opcs lista_cmds | lista_cmds lista_cmds ; cmd | cmd

rvores Gramaticais
Utilizadas para mostrar como um smbolo de partida,

definido em uma gramtica, gera uma cadeia de linguagem (frase) A XYZ

A X Y Z

rvores Gramaticais
rvore gramatical para 9 5 + 2
lista lista + digito | lista - digito | dgito
lista

lista

+
dgito

dgito

lista

dgito

rvores Gramaticais
Uma rvore gramatical possui as seguintes

propriedades 1. A raiz rotulada pelo smbolo de entrada da gramtica 2. Cada folha um token ou 3. Cada n interior um no-terminal 4. Se A um no-terminal e X1, X2 e Xn so seus filhos A X1 X2 Xn uma produo 5. Se A , ento deve possui um nico filho:

rvores Gramaticais
A leitura sempre deve ser feita da esquerda para a

direita
lista

lista

+
dgito

dgito

lista

dgito

Ambiguidade
Uma gramtica que pode ter mais do que uma rvore

gramatical gerando uma mesma cadeia de tokens dita ambgua Para mostrar que uma gramtica ambigua necessrio encontrar uma cadeia de tokens que tenha mais do que uma rvore gramatical

Ambiguidade
As LPs devem ser definidas de modo a no permitir

amiguidades

cadeia

cadeia + cadeia | cadeia - cadeia


|0|1|2|3|4 |5|6|7|8|9

Qual seria a rvore sinttica para a expresso 9 5 + 2?

Ambiguidade
cadeia cadeia cadeia cadeia cadeia cadeia cadeia cadeia

cadeia

cadeia
+

cadeia

Associatividade dos Operadores


9+5+2 (9 + 5) + 2 9 + (5 + 2) Quando um operando recebe operadores esquerda e

direita
So necessrias convenes para saber que operador

recebe o operando primeiramente

Na maioria das LPs os quatro operadores aritmticos

so associativos a esquerda

Associatividade dos Operadores


O operador de atribuio em C associativo a direita a=b=c a=c
Gramtica de gerao de operador associativo direita direita letra = direita | letra letra a | b | ... | z

Deve ser provado com uma rvore de deciso

Associatividade dos Operadores


lista lista direita dgito letra

+
dgito

= direita
letra = direita

lista

dgito

letra

c 9

Precedncia de Operadores
9+5*2 (9 + 5) * 2 9 + (5 * 2) A associatividade de + e de * no resolve essa

ambigidade pelo fato de que os operadores da direita e da esquerda dos operandos so diferentes
Precisamos conhecer a precedncia relativa dos

operadores

Precedncia de Operadores
Na matemtica, * e tm precedncia mais alta do que

+e 9+5*2 A precedncia e a associatividade de operadores pode ser representada em uma gramtica

Sintaxe de Expresses
So criados dois no-terminais para representar os dois

nveis de precedncia expr e termo criado um no-terminal extra para gerar as unidades bsicas das expresses fator
termo termo * fator | termo / fator | fator
fator

expr

expr + termo | expr - termo | termo

digito | (expr)

Sintaxe de Expresses
expr termo fator

expr + termo | expr termo | termo termo * fator | termo / fator | fator digito | (expr)

Sintaxe de Comandos
cmd

id := expr | if expr then cmd | if expr then cmd else cmd | while expr do cmd | begin cmd_opcs end

David Ferrer Erick Felix Jeferson Meira Marcelo Henrique Roberto Rufino