private StatementType Analyze(ArthimetricExpressionNode node) { StatementType left = AnalyseExpression(node.Left); StatementType right = AnalyseExpression(node.Right); return((left == right && left == StatementType.Numeric) ? StatementType.Numeric : StatementType.Unknown); }
private StatementType Analyze(ArthimetricExpressionNode node) { StatementType left = AnalyseExpression(node.Left); StatementType right = AnalyseExpression(node.Right); return((left == right && left == StatementType.NUMERIC) ? StatementType.NUMERIC : StatementType.UNKNOWN); }
private ExpressionValue ParseArthimeticNode(ArthimetricExpressionNode arthimeticExpressionNode) { ExpressionValue leftExpressionValue = ParseExpressionNode(arthimeticExpressionNode.Left); ExpressionValue rightExpressionValue = ParseExpressionNode(arthimeticExpressionNode.Right); ExpressionOperator expressionOperator = ExpressionOperator.Undefined; switch (arthimeticExpressionNode.Operator) { case ArthimetricOperator.Div: expressionOperator = ExpressionOperator.Divide; break; case ArthimetricOperator.Minus: expressionOperator = ExpressionOperator.Minus; break; case ArthimetricOperator.Plus: expressionOperator = ExpressionOperator.Plus; break; case ArthimetricOperator.Mult: expressionOperator = ExpressionOperator.Multiply; break; default: throw new NotImplementedException(); } return(leftExpressionValue.Combine(rightExpressionValue, expressionOperator)); }
public void ExpressionNodeResultTypeDoubleAndIntTest() { var lhs = new LiteralNode(Location.Empty, "10.0", QValueType.Double); var rhs = new LiteralNode(Location.Empty, "5.0", QValueType.Integer); var expression = new ArthimetricExpressionNode(Location.Empty, lhs, ArthimetricOperator.Mult, rhs); Assert.AreEqual(QValueType.Double, expression.GetQValueType()); }
public void InValidArthimetricComparisonTest() { SymbolTable.Add("blah blah", QValueType.Text); var x = new IdentifierNode(new Location(0, 0), "x"); var five = new LiteralNode(new Location(0, 0), "5", QValueType.Integer); var arthimetricNode = new ArthimetricExpressionNode(new Location(0, 0), x, ArthimetricOperator.Mult, five); var analyser = new StatementTypeAnalyser(); var result = analyser.Analyse(arthimetricNode); Assert.IsFalse(result); }
public void IntAndDoubleMultiplicationTest() { SymbolTable.Add("x", QValueType.Integer); var x = new IdentifierNode(new Location(0, 0), "x"); var five = new LiteralNode(new Location(0, 0), "5.0", QValueType.Double); var arthimetricNode = new ArthimetricExpressionNode(new Location(0, 0), x, ArthimetricOperator.Mult, five); var analyser = new StatementTypeAnalyser(); var result = analyser.Analyse(arthimetricNode); Assert.IsTrue(result); }
public void ValidArthimetricComparisonTest() { SymbolTable.Add("x", QValueType.DOUBLE); var x = new IdentifierNode(new Location(0, 0), "x"); var five = new LiteralNode(new Location(0, 0), "5", QValueType.INTEGER); var arthimetricNode = new ArthimetricExpressionNode(new Location(0, 0), x, ArthimetricOperator.MULT, five); var analyser = new StatementTypeAnalyser(); var result = analyser.Analyse(arthimetricNode); Assert.IsTrue(result); }
private ArthimetricOperator GetArthimeticOperator(QLanguageParser.ArtithmeticExpressionContext context) { if (context.MULT() != null) { return(ArthimetricExpressionNode.ParseArthimeticOperator(context.MULT().GetText())); } if (context.DIV() != null) { return(ArthimetricExpressionNode.ParseArthimeticOperator(context.DIV().GetText())); } if (context.PLUS() != null) { return(ArthimetricExpressionNode.ParseArthimeticOperator(context.PLUS().GetText())); } if (context.MINUS() != null) { return(ArthimetricExpressionNode.ParseArthimeticOperator(context.MINUS().GetText())); } throw new UnknownOperatorException("We don't know what to do here!"); }
public void ParseArthimetricExpressionMinusTest() { var result = ArthimetricExpressionNode.ParseArthimeticOperator("-"); Assert.AreEqual(ArthimetricOperator.MINUS, result); }
public void ParseArthimetricExpressionDivTest() { var result = ArthimetricExpressionNode.ParseArthimeticOperator("/"); Assert.AreEqual(ArthimetricOperator.DIV, result); }
public void ParseArthimetricExpressionMultTest() { var result = ArthimetricExpressionNode.ParseArthimeticOperator("*"); Assert.AreEqual(ArthimetricOperator.MULT, result); }
public void ParseArthimetricExpressionPlusTest() { var result = ArthimetricExpressionNode.ParseArthimeticOperator("+"); Assert.AreEqual(ArthimetricOperator.Plus, result); }