private void WriteGameTree(GameTree gameTree, StreamWriter writer, bool escape) { writer.Write(escape ? "\n(" : "("); this.WriteSequence(gameTree.Sequence, writer); gameTree.Children.ForEach(t => this.WriteGameTree(t, writer, true)); writer.Write(")"); }
private Collection ParseCollection(Lexer lexer) { Collection result; List <GameTree> trees = new List <GameTree>(); GameTree tree = ParseGameTree(lexer); while (tree != null) { trees.Add(tree); tree = ParseGameTree(lexer); } if (trees.Count == 0) { result = null; } else { result = new Collection(trees); } return(result); }
private GameTree ParseGameTree(Lexer lexer) { GameTree result = null; if (lexer.Peek().Type == LexemeType.OpeningBracket) { lexer.Read(); Sequence sequence = ParseSequence(lexer); if (sequence == null) { throw new ArgumentException("Sequence expected"); } else { List <GameTree> trees = new List <GameTree>(); GameTree tree = ParseGameTree(lexer); while (tree != null) { trees.Add(tree); tree = ParseGameTree(lexer); } result = new GameTree(sequence, trees); } if (lexer.Read().Type != LexemeType.ClosingBracket) { throw new ArgumentException("Closing bracket expected"); } return(result); } return(result); }