华北电力大学编译实验报告

合集下载

华北电力VC++实验报告1

华北电力VC++实验报告1
}
Shiliang Shiliang::operator-(Shiliang other)
{
Shiliang temp;
temp.x_zb=this->x_zb-other.x_zb;
temp.y_zb=this->y_zb-other.y_zb;//可以省略this指针
return temp;
}
void main()
<<"="<<"("<<SLz.x_zb<<","<<SLz.y_zb<<")"<<endl;











cout<<"("<<SL1.x_zb<<","<<SL1.y_zb<<")"<<"-"<<"("<<SL2.x_zb<<","<<SL2.y_zb<<")"
<<"="<<"("<<SLf.x_zb<<","<<SLf.y_zb<<")"<<endl;
};
void display()
{
cout<<"姓名:"<<name<<endl;

华北电力大学操作系统实验报告(含思考题答案)

华北电力大学操作系统实验报告(含思考题答案)

华北电⼒⼤学操作系统实验报告(含思考题答案)操作系统综合实验( 20 -- 20 年度第学期)名称:题⽬:院系:班级:学号:学⽣姓名:指导教师:成绩:⽇期:年⽉实验⼀:实验环境的使⽤⼀、实验⽬的:1、熟悉操作系统集成实验环境OS Lab的基本使⽤⽅法。

2、练习编译、调试EOS操作系统内核以及EOS应⽤程序。

⼆、实验内容:1、启动OS Lab2、学习OS Lab的基本使⽤⽅法3、EOS内核项⽬的⽣成和调试4、EOS应⽤程序项⽬的⽣成和调试5、退出OS Lab6、保存EOS内核项⽬三、实验过程:本实验实验过程主要按照eos操作系统实验教程上所对应的章节来进⾏。

实验结果:(⼀)启动OS Lab :(⽆)(⼆)学习OS Lab的基本使⽤⽅法:(1)、创建了第⼀个项⽬:(2)、⽣成了第⼀个项⽬(3)、添加了func⽂件后经过⼀系列的调试,打印出了相关内容,按shift+F5结束调试。

(4)、查看变量的值:有3种⽅法:1、将⿏标移动到源代码编辑器中变量n的名称上,此时会弹出⼀个窗⼝显⽰出变量n当前的值(由于此时还没有给变量n赋值,所以是⼀个随机值)。

2、在源代码编辑器中变量n的名称上点击⿏标右键,在弹出的快捷菜单中选择“快速监视”,可以使⽤“快速监视”对话框查看变量n的值。

然后,可以点击“关闭”按钮关闭“快速监视”对话框。

3、在源代码编辑器中变量n的名称上点击⿏标右键,在弹出的快捷菜单中选择“添加监视”,变量n就被添加到了“监视”窗⼝中。

使⽤“监视”窗⼝可以随时查看变量的值和类型。

此时按F10进⾏⼀次单步调试,可以看到“监视”窗⼝中变量n的值会变为0(1)、调⽤堆栈:使⽤“调⽤堆栈”窗⼝可以在调试的过程中查看当前堆栈上的函数,还可以帮助理解函数的调⽤层次和调⽤过程。

EOS内核项⽬的⽣成和调试:(2)、新建EOS内核项⽬(3)、⽣成项⽬(4)、调试项⽬(5)、查看软盘镜像⽂件中的内容(6)、查看EOS SDK(Software Development Kit)⽂件夹EOS应⽤程序项⽬的⽣成和调试新建EOS应⽤程序项⽬⽣成项⽬:按F7⽣成项⽬调试项⽬:按F5进⾏各种调试查看软盘镜像⽂件中的内容:使⽤FloppyImageEditor⼯具打开该项⽬中的Floppy.img⽂件,查看软盘镜像中的⽂件。

网络技术基础实验报告(华北电力大学)1

网络技术基础实验报告(华北电力大学)1

网络技术基础实验报告实验环境VB 6.0实验名称实验一:熟悉VB环境及UDP通信实验程序的设计实验目的1.通过实验熟悉VB语言开发平台。

2.通过实验进一步理解UDP通信协议,掌握UDP通信协议的特点。

实验原理在TCP/IP模型中,UDP为网络层以上和应用层以下提供了一个简单的接口。

UDP只提供数据的不可靠传递,它一旦把应用程序发给网络层的数据发送出去,就不保留数据备份(所以UDP有时候也被认为是不可靠的数据报协议)。

UDP在IP数据报的头部仅仅加入了复用和数据校验(字段)。

用户数据文报协议 (UDP) 是一个无连接协议。

跟 TCP 的操作不同,计算机并不建立连接。

另外,UDP应用程序可以是客户机,也可以是服务器。

传输层为了传输数据,首先要设置本机的使用协议和本机端口号。

然后,本机计算机只需将RemoteHost设置为需要聊天的计算机的Internet地址,并将RemotePort属性设置为跟需要聊天的计算机的LocalPort属性相同的端口,并调用SendData方法来发送信息。

最后,本台计算机使用 DataArrival事件内的 GetData 方法来获取对方计算机已发送的信息。

应用层UDP TCPIP各种网络接口实验内容实验步骤:1.用自己的名字建立子目录。

2.进入VB6.0,双击StandardEXE。

3.出现标准窗体,调整窗体大小到适当尺寸。

4.工程名改为UdpTest,窗体名改为FrmMain, 窗体的caprion属性改为“聊天程序”。

5.添加TextBox控件,名字改为IPAdr,Text属性为空,用以输入聊天对象的IP地址。

6.添加两个Lable控件,一个作为背景色,一个作为前景色,属性改为对方“IP地址”,为了使文字在lable的正中央,调整两个lable的叠放位置。

7.添加CommandButton控件,Caption属性改为“确定”,用以确定IP地址。

实验内容8.添加TextBox控件,名字改为TextRecieve,Text属性为空,MultiLine属性为True,ScrollBars属性为2,用以显示接受聊天内容。

华北电力大学软件工程实验报告

华北电力大学软件工程实验报告

科技学院课程设计报告( 2014-- 2014年度第2学期)名称:软件工程课程设计院系:信息工程系班级:学号:学生姓名:指导教师:宋雨郭丰娟设计周数: 2成绩:日期:2014年 6 月26日《软件工程》课程设计任务书一、目的、要求通过该课程设计要使学生树立起强烈的工程化意识,用工程化思想和方法开发软件。

切实体会出用软件工程的方法开发系统与一般程序设计方法的不同之处,学生在对所开发的系统进行软件计划、需求分析、设计的基础上,实现并测试实际开发的系统。

通过一系列规范化软件文档的编写和系统实现,使学生具备实际软件项目分析、设计、实现和测试的基本能力。

二、主要内容要求学生掌握软件工程的基本概念、基本方法和基本原理,为将来从事软件的研发和管理奠定基础。

每个学生选择一个小型软件项目(内容参照《计算机综合实践指导》,宋雨等编著,清华大学出版社出版),按照软件工程的生命周期,完成软件计划、需求分析、软件设计、编码实现、软件测试及软件维护等软件工程工作,并按要求编写出相应的文档。

具体的方法可以选用传统的软件工程方法或者面向对象的方法,开发环境和工具不限。

三、进度计划四、设计成果要求1.至少提交4个文档,包括软件计划、软件需求规格说明书、软件设计说明书、软件测试计划,要求文档格式规范、逻辑性强(可参考《计算机综合实践指导》中给出的要求及格式)、图表规范;2.独自实现了系统的某些功能,基本达到了要求的性能,经过了测试,基本能运行。

五、考核方式(1)提交的文档规范,工作量大,文档逻辑性强、正确,按《计算机综合实践指导》标准考核(附《软件工程课程设计》实验报告评分表)占60%(2)系统验收、讲解、答辩占25%(3)考勤占15%学生姓名:指导教师:2014年6 月26 日《软件工程课程设计》实验报告评分表目录绪论 (1)第1章课程设计的目的与要求 (2)§课程设计目的 (2)§ 课程设计要求 (2)§1.2.1 课程设计准备 (2)§1.2.2 内容要求 (2)第2章设计正文 (3)§软件计划和可行性分析报告 (3)§2.1.1 项目简介 (3)§2.1.2 对现有系统的分析 (4)§2.1.3 技术可行性分析 (5)§2.1.4 经济可行性分析 (5)§2.1.5 社会因素可行性分析 (6)§2.1.6 可供选择的方案 (6)§软件需求规格说明书 (8)§2.2.1需求概述 (8)§2.2.2功能需求 (9)§2.2.3性能需求 (10)§2.2.4运行需求 (11)§2.2.5其他需求 (14)§软件设计说明书 (15)§2.3.1 软件模块结构图 (15)§2.3.2 文件结构和全局数据 (15)§2.3.3 模块描述 (17)§2.3.3.1 登录模块描述 (17)§2.3.3.2 管理员管理学生信息模块描述 (17)§2.3.3.3 管理员管理图书信息模块描述 (18)§2.3.3.4 管理员管理图书管理员信息模块描述 (18)§2.3.3.5 学生管理学生信息模块描述 (19)§2.3.3.6 学生查询图书信息模块描述 (19)§2.3.3.7 读者借阅模块描述 (20)§软件测试计划 (21)§2.4.1 测试范围 (21)划 (21)§2.4.2.1 测试阶段 (21)§2.4.2.2 测试进度 (21)§2.4.3 测试项目说明 (22)§2.4.3.1 管理员和学生登录模块测试 (22)§2.4.3.2 管理员查询学生信息模块测试 (23)§2.4.3.3 管理员添加学生信息模块模块测试 (23)§2.4.3.4 管理员删除学生信息模块模块测试 (23)§2.4.3.5 管理员修改学生信息模块模块测试 (24)析 (24)§2.4.4.1 管理员和读者登录模块测试 (24)§2.4.4.2 管理员查询读者信息模块测试 (24)§2.4.4.3 管理员添加读者信息模块模块测试 (24)§2.4.4.4 管理员删除读者信息模块模块测试 (24)§2.4.4.5 管理员修改读者信息模块模块测试 (25)第三章课程设计总结或结论 (26)第四章参考文献 (26)第五章附录 (27)§用户界面主要代码 (27)§管理员界面主要代码 (29)绪论随着现代科学技术的进步,人类社会正逐渐走向信息化,图书馆拥有丰富的文献信息资源,是社会系统的重要组成部分,在信息社会中作用愈来愈重要,我国图书馆计算机等信息技术的应用起步于20世纪70年代末期,随着改革开放的步伐得迅速发展,特别是90年代以后,我国图书馆信息网络建设取得了较大发展图书馆信息化建设迈向了一个新台阶。

电大在线编程实验报告(3篇)

电大在线编程实验报告(3篇)

第1篇一、实验目的通过本次在线编程实验,旨在提高我的编程能力,加深对编程语言的理解,熟悉编程环境的使用,并培养良好的编程习惯。

同时,通过实际编程练习,解决实际问题,提升我的逻辑思维和问题解决能力。

二、实验内容本次实验选择了电大在线编程平台提供的C语言编程课程,主要包括以下内容:1. C语言基本语法;2. 数据类型、变量和运算符;3. 控制结构(分支和循环);4. 函数的定义和调用;5. 数组、指针和字符串操作;6. 文件操作。

三、实验步骤1. 准备工作:登录电大在线编程平台,选择C语言编程课程,熟悉编程环境和操作界面。

2. 编写代码:根据实验指导书,逐个完成实验任务,编写相应的C语言程序。

3. 调试程序:使用调试工具,检查代码中的错误,修正语法错误和逻辑错误。

4. 运行程序:成功编译并运行程序,观察输出结果,确保程序功能符合预期。

5. 总结与反思:对实验过程中遇到的问题进行总结,分析原因,提出改进措施。

四、实验结果与分析1. C语言基本语法:通过实验,我掌握了C语言的基本语法,包括数据类型、变量、运算符等。

2. 控制结构:实验中,我学会了使用if语句、switch语句进行分支控制,以及for循环、while循环进行循环控制。

3. 函数:通过编写和调用函数,我了解了函数的定义、参数传递和返回值等概念。

4. 数组、指针和字符串操作:实验中,我掌握了数组的定义、初始化、访问和操作方法,了解了指针的概念和用法,以及字符串操作函数。

5. 文件操作:通过实验,我学会了使用文件操作函数,实现文件的读写操作。

五、实验总结通过本次在线编程实验,我收获颇丰。

以下是我对本次实验的总结:1. 编程能力得到提高:通过实际编程练习,我对C语言有了更深入的了解,编程能力得到提升。

2. 问题解决能力增强:在实验过程中,我遇到了各种问题,通过查阅资料、请教同学和老师,我学会了如何分析和解决实际问题。

3. 良好的编程习惯:在实验过程中,我养成了良好的编程习惯,如规范命名、注释代码、代码复用等。

unix体系编程实验报告材料华北电力大学

unix体系编程实验报告材料华北电力大学

华北电力大学实验报告||实验名称《UNIX/LINUX体系及编程》课程实验课程名称UNIX/LINUX体系及编程||专业班级:学生姓名:学号:成绩:指导教师:阎蕾实验日期:2014.11UNIX/LINUX体系及编程》课程实验任务书一、目的与要求1.掌握UNIX/Linux系统的目录和文件管理命令。

2.掌握shell的输入输出重定向,编写shell脚本文件。

3.编写C语言程序,使用GCC编译,使用GDB调试。

4.掌握make工具,撰写makefile文件,完成C程序的自动编译。

5.要求每人能独立完成实验。

二、主要内容1.用pwd命令显示用户主目录的路径名,用date命令查看当前日期和时间,用who命令查看当前登录在系统中的用户列表,利用who命令选项查看当前系统中的用户总数和系统启动时间。

比较whoami 和who am i显示的结果区别。

2.用vi编辑器,先在用户主目录中创建文件,编辑文件。

并作统计文件大小,重新编辑文件。

字符串替换等工作3.用find命令查找名为passwd的文件。

从用户主目录开始,查找所有1天前创建的文件。

查找文件属主的文件。

查找1天前被访问过的文件。

4.用重定向符和cat命令创建一个 flower脚本文件,完成如下功能。

4.1 显示用户名。

显示用户当前系统中的进程。

4. 2 判断当前用户是否为root用户:若是root用户,则根据命令行参数n,清除/var/log目录下的某个文件的内容但保留其最后的n行的内容,若没有参数,则保留10行;若不是root用户,提示出错。

5.编写C程序,编译、运行、调试程序。

用c语言程序编程实现:将输入的十进制数输出为相应的十六进制数。

并撰写makefile,使用make工具完成自动编译。

三、进度计划四、实验成果要求1.将操作截图贴报告中,包括命令、脚本、C代码、makefile文件内容及运行结果。

五、考核方式1.以实验报告作为实验成绩。

学生姓名:指导教师:阎蕾2014年9月9日一、实验目的及要求6.掌握UNIX/Linux系统的目录和文件管理命令。

华北电力大学科技学院通信原理实验-数字基带传输编译码

华北电力大学科技学院通信原理实验-数字基带传输编译码



1.用示波器分别观测AMI编码输入的数据和编码输出的数据,观察记录波形,验证AMI编码规则;用示波器分别观测AMI编码输入的数据和译码输出的数据,观察记录AMI译码波形与输入信号波形。
2.用示波器分别观测HDB3编码输入的数据和编码输出的数据,记录波形,验证HDB3编码规则;用示波器分别观HDB3测编码输入数据和译码输出数据,观察记录HDB3译码波形与输入信号波形。






第2页












问题1:本实验输入信号采用的单极性码,可较好的恢复出位时钟信号,如果输入信号采用的是双极性码,是否能观察到恢复的位时钟信号,为什么?
答案:
问题2:比较两种编码的优劣,说说为什么实际通信系统采用HDB3码。
答案:
问题3:不归零码和归零码的特点是什么?
答案:


本实验输入信号采用的单极性码可较好的恢复出位时钟信号如果输入信号采用的是双极性码是否能观察到恢复的位时钟信号为什么
华北电力大学科技学院
实验报告
|
|
实验名称
课程名称
|
|
专业班级:电信13K学生姓名:
学 号:31成 绩:
指导教师:王劭龙实验日期:
华北电力大学科技学院实验报告
院/系:同组人:
实验名称
数字基带据记录
后面其他
所用仪器
设备
示波器RIGOL DS1102E,LTE-TX-06A通信原理综合实验箱
实验目的
要求
1.掌握AMI码、HDB3码的编译规则。
2.理解AMI码、HDB3码的码变换过程。

实验报告编译实验

实验报告编译实验

一、实验目的1. 理解编译原理的基本概念和过程。

2. 掌握编译器的基本组成和编译流程。

3. 学会使用编译器对源代码进行编译,并分析编译结果。

二、实验环境1. 操作系统:Windows 102. 编译器:GCC (GNU Compiler Collection)3. 开发工具:Visual Studio Code三、实验内容1. 编译器的基本组成和编译流程2. 编译器的使用3. 编译结果分析四、实验步骤1. 编译器的基本组成和编译流程(1)词法分析:将源代码分解成一个个的单词,如标识符、关键字、运算符等。

(2)语法分析:将单词序列转换成语法树,验证源代码是否符合语法规则。

(3)语义分析:检查语法树,确保源代码在语义上是正确的。

(4)中间代码生成:将语法树转换成中间代码,如三地址代码。

(5)代码优化:对中间代码进行优化,提高程序运行效率。

(6)目标代码生成:将优化后的中间代码转换成目标代码,如汇编代码。

(7)代码生成:将目标代码转换成可执行文件。

2. 编译器的使用(1)编写源代码:使用Visual Studio Code编写C语言源代码。

(2)编译源代码:在命令行中输入gcc -o 程序名源文件名.c,编译源代码。

(3)运行程序:在命令行中输入程序名,运行编译后的程序。

3. 编译结果分析(1)词法分析:编译器将源代码中的单词进行分解,如以下代码:```cint main() {int a = 1;return a;}```编译器将分解为以下单词:- int- main- (- )- {- int- a- =- 1- ;- return- a- ;- }- }(2)语法分析:编译器将单词序列转换成语法树,验证源代码是否符合语法规则。

