Moin! Ich möchte ein vorhandenes (großes) C Programm automatisch nach bestimmten Funktionsaufrufen und vor return-statements mit Debug-Meldungen ergänzen. Wahrscheinlich kommen weitere Änderungen hinzu, die ich im Moment noch nicht abesehen kann. Darum stelle ich mir vor, einen einfachen C Parser zu verwenden, der im wesentlichen den Input wieder ausgibt, und leicht um ein paar Änderungen ergänzt werden kann. Der Parser muß nicht den kompletten ANSI C Standard abdecken, da das Programm keine außergewöhnlichen Features verwendet. Wichtiger wäre, daß der Parser übersichtlich und leicht zu erweitern ist. Gibt es einen solchen Parser, möglichst auf der Basis von bison/yacc mit einer für flex definierten Syntax? Stefan
Der GCC hatte bis Version 3.3.x einen Bison/Flex-Parser, den du ausschneiden könntest. Evtl. möchtest du noch einen Präprozessor davorschalten. Dazu kannst du ebenfalls den vom GCC nehmen. Über die #<zeilennummer>-Direktiven in der Ausgabedatei stellst du die Verbindung zu den Original-C-Dateien her, um dort die automatischen Änderungen vornehmen zu können. Eine ANSI-C-Grammatik in BNF gibt es hier: http://www.cs.man.ac.uk/~pjj/bnf/c_syntax.bnf Es dürfte nicht so schwer sein, diese ins Bison-Format zu bringen.
Danke, das sind sehr brauchbare Hinweise. Gibt es evtl. einen weniger ausgewachsenen Compiler als den gcc, der einfacher zu verstehen ist? Sonst werde ich mich daran machen, den gcc-Parser zu verwenden. Du schreibst, bis Version 3.3.x hatte der gcc einen Bison/Flex Parser. Was wird denn seitdem verwendet, und warum? (Ich habe mir mal verschiedene Releases angesehen, und in 3.4.6 und 4.0.0 habe ich immer noch eine c-parse.y gefunden, die mir nach einem Parser für C aussieht) Stefan
> Du schreibst, bis Version 3.3.x hatte der gcc einen Bison/Flex Parser. > Was wird denn seitdem verwendet, und warum? Der neue Parser ist handgeschrieben und arbeitet nach dem Prinzip des rekursiven Abstiegs. http://en.wikipedia.org/wiki/Recursive_descent_parser > (Ich habe mir mal verschiedene Releases angesehen, und in 3.4.6 und > 4.0.0 habe ich immer noch eine c-parse.y gefunden, die mir nach einem > Parser für C aussieht) Entschuldigung, da habe ich mich geirrt. In Version 3.4 kam der handgeschriebene C++-Parser, der handgeschriebene C-Parser erst in Version 4.1. Gründe für die Umstellung: Aus http://gcc.gnu.org/gcc-3.4/changes.html: A hand-written recursive-descent C++ parser has replaced the YACC-derived C++ parser from previous GCC releases. The new parser contains much improved infrastructure needed for better parsing of C++ source codes, handling of extensions, and clean separation (where possible) between proper semantics analysis and parsing. The new parser fixes many bugs that were found in the old parser. Aus http://gcc.gnu.org/gcc-4.1/changes.html: The old Bison-based C and Objective-C parser has been replaced by a new, faster hand-written recursive-descent parser.
Hi, schau dir mal den LCC an, http://www.cs.princeton.edu/software/lcc/ der ist mit "wenig" Aufwand an verschiedene Cores anpaßbar und sollte auch für deine Anwendung geeignet sein. ciao WEIF
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.