使用ParseKit Tokenization和DelimitedString

时间:2013-06-21 14:43:08

标签: objective-c macos cocoa parsekit

我正在尝试将ParseKit's Tokenization与SQL Server语法结合使用。如果您看一下以下示例:

CREATE PROCEDURE [dbo].[test]
  @MyId UNIQUEIDENTIFIER
AS
BEGIN
  -- something something
END
GO

我正在使用以下方法设置评论(和多行注释):

PKTokenizer *t = [PKTokenizer tokenizerWithString: [inputString substringWithRange: range]];

// SQL does not support // comments.
[t.commentState removeSingleLineStartMarker: @"//"];

// But it does support -- comments.
[t setTokenizerState:t.commentState from: '-' to:'-'];
[t.commentState addSingleLineStartMarker: @"--"];

[t setTokenizerState: t.commentState from: '/' to: '/'];
[t.commentState addMultiLineStartMarker: @"/*" endMarker: @"*/"];

这为处理sql注释提供了支持。现在我正在尝试添加对@MyId等参数检测的支持。当前,标记生成器将这些选为单词,但不包括字符串值中的@。我的想法是尝试使用delimitState

[t.delimitState addStartMarker: @"@" endMarker: @" " allowedCharacterSet: [NSCharacterSet alphanumericCharacterSet]];

然后检查token.isDelimitedString,但它似乎没有选择任何。

我是不是错了?关于我如何在@中包含{{1}}的任何建议?

1 个答案:

答案 0 :(得分:1)

ParseKit的开发人员。

要将@MyId与单个分隔的字符串标记相匹配,请尝试:

[t setTokenizerState:t.delimitState from:'@' to:'@'];
[t.delimitState addStartMarker:@"@" endMarker:nil allowedCharacterSet:[NSCharacterSet alphanumericCharacterSet]];