首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在ParseKit中自定义PKTokenizer来标记子字符串?

如何在ParseKit中自定义PKTokenizer来标记子字符串?
EN

Stack Overflow用户
提问于 2013-03-03 06:42:22
回答 1查看 140关注 0票数 1

假设我想用ParseKit解析子字符串,比如单词的前缀。举个例子,我想要解析“预览”和“评论”。所以我的语法可能是:

代码语言:javascript
运行
复制
@start  = prefix 'view';
prefix = 'pre' | 're';

现在,在不修改ParseKit的情况下,我可以匹配“预览”和“重新查看”,但不能匹配“预览”或“查看”。从文档来看,我想我需要定制PKTokeinzer的word状态,因为它正在寻找空格来终止'Word‘标记。我该如何解决这个问题呢?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-03-03 08:00:45

这里是ParseKit的开发者。

我不确定我是否完全理解了这个问题,但我认为这听起来有点误导。

如果您正在寻找匹配子标记或字符的方法,则正则表达式可能比ParseKit更适合您的需要。

ParseKit语法与ParseKit记号赋予器(PKTokenizer类)生成的记号相匹配。而不是单个字符。

这并不是说PKTokenizer不能从preview的输入中生成preview标记。但它需要对代码进行定制,我认为这是不明智和不必要的复杂。我认为这不是一个好主意。

如果你想使用ParseKit (而不是正则表达式),你可以简单地在你的汇编回调中进行子解析(而不是在语法中)。

所以在语法中:

代码语言:javascript
运行
复制
@start = either;
either = 'preview' | 'review';

在ObjC中:

代码语言:javascript
运行
复制
- (void)parser:(PKParser *)p didMatchEither:(PKAssembly *)a {
    PKToken *tok = [a pop];
    NSString *str = tok.stringValue;

    if ([str hasPrefix:@"pre"]) {
        ... // handle 'preview'
    } else {
        ... // handle 'review'
    }
}

还要记住,ParseKit语法支持通过RegEx匹配标记。所以如果你想匹配所有以view结尾的单词

代码语言:javascript
运行
复制
@start = anyView;
anyView = /\b\w*?view\b/;

希望这能有所帮助。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15180300

复制
相关文章

相似问题

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