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

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

?? pascal.cpp

?? 《編譯原理實踐教程》中的程序作了一些擴展
?? CPP
?? 第 1 頁 / 共 2 頁
字號:
// Pascal.cpp : 定義控制臺應用程序的入口點。
//

#include	<stdio.h>
#include   	<string.h>
#include	<stdlib.h>

#define ISLETTER(c)	((c)>='a'&&(c)<='z')//判斷是否是字母
#define ISNUMBER(c)	((c)>='0'&&(c)<='9')	//判斷是否是數字
#define ISCHAR(c)	(((c>='a')&&(c<='z'))||((c>='0')&&(c<='9')))	//判斷是否是字符

#define	ACC		-2
/****************************************/
#define sy_if		0
#define sy_then		1
#define sy_else		2
#define sy_while	3
#define sy_begin	4
#define sy_do		5
#define sy_end		6
#define a			7
#define semicolon	8
#define e			9
#define sharp		10
#define S			11
#define L			12

#define tempsy      15
#define EA			18 //E and
#define EO			19 //E or

#define plus		34
#define subtract	35
#define times		36
#define	divide		37
#define becomes		38

#define op_and		39
#define op_or		40
#define op_not		41
#define rop			42

#define lparent		48
#define rparent		49
#define ident       56
#define intconst    57

/******************************************/
char	ch='\0';/*當前字符*/
int     count=0;
static	char	spelling[10]={""};/*存放識別的字*/
static	char	line[81]={""};/*一行字符緩沖區*/
char	*pline;/*字符緩沖區指針*/

static	char	varnametable[100][10];
int     varnametableptr=0;

struct	ntab
{
	int tc;
	int fc;
}ntab2[200];
int label=0;
/*存放臨時變量的表的定義 */
struct	KEYWORD{
	char	spell[10];
	int		type;
};
/*存放文件的結構*/
KEYWORD keyword[10]={{"if",sy_if},
{"do",sy_do},
{"else",sy_else},
{"while",sy_while},
{"then",sy_then},
{"begin",sy_begin},
{"end",sy_end},
{"and",op_and},
{"or",op_or},
{"not",op_not}};
struct  aa{
	int type;
	int pos;
}buf[1000],/*詞法分析結果緩沖區*/
g_nCurChar,/*當前字符*/
g_nExpCurChar,/*當前表達式中的字符*/
E,/*非終結符*/
sstack[100],/*符號棧*/
ibuf[100],
stack[1000];
struct  aa oth;
struct  fourexp{
	char op[10];
	struct aa arg1;
	struct aa arg2;
	int	result;
}fexp[200];
/*四元式的結構*/

int		ssp=0;/*指向sstack[100]*/
struct	aa	*pbuf=buf;/*指向詞法分析緩沖區*/
int     lnum=0;/*源程序長度*/


FILE    *cfile;
/*********************************************************/
int newt=0;
/*臨時變量*/
int nxq=100;
/*nxq指向下一個形成的四元式的地址*/
int	lr;
int lr1;
int sp=0;
/* 狀態棧定義*/
int stack1[100];
int sp1=0;
/*狀態棧1的定義*/
int num=0;
struct ll{
	int nxq1;
	int tc1;
	int fc1;
}labelmark[10];
int labeltemp[10];
int pointmark=-1,pointtemp=-1;
int sign=0;
/*sign=1,表達式為賦值語句;sign=2,表達式為布爾表達式。*/
/***********************************************/
static int	action[19][13]=
/*0*/		{{2,-1,-1,3,4,-1,-1,5,-1,-1,10,1,-1},
/*1*/		{-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,ACC,-1,-1},
/*2*/		{-1,-1,-1,-1,-1,-1,-1,-1,-1,6,-1,-1,-1},
/*3*/		{-1,-1,-1,-1,-1,-1,-1,-1,-1,7,-1,-1,-1},
/*4*/		{2,-1,-1,3,4,-1,-1,5,-1,-1,-1,9,8},
/*5*/		{-1,-1,104,-1,-1,-1,104,-1,104,-1,104,-1,-1},
/*6*/		{-1,10,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1},
/*7*/		{-1,-1,-1,-1,-1,11,-1,-1,-1,-1,-1,-1,-1},
/*8*/		{-1,-1,-1,-1,-1,-1,12,-1,-1,-1,-1,-1,-1},
/*9*/		{-1,-1,-1,-1,-1,-1,105,-1,13,-1,-1,-1,-1},
/*10*/		{2,-1,-1,3,4,-1,-1,5,-1,-1,-1,14,-1},
/*11*/		{2,-1,-1,3,4,-1,-1,5,-1,-1,-1,15,-1},
/*12*/		{-1,-1,103,-1,-1,-1,103,-1,103,-1,103,-1,-1},
/*13*/		{2,-1,-1,3,4,-1,-1,5,-1,-1,-1,9,16},
/*14*/		{-1,-1,17,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1},
/*15*/		{-1,-1,102,-1,-1,-1,102,-1,102,-1,102,-1,-1},
/*16*/		{-1,-1,-1,-1,-1,-1,106,-1,-1,-1,-1,-1,-1},
/*17*/		{2,-1,-1,3,4,-1,-1,5,-1,-1,-1,18,-1},
/*18*/		{-1,-1,101,-1,-1,-1,101,-1,101,-1,101,-1,-1}};

