WHILE循环语句的翻译程序设计课设报告
DO-WHILE循环语句翻译程序设计

DO-WHILE循环语句翻译程序的设计目录第一章概述 (1)1.1 课程设计背景 (1)1.2 课程设计目的 (1)1.3 实验环境与开发工具 (1)1.4 C++语言简单介绍 (2)第二章设计内容 (3)2.1 设计需求陈述 (3)2.1.1词法分析的原理 (4)2.1.2 语法分析器的原理 (5)2.1.3 语义分析中间代码生成器的原理.......................................... 错误!未定义书签。
2.2 需要完成的功能................................................................................. 错误!未定义书签。
2.2.1 判定输入的文法词法分析是否正确 (8)2.2.2 判定输入的文法语法分析是否正确 (9)2.2.3中间代码(四元式)的生成与输出 (10)2.3 分析器的构造 (11)第三章逻辑设计 (12)3.1系统的组织与基本工作流程 (12)3.2 总体结构逻辑结构图 (13)第四章详细设计.............................................................................................. 错误!未定义书签。
4.1 软件功能分析................................................................................... 错误!未定义书签。
4.1.1 判定输入文法词法分析是否正确 (14)4.1.2 判定输入的文法的语法分析是否正确.................................. 错误!未定义书签。
4.1.3 语义分析和中间代码生成...................................................... 错误!未定义书签。
WHILE循环语句的翻译程序设计(简单优先法,三地址输出)

目录1 问题域描述 (3)2 文法及属性文法的描述 (3)2.1 WHILE循环语句的文法 (3)2.2 WHILE循环语句的属性文法 (4)3 语法分析方法及中间代码形式的描述 (4)3.1语法分析方法 (4)3.2中间代码形式描述 (6)4 编译系统的概要设计 (7)4.1词法分析 (7)4.2语法制导翻译 (8)5 详细的算法描述 (8)5.1 文法设计 (8)5.2 算法描述 (8)5.3 源程序代码 (9)6 软件的调试过程和结果测试 (19)6.1调试过程 (19)6.2结果测试 (19)7 使用说明 (20)8 课设总结 (20)9 参考文献 (22)WHILE循环语句的翻译程序设计(简单优先法、输出三地址表示)1 问题域描述while循环语句的翻译程序设计(简单优先法,输出单地址表示),要求完成:(1)用C++语言正确编写程序,完成WHILE循环语句的翻译程序设计。
(2)求能正确进行词法分析,语法分析,并能正确的输出预期结果。
(3)根据指定的文法,判定程序的正确性。
本次课程设计中要求设计一个WHILE循环语句的词法﹑语法及语义分析程序,语法分析选择简单优先法,采用语法制导翻译输出中间代码三元式。
通过设计、编制、调试一个WHILE循环语句的语法及语义分析程序,加深对语法及语义分析原理的理解,实现功能。
while循环语句的格式为:while(P){do A},其中A为循环体,可为一个或多个赋值语句;P为循环控制条件。
while循环语句首先根据循环控制条件P进行判断,若满足条件则执行循环体A,否则执行下面的程序段;本次课程设计中系统首先要进行词法分析,即从左到右把源文件的字符序列逐个进行扫描,产生一个个的单词序列,作为语法分析的输入从而继续编译过程。
该程序的语法分析读入词法分析的结果,并判断输入语句是否满足while循环语句的文法所描述的形式。
通过简单优先法对语句进行分析,看是否能通过给定的输入串归约到文法的开始符号。
课题八 循环程序设计while

课题八循环程序设计【教学内容】循环结构程序设计【教学目的】掌握while语句和do-while语句的格式、功能及应用【重点难点】循环程序的基本结构及每部分的设计【教学方法】实例+操作【教学过程】1、问题的引入在解决许多需要重复计算的问题时,为程序书写简化的一种程序结构,有前判断(while)和后判断(do-while)两种结构。
循环程序的应用范围非常广泛,如百鸡百钱问题、增长率问题、求累加和问题……2、while语句格式: while ( 条件表达式){ 语句;}执行过程:(1)计算条件表达式的值;(2)若条件表达式为非0(真、满足),则执行循环体(语句组),并回到(1)。
(3)若条件表达式值为0( 假、不满足) ,则结束循环,直接执行循环体后的语句举例:求1~100的累加和,并推广到求n!、1+3+5+……+99之和等问题的解决。
3、do-while语句格式:do{ 语句;}while ( 条件表达式);//;不能省略执行过程:(1)执行循环体语句(2)计算条件表达式的值,若为真,返回(1);若为假,则执行while之后的语句。
说明:while和do-while语句可以互相转换一个循环程序可以分为循环初始化、循环条件、循环体、改变循件等部分程序设计时,要避免“死循环”,一旦发生死循环,可用^+break终止程序4、循环程序的应用统计输入整数的个数,并求出输入的整数的和(输入-1时结束,-1不计在内)。
在本程序中,着重阐述循环程序的各部分分析与设置(课件)【学习与讨论】1、循环初始化语句在程序中的位置2、循环条件对程序执行结果的影响【课后小结】【课后任务】1、编程求S=1-3+5-7+9……99的值。
两种方法:(1)改变符号位的方法(2)拆分成正数部分和负数部分再求和(差)。
WHILE循环语句的翻译程序设计.

