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

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

?? yukun2.cpp

?? 本人編譯的實驗報告 語法分析 含說明 包括三個文件 yukun2.cpp yukun2.EXE 語法分析(LL(1))使用說明.txt等
?? CPP
?? 第 1 頁 / 共 2 頁
字號:
/* 計算機0304班 33號 余琨*/ 
/* 自頂向下的語法分析程序(LL(1))*/ 
  
#include<stdlib.h>
#include<stdio.h>
#include<string.h>
/******初始化所要用到的first集合和follow集合***************/
int count=0;               
int number;                
char start;                
char termin[50];          
char non_ter[50];          
char v[50];               
char left[50];            
char right[50][50];       
char first[50][50],follow[50][50];       
char first1[50][50];      
char select[50][50];       
char f[50],F[50];          
char empty[20];            
char TEMP[50];             
int validity=1;            
int ll=1;                  
int M[20][20];             
char choose;               
char empt[20];             
char fo[20];              


 
int in(char c,char *p)
{
	int i;
	if(strlen(p)==0)
		return(0);
	for(i=0;;i++)
	{	
		if(p[i]==c)
			return(1);       /*若在,返回1*/
		if(i==strlen(p))
		    return(0);       /*若不在,返回0*/
	}
}

 
char c()
{
	char c='A';
    while(in(c,non_ter)==1)
		c++;
	return(c);
}

/*分解含有左遞歸的產生式*/
void recur(char *point)
{                     /*完整的產生式在point[]中*/
    int j,m=0,n=3,k;
	char temp[20],ch;
	ch=c();           /*得到一個非終結符*/
	k=strlen(non_ter);
	non_ter[k]=ch;
	non_ter[k+1]='\0';
	for(j=0;j<=strlen(point)-1;j++)
	{	
		if(point[n]==point[0])
		{                          /*如果‘|’后的首符號和左部相同*/
			for(j=n+1;j<=strlen(point)-1;j++)
			{
			   	while(point[j]!='|'&&point[j]!='\0')
				    temp[m++]=point[j++];
				left[count]=ch;
				memcpy(right[count],temp,m);
				right[count][m]=ch;
				right[count][m+1]='\0';
				m=0;
				count++;
				if(point[j]=='|')
				{
					n=j+1;
					break;
				}
			}
		}
		else
		{                          /*如果‘|’后的首符號和左部不同*/
			left[count]=ch;
			right[count][0]='^';
			right[count][1]='\0';
			count++;
			for(j=n;j<=strlen(point)-1;j++)
			{
			    if(point[j]!='|')
			        temp[m++]=point[j];
			    else
				{
				    left[count]=point[0];
				    memcpy(right[count],temp,m);
				    right[count][m]=ch;
				    right[count][m+1]='\0';
					printf(" count=%d ",count);
					m=0;
				    count++;
				}
			}
            left[count]=point[0];
		    memcpy(right[count],temp,m);
		    right[count][m]=ch;
	      	right[count][m+1]='\0';
			count++;
		    m=0;
		}
	}
}

/*分解不含有左遞歸的產生式*/
void non_re(char *point)
{
    int m=0,j;
	char temp[20];
	for(j=3;j<=strlen(point)-1;j++)
	{
	    if(point[j]!='|')
		    temp[m++]=point[j];
		else
		{
		    left[count]=point[0];
		    memcpy(right[count],temp,m);
		    right[count][m]='\0';
			m=0;
			count++;
		}
	}
    left[count]=point[0];
    memcpy(right[count],temp,m);
    right[count][m]='\0';
    count++;
	m=0;
}


 
char grammer(char *t,char *n,char *left,char right[50][50])
{
	char vn[50],vt[50];
	char s;
	char p[50][50];
	int i,j,k;
	printf("請輸入文法的非終結符號串:");
    scanf("%s",vn);
	getchar();
    i=strlen(vn);
    memcpy(n,vn,i);
	n[i]='\0';
	printf("請輸入文法的終結符號串:");
    scanf("%s",vt);
	getchar();
    i=strlen(vt);
    memcpy(t,vt,i);
	t[i]='\0';
    printf("請輸入文法的開始符號:");
	scanf("%c",&s);
	getchar();
	printf("請輸入文法產生式的條數:");
    scanf("%d",&i);
	getchar();
    for(j=1;j<=i;j++)
	{
		printf("請輸入文法的第%d條(共%d條)產生式:",j,i);
		scanf("%s",p[j-1]);
        getchar();
	}
    for(j=0;j<=i-1;j++)
		if(p[j][1]!='-'||p[j][2]!='>')
		{	printf("\ninput error!");
		    validity=0;
			return('\0');
        }            /*檢測輸入錯誤*/
   for(k=0;k<=i-1;k++)
   {                        /*分解輸入的各產生式*/
        if(p[k][3]==p[k][0])
            recur(p[k]);
		else
		    non_re(p[k]);
	}
	return(s);
}



