【发布时间】:2014-03-01 00:40:24
【问题描述】:
好的,我知道这个问题可能听起来很基于意见,但是由于我有几个特定的选择标准,我认为它非常适合 SO。所以,我来了……
我过去曾多次使用编译器/解释器构建(显然主要是作为一种爱好),出于某种原因,我坚持使用 Lex/Yacc(或 Flex/Bison,我对它们如何使用感到很困惑)现在打电话给他们...大声笑)。
但是,由于我发现自己目前正在玩另一个业余口译项目,我想我应该尝试一些不同的东西,也许是为了避免我不喜欢 Lex/Yacc。
所以,即:
- C++ 友好(优于 C 友好)
- 良好的文档(最好有一些已经实现的现有语法 + 关于如何编译/使用它们的说明 - 听起来很明显,对吧?)
- 可能是 LALR、LL(*)、递归下降,我真的不在乎(注意:输入您喜欢哪种类型以及哪种类型的实现不过会很棒;老实说,我从来没有真正理解过它们的优缺点,尽管我确实知道它们指的是什么)
- 将 Lexer 部分和 Parser 语法合并到一个文件中 一点也不差;从来没有真正明白为什么它必须一分为二。
- 最后但并非最不重要的一点:我一直遇到...问题。我的意思是 - 至少就 Lex/Yacc 而言,解析错误消息或多或少是神秘的(
Syntax Error... Yuhuu!)而且它们很少有助于诊断问题。 (好吧,除非你是开发解释器的人......哈哈)。那么,关于错误报告,还有什么比 Lex/Yacc 更好的吗?
好的,我希望这不是太冗长。我全是耳朵! :-)
【问题讨论】:
-
你应该在软件推荐上询问这个问题,stackexchange.com 上的一个新网站。
-
供参考:解析表达式语法是同时指定词法分析器和解析器的另一种好方法。如果你不能使用像 ANTLR 这样的东西,那会很方便。 PEG 启用上下文相关的词法分析器规则。 PEG 的至少一个值得注意的 C++ 实现是 Dr. Hirsch 的 PEGTL,这是一种在 C++11 中获得 MIT 许可的无依赖的仅标头 PEG 词法分析器/解析器实现。词法分析器和解析器使用相同的语言描述,并且全部使用纯 C++ 表达式编写,无需单独运行工具。
标签: c++ parsing bison lex parser-generator