Siirry sisältöön
cd /languages
  • Järjestelmän ydin
  • Ohjelmointi
  • AST- ja symbolituki

C-tuki Maguyva-palvelussa: kutsugraafit järjestelmä- ja sulautetulle koodille

Maguyva tukee C-kieltä AST-jäsennyksellä, symboleilla ja graafilla, jotta tekoälyagentit voivat seurata funktioita, rakenteita, include-lauseita ja kutsujia järjestelmä-, laiteohjelmisto- ja kirjastokoodissa.

Miksi C tarvitsee kutsugraafin eikä grepiä

C:ssä ei ole luokkia eikä moduuleja koodin järjestämiseen. Rakenne on funktiokutsuissa, otsakkeissa ja rakenteissa, ja sama nimi voi esiintyä kommenteissa, makroissa ja merkkijonoliteraaleissa. Vienti- ja annotaatiomakrot ympäröivät esittelyjä, mikä kompastuttaa työkalut, jotka osaavat jäsentää vain puhdasta C:tä. Agentille turvallinen ensimmäinen askel on kutsugraafi.

Maguyva rakentaa tämän graafin, jotta agentti näkee, mihin funktio ulottuu ja mikä siihen ulottuu, ennen kuin se ehdottaa muutosta.

Mitä Maguyva poimii C:stä

Maguyva kattaa tiedostot .c ja .h. Funktioiden määrittelyt poimitaan symboleina, ja rakenteet ja unionit voi valita tyyppimäärittelyinä rakenteellisessa haussa. #include-direktiiveistä tulee tuontisuhteita.

Vienti- ja näkyvyysmakrot (mallit kuten FOO_API, DLLEXPORT tai LIBEXPORT) ja säieturvallisuuden annotaatiomakrot (kuten GUARDED_BY ja REQUIRES) peitetään ennen jäsennystä, joten niiden ympäröimät esittelyt jäsennetään edelleen esittelyinä. Funktiomaisten makrojen rungot jäsennetään, oliomaisten makrojen rungot eivät.

Graafi tallentaa kutsut, include-lauseet, yhdysliteraaleilla tehdyn ilmentymien luonnin, tyyppiviittaukset, luvut ja kirjoitukset sekä ohjausvuon. Noin 124 C:n standardikirjaston kutsua (printf, malloc, free, memcpy, strlen ja vastaavat) suodatetaan pois suhteista, jotta projektin koodi erottuu.

Esimerkkikehotteita agenteille

  • “Kuka kutsuu funktiota uart_write suoraan tai muiden funktioiden kautta?” (dependency_search incoming)
  • “Mitkä tiedostot sisällyttävät otsakkeen config.h, ja mitä sen rakenteita ne käyttävät?” (dependency_search, sitten find_symbol)
  • “Selitä, miten paketti kulkee vastaanottokeskeytyksestä protokollajäsentimeen.” (get_task_context)

Tunnetut rajoitukset

  • C:ssä ei ole luokkia eikä poikkeuksia, joten periytymisen, rajapintojen toteutuksen, ylikirjoituksen, heittämisen ja kiinniottamisen suhteet on merkitty soveltumattomiksi.
  • .h on C:n, C++:n ja Objective-C:n tiedostopäätteiden luetteloissa, joten monikielisten puiden otsakkeet jaetaan näiden profiilien kesken.
  • Suodatettujen standardikirjaston funktioiden kutsut eivät ole graafin kaaria. Käytä työkalua text_pattern_search, kun tarvitset jokaisen malloc- tai memcpy-kutsun.

Seuraavat vaiheet

Yhdistä repositorio pikaoppaan avulla ja tarkista sitten tukimatriisi yhteensopivuussivulta. Saman puun C++-koodia varten lue C++-opas.

Parhaiten sopii

  • > Laiteohjelmisto-, sulautettujen järjestelmien ja käyttöjärjestelmätiimit, joissa pieni muutos jaettuun funktioon voi ulottua laitteistopolkuihin asti.
  • > Pitkäikäiset C-kirjastot, joissa on julkisia otsakkeita, vientimakroja ja paljon sisäisiä käännösyksiköitä.
  • > Agenttiavusteiset katselmoinnit, joissa kysymys kuuluu: "kuka kutsuu tätä, ja minkä otsakkeiden kautta?"

Agenttien työnkulut

  • > Löytää kaikki funktion kutsujat ennen kuin sen allekirjoitusta tai virheenkäsittelyä muutetaan.
  • > Kartoittaa, mitkä tiedostot sisällyttävät otsakkeen ja mitä rakenteita ne käyttävät.
  • > Jäljittää pyyntö keskeytyskäsittelijästä tai aloituskohdasta niiden funktioiden läpi, joihin se ulottuu.

Moottorin yksityiskohdat

  • > C-tuki kattaa tiedostot `.c` ja `.h`. Funktioiden määrittelyt ovat symboleja, rakenteet ja unionit tyyppimäärittelyjä, ja `#include`-direktiivistä tulee tuontisuhde.
  • > Vienti-, näkyvyys- ja säieturvallisuusmakrot peitetään ennen jäsennystä, joten ympäröidyt esittelyt jäsennetään. Funktiomaisten makrojen rungot jäsennetään, oliomaisten eivät.
  • > Noin 124 standardikirjaston kutsua, kuten `printf`, `malloc` ja `memcpy`, suodatetaan pois. Periytymisen, ylikirjoituksen ja poikkeusten suhteet on merkitty soveltumattomiksi.

Hyödylliset MCP-liittymäkohdat

  • find_symbol

    Käytä sitä funktion tai rakenteen nimellä, kun tarvitset määrittelyn ja jokaisen viittauksen.

  • dependency_search

    Käytä incoming-läpikäyntiä jaettuun funktioon ennen sen allekirjoituksen tai virheenkäsittelyn muuttamista.

  • get_task_context

    Käytä sitä kehotteisiin kuten "selitä, miten paketti kulkee vastaanottokeskeytyksestä protokollajäsentimeen".