假设我想用ParseKit解析子字符串,比如单词的前缀。举个例子,我想要解析“预览”和“评论”。所以我的语法可能是:
@start = prefix 'view';
prefix = 'pre' | 're';
现在,在不修改ParseKit的情况下,我可以匹配“预览”和“重新查看”,但不能匹配“预览”或“查看”。从文档来看,我想我需要定制PKTokeinzer的word状态,因为它正在寻找空格来终止'Word‘标记。我该如何解决这个问题呢?
发布于 2013-03-03 08:00:45
这里是ParseKit的开发者。
我不确定我是否完全理解了这个问题,但我认为这听起来有点误导。
如果您正在寻找匹配子标记或字符的方法,则正则表达式可能比ParseKit更适合您的需要。
ParseKit语法与ParseKit记号赋予器(PKTokenizer
类)生成的记号相匹配。而不是单个字符。
这并不是说PKTokenizer
不能从preview
的输入中生成pre
和view
标记。但它需要对代码进行定制,我认为这是不明智和不必要的复杂。我认为这不是一个好主意。
如果你想使用ParseKit (而不是正则表达式),你可以简单地在你的汇编回调中进行子解析(而不是在语法中)。
所以在语法中:
@start = either;
either = 'preview' | 'review';
在ObjC中:
- (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
结尾的单词
@start = anyView;
anyView = /\b\w*?view\b/;
希望这能有所帮助。
https://stackoverflow.com/questions/15180300
复制相似问题