Exemplo n.º 1
0
        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);
        }
Exemplo n.º 2
0
        public ParseResult Parse(StringIterator InputStream)
        {
            var r = ImplementParse(InputStream);

            if (r.ResultType == ResultType.Success)
            {
                r.Node = AstMutator(r.Node);
            }
            return(r);
        }
Exemplo n.º 3
0
        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);
            }
        }
Exemplo n.º 4
0
        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);
        }
Exemplo n.º 5
0
        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);
        }
Exemplo n.º 6
0
 protected abstract ParseResult ImplementParse(StringIterator InputStream);
Exemplo n.º 7
0
        public static ParseResult ParseString(Parser Root, String S)
        {
            var iter = new StringIterator(S);

            return(Root.Parse(iter));
        }