한선씨 소스코드를 읽어 구조 IR로 파싱, 4개 언어(Python/JS/Rust/한선씨)로 자동 변환. 동일 IR을 직접 실행도 가능.
원본: 함수 팩토리얼(n) { 만약 (n <= 1) { 반환 1 } 반환 n * 팩토리얼(n - 1) }
→ Python: def 팩토리얼(n): if n <= 1: return 1; return n * 팩토리얼(n - 1)
→ JS: function 팩토리얼(n) { if (n <= 1) { return 1; } return n * 팩토리얼(n - 1); }
→ Rust: fn 팩토리얼(n) { if (n <= 1) { return 1; } return n * 팩토리얼(n - 1); }
→ 한선씨: 함수 팩토리얼(n) { 만약 (n <= 1) { 반환 1 } 반환 n * 팩토리얼(n - 1) }
간단 변환 변수 x=10; y=x+20; 출력값(y) → IR 직접 실행 → 30 ✓
| 파일 | 역할 |
|---|---|
의미IR파서.한선 | 한선씨 토큰화 + 재귀하향 파싱 → 구조 IR |
의미IR코드생성기.한선: 이항 연산 괄호 추가 (자식이 이항이면 (...) 감싸)의미IR파서.한선: 한글 식별자 토큰화 버그 수정 (한 글자씩 분리 → 단어 단위)의미IR파서.한선: 숫자 토큰화 수정 (여러 자리 숫자 지원)| 한선씨 | IR 노드 |
|---|---|
변수 x = 10 | [@대입, [@식별자,x], [@리터럴,10,숫자]] |
함수 이름(a) {...} | [@함수정의, 이름, [a], 본문] |
만약 (조건) {...} | [@만약, 조건IR, 참블록] |
동안 (조건) {...} | [@동안, 조건IR, 본문] |
반환 값 | [@반환, 값IR] |
이름(인자) | [@호출, [@식별자,이름], 인자들] |
a + b * c | [@이항, +, a, [@이항, *, b, c]] |
구조체 X {a,b} | [@구조체정의, X, [a,b]] |
12개 라이브러리 스캔 → 82 엣지 자동 추출:
@의미IR코드생성기 —@필요함→ @의미사전
@의미IR코드생성기 —@포함→ @함수_코드생성
@의미IR코드생성기 —@포함→ @함수_블록생성
컴파일러 수정: 8곳 (메서드/제네릭/접근제어/중첩인덱싱/필드할당/배열메모리/전처리기)
VM 수정: 해시맵 243→729
라이브러리: 59→76 (+17)
의미코드: 88→991
사전: 52코드×7언어=350+ 바인딩 + 225 내장함수 한글
풀 루프: 표면어(4개국어)→IR→코드(4언어)+직접실행+파일영속화
트랜스파일: 한선씨→Python/JS/Rust/한선씨