19 lines
806 B
EBNF
19 lines
806 B
EBNF
@@grammar :: contentline
|
|
@@whitespace :: None
|
|
@@left_recursion :: False
|
|
|
|
# generate with tatsu --generate-parser --outfile ics/grammar/contentline.py ics/grammar/contentline.ebnf
|
|
|
|
start = @:contentline $;
|
|
full = @+:contentline { /(\r?\n)+/ @+:contentline }+ /(\r?\n)*/ $;
|
|
|
|
contentline = name:ALPHADIGIT_MINUS_PLUS { ";" params+:param }* ":" value:VALUE_CHAR_STAR ;
|
|
param = name:ALPHADIGIT_MINUS_PLUS "=" values+:param_value { "," values+:param_value }* ;
|
|
param_value = DQUOTE ~ value:QSAFE_CHAR_STAR DQUOTE quoted:`true` | value:SAFE_CHAR_STAR quoted:`false` ;
|
|
|
|
ALPHADIGIT_MINUS_PLUS = /[a-zA-Z0-9-]+/;
|
|
QSAFE_CHAR_STAR = /[^\x00-\x08\x0A-\x1F\x22\x7F]*/;
|
|
SAFE_CHAR_STAR = /[^\x00-\x08\x0A-\x1F\x22\x2C\x3A\x3B\x7F]*/;
|
|
VALUE_CHAR_STAR = /[^\x00-\x08\x0A-\x1F\x7F]*/;
|
|
DQUOTE = '"';
|