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

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

?? simpri.c

?? 編譯原理全套實驗源代碼。包括詞法分析
?? C
字號:
/*
20031401008 褚超

實驗四 自底下上語法分析----簡單優先分析方法
對指定好的上下文無關文法確定其簡單優先關系矩陣,利用簡單優先分析法對輸入的任意串進行分析

本例中將文法規定為:
G[S]:
S->bAb
A->(B | a
B->Aa)

程序測試數據:b(aa)b   b((aa)a)b (任意符號文法的輸入串均可)
其他輸入將輸出錯誤信息及出錯地點

其他說明:本程序雖然限定了使用的文法,但是程序實現過程中是通過程序計算出簡單優先關系.所以很容易能
拓廣到能實現對任意輸入文法進行簡單優先分析.只需借鑒上次實驗LL1中的獲取任意文法的輸入并保存到相應
的數據結構中即可.詳細說明請參見實驗報告。

*/

/*按字符出現的先后將表中的順序定為 S	b	A	(	B	a	)	#*/

#include<stdio.h>
#include<stdlib.h>
#include <string.h>
#include <conio.h>
#define M 8	

typedef struct type						/*產生式類型定義*/
{
	char origin;						/*大寫字符*/
	char array[5];						/*產生式右邊字符*/
	int length;							/*字符個數*/
}type;	

/* 將矩陣轉置 */
void getTrans(int a[M+1][M+1],int b[M+1][M+1])
{
	int i,j;
	for (i=1;i<=M;i++)
	{
		for (j=1;j<=M;j++)
		{
			b[i][j]=a[j][i];
		}
	}
}

/* 計算兩關系的并集 */
void getUnion(int a[M+1][M+1],int b[M+1][M+1])
{
	int i,j;

	for (i=1;i<=M;i++)
	{
		for (j=1;j<=M;j++)
		{
			a[i][j]=a[i][j] | b[i][j];
		}
	}
}

/*利用Warshall算法計算閉包*/
void getAdd(int a[M+1][M+1])
{
	int i,j,k;

	for (i=1;i<=M;i++)
	{
		for (j=1;j<=M;j++)
		{
			if (a[j][i]==0)
			{
				continue;
			}
			for (k=1;k<=M;k++)
			{
				if (a[i][k]==0)
				{
					continue;
				}
				a[j][k]=1;
			}
		}
	}
}

/* 計算兩個關系的乘積 */

void getMult(int a[M+1][M+1],int b[M+1][M+1],int c[M+1][M+1])
{
	int i,j,k;
	
	for (i=1;i<=M;i++)
	{
		for (j=1;j<=M;j++)
		{
			if (a[i][j]==1)
			{
				for (k=1;k<=M;k++)
				{
					if (b[j][k]==1)
					{
						c[i][k]=1;
					}
				}
			}
		}
	}
}

/* 對輸入串進行掃描的主控程序 */
void doScan(int temp[M+1][M+1]);

/*返回字符在數組中的位置*/
int locate(char s[],char c)
{
	unsigned int i;
	for (i=0;i<strlen(s);i++)
	{
		if (c==s[i])
		{
			return i+1;
		}
	}
	return -1;
}

/*輸出分析過程的函數*/
void print(char s[],int pri,char c,char str[],char act[])
{
	char ch;
	switch(pri) {
	case 0:
		ch='=';
		break;
	case 1:
		ch='>';
		break;
	case -1:
		ch='<';
		break;
	default:
		ch='?';
	}
	printf("%s\t%8c\t%6c  \t%8s\t%s\n",s,ch,c,str,act);

}

