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