Exemple #1
0
        public override Water.Statement Next()
        {
            if (Water.Environment.IsConstant("_Exit") || Water.Environment.IsConstant("_Restart"))
            {
                return(null);
            }

            while (true)
            {
                System.Console.WriteLine();
                System.Console.Write(">");

                string s = System.Console.ReadLine();
                if (s.Length > 0)
                {
                    wave.ConsoleReader    reader    = new wave.ConsoleReader(s);
                    Water.StatementParser parser    = new Water.StatementParser(reader);
                    Water.Statement       statement = parser.Parse();
                    if (statement != null)
                    {
                        return(statement);
                    }
                }
            }
        }
Exemple #2
0
        private static void PrintStatementStack(Water.List statements, System.IO.TextWriter output)
        {
            output.WriteLine();
            output.WriteLine("[STACK_TRACE]");

            if (statements.Count > 0)
            {
                for (int j = 0; j < statements.Count; j++)
                {
                    output.WriteLine();

                    Water.Statement statement = (Water.Statement)statements[j];

                    if (statement != null && statement.File != null)
                    {
                        output.Write("[" + new System.IO.FileInfo((string)statement.File).Name + " (" + statement.Line + "," + statement.Column + ")]");
                        output.Write("   ");
                    }

                    if (Water.StatementParser.GetBlock(statement.Expression) != null)
                    {
                        output.Write(Water.Generator.Generate(statement.Expression.NotLast()));
                    }
                    else
                    {
                        output.Write(Water.Generator.Generate(statement.Expression));
                    }

                    output.WriteLine();
                }
            }

            output.WriteLine();
        }
Exemple #3
0
        public static Water.Statement Parse(string s)
        {
            System.IO.StringReader reader          = new System.IO.StringReader(s);
            StatementParser        statementParser = new StatementParser(reader);

            Water.Statement value = statementParser.Parse();
            reader.Close();
            return(value);
        }
Exemple #4
0
 public override Statement Next()
 {
     if (this._allowBreaks && Water.Environment.Break)
     {
         return(null);
     }
     if (Water.Environment.Return)
     {
         return(null);
     }
     if (this._position == this._statements.Count)
     {
         return(null);
     }
     Water.Statement statement = (Water.Statement) this._statements[this._position];
     this._position++;
     return(statement);
 }
Exemple #5
0
        private Water.List ParseBlockStatements(Water.TextReader reader, string name, string end, bool allowRecursion, Water.Statement start_statement)
        {
            Water.List block_statements = new Water.List();

            while (reader.Peek() != -1)
            {
                Water.Parser.TrimWhitespace(reader);

                Water.Statement statement = ParseStatement(reader);
                if (statement != null)
                {
                    if (statement.Expression.Count == 1 && statement.Expression[0].ToString().Equals(end))
                    {
                        return(block_statements);
                    }

                    block_statements.Add(statement);
                }
            }

//TODO DELETE			Water.Environment.Set("_Statement", start_statement);
            throw new Water.Error("\"" + end + "\" expected.");
        }
Exemple #6
0
        private Water.Statement ParseStatement(Water.TextReader reader)
        {
            Water.Parser.TrimWhitespace(reader);

            if (reader.Peek() == -1)
            {
                return(null);
            }

            char ch = (char)reader.Peek();

            if (ch == ';')
            {
                Water.Parser.ParseComment(reader);

                // Try it again.
                return(ParseStatement(reader));
            }

            string file   = reader.Filename;
            int    line   = reader.LineNumber;
            int    column = reader.ColumnNumber;

            Water.List expressions = new Water.List();

            while (reader.Peek() != -1)
            {
                if (Water.Parser.IsNewline(reader))
                {
//TODO DELETE					Water.Parser.TrimNewline(reader);
                    break;
                }

                if (Water.Parser.IsComment(reader))
                {
                    Water.Parser.ParseComment(reader);
                    break;
                }

                expressions.Add(Water.Parser.ParseExpression(reader));

                Water.Parser.TrimSpace(reader);
            }

            if (expressions.Count == 0)
            {
                // Try it again.
                return(ParseStatement(reader));
            }

            Water.Blocks.Block block = GetBlock(expressions);
            if (block != null)
            {
                Water.Statement statement = new Water.Statement(file, line, column, expressions);

                expressions.Add(
                    ParseBlockStatements(
                        reader,
                        block.Name,
                        "end_" + block.Name,
                        block.IsRecursive,
                        statement));

                return(statement);
            }

            return(new Water.Statement(file, line, column, expressions));
        }