【发布时间】:2011-06-26 07:55:28
【问题描述】:
我正在寻找不是 Flex 或 Bison 的词法分析和解析器生成实用程序。要求:
- 使用上下文无关的 LL(*) 或 GLR 语法指定解析器。我也会考虑 PEG。
- 与可用于脚本和应用程序开发的编程语言紧密集成。语言还应该具有与 C 轻松交互的功能。Python、Ruby 和 Guile 就是很好的例子。请不要使用 C、Java 或 Perl。我希望语言是同质的;我希望解析器生成器以相同的语言输出代码。
- 有据可查和生产质量。
- 开源。免费也是可取的(尽管不是必需的)。
- 与 Linux 发行版或开源 BSD 之一兼容。我会考虑 OpenSolaris。
- 快速开发比效率更重要。
- 适用于解析自然语言和形式语言。自然语言解析仅限于简短、简单的句子,几乎没有歧义。
虽然我从未使用过它,但我关注的是 ANTLR。对此效果的评论表示赞赏。让我知道您最喜欢满足这些要求的实用程序是什么,以及您推荐它们的原因。
【问题讨论】:
-
鉴于您的限制,对 flex/bison 的反对意见是什么?
-
根据定义,每个 LALR 语法都是 LR 语法。此外,坚持使用 LR-not-LALR 解析器生成器通常会给您带来巨大的表格,而不会带来很多额外的实际好处。所以我不确定你为什么坚持(?)非 LALR 解析器生成器。如果您只关注为 Python、Ruby、Guile 生成代码,那么我理解得更好。 FWIW,我认为 ANTLR 不会产生任何这些。但我仍然感到困惑:如果您选择的语言“易于与 C 接口”(例如 Python),bison 仍然是一个不错的选择:只需使用您的语言调用 Bison 生成的 C 代码即可。
-
我的经验是使用 Bison 和 LALR 语法,这一次不足以满足我的需求;我正在寻找一种语法更具表现力的工具。我相信规范的 LR 或 LL(*) 语法是合格的。但是,现在看来 GLR 语法可能是更好的选择。至于语言,这些解析器将作为用 C 编写的基本程序的扩展框架的一部分生成。我希望扩展语言是同质的,我不希望它是 C。ANTLR 能够生成 Python。
标签: python ruby parsing lexical-analysis guile