public override bool CheckType(QLTypeErrors typeErrors)
        {
            if (Memory.IsDeclared(Name))
            {
                typeErrors.ReportError(new QLTypeError(
                    string.Format("(Question) Identifier '{0}' is already defined!", Name),
                    TokenInfo
                ));

                return false;
            }

            Memory.Declare(Name, Type);

            if (Memory.LabelIsDeclared(Label))
            {
                typeErrors.ReportError(new QLTypeError(
                    string.Format("(Question) Declared label already exists: '{0}'", Label),
                    TokenInfo,
                    true
                ));
            }

            Memory.DeclareLabel(Label);

            DeclareValue();

            return true;
        }
 public void CheckType(QLTypeErrors typeErrors)
 {
     foreach (StatementBase statement in _body)
     {
         statement.CheckType(typeErrors);
     }
 }
示例#3
0
 public void CheckType(QLTypeErrors typeErrors)
 {
     foreach (StatementBase statement in _body)
     {
         statement.CheckType(typeErrors);
     }
 }
示例#4
0
        public override bool CheckType(QLTypeErrors typeErrors)
        {
            if (Memory.IsDeclared(Name))
            {
                typeErrors.ReportError(new QLTypeError(
                                           string.Format("(Question) Identifier '{0}' is already defined!", Name),
                                           TokenInfo
                                           ));

                return(false);
            }

            Memory.Declare(Name, Type);

            if (Memory.LabelIsDeclared(Label))
            {
                typeErrors.ReportError(new QLTypeError(
                                           string.Format("(Question) Declared label already exists: '{0}'", Label),
                                           TokenInfo,
                                           true
                                           ));
            }

            Memory.DeclareLabel(Label);

            DeclareValue();

            return(true);
        }
示例#5
0
        public override bool CheckType(QLTypeErrors typeErrors)
        {
            if (!base.CheckType(typeErrors))
            {
                return(false);
            }

            if (!_value.CheckType(typeErrors))
            {
                return(false);
            }

            if (!Type.GetType().IsCompatibleWith(_value.GetResultType()))
            {
                typeErrors.ReportError(new QLTypeError(
                                           string.Format("(ComputedQuestion) Assigned value does not match declared type. Expected type: '{0}', Given value: '{1}'",
                                                         Type.GetType(), _value.GetResultType()),
                                           TokenInfo = TokenInfo
                                           ));

                return(false);
            }

            return(true);
        }
示例#6
0
        public override bool CheckType(QLTypeErrors typeErrors)
        {
            if (!_memory.IsDeclared(_name))
            {
                typeErrors.ReportError(new QLTypeError(
                                           string.Format("Referenced identifier '{0}' is not defined!", _name),
                                           TokenInfo
                                           ));

                return(false);
            }

            return(true);
        }
        public override bool CheckType(QLTypeErrors typeErrors)
        {
            if (!_memory.IsDeclared(_name))
            {
                typeErrors.ReportError(new QLTypeError(
                    string.Format("Referenced identifier '{0}' is not defined!", _name),
                    TokenInfo
                ));

                return false;
            }

            return true;
        }
        public override bool CheckType(QLTypeErrors typeErrors)
        {
            if (!(InnerExpression.GetResultType().IsCompatibleWith(new QInt())))
            {
                typeErrors.ReportError(new QLTypeError(
                    string.Format("The POSITIVE (+) operator can only be applied on integers! Got '{0}'",
                            InnerExpression.GetResultType()),
                    TokenInfo = InnerExpression.TokenInfo
                ));

                return false;
            }

            return true;
        }
        public override bool CheckType(QLTypeErrors typeErrors)
        {
            if (!(InnerExpression.GetResultType().IsCompatibleWith(new QBool())))
            {
                typeErrors.ReportError(new QLTypeError(
                    string.Format("The NOT (!) operator can only be applied on booleans! Got '{0}'",
                            InnerExpression.GetResultType()),
                    InnerExpression.TokenInfo
                ));

                return false;
            }

            return true;
        }
示例#10
0
        public override bool CheckType(QLTypeErrors typeErrors)
        {
            if (!(InnerExpression.GetResultType().IsCompatibleWith(new QInt())))
            {
                typeErrors.ReportError(new QLTypeError(
                                           string.Format("The NEGATIVE (-) operator can only be applied on integers! Got '{0}'",
                                                         InnerExpression.GetResultType()),
                                           InnerExpression.TokenInfo
                                           ));

                return(false);
            }

            return(true);
        }
        public override bool CheckType(QLTypeErrors typeErrors)
        {
            if (!base.CheckType(typeErrors))
                return false;

            if (!LeftExpression.GetResultType().IsCompatibleWith(new QInt()) ||
                !RightExpression.GetResultType().IsCompatibleWith(new QInt()))
            {
                typeErrors.ReportError(new QLTypeError(
                    string.Format("Can only compare values of type QInt! Left value: '{0}', right value: '{1}'",
                            LeftExpression.GetResultType(), RightExpression.GetResultType()),
                    LeftExpression.TokenInfo
                ));
                return false;
            }

            return true;
        }
        public override bool CheckType(QLTypeErrors typeErrors)
        {
            if (!base.CheckType(typeErrors))
                return false;

            if (!(LeftExpression.GetResultType().IsCompatibleWith(new QBool()))
                || !(RightExpression.GetResultType().IsCompatibleWith(new QBool())))
            {
                typeErrors.ReportError(new QLTypeError(
                string.Format("Left -or right expression is not a boolean. Left value: '{0}', right value: '{1}'",
                    LeftExpression.GetResultType(), RightExpression.GetResultType()),
                    TokenInfo = TokenInfo
                ));

                return false;
            }

            return true;
        }
