AST Edge é um tipo de Edge que representa o AST (Abstract Syntax Tree) de linguagens de programação como um grafo GEUL.

CaracterísticaDescrição
Suporte multilinguagem64 linguagens com 6 bits
Nós AST comunsConceitos idênticos entre linguagens partilham o mesmo código
Classificação por linhagemSuporte de degradação elegante (graceful degradation)
Integração PathGEULInclui linguagem de exploração de grafos GEUL

Estrutura do pacote

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

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

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

4th+ WORD: TIDs filhos (variável, termina com marcador 0x0000)
CampoBitsTamanhoDescrição
Prefix1-10100001 000 001 (AST Edge)
Linguagem11-166Código da linguagem de programação
Tipo de nó AST17-248Tipo de nó (divisão 3+5)
Reservado25-328Para extensão futura (atualmente 0x00)
Edge TID33-4816Identificador único deste Edge
TIDs filhos49+16×NReferências a nós filhos

Palavras: mínimo 3 (nó folha) ~ geral 4-8 ~ sem limite

Código de linguagem (6 bits)

Classificação baseada em linhagem. Bits 1-2 são a categoria principal (paradigma), bits 3-6 são a linguagem específica.

Sistema/baixo nível (00xxxx)

CódigoLinguagemDescrição
000000AbstractAST comum a todas as linguagens
000001CArquétipo de linguagem de sistema
000010C++Extensão de C
000011RustSistema moderno
000100GoSistema moderno
000101ZigSistema moderno
000110AssemblyNível mais baixo
000111DSistema
001000NimSistema

Aplicação/VM (01xxxx)

CódigoLinguagemDescrição
010000JavaArquétipo de família VM
010001C#.NET
010010KotlinJVM
010011ScalaJVM+funcional
010100SwiftApple
010101DartFlutter
010110GroovyJVM
010111ClojureJVM+Lisp

Script/dinâmico (10xxxx)

CódigoLinguagemDescrição
100000PythonArquétipo de script de propósito geral
100001JavaScriptWeb
100010TypeScriptJS+tipos
100011RubyPropósito geral
100100PHPServidor web
100101LuaEmbutido
100110PerlProcessamento de texto
100111REstatística
101000JuliaComputação científica
101001MATLABAnálise numérica

Declarativo/funcional/outros (11xxxx)

CódigoLinguagemDescrição
110000SQLConsultas
110001HaskellFuncional puro
110010OCamlFamília ML
110011F#.NET funcional
110100ElixirBEAM
110101ErlangBEAM
110110ShellBash/Zsh
110111PowerShellWindows
111000WASMBytecode
111001LLVM IRRepresentação intermediária
111010HTMLMarcação
111011CSSEstilos
111100JSONDados
111101YAMLDados
111110PathGEULLinguagem de exploração de grafos GEUL
111111Palavra de extensãoLinguagens adicionais (especificado na 3.ª palavra)

Degradação elegante: Em caso de perda de bits, converge para a linhagem superior → finalmente faz fallback para Abstract(000000).

Tipo de nó AST (8 bits)

Divisão em 3 bits de categoria principal + 5 bits de subtipo.

Categoria principal

CódigoCategoriaDescrição
000DeclarationDeclarações (função, variável, tipo)
001StatementInstruções (controle, loops)
010ExpressionExpressões (operações, chamadas)
011TypeExpressões de tipo
100PatternCorrespondência de padrões
101ModifierModificadores (acesso, async)
110StructureEstrutura (bloco, módulo)
111Language-specificNós específicos da linguagem

Declaration (000xxxxx)

CódigoGoPythonC
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ódigoSignificado
001 00000IfStmtCondicional
001 00001ForStmtLoop for
001 00010RangeStmtLoop iterador
001 00011WhileStmtLoop while
001 00100SwitchStmtswitch/match
001 00101CaseClauseCláusula case
001 00110ReturnStmtRetorno
001 00111BreakStmtSaída
001 01000ContinueStmtContinuação
001 01001GotoStmtgoto
001 01010BlockStmtBloco { }
001 01011ExprStmtInstrução de expressão
001 01100AssignStmtAtribuição
001 01101DeclStmtInstrução de declaração
001 01110TryStmtTratamento de exceções
001 01111ThrowStmtLançamento de exceção
001 10000DeferStmtdefer
001 10001GoStmtgo
001 10010SelectStmtselect
001 10011WithStmtwith
001 10100AssertStmtassert
001 10101PassStmtpass

