AST Edge ist ein Edge-Typ, der den AST (Abstract Syntax Tree) von Programmiersprachen als GEUL-Graph darstellt.

EigenschaftBeschreibung
Mehrsprachige Unterstuetzung64 Sprachen auf 6 Bit
Gemeinsame AST-KnotenGleicher Code fuer gleiche Konzepte zwischen Sprachen
Familienbasierte KlassifikationUnterstuetzung eleganter Degradation (graceful degradation)
PathGEUL-IntegrationGEUL-Graph-Traversierungssprache enthalten

Paketstruktur

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

2nd WORD (16 Bit)
┌─────────────────────────┬───────────────────┐
│     AST-Knotentyp       │     Reserviert    │
│         8bit            │       8bit        │
└─────────────────────────┴───────────────────┘

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

4th+ WORD: Kind-TIDs (variabel, endet mit Terminierungsmarker 0x0000)
FeldBitsGroesseBeschreibung
Prefix1-10100001 000 001 (AST Edge)
Sprache11-166Programmiersprachencode
AST-Knotentyp17-248Knotenart (3+5-Aufteilung)
Reserviert25-328Fuer zukuenftige Erweiterung (aktuell 0x00)
Edge TID33-4816Eindeutiger Identifikator dieses Edge
Kind-TID49+16xNKindknoten-Referenzen

Wortanzahl: mindestens 3 (Blattknoten) ~ ueblicherweise 4-8 ~ ohne Limit.

Sprachcodes (6 Bit)

Familienbasierte Klassifikation. Bit1-2 = Hauptkategorie (Paradigma), Bit3-6 = spezifische Sprache.

System/Low-Level (00xxxx)

CodeSpracheBeschreibung
000000AbstractGemeinsamer AST aller Sprachen
000001CPrototyp der Systemsprachen
000010C++C-Erweiterung
000011RustModernes System
000100GoModernes System
000101ZigModernes System
000110AssemblyNiedrigstes Niveau
000111DSystem
001000NimSystem

Anwendung/VM (01xxxx)

CodeSpracheBeschreibung
010000JavaPrototyp der VM-Familie
010001C#.NET
010010KotlinJVM
010011ScalaJVM+funktional
010100SwiftApple
010101DartFlutter
010110GroovyJVM
010111ClojureJVM+Lisp

Script/dynamisch (10xxxx)

CodeSpracheBeschreibung
100000PythonPrototyp universelle Skriptsprache
100001JavaScriptWeb
100010TypeScriptJS+Typen
100011RubyUniversell
100100PHPWebserver
100101LuaEingebettet
100110PerlTextverarbeitung
100111RStatistik
101000JuliaWissenschaftliches Rechnen
101001MATLABNumerische Analyse

Deklarativ/funktional/sonstig (11xxxx)

CodeSpracheBeschreibung
110000SQLAbfragen
110001HaskellRein funktional
110010OCamlML-Familie
110011F#.NET funktional
110100ElixirBEAM
110101ErlangBEAM
110110ShellBash/Zsh
110111PowerShellWindows
111000WASMBytecode
111001LLVM IRZwischendarstellung
111010HTMLMarkup
111011CSSStil
111100JSONDaten
111101YAMLDaten
111110PathGEULGEUL-Graph-Traversierungssprache
111111ErweiterungswortZusaetzliche Sprachen (im 3. Wort angegeben)

Elegante Degradation: Bei Bitverlust Konvergenz zur uebergeordneten Familie → endgueltiger Fallback auf Abstract (000000).

AST-Knotentypen (8 Bit)

Aufteilung in 3-Bit-Hauptkategorie + 5-Bit-Untertyp.

Hauptkategorien

CodeKategorieBeschreibung
000DeclarationDeklarationen (Funktion, Variable, Typ)
001StatementAnweisungen (Kontrollfluss, Schleifen)
010ExpressionAusdruecke (Operationen, Aufrufe)
011TypeTypausdruecke
100PatternMustererkennung
101ModifierModifikatoren (Zugriff, async)
110StructureStrukturen (Block, Modul)
111Language-specificSprachspezifische Knoten

Declaration (000xxxxx)

CodeKnotenGoPythonC
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)

CodeKnotenBedeutung
001 00000IfStmtBedingung
001 00001ForStmtfor-Schleife
001 00010RangeStmtIterator-Schleife
001 00011WhileStmtwhile-Schleife
001 00100SwitchStmtswitch/match
001 00101CaseClausecase-Klausel
001 00110ReturnStmtRueckgabe
001 00111BreakStmtAbbruch
001 01000ContinueStmtFortsetzung
001 01001GotoStmtgoto
001 01010BlockStmtBlock { }
001 01011ExprStmtAusdrucksanweisung
001 01100AssignStmtZuweisung
001 01101DeclStmtDeklarationsanweisung
001 01110TryStmtAusnahmebehandlung
001 01111ThrowStmtAusnahmeausloesung
001 10000DeferStmtdefer
001 10001GoStmtgo
001 10010SelectStmtselect
001 10011WithStmtwith
001 10100AssertStmtassert
001 10101PassStmtpass

Expression (010xxxxx)

CodeKnotenBedeutung
010 00000BinaryExprBinaere Operation
010 00001UnaryExprUnaere Operation
010 00010CallExprFunktionsaufruf
010 00011IndexExprIndexzugriff a[i]
010 00100SliceExprSlice a[i:j]
010 00101SelectorExprFeldzugriff a.b
010 00110IdentIdentifikator
010 00111BasicLitBasisliteral
010 01000CompositeLitZusammengesetztes Literal
010 01001FuncLitLambda/anonyme Funktion
010 01010ParenExprKlammern (a)
010 01011StarExprZeiger *a
010 01100UnaryAddrAdresse &a
010 01101TypeAssertExprTyp-Assertion
010 01110KeyValueExprkey: value
010 01111TernaryExprTernaere Operation
010 10000ListCompListenkomprehension
010 10001DictCompWoerterbuchkomprehension
010 10010GeneratorExprGenerator
010 10011AwaitExprawait
010 10100YieldExpryield
010 10101SendExprKanalsenden <-
010 10110RecvExprKanalempfangen <-ch

Type (011xxxxx)

CodeKnotenBedeutung
011 00000IdentTypeBenannter Typ
011 00001PointerTypeZeiger *T
011 00010ArrayTypeArray [N]T
011 00011SliceTypeSlice []T
011 00100MapTypeMap map[K]V
011 00101ChanTypeKanal chan T
011 00110FuncTypeFunktionstyp
011 00111StructTypeStrukturtyp
011 01000InterfaceTypeSchnittstellentyp
011 01001UnionTypeUnion A | B
011 01010OptionalTypeOptional T?
011 01011GenericTypeGenerisch T[U]
011 01100TupleTypeTupel (A, B)

Pattern (100xxxxx)

CodeKnotenBedeutung
100 00000WildcardPattern_
100 00001IdentPatternNamensbindung
100 00010LiteralPatternLiteral-Matching
100 00011TuplePatternTupel (a, b)
100 00100ListPatternListe [a, b]
100 00101StructPatternStruktur {a, b}
100 00110OrPatterna | b
100 00111GuardPatternWaechterbedingung

Modifier (101xxxxx)

CodeKnotenBedeutung
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)

CodeKnotenBedeutung
110 00000FileDatei (oberste Ebene)
110 00001ModuleModul
110 00010PackagePaket
110 00011NamespaceNamensraum
110 00100BlockBlock
110 00101CommentGroupKommentargruppe
110 00110CommentKommentar
110 00111DirectiveDirektive (#pragma)

Language-specific (111xxxxx)

Sprachspezifische Knoten. 32 Plaetze verfuegbar.

PathGEUL (111110)

PathGEUL ist eine Abfragesprache zur Traversierung von GEUL-Graphen. Wie XPath XML traversiert, traversiert PathGEUL GEUL-Graphen.

Wenn der Sprachcode 111110 ist, werden die 8-Bit-AST-Knotentypen als Abfrageoperatoren reinterpretiert.

CodeOperationXPath-EntsprechungBeschreibung
00000000Root/Wurzelknoten
00000001Child/childDirektes Kind
00000010Descendant//Alle Nachfahren
00000011Parent..Elternknoten
00000100Ancestorancestor::Alle Vorfahren
00000101Siblingsibling::Geschwister
00010000FilterType[type=…]Typfilter
00100000FilterProp[@prop=…]Eigenschaftsfilter
01000000Union|Vereinigung
01000001Intersect&Schnittmenge

Beispiele

Go-Funktionsdeklaration

func Add(a, b int) int {
    return a + b
}
AST Edge (FuncDecl):
  1st: [Prefix 10bit] [000100]       - Prefix + Go
  2nd: [000 00000] [00000000]        - FuncDecl + Reserviert
  3rd: [TID: 0x0010]                 - TID dieses Edge
  4th: [TID: 0x0011]                 - Name "Add"
  5th: [TID: 0x0012]                 - Params
  6th: [TID: 0x0013]                 - Results
  7th: [TID: 0x0014]                 - Body
  8th: [0x0000]                      - Terminierung

Gesamt: 8 Woerter

Python-Funktionsdefinition

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

Gesamt: 8 Woerter

Blattknoten (Identifikator)

AST Edge (Ident):
  1st: [Prefix 10bit] [000100]       - Prefix + Go
  2nd: [010 00110] [00000000]        - Ident + Reserviert
  3rd: [TID: 0x0030]                 - TID dieses Edge
  4th: [0x0000]                      - Terminierung (keine Kinder)

Gesamt: 4 Woerter