SQL과 같은 계층적 언어를 해석하기 위해 계층 구조를 표현할 수 있습니다.
여러 객체를 조합해 문법을 정의합니다. 각각의 객체는 특정한 문법을 처리할 수 있도록 구현됩니다.
이들이 모여 컴포지트 패턴과 같은 복합적인 트리 구조로 이루어지게 됩니다. 이는 하위 객체가 처리한 결과를 조합하여 새로운 결과를 만들어내게 해줍니다.
사용자가 원하는 다양한 명령을 쉽게 표현할 수 있게 구문 약속을 해야하며, 해석자에서는 이와 같이 약속된 구문이 입력 인자로 전달되었을 때 이를 해석할 수 있어야 합니다.
위와 같은 경우에 사용한다면 문법의 수정이나 새로운 문법을 추가하기 용이해지지만 문법이 복잡해진다면 문법을 정의하는 객체 구조가 복잡해져 관리가 어려워집니다.
간단한 문법에 한해 사용하길 권장됩니다
다이어그램으로 보니 Composite 패턴과 유사합니다.
파일을 로드하고 삭제하는 명령어를 수행하는 프로그램을 인터프리터 패턴을 이용해 만들었습니다.
컴포지트 패턴을 이용해서 유연한 포함관계를 하려 하였으나 [명령어 - 파일리스트] 구조가 더 깔끔할 것 같아서 ActionExpression 내에 FileExpression만 포함되도록 하였습니다.
예시를 간단한 이미지로 보다면 다음과 같습니다.
여러 형태로 Context를 생성했습니다.
세 번 째의 경우 Action 명령어가 두 번 포함되었습니다.
실행 결과는 다음과 같습니다.
Context_01------------------------------
Action: LOAD
IMAGE: flower.jpg
VIDEO: happy.mp3
Context_02------------------------------
Action: DELETE
IMAGE: delete.jpg
VIDEO: blue.mp3
Context_03------------------------------
Action: LOAD
IMAGE: flower.jpg
Action: DELETE
IMAGE: delete.jpg
VIDEO: blue.mp3
Action이 두 번 등장해도 오류 없이 잘 작동합니다.
간단한 문장 해석에도 굉장히 긴 코드가 필요하네요. 더 복잡해 질 경우엔 작성 시간과 수행 시간 모두 오래 걸릴 것 같습니다.
구현하기 너무 복잡한 경우, 컴파일러나 파서를 쓰는게 더 효율적일 수도 있다고 합니다.
참조
감사합니다.
Text by Chaelin. Photographs by Chaelin, Unsplash.