for循环语句的翻译

合集下载

pythonforin循环语句

pythonforin循环语句

pythonforin循环语句在Python中,for循环语句是一种常用的语法结构,用于遍历可迭代对象中的元素。

在这里,我们将详细介绍Python中的for循环语句,包括其用法、语法和特点等方面的知识。

1. for循环语句的语法for循环语句的基本语法如下:for 变量in 可迭代对象:循环体代码块其中,“变量”是在每轮循环中代表当前元素的变量名,“可迭代对象”则是指支持迭代操作的对象,例如列表、元组、集合、字符串等等。

在for循环中,循环体代码块将被重复执行,每次执行时都将把可迭代对象的下一个元素赋值给变量,直到所有元素都被遍历完毕为止。

2. for循环语句的用途for循环语句是用于遍历可迭代对象中的元素,可以用来实现各种不同的功能:(1)遍历列表中的元素,进行计算或处理;(2)遍历字符串中的字符,检查或替换某些字符;(3)遍历文件中的数据行,分析或处理数据;(4)遍历字典中的键值对,对键或值进行操作;(5)按照一定规律生成一些数字或对象,例如序列、九九乘法表等。

3. for循环语句的特点(1)可迭代对象需要支持迭代操作,只有支持迭代操作的对象才能使用for循环进行遍历操作。

(2)for循环会在每次遍历时自动将下一个元素赋值给变量,因此不需要手动调用迭代器的next()方法进行遍历。

(3)可以使用break语句提前跳出循环,或者使用continue语句跳过本次循环。

(4)可以使用else语句在循环正常结束后执行一些额外的操作。

例如,在for 循环后面添加一个else语句可以在循环正常结束后输出一条“循环结束”的提示信息。

4. for循环语句的示例接下来,我们通过一些示例来演示for循环语句的使用方法。

(1)使用for循环遍历列表中的元素:# 遍历列表中的元素lst = [1, 2, 3, 4, 5]for num in lst:print(num)# 输出:# 1# 2# 3# 4# 5(2)使用for循环遍历字符串中的字符:# 遍历字符串中的字符s = 'hello world'for ch in s:print(ch)# 输出:# h# e# l# l# o## w# o# r# l# d(3)使用for循环遍历文件中的数据行:# 遍历文件中的数据行with open('data.txt', 'r') as f:for line in f:print(line.strip())# 输出:# This is line 1.# This is line 2.# This is line 3.(4)使用for循环遍历字典中的键值对:# 遍历字典中的键值对d = {'apple': 3, 'banana': 2, 'orange': 1} for key, value in d.items():print(key, value)# 输出:# apple 3# banana 2# orange 1(5)使用for循环生成九九乘法表:# 生成九九乘法表for i in range(1, 10):for j in range(1, i + 1):print(i, '*', j, '=', i * j, end='\t')print()# 输出:# 1 * 1 = 1# 2 * 1 = 2 2 * 2 = 4# 3 * 1 = 3 3 * 2 = 6 3 * 3 = 9# 4 * 1 = 4 4 * 2 = 8 4 * 3 = 12 4 * 4 = 16# 5 * 1 = 5 5 * 2 = 10 5 * 3 = 15 5 * 4 = 20 5 * 5 = 25# 6 * 1 = 6 6 * 2 = 12 6 * 3 = 18 6 * 4 = 24 6 * 5 = 30 6 * 6 = 36# 7 * 1 = 7 7 * 2 = 14 7 * 3 = 21 7 * 4 = 28 7 * 5 = 35 7 * 6 = 42 7 * 7 = 49# 8 * 1 = 8 8 * 2 = 16 8 * 3 = 24 8 * 4 = 32 8 * 5 = 40 8 * 6 = 48 8 * 7= 56 8 * 8 = 64# 9 * 1 = 9 9 * 2 = 18 9 * 3 = 27 9 * 4 = 36 9 * 5 = 45 9 * 6 = 54 9 * 7 = 63 9 * 8 = 72 9 * 9 = 81以上是针对for循环语句的介绍,可以看到,for循环语句是Python中非常常用的一个语法结构,可用于实现各种各样的遍历操作。

