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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? pl0 in c.c

?? PL/0教學(xué)語言的編譯程序原代碼。
?? C
?? 第 1 頁 / 共 2 頁
字號:
/*-------------pl/0 program in c----------  */
/*-------------only for reading.----------------------------------*/

//#include <iostream.h>
//#include <stdlib.h>
#include <stdio.h>
#include <string.h>
//#include "stdich.c"
/*  #include <string.h> */
/*-------------------------define constant------------------------*/

# define   norw       16
# define   txmax      100
# define   al         10
# define   nmax       14
# define   amax       2047
# define   levmax     3
# define   cxmax      200
# define   stacksize  500

/*-----------------------type define-----------------------------*/

typedef char alfa[10];
typedef struct { int level, adr, size, val, foot;
                     alfa name, kind;          } tbl;
typedef struct { char f[5];
                     int l,a;                    } instruction;
typedef struct { alfa sy[30];           } symset;

/*------------------------------variable declaration------------------------*/

int ll,cc,listswitch,err,ch,num,kk,cx,line[81],s[stacksize];
alfa id,sym,a,fname;
instruction code[cxmax+1];
tbl table[txmax+1];
FILE *finf;
alfa word[norw+1]={"0","begin","call","const","do","else","end",
                               "if","odd","procedure","read","repeat","then",       
                               "until","var","while","write"};
alfa wsym[norw+1]={"0","beginsym","callsym","constsym", 
                            "dosym","elsesym","endsym","ifsym","oddsym", 
                           "procsym","readsym","repeatsym","thensym","untilsym","varsym", 
                          "whilesym","writesym"};
alfa ssym[52]={"period","lss","lparen","plus","4","5","6","7","8",
                      "9","10","11","12","13","14","15","16","times","rparen",
                      "semicolon","20","minus","slash","23","24","25","26",
                      "27","28","29","30","31","comma","33","34","35","36", 
                      "37","38","39","40","41","42","43","44","45","46", 
                      "colon","neq","49","50","eql"};
symset declbegsys={"constsym","varsym","procsym","*"};
symset statbegsys={"beginsym","callsym","ifsym","repeatsym","whilesym","*"};
symset facbegsys={"ident","number","lparen","*"};
symset fsysa={"period","constsym","varsym","procsym", 
              "beginsym","callsym","ifsym","whilesym","repeat","*"};




/*-----------------------------main( )-----------------------------------*/
void main()
{
   printf("input file ?");
   scanf("%s", fname);
   printf("%s\n", fname);
   finf=fopen(fname,"r");
   //printf(fopen(fname, "r"));
   printf("list code ? ");
   scanf("%s", fname);
   printf("%s\n", fname);
   if (fname[0]=='y')
        listswitch=1;
   else
        listswitch=0;
   err=cc=ll=cx=0;
   kk=10;
   ch=' ';
   getsym( );
   block(0,0,fsysa);
   if (strcmp(sym,"period"))
       error(9);
   if (err==0)
       interpret( );
   else
       printf("error in pl/0 program !\n");
}




/*------------------------------block (lev, tx, fsys)-----------------------------*/

block(lev,tx,fsys)
symset fsys;
int lev,tx;
{
	int tx0,tx1,cx0,dx;
	symset fsys1;
	dx=3;
	tx0=tx;
	table[tx].adr=cx;
	gen("jmp",0,0);
	if (lev>levmax)
		 error(32);
	do
	{
		if (strcmp(sym,"constsym")==0)
		{
			getsym( );
			do
			{
				constdeclaration(&dx,&tx,lev);
				while (strcmp(sym,"comma")==0)
				{
					getsym( );
					constdeclaration(&dx,&tx,lev);
				}
				if (strcmp(sym,"semicolon")==0)
					getsym( );
				else
					error(5);
			} while (strcmp(sym,"ident")==0);
		}
		if (strcmp(sym,"varsym")==0)
		{
			getsym(  );
			do
			{
				vardeclaration(&dx,&tx,lev);
			
				while (strcmp(sym,"comma")==0)
				{
					getsym();
					vardeclaration(&dx,&tx,lev);
				}
		      
				if (strcmp(sym,"semicolon")==0)
					getsym( );
				else
					error(5);
			}  while (strcmp(sym,"ident")==0);
		}
		while (strcmp(sym,"procsym")==0)
		{
			getsym();
			if (strcmp(sym,"ident")==0)
			{
				enter("procedure",&dx,&tx,lev);
				getsym( );
			}
			
		
			else
				error(4);
			if (strcmp(sym,"semicolon")==0)
				getsym( );
			else
				error(5);
			insert("semicolon",fsys,&fsys1);
			block(lev+1,tx,fsys1);
			if (strcmp(sym,"semicolon")==0)
			{
				getsym( );
				insert("ident",statbegsys,&fsys1);
				insert("procsym",fsys1,&fsys1);
				test(fsys,fsys1,6);
			}
			else
				error(5);
		}
		insert("ident",statbegsys,&fsys1);	
		test(fsys1,declbegsys,7);
	} while (in(sym,declbegsys));
	code[table[tx0].adr].a=cx;
	table[tx0].adr=cx;
	table[tx0].size=dx;
	cx0=cx;
	gen("int",0,dx);
	insert("semicolon",fsys,&fsys1);
	insert("endsym",fsys1,&fsys1);
	statement(fsys1,tx,lev);
	gen("opr",0,0);
	test(fsys,fsys,8);
	listcode(cx0); 
}



