hanseonc_high — arr[i] = val 직접 대입 지원 추가
개요
hanseonc_high 고수준 컴파일러에 배열[인덱스] = 값 직접 대입 구문을 추가.
이전에는 배열 = 설정(배열, 인덱스, 값) 형태만 지원되어, VM 구현 파일 4개가 컴파일 불가였음.
변경 내용
hanseonc_high.c 수정 (2곳)
1. is_bracket_assign() 헬퍼 함수 추가
이름[식]뒤에=이 오는지 look-ahead로 감지- 대괄호 중첩 깊이 추적하여 정확한 매칭
]이후=판별
parse_statement() TOK_IDENT 분기에 배열 인덱스 대입 처리 추가
이름.필드 = 값과이름 = 값사이에 삽입- 코드 생성: 인덱스→tmp91, 값→tmp92 임시 저장 후
mem[arr+index] = val방식 - 비-대입 경우 (표현식 문) 기존 expression parser로 자연 폴스루
생성 코드 흐름
parse_expr(인덱스) → STORE tmp91
parse_expr(값) → STORE tmp92
emit_var_load(vi) → arr 기저주소
LOAD tmp91 → 인덱스
ADD → arr + 인덱스 = 목표주소
LOAD tmp92 → 값
SWAP + STORE → mem[목표주소] = 값
결과
| 파일 | 이전 에러 | 이후 에러 |
|---|---|---|
| 크라우니VM.han | 255 | 0 |
| isa729코드젠.han | 255 | 0 |
| 한선VM.han | 84 | 0 |
| isa729vm.han | 66 | 0 |
| std/ 전체 | 54/79 실패 | 79/79 성공 |
관련 파일
/Users/ef/CrownyOS/crownyc/hanseonc_high.c— 컴파일러 수정/Users/ef/CrownyOS/crownyc/배열인덱스대입테스트.한선— 테스트 코드/Users/ef/Downloads/CrownyTVM/std/*.han— 79개 표준 라이브러리
잔여 이슈
- 중첩 인덱싱 대입 (
arr[i][j] = val) 미지원 — 현재 필요 없음 - 임시 주소 49991-49992 사용 —
설정()builtin의 49997-49999와 충돌 없음