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

大学计算机编译原理练习题及答案编译原理是计算机科学中的重要基础课程,其目的是让学生了解编译器的工作原理、构造与实现方法。
为了帮助同学们更好地掌握编译原理,以下是一些练习题及其答案,供大家参考学习。
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语言源代码转化为可执行的机器代码。
编译原理大作业是一项非常有挑战性的任务,需要我们对编译原理的各个方面有深入的理解和掌握。
通过完成这个大作业,我们可以更好地理解编译原理的原理和方法,提高我们的编程能力和解决问题的能力。
编译原理作业题整理

编译原理作业题整理第一章习题一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套含答案 大题集).

《编译原理》期末试题(五)一、单项选择题(共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)代码生成器:取源程序的一种中间表示作为输入并把它映射到一种目标语言。
如果目标语言是机器代码,则需要为源程序所用的变量选择寄存器或内存单元,然后把中间指令序列翻译为完成同样任务的机器指令序列。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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行,花费了很多时间来测试和修改。