北邮大三上编译原理词法分析实验报告

.编译原理词法分析第三章2009211311班级:学号:schnee姓名:页脚.目录1.实验题目和要求...............................................................................................32.检测代码分析...................................................................................................33.源代码……………………………………………………………………..4页脚.实验题目和要求1.:词法分析程序的设计与实现。题目语言的词法分析程序,要求如下。:设计并实现C实验内容C语言编写的源程序中的每个单词符号,并以记号的形式输出每个单词符号。1()、可以识别出用)、可以识别并读取源程序中的注释。(2、可以统计源程序汇总的语句行数、单词个数和字符个数,其中标点和空格不计算为单词,并输出统计3)(结果、检查源程序中存在的错误,并可以报告错误所在的行列位置。(4)、发现源程序中存在的错误后,进行适当的恢复,使词法分析可以继续进行,通过一次词法分析处理,)(5可以检查并报告源程序中存在的所有错误。:实验要求C/C++作为实现语言,手工编写词法分析程序。1方法:采用软件工具自动生成词法分析程序。LEX:通过编写源程序,利用LEX方法2检测代码分析2.简单程序输入:HelloWorld1、较复杂程序输入:2、页脚.3.异常程序输入检测源代码三,#include<cmath>#include<cctype>#include<string>页脚.#include<vector>#include<cstdio>#include<cstdlib>#include<cstring>#include<fstream>#include<iostream>#include<algorithm>usingnamespacestd;constintFILENAME=105;constintMAXBUF=82;constintL_END=40;constintR_END=81;constintSTART=0;//开始指针vector<string>Key;//C保留的关键字表classfuntion//词法分析结构{public://变量声明charfilename[FILENAME];//需要词法分析的代码文件名ifstreamf_in;charbuffer[MAXBUF];//输入缓冲区intl_end,r_end,forward;//左半区终点,右半区终点,前进指针,booll_has,r_has;//辅助标记位,表示是否已经填充过缓冲区vector<string>Id;//标识符表charC;//当前读入的字符intlinenum,wordnum,charnum;//行数,单词数,字符数存放当前的字符串//stringcurword;页脚.//函数声明voidget_char();//从输入缓冲区读一个字符,放入C中,forward指向下一个voidget_nbc();//检查当前字符是否为空字符,反复调用直到非空voidretract();//向前指针后退一位voidinitial();//初始化要词法分析的文件voidfillBuffer(intpos);//填充缓冲区,0表示左,1表示右voidanalyzer();//词法分析voidtoken_table();//以记号的形式输出每个单词符号voidnote_print();//识别并读取源程序中的注释voidcount_number();//统计源程序汇总的语句行数、单词个数和字符个数voiderror_report();//检查并报告源程序中存在的所有错误voidsolve(char*file);//主调用函数};voidwelcome(){printf(\*********************************************************\n);printf(**WelcometouseLexicalAnalyzer**\n);printf(**Byschnee@BUPTDate:2011/20/10**\n);printf(*********************************************************\n\n\n);}voidinitKey(){Key.clear();Key.push_back(char);Key.push_back(reak);Key.push_back(auto);Key.push_back(case);Key.push_back(const);Key.push_back(continue);Key.push_back(default);Key.push_back(do);Key.push_back(double);Key.push_back(else);Key.push_back(enum);Key.push_back(extern);Key.push_back(loat);Key.push_back(or);Key.push_back(goto);Key.push_back(if);Key.push_back(int);Key.push_back(long);Key.push_back(egister);Key.push_back(eturn);Key.push_back(short);Key.push_back(signed);Key.push_back(static);Key.push_back(sizeof);Key.push_back(struct);Key.push_back(switch);Key.push_back(ypedef);Key.push_back(%union);Key.push_back(%unsigned);Key.push_back(void);Key.push_back(volatile);Key.push_back(while);}页脚.voidfuntion::get_char(){C=buffer[forward];结束//if(C==E...

1、当您付费下载文档后,您只拥有了使用权限,并不意味着购买了版权,文档只能用于自身使用,不得用于其他商业用途(如 [转卖]进行直接盈利或[编辑后售卖]进行间接盈利)。
2、本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供参考,付费前请自行鉴别。
3、如文档内容存在侵犯商业秘密、侵犯著作权等,请点击“举报”。

常见问题具体如下:

1、问:已经付过费的文档可以多次下载吗?

      答:可以。登陆您已经付过费的账号,付过费的文档可以免费进行多次下载。

2、问:已经付过费的文档不知下载到什么地方去了?

     答:电脑端-浏览器下载列表里可以找到;手机端-文件管理或下载里可以找到。

            如以上两种方式都没有找到,请提供您的交易单号或截图及接收文档的邮箱等有效信息,发送到客服邮箱,客服经核实后,会将您已经付过费的文档即时发到您邮箱。

注:微信交易号是以“420000”开头的28位数字;

       支付宝交易号是以“2024XXXX”交易日期开头的28位数字。

客服邮箱:

biganzikefu@outlook.com

所有的文档都被视为“模板”,用于写作参考,下载前须认真查看,确认无误后再购买;

文档大部份都是可以预览的,笔杆子文库无法对文档的真实性、完整性、准确性以及专业性等问题提供审核和保证,请慎重购买;

文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为依据;

如果您还有什么不清楚的或需要我们协助,可以联系客服邮箱:

biganzikefu@outlook.com

常见问题具体如下:

1、问:已经付过费的文档可以多次下载吗?

      答:可以。登陆您已经付过费的账号,付过费的文档可以免费进行多次下载。

2、问:已经付过费的文档不知下载到什么地方去了?

     答:电脑端-浏览器下载列表里可以找到;手机端-文件管理或下载里可以找到。

            如以上两种方式都没有找到,请提供您的交易单号或截图及接收文档的邮箱等有效信息,发送到客服邮箱,客服经核实后,会将您已经付过费的文档即时发到您邮箱。

注:微信交易号是以“420000”开头的28位数字;

       支付宝交易号是以“2024XXXX”交易日期开头的28位数字。

笔杆子文秘
机构认证
内容提供者

为您提供优质文档,供您参考!

确认删除?