static int action1[14][9]=
/*0*/		{{3,-1,-1,-1,-1,2,-1,-1,1},
/*1*/		{-1,4,11,5,10,-1,-1,ACC,-1},
/*2*/		{3,-1,-1,-1,-1,2,-1,-1,6},
/*3*/		{104,104,104,104,104,104,104,104,-1},
/*4*/		{3,-1,-1,-1,-1,2,-1,-1,7},
/*5*/		{3,-1,-1,-1,-1,2,-1,-1,8},
/*6*/		{-1,4,11,5,10,-1,9,-1,-1},
/*7*/		{101,101,101,5,10,101,101,101,-1},
/*8*/		{102,102,102,102,102,102,102,102,-1},
/*9*/		{103,103,103,103,103,103,103,103,-1},
/*10*/		{3,-1,-1,-1,-1,2,-1,-1,12},
/*11*/		{3,-1,-1,-1,-1,2,-1,-1,13},
/*12*/		{106,106,106,106,106,106,106,106,-1},
/*13*/		{105,105,105,5,10,105,105,105,-1}};

static int action2[16][11]=
/*0*/		{{1,-1,4,-1,5,-1,-1,-1,13,7,8},
/*1*/		{-1,2,-1,101,-1,101,101,101,-1,-1,-1},
/*2*/		{3,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1},
/*3*/		{-1,-1,-1,102,-1,102,102,102,-1,-1,-1},
/*4*/		{1,-1,4,-1,5,-1,-1,-1,11,7,8},
/*5*/		{1,-1,4,-1,5,-1,-1,-1,6,7,8},
/*6*/		{-1,-1,-1,104,-1,9,10,104,-1,-1,-1},
/*7*/		{1,-1,4,-1,5,-1,-1,-1,14,7,8},
/*8*/		{1,-1,4,-1,5,-1,-1,-1,15,7,8},
/*9*/		{105,-1,105,-1,105,-1,-1,105,-1,-1,-1},
/*10*/		{107,-1,107,-1,107,-1,-1,107,-1,-1,-1},
/*11*/		{-1,-1,-1,12,-1,9,10,-1,-1,-1,-1},
/*12*/		{-1,103,-1,103,-1,103,103,103,-1,-1,-1},
/*13*/		{-1,-1,-1,-1,-1,9,10,ACC,-1,-1,-1},
/*14*/		{-1,-1,-1,106,-1,9,10,106,-1,-1,-1},
/*15*/		{-1,-1,-1,108,-1,9,10,108,-1,-1,-1}};
/****************從文件讀一行到緩沖區******************************************/
void readline()
{
	char ch1;
	pline=line;
	ch1=getc(cfile);
	while (ch1!='\n')
	{
		*pline=ch1;
		pline++;
		ch1=getc(cfile);
	}
	*pline='\0';
	pline=line;
}
/*********************************從緩沖區讀一個字符************************/
void readchar()
{
	if (ch=='\0') 
	{
		readline();
		lnum++;
	}
	ch=*pline;
	pline++;
}
/******************標志符和關鍵字的識別***************************************/
int find(char spell[])	//檢查變量表中是否已存在該變量名
{
	bool bmatch = false;
	int i=0;
	while((bmatch ==false)&&(i<varnametableptr))
	{
		if (!strcmp(spell,varnametable[i])) 
		{
			bmatch=true;
		}
		i++;
	}
	if (bmatch==true) 
	{
		return i-1;
	}
	else 
	{
		return -1;
	}
}

