示例#1
0
 public bool Visit(AST_ClassProperty node)
 {
     if (ReservedWords.Contains(node.decl.id.Id))
     {
         CurrErrorLoger.LogError(node.decl.row, node.decl.col, "El id de la variable es una palabra reservada");
         return(false);
     }
     if (Types.Contains(node.decl.id.Id))
     {
         CurrErrorLoger.LogError(node.decl.row, node.decl.col, "El id de la variable es una tipo definido");
         return(false);
     }
     if (!Types.Contains(node.decl.type.Type))
     {
         CurrErrorLoger.LogError(node.decl.row, node.decl.col, "El tipo de la variable no esta definido");
         return(false);
     }
     if (node.exp != null)
     {
         if (!node.exp.Visit(this))
         {
             return(false);
         }
     }
     return(true);
 }
示例#2
0
        private bool ACycle(string node, Dictionary <string, List <string> > graph, string last = "~")
        {
            if (hs.Contains(node))
            {
                CurrErrorLoger.LogError(0, 0, "Dependencia ciclica entre " + node + " y " + last);
                return(false);
            }
            hs.Add(node);

            foreach (var ady in graph[node])
            {
                if (!ACycle(ady, graph, node))
                {
                    return(false);
                }
            }
            return(true);
        }
        public bool Visit(AST_Asignacion node)
        {
            bool solve        = true;
            bool visit_result = node.Exp.Visit(this);

            if (!visit_result)
            {
                solve = false;
            }
            if (!CurrContext.IsDefine(node.Id))
            {
                solve = false;
                CurrErrorLoger.LogError(node.row, node.col, "Variable " + node.Id + " no definida");
            }
            CurrContext.Define(node.Id);
            return(solve);
        }
示例#4
0
        public bool Visit(AST_Asignacion node)
        {
            if (!node.Exp.Visit(this))
            {
                return(false);
            }
            var x = CurrContext.GetType(node.Id);

            //if (x.Name != node.Exp.MyType.Name)
            if (SemanticType.LCA(x, node.Exp.MyType).Name != x.Name)
            {
                CurrErrorLoger.LogError(node.row, node.col, "El tipo de " + node.Exp.MyType.Name + " no se conforma a " + x.Name);
                return(false);
            }
            node.MyType = node.Exp.MyType;
            return(true);
        }
示例#5
0
        public void LogError_SetsLoggerMessageEqualToContextErrorMessage_Test()
        {
            target.LogError();

            Assert.AreEqual(TestError, MockLogger.Message);
        }