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

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

?? testfirst.c

?? 一個C語言編譯器
?? C
?? 第 1 頁 / 共 2 頁
字號:
/*#define R_SIZE 8
#define N_SIZE 5
#define T_SIZE 7  
#include "parse.c"
#include <string.h>
#include <ctype.h>
#include <stdio.h>
#define R_SIZE 7
#define N_SIZE 4
#define T_SIZE 7  
//#define ID 320
#define MAX_STATE 100
#define STACK_SIZE 100
//int NT[N_SIZE+T_SIZE]={'E','A','T','B','F','+','(',')','*',ID,'#','$'};
int NT[N_SIZE+T_SIZE]={'S','E','T','F','+','*','(',')',ID,'#','$'};

struct node
{	
	int len;       //產生式長度
	int s[10];  //s[0] 代表左部 ,s[1]---s[len]是產生式右部各文法符號的索引
} infer[R_SIZE];  //存取的是產生式集合
struct group
{
	int len;        //集合中的元素的個數
	int s[T_SIZE];  //存取的是終結符的索引
} First[N_SIZE],Follow[N_SIZE];        //分別代表first集,follow集
struct item
{
    int index ; //在infer數組中的位置(產生式的序號)
    int position; //在產生式中的位置 
    struct item *next; 
} ;   
struct cluster
{
    int size;         //項目集中所含項目的個數
    struct item *head;   //指向首項目
} item_cluster[MAX_STATE];  //存取的集簇

struct s_stack
{
	int tag;    //0表示狀態,1表示輸入的文法符號
	int value;  //表示狀態值或者文法符號值
} ; 
struct m_stack        //文法符號棧
{
	int top;
	struct s_stack syntax_stack[STACK_SIZE]; 
}  main_stack;ss
int curr_state=0; //當前狀態集

int gto[MAX_STATE][N_SIZE+T_SIZE];
struct do_action
{
	int actioning;   //-1表示錯誤,0表示接受,1表示用產生式規約,2表示狀態轉移,3預置其他狀態
	int number;
} action[MAX_STATE][T_SIZE]; */

#include <syntax.h>
void init_syntax()
{	
	int i,j;
	init();
/*	infer[0].s[0]=ntoindex('E');
	infer[0].s[1]=ntoindex('T');
	infer[0].s[2]=ntoindex('A');
	infer[0].s[3]=ntoindex('$');
	infer[0].len=2;

	infer[1].s[0]=ntoindex('A');
	infer[1].s[1]=ntoindex('+');
	infer[1].s[2]=ntoindex('T');
	infer[1].s[3]=ntoindex('A');
	infer[1].s[4]=ntoindex('$');
	infer[1].len=3;

	infer[2].s[0]=ntoindex('A');
	infer[2].s[1]=ntoindex('#');
	infer[2].s[2]=ntoindex('$');
	infer[2].len=1;

	infer[3].s[0]=ntoindex('T');
	infer[3].s[1]=ntoindex('F');
	infer[3].s[2]=ntoindex('B');
	infer[3].s[3]=ntoindex('$');
	infer[3].len=2;

	infer[4].s[0]=ntoindex('B');
	infer[4].s[1]=ntoindex('*');
	infer[4].s[2]=ntoindex('F');
	infer[4].s[3]=ntoindex('B');
	infer[4].s[4]=ntoindex('$');
	infer[4].len=3;
	
	infer[5].s[0]=ntoindex('B');
	infer[5].s[1]=ntoindex('#');
	infer[5].s[2]=ntoindex('$');
	infer[5].len=1;

	infer[6].s[0]=ntoindex('F');
	infer[6].s[1]=ntoindex('(');
	infer[6].s[2]=ntoindex('E');
	infer[6].s[3]=ntoindex(')');
	infer[6].s[4]=ntoindex('$');
	infer[6].len=3;

	infer[7].s[0]=ntoindex('F');
	infer[7].s[1]=ntoindex(ID);
	infer[7].s[2]=ntoindex('$');
	infer[7].len=1;   */
	for(i=0;i<R_SIZE;i++)
	{
		for(j=0;j<10;j++)
			infer[i].s[j]=-1;
	}

	infer[0].s[0]=ntoindex('S');
	infer[0].s[1]=ntoindex('E');
	infer[0].s[2]=ntoindex('$');
	infer[0].len=1;

	infer[1].s[0]=ntoindex('E');
	infer[1].s[1]=ntoindex('E');
	infer[1].s[2]=ntoindex('+');
	infer[1].s[3]=ntoindex('T');
	infer[1].s[4]=ntoindex('$');
	infer[1].len=3;

	infer[2].s[0]=ntoindex('E');
	infer[2].s[1]=ntoindex('T');
	infer[2].s[2]=ntoindex('$');
	infer[2].len=1;
	
	infer[3].s[0]=ntoindex('T');
	infer[3].s[1]=ntoindex('T');
	infer[3].s[2]=ntoindex('*');
	infer[3].s[3]=ntoindex('F');
	infer[3].s[4]=ntoindex('$');
	infer[3].len=3;

	infer[4].s[0]=ntoindex('T');
	infer[4].s[1]=ntoindex('F');
	infer[4].s[2]=ntoindex('$');
	infer[4].len=1;

	infer[5].s[0]=ntoindex('F');
	infer[5].s[1]=ntoindex('(');
	infer[5].s[2]=ntoindex('E');
	infer[5].s[3]=ntoindex(')');
	infer[5].s[4]=ntoindex('$');
	infer[5].len=3;
	
	infer[6].s[0]=ntoindex('F');
	infer[6].s[1]=ntoindex(ID);
	infer[6].s[2]=ntoindex('$');
	infer[6].len=1;




	for(i=0;i<N_SIZE;i++)
	{
		First[i].len=0;
	}
	
  Follow[0].s[0]=ntoindex('$');
  Follow[0].len=1;	
  
  //item_cluster[0].size=1;
  //item_cluster[0].head=(struct cluster *)malloc(sizeof(struct cluster));
 // head->index=0;
 // head->position=1;
  //head->next=NULL;
  
  for(i=0;i<MAX_STATE;i++)
  {
      item_cluster[i].size=0;
  } 
  for(i=0;i<MAX_STATE;i++)
  {
	  for(j=0;j<N_SIZE+T_SIZE;j++)
		  gto[i][j]=-1;
  }
    for(i=0;i<MAX_STATE;i++)
  {
	  for(j=0;j<T_SIZE;j++)
	  {
		  action[i][j].actioning=-1;
	  }
  }
}
int total_len(struct group First[])
{
	int i;
	int sum=0;
	for(i=0;i<N_SIZE;i++)
	{
		sum+=First[i].len;
	}
	return sum;
}
int ntoindex(int n)
{
	int i;	
	for(i=0;i<N_SIZE+T_SIZE;i++)
	{
		if(NT[i]==n)
		{			
			return i;
		}
	}
	return -1;
}

