한선씨 정통화 Phase 3 — 3트랙 병행 (대량변환 + 토크나이저 패치 + 변환기 진단)
날짜: 2026-05-27 원칙: 헌법 정통(RPN=ISA729 1:1), 크라우니에이전트 규칙(통일 베이스 + 사람 속도 + 결과 표준) 범위: Phase 2 후속 — 가장 깊은 인프라 개선
결과 요약
| 트랙 | 결과 | 산출물 |
|---|---|---|
| 1: 옵션A 토크나이저 패치 | ✅ 토큰화 완료, △ 파서 추가 필요 | hanseonc_high.c TOK_ARROW emit |
| 2: 대량 변환 (pkg/libs 등) | ✅ 393개 변환 | pkg/libs/*.rpn.한선 393개 |
| 3: clike_to_rpn 진단+패치 | ✅ 패치 적용, △ 잔존 버그 발견 | clike_to_rpn.py 인자없는 함수호출 지원 |
트랙 1 — hanseonc_high.c 옵션 A 토크나이저 패치
패치 위치: 2곳, 총 ~8줄.
c// hanseonc_high.c L574
TOK_LBRACK, TOK_RBRACK, TOK_COMMA, TOK_DOT, TOK_SEMI,
TOK_ARROW, // → (RPN 할당 연산자: U+2192, UTF-8 E2 86 92)
// hanseonc_high.c L752 (토큰화 함수, "2글자 연산자" 블록 앞)
if ((unsigned char)src[i] == 0xE2 && i+2 < src_len &&
(unsigned char)src[i+1] == 0x86 && (unsigned char)src[i+2] == 0x92) {
t->type = TOK_ARROW; strcpy(t->text, "→"); i += 3; token_count++; continue;
}
적용 후 동작:
0 →x입력 →TOK_NUM(0)TOK_ARROW("→")TOK_IDENT("x")3토큰 분리 ✓- 식별자 흡수 문제 해결됨 ✓
TOK_ARROW를 모름 — "예상치 못한 토큰" 오류. 고수준 모드에서 0 →x를 의미 있게 해석하려면 파서에 NUM ARROW IDENT → STORE 시퀀스 추가 필요 (Phase 4 후보).빌드: cc -O2 -o hanseonc_high hanseonc_high.c (TLS 불필요).
트랙 2 — pkg/libs 대량 변환 (393개)
한선컴파일.sh --convert /Users/ef/CrownyOS/crownyc/pkg/libs 결과:
- 후보: 4046개 (고수준, .rpn.한선 미보유)
- 변환 성공: 393개 (.rpn.한선 정본 생성)
- 실패 다수: clike_to_rpn 미지원 패턴 (Phase 3-3 진단 영역)
트랙 3 — clike_to_rpn 변환기 진단 + 패치
진단 결과 (6개 실패 파일 분석)
| 파일 | 주 실패 원인 |
|---|---|
| gateway.한선 | 연속 혹시 체인 + 한 줄 동안 블록 |
| 게이트웨이.한선 | 참/거짓 리터럴 미변환 + 인자없는 함수호출 |
| gateway.han | 인라인 // 주석 오파싱 |
| 순도측정.한선 | 중첩 동안 인덱스 충돌 |
| health-monitor.한선 | 인자없는 함수호출 (맵생성()) |
| cert-manager.한선 | \" 이스케이프 문자열 파싱 오류 |
적용된 패치 (1순위)
python# clike_to_rpn.py L233
m = re.match(r'([가-힣a-zA-Z_]\w*)\((.*)\)$', expr) # .+ → .*
if m:
fname = m.group(1)
args_str = m.group(2).strip()
if not args_str:
return fname # 인자 없는 함수호출
args = self._split_args(args_str)
...
발견된 잔존 버그
6개 파일 재변환 시도 시 RecursionError: maximum recursion depth exceeded 발생. _split_preserving_strings가 분리 실패 시 입력 그대로 반환 → 무한 재귀.
내 패치와 무관 (패치 전에도 동일 트레이스백). 별도 진단/수정 필요 (Phase 4 후보).
비율 변화 (전체 8% → 13%)
| 시점 | RPN | 고수준 | 전체 | RPN% |
|---|---|---|---|---|
| 측정 시작 | 186 | 1875 | 2068 | 8% |
| Phase 2 후 | 205 | 2260 | 2472 | 8% |
| Phase 3 후 | 633 | 4177 | 4817 | 13% |
- RPN 자산 3.4배 증가 (186 → 633)
- 비율 5%p 도약 (정통화 사상 가장 큰 도약)
- pkg/libs 393개가 비율 도약의 주역
변경된 파일
/Users/ef/CrownyOS/crownyc/hanseonc_high.c TOK_ARROW + 토큰화 분기 (~8줄)
/Users/ef/CrownyOS/crownyc/hanseonc_high.bak.옵션A 백업
/Users/ef/CrownyOS/crownyc/tools/clike_to_rpn.py .+ → .* + guard
/Users/ef/CrownyOS/crownyc/pkg/libs/*.rpn.한선 393개 신규
Phase 4 후보 (잔존 작업)
- hanseonc_high 파서에 TOK_ARROW 처리 —
NUM ARROW IDENT→ STORE 시퀀스. 회로방언 안에서0 →이름형태 인라인 변수 선언 가능해짐. - clike_to_rpn RecursionError 수정 —
_split_preserving_strings분리 실패 시 빈 리스트 반환 가드. - 2/3순위 변환기 개선: 이스케이프 문자열, 한 줄 동안 블록, 참/거짓 리터럴 변환, 연속 혹시 체인.
- 다른 영역 일괄 변환: tools/transpile/, CrownyTVM/std/, CrownyOS/apps/.