编译原理课程设计 C语言编译器的实现
C语言编译器前端的设计与实现 实训报告

第 1 章 绪论
1.1 C 语言及编译器概述
C 语言是在 70 年代初问世的。一九七八年由美国电话电报公司(AT&T)贝尔实验室正式 发表了 C 语言。同时由 B.W.Kernighan 和 D.M.Ritchit 合著了著名的“THE C PROGRAMMING LANGUAGE”一书。通常简称为《K&R》,也有人称之为《K&R》标准。但是,在《K&R》中并 没有定义一个完整的标准 C 语言,后来由美国国家标准学会在此基础上制定了一个 C 语言 标准,于一九八三年发表。通常称之为 ANSI C。C 语言是一种结构化语言。它层次清晰, 便于按模块化方式组织程序,易于调试和维护。C 语言的表现能力和处理能力极强。它不仅 具有丰富的运算符和数据类型,便于实现各类复杂的数据结构。它还可以直接访问内存的 物理地址,进行位(bit)一级的操作。由于 C 语言实现了对硬件的编程操作,因此 C 语言集 高级语言和低级语言的功能于一体。既可用于系统软件的开发,也适合于应用软件的开发。 此外,C 语言还具有效率高,可移植性强等特点。因此广泛地移植到了各类各型计算机上, 从而形成了多种版本的 C 语言。
2.3.1 自顶向下的语法分析...........................................................................................5 2.3.2 自底向上的语法分析...........................................................................................5 2.4 语义分析.........................................................................................................................6 2.5 符号表.............................................................................................................................6 2.6 类型检查.........................................................................................................................7 第 3 章 系统详细设计..................................................................................................................8 3.1 系统设计基本思路.........................................................................................................8 3.2 词法分析模块设计.........................................................................................................8 3.3 语法分析模块设计.......................................................................................................11 3.4 语义分析模块设计.......................................................................................................14 第 4 章 结束语............................................................................................................................16 参考文献...................................................................................................................................... 16 附录: 附录 1:词法分析核心代码............................................................................................17 附录 2:语法分析核心代码............................................................................................18
简单C语言编译器(编译原理)

