ISA729 스펙 역생성기 구축
개요
크라우니 4상균형3진 기계어(TOAU/ISA729)의 공개 릴리즈를 앞두고, 기존 문서 (ISA729_FINAL.md, ISA729_QUICK_REF.md)가 실구현(crownyc.c)과 충돌/구식임이 감사에서 드러났다. 유일하게 신뢰 가능한 원천인 crownyc.c의 exec_opcode() switch(op) 실제 구현에서 스펙을 역생성하는 도구를 만들었다.
무엇을 했는지
crownyc.c(18,014줄) 분석:exec_opcode()는 5199~16224줄, 내부에 중첩
grep "case N:"으로는 안전하지
않음을 확인. 브레이스 깊이 + switch 중첩 카운트를 추적해 depth==1인
case만 실제 opcode로 인정하는 파서를 작성.
- 주석/문자열 리터럴을 먼저 블랭크 처리(위치 보존)한 뒤 스캔 — 주석 안에
opcode_name()(영문, 4938~5091줄)과opcode_name_kr()(한글,
case N: return "X"; 매핑 추출.
- 6-trit 인코딩은
TOAU_ENCODING.md의 고정표(AA=0..TT=8, 균형삼진 아님)
sector*81+group*9+command, 0~728만 유효, 729+는
"확장영역"으로 표기.
- 기존
ISA729_QUICK_REF.md표를 파싱해 번호 충돌을 검출.
핵심 발견 (실측)
- 구현 opcode 총수: 924 (switch(op) depth==1 실제 case, 표 행수와 일치 확인)
- 이름 미매핑(영문+한글 모두 없음): 567건 (924건 중 61% —
opcode_name()
opcode_name_kr()이 ~367개만 커버)
- 플랫폼 분기 변형: 20건 — opcode 760~779가
#ifndef _WIN32(실제 구현:
#else(Windows stub: 전부 A 반환) 두 곳에 등장.
첫 등장(비-Windows 실구현)을 대표값으로 채택.산출 파일
/Users/ef/CrownyOS/crownyc/tools/isa729_spec_gen.sh— bash 래퍼(실행 진입점)/Users/ef/CrownyOS/crownyc/tools/isa729_spec_gen.pl— 실제 파싱/생성 로직(perl)/Users/ef/CrownyOS/crownyc/tools/isa729_스펙생성.한선— 한선씨 동반본
/Users/ef/CrownyOS/docs/ISA729_IMPL.md— 역생성된 전체 스펙 문서
검증
- 표 행수(924) == 실제 case 수(924) 일치 확인 (awk 카운트 교차)
- opcode 0/81/162/243/324/405/486/567/696/890/945 등 10개 이상 샘플을
- 694번이 SQL_WHERE로 나오는지 확인 — 확인됨 (QUICK_REF 충돌 ②에도 반영)
- 한선씨 동반본: hanseonc_high 컴파일 성공, crownyc 실행 성공. 6-trit
함정 노트 (한선씨 개발 중 실측)
; 코드 뒤 인라인 주석(세미콜론)이 콤마/식별자를 포함하면 파서가
- 균형3진 자연반올림 나눗셈("/","%")은 floor semantics와 다를 수 있어
fn_merge_isa_인덱스2트릿 패턴이 TOAU_ENCODING.md 고정표와
idx=1 등에서 불일치 — 별도 용도였을 가능성). 이 작업에서는
바닥나눗셈/바닥나머지를 자연나눗셈+보정으로 직접 구현해 사용크라우니코드 보고
lookup HIT 2건(번호6트릿/인덱스2트릿 — 단, 인덱스2트릿은 이 스펙표 용도와 불일치 확인되어 미사용) / MISS 다수(perl 기반 스위치-깊이 추적 파서는 신규) / learn 4건 (인덱스2트릿_TOAU고정표, 번호6트릿_표시용_sector우선, 바닥나눗셈_나머지_비음수보정, 버퍼파일읽기_case토큰스캔)
잔여 이슈
- ISA729_FINAL.md(원본 위치
/Users/ef/CrownyOS/ISA729_FINAL.md)는 이번
- 확장영역(729~945) 195건 중 상당수가 이름 미매핑 상태 — 양자/다항곱 관련
- 코멘트 컬럼은 case 라인과 같은 줄의
/* ... */만 추출 — 여러 줄에 걸친