- 1、本文档共6页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
2
2
实验一文法的机内表示与输入输出
实验题目:文法的机内表示与输入输出
实验目的:输入文法,按照所提供的各种要求输出所需结果。
实验准备:在学习了规则和有关文法的一些基本概念后,用本实验来加深各个概念间的关系。例如规则、文法、识别符、Chomsky文法、终结符、
非终结符等。
设计考虑:
E
T
F
E
十
T
实验代码:
#includeiostream.h
intt=0;
charA[20];
structLeftItem;
structRightNode
charright;
RightNode*nextsibling;
RightNode*nextrule;
RightNode(charabc)
nextsibling=
nextsibling=NULL;
nextrule=NULL:
};
structLeftItem
charleft;
RightNode*therule;
};
//IIIIIHIHHHHHHHHHH
voidInsert(RightNode*pNode,char*temp)
pNode=newRightNode(*temp);
RightNode*qNode=pNode;
temp++;
while(*temp!=\0)
qNode-nextsibling=new
RightNode(*temp);
qNode=qNode-nextsibling;
temp++;
voidBianlil(LeftItemArray[],intlength,RightNode*
pNode)
RightNode*qNode=pNode-nextrule;
while(pNode!=NULL)
for(inti=0;ilength;i++)
{
if(pNode-right==Array[i].left)
break;
if(i==length)
for(i=0;it;i++)
if(pNode-right==A[i])break;
}
if(i==t)
{
if(i!=0)cout,;
coutpNode-right;
A[t]=pNode-right;
t++;
pNode=pNode-nextsibling;
if(qNode!=NULL)
Bianli1(Array,length,qNode);
voidBianli2(RightNode*pNode)
RightNode*qNode=pNode-nextrule;
while(pNode!=NULL)
coutpNode-right;
pNode=pNode-nextsibling;
if(qNode!=NULL)
cout|;
Bianli2(qNode);
}
voidSelectMenu(LeftItemArray[],intlength)
{
intsel2;
do
{
cout请选择您要查询的项目.endl;
cout--查询全体规则请按------
1endl;
cout--查询指定规则请按------
2endl:
cinsel2;
}while(sel2!=1sel2!=2);
if(sel2==1)
{
for(inti=0;ilength;i++)
{
coutArray[i].left::=;
Bianli2(Array[i].therule);
coutendl;
else
chartemp;
intk;
coutendl:
cout请输入要查询规则左部:;
cintemp;
for(inti=0;ilength;i++)
if(temp==Array[i].left)
k=i:
break:
if(i==length)
cout本文法规则中没有对应的
规则!endl;
else
coutArray[k].left:=;
Bianli2(Array[k].therule);
//|||||//Ll////////|
voidmain()
chartemp[20];
intsize=0:
intk,sel,m,n,j;
cout请输入文法规则的数目:;
cinn;
LefItem*Array=newLeftItem[n];
for(inti=0;in;i++)
cout请输入文法规则:;
cintemp;
if(*temp==NULL)break;
for(j=0:jsize:j++)
if(Ar
您可能关注的文档
- 初三数学优秀作业设计案例.doc
- 初中生心理变化研究的体育方面的课题计划(1).doc
- 初中生心理变化研究的体育方面的课题计划.doc
- (本科)会计专业英语全册电子教案(1-17章).doc
- (高清版) ASTM D4169-22 ASTM 标准下载.doc
- (高清版)GBT 10739-2023 纸、纸板和纸浆 试样处理和试验的标准大气条件.doc
- (高清版)VDI VDE 2862-1-2012 PART 1(国外标准英文版中文版).doc
- (高清正版) DBJ T 15-136-2018 岩溶地区建筑地基基础技术规范.doc
- (高清正版) GB 35574-2017 热电联产单位产品能源消耗限额.doc
- (高清正版) GB_T 26366-2021 二氧化氯消毒剂卫生要求.doc
文档评论(0)