2013-06-21 62 views
1

我試圖使用ParseKit'sTokenization與SQL Server語法。如果您在下面的例子來看看:使用ParseKit Tokenization和DelimitedString

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,但它似乎並沒有挑選任何起來。

我該怎麼處理這個錯誤?任何關於如何將@包含在我的wordstate中的建議?

回答

1

開發商ParseKit這裏。

要匹配@MyId作爲一個單一的分隔字符串標記,請嘗試:

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

真棒,這就像一個魅力的工作!感謝偉大的組件。 – Kyle