Epsilon(ε) 产生式以及 LR(0) 语法和 LL(1) 语法

2024-04-15

在很多地方(例如在这个答案中here https://stackoverflow.com/a/8496838/7571421),我看到有人说 LR(0) 语法不能包含 ε 产生式。

Also in 维基百科 https://en.wikipedia.org/wiki/LL_grammar我见过这样的说法: ε 自由 LL(1) 语法也是 SLR(1)。


现在我面临的问题是我无法推理出这些陈述背后的逻辑。

好吧,我知道 LR(0) 语法通过空堆栈接受 DPDA 接受的语言,即它们接受的语言必须具有前缀属性。 [但是,如果我们假设结束标记,则可以处理此前缀属性,因此给定任何语言,前缀属性应始终得到满足。许多文字如计算理论 by Sipser假设这个结束标记只是他们的论点]。话虽这么说,我们可以(非正式地?)说,如果 LR(0) 项的规范集合中不存在具有移位归约冲突或归约-归约冲突的状态,则语法是 LR(0)。

在此背景下,我尝试考虑以下语法:

S -> Aa
A -> ε

LR(0) 项目的规范集合

在上面的DFA中,我发现没有任何状态存在移位-归约冲突或归约-归约冲突。

所以根据我的分析,这个语法应该是LR(0)。但它也有 ε 的产生。

这个例子是不是与下面的说法相矛盾:

“没有带有 ε 产生式的文法可以是 LR(0)”

我想如果我知道上面引用的陈述背后的逻辑,那么我就能更好地理解这个概念。


实际上我的主要问题是由以下声明引起的:

ε 自由 LL(1) 文法也是 SLR(1)。

当我问我的一位朋友时,他给出了这样的论点:由于 LL(1) 文法是 ε 自由的,因此它是 LR(0),因此它是 SLR(1)。

但我也无法理解他的逻辑。当我问他有关推理的问题时,他开始分享有关“ε 产生式的语法永远不可能是 LR(0)”的帖子......

但就我个人而言,我无法想到“ε free LL(1) 语法如何是 SLR(1)”的任何逻辑。它真的与上面的“带有ε产生式的文法不能是LR(0)”的性质有关吗?如果是这样,请帮助我。如果不是,那么我是否应该考虑针对第二个困惑提出一个单独的问题?


我的编译器设计概念仅来自乌尔曼的《龙》一书。还有来自 Ullman 和其他一些文本(如 Sipser、Linz)的 TOC 知识。


你的语法的一个显着特点是A只能被淘汰。它绝对没有任何作用。 (我所说的“消除”是指简单地删除所有对它的引用;使产品保持完整。)

确实,它的存在并不排除语法是 LR(0) 的。类似地,具有不可到达的非终结符和该非终结符的 ε-产生式的文法也可以是 LR(0)。

所以更准确的说法是,如果一个文法有一个富有成效的具有 ε-产生式和其他一些的非终结符富有成效的生产。但由于我们通常只考虑简化语法,而没有无意义的非终结符,所以我不确定这种额外的学究气有多大作用。


至于你关于 ε-free LL(1) 语法的问题,这里有一个粗略的概述:

如果 ε-free 文法不是 LR(0),则存在同时具有移位和归约操作的某种状态。由于语法是 ε-free 的,因此可以通过移位或 goto 达到该状态。那么,先前的状态必须有两个具有相同 FIRST 集的不同产生式,这与 LL(1) 条件相矛盾。

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

Epsilon(ε) 产生式以及 LR(0) 语法和 LL(1) 语法 的相关文章

  • “HH:MM:SS”中的秒数

    获取 hh mm ss 等字符串表示形式的秒数的最佳方法是什么 显然 Integer parseInt s substring 3600 Integer parseInt s substring 60 Integer parseInt s
  • XAMPP 不解析 PHP

    我刚刚安装了 XAMPP 1 8 1 并重新启动了计算机 开始运行 Apache 和 MySQL 并在 XAMPP 下的 htdocs 目录中的测试文件夹中创建了一个测试文件 当我访问 xampp index php 时 他们的页面显示正常
  • Python itertools groupby 中令人不安的奇怪行为/错误?

    我在用itertools groupby解析一个短的制表符分隔的文本文件 文本文件有几列 我想做的就是对具有特定值的所有条目进行分组x在特定的列中 下面的代码对名为的列执行此操作name2 寻找变量中的值x 我尝试使用以下方法来做到这一点c
  • 有没有好的方法来解析用户代理字符串?

    我有一个Java接收模块User Agent来自最终用户浏览器的字符串的行为需要略有不同 具体取决于浏览器类型 浏览器版本甚至操作系统 例如 FireFox 7 0 Win7 Safari 3 2 iOS9 我明白了User Agent由于
  • 解析 JWT 令牌以仅获取有效负载内容,无需 C# 或 Blazor 中的外部库

    我正在使用 Blazor 编写可以访问 JWT 的客户端应用程序 我想知道一种简单的方法来读取令牌有效负载内容而不添加额外的依赖项 因为我不需要其他信息 也不需要验证令牌 我认为解析有效负载内容应该足够简单 只需将其写入方法即可 JwtTo
  • Beautiful Soup 获取动态表数据

    我有以下代码 url https www basketball reference com leagues NBA 2017 standings html all expanded standings html urlopen url so
  • Facebook Graph API 使用 json 和 C# 检索好友

    我正在使用 C 和 Graph API 进行工作 并且能够获取 Facebook 用户个人资料信息 例如 ID 姓名和电子邮件 然后反序列化 JSON 以便能够将值分配给标签 然而 我的问题是 当我去获取好友列表或任何与此相关的列表时 如何
  • XML 和 INI 哪个更快?

    我想知道 XML 是否比 INI 更快 反之亦然 我正在开发一个包含许多文件的网站 这个问题与我的问题有关关于包含许多文件 https stackoverflow com questions 7777522 too many include
  • 使用 DataContractJsonSerializer WP7 将数组解析为 Json 字符串

    如何使用 DataContractJsonSerializer 解析 Json 字符串中的数组元素 语法是 array elementsProperies SomeLiteral 您不一定使用 DataContractJsonSeriali
  • 如何使用 alex/haskell 执行 python 风格的缩进/缩进标记?

    我正在用 Haskell 为 Alex 中的一种小语言编写一个词法分析器 该语言被指定为具有 python 式的显着缩进 只要缩进级别发生变化 就会发出 INDENT 标记或 DEDENT 标记 在像 C 这样的传统命令式语言中 您将在词法
  • Xtext和ANTLR之间有什么关系?

    我听说Xtext最终使用ANTLR 但他们的语法规范文件的格式有些不同 那么两者之间是什么关系呢 Xtext 依赖于 Antlr 解析器生成器来解析输入文件 除此之外 该框架还提供了许多附加值 例如强类型 AST 链接抽象和静态分析以及 E
  • 一个对大文件有效的轻量级 XML 解析器?

    我需要解析潜在的巨大 XML 文件 所以我猜这排除了 DOM 解析器 是否有任何优秀的 C 轻量级 SAX 解析器 在占用空间上可与 TinyXML 相媲美 XML的结构非常简单 不需要诸如命名空间和DTD之类的高级东西 只是元素 属性和
  • 解析 XML 并检索信息 多层节点 Deep Java/Android

    我正在使用我的教授提供的示例 该示例从天气预报站点获取数据并解析 XML 文件以在列表中显示天气状况 我的程序类似 但我想检索嵌套在多个节点中的信息 但我不知道如何获取它 这是我正在处理的 XML 文件
  • 使用 Python ast 模块访问语法树中的节点

    我正在玩 python ast 抽象语法树 我编写了以下内容 它访问了 AST 的所有节点 import ast class Py2Neko ast NodeVisitor def generic visit self node print
  • 在 JavaScript 中解析 PHP 数组

    我有一些 PHP 源代码 它们是简单的键值数组 如下所示 return array var1 gt var2 And return array sub gt array var1 gt var2 我需要将它们解析为 JavaScript 对
  • 用 C# 解析和查询 SOAP

    我正在尝试解析一个大量命名空间的 SOAP 消息 源也可以在here http tinyurl com n3av6k
  • 使用 PEG.js 忽略空格

    我想忽略空格 and 新线路按照我的语法 所以它们在PEG js http pegjs majda cz online输出 此外 括号内的文字应在新数组中返回 Grammar start a sep cat dog sep sep stmt
  • 寻找引文解析器

    我需要一个解析器来扫描学术文本 提取引文 并将这些引文解析为其组成部分 作者 标题 出版日期等 我尝试过 Paracite 但它速度非常慢 而且不能产生高质量的结果 任何语言都可以 但首选 Java 看一眼ParsCit http aye
  • 在 Delphi 中使用 XML(将特定数据返回到变量)

    过去几天我一直在尝试使用 Delphi 2010 和 MSXML 我是一个极端的新手 需要一点指导 var MemoryStream TMemoryStream XMLPath String sName String XMLDoc vari
  • AWK:递归下降 CSV 解析器

    响应一个BASH 中的递归下降 CSV 解析器 https codereview stackexchange com questions 11727 need some advice or help with translation and

随机推荐

  • 如何在 Java 中检测苹果芯片 (M1) 与英特尔芯片?

    对于每个不理解这个问题的人 请注意 os arch属性只会给你JRE的架构 而不是底层操作系统的架构 这不能回答我的问题 如果在 64 位系统上安装 32 位 jre System getProperty os arch 将返回 x86 为
  • 如何“取消转换”来自 South (Django) 的应用程序?

    我的内心发生了很大的变化models py 包括删除很多字段 并重命名几个类 schemamigration auto工作正常 但尝试migrate抛出一堆错误 我的所有代码目前都在开发中 所以我不介意丢失太多数据 所以我希望 South
  • 请求失败,HTTP 状态为 401:未经授权。 SSRS

    我在 MVC Web 项目中有一个处理 SSRS 的类 当我在 IIS 计算机中运行该应用程序时 我可以正常访问报告 当从网络上的另一台计算机运行时 出现 请求失败 HTTP 状态 401 未经授权 报表服务器有自己独特的凭证 不接受网络上
  • WinDbg:APPLICATION_HANG_WRONG_SYMBOLS

    我对 WinDbg 还很陌生 我正在尝试找到一个导致我的应用程序无缘无故挂起的错误 我不确定我做的事情是否正确 但我知道我需要系统 dll 以及我正在调试的 exe 的符号 因此 我这样设置符号路径 srv c websymbols htt
  • post方法的问题(使用fetch和express)

    我是一个非常初学者 所以我希望我的问题不是那么愚蠢 我想要做的是将经度和纬度从客户端 JavaScript 传递到服务器端的 Node js 中 我正在使用 fetch 和express js 下面是我的 html 代码 latitude
  • 如何为 PMD Xpath 规则设置嵌套条件

    我的规则要求我仅将它们应用于名称中不包含 get 的方法 换句话说 我的规则只需要应用于类中的非 getter 方法 我知道要掌握所有非 getter 方法 我可以使用 MethodDeclarator not contains Image
  • 步数计数器不会重置步数

    我可以使用以下命令开始和停止记录步骤Sensor TYPE STEP COUNTER通过注册和取消注册侦听器 但是 通过传递给我的应用程序的实际值SensorEvent当应用程序被销毁时 对象不会重置为零 如果我关闭应用程序并重新启动它 或
  • Javascript `this` 对象 == 成员函数中的 `window`

    在我的一些 Javascript 对象中 我发现我的this指针是正确的 这些是new Func type 对象 创建时 但在分配的方法中可能是错误的 function Confused console log checking this
  • 未找到 Emacs shell 命令

    我在 Mac OS X 10 5 8 上工作 我正在努力学习emacs 我对它很陌生 今天尝试从 emacs 中输入 shell 命令 我进入了pdflatex filename 但是 它给了我一个错误说 bin bash pdflatex
  • django 查询所有相关集的过滤?

    class Customer models Model name models CharField max length 200 class CustomerTicket models Model customer models OneTo
  • NSFetchedResultsChangeDelete 未被触发

    以前有人遇到过这个吗 当我选择从 tableView 由 FRC 填充 中删除一行时 应用程序不会崩溃或挂起 它没有任何作用 删除按钮保持选中状态 如果我单击模拟器上的其他位置 删除按钮将取消选择并消失 但单元格永远不会从 UI 中删除 我
  • libTogl 未定义的引用

    我正在尝试安装 netgen 从源代码构建 因此需要 Togl 我通过以下方式安装了它 sudo apt get install libtogl1 libtogl dev 当输入 make 时 我收到以下错误消息 usr lib gcc x
  • #ifdef 与 #if - 作为启用/禁用特定代码部分编译的方法,哪种更好/更安全?

    这可能是一个风格问题 但我们的开发团队存在一些分歧 我想知道是否还有其他人对此事有任何想法 基本上 我们有一些调试打印语句 我们在正常开发期间将其关闭 我个人更喜欢执行以下操作 SomeSourceFile cpp define DEBUG
  • Azure Web 应用程序、PHP 7.4、OCI8(Oracle 即时客户端 12.2.0.1.0)

    我们正在尝试将现有的 PHP 7 4 应用程序从 Windows Server 2012 上运行的内部服务器提升到 Azure Web 应用程序 PHP 应用程序使用 OCI8 连接到 Oracle 数据库 在不启用 OCI8 扩展的情况下
  • 使用 Oracle PL/SQL 存储过程授予其他用户表的权限

    我遇到了执行以下操作的应用程序的问题 PL SQL 包 A 包含应用程序的所有函数 过程 A 由 USER A 拥有 A 在 Oracle 中创建用户帐户 并在这些用户下创建表 A 还必须能够 TRUNCATE INSERT 到用户的表 注
  • 返回 dynamodb 中具有最大排序键的项目

    我正在使用 python 脚本访问 AWS 中的 dynamodb 数据库 我有一个带有哈希键和排序键的表 对于给定的哈希键 我想找到具有小于某个值的最大排序键的项目 我怎样才能做到这一点 或者 有没有办法从给定的键查找前一项 I am n
  • 撇号和 SQL Server FT 搜索

    我在 SQL Server 2005 中设置了 FT 搜索 但我似乎找不到将 Lias 关键字与 Lia s 记录相匹配的方法 我基本上想要的是允许人们在没有撇号的情况下进行搜索 我已经断断续续地解决这个问题有一段时间了 所以任何帮助都将是
  • NSDictionary 中的键和值是有序的吗?

    我的意思是 NSDictionary 中键和值的顺序是否始终与初始化 NSDictionary 时指定的顺序相同 或者如果我真的需要知道键的顺序 我应该更好地维护一个单独的 NSArray 吗 不 他们没有被订购 只要您不从字典中添加或删除
  • Android - 从网络下载图像,保存到应用程序私有位置的内存中,显示列表项

    我想做的是 我希望我的应用程序从互联网下载图像并将其保存到手机内存中应用程序私有的位置 如果列表项没有可用的图像 即无法在 Internet 上找到 我希望显示默认的占位符图像 这是我在 list item row xml 文件中定义为默认
  • Epsilon(ε) 产生式以及 LR(0) 语法和 LL(1) 语法

    在很多地方 例如在这个答案中here https stackoverflow com a 8496838 7571421 我看到有人说 LR 0 语法不能包含 产生式 Also in 维基百科 https en wikipedia org