【转】Vczh Library++3.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的运行过程详细剖析,让大家明白可配置语法分析器每一个设计细节的原因,并告诉大家如何实现可配置语法分析器。

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值