프로그래밍 이론 교육을 위한 렉시컬·파싱 자동화 도구 통합 활용 방안
초록
본 논문은 미래 정보교사를 양성하는 프로그래밍 이론 교육에서 렉시컬 분석기(lex)와 구문 분석기(yacc)를 결합해 활용하는 방법론을 제시한다. 함수형 언어인 Scheme와 SML을 교육 언어로 채택하고, MosML 방언을 예제로 삼아 계산기 구현을 통해 문법 확장, 조건·반복 구문 도입, 그리고 기계어 생성 단계까지의 전체 컴파일러 개발 과정을 시연한다.
상세 분석
논문은 먼저 컴파일러 교육에서 파싱 분석이 차지하는 교육적 가치를 논의한다. 전통적으로 파싱은 문법 규칙을 형식화하고, 언어 구조를 트리 형태로 변환하는 과정으로, 학생들에게 언어 설계와 구현의 전반적인 흐름을 이해시키는 핵심 단계이다. 여기서 저자는 lex와 yacc라는 두 개별 자동화 도구를 각각 렉시컬 토큰화와 구문 트리 생성에 사용하면서도, 이들을 하나의 파이프라인으로 결합하는 구체적 절차를 제시한다. 특히, lex 파일(.l)에서 정의된 토큰 집합이 yacc 파일(.y)에서 선언된 토큰과 정확히 일치하도록 인터페이스를 맞추는 과정이 상세히 설명된다. 이는 토큰 충돌이나 비정형 입력에 대한 오류 처리를 최소화하고, 학생들이 디버깅 과정을 체계적으로 학습하도록 돕는다.
다음으로 함수형 언어인 Scheme와 SML을 교육 매체로 선택한 이유를 살펴본다. 두 언어는 고차 함수, 패턴 매칭, 강력한 타입 시스템 등을 제공해 파싱 결과를 함수형 스타일로 처리하기에 적합하다. 특히, MosML은 SML 기반의 교육용 변형으로, 기존 SML 컴파일러와 호환되면서도 간소화된 구문을 제공한다. 논문은 MosML을 이용해 ‘확장된 계산기’ 예제를 구현한다. 기본적인 산술 연산 외에 변수 선언, 함수 정의, 조건문(if-else), 반복문(while) 등을 문법에 추가함으로써, 학생들이 실제 프로그래밍 언어의 복합 구조를 직접 설계하고 구현해 보는 경험을 제공한다.
문법 확장의 핵심은 yacc 파일 내에서 %token, %type, %left/%right 선언을 적절히 배치하고, 구문 규칙(rule) 부분에 새로운 비터미널을 도입하는 것이다. 예를 들어, 조건문을 구현하기 위해 ‘stmt → IF expr THEN stmt ELSE stmt’ 형태의 규칙을 추가하고, 해당 규칙에 대응하는 시멘틱 액션에서 Scheme 혹은 SML 함수 호출을 삽입한다. 반복문 역시 ‘stmt → WHILE expr DO stmt’ 규칙을 정의하고, 내부적으로 재귀적 평가 함수를 생성한다. 이러한 과정은 학생들에게 문법 설계와 시멘틱 액션 사이의 연관성을 명확히 인식하게 하며, 파싱 트리와 실행 환경 사이의 매핑을 직접 구현하도록 유도한다.
마지막으로 논문은 코드 생성 단계의 필요성을 언급한다. 현재 제시된 예제는 인터프리터 수준에 머물지만, 기계어 생성(코드 생성) 단계까지 확장하면 전체 컴파일러 파이프라인을 완성할 수 있다. 이를 위해 중간 표현(IR)로 삼을 수 있는 람다 계산식이나 삼중 코드(triple code)를 도입하고, 최종적으로 대상 머신의 어셈블리 혹은 가상 머신 바이트코드로 변환하는 백엔드 모듈을 구현한다. 이러한 확장은 학생들에게 고수준 언어 설계부터 저수준 실행 코드까지의 전 과정을 체험하게 함으로써, 실제 산업 현장에서 요구되는 전반적인 컴파일러 개발 역량을 함양하도록 설계되었다.
요약하면, 본 논문은 lex와 yacc를 함수형 언어와 결합한 교육용 프레임워크를 제시하고, MosML을 통한 실습 예제로 문법 확장과 코드 생성까지의 로드맵을 제시함으로써, 미래 정보교사의 프로그래밍 이론 교육에 실용적인 도구와 방법론을 제공한다.
댓글 및 학술 토론
Loading comments...
의견 남기기