AST Edge هو نوع Edge يمثل شجرة AST (Abstract Syntax Tree) للغات البرمجة في رسم GEUL البياني.

الخاصيةالوصف
دعم متعدد اللغات64 لغة بـ 6 بت
عقد AST مشتركةالمفاهيم المشتركة بين اللغات تحمل نفس الرمز
تصنيف بحسب السلالةدعم التدهور الأنيق (graceful degradation)
تكامل PathGEULتضمين لغة استعلام رسم GEUL

بنية الحزمة

1st WORD (16 bits)
┌─────────────────────┬────────────────────┐
│       Prefix        │     Language       │
│       10bit         │        6bit        │
└─────────────────────┴────────────────────┘

2nd WORD (16 bits)
┌─────────────────────────┬───────────────────┐
│     AST Node Type       │     Reserved      │
│         8bit            │       8bit        │
└─────────────────────────┴───────────────────┘

3rd WORD (16 bits)
┌─────────────────────────────────────────────┐
│                  Edge TID                   │
│                   16bit                     │
└─────────────────────────────────────────────┘

4th+ WORD: Child TIDs (variable, ends with 0x0000)
الحقلالبتاتالحجمالوصف
Prefix1-10100001 000 001 (AST Edge)
Language11-166رمز لغة البرمجة
AST Node Type17-248نوع العقدة (تقسيم 3+5)
Reserved25-328للتوسيع المستقبلي (حالياً 0x00)
Edge TID33-4816معرّف فريد لهذا Edge
Child TIDs49+16×Nمراجع العقد الفرعية

عدد الكلمات: حد أدنى 3 كلمات (عقدة ورقة) ~ عادة 4-8 كلمات ~ بدون حد أقصى

رموز اللغات (6 بت)

تصنيف بحسب السلالة. bit1-2 للتصنيف الكبير (النموذج)، bit3-6 للغة المحددة.

نظام/منخفض المستوى (00xxxx)

الرمزاللغةالوصف
000000AbstractAST مشترك لجميع اللغات
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
111111Extended Wordلغات إضافية (محددة في الكلمة الثالثة)

التدهور الأنيق: عند فقدان بتات، يتقارب نحو السلالة العليا → في النهاية يرجع إلى 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 10000ListComplist comprehension
010 10001DictCompdict comprehension
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 Node Type كـ عوامل استعلام.

الرمزالعمليةمقابل 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 + Reserved
  3rd: [TID: 0x0010]                 - Edge TID
  4th: [TID: 0x0011]                 - Name "Add"
  5th: [TID: 0x0012]                 - Params
  6th: [TID: 0x0013]                 - Results
  7th: [TID: 0x0014]                 - Body
  8th: [0x0000]                      - Terminator

Total: 8 words

تعريف دالة Python

def greet(name: str) -> str:
    return f"Hello, {name}"
AST Edge (FuncDecl):
  1st: [Prefix 10bit] [100000]       - Prefix + Python
  2nd: [000 00000] [00000000]        - FuncDecl + Reserved
  3rd: [TID: 0x0020]                 - Edge TID
  4th: [TID: 0x0021]                 - Name "greet"
  5th: [TID: 0x0022]                 - Params
  6th: [TID: 0x0023]                 - Returns
  7th: [TID: 0x0024]                 - Body
  8th: [0x0000]                      - Terminator

Total: 8 words

عقدة ورقة (معرّف)

AST Edge (Ident):
  1st: [Prefix 10bit] [000100]       - Prefix + Go
  2nd: [010 00110] [00000000]        - Ident + Reserved
  3rd: [TID: 0x0030]                 - Edge TID
  4th: [0x0000]                      - Terminator (no children)

Total: 4 words