还剩20页未读,继续阅读
本资源只提供10页预览,全部文档请下载后查看!喜欢就下载吧,查找使用更方便
文本内容:
C语言词法分析器设计与实现C语言词法分析器的设计与实现一.试验目的
1.强化对系统软件综合工程实现能力、规划能力的训练;
2.加强对词法分析原理、措施和基本实现技术日勺理解;二.试验内容用C语言(或C++)作为宿主语言完毕其中详细规定L使用DFA实现词法分析器H勺设计;
3.实现对C源程序中注释的过滤;
4.运用两对半缓冲区从文献中逐一读取单词;
5.词法分析成果属性字流寄存在独立文献中;
6.记录源程序每行单词的个数和整个源文献单词个数;
7.具有汇报词法错误和出错位置(源程序行号和该行字符)的功能;
7.屏幕输出属性字流,每次显示10行,按ESC可中途退出,每行有记录信息,最终有词法分析的所有信息,包括多种属性单词的个数用C语言(或C++)作为宿主语言完毕:三.试验规定与试验验收..
1.完毕对附录一中文法描述的Java源代码日勺语法分析、语义分析及代码生成代码生成的I目的代码为MASM汇编代码;...
2.词法分析使用试验一完毕的词法分析器(即与词法分析器有直接接口);...
3.课程考试前通过网络教室提交(包括源码和可执行文献的压缩文献),压缩文献命名“学号-姓名-语法语义”...
4.通过测试用例的验收;Sw-whileErS;Er VcVc|VcVcS-标识符二Ex;//标识符使用词法分析识别成果Vc标识符I整常数//标识符、整场数使用词法分析识别成果Ex-Vc PEx VcP+1-1*1///运算符必须符合优先级和结合性附录一语言子集文法Java语言词法分析器设计与实现JavaJava语言词法分析器的设计与实现一.试验目的强化对系统软件综合工程实现能力、规划能力日勺训练;
1.加强对词法分析原理、措施和基本实现技术勺理解;
2.H二.试验内容)用语言(或作为宿主语言完毕C C++其中详细规定:
1.使用DFA实现词法分析器的设计;
2.实现对Java源程序中注释的过滤;
3.运用两对半缓冲区从文献中逐一读取单词;
4.词法分析成果属性字流寄存在独立文献(文献名scannejoutput)中;
5.记录源程序每行单词的个数和整个源文献单词个数;
6.具有汇报词法错误和出错位置(源程序行号和该行字符)的功注附Java语言词法规则(附件一);附语言词法分析器的属性字设计(附件二)Java三.试验验收与评分规定
1.编写Java语言词法分析器日勺源程序并调试通过;
2.通过测试程序的验收(测试程序名称Test-Lexcial);
3.提交简要扼要的书面试验汇报内容包括FA设计;源程序重要函数功能;重要数据构造设计附件一JAVA语言词法规则关键字:abstract booleanbreak bytecase catchcharclassconst continuedefault dodouble elseextendsfalsefinal finallyfloat forgoto if implementsimportinstanceof int interface longnative newnullpackageprivate protectedpublic returnshort staticsuperswitchsynchronized thisthrow throwstransient truetry voidvolatilewhile标识符字母或美元符号飞”或下划线开头,连接字母或美元符号或下划线或数字字符日勺串常量整型常量123,0,-456,0123,0x123,-0X12,123L实型常量
1.23,
0.123,.123,
123.,
123.0,123e3,123E3,
12.3F布尔常量true、false字符串常量This isa constantstring.”字符常量a,转义字符描述\ddd1到3位8进制数据所示的字符ddd\uxxxx1到4位16进制数所示的I字符xxxx\,单引号字符\\反斜杠字符\r回车\n换行\f走纸换页\t横向跳格\b退格界线符花括号用于定义类、措施和当地范围口勺代码块它们也用于包括自动被初始化数组的值[]方括号用于申明数组类型同步也用于废弃数组值逗号用于分隔变量申明中持续的标识符它也用于连接语句圆括号用于在措施定义和调用中包括参数列表它们也用于定义体现式中的优先级,在控制语句中包括体现式,以及包括转换类型点号用于分隔包名和类名同步也用于把变量或者措施与引用变量分隔开•■9分号用于终止Java语句操作运算符操作运算符操作运算符运算符:加赋值不小于乘积赋值+二*二加+不小于等于=非1*八与赋值二自增1++非赋值!=•赋值左移位«不等于=按位与左移位赋值«=或赋值按位取反不不小于右移位»按位或1不不小于等于=右移位赋值»=按位异或逻辑与短路与9-••条件运算符逻辑或1短路或II自减1—逻辑异或八减赋值——除赋值/=求模%减—除/模赋值%=零填充右移位»等于==乘积*零填充右移位赋值»=附件二JAVA词法分析器的属性字设计单词属性用十六进制表达:错误日勺单词0x100注释0x101空格0x102关键字0x103标识符0x104布尔型0x105字符型0x106整型0x107浮点型0x108字符串0x109二+二一二*二/二%=二八=|=»==»=0x110:0x111||0x1120x113|0x1140x115八0x1160x117二二!二==0x118«»»0x119+-0x11a*/%0x11bOxllc++Oxlid,0x120{}0x121;0x122表4・7Java运算符优先级最高0[]++——~!*7%+一»»«==!=AIop=最低三.试验验收与评分规定I.编写c语言词法分析器的源程序并调试通过;
2.通过测试程序的验收测试程序名称Test-Lexcial;
3.提交简要扼要的书面试验汇报内容包括FA设计;源程序重要函数功能;重要数据构造设计四.验收测试用例.L测试用例一统一验收测试用例;#includestdio.h#includestring.hchar buf
[100],str
[15];int countdef=0;FILE*fpmiddle;struct define{.char with
[30];.char des
[30];char filename
[15];}def
[30];char*getFileName int i=0,k=0;fori=0;bufEi]!=,i30buf[i]!=,\0J;i++;.i++;whilebufEi]!=/i30bufEi]!=\0str[k++]=buf[i++];.str[k]=\0,;puts str;.return str;long readlineFILE*fptiffgetsbuf,100,fpt==NULLputsbuf;printf readlineerror orreach fileend!\n,z;return0;.putsbuf;return longstrlenbuf+l;void writeline.fprintffpmiddle,buf;void processDefinechar*filename{int i=8,j=0;whi1edef[countdef].des[i-8]=buf[i]!=,i++;def[countdef].des[i-8]=,\09;whiledef[countdef].with[j]=buf[i]!=,\0Ji++;j++;def[countdef].with[j-1]=,\0;strcpydef[countdef].filename,filename;countdef++;long commentFILE一fpt.char prechar=buf
[0],ch=,;int i=0,j=0;for i=0;buf[i]!=\0!buf[i]==,/buf Ei+1]==,*;i++f■ifch=fgetcfpt==EOF一•J=l;.buf[i]=\0;if i==strlen bufreturn OL;.doprechar=ch;printf incomment,end;exit0;i++;.}whiled prechar==,*ch=/;return longi-j+1;isinchar*p.inti=0,j=0,temp=0;.whiletemp!=strlenbufwhilebufLi]!=\0buf[i]!=p
[0]i++;temp=i;whilebuf[i]==p[j]p[j]!=\0’buf[i]!=,\0,i++;j++;ifi-temp==strlenp returntemp;i=temp+l;j=o;return-1;void includeAndDefineFILE*fpt.void addchar*;void replacechar*;.whilereadlinefptif isininclude=0addgetFileName;else if isin#define=0processDefinestr;elsefseekfpt,comment fpt,1;replace str;writeline;void replacechar*;FILE*fpp;if fpp=fopenfilename,r==NULLprintf file%s notfound oropen error!”,filename;exit0;fseekfpp,-readlinefpp,1;ifisininclude0isin#def ine0whilereadlinefppfseekfpp,commentfpp,1;replacefilename;writeline;elseincludeAndDefine fpp;.fclosefpp;void replacechar*filename.inti=0,start=0;for i=0;icountdef;i++if!strcmpdef[i].filename,filenamebreak;ifi=countdef||start=isindef[i].des==-l return;elseint lenOfWith=strlendef[i].with;int lenOfDes=strlendef[i].des;if lenOfDes=lenOfWith{int k,j;fork=start;kstart+lenOfWith;k++buf[k]=def[i].withEk-start];forj=start+lenOfWith;jstart+lenOfDes;j++buf[j]=,;else{int offset=lenOfWith-lenOfDes;int k,j;fork=offset+strlenbuf;kstart;k一buf[k]=buf[k-offset];forj=start;jstart+lenOfWith;j++buf[j]=def[i].withEj-start];.
2.自己编写W、J C语言词法分析器源码语言语法语义分析器设计与实现JavaJava语言子集语法、语义分析器一.试验目的]
1.强化对系统软件综合工程实现能力、规划能力日勺训练;
2.增强对语法分析器、语义分析及代码生成器基本实现技术H勺理解;二.试验内容。
个人认证
优秀文档
获得点赞 0