zoukankan      html  css  js  c++  java
  • 软件构造 第六章第三节 面向可维护的构造技术

    第六章第三节 面向可维护的构造技术

    基于状态的构造技术

    状态模式(State Pattern)

    备忘录模式(Memento Pattern)

     

     

    Grammar-based construction

    • 使用grammar判断字符串是否合法,并解析成程序里使用的数据结构
    • 正则表达式
    • 通常是递归的数据结构

    terminals 终止节点、叶节点

    nonterminal 非终止节点(遵循特定规则,利用操作符、终止节点和其他非终止节点,构造新的字符串)

    三个基本语法的操作符:

    连接,不是通过一个符号,而是一个空间:

    x ::= y z //x等价于y后跟一个z

    重复,以*表示:  

    x ::= y* // x等价于0个或更多个y

    联合,也称为交替,如图所示 | :  

    x ::= y | z //x等价于一个y或者一个z

    三个基本操作符的组合:

    可选(0或1次出现),由?表示:

    x ::= y? //x等价于一个y或者一个空串

    出现1次或多次:以+表示:

    x ::= y+ //x等价于一个或者更多个y, 等价于 x ::= y y*

    字符类[…],表示长度的字符类,包含方括号中列出的任何字符的1个字符串:

    x ::= [abc] //等价于 x ::= 'a' | 'b' | 'c'

    否定的字符类[^…],表示长度,包含未在括号中列出的任何字符的1个字符串:

    x ::= [^abc] //等价于 x ::= 'd' | 'e' | 'f' | ... (all other characters in Unicode)

     

    以URL为例构造语法树:

    还可以有递归定义:

     


     

    正则语法与正则表达式

    举例子:

  • 相关阅读:
    2016年10月30日表单标签与样式表分类和选择器
    2016年10月29日常用标签与表格
    2016年10月28日网页属性和通用标签
    10月27日体会目标
    字符串学习笔记
    [51nod1789] 跑得比谁都快
    [洛谷9月月赛]签到题
    [LUOGU2730] 魔板
    [SCOI2009]迷路
    [51nod1074] 约瑟夫问题 V2
  • 原文地址:https://www.cnblogs.com/masteryellow/p/9215527.html
Copyright © 2011-2022 走看看