Entendendo a hierarquia do tipo C11

Eu gostaria de entender completamente a hierarquia de tipos da linguagem C11 e apresentá-la graficamente (um diagrama de árvore seria perfeito). A norma não fornece qualquer número para este problema - há 30 pontos descrevendo tipos individuais e relações entre eles. Eu gostaria de desenhar isso.

Minha tentativa começou de obter oISO / IEC 9899: 201x Projeto de Comitê N1570 e extrair todas as declarações essenciais da seção 6.2.5 do documento. Então, comecei a reorganizar o conhecimento na forma de uma árvore. Deixe-me apresentar meu trabalho em duas etapas.

Etapa 1: pontos 1 a 15

O conhecimento extraído (aponte na seção 6.2.5 + produção especificada):

1 tipos = tipos de objeto + tipos de função;4 tipos inteiros assinados padrão = signed char, short int, int, long int, long long int;4 tipos inteiros assinados = tipos inteiros assinados padrão +tipos inteiros assinados estendidos;6 tipos inteiros padrão não assinados = _Bool, unsigned char, unsigned short int, unsigned int, unsigned long int, unsigned long long int;6 tipos inteiros sem sinal = tipos inteiros padrão sem sinal +tipos inteiros não-estendidos estendidos;7 tipos inteiros padrão = tipos inteiros assinados padrão + tipos inteiros padrão sem sinal;7 tipos inteiros estendidos = tipos inteiros assinados estendidos + tipos inteiros estendidos sem sinal;10tipos flutuantes reais = float, double, long double;11tipos complexos = float _Complex, double _Complex, long double _Complex;12tipos flutuantes = tipos flutuantes reais + tipos complexos;14tipos básicos = char + tipos inteiros assinados + tipos inteiros sem sinal + tipos flutuantes;15tipos de personagem = char, signed char, unsigned char.

E a estrutura 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
Etapa 2: pontos 16 a 24

As declarações restantes:

16tipos enumerados;17tipos inteiros = char + tipos inteiros assinados + tipos inteiros sem sinal + tipos enumerados;17tipos reais = tipos inteiros + tipos flutuantes reais;18tipos aritméticos = tipos inteiros + tipos flutuantes;20tipos derivados = tipos de matriz, tipos de estrutura, tipos de união, tipos de função, tipos de ponteiro, tipos atômicos;21tipos escalares = tipos aritméticos + tipos de ponteiro;21tipos agregados = tipos de matriz + tipos de estrutura;24tipos de declaradores derivados = tipos de matriz + tipos de função + tipos de ponteiro.

E a estrutura final do 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

Agora eu preciso reduzir a estrutura (idealmente para uma única árvore) ou encontrar uma maneira mais complicada de representar as relações. Eu gostaria de ter uma boa folha de seleção para o sistema de digitação C11. Alguma ideia?

questionAnswers(1)

yourAnswerToTheQuestion