程序设计语言
- https://www.yuque.com/saodai/ss8tp9
- B站视频
- 低级语言与高级语言
- 低级语言:机器语言与汇编语言
- 高级语言:面向应用的各类程序设计语言,例如 C JAVA Python ,与自然语言比较接近,提高程序设计效率
- 高级语言或者汇编语言编写的叫源程序,源程序不能直接在计算机上执行
- 解释器(解释程序):
- 翻译源程序时不生成独立的目标程序
- 解释程序和源程序需要参与到程序的运行过程中
- 编译器(编译程序):
- 翻译时,将源程序翻译成独立保存的目标程序
- 机器上运行的时与源程序等价的目标程序
- 编译器与源程序都不参与目标程序的运行过程
- 程序设计语言的数据成分
- 标识符:由数字、字母、下划线组成的标记
- 常量与变量:按照程序运行时数据的值能否改变来区分,常量存储在池中,没有自己的存储单元
- 全局量和局部量:按照数据在程序代码中的作用范围来划分
- 控制结构:顺序结构、循环结构、选择结构
- 程序中的数据具有类型的作用:1. 便于为数据分配存储单元;2. 便于对参与表达式计算的数据对象进行检查;3. 规定数据对象的取值范围以及能够进行的运算
- 表达式的左结合:由左向右执行例如:a && b
- 表达式的右结合:由右向左执行例如:x = y = z
- 传值调用和传址调用
- 函数定义:函数首部(返回值类型 函数名(形参)) + 函数体({})
- 传值调用:将实参的值传给形参,实参可以是常量、变量、表达式,不可以实现实参形参之间双向传递数据的效果
- 传址调用:将实参的地址传给形参,实参必须有地址,实参不能是常量(值)或者表达式,可以实现实参形参之间双向传递数据的效果,即改形参的值,实参的值也同时改掉了
- 编译、解释程序翻译阶段
- 编译方式各个阶段:词法分析 – 语法分析 – 语义分析 – 中间代码生成(可省略) – 代码优化(可省略) – 目标代码生成
- 解释方式各个阶段:词法分析 – 语法分析 – 语义分析
- 编译器与解释器都不可省略且变换顺序的阶段是 词法分析、语法分析、语义分析
- 编译器的中间代码生成和代码优化阶段不是必要的,可省略
- 符号表的作用
- 不断收集、记录和使用源程序中一些符号的类型和特征信息,将其存入符号表中
- 记录源程序中各个字符的必要信息,以辅助语义的正确性检查和代码生成
- 词法分析:
- 将源程序看做一个多行的字符串,从上到下、由左到右进行逐个字符扫描,从中识别出一个个单词符号(如关键字、标识符、运算符等)
- 词法分析分析出的单词常常以 二元组的形式输出即 单词种别和单词的值
- 词法分析的依据是语言的词法规则
- 词法分析输入的是源程序,输出的时记号流
- 词法分析的主要作用:分析构成程序的字符及由字符按照构造规则构成的符号是否符合程序语言的规定
- 语法分析:
- 在词法分析基础上,根据语言的语法规则将单词符号序列分解成各类语法单位,如 ’表达式‘ ’语句‘ ’程序‘ 等
- 如果没有语法错误,语法分析后会构造出一个语法树,否则指出错误,给出诊断信息
- 语法分心输出的是词法分析产生的记号流,输出的时语法树
- 语法分析主要作用:对各条语句的结构进行合法性分析,发现程序中的所有语法错误
- 语义分析:
- 用来检查源程序是否包含静态语义错误,主要用来类型分析和检查
- 语义分析输入的是语法分析阶段产生的语法树
- 语义分析阶段不能发现所有的语义错误,只能分析出静态的语义错误,动态的语义错误要在运行时才能发现
- 动态语义错误常见的有死循环
- 目标代码生成:
- 这一个阶段的任务是把中间代码变成特定机器上的绝对指令代码、可重定位的指令代码或汇编指令代码
- 目标代码生成阶段的工作与具体的机器密切相关
- 寄存器的分配处于目标代码生成阶段
- 中间代码生成
- 根据语义分析的输出生成中间代码,是一种简单的记号系统,可以有多种形式,其特征是与具体的机器无关
- 语义分析和中间代码生成所依据的时语言的语义规则
- 常见的中间代码:后缀式、三地址码、三元式、四元式、树(图)等形式
- 可以将不同的高级语言编译成同一种中间代码
- 中间代码可以跨平台
- 中间代码有利于进行与机器无关的优化处理和提高编译程序的可移植性
- 正规式:
- 正规式是词法分析的工具
- 大致可以类比 JS 中的正则的基本规则,主要记住 * 代表的取值范围时 [0, 无穷大] ,然后将选项带入看看符不符合规则即可
- 有限自动机
- 有限自动机是词法分析的工具,他能正确的识别正规集
- 状态,分为初态和终态,一个状态既可以是初态也可以是终态
- 识别成功的依据是:状态机的路跑的通并且跑完后的终点是终态
- 确定的有限自动机:对每一个字符来说识别字符后的转移状态是唯一的
- 不确定的有限自动机:对每一个字符来说识别字符,后的转移状态是不唯一的
- 区分确定的有限自动机和不确定的有限自动机在于给定一个数字或者字母,它只有一条路可以跑,那就是确定的,反之是不确定的
- 空串
- 上下文无关文法
- 被广泛的用于表示各种程序设计语言的语法规则 – 上下文无关文法
- 做题:由开始符号起始,推到出选项中的终结符号,一个选项一个选项的尝试
- 后缀式、中缀式
- 中缀式就是常见的表达式: 1*2
- 后缀式的符号放在后边:12*
- 中缀式转后缀式:按照 ()、* /、+ - 的优先级,一个表达式一个表达式的转换成后缀式,同等优先级的从右向左转换
- 后缀式转中缀式:使用栈的方式(先进后出、后进先出)
- 语法树中缀遍历 -> 生成中缀式:左根右
- 语法树后缀遍历 -> 生成后缀式:左右根
- 后缀式又称逆波兰式
- 其他
- 反编译通常不能将可执行文件还原成高级语言源代码,只能转换成功能等价的汇编程序
- 动态语言指的是程序运行时可以改变其结构
- 指针变量:变量是内存单元的抽象,用于在程序中保持数据,当变量存储的时内存单元地址时,称为指针变量
- 链表中的节点控件需要程序员申请和释放,数据控件应采用堆存储分配策略
- 可视化程序设计特点:
- 基于面向对象思想,引入控件概念和事件驱动
- 研发过程遵循,先界面绘制,再基于事件编写程序代码
- 设计人员可以不用补编写或者少量编写代码
- 编译过程中为变量分配存储单元所用的是逻辑地址,程序运行时再映射为物理地址
- C 中全局变量的存储空间在静态数据区
- 语法指导翻译是一种静态语义分析方法
- 语法分析方法:
- 递归下降分析法和预测分析法都是属于自上而下的分析法
- 移进-归约分析法属于自下而上的分析法