Core PDML 2.0.0 Grammar
The table below shows the Core PDML grammar, presented in an EBNF-like format.
It covers only Core PDML, omitting PDML extensions (optional features) like comments, attributes etc.
This grammar definition serves as a supplementary resource, to contextualize the authoritative specification.
Core PDML Grammar
| Name | Rule | Examples | |
|---|---|---|---|
| PDML_document | = | whitespace_char * tagged_node whitespace_char * | [root [child text] ] more examples |
| whitespace_char | = | ' ' | '\t' | '\n' | '\r' | '\f' |
|
| tagged_node | = | tagged_branch_node | tagged_leaf_node |
|
| tagged_branch_node | = | "[" tag separator child_node + "]" | [color orange] [config [color orange]] [div A [i [b nice]] dog] |
| tagged_leaf_node | = | "[" tag "]" | [remark] [hr] |
| tag | = | tag_char + |
height 123 2025-01-29 Index_12-a.2 _ 👆👆 品質 Net\sWeight |
| tag_char | = | any Unicode code point, except
\ [ ] {space} {tab} {new line} {carriage return} ^ ( ) = " ~ | : , ` ! $ U+0000 to U+0008, U+000B, U+000E to U+001F (C0 controls) U+0080 to U+009F (C1 controls) | \\ | \[ | \] | \s | \t | \n | \r | \^ | \( | \) | \= | \" | \~ | \| | \: | \, | \` | \! | \$ |
a Z é 品 9 _ 👆 \= |
| separator | = | ' ' | '\t' | '\n' | "\r\n" |
|
| child_node | = | tagged_branch_node | tagged_leaf_node | untagged_text_leaf_node |
[b [i huge]] [remark] All is well! |
| untagged_text_leaf_node (aka text_leaf) |
= | text_char + | Bob 3.14 We want simplicity. ขอให้คุณโชคดี root\\config\["port"\] |
| text_char | = | any Unicode code point, except \ [ ] U+0000 to U+0008, U+000B, U+000E to U+001F (C0 controls) U+0080 to U+009F (C1 controls) | \\ | \[ | \] | \s | \t | \n | \r | \^ | \( | \) | \= | \" | \~ | \| | \: | \, | \` | \! | \$ |
a Z é ก 9 _ 😀 \[ \n |