编译原理大作业

合集下载

大学计算机编译原理练习题及答案

大学计算机编译原理练习题及答案

大学计算机编译原理练习题及答案编译原理是计算机科学中的重要基础课程,其目的是让学生了解编译器的工作原理、构造与实现方法。

为了帮助同学们更好地掌握编译原理,以下是一些练习题及其答案,供大家参考学习。

1. 什么是编译器?它的主要功能是什么?编译器是一种将源代码(高级语言)转化为目标代码(机器语言)的软件工具。

它的主要功能包括词法分析、语法分析、语义分析、中间代码生成、代码优化和目标代码生成等。

2. 简要解释编译器的工作原理。

编译器的工作原理可以分为以下几个步骤:a. 词法分析:将源代码分解成各个词素(tokens)的序列。

b. 语法分析:根据源代码的语法规则,构建语法树。

c. 语义分析:对语法树进行语义检查,确保程序的合法性。

d. 中间代码生成:将语法树转化为中间代码,方便后续的优化。

e. 代码优化:对中间代码进行各种优化,提高程序的性能和效率。

f. 目标代码生成:将优化后的中间代码转化为目标代码(机器语言)。

3. 解释以下概念:词法单元、词法分析器、上下文无关文法、语法分析器。

- 词法单元:是最小的语法单元,是词法分析器生成的结果。

可以是标识符、关键字、常量、运算符等。

- 词法分析器:负责将源代码分解为词法单元序列的工具,将输入的字符流转化为记号流。

- 上下文无关文法:是一种形式语言,用于描述程序中的语法结构,不依赖于上下文环境。

常用于语法分析器进行代码语法分析和生成语法树。

- 语法分析器:根据给定的上下文无关文法,对词法分析器生成的记号流进行语法检查和语法树的构建。

4. 下面是一个简化的算术表达式的上下文无关文法描述,请写出其对应的语法树。

```<expression> -> <term> | <expression> + <term> | <expression> - <term> <term> -> <factor> | <term> * <factor> | <term> / <factor><factor> -> <number> | (<expression>)<number> -> [0-9]+```例如,对于表达式 "3 + 5 * (2 - 1)",对应的语法树为:```expression/ \expression +/ \ / \term + term| \ / |factor | factor| | |3 term factor/ \ |factor 5 2|term|factor|1```5. 简要解释语义分析的主要任务。

申优论文 北航本科编译原理大作业

申优论文 北航本科编译原理大作业

How to Design a C++ Object-orientedCompiler罗杨37230118 AbstractThis system is a C++ object-oriented compiler using a extended C0 grammar as the input language. It can generate the assembly code according to the Intel 386 instructions set. You can use the Masm32v10 software to assemble and link the source code to get your 32-bit applications.摘要本系统实现了一个以扩充C0文法为输入语言的采用C++及面向对象思想设计的编译器,可以生成符合386指令集规范的汇编代码,用Masm32v10汇编可生成32位应用程序。

本系统考虑到不同版本的Masm的功能和使用方法的差异,以及用户手工键入汇编,连接命令多有不便,本系统自带了汇编器Ml.exe和连接器link.exe。

正文由于是目标是Windows平台下32位应用程序,有些文法中的功能如输入和输出无法再像16位汇编时调用DOS中断解决,因此对于这些问题我使用Microsoft提供的类似高级语言的设计方法——调用DLL函数来解决。

其实32位汇编语言在函数调用方面已与高级语言相差无异,可以调用系统API,C RunTime甚至是用户DLL中的函数。

本系统是一遍扫描编译程序,采用面向对象的方法进行构建,各个主要部分均抽象成类。

主要的类有:分析器类Parser,符号表管理器类SymbolTableMgr,四元式管理器类QuadrupleMgr,代码生成器类CodeGenerator,错误处理器类ErrorHandler,全局数据流分析器类GDAOptimizer,全局寄存器分配器类GRDOptimizer,局部公共子表达式删除器类CSDOptimizer,以上属于具有明显功能划分和界限区别的―高级类‖,他们的对象在全局main函数中分别构造和删除;系统中还有其它一些既具有数据结构意义又具有功能操作的―中级类‖,它们一般是―高级类‖或―中级类‖的成员,如基本块集合管理器BBSetMgr,由全局数据流分析器类GDAOptimizer构建,并为其它多个优化器类共享;还有一些相对意义上的―低级类‖,它们具有复杂的数据结构,却几乎没有功能操作,通常由―中级类‖或―高级类‖得数组成员进行管理,如项类Item,四元式类Quadruple,其中项类Item代表符号表中的每一项,四元式类Quadruple顾名思义代表一个四元式,并且四元式的三个操作数是指向项Item的指针。

《编译原理》作业参考答案

《编译原理》作业参考答案

《编译原理》作业参考答案一、填空1.图二图一。

2.文法是无ε产生式,且任意两个终结符之间至多有一种优先关系的算符文法。

3.最右推导最右推导。

4.对于循环中的有些代码,如果它产生的结果在循环中是不变的,就把它提到循环外来。

把程序中执行时间较长的运算替换为执行时间较短的运算。

5.对于文法中的每个非终结符A的各个产生式的候选首符集两两不相交;对文法中的每个非终结符A,若它存在某个候选首符集包含ε,则FIRST(A)∩FOLLOW(A)= ø6.控制。

7.语义分析和中间代码产生8.自上而下自下而上自上而下9.自下而上表达式10.自下而上11.源程序单词符号12. DFA初态唯一,NFA初态不唯一;DFA弧标记为Σ上的元素,NFA弧标记为Σ*上的元素;DFA的函数为单射,NFA函数不是单射13.词法,词法分析器,子程序,语法14.ε,a,ab,ab15.终结符号,非终结符号,产生式16.L(G)={a n | n≥1}17.1型,2型,3型18.二义的19.快20.终态,输入字21.单词符号,终结符22.归约23.必须24.直接25.终结符,更快26.E→E+∙T, E→E∙+T, E→∙E+T, E→E+T∙27.归约—归约28.类型检查,一致性检查29.词法分析、词法30.语法分析程序、语法31。

