Hopp til innhold
cd /languages
  • Systemkjerne
  • Programmering
  • AST- og symbolstøtte

C i Maguyva: kallgrafer for system- og innebygd kode

Maguyva støtter C med AST, symboler og graf, slik at AI-agenter kan følge funksjoner, structs, includes og kallere i system-, fastvare- og bibliotekskode.

Hvorfor C trenger en kallgraf og ikke grep

C har ingen klasser eller moduler som organiserer koden. Strukturen ligger i funksjonskall, headere og structs, og det samme navnet kan dukke opp i kommentarer, makroer og strengliteraler. Eksport- og annoteringsmakroer omslutter deklarasjoner, noe som får verktøy som bare kan parse ren C, til å snuble. For en agent er kallgrafen det trygge første steget.

Maguyva bygger denne grafen, slik at en agent kan se hva en funksjon når og hva som når den, før den foreslår en endring.

Hva Maguyva henter ut i C

Maguyva dekker .c og .h. Funksjonsdefinisjoner hentes ut som symboler, og structs og unions kan velges som typedefinisjoner i strukturelt søk. #include-direktiver blir importrelasjoner.

Eksport- og synlighetsmakroer (mønstre som FOO_API, DLLEXPORT eller LIBEXPORT) og annoteringsmakroer for trådsikkerhet (som GUARDED_BY og REQUIRES) maskeres før parsing, slik at deklarasjoner de omslutter fortsatt parses som deklarasjoner. Kropper i funksjonslignende makroer parses; kropper i objektlignende makroer gjør det ikke.

Grafen registrerer kall, includes, instansiering via sammensatte literaler, typereferanser, lesinger og skrivinger samt kontrollflyt. Rundt 124 kall i Cs standardbibliotek (printf, malloc, free, memcpy, strlen og lignende) filtreres ut av relasjonene, slik at prosjektkoden kommer tydelig frem.

Eksempler på prompter for agenter

  • «Hvem kaller uart_write, direkte eller via andre funksjoner?» (dependency_search incoming)
  • «Hvilke filer inkluderer config.h, og hvilke av structene bruker de?» (dependency_search, deretter find_symbol)
  • «Forklar hvordan en pakke går fra mottaksavbruddet til protokollparseren.» (get_task_context)

Kjente begrensninger

  • C har verken klasser eller unntak, så relasjoner for arv, grensesnittimplementasjon, overstyring, kasting og fanging er merket som ikke aktuelle.
  • .h står på listene over filendelser for C, C++ og Objective-C, så headere i flerspråklige trær deles mellom disse profilene.
  • Kall til filtrerte funksjoner i standardbiblioteket er ikke kanter i grafen. Bruk text_pattern_search når du trenger hver malloc eller memcpy.

Neste steg

Koble til et repositorium med hurtigstarten, og se deretter støttematrisen på kompatibilitetssiden. For C++-kode i samme tre bør du lese veiledningen for C++.

Best egnet

  • > Fastvare-, innebygd- og operativsystemteam der en liten endring i en delt funksjon kan nå helt ut i maskinvarestier.
  • > Langlivede C-biblioteker med offentlige headere, eksportmakroer og mange interne oversettelsesenheter.
  • > Agentstøttede gjennomganger der spørsmålet er: «hvem kaller dette, og gjennom hvilke headere?»

Agent-arbeidsflyter

  • > Finne alle som kaller en funksjon før signaturen eller feilhåndteringen endres.
  • > Kartlegge hvilke filer som inkluderer en header, og hvilke structs de bruker.
  • > Spore en forespørsel fra en avbruddshåndterer eller et inngangspunkt gjennom funksjonene den når.

Motordetaljer

  • > C-støtten dekker `.c` og `.h`. Funksjonsdefinisjoner er symboler, structs og unions er typedefinisjoner, og `#include` blir en importrelasjon.
  • > Eksport-, synlighets- og trådsikkerhetsmakroer maskeres før parsing, så omsluttede deklarasjoner parses. Kropper i funksjonslignende makroer parses; kropper i objektlignende gjør det ikke.
  • > Rundt 124 kall i standardbiblioteket som `printf`, `malloc` og `memcpy` filtreres ut. Relasjoner for arv, overstyring og unntak er merket som ikke aktuelle.

Nyttige MCP-inngangspunkter

  • find_symbol

    Bruk det for et funksjons- eller structnavn når du trenger definisjonen og hver referanse.

  • dependency_search

    Bruk incoming-traversering på en delt funksjon før signaturen eller feilhåndteringen endres.

  • get_task_context

    Bruk det til prompter som «forklar hvordan en pakke går fra mottaksavbruddet til protokollparseren».