|
1 |
| -body ::= (entry NL)* (entry)? EOF; |
| 1 | +body ::= (entry NL)* entry? EOF |
2 | 2 | entry ::= comment
|
3 |
| - | section |
4 |
| - | message |
5 |
| - ; |
| 3 | + | section |
| 4 | + | message |
6 | 5 |
|
7 |
| -comment ::= '#' .*; |
8 |
| -section ::= '[[' __ keyword __ ']]'; |
| 6 | +comment ::= '#' char* |
| 7 | +section ::= '[[' __ keyword __ ']]' |
9 | 8 |
|
10 |
| -__ ::= [ \t]*; |
11 |
| -NL ::= [\r\n]+; |
| 9 | +char ::= [https://www.w3.org/TR/REC-xml/#NT-Char] |
| 10 | +__ ::= [#x20#x9]* /* space, tab */ |
| 11 | +NL ::= [#xA#xD]+ /* line feed, carriage return */ |
12 | 12 |
|
13 |
| -identifier ::= [a-zA-Z_.?-] ([a-zA-Z0-9_.?-])*; |
14 |
| -variable ::= '$' identifier; |
15 |
| -keyword ::= [a-zA-Z_.?-] ([a-zA-Z0-9_.?- ]* [a-zA-Z0-9_.?-])?; |
16 |
| -builtin ::= [A-Z_.?-]+; |
17 |
| -number ::= [0-9]+ ('.' [0-9]+)?; |
| 13 | +identifier ::= [a-zA-Z_.?-] ([a-zA-Z0-9_.?-])* |
| 14 | +variable ::= '$' identifier |
| 15 | +keyword ::= [a-zA-Z_.?-] ([a-zA-Z0-9_.?- ]* [a-zA-Z0-9_.?-])? |
| 16 | +builtin ::= [A-Z_.?-]+ |
| 17 | +number ::= [0-9]+ ('.' [0-9]+)? |
18 | 18 |
|
19 |
| -member-key ::= number | (identifier '/')? keyword; |
20 |
| -member ::= '[' member-key ']' __ pattern NL; |
21 |
| -default-member ::= '*' member; |
22 |
| -variants-list ::= NL (__ member)* __ default-member (__ member)*; |
23 |
| -traits-list ::= variants-list | NL (__ member)+; |
| 19 | +member-key ::= number | (identifier '/')? keyword |
| 20 | +member ::= '[' member-key ']' __ pattern NL |
| 21 | +default-member ::= '*' member |
| 22 | +variants-list ::= NL (__ member)* __ default-member (__ member)* |
| 23 | +traits-list ::= variants-list | NL (__ member)+ |
24 | 24 |
|
25 |
| -message ::= identifier __ '=' __ (pattern | pattern traits-list | traits-list); |
| 25 | +message ::= identifier __ '=' __ (pattern | pattern traits-list | traits-list) |
26 | 26 | pattern ::= unquoted-pattern
|
27 |
| - | quoted-pattern |
28 |
| - ; |
29 |
| -unquoted-pattern ::= (unquoted-text | placeable | block-text)+; |
30 |
| -quoted-pattern ::= '"' (quoted-text | placeable)* '"'; |
31 |
| -unquoted-text ::= ([^{] | '\{')+; |
32 |
| -quoted-text ::= ([^{"] | '\{' | '\"')+; |
33 |
| -block-text ::= NL __ '|' unquoted-pattern; |
| 27 | + | quoted-pattern |
| 28 | +unquoted-pattern ::= (unquoted-text | placeable | block-text)+ |
| 29 | +quoted-pattern ::= '"' (quoted-text | placeable)* '"' |
| 30 | +unquoted-text ::= ([^{] | '\{')+ |
| 31 | +quoted-text ::= ([^{"] | '\{' | '\"')+ |
| 32 | +block-text ::= NL __ '|' unquoted-pattern |
34 | 33 |
|
35 |
| -placeable ::= '{' __ expression __ '}'; |
| 34 | +placeable ::= '{' __ expression __ '}' |
36 | 35 | expression ::= quoted-pattern
|
37 |
| - | number |
38 |
| - | identifier |
39 |
| - | variable |
40 |
| - | select-expression |
41 |
| - | member-expression |
42 |
| - | call-expression |
43 |
| - ; |
44 |
| -select-expression ::= expression __ ' ->' __ variants-list; |
45 |
| -member-expression ::= identifier '[' keyword ']'; |
46 |
| -call-expression ::= builtin '(' __ arglist? __ ')'; |
47 |
| -arglist ::= argument (__ ',' __ arglist)?; |
| 36 | + | number |
| 37 | + | identifier |
| 38 | + | variable |
| 39 | + | select-expression |
| 40 | + | member-expression |
| 41 | + | call-expression |
| 42 | + |
| 43 | +select-expression ::= expression __ ' ->' __ variants-list |
| 44 | +member-expression ::= identifier '[' keyword ']' |
| 45 | +call-expression ::= builtin '(' __ arglist? __ ')' |
| 46 | +arglist ::= argument (__ ',' __ arglist)? |
48 | 47 | argument ::= expression
|
49 |
| - | keyword-argument; |
50 |
| -keyword-argument ::= identifier __ ':' __ quoted-pattern; |
| 48 | + | keyword-argument |
| 49 | +keyword-argument ::= identifier __ ':' __ quoted-pattern |
0 commit comments