AST Edge는 **프로그래밍 언어의 AST(Abstract Syntax Tree)**를 GEUL 그래프로 표현하는 Edge 타입이다.

특성설명
다중 언어 지원6비트로 64개 언어 표현
공통 AST 노드언어 간 동일 개념은 동일 코드
계통 기반 분류우아한 열화(graceful degradation) 지원
PathGEUL 통합GEUL 그래프 탐색 언어 포함

패킷 구조

1st WORD (16비트)
┌─────────────────────┬────────────────────┐
│       Prefix        │        언어        │
│       10bit         │        6bit        │
└─────────────────────┴────────────────────┘

2nd WORD (16비트)
┌─────────────────────────┬───────────────────┐
│     AST 노드 타입        │       예약        │
│         8bit            │       8bit        │
└─────────────────────────┴───────────────────┘

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

4th+ WORD: 자식 TID들 (가변, 종결 마커 0x0000으로 끝)
필드비트크기설명
Prefix1-10100001 000 001 (AST Edge)
언어11-166프로그래밍 언어 코드
AST 노드 타입17-248노드 종류 (3+5 분할)
예약25-328미래 확장용 (현재 0x00)
Edge TID33-4816이 Edge의 고유 식별자
자식 TID49+16×N자식 노드 참조

워드 수: 최소 3워드(리프 노드) ~ 일반 4-8워드 ~ 제한 없음

언어 코드 (6비트)

계통 기반 분류. bit1-2가 대분류(패러다임), bit3-6이 세부 언어.

시스템/저수준 (00xxxx)

코드언어설명
000000Abstract모든 언어의 공통 AST
000001C시스템 언어 원형
000010C++C 확장
000011Rust현대 시스템
000100Go현대 시스템
000101Zig현대 시스템
000110Assembly최저수준
000111D시스템
001000Nim시스템

응용/VM (01xxxx)

코드언어설명
010000JavaVM 계열 원형
010001C#.NET
010010KotlinJVM
010011ScalaJVM+함수형
010100SwiftApple
010101DartFlutter
010110GroovyJVM
010111ClojureJVM+Lisp

스크립트/동적 (10xxxx)

코드언어설명
100000Python범용 스크립트 원형
100001JavaScript
100010TypeScriptJS+타입
100011Ruby범용
100100PHP웹 서버
100101Lua임베디드
100110Perl텍스트 처리
100111R통계
101000Julia과학 계산
101001MATLAB수치 해석

선언적/함수형/기타 (11xxxx)

코드언어설명
110000SQL쿼리
110001Haskell순수 함수형
110010OCamlML 계열
110011F#.NET 함수형
110100ElixirBEAM
110101ErlangBEAM
110110ShellBash/Zsh
110111PowerShellWindows
111000WASM바이트코드
111001LLVM IR중간 표현
111010HTML마크업
111011CSS스타일
111100JSON데이터
111101YAML데이터
111110PathGEULGEUL 그래프 탐색 언어
111111확장 워드추가 언어 (3rd 워드에 명시)

우아한 열화: 비트 손실 시 상위 계통으로 수렴 → 최종적으로 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 00001ForStmtfor 루프
001 00010RangeStmt이터레이터 루프
001 00011WhileStmtwhile 루프
001 00100SwitchStmtswitch/match
001 00101CaseClausecase 절
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 10000ListComp리스트 컴프리헨션
010 10001DictComp딕트 컴프리헨션
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 노드 타입은 쿼리 연산자로 재해석된다.

코드연산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 + 예약
  3rd: [TID: 0x0010]                 - 이 Edge TID
  4th: [TID: 0x0011]                 - Name "Add"
  5th: [TID: 0x0012]                 - Params
  6th: [TID: 0x0013]                 - Results
  7th: [TID: 0x0014]                 - Body
  8th: [0x0000]                      - 종결

총: 8워드

Python 함수 정의

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

총: 8워드

리프 노드 (식별자)

AST Edge (Ident):
  1st: [Prefix 10bit] [000100]       - Prefix + Go
  2nd: [010 00110] [00000000]        - Ident + 예약
  3rd: [TID: 0x0030]                 - 이 Edge TID
  4th: [0x0000]                      - 종결 (자식 없음)

총: 4워드