아주 단순한 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")
Exercism에 가입하고 Python 트랙을 개념 17개연습 문제 146개, 그리고 실제 사람의 멘토링과 함께 배우고 익혀 보세요. 모두 무료예요.