AST Edge — тип Edge для представления AST (Abstract Syntax Tree) языков программирования в графе GEUL.
| Свойство | Описание |
|---|
| Многоязычность | 6 бит для 64 языков |
| Общие AST-узлы | Одинаковые концепции — одинаковый код |
| Классификация по происхождению | Поддержка graceful degradation |
| Интеграция PathGEUL | Встроенный язык навигации по графу GEUL |
Структура пакета
1st WORD (16 бит)
┌─────────────────────┬────────────────────┐
│ Prefix │ Язык │
│ 10bit │ 6bit │
└─────────────────────┴────────────────────┘
2nd WORD (16 бит)
┌─────────────────────────┬───────────────────┐
│ Тип AST-узла │ Резерв │
│ 8bit │ 8bit │
└─────────────────────────┴───────────────────┘
3rd WORD (16 бит)
┌─────────────────────────────────────────────┐
│ Edge TID │
│ 16bit │
└─────────────────────────────────────────────┘
4th+ WORD: TID дочерних узлов (перемен., завершается маркером 0x0000)
| Поле | Биты | Размер | Описание |
|---|
| Prefix | 1-10 | 10 | 0001 000 001 (AST Edge) |
| Язык | 11-16 | 6 | Код языка программирования |
| Тип AST-узла | 17-24 | 8 | Тип узла (разбиение 3+5) |
| Резерв | 25-32 | 8 | Для будущего расширения (сейчас 0x00) |
| Edge TID | 33-48 | 16 | Уникальный идентификатор этого Edge |
| Дочерние TID | 49+ | 16×N | Ссылки на дочерние узлы |
Кол-во слов: минимум 3 (лист) ~ обычно 4-8 ~ без ограничений
Коды языков (6 бит)
Классификация по происхождению. bit1-2 — крупная категория (парадигма), bit3-6 — конкретный язык.
Системные/низкоуровневые (00xxxx)
| Код | Язык | Описание |
|---|
| 000000 | Abstract | Общий AST для всех языков |
| 000001 | C | Прототип системного языка |
| 000010 | C++ | Расширение C |
| 000011 | Rust | Современный системный |
| 000100 | Go | Современный системный |
| 000101 | Zig | Современный системный |
| 000110 | Assembly | Самый низкий уровень |
| 000111 | D | Системный |
| 001000 | Nim | Системный |
Прикладные/VM (01xxxx)
| Код | Язык | Описание |
|---|
| 010000 | Java | Прототип VM |
| 010001 | C# | .NET |
| 010010 | Kotlin | JVM |
| 010011 | Scala | JVM+функциональный |
| 010100 | Swift | Apple |
| 010101 | Dart | Flutter |
| 010110 | Groovy | JVM |
| 010111 | Clojure | JVM+Lisp |
Скриптовые/динамические (10xxxx)
| Код | Язык | Описание |
|---|
| 100000 | Python | Прототип скриптового |
| 100001 | JavaScript | Веб |
| 100010 | TypeScript | JS+типы |
| 100011 | Ruby | Универсальный |
| 100100 | PHP | Веб-серверный |
| 100101 | Lua | Встраиваемый |
| 100110 | Perl | Обработка текста |
| 100111 | R | Статистика |
| 101000 | Julia | Научные вычисления |
| 101001 | MATLAB | Числ. анализ |
Декларативные/функциональные/прочие (11xxxx)
| Код | Язык | Описание |
|---|
| 110000 | SQL | Запросы |
| 110001 | Haskell | Чисто функциональный |
| 110010 | OCaml | Семейство ML |
| 110011 | F# | .NET функциональный |
| 110100 | Elixir | BEAM |
| 110101 | Erlang | BEAM |
| 110110 | Shell | Bash/Zsh |
| 110111 | PowerShell | Windows |
| 111000 | WASM | Байткод |
| 111001 | LLVM IR | Промежуточное представление |
| 111010 | HTML | Разметка |
| 111011 | CSS | Стили |
| 111100 | JSON | Данные |
| 111101 | YAML | Данные |
| 111110 | PathGEUL | Язык навигации по графу GEUL |
| 111111 | Расширение | Доп. языки (указ. в 3rd слове) |
Graceful degradation: При потере бит происходит схождение к верхней ветви → в конечном итоге фолбэк на Abstract(000000).
Типы AST-узлов (8 бит)
Разбиение на 3-бит крупную категорию + 5-бит подтип.
Крупные категории
| Код | Категория | Описание |
|---|
| 000 | Declaration | Объявления (функция, переменная, тип) |
| 001 | Statement | Операторы (условия, циклы) |
| 010 | Expression | Выражения (операции, вызовы) |
| 011 | Type | Типовые выражения |
| 100 | Pattern | Сопоставление с образцом |
| 101 | Modifier | Модификаторы (доступ, async) |
| 110 | Structure | Структура (блок, модуль) |
| 111 | Language-specific | Узлы, специфичные для языка |
Declaration (000xxxxx)
| Код | Узел | Go | Python | C |
|---|
| 000 00000 | FuncDecl | FuncDecl | FunctionDef | FunctionDecl |
| 000 00001 | VarDecl | GenDecl(var) | Assign | VarDecl |
| 000 00010 | ConstDecl | GenDecl(const) | - | VarDecl(const) |
| 000 00011 | TypeDecl | TypeSpec | - | TypedefDecl |
| 000 00100 | StructDecl | StructType | ClassDef | RecordDecl |
| 000 00101 | InterfaceDecl | InterfaceType | ClassDef(ABC) | - |
| 000 00110 | EnumDecl | - | Enum | EnumDecl |
| 000 00111 | ParamDecl | Field | arg | ParmVarDecl |
| 000 01000 | MethodDecl | FuncDecl(recv) | FunctionDef | CXXMethodDecl |
| 000 01001 | ImportDecl | ImportSpec | Import | #include |
| 000 01010 | PackageDecl | package | - | - |
| 000 01011 | FieldDecl | Field | - | FieldDecl |
| 000 01100 | LabelDecl | LabeledStmt | - | LabelDecl |
Statement (001xxxxx)
| Код | Узел | Значение |
|---|
| 001 00000 | IfStmt | Условный оператор |
| 001 00001 | ForStmt | Цикл for |
| 001 00010 | RangeStmt | Цикл по итератору |
| 001 00011 | WhileStmt | Цикл while |
| 001 00100 | SwitchStmt | switch/match |
| 001 00101 | CaseClause | Ветвь case |
| 001 00110 | ReturnStmt | Возврат |
| 001 00111 | BreakStmt | Выход из цикла |
| 001 01000 | ContinueStmt | Продолжение |
| 001 01001 | GotoStmt | goto |
| 001 01010 | BlockStmt | Блок { } |
| 001 01011 | ExprStmt | Оператор-выражение |
| 001 01100 | AssignStmt | Присваивание |
| 001 01101 | DeclStmt | Оператор объявления |
| 001 01110 | TryStmt | Обработка исключений |
| 001 01111 | ThrowStmt | Выброс исключения |
| 001 10000 | DeferStmt | defer |
| 001 10001 | GoStmt | go |
| 001 10010 | SelectStmt | select |
| 001 10011 | WithStmt | with |
| 001 10100 | AssertStmt | assert |
| 001 10101 | PassStmt | pass |
Expression (010xxxxx)
| Код | Узел | Значение |
|---|
| 010 00000 | BinaryExpr | Бинарная операция |
| 010 00001 | UnaryExpr | Унарная операция |
| 010 00010 | CallExpr | Вызов функции |
| 010 00011 | IndexExpr | Доступ по индексу a[i] |
| 010 00100 | SliceExpr | Срез a[i:j] |
| 010 00101 | SelectorExpr | Доступ к полю a.b |
| 010 00110 | Ident | Идентификатор |
| 010 00111 | BasicLit | Литерал |
| 010 01000 | CompositeLit | Составной литерал |
| 010 01001 | FuncLit | Лямбда/анонимная функция |
| 010 01010 | ParenExpr | Скобки (a) |
| 010 01011 | StarExpr | Указатель *a |
| 010 01100 | UnaryAddr | Адрес &a |
| 010 01101 | TypeAssertExpr | Утверждение типа |
| 010 01110 | KeyValueExpr | key: value |
| 010 01111 | TernaryExpr | Тернарная операция |
| 010 10000 | ListComp | Списковое включение |
| 010 10001 | DictComp | Словарное включение |
| 010 10010 | GeneratorExpr | Генератор |
| 010 10011 | AwaitExpr | await |
| 010 10100 | YieldExpr | yield |
| 010 10101 | SendExpr | Отправка в канал <- |
| 010 10110 | RecvExpr | Приём из канала <-ch |
Type (011xxxxx)
| Код | Узел | Значение |
|---|
| 011 00000 | IdentType | Именованный тип |
| 011 00001 | PointerType | Указатель *T |
| 011 00010 | ArrayType | Массив [N]T |
| 011 00011 | SliceType | Срез []T |
| 011 00100 | MapType | Словарь map[K]V |
| 011 00101 | ChanType | Канал chan T |
| 011 00110 | FuncType | Функциональный тип |
| 011 00111 | StructType | Тип структуры |
| 011 01000 | InterfaceType | Тип интерфейса |
| 011 01001 | UnionType | Объединение A | B |
| 011 01010 | OptionalType | Опциональный T? |
| 011 01011 | GenericType | Обобщённый T[U] |
| 011 01100 | TupleType | Кортеж (A, B) |
Pattern (100xxxxx)
| Код | Узел | Значение |
|---|
| 100 00000 | WildcardPattern | _ |
| 100 00001 | IdentPattern | Привязка имени |
| 100 00010 | LiteralPattern | Сопоставление с литералом |
| 100 00011 | TuplePattern | Кортеж (a, b) |
| 100 00100 | ListPattern | Список [a, b] |
| 100 00101 | StructPattern | Структура {a, b} |
| 100 00110 | OrPattern | a | b |
| 100 00111 | GuardPattern | Условие-охранник |
Modifier (101xxxxx)
| Код | Узел | Значение |
|---|
| 101 00000 | Public | public/exported |
| 101 00001 | Private | private |
| 101 00010 | Protected | protected |
| 101 00011 | Static | static |
| 101 00100 | Const | const |
| 101 00101 | Async | async |
| 101 00110 | Volatile | volatile |
| 101 00111 | Inline | inline |
| 101 01000 | Virtual | virtual |
| 101 01001 | Abstract | abstract |
| 101 01010 | Final | final |
Structure (110xxxxx)
| Код | Узел | Значение |
|---|
| 110 00000 | File | Файл (верхний уровень) |
| 110 00001 | Module | Модуль |
| 110 00010 | Package | Пакет |
| 110 00011 | Namespace | Пространство имён |
| 110 00100 | Block | Блок |
| 110 00101 | CommentGroup | Группа комментариев |
| 110 00110 | Comment | Комментарий |
| 110 00111 | Directive | Директива (#pragma) |
Language-specific (111xxxxx)
Узлы, специфичные для конкретных языков. 32 свободных позиции.
PathGEUL (111110)
PathGEUL — язык запросов для навигации по графу GEUL. Подобно тому, как XPath навигирует по XML, PathGEUL навигирует по графу GEUL.
При коде языка 111110 8-битный тип AST-узла переинтерпретируется как оператор запроса.
| Код | Операция | Аналог XPath | Описание |
|---|
| 00000000 | Root | / | Корневой узел |
| 00000001 | Child | /child | Прямой потомок |
| 00000010 | Descendant | // | Все потомки |
| 00000011 | Parent | .. | Родитель |
| 00000100 | Ancestor | ancestor:: | Все предки |
| 00000101 | Sibling | sibling:: | Братья/сёстры |
| 00010000 | FilterType | [type=…] | Фильтр по типу |
| 00100000 | FilterProp | [@prop=…] | Фильтр по свойству |
| 01000000 | Union | | | Объединение |
| 01000001 | Intersect | & | Пересечение |
Примеры
Объявление функции Go
func Add(a, b int) int {
return a + b
}
AST Edge (FuncDecl):
1st: [Prefix 10bit] [000100] - Prefix + Go
2nd: [000 00000] [00000000] - FuncDecl + резерв
3rd: [TID: 0x0010] - TID этого Edge
4th: [TID: 0x0011] - Name "Add"
5th: [TID: 0x0012] - Params
6th: [TID: 0x0013] - Results
7th: [TID: 0x0014] - Body
8th: [0x0000] - завершение
Всего: 8 слов
Определение функции Python
def greet(name: str) -> str:
return f"Hello, {name}"
AST Edge (FuncDecl):
1st: [Prefix 10bit] [100000] - Prefix + Python
2nd: [000 00000] [00000000] - FuncDecl + резерв
3rd: [TID: 0x0020] - TID этого Edge
4th: [TID: 0x0021] - Name "greet"
5th: [TID: 0x0022] - Params
6th: [TID: 0x0023] - Returns
7th: [TID: 0x0024] - Body
8th: [0x0000] - завершение
Всего: 8 слов
Листовой узел (идентификатор)
AST Edge (Ident):
1st: [Prefix 10bit] [000100] - Prefix + Go
2nd: [010 00110] [00000000] - Ident + резерв
3rd: [TID: 0x0030] - TID этого Edge
4th: [0x0000] - завершение (нет дочерних)
Всего: 4 слова