你好,歡迎來到IOS教程網

 Ios教程網 >> IOS編程開發 >> IOS開發綜合 >> iOS App設計形式開辟中對interpreter說明器形式的應用

iOS App設計形式開辟中對interpreter說明器形式的應用

編輯:IOS開發綜合

說明器形式

明天和年夜家分享的形式是說明器形式。

起首引見一下說明器形式合適處理哪類成績。

其實,說明器形式須要處理的成績是,假如一種特定類型的成績產生的頻率足夠高,那末能夠就值得將該成績的各個實例表述為一個簡略說話的句子。如許便可以構建一個說明器,該說明器經由過程說明這些句子來處理該成績。

就運用的例子來講,例如正則表達式就是它的一種詳細運用,說明器可認為正則表現界說一個文法,若何表現一個特定的正則表達式,和若何說明這個正則表達式。
說明器形式的類構造圖以下。

201646103109779.jpg (500×333)

圖中的構造也比擬好懂得,說明器辦法籠統出一個同一的接口(AbstractExpression),於須要說明的內容(Context)做懂得耦,挪用時為詳細的說明器辦法傳入內容(Context)從而完成響應的說明功效。

那末說明器形式有甚麼利益呢?

其適用懂得釋器形式,就意味著可以很輕易地轉變和擴大文法,由於該形式應用類來表現文律例則,你可使用繼續來轉變或擴大該文法。也比擬輕易完成文法,由於界說籠統語法樹中各個節點的類的完成年夜體相似,這些類都易於直接編寫。

那末除之條件到的正則表達式這類運用以外,其適用處照樣很廣的,固然了重要照樣對文本的說明。

除利益,其實說明器形式照樣有缺乏的,說明器形式為文法中的每條規矩至多界說了一個類,是以包括很多規矩的文法能夠難以治理和保護。建議當文法異常龐雜時,應用其他的技巧如語法剖析法式或編譯器生成器來處置。

說了很多,上面用代碼簡略展現一下說明器形式的詳細完成。

完成

留意:本文一切代碼均在ARC情況下編譯經由過程。

Context類接口

#import <Foundation/Foundation.h>

@interface Context :NSObject
@property NSString *Input;
@property NSString *Output;
@end

Context類完成

#import "Context.h"

@implementation Context
@synthesize Input,Output;
@end

AbstractExpression類接口

#import <Foundation/Foundation.h>

@class Context;
@interface AbstractExpression:NSObject
-(void)Interpret:(Context*)context;
@end

AbstractExpression類完成

#import "AbstractExpression.h"

@implementation AbstractExpression
-(void)Interpret:(Context *)context{
    return;
}
@end

TerminalExpression類接口

#import "AbstractExpression.h"

@interface TerminalExpression :AbstractExpression
@end

TerminalExpression類完成

#import "TerminalExpression.h"

@implementation TerminalExpression
-(void)Interpret:(Context *)context{
    NSLog(@"終端說明器");
}
@end

NonterminalExpression類接口

#import "AbstractExpression.h"

@interface NonterminalExpression:AbstractExpression
@end

NonterminalExpression類完成

#import "NonterminalExpression.h"

@implementation NonterminalExpression
-(void)Interpret:(Context *)context{
    NSLog(@"非終端說明器");
}
@end

Main辦法挪用

#import <Foundation/Foundation.h>
#import "Context.h"
#import "TerminalExpression.h"
#import "NonterminalExpression.h"

int main (int argc,const char * argv[])
{
    @autoreleasepool{
        Context *context = [[Contextalloc]init];
        NSMutableArray*list = [[NSMutableArrayalloc]init];
        [list addObject:[[TerminalExpressionalloc]init]];
        [list addObject:[[NonterminalExpressionalloc]init]];
        [list addObject:[[TerminalExpressionalloc]init]];
        [list addObject:[[TerminalExpressionalloc]init]];
        for (AbstractExpression *exp in list) {
            [exp Interpret:context];
        }
    }
    return 0;
}

好啦,下面這些代碼只是做了簡略的展現罷了。症結照樣要靈巧運用啊。

總結
說明器形式屬於類的行動型形式,描寫了若何為說話界說一個文法,若何在該說話中表現一個句子,和若何說明這些句子,這裡的“說話”是應用劃定格局和語法的代碼。說明器形式重要用在編譯器中,在運用體系開辟中很罕用到。
長處:
1)輕易修正並擴大語法。
2)更輕易完成語法。
應用場景:
1)說話的語法比擬簡略。
2)效力其實不是最重要的成績。

【iOS App設計形式開辟中對interpreter說明器形式的應用】的相關資料介紹到這裡,希望對您有所幫助! 提示:不會對讀者因本文所帶來的任何損失負責。如果您支持就請把本站添加至收藏夾哦!

  1. 上一頁:
  2. 下一頁:
蘋果刷機越獄教程| IOS教程問題解答| IOS技巧綜合| IOS7技巧| IOS8教程
Copyright © Ios教程網 All Rights Reserved