int is_in(int member,int t) //t代表索引,member代表終結符的索引
{
	int i;
	int k=0;
	for(i=0;i<First[t].len;i++)
	{
		if(member==First[t].s[i])
		{
			k=1;
			break;
		}
	}
	if(k==1)
		return i;
	else
		return -1;
}
void add_char(int next,int curr,int div) //div 有效時均為空
{ 
	int i;
	int k;
	if(next==9)
	printf("enter id\n");
	if(next==10)
	printf("enter #");
	if(next>=N_SIZE)
	{
		if(is_in(next,curr)==-1)
		{	
		First[curr].s[First[curr].len]=next;
		(First[curr].len)++;
		printf(" terminator %c add to %c\n",NT[next],NT[curr]);
		}
	}
	else
	{
    for(i=0;i<First[next].len;i++)
	{
		if(is_in(First[next].s[i],curr)==-1)
		{
			if(First[next].s[i]==div)
				continue;
			if(First[next].s[i]>=N_SIZE)
			{	
		First[curr].s[First[curr].len]=First[next].s[i];
		(First[curr].len)++;
		printf("next terminator %c add to %c\n",NT[next],NT[curr]);
		    }
		/*	else
			{
				First[curr].s[First[curr].len]=next;
				(First[curr].len)++;
				printf("nonterminator %c add to %c",NT[next],NT[curr]);
			} */
		}
	}
	}	
}
void first(int index)
{
	int i=0;
	int j,k;
	j=infer[index].s[0];
	for(i=1;i<=infer[index].len;i++)
	{		
		k=infer[index].s[i];		
		if(k>=N_SIZE)
		{
			add_char(k,j,-10);
		//	printf("add a terminator\n");
		if(k==9 || k==10)
		  printf("enter %c\n",NT[k]);
			break;
		}
		if(k<N_SIZE)
		{
			
			if(is_in(ntoindex('#'),k)==-1)
			{
				add_char(k,j,-10);
			//	printf("add a nonterminator has no #\n");
				break;
			}
			if(i<infer[index].len-1)
			{
			add_char(k,j,ntoindex('#'));
		//	printf("add a nonterminator has # \n");
            }			
			else
			{
                   add_char(k,j,-10);
  	        //       printf("add a nonterminator has # last\n");
           }    
			
		}	

	}
}

