字数限制只能发上部分,你若有其它联系方法再想法发下半部分,这个程序是已通过编译的
#include <stdioh>
#include <processh>
#include <iostreamh>
#include <stringh>
#include <fstreamh>
class Yui_Kong //滤空格
{ char Yufa[30][30];
char k[30];
int N;
public:
char Yufa0[30][30];
char Kong[30][30];
private:
void Shu_Ru()
{ cout<<endl<<"请输入文法:"<<endl<<endl;
char c;int i=0,j=0;
c=getchar();
while(c!='#')
{if(c=='\n'){Yufa[i][j]='\0';i++;j=0;}
else Yufa[i][j++]=c;
c=getchar();
}
if(j==0)Yufa[i][j]='#';
else{
Yufa[i][j]='\0';Yufa[i+1][0]='#';
}
}
void Hua_jian()
{ int i=0;int ii=0,jj=0;
while(Yufa[i][0]!='#')
{
for(int j=0;Yufa[i][j]!='\0';j++)
{ if(j==1||j==2);
else if(Yufa[i][j]=='|')
{ Yufa0[ii++][jj++]='\0';
Yufa0[ii][0]=Yufa0[ii-1][0];
jj=1;
}
else
Yufa0[ii][jj++]=Yufa[i][j];
}
Yufa0[ii][jj]='\0';
ii++;jj=0;
i++;
}
Yufa0[ii][0]='#';
}
void Vn()//在产生式中提取非终结符
{ int i=0,ii=0,iii=0;
Kong[ii++][0]=Yufa[0][0];
while(Yufa[i][0]!='#')
{
for(int j=0;Yufa[i][j]!='\0';j++)
if(Yufa[i][j]>='A'&&Yufa[i][j]<='Z')
{
for(;iii<ii;iii++)
if(Kong[iii][0]==Yufa[i][j])break;
if(iii==ii)
Kong[ii++][0]=Yufa[i][j];
iii=0;
}
i++;
}
Kong[ii][0]='#';
}
void Scan()//进行扫描,看各非终结符能否推出空
{
char tmp[30][30];
int i=0;
for(;Yufa0[i][0]!='#';i++)//把产生时拷贝到临时数组
strcpy(tmp[i],Yufa0[i]);
tmp[i][0]='#';
for(int j=0;tmp[j][0]!='#';j++)//进行第一次扫描,
{
for(int jj=0;tmp[j][jj]!='\0';jj++)
{
if(tmp[j][jj]=='$')//能推出空
{
char tm=tmp[j][0];
for(int t=j;tmp[t+1][0]!='#';t++)
strcpy(tmp[t],tmp[t+1]);
tmp[t][0]='#';j--;
for(int a=0;Kong[a][0]!='#';a++)
{
if(Kong[a][0]==tm)
{Kong[a][1]='1'; break;}
}
break;
}
else if(tmp[j][jj]<'A'||tmp[j][jj]>'Z')//不能推出空
{
for(int jjj=j;tmp[jjj+1][0]!='#';jjj++)
strcpy(tmp[jjj],tmp[jjj+1]);
tmp[jjj][0]='#';j--;
break;
} }
}
for(int e=0;Kong[e][0]!='#';e++)//把第一次扫描的结果记录到Kong数组里
{ for(int j=0;tmp[j][0]!='#';j++)
if(Kong[e][0]==tmp[j][0]) break;
if(tmp[j][0]=='#'&&Kong[e][1]!='1')Kong[e][1]='0';
}
int hj=0;
for(int y=0;Kong[y][0]!='#';y++)
{ Kong[y][2]=Kong[y][1];
if(Kong[y][1]!='1'&&Kong[y][1]!='0')hj=1;
}
N=3;
if(hj==1)
{ int p=1;
while(p)
{ for(int aa=0;tmp[aa][0]!='#';aa++)
{ int bb=1,nn=0;
for(;tmp[aa][bb]!='\0';bb++)//逐个扫描产生式的每一个符号
{ for(int cc=0;Kong[cc][0]!='#';cc++)//查看kong中的每一个非终结符
{
int oo=0;
if(Kong[cc][0]==tmp[aa][bb])//在产生式中发现了一个非终结符
{
if(Kong[cc][1]=='1'||k[cc]=='1')//如果该非终结符被标记为能推出空,则删除该非终结符
{ int dd=bb;
while(tmp[aa][dd+1]!='\0')
{ tmp[aa][dd]=tmp[aa][dd+1];
dd++;
}
tmp[aa][dd]='\0';bb--;
break;
}
if(Kong[cc][1]=='0'||k[cc]=='0')//如果该非终结符被标记为不能推出空,说明此产生式左部亦不能推出空,记录,并删除此产生式
{ char jj=tmp[aa][0];
for(int ii=aa;tmp[ii+1][0]!='#';ii++)//删除产生式
strcpy(tmp[ii],tmp[ii+1]);
tmp[ii][0]='#';aa--;oo=1;
int ll=0;
for(int kk=0;tmp[kk][0]!='#';kk++)
{
if(tmp[kk][0]==jj){ll=1;break;}//查看产生式数组中是否还有以此以产生式左部非终结符开始的产生式
}
if(ll==0)//产生式数组中没有以此非终结符开始的产生式,此非终结符标记为不能
{ for(int mm=0;Kong[mm][0]!='#';mm++)
if(Kong[mm][0]==jj){k[mm]='0';break;}
}
if(bb==1){nn=1;}//标记此产生式右部并不是因为全部被删除而产生的空
break;
}
}
if(oo==1)break;//已经有结果,循环没必要继续,退出
}
}
if(bb==1&&nn==0)//产生式右部全部被删除
{
for(int ee=0;Kong[ee][0]!='#';ee++)//标记为能推出空
if(Kong[ee][0]==tmp[aa][0]) { k[ee]='1';break;}
char ff=tmp[aa][0];
for(int hh=0;tmp[hh][0]!='#';hh++)//删除左部为此非终结符的全部产生式
if(tmp[hh][0]==ff)
{
for(int gg=hh;tmp[gg+1][0]!='#';gg++)
strcpy(tmp[gg],tmp[gg+1]);
tmp[gg][0]='#';hh--;aa--;
} }
}
for(int mn=0;Kong[mn][0]!='#';mn++)
{ Kong[mn][N]=k[mn];
if(Kong[mn][1]!='1'&&Kong[mn][1]!='0')
Kong[mn][1]=k[mn];
k[mn]='a';
}
N++;
int ty=0;
while(Kong[ty][0]!='#')
{ if(Kong[ty][1]!='0'&&Kong[ty][1]!='1')break;
ty++;
}
if(Kong[ty][0]=='#')p=0;
} }
}
void KG(int a)//输出空格个数;
{ for(int i=0;i<a;i++)cout<<" ";
}
public:
void print_Kong()//显示非终结符能否推出空的结果
{ Shu_Ru();
Hua_jian();
Vn();
Scan();
int num=0,num1,num2,num3;
for(int i=0;Kong[i][0]!='#';i++) num++;
if(num==2){num1=13;num2=5;num3=5;}if(num==3){num1=9;num2=2;num3=3;}if(num==4){num1=6;num2=4;num3=4;}if(num==5){num1=5;num2=1;num3=2;}
if(num==6){num1=4;num2=1;num3=1;}if(num==7){num1=3;num2=2;num3=3;}if(num==8){num1=2;num2=6;num3=6;}
cout<<"\n\n 非终结符能否推出空的表\n";
cout<<"┏================================================== =======┑";
cout<<"┊";KG(num2);cout<<"非终结符";KG(num3);cout<<"┊";
for(int ii=0;ii<num;ii++)
{ KG(num1);cout<<Kong[ii][0];KG(num1);cout<<"┊";
}
cout<<"├————————————————————————————————┤";
cout<<"┊";KG(num2+num3+8);cout<<"┊";
for(int kk=0;kk<num;kk++)
{ KG(num1+num1+1);cout<<"┊";
}
cout<<"┊";KG(num2+2);cout<<"初值";KG(num3+2);cout<<"┊";
for(int iii=0;iii<num;iii++)
{ KG(num1-1);cout<<"未定";KG(num1-2);cout<<"┊";
}
for(int we=2;we<N;we++)
{ cout<<"┊";KG(num2+num3+8);cout<<"┊";
for(int s=0;s<num;s++)
{ KG(num1+num1+1);cout<<"┊";
}
cout<<"┊";KG(num2);cout<<"第"<<we-1<<"次扫描";KG(num3-1);cout<<"┊";
for(int j=0;j<num;j++)
{ if(Kong[j][we]=='1'){KG(num1);cout<<"是";KG(num1-1);cout<<"┊";}
else if(Kong[j][we]=='0'){KG(num1);cout<<"否";KG(num1-1);cout<<"┊";}
else {KG(num1);cout<<" ";KG(num1);cout<<"┊";}
}
}
cout<<"┊";KG(num2+num3+8);cout<<"┊";
for(int ss=0;ss<num;ss++)
{ KG(num1+num1+1);cout<<"┊";
}
cout<<"├———————————————————————————————————┤";
cout<<"┊";KG(num2);cout<<"最终结果";KG(num3);cout<<"┊";
for(int jjj=0;jjj<num;jjj++)
{if(Kong[jjj][1]=='1'){KG(num1);cout<<"是";KG(num1-1);cout<<"┊";}
else if(Kong[jjj][1]=='0'){KG(num1);cout<<"否";KG(num1-1);cout<<"┊";}
else {KG(num1);cout<<" ";KG(num1);cout<<"┊";}
}
cout<<"┕===============================================================┙";
}
};
class Qiu_First:public Yui_Kong
{
public:
char FIRST[30][30];
int number2[30];//记录非终结符FIRST集元素的数目
int number1[30];//记录非终结符在FIRST中的位置,与产生式数组配对使用
char chan_sheng_shi[30][30];
int U;//记录符号集合与符号串集合的分界
int number3[30];
void chu_shi_hua()//初始化 FIRST、number1、number2、chan_sheng_shi
{ int i=0;
for(;Kong[i][0]!='#';i++)
{ FIRST[i][0]=Kong[i][0];FIRST[i][1]='0';number2[i]=2;}
FIRST[i][0]='#';U=i;
i=0;
for(;Yufa0[i][0]!='#';i++)
{for(int j=0;Yufa0[i][j]!='\0';j++)
chan_sheng_shi[i][j]=Yufa0[i][j];
chan_sheng_shi[i][j]='\0';
for(int k=0;FIRST[k][0]!='#';k++)
if(chan_sheng_shi[i][0]==FIRST[k][0])
{ number1[i]=k;break;}
}
chan_sheng_shi[i][0]='#';
}
void he_bing(char ch[30][30],int m,int i,int &j,char ch0[30][30],int m0,int i0,int j0)//要扩展的集合、指明行数、指明集合元素开始的位置、指明集合元素结束位置……
{ for(int a=i0;a<j0;a++)
{
int b=i;
for(;b<j;b++)
if(ch[m][b]==ch0[m0][a])break;
if(b==j)
ch[m][j++]=ch0[m0][a];
} }
void scan1()
{ int a=0,aa=0;
while(chan_sheng_shi[a][0]!='#')
{ if(chan_sheng_shi[a][1]=='$')
{ aa=a;
for(;chan_sheng_shi[aa+1][0]!='#';aa++)
{
strcpy(chan_sheng_shi[aa],chan_sheng_shi[aa+1]); number1[aa]=number1[aa+1];
}
chan_sheng_shi[aa][0]='#';a--;
}
else if(chan_sheng_shi[a][1]<'A'||chan_sheng_shi[a][1]>'Z')
{
FIRST[number1[a]][number2[number1[a]]++]=chan_sheng_shi[a][1];
aa=a;
for(;chan_sheng_shi[aa+1][0]!='#';aa++)
{
strcpy(chan_sheng_shi[aa],chan_sheng_shi[aa+1]); number1[aa]=number1[aa+1];
}
chan_sheng_shi[aa][0]='#';a--;
}
a++;
}
a=0;
while(FIRST[a][0]!='#')
{
int i=0;
for(;chan_sheng_shi[i][0]!='#';i++)
if(chan_sheng_shi[i][0]==FIRST[a][0])break;
if(chan_sheng_shi[i][0]=='#')
FIRST[a][1]='1';
a++;
}
}
void scan2()
{
int a=0,aa=0;
for(;chan_sheng_shi[a][0]!='#';a++)
{
aa=1;int n;
while(chan_sheng_shi[a][aa]!='\0')
{
n=0;
if((chan_sheng_shi[a][aa]>='A'&&chan_sheng_shi[a][aa]<='Z')&&(chan_sheng_shi[a][aa+1]<'A'||chan_sheng_shi[a][aa+1]>'Z'))
n=1;
if((chan_sheng_shi[a][aa]>='A'&&chan_sheng_shi[a][aa]<='Z')&&(chan_sheng_shi[a][aa+1]>='A'&&chan_sheng_shi[a][aa+1]<='Z'))
{
int a2=0;
for(int a1=0;Kong[a1][0]!='#';a1++)
{
if(chan_sheng_shi[a][aa]==Kong[a1][0])
{if(Kong[a1][1]=='0')a2=1;
break;
}
}
if(a2==1) n=1;
}
if(n==1)
{
FIRST[number1[a]][number2[number1[a]]++]=chan_sheng_shi[a][aa];
for(int aaa=a;chan_sheng_shi[aaa+1][0]!='#';aaa++)
{
strcpy(chan_sheng_shi[aaa],chan_sheng_shi[aaa+1]); number1[aaa]=number1[aaa+1];
}
chan_sheng_shi[aaa][0]='#';
a--;
break;
}
FIRST[number1[a]][number2[number1[a]]++]=chan_sheng_shi[a][aa];
aa++;
}
}
}
void zheng_li()
{
int a=1;
while(a)
{
for(int b=0;FIRST[b][0]!='#';b++)
{
if(FIRST[b][1]=='0')//说明含有非终结符
{
for(int c=2;c<number2[b];c++)
{
if(FIRST[b][c]>='A'&&FIRST[b][c]<='Z')//找到非终结符进行集合扩展
for(int d=0;FIRST[d][0]!='#';d++)
if(FIRST[d][0]==FIRST[b][c]&&FIRST[d][1]=='1'){kuo_zhan(b,c,d);break;}//找到要添加的集合并且此集合已经整理完毕
}
int e=0;
for(int f=2;f<number2[b];f++)
if(FIRST[b][f]>='A'&&FIRST[b][f]<='Z'){e=1;break;}
if(e==0)
FIRST[b][1]='1';
}
}
int h=0;
for(int g=0;FIRST[g][0]!='#';g++)
if(FIRST[g][1]=='0'){h=1;break;}
if(h==0) a=0;
}
for(a=0;FIRST[a][0]!='#';a++)
{
if(Kong[a][1]=='1')
FIRST[a][number2[a]++]='$';
}
}
void kuo_zhan(int &b,int &c,int &d)
{
int m=1,i=2;
for(;i<number2[d];i++)
{
int j=2;
for(;j<number2[b];j++)//查找,没有则插入
if(FIRST[d][i]==FIRST[b][j])break;
if(j==number2[b])//插入
{
if(m==1)
{
m=0;FIRST[b][c]=FIRST[d][i];
}
else
{
for(int n=number2[b];n>c;n--)
FIRST[b][n]=FIRST[b][n-1];
FIRST[b][c]=FIRST[d][i];
number2[b]++;
c++;
}
}
}
if(m==1)
{
for(int n=c;n<number2[b];n++)
FIRST[b][n]=FIRST[b][n+1];
number2[b]--;
c--;
}
}
void print_FIRST()
{
chu_shi_hua();
scan1();
scan2();
zheng_li();
cout<<"\n 1非终结符的 FIRST 集:";
cout<<"\n ┏┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┓\n\n";
for(int i=0;FIRST[i][0]!='#';i++)
{
cout<<" FIRST( "<<FIRST[i][0]<<" ) ={ "<<FIRST[i][2];
for(int j=3;j<number2[i];j++)
cout<<" , "<<FIRST[i][j];
cout<<" }\n\n";
}
cout<<" ┗┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┛\n";
chuan_first();
}
void re_chu()
{
for(int i=0;Yufa0[i][0]!='#';i++)
{
for(int j=0;Yufa0[i][j]!='\0';j++)
chan_sheng_shi[i][j]=Yufa0[i][j];
chan_sheng_shi[i][j]='\0';
}
chan_sheng_shi[i][0]='#';
i=U+1;
for(int j=0;chan_sheng_shi[j][0]!='#';j++)
{
for(int j1=1;chan_sheng_shi[j][j1]!='\0';j1++)
FIRST[i][j1-1]=chan_sheng_shi[j][j1];
number2[i]=number3[i-U]=j1-1;
i++;
}
FIRST[i][0]='#';
}
void chuan_first()
{
re_chu();
for(int i=U+1;FIRST[i][0]!='#';i++)
{
if(FIRST[i][0]>='A'&&FIRST[i][0]<='Z')
{
for(int i2=0;Kong[i2][0]!='#';i2++)
if(Kong[i2][0]==FIRST[i][0])break;
if(Kong[i2][1]=='0')
he_bing(FIRST,i,number3[i-U],number2[i],FIRST,i2,2,number2[i2]);
if(Kong[i2][1]=='1')
{
for(int i3=0;i3<number3[i-U];i3++)
{
for(int i4=0;Kong[i4][0]!='#';i4++)
if(Kong[i4][0]==FIRST[i][i3])break;
if(Kong[i4][1]=='1')
{
he_bing(FIRST,i,number3[i-U],number2[i],FIRST,i4,2,number2[i4]);
number2[i]--;
}
if(Kong[i4][1]=='0')
{
he_bing(FIRST,i,number3[i-U],number2[i],FIRST,i4,2,number2[i4]);
break;
}
}
if(i3==number3[i-U]) FIRST[i][number2[i]++]='$';
}
}
else
FIRST[i][number2[i]++]=FIRST[i][0];
}
for(int j=U+1;FIRST[j][0]!='#';j++)
FIRST[j][number2[j]]='\0';
//print_chuan_first();
}
void print_chuan_first()
{
cout<<"/n 每一个符号串的 FIRST 集:";
cout<<"\n ┏┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┓\n\n";
for(int i=U+1;FIRST[i][0]!='#';i++)
{
cout<<" FIRST( ";
for(int i1=0;i1<number3[i-U];i1++)
cout<<FIRST[i][i1];
cout<<" ) ={ "<<FIRST[i][i1];
for(i1=number3[i-U]+1;i1<number2[i];i1++)
cout<<" , "<<FIRST[i][i1];
cout<<" }\n\n";
}
cout<<" ┗┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┛\n";
}
};
class Qiu_Follow:public Qiu_First
{
public:
char FOLLOW[30][30];
int n1[30];
int n2[30];
void chu_shi_hua_follow()
{
for(int i=0;Yufa0[i][0]!='#';i++)
strcpy(chan_sheng_shi[i],Yufa0[i]);
chan_sheng_shi[i][0]='#';
for(int j=0;Kong[j][0]!='#';j++)
{
FOLLOW[j][0]=Kong[j][0];n1[j]=n2[j]=1;
}
FOLLOW[0][1]='#';n1[0]=n2[0]=2;
FOLLOW[j][0]='#';
}
void qiu_follow_ji()
{ chu_shi_hua_follow();
int a=1;
while(a){
a=0;
for(int i=0;FOLLOW[i][0]!='#';i++)
{
for(int i0=0;chan_sheng_shi[i0][0]!='#';i0++)
{
for(int i1=1;chan_sheng_shi[i0][i1]!='\0';i1++)
if(FOLLOW[i][0]==chan_sheng_shi[i0][i1])//如果在产生式中找到一个此非终结符则进行处理
{
if(chan_sheng_shi[i0][i1+1]=='\0')//A->aB
{
for(int i2=0;FOLLOW[i2][0]!='#';i2++)
if(FOLLOW[i2][0]==chan_sheng_shi[i0][0])break;
he_bing(FOLLOW,i,1,n1[i],FOLLOW,i2,1,n1[i2]);
}
else if(chan_sheng_shi[i0][i1+1]<'A'||chan_sheng_shi[i0][i1+1]>'Z')//A->aBc
{
for(int m=1;m<n1[i];m++)
if(FOLLOW[i][m]==chan_sheng_shi[i0][i1+1])break;
if(m==n1[i])
FOLLOW[i][n1[i]++]=chan_sheng_shi[i0][i1+1];
}
else //A->aBCD……
{
for(int i3=0;Kong[i3][0]!='#';i3++)//判断C是否能推出空
if(Kong[i3][0]==chan_sheng_shi[i0][i1+1])break;
if(Kong[i3][1]=='0')//C不能推出空
he_bing(FOLLOW,i,1,n1[i],FIRST,i3,2,number2[i3]);
else//C能推出空,则查看D……
{
he_bing(FOLLOW,i,1,n1[i],FIRST,i3,2,number2[i3]);
n1[i]--;
int j=0;
for(int i4=i1+2;chan_sheng_shi[i0][i4]!='\0';i4++)
{
if(chan_sheng_shi[i0][i4]>='A'&&chan_sheng_shi[i0][i4]<='Z')
{ j=0;
for(int i5=0;Kong[i5][0]!='#';i5++)
if(Kong[i5][0]==chan_sheng_shi[i0][i4])break;
if(Kong[i5][1]=='0')
{
he_bing(FOLLOW,i,1,n1[i],FIRST,i5,2,number2[i5]);
j=1;
break;
}
else
{ he_bing(FOLLOW,i,1,n1[i],FIRST,i5,2,number2[i5]); n1[i]--;}
}
else
{
for(int k=1;k<n1[i];k++)
if(FOLLOW[i][k]==chan_sheng_shi[i0][i4])break;
if(k==n1[i])
FOLLOW[i][n1[i]++]=chan_sheng_shi[i0][i4];
j=1;break;}
}
if(j==0)
{
for(int i6=0;FOLLOW[i6][0]!='#';i6++)
if(FOLLOW[i6][0]==chan_sheng_shi[i0][0])break;
he_bing(FOLLOW,i,1,n1[i],FOLLOW,i6,1,n1[i6]);
}
}
}
}
}
}
for(int b=0;FOLLOW[b][0]!='#';b++)
if(n1[b]!=n2[b]) {a=1;break;}
for(b=0;FOLLOW[b][0]!='#';b++)
n2[b]=n1[b];
}
}
void print_FOLLOW()
{
qiu_follow_ji();
cout<<"\n 2非终结符的 FOLLOW 集:";
cout<<"\n ┏┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┓\n\n";
for(int i=0;FOLLOW[i][0]!='#';i++)
{
cout<<" FOLLOW( "<<FOLLOW[i][0]<<" ) ={ "<<FOLLOW[i][1];
for(int j=2;j<n1[i];j++)
cout<<" , "<<FOLLOW[i][j];
cout<<" }\n\n";
}
cout<<" ┗┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┛\n";
}
};
class Qiu_Select:public Qiu_Follow
{
public:
char SELECT[30][30];
int num[30];
void qiu_select()
{
for(int a=0;a<30;a++)num[a]=0;
for(int i=U+1;FIRST[i][0]!='#';i++)
{
if(FIRST[i][number2[i]-1]=='$')
{
number2[i]--;
he_bing(SELECT,i-U-1,0,num[i-U-1],FIRST,i,number3[i-U],number2[i]);
int s=i-U-1;
for(int i1=0;FOLLOW[i1][0]!='#';i1++)
if(FOLLOW[i1][0]==Yufa0[s][0])break;
he_bing(SELECT,i-U-1,0,num[i-U-1],FOLLOW,i1,1,n1[i1]);
number2[i]++;
}
else
{
he_bing(SELECT,i-U-1,0,num[i-U-1],FIRST,i,number3[i-U],number2[i]);
}
}
}
分类: 电脑/网络 >> 程序设计 >> 其他编程语言
问题描述:
完成以下正则文法所描述的Pascal语言子集单词符号的词法分析程序。
<标识符>→字母| <标识符>字母| <标识符>数字
<无符号整数>→数字| <无符号整数>数字
<单字符分界符> →+ |- | |; |(|)
<双字符分界符>→<大于>=|<小于>=|<小于>>|<冒号>=|<斜竖>
<小于>→<
<等于>→=
<大于>→>
<冒号> →:
<斜竖> →/
该语言的保留字 :begin end if then else for do while and or not
说明:
1 该语言大小写不敏感。
2 字母为a-z A-Z,数字为0-9。
3可以对上述文法进行扩充和改造。
4 ‘/……/’为程序的注释部分。
[设计要求]
1、 给出各单词符号的类别编码。
2、 词法分析程序应能发现输入串中的错误。
3、 词法分析作为单独一遍编写,词法分析结果为二元式序列组成的中间文件。
4、设计两个测试用例(尽可能完备),并给出测试结果。
解析:
这种问题 …… 会有人解答吗
当我们在计算机系统中运行一些容量较大的程序或者游戏时,系统常常会自动d出“xx内存不能为read或written”的错误提示,遇到这种故障信息时,我们该如何才能将它有效排除,同时确保下次运行容量较大的程序或者游戏时,系统不会再次出现系统内存读写错误呢事实上,当我们不幸遭遇上面的故障信息时,我们可以尝试按照如下步骤进行依次排查:
移除无效插件程序
在上网冲浪的过程中,许多插件程序会偷偷地安装到计算机系统中,而不少插件程序往往都有防删除的功能,因此这些插件很容易与其他的应用程序发生冲突,从而间接地引起系统内存读写错误的现象。为了给那些大容量的应用程序或游戏提供一个干净、稳定的工作环境,我们最好定期使用类似360安全卫士这样的程序,来查看系统是否被偷偷安装了各种无效的垃圾插件程序,一旦发现的话,那可以直接将它们从系统中及时卸载干净。
手工修复系统服务
与系统内存读写 *** 作有关的Windows Management Instrumentation服务要是发生错误的话,也会导致系统d出内存读写错误的提示,所以当我们遇到这种错误现象时,可以尝试手工修复一下Windows Management Instrumentation服务,下面就是具体的修复步骤:
首先用鼠标右键单击系统桌面中的“我的电脑”图标,从d出的快捷菜单中执行“管理”命令,打开本地系统的计算机管理窗口,在该窗口的左侧显示区域,依次展开“服务和应用程序”/“服务”选项,在对应“服务”选项所在的右侧显示区域中,找到Windows Management Instrumentation服务,并用鼠标右键单击该服务选项,从d出的快捷菜单中执行“属性”命令,打开如图所示的服务属性设置界面;
其次在该设置界面的“常规”标签页面中,单击“停止”按钮,将Windows Management Instrumentation服务暂时停止运行。之后,打开计算机系统的资源管理器窗口,在该窗口中依次展开“Windows”、“system32”、“wbem”、“repository”文件夹,然后将“repository”文件夹窗口中的所有文件进行一下备份,备份完成后将该文件夹中的所有内容全部清除掉;
接下来,重新启动一下计算机系统,待系统启动成功后,按前面 *** 作打开Windows Management Instrumentation服务的属性设置界面,单击该界面中的“启动”按钮,相信这么一来Windows Management Instrumentation服务就能正常运行了。
修复系统损坏文件
如果计算机系统不小心感染了病毒或者发生了误删除 *** 作,那么与系统内存读写 *** 作有关的系统文件很可能受到损坏,而这些系统文件一旦受到损坏的话,那么我们就很容易遭遇内存读写故障提示了。所以,我们一旦碰到内存读写错误的提示时,不妨按照如下步骤修复一下系统,看看系统是否存在损坏的文件:
首先使用最新版本的杀毒软件,来对计算机系统进行彻底地病毒查杀 *** 作,因为计算机系统一旦感染了病毒而不进行清除的话,我们即使修复了系统文件,病毒仍然有可能会继续破坏系统文件,所以及时使用杀毒软件来将计算机中的病毒全部清除干净,可以确保系统文件不会继续受到病毒的威胁。
其次使用系统自带的“sfc”命令,来尝试将受到损坏的系统文件修复到正常状态。在修复受损系统文件时,只要依次单击“开始”/“运行”命令,在d出的系统运行对话框中,输入字符串命令“sfc /scannow”,单击回车键后,该命令程序就会对系统每个角落处的系统文件进行搜索扫描,一旦发现系统文件的版本不正确或者系统文件已经损坏的话,它就能自动d出提示界面,要求我们插入Windows系统的安装光盘,以便从中提取正常的系统文件来替代不正常的系统文件,从而达到修复系统文件的目的。要是系统修复 *** 作成功的话,相信我们重新启动计算机系统时,就不会看到有什么不正常的现象了。
及时释放系统内存
我们知道,在运行一些容量较大的程序或者游戏时,需要消耗相当的系统内存资源,要是此时内存空间不够时,那么系统内存读写错误的故障提示很有可能就会发生。为了有效避免这种错误提示,我们最好在运行容量较大的程序或者游戏之前,应该先将计算机系统重新启动一下,这样能够将系统内存空间充分释放出来;如果计算机内存空间本身就比较小的话,那么我们建议各位最好及时升级内存,以便拓展内存的有效使用空间,以防止由于系统内存不足而造成系统内存读写错误的发生。
当然,在系统自身内存空间不足的情况下,我们应该先将那些随机启动的杀毒软件以及相关即时监控的程序暂时关闭掉,之后再尝试运行容量较大的应用程序或者网络游戏,因为杀毒软件及相关监控程序会在一定程度上消耗一些系统内存资源,将它们关闭可以节省不小的内存空间,从而能够有效避免内存读写错误现象的发生。当然,值得注意的是,我们在运行完大容量的程序或游戏之后,还必须记得及时将相关程序的监控功能全部打开。
一般的是Web Config中的东西错误,我以前也碰见过,明明调试好的网站,但是到别的机器上配置就出现分析器错误,看看对应的文件html代码有无错误,然后在NET中将HaozhouControlsHzNavigate重新引用一下
以上就是关于求C++语法分析器和词法分析器,高分急求!!全部的内容,包括:求C++语法分析器和词法分析器,高分急求!!、编译原理课程-简单词法分析器设计(C或C++)、求解答:分析器错误:应用程序服务器错误。有配图等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)