| name | interpreter-design |
| description | Programming language interpreter design and implementation guide. Use when the user requests building an interpreter, parser, lexer, or language implementation โ including Pratt parsing, AST evaluation, scope chains, and closures. |
Interpreter Design Skill
ํ๋ก๊ทธ๋๋ฐ ์ธ์ด ์ธํฐํ๋ฆฌํฐ ์ค๊ณ ๋ฐ ๊ตฌํ ๊ฐ์ด๋
4๋จ๊ณ ํ์ดํ๋ผ์ธ ์ํฌํ๋ก์ฐ
์์ค์ฝ๋ โ [Lexer] โ ํ ํฐ ์คํธ๋ฆผ โ [Parser] โ AST โ [Evaluator] โ ๊ฒฐ๊ณผ
โ
[Environment]
- Lexer: ์์ค ์ฝ๋๋ฅผ ํ ํฐ ์คํธ๋ฆผ์ผ๋ก ๋ณํ
- Parser: ์ฌ๊ท ํ๊ฐ + Pratt Parser๋ก AST ์์ฑ
- Evaluator: Tree-walking์ผ๋ก AST ํ๊ฐ
- Environment: ์ค์ฝํ ์ฒด์ธ + ํด๋ก์ ์ง์
ํ์ผ ๊ตฌ์กฐ (ํ์)
src/
lexer.js - Tokenizer
token.js - ํ ํฐ ํ์
์ ์
parser.js - ์ฌ๊ท ํ๊ฐ ํ์
ast.js - AST ๋
ธ๋ ํ์
์ ์
interpreter.js - Tree-walking ํ๊ฐ๊ธฐ
environment.js - ์ค์ฝํ ์ฒด์ธ + ํด๋ก์
builtins.js - ๋ด์ฅ ํจ์ (print, len, push, type, str, int)
errors.js - ์๋ฌ ํด๋์ค (ํ/์ด ๋ฒํธ ํฌํจ)
repl.js - ๋ํํ ์คํ ํ๊ฒฝ
index.js - CLI ์ง์
์
tests/
lexer.test.js
parser.test.js
interpreter.test.js
integration.test.js
ํต์ฌ ์์น
- ๊ฐ ํ์ดํ๋ผ์ธ ๋จ๊ณ๋ ๋
๋ฆฝ์ ์ผ๋ก ํ
์คํธ ๊ฐ๋ฅํด์ผ ํจ
- Parser๋ Pratt Parser๋ก ์ฐ์ฐ์ ์ฐ์ ์์ ์ฒ๋ฆฌ
- Environment๋ ๋ถ๋ชจ ์ฐธ์กฐ๋ฅผ ํตํ ์ค์ฝํ ์ฒด์ธ (ํด๋ก์ ์ง์)
- ์๋ฌ ๋ฉ์์ง์ ๋ฐ๋์ ํ/์ด ๋ฒํธ ํฌํจ
- ํด๋ก์ : ํจ์ ์ ์ ์ ํ์ฌ ํ๊ฒฝ์ ์บก์ฒ
ํ
์คํธ ์ ๋ต
- Lexer: ๊ฐ ํ ํฐ ํ์
๋ณ tokenize ํ
์คํธ
- Parser: ํํ์ ์ฐ์ ์์, ์ ์ด๋ฌธ, ํจ์ ์ ์ธ ํ์ฑ ํ
์คํธ
- Interpreter: ์ฐ์ , ๋น๊ต, ๋ณ์, ์ ์ดํ๋ฆ, ํจ์, ํด๋ก์ ๊ฐ๊ฐ
- Integration: ํผ๋ณด๋์น, map/filter, makeCounter ๊ฒ์ฆ ํ๋ก๊ทธ๋จ