2011-01-19 11 views
7

Làm cách nào để thêm từ khóa mới vào tiếng kêu? Từ khóa mới phải là bộ định tính hàm. Phần khai báo ở đâu?Làm cách nào để bạn có thể thêm từ khóa mới vào tiếng kêu, từ khóa sẽ được coi là chính?

Cảm ơn.

+0

nghe có vẻ như bạn cần phải say mê vào phần phân tích và lexing cho clang/LLVM và đi từ đó, tôi nghi ngờ bạn có thể nhận được trợ giúp tốt hơn từ danh sách gửi thư của clang – Necrolis

+0

Tôi đã chỉnh sửa IdentifierTabe.cpp và thêm các từ khóa mới TokenKinds.def như xa như từ phân tích cú pháp và lexing tôi không thể tìm thấy hành vi của chính từ C như tôi không biết nơi nó được xác định. –

+0

[Một trong những nhược điểm của Clang so với Elsa] (http://clang.llvm.org/comparison.html#elsa) là Elsa sử dụng một trình phân tích cú pháp tốt đẹp hoàn toàn dựa trên các quy tắc ngữ pháp. Tôi đã luôn luôn tự hỏi tại sao các nhà phát triển Clang không chọn viết trình phân tích cú pháp của họ theo cùng một cách ... – peoro

Trả lời

7

Bạn phải thêm nó để bao gồm/clang/Basic/TokenKinds.def, và sau đó thêm trường hợp mới vào ParseDeclarationSpecifiers (...).

lẽ là một lựa chọn dễ dàng hơn sẽ được xác định một thuộc tính mới, và sau đó sử dụng

#define your_new_qualifier __attribute__((your_new_attribute))

Nếu không, bạn sẽ phải hỗ trợ thêm vòng loại này với AST, mà có thể là dễ bị lỗi, trong khi các thuộc tính được truyền tự động trên các khai báo khác nhau của cùng một hàm.

+0

Tôi xác định hành vi của mình ở đâu? là có bất kỳ tài liệu về nơi được thực hiện hành vi, bên cạnh mã? –

+1

Tôi chưa thấy bất kỳ tài liệu nào về khía cạnh đặc biệt này của Clang, nhưng nó khá dễ dàng để sao chép và dán những thứ tương tự - trong trường hợp của bạn, nó sẽ là một thực hiện 'nội tuyến', ví dụ (cái này là trong AST), hoặc thuộc tính không gian địa chỉ cho tùy chọn thứ hai. –

+1

Trong đó, chúng tôi cần phải làm #define your_new_qualifier __attribute __ ((your_new_attribute)) và nơi để thêm "your_new_attribute" –

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