AST Edge es un tipo de Edge que representa el AST (Abstract Syntax Tree) de lenguajes de programación como un grafo GEUL.

CaracterísticaDescripción
Soporte multilenguaje64 lenguajes con 6 bits
Nodos AST comunesLos conceptos idénticos entre lenguajes comparten el mismo código
Clasificación por linajeSoporte de degradación elegante (graceful degradation)
Integración PathGEULIncluye lenguaje de exploración de grafos GEUL

Estructura de paquete

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

2nd WORD (16 bits)
┌─────────────────────────┬───────────────────┐
│    Tipo de nodo AST     │     Reservado     │
│         8bit            │       8bit        │
└─────────────────────────┴───────────────────┘

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

4th+ WORD: TIDs hijos (variable, termina con marcador 0x0000)
CampoBitsTamañoDescripción
Prefix1-10100001 000 001 (AST Edge)
Lenguaje11-166Código de lenguaje de programación
Tipo de nodo AST17-248Tipo de nodo (división 3+5)
Reservado25-328Para extensión futura (actualmente 0x00)
Edge TID33-4816Identificador único de este Edge
TIDs hijos49+16×NReferencias a nodos hijos

Palabras: mínimo 3 (nodo hoja) ~ general 4-8 ~ sin límite

Código de lenguaje (6 bits)

Clasificación basada en linaje. Los bits 1-2 son la categoría principal (paradigma), los bits 3-6 son el lenguaje específico.

Sistema/bajo nivel (00xxxx)

CódigoLenguajeDescripción
000000AbstractAST común a todos los lenguajes
000001CArquetipo de lenguaje de sistema
000010C++Extensión de C
000011RustSistema moderno
000100GoSistema moderno
000101ZigSistema moderno
000110AssemblyNivel más bajo
000111DSistema
001000NimSistema

Aplicación/VM (01xxxx)

CódigoLenguajeDescripción
010000JavaArquetipo de familia VM
010001C#.NET
010010KotlinJVM
010011ScalaJVM+funcional
010100SwiftApple
010101DartFlutter
010110GroovyJVM
010111ClojureJVM+Lisp

Script/dinámico (10xxxx)

CódigoLenguajeDescripción
100000PythonArquetipo de script de propósito general
100001JavaScriptWeb
100010TypeScriptJS+tipos
100011RubyPropósito general
100100PHPServidor web
100101LuaEmbebido
100110PerlProcesamiento de texto
100111REstadística
101000JuliaComputación científica
101001MATLABAnálisis numérico

Declarativo/funcional/otros (11xxxx)

CódigoLenguajeDescripción
110000SQLConsultas
110001HaskellFuncional puro
110010OCamlFamilia ML
110011F#.NET funcional
110100ElixirBEAM
110101ErlangBEAM
110110ShellBash/Zsh
110111PowerShellWindows
111000WASMBytecode
111001LLVM IRRepresentación intermedia
111010HTMLMarcado
111011CSSEstilos
111100JSONDatos
111101YAMLDatos
111110PathGEULLenguaje de exploración de grafos GEUL
111111Palabra de extensiónLenguajes adicionales (especificado en 3rd word)

Degradación elegante: En caso de pérdida de bits, converge al linaje superior → finalmente hace fallback a Abstract(000000).

Tipo de nodo AST (8 bits)

División en 3 bits de categoría principal + 5 bits de subtipo.

Categoría principal

CódigoCategoríaDescripción
000DeclarationDeclaraciones (función, variable, tipo)
001StatementSentencias (control, bucles)
010ExpressionExpresiones (operaciones, llamadas)
011TypeExpresiones de tipo
100PatternCoincidencia de patrones
101ModifierModificadores (acceso, async)
110StructureEstructura (bloque, módulo)
111Language-specificNodos específicos del lenguaje

Declaration (000xxxxx)

CódigoNodoGoPythonC
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)

CódigoNodoSignificado
001 00000IfStmtCondicional
001 00001ForStmtBucle for
001 00010RangeStmtBucle iterador
001 00011WhileStmtBucle while
001 00100SwitchStmtswitch/match
001 00101CaseClauseCláusula case
001 00110ReturnStmtRetorno
001 00111BreakStmtSalida
001 01000ContinueStmtContinuación
001 01001GotoStmtgoto
001 01010BlockStmtBloque { }
001 01011ExprStmtSentencia de expresión
001 01100AssignStmtAsignación
001 01101DeclStmtSentencia de declaración
001 01110TryStmtManejo de excepciones
001 01111ThrowStmtLanzamiento de excepción
001 10000DeferStmtdefer
001 10001GoStmtgo
001 10010SelectStmtselect
001 10011WithStmtwith
001 10100AssertStmtassert
001 10101PassStmtpass

Expression (010xxxxx)