WHILE循环语句的翻译程序设计(递归下降法、输出三地址表示)1 系统描述按照课程设计的要求,写一个能识别while循环语句的文法,通过一定的变换使它符合递归下降法的要求,然后按照这个文法编写一个程序,该程序能识别输入的语句是否符合while语句的文法,或者能不能通过文法的开始符号推导出该语句。
该程序应该包括词法分析器,能对输入的语句进行词法分析,然后再对结果进行语法分析。
词法分析器应能识别关键字,标示符,常量,操作符等。
该程序的语法分析器能对输入的语法进行分析,判断输入语句能否满足while循环语句的文法。
通过递归下降的方法对语句进行分析,看能否通过开始符号推导出来。
该程序的语义分析器就是对分析结果进行输出,要求输出结果是三地址形式的。
2 文法及属性文法的描述2.1文法描述语句 > ::= while (< 条件表达式 > (< 赋值语句 > | 语句 ><条件表达式> ::= (<标识符>|<无符号整数>)<条件运算符> (<标识符>|<无符号整数><标识符> ::= <字母> (<字母>|<数字><条件运算符> ::= > | < | =<无符号整数> ::= <数字>(<数字><赋值语句> ::= <标识符>=(<标识符> | <数字> <算术运算符> (<标识符> | <数字><算术运算符> ::= + | - | * | /<赋值语句> ::= <标识符>=<标识符> | <数字>2.2递归文法while语句文法:S -> while (B S | i=EB -> E relop Erelop -> < | = | >E -> E+E | E-E | E*E | E/E | (E | i | n在编写程序的时候用到的是递归下降法,而递归下降法对文法的要求是不能包含左递归,对上述的文法进行消除左递归之后,得到如下的递归文法:S -> while (B S | i=EB -> E relop Erelop -> < | = | >E -> (EF | iF | nFF -> +EF | -EF | *EF | /EF | ε2.3属性文法的描述产生式属性文法S -> while (B S1S.begin:=newlabel;S.next:=newlabel;B.true:=newlabel;B.false:=S.next;S1.next:=S.begin;S.code:=gen(S.begin, ‘:’ || B.code||gen(S.true, ‘:’ ||S1.code || gen(‘goto’,S.begin ||gen(B.false, ‘:’|| gen(‘goto Lnext’;B -> E1 relop E2 B.place:=newlabel;B.code:=E1.code || relop.code ||E2.code ||gen(B.place ‘:=’ , E1.place , r elop.place , E2.place;relop -> < | =relop.place:=newlabel;| >relop.code:=gen(‘<’||gen(‘=’||gen(‘>’;E -> (E1F E.place:=newlabel;E.code:=E1.code ||F.code ||gen(E.place ‘:=’ ,‘(’, E1.place , ‘’, F.place;E -> iF E.palce:=newlabel;E.code:=i.code ||F.code ||gen(E.palce ‘:=’ ,i.place , F.place;E -> nF E.place:=newlabel;E.code:=n.code ||F.code ||gen(E.place ‘:=’ , n.place , F.place;F -> +EF1 F.place:=newlabel;F.code:=E.code || F1.code ||gen(F.place‘:= + ’, E.place , F1.place;F -> -EF1 F.place:=newlabel;F.code:=E.code || F1.code ||gen(F.place‘:= - ’, E.place , F1.place;F -> *EF1 F.place:=newlabel;F.code:=E.code || F1.code ||gen(F.place‘:= * ’, E.place , F1.place;F -> /EF1 F.place:=newlabel;F.code:=E.code || F1.code ||gen(F.place‘:= / ’, E.place , F1.place;F -> ε F.place:=newlabel;F.code:=gen(F.code‘:= ε’;图1 属性文法3 语法分析方法描述按照递归下降分析技术,递归下降识别程序是由一组子程序组成,每个子程序对应于一个非终结符号。
python while循环语句 教学设计

python while循环语句教学设计主题:Python中的while循环语句引言:在Python编程语言中,while循环语句是一种重复执行一段代码块的有效方式。
与for循环不同,while循环使用一个条件表达式来控制循环是否继续执行。
在本文中,我们将逐步介绍while循环的概念、语法、用法以及一些示例,帮助您更好地理解和使用while循环语句。
一、概念:while循环是一种遍历指定代码块的循环结构,只要给定的条件表达式为真,就会重复执行代码块。
当条件表达式为假时,循环将终止。
可以将while循环看作是一个开关,只有在条件为真时才会执行,否则会跳过循环体。
二、语法:while循环的语法结构如下:while 条件:循环体其中,条件是一个布尔表达式,用于控制循环的执行次数。
三、用法:1. 初始化循环控制变量在使用while循环之前,通常需要初始化一个循环控制变量。
该变量在循环的迭代过程中进行更新,以便在适当的时候终止循环。
2. 更新循环控制变量在while循环内部,通常会更新循环控制变量的值。
这一步通常在循环体的末尾进行,以实现对循环条件的改变。
3. 注意循环条件在编写while循环时,需要注意循环条件的判断。
条件表达式应能根据循环体的执行结果来更新,以便在适当的时候结束循环。
4. 避免死循环在使用while循环时,务必小心避免死循环。
死循环是指条件始终为真,导致循环无法终止的情况。
为了避免死循环,可以在循环体中使用break语句或者在条件表达式中添加适当的判断。
四、示例:下面给出几个示例,演示了while循环的用法:1. 计算1到100的累加和:pythontotal = 0count = 1while count <= 100:total += countcount += 1print("1到100的累加和为:", total)在这个示例中,我们使用了一个循环控制变量count,并利用while循环计算了1到100的累加和。
(完整版)1《while循环》教学设计模板

《while循环》教学设计新课学习任务二while语句的执行过程1.首先计算“表达式”的值,如果非0,循环条件为真,则进入第2步,开始一次循环周期;如果为假,则进入第3步。
2.执行“{}”内的“语句序列”,这些“语句序列”称为“循环体”。
循环体执行完后,返回第1步,开始下一轮的循环条件测试。
3.结束循环,执行while循环后面的语句。
while语句的传统流程图如图2所示,其特点是先判断,后执行,若条件不成立,有可能一次也不执行。
注意:在整个循环中,初始条件只在循环开始时执行一次,以后进行的是循环条件、循环体和步长之间的循环,一般初始条件以变量初始化或变量赋值语句的形式在循环语句之前已经实现,所以在while语句中没有这一条件的体现。
教师讲解语句的执行过程,配合语句的流程图。
能够熟练的运用当型语句是作为编程技术人员的一项很重要的基本功。
)观察思考并且总结。
本节课教学的重点。
在教学时,教师要通过执行过程、生动的讲解力求使学生把流程图记住,为下一步学习其它类型的循环语句奠定了基础。
新课学习任务三while语句的应用例4-1、编程求1+2+3+4+5。
#include <stdio.h>main(){ int sum,i; sum=0; i=1;while (i <= 5)1.布置任务要求,分发任务清单2。
2.教师作为学生学习过程中的指导者、参与者、合作者,走到学生中1.思考、理解并做笔记。
2.动手编程,相互学习讨论通过教师的讲解,使学生掌握了循环结构,为学生编辑简单程序作好准备。
板书设计while循环1. while语句的一般形式。
2. while语句的执行过程。
3. while语句的应用。
WHILE语句的翻译—递归子程序法—三地址表示——编译原理课程设计报告

课程设计题目WHILE循环语句的翻译程序设计(递归下降法、输出三地址表示)学院计算机科学与技术学院专业计算机科学与技术班级0806姓名张方纪指导教师郭羽成2010 年 1 月7 日课程设计任务书学生姓名:张方纪专业班级:计算机0806班指导教师:郭羽成工作单位:计算机科学与技术学院题目: WHILE循环语句的翻译程序设计(递归下降法、输出三地址表示)初始条件:理论:学完编译课程,掌握一种计算机高级语言的使用。
实践:计算机实验室提供计算机及软件环境。
如果自己有计算机可以在其上进行设计。
要求完成的主要任务:(包括课程设计工作量及其技术要求,以及说明书撰写等具体要求)(1)写出符合给定的语法分析方法的文法及属性文法。
(2)完成题目要求的中间代码三地址表示的描述。
(3)写出给定的语法分析方法的思想,完成语法分析和语义分析程序设计。
(4)编制好分析程序后,设计若干用例,上机测试并通过所设计的分析程序。
(5)设计报告格式按附件要求书写。
课程设计报告书正文的内容应包括:1 系统描述(问题域描述);2 文法及属性文法的描述;3 语法分析方法描述及语法分析表设计;4 按给定的题目给出中间代码形式的描述及中间代码序列的结构设计;5 编译系统的概要设计;6 详细的算法描述(流程图或伪代码);7 软件的测试方法和测试结果;8 研制报告(研制过程,本设计的评价、特点、不足、收获与体会等);9 参考文献(按公开发表的规范书写)。
时间安排:设计安排一周:周1、周2:完成系统分析及设计。
周3、周4:完成程序调试及测试。
周5:撰写课程设计报告。
设计验收安排:设计周的星期五第1节课开始到实验室进行上机验收。
设计报告书收取时间:设计周的次周星期一上午10点。
指导教师签名: 2010年 11月 23日系主任(或责任教师)签名: 2010年 11月 23日WHILE循环语句的翻译程序设计(递归下降法、输出三地址表示)1任务使用C++语言编写一个while循环语句的翻译程序,使用递归下降法进行语法分析,输出三地址码表示。
2021年WHILE循环语句的翻译程序设计(递归下降法,输出四元式)之令狐采学创编

课内实践报告课程名称编译原理设计题目WHILE循环语句的翻译程序设计(递归下降法,输出四元式)学院计算机科学与技术专业班级计算机1203班姓名闵丹枫指导教师林泓*欧阳光明*创编 2021.03.07课程设计任务书学生姓名:闵丹枫专业班级:计算机1203班指导教师:林泓工作单位:计算机科学与技术学院题目: WHILE循环语句的翻译程序设计(递归下降法、输出四元式)初始条件:理论:学完编译课程,掌握一种计算机高级语言的使用。
实践:计算机实验室提供计算机及软件环境。
如果自己有计算机可以在其上进行设计。
要求完成的主要任务: (包括课程设计工作量及其技术要求,以及说明书撰写等具体要求)(1)写出符合给定的语法分析方法的文法及属性文法。
(2)完成题目要求的中间代码四元式的描述。
(3)写出给定的语法分析方法的思想,完成语法分析和语义分析程序设计。
(4)编制好分析程序后,设计若干用例,上机测试并通过所设计的分析程序。
(5)设计报告格式按附件要求书写。
课程设计报告书正文的内容应包括:1 系统描述(问题域描述);2 文法及属性文法的描述;3 语法分析方法描述及语法分析表设计;4 按给定的题目给出中间代码形式的描述及中间代码序列的结构设计;5 编译系统的概要设计;6 详细的算法描述(流程图或伪代码);7 软件的测试方法和测试结果;8 研制报告(研制过程,本设计的评价、特点、不足、收获与体会等);9 参考文献(按公开发表的规范书写)。
时间安排:设计安排一周:周1、周2:完成系统分析及设计。
周3、周4:完成程序调试及测试。
周5:撰写课程设计报告。
设计验收安排:设计周的星期五第1节课开始到实验室进行上机验收。
设计报告书收取时间:设计周的次周星期一上午10点。
指导教师签名: 9月 1日系主任(或责任教师)签名:月日WHILE循环语句的翻译程序设计(递归下降法、输出四元式)一.系统描述1.1问题描述设计一个WHILE〈布尔表达式〉DO〈赋值语句〉循环语句的词法﹑语法及语义分析程序,语法分析选择递归下降法,采用用语法制导翻译输出中间代码四元式。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
1.题目:将WHILE语句转换成四元式的程序实现设计内容及要求:设计一个语法制导翻译器,将WHILE语句翻译成四元式。
要求:先确定一个定义WHILE语句的文法,为其设计一个语法分析程序,为每条产生式配备一个语义子程序,按照一遍扫描的语法制导翻译方法,实现翻译程序。
对用户输入的任意一个正确的WHILE语句,程序将其转换成四元式输出(可按一定格式输出到指定文件中)。
1、系统描述通过设计、编制、调试一个WHILE循环语句的语法及语义分析程序,加深对语法及语义分析原理的理解,并实现词法分析程序对单词序列的词法检查和分析。
用语法制导完成语义分析,并将形成的中间代码以四元式的形式输出。
2 、文法及属性文法的描述2.1 文法的描述该文法的产生式如下所示:(1)S->while(B){E}(2)E->AE(3)E->A(4)A->iPA(5)A->i(6)B->iTi(7)B->i其中while、( 、) 、{ 、} 、P、T 、;和i均为终结符,而S、A、B、E这些大写字母均为非终结符。
T表示比较运算符,P表示算术运算符,i表示合法标识符。
2.2 属性文法的描述对该文法的属性文法描述如下:(1) S->while(B){E}prinf(if B goto E else goto next)(2) E->AE print(E.val = A.val·E.val)(3) E->A print(E.val = A.val)(4) A->i P A print(A= i.Val P A.Val)(5) A->i; A.Val = i;(6) B->i T i print(B = i1.Val T i2.Val)(7) B->i B.Val = i3 、语法分析方法描述及语法分析表设计3.1 语法分析表设计3.1.1 文法的DFA3.1.2 LR(0)分析方法描述说明LR分析法的规约过程是规范推到的逆过程,所以LR分析过程是一种规范规约的过程。
其分析过程为:由文法构造出该文法项目集,再根据项目集构造该文法的DFA,再判断是否有移进-规约和规约-规约冲突,若没有冲突则该文法为LR(0)的,若有冲突则该文法是SLR(1)的,最后可以构造出LR(0)分析表。
然后根据LR(0)分析表进行语法分析,分析过程就是进栈和规约的过程。
若能规约出开始符S,则语法正确。
反之,语法错误。
4 、中间代码形式的描述及中间代码序列的结构设计本系统中所采用的中间代码形式是四元式,是一种比较普遍采用的形式。
四元式的四个组成成分是:算符op,第一和第二运算对象ARG1和ARG2及运算结果RESULT。
运算对象和运算结果有时指用户自己定义的变量,有时指编译程序引进的临时变量。
例如a:=b*c+b*d的四元式表示如下:1)(*,b,c,t1)2)(*,b,d,t2)3)(+,t1,t2,t3)4)(:=,t3,-,a)四元式对中间结果的引用必须通过给定的名字,也就是说,四元式的联系是通过临时变量实现的。
将while( B rop C )goto L写成(jrop,B,C,L)本程序中所用到的四元式语句如下:1)形如(op,arg1,arg2,result)的赋值语句2)形如(jrop,B,C,L)的条件转移语句3)形如(=,arg1,-,result)的复写语句5、编译系统的概要设计5.1词法分析词法分析程序要做的工作是:从源程序的第一个字符开始,顺序读字符,一次读一个,根据所读进的字符识别各类单词,同时去掉源程序中的空白和注释。
词法分析检查的错误主要是挑出源程序中出现的非法符号。
所谓非法符号是指不是程序设计语言中允许出现的符号,就像自然语句中的错字。
语法分析是编译过程的核心部分。
它的任务是在词法分析识别出单词符号串的基础上,分析并判定程序的语法结构是否符合语法规则。
流程图如下:其中SP 为栈顶指针,S[i]为状态栈,X[i]为文法符号栈。
状态转换表内容按关系GOTO[Si,X]=Sj 确定,改关系式是指当前栈顶状态为Si 遇到当前文法符号为X 时应转向状态Sj 。
X 为终结符或非终结符。
ACTION[Si,a]规定了栈顶状态为Sj 时遇到输入符号c[i]应该执行的动作。
动作有以下四种可能:(1) 移进:当Sj=GOTO[Si ,a]成立,则把Sj 移入到文法符号栈。
其中i ,j 表示状态号。
(2) 规约:当在栈顶形成句柄为b 时,则用b 归约为相应的非终结符A ,即当文法中有A->b 的产生式,而b 的长度为r ,则从状态栈和文法符号栈中自栈顶向下去掉r 个符号。
并把A 移入文法符号栈内,再把满足Sj=GOTO[Si ,A]的状态移进状态栈,其中Si 为修改指针后的栈顶状态。
(3) 接受acc :当归约到文法符号栈中只剩下文法的开始符号S 时,并且输入符号串已结束即当前输入符是‘#’,则为分析成功。
(4) 报错:当遇到状态栈顶为某一状态下出现不该遇到的文法符号时,则报错,说明输入串不是该分发能接受的句子。
5.3语法制导翻译在语法分析过程中,随着分析的步步进展,根据每个产生式所对应的语义子程序Sp →#┋ ┋ ┋ ┋X[i] S[i] 输出栈(或语义规则描述的语义动作)进行翻译。
属性文法的每个符号有属性,所以每个符号入栈时,必须连属性一起入栈,这样,栈符号就由文法符号及存放该符号属性的域所组成。
由于属性类型不同,属性域存放的内容就要根据属性的类型来定。
有的可能直接存放属性值,也有的存放的是指向属性值的指针。
对于综合属性,其属性域不存放其属性值,而是存放一个指针,指向存贮该属性值的单元。
对于继承属性,其属性域直接保存其属性值。
继承属性的属性域刚入栈时为空,但是在该栈符号变成栈顶符号之前的某一时刻,它们必须接受相应的属性值,即在成为栈顶时,继承属性的属性域必须有值。
6 、详细的算法描述Main() //主程序算法{open("save.txt"); //打开输入文件open("output.txt"); //打开输出文件Print(G[S]); //显示文法G[S]int check,over=0;int m,k;char chr;for(m=0;m<MAX;m++)for(k=0;k<buf;k++)t[m].name[k]='\0'; //初始化t[]initlab(); //初始化LR(0)分析表get(sym); //取一个字符while(sym!=结束){chr=Getsymbol(); //词法分析if(chr为空格) continue;else{S[num]=chr; //保存词法分析结果num++;}}S[num++]='#';print("The while sentence is:");LR(); //语法分析if(over==-1||Check!=1){print("Your input does not tally with the grammar!");close(文件);return -1;}if(Check==1){print("Parsing completed!");close(文件);return -1;}close(文件);return 0;}LR() //语法分析算法{i=0;int k=0;status.push(0);symbol.push('#');a=输入串队列队首元素; b=结束符号;c=符号栈栈顶元素;d=状态栈栈顶元素;s=开始符号;while(a!=b&&c!=s){if(k==0){k=meet(d,a);continue;}if(k==1){k=meet(d,c);continue;}if(k==-1){出错break;}if(k==2){成功break;}}k=0;while(a==b) //分析结束{if(c==s){if(meet(d,a)==2){ONE(); //语法正确,输出四元式成功break;}}if(c!=s&&(meet(d,c)==1||meet(d,c))==0)continue;elseif(meet(d,c)==-1){出错break;}}}meet(int c,char s) //进栈规约算法{if(s==错误) return -1;int m,k=0;if(规约标志为1){规约return 1; //规约成功}else进栈}char Getsymbol() //词法分析算法{i=0;while(sym!=结束){if(sym==合法标识符的开头){int h1=0,h2=0,h3=0;while(sym==字母/数字/下划线){保存sym到token[]中;get(sym); //取下一字符}判断token[]中的字符串是否为关键字while/rop/opif(是while)return 'w'; //返回while给主程序elseif(是rop) return 'r'; //返回rop给主程序elseif(是op) return 'o'; //返回op给主程序elsereturn 'i';} //已经取了下一个字符elseif(sym==数字){while(sym==数字){保存sym到token[]中;get(sym); //取下一字符}return 'i'; //数字}elseif(sym=='('){保存sym到token[]中;get(sym); //取下一字符return '(';}elseif(sym==')'){保存sym到token[]中;get(sym); //取下一字符return ')';}elseif(sym=='='){保存sym到token[]中;get(sym);return '=';}elseif(sym==' '){get(sym);return ' ';}else{get(sym);return 'X'; //错误}}return 0;}7 软件的测试方法和测试结果7.1运行正确时的情况如下:7.2词法分析的结果保存在cifa.txt中:7.3语法分析的过程保存在yufa.txt中:7.4四元式形式的中间代码输出在obj.txt中:7.5当文法分析出错时的情况如下:当语法分析进行到第5步时由于在分析表中找不到相应的下一个状态,故会出错!8 研制报告通过本次的编译原理的课程设计,我进一步认识了LR分析方法,对于大多数用无二义性的上下文无关文法描述的语言都可以用相应的LR分析器进行识别,而且这种方法还具有分析速度快,能准确、即使地指出出错的位置。