for用法归纳与总结

for用法归纳与总结

for循环的基本用法for循环是一种常用的控制结构,用于重复执行一段代码。

在Python中,for循环的语法如下:for变量in序列:代码块其中,变量是迭代器(iterator),用于依次访问序列中的元素;序列可以是列表、元组、字符串等可迭代对象;代码块是在每次迭代时执行的一系列操作。

for循环的工作原理for循环的工作原理可以简单概括为以下几个步骤:1.遍历序列:for循环首先会获取序列的第一个元素,并将其赋值给变量;2.执行代码块:然后,for循环会执行代码块中的操作,可以根据需要访问当前迭代的元素;3.迭代下一个元素:执行完代码块后,会继续获取序列中的下一个元素,直到序列中的所有元素都被遍历完毕。

具体来说,可以通过以下示例代码来理解for循环的工作原理:fruits = ["apple", "banana", "cherry"]for fruit in fruits:print(fruit)在这个示例中,for循环会依次遍历fruits列表中的元素,将每个元素赋值给fruit变量,并执行print(fruit)语句打印出来。

运行结果如下:applebananacherry可以看到,for循环按顺序访问了fruits列表中的每个元素,并执行了相应的打印操作。

for循环的高级用法除了基本用法外,for循环还可以结合其他关键字和函数,实现更灵活的功能。

range()函数range()函数是常用于生成一个指定范围内的整数序列的函数,可以与for循环搭配使用。

它的常见用法如下:for i in range(start, stop, step):代码块其中,start是起始值(默认为0),stop是结束值(不包含stop本身),step 是步长(默认为1)。

下面是一个使用range()函数的示例:for i in range(1, 6):print(i)输出结果为:12345enumerate()函数enumerate()函数用于在for循环中同时获取元素索引和值,可以方便地追踪迭代的位置。

1200plcscl for语句

1200plcscl for语句

1200plcscl for语句"for"语句是一种循环语句,它的主要功能是重复执行一段代码块特定次数,每次重复都会更新循环变量的值。

"for"语句的结构通常包含一个初始化语句、一个循环条件语句和一个循环更新语句。

以下是"for"语句的常见用法:1.基本形式:```pythonfor变量in可迭代对象:#执行的代码块```举例说明:遍历列表中的元素```pythonfruits = ["apple", "banana", "cherry"]for fruit in fruits:print(fruit)```在上述示例中,变量fruit作为循环变量,逐个遍历了列表fruits中的元素,并将每个元素打印出来。

2.指定循环次数:```pythonfor i in range(5):#执行的代码块```举例说明:重复打印五次数字```pythonfor i in range(5):print(i)```在上述示例中,变量i作为循环变量,从0到4的范围内进行遍历,并将每个数字打印出来。

3.带有循环控制语句:```pythonfor变量in可迭代对象:#执行的代码块if条件:break #结束循环if条件:continue #跳过本次循环,进入下一次循环#执行的代码块```举例说明:遍历列表元素,遇到特定条件时跳过循环```pythonfruits = ["apple", "banana", "cherry"]for fruit in fruits:if fruit == "banana":continueprint(fruit)```在上述示例中,当循环变量fruit的值为"banana"时,通过使用"continue"关键字,跳过了当前循环,直接进入下一次循环。

编译原理报告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.明确课程设计的目的和重要性,认真领会课程设计的题目,读懂课程设计指导书的要求,学会设计的基本方法与步骤,学会如何运用前修知识与收集、归纳相关资料解决具体问题的方法。

for循环语句基本用法及示例

for循环语句基本用法及示例

for循环语句基本用法及示例for循环语句是在编程中最常用的循环控制结构之一,它可以帮助你按序地执行一组语句,可以使你的程序变得更加有效率、灵活、简洁。

