Escolar Documentos
Profissional Documentos
Cultura Documentos
1 - Fundamentao terica
1.1 - O analisador sinttico
O analisador sinttico tem por funo receber uma cadeia ou conjunto de tokens
proveniente do analisador lxico e verificar se a mesma pode ser gerada pela gramtica
da linguagem fonte [1]. Neste sentido, a gramtica quem d as diretrizes para
construo de um analisador capaz de reconhecer expresses que so aceitas em suas
regras. O analisador sinttico tem o papel ainda de se recuperar dos erros que ocorram,
no intuito de continuar a processar toda entrada de tokens, e no apenas at encontrar o
primeiro erro.
Quando falado aqui em erros sintticos, no mais se est preocupado com erros
de escrita ou tipos mal formados. Isso foi um papel do analisador lxico que, no poder
de suas atribuies, pde localizar e classificar a ocorrncia de cada token dentro do
cdigo, bem como relatar possveis erros lxicos presentes no corpo de cdigo do
programador. Passada essa fase, subtende-se que a tabela de smbolos mantm um
conjunto de valores que precisam agora ser vistos como unidades e, desta forma, seu
contedo, se formado por dgitos ou letras, no mais o objetivo. Aqui, vistos de forma
atmica, os tokens precisam passar por uma etapa onde sua ordem verificada, se um
identificador vem imediatamente antes de um operador ou se um tipo primitivo antecede
um identificador, numa declarao, por exemplo, no poder de construo definido na
gramtica.
Nesse contexto, a construo do analisador sinttico a ser apresentada se baseia
nas construes definidas na gramtica, em etapa anterior, baseando-se na notao
EBNF. As possveis estratgias da anlise so esplanadas no tpico 1.2, bem como
tambm apresentado os critrios de escolha de determinada estratgia, a partir de
decises tericas e de projeto.
1.2 - Estratgias para anlise sinttica
Existem trs tipos gerais de analisadores sintticos[1]: A universal, que pode
analisar qualquer gramtica. Ex: o algoritmo de Coke-Younger-Kasami e o algoritmo de
Earley. A descendente (top-down), que constroi as rvores de derivao de cima (raiz)
para baixo (folhas), e a ascendente (bottom-up), que constroi as rvores de derivao de
baixo (folhas) para cima (raiz). Todavia, o primeiro mtodo citado se torna bastante
ineficiente, principalmente por sua complexidade em abranger todas as gramticas. Os
mtodos de anlise sinttica mais eficientes so o top-down e o bottom-up que, embora
trabalhem com apenas um grupo de gramticas, so suficientemente expressivos para
descrever a maioria das construes sintticas das linguagens de programao[1].
Como apresentado em etapas anteriores, existem diversos tipos de gramtica,
como por exemplo, gramtica fatorada esquerda, recursiva esquerda, simplificada,
etc. Alm disso, existem outras classificaes, de acordo com os nveis na hierarquia de
Chomsky, tambm j apresentada. Dessas caractersticas, foi desenvolvida uma
gramtica fatorada esquerda, sem recurso a esquerda e sem ambigidade. Assim,
para o analisador implementado, se fez necessrio utilizar a estratgia top-down, uma
vez que reconhecedores desse tipo podem processar apenas gramticas que no
apresentem recursividade a esquerda[2]. Para a estratgia bottom-up, o requisito seria o
inverso, que a gramtica no apresentasse recursividade a direita.
Assim, os mtodos de reconhecimento podem exigir transformaes na
gramtica, caso ela j no tenha sido construda nesse sentido. As transformaes
podem incluir: eliminao de produes vazias, retirada de recurso esquerda e
fatorao de produes. A gramtica sobre a qual o analisador foi construdo obedece a
esses requisitos.
Caso existisse uma recurso a esquerda, por exemplo, para um analisador
sinttico top-down, o mesmo entraria em um loop infinito, uma vez que o mesmo usa
anlise do tipo LR (Left-Right), lendo a entrada de texto da esquerda para direita. Alm
disso, produes no fatoradas a esquerda deixariam a gramtica ambgua, uma vez que
o analisador no saberia para que produo ir quando encontrasse duas derivaes com
uma mesma cadeia inicial.
3 - Referncias
[1] AHO, Alfred V.; SETHI, Ravi; ULLMAN, Jeffrey D. Compiladores, principios, tecnicas
e ferramentas. Rio de Janeiro: Guanabara Koogan, c1995.
[2] PRICE, Ana Maria de Alencar; TOSCANI, Simao Sirineo. Implementacao de linguagens
de programacao : compiladores. 3. ed. Porto Alegre: Sagra Luzatto, 2005.