欢迎来到天天文库
浏览记录
ID:38620873
大小:118.00 KB
页数:17页
时间:2019-06-16
《北邮大三上-编译原理-词法分析实验报告》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、编译原理第三章词法分析班级:2009211311学号:姓名:schnee目录1.实验题目和要求32.检测代码分析33.源代码……………………………………………………………………..4161.实验题目和要求题目:词法分析程序的设计与实现。实验内容:设计并实现C语言的词法分析程序,要求如下。(1)、可以识别出用C语言编写的源程序中的每个单词符号,并以记号的形式输出每个单词符号。(2)、可以识别并读取源程序中的注释。(3)、可以统计源程序汇总的语句行数、单词个数和字符个数,其中标点和空格不计算为单词,并输出统计结果(4)、检查源程序中存在的错误,并可以报告错误所在的行列
2、位置。(5)、发现源程序中存在的错误后,进行适当的恢复,使词法分析可以继续进行,通过一次词法分析处理,可以检查并报告源程序中存在的所有错误。实验要求:方法1:采用C/C++作为实现语言,手工编写词法分析程序。方法2:通过编写LEX源程序,利用LEX软件工具自动生成词法分析程序。2.检测代码分析1、HelloWorld简单程序输入:2、较复杂程序输入:163.异常程序输入检测三,源代码#include#include#include16#include#include#include3、tdlib>#include#include#include#includeusingnamespacestd;constintFILENAME=105;constintMAXBUF=82;constintL_END=40;constintR_END=81;constintSTART=0;//开始指针vectorKey;//C保留的关键字表classfuntion//词法分析结构{public://变量声明charfilename[FILENAME];//需要词法分析的代4、码文件名ifstreamf_in;charbuffer[MAXBUF];//输入缓冲区intl_end,r_end,forward;//左半区终点,右半区终点,前进指针,booll_has,r_has;//辅助标记位,表示是否已经填充过缓冲区vectorId;//标识符表charC;//当前读入的字符intlinenum,wordnum,charnum;//行数,单词数,字符数stringcurword;//存放当前的字符串//函数声明voidget_char();//从输入缓冲区读一个字符,放入C中,forward指向下一个voidget_nbc5、();//检查当前字符是否为空字符,反复调用直到非空16voidretract();//向前指针后退一位voidinitial();//初始化要词法分析的文件voidfillBuffer(intpos);//填充缓冲区,0表示左,1表示右voidanalyzer();//词法分析voidtoken_table();//以记号的形式输出每个单词符号voidnote_print();//识别并读取源程序中的注释voidcount_number();//统计源程序汇总的语句行数、单词个数和字符个数voiderror_report();//检查并报告源程序中存在的所有错误6、voidsolve(char*file);//主调用函数};voidwelcome(){printf("*********************************************************");printf("**WelcometouseLexicalAnalyzer**");printf("**Byschnee@BUPTDate:2011/20/10**");printf("*********************************************************");}voidi7、nitKey(){Key.clear();Key.push_back("auto");Key.push_back("break");Key.push_back("case");Key.push_back("char");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_back8、("ext
3、tdlib>#include#include#include#includeusingnamespacestd;constintFILENAME=105;constintMAXBUF=82;constintL_END=40;constintR_END=81;constintSTART=0;//开始指针vectorKey;//C保留的关键字表classfuntion//词法分析结构{public://变量声明charfilename[FILENAME];//需要词法分析的代
4、码文件名ifstreamf_in;charbuffer[MAXBUF];//输入缓冲区intl_end,r_end,forward;//左半区终点,右半区终点,前进指针,booll_has,r_has;//辅助标记位,表示是否已经填充过缓冲区vectorId;//标识符表charC;//当前读入的字符intlinenum,wordnum,charnum;//行数,单词数,字符数stringcurword;//存放当前的字符串//函数声明voidget_char();//从输入缓冲区读一个字符,放入C中,forward指向下一个voidget_nbc
5、();//检查当前字符是否为空字符,反复调用直到非空16voidretract();//向前指针后退一位voidinitial();//初始化要词法分析的文件voidfillBuffer(intpos);//填充缓冲区,0表示左,1表示右voidanalyzer();//词法分析voidtoken_table();//以记号的形式输出每个单词符号voidnote_print();//识别并读取源程序中的注释voidcount_number();//统计源程序汇总的语句行数、单词个数和字符个数voiderror_report();//检查并报告源程序中存在的所有错误
6、voidsolve(char*file);//主调用函数};voidwelcome(){printf("*********************************************************");printf("**WelcometouseLexicalAnalyzer**");printf("**Byschnee@BUPTDate:2011/20/10**");printf("*********************************************************");}voidi
7、nitKey(){Key.clear();Key.push_back("auto");Key.push_back("break");Key.push_back("case");Key.push_back("char");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
8、("ext
此文档下载收益归作者所有