public void Visit(NotNode node) { node.expr.Accept(this); if (node.expr.staticType.Text != "Bool") { errors.Add(ErrorSemantic.InvalidUseOfOperator(node, node.expr.staticType)); } if (!scope.IsDefinedType("Bool", out node.staticType)) { errors.Add(ErrorSemantic.NotDeclaredType(new TypeNode(node.line, node.column, "Bool"))); } }
public void Visit(EqualNode node) { node.Rigthexpr.Accept(this); node.Leftexpr.Accept(this); if (node.Leftexpr.staticType.Text != node.Rigthexpr.staticType.Text || !(new string[3] { "Bool", "Int", "String" }.Contains(node.Leftexpr.staticType.Text))) { errors.Add(ErrorSemantic.InvalidUseOfOperator(node, node.Leftexpr.staticType, node.Rigthexpr.staticType)); } if (!scope.IsDefinedType("Bool", out node.staticType)) { errors.Add(ErrorSemantic.NotDeclaredType(new TypeNode(node.line, node.column, "Bool"))); } }
//faltan poner los scope public void Visit(AritmethicNode node) { node.Rigthexpr.Accept(this); node.Leftexpr.Accept(this); if (node.Leftexpr.staticType.Text != node.Rigthexpr.staticType.Text) { errors.Add(ErrorSemantic.InvalidUseOfOperator(node, node.Leftexpr.staticType, node.Rigthexpr.staticType)); } else if (node.Leftexpr.staticType.Text != "Int" || node.Rigthexpr.staticType.Text != "Int") { errors.Add(ErrorSemantic.InvalidUseOfOperator(node)); } else if (!scope.IsDefinedType("Int", out node.staticType)) { errors.Add(ErrorSemantic.NotDeclaredType(new TypeNode(node.line, node.column, "Int"))); } }