[ 참조 : http://blog.naver.com/newsdu/80117219575 ]
[ 참조 : Head First Design Pattern ]

1. 해석자 패턴 => 언어를 일정한 해석 방법을 통해서 해석한 뒤, 그에 맞는 동작을 하게끔 구현
                         컴파일러 문법 등을 생각 하면 쉽다.

2. 간단한 이해

   우리가 어떤 수동적인 반복 작업을 할 때 매크로라는 기법을 쓴다. 근데 사용자는 C언어, WinAPI 언어를 잘 모른다.
   근데 만약 화면의 특정 좌표로 0.00001초만에 이동하여 클릭하는 행위를 하고 싶다고 가정한다.

   SendMessage(hGameWnd, WM_LBUTTONDOWN, MK_LBUTTON, xPos | (yPos <<16));

   이걸 일일이 사용자가 방법을 익혀서 사용한다는 것은 참 부담스럽다.

   클릭하기 x, y
   
   이런식으로 간단하게 입력하여 사용하기를 원한다.
   프로그래머는 저렇게 입력이 들어오면 저런 기능이 수행되게 하는 것은 쉽다.
   입력된 문자들을 공백토큰 기준으로 나누고, 토큰1이 '클릭하기'이면 2,3번을 옵션으로 위의 C 문장을
   구성하면 된다. 근데 문제는 이렇게 단일 기능만 있다면 상관 없지만 '클릭하기'를 만든 김에 사용자
   편의를 위하여 비슷한 명령어와 옵션을 100개 만든다고 한다. 그럼 그것을 일일이 하드코딩하는 것
   보다 더 넓은 시야에서 문장을 바라볼 필요가 있다.

   [명령어] [인수],[인수]

   형태가 이렇다. 만약 100개중 50개가 저런 형태라면 명령어 클래스와 인수 클래스를 만들어 명령어
   클래스는 명령어에 대해서만 해석하고, 인수 클래스는 어떠한 종류의 인수인지만 해석하여
   저장해둔다면 그 두 클래스 모두 표현 클래스를 부모에 두고 복합체 패턴으로 결합하여 명령을
   수행만 하면 끝이다. 만약 +,- 이런 [수식]이 필요해졌다고 하면 수식 클래스에 표현 클래스를 상속하여 작성하면 됨.
   이렇게 토큰을 종류별로 나눠 클래스화 하여 각 종류마다 분리하여 해석한 후 명령을 수행 하는 것이 해석자 패턴 컨셉.



   3. 인터 프리터의 장점
   
        - 각 문법 규칙을 클래스로 표현하기 때문에 언어를 쉽게 구현할 수 있다.
        - 문법이 클래스에 의해 표현되기 때문에 언어를 쉽게 변경하거나 확장할 수 있다.
        - 클래스 구조에 메소드만 추가하면 프로그램을 해석하는 기본 기능외에 예쁘게 출력하는 기능이라던가,
           더 나은 프로그램 확인 기능 같은 새로운 기능을 추가 할 수 있다.

    4. 인터 프리터의 활용법 및 단점
  
        - 간단한 언어를 구현할 때 인터프리터 패턴이 유용하게 쓰인다.
        - 문법이 간단하고 효율보다는 단순하게 만드는 것이 더 중요한 경우 유용하게 쓰인다.
        - 스크립트 언어 및 프로그래밍 언어에서 모두 쓸 수 있다.
        - 문법 규칙의 개수가 많아지면 아주 복잡해진다는 단점이 있다, 그런 경우, 파서/컴파일러 생성기를를 쓰는 것이 낫다.
        - 복잡한 스크립트 구문까지 지원하게 만들려면 그에 드는 비용이 프로그램 전체에 드는 비용과 비슷할 정도로 되어버림
Posted by dlucky