Lompat ke konten
cd /languages
  • Inti sistem
  • Pemrograman
  • Dukungan AST dan simbol

C di Maguyva: graf panggilan untuk kode sistem dan embedded

Maguyva mendukung C dengan AST, simbol, dan graf, sehingga agen AI dapat menelusuri fungsi, struct, include, dan pemanggil dalam kode sistem, firmware, dan pustaka.

Mengapa C membutuhkan graf panggilan, bukan grep

C tidak punya kelas atau modul untuk mengatur kode. Strukturnya tinggal di panggilan fungsi, header, dan struct, dan nama yang sama bisa muncul di komentar, makro, dan literal string. Makro ekspor dan anotasi membungkus deklarasi, sehingga alat yang hanya mengurai C murni tersandung. Bagi agen, langkah pertama yang aman adalah graf panggilan.

Maguyva membangun graf ini, sehingga agen dapat melihat ke mana sebuah fungsi menjangkau dan apa yang menjangkaunya sebelum mengusulkan perubahan.

Apa yang diekstrak Maguyva dari C

Maguyva mencakup .c dan .h. Definisi fungsi diekstrak sebagai simbol, dan struct serta union dapat dipilih sebagai definisi tipe dalam pencarian struktural. Direktif #include menjadi relasi impor.

Makro ekspor dan visibilitas (pola seperti FOO_API, DLLEXPORT, atau LIBEXPORT) dan makro anotasi keamanan thread (seperti GUARDED_BY dan REQUIRES) di-mask sebelum penguraian, sehingga deklarasi yang dibungkusnya diurai sebagai deklarasi biasa. Badan makro mirip fungsi diurai; badan makro mirip objek tidak.

Graf mencatat panggilan, include, instansiasi melalui compound literal, referensi tipe, pembacaan dan penulisan, serta alur kontrol. Sekitar 124 panggilan pustaka standar C (printf, malloc, free, memcpy, strlen, dan sejenisnya) difilter dari relasi, agar kode proyek menonjol.

Contoh prompt agen

  • “Siapa yang memanggil uart_write, secara langsung atau melalui fungsi lain?” (dependency_search arah masuk)
  • “Berkas mana yang meng-include config.h, dan struct mana yang mereka gunakan?” (dependency_search, lalu find_symbol)
  • “Jelaskan bagaimana sebuah paket bergerak dari interrupt penerimaan ke parser protokol.” (get_task_context)

Batasan yang diketahui

  • C tidak memiliki kelas maupun eksepsi, sehingga relasi pewarisan, implementasi interface, override, throw, dan catch ditandai tidak berlaku.
  • .h muncul dalam daftar ekstensi C, C++, dan Objective-C, sehingga header di pohon kode multibahasa terbagi di antara profil-profil tersebut.
  • Panggilan ke fungsi pustaka standar yang difilter bukan edge graf. Gunakan text_pattern_search saat Anda membutuhkan setiap malloc atau memcpy.

Langkah berikutnya

Hubungkan repositori dengan panduan memulai cepat, lalu periksa matriks dukungan di halaman kompatibilitas. Untuk kode C++ di pohon yang sama, baca panduan C++.

Paling cocok untuk

  • > Tim firmware, embedded, dan sistem operasi, tempat perubahan kecil pada fungsi bersama dapat menjalar ke jalur perangkat keras.
  • > Pustaka C berumur panjang dengan header publik, makro ekspor, dan banyak translation unit internal.
  • > Tinjauan berbantuan agen, dengan pertanyaan: “siapa yang memanggil ini, dan melalui header mana?”

Workflow agent

  • > Menemukan setiap pemanggil sebuah fungsi sebelum signature atau penanganan galatnya berubah.
  • > Memetakan berkas yang meng-include sebuah header dan struct yang mereka gunakan.
  • > Menelusuri sebuah permintaan dari interrupt handler atau titik masuk melalui fungsi yang dicapainya.

Detail engine

  • > Dukungan C mencakup `.c` dan `.h`. Definisi fungsi adalah simbol, struct dan union adalah definisi tipe, dan `#include` menjadi relasi impor.
  • > Makro ekspor, visibilitas, dan anotasi keamanan thread di-mask sebelum penguraian, sehingga deklarasi yang dibungkus tetap terurai. Badan makro mirip fungsi diurai; yang mirip objek tidak.
  • > Sekitar 124 panggilan pustaka standar seperti `printf`, `malloc`, dan `memcpy` difilter. Relasi pewarisan, override, dan eksepsi ditandai tidak berlaku.

Titik masuk MCP yang berguna

  • find_symbol

    Gunakan dengan nama fungsi atau struct saat Anda membutuhkan definisi dan setiap referensi.

  • dependency_search

    Gunakan penelusuran arah masuk pada fungsi bersama sebelum signature atau penanganan galatnya berubah.

  • get_task_context

    Gunakan untuk prompt seperti “jelaskan bagaimana sebuah paket bergerak dari interrupt penerimaan ke parser protokol”.