在C ++中解析的好方法

时间:2011-06-17 18:55:02

标签: c++

我正在用C ++编写一个程序,它将使用与现有Prolog程序相同的输入文件。

文件将如下所示:

expr1(t,[f,g]).
expr1(q,[]). 
expr1(r,[e]).

expr2(a).
expr2(b).
expr2(e).

expr2(a,r).
expr2(b,d).
expr2(e,z).

解析此类文件有哪些方法?我读过关于Boost Spirit的信息......有人对此有所了解吗?或者是使用标准C / C ++库的方法吗?想法会很棒。

谢谢。

3 个答案:

答案 0 :(得分:4)

对于手写的递归下降解析器来说,这看起来是完美的工作。没有额外的依赖关系,易于编写,并且直接面向未来的维护者。

答案 1 :(得分:2)

FlexBison有什么问题?这确实有利于生成的代码独立于您可能拥有或不拥有的库。它用于简单的解析配置文件到Webkit的Javascript解析器之类的东西。你甚至可以找到一个可以使用的Prolog语法。

答案 2 :(得分:1)

除非任务真的比看起来更复杂,否则我绝对不会建议Boost Spirit。 Boost Spirit没有任何问题,我的意思是它非常强大并且可以很好地完成工作,但它也需要大量的学习并且可能会大量增加编译时间。

虽然我同意Jörgen一个手写好的解析器是一个不错的选择,但看起来你不需要一个无上下文的解析器,所以我认为正则表达式解析器可能就足够了。如果是这种情况,我建议你看一下新的C ++ 0x标准中引入的新regex库。