2010-02-17 31 views
11

Có cách nào để sử dụng trình phân tích cú pháp llvm-clang theo cách gia tăng/trực tuyến không?llvm-clang: trình phân tích cú pháp gia tăng hoặc trực tuyến?

Giả sử tôi đang viết trình chỉnh sửa và tôi muốn có thể phân tích cú pháp mã C++ mà tôi có trước mặt mình.

Tôi không muốn viết trình phân tích cú pháp bị tấn công của riêng mình.

Tôi muốn sử dụng một cái gì đó đầy đủ tính năng, như llvm-clang.

Có cách nào dễ dàng để chiếm đoạt trình phân tích cú pháp llvm-clang không? (Và có đủ nhanh để chạy liên tục trong nền) không?

Cảm ơn!

+0

Ai đó muốn tạo bản sao Visual Studio [để phát hiện lỗi trước khi biên soạn] :) – Earlz

+0

Dự án thú vị. Tôi đã chờ đợi một thời gian cho một người nào đó để viết một IDE dựa trên Clang. Nếu bạn kết thúc việc xây dựng một IDE đầy đủ, hãy xem xét sử dụng CMake làm các tệp hệ thống/dự án xây dựng của nó. – Tronic

+3

Có lẽ libclang của ['clang_reparseTranslationUnit()'] (http://clang.llvm.org/doxygen/group__CINDEX__TRANSLATION__UNIT.html#ga524e76bf2a809d037934d4be51ea448a) có thể đáp ứng nhu cầu của bạn? – bames53

Trả lời

3

Tôi không nghĩ kêu vang từng bước có thể phân tích các file C++, nhưng nó là một trong những mục tiêu dự án này: http://clang.llvm.org/features.html

Tôi đã viết một cái gì đó tương tự như đối với dự án năm cuối cùng của tôi. Nó không phải là trình soạn thảo C++, mà là một plugin Visual Studio, mà nhiệm vụ chính đã được cải thiện C++ intellisense (như Visual Assist X).

Khi tôi đang viết dự án này, tôi cũng đã suy nghĩ về trình phân tích cú pháp gia tăng C++, nhưng tôi chưa tìm thấy giải pháp phù hợp nào. Để giải quyết vấn đề intelliSense C++, tôi đã sử dụng trình phân tích cú pháp C++ bình thường từ GCC. Tuy nhiên nó đã được làm chậm, để phân tích cú pháp tập tin sau mỗi yêu cầu hoàn thành mã (ctrl + không gian), chỉ cần thử bao gồm tăng :: tinh thần. Để làm cho dự án này hoạt động đúng cách, tôi phân tích các tệp trong nền và sau mỗi yêu cầu hoàn thành mã, tôi đã so sánh tệp hiện tại với phiên bản trước đó (thông qua khác) để phát hiện các thay đổi được thực hiện từ phân tích cú pháp cuối cùng. Có những thay đổi đó, tôi đã cập nhật cây cú pháp, chủ yếu bằng cách thêm hoặc xóa các biến.

Ngoại trừ phân tích gia tăng, cũng có một vấn đề khác với các dự án như thế này. Chủ yếu là bạn sẽ phân tích cú pháp mã C++ đang được chỉnh sửa để mã không hợp lệ. Với ngữ pháp C++ phức tạp, đôi khi trình phân tích cú pháp sẽ không thể phục hồi từ các lỗi cú pháp, vì vậy nó sẽ không phát hiện chính xác một số ký hiệu trong mã.

Một vấn đề khác là trình phân tích cú pháp/trình biên dịch C++. Hãy nói rằng tôi đang sử dụng làm việc trong Visual Studio và tôi đã sử dụng một số VC + + trình biên dịch cụ thể trong mã của tôi. Trình phân tích cú pháp Clang sẽ không thể phân tích cú pháp chính xác.

0

Để viết một cái gì đó similair cho IntelliSense, tôi khuyên bạn nên viết trình phân tích cú pháp của riêng bạn bằng thuật toán phân tích cú pháp LALR. Vì bạn có thể lưu trạng thái của nó trong mỗi dòng, do đó bạn không phải sao chép toàn bộ tệp khi tệp đã được chỉnh sửa, rất nhanh!
Lưu ý rằng C++ không thể được thể hiện đầy đủ trong BNF, nhưng tôi nghĩ bạn có thể nhận được khá xa với một số điều chỉnh. Đó là ofcourse rất nhiều công việc hơn bằng cách sử dụng lối vào của Clang, nhưng bạn vẫn có thể sử dụng Clang để phân tích các tập tin tiêu đề trong coöperation với bạn sở hữu bằng văn bản phân tích cú pháp.

+0

Vấn đề là rất khó để có được trình phân tích cú pháp C++ ngay. Bất cứ điều gì bạn viết có thể không có hành vi chính xác của trình biên dịch thực tế. Lý tưởng nhất, và đây là một trong những mục tiêu của dự án clang, cùng một thư viện được sử dụng để xây dựng trình biên dịch có thể được tái sử dụng bởi IDE để có được kết quả nhất quán. – bames53

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