protected override TOut ParseMain(IO.Scanners.IScanner <TIn> scanner, out Match <TIn> match) { Match <TIn> latestMatch; match = new Match <TIn>(scanner); startParser.Parse(scanner, out latestMatch); match += latestMatch; if (!match.Success) { return(default(TOut)); } TOut result = valueParser.Parse(scanner, out latestMatch); match += latestMatch; if (!match.Success) { return(default(TOut)); } endParser.Parse(scanner, out latestMatch); match += latestMatch; if (!match.Success) { return(default(TOut)); } return(result); }
protected override TOut ParseMain(IO.Scanners.IScanner <TIn> scanner, out Match <TIn> match) { match = new Match <TIn>(scanner, 0); Match <TIn> latestMatch; toRepeat.Parse(scanner, out latestMatch); if (!latestMatch.Success) { match = latestMatch; } else { while (true) { toRepeat.Parse(scanner, out latestMatch); if (latestMatch.Success) { match += latestMatch; } else { break; } } } return(default(TOut)); }
protected override TOut ParseMain(IO.Scanners.IScanner <TIn> scanner, out Match <TIn> match) { var result = parser.Parse(scanner, out match); if (!match.Success) { result = defaultVat; match = new Match <TIn>(scanner, 0); } return(result); }
protected override T ParseMain(IO.Scanners.IScanner <T> scanner, out Match <T> match) { T result = scanner.Current; if (!item.Equals(result)) { match = new Match <T>(scanner, "Expected {0}, got {1}", item, result); return(default(T)); } match = new Match <T>(scanner, 1); scanner.MoveNext(); return(result); }
protected override TOut ParseMain(IO.Scanners.IScanner <TIn> scanner, out Match <TIn> match) { foreach (var item in options) { var result = item.Parse(scanner, out match); if (match.Success) { return(result); } } match = new Match <TIn>(scanner, "No match"); return(default(TOut)); }
protected override TOut ParseMain(IO.Scanners.IScanner <TIn> scanner, out Match <TIn> match) { TOut result = parser.Parse(scanner, out match); if (!match.Success) { match = new Match <TIn>(scanner, result == null ? "Expected {0}" : "Expected {0}, got {1}", name, result); result = default(TOut); } return(result); }
protected override char ParseMain(IO.Scanners.IScanner <char> scanner, out Match <char> match) { char c = scanner.Current; if (c == character) { match = new Match <char>(scanner, 1); scanner.MoveNext(); return(c); } else { match = new Match <char>(scanner, "Expected {0}, got {1}", character, c); return('\0'); } }
protected override T ParseMain(IO.Scanners.IScanner <T> scanner, out Match <T> match) { T val = scanner.Current; if (validValues.Contains(val)) { match = new Match <T>(scanner, 1); scanner.MoveNext(); } else { match = new Match <T>(scanner, "Invalid value {0}", val); val = default(T); } return(val); }
protected override TOut ParseMain(IO.Scanners.IScanner <TIn> scanner, out Match <TIn> match) { TMiddle middle = parser.Parse(scanner, out match); return(match.Success ? converter(middle) : default(TOut)); }