编译原里语法分析器实验报告.docx

  1. 1、本文档共10页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 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)

199****4744 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

版权声明书
用户编号:7002121022000045

1亿VIP精品文档

相关文档