# Maguyva में Pascal और Delphi: यूनिट और क्लास ग्राफ़

Canonical source: https://maguyva.ai/hi/languages/pascal

License: text under [CC BY 4.0](https://creativecommons.org/licenses/by/4.0/); code samples under [MIT-0](https://opensource.org/license/mit-0); the Maguyva name, logos, brand assets and other code are not covered. Details: [maguyva.ai/license](https://maguyva.ai/license).

Maguyva, Pascal और Delphi यूनिट को AST, सिंबल और ग्राफ़ के साथ सपोर्ट करता है, ताकि AI एजेंट uses क्लॉज़, क्लास और प्रोसीजर को बदलने से पहले उनका नक्शा बना सकें।

## सपोर्ट स्नैपशॉट

- टियर: AST और सिंबल सपोर्ट
- प्रोग्रामिंग
- एक्सटेंशन: .pas, .pp
- सिंटैक्स-अवेयर सर्च और स्ट्रक्चरल कॉन्टेक्स्ट के लिए असली AST पार्सिंग।
- नामित सिंबल सिमेंटिक लुकअप और क्रॉस-रेफ़रेंस को फ़ीड करते हैं। रिलेशनशिप एक्सट्रैक्शन सक्षम होने पर ग्राफ़ नेविगेशन उपलब्ध होता है।
- यह भाषा ग्राफ़-अवेयर सर्च में सिंबल्स और रिलेशनशिप्स जोड़ती है; सपोर्टेड एज प्रकार इसके नेटिव कंस्ट्रक्ट्स के अनुसार बदलते हैं।
- AST पार्सिंग और सिंबल एक्सट्रैक्शन, दोनों उपलब्ध हैं।

## सबसे उपयुक्त

- Delphi या Lazarus/Free Pascal ऐप्लिकेशन संभालने वाली टीमें, जिनके मूल लेखक बहुत पहले जा चुके हैं।
- गहरे क्लास पदानुक्रम, इंटरफ़ेस और बड़ी साझा यूनिट वाले Object Pascal कोडबेस।
- आधुनिकीकरण या पोर्टिंग प्रोजेक्ट, जहाँ पहला डिलीवरेबल यूनिट और उनकी डिपेंडेंसी का नक्शा होता है।

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

- किसी साझा यूनिट को बदलने से पहले उसे `uses` क्लॉज़ में रखने वाली हर यूनिट की सूची बनाना।
- किसी बेस फ़ॉर्म या कंपोनेंट से इनहेरिट करने वाली क्लास और उनके ओवरराइड किए गए मेथड ढूँढना।
- किसी रूटीन के पैरामीटर बदलने से पहले उसे कॉल करने वाली प्रोसीजर ट्रेस करना।

## Pascal कोडबेस को पहले नक्शे की ज़रूरत क्यों है

Delphi और Free Pascal ऐप्लिकेशन अक्सर कुछ बड़ी यूनिट के इर्द-गिर्द बढ़ते हैं, जिन्हें बाकी सब इस्तेमाल करते हैं। फ़ॉर्म बेस फ़ॉर्म से, कंपोनेंट बेस कंपोनेंट से इनहेरिट करते हैं, और बिज़नेस नियम ऐसी प्रोसीजर में रहते हैं जिन्हें दर्जनों स्क्रीन कॉल करती हैं। कोड फ़ाइल-दर-फ़ाइल आसानी से पढ़ा जाता है, लेकिन बदलाव डिपेंडेंसी पर गड़बड़ाते हैं।

Maguyva एजेंट को पहले यूनिट और क्लास की संरचना देता है, ताकि वह कुछ भी लिखने से पहले बता सके कि बदलाव किसे छूता है।

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

Maguyva `.pas` और `.pp` सोर्स यूनिट को कवर करता है। प्रोसीजर और फ़ंक्शन परिभाषाएँ कॉल किए जा सकने वाले सिंबल के रूप में निकाली जाती हैं, और परिभाषा नामों से `procedure`, `function`, `var` और `const` कीवर्ड हटा दिए जाते हैं। क्लास और इंटरफ़ेस को स्ट्रक्चरल सर्च में टाइप परिभाषा के रूप में चुना जा सकता है।

इम्पोर्ट `uses` क्लॉज़ से आते हैं; कीवर्ड हटा दिया जाता है ताकि ग्राफ़ में यूनिट नाम रहें। कॉल को मेंबर प्रीफ़िक्स, आर्ग्युमेंट और बाहरी कोष्ठक हटाकर नॉर्मलाइज़ किया जाता है, इसलिए `Self.Save(x)` के रूप में लिखा गया कॉल `Save` के रूप में सहेजा जाता है।

ग्राफ़ कॉल, इनहेरिटेंस, इंटरफ़ेस इम्प्लीमेंटेशन, ओवरराइड, इंस्टैंशिएशन, टाइप रेफ़रेंस, रीड और राइट, और एक्सेप्शन रेज़ और हैंडल करने वाली एज दर्ज करता है। लगभग 107 रनटाइम-लाइब्रेरी रूटीन (`WriteLn`, `ReadLn`, `Inc`, `Dec`, `Ord` और इसी तरह के) संबंधों से फ़िल्टर किए जाते हैं।

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

- "कौन-सी यूनिट `DataModuleMain` इस्तेमाल करती हैं, और उससे क्या कॉल करती हैं?" (incoming दिशा में `dependency_search`)
- "कौन-से फ़ॉर्म `TBaseEditForm` से इनहेरिट करते हैं, और वे कौन-से मेथड ओवरराइड करते हैं?" (`find_symbol`, फिर `dependency_search`)
- "समझाओ कि बटन हैंडलर से डेटाबेस यूनिट तक एक इनवॉइस कैसे पोस्ट होता है।" (`get_task_context`)

## ज्ञात सीमाएँ

- सिर्फ़ `.pas` और `.pp` ही Pascal से मैप होते हैं। `.dpr` और `.dfm` जैसी Delphi प्रोजेक्ट और फ़ॉर्म फ़ाइलें एक्सटेंशन सूची में नहीं हैं, इसलिए फ़ॉर्म लेआउट और प्रोजेक्ट वायरिंग ग्राफ़ से बाहर रहते हैं।
- मेथड, फ़्री प्रोसीजर वाला ही सिंटैक्स इस्तेमाल करते हैं, इसलिए `structural_search` में `methods` प्रीसेट कुछ नहीं चुनता। `functions` प्रीसेट इस्तेमाल करें।
- फ़िल्टर किए गए रनटाइम-लाइब्रेरी रूटीन को किए गए कॉल ग्राफ़ एज के रूप में नहीं दिखते। इनके लिए `text_pattern_search` इस्तेमाल करें।

## अगले कदम

[क्विकस्टार्ट](/hi/docs/quickstart) से रिपॉज़िटरी जोड़ें, फिर सपोर्ट मैट्रिक्स [कम्पैटिबिलिटी पेज](/hi/docs/compatibility) पर देखें। अगर ऐप्लिकेशन C लाइब्रेरी से लिंक होता है, तो [C गाइड](/hi/languages/c) भी पढ़ें।

## इंजन विवरण

- Pascal सपोर्ट `.pas` और `.pp` यूनिट को कवर करता है। `.dpr` और `.dfm` जैसी Delphi प्रोजेक्ट और फ़ॉर्म फ़ाइलें एक्सटेंशन सूची में नहीं हैं।
- `uses` क्लॉज़ इम्पोर्ट संबंध बनते हैं, और कॉल को मेंबर प्रीफ़िक्स, आर्ग्युमेंट और बाहरी कोष्ठक हटाकर नॉर्मलाइज़ किया जाता है।
- ऐप्लिकेशन कोड अलग दिखे, इसके लिए `WriteLn`, `Inc` और `Ord` जैसे लगभग 107 रनटाइम-लाइब्रेरी रूटीन संबंधों से फ़िल्टर किए जाते हैं।

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

- `find_symbol`: जब आपको परिभाषा और रेफ़रेंस चाहिए, तो किसी क्लास, फ़ॉर्म या प्रोसीजर नाम के साथ इस्तेमाल करें।
- `dependency_search`: किसी साझा यूनिट या बेस क्लास पर incoming ट्रैवर्सल इस्तेमाल करें, ताकि पता चले कि कौन-सी यूनिट और सबक्लास उस पर निर्भर हैं।
- `get_task_context`: "समझाओ कि बटन हैंडलर से डेटाबेस यूनिट तक एक इनवॉइस कैसे पोस्ट होता है" जैसे प्रॉम्प्ट के लिए इस्तेमाल करें।
