コード例 #1
0
        public override SemanticCheckResult VisitLessEqual(ASTLessEqualNode LessEqual)
        {
            var left  = LessEqual.Left.Accept(this);
            var right = LessEqual.Right.Accept(this);

            LessEqual.SemanticCheckResult.Ensure(left, left.Type == CompilationUnit.TypeEnvironment.Int,
                                                 new Lazy <Error>(() => new Error("Left Expresion must be of tipe Int.", ErrorKind.TypeError, LessEqual.LessEqualToken.Line, LessEqual.LessEqualToken.Column)));
            LessEqual.SemanticCheckResult.Ensure(right, right.Type == CompilationUnit.TypeEnvironment.Int,
                                                 new Lazy <Error>(() => new Error("Right Expresion must be of tipe Int.", ErrorKind.TypeError, LessEqual.LessEqualToken.Line, LessEqual.LessEqualToken.Column)));
            LessEqual.SemanticCheckResult.EnsureReturnType(CompilationUnit.TypeEnvironment.Bool);

            return(LessEqual.SemanticCheckResult);
        }
コード例 #2
0
        public ASTCILNode VisitLessEqual(ASTLessEqualNode LessEqual)
        {
            var ifLabel = labelIlGenerator.GenerateIf();

            return(new ASTCILIfNode(
                       new ASTCILBlockNode(new ASTCILExpressionNode[]
            {
                new ASTCILBoolOrTwoVariablesNode(
                    (ASTCILExpressionNode)(new ASTLessThanNode
                {
                    Left = LessEqual.Left, Right = LessEqual.Right
                }).Accept(this),
                    (ASTCILExpressionNode)(new ASTEqualNode
                {
                    Left = LessEqual.Left, Right = LessEqual.Right
                }).Accept(this)),
                new ASTCILGotoNode(ifLabel.end),
            }),
                       new ASTCILIntConstantNode(1),
                       new ASTCILIntConstantNode(0), ifLabel));
        }
 public virtual T VisitLessEqual(ASTLessEqualNode LessEqual)
 {
     LessEqual.Left.Accept(this);
     LessEqual.Right.Accept(this);
     return(default(T));
 }