terça-feira, 23 de outubro de 2007

Análise Sintática

Na ciência da computação, análise sintática (ou parsing) é o processo de analisar uma sequência de entrada (geralmente um texto, como um código-fonte, por exemplo) para determinar sua estrutura gramatical segundo determinadas regras. Essa análise faz parte do processo de compilação, junto com a análise léxica, etapa anterior, e análise semântica, posterior.

Na saída da análise sintática temos, geralmente, uma árvore sintática, como na figura abaixo (poderia ser aqui outra estrutura de dados, mas as árvores caem como uma luva), o que é bastante conveniente para o processamento posterior, pois esta árvore é mais um passo de abstração para o computador. Tudo acaba em abstração, não é? Como eu já expliquei aqui, na análise léxica é obtido um grupo de tokens, e esse grupo é usado pelo analisador sintático que possui um conjunto de regras para construção de uma árvore sintática da estrutura.

O conjunto de regras que eu disse acima é uma gramática. Vamos a um exemplo:

" 'pronome' 'verbo' 'adjetivo' " é uma regra de uma gramática simples que eu acabei de criar pra uma linguagem própria (que acabei de inventar). Assim, tudo que não estiver de acordo com esta gramática está errado e o analisador sintático retronará uma mensagem de erro.

Exemplo correto: "eu sou bonito", porque é um conjunto de 3 palavras, onde a primeira é um pronome, a segunda é um verbo e a terceira um adjetivo.

Exemplo errado: "bonito sou eu", porque apesar de ser um conjunto de 3 palavras, a primeira não é um pronome. Nesse ponto, não importa o resto da entrada, o analisador sintático já retorna um erro neste ponto.

Assim, o analisador sintático verifica se os tokens estão localizados num contexto correto.

Ah, você pode estar perguntando: como o analisador sintático sabe que "bonito" é um adjetivo? Resposta: por causa do analisador léxico! O analisador léxico possui uma informação que "bonito" é um adjetivo e que, portanto, ele retorna ao analisador sintático que o símbolo "bonito" é um token "adjetivo".

Pronto... E assim os analisadores léxico e sintático ficam trocando informações, um envia pra outro e outro envia pra um, até varrer todo o código-fonte.

3 comentários:

Unknown disse...
Este comentário foi removido pelo autor.
Unknown disse...

Olá, Joaz! Sou aluna e mestranda da UFRJ em lingüística gerativa, que utiliza árvores para análises sintáticas. Eu me interesso muito pelo assunto. Será que há algum curso ou alguma bibliografia para eu entender melhor o processo na computação? Talvez até para eu poder trabalhar com isto num futuro.

Att, Karine.

Meu e-mail é: karinerio@hotmail.com, caso pretenda responder.

Anônimo disse...

Prof, adorei os exemplos de análise léxica e semântica.
Abs,
Gisele