资源描述:
《词法分析器程序代码》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、词法分析器一、内容和要求将词法分析器设计成单独的程序或供语法分析器调用的子程序。功能包括:通过词法分析器实现以下类别的识别:关键字:break>case>char>do>while>if>else>int>float等。运算符:+、*、二、/o界符:;、,、(、)、[、]、{、}。数字:0-9o标识符二、词法分析原理词法分析是从左向右扫描每行源程序的符号,拼成单词,换成统一的机内表示形式—token字,送给语法分析程序。TOKEN字是一个二元式:(单词种别码,自身值)。单词自身值按如下规则给出:1标识符的自身值是它在符号表的入口地址。2常数的自身值是常数本身(或它的
2、二进制数值)。3关键字和界限符的自身值为本身。三、程序设计1、程序流程:输入一段字符一调用读取字符函数一►输出之前输入的字符一►调用词法分析子程序—M分析结果3、程序中用到的函数Analyzer();〃构造函数〜Analyzer。;//析构函数intIsLetter(charch);//判断是否是字母,是则返回1,否则返回0。intIsDigit(charch);//判断是否为数字,是则返回1,否则返回0。intIsSpace(charch);//判断是否为空白符(空格、换行、希俵符),是则返回1,否则返回0。voidGetChar(char*ch);//将下一个输
3、入字符读到ch中。voidGetBC(char*ch);//检查ch中的字符是否为空白,若是,则调用GetChar直至ch进入一个非空白字符。voidConcat(char^strToken,char*ch);〃将ch中的字符连接到strToken之后。intReserve(char^strToken);//对strToken中的字符串查找保留字表,若是一个保留字返回它的数码,否则返回0。voidRetract(char*ch);//W搜索指针器回调一个字符位置,将ch置为空白字符。voidinput();//向存放输入结果的字符数组输入一句语句。voiddispl
4、ay。;//输岀一些程序结束字符显示样式intanalyzerSubFun();//词法分析器子程序,为了实现词法分析的主要功能。stringDecStrToBinStr(stringdecNum);//十进制转换成二进制2、程序代码#include#includeusingnamespacestd;classAnalyzerfpublic:Analyzer(){p二Store;}〜Analyzer(){cout«H程序运行结束"«end1;}intIsLetter(charch);intIsDigit(charch);intIs
5、Space(charch);voidGetChar(char*ch);voidGetBC(char*ch);voidConcat(char^strToken,char*ch);intReserve(char^strToken);voidRetract(char*ch);voidinput();voiddisplayO;intanalyzerSubFun();stringDecStrToBinStr(stringdecNum);private:charStore[100];char*p;charstrToken[100];stringresult;charch;};i
6、ntAnalyzer::IsLetter(charch){if(Ca'<=ch&&ch<=,z,)
7、
8、('A,<=ch&&ch<=,Z,))return1;return0;}intAnalyzer::IsDigit(charch){if(ch>='0*&&ch<=,9,)return1;return0;}intAnalyzer::IsSpace(charch){if(ch==',
9、
10、ch==,,
11、
12、ch==,t')return1;return0;}voidAnalyzer::GetChar(char*ch){*ch二*p;P=P+1;}voidAnalyzer
13、::GetBC(char*ch){do{GetChar(ch);}while(IsSpace(*ch));}voidAnalyzer::Concat(char^strToken,char*ch){inti;for(i=0;i<100;i++){if(*strToken==NULL){*strToken=*ch;break;}strToken++;}}intAnalyzer::Reserve(char*strToken){if(strcmp(strToken,nbreakH)==0)return1;if(strcmp(strToken,ncaseH)==0)ret