它的一般基本语法格式为:for(初始化; 循环条件; 迭代器){循环体;}其中for循环语句由3个部分组成:1)初始化:仅在循环开始之前执行一次,一般用于声明变量并将其初始化;2)循环条件: 常用于控制执行循环的次数,当循环条件的结果为false时,循环结束;3)迭代器:通常用于更新变量值,每次循环末尾执行一次,如增量或减量。

下面利用for循环来计算1+2+3+···+10的和:int total = 0;for(int i=1; i<=10; i++){total += i;}System.out.println("结果:"+total);上面程序的代码中,首先进行初始化工作,声明一个int类型变量total用于保存计算结果,同时声明另一个int类型变量i用于控制循环,其初始值设定为1。

然后把循环条件设为i<=10,也就是只有当i的值小于等于10时,循环才能继续下去,这就可以达到控制循环次数的效果。

最后设定每次循环末尾的迭代器(i++),它的作用是使i的值从1每次循环增加1,最终当i的值为11时,满足循环条件i<=10失败,循环结束。

下面再看一下利用for循环计算10的阶乘的示例程序:通过上面两个示例,你可以学会如何正确使用for循环,并且你也可以根据自己的需要定制出各种形式的for循环,以处理大量的重复任务,如果你不清楚for循环怎么使用,可以结合我们上面的示例程序,加以理解,并一起做些练习,不断摸索,慢慢就能掌握for循环语句这一重要的控制结构了。

新代宏程序实例

新代宏程序实例

1、REPEAT直到型循环 REPEAT <循环体>UNTIL <条件表达式> END_REPEAT;说明:REPEAT直到型循环控制,先执行循环体,后判断条件表达式,当条件满足时退出循环。

例如:% @MACRO // 启动MACRO语法 % @MACRO (宏指令开始) #1=-0.2 REPEATREPEAT(重复)G01Z#1F80; G1X-20.F700; #2=#1-0.2; G1Z#2F80; G1X-53.F700; #1=#1-0.4;UNTIL (#1<-2.6) END_REPEAT; UNTIL(到…为止,在…以前)END(结束,终止) M30;2、WHILE当型循环WHILE <条件表达式> DO→<循环体>→END_WHILE; 说明:WHILE当型循环控制,先判断条件表达式,当条件满足时执行循环体,否则退出循环。

例如:% @MACRO; #1=-0.2;WHILE (#14>-2.6) DOWHILE(虽然; 在…期间; 与…同时)IF #1<-2.6THENEXIT; EXIT(退出; 退场; 离开; 去世) END_IF; G01Z#1F80; G1X-20.F700;#2=#1-0.2; G1Z#2F80; G1X-53.F700; #1=#1-0.4; END_WHILE; M303、FOR循环FOR 翻译: prep.为,为了; 倾向于; 关于; 当作;conj.因为,由于;FOR <循环变量> := <表达式1> TO <表达式2> [ BY <表达式3>] DO <循环体> END_FOR;说明:FOR循环控制,式中各参数意义如下循环变量——控制循环次数的变量;表达式1——循环计数的起始值,可为整数或表达式;表达式2——循环计数的终止值,可为整数或表达式;表达式3——循环计数每次的累加值,可为整数或表达式;循环体——循环每次执行内容;FOR循环执行过程为:先给循环变量赋起始值,然后判断循环变量是否为终止值,当循环变量已为终止值时退出循环,否则执行循环体,再对循环变量加上每次累加值,4、无条件转移GOTO转移语句语法:GOTO n;说明:无条件地跳到指定的n行号执行,其中n可为整数或表达式。

for循环实例

