资源描述:
《编译原理实验报告-2011.doc》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、编译原理实验报告姓名:高亮学号:班级:计算机4班哈尔滨工业大学(威海)计算机科学与技术学院实验一词法扫描器设计一实验目的通过设计调试词法分析程序,实现从源程序中分出各种单词的方法;加深对课堂教学的理解;提高词法分析方法的实践能力。二实验内容设计一个简单的类C语言的词法扫描器。三实验要求(一)程序设计要求(1)根据附录给定的文法,从输入的类C语言源程序中,识别出各个具有独立意义的单词,即关键字、标识符、常数、运算符、分隔符五大类;分发见最后附录。(2)提供源程序输入界面;(3)词法分析后可查看符号表和TOKEN串表;(4)保存符号表和T
2、OKEN串表(如:文本文件);(5)遇到错误时可显示提示信息,然后跳过错误部分继续进行分析。(二)实验报告撰写要求(1)系统功能(包括各个子功能模块的功能说明);(2)开发平台(操作系统、设计语言);Windows系统,C语言(3)设计方案;1)主数据流图;源程序Token链符号表词法分析器词法分析器是否为字母存入token链是否为数字存入token链是否为数字1)主要子程序的流程框图(若有必要);2)模块结构图;词法分析填入符号表生成单词序列字符分类读入字符3)主要数据结构:符号表、TOKEN串表等。符号表:char*keyword
3、[8]={"do","begin","else","end","if","then","var","while"};//保留字char*operatornum[4]={"+","-","*","/"};//运算符char*comparison[6]={"<","<=","=",">",">=","<>"};char*interpunction[8]={",",";",":=",".","(",")","[","]"};//界限符(4)。具体设计过程(包括主控程序、各个功能模块的具体实现)。字母处理:charletterprocess(
4、charch)//字母处理函数{inti=-1;charletter[20];while(isalnum(ch)!=0)//isalnum:如果是英文或阿拉伯数字{letter[++i]=ch;ch=fgetc(fp);};letter[i+1]=' ';if(search(letter,1)){printf("<%s,->",letter);//strcat(letter,"");//fputs('<'letter'>',outp);}else{printf("",letter);/
5、/strcat(letter,"");//fputs(letter,outp);}return(ch);}数字处理:charnumberprocess(charch)//数字处理程序{inti=-1;charnum[20];while(isdigit(ch)!=0){num[++i]=ch;ch=fgetc(fp);}if(isalpha(ch)!=0)//如果是字母即为以数字开始的标识符,这是非法的{while(isspace(ch)==0)//负责读完这个非法标识符{num[++i]=ch;ch=fgetc(fp);}num[
6、i+1]=' ';printf("错误!非法标识符:%s",num);gotou;}num[i+1]=' ';printf("",num);//strcat(num,"");//fputs(num,outp);u:return(ch);}主函数:voidmain(){charstr,c;printf("**********************************词法分析器************************************");//outp=fopen("二元式表.txt
7、","w");if((fp=fopen("source.txt","r"))==NULL)printf("源程序无法打开!");else{str=fgetc(fp);while(str!=EOF){if(isalpha(str)!=0)str=letterprocess(str);else{if(isdigit(str)!=0)str=numberprocess(str);elsestr=otherprocess(str);}};printf("词法分析结束,谢谢使用!");printf("点任意键退出!");}c=get
8、ch();}四实验总结能正确进行词法分析,遇到非法字符时能够继续执行五运行结果附录:类C语言的词法文法id®Letterint10®Numint10
9、NumOP®+
10、-
11、*
12、/
13、>
14、<
15、=
16、(
17、)
18、;
19、‘
20、=