BNFParser 是由 Mike Friesen 编写的,用于 Objective C 的 Backus-Naur Form 框架,在 Apache 2 开源许可证 下发布。
还有一个可用的 Java 版本。
BNFParser 受到 Todd Ditchendorf 编写的 ParseKit 框架的启发。
BNFParser 框架为开发者提供了 3 项基本服务,具有普遍意义
通过 BNFTokenizerFactory
和 BNFToken
类进行字符串标记化
通过 PropertyParser
进行属性键/值映射
通过语法进行文本解析
字符串标记化器将任何字符串分解为一系列字母/数字/符号,方便处理。
NSString *text = @"The cow jumped over the moon!";
BNFTokenizerFactory *factory = [[BNFTokenizerFactory alloc] init];
BNFToken *token = [factory tokens:text];
while (token) {
NSLog(@"TOKEN %@", [token stringValue]);
token = [token nextToken];
}
使用字符串标记化器解析字符串,并基于 '='
符号创建键/值映射。
NSString *text = @"sample key = sample value";
PropertyParser *propertyParser = [[PropertyParser alloc] init];
NSMutableDictionary *keyValueMap = [propertyParser parse:text];
STAssertNotNil([keyValueMap objectForKey:@"sample key"], @"expect key exists");
BNFParser 当前仅附带一个 JSON 语法,因此示例基于此。
// Create String Tokens
NSString *text = @"{ \"key\":\"value\"}";
BNFTokenizerFactory *factory = [[BNFTokenizerFactory alloc] init];
BNFToken *token = [factory tokens:text];
// Create Backus-Naur Form State Definitions
BNFStateDefinitionFactory *sdf = [[BNFStateDefinitionFactory alloc] init];
NSMutableDictionary *map = [stateDefinitionFactory json];
// Run Tokens through Parser
BNFParser *parser = [[BNFParser alloc] initWithStateDefinitions:dic];
BNFParseResult *result = [parser parse:token];
// Verify results
// verify text passes grammar:
STAssertTrue([result success], @"assume success");
// the "first" token, same as the token returned from the tokenizer factory:
STAssertNotNil([result top], @"assume not nil");
// the "first" error token, this token and any afterwards are considered to not have passed the grammar:
STAssertNil([result error], @"assume nil");
有关错误、问题和讨论,请使用 Github Issues。
我们热爱贡献!如果您想做出贡献,请通过 Github 提交拉取请求。
GoJSON - JSON 编辑器
此库是在 Apache 2 开源许可证 下分发的。