void DoStep() { switch (_state) { case State.Start: if (_tokenType == TokenType.Ider) { _node = new XamlNode() { Name = TokenValue }; _state = State.Name; } else { throw new XamlException($"Invalid token type for State 'Start'. Expected: 'Ider', actual: '{_tokenType}', value: {TokenValue}"); } break; case State.Name: if (_tokenType == TokenType.Ider) { _propertyName = TokenValue; } _state = State.Equal; break; case State.Equal: if (_tokenType == TokenType.Equal) { _state = State.Value; } else if (_tokenType == TokenType.RightCurly) { _node.AddConstructorArgument(TokenValue); _state = State.End; } else if (_tokenType == TokenType.Comma) { // argument _node.AddConstructorArgument(TokenValue); _state = State.Name; } break; case State.Value: if (_tokenType == TokenType.String || _tokenType == TokenType.Ider) { _node.AddProperty(_builder, _propertyName, TokenValue); } _state = State.Continue; break; case State.Continue: if (_tokenType == TokenType.Comma) { _state = State.Name; } else { _state = State.End; } break; } }