【计算理论】上下文无关语法 ( 语法组成 | 规则 | 语法 | 语法示例 | 约定的简写形式 | 语法分析树 )
文章目錄
- I . 語法組成
- II . 規則
- III . 語法
- IV . 語法示例
- V . 語法簡寫形式
- VI . 語法分析樹
- VII . 代數表達式 語法
I . 語法組成
上下文無關語法 組成 : 由 {V,Σ,R,S}\{ \quad V , \Sigma , R , S \quad \}{V,Σ,R,S} 四部分組成 ;
變量集 VVV : 有限的變量集合 ;
終端字符集 Σ\SigmaΣ : 有限的終端字符組成的集合 ; 相當于常量的含義 , 與變量相對 ;
規則集 RRR : 有限的規則組成的集合 , 規則規定如何進行代換操作 , 規定 變量 , 終端字符 , 字符串變量 等 ;
開始變量 SSS : 該變量作為開始變量 ;
II . 規則
規則 簡介 :
① 已知條件 : 假設 u,v,wu, v , wu,v,w 是 變量 ( 變元 ) 或 終端字符集 ( 常量 / 常元 ) ;
② 規則描述 : 規則是一個箭頭 , A→wA \to wA→w , AAA 是變元 , www 是 變元 和 常元 組成的終端字符 ;
③ 規則用法 : 在字符串中 , 根據 A→wA \to wA→w 規則進行替換 , 只需要將 AAA 變元替換成 www 字符串即可 ;
④ 規則示例 : uAvuAvuAv 中使用上述規則進行替換 , 將 AAA 替換成 www , 替換結果是得到新字符串 uwvuwvuwv ;
uAv?uwvuAv \Rightarrow uwvuAv?uwv
III . 語法
1 . 有限次規則替換 : u??vu \Rightarrow *vu??v 表示有限多次替換后 , 每一步替換的臨時結果序列組成集合 {u1,u2,?,uk}\{u_1 , u_2 , \cdots , u_k\}{u1?,u2?,?,uk?} , 最終結果是 終端字符 ;
2 . 有限次規則替換 步驟 :
- uuu 根據某規則進行替換得到 u1u_1u1? ;
- u1u_1u1? 根據某規則進行替換得到 u2u_2u2? ;
- ?\vdots?
- uku_kuk? 根據某規則進行替換得到 vvv ;
3 . 最終規則替換結果要求 : vvv 中不包含變元 , 全部由 終端字符 ( 常元 ) 組成的 字符串 ;
vvv 是由 uuu 生成的 ;
4 . 語法定義 : 從開始變元 , 使用規則逐步替換 , 替換到最后 , 將所有 終端字符組成字符串 放在一個集合中 , 稱為語法生成的語言 ;
L(G)={w∈Σ?:S??w}L(G) = \{ w \in \Sigma^* : S \Rightarrow *w \}L(G)={w∈Σ?:S??w}
IV . 語法示例
1 . 語法組成部分 : G3=({S},{a,b},R,S)G3 =( \; \{ S \}, \{ a, b \}, R , S \; )G3=({S},{a,b},R,S) 其組成如下 :
-
變量集 {S}\{ S \}{S} ;
-
終端字符集 {a,b}\{ a, b \}{a,b} ;
-
規則 RRR ;
-
開始變量 SSS ;
2 . 規則 RRR 描述 :
S→aSb∣SS∣εS \to aSb \; | \; SS \; | \; \varepsilonS→aSb∣SS∣ε
- SSS 變量 可以使用 aSbaSbaSb 字符串替換 ;
- SSS 變量 可以使用 SSSSSS 字符串替換 ;
- SSS 變量 可以使用 ε\varepsilonε 字符串替換 ;
3 . 規則替換過程 :
① SSS 是開始變量 , 可以使用 aSbaSbaSb 替換 :
S?aSbS \Rightarrow aSbS?aSb
② 使用 aSbaSbaSb 替換 SSS :
S?aSb?aaSbbS \Rightarrow aSb \Rightarrow aaSbbS?aSb?aaSbb
③ 使用 SSSSSS 替換 SSS :
S?aSb?aaSbb?aaSSbbS \Rightarrow aSb \Rightarrow aaSbb \Rightarrow aaSSbbS?aSb?aaSbb?aaSSbb
④ 使用 aSbaSbaSb 替換第一個 SSS :
S?aSb?aaSbb?aaSSbb?aaaSbSbbS \Rightarrow aSb \Rightarrow aaSbb \Rightarrow aaSSbb \Rightarrow aaaSbSbbS?aSb?aaSbb?aaSSbb?aaaSbSbb
⑤ 使用 ε\varepsilonε 替換第一個 SSS :
S?aSb?aaSbb?aaSSbb?aaaSbSbb?aaabSbbS \Rightarrow aSb \Rightarrow aaSbb \Rightarrow aaSSbb \Rightarrow aaaSbSbb \Rightarrow aaabSbbS?aSb?aaSbb?aaSSbb?aaaSbSbb?aaabSbb
⑥ 使用 aSbaSbaSb 替換 SSS :
S?aSb?aaSbb?aaSSbb?aaaSbSbb?aaabSbb?aaabaSbbbS \Rightarrow aSb \Rightarrow aaSbb \Rightarrow aaSSbb \Rightarrow aaaSbSbb \Rightarrow aaabSbb \Rightarrow aaabaSbbbS?aSb?aaSbb?aaSSbb?aaaSbSbb?aaabSbb?aaabaSbbb
⑦ 使用 ε\varepsilonε 替換 SSS :
S?aSb?aaSbb?aaSSbb?aaaSbSbb?aaabSbb?aaabaSbbb?aaababbbS \Rightarrow aSb \Rightarrow aaSbb \Rightarrow aaSSbb \Rightarrow aaaSbSbb \Rightarrow aaabSbb \Rightarrow aaabaSbbb \Rightarrow aaababbbS?aSb?aaSbb?aaSSbb?aaaSbSbb?aaabSbb?aaabaSbbb?aaababbb
最終得到 aaababbbaaababbbaaababbb 字符串 , 該字符串全部由終端字符構成 , 是從 SSS 開始狀態出發 , 按照 RRR 規則替換得來的 ;
稱該字符串由 語法 G3G3G3 生成的 ;
V . 語法簡寫形式
語法可以使用下面的形式簡單表示 , 沒有必要使用繁瑣的形式 , 可以使用約定的簡寫形式 ;
約定寫法 :
- A→0A1A \to 0A1A→0A1
- A→BA \to BA→B
- B→lB \to lB→l
開始狀態約定 : 左上方的變元 AAA 約定是 開始變元 ;
變元約定 : 大寫字母 A,BA,BA,B 約定為 變元 ;
終端字符約定 : 小寫字母 約定為 終端字符 ;
VI . 語法分析樹
語法分析樹 : 字符串生成的過程 , 可以寫成語法分析樹 ;
將上述 簡寫的 約定語法描述 , 生成 終端字符構成的字符串 ;
1 . 開始狀態 : AAA , 使用 0A10A10A1 替換 AAA ;
A?0A1A \Rightarrow 0A1A?0A1
當前語法分析樹 :
2 . 使用 0A10A10A1 替換 AAA ;
A?0A1?00A11A \Rightarrow 0A1 \Rightarrow 00A11A?0A1?00A11
當前語法分析樹 :
3 . 使用 0A10A10A1 替換 AAA ;
A?0A1?00A11?000A111A \Rightarrow 0A1 \Rightarrow 00A11 \Rightarrow 000A111A?0A1?00A11?000A111
當前語法分析樹 :
4 . 使用 BBB 替換 AAA ;
A?0A1?00A11?000A111?000B111A \Rightarrow 0A1 \Rightarrow 00A11 \Rightarrow 000A111 \Rightarrow 000B111A?0A1?00A11?000A111?000B111
當前語法分析樹 :
5 . 使用 lll 替換 BBB ;
A?0A1?00A11?000A111?000B111?000l111A \Rightarrow 0A1 \Rightarrow 00A11 \Rightarrow 000A111 \Rightarrow 000B111 \Rightarrow 000l111A?0A1?00A11?000A111?000B111?000l111
當前語法分析樹 :
6 . 最終得到的字符串為 000l111000l111000l111 ;
VII . 代數表達式 語法
1 . 代數表達式 語法 : G4=(V,A,R,Expression)G4 = ( V , A , R , Expression )G4=(V,A,R,Expression) 是代數表達式語法 ;
① 終端字符集 : A={a,+,×,()}A = \{ a , + , \times , () \}A={a,+,×,()} ;
② 變量集 : V={Expression,Term,Factor}V = \{ Expression , Term , Factor \}V={Expression,Term,Factor} ;
- ExpressionExpressionExpression 是表達式 ;
- TermTermTerm 是項 ;
- FactorFactorFactor 是因子 ;
2 . ExpressionExpressionExpression 表達式 規則 :
Expression→Expression+Term∣TermExpression \to Expression + Term | TermExpression→Expression+Term∣Term
ExpressionExpressionExpression ( 表達式 ) 可以通過 Expression+Term∣TermExpression + Term | TermExpression+Term∣Term 代替 ;
3 . TermTermTerm 項 規則 :
Term→Term×Factor∣FactorTerm \to Term \times Factor | FactorTerm→Term×Factor∣Factor
TermTermTerm 項 可以通過 Term×Factor∣FactorTerm \times Factor | FactorTerm×Factor∣Factor 代替 ;
4 . FactorFactorFactor 因子 規則 :
Factor→Expression∣aFactor \to Expression | aFactor→Expression∣a
FactorFactorFactor 因子 可以通過 Expression∣aExpression | aExpression∣a 代替 ;
總結
以上是生活随笔為你收集整理的【计算理论】上下文无关语法 ( 语法组成 | 规则 | 语法 | 语法示例 | 约定的简写形式 | 语法分析树 )的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【计算理论】Pumping 引理 ( 四
- 下一篇: 【计算理论】上下文无关语法 ( 代数表达