亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? expression.cpp

?? 按遞歸下降方式設計其編譯程序
?? CPP
字號:
#include <iostream.h>
#include <stdio.h>
#include <stdlib.h>
#include <fstream.h>
#include <string.h>
//packet java.lang.Object;
//#include <Afx.h> 
//#include <afx.h>
//#include <CString.h>
//#include <afxwin.h>         // MFC core and standard components
//#include <afxext.h>         // MFC extensions
//#include <afxdisp.h>        // MFC Automation classes
//#include <afxdtctl.h>		// MFC support for Internet Explorer 4 Common Controls
//#ifndef _AFX_NO_AFXCMN_SUPPORT
//#include <afxcmn.h>	
#define cxmax 200
#define nmax 10000
#define kk 4
int timesoffetch;
enum stackop{lit,opr,sto,lod,jmp,INT};
class Table
{
public:
	char name;
	int value;
	int adr;
	Table(){adr=0;value=0;}
};
class Code
{
public :
	enum stackop fct;
	int l;
	int a;
};
enum operator1{ident,number,Lparn,Rparn,plus,minus,times,slash,becomes};
char id;
char ch;
char a[5];
Table table[60];
Code code[200];
int tx;
int cx;
int dx;
int i;
int num;
int line;
bool compliane_pass=true;
enum operator1 sym;
int t=0;
		int p=0;
		int s[30];
		
class LineOfExpression
{
public :
	int  position(char id);
	void block();
	void expression();
	void factor();
	void term();
	void getch1(char &ch);
	void getsym();
	void enter(char id);
	void gen(enum stackop d1,int l,int a);
	bool ch_ina_z(char ch);
	void error(int n);
	void interpret();
	void listcode();
	bool ch_in_a_z_9(char ch);
	bool ch_in_0_9(char ch);
	int position_with_cx(int cx0);
	int test_term();
	int test_factor();
	int test_expression();
};
fstream file("Expression.txt",ios::in|ios::out);

/////////////////////////////////////////////////////////////////////////////////////////////
    int  LineOfExpression::position(char id)
	{
	
		table[0].name=id;
		int i=tx;
		while(table[i].name!=id)
			i=i-1;
		return i;
	}
	//end of position
/////////////////////////////////////////////////////////////////////////////////////////////

	void LineOfExpression::block()
	{
		dx=3;
		int cx1=cx;
		gen(jmp,0,0);
         int cx2=cx;
		gen(INT,0,tx);
		getsym();
		this->expression();
		     	code[cx1].a=1;
			code[cx2].a=tx;//返回后回填分配空間
         
	}
	//end of block
/////////////////////////////////////////////////////////////////////////////////////////////
	void LineOfExpression::expression()
	{
		if(!this->test_expression())
		{
			error(0);
		}
		enum operator1 addop;
		if(sym==plus||sym==minus)
		{
			addop=sym;
			getsym();
			term();
		
			if(addop==minus)
			{
				gen(opr,0,1);
			
			//cout<<"s[t]="<<s[t]<<endl;
			}
		
	        else 
				term();
		}	
	if(sym!=plus&&sym!=minus)
			term();
	
		while(sym==plus||sym==minus)
		{
			addop=sym;
			getsym();
			term();
			if(addop==plus)
			{
				gen(opr,0,2);				
			}
			if(addop==minus)
			{
				gen(opr,0,3);
			}
		}
		
	}
	//end of expression
/////////////////////////////////////////////////////////////////////////////////////////////
	void LineOfExpression::term()
	{
	   
		enum operator1 mulop;
		factor();		
		while(sym==times||sym==slash)
		{
			mulop=sym;
			getsym();
			if(ch==EOF)
			{
				error(4);//4號錯誤,乘號后面無數字
			   exit(1);
			}
			factor();
			if(mulop==times)
			{    
				gen(opr,0,4);
			}
			else if(mulop==slash)
				gen(opr,0,5);
			

		}

	}
	//end of term	
