无扫描器解析器生成器

2024-05-03

序幕:尽管解析器(上下文无关语法)识别的语言集严格大于扫描器(常规语法)识别的语言集,但大多数解析器生成器都需要扫描器。

(请不要试图解释其背后的原因,我很了解它们)。

我见过解析器,不需要像这样的扫描仪

  • Elkhound http://scottmcpeak.com/elkhound/(可选,富田/GLR)
  • DParser http://dparser.sourceforge.net/(富田/GLR)
  • SDLR http://www.program-transformation.org/Sdf/SGLR(富田/GLR)

不使用扫描仪有一些优点:

  • 只有一个概念(上下文无关语法)而不是两个
  • 在一个文件中解析多种语言(例如 HTML/Javascript)
  • 解析没有保留关键字的语言(例如PL/1 http://en.wikipedia.org/wiki/PL/1#cite_ref-35)

通常,会使用“解决方法”,例如根据解析器的请求切换扫描器。

问题:您知道任何其他无扫描器解析器生成器(任何语言)吗?这些是否实用(或纯粹学术)?除了 Tomita/GLR 之外还有其他方法吗?

Answers:

  • 提升::精神::气 http://www.boost.org/doc/libs/1_42_0/libs/spirit/doc/html/spirit/qi.html by AraK https://stackoverflow.com/questions/2224373/scannerless-parser-generators#2224497
  • 解析表达式语法 (LPEG http://www.inf.puc-rio.br/~roberto/lpeg/lpeg.html对于 Lua)诺曼拉姆齐 https://stackoverflow.com/questions/2224373/scannerless-parser-generators#answer-2259075
  • Yakker http://portal.acm.org/citation.cfm?id=1707801.1706347 by 诺曼拉姆齐 https://stackoverflow.com/questions/2224373/scannerless-parser-generators#answer-2259075
  • MBase http://www.meta-alternative.net/mbase.html by SK-logic https://stackoverflow.com/questions/2224373/scannerless-parser-generators#2468670
  • Waxeye http://waxeye.org/ by 特雷弗·罗宾逊 https://stackoverflow.com/questions/2224373/scannerless-parser-generators#7542186

另外两个:

  • Bryan Ford 的解析表达式语法 (PEG) 不需要扫描仪。高效、惰性的“Packrat 解析器”是可选的。我对 Lua 的体验非常好LPEG http://www.inf.puc-rio.br/~roberto/lpeg/lpeg.html版本,它编译为高效的字节码机器。相当实用。

  • 看起来非常有趣,尽管它显然仍处于预发布状态。他们正在使用他们声称的 Earley 解析算法的有效变体。

事实上,我是无扫描器解析器的忠实粉丝;它们极大地简化了配置。温和地说,典型的扫描仪生成器使用起来并没有多大乐趣。来自 Lex 的手册页:

杀死这只恐龙的小行星仍在轨道上。 http://dinosaur.compilertools.net/

最后,我对 Elkhound 没有个人经验,但我听到的二手报告令人印象深刻。我想说毫无疑问,但是some无扫描器解析器生成器非常实用。

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

无扫描器解析器生成器 的相关文章

  • 包含范围内的随机浮点双精度

    我们可以很容易地得到所需范围内的随机浮点数 X Y 请注意 X 是包含在内的 Y 是不包含的 具有下面列出的函数 因为Math random 和大多数伪随机数生成器 AFAIK 产生数字 0 1 function randomInRange
  • 封装和抽象之间的区别

    我今天去面试了 我有一个问题来自OOP 关于之间的区别封装 抽象 我据我所知回答说封装基本上将数据成员和成员函数绑定到一个称为Class 然而抽象基本上是为了隐藏实现的复杂性并为用户提供方便的访问 我以为她会同意我的回答 但她质疑 如果两者
  • 为什么矢量化通常比循环更快?

    为什么在执行操作的硬件的最低级别和所涉及的一般底层操作 即 运行代码时所有编程语言的实际实现通用的事情 矢量化通常比循环快得多 计算机在循环时会做什么而在使用矢量化时不会做什么 我指的是计算机执行的实际计算 而不是程序员编写的计算 或者它有
  • 优化康威的“生命游戏”

    为了进行实验 我 很久以前 实施了康威的生命游戏 http en wikipedia org wiki Conway s Game of Life 而且我知道this https stackoverflow com questions 18
  • 我可以在服务器端应用程序(PHP、Ruby、Python 等)上读取 URL 的哈希部分吗?

    假设 URL 为 www example com val 1 part2 PHP可以读取请求变量val1使用 GET 数组 是哈希值part2还可读吗 或者这仅取决于浏览器和 JavaScript 主要问题是浏览器甚至不会发送带有片段部分的
  • 两个平面之间的交线

    如何找到两个平面之间的交线 我知道数学思想 并且我做了平面法向量之间的叉积 但如何以编程方式从结果向量中获取行 平面的方程为ax by cz d 0 其中 a b c 是平面的法线 d 是到原点的距离 这意味着满足该方程的每个点 x y z
  • 为什么不是每种类型的对象都可序列化?

    为什么不是每种类型的对象都是隐式可序列化的 以我有限的理解 对象不就是简单地存储在堆上并将指向它们的指针存储在堆栈上吗 难道您不应该能够以编程方式遍历它们 以通用格式存储它们 并且还能够从那里重建它们吗 某些对象封装了无法访问的资源 例如文
  • 多个资源的 REST 接口使用

    我目前正在通过 http 添加 REST API 到在线服务 我遇到了一个非常简单的问题 我找不到令我满意的答案 我主要有 2 个资源 用户 和 报告 正如您所猜测的那样 报告与用户相关联 与一个且仅一个 我的数据库中的外键 不管怎样 我有
  • 是否可以通过括号来防止死亡?

    有时 我会编写一些带有比我喜欢的更多括号的代码 if new Day new Date millisecondsPerDay 75 instanceof oldDay Bonus points if that condition made
  • 为什么要使用继承? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 有没有办法获取正在运行或新打开的资源管理器窗口的 IExplorerBrowser 接口以供后续 BrowseToXXX 调用?

    这么问是因为在上一个问题 https stackoverflow com questions 6220899 answer 6221898我是指向 IExplorerBrowser 的指针 但是它创建了一个子窗口 而我想模拟资源管理器的 查
  • 从应用程序中删除死代码的最佳方法是什么? [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 我经常觉得 在多次迭代我的代码之后 我留下了一些函数 类或其他代码行 这些代码在以前的版本中有意义 但对于新版本来说并不是很有用 我知道探查器可
  • 有效地将相似的数字分组在一起[重复]

    这个问题在这里已经有答案了 可能的重复 一维数数组聚类 https stackoverflow com questions 11513484 1d number array clustering 我有一个数字数组 例如 1 20 300 4
  • Google 文件系统中的块大小问题

    谷歌文件系统论文 http labs google com papers gfs html 块大小是关键设计之一 参数 我们选择了64MB 这比典型文件大得多 系统块大小 每个块 副本存储为普通 Linux 文件放在 chunkserver
  • 关于 Python 解析器生成器的建议

    我接到一项任务 必须为简单的类 C 语言创建一个解析器 我可以使用任何我希望创建解析器的编程语言和工具 但我同时正在学习 Python 所以它是我的首选 我的解析器必须遵循一些限制 首先 它必须能够读取包含以下信息的文本文件 kind1 s
  • 多维数组(如 C/C++ 中的数组)是不规则数组的特殊情况吗? [关闭]

    Closed 这个问题是无关 help closed questions 目前不接受答案 我和一个哥们讨论了C 和C多维数组是否是不规则数组的特例 一种观点是 多维数组不是参差不齐的数组 因为多维数组的每个元素具有相同的大小 在参差不齐的数
  • Lockfree 标准集合和教程或文章

    有人知道用于无锁常用数据类型的实现 即源代码 的好资源吗 我正在考虑列表 队列等 锁定实现非常容易找到 但我找不到无锁算法的示例以及 CAS 的工作原理以及如何使用它来实现这些结构 查看 Julian M Bucknall 的博客 他 详细
  • 什么是悲观主义?

    该问题有评论可以使用C 11的吗auto提高性能 https stackoverflow com questions 32510183 can the use of c11s auto improve performance这获得了很多选票
  • 如何为抽象工厂创建的类设置特定属性?

    是否可以让具体工厂使用抽象工厂模式为其创建具有特定类型参数的具体类 或者由各自的具体工厂创建的不同具体类是否需要具有相同的字段 例如 在下图中 您将如何使用客户端 应用程序 给出的不同参数集来实例化 WinButton 和 OSXButto
  • 类是否应该有静态和非静态成员

    我试图找出一个类何时适合同时具有静态和非静态函数 又名 obj new ClassA obj gt doOOPStuff something ClassA doStaticStuff Note This example is done in

随机推荐

  • 使用 Pandas 滚动差异

    您好 我正在尝试使用 Pandas 滚动函数来计算下表中的滚动差异 我正在尝试生成 每月可用项目 列中的值 但没有得到任何结果 请帮忙 Item Adds Subtracts Month Monthly Available items A
  • 在opencv中保存帧而不压缩

    我正在尝试使用写 OpenCV 函数 我想保存帧 TIFF扩大 我遇到的问题是保存的图像被压缩 所以我无法使用它们 知道如何摆脱这种压缩吗 提前致谢 不要介意西奇说的话 TIFF 标志通过 LZW 压缩硬编码在 opencv 二进制文件中
  • 如何分发仅二进制的 go 包

    我想以二进制形式分发包而不包含源代码 我的演示项目目录结构是这样的 demo greet greet go hi hi go hello hello go main go main go package main import fmt de
  • 在提交 Google 表单时找不到具有给定 ID 的项目

    我创建了一个在 Google 表单上运行 onSubmit 的脚本 它应该获取上传到表单的图像的 ID 获取 Blob 形式的图像 然后将其转发到某个电子邮件地址 问题是 有时 大约十分之一 脚本会给出以下错误 例外 找不到具有给定 ID
  • 获取 WSA 错误代码的格式化消息

    我在 win32 C 应用程序中使用winsock2 我将使用 MessageBox 显示可以通过调用 WSAGetLastError 检索的网络错误 我怎样才能做到这一点 我看到 FormatMessage 但我不明白如何使用它 例如 以
  • C# Socket.receive连续接收0字节且循环中不阻塞

    我正在尝试用 C 编写一个最简单的多线程 TCP 服务器 它接收来自多个客户端的数据 每次连接新客户端时 都会建立套接字连接 并将套接字作为参数传递给新类函数 之后运行 while 循环并接收数据 直到客户端连接为止 这里的问题是 sock
  • 为多线程 UDP 客户端执行“close ()”时套接字描述符未释放

    我在下面编写了 UDP 客户端 它基本上生成一个单独的线程来接收数据报 但是数据报仅在主线程中发送 现在 在 Linux 发行版上实例化 udpClient 1 UDP 客户端后按 ctrl D 实现退出循环 围绕 getline 调用 并
  • 创建数据库连接的成本很高吗?

    为什么创建数据库连接的成本很高 比如它到底消耗了什么有限资源 带宽 网络往返 CPU 通常创建成本高昂意味着它会消耗一些资源 例如 cpu 磁盘 io 但在连接的情况下我只能想到同步 确认等所需的时间 您没有说明您要问的数据库是什么 所以这
  • Microsoft Graph API 授权错误:无效受众

    我知道这是一个很长的问题 但如果有人能与我分享他们的想法或经验 我真的很感激 因为我已经解决这个问题几天了 现在正在尝试很多事情 我有一个 ASP Net Core 3 1 Web API 应用程序和一个 ASP NET Core 3 1
  • 对整数进行反直觉测试:63 = (45 x 1.4) = 62

    我写了一个 可能不是特别好 函数来测试一个数字是否是整数 is wholeNumber lt function x x floor x 一般来说 这个函数对我的目的来说效果很好 因为我实际上只考虑用少数小数位测试数字的情况 所以我天真的理解
  • Bixby - 将用户输入从一次操作传递到其他操作

    我正在尝试实现从一个操作读取用户输入并在其他屏幕中读取 例如 user xx Bixby who s there user yyy Bixby yyy who I am able to read user input yyy but una
  • 使用python同时播放两个正弦音

    我正在使用 python 来播放正弦音 音调基于计算机的内部时间 以分钟为单位 但我想根据秒同时播放一个音调 以获得和谐或双重的声音 这就是我到目前为止所拥有的 有人能指出我正确的方向吗 from struct import pack fr
  • 如何在alert()之后给予focus()?

    我有类似的东西
  • 通过 Git/SVN 将前缀 ? 添加到代码中

    怎么加前缀 v VersionNumber使用 Git SVN 高效地访问存储库中的每个文件 我发现 SO 使用这种做法为其存储库中的每个特定文件提供版本号 他们使用SVN 我想知道如何使用 Git 做同样的事情 举几个例子 1 2 在你的
  • 为什么实体框架需要 ICollection 来延迟加载?

    我想编写一个丰富的域类 例如 public class Product public IEnumerable
  • return 语句是否为按值返回的函数创建临时对象?

    当我学习 C 11 右值引用和移动语义时 我开始对函数如何返回值来初始化变量感到困惑 看下面的例子 Widget makeWidget Widget w return w Widget w1 makeWidget 这里我假设没有 RVO 即
  • 如何在 HTML/CSS 中进行制表符停止

    我想用 HTML 呈现一些文本的格式 这是一张图片 请注意带有项目符号点和段落编号的灰线 项目符号应位于页面中央 并且数字应正确对齐 我一直在尝试思考如何在 HTML 中做到这一点 但一无所获 您将如何捕获这种格式 您可以使用 before
  • MagicSuggest动态ajax源码

    我在用着魔法建议 https github com nicolasbize magicsuggest对于自动完成输入文本 自动完成提要非常大 因此我无法完整下载它 在他们的示例中 他们提供了以下代码 脚本语言 document ready
  • 无法加载 php_curl

    我已经在WindowsXp上安装了php5 2 13 apache2 2 15 将C php添加到PATH ssystem变量中 我无法启用卷曲扩展 我配置了extension dir并删除了 在 php ini 中形成 php curl
  • 无扫描器解析器生成器

    序幕 尽管解析器 上下文无关语法 识别的语言集严格大于扫描器 常规语法 识别的语言集 但大多数解析器生成器都需要扫描器 请不要试图解释其背后的原因 我很了解它们 我见过解析器 不需要像这样的扫描仪 Elkhound http scottmc