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.