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学习-mini_c(1)

先看看mini_c底下的文件: main.cpp:主程序,没啥说的 function.hpp function_def.hpp function.cpp:定义解析函数的qi::gramme...
  • jjparch
  • jjparch
  • 2012年03月22日 19:49
  • 405

mysql 客户端无法远程连接linux服务器mysql, 提示1045

1,查看mysql.user表的 select * from user where host = "%" \G;   -- host %允许任何客户端连接 -- user root passw...

boost之spirit学习-mini_c(2)

main.cpp就一个main函数,倒是直接明了 main函数大概的流程: 读代码文件 使用spirit将代码解析成抽象语法树 使用compiler把语法树编译成字节码 从编译后...
  • jjparch
  • jjparch
  • 2012年03月22日 19:50
  • 393

boost之spirit学习-mini_c(3)

前一章分析完了main.cpp,了解了mini_c的主流程。现在来看看抽象语法树的定义:ast.hpp 首先,为一些对象打上id,方便编译错误时由对象的id查找到出错的位置(这个是由anno...
  • jjparch
  • jjparch
  • 2012年03月23日 00:55
  • 923

boost之spirit学习-mini_c(4)

今天看看error_handler.hpp,先把这些周边的东西搞清楚。 /////////////////////////////////////////////////////////...
  • jjparch
  • jjparch
  • 2012年03月28日 00:21
  • 358

Boost.Spirit x3学习笔记

为了能够在Visual Studio 2015 RC上运行,需要做如下修改 1、修改boost/spirit/home/x3/nonterminal/detail/rule.hpp中的has_on_e...

boost之spirit学习-mini_c(5)

继续看看周边的小东西,从易到难。今天是annotation.hpp annotation.hpp里定义了一个类:annotation。 顾名思义,它是给抽象语法树里的对象做标注的。标注什么呢?...
  • jjparch
  • jjparch
  • 2012年03月29日 21:53
  • 299

boost之词法解析器spirit

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

boost 中spirit 连续解析 employee 成容器变量

#include #include #include #include #include #include #include #include #include #include ...

在msvc中使用Boost.Spirit.X3

http://www.cnblogs.com/IndignangAngel/p/5026269.html Preface “Examples of designs that meet ...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:boost之spirit学习
举报原因:
原因补充:

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