编译原理词法分析

编译原理词法分析

ID:7292929

大小:79.50 KB

页数:9页

时间:2018-02-10

编译原理词法分析_第1页
编译原理词法分析_第2页
编译原理词法分析_第3页
编译原理词法分析_第4页
编译原理词法分析_第5页
资源描述:

《编译原理词法分析》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

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

2、错误信息。三、实验要求1、能对任何C语言子集源程序进行分析为此,在运行词法分析程序时,应用问答方式输入要被扫描的c语言子集源程序的文件名,然后对该源程序完成词法分析任务。2、能检查并处理某些词法错误词法分析程序应给出的错误信息包括:总的出错个数,每个错误所在的行号、错误9/9计算机科学与工程学院计算机033班曾志强22号编号及错误说明。一般错误处理包括:跳过错误,给出错误信息,继续词法分析。本实验最基本要求是发现第一个错误后停止词法分析,输出错误所在位置(如输出:错误(第X个字符,字符),或,错误(行号,列号,字符))。

3、四、输入输出1、输入c语言子集源程序,为文本文件。注意读到文件结束符EOF意味着分析结束。2、输出词法分析程序的运行结果是:输出一个单词序列(屏幕显示或保存在文件中)和一个常数表、一个符号表(屏幕显示或保存在文件中)、一个常数表(屏幕显示或保存在文件中),并输出错误信息。例:输入源程序src.cabc=134if(abc==5)d=c+1输出显示:/*‘(’和’)’种别编码分别为14,15*/符号表:(1,abc)(2,d)(3,c)常数表:(1,134)(2,5)(3,1)单词序列:(6,1)(12,-)(7,1)(2

4、,-)(14,-)(6,1)(11,3)(7,2)(15,-)(6,2)(12,-)(6,3)(8,-)(7,3)五、程序代码/*程序实现C语言词法分析器的设计*//*用到的几个函数GetNextWord()从字符串中得到一个单词GetC()从当前流中取一个字符Pushback()退回字符SearchKey()查找保留字表/*用到的变量cch放当前字符flag标志有无退回字符(1:有0:无)bchar放退回字符9/9计算机科学与工程学院计算机033班曾志强22号/*C语言中的保留字(32个)autobreakcasech

5、arconstcontinuedefaultdodoubleelseenumexternfloatforgotoifintlongregisterreturnshortsignedsizeofstaticstructswitchtypedefunionunsignedvoidvolatilewhile/*运算符(43个)()[]{}->.!~++---*&/%+<<>><<=>>===!=^

6、&&

7、

8、?:=+=-=*=%=>>=<<=&=^=!=

9、=,*/#include#include

10、h>#include#includeintflag=0;charcch;charbchar;charstr[100];FILE*fp;voidPushback(charc){bchar=c;flag=1;}charGetC(){if(flag==1){flag=0;returnbchar;}chart;t=getc(fp);if(t==''

11、

12、t=='t'

13、

14、t=='r')t='';returnt;}intSearchKey(){charStrToken[32][10]

15、={"auto","break","case","char","const","continue","default","do","double","else","enum","extern","float","for","goto","if","int","long","register","return","short","signed","sizeof","static","struct","switch",9/9计算机科学与工程学院计算机033班曾志强22号"typedef","union","unsigned"

16、,"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

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

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

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