资源描述:
《词法分析器报告》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、编译原理实验报告实验题目:词法分析器构造段青松指导教师:姓名:班级:学号:实验成绩:实验题目词法分析器构造实验目的总体任务:和要求通过对给定源语言词法分析程序的设计,加深对词法分析原理的理解,掌握源语言的接受、存贮、预处理和扫描分析,生成正确的单词符号串二元式序列。说明提示:1.本实验要求的直接分析法,即从左向右扫描源程序,一口发现有独立意义的字符串时,叩将其改造统一•长度的二元组(t,i)输出,其中t表示单词种别,i为相应内部衣示,本题t分为五类:K(关键字)、1(标识符)、C(常数)、P(界符),L(标号)i为特定项的指针值,对应于每一类属性的单词均设置相应的有贮表格,在识别过程中每识別出
2、一个单词,则将其顺序放入相应的符号表中。2.源程序利用行编辑录入,以TEXT文件形式存贮在盘上,词法分析程序,先对源程序作预处理扫描生成新的TEXT文件。预处理的功能是剔除无用的空H、跳格、回车和换行等编辑性字符;去掉注解部分,连接继续行,给出句未符。3.本实验作为编译过程的第一•阶段和后续实验的前提,所仃生成结果都必须作为永久文件存贮。设计思想词法分析时,首先要对源程序进行预处理,去掉的多余的空格符号和注释,其中注释要删除,与框架多个空格变成一个,并在结尾加一个标识符如#,用來表示结束。预处理阶段结束,再迓行逐词分析。若第一位是字母,则他可能是关键字、标号、标示符;若第一位是数字,则可能是常
3、数、标号、非法标号;若为其他字符,则可能是界符、运算符、关系符、或非法字符。这样细分后再进行查表判断。核心算法定义符号表:char*keyword[4]={”IF',”THEN”,”ELSE”,“GOTO”};char*operatomum[4]={char*comparison[6]char*interpunction[4]={":”,”)”};主要函数:boolsearch(charsearchstr[],intwordtype)charletterprocess(charch)//isalnum判断是否为字母或者数字charnumberprocess(charch)〃数字charothe
4、rprocess(charch)〃数字,字母,非括号charprocess(charch)//读字符voidpro_process(char*buf)〃预处理voidmain()//主函数源程序及注释#include#include#include#include#includc#include#include#include#dcfincNULL0FILE*fp;FILE*out,*in;charch;charfilename[50]
5、;char*keyword[4]={"IF",nTHENn,"ELSE","GOTO"};char*operalomum[4]=叮‘严char*comparison[6]={”v=“,char*interpunction[4]={intx=・l,y=-1,z=・1;#defineKlen10#defineHen30#defineClen40#definePlen20#defineOlen20#defineLien10charKlKlenJll0J,PlPlen][2]JlIlen]l20J,OlOlenJl2J;intC[Clen],L[Llen];boolscarch(charscarchs
6、tr[],intwordtypc){inti;switch(wordtype){case1:for(i=0;i<=3;i++){if(strcmp(keyword[i],searchstr)==0)returntrue;}case2:for(i=0;i<=3;i++){if(strcmp(operatornum[i],searchstr)==0)returntrue;}case3:for(i=0;i<=5;i++){if(strcmp(comparison[i]5searchstr)=0)returntrue;}case4:for(i=0;i<=3;i++){if(strcmp(interpu
7、nction[iJ.searchstr)==0)returntrue;}}returnfalse;}charletterprocess(charch)//isalnum判断是否为字母或者数字{inti=-lj=-l,k,a=l;charletterf10],tcmp[10];while(isalnum(ch)!=0){letter[++i]=ch;ch=fgetc(fp);}lcttcr[i+l]