Add version marker to the grammer

This commit is contained in:
eugenesvk 2024-12-22 02:00:58 +07:00
parent da5cbf5984
commit 2869062aef
1 changed files with 8 additions and 1 deletions

View File

@ -828,6 +828,10 @@ They may be represented in Strings (but not Raw Strings) using [Unicode Escapes]
* `U+FEFF`, aka Zero-width Non-breaking Space (ZWNBSP)/Byte Order Mark (BOM), * `U+FEFF`, aka Zero-width Non-breaking Space (ZWNBSP)/Byte Order Mark (BOM),
except as the first code point in a document. except as the first code point in a document.
### Version marker
A version marker `/- kdl-version 2` (or `1`) _MAY_ be added to the beginning of a KDL document, optionally preceded by the BOM, and parsers _MAY_ use that as a hint as to which version to parse the document as.
## Full Grammar ## Full Grammar
This is the full official grammar for KDL and should be considered This is the full official grammar for KDL and should be considered
@ -835,7 +839,7 @@ authoritative if something seems to disagree with the text above. The [grammar
language syntax](#grammar-language) is defined below. language syntax](#grammar-language) is defined below.
``` ```
document := bom? nodes document := bom? version? nodes
// Nodes // Nodes
nodes := (line-space* node)* line-space* nodes := (line-space* node)* line-space*
@ -920,6 +924,9 @@ newline := See Table (All Newline White_Space)
line-space := node-space | newline | single-line-comment line-space := node-space | newline | single-line-comment
// Whitespace within nodes, where newline-ish things must be esclined. // Whitespace within nodes, where newline-ish things must be esclined.
node-space := ws* escline ws* | ws+ node-space := ws* escline ws* | ws+
// Version marker
version := '/-' unicode-space*? 'kdl-version' unicode-space*? ('1' | '2') line-space*
``` ```
### Grammar language ### Grammar language