Compiladores - Bruno Moreno

Propaganda
Compiladores
Prof. Bruno Moreno
Aula 3 – 04/03/2011
Análise Sintática
Análise Sintática


Analisa os TOKENS recebidos do Analisador
Léxico
A partir daí, produz uma árvore de derivação



Responsabilidade de eliminar redundância e
elementos supérfluos
A árvore hierárquica composta por TOKENS
possui um significado coletivo
Agrupa os TOKENS na forma de regras
gramaticais
Análise Sintática

Para entender como funciona o Analisador
Sintático, deve-se entender o que é uma
regra gramatical


Definem construções de linguagem
São descritas através de produção cujos
elementos incluem

Símbolos Terminais


Aqueles que fazem parte do código fonte
Símbolos Não-terminais

Aqueles que geram outras regras
O que é uma BNF?

Regras gramaticais são 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 construída
(1)
< comando >
< while >
while
(
< exp_booleana >
< exp_aritmetica >
<
)
{
< comando >
< exp_aritmetica >
< termo >
< termo >
< variavel >
< numero >
}
;
< atribuicao >
< variavel>
=
< exp_aritmetica >
< exp_aritmetica >
+
< termo >
i
i
100
< termo >
< variavel >
< variavel >
j
i
Exemplo de um Conjunto de
Regras Gramaticais (2)
<enunciado>
<expressao> | [ ]
<expressao>
<identificador> | <numero> |
<expressao> := <expressao> |
<expressao> + <expressao>
<identificador>
<numero>
Qualquer combinação de letras que palavras não-reservadas
Qualquer combinação de numeros
Exemplo de Árvore construída
< enunciado>
(2)
< expressao>
< identificador >
< expressao >
< expressao>
< expressao >
< identificador >
< expressao > < expressao >
< identificador>
montante
:=
deposito_inicial
+
taxa_de_juros *
< numero >
60
Download