सामग्री पर जाएँ
cd /languages
  • सिस्टम की नींव
  • प्रोग्रामिंग
  • AST और सिंबल सपोर्ट

Maguyva में C: सिस्टम और एम्बेडेड कोड के लिए कॉल ग्राफ़

Maguyva, C को AST, सिंबल और ग्राफ़ के साथ सपोर्ट करता है, ताकि AI एजेंट सिस्टम, फ़र्मवेयर और लाइब्रेरी कोड में फ़ंक्शन, structs, इनक्लूड और कॉलर ट्रेस कर सकें।

C को grep की नहीं, कॉल ग्राफ़ की ज़रूरत क्यों है

C में कोड को व्यवस्थित करने के लिए क्लास या मॉड्यूल नहीं होते। संरचना फ़ंक्शन कॉल, हेडर और structs में रहती है, और वही नाम कमेंट, मैक्रो और स्ट्रिंग लिटरल में भी आ सकता है। Export और एनोटेशन मैक्रो घोषणाओं को लपेट देते हैं, जिससे सिर्फ़ शुद्ध C पार्स करने वाले टूल उलझ जाते हैं। एजेंट के लिए सुरक्षित पहला कदम कॉल ग्राफ़ है।

Maguyva यह ग्राफ़ बनाता है, ताकि एजेंट बदलाव सुझाने से पहले देख सके कि कोई फ़ंक्शन कहाँ तक पहुँचता है और उस तक क्या पहुँचता है।

Maguyva, C से क्या निकालता है

Maguyva .c और .h को कवर करता है। फ़ंक्शन परिभाषाएँ सिंबल के रूप में निकाली जाती हैं, और structs व unions को स्ट्रक्चरल सर्च में टाइप परिभाषा के रूप में चुना जा सकता है। #include डायरेक्टिव इम्पोर्ट संबंध बन जाते हैं।

Export और विज़िबिलिटी मैक्रो (FOO_API, DLLEXPORT या LIBEXPORT जैसे पैटर्न) और थ्रेड-सेफ़्टी एनोटेशन मैक्रो (जैसे GUARDED_BY और REQUIRES) पार्स करने से पहले मास्क कर दिए जाते हैं, ताकि जिन घोषणाओं को वे लपेटते हैं वे सामान्य घोषणाओं की तरह पार्स हों। फ़ंक्शन-जैसे मैक्रो की बॉडी पार्स होती है; ऑब्जेक्ट-जैसे मैक्रो की बॉडी नहीं।

ग्राफ़ कॉल, इनक्लूड, कंपाउंड लिटरल के ज़रिए इंस्टैंशिएशन, टाइप रेफ़रेंस, रीड और राइट, और कंट्रोल फ़्लो दर्ज करता है। लगभग 124 C स्टैंडर्ड-लाइब्रेरी कॉल (printf, malloc, free, memcpy, strlen और इसी तरह के) संबंधों से फ़िल्टर किए जाते हैं, ताकि प्रोजेक्ट का कोड अलग दिखे।

एजेंट प्रॉम्प्ट के उदाहरण

  • “uart_write को कौन कॉल करता है, सीधे या दूसरे फ़ंक्शन के ज़रिए?” (incoming दिशा में dependency_search)
  • “कौन-सी फ़ाइलें config.h को include करती हैं, और उसके कौन-से structs इस्तेमाल करती हैं?” (dependency_search, फिर find_symbol)
  • “समझाओ कि कोई पैकेट रिसीव इंटरप्ट से प्रोटोकॉल पार्सर तक कैसे जाता है।” (get_task_context)

ज्ञात सीमाएँ

  • C में क्लास या एक्सेप्शन नहीं हैं, इसलिए इनहेरिटेंस, इंटरफ़ेस इम्प्लीमेंटेशन, ओवरराइड, throw और catch संबंध लागू नहीं के रूप में चिह्नित हैं।
  • .h C, C++ और Objective-C की एक्सटेंशन सूचियों में आता है, इसलिए बहुभाषी ट्री में हेडर इन प्रोफ़ाइल के बीच बँट जाते हैं।
  • फ़िल्टर किए गए स्टैंडर्ड-लाइब्रेरी फ़ंक्शन को किए गए कॉल ग्राफ़ एज नहीं हैं। जब आपको हर malloc या memcpy चाहिए, तो text_pattern_search इस्तेमाल करें।

अगले कदम

क्विकस्टार्ट से रिपॉज़िटरी जोड़ें, फिर सपोर्ट मैट्रिक्स कम्पैटिबिलिटी पेज पर देखें। उसी ट्री के C++ कोड के लिए C++ गाइड पढ़ें।

सबसे उपयुक्त

  • > फ़र्मवेयर, एम्बेडेड और ऑपरेटिंग-सिस्टम टीमें, जहाँ किसी साझा फ़ंक्शन में छोटा-सा बदलाव हार्डवेयर पाथ तक पहुँच सकता है।
  • > पब्लिक हेडर, export मैक्रो और कई आंतरिक ट्रांसलेशन यूनिट वाली लंबे समय से चल रही C लाइब्रेरी।
  • > एजेंट की मदद से होने वाली समीक्षाएँ, जहाँ सवाल यह है: “इसे कौन कॉल करता है, और किन हेडर के ज़रिए?”

एजेंट वर्कफ़्लो

  • > किसी फ़ंक्शन का सिग्नेचर या एरर हैंडलिंग बदलने से पहले उसके हर कॉलर को ढूँढना।
  • > किसी हेडर को include करने वाली फ़ाइलों और उनके इस्तेमाल किए गए structs का नक्शा बनाना।
  • > किसी रिक्वेस्ट को इंटरप्ट हैंडलर या एंट्री पॉइंट से, उन फ़ंक्शन तक ट्रेस करना जिन तक वह पहुँचती है।

इंजन विवरण

  • > C सपोर्ट `.c` और `.h` को कवर करता है। फ़ंक्शन परिभाषाएँ सिंबल हैं, structs और unions टाइप परिभाषाएँ हैं, और `#include` इम्पोर्ट संबंध बनता है।
  • > Export, विज़िबिलिटी और थ्रेड-सेफ़्टी एनोटेशन मैक्रो पार्स करने से पहले मास्क किए जाते हैं, ताकि लपेटी गई घोषणाएँ पार्स हों। फ़ंक्शन-जैसे मैक्रो की बॉडी पार्स होती है; ऑब्जेक्ट-जैसे की नहीं।
  • > `printf`, `malloc` और `memcpy` जैसे लगभग 124 स्टैंडर्ड-लाइब्रेरी कॉल फ़िल्टर किए जाते हैं। इनहेरिटेंस, ओवरराइड और एक्सेप्शन संबंध लागू नहीं के रूप में चिह्नित हैं।

उपयोगी MCP एंट्री पॉइंट

  • find_symbol

    जब आपको परिभाषा और हर रेफ़रेंस चाहिए, तो किसी फ़ंक्शन या struct नाम के साथ इस्तेमाल करें।

  • dependency_search

    किसी साझा फ़ंक्शन का सिग्नेचर या एरर हैंडलिंग बदलने से पहले उस पर incoming ट्रैवर्सल इस्तेमाल करें।

  • get_task_context

    "समझाओ कि कोई पैकेट रिसीव इंटरप्ट से प्रोटोकॉल पार्सर तक कैसे जाता है" जैसे प्रॉम्प्ट के लिए इस्तेमाल करें।

संबंधित गाइड

रिपॉज़िटरी के संबंधित हिस्से

सभी गाइड ब्राउज़ करें
बड़े पैमाने पर नेटिव कोड प्रोग्रामिंग

Maguyva में C++: बड़े कोडबेस के लिए क्लास और कॉल ग्राफ़

C++ किसी कॉल के असली लक्ष्य को नेमस्पेस, ओवरलोड और वर्चुअल डिस्पैच के पीछे छिपा देती है। ग्राफ़ एजेंट को उसे ढूँढने में मदद करता है।

AST और सिंबल सपोर्ट AST पार्सिंग सिंबल एक्सट्रैक्शन ग्राफ़ रिलेशनशिप्स

एक्सटेंशन

.c, .c++, .cc, .cpp, +6 और

गाइड खोलें
सुरक्षा सबसे पहले प्रोग्रामिंग

Maguyva में Rust सपोर्ट: AI-सहायता प्राप्त बदलावों के लिए सुरक्षित कॉन्टेक्स्ट

प्रासंगिक तब जब आपको Rust में AI सहायता चाहिए, बिना उन संरचनात्मक गार्डरेल्स को खोए जो Rust को इस्तेमाल करने लायक बनाते हैं।

AST और सिंबल सपोर्ट AST पार्सिंग सिंबल एक्सट्रैक्शन ग्राफ़ रिलेशनशिप्स

एक्सटेंशन

.rs

गाइड खोलें