Example #1
0
        protected List <Operator> Parse(IRunner runner, string data)
        {
            var captures = new List <Capture>();
            var result   = runner.Run(data, captures);

            if (!result.IsSuccessful || result.InputPosition < data.Length)
            {
                throw new PegParsingException($"Parsing error at character {result.InputPosition}. {runner.ExplainResult(result, data)}");
            }

            var iterator = new CaptureIterator <Operator>(data, captures);
            var output   = BuildTree(iterator).ToList();

            if (output.Count <= 0)
            {
                throw new PegParsingException($"Unable to parse PEG: {output}");
            }

            return(output);
        }
Example #2
0
 private IEnumerable <Operator> BuildTree(CaptureIterator <Operator> iterator)
 {
     return(iterator.Iterate(BuildTreeNode));
 }