freelang-v4 4.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (261) hide show
  1. package/README.md +548 -0
  2. package/dist/ast.d.ts +367 -0
  3. package/dist/ast.js +4 -0
  4. package/dist/ast.js.map +1 -0
  5. package/dist/async-basic.test.d.ts +1 -0
  6. package/dist/async-basic.test.js +88 -0
  7. package/dist/async-basic.test.js.map +1 -0
  8. package/dist/async-jest.test.d.ts +1 -0
  9. package/dist/async-jest.test.js +99 -0
  10. package/dist/async-jest.test.js.map +1 -0
  11. package/dist/channel-jest.test.d.ts +1 -0
  12. package/dist/channel-jest.test.js +148 -0
  13. package/dist/channel-jest.test.js.map +1 -0
  14. package/dist/checker-jest.test.d.ts +1 -0
  15. package/dist/checker-jest.test.js +160 -0
  16. package/dist/checker-jest.test.js.map +1 -0
  17. package/dist/checker.d.ts +149 -0
  18. package/dist/checker.js +1565 -0
  19. package/dist/checker.js.map +1 -0
  20. package/dist/checker.test.d.ts +1 -0
  21. package/dist/checker.test.js +217 -0
  22. package/dist/checker.test.js.map +1 -0
  23. package/dist/compiler-jest.test.d.ts +1 -0
  24. package/dist/compiler-jest.test.js +233 -0
  25. package/dist/compiler-jest.test.js.map +1 -0
  26. package/dist/compiler.d.ts +127 -0
  27. package/dist/compiler.js +1588 -0
  28. package/dist/compiler.js.map +1 -0
  29. package/dist/compiler.test.d.ts +1 -0
  30. package/dist/compiler.test.js +313 -0
  31. package/dist/compiler.test.js.map +1 -0
  32. package/dist/db-100m-full.d.ts +5 -0
  33. package/dist/db-100m-full.js +78 -0
  34. package/dist/db-100m-full.js.map +1 -0
  35. package/dist/db-100m-no-index.d.ts +12 -0
  36. package/dist/db-100m-no-index.js +119 -0
  37. package/dist/db-100m-no-index.js.map +1 -0
  38. package/dist/db-100m-real.d.ts +5 -0
  39. package/dist/db-100m-real.js +131 -0
  40. package/dist/db-100m-real.js.map +1 -0
  41. package/dist/db-100m-streaming.d.ts +15 -0
  42. package/dist/db-100m-streaming.js +164 -0
  43. package/dist/db-100m-streaming.js.map +1 -0
  44. package/dist/db-100m-test.d.ts +5 -0
  45. package/dist/db-100m-test.js +111 -0
  46. package/dist/db-100m-test.js.map +1 -0
  47. package/dist/db-jest.test.d.ts +1 -0
  48. package/dist/db-jest.test.js +182 -0
  49. package/dist/db-jest.test.js.map +1 -0
  50. package/dist/db-runtime.d.ts +24 -0
  51. package/dist/db-runtime.js +204 -0
  52. package/dist/db-runtime.js.map +1 -0
  53. package/dist/db.d.ts +249 -0
  54. package/dist/db.js +593 -0
  55. package/dist/db.js.map +1 -0
  56. package/dist/file-io-jest.test.d.ts +1 -0
  57. package/dist/file-io-jest.test.js +225 -0
  58. package/dist/file-io-jest.test.js.map +1 -0
  59. package/dist/for-of-jest.test.d.ts +1 -0
  60. package/dist/for-of-jest.test.js +230 -0
  61. package/dist/for-of-jest.test.js.map +1 -0
  62. package/dist/for-of.test.d.ts +1 -0
  63. package/dist/for-of.test.js +305 -0
  64. package/dist/for-of.test.js.map +1 -0
  65. package/dist/function-literal-jest.test.d.ts +1 -0
  66. package/dist/function-literal-jest.test.js +180 -0
  67. package/dist/function-literal-jest.test.js.map +1 -0
  68. package/dist/function-literal.test.d.ts +1 -0
  69. package/dist/function-literal.test.js +245 -0
  70. package/dist/function-literal.test.js.map +1 -0
  71. package/dist/generics-jest.test.d.ts +1 -0
  72. package/dist/generics-jest.test.js +93 -0
  73. package/dist/generics-jest.test.js.map +1 -0
  74. package/dist/ir-gen.d.ts +15 -0
  75. package/dist/ir-gen.js +400 -0
  76. package/dist/ir-gen.js.map +1 -0
  77. package/dist/ir.d.ts +114 -0
  78. package/dist/ir.js +5 -0
  79. package/dist/ir.js.map +1 -0
  80. package/dist/lexer.d.ts +110 -0
  81. package/dist/lexer.js +467 -0
  82. package/dist/lexer.js.map +1 -0
  83. package/dist/lexer.test.d.ts +1 -0
  84. package/dist/lexer.test.js +426 -0
  85. package/dist/lexer.test.js.map +1 -0
  86. package/dist/main.d.ts +2 -0
  87. package/dist/main.js +241 -0
  88. package/dist/main.js.map +1 -0
  89. package/dist/module-jest.test.d.ts +1 -0
  90. package/dist/module-jest.test.js +123 -0
  91. package/dist/module-jest.test.js.map +1 -0
  92. package/dist/parser.d.ts +56 -0
  93. package/dist/parser.js +1060 -0
  94. package/dist/parser.js.map +1 -0
  95. package/dist/parser.test.d.ts +1 -0
  96. package/dist/parser.test.js +461 -0
  97. package/dist/parser.test.js.map +1 -0
  98. package/dist/pattern-matching-jest.test.d.ts +1 -0
  99. package/dist/pattern-matching-jest.test.js +158 -0
  100. package/dist/pattern-matching-jest.test.js.map +1 -0
  101. package/dist/pkg/init.d.ts +1 -0
  102. package/dist/pkg/init.js +118 -0
  103. package/dist/pkg/init.js.map +1 -0
  104. package/dist/pkg/install.d.ts +1 -0
  105. package/dist/pkg/install.js +77 -0
  106. package/dist/pkg/install.js.map +1 -0
  107. package/dist/pkg/registry.d.ts +23 -0
  108. package/dist/pkg/registry.js +106 -0
  109. package/dist/pkg/registry.js.map +1 -0
  110. package/dist/pkg/run.d.ts +1 -0
  111. package/dist/pkg/run.js +76 -0
  112. package/dist/pkg/run.js.map +1 -0
  113. package/dist/pkg/toml.d.ts +5 -0
  114. package/dist/pkg/toml.js +117 -0
  115. package/dist/pkg/toml.js.map +1 -0
  116. package/dist/repl.d.ts +15 -0
  117. package/dist/repl.js +197 -0
  118. package/dist/repl.js.map +1 -0
  119. package/dist/runtime/bytecode.d.ts +92 -0
  120. package/dist/runtime/bytecode.js +253 -0
  121. package/dist/runtime/bytecode.js.map +1 -0
  122. package/dist/runtime/value.d.ts +102 -0
  123. package/dist/runtime/value.js +302 -0
  124. package/dist/runtime/value.js.map +1 -0
  125. package/dist/runtime/vm.d.ts +65 -0
  126. package/dist/runtime/vm.js +293 -0
  127. package/dist/runtime/vm.js.map +1 -0
  128. package/dist/struct-instance-jest.test.d.ts +1 -0
  129. package/dist/struct-instance-jest.test.js +209 -0
  130. package/dist/struct-instance-jest.test.js.map +1 -0
  131. package/dist/struct-instance.test.d.ts +1 -0
  132. package/dist/struct-instance.test.js +291 -0
  133. package/dist/struct-instance.test.js.map +1 -0
  134. package/dist/struct-jest.test.d.ts +1 -0
  135. package/dist/struct-jest.test.js +176 -0
  136. package/dist/struct-jest.test.js.map +1 -0
  137. package/dist/struct.test.d.ts +1 -0
  138. package/dist/struct.test.js +231 -0
  139. package/dist/struct.test.js.map +1 -0
  140. package/dist/trait-jest.test.d.ts +1 -0
  141. package/dist/trait-jest.test.js +120 -0
  142. package/dist/trait-jest.test.js.map +1 -0
  143. package/dist/vm-jest.test.d.ts +1 -0
  144. package/dist/vm-jest.test.js +569 -0
  145. package/dist/vm-jest.test.js.map +1 -0
  146. package/dist/vm.d.ts +81 -0
  147. package/dist/vm.js +1956 -0
  148. package/dist/vm.js.map +1 -0
  149. package/dist/vm.test.d.ts +1 -0
  150. package/dist/vm.test.js +337 -0
  151. package/dist/vm.test.js.map +1 -0
  152. package/dist/web-repl/sandbox.d.ts +11 -0
  153. package/dist/web-repl/sandbox.js +76 -0
  154. package/dist/web-repl/sandbox.js.map +1 -0
  155. package/dist/web-repl/server.d.ts +1 -0
  156. package/dist/web-repl/server.js +111 -0
  157. package/dist/web-repl/server.js.map +1 -0
  158. package/dist/while-loop-jest.test.d.ts +1 -0
  159. package/dist/while-loop-jest.test.js +201 -0
  160. package/dist/while-loop-jest.test.js.map +1 -0
  161. package/dist/while-loop.test.d.ts +1 -0
  162. package/dist/while-loop.test.js +262 -0
  163. package/dist/while-loop.test.js.map +1 -0
  164. package/docs/EXPERIENCE.md +787 -0
  165. package/docs/README.md +175 -0
  166. package/docs/V1_V2_V3_ANALYSIS.md +107 -0
  167. package/docs/_config.yml +36 -0
  168. package/docs/api-reference.md +459 -0
  169. package/docs/architecture.md +470 -0
  170. package/docs/benchmarks.md +295 -0
  171. package/docs/comparison.md +454 -0
  172. package/docs/index.md +335 -0
  173. package/docs/language-completeness.md +228 -0
  174. package/docs/learning-guide.md +651 -0
  175. package/package.json +65 -0
  176. package/src/api/deploy_key.fl +294 -0
  177. package/src/api/issue.fl +302 -0
  178. package/src/api/org.fl +356 -0
  179. package/src/api/repo.fl +394 -0
  180. package/src/api/team.fl +299 -0
  181. package/src/api/user.fl +385 -0
  182. package/src/api/webhook.fl +273 -0
  183. package/src/ast.ts +158 -0
  184. package/src/async-basic.test.ts +94 -0
  185. package/src/async-jest.test.ts +107 -0
  186. package/src/channel-jest.test.ts +158 -0
  187. package/src/checker-jest.test.ts +189 -0
  188. package/src/checker.test.ts +279 -0
  189. package/src/checker.ts +1861 -0
  190. package/src/commands/analyze.fl +227 -0
  191. package/src/commands/auth.fl +315 -0
  192. package/src/commands/batch.fl +349 -0
  193. package/src/commands/config.fl +199 -0
  194. package/src/commands/deploy_key.fl +352 -0
  195. package/src/commands/issue.fl +275 -0
  196. package/src/commands/main.fl +492 -0
  197. package/src/commands/org.fl +425 -0
  198. package/src/commands/repo.fl +581 -0
  199. package/src/commands/team.fl +244 -0
  200. package/src/commands/user.fl +423 -0
  201. package/src/commands/webhook.fl +400 -0
  202. package/src/compiler-jest.test.ts +275 -0
  203. package/src/compiler.test.ts +375 -0
  204. package/src/compiler.ts +1770 -0
  205. package/src/config.fl +175 -0
  206. package/src/core/batch.fl +355 -0
  207. package/src/core/cache.fl +284 -0
  208. package/src/core/ensure.fl +324 -0
  209. package/src/db-100m-full.ts +96 -0
  210. package/src/db-100m-no-index.ts +133 -0
  211. package/src/db-100m-real.ts +152 -0
  212. package/src/db-100m-streaming.ts +154 -0
  213. package/src/db-100m-test.ts +136 -0
  214. package/src/db-jest.test.ts +161 -0
  215. package/src/db-runtime.ts +242 -0
  216. package/src/db.ts +676 -0
  217. package/src/errors.fl +134 -0
  218. package/src/for-of-jest.test.ts +246 -0
  219. package/src/for-of.test.ts +308 -0
  220. package/src/function-literal-jest.test.ts +193 -0
  221. package/src/function-literal.test.ts +248 -0
  222. package/src/generics-jest.test.ts +104 -0
  223. package/src/http/client.fl +327 -0
  224. package/src/ir-gen.ts +459 -0
  225. package/src/ir.ts +80 -0
  226. package/src/lexer.test.ts +499 -0
  227. package/src/lexer.ts +522 -0
  228. package/src/main.ts +223 -0
  229. package/src/models.fl +162 -0
  230. package/src/module-jest.test.ts +145 -0
  231. package/src/parser.test.ts +542 -0
  232. package/src/parser.ts +1211 -0
  233. package/src/pattern-matching-jest.test.ts +170 -0
  234. package/src/pkg/init.ts +91 -0
  235. package/src/pkg/install.ts +56 -0
  236. package/src/pkg/registry.ts +103 -0
  237. package/src/pkg/run.ts +49 -0
  238. package/src/pkg/toml.ts +129 -0
  239. package/src/repl.ts +190 -0
  240. package/src/runtime/bytecode.ts +291 -0
  241. package/src/runtime/value.ts +322 -0
  242. package/src/runtime/vm.ts +354 -0
  243. package/src/self-host/bootstrap.fl +68 -0
  244. package/src/self-host/interpreter.fl +361 -0
  245. package/src/self-host/lexer-simple.fl +22 -0
  246. package/src/self-host/lexer.fl +305 -0
  247. package/src/self-host/parser.fl +580 -0
  248. package/src/struct-instance-jest.test.ts +221 -0
  249. package/src/struct-instance.test.ts +293 -0
  250. package/src/struct-jest.test.ts +187 -0
  251. package/src/struct.test.ts +234 -0
  252. package/src/trait-jest.test.ts +136 -0
  253. package/src/vm-jest.test.ts +754 -0
  254. package/src/vm.ts +1976 -0
  255. package/src/web-repl/public/index.html +50 -0
  256. package/src/web-repl/public/main.js +105 -0
  257. package/src/web-repl/public/style.css +225 -0
  258. package/src/web-repl/sandbox.ts +88 -0
  259. package/src/web-repl/server.ts +97 -0
  260. package/src/while-loop-jest.test.ts +218 -0
  261. package/src/while-loop.test.ts +267 -0
