sábado, 10 de maio de 2008

Estrutura de um tradutor: Análise

Em geral, os tradutores de linguagens de programação são programas bastantes complexos. Independentemente da linguagem a ser traduzida ou do programa objeto a ser gerado, os tradutores, de um modo geral compõe-se de funções padronizadas, que compreendem a analise de um programa fonte e a posterior sintese para a derivação do código objeto.

O processo de tradução é estruturado em fases, no qual cada subfase se comunica com a seguinte através de uma linguagem intermediária adequada. Suas fases são: Analise e Síntese.

A fase referente a Análise é subdividida em Análise Léxica, Análise Sintática e Análise Semântica.

O objetivo principal da Análise Léxica é identificar sequências de caracteres que constituem unidades léxicas (“tokens”). O analisador léxico lê, caractere a caractere, o texto fonte, verificando se os caracteres lidos pertecem ao alfabeto da linguagem, identificando tokens, e desprezando comentários e brancos desnecessários. Além de reconhecer os simbolos léxicos, o analisador também realiza outras funções, como armazenar alguns desses símbolos em tabelas internas e indicar a ocorrencia de erros léxicos.

A sequencia de tokens produzida pelo analisador léxico é utilizada como entrada pelo módulo seguinte do compilador, o analisador sintático. É interessante observar que o mesmo programa fonte é visto pelos analisadores léxico e sintatico como sentenças diferentes. Para o analisador léxico o programa fonte é uma sequencia de palavras de uma linguagem regular. Para o analisador sintatico, essa sequencia de tokens constitui uma sentença de linguagem livre de contexto (permite expressar construções mais sofisticadas).

Os simbolos léxicos (tokens) constituem uma linguagem regular, que são as mais simples. No contexto de tradução de linguagem de programação, as linguagens são usualmente apresentadas através de gramaticas ou algoritmos (automatos) que as reconhecem.

A fase da Análise Sintática tem por função verificar se a estrutura gramatical do programa está correta (isto é, se essa estrutura foi formada usando as regras gramaticais da linguagem). A Analise Semântica irá verificar se as estruturas do programa irão fazer sentido durante a execução.

O Analisador Sintático identifica seqüências de símbolos que constituem estruturas sintáticas (cadeia de tokens) do programa fonte. Outra função dos reconhecedores sintáticos é a detecção de erros de sintaxe indentificando clara e objetivamente a posição e o tipo de erro ocorrido. Mesmo que erros tenham sido encontrados, o Analisador Sintatico deve tentar recuperá-los prosseguindo a análise do texto restante.

Muitas vezes, o Analisador Sintático opera conjuntamente com o Analisador Semântico, cuja principal atividade é determinar se as estruturas sintaticas analisadas fazem sentido, ou seja, verificar se um identificador declarado como váriavel é usado como tal; Se existe compatibilidade entre os operandos e operadores em expressões; etc.


Adaptado do livro: Implementação de Linguagens de Programação: Compiladores, de Ana Maria de Alencar Price e Simão Sirineo Toscani

Um comentário:

Chopin Guimarães disse...

muito boa a postagem mas gostaria de saber quais são os tradutores mais utilizados?