Понимание иерархии типов 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. Есть идеи?