void main()
{
	int i,j;
	int first[M+1][M+1],equal[M+1][M+1],last[M+1][M+1];		/*下標0不使用*/

	int low[M+1][M+1],high[M+1][M+1];

	int temp[M+1][M+1],temp1[M+1][M+1];

	/*首先得出first,last矩陣和 相等關系*/

	/*對各個矩陣進行初始化*/
	for(i=1;i<=M;i++)
	{
		for(j=1;j<=M;j++)
		{
			first[i][j]=0;
			last[i][j]=0;
			equal[i][j]=0;
			low[i][j]=0;
			high[i][j]=0;
			temp1[i][j]=0;
			if (i==j)
			{
				temp[i][j]=1;
			}
			else
				temp[i][j]=0;
		}
	}

	equal[2][3]=equal[3][2]=equal[4][5]=equal[3][6]=equal[6][7]=1;
	first[1][2]=first[3][4]=first[3][6]=first[5][3]=1;
	last[1][2]=last[3][5]=last[3][6]=last[5][7]=1;	

	


	/* 計算First+ */
	getAdd(first);

	/* 計算小于關系 */
	getMult(equal,first,low);
	
	/* 計算First* */
	getUnion(first,temp);
	

	/* 計算Last+ */
	getAdd(last);

	/* 將Last+轉置 */
	getTrans(last,temp);

	/* 計算大于關系 */
	getMult(temp,equal,temp1);	/*將中間結果先保存到temp1中*/
	getMult(temp1,first,high);

	/* 構造簡單優先關系矩陣:結果存入temp中 */
	/*大于,等于,小于 關系分別用1,0,-1表示*/
	for (i=1;i<=M;i++)
	{
		for (j=1;j<=M;j++)
		{
			if (equal[i][j]==1)
			{
				temp[i][j]=0;
			}
			else if (low[i][j]==1)
			{
				temp[i][j]=-1;
			}
			else if (high[i][j]==1)
			{
				temp[i][j]=1;
			}
			else
				temp[i][j]=-2;
		}
	}

	/* 對'#'的項的處理 */
	temp[1][8]=temp[2][8]=1;
	temp[8][1]=temp[8][2]=-1;
	temp[8][8]=0;

	doScan(temp);
}

