Есть ли формальное описание грамматики для docopt? - PullRequest
0 голосов
/ 10 февраля 2020

Я пытаюсь разработать формальную грамматику EBNF для docopt.py (docopt.fs), с помощью которой можно сгенерировать разумный синтаксический анализатор для программ командной строки на docopt, но для которого я намерен использовать для направления кода FParsec F # реализация. Я искал существующую формальную грамматику без удачи. Альтернатива, если вы можете предоставить такую ​​грамматику, которая была бы великолепна.

Только что начал, и это то, где я нахожусь (Давненько я даже не смотрел на EBNF) ...

usage_txt   ::  sot
               [LINES_OF_TEXT+ blank_line+]
                ws* "usage" ws* ":" ws* usage
               [blank_line+ options]
                blank_line+
                eot
usage       :: PROG_NAME 
            || (PROG_NAME ws+ cmd+)+ eol
prog_name   :: application name
cmd         :: WORD 
            || ("(" cmd ")" | "[" cmd "]") ["..."]
            || "<" value_word ">" ["..."]
            || "--" long_opt [("="|ws+) VALUE]
            || "-" (short_opt+ | short_opt[VALUE])
blank_line  :: eol eol
short_opt   :: a..z
long_opt    :: lowercase_word
value_word  :: lowercase_word
eol         :: (ws|"\r")* "\n"
wsl         :: (ws|"\r")* ["\n" (ws|"\r")*]
sol         :: (sot | "\n") ws*
ws          :: (" "|"\t")
lowercase_word :: a..z (a..z0..9_)*
sot         :: start of text
eot         :: end of text
...