boost之spirit学习-mini_c(1)

原创 2012年03月22日 19:49:15
先看看mini_c底下的文件:
main.cpp:主程序,没啥说的
function.hpp function_def.hpp function.cpp:定义解析函数的qi::grammer类
statement.hpp statement_def.hpp statement.cpp:定义解析语句的qi::grammer类
expression.hpp expression_def.hpp expression.cpp:定义解析表达式的qi::grammer类
skipper.hpp:定义解析空格与注释的qi::grammer类
ast.hpp:定义抽象语法树(Abstract Syntax Tree)相关的各种类
annotation.hpp: 用于把ast对象与代码位置关联起来,用于编译错误时提示出错位置
error_handler.hpp:处理解析错误,输出错误信息及位置
compiler.hpp:提供compiler类,把抽象语法树编译成字节码
vm.hpp vm.cpp:最简单的虚拟机,可以执行compiler编译出的字节码
 
 
function、statement、expression三个grammer类之所以搞三个文件,估计是为了加快编译速度。把模板类的实现部分放在xxx_def.hpp里,在xxx.cpp里include这个xxx_def.hpp,然后用

点击(此处)折叠或打开

  1. template struct client::parser::function<iterator_type>;
强制实例化。
 
再说一下例子里的命名空间:
client: annotation、error_handler、vmmachine在这里
client::parser:function、statement、expression、skipper四个grammer类在这
client::ast:各种抽象语法树类定义在这里
client::code_gen:function(不是grammer,是代表编译后的函数)、compiler
 
下一篇从main.cpp开始解剖

Lex和Yacc入门

原文地址:http://coanor.blog.hexun.com/38241166_d.html   1. 简介 只要你在Unix环境中写过程序,你必定会邂逅神秘的Lex&YACC,就如GNU...

boost之spirit学习

最近一段时间对boost比较着迷。看了一些boost代码后惊叹C++居然可以写成这样。 C++强大的模板、运算符重载让C++拥有强大的灵活性,可以模仿很多其它语言的语法,在解决某个具体问题时可以...
  • jjparch
  • jjparch
  • 2012年03月22日 19:48
  • 532

boost之spirit学习-mini_c(3)

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

boost之spirit学习-mini_c(4)

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

boost之spirit学习-mini_c(2)

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

boost之spirit学习-mini_c(5)

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

Boost.Spirit x3学习笔记

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

C/C++——++i、i+=1、i++之间的区别(附在学习boost时遇到的例子)

首先,对于++i和i++的区别是早就认识到了,效率肯定是前置++i更高,因为后者还需要产生临时变量。查了相关资料其实这个问题可以从三个角度去分析:语言规范,编译器实现,CPU支持。首先从语言规范上来讲...

boost库spirit

  • 2016年10月09日 22:03
  • 1.67MB
  • 下载

Boost.Spirit.Karma 自定义directive

需求:给定一个参数,若它为1,则不输出;若为1,则输出且追加乘法运算符。 分析:这个需求是很容易满足的,一个if语句就可以了。即便是用karma,只需要eps + alternative。这里主要研究...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:boost之spirit学习-mini_c(1)
举报原因:
原因补充:

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