Это руководство поможет вам использовать 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.