【計算理論】上下文無關語法 ( 語法組成 | 規則 | 語法 | 語法示例 | 約定的簡寫形式 | 語法分析樹 )





I . 語法組成



上下文無關語法 組成 : {V,Σ,R,S}\{ \quad V , \Sigma , R , S \quad \} 四部分組成 ;


變量集 VV : 有限的變量集合 ;

終端字符集 Σ\Sigma : 有限的終端字符組成的集合 ; 相當於常量的含義 , 與變量相對 ;

規則集 RR : 有限的規則組成的集合 , 規則規定如何進行代換操作 , 規定 變量 , 終端字符 , 字符串變量 等 ;

開始變量 SS : 該變量作爲開始變量 ;





II . 規則



規則 簡介 :


① 已知條件 : 假設 u,v,wu, v , w變量 ( 變元 )終端字符集 ( 常量 / 常元 ) ;

② 規則描述 : 規則是一個箭頭 , AwA \to w , AA 是變元 , ww 是 變元 和 常元 組成的終端字符 ;

③ 規則用法 : 在字符串中 , 根據 AwA \to w 規則進行替換 , 只需要將 AA 變元替換成 ww 字符串即可 ;

④ 規則示例 : uAvuAv 中使用上述規則進行替換 , 將 AA 替換成 ww , 替換結果是得到新字符串 uwvuwv ;

uAvuwvuAv \Rightarrow uwv





III . 語法



1 . 有限次規則替換 : uvu \Rightarrow *v 表示有限多次替換後 , 每一步替換的臨時結果序列組成集合 {u1,u2,,uk}\{u_1 , u_2 , \cdots , u_k\} , 最終結果是 終端字符 ;


2 . 有限次規則替換 步驟 :


  • uu 根據某規則進行替換得到 u1u_1 ;
  • u1u_1 根據某規則進行替換得到 u2u_2 ;
  • \vdots
  • uku_k 根據某規則進行替換得到 vv ;

3 . 最終規則替換結果要求 : vv 中不包含變元 , 全部由 終端字符 ( 常元 ) 組成的 字符串 ;

vv 是由 uu 生成的 ;


4 . 語法定義 : 從開始變元 , 使用規則逐步替換 , 替換到最後 , 將所有 終端字符組成字符串 放在一個集合中 , 稱爲語法生成的語言 ;

L(G)={wΣ:Sw}L(G) = \{ w \in \Sigma^* : S \Rightarrow *w \}





IV . 語法示例



1 . 語法組成部分 : G3=(  {S},{a,b},R,S  )G3 =( \; \{ S \}, \{ a, b \}, R , S \; ) 其組成如下 :


  • 變量集 {S}\{ S \} ;

  • 終端字符集 {a,b}\{ a, b \} ;

  • 規則 RR ;

  • 開始變量 SS ;


2 . 規則 RR 描述 :

SaSb    SS    εS \to aSb \; | \; SS \; | \; \varepsilon

  • SS 變量 可以使用 aSbaSb 字符串替換 ;
  • SS 變量 可以使用 SSSS 字符串替換 ;
  • SS 變量 可以使用 ε\varepsilon 字符串替換 ;

3 . 規則替換過程 :


SS 是開始變量 , 可以使用 aSbaSb 替換 :

SaSbS \Rightarrow aSb


使用 aSbaSb 替換 SS :

SaSbaaSbbS \Rightarrow aSb \Rightarrow aaSbb


使用 SSSS 替換 SS :

SaSbaaSbbaaSSbbS \Rightarrow aSb \Rightarrow aaSbb \Rightarrow aaSSbb


使用 aSbaSb 替換第一個 SS :

SaSbaaSbbaaSSbbaaaSbSbbS \Rightarrow aSb \Rightarrow aaSbb \Rightarrow aaSSbb \Rightarrow aaaSbSbb


使用 ε\varepsilon 替換第一個 SS :

SaSbaaSbbaaSSbbaaaSbSbbaaabSbbS \Rightarrow aSb \Rightarrow aaSbb \Rightarrow aaSSbb \Rightarrow aaaSbSbb \Rightarrow aaabSbb


