Verständnis der C11-Typhierarchie

Ich möchte die Typhierarchie der C11-Sprache vollständig verstehen und grafisch darstellen (ein Baumdiagramm wäre perfekt). Die Norm enthält keine Abbildung für diese Ausgabe - es gibt 30 Punkte, die die einzelnen Typen und Beziehungen zwischen ihnen beschreiben. Ich würde es gerne zeichnen.

Mein Versuch begann mit der Erlangung derISO / IEC 9899: 201x Komitee-Entwurf N1570 und Extrahieren aller wesentlichen Aussagen aus Abschnitt 6.2.5 des Dokuments. Dann fing ich an, das Wissen in Form eines Baumes neu zu ordnen. Lassen Sie mich meine Arbeit in zwei Schritten vorstellen.

Schritt 1: Punkte 1–15

Das extrahierte Wissen (Punkt in Abschnitt 6.2.5 + spezifizierte Produktion):

1 Typen = Objekttypen + Funktionsarten;4 Standard-Integer-Typen mit Vorzeichen = signed char, short int, int, long int, long long int;4 vorzeichenbehaftete Integer-Typen = Integer-Typen mit Vorzeichen +erweiterte Integer-Typen mit Vorzeichen;6 Standard-Integer-Typen ohne Vorzeichen = _Bool, unsigned char, unsigned short int, unsigned int, unsigned long int, unsigned long long int;6 vorzeichenlose Integer-Typen = Standard-Ganzzahlentypen ohne Vorzeichen +erweiterte vorzeichenlose Integer-Typen;7 Standard-Integer-Typen = Standard Integer-Typen mit Vorzeichen + Standard Integer-Typen ohne Vorzeichen;7 erweiterte Integer-Typen = erweiterte Ganzzahltypen mit Vorzeichen + erweiterte Ganzzahltypen ohne Vorzeichen;10echte schwimmende Typen = float, double, long double;11komplexe Arten = float _Complex, double _Complex, long double _Complex;12schwimmende Typen = echte schwebende Typen + komplexe Typen;14Grundtypen = char + Integer-Typen mit Vorzeichen + Integer-Typen ohne Vorzeichen + Floating-Typen;fünfzehnZeichentypen = char, signed char, unsigned char.

Und die resultierende Struktur:

types
    object types
    function types
basic types
    char
    sίgned integer types
        standard sίgned integer types
            signed char, short int, int, long int, long long int
        extended sίgned integer types
    unsίgned integer types
        standard unsίgned integer types
            _Bool, unsigned char, unsigned short int, unsigned int,
            unsigned long int, unsigned long long int
        extended unsίgned integer types
    floating types
        real floating types
            float, double, long double
        complex types
            float _Complex, double _Complex, long double _Complex
standard integer types
    standard sίgned integer types
    standard unsίgned integer types
extended integer types
    extended sίgned integer types
    extended unsίgned integer types
character types
    char, signed char, unsigned char
Schritt 2: Punkte 16–24

Die restlichen Aussagen:

16Aufzählungstypen;17Ganzzahltypen = char + Integer-Typen mit Vorzeichen + Integer-Typen ohne Vorzeichen + Aufzählungstypen;17echte Typen = Integer-Typen + echte Floating-Typen;18arithmetische Typen = Integer-Typen + Floating-Typen;20abgeleitete Typen = Array-Typen, Strukturtypen, Gewerkschaftstypen, Funktionsarten, Zeigertypen, Atomtypen;21Skalartypen = arithmetische Typen + Zeigertypen;21Aggregattypen = Arraytypen + Strukturtypen;24abgeleitete Deklaratortypen = Array-Typen + Funktionstypen + Zeigertypen.

Und die endgültige C11-Systemstruktur:

types
    object types
    function types
basic types
    char
    sίgned integer types
        standard sίgned integer types
            signed char, short int, int, long int, long long int
        extended sίgned integer types
    unsίgned integer types
        standard unsίgned integer types
            _Bool, unsigned char, unsigned short int, unsigned int,
            unsigned long int, unsigned long long int
        extended unsίgned integer types
    floating types
        real floating types
            float, double, long double
        complex types
            float _Complex, double _Complex, long double _Complex
standard integer types
    standard sίgned integer types
    standard unsίgned integer types
extended integer types
    extended sίgned integer types
    extended unsίgned integer types
character types
    char, signed char, unsigned char
real types
    integer types
        char
        sίgned integer types
            standard sίgned integer types
                signed char, short int, int, long int, long long int
            extended sίgned integer types
        unsίgned integer types
            standard unsίgned integer types
                _Bool, unsigned char, unsigned short int, unsigned int,
                unsigned long int, unsigned long long int
            extended unsίgned integer types
        enumeration  types
    real floating types
        float, double, long double
scalar types
    arithmetic types
        integer types
            char
            sίgned integer types
                standard sίgned integer types
                    signed char, short int, int, long int, long long int
                extended sίgned integer types
            unsίgned integer types
                standard unsίgned integer types
                    _Bool, unsigned char, unsigned short int, unsigned int,
                    unsigned long int, unsigned long long int
                extended unsίgned integer types
            enumeration  types
        floating types
            real floating types
                float, double, long double
            complex types
                float _Complex, double _Complex, long double _Complex
    pointer types
derived types
    array types
    structure types
    unίon types
    function types
    pointer types
    atomic types
aggregate types
    array type
    structure type
derived declarator types
    array type
    structure type
    pointer type

Jetzt muss ich die Struktur reduzieren (im Idealfall auf einen einzigen Baum) oder einen schwierigeren Weg finden, um die Beziehungen darzustellen. Ich möchte ein schönes Cheet-Sheet für das C11-Schreibsystem herausbringen. Irgendwelche Ideen?

Antworten auf die Frage(1)

Ihre Antwort auf die Frage