(3)语义分析:编译器检查语法树,确保源代码在语义上是正确的。

(4)中间代码生成:编译器将语法树转换成中间代码,如以下三地址代码:```t1 = 1a = t1t2 = areturn t2```(5)代码优化:编译器对中间代码进行优化,如以下优化后的三地址代码:```a = 1return a```(6)目标代码生成:编译器将优化后的中间代码转换成汇编代码。

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

课程设计报告( 2012 -- 2013年度第 1 学期)名称:编译技术课程设计B题目:词法分析器设计算符优先分析程序设计基于算符优先分析方法的语法制导翻译程序设计院系:计算机系班级:学号:学生姓名:指导教师:阎蕾, 岳燕设计周数:1周成绩:日期:年月日《编译技术》课程设计B任务书一、目的与要求1.词法分析器设计的目的与要求1.1 词法分析器设计的实验目的本实验是为计算机科学与技术专业、网络工程专业、信息安全专业的学生在学习《编译技术》课程后,为加深对课堂教学内容的理解,培养解决实际问题能力而设置的实践环节。

通过这个实验,使学生应用编译程序设计的原理和技术设计出词法分析器,了解扫描器的组成结构,不同种类单词的识别方法。

能使得学生在设计和调试编译程序的能力方面有所提高。

为将来设计、分析编译程序打下良好的基础。

