Я пишу парсер с Bison, и я получаю следующие предупреждения.Предупреждения о грамматике Bison
fol.y:42 parser name defined to default :"parse"
fol.y:61: warning: type clash ('' 'pred') on default action
Я использую Google, чтобы искать способ, чтобы избавиться от них, но в значительной степени с пустыми руками на то, что они означают (гораздо меньше, как исправить их), так как каждый пост я нашел с ними имеет ошибку компиляции, и предупреждения сами по себе не рассматриваются. Может ли кто-нибудь сказать мне, что они означают и как их исправить? Соответствующий код приведен ниже. Строка 61 - последняя точка с запятой. Я вырезал остальную часть грамматики, так как это невероятно многословно.
%union {
char* var;
char* name;
char* pred;
}
%token <var> VARIABLE
%token <name> NAME
%token <pred> PRED
%%
fol:
declines clauses {cout << "Done parsing with file" << endl;}
;
declines:
declines decline
|decline
;
decline:
PRED decs
;
Я не могу найти примеров, которые используют метод% start parse (я не уверен, где его включить, и просто поместив его вверху, вызывает ошибку glibc), а что касается другого предупреждения, у меня есть другие правила, которые выглядят так же, как снижение и снижение, но не вызвали ошибку. – user381261
Вы положили '% start' после строк'% token', возможно, хотя это необязательно, если правило начала также является первым правилом в грамматике. Но поскольку мы не можем видеть, что породило это предупреждение, мы не можем легко помочь вам решить проблему. Аналогично, с другими проблемами; вы были немного в восторге от обрезки грамматики при сохранении проблемы. С учетом вышеприведенного кода используются как «clauses», так и «decs», но «не определены как токен и не имеют правил». Добавление правил 'decs: NAME;' и 'clauses: VARIABLE;' не помогает диагностировать проблему; 'bison' компилирует грамматику без предупреждений. –