从网上无意间看到这个系列的文章,作者非常有想法,转下来慢慢研究,好好学习。   祝大家学习愉快,做自己的爱好 ^_^ !

  花了差不多两个星期的时间将一个可配置语法分析器(Combinator)写好了。这个语法分析器被设计来完成以下任务:

1、易于使用,并且在运行时可更改
    2、提供对分析字符串和容器的支持
    3、可使用正则表达式辅助定义分析器
    4、如果觉得预定义的设备不满意,用户可以自行提供新的文法元素(譬如说增加一种使用通配符进行语法分析的元素)
    5、提供可配置错误恢复策略,提供合理的错误发生位置信息,用户可根据自己的意愿来决定错误信息的内容。

不过直接写这玩意儿怎么开发出来的比较枯燥,所以这里我准备了一个Demo,也是我自己正在使用的,FpMacro。

FpMacro跟C++的宏差不多,不过主要区别是,宏本身再也不被当成字符串替换的工具,而是一个生成字符串的函数。于是你可以将一个宏当成函数指针传进另一个宏,形成高级的功能。举个例子:

1  $$define $TEMPLATE_ITEM($index) typename T$index
2  $$define $TEMPLATE_LIST($count) $loopsep($count, 0 ,$TEMPLATE_ITEM,$(,))
3  $TEMPLATE_LIST( 3 )

上面的FpMacro代码将产生“typename T0,typename T1,typename T2”。使用FpMacro再也不需要任何C++宏里面的恶心技巧(譬如为了让两段代码得以链接你需要双重包装,类似#define _(X) __(X) ; #define __(X) #X),再也不需要为循环产生代码费心思,再也不用考虑宏的替换顺序,一切都变得井然有序。

FpMacro是可配置语法分析器的Demo,然而Function.f.fpm(这是一个在以后会上传的FpMacro代码文件)则是FpMacro的Demo。Function.f.fpm产生了一段支持0-10个参数的functor、参数绑定和函数组合的代码,可以认为functor跟tr1::function的功能基本一致。通过这个例子可以更加形象地体会FpMacro的高级功能。在接下来的系列文章中,我将会通过分析FpMacro,将FpMacro的运行过程详细剖析,让大家明白可配置语法分析器每一个设计细节的原因,并告诉大家如何实现可配置语法分析器。

转载于:https://www.cnblogs.com/xuangong/archive/2011/07/31/2122655.html

【转】Vczh Library++3.0之可配置语法分析器(前言)相关推荐

  1. 【转】Vczh Library++ 3.0之可配置语法分析器(设计文法表达式)

    从网上无意间看到这个系列的文章,作者非常有想法,转下来慢慢研究,好好学习. 祝大家学习愉快,做自己的爱好 ^_^ ! 上一篇文章中我们看到了可配置语法分析器使用起来的样子,在这篇文章中我将告诉大家如何 ...

  2. Vczh Library++3.0 开源啦!

    项目主页:http://vlpp.codeplex.com/ Vczh Library++从2006年就开始开发,到现在经历了一些版本变迁,到现在已经正式步入3.0了.现在Vczh Library++ ...

  3. Vczh Library++3.0之正则表达式引擎(生成epsilon-NFA)

    从正则表达式生成epsilon-NFA其实跟将一棵树变换成另一棵树是类似的.epsilon转换提供了一种工具让我们可以把一个图表达成漂亮的形式,看起来就有典型的递归结构.因此这个工作依然可以用Rege ...

  4. C++轻量级可配置语法分析器(开源) - λ-calculus(惊愕到手了欧耶,GetBlogPostIds.aspx) - C++博客...

    C++轻量级可配置语法分析器(开源) - λ-calculus(惊愕到手了欧耶,GetBlogPostIds.aspx) - C++博客 C++轻量级可配置语法分析器(开源) - λ-calculus ...

  5. Vczh Library++3.0实现二进制模板函数

    现在NativeX已经支持跟C#一样的模板函数了:可以被编译进独立的二进制文件,然后另外一个代码引用该二进制文件,还能实例化新的模板函数.现在先来看debug log输出的二进制结构.首先是被编译的代 ...

  6. Vczh Library++ 语法分析器开发指南

    Vczh Library++ 语法分析器开发指南 陈梓瀚 前言 在日常的开发工作中我们总是时不时需要写一些语法分析器.语法分析器不一定指的是一门语言的编译器前端,也有可能仅仅是一个自己设计格式的配置文 ...

  7. Hadoop 2.0集群配置详细教程

    Hadoop 2.0集群配置详细教程 前言 Hadoop2.0介绍 Hadoop是 apache 的开源 项目,开发的主要目的是为了构建可靠,可拓展 scalable ,分布式的系 统, hadoop ...

  8. 黄聪:Microsoft Enterprise Library 5.0 系列教程(二) Cryptography Application Block (高级)

    原文:黄聪:Microsoft Enterprise Library 5.0 系列教程(二) Cryptography Application Block (高级) 本章介绍的是企业库加密应用程序模块 ...

  9. Enterprise Library 2.0 技巧(3):记录ASP.NET站点中未处理的异常

    这篇文章不能算是Enterprise Library 2.0的一个技巧,只是Logging Application Block的一个简单应用而已,在这里我们使用Logging Application ...

最新文章

  1. Node.js的3m安装法
  2. HDU_1072_Nightmare题解
  3. 程序员到底需要什么样的需求文档?
  4. java 生产者消费者代码_Java生产者和消费者代码
  5. jsp中get请求与post请求编码统一问题(1.0)
  6. FF“流产”后 许家印开始了自己的造车之路
  7. ffmbc——广播电视以及专业用途量身定制的FFmpeg
  8. git提交后的代码在哪儿_git 分支合并策略
  9. [转载] python hasattr函数_Python的hasattr() getattr() setattr() 函数使用方法详解
  10. 利用vuex和localStorage实现vue菜单权限管理(笔记)
  11. 第八回 新年晚会艺压群芳 文理分科三人聚首[林大帅作品选]
  12. SDI在自定义的工具栏上添加下拉控件
  13. 拓端tecdat|R语言中基于混合数据抽样(MIDAS)回归的HAR-RV模型预测GDP增长
  14. python 例子 银行_Python3 适合初学者学习的银行账户登录系统实例
  15. 手把手较你编写Python爬虫程序-不要干坏事哦
  16. 如何下载和安装iOS 15公测版【附更新建议】
  17. 常用浏览器User-Agent列表
  18. 分享5个国外较好的图片网站
  19. The Byzantine Generals Problem拜占庭将军问题理解
  20. The error occurred while setting parameters

热门文章

  1. 问题三十一: 输入一个三位数n,判断输出n是否为水仙花数。 若各位数的立方和等于该数自身,则称其为“水仙花数”(如:153=13+53+33)。
  2. 微信公众平台开发入门视频教程已发布
  3. 【Vue】实战项目:电商后台管理系统(Element-UI)(一)前后端搭建 - 登录界面 - 主页界面
  4. 程序人生:请不要推卸责任
  5. perl语言的c源代码在哪里,从C到Perl(转)
  6. “数字哨兵”+门禁,访客、闸机 联动管控
  7. 大文件传输 , 快速传输工具 分享
  8. next cloud_Google Cloud Next '17主题演讲的5个重要要点
  9. 江南爱窗帘十大品牌 窗帘真的可以改善睡眠质量吗
  10. 【JavaSE基础】08-集合框架(三)