Exemple #1
0
        public ScopeBuilder(IProcessorState processor, ITokenTrie tokens, IOperatorMap <TOperator, TToken> operatorMap, bool dereferenceInLiterals)
        {
            TokenTrie trie = new TokenTrie();

            trie.Append(tokens);

            _badSyntaxTokens = operatorMap.BadSyntaxTokens;
            _noops           = operatorMap.NoOpTokens;
            _openGroup       = operatorMap.OpenGroupToken;
            _closeGroup      = operatorMap.CloseGroupToken;
            _literal         = operatorMap.LiteralToken;
            _identity        = operatorMap.Identity;
            _literalSequenceBoundsMarkers = operatorMap.LiteralSequenceBoundsMarkers;
            _terminators = operatorMap.Terminators;
            _isSymbolDereferenceInLiteralSequenceRequired = dereferenceInLiterals;
            _processor        = processor;
            _knownTokensCount = tokens.Count;
            _valueEncoder     = operatorMap.Encode;
            _valueDecoder     = operatorMap.Decode;

            List <object> symbolValues = new List <object>();

            foreach (KeyValuePair <string, object> variable in processor.Config.Variables)
            {
                trie.AddToken(processor.Encoding.GetBytes(string.Format(processor.Config.VariableFormatString, variable.Key)));
                symbolValues.Add(variable.Value);
            }

            _symbolValues         = symbolValues;
            _tokenToOperatorMap   = operatorMap.TokensToOperatorsMap;
            _operatorScopeFactory = operatorMap.OperatorScopeLookupFactory;
            _tokens = trie;
        }
 public static ScopeBuilder <TOperator, TToken> ScopeBuilder <TOperator, TToken>(this IProcessorState processor, ITokenTrie tokens, IOperatorMap <TOperator, TToken> operatorMap, bool dereferenceInLiterals = false)
     where TOperator : struct
     where TToken : struct
 {
     return(new ScopeBuilder <TOperator, TToken>(processor, tokens, operatorMap, dereferenceInLiterals));
 }