/*將單個符號或符號串并入另一符號串 */
void merge(char *d,char *s,int type)
{                  
    int i,j;
	for(i=0;i<=strlen(s)-1;i++)
	{
        if(type==2&&s[i]=='^')
			;
		else
		{
			for(j=0;;j++)
			{
			    if(j<strlen(d)&&s[i]==d[j])
				   break;
                if(j==strlen(d))
				{
				    d[j]=s[i];
				    d[j+1]='\0';
				    break;
				}
			}
		}
	}
}


 
void emp(char c)
{                   /*即求所有由‘ ^ ’推出的符號*/
	char temp[10];
	int i;
	for(i=0;i<=count-1;i++)
	{
		if(right[i][0]==c&&strlen(right[i])==1)
		{
			temp[0]=left[i];
			temp[1]='\0';
			merge(empty,temp,1);
			emp(left[i]);
		}
	}
}

 
int _emp(char c)
{                  /*若能推出,返回1;否則,返回0*/
	int i,j,k,result=1,mark=0;
	char temp[20];
	temp[0]=c;
	temp[1]='\0';
	merge(empt,temp,1);
	if(in(c,empty)==1)
		return(1);
	for(i=0;;i++)
	{
		if(i==count)
            return(0);
		if(left[i]==c)         /*找一個左部為c的產生式*/
		{
            j=strlen(right[i]);    /*j為右部的長度*/
			if(j==1&&in(right[i][0],empty)==1)
			    return(1);
			else if(j==1&&in(right[i][0],termin)==1)
				return(0);
			else 
			{
                for(k=0;k<=j-1;k++)
                    if(in(right[i][k],empt)==1)
						mark=1;
				if(mark==1)
					continue;
				else
                {
					for(k=0;k<=j-1;k++)
					{
						result*=_emp(right[i][k]);
						temp[0]=right[i][k];
						temp[1]='\0';
						merge(empt,temp,1);
					}
				}
			}
		    if(result==0&&i<count)
			    continue;
		    else if(result==1&&i<count)
			    return(1);
		}
	}
}

 
 /*判斷讀入的文法是否正確 */
int judge()
{
    int i,j;
	for(i=0;i<=count-1;i++)
	{
		if(in(left[i],non_ter)==0)
		{                    /*若左部不在非終結符中,報錯*/
			printf("\nerror1!");
			validity=0;
			return(0);
		}
		for(j=0;j<=strlen(right[i])-1;j++)
		{
			if(in(right[i][j],non_ter)==0&&in(right[i][j],termin)==0&&right[i][j]!='^')
			{               /*若右部某一符號不在非終結符、終結符中且不為‘ ^ ’,報錯*/
				printf("\nerror2!");
				validity=0;
				return(0);
			}
		}
	}
	return(1);
}

