# chap 1
## 1. 编译程序概念
把高级语言源程序翻译成等价的低级语言目标程序的翻译程序
## 编译原理主要内容
见2
## 编译程序重要性体现
屏蔽机器细节,使得程序设计独立于机器.
## 2.!典型编译程序划分,各阶段基本任务
1. 词法分析:从左到右一个字符一个字符地读入源程序,对构成源程序的字符进行扫描和分解,识别出单词;
2. 语法分析:将单词序列分解成各类语法短语;
3. 语义分析:审查源程序有无语义错误,为代码生成阶段收集类型信息;
4. 中间代码生成:将源程序变成一种易于翻译成目标代码的内部表示形式;
5. 代码优化:是对前阶段生成的中间代码进行变换或改造,使生成的目标代码更为高效;
6. 目标代码生成:把中间代码变换成特定机器上的目标代码
## 常用的语言翻译程序有哪些:汇编程序,解释程序,编译程序.
解释与编译的区别:
1. 工作模式:这是**根本区别**,编译把源程序翻译成目标代码,而解释直接得到计算结果,不生成目标代码。
2. 存储区内容:编译方式翻译和执行分开,解释方式翻译和执行同时并允许修改源程序,因此二者存储组织不同。
3. 效率:解释慢于编译,很多语言两种方式都有。
## 4.编译过程再组织:前端:和源语言有关系,包括哪些东西(作业做过了),后端:
- 前端:词法分析,语法分析,语义分析,中间代码生成.(仅与源语言相关)
- 后端:代码优化,目标代码生成.(目标语言,运行环境有关)
目的:在多源语言,多目标语言开发中,可灵活搭配组合,消除重复开发工作量,提高编译系统开发效率
组织以后有什么好处:提高编译程序效率,方便移植.有些是单遍编译,不是区别于程序设计而是取决于语言本身特点.
## 遍/趟的划分依据,单遍与多遍
编译程序趟划分的主要参考因素是源语言和目标机的特征.
####作业1.4. 贯穿编译过程的两个工作是什么?各自的主要任务是什么?
遍(PASS): 对输入文件(源程序或其等价的中间语言程序)从头到尾扫视,完成预定处理的过程。
一个多遍的编译程序较之一遍的编译程序可能少占内存,逻辑结构可能清晰些,但效率相对可能差点
(主要是作业里面)
------
# chap2
## 1.文法的直观概念和形式概念.
### 直观概念
- 有无穷句子的语言,无法列出全部句子,可以给出一些规则,用这些规则来说明(或者定义)句子的组成结构,这些规则成为判别句子结构合法与否的依据,可以看成是一种元语言,用来描述语言,仅仅涉及语言句子的结构描述,这样的语言描述称为文法。(例)
- 有了规则,可以用它们去推导或产生句子(例)
- 文法作为工具,严格地定义了句子的结构,也能够用适当条数的规则把语言的全部句子描述出来,是以有穷集合刻划无穷集合的工具。
文法就是用来判定任何句子结构是否正确/推导句子的规则(有限的手段解决无穷的问题). 我们掌握形式概念(黑板写下来了):四元组:$$G(S)=(V_T,V_N,S,P)$$
## 符号串和符号串集合的概念和运算
给你两个符号串集合,有可能求某种运算的结果,包含哪些串并, 写出LM的连接:{st|s属于L且t属于M}
- 连接(乘积):$$=LM=\{st|s \in L \ and \ t \in M\}$$
## 2.直接推导和推导的概念-最左,最右推导,规范推导,规范规约
#### 推导
$$
令G=(V_T,V_N,S,P), 若A \rightarrow γ∈P,且α,β∈(V_T∪V_N)^*,
若有符号v,w 满足:v= αAβ,w= αγβ,则称w是v的直接推导
$$
推导:星号或者加号.(两者区别).直接推导序列.\alpha_0 ->(+) \alpha_n
最左推导,最右推导,规范推导(就是**最右推导**)概念. **给你个文法,给你个串,让你构造最右推导过程.**
规约 概念,最左规约(规范规约),最右规约.
## 3.句型,句子,语言 概念(作业做过,用形式化方式来描述)
- 设文法 $$G(S)=(V_T,V_N,S,P)$$。如果$$S\Rightarrow α, α∈V^*$$,则称α是一个句型。
- 仅含终结符号的句型是一个句子。
- 语言 L(G)是由文法G产生的所有句子所组成的集合:$$=且L(G)=\{ α|S\Rightarrow α且α∈V_T^* \}$$
## 4.文法类型
根据文法产生式 分0-3型,上下文有关/无关/线性. 每个文法类型对产生式要求是什么.
*PPT30*
比如 2型文法对文法产生式在形式上满足什么形式.-左部是非中介符号,右部是文法符号串. A是V_n,B属于(V_T并V_n)*. 1,3型也是.
## 4.上下文无关文法 与 语法树
- 上下文无关文法有足够能力描述现今程序设计语言的语法结构.
### 语法树-定义
设$$(,,,)G=(V_T,V_N,S,P)$$,G的一棵语法树满足如下条件:
1. 每一个结点有一个标记,此标记是$$V_T∪V_N∪\{ε\}$$中的符号。
2. 根的标记是S。
3. 如果一个结点是内部结点,且有标记A,那么A必在V_N中。
4. 如果编号为n的结点有标记A,结点$$n_1,n_2,…,n_k$$是结点n的从左到右的儿子,并分别有标记$$X_1,X_2,…,X_k$$,则$$A \rightarrow X_1X_2…X_k$$必是P中的产生式
5. 如果结点n有标记ε,那么结点n是叶子,且是它父亲唯一的儿子。
#### 语法树的说明
- 语法树表示了在推导过程中使用了哪个产生式和施用在哪个非终结符上,但并没有表明使用产生式的顺序
(什么一棵树是语法树,(它说了)五个条件:每个节点都有一个标记,文法开始符号(必须一一记住)) 内部节点是A
## 5.文法二义性和语言二义性(会证明)-(<u>Q1</u>)
(判断题)如果一个文法没有二义性,一个句型的语法树是唯一的. 反过来,一个文法有二义性,语法树不唯一.
#### 二义性文法(概念)
如果一个文法存在某个句子对应两棵不同的语法树,或者说,若一个文法中存在某个句子,它有两个不同的最左(最右)推导,则说这个文法是二义的.
#### 考试-证明:二义性文法:找出这个文法的一个句型,找出两棵以上语法树,或者找到两个最左推导.(PPT38)
例3.7表达式文法G[E],其产生式如下:
E®E+E|E*E| (E)|a
对于句子a+a*a, 有如下两个最左推导:
E->E+E -> a+E -> a+E*E ->a+a * E ->a+a *a
E -> E *E ->E+E *E ->a+E *E ->a+a *E ->a+a *a
结论:该文法是二义的
- 文法的二义性和语言的二义性是两个不同概念。因为有可能文法G和A不同,但L(G)=L(A),G是二义的,A是无二义的。
## 6.句型分析的概念,常用方法(他仔细说出答案了可能性比较大)
- 自上而下分析法,是从文法开始符号出发,反复使用产生式,逐步进行推导,直至推导出输入符号串。-假定要被代换的最左非终结符号是A,且有n条产生式:A a1|a2|…|an,那么如何确定用哪个产生式右部去替代A?
- 自下而上分析法,是从输入符号串开始,反复使用产生式,逐步进行归约,直至归约到文法的开始符号。-因为分析工作的每一步都是从当前串中选择一个子串,将它归约到某个非终结符,暂且把这个子串称为可归约串,问题是,每一步如何确定这个可归约串?
(说到底是语法分析:自下而上,自上而下:基本思想,解决关键问题是什么)那个子串先规约?
## 7.短语,直接短语及句柄(会求)-(**Q1**)-8'
#### 定义
- 短语:一棵子树的所有叶子自左至右排列起来形成一个相对于子树根的短语。
- 直接短语:仅有父子两代的一棵子树,它的所有叶子自左至右排列起来所形成的符号串。
- 句柄:一个句型的分析树中最左那棵只有父子两代的子树的所有叶子的自左至右排列。
令G[S]是一个文法,如果有S(+)->αAδ 且A
(*)->
β,则称β是一个关于非终结符号A的,句型αβδ的短语。
其次如果有 S
(*)->
αAδ 且 A->β,则称β是句型αβδ相对于规则A->β直接短语。
给你文法之后,给你符号串,让你说明是句型,然后指出短语,句柄,直接短语(作业做过,8分)
- PPT47/作业
## 7.实用文法的限制
#### 有关文法的实用限制(概念)
在实用中,限制文法中不得含有有害规则和多余规则.
- 有害规则是指形为 U->U (自身到自身)的产生式。会引起文法二义性 (会使推导陷入死循环,机器不知道使用多少次再出来) 。
- 多余规则是指文法中那些任何句子推导都用不到的规则,包括两种规则,即不可到达的和不可终止的。
- 不可达到的:不在文法的任何规则右部出现的非终结符。
- 不可终止的:文法中那些不能从其推出终结符号串的非终结符。
- (判断题) 一个二义性文法最后语言一定是二义性的吗? - 不一定,有可能存在等价文法,e.g.表达式文法.
什么是二义性语言?概念
- 如果产生上下文无关语言的每一个文法都是二义的,则说此语言是先天二义的。
------
# Chap 3
## 1.词法分析任务,单词识别的依据,词法和语法分析的接口方式
- 词法任务:从左至右逐个字符地对源程序进行扫描,产生一个个单词序列
- 单词识别依据:程序设计语言的词法描述规则
- 词法分析程序与语法分析程序的接口方式
- 词法分析工作可以组织成独立的一遍,把字符流的源程序变为单词序列,输出在一个中间文件上,这个文件作为语法分析程序的输入而继续编译过程。
- 将词法分析程序设计成一个子程序,当语法分析程序需要一个单词时,则调用该子程序,从源程序中读入一些字符,直到识别出一个单词,或说直到下一个单词的第一个字符为止,这种设计方案是把词法分析和语法分析程序放在同一遍,省掉了中间文件。
有哪两种:语法分析的输出和语法分析的输入的接口.
#### (maybe简答题)词法本质上是语法,但为何要单独把词法拿出来?(给个简答题~书上有)
1)为编译程序结构的简洁、清晰和有条理
2)改进编译程序的效率
3)增强编译程序的可移植性
## 2.词法分析程序的输出
二元组,每个单词是二元组,单词分哪五大类.
####单词的种类
1. 关键字:if、then、else、while、do等
2. 标识符:表示变量名、过程名等
3. 常数:无符号数、布尔常数、字符串常数等
4. 运算符:+、-、*、/ 等
5. 分界符:逗号、分号、括号等
单词描述形式化工具3种:正规文法,正规式,有限自动机.(重点:建立三种的等价关系).
这章大题目:几个转换.
概念:正规式,正规集,正规集构造,正规集运算(连接,或,闭包)-就是正规式构造过程.
考试:r|s的正规集.
## 6.考试:正规文法和正规式的互相转换(PPT18-20)
分解和合并.:r->G. 引入S,作为文法开始符号.写成正规式S->r,看满足不满足正轨文法要求,不满足要改写.A->xy 重写为:A->xB ,B->y. A->x*y重写为 A->xBA->y, B->xB, B->y.A->x|y 改写 A->x, A->y.
正规文法要求所有产生式在形式上满足条件:左部都是非终结符号,右部要不是终结符+非终结符号或者是终结符. 合并方法 A->aB A->a (A属于 V_N,a属于V_T) ; A->xB ,B->y 合并为 A->xy. A->xA,A->y.A=x*y. ;A->x,A->y 变为A=x|y.
#### 正规文法到正规表达式
- A->xy 的正规式产生式,重写成: A->xB B->y
- A->x*y 的正规式产生式,重写为: A->xB A->y B->xB B->y
- A->x|y 的正规式产生式,重写为 A->x A->y
#### 正规文法转换成正规式
```
文法产生式 正规式
```
规则1 A->xB B->y A=xy
规则2 A->xA|y A=x*y
规则3 A->x A->y A=x|y
## 7.FA,DFA,NFA概念,表示方式
两者区别:都是五元组(他写下来了)(sigma,K,f,S,Z) - (输入符号字母表,有穷状态集合,转换函数/映像,初态,终态) ( , , , 初态,终态集合). f(k,a)=k_j(提现后继唯一) NFA会是一个状态子集.(初态集合)
- DFA的确定性表现在转换函数f: K× Σ->K是一个单值函数,即对任何状态k ∈K,和输入符号a ∈Σ,f(k,a)唯一地确定了下一个状态。
- NFA : f是一个从$$K\timesΣ$$到<u>K的子集</u>的映射;$$S \subset K$$,是一非空初态集。
#### DFA,NFA 三种表示方式(他说了)
1. 转换函数
2. 状态转换图
3. 转移矩阵
状态转移矩阵, 对图和矩阵的构造,在图里面怎样表示终态和初态. 说不定给你DFA函数表示,让你构造图或者矩阵.-见PPT23-例3.3-作业第二题...(擦听起来肯定会考的样子)
## 8.DFA,NFA解识别的字符串的定义\判别
对Σ*中的任何字符串t,若存在一条从某一初态结到某一终态结的道路,且这条路上所有弧的标记字依序连接成的串等于t,则称t可为NFA M所接受,若M的某些初态结同时又是终态结,或存在一条从某个初态结到某个终态结的ε道路,则空字可为M所识别(接受)
DFA和NFA都是识别单词的装置,识别什么单词? T∈sigma* 就看有没有从初态出发,’能到终态的一条通路. 要知道概念.
NFA确定化为DFA:子集构造法C(T_0,) 绝对会考.
- 多余状态是指,从该自动机的开始状态出发,任何输入串都不能到达的那个状态。
- 在有穷自动机中,两个状态s和t等价的条件是:
- 一致性条件:即s和t必须同为终态或同为非终态
- 蔓延性条件:即对所有输入符号,s和t必须转换到等价的状态里。
最小化工作:消除多余,合并等价(状态等价的两个条件:一致性条件,蔓延新条件. 让你证明S和T是否是终态或者非终态. 蔓延性:状态S,T接收a,到达P/Q,如果P,Q满足等价,那么S,T等价. 而且必须是所有接收符号到达)
等价状态划分给你例子会做.他都当我们面写了一遍,感觉肯定要考.
## 9.NFA->DFA,DFA->MFA(状态等价定义与判别) -<u>Q2</u>
1. 设字母表={0,1},给出上的正规式r=(0|10)*,请完成以下任务:
a) 构造NFA N,使得L(N)=L(r);
b) 将NFA N确定化,得到最简DFA M,使得L(M)=L(N);
c) 将DFA M最小化,得到MFA M`,使得L(M`)=L(M)。
(1)可以按照自己的理解构造NFA
#### 划分状态集合成等价类的分割法(感觉肯定要考,他讲了作业第二题的等价类划分)
1.先将M的状态分成两个子集:一个终态集,一个非终态集,得到一个初始划分P0;
2.再观察划分P0中的每一个子集,把每一个子集中的在读入输入符号后转向不等价状态的状态进一步划分,得到划分P1;
3.重复2中的工作,直到所得的划分中任意一个子集中的状态都是不可划分的为止,即任意一个子集中的所有状态都是等价的为止
## 10.FA->r , G->FA , G->r -Q2
作业题目
G1 S->0A|iB
A->1s|1
(2)应该从文法出发,构造,
------
# Chap4
####(判断题-作业)
- 一个不含左递归文法提取左公共因子后所得一定是LL(1) -X
- 自顶向下,必须LL(1) -Y
- 每个文法都可改写为LL(1)- X
- 一个语言文法唯一- X
## 1.自顶向下分析基本思想,确定的关键问题
,为解决关键问题给了三个集合的求法(要会求). 给你个文法,要会求.
## 2.First,Follow,Select集概念和求法
⑴设X∈(VN∪VT),FIRST(X)的构造
①若X∈VT,则FIRST(X)={X};
②若X∈VN,其产生式为X→a…,a∈VT,则a∈FIRST(X);若它有产生式为X→ε,则ε∈FIRST(X);
③如果它有产生式X→Y…,Y∈VN 则FIRST(Y)-{ε}∈FIRST(X);如果它有产生式X→Y1Y2…YK(其中,Y1,Y2,…Yi-1都是非终结符,且Y1,Y2,…,Yi-1
* =>ε),则FIRST(Yi)-{ε}∈ FIRST(X);
如果Y1Y2…YK ε,则ε∈ FIRST(X)。
⑵ 设α∈(VN∪VT)*,α=X1X2…Xn,FIRST(α)的构造
①若α=ε,显然FIRST(α)={ε};
②若α≠ε,则FIRST(X1)-{ε}∈FIRST(α);
③若X1X2…Xi-1 * =>ε ,则FIRST(Xi) -{ε} ∈ FIRST(α); 若X1X2…Xn * =>ε ,则ε∈ FIRST(α)。
⑶设U∈VN,FOLLOW(U)的构造
①若U是文法的识别符号,则$ ∈ FOLLOW(U);
②若有产生式A→xUy,则 FIRST(y)-{ε} ∈ FOLLOW(U);
③若有产生式A→xU,或 A→xUy,y * =>ε , 则FOLLOW(A) ∈ FOLLOW(U)。
⑷集合SELECT(U→α)的构造
① 当α不可空时SELECT(U→α)=FIRST(α)
②当α可空时SELECT(U→α)=FIRST(α)∪FOLLOW(U)
## 3.LL(1)文法定义及判别.LL(k)的含义
## 4.非LL(1)文法的等价变换
## 5.LL(1)分析的实现(a.递归下降LL(1)分析; b.表驱动LL(1)分析)
**表驱动LL(1)分析-<u>Q4</u>**
如果是LL1,要会构造预测分析表(作业也做了)
要求掌握表驱动的LL(1)分析.(递归看一下就行).重点构造分析表. 用表格把分析画出来.
------
# Chap 5,6
## 1.自底向上思想及关键问题,常用自底向上分析法
## 2.LR分析概述(对栈进行的操作)
1. **LR0 (只让你掌握这个,最核心,做题目只涉及:直接给你个文法->DFA->构造LR0分析表->串分析过程)-Q5**
作业.给定拓展后的文法G如下:
0)S’->E
1)E->aA
2)E->bB
3)A->cA
4)A->d
5)B->cB
6)B->d
a)构造此文法的LR(0)项目集规范族,并给出识别活前缀的DFA;
b)构造其LR(0)分析表,并根据分析表说明该文法是否为LR(0)文法;
c)给出accd串的LR(0)分析过程。
2. SLR(1) (只要知道用什么办法解决:冲突:往前看一个字符处理
LR(0)
移进-归约冲突 )
3. LR(1) (解决 SLR(1) 无效归约(归约产生式使用错误)
4. LALR1( LR(1)同心集分裂可能导致的状态增多,存储容量增大,使应用受到限制 )
## 3.项目,可归前缀,活前缀.项目集的核 .项目类型冲突类型.
什么是项目,项目集,冲突类型,项目集的核,
- 可归前缀:规范句型的前部分串
- 项目4种类型:移进,待约,归约,接收
2种冲突:
1. 移进-归约 冲突$$(A-?\alpha \dot \alpha \beta ,B \rightarrow \gamma \dot)$$
2. 归约-归约 冲突
构造DFA从前面,往前移动的时候经过一个符号,后继项目集的核是唯一项目吗?关键看前面有多少个 点之后是B,如果是多个,后面不是一个(小题目)
------
# Chap 7,8,10
条件语句的翻译(作业做了),条件语句给了以后翻译成四元式,正确回填地址, 划分基本块.
# 1.语义描述工具(属性文法)
一个属性文法包含一个上下文无关文法和一系列语义规则,这些语义规则附在文法的每个产生式上.
形式上讲,一个属性文法是一个三元组A=(G,V,F):一个上下文无关文法G,一个属性的有穷集V,一个关于属性的断言或条件谓词的有穷集F。每个属性与文法的某个非终结符或终结符相联。每个断言与文法的某产生式相联。如果对G的某一输入串,A中的所有断言对该输入串的语法树结点的属性全为真,则该串是A语言的句子。编译程序的静态语义审查工作就是验证关于所编译的程序的断言是否全部为真。
属性分为两类:继承属性和综合属性。在分析树中,一个结点的综合属性值是从其子结点的属性值计算出来的;而一个结点的继承属性值是由该结点兄弟结点和父结点的属性值计算出来的。
注意:1)非终结符既可有综合属性也可有继承属性,但文法开始符号没有继承属性;2)终结符只有综合属性,它们由词法分析程序提供。
## 语法指导翻译的概念
语法制导翻译是指在语法分析过程中,完成附加在所使用的产生式上的语义规则描述的动作,从而实现语义处理。
## 程序正确,语言方面的要求?
满足2个规则:结构上(语法规则),含义正确(语义规则).
## 2.L-属性文法,S-属性文法的概念. 结合LR分析的实现(书P168,感觉应该不会考)
- L-属性文法通俗地讲,是指文法符号可有综合属性,也可有继承属性,但某产生式右部符号的继承属性的计算只取决于该产生式该符号左边符号的属性(产生式左部符号只能是继承属性)
- S-属性文法是L-属性文法的特例,是指只含有综合属性的属性文法。
S属性结合LR 实现语法指导翻译,如何作扩展:栈扩展,增加语义值栈,功能扩展(语法+语义分析,书上有表达式求值的例子. 求值这些东西要会做)
## 3.中间代码常用形式
逆波兰记号、三元式、四元式和树形表示
## 4.条件语句翻译. 四元式序列-Q3 . 基本块划分
1.给出下面句:
if a<b and b<c then x:=x+1 else x:=x-1
1) 翻译为等价的四元式序列,并正确填写所有转向地址,规定第一个四元式从地址(1)开始存放;,t1,_,x
基本块的入口语句,严格地说就是:
A)程序的第一个语句;
B)条件转移语句或无条件转移语句的转移目标语句;
C)紧跟在条件转移语句后面的语句。
- (j<,a,b,(3)) 入口语句(程序的第一个语句)
- Jmp,_,_,(8) 入口语句(紧跟在条件转移语句后面的语句)
- J<,b,c,(5) 入口语句(条件转移语句或无条件转移语句的转移目标语句)
- Jmp,_,_,(8) 入口语句(紧跟在条件转移语句后面的语句)
- +,x,1,t1 入口语句(条件转移语句或无条件转移语句的转移目标语句)
- :=,t1,_,x
- Jmp,_,_,(10)
- _,x,1,t2, 入口语句(条件转移语句或无条件转移语句的转移目标语句)
- :=,t2, ,x
- ... 入口语句(条件转移语句或无条件转移语句的转移目标语句)
## 5.优化概念,优化时刻,级别,常用优化技术简介.
优化,实质是对代码进行等价变换,使得变换后的代码运行结果与变换前代码运行结果相同,而运行速度加快或占用存储空间少,或两者都有。
优化时间: 中间代码生成之后和(或)目标代码生成之后进行.
依据优化所涉及的程序范围,可分为局部优化、循环优化和全局优化三个不同级别。局部优化是在只有一个入口、一个出口的基本程序块上进行的优化;循环优化是对循环中的代码进行的优化;全局优化是在整个程序范围内进行的优化。
常用优化技术
1)删除多余运算(删除公共子表达式)
2)代码外提
3)强度削弱
4)变换循环控制条件
5)合并已知量与复写传播
6)删除无用赋值
–小题目,应用题
------
# Chap 9
## 1.存储分配策略. 对程序和语言的要求
知道概念:存储分配条件:静态,栈式动态,堆式动态,大概怎么做的.
每种对程序有什么要求,语言有什么要求.:考试填空题?如果一种语言的所有程序运行时的空间都可采用静态分配策略,则要求这种程序设计语言必须不允许递归过程、不允许可变数组且不允许用户自由申请和释放空间。
## 2.栈式分配实现
栈:什么是活动记录,给你程序结构,给你调用序列, 让你画出 空间?? 画出静态动态涟.
- 活动记录:一段连续的存储区,用以存放过程的一次执行所需要的信息
- 控制链:也称作老SP(又称动态链),即调用该过程的那个过程的最新活动记录的起点。-谁调用它的
- 存取链(又称静态链),指向包含该过程的直接外层过程的最新活动记录的起始位置。-在哪定义的
## 3.参数传递
常用方法:传值,传地址.为什么有不同的结合方式,什么原因?:对实参的不同解释:解释为左值还是右值还是文本,对应:传地址,传名字,传
形实参对应的方法分别有值调用、地址(引用)调用、名字调用和得结果等,即传值、传地址、传名和得结果等。之所以存在不同的方法,源于一个表达式的表示是如何给予不同的解释的。比如,在a[j]:=a[k]中,表达式a[k]表示一个值,而a[j]表示一个存储位置,用于存放a[k]的值。通常术语左值指表达式代表的存储,右值指存储位置中含有的值。“左”和“右”来自赋值语句的“左”端和“右”端。参数传递方法的不同主要基于实参是表达一个右值、左值还是实参本身的文本(字)。
------
分量不轻.
填空15’’;判断7’.简答题20’.大题48'.
小题目在1,2,7,8,9章.大题目在23456.
---
##补充:不一定考