Top Description Inners Fields Constructors Methods
org.snakeyaml.engine.v2.parser

public Class ParserImpl

extends Object
implements Parser
Class Inheritance
All Implemented Interfaces
org.snakeyaml.engine.v2.parser.Parser, java.util.Iterator
Imports
java.util.Collections, .HashMap, .LinkedList, .List, .Map, .NoSuchElementException, .Optional, org.snakeyaml.engine.v2.api.LoadSettings, org.snakeyaml.engine.v2.comments.CommentType, org.snakeyaml.engine.v2.common.Anchor, .ArrayStack, .FlowStyle, .ScalarStyle, .SpecVersion, org.snakeyaml.engine.v2.events.AliasEvent, .CommentEvent, .DocumentEndEvent, .DocumentStartEvent, .Event, .ImplicitTuple, .MappingEndEvent, .MappingStartEvent, .ScalarEvent, .SequenceEndEvent, .SequenceStartEvent, .StreamEndEvent, .StreamStartEvent, org.snakeyaml.engine.v2.exceptions.Mark, .ParserException, .YamlEngineException, org.snakeyaml.engine.v2.nodes.Tag, org.snakeyaml.engine.v2.scanner.Scanner, .ScannerImpl, .StreamReader, org.snakeyaml.engine.v2.tokens.AliasToken, .AnchorToken, .BlockEntryToken, .CommentToken, .DirectiveToken, .ScalarToken, .StreamEndToken, .StreamStartToken, .TagToken, .TagTuple, .Token

# The following YAML grammar is LL(1) and is parsed by a recursive descent parser.

stream            ::= STREAM-START implicit_document? explicit_document* STREAM-END
implicit_document ::= block_node DOCUMENT-END*
explicit_document ::= DIRECTIVE* DOCUMENT-START block_node? DOCUMENT-END*
block_node_or_indentless_sequence ::=
                      ALIAS
                      | properties (block_content | indentless_block_sequence)?
                      | block_content
                      | indentless_block_sequence
block_node        ::= ALIAS
                      | properties block_content?
                      | block_content
flow_node         ::= ALIAS
                      | properties flow_content?
                      | flow_content
properties        ::= TAG ANCHOR? | ANCHOR TAG?
block_content     ::= block_collection | flow_collection | SCALAR
flow_content      ::= flow_collection | SCALAR
block_collection  ::= block_sequence | block_mapping
flow_collection   ::= flow_sequence | flow_mapping
block_sequence    ::= BLOCK-SEQUENCE-START (BLOCK-ENTRY block_node?)* BLOCK-END
indentless_sequence   ::= (BLOCK-ENTRY block_node?)+
block_mapping     ::= BLOCK-MAPPING_START
                      ((KEY block_node_or_indentless_sequence?)?
                      (VALUE block_node_or_indentless_sequence?)?)*
                      BLOCK-END
flow_sequence     ::= FLOW-SEQUENCE-START
                      (flow_sequence_entry FLOW-ENTRY)*
                      flow_sequence_entry?
                      FLOW-SEQUENCE-END
flow_sequence_entry   ::= flow_node | KEY flow_node? (VALUE flow_node?)?
flow_mapping      ::= FLOW-MAPPING-START
                      (flow_mapping_entry FLOW-ENTRY)*
                      flow_mapping_entry?
                      FLOW-MAPPING-END