int in_follow(int member,int t)
{
    int i;
	int k=0;
	for(i=0;i<Follow[t].len;i++)
	{
		if(member==Follow[t].s[i])
		{
			k=1;
			break;
		}
	}
	if(k==1)
		return i;
	else
		return -1;
}  
  
void first_follow(int next,int curr,int div)
{
	int i;
	int k;
	if(next==9)
	printf("enter id\n");
	if(next==10)
	printf("enter #");
	if(next>=N_SIZE)
	{
		if(in_follow(next,curr)==-1)
		{	
		Follow[curr].s[Follow[curr].len]=next;
		(Follow[curr].len)++;
		printf(" terminator %c add to %c\n",NT[next],NT[curr]);
		}
	}
	else
	{
    for(i=0;i<First[next].len;i++)
	{
		if(in_follow(First[next].s[i],curr)==-1)
		{
			if(First[next].s[i]==div)
				continue;
			if(First[next].s[i]>=N_SIZE)
			{	
		Follow[curr].s[Follow[curr].len]=First[next].s[i];
		(Follow[curr].len)++;
		printf("next terminator %c add to %c\n",NT[next],NT[curr]);
		    }
		/*	else
			{
				First[curr].s[First[curr].len]=next;
				(First[curr].len)++;
				printf("nonterminator %c add to %c",NT[next],NT[curr]);
			} */
		}
	}
}		
}
void follow_follow(int source,int des)
{
  int i,j;
  if(source>=N_SIZE || des>=N_SIZE)
  printf("error\n");
  
  for(i=0;i<Follow[source].len;i++)
  {
      
      if(in_follow(Follow[source].s[i],des)==-1)
      {
          if(Follow[source].s[i]>=N_SIZE)
          {
          Follow[des].s[Follow[des].len++]=Follow[source].s[i];
          printf("add follow %c to %c\n",NT[source],NT[des]);
      }    
      }    
  }      
} 
   
void follow(int index)
{
    int i,j,k,l,len;
    int flag=0;
    i=infer[index].s[0];    
    for(k=1;k<=infer[index].len;k++)
    {
        if(infer[index].s[k]>=N_SIZE)
        continue;       
               
        for(l=k+1;l<=infer[index].len;l++)
        {
            if(infer[index].s[l]>=N_SIZE)
            {             
                    first_follow(infer[index].s[l],infer[index].s[k],-10);
                    flag=1; 
                    break;                               
            }    
          if(is_in(ntoindex('#'),infer[index].s[l])==-1)
            {
                flag=1;
                first_follow(infer[index].s[l],infer[index].s[k],10);
                break;
            } 
            first_follow(infer[index].s[l],infer[index].s[k],10);                  
        } 
        if(flag==0)         
             follow_follow(i,infer[index].s[k]) ;  
    }    
} 
int add_more_item(struct item *q,int state_index)
{
  struct item *m;
  int i,j;
  m=item_cluster[state_index].head;
  j=item_cluster[state_index].size;
  i=0;
  while(i<j)
  {
      if(q->index==m->index && q->position==m->position)  //不能添加該item返回0,否則返回1
      return 0;
      m=m->next;
      i++;
  } 
  return 1;    
}     
int closure(struct item *p)               //返回所加入的狀態集的指針,參數是項目
{
    int i,j,k;
	int f_number,n_number;   
    struct item *curr;
	struct item *curr_add;	

	int add[R_SIZE];
	for(i=0;i<R_SIZE;i++)
	{
		add[i]=0;
	}
	f_number=0;
	n_number=1;

	item_cluster[curr_state].head=(struct item *)malloc(sizeof(struct item));	
	item_cluster[curr_state].head->index=p->index;
	item_cluster[curr_state].head->position=p->position;
	item_cluster[curr_state].head->next=NULL;
	item_cluster[curr_state].size++;
	curr=item_cluster[curr_state].head;
	add[curr->index]=1;
	curr_add=curr;	
	while(f_number!=n_number)
	{
		k=n_number-f_number;
		f_number=item_cluster[curr_state].size;
		printf("---f_number : %d----\n",f_number);
		for(j=0;j<k;j++)
		{
			for(i=0;i<R_SIZE;i++)
			{			
     
					if(!add[i])
				{				
                    if(infer[i].s[0]==infer[curr->index].s[curr->position])
					{
					
                        curr_add->next=(struct item *)malloc(sizeof(struct item));	
						curr_add->next->index=i;
						curr_add->next->position=1;
						(item_cluster[curr_state].size)++;
						curr_add->next->next=NULL;
						curr_add=curr_add->next;
						add[i]=1;
						printf("add number %d and position %dto group\n",i,1);
					}
				}
			}
			
			curr=curr->next;
		}        		
		n_number=item_cluster[curr_state].size;
		printf("----n_number : %d----\n",n_number);
	}
	curr=item_cluster[curr_state].head;
	for(i=0;i<n_number;i++)
	{
	//	printf("infer %d position %d\n",curr->index,curr->position);
		curr=curr->next;
	}
    return (curr_state++);
}  

