Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c 如何在ParseKit中定制PKTokenizer来标记子字符串?_Objective C_Tokenize_Parsekit - Fatal编程技术网

Objective c 如何在ParseKit中定制PKTokenizer来标记子字符串?

Objective c 如何在ParseKit中定制PKTokenizer来标记子字符串?,objective-c,tokenize,parsekit,Objective C,Tokenize,Parsekit,假设我想用ParseKit解析子字符串,比如一个单词的前缀。例如,我想解析“preview”和“review”。所以我的语法可能是: @start = prefix 'view'; prefix = 'pre' | 're'; 现在,无需修改ParseKit,我就可以匹配“预查看”和“重新查看”,但不能匹配“预览”或“审阅”。通过查看文档,我想我需要定制pktokinzer的word状态,因为它正在寻找空格来终止“word”标记。我该怎么解决这个问题呢?这里的开发者 我不确定我是否完全理解这

假设我想用ParseKit解析子字符串,比如一个单词的前缀。例如,我想解析“preview”和“review”。所以我的语法可能是:

@start  = prefix 'view';
prefix = 'pre' | 're';
现在,无需修改ParseKit,我就可以匹配“预查看”和“重新查看”,但不能匹配“预览”或“审阅”。通过查看文档,我想我需要定制pktokinzer的word状态,因为它正在寻找空格来终止“word”标记。我该怎么解决这个问题呢?

这里的开发者

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

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

ParseKit语法与ParseKit标记器(
PKTokenizer
class)生成的标记相匹配。不是单个字符

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

如果您想使用ParseKit(而不是Regex),只需在汇编器回调中(而不是语法中)进行子解析即可

所以在语法上:

@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匹配标记。因此,如果要匹配以
视图
结尾的所有单词:

@start = anyView;
anyView = /\b\w*?view\b/;
希望对您有所帮助。

这里的开发者

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

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

ParseKit语法与ParseKit标记器(
PKTokenizer
class)生成的标记相匹配。不是单个字符

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

如果您想使用ParseKit(而不是Regex),只需在汇编器回调中(而不是语法中)进行子解析即可

所以在语法上:

@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匹配标记。因此,如果要匹配以
视图
结尾的所有单词:

@start = anyView;
anyView = /\b\w*?view\b/;
希望有帮助