Пример #1
0
        public ISpiceTokenProvider GetSpiceTokenProvider(SpiceLexerSettings settings)
        {
            if (settings == null)
            {
                throw new ArgumentNullException(nameof(settings));
            }

            string key = settings.HasTitle + "_" + settings.IsDotStatementNameCaseSensitive;

            _cacheLock.EnterUpgradeableReadLock();
            try
            {
                if (!_providers.ContainsKey(key))
                {
                    _cacheLock.EnterWriteLock();
                    try
                    {
                        var provider = new SpiceTokenProvider(settings.HasTitle, settings.IsDotStatementNameCaseSensitive, settings.EnableBusSyntax);
                        _providers[key] = provider;
                        return(provider);
                    }
                    finally
                    {
                        _cacheLock.ExitWriteLock();
                    }
                }
                else
                {
                    return(_providers[key]);
                }
            }
            finally
            {
                _cacheLock.ExitUpgradeableReadLock();
            }
        }
Пример #2
0
 /// <summary>
 /// Initializes a new instance of the <see cref="SpiceLexer"/> class.
 /// </summary>
 /// <param name="options">options for lexer.</param>
 public SpiceLexer(SpiceLexerSettings options)
 {
     _options = options ?? throw new ArgumentNullException(nameof(options));
     BuildGrammar();
 }