Пример #1
0
        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);
        }
Пример #2
0
        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);
        }
Пример #3
0
        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;
        }
Пример #4
0
        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);
        }