DFA模拟程序分析和总结.docx

  1. 1、本文档共6页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多

实 验 报 告

课程:实验题目:学院:

专业:

学号:

姓名:指导教师:

完成日期:

一、实验目的

编译原理DFA模拟程序

通过实验教学,加深学生对所学的关于编译的理论知识的理解,增强学生对所学知识的综合应用能力,并通过实践达到对所学的知识进行验证。通过对DFA模拟程序实验,使学生掌握词法分析的实现技术,及具体实现方法。通过本实验加深对词法分析程序的功能及实现方法的理解。

二、实验环境

供Windows系统的PC机,可用C++/C#/Java等编程工具编写。三、实验原理

词法分析是从左向右扫描每行源程序的符号,拼成单词,换成统一的二元式 (单词种别码,单词符号的属性值)表示。对给定的程序通过词法分析器识别一个个单词符号,并以二元式(单词种别码,单词符号的属性值)显示,本程序则是通过对给定路径的文件的分析后以单词符号和文字提示显示)

四、实验内容

1、定义一个右线性正规文法,示例如(仅供参考)G[S]:S→aU|bV U→bV|aQ

V→aU|bQ Q→aQ|bQ|e

实验前要考虑清楚用哪种数据结构存储上述文法。

2、构造其有穷确定自动机,如

3、利用有穷确定自动机M=(K,Σ,f,S,Z)行为模拟程序算法,来对于任意给定的串,若属于该语言时,该过程经有限次计算后就会停止并回答“是”,若不属于,要么能停止并回答“不是”。

K:=S;

c:=getchar;whileceofdo

{K:=f(K,c);

c:=getchar; };

ifKisinZthenreturn(‘yes’)elsereturn(‘no’)

五、实验代码

#includestdio.h#includestring.h#includestdlib.h

intstrLength;//记录输入的字符串长度,用于在Q里面做递归用

intQ(charstr[],intNum);intV(charstr[],intNum);intU(charstr[],intNum);

intS(charstr[]){//非终结符Sif(str[0]==a){

//如果经过U返回为1则正确if(U(str,1)==1){

return1;

}

//如果U返回为0则错误

else{

return0;

}

}

elseif(str[0]==b){

if(V(str,1)==1){return1;

}

else{

return0;

}

}

else{

return0;

}

}

intU(charstr[],intNum){if(str[Num]==b){

if(V(str,Num+1)==1){return1;

}

else{

return0;

}

}

elseif(str[Num]==a){

if(Q(str,Num+1)==1){return1;

}

else{

return0;

}

}

else{

return0;

}

}

intV(charstr[],intNum){if(str[Num]==a){

if(U(str,Num+1)==1){return1;

}

else{

return0;

}

}

elseif(str[Num]==b){

if(Q(str,Num+1)==1){return1;

}

else{

return0;

}

}

else{

return0;

}

}

intQ(charstr[],intNum){

if(str[Num]==a||str[Num]==b){if(Q(str,Num+1)==1){

return1;

}

else{

return0;

}

}

elseif(NumstrLength){return0;

}

else{return1;

}

}

intmain(){

charstr[20];

//charEnd=shuhuan;

printf(请输入待检验字符串:\n);while(scanf(%s,str)!=EOF){strLength=strlen(str);

printf(该字符串的长度为:%d\n,strLength);if(S(str)==1){

printf(属于该语言\n);

}

else{

printf(不属于该语言\n);

}

printf(again:\n);

}

}

六、实验结果

七、实验心得

这次实验给出了正规文法,让我们求该正规文法的句子。锻炼了我们综合运用的能力,

加深了我们对所学的关于编译

文档评论(0)

hao187 + 关注
官方认证
内容提供者

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

认证主体武汉豪锦宏商务信息咨询服务有限公司
IP属地上海
统一社会信用代码/组织机构代码
91420100MA4F3KHG8Q

1亿VIP精品文档

相关文档