/// <summary> /// Initializes a new instance of the <see cref="Lexer"/> class. /// </summary> /// <param name="tokenizer">The <see cref="ITokenizer" /> object used to read the tokens from the input template.</param> /// <param name="expressionFlowSymbols">The <see cref="ExpressionFlowSymbols" /> object containing the standard expression flow control symbols.</param> /// <param name="comparer">The <see cref="System.Collections.Generic.IEqualityComparer{String}" /> object used to match keywords and identifiers.</param> /// <exception cref="System.ArgumentNullException">Either <paramref name="tokenizer" />, <paramref name="expressionFlowSymbols" /> or <paramref name="expressionFlowSymbols" /> are <c>null</c>.</exception> public Lexer( [NotNull] ITokenizer tokenizer, [NotNull] ExpressionFlowSymbols expressionFlowSymbols, [NotNull] IEqualityComparer <string> comparer) { Expect.NotNull(nameof(tokenizer), tokenizer); Expect.NotNull(nameof(comparer), comparer); Expect.NotNull(nameof(expressionFlowSymbols), expressionFlowSymbols); Tokenizer = tokenizer; Comparer = comparer; _registeredTags = new List <Tag>(); _expressionOperators = new List <Operator>(); _unaryExpressionOperators = new HashSet <string>(comparer); _binaryExpressionOperators = new HashSet <string>(comparer); _specialConstants = new Dictionary <string, object>(comparer); _expressionFlowSymbols = expressionFlowSymbols; /* Register the flow symbols in */ _binaryExpressionOperators.Add(expressionFlowSymbols.Separator); _binaryExpressionOperators.Add(expressionFlowSymbols.MemberAccess); _unaryExpressionOperators.Add(expressionFlowSymbols.GroupOpen); _binaryExpressionOperators.Add(expressionFlowSymbols.GroupClose); }
public void TestCaseConstruction3() { var flowSymbols = new ExpressionFlowSymbols("A", "B", "C", "D"); Assert.AreEqual("A", flowSymbols.Separator); Assert.AreEqual("B", flowSymbols.MemberAccess); Assert.AreEqual("C", flowSymbols.GroupOpen); Assert.AreEqual("D", flowSymbols.GroupClose); }
/// <summary> /// Initializes a new instance of the <see cref="Interpreter"/> class. /// </summary> /// <param name="tokenizer">The <c>tokenizer</c> instance.</param> /// <param name="expressionFlowSymbols">The expression flow symbols.</param> /// <param name="comparer">The keyword and identifier comparer.</param> /// <exception cref="ArgumentNullException">Argument <paramref name="tokenizer"/> or <paramref name="expressionFlowSymbols"/> or <paramref name="comparer"/> is <c>null</c>.</exception> public Interpreter( [NotNull] ITokenizer tokenizer, [NotNull] ExpressionFlowSymbols expressionFlowSymbols, [NotNull] IEqualityComparer <string> comparer) { Expect.NotNull(nameof(tokenizer), tokenizer); Expect.NotNull(nameof(comparer), comparer); Expect.NotNull(nameof(expressionFlowSymbols), expressionFlowSymbols); _lexer = new Lexer(tokenizer, expressionFlowSymbols, comparer); _registeredDirectives = new List <Directive>(); }