2

我正在编写一种非常接近伪代码的实验性语言,目的是为了好玩并了解更多关于 C++ 的知识。问题之一是我需要解析一些语法,而我寻找一个好的 C++ 语法解析器的搜索没有成功(我找不到任何东西)。我想要完成的是:

set a to 4

我希望解析器返回一个包含类似于以下内容的地图:

command = "set"
var = "a"
value = 4

基于我给它的一套规则。

如果我找不到任何有用的东西,我最终将不得不自己动手,但我想尽可能地避免重新发明轮子。

那么,这里有没有人知道生成 C++ 代码的好/健全的语法解析器?如果能被广泛使用就更好了。

谢谢!

4

5 回答 5

11

检查是否可以使用Boost::Spirit 。Spirit 框架使目标语法能够专门用 C++ 编写。

于 2009-04-27T03:25:21.603 回答
5

Lex 和 Yacc / Flex 和 Bison

于 2009-04-27T04:07:24.280 回答
4

您可以使用yacc(使用flex作为分词器)。快速搜索会产生这个页面来执行 yacc 的 C++ 使用,它是用 C 实现的。

于 2009-04-27T03:55:34.260 回答
4

你应该看看ANTLR。它可以为多种语言生成,包括(我相信)C++。[更仔细地查看文档,有一个 C 目标;目前尚不清楚是否有 C++ 目标,但 C 目标很容易与 C++ 一起使用。] 我还是老派,倾向于使用 yacc(或野牛),但那是因为我是熟悉它而不是因为它仍然是最好的(尽管它仍然很好)。

于 2009-04-27T04:09:02.590 回答
3

自己动手就像一开始就写语法一样简单!这是学习解析、收集更深入的编程语言知识的好方法,最重要的是它很有趣。该方法称为递归下降。它通常比解析器生成器更简单、更优雅,而且你再也不需要找到 Yacc 端口/fork

否则,Lex 和 Yacc 是传统工具,而 Boost::Spirit 是特定于 C++ 且更现代的。我会推荐 Boost::Spirit,因为它有助于巩固你的编程中的 C++ 范式。

于 2009-04-27T19:10:21.050 回答