Skip to content
This repository was archived by the owner on Oct 10, 2023. It is now read-only.

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
    • 엄랭, 몰?랭

기술적 검토

image

  • 전체적으로 인터프리터 패턴을 만족
    • 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를 호출하여 실행함
    1. stdin이나 file로부터 스크립트를 입력받음
    2. 입력된 스크립트를 tokenize함
    3. token별로 명령어 Machine의 명령어 객체 배열에 저장함
  • 개발 언어는 ts
  • 테스트는 jest로 수행
    • 테스트는 예제 코드를 입력 후 의도된 대로 Machine의 상태가 결정되는지 확인함으로써 결정
  • 참고자료: https://johngrib.github.io/wiki/pattern/interpreter/

스프린트별 작업 내용

1차 스프린트

  • 기간: 06/05 ~ 06/25

작업내용 요약

  • 스크립트 입력
  • 명령어 단위별 tokenize
  • 테스트 스크립트 작성
  • Acc 조작 구현
  • 메모리 저장 및 로드 구현
  • 화면 입출력 구현
  • 각종 객체 정의
  • 언어 완성

세부 내용

wiki/1차 스프린트#세부 내용 참조

2차 스프린트

  • 기간: 06/26 ~ 07/16

작업내용 요약

  • PTR 이용 메모리 임의 접근 구현
  • 조건부 분기/반복문 구현
  • 언어 설계 정리

세부 내용

wiki/2차 스프린트#세부 내용 참조

3차 스프린트: 예제 코드 작성

  • 기간: 07/17 ~ 08/16

작업내용 요약

  • 샘플 코드 작성
  • 인터프리터 사용법 작성
  • 조건부 분기/반복 관련 언어 문법 개선
  • verbose log 관련 처리

세부 내용

wiki/3차 스프린트#세부 내용 참조

총평

  • 스터디에 뒤늦게 끼어들면서, 해당 스터디와 관련된 내용을 많이 시도해보지는 못하고, 단순히 인터프리터 패턴에 최대한 충실한 것에 그친 부분은 아쉬움
  • 명령어 단위별로 토큰화하는 부분을 구현할 때에는 객체지향적이지 않은 방식을 사용한 점이 아쉬움
  • 조건부 분기 및 반복문을 구현할 때에는 egu... 명령어와 eru... 명령어가 상당히 결합되어 있고, eru... 명령어 구현 시 열화된 형태의 인터프리터가 포함되어 있는 점은 아쉬움
  • 그러나 패턴 설계와 그 설계에 맞춰서 개발하는 경험을 할 수 있어서 좋았음
  • 언어를 직접 자작해보는 경험은 새로웠으며, 이후 다양한 언어를 접하거나 심지어 만드는 경우에도 이번 프로젝트에서의 경험이 많은 도움이 될 것으로 기대함
  • 그 외에 애자일에 가장 입각한 프로젝트 운영을 경험할 수 있는, 현재까지 참여한 프로젝트들 중에서 가장 애자일스러웠던 프로젝트였음
Clone this wiki locally