for循环实例
% positive, negative, or zero.
%
% Record of revisions:
% Date Programmer Description of change
% ==== ========== ====================
%12/08/97S. J. Chapman Original code
4.只要在控制表达式中还有剩余的列,步骤3将会一遍一遍地重复执行。
第一,考虑下面的例子
for ii = 1:10
Statement 1
...
Statement n
end
在这种情况下,控制表达式产生了一个1ⅹ10数组,所以语句1到n将会被重复执行10次。循环系数ii在第一次执行的时侯是1,第二次执行的时侯为2,依次类推,当最后一 次执行时,循环指数为10。在第十次执行循环体之后,再也没有新的列赋值给控制表达式,程序将会执行end语句后面的第一句。注意在循环体最后一次执行后,循环系数将会一直为10。
end
好的编程习惯
在循环体中绝不修改循环指数的值。
3.我们在第二章已经学过,用赋值的方法可以扩展一个已知的数组。例如,语句
arr = 1:4;
定义了一个数组[1234]。如果执行语句
arr(8) = 6;
将会产生一个八元素数组[12340006]。不幸的是,每一次扩展数组,都要经过以下步骤:第一步,创建一个新数组。第二步,把旧数组的元素复制到新数组当中。第三步,把扩展的元素写入新数组。第四步,删除旧数组。对于大数组来说这些步骤是相当耗时的。
for
for循环结构,以指定的数目重复地执行特定的语句块。For循环的形式如下
for index = expr

批处理命令——for

批处理命令——for

批处理命令——for【1】for命令简介 先把for循环与for命令类⽐⼀下,这样学习理解快。

for 循环语句,⼀般格式如下:1for (表达式1;表达式2;表达式3)2 {3循环体;4 } 1. 表达式1 ⼀般为初始状态赋值表达式,给控制变量赋初值。

2. 表达式2 ⼀般为关系表达式或逻辑表达式,为循环控制条件。

3. 表达式3 ⼀般为每次执⾏循环体后向控制变量重新赋值的表达式(给控制变量增量或减量)。

4. 语句:循环体,⼀般为复合语句(即可能需要执⾏多条语句)。

举个实例:1for (int i=0; i < 100; ++i)2 {3 cout << i << endl;4 } for 命令,⼀般格式如下: 在cmd窗⼝中使⽤格式:FOR %variable IN (set) DO command [command-parameters] 在批处理脚本中使⽤格式:FOR %%variable IN (set) DO command [command-parameters] 1. 在cmd窗⼝中使⽤,变量名必须⽤单%引⽤(即:%variable);在批处理脚本中使⽤,变量名必须⽤双%引⽤(即:%%variable)。

2. for、in和do是for命令的三个关键字,缺⼀不可。

3. 关键字in之后,do之前的括号不能省略。

举个实例:新建⼀个⽂本⽂件,命名为fordemo,修改⽂件类型为bat,⽤Notepad++打开编辑内容为:1@echo off2for %%i in (1 2 3 4 5) do@echo %%i3pause>nul 执⾏结果: 嗯哼,原来for命令就这么简单?嗨,同学,不要浮躁,保持冷静,更要理智。

下⾯,且看对上例语句的分析: 从命令组成结构由左向右剖析,除过关键字,依次分别为: 1. 变量名为i,i太简单,作为变量名不具备见名知意的特点。

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

课程设计任务书学生姓名:辛波专业班级:计算机0707班指导教师:彭德巍工作单位:计算机科学与技术学院题目: FOR循环语句的翻译程序设计(递归下降法、输出四元式)初始条件:理论:学完编译课程,掌握一种计算机高级语言的使用。

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

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

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

(2)完成题目要求的中间代码四元式的描述。

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

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

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

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

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

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

周5:撰写课程设计报告。

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

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

指导教师签名: 2010年 01月 08日系主任(或责任教师)签名: 2010年 01月 08日FOR循环语句的翻译程序设计----递归下降法、输出四元式1 系统描述1.1目的通过设计、编制、调试一个FOR循环语句的语法及语义分析程序,加深对语法及语义分析原理的理解,并实现词法分析程序对单词序列的词法检查和分析。

1.2设计内容及步骤对循环语句: FOR(表达式1;表达式2;表达式3) {赋值语句}(1)写出递归下降语法分析方法要求的文法和属性文法描述。

(2)描述递归下降语法分析方法的思想。

(3)给出中间代码序列的结构设计。

(4)完成相应的词法分析、语法分析和语义分析程序设计。

1.2.1 词法分析将词法分析程序设计成一个子程序,每当语法分析程序需要一个单词时,则调用该子程序。

