问题标签 [parser-generator]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
586 浏览

parser-generator - 增量 SLR 解析器生成器有什么用?

我曾经实现过一个生成增量解析器的 SLR 解析器生成器。解析器可以从头到尾解析一段文本,但是当您删除或插入文本时,它会做最少的工作和对令牌流和语法树的最小更改,而不是从头开始重新解析所有内容。问题是我找不到这个的任何用途?解析器比普通解析器做的工作略多。这样的东西有什么用吗?PS。如果你想知道怎么做,谷歌'basics of compiler design diku',这是一本免费的书,那么我所要做的就是稍微修改一下算法,让它到处存储解析器的状态,这是额外的工作我上面提到过。

0 投票
5 回答
5069 浏览

c# - C# Lua 解析器/分析器

首先要做的事;

我正在用 C# 编写一点 LUA-Ide。代码执行由一个名为 LuaInterface 的程序集完成。代码编辑由 Scintilla-Port 完成,RAD / UI 界面通过可扩展的 IDesignSurfaceExt Visual Studio(单向代码生成)完成。文件处理由用作项目包文件的小 sql-lite-db 提供。

所以总而言之,我已经拥有了我需要的一切......

唯一未解决的问题是 lua 的解析器/词法分析器。我不想加载和执行代码!我只想解析包含 Lua 代码的字符串并获取有关它的一些信息,例如函数和全局变量。我真的不想自己完整地编写解析器......(我讨厌正则表达式 - 我一直都错了^^)

有人有一个.net lua 解析器的链接吗?

澄清一下——我现在只想分析代码——不想运行它!

提前致谢!

科莱戈特

0 投票
8 回答
2461 浏览

c++ - 是否有任何免费的解析器生成器可以生成 C++ 代码并正确处理 Unicode?

在问了这个问题之后,我现在开始尝试使用解析器生成器,在此之前我打算手动编写东西。

但是,我似乎找不到任何生成 C++ 代码的解析器,也找不到正确处理 Unicode 的解析器。(请注意,我的输入在 UCS-2 中——如果这会使构建解析器更加困难,我不关心支持基本多语言平面之外的位)

有一些解析器可以生成 C,但这些解析器似乎都将异常安全抛到了窗外,这将阻止我在任何语义操作中使用 C++。

是否存在满足这两个原则的解析器生成器,还是我被困在手动做所有事情?

编辑:哦,我的项目是 BSL 许可的,所以对解析器生成器本身的输出的使用没有太多限制。

0 投票
1 回答
1634 浏览

c# - 具有手动词法分析器的 ANTLR 解析器

我正在将基于 C# 的编程语言编译器从手动词法分析器/解析器迁移到 Antlr。

Antlr 一直让我头疼不已,因为它通常大部分都有效,但也有一些小部分无法解决,而且解决起来非常痛苦。

我发现我的大部分头痛是由 Antlr 的词法分析器部分引起的,而不是解析器。然后我注意到parser grammar X;并意识到也许我可以拥有我的手动编写的词法分析器,然后是 Antlr 生成的解析器。

因此,我正在寻找有关此主题的更多文档。我想自定义 ITokenStream 可以工作,但似乎几乎没有关于这个主题的在线文档......

0 投票
4 回答
2746 浏览

parsing - Scala 解析器:可用性、差异和组合?

我的问题是关于 Scala 解析器:

  • 哪些是可用的(在标准库和外部),
  • 它们之间有什么区别,
  • 他们是否共享一个通用的 API 和
  • 可以组合不同的解析器来解析一个输入字符串吗?

我至少找到了这些:

  • Scala 的“标准”解析器(似乎是 LL 解析器)
  • Scala 的Packrat 解析器(从 2.8 开始,是一个 LALR 解析器)
  • Parboiled解析器(PEG 解析器?)
  • Spiewak 的GLL 解析器组合器
0 投票
2 回答
3365 浏览

c - 柠檬的力量与否?

对于语法解析器,我曾经与Bison “玩”,它有其优点/缺点。

上周,我在SqlLite网站上注意到该引擎是由另一个语法解析器完成的: Lemon

阅读精简文档后听起来很棒。
你对这个解析器有什么反馈吗?

在 Google 和 Wikipedia 上无法真正看到相关信息(只是几个示例,相同的教程) 它似乎不太受欢迎。(堆栈溢出中没有标签[编辑:现在有:P])

0 投票
4 回答
8015 浏览

haskell - 解析器组合器能否变得高效?

大约 6 年前,我在 OCaml 中对自己的解析器组合器进行了基准测试,发现它们比当时提供的解析器生成器慢约 5 倍。我最近重新审视了这个主题,并将 Haskell 的 Parsec 与用 F# 编写的简单的手动优先爬升解析器进行了基准测试,并惊讶地发现 F# 比 Haskell 快 25 倍。

这是我用来从文件中读取大型数学表达式、解析和评估它的 Haskell 代码:

这是我在 F# 中的自包含优先级攀爬解析器:

我的印象是,即使是最先进的解析器组合器也会浪费大量时间进行回溯。那是对的吗?如果是这样,是否可以编写生成状态机的解析器组合器以获得具有竞争力的性能,或者是否有必要使用代码生成?

编辑:

这是我用来生成 ~2Mb 表达式以进行基准测试的 OCaml 脚本:

0 投票
1 回答
1653 浏览

perl - 使用 Parse::RecDescent

我有以下输入

我必须为 RecDescent 解析器生成器编写一个语法。输出数据应针对 xml 结构进行修改,应如下所示:

附加和重复的字段应报告为错误(带有行号的正确消息,无需进一步解析)。我试图从这样的事情开始:

但我什至不知道这是否是正确的做法。请帮忙。

还有一个小问题。输入时的标签可能没有特定的顺序,但每个标签只能出现一次。我是否必须为(作者、标题、年份、出版商)的所有排列编写子规则?因为我想出了:

但它显然不会阻止重复标签。

0 投票
3 回答
2716 浏览

d - 解析器生成器和 Ragel... 制作我自己的 D 解析器

我是编译器领域的新手,最近听说了一种叫做解析器生成器的东西。根据我(认为)我的理解,解析器生成器接收一个语法文件并输出一个源代码文件,该文件可以解析具有给定语法的文件。

几个问题:

  1. 我理解正确吗?

  2. 如果是这样,Ragel 是这样的工具吗?

  3. 如果是,Ragel 能否将 D 解析器输出为 D 源代码?

谢谢!

0 投票
1 回答
549 浏览

c# - C# - 像文本一样解析 xml 并执行操作的最佳方法

我有一个小文本字符串,里面有类似 xml 的标签:

我需要解析此文本并根据标签执行操作。所以上面的文本在我的目标应用程序中看起来像A B C(MS Excel——如果我粘贴它,Excel 可以解析和格式化这个字符串,但如果我只是在单元格中输入它就不行)。

就性能而言,解析这种基于标签的文本的最佳方法是什么。格式化代码将被非常频繁地调用,我想尽可能地减少开销。我可以想到以下选项:

  1. 使用索引器逐个字符地解析它,跟踪标签何时开始/结束
  2. 使用正则表达式
  3. 将其加载到一些 XML/HTML DOM 解析器中并遍历节点

您认为哪一个对性能的影响最小?我还有什么办法可以完成任务吗?