本文整理汇总了Golang中github.com/katydid/katydid/relapse/ast.Pattern.GetLeafNode方法的典型用法代码示例。如果您正苦于以下问题:Golang Pattern.GetLeafNode方法的具体用法?Golang Pattern.GetLeafNode怎么用?Golang Pattern.GetLeafNode使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类github.com/katydid/katydid/relapse/ast.Pattern
的用法示例。
在下文中一共展示了Pattern.GetLeafNode方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Golang代码示例。
示例1: simplifyAnd
func simplifyAnd(refs ast.RefLookup, p1, p2 *ast.Pattern, record bool) *ast.Pattern {
if isNotZany(p1) || isNotZany(p2) {
return emptyset
}
if isZany(p1) {
return p2
}
if isZany(p2) {
return p1
}
if isEmpty(p1) {
if Nullable(refs, p2) {
return ast.NewEmpty()
} else {
return emptyset
}
}
if isEmpty(p2) {
if Nullable(refs, p1) {
return ast.NewEmpty()
} else {
return emptyset
}
}
if p1.GetLeafNode() != nil && p2.GetLeafNode() != nil {
expr1, err1 := compose.ConvertBuiltInIntoFunction(p1.GetLeafNode().GetExpr())
expr2, err2 := compose.ConvertBuiltInIntoFunction(p2.GetLeafNode().GetExpr())
if err1 == nil && err2 == nil {
return ast.NewLeafNode(ast.NewFunction("and", expr1, expr2))
}
}
left := getAnds(p1)
right := getAnds(p2)
list := append(left, right...)
list = ast.Set(list)
list = simplifyChildren(list, func(left, right *ast.Pattern) *ast.Pattern {
return simplifyAnd(refs, left, right, record)
}, record)
ast.Sort(list)
var p *ast.Pattern = list[0]
for i := range list {
if i == 0 {
continue
}
p = ast.NewAnd(p, list[i])
}
return p
}