2011-12-06 16 views
5

Estoy usando Bison para crear un analizador simple y tengo algunos problemas para entender el código C a continuación. Para mí, no parece una declaración válida, pero gcc lo comporta correctamente y el código en el bloque se ejecuta en el error de análisis.Código C raro en Bison (yyerror)

Me gustaría saber lo que significa realmente.

El código que me refiero es a partir http://dinosaur.compilertools.net/bison/bison_7.html#SEC66:

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

Respuesta

8

Eso es K&R C

En C moderna (C89/90 o C99) que serían:

int yyerror(char *s) 
{ 
} 
+0

Guau, parece que nosotros (la generación más joven) no conocemos nuestras raíces. :) – rickythefox

+0

@rickythefox En realidad tengo 28 :-) –

4

Significa

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

código adjunto a su pregunta es simplemente otra forma de especificar tipos de argumentos de función.

1

GNU bisonte es ahora en la versión 2,5, ver here. ¿Por qué usas una versión tan antigua (te refieres a bison 1.25 de 1996)?

La función yyerror es para error recovery. Un simple ejemplo es here

+0

Gracias por el aviso. :) – rickythefox