AST Edge est un type d’Edge qui represente l’AST (Abstract Syntax Tree) des langages de programmation sous forme de graphe GEUL.

CaracteristiqueDescription
Support multilingue64 langages sur 6 bits
Noeuds AST communsMeme code pour les memes concepts entre langages
Classification par familleSupport de la degradation elegante (graceful degradation)
Integration PathGEULLangage de parcours de graphe GEUL inclus

Structure du paquet

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

2nd WORD (16 bits)
┌─────────────────────────┬───────────────────┐
│    Type de noeud AST    │      Reserve      │
│         8bit            │       8bit        │
└─────────────────────────┴───────────────────┘

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

4th+ WORD: TID enfants (variable, termine par le marqueur 0x0000)
ChampBitsTailleDescription
Prefix1-10100001 000 001 (AST Edge)
Langage11-166Code du langage de programmation
Type de noeud AST17-248Type de noeud (division 3+5)
Reserve25-328Pour extension future (actuellement 0x00)
Edge TID33-4816Identifiant unique de cet Edge
TID enfants49+16xNReferences aux noeuds enfants

Nombre de mots : minimum 3 (noeud feuille) ~ generalement 4-8 ~ sans limite.

Codes de langages (6 bits)

Classification par famille. bit1-2 = categorie principale (paradigme), bit3-6 = langage specifique.

Systeme/bas niveau (00xxxx)

CodeLangageDescription
000000AbstractAST commun a tous les langages
000001CPrototype des langages systeme
000010C++Extension du C
000011RustSysteme moderne
000100GoSysteme moderne
000101ZigSysteme moderne
000110AssemblyPlus bas niveau
000111DSysteme
001000NimSysteme

Application/VM (01xxxx)

CodeLangageDescription
010000JavaPrototype de la famille VM
010001C#.NET
010010KotlinJVM
010011ScalaJVM+fonctionnel
010100SwiftApple
010101DartFlutter
010110GroovyJVM
010111ClojureJVM+Lisp

Script/dynamique (10xxxx)

CodeLangageDescription
100000PythonPrototype script polyvalent
100001JavaScriptWeb
100010TypeScriptJS+types
100011RubyPolyvalent
100100PHPServeur web
100101LuaEmbarque
100110PerlTraitement de texte
100111RStatistiques
101000JuliaCalcul scientifique
101001MATLABCalcul numerique

Declaratif/fonctionnel/autre (11xxxx)

CodeLangageDescription
110000SQLRequetes
110001HaskellFonctionnel pur
110010OCamlFamille ML
110011F#.NET fonctionnel
110100ElixirBEAM
110101ErlangBEAM
110110ShellBash/Zsh
110111PowerShellWindows
111000WASMBytecode
111001LLVM IRRepresentation intermediaire
111010HTMLBalisage
111011CSSStyle
111100JSONDonnees
111101YAMLDonnees
111110PathGEULLangage de parcours de graphe GEUL
111111Mot d’extensionLangages supplementaires (specifie dans le 3e mot)

Degradation elegante : en cas de perte de bits, convergence vers la famille superieure → repli final vers Abstract (000000).

Types de noeuds AST (8 bits)

Division en 3 bits de categorie principale + 5 bits de sous-type.

Categories principales

CodeCategorieDescription
000DeclarationDeclarations (fonction, variable, type)
001StatementInstructions (controle, boucles)
010ExpressionExpressions (operations, appels)
011TypeExpressions de type
100PatternFiltrage par motif
101ModifierModificateurs (acces, async)
110StructureStructures (bloc, module)
111Language-specificNoeuds specifiques au langage

Declaration (000xxxxx)

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

CodeNoeudSignification
001 00000IfStmtCondition
001 00001ForStmtBoucle for
001 00010RangeStmtBoucle iterateur
001 00011WhileStmtBoucle while
001 00100SwitchStmtswitch/match
001 00101CaseClauseClause case
001 00110ReturnStmtRetour
001 00111BreakStmtSortie
001 01000ContinueStmtContinuation
001 01001GotoStmtgoto
001 01010BlockStmtBloc { }
001 01011ExprStmtExpression en instruction
001 01100AssignStmtAssignation
001 01101DeclStmtInstruction de declaration
001 01110TryStmtGestion d’exception
001 01111ThrowStmtDeclenchement d’exception
001 10000DeferStmtdefer
001 10001GoStmtgo
001 10010SelectStmtselect
001 10011WithStmtwith
001 10100AssertStmtassert
001 10101PassStmtpass

