开发相关
mzz edited this page Aug 6, 2021
·
3 revisions
docker-compose -f docker-compose.dev.yml up --build
gin 会监测文件改动并热重载,见codegangsta/gin。
如果出现ERROR: ...Connot start service...container...is not running
,尝试添加参数-V
<程序>::=<行>{\n<行>}
<行>::=<说明>|<路由规则>
<说明>::=<标识符>:<定义语句>
<定义语句>::=<标识符>=<调用>
<调用>::=<标识符>(<参数列表>)
<参数列表>::=<值>{,<值>}{,<值>:<值>}|<值>:<值>{,<值>:<值>}
<值>::={<非界符>}|"{<字符>}"|'{<字符>}'
<非界符>::=<除<界符>外的所有字符>
<界符>::=,|'|"|(|)
<路由规则>::=<调用>{&&<调用>}-><标识符>
<标识符>::=<字母>{<字母>|<数字>}
<字母>::=a|b|...|Y|Z
<数字>::=0|1|...|9
基于LR(1)文法(有两个状态存在特例[special1]),见csv
https://www.processon.com/view/link/5daf2228e4b06b7d6fb92480
<程序>::=<行>{\n<行>}
<行>::=<说明>|<路由规则>
<说明>::=<标识符>:<定义语句>
<定义语句>::=<标识符>=<调用>
<调用>::=<标识符>(<参数列表>)
<参数列表>::=<值>{,<值>}{,<值>:<值>}|<值>:<值>{,<值>:<值>}
<值>::={<非界符>}|"{<字符>}"|'{<字符>}'
<非界符>::=<除<界符>外的所有字符>
<界符>::=,|'|"|(|)
<路由规则>::=<调用>{&&<调用>}-><标识符>
<标识符>::=<字母>{<字母>|<数字>}
<字母>::=a|b|...|Y|Z
<数字>::=0|1|...|9
0 *->S
1 S->AR
2 R->rAR
3 R->ε
4 A->B
5 A->C
6 B->D:E
7 E->D=F
8 F->D\(G\)
9 G->HMN
10 M->,HM
11 M->ε
12 N->,H:HN
13 N->ε
14 G->H:HN
15 H->O
16 O->IO
17 O->ε
18 H->'Y'
19 H->"Z"
20 Y->UY
21 Y->ε
22 Z->VZ
23 Z->ε
24 C->FQ->D
25 Q->&&FQ
26 Q->ε
27 D->kT
28 T->kT
29 T->lT
30 T->ε
31 U->k
32 U->l
33 U->n
34 U->y
35 V->k
36 V->l
37 V->n
38 V->z
39 I->k
40 I->l
41 I->n
42 k->a|b|...|Y|Z|...中|...|の|...
43 l->0|1|...|9
44 n->除了界符o和:&->=的标点符号
45 o->,|'|"|\(|\)
46 y->,|"|\(|\)
47 z->,|'|\(|\)
48 E->D
49 A->ε
50 r->\n
FIRST(S')=FIRST(S)={k}
FIRST(S)=FIRST(A)={k}
FIRST(R)={\n ε}
FIRST(A)=FIRST(B) ∪ FIRST(C)={k}
FIRST(B)=FIRST(D)={k}
FIRST(C)=FIRST(F)={k}
FIRST(D)={k}
FIRST(E)=FIRST(D)={k}
FIRST(F)=FIRST(D)={k}
FIRST(G)=FIRST(H)={ k l n ε ' " }
FIRST(M)={ , ε }
FIRST(N)={ , ε }
FIRST(H)=FIRST(O) ∪ {' "}={ k l n ' " ε }
FIRST(Y)=FIRST(U) ∪ {ε}={ k l n , " ( ) ε }
FIRST(Z)=FIRST(V) ∪ {ε}={ k l n , ' ( ) ε }
FIRST(U)={k l n , " ( )}
FIRST(V)={k l n , ' ( )}
FIRST(O)=FIRST(I) ∪ {ε}={ k l n ε }
FIRST(Q)={& ε}
FIRST(T)={k l ε}
FIRST(I)={k l n}
FOLLOW(S')={#}
FOLLOW(S)=FOLLOW(S')={#}
FOLLOW(R)=FOLLOW(S)={#}
FOLLOW(A)=FIRST(R)-ε followR={ \n # }
FOLLOW(B)=FOLLOW(A)={\n #}
FOLLOW(C)=FOLLOW(A)={\n #}
FOLLOW(D)={ : = ( } ∪ FOLLOW(C) followE={ : = ( \n # }
FOLLOW(E)=FOLLOW(B)={\n #}
FOLLOW(F)=FOLLOW(E) ∪ FIRST(Q) followQ={\n # & -}
FOLLOW(G)={)}
FOLLOW(M)=FIRST(N)-ε followG={ , ) }
FOLLOW(N)=FOLLOW(G)={ ) }
FOLLOW(H)=(FIRST(M)-ε) ∪ followG followM followN ∪ {:} ∪ FIRST(N)={ , : ) }
FOLLOW(Y)={'}
FOLLOW(Z)={"}
FOLLOW(U)=FIRST(Y)-{ε} followY={ k l n , ' " ( ) }
FOLLOW(V)=FIRST(Z)-{ε} followZ={ k l n , ' " ( ) }
FOLLOW(O)=FOLLOW(H)={ , : ) }
FOLLOW(P)={ ' " }
FOLLOW(Q)={ - }
FOLLOW(T)=FOLLOW(D)={ : = ( \n # }
FOLLOW(I)=FIRST(O)-ε followO={ k l n , : ) }
Telegram User Group (International): https://t.me/v2raya
Telegram 用户交流群(中文): https://t.me/v2raya_zh