标签:.com for min exp code terminal note 内容 协议
学了这么多OO设计模式,不外乎都是 delegation + subtying,万变不离其宗。
除了OO,还有什么其他能够提升软件可维护性的构造技术?——本节从委派+子类型跳出来,学习以下三个方面:
(1) 基于状态的构造技术 (2) 表驱动的构造技术 (3) 基于语法的构造技术
【运用场景】
对于这些类型的序列,语法的概念是设计的一个好选择:
【语法成分】
terminals 终止节点、叶节点
nonterminal 非终止节点(遵循特定规则,利用操作符、终止节点和其他非终止节点,构造新的字符串)
x ::= y z //x等价于y后跟一个z
x ::= y* // x等价于0个或更多个y
x ::= y | z //x等价于一个y或者一个z
x ::= y? //x等价于一个y或者一个空串
x ::= y+ //x等价于一个或者更多个y, 等价于 x ::= y y*
x ::= [abc] //等价于 x ::= ‘a‘ | ‘b‘ | ‘c‘
x ::= [^abc] //等价于 x ::= ‘d‘ | ‘e‘ | ‘f‘ | ... (all other characters in Unicode)
x ::= (y z | a b)* //an x is zero or more y z or a b pairs
m ::= a (b|c) d //an m is a, followed by either b or c, followed by d
【实例:使用语法构造URL】
url ::= ‘http://‘ [a-z]+ ‘.‘ [a-z]+ ‘/‘
hostname可以有两个以上的部分,并且可以有一个可选的端口号:http://didit.csail.mit.edu:4949/
为了处理这样的字符串,语法可以这样写:
【Markdown 和 HTML的语法】
//Rugular! url ::= ‘http://‘ ([a-z]+ ‘.‘)+ [a-z]+ (‘:‘ [0-9]+)? ‘/‘ //Regular! markdown ::= ([^_]* | ‘_‘ [^_]* ‘_‘ )* //Not Regular! html ::= ( [^<>]* | ‘<i>‘ html ‘<i>‘ )*
附:正则语法
标签:.com for min exp code terminal note 内容 协议
原文地址:https://www.cnblogs.com/hithongming/p/9191524.html