Sviluppatore di ParseKit qui.
Sfortunatamente, in ParseKit non esiste un meccanismo "libero" che restituirà questi dati da solo.
Tuttavia, questo è esattamente il tipo di compito per cui ParseKit è progettato/adatto. Ma devi scrivere un codice da solo. Qualcosa del genere funzionerebbe:
Innanzitutto, modificare leggermente la grammatica per includere una produzione denominata per 'beer'
. In questo modo sarà più facile implementare un callback:
@start = sentence+;
sentence = beer container;
beer = 'beer';
container = 'bottle' | 'cup';
quindi implementare un callback assemblatore per la beer
produzione.
- (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;
}
tuo 'cliente' o il codice di 'pilota' dovrebbe essere simile:
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;
Questo dovrebbe darvi un'idea di come questi tipi di cose possono essere implementati con Parsekit. Per un esempio così piccolo questa soluzione potrebbe sembrare un eccesso (e probabilmente lo è). Ma per un grande esempio del mondo reale questa sarebbe una soluzione molto potente ed elegante per il completamento automatico.
fonte
2012-01-19 20:30:31