Ejemplo n.º 1
0
 public string Visit(AST_Type_Node node)
 {
     foreach (var item in node.Children)
     {
         item?.Visit(this);
     }
     return("");
 }
Ejemplo n.º 2
0
        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));
        }
Ejemplo n.º 3
0
        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));
        }
Ejemplo n.º 4
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));
        }
Ejemplo n.º 5
0
        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));
        }
Ejemplo n.º 6
0
 public bool Visit(AST_Type_Node node)
 {
     return(Types.Contains(node.Type));
 }
Ejemplo n.º 7
0
 public bool Visit(AST_Type_Node node)
 {
     return(true);
 }
Ejemplo n.º 8
0
 public bool Visit(AST_Type_Node node)
 {
     throw new NotImplementedException();
 }
Ejemplo n.º 9
0
 public Base_Object_Value Visit(AST_Type_Node node)
 {
     throw new NotImplementedException();
 }
Ejemplo n.º 10
0
        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));
        }