構造識別規範句型活字首DFA的源代

2021-07-01 23:13:41 字數 4058 閱讀 6200

#include

#include

#include

#include

#include

#include

#include

using namespace std;

#define project_set_size 20 

#define project_id_pos 0

#define grammer_id_pos 1

#define grammer_start_char_pos 5

#define bfchar_pos 2

#define afchar_pos 3

#define project_len_pos 4

#define id 10000

char st[20][30]; 

int r;

struct grammer

;typedef struct

selemtype;

struct gprjt

;typedef struct prjset

prjset,*pprjset;

struct head

;char dot = '~';

grammer g;

gprjt project;

head root;

void input();

int openfile(char *s);

void createprojectset();

void closure(prjset *prjset);

int go(int rk, prjset *prjset);

void printpojectset();

int isinset(char *s, char ch);

void joinset(char *s, char ch);

void main()

st[r][m]=z[m];

} st[r][m]='@'; 

r=r+1;

if(w==1) break;

} st[0][0]=st[1][0];st[0][1]='-';st[0][2]='>';st[0][3]=st[1][0];st[0][4]='@';

int count;

int i;

int j;

count = r;

g.line=count;

g.g=(char **)malloc(sizeof(char *)*g.line);

for(i=0; i

for(int x=0;x

else  }

}g.vn[0] = g.vt[0] = 0;

for(i=0; i

}g.s = g.vn[1];

count = 0;

for(i=0; i

count += g.g[i][1];

if((project.gp=(char **)malloc(sizeof(char *)*count)) == null)exit(1);

int k;

int pointpos;

int m;

int n;

k = 0;

for(i=0; i

project.gp[k][pointpos] = dot;

for(m=pointpos+1; m<=project.gp[k][project_len_pos]+project_len_pos; m++)

if(pointpos==project.gp[k][project_len_pos]+project_len_pos)

else

if(pointpos==grammer_start_char_pos+1)

else

pointpos++;

k++;}}

project.s = g.s;

project.line = k;

cout<<"輸出拓廣文法:"<<"\n";

for(i=0; i

cout<<"\n";

}cout<<"輸出專案集:"<<"\n";

cout<<"--------------------------------------\n";

for(i=0; i

cout<<"\n";

}cout<<"--------------------------------------\n";

cout<<"\n";

createprojectset();

printpojectset();

for(;;)

;int s=1;

int k=0;

for(int e=0;e

int t=0;

for(i=1;i<=p->pointafter[0]; i++) }

if(t==0)

} if(k==0)

cout<<"\n";

} else cout<<"該字串不是該文法的活字首"<<"\n";

cout<<"繼續輸入字串?(輸入n停止輸入,輸入其他字元繼續)";

char q;cin>>q;

if(q=='n') break;}}

} void createprojectset()

}closure(root.i);

int pos;

for(q=root.i; q!=null; q=q->next)

closure(p);

pprjset ptr;

int flag;

int flagsame;

flagsame = 1;

flag = 1;

for(ptr=root.i; ptr!=null; ptr=ptr->next)

//if 

}//for

}//if

else

//else

if(flag == 0)

flagsame = 0;

else

}//for

if(flagsame)//flagsame == 1 , 有與*p相同的專案集,刪除*p

else//將p掛到root.tail

}//for

}//for

}//createprojectset

void closure(prjset *pset)

//if

}//for

}//if

}//for 

}//closure

int go(int rk, pprjset prjset)

int pointpos;

pointpos = isinset(&project.gp[rk][project_len_pos], dot);

pointpos += project_len_pos;

rksize = project.gp[rk][project_len_pos];

rks = project.gp[rk][grammer_start_char_pos];

for(i=0; i

}//for

if(flag)

//將專案圓點後的字元加入

return project.gp[i][project_id_pos];

}//if

else

return -1;

}//if

}//for

}//go

void printpojectset()

//for

cout<<"\n";

}//for

cout<<"\n";

for(i=1; i<=p->pointafter[0]; i++)

//for

}//for

cout<<"---------------------\n";

}//printpojectset

int isinset(char *s, char ch)

return 0;

}void joinset(char *s, char ch)

}

JS建構函式的封裝規範

今天在學習js過程中,了解到了js建構函式的封裝規範,下面簡單記錄一下 在很多企業開發中,相關技術人員可能不止你乙個,可能有好幾個甚至乙個團隊來協同進行開發,每個人各司其職,寫不同的 那麼為了各自寫的功能易讀寫。都會吧自己寫的功能封裝成乙個模組。這時,建構函式就起了很大的作用。簡單來說就是吧自己需要...

人臉識別翼閘使用規範 人臉識別翼閘安裝步驟

人臉識別翼閘安裝主要有人臉識別安裝和閘機安裝兩部分,安裝人臉識別翼閘閘機前建議先仔細閱讀產品安裝說明 第一步 先在閘機上安裝好人臉識別,安裝方法如下 1 首先在距離閘機邊緣400mm的中心位置開乙個直徑為48mm的孔位 2 旋開人臉識別裝置底部的六角螺絲。3 把人臉識別裝置安裝在閘機的孔位上,並旋轉...

人臉識別翼閘使用規範 不同型別人臉識別閘機展示

人臉識別閘機是基於強大的人臉深度學習技術 大資料技術,通過比對攝像頭抓拍的現場人臉和資料庫資訊,對行人進行身份認證,比對結果一致則放行,具有識別快速精準,安保級別高等優點。人臉識別閘機現已快速進入人們生活與辦公的場所,應用於機場 火車站 汽車站 海關 商業樓宇 企業園區 智慧型社群等。同時機型多樣,...