www.mikrocontroller.net

Forum: Compiler & IDEs C Compiler Gerüst


Autor: Stefan Sonnen (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: yalu (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: Stefan Sonnen (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: yalu (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> 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.

Autor: WEIF (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.