diff options
| author | Taylan Kammer <taylan.kammer@gmail.com> | 2025-03-28 18:02:38 +0100 |
|---|---|---|
| committer | Taylan Kammer <taylan.kammer@gmail.com> | 2025-03-28 18:02:38 +0100 |
| commit | 6eedf5394997b91467a392732cdb7fbb80a790b8 (patch) | |
| tree | 69ad43857ec17315c9a9d5547709eb6fd238502d /spec | |
| parent | 00fd32b6c0d35140bdc160aa759bbac52242d7d0 (diff) | |
blub
Diffstat (limited to 'spec')
| -rw-r--r-- | spec/parser.ebnf | 30 |
1 files changed, 22 insertions, 8 deletions
diff --git a/spec/parser.ebnf b/spec/parser.ebnf index 44b1967..60f7890 100644 --- a/spec/parser.ebnf +++ b/spec/parser.ebnf @@ -1,11 +1,14 @@ -unit : blank* ( datum blank? | EOF ) ; +unit : empty_unit | datum_unit ; -blank : 9...13 | comment ; +empty_unit : blank* EOF ; -datum : one_datum ( join_char? one_datum )* ; +datum_unit : blank* datum blank? ; -join_char : '.' | ':' | '|' ; + +blank : 9...13 | comment ; + +datum : join_data | dot_string ; comment : ';' ( skip_unit | skip_line ) ; @@ -15,9 +18,18 @@ skip_unit : '~' unit ; skip_line : ( ~10 )* 10? ; -one_datum : ( bare_str | clad_datum ) ; +join_data : one_datum ( join_char? one_datum )* + +join_char : '.' | ':' | '|' ; + +dot_string : '.'{2,} + -bare_str : bare_str_elt+ ; +one_datum : ( num_string | bare_string | clad_datum ) ; + +num_string : ( '+' | '-' )? digit ( bare_str_elt | '.' )* ; + +bare_string : bare_str_elt+ ; clad_datum : '\' bare_esc_str | '"' quoted_str '"' @@ -37,11 +49,13 @@ bare_esc_str : bare_esc bare_str_elt* ; quoted_str : ( quoted_char | '\' quoted_esc )* ; hash_expr : rune clad_datum? - | '%' label ( '%' | '=' unit ) + | '%' label ( '%' | '=' datum_unit ) | clad_datum ; -list : unit+ ( '.' blank+ unit )? blank* ; +list : datum_unit+ list_tail? blank* ; + +list_tail : '.' blank+ datum_unit quote_expr : ( "'" | "`" | "," ) datum ; |