终结符号、产生式、开始符号、非终结符32.2、2、333.不需要避开34.符合、不符合35.推导36.包括37.Ass38.一定没有、一定没有、至多只有一个39.SLR(1)40.移进——归约41.a.控制流检查、b.一致性检查、c.相关名字检查二、判断下面语法是否正确1 ×2 ×3 √4 ×5 √6 ×三、简答题1.词法分析的任务是对输入的源程序进行单词及其属性的识别,为下一步的语法分析进行铺垫;有两种方法可以实现词法分析器:一,手工编写词法分析程序。

二,由词法分析器自动生成程序生成。

编译原理作业

编译原理作业

编译原理作业
1.设字母表A={a},符号串x=aaa,写出下列符号串及其长度:x0,xx,x5以及A+
2. 令∑={a,b,c},又令x=abc,y=b,z=aab,写出如下符号串及它们的长度:xy,xyz,(xy)3
3. 设有文法G[S]:S::=SS*|SS+|a,写出符号串aa+a*规范推导,并构造语法树。

4. 已知文法G[Z]:Z::=U0∣V1 、U∷=Z1∣1 、V::=Z0∣0 ,请写出全部由此文法描述的只含有四个符号的句子。

5. 已知文法G[S]:S::=AB A::=aA︱εB::=bBc︱bc , 写出该文法描述的语言。

6.已知文法E::=T∣E+T∣E-T 、T::=F∣T*F∣T/F 、F::=(E)∣i,写出该文法的开始符号、终结符号集合V T、非终结符号集合V N。

7. 对6题的文法,写出句型T+T*F+i的短语、简单短语以及句柄。

8. 设有文法G[S]:S::=S*S|S+S|(S)|a,该文法是二义性文法吗?给出分析过程。

9. 写一文法,使其语言是奇正整数集合。

10.给出语言{a n b m|n,m≥1}的文法。

编译原理大作业pl语言编译程序

编译原理大作业pl语言编译程序

编译原理大作业pl语言编译程序编译原理大作业:PL语言编译程序编译原理是计算机科学中的重要课程,它研究的是如何将高级语言转化为机器语言的过程。

在这门课程的大作业中,我们需要设计一个PL语言的编译程序,将PL语言的源代码转化为可执行的机器代码。

PL语言是一种高级编程语言,它具有丰富的语法和功能,可以用来编写各种应用程序。

编写一个PL语言的编译程序需要经历以下几个步骤:首先,我们需要设计PL语言的语法规则。

语法规则定义了PL语言中各种语句和表达式的结构和组织方式。

通过定义语法规则,我们可以确定PL语言源代码的合法性,并将其转化为抽象语法树。

接下来,我们需要设计词法分析器。

词法分析器负责将源代码分解为一个个的词法单元,如关键字、标识符、运算符等。

通过词法分析器,我们可以将源代码转化为一个个的词法单元序列。

然后,我们需要设计语法分析器。

语法分析器负责根据语法规则,将词法单元序列转化为抽象语法树。

语法分析器使用一种称为“自顶向下”的分析方法,通过递归下降的方式,从源代码的起始符号开始,逐步推导出各个语法单元。

在语法分析的过程中,我们还需要设计语义分析器。

语义分析器负责对抽象语法树进行语义检查和语义处理。

它会检查变量的声明和使用是否合法,进行类型检查,生成中间代码等。

最后,我们需要设计代码生成器。

代码生成器负责将抽象语法树转化为目标机器的机器代码。

代码生成器会根据目标机器的指令集和寄存器分配策略,生成高效的机器代码。

在实现PL语言编译程序的过程中,我们还需要进行测试和调试。

我们可以编写一些PL语言的示例程序,用来测试编译程序的正确性和性能。

通过不断地测试和调试,我们可以逐步完善编译程序,使其能够正确地将PL语言源代码转化为可执行的机器代码。

编译原理大作业是一项非常有挑战性的任务,需要我们对编译原理的各个方面有深入的理解和掌握。

通过完成这个大作业,我们可以更好地理解编译原理的原理和方法,提高我们的编程能力和解决问题的能力。

编译原理作业题整理

编译原理作业题整理

编译原理作业题整理第一章习题一1.解释性名词:源语言、目标语言、翻译、编译和翻译。

答:源语言:由译者翻译并用于编写源程序的语言。

目标语言:被翻译器翻译之后得到的语言,用于书写目标程序的语言。

翻译器:能够完成从一种语言到另一种语言的变换的软件。

编译器:一种特殊的翻译器,要求目标语言比源语言低级。

解释器:解释器是不同于编译器的语言处理器。

解释器与编译器不同样通过翻译来生成目标程序,而是直接执行源程序所指定的运算。

第二章词汇分析:假设∑={0,1},求1.写出包括010的所有字符串的标准公式2.写出不含010的所有字符串的标准形式答:1.(0|1)*(010)(0|1)*2.(10*1)*|((11|00)*|0111*0)*.2.(0 | 1)*010(0 | 1)*解:(1)re的分解树如下:r17r16r11r9r7r5r60r81r100(r15r14*)r131r120 | r4(r3)r21*r10|(2)根据分解树和基本的汤普森构造算法,逐步构造等价的NFA。