/////////////////////////////////////////////////////////////////////////////////////////////
   void LineOfExpression::factor()
	{
	
		
		int ii=0;
		char id0;
		
		 if(sym==ident)
		{
			 
			 
			ii=position(a[0]);
			if(ii==0)
			{
			
				error(3);//3號錯誤,變量表中不存在應用的變量
				//getsym();
				//factor();
				//exit(1);
			}
			else
			{
				gen(lod,1,table[ii].adr);
				getsym();
			}
		
		}
		else if(sym==Lparn)
		{   
			getsym();
			if(sym==number)
			{
				expression();
				if(sym==Rparn)
					getsym();
			}
			else if(sym==ident)
			{
				id0=a[0];
				getsym();
				if(sym==becomes)
				{
					enter(id0);
					getsym();
					expression();
					if(sym==Rparn)
					{
					ii=position(id0);
						getsym();
					gen(sto,1,table[ii].adr);
					}
				else
					
				{
					//getsym();
					//factor();
					error(2); //2 號錯誤,括號后面字符非法
					
				}
				}
			}
			
		}
	else if(sym==number)
		{
		
			gen(lit,0,num);
			getsym();
		
	
		}
	else if(ch!=EOF)

	error(1); 
	else
		;//1 號錯誤,表示不是因子的處理范圍
 //只有返回0時才是正確的
	}
	//end of factor
/////////////////////////////////////////////////////////////////////////////////////////////
	void LineOfExpression::getch1(char &ch)
	{
	
	
       while(true)
	   {
             file.seekg(i,ios::beg);
		     file.get(ch);
			   i++;
		   if(ch==' '||ch==32||ch=='\0')
		   {
			   continue;
		   }
		   else 
		   {
			  break;
		   }
		   if(ch==EOF)
		   {
			   
			  file.close();
			 // ch=';';
		   }
	   }
	   
	}
	//end of getch1
/////////////////////////////////////////////////////////////////////////////////////////////
	void LineOfExpression::getsym()
	{
		int k=0;
		getch1(ch);
		
		 if(ch=='=')
		 {	sym=becomes;}
		else if(ch=='(')
		{	sym=Lparn;}
		else if(ch==')')
		{	sym=Rparn;}
		else if(ch=='+')
		{	sym=plus;}
		else if(ch=='-')
		{	sym=minus;}
		else if(ch=='*')
		{sym=times;}
		else if(ch=='/')
			sym=slash;
	    else if(this->ch_ina_z(ch))//what you fetch is letter
		{
			while(true)
			{
				a[k++]=ch;
				getch1(ch);
				if(ch==';')
				exit(0);
				if(!this->ch_in_a_z_9(ch))
				{
					i=i-1;
					break;
				}
			}
			if(k>=kk)
			{
				k=kk;
				a[k]='\0';
				
			}
			else
				for(int j=k;j<kk;j++)
					a[j]='\0';
				sym=ident;
				return;
		}
		else if(ch_in_0_9(ch))
		{
		   num=0;
		   
			int counter_num=0;
			while(true)
			{
				num=10*num+(ch-'0');
				counter_num++;
				getch1(ch);
				sym=number;
				if(!ch_in_0_9(ch))
				{
					i=i-1;
					break;
				}
			}
			
			if(counter_num>nmax)
			{
				error(1);//數長超過了上限
			}
		
			
		}
		else if(ch==EOF)
		{;}
		else
		{
			cout<<"error:illegal input of::"<<ch<<ch<<endl;
		
		}

			
	}
	//end of getsym
/////////////////////////////////////////////////////////////////////////////////////////////
	void LineOfExpression::enter(char id)
	{
		tx=tx+1;
		table[tx].name=id;
		table[tx].adr=dx;
		dx=dx+1;
	}
	//end of enter
