编译原理实验报告.doc

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

《编译原理》实验报告

专业班级:计093班

学号:

姓名:

指导老师:王森玉

实验内容:

1.求出每个非终结符的FIRST集合

2.求出每个产生式右部的FIRST集合

3.求出每个非终结符的Follow集合

实验环境:

VisualStudio2010

实验目的:

让同学们掌握FIRST集合和FOLLOW集合的求法

实验演示:

因为不知道怎么用电脑输出’ε’符号,我在代码里用’@’来表示‘ε’.以‘$’来结束输入

测试数据1:

S-aH

H-aMd|d

M-Ab|@

A-aM|e

输出结果:

测试数据2:

S-AB

S-bC

A-@

A-b

B-@

B-aD

C-AD

C-b

D-aS

D-c

输出结果:

测试数据3:

E-TX

X-+TX|@

T-FY

Y-*FY|@

F-i|(E)

输出结果:

容错处理:

由于出错情况比较多,我们随便测试一组错误。

测试数据:

S-ABA-@B-@

输出结果:

实验感想:

经过这几次的实验,不仅让我们更加深刻的知道了first集合和follow集合的计算步骤和方法,还很好的培养了我们动手能力。虽然这两个集合用笔算的方法很简单,但是要让计算机来演算就不是那么容易了,这需要设计合理的数据结构和算法才能正确地求出结果。当然在设计算法的时候难免会出现错误,这就需要我们这些程序员们仔细的去调试,发现错误并改正。本以为这次的实验代码不会很长,但是实际写好了却有好几百行,可能是我的算法不够好吧。总的来讲这次的实验没有遇到太大的问题,因为课上老师很认真的给我们讲解了它们的求法,笔推也做了好几次练习,让我们理清了思路。

实验代码:

#includestdio.h

#includestring.h

#defineMAX50

charcss[MAX][MAX];//保存所有的产生式

intcount=0;

intcnt=0;

structL{//保存所有的终结符

charch;

intflag;//1:能推出ε,0:不能,初值:-1

intnum;

charfirst[MAX];

ints;//first的长度

charfollow[MAX];

intl;//follow的长度

}l[MAX];

//对输入的格式进行控制,并校验输入是否符合格式

inthandle(chara[])

{

intlen,i=0,j,k;

len=strlen(a);

while(a[i]!=10)

{

if(a[i]==$)

return2;

if((==a[i])||(9==a[i]))

{

i++;

continue;

}

if((a[i]=A)(a[i]=Z))

{

if((a[i+1]!=-)||(a[i+2]!=))

{

printf(产生式格式错误\n);

return-1;

}

else

{

j=i;

k=0;

while((a[j]!=)(a[j]!=9)(a[j]!=$)(a[j]!=10))

{

if(a[j]==|)

{

css[count][k]=\0;

count++;

if((a[j+1]==)||(a[j]==9)||(a[j]==$)||(a[j]==10))

{

printf(产生式格式错误\n);

return0;

}

css[count][0]=a[i];

css[count][1]=a[i+1];

css[count][2]=a[i+2];

k=3;

j++;

continue;

}

css[count][k]=a[j];

k++;

j++;

}

css[count][k]=\0;

i=j;

count++;

}

}

else

{

printf(产生式格式错误\n);

return-1;

}

}

return0;

}

//从键盘获得输入

intinput()

{

chara[MAX*MAX];

intv;

printf(输入产生式

文档评论(0)

优美的文学 + 关注
实名认证
内容提供者

优美的文学优美的文学优美的文学优美的文学优美的文学

1亿VIP精品文档

相关文档