# Pascal dan Delphi dalam Maguyva: graf unit dan kelas

Canonical source: https://maguyva.ai/ms/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 menyokong unit Pascal dan Delphi dengan AST, simbol dan graf, supaya ejen AI boleh memetakan klausa uses, kelas dan prosedur sebelum mengubahnya.

## Gambaran sokongan

- Peringkat: Sokongan AST dan simbol
- Pengaturcaraan
- Sambungan fail: .pas, .pp
- Penghuraian AST sebenar untuk carian sedar-sintaks dan konteks struktur.
- Simbol bernama menyokong carian semantik dan rujukan silang. Navigasi graf tersedia apabila pengekstrakan hubungan didayakan.
- Bahasa ini menyumbang simbol dan hubungan kepada carian berasaskan graf; jenis edge yang disokong berbeza mengikut binaan aslinya.
- Penghuraian AST dan pengekstrakan simbol kedua-duanya tersedia.

## Paling sesuai

- Pasukan yang menyelenggara aplikasi Delphi atau Lazarus/Free Pascal yang penulis asalnya sudah lama pergi.
- Pangkalan kod Object Pascal dengan hierarki kelas yang mendalam, antara muka dan unit kongsi yang besar.
- Projek pemodenan atau pemindahan platform, dengan hasil pertama berupa peta unit dan pergantungannya.

## Aliran kerja ejen

- Menyenaraikan setiap unit yang menyebut unit kongsi dalam klausa `uses` sebelum unit itu berubah.
- Mencari kelas yang mewarisi daripada borang atau komponen asas dan kaedah yang digantikannya.
- Menjejak prosedur yang memanggil sesuatu rutin sebelum parameternya berubah.

## Mengapa pangkalan kod Pascal memerlukan peta dahulu

Aplikasi Delphi dan Free Pascal selalunya berkembang di sekitar beberapa unit besar yang digunakan oleh semua bahagian lain. Borang mewarisi daripada borang asas, komponen daripada komponen asas, dan peraturan perniagaan tinggal dalam prosedur yang dipanggil oleh berpuluh-puluh skrin. Kod mudah dibaca fail demi fail, tetapi perubahan tersadung pada pergantungan.

Maguyva memberikan struktur unit dan kelas kepada ejen dahulu, supaya ia dapat menyatakan apa yang disentuh oleh sesuatu perubahan sebelum menulis apa-apa.

## Apa yang diekstrak oleh Maguyva daripada Pascal

Maguyva meliputi unit sumber `.pas` dan `.pp`. Definisi prosedur dan fungsi diekstrak sebagai simbol boleh panggil, dan kata kunci `procedure`, `function`, `var` dan `const` dibuang daripada nama definisi. Kelas dan antara muka boleh dipilih sebagai definisi jenis dalam carian berstruktur.

Import datang daripada klausa `uses`; kata kunci dibuang supaya graf menyimpan nama unit. Panggilan dinormalkan dengan membuang awalan ahli, argumen dan kurungan luar, jadi panggilan yang ditulis `Self.Save(x)` disimpan sebagai `Save`.

Graf merekodkan panggilan, pewarisan, pelaksanaan antara muka, penggantian, penginstansian, rujukan jenis, bacaan dan tulisan, serta tepi pembangkitan dan pengendalian pengecualian. Kira-kira 107 rutin pustaka masa jalan (`WriteLn`, `ReadLn`, `Inc`, `Dec`, `Ord` dan seumpamanya) ditapis daripada hubungan.

## Contoh gesaan ejen

- "Unit mana yang menggunakan `DataModuleMain`, dan apa yang dipanggil daripadanya?" (`dependency_search` arah masuk)
- "Borang mana yang mewarisi daripada `TBaseEditForm`, dan kaedah mana yang digantikan?" (`find_symbol`, kemudian `dependency_search`)
- "Terangkan cara invois dipos, daripada pengendali butang hingga unit pangkalan data." (`get_task_context`)

## Had yang diketahui

- Hanya `.pas` dan `.pp` dipetakan kepada Pascal. Fail projek dan borang Delphi seperti `.dpr` dan `.dfm` tiada dalam senarai sambungan, jadi susun atur borang dan pendawaian projek berada di luar graf.
- Kaedah menggunakan sintaks yang sama dengan prosedur bebas, jadi pratetap `methods` dalam `structural_search` tidak memilih apa-apa. Gunakan pratetap `functions`.
- Panggilan kepada rutin pustaka masa jalan yang ditapis tidak muncul sebagai tepi graf. Gunakan `text_pattern_search` untuknya.

## Langkah seterusnya

Sambungkan repositori dengan [panduan permulaan pantas](/ms/docs/quickstart), kemudian semak matriks sokongan di [halaman keserasian](/ms/docs/compatibility). Jika aplikasi dipautkan dengan pustaka C, baca juga [panduan C](/ms/languages/c).

## Butiran enjin

- Sokongan Pascal meliputi unit `.pas` dan `.pp`. Fail projek dan borang Delphi seperti `.dpr` dan `.dfm` tiada dalam senarai sambungan.
- Klausa `uses` menjadi hubungan import, dan panggilan dinormalkan dengan membuang awalan ahli, argumen dan kurungan luar.
- Kira-kira 107 rutin pustaka masa jalan, seperti `WriteLn`, `Inc` dan `Ord`, ditapis daripada hubungan supaya kod aplikasi lebih menonjol.

## Titik masuk MCP yang berguna

- `find_symbol`: Gunakan dengan nama kelas, borang atau prosedur apabila anda memerlukan definisi dan rujukan.
- `dependency_search`: Gunakan penjelajahan arah masuk pada unit kongsi atau kelas asas untuk melihat unit dan keturunan mana yang bergantung padanya.
- `get_task_context`: Gunakan untuk gesaan seperti “terangkan cara invois dipos, daripada pengendali butang hingga unit pangkalan data”.
