【发布时间】:2009-03-18 09:08:55
【问题描述】:
我最近在学校上了一门课,在那里我们必须学习 Scheme,以便为一种简单的、类似于 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
}
(这只是一个简单的例子,还有其他一些巧妙的东西,比如识别何时应该将其 push_back-ing 到向量上,并能够分配函数回调)
这似乎是其他人(可能更聪明)在我之前应该做的事情。我做了一些快速的谷歌搜索,看看那里有什么,但有很多东西要筛选。所以我的问题是:有没有工具可以做我的解析器生成器现在所做的事情?这个项目值得继续*还是已经有更好的工具了?
*当然,作为一种学习体验,它总是值得继续。相反,我的意思是从希望从文本读取数据结构的用户的角度来看。
【问题讨论】: