인터프리터는 Lexer, Parser, 그리고 실제 실행을 담당하는 Interpreter라는 세 가지 주요 구성 요소로 이루어집니다. Lexer는 소스 코드를 토큰으로 분할하고, Parser는 이 토큰들을 문법 규칙에 따라 의미 있는 구조로 변환합니다. 본 구현에서는 먼저 사용자와 상호작용하는 REPL(Read-Eval-Print Loop)과 유사한 프로그램을 구축하여, QUIT, CLEAR, HELP, NEW, LIST와 같은 기본 명령어를 처리하고 프로그램 라인을 메모리에 저장하는 기능을 추가합니다.
Lexer는 숫자, 식별자, 연산자, 문자열 리터럴 등 BASIC의 네 가지 필수 토큰 유형을 처리하도록 구현됩니다. 특히, BASIC의 대소문자 구분 없는 특성을 고려하여 식별자는 대문자로만 인식하며, 변수 유형 접미사($ 등)를 지원합니다. 이어서 PRINT 문을 구현하여 문자열, 변수 값을 출력하고 쉼표(,)와 세미콜론(;)과 같은 구분자를 처리하여 출력 형식을 제어합니다.
변수 선언 및 사용을 위해 LET 문이 도입됩니다. 모든 변수는 전역 해시($variables)에 저장되며, 초기에는 간단한 숫자 값만 처리합니다. 이후에는 재귀 하향식 파싱(recursive descent parsing)을 통해 산술, 비트와이즈, 논리, 비교 연산을 포함한 복잡한 수식 평가 기능을 추가합니다. 이 파서는 연산자 우선순위(예: 곱셈이 덧셈보다 먼저)와 결합성(예: 지수 연산의 우측 결합성)을 정확히 따르며, NOT과 같은 단항 연산자도 지원합니다.
마지막으로, 프로그램의 제어 흐름을 관리하는 GOTO와 IF-THEN-ELSE 문을 구현합니다. GOTO는 특정 라인 번호로 무조건 점프하는 기능을 제공하며, IF 문은 조건식 평가 결과에 따라 코드 블록을 실행하거나 건너뛰는 기능을 수행합니다. 특히, 초기 BASIC 버전에는 없었던 ELSE 절을 추가하여 현대적인 조건부 실행을 가능하게 합니다. 이 모든 과정에서 eval_expr와 같은 헬퍼 함수를 사용하여 표현식 평가를 모듈화하고 재사용성을 높입니다.