过程如下: start0r1:23r2:start415203?r3、r4:start1?6?415?r5:start0203?6?1?7?415?开始7'r6:08r7:start0203?6?1?708?415?开始8'r8:19r9:start0203?6?1?70819?415?start0r10:9’10r11:start0203?6?1?70819010?415?startr12:01213startr13:114150 r14、r15:start111213?16?11415?0r16:start10’1213?16?11?17?11415?r17:?从203开始?6.7081912? 1010? 11? 415?? 14?(3)由子集法构造等价的dfa过程如下:ABCDEFGHI0BBBEFFHF1CDCCGGIGI?\闭包({0})?{0,1,2,4,7}? A.a0??_closure({3,8})?{1,2,3,4,6,7,8}?ba1??_closure({5})?{1,2,4,5,6,7}?cb0u闭包({3,8})?{1,2,3,4,6,7,8}? bb1闭包({5,9})?{1,2,4,5,6,7,9}? Dc0??_closure({3,8})?bc1??_closure({5})?cd0u闭包({3,8,10})闭包({3,8})闭包({10})?B{10,11,12,14,17}? {1,2,3,4,6,7,8,10d1??_closure({5})?ce0u闭包({3,8,13})闭包({3,8})闭包({13})?B{11,12,13,14,16,17}? {1,2,3,4,6,7,8e1??_closure({5,9,15})??_closure({5,9})??_closure({15})?d?{11,12,14,15,16,17}? {1,2,4,5,6,7,9f0\u闭包({3,8,13})?Ff1??_closure({5,9,15})?{1,2,4,5,6,7,9,11,12,14,15,16,17}?gg0闭包({3,8,10,13})闭包({3,8,10})闭包({13})?e闭包({13})?E{11,12,13,14,16,17}? {1,2,3,4,6,7,8,10,11,12,13,14,16,17}? hg1u闭包({5,15})?c闭包({15})?C{11,12,14,15,16,17}?{1,2,4,5,6,7,11,12,14,15,16,17}? 我。

编译原理期末试题(8套含答案 大题集).

编译原理期末试题(8套含答案 大题集).

《编译原理》期末试题(五)一、单项选择题(共10小题,每小题2分,共20分)1.语言是A.句子的集合B.产生式的集合C.符号串的集合D.句型的集合2.编译程序前三个阶段完成的工作是A.词法分析、语法分析和代码优化B.代码生成、代码优化和词法分析C.词法分析、语法分析、语义分析和中间代码生成D.词法分析、语法分析和代码优化3.一个句型中称为句柄的是该句型的最左A.非终结符号B.短语C.句子D.直接短语4.下推自动机识别的语言是A.0型语言B.1型语言C.2型语言D.3型语言5.扫描器所完成的任务是从字符串形式的源程序中识别出一个个具有独立含义的最小语法单位即A.字符B.单词C.句子D.句型6.对应Chomsky四种文法的四种语言之间的关系是A.L0⊂L1⊂L2⊂L3 B.L3⊂L2⊂L1⊂L0C.L3=L2⊂L1⊂L0D.L0⊂L1⊂L2=L37.词法分析的任务是A.识别单词B.分析句子的含义C.识别句子D.生成目标代码8.常用的中间代码形式不含A.三元式B.四元式C.逆波兰式D.语法树9.代码优化的目的是A.节省时间B.节省空间C.节省时间和空间D.把编译程序进行等价交换10.代码生成阶段的主要任务是A.把高级语言翻译成汇编语言B.把高级语言翻译成机器语言C.把中间代码变换成依赖具体机器的目标代码D.把汇编语言翻译成机器语言二、填空题(本大题共5小题,每小题2分,共10分)1.编译程序首先要识别出源程序中每个(单词),然后再分析每个(句子)并翻译其意义。

2.编译器常用的语法分析方法有(自底向上)和(自顶向下)两种。

3.通常把编译过程分为分析前端与综合后端两大阶段。

词法、语法和语义分析是对源程序的(分析),中间代码生成、代码优化与目标代码的生成则是对源程序的(综合)。

4.程序设计语言的发展带来了日渐多变的运行时存储管理方案,主要分为两大类,即(静态存储分配)方案和(动态存储分配)方案。

5.对编译程序而言,输入数据是(源程序),输出结果是(目标程序)。

编译原理作业

编译原理作业

习题11.1解释名词:源语言、目标语言、翻译器、编译器和解释器。

答:源语言是指待翻译的语言,和目标语言相对。

目标语言是指被翻译的语言,与源语言相对。

能够完成从一种语言到另一种语言的变换的软件称为翻译器,这两种语言分别叫做该翻译器的源语言和目标语言。

编译器是一种特殊的翻译器,它进行语言变换的特点是目标语言比源语言低级。

解释器是不同于编译器的另一类语言处理器。

它不像编译器那样通过翻译来生成目标程序,而是直接执行源程序所指定的运算。

它的执行方式是一边翻译一边执行,因此其执行效率一般偏低。

1.2典型的编译器可以划分成几个主要的逻辑阶段?各阶段的主要功能是什么?答:典型的编译器可以划分成七个主要的逻辑阶段,分别是词法分析器、语法分析器、语义分析器、中间代码生成器、独立于机器的代码优化器、代码生成器、依赖于机器的代码优化器。

各阶段的主要功能:(1)词法分析器:词法分析阅读构成源程序的字符流,按编程语言的词法规则把它们组成词法记号流。

(2)语法分析器:按编程语言的语法规则检查词法分析输出的记号流是否符合这些规则,并依据这些规则所体现出的该语言的各种语言构造的层次性,用各记号的第一元建成一种树形的中间表示,这个中间表示用抽象语法的方式描绘了该记号流的语法情况。

(3)语义分析器:使用语法树和符号表中的信息,依据语言定义来检查源程序的语义一致性,以保证程序各部分能有意义地结合在一起。

它还收集类型信息,把它们保存在符号表或语法树中。

(4)中间代码生成器:为源程序产生更低级的显示中间表示,可以认为这种中间表示是一种抽象机的程序。

(5)独立于机器的代码优化器:试图改进中间代码,以便产生较好的目标代码。

通常,较好是指执行较快,但也可能是其他目标,如目标代码较短或目标代码执行时能耗较低。

(6)代码生成器:取源程序的一种中间表示作为输入并把它映射到一种目标语言。

如果目标语言是机器代码,则需要为源程序所用的变量选择寄存器或内存单元,然后把中间指令序列翻译为完成同样任务的机器指令序列。

编译原理 大作业

编译原理 大作业

编译原理大作业As an important component of the computer science curriculum, the study of compilers is essential for students to gain a deep understanding of programming languages and how they are executed by the computer. 编译原理是计算机科学课程中一个重要的组成部分,对于学生来说,掌握编译原理对于深入了解编程语言以及计算机如何执行它们是至关重要的。

The main objective of the study of compilation is to understand the process of translating high-level programming languages into machine code, which can be directly executed by the computer's hardware. 学习编译的主要目标是了解将高级编程语言转换为机器语言的过程,这样机器语言就可以直接由计算机的硬件执行。

Another important aspect of compilers is the optimization process, which aims to improve the efficiency and performance of the generated machine code. 另一个重要的编译原理方面是优化过程,其目标是提高生成的机器码的效率和性能。

Moreover, the study of compilers also involves learning about parsing, semantic analysis, intermediate code generation, and code generation, all of which are crucial in the process of translating a program from a high-level language to machine code. 此外,编译原理的研究还涉及学习解析、语义分析、中间代码生成和代码生成,所有这些都对将程序从高级语言转换为机器码的过程至关重要。

编译原理作业参考答案

编译原理作业参考答案

编译原理作业参考答案作业一一、是非题1.(×)2.(×)3.(×)4.(×)5.(×)6.(√)7. (√)8.(√)9.(√) 10.(×) 11.(√) 12.(√) 13.(√)二、填空题1.(词法分析),(语法分析),(中间代码生成),(代码优化),(目标代码生成)2.(单词符号),(语法单位)。

3.(源程序),(单词符号)4.(语法),(语义)5. (词法分析)、(语法分析)、(语义分析),(中间代码产生),(代码优化),(目标代码生成)6.(解释方式)7. (语法规则)8. (上下文无关文法)9. (自上而下分析法),(自下而上分析法)10. (规范推导)11. (最左归约)三、名词解释题:1.词法分析器-----执行词法分析的程序。

2. 自编译方式------先对语言的核心部分构造一个小小的编译程序,再以它为工具构造一个能够编译更多语言成分的较大编译程序。

如此扩展下去,就像滚雪球一样,越滚越大,最后形成人们所期待的整个编译程序。

3. 遍-----所谓“遍”就是对源程序或中间结果长头到尾扫描一次,并作有关的加工处理,生成新的中间结果或目标程序。

4. 编译程序-----一种翻译程序: 能够把某一种语言程序(称为源语言程序)转换成另一种语言(成为目标程序),而后着与前者在逻辑上是等价的。

5. 超前搜索-----所谓超前搜索是在词法分析过程中,有时为了确定词性,需超前扫描若干个字符。

6. 短语------令G是一个文法,S划文法的开始符号,假定αβδ是文法G的一个句型,如果有SαAδ且Aβ,则称β是句型αβδ相对非终结符A的短语。

7. 规范句型------由规范推导所得到的句型。

8. 句柄------一个句型的最左直接短语。

9. -规范推导-----最右推导又称为规范推导。

四、简答题:1. 正规式a ( a | b )*。

2.(a*b|b*a)={a,b,ab,ba,aab,bba……}3.状态转换图是一张有限方向图。

编译原理 大作业汇总

编译原理 大作业汇总

塔里木大学信息工程学院课程论文基于 c 语言的简单词法分析器的设计课程名称编译原理所属学院信息工程学院班级计算机16-6学生姓名李鹏宇学号 5011212611二零一四年十二月目录一、引言 (1)二、基于c 语言词法分析器的设计 (1)2.1词法分析器的设计原则 (1)2.2词法分析器的设计对象 (2)2.3词法分析器的任务及功能 (2)2.3.1词法分析器的任务 (2)2.3.2 词法分析程序的功能: (2)2.4各种单词符号对应的种别码: (2)三、基于c 语言词法分析器的实现 (3)3.1词法分析程序的算法思想: (3)3.2主程序示意图: (3)3.3函数定义说明 (4)3.4程序设计实现及功能说明 (4)3.4.1关键字的定义 (4)3.4.2符合的关键字的查找 (4)四、词法分析程序的C语言程序源代码 (5)五、结果分析: (10)六、结束语 (11)参考文献 (7)摘要:词法分析器构造技术起源于编译器前端的词法分析需求,是编译的第一阶段。

其主要任务是读入输入字符,产生记号序列,并提交给语法分析使用。

词法分析器技术也经常应用于其他领域,如查询语言与信息检索系统。

在每个应用中,最基本的问题是如何设计与说明一种特殊的程序,它能够完成由字符串的模式触发的动作。

本文通过实际构造FineC语言(作者设计的一个C语言的轻量子集)的词法分析器对词法分析器的构造原理做了基于实践的探讨。

关键字:词法分析器,双缓冲区,符号表,正则表达式,状态转换图一、引言词法分析顾名思义,就是分词。

它是用程序设计语言编制出的源程序作为输入,以单词的序列作为输出。

分词的过程可以通过编制程序让其自动完成,我们通常把这个分词程序称为词法分析器。

词法分析器分析的源程序可以是现有的各类程序设计语言源程序也可以是人为给定的模型语言的源程序。

它一般有五个阶段:词法分析,语法分析,语义分析和中间代码产生及优化,目标的代码生成。

完成计算机翻译过程的重要阶段,它为以后的语义分析、语法分析打好基础, 做好准备,以便高效的、高质量的生成目标语言的程序。

编译原理作业参考答案.

编译原理作业参考答案.

第1章引言1、解释下列各词源语言:编写源程序的语言(基本符号,关键字),各种程序设计语言都可以作为源语言。

源程序: 用接近自然语言(数学语言)的源语言(基本符号,关键字)编写的程序,它是翻译程序处理的对象。

目标程序: 目标程序是源程序经过翻译程序加工最后得到的程序。

目标程序(结果程序)一般可由计算机直接执行。

低级语言:机器语言和汇编语言。

高级语言:是人们根据描述实际问题的需要而设计的一个记号系统。

如同自然语言(接近数学语言和工程语言)一样,语言的基本单位是语句,由符号组和一组用来组织它们成为有确定意义的组合规则。

翻译程序: 能够把某一种语言程序(源语言程序)改变成另一种语言程序(目标语言程序),后者与前者在逻辑上是等价的。

其中包括:编译程序,解释程序,汇编程序。

编译程序: 把输入的源程序翻译成等价的目标程序(汇编语言或机器语言),然后再执行目标程序(先编译后执行),执行翻译工作的程序称为编译程序。

解释程序: 以该语言写的源程序作为输入,但不产生目标程序。

按源程序中语句动态顺序逐句的边解释边执行的过程,完成翻译工作的程序称为解释程序。

2、什么叫“遍”?指对源程序或源程序的中间形式(如单词,中间代码)从头到尾扫描一次,并作相应的加工处理,称为一遍。

3、简述编译程序的基本过程的任务。

编译程序的工作是指从输入源程序开始到输出目标程序为止的整个过程,整个过程可以划分5个阶段。

词法分析:输入源程序,进行词法分析,输出单词符号。

语法分析:在词法分析的基础上,根据语言的语法规则把单词符号串分解成各类语法单位,并判断输入串是否构成语法正确的“程序”。

中间代码生成:按照语义规则把语法分析器归约(或推导)出的语法单位翻译成一定形式的中间代码。

优化:对中间代码进行优化处理。

目标代码生成:把中间代码翻译成目标语言程序。

4、编译程序与解释程序的区别?编译程序生成目标程序后,再执行目标程序;然而解释程序不生成目标程序,边解释边执行。

编译原理大作业

编译原理大作业

课程论文递归下降分析器的实现课程名称所属学院班级学生姓名学号二零一四年十二月目录1、递归下降分析器的设计思想 (1)1.1自顶向下的语法分析方法 (1)1.2递归下降分析法 (1)1.3递归下降分器意义: (1)1.4递归下降分析器思想: (1)1.5递归下降分析器的作用: (2)1.6递归下降分析器的形成过程: (2)2、递归向下分析器实现 (2)2.2待分析的简单词法 (2)2.3要求构造的递归下降程序 (3)2.4主函数分析 (3)3、输入串运行分析: (4)4、关键代码分析及运行过程: (5)4.1关键代码分析 (5)4.2文法函数调用过程 (6)5、程序测试: (7)5.1、当程序运行时出现如下输入程序界面 (7)5.2、当程序运行时出现如下输入程序界面 (7)总结 (8)参考文献: (9)附录: (10)递归下降分析器的实现摘要:本文分析了递归下降分析器的实现以及具体的功能,所谓递归下降分析法,就是对文法中的每个非终结符编写一个函数(子程序),每个函数(子程序)的功能是识别由该非终结符所标示的语法成分。

由于描述语言的文法通常是递归定义的,因此相应的这组函数(子程序)一定是相互递归的方式进行调用,所以将此种分析方法称为递归下降分析法。

关键词:递归下降分析器消除递归非终结符1、递归下降分析器的设计思想1.1自顶向下的语法分析方法自顶向下分析法也称面向目标的分析方法,也就是从文法的开始符号出发企图推导出与输入的单词串完全相匹配的句子,若输入串是给定文法的句子,则必能推出,反之必然出错。

自顶向下的确定分析方法需对文法有一定的限制,但由于实现方法简答、直观,便于手工构造或自动生成语法分析器,因而仍是目前常用的方法之一。

而自顶向下的不确定分析方法是带回溯的分析方法,这种方法实际上是一种穷举的试探方法,因此效率低,代价高,因而极少使用。

1.2递归下降分析法递归下降分析法是确定的自上而下分析法,它要求文法是LL(1)文法。

2022春西安电子科技大学《编译原理与技术》大作业答案

2022春西安电子科技大学《编译原理与技术》大作业答案

学习中心/函授站_姓名学号西安电子科技大学网络与继续教育学院2022 学年上学期《编译原理与技术》期末考试试题(综合大作业)考试说明:1、大作业试题公布时间:2022 年4 月22 日;2、考试必须独立完成,如发现抄袭、雷同均按零分计;3、答案须用《西安电子科技大学网络与继续教育学院2022 春期末考试答题纸》(个人专属答题纸)手写完成,要求字迹工整、卷面干净、整齐;4、拍照要求完整、清晰,一张图片对应一张个人专属答题纸(A4 纸),正确上传。

一、单选题(每小题 2 分,共 10 分)1、在以阶段划分的编译器中,阶段的主要作用是识别源程序中的句子结构。

A、词法分析B、语法分析C、语义分析D、代码优化2、在自下而上语法分析中,LL(1)中的第二个L 表示。

A、最右归约B、最左推导C、最左归约D、最右推导3、在自下而上语法分析中,句柄是指右句型中的。

A、非终结符B、短语C、直接短语D、最左直接短语4、给定文法A→bA|aa,是该文法的句子。

A、aabbB、ababC、bbaaD、baba5、在布尔表达式短路计算的翻译方案中,当按照产生式E→E1 and E2 进行归约时,可以确定。

A、E1 的真出口B、E1 的假出口C、E2 的真出口D、E2 的假出口答案:1-5 BBDCB二、填空(每空 2 分,共 20 分)1、动态存储分配包括分配和分配两种。

2、正规式(a|b)*abb 表示的正规集为。

3、上下文无关文法G 的四元组(N,T,P,S)中,S 表示,P 表示。

4、在文法E→E+ T | T T→F* T | F F→id中,运算+ 的优先级比* ,运算 + 是结合的,运算 * 是结合的。

5、函数调用执行时,引用调用是指,值调用是指。

答案:1.栈式、堆式2.{abb,aabb,babb,aabbb,abbbb....}3.开始符号、产生式集合4.低、右、左5.变量地址作为参数传递到函数中、把实参的内容复制到形参中三、简答题(每小题 10 分,共 30 分)1、请列举三种常用的中间代码,并说明编译过程中采用中间代码有什么好处。

编译原理作业

编译原理作业

编译原理作业第一次作业一、填空题1、编译程序的工作过程一般可划分为__________等几个基本阶段,同时还会伴有__________和__________。

2、若源程序是用高级语言编写的,目标程序是__________,则其翻译程序称为编译程序。

3、编译方式与解释方式的根本区别在于____________________。

4、如果编译程序生成的目标程序是机器代码程序,则源程序执行分为两大阶段:__________和__________。

如果编译生成的目标程序是汇编评议程序,则源程序的执行分成三个阶段:__________、__________、和__________。

二、单选题1、在使用高级语言编程时,首先可通过编译程序发现源程序的全部(1)错误和部分(2)错误。

a. 语法b. 语义 c . 语用 d. 运行2、用高级语言编写的程序经编译后产生的程序叫(1)。

用不同语言编写的程序产生(2)后,可用(3)连接在一起生成机器可执行的程序。

在机器中真正执行的是(4)。

3、高级语言的语言处理程序分为解释程序和编译程序两种。

编译程序有五个阶段,而解释程序通常缺少(1)和(2)。

其中,(3)的目的是使最后阶段产生的目标代码更为高效。

与编译系统相比,解释系统(4)。

解释程序处理语言时,大多数采用的是(5)方法。

(6)就是一种典型的解释程序。

(1)、(2)(3) a. 中间代码生成 b. 目标代码生成 c. 词法分析 d. 语法分析 e. 代码优化(4)a. 比较简单,可移植性好,执行速度快 b. 比较复杂,可移植性好,执行速度快c. 比较简单,可移植性差,执行速度慢d. 比较简单,可移植性好,执行速度慢(5) a. 源程序命令被逐个直接解释执行 b. 先将源程序转化为中间代码,再解释执行c. 先将源程序解释转化为目标程序,再执行d. 以上方法都可以(6) a. BASIC b. C c. FORTRAN d. PASCAL4、编译程序生成的目标程序__________是可执行的程序。

编译原理练习题及答案

编译原理练习题及答案

第一章练习题(绪论)一、选择题1.编译程序是一种常用的软件。

A) 应用B) 系统C) 实时系统D) 分布式系统2.编译程序生成的目标代码程序是可执行程序。