//======================================================================================================
//词法分析函数: void scan()
//数据传递:形参fp接收指向文本文件头的文件指针;
flag=3;
else if(ch==' ')
flag=4;
else if(ch=='\n')
flag=5;
else if(ch=='?')
flag=6;
else if(feof(fp1))
flag=7;//结束
else
flag=0; //illegal character
return(flag);
else if(strcmp(ft->name,"||")==0){ft->mark_name='|';}
else if(strcmp(ft->name,"!=")==0){ft->mark_name='@';}
if(flag==1||flag==2||flag==3) {i++;buffer[i]=ch;line[i]=row;}
else if(flag==4) {i++;buffer[i]='?';line[i]=row;}
else if(flag==5) {i++;buffer[i]='~';row++;}
{
int flag;
if(ch=='!'||ch=='$'||ch=='&'||ch=='*'||ch=='('||ch==')'||ch=='-'||ch=='_'||
编译原理课程设计教案

编译原理课程设计教案第一章:编译原理概述1.1 编译器的作用与重要性解释编译器将高级语言程序转换为机器语言程序的过程强调编译器在软件开发中的关键角色1.2 编译原理的基本概念介绍编译程序的基本组成部分,如词法分析器、语法分析器、语义分析器、中间代码器、目标代码器和代码优化器等解释源程序、目标程序和中间代码的概念1.3 编译过程的阶段详细介绍编译过程的各个阶段,包括词法分析、语法分析、语义分析、中间代码、代码优化和目标代码强调每个阶段的目标和重要性第二章:词法分析2.1 词法分析的基本概念解释词法分析器的任务和作用介绍词法单位的概念,如标识符、关键字、常量和符号等2.2 词法分析的技术和方法介绍词法分析常用的技术和方法,如有限自动机、正则表达式和词法规则等解释词法分析过程中的扫描线和词法单元的产生过程2.3 词法分析器的实现介绍如何实现一个简单的词法分析器,包括词法规则的定义和词法分析器的构造提供相关的编程练习,让学生通过编写代码实现基本的词法分析功能第三章:语法分析3.1 语法分析的基本概念解释语法分析器的任务和作用介绍语法规则和语法树的概念3.2 语法分析的技术和方法介绍语法分析常用的技术和方法,如递归下降分析法、LL分析法、LR分析法等解释语法分析过程中的分析表和状态机的概念3.3 语法分析器的实现介绍如何实现一个简单的语法分析器,包括语法规则的定义和语法分析器的构造提供相关的编程练习,让学生通过编写代码实现基本的语法分析功能第四章:语义分析4.1 语义分析的基本概念解释语义分析器的任务和作用介绍语义规则和语义错误的概念4.2 语义分析的技术和方法介绍语义分析常用的技术和方法,如类型检查、上下文无关文法分析、语义规则等解释语义分析过程中的语义规则和语义冲突的解决方法4.3 语义分析器的实现介绍如何实现一个简单的语义分析器,包括语义规则的定义和语义分析器的构造提供相关的编程练习,让学生通过编写代码实现基本的语义分析功能第五章:中间代码5.1 中间代码的基本概念解释中间代码器的任务和作用介绍中间代码的概念和中间代码的原则5.2 中间代码的技术和方法介绍中间代码的常用技术和方法,如三地址代码、静态单赋值代码等解释中间代码过程中的基本规则和操作符的转换5.3 中间代码器的实现介绍如何实现一个简单的中间代码器,包括中间代码的定义和中间代码器的构造提供相关的编程练习,让学生通过编写代码实现基本的中间代码功能第六章:代码优化6.1 代码优化的基本概念解释代码优化器的任务和作用介绍代码优化的目标和常见的优化技术6.2 常见代码优化技术详细介绍各种代码优化技术,如常量折叠、死代码消除、循环优化、表达式简化等强调优化技术对提高程序性能的重要性6.3 代码优化器的实现介绍如何实现一个简单的代码优化器,包括优化规则的定义和代码优化器的构造提供相关的编程练习,让学生通过编写代码实现基本的代码优化功能第七章:目标代码7.1 目标代码的基本概念解释目标代码器的任务和作用介绍目标代码的概念和目标代码的原则7.2 目标代码的技术和方法介绍目标代码的常用技术和方法,如寄存器分配、指令调度等解释目标代码过程中的基本规则和操作符的转换7.3 目标代码器的实现介绍如何实现一个简单的目标代码器,包括目标代码的定义和目标代码器的构造提供相关的编程练习,让学生通过编写代码实现基本的目标代码功能第八章:调试技术8.1 调试技术的基本概念解释调试器的作用和重要性介绍调试过程中的常见问题和调试技术8.2 调试器的结构和原理详细介绍调试器的结构和原理,如断点、单步执行、查看变量等功能强调调试技术对发现和修复程序错误的重要性8.3 调试器的实现介绍如何实现一个简单的调试器,包括断点的设置、单步执行、变量查看等功能提供相关的编程练习,让学生通过编写代码实现基本的调试功能第九章:编译器性能评价9.1 编译器性能评价的基本概念解释编译器性能评价的目的和方法介绍编译器性能评价的指标和评价方法9.2 编译器性能评价的指标和评价方法详细介绍编译器性能评价的指标,如执行速度、内存占用、编译时间等介绍常用的编译器性能评价方法和工具9.3 编译器性能评价的实践介绍如何进行编译器性能评价的实践,包括评价指标的选取和评价方法的实施提供相关的实践练习,让学生通过实际操作评价编译器的性能第十章:编译原理应用与发展趋势10.1 编译原理在软件开发中的应用介绍编译原理在软件开发中的应用领域,如解释器设计、即时编译、程序分析等强调编译原理在提高程序性能和开发效率方面的重要性10.2 编译原理的研究现状与未来发展介绍编译原理研究领域的前沿技术和最新研究成果探讨编译原理未来的发展趋势和挑战10.3 编译原理在实践中的应用案例分析分析编译原理在实际项目中的应用案例,如开源编译器项目、商业编译器产品等引导学生思考如何将编译原理应用于实际工程实践中的问题重点和难点解析重点环节一:编译器的作用与重要性编译器作为程序设计语言和计算机硬件之间的桥梁,其作用不可忽视。
编译原理_教学设计方案

一、课程概述编译原理是计算机科学中的一个核心课程,主要研究如何将高级语言程序转换为机器语言或中间代码的过程。
本课程旨在使学生掌握编译器的基本原理和设计方法,培养学生分析和解决问题的能力。
二、教学目标1. 知识目标:- 理解编译器的基本概念、工作原理和设计方法。
- 掌握词法分析、语法分析、语义分析、代码生成和优化等编译器核心组件的工作原理。
- 了解编译器在软件工程中的重要作用。
2. 能力目标:- 能够分析和设计简单的编译器。
- 能够运用编译原理知识解决实际问题。
- 培养学生的编程能力和算法设计能力。
3. 素质目标:- 培养学生的逻辑思维能力和严谨的学术态度。
- 增强学生的团队合作意识和沟通能力。
三、教学内容1. 引言:编译器的概念、发展历史和作用。
2. 词法分析:正规表达式、有限自动机、词法分析器设计。
3. 语法分析:上下文无关文法、递归下降分析、LL(1)分析、LR分析。
4. 语义分析:类型检查、作用域分析、语义规则。
5. 中间代码生成:三地址码、四元式、逆波兰表示法。
6. 代码优化:数据流分析、代码优化策略。
7. 目标代码生成:机器代码、汇编语言、目标代码生成技术。
8. 编译器构造工具:编译器生成器、代码优化工具。
四、教学方法1. 讲授法:系统讲解编译原理的基本概念、原理和方法。
2. 案例分析法:通过分析经典的编译器案例,加深对理论知识的理解。
3. 实验法:设计实验,让学生动手实现编译器的基本组件。
4. 讨论法:组织课堂讨论,激发学生的学习兴趣,培养学生的批判性思维。
5. 项目法:设计编译器开发项目,让学生综合运用所学知识。
五、教学过程1. 导入:介绍编译原理的重要性,激发学生的学习兴趣。
2. 讲解:系统讲解编译原理的基本概念和原理。
3. 案例分析:分析经典的编译器案例,帮助学生理解理论知识。
4. 实验:设计实验,让学生动手实现编译器的基本组件。
5. 讨论:组织课堂讨论,解决学生在学习过程中遇到的问题。
编译原理第四版附录c编译程序实验

编译原理第四版附录c编译程序实验
编译原理第四版附录C编译程序实验指的是一项编译器开发实验,旨在让学生通过实践掌握编译器的设计和实现原理。
该实验一般分为以下几个步骤:
1. 了解编译器的基本原理和流程:这包括词法分析、语法分析、语义分析、代码生成等基本步骤,以及编译器的组成结构、工作流程等概念。
2. 设计编译器的语法和语义规则:在了解编译器的基本原理之后,需要根据具体的编译语言和需求设计语法和语义规则,通常采用自顶向下或自底向上的语法分析方法。
3. 实现编译器的核心算法和数据结构:编译器的核心算法包括词法分析器、语法分析器、语义分析器和代码生成器等,需要实现相应的数据结构和算法。
4. 测试和调试编译器:在完成编译器的实现之后,需要进行测试和调试,包括对编译器的正确性、效率和容错性进行测试和评估,以及对编译器的性能进行优化。
5. 扩展编译器的功能:在完成基本的编译器实现之后,可以考虑对编译器进行功能扩展,例如支持更丰富的语言特性、优化代码生成等。
总的来说,编译原理第四版附录C编译程序实验是一项非常有挑战性和实用性的实验,旨在让学生深入了解编译器的设计和实现原理,提高编程能力和实践经验。
编译原理课程设计C编译器词法分析与语法分析的实现

编译原理课程设计报告课落款称: C-编译器词法分析与语法分析的实现提交文档学生姓名:黄臻旸提交文档学生学号: 1043041227 同组成员名单:无指导教师姓名:金军指导教师评阅成绩:指导教师评阅意见:..提交报告时刻:2021年 6 月 5 日编译原理课程设计报告 (1)一、课程设计目标 (3)二、分析与设计 (3)2.一、说明所用的方式: (3)2.二、系统总图: (3)2.2.一、scanner部份: (3)2.2.二、parse部份: (5)2.2.3、代码设计说明 (7)3、程序代码实现 (10)3.一、获取输入部份(在main.c中): (10)3.二、词法分析部份(在scan.c中): (10)3.3、语法分析部份(在parse.c中): (15)3.4、输出与结点的成立(在util.c中) (29)3.五、TokenType、treeNode与结点类型的声明(在globals.h中) (35)4、测试结果 (36)五、总结 (40)5.一、收成 (43)5.二、不足 (43)一、课程设计目标本次实验,本C- 编译器要紧设计而且实现了C- 编译器的词法分析功能与语法分析功能。
二、分析与设计2.一、说明所用的方式:各部份的实现方式(scanner:手工实现、Lex;parser:递归下降、LL(1)、LR(0)、SLR(1)、2.二、系统总图:2.2.一、scanner部份:2.2.1.一、实验原理:扫描程序的任务是从源代码中读取字符并形成由编译器的以后部份(一般是分析程序)处置的逻辑单元。
由扫描程序生成的逻辑单元称作记号(token),将字符组合成记号与在一个英语句子中将字母将字母组成单词并确信单次的含义很相像。
在此程序中,我将记号分成了以下类型:typedef enum {ENDFILE,ERROR,IF,ELSE,INT,RETURN,VOID,WHILE,ID,NUM,ASSIGN,PLUS,MINUS,TIMES,OVER,L T,LET,BT,BET,EQ,NEQ,// = + - * / < <= > >= == !=LPAREN_1,RP AREN_1,SEMI,COM,LPAREN_2,RP AREN_2,LPAREN_3,RP AREN_3,LIN,RIN// { } ; , [ ] ( ) /*} TokenType;其中,关键字有:else、if、int、return、void、while;专用符号有:+、-、*、/、<、<=、>、>=、==、~=、=、;、,、(、)、[、]、{、}、/*、*/其他标记是ID、NUM,通过以下正那么表达式概念:ID = letter letter*NUM = digit digit*letter = a|..|z|A|..|Zdigit = 0|..|9小写大写字母是有区别的。
编译原理课程设计LL文法分析器设计C++语言实现

集美大学计算机工程学院编译原理课程设计报告2017 年06 月29 日摘要:选题要求:根据某一文法编制调试LL(1) 文法语法分分析程序,以便对任意输入的符号串进行分析。
本次课程设计的目的主要是加深对预测分析LL(1)文法语法分析法的理解。
具体如下:1、对语法规则有明确的定义;2、编写的分析程序能够对给定文法进行正确的语法分析;3、对输入给定的文法,手工计算FIRST、FOLLOW集合和select 集合,应能判断识别是否为给定文法的句子,并给出推导过程。
4、对输入给定的文法,由程序自动构造FIRST、FOLLOW集合。
5、对于遇到的语法错误,能够做出简单的错误处理,给出简单的错误提示,保证顺利完成语法分析过程。
关键词:语法分析;FIRST集合;FOLLOW集合;分析表A:=b,都所以采用A有推导A开头)对A引入一个新的非终结符A′,把上式改写为:A →βA′A′→αA′|ε●间接左递归若文法中存在某一非终结符A,使得A⇒A…至少需要两步推导,则称该文法是间接左递归的。
消除间接左递归的方法:【方法一】采用代入法把间接左递归变成直接左递归。
【方法二】直接改写文法:设有文法G10[S]:S→Aα|β⑴A→Sγ⑵因为S⇒Aα⇒Sγα,所以S是一个间接递归的非终结符。
为了消除这种间接左递归,将⑵式代入⑴式,即可得到与原文法等价的文法(可以证明):S→Sγα|β⑶⑶式是直接左递归的,可以采用前面介绍的消除直接左递归的方法,对文法进行改写后可得文法:S→βS′S′→γαS′|ε2. 计算First集(1) 若X∈V T ,则First(X)={X}(2) 若X∈V N ,且有产生式X→a…, a∈V T则First(X)={X}(3) 若X∈V N ,且有产生式X→ε,则First(X)={X}(4) 若X,Y1 ,Y2 ,…,Y n 都∈V N,而由产生式X→Y1 Y2 …Y n 。
当Y1 ,Y2 ,…,Y i-1都能推导出ε时,(其中1≤i≤n),则First(Y1)-{ε}, First(Y2)-{ε},…, First(Y i)都包含在First(X)中(5)当(4)中所有Y i都能推导出ε,(i=1,2,…,n),则First(X)=First(Y1)∪First(Y2)∪…First(Y n)∪{ε}反复使用上述步骤直到每个符合的First集合不再增大为止。
编译原理课程设计___C语言编译器的实现

扬州大学编译原理课程设计学号:*********姓名:专业:计算机科学与技术课程:编译原理指导教师:***目录一.程序简介与分析---------------------------------------------------------3 二.程序适用范围-----------------------------------------------------------3 三.词法分析---------------------------------------------------------------3 四.语法分析---------------------------------------------------------------4 五.语义分析和中间代码生成------------------------------------------------10 六.代码生成--------------------------------------------------------------12 七.流程图----------------------------------------------------------------13 八.实现------------------------------------------------------------------14 九.程序运行结果----------------------------------------------------------14 十.总结------------------------------------------------------------------18 十一.附录(源程序)--------------------------------------------------------18简单的编译程序设计一.程序简介与分析本程序由四个部分组成:词法分析子程序,语法分析子程序,语义分析子程序,目标代码生成程序。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
编译原理课程设计报告设计题目编译代码生成器设计学生姓名班级学号指导老师成绩一、课程设计的目的编译原理课程兼有很强的理论性和实践性,是计算机专业的一门非常重要的专业基础课程,它在系统软件中占有十分重要的地位,是计算机专业学生的一门主修课。
为了让学生能够更好地掌握编译原理的基本理论和编译程序构造的基本方法和技巧,融会贯通本课程所学专业理论知识,提高他们的软件设计能力,特设定该课程的课程设计,通过设计一个简单的PASCAL语言(EL语言)的编译程序,提高学生设计程序的能力,加深对编译理论知识的理解与应用。
二、课程设计的要求1、明确课程设计任务,复习编译理论知识,查阅复印相关的编译资料。
2、按要求完成课程设计内容,课程设计报告要求文字和图表工整、思路清晰、算法正确。
3、写出完整的算法框架。
4、编写完整的编译程序。
三、课程设计的内容课程设计是一项综合性实践环节,是对平时实验的一个补充,课程设计内容包括课程的主要理论知识,但由于编译的知识量较复杂而且综合性较强,因而对一个完整的编译程序不适合平时实验。
通过课程设计可以达到综合设计编译程序的目的。
本课程的课程设计要求学生编写一个完整的编译程序,包括词法分析器、语法分析器以及实现对简单程序设计语言中的逻辑运算表达式、算术运算表达式、赋值语句、IF语句、While语句以及do…while语句进行编译,并生成中间代码和直接生汇编指令的代码生成器。
四、总体设计方案及详细设计总体设计方案:1.总体模块2.表2.1 各种单词符号对应的种别码单词符号种别码单词符号种别码bgin 1 :17If 2 := 18Then 3 < 20wile 4 <> 21do 5 <= 22end 6 > 23 lettet(letter|digit)* 10 >= 24 dight dight* 11 = 25 + 13 ;26—14 ( 27* 15 ) 28/ 16 # 0 详细设计:4.1界面导入设计(1)一共三个选项:①choice 1--------cifafenxi②choice 2--------yufafenxi③choice 3--------zhongjiandaima(2)界面演示图一图二图三4.2词法分析程序(1(2)具体功能的具体设计1、cifafenxi( )首先设置prog[n]来接收输入的语句,以‘#’来结束;调用扫描子程序scaner1( ),每一次得到一个类型码;用switch判别相应输出;直到syn1=0为止。
2、扫描子程序scaner1( )-----------------扫描输入的语句首先设置3个变量:①token1用来存放构成单词符号的字符串;②sum1用来存放整型单词;③syn1用来存放单词符号的类型码。
有关scaner1()中关键点解析:①while((ch==' ')||(ch=='\n')) ch=prog[p++]; ;忽略空格②if(((ch<='z')&&(ch>='a'))||((ch<='Z')&&(ch>='A'))){ while(((ch<='z')&&(ch>='a'))||((ch<='Z')&&(ch>='A'))||((ch>='0')&&(ch<='9'))) { token[m++]=ch;ch=prog[p++];} ;判别标识符③for(n=0;n<6;n++)if(strcmp(token,rwtab[n])==0){ syn=n+1;break;} ;标识符是否是关键字④if((ch>='0')&&(ch<='9')){ while((ch>='0')&&(ch<='9')){ sum=sum*10+ch-'0';ch=prog[p++];} };判别整数(3) 词法分析的运行结果输入begin x:=1; y:=1+2;end #输出4.3语法分析程序(1) 具体功能的具体设计1.yufafenxi()---------------分析程序给出算术表达式文法,进行适当的文法变换输入——表达式;输出——表达式语法是否正确。
2.子程序的功能描述(3) 语法分析的运行结果分析成功图分析失败图4.4 中间代码生成程序(1)总体描述采用递归下降(自上而下)的语法制导翻译法。
在前两次试验的基础上改进。
词法分析程序→语法分析程序→语义分析程序→编译器。
不断完善,不断改进。
渐变的过程。
单词符号及种别表(2)程序结构描述(3) 程序的功能描述从文件中读入表达式,输出其四元式的结果序列递归下降示意图是否为调用scanner是否为(?调用scanner是否为)?调用scanner调用语句块分析函数出错处理(4)详细功能描述void scanner(); //扫描void lrparser();void staBlock(int *nChain); //语句块void staString(int *nChain); //语句串void sta(int *nChain); //语句void fuzhi(); //赋值语句void tiaojian(int *nChain); //条件语句void xunhuan(); //循环语句char* E(); //Expresiion表达式char* T(); //Term项char* F(); //Factor因子char *newTemp(); //自动生成临时变量void backpatch(int p,int t); //回填int merge(int p1,int p2); //合并p1和p2void emit(char *res,char *num1,char *op,char *num2); //生成四元式void emit(char *res,char *num1,char *op,char *num2)该函数的功能是生成一个三地址语句送到四式表中char *newTemp()该函数的功能是会动一个新的临时变量,临时变量名产生的顺序是T1,T2,T3,….int merge(int p1,int p2)该函数的功能是将以P1,P2为链首的两条链合并成一条链,返回时的函数值作为合并后的链首。
void backpatch(int p,int t)该函数的功能是把P所链接的每个四元式的第四区段(result段)都回填t。
void fuzhi()该函数的功能是对赋值语句进行分析。
void tiaojian(int *nChain)该函数的功能是对条件语句进行分析。
void xunhuan()该函数的功能是对循环语句进行分析。
(4) 结果演示图一简单语句生成四元式图二if语句的四元式生成图三循环语句四元式生成(5)汇编生成if(strcmp(fourCom[i].opera,"=")==0){printf("Move AX,%1s\n",fourCom[i].arg1);printf("Move %5s,Ax\n",fourCom[i].result);}if(strcmp(fourCom[i].opera,"+")==0){printf("Mov AX,%1s\n",fourCom[i].arg1);printf("ADD Ax,%1s\n",fourCom[i].arg2);printf("Mov %1s,Ax\n",fourCom[i].result);}if(strcmp(fourCom[i].opera,"-")==0){printf("Mov AX,%1s\n",fourCom[i].arg1);printf("SUB Ax,%1s\n",fourCom[i].arg2);printf("Mov %1s,Ax\n",fourCom[i].result);}if(strcmp(fourCom[i].opera,"*")==0){printf("Mov AL,%1s\n",fourCom[i].arg1);printf("MUL %1s\n",fourCom[i].arg2);printf("Mov %1s,Ax\n",fourCom[i].result);}if(strcmp(fourCom[i].opera,"/")==0){printf("Mov AX,%1s\n",fourCom[i].arg1);printf("DIv %1s\n",fourCom[i].arg2);printf("Mov %1s,AL\n",fourCom[i].result);}if(strcmp(fourCom[i].opera,"goto")==0){printf("jmp L%1s\n",i);}结果演示五、课程设计的体会与总结经过一个星期的编译原理课程设计,本人在陈宏建老师的指导下,顺利完成该课程设计。
通过该课程设计,收获颇多。
词法分析的基本任务是从字符串表示的源程序中识别出具有独立意义的单词符号,其基本思想是根据扫描到单词符号的第一个字符的种类,拼出相应的单词符号。
通过本试验的完成,更加加深了对词法分析原理的理解。
通过本次试验,了解了语法分析的运行过程,主程序大致流程为:“置初值”→调用scaner函数读下一个单词符号→调用IrParse→结束。
递归下降分析的大致流程为:“先判断是否为begin”→不是则“出错处理”,若是则“调用scaner函数”→调用语句串分析函数→“判断是否为end”→不是则“出错处理”,若是则调用scaner函数→“判断syn=0&&kk=0是否成立”成立则说明分析成功打印出来。