public AstNode TestParse(String t) { Console.WriteLine(t); var itr = new Ancora.StringIterator(t); // Todo: Unify iterator types var r = Root.Parse(itr); if (r.ResultType == Ancora.ResultType.Success && !r.StreamState.AtEnd && r.FailReason == null) { Console.WriteLine("Did not consume all input."); } if (r.ResultType == Ancora.ResultType.Success && r.StreamState.AtEnd) { Console.WriteLine("Parsed."); EmitAst(r.Node); } else { Console.WriteLine("Failed."); if (r.FailReason != null) { Console.WriteLine(r.FailReason.Message); } else { Console.WriteLine("No fail reason specified."); } } return(r.Node); }
public ParseResult Parse(StringIterator InputStream) { var r = ImplementParse(InputStream); if (r.ResultType == ResultType.Success) { r.Node = AstMutator(r.Node); } return(r); }
public static int RollDice(String Dice) { var itr = new Ancora.StringIterator(Dice); var r = DiceGrammar.Root.Parse(itr); if (r.ResultType == Ancora.ResultType.Success) { return(DiceGrammar.CalculateDieRoll(r.Node, Core.Random)); } else { return(1); } }
public ParseResult Parse(StringIterator InputStream) { if ((Flags & ParserFlags.IGNORE_LEADING_WHITESPACE) == ParserFlags.IGNORE_LEADING_WHITESPACE) { InputStream = Parser.WhitespaceParser.Parse(InputStream).StreamState; } var r = ImplementParse(InputStream); if (r.ResultType == ResultType.Success && (Flags & ParserFlags.IGNORE_TRAILING_WHITESPACE) == ParserFlags.IGNORE_TRAILING_WHITESPACE) { r.StreamState = Parser.WhitespaceParser.Parse(r.StreamState).StreamState; } return(r); }
public static string CollapseEscapeSequences(string value) { var r = ""; var itr = new StringIterator(value); bool escaping = false; while (!itr.AtEnd) { if (escaping) { if (itr.Next == 'n') { r += '\n'; } else if (itr.Next == 'r') { r += '\r'; } else if (itr.Next == 't') { r += '\t'; } else { r += itr.Next; } itr = itr.Advance(); escaping = false; } else if (itr.Next == '\\') { escaping = true; itr = itr.Advance(); } else { r += itr.Next; itr = itr.Advance(); } } return(r); }
protected abstract ParseResult ImplementParse(StringIterator InputStream);
public static ParseResult ParseString(Parser Root, String S) { var iter = new StringIterator(S); return(Root.Parse(iter)); }