示例#13
0
        public override bool CheckType(QLTypeErrors typeErrors)
        {
            if (!base.CheckType(typeErrors))
            {
                return(false);
            }

            if (!LeftExpression.GetResultType().IsCompatibleWith(new QInt()) ||
                !RightExpression.GetResultType().IsCompatibleWith(new QInt()))
            {
                typeErrors.ReportError(new QLTypeError(
                                           string.Format("Can only apply math on 2 integers! Left value: '{0}', right value '{1}'",
                                                         LeftExpression.GetResultType(), RightExpression.GetResultType()),
                                           LeftExpression.TokenInfo
                                           ));
                return(false);
            }

            return(true);
        }
        public override bool CheckType(QLTypeErrors typeErrors)
        {
            if (!_condition.CheckType(typeErrors))
                return false;

            if (!_condition.GetResultType().IsCompatibleWith(new QBool()))
            {
                typeErrors.ReportError(new QLTypeError(
                    string.Format("Condition is not a boolean. Got QType '{0}'", _condition.GetResultType()),
                    _condition.TokenInfo
                ));

                return false;
            }

            if (_body.Any(statement => !statement.CheckType(typeErrors)))
                return false;

            return _elseBody.All(elseStatement => elseStatement.CheckType(typeErrors));
        }
        public override bool CheckType(QLTypeErrors typeErrors)
        {
            if (!base.CheckType(typeErrors))
                return false;

            if (!_value.CheckType(typeErrors))
                return false;

            if (!Type.GetType().IsCompatibleWith(_value.GetResultType()))
            {
                typeErrors.ReportError(new QLTypeError(
                    string.Format("(ComputedQuestion) Assigned value does not match declared type. Expected type: '{0}', Given value: '{1}'",
                            Type.GetType(), _value.GetResultType()),
                    TokenInfo = TokenInfo
                ));

                return false;
            }

            return true;
        }
示例#16
0
        public override bool CheckType(QLTypeErrors typeErrors)
        {
            if (!base.CheckType(typeErrors))
            {
                return(false);
            }

            if (!(LeftExpression.GetResultType().IsCompatibleWith(new QBool())) ||
                !(RightExpression.GetResultType().IsCompatibleWith(new QBool())))
            {
                typeErrors.ReportError(new QLTypeError(
                                           string.Format("Left -or right expression is not a boolean. Left value: '{0}', right value: '{1}'",
                                                         LeftExpression.GetResultType(), RightExpression.GetResultType()),
                                           TokenInfo = TokenInfo
                                           ));

                return(false);
            }

            return(true);
        }
示例#17
0
        public override bool CheckType(QLTypeErrors typeErrors)
        {
            if (!_condition.CheckType(typeErrors))
            {
                return(false);
            }

            if (!_condition.GetResultType().IsCompatibleWith(new QBool()))
            {
                typeErrors.ReportError(new QLTypeError(
                                           string.Format("Condition is not a boolean. Got QType '{0}'", _condition.GetResultType()),
                                           _condition.TokenInfo
                                           ));

                return(false);
            }

            if (_body.Any(statement => !statement.CheckType(typeErrors)))
            {
                return(false);
            }

            return(_elseBody.All(elseStatement => elseStatement.CheckType(typeErrors)));
        }
 public override bool CheckType(QLTypeErrors typeErrors)
 {
     return InnerExpression.CheckType(typeErrors);
 }
示例#19
0
 public override bool CheckType(QLTypeErrors typeErrors)
 {
     return(true);
 }
示例#20
0
 public override bool CheckType(QLTypeErrors typeErrors)
 {
     return(LeftExpression.CheckType(typeErrors) && RightExpression.CheckType(typeErrors));
 }
 public override bool CheckType(QLTypeErrors typeErrors)
 {
     return LeftExpression.CheckType(typeErrors) && RightExpression.CheckType(typeErrors);
 }
示例#22
0
 public override bool CheckType(QLTypeErrors typeErrors)
 {
     return(InnerExpression.CheckType(typeErrors));
 }
 public override bool CheckType(QLTypeErrors typeErrors)
 {
     return true;
 }
 public abstract bool CheckType(QLTypeErrors errors);
示例#25
0
 public abstract bool CheckType(QLTypeErrors errors);