非回文的上下文无关语法

2024-06-21

我需要一个 CFG 来生成回文以外的字符串。已提供解决方案如下。(计算理论导论 - Sipser)

R -> XRX | S
S -> aTb | bTa
T -> XTX | X | <epsilon>
X -> a | b

我大致了解了该语法的工作原理。它要求通过产生式插入一个子字符串,该子字符串的每一半都有相应的不相等的字母表S -> aTb | bTa,从而确保永远不会生成回文。

我将写下我所理解的前两个作品的语义,

  • S生成不能是回文的字符串,因为它们的第一个和最后一个字母不相等
  • R由至少一个组成S作为子字符串,确保它永远不是回文。

我不完全理解第三个产品的语义,即 .

   T -> XTX | X | <epsilon>
   X -> a | b

在我看来,T 可以生成 a 和 b 的任意组合,即 {a, b}*。为什么它不能像

T -> XT | <epsilon>
X -> a | b

两者不是等价的吗?既然后者更直观,为什么不使用它呢?


确保您拥有仅生成非回文的语法的最佳方法如下: 定义:

  • Pal - 回文语言
  • {a, b}* - 包含字母表中所有字符串的语言 {a, b}
  • 非 Pal - 所有非回文字符串的语言(即 不在帕尔)

观察非 Pal = {a, b}* - Pal

Pal 的语法已知如下:

  • S -> 拉姆达|一个 |乙|萨 |锑化硼

{a, b}* 的语法可以写成如下:

  • S -> 拉姆达|萨|锑

现在要构建非 Pal 的语法,请遵守以下规定:

  • If x is an element of non-Pal then:
    • axa 是非 Pal 的一个元素
    • bxb是非Pal的元素
  • If y is an element of {a, b}* then:
    • ayb 是非 Pal 的元素
    • bya 是非 Pal 的一个元素

结合所有这些信息,非 Pal 的语法将是:

  • S-> aSa |锑化物 |抗体 |巴阿
  • A -> 拉姆达 |啊|抗体

我希望这能澄清事情

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

非回文的上下文无关语法 的相关文章

  • 涉及多个变量的程序的时间复杂度

    最近 我被要求创建一个程序来查找文本片段中的最佳匹配 我已经成功编写了这个程序 但我确实对其时间复杂度有疑问 问题定义如下 给定一个查询 查找文档中出现的查询词并突出显示最佳标记 我的程序花费的时间 O m n p here m 文档长度
  • 如何修改解析语法以允许赋值和非赋值语句?

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

    我目前正在查看 CFG 并看到答案 但我不确定他们是如何得到它的 他们是如何将其从 CFG 转换为正则表达式的 S gt aS bX a X gt aX bY a Y gt aY a answer R E gt a a ba a ba ba
  • 是否有工具可以在 ANTLR 和其他形式的 BNF 之间进行转换? [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 是否有任何工具可以将 ANTLR 语法与其他 BNF 语法相互转换 巴科斯 诺尔范式有多种形式 BNF
  • 用堆栈实现的 LL(1) 解析器:如何构建 AST?

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

    the language is An B 2n Cn where n gt 0 我认为是有的 因为你可以这样处理 推入A 推入B 每个C从堆栈中弹出3次 如果没有C并且堆栈为空 则返回true 否则返回false 使用泵引理来证明这不是上下
  • 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
  • 有没有一种正则语言来表示正则表达式?

    具体来说 我注意到正则表达式的语言本身并不是正则的 因此 我无法使用正则表达式来解析给定的正则表达式 我需要使用解析器 因为正则表达式本身的语言是上下文无关的 有没有什么方法可以用可以使用正则表达式解析结果字符串的方式来表示正则表达式 注意
  • 构建上下文无关语法

    如何为以下语言构建上下文无关语法 L a l b m c n d p l n m p l m n p gt 1 我首先尝试 S gt abcd aAbBcd abcCdD aAbcdD AabBcCd 进而A 其他东西 但我无法让它工作 我
  • 消除立即左递归

    我明白 为了从包含 A A 形式产生的语法中消除立即左递归 我需要将其替换为 A A 和 A A 我有以下产生式 我需要消除立即左递归 E E T T E E T T T T F T F E id 我可以看到 消除后第一个生产变成 E TE
  • 如果我们知道一个CFG只生成正则语言,那么我们能得到对应的正则表达式吗?

    众所周知 给定一个正则语法 我们有算法来获取它的正则表达式 但是如果给定的语法是上下文无关语法 但它只生成常规语言 就像 S gt aAb A gt bB B gt cB d 有没有现有的算法可以得到通用的正则表达式 Thanks 从最一般
  • 常规语言的抽引理

    我在使用泵引理检查给定语言是否规则时有点困惑 假设我们必须检查是否 L 接受偶数的语言0是否正常 我们知道它是正则的 因为我们可以为 L 构造一个 DFA 但我想用泵引理来证明这一点 现在假设我拿一个字符串w 0000 现在将字符串划分为x
  • BNF 可以处理远期消费吗?

    最近我发现了 python 模块pyparsing 一个通过编写来解析数据的绝佳工具grammar 而不是解析器 我对上下文无关语法的概念很陌生 所以请纠正这个问题中的任何错误假设 Pyparsing 可以实现 BNF 巴科斯 诺尔范式 h
  • 旅行商问题中 NP 难问题和 NP 完全问题的混淆

    旅行商优化 TSP OPT 是一个NP难题 旅行商搜索 TSP 是NP完全问题 然而 TSP OPT 可以简化为 TSP 因为如果 TSP 可以在多项式时间内求解 那么 TSP OPT 1 也可以 我认为要将 A 简化为 B B 必须与 A
  • 最慢的计算复杂度(Big-O)

    在这些算法中 我知道 Alg1 是最快的 因为它是 n 平方的 接下来是 Alg4 因为它是 n 的立方 然后 Alg2 可能是最慢的 因为它是 2 n 这应该具有非常差的性能 然而Alg3和Alg5在我的阅读速度方面还没有遇到过 这两种算
  • 使用 Parsec 解析正则表达式

    我正在尝试通过实现一个小型正则表达式解析器来学习秒差距 在 BNF 中 我的语法类似于 EXP EXP LIT EXP LIT 我尝试在 Haskell 中实现这一点 expr try star lt gt try litE lt gt l
  • 调试VBA、定位问题及排查方法[关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 有哪些方法调试VBA代码 具体来说 单步执行代码 断点和停止命令 TheDebug command 当地人和观察窗 调用栈 调试 VB
  • 为什么在线解析器似乎停在正则表达式处?

    我一直想知道为什么似乎没有任何解析器 比如说 BNF http en wikipedia org wiki Backus E2 80 93Naur Form 其行为类似于各种库中的正则表达式 当然 还有类似的事情ANTLR http www

随机推荐