ParseKit的开发者在这里。
首先,请参阅ParseKit 标记化文档。
基本上,ParseKit 可以在以下两种模式之一中工作:我们称它们Tokens Mode
为Chars Mode
. (这两种模式没有正式名称,但也许应该有。)
Tokens Mode
到目前为止更受欢迎。几乎每个使用 ParseKit 的例子都会展示如何使用Tokens Mode
. 我相信http://parsekit.com上的所有文档都在使用Tokens Mode
. ParseKit 的语法功能(您在示例中使用的仅适用于Tokens Mode
)。
Chars Mode
是 ParseKit 的一个鲜为人知的功能。我以前从来没有人问过这个问题。
所以模式的区别是:
- 在
Tokens Mode
中,ParseKit Tokenizer 发出多字符标记(如单词、符号、数字、引用字符串等),然后由您创建的 ParseKit 解析器(以编程方式或通过语法)进行解析。
- 在
Chars Mode
中,ParseKit 标记器始终发出单字符标记,然后由您以编程方式创建的 ParseKit 解析器进行解析。(语法目前不适用于此模式,因为此模式不流行)。
您可以使用Chars Mode
来实现正则表达式,它在逐个字符的基础上进行解析。
对于您的示例,您应该忽略
Chars Mode
并仅使用
Tokens Mode
. 以下内置作品仅供
Chars Mode
参考。不要在你的语法中使用它们:
(PK)Letter
(PK)Digit
(PK)Char
(PK)SpecificChar
请注意所有这些作品听起来是如何与单个字符匹配的。那是因为他们这样做。
您上面的示例应该如下所示:
@start = identifier;
identifier = Word; // by default Words start with a-zA-Z_ and contain -0-9a-zAZ_'
请记住,您的语法中的产品(如 解析器identifier
)将处理已经从 ParseKit 的 Tokenizer 发出的令牌。不是单个字符。
IOW:当您的语法开始解析输入时,输入已经被标记为 Word、Number、Symbol、QuotedString 等类型的标记。
以下是可在您的语法中使用的所有内置作品:
Word
Number
Symbol
QuotedString
Comment
Any
S // Whitespace. only available when @preservesWhitespaceTokens=YES. NO by default.
还:
DelimitedString('start', 'end', 'allowedCharset')
/xxx/i // RegEx match
还有复合解析器的运算符:
// Sequence
| // Alternation
? // Optional
+ // Multiple
* // Repetition
~ // Negation
& // Intersection
- // Difference