한선씨 정통화 Phase 4 — 4트랙 병행 (큰 도약)
날짜: 2026-05-28 원칙: 헌법 정통, 크라우니에이전트 규칙(통일베이스+사람속도+결과표준), 모두 빠짐없이 진행 범위: Phase 3 후속 — 파서 완성 + 무한재귀 가드 + 대량 변환 + 변환기 개선
결과 요약
| 트랙 | 결과 | 산출물 |
|---|---|---|
| 1: 파서 TOK_ARROW 처리 | ✅ 완료 | parse_statement 분기, 0 →x 인라인 작동 |
| 2: RecursionError 가드 | ✅ 완료 | _split_preserving_strings 가드, 6/6 변환 |
| 3: 대량 변환 (apps/browser/std) | ✅ 88개 | apps 50, browser 35, std 3 |
| 4: 변환기 2·3순위 패치 | ✅ 완료 | 이스케이프, 참/거짓/모름, 한줄 동안 |
트랙 1 — 파서 TOK_ARROW 처리
hanseonc_high.c parse_statement의 default + TOK_IDENT case에 TOK_ARROW 후속 처리 추가.
cparse_expr();
if (cur_type() == TOK_ARROW) {
advance();
if (cur_type() != TOK_IDENT) { /* error */ }
char arrow_name[256];
strncpy(arrow_name, cur()->text, 255);
advance();
int vi = find_var(arrow_name);
if (vi < 0) vi = add_var(arrow_name);
emit_var_store(vi);
} else {
buf_emit_op(OP_POP);
}
검증: 0 →x 1 →y 출력값(x+y) → 결과 1 (정상). "예상치 못한 토큰 '→'" 6개 에러 모두 소멸.
의미: 회로방언이나 고수준 안에서 RPN 인라인 변수선언 가능. 가져오기한 RPN 라이브러리의 0 →전역변수 패턴도 작동.
잔존: .함수이름 (RPN 함수정의)는 별개 — .(TOK_DOT) 파서 처리 필요 (Phase 5 후보).
트랙 2 — RecursionError 가드
clike_to_rpn.py _split_preserving_strings가 분리 못하면 [expr] 반환 → 재귀 호출 → 무한.
python# 가드: 분리 못 했으면 빈 리스트 반환
if len(parts) <= 1:
return []
return parts
호출자도 가드:
pythonparts = self._split_preserving_strings(expr, ' + ')
if parts: # 분리 성공한 경우만 처리
...
검증: 6개 실패 파일 모두 변환 + RPN 컴파일 성공:
- gateway.한선 → 363KB
- 게이트웨이.한선 → 423KB
- gateway.han → 172KB
- 순도측정.한선 → 366KB
- health-monitor.한선 → 317KB
- cert-manager.한선 → 255KB
트랙 3 — 대량 변환 88개
| 영역 | 시도 | 성공 | 실패 |
|---|---|---|---|
| tools/transpile | 4 | 0 | 4 |
| CrownyTVM/std | 40 | 3 | 37 |
| CrownyOS/apps | 65 | 50 | 15 |
| CrownyBrowser/src/v2 | 35 | 35 | 0 (100%) |
| 합계 | 144 | 88 | 56 |
트랙 4 — 변환기 2·3순위 개선
| 패치 | 위치 | 효과 |
|---|---|---|
이스케이프 \" 처리 | _split_preserving_strings L311, _split_op L360 | cert-manager 해금 |
| 참/거짓/모름 리터럴 | expr_to_rpn L226-228 | 3진 논리 헌법 정렬 |
| 한줄 동안 블록 | convert_line L154-172 | gateway.한선 해금 |
비율 변화 — 사상 최대 도약
| 시점 | RPN | 고수준 | 전체 | RPN% |
|---|---|---|---|---|
| 측정 시작 (오늘) | 186 | 1875 | 2068 | 8% |
| Phase 2 후 | 205 | 2260 | 2472 | 8% |
| Phase 3 후 | 633 | 4177 | 4817 | 13% |
| Phase 4 후 | 4622 | 7262 | 11983 | 38% |
- RPN 자산 24.8배 증가
- 비율 30%p 도약 (Phase 4가 가장 큰 단일 점프)
- gateway 영역: 0% → 50% (균형 달성)
- 측정 범위 확장(apps/browser 포함) + 변환기 개선의 복합 효과
학습DB 등록 (5건)
옵션A_파서_TOK_ARROW_처리Phase4_3_대량변환_88개clike_to_rpn_이스케이프_가드clike_to_rpn_무한재귀_가드clike_to_rpn_참거짓모름_리터럴
변경된 파일
/Users/ef/CrownyOS/crownyc/hanseonc_high.c parse_statement TOK_ARROW 분기 (~30줄)
/Users/ef/CrownyOS/crownyc/tools/clike_to_rpn.py 가드 + 2·3순위 패치 (~30줄)
/Users/ef/CrownyOS/apps/*.rpn.한선 50개 신규
/Users/ef/CrownyBrowser/src/v2/*.rpn.한선 35개 신규
/Users/ef/Downloads/CrownyTVM/std/*.rpn.한선 3개 신규
/Users/ef/crowny-gateway/lib/*.rpn.한선 6개 추가 (기존 + 트랙2 회복)
/Users/ef/crowny-gateway/scripts/*.rpn.한선 3개 추가
다음 단계 (Phase 5 후보)
- RPN 함수 정의(
.이름) 파서 처리 — 회로방언이 RPN 라이브러리 100% 가져오기 가능해짐 - 남은 56개 변환 실패 진단 — 패턴 식별 + 변환기 추가 개선
- **CrownyOS/sdcard-* 영역 (RPi5/OPi5/Kria) 일괄 변환
- 학습DB 자동 분류** — RPN/고수준/회로방언 별로 패턴 정본화