A base para a operação de reconhecimento neste tipo de analisador é a Tabela de Deslocamento e Redução ou Tabela SR (shift-reduce), as duas ações básicas desempenhadas pelo analisador durante a análise de uma sentença. Essa tabela determina, a partir do último símbolo resultante das ações efetuadas sobre os símbolos já lidos (que pode ser tanto um símbolo terminal como um não-terminal) e do próximo símbolo terminal presente na sentença, se o próximo passo da análise é ler o próximo símbolo, reduzir os símbolos já lidos ou se não há ação a ser tomada.
Para construir essa tabela, as produções da gramática são analisadas
para obter as relações de precedência simples entre os
símbolos gramaticais, acrescidos do delimitador de sentenças $. Para
dois símbolos e
, as relações de precedência definidas são
(
confere precedência a
) e
(
tem precedência sobre
).
Para obter as relações ``confere precedência'' entre os símbolos de
uma gramática , as seguintes regras são aplicadas:
As relações ``tem precedência sobre'' entre os símbolos de são
obtidas pela aplicação das seguintes regras:
Deve-se observar que
não implica que
.
Também pode ser verdade para alguma gramática que
ao
mesmo tempo que
ou
. Assim, não se deve
confundir as propriedades dessas relações, apesar da semelhança de
notação, com aquelas das bem conhecidas relações de ordem ``menor ou
igual'' e ``maior''.
Uma vez determinado o conjunto completo das relações de precedência
simples, é possível construir diretamente a tabela de deslocamento e
redução. Nessa tabela, a chave é composta por dois símbolos
da gramática estendida com o delimitador de sentença. O primeiro
estará associado ao estado corrente da análise da sentença, podendo
portanto ser um símbolo qualquer. O segundo símbolo da chave é um
símbolo terminal, que estará associado ao próximo símbolo da sentença.
Se
, então o valor na tabela para a chave
conterá a indicação de que a próxima ação deve ser a leitura do
próximo símbolo da sentença. Se
, então o valor da
chave indicará que a próxima ação do analisador deve ser a redução dos
últimos símbolos lidos pela aplicação de uma produção da gramática.
Considere como exemplo a construção da tabela de deslocamento e redução para a gramática da Figura 3.7. Pela Regra 1, obtém-se a primeira relação de precedência,
A Regra 2 estabelece que há a mesma relação de precedência entre símbolos contíguos no lado direito das produções da gramática. A aplicação dessa regra deriva as relações
![]() |
![]() |
![]() |
||
![]() |
![]() |
![]() |
Para a aplicação da Regra 3, é preciso analisar todas as relações,
obtidas pela aplicação das Regras 1 e 2 e da própria Regra 3, onde o
símbolo do lado direito é um símbolo não-terminal, até que novas
relações não possam mais ser estabelecidas. Por exemplo, como
, então
; como
esta relação tem do lado direito um símbolo não-terminal, deve-se
analisar quais símbolos iniciam o lado direito das produções para
, o que leva à obtenção da relação
.
A aplicação da Regra 3 gera as seguintes relações de precedência:
![]() |
![]() |
![]() |
![]() |
|||
![]() |
![]() |
![]() |
![]() |
|||
![]() |
![]() |
![]() |
![]() |
|||
![]() |
![]() |
![]() |
![]() |
As regras seguintes permitem estabelecer as relações ``tem precedência sobre'', que estarão associadas a reduções durante a análise. A primeira dessas regras, Regra 4, deriva a relação
Para a aplicação da Regra 5, é preciso analisar as relações ``confere
precedência a'' que tenham símbolos não-terminais do lado esquerdo,
que são
,
e
, e
quais símbolos terminam as produções para esses símbolos
não-terminais. Essa análise permite derivar as relações
![]() |
![]() |
![]() |
A aplicação da Regra 6 requer a análise das relações ``tem precedência sobre'' derivadas da aplicação das regras 4 e 5 e da própria Regra 6. As relações de interesse são aquelas que têm do lado esquerdo um símbolo não-terminal. A aplicação da regra deriva as relações
![]() |
![]() |
![]() |
![]() |
|||
![]() |
![]() |
![]() |
![]() |
|||
![]() |
![]() |
![]() |
![]() |
A última regra, Regra 7, deriva novas relações de ``tem precedência sobre'' a partir dessas relações onde há um símbolo não-terminal no lado direito. Particularmente para esse exemplo não há nenhuma relação dessa forma e portanto nenhuma nova relação pode ser derivada.
Concluída a análise das relações de precedência para a gramática, é
possível construir a sua tabela de deslocamento e redução
(Tabela 3.3) usando as relações
ou
onde
é um símbolo terminal. Nessa tabela, a
entrada ``S'' (shift) indica que a ação deve ser de leitura do
próximo símbolo da sentença, enquanto que a entrada ``R'' determina a
redução dos símbolos já lidos. Para as entradas em branco não há uma
ação que possa ser tomada que leve ao reconhecimento da sentença.
|
Observe na Tabela 3.3 que a entrada para
recebeu uma marcação especial, pois essa situação -- os símbolos já
analisados resultaram no símbolo sentencial e a sentença chegou ao fim
-- determina a condição de reconhecimento da sentença.
Para algumas gramáticas, a construção da tabela de deslocamento e
redução pode levar a situações onde mais de uma ação poderia ser
tomada para um dado estado e próximo símbolo da sentença. Essa tabela
não terá entrada duplicadas se a gramática for uma gramática
de operadores, para a qual nenhuma produção tem do lado direito
dois símbolos não-terminais adjacentes, e se nenhuma produção tiver
do lado direito.