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שפות נוספות (מצוינות במילה ה-3)

הידרדרות חיננית: בעת אובדן סיביות, מתכנס לשושלת העליונה → בסופו של דבר נופל ל-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