/*-----------------------------------statement (fsys, tx, lev)---------------------*/
statement(fsys,tx,lev)
symset fsys;
int tx,lev;
{
     symset fsys1;
     int i,cx1,cx2;
     if (strcmp(sym,"ident ")==0)
	 {
		 i=position(id,tx); 
		 if (i==0)
			 error(11);
		 else
			if (strcmp(table[i].kind,"variable")!=0)
			{
				error(12);
				i=0;
			}
		 //i=ifarr(fsys,tx,lev,i);  //add
		 getsym( );
		 if (strcmp(sym,"becomes")==0)
		   getsym( );
		 else
		   error(13);
		expression(fsys,tx,lev);
		if (i!=0)
			 gen("sto",lev-table[i].level,table[i].adr);
	}
	else
	if (strcmp(sym,"readsym")==0)
	{
		getsym( );
		if (strcmp(sym,"lparen")!=0)
			error(34);
		else
		do
		{
			getsym ( );
			//if (strcmp (sym, "lparen")== 0)
			//	error (34);
			if (strcmp(sym,"ident")==0)
				i=position(id,tx);
			else
				i=0;
			if (i==0)
				error(35);
			else
			{
				//i=ifarr(fsys,tx,lev,i);  //add
				gen("opr",0,16);
				gen("sto",lev-table[i].level,table[i].adr);
			}
			getsym( );
		} while (strcmp(sym,"comma")==0);
		if (strcmp(sym,"rparen")!=0)
		{
			error(33);
			while (in(sym,fsys)==0)
               			getsym( );
		}
		else
			getsym();
	}
	else
	if (strcmp(sym,"writesym")==0)
	{
		getsym();
		if (strcmp(sym,"lparen")==0)
		{
			do
			{
				getsym( );
				insert("rparen",fsys,&fsys1);
				insert("comma",fsys1,&fsys1);
				expression(fsys1,tx,lev);
				gen("opr",0,14);
			} while (strcmp(sym,"comma")==0);
			if (strcmp(sym,"rparen")!=0)
				error(33);
			else
				getsym( );
		}
		gen("opr",0,15);
	}
	else
	if (strcmp(sym,"callsym")==0)
	{
		getsym( );
		if (strcmp(sym,"ident")!=0)
			 error(14);
		else
		{
			i=position(id, tx);
			if  (i==0)
			  error(11);
			else
			if (strcmp(table[i].kind,"procedure"))
               error(15);
			else
               gen("cal",lev-table[i].level,table[i].adr);
			getsym( );
		}
	}
	else
	if (strcmp(sym,"ifsym")==0)
	{
		getsym( );
		insert("thensym",fsys,&fsys1);
		condition(fsys1,tx,lev);
		if (strcmp(sym,"thensym")==0)
			getsym( );
		else
			error(16);
		cx1=cx;
		gen("jpc",0,0);
		//insert("elsesym",fsys,&fsys1);//add
		statement(fsys,tx,lev);
		//if (strcmp(sym,"elsesym")!=0)//add
			code[cx1].a=cx;
		
		/*else                                //
		{//
			cx2=cx;//
			gen("jmp",0,0);//
			code[cx1].a=cx;//
			getsym();//
			statement(fsys,tx,lev);//
			code[cx2].a=cx;//
		}//*/
	}
	else
	if (strcmp(sym,"beginsym")==0)
	{
		getsym( );
	    insert("semicolon",fsys,&fsys1);
		insert("endsym",fsys1,&fsys1);
		statement(fsys1,tx,lev);
		while (in(sym,statbegsys) || (strcmp(sym,"semicolon")==0)) 
		{
			if (strcmp(sym,"semicolon")==0)
				getsym( );
			else
				error(10);
			statement(fsys1,tx,lev);
		}
		if (strcmp(sym,"endsym")==0)
			getsym( );
		else
			error(17);
	}
	else
	if (strcmp(sym,"whilesym")==0)
	{
		cx1=cx;
		getsym( );
		insert("dosym",fsys,&fsys1);
		condition(fsys1,tx,lev);
		cx2=cx;
		gen("jpc",0,0);
		if (strcmp(sym,"dosym")==0)
			getsym( );
		else
			error(18);
		statement(fsys,tx,lev);
		gen("jmp",0,cx1);  /* has been changed */
		code[cx2].a=cx;
	}
	//add begin
	/*else
    if (strcmp(sym,"repeatsym")==0)
	{
		getsym();
		cx1=cx;
		insert("semicolon",fsys,&fsys1);
		insert("untilsym",fsys1,&fsys1);
		statement(fsys1,tx,lev);
		while (in(sym,statbegsys)||(strcmp(sym,"semicolon")==0))
		{
			if (strcmp(sym,"semicolon")==0)
				getsym();
			else
				error(60);
			statement(fsys1,tx,lev);
		}
		if (strcmp(sym,"untilsym")==0)
			getsym();
		else
			error(61);
		insert("semicolon",fsys,&fsys1);
		condition(fsys1,tx,lev);
		gen("jpc",0,cx1);
	}*/

	//add end
	test(fsys,fsys,19);
}




