词法分析器程序代码

词法分析器程序代码

ID:35428283

大小:67.61 KB

页数:7页

时间:2019-03-24

词法分析器程序代码_第1页
词法分析器程序代码_第2页
词法分析器程序代码_第3页
词法分析器程序代码_第4页
词法分析器程序代码_第5页
资源描述:

《词法分析器程序代码》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库

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

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

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

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