对于上下文无关语法,如何将其转换为等效的下推自动机?

2024-02-24

对于 Σ = {0, 1, 2} 上的上下文无关文法 G,起始变量为 S:
S → 0S0 | 1S1 | 2S2 |是
是 → 22

我如何将其变成等效的下推自动机


下推自动机可以将符号推入堆栈顶部并将其弹出。它还可以将其转换基于最顶层的堆栈符号。我们需要考虑一种机制,允许我们通过操作堆栈来接受正确的语言。

您的语法生成的语言具有以下特征:

  1. It has 22在中间
  2. 这是一个回文{0, 1, 2}。也就是说,它向前读和向后读是一样的。

我们需要“记住”字符串的开头,以便能够判断字符串的结尾是否向后重复。这是堆栈的一个很好的用例:我们可以在看到符号时将它们推入堆栈,然后在读回它们时将它们弹出。另请注意:我们知道我们只能尝试在阅读后开始回读22.

首先,我们读取所有内容并将其压入堆栈,直到找到“22”:

Q    s   S    Q'    S'
----------------------
// read 0s and 1s and push them on the stack
q0   0   Z    q0    0Z
q0   0   0    q0    00
q0   0   1    q0    01
q0   1   Z    q0    1Z
q0   1   0    q0    10
q0   1   1    q0    11

// if you read a 2, pus it on the stack and
// go to a new state where we look for a second 2
q0   2   Z    q1    2Z
q0   2   0    q1    20
q0   2   1    q1    21

// if you read a 2 and then 0 or 1, go back to the
// initial state and keep reading input. otherwise,
// if you find a second two, proceed
q1   0   2    q0    02
q1   1   2    q0    12
q1   2   2    q2    22

// assume the '22' we just saw was not the one in
// the middle of the input string and that we need
// to keep reading input.
q2   0   2    q0    02
q2   1   2    q0    12
q2   2   2    q2    22

// assume the '22' we just saw was the one in the
// middle of the input string and that we now need
// to start reading from the stack.
q2   -   2    q3    - 
q3   -   2    q4    -
q4   0   0    q4    -
q4   1   1    q4    -
q4   2   2    q4    -
q4   -   Z    q5    Z

// we read a string in the language and are
// ready to accept in q5. go to dead state q6
// explicitly if still have input.
q5   0   Z    q6    Z
q5   1   Z    q6    Z
q5   2   Z    q6    Z

// consume the rest of the input in the dead state.
q6   0   Z    q6    Z
q6   1   Z    q6    Z
q6   2   Z    q6    Z

的过渡q5 and q6如果您将机器崩溃定义为字符串被明确拒绝(这是典型的情况),那么这并不是绝对必要的。我包含了这些转换,以便 PDA 能够优雅地耗尽所有输入而不会崩溃。

该 PDA 不是确定性的。这种语言没有确定性的 PDA。基本上,在我们读取任何子字符串之后22,我们必须猜测该实例是否22就是中间那个。如果是这样,我们需要开始读回初始字符串,看看是否有回文。如果没有,我们需要继续将符号压入堆栈。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

对于上下文无关语法,如何将其转换为等效的下推自动机? 的相关文章

  • CFG 的扩展,它是什么?

    考虑以下上下文无关语法的扩展 它允许规则在左侧有一个 或多个 终端在非终端的右侧 即 形式规则 A b gt 右侧可以是任何东西 就像在上下文无关语法中一样 特别是 它是not要求右侧末尾具有完全相同的终端符号 在这种情况下 此扩展将是上下
  • 使用奥格登引理与常规泵引理进行上下文无关语法

    我正在学习问题中引理之间的区别 我能找到的每个参考文献都使用以下示例 a i b j c k d l i 0 or j k l 以显示两者之间的差异 我可以找到一个使用常规引理来 反驳 它的例子 选择 w uvxyz s t 维 gt 0
  • 现实世界的 LR(k > 1) 语法?

    制作 k gt 1 的人工 LR k 语法很容易 Input A1 B x Input A2 B y introduce reduce reduce conflict for terminal a A1 a A2 a B b b b b t
  • 给定以下语言构造语法 {a^n b^m | n,m = 0,1,2,...,n <= 2m} [关闭]

    这个问题不太可能对任何未来的访客有帮助 它只与一个较小的地理区域 一个特定的时间点或一个非常狭窄的情况相关 通常不适用于全世界的互联网受众 为了帮助使这个问题更广泛地适用 访问帮助中心 我刚刚参加了期中考试 但无法回答这个问题 有人可以举几
  • 使用 NLTK 检查英语语法 [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心以获得指导 我开始使用NLTK库 我想
  • 不允许使用外括号的表达式语法

    对于涉及二元运算符 gt 的表达式 我有以下语法 expression expression BITWISE OR xor expression xor expression xor expression xor expression BI
  • 如何修改解析语法以允许赋值和非赋值语句?

    所以问题是关于下面的语法 我正在研究一种小型解释语言 我们在课堂上学习了一些编译器设计 所以我想将其提升到一个新的水平并自己尝试一些东西 我被困在试图制作非终结符号Expr Statement Expr SC Expr I need hel
  • 使用 C++11 正则表达式捕获上下文无关语法文件的内容

    Preface 我正在尝试编写自己的上下文无关语法规范 以与我的词法分析器 解析器的规则相关联 它的意思是类似于ANTLR 其中大写标识符分类为词法分析器规则 小写标识符分类为解析器规则 它旨在接受词法分析器规则的字符串文字和 或正则表达式
  • 用堆栈实现的 LL(1) 解析器:如何构建 AST?

    我目前正在手工构建一个解析器 它是一个 LL 1 解析器 目前 它是一个很棒的识别器 它的函数 parse List tokens 决定标记是否是该语言的成员 现在 我想为该输入构建相应的 AST 但是 我知道如何以递归下降的方式实现它 已
  • 两个自动机之间的等价

    确定两个自动机之间的等价性的最佳或最简单的方法是什么 即 如果给定两个有限自动机 A 和 B 我如何确定两者是否识别相同的语言 它们都是确定性的或都是非确定性的 一种不同的 更简单的方法是对自动机进行补充和交叉 自动机A相当于B iff L
  • PEG 和 CFG 有什么区别?

    由此维基百科 http en wikipedia org wiki Parsing expression grammar Semantics page 之间的根本区别 上下文无关语法和解析 表达式语法是 PEG 的 选择运算符是有序的 如果
  • NLTK 上下文无关语法生成器

    我正在开发一个带有 Unicode 字符的非英语解析器 为此 我决定使用 NLTK 但它需要预定义的上下文无关语法 如下所示 S gt NP VP VP gt V NP V NP PP PP gt P NP V gt saw ate wal
  • 什么是终结符和非终结符?

    我正在读 雷布尔 维基百科页面 https en wikipedia org wiki Rebol 解析表达式是用 parse 方言编写的 与 do 方言一样 它是数据交换方言的面向表达式的子语言 与 do 方言不同 parse 方言使用表
  • EcmaScript 语法中的 [Yield、Await、In、Return] 是什么意思

    EcmaScript 中的许多产生式都带有以下 修饰符 Yield Await In Return 这里有一些例子 ArrayLiteral Yield Await ElementList Yield Await AssignmentExp
  • 转换为乔姆斯基范式

    我确实需要你的帮助 我有这些作品 1 A gt aAb 2 A gt bAa 3 A gt 我应该应用乔姆斯基范式 CNF 为了应用上述规则 我应该 消除 产生式 消除单一生产 删除无用的符号 我立即陷入困境 原因是 A 是一个可为空的符号
  • D的语法真的是上下文无关的吗?

    几个月前我在 D 新闻组上发布了这个问题 但由于某种原因 答案从未真正说服我 所以我想我应该在这里问 D 的语法显然是上下文无关的 http www digitalmars com d 2 0 template comparison htm
  • 在打字稿 AST 中获取变量声明类型的正确方法?

    看了一眼declarationEmitter对于变量声明 它具有以下功能 emitVariableDeclaration最终调用 writeTypeOfDeclaration 这段代码的作用就是它所说的 它需要一个变量声明并打印变量及其类型
  • CYK算法是如何工作的?

    我必须检查一个字符串是否可以从乔姆斯基范式的给定上下文中派生出来 我正在使用 C 有非常好的伪代码 http en wikipedia org wiki CYK algorithm As pseudocode关于 CYK 算法的维基百科文章
  • csv格式是常规语法还是上下文无关语法?

    我目前正在编写一个 csv 解析器 csv 格式的定义由下式给出RFC4180 https www rfc editor org rfc rfc4180这是由 ABNF 定义的 所以csv的定义绝对是上下文无关语法 不过我想知道csv是否是
  • LL(1) 解析器中 FIRST 和 FOLLOW 集的用途?

    谁能向我解释一下 LL 1 语法中如何使用 FIRST 和 FOLLOW 我知道它们用于语法表构建 但我不明白如何使用 在 LL 1 解析器中 解析器的工作方式是维护一个工作空间 该工作空间最初播种到开始符号 后跟字符串结束标记 通常表示为

随机推荐

  • 使用 gitpython 从本地 Gitlab 存储库自动进行 git pull 需要 [电子邮件保护] 密码

    我们有一个本地托管的 Gitlab 存储库 我正在尝试使用以下脚本通过 ssh 使用 gitpython 自动推送和拉取 LOCAL REPO PATH path to repository repo Repo LOCAL REPO PAT
  • 将 Eclipse 中的作者姓名自动添加到现有文件中 [关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 是否有一个真正易于使用的工具 没有怪物工具 我可以将其插入 Eclipse 然后按 生成标头 按钮 然后
  • Sphinx 类属性文档

    我一直在尝试记录我的蒙戈引擎 http mongoengine odm readthedocs org 基于应用程序 但我在文档类上记录属性时遇到问题 我采取的正确语法如下 class Asset Document This is the
  • 从 Asp.net MVC2 迁移到 MVC4

    我想将 MVC2 网站转换为 MVC4 我知道有一些工具可以帮助从 MV2 转换为 MVC3 但我找不到从 MVC2 转换为 MVC4 所需的任何工具或步骤 请向我指出一些文章 博客 它们可以为我提供更多信息来帮助完成此过程 看起来现在有一
  • “错误:以错误的顺序接收到数据包。”当连接到无服务器 aurora 时

    我正在实现一个 Web 应用程序 它调用 lambda 函数从数据库获取数据 我选择了 Serverless Aurora 并编写了代码 但出现了异常 Error Received packet in the wrong sequence
  • 如何创建自定义水平进度条

    Please help to create horizontal progress bar like this 设置水平进度条的样式 style android attr progressBarStyleHorizontal 创建自定义进度
  • 在 Chart.js 中设置条形图 Y 轴标签的格式

    我在这里查看了文档和类似的问题 但似乎没有找到解决我的问题的可行方法 我正在使用 Chart js v 2 1 6 并且我有一个条形图 其中百分比值存储为数字 已乘以 100 我需要 y 轴标签和工具提示来显示 在值后面签名 有人可以解释一
  • 如何对 gtsummary 包中特征表列中的行顺序进行排序或更改?

    我正在尝试使用 tbl summary 中的函数 sort list stage alphanumeric 更改特征表列中的行顺序trial c trt age stage grade gt tbl summary by trt sort
  • 使用 Button 的 NodeJS Post 请求

    我不知道这是否可能 我所做的所有研究都表明 通过表单和文本输入是可能的 但无论如何 使用 NodeJs 和 Express 我希望能够单击网页上的按钮 单击后 它会向我的 Node JS 服务器发送一个 post 请求 更简单的说法 单击按
  • Direct2D 和 DXGI(D3D 互操作)多线程的最佳实践是什么?

    理想情况下 我希望有多个工作线程能够渲染到屏幕外渲染目标 然后将渲染的内容 传输 到屏幕上目标 对于 hwnd 渲染目标 这似乎不是问题 msdn 有一个例子 当屏幕渲染目标基于 DXGI 交换链时 我不太确定该怎么做 据我所知 每个窗口只
  • 为什么在基于范围的初始化程序中使用临时对象会导致崩溃?

    为什么以下代码在 Visual Studio 和 GCC 上都会崩溃 为了使其崩溃 需要基于范围的 for 循环 std map std string 并引用字符串 如果我删除其中任何一个 它就会起作用 include
  • 如何获取Angular2中ag网格中选定行的数据?

    我在 angular2 中设置了 ag grid 它工作正常 但我无法获取所选行的值 我的控制台窗口中没有错误 这就是我初始化网格的方式 import Component from angular2 core Component selec
  • 如何在 MVC-gui 中使用 JUNG2?

    我正在玩 JUNG2 想要实现一个小型 GUI 允许我显示和更改图表 遵循 JUNG 库中的示例效果很好 但它们没有分离模型 视图和控制器 所以我开始以干净的分离方式构建 GUI 我的第一个 GUI 版本应该是简单地显示初始图形 视图是模型
  • 是否可以在 sass 中重载 mixins ?

    假设你有一个像这样的阴影混合 mixin box shadow offset blur color moz box shadow offset offset blur color webkit box shadow offset offse
  • MySql 中的 DELIMITER 错误

    我正在使用以下sql DELIMITER DROP PROCEDURE IF EXISTS get auto increment settings CREATE PROCEDURE get auto increment settings B
  • Rails 不转换时区 (PostgreSQL)

    我对时区和 postgresql 数据库 Rails 3 0 4 PostgreSQL 9 0 有问题 我正在使用自定义范围 在其中附加一些条件 执行连接等 问题是 Rails 不会将时间转换为我的本地时区 这是范围的代码 scope wi
  • VBscript删除子文件夹

    我对 vb 脚本非常陌生 我需要一个脚本来根据起始名称 SA 和 2 天前删除几个三级子文件夹 example C abc user1 temp SA123 c abc user2 temp SA2345 c abc user3 temp
  • 如何在 VS Code 编辑器中按标题级别更改 Markdown 标题颜色?

    我的问题类似于但那里给出的答案是针对 Vim 的 我需要一个针对 VS Code 的答案 我是一个真正的新手 我尝试自己解决这个问题 但这些尝试失败了 Markdown 预览 GitHub 样式 https github com mjbvz
  • 如何复制克隆 UIElement 并保留布局/渲染信息?

    我想复制一个复杂的数据绑定UIElement但保留原始 UIElement 中的绑定 布局和渲染信息 创建一个新的UIElement似乎效率低下 因为我必须执行另一个完整的绑定 测量 排列 渲染过程 到目前为止我最接近的是创建一个新的Dra
  • 对于上下文无关语法,如何将其转换为等效的下推自动机?

    对于 0 1 2 上的上下文无关文法 G 起始变量为 S S 0S0 1S1 2S2 是是 22 我如何将其变成等效的下推自动机 下推自动机可以将符号推入堆栈顶部并将其弹出 它还可以将其转换基于最顶层的堆栈符号 我们需要考虑一种机制 允许我