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)
ПолеБитыРазмерОписание
Prefix1-10100001 000 001 (AST Edge)
Язык11-166Код языка программирования
Тип AST-узла17-248Тип узла (разбиение 3+5)
Резерв25-328Для будущего расширения (сейчас 0x00)
Edge TID33-4816Уникальный идентификатор этого Edge
Дочерние TID49+16×NСсылки на дочерние узлы

Кол-во слов: минимум 3 (лист) ~ обычно 4-8 ~ без ограничений

Коды языков (6 бит)

Классификация по происхождению. bit1-2 — крупная категория (парадигма), bit3-6 — конкретный язык.

Системные/низкоуровневые (00xxxx)

КодЯзыкОписание
000000AbstractОбщий AST для всех языков
000001CПрототип системного языка
000010C++Расширение C
000011RustСовременный системный
000100GoСовременный системный
000101ZigСовременный системный
000110AssemblyСамый низкий уровень
000111DСистемный
001000NimСистемный

Прикладные/VM (01xxxx)

КодЯзыкОписание
010000JavaПрототип VM
010001C#.NET
010010KotlinJVM
010011ScalaJVM+функциональный
010100SwiftApple
010101DartFlutter
010110GroovyJVM
010111ClojureJVM+Lisp

Скриптовые/динамические (10xxxx)

КодЯзыкОписание
100000PythonПрототип скриптового
100001JavaScriptВеб
100010TypeScriptJS+типы
100011RubyУниверсальный
100100PHPВеб-серверный
100101LuaВстраиваемый
100110PerlОбработка текста
100111RСтатистика
101000JuliaНаучные вычисления
101001MATLABЧисл. анализ

Декларативные/функциональные/прочие (11xxxx)

КодЯзыкОписание
110000SQLЗапросы
110001HaskellЧисто функциональный
110010OCamlСемейство ML
110011F#.NET функциональный
110100ElixirBEAM
110101ErlangBEAM
110110ShellBash/Zsh
110111PowerShellWindows
111000WASMБайткод
111001LLVM IRПромежуточное представление
111010HTMLРазметка
111011CSSСтили
111100JSONДанные
111101YAMLДанные
111110PathGEULЯзык навигации по графу GEUL
111111РасширениеДоп. языки (указ. в 3rd слове)

Graceful degradation: При потере бит происходит схождение к верхней ветви → в конечном итоге фолбэк на Abstract(000000).

Типы AST-узлов (8 бит)

Разбиение на 3-бит крупную категорию + 5-бит подтип.

Крупные категории

КодКатегорияОписание
000DeclarationОбъявления (функция, переменная, тип)
001StatementОператоры (условия, циклы)
010ExpressionВыражения (операции, вызовы)
011TypeТиповые выражения
100PatternСопоставление с образцом
101ModifierМодификаторы (доступ, async)
110StructureСтруктура (блок, модуль)
111Language-specificУзлы, специфичные для языка

Declaration (000xxxxx)

КодУзелGoPythonC
000 00000FuncDeclFuncDeclFunctionDefFunctionDecl
000 00001VarDeclGenDecl(var)AssignVarDecl
000 00010ConstDeclGenDecl(const)-VarDecl(const)
000 00011TypeDeclTypeSpec-TypedefDecl
000 00100StructDeclStructTypeClassDefRecordDecl
000 00101InterfaceDeclInterfaceTypeClassDef(ABC)-
000 00110EnumDecl-EnumEnumDecl
000 00111ParamDeclFieldargParmVarDecl
000 01000MethodDeclFuncDecl(recv)FunctionDefCXXMethodDecl
000 01001ImportDeclImportSpecImport#include
000 01010PackageDeclpackage--
000 01011FieldDeclField-FieldDecl
000 01100LabelDeclLabeledStmt-LabelDecl

Statement (001xxxxx)