A) 一定B) 不一定3.编译程序的大多数时间是花在上。

A) 词法分析B) 语法分析C) 出错处理D) 表格管理4.将编译程序分成若干“遍”将。

A)提高编译程序的执行效率;B)使编译程序的结构更加清晰,提高目标程序质量;C)充分利用内存空间,提高机器的执行效率。

5.编译程序各个阶段都涉及到的工作有。

A) 词法分析B) 语法分析C) 语义分析D) 表格管理6.词法分析的主要功能是。

A) 识别字符串B) 识别语句C) 识别单词D) 识别标识符7.若某程序设计语言允许标识符先使用后说明,则其编译程序就必须。

A) 多遍扫描B) 一遍扫描8.编译方式与解释方式的根本区别在于。

A) 执行速度的快慢B) 是否生成目标代码C) 是否语义分析9.多遍编译与一遍编译的主要区别在于。

A)多遍编译是编译的五大部分重复多遍执行,而一遍编译是五大部分只执行一遍;B)一遍编译是对源程序分析一遍就立即执行,而多遍编译是对源程序重复多遍分析再执行;C)多遍编译要生成目标代码才执行,而一遍编译不生成目标代码直接分析执行;D)多遍编译是五大部分依次独立完成,一遍编译是五大部分交叉调用执行完成。

