Exemple #1
0
        /// <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>();
        }