1、63 |1 整型常量22 sho43 -64 ?:2 auto23 sig44 -65 =3 brea24 siz45 *66 +=4 case25 sta46 &67 -=5 char26 str47 /68 *=6 cons27 swi48 %69 /=7 cont28 typ49 +70 %=8 defa29 uni50 -71 =9 do30 uns51 72 73 &11 els32 vol53 74 =12 enu33 whi54 76 ,14 flo35 )56 77 15 for36 57 =78 ;16 got37 58 !79 :17 if38 -59 &80 18 int
2、39 .60 81 19 lon40 !61 |82 /20 reg41 62 &3、关键数据结构的描述 计数器count:将二元组写入文件时通过count判断是否是首次写入,若是则清空文件,否则追加写入; 字符串常量endStr:其值为“end”,在分析判断每一单词的种类时,该字符串作为rwtab表的结束标志; 数组prog200:暂存从文件中读取的源程序代码,该词法分析器约定源代码长度不超过199; 数组token20:暂存每次分离出的单个具有独立意义的单词,该词法分析器约定每个单词的长度不超过19; 结构体result:存放一个单词的种别码和单词本身的值,在写入文件时以结构体中的元素为单
3、位依次写入;4、程序结构的描述本程序采用结构化设计方法,共有两个文件,六个模块,分别介绍如下:rwtab.h文件包含一个模块,即各种单词符号对应的种别码,作为外部文件被main.cpp文件引用。main.cpp文件包含以下五个平行模块:1) main()函数:程序入口,控制整个程序的执行流程;2) scanner()函数:词法扫描程序;3) print()函数:由main()函数调用,判别每一个已识别单词的种类,并将其以结构体形式标准化;4) readFromFile()函数:由main()函数调用,将源程序代码读出,并暂存至数组prog200中;5) writeToFile()函数:由mai
4、n()函数调用,把标准的二元组写入文件中。三、程序运行截屏四、源代码 #include#include#include ctype.h string.h/*判断字符区域*开始*/int characters_exist=0; /*用来判断是否是纯数字*/int countoffinal=0; /*finalresult函数执行的次数*/int word( char ch) /*判断是否为字母*/ int ch_exist=0; if(isalpha(ch) ch_exist=1; characters_exist=1; return(ch_exist);int digit(char ch) /
5、*判断是否为数字*/ int dig_exist=0; if(isdigit(ch) dig_exist=1; return (dig_exist);int delimiter(char ch) /*判断是否是分界符*/ int del_exist=0; int i; char delimiters13=+,-*/;()= #; for(i=0;i13;i+) if(ch=delimitersi) del_exist=1; break; return(del_exist);int keywordcompare(char key,char keyword) /*比较关键字*/ int m=0;
6、int equal=1; while(keywordm!) if(keym=keywordm) m+; else equal=0; break; return(equal);int keyword(char key) /*判断是否是关键字 */ char ifkeyword3=if char elsekeyword5=els char thenkeyword5=thn char forkeyword4=or char whilekeyword6=w char dokeyword3=d char andkeyword4=a char notkeyword4= char orkeyword3= i
7、nt keyword_exist=0; if (keywordcompare(key,ifkeyword)|keywordcompare(key,elsekeyword)|keywordcompare(key,thenkeyword)|keywordcompare(key,forkeyword)|keywordcompare(key,whilekeyword)|keywordcompare(key,dokeyword)|keywordcompare(key,andkeyword)|keywordcompare(key,notkeyword)|keywordcompare(key,orkeywo
8、rd) keyword_exist=1; return(keyword_exist);/*判断字符区域*结束*/*写入文件区域*开始*/void writetofile(char cha) /*将数组cha写入文件Dualistic_formula*/ int i=0; int numberofspace=0; /*用来实现写入文件时跳过过多的空格*/ FILE * fpa; if(fpa=fopen(Dualistic_formula,a)=NULL) printf(cannot open file Dualistic_formulan); exit(0); while(chai!numbe
9、rofspace=1) /*数组不结束且连续空格数最多为2时满足循环条件*/ if(chai=) numberofspace+; else numberofspace=0; fputc(chai,fpa); i+; fclose(fpa);void keywordtofile(char cha) /*将关键字写入文件keyword*/keywordcannot open file keywordn if(chai=void wordstofile(char cha) /*将标识符写入文件words*/wordscannot open file wordsn=1) /*数组不结束且连续空格数最多为2时满足循环条件*/ void digittofile(char cha) /*将数字写入文件digit*/
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1