private ExpressionValue ParseComparisonNode(ComparisonExpressionNode comparisonExpressionNode) { ExpressionValue leftExpressionValue = ParseExpressionNode(comparisonExpressionNode.Left); ExpressionValue rightExpressionValue = ParseExpressionNode(comparisonExpressionNode.Right); ExpressionOperator expressionOperator = ExpressionOperator.Undefined; switch (comparisonExpressionNode.Operator) { case ComparisonOperator.Equal: expressionOperator = ExpressionOperator.Equals; break; case ComparisonOperator.GreaterEqual: expressionOperator = ExpressionOperator.GreaterEquals; break; case ComparisonOperator.GreaterThan: expressionOperator = ExpressionOperator.GreaterThan; break; case ComparisonOperator.LessEqual: expressionOperator = ExpressionOperator.LessEquals; break; case ComparisonOperator.LessThan: expressionOperator = ExpressionOperator.LessThan; break; default: throw new NotImplementedException(); } return(leftExpressionValue.Compare(rightExpressionValue, expressionOperator)); }
private StatementType Analyze(ComparisonExpressionNode node) { StatementType left = AnalyseExpression(node.Left); StatementType right = AnalyseExpression(node.Right); switch (node.Operator) { case ComparisonOperator.Equal: return((left == right) ? StatementType.Boolean : StatementType.Unknown); default: return((left == right && left == StatementType.Numeric) ? StatementType.Boolean : StatementType.Unknown); } }
public void InValidBooleanComparisonTest() { SymbolTable.Add("x", QValueType.Boolean); var x = new IdentifierNode(new Location(0, 0), "x"); SymbolTable.Add("y", QValueType.Boolean); var y = new IdentifierNode(new Location(0, 0), "y"); var comparisonNode = new ComparisonExpressionNode(new Location(0, 0), x, ComparisonOperator.LessEqual, y); var analyser = new StatementTypeAnalyser(); var result = analyser.Analyse(comparisonNode); Assert.IsFalse(result); }
private StatementType Analyze(ComparisonExpressionNode node) { StatementType left = AnalyseExpression(node.Left); StatementType right = AnalyseExpression(node.Right); switch (node.Operator) { case ComparisonOperator.EQ: return((left == right) ? StatementType.BOOLEAN : StatementType.UNKNOWN); default: return((left == right && left == StatementType.NUMERIC) ? StatementType.BOOLEAN : StatementType.UNKNOWN); } }
public void InValidComparisonWithArthimetricTest() { SymbolTable.Add("TestBool", QValueType.Boolean); var left = new IdentifierNode(new Location(0, 0), "TestBool"); var five = new LiteralNode(new Location(0, 0), "5", QValueType.Integer); var ten = new LiteralNode(new Location(0, 0), "blah blah", QValueType.Text); var right = new ComparisonExpressionNode(new Location(0, 0), five, ComparisonOperator.GreaterEqual, ten); var comparisonNode = new LogicalExpressionNode(new Location(0, 0), left, LogicalOperator.Or, right); var analyser = new StatementTypeAnalyser(); var result = analyser.Analyse(comparisonNode); Assert.IsFalse(result); }
public void ValidComparisonWithArthimetricTest() { SymbolTable.Add("TestBool", QValueType.BOOLEAN); var left = new IdentifierNode(new Location(0, 0), "TestBool"); var five = new LiteralNode(new Location(0, 0), "5", QValueType.INTEGER); var ten = new LiteralNode(new Location(0, 0), "10", QValueType.INTEGER); var right = new ComparisonExpressionNode(new Location(0, 0), five, ComparisonOperator.GE, ten); var comparisonNode = new LogicalExpressionNode(new Location(0, 0), left, LogicalOperator.OR, right); var analyser = new StatementTypeAnalyser(); var result = analyser.Analyse(comparisonNode); Assert.IsTrue(result); }
public override IExpressionNode VisitComparisonExpression([NotNull] QLanguageParser.ComparisonExpressionContext context) { // If ( expression ) var comparisonoContext = context.comparisonExpression(); if (comparisonoContext != null) { return(VisitComparisonExpression(comparisonoContext)); } var left = VisitComparisonOperand(context.LEFT); var opr = ComparisonExpressionNode.ParseComparisonOperator(context.OPR.GetText()); var right = VisitComparisonOperand(context.RIGHT); return(new ComparisonExpressionNode(Location.FromContext(context), left, opr, right)); }
public override IExpressionNode VisitComparisonExpression(ComparisonExpressionContext context) { if (context == null) { throw new ArgumentNullException("Context can't be null"); } var comparisonoContext = context.comparisonExpression(); if (comparisonoContext != null) { return(VisitComparisonExpression(comparisonoContext)); } var left = VisitComparisonOperand(context.LEFT); var opr = ComparisonExpressionNode.ParseComparisonOperator(context.OPR.GetText()); var right = VisitComparisonOperand(context.RIGHT); return(new ComparisonExpressionNode(Location.FromContext(context), left, opr, right)); }
public void ParseComparisonOperatorLTTest() { var result = ComparisonExpressionNode.ParseComparisonOperator("<"); Assert.AreEqual(ComparisonOperator.LT, result); }
public void ParseComparisonOperatorGETest() { var result = ComparisonExpressionNode.ParseComparisonOperator(">="); Assert.AreEqual(ComparisonOperator.GE, result); }
public void ParseComparisonOperatorInvalidInput() { ComparisonExpressionNode.ParseComparisonOperator("-"); }
public void ParseComparisonOperatorGTTest() { var result = ComparisonExpressionNode.ParseComparisonOperator(">"); Assert.AreEqual(ComparisonOperator.GreaterThan, result); }