public string Visit(AST_Type_Node node) { foreach (var item in node.Children) { item?.Visit(this); } return(""); }
public override AST_Node VisitFeatureprop([NotNull] CoolParser.FeaturepropContext context) { var v = context.property(); var formal = v.formal(); AST_Id id = new AST_Id(formal.ID(), formal.ID().GetText()); AST_Type_Node type = new AST_Type_Node(formal.TYPE(), formal.TYPE().GetText()); AST_Expresion exp = null; if (v.expr() != null) { exp = (AST_Expresion)Visit(v.expr()); } var formald = new AST_FormalDec(v.formal(), id, type); return(new AST_ClassProperty(context, formald, exp)); }
public override AST_Node VisitMethod([NotNull] CoolParser.MethodContext context) { AST_Id id = new AST_Id(context.ID(), context.ID().GetText()); AST_Type_Node type = new AST_Type_Node(context.TYPE(), context.TYPE().GetText()); List <AST_ClassProperty> param = new List <AST_ClassProperty>(); AST_Expresion corpus = (AST_Expresion)Visit(context.expr()); foreach (var item in context.formal()) { var iid = new AST_Id(item.ID(), item.ID().GetText()); var ity = new AST_Type_Node(item.TYPE(), item.TYPE().GetText()); var formald = new AST_FormalDec(item, iid, ity); AST_ClassProperty i = new AST_ClassProperty(item, formald, null); param.Add(i); } return(new AST_MethodDef(context, id, type, new AST_ListProp(context, param), corpus)); }
public override AST_Node VisitClassdefine([NotNull] CoolParser.ClassdefineContext context) { AST_Id id = new AST_Id(context.TYPE(0), context.TYPE(0).GetText()); AST_Type_Node inh = new AST_Type_Node(context.TYPE(0), "Object"); if (context.TYPE().Length > 1) { inh = new AST_Type_Node(context.TYPE(1), context.TYPE(1).GetText()); } List <AST_ClassProperty> prop = new List <AST_ClassProperty>(); List <AST_MethodDef> meth = new List <AST_MethodDef>(); foreach (var item in context.feature()) { var t = Visit(item); if (t is AST_ClassProperty) { prop.Add((AST_ClassProperty)t); } else { meth.Add((AST_MethodDef)t); } } foreach (var item in prop) { if (item.exp == null) { if (item.decl.type.Type == "Int") { item.exp = new AST_Cte(context, new AST_Token("0", "Int")); } else if (item.decl.type.Type == "Bool") { item.exp = new AST_Cte(context, new AST_Token("false", "false")); } else if (item.decl.type.Type == "String") { item.exp = new AST_StringCte(item.row, item.col, "\"\""); } } } return(new AST_ClassDef(context, id, new AST_ListProp(context, prop), new AST_ListMethod(context, meth), inh)); }
public override AST_Node VisitLet([NotNull] CoolParser.LetContext context) { List <AST_ClassProperty> param = new List <AST_ClassProperty>(); AST_Expresion corpus = (AST_Expresion)Visit(context.expr()); foreach (var item in context.property()) { var iid = new AST_Id(item.formal().ID(), item.formal().ID().GetText()); var ity = new AST_Type_Node(item.formal().TYPE(), item.formal().TYPE().GetText()); var formald = new AST_FormalDec(item, iid, ity); AST_Expresion subexp = null; if (item.expr() != null) { subexp = (AST_Expresion)Visit(item.expr()); } AST_ClassProperty i = new AST_ClassProperty(item, formald, subexp); param.Add(i); } return(new AST_Let(context, new AST_ListProp(context, param), corpus)); }
public bool Visit(AST_Type_Node node) { return(Types.Contains(node.Type)); }
public bool Visit(AST_Type_Node node) { return(true); }
public bool Visit(AST_Type_Node node) { throw new NotImplementedException(); }
public Base_Object_Value Visit(AST_Type_Node node) { throw new NotImplementedException(); }
public override AST_Node VisitNewtype([NotNull] CoolParser.NewtypeContext context) { var id = new AST_Type_Node(context.TYPE(), context.TYPE().GetText()); return(new AST_New_Type(context, id)); }