📄 blockdivide.cpp
字号:
#include <iostream>
#include <string>
#include <algorithm>
using namespace std;
int ch=0,back_ch=0;
char c[200],in[10],out[10]; //c[]存放输入的数据,数组in[]/out[]存放入/出口语句序号
void main()
{
int i=0,j=-1,back_i=0,in_num=0,out_num=0;
char g[200];
cout<<"请输入要进行基本块划分的四元式(按回车表示四元式输入完毕):"<<endl;
for(i=0;i<200;i++)
{g[i]=' ';c[i]=' ';}
gets(g);
for(i=0;i<200;i++) {c[i]=g[i];} //将输入的数据备份到c[]
//入口条件1
in[in_num++]='1'; //首句为入口语句,将语句序号放入in[]
//入口条件2
for(i=0;*(g+i)!='~';i++) //由条件转移语句或无条件转移语句能转到的语句为入口语句
{
if(*(g+i)==':')
{
back_i=i;
for(;*(g+back_i)!=')';back_i--)
{continue;}
in[in_num++]=*(g+back_i-1); //得到入口语句序号,将其放入in[]
/*出口条件1*/
out[out_num++]=(char)((int)*(g+back_i-1)-1);//入口语句的上一句是出口语句,将其序号放入out[]
break;
}
}
cout<<"_______________________________"<<endl<<endl;
cout<<"判定输出语句/输入语句过程(输出语句—>输入语句):"<<endl<<endl;
for(;j!=0;j++)
{cout<<"sentence ("<<out[out_num-1]<<") --> ("<<in[in_num-1]<<")"<<endl;}
//入口条件3
for(i=0;*(g+i)!='~';i++) //紧跟在条件语句后面的语句为入口语句
{
if(*(g+i)=='i'&&*(g+i+1)=='f') //找到条件语句关键字if
{
back_i=i;
for(;*(g+back_i)!='(';back_i++) //找到条件语句的下一句,即入口语句
{continue;}
in[in_num++]=*(g+back_i+1); //将入口语句序号放入in[]
}
}
/*出口条件2*/
for(i=0;*(g+i)!='~';i++) //转移语句为出口语句
{
if(*(g+i)=='g'&&*(g+i+1)=='o') //找到转移语句的关键字goto后,将语句序号放入out[]
{
back_i=i;
for(;*(g+back_i)!=')';back_i--)
{continue;}
out[out_num++]=*(g+back_i-1);
in[in_num++]=(char)((int)*(g+back_i-1)+1);//其下一句是入口语句,将语句序号放入in[]
for(;j<1;j++)
{cout<<"sentence ("<<out[out_num-1]<<") --> ("<<in[in_num-1]<<")"<<endl;}
for(;*(g+back_i)!='L';back_i++) //找到转移语句 能够转到的语句序号
{continue;}
for(;*(c+ch)!='~';ch++)
{
for(;*(c+ch)!='L';ch++) {continue;}
if(*(g+back_i+1)==*(c+ch+1)&&back_i!=ch)//根据语句序号找到相应的语句
{
back_ch=ch;
for(;*(c+back_ch)!=')';back_ch--)
{continue;}
cout<<"sentence ("<<out[out_num-1]<<") --> ("<<*(c+back_ch-1)<<")"<<endl;
break; //输出转移
}
}
ch=0;
}
}
/*出口条件3*/
for(i=0;*(g+i)!='~';i++) //停语句为出口语句,找到停语句
{continue;}
back_i=i;
for(;*(g+back_i)!=')';back_i--)
{continue;}
out[out_num++]=*(g+back_i-1); //将语句序号放入out[]
cout<<"_______________________________"<<endl<<endl;
cout<<"划分好的代码块:"<<endl;
for(i=0;i<4;i++)
{cout<<"Block[ "<<i+1<<" ]: ("<<in[i]<<") -- ("<<out[i]<<")"<<endl;}//输出各基本块内的语句
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -