|
|
Tratamento Automático de Erros (Detecção e Correção) |
Tratamento Automático de Erros |
|
|
Detecção de Erros Sintáticos |
Erros possíveis:
ANSIN retorna SUCESSO = false.
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: |
ERRO |: a , d , e esperado(s) |
ERRO |: b , a , d , e esperado(s) |
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:
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 :
|
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.
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:
|
TIR Apresenta problemas quanto à decisão do tipo de acesso que deve ser feito:
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.
|