📄 cpp.cpp
字号:
#include<iostream.h>
#include<string.h>
//#include "cpp1.cpp"
#include "sm.cpp"
//#define INT 6
void out(int p);
char check(char,char);
bool checkvt(char);
int newtemp();
void gen();
char s[100],b[20];
int s1[100],i=0,i1=0,c[20][4],E_place,q;
void main()
{
char a;
int j1,j2,j4=0;
char Q;
for(int k=0;k<20;k++)
{
name[k][0]='\0';
const1[k][0]='\0';
}
q=1;
s[q]='#';
s1[q]=0;
intput();
j2=strlen(d);
for(k=0;k<j2;k++)
{
switch(d[k]){
case '+': if((d[k+1]=='*')||(d[k+1]=='+'))
{
cout<<"is not a sentence"<<endl<<"语法错误"<<endl;
cout<<"两个或两个以上运算符号连续出现"<<endl;
return;
}
if(d[k+1]=='#')
{
cout<<"is not a sentence"<<endl<<"语法错误"<<endl;
cout<<"两个或两个以上运算符号连续出现"<<endl;
return;
}
case '*': if((d[k+1]=='+')||(d[k+1]=='*')&&(d[k+2]=='*'))
{
cout<<"is not a sentence"<<endl<<"语法错误"<<endl;
cout<<"两个或两个以上运算符号连续出现"<<endl;
return;
}
if((d[k+1]=='+')||(d[k+1]=='*')&&(d[k+2]=='*'))
{
cout<<"is not a sentence"<<endl<<"语法错误"<<endl;
cout<<"两个或两个以上运算符号连续出现"<<endl;
return;
}
}
}
do
{
a=sm();
while(a=='?')
a=sm();
if((strtoken[0]=='\0')||(a=='+')||(a=='^')||(a=='(')||(a==')')||(a=='*')){
j4=j4;
}
else
j4=entry();
if(checkvt(s[q])) //s[q] in VT
j1=q;
else
j1=q-1;
while(check(s[j1],a)=='>') //s[j1]>a
{
do
{
Q=s[j1];
if(checkvt(s[j1-1])) //s[j1-1] in VT
j1=j1-1;
else
j1=j1-2;
}while((check(s[j1],Q)=='>')||(check(s[j1],Q)=='=')); //s[j1]<Q
//retract s[j+1]……s[q] to N
if(q==j1+1)
{
q=j1+1;
s[q]='N';
s1[q]=j4;
}
else if(s[q]!=')')
{
E_place=newtemp();
gen();
s1[j1+1]=E_place;
q=j1+1;
s[q]='N';
}
else if(s[q]==')')
{
s1[j1+1]=s1[q-1];
q=j1+1;
s[q]='N';
}
for(int j3=1;j3<=q;j3++)
cout<<s[j3];
cout<<endl;
}
if((check(s[j1],a)=='<')||(check(s[j1],a)=='='))
{
q=q+1;
s[q]=a;
}
else{
cout<<"Not a sentence"<<endl;
cout<<s[j1]<<"与"<<a<<"没有优先关系"<<endl;
return;
}
for(int j3=1;j3<=q;j3++)
cout<<s[j3];
cout<<endl;
}while(a!='#');
if((s[1]=='#')&&(s[2]=='N')&&(s[3]=='#'))
{
for(int i2=1;i2<=i1;i2++)
cout<<"( "<<b[i2]<<" "<<c[i2][1]<<" "<<c[i2][2]<<" "<<c[i2][3]<<" )"<<endl;
cout<<endl<<endl;
cout<<"此输入串的语法制导翻译如下:"<<endl;
for(i2=1;i2<=i1;i2++)
{
cout<<"( "<<b[i2]<<" ";
if(c[i2][1]>=100)
cout<<name[c[i2][1]-100]<<" ";
else cout<<"T"<<c[i2][1]<<" ";
if(c[i2][2]>=100)
cout<<name[c[i2][2]-100]<<" ";
else cout<<"T"<<c[i2][2]<<" ";
if(c[i2][3]>=100)
cout<<name[c[i2][3]-100]<<" )"<<endl;
else cout<<"T"<<c[i2][3]<<" )"<<endl;
}
cout<<"Is a sentence"<<endl;
}
else cout<<"Not a sentence"<<endl;
}
void out(int p)
{
cout<<'\t'<<p<<endl;
}
char check(char c,char d)
{
switch(c)
{
case '+': if((d=='+')||(d==')')||(d=='#'))
return '>';
else if((d=='*')||(d=='^')||(d=='i')||(d=='('))
return '<';
case '*': if((d=='+')||(d=='*')||(d==')')||(d=='#'))
return '>';
else if((d=='^')||(d=='(')||(d=='i'))
return '<';
case '^':if((d=='+')||(d=='*')||(d==')')||(d=='#'))
return '>';
else if((d=='^')||(d=='(')||(d=='i'))
return '<';
case 'i': if((d=='+')||(d=='*')||(d=='^')||(d==')')||(d=='#'))
return '>';
else if((d=='(')||(d=='i'))
return '?';
case '(': if(d==')')
return '=';
else if((d=='+')||(d=='*')||(d=='^')||(d=='(')||(d=='i'))
return '<';
else if(d=='#')
return '?';
case ')': if((d=='+')||(d=='*')||(d==')')||(d=='^')||(d=='#'))
return '>';
else if((d=='i')||(d=='('))
return '?';
case '#': if((d=='#'))
return '=';
else if((d=='+')||(d=='*')||(d=='^')||(d=='(')||(d=='i'))
return '<';
else if(d==')')
return '?';
default : return '?';
}
}
bool checkvt(char e)
{
switch(e){
case '+': return 1;
case '*': return 1;
case '^': return 1;
case 'i': return 1;
case '(': return 1;
case ')': return 1;
case '#': return 1;
default : return 0;
}
}
int newtemp()
{
i=i+1;
return i;
}
void gen()
{
i1=i1+1;
b[i1]=s[q-1];
c[i1][1]=s1[q-2];
c[i1][2]=s1[q];
c[i1][3]=E_place;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -