Beispiel #1
0
        public override LatteParser.TypeContext VisitERelOp(LatteParser.ERelOpContext context)
        {
            var lhs = Visit(context.expr()[0]);
            var rhs = Visit(context.expr()[1]);

            switch (context.relOp())
            {
            case LatteParser.LessThanContext _:
            case LatteParser.LessEqualsContext _:
            case LatteParser.GreaterThanContext _:
            case LatteParser.GreaterEqualsContext _:
                if (!lhs.Equals(rhs) || !lhs.Equals(new LatteParser.TIntContext()))
                {
                    Utils.StateUtils.InterruptWithMessage(context.start.Line, ErrorMessages.CompOpToNotInt);
                }
                break;

            case LatteParser.EqualsContext _:
            case LatteParser.NotEqualsContext _:
                if (!lhs.Equals(rhs))
                {
                    Utils.StateUtils.InterruptWithMessage(context.start.Line, ErrorMessages.EqOpWrongTypes);
                }
                break;
            }

            return(new LatteParser.TBoolContext());
        }
Beispiel #2
0
 public RelOp(LatteParser.ERelOpContext context) :
     base(context.expr()[0], context.expr()[1])
 {
     Rel = context.relOp() switch
     {
         LatteParser.LessThanContext _ => Rel.LessThan,
                                     LatteParser.LessEqualsContext _ => Rel.LessEquals,
                                     LatteParser.GreaterThanContext _ => Rel.GreaterThan,
                                     LatteParser.GreaterEqualsContext _ => Rel.GreaterEquals,
                                     LatteParser.EqualsContext _ => Rel.Equals,
                                     LatteParser.NotEqualsContext _ => Rel.NotEquals
     };
 }