编译器工作过程
词法分析阶段处理的错误
非法字符、单词拼写错误等。
语法分析阶段处理的错误
标点符号错误、表达式中缺少操作数、括号不匹配等有关语言结构上的错误。
静态语义分析阶段(即语义分析阶段)处理的错误
运算符与运算对象类型不合法等错误。本题选择语义错误。
目标代码生成(执行阶段)处理的错误
动态语义错误,包括陷入死循环、变量取零时做除数、引用数组元素下标越界等错误等。
🏗️ 编译器阶段 & 能发现的错误
1. 词法分析(Lexical Analysis)
👉 主要检查:非法字符、拼写错误
🏗️ 编译器阶段 & 能发现的错误
1. 词法分析(Lexical Analysis)
👉 主要检查:非法字符、拼写错误
2. 语法分析(Syntax Analysis)
👉 主要检查:语法结构错误
int x = ; // ❌ 错误:缺少表达式
if (x > 0 // ❌ 错误:缺少右括号
3. 语义分析(Semantic Analysis)
👉 主要检查:类型不匹配、作用域错误
int x = "abc"; // ❌ 类型错误:不能把字符串赋值给 int
y = 10; // ❌ 作用域错误:变量 y 未声明
4. 中间代码生成 / 优化
👉 检查不到“新错误”,但可能提前优化:
int x = 1 + 2; // ✅ 编译期直接折叠成 int x = 3;
5. 字节码生成(.class)
👉 生成阶段基本不报错,除非 前面未解决的问题残留。