Странный C-код в Bison (yyerror) - PullRequest
5 голосов
/ 06 декабря 2011

Я использую Bison для создания простого парсера, и у меня возникли проблемы с пониманием кода на C ниже.Для меня это не похоже на правильное утверждение, но gcc аккуратно его компилирует, и код в блоке выполняется при ошибке разбора.

Мне бы очень хотелось узнать, что это на самом деле означает.

Код, на который я ссылаюсь, - http://dinosaur.compilertools.net/bison/bison_7.html#SEC66:

yyerror (s) 
     char *s;
{
  // Some code here
}

Ответы [ 4 ]

8 голосов
/ 06 декабря 2011

Это K & R C

В современном C (C89 / 90 или C99) это будет:

int yyerror(char *s)
{
}
4 голосов
/ 06 декабря 2011

Это означает, что

int yyerror(char* s){
  //some code here
}

код, прикрепленный к вашему вопросу, является просто еще одним способом задания типов аргументов функции.

3 голосов
/ 06 декабря 2011

Это старый K & R C .

1 голос
/ 06 декабря 2011

GNU bison теперь в версии 2.5 , см. здесь . Почему вы используете такую ​​древнюю версию (вы ссылаетесь на бизона 1.25 от 1996 года)?

Функция yyerror предназначена для восстановления после ошибки . Простой пример: здесь

...