Понимание иерархии типов C11

Я хотел бы полностью понять иерархию типов языка C11 и представить ее графически (древовидная диаграмма была бы идеальной). Стандарт не дает никаких данных по этому вопросу - есть 30 пунктов, описывающих отдельные типы и отношения между ними. Я хотел бы нарисовать это.

Моя попытка началась с полученияИСО / МЭК 9899: 201x Проект комитета N1570 и извлекая все существенные утверждения из раздела 6.2.5 документа. Затем я начал переставлять знания в виде дерева. Позвольте мне представить мою работу в два этапа.

Шаг 1: баллы 1–15

Извлеченные знания (пункт в разделе 6.2.5 + указанная продукция):

1 типы = типы объектов + типы функций;4 стандартные целочисленные типы со знаком = signed char, short int, int, long int, long long int;4 целочисленные типы со знаком = стандартные целочисленные типы со знаком +расширенные целые типы со знаком;6 стандартные целочисленные типы без знака = _Bool, unsigned char, unsigned short int, unsigned int, unsigned long int, unsigned long long int;6 целочисленные типы без знака = стандартные целочисленные типы без знака +расширенные целочисленные типы без знака;7 стандартные целочисленные типы = стандартные целочисленные типы со знаком + стандартные целочисленные типы без знака;7 расширенные целочисленные типы = расширенные целочисленные типы со знаком + расширенные целочисленные типы без знака;10реальные плавающие типы = float, double, long double;11сложные типы = float _Complex, double _Complex, long double _Complex;12плавающие типы = реальные плавающие типы + сложные типы;14основные типы = char + целочисленные типы со знаком + целочисленные типы без знака + плавающие типы;15типы символов = char, signed char, unsigned char.

И полученная структура:

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
Шаг 2: пункты 16–24

Остальные высказывания:

16перечисляемые типы;17целочисленные типы = char + целочисленные типы со знаком + целочисленные типы без знака + перечисляемые типы;17реальные типы = целочисленные типы + реальные плавающие типы;18арифметические типы = целочисленные типы + плавающие типы;20производные типы = типы массивов, типы конструкций, объединение типов, типы функций, типы указателей, атомные типы;21скалярные типы = арифметические типы + типы указателей;21типы агрегатов = типы массивов + типы структур;24производные типы объявлений = типы массивов + типы функций + типы указателей.

И окончательная структура системы типа 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

Теперь мне нужно уменьшить структуру (в идеале до одного дерева) или найти более хитрый способ представления отношений. Я хотел бы выпустить хороший лист для системы печати C11. Есть идеи?

Ответы на вопрос(1)

Ваш ответ на вопрос