Apakah kode VC ++ DOM dapat diakses dari add-on VS?

100

Visual Studio IntelliSense untuk VC ++ menyertakan parser EDG C ++ "lengkap" (juga digunakan oleh Intel dan lainnya). Karena C # Code DOM dapat diakses oleh addons (perbaiki saya jika saya salah), apakah C ++ Code DOM juga dapat diakses? Bisakah ini digunakan untuk menganalisis proyek VC ++ terbuka dalam lingkungan VS?

Kilat
sumber
25
Baru saja datang dari utas Anda yang lain ; ini pertanyaan yang bagus.
Qix - MONICA DISALAHKAN
81
Sekali lagi, "tidak jelas apa yang Anda tanyakan?" - benarkah kawan? "Saya tidak tahu apa-apa tentang premis pertanyaan ini" tidak berarti "Tidak jelas apa yang Anda tanyakan".
Tim Post
9
@ Dave - Saya telah menambahkan jawaban untuk membuktikan bahwa non-MS-karyawan dapat memecahkan masalah ini juga. Ada orang yang telah melakukan hal-hal yang mendekati apa yang saya inginkan.
TheFlash
55
@DaveHillier Jika sesuai dengan topik, sangat diterima di sini. Tidak ada diskusi di luar itu. Jika kita mulai bertanya "Adakah yang bisa menjawab ini?" kemudian kami dengan cepat mendekati jenis kecemasan yang melekat ini di mana segala sesuatu yang sulit berpotensi tidak dapat dijawab. Kecuali jika kita benar-benar membuka pertanyaan untuk mendapatkan jawaban , terus terang kita tidak memiliki gambaran konkret tentang siapa yang dapat menjawabnya. Itulah inti dari bertanya sejak awal.
Tim Post
49
@bmargulies Apa salahnya pertanyaan ini dilakukan hanya dengan ada? Ini sesuai topik, menarik, dan seseorang dapat menjawabnya. Heck, seseorang dari MS mungkin melihat ini dan menjawabnya, dan itu merupakan tambahan yang bagus untuk situs ini. Berhentilah mencari sesuatu yang berpotensi negatif tentang suatu pertanyaan sebelum mencoba melihat sesuatu yang positif.
Tim Post

Jawaban:

22

The Visual C ++ Refactoring ekstensi mampu mengubah nama anggota proyek-lebar. Itu dibangun oleh MS tetapi jelas mereka menggunakan DOM Kode internal untuk mencapai ini. Jadi mungkin saja, saya belum tahu caranya.

The CppLister ekstensi mampu membaca database intellisense yang dibuat oleh VS untuk daftar berbagai anggota dalam kelas.

Anda selalu dapat menggunakan parser Clang C ++ open source (sebenarnya kompiler) dan membaca AST ke dalam Model Objek C #. Lihat CppSharp dan ClangSharp untuk C # binding ke Clang.

Kilat
sumber
8

Saya tidak yakin apa itu "C ++ Code DOM", jika memang ada. Yang penting adalah bahwa MSVS menggunakan ujung depan EDG untuk mengurai dan menentukan arti simbol, untuk mendukung tindakan MSVS IDE. EDG IIRC membangun struktur data internalnya sendiri yang mewakili program; Saya tidak punya alasan untuk percaya bahwa struktur data tersebut adalah "C ++ Code DOM", atau bahwa mereka terlihat oleh Anda atau Anda akan dapat mengetahuinya di MSDN.

Masalah sebenarnya yang Anda nyatakan adalah Anda ingin menganalisis kode sumber C ++. Saya setuju, memiliki informasi ujung depan EDG akan menjadi bantuan yang signifikan untuk melakukan itu; Anda benar- benar tidak ingin mencoba menulis pengurai C ++ Anda sendiri (dan Anda memerlukan banyak hal setelah penguraian, google esai saya tentang "kehidupan setelah penguraian").

Jadi, Anda memiliki pilihan berikut:

  • Temukan pintu ke mesin EDG di MSVS. Karena Anda tidak memiliki banyak keberuntungan dan tampaknya tidak ada yang didokumentasikan dari MS yang mengatakan ini tersedia, Anda mungkin tidak akan beruntung dengan cara ini. Jika saya berada di posisi MS, saya tidak akan mempublikasikannya; itu hanya akan menjadi sakit kepala dukungan lainnya, dan pada perangkat lunak yang bahkan bukan milik mereka.
  • Gunakan ujung depan EDG komersial, langsung dari EDG . Pemahaman saya adalah mereka menawarkan lisensi penggunaan individu tanpa biaya. (Pemahaman saya mungkin salah). Dengan cara ini Anda melewati batasan apa pun yang mungkin dimiliki MS pada akses ... dengan harga harus mengonfigurasi front end EDG sendiri. Sisi negatifnya: EDG ingin menjadi ujung depan kompiler, bukan ujung depan penganalisis. Perbedaan itu mungkin tampak halus tetapi mungkin akan menggigit Anda. Misalnya, saya curiga EDG membuang komentar; compiler front end tidak membutuhkannya. Jika Anda ingin memeriksa komentar di penganalisis Anda, ini mungkin masalah yang nyata.
  • Gunakan Clang . Ini adalah parser C ++ open source, dirancang untuk digunakan untuk berbagai tujuan analisis program serta untuk front end kompiler C ++. Saya tidak memiliki pengalaman dengan ini, tetapi tampaknya dipikirkan dengan cukup matang, dan tampaknya menawarkan banyak fasilitas. Saya tidak tahu apakah itu memiliki dukungan khusus untuk dialek MS C ++.
  • Gunakan front end komersial lainnya, (DMS) C ++ Front End kami. Menjadi arsitek ini, saya cukup yakin itu dipikirkan dengan baik (termasuk dukungan untuk MS Visual C ++); ada pengalaman khusus dalam menggunakan ini untuk menjalankan tugas analisis dan transformasi C ++ yang kompleks. Tidak seperti EDG, EDG dirancang untuk mendukung analisis, transformasi, dan pembuatan (misalnya, menangkap komentar dan bahkan radix literal sehingga dapat dibuat ulang dengan benar). Fondasi, DMS, memiliki banyak mesin yang dibangun untuk mendukung analisis kustom: AST dan konstruksi tabel simbol, tata bahasa atribut, kerangka aliran data, kontrol intraprosedural dan analisis aliran data di tingkat AST, manajemen BDD, kecocokan pola sumber, sumber-ke transformasi -source. Clang dan EDG menawarkan konstruksi tabel AST dan simbol; Dentang (tapi menurut saya EDG) tidak memiliki analisis aliran (di tingkat LLVM), tetapi bukan analisis aliran di tingkat AST (AFAIK). Baik Clang maupun EDG tidak menawarkan pola sumber / kemampuan transformasi, jadi mana yang lebih baik bergantung pada tugas jangka panjang Anda. Dibandingkan dengan opsi lain, front end C ++ kami bukanlah open source atau gratis; seseorang bisa mendapatkan lisensi penelitian.
Ira Baxter
sumber
2
"DOM" pada dasarnya adalah bahasa HTML untuk AST. Itu mengasumsikan ada sintaks kanonik, sedangkan kompiler C ++ biasanya menggunakan sintaks yang sedikit berbeda. (Misalnya untuk membuat pesan kesalahan yang lebih baik.).
MSalters
3
DOM di C # berarti "AST dengan resolusi buruk" yang digunakan untuk pembuatan kode. Anda tidak dapat menganalisis program C ++ secara realistis dengan jenis resolusi yang ditawarkan C # dom.
Ira Baxter
Lihat inevitablesoftware.com/Products.aspx untuk apa yang baik C # penawaran CodeDom
TheFlash
@ Geotarget: dan apa hubungannya C # Dom dengan pertanyaan itu?
Ira Baxter
@IraBaxter - Apa yang saya cari ketika saya mengatakan "Code DOM" - banyak orang berkomentar bahwa mereka tidak mengerti apa itu Code DOM dan / atau mereka bingung dengan JS HTML DOM. Tentu saja saya bukan ahli C ++ (seperti yang telah saya nyatakan sebelumnya) jadi saya tidak tahu apa yang mungkin dibutuhkan dalam kode DOM C ++, meskipun saya mengerti bahwa perangkat lunak Inevitables menyediakan kode DOM yang sangat sederhana dan mudah digunakan, dan saya saya sedang mencari DOM kode C ++ dengan API serupa.
TheFlash