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 15O 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 24As 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?