DOM code VC ++ có thể truy cập được từ các addon VS không?


100

Visual Studio IntelliSense cho VC ++ bao gồm trình phân tích cú pháp EDG C ++ "hoàn chỉnh" (cũng được sử dụng bởi Intel và những người khác). Vì DOM Mã C # có thể truy cập được đối với các phần bổ trợ (hãy sửa tôi nếu tôi sai), nên DOM Mã C ++ cũng có thể truy cập được? Điều này có thể được sử dụng để phân tích một dự án VC ++ mở trong môi trường VS không?


25
Chỉ đến từ chủ đề khác của bạn ; Đây là một câu hỏi hay.
Qix - MONICA ĐƯỢC HỖN HỢP

81
Một lần nữa, "không rõ bạn đang hỏi gì?" - thật không các bạn? "Tôi không biết gì về tiền đề của câu hỏi này" không có nghĩa là "Không rõ bạn đang hỏi gì".
Tim Post

9
@Dave - Tôi đã thêm một câu trả lời để chứng minh rằng những người không phải là nhân viên MS cũng có thể giải quyết vấn đề này. Có những người đã làm những việc gần với những gì tôi muốn.
TheFlash

55
@DaveHillier Nếu nó đúng chủ đề, nó hoàn toàn được chào đón ở đây. Không có cuộc thảo luận nào ngoài điều đó. Nếu chúng ta bắt đầu đi vào "Có ai ở đây thậm chí có thể trả lời điều này không?" sau đó, chúng tôi nhanh chóng tiếp cận loại đau thắt này, nơi mà bất cứ thứ gì cứng đều có khả năng không thể giải đáp được. Trừ khi chúng tôi thực sự mở câu hỏi để tìm câu trả lời , chúng tôi thực sự không có ý tưởng cụ thể về ai có thể trả lời nó. Đó là toàn bộ vấn đề cần hỏi ngay từ đầu.
Tim Post

49
@bmargulies Câu hỏi này có tác hại gì nếu chỉ tồn tại? Nó đúng chủ đề, nó thú vị và ai đó có thể hình dung được nó. Rất tiếc, ai đó từ MS có thể nhìn thấy điều này và trả lời nó, và sau đó nó là một bổ sung tuyệt vời cho trang web. Vui lòng ngừng tìm kiếm bất kỳ điều gì có khả năng tiêu cực về một câu hỏi trước khi cố gắng xem bất kỳ điều gì tích cực.
Tim Post

Câu trả lời:


22

Phần mở rộng Tái cấu trúc Visual C ++ có thể đổi tên toàn bộ dự án thành viên. Nó được xây dựng bởi MS nhưng rõ ràng là họ đã sử dụng Code DOM nội bộ để đạt được điều này. Vì vậy, có thể, tôi chỉ không biết làm thế nào, được nêu ra.

Phần mở rộng CppLister có thể đọc cơ sở dữ liệu intellisense do VS tạo ra để liệt kê các thành viên khác nhau trong một lớp.

Bạn luôn có thể sử dụng trình phân tích cú pháp mã nguồn mở Clang C ++ (thực chất là trình biên dịch) và đọc AST thành Mô hình đối tượng C #. Xem CppSharpClangSharp để biết các ràng buộc C # với Clang.


8

Tôi không chắc "C ++ Code DOM" là gì, nếu nó thậm chí tồn tại. Điều quan trọng là MSVS đang sử dụng giao diện người dùng EDG để phân tích cú pháp và xác định ý nghĩa của các ký hiệu, nhằm hỗ trợ các hành động MSVS IDE. EDG IIRC xây dựng cấu trúc dữ liệu nội bộ của riêng mình đại diện cho chương trình; Tôi không có lý do gì để tin rằng các cấu trúc dữ liệu đó là "C ++ Code DOM", hoặc chúng hiển thị với bạn hoặc bạn có thể tìm hiểu về chúng tại MSDN.

Vấn đề thực sự đã nêu của bạn là bạn muốn phân tích mã nguồn C ++. Tôi đồng ý, có thông tin giao diện người dùng EDG sẽ là một trợ giúp đáng kể để làm điều đó; bạn thực sự không muốn cố gắng viết trình phân tích cú pháp C ++ của riêng mình (và bạn cần rất nhiều thứ trong quá trình phân tích cú pháp, hãy google bài luận của tôi về "cuộc sống sau khi phân tích cú pháp").