词法分析程序每调用一次,便从源程序文件中读入一些字符,直到识别出一个单词。

1.2.2 语法分析采用递归下降方法,为对应文法中的每个非终结符编写一个递归过程,每个过程的功能是识别由该非终结符推出的串。

若输入串是给定文法的句子,则从文法的开始符号出发一定能推导出与输入的单词串完全相同的句子。

1.2.3 语义分析在语法分析的同时可由语法分析程序调用相应的语义子程序进行语义处理,完成附加在所使用的产生式上的语义规则描述,并生成四元式的中间代码形式。

1.2.4 测试用例和测试结果设计不同的测试用例以显示程序的各种功能,包括简单的for循环和for循环的嵌套。

并记录测试结果。

2 文法及属性文法的描述2.1文法描述本系统中所使用FOR循环语句的文法包括FOR语句本身,赋值表达式和布尔表达式。

具体文法产生式如下:2.1.1 FOR语句相关的产生式:1)S->for(W)Sx 2)W->A;W13)W1->B;W2 4)W2->A5)Sx->Ax 6)Sx->{Am}7)Am->AmAx 8)Am->Ax2.1.2 布尔表达式:9)B->B||L 10)B->L11)L->L&&M 12)L->M13)M->!M 14)M->K15)K->(B) 16)K->false17)K->true 18)K->id19)K->idScid 20)Sc-> !=21)Sc-> == 22)Sc-> <=23)Sc-> >= 24)Sc-> <25)Sc-> >2.1.3 赋值表达式:26)Ax->A; 27)A->id=E28)E->E+T 29)E->E-T30)E->T 31)T->T*F32)T->T/F 33)T->F34)F->id 35)F->(E)36)F->num2.2属性文法的描述3 语法分析方法描述及语法分析表设计3.1语法分析方法描述递归下降分析方法是一种自顶向下语法分析方法,其目的是从文法的开始符号开始,根据输入字符串进行最左推导,试图推导出给定的字符串。

或者说,从根节点(文法开始符号)开始,自上而下,从左到右地为输入字符串建立一棵语法树,并以预先确定的顺序创建语法树的节点。

递归下降分析法可能需要回溯,即需要重复地扫描输入。

递归子程序法的实现思想是对应每个非终结符编写一个递归过程,每个过程的功能是识别由该非终结符推出的串,当某非终结符的产生式有多个候选式时,能够按照LL(1)形式唯一地确定选择某个候选式进行推导,因此首先要消除左递归。

其文法及属性文法如图1和图2所示。

由于递归下降法对每个过程可能存在直接或间接的递归调用,所以对某个过程在退出之前可能又要被调用,因此有些信息需要保留,通常在入口时需保留某些信息,出口时需恢复。

由于递归过程是遵循先进后出规律,通常开辟栈来处理。

3.2操作符优先级在对for循环语句进行翻译时,涉及到对赋值表达式和布尔表达式语句的翻译。

在文法的描述中给出了算术运算符、关系运算符和逻辑运算符之间的优先级关系,其结合性由下表所示:图3操作符优先级4 给出中间代码形式的描述及中间代码序列的结构设计4.1中间代码形式的描述常见的中间代码形式有逆波兰记号,三元式,四元式和树形表示。

本课程设计输出的中间代码的表示方法是四元式。

它是带有四个域的记录结构,这四个域分别称为算符op,第一运算对象arg1,第二运算对象arg2及结果result。

域op包含一个代表运算符的内部码。

例如x = y op z的四元式表示为(op,y,z,x),即将y置于arg1域,z置于arg2域,x置于result域,= 置于算符域op,如果op是单目运算符,例如非‘!’( x = !y )的四元式表示形式中不用填arg2。

通常,四元式中的arg1,arg2和result的内容都是一个指针,此指针指向有关名字的符号表入口。

这样,临时变量名也要填入符号表中。

4.2中间代码序列的结构设计型如for[ parse1;parse2;parse3]{list}的中间代码序列的结构设计如下:图4中间代码序列结构设计5 简要的分析和概要设计5.1简要的分析本程序采用递归下降的方法实现FOR循环语句的翻译,并以四元式的中间代码形式输出。

经过词法分析,语法分析,同时执行语法制导翻译将中间结果表达出来,然后通过一个函数转化成要求的四元式结构的中间代码。

上述的这个过程在一遍扫描过程中完成:在语法分析的过程中调用词法分析来不断的分解出下一个句柄;在用递归下降方法进行语法分析的同时进行中间形式数据的保存,在分析出操作符号的同时结合当前栈中的数据输出四元式。

程序中各阶段的功能如下:(1)词法分析阶段对源程序流进行扫描,每识别出一个单词,若是标识符,则到符号表中查找,如果符号表中没有此标识符的记录,那么将此标识符插入符号表。

最后按照单词其所属的类别,把类标识返回,作为语法分析阶段的输入。

(2)语法及语义分析阶段由文法开始符号对应的子程序控制 for循环语句各个模块的执行顺序,并由文法开始符号对应的子程序递归调用其他的子程序,对各个模块采用自顶向下,自左至右的推导方法完成对输入字符进行匹配的工作,试图推导出与输入符号串一致的文法的句子。

(3)中间代码生成阶段控制代码的输出形式,以四元式形式输出中间代码5.2概要设计5.2.1数据结构本程序使用符号表以及数组来存储长短不一的标识符。

将标识符的字符串放入一个单独的数组lexemes,每个字符串用一个字符串终结符EOS(\0)结束。

符号表采用结构体数组symtable来表示,每一个表项有两个域的记录:第一个域是指向数组lexemes中字符串的开始位置的指针域,另一个域是用来存放标识符记号的token域。

数组symtablelexptr token存储字符串的数组lexemes图5 符号表和存储字符串的数组定义符号表的数据结构如下:struct entry{char *lexptr; /*符号表的指针域*/int token; /*符号表的标识域*/};struct quadruples{int qt; /*保存将要输出的单词的标识*/int qtval; /*保存将要输出的单词的值*/};/*为符号表分配一个存储空间*/struct entry symtable[999];/*保存将要输出的四元式信息*/struct quadruples quadtable[38];5.2.2符号表初始化本程序要完成对FOR循环语句的翻译,所以首先要将for作为关键字插入到符号表中:struct entry keywords[] = {"for", KEY,0, 0};因此在遇到for这样的关键字时,函数直接返回关键字的标识号KEY,则程序不会把它们当作标识符插入到结构体数组中,而是将他们完整地归类到关键字集合中。

且这种设计很利于程序的扩展。

5.2.3多元操作符的处理在程序中使用到了‘!=’,‘||’,‘==’这样的多元操作符,由于不能像一元操作符一样直接匹配,所以通过C语言中进行#define预处理,如NE代表‘!=’,并在头文件中将这些多元操作符与整数之间建立映射关系,且存放在二维数组中。

若词法分析返回的标识号为相应的宏定义的变量,则在语法分析阶段switch-case语句中直接通过对相对位置的计算得到多元操作符在数组中的存储位置,从而得到相应的操作符。

通过这样的设计,使得在编写代码时要简单的多。

6 详细的算法描述6.1词法分析的数据结构设计与详细的流程图6.1.1初始化部分介绍在程序正确执行前要完成如下的初始化工作:1)完成语法分析所要查找的关键字和各种标识符编号的图的初始化。

2)读入源文件,对源文件进行初步的处理。

3)对源文件的正确读入进行判断,读入错误则进行报错。

4)初始化各种全局变量。

6.1.2数据结构的设计6.1.2.1 string Word[WordNum]存储所有的单词(标识符,关键字,运算符,界限符,数字(整型,实型)),WordNum为单词个数。

6.1.2.2map<string,int> WordMap存储所有单词和相应的类型码的map,用于识别单词类型时候方便查找,如能在表中找到,则能识别,如找不到,则报错处理。

相关文档
最新文档