/* 求單個符號的FIRST  */
void first2(int i)
{                     /*i為符號在所有輸入符號中的序號*/
    char c,temp[20];
	int j,k,m;
	c=v[i];
	char ch='^';
	emp(ch);
	if(in(c,termin)==1)       /*若為終結符*/
    {
        first1[i][0]=c;
	    first1[i][1]='\0';
	}   
	else if(in(c,non_ter)==1)       /*若為非終結符*/
	{
		for(j=0;j<=count-1;j++)
		{
            if(left[j]==c)
			{
                if(in(right[j][0],termin)==1||right[j][0]=='^')
				{
                    temp[0]=right[j][0];
				    temp[1]='\0';
					merge(first1[i],temp,1);
				}
				else if(in(right[j][0],non_ter)==1)
				{
					if(right[j][0]==c)
						continue;
					for(k=0;;k++)
						if(v[k]==right[j][0])
							break;
					if(f[k]=='0')
					{   
						first2(k);
					    f[k]='1';
					}
					merge(first1[i],first1[k],2);
                    for(k=0;k<=strlen(right[j])-1;k++)
					{
						empt[0]='\0';
						if(_emp(right[j][k])==1&&k<strlen(right[j])-1)
						{
                            for(m=0;;m++)
								if(v[m]==right[j][k+1])
									break;
							if(f[m]=='0')
							{
								first2(m);
								f[m]='1';
							}
							merge(first1[i],first1[m],2);
						}
						else if(_emp(right[j][k])==1&&k==strlen(right[j])-1)
						{
							temp[0]='^';
							temp[1]='\0';
							merge(first1[i],temp,1);
						}
						else 
							break;
					}
				}
			}
		}
	}
	f[i]='1';
}