/////////////////////////////////////////////////////////////////////////////////////////////
	void LineOfExpression::gen(enum stackop d1,int l,int a)
	{
		if(cx>cxmax)
		{
			error(2);
			exit(0);
		}

		code[cx].fct=d1;
		
		code[cx].l=l;
	//	if(l==1)
	//	code[cx].a=a+20;
	//	else
			code[cx].a=a;
		cx=cx+1;
	}
	//end of gen
/////////////////////////////////////////////////////////////////////////////////////////////
	bool LineOfExpression::ch_ina_z(char ch)
	{
		for(int m=0;m<26;m++)
		{
			if(ch=='a'+m)
				return true;
		
		}
		return false;
	}
	//end of ch_ina_z
/////////////////////////////////////////////////////////////////////////////////////////////
	void LineOfExpression::error(int n)
	{   compliane_pass=false;
		switch (n)
		{
		case 0:
			cout<<"Input: ' "<<ch<<" ' at the '"<<i<<"'th letter is not a member of an expression!"<<endl;
			break;
		case 1:
			cout<<"Input:  ' "<<ch<<" ' at the  '"<<i<<" 'is not a member of an term!"<<endl;
			break;
		case 2:
			cout<<" '("<<a[0]<<"'at the "<<i<<"'th is illegal"<<endl;
			break;
		case 3:
			cout<<"Not exist of:  '"<<a[0]<<"'   variable!"<<endl;
			break;
	    case 4:
			cout<<"  Unexcept end of expression!"<<endl;
			break;
		case 5:
			break;
		};
	}
/////////////////////////////////////////////////////////////////////////////////////////////
	void LineOfExpression::interpret()
	{
		cout<<endl<<endl<<"------------------start pl/0--------------------------------      "<<endl;
		int end_cx=0;
	
		for(int m=1;m<=3;m++)
			s[m]=0;
		t=3;
		int addr=0;
		while(end_cx<cx)
		{
			switch(code[p].fct)
			{
			case lit:
				t=t+1;
				s[t]=code[p].a;
				cout<<"t="<<t<<" s[t]="<<s[t]<<"                  lit"<<endl;
				break;
			case opr:
				switch(code[p].a)
				{
				case 0:
					t=0;
					p=s[t+3];
					break;
				case 1:
					s[t]=-s[t];
					cout<<"t="<<t<<"      s[t]="<<s[t]<<"        s[t-1]="<<s[t-1]<<"取負"<<endl;
					
					break;
				case 2:
					cout<<"t="<<t<<"      s[t]="<<s[t]<<"        s[t-1]="<<s[t-1]<<"加"<<endl;
					
					s[t-1]=s[t-1]+s[t];
                     t=t-1;
					break;
				case 3:
					cout<<"t="<<t<<"      s[t]="<<s[t]<<"        s[t-1]="<<s[t-1]<<"減"<<endl;
					
					s[t-1]=s[t-1]-s[t];
					t=t-1;
					break;
				case 4:
					cout<<"t="<<t<<"      s[t]="<<s[t]<<"        s[t-1]="<<s[t-1]<<"乘"<<endl;
				
					s[t-1]=s[t-1]*s[t];
					t=t-1;
					break;
 			case 5:
				cout<<"t="<<t<<"      s[t]="<<s[t]<<"        s[t-1]="<<s[t-1]<<"除"<<endl;
				
					s[t-1]=s[t-1]/s[t];
					t=t-1;
					break;
			
				};
				break;
				case lod:
					
					t=t+1;
					s[t]=s[code[p].a];
					cout<<"t="<<t<<"      s[t]="<<s[t]<<"        s[t-1]="<<s[t-1]<<" lod"<<endl;
					break;
				case sto:
					s[code[p].a]=s[t];
					//t=t-1;	
					break;
				case jmp:
					p=code[p].a;
					continue;
					//break;
				case INT:
					t=t+code[p].a;
					
					break;
			};
			p=p+1;
			end_cx++;	
			
		}                

	 
	}
