Ejemplo n.º 1
0
 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(")");
 }
Ejemplo n.º 2
0
        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);
        }
Ejemplo n.º 3
0
        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);
        }