目录
程序设计语言
1、常见程序设计语
-
低级语言:0和1组成的指令序列,面向机器的语言,机器执行效率高
-
机器语言:能直接被机器执行,每条指令0、1组成
-
编译语言:符号化的机器语言
-
-
高级语言:程序人员编程效率高,机器执行效率低,可移植性强
汇编语言
类型 | 特点 |
---|---|
指令语句 | 机器指令语句,汇编后产生能被CPU识别并执行的机器代码,如ADD、SUB 算术运算指令、逻辑运算指令、转移指令、传送指令 |
伪指令 | 对汇编过程进行控制的指令,但不是可执行指令,汇编后不产生机器代码 包括定义语句、开始语句、结束语句 |
宏指令 | 多次重复使用的程序段 |
2、常见高级语言
高级程序设计语言一般不依赖于机器硬件
语言 | 特点 |
---|---|
FORTRAN | 第一个科学计算的高级语言 |
HTML | 静态网页,文本标记语言 |
PHP | 动态网页 |
Java | 半解释型语言 |
LISP | 函数式程序设计语言,大量递归,人工智能领域 |
Prolog | 常用于数据库 |
C | 编译型语言 |
C++ | 开发操作系统的底层 预处理-编译-链接 |
Python | 解释型语言,脚本语言 不需要进行变量/对象类型声明的弱类型语言 |
脚本语言:为了缩短传统的编写-编译-链接-运行(edit-compile-link-run)过程而创建的计算机编程语言
-
脚本语言主要采用解释方式实现
-
函数和编程语言很像, 也涉及变量
-
常用来描述格式化和链接
-
效率没有编译型语言高
语言的翻译方式:
-
编译:分析源程序,翻译成等价的目标程序,源程序和编译程序都不参与目标程序在机器上运行,以后运行只需要执行保存的机器码,翻译同时做语法和语义检查,运行效率高
-
解释:源程序一条条读入,一边翻译一边运行,过程中不产生目标程序,源程序和解释程序参与运行,程序控制权在解释程序,运行效率低
3、文法和语言表示
分类 | 自动机 | 特点 |
---|---|---|
0型 | 图灵机 | 短语文法,无限制文法。递归可枚举 |
1型 | 限行界限自动机 | 上下文有关文法 非终结符的替换需要考虑上下文 |
2型 | 非确定自动机 | 上下文无关文法 大多数通用程序设计语言 |
3型 | 有限自动机 | 正规文法 |
-
词法分析:对高级语言程序编译时,有限自动机,把字符流转换成记号流
-
语法分析:判断分析语句的结构和形式,生成符号表,把记号流(短语、句子)构造一颗语法树,检查如:括号不配对
-
静态语义分析:方法是语法制导翻译,语义分析,分析如:除数不能为0
-
中间代码生成:有利于进行与机器无关的优化,常用后缀式、三地址码、树、图来表示
-
目标代码生成:
-
一是如何生成较短的目标代码;
-
二是如何充分利用计算机中的寄存器,减少目标代码访问存储单元的次数;
-
三是如何充分利用计算机指令系统的特点,以提高目标代码的质量。
-
-
递归下降分析方法是一种自上而下的语法分析
-
归约分析是自底向上方法中的典型。先分析词,即词法分析。再分析词的组合,即语法分析
-
在编译过程中:词法分析;语法分析;语义分析;目标代码生成是必须的,而代码优化和中间代码生成是可以不需要的。
-
逆波兰式(中序遍历),元素在栈中操作
3、程序执行和参数传递
传参引用:修改形参实际上改变了实参的值
程序执行错误
-
动态错误:动态语义错误,发生在程序运行,执行代码段的过程
-
如死循环
-
-
静态错误
-
语法错误
-
静态语义错误:可以被编译器发现
-
面向对象过程中,名词短语来识别对象,动词短语来实现操作
例题
P:E→E+T|E-T|T
T→T*F|F
F→-F|id
-
先进行可能推出的运算符号判断
-
在推导的过程中,会发现 ※只能通过T推导,此时必定经过了E+T或E-T,也就是说“+”或“-”必定在※前