/////////////////////////////////////////////////////////////////////////////////////////////
	void LineOfExpression::listcode()
	{
	fstream file;
	file.open("result.txt",ios::in|ios::out);
	line=1;
		for(int m=0;m<cx;m++)
		{
			
			switch(code[m].fct)
			{
			case opr:cout<<line++<<"  :opr"<<"---"<<code[m].l<<"---"<<code[m].a<<endl;
				file.write("opr",4);
				break;
			case lit:cout<<line++<<"  :lit"<<"---"<<code[m].l<<"---"<<code[m].a<<endl;
				file.write("lit",4);
				break;
			case lod:cout<<line++<<"  :lod"<<"---"<<code[m].l<<"---"<<code[m].a<<endl;
				file.write("lod",4);
				break;
			case sto:cout<<line++<<"  :sto"<<"---"<<code[m].l<<"---"<<code[m].a<<endl;
				file.write("sto",4);
				break;
			case jmp:cout<<line++<<"  :jmp"<<"---"<<code[m].l<<"---"<<code[m].a<<endl;
				file.write("jmp",4);
				break;
			case INT:cout<<line++<<"  :INT"<<"---"<<code[m].l<<"---"<<code[m].a<<endl;

			};
		}
		file.close();
		for( m=1;m<tx+1;m++)
				cout<<table[m].name<<"*******"<<table[m].value<<"*****"<<table[m].adr<<endl;
	}
/////////////////////////////////////////////////////////////////////////////////////////////
	bool LineOfExpression::ch_in_a_z_9(char ch)
	{
		for(int m=0;m<10;m++)
		{
			if(ch=='0'+m)
				return true;
		}
		return (ch_ina_z(ch));
	}
	//end of ch_ina_z_9
/////////////////////////////////////////////////////////////////////////////////////////////
	bool LineOfExpression::ch_in_0_9(char ch)
	{
		for(int m=0;m<10;m++)
		{
			if(ch==('0'+m))
			{
			return true;
			}
		}
		return false;
	}
	//end of ch_in_0_9
////////////////////////////////////////////////////////////////////////////////////////////
	int LineOfExpression::position_with_cx(int cx1)
	{int m;
		for(m=1;m<tx;m++)
			
		{
			if(cx1==table[m].value)
				break;
		}
			return m;
	}//end of position_with_cx
////////////////////////////////////////////////////////////////////////////////////////////////
	int LineOfExpression::test_term()
	{

		return 0;
	}//end of test_term
///////////////////////////////////////////////////////////////////////////////////////////
	int LineOfExpression::test_expression()
	{
      if(sym==slash||sym==times)
		  return 0;
	  return 1;
	}//end of test_expression
////////////////////////////////////////////////////////////////////////////////////////////////
	int LineOfExpression::test_factor()
	{
     return 0;
	}//end of test_factor
