示例#1
0
        protected override bool InternalMatch(ParserState p)
        {
            if (p == null)
            {
                throw new ArgumentNullException(nameof(p));
            }

            Rule r = Rules[0];

            if (!r.Match(p))
            {
                ParsingException ex = new ParsingException(p.Peek(), r, p);
                throw ex;
            }
            return(true);
        }
示例#2
0
        public ParseNode Parse(Stream stream)
        {
            Rule   parseRule = Grammar.file;
            string text;

            using (TextReader reader = new StreamReader(stream))
            {
                text = reader.ReadToEnd();
            }
            ParserState state = new ParserState(text);

            try
            {
                Succeeded = parseRule.Match(state) && state.AtEndOfInput();
            }
            catch (ParsingException e)
            {
                state.ForceCompletion();
                Succeeded = false;
                Exception = e;
            }

            return(state.GetRoot());
        }