„Naiv“ falls du glaubst, es gäbe eine Lib, bei der man
Program program = Programs.parse("file.c");
Function function = p.getFunctions().getFunction(0);
Variable variable = function.getVariables().get(0);
System.out.println("There we go: "+variable.getName());
hinschreiben könnte, um den Namen der ersten Variablen der ersten Funktion eines Programms zu erhalten.
Wie TheDarkRose schon zart angedeutet hat: Bei C gibt’s „Syntaxtücken“ - eine sehr zurückhaltende Formulierung für den Unterschied der Komplexität von JavaScript gegenüber C, mit typedefs, Pointern und Adressen, und den über-parser-Killern: #include und #define! :sick:
Tatsächlich hatte ich für meine Zwecke damals ein „SimpleModel“ definiert - also ein Modell für den geparsten Code, das aus dem von CDT gelieferten AST ein extem vereinfachtes „Modell“ des geparsten Programmes erstellt. Das ganze … sah dann im Endeffekt so ähnlich aus wie der oben angedeutete Pseudocode… ;)… ging aber nicht bis auf den Inhalt der Methoden runter, weil das 1. natürlich beliebig kompliziert werden kann, und ich es 2. (wichtiger) schlicht nicht brauchte. (In betracht gezogen hatte ich diese Funktion aber, und ggf. würde ich das irgendwann erweitern…).
Ich habe dir übrigens NICHT „geraten“, CDT zu verwenden, sondern nur erwähnt, dass ich dann dort gelandet bin Weil ich eben keine Bibliothek kenne (bzw. damals keine gefunden habe), die einem eine der im Pseudocode angedeuteten Funktionalität bietet. Aber vielleicht gibt es „bessere“, oder „einfachere“ Möglichkeiten, dein Ziel zu erreichen (aber wenn du dich genötigt siehst, den AST selbst zu parsen, kann ich dir versichern, dass das NICHT die „bessere“ oder „einfachere“ Möglichkeit ist :D).
Der „Einstieg“ in CDT kann holprig sein. Das ist ja eigentlich keine Lib, die für Standalone-Verwendung gedacht ist. Stattdessen ist sie teil der Eclipse-C-Entwicklungsumgebung. Aber ich kann ggf. heute Abend mal ein „Starterpaket“ schnüren, das du dir anschauen kannst, um dann zu bewerten, ob das ein für dich geeigneter Weg sein könnte - oder ob du noch weitersuchst, ob du etwas einfacheres/besseres findest (und wenn du etwas findest, sag’ bescheid, würde mich auch interessieren ).
EDIT: Oh, @schlingel Wenn du einfach so eine Bibliothek erstellen könntest, mit der man etwa die angedeutete Funktionalität hat, wäre das super! AntLR schien mir damals nichts zu sein, wo man sich „mal kurz“ einen Parser generiert, aber wenn das einfach so geht, wäre das praktisch. (Fragt sich nur, warum die Eclipse CDT-Leute sich dann so viel Arbeit gemacht haben…)