예제 #1
0
        public void VisitSimpleExpression(SimpleExpression node)
        {
            if (node.HasAlreadyBeenEvaluated)
            {
                return;
            }

            node.Term.Accept(this);
            TokenType termEval = node.Term.EvaluationType;

            if (node.Tail != null)
            {
                node.Tail.Accept(this);
                TokenType tailEval = node.Tail.EvaluationType;

                if (!LegitOperationChecker.IsLegitOperationForEvaluations(node.Tail.Operation, termEval, tailEval))
                {
                    termEval = TokenType.ERROR;
                }
            }

            if (node.AdditiveInverse && !LegitOperationChecker.IsLegitOperationForEvaluations(TokenType.UNARY_OP_NEGATIVE, termEval))
            {
                termEval = TokenType.ERROR;
            }

            node.EvaluationType = termEval;
        }
예제 #2
0
        public void VisitTermNode(TermNode node)
        {
            if (node.HasAlreadyBeenEvaluated)
            {
                return;
            }

            node.Factor.Accept(this);
            TokenType factorEval = node.Factor.EvaluationType;

            if (node.TermTail != null)
            {
                node.TermTail.Accept(this);
                TokenType tailEval = node.TermTail.EvaluationType;

                if (!LegitOperationChecker.IsLegitOperationForEvaluations(node.TermTail.Operation, factorEval, tailEval))
                {
                    factorEval = TokenType.ERROR;
                }

                // MUST HANDLE CASES WHERE INT + REAL EVALUATED
            }

            node.EvaluationType = factorEval;
        }
예제 #3
0
        public void VisitExpressionNode(ExpressionNode node)
        {
            node.Accept(this.typeChecker);
            node.SimpleExpression.Accept(this);

            if (node.ExpressionTail != null)
            {
                node.ExpressionTail.Accept(this);
                if (!LegitOperationChecker.IsLegitOperationForEvaluations(node.ExpressionTail.Operation, node.SimpleExpression.EvaluationType, node.ExpressionTail.RightHandSide.EvaluationType))
                {
                    node.EvaluationType = TokenType.ERROR;
                }
                else
                {
                    node.EvaluationType = TokenType.BOOLEAN_VAL;
                }
            }

            if (node.EvaluationType == TokenType.ERROR)
            {
                analyzer.notifyError(new IllegalTypeError(node));
            }
        }
예제 #4
0
        public void VisitSimpleExpressionTail(SimpleExpressionTail node)
        {
            if (node.HasAlreadyBeenEvaluated)
            {
                return;
            }

            node.Term.Accept(this);
            TokenType termEval = node.Term.EvaluationType;

            if (node.Tail != null)
            {
                node.Tail.Accept(this);
                TokenType tailEval = node.Tail.EvaluationType;

                if (!LegitOperationChecker.IsLegitOperationForEvaluations(node.Tail.Operation, termEval, tailEval))
                {
                    termEval = TokenType.ERROR;
                }
            }

            node.EvaluationType = termEval;
        }
예제 #5
0
        public void VisitTermTailNode(TermTail node)
        {
            if (node.HasAlreadyBeenEvaluated)
            {
                return;
            }

            node.Factor.Accept(this);
            TokenType factorEval = node.Factor.EvaluationType;

            if (node.ChildTermTail != null)
            {
                node.ChildTermTail.Accept(this);
                TokenType tailEval = node.ChildTermTail.EvaluationType;

                if (!LegitOperationChecker.IsLegitOperationForEvaluations(node.ChildTermTail.Operation, factorEval, tailEval))
                {
                    factorEval = TokenType.ERROR;
                }
            }

            node.EvaluationType = factorEval;
        }
예제 #6
0
        public void VisitExpressionNode(ExpressionNode node)
        {
            if (node.HasAlreadyBeenEvaluated)
            {
                return;
            }

            node.SimpleExpression.Accept(this);
            TokenType expressionEvaluation = node.SimpleExpression.EvaluationType;

            if (node.ExpressionTail != null)
            {
                node.ExpressionTail.Accept(this);
                TokenType tailEvaluation = node.ExpressionTail.RightHandSide.EvaluationType;

                if (!LegitOperationChecker.IsLegitOperationForEvaluations(node.ExpressionTail.Operation, expressionEvaluation, tailEvaluation))
                {
                    expressionEvaluation = TokenType.ERROR;
                }
            }

            node.EvaluationType = expressionEvaluation;
        }