Skip to content

geul-org/geul-ast

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 

History

2 Commits
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

geul-ast

AST Edge μ½”λ“œλΆ β€” ν”„λ‘œκ·Έλž˜λ° μ–Έμ–΄ ASTλ₯Ό GEUL둜 ν‘œν˜„ν•˜κΈ° μœ„ν•œ Edge 인코더

Author: λ°•μ€€μš° (mail@parkjunwoo.com) License: MIT


κ°œμš”

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으둜 끝)
ν•„λ“œ λΉ„νŠΈ μœ„μΉ˜ μ„€λͺ…
Prefix 10 1st[15:6] 1100 000 000 (Standard) / 1100 000 110 (Proposal)
μ–Έμ–΄ 6 1st[5:0] ν”„λ‘œκ·Έλž˜λ° μ–Έμ–΄ μ½”λ“œ
AST λ…Έλ“œ νƒ€μž… 8 2nd[15:8] λ…Έλ“œ μ’…λ₯˜ (3+5 λΆ„ν• )
μ˜ˆμ•½ 8 2nd[7:0] 미래 ν™•μž₯용 (ν˜„μž¬ 0x00)
Edge TID 16 3rd 이 Edge의 고유 μ‹λ³„μž
μžμ‹ TID 16Γ—N 4th+ μžμ‹ λ…Έλ“œ μ°Έμ‘°

μ›Œλ“œ 수: μ΅œμ†Œ 3μ›Œλ“œ(리프 λ…Έλ“œ) ~ 일반 4–8μ›Œλ“œ ~ μ œν•œ μ—†μŒ


μ–Έμ–΄ μ½”λ“œ (6λΉ„νŠΈ)

계톡 기반 λΆ„λ₯˜. bit1-2κ°€ λŒ€λΆ„λ₯˜(νŒ¨λŸ¬λ‹€μž„), bit3-6이 μ„ΈλΆ€ μ–Έμ–΄.

μ‹œμŠ€ν…œ/μ €μˆ˜μ€€ (00xxxx)

μ½”λ“œ μ–Έμ–΄ μ„€λͺ…
000000 Abstract λͺ¨λ“  μ–Έμ–΄μ˜ 곡톡 AST
000001 C μ‹œμŠ€ν…œ μ–Έμ–΄ μ›ν˜•
000010 C++ C ν™•μž₯
000011 Rust ν˜„λŒ€ μ‹œμŠ€ν…œ
000100 Go ν˜„λŒ€ μ‹œμŠ€ν…œ
000101 Zig ν˜„λŒ€ μ‹œμŠ€ν…œ
000110 Assembly μ΅œμ €μˆ˜μ€€
000111 D μ‹œμŠ€ν…œ
001000 Nim μ‹œμŠ€ν…œ

μ‘μš©/VM (01xxxx)

μ½”λ“œ μ–Έμ–΄ μ„€λͺ…
010000 Java VM 계열 μ›ν˜•
010001 C# .NET
010010 Kotlin JVM
010011 Scala JVM+ν•¨μˆ˜ν˜•
010100 Swift Apple
010101 Dart Flutter
010110 Groovy JVM
010111 Clojure JVM+Lisp

슀크립트/동적 (10xxxx)

μ½”λ“œ μ–Έμ–΄ μ„€λͺ…
100000 Python λ²”μš© 슀크립트 μ›ν˜•
100001 JavaScript μ›Ή
100010 TypeScript JS+νƒ€μž…
100011 Ruby λ²”μš©
100100 PHP μ›Ή μ„œλ²„
100101 Lua μž„λ² λ””λ“œ
100110 Perl ν…μŠ€νŠΈ 처리
100111 R 톡계
101000 Julia κ³Όν•™ 계산
101001 MATLAB 수치 해석

선언적/ν•¨μˆ˜ν˜•/기타 (11xxxx)

