0. 통역 모드 정의 :
언어가 주어지면 문법의 표현을 정의하고 표현을 사용하여 언어로 문장을 해석하는 통역사를 정의하십시오. 행동 모드에 속합니다.
인터프리터 모드는 효율성, 성능 및 유지 보수와 같은 문제를 일으킬 수 있기 때문에 실제 시스템 개발에서 거의 사용되지 않습니다.
통역사 모드의 일반 클래스 다이어그램은 그림에 나와 있습니다.
1. 통역 모드의 장점
통역사는 간단한 구문 분석 도구입니다. 가장 두드러진 장점은 확장입니다. 구문 규칙을 수정하는 것은 해당 비 터미널 표현식을 수정하는 것입니다. 구문을 확장하면 비 터미널 클래스를 추가하면됩니다.
2. 통역 모드의 단점
통역사 패턴은 클래스 확장을 유발합니다. 각 구문은 비 말단 표현을 생성해야합니다. 구문 규칙이 비교적 복잡한 경우 많은 클래스 파일이 생성 될 수있어 유지 관리에 많은 어려움이 있습니다.
통역사 패턴은 재귀적인 호출 방법을 채택합니다. 각 비 말단 표현식은 그 자체와 관련된 표현에만 관심이 있습니다. 각 표현식은 최종 결과를 알아야하며 레이어별로 코팅되지 않은 계층이어야합니다. 프로세스 지향 언어이든 객체 지향 언어이든, 재귀는 필요한 조건에서 사용되므로 매우 복잡한 디버깅으로 이어집니다. 구문 오류 문제를 해결하려면 가장 작은 구문 단위가 될 때까지 하나씩 디버그해야합니까?
효율성 문제 : 통역 모드는 많은 루프와 재귀를 사용하며 효율성은 특히 복잡하고 긴 구문을 구문 분석하는 데 사용될 때 무시할 수없는 문제입니다. 효율성은 견딜 수 없습니다.
3. 통역 모드의 시나리오를 사용하십시오
통역사 모드와 함께 반복적 인 문제를 사용할 수 있습니다. 예를 들어, 여러 응용 프로그램 서버는 매일 많은 수의 로그를 생성하며 로그 파일을 분석하고 처리해야합니다. 각 서버의 로그 형식이 다르므로 데이터 요소는 동일합니다. 통역사에 따르면 터미네이터 표현식은 동일하지만 터미네이터가 아닌 표현을 공식화해야합니다. 이 경우 문제는 프로그램을 통해 한 번에 한 번에 해결 될 수 있습니다.
간단한 구문을 설명 해야하는 시나리오 : 왜 간단한가? 비 말단 표현을보십시오. 문법 규칙이 많을수록 복잡성이 높아지고 재귀적인 호출이 높아지고 클래스 간에는 일반적으로 복잡하지 않습니다. 여러 수업에 전화 할 때 문제를 해결하는 데 어떤 종류의 인내와 자신감이 필요한지 생각해보십시오. 따라서 통역사 모드는 일반적으로 SQL 구문 분석과 같은 비교 표준 문자 세트를 구문 분석하는 데 사용되지만이 부분은 점차 특수 도구로 대체됩니다. 일부 특수 비즈니스 환경에서는 통역사 모델도 사용됩니다. 우리가 방금 한 예는 비즈니스 환경이며 현재 모델 운영의 많은 예가 있습니다. 많은 상업 기관은 분석을 위해 많은 양의 데이터를 제공 할 수 있습니다.
4. 간단한 예
/ *** 추상 해석 작업을 선언합니다*/ public interface 통역 {public void 해석 (컨텍스트 컨텍스트); // 실제로 해석 된 데이터 객체를 정의하는 반환 된 유형이있을 수 있습니다.} public class XMLSAXINGIRPRERTER PEALLESTEMENTS 통역 {@Override public void Indust (Context Context) {System.out.println ( "XML Sax Interperter :" + 컨텍스트 .getData ()); }} public class XMLDOMINGLERPRERTER는 통역사 {@Override public void Indust (Context Context) {System.out.println ( "xml dom 통역사 :" + context.getData ()); }} / *** 통역사 외부에 일부 정보가 포함되어 있습니다* / public class 컨텍스트 {private String data; 공개 문자열 getData () {return data; } public void setData (문자열 데이터) {this.data = data; }} public class test {public static void main (String [] args) {context context = new Context (); Context.SetData ( "XML 데이터의 조각"); 새로운 XMLSAXINGIRPRERTER (). 해석 (컨텍스트); New XMLDOMINGLERPRERTER (). 해석 (컨텍스트); }}5. 통역 모드에 대한 메모
중요한 모듈에서 통역 모드를 사용하지 마십시오. 그렇지 않으면 유지 보수가 큰 문제가됩니다. 이 프로젝트에서는 Shell, Jruby 및 Groovy와 같은 스크립트 언어를 사용하여 통역 모드를 대체하여 Java 컴파일 된 언어의 단점을 보충 할 수 있습니다. 우리는 은행의 분석 프로젝트에서 계산 처리를 위해 Jruby를 사용하여 통역 모드에서 4 자 운영을 피하고 효율성과 성능의 모든 측면에서 잘 수행합니다.