/*----------------------condition (fsys, tx, lev)----------------------*/
condition(fsys,tx,lev)
symset fsys;
int tx,lev;
{
	alfa relop;
	symset fsys1;
	if (strcmp(sym,"oddsym")==0)
	{
		getsym( );
		expression(fsys,tx,lev);
		gen("opr",0,6);
	}
	else
	{
		insert("eql",fsys,&fsys1);
		insert("neq",fsys1,&fsys1);
		insert("lss",fsys1,&fsys1);
		insert("leq",fsys1,&fsys1);
		insert("gtr",fsys1,&fsys1);
		insert("geq",fsys1,&fsys1);
		expression(fsys1,tx,lev);
		if  ((strcmp(sym,"eql")!=0) && (strcmp(sym,"neq")!=0)
			&& (strcmp(sym,"lss")!=0) && (strcmp(sym,"leq")!=0)
			&&(strcmp(sym,"gtr")!=0) && (strcmp(sym,"geq")!=0))
				error(20);
		else
		{
			strcpy(relop,sym);
			getsym( );
			expression(fsys,tx,lev);
			if (strcmp(relop,"eql")==0)  gen("opr",0,8);
			if (strcmp(relop,"neq")==0)  gen("opr",0,9);
			if (strcmp(relop,"lss")==0)  gen("opr",0,10);
			if (strcmp(relop,"leq")==0)  gen("opr",0,11);
			if (strcmp(relop,"gtr")==0)  gen("opr",0,12);
			if (strcmp(relop,"geq")==0)  gen("opr",0,13);
		}
	}
}



/*-------------------expression (fsys, tx, lev)----------------------*/

expression(fsys,tx,lev)
symset fsys;
int tx,lev;
{
	alfa addop;
	symset fsys1;
	insert("plus",fsys,&fsys1);
	insert("minus",fsys1,&fsys1);
	if ((strcmp(sym,"plus")==0) || (strcmp(sym,"minus")==0))
	{
		strcpy(addop,sym);
		getsym( );
		term(fsys1,tx,lev);
		if (strcmp(addop,"minus")==0) 
			gen("opr",0,1);
	}
	else term(fsys1,tx,lev);
	while ((strcmp(sym,"plus")==0) || (strcmp(sym,"minus")==0))
	{
		strcpy(addop,sym);
		getsym( );
		term(fsys1,tx,lev);
		if (strcmp(addop,"plus")==0)
			gen("opr",0,2);
		else
			gen("opr",0,3);
	}
}



/*-----------------term (fsys, tx, lev)-----------------------*/

term(fsys,tx,lev)
symset fsys;
int tx,lev;
{
    alfa mulop;
    symset fsys1;
    insert("times",fsys,&fsys1);
    insert("slash",fsys1,&fsys1);
    factor(fsys1,tx,lev);
    while ((strcmp(sym,"times")==0) || (strcmp(sym,"slash")==0))
    {
       strcpy(mulop,sym);
       getsym( );
       factor(fsys1,tx,lev);
       if (strcmp(mulop,"times")==0)
 		  gen("opr",0,4);
       else gen("opr",0,5);
	}
}




