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