/* 求各產生式右部的FIRST */
void FIRST(int i,char *p)
{

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
日本高清不卡在线观看| 在线不卡中文字幕| 欧美影院一区二区三区| 日韩欧美一区中文| 1区2区3区欧美| 国产综合久久久久久久久久久久| 波多野结衣在线一区| 777欧美精品| 一区2区3区在线看| 成人在线综合网| 亚洲精品在线网站| 日本在线不卡视频| 欧美少妇一区二区| 亚洲色图第一区| 粉嫩av一区二区三区在线播放| 日韩精品一区二区三区三区免费| 亚洲最新在线观看| 97久久久精品综合88久久| 日韩精品中文字幕一区| 亚洲国产精品久久久久秋霞影院| 99久久婷婷国产| 国产精品素人一区二区| 久热成人在线视频| 欧美一区二区三区啪啪| 五月天中文字幕一区二区| 一本久道久久综合中文字幕| 国产精品素人一区二区| 国产精选一区二区三区| 精品99一区二区三区| 美女视频黄 久久| 日韩一区二区三区免费观看| 午夜欧美大尺度福利影院在线看 | 蜜乳av一区二区三区| 欧美伊人久久久久久午夜久久久久| 国产精品乱码一区二三区小蝌蚪| 国产成人免费视频一区| 国产网站一区二区| 国产69精品久久久久777| 久久精品无码一区二区三区| 国产精品综合二区| 久久九九全国免费| 成人综合日日夜夜| 国产精品久久二区二区| 97久久精品人人做人人爽50路| 亚洲手机成人高清视频| 在线视频国内一区二区| 亚洲香蕉伊在人在线观| 欧美电影一区二区三区| 麻豆91精品视频| 国产视频视频一区| av在线播放一区二区三区| 亚洲精品综合在线| 欧美精品vⅰdeose4hd| 久久精品久久综合| 国产欧美日韩视频一区二区| 99久久久精品| 午夜精品影院在线观看| 精品国产麻豆免费人成网站| 高清不卡一区二区在线| 亚洲精品欧美在线| 欧美一级二级三级蜜桃| 丁香激情综合五月| 亚洲一区二区三区在线播放| 欧美电影免费观看高清完整版在线 | 欧美探花视频资源| 麻豆高清免费国产一区| 欧美国产精品专区| 欧美视频完全免费看| 国产精品一卡二| 亚洲一区二区三区激情| 久久久久久久久久久久电影 | 国产一区视频在线看| 亚洲视频资源在线| 精品日韩欧美一区二区| 色老综合老女人久久久| 激情欧美日韩一区二区| 一区二区不卡在线视频 午夜欧美不卡在 | 国产在线视频精品一区| 亚洲永久精品国产| 久久久久久久久久久久久久久99 | 不卡的看片网站| 日本色综合中文字幕| 国产精品久久久久久久久免费相片| 欧美无人高清视频在线观看| 懂色av一区二区在线播放| 青青草原综合久久大伊人精品 | 国产成人久久精品77777最新版本| 日韩毛片精品高清免费| 久久久久久久久久电影| 欧美日韩精品专区| 91香蕉视频mp4| 国产精品18久久久久久久网站| 亚洲成人1区2区| 亚洲天堂久久久久久久| 精品福利一二区| 91精品国产色综合久久 | av男人天堂一区| 美女视频一区二区| 五月天一区二区| 亚洲一二三区不卡| 亚洲欧美日韩系列| 国产精品久久久久久久久久久免费看| 欧美一级夜夜爽| 91精品国产91久久久久久一区二区| 99精品1区2区| 高清免费成人av| 国产成人精品免费看| 国产在线精品一区二区三区不卡| 日韩激情视频网站| 香蕉成人啪国产精品视频综合网| 亚洲日本在线a| 成人欧美一区二区三区1314| 亚洲国产高清在线| 国产精品高潮呻吟久久| 国产精品视频你懂的| 国产欧美日韩综合| 日本一区二区久久| 国产精品三级久久久久三级| 国产精品欧美一级免费| 国产欧美一区二区精品婷婷 | 欧美α欧美αv大片| 91精品婷婷国产综合久久性色| 欧美日韩在线一区二区| 欧美日韩激情一区二区| 欧美精品 国产精品| 日韩一区二区麻豆国产| 日韩欧美激情一区| 国产午夜精品理论片a级大结局| 国产女同互慰高潮91漫画| 国产精品入口麻豆原神| 日韩毛片一二三区| 午夜成人在线视频| 全国精品久久少妇| 国产精品18久久久久久vr| 高清国产午夜精品久久久久久| 99re这里只有精品首页| 欧美三级在线视频| 精品福利在线导航| 中文字幕中文字幕在线一区| 亚洲另类一区二区| 日日嗨av一区二区三区四区| 九九精品视频在线看| www.久久精品| 欧美日韩在线播放| 欧美精品一区二区久久婷婷| 国产精品久久久久婷婷二区次| 一区二区三区精品视频在线| 蜜桃久久久久久久| 成人午夜激情在线| 8x8x8国产精品| 国产欧美一区二区三区沐欲| 亚洲精品国产无天堂网2021| 久久电影网站中文字幕| www.亚洲人| 日韩视频在线观看一区二区| 国产精品久久一卡二卡| 亚洲成人7777| 99精品久久免费看蜜臀剧情介绍| 欧美日韩1234| 国产精品沙发午睡系列990531| 亚洲成人综合在线| 高清不卡一区二区| 91精品国产入口| 亚洲欧美另类图片小说| 激情深爱一区二区| 欧美精品一二三| 综合激情网...| 国产乱子伦视频一区二区三区 | 中文字幕欧美国产| 日本不卡视频在线观看| 一本大道久久a久久精二百| 欧美精品一区二区在线播放| 亚洲一区中文在线| 成人免费va视频| 日韩欧美国产精品一区| 亚洲自拍与偷拍| www.亚洲色图.com| 国产日韩v精品一区二区| 视频一区二区国产| 在线观看免费亚洲| 1000部国产精品成人观看| 国产乱码精品一区二区三区av| 91精品麻豆日日躁夜夜躁| 尤物视频一区二区| 99久久精品国产精品久久| 久久久午夜精品| 国产原创一区二区三区| 日韩三级精品电影久久久| 日韩电影免费一区| 在线不卡a资源高清| 亚洲一卡二卡三卡四卡| 色噜噜狠狠成人中文综合| 亚洲色欲色欲www在线观看| 北条麻妃国产九九精品视频| 国产精品天天看| 99re这里只有精品视频首页| 亚洲色图制服丝袜| 99视频一区二区三区| 亚洲欧洲三级电影| av亚洲精华国产精华精华|