- 自动机理论教程
- 自动机理论 - 首页
- 自动机理论 - 入门
- 自动机理论 - 历史
- 自动机理论 - 应用
- 自动机理论术语
- 自动机中字符串的基础知识
- 自动机的集合论
- 语言和文法
- 计算理论中的文法
- 由文法生成的语言
- 乔姆斯基文法分类
- 有限自动机
- 确定性有限自动机 (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)