/// <summary>
 /// Initializes a new instance of the <see cref="LibPreprocessor"/> class.
 /// </summary>
 /// <param name="fileReader">File reader.</param>
 /// <param name="tokenProviderPool">Token provider.</param>
 /// <param name="spiceNetlistParser">Single spice netlist parser.</param>
 /// <param name="includesPreprocessor">Includes preprocessor.</param>
 /// <param name="initialDirectoryPathProvider">Initial directory path provider.</param>
 /// <param name="readerSettings">Reader settings.</param>
 /// <param name="lexerSettings">Lexer settings.</param>
 public LibPreprocessor(
     IFileReader fileReader,
     ISpiceTokenProviderPool tokenProviderPool,
     ISingleSpiceNetlistParser spiceNetlistParser,
     IProcessor includesPreprocessor,
     Func <string> initialDirectoryPathProvider,
     SpiceNetlistReaderSettings readerSettings,
     SpiceLexerSettings lexerSettings)
 {
     ReaderSettings               = readerSettings ?? throw new ArgumentNullException(nameof(readerSettings));
     TokenProviderPool            = tokenProviderPool ?? throw new ArgumentNullException(nameof(tokenProviderPool));
     IncludesPreprocessor         = includesPreprocessor ?? throw new ArgumentNullException(nameof(includesPreprocessor));
     SpiceNetlistParser           = spiceNetlistParser ?? throw new ArgumentNullException(nameof(spiceNetlistParser));
     FileReader                   = fileReader ?? throw new ArgumentNullException(nameof(fileReader));
     InitialDirectoryPathProvider = initialDirectoryPathProvider ?? throw new ArgumentNullException(nameof(initialDirectoryPathProvider));
     LexerSettings                = lexerSettings ?? throw new ArgumentNullException(nameof(lexerSettings));
 }
 public SpiceParserSettings()
 {
     Lexing  = new SpiceLexerSettings();
     Parsing = new SingleSpiceNetlistParserSettings(Lexing);
     Reading = new SpiceNetlistReaderSettings(new SpiceNetlistCaseSensitivitySettings(Lexing), () => WorkingDirectory);
 }