91av视频/亚洲h视频/操亚洲美女/外国一级黄色毛片 - 国产三级三级三级三级

  • 大小: 14KB
    文件類型: .zip
    金幣: 2
    下載: 0 次
    發(fā)布日期: 2021-07-23
  • 語言: 其他
  • 標(biāo)簽:

資源簡介

我在學(xué)編譯原理課的時(shí)候編的,把文法寫進(jìn)文件,然后運(yùn)行程序即可.產(chǎn)生的DFA在屏幕上顯示,分析表寫到文件里面.

資源截圖

代碼片段和文件信息

#include?
#include?
#include?
#include?“GRAMA.h“

CGRAMA::CGRAMA():start_symbol(-5) //構(gòu)造函數(shù)
{
char?*bufch;
List?buflist;
int?i=0;
ifstream?fin(“grama.txt“ios::nocreate); //打開文件
if(!fin){
cout<<“file?not?found!\n“;
exit(0);
}
fin>>vnnum>>vtnum>>gncount;
vnstring=new?char[vnnum];
vtstring=new?char[vtnum];
vn=new?int[vnnum];
vt=new?int[vtnum];
for(i=0;i fin>>vnstring[i];
vn[i]=-10-5*i;
}
for(i=0;i fin>>vtstring[i];
vt[i]=10+5*i;
}
Gener?first_gener; //對文法進(jìn)行拓廣
first_gener.vn=start_symbol; //-5是文法開始符號(hào)
first_gener.sentence=new?int[2];
first_gener.sentence[0]=vn[0];
first_gener.sentence[1]=END;
gn_list.Insert(first_gener);
fin.get(ch);
for(i=0;i while(1){
fin.get(ch);
if(ch==‘\n‘) break;
buflist.Insert(ch);
}
buflist.PutToArray(buf);
buflist.MakeEmpty();
Encode(buf);
}
fin.close();
}

CGRAMA::~CGRAMA() //析構(gòu)函數(shù)
{
gn_list.MakeEmpty();
item_list.MakeEmpty();
convert_list.MakeEmpty();
delete[]vt;
delete[]vn;
delete[]vtstring;
delete[]vnstring;
}

void?CGRAMA::Encode(char?*&buf)
{
char?*pS=buf; //搜索buf字符串的指針
int?tempflag(0); //temp是中轉(zhuǎn)變量
Gener?generg1g2;
List?temp_list;
gener.vn=EncodeVn(*pS); //產(chǎn)生式左部的編碼
pS=pS+3; //跳過“->“
int?length=::GetStrLen(buf)-3; //length為產(chǎn)生式右部的最大長度
gener.sentence=new?int[length+1]; //堆內(nèi)存分配
for(int?i=0;i if((temp=EncodeVt(*pS))==-1)? //若在終結(jié)符中找不到就到非終結(jié)符中找
temp=EncodeVn(*pS);
gener.sentence[i]=temp; //存入編碼值
pS++;
}
gener.sentence[length]=END;
temp_list.Insert(gener);
for(ListNode?*p=temp_list.first;p;p=p->link)
{
length=p->data.GetRightLength();
flag=0;
for(i=0;i {
if(p->data.sentence[i]==-1)
{
flag=1;
break;
}
}
g1.vn=p->data.vn;
if(flag==1) g1.sentence=new?int[i+1];
else?g1.sentence=new?int[length];
for(int?j=0;j g1.sentence[j]=p->data.sentence[j];
g1.sentence[i]=END;
gn_list.Insert(g1);
if(flag==1){
g2.vn=p->data.vn;
g2.sentence=new?int[length-i];
for(j=0;j g2.sentence[j]=p->data.sentence[j+i+1];
g2.sentence[length-i-1]=END;
temp_list.Insert(g2);
}
}
}


int?CGRAMA::EncodeVn(char?ch) //查找非終結(jié)符號(hào)表
{
for(int?i=0;i if(ch==vnstring[i])
return?vn[i];
return?-1;
}

int?CGRAMA::EncodeVt(char?ch) //查找終結(jié)符號(hào)表
{
for(int?i=0;i if(ch==vtstring[i])
return?vt[i];
if(ch==‘$‘)?return?0;
return?-1;
}

char?CGRAMA::Decode(int?num)
{
char?c;int?i;
for(i=0;i if(num==vn[i])
return?vnstring[i];
for(i=0;i if(num==vt[i])
return?vtstring[i];
if(num==-5) c=‘X‘;
if(num==1) c=‘.‘;
if(num==5) c=‘#‘;
if(num==0) c=‘$‘;
return?c;
}

void?CGRAMA::ToIt

?屬性????????????大小?????日期????時(shí)間???名稱
-----------?---------??----------?-----??----
?????文件??????????65??2001-12-14?19:51??LALR(1)\grama.txt
?????文件????????3737??2001-12-06?22:33??LALR(1)\main.dsp
?????文件????????1147??2001-12-09?12:28??LALR(1)\Gener.h
?????文件????????1534??2001-12-14?19:38??LALR(1)\GRAMA.h
?????文件?????????531??2001-11-23?12:53??LALR(1)\main.dsw
?????文件?????????542??2001-12-14?19:52??LALR(1)\main.cpp
?????文件????????3736??2001-12-14?18:04??LALR(1)\List.h
?????文件????????1612??2001-12-14?18:09??LALR(1)\Item.h
?????文件?????????988??2001-12-15?08:13??LALR(1)\Queue.h
?????文件???????12262??2001-12-15?11:37??LALR(1)\GRAMA.cpp
?????文件???????49664??2001-12-15?11:37??LALR(1)\main.opt
?????目錄???????????0??2001-12-14?20:49??LALR(1)\

評(píng)論

共有 條評(píng)論