単純なParsekit文法が与えられます。私が持っている場合はParsekitオートコンプリート
@start = sentence+;
sentence = 'beer' container;
container = 'bottle' | 'cup';
部分構文beer
はそれがParsekitが文に補完候補を返すために取得することはできますか?
単純なParsekit文法が与えられます。私が持っている場合はParsekitオートコンプリート
@start = sentence+;
sentence = 'beer' container;
container = 'bottle' | 'cup';
部分構文beer
はそれがParsekitが文に補完候補を返すために取得することはできますか?
ParseKitの開発者はこちらです。
残念ながら、自身でこのデータを返しますParseKitには「自由」のメカニズムはありません。
しかし、これは正確に設計/よく適しているタスクParseKitの一種です。しかし、自分でコードを書く必要があります。このような何かが働くだろう:
まず、'beer'
の名前付きの生産を含めるために、わずかに文法を変更します。これは、それが簡単にコールバックを実装するようになります:
@start = sentence+;
sentence = beer container;
beer = 'beer';
container = 'bottle' | 'cup';
その後beer
生産のためのアセンブラコールバックを実装します。これはあなたに物事のこれらのタイプはParseKitで実現することができるかのアイデアを与える必要があり
PKParser *p = [PKParserFactory parserFromGrammar:g assembler:a];
PKAssembly *input = [PKAssembly assemblyWithString:@"beer"]; // get this string from the user in reality
PKAssembly *result = [p bestMatchFor:input];
NSArray *completions = result.target;
:あなたの「クライアント」または「ドライバのコードは次のようになります
- (void)parser:(PKParser *)p didMatchBeer:(PKAssembly *)a {
// here you could find some clever way to look up the completions for 'beer' prefix
// or you can hardcode the completions yourself
NSArray *completions = [NSArray arrayWithObjects:@"bottle", @"cup", nil];
// store the completions as the current assembly's target
a.target = completions;
}
。このような小さな例では、この解決法は過剰なもののように見えるかもしれません(そしておそらくそうです)。しかし実際の大きな例では、これはオートコンプリートのための非常に強力で洗練されたソリューションになります。