public Const(ConstDef def, FastTransducerInstance fti, Z3Provider z3p) { this.z3p = z3p; this.name = def.id.text; switch (def.sort.kind) { case (FastSortKind.Real): { sort = z3p.RealSort; break; } case (FastSortKind.Bool): { sort = z3p.BoolSort; break; } case (FastSortKind.Int): { sort = z3p.IntSort; break; } case (FastSortKind.String): { sort = z3p.MkListSort(z3p.CharSort); break; } case (FastSortKind.Tree): { foreach (var enumSort in fti.enums) { if (enumSort.name == def.sort.name.text) { sort = enumSort.sort; break; } } break; } } this.value = GenerateZ3ExprFromExpr(def.expr, fti).Simplify(); }
//Generate Z3 term for const def private static bool GenerateConst(ConstDef def, FastTransducerInstance fti) { fti.consts.Add(new Const(def, fti, z3p)); return true; }
//Generate the C# corresponding to one constant private static bool GenerateConst(ConstDef def, StringBuilder sb) { sb.Append("public const " + ((def.sort.kind == FastSortKind.Real) ? "double" : def.sort.name.text) + " " +def.id.text + " = "); PrintExpr(new List<FastToken>(), def.expr, sb); sb.AppendLine(";"); sb.AppendLine(); return true; }