Exemplo n.º 1
0
        internal new static YKeyValuePair Parse(Tokenizer tokenizer)
        {
            switch (tokenizer.Current.Kind)
            {
            case TokenKind.MappingKey:
            {
                tokenizer.MoveNext();

                var key = YNode.Parse(tokenizer);

                if (tokenizer.Current.Kind != TokenKind.MappingValue)
                {
                    return(new YKeyValuePair(key, new YScalar(null)));
                }

                tokenizer.MoveNext();

                var value = YNode.Parse(tokenizer);

                return(new YKeyValuePair(key, value));
            }

            case TokenKind.Alias:
                var keyAlias = YNode.Parse(tokenizer);
                tokenizer.MoveNext();
                var valueAlias = YNode.Parse(tokenizer);
                return(new YKeyValuePair(keyAlias, valueAlias));

            default:
            {
                var key = YNode.Parse(tokenizer);
                if (tokenizer.Current.Kind != TokenKind.MappingValue)
                {
                    throw ParseException.UnexpectedToken(tokenizer, TokenKind.MappingValue);
                }

                tokenizer.MoveNext();
                if (tokenizer.Current.Kind == TokenKind.Anchor)
                {
                    return(null);
                }

                var value = YNode.Parse(tokenizer);

                return(new YKeyValuePair(key, value));
            }
            }
        }