boost之spirit学习

原创 2012年03月22日 19:48:16
最近一段时间对boost比较着迷。看了一些boost代码后惊叹C++居然可以写成这样。

C++强大的模板、运算符重载让C++拥有强大的灵活性,可以模仿很多其它语言的语法,在解决某个具体问题时可以用最舒服的语法来表达。但同时带来的问题是,每学一个库的使用,相当于要学一门新的小语言,门槛还是有点高的。但常用的基础库用熟了之后应该就问题不大了。

不过要把boost用在团队开发里面还是有些麻烦,不是所有人都能看懂你写的代码,不是所有人都有耐心从几千行编译错误里发现少打了一个标点。。。

想写点文章对最近boost的学习进行一些总结,选择了spirit。之所以选择spirit,是因为其它库大概看看文档,看看代码就知道大概怎么用了。但spirit真是比较复杂,看了几天文档,仍然没有把握灵活应用。spirit是个类似lex/yacc的东东,但lex/yacc需要用lex/yacc对词法、语法文件进行处理,生成C代码,然后再编译链接起来,限制比较大。而spirit把这些东西都交给C++编译器做了,它能直接在C++代码里写类似BNF范式的语法。应该是把C++的奇技淫巧发挥到一定境界的集大成者。

翻spirit代码时看到在boost/libs/spirit/example/qi/compiler_tutorial底下有几个有趣的目录:
mini_c conjure1 conjure2 conjure3

看起来是用spirit::qi和spirit::lex实现了一个类C的小语言,而且是按mini_c、conjure1/2/3这个顺序难度递增,逐渐使用一些高级的东西。

翻了一下spirit文档,非常可惜没有对这几个例子的说明。
这几个例子应该是从spirit入门向进阶的很好教材,因此我决定从今天开始,对上述四个例子逐步解析。
我目前对spirit也是半瓶醋状态,希望通过这个过程加深对spirit的认识。如有错误,欢迎批评指正

boost spirit ——编译器,语法解析器

使用spirit能很方便的解析自定义的语法规则,在他的文档中也说明了spirit与regex还有其他库的不同点。灵活,伸缩性好,可以用来搭建小的语法解析器也可以用来开发大型编译器等等。 boost:...
  • GW569453350game
  • GW569453350game
  • 2015年08月20日 14:13
  • 3729

Boost.Spirit x3学习笔记

为了能够在Visual Studio 2015 RC上运行,需要做如下修改 1、修改boost/spirit/home/x3/nonterminal/detail/rule.hpp中的has_on_e...
  • cqdjyy01234
  • cqdjyy01234
  • 2015年07月06日 21:09
  • 1187

boost.spirit -- directives

3       directives指示器(directives)的作用是改变parser的行为,实际上,大多数directives是通过改变scanner的行为来实现这一点。 3.1    di...
  • kenryHuang
  • kenryHuang
  • 2006年08月11日 12:52
  • 1260

Boost.Spirit.Karma 自定义directive

需求:给定一个参数,若它为1,则不输出;若为1,则输出且追加乘法运算符。 分析:这个需求是很容易满足的,一个if语句就可以了。即便是用karma,只需要eps + alternative。这里主要研究...
  • cqdjyy01234
  • cqdjyy01234
  • 2015年07月30日 17:14
  • 562

boost spirit 关于复杂表达式的解析

http://www.ibm.com/developerworks/cn/java/j-lo-expressparse/index.html?ca=drs-
  • wangeen
  • wangeen
  • 2014年05月16日 14:57
  • 2859

boost之词法解析器spirit

摘要:解析器就是编译原理中的语言的词法分析器。可以按照文法规则提取字符或者单词。 C++ 程序员需要面对的最复杂的任务之一就是在一段合理的时间期限内编写一个解析器。在为 SQL 或 C++ 这类...
  • crazyhacking
  • crazyhacking
  • 2014年07月09日 18:11
  • 2738

Performance: std::regex v.s. boost::regex v.s. boost::xpressive v.s. boost::spirit::qi

本文考虑匹配银行卡号时,各个库的速度
  • cqdjyy01234
  • cqdjyy01234
  • 2014年07月14日 10:44
  • 964

[Sage ERP X3 V7首推]Sage ERP X3全盘缩减开支

作者:Mantralogix     要掌控制造流程里的所有步骤是非常具有挑战性的,当依靠Microsoft Word、Office和Excel这类传统软件的时候,就难上加难了。文档...
  • sagesoft
  • sagesoft
  • 2015年04月20日 16:03
  • 242

boost spirit 解析字符串 (一)

项目中需要解析一段sql 语句,然后各种百度,看了一些文章,然后就头晕了,根本不知道他们在讲啥,感觉好像非常深奥的一样。感觉他们讲的太专业了,不能通俗易懂。所以把自己学习的记录下来,以便后面查看 1)...
  • inforecovvery
  • inforecovvery
  • 2015年08月21日 11:02
  • 877

boost之spirit学习-mini_c(3)

前一章分析完了main.cpp,了解了mini_c的主流程。现在来看看抽象语法树的定义:ast.hpp 首先,为一些对象打上id,方便编译错误时由对象的id查找到出错的位置(这个是由anno...
  • jjparch
  • jjparch
  • 2012年03月23日 00:55
  • 974
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:boost之spirit学习
举报原因:
原因补充:

(最多只允许输入30个字)