简体   繁体   中英

Weird C code in Bison (yyerror)

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
}

That's K&R C

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

int yyerror(char *s)
{
}

It means

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

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

这是旧的K&R C.

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

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM