프로젝트 소개

PB-Compiler(`pbc`)는 현대적인 C#으로 작성된 PowerBASIC 계열 컴파일러의 클린룸 재구현입니다. 주요 목표는 DOS 시대의 빈티지 BASIC 소스 코드를 현대 64비트 하드웨어에서 실제로 실행 가능한 16비트 MS-DOS `.EXE` 바이너리로 컴파일할 수 있게 하는 것입니다. 이 프로젝트는 역사적 방언에 대한 엄격한 충실성을 강조하며, 문서화된 버그를 포함하여 원래 독점 컴파일러가 생성한 프로그램과 동일하게 동작하도록 보장합니다. 주요 기능은 다음과 같습니다: **방언 지원**: 컴파일러는 `--dialect` 플래그를 통해 다양한 방언을 지원하며, Borland 계열(Turbo Basic, PowerBASIC 2.0-3.5)과 Microsoft 계열(BASICA, GW-BASIC, QuickBASIC 1.0-4.5, QBasic, BASIC PDS)을 포함합니다. 각 방언은 최신 기능을 제한하고 버전별 동작을 활성화합니다. **충실성 계약**: 역사적 방언의 경우, 오라클 기반 차분 하네스를 사용하여 출력을 원본 바이너리와 검증합니다. 이를 통해 생성된 코드가 바이트 단위로 동일한 프로그램 출력을 생성하여 레거시 소프트웨어 생태계와의 호환성을 유지합니다. **최적화 파이프라인**: 고급 SSA 기반 최적화 백엔드는 `--optimize` 플래그를 통해 모든 방언에서 사용할 수 있습니다. 이 파이프라인은 상수 폴딩, 데드 코드 제거, 공통 부분식 제거, 강도 감소 등을 포함합니다. 관찰 가능한 동작을 변경하지 않고 바이너리 크기를 크게 줄일 수 있습니다(예: Hello World 프로그램을 25바이트로 축소). **PowerBASIC 3.6 슈퍼셋**: 미래 지향적 방언(`pb36`)은 표현식 본문 함수, 튜플, 오버로딩, 기본 매개변수, 람다/클로저, 제네릭, 코루틴(`YIELD`), 구조적 예외 처리(`TRY/CATCH`)와 같은 현대적 언어 기능을 추가합니다. 이들은 선택 사항이며 기존 PB 3.5 코드에 영향을 주지 않습니다. **출력 형식**: 표준 DOS MZ `.EXE` 파일, 컴파일된 단위(`.PBU`), 단위 라이브러리(`.PBL`)를 생성합니다. 또한 추가 처리를 위해 이식 가능한 C99 또는 LLVM IR을 출력하는 것도 지원합니다. **설치 및 사용**: .NET을 사용하여 빌드되며 .NET 6+를 지원하는 모든 OS에서 실행됩니다. 사용자는 저장소를 복제하고 `dotnet`으로 빌드한 후 `pbc` CLI 도구를 사용하여 BASIC 소스를 컴파일합니다. 결과는 DOSBox 또는 실제 DOS 하드웨어에서 테스트할 수 있습니다.