flow_mapping_entry    ::= flow_node | KEY flow_node? (VALUE flow_node?)?
#
FIRST sets:
#
stream: { STREAM-START }
explicit_document: { DIRECTIVE DOCUMENT-START }
implicit_document: FIRST(block_node)
block_node: { ALIAS TAG ANCHOR SCALAR BLOCK-SEQUENCE-START BLOCK-MAPPING-START FLOW-SEQUENCE-START FLOW-MAPPING-START }
flow_node: { ALIAS ANCHOR TAG SCALAR FLOW-SEQUENCE-START FLOW-MAPPING-START }
block_content: { BLOCK-SEQUENCE-START BLOCK-MAPPING-START FLOW-SEQUENCE-START FLOW-MAPPING-START SCALAR }
flow_content: { FLOW-SEQUENCE-START FLOW-MAPPING-START SCALAR }
block_collection: { BLOCK-SEQUENCE-START BLOCK-MAPPING-START }
flow_collection: { FLOW-SEQUENCE-START FLOW-MAPPING-START }
block_sequence: { BLOCK-SEQUENCE-START }
block_mapping: { BLOCK-MAPPING-START }
block_node_or_indentless_sequence: { ALIAS ANCHOR TAG SCALAR BLOCK-SEQUENCE-START BLOCK-MAPPING-START FLOW-SEQUENCE-START FLOW-MAPPING-START BLOCK-ENTRY }
indentless_sequence: { ENTRY }
flow_collection: { FLOW-SEQUENCE-START FLOW-MAPPING-START }
flow_sequence: { FLOW-SEQUENCE-START }
flow_mapping: { FLOW-MAPPING-START }
flow_sequence_entry: { ALIAS ANCHOR TAG SCALAR FLOW-SEQUENCE-START FLOW-MAPPING-START KEY }
flow_mapping_entry: { ALIAS ANCHOR TAG SCALAR FLOW-SEQUENCE-START FLOW-MAPPING-START KEY }

Since writing a recursive-descendant parser is a straightforward task, we do not give many comments here.

Nested and Inner Type Summary

Modifier and TypeClass and Description
private class
private class
private class
private class
private class
private class
ParserImpl.ParseBlockNode

 block_node_or_indentless_sequence ::= ALIAS
               | properties (block_content | indentless_block_sequence)?
private class
private class
private class
private class
private class
private class
private class
private class
private class
ParserImpl.ParseFlowMappingFirstKey

  flow_mapping  ::= FLOW-MAPPING-START
         (flow_mapping_entry FLOW-ENTRY)*
         flow_mapping_entry?
private class
private class
private class
private class
private class
private class
private class
ParserImpl.ParseFlowSequenceFirstEntry

flow_sequence     ::= FLOW-SEQUENCE-START
                      (flow_sequence_entry FLOW-ENTRY)*
                      flow_sequence_entry?
private class
private class
private class
private class

Field Summary

Modifier and TypeField and Description
private Optional<Event>
private static final Map<String, String>
private Map<String, String>
private final ArrayStack<Optional<Mark>>
protected final Scanner
scanner

tokeniser

private final LoadSettings
private Optional<Production>
private final ArrayStack<Production>

Constructor Summary

AccessConstructor and Description
public
ParserImpl(StreamReader
- the input
reader
,
LoadSettings
- the configuration options
settings
)
Deprecated use the other constructor with LoadSettings first

public
ParserImpl(LoadSettings
- configuration options
settings
,
StreamReader
- the input
reader
)

Create

public
ParserImpl(Scanner
- input
scanner
,
LoadSettings
- configuration options
settings
)
Deprecated use the other constructor with LoadSettings first

public
ParserImpl(LoadSettings
- configuration options
settings
,
Scanner
- input
scanner
)

Create

Method Summary

Modifier and TypeMethod and Description
public boolean
checkEvent(Event.ID id)

Implements org.snakeyaml.engine.v2.parser.Parser.checkEvent.

Check the ID of the next event.

public boolean

Returns:

true if there is another event
hasNext
()

Implements java.util.Iterator.hasNext.

Produce the event if not yet present.

private Optional<Mark>
private void
public Event
next()

Implements org.snakeyaml.engine.v2.parser.Parser.next.

Consume the event (get the next event and removed it).

private Event
private Event
private Event
parseNode(boolean block, boolean indentlessSequence)

public Event
peekEvent()

Implements org.snakeyaml.engine.v2.parser.Parser.peekEvent.

Get the next event (and keep it).

private VersionTagsTuple
private Event
processEmptyScalar(Optional<Mark> mark)

block_mapping     ::= BLOCK-MAPPING_START
          ((KEY block_node_or_indentless_sequence?)?
private void
private CommentEvent
Inherited from java.lang.Object:
cloneequalsfinalizegetClasshashCodenotifynotifyAlltoStringwaitwaitwait