public void ParseNumExpression() { Parser parser; NVNumExpression expr = (NVNumExpression)GetExpressionFromTemplate("100", out parser); // Check that the value of the expression is '100' Assert.AreEqual(100, expr.Value); AssertNoErrors(parser); }
public void ParseReferenceWithOneActualParam() { Parser parser = GetNewParser("$first.second(100)"); TemplateNode templateNode = parser.ParseTemplate(); // NVReference with 1 selector and 1 actual param NVReference nvReference = (NVReference)templateNode.Content[0]; Assert.AreEqual(1, nvReference.Designator.Selectors.Count); NVSelector nvSelector = nvReference.Designator.Selectors[0]; Assert.AreEqual(1, nvSelector.Actuals.Count); Assert.AreEqual(typeof(NVNumExpression), nvSelector.Actuals[0].GetType()); NVNumExpression numExpr = (NVNumExpression)nvSelector.Actuals[0]; Assert.AreEqual(100, numExpr.Value); }
private NVExpression ParseNVPrimary() { // NVPrimary -> NVReference // -> "(" NVExpression ")" // -> "true" // -> "false" // -> nvIntegerLiteral // -> "'" nvStringLiteral "'" // -> "\"" NVStringLiteralOrDictionary "\"" // -> "[" [ NVExpression NVRangeOrArray ] "]". NVExpression expr = null; if (CurrentTokenType == TokenType.NVDollar) { //TODO: Change to ParseNVDesignatorExpression ParseNVReference(); expr = new NVBoolExpression(false); expr.Position = new Position(GetCurrentTokenPosition()); } else if (CurrentTokenType == TokenType.NVLParen) { _scanner.GetToken(); expr = ParseNVExpression(); MatchToken(TokenType.NVRParen); } else if (CurrentTokenType == TokenType.NVTrue) { expr = new NVBoolExpression(true); expr.Position = new Position(GetCurrentTokenPosition()); _scanner.GetToken(); } else if (CurrentTokenType == TokenType.NVFalse) { expr = new NVBoolExpression(false); expr.Position = new Position(GetCurrentTokenPosition()); _scanner.GetToken(); } else if (CurrentTokenType == TokenType.NVIntegerLiteral) { expr = new NVNumExpression(int.Parse(_scanner.CurrentToken.Image)); expr.Position = new Position(GetCurrentTokenPosition()); _scanner.GetToken(); } else if (CurrentTokenType == TokenType.NVSingleQuote) { _scanner.GetToken(); if (CurrentTokenType == TokenType.NVStringLiteral) { expr = new NVStringExpression(_scanner.CurrentToken.Image); expr.Position = new Position(GetCurrentTokenPosition()); _scanner.GetToken(); } if (CurrentTokenType == TokenType.NVSingleQuote) { _scanner.GetToken(); } else { AddError("Expected single quote for closing string literal"); } } else if (CurrentTokenType == TokenType.NVDoubleQuote) { _scanner.GetToken(); expr = ParseNVStringLiteralOrDictionary(); MatchToken(TokenType.NVDoubleQuote); } else if (CurrentTokenType == TokenType.NVLBrack) { _scanner.GetToken(); if (CurrentTokenType != TokenType.NVRBrack) { ParseNVExpression(); expr = ParseNVRangeOrArray(); } else { //TODO: replace with an empty NVArrayExpression expr = new NVBoolExpression(false); expr.Position = new Position(GetCurrentTokenPosition()); } MatchToken(TokenType.NVRBrack); } else { AddError(string.Format("Expected expression, was '{0}'", CurrentTokenType)); } return expr; }
private NVExpression ParseNVPrimary() { // NVPrimary -> NVReference // -> "(" NVExpression ")" // -> "true" // -> "false" // -> nvIntegerLiteral // -> "'" nvStringLiteral "'" // -> "\"" NVStringLiteralOrDictionary "\"" // -> "[" [ NVExpression NVRangeOrArray ] "]". NVExpression expr = null; if (CurrentTokenType == TokenType.NVDollar) { //TODO: Change to ParseNVDesignatorExpression ParseNVReference(); expr = new NVBoolExpression(false); expr.Position = new Position(GetCurrentTokenPosition()); } else if (CurrentTokenType == TokenType.NVLParen) { _scanner.GetToken(); expr = ParseNVExpression(); MatchToken(TokenType.NVRParen); } else if (CurrentTokenType == TokenType.NVTrue) { expr = new NVBoolExpression(true); expr.Position = new Position(GetCurrentTokenPosition()); _scanner.GetToken(); } else if (CurrentTokenType == TokenType.NVFalse) { expr = new NVBoolExpression(false); expr.Position = new Position(GetCurrentTokenPosition()); _scanner.GetToken(); } else if (CurrentTokenType == TokenType.NVIntegerLiteral) { expr = new NVNumExpression(int.Parse(_scanner.CurrentToken.Image)); expr.Position = new Position(GetCurrentTokenPosition()); _scanner.GetToken(); } else if (CurrentTokenType == TokenType.NVSingleQuote) { _scanner.GetToken(); if (CurrentTokenType == TokenType.NVStringLiteral) { expr = new NVStringExpression(_scanner.CurrentToken.Image); expr.Position = new Position(GetCurrentTokenPosition()); _scanner.GetToken(); } if (CurrentTokenType == TokenType.NVSingleQuote) { _scanner.GetToken(); } else { AddError("Expected single quote for closing string literal"); } } else if (CurrentTokenType == TokenType.NVDoubleQuote) { _scanner.GetToken(); expr = ParseNVStringLiteralOrDictionary(); MatchToken(TokenType.NVDoubleQuote); } else if (CurrentTokenType == TokenType.NVLBrack) { _scanner.GetToken(); if (CurrentTokenType != TokenType.NVRBrack) { ParseNVExpression(); expr = ParseNVRangeOrArray(); } else { //TODO: replace with an empty NVArrayExpression expr = new NVBoolExpression(false); expr.Position = new Position(GetCurrentTokenPosition()); } MatchToken(TokenType.NVRBrack); } else { AddError(string.Format("Expected expression, was '{0}'", CurrentTokenType)); } return(expr); }