public override void ParseNode(ref Node node, out TokenWalker.StateWalker walk, TokenWalker walker, ParseResultHistory resultHistory)
        {
            TokenWalker LocalWalker = new TokenWalker(walker);

            TokenWalker.StateWalker localWalk = LocalWalker.State;
            Debug.WriteLine(Parsers.Node.Program.ToStringRecursively(highlighted: this, enableHighlighting: false));

            while (!LocalWalker.IsLast())
            {
                try
                {
                    this.Parser.ParseNode(ref node, out localWalk, LocalWalker, resultHistory);
                }
                catch (Failure)
                {
                    resultHistory.AddResult(new FailedParsingResult(walker.Location, this));
                    throw;
                }
                catch (Success)
                {
                    localWalk(LocalWalker);
                    LocalWalker.SkipWhitespace();
                    continue;
                }
            }
            walk = LocalWalker.State;
            resultHistory.AddResult(new SuccessfulParsingResult(walker.To(localWalk), this));
            throw Succeded;
        }