Forth

Forth

보통

지침

아주 단순한 Forth의 부분 집합을 위한 평가기를 구현해 보세요.

Forth는 스택 기반 프로그래밍 언어예요. Forth의 작은 부분 집합을 위한 아주 기본적인 평가기를 구현해 보세요.

평가기는 다음 단어들을 지원해야 해요:

  • +, -, *, / (정수 연산)
  • DUP, DROP, SWAP, OVER (스택 조작)

평가기는 또한 관례적인 문법인 : word-name definition ;을 사용해 새로운 단어를 정의하는 것도 지원해야 해요.

간단하게 유지하기 위해 지원해야 하는 유일한 데이터 타입은 최소 16비트 크기의 부호 있는 정수예요.

문법에는 다음 규칙을 사용하세요: 숫자는 하나 이상의 (ASCII) 숫자로 이루어진 연속이고, 단어는 숫자가 아닌 하나 이상의 문자, 숫자, 기호 또는 구두점으로 이루어진 연속이에요. (Forth는 아마 조금 다른 규칙을 사용하지만, 이 정도면 충분히 비슷해요.)

단어는 대소문자를 구분하지 않아요.

예외 사용자 정의와 발생시키기

때로는 코드에서 예외를 사용자 정의하고 raise해야 할 필요가 있어요. 이렇게 할 때는 오류의 원인이 무엇인지 알려 주는 의미 있는 오류 메시지를 항상 포함해야 해요. 그러면 코드를 더 읽기 쉽게 만들고 디버깅에 큰 도움이 돼요.

사용자 정의 예외는 새로운 예외 클래스를 통해 만들 수 있어요(자세한 내용은 classes를 참고해요). 이런 클래스는 보통 Exception의 하위 클래스예요.

오류 원인이 특정 예외 타입에서 파생된 것임을 알고 있는 상황이라면, Exception 클래스 아래에 있는 built in error types 중 하나를 상속받도록 선택할 수 있어요. 오류를 발생시킬 때도 여전히 의미 있는 메시지를 포함해야 해요.

이 연습 문제에서는 스택이 충분히 채워지지 않았을 때 발생시키거나 "던지는" _사용자 정의 예외_를 만들어야 해요. 적절한 예외를 사용자 정의하고, 그 예외를 raise하고, 적절한 오류 메시지를 포함해야만 테스트를 통과할 수 있어요.

# subclassing the Exception to create a StackUnderflowError
class StackUnderflowError(Exception):
    """Exception raised when Stack is not full.
       message: explanation of the error.
    """
    def __init__(self, message):
        self.message = message

        
# raising a StackUnderflowError
raise StackUnderflowError("Insufficient number of items in stack")

또한 이 연습 문제에서는 오류 메시지와 함께 몇 가지 built-in exceptions를 발생시켜야 해요. 메시지와 함께 built-in exception을 발생시키려면, 메시지를 exception 타입의 인자로 작성해요:

# an example when division by zero is attempted.
raise ZeroDivisionError("divide by zero")

#an example when the operation is undefined.
raise ValueError("undefined operation")
GitHub에서 편집 링크가 새 창이나 탭에서 열려요
Python Exercism

Forth 문제를 시작해 볼 준비가 됐나요?

Exercism에 가입하고 Python 트랙을 개념 17개연습 문제 146개, 그리고 실제 사람의 멘토링과 함께 배우고 익혀 보세요. 모두 무료예요.