Zrozumienie hierarchii typów C11

Chciałbym w pełni zrozumieć hierarchię typów języka C11 i przedstawić go graficznie (idealny byłby diagram drzewa). Norma nie przedstawia żadnej liczby dla tego zagadnienia - istnieje 30 punktów opisujących poszczególne typy i relacje między nimi. Chciałbym to narysować.

Moja próba zaczęła się od zdobyciaProjekt ISO / IEC 9899: Komitet 201x N1570 i wyodrębnienie wszystkich istotnych stwierdzeń z sekcji 6.2.5 dokumentu. Potem zacząłem zmieniać wiedzę w formie drzewa. Pozwólcie, że przedstawię moją pracę w dwóch krokach.

Krok 1: punkty 1–15

Wyodrębniona wiedza (punkt w sekcji 6.2.5 + określona produkcja):

1 typy = typy obiektów + typy funkcji;4 standardowe podpisane typy całkowite = signed char, short int, int, long int, long long int;4 podpisane typy całkowite = standardowe podpisane typy całkowite +rozszerzone podpisane typy całkowite;6 standardowe typy liczb całkowitych bez znaku = _Bool, unsigned char, unsigned short int, unsigned int, unsigned long int, unsigned long long int;6 typy całkowite bez znaku = standardowe liczby całkowite bez znaku +rozszerzone typy liczb całkowitych bez znaku;7 standardowe typy całkowite = standardowe podpisane typy całkowite + standardowe typy liczb całkowitych bez znaku;7 rozszerzone typy całkowite = rozszerzone typy liczb całkowitych ze znakiem + rozszerzone typy liczb całkowitych bez znaku;10prawdziwe typy pływające = float, double, long double;11typy złożone = float _Complex, double _Complex, long double _Complex;12typy pływające = prawdziwe typy pływające + typy złożone;14podstawowe typy = char + podpisane typy całkowite + typy całkowite bez znaku + typy zmiennoprzecinkowe;15typy znaków = char, signed char, unsigned char.

I wynikająca z tego struktura:

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
Krok 2: punkty 16–24

Pozostałe oświadczenia:

16wyliczone typy;17typy całkowite = char + podpisane typy całkowite + typy całkowite bez znaku + typy wyliczone;17prawdziwe typy = typy całkowite + prawdziwe typy pływające;18typy arytmetyczne = typy całkowite + typy pływające;20typy pochodne = typy tablic, typy struktur, typy unii, typy funkcji, typy wskaźników, typy atomowe;21typy skalarne = typy arytmetyczne + typy wskaźników;21typy agregatów = typy tablic + typy struktur;24pochodne typy deklaratorów = typy tablic + typy funkcji + typy wskaźników.

I ostateczna struktura systemu typu C11:

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

Teraz muszę zredukować strukturę (najlepiej do pojedynczego drzewa) lub znaleźć bardziej skomplikowany sposób reprezentowania relacji. Chciałbym wyjść z ładną karteczką do systemu pisania C11. Jakieś pomysły?

questionAnswers(1)

yourAnswerToTheQuestion