
- 自動機理論教程
- 自動機理論 - 首頁
- 自動機理論 - 入門
- 自動機理論 - 歷史
- 自動機理論 - 應用
- 自動機理論術語
- 自動機中字串的基礎知識
- 自動機的集合論
- 語言和文法
- 計算理論中的文法
- 由文法生成的語言
- 喬姆斯基文法分類
- 有限自動機
- 確定性有限自動機 (DFA)
- 非確定性有限自動機 (NFA)
- 從 NFA 到 DFA 的轉換
- DFA 的最小化
- 穆爾機與米利機
- DFA 的補集
- 正則表示式
- 自動機中的正則表示式
- 自動機中的 Arden 定理
- 將正則表示式轉換為有限自動機
- 正則文法的抽取引理
- 計算理論中的正則集
- 上下文無關文法
- 上下文無關文法 (CFG)
- 上下文無關文法中的二義性
- 上下文無關語言的閉包性質
- 簡化上下文無關文法
- 喬姆斯基正規化 (CNF)
- 格雷巴赫正規化 (GNF)
- 上下文無關文法的抽取引理
- 下推自動機
- 下推自動機 (PDA)
- 下推自動機的接受
- 從 CFG 構造 PDA
- 下推自動機與語法分析
- 圖靈機
- 圖靈機 (TM) 基礎
- 圖靈機接受的語言
- 多帶圖靈機
- 多軌圖靈機
- 非確定性圖靈機
- 半無限帶圖靈機
- 線性界自動機 (LBA)
- 可計算性和不可判定性
- 圖靈語言的可判定性
- 不可判定語言
- 圖靈機停機問題
- 計算理論中的 Rice 定理
- Post 對應問題 (PCP)
- 自動機理論資源
- 自動機理論 - 快速指南
- 自動機理論 - 資源
- 自動機理論 - 討論
下推自動機與語法分析
語法分析用於使用文法的產生式規則推匯出字串。它用於檢查字串的可接受性。編譯器用於檢查字串在語法上是否正確。解析器接收輸入並構建語法樹。
解析器可以分為兩種型別:
自頂向下解析器 - 自頂向下解析從頂部開始符號開始,使用語法樹推匯出字串。
自底向上解析器 - 自底向上解析從底部的字串開始,使用語法樹到達開始符號。
自頂向下解析器的設計
對於自頂向下解析,PDA 有以下四種類型的轉換:
彈出堆疊頂部產生式左側的非終結符,並壓入其右側字串。
如果堆疊的頂部符號與正在讀取的輸入符號匹配,則將其彈出。
將開始符號“S”壓入堆疊。
如果輸入字串完全讀取並且堆疊為空,則轉到最終狀態“F”。
示例
為表示式“x+y*z”設計一個自頂向下解析器,該解析器適用於具有以下產生式規則的文法 G:
P: S → S+X | X, X → X*Y | Y, Y → (S) | id
解答
如果 PDA 是 (Q, ∑, S, δ, q0, I, F),則自頂向下解析為:
(x+y*z, I) ⊢(x +y*z, SI) ⊢ (x+y*z, S+XI) ⊢(x+y*z, X+XI)
⊢(x+y*z, Y+XI) ⊢(x+y*z, x+XI) ⊢(+y*z, +XI) ⊢ (y*z, XI)
⊢(y*z, X*YI) ⊢(y*z, y*YI) ⊢(*z,*YI) ⊢(z, YI) ⊢(z, zI) ⊢(ε, I)
自底向上解析器的設計
對於自底向上解析,PDA 有以下四種類型的轉換:
將當前輸入符號壓入堆疊。
將堆疊頂部產生式的右側替換為其左側。
如果堆疊頂部的元素與當前輸入符號匹配,則將其彈出。
如果輸入字串完全讀取,並且只有開始符號“S”保留在堆疊中,則將其彈出並轉到最終狀態“F”。
示例
為表示式“x+y*z”設計一個自頂向下解析器,該解析器適用於具有以下產生式規則的文法 G:
P: S → S+X | X, X → X*Y | Y, Y → (S) | id
解答
如果 PDA 是 (Q, ∑, S, δ, q0, I, F),則自底向上解析為:
(x+y*z, I) ⊢ (+y*z, xI) ⊢ (+y*z, YI) ⊢ (+y*z, XI) ⊢ (+y*z, SI)
⊢(y*z, +SI) ⊢ (*z, y+SI) ⊢ (*z, Y+SI) ⊢ (*z, X+SI) ⊢ (z, *X+SI)
⊢ (ε, z*X+SI) ⊢ (ε, Y*X+SI) ⊢ (ε, X+SI) ⊢ (ε, SI)