1.2 词法分析器设计的实验要求设计一个扫描器,该扫描器是一个子程序,其输入是源程序字符串,每调用一次识别并输出一个单词符号。

为了避免超前搜索,提高运行效率,简化扫描器的设计,假设该程序设计语言中,基本字(也称关键词)不能做一般标识符用,如果基本字、标识符和常数之间没有确定的运算符或界符作间隔,则用空白作间隔。

单词符号及其内部表示如表1-1所示,单词符号中标识符由一个字母后跟多个字母、数字组成,常数由多个十进制数字组成。

单词符号的内部表示,即单词的输出形式为二元式:(种别编码,单词的属性值)。

表1-1 单词符号及其内部表示单词符号种别编码单词的属性值BEGIN IF THEN ELSE END标识符整型常数1234567—————在名字表中的地址十进制整数+ * ** ()89101112—————2.算符优先分析程序设计的目的和要求2.1 算符优先分析程序设计的实验目的本实验是为计算机科学与技术专业的学生在学习《编译技术》课程后,为加深对课堂教学内容的理解,培养解决实际问题能力而设置的实践环节。

通过这个实验,使学生应用编译程序设计的原理和技术, 设计、编写和调试算符优先分析程序,了解算符优先分析程序的组成结构,掌握实现通用算符优先分析算法的方法。

能使得学生在设计和调试编译程序的能力方面有所提高。

为将来设计、分析编译程序打下良好的基础。

2.2 算符优先分析程序设计的实验要求算符优先分析属于自下而上的分析方法,该语法分析程序的输入是终结符号串(即单词符号串,以一个“#”结尾),如果输入串是句子则输出“YES”,否则输出“NO”和错误信息。

算符优先分析过程与非终结符号无关,当由文法产生了优先关系之后文法也就失去了作用,本题目给出文法的目的是为了便于对语法分析结果进行验证。

(1)文法设算符优先文法G为:TTEE|+→FFTT|*→PFPF|↑→iEP|)(→说明:i为整型常数或者为标识符表示整型变量;使用中↑用**表示。

(2)优先关系表设优先关系表如表1-2所示。

表1-2 优先关系表+ * ↑ i ( ) #+*↑i()#3.基于算符优先分析方法的语法制导翻译程序设计的目的和要求3.1基于算符优先分析方法的语法制导翻译程序设计的实验目的本实验是为计算机科学与技术专业的学生在学习《编译技术》课程后,为加深对课堂教学内容的理解,培养解决实际问题能力而设置的实践环节。

通过这个实验,使学生应用编译程序设计的原理和技术, 通过设计、编写和调试语法制导翻译程序,掌握从一种语句的语法和语义出发,构造相应的语义子程序,实现基于算符优先分析方法的语法制导翻译的方法。

能使得学生在设计和调试编译程序的能力方面有所提高。

为将来设计、分析编译程序打下良好的基础。

3.2 基于算符优先分析方法的语法制导翻译程序设计的实验要求算符优先分析方法是通过反复把输入符号移进分析栈,使用优先关系表在分析栈顶寻找最左素短语,将其归约为一个非终结符号而实现的。

这个分析过程与非终结符号无关,当由文法产生了优先关系之后文法也就失去了作用(所以本题目无需给出文法)。

基于算符优先分析方法的语法制导翻译是在算符优先语法分析的基础上进行翻译工作(即语义分析),每当将一个最左素短语归约为一个非终结符号时,就调用对应产生式的语义子程序,去完成相应的语义翻译工作,这步归约使用的产生式对非终结符号不加区分(即将所有的非终结符号用一个通用的非终结符号表示)。

语法制导翻译程序的输入是终结符号串(即单词符号串,以一个“#”结尾),如果输入符号串是句子,则按照其语义进行翻译,输出等价的四元式序列(作为练习应显示输出)。

4.上机前的准备为了充分利用上机时间,在进行编译技术上机实验前应做好各种准备工作,具体应包括:(1)复习与上机题目有关的知识,熟悉有关定义、概念和实现算法。

(2)设计出程序流程框图和数据结构,编写出完整的源程序,进行静态检查。

(3)为所编写的程序构思一个运行、调试环境,例如,以什么方式提供输入数据、显示输出数据,如何调用(或启动)编写的程序。

制定出程序调试计划和典型输入代码数据。

5.课程设计报告课程设计完成后,按学校给定的格式和要求写出课程设计报告。

二、主要内容完成以下课程设计内容:1.完成词法分析器设计,实现输入源程序字符串,每调用一次扫描器,就输出一个以内部形式表示的单词符号,输出形式为二元式:(种别编码,单词属性)2.完成算符优先分析程序设计,掌握实现通用算符优先分析算法的方法,实现输入终结符号串(即单词符号串,以一个“#”结尾),如果输入串是句子则输出“YES”,否则输出“NO”和错误信息。

3.完成基于算符优先分析方法的语法制导翻译程序设计,实现输入是终结符号串(即单词符号串,以一个“#”结尾),如果输入符号串是句子,则按照其语义进行翻译,输出等价的四元式序列。

三、进度计划序设计内容完成时间备注号1 查阅资料,编译器各部分概要设计一天2 词法分析器设计一天3 算符优先分析程序设计一天4 基于算符优先分析方法的语法制导翻译程一天半序设计5 验收交实验报告半天已完成的学生验收交实验报告四、设计成果要求1.按进度计划和自己的能力完成课程设计内容要求,包括程序框图、源程序、调试步骤、调试方法、对运行结果的分析等。

2.总结整个课程设计,撰写出课程设计报告。

五、考核方式1.程序调试完成后,由指导教师在计算机上检查,验收课程设计成果,并现场答辩。

2.评阅课程设计报告。

学生姓名:(签字)指导教师:年月日实验一.词法分析器的设计与实现一、课程设计(综合实验)的目的与要求1.1 词法分析器设计的实验目的本实验是为计算机科学与技术专业的学生在学习《编译技术》课程后,为加深对课堂教学内容的理解,培养解决实际问题能力而设置的实践环节。

通过这个实验,使学生应用编译程序设计的原理和技术设计出词法分析器,了解扫描器的组成结构,不同种类单词的识别方法。

能使得学生在设计和调试编译程序的能力方面有所提高。

为将来设计、分析编译程序打下良好的基础。

1.2 词法分析器设计的实验要求设计一个扫描器,该扫描器是一个子程序,其输入是源程序字符串,每调用一次识别并输出一个单词符号。

为了避免超前搜索,提高运行效率,简化扫描器的设计,假设该程序设计语言中,基本字(也称关键词)不能做一般标识符用,如果基本字、标识符和常数之间没有确定的运算符或界符作间隔,则用空白作间隔。

单词符号及其内部表示如表1-1所示,单词符号中标识符由一个字母后跟多个字母、数字组成,常数由多个十进制数字组成。

单词符号的内部表示,即单词的输出形式为二元式:(种别编码,单词的属性值)。

表1-1 单词符号及其内部表示单词符号种别编码单词的属性值BEGIN IF THEN ELSE END标识符整型常数+***()123456789101112—————在名字表中的地址十进制整数—————二、设计(实验)正文 1.词法分析器流程图2.词法分析器设计程序代码// first.cpp : 定义控制台应用程序的入口点。

//#include "stdafx.h" #include <iostream> #include <string> using namespace std ; int what (char a ) {if ((int (a )>=48)&&(int (a )<=57)) {开始结束初始化读入需要分析的句子还有单词未分析?否是 是字母?是否 其他单词分析程序是数字?否输出单词二元式关键字或标识符分析程序读一个字符是常数分析程序return 0;//0-9数字}elseif((int(a)>=97)&&(int(a)<=122)){return 1;//a-z的字母}else{return 2;//其他的标点符号}}void scan(char a[],int &m,char zc[100][100],int &n){char zh[100];int b=0,weizhi,r=0;int zbbm;//-----------------------------检测整形常数while(a[m]==' '){cout<<"遇到空格"<<endl;m++;}if(what(a[m])==0){while(what(a[m])==0){b=b*10+int(a[m])-48;m++;}zbbm=7;cout<<"("<<zbbm<<","<<b<<")"<<endl;}else//----------------------------------检测字符型if(what(a[m])==1){if((a[m]=='b')&&(a[m+1]=='e')&&(a[m+2]=='g')&&(a[m+3]=='i')&&(a[m+4]=='n')& &(what(a[m+5])==2)){m=m+5;zbbm=1;cout<<"("<<zbbm<<",-)"<<endl;}//=====检测beginelseif((a[m]=='i')&&(a[m+1]=='f')&&(what(a[m+2])==2)){m=m+2;zbbm=2;cout<<"("<<zbbm<<",-)"<<endl;}//检测ifelseif((a[m]=='t')&&(a[m+1]=='h')&&(a[m+2]=='e')&&(a[m+3]=='n')&&(what(a[m+4])= =2)){m=m+4;zbbm=3;cout<<"("<<zbbm<<",-)"<<endl;}//检测thenelseif((a[m]=='e')&&(a[m+1]=='l')&&(a[m+2]=='s')&&(a[m+3]=='e')&&(what(a[m+4])= =2)){m=m+4;zbbm=4;cout<<"("<<zbbm<<",-)"<<endl;}//检测elseelseif((a[m]=='e')&&(a[m+1]=='n')&&(a[m+2]=='d')&&(what(a[m+3])==2)){m=m+3;zbbm=5;cout<<"("<<zbbm<<",-)"<<endl;}//检测end//----------------------------对未知字符的检测else{int j=0;while(what(a[m])!=2){zh[j]=a[m];m++;j++;}zh[j]='#';if(n==0){j=0;while(zh[j]!='#'){zc[0][j]=zh[j];j++;}zc[0][j]='#';n=1;weizhi=1;}elseif(n>0){int k=0,y=1;while((k<n)&&(y==1)){r=0;while(zc[k][r]!='#'){r++;}if(r!=j){k++;y=1;}elseif(r==j){r=0;while((int(zc[k][r])==int(zh[r]))&&(r<j)){r++;}if(r==j){weizhi=k+1;y=0;}else{k++;y=1;}}}if(y==1){j=0;while(zh[j]!='#'){zc[n][j]=zh[j];j++;}zc[n][j]='#';n=n+1;weizhi=n;}}zbbm=6;//怎么输出地址cout<<"("<<zbbm<<","<<weizhi<<")"<<endl;}}elseif(what(a[m])==2){if(a[m]=='+'){zbbm=8;m++;cout<<"("<<zbbm<<",-)"<<endl;}//检测+elseif(a[m]=='('){zbbm=11;m++;cout<<"("<<zbbm<<",-)"<<endl;}//检测(elseif(a[m]==')'){zbbm=12;m++;cout<<"("<<zbbm<<",-)"<<endl;}//检测)elseif(a[m]=='*'){if(a[m+1]=='*'){zbbm=10;m+=2;}else{zbbm=9;m++;}cout<<"("<<zbbm<<",-)"<<endl;}}}int main(){char zc[100][100];int n=0;cout<<"begin------------1"<<endl;cout<<"if ------------2"<<endl;cout<<"then ------------3"<<endl;cout<<"else ------------4"<<endl;cout<<"end ------------5"<<endl;cout<<"标志符------------6"<<endl;cout<<"整型常数------------7"<<endl;cout<<"+------------8"<<endl;cout<<"*------------9"<<endl;cout<<"**------------10"<<endl;cout<<"(------------11"<<endl;cout<<")------------12"<<endl;cout<<"========================================================="<<endl;cout<<endl;int m=0;char a[100];cout<<"请输入测试语句:";cin.getline(a,100,'\n');cout<<"输出格式为: (种别编码,单词的属性值)"<<endl;while(a[m]!='#'){scan(a,m,zc,n);}return 0;}3.词法分析器运行结果实验二. 算符优先分析的设计与实现一、课程设计(综合实验)的目的与要求2.1 算符优先分析程序设计的实验目的本实验是为计算机科学与技术专业的学生在学习《编译技术》课程后,为加深对课堂教学内容的理解,培养解决实际问题能力而设置的实践环节。

相关文档
最新文档