///////////////////////////////////////////////////////////////////////////////////////////////
	class toString
	{
	public :
		char cha[6];
		toString()  {    }
	  int getLength(char *str)
	  {
		  for(int m=0;;m++)
		  {
			  if(str[m]==' '||str[m]=='\0'||str[m]==32)
				  break;
			  
		  }
		  return m;
	  }
	  void change_int_char(int value)
	  {    int i=10000;
	        int v;
			int w=0;
			int block=0;
		  while(true)
		  { 
			  if(i==0)
			     break;
            if(v==0&&block==0)
			{
				
				;
			}
			else
			{   
				block=1;
				cha[w++]=v+'0';
			
			}
				i/=10;
				v=value/i;
		  }
		  cha[w]=' ';
		  cout<<"cha____str======"<<cha<<endl;
	  }


	};
	void main()
	{	
	
	    int op=1;
		int return_block;
		while(op)
		{
				LineOfExpression exp;
cout<<"編譯(1)--中間代碼(2)--解釋執行(3)--運行結果(4)--退出(5)"<<endl;
         cin>>op;
        switch(op)
		{
		case 1: exp.block();break;
		case 2: exp.listcode();break;
		case 3:
			if(::compliane_pass)
				exp.interpret();
			else
				cout<<"not pass compliane yet!"<<endl;
			break;
		case 4:cout<<"result=大"<<s[t-1]<<endl;break;
		case 5:op=0;break;
		};
	
	   
	
		
	//	
		}
	//fstream file1;
		//file1.open("Expr.txt",ios::in|ios::out);
	//	CString str="kkkkkkk";

	//	str.Format("結果=%s[t]",s[t]);
       // file1.write(str,str.GetLength());
        //file1.close();
	 /*	toString obj;
	 obj.change_int_char(s[t]);
	 char str[6];
	 for(int l=0;l<6;l++)
		 str[l]=obj.cha[l];
	 cout<<str<<"5555555555"<<endl;
	
	 ;*/
		
	}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
日本一区二区综合亚洲| 欧美日本不卡视频| 国产精品沙发午睡系列990531| 激情综合色丁香一区二区| 精品国产亚洲一区二区三区在线观看| 男男gaygay亚洲| 精品999在线播放| 国产成人午夜视频| 国产精品成人一区二区艾草| 色一区在线观看| 日日夜夜精品免费视频| 91精品国产免费| 国产成人综合亚洲91猫咪| 亚洲色图视频网| 91精品午夜视频| 成人免费观看视频| 亚洲一区二区中文在线| 精品久久久久久最新网址| 国产精品综合二区| 亚洲一区免费观看| 久久久久久一二三区| 色天天综合色天天久久| 九色|91porny| 亚洲综合色区另类av| 精品国一区二区三区| 色综合天天综合网天天狠天天| 午夜精品视频一区| 欧美极品xxx| 这里只有精品免费| 99国产精品一区| 青青草精品视频| 亚洲日本一区二区三区| 日韩情涩欧美日韩视频| 色悠久久久久综合欧美99| 经典三级视频一区| 五月天精品一区二区三区| 久久精品日韩一区二区三区| 欧美三级资源在线| 福利视频网站一区二区三区| 丝袜亚洲另类欧美| 亚洲欧洲综合另类| 国产亚洲欧美激情| 日韩精品中文字幕在线一区| 色婷婷av一区| 波多野结衣中文一区| 日本在线不卡视频一二三区| 亚洲欧洲av在线| 久久久久亚洲蜜桃| 日韩一区二区电影网| 在线免费视频一区二区| 成人自拍视频在线| 国产尤物一区二区| 免费看黄色91| 日韩黄色免费电影| 亚洲国产欧美一区二区三区丁香婷| 国产欧美一区二区在线观看| 日韩欧美亚洲国产另类| 欧美日韩精品电影| 欧美在线三级电影| 91亚洲精品久久久蜜桃网站| 成人午夜av影视| 国产精品一区二区三区乱码| 日韩av电影免费观看高清完整版 | 日韩一区二区三区视频| 欧美在线观看视频一区二区 | 国产精品综合网| 另类中文字幕网| 日本欧美大码aⅴ在线播放| 婷婷综合久久一区二区三区| 亚洲一区二区三区中文字幕| 亚洲激情第一区| 一区二区三区四区在线播放| 亚洲天堂精品视频| 亚洲精品美国一| 伊人一区二区三区| 一区二区三区高清在线| 一二三区精品视频| 亚洲成人免费看| 五月婷婷激情综合网| 日韩精品亚洲一区二区三区免费| 亚洲成人7777| 蜜桃视频在线观看一区| 免费观看一级欧美片| 九色综合国产一区二区三区| 国内精品久久久久影院一蜜桃| 国产乱对白刺激视频不卡| 成人综合婷婷国产精品久久蜜臀 | 日韩专区一卡二卡| 日韩影院精彩在线| 麻豆一区二区三| 国产一区二区不卡| 成人在线综合网| 91女人视频在线观看| 91国产免费看| 欧美日韩夫妻久久| 精品毛片乱码1区2区3区| 国产亚洲污的网站| 亚洲欧美视频在线观看视频| 亚洲一卡二卡三卡四卡五卡| 日韩黄色免费网站| 国产成a人无v码亚洲福利| www.亚洲色图| 欧美日韩在线播放一区| 欧美成人一区二区三区| 国产精品美女久久久久久久网站| 亚洲图片激情小说| 日韩av高清在线观看| 懂色av一区二区在线播放| 欧美综合在线视频| 欧美精品一区视频| 亚洲欧美福利一区二区| 日本 国产 欧美色综合| av在线不卡免费看| 欧美丰满嫩嫩电影| 日本一区二区在线不卡| 亚洲成人资源在线| 国产suv精品一区二区三区| 欧美日韩在线不卡| 国产亚洲婷婷免费| 首页国产丝袜综合| 成人免费毛片片v| 91精品国产综合久久久久久漫画| 国产欧美精品日韩区二区麻豆天美| 亚洲国产成人精品视频| 成人免费黄色在线| 日韩欧美在线网站| 亚洲黄色免费电影| 国产v日产∨综合v精品视频| 91精品国产综合久久香蕉麻豆| 亚洲欧洲韩国日本视频| 精久久久久久久久久久| 欧美日韩精品一区视频| 亚洲三级在线免费| 国产精品77777| 日韩一卡二卡三卡国产欧美| 亚洲精品自拍动漫在线| 国产69精品久久777的优势| 欧美电影在线免费观看| 亚洲女爱视频在线| 成人综合在线观看| 久久久亚洲高清| 久久99精品久久久久久| 欧美日韩精品专区| 亚洲综合视频在线观看| 91蜜桃免费观看视频| 中文字幕av不卡| 国产精品一区二区久久不卡 | 中文字幕在线观看一区二区| 美女视频黄a大片欧美| 欧美三级电影在线看| 亚洲女同女同女同女同女同69| 丰满少妇久久久久久久| 久久一二三国产| 韩国理伦片一区二区三区在线播放| 欧美精品高清视频| 午夜激情一区二区三区| 欧美在线综合视频| 亚洲激情图片qvod| 在线日韩一区二区| 亚洲图片欧美视频| 在线视频国内一区二区| 亚洲综合在线电影| 欧洲精品视频在线观看| 亚洲一区二区在线视频| 欧美日本乱大交xxxxx| 亚洲成人综合在线| 欧美肥妇毛茸茸| 蜜臀av性久久久久av蜜臀妖精 | 欧美色倩网站大全免费| 亚洲国产成人va在线观看天堂| 欧美体内she精高潮| 亚洲国产一区二区三区 | 日韩免费成人网| 蜜臀99久久精品久久久久久软件| 日韩欧美综合一区| 国产一区视频在线看| 国产女人18毛片水真多成人如厕| 国产91丝袜在线观看| 国产精品传媒视频| 欧美亚洲图片小说| 亚洲成人av福利| 欧美成人r级一区二区三区| 久久99久久99小草精品免视看| 久久综合99re88久久爱| 国产成人精品一区二| 日韩毛片在线免费观看| 欧美情侣在线播放| 蜜臀av性久久久久蜜臀aⅴ| 久久精品在这里| 一本一本大道香蕉久在线精品 | 蜜臀av性久久久久蜜臀av麻豆| 精品国产凹凸成av人网站| 国产91精品一区二区麻豆亚洲| **网站欧美大片在线观看| 欧美日韩国产一级| 国产成人福利片| 亚洲v中文字幕| 久久亚洲精华国产精华液| 91国产福利在线| 国内精品伊人久久久久av影院|