【问题标题】:I'm using boost::spirit to write a parser lexer我正在使用 boost::spirit 编写解析器词法分析器
【发布时间】:2011-10-17 19:36:37
【问题描述】:

我正在使用 boost::spirit 编写解析器,词法分析器

这就是我想要做的。我想将函数和类与它们使用的变量一起放入数据结构中。所以我想知道最好的方法是什么。

boost::spirit 的哪些部分最适合用于此目的?

我想使用的语言是 C/C++/C#/Objective C/Objective C++。

我写它的语言也是 C++,只是我不擅长我知道的其他语言

【问题讨论】:

  • 这是 5 种不同的语言,后四种语言对已经不太破旧的语言进行了非常广泛且相互排斥的扩展。最重要的是,其中至少有两个是出了名的难以解析,甚至解析 C 也不是你交给初学者的任务。基本上,如果你不得不问这个问题,你应该切换到一个更简单的项目。从解析的角度来看,Lisp(S 表达式)相当简单(但绝不是微不足道的)。
  • 我会调查一下,不过我想使用 boost::spirit。
  • 就像 delnan 说的,如果你不得不问,那么这可能是你的头。但是,我非常喜欢手工制作解析器或使用 ANTLR。
  • 不要忘记预处理。如果你真的很开心,当然还有 Boost Wave :)
  • 简短的回答是“无”。 Spirit 只是不适合这些语言(如果您愿意,反之亦然)。一个更合理的起点是clang

标签: c++ parsing boost lexer boost-spirit


【解决方案1】:

Spirit 是一个很好的工具,但它并不是所有解析任务的最佳工具。而对于解析实际 C++ 的任务来说,这是相当可怕的。

Spirit 擅长中小型解析任务。相当规则的语言,具有标准化的语法等。 C 和 C 派生的语言通常太复杂,Spirit 无法处理。并不是您不能为他们编写 Spirit 解析代码。只是考虑到 Spirit 的总体设计,这样做太难构建和维护。

如果您想要一个好的 C 或 C++(或其 Objective 变体)解析器,我建议您下载 Clang。它也是一个编译器,但它被设计成模块化的,所以你可以链接到它的解析部分。

【讨论】:

  • 我从源代码中找到了 libparser 等,有没有好的文档呢?
猜你喜欢
  • 1970-01-01
  • 2015-01-25
  • 1970-01-01
  • 2015-09-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多