μ½”λ“œ μ–Έμ–΄ μ„€λͺ…
110000 SQL 쿼리
110001 Haskell 순수 ν•¨μˆ˜ν˜•
110010 OCaml ML 계열
110011 F# .NET ν•¨μˆ˜ν˜•
110100 Elixir BEAM
110101 Erlang BEAM
110110 Shell Bash/Zsh
110111 PowerShell Windows
111000 WASM λ°”μ΄νŠΈμ½”λ“œ
111001 LLVM IR 쀑간 ν‘œν˜„
111010 HTML λ§ˆν¬μ—…
111011 CSS μŠ€νƒ€μΌ
111100 JSON 데이터
111101 YAML 데이터
111110 PathGEUL GEUL κ·Έλž˜ν”„ 탐색 μ–Έμ–΄
111111 ν™•μž₯ μ›Œλ“œ μΆ”κ°€ μ–Έμ–΄ (3rd μ›Œλ“œμ— λͺ…μ‹œ)

μš°μ•„ν•œ μ—΄ν™”: λΉ„νŠΈ 손싀 μ‹œ μƒμœ„ κ³„ν†΅μœΌλ‘œ 수렴 β†’ μ΅œμ’…μ μœΌλ‘œ Abstract(000000)둜 폴백.


AST λ…Έλ“œ νƒ€μž… (8λΉ„νŠΈ)

3λΉ„νŠΈ λŒ€λΆ„λ₯˜ + 5λΉ„νŠΈ μ„ΈλΆ€νƒ€μž…μœΌλ‘œ λΆ„ν• .

λŒ€λΆ„λ₯˜

μ½”λ“œ λŒ€λΆ„λ₯˜ μ„€λͺ…
000 Declaration μ„ μ–Έ (ν•¨μˆ˜, λ³€μˆ˜, νƒ€μž…)
001 Statement λ¬Έμž₯ (μ œμ–΄λ¬Έ, 반볡문)
010 Expression ν‘œν˜„μ‹ (μ—°μ‚°, 호좜)
011 Type νƒ€μž… ν‘œν˜„
100 Pattern νŒ¨ν„΄ λ§€μΉ­
101 Modifier μˆ˜μ‹μ–΄ (μ ‘κ·Όμ œμ–΄, async)
110 Structure ꡬ쑰 (블둝, λͺ¨λ“ˆ)
111 Language-specific μ–Έμ–΄ 고유 λ…Έλ“œ

Declaration (000xxxxx)

μ½”λ“œ λ…Έλ“œ Go Python C
000 00000 FuncDecl FuncDecl FunctionDef FunctionDecl
000 00001 VarDecl GenDecl(var) Assign VarDecl
000 00010 ConstDecl GenDecl(const) - VarDecl(const)
000 00011 TypeDecl TypeSpec - TypedefDecl
000 00100 StructDecl StructType ClassDef RecordDecl
000 00101 InterfaceDecl InterfaceType ClassDef(ABC) -
000 00110 EnumDecl - Enum EnumDecl
000 00111 ParamDecl Field arg ParmVarDecl
000 01000 MethodDecl FuncDecl(recv) FunctionDef CXXMethodDecl
000 01001 ImportDecl ImportSpec Import #include
000 01010 PackageDecl package - -
000 01011 FieldDecl Field - FieldDecl
000 01100 LabelDecl LabeledStmt - LabelDecl

Statement (001xxxxx)

μ½”λ“œ λ…Έλ“œ 의미
001 00000 IfStmt 쑰건문
001 00001 ForStmt for 루프
001 00010 RangeStmt μ΄ν„°λ ˆμ΄ν„° 루프
001 00011 WhileStmt while 루프
001 00100 SwitchStmt switch/match
001 00101 CaseClause case 절
001 00110 ReturnStmt λ°˜ν™˜
001 00111 BreakStmt νƒˆμΆœ
001 01000 ContinueStmt 계속
001 01001 GotoStmt goto
001 01010 BlockStmt 블둝 { }
001 01011 ExprStmt ν‘œν˜„μ‹ λ¬Έμž₯
001 01100 AssignStmt λŒ€μž…
001 01101 DeclStmt μ„ μ–Έ λ¬Έμž₯
001 01110 TryStmt μ˜ˆμ™Έ 처리
001 01111 ThrowStmt μ˜ˆμ™Έ λ°œμƒ
001 10000 DeferStmt defer
001 10001 GoStmt go
001 10010 SelectStmt select
001 10011 WithStmt with
001 10100 AssertStmt assert
001 10101 PassStmt pass

Expression (010xxxxx)

μ½”λ“œ λ…Έλ“œ 의미
010 00000 BinaryExpr 이항 μ—°μ‚°
010 00001 UnaryExpr 단항 μ—°μ‚°
010 00010 CallExpr ν•¨μˆ˜ 호좜
010 00011 IndexExpr 인덱슀 μ ‘κ·Ό a[i]
010 00100 SliceExpr 슬라이슀 a[i:j]
010 00101 SelectorExpr ν•„λ“œ μ ‘κ·Ό a.b
010 00110 Ident μ‹λ³„μž
010 00111 BasicLit κΈ°λ³Έ λ¦¬ν„°λŸ΄
010 01000 CompositeLit 볡합 λ¦¬ν„°λŸ΄
010 01001 FuncLit λžŒλ‹€/읡λͺ…ν•¨μˆ˜
010 01010 ParenExpr κ΄„ν˜Έ (a)
010 01011 StarExpr 포인터 *a
010 01100 UnaryAddr μ£Όμ†Œ &a
010 01101 TypeAssertExpr νƒ€μž… 단언
010 01110 KeyValueExpr key: value
010 01111 TernaryExpr μ‚Όν•­ μ—°μ‚°
010 10000 ListComp 리슀트 μ»΄ν”„λ¦¬ν—¨μ…˜
010 10001 DictComp λ”•νŠΈ μ»΄ν”„λ¦¬ν—¨μ…˜
010 10010 GeneratorExpr μ œλ„ˆλ ˆμ΄ν„°
010 10011 AwaitExpr await
010 10100 YieldExpr yield
010 10101 SendExpr 채널 솑신 <-
010 10110 RecvExpr 채널 μˆ˜μ‹  <-ch

Type (011xxxxx)

μ½”λ“œ λ…Έλ“œ 의미
011 00000 IdentType 이름 νƒ€μž…
011 00001 PointerType 포인터 *T
011 00010 ArrayType λ°°μ—΄ [N]T
011 00011 SliceType 슬라이슀 []T
011 00100 MapType λ§΅ map[K]V
011 00101 ChanType 채널 chan T
011 00110 FuncType ν•¨μˆ˜ νƒ€μž…
011 00111 StructType ꡬ쑰체 νƒ€μž…
011 01000 InterfaceType μΈν„°νŽ˜μ΄μŠ€ νƒ€μž…
011 01001 UnionType μœ λ‹ˆμ˜¨ A | B
011 01010 OptionalType μ˜΅μ…”λ„ T?
011 01011 GenericType μ œλ„€λ¦­ T[U]
011 01100 TupleType νŠœν”Œ (A, B)

Pattern (100xxxxx)

μ½”λ“œ λ…Έλ“œ 의미
100 00000 WildcardPattern _
100 00001 IdentPattern 이름 바인딩
100 00010 LiteralPattern λ¦¬ν„°λŸ΄ λ§€μΉ­
100 00011 TuplePattern νŠœν”Œ (a, b)
100 00100 ListPattern 리슀트 [a, b]
100 00101 StructPattern ꡬ쑰체 {a, b}
100 00110 OrPattern a | b
100 00111 GuardPattern κ°€λ“œ 쑰건

Modifier (101xxxxx)

μ½”λ“œ λ…Έλ“œ 의미
101 00000 Public public/exported
101 00001 Private private
101 00010 Protected protected
101 00011 Static static
101 00100 Const const
101 00101 Async async
101 00110 Volatile volatile
101 00111 Inline inline
101 01000 Virtual virtual
101 01001 Abstract abstract
101 01010 Final final

Structure (110xxxxx)

