Microsoft.Fast.TreeClassDef.AddTree C# (CSharp) Méthode

AddTree() public méthode

Generate a tree from a tree definition
public AddTree ( TreeDef def, FastTransducerInstance fti, Def>.Dictionary defs ) : bool
def Microsoft.Fast.AST.TreeDef
fti FastTransducerInstance
defs Def>.Dictionary
Résultat bool
        public bool AddTree(TreeDef def, FastTransducerInstance fti, Dictionary<string, Def> defs)
        {
            switch (def.tdkind)
            {
                case TreeDefKind.Witness:
                    {
                        TreeWitnessDef ce = def as TreeWitnessDef;
                        TreeTransducer language = OperationTranGen.getTreeAutomatonFromExpr(ce.language, fti, defs);
                        var res = language.GenerateWitness();
                        if(res!=null)
                            this.trees.Add(def.func.name.text, new Expr[] { res });
                        else
                            this.trees.Add(def.func.name.text, new Expr[] { });
                        break;
                    }
                case TreeDefKind.Apply:
                    {
                        TreeAppDef ce = def as TreeAppDef;
                        IEnumerable<Expr> t = null;
                        if (ce.expr.kind == FExpKind.Var)
                        {
                            foreach (var treeDef in fti.treeDefinitions)
                                if (treeDef.Value.trees.TryGetValue(ce.expr.token.text, out t))
                                    break;
                            if (t == null)
                            {
                                this.trees.Add(def.func.name.text, null);
                                return true;
                            }
                        }
                        else
                        {
                            Expr t1 = GenerateZ3ExprFromToExpr(ce.expr, alphabet, null, 0, null, null, defs, fti, null).Simplify();
                            List<Expr> tl = new List<Expr>();
                            tl.Add(t1);
                            t = tl;
                        }

                        TreeTransducer a = OperationTranGen.getTreeAutomatonFromExpr(ce.transducer, fti, defs);

                        var results = a.Apply(t);
                        this.trees.Add(def.func.name.text, results.ToList());
                        break;
                    }
                case TreeDefKind.Tree:
                    {
                        TreeExpDef ce = def as TreeExpDef;
                        IEnumerable<Expr> t = null;
                        if (ce.expr.kind == FExpKind.Var)
                        {
                            foreach (var treeDef in fti.treeDefinitions)
                                if (treeDef.Value.trees.TryGetValue(ce.expr.token.text, out t))
                                    break;
                            if (t == null)
                            {
                                this.trees.Add(def.func.name.text, null);
                                return true;
                            }
                        }
                        else
                        {
                            Expr t1 = GenerateZ3ExprFromToExpr(ce.expr, alphabet, null, 0, null, null, defs, fti, null).Simplify();
                            List<Expr> tl = new List<Expr>();
                            tl.Add(t1);
                            t = tl;
                        }
                        this.trees.Add(def.func.name.text, t);
                        break;
                    }
            }
            return true;
        }