软件构造5.3
State-based construction
使用有限状态机FSM来定义程序的行为,使用状态来控制程序的执行,根据当前状态,决定下一步要干什么,干完后转到什么状态
Automata-based programming基于自动机的编程
将程序看作是一个有限状态自动机,侧重于对状态以及状态装换的抽象和编程
State Pattern状态模式 (behavioral pattern)
Memento Pattern备忘录模式 (behavioral)
记住对象的历史状态,以便于回滚
- originator 需要备忘的类
- caretaker 添加originator的备忘记录和恢复
- mementor 备忘录,记录originator对象的历史状态
Grammar-based construction语法驱动的构造
有一类应用,从外部读取文本数据,在应用中进一步处理
Constituents of a Grammar语法成分
Literal Strings 文字字符串 被称为终止节点,叶节点
形式:nonterminal ::= expression of terminals, nonterminals, and operators
非终结符::=终结符、非终结符和运算符的表达式
Operators in a Grammar运算符
- 连接:空格表示
- 重复:* 可以0个
- 选择: |
后缀运算符优先级更高 *,?,+ - 圆括号:改变优先级
- 匹配 ::=
- 选择 : ?
- 一个或更多个: +
- 字符集合: [ ]
- 非:[^ … ] 不包含
Recursion in grammars语法中的递归
注意好空格
Parse Trees解析树
Markdown and HTML标记和HTML
Regular Grammars and Regular Expressions正则文法和正则表达式
简化之后可以表达为一个产生式而不包括任何非终止节点
正则表达式:去除引号和空格
- 任何单个字符 .
- 任何数字 \d
- 任何白符号 \s [a-zA-Z_0-9]
- 任何字符包括下划线 \w
- 转义运算符 ,使其与字面上匹配
Using regular expressions in Java
Pattern 是对正则表达式进行编译后得到的结果
Matcher 利用Pattern对输入字符串进行解析
预定义字符类
量词
边界匹配,匹配发生的位置