1、程序设计语言基本概念
(1)低级语言
- 机器语言指0和1组成的机器指令序列
- 汇编语言指用符号表示指令的语言
(2)高级语言
1.1 表达式
(1)前缀表达式:操作符置于操作数之前,如 - x + 3 4 5 6。
从右向左扫描,遇到数字时,将数字压入堆栈,遇到运算符时,弹出栈顶的两个数,用运算符对它们左相应的计算,并将结果入栈。
(2)中缀表达式:(3+4)x 5 - 6。
(3)后缀表达式:将操作符置于操作数之后,3 4 + 5 x 6 - 。
从左向右扫描,遇到数字时,将数字压入堆栈,遇到运算符时,弹出栈顶的两个数,用运算符对它们左相应的计算,并将结果入栈。
1.2 操作符的优先级
- 指针最优,单目运算优于双目运算。
- 先乘除,后加减
- 先算数运算,后移位运算,最后位运算
- 逻辑运算最后计算
2、程序语言编译过程
编译程序的工作过程分为6个阶段:词法分析、语法分析、语义分析、中间代码生成、代码优化、目标代码生成。
2.1 词法分析
输入源程序,对构成源程序的字符串进行扫描和分解,识别出一个个单词,删掉无用信息,报告分析时的错误。
2.1.1 表现形式
(1)状态转换图:状态有限的有向边,用圆圈表示节点状态,节点之间有向边代表状态转换(可标记字符),表示从前一个状态接受某一个字符之后的状态转移。
- 初始状态用 “o” 表示
- 非终止状态用 “.o” 表示
- 状态之间的跳转用有向边表示
- 终止状态用 “◎” 表示
- 多读进一个字符用 “*” 表示
(2)正规式:
“|” 表示或
“.” 表示连接
“*” 表示“闭包”
(3)确定有限状态自动机(DFA):每次转换后状态是唯一的
一个确定的有限自动机M是一个五元式,M= {S ,∑,δ,s0,F }
- S是一个有限集,它的每个元素称为一个状态
- ∑是一个又穷字母表,每个元素称为一个输入字符
- δ是一个状态转换
- s0是唯一的初始状态
- F是终态集
(4)不确定有限自动机(NFA):
2.2 语法分析阶段
分析单词符号串是否形成符合语法规则的语法单位,如表达式、赋值、循环等。
2.3 语义分析阶段
检查源程序是否存在语义错误,并收集类型信息供后面的代码生成阶段使用,只有语法和语义都正确的源程序才能翻译成正确的目标代码。
语义分析的主要工作是进行各类型分析和检查。赋值语句的左右端类型不匹配。表达式的除数是否为零等。
2.4 中间代码生成阶段
代码的方式与具体的机器无关