《编译原理实验》实验指导书.doc_第1页
《编译原理实验》实验指导书.doc_第2页
《编译原理实验》实验指导书.doc_第3页
《编译原理实验》实验指导书.doc_第4页
《编译原理实验》实验指导书.doc_第5页
已阅读5页,还剩9页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

编译原理实验实验指导书 广州大学实验课程建设项目编译原理实验实验指导书广州大学计算机科学与教育软件学院xx年3月1实验过程要求在面向对象设计与开发的课程实验过程中,要求学生做到 (1)预习实验指导书有关部分,认真做好实验内容的准备,就实验可能出现的情况提前思考和分析。 (2)仔细观察上机时出现的各种现象,记录主要情况,做出必要说明和分析。 (3)认真书写实验报告。 实验报告包括实验目的和要求,实验情况及其分析。 对需编程的实验,写出程序设计说明,给出源程序框图和清单。 (4)遵守机房纪律,服从辅导教师指挥,爱护实验设备。 (5)每次上机应按照真实所用的机器在签到表内的签名栏签名栏签到登记。 若所用机器编号大于50(签到表最大编号),则应在实际编号-50所得的编号行内账户名栏内签到,并在姓名前后用括号括起来并在姓名前后用括号括起来。 第一次上机时选择与自己的班序号相同编号的机器。 此后每次使用上次所用机器(如忘记,可参考考勤签到表上的签名),不得自行更改。 机器号教师将以登记的机号作为学生考勤与课堂纪律巡查的依据。 如果登记的机号上无人,则视为该机号登记的学生缺勤。 如果学生没有在登记的机器上操作,则视为该学生缺勤,而该机号对应登记的学生到勤。 假设姓名为“张三”,签到格式为机器号帐户名签名3 (53)机器号帐户名签名3 (53)若所使用的机器不在课表指定的课室,则还应注明课室号。 机器号帐户名签名3 (53)机器号帐户名签名3 (53)如果按班序号或上次登记所使用的机器故障,需要换机时,应首先告知指导教师,经确认后可以换到其它机器(机器号应大于最大班序号,且以往没有其他同学占用),并要求在课程的后续上机中使用该机器、签到。 若在课中更换了机器,除了在实际机位签名上,还应另行在签到表的下部空表中再次签名,注明更换前后的机器号,并用小号字体注明换机原因(同时应通知机房管理员在原故障机上标注故障)。 2故障机器号新机器号签名3(键盘坏)38故障机器号新机器号签名3(键盘坏)38 (6)考勤员/学委/班长/其他班干部/其他同学在上课前到机房管理室417领取实验日志并填写实验项目、时间等内容后传给各位同学签名,课后放回原处。 (7)实验课程不得迟到。 未能正常出勤者,所缺实验不补。 实验的验收将分为两个部分。 第一部分是上机操作,包括检查程序运行和即时提问。 第二部分是提交书面的实验报告。 此外,针对以前教学中出现的问题,本实验将采用阶段检查方式,每个实验都将应当在规定的时间内完成并检查通过,过期视为未完成该实验,不计成绩。 以避免期末集中检查产生的诸多不良问题,希望同学们抓紧时间,合理安排,认真完成。 3实验报告要求1.无论是否为团队实验,每个实验都必须以个人为单位单独提交一份实验报告,且在该实验大纲结束的后一周内上系统提交。 每迟交一周扣除等级分一级。 第十七周结束前必须提交所有实验报告,此后不再接收。 2.实验报告不必列出操作步骤细节,但应体现出独立工作的成果,不得雷同a)问题的描述;b)整体的解决思路、流程或算法;c)重要的实验结果。 该结果应由学生自已独立实验所得,体现出个人所用的实验数据、思路、算法;d)实验中遇到的困难及解决办法、心得。 3.实验报告中的图、表、核心代码尽量不使用屏幕截图,便于批改、查看,也可减少报告文档的存储空间。 4.实验一和实验二只需给出一个子系统范围内的静态模型和动态模型即可。 实验三要求给出完整的系统模型,并在实验 一、二的基础上加入设计的内容并全面优化模型。 5.本指导书仅用作实验工具的操作指导,其示例系统为图书馆管理系统。 请学生按学号从“错误!未找到引用源。 错误!未找到引用源。 中选择题目进行实验并提交报告。 6.实验报告电子版的文件夹名称为学生姓名_学号,其实验报告文件名格式为姓名_学号.doc,其它文件名格式为姓名_学号_文档标题.doc/mdl/,其中实验报告文件必须包含实验的全部成果全部成果,并按打印要求排版。 7.最后一次提交实验报告时,由学委(亦可委托班长等班干部代办)将全班所有同学的实验报告集中起来,以非压缩的格式刻录到一张光盘上。 实验要求 1、待分析的C语言子集的词法1)关键字main ifelse intreturn voidwhile(都是小写)2)专用符号=+*/=!=;,()3)其他标记STRING:=*1ID:=letter(letter|digit)*INT:=digit digit*letter:=a|z|A|Z digit:=0|94)空格由空白、制表符和换行符组成空格一般用来分隔ID、NUM、专用符号和关键字,词法分析阶段通常被忽略。 2、部分单词符号对应的种别码(可自行扩展)单词符号种别码单词符号种别码main1/25int2(26char3)27if428else529for630while731return8,32void9:33STRING50;34ID1035INT20=37+22=38-23=291此为Unix正则表达式的写法,意指引号包围的、由非引号字符提组成的字符串。 6*24!= 403、词法分析程序的功能输入所给文法的源程序字符串输出二元组(syn,token或sum)构成的序列。 其中syn为单词种别码;token为存放的单词自身字符串;sum为整型常量(作为常量的值)。 实现时,可将单词的二元组用结构进行处理 4、词法分析程序的主要算法思想 一、主程序示意图置初值调用扫描子程序输出单词二元组输入串结束结束是否 (1)关键字表初值关键字作为特殊标识符处理,把他们预先安排在一张表格中(称为关键字表),当扫描程序识别出标识符时,查关键字表。 如果查到匹配的单词,则该单词为关键字,否则为一般标识符。 关键字表用字符串数组,描述如下char*KEY_WORDS8=“main”,“int”,“char”,“if”,“else”,“for”,“while (2)主变量syn,token和sum 二、扫描子程序算法思想扫描子程序主要部分流程图如下图所示7变量初始化忽略空格文件是否结束返回是拼字符串是否关键字Syn为对应关键字的单词种别码为对应关键字的单词种别码syn=10syn=20拼数否字母数字运算符、界符等符号其它符号否字母数字运算符、界符等符号其它符号为不同符号给出相应的为不同符号给出相应的syn值值报错返回 5、自行编制一测试程序输出单词的二元组,并加以注释8实验二语法分析实验目的设计、编制并调试一个语法分析程序,加深对语法分析原理的理解。 实验内容设有文法GE:EE+T|T TT*F|F F(E)|i消除左递归后的文法为ETEE+TE|TFTT*FT|F(E)|i建立LL (1)分析表如下I+*()#E ETEETEEE+TEEET TFTTFTTTT*FTTTF Fi F(E)请分析输入串i+i是否为该文法的句子,输出其分析过程算法框图为9分析步骤如下步骤分析栈当前输入a剩余输入串所用产生式1#E Ii+i#ETE2#ET Ii+i#TFT3#ETF Ii+i#Fi4#ETi Ii+i#5#ET+i#T?6#E+i#E+TE7#ET+i#8#ET Ii#TFT9#ETF Ii#Fi10#ETi Ii#11#ET#T12#E#E13#分析成功10实验三综合实验实验目的学生运用编译原理的知识在实验技能和方法自行设计实验方案并加以实现。 自行设计实验方案并加以实现。 实验要求运用编译原理知识,经检验,该程序能正确运行。 实验内容参考内容如下表1综合性/设计性实验参考项目设置简表序号实验项目实验类型实验课程内容1LL (1)文法自动生成语法分析程序的设计综合性/设计性任意输入LL (1)文法,自动构造LL (1)分析表并生成相应的语法分析程序,实现LL (1)分析过程;能对输入串进行语法分析,判断其是否符合文法。 2单词自动识别与纠错综合性/设计性具备类似word的自动识别与纠错功能的小型应用系统。 3程序语句及结构的通用分析系统综合性/设计性能够对符合文法的程序语句及结构的通用分析系统4对语言中常量说明、基本数据类型说明的分析程序综合性/设计性从键盘上输入常量说明(包括整型、实型、字符型和布尔型),最后以“*”号结束;处理各常量说明,计算各常量的值和类型;最后输出。 从键盘上输入变量说明,最后以“*”号结束;给变量分配存储空间;变量说明处理形成属性字,属性字包括名字、类型和地址;并检查标识符是否有重定义,处理到“*”号为止。 定义模拟的简单语言的语义成分,编写语义自动分析程序综合性/设计性对文法的结构定义模拟的简单语言的语义成分,编写语义自动分析程序5自行设计制作出有一定水平的小的语言编译系统综合性/设计性设计一个小的语言编译系统611综合性实验示例LL (1)文法自动生成语法分析程序的设计综合性实验示例LL (1)文法自动生成语法分析程序的设计(一)实验题目1实验内容输入任意一个正确的文法GS,都能分析,并得出一个等价的LL (1)文法GE,求出FIRST集和FOLLOW集,并求出LL (1)分析表。 对输入串进行语法分析,判断其是否符合文法GE。 2要求 (1)输入任意一个正确的文法GS,都能分析,并得出一个等价的LL (1)文法GE; (2)根据该LL (1)文法GE的文法规则建立LL (1)分析表; (3)输出输入串分析过程。 实验报告示例词法分析程序实验名称词法分析程序目的要求通过设计编制调试一个具体的词法分析程序,加深对词法分析原理的理解。 并掌握在对程序设计语言源程序进行扫描过程中将其分解为各类单词的词法分析方法。 题目分析这里以开始定义的PASCAL语言子集的源程序作为词法分析程序的输入数据。 在词法分析中,自文件头开始扫描源程序字符,一旦发现符合“单词”定义的源程序字符串时,将它翻译成固定长度的单词内部表示,并查填适当的信息表。 经过词法分析后,源程序字符串(源程序的外部表示)被翻译成具有等长信息的单词串(源程序的内部表示),并产生两个表格常数表和标识符表,它们分别包含了源程序中的所有常数和所有标识符。 变量说明FILE fp文件指针,用于指向要分析的PASCAL源程序;char*key8指针数组,用于指向关键字表;char*border6指针数组,用于指向符号表;char*arithmetic4指针数组,指向算术运算符表;char*relation6指针数组,指向关系运算符表;char*consts20指针数组,指向常数表;char*label20指针数组,指向标识符表;int constnum,labelnum整型变量,分别用于存放当前常数个数和标识符个数。 子函数说明alphaprocess关键字和标识符处理子函数;digitprocess数字处理函数;otherprocess其他字符处理函数;search查找子函数;流程分析主函数main()打开要分析的PASCAL源程序,若不能正确打开,则报错。 先从源程序中读入一个字符ch,然后进行如下处理 1、ch是字符转入关键字和标识符处理子函数; 2、ch是数字转入数字处理函数; 3、ch是其他字符转入其他字符处理子函数;12结束。 关键字和标识符处理子函数alphaprocess(char buffer); 1、将buffer送入临时数组alphatp0,再读入一个字符至buffer; 2、判断buffer是否为字符或数字,若是,则alphatp1=buffer; 3、重复1,2,直到2判断为假;在alphatp末尾添加0; 4、调用search()子函数,在关键字表中匹配alphatp,若匹配成功,则返回序号; 5、调用search,在标识符表中匹配alphatp,若匹配成功,则返回序号; 6、在标识符表中添加alphatp,并返回序号;其余子函数的处理方式于alphaprocess类似,此处不再赘述。 程序调试现有PASCAL程序清单如下BEGIN IF I=1THEN I:=I+1#ELSE*&IFI=2THEN I:=I+11;END.运行词法分析程序后,显示如下结果BEGIN(1,1)IF(1,4)I(6,0)=(4,2)1(5,0)THEN(1,5)I(6,0):=(2,2)I(6,0)+(3,0)1(5,0)#error,not aword ELSE(1,2)*(3,2)&error,not aworderror,not aword IF(1,4)I(6,0)=(4,2)2(5,1)THEN(1,5)I(6,0):=(2,2)I(6,0)+(3,0)11(5,2);(2,1)END(1,3).(2,3)over结果完全正确。 源程序清单以下是词法分析程序的源程序清单,13#include#include#include#include#include#define NULL0FILE*fp;char cbuffer;char*key8=DO,BEGIN,ELSE,END,IF,THEN,VAR,WHILE;char*border6=,;,:=,.,(,);char*arithmetic4=+,-,*,/;char*relation6=,=,;char*consts20;char*label20;int constnum=0,labelnum=0;int search(char searchchar,int wordtype)int i=0;switch(wordtype)case1:for(i=0;i=7;i+)if(strcmp(keyi,searchchar)=0)return(i+1);case2:for(i=0;i=5;i+)if(strcmp(borderi,searchchar)=0)return(i+1);return (0);case3:for(i=0;i=3;i+)if(strcmp(arithmetici,searchchar)=0)return(i+1);return (0);case4:for(i=0;i=5;i+)14if(strcmp(relationi,searchchar)=0)return(i+1);return (0);case5:for(i=0;i=constnum;i+)if(strcmp(constsi,searchchar)=0)return(i+1);constsi-1=(char*)malloc(sizeof(searchchar);strcpy(constsi-1,searchchar);constnum+;return(i);case6:for(i=0;i=labelnum;i+)if(strcmp(labeli,searchchar)=0)return(i+1);labeli-1=(char*)malloc(sizeof(searchchar);strcpy(labeli-1,searchchar);labelnum+;return(i);char alphaprocess(char buffer)int atype;int i=-1;char alphatp20;while(isalpha(buffer)|(isdigit(buffer)alphatp+i=buffer;buffer=fgetc(fp);15alphatpi+1=0;if(atype=search(alphatp,1)printf(%s(1,%d)n,alphatp,atype-1);elseatype=search(alphatp,6);printf(%s(6,%d)n,alphatp,atype-1);return(buffer);char digitprocess(char buffer)int i=-1;char digittp20;int dtype;while(isdigit(buffer)digittp+i=buffer;buffer=fgetc(fp);digittpi+1=0;dtype=search(digittp,5);printf(%s(5,%d)n,digittp,dtype-1);return(buffer);char otherprocess(char buffer)int i=-1;char othertp20;int otype,otypetp;othertp0=buffer;othertp1=0;if(otype=search(othertp,3)printf(%s(3,%d)n,othertp,otype-1);buffer=fgetc(fp);goto out;if(otype=search(other

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论