This repository was archived by the owner on Oct 10, 2023. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 0
Final Report.md
Quirax Lee edited this page Aug 15, 2023
·
5 revisions
주제: 난해한 프로그래밍 언어(Esolang, Esoteric programming language) "devguru" 개발
- d, e, v, g, r, u 문자의 조합 및 패턴으로 구성된 언어 정의
- 상기 언어로 작성된 스크립트에 따라 조건 분기 및 임의 위치의 메모리 변경 등을 수행하는 프로그램("인터프리터") 작성
- 참고 언어
- Brainfuck 및 그 기반 JazzLang
- JSFuck
- NULL
- 엄랭, 몰?랭

- 전체적으로 인터프리터 패턴을 만족
- Machine 객체는 Context로서, Operator 배열, Memory 배열, Register 객체(ACC, PTR, PC) 및 Checkpoint 배열을 관리함
- Interpreter는 Parser로서, Machine 객체로부터 다음 명령어 객체를 받아온 뒤 해당 객체를 실행함
- Operator는 Nonterminal Expression으로서, Memory, Register, Checkpoint 객체 등으로부터 전달된 값을 이용하여 명령을 수행
- Memory, Register, Checkpoint는 Terminal Expression으로서, Machine 객체의 getter/setter 등을 이용하여 값을 불러오거나 저장함
- 프로그램은 다음과 같은 초기화 과정을 거친 뒤, Interpreter를 호출하여 실행함
- stdin이나 file로부터 스크립트를 입력받음
- 입력된 스크립트를 tokenize함
- token별로 명령어 Machine의 명령어 객체 배열에 저장함
- 개발 언어는 ts
- 테스트는 jest로 수행
- 테스트는 예제 코드를 입력 후 의도된 대로 Machine의 상태가 결정되는지 확인함으로써 결정
- 참고자료: https://johngrib.github.io/wiki/pattern/interpreter/
- 기간: 06/05 ~ 06/25
- 스크립트 입력
- 명령어 단위별 tokenize
- 테스트 스크립트 작성
- Acc 조작 구현
- 메모리 저장 및 로드 구현
- 화면 입출력 구현
- 각종 객체 정의
- 언어 완성
- 기간: 06/26 ~ 07/16
- PTR 이용 메모리 임의 접근 구현
- 조건부 분기/반복문 구현
- 언어 설계 정리
- 기간: 07/17 ~ 08/16
- 샘플 코드 작성
- 인터프리터 사용법 작성
- 조건부 분기/반복 관련 언어 문법 개선
- verbose log 관련 처리
- 스터디에 뒤늦게 끼어들면서, 해당 스터디와 관련된 내용을 많이 시도해보지는 못하고, 단순히 인터프리터 패턴에 최대한 충실한 것에 그친 부분은 아쉬움
- 명령어 단위별로 토큰화하는 부분을 구현할 때에는 객체지향적이지 않은 방식을 사용한 점이 아쉬움
-
조건부 분기 및 반복문을 구현할 때에는
egu...명령어와eru...명령어가 상당히 결합되어 있고,eru...명령어 구현 시 열화된 형태의 인터프리터가 포함되어 있는 점은 아쉬움 - 그러나 패턴 설계와 그 설계에 맞춰서 개발하는 경험을 할 수 있어서 좋았음
- 언어를 직접 자작해보는 경험은 새로웠으며, 이후 다양한 언어를 접하거나 심지어 만드는 경우에도 이번 프로젝트에서의 경험이 많은 도움이 될 것으로 기대함
- 그 외에 애자일에 가장 입각한 프로젝트 운영을 경험할 수 있는, 현재까지 참여한 프로젝트들 중에서 가장 애자일스러웠던 프로젝트였음