随笔-341  评论-2670  文章-0  trackbacks-0
    花了差不多两个星期的时间将一个可配置语法分析器(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的运行过程详细剖析,让大家明白可配置语法分析器每一个设计细节的原因,并告诉大家如何实现可配置语法分析器。
posted on 2009-11-27 10:01 陈梓瀚(vczh) 阅读(3093) 评论(2)  编辑 收藏 引用 所属分类: VL++3.0开发纪事

评论:
# re: Vczh Library++3.0之可配置语法分析器(前言) 2009-11-27 21:12 | CornerZhang
什么时候提供源码,观摩下啊!  回复  更多评论
  
# re: Vczh Library++3.0之可配置语法分析器(前言) 2009-11-27 21:26 | 陈梓瀚(vczh)
@CornerZhang
接下来我会写一系列文章描写开发的过程,最后一篇会有代码,而且是VS2008能编译的。  回复  更多评论
  

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理