void doScan(int temp[M+1][M+1])
{
	type G[4];
	char V[10];
	char str[20];		/*輸入的待分析串*/
	char stack[20];		/*符號棧*/
	int top=-1,i=0;			/*棧頂指針 i為掃描指針*/
	char *p;
	int j,k,m=0;
	char s[20];

	strcpy(V,"SbA(Ba)#");

	G[0].origin='S';
	strcpy(G[0].array,"bAb");
	G[0].length=3;

	G[1].origin='A';
	strcpy(G[1].array,"(B");
	G[1].length=2;

	G[2].origin='A';
	strcpy(G[2].array,"a");
	G[2].length=1;

	G[3].origin='B';
	strcpy(G[3].array,"Aa)");
	G[3].length=3;

	printf("請輸入待分析的符號串(以'#'結束):");
	gets(str);


	printf("stack\tpriority\tcurrent\t\tstring\t\taction\n");

	stack[++top]='#';	/* '#'號入棧 */

	
	while (1)
	{

		if (top==1 && stack[top]=='S' && str[i]=='#')
		{
			/*輸入串匹配*/
			p=&str[i];
			stack[top+1]='\0';			/*輸出之前在棧后加上字符串結束符*/
			print(stack,temp[locate(V,'S')][locate(V,'#')],str[i],p,"接受");
			return;
		}

		/*將輸入符號依次入棧,直到遇到棧頂符號大于下一符號的優先性*/
		while (temp[locate(V,stack[top])][locate(V,str[i])]!=1)
		{
			p=&str[i];
			stack[top+1]='\0';			/*輸出之前在棧后加上字符串結束符*/
			print(stack,-1,str[i],p,"移進");
			stack[++top]=str[i++];
		}
		
		/*從句柄尾開始向前搜索句柄頭*/
		j=top;
		while (j>0 && temp[locate(V,stack[j-1])][locate(V,stack[j])]!=-1)
		{
			j--;
		}


		m=0;					/*每次查找前先將m清0*/
		for (k=j;k<=top;k++)
		{
			/*將句柄暫存入s中*/
			s[m++]=stack[k];
		}
		s[m]='\0';

		for (j=0;j<4;j++)
		{
			if (strcmp(s,G[j].array)==0)
			{
				break;
			}
		}	
		if (j==4)		/*沒找到則出錯*/
		{
			/*輸出錯誤*/
			p=&str[i];
			stack[top+1]='\0';			/*輸出之前在棧后加上字符串結束符*/
			print(stack,1,str[i],p,"出錯");
			exit(0);
		}
		
		/*輸出歸約*/
		p=&str[i];
		stack[top+1]='\0';			/*輸出之前在棧后加上字符串結束符*/
		print(stack,1,str[i],p,"歸約");

		/*用相應產生式的左部代替句柄*/
		top-=G[j].length;
		stack[++top]=G[j].origin;

	}
	
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
日韩理论片在线| 精品制服美女丁香| 亚洲1区2区3区视频| 日韩电影免费在线| 国产a视频精品免费观看| 91蜜桃网址入口| 欧美一区二区在线播放| 精品国产乱码久久久久久老虎| 欧美—级在线免费片| 亚洲va欧美va人人爽午夜| 日韩高清一区在线| 91在线porny国产在线看| 欧美视频一二三区| 欧美国产成人精品| 日本视频一区二区| 99re免费视频精品全部| 日韩三级av在线播放| 亚洲精品国产一区二区精华液| 捆绑变态av一区二区三区| 91在线免费播放| 久久久久久免费网| 日本不卡一区二区| 成人午夜在线视频| 91精品国产色综合久久ai换脸| 国产精品亲子乱子伦xxxx裸| 日韩电影在线观看一区| 99re热这里只有精品视频| 国产亚洲综合av| 夜夜嗨av一区二区三区中文字幕| 高清不卡一二三区| 精品福利一二区| 视频一区二区中文字幕| 91黄色在线观看| 国产精品不卡在线| 欧美日韩一区不卡| 国产精品灌醉下药二区| 久久99在线观看| 91精品国产综合久久婷婷香蕉 | 欧美日韩三级一区| 亚洲乱码中文字幕综合| www.成人在线| 日本一区二区综合亚洲| 国产不卡在线一区| 久久综合狠狠综合久久综合88| 日韩成人dvd| 欧美一区二区三区在线观看 | 日韩欧美一级片| 免费观看久久久4p| 欧美日韩日日摸| 日韩av电影免费观看高清完整版| 欧美在线你懂的| 一区二区高清在线| 在线观看av一区| 亚洲午夜激情av| 6080yy午夜一二三区久久| 日日噜噜夜夜狠狠视频欧美人| 91精品国产乱码久久蜜臀| 日本不卡中文字幕| 精品国产三级a在线观看| 国内欧美视频一区二区| 国产三级欧美三级日产三级99| 国产精一品亚洲二区在线视频| 久久免费精品国产久精品久久久久| 蜜桃久久av一区| 久久久久国产精品麻豆ai换脸| 国产一区二区精品久久91| 亚洲精品在线一区二区| 成人app下载| 亚洲一区二区三区四区在线观看 | 一区二区三区在线免费| 欧美日韩电影一区| 国产一区二区三区久久久 | 亚洲特级片在线| 欧美日韩视频第一区| 国产一区二区三区电影在线观看| 国产蜜臀av在线一区二区三区| 色又黄又爽网站www久久| 日本视频中文字幕一区二区三区 | 91精彩视频在线| 日韩电影一区二区三区四区| 精品捆绑美女sm三区| 久久99国产精品久久| 精品国产三级a在线观看| 99精品久久99久久久久| 日韩国产欧美视频| 国产精品久久久久影院亚瑟| 欧美日韩一级黄| 高清国产一区二区| 亚洲影视在线观看| 久久九九全国免费| 69久久夜色精品国产69蝌蚪网| 国产一区二区调教| 日韩av一区二区三区| 国产欧美一区二区在线观看| 色成人在线视频| 国产精品一区一区| 日韩女优制服丝袜电影| 中文字幕av一区二区三区免费看 | 欧美丝袜第三区| 91在线无精精品入口| 久久精品国产99国产| 一区二区欧美精品| 亚洲自拍偷拍欧美| 亚洲四区在线观看| 国产精品国产三级国产普通话99 | 在线电影院国产精品| 色吧成人激情小说| 成人99免费视频| 成人一区二区三区中文字幕| 精品系列免费在线观看| 亚洲v精品v日韩v欧美v专区 | 国产精品99久久久| 久久激情综合网| 午夜精品久久久久久久蜜桃app| 中文字幕在线播放不卡一区| 亚洲精品一区二区三区四区高清| 欧美亚洲国产一区二区三区va| 大桥未久av一区二区三区中文| 久久99精品国产91久久来源| 亚洲一级二级三级在线免费观看| 26uuu精品一区二区| 亚洲女与黑人做爰| 亚洲三级在线免费观看| 国产精品久久久久久久午夜片| 久久久蜜桃精品| 久久精品欧美日韩精品 | 一卡二卡三卡日韩欧美| 一区二区三区中文免费| 亚洲伦理在线免费看| 亚洲免费av观看| 亚洲欧美日韩一区二区三区在线观看| 日韩一区二区在线观看| 欧美日韩综合不卡| 精品视频在线看| 777午夜精品视频在线播放| 欧美挠脚心视频网站| 欧美日韩一级视频| 91精品国产综合久久香蕉的特点| 欧美丰满美乳xxx高潮www| 欧美高清性hdvideosex| 日韩欧美一区在线| 欧美成人a∨高清免费观看| 欧美精品一区二区在线播放| 3d成人动漫网站| 欧美一区二区三区免费视频| 欧美自拍偷拍午夜视频| 欧美精品久久99久久在免费线| 在线播放国产精品二区一二区四区| 91精品免费观看| 欧美激情一区在线观看| 亚洲精品视频在线看| 亚洲成人7777| 国产精品一区二区在线看| 暴力调教一区二区三区| 欧美综合一区二区三区| 欧美日韩aaaaaa| 欧美丰满高潮xxxx喷水动漫| 精品国产免费久久| 国产精品妹子av| 国产精品乱子久久久久| 欧美激情一区二区| 亚洲自拍都市欧美小说| 韩国欧美国产1区| 91麻豆精东视频| 欧美成人国产一区二区| 中文字幕一区二区三区av| 首页综合国产亚洲丝袜| 国产精品一二三在| 在线免费一区三区| 中文av字幕一区| 国产一区二区网址| 日韩欧美在线观看一区二区三区| 亚洲美女电影在线| kk眼镜猥琐国模调教系列一区二区| 91精品午夜视频| 五月激情六月综合| 欧美午夜精品电影| 成人免费视频在线观看| 国产伦精品一区二区三区视频青涩| 欧美卡1卡2卡| 午夜激情综合网| 欧美三级蜜桃2在线观看| 亚洲免费观看在线观看| 成人黄页在线观看| 欧美韩国日本综合| 国产suv精品一区二区6| 国产丝袜欧美中文另类| 国产很黄免费观看久久| 精品国产青草久久久久福利| 麻豆精品蜜桃视频网站| 欧美一区二区福利在线| 日本午夜一本久久久综合| 欧美日韩视频在线一区二区| 亚洲第一久久影院| 欧美色涩在线第一页| 午夜影院在线观看欧美| 884aa四虎影成人精品一区| 日韩有码一区二区三区| 宅男噜噜噜66一区二区66| 裸体健美xxxx欧美裸体表演|