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

  • 相关阅读:
    纳尼?不用码代码,就可回归主流程,一只海豚就可以做到
    教育产品-组件化视觉设计实践
    从整理看视觉设计(网易云课堂我的学习中心-微专业视觉优化)
    搜索意图识别浅析
    如何配置使用Dnsmasq
    如何实现最佳的跨平台游戏体验?Unity成亮解密实时渲染技术!
    PAT 1024. Palindromic Number
    PAT 1023. Have Fun with Numbers
    PAT 1022. Digital Library
    PAT 1021. Deepest Root
  • 原文地址:https://www.cnblogs.com/xuangong/p/2122655.html
Copyright © 2011-2022 走看看