【精品】编译原理词法分析.doc

【精品】编译原理词法分析.doc

ID:51079718

大小:99.50 KB

页数:8页

时间:2020-03-18

【精品】编译原理词法分析.doc_第1页
【精品】编译原理词法分析.doc_第2页
【精品】编译原理词法分析.doc_第3页
【精品】编译原理词法分析.doc_第4页
【精品】编译原理词法分析.doc_第5页
资源描述:

《【精品】编译原理词法分析.doc》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库

1、词法分析一、实验目的1、熟悉词法分析原理,掌握词法分析方法。2、熟悉状态转换图,掌握词法分析器设计方法。二、实验内容本实验的任务是编写一个C语言单词了集的词法分析程序,它从左至右逐个字符地对C语言子集源稈序进行扫描,产生一个个的单词符号的机内表示。(C语言子集的单词说明见书P11)在此,将词法分析作为单独的一遍,如图1所示。源程序具体任务有:•组织源程序的输入。•拼出单词并转换成机内表示形式,形成单词序列、符号表和整常数表。•删除注释、空格和无用符号。•发现并定位词法错谋,打印错误信息。三、实验要求1、能对任何c语言了集

2、源程序讲行分析为此,在运行词法分析程序时,应用问答方式输入要被扫描的C语言子集源稈序的文件名,然后对该源稈序完成词法分析任务。2、能检杳并处理某些词法错误词法分析程序M给出的错误信息包括:总的出错个数,每个错误所在的行号、错误编号及错误说明。一般错误处理包括:跳过错误,给出错误信息,继续词法分析。木实验最基木要求是发现第一个错谋后停止词法分析,输出错谋所在位置(如输岀:错误(第X个字符,字符),或,错误(行号,列号,字符))。四、输入输出1、输入0语言子集源程序,为文木文件。注意读到文件结朿符EOF意味着分析结朿。2、输

3、出词法分析稈序的运行结果是:输出一个单词序列(屏幕显示或保存在文件屮)和一个常数表、一个符号表(屏幕显示或保存在文件屮)、一个常数表(屏幕显示或保存在文件屮),并输出错误信息。例:输入源程序src.cabc=134if(abc==5)d=c+l输出显示:/*'('和')'种别编码分别为14,15*/符号表:(1,abc)(2,d)(3,c)常数表:仃,134)(2,5)(3,1)单词序列:(6,1)(12,-)(7,1)(2,-)(14,-)(6,1)(11,3)(7,2)(15,-)(6,2)(12,-)(6,3)(8

4、,-)(7,3)五、程序代码/*用到的几个函数GetNextWord()GetCOPushback()SearchKey()/*用到的变量cchflagbchar/*稈序实现C语言词法分析器的设计*/从字符串屮得到一个单词从当前流屮取一个字符退冋字符杳找保留字表放当前字符标志有无退冋字符仃:有0:无)放退冋字符/*c语言屮的保留字(32个)autobreakcasecharconstcontinuedefaultdodoubleelseenumexternfloatforgotoifintlongregisterretu

5、rnshortsignedsizeofstaticstructswitchtypedefunionunsignodvoidvolatilewhile/*运算符(43个)()[]{}->.1■++——_*&/%+«»<<=>>=二二!二・1&&

6、

7、?:=+=一二*二%=»=«=&二"二!=

8、=*/★include#inelude#inelude#ineludeint门屈二0;charcch;charbchar;charstr[100];FI

9、LE*fp;voidPushback(charc){bchar=c;flag^l;charGetC(){if(flag=l){flag=0;returnbchar;}chart;t=getc(fp);returnt;intSearchKey(){charStrToken[32][10]={〃auto〃,"break","case","char","const",continue,deiault,do,double,else,enum,extern,iloat,for,goto,it,int,long,register,r

10、eturn,short,signed,sizeor,static,struct,switch,typeder,union,unsigned,void,volatile,while};for(inti=0;i<32;i++){if(strcmp(StrToken[i],str)~0)returni;}return0;}voidGetNextWord(){cch=GetC();while(cch==,'){cch二GetC();}intk=0;str[0]=cch;if((cch>=,a*&&cch<='z')

11、(cch>二

12、'A'&&cch<='Z')){str[++k]二cch;cch二GetC();while((cch>=,a'&&cch〈二'z')

13、

14、(cch>二'A'&&cch〈二'Z')

15、

16、(cch〉二'O'&&cch<='9')){str[k++]二cch;cch=GetC();}str[k]=,';Pushback(c

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。