high2rpn.sh 변환기 버그 보수 — 가드클로즈 라벨 미정의 + 혹시(elif) 패스스루
개요
tools/high2rpn.sh(고수준 한선씨 → RPN 셸 변환기, 실제 변환 로직 자체가 이 bash
스크립트 안에 있다 — 별도 .한선/.toau 코어를 감싸는 래퍼가 아니다)의 두 가지
실측 버그를 수정하고,
libs/양심지표.rpn.한선을 신규 생성했다.
원인 진단
- 가드클로즈 버그:
만약(조건){반환 값}처럼 본문+닫는 }가 한 줄에 있으면,
기존 정규식이 여는
{까지만 매치하고 그 뒤 본문+
}는 통째로 버렸다(라인이
$ 앵커 없이 매치되어 반환문 자체가 소실 + 라벨 미정의).
- 혹시/아니면 패스스루:
혹시(elif) 키워드를 처리하는 분기가 아예 없어서
} 혹시 (조건) { 줄이 원문 그대로 통과됨(438개 libs 파일·1199곳 실측).
수정
- 파일:
/Users/ef/CrownyOS/crownyc/tools/high2rpn.sh
- 백업:
/Users/ef/CrownyOS/crownyc/tools/high2rpn.sh.bak-20260707
- BLOCK_STACK을
타입:라벨:체인끝 3필드로 확장(기존 2필드) — 만약/혹시/아니면
elif 체인 전체가 공유하는 종점 라벨을 물려받아 할당.
- 단일라인 만약/혹시/아니면(본문+
} 한 줄) 신규 처리 6분기 추가.
- 멀티라인
} 혹시 (조건) { 체인 처리(병합형/독립형) 신규 추가.
- 닫는
} 제네릭 핸들러: if/elif 블록이 아니면 없이 끝나면 자기 라벨 +
체인끝 라벨을 함께 정의하도록 수정.
검증 (3종)
- 미니 리프로 2종: 가드클로즈 3연속(A/B/C/F), 만약/혹시/아니면 체인(A/B/F) —
변환 후 라벨 전부 정의됨 확인, 고수준 경로(hanseonc_high+crownyc) 실행 결과와
RPN 변환 결과의 제어흐름 구조 일치 확인.
- 회귀 (실제 libs 2개):
환경변수.한선, 순열조합.한선 — 수정 전
hanseonc_rpn 컴파일 시
[오류] 미정의 라벨: 끝2/끝3/끝4,
끝1 발생 →
수정 후
0건(내용 복구로 cube 수 증가, 그 외 회귀 없음).
- 샘플 20개 파일(
} 혹시 패턴 보유): 미정의 라벨 총합 94건 → 11건으로 감소,
악화된 파일 0개(전부 before>=after). 잔여 11건은 별개의 기존 제약
(
convert_expr가 중위→후위 변환을 전혀 하지 않고 그대로 echo하는 사전 존재
한계, 이번 작업 범위 밖)로 추정 — 동일 파일(CalDAV.한선)에서 수정 전/후 모두
정확히 1건 미정의 라벨 발생(라벨 번호만 다름, 개수는 불변) 확인해 회귀 아님을
교차검증.
산출물
/Users/ef/CrownyOS/crownyc/libs/양심지표.rpn.한선 (신규, 28232B) —
hanseonc_rpn 및
crownyc run hanseonc_std.toau 파이프 양쪽 컴파일 성공,
미정의 라벨 0건.
apps/양심지표_테스트.한선도 변환 시도 — 변환/컴파일(라벨 해석)은 성공했으나
실제 실행은 스택 오버플로/무한루프로 실패. 원인은 가드클로즈·혹시체인과 무관한
별개의 사전 제약(
convert_expr가 함수호출/문자열연결 등 복잡 표현식을 RPN
후위표기로 변환하지 않고 그대로 통과시킴) — 이번 "가드클로즈+혹시체인 두
패턴만" 최소수정 범위 밖으로 판단, 정직 기록.
미해결 (범위 밖으로 확인된 한계)
convert_expr()가 echo "$expr" 그대로인 무변환(passthrough) 상태라
함수 호출 인자·문자열 연결·비교 연산자가 RPN 후위표기로 전혀 변환되지 않음
("미인식 단어" 경고 다수, 일부 파일은 이로 인해 컴파일러 내부 위치 계산이
어긋나 무관한 라벨 1개가 "미정의"로 잘못 보고되는 부작용 확인 — 회귀 아님,
동일 파일에서 수정 전/후 오류 개수 불변으로 교차검증).
- 이 무변환 문제를 고치려면 별도의 완전한 중위→후위 표현식 트랜스파일러가
필요(hanseonc_high 수준 파서 이식) — 이번 작업 범위 밖.
크라우니코드
lookup HIT 0건(신규 패턴, MISS) / MISS 2건("가드클로즈", "elif 체인" 검색) /
learn 추가 1건(
RPN가드클로즈혹시체인변환_양심지표 ←
libs/양심지표.rpn.한선).
crownycode-enforce.sh done-convert tools/high2rpn.sh 완료 처리.