피드로 돌아가기
Real Diagnostic Spans in CrabPascal v2.9.9 | Diagnósticos reais no CrabPascal v2.9.9
Dev.toDev.to
Infrastructure

CrabPascal v2.9.9: 정확한 Source Location 추적으로 컴파일러 UX 최적화

Real Diagnostic Spans in CrabPascal v2.9.9 | Diagnósticos reais no CrabPascal v2.9.9

CrabPascal2026년 6월 4일5intermediate

Context

기존 CrabPascal 버전에서 Parse Error 발생 시 실제 오류 지점이 아닌 1:1 위치로 보고하는 한계 존재. 이로 인한 IDE의 잘못된 하이라이팅과 디버깅 효율 저하 문제 발생.

Technical Solution

  • UTF-8 Byte Offset을 1-based Line/Column 쌍으로 변환하는 span.rs 모듈 설계
  • Lexer 단계에서 Peek Lookahead가 아닌 이미 방출된 Token에 last_token_span을 저장하여 위치 정확도 확보
  • Parser 내 ParseError 구조체에 line, column 필드를 추가하여 에러 위치 정보를 전파하는 메커니즘 구현
  • quiet_diagnostics 옵션을 통한 성공 시 출력 억제 및 불필요한 로그 제거
  • Windows 경로의 콜론(:) 포함 사례 등 10가지 Edge Case를 검증하는 Golden Tests 도입
  • Rust의 Zero-cost Struct를 활용하여 GC 오버헤드 없는 Span 정보 전달 체계 구축

1. 에러 위치 보고 시 Peeked Token이 아닌 Current Token의 Span을 참조하고 있는지 검토

2. OS별 파일 경로 구분자(특히 Windows의 드라이브 문자)가 파싱 로직에 영향을 주는지 확인

3. 컴파일러 UX 개선을 위해 IDE의 Problem Matcher 포맷(file:line:column)과 일치하는 출력 표준 설계

4. 구문 분석(Syntax)과 의미 분석(Semantic)의 진단 범위를 단계적으로 확장하는 스코프 제어 적용

원문 읽기