扫描源程序,转换为基于单词理解的源程序(种类,单词)
在電腦科學中,正規文法是產生式規則取下述形式的一種形式文法(N, Σ, P, S):
常用的符号:
l:<字母/数字>
d:<无符号整数>
就是正则表达式…
常用的:
∣ , ∗ |,* ∣,∗
A → x ∗ y A\rightarrow x^*y A→x∗y
A → x B A → y B → x B B → y A\rightarrow xB\\A\rightarrow y\\B\rightarrow xB\\B\rightarrow y A→xBA→yB→xBB→y
A → x ∣ y A\rightarrow x|y A→x∣y
A → x A → y A\rightarrow x\\ A\rightarrow y A→xA→y
产生式 | 正规式 | |
---|---|---|
1 | A → x B A\rightarrow xB A→xB B → y B\rightarrow y B→y | A = x y A=xy A=xy |
2 | $A\rightarrow xA | y$ |
3 | A → x A\rightarrow x A→x A → y A\rightarrow y A→y | $A=x |
最后得到一个正规式.
See http://blog.GYsina.com.cn/s/blog_59a1e8de01009vsf.html
See https://zh.wikipedia.org/wiki/%E7%A1%AE%E5%AE%9A%E6%9C%89%E9%99%90%E7%8A%B6%E6%80%81%E8%87%AA%E5%8A%A8%E6%9C%BA
一个确定有穷自动机的五元组:
f f f也可以扩充为自身的闭包: K × Σ ∗ → K K\times\Sigma^*\rightarrow K K×Σ∗→K映射.
描述: f ( A , b ) = B f(A,b)=B f(A,b)=B通过b从A转移到B.
確定有限狀態自動機從起始狀態開始,一個字元接一個字元地讀入一個字串 w ∈ Σ ∗ w ∈ Σ ∗ {\displaystyle w\in \Sigma ^{*}}w\in \Sigma ^{*} w∈Σ∗w∈Σ∗(這裡的 ∗ ∗ {\displaystyle {}^{*}}{}^{*} ∗∗指示Kleene星號算子。),並根據給定的轉移函式一步一步地轉移至下一個狀態。在讀完該字串後,如果該自動機停在一個屬於F的接受狀態,那麼它就接受該字串,反之則拒絕該字串。
一个确定有穷自动机的接受的串集合是L(M), L ( M ) = { α ∣ α ∈ Σ ∗ , f ′ ( S , α ) ∈ Z } L(M)=\{\alpha|\alpha\in\Sigma^*,f'(S,\alpha)\in Z\} L(M)={α∣α∈Σ∗,f′(S,α)∈Z}
一个不确定有穷自动机的五元组:
所谓的不确定就是同样的状态,同样的输入,导向的下一个状态是一个集合.
函数的扩充也是基于幂集运算.
KaTeX parse error: No such environment: equation at position 21: …,a\beta)=\begin{̲e̲q̲u̲a̲t̲i̲o̲n̲}̲ \left\{ …
当 f ′ ( I , a β ) f'(I,a\beta) f′(I,aβ)的集中至少有一个是接受状态,称该符号串是可识别的.
自动机以接受符号串的集合判定等价.
L ( M 1 ) = L ( M 2 ) L(M_1)=L(M_2) L(M1)=L(M2)
ξ _ c l o s u r e ( I ) \xi \_closure(I) ξ_closure(I)是非确定自动机下的闭包运算,
假定I是NFA M的状态集的一个子集, 我们定义
ε_CLOSURE(I)为:
eg.
求 ξ _ c l o s u r e ( { 3 , 8 } ) \xi \_closure(\{3,8\}) ξ_closure({3,8})在NFA M下
3:3,6,7,0,1,2,4
8:8,None
将 NFA 转换成等价的 DFA 里, NFA 到相应的 DFA 的构造的基本思想是让 DFA 的每一个状态对应 NFA 的一组状态。也就是说让 DFA 使用它的状态去记录在 NFA 读入一个输入符号后可能达到的所有状态,在读入输入符号之后, DFA 处在 a 1 a 2 …a n 那样一个状态,该状态表示这个 NFA 的状态的一个子集 T , T 是从 NFA 的开始状态沿着某个标记为 a 1 a 2 …a n 可以达到的那些状态构成的。
设 N F A M = ( K , Σ , f , S , Z ) NFA M=(K,\Sigma,f,S,Z) NFAM=(K,Σ,f,S,Z)则与之等价的 D F A M ′ = ( K ′ , Σ ′ , f ′ , S ′ , Z ′ ) DFA M'=(K' ,\Sigma',f',S',Z') DFAM′=(K′,Σ′,f′,S′,Z′), 其中
Examples See: https://blog.csdn.net/u012359618/article/details/42456771
See Also: https://zhuanlan.zhihu.com/p/31158595
https://blog.crimx.com/2014/03/16/nfa-to-dfa/
具体步骤:
See: https://blog.51cto.com/luochen2015/1867470
是指寻找与之等价的、状态个数达到最小的DFA M’。这样的DFA M’,称为最小化的DFA。
等价: p ∈ K , q ∈ K p\in K,q\in K p∈K,q∈K,当且仅当 ∀ α ∈ Σ ∗ , f ( p , α ) ∈ Z e q u a l s t o f ( q , α ) ∈ Z \forall \alpha\in\Sigma ^*,f(p,\alpha)\in Z\ equals\ to\ f(q,\alpha )\in Z ∀α∈Σ∗,f(p,α)∈Z equals to f(q,α)∈Z.也就是说状态p和等价状态q经过相同的路径(途径状态也相同)到达终结状态.
1.兼容性(一致性)——同是终态或同是非终态;2.传播性(蔓延性)——从s出发读入某个a和从t出发经过某个a并且经过某个b到达的状态等价。
See: https://www.cnblogs.com/wendellyi/p/3695489.html
最小化的定义: 1.没有多余的状态(死状态)2.没有两个状态是相互等价的.
步骤:
对于是否可以再分,有一个形式化的定义.
任意的c属于字符集合Σ,si经由c到达sx,以及sj经由c到达sy,那么sx和sy均属于的状态集合pt。如果有任何状态sk属于pt,dk经由c到达dz,dz不属于pt,那么dk不能再继续留在pt中。
E.g.