예제 #1
0
        static bool debug_new_types(string text)
        {
            var root = BuildAST_Cool.BUILD(text);
            var v0   = new CheckTypesVisitor();

            return(v0.Visit(root));

            bool r = true;

            try
            {
                r = v0.Visit(root);
                Console.WriteLine(r);
            }
            catch (Exception)
            {
                Console.WriteLine("Se partio debug types");
            }
            Console.WriteLine(r + "types");
            if (!r)
            {
                foreach (var item in v0.CurrErrorLoger.Log)
                {
                    Console.WriteLine(item);
                }
            }
            return(r);
        }
예제 #2
0
        public static Tuple <bool, ErrorLoger> SemanticChecking(Cool_Compiler.AST.AST_Root root)
        {
            var v0 = new CheckIDSandTypeDecVisitor();

            if (v0.Visit(root))
            {
                var v1 = new CheckClassesVisitor();
                if (v1.Visit(root))
                {
                    var v2 = new CheckVariablesVisitor();
                    if (v2.Visit(root))
                    {
                        var v3 = new CheckTypesVisitor();
                        if (v3.Visit(root))
                        {
                            return(new Tuple <bool, ErrorLoger>(true, null));
                        }
                        else
                        {
                            return(new Tuple <bool, ErrorLoger>(false, v3.CurrErrorLoger));
                        }
                    }
                    else
                    {
                        return(new Tuple <bool, ErrorLoger>(false, v2.CurrErrorLoger));
                    }
                }
                else
                {
                    return(new Tuple <bool, ErrorLoger>(false, v1.CurrErrorLoger));
                }
            }
            else
            {
                return(new Tuple <bool, ErrorLoger>(false, v0.CurrErrorLoger));
            }
        }
예제 #3
0
        public static Tuple <bool, bool, bool> Debug_Semantic(string text)
        {
            bool ans;
            var  root = BuildAST_Cool.BUILD(text);

            //check variables

            var v1 = new CheckVariablesVisitor();
            //try
            //{
            //    ans = v1.Visit(root);
            //    Console.WriteLine("Checkeo de variables: {0}", ans);
            //    if (!ans)
            //    {
            //        foreach (var item in v1.CurrErrorLoger.Log)
            //        {
            //            Console.WriteLine(item);
            //        }
            //    }
            //}
            //catch (Exception)
            //{
            //    Console.WriteLine("Se partio el checkeo de variables");
            //}

            //check types
            var v2 = new CheckTypesVisitor();
            //ans = v2.Visit(root);
            //try
            //{
            //    ans = v2.Visit(root);
            //    Console.WriteLine("Checkeo de tipos: {0}", ans);
            //    if (!ans)
            //    {
            //        foreach (var item in v2.CurrErrorLoger.Log)
            //        {
            //            Console.WriteLine(item);
            //        }
            //    }
            //}
            //catch (Exception)
            //{
            //    Console.WriteLine("Se partio el checkeo de tipos");
            //}

            ////check classes
            var v3 = new CheckClassesVisitor();

            //try
            //{
            //    ans = v3.Visit(root);
            //    Console.WriteLine("Checkeo de classes: {0}", ans);
            //    if (!ans)
            //    {
            //        foreach (var item in v3.CurrErrorLoger.Log)
            //        {
            //            Console.WriteLine(item);
            //        }
            //    }
            //}
            //catch (Exception)
            //{
            //    Console.WriteLine("Se partio el checkeo de classes");
            //}

            return(new Tuple <bool, bool, bool>(v1.Visit(root), v2.Visit(root), v3.Visit(root)));
        }