程序设计语言分类
面向机器的语言
由0、1组成的机器指令序列或汇编语言(如:move ax,bx),可读性差,难以修改和维护。
面向应用程序的语言
如,Java、C、C++、Python、Delphi、PASCAL等,更接近人类语言,提高程序设计效率。
程序设计语言分类
生成目标代码过程
编译程序
词法分析
输入源程序,对构成源程序的字符串进行扫描和分解,识别出一个个的单词,删掉无用的信息,报告分析时的错误。
语法分析阶段
语法分析的任务是在词法分析的基础上,根据语言的语法规则将单词符号序列分解成各类语法单位。通过语法分析确定整个输入串是否构成一个语法上正确的程序。
语义分析阶段
主要检查源程序是否存在语义错误,并收集类型信息供后面的代码生成阶段使用。语义分析分为静态分析和动态分析两个部分。静态语义分析使用语法制导翻译。
点击查看代码
public class Example {
public static void main(String[] args) {
int x = 5;
int y = "Hello"; // 静态类型错误
System.out.println(“Sum: ” + (x / 0)); // 动态类型错误
}
}
中间代码
不依赖具体计算机,表现形式如下。
- 后缀式(逆波兰式)
- 树型表示
- 三元式:X =( a + b)( c + d )
①(+ , a , b)②(+ , c , d )③( , ① , ②)④( =,③,x) - 四元式: X =(a*b)+ c/d
①( *, a , b , T1)②( / , c , d , T2)③( +, T1 , T2 , T3 )④( =
,T1,—,X)
表达式出错处理
静态错误(编译时出现)
语法错误,如:单词拼写错误、标点符号错误、表达式缺操作数、
括号不匹配等。
静态语义错误,如:运算符与运算对象类型不合法。
动态错误(运行时出现)
如:变量取0做除数。
如:引用数组下标越界