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); } } } }
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(); }
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); }
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); }
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."); }
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)); }