使用 aSbaSb 替換 SS :

SaSbaaSbbaaSSbbaaaSbSbbaaabSbbaaabaSbbbS \Rightarrow aSb \Rightarrow aaSbb \Rightarrow aaSSbb \Rightarrow aaaSbSbb \Rightarrow aaabSbb \Rightarrow aaabaSbbb


使用 ε\varepsilon 替換 SS :

SaSbaaSbbaaSSbbaaaSbSbbaaabSbbaaabaSbbbaaababbbS \Rightarrow aSb \Rightarrow aaSbb \Rightarrow aaSSbb \Rightarrow aaaSbSbb \Rightarrow aaabSbb \Rightarrow aaabaSbbb \Rightarrow aaababbb


最終得到 aaababbbaaababbb 字符串 , 該字符串全部由終端字符構成 , 是從 SS 開始狀態出發 , 按照 RR 規則替換得來的 ;

稱該字符串由 語法 G3G3 生成的 ;





V . 語法簡寫形式



語法可以使用下面的形式簡單表示 , 沒有必要使用繁瑣的形式 , 可以使用約定的簡寫形式 ;


約定寫法 :

  • A0A1A \to 0A1
  • ABA \to B
  • BlB \to l

開始狀態約定 : 左上方的變元 AA 約定是 開始變元 ;

變元約定 : 大寫字母 A,BA,B 約定爲 變元 ;

終端字符約定 : 小寫字母 約定爲 終端字符 ;





VI . 語法分析樹



語法分析樹 : 字符串生成的過程 , 可以寫成語法分析樹 ;


將上述 簡寫的 約定語法描述 , 生成 終端字符構成的字符串 ;


1 . 開始狀態 : AA , 使用 0A10A1 替換 AA ;

A0A1A \Rightarrow 0A1

當前語法分析樹 :

在這裏插入圖片描述


2 . 使用 0A10A1 替換 AA ;

A0A100A11A \Rightarrow 0A1 \Rightarrow 00A11

當前語法分析樹 :

在這裏插入圖片描述


3 . 使用 0A10A1 替換 AA ;

A0A100A11000A111A \Rightarrow 0A1 \Rightarrow 00A11 \Rightarrow 000A111

當前語法分析樹 :

在這裏插入圖片描述


4 . 使用 BB 替換 AA ;

A0A100A11000A111000B111A \Rightarrow 0A1 \Rightarrow 00A11 \Rightarrow 000A111 \Rightarrow 000B111

當前語法分析樹 :

在這裏插入圖片描述


5 . 使用 ll 替換 BB ;

A0A100A11000A111000B111000l111A \Rightarrow 0A1 \Rightarrow 00A11 \Rightarrow 000A111 \Rightarrow 000B111 \Rightarrow 000l111

當前語法分析樹 :

在這裏插入圖片描述


6 . 最終得到的字符串爲 000l111000l111 ;





VII . 代數表達式 語法



1 . 代數表達式 語法 : G4=(V,A,R,Expression)G4 = ( V , A , R , Expression ) 是代數表達式語法 ;


① 終端字符集 : A={a,+,×,()}A = \{ a , + , \times , () \} ;

② 變量集 : V={Expression,Term,Factor}V = \{ Expression , Term , Factor \} ;

  • ExpressionExpression 是表達式 ;
  • TermTerm 是項 ;
  • FactorFactor 是因子 ;

2 . ExpressionExpression 表達式 規則 :

ExpressionExpression+TermTermExpression \to Expression + Term | Term

ExpressionExpression ( 表達式 ) 可以通過 Expression+TermTermExpression + Term | Term 代替 ;


3 . TermTerm 項 規則 :

TermTerm×FactorFactorTerm \to Term \times Factor | Factor

TermTerm 項 可以通過 Term×FactorFactorTerm \times Factor | Factor 代替 ;


4 . FactorFactor 因子 規則 :

FactorExpressionaFactor \to Expression | a

FactorFactor 因子 可以通過 ExpressionaExpression | a 代替 ;

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章