Это руководство поможет вам использовать Docopt, чтобы добавить синтаксический анализ параметров в ваш проект C.
Шаги
Напишите файл с именем USAGE, используя стандарт docopt. Пример:
pearldb — a key value server Usage: pearldb [ — daemonize] pearldb — version pearldb — help Options: -d — daemonize Run as a daemon. -v — version Display version. -h — help Prints a short usage summary.
Получить docopt2ragel
pip install docopt2ragel
Установить Рагель
brew install ragel
Скомпилируйте файл USAGE в конечный автомат Ragel:
docopt2ragel USAGE > usage.rl
Скомпилируйте конечный автомат Ragel в исходный файл C
ragel usage.rl
Включите исходный файл C в свой проект:
#include “usage.c” int main(int argc, char **argv) { int e, i; options_t opts; e = parse_options(argc, argv, &opts); if (-1 == e) exit(-1); else if (opts.help) { show_usage(); exit(0); } else if (opts.version) { fprintf(stdout, “%s\n”, VERSION); exit(0); } }
Что происходит?
docopt2ragel анализирует строку использования Docopt с помощью Docopt. Результатом этого является конечный автомат Ragel, который определяет грамматику нашего анализатора аргументов. Ragel берет этот конечный автомат и генерирует нужный нам код C. Мы включаем сгенерированный код C в наш проект.
Примечания
- При этом используется альтернативный метод из официальной реализации.
- Код синтаксического анализа параметров, который генерирует Ragel, надежен.
- Docopt — это элегантный способ документирования и определения интерфейса командной строки вашего проекта.
- Было бы здорово, если бы Ragel мог принять его вклад в STDIN.
- docopt2ragel на момент написания поддерживает большую часть стандарта docopt.
- Пример из реальной жизни см. https://github.com/willemt/pearldb.