• 大小: 10KB
    文件类型: .cpp
    金币: 2
    下载: 1 次
    发布日期: 2021-07-22
  • 语言: C/C++
  • 标签: 代码  

资源简介

编译_DO-WHILE循环语句的翻译程序设计(LR方法、四元式表示)

资源截图

代码片段和文件信息

#include
#include
#include 
#include
using namespace std;
string name;    //用来输入文件名用
string fh[30];
string kong=“ “;
int num;
//int start;      //用在输出输入串时确定开始的位置

//------------------------------------------------------
struct State//定义状态栈
{
  int top;
  int m[100];
};
void InitState(State &s)//建立状态栈
{

 s.top=0;
}
int PushState(State &sint i)//把元素压入栈
{
  
  if(s.top==100) return -1;
   else 
   {    
      s.m[s.top]=i;
  s.top++;
   }
   return 0;
}
int GetStateTop(State &s)   //取栈顶符号
{
   int i;
   if(s.top==0) return -1;
   else 
   {
   int n=s.top-1;
      i=s.m[n];
   }
   return i;
}
void PopStateTop(State &s)//删除栈顶元素
{
  if(s.top==0) cout<<“wrong1“;
   else 
   --s.top;
   
}
//-----------------------------------------------------------------
//定义一个用于四元式输出的栈
struct sys
{
int top;
string s[5];
};

//-----------------------------------------------------------------
//
struct Sign//定义符号栈
{
  int top;
  string st[100];
};
void InitSign(Sign &s)//建立符号栈
{

 s.top=0;
}
int PushSign(Sign &sstring str)//把元素压入栈
{
  
  if(s.top==100) return -1;
   else 
   {    
      s.st[s.top]=str;
  s.top++;
   }
   return 0;
}
string GetSignTop(Sign &s)   //取栈顶符号
{
  string str;
  if(s.top==0) cout<<“wrong“;
   else 
   {
  int n=s.top-1;
      str=s.st[n];
   }
   return str;
}
void PopSignTop(Sign &s)//删除栈顶元素
{
  if(s.top==0) cout<<“wrong1“;
   else 
   --s.top;
   
}

//----------------------------------------------------------


//词法分析部分
const string baoliuzi[]=
{
“int““double““float““void““long““for““if““else““while““include“
“return““break““continue““do““true““false““case““switch“
};
void show(string &s)
{
    fh[num]=s;
    ++num;
    ofstream fout(“词法分析.txt“ios::out|ios::app);
if(isdigit(s[0]))
{
fout<<“<“<“< s=““;
}
else
for(int i=0;i<18;++i)

if(s==baoliuzi[i])
{
                fout<<“<“<“< break;
}
if(i==17)
{
         if(ispunct(s[0])&&s[0]!=‘_‘)
{
         fout<<“<“<“< }
else
{
fout<<““< }
}
}
s=““;
}
bool isjxf(char ch)     //判断是否为界限符
{
bool tag=0;
string s=“{[()]};\‘\““;
for(int i=0;i {
if(ch==s[i])
{
tag=1;
break;
}
}
return tag;
}

bool isblank(char ch)   //判断是否为空
{
bool tag=0;
if(ch==‘ ‘)
tag=1;
return tag;
}

bool isdian(char ch)    //判断是否为小数点
{
bool tag=0;
if(‘.‘==ch)
tag=1;
return tag;
}
void fenxi(string s)
{
string yunsfbiaosf;
for(int i=0;i {
if(isblank(s[i]))
{
            if(biaosf!=““)
    show(biaosf);
}
else if(ispunct(s[i]))
{
      if(isjxf(s[i]))
  {
           if(yunsf!=““)
 show(yunsf);
 if(biaosf!=““)
 show(biaosf);
     

评论

共有 条评论