Vì vậy, bạn có những lựa chọn sau:

  • Tìm một cánh cửa vào máy EDG trong MSVS. Vì bạn không gặp nhiều may mắn và dường như không có tài liệu nào từ MS nói rằng điều này là có sẵn, nên bạn có thể sẽ không gặp nhiều may mắn theo cách này. Nếu tôi ở trong vị trí của MS, tôi sẽ không công khai nó; nó sẽ chỉ là một vấn đề đau đầu về hỗ trợ khác, và trên một phần mềm thậm chí không phải của họ.
  • Sử dụng giao diện người dùng EDG thương mại, trực tiếp từ EDG . Tôi hiểu là họ cung cấp giấy phép sử dụng cá nhân miễn phí. (Sự hiểu biết của tôi có thể sai). Bằng cách này, bạn bỏ qua bất kỳ hạn chế nào mà MS có thể có khi truy cập ... với cái giá là phải tự định cấu hình giao diện người dùng EDG. Nhược điểm: EDG muốn trở thành giao diện người dùng của một trình biên dịch, không phải là giao diện người dùng của một máy phân tích. Sự phân biệt đó có vẻ tinh vi nhưng nó có thể sẽ cắn bạn. Ví dụ, tôi nghi ngờ EDG ném bình luận đi; giao diện người dùng của trình biên dịch không cần chúng. Nếu bạn muốn kiểm tra các nhận xét trong máy phân tích của mình, đây có thể là một vấn đề thực sự.
  • Sử dụng Clang . Đây là một trình phân tích cú pháp C ++ mã nguồn mở, được thiết kế để sử dụng cho nhiều mục đích phân tích chương trình cũng như cho phần cuối của trình biên dịch C ++. Tôi không có kinh nghiệm về việc này, nhưng có vẻ như nó đã được suy nghĩ khá kỹ và dường như cung cấp rất nhiều tiện ích. Tôi không biết liệu nó có hỗ trợ cụ thể cho phương ngữ MS của C ++ hay không.
  • Sử dụng giao diện người dùng thương mại khác, Giao diện người dùng C ++ (DMS) của chúng tôi. Là kiến ​​trúc sư của điều này, tôi khá chắc chắn rằng nó đã được suy nghĩ kỹ càng (bao gồm hỗ trợ cho MS Visual C ++); có kinh nghiệm cụ thể về việc sử dụng nó để thực hiện các nhiệm vụ phân tích và chuyển đổi C ++ phức tạp. Không giống như EDG, nó được thiết kế để hỗ trợ phân tích, chuyển đổi và tạo (ví dụ: nó ghi lại các nhận xét và thậm chí cả cơ số của các ký tự để chúng có thể được tạo lại một cách chính xác). Nền tảng, DMS, có rất nhiều máy móc được tích hợp để hỗ trợ phân tích tùy chỉnh: AST và xây dựng bảng ký hiệu, ngữ pháp thuộc tính, khung luồng dữ liệu, kiểm soát nội bộ và phân tích luồng dữ liệu ở cấp độ AST, quản lý BDD, khớp mẫu nguồn, nguồn-to -các phép biến đổi nguồn. Clang và EDG cung cấp AST và xây dựng bảng biểu tượng; Clang (nhưng tôi không nghĩ EDG) có phân tích luồng (ở cấp độ LLVM), nhưng không phân tích dòng chảy ở cấp độ AST (AFAIK). Cả Clang và EDG đều không cung cấp khả năng chuyển đổi / mẫu nguồn, vì vậy loại nào tốt hơn phụ thuộc vào các nhiệm vụ dài hạn của bạn. So với các tùy chọn khác, giao diện người dùng C ++ của chúng tôi không phải là mã nguồn mở hoặc miễn phí; người ta có thể nhận được giấy phép nghiên cứu.

2
Về cơ bản, "DOM" là ngôn ngữ HTML cho AST. Tuy nhiên, nó giả sử có một cú pháp chính tắc, trong khi các trình biên dịch C ++ thường sử dụng các cú pháp hơi khác. (Ví dụ: để tạo ra các thông báo lỗi tốt hơn.).
MSalters

3
DOM trong C # có nghĩa là "AST có độ phân giải kém" được sử dụng để tạo mã. Bạn không thể phân tích thực tế các chương trình C ++ với loại độ phân giải mà C # dom cung cấp.
Ira Baxter

Hãy xem tránh khỏi những gì một mã C # tốt mang lại
TheFlash

@Geotarget: và C # Dom có ​​liên quan gì đến câu hỏi?
Ira Baxter

@IraBaxter - Điều tôi đang tìm kiếm khi nói "Code DOM" - nhiều người đã nhận xét rằng họ không hiểu Code DOM là gì và / hoặc họ nhầm lẫn nó với JS HTML DOM. Tất nhiên tôi không phải là chuyên gia C ++ (như tôi đã nói trước đây) nên tôi không biết những gì có thể cần thiết trong DOM mã C ++, mặc dù tôi hiểu rằng Inevitablesoftware cung cấp một DOM mã rất đơn giản và dễ sử dụng, và tôi đang tìm kiếm DOM mã C ++ có API tương tự.
TheFlash
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.