词汇错误
当标记模式与剩余输入的前缀不匹配时,词法分析器会卡住,必须从该状态恢复以分析剩余输入。简而言之,当一个字符序列与任何标记的模式不匹配时,就会发生词法错误。它通常发生在程序执行期间。
词法错误的类型:
词法分析器中可能发生的词法错误类型如下:
1.超过标识符或数字常量的长度。
例子:
C++
#include
using namespace std;
int main() {
int a=2147483647 +1;
return 0;
}
C++
#include
using namespace std;
int main() {
printf("Geeksforgeeks");$
return 0;
}
C++
#include
using namespace std;
int main() {
/* comment
cout<<"GFG!";
return 0;
}
C++
#include
using namespace std;
int main() {
int 3num= 1234; /* spelling error as identifier
cannot start with a number*/
return 0;
}
C++
#include
using namespace std;
int main() {
int x = 12$34; /*lexical error as '$' doesn't
belong within 0-9 range*/
return 0;
}
C++
#include /*missing 'o' character
hence lexical error*/
using namespace std;
int main() {
cout<<"GFG!";
return 0;
}
C++
#include
using namespace std;
int mian()
{
/* spelling of main here would be treated as an lexical
error and won't be considered as an identifier,
transposition of character 'i' and 'a'*/
cout << "GFG!";
return 0;
}
这是一个词法错误,因为有符号整数介于 -2,147,483,648 和 2,147,483,647 之间
2.非法字符的出现
例子:
C++
#include
using namespace std;
int main() {
printf("Geeksforgeeks");$
return 0;
}
这是一个词法错误,因为非法字符$ 出现在语句的末尾。
3.不匹配的字符串
例子:
C++
#include
using namespace std;
int main() {
/* comment
cout<<"GFG!";
return 0;
}
这是一个词法错误,因为注释“*/”的结尾不存在,但开头存在。
4.拼写错误
C++
#include
using namespace std;
int main() {
int 3num= 1234; /* spelling error as identifier
cannot start with a number*/
return 0;
}
5.用不正确的字符。
C++
#include
using namespace std;
int main() {
int x = 12$34; /*lexical error as '$' doesn't
belong within 0-9 range*/
return 0;
}
其他词汇错误包括
6.删除应该出现的字符。
C++
#include /*missing 'o' character
hence lexical error*/
using namespace std;
int main() {
cout<<"GFG!";
return 0;
}
7.两个字符的换位。
C++
#include
using namespace std;
int mian()
{
/* spelling of main here would be treated as an lexical
error and won't be considered as an identifier,
transposition of character 'i' and 'a'*/
cout << "GFG!";
return 0;
}
错误恢复技术
当出现词法分析器无法继续进行的情况时,因为没有任何标记模式与剩余输入的任何前缀匹配。最简单的恢复策略是“恐慌模式”恢复。我们从剩余的输入中删除连续的字符,直到词法分析器可以在剩下的输入的开头识别出格式良好的标记。
错误恢复操作是:
- 两个相邻字符的转置。
- 在剩余的输入中插入一个缺失的字符。
- 用另一个字符。
- 从剩余的输入中删除一个字符。