10.编译程序分成“前端”和“后端”的好处是A)便于移植B)便于功能的扩充C)便于减少工作量D)以上均正确第二章练习题(文法与语言)一、选择题1.文法 G 产生的 (1) 的全体是该文法描述的语言。

A.句型B. 终结符集C. 非终结符集D. 句子2.若文法 G 定义的语言是无限集,则文法必然是 (2) A递归的 B 上下文无关的 C 二义性的 D 无二义性的3. Chomsky 定义的四种形式语言文法中, 0 型文法又称为(A)文法;1 型文法又称为(C)文法;2 型语言可由(G) 识别。

A 短语结构文法B 上下文无关文法C 上下文有关文法D 正规文法E 图灵机F 有限自动机G 下推自动机4.一个文法所描述的语言是(A);描述一个语言的文法是(B)。

西安电子科技大学2020秋 编译原理与技术(大作业)答案

西安电子科技大学2020秋 编译原理与技术(大作业)答案

学习中心/函授站_姓名学号西安电子科技大学网络与继续教育学院2020 学年下学期《编译原理与技术》期末考试试题(综合大作业)考试说明:1、大作业试题于2020 年10 月15 日公布:(1)毕业班学生于2020 年10 月15 日至2020 年11 月1 日在线上传大作业答卷;(2)非毕业班学生于2020 年10 月22 日至2020 年11 月8 日在线上传大作业答卷;(3)上传时一张图片对应一张A4 纸答题纸,要求拍照清晰、上传完整;2、考试必须独立完成,如发现抄袭、雷同均按零分计;3、答案须用《西安电子科技大学网络与继续教育学院标准答题纸》手写完成,要求字迹工整、卷面干净。

