5

I'm using Bison to create a simple parser and have some trouble understanding the C code below. To me it doesn't look like a valid statement, but gcc comepiles it neatly and the code in the block executes on parsing error.

I'd really like to know what this actually means.

The code I refer to is from http://dinosaur.compilertools.net/bison/bison_7.html#SEC66 :

yyerror (s) 
     char *s;
{
  // Some code here
}
rickythefox
  • 6,601
  • 6
  • 40
  • 62

4 Answers4

8

That's K&R C

In modern C (C89/90 or C99) that would be:

int yyerror(char *s)
{
}
Šimon Tóth
  • 35,456
  • 20
  • 106
  • 151
4

It means

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

code attached to your question is just another way of specifying function argument types.

KCH
  • 2,794
  • 2
  • 23
  • 22
3

This is old K&R C.

Some programmer dude
  • 400,186
  • 35
  • 402
  • 621
1

GNU bison is now at version 2.5, see here. Why do you use such an ancient version (you refer to bison 1.25 from 1996)?

The  yyerror function is for error recovery. A simple example is here

Basile Starynkevitch
  • 223,805
  • 18
  • 296
  • 547