Beispiel #1
0
        public ParserResult Parse(ProgressiveList <Token> tokens)
        {
            var result = new ParserResult();

            var values = new ParserValues();

            BeginValues(values);
begin:
            foreach (var p in parsers)
            {
                var parser = (MainParser)p.Value;
                int state  = tokens.GetState();
                if (parser.Match(tokens))
                {
                    parser.Work(tokens, result);
                    result.Include(parser.GetResult());
                    goto begin;
                }
                else
                {
                    tokens.RestoreState(state);
                }
                values.Clear();
            }
            EndValues();

            return(result);
        }
Beispiel #2
0
 public static void EndValues() => values = null;
Beispiel #3
0
 public static void BeginValues(ParserValues _values)
 {
     values = _values;
 }