Example #1
0
 public IEnumerable <Token> AcceptEndOfStream()
 {
     if (_state != EState.Start)
     {
         EState nextState;
         EState oldState = _state;
         if (DefaultTransitionTable.TryGetValue(_state, out nextState))
         {
             _state = nextState;
             Token token;
             if (InterpretAcceptState(out token))
             {
                 yield return(token);
             }
             else
             {
                 throw new TokenizerException(string.Format("Internal error: DefaultTransitionTable[{0}] gave {1} but InterpretAcceptState returns false.", oldState, _state));
             }
         }
         else
         {
             throw new TokenizerException(string.Format("Unexpected end of stream in state {0}", _state));
         }
     }
 }
Example #2
0
            public IEnumerable <Token> Accept(char symbol)
            {
                EState nextState;

                if (TransitionTable.TryGetValue(Tuple.Create(_state, Categorize(symbol)), out nextState))
                {
                    _state = nextState;
                    if (_state != EState.Start)
                    {
                        _buffer.Append(symbol);
                        Token token;
                        if (InterpretAcceptState(out token))
                        {
                            yield return(token);
                        }
                    }
                }
                else if (DefaultTransitionTable.TryGetValue(_state, out nextState))
                {
                    _state = nextState;
                    Token token;
                    if (InterpretAcceptState(out token))
                    {
                        yield return(token);
                    }

                    //Don't consume the symbol, run the symbol again.
                    foreach (var t in Accept(symbol))
                    {
                        yield return(t);
                    }
                }
                else
                {
                    throw new TokenizerException(string.Format("Unexpected symbol '{0}' in state {1}", symbol, _state));
                }
            }