23 디자인 모드 의 해석 기 모드 (Interpreter)

디 렉 터 리 되 돌리 기
개술
Interpreter 는 행동 형 모드 의 하나 로 언어 를 정 하고 문법 을 정의 하 며 해석 기 를 정의 합 니 다. 이 해석 기 는 이 표현 을 사용 하여 언어 중의 문장 을 설명 합 니 다.
2 적용 성
하나의 언어 가 실행 을 설명 하고 이 언어의 문장 을 추상 적 인 문법 트 리 로 표시 할 때 해석 기 모드 를 사용 할 수 있 습 니 다.다음 과 같은 상황 이 존재 할 때 이 모델 의 효과 가 가장 좋다.
  • 이 문법 은 복잡 한 문법 에 대해 간단 하고 문법 의 유형 차원 이 커 져 관리 할 수 없다.
  • 효율 은 관건 적 인 문제 가 아니 라 가장 효율 적 인 해석 기 는 보통 문법 분석 나 무 를 직접 해석 하여 이 루어 지 는 것 이 아니 라 먼저 다른 형식 으로 전환 하 는 것 이다.

  • 3 참가 자
  • AbstractExpression (추상 적 표현 식): 추상 적 인 해석 작업 을 설명 합 니 다. 이 인 터 페 이 스 는 추상 적 인 문법 트 리 의 모든 노드 에 공 유 됩 니 다.
  • TerminalExpression (종결 부 표현 식): 문법 에서 의 종결 부 와 연 결 된 해석 작업 을 실현 합 니 다.한 문장의 모든 종결 부 호 는 이러한 인 스 턴 스 가 필요 하 다.
  • Nonterminal Expression (비 종결 부 표현 식): 문법 에 있 는 비 종결 부 에 대한 해석 (Interpret) 작업 을 수행 합 니 다.
  • Context (상하 문): 해석 기 이외 의 전역 정 보 를 포함 합 니 다.
  • Client (클 라 이언 트): 이 문법 이 정의 하 는 언어 에서 특정한 문장 을 나타 내 는 추상 문법 트 리 를 구축 (또는 지정) 합 니 다.이 추상 문법 트 리 는 Nonterminal Expression 과 Terminal Expression 의 인 스 턴 스 로 조립 되 어 있다.호출 해석 조작.

  • 분류 도
    5 코드 구현
    //
    // YJInterpreter.swift
    // DesignPattern
    //
    // CSDN:http://blog.csdn.net/y550918116j
    // GitHub:https://github.com/937447974/Blog
    //
    // Created by yangjun on 15/11/27.
    // Copyright © 2015    . All rights reserved.
    //
    
    import Cocoa
    
    ///
    private protocol ExpressionProtocol {
    
        func interpret(context: Context)
    
    }
    
    private class AdvanceExpression: ExpressionProtocol {
    
        func interpret(context: Context){
            print("\(context.content)        !")
        }
    }
    
    private class SimpleExpression: ExpressionProtocol {
    
        func interpret(context: Context) {
            print("\(context.content)        !")
        }
    
    }
    
    // MARK: -
    
    /// Context(   )              
    private class Context {
    
        ///     
        var content:String = ""
        ///      
        var list: [ExpressionProtocol] = []
    
        // MARK:   
        func add(expression: ExpressionProtocol) {
            self.list.append(expression)
        }
    
    }
    
    // MARK: -
    
    ///      
    class YJInterpreter: YJTestProtocol {
    
        func test() {
            let ctx = Context()
            ctx.content = "Context"
            ctx.add(AdvanceExpression())
            ctx.add(SimpleExpression())
            for ex in ctx.list {
                ex.interpret(ctx)
            }
        }
    
    }

     
    기타
    소스 코드
    Framework
    문서 수정 기록
    시간.
    묘사 하 다.
    2015-11-27
    박문 완성
    판권 소유
    CSDN:http://blog.csdn.net/y550918116j
    GitHub:https://github.com/937447974/Blog

    좋은 웹페이지 즐겨찾기