CódigoNodoSignificado
010 00000BinaryExprOperación binaria
010 00001UnaryExprOperación unaria
010 00010CallExprLlamada a función
010 00011IndexExprAcceso por índice a[i]
010 00100SliceExprSlice a[i:j]
010 00101SelectorExprAcceso a campo a.b
010 00110IdentIdentificador
010 00111BasicLitLiteral básico
010 01000CompositeLitLiteral compuesto
010 01001FuncLitLambda/función anónima
010 01010ParenExprParéntesis (a)
010 01011StarExprPuntero *a
010 01100UnaryAddrDirección &a
010 01101TypeAssertExprAserción de tipo
010 01110KeyValueExprkey: value
010 01111TernaryExprOperación ternaria
010 10000ListCompList comprehension
010 10001DictCompDict comprehension
010 10010GeneratorExprGenerador
010 10011AwaitExprawait
010 10100YieldExpryield
010 10101SendExprEnvío por canal <-
010 10110RecvExprRecepción por canal <-ch

Type (011xxxxx)

CódigoNodoSignificado
011 00000IdentTypeTipo por nombre
011 00001PointerTypePuntero *T
011 00010ArrayTypeArray [N]T
011 00011SliceTypeSlice []T
011 00100MapTypeMap map[K]V
011 00101ChanTypeCanal chan T
011 00110FuncTypeTipo función
011 00111StructTypeTipo estructura
011 01000InterfaceTypeTipo interfaz
011 01001UnionTypeUnión A | B
011 01010OptionalTypeOpcional T?
011 01011GenericTypeGenérico T[U]
011 01100TupleTypeTupla (A, B)

Pattern (100xxxxx)

CódigoNodoSignificado
100 00000WildcardPattern_
100 00001IdentPatternVinculación por nombre
100 00010LiteralPatternCoincidencia de literal
100 00011TuplePatternTupla (a, b)
100 00100ListPatternLista [a, b]
100 00101StructPatternEstructura {a, b}
100 00110OrPatterna | b
100 00111GuardPatternCondición de guarda

Modifier (101xxxxx)

CódigoNodoSignificado
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)

CódigoNodoSignificado
110 00000FileArchivo (nivel superior)
110 00001ModuleMódulo
110 00010PackagePaquete
110 00011NamespaceEspacio de nombres
110 00100BlockBloque
110 00101CommentGroupGrupo de comentarios
110 00110CommentComentario
110 00111DirectiveDirectiva (#pragma)

Language-specific (111xxxxx)

Nodos específicos de cada lenguaje. 32 espacios disponibles.

PathGEUL (111110)

PathGEUL es un lenguaje de consulta para explorar grafos GEUL. Así como XPath explora XML, PathGEUL explora grafos GEUL.

Cuando el código de lenguaje es 111110, el tipo de nodo AST de 8 bits se reinterpreta como operador de consulta.

CódigoOperaciónCorrespondencia XPathDescripción
00000000Root/Nodo raíz
00000001Child/childHijo directo
00000010Descendant//Todos los descendientes
00000011Parent..Padre
00000100Ancestorancestor::Todos los ancestros
00000101Siblingsibling::Hermanos
00010000FilterType[type=…]Filtro de tipo
00100000FilterProp[@prop=…]Filtro de propiedad
01000000Union|Unión
01000001Intersect&Intersección

Ejemplos

Declaración de función Go

func Add(a, b int) int {
    return a + b
}
AST Edge (FuncDecl):
  1st: [Prefix 10bit] [000100]       - Prefix + Go
  2nd: [000 00000] [00000000]        - FuncDecl + Reservado
  3rd: [TID: 0x0010]                 - TID de este Edge
  4th: [TID: 0x0011]                 - Nombre "Add"
  5th: [TID: 0x0012]                 - Parámetros
  6th: [TID: 0x0013]                 - Resultados
  7th: [TID: 0x0014]                 - Cuerpo
  8th: [0x0000]                      - Terminación

Total: 8 palabras

Definición de función Python

def greet(name: str) -> str:
    return f"Hello, {name}"
AST Edge (FuncDecl):
  1st: [Prefix 10bit] [100000]       - Prefix + Python
  2nd: [000 00000] [00000000]        - FuncDecl + Reservado
  3rd: [TID: 0x0020]                 - TID de este Edge
  4th: [TID: 0x0021]                 - Nombre "greet"
  5th: [TID: 0x0022]                 - Parámetros
  6th: [TID: 0x0023]                 - Resultados
  7th: [TID: 0x0024]                 - Cuerpo
  8th: [0x0000]                      - Terminación

Total: 8 palabras

Nodo hoja (identificador)

AST Edge (Ident):
  1st: [Prefix 10bit] [000100]       - Prefix + Go
  2nd: [010 00110] [00000000]        - Ident + Reservado
  3rd: [TID: 0x0030]                 - TID de este Edge
  4th: [0x0000]                      - Terminación (sin hijos)

Total: 4 palabras