软件设计师:程序设计语言基础知识
基本概念
- 低级语言:0、1组成的机器指令序列和汇编语言
- 高级语言:程序设计语言,如Java(编译型),C++(编译型),Python(解释型)等
- 解释器:翻译时不生成独立的目标程序,解释程序和源程序都参与程序运行过程
- 编译器:翻译时独立生成目标程序,源程序和编译程序不再参与目标程序的运行过程 如:javac->class
程序设计语言的控制成分
顺序结构、选择结构、循环结构
源程序中数据必须具有类型,便于为数据合理分配存储单元,便于对参与表达式计算的数据对象进行检查,便于规定数据对象的取值范围及能够进行的运算。
传值调用与传地址调用
- 传值调用:实参的值传递给形参
- 传地址调用:实参的地址传递给形参,实参不能是常量、表达式(无地址),可以实现形参和实参数据的双向传递
例题:
答案 BD A D B D D B A C
编译程序基本原理
工作阶段
中间代码生成、代码优化可省略
源程序 -> 词法分析 -> 记号流 -> 语法分析 -> 分析树(语法树) -> 语义分析
符号表管理
词法分析
对源程序从前到后逐个字符扫描,识别一个个“单词”符号,如关键字、标识符、常数、运算符、分隔符等。
词法错误:非法字符,关键字/标识符拼写错误
语法分析
对各条语句的结构进行合法性分析
语法错误:缺括号/分号、if/elif不匹配、变量未声明
语义分析
对数据类型进行分析和检查,不能发现动态语义错误,运行时才能检测出来
语义错误:死循环(动态)、零除数(动态)、数据类型不匹配
中间代码生成
目标代码生成
正规式
词法分析的工具
正规式 | 正规集 |
---|---|
Ab | 字符串ab构成的集合 |
a|b | 字符串a、b构成的集合 |
a* | 由0个或多个a构成的字符串集合 |
(a|b)* | 所有字符a和b构成的串的集合 |
a(a|b)* | 以a为首字符的a、b字符串的集合 |
(a|b)*abb | 以abb结尾的a、b字符串的集合 |
*:代表0次或多次
| : 代表左边或者右边
有限自动机
词法分析的工具
ε : 无须识别直接通过
上下文无关文法
语法分析的工具
大写字母是非终结符,小写字母是终结符号,每条表达式都称为产生式
中缀后缀式
中序遍历 -> 中缀式 左根右
后序遍历 -> 后缀式 左右根
后缀式又称为逆波兰式