如何在现代C++中解析文本数据文件?

Mar*_* Ba 11 c++ parsing dataformat boost-spirit

我(经常)面临着必须解析文本数据文件的任务 - 在"每个人"使用XML之前使用的文本结构化数据表示 - 这是某种行业标准.(这些太多了.)

无论如何,基本任务总是采用文本文件并填充某种数据结构中的内容,以便我们的C++代码可以对信息做些什么.

现在,我已经手工实现了一些简单的(并且非常多样的)解析器,并且我几乎没有鄙视.:-)

所以 - 我想知道当我想要将结构化文本数据"解析"为内存中表示时的当前技术水平(想想:任意语言的XML数据绑定).

到目前为止我发现的是" 你推荐什么解析器生成器 ",但我不太确定我是在使用解析器生成器(如ANTLR)之后.

明显的候选人似乎是pegtlBoost.Spirit,但他们似乎都很复杂(但至少他们是语言),上次我尝试过Spirit,编译错误让我疯狂.(并且pegtl需要兼容C++ 11的编译器,这仍然是一个问题(VC++ 2005).)

所以我错过了一个简单的解决方案,只是为了得到类似的东西

/begin COMPU_METHOD
  DEC "  Decimal value"
  RAT_FUNC
  "%3.0"
  "dec"
  COEFFS 0 1.000000 0.000000 0 0.000000 1.000000
/end COMPU_METHOD
Run Code Online (Sandbox Code Playgroud)

进入C++数据结构?(这只是这个文件的一部分可能看起来的任意例子.对于这种格式,我可以(并且可能应该)购买一个库来解析它,因为它足够广泛 - 对于所有格式我都不是这样的情况遭遇.)

- 或者我应该选择 Boost.Spirit 的复杂性

seh*_*ehe 3

编辑为了让事情变得非常清楚,我从来没有用 Coco/R 做不到任何事情。

然而,我真的很沉迷于 Spirit 轻松地为我推断属性类型(转换。这是主要的节省时间的方法。但这是有成本的:

  • 学习曲线、维护
  • 编译时间(但解析器不经常改变)