示例#1
0
        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));
 }