示例#1
0
 public override void Substitute(IRExpression template, IRExpression substitution, OnMatchFoundHandler callback)
 {
 }
示例#2
0
 public abstract void Substitute(IRExpression template, IRExpression substitution, OnMatchFoundHandler callback);
示例#3
0
 public void UnsubscribeFromMatchFoundEvent(OnMatchFoundHandler matchFoundHandler)
 {
     OnMatchFound -= matchFoundHandler;
 }
        public override void Substitute(IRExpression template, IRExpression substitution, OnMatchFoundHandler callback)
        {
            Pointer.Substitute(template, substitution, callback);
            var mapping = new Dictionary <IRVariable, IRExpression>();

            if (Pointer.Unify(template, mapping) && callback(mapping))
            {
                if (substitution is IRVariable v)
                {
                    Pointer = mapping[v].CloneComplete();
                }
                else
                {
                    var newExpr = substitution.CloneComplete();
                    foreach (var varMap in mapping)
                    {
                        newExpr.Substitute(varMap.Key, varMap.Value);
                    }
                    Pointer = newExpr;
                }
            }
        }
示例#5
0
 public void SubscribeToMatchFoundEvent(OnMatchFoundHandler matchFoundHandler)
 {
     OnMatchFound += matchFoundHandler;
 }