프로그래밍 언어 아희를 아시나요? (상당히) 독특한 프로그래밍 방법으로 나름의 명성이 있는데요, 예시 코드를 보고 가겠습니다.

방뿌반탸볃쑹희빠초텨
순처산썩속뱌뮹쏭셩토
붕툐터뱑뫃밙뎌붃벓본
사받본몽성멓샥뗘모볻
아희꿀잼빠썅펴댜셩속

네, 제가 직접 짰던 코드인데요, 이 코드가 하는 일은 무엇일 것 같나요? 무려 백준 1003번 문제의 해답 코드입니다. 수를 입력받아 피보나치 수열 함수의 호출 횟수를 출력하는 문제이죠.


혹시 여기까지만 보시고 채점 페이지에 저걸 제출한다면 "틀렸습니다" 문구를 보게 되실 겁니다. "자바스크립트로 된 아희 처리기"나 "알파희"에서는 잘 되는데, 백준 온라인 저지에서 사용하는 C언어 아희 구현체 caheui가 문제입니다. BOJ 게시판에 해당 구현체가 말썽이라는 언급문제제기가 있었지만 비주류 언어로서 안타깝게도 해결이 되지 않고 있습니다.


그래서 저는 아희 스펙을 완전히 준수하는 자바스크립트 인터프리터를 만들어보고자 이 프로젝트를 시작하게 되었습니다. 사실 위의 채점만이 문제라면 C언어로 짰을텐데요, 저는 더 큰 그림을 그리고자 했습니다. 인터넷 시대에 최첨단 세대들이 웹브라우저로 간편하게 아희를 접하고 이로움을 널리 퍼ㄸ... 아무튼 웹 환경이 아무래도 접근성이 좋고, 여차하면 node.js와도 호환되도록 작성해 쉘로도 실행할 수 있도록 구상했습니다.


앞서 말한 공식 자바스크립트 처리기는 (BOJ의 텍스트 입력과는 다르게) 입력 명령을 만날 때마다 prompt를 띄우는 식으로 입력을 받으며, 디버그 시 유용한 "한 단계만" 실행은 '실행 횟수'로 쓰이는 변수 k정수 입력에서도 사용하여 여러 단계를 건너뛰는 문제점이 있습니다. 그리고 자바스크립트 고유의 유니코드 표현법(Surrogate pair)을 잘 처리하지 못해 문자열 입력 테스트 스니펫에서 이모티콘 입력을 잘 처리하지 못하는 모습을 보였습니다. Aheui.js는 그러한 문제점을 개선하고 가능한 많은 부분을 모듈화하여 유지보수성을 높였으며, 명령어 실행에 사용하는 Aheui 객체에 run(), step(), stop(), reset() 등의 제어 메소드와 on(), once(), off()로 상태('start', 'step', 'stop', 'end'), 동작('reset'), 출력('character', 'integer')과 같은 이벤트 콜백을 두어 쉽고 풍부하게 기능을 활용할 수 있는 기반을 제공하고자 했습니다. 아직 개선할 점은 많지만 우선 깃허브에 코드를 공개해놓아 코드를 보실 수 있습니다.


한번 확인해보세요!

View on GitHub



2018.01.09 추가

caheui의 큐 문제를 수정한 풀리퀘스트를 제출했습니다! 언제쯤 적용이 되려나...

'진행중인 프로젝트' 카테고리의 다른 글

아희 인터프리터 Aheui.js  (0) 2017.09.12
블로그 이미지

예비컴공돌이

각종 프로젝트 진행중! 생각날때마다 블로그 업데이트합니다.