รหัส VC ++ DOM สามารถเข้าถึงได้จาก VS addons หรือไม่


100

Visual Studio IntelliSense สำหรับ VC ++ ประกอบด้วยตัวแยกวิเคราะห์ EDG C ++ ที่ "สมบูรณ์" (ยังใช้โดย Intel และอื่น ๆ ) เนื่องจาก C # Code DOM สามารถเข้าถึง addons ได้ (แก้ไขฉันถ้าฉันผิด) C ++ Code DOM จึงสามารถเข้าถึงได้หรือไม่ สิ่งนี้สามารถใช้วิเคราะห์โครงการ VC ++ แบบเปิดภายในสภาพแวดล้อม VS ได้หรือไม่


25
เพิ่งมาจากหัวข้ออื่น ๆ ; นี่เป็นคำถามที่ดี
Qix - MONICA MISTREATED

81
อีกครั้ง "ไม่ชัดเจนว่าคุณกำลังถามอะไร" - คนจริงๆ ? "ฉันไม่รู้อะไรเลยเกี่ยวกับหลักฐานของคำถามนี้" ไม่ได้หมายความว่า "ไม่ชัดเจนว่าคุณกำลังถามอะไร"
Tim Post

9
@Dave - ฉันได้เพิ่มคำตอบเพื่อพิสูจน์ว่าไม่ใช่พนักงาน MS ก็สามารถแก้ปัญหานี้ได้เช่นกัน มีคนที่เคยทำสิ่งที่ใกล้เคียงกับที่ฉันต้องการ
TheFlash

55
@DaveHillier ถ้าเป็นหัวข้อก็ยินดีต้อนรับที่นี่ ไม่มีการอภิปรายนอกเหนือจากนั้น หากเราเริ่มเข้าสู่ "มีใครสามารถตอบคำถามนี้ได้ไหม" จากนั้นเราก็เข้าใกล้ความทุกข์ยากแบบนี้อย่างรวดเร็วโดยที่อะไรก็ตามที่ยากจะไม่สามารถแก้ไขได้ เว้นแต่เราจะเปิดคำถามเพื่อหาคำตอบอย่างตรงไปตรงมาเราไม่มีความคิดที่เป็นรูปธรรมว่าใครจะตอบได้ นั่นคือจุดรวมของการถามตั้งแต่แรก
Tim Post

49
@bmargulies คำถามนี้ทำอันตรายอะไรโดยมีอยู่แล้ว? มันอยู่ในหัวข้อก็น่าสนใจและบางคนอาจจะกลัวคำตอบนั้น Heck บางคนจาก MS อาจเห็นสิ่งนี้และตอบคำถามแล้วมันก็เป็นส่วนเสริมที่ยอดเยี่ยมสำหรับไซต์นี้ โปรดหยุดมองหาสิ่งที่อาจเป็นลบเกี่ยวกับคำถามก่อนที่จะพยายามมองสิ่งที่เป็นบวก
Tim Post

คำตอบ:


22

การปรับโครงสร้างVisual C ++ขยายสามารถที่จะเปลี่ยนชื่อเป็นสมาชิกโครงการกว้าง สร้างโดย MS แต่เห็นได้ชัดว่าพวกเขาใช้ Code DOM ภายในเพื่อให้บรรลุสิ่งนี้ มันเป็นไปได้ยังไงก็ไม่รู้

CppListerขยายสามารถอ่านฐานข้อมูล IntelliSense ที่สร้างขึ้นโดย VS ไปยังรายชื่อสมาชิกภายในชั้นเรียน

คุณสามารถใช้ตัวแยกวิเคราะห์ Clang C ++ แบบโอเพนซอร์สได้ตลอดเวลา (คอมไพเลอร์จริงๆ) และอ่าน AST ในรูปแบบวัตถุ C # ดูCppSharpและClangSharpสำหรับการเชื่อม C # กับ Clang


8

ฉันไม่แน่ใจว่า "C ++ Code DOM" คืออะไรถ้ายังมีอยู่ สิ่งที่สำคัญคือ MSVS ใช้ส่วนหน้า EDG เพื่อแยกวิเคราะห์และกำหนดความหมายของสัญลักษณ์เพื่อสนับสนุนการดำเนินการ MSVS IDE EDG IIRC สร้างโครงสร้างข้อมูลภายในของตนเองซึ่งเป็นตัวแทนของโปรแกรม ฉันไม่มีเหตุผลที่จะเชื่อว่าโครงสร้างข้อมูลเหล่านั้นเป็น "C ++ Code DOM" หรือว่าคุณสามารถมองเห็นได้หรือคุณสามารถหาข้อมูลเกี่ยวกับโครงสร้างเหล่านี้ได้ที่ MSDN

ปัญหาที่ระบุไว้จริงของคุณคือคุณต้องการวิเคราะห์ซอร์สโค้ด C ++ ฉันเห็นด้วยการมีข้อมูลส่วนหน้าของ EDG จะเป็นตัวช่วยที่สำคัญในการทำเช่นนั้น คุณจริงๆ จริงๆไม่ต้องการที่จะพยายามที่จะเขียน C ++ ของคุณเอง parser (และคุณต้องการจำนวนมากของสิ่งที่ผ่านมาแยก, google เรียงความของฉันเกี่ยวกับ "ชีวิตหลังแยก")

ดังนั้นคุณจึงมีทางเลือกดังต่อไปนี้:

  • ค้นหาประตูสู่เครื่องจักร EDG ใน MSVS เนื่องจากคุณไม่มีโชคมากนักและดูเหมือนจะไม่มีเอกสารใด ๆ จาก MS ที่บอกว่ามีให้ใช้งานคุณอาจไม่มีโชคมากนักด้วยวิธีนี้ ถ้าฉันอยู่ในรองเท้าของ MS ฉันจะไม่เปิดเผยต่อสาธารณะ มันจะเป็นอีกเรื่องที่น่าปวดหัวในการสนับสนุนและซอฟต์แวร์ที่ไม่ใช่ของพวกเขา
  • ใช้ส่วนหน้า EDG เชิงพาณิชย์โดยตรงจากEDG EDGความเข้าใจของฉันคือพวกเขาเสนอใบอนุญาตการใช้งานส่วนบุคคลโดยไม่มีค่าใช้จ่าย (ความเข้าใจของฉันอาจผิด). ด้วยวิธีนี้คุณจะข้ามข้อ จำกัด ใด ๆ ที่ MS อาจมีในการเข้าถึง ... ในราคาที่ต้องกำหนดค่าส่วนหน้า EDG ด้วยตัวคุณเอง ข้อเสีย: EDG ต้องการเป็นส่วนหน้าของคอมไพเลอร์ไม่ใช่ส่วนหน้าของเครื่องวิเคราะห์ ความแตกต่างนั้นอาจดูบอบบาง แต่มันอาจจะกัดคุณ ตัวอย่างเช่นฉันสงสัยว่า EDG แสดงความคิดเห็นออกไป ส่วนหน้าของคอมไพเลอร์ไม่จำเป็นต้องใช้ หากคุณต้องการตรวจสอบความคิดเห็นในเครื่องวิเคราะห์ของคุณนี่อาจเป็นปัญหาที่แท้จริง
  • ใช้เสียงดัง นี่คือตัวแยกวิเคราะห์ C ++ แบบโอเพนซอร์สซึ่งออกแบบมาเพื่อใช้สำหรับวัตถุประสงค์ในการวิเคราะห์โปรแกรมที่หลากหลายรวมทั้งสำหรับส่วนหน้าของคอมไพเลอร์ C ++ ฉันไม่มีประสบการณ์เกี่ยวกับเรื่องนี้ แต่ดูเหมือนว่าจะค่อนข้างดีและดูเหมือนจะมีสิ่งอำนวยความสะดวกมากมาย ฉันไม่ทราบว่ามีการสนับสนุนเฉพาะสำหรับภาษา MS ของ C ++ หรือไม่
  • ใช้ส่วนหน้าเชิงพาณิชย์อื่น(DMS) C ++ Front End ของเรา. ในฐานะสถาปนิกนี้ฉันค่อนข้างมั่นใจว่ามีการคิดมาอย่างดี (รวมถึงการรองรับ MS Visual C ++) มีประสบการณ์เฉพาะในการใช้สิ่งนี้เพื่อดำเนินการวิเคราะห์ C ++ ที่ซับซ้อนและงานแปลงร่าง แตกต่างจาก EDG คือได้รับการออกแบบมาเพื่อรองรับการวิเคราะห์การเปลี่ยนแปลงและการสร้าง (เช่นบันทึกความคิดเห็นและแม้แต่รัศมีของตัวอักษรเพื่อให้สามารถสร้างใหม่ได้อย่างถูกต้อง) พื้นฐาน DMS มีเครื่องจักรจำนวนมากในตัวเพื่อรองรับการวิเคราะห์แบบกำหนดเอง: AST และการสร้างตารางสัญลักษณ์ไวยากรณ์แอตทริบิวต์กรอบการไหลของข้อมูลการควบคุมภายในและการวิเคราะห์การไหลของข้อมูลในระดับ AST การจัดการ BDD การจับคู่รูปแบบต้นทางแหล่งที่มา การแปลงแหล่งที่มา Clang และ EDG นำเสนอ AST และการสร้างตารางสัญลักษณ์ เสียงดัง (แต่ฉันไม่คิดว่า EDG) มีการวิเคราะห์การไหล (ที่ระดับ LLVM) แต่ไม่ใช่การวิเคราะห์การไหลที่ระดับ AST (AFAIK) ทั้ง Clang และ EDG ไม่ได้นำเสนอรูปแบบแหล่งที่มา / ความสามารถในการแปลงดังนั้นสิ่งที่ดีกว่าขึ้นอยู่กับงานระยะยาวของคุณ เมื่อเทียบกับตัวเลือกอื่น ๆ ส่วนหน้า C ++ ของเราไม่ใช่โอเพ่นซอร์สหรือฟรี สามารถรับใบอนุญาตการวิจัย

2
"DOM" คือ HTML พูดสำหรับ AST โดยพื้นฐานแล้ว สมมติว่ามีไวยากรณ์ที่ยอมรับได้ในขณะที่คอมไพเลอร์ C ++ มักใช้ไวยากรณ์ที่แตกต่างกันเล็กน้อย (เช่นเพื่อสร้างข้อความแสดงข้อผิดพลาดที่ดีขึ้น)
MSalters

3
DOM ใน C # หมายถึง "AST ที่มีความละเอียดไม่ดี" ที่ใช้สำหรับการสร้างโค้ด คุณไม่สามารถวิเคราะห์โปรแกรม C ++ ได้ตามความเป็นจริงด้วยประเภทความละเอียดที่ C # dom เสนอ
Ira Baxter

ดูที่หลีกเลี่ยงไม่ได้ซอฟแวร์.com/Products.aspxสำหรับข้อเสนอ C # codedom ที่ดี
TheFlash

@Geotarget: แล้ว C # Dom เกี่ยวอะไรกับคำถาม?
Ira Baxter

@IraBaxter - สิ่งที่ฉันกำลังมองหาเมื่อพูดว่า "Code DOM" - หลายคนแสดงความคิดเห็นว่าพวกเขาไม่เข้าใจว่า Code DOM คืออะไรและ / หรือพวกเขาสับสนกับ JS HTML DOM แน่นอนว่าฉันไม่ใช่ผู้เชี่ยวชาญ C ++ (ตามที่ฉันได้ระบุไว้ก่อนหน้านี้) ดังนั้นฉันจึงไม่รู้ว่าจะต้องมีอะไรบ้างใน DOM ของโค้ด C ++ แม้ว่าฉันจะเข้าใจว่าซอฟต์แวร์ที่หลีกเลี่ยงไม่ได้นั้นมีรหัส DOM ที่เรียบง่ายและใช้งานง่ายและฉัน กำลังมองหา DOM รหัส C ++ ที่มี API คล้ายกัน
TheFlash
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.