一、单选题(每小题 2 分,共 10 分)1、编译器和解释器是两种高级语言处理程序,与编译器相比, B 。

A.解释器不参与运行控制,程序执行的速度慢B.解释器参与运行控制,程序执行的速度慢C.解释器参与运行控制,程序执行的速度快D.解释器不参与运行控制,程序执行的速度快2、给定文法A→bA|ca, B 不是该文法句子。

A.bbca B.bcabca C.ca D.bca3、 B 是与规范归约(最左归约)互逆的一个过程。

A.最左推导B.最右推导C.词法分析D.语义分析4、与逆波兰式abc*+d+对应的中缀表达式是 B 。

A.a+b+c*d B.(a+b)* c+d C.(a+b)* (c+d) D.a+b*c+d5、从编译程序的语法分析角度看,源程序是句子的集合, B 可以较好地反映句子的结构。

A.线性表B.树C.完全图D.堆栈二、填空题(每空 2 分,共 20 分)1、编译程序的工作过程可划分为词法分析、语法分析、语义分析、中间代码生成、代码优化、目标代码生成等阶段,符号表管理和出错处理是编译程序各阶段都涉及到的工作。

2、3、用LR 方法实现语法分析时,典型的操作有移进、归约、接受和报错。

4、识别上下文无关语言的自动机是下推自动机。

(完整版)(整理完)编译原理网上作业题参考答案20121101

