如果您无法下载资料,请参考说明:
1、部分资料下载需要金币,请确保您的账户上有足够的金币
2、已购买过的文档,再次下载不重复扣费
3、资料包下载后请先用软件解压,在使用对应软件打开
实验一词法分析程序设计(6学时)一、实验目的设计并实现一个包含预处理功能的词法分析程序,加深对编译中词法分析过程的理解。二、实验要求1、实现词法分析功能输入:所给文法的源程序字符串。输出:二元组(syn,token)构成的序列。其中,syn为单词种别码。Token为存放的单词自身字符串。具体实现时,可以将单词的二元组用结构进行处理。2、待分析的C语言子集的词法1)关键字mainifthenwhiledostaticintdoublestructbreakelselongswitchcasetypedefcharreturnconstfloatshortcontinueforvoiddefaultsizeofdo所有的关键字都是小写。2)运算符和界符+-*/<<=>>==;()3)其他标记ID和NUM通过以下正规式定义其他标记:标识符ID→letter(letter|digit)*无符号整数NUM→digitdigit*字母letter→a|…|z|A|…|Z数字digit→0|…|9…4)空格由空白、制表符和换行符组成空格一般用来分隔ID、NUM、专用符号和关键字,词法分析阶段通常被忽略。4、各种单词符号对应的种别码表1各种单词符号的种别码单词符号种别码单词符号种别码main1;41if2(42else3)43while4int7do5double8static6struct9ID(标识符)25break10NUM(整数)26else11+27long12-28switch13*29case14/30typedef15:31char16:=32return17<33const18<>34float19<=35short20>36continue21>=37for22=38void23default39sizeof24do405、词法分析程序的主要算法思想算法的基本任务是从字符串表示的源程序中识别出具有独立意义的单词符号,其基本思想是根据扫描到的单词符号的第一个字符的种类,拼出相应的单词符号。1.主程序示意图主程序示意图如图1所示。置初值调用扫描子程序输出单词二元组输入串结束结束否是图1词法分析主程序示意图其中初值包括如下两方面:关键字表初值关键字作为特殊标识符处理,把它们预先安排在一张表格中(称为关键字表),当扫描程序识别出标识符时,查关键字表。如能查到匹配的单词,则该单词为关键字,否则为一般标识符。关键字表为一个字符串数组,其描述如下:char*rwtab[27]={“main”,”if”,”else”,”while”,”do”,”static”,”int”,”double”,”struct”,”break”,”else”,”long”,”switch”,”case”,”typedef”,”char”,”return”,”const”,”float”,”short”,”continue”,”for”,”void”,”default”,”sizeof”,”do”};(2)程序中需要用到的主要变量:syn,token和sum。2.扫描子程序的算法思想设置三个变量:intsyn:用来存放单词符号的种别编码。chartoken[255]="";单词缓冲区,用来存放构成单词符号的字符串,inti=0;/*单词缓冲区指针*/icharinput[1024];/*输入缓冲区*/intp=0;/*输入缓冲区指针*/main(){p3.状态转换图三、实验报告要求1.写出编程思路、源代码(或流程图);2.写出上机调试时发现的问题,以及解决的过程;3.写出你所使用的测试数据及结果;4.谈谈你的体会。5.上机6小时,完成实验报告2小时。