public class ParserImpl extends Object implements Parser
# 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.
| Constructor and Description |
|---|
ParserImpl(LoadSettings settings,
Scanner scanner) |
ParserImpl(LoadSettings settings,
StreamReader reader) |
ParserImpl(Scanner scanner,
LoadSettings settings)
Deprecated.
use the other constructor with LoadSettings first
|
ParserImpl(StreamReader reader,
LoadSettings settings)
Deprecated.
use the other constructor with LoadSettings first
|
| Modifier and Type | Method and Description |
|---|---|
boolean |
checkEvent(Event.ID id)
Check the ID of the next event.
|
boolean |
hasNext()
Produce the event if not yet present.
|
Event |
next()
Consume the event (get the next event and removed it).
|
Event |
peekEvent()
Get the next event (and keep it).
|
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, waitforEachRemaining, removeprotected final Scanner scanner
public ParserImpl(StreamReader reader, LoadSettings settings)
public ParserImpl(LoadSettings settings, StreamReader reader)
public ParserImpl(Scanner scanner, LoadSettings settings)
public ParserImpl(LoadSettings settings, Scanner scanner)
public boolean checkEvent(Event.ID id)
checkEvent in interface Parserid - Event ID to matchtrue if the next event has the given ID.
Returns false if no more events are available.public Event peekEvent()
peekEvent in interface ParserParser.next()public Event next()
Copyright © 2018–2022. All rights reserved.