Code Monkey home page Code Monkey logo

devguru-lang's People

devguru-lang's Issues

테스트 스크립트 작성

예제 코드를 입력 후 의도된 대로 Machine의 상태가 결정되는지 확인하는 jest 스크립트 템플릿 작성

`eru...`에서 `egu...`를 찾을 때까지 순회하는 과정에서 다른 CKPT가 오염되는 문제 해결

eru...에 해당하는 egu...가 뒤에 있는 경우 해당 명령어를 찾을 때까지 만나는 모든 egu...를 실행합니다.
이 때 도중에 만나는 CKPT들이 오염되는 문제가 발생합니다.

이로 인해 두 수를 비교하는 코드가 b == 0일 때 무한루프에 빠집니다.

이 문제를 해결하기 위해, SetCheckpoint에 undo 메소드를 추가하고, JN0에서 CKPT가 변하지 않은 경우 해당 메소드를 불러오도록 수정합니다.

수정 결과는 issues/12 브랜치에 반영합니다.

화면 입출력 구현

  • stdin으로부터 acc로 값을 입력받는 명령어 (reuuu)
  • acc의 값을 ascii 코드로 stdout에 출력하는 명령어 (rguuu)

테스트 케이스

  • stdin로부터 값을 받아 그대로 stdout에 문자로 출력

언어 문법 개선: if statement로 사용한 checkpoint는 1회용으로 사용

  • eru... 뒤에 egu...가 올 경우, jump한 이후 egu...가 가리키는 Checkpoint의 값을 무효화(0으로 초기화)
  • 이렇게 함으로써 if statement로 사용하더라도 checkpoint를 재사용할 수 있음
  • 특수사례로서, eru {1} egu {2} eru하여 {2}를 반복하고자 하는 경우, eru {1} egu egu {2} eru 함으로써 해결할 수 있음

테스트

  • #11 의 "사용자가 어떤 값을 입력했든지 Acc를 0으로 만들기" 스크립트에서 사용하는 checkpoint 수를 최대한 절약

조건부 분기/반복문 구현

  • 조건부 분기문
  • 조건부 반복문
명령어 문법 기능 예시
egu... egu[u[u[...]]] u의 갯수에 해당하는 Checkpoint를 현재 PC로 지정한다 eguuu -> CKPT #3 = PC
eru... eru[u[u[...]]] Acc != 0일 때, u의 갯수에 해당하는 Checkpoint의 값으로 Jump한다 eruuu -> PC = CKPT #3

테스트 항목

  • 사용자가 입력한 값이 0인지 여부에 따라 메모리에 다른 값을 입력
  • 사용자가 어떤 양수 값을 입력했든지, 메모리에 접근하지 않고, Acc를 0으로 만들기
  • 사용자가 어떤 값을 입력했든지 Acc를 0으로 만들기

각종 객체 정의

AbstractExpression 인터페이스 클래스

  • 요구사항
    • 일련의 연산을 실행하는 메소드

TerminalExpression 클래스

  • Terminal Expression
  • 요구사항
    • 자신이 소유한 값을 갖는 private property
    • 그 값을 읽는 메소드
    • 그 값을 변경하는 메소드
    • Memory, Register, Checkpoint 클래스를 이 클래스의 자식 클래스로 정의

Operator 클래스

  • Nonterminal Expression
  • 요구사항
    • TerminalExpression을 이용하여 일련의 연산을 수행하는 메소드

Machine 클래스

  • 인터프리터의 Context를 담당
  • 요구사항
    • Operator 배열
    • Memory 배열
    • Register 객체: Accumulator, Pointer, Program Counter
    • Checkpoint 배열
    • 다음 Operator 객체를 받아오는 메소드
    • Memory, Register, Checkpoint를 받아오거나 저장하는 메소드

Interpreter 클래스

  • Parser
  • 요구사항
    • 입력된 명령줄을 토큰화하고 Machine 객체에 반영하는 메소드
    • 실제 동작을 수행하는 메소드: Machine 객체로부터 다음 Operator를 받아온 뒤 실행

Acc 조작 구현

  • v... 명령어 (Acc++)
  • d... 명령어 (Acc--)

테스트 스크립트

  • 1. 임의 개수의 v에 대해 그 개수 만큼 Acc가 증가하였는가
  • 2. 임의 개수의 d에 대해 그 개수 만큼 Acc가 감소하였는가
  • 3. 임의 개수의 v와 d에 대해 Acc = v의 개수 - d의 개수인가

지정 메모리 저장 및 로드 구현

  • 저장 명령어: gru...
  • 로드 명령어: geu...

테스트 케이스

  • Acc의 값을 임의로 조작 후 임의의 메모리에 저장
  • Acc의 값을 추가로 조작
  • 해당 메모리를 다시 로드했을 때 원래 값으로 복귀되는지 확인

index.ts에 verbosity 옵션 추가

-v 또는 --verbose 옵션을 지정한 경우에만 info/debug output이 나오도록 변경합니다.

체크리스트

  • 해당 옵션을 지정하지 않으면 info/debug output이 표시되지 않음
  • 지정하면 표시됨

임의 메모리 접근 및 조작 구현

명령어 문법 기능 예시
reu reu Ptr의 값을 Acc에 로드한다 reu -> Acc = Ptr
reuu reuu Ptr의 값에 해당하는 Memory의 값을 Acc에 로드한다 reuu -> Acc = M[Ptr]
rgu rgu Acc의 값을 Ptr에 저장한다 rgu -> Ptr = Acc
rguu rguu Ptr의 값에 해당하는 MemoryAcc의 값을 저장한다 rguu -> M[Ptr] = Acc

체크리스트

  • Ptr의 값이 메모리 범위 내에서 변경
    • Acc < 1일 때, Ptr = 1
    • 1 <= Acc <= 255일 때, Ptr = Acc
    • Acc > 255일 때, Ptr = 255
  • Ptr로 선택된 메모리에 값을 저장
  • Ptr로 선택된 메모리로부터 값을 로드

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.