示例#1
0
        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")));
            }
        }
示例#2
0
        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")));
            }
        }
示例#3
0
        //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")));
            }
        }