Esempio n. 1
0
        public override void EnterStructIncr(LatteParser.StructIncrContext context)
        {
            var objectType = new ExpressionTypeVisitor().GetFieldType(context.expr(), context.ID().GetText(), context.start.Line);

            if (!objectType.Equals(new LatteParser.TIntContext()))
            {
                StateUtils.InterruptWithMessage(
                    context.start.Line,
                    context.ID().Symbol.Column,
                    ErrorMessages.DecrFieldOnlyOnInt(objectType.GetText(), context.ID().GetText()));
            }
        }
Esempio n. 2
0
        public override void EnterWhile(LatteParser.WhileContext context)
        {
            _environment.DetachVarEnv();

            var exprType = new ExpressionTypeVisitor().Visit(context.expr());

            if (!exprType.Equals(new LatteParser.TBoolContext()))
            {
                _errorState.AddErrorMessage(new ErrorMessage(
                                                context.expr().start.Line,
                                                context.expr().start.Line,
                                                ErrorMessages.WhileWrongCondition));
            }
        }
Esempio n. 3
0
        public override void EnterCondElse(LatteParser.CondElseContext context)
        {
            _environment.DetachVarEnv();
            if (context.stmt()[0] is LatteParser.DeclContext)
            {
                _skipNextDecl = true;
            }

            var exprType = new ExpressionTypeVisitor().Visit(context.expr());

            if (!exprType.Equals(new LatteParser.TBoolContext()))
            {
                _errorState.AddErrorMessage(new ErrorMessage(
                                                context.expr().start.Line,
                                                context.expr().start.Line,
                                                ErrorMessages.IfWrongCondition));
            }
        }