【計算理論】上下文無關語法 ( 代數表達式 | 代數表達式示例 | 確定性有限自動機 DFA 轉爲 上下文無關語法 )





I . 代數表達式 語法



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 \quad | \quad Term

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


3 . TermTerm 項 規則 :

TermTerm×FactorFactorTerm \to Term \times Factor \quad | \quad Factor

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


4 . FactorFactor 因子 規則 :

FactorExpressionaFactor \to Expression \quad | \quad a

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





II . 代數表達式 語法 示例



爲字符串 (a+a)×a(a + a) \times a 構建 語法分析樹 ;


1 . 起始狀態 : 語法的起始狀態是 ExpressionExpression , 根據 ExpressionExpression+TermTermExpression \to Expression + Term \quad | \quad Term 規則 , ExpressionExpression 可以使用 TermTerm 替換 , 直接從起始狀態 , 使用 TermTerm 替換 ExpressionExpression ;

在這裏插入圖片描述


2 . (a+a)×a(a + a) \times a 字符串的語法分析樹 :


符號 : 其中有 ×\times 乘號 ;

語法分析樹 : (a+a)×a(a + a) \times a 中間有 ×\times , 帶有 ×\times 乘號的替換規則爲 TermTerm×FactorFactorTerm \to Term \times Factor | Factor , 顯然該項很顯然是一個 TermTerm 項 ;

在這裏插入圖片描述


3 . 根據上述 TermTerm×FactorTerm \to Term \times Factor 可知 , TermTerm 是由 Term×FactorTerm \times Factor 進行替換的 , 左側的 (a+a)(a + a) 是一個 TermTerm , 右側的 aa 是一個 FactorFactor ;

在這裏插入圖片描述


4 . 根據 FactorExpressionaFactor \to Expression | a 規則 , 右側的 FactorFactor 直接使用 aa 進行替代 , 可得如下語法分析樹 :

在這裏插入圖片描述


5 . 想辦法將左側的 TermTerm 替換成 (a+a)(a + a) :


加法只能是 ExpressionExpression , 先替換成 ExpressionExpression ;


6 . 這裏先使用 FactorFactor 替換 TermTerm : 使用規則 TermTerm×FactorFactorTerm \to Term \times Factor | Factor ;

在這裏插入圖片描述


7 . 在使用 ExpressionExpression 替換 FactorFactor : 使用規則 FactorExpressionaFactor \to Expression | a ;

在這裏插入圖片描述


8 . 使用 Expression+TermExpression + Term 替換 ExpressionExpression : 使用規則 ExpressionExpression+TermTermExpression \to Expression + Term | Term ;

在這裏插入圖片描述


9 . 使用 TermTerm 替換 左側的 ExpressionExpression : 使用規則 ExpressionExpression+TermTermExpression \to Expression + Term | Term ;

在這裏插入圖片描述


10 . 使用 FactorFactor 替換左側的 TermTerm : 使用規則 TermTerm×FactorFactorTerm \to Term \times Factor | Factor ;

在這裏插入圖片描述


11 . 使用 aa 替換左側的 FactorFactor : 使用規則 FactorExpressionaFactor \to Expression | a ;

在這裏插入圖片描述


12 . 使用 FactorFactor 替換右側的 TermTerm : 使用規則 TermTerm×FactorFactorTerm \to Term \times Factor | Factor ;

在這裏插入圖片描述


13 . 使用 aa 替換右側的 FactorFactor : 使用規則 FactorExpressionaFactor \to Expression | a ;

在這裏插入圖片描述


最終的 語法分析樹爲 :

在這裏插入圖片描述

此時可以得到語法分析樹 ; 該語法分析樹是一個代數表達式 ; 將該語法分析樹寫出 , 即可理解 上下文無關 語法 ;

代數表達式就是上下文無關的語法 ;





III . 設計 上下文無關語法



給定語言 , 設計上下文無關語法 , 使用該語法可以生成該語言 ;


上下文無關語法 設計技巧 : 將複雜的語言分解 , 化整爲零 , 針對每個部分設計上下文無關的語法 , 最終將這些語法合併在一起 ;


上下文無關語法 與 自動機 : 如果給定的語言是正則語言 , 是由正則表達式表達的 , 能夠找到一個自動機可以識別該語言 , 首先將語言轉換成自動機 , 將自動機轉化爲上下文無關的語法 ;





IV . 確定性有限自動機 DFA 轉爲 上下文無關語法



1 . 確定性有限自動機 ( DFA ) 轉爲 上下文無關語法 ( CFG ) : 將 確定性有限自動機 ( DFA ) 的指令 , 轉爲 對應的 上下文無關語法 ( CFG ) 規則 :

δ(qi,a)=qjRiaRj\delta ( q_i, a ) = q_j \Rightarrow R_i \to aR_j

δ(qi,a)=qj\delta ( q_i, a ) = q_j 表示 qiq_i 狀態下 , 讀取字符 aa , 跳轉到 qjq_j 狀態 ;


在這裏插入圖片描述

2 . 自動機的 狀態跳轉 轉換成 規則 示例 : 上圖中的 確定性有限自動機 , 開始狀態 AA 讀取 11 字符 轉化成 BB 狀態 , 表示成規則就是

RA1RBR_A \to 1R_B


3 . 自動機的狀態 AA 讀取 字符 aa 轉換成另一個狀態 BB , 都可以轉換成對應的規則 RAaRBR_A \to aR_B ;


4 . 計算能力對比 : 上下文無關語法 的計算能力 要大於等於 自動機的計算能力 ;

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