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); }
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()); }
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); }
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); }
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); }
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; } }
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; }