Expression (010xxxxx)

CodeNoeudSignification
010 00000BinaryExprOperation binaire
010 00001UnaryExprOperation unaire
010 00010CallExprAppel de fonction
010 00011IndexExprAcces par index a[i]
010 00100SliceExprTranche a[i:j]
010 00101SelectorExprAcces champ a.b
010 00110IdentIdentifiant
010 00111BasicLitLitteral de base
010 01000CompositeLitLitteral compose
010 01001FuncLitLambda/fonction anonyme
010 01010ParenExprParentheses (a)
010 01011StarExprPointeur *a
010 01100UnaryAddrAdresse &a
010 01101TypeAssertExprAssertion de type
010 01110KeyValueExprkey: value
010 01111TernaryExprOperation ternaire
010 10000ListCompListe en comprehension
010 10001DictCompDictionnaire en comprehension
010 10010GeneratorExprGenerateur
010 10011AwaitExprawait
010 10100YieldExpryield
010 10101SendExprEnvoi canal <-
010 10110RecvExprReception canal <-ch

Type (011xxxxx)

CodeNoeudSignification
011 00000IdentTypeType nomme
011 00001PointerTypePointeur *T
011 00010ArrayTypeTableau [N]T
011 00011SliceTypeTranche []T
011 00100MapTypeMap map[K]V
011 00101ChanTypeCanal chan T
011 00110FuncTypeType de fonction
011 00111StructTypeType de structure
011 01000InterfaceTypeType d’interface
011 01001UnionTypeUnion A | B
011 01010OptionalTypeOptionnel T?
011 01011GenericTypeGenerique T[U]
011 01100TupleTypeTuple (A, B)

Pattern (100xxxxx)

CodeNoeudSignification
100 00000WildcardPattern_
100 00001IdentPatternLiaison par nom
100 00010LiteralPatternCorrespondance de litteral
100 00011TuplePatternTuple (a, b)
100 00100ListPatternListe [a, b]
100 00101StructPatternStructure {a, b}
100 00110OrPatterna | b
100 00111GuardPatternCondition de garde

Modifier (101xxxxx)

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

CodeNoeudSignification
110 00000FileFichier (niveau superieur)
110 00001ModuleModule
110 00010PackagePackage
110 00011NamespaceEspace de noms
110 00100BlockBloc
110 00101CommentGroupGroupe de commentaires
110 00110CommentCommentaire
110 00111DirectiveDirective (#pragma)

Language-specific (111xxxxx)

Noeuds propres a chaque langage. 32 emplacements disponibles.

PathGEUL (111110)

PathGEUL est un langage de requete pour parcourir les graphes GEUL. Comme XPath parcourt le XML, PathGEUL parcourt les graphes GEUL.

Lorsque le code de langage est 111110, les 8 bits du type de noeud AST sont reinterpretes comme des operateurs de requete.

CodeOperationCorrespondance XPathDescription
00000000Root/Noeud racine
00000001Child/childEnfant direct
00000010Descendant//Tous les descendants
00000011Parent..Parent
00000100Ancestorancestor::Tous les ancetres
00000101Siblingsibling::Freres et soeurs
00010000FilterType[type=…]Filtre par type
00100000FilterProp[@prop=…]Filtre par propriete
01000000Union|Union
01000001Intersect&Intersection

Exemples

Declaration de fonction Go

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

Total: 8 mots

Definition de fonction Python

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

Total: 8 mots

Noeud feuille (identifiant)

AST Edge (Ident):
  1st: [Prefix 10bit] [000100]       - Prefix + Go
  2nd: [010 00110] [00000000]        - Ident + Reserve
  3rd: [TID: 0x0030]                 - TID de cet Edge
  4th: [0x0000]                      - Terminaison (pas d'enfant)

Total: 4 mots