AULA NΊ 6.4

(Download da Aula)

<< anterior prσxima >>
menu de aulas dϊvidas
 

 

 Tratamento Automático de Erros (Detecção e Correção)

  Tratamento Automático de Erros

Quando o tratamento independe do analisador, dependendo exclusivamente da gramática analisada.

Aplica-se a qualquer gramática aceita pelo analisador.

 

  Detecção de Erros Sintáticos

Erros possíveis:

  1. Símbolo inicial da gramática foi encontrado e ainda restam símbolos da cadeia de entrada não analisados.
  • Pilha do analisador vazia.
  • Fim de arquivo ainda não detectado.

ANSIN retorna SUCESSO = false.

  1. O nó sendo visitado, de índice I, é terminal, não é l - nó, mas o seu conteúdo não coincide com o símbolo lido, e não há alternativa para esse nó.
TABGRAFO[I].TER = true, TABGRAFO[I].SIM <> 0,

TABT[TABGRAFO[I].SIM] <> ENT, TABGRAFO[I].ALT = 0

 

ANSIN chama TRATAERRO(IU)
TRATAERRO exibe a mensagem de erro com os terminais esperados:
  • a a d f g e c c

ERRO |: ‘a’ , ‘d’ , ‘e’ esperado(s)

  • a g

ERRO |: ‘b’ , ‘a’ , ‘d’ , ‘e’ esperado(s)

  • a d g e c

ERRO |: ‘c’ esperado(s)

Esta mensagem deve-se ao fato de ‘f’ ter uma l - alternativa, portanto M é sempre reconhecido quando procurado. Outro exemplo:

IF A=B THEN c:=d ELSE c:=e.

|: ‘;’ , ‘END’ esperado(s)

Caso este erro seja sintaticamente corrigido (p. e. substituindo THEN por ‘;’

|: ‘;’ , ‘END’ esperado(s)

   Correção Sintática de Erros

 
Quando encontrar o primeiro erro:
  • Deixar de gerar o código objeto.
  • Continuar a análise sintática e a análise de contexto.

 

e1 ... ej-1 ej ej+1... en , onde ej é o ERRO encontrado.

 Até aqui foi tentado o percurso de alternativas partindo do nó, apontado por IU, passando os pelos nós contendo os terminais t1, ... tn .

 

  Estratégias de Correção:

Quatro estratégias.
Tenta-las sequencialmente.
Se nenhuma corrigir, ignora-se o símbolo ej passa-se ao próximo símbolo ei+1 , voltando-se a testar as quatro estratégias novamente.
Quando mais de uma estratégia de correção tiver sucesso, usa-se a primeira estratégia de seqüência que ignorar o menor número de símbolos de entrada.

 

   Estratégias de Correção de Erro:

 Estratégia E: Eliminar um símbolo de entrada.

Premissa : ej é supérfluo e deve ser eliminado.

Condição : Comparar ej+1 com t1, t2, ... , tn e ej+1 = ti , i = 1,n .

Ação : Emitir mensagem de correção avisando que ej foi ignorado e continuar a análise a partir do nó que contiver ti .

Cuidados :

  • Guardar o topo da pilha k antes de verificar se ej+1 pode corrigir o erro.
  • Empilhar em k todo NT que for encontrado no percurso para que se possa corrigir a pilha adequadamente.

Ex.: a a d f g e c c

ERRO |: ‘a’ , ‘d’ , ‘e’ esperado(s)

CORREÇÃO : ignorado

 Estratégia I : Inserção de um símbolo.

Premissa : Foi esquecido um símbolo.

ej-1 | ej

ti , i = 1,n .

ej Î sucessores (ti)

Ex.: d f b

ERRO |: ‘a’ , ‘d’ , ‘e’ esperado(s)

CORREÇÃO |: ‘a’ inserido antes desse símbolo.

Ex.: Exemplo em Pascal

VAR A B;

ERRO |: ‘,’ , ‘:’ esperado(s)

CORREÇÃO |: ‘,’ inserido antes desse símbolo.

 Estratégia T : Troca de um símbolo.

Premissa : Foi trocado um símbolo.

Ação : Usar a estratégia I para o símbolo ej+1.

 Estratégia D : Busca de um delimitador.

Premissa : Um trecho da entrada (correspondente a um NT) foi omitido, e ej é um delimitador desse NT, ou seja, ej é um sucessor desse NT.

Exemplos:

1) a c

ERRO |: ‘b’ , ‘a’ , ‘d’ , ‘e’ esperado(s)

CORREÇÃO |: Assumido como delimitador.

  1. IF a = b THEN GOTO ELSE a:=b;

ERRO |: ‘NUMB’ esperado

CORREÇÃO |: Assumido como delimitador.

 

   Tabelas de Símbolos

 As tabelas de símbolos são construídas pelo analisador de contexto (AC). O AC é chamado pelo analisador sintático. Quem consulta as tabelas de símbolos ?

R.: O próprio AC e o gerador de código (GC).

AC GC

ANALISADOR SEMÂNTICO

 Tabelas de símbolos são:

  • TABELAS DE IDENTIFICADORES E RÓTULOS (LABELS) – TIR
  • TABELAS DE CONSTANTES NUMÉRICAS – TCN
  • TABELAS DE CONSTANTES ALFANUMÉRICAS (CADEIAS DE CARACTERES) – TCA

 TIR – Apresenta problemas quanto à decisão do tipo de acesso que deve ser feito:

  • Inserção de um novo símbolo
  • Consulta às informações referentes a um símbolo já inserido

Por quê ?

R.: Um determinado símbolo (identificador ou rótulo) não pode ser declarado mais do que uma vez em um programa principal ou procedimento.

TCN  e TCA – Seus símbolos não têm declaração explicita. São declaradas na primeira ocorrência. Após isso serão apenas consultados.

CΣDIGO INTERNO DO SÍMBOLO Û ENDEREÇO DO PROGRAMA OBJETO

 TIR – Problema do escopo (região de validade) dos identificadores.

  • Ao se chegar ao final de um procedimento, todos os símbolos da TIR nele declarados devem ser retirados da tabela.
  • Temos identificadores de várias classes e tipos com eventuais estruturas (matrizes e registros).