【计算理论】上下文无关语法 ( 代数表达式 | 代数表达式示例 | 确定性有限自动机 DFA 转为 上下文无关语法 )
文章目錄
- I . 代數表達式 語法
- II . 代數表達式 語法 示例
- III . 設計 上下文無關語法
- IV . 確定性有限自動機 DFA 轉為 上下文無關語法
I . 代數表達式 語法
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 \quad | \quad TermExpression→Expression+Term∣Term
ExpressionExpressionExpression ( 表達式 ) 可以通過 Expression+Term∣TermExpression + Term \quad | \quad TermExpression+Term∣Term 代替 ;
3 . TermTermTerm 項 規則 :
Term→Term×Factor∣FactorTerm \to Term \times Factor \quad | \quad FactorTerm→Term×Factor∣Factor
TermTermTerm 項 可以通過 Term×Factor∣FactorTerm \times Factor \quad | \quad FactorTerm×Factor∣Factor 代替 ;
4 . FactorFactorFactor 因子 規則 :
Factor→Expression∣aFactor \to Expression \quad | \quad aFactor→Expression∣a
FactorFactorFactor 因子 可以通過 Expression∣aExpression \quad | \quad aExpression∣a 代替 ;
II . 代數表達式 語法 示例
為字符串 (a+a)×a(a + a) \times a(a+a)×a 構建 語法分析樹 ;
1 . 起始狀態 : 語法的起始狀態是 ExpressionExpressionExpression , 根據 Expression→Expression+Term∣TermExpression \to Expression + Term \quad | \quad TermExpression→Expression+Term∣Term 規則 , ExpressionExpressionExpression 可以使用 TermTermTerm 替換 , 直接從起始狀態 , 使用 TermTermTerm 替換 ExpressionExpressionExpression ;
2 . (a+a)×a(a + a) \times a(a+a)×a 字符串的語法分析樹 :
符號 : 其中有 ×\times× 乘號 ;
語法分析樹 : (a+a)×a(a + a) \times a(a+a)×a 中間有 ×\times× , 帶有 ×\times× 乘號的替換規則為 Term→Term×Factor∣FactorTerm \to Term \times Factor | FactorTerm→Term×Factor∣Factor , 顯然該項很顯然是一個 TermTermTerm 項 ;
3 . 根據上述 Term→Term×FactorTerm \to Term \times FactorTerm→Term×Factor 可知 , TermTermTerm 是由 Term×FactorTerm \times FactorTerm×Factor 進行替換的 , 左側的 (a+a)(a + a)(a+a) 是一個 TermTermTerm , 右側的 aaa 是一個 FactorFactorFactor ;
4 . 根據 Factor→Expression∣aFactor \to Expression | aFactor→Expression∣a 規則 , 右側的 FactorFactorFactor 直接使用 aaa 進行替代 , 可得如下語法分析樹 :
5 . 想辦法將左側的 TermTermTerm 替換成 (a+a)(a + a)(a+a) :
加法只能是 ExpressionExpressionExpression , 先替換成 ExpressionExpressionExpression ;
6 . 這里先使用 FactorFactorFactor 替換 TermTermTerm : 使用規則 Term→Term×Factor∣FactorTerm \to Term \times Factor | FactorTerm→Term×Factor∣Factor ;
7 . 在使用 ExpressionExpressionExpression 替換 FactorFactorFactor : 使用規則 Factor→Expression∣aFactor \to Expression | aFactor→Expression∣a ;
8 . 使用 Expression+TermExpression + TermExpression+Term 替換 ExpressionExpressionExpression : 使用規則 Expression→Expression+Term∣TermExpression \to Expression + Term | TermExpression→Expression+Term∣Term ;
9 . 使用 TermTermTerm 替換 左側的 ExpressionExpressionExpression : 使用規則 Expression→Expression+Term∣TermExpression \to Expression + Term | TermExpression→Expression+Term∣Term ;
10 . 使用 FactorFactorFactor 替換左側的 TermTermTerm : 使用規則 Term→Term×Factor∣FactorTerm \to Term \times Factor | FactorTerm→Term×Factor∣Factor ;
11 . 使用 aaa 替換左側的 FactorFactorFactor : 使用規則 Factor→Expression∣aFactor \to Expression | aFactor→Expression∣a ;
12 . 使用 FactorFactorFactor 替換右側的 TermTermTerm : 使用規則 Term→Term×Factor∣FactorTerm \to Term \times Factor | FactorTerm→Term×Factor∣Factor ;
13 . 使用 aaa 替換右側的 FactorFactorFactor : 使用規則 Factor→Expression∣aFactor \to Expression | aFactor→Expression∣a ;
最終的 語法分析樹為 :
此時可以得到語法分析樹 ; 該語法分析樹是一個代數表達式 ; 將該語法分析樹寫出 , 即可理解 上下文無關 語法 ;
代數表達式就是上下文無關的語法 ;
III . 設計 上下文無關語法
給定語言 , 設計上下文無關語法 , 使用該語法可以生成該語言 ;
上下文無關語法 設計技巧 : 將復雜的語言分解 , 化整為零 , 針對每個部分設計上下文無關的語法 , 最終將這些語法合并在一起 ;
上下文無關語法 與 自動機 : 如果給定的語言是正則語言 , 是由正則表達式表達的 , 能夠找到一個自動機可以識別該語言 , 首先將語言轉換成自動機 , 將自動機轉化為上下文無關的語法 ;
IV . 確定性有限自動機 DFA 轉為 上下文無關語法
1 . 確定性有限自動機 ( DFA ) 轉為 上下文無關語法 ( CFG ) : 將 確定性有限自動機 ( DFA ) 的指令 , 轉為 對應的 上下文無關語法 ( CFG ) 規則 :
δ(qi,a)=qj?Ri→aRj\delta ( q_i, a ) = q_j \Rightarrow R_i \to aR_jδ(qi?,a)=qj??Ri?→aRj?
δ(qi,a)=qj\delta ( q_i, a ) = q_jδ(qi?,a)=qj? 表示 qiq_iqi? 狀態下 , 讀取字符 aaa , 跳轉到 qjq_jqj? 狀態 ;
2 . 自動機的 狀態跳轉 轉換成 規則 示例 : 上圖中的 確定性有限自動機 , 開始狀態 AAA 讀取 111 字符 轉化成 BBB 狀態 , 表示成規則就是
RA→1RBR_A \to 1R_BRA?→1RB?
3 . 自動機的狀態 AAA 讀取 字符 aaa 轉換成另一個狀態 BBB , 都可以轉換成對應的規則 RA→aRBR_A \to aR_BRA?→aRB? ;
4 . 計算能力對比 : 上下文無關語法 的計算能力 要大于等于 自動機的計算能力 ;
總結
以上是生活随笔為你收集整理的【计算理论】上下文无关语法 ( 代数表达式 | 代数表达式示例 | 确定性有限自动机 DFA 转为 上下文无关语法 )的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【计算理论】上下文无关语法 ( 语法组成
- 下一篇: 【计算理论】下推自动机 PDA 及 计算