【问题标题】:building c++ config file parser using lex and yacc使用 lex 和 yacc 构建 C++ 配置文件解析器
【发布时间】:2011-09-30 05:41:52
【问题描述】:

我正在尝试使用 lex 和 yacc 等工具从头开始构建配置文件解析器(C++ 应用程序)。解析器将能够解析像

这样的文件
# Sub group example
petName = Tommy
Owner = {
   pet = "%petName%"
}

是否有关于如何使用 lex 和 yacc 等工具实现此目的的分步指南/文章链接?我的想法是我将使用 getConfig(string propName) 之类的方法编写一个类说 Config (c++)。如果我像 config.getConfig(Owner.pet) 一样调用,它会返回给我 Tommy。

【问题讨论】:

  • 您可能需要考虑使用与您显示的格式相似的 JSON 库,您只需稍微调整文件的格式。
  • 大卫所说的。或者你可以考虑Boost.Spirit 而不是 lex & yacc。

标签: c++ c yacc lex


【解决方案1】:

Boost Property Tree

它是为配置文件设计的。它以以下格式进行读写:

  • INI
  • 信息
  • XML
  • JSON

这是一个五分钟的教程页面,应该会给你一个好主意:

【讨论】:

  • 致反对者:我知道这不能回答确切的问题。然而,OP 为解释留下了大量的空间using tools like... 是公开邀请,IYAM
  • 一个简单的问题是它们是否支持像 pet = "%petName%" 这样的语法,其中 petName 是在其他地方定义的?
  • 我实际上只是使用boost::spirit::qi::symbols 编写代码,用格式化程序替换正则表达式,或者手动遍历和简单的字符串替换。我认为在您自己的配置文件阅读器中包含“魔术”不是一个好的设计。古老的 UNIX 口头禅:使用能够很好地完成一件事的现有块(无需重新发明轮子,因为它们被涂错了颜色:))。当然,您可以为 您的 应用程序创建一个在幕后执行神奇“组合”的函数。
猜你喜欢
  • 1970-01-01
  • 2015-11-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-02-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多