/*------------------factor (fsys, tx, lev)--------------------*/
expression(fsys,tx,lev);
// Int ifarr(fsys,tx,lev,tt);
factor(fsys,tx,lev)
symset fsys;
int tx,lev;
{
   symset fsys1;
   int i;
   test(facbegsys,fsys,24);
   while (in(sym,facbegsys)==1)
   {
      if (strcmp(sym,"ident")==0)
      {
         i=position(id,tx);
         if (i==0)  error(11);
         else
         {
            if (strcmp(table[i].kind,"constant")==0)
                gen("lit",0,table[i].val);
            if (strcmp(table[i].kind,"variable")==0)
			{
				//i=ifarr(fsys,tx,lev,i);  //add
		        gen("lod",lev-table[i].level,table[i].adr);
			}
			if (strcmp(table[i].kind,"procedure")==0)
				error(21);//getsym( );
		 }
		 getsym();//
	  }
      else	if (strcmp(sym,"number")==0)
            {
				if (num>amax)
				{
					error(31);
					num =0;
				}
				gen("lit",0,num);
				getsym( );
            }
            else if (strcmp(sym,"lparen")==0)
				{
					getsym();
					insert("rparen",fsys,&fsys1);
					expression(fsys1,tx,lev);
					if (strcmp(sym,"rparen")==0)
						getsym();
					else error(22);
				}
                /* { if (num>amax)
                    { error (31);
                     num=0;
                    }
                    gen ("lit",0, num);
                    getsym ( );
                 }
                 else  if  (strcmp (sym, "lparen")== 0)
				 {
					 if (num > amax)
							{  error (31);
								num=0;
							}
					 gen ("lit", 0, num);
					 getsym ( );
				 }
                 else if (strcmp (sym, "lparen")== 0)
                          { getsym ();
                              insert ("rparen", fsys, &fsys1);
                              expression (fsys1, tx, lev);
                              if  (strcmp (sym, "rparen")== 0)
                                   getsym( );
                              else  error (22);
                           }*/
     test(fsys,facbegsys,23);
	}
}



/*-------------------vardeclaration (&dx, &tx, lev)---------------------*/

vardeclaration(dx,tx,lev)        //very different with paper
int *dx,*tx,lev;
{
   if (strcmp(sym,"ident")==0)
   {
	   enter("variable",dx,tx,lev);
       getsym();
   }
   else error(4);
}


/* ---------vardeclaration(&dx,&tx,lev)-------------*/

/*vardeclaration(dx,tx,lev)
int *dx,*tx,lev;
{
	int i;
	if (strcmp(sym,"ident")==0)

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
不卡欧美aaaaa| 国内精品久久久久影院一蜜桃| 久久99精品国产| 国产激情视频一区二区三区欧美 | 波多野结衣视频一区| 欧美日韩一二三| 中文子幕无线码一区tr| 亚洲一区影音先锋| 国产成人av资源| 欧美精品高清视频| 久久先锋影音av鲁色资源网| 亚洲欧洲在线观看av| 久久国产精品72免费观看| 一本一本大道香蕉久在线精品| 精品国产1区2区3区| 亚洲一区成人在线| 国产69精品久久777的优势| 在线观看91av| 日韩久久一区二区| 久久国产日韩欧美精品| 欧洲一区二区三区在线| 中文字幕av免费专区久久| 偷窥少妇高潮呻吟av久久免费| 91在线国产观看| 欧美一级欧美三级在线观看| 一区二区在线看| 成人午夜av影视| 精品免费视频.| 午夜婷婷国产麻豆精品| 99久久er热在这里只有精品66| 日韩视频免费直播| 午夜精品久久久久久久| 色综合夜色一区| 国产精品青草久久| 国产精品18久久久久久vr| 这里只有精品99re| 亚洲一区中文日韩| 一本大道久久a久久综合| 国产欧美日韩综合精品一区二区| 日韩av一区二| 欧美高清激情brazzers| 亚洲综合一区二区三区| 99精品视频一区二区三区| 制服丝袜中文字幕一区| 亚洲一区二区精品3399| 91在线视频播放| 中文字幕电影一区| 国产成人午夜精品影院观看视频| 精品成人一区二区| 极品销魂美女一区二区三区| 日韩精品一区二区在线| 秋霞午夜鲁丝一区二区老狼| 日韩美女一区二区三区四区| 韩国精品久久久| 国产欧美一区二区精品性色| 99久久免费精品| 亚洲综合视频网| 欧美美女直播网站| 久久99在线观看| 欧美激情一区三区| 色呦呦日韩精品| 三级久久三级久久| 欧美精品一区二区三区四区| 国产宾馆实践打屁股91| 亚洲美女免费在线| 欧美精品国产精品| 国产剧情在线观看一区二区| 国产目拍亚洲精品99久久精品| 北条麻妃国产九九精品视频| 亚洲图片欧美综合| 欧美va亚洲va香蕉在线| 国产成人午夜片在线观看高清观看| 国产精品私人影院| 欧美在线一二三四区| 轻轻草成人在线| 中文字幕欧美三区| 欧美日韩三级一区| 极品少妇xxxx精品少妇| 亚洲日本免费电影| 91精品国产综合久久国产大片| 国产真实乱对白精彩久久| 亚洲欧美一区二区视频| 欧美日韩亚洲综合| 国产在线精品不卡| 亚洲欧美另类小说| 欧美一级艳片视频免费观看| eeuss鲁片一区二区三区在线观看| 亚洲国产综合人成综合网站| 日韩久久久久久| 91啪亚洲精品| 久久精品免费观看| 亚洲日本在线a| 精品欧美乱码久久久久久1区2区| 99久久婷婷国产综合精品| 欧美aaaaaa午夜精品| 国产精品久久久久久久久图文区 | 欧美日本视频在线| 国产乱对白刺激视频不卡 | 欧美成人高清电影在线| va亚洲va日韩不卡在线观看| 蜜臀av亚洲一区中文字幕| 中文字幕一区不卡| 日韩午夜激情av| 色综合久久天天| 国产精品影视网| 日韩精品亚洲一区| 亚洲男同性视频| 国产网站一区二区三区| 欧美一区二区三区性视频| 99免费精品在线| 国产麻豆精品theporn| 亚洲国产日韩在线一区模特| 久久久91精品国产一区二区三区| 精品视频999| 99在线热播精品免费| 狠狠v欧美v日韩v亚洲ⅴ| 亚洲线精品一区二区三区 | 欧美人妇做爰xxxⅹ性高电影| 国产不卡免费视频| 青青草成人在线观看| 一区二区在线观看免费| 欧美国产日产图区| 日韩亚洲国产中文字幕欧美| 成人免费毛片a| 亚洲国产综合91精品麻豆| gogo大胆日本视频一区| 精品播放一区二区| |精品福利一区二区三区| 天堂av在线一区| 色噜噜狠狠成人网p站| 在线播放日韩导航| 亚洲人成人一区二区在线观看| 麻豆免费精品视频| 6080日韩午夜伦伦午夜伦| 亚洲国产日日夜夜| 色网综合在线观看| 亚洲久草在线视频| 91在线观看污| 日韩不卡一二三区| 欧美在线一二三| 亚洲精选免费视频| 欧美性生活久久| 麻豆精品视频在线| 欧美精品久久天天躁| 日韩制服丝袜先锋影音| 在线免费不卡电影| 亚洲一区二区视频在线观看| 在线视频一区二区免费| 亚洲精品国产a| 91在线精品一区二区三区| 久久久精品tv| 国产成人午夜精品5599| 精品美女在线观看| 国产乱人伦偷精品视频不卡| 欧美一卡2卡3卡4卡| 另类小说色综合网站| 欧美一区二区在线免费播放| 日韩中文字幕不卡| 欧美二区三区的天堂| 国产一区二区0| 国产精品欧美极品| 色婷婷久久久综合中文字幕| 亚洲一级电影视频| 日韩视频一区二区| 国产69精品一区二区亚洲孕妇| 亚洲精品免费视频| 欧美日韩国产中文| 久久精品国产精品亚洲红杏| 亚洲视频免费在线观看| 亚洲男同性恋视频| 欧美不卡一区二区| 91年精品国产| 亚洲视频小说图片| 久久久久久黄色| 欧美美女直播网站| 92精品国产成人观看免费| 日韩国产在线观看一区| 麻豆成人av在线| 国产一区二区三区日韩| 成人午夜在线免费| 91日韩一区二区三区| 欧美日韩激情一区二区三区| 欧美www视频| 国产精品乱码妇女bbbb| 亚洲精品国产a久久久久久| 三级精品在线观看| 国产一区欧美日韩| 91亚洲国产成人精品一区二三| 欧美性猛片xxxx免费看久爱| 日韩视频一区二区三区| 日本一区二区三区四区在线视频| 亚洲天堂久久久久久久| 天天操天天干天天综合网| 国内一区二区在线| 91香蕉国产在线观看软件| 欧美日韩精品一区二区三区四区| 精品欧美一区二区久久| 亚洲欧美日韩一区二区三区在线观看| 亚洲成a人片综合在线| 免费成人结看片|