Example #1
0
        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));
        }
Example #3
0
        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);
        }
Example #4
0
        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);
        }
Example #5
0
 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));
 }
Example #6
0
        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);
        }
Example #7
0
        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');
            }
        }
Example #8
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);
        }
Example #9
0
        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));
        }