VC ++ kod DOM'a VS eklentilerinden erişilebilir mi?


100

Visual Studio IntelliSense for VC ++, "eksiksiz" EDG C ++ ayrıştırıcısını içerir (Intel ve diğerleri tarafından da kullanılır). C # Kod DOM eklentileri tarafından erişilebilir olduğundan (yanılıyorsam düzeltin), C ++ Kod DOM'a da erişilebilir mi? Bu, VS ortamında açık bir VC ++ projesini analiz etmek için kullanılabilir mi?


25
Sadece diğer ipliğinizden geldi ; bu güzel bir soru.
Qix - MONICA

81
Yine, "ne istediğinizi anlamadınız mı?" - gerçekten millet? "Bu sorunun dayanağı hakkında hiçbir şey bilmiyorum", "Ne sorduğunuzu bilmiyorum" anlamına gelmez.
Tim Post

9
@Dave - MS çalışanları olmayanların da bu sorunu çözebileceğini kanıtlamak için bir yanıt ekledim. Benim istediğime yakın şeyler yapmış insanlar var.
TheFlash

55
@DaveHillier Konuyla ilgiliyse, burada mükemmel bir şekilde karşılanır. Bunun ötesinde bir tartışma yok. "Buradaki kimse buna cevap verebilir mi?" daha sonra, sert herhangi bir şeyin potansiyel olarak cevaplanamaz olduğu bu tür yapışkan endişelere hızla yaklaşırız . Soruyu cevaplar için gerçekten açmadıkça , açıkçası kimin cevaplayabileceği konusunda somut bir fikrimiz yok . İlk etapta sormanın amacı budur.
Tim Post

49
@bmargulies Bu sorunun basitçe var olmasının ne zararı var? O çok ilginç, konuyla var ve birisi olabilir makul cevap. Heck, birisi gelen MS görüyoruz ve cevap ve sonra siteye büyük bir ektir olabilir. Olumlu bir şey görmeye çalışmadan önce lütfen bir soru hakkında potansiyel olarak olumsuz bir şey aramayı bırakın.
Tim Post

Yanıtlar:


22

Visual C ++ Refactoring uzatma projesi çapında bir üyeyi yeniden adlandırmak yapabiliyor. MS tarafından oluşturulmuştur, ancak açıkça bunu başarmak için dahili Kod DOM'u kullandılar. Yani mümkün, nasıl yapılacağını henüz bilmiyorum.

CppLister uzantısı bir sınıf içinde çeşitli üyeleri listelemek için VS tarafından oluşturulan intellisense veritabanlarını okuyabilecek.

Her zaman açık kaynaklı Clang C ++ ayrıştırıcısını (aslında derleyici) kullanabilir ve AST'yi bir C # Nesne Modeline okuyabilirsiniz. Clang'a C # bağlamaları için CppSharp ve ClangSharp'a bakın .


8

Varsa, "C ++ Kod DOM" un ne olduğundan emin değilim. Önemli olan, MSVS'nin, MSVS IDE eylemlerini desteklemek için sembollerin anlamını ayrıştırmak ve belirlemek için EDG ön ucunu kullanmasıdır. EDG IIRC, programı temsil eden kendi dahili veri yapılarını oluşturur; Bu veri yapılarının "C ++ Kod DOM" olduğuna veya sizin tarafınızdan görülebildiğine veya MSDN'de bunlar hakkında bilgi edinebileceğinize inanmak için hiçbir nedenim yok.

Asıl probleminiz, C ++ kaynak kodunu analiz etmek istemenizdir. Kabul ediyorum, EDG ön uç bilgilerine sahip olmanın bunu yapmak için önemli bir yardım olacağını; Eğer gerçekten gerçekten kendi C ++ ayrıştırıcı yazma girişimi istemiyorum (ve "ayrıştırma sonra yaşama" benim kompozisyon google, ayrıştırma geçmiş sürü gerekir).

Yani şu seçeneklere sahipsiniz:

  • MSVS'de EDG makinesine bir kapı bulun. Çok fazla şansınız olmadığından ve MS'den bunun mevcut olduğunu söyleyen hiçbir şey belgelenmediğinden, muhtemelen bu şekilde çok şansınız olmayacak. MS'in yerinde olsaydım, bunu halka açıklamazdım; bu sadece başka bir destek sorunudur ve onların bile olmayan bir yazılım parçası üzerinde.
  • Doğrudan gelen ticari EDG ön uç kullanın EDG . Anladığım kadarıyla, ücretsiz olarak bireysel kullanım lisansları sunuyorlar. (Anladığım kadarıyla yanlış olabilir). Bu şekilde, EDG ön ucunu kendiniz yapılandırmak zorunda kalmanız pahasına, MS'in erişim üzerindeki kısıtlamalarını atlarsınız. Bir dezavantaj: EDG, bir analizörün ön ucu değil, bir derleyicinin ön ucu olmak ister. Bu ayrım ince görünebilir ama muhtemelen sizi ısırır. Örneğin, EDG'nin yorumları çöpe attığından şüpheleniyorum; derleyici ön uçları bunlara ihtiyaç duymaz. Analizörünüzdeki yorumları incelemek istiyorsanız, bu gerçek bir sorun olabilir.
  • Clang kullanın . Bu, çok çeşitli program analizi amaçlarının yanı sıra bir C ++ derleyicisini ön uç için kullanmak üzere tasarlanmış açık kaynaklı bir C ++ ayrıştırıcısıdır. Bununla ilgili deneyimim yok, ancak oldukça iyi düşünülmüş görünüyor ve pek çok imkan sunuyor gibi görünüyor. C ++ MS lehçesi için özel bir desteği olup olmadığını bilmiyorum.
  • Başka bir ticari ön uç kullanın, bizim (DMS) C ++ Ön Ucumuz. Bunun mimarı olarak, iyi düşünülmüş olduğundan oldukça eminim (MS Visual C ++ desteği dahil); karmaşık C ++ analizi ve dönüştürme görevlerini gerçekleştirmek için bunu kullanma konusunda belirli bir deneyim vardır. EDG'den farklı olarak, analizi, dönüşümü ve üretimi desteklemek için tasarlanmıştır (örneğin, yorumları ve hatta değişmez değerlerin tabanını yakalar, böylece doğru şekilde yeniden oluşturulabilirler). Temel, DMS, özel analizi desteklemek için yerleşik birçok makineye sahiptir: AST ve sembol tablosu yapımı, öznitelik gramerleri, veri akışı çerçeveleri, AST düzeyinde intraprosedural kontrol ve veri akışı analizi, BDD yönetimi, kaynak model eşleşmeleri, kaynaktan -kaynak dönüşümleri. Clang ve EDG, AST ve sembol tablosu yapısı sunar; Clang (ancak EDG'nin akış analizine sahip olduğunu sanmıyorum) (LLVM düzeyinde), ancak AST seviyesinde (AFAIK) akış analizi değil. Ne Clang ne de EDG kaynak kalıbı / dönüştürme yeteneği sunmaz, bu nedenle hangisi daha iyi uzun vadeli görevlerinize bağlıdır. Diğer seçeneklerle karşılaştırıldığında, C ++ ön ucumuz açık kaynaklı veya ücretsiz değildir; araştırma lisansları alınabilir.

2
"DOM", temelde bir AST için HTML konuşmasıdır. Bununla birlikte, kurallı bir sözdizimi olduğunu varsayar, oysa C ++ derleyicileri genellikle biraz farklı sözdizimleri kullanır. (Örneğin, daha iyi hata mesajları oluşturmak için.).
MSalters

3
C # 'da DOM, kod oluşturmak için kullanılan "kötü çözünürlüklü AST" anlamına gelir. C ++ programlarını, C # dom'un sunduğu çözünürlük türüyle gerçekçi bir şekilde analiz edemezsiniz.
Ira Baxter

İyi bir C # codedom'un neler sunduğunu öğrenmek için inevitablesoftware.com/Products.aspx sayfasına bakın
TheFlash

@Geotarget: ve bir C # Dom'un soruyla ne ilgisi var?
Ira Baxter

@IraBaxter - "DOM Kodu" dediğimde aradığım şey - birçok kişi bir Kod DOM'un ne olduğunu anlamadıklarını ve / veya bunu JS HTML DOM ile karıştırdıklarını söyledi. Elbette bir C ++ uzmanı değilim (daha önce de belirttiğim gibi) bu nedenle, Inevitablesoftware'in çok basit ve kullanımı kolay bir DOM kodu sağladığını anladığım halde, bir C ++ kod DOM'da neye ihtiyaç duyulabileceğini bilmiyorum. benzer bir API'ye sahip bir C ++ kod DOM'u arayışındayım.
TheFlash
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.