Buscar

Análise Sintática de Gramática G3

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você viu 3, do total de 4 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Prévia do material em texto

“iIntrComp” — 2008/10/6 — 15:46 — page 148 — #160
148 · Introdução à Compilação ELSEVIER
preciso obter as relações de Wirth-Weber, verificar se não há conflitos entre as
relações para nenhum par de símbolos e, para as produções que terminam com
o mesmo símbolo, verificar se não há ambigüidade entre o símbolo anterior e
uma possível redução do símbolo.
Para obter as relações de Wirth-Weber, é preciso obter os conjuntos ESQ e
DIR para cada símbolo não-terminal de G3:
ESQ(E) = {E, M, P, (, v} DIR(E) = {M, P, ), v}
ESQ(M) = {M, P, (, v} DIR(M) = {P, ), v}
ESQ(P ) = {(, v} DIR(P ) = {), v}
A primeira relação,≈, é obtida por inspeção das produções. Para G3 obtêm-
se:
E ≈ + + ≈ M
M ≈ × × ≈ P
( ≈ E E ≈ )
Para a segunda relação,≺, é preciso analisar as relações≈ que têm símbolos
não-terminais do lado direito e os elementos do conjunto ESQ desses símbolos.
Como + ≈ M e ESQ(M) = {P, (, v}, então + ≺ P , + ≺ ( e + ≺ v. Do
mesmo modo obtêm-se novas relações a partir de × ≈ P e de ( ≈ E. Portanto,
todas as relações ≺ são:
+ ≺ M + ≺ P
+ ≺ ( + ≺ v
× ≺ ( × ≺ v
( ≺ E ( ≺ M
( ≺ P ( ≺ (
( ≺ v
A terceira relação, �, é obtida a partir da análise das relações ≈ entre
um símbolo não-terminal e um símbolo terminal ou entre dois símbolos não-
terminais. Há três relações no primeiro caso: E ≈ +, M ≈ × e E ≈ ), das
quais são derivadas as relações:
M � + P � +
) � + v � +
P � × ) � ×
v � × M � )
P � ) ) � )
v � )
“iIntrComp” — 2008/10/6 — 15:46 — page 149 — #161
ELSEVIER Análise sintática · 149
Como não há nenhuma relação ≈ entre dois símbolos não-terminais, este é o
conjunto completo de relações � para G3.
A Tabela 4.4 apresenta o conjunto completo das relações de Wirth-Weber
entre os símbolos da gramática G3.
Tabela 4.4 Relações de Wirth-Weber para a gramática G3
E M P + × ( ) v
E ≈ ≈
M � ≈ �
P � � �
+ ≈≺ ≺ ≺ ≺
× ≈ ≺ ≺
( ≈≺ ≺ ≺ ≺ ≺
) � � �
v � � �
Como não há nenhum par de símbolos que esteja relacionado simultanea-
mente pela relação � e por alguma outra relação, a primeira condição para que
a gramática seja de precedência fraca é satisfeita.
A segunda condição demanda a análise das produções que terminam com
o mesmo símbolo. O primeiro par de produções que precisa ser analisado é
E → E + M e E → M , pois ambas terminam com o símbolo M . A condição
que precisa ser analisada é se há alguma relação entre o símbolo que precede
M na primeira produção, nesse caso +, e o lado esquerdo da segunda produção,
nesse caso E. Como pode ser observado pela entrada vazia na linha + com
coluna E, não há nenhuma relação entre + e E. Então, pela análise desse par
de produções, a gramática é de precedência fraca.
A mesma análise deve ser realizada para o par de produções M → M × P
e M → P . Da mesma forma, é possível observar que não há relação entre o
símbolo que precede P na primeira produção, ×, e o símbolo não-terminal do
lado esquerdo da segunda produção, M , pois a entrada na linha × e coluna M
está vazia. Como todas as regras que terminam com o mesmo símbolo foram
analisadas e não resultaram em conflitos, a gramática G3 é de precedência fraca.
Para a construção da tabela DR, é preciso incluir as relações envolvendo o
símbolo terminador de sentença $ e os símbolos que pertencem aos conjuntos
ESQ e DIR do símbolo sentencial E. Como ESQ(E) = {E, M, P, (, v},
“iIntrComp” — 2008/10/6 — 15:46 — page 150 — #162
150 · Introdução à Compilação ELSEVIER
então
$ ≺ E
$ ≺ M
$ ≺ P
$ ≺ (
$ ≺ v
Do mesmo modo, como DIR(E) = {M, P, ), v}, então
M � $
P � $
) � $
v � $
Assim, a Tabela 4.5 apresenta a tabela DR para G3.
Tabela 4.5 Tabela DR para a gramática G3
+ × ( ) v $
E D D
M R D R R
P R R R R
+ D D
× D D
( D D
) R R R R R
v R R R R R
$ D D
Considere como a tabela é utilizada no procedimento de reconhecimento da
sentença v + v × v. No estado inicial, a pilha contém apenas o símbolo delimi-
“iIntrComp” — 2008/10/6 — 15:46 — page 151 — #163
ELSEVIER Análise sintática · 151
tador de sentença e a lista contém todos os tokens da sentença e o delimitador
de sentença ao final:
Pilha:
$
Lista de tokens:
v + v × v $
A primeira ação indica deslocamento, portanto o próximo estado é
Pilha:
v
$
Lista de tokens:
+ v × v $
Essa ação tem um efeito na construção da árvore sintática, que é a criação
de um nó folha para a árvore com o token v.
Para esse estado, com v no topo da pilha e + como próximo token, a ação
indicada é redução, nesse caso pela produção 6, P → v, a única aplicável.
Assim, o símbolo v no topo da pilha (o lado direito da produção) é substituído
pelo símbolo não-terminal P , o lado esquerdo da produção:
Pilha:
P
$
Lista de tokens:
+ v × v $
Na construção da árvore sintática, essa ação corresponde à criação do nó pai
para o nó que havia sido criado pela ação anterior:
P
v
Com o símbolo P no topo da pilha e + como primeiro elemento da lista, a
próxima ação é novamente redução. A produção 4, M → P , é a única aplicável
e o novo estado das estruturas de dados é:
Pilha:
M
$
Lista de tokens:
+ v × v $
Árvore: M
P
v

Outros materiais