📄 控制.cpp
字号:
#include"头文件.h"
extern int nowaddress;//表示下一个地址
extern bianYi parse; //词法分析
extern item sign; //
extern fouryuan FOMO; //四元组表
extern suanfu_stack STACK; //布朗运算的栈
extern valuetable VT; //变量表
state sentence(){
state temp;
switch(sign.x){
case 23:{//programme
item signtemp=sign;
getnextsign();
if(sign.x!=36)error();
FOMO.load(nowaddress,signtemp,sign,sign,sign);
nowaddress++;
getnextsign();
if(sign.x!=52)error();
getnextsign();
temp=St();
// if(sign.x!=52)error();
// getnextsign();
sentence();
break;
}
case 34:{//while
temp=while_T();
break;
}
case 36:{
temp=fuzhi_E();
break;
}
case 3:{//begin
temp=mulsentence();
break;
}
case 15:{//if
temp=if_E();
break;
}
case 26:{
temp=repeat_E();
break;
}
default :error();
}
return temp;
}
state St(){
state temp;
switch(sign.x){
case 33:{
getnextsign();
valueDefine();
K();
break;
//////////////////////////////////
}
default :break;
}
return temp;
}
state K(){
state temp;
switch(sign.x){
case 36:{
valueDefine();
break;
}
default:break;
}
return temp;
}
valuetype valueDefine(){
valuetype temp;
if(sign.x!=36)error();
temp.location=sign.y;
getnextsign();
temp.type=(L()).type;
VT.add(temp);
return temp;
}
valuetype L(){
valuetype temp;
switch(sign.x){
case 44:{
getnextsign();
// if(sign.x!=36)error();
temp.type=(valueDefine()).type;
break;
}
case 50:{
getnextsign();
temp.type=(T()).type;
break;
}
default :error();
}
return temp;
}
valuetype T(){
valuetype temp;
switch(sign.x){
case 17:{
temp.type=17;
getnextsign();
if(sign.x!=52)error();
getnextsign();
break;
}
case 4:{
temp.type=4;
getnextsign();
if(sign.x!=52)error();
getnextsign();
break;
}
default: error();
}
return temp;
}
/*
while_W->while
while_C->while_W boolean_E do
while_T->while_C S
*/
state S(){
state temp;
return temp;
};
state::state(){
chain[0]=0;
codebegin=nowaddress;
};
state::state(const state & temp){
for(int i=0;i<temp.chain[0]+1;i++){
chain[i]=temp.chain[i];
}
codebegin=temp.codebegin;
}
state& state::merge(int cs[],int cd[]){
for(int i=0;i<cs[0]+1;i++)
chain[i]=cs[i];
for(i=1;i<cd[0]+1;i++)
chain[i+cs[0]]=cd[i];
chain[0]=cs[0]+cd[0];
return*this;
}
state&state::operator=(state &temp){
for(int i=0;i<temp.chain[0]+1;i++)
chain[i]=temp.chain[i];
codebegin=temp.codebegin;
return *this;
}
state while_W(){
state temp;
temp.codebegin=nowaddress;
if(sign.x!=34)error();
return temp;
}
state while_C(){
state temp;
//temp.codebegin=nowaddress;
state tempw=while_W();
getnextsign();
TFL tempe=boolean_E();
// getnextsign();
if(sign.x !=10)error();
FOMO.writeback(tempe.headt,nowaddress);
/////////将布朗运算的FALSE连作为连
for(int zz=0;zz<tempe.headf[0]+1;zz++)
temp.chain[zz]=tempe.headf[zz];
temp.codebegin=tempw.codebegin;
return temp;
}
state while_T(){
STACK.suanfu_clear();
state temp;
state tempc=while_C();
getnextsign();
state temps=sentence();
FOMO.writeback(temps.chain,tempc.codebegin);
FOMO.load(nowaddress,tempc.codebegin);
nowaddress++;
// cout<<"goto ,"<<endl;
temp=tempc;
return temp;
}
/*
if_C->if boolean_E then
if_T->if_C S else
if_E->if_T S
*/
state if_E(){
STACK.suanfu_clear();
state temp;
state tempt=if_T();
getnextsign();
state temps=sentence();
//FOMO.writeback(tempt.chain,temps.codebegin);
temp.merge(temps.chain,tempt.chain);
temp.codebegin=tempt.codebegin;
return temp;
}
state if_C(){
state temp;
switch(sign.x){
case 15:{
getnextsign();
TFL tempe=boolean_E();
FOMO.writeback(tempe.headt,nowaddress);
for(int zz=0;zz<tempe.headf[0]+1;zz++)
temp.chain[zz]=tempe.headf[zz];
temp.codebegin=tempe.codebegin;
//getnextsign();
if(sign.x!=29)error();
break;
}
default :error();
}
return temp;
}
state if_T(){
state temp;
state tempc=if_C();
getnextsign();
state temps=fuzhi_E();/////////////
// getnextsign();
if(sign.x!=11)error();
int q=nowaddress;
FOMO.load(nowaddress,0);
nowaddress++;
FOMO.writeback(tempc.chain,nowaddress);
int tempq[2];
tempq[0]=1;
tempq[1]=q;
temp.merge(temps.chain,tempq);
return temp;
}
/*
repeat_E->repeat_T E
repeat_T->repeat_B S until
repeat_B->repeat
*/
state repeat_B(){
state temp;
temp.codebegin=nowaddress;
if(sign.x!=26)error();
return temp;
}
state repeat_T(){
state temp;
//temp.codebegin=nowaddress;
temp=repeat_B();
getnextsign();
state temps=sentence();
// getnextsign();
if(sign.x !=32)error();
FOMO.writeback(temps.chain,nowaddress);
return temp;
}
state repeat_E(){
STACK.suanfu_clear();
state temp;
state tempt=repeat_T();
getnextsign();
TFL temptfl=boolean_E();
FOMO.writeback(temptfl.headf,tempt.codebegin);
// FOMO.load(nowaddress,tempt.codebegin);
// nowaddress++;
// cout<<"goto ,"<<endl;
for(int zz=0;zz<temptfl.headt[0]+1;zz++)
temp.chain[zz]=temptfl.headt[zz];
temp.codebegin=tempt.codebegin;
return temp;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -