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)); }
/// <summary> /// Visit a parse tree produced by <see cref="CoolParser.classdefine"/>. /// <para> /// The default implementation returns the result of calling <see cref="AbstractParseTreeVisitor{Result}.VisitChildren(IRuleNode)"/> /// on <paramref name="context"/>. /// </para> /// </summary> /// <param name="context">The parse tree.</param> /// <return>The visitor result.</return> public virtual Result VisitClassdefine([NotNull] CoolParser.ClassdefineContext context) { return(VisitChildren(context)); }