Escolar Documentos
Profissional Documentos
Cultura Documentos
COMPILADORES
ANALISADORES SINTÁTICOS ASCENDENTES DESCENDENTES
INTRODUÇÃO
A linguagem de programação possui as regras que descrevem a
estrutura sintática dos programas bem-formados.
A sintaxe das construções de uma linguagem de programação pode
ser descrita pelas gramáticas livres de contexto (usando
possivelmente a notação BNF). As gramáticas oferecem vantagens
significativas tanto para os projetistas de linguagens quanto para os
escritores de compiladores.
O PAPEL DO ANALISADOR SINTÁTICO
o analisador sintático obtém uma cadeia de tokens proveniente do
analisador léxico, como mostrado na figura abaixo, e verifica se a
mesma pode ser gerada pela gramática da linguagem-fonte. Se
espera que o analisador sintático relate quaisquer erros de sintaxe de
uma forma inteligível.
O PAPEL DO ANALISADOR SINTÁTICO
Existem três tipos gerais de analisadores sintáticos. Os métodos
universais de análise sintática podem tratar qualquer gramática. Esses
métodos, entretanto, são muito ineficientes para se usar num
compilador comercial. Os métodos mais comumente usados nos
compiladores são classificados como descendentes (top-down) ou
ascendentes (bottom-up). Como indicado por seus nomes, os
analisadores sintáticos descendentes constroem árvores do topo (raiz)
para o fundo (folhas), anquanto que os ascendentes começam pelas
folhas e trabalham árvore acima até a raiz. Em ambos os casos, a
entrada é varrida da esquerda para a direita, um símbolo de cada vez.
O PAPEL DO ANALISADOR SINTÁTICO
Os métodos de análise sintática mais eficientes, tanto descendentes
quanto ascendentes, trabalham somente em determinadas subclasses
de gramáticas, mas várias dessas subclasses, como as das
gramáticas LL(left-left) e LR(left-right), são suficientemente
expressivas para descrever a maioria das construções sintáticas das
linguagens de programação. Os analisadores implementados
manualmente trabalham frequentemente com gramáticas LL. Os da
classe mais ampla das gramáticas LR são usualmente construídos
através de ferramentas automatizadas.
ANÁLISE SINTÁTICA ASCENDENTE
Neste tipo de análise sintática a construção da árvore de derivação
para uma determinada cadeia começa pelas folhas da árvore e segue
em direção de sua raiz. Caso seja obtida uma árvore cuja raiz tem
como rótulo o símbolo inicial da gramática, e na qual a sequência dos
rótulos das folhas forma a cadeia dada, então a cadeia é uma
sentença da linguagem, e a árvore obtida é a sua árvore de derivação.
O processo de se partir das folhas em direção à raiz de uma árvore de
derivação é conhecido como redução. A cada passo procura-se
reduzir uma cadeia (ou sub-cadeia) ao seu símbolo de origem,
objectivando-se atingir o símbolo inicial da gramática.
ANÁLISE SINTÁTICA ASCENDENTE
Funcionamento geral:
1) Toma-se uma determinada cadeia β.
2) Procura-se por uma sub-cadeia a1,a2,...ande β que possa ser
substituída pelo seu símbolo de origem ρ. Ou seja, ρ →
a1,a2,...an. Assim β = α1 ρ α2.