public static Dictionary <string, SemanticType> BuildSystemType() { Dictionary <string, SemanticType> solve = new Dictionary <string, SemanticType>(); var Object = new SemanticType("Object"); var SelfType = new SemanticType("SELF_TYPE"); var String = new SemanticType("String", Object); var Int = new SemanticType("Int", Object); var IO = new SemanticType("IO", Object); var Bool = new SemanticType("Bool", Object); var abort = new SemanticMethod("abort", Object); var type_name = new SemanticMethod("type_name", String); var copy = new SemanticMethod("copy", SelfType); Object.Methods = new List <SemanticMethod> { abort, type_name, copy }; var length = new SemanticMethod("length", Int); var concat = new SemanticMethod("concat", String, new SemanticAttr[] { new SemanticAttr("x", String) }); var substring = new SemanticMethod("substr", String, new SemanticAttr[] { new SemanticAttr("i", Int), new SemanticAttr("l", Int) }); String.Methods = new List <SemanticMethod> { length, concat, substring }; var out_string = new SemanticMethod("out_string", SelfType, new SemanticAttr[] { new SemanticAttr("x", String) }); var out_int = new SemanticMethod("out_int", SelfType, new SemanticAttr[] { new SemanticAttr("x", Int) }); var in_string = new SemanticMethod("in_string", String); var in_int = new SemanticMethod("in_int", Int); IO.Methods = new List <SemanticMethod> { out_string, out_int, in_string, in_int }; foreach (var item in (new SemanticType[] { Object, Int, IO, SelfType, String, Bool })) { solve.Add(item.Name, item); } return(solve); }
public SemanticMethod ChangeType(SemanticType t) { var l = new List <SemanticAttr>(); foreach (var item in AttrParams) { if (item.Type.Name == "SELF_TYPE") { l.Add(item.ChangeType(t)); } else { l.Add(item); } } var solve = new SemanticMethod(Name, ReturnType, AttrParams); solve.Self = Self; if (solve.ReturnType.Name == "SELF_TYPE") { solve.ReturnType = t; } return(solve); }