정규식 검증카드 — python re / JS RegExp 대응 (파동① "존재≠동작" 검증)
개요
crowny-rpnkit 라이브러리카드 시리즈의 정규식 편. libs/ 및 std/의 정규식 관련 전 자산을
실컴파일+실행으로 검증하고, 문서에는 있으나 실제 동작하지 않는(또는 정반대로 동작하는)
케이스를 정확히 재현·기록했다.
핵심 발견
libs/정규식.한선(hanseonc_high) — 컴파일 자체가 실패(0바이트, 47건 미정의변수). RPN 문법이 고수준 소스에 잘못 섞여 사실상 죽은 파일.
libs/정규식고급.한선(hanseonc_high) — 유일하게 실사용 가능. 단 +/{n} 수량자에 off-by-one 버그(X+는 최소2회, X{n}은 최소n+1회 필요), *는 진짜 quantifier가 아니라 glob 와일드카드.
libs/정규식고급.rpn.한선(hanseonc_rpn) — 컴파일은 경고 94건으로 통과하나 실제 호출 시 PC 무한루프(5초 타임아웃 확인, 강제종료 필요).
/Users/ef/Downloads/CrownyTVM/std/정규식.한선 — 헤더 주석("지원: ^ $ . * + ? [abc] [a-z]")과 실제 구현이 불일치. quantifier/문자클래스는 미구현으로 전부 거짓 반환.
- 네이티브 VM REGEX opcode(692) — crownyc.c에 POSIX regcomp/regexec로 진짜 구현돼 있으나, hanseonc_high/hanseonc_rpn/hanseonc_std 어떤 키워드 테이블에도 매핑이 없어 소스 레벨에서 100% 도달 불가(죽은 코드). 파동②(정규식 정본화) 최우선 작업(P0)으로 카드에 기재.
산출물
/Users/ef/crowny-rpnkit/라이브러리카드/정규식카드.md — 대응표, 함정 전표 7건, 관용구 4종, 갭 목록(P0~P4)
/Users/ef/crowny-rpnkit/라이브러리카드/정규식검증.sh — 12/12 PASS (예제 10건 + 비동작 재현 2건), exit 0
/Users/ef/crowny-rpnkit/라이브러리카드/예제/01~10_*.한선 — 전부 실컴파일+실행 검증된 예제
관용구 (정규식 없이 문자열 함수로 대체)
숫자추출, 공백분리(1칸 정확), 접두/접미검사, 포함하나() 존재확인 — §4 참조.
학습 등록
crownycode-learn.sh add 5건: 정규식_존재비동작_컴파일실패, 정규식고급_수량자_offbyone_버그,
정규식_RPN_무한루프_버그, 정규식_대안std_문서불일치, 정규식_숫자추출_공백분리_관용구
잔여 이슈
- 파동②(정규식 정본화) 미착수 — P0(opcode692 키워드 배선)가 가장 적은 작업으로 가장 큰 효과.
그룹추출()은 진짜 (...) 캡처가 아니므로, 정본화 시 regmatch_t 배열 다중 반환 API 설계 필요.
- 이 세션 중 시스템이 100+ 백그라운드 crownyc 프로세스로 과부하 상태였음 — 절대경로 가져오기가
간헐적으로 "파일 없음"(open() EINTR류)을 반환하는 것을 실측(정규식검증.sh에 1회 재시도로 완화).