public SimpleGrammar(ScannerMatchMode scannerMatchMode, List <TerminalSymbol> terminals, List <ProductionRule> rules) { Validation.Requires <ArgumentNullException>(() => terminals != null, $"{nameof(terminals)} is required."); Validation.Requires <ArgumentException>(() => terminals.Any(), $"{nameof(terminals)} cannot be empty."); Validation.Requires <ArgumentNullException>(() => rules != null, $"{nameof(rules)} is required."); Validation.Requires <ArgumentException>(() => rules.Any(), $"{nameof(rules)} cannot be empty."); ScannerMatchMode = scannerMatchMode; TerminalSymbols = terminals; ProductionRules = rules; string failReason; if (!CheckGrammar(out failReason)) { throw new InvalidOperationException(failReason); } }
internal Scanner(ScannerMatchMode scannerMatchMode, List <TerminalSymbol> terminals) { Debug.Assert(terminals != null && terminals.Any(), "At least one terminal symbol is required."); _scannerMatchMode = scannerMatchMode; _terminals = terminals; }