日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

【计算理论】上下文无关语法 ( 代数表达式 | 代数表达式示例 | 确定性有限自动机 DFA 转为 上下文无关语法 )

發布時間:2025/6/17 编程问答 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【计算理论】上下文无关语法 ( 代数表达式 | 代数表达式示例 | 确定性有限自动机 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 TermExpressionExpression+TermTerm

ExpressionExpressionExpression ( 表達式 ) 可以通過 Expression+Term∣TermExpression + Term \quad | \quad TermExpression+TermTerm 代替 ;


3 . TermTermTerm 項 規則 :

Term→Term×Factor∣FactorTerm \to Term \times Factor \quad | \quad FactorTermTerm×FactorFactor

TermTermTerm 項 可以通過 Term×Factor∣FactorTerm \times Factor \quad | \quad FactorTerm×FactorFactor 代替 ;


4 . FactorFactorFactor 因子 規則 :

Factor→Expression∣aFactor \to Expression \quad | \quad aFactorExpressiona

FactorFactorFactor 因子 可以通過 Expression∣aExpression \quad | \quad aExpressiona 代替 ;





II . 代數表達式 語法 示例



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


1 . 起始狀態 : 語法的起始狀態是 ExpressionExpressionExpression , 根據 Expression→Expression+Term∣TermExpression \to Expression + Term \quad | \quad TermExpressionExpression+TermTerm 規則 , 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 | FactorTermTerm×FactorFactor , 顯然該項很顯然是一個 TermTermTerm 項 ;


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


4 . 根據 Factor→Expression∣aFactor \to Expression | aFactorExpressiona 規則 , 右側的 FactorFactorFactor 直接使用 aaa 進行替代 , 可得如下語法分析樹 :


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


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


6 . 這里先使用 FactorFactorFactor 替換 TermTermTerm : 使用規則 Term→Term×Factor∣FactorTerm \to Term \times Factor | FactorTermTerm×FactorFactor ;


7 . 在使用 ExpressionExpressionExpression 替換 FactorFactorFactor : 使用規則 Factor→Expression∣aFactor \to Expression | aFactorExpressiona ;


8 . 使用 Expression+TermExpression + TermExpression+Term 替換 ExpressionExpressionExpression : 使用規則 Expression→Expression+Term∣TermExpression \to Expression + Term | TermExpressionExpression+TermTerm ;


9 . 使用 TermTermTerm 替換 左側的 ExpressionExpressionExpression : 使用規則 Expression→Expression+Term∣TermExpression \to Expression + Term | TermExpressionExpression+TermTerm ;


10 . 使用 FactorFactorFactor 替換左側的 TermTermTerm : 使用規則 Term→Term×Factor∣FactorTerm \to Term \times Factor | FactorTermTerm×FactorFactor ;


11 . 使用 aaa 替換左側的 FactorFactorFactor : 使用規則 Factor→Expression∣aFactor \to Expression | aFactorExpressiona ;


12 . 使用 FactorFactorFactor 替換右側的 TermTermTerm : 使用規則 Term→Term×Factor∣FactorTerm \to Term \times Factor | FactorTermTerm×FactorFactor ;


13 . 使用 aaa 替換右側的 FactorFactorFactor : 使用規則 Factor→Expression∣aFactor \to Expression | aFactorExpressiona ;


最終的 語法分析樹為 :

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

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





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 转为 上下文无关语法 )的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。