资源描述:
《北邮 编译原理 词法分析程序 报告.doc》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、.程序设计一词法分析程序专业资料.一.实验题目和要求 题目:词法分析程序的设计与实现。 实验内容:设计并实现C语言的词法分析程序,要求如下。 (1)、可以识别出用C语言编写的源程序中的每个单词符号,并以记号的形式输出每个单词符号。 (2)、可以识别并读取源程序中的注释。 (3)、可以统计源程序汇总的语句行数、单词个数和字符个数,其中标点和空格不计算为单词,并输出统计结果 (4)、检查源程序中存在的错误,并可以报告错误所在的行列位置。 (5)、发现源程序中存在的错误后,进行适当的恢复,使词法分析可以继续进行,通过一次词法分析处理,可以检查并报告源程序中存在
2、的所有错误。 实验要求: 方法1:采用C/C++作为实现语言,手工编写词法分析程序。 方法2:通过编写LEX源程序,利用LEX软件工具自动生成词法分析程序。二.程序设计思路采用C++来编写此程序。根据书上的函数、变量提示写出各种函数、整体框架。大部分变量名称与书上相同。画出符号间转换自动机模型,之后根据自动机写函数、错误判断。缓冲区用数组完成,标记位置的指针用int型来表示。专业资料.用lnum存储语句行数,wordnum存储单词个数,charnum存储字符个数。标点和空格不计算为单词。错误所在的行列位置存储在error.txt文件当中。 三.程序运行结
3、果举例Code.txt:#includemain(){intnum,n=0,m,l,t;printf("pleaseinputaninteger:");scanf("%d",&num);//dsfsdffor(l=0;num!=0;l++){m=num%10;//sdfafdafor(t=0;t!=l;t++)m=m*2;//dafdafn=nm;num=num/10;/*dafdas2323*/}专业资料.printf("//theresultis%d//",n);return0;}窗口运行结果:===================
4、==========================================*词法分析系统*=============================================================请输入需要分析的文件名称:code.txt-------------------------------------------------------------处理完毕。共出现1个错误。共有21行,33个单词,236个字符。结果请在token_table.txt中查看。================================
5、=============================专业资料.请按任意键继续...Token.txt;单词记号##includeidrelop,GTmainid(()){{intintnumid,,nid=relop,EQ0num专业资料.,,mid,,lid,,tid;;printfid(());;scanfid((,,&&numid));;forfor((lid=relop,EQ专业资料.0num;;numid!=RELOP,UE0num;;lid++++)){{mid=relop,EQnumid%%10
6、num;;forfor((tid=relop,EQ0num专业资料.;;tid!=RELOP,UElid;;tid++++))mid=relop,EQmid**2num;;nid=relop,EQnmid;;numid=relop,EQnumid专业资料.//10num;;}}printfid((,,nid));;returnreturn0num;;}}Error.txt:1.在第1行第15列出现非法字符Note.txt:line6.双引号间字符:pleaseinputaninteger:专业资料.line7.双引号间字符:%dline7.ddsfsdf
7、line10.ssdfafdaline12.ddafdafline14.dafdas2323line17.双引号间字符://theresultis%d//Count.txt:共有21行,33个单词,236个字符。四.源代码头文件:#include#include#include#include专业资料.#include#includeusingnamespacestd;全局变量:constintMAXBUFFER=62;//缓冲区容量constint
8、LB=30;//左缓冲区大小constintLRB=61;//左+右缓冲区大小c