Ejemplo n.º 1
0
        public void Visit(Ast.TupleNode tuple)
        {
            object[] array = new object[tuple.Elements.Count];
            int      index = 0;

            foreach (Ast.INode node in tuple.Elements)
            {
                node.Accept(this);
                array[index++] = generated.Pop();
            }
            generated.Push(array);
        }
Ejemplo n.º 2
0
 public void Visit(Ast.TupleNode tuple)
 {
     result.AppendLine("(tuple");
     indent++;
     foreach (Ast.INode node in tuple.Elements)
     {
         Indent();
         node.Accept(this);
         result.AppendLine(",");
     }
     indent--;
     Indent();
     result.Append(")");
 }
Ejemplo n.º 3
0
        Ast.TupleNode ParseTuple(SeekableStringReader sr)
        {
            //tuple           = tuple_empty | tuple_one | tuple_more
            //tuple_empty     = '()' .
            //tuple_one       = '(' expr ',' <whitespace> ')' .
            //tuple_more      = '(' expr_list ')' .

            sr.Read();                  // (
            sr.SkipWhitespace();
            Ast.TupleNode tuple = new Ast.TupleNode();
            if (sr.Peek() == ')')
            {
                sr.Read();
                return(tuple);                          // empty tuple
            }

            Ast.INode firstelement = ParseExpr(sr);
            if (sr.Peek() == ',')
            {
                sr.Read();
                sr.SkipWhitespace();
                if (sr.Read() == ')')
                {
                    // tuple with just a single element
                    tuple.Elements.Add(firstelement);
                    return(tuple);
                }
                sr.Rewind(1);                   // undo the thing that wasn't a )
            }

            tuple.Elements = ParseExprList(sr);
            tuple.Elements.Insert(0, firstelement);
            if (!sr.HasMore())
            {
                throw new ParseException("missing ')'");
            }
            char closechar = sr.Read();

            if (closechar == ',')
            {
                closechar = sr.Read();
            }
            if (closechar != ')')
            {
                throw new ParseException("expected ')'");
            }
            return(tuple);
        }