struct item * get_closure(struct item *p)               //返回所加入的狀態集的指針,參數是項目
{
    int i,j,k;
    int add[R_SIZE];
	int f_number,n_number; 
    int i_size=0;   
    struct item *curr;
	struct item *curr_add;	
	struct item *head;	
	for(i=0;i<R_SIZE;i++)
		add[i]=0;
	f_number=0;
	n_number=1;

	head=(struct item *)malloc(sizeof(struct item));	
	head->index=p->index;
    head->position=p->position;
    head->next=NULL;
	i_size++;
	curr=head;	
	curr_add=curr;	
	//printf("added header is %c\n",NT[infer[curr->index].s[curr->position]]);
	while(f_number!=n_number)
	{
		k=n_number-f_number;
		f_number=i_size;
		//printf("---f_number : %d----\n",f_number);
		for(j=0;j<k;j++)
		{
			for(i=0;i<R_SIZE;i++)
			{			
     
					if(!add[i])
				{				
                    if(infer[i].s[0]==infer[curr->index].s[curr->position])
					{
					
                        curr_add->next=(struct item *)malloc(sizeof(struct item));	
						curr_add->next->index=i;
						curr_add->next->position=1;
						i_size++;
						curr_add->next->next=NULL;
						curr_add=curr_add->next;
						add[i]=1;
						//printf("add number %d and position %d to group\n",i,1);
					}
				}
			}
		//	printf("added header is %c\n",NT[infer[curr->index].s[curr->position]]);
			curr=curr->next;
			
		}        		
		n_number=i_size;
		//printf("----n_number : %d----\n",n_number);
	}
	curr=head;
	printf("-----get closure ------\n ");
	for(i=0;i<n_number;i++)
	{
		//printf("infer %d position %d\n",curr->index,curr->position);
		curr=curr->next;

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲男人天堂一区| 久久久亚洲精华液精华液精华液 | 久久丝袜美腿综合| 国内精品第一页| ww亚洲ww在线观看国产| 国产一区二区三区在线观看免费| 精品福利视频一区二区三区| 国产真实乱偷精品视频免| 久久精品人人做人人爽97| 成人黄动漫网站免费app| 亚洲欧美另类久久久精品| 欧美无乱码久久久免费午夜一区| 亚洲成人av在线电影| 欧美一区永久视频免费观看| 久久国产精品露脸对白| 国产欧美中文在线| 91官网在线免费观看| 免费视频最近日韩| 国产丝袜美腿一区二区三区| 色狠狠一区二区三区香蕉| 午夜精品福利一区二区蜜股av| 日韩欧美国产一区二区在线播放| 国产成人免费高清| 亚洲综合偷拍欧美一区色| 精品国产伦理网| 成人一区二区三区在线观看| 亚洲国产日韩a在线播放| 精品免费视频一区二区| 91麻豆国产自产在线观看| 蜜桃av一区二区| 18成人在线视频| 精品国产91乱码一区二区三区 | 久久 天天综合| 综合中文字幕亚洲| 欧美xxxx在线观看| 91蝌蚪porny九色| 色悠悠久久综合| 免费观看30秒视频久久| 亚洲欧美日韩成人高清在线一区| 日韩一区二区三区视频在线观看| www.欧美日韩国产在线| 日本三级韩国三级欧美三级| 中文字幕一区二区三区乱码在线 | 国产一区二区影院| 亚洲一区二区五区| 国产精品成人一区二区艾草 | 亚洲精品国产精华液| 久久久亚洲午夜电影| 欧美高清hd18日本| 成人av电影免费观看| 国产麻豆精品在线| 日本美女视频一区二区| 亚洲精品久久久蜜桃| 国产色产综合产在线视频| 制服丝袜一区二区三区| 在线观看亚洲精品| 粉嫩13p一区二区三区| 久久国产精品区| 免费欧美在线视频| 日韩精品色哟哟| 午夜精品福利一区二区三区av| 亚洲欧美另类小说视频| 国产精品伦理在线| 国产欧美一区在线| 国产欧美日韩中文久久| 久久久五月婷婷| 日韩免费性生活视频播放| 91精品免费在线| 777欧美精品| 69久久99精品久久久久婷婷| 欧美日韩国产精品自在自线| 精品视频1区2区| 久久亚洲精华国产精华液 | 国产视频一区二区在线| 久久久久久久久久久久久女国产乱 | 日韩精品久久理论片| 午夜视频在线观看一区二区| 亚洲一区二区视频在线| 亚洲图片欧美色图| 偷拍亚洲欧洲综合| 日韩激情视频在线观看| 亚瑟在线精品视频| 男人的j进女人的j一区| 美国十次了思思久久精品导航| 日韩电影网1区2区| 麻豆专区一区二区三区四区五区| 美女爽到高潮91| 精品一区二区成人精品| 激情欧美一区二区三区在线观看| 久久精品国产成人一区二区三区 | 欧美日韩精品欧美日韩精品| 欧美日韩视频一区二区| 91精品免费观看| 精品国产百合女同互慰| 国产日产欧美一区| 国产精品久线观看视频| 亚洲一区视频在线观看视频| 麻豆视频一区二区| 国产白丝网站精品污在线入口| 国产不卡视频一区| 在线视频观看一区| 制服丝袜亚洲网站| 国产午夜精品一区二区| 国产精品久久久久一区| 亚洲一区二区三区四区五区黄 | 国产日韩精品一区二区三区在线| 中文字幕电影一区| 亚洲综合久久久久| 麻豆视频观看网址久久| 国产成人av一区二区| 色综合久久综合网| 欧美一二区视频| 国产精品人成在线观看免费| 一区二区三区四区高清精品免费观看 | 亚洲色图制服诱惑| 日韩av中文在线观看| 岛国精品在线播放| 欧美情侣在线播放| 久久亚洲一级片| 亚洲午夜久久久久久久久电影院| 国产一区二区三区综合| 色悠悠久久综合| 久久久不卡网国产精品一区| 亚洲人成网站在线| 激情五月播播久久久精品| 色婷婷国产精品| 337p日本欧洲亚洲大胆精品| 亚洲精品第1页| 国产91对白在线观看九色| 欧美另类久久久品| 日韩伦理免费电影| 国内偷窥港台综合视频在线播放| 91久久一区二区| 国产三级一区二区| 九九视频精品免费| 欧美日韩亚州综合| 亚洲精品视频自拍| 成人av网址在线观看| 欧美zozo另类异族| 水野朝阳av一区二区三区| 日本精品一级二级| 欧美国产日韩一二三区| 久久成人久久爱| 欧美日韩国产一二三| 一区二区三区精品视频| 成人午夜视频免费看| 久久综合九色综合欧美亚洲| 日韩电影免费一区| 在线免费观看日韩欧美| 中文字幕欧美一| 成人免费三级在线| 国产亚洲一区二区三区在线观看| 久久精品国产77777蜜臀| 欧美三级一区二区| 亚洲综合一二三区| 色综合天天性综合| 中文字幕欧美一区| 波多野结衣的一区二区三区| 国产亚洲欧美一级| 国产激情精品久久久第一区二区| 欧美变态凌虐bdsm| 久久精品国产色蜜蜜麻豆| 日韩三级在线观看| 毛片一区二区三区| 欧美va亚洲va| 国产一区二区三区免费看| 精品国产乱码久久久久久1区2区| 奇米777欧美一区二区| 69久久99精品久久久久婷婷| 视频一区二区欧美| 欧美一区二区视频在线观看2022| 三级久久三级久久| 欧美一级艳片视频免费观看| 老司机免费视频一区二区| 精品国产不卡一区二区三区| 国产盗摄一区二区| 国产精品色在线| 91原创在线视频| 亚洲一区自拍偷拍| 在线综合视频播放| 国产做a爰片久久毛片| 中文字幕欧美三区| 99re在线精品| 亚洲高清不卡在线| 日韩欧美成人一区二区| 国产精品18久久久久久vr| 国产欧美va欧美不卡在线| 99久久久精品| 亚洲va韩国va欧美va| 欧美不卡在线视频| 成人午夜免费av| 亚洲国产精品人人做人人爽| 欧美一区二区免费视频| 国产综合久久久久久鬼色| 最新高清无码专区| 91精品啪在线观看国产60岁| 国产精品综合二区| 亚洲在线观看免费视频| 日韩欧美国产一区二区三区| eeuss鲁片一区二区三区在线看|