Я хочу найти решение следующей проблемы, но мне нужно написать EBNF времени в двух форматах, год-месяц-день и месяц-день-год, чтобы увидеть различия:
Определите одно преимущество записи дат в виде структурированного целого числа в форме: год, месяц, день (1954-02-10) вместо обычного порядка (02-10-1954).
Формат: год-месяц-день. Вот что я придумал:
<NonZeroDigit> ::= ("1" | "2" | ... | "9")
<Month> ::= ( "0" <NonZeroDigit> ) | ( "1" ( "0" | "1" | "2" ) )
<Day> ::= ( "0" <NonZeroDigit> ) | ( ("1" | "2") <NonZeroDigit> ) | ("3" ( "0" | "1" ) )
<Year> ::= ( "000" <NonZeroDigit> ) |
( "00" <NonZeroDigit> <NonZeroDigit> ) |
( "0" <NonZeroDigit> <NonZeroDigit> <NonZeroDigit> ) |
( "1" <NonZeroDigit> <NonZeroDigit> <NonZeroDigit>) |
( "20" <NonZeroDigit> <NonZeroDigit> ) )
Год идет до 2099, что, я думаю, нормально, и эти правила работают, но есть ли лучший способ написать EBNF того времени? Я что-то пропустил?