void identifier()
{
	memset(spelling,0,10);
	
	bool bmatch = false;

	int k=0;
	do
	{
		spelling[k]=ch;
		k++;
		readchar();
	}while(ISCHAR(ch));//////////////////////////
	pline--;
	spelling[k]='\0';
	int i = 0;

	/*關鍵字匹配*/
	while((bmatch==false)&&(i<10))
	{
		if (strcmp(spelling,keyword[i].spell)==0) 
		{
			bmatch=true;
		}
		i++;
	}
	
	if(bmatch==true)  
	{
		buf[count].type=keyword[i-1].type;
	}
	else
	{
		buf[count].type=ident;
		int j=find(spelling);
		if (j==-1)
		{
			buf[count].pos=varnametableptr;
			strcpy(varnametable[varnametableptr],spelling);
			varnametableptr++;
		}
		else buf[count].pos=j;
	}
	count++;
}
/*****************數字的識別***********************************/
void number()
{
	int ivalue=0;
	int digit;
	do
	{
		digit=ch-'0';
		ivalue=ivalue*10+digit;
		readchar();
	}while(ISNUMBER(ch));///////////////////////////////
	buf[count].type=intconst;
	buf[count].pos=ivalue;
	count++;
	pline--;
}

/**************掃描主函數*************************************/
void scan()
{
	while(ch!='~')
	{
		switch (ch)
		{
		case ' ':
			break;
		case 'a':
		case 'b':
		case 'c':
		case 'd':
		case 'e':
		case 'f':
		case 'g':
		case 'h':
		case 'i':
		case 'j':
		case 'k':
		case 'l':
		case 'm':
		case 'n':
		case 'o':
		case 'p':
		case 'q':
		case 'r':
		case 's':
		case 't':
		case 'u':
		case 'v':
		case 'w':
		case 'x':
		case 'y':
		case 'z':
			identifier();
			break;
		case '0':
		case '1':
		case '2':
		case '3':
		case '4':
		case '5':
		case '6':
		case '7':
		case '8':
		case '9':
			number();
			break;
		case '<':
			readchar();
			if(ch=='=')
			{
				buf[count].pos=0;
			}
			else
			{
				if(ch=='>') 
				{
					buf[count].pos=4;
				}
				else
				{
					buf[count].pos=1;
					pline--;
				}
			}
			buf[count].type=rop;
			count++;
			break;
		case '>':
			readchar();
			if(ch=='=')
			{
				buf[count].pos=2;
			}
			else
			{
				buf[count].pos=3;
				pline--;
			}
			buf[count].type=rop;
			count++;
			break;
		case '(':
			buf[count].type=lparent;
			count++;
			break;
		case ')':
			buf[count].type=rparent;
			count++;
			break;
		case '#':
			buf[count].type=sharp;
			count++;
			break;
		case '+':
			buf[count].type=plus;
			count++;
			break;
		case '-':
			buf[count].type=subtract;
			count++;
			break;
		case '*':
			buf[count].type=times;
			count++;
			break;
		case '/':
			buf[count].type=divide;
			count++;
			break;
		case ':':
			readchar();
			if (ch=='=')
				buf[count].type=becomes;
			count++;
			break;
		case '=':
			buf[count].type=rop;
			buf[count].pos=5;
			count++;
			break;
		case ';':
			buf[count].type=semicolon;
			count++;
			break;
		}
		readchar();
	}
	buf[count].type=-1;
}
/******************************************************************/
void readnu()
{
	if (pbuf->type>=0)
	{
		g_nCurChar.type=pbuf->type;
		g_nCurChar.pos=pbuf->pos;
		pbuf++;
	}
}
/******************中間變量的生成**************************/
int newtemp()
{
	newt++;
	return newt;
}
/**************************生成四元式****************/
int gen(char op1[],struct aa arg11,struct aa arg22,int result1)
{
	strcpy(fexp[nxq].op,op1);
	fexp[nxq].arg1.type=arg11.type;
	fexp[nxq].arg1.pos=arg11.pos;
	fexp[nxq].arg2.type=arg22.type;
	fexp[nxq].arg2.pos=arg22.pos;
	fexp[nxq].result=result1;
	nxq++;
	return nxq-1;
}
/**********布爾表達式的匹配****************/
int merg(int p1,int p2)
{
	int p;
	if(p2==0) return p1;
	else
	{
		p=p2;
		while(fexp[p].result!=0) p=fexp[p].result;
		fexp[p].result=p1;
		return p2;
	}
}
void backpatch(int p,int t)
{
	int tempq;
	int q;
	q=p;
	while(q!=0)
	{
		tempq=fexp[q].result;
		fexp[q].result=t;
		q=tempq;
	}
}
/*******************************************/
int change1(int chan)
{
	switch (chan)
	{
	case ident:
	case intconst:
		return 0;
	case plus:
		return 1;
	case subtract:
		return 2;
	case times:
		return 3;
	case divide:
		return 4;
	case lparent:
		return 5;
	case rparent:
		return 6;
	case sharp:
		return 7;
	case tempsy:
		return 8;
	}
}
int change2(int chan)
{
	switch (chan)
	{
	case ident:
	case intconst:
		return 0;
	case rop:
		return 1;
	case lparent:
		return 2;
	case rparent:
		return 3;
	case op_not:
		return 4;
	case op_and:
		return 5;
	case op_or:
		return 6;
	case sharp:
		return 7;
	case tempsy:
		return 8;
	case EA:
		return 9;
	case EO:
		return 10;
		//////////////////////
	case subtract:
		return 11;
	case divide:
		return 12;
		//////////////////////
	}
}
/************賦值語句的的分析***************************/
void lrparse1(int num)

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
av不卡在线播放| 日本一区二区视频在线| 欧美成人乱码一区二区三区| 国产日产欧美精品一区二区三区| 亚洲精品中文字幕在线观看| 精品综合久久久久久8888| 99久久精品久久久久久清纯| 精品久久人人做人人爽| 亚洲一区二区欧美激情| 成人av免费在线观看| 欧美tickling挠脚心丨vk| 一区二区三区不卡在线观看| 国产高清亚洲一区| 精品精品欲导航| 午夜av电影一区| 欧美性受xxxx黑人xyx性爽| 久久精品免视看| 免费成人在线影院| 欧美日本韩国一区| 亚洲黄色尤物视频| 色八戒一区二区三区| 亚洲欧洲av在线| 成人免费黄色大片| 久久久99精品久久| 国产精品一线二线三线精华| 日韩午夜在线影院| 青青草成人在线观看| 欧美剧情电影在线观看完整版免费励志电影| 国产精品久久久久一区二区三区 | 久久久99精品免费观看| 久久福利资源站| 亚洲男人天堂av| 不卡一区二区三区四区| 国产精品天天摸av网| 国产99久久精品| 中文字幕国产一区| 色综合网色综合| 亚洲激情中文1区| 欧洲在线/亚洲| 香蕉影视欧美成人| 91精品婷婷国产综合久久竹菊| 亚洲福利电影网| 制服丝袜激情欧洲亚洲| 青娱乐精品视频| 久久夜色精品一区| 成人免费三级在线| 亚洲人成精品久久久久| 欧美三区在线观看| 三级亚洲高清视频| 久久综合av免费| 国产成人a级片| 综合网在线视频| 欧美性极品少妇| 美女www一区二区| 国产欧美日韩激情| 色综合久久综合| 日韩福利电影在线| 久久精品综合网| 成人做爰69片免费看网站| 亚洲人成影院在线观看| 欧美日韩aaaaaa| 国产精品一二三四区| 亚洲欧美另类综合偷拍| 欧美日本一区二区在线观看| 精品一区二区在线视频| 国产精品福利一区二区三区| 欧美日韩一区高清| 国内精品视频一区二区三区八戒| 国产乱码精品一区二区三区忘忧草| 国产亚洲女人久久久久毛片| 色欧美88888久久久久久影院| 日本美女一区二区三区视频| 国产欧美精品区一区二区三区| 91在线观看污| 日本不卡视频一二三区| 国产亚洲精品bt天堂精选| 欧美亚洲综合久久| 国产麻豆精品theporn| 亚洲愉拍自拍另类高清精品| 久久综合久久久久88| 日本电影亚洲天堂一区| 国产一区二区三区香蕉| 亚洲韩国一区二区三区| 国产日韩欧美激情| 欧美精品丝袜中出| 99精品国产一区二区三区不卡| 奇米色一区二区| 亚洲免费av高清| 国产亚洲短视频| 欧美肥妇毛茸茸| 99re成人精品视频| 国产做a爰片久久毛片| 洋洋成人永久网站入口| 中文字幕va一区二区三区| 日韩一区二区三区四区五区六区| 99精品久久免费看蜜臀剧情介绍| 激情久久久久久久久久久久久久久久| 亚洲黄色小视频| 国产精品久久久久久久久快鸭| 精品三级在线看| 日韩一区二区三区观看| 欧美日韩一区在线观看| 91亚洲国产成人精品一区二三| 国产一区二区三区免费观看| 日本va欧美va瓶| 视频在线观看一区| 亚洲成人在线网站| 一区二区三区四区不卡在线| 国产精品久久久爽爽爽麻豆色哟哟| 国产亚洲精品超碰| 欧美mv日韩mv亚洲| 欧美不卡一区二区三区四区| 欧美一级二级在线观看| 91精品国产欧美日韩| 欧美日韩aaaaa| 欧美人妖巨大在线| 7777精品久久久大香线蕉| 欧美亚洲综合在线| 欧美日韩亚洲综合一区| 欧美日韩一级二级三级| 欧美精品丝袜中出| 日韩欧美国产精品一区| 欧美xfplay| 久久久www免费人成精品| 国产亚洲一区二区在线观看| 久久久99久久| 国产精品私房写真福利视频| 亚洲视频在线观看一区| 亚洲人一二三区| 亚洲国产精品久久久久婷婷884 | 欧美午夜精品理论片a级按摩| 91成人免费在线| 欧美日韩中文字幕一区二区| 欧美色图片你懂的| 91超碰这里只有精品国产| 欧美精品日日鲁夜夜添| 精品伦理精品一区| 国产精品国产三级国产普通话99| 亚洲免费资源在线播放| 亚洲福利一区二区三区| 久久精品国产**网站演员| 国产aⅴ综合色| 在线免费av一区| 日韩精品一区在线| 国产精品久久久久久久久免费桃花| 亚洲精品国产第一综合99久久 | 欧美羞羞免费网站| 7777精品久久久大香线蕉| 久久久久久久久久久99999| 亚洲欧美自拍偷拍色图| 亚洲成av人片一区二区梦乃| 狠狠色狠狠色综合系列| 91免费视频大全| 欧美v日韩v国产v| 亚洲精品美腿丝袜| 久久精品国产澳门| 91蜜桃免费观看视频| 日韩久久免费av| 一区二区高清在线| 国产一区二区三区精品欧美日韩一区二区三区 | 欧洲视频一区二区| 欧美大片一区二区三区| 最新国产精品久久精品| 久久不见久久见免费视频7| av男人天堂一区| 欧美videossexotv100| 一区二区三区久久久| 国产一区二区三区观看| 欧美日韩在线三级| 国产精品不卡一区| 狠狠网亚洲精品| 欧美日韩国产小视频在线观看| 国产午夜精品一区二区 | 欧美一区二区在线不卡| 国产精品免费观看视频| 蜜芽一区二区三区| 欧美色中文字幕| 国产精品久久久久精k8| 国内外成人在线| 91精品久久久久久蜜臀| 亚洲最新视频在线播放| 成年人国产精品| 国产午夜精品一区二区| 久久爱www久久做| 日韩欧美色综合网站| 日韩一区精品字幕| 欧美色综合天天久久综合精品| 亚洲三级电影网站| eeuss鲁片一区二区三区| 久久精品视频免费| 国产一区不卡精品| 日韩欧美国产一区二区三区| 天堂精品中文字幕在线| 欧美性一区二区| 午夜久久久影院| 欧美喷水一区二区| 午夜电影一区二区| 91麻豆精品国产无毒不卡在线观看| 亚洲一区欧美一区| 欧美色图一区二区三区|