- 1、本文档共10页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
南华大学
计算机科学与技术学院
实验报告
〔2008~2009学年度第一学期〕
课程名称
编译原理
实验名称
语法分析器
姓名
张博
学号
20064440218
专业
计算机专业
班级
计算机062班
地点
八栋209
教师
陈星
实验目的及要求
软件、硬件环境
MicrosoftVisualc++6.0.
实验目的:编制一个递归下降分析程序,实现对词法分析程序所提供的单词序列的语法检查和结构分析。
实验要求:利用C语言编制递归下降分析程序,并对简单语言进行语法分析。
待分析的简单语言的语法:
用扩充的BNF表示如下:
程序::=begin语言串end
语言串::=语句{;语句}
语句::=赋值语句
赋值语句::=ID:=表达式
表达式::=项{+项|-项}
项::=因子{*因子|/因子}
因子::=ID|NUM|(表达式)
〔2〕实验要求说明:
输入单词串,以”#”结束,如果是正确的文法句子,那么输出成功信息,打印“success”,否那么输出“error”。
实验算法思想〔包含主程序的示意图〕
〔1〕主程序的示意图如下列图所示:
〔2〕递归下降分析程序示意图如下列图所示:
〔3〕语法串分析过程示意图如下列图所示:
〔4〕statement语句分析函数示意图如下列图所示:
〔5〕expression表达式分析函数如下列图所示:
〔6〕term分析函数示意图如下列图所示:
〔7〕factor分析过程示意图如下列图所示:
3.实验内容
#includestdio.h
#includeiostream.h
#includestring.h
#defineMAX150//词法分析表的最大容量
#defineMAXBUF255//缓冲区的最大缓冲量
voidterm();
voidlrparser();
voidstatement();
voidyucu();
voidexpression();
voidfactor();
charprog[MAXBUF],token[MAX];
charch;
intsyn,p,m,n,sum,kk;
char*rwtab[6]={begin,if,then,while,do,end};
///////////////////////////////////////////////
//词法分析程序
///////////////////////////////////////////////
voidscaner()
{
for(m=0;mMAX;m++)
token[m]=NULL;
m=0;sum=0;
ch=prog[p++];
while(ch==)
ch=prog[p++];//读取下一个字符;
if(ch=65ch=122/*是字母字符*/)
{
while(ch=65ch=122||ch=48ch=57)/*为字母字符或数字字符*/
{
token[m++]=ch;
ch=prog[p++];//读取下一个字符;
}
token[m++]=\0;
p=p-1;
syn=10;
for(n=0;n6;n++)
if(strcmp(token,rwtab[n])==0)
{
syn=n+1;//给出syn值;
break;
}
}
elseif(ch=48ch=57/*ch为数字字符*/)
{
while(ch=48ch=57/*ch为数字字符*/)
{
sum=sum*10+ch-0;
ch=prog[p++];//读取下一个字符;
}
p=p-1;//回退一个字符;
syn=11;
}
elseswitch(ch)
{
case:m=0;token[m++]=ch;
ch=prog[p++];//读取下一个字符;
if(ch==)
{
syn=21;
token[m++]=ch;
}
文档评论(0)