17、程序设计语言基础知识
低级语言:机器语言(计算机硬件只能识别0和1的指令序列),汇编语言。
高级语言:功能更强,抽象级别更高,与人们使用的自然语言比较接近。
◆汇编:将汇编语言翻译成目标程序 执行。
◆解释和编译:不同之处在于编译程序生成独立的可执行文件,直接运行,运行时无法控制源程序,效率高。而解释程序不生成可执行文件,可以逐条解释执行,用于调试模式,可以控制源程序,因为还需要控制程序,因此执行速度慢,效率低。
程序设计语言定义三要素:语法、语义、语用。
◆语法是指由程序设计语言的基本符号组成程序中的各个语法成分(包括程序)的组规则 ,其中由基本字符构成的符号(单词)书写规则称为词法规则,由符号构成语法成分的规则称为语法规则。
◆语义是程序设计语言中按语法规则构成的各个语法成分的含义 ,可分为静态语义和动态语义。静态语义指编译时可以确定的语法成分的含义,而运行时刻才能定的是动态语义。确一个程序的执行效果说明了该程序的语义,它取决于构成程序的各个组成部分的语义。
◆语用表示了构成语言的各个记号和使用者的关系,涉及符号的来源、使用和影响。
控制成分:指明**语言允许表述的控制结构。包括顺序结构、选择结构、循环结构。**如下图所示:
函数调用时实参与形参间交换信息的方法有值调用和引用调用两种。
(1)值调用(Call by Value)。若实现函数将实参的值传递给相应的形参,则称为是传值调用。这种方式下形参按不能向实参传递信息。
(2)引用调用(Call by Reference)。当形式参数为引用类型时,形参名实际上是实参的别名,函数中对形参的访问和修改实际上就是针对相应实参所做的访问和改变。
脚本语言就是采用解释方式实现的,比如 Python。即可以直接解释执行。
18、编译程序基本原理、文法、正规式、有限自动机
1、编译程序基本原理
◆编译程序对高级语言源程序进行编译的过程中,要不断收集、记录和使用源程序中一些相关符号的类型和特征等信息,并将其存入符号表中,编译过程如下:
◆词法分析:是编译过程的第一个阶段。这个阶段的任务从左到右一个字符一个字符地读入源程序 ,即对构成源程序的字符流进行扫描然后根据构词规则识别单词 (也称单词符号或符号)。(检查 int 这个单词是不是正确的。)
◆语法分析:是编译过程的一个逻辑阶段。语法分析的任务是在词法分析的基础上将单词序列组合成各类语法短语 ,如"程序","语句","表达式"等等.语法分析程序判断源程序在结构上是否正确.(检查 int a = 5; 这个句子对不对)
◆**语义分析:是编译过程的一个逻辑阶段.语义分析的任务是 对结构上正确的源程序进行上下文有关性质的审查,进行类型审查。**如类型匹配、除法除数不为0等。又分为静态语义错误(在编译阶段能够查找出来)和动态语义错误(只能在运行时发现)。 (上下文语句的含义对不对,比如不同类型的数据加减等)
◆中间代码和目标代码:中间代码是根据语义分析产生的 ,需要经过优化链接,最终生成可执行的目标代码。引入中间代码的目的是进行与机器无关的代码优化处理。常用的中间代码有后缀式(逆波兰式)、三元式(三地址码)、四元式和树等形式 。需要考虑三个问题(一是如何生成较短的目标代码 ;二是如何充分利用计算机中的寄存器,减少目标代码访问存储单元的次数 ;三是如何充分利用计算机指令系统的特点,以提高目标代码的质量)。
前缀表达式:+ab
中缀表达式:a+b
后缀表达式:ab+
主要掌握上述三种表达式即可,其实就是树的三种遍历,一般正常的表达式是中序遍历 ,即中缀表达式,根据其构造出树,再按题目要求求出前缀或后缀式
◆简单求法:后缀表达式是从左到右开始,先把表达式加上括号,再依次把运算符加到本层次的括号后面。
词法输入的是字符流;语法输入的时记号流;
语法分析阶段主要任务是对各条语句的结构进行合法性分析;若程序中的括号不配对,则会在语法分析阶段检查出错误。
2、文法
◆文法G 是一个四元组,可表示为G=(V,T,P,S)
其中:
V:非终结符,不是语言组成部分,不是最终结果,可以推导出其他元素。
T:终结符,是语言的组成部分,是最终结果,不能再推导其他元素。
S:起始符,是语言的开始符号
P:产生式,用终结符代替非终结符的规则,例如a->b。
乔姆斯基(Chomsky)把文法分成4种类型 ,即0型、1型、2型和3型:
◆0型文法也称为短语文法,其功能相当于图灵机,任何0型语言都是递归可枚举的;反之,递归可枚举集也必定是一个0型语言。
◆1型文法也称为上下文有关文法,这种文法意味着对非终结的替换必须考
虑上下文 ,并且一般不允许替换成串。
◆2型文法就是上下文无关文法,非终结符的替换无须考虑上下文。程序设计
语言中的大部分语法都是上下文无关文法 ,当然语义上是相关的,要注意区分语法和语义。
◆3型文法等价于正规式,因此也被称为正规文法或线性文法。
3、正规式
◆语言中具有独立含义的最小语法单位是符号(单词),如标识符、无符号常
数与界限符等。词法分析的任务是把构成源程序的字符串转换成单词符号序列。
◆词法规则可用3型文法(正规文法)或正规表达式描述,它产生的集合是语言
规定的基本字符集∑(字母表)上的字符串的一个子集,称为正规集。
E 能推导出 T + T 或 E +T,只考虑符号,相同的符号只保留一个,所以 E 可以推导出 T 或 E +T.
最后的 E+T*-F 和 E+T * N 的文法可以和答案中的 A、B、C、D匹配。
E 为一个数字,+ 为符号,T 为一个数字,* 为称号,- 为减法,F为一个数字。
所以答案为 B。E+T*-F = E+ -F * T = 2 + -3 * 4
4、有限自动机
不确定的有限自动机:NFA
上图可以这么理解:S0 输入 a 就变成了 S1,S0 输入 b 就变成了 S2
两个环(圆圈)就是结束状态。
确定的有限自动机就是:S0 输入 a 就一定变成 S1。
不确定的有限自动机就是:S0 输入 a 可能还是 S0,也可能输入 a 变成 S1.
NFA 和 DFA 等价转换方法:
ε 表示空串(即不需要任何输入),比如 上图:S0 输入 0 就会变为 S1,但 S1 可以通过空串 ε 不输入也能变为 S2。
上图中的 S2 和 S3 的变换是一个循环,体现了两个点:1、S2通过 1 变为 S3, 2、S3 通过空串可以转为 S2.
所以这个循环里必须包含 1 和 空串。
所以答案是 C。上图中DFA 中必须体现所有 NFA 中的输入:输入0可以变为其他、输入1也可以变为其他、通过1也有循环、起点终点输入为0