zoukankan      html  css  js  c++  java
  • 管道过滤器实例

    管道过滤器模式:

    管道-过滤器模式的体系结构是面向数据流的软件体系结构。它最典型的应用是在编译系统。一个普通的编译系统包括词法分析器,语法分析器,语义分析与中间代码生成器,优化器,目标代码生成器等一系列对源程序进行处理的过程。人们可以将编译系统看作一系列过滤器的连接体,按照管道-过滤器的体系结构进行设计。此外,这种体系结构在其它一些领域也有广泛的应用。因此它成为软件工程和软件开发中的一个突出的研究领域。

    管道-过滤器组成

    1 过滤器

    过滤器按照对流经它的数据操作的不同,可分为3类过滤器:输入过滤器,处理过滤器和输出过滤器。下面将对这三类过滤器进行介绍。

    (1)输入过滤器

    输入过滤器处在问题所在的外部世界与软件系统的边界处,是系统数据流的源点。它负责接收外界信息并转化为系统所需的数据流。

    (2)处理过滤器

    处理过滤器是系统内变换数据流的部件,它有一个入口和一个出口,数据经入口流入,经过处理过滤器内部处理之后从出口流出。

    (3)输出过滤器

    从建立完备的,首尾一致的可重用的软件部件组的角度出发,正如输入过滤器是系统数据流的起点,那么输出过滤器是数据流的终点。

    过滤器的实现还须满足以下三条基本原理:

    随后的处理单元从过滤器中拉出输出数据;

    前面的处理单元把新的输入数据压入过滤器;

    过滤器以循环工作的方式,从流水线中拉出其输入数据并且将其输出数据压入流水线。过滤器按照以上三种情况可分为两类:主动过滤器和被动过滤器。满足前两种情况的过滤器称为被动过滤器,满足最后一种情况的过滤器称为主动过滤器。

    2 管道

    管道作为过滤器之间数据流动的通道的软件部件,它的主要功能是连接各个过滤器,充当过滤器之间数据流的通道。管道具有数据缓冲以及提高过滤器之间的并行性操作的作用。管道由数据缓冲区,向数据缓冲区读和写数据,判断管道为空或已满等操作定义组成.

    管道-过滤器模型有如下的优点:

    (1)设计人员将整个系统的输入输出行为理解为单个过滤器行为的叠加与组合。这样可以将问题分解,化繁为简。

    (2)任何两个过滤器,只要它们之间传送的数据遵守共同的规约就可以相连接。每个过滤器都有自己独立的输入输出接口,如果过滤器间传输的数据遵守其规约,只要用管道将它们连接就可以正常工作。

    (3)整个系统易于维护和升级:旧的过滤器可以被替代,新的过滤器可以添加到已有的系统上。软件的易于维护和升级是衡量软件系统质量的重要指标之一,在管道-过滤器模型中,只 要遵守输入输出数据规约,任何一个过滤器都可以被另一个新的过滤器代替,同时为增强程序功能,可以添加新的过滤器。这样,系统的可维护性和可升级性得到了保证。

    (4)支持并发执行:每个过滤器作为一个单独的执行任务, 可以与其它过滤器并发执行。过滤器的执行是独立的,不依赖于其它过滤器的

    应用实例

    最典型的应用是编译系统,编译系统主要包括词法分析器,语法分析器,语义分析与中间代码生成器,优化器,目标代码生成器等对源程序进行处理的过程。可以将每个处理过程看做一个过滤器,然后通过管道进行连接,然后就组成了一个编译系统。
        编译系统先经过词法分析过滤器,词法分析过滤器读取输入的数据,然后进行词法分析按词法规则得出各类单词,最后将分析得出的结果在输出接口输出;管道将该词法分析结果传送到语义分析过滤器,语义分析与中间代码生成过滤器检测程序代码有无语义错误,没有错误则生成中间代码并输出,若有错则进行错误处理;然后再经管道将中间代码传送到优化器,…按照过滤器处理,管道进行数据传送这种模式最终得到编译后的数据,这就是管道-过滤器的最典型的应用。

  • 相关阅读:
    mysql 表的类型
    【Mysql优化】key和index区别
    [置顶] 步步辨析JS中的对象成员
    [置顶] C语言单元测试框架
    代码规范总结
    AFNetworking、MKNetworkKit和ASIHTTPRequest对比
    在SQL中使用PL/SQL函数存在的问题
    C++中一个函数隐藏的有趣例子
    深入浅出Mybatis-分页
    SRM 207 Div II Level Two: RegularSeason,字符串操作(sstream),多关键字排序(操作符重载)
  • 原文地址:https://www.cnblogs.com/limu/p/9099576.html
Copyright © 2011-2022 走看看