ここでParseKitの開発者。
まず、ParseKitトークン化のドキュメントを参照してください。
基本的に、ParseKitは2つのモードのいずれかで動作します。それらTokens Mode
をとと呼びましょうChars Mode
。(これら2つのモードの正式な名前はありませんが、おそらくあるはずです。)
Tokens Mode
はるかに人気があります。ParseKitを使用するほとんどすべての例で、の使用方法が示されますTokens Mode
。http://parsekit.comのすべてのドキュメントでを使用していると思いますTokens Mode
。ParseKitの文法機能(例で使用しているのはでのみ機能しますTokens Mode
)。
Chars Mode
ParseKitのあまり知られていない機能です。私はこれまで誰にもそれについて尋ねられたことがありません。
したがって、モードの違いは次のとおりです。
- では
Tokens Mode
、ParseKit Tokenizerは複数文字のトークン(Words、Symbols、Numbers、QuotedStringsなど)を出力し、作成したParseKitパーサーによって(プログラムまたは文法を介して)解析されます。
- では
Chars Mode
、ParseKit Tokenizerは常に単一文字のトークンを出力します。このトークンは、プログラムで作成したParseKitパーサーによって解析されます。(このモードは一般的ではないため、現在、文法はこのモードでは機能しません)。
Chars Mode
文字ごとに解析するRegularExpresionsを実装するために使用できます。
あなたの例では、無視し
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