Entendiendo la jerarquía de tipos C11

Me gustaría entender completamente la jerarquía de tipos del lenguaje C11 y presentarla gráficamente (un diagrama de árbol sería perfecto). El estándar no proporciona ninguna cifra para este problema: hay 30 puntos que describen los tipos individuales y las relaciones entre ellos. Me gustaría dibujarlo.

Mi intento comenzó de obtener elISO / IEC 9899: Proyecto de Comité 201x N1570 y extraer todas las declaraciones esenciales de la sección 6.2.5 del documento. Entonces, comencé a reorganizar el conocimiento en forma de árbol. Permítanme presentarles mi trabajo en dos pasos.

Paso 1: puntos 1–15

El conocimiento extraído (punto dentro de la sección 6.2.5 + producción específica):

1 tipos = tipos de objetos + tipos de funciones;4 tipos enteros con signo estándar = signed char, short int, int, long int, long long int;4 tipos enteros con signo = tipos enteros con signo estándar +tipos enteros con signo extendido;6 tipos enteros sin signo estándar = _Bool, unsigned char, unsigned short int, unsigned int, unsigned long int, unsigned long long int;6 tipos enteros sin signo = tipos enteros sin signo estándar +tipos enteros sin signo extendidos;7 tipos enteros estándar = tipos enteros con signo estándar + tipos enteros sin signo estándar;7 tipos enteros extendidos = tipos enteros con signo extendido + tipos enteros sin signo extendidos;10tipos flotantes reales = float, double, long double;11tipos complejos = float _Complex, double _Complex, long double _Complex;12tipos flotantes = tipos flotantes reales + tipos complejos;14Tipos basicos = char + tipos de enteros con signo + tipos de enteros sin signo + tipos flotantes;15tipos de personajes = char, signed char, unsigned char.

Y la estructura resultante:

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
Paso 2: puntos 16–24

Las declaraciones restantes:

dieciséistipos enumerados;17tipos enteros = char + tipos de enteros con signo + tipos de enteros sin signo + tipos enumerados;17tipos reales = tipos enteros + tipos flotantes reales;18tipos aritméticos = tipos enteros + tipos flotantes;20tipos derivados = tipos de matriz, tipos de estructura, tipos de union, tipos de funciones, tipos de puntero, tipos atómicos;21tipos escalares = tipos aritméticos + tipos de punteros;21tipos agregados = tipos de matrices + tipos de estructuras;24tipos declaradores derivados = tipos de matrices + tipos de funciones + tipos de punteros.

Y la estructura final del sistema tipo 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

Ahora necesito reducir la estructura (idealmente a un solo árbol) o encontrar una manera más difícil de representar las relaciones. Me gustaría presentar una buena hoja para el sistema de escritura C11. ¿Algunas ideas?

Respuestas a la pregunta(1)

Su respuesta a la pregunta