μ½”λ“œ λ…Έλ“œ 의미
110 00000 File 파일 (μ΅œμƒμœ„)
110 00001 Module λͺ¨λ“ˆ
110 00010 Package νŒ¨ν‚€μ§€
110 00011 Namespace λ„€μž„μŠ€νŽ˜μ΄μŠ€
110 00100 Block 블둝
110 00101 CommentGroup 주석 κ·Έλ£Ή
110 00110 Comment 주석
110 00111 Directive μ§€μ‹œμ–΄ (#pragma)

Language-specific (111xxxxx)

각 μ–Έμ–΄ 고유 λ…Έλ“œ. 32개 μ—¬μœ .


PathGEUL (111110)

PathGEUL은 GEUL κ·Έλž˜ν”„λ₯Ό νƒμƒ‰ν•˜λŠ” 쿼리 μ–Έμ–΄λ‹€. XPathκ°€ XML을 νƒμƒ‰ν•˜λ“―, PathGEUL은 GEUL κ·Έλž˜ν”„λ₯Ό νƒμƒ‰ν•œλ‹€.

μ–Έμ–΄ μ½”λ“œ 111110일 λ•Œ, 8λΉ„νŠΈ AST λ…Έλ“œ νƒ€μž…μ€ 쿼리 μ—°μ‚°μžλ‘œ μž¬ν•΄μ„λœλ‹€.

μ½”λ“œ μ—°μ‚° XPath λŒ€μ‘ μ„€λͺ…
00000000 Root / 루트 λ…Έλ“œ
00000001 Child /child 직접 μžμ‹
00000010 Descendant // λͺ¨λ“  후손
00000011 Parent .. λΆ€λͺ¨
00000100 Ancestor ancestor:: λͺ¨λ“  쑰상
00000101 Sibling sibling:: ν˜•μ œ
00010000 FilterType [type=...] νƒ€μž… ν•„ν„°
00100000 FilterProp [@prop=...] 속성 ν•„ν„°
01000000 Union | ν•©μ§‘ν•©
01000001 Intersect & ꡐ집합

μ˜ˆμ‹œ

Go ν•¨μˆ˜ μ„ μ–Έ

func Add(a, b int) int {
    return a + b
}
AST Edge (FuncDecl):
  1st: [1100 000 000] [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: [1100 000 000] [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μ›Œλ“œ

리프 λ…Έλ“œ (μ‹λ³„μž)

x
AST Edge (Ident):
  1st: [1100 000 000] [000100]     - Prefix + Go
  2nd: [010 00110] [00000000]      - Ident + μ˜ˆμ•½
  3rd: [TID: 0x0030]               - 이 Edge TID
  4th: [0x0000]                    - μ’…κ²° (μžμ‹ μ—†μŒ)

총: 4μ›Œλ“œ

GEUL μƒνƒœκ³„ λ‚΄ μœ„μΉ˜

GEUL Edge 체계:

지식/개체:
β”œβ”€β”€ Entity Node (개체 μ„ μ–Έ)
└── Triple Edge (속성/관계)

μ„œμˆ /사건:
β”œβ”€β”€ Verb Edge (μ„œμˆ )
└── Event6 Edge (6ν•˜μ›μΉ™ 사건)

논리/λ‹΄ν™”:
└── Clause Edge (절 관계)

μˆ˜λŸ‰:
└── Quantity Node (λ¬Όλ¦¬λŸ‰/수치)

λ§₯락:
└── Context Edge (좜처/신뒰도)

μ½”λ“œ/탐색:
β”œβ”€β”€ AST Edge (AST ν‘œν˜„)
└── PathGEUL (κ·Έλž˜ν”„ 탐색)

κ΄€λ ¨ 레포

레포 관계
geul 문법 λͺ…μ„Έ + SIDX νš‘λ‹¨ λ¬Έμ„œ
geul-entity Entity SIDX 48λΉ„νŠΈ μ½”λ“œλΆ
geul-verb 동사 SIDX 16λΉ„νŠΈ μ½”λ“œλΆ

About

Faber Edge / AST codebook (scaffold)

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors