2010-04-27 61 views
12

Tôi đang tìm ngữ pháp C trong mã nguồn GCC, cụ thể hơn cho ngữ pháp ở dạng yacc/bison.C ngữ pháp trong mã nguồn GCC

+6

Đó là một tuyên bố nhiều hơn câu hỏi? (Tôi đã quyết định đáp lại bằng cách diễn đạt câu nói của tôi như một câu hỏi. Vui vẻ!) –

+0

Bạn đã thử googling? Tôi đã tìm kiếm "ngữ pháp yacc c" và đưa ra http://www.lysator.liu.se/c/ANSI-C-grammar-y.html trong số nhiều lần truy cập khác. –

+0

@Neil, có lẽ nó không phải là những gì Hurkai có nghĩa, nhưng GCC có một số phần mở rộng C, và ngữ pháp C chung chung sẽ không chính xác phù hợp với nó. –

Trả lời

12

Tìm thấy ngữ pháp C trong đặc tả Yacc trong phiên bản GCC 3.3 trong file "c-parse.y"

+2

http://yaxx.googlecode.com/svn/branches/yaxx-proc/gcc-3.4.0/gcc/c-parse.y –

7

GCC của phiên bản 4.3 không chứa ngữ pháp C được viết rõ ràng. Phân tích cú pháp và phân tích ngữ nghĩa được thực hiện đồng thời, mà không trình bày cây cú pháp như một cấu trúc dữ liệu riêng biệt.

Nguồn thông tin: Tôi đọc mã nguồn GCC.

10

Bạn sẽ không tìm thấy tệp Caccmar yacc/bison trong mã nguồn GCC hiện tại. Nó đã được thực hiện trong quá khứ, trước khi các công cụ ngã ba egcs. Tôi không thể cung cấp cho bạn phiên bản chính xác và vị trí, nhưng tôi có thể cho bạn biết rằng nó phải được trong phiên bản 2.x

Phiên bản hiện tại của GCC có phân tích cú pháp C riêng của mình

+0

Vì vậy, có một đặc tả ngữ pháp trong mã nguồn GCC, phải không? Người được phân tích cú pháp bằng trình phân tích cú pháp C của GCC. Bạn có biết trong đó tập tin tôi tìm thấy nó? – Haruki

+0

@Hurkai bạn có thể tìm thấy nó trong các bình luận cho các chương trình con thực hiện phân tích cú pháp :-) –

7

g của GCC++ chuyển từ một yacc (bison) dựa trên phân tích cú pháp năm trước (có lẽ ít nhất 5 năm). Họ bắt đầu sử dụng một trình phân tích cú pháp phong nha đệ quy vì C++ rất khó trong yacc.

Sau khi sử dụng trình phân tích cú pháp này trong C++ trong vài năm, họ đã chuyển C sang phân tích cú pháp bằng cách sử dụng đệ quy phong nha.

Bạn sẽ phải quay lại một số phiên bản để định vị ngữ pháp ở định dạng bison, nhưng ở ngoài đó. Bạn nên cố gắng tìm kiếm mã google với

gcc yyparse

Cập nhật: Google Code Search Shutdown trong 2012

http://en.wikipedia.org/wiki/Google_Code_Search

Cũ: http://yaxx.googlecode.com/svn/branches/yaxx-proc/gcc-3.4.0/gcc/c-parse.y

để tìm một phiên bản của gcc có nó và sau đó bạn sẽ có thể tìm thấy tập tin nguồn yacc/bison trong đó. Nó sẽ là cũ, mặc dù.

+6

Tôi nghĩ bạn có nghĩa là _descent_, mặc dù trình phân tích cú pháp là _decent_ đủ :) –

4

GCC không sử dụng trình phân tích cú pháp được tạo; trình phân tích cú pháp của nó là một trình phân tích cú pháp đệ quy bằng tay đệ quy.

+1

nó đúng từ phiên bản 4.6+ – Jack

+1

@Jack: Thú vị! Bạn có thể chỉ cho tôi bất kỳ tài liệu nào không? Tôi biết họ đã chuyển * từ * một trình phân tích cú pháp được tạo thành * thành văn bản mới cho hiệu suất và (quan trọng hơn) các lý do bảo trì, có thể ở đâu đó trong khoảng thời gian 3.4–4.2 (tôi không nhớ chính xác). Những lý do để chuyển đổi trở lại và họ sử dụng trình tạo trình phân tích cú pháp nào? –

0

C ngữ pháp có thể được tìm thấy trong chú thích của c-phân tích cú pháp. c tệp trong các nguồn GCC. Nó không phải là một yacc/bison mặc dù như nó đã được nói.

Các vấn đề liên quan