Возникли проблемы при использовании gperf: пустое ключевое слово ввода не допускается - PullRequest
0 голосов
/ 16 марта 2011

command_options.gperf:

%{
#include "command_options.h"
typedef struct CommandOptionCode CommandOptionCode;
%}
struct CommandOption
  {
  const char *Option;
  int OptionCode;
  };
%%
+helpverbose, CommandOptionCode::HELPVERBOSE
+password, CommandOptionCode::PASSWORD
+nocopyright, CommandOptionCode::NOCOPYRIGHT
+nolog, CommandOptionCode::NOLOG
+_64bit, CommandOptionCode::_64BIT

command_options.h:

#ifndef __COMMANDOPTIONS_H
#define __COMMANDOPTIONS_H
struct CommandOptionCode 
  {
  enum 
    {
    HELPVERBOSE = 1,
    PASSWORD = 2,
    NOCOPYRIGHT = 3,
    NOLOG = 4,
    _64BIT = 5
    };
  };
#endif

Когда я бегу:

gperf  -L C++ -t --output-file=perfecthash.hpp command_options.gperf

Только чтобы получить:

Пустое ключевое слово ввода не допускается. к распознать пустое ключевое слово ввода, ваш код должен проверить для len == 0, прежде чем вызывая поиск, сгенерированный gperf функция.

Версия: GNU gperf 3.0.1 Почему?

Ответы [ 3 ]

1 голос
/ 26 октября 2011

Я обнаружил, что gperf не любит пустые строки в разделе ключевых слов.Я думаю, он рассматривает пустую строку как пустую строку, так как это не комментарий, и жалуется на то, что она «пустая» и имеет len = 0.Поскольку у меня есть привычка всегда заканчивать файл пустой строкой (есть некоторые ассемблеры и компиляторы, которые скрывают, что не имеют его), это всегда будет проблемой!

1 голос
/ 20 апреля 2011

Я обнаружил, что gperf 2.7 не волнует, есть ли разделитель «%%» между первым разделом и ключевыми словами. 3.0.1 строго соблюдает это. Итак, в моем случае я должен был изменить:

%{
#include <string.h>
%}

scan

будет

%{
#include <string.h>
%}
%%

scan

Ваш случай отличается, я полагаю, в том, что в руководстве говорится, что первое поле структуры должно называться name:

"This first field must be called `name', although it is possible to modify its name with the `-K' option (or, equivalently, the `%define slot-name' declaration) described below."

-charlie

0 голосов
/ 14 августа 2013

В дополнение к проблеме пустой строки, упомянутой Ричардом, gperf также не нравятся пробелы, предшествующие определенным токенам.(Я вырезал и вставил простой пример gperf, который искал «грубые» слова в пользовательском вводе. Имя образца было rude-1.gperf. В этом образце имелось отступ, который вызвал эту же ошибку.)

...