Bison奇怪的C代码(yyerror)

时间:2011-12-06 15:05:50

标签: c bison

我正在使用Bison创建一个简单的解析器,并且在理解下面的C代码时遇到一些麻烦。对我而言,它看起来不像是一个有效的语句,但gcc整齐地复制它,并且块中的代码在解析错误时执行。

我真的很想知道这实际意味着什么。

我引用的代码来自http://dinosaur.compilertools.net/bison/bison_7.html#SEC66

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

4 个答案:

答案 0 :(得分:8)

那是K&R C

在现代C(C89 / 90或C99)中将是:

int yyerror(char *s)
{
}

答案 1 :(得分:4)

这意味着

int yyerror(char* s){
  //some code here
}
附加到您的问题的

代码只是指定函数参数类型的另一种方式。

答案 2 :(得分:3)

这是旧K&R C

答案 3 :(得分:1)

GNU bison 现在版本 2.5 ,请参阅here。你为什么使用这样一个古老的版本(你从1996年开始提到野牛1.25)?

yyerror功能适用于error recovery。一个简单的例子是here