AST / GCC-Dump Literatur

Gast
Sowas z.B., also der abstrakte Sytaxbaum, den man auch mit GCC erzeugen
kann:

;; Function main (main)
;; enabled by -tree-original

@1      bind_expr        type: @2       vars: @3       body: @4
@2      void_type        name: @5       algn: 8
@3      var_decl         name: @6       type: @7       scpe: @8
                         srcp: main.c:15               size: @9
                         algn: 8        used: 1
@4      statement_list   0   : @10      1   : @11      2   : @12
                         3   : @13      4   : @14      5   : @15
                         6   : @16      7   : @17
@5      type_decl        name: @18      type: @2       srcp:
<built-in>:0
@6      identifier_node  strg: a        lngt: 1
@7      integer_type     name: @19      size: @9       algn: 8
                         prec: 16       min : @20      max : @21
@8      function_decl    name: @22      type: @23      srcp: main.c:14

                         extern
@9      integer_cst      type: @24      low : 16
@10     decl_expr        type: @2
@11     decl_expr        type: @2
@12     decl_expr        type: @2
@13     modify_expr      type: @7       op 0: @3       op 1: @25
@14     modify_expr      type: @7       op 0: @26      op 1: @27
@15     call_expr        type: @7       fn  : @28      args: @29
@16     call_expr        type: @7       fn  : @30      args: @31
@17     return_expr      type: @2
@18     identifier_node  strg: void     lngt: 4
@19     type_decl        name: @32      type: @7       srcp:
<built-in>:0
@20     integer_cst      type: @7       high: -1       low : -32768
Gast
grab schaufel Ich hol die Leiche mal hoch, habe nämlich exakt das 
gleiche Problem: Ich suche Informationen um das Ergebnis von 
-fdump-translation-unit zu verstehen. Gibt es da mittlerweile mehr Doku? 
In den Internals kann ich nichts finden, falsch gesucht?
Gast
Nur fürs Protokoll weil der Beitrag bei Google recht weit oben kommt: 
c-tree.lexi ist eigentlich unlesbar, erstmal weil ständig 
Formatierungsanweisungen (@irgendwas) den Lesefluss unterbrechen und 
zweitens weil sich das ganze nicht auf den Aufbau der Dumpdatei sondern 
auf den Quellcode vom GCC und dessen Datenstrukturen konzentriert.

Google hat mir noch 
http://search.cpan.org/~awin/GCC-TranslationUnit-1.00/ ausgespuckt, wer 
Perl kann ist da vielleicht gut beraten.

So, vielleicht hilft es ja Jemandem irgendwann mal.
Persönliche Seite
möchtegernprogrammierer schrieb:
> grab schaufel Ich hol die Leiche mal hoch, habe nämlich exakt das
> gleiche Problem: Ich suche Informationen um das Ergebnis von
> -fdump-translation-unit zu verstehen.

Das ist doch selbsterklärend:

>> @3      var_decl         name: @6       type: @7       scpe: @8
>>                          srcp: main.c:15               size: @9

In main.c wird in Zeile 15 eine Variable mit Name @6 vom Typ @7 
deklariert/definiert. Scope ist @8, Größe der Variable ist @9.

>> @6      identifier_node  strg: a        lngt: 1

Die Variable heißt also "a".

>> @7      integer_type     name: @19      size: @9       algn: 8
>>                          prec: 16       min : @20      max : @21

Typ ist ein skalarer Integer-Typ.  Ebenso wie a hat der Typ das 
Alignment 8 Bits.

>> @8      function_decl    name: @22      type: @23      srcp: main.c:14
>>                          extern

Scope der Variablendefinition, die Variable ist also lokal.

Etc.

> Gibt es da mittlerweile mehr Doku?

Diese Dunps brauchen keine Doku, sie dienen den GCC-Entwicklern, und die 
wissen, wie sie zu lesen sind.

Für Analysezwecke sind die Dumps ungeeignet, da sie nicht alle 
Informationen enthalten.  Die Dumps sind zudem nicht spezifiziert.

Wenn du statische Codeanalyse betreiben willst, dann ist ein Plugin das 
Mittel der Wahl.

> In den Internals kann ich nichts finden, falsch gesucht?

Die Internals sind nur als weichen Einstieg für GCC-Neulinge gedacht. 
Auskunft gibt die Quelle und wenn du da nix findst, frag in 
gcc-help@gcc.gnu.org.

möchtegernprogrammierer schrieb:

> Ich glaube ich hab das Passende gefunden: \gcc\doc\c-tree.texi
> Ist ein recht merkwürdiges Format was sich angeblich mit

Es ist TexInfo.  Es ist nicht "merkwürdig", es ist Text.  Lies ihn 
einfach ;-)

Ubrigens landet alles in ./gcc/doc in der GCC-Dokumentation, du kannst 
also einfach die lesen wenn dir texi nicht gefällt:

http://gcc.gnu.org/onlinedocs
Gast
Johann L. schrieb:
> Das ist doch selbsterklärend:
Für dich als GCC-Mitentwickler sicherlich! :-)

> Für Analysezwecke sind die Dumps ungeeignet, da sie nicht alle
> Informationen enthalten.
Schade.

> Die Dumps sind zudem nicht spezifiziert.
Das ist wohl wahr. :-)

> Wenn du statische Codeanalyse betreiben willst, dann ist ein Plugin das
> Mittel der Wahl.
Naja, eigentlich will ich nur mal ein bisschen rumspielen und gucken 
was so geht. Aber wie das so ist, man liest und liest und liest und die 
Zeit vergeht... Meine Hochachtung all denen die fähig sind diese 
Monsterdinger (Compiler) zu schreiben und zu warten...

> Ubrigens landet alles in ./gcc/doc in der GCC-Dokumentation, du kannst
> also einfach die lesen wenn dir texi nicht gefällt:
> http://gcc.gnu.org/onlinedocs
Ah prima, das dürfte sich leichter lesen lassen.

Danke!

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 20 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.