我最近在学校上课,我们必须学习Scheme,为一个简单的类似方案的语言构建一个解析器。随着学期的继续,我们添加到我们的解析器中,使它变得越来越有趣。
从那时起,在我自己的时间,我开始编写自己的解析器,它比我在课堂上做的更整洁,但它解析我的C ++代码,收集所有数据结构和公共成员的列表,并为它生成一个递归下降解析器。例如,如果我有以下
class Bar
{
public:
int a;
}
class Foo
{
public:
Bar* myBar;
int x;
}
我在其上运行我的解析器生成器,它会抛出一个简单称为Parser的新类,我可以像这样使用它来读取文件:
Parser p;
Foo* f = p.parseFoo("example.txt");
其中example.txt将是这样的:
Foo
{
myBar
{
a 5
}
x 10
}
(这只是一个简单的例子,还有一些其他整洁的东西,比如识别它应该什么时候推送到矢量上,并且能够分配函数回调)
这似乎是其他人(可能更聪明)应该在我之前完成的事情。我做了一些快速的谷歌搜索,看看那里有什么,但有很多东西要筛选。所以我的问题是:那里有工具可以做我的解析器生成器现在做的吗?这个项目是否值得继续*或者那里有更好的工具吗?
*当然,作为一种学习体验,它总是值得继续。相反,我的意思是从想要将数据结构读入文本和从文本读取数据结构的用户的角度出发。
答案 0 :(得分:3)
答案 1 :(得分:2)
答案 2 :(得分:1)
Qt有一个免费的工具,只有一点点文档,但它没有很多开销。我用它来为一个完整的DSL创建一个解析器。 QLALR
答案 3 :(得分:0)
lex / yacc或flex / bison 或者Boost.Spirit(http://spirit.sourceforge.net/)。