
1. <object>
1.1. <options>
1.1.1. выражения связанные с объявлением объекта, аргументы функций, параметры наследования и т.п.
1.2. <code>
1.2.1. лексически расположенные объекты, вызовы
1.3. <type>
1.3.1. возможные дети
1.3.1.1. <object>
1.3.1.2. <reference>
1.3.1.3. <atom>
1.3.2. примечание
1.3.2.1. вся информация связанная с типом объекта
1.4. <meta>
1.5. атрибуты
1.5.1. @isExecutable
1.5.1.1. примеры: { , function
1.5.2. @isAbstract
1.5.2.1. примеры: namespace, class, template
2. <reference>
2.1. <meta>
2.2. <code>
2.2.1. @target_ID
3. <atom>
3.1. <meta>
3.2. примеры
3.2.1. "строка"
3.2.2. 124.56
3.2.3. встроенные в язык типы и значения (bool,void, NULL)
3.3. примечание
3.3.1. основное отличие atom, что в отличии от reference в этом месте кода УЖЕ доступно его полное определение, не требуется дальнейшее разрешение символа, не нужен lookup по коду при следующих проходах
4. <flow>
4.1. <options>
4.1.1. выражения связанные с условием
4.2. <code>
4.2.1. ветвь выполнения #1
4.2.2. ...
4.2.3. ветвь выполнения #N
4.3. <meta>
4.4. атрибуты
4.4.1. @isDirectTransfer
4.4.1.1. во многих языках есть операторы непосредственного перехода на заданные фрагменты программы типичные примеры: jnz, goto, func(); переход, isDirectTransfer - его признак, в случае его наличия все элементы <code>: атомы, референсы, объекты являются не инструкциями а информацией по цели перехода, названия функций, смещения и т.п.
5. <expression>
5.1. <options>
5.1.1. элементы, которые являются источниками модификации
5.2. <code>
5.2.1. элементы, которые являются приемниками модификации
5.3. <meta>
6. <macros>
6.1. <meta>
6.2. атрибуты
6.2.1. @isAnnotation
6.2.1.1. комментарй или нет
6.2.2. @isOption
6.2.2.1. признак того, что это опция обработки (pragma, warning, display)
6.2.3. @isSubmodule
6.2.3.1. признак того что является элементов определяющим модульность (uses, import, возможно даже include в случае отсутствия препроцессора)
6.2.4. @isGeneric
6.2.4.1. различные определения используемые в обобщенным программировании: define, typedef и т.п. могут быть обработаны и ранее, на этапе препроцессора
7. общее у всех элементов
7.1. неймспейсы
7.1.1. code_common: http://s3r.ru/ns/code_common
7.1.1.1. дефолтовый неймспейс для всего представления кода
7.1.2. code_specific http://s3r/ns/cpp,java,etc
7.1.2.1. неймспейсы связанные с содержимым <meta> у всех конкретных языков программирования, возможно имеет смысл делать для целых группы языков, например ns_ecma
7.1.3. code_analysis http://s3r.ru/ns/code_analysis
7.1.3.1. неймспейсы связанные с анализом кода, информация о том, что распарсено/нераспарсено, с семантикой элементов всё это тоже хранится в <meta>
7.2. атрибуты
7.2.1. id
7.2.1.1. идентификатор объекта, числовое значение, результат работы последующих проходов анализа, элемент необязательный, в 1-ом представлении может отсутствовать
7.2.2. name
7.2.2.1. имя, идентификатор объекта
7.2.3. position(x,y)
7.2.3.1. позиция элемента в коде
7.3. дочерние элементы
7.3.1. <options>
7.3.1.1. аргументы, параметры элемента
7.3.2. <code>
7.3.2.1. основное содержимое элемента
7.3.3. <meta>
7.3.3.1. метаданные элемента, как правило связанные с особенностью реализации в любых языках программирования
7.3.4. <source>
7.3.4.1. представление объекта в исходных текстах, является обязательным если не удалось распарсить этот элемент
8. <module>
8.1. <все виды элементов>
8.2. примеры
8.2.1. PASCAL: unit Unit1
8.2.2. C: _asm {