目录
第七章.程序设计语言与语言程序处理程序基础
重点:正规式(必考)、表达式(高频)、传值与传址(高频)
第一节.编译过程
编译过程分为解释型和编译型两类,编译方式生成逻辑上与源程序等价的目标程序,解释方式不生成
图注:词法错误:从左到右逐个扫描源程序中的字符,识别其中如关键字(或保留字)、标识符、常数、运算符以及分隔符(标点符号和括号)等
语法错误:主要是分析句子结构的错误,如非法字符,关键字或标识符拼写错误,语法结构错误,if endif不匹配,缺分号等
语义错误:死循环,零循环,其他逻辑错误等
词法分析的输出是“记号流”;也就是语法分析的输入,而语法分析的输出是“语法树”
词法分析的任务是把源程序的字符串转换为单词符号序列
注:
(1)符号表在编译程序工作的过程中需要不断收集、记录和使用源程序中一些语法符号的类型和特征等相关信息。这些信息一般以表格形式存储于系统之中
(2)在对源程序进行编译的过程中,常生成与源程序等价的中间代码,以利于进行优化,常见的中间代码包括:后缀式、三地址码和树等
(3)中间代码的生成与具体的机器没有任何关系,但目标代码的生成与具体的机器有着密切的关系
(4)编译过程中,中间代码生成和代码优化并不是每一个编译编译器都必须的
第二节.文法定义
文法的定义
一个形式文法是一个有序四元组G=(V,T,S,P),其中:
1) V:非终结符。不是语言组成部分,不是最终结果,可理解为占位符
2) T: 终结符。是语言的组成部分,是最终结果。
3) S:起始符。是语言的开始符号
4) P:产生式。用终结符替代非终结符的规则
文法的类型
分为0型、1型、2型、3型
零型又称短语文法
1型又称上下文有关文法
2型又称上下文无关文法
3型又称正规文法
语法推导树
可以用来进行语法规则的推导,通过推导树,我们可以了解到一种语法能够表达的串以及能够构造的句型是什么样子
例如:
注:程序设计语言的大多数语法现象可用其中的上下文无关文法来描述
第三节.有限自动机与正规式
有限自动机
图注:(S,0)=B表示S通过路径0可以得到B,而S即为初态,f即为终态
考察形式:设定一个值:如10或01或001,问是否能够构建这样一条通路?,实际上该题即问终态与初态相连,求出其路径,再看其路径值是否与与题意相符
例题
图注:直接把选项中的路径代入图中运行,从初态开始运行,若选项提供的路径使其到达了终态,那么这就是正确的选项,该题中即为C选项
正规式
正规式是描述程序语言单词的表达式
例题
图注:“ | ”代表“或”;“ * ”代表循环多次,如在或运算中,可以任意选择左式和右式的循环次数,循环次数可以从零到无穷大,该题的答案为A和C
第四节.表达式
表达式按照树的遍历分为了前缀表达式、中缀表达式、后缀表达式
考察形式:
图注:首先将表达式(括号无需构造)构造为一颗中序表达树,然后再进行下一步运算,该题答案即为D
第五节.函数调用——传值与传址
函数调用的方式分为两种:传值调用和传址调用
概念及特点
1.传值调用:形参取的是实参的值,形参的改变不会导致调用点所传的实参的值发生改变
,调用时实际上是把调用的值复制给了一个变量
2.传址调用(也称引用调用):形参取的是实参的地址,即相当于实参存储单元的地址引用,因此其值的改变同时就改变了实参的值,调用时实际上是将实参的地址的指针赋值给了变量,因此它的改变会引起实参的改变
第六节.程序设计语言的种类、特点及适用范围
C++
1.特点:既支持面向对象程序设计的概念,也支持原来在c语言中的过程式程序设计,因此有人称其为混合式的面向对象语言,属于面向对象的编译型语言
2.适用场景:系统程序的设计,包括嵌入式、桌面式和服务器操作系统的设计,大型软件系统的核心模块的设计,以及各类桌面软件的设计
Java
1.特点:java是一个纯面向对象的程序设计语言,属于半解释型语言
2.适用场景:互联网信息系统的开发
Lisp
1.特点:属于函数式程序设计语言
2.适用场景:用于符号演算、微分和积分演算,游戏推演、以及人工智能的其他领域
Prolog
1.特点:以特殊的逻辑推理形式回答用户的查询
2.应用:多用于数据库和专家系统
Python
1.特点:是一种面向对象、解释型计算机程序设计语言
2.适用场景:快速生成程序的原型,然后对其中有特别要求的部分,用更适合的语言改写,比如3D游戏中的图形渲染模块
C#
1.特点:是一种面向对象的、运行于.NEX Framwork之上的高级程序设计语言
2.适用场景:由微软公司发布的,主要用于构件.NET Windows网络框架
汇编语言
汇编语言是面向机器的程序设计语言,使用汇编语言编写的程序,机器不能直接识别,要由一种程序将汇编语言反映成机器语言,这种起翻译作用的程序叫做汇编程序,汇编程序输入的是用汇编语言书写的源程序,输出的是用机器语言表示的目标程序,汇编语言的指令语句必须具有操作码字段,可以没有操作数字段