Я хотел бы полностью понять иерархию типов языка 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. Любые идеи?