当前位置:文档之家› 《编译原理》实验指导书(吴元斌)

《编译原理》实验指导书(吴元斌)

《编译原理》实验指导书(吴元斌)
《编译原理》实验指导书(吴元斌)

《编译原理》实验指导书

“编译原理”课程是计算机本科专业的必选课程,上机实验是该课程的重要环节,实验学时数为8学时。一个编译程序把源程序翻译成等价的目标程序,一般应做词法分析、语法分析、语义分析、代码生成和代码优化等五个方面的工作,为了使学生对其有较深的理解,必须根据这五个方面设计实验。本指导书正是根据课程的内容,将实验分为前期准备阶段、基本操作阶段和技术提高阶段三个阶段进行:①前期准备阶段的实验主要是为后续实验做好准备,应围绕编译原理课程进行设计,如:学生可根据教科书的内容,设计一个源程序的输入和扫描程序,并完成相应的设计报告;②基本操作阶段的实验是围绕着编译原理的五个方面的工作来进行,其内容主要是词法分析、语法分析、语义分析、代码生成和代码优化等,如:简单的词法分析程序、LL(1) 分析法算法、语义分析程序、中间代码和目标代码生成算法的实验,这些实验基本上包括了以上知识要点,学生可结合书本上有关的知识来完成;③技术提高阶段的实验是综合性课程设计实验,根据编译原理编制应用程序,不仅要求把书本上的内容掌握好,同时还需要自学一些相关的知识。

实验一、词法分析(2学时)

一、实验目的

熟悉正规文法、正规式和有穷自动机,了解词法分析的主要任务,掌握词法分析是如何根据正规文法规则逐一分析词法得到属性字的,即掌握了词法分析过程。

二、实验内容

编制一个读单词过程,从输入的源程序中,识别出各个具有独立意义的单词,即基本保留字、标识符、常数、运算符、分隔符五大类。并依次输出各个单词的内部编码及单词符号自身值。(遇到错误时可显示“Error”,然后跳过错误部分继续显示)。

三、实验原理

词法分析是编译过程的第一步,要想做好该实验,必须熟悉正规文法、正规式和有穷自动机的概念和原理,实验前须先定义语言的正规文法或正规式,构造确定的有穷自动机,然后根椐有穷自动机设计程序模块,源程序的输入。

1

四、实验步骤

(一)准备:1.阅读课本有关章节,花二天时间明确语言的语法,写出基本保留字、标识符、常数、运算符、分隔符和程序例。2.初步编制

好程序。3.准备好多组测试数据。

(二)上课上机:将源代码拷贝到机上调试,发现错误,再修改完善。第二次上机调试通过。

(三)程序思路(仅供参考):

0.定义部分:定义常量、变量、数据结构。

1.初始化:从文件将源程序全部输入到字符缓冲区中。

2.取单词前:去掉多余空白。

3.取单词后:去掉多余空白(可选,看着办)。

4.取单词:利用实验一的成果读出单词的每一个字符,组成单词,分析

类型。(关键是如何判断取单词结束?取到的单词是什么类型的单

词?)

5.显示结果。

五、实验报告要求

(1)功能描述:该程序具有什么功能?

(2)程序结构描述:函数调用格式、参数含义、返回值描述、函数功能;函

2

数之间的调用关系图、程序总体执行流程图(参考课本第二章)。

(3)实验过程记录:出错次数、出错严重程度、解决办法摘要。

(4)实验总结:你在编程过程中花时多少?多少时间在纸上设计?多少时间上机输入和调试?多少时间在思考问题?遇到了哪些难题?你是怎么克服的?你对你的程序的评价?你的收获有哪些?

六、注意事项

1.为了能设计好程序,应做好以下工作:

①模块设计:将程序分成合理的多个模块(函数),每个模块做具体的同一事情;

②写出(画出)设计方案:模块关系简图、流程图、全局变量、函数接口等;

③编程时注意编程风格:空行的使用、注释的使用、缩进的使用等。

2. 该实验课约课余准备4小时;上机2小时;完成实验报告2小时;

3.需提交:①程序源代码;②已经测试通过的测试数据3组(以“第一组输入/输出/第二组输入/输出/第三组输入/输出”的顺序存放)。

七、思考题

1. 如何根据正规式构造有穷自动机?

2.该实验的难点和重点在哪里?

3

实验二、LL(1)分析算法(2学时)

一、实验目的

熟悉前面所学的语法分析过程,了解语法分析是如何根据语法规则逐一分析词法分析时所得到的属性字,以及检查语法错误的,即掌握了语法分析过程;具体来说,要求学生掌握LL(1)分析法的基本原理、掌握LL(1)分析表的构造方法、掌握LL(1)驱动程序的构造方法。

二、实验内容

根据课本所提供的LL(1)分析算法,编写一个语法分析程序,实现对词法分析程序所提供的单词序列进行语法检查和结构分析,训练学生对常用语法进行分析的能力。本实验可以算术表达式为例完成语法分析,其的文法可以是(你可以根据需要适当改变): E→E+T|T, T→T*F|F, F→(E)|i

根据算符优先分析法,将表达式进行语法分析,判断一个表达式是否正确。

三、实验原理

LL(1)是自顶向下的语法分析方法之一,它是编译过程的第二步,要想做好该实验,必须熟悉LL(1) 分析方法的基本原理,掌握表达式文法的预测分析表的构造方法;且实验前须先定义好表达式的文法规则,构造预测分析表,然后设计程序模块,并进行调试和运行。

四、实验步骤

(一)准备:1.阅读课本有关章节,花二天时间确定算术表达式的文法,设计出表达式文法的预测分析表;2.考虑好设计方案;3.设计出模块结构、测试数据,初步编制好程序。

(二)上课上机:上机调试,发现错误,分析错误,再修改完善。教师根据学生的设计方案与学生进行探讨,以修改方案和代码。

(三)程序要求:

程序输入/输出示例:

