It
is hard for a lexical analyzer to tell, without the aid of other components,
that there is a source-code error. For instance, if the string f i is encountered for the first time in a C program
in the context:
f i ( a == f ( x ) ) . ..
a
lexical analyzer cannot tell whether f i is a misspelling of the keyword if or
an undeclared function identifier. Since f i is a valid lexeme for the token
id, the lexical analyzer must return the token id to the parser and let some
other phase of the compiler — probably the parser in this case — handle an
error due to transposition of the letters.
However,
suppose a situation arises in which the lexical analyzer is unable to proceed because
none of the patterns for tokens matches any prefix of the remaining input. The simplest
recovery strategy is "panic mode" recovery. We delete successive
characters from the remaining input, until the lexical analyzer can find a
well-formed token at the beginning of what input is left. This recovery
technique may confuse the parser, but in an interactive computing environment
it may be quite adequate.
Other
possible error-recovery actions are:
1.
Delete one character from the remaining input.
2.
Insert a missing character into the remaining input.
3.
Replace a character by another character.
4.
Transpose two adjacent characters.
0 comments