问题标签 [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.
parser-generator - 增量 SLR 解析器生成器有什么用?
我曾经实现过一个生成增量解析器的 SLR 解析器生成器。解析器可以从头到尾解析一段文本,但是当您删除或插入文本时,它会做最少的工作和对令牌流和语法树的最小更改,而不是从头开始重新解析所有内容。问题是我找不到这个的任何用途?解析器比普通解析器做的工作略多。这样的东西有什么用吗?PS。如果你想知道怎么做,谷歌'basics of compiler design diku',这是一本免费的书,那么我所要做的就是稍微修改一下算法,让它到处存储解析器的状态,这是额外的工作我上面提到过。
c# - C# Lua 解析器/分析器
首先要做的事;
我正在用 C# 编写一点 LUA-Ide。代码执行由一个名为 LuaInterface 的程序集完成。代码编辑由 Scintilla-Port 完成,RAD / UI 界面通过可扩展的 IDesignSurfaceExt Visual Studio(单向代码生成)完成。文件处理由用作项目包文件的小 sql-lite-db 提供。
所以总而言之,我已经拥有了我需要的一切......
唯一未解决的问题是 lua 的解析器/词法分析器。我不想加载和执行代码!我只想解析包含 Lua 代码的字符串并获取有关它的一些信息,例如函数和全局变量。我真的不想自己完整地编写解析器......(我讨厌正则表达式 - 我一直都错了^^)
有人有一个.net lua 解析器的链接吗?
澄清一下——我现在只想分析代码——我不想运行它!
提前致谢!
科莱戈特
c++ - 是否有任何免费的解析器生成器可以生成 C++ 代码并正确处理 Unicode?
在问了这个问题之后,我现在开始尝试使用解析器生成器,在此之前我打算手动编写东西。
但是,我似乎找不到任何生成 C++ 代码的解析器,也找不到正确处理 Unicode 的解析器。(请注意,我的输入在 UCS-2 中——如果这会使构建解析器更加困难,我不关心支持基本多语言平面之外的位)
有一些解析器可以生成 C,但这些解析器似乎都将异常安全抛到了窗外,这将阻止我在任何语义操作中使用 C++。
是否存在满足这两个原则的解析器生成器,还是我被困在手动做所有事情?
编辑:哦,我的项目是 BSL 许可的,所以对解析器生成器本身的输出的使用没有太多限制。
c# - 具有手动词法分析器的 ANTLR 解析器
我正在将基于 C# 的编程语言编译器从手动词法分析器/解析器迁移到 Antlr。
Antlr 一直让我头疼不已,因为它通常大部分都有效,但也有一些小部分无法解决,而且解决起来非常痛苦。
我发现我的大部分头痛是由 Antlr 的词法分析器部分引起的,而不是解析器。然后我注意到parser grammar X;
并意识到也许我可以拥有我的手动编写的词法分析器,然后是 Antlr 生成的解析器。
因此,我正在寻找有关此主题的更多文档。我想自定义 ITokenStream 可以工作,但似乎几乎没有关于这个主题的在线文档......
parsing - Scala 解析器:可用性、差异和组合?
我的问题是关于 Scala 解析器:
- 哪些是可用的(在标准库和外部),
- 它们之间有什么区别,
- 他们是否共享一个通用的 API 和
- 可以组合不同的解析器来解析一个输入字符串吗?
我至少找到了这些:
- Scala 的“标准”解析器(似乎是 LL 解析器)
- Scala 的Packrat 解析器(从 2.8 开始,是一个 LALR 解析器)
- Parboiled解析器(PEG 解析器?)
- Spiewak 的GLL 解析器组合器
haskell - 解析器组合器能否变得高效?
大约 6 年前,我在 OCaml 中对自己的解析器组合器进行了基准测试,发现它们比当时提供的解析器生成器慢约 5 倍。我最近重新审视了这个主题,并将 Haskell 的 Parsec 与用 F# 编写的简单的手动优先爬升解析器进行了基准测试,并惊讶地发现 F# 比 Haskell 快 25 倍。
这是我用来从文件中读取大型数学表达式、解析和评估它的 Haskell 代码:
这是我在 F# 中的自包含优先级攀爬解析器:
我的印象是,即使是最先进的解析器组合器也会浪费大量时间进行回溯。那是对的吗?如果是这样,是否可以编写生成状态机的解析器组合器以获得具有竞争力的性能,或者是否有必要使用代码生成?
编辑:
这是我用来生成 ~2Mb 表达式以进行基准测试的 OCaml 脚本:
perl - 使用 Parse::RecDescent
我有以下输入
我必须为 RecDescent 解析器生成器编写一个语法。输出数据应针对 xml 结构进行修改,应如下所示:
附加和重复的字段应报告为错误(带有行号的正确消息,无需进一步解析)。我试图从这样的事情开始:
但我什至不知道这是否是正确的做法。请帮忙。
还有一个小问题。输入时的标签可能没有特定的顺序,但每个标签只能出现一次。我是否必须为(作者、标题、年份、出版商)的所有排列编写子规则?因为我想出了:
但它显然不会阻止重复标签。
d - 解析器生成器和 Ragel... 制作我自己的 D 解析器
我是编译器领域的新手,最近听说了一种叫做解析器生成器的东西。根据我(认为)我的理解,解析器生成器接收一个语法文件并输出一个源代码文件,该文件可以解析具有给定语法的文件。
几个问题:
我理解正确吗?
如果是这样,Ragel 是这样的工具吗?
如果是,Ragel 能否将 D 解析器输出为 D 源代码?
谢谢!
c# - C# - 像文本一样解析 xml 并执行操作的最佳方法
我有一个小文本字符串,里面有类似 xml 的标签:
我需要解析此文本并根据标签执行操作。所以上面的文本在我的目标应用程序中看起来像A B C(MS Excel——如果我粘贴它,Excel 可以解析和格式化这个字符串,但如果我只是在单元格中输入它就不行)。
就性能而言,解析这种基于标签的文本的最佳方法是什么。格式化代码将被非常频繁地调用,我想尽可能地减少开销。我可以想到以下选项:
- 使用索引器逐个字符地解析它,跟踪标签何时开始/结束
- 使用正则表达式
- 将其加载到一些 XML/HTML DOM 解析器中并遍历节点
您认为哪一个对性能的影响最小?我还有什么办法可以完成任务吗?