private void State_Start() { AdvanceOverWhitespace(); if (IsAtEndOfInput) { _token = XamlTypeNameLexerToken.NONE; } else { switch (CurrentChar) { case '(': _token = XamlTypeNameLexerToken.ROUND_BRACKET_OPEN; break; case ')': _token = XamlTypeNameLexerToken.ROUND_BRACKET_CLOSE; break; case '[': _token = XamlTypeNameLexerToken.SQUARE_BRACKET_OPEN; break; case ']': _token = XamlTypeNameLexerToken.SQUARE_BRACKET_CLOSE; break; case ',': _token = XamlTypeNameLexerToken.COMMA; break; case ':': _token = XamlTypeNameLexerToken.COLON; break; default: if (XamlParseUtils.IsValidNameStartChar(CurrentChar)) { StartMultiCharToken(); _state = State.INNAME; } else { _token = XamlTypeNameLexerToken.ERROR; } break; } _lastChar = CurrentChar; Advance(); } }
private void State_InName() { if ((IsAtEndOfInput || XamlParseUtils.IsWhitespaceChar(CurrentChar)) || (CurrentChar == '[')) { _token = XamlTypeNameLexerToken.NAME; _state = State.START; } else { switch (CurrentChar) { case '(': _pushedBackSymbol = XamlTypeNameLexerToken.ROUND_BRACKET_OPEN; _token = XamlTypeNameLexerToken.NAME; _state = State.START; break; case ')': _pushedBackSymbol = XamlTypeNameLexerToken.ROUND_BRACKET_CLOSE; _token = XamlTypeNameLexerToken.NAME; _state = State.START; break; case ',': _pushedBackSymbol = XamlTypeNameLexerToken.COMMA; _token = XamlTypeNameLexerToken.NAME; _state = State.START; break; case ':': _pushedBackSymbol = XamlTypeNameLexerToken.COLON; _token = XamlTypeNameLexerToken.NAME; _state = State.START; break; default: if (XamlParseUtils.IsValidQualifiedNameChar(CurrentChar)) { AddToMultiCharToken(); } else { _token = XamlTypeNameLexerToken.ERROR; } break; } _lastChar = CurrentChar; Advance(); } }
internal void Read() { if (_pushedBackSymbol != XamlTypeNameLexerToken.NONE) { _token = _pushedBackSymbol; _pushedBackSymbol = XamlTypeNameLexerToken.NONE; } else { _token = XamlTypeNameLexerToken.NONE; _tokenText = string.Empty; _multiCharTokenStartIdx = -1; _multiCharTokenLength = 0; while (_token == XamlTypeNameLexerToken.NONE) { if (IsAtEndOfInput) { if (_state == State.INNAME) { _token = XamlTypeNameLexerToken.NAME; _state = State.START; } break; } switch (_state) { case State.START: State_Start(); break; case State.INNAME: State_InName(); break; } } if (_multiCharTokenLength > 0) { _tokenText = CollectMultiCharToken(); } } }
public XamlTypeNameLexer(string text) { _inputText = text; _state = State.START; _pushedBackSymbol = XamlTypeNameLexerToken.NONE; }