Exemplo n.º 1
0
        protected virtual IAbstractDirective ProcessImportDirective(DothtmlDirectiveNode directiveNode)
        {
            var tokenizer = new BindingTokenizer();

            tokenizer.Tokenize(directiveNode.ValueNode.Text);
            var parser = new BindingParser()
            {
                Tokens = tokenizer.Tokens
            };
            var valueSyntaxRoot = parser.ReadDirectiveValue();

            if (!parser.OnEnd())
            {
                directiveNode.AddError($"Unexpected token: {parser.Peek()?.Text}.");
            }

            BindingParserNode alias = null;
            BindingParserNode name  = null;

            if (valueSyntaxRoot is BinaryOperatorBindingParserNode)
            {
                var assigment = valueSyntaxRoot.CastTo <BinaryOperatorBindingParserNode>();

                alias = assigment.FirstExpression;
                name  = assigment.SecondExpression;
            }
            else
            {
                name = valueSyntaxRoot;
            }

            return(treeBuilder.BuildImportDirective(directiveNode, alias, name));
        }
        public BindingParser SetupParser(string expression)
        {
            var tokenizer = new BindingTokenizer();

            tokenizer.Tokenize(expression);
            var parser = new BindingParser();

            parser.Tokens = tokenizer.Tokens;
            return(parser);
        }
Exemplo n.º 3
0
        private static BindingParserNode Parse(string expression)
        {
            var tokenizer = new BindingTokenizer();

            tokenizer.Tokenize(new StringReader(expression));
            var parser = new BindingParser();

            parser.Tokens = tokenizer.Tokens;
            return(parser.ReadExpression());
        }
Exemplo n.º 4
0
        protected virtual BindingParserNode ParseDirectiveTypeName(DothtmlDirectiveNode directiveNode)
        {
            var tokenizer = new BindingTokenizer();

            tokenizer.Tokenize(directiveNode.ValueNode.Text);
            var parser = new BindingParser()
            {
                Tokens = tokenizer.Tokens
            };
            var valueSyntaxRoot = parser.ReadDirectiveTypeName();

            if (!parser.OnEnd())
            {
                directiveNode.AddError($"Unexpected token: {parser.Peek()?.Text}.");
            }
            return(valueSyntaxRoot);
        }
Exemplo n.º 5
0
        public Expression Parse(string expression, DataContextStack dataContexts, BindingParserOptions options, params KeyValuePair <string, Expression>[] additionalSymbols)
        {
            try
            {
                var tokenizer = new BindingTokenizer();
                tokenizer.Tokenize(expression);

                var parser = new BindingParser();
                parser.Tokens = tokenizer.Tokens;
                var node = parser.ReadExpression();
                if (!parser.OnEnd())
                {
                    throw new BindingCompilationException(
                              $"Unexpected token '{expression.Substring(0, parser.Peek().StartPosition)} ---->{parser.Peek().Text}<---- {expression.Substring(parser.Peek().EndPosition)}'",
                              null, new TokenBase[] { parser.Peek() });
                }
                foreach (var n in node.EnumerateNodes())
                {
                    if (n.HasNodeErrors)
                    {
                        throw new BindingCompilationException(string.Join(", ", n.NodeErrors), n);
                    }
                }

                var symbols = InitSymbols(dataContexts);
                symbols = options.AddImportedTypes(symbols, compiledAssemblyCache);
                symbols = symbols.AddSymbols(options.ExtensionParameters.Select(p => CreateParameter(dataContexts, p.Identifier, p)));
                symbols = symbols.AddSymbols(additionalSymbols);

                var visitor = new ExpressionBuildingVisitor(symbols);
                visitor.Scope = symbols.Resolve(options.ScopeParameter);
                return(visitor.Visit(node));
            }
            catch (Exception ex)
            {
                ex.ForInnerExceptions <BindingCompilationException>(bce =>
                {
                    if (bce.Expression == null)
                    {
                        bce.Expression = expression;
                    }
                });
                throw;
            }
        }
        protected BindingParserNode ParseImportDirectiveValue(DothtmlDirectiveNode directiveNode)
        {
            var tokenizer = new BindingTokenizer();

            tokenizer.Tokenize(directiveNode.ValueNode.Text);
            var parser = new BindingParser()
            {
                Tokens = tokenizer.Tokens
            };
            var result = parser.ReadDirectiveValue();

            if (!parser.OnEnd())
            {
                directiveNode.AddError($"Unexpected token: {parser.Peek()?.Text}.");
            }

            return(result);
        }
Exemplo n.º 7
0
        private static List <BindingToken> Tokenize(string expression)
        {
            // tokenize
            var tokenizer = new BindingTokenizer();

            tokenizer.Tokenize(expression);
            var tokens = tokenizer.Tokens;

            // ensure that whole input was tokenized and that there are no holes
            var position = 0;

            foreach (var token in tokens)
            {
                Assert.AreEqual(position, token.StartPosition);
                position += token.Length;
            }
            Assert.AreEqual(position, expression.Length);

            return(tokens);
        }
Exemplo n.º 8
0
        public Expression Parse(string expression, DataContextStack dataContexts, BindingParserOptions options)
        {
            try
            {
                var tokenizer = new BindingTokenizer();
                tokenizer.Tokenize(new StringReader(expression));

                var parser = new BindingParser();
                parser.Tokens = tokenizer.Tokens;
                var node = parser.ReadExpression();
                if (!parser.OnEnd())
                {
                    throw new BindingCompilationException(
                        $"Unexpected token '{expression.Substring(0, parser.Peek().StartPosition)} ---->{parser.Peek().Text}<---- {expression.Substring(parser.Peek().StartPosition + parser.Peek().Length)}'",
                        null, new TokenBase[] { parser.Peek() });
                }
                foreach (var n in node.EnumerateNodes())
                {
                    if (n.HasNodeErrors) throw new BindingCompilationException(string.Join(", ", n.NodeErrors), n);
                }

                var symbols = InitSymbols(dataContexts);
                symbols = options.AddTypes(symbols);

                var visitor = new ExpressionBuildingVisitor(symbols);
                visitor.Scope = symbols.Resolve(options.ScopeParameter);
                return visitor.Visit(node);
            }
            catch (Exception ex)
            {
                ex.ForInnerExceptions<BindingCompilationException>(bce =>
                {
                    if (bce.Expression == null) bce.Expression = expression;
                });
                throw;
            }
        }
Exemplo n.º 9
0
        private static List<BindingToken> Tokenize(string expression)
        {
            // tokenize
            var tokenizer = new BindingTokenizer();
            tokenizer.Tokenize(new StringReader(expression));
            var tokens = tokenizer.Tokens;

            // ensure that whole input was tokenized and that there are no holes
            var position = 0;
            foreach (var token in tokens)
            {
                Assert.AreEqual(position, token.StartPosition);
                position += token.Length;
            }
            Assert.AreEqual(position, expression.Length);

            return tokens;
        }