首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无法运行简单的ParseKit示例

无法运行简单的ParseKit示例
EN

Stack Overflow用户
提问于 2011-08-17 08:03:49
回答 1查看 559关注 0票数 3

我刚刚发现了ParseKit,但在一个简单的示例中似乎无法让它工作。

代码语言:javascript
复制
NSString *test = @"FOO:BAR";

    NSString *grammar = ...//get grammar txt file and read it into a string

    PKParser *parser = nil;
    parser = [[PKParserFactory factory] parserFromGrammar:grammar assembler:self];

    [parser parse:test];
}

- (void)didMatchFoo:(PKAssembly *)a
{
    NSLog(@"FOO");
}

- (void)didMatchBar:(PKAssembly *)a
{
    NSLog(@"BAR");
}

我的语法文件看起来像这样:

代码语言:javascript
复制
@start = foo;
foo = 'FOO:' bar;
bar = 'BAR';

但是这些方法不会触发。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-08-17 08:41:59

这里是ParseKit的开发者。上面的例子将不起作用。默认情况下,令牌器将对以下内容进行标记化:

代码语言:javascript
复制
FOO:BAR

作为三个令牌:

代码语言:javascript
复制
Word (FOO)
Symbol (:)
Word (BAR)

问题是你的语法需要一个像'FOO:‘这样的单词,但是冒号默认是符号字符,而不是单词字符。如果您希望冒号(:)被接受为有效的内部“单词”字符,则必须自定义Tokenizer以使其接受这一点。我有点怀疑你是不是真的想这样。如果需要,请阅读此处的文档以了解如何自定义令牌化器:http://parsekit.com/tokenization.html

我认为一个更好的“玩具”语法可能是这样的:

代码语言:javascript
复制
@start = pair;
pair = foo colon bar;
foo = 'FOO';
colon = ':';
bar = 'BAR';

在语法中使用声明的方式有很大的灵活性。等价的语法是:

代码语言:javascript
复制
@start = foo ':' bar;
foo = 'FOO';
bar = 'BAR';
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7086586

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档