Esempio n. 1
0
        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);
            }
        }
Esempio n. 2
0
 internal Scanner(ScannerMatchMode scannerMatchMode, List <TerminalSymbol> terminals)
 {
     Debug.Assert(terminals != null && terminals.Any(), "At least one terminal symbol is required.");
     _scannerMatchMode = scannerMatchMode;
     _terminals        = terminals;
 }