(完整版)(整理完)编译原理网上作业题参考答案20121101
2树的根结点以文法G[S]的开始符S标记;
3若一结点至少有一个直接后继,则此结点上的标记为Vn中的一个符号;
4若一个以A为标记的结点有K个直接后继,且按从左至右的顺序,这些结点的标记分别为
Xi,X2,…,准则A^Xi,X2,…,冶 必然是G的一个产生式。
4.归约:(**)
解答:我们称 仏丫直接归约出aA0仅当A^y是一个产生式,且a(VnUVt)*。归约过程就是从输
出错处理程序对出现在源程序中的错误进行处理。此外,编译的各个阶段都可能出现错误。出错处理 程序对发现的错误都及时进行处理。
第二章
多项选择题:
1.ABC 2. ACE 3. BCD 4. AC 5. BC
填空题:
1•文法中的终结符和非终结符的交集是(空集)。词法分析器交给语法分析器的文法符号一定是(终结
(1)试求句型aAaBcbbdcc和aAcbBdcc的句柄;
(2)写出句子acabcbbdcc的最左推导过程。(***)
解答:
(1)分别画出对应两句型的语法树,如下图所示
句柄:AaB Bd
(2)句子acabcbbdcc的最左推导如下:
ST二aAcB二aAaBcB二acaBcB=acabcB二acabcbScA二acabcbBdcA二acabcbbdcA二acabcbbdcc
S二:aSPQ二aaSPQPg aaabQPQPQ:aaabPQQPQ:aaabPQPQQ aaaPPQQQ aaabbPqqq二aaabbQQg aaabbbcQQ二aaabbbccQ二aaabbbccc
于是得到文法G[S]生成的语言L={anbncn|n>1}
3.按指定类型,给出语言的文法。
L={aibj|j>i>1}的上下文无关文法。(**)

《编译原理》练习题

《编译原理》练习题

《编译原理》练习题一一、填空题(每空1分)1.设G [S ]是一个文法,我们把能由文法的 (1) 推导出来的符号串α称为G 的一个句型。

当句型α仅由 (2) 组成时 (即α∈V T *),则将它称为G 产生的句子。

2.从某一给定的状态q 出发,仅经过若干条 (3) 的矢线所能达到的状态所组成的集合称为ε-CLOSURE(q)。

3.设G=(V N ,V T ,P,S)是一文法,我们说G 中的一个符号X ∈V N ∪V T 是有用的,是指X 至少出现在 (4) 的推导过程中,否则,就说X 是无用的。

我们将不含形如A→A 的产生式和不含无用符号及无用产生式的文法称为 (5) 。

4.我们常采用形如 (class, value)的二元式作为一个单词的 (6) 。

其中,class 是一个整数,用来指示该单词的 (7) ,value 则是单词之值。

5.一个文法G[S]可表示成形如 (8) 的四元式。

其中V N ,V T ,P 均为非空的有限集,分别称为非终结符号集、终结符号集和产生式集, S ∈V N 为文法的开始符号。

此外,将出现在各产生式左部和右部的一切符号所组成的集合称为 (9) ,记作V 。

显然,V=V N ∪V T ,V N ∩V T =∅。

6.通常,可通过两种途径来构造词法分析程序。

其一是根据对语言中各类单词的某种描述或定义,用 (10) 构造词法分析程序;另外一种途径是所谓词法分析程序的(11) 。

7.设G 为一文法,A→α是G 的一个产生式,如果α具有υAδ的形式,其中υ,δ不同时为ε,则称产生式A→α是 (12) 。

若存在推导δυαA A *⇒⇒,则称产生式A→α是 (13) 。

8.设M=(K,Σ,f,S 0,Z)为一DFA ,并设s 和t 是M 的两个不同状态,我们说状态s,t 为某一输入串w (14) ,是指从s,t 中之一出发,当扫视完w 之后到达M 的终态,但从其中的另一个状态出发,当扫视完同一个w 后而进入 (15) 。

编译原理习题及答案(整理后)

编译原理习题及答案(整理后)

编译原理习题及答案(整理后)第一章1、将编译程序分成若干个“遍”是为了b.使程序的结构更加清晰2、构造编译程序应掌握a.源程序b.目标语言c.编译方法3、变量应当c.既持有左值又持有右值4、编译程序绝大多数时间花在上。

d.管理表格5、不可能是目标代码。

d.中间代码6、使用可以定义一个程序的意义。

a.语义规则7、词法分析器的输入是b.源程序8、中间代码生成时所遵循的是-c.语义规则9、编译程序是对d.高级语言的翻译10、语法分析应遵循c.构词规则二、多项选择题1、编译程序各阶段的工作都涉及到b.表格管理c.出错处理2、编译程序工作时,通常有阶段。

a.词法分析三、填空题b.语法分析c.中间代码生成e.目标代码生成1、解释程序和编译程序的区别在于是否生成目标程序2、编译过程通常可分为5个阶段,分别是词法分析、语法分析中间代码生成、代码优化和目标代码生成。

3、编译程序工作过程中,第一段输入是源程序,最后阶段的输出为标代码生成程序。

4、编译程序是指将源程序程序翻译成目标语言程序的程序。

一、单项选择题1、文法G:S→某S某|y所识别的语言是a.某y某b.(某y某)某c.某ny某n(n≥0)d.某某y某某2、文法G描述的语言L(G)是指α,α∈VT某}a.L(G)={α|S+某α,α∈V某}b.L(G)={α|ST某α,α∈(V∪V某)}d.L(G)={α|S+α,α∈(V∪V某)}c.L(G)={α|STNTN3、有限状态自动机能识别a.上下文无关文法c.正规文法b.上下文有关文法d.短语文法4、设G为算符优先文法,G的任意终结符对a、b有以下关系成立a.若f(a)>g(b),则a>bc.a~b都不一定成立b.若f(a)5、如果文法G是无二义的,则它的任何句子αa.最左推导和最右推导对应的语法树必定相同b.最左推导和最右推导对应的语法树可能不同c.最左推导和最右推导必定相同d.可能存在两个不同的最左推导,但它们对应的语法树相同6、由文法的开始符经0步或多步推导产生的文法符号序列是a.短语b.句柄c.句型d.句子7、文法G:E→E+T|TT→T某P|PP→(E)|I则句型P+T+i的句柄和最左素短语为a.P+T和ib.P和P+Tc.i和P+T+id.P和T8、设文法为:S→SA|AA→a|b则对句子aba,下面是规范推导。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

《编译原理》实验报告课程编译原理实验名称编译原理综合实验专业班级姓名学号完成日期2013/6/5目录实验一 (2)实验目的和内容 (2)PL/0语言描述 (2)内部码对照表 (3)实验过程及方法 (4)实验结果 (4)总结 (5)实验二 (5)实验目的 (5)实验内容及要求 (6)实验算法 (7)实验结果 (7)总结 (8)实验三 (8)实验目的 (8)实验内容 (9)实现算法 (9)实验结果 (9)总结 (12)实验一实验目的和内容1.实验目的:通过完成词法分析程序,了解词法分析的过程。

2.实验内容:用C/C++实现对Pascal的子集程序设计语言的词法识别程序。

3.实验要求:将该语言的源程序,也就是相应字符流转换成内码,并根据需要是否对于标识符填写相应的符号表供编译程序的以后各阶段使用。

PL/0语言描述PL/0程序设计语言是一个较简单的语言,它以赋值语句为基础,包括顺序、条件和循环三种控制结构。

PL/0有子程序(即函数)概念。

PL/0中唯一的数据类型是整型,可以用来说明该类型的常量和变量。

当然PL/0也具有通常的算术运算和关系运算。

具体的PL/0语法描述如下(采用扩充的BNF表示)。

<程序>→<程序首部> <分程序> {<分程序>}.<程序首部>→PROGRAM标识符;<分程序>→<过程首部> [<常量说明部分>] [<变量说明部分>] <复合语句><常量说明部分>→CONST <常量定义> {,<常量定义> } ;<常量定义>→标识符= 无符号整数<变量说明部分>→V AR <变量定义> {;<变量定义>};<变量定义>→标识符{,标识符}:<类型><类型>→INTEGER<过程首部>→PROCEDURE标识符;| PROCEDURE标识符(标识符:<类型>);<复合语句>→BEGIN<语句>{;<语句>}END<语句>→<赋值语句>|<条件语句>|<当型循环语句>|<过程调用语句>|<读语句>|<写语句>|<复合语句>|ε<赋值语句>→标识符:=<表达式><条件语句>→IF<条件>THEN<语句><条件语句> → if<布尔表达式> then <语句>|if<布尔表达式> then <语句> else <语句> <布尔表达式> → <条件> | !<布尔表达式>| <布尔表达式> && <布尔表达式><当型循环语句>→WHILE<条件>DO<语句><过程调用语句>→CALL 标识符| CALL 标识符(<表达式>)<读语句>→READ(标识符{,标识符} )<写语句>→WRITE(<表达式>{,<表达式>})<条件>→<表达式><关系运算符><表达式> | ODD<表达式><表达式>→<项>{<加型运算符><项>}<项>→<因子>{<乘型运算符><因子>}<因子>→标识符| 无符号整数| (<表达式>)<加型运算符>→+|-<乘型运算符>→* | /<关系运算符>→=|<>|<|<=|>|>=内部码对照表表1-1 内部码对照表内码单词内码单词内码单词内码单词1 PROGRAM2 CONST3 V AR4 INTEGER5 Call6 PROCEDURE7 IF8 THEN9 WHILE 10 DO 11 READ 12 WRITE 13 BEGIN 14 END 15 ODD 16 + 17 - 18 * 19 / 20 = 21 <> 22 < 23 <= 24 > 25 >= 26 , 27 . 28 ; 29 : 30 := 31 ( 32 ) 33 无符号整数34 标识符35 # 36 else实验过程及方法1.将上述内部码对照表输入TINY.L文件中2.利用FLEX.EXE程序根据TINY.L文件生成词法自动编译的C程序lex.yy.c文件3.运行lex.yy.c文件,读取所需编译程序的文件,生成一个词法分析结果的txt文件实验结果1.根据内部码对照表所编写的TINY.L文件见词法文件夹2.生成的lex.yy.c文件见词法文件夹中的源文件3.所需测试的程序代码存于test1.c文件中programabc;PROCEDURE ABC;vara,b,c:integer;begina:=1;b:=2;c:=1+2*3end.4.生成的词法分析结果如下(见out.txt)总结词法分析的代码编写没有花很多时间,只是在老师给的参考资料中稍微改了一些数据,就可以得到所需要的词法分析文件,但是此时词法分析的结果很重要,因为它涉及到后面的几个实验,决定了后面的实验能否顺利完成实验二实验目的通过完成语法分析程序,了解语法分析的过程和作用实验内容及要求实验内容:用递归子程序法实现对pascal的子集程序设计语言的分析程序实验要求:对源程序的内码流进行分析,如为文法定义的句子输出“success!”,否则,输出“compiler failed!”,以及出错的地方。

根据需要处理说明语句填写写相应的符号表供以后代码生成时使用。

注:语法定义为:<程序>→<程序首部> <分程序> {<分程序>}.<程序首部>→PROGRAM标识符;<分程序>→<过程首部> [<常量说明部分>] [<变量说明部分>] <复合语句><常量说明部分>→CONST <常量定义> {,<常量定义> } ;<常量定义>→标识符= 无符号整数<变量说明部分>→V AR <变量定义> {;<变量定义>};<变量定义>→标识符{,标识符}:<类型><类型>→INTEGER<过程首部>→PROCEDURE标识符;| PROCEDURE标识符(标识符:<类型>);<复合语句>→BEGIN<语句>{;<语句>}END<语句>→<赋值语句>|<条件语句>|<当型循环语句>|<过程调用语句>|<读语句>|<写语句>|<复合语句>|ε<赋值语句>→标识符:=<表达式><条件语句>→IF<条件>THEN<语句><当型循环语句>→WHILE<条件>DO<语句><过程调用语句>→CALL 标识符| CALL 标识符(<表达式>)<读语句>→READ(标识符{,标识符} )<写语句>→WRITE(<表达式>{,<表达式>})<条件>→<表达式><关系运算符><表达式> | ODD<表达式><表达式>→<项>{<加型运算符><项>}<项>→<因子>{<乘型运算符><因子>}<因子>→标识符| 无符号整数| (<表达式>)<加型运算符>→+|-<乘型运算符>→* | /<关系运算符>→=|<>|<|<=|>|>=说明:①<>:用左右尖括号括起来的是非终结符;②{}大括号相当于正则表达式中的()*,表示其中内容重复0次或N多次;③[]大括号表示可有可无,即方括号内的内容出现0次或1次;④注:该语言是大小写不敏感的,例如,IF与if是同一个单词。

实验算法对于每一个非终结元素都写出一个函数,根据文法中的语句推导得到函数的调用顺序,运用函数的嵌套调用,完成对语法的判断实验结果1.程序源代码见:语法.cpp函数说明:void token(); // 读取void Program(); //程序void HeadofProgram(); //程序首部void error(int n); //错误信息输出void Program_f(); //分程序void ConstState(); //常量说明部分void VARState(); //变量说明部分void VARDef(); //变量定义void type(); //数据类型void ProgressState(); //过程说明void HeadofProcess(); //过程首部void Sentence(); //句子void EvaluatSentence(); //赋值语句void ConditionSentence(); //条件语句void CirculateSentence(); //循环语句void CallProgressSentence();//过程调用语句void ReadSentence(); //读语句void WriteSentence(); //写语句void CompoundSentence(); //复合语句void Condition(); //条件void Expression(); //表达式void Term(); //项void Factor(); //因子void ADD(); //加减void Relation(); //关系运算符void MUL(); //乘除void BoolExpression(); //布尔表达式2.所需读入数据文件即为前面词法的输出文件out.txt3.根据前面词法的输出结果测的的语法分析结果如下:当测试程序为下面程序时的运行结果总结语法相对于词法来说,难度大了很多,对于函数的嵌套调用有很高的要求,调用函数的时候出现任何错误,都会使结果出错,代码也超过了500行,花费了很多时间来测试和修改。

相关文档
最新文档