Lumaktaw papunta sa content
cd /languages
  • Ubod ng system
  • Programming
  • Support para sa AST at mga simbolo

C sa Maguyva: mga call graph para sa systems at embedded code

Sinusuportahan ng Maguyva ang C gamit ang AST, mga symbol at graph, para ma-trace ng mga AI agent ang mga function, struct, include at tumatawag sa systems, firmware at library code.

Bakit kailangan ng C ng call graph, hindi grep

Walang class o module ang C para ayusin ang code. Nasa mga function call, header at struct ang structure, at puwedeng lumabas ang parehong pangalan sa mga comment, macro at string literal. Binabalot ng mga export at annotation macro ang mga declaration, kaya natitisod ang mga tool na purong C lang ang kayang i-parse. Para sa isang agent, ang call graph ang ligtas na unang hakbang.

Binubuo ng Maguyva ang graph na ito, para makita ng agent kung saan umaabot ang isang function at kung ano ang umaabot dito bago ito magmungkahi ng pagbabago.

Ano ang kinukuha ng Maguyva mula sa C

Sakop ng Maguyva ang .c at .h. Kinukuha ang mga function definition bilang symbol, at puwedeng piliin ang mga struct at union bilang type definition sa structural search. Nagiging import relationship ang mga #include directive.

Mina-mask bago i-parse ang mga export at visibility macro (mga pattern tulad ng FOO_API, DLLEXPORT o LIBEXPORT) at ang mga thread-safety annotation macro (tulad ng GUARDED_BY at REQUIRES), kaya pina-parse bilang normal na declaration ang mga binabalot nila. Pina-parse ang body ng mga function-like macro; hindi ang body ng mga object-like macro.

Itinatala ng graph ang mga call, include, instantiation gamit ang compound literal, type reference, read at write, at control flow. Mga 124 C standard-library call (printf, malloc, free, memcpy, strlen at mga katulad nito) ang nifi-filter mula sa mga relationship, para lumitaw ang code ng project.

Mga halimbawang agent prompt

  • “Sino ang tumatawag sa uart_write, direkta man o sa pamamagitan ng ibang function?” (dependency_search na incoming)
  • “Aling mga file ang nag-i-include ng config.h, at aling mga struct nito ang ginagamit nila?” (dependency_search, tapos find_symbol)
  • “Ipaliwanag kung paano umaabot ang isang packet mula sa receive interrupt papunta sa protocol parser.” (get_task_context)

Mga kilalang limitasyon

  • Walang class o exception ang C, kaya minarkahang hindi applicable ang mga relationship na inheritance, interface implementation, override, throw at catch.
  • Lumalabas ang .h sa mga extension list ng C, C++ at Objective-C, kaya hinahati sa mga profile na ito ang mga header sa mga multi-language na tree.
  • Hindi graph edge ang mga call sa mga na-filter na standard-library function. Gamitin ang text_pattern_search kapag kailangan mo ang bawat malloc o memcpy.

Mga susunod na hakbang

Mag-connect ng repository gamit ang quickstart, tapos tingnan ang support matrix sa compatibility page. Para sa C++ code sa parehong tree, basahin ang gabay sa C++.

Pinakabagay

  • > Mga firmware, embedded at operating-system team, kung saan ang maliit na pagbabago sa isang shared function ay puwedeng umabot sa mga hardware path.
  • > Mga matagal nang C library na may public header, export macro at maraming internal na translation unit.
  • > Mga agent-assisted na review kung saan ang tanong ay: “sino ang tumatawag dito, at sa aling mga header?”

Mga workflow ng agent

  • > Hanapin ang bawat tumatawag sa isang function bago magbago ang signature o error handling nito.
  • > I-map ang mga file na nag-i-include ng isang header at ang mga struct na ginagamit nila.
  • > I-trace ang isang request mula sa interrupt handler o entry point sa mga function na naaabot nito.

Mga detalye ng engine

  • > Sakop ng C support ang `.c` at `.h`. Mga symbol ang mga function definition, mga type definition ang mga struct at union, at nagiging import relationship ang `#include`.
  • > Mina-mask bago i-parse ang mga export, visibility at thread-safety annotation macro, kaya napa-parse ang mga binalot na declaration. Pina-parse ang body ng function-like macro; hindi ang object-like.
  • > Mga 124 standard-library call tulad ng `printf`, `malloc` at `memcpy` ang nifi-filter. Minarkahang hindi applicable ang mga inheritance, override at exception relationship.

Mga kapaki-pakinabang na MCP entry point

  • find_symbol

    Gamitin kasama ang pangalan ng function o struct kapag kailangan mo ang definition at bawat reference.

  • dependency_search

    Gumamit ng incoming traversal sa isang shared function bago magbago ang signature o error handling nito.

  • get_task_context

    Gamitin para sa mga prompt tulad ng “ipaliwanag kung paano umaabot ang isang packet mula sa receive interrupt papunta sa protocol parser”.