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; }
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; }
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)); } }
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; }
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; }
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; }