КодУзелЗначение
001 00000IfStmtУсловный оператор
001 00001ForStmtЦикл for
001 00010RangeStmtЦикл по итератору
001 00011WhileStmtЦикл while
001 00100SwitchStmtswitch/match
001 00101CaseClauseВетвь case
001 00110ReturnStmtВозврат
001 00111BreakStmtВыход из цикла
001 01000ContinueStmtПродолжение
001 01001GotoStmtgoto
001 01010BlockStmtБлок { }
001 01011ExprStmtОператор-выражение
001 01100AssignStmtПрисваивание
001 01101DeclStmtОператор объявления
001 01110TryStmtОбработка исключений
001 01111ThrowStmtВыброс исключения
001 10000DeferStmtdefer
001 10001GoStmtgo
001 10010SelectStmtselect
001 10011WithStmtwith
001 10100AssertStmtassert
001 10101PassStmtpass

Expression (010xxxxx)

КодУзелЗначение
010 00000BinaryExprБинарная операция
010 00001UnaryExprУнарная операция
010 00010CallExprВызов функции
010 00011IndexExprДоступ по индексу a[i]
010 00100SliceExprСрез a[i:j]
010 00101SelectorExprДоступ к полю a.b
010 00110IdentИдентификатор
010 00111BasicLitЛитерал
010 01000CompositeLitСоставной литерал
010 01001FuncLitЛямбда/анонимная функция
010 01010ParenExprСкобки (a)
010 01011StarExprУказатель *a
010 01100UnaryAddrАдрес &a
010 01101TypeAssertExprУтверждение типа
010 01110KeyValueExprkey: value
010 01111TernaryExprТернарная операция
010 10000ListCompСписковое включение
010 10001DictCompСловарное включение
010 10010GeneratorExprГенератор
010 10011AwaitExprawait
010 10100YieldExpryield
010 10101SendExprОтправка в канал <-
010 10110RecvExprПриём из канала <-ch

Type (011xxxxx)

КодУзелЗначение
011 00000IdentTypeИменованный тип
011 00001PointerTypeУказатель *T
011 00010ArrayTypeМассив [N]T
011 00011SliceTypeСрез []T
011 00100MapTypeСловарь map[K]V
011 00101ChanTypeКанал chan T
011 00110FuncTypeФункциональный тип
011 00111StructTypeТип структуры
011 01000InterfaceTypeТип интерфейса
011 01001UnionTypeОбъединение A | B
011 01010OptionalTypeОпциональный T?
011 01011GenericTypeОбобщённый T[U]
011 01100TupleTypeКортеж (A, B)

Pattern (100xxxxx)

КодУзелЗначение
100 00000WildcardPattern_
100 00001IdentPatternПривязка имени
100 00010LiteralPatternСопоставление с литералом
100 00011TuplePatternКортеж (a, b)
100 00100ListPatternСписок [a, b]
100 00101StructPatternСтруктура {a, b}
100 00110OrPatterna | b
100 00111GuardPatternУсловие-охранник

Modifier (101xxxxx)

КодУзелЗначение
101 00000Publicpublic/exported
101 00001Privateprivate
101 00010Protectedprotected
101 00011Staticstatic
101 00100Constconst
101 00101Asyncasync
101 00110Volatilevolatile
101 00111Inlineinline
101 01000Virtualvirtual
101 01001Abstractabstract
101 01010Finalfinal

Structure (110xxxxx)

КодУзелЗначение
110 00000FileФайл (верхний уровень)
110 00001ModuleМодуль
110 00010PackageПакет
110 00011NamespaceПространство имён
110 00100BlockБлок
110 00101CommentGroupГруппа комментариев
110 00110CommentКомментарий
110 00111DirectiveДиректива (#pragma)

Language-specific (111xxxxx)

Узлы, специфичные для конкретных языков. 32 свободных позиции.

PathGEUL (111110)

PathGEUL — язык запросов для навигации по графу GEUL. Подобно тому, как XPath навигирует по XML, PathGEUL навигирует по графу GEUL.

При коде языка 111110 8-битный тип AST-узла переинтерпретируется как оператор запроса.

КодОперацияАналог XPathОписание
00000000Root/Корневой узел
00000001Child/childПрямой потомок
00000010Descendant//Все потомки
00000011Parent..Родитель
00000100Ancestorancestor::Все предки
00000101Siblingsibling::Братья/сёстры
00010000FilterType[type=…]Фильтр по типу
00100000FilterProp[@prop=…]Фильтр по свойству
01000000Union|Объединение
01000001Intersect&Пересечение

Примеры

Объявление функции 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 слова