@@ -0,0 +1,470 @@
1
+ # 🏗️ FreeLang v4 - 아키텍처
2
+
3
+ **완전한 언어 구현: Lexer → Parser → Compiler → VM**
4
+
5
+ ---
6
+
7
+ ## 🎯 시스템 개요
8
+
9
+ ```
10
+ ┌────────────────────────────────────────────────────┐
11
+ │ FreeLang v4 아키텍처 │
12
+ ├────────────────────────────────────────────────────┤
13
+ │ │
14
+ │ ┌──────────┐ ┌────────┐ ┌──────────┐ │
15
+ │ │ Lexer │────→│ Parser │────→│ Compiler │ │
16
+ │ │(Tokenize)│ │(Parse) │ │(Codegen) │ │
17
+ │ └──────────┘ └────────┘ └──────────┘ │
18
+ │ ↑ ↓ │
19
+ │ Source Code Bytecode │
20
+ │ ↑ ↓ │
21
+ │ ┌──────────────────────────────────────────┐ │
22
+ │ │ Virtual Machine (VM) │ │
23
+ │ │ ├─ Instruction Handler │ │
24
+ │ │ ├─ Stack Management │ │
25
+ │ │ ├─ Memory Manager (GC) │ │
26
+ │ │ └─ Runtime Library │ │
27
+ │ └──────────────────────────────────────────┘ │
28
+ │ ↓ │
29
+ │ Program Output │
30
+ │ │
31
+ └────────────────────────────────────────────────────┘
32
+ ```
33
+
34
+ ---
35
+
36
+ ## 1️⃣ Lexer (어휘 분석)
37
+
38
+ ### 역할
39
+ 소스 코드를 토큰으로 분해
40
+
41
+ ### 구현 파일
42
+ 📄 `src/lexer.ts`
43
+
44
+ ### 주요 클래스
45
+
46
+ ```typescript
47
+ class Lexer {
48
+ constructor(source: string)
49
+ tokenize(): { tokens: Token[], errors: Error[] }
50
+ }
51
+
52
+ class Token {
53
+ type: TokenType
54
+ value: string
55
+ line: number
56
+ column: number
57
+ }
58
+ ```
59
+
60
+ ### 토큰 타입 (30+)
61
+
62
+ | 카테고리 | 예시 |
63
+ |---------|------|
64
+ | **키워드** | let, fn, if, while, match, struct |
65
+ | **식별자** | name, age, calculateSum |
66
+ | **리터럴** | 42, "hello", 3.14, true |
67
+ | **연산자** | +, -, *, /, ==, != |
68
+ | **구분자** | {, }, [, ], (, ), : |
69
+
70
+ ### 예시
71
+
72
+ ```freelang
73
+ let x = 42
74
+ ```
75
+
76
+ 토큰화:
77
+ ```
78
+ [KEYWORD: let] [IDENTIFIER: x] [OPERATOR: =] [NUMBER: 42]
79
+ ```
80
+
81
+ ---
82
+
83
+ ## 2️⃣ Parser (문법 분석)
84
+
85
+ ### 역할
86
+ 토큰으로부터 추상 구문 트리(AST) 생성
87
+
88
+ ### 구현 파일
89
+ 📄 `src/parser.ts`
90
+
91
+ ### 주요 클래스
92
+
93
+ ```typescript
94
+ class Parser {
95
+ constructor(tokens: Token[])
96
+ parse(): { program: Program, errors: Error[] }
97
+ }
98
+
99
+ interface ASTNode {
100
+ type: string
101
+ line: number
102
+ column: number
103
+ }
104
+
105
+ interface Program {
106
+ statements: Statement[]
107
+ }
108
+ ```
109
+
110
+ ### AST 노드 계층
111
+
112
+ ```
113
+ ASTNode
114
+ ├─ Statement
115
+ │ ├─ VariableDeclaration
116
+ │ ├─ FunctionDeclaration
117
+ │ ├─ StructDeclaration
118
+ │ ├─ IfStatement
119
+ │ ├─ WhileLoop
120
+ │ ├─ ForLoop
121
+ │ ├─ MatchExpression
122
+ │ └─ ReturnStatement
123
+
124
+ ├─ Expression
125
+ │ ├─ BinaryOp
126
+ │ ├─ UnaryOp
127
+ │ ├─ FunctionCall
128
+ │ ├─ ArrayLiteral
129
+ │ ├─ StructLiteral
130
+ │ └─ Identifier
131
+
132
+ └─ Type
133
+ ├─ PrimitiveType (i32, str, bool, f64)
134
+ ├─ ArrayType [T]
135
+ ├─ FunctionType (T) -> U
136
+ └─ StructType
137
+ ```
138
+
139
+ ### 파싱 전략
140
+
141
+ - **Recursive Descent**: 상향식 재귀 파싱
142
+ - **Operator Precedence**: 연산자 우선순위 관리
143
+ - **Error Recovery**: 에러 복구 메커니즘
144
+
145
+ ---
146
+
147
+ ## 3️⃣ Compiler (컴파일)
148
+
149
+ ### 역할
150
+ AST를 바이트코드로 변환
151
+
152
+ ### 구현 파일
153
+ 📄 `src/compiler.ts`
154
+
155
+ ### 주요 클래스
156
+
157
+ ```typescript
158
+ class Compiler {
159
+ compile(program: Program): Chunk
160
+ }
161
+
162
+ interface Chunk {
163
+ code: Instruction[]
164
+ constants: any[]
165
+ debug: DebugInfo
166
+ }
167
+
168
+ interface Instruction {
169
+ op: OpCode
170
+ operands: number[]
171
+ }
172
+ ```
173
+
174
+ ### OpCode (연산 코드)
175
+
176
+ ```typescript
177
+ enum OpCode {
178
+ // 상수
179
+ CONSTANT,
180
+ LOAD_CONST,
181
+
182
+ // 변수
183
+ DEFINE_LOCAL,
184
+ GET_LOCAL,
185
+ SET_LOCAL,
186
+
187
+ // 산술 연산
188
+ ADD, SUB, MUL, DIV, MOD,
189
+ NEG, // 음수
190
+
191
+ // 비교
192
+ EQ, NE, LT, LE, GT, GE,
193
+
194
+ // 논리
195
+ AND, OR, NOT,
196
+
197
+ // 제어 흐름
198
+ JUMP,
199
+ JUMP_IF_FALSE,
200
+ JUMP_IF_TRUE,
201
+ LOOP,
202
+
203
+ // 함수
204
+ CALL,
205
+ RETURN,
206
+
207
+ // 배열
208
+ ARRAY,
209
+ INDEX,
210
+ INDEX_SET,
211
+
212
+ // 구조체
213
+ STRUCT,
214
+ PROPERTY,
215
+ PROPERTY_SET,
216
+
217
+ // 기타
218
+ POP,
219
+ PRINT,
220
+ MATCH
221
+ }
222
+ ```
223
+
224
+ ### 컴파일 과정
225
+
226
+ ```
227
+ AST
228
+ ↓ [Type Checking] → 타입 검증
229
+ ↓ [Symbol Resolution] → 심볼 해석
230
+ ↓ [Code Generation] → 바이트코드 생성
231
+ ↓ [Optimization] → 최적화
232
+ Bytecode
233
+ ```
234
+
235
+ ### 최적화 기법
236
+
237
+ 1. **상수 폴딩**: 컴파일 타임에 상수 계산
238
+ 2. **불필요 코드 제거**: 도달 불가능 코드 삭제
239
+ 3. **명령어 선택**: 효율적인 OpCode 선택
240
+
241
+ ---
242
+
243
+ ## 4️⃣ Virtual Machine (VM)
244
+
245
+ ### 역할
246
+ 바이트코드 실행
247
+
248
+ ### 구현 파일
249
+ 📄 `src/vm.ts`
250
+
251
+ ### 주요 클래스
252
+
253
+ ```typescript
254
+ class VM {
255
+ run(chunk: Chunk): Promise<ExecutionResult>
256
+ }
257
+
258
+ interface ExecutionResult {
259
+ output: string[]
260
+ stack: any[]
261
+ memory: Memory
262
+ }
263
+
264
+ interface Memory {
265
+ heap: Map<number, any>
266
+ stack: Stack
267
+ gc: GarbageCollector
268
+ }
269
+ ```
270
+
271
+ ### 실행 모델
272
+
273
+ ```
274
+ ┌─────────────────────────────┐
275
+ │ Instruction Pointer (IP) │
276
+ │ ↓ │
277
+ │ ┌──────────────────────────┐│
278
+ │ │ Bytecode Array ││
279
+ │ │ [INSTRUCTION 0] ││
280
+ │ │ [INSTRUCTION 1] ← IP ││
281
+ │ │ [INSTRUCTION 2] ││
282
+ │ └──────────────────────────┘│
283
+ │ │
284
+ │ ┌──────────────────────────┐│
285
+ │ │ Stack (LIFO) ││
286
+ │ │ ┌─────────────────────┐││
287
+ │ │ │ value3 ││ │
288
+ │ │ │ value2 ││ │ ← Top
289
+ │ │ │ value1 │││
290
+ │ │ └─────────────────────┘││
291
+ │ └──────────────────────────┘│
292
+ │ │
293
+ │ ┌──────────────────────────┐│
294
+ │ │ Heap (메모리) ││
295
+ │ │ object1: {...} ││
296
+ │ │ array1: [1,2,3] ││
297
+ │ │ ... ││
298
+ │ └──────────────────────────┘│
299
+ └─────────────────────────────┘
300
+ ```
301
+
302
+ ### 메모리 관리
303
+
304
+ ```typescript
305
+ class GarbageCollector {
306
+ collect(): void
307
+ // Mark-and-sweep GC 구현
308
+ // - Mark: 도달 가능한 객체 표시
309
+ // - Sweep: 표시 안 된 객체 해제
310
+ }
311
+ ```
312
+
313
+ ### 표준 라이브러리
314
+
315
+ ```typescript
316
+ stdlib: {
317
+ // 문자열
318
+ length, to_upper, to_lower, slice, ...
319
+
320
+ // 배열
321
+ push, pop, first, last, reverse, ...
322
+
323
+ // 수학
324
+ floor, ceil, round, sqrt, pow, ...
325
+
326
+ // I/O
327
+ println, read_file, write_file, ...
328
+ }
329
+ ```
330
+
331
+ ---
332
+
333
+ ## 📁 디렉토리 구조
334
+
335
+ ```
336
+ freelang-v4/
337
+ ├── src/
338
+ │ ├── lexer.ts # 어휘 분석
339
+ │ ├── parser.ts # 문법 분석
340
+ │ ├── compiler.ts # 컴파일러
341
+ │ ├── vm.ts # 가상 머신
342
+ │ ├── stdlib.ts # 표준 라이브러리
343
+ │ └── types.ts # 타입 정의
344
+
345
+ ├── v9/ # Phase 1-6 구현
346
+ │ ├── v9-memory.fl # 메모리 스토리지
347
+ │ ├── v9-parallel.fl # 병렬 처리
348
+ │ ├── v9-agent-engine.fl # ReAct 에이전트
349
+ │ ├── v9-memory-management.fl
350
+ │ ├── v9-optimized.fl # 최적화
351
+ │ ├── v9-benchmark.fl # 성능 벤치마크
352
+ │ └── v9-distributed.fl # 분산 처리
353
+
354
+ ├── dist/ # 컴파일된 JavaScript
355
+ │ ├── lexer.js
356
+ │ ├── parser.js
357
+ │ ├── compiler.js
358
+ │ └── vm.js
359
+
360
+ ├── tests/
361
+ │ ├── jest/ # Jest 테스트
362
+ │ │ ├── lexer.test.ts
363
+ │ │ ├── parser.test.ts
364
+ │ │ ├── compiler.test.ts
365
+ │ │ └── vm.test.ts
366
+ │ └── v9/
367
+ │ └── v9-*.test.ts
368
+
369
+ ├── docs/ # 문서
370
+ │ ├── index.md # 홈페이지
371
+ │ ├── api-reference.md # API
372
+ │ ├── learning-guide.md # 학습
373
+ │ ├── language-completeness.md
374
+ │ ├── benchmarks.md # 성능
375
+ │ └── architecture.md # 아키텍처 (이 파일)
376
+
377
+ └── package.json
378
+ ```
379
+
380
+ ---
381
+
382
+ ## 🔄 실행 흐름
383
+
384
+ ### 1. 프로그램 실행
385
+
386
+ ```bash
387
+ node dist/vm.js program.fl
388
+ ```
389
+
390
+ ### 2. 소스 코드 읽기
391
+
392
+ ```
393
+ program.fl → source code (string)
394
+ ```
395
+
396
+ ### 3. Lexer 단계
397
+
398
+ ```typescript
399
+ const lexer = new Lexer(source)
400
+ const { tokens, errors } = lexer.tokenize()
401
+ // error check...
402
+ ```
403
+
404
+ ### 4. Parser 단계
405
+
406
+ ```typescript
407
+ const parser = new Parser(tokens)
408
+ const { program, errors } = parser.parse()
409
+ // error check...
410
+ ```
411
+
412
+ ### 5. Compiler 단계
413
+
414
+ ```typescript
415
+ const compiler = new Compiler()
416
+ const chunk = compiler.compile(program)
417
+ // chunk: { code, constants, debug }
418
+ ```
419
+
420
+ ### 6. VM 실행
421
+
422
+ ```typescript
423
+ const vm = new VM()
424
+ const { output, stack, memory } = await vm.run(chunk)
425
+ console.log(output.join('\n'))
426
+ ```
427
+
428
+ ---
429
+
430
+ ## 🎯 설계 원칙
431
+
432
+ ### 1. **정확성**
433
+ - 모든 타입 검증
434
+ - 에러 처리 완벽
435
+ - 예외 상황 대비
436
+
437
+ ### 2. **성능**
438
+ - 효율적인 알고리즘
439
+ - 메모리 최적화
440
+ - 불필요한 연산 제거
441
+
442
+ ### 3. **확장성**
443
+ - 모듈화된 설계
444
+ - 표준 라이브러리 확장 용이
445
+ - 새로운 OpCode 추가 가능
446
+
447
+ ### 4. **유지보수성**
448
+ - 명확한 코드 구조
449
+ - 충분한 문서
450
+ - 테스트 커버리지
451
+
452
+ ---
453
+
454
+ ## 🚀 향후 개선
455
+
456
+ ### Phase 7: 웹 REPL
457
+ - 브라우저에서 코드 실행
458
+ - xterm.js 기반 대화형 환경
459
+
460
+ ### Phase 8: JIT 컴파일
461
+ - 자주 사용되는 코드 최적화
462
+ - 성능 50% 향상
463
+
464
+ ### Phase 9: 분산 실행
465
+ - 다중 VM 조율
466
+ - 네트워크 기반 실행
467
+
468
+ ---
469
+
470
+ **Last Updated: 2026-04-05**