FOR循环语句的翻译程序设计(简单优先法、三地址码)JAVA资料

合集下载

WHILE循环语句的翻译程序设计(简单优先法,三地址输出)

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循环语句的文法所描述的形式。

通过简单优先法对语句进行分析,看是否能通过给定的输入串归约到文法的开始符号。

最详细的Java循环结构解析之for循环教程(适合小白)

最详细的Java循环结构解析之for循环教程(适合小白)

最详细的Java循环结构解析之for循环教程(适合⼩⽩)⽬录循环结构的分类for循环基本语法for循环的执⾏顺序实例解析嵌套for循环基本语法实例解析总结循环结构的分类在Java中,循环结构⼀共分为三类:1.for循环2.while循环3.do-while循环for循环for循环是被使⽤最⼴泛的循环,使⽤计数器来实现循环结构,多⽤于循环次数已知的情况。

在关键字for后⾯的括号中,会有三个语句:第⼀个语句是初始化变量语句,允许声明⼀个或多个整型变量第⼆个语句是循环条件语句,在每次循环开始前,判断循环条件是否成⽴第三个语句是迭代语句,通常写变量的递增或递减基本语法for(初始化变量;循环条件;改变变量值){// 循环体;}循环停⽌的情况:1.当不满⾜循环条件后,结束循环2.当循环体执⾏到break或者return时,结束循环注意:for循环只能写在块或⽅法⾥,不能在类中直接使⽤for循环的执⾏顺序1. 获取变量的初始值2. 判断循环条件是否成⽴,如果成⽴,执⾏循环体;如果不成⽴,结束循环3. 给变量重新赋值4. 重复2,3实例解析输出5次 "循环的代码"for(int i = 0;i < 5; i++){System.out.println("循环的代码");}第⼀次循环:初始化变量:i = 0 (把0赋值给i)判断循环条件:i < 5 (i == 0,成⽴)执⾏循环体:打印"循环的代码"执⾏i++:i = 1第⼆次循环:判断循环条件:i < 5 (i == 1,成⽴)执⾏循环体:打印"循环的代码"执⾏i++:i = 2第三次循环:判断循环条件:i < 5 (i == 2,成⽴)执⾏循环体:打印"循环的代码"执⾏i++:i = 3第四次循环:判断循环条件:i < 5 (i == 3,成⽴)执⾏循环体:打印"循环的代码"执⾏i++:i = 4第五次循环:判断循环条件:i < 5 (i == 4,成⽴)执⾏循环体:打印"循环的代码"执⾏i++:i = 5第六次循环:判断循环条件:i < 5 (i == 5,不成⽴)结束循环输出结果为:循环的代码循环的代码循环的代码循环的代码循环的代码嵌套for循环for循环⾥的循环体仍然是⼀个for循环外层循环每执⾏⼀次,内层循环都会从头到尾完整的执⾏⼀次基本语法for(初始化变量; 循环条件; 改变变量值){...for(初始化变量; 循环条件; 改变变量值){...}...}实例解析两层嵌套for循环,输出外层for循环的循环次数和内层for循环的循环次数for(int i = 0; i < 2; i++){System.out.println("外层循环第" + i + "次执⾏");for(int j = 0; j < 2; j++){System.out.println("内层循环第" + j + "次执⾏");}}第⼀次循环:外层for循环:初始化变量:i = 0判断循环条件:i < 2 (i == 0,成⽴)执⾏循环体:打印:外层循环第0次执⾏内层for循环:第⼀次循环:初始化变量:j = 0 (把0赋值给j)判断循环条件:j < 2 (j == 0,成⽴)打印:内层循环第0次执⾏执⾏j++:j = 1第⼆次循环:判断循环条件:j < 2 (j == 1,成⽴)打印:内层循环第1次执⾏执⾏j++:j = 2第三次循环:判断循环条件:j < 2 (j == 2,不成⽴)结束循环执⾏i++:i = 1第⼆次循环:外层for循环:判断循环条件:i < 2 (i = 1,成⽴)执⾏循环体:打印:外层循环第1次执⾏内层for循环:第⼀次循环:初始化变量:j = 0判断循环条件:j < 2 (j == 0,成⽴)打印:内层循环第0次执⾏执⾏j++:j = 1第⼆次循环:判断循环条件:j < 2 (j == 1,成⽴)打印:内层循环第1次执⾏执⾏j++:j = 2第三次循环:判断循环条件:j < 2 (j == 2,不成⽴)结束循环执⾏i++:i = 2第三次循环:外层for循环:判断循环条件:i < 2 (i == 2,不成⽴)结束循环输出结果:外层循环第1次循环内层循环第1次循环内层循环第2次循环外层循环第2次循环内层循环第1次循环内层循环第2次循环总结到此这篇关于Java循环结构解析之for循环的⽂章就介绍到这了,更多相关Java循环结构解析之for循环内容请搜索以前的⽂章或继续浏览下⾯的相关⽂章希望⼤家以后多多⽀持!。

编译原理报告for循环语句的翻译程序

编译原理报告for循环语句的翻译程序

学号:0120810680326课程设计题目f or循环语句的翻译程序学院计算机学院专业软件工程班级0803姓名徐泽前指导教师何九周2011 年 6 月日目录1设计目的 (4)2设计环境与工具 (4)3设计任务要求与说明 (4)4设计时间 (4)5设计地点 (4)6系统描述 (4)7文法及属性文法的描述 (5)7.1文法描述 (5)7.1.1 FOR语句相关的产生式: (5)7.1.2 布尔表达式: (5)7.1.3 赋值表达式: (5)7.2属性文法的描述 (5)8 语法分析方法描述及语法分析表设计 (7)8.1语法分析方法描述 (7)8.2系统中使用的action和goto表(见附录1) (9)9 给出中间代码形式的描述及中间代码序列的结构设计 (9)10简要的分析与概要设计 (10)11 详细的算法描述 (11)11.1词法分析的数据结构设计与详细的流程图 (11)11.2词法分析流程图 (11)11.3语法制导翻译的数据结构与详细的设计图 (12)11.3.1数据结构的设计 (12)11.3.2算法描述 (13)11.3.3程序流程图 (13)12给出软件的测试方法和测试结果 (14)12.1 FOR循环语句的测试 (14)12.2词法分析出错处理 (15)12.3语法分析出错处理 (16)13收获与体会 (16)14 参考文献 (17)课程设计任务书学生姓名:徐泽前专业班级:软件0803班指导教师:何九周工作单位:计算机学院题目: for循环语句的翻译程序初始条件:程序设计语言:主要使用C语言的开发工具,或者采用LEX、YACC等工具,也可利用其他熟悉的开发工具。

算法:可以根据《编译原理》课程所讲授的算法进行设计。

要求完成的主要任务:(包括课程设计工作量及其技术要求,说明书撰写等具体要求)1.明确课程设计的目的和重要性,认真领会课程设计的题目,读懂课程设计指导书的要求,学会设计的基本方法与步骤,学会如何运用前修知识与收集、归纳相关资料解决具体问题的方法。

JavaFor循环

JavaFor循环

JavaFor循环Java For循环for循环语句是⽀持迭代的⼀种通⽤语句,是最有效、最灵活的循环结构for循环执⾏的次数是在执⾏前就确定的语法:for(初始化值;布尔表达式;迭代更新){//循环体(代码语句)}⽰例1:package com.shun.struct;public class ForDemo01 {public static void main(String[] args) {//while循环与for循环,输出的结果都是⼀样的//写出0-100之间所有的数int a = 1;//初始化值while (a<=100){//布尔表达式,条件判断System.out.println(a);//循环体a+=1;//迭(die)代}System.out.println("while循环结束");for (int i = 1;i<=100;i++){System.out.println(i);}System.out.println("for循环结束");/*最先执⾏初始化步骤。

可以声明⼀种类型,但可初始化⼀个或多个循环控制变量,也可以是空语句然后检查布尔表达式的值,如果为true,循环体被执⾏。

如果为false,循环终⽌,开始执⾏循环体后⾯的语句执⾏⼀次循环后,更新循环控制变量(迭代因⼦控制循环变量的增减)再次检测布尔表达式。

循环执⾏上⾯的过程*///for死循环for (;;){}}}⽰例2:package com.shun.struct;public class ForDemo02 {public static void main(String[] args) {//for循环//练习1:计算0到100之间的奇数和,偶数和int oddsum = 0;int evensum = 0;for (int i = 0; i <= 100; i++) {if (i%2==0){//偶数oddsum+=i;}else{//奇数evensum+=i;}}System.out.println("偶数和为:"+oddsum);//输出的结果是2550System.out.println("奇数和为:"+evensum);//输出的结果是2500}}⽰例3:package com.shun.struct;public class ForDemo03 {public static void main(String[] args) {//for循环//练习2:⽤for循环输出1-1000之间能被5整除的数,并且每⾏输出3个for (int i = 0; i <= 1000; i++) {if (i%5==0){System.out.print(i+"\t");//\t代表的是⼀个Tab键,⼀个⼤空格 }if (i%15==0){System.out.println();}}//print输出完后不换⾏//println输出完后换⾏}}。

java 循环 翻译

java 循环 翻译

java 循环翻译Java是一种非常流行的编程语言,它的循环结构和其他语言相同。

在本文中,我们将详细讨论Java中的循环结构和如何使用它们来解决问题。

循环是编程中最基础和最有用的概念之一,允许我们重复执行一些代码。

在Java中,我们有三种类型的循环:for循环,while循环,和do-while循环。

1. for循环for循环是用于重复执行一系列语句的最常用循环结构之一。

它通常用于迭代一个数组或集合,或者在已知循环次数的情况下执行代码。

下面是一种常见的使用for循环的方式:```for (int i = 0; i < 10; i++) {// 执行代码}```这个for循环将会执行十次,i的值将会从0到9递增。

注意,for循环中的语法结构包括三个部分:初始化语句,条件判断语句和迭代语句。

初始化语句在进入循环时执行一次,条件判断语句在每次迭代之前被评估,如果条件为true,则循环继续,否则跳出循环。

迭代语句在循环体中的代码执行完之后执行。

2. while循环while循环是用于执行代码块,只要指定的条件为真。

它通常用于在不知道循环次数的情况下执行代码,比如读取数据文件,直到文件结束。

下面是一种常见的使用while循环的方式:```while (条件) {// 执行代码}```在while循环中,当条件为true时,代码块会被重复执行。

当条件为false时,循环停止。

3. do-while循环do-while循环与while循环非常相似。

它们的主要区别是,do-while 循环中代码块至少被执行一次,然后在每次循环迭代之前评估条件。

下面是一种常见的使用do-while循环的方式:```do {// 执行代码} while (条件);```在do-while循环中,代码块会在条件被评估之前至少执行一次。

如果条件为true,则代码块继续执行。

如果条件为false,则循环停止。

以上是Java中的三种常见的循环结构。

FOR循环语句的翻译程序设计(递归下降法、输出四元式表示)

FOR循环语句的翻译程序设计(递归下降法、输出四元式表示)

1、系统描述 (2)1.1、实验思想 (2)1.2、设计内容 (2)1.3、翻译过程 (2)1.3.1、词法分析: (2)1.3.2、语法分析: (3)1.3.3、中间代码生成: (4)1.3.4、属性文法: (4)2、递归下降法 (4)2.1、递归下降法的主要思想: (4)2.2、用程序表示递归子程序的内部结构: (4)2.3、递归下降法对文法的限制: (5)3、语法制导翻译 (5)3.1、翻译任务的处理过程 (5)3.2、语法制导翻译: (5)3.3、基于属性文法的处理方法 (6)4、中间代码形式的描述及中间代码序列的结构设计 (6)5、简要的分析与概要设计 (6)5.1、词法分析: (6)5.2源代码 (8)5.3 运行结果 (9)6、测试方法和测试结果 (15)6.1测试过程 (15)6.2测试结论 (17)7、课程设计总结 (18)8、参考文献 (19)1、系统描述1.1、实验思想通过设计、编制、调试一个FOR循环语句的语法及语义分析程序,加深对语法及语义分析原理的理解,实现词法分析程序对单词序列的词法检查和分析,并且实现对单词序列的语法分析、语义分析以及中间代码生成。

1.2、设计内容本设计按照要求设计出for语句的简单文法,并使用递归下降分析法对用户输入的程序进行分析和翻译。

对下列正确的程序输入:for i=1 step 1 until 10 do k=j #结果程序要对该输入进行词法分析,然后利用递归下降的分析法对词法分析得到的单词序列进行语法分析,经过语法制导翻译显示出等价的三地址表示的中间代码。

对于错误的程序输入,如:For i=1 step 1 until 10 k=j#结果程序要指出程序出错。

1.3、翻译过程1.3.1、词法分析:词法分析是计算机科学中将字符序列转换为单词(Token)序列的过程。

进行语法分析的程序或者函数叫作词法分析器(Lexical analyzer,简称Lexer),也叫扫描器(Scanner)。

java for 循环写法

java for 循环写法

java for 循环写法Java中提供了多种循环结构来实现重复执行一段代码的功能,包括for循环、while循环和do-while循环。

本文将详细介绍for循环的写法及其相关参考内容。

for循环是最常用的一种循环结构,它由三个部分组成:初始化部分、循环条件和更新部分。

其基本语法如下所示:```for (初始化部分; 循环条件; 更新部分) {// 循环体}```初始化部分用于设置循环变量的初始值,循环条件是一个布尔表达式,当其为true时循环执行,更新部分用于更新循环变量的值。

循环体是需要重复执行的代码。

例如,以下代码段使用for循环从1加到10,并将结果打印出来:```int sum = 0;for (int i = 1; i <= 10; i++) {sum += i;}System.out.println("1加到10的和为:" + sum);```上述代码首先定义了一个int类型的变量sum,用于保存累加结果。

然后利用for循环,初始化sum为0,循环条件为i小于等于10,每次循环增加i的值,直到i等于10为止。

在循环体中,将i的值累加到sum上。

最终,输出sum的值。

为了更好地理解for循环的用法,以下是一些相关参考内容的例子:1. 打印乘法表:```for (int i = 1; i <= 9; i++) {for (int j = 1; j <= i; j++) {System.out.print(j + "×" + i + "=" + i * j + "\t");}System.out.println();}```以上代码使用嵌套的for循环,外层循环控制乘法表的行数,内层循环控制每行的列数。

2. 遍历数组:```int[] array = {1, 2, 3, 4, 5};for (int element : array) {System.out.println(element);```上述代码使用了增强型for循环,可直接遍历数组中的每个元素并输出。

java for循环方法

java for循环方法

java for循环方法Java中的for循环是一种非常常用的控制结构,可以用来重复执行一段代码块。

它的语法形式为:for (初始化; 条件; 更新) { 代码块}。

在这篇文章中,我们将深入探讨Java中的for循环,并介绍一些常见的用法和技巧。

让我们来看一下for循环的语法。

初始化部分用于初始化循环变量,条件部分用于判断是否继续循环,更新部分用于更新循环变量的值。

在每次循环开始之前,都会执行一次初始化部分。

在每次循环结束之后,都会执行一次更新部分。

如果条件部分的值为true,循环将继续执行,否则循环将结束。

for循环的用法非常灵活,可以根据具体的需求进行调整。

例如,可以使用for循环来遍历数组或集合中的元素。

在循环的每一次迭代中,可以通过循环变量来访问数组或集合中的元素,并对其进行操作。

这样可以方便地处理大量的数据。

除了遍历数组或集合,for循环还可以用于实现数值的累加或累乘。

在每次循环中,可以通过更新部分来改变循环变量的值,从而实现累加或累乘的效果。

这在一些数学计算或统计分析的场景中非常有用。

for循环还可以用于实现嵌套循环。

嵌套循环是指在一个循环体内部再嵌套一个或多个循环体的情况。

通过嵌套循环,可以实现更复杂的控制逻辑。

例如,可以使用嵌套循环来输出九九乘法表或打印一些特殊的图形。

除了以上常见的用法,for循环还可以结合条件语句来实现更灵活的控制流程。

例如,可以使用break语句来提前终止循环,或者使用continue语句来跳过当前迭代,进入下一次迭代。

在使用for循环时,我们还需要注意一些常见的问题。

首先是循环变量的作用域。

循环变量只在循环体内部有效,如果在循环体外部使用循环变量,将会导致编译错误。

其次是循环条件的判断。

循环条件的判断结果应该是一个布尔值,如果判断结果为其他类型,将会导致编译错误。

最后是循环变量的更新。

循环变量的更新部分应该能够使循环条件的判断结果发生改变,否则将导致死循环。

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

学号:0121210340527课内实践报告课程名称编译原理题目FOR循环语句的翻译程序设计(简单优先法、输出三地址码)学院计算机科学与技术专业计算机科学与技术班级1201姓名李潇颖指导教师林泓2014 年12 月9 日课内实践任务书学生姓名:李潇颖专业班级:计算机1201班指导教师:林泓工作单位:计算机科学与技术学院题目: FOR循环语句的翻译程序设计(简单优先法、输出三地址码)初始条件:理论:学完编译课程,掌握一种计算机高级语言的使用。

实践:计算机实验室提供计算机及软件环境。

如果自己有计算机可以在其上进行设计。

要求完成的主要任务:(包括课内实践工作量及其技术要求,以及说明书撰写等具体要求)(1)写出符合给定的语法分析方法的文法及属性文法。

(2)完成题目要求的中间代码三地址码的描述。

(3)写出给定的语法分析方法的思想,完成语法分析和语义分析程序设计。

(4)编制好分析程序后,设计若干用例,上机测试并通过所设计的分析程序。

(5)设计报告格式按附件要求书写。

课内实践报告书正文的内容应包括:1 系统描述(问题域描述);2 文法及属性文法的描述;3 语法分析方法描述及语法分析表设计;4 按给定的题目给出中间代码形式的描述及中间代码序列的结构设计;5 编译系统的概要设计;6 详细的算法描述(流程图或伪代码);7 软件的测试方法和测试结果;8 研制报告(研制过程,本设计的评价、特点、不足、收获与体会等);9 参考文献(按公开发表的规范书写)。

时间安排:设计安排一周:周1、周2:完成系统分析及设计。

周3、周4:完成程序调试及测试。

周5:撰写课内实践报告。

设计验收安排:设计周的星期五第1节课开始到实验室进行上机验收。

设计报告书收取时间:设计周的次周星期一上午10点。

指导教师签名:年月日系主任(或责任教师)签名:目录1 系统描述(问题域描述) (3)1.1设计目的 (3)1.2设计内容描述 (3)2.文法的描述 (3)3 语法分析方法描述及语法分析表设计 (4)3.1语法分析方法描述 (4)3.2 分析法操作步骤 (4)3.3优先关系矩阵 (5)4 中间代码形式的描述 (6)5 编译系统的概要设计(主要函数) (6)6 详细的算法描述(流程图) (7)6.1词法分析过程 (7)6.2语法分析过程 06.3三地址码的输出 07 测试方法和测试结果 (1)8.心得体会 (4)9.代码(完整) (5)10.本科生课内实践成绩评定表 (14)FOR循环语句的翻译程序设计(简单优先法、输出三地址码)1 系统描述(问题域描述)1.1设计目的通过学习编译原理的相关内容,设计并编写FOR循环语句的翻译程序,使用简单优先法,按三地址码输出,能够实现词法分析,语法和语义的分析,加深对所学知识的理解,并且能够熟练运用到实际当中。

1.2设计内容描述FOR循环语句的基本格式如下:FOR(表达式1;表达式2;表达式3){赋值语句}根据所给题目要求,设计出符合FOR循环语句的文法及属性文法的描述,语法分析方法以及三地址码的输出方式,罗列出词法分析和语法分析的流程,根据语法规则设计输入输出方法,简单优先法中的优先关系表格。

设计好并且进行编译,设计若干输入输出用例(包括正确的输入和错误的输入,用来检查程序的完整性)。

2.文法的描述根据For语句的特点,制定的产生式规则及由产生式对应的语义动作如下:H->f(G;A;B){S;}G O T O H->f(G;C;D){S;}G O T O G->i1=i2i1.C O D E=i2.C O D E A->i1<i2 IFi1.CODE>=i2.CODE GOTO OVER B->i d i.C O D E=i.C O D E+1 C->i1>i2 IFi1.CODE<=i2.CODE GOTO OVER D->i a i.C O D E=i.C O D E-1 S->j=M j.C O D E=M.C O D E M->E M.C O D E=E.C O D E E->W E.C O D E=W.C O D EW->W+U W.CODE=W.CODE+U.CODE W->W-U W.CODE=W.CODE-U.CODE W->U W.C O D E=U.C O D E U->T U.C O D E=T.C O D E T->T*F T.CODE=T.CODE”F.CODE T->T/F T.CODE=T.CODE/F.CODE T->F T.C O D E=F.C O D E F->(E) F.CODE=(E.C ODE) F->j F.C O D E=j.C O D E (备注:其中d表示--,a表示++)3 语法分析方法描述及语法分析表设计3.1语法分析方法描述本次课内实践要求使用简单优先关系方法。

简单优先分析法的基本思想史对一个文法按照一定原则求出该文法所有符号即包括终结符和非终结符之间的优先关系确定归约过程中的句柄,它的归约实际上是一种规范归约。

一个文法是简单优先文法必须满足以下条件(1)在文法符号集V中,任意两个符号之间最多只有一种优先关系成立;(2)在文法中任意两个产生式没有相同的右部。

三种优先关系及其判定方法如下所示:(1)X=Y 表示X和Y的优先关系相等,当且仅当G中存在产生式规则A→…XY…;(2)X<Y表示X的优先性比Y的优先性小,当且仅当G中存在产生式规则A→…XB…,且B Y…;(3)X>Y表示X的优先性比Y的优先性大,当且仅当G中存在产生式规则A→…BD…,且B…X和D Y…;(4)对任何X,若文法开始符号S→X…,则#<X,若S→…X则X>#。

3.2 分析法操作步骤由简单优先分析法的基本思想设计的如下算法,首先要构造优先关系矩阵(如3.3所示),并将文法产生式保存,设置符号数组S:(1)将输入符号串a1a2…an# 依次逐个保存符号数组S中,直到遇到数组中第一个符号ai 的优先性>下一个待输入符号aj为止。

(2)数组当前符号ai 为句柄尾,由此向左在数组中找句柄的头符号ak,即找到a k-1<ak为止。

(3)由句柄ak…ai在文法的产生式中查找右部为ak…ai的产生式,若找到则用相应左部代替句柄,找不到则为出错,这是可断定输入串不是该文法的句子。

(4)重复(1)(2)(3),直到归约完输入符号串,数组中只剩文法的开始符号为止。

3.3优先关系矩阵H G A B S C D M E W U T F f ( ; ) { } i = < ++ > --j + - * / #H > G =A =B =S =C =D =M >E > =W > > = =U > > > >T > > > > = =F > > > > > >f =( = = < < < < < < <; = = = = = <) > > = > > > > { = <} > i > = = = = == = < < < < < < = << =++>> =-->j > > = > > > > + = < < < <- = < < < <* = < </ = < <# < <空白表示,没有优先级关系4 中间代码形式的描述三地址码是由下面一般形式的语句构成的序列:x:=y op z其中,xyz为名字、常数或变量;op代表运算符。

对于本程序的具体三地址码输出,预计显示结果如下:给定输入程序for(i=0;i<10;i++){j=b+c;}三地址码输出为<1> i=0<2> goto <5><3> i++<4> if i<10 goto<5> else goto<7><5> j=b+c<6> goto<3><7> end5 编译系统的概要设计(主要函数)主要函数及对应实现的功能如下表所示:函数名称实现功能Main() 程序入口cifafenxi() 进行词法分析bijiao() 比较两个符号的优先级别sandizhima() 保存产生的三地址码序列readFileByChars()将文本中的数据入读Isguanjianzi() 判断是否为关键字Isjiefu() 判断是否为界符Isyunsuanfu() 判别是否为运算符6 详细的算法描述(流程图)6.1词法分析过程给定输入程序for(i=0;i<10;i++){j=b+c;} 词法分析结果为 关键字为:1; 标识符为:2; 常数为:3; 运算符为:4; 界符为:5 <for 1> <( 5> <i 2> <= 4> <0 3> <; 5> <i 2> << 4> <10 3> <; 5> <i 2> <++ 4> <) 5><{ 5><j 2> <= 4> <b 2> <+ 4> <c 2> <; 5> <} 5>6.2语法分析过程6.3三地址码的输出给定输入程序for(i=0;i<10;i++){j=b+c;} 三地址码输出为<1> i=0<2> goto <5><3> i++<4> if i<10 goto<5> else goto<7><5> j=b+c<6> goto<3><7> end武汉理工大学《编译原理》课内实践说明书7 测试方法和测试结果计算机系统:Windows 7编译调试环境:Eclipse程序语言:JAVA设计测试用例:(1)data.txt中保存如下程序段for(i=0;i<10;i++){j=b+c;} 输出如下结果(2)data.txt 中保存如下程序段for(i=5;i>0;i--){j=a*(h+c);}输出如下结果8.心得体会经过这次课内实践,使我更加扎实的掌握了有关编译原理方面的知识,在编写程序的过程中遇到了许多问题,但经过一遍遍的调试终于使得程序可以顺利运行。

相关文档
最新文档