Expression (010xxxxx)

CódigoSignificado
010 00000BinaryExprOperação binária
010 00001UnaryExprOperação unária
010 00010CallExprChamada de função
010 00011IndexExprAcesso por índice a[i]
010 00100SliceExprSlice a[i:j]
010 00101SelectorExprAcesso a campo a.b
010 00110IdentIdentificador
010 00111BasicLitLiteral básico
010 01000CompositeLitLiteral composto
010 01001FuncLitLambda/função anónima
010 01010ParenExprParênteses (a)
010 01011StarExprPonteiro *a
010 01100UnaryAddrEndereço &a
010 01101TypeAssertExprAsserção de tipo
010 01110KeyValueExprkey: value
010 01111TernaryExprOperação ternária
010 10000ListCompList comprehension
010 10001DictCompDict comprehension
010 10010GeneratorExprGerador
010 10011AwaitExprawait
010 10100YieldExpryield
010 10101SendExprEnvio por canal <-
010 10110RecvExprRecepção por canal <-ch

Type (011xxxxx)

CódigoSignificado
011 00000IdentTypeTipo por nome
011 00001PointerTypePonteiro *T
011 00010ArrayTypeArray [N]T
011 00011SliceTypeSlice []T
011 00100MapTypeMap map[K]V
011 00101ChanTypeCanal chan T
011 00110FuncTypeTipo função
011 00111StructTypeTipo estrutura
011 01000InterfaceTypeTipo interface
011 01001UnionTypeUnião A | B
011 01010OptionalTypeOpcional T?
011 01011GenericTypeGenérico T[U]
011 01100TupleTypeTupla (A, B)

Pattern (100xxxxx)

CódigoSignificado
100 00000WildcardPattern_
100 00001IdentPatternVinculação por nome
100 00010LiteralPatternCorrespondência de literal
100 00011TuplePatternTupla (a, b)
100 00100ListPatternLista [a, b]
100 00101StructPatternEstrutura {a, b}
100 00110OrPatterna | b
100 00111GuardPatternCondição de guarda

Modifier (101xxxxx)

CódigoSignificado
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ódigoSignificado
110 00000FileArquivo (nível superior)
110 00001ModuleMódulo
110 00010PackagePacote
110 00011NamespaceNamespace
110 00100BlockBloco
110 00101CommentGroupGrupo de comentários
110 00110CommentComentário
110 00111DirectiveDiretiva (#pragma)

Language-specific (111xxxxx)

Nós específicos de cada linguagem. 32 espaços disponíveis.

PathGEUL (111110)

PathGEUL é uma linguagem de consulta para explorar grafos GEUL. Assim como XPath explora XML, PathGEUL explora grafos GEUL.

Quando o código de linguagem é 111110, o tipo de nó AST de 8 bits é reinterpretado como operador de consulta.

CódigoOperaçãoCorrespondência XPathDescrição
00000000Root/Nó raiz
00000001Child/childFilho direto
00000010Descendant//Todos os descendentes
00000011Parent..Pai
00000100Ancestorancestor::Todos os ancestrais
00000101Siblingsibling::Irmãos
00010000FilterType[type=…]Filtro de tipo
00100000FilterProp[@prop=…]Filtro de propriedade
01000000Union|União
01000001Intersect&Interseção

Exemplos

Declaração de função 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 deste Edge
  4th: [TID: 0x0011]                 - Nome "Add"
  5th: [TID: 0x0012]                 - Parâmetros
  6th: [TID: 0x0013]                 - Resultados
  7th: [TID: 0x0014]                 - Corpo
  8th: [0x0000]                      - Terminação

Total: 8 palavras

Definição de função 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 deste Edge
  4th: [TID: 0x0021]                 - Nome "greet"
  5th: [TID: 0x0022]                 - Parâmetros
  6th: [TID: 0x0023]                 - Resultados
  7th: [TID: 0x0024]                 - Corpo
  8th: [0x0000]                      - Terminação

Total: 8 palavras

Nó folha (identificador)

AST Edge (Ident):
  1st: [Prefix 10bit] [000100]       - Prefix + Go
  2nd: [010 00110] [00000000]        - Ident + Reservado
  3rd: [TID: 0x0030]                 - TID deste Edge
  4th: [0x0000]                      - Terminação (sem filhos)

Total: 4 palavras