← 목록
컴파일러 2026-04-26 2KB 읽기 2분

hanseonc_high — arr[i] = val 직접 대입 지원 추가

개요

hanseonc_high 고수준 컴파일러에 배열[인덱스] = 값 직접 대입 구문을 추가. 이전에는 배열 = 설정(배열, 인덱스, 값) 형태만 지원되어, VM 구현 파일 4개가 컴파일 불가였음.

변경 내용

hanseonc_high.c 수정 (2곳)

1. is_bracket_assign() 헬퍼 함수 추가

  • 이름[식] 뒤에 =이 오는지 look-ahead로 감지
  • 대괄호 중첩 깊이 추적하여 정확한 매칭 ] 이후 = 판별
2. 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.han2550
isa729코드젠.han2550
한선VM.han840
isa729vm.han660
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와 충돌 없음