资源描述:
《合肥工业大学编译原理实验》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库。
1、宣城校区实验报告课程名称编译原理专业班级计算机0001班学生姓名及学号赵保飞2015216768指导教师李芒宏实验地点计算机中心楼第四机房2017~2018学年第一学期《编译原理》课程实验报告实验名称词法分析设计姓名赵保飞系院专业计算机科学与技术班级计算机01班学号2015216768实验日期2017.10.18指导教师李芒宏成绩一、实验目的和要求通过本实验的编程实践,使学生了解词法分析的任务,掌握词法分析程序设计的原理和构造方法,使学生对编译的基本概念、原理和方法有完整的和清楚的理解,并能正确地、熟练地运用。二、实验原理(1)实验数据结构说明K[]String数组-关键字表;
2、s[]char数组—分界符;m[]char数组—算术运算符;r[]String数组—关系运算符;ArrayList型String数组ci—常数;ArrayList型String数组id—标识符(2)实验算法描述(3)算法流程图三、源程序代码和测试结果packagelexicalAnalysis;importjava.util.*;importjava.io.*;publicclasslexicalAnalysis{staticStringk[]={"for","main","if","while","void","public","static","printf","scanf
3、","asm","do","return","typedef","auto","double","break","short","using","default","long"};//关键字staticchars[]={',',';','(',')','[',']','{','}'};//2分界符staticcharm[]={'+','-','*','/'};//3算术运算符staticStringr[]={"<","<=","=",">",">=","<>"};//4关系运算符ArrayListci=newArrayList();//5常数Ar
4、rayListid=newArrayList();//6标识符StringtempToken="";//临时存放组成一个“词”单位串intpint,row=1,line=1;//当前指针指示,行数,列数charch;//存放最新读入源程序字符Stringinstring;//存放输入de源程序代码publicstaticvoidmain(String[]args)throwsException{//TODOAuto-generatedmethodstublexicalAnalysisone=newlexicalAnalysis();System.
5、out.println("单词"+"t二元序列"+"t类型"+"t位置(行,列)");one.readtext();}booleanisdigit(charc){//判断所读字符是否为数字,是则返回ture,否则返回falseif(c>=48&&c<=57)returntrue;elsereturnfalse;}booleanisletter(charc){//判断所读字符是否为字母,是则返回true,否则返回falseif((c>64&&c<91)
6、
7、(c>96&&c<123))returntrue;elsereturnfalse;}booleanisline(char
8、c){//判断字符c是否是下划线"_"if(c=='_')returntrue;elsereturnfalse;}booleanremove(){//用于在判断关系运算符时,判断是否是要再读一个字符charb=instring.charAt(pint+1);//string类charAt()方法用于返回指定索引处的字符。索引范围为从0到length()-1if(b=='='
9、
10、b=='>')//当其后的字符是=或>时,要再读一个字符。否则不要再读。returntrue;elsereturnfalse;}voidclearBlank(){//检查空白直到读入字符非空白while(
11、ch==''){getchar();}}voidgetchar(){pint++;if(pint<=instring.length()-1){ch=instring.charAt(pint);if(ch==''){change_row_line();getchar();}}elsech='';//instring数据读取完,需重新读入}voidretract(){//读入前一个字符pint--;ch=instring.charAt(pint);}voiddistinguishLeter(