程序语言基础知识
程序语言概述
低级语言与高级语言
- 低级语言:面向机器的语言,机器语言、汇编语言;可读性差。程序设计效率低
- 高级语言:面向各类应用的程序语言,与人类语言相近,便于理解,提高了程序设计的效率。
汇编、解释、编译
高级程序语言必须进行翻译才能为计算机硬件所理解,常用的翻译方式有汇编、解释和编译。
- 用汇编语言编写的:需要汇编程序翻译成目标程序,然后执行目标程序。
- 用高级语言编写的:需要解释程序或编译程序进行翻译,然后再运行。
编绎程序和解释程序
1. 编译程序(编译器)
将源程序翻译成目标程序(目标代码),然后再在计算机上运行目标程序。
一般分为两个阶段:
- 编译阶段:把源程序翻译成目标程序。
- 运行阶段:执行目标程序
2.解释程序(解释器)
要么直接解释执行源程序,要么将源程序翻译成某种中间代码后再加以执行。它按源程序中语句的执行顺序,逐条翻译并立即执行相关功能。
不生成目标代码
对比项 | 编译方式 | 解释方式 |
---|---|---|
目标程序生成 | 生成独立的目标程序,源程序和编译程序不参与后续执行 | 不生成独立的目标程序,逐条解释并执行,源程序和解释程序参与运行 |
执行效率 | 更高(编译时进行优化,直接执行机器码) | 较低(需逐行解释,运行时动态翻译) |
灵活性 | 较低(修改代码需重新编译) | 更高(支持动态修改,即时调试) |
可移植性 | 较差(依赖特定平台的目标代码) | 更好(通过虚拟机或解释器实现跨平台) |
控制权归属 | 目标程序直接由操作系统/硬件执行,控制权在用户程序 | 解释器掌控运行流程,控制权在解释程序 |
典型语言 | C、C++、Go(编译型) | Python、JavaScript、Ruby(解释型) |
适用场景 | 对性能要求高的系统级开发、嵌入式等 | 快速开发、脚本任务、跨平台应用 |
即
- 解释方式可移植性高、灵活;源程序和解释程序参与运行
- 编译方式效率更高;源程序和编译程序不参与后续执行
程序语言的数据成分
- 常量和变量
- 全局变量和局部变量
- 数据类型
- 基本类型:整型、字符型、实型(科学计数法、浮点)和布尔类型
- 特殊类型:空类型
- 用户定义类型:枚举类型
- 构造类型:数组、结构、联合
- 指针类型:type *
- 抽象数据类型:类类型(类似Java的类)
程序语言的控制成分
- 顺序结构
- 选择结构
- 循环结构
编译过程
高级语言相关
- 词法分析:检查单词、符号是否有问题。int main = 0 (变量名与关键词冲突)
- 语法分析:检查短句或句子是否语法正确。a = 1;b = 1;=a-b;(语法不存在或不合法)
- 语义分析:检查每个短句内容合不合法;例如 a = 1;b = “2”;c=a+b (类型错误)
- 中间代码生成:根据语义分析的输出,生成中间代码
- 常用的中间代码有:后缀式(逆波兰式)、四元式(三地址码)常用、树形表示
低级语言相关
- 代码优化
- 由于编译器将源程序翻译成中间代码的工作是机械的、按固定模式进行的,因此,生成的中间代码往往在时间和空间方面的效率较差。当需要生成高效的目标代码时,就必须进行优化。
- 可以在中间代码生成阶段进行,也可以在目标代码生成阶段进行。
- 目标代码生成
- 目标代码生成是编译器工作的最后一个阶段
- 把中间代码变换成特定机器上的绝对指令代码、可重定位的指令代码和汇编指令代
- 符号表管理:记录源程序中各种符号的必要信息,以辅助语义的正确性检查和代码生成,在编译过程中需要对符号表进行快速有效地查找、插入、修改和删除等操作。
- 出错处理
四元式
只做了解
X:Y+Z*60
- ①(inttoreal,60,_,t1)# 将整数60转换为实型,结果存入临时变量t1
- ②(*,id3,t1,t2) # 将变量id3与t1相乘,结果存入t2
- ③(+,id2,t2,t3)# 将变量id2与t2相加,结果存入t3
- ④(:=,t3,_,id1) # 将t3的值赋给变量id1
中缀、前缀、后缀表达式
- 中缀表达式:即我们通常所使用的表达式。如(a+b)*c-d
- 前缀表达式(波兰式):将运算符写在前面,操作数写在后面,且不使用括号。-*+abcd
- 后缀表达式(逆波兰式):将运算符写在后面,操作数写在前面,且不使用括号。ab+c*d-
传值调用和引用调用
- 传值调用:传值,单向
- 引用调用:传地址,双向