Tôi đã xem xét frama-c như một cách để xử lý các tệp tiêu đề C trong OCaml (ví dụ: để tạo các ràng buộc ngôn ngữ). Nó hấp dẫn bởi vì nó có vẻ giống như một dự án được lưu trữ rất tốt và duy trì. Tuy nhiên, sau rất nhiều googling và tìm kiếm thông qua các tài liệu, tôi không thể tìm thấy bất cứ điều gì phù hợp cho mục đích này. Tôi chỉ thiếu đúng cách để làm điều này, hay nó nằm ngoài phạm vi của frama-c? Nó có vẻ như một điều khá tầm thường cho nó để làm, so với một số các plugin khác.Có thể sử dụng frama-c để phân tích tệp tiêu đề không?
Trả lời
Như Pascal nói, tôi không nghĩ rằng nó có thể từ dòng lệnh, nhưng vì bạn sẽ phải viết một số mã, bạn có thể đặt cờ Rmtmps.keepUnused
. Đây là một kịch bản mà bạn có thể sử dụng để xem các tờ khai:
let main() =
Rmtmps.keepUnused := true;
let file = File.from_filename "t.h" in
let() = File.init_from_c_files [ file ] in
let _ast = Ast.get() in
let show_function f =
let name = Kernel_function.get_name f in
if not (Cil.Builtin_functions.mem name) then
Format.printf "Function @[<2>%a:@ @[@[type: %[email protected]]@ @[%s at %[email protected]]@]@]@."
Kernel_function.pretty f
Cil_datatype.Typ.pretty (Kernel_function.get_type f)
(if Kernel_function.is_definition f then "defined" else "declared")
Cil.d_loc (Kernel_function.get_location f)
in Globals.Functions.iter show_function
let() = Db.Main.extend main
Để chạy nó, bạn phải sử dụng tùy chọn -load-script
như thế này:
$ frama-c -load-script script.ml
đang phát triển một plug-in sẽ phù hợp hơn để xử lý phức tạp hơn (xem Hướng dẫn dành cho nhà phát triển cho điều đó), nhưng một tập lệnh giúp bạn dễ dàng kiểm tra.
cảm ơn! sợ tôi phải từ bỏ frama-c –
Trong trạng thái hiện tại, tôi có thể nói rằng rất tiếc là không thể sử dụng Frama-C để phân tích cú pháp các khai báo hàm không được xác định hoặc sử dụng.
t.h:
int mybinding (int x, int y);
này cung cấp cho bạn một cái nhìn của AST bình thường. Bình thường có nghĩa là tất cả những gì có thể được đơn giản hóa là:
$ frama-c -print t.h
[kernel] preprocessing with "gcc -C -E -I. t.h"
/* Generated by Frama-C */
Và thật không may, vì mybinding
đã không sử dụng cũng không được xác định, nó đã bị xóa.
Có một tùy chọn để giữ cho các khai báo có thông số kỹ thuật, nhưng những gì bạn muốn là một tùy chọn để giữ tất cả các khai báo. Tôi chưa bao giờ thấy một tùy chọn như:
$ frama-c -kernel-help
...
-keep-unused-specified-functions keep specified-but-unused functions (set by
default, opposite option is
-remove-unused-specified-functions)
Và tùy chọn để giữ chức năng với thông số kỹ thuật không làm những gì bạn muốn:
$ frama-c -keep-unused-specified-functions -print t.h
[kernel] preprocessing with "gcc -C -E -I. t.h"
/* Generated by Frama-C */
- 1. Phân tích tiêu đề mục tiêu-C
- 2. Sử dụng R để phân tích các tệp csym Surveymonkey
- 3. Phân tích cú pháp tiêu đề HTTP
- 4. Làm cách nào để phân tích cú pháp tệp tiêu đề C?
- 5. Sử dụng ANTLR để phân tích tĩnh tệp nguồn Java
- 6. Tiêu đề bao gồm các công cụ phân tích tĩnh?
- 7. Sử dụng JavaScript để phân tích cú pháp tệp XML
- 8. Phân tích cú pháp tiêu đề HTTP_RANGE trong PHP
- 9. csv phân tích cú pháp đọc tiêu đề
- 10. Bạn có thể sử dụng gzip qua SSL không? Và kết nối: Tiêu đề Keep-Alive
- 11. Không thể phân tích cú pháp html sử dụng lxml XPath phân tích cú pháp
- 12. Không thể phân tích mảng Json sử dụng Gson
- 13. Không thể phân tích ngày sử dụng NSDateFormatter
- 14. Hộp thoại phân đoạn không có vấn đề Tiêu đề
- 15. Các tệp .lib có vô dụng nếu không có tệp tiêu đề không?
- 16. Bạn có thể sử dụng Boost.Regex để phân tích cú pháp luồng không?
- 17. Email phân tích cú pháp "Đã nhận:" tiêu đề
- 18. Phân tích cú pháp Tiêu đề HTTP thô
- 19. Xây dựng và phân tích Xcode - Có thể cố ý bỏ qua phân tích trên một tệp cụ thể không?
- 20. Bạn có thể sử dụng UIAppearance để đặt chế độ xem tiêu đề của UINavigationItem không?
- 21. Cách tốt nhất để phân tích không gian Ly Tiêu
- 22. Git: cách phân tích mã có lịch sử nhiều tệp?
- 23. Có một trình phân tích cú pháp/cách nào có sẵn để phân tích cú pháp các tệp kết xuất Wikipedia bằng cách sử dụng Python không?
- 24. Có thể sử dụng phân tích google cho phía máy chủ không?
- 25. Phân tích tệp nhị phân trong Ruby
- 26. Cách sử dụng phân tích google từ tệp ngọc bích
- 27. Sử dụng Parsec của Haskell để phân tích các tệp nhị phân?
- 28. Cách sử dụng chức năng từ thư viện tĩnh nếu tôi không có tệp tiêu đề
- 29. Phân tích tệp (ics/icalendar) bằng cách sử dụng Python
- 30. Phân tích không gian tên bằng tiếng kêu: AST khác biệt khi bao gồm tiêu đề trong tệp nguồn khác hoặc phân tích cú pháp trực tiếp
Đây có thể là gợi ý cilly vì tôi không chắc chắn về những gì nó làm chính xác, nhưng có thể [CIL] (http://kerneis.github.com/cil/) giúp bạn? –
cảm ơn con trỏ - sẽ lướt qua tài liệu cil và xem nó có bất cứ điều gì hữu ích –