如参考C语言的运算符。输入如下表达式(以#为结束)和输出结果:

(1)10#

输出:正确

(2)1+2#

输出:正确

4

(3)(1+2)*3#

输出:正确

(4)((1-2)/3+4#

输出:错误

(5)1+2-3+(*4/5)#

输出:错误

注意:1.为降低难度,表达式中不含变量(只含无符号整数);

2.如果遇到错误的表达式,应输出错误提示信息(该信息越详细越好);

3.测试用的表达式事先放在文本文件中,一行存放一个表达式,同时以#号分割。同时将预期的输出结果写在另一个文本文件中,以便和输出进行对照;

4.对学有余力的同学,可增加功能:当判断一个表达式正确时,输出计算结果,计算过程用浮点表示,但要注意不要被0除。

程序思路(仅供参考):

1.借用实验二的结果,可将其中的取字符函数几乎原封不动地移植过来,其中的分割和分析单词的方法可借用过来分割现在这个实验的运算符、常量和变量。

2.模块结构:(1)初始化:设立表达式文法的预测分析表、初始化变量空间(包括堆栈、结构体、数组等);(2)控制部分:将一个表达式从文件中读出;(3)词法分析:将表达式分割成单词序列;(4)利用表达式文法进行表达式处理:根据预测分析表对表达式单词序列进行堆栈操作,如果遇到错误则显示错误信息。

(四)练习该实验的目的和思路:

程序比较复杂,需要利用到大量的编译原理,也用到了大量编程技巧和数据结构,通过这个练习可极大提高编程能力。程序规模大概为250行。本实验的结果可作为课程设计的基础。通过练习,掌握对表达式进行处理的一种方法。

五、实验报告要求

(1)功能描述:该程序具有什么功能?

(2)程序结构描述:函数调用格式、参数含义、返回值描述、函数功能;函数之间的调用关系图、程序总体执行流程图(参考课本第三章)。

(3)实验过程记录:出错次数、出错严重程度、解决办法摘要。

(4)实验总结:你在编程过程中花时多少?多少时间在纸上设计?多少时间上机输入和调试?多少时间在思考问题?遇到了哪些难题?你是怎么克服的?你对你的程序的评价?你的收获有哪些?

5

六、注意事项

1.为了能设计好程序,应做好以下工作:

①模块设计:将程序分成合理的多个模块(函数),每个模块做具体的同一事情。

②写出(画出)设计方案:模块关系简图、流程图、全局变量、函数接口等。

③编程时注意编程风格:空行的使用、注释的使用、缩进的使用、变量合理命名等。

2.该实验课约须课余准备4小时;上机一次2小时;完成实验报告2小时;

3.需提交:①程序源代码;②已经测试通过的测试数据10组(以“第一组输入/输出/第二组输入/输出/第三组输入/输出……”的格式存放)。

七、思考题

1.比较前面所学的几种语法分析方法的特点,思考为什么选用LL(1)分析法处理判断算术表达式的正确性?

2.改用算符优先分析法或LR(1)能否实现以上功能?

实验三、语义分析程序(2学时)

一、实验目的

复习前面课文中所学的语义分析的相关知识,使学生了解语义检查目的和意义,掌握语义检查的一般内容,掌握语义检查的方法。

二、实验内容

在语法分析的基础上,利用SNL等编译器或自己编写一个语义分析程序对语法分析内容进行语义错误检查,对运行结果进行分析,并纠正运行过程中出现的各种错误,训练学生对常用语义进行分析的能力,和增强对本章节的理解。

三、实验仪器、设备及材料

1、一人一台计算机,独立完成实验。

2、计算机硬件的最低配置为:PentiumⅢCPU、128M RAM、CDROM、硬盘、软驱、

6

彩显。

3、计算机软件的基本要求:SNL语言编译器或软件开发工具,如Eclipse + MinGW、

Microsoft Visual C++等。

四、实验原理

语义分析(Semantic Analysis)是任何编译程序必不可少的一个阶段,也是编译程序最实质性的工作。在整个编译过程中,词法分析和语法分析是对源程序形式上的识别和处理,而语义分析程序是对源程序的语义做相应的处理工作。

在SNL编译器中,语义错误检查涉及标识符的重复声明错误,有使用无声明错误和类型一致性检查。前面提到了标识符的重复声明错误的检查,对于标识符有使用无声明错误,也是以先根次序遍历语法分析树节点,遍历时只对含有变量标识符,类型标识符和过程标识符使用的语法树节点进行处理。即:赋值语句类型节点,读语句类型节点,表达式类型节点和过程调用语句节点。处理的时候,先查符号表,如果标识符不在符号表中,则为标识符的有使用无声明错误,输出语义错误信息。否则,读取标识符的相关信息。在类型一致性检查过程中,按照后根次序遍历语法分析树,即在遍历处理语法分析树的子节点之后,再处理该节点,进行类型检查。在对语法树节点处理过程中,只针对运算类型表达式节点,常量表达式类型节点,标识符表达式类型节点,条件语句类型节点,赋值语句类型节点,写语句类型节点,循环语句类型节点,过程调用语句类型节点。

五、实验步骤

(一)准备:阅读课本有关章节,准备被分析的源程序等测试数据。

(二)上课上机:上机调试,发现错误,分析错误,给出错误原因,并写出该源程序的语义分析结果。

(三)具体步骤:

(1)熟悉SNL语言的语义,了解语义分析阶段需要进行哪些语义检查同时要掌握符号的作用域原则;

(2)准备以上实验数据;

(3)检查标识符的有使用无声明错误:先根遍历语法树,遍历时只对含有变量标识符,类型标识符和过程标识符使用的语法树节点进行处理。

(4)类型一致性检查:后根遍历语法树,遍历时只针对运算类型表达式节点,常量表达式类型节点,标识符表达式类型节点,条件语句类型节点,赋值语句类型节点,写语句类型节点,循环语句类型节点,过程调用语句类型节点。

(四)练习该实验的目的和思路:

本实验需要利用到大量的编译原理的相关知识,通过这个练习可大大提高学生对语义分析的理解。本实验的结果可作为课程设计的基础。

7

六、实验报告要求

(1)功能描述:该子模块具有什么功能?

(2)程序结构描述:程序总体执行流程图。

(3)实验过程记录:出错次数、出错严重程度、解决办法摘要。

(4)实验总结:你在实验准备过程中花时多少?多少时间在纸上设计?多少时间上机输入和调试?多少时间在思考问题?遇到了哪些难题?你是怎么克服的?你对你的实验效果评价如何?你的收获有哪些?

七、注意事项

1.本实验的要求为掌握语义检查的一般内容;学会在语法分析的同时进行语义检查;学会将语义分析作为一遍独立的扫描。

2.如果自己设计程序,应做好以下工作:

①模块设计:将程序分成合理的多个模块(函数),每个模块做具体的同一事情。

②写出(画出)设计方案:模块关系简图、流程图、全局变量、函数接口等。

③编程时注意编程风格:空行的使用、注释的使用、缩进的使用、变量合理命名等。

3.该实验课约须课余准备4小时;上机一次2小时;完成实验报告2小时。

4.需提交:①程序源代码;②已经测试通过的测试数据10组(以“第一组输入/输出/第二组输入/输出/第三组输入/输出……”的格式存放)。

八、思考题

1.该试验的主要难点是什么?如何克服?

2.这一章的重点和难点是什么?

实验四、中间代码生成(2学时)

一、实验目的

复习前面课文中所学的中间代码生成的相关知识,使学生掌握几种常见的中间代码表示形式,了解几种常见的中间代码生成方法,掌握由语法树到四元式中间代码的生成方法。

8

二、实验内容

在语义分析的基础上,利用SNL等编译器或自己编写一个程序将语法和语义分析的结果变为四元式等中间代码,以增强学生对本章节中的四元式等中间代码理解。

三、实验仪器、设备及材料

1、一人一台计算机,独立完成实验。

2、计算机硬件的最低配置为:PentiumⅢCPU、128M RAM、CDROM、硬盘、软驱、彩显。

3、计算机软件的基本要求:SNL语言编译器或软件开发工具,如Eclipse + MinGW、

Microsoft Visual C++等。

四、实验原理

中间代码生成阶段不是编译器的必须阶段,生成中间代码的目的是为了便于优化和移植。在SNL语言的编译器中,经过语法分析或语义分析得到的语法树实际上已经是一种中间代码表示形式,可以在它的基础上进行优化和目标代码生成操作。但是,为了更好地了解中间代码表示形式、中间代码生成和优化技术,SNL语言编译器将中间代码生成作为独立的一遍扫描。

变量的中间代码、表达式的中间代码、语句的中间代码的结构见教材。从语法树到四元式的生成方法,下面以赋值语句节点为例给出解释。赋值语句节点结构如下:(StmtK,AssignK,child[0],child[1],Null),其四元式的生成过程如下:

1. 以赋值语句节点的第一个儿子节点child[0]为参数,调用变量的处理函数GenVar,生成赋值左部变量的中间代码,并返回变量的ARG结构指针Larg;

2. 以赋值语句节点的第二个儿子节点child[1]为参数,调用表达式的处理函数GenExpr,生成赋值右部表达式的中间代码,并返回表达式的ARG结构指针Rarg;

3. 生成中间代码(ASSIG,Rarg,Larg,NULL)

五、实验步骤

(一)准备:阅读课本有关章节,准备测试数据。

(二)上课上机:上机调试,发现错误,分析错误,给出错误原因,并写出该源程序的语义分析结果。

(三)具体步骤:

9

(1)熟悉SNL语言的定义,明确SNL语言的程序结构;

(2)熟悉语法树的结构,准备上机实验数据;

(3)熟悉要使用的四元式代码,扫描语法树生成中间代码。

(四)练习该实验的目的和思路:

本实验需要利用到大量的编译原理的相关知识,通过这个练习可大大提高学生对中间代码生成的理解。本实验的结果可作为课程设计的基础。

六、实验报告要求

(1)功能描述:该子模块具有什么功能?

(2)程序结构描述:程序总体执行流程图。

(3)实验过程记录:出错次数、出错严重程度、解决办法摘要。

(4)实验总结:你在实验准备过程中花时多少?多少时间在纸上设计?多少时间上机输入和调试?多少时间在思考问题?遇到了哪些难题?你是怎么克服的?你对你的实验效果评价如何?你的收获有哪些?

七、注意事项

1.本实验的要求为:

①了解中间代码生成是为优化和移植而进行的;

②了解几种常见中间代码表示形式掌握符号表应包含的符号的属性信息;

③会用简单的程序实现中缀式到后缀式的转换;

④会用栈实现复杂表达式的求值;

⑤掌握常见程序结构的中间代码结构;

⑥掌握由语法树到四元式中间代码的转换方法。

2.如果自己设计程序,应做好以下工作:

①模块设计:将程序分成合理的多个模块(函数),每个模块做具体的同一事情。

②写出(画出)设计方案:模块关系简图、流程图、全局变量、函数接口等。

③编程时注意编程风格:空行的使用、注释的使用、缩进的使用、变量合理命名等。

3.该实验课约须课余准备4小时;上机一次2小时;完成实验报告2小时。

4.需提交:①程序源代码;②已经测试通过的测试数据10组(以“第一组输入/输出/第二组输入/输出/第三组输入/输出……”的格式存放)。

八、思考题

1.该试验的主要难点是什么?如何克服?

10

2.这一章的重点和难点是什么?

实验五、目标代码生成(2学时)

一、实验目的

复习前面课文中所学的中间代码生成的相关知识,使学生了解目标代码生成阶段在编译处理过程中的功能和作用;了解常用的三种目标代码形式及其优缺点;了解虚拟机及其指令系统;深入理解并掌握有中间代码向目标代码转换的过程和原理。

二、实验内容

利用SNL等编译器或自己编写一个程序将语法分析树或四元式等中间代码变为目标代码,使学生了解常用的三种目标代码形式及其优缺点,并深入理解并掌握有中间代码向目标代码转换的过程和原理。

三、实验仪器、设备及材料

1、一人一台计算机,独立完成实验。

2、计算机硬件的最低配置为:PentiumⅢCPU、128M RAM、CDROM、硬盘、软驱、彩显。

3、计算机软件的基本要求:SNL语言编译器或软件开发工具,如Eclipse + MinGW、

Microsoft Visual C++等。

四、实验原理

在SNL语言的编译器中,经过语法分析或语义分析得到的语法树实际上已经是一种中间代码表示形式,可以在它的基础上进行优化和目标代码生成操作。通常的目标代码,即在实际机器上的指令序列,有绝对地址机器代码、可重定位的机器代码、汇编代码三种。在本系统中采用虚拟目标代码,即在虚拟机上运行的目标程序,在本地机器上具备虚拟机的解释器。通过本实验可以使学生了解常用的代码生成程序的开发方法、全局寄存器分配法和代码生成程序的自动化构造方法。

11

五、实验步骤

(一)准备:阅读课本有关章节,准备测试数据。

(二)上课上机:上机调试,发现错误,分析错误,给出错误原因,并写出该源程序的语义分析结果。

(三)具体步骤:

(1)四元式到目标代码的转换分析

1)取ARG结构值对应的目标代码

四元式中间代码的操作分量和目标量以ARG结构给出,在生成目标代码的过程中,首先要根据ARG结构取得对应的值或者地址,存入累加寄存器ac中,再生成运算的目标代码。从ARG结构取值的过程如下表所示:

1)标号和跳转的处理:处理标号和跳转,需要用到标号地址表;表的结构为:

12

中间代码标号目标代码地址下一项

a 遇到标号定位时:设标号为L,应转向的目标代码为p1,分为两种情况:

在标号地址表中没有L项,则填写表项(L,p1,NULL),并链入表尾;

在标号地址表中有L项(L,addr,Next),则根据当前pc,回填addr对应的目标代码。

b 遇到跳转代码时:设要跳到的标号为L,这条语句对应的目标地址为p2,分为两种情

况:

在标号地址表中没有L项,则构造一个表项(L,p2,NULL),链入表尾;

在标号地址表中有L项(L,p1,next),则从中取出L的代码地址p1,直接生成目标代码。

2)形实参结合的处理:

a 形参为值参:

实参是常数值:将常数值送入相应存储单元;

实参是直接变量:找到变量的存储地址,取值,送相应存储单元;

实参是间接变量:此时变量的存储单元存放的是地址。找到变量的存储地址,取内容作为地址,再取内容,得到实参值,送相应存储单元;

b 形参为变参:这时实参必须是变量,长度为1。

实参是直接变量:应将实参变量的地址送入形参单元;找到变量的存储地址,送相应存储单元;

实参是间接变量:要送实参变量单元的内容;找到变量的存储地址,取内容,送相应存储单元。

3) 过程调用的工作分配:

由于过程调用中的有些工作是相同的,如果都放在调用语句处处理,当一个过程被多个过程调用时,就要重复很多目标代码。从语法树生成目标代码时,所有过程调用的处理工作都必须放在调用语句处进行处理。而从中间代码生成目标代码时,由于有过程入口和过程出口中间代码的存在,我们就可以把有些工作安排在子程序的入口和出口处完成。这样,过程调用中的整个工作(除过程体的执行部分)可分配到过程调用处,过程入口处和过程出口处。这样就可以节省一些目标代码。具体分配如下:

过程调用代码完成:保存旧的display表的偏移量;

设置新的display表的偏移;

保存返回地址;

转向过程入口。

13

过程入口处完成:保存sp值;

保存层数;

保存累加寄存器的内容,ac,ac1,ac2

构造NewAR的Display表;

修改sp和top值:sp:=top ;top:= top+NewAR.Size 过程出口处完成:恢复寄存器的内容;

恢复sp和top的值:top:=sp;sp:=CurrentAR.sp;

取出返回地址,返回。

(四)练习该实验的目的和思路:

本实验需要利用到大量的编译原理的相关知识,通过这个练习可大大提高学生对目标代码生成的理解。本实验的结果可作为课程设计的基础。

六、实验报告要求

(1)功能描述:该子模块具有什么功能?

(2)程序结构描述:程序总体执行流程图。

(3)实验过程记录:出错次数、出错严重程度、解决办法摘要。

(4)实验总结:你在实验准备过程中花时多少?多少时间在纸上设计?多少时间上机输入和调试?多少时间在思考问题?遇到了哪些难题?你是怎么克服的?你对你的实验效果评价如何?你的收获有哪些?

七、注意事项

1.本实验的要求为:

①熟练掌握虚拟机的指令系统;

②理解并掌握指令选择的方法;

③理解多寄存器分配的原则和方法;

④熟练掌握基本语句从四元式中间代码形式到目标代码的翻译原理和方法;

⑤如有可能,独立完成目标代码生成程序。

2.如果自己设计程序,应做好以下工作:

①模块设计:将程序分成合理的多个模块(函数),每个模块做具体的同一事情。

②写出(画出)设计方案:模块关系简图、流程图、全局变量、函数接口等。

③编程时注意编程风格:空行的使用、注释的使用、缩进的使用、变量合理命名等。

3.该实验课约须课余准备4小时;上机二次4小时;完成实验报告4小时。

4.需提交:①程序源代码;②已经测试通过的测试数据10组(以“第一组输入/输出/第二组输入/输出/第三组输入/输出……”的格式存放)。

14

八、思考题

1.该试验的主要难点是什么?如何克服?

2.这一章的重点和难点是什么?

15

实验报告示例:有限自动机的运行

(下面以实验报告的形式向大家展示如何设计程序,以及如何书写实验步骤)

一、实验题目:有限自动机的运行(或“利用状态图判断无符号定点实数”等)

二、实验目的:

1.理解有限自动机的作用;

2.利用状态图和状态表表示有限自动机;

3.以程序实现有限自动机的运行过程。

三、实验内容:

利用状态表和有限自动机的运行原理编制程序,使得程序能够识别一个输入串是否为一个有效的无符号定点实数。

四、实验仪器、设备及材料

1、一人一台计算机,独立完成实验。

2、计算机硬件的最低配置为:PentiumⅢCPU、128M RAM、CDROM、硬盘、软驱、彩显。

3、计算机软件的基本要求:PL/0编译程序和软件开发工具,如Eclipse + MinGW、

Microsoft Visual C++等。

五、实验要求:

1.设计要求:利用状态图或状态表相关理论,利用有限自动机理论。

2.功能要求:输入一个单行无空格的字符串(以“#”号结束),如果该字符串是一个无符号定点实数,则显示“接受”,否则显示“不接受”。

3.输入/输出示例:(1)输入:“3.14”,输出:“接受”;(2)输入:“3.1.4”,输出:“不接受”;(3)输入:“3ab”,输出:“不接受”。

六、设计步骤:

1.理论准备:写出/画出判断无符号定点实数的正规式和有限自动机的状态图和状态表;

2.设计测试数据;

3.设计思路和代码;

4.编译调试;

5.测试;

6.总结。

16

七、详细内容:

1.理论准备:

(1)无符号定点实数的正规式:R=dd*(.dd*|ε),其中d=0|1|2|3|4|5|6|7|8|9。

(2)它的有限自动机的状态图:

(3)

2

3.设计思路和代码:

●程序运行特征:从键盘输入数据,回车;程序判断后输出“接受/不接受”;输入以

“#”开头的行表示程序结束,否则循环接受键盘输入。

●主程序结构:根据“程序运行特征”,主程序可以设计成一个循环,每次循环调用判

断函数,这个判断函数就是有限自动机的运行控制函数。

17

●有限自动机的运行控制:先置当前运行状态S=0,然后读进一个字符,根据状态表

确定下一个状态是什么?如此循环,最后遇到输入“#”,则判断S的值是否为终态,如果是则返回接受标志,否则返回不接受标志。

以输入“3.14#”为例:开始S=0,读入“3”,根据状态表改变为S=1,再读入“.”

改变状态S=2,接着S=3和S=3;最后读入“#”,判断S=3的状态为终态,返回接

受标志。

●数据设计:将状态表放入全局的字符型二维数组中,将终态标志放在全局的字符型

一维数组中。

●代码见另外文件。

4.编译调试情况概述(略。以100字以内写你编译调试的情况是否顺利,问题出在哪里?你是怎么解决的?)

5.测试(见上面表格)

6.总结(略。以300字左右写你对程序的理解和评价,以及你在其中遇到的问题和克服的过程,也写写你的收获)

18

测试技术实验指导书及实验报告2006级用汇总

矿压测试技术实验指导书 学号: 班级: 姓名: 安徽理工大学 能源与安全学院采矿工程实验室

实验一常用矿山压力仪器原理及使用方法 第一部分观测岩层移动的部分仪器 ☆深基点钻孔多点位移计 一、结构简介 深基点钻孔多点位移计是监测巷道在掘进和受采动影响的整个服务期间,围岩内部变形随时间变化情况的一种仪器。 深基点钻孔多点位移包括孔内固定装置、孔中连接钢丝绳、孔口测读装置组成。每套位移计内有5~6个测点。其结构及其安装如图1所示。 二、安装方法 1.在巷道两帮及顶板各钻出φ32的钻孔。 2.将带有连接钢丝绳的孔内固定装置,由远及近分别用安装圆管将其推至所要求的深度。(每个钻孔布置5~6个测点,分别为;6m、5m、4m、3m、2m、lm或12m、10m、8m、6m、4m、2m)。 3.将孔口测读装置,用水泥药圈或木条固定在孔口。 4。拉紧每个测点的钢丝绳,将孔口测读装置上的测尺推至l00mm左右的位置后,由螺丝将钢丝绳与测尺固定在一起。 三、测试方法 安装后先读出每个测点的初读数,以后每次读得的数值与初读数之差,即为测点的位移值。当读数将到零刻度时,松开螺丝,使测尺再回到l00mm左右的位置,重新读出初读数。 ☆顶板离层指示仪 一、结构简介: 顶板离层指示仪是监测顶板锚杆范围内及锚固范围外离层值大小的一种监测仪器,在顶板钻孔中布置两个测点,一个在围岩深部稳定处,一个在锚杆端部围岩中。离层值就是围岩中两测点之间以及锚杆端部围岩与巷道顶板表面间的相对位移值。顶板离层指示仪由孔内固定装置、测量钢丝绳及孔口显示装置组成如图1所示。

二、安装方法: 1.在巷道顶板钻出φ32的钻孔,孔深由要求而定。 2.将带有长钢丝绳的孔内固定装置用安装杆推到所要求的位置;抽出安装杆后再将带有短钢丝绳的孔内固定装置推到所要求的位置。 3.将孔口显示装置用木条固定在孔口(在显示装置与钻孔间要留有钢丝绳运动的间隙)。 4.将钢丝绳拉紧后,用螺丝将其分别与孔口显示装置中的圆管相连接,且使其显示读数超过零刻度线。 三、测读方法: 孔口测读装置上所显示的颜色,反映出顶板离层的范围及所处状态,显示数值表示顶板的离层量。☆DY—82型顶板动态仪 一、用途 DY-82型顶板动态仪是一种机械式高灵敏位移计。用于监测顶底板移近量、移近速度,进行采场“初次来压”和“周期来压”的预报,探测超前支撑压力高 峰位置,监测顶板活动及其它相对位移的测量。 二、技术特征 (1)灵敏度(mm) 0.01 (2)精度(%) 粗读±1,微读±2.5 (3)量程(mm) 0~200 (4)使用高度(mm) 1000~3000 三、原理、结构 其结构和安装见图。仪器的核心部件是齿条6、指针8 以及与指针相连的齿轮、微读数刻线盘9、齿条下端带有读 数横刻线的游标和粗读数刻度管11。 当动态仪安装在顶底板之间时,依靠压力弹簧7产生的 弹力而站立。安好后记下读数(初读数)并由手表读出时间。 粗读数由游标10的横刻线在刻度管11上的位置读出,每小 格2毫米,每大格(标有“1”、“22'’等)为10毫米,微读数 由指针8在刻线盘9的位置读出,每小格为0.01毫米(共200 小格,对应2毫米)。粗读数加微读数即为此时刻的读数。当 顶底板移近时,通过压杆3压缩压力弹簧7,推动齿条6下 移,带动齿轮,齿轮带动指针8顺时针方向旋转,顶底板每 移近0.01毫米,指针转过1小格;同时齿条下端游标随齿条 下移,读数增大。后次读数减去前次读数,即为这段时间内的顶底板移近量。除以经过的时间,即得

编译原理实验指导

编译原理实验指导 实验安排: 上机实践按小组完成实验任务。每小组三人,分别完成TEST语言的词法分析、语法分析、语义分析和中间代码生成三个题目,语法分析部分可任意选择一种语法分析方法。先各自调试运行,然后每小组将程序连接在一起调试,构成一个相对完整的编译器。 实验报告: 上机结束后提交实验报告,报告内容: 1.小组成员; 2.个人完成的任务; 3.分析及设计的过程; 4.程序的连接; 5.设计中遇到的问题及解决方案; 6.总结。

实验一词法分析 一、实验目的 通过设计编制调试TEST语言的词法分析程序,加深对词法分析原理的理解。并掌握在对程序设计语言源程序进行扫描过程中将其分解为各类单词的词法分析方法。 编制一个读单词过程,从输入的源程序中,识别出各个具有独立意义的单词,即基本字、标识符、常数、运算符、分隔符五大类。并依次输出各个单词的内部编码及单词符号自身值。 二、实验预习提示 1.词法分析器的功能和输出格式 词法分析器的功能是输入源程序,输出单词符号。词法分析器的单词符号常常表示 成以下的二元式(单词种别码,单词符号的属性值)。 2.TEST语言的词法规则 |ID|ID |NUM →a|b|…|z|A|B|…|Z →1|2|…|9|0 →+|-|*|/|=|(|)|{|}|:|,|;|<|>|! →>=|<=|!=|== →/* →*/ 三、实验过程和指导 1.阅读课本有关章节,明确语言的语法,画出状态图和词法分析算法流程图。 2.编制好程序。 3.准备好多组测试数据。 4.程序要求 程序输入/输出示例:

人机交互技术实验二熟悉认知心理学和人机工程学

重庆邮电大学移通学院学生实验报告 实验名称:熟悉认知心理学和人机工程学 专业班级:数字媒体技术 02141401 姓名:罗钧 学号: 2014210xxx 实验日期:

实验二:熟悉认知心理学和人机工程学 一、实验目的 (1)了解人机交互技术的研究内容; (2)熟悉认知心理学的基本概念和主要内容; (3)熟悉人机工程学的基本概念和主要内容。 二、工具/准备工作 需要准备一台带有浏览器,能够访问因特网的计算机。 三、实验内容与步骤 1.认知学的概念 (1)分析“人机界面学”的主要研究内容。 人机界面(Human Machine Interaction,简称HMI),又称用户界面或使用者界面,是人与计算机之间传递、交换信息的媒介和对话接口,是计算机系统的重要组成部分。是系统和用户之间进行交互和信息交换的媒介,它实现信息的内部形式与人类可以接受形式之间的转换。凡参与人机信息交流的领域都存在着人机界面。 (2)给出“认知心理学”的定义。 认知心理学是二十世纪50年代中期在西方兴起的一种心理学思潮,是作为人类行为基础的心理机制,其核心是输入和输出之间发生的内部心理过程。它与西方传统哲学也有一定联系,其主要特点是强调知识的作用,认为知识是决定人类行为的主要因素。 认知心理学是最新的心理学分支之一,从1950至1960年代间才发展出来的,到70年代成为西方心理学的主要流派。1956年被认为是认知心理学史上的重要年份。这一年几项心理学研究都体现了心理学的信息加工观点。如Chomsky的语言理论和纽厄尔(Alan Newell)和西蒙(Herbert Alexander simon)的“通用问题解决者”模型。“认知心理学”第一次在出版物出现是在1967年Ulrich Neisser的新书。而唐纳德·布罗德本特于1958年出版的《知觉与传播》一书则为认知心理学取向立下了重要基础。此后,认知心理取向的重点便在唐纳德·布罗德本特所指出的认知的讯息处理模式--一种以心智处理来思考与推理的模式。因此,思考与推理在人类大脑中的运作便像电脑软件在电脑里运作相似。认知心理学理论时常谈到输入、表征、计算或处理,以及输出等概念。 (3)给出“软件心理学”的定义。 软件心理学(software psychology)用实验心理学的技术和认知心理学的概念来进行软件生产的方法,即将心理学和计算机系统相结合而产生的新学科。 (4)为什么说“了解并遵循认知心理学的原理是进行人机交互界面设计的基础”?请简单阐述之。 人机界面设计,主要用理论来指导设计,了解认知心理学,一方面防止出错,另一方面用以提高工作效率。了解认知心理学,可以使设计者对用户,即使用计算机的人,有一个较为清晰的认识,也就是说对人的心理基础要有所了解,以提高人机界面设计的水平,

混凝土结构实验指导书及实验报告(学生用)

土木工程学院 《混凝土结构设计基本原理》实验指导书 及实验报告 适用专业:土木工程周淼 编 班级::学 号: 理工大学 2018 年9 月

实验一钢筋混凝土梁受弯性能试验 一、实验目的 1.了解适筋梁的受力过程和破坏特征; 2.验证钢筋混凝土受弯构件正截面强度理论和计算公式; 3.掌握钢筋混凝土受弯构件的实验方法及荷载、应变、挠度、裂缝宽度等数据的测试技术 和有关仪器的使用方法; 4.培养学生对钢筋混凝土基本构件的初步实验分析能力。 二、基本原理当梁中纵向受力钢筋的配筋率适中时,梁正截面受弯破坏过程表现为典型的三个阶段:第一阶段——弹性阶段(I阶段):当荷载较小时,混凝土梁如同两种弹性材料组成的组合梁,梁截面的应力呈线性分布,卸载后几乎无残余变形。当梁受拉区混凝土的最大拉应力达到混凝土的抗拉强度,且最大的混凝土拉应变超过混凝土的极限受拉应变时,在纯弯段某一薄弱截面出现首条垂直裂缝。梁开裂标志着第一阶段的结束。此时,梁纯弯段截面承担的弯矩M cr称为开裂弯矩。第二阶段——带裂缝工作阶段(II阶段):梁开裂后,裂缝处混凝土退出工作,钢筋应力急增,且通过粘结力向未开裂的混凝土传递拉应力,使得梁中继续出现拉裂缝。压区混凝土中压应力也由线性分布转化为非线性分布。当受拉钢筋屈服时标志着第二阶段的结束。此时梁纯弯段截面承担的弯矩M y称为屈服弯矩。第三阶段——破坏阶段(III阶段):钢筋屈服后,在很小的荷载增量下,梁会产生很大的变形。裂缝的高度和宽度进一步发展,中和轴不断上移,压区混凝土应力分布曲线渐趋丰满。当受压区混凝土的最大压应变达到混凝土的极限压应变时,压区混凝土压碎,梁正截面受弯破坏。此时,梁承担的弯矩M u 称为极限弯矩。适筋梁的破坏始于纵筋屈服,终于混凝土压碎。整个过程要经历相当大的变形,破坏前有明显的预兆。这种破坏称为适筋破坏,属于延性破坏。 三、试验装置

编译原理实验报告实验一编写词法分析程序

编译原理实验报告实验名称:实验一编写词法分析程序 实验类型:验证型实验 指导教师:何中胜 专业班级:13软件四 姓名:丁越 学号: 电子邮箱: 实验地点:秋白楼B720 实验成绩: 日期:2016年3 月18 日

一、实验目的 通过设计、调试词法分析程序,实现从源程序中分出各种单词的方法;熟悉词法分析 程序所用的工具自动机,进一步理解自动机理论。掌握文法转换成自动机的技术及有穷自动机实现的方法。确定词法分析器的输出形式及标识符与关键字的区分方法。加深对课堂教学的理解;提高词法分析方法的实践能力。通过本实验,应达到以下目标: 1、掌握从源程序文件中读取有效字符的方法和产生源程序的内部表示文件的方法。 2、掌握词法分析的实现方法。 3、上机调试编出的词法分析程序。 二、实验过程 以编写PASCAL子集的词法分析程序为例 1.理论部分 (1)主程序设计考虑 主程序的说明部分为各种表格和变量安排空间。 数组 k为关键字表,每个数组元素存放一个关键字。采用定长的方式,较短的关键字 后面补空格。 P数组存放分界符。为了简单起见,分界符、算术运算符和关系运算符都放在 p表中 (编程时,还应建立算术运算符表和关系运算符表,并且各有类号),合并成一类。 id和ci数组分别存放标识符和常数。 instring数组为输入源程序的单词缓存。 outtoken记录为输出内部表示缓存。 还有一些为造表填表设置的变量。 主程序开始后,先以人工方式输入关键字,造 k表;再输入分界符等造p表。 主程序的工作部分设计成便于调试的循环结构。每个循环处理一个单词;接收键盘上 送来的一个单词;调用词法分析过程;输出每个单词的内部码。 ⑵词法分析过程考虑 将词法分析程序设计成独立一遍扫描源程序的结构。其流程图见图1-1。 图1-1 该过程取名为 lexical,它根据输入单词的第一个字符(有时还需读第二个字符),判断单词类,产生类号:以字符 k表示关键字;i表示标识符;c表示常数;p表示分界符;s表示运算符(编程时类号分别为 1,2,3,4,5)。 对于标识符和常数,需分别与标识符表和常数表中已登记的元素相比较,如表中已有 该元素,则记录其在表中的位置,如未出现过,将标识符按顺序填入数组id中,将常数 变为二进制形式存入数组中 ci中,并记录其在表中的位置。 lexical过程中嵌有两个小过程:一个名为getchar,其功能为从instring中按顺序取出一个字符,并将其指针pint加1;另一个名为error,当出现错误时,调用这个过程, 输出错误编号。 2.实践部分

编译原理实验词法解析总结器的设计及实现.doc

南华大学 计算机科学与技术学院 实验报告 ( 2018~2019学年度第二学期) 课程名称编译原理 实验名称词法分析器的设计与 实现 姓名学号

专业班级 地点教师 1.实验目的及要求 实验目的 加深对词法分析器的工作过程的理解;加强对词法分析方法的掌握;能够采用一种编程语言实现简单的词法分析程序;能够使用自己编写的分析程序对简单的程序段进行词法分析。 实验要求 1.对单词的构词规则有明确的定义; 2.编写的分析程序能够正确识别源程序中的单词符号; 3.识别出的单词以 <种别码,值 >的形式保存在符号表中,正确设计和维护 符号表; 4.对于源程序中的词法错误,能够做出简单的错误处理,给出简单的错误 提示,保证顺利完成整个源程序的词法分析; 2.实验步骤 1.词法分析规则 <标识符 >::=< 字母 >|< 标识符 ><字母 >|< 标识符 ><数字 >

<常数 >::=< 数字 >|< 数字序列 ><数字 > <数字序列 >:: =<数字序列 ><数字 >|< 数字 >|<.> <字母 >::=a|b|c|??|x|y|z <数字 >::=0|1|2|3|4|5|6|7|8|9 <运算符 >::=< 关系运算符 >|< 算运算符 >|< 运算符 >|< 位运算符 >|< 运算符 > <算数运算符 >:: =+|-|*|/|...|-- <关系运算符 >:: =<|>|!=|>=|<=|== <运算符 >::=&&| || |! <位运算符 >::=&| | |! <运算符 >::==|+=|-=|/=|*= <分界符 >:: = ,|;|(|)|{|}|:| // |/**/ <保留字 >:: = main|if|else|while|do|for|...|void 2.符号的 符号种符号种 main0>26 if1>=27 else2<28 while3<=29 do4!30 for5!=31

土工实验指导书及实验报告

土工实验指导书及实验报告编写毕守一 安徽水利水电职业技术学院 二OO九年五月

目录 实验一试样制备 实验二含水率试验 实验三密度试验 实验四液限和塑限试验 实验五颗粒分析试验 实验六固结试验 实验七直接剪切试验 实验八击实试验 土工试验复习题

实验一试样制备 一、概述 试样的制备是获得正确的试验成果的前提,为保证试验成果的可靠性以及试验数据的可比性,应具备一个统一的试样制备方法和程序。 试样的制备可分为原状土的试样制备和扰动土的试样制备。对于原状土的试样制备主要包括土样的开启、描述、切取等程序;而扰动土的制备程序则主要包括风干、碾散、过筛、分样和贮存等预备程序以及击实等制备程序,这些程序步骤的正确与否,都会直接影响到试验成果的可靠性,因此,试样的制备是土工试验工作的首要质量要素。 二、仪器设备 试样制备所需的主要仪器设备,包括: (1)孔径0.5mm、2mm和5mm的细筛; (2)孔径0.075mm的洗筛; (3)称量10kg、最小分度值5g的台秤; (4)称量5000g、最小分度值1g和称量200g、最小分度值0.01g的天平;

(5)不锈钢环刀(内径61.8mm、高20mm;内径79.8mm、高20mm或内径61.8mm、高40mm); (6)击样器:包括活塞、导筒和环刀; (7)其他:切土刀、钢丝锯、碎土工具、烘箱、保湿器、喷水设备、凡士林等。 三、试样制备 (一)原状土试样的制备步骤 1、将土样筒按标明的上下方向放置,剥去蜡封和胶带,开启土样筒取土样。 2、检查土样结构,若土样已扰动,则不应作为制备力学性质试验的试样。 3、根据试验要求确定环刀尺寸,并在环刀内壁涂一薄层凡士林,然后刃口向下放在土样上,将环刀垂直下压,同时用切土刀沿环刀外侧切削土样,边压边削直至土样高出环刀,制样时不得扰动土样。 4、采用钢丝锯或切土刀平整环刀两端土样,然后擦净环刀外壁,称环刀和土的总质量。 5、切削试样时,应对土样的层次、气味、颜色、夹杂物、裂缝和均匀性进行描述。 6、从切削的余土中取代表性试样,供测定含水率以及颗粒分析、界限含水率等试验之用。

编译原理实验题目及报告要求

编译原理上机实验试题 一、实验目的 通过本实验使学生进一步熟悉和掌握程序设计语言的词法分析程序的设计原理及相关的设计技术, 如何针对确定的有限状态自动机进行编程序;熟悉和 掌握程序设计语言的语法分析程序的设计原理、熟悉 和掌握算符优先分析方法。 二、实验要求 本实验要求:①要求能熟练使用程序设计语言编程;②在上机之前要有详细的设计报告(预习报告); ③要编写出完成相应任务的程序并在计算机上准确 地运行;④实验结束后要写出上机实验报告。 三、实验题目 针对下面文法G(S): S→v = E E→E+E│E-E│E*E│E/E│(E)│v │i 其中,v为标识符,i为整型或实型数。要求完成 ①使用自动机技术实现一个词法分析程序; ②使用算符优先分析方法实现其语法分析程序,在 语法分析过程中同时完成常量表达式的计算。

1、题目(见“编译原理---实验题目.doc,“实验题目”中的第一项) 2、目的与要求(见“编译原理---实验题目.doc”) 3、设计原理: (1)单词分类:标识符,保留字,常数,运算符,分隔符等等 (2)单词类型编码 (3)自动机 4、程序流程框图 5、函数原型(参数,返回值) 6、关键代码(可打印,只打印关键代码) 7、调试: (1)调试过程中遇到的错误,如何改进的; (2)需要准备测试用例(至少3个,包含输入和输出)——(可打印) 8、思考: (1)你编写的程序有哪些要求是没有完成的,你觉得该采用什么方法去完成; (2)或者是你觉得程序有哪些地方可以进一步完善,简述你的完善方案。

1、题目(见“编译原理---实验题目.doc,“实验题目”中的第二项) 2、目的与要求(见“编译原理---实验题目.doc”) 3、设计原理:构造出算法优先关系表 4、程序流程框图 5、函数原型(参数,返回值) 6、关键代码(可打印,只打印关键代码) 7、调试: (1)调试过程中遇到的错误,如何改进的; (2)需要准备测试用例(至少3个,包含输入和输出)——(可打印) 8、思考: (1)你编写的程序有哪些要求是没有完成的,你觉得该采用什么方法去完成; (2)或者是你觉得程序有哪些地方可以进一步完善,简述你的完善方案。

人机工程学实验报告资料

人机工程学实验报告Hust工业设计专业,人机工程课程实验报告

必做实验(7个): 一、镜画仪: 是一项目动作技能迁移的实验。因通过镜子反射,和原图形相比镜中图像是上下倒置而左右不变。 实验一 实验二 自变量:试验次数 因变量:出错次数、使用时间 实验数据分析结果:1.随着实验次数的增加,实验者不变,但是其所用时间及错误次数都在变少,熟练程度明显增加。 2.在同样的情况和同样的图案上,实验的后一次测验比前一次的测验有所进步,就为正迁移效果。

二、光亮度辨别仪 光亮度辨别仪的作用:心理学中常用的一种视觉实验仪器。它可以测定明度差别阈限,也可以制作明度量表。 自变量:光亮度真实值 因变量:实际测量值、差值 实验数据分析结果:随着光亮度的增加,实验者对于光的敏感度下降,误差变大。 应用范围:可调节亮度的台灯,它的优点在于调节亮度的装置消耗的电能极少,节约了电能,减少了不必要的损耗,灯的亮度可根据不同的天气,不同的时间,人们不同的需求,调节不同的亮度,方便人们的生活。

三、瞬时记忆实验仪 仪器同时呈现一组随机数字或字母,在部分报告法实验中,要求被试再现当时指定的一部分,然后在指定的时间内通过大脑记录下来。 自变量:瞬时刺激时间 因变量:记忆保存量 实验数据分析结果:人的大脑在瞬时记忆中,记忆的时间越长,准确率越高。

四、记忆广度测试仪 适用于心理特点测定中的数字记忆广度实验和提高记忆力的训练。并具有同时测量被试视觉、记忆、反应速度三者结合能力的功能,是一种常用的心理学测量仪器。 自变量:不同的实验者 因变量:记忆广度分数、出错位数 实验数据分析结果:因为人与人的不同,其记忆能力不同,有记忆广度大的,也有记忆广度小的。 应用范围:用在小孩子的智力玩具上,刺激小孩子对数字的认识和敏感性,提高记忆力和反映能力,同时可以很好的帮助小孩子注意力的集中。

CAD上机实验指导书及实验报告

北京邮电大学世纪学院 实验、实习、课程设计报告撰写格式与要求 (试行) 一、实验报告格式要求 1、有实验教学手册,按手册要求填写,若无则采用统一实验报告封面。 2、报告一律用钢笔书写或打印,打印要求用A4纸;页边距要求如下:页边距上下各为2.5厘米,左右边距各为2.5厘米;行间距取固定值(设置值为20磅);字符间距为默认值(缩放100%,间距:标准)。 3、统一采用国家标准所规定的单位与符号,要求文字书写工整,不得潦草;作图规范,不得随手勾画。 4、实验报告中的实验原始记录,须经实验指导教师签字或登记。 二、实习报告、课程设计报告格式要求 1、采用统一的封面。 2、根据教学大纲的要求手写或打印,手写一律用钢笔书写,统一采用国家标准所规定的单位与符号,要求文字书写工整,不得潦草;作图规范,不得随手勾画。打印要求用A4纸;页边距要求如下:页边距上下各为2.5厘米,左右边距各为2.5厘米;行间距取固定值(设置值为20磅);字符间距为默认值(缩放100%,间距:标准)。 三、报告内容要求 1、实验报告内容包括:实验目的、实验原理、实验仪器设备、实验操作过程、原始数据、实验结果分析、实验心得等方面内容。 2、实习报告内容包括:实习题目、实习任务与要求、实习具体实施情况(附上图表、原始数据等)、实习个人总结等内容。 3、课程设计报告或说明书内容包括:课程设计任务与要求、总体方案、方案设计与分析、所需仪器设备与元器件、设计实现与调试、收获体会、参考资料等方面内容。 北京邮电大学世纪学院 教务处 2009-8

实验报告 课程名称计算机绘图(CAD) 实验项目AutoCAD二维绘图实验 专业班级 姓名学号 指导教师实验成绩 2016年11月日

《编译原理》实验指导书

《编译原理》实验指导书 实验目的和内容 编译原理实验的目的是使学生将编译理论运用到实际当中,实现一个简单语言集的词法、语法和语义分析程序,验证实际编译系统的实现方法,并加深对编译技术的认识。 实验内容共需实现编译器的词法、语法和语义分析程序三个组成部分。要求学生必须完成每个实验的基本题目要求,有余力的同学可尝试实验的扩展要求部分。 实验报告 要求每人针对所完成的实验内容上交一份实验报告,其中主要包括三方面内容:1、实验设计:实验采用的实现方法和依据(如描述语言的文法及其机内表示,词分析 的单词分类码表、状态转换图或状态矩阵等,语法分析中用到的分析表或优先矩阵等,语法制导翻译中文法的拆分和语义动作的设计编写等);具体的设计结果(应包括整体设计思想和实现算法,程序结构的描述,各部分主要功能的说明,法以及所用数据结构的介绍等)。 2、程序代码:实验实现的源程序清单,要求符合一般的程序书写风格,有详细的注释。 3、实验结果分析:自行编写若干源程序作为测试用例,对所生成的编译程序进行测试 (编译程序的输入与输出以文件的形式给出);运行结果分析(至少包括一个正确和一个错误单词或语句的运行结果);以及改进设想等。 注意事项 1、电子版实验报告和源程序在最后一次机时后的一周内上交。(每个同学上交一个压 缩文件,其命名格式为“学号_姓名.rar”,内含实验报告和一个命名为“源程序” 的文件夹。注意提交的源程序应是经过调试、测试成功的较为通用的程序,并应有相应的注释、运行环境和使用方法简介。) 2、不接受不完整的实验报告和没有说明注释的源程序,或者说明与程序、运行结果不 符合的作业。 特别鼓励:扩展题目 1、为亲身经历一个小型编译器的开发全过程,触摸一下与实际编译器开发相关的工作, 大家可以自由组成3人左右的小组,推举组长,模拟一个团队分工协作开发大型软件的实战环境,融入软件工程的思想规范和一般理论方法,初步体验从系统分析设计、编码测试到交付维护的一个完整编译器软件的开发过程。要求组长为每个小组成员分配主要负责的任务,完成相应的分析设计员、程序员和测试员等角色的工作,并以小组为单位提交一份实验报告和源程序,在报告封面上写明每个同学主要完成和负责的部分。 2、以组为单位完成的实验内容至少必须整合词法、语法和语义三个部分的实验,对于 选定的适当规模的文法(如C语言的一个大小适宜的子集),进行系统的总体设计、功能分析、编码测试等工作。完成一个从对源程序的词法分析开始,到中间代码生成的完整的编译器前端的开发,使所涉及到的编译系统的各个组成模块有机地衔接在一起,提交一份完整的实验报告和源程序,并将以下几个方面描述清楚:

编译原理实验 中间代码生成

实验四中间代码生成 一.实验目的: 掌握中间代码的四种形式(逆波兰式、语法树、三元式、四元式)。 二.实验内容: 1、逆波兰式定义:将运算对象写在前面,而把运算符号写在后面。用这种表示法表示的表 达式也称做后缀式。 2、抽象(语法)树:运算对象作为叶子结点,运算符作为内部结点。 3、三元式:形式序号:(op,arg1,arg2) 4、四元式:形式(op,arg1,arg2,result) 三、以逆波兰式为例的实验设计思想及算法 (1)首先构造一个运算符栈,此运算符在栈内遵循越往栈顶优先级越高的原则。 (2)读入一个用中缀表示的简单算术表达式,为方便起见,设该简单算术表达式的右端多加上了优先级最低的特殊符号“#”。 (3)从左至右扫描该算术表达式,从第一个字符开始判断,如果该字符是数字,则分析到该数字串的结束并将该数字串直接输出。 (4)如果不是数字,该字符则是运算符,此时需比较优先关系。 做法如下:将该字符与运算符栈顶的运算符的优先关系相比较。如果,该字符优先关系高于此运算符栈顶的运算符,则将该运算符入栈。倘若不是的话,则将此运算符栈顶的运算符从栈中弹出,将该字符入栈。 (5)重复上述操作(1)-(2)直至扫描完整个简单算术表达式,确定所有字符都得到正确处理,我们便可以将中缀式表示的简单算术表达式转化为逆波兰表示的简单算术表达式。 四、程序代码: //这是一个由中缀式生成后缀式的程序 #include<> #include<> #include<> #include<> #define maxbuffer 64 void main() { char display_out(char out_ch[maxbuffer], char ch[32]); //int caculate_array(char out_ch[32]); static int i=0; static int j=0; char ch[maxbuffer],s[maxbuffer],out[maxbuffer]; cout<<"请输入中缀表达式: ";

棒框仪实验报告

棒框仪实验报告 Document number:NOCG-YUNOO-BUYTT-UU986-1986UT

人机工程学 报告书 姓名:董思洋 班级:工业设计10-3班学号: 二零一二年

棒框仪实验指导书 陈亚明编 艺术与设计学院 二0一二年二月

棒框仪实验 一、实验目的 本仪器可测量一个倾斜的框对判断一根棒的垂直性影响的程度。被试的判断受倾斜的框的影响,相当于周围环境条件变化的影响,所以此 本仪器可以通过被试的认知方式来测量人格特性。 二、实验方法 两人一组,正确使用棒框仪进行测量: 1、一个放在平台上的观察筒被试观察面为圆白背景面板上有一个黑色正方形框和黑色棒。棒的倾斜度可由被试通过旋钮调节。 2、主试面有一个半圆形的刻度,圆弧内指针指示框的倾斜度,中央指针指示棒的倾斜度。主试调节面板上旋钮改变框与棒的倾斜度。 3、在平台上有一个水平仪,可通过旋转平台下面的螺丝将平台调整到水平的位置。此棒框仪的优点在于没有电源的条件下可以使用。 三、测量器具 人体形体测量尺350×165×215mm的棒框仪 四、实验内容 (1)将平台调到水平位置。 (2)根据实验的要求,主试将框和棒调到在一定的倾斜度。 (3)要求被试通过观察筒进行观察,并根据自己感觉将棒调整得与地面垂直。(4)从刻度上读出的棒的倾斜度,即记录下误差的度数和方向。 (5)主试调节不同的方框的倾斜度,即不同的场条件下,重复实验。由被试调整出的棒倾斜度总结出框对棒的影响,从而研究被试的场依存性。 五、实验要求 1.每位同学都要参与测量、被测量过程; 2.记录数据以度为单位 3.测量数据要准确,测量精确;

《流体力学》课程实验(上机)指导书及实验报告格式

《流体力学》课程实验指导书袁守利编 汽车工程学院 2005年9月

前言 1.实验总体目标、任务与要求 1)学生在学习了《流体力学》基本理论的基础上,通过伯努利方程实验、动量方程实 验,实现对基本理论的验证。 2)通过实验,使学生对水柱(水银柱)、U型压差计、毕托管、孔板流量计、文丘里流量计等流体力学常用的测压、测流量装置的结构、原理和使用有基本认识。 2.适用专业 热能与动力工程 3.先修课程 《流体力学》相关章节。 4.实验项目与学时分配 5. 实验改革与特色 根据实验内容和现有实验条件,在实验过程中,采取学生自己动手和教师演示相结合的方法,力求达到较好的实验效果。

实验一伯努利方程实验 1.观察流体流经实验管段时的能量转化关系,了解特定截面上的总水头、测压管水头、压强水头、速度水头和位置水头间的关系,从而加深对伯努利方程的理解和认识。 2.掌握各种水头的测试方法和压强的测试方法。 3.掌握流量、流速的测量方法,了解毕托管测速的原理。 二、实验条件 伯努利方程实验仪 三、实验原理 1.实验装置: 图一伯努利方程实验台 1.水箱及潜水泵 2.上水管 3.电源 4.溢流管 5.整流栅 6.溢流板 7.定压水箱 8.实验 细管9. 实验粗管10.测压管11.调节阀12.接水箱13.量杯14回水管15.实验桌 2.工作原理 定压水箱7靠溢流来维持其恒定的水位,在水箱下部装接水平放置的实验细管8,水经实验细管以恒定流流出,并通过调节阀11调节其出水流量。通过布置在实验管四个截面上的四组测压孔及测压管,可以测量到相应截面上的各种水头的大小,从而可以分析管路中恒定流动的各种能量形式、大小及相互转化关系。各个测量截面上的一组测压管都相当于一组毕托管,所以也可以用来测管中某点的流速。 电测流量装置由回水箱、计量水箱和电测流量装置(由浮子、光栅计量尺和光电子

编译原理实验指导书2010

《编译原理》课程实验指导书 课程编号: 课程名称:编译原理/Compiler Principles 实验总学时数: 8 适用专业:计算机科学与技术、软件工程 承担实验室:计算机学院计算机科学系中心实验室、计算机技术系中心实验室 一、实验教学的目的与要求 上机实习是对学生的一种全面综合训练,是与课堂听讲、自学和练习相辅相成的必不可少的一个教学环节。通常,实习题中的问题比平时的练习题要复杂,也更接近实际。编译原理这门课程安排的2次上机实验都属于一种设计类型的实验,每个实验的训练重点在于基本的编译技术和方法,而不强调面面俱到;实验的目的是旨在使学生进一步巩固课堂上所学的理论知识,深化理解和灵活掌握教学内容;培养学生编制算法的能力和编程解决实际问题的动手能力。 要求学生在上机前应认真做好各种准备工作,熟悉机器的操作系统和语言的集成环境,独立完成算法设计和程序代码的编写;上机时应随带有关的编译原理教材或参考书;要学会程序调试与纠错。 每次实验后要交实验报告,实验报告的内容应包括: (1)实验题目、班级、学号、姓名、完成日期; (2)简要的需求分析与概要设计; (3)详细的算法描述; (4)源程序清单; (5)给出软件的测试方法和测试结果; (6)实验的评价、收获与体会。 开发工具: (1)DOS环境下使用Turbo C; (2)Windows环境下使用Visual C++ 。 考核: 实验成绩占编译原理课程结业成绩的10%。 三、单项实验的内容和要求: 要求每个实验保证每个学生一台微机。 实验一(4学时):单词的词法分析程序设计。 (一)目的与要求 1.目的 通过设计、编制、调试一个具体的词法分析程序,加深对词法分析原理的理解,并掌握在对程序设计语言源程序进行扫描过程中将其分解为各类单词的词法分析方法。

《安全人机工程学》实验报告书 程洁 2

安全人机工程学 实 验 报 告 书 姓名:程洁 班级:安工1101 学号:201107420105 时间: 2013 年 12 月 31日

目录 实验一手指灵活性测试实验 (1) 实验二动作稳定性实验 (3) 实验三双手协调能力测试 (8) 实验四暗适应实验 (10) 实验五速度知觉测试实验 (13) 实验六明度实验 (17) 实验七反应时运动时测定实验 (18) 实验八深度知觉测定实验 (21) 实验九亮点闪烁仪实验 (25)

实验一手指灵活性测试实验 一、实验目的 手指灵活性测试是测定手指尖、手、手腕、手臂的灵活性,也可测定手和眼的协调能力。 本实验的要求为: 1. 学习和熟悉手指灵活性测试仪的用法; 2. 了解人的手指灵活性及其个体差异性。 二、实验仪器 EP707A 手指灵活性测试仪 (一)主要技术指标 1. 手指灵活性测试100孔(直径1.6mm),各孔中心距20mm; 2. 指尖灵活性测试M6、M5、M4、M3螺钉各25个 3. 计时范围0~9999.99秒 4. 电源电压AC220V/50HZ (二)仪器 1. 结构图 图1 手指灵活性测试仪

2. 记时器:1ms~9999 S,4位数字显示,内藏式整体结构 3. 金属插棒:直径1.5mm,长度20mm,110个 4. 实验用镊子:1把 三、实验步骤 1. 手指灵活性测试(插孔插板) 接上电源,打开电源开关,此时计时器显示为0000.00,然后插上手指灵活性插板,按复位键被试即可进行测试,当被试用镊子钳住?1.5mm插针插入起点时,计时器开始计时,然后依次用镊子(从左到右,从上到下)钳住?1.5mm插针插满100个孔至终点时计时器停止计时,此时计时器显示时间为被试做完这一实验所用总时间。 当测试第二次实验时只要按下复位键计时器全部复位,即可反复测试。 2. 手指尖灵活性测试(螺栓插板) 接上电源打开电源开关,此时计时器显示为0000.00,然后插上指尖灵活性插板(装有M6、M5、M4、M3螺栓各25个),按复位键被试即可进行测试,当被试放入起始点第一个M6垫圈起,计时器开始计时,然后拧上螺母,依次操作至终点最后一个M3垫圈时,计时器停止计时时,然后拧上螺母,此时计时器显示时间为被试做完这一实验所用总时间。 当测试第二次实验时只要按下复位键计时器全部复位,即可反复测试。 四、实验数据及报告 1. 数据记录 2. 数据分析 比较从左到右和从右到左这两种情况手指或手指尖的灵活性。 从自身实验数据来看,从右到左的手指灵活性要比从左到右的灵活性高。

电磁场实验指导书及实验报告

CENTRAL SOUTH UNIVERSITY 题目利用Matlab模拟点电荷电场的分布姓名xxxx 学号xxxxxxxxxx 班级电气xxxx班 任课老师xxxx 实验日期2010-10

电磁场理论 实验一 ——利用Matlab 模拟点电荷电场的分布 一.实验目的: 1.熟悉单个点电荷及一对点电荷的电场分布情况; 2.学会使用Matlab 进行数值计算,并绘出相应的图形; 二.实验原理: 根据库伦定律:在真空中,两个静止点电荷之间的作用力与这两个电荷的电量乘积成正比,与它们之间距离的平方成反比,作用力的方向在两个电荷的连线上,两电荷同号为斥力,异号为吸力,它们之间的力F 满足: R R Q Q k F ? 212 = (式1) 由电场强度E 的定义可知: R R kQ E ? 2 = (式2) 对于点电荷,根据场论基础中的定义,有势场E 的势函数为 R kQ U = (式3) 而 U E -?= (式4) 在Matlab 中,由以上公式算出各点的电势U ,电场强度E 后,可以用Matlab 自带的库函数绘出相应电荷的电场分布情况。 三.实验内容: 1. 单个点电荷 点电荷的平面电力线和等势线 真空中点电荷的场强大小是E=kq /r^2 ,其中k 为静电力恒量, q 为电量, r 为点电荷到场点P(x,y)的距离。电场呈球对称分布, 取电量q> 0, 电力线是以电荷为起点的射线簇。以无穷远处为零势点, 点电荷的电势为U=kq /r,当U 取

常数时, 此式就是等势面方程.等势面是以电荷为中心以r 为半径的球面。 平面电力线的画法 在平面上, 电力线是等角分布的射线簇, 用MATLAB 画射线簇很简单。取射线的半径为( 都取国际制单位) r0=, 不同的角度用向量表示( 单位为弧度) th=linspace(0,2*pi,13)。射线簇的终点的直角坐标为: [x,y]=pol2cart(th,r0)。插入x 的起始坐标x=[x; *x].同样插入y 的起始坐标, y=[y; *y], x 和y 都是二维数组, 每一列是一条射线的起始和终止坐标。用二维画线命令plot(x,y)就画出所有电力线。 平面等势线的画法 在过电荷的截面上, 等势线就是以电荷为中心的圆簇, 用MATLAB 画等势 线更加简单。静电力常量为k=9e9, 电量可取为q=1e- 9; 最大的等势线的半径应该比射线的半径小一点 r0=。其电势为u0=k8q /r0。如果从外到里取7 条等势线, 最里面的等势线的电势是最外面的3 倍, 那么各条线的电势用向量表示为: u=linspace(1,3,7)*u0。从- r0 到r0 取偶数个点, 例如100 个点, 使最中心点的坐标绕过0, 各点的坐标可用向量表示: x=linspace(- r0,r0,100), 在直角坐标系中可形成网格坐标: [X,Y]=meshgrid(x)。各点到原点的距离为: r=sqrt(X.^2+Y.^2), 在乘方时, 乘方号前面要加点, 表示对变量中的元素进行乘方计算。各点的电势为U=k8q. /r, 在进行除法运算时, 除号前面也要加点, 同样表示对变量中的元素进行除法运算。用等高线命令即可画出等势线 contour(X,Y,U,u), 在画等势线后一般会把电力线擦除, 在画等势线之前插入如下命令hold on 就行了。平面电力线和等势线如图1, 其中插入了标题等等。越靠近点电荷的中心, 电势越高, 电场强度越大, 电力线和等势线也越密。

编译原理实验-词法分析器的设计说明

集美大学计算机工程学院实验报告 课程名称:编译原理班级: 指导教师:: 实验项目编号:实验一学号: 实验项目名称:词法分析器的设计实验成绩: 一、实验目的 通过设计编制调试一个具体的词法分析程序,加深对词法分析原理的理解。并掌握在对程序设计语言源程序进行扫描过程中将其分解为各类单词的词法分析方法。 二、实验容 编写一个词法分析器,从输入的源程序(编写的语言为C语言的一个子集)中,识别出各个具有独立意义的单词,即基本保留字、标识符、常数、运算符、分隔符五大类。并依次输出各个单词的部编码及单词符号自身值。(遇到错误时可显示“Error”,然后跳过错误部分继续显示) 三、实验要求 1、词法分析器的功能和输出格式 词法分析器的功能是输入源程序,输出单词符号。词法分析器的单词符 2 别单词的类型,将标识符和常量分别插入到相应的符号表中,增加错误处理等。 3、编程语言不限。

四、实验设计方案 1、数据字典 本实验用到的数据字典如下表所示:

3、实验程序 #include #include #include #include //判断读入的字符是否为字母 bool isLetter(char c){ if((c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z')){ return true; } else return false; } //判断读入的字符是否为数字 bool isDigit(char c){ if(c >='0' && c <= '9'){ return true; } else return false; } //判断是否为关键字 bool isKey(char *string) { if(!strcmp(string,"void") || !strcmp(string,"if")|| !strcmp(string,"for")|| !strcmp(string,"wh ile") || !strcmp(string,"do")|| !strcmp(string,"return")|| !strcmp(stri ng,"break") || !strcmp(string,"main")|| !strcmp(string,"int")|| !strcmp(strin g,"float")|| !strcmp(string,"char") || !strcmp(string,"double")|| !strcmp(string,"String"))

编译原理实验指导

编译原理实验指导书 主编:徐静李娜 信息与电气工程学院 2010年3月

概述 一、本课程实验的目的和任务 编译原理是一门实践性很强的课程,只有通过实践,才能真正掌握。实际的编译程序是十分复杂的,有时由多达十几万条指令组成。为此,编译原理的实践教学,采用简化编译过程的办法,选择最关键的3个环节──词法分析、语法分析(包括语义处理、产生无优化的目标指令)、连接调试,进行编程和调试训练。每个环节作为一个实践课题。先分别编程调试,再连接在一起总调。 二、实验方法 任何一个实用的高级语言,其语法都比较复杂,如选其作为源语言,很难实践全过程。故本实验将定义一个简化的语言── C语言的一个子集作为源语言,设计调试出它的编译程序。前后贯穿这一条主线进行实践。每次都可利用课余时间编程,利用上机时间进行输入和调试。 三、实验报告的规范和要求 每个实验完成后写出实验报告。实验报告的内容包括如下内容: 一、实验目的 二、程序设计时采用的算法和方法 三、输入的源程序 四、词法分析程序清单和输出结果。 五、心得体会

实验一词法分析 一、实验目的: (1)通过设计编制调试一个具体的词法分析程序,理解词法分析在编译程序中的作用。 (2)加深对有穷自动机模型的理解。 (3)掌握词法分析程序的实现方法和技术。 (4)用C语言对一个简单语言的子集编制一个一遍扫描的程序,以加深对编译原理的理解,掌握编译程序的实现方法和技术。 编制一个读单词过程,从输入的源程序中,识别出各个具有独立意义的单词,即基本保留字、标识符、常数、运算符、分隔符五大类。并依次输出各个单词的内部编码及单词符号自身值。(遇到错误时可显示“Error”,然后跳过错误部分继续显示)。 二、实验预习提示 1. 词法分析器的功能和输出格式 词法分析器的功能是输入源程序,输出单词符号。词法分析器的单词符号常常表示成以下的二元式(单词种别码,单词符号的属性值)。本实验中,采用的是一类符号一种别码的方式。 2. 单词的BNF表示 <标识符>→ <字母><字母数字串> <字母数字串>→<字母><字母数字串>|<数字> <字母数字串>| <下划线><字母数字串>|ε <无符号整数>→<数字> <数字串> <数字串>→<数字><数字串>|ε <加法运算符>→+ <减法运算符>→- <大于关系运算符>→> <大于等于关系运算符>→>= 3. “超前搜索”方法

相关主题
文本预览
相关文档 最新文档