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) 语法 的相关文章

  • 在 R 中解析和评估字符串表达式的列?

    如何将 R 中的一列字符串表达式作为管道的一部分进行解析和求值 在下面的示例中 我生成了所需的列 evaluated 但我知道这不是正确的做法 我尝试采取 tidyverse 方法 但我只是很困惑 library tidyverse df
  • 在 python 中将 Latex 代码转换为 mathml 或 svg 代码

    是否有任何 python 代码允许获取乳胶代码 用于方程 并将其解析为 mathml 或 svg 代码 一个以字符串 latex 代码 作为参数并输出字符串 svg 或 mathml 代码 的简单函数将是完美的 附言 我找到了这个http
  • 在Android中解析HTML

    我正在尝试从网页解析 android 中的 HTML 由于该网页格式不正确 我得到SAXException Android 有没有办法解析 HTML 我刚刚遇到这个问题 我尝试了一些东西 但决定使用JSoup http jsoup org
  • 如何解析kotlin代码?

    我需要分析 kotlin 文件代码 以检测关键字 data 和 问题是我没有找到任何像 JavaParser 这样的库 我不需要强大的工具 只需要能够返回行数的东西 任何想法 我使用antlr4来做到这一点 我创建了一个开源库 https
  • 如何解读这些时间戳?

    我正在尝试解析一些 xml 文件中写入的时间戳 大多数时间时间戳是这样的2009 07 22 07 00但有时我发现它们就像2009 07 22Z or 2009 07 22z 请帮助我如何解释这些 Z 以及如何解析它们 我认为这些 z 或
  • 如何在 C# 中导航任何 JSON 树?

    我需要像导航 XML 一样导航 Json 结构XmlDocument 结构未知 我需要迭代节点来解析一些数据 这可能吗 我知道我可以使用JavaScriptSerializer将其反序列化为已知类型 但事实并非如此 因为我可以接收任何有效的
  • Google Apps 脚本 Gmail CSV 导入工作表错误

    我从各种谷歌搜索中拼凑了这段代码 如果电子邮件有特定标签 这些代码将提取电子邮件的 CSV 附件 function importCSVFromGmail gets first latest message with set label va
  • CSV 损坏,如何修复?

    我正在尝试解析 CSV 我想将它放入数据库或只是用 JavaScript 解析它 但由于语法损坏 任何一种方法都会失败 我的整个 CSV 文件在这里 https gist github com 1023560 https gist gith
  • 在Java中解析日期的毫秒分数

    我正在使用以下模式在 Java 中解析日期 从服务器获取 yyyy MM dd T HH mm ss SSS 传入的字符串可能属于以下类型 2015 01 01T00 00 00 561 2015 01 01T00 00 00 5 我的问题
  • sed:更改 .yml 文件中环境属性的值

    我有一个 yml 文件 用于配置应用程序的环境属性 如下所示 env1 prop1 value1 prop2 value2 propn valuen env2 prop1 value1 prop2 value2 prop3 value3 p
  • python统计前10名

    使用Python 2 6 我有很大的文本文件 以下是前 3 个条目 但我需要检查超过 50 个用户 html log jeff 1153 3 1 84 625 54 1 2 71 3 2 10 7 58 499 3 5 616 36 241
  • Gson解析没有键值对的字符串

    我正在尝试使用 Gson 库解析字符串 但没有成功 这是我的字符串 1 816513 52 5487566 1 8164913 52 548824 此示例中的问题是没有键值对 我查看了其他示例 但它们都有键值对 看起来不像我的问题 我的解决
  • 关于Java中trim()方法的查询

    我之前提出了一个问题 但遭到了严厉的批评 所以我在这里再次提出 更简单 并重新措辞以吸引那些可能担心我之前提出问题的方式的人 背景 我正在解析一些 HTML 以获取信息 我将所有内容隔离在一系列行中 但我希望抓取的内容以及后面的一堆空格 为
  • 导入数据期间解析日期格式的最佳方法

    我创建了在数据导入 400 K 记录 期间解析视图不同日期格式的方法 我的方法捕获 ParseException 并尝试在不同时使用下一种格式解析日期 问题 在数据导入期间设置正确的日期格式是更好的方法 更快 吗 private stati
  • 如何提取Python代码文件中使用的函数?

    我想创建代码文件中使用的所有函数的列表 例如 如果我们在名为 add random py 的文件中有以下代码 import numpy as np from numpy import linalg def foo print np rand
  • 将 xml 转换为 python 字典

    我正在尝试创建一个 dict 类来处理 xml 但陷入困境 我真的没有想法了 如果有人可以指导这个主题 那就太好了 到目前为止开发的代码 class XMLResponse dict def init self xml self resul
  • 处理调车场额外的操作员

    给定这样的输入 3 4 算法将其转化为3 4 当执行后缀表达式时我可以找到错误 但是 在转换过程中是否有可能发现这一点 我读过的维基百科文章和互联网文章不处理这种情况 谢谢 除了括号不匹配之外 还可以使用正则表达式来验证有效表达式 如维基百
  • 是否有像 gccxml 这样的用于生成包装器的 C 标头解析器工具?

    我需要为一种新的编程语言编写一些 C 标头包装器 并且想要类似 gccxml 的东西 但不完全依赖 gcc 以及它在 Windows 系统上带来的问题 只需要读C而不是C 只要有完整的文档记录 任何格式的输出都可以 Linux Solari
  • 从 csv 中读取 pandas 数据帧,以非固定标头开始

    我有许多数据文件是由我的实验室中使用的一些相当黑客的脚本生成的 该脚本非常有趣 因为它在标头之前附加的行数因文件而异 尽管它们具有相同的格式并具有相同的标头 我正在编写一个批处理来将所有这些文件处理为数据帧 如果我不知道位置 如何让 pan
  • 编程语言语法中尾随逗号的历史

    许多编程语言允许在其语法中在列表中的最后一项后面使用尾随逗号 据说这样做是为了简化自动代码生成 这是可以理解的 作为示例 以下是 Java 中完全合法的数组初始化 JLS 10 6 数组初始值设定项 http java sun com do

随机推荐

  • 如何在 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