67 __all__ = [
'Parser',
'ParserError']
69 from error
import MarkedYAMLError
85 u'!!':
u'tag:yaml.org,2002:',
104 for choice
in choices:
132 token = self.get_token()
134 encoding=token.encoding)
144 if not self.check_token(DirectiveToken, DocumentStartToken,
147 token = self.peek_token()
148 start_mark = end_mark = token.start_mark
164 while self.check_token(DocumentEndToken):
168 if not self.check_token(StreamEndToken):
169 token = self.peek_token()
170 start_mark = token.start_mark
172 if not self.check_token(DocumentStartToken):
174 "expected '<document start>', but found %r"
175 % self.peek_token().id,
176 self.peek_token().start_mark)
177 token = self.get_token()
178 end_mark = token.end_mark
180 explicit=
True, version=version, tags=tags)
185 token = self.get_token()
188 assert not self.
marks
195 token = self.peek_token()
196 start_mark = end_mark = token.start_mark
198 if self.check_token(DocumentEndToken):
199 token = self.get_token()
200 end_mark = token.end_mark
211 if self.check_token(DirectiveToken,
212 DocumentStartToken, DocumentEndToken, StreamEndToken):
214 self.
state = self.states.pop()
222 while self.check_token(DirectiveToken):
223 token = self.get_token()
224 if token.name ==
u'YAML':
227 "found duplicate YAML directive", token.start_mark)
228 major, minor = token.value
231 "found incompatible YAML document (version 1.* is required)",
234 elif token.name ==
u'TAG':
235 handle, prefix = token.value
238 "duplicate tag handle %r" % handle.encode(
'utf-8'),
273 return self.
parse_node(block=
True, indentless_sequence=
True)
275 def parse_node(self, block=False, indentless_sequence=False):
276 if self.check_token(AliasToken):
277 token = self.get_token()
278 event =
AliasEvent(token.value, token.start_mark, token.end_mark)
279 self.
state = self.states.pop()
283 start_mark = end_mark = tag_mark =
None
284 if self.check_token(AnchorToken):
285 token = self.get_token()
286 start_mark = token.start_mark
287 end_mark = token.end_mark
289 if self.check_token(TagToken):
290 token = self.get_token()
291 tag_mark = token.start_mark
292 end_mark = token.end_mark
294 elif self.check_token(TagToken):
295 token = self.get_token()
296 start_mark = tag_mark = token.start_mark
297 end_mark = token.end_mark
299 if self.check_token(AnchorToken):
300 token = self.get_token()
301 end_mark = token.end_mark
305 if handle
is not None:
307 raise ParserError(
"while parsing a node", start_mark,
308 "found undefined tag handle %r" % handle.encode(
'utf-8'),
317 if start_mark
is None:
318 start_mark = end_mark = self.peek_token().start_mark
320 implicit = (tag
is None or tag ==
u'!')
321 if indentless_sequence
and self.check_token(BlockEntryToken):
322 end_mark = self.peek_token().end_mark
324 start_mark, end_mark)
327 if self.check_token(ScalarToken):
328 token = self.get_token()
329 end_mark = token.end_mark
330 if (token.plain
and tag
is None)
or tag ==
u'!':
331 implicit = (
True,
False)
333 implicit = (
False,
True)
335 implicit = (
False,
False)
336 event =
ScalarEvent(anchor, tag, implicit, token.value,
337 start_mark, end_mark, style=token.style)
338 self.
state = self.states.pop()
339 elif self.check_token(FlowSequenceStartToken):
340 end_mark = self.peek_token().end_mark
342 start_mark, end_mark, flow_style=
True)
344 elif self.check_token(FlowMappingStartToken):
345 end_mark = self.peek_token().end_mark
347 start_mark, end_mark, flow_style=
True)
349 elif block
and self.check_token(BlockSequenceStartToken):
350 end_mark = self.peek_token().start_mark
352 start_mark, end_mark, flow_style=
False)
354 elif block
and self.check_token(BlockMappingStartToken):
355 end_mark = self.peek_token().start_mark
357 start_mark, end_mark, flow_style=
False)
359 elif anchor
is not None or tag
is not None:
362 event =
ScalarEvent(anchor, tag, (implicit,
False),
u'',
363 start_mark, end_mark)
364 self.
state = self.states.pop()
370 token = self.peek_token()
371 raise ParserError(
"while parsing a %s node" % node, start_mark,
372 "expected the node content, but found %r" % token.id,
379 token = self.get_token()
380 self.marks.append(token.start_mark)
384 if self.check_token(BlockEntryToken):
385 token = self.get_token()
386 if not self.check_token(BlockEntryToken, BlockEndToken):
392 if not self.check_token(BlockEndToken):
393 token = self.peek_token()
395 "expected <block end>, but found %r" % token.id, token.start_mark)
396 token = self.get_token()
398 self.
state = self.states.pop()
405 if self.check_token(BlockEntryToken):
406 token = self.get_token()
407 if not self.check_token(BlockEntryToken,
408 KeyToken, ValueToken, BlockEndToken):
414 token = self.peek_token()
416 self.
state = self.states.pop()
425 token = self.get_token()
426 self.marks.append(token.start_mark)
430 if self.check_token(KeyToken):
431 token = self.get_token()
432 if not self.check_token(KeyToken, ValueToken, BlockEndToken):
438 if not self.check_token(BlockEndToken):
439 token = self.peek_token()
441 "expected <block end>, but found %r" % token.id, token.start_mark)
442 token = self.get_token()
444 self.
state = self.states.pop()
449 if self.check_token(ValueToken):
450 token = self.get_token()
451 if not self.check_token(KeyToken, ValueToken, BlockEndToken):
459 token = self.peek_token()
474 token = self.get_token()
475 self.marks.append(token.start_mark)
479 if not self.check_token(FlowSequenceEndToken):
481 if self.check_token(FlowEntryToken):
484 token = self.peek_token()
486 "expected ',' or ']', but got %r" % token.id, token.start_mark)
488 if self.check_token(KeyToken):
489 token = self.peek_token()
491 token.start_mark, token.end_mark,
495 elif not self.check_token(FlowSequenceEndToken):
498 token = self.get_token()
500 self.
state = self.states.pop()
505 token = self.get_token()
506 if not self.check_token(ValueToken,
507 FlowEntryToken, FlowSequenceEndToken):
515 if self.check_token(ValueToken):
516 token = self.get_token()
517 if not self.check_token(FlowEntryToken, FlowSequenceEndToken):
525 token = self.peek_token()
530 token = self.peek_token()
540 token = self.get_token()
541 self.marks.append(token.start_mark)
545 if not self.check_token(FlowMappingEndToken):
547 if self.check_token(FlowEntryToken):
550 token = self.peek_token()
552 "expected ',' or '}', but got %r" % token.id, token.start_mark)
553 if self.check_token(KeyToken):
554 token = self.get_token()
555 if not self.check_token(ValueToken,
556 FlowEntryToken, FlowMappingEndToken):
562 elif not self.check_token(FlowMappingEndToken):
565 token = self.get_token()
567 self.
state = self.states.pop()
572 if self.check_token(ValueToken):
573 token = self.get_token()
574 if not self.check_token(FlowEntryToken, FlowMappingEndToken):
582 token = self.peek_token()
590 return ScalarEvent(
None,
None, (
True,
False),
u'', mark, mark)
def parse_indentless_sequence_entry
def parse_flow_mapping_key
def parse_implicit_document_start
def parse_document_content
def parse_flow_mapping_value
def parse_flow_mapping_first_key
def parse_flow_mapping_empty_value
def parse_flow_sequence_entry_mapping_key
def parse_block_node_or_indentless_sequence
def parse_block_sequence_first_entry
def parse_block_mapping_value
def parse_flow_sequence_entry_mapping_value
def parse_flow_sequence_entry_mapping_end
def parse_block_mapping_first_key
def parse_flow_sequence_first_entry
def parse_block_sequence_entry
def parse_flow_sequence_entry
def parse_block_mapping_key