规则的顺序
HighPriority>无标记>LowPriority
规则文件和规则的字母顺序
嵌套的表达式
CustomFuncExpr
ListExpr
FuncExpr
RefExpr
StringExpr
NumberExpr
NameExpr
List([])表达式与ListAnyOp(...)
如果存在一个非...子级,则有以下变体
匹配任意位置的孩子:[... <child> ...]
匹配第一个孩子:[<child> ...]
匹配最后一位的孩子:[... <child>]
匹配单例列表:[<child>]
匹配任何列表:[...]
Not表达式
不是not的表达式要求所有部分都必须匹配,达到整体匹配。
Not会否定其后的子表达式以以下规则
NOT(<cond1> AND <cond2>)== NOT(<cond1>)或NOT(<cond2>)
如果任何一个条件都不匹配,则整体表达式匹配
!not
有以下匹配逻辑
if <match-type> {
if <match-child1> {
if <match-child2> {
...
not
_match := false
if <match-type> {
if <match-child1> {
if <match-child2> {
_match = true
}
}
}
if !_match {
...
这个伪代码实际上就是多个and子表达式逐个测试
而
if !_match {
对应or的语义
规划化与模式匹配
规划化只与父节点有关,父节点规定了格式化的模式
模式匹配要求对父子节点完整匹配