2011-12-06 14 views
5

Tôi đang sử dụng Bison để tạo một trình phân tích cú pháp đơn giản và gặp khó khăn khi hiểu mã C bên dưới. Với tôi nó không giống như một câu lệnh hợp lệ, nhưng gcc comepiles nó gọn gàng và mã trong khối thực hiện trên lỗi phân tích cú pháp.Mã C lạ trong Bison (yyerror)

Tôi thực sự muốn biết điều này thực sự có ý nghĩa gì.

Code tôi tham khảo là từ http://dinosaur.compilertools.net/bison/bison_7.html#SEC66:

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

Trả lời

8

Đó là K&R C

Trong C hiện đại (C89/90 hoặc C99) mà sẽ là:

int yyerror(char *s) 
{ 
} 
+0

Chà, có vẻ như chúng ta (thế hệ trẻ) không biết nguồn gốc của chúng ta. :) – rickythefox

+0

@rickythefox Thực ra tôi là 28 :-) –

4

Nó có nghĩa

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

mã được gắn với câu hỏi của bạn chỉ là một cách khác để chỉ định các loại đối số chức năng.

1

GNU bison hiện đang ở phiên bản 2.5, xem here. Tại sao bạn sử dụng một phiên bản cổ như vậy (bạn tham khảo bison 1.25 từ năm 1996)?

Chức năng yyerror là dành cho error recovery. Một ví dụ đơn giản là here

+0

Cảm ơn bạn đã trưởng thành. :) – rickythefox