⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 execute.h

📁 编译原理实验:设计并实现一个Simple语言的编译器
💻 H
字号:
/************************************************************************/
/* 文件名:execute.h													*/
/* 功  能:四元式解释器					                                */
/* 创建时间:2007-7-1													*/
/* 最后修改时间:2007-7-5				                                */
/************************************************************************/
#ifndef EXECUTE_H_EXECUTE_H
#define EXECUTE_H_EXECUTE_H
#include <iostream>
#include <fstream>
#include <string>
#include <string.h>
#include <ctype.h>
#include <stdio.h>
#include "lexer.h"
#include "parser.h"
using namespace std;

int cutequen=0;
//--------------------取得四元式------------------------//
struct fourth getcode(int tab)
{

	if(tab>=0&&tab<codetab)
      return code[tab];
    else if(tab>=300&&tab<procecode)
	  return code[tab];
}

//------------------解释四元式的函数---------------------//
void interpreter(struct fourth code)
{
   if(code.op==5)
	   cout<<"开始解释执行四元式......"<<endl;
   else if(code.op==0)
	   signtable[code.result].val=signtable[code.ag1].val+signtable[code.ag2].val;
   else if(code.op==1)
	   signtable[code.result].val=signtable[code.ag1].val-signtable[code.ag2].val;
   else if(code.op==2)
	   signtable[code.result].val=signtable[code.ag1].val*signtable[code.ag2].val;
   else if(code.op==3)
	   signtable[code.result].val=signtable[code.ag1].val/signtable[code.ag2].val;
   else if(code.op==4)
	   signtable[code.result].val=signtable[code.ag1].val;
   else if(code.op==10)
	   cout<<"\n输出:"<<signtable[code.ag1].val<<endl;
   else if(code.op==6)
   {
	   if(code.result!=-1)
	     cutequen=code.result-1;
   }
   else if(code.op==7)
   {   
	    if(signtable[code.ag1].val>signtable[code.ag2].val)
		  cutequen=code.result-1;
		
   }
   else if(code.op==8)
   {
	    if(signtable[code.ag1].val!=signtable[code.ag2].val)
	          cutequen=code.result-1;
   }
   else if(code.op==9)
   {
	    if(signtable[code.ag1].val<signtable[code.ag2].val)
	          cutequen=code.result-1;
   }
   else if(code.op==12)
   {
	    if(signtable[code.ag1].val>=signtable[code.ag2].val)
	          cutequen=code.result-1;
   }
   else if(code.op==13)
   {
	    if(signtable[code.ag1].val<=signtable[code.ag2].val)
	          cutequen=code.result-1;
   }
   else if(code.op==14)
   {
	   if(signtable[code.ag1].val=signtable[code.ag2].val)
	       cutequen=code.result-1;
   }
   else if(code.op==11)
	   cout<<"----------四元式解释完成----------"<<endl;
}

//------------------------解释执行--------------------//
void  execute()
{
    while(cutequen<procecode && cutequen!=codetab)
	{
	    interpreter(getcode(cutequen));
        cutequen++;
	}
}
#endif

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -