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); }
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); }
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); }
public void LogError_SetsLoggerMessageEqualToContextErrorMessage_Test() { target.LogError(); Assert.AreEqual(TestError, MockLogger.Message); }