3

「基本的な文法構文」を読んで、ParseKit を理解しようとしていますが、これは非常に基本的な紹介にすぎません。自分の文法を定義することに着手したいので、すぐに理解が深まりました。ここからどこへ行けばいいですか?

たとえば、非常にカスタムな形式でログ ファイルを解析したいとします。ヘッダー、ボディ、フッターに分解すると、これがヘッダーの最初の行の BNF になります。

<header-line-1> ::= <log-format> <log-id> "," <category> <EOL> 
<log-format> ::= "Type A Logfile" | "Logfile II" | "Some Other Format" 
<log-id> ::= "#" <long-int> 
<category> ::= <some unknown string>

ParseKitが理解できるように、それをどのように定義しますか? ここまで来ました。

@start = header-line-1;
header-line-1 = log-format log-id "," category EOL;
log-format = 'Type A Logfile';
log-id = '#' ; // and then how to specify a long-int?!?
category = char+;
char = 'A' | 'a' | 'B' | 'b' | 'C'; //..etc...   Surely not?!?

文字の範囲を定義する方法が少なくともあるに違いないと思いますか?

確かに、parsekit の著者によって引用された本はおそらく私を助けるでしょうが、主題を深く掘り下げる前に、誰かが私自身の小さな例を始めるのを手伝ってくれるといいでしょう. アイデアを調査しているだけで、概念の証明にすぎません。

4

1 に答える 1

1

ParseKitの開発者はこちら。

残念ながら、ParseKit の文法構文に関するこれ以上の (適切な) ドキュメントはありません。現在、最適なリソースは次のとおりです。

  1. Steven Metsker の Book Building Parsers in Java . 良いニュース: これは、ParseKit の設計/内部について教えてくれます。悪いニュース: ParseKit の「文法構文」機能は、私が設計して追加した ParseKit の上層にある追加機能です。彼の Java ライブラリにはこの機能がないため、Metsker の本には記載されていません。

  2. ParseKit Xcode プロジェクトのTestターゲット内の.grammarファイル。ここには、実際の文法例がたくさんあります。例によって多くを学ぶことができます。

  3. ここの StackOverflowのParseKitタグ。参考になりそうな質問がたくさんありましたのでお答えします。


具体的な例については、おそらく ParseKit 構文で定義する方法を次に示します。

@symbolState = '\n'; // Tokenizer Directive
                     // tells tokenizer to treat new line chars as 
                     // individual Symbol tokens rather than whitespace
@start = headerLine*;
headerLine = logFormat logId comma category eol;
logFormat = ('Type' 'A' 'Logfile') | ('Logfile' 'II') | ('Some' 'Other' 'Format');
logId = hash Number;
category = Any+;

comma = ',';
hash = '#';
eol = '\n';

覚えておくべき重要なことの 1 つは、ParseKit での解析が 2 フェーズのプロセスであることです。

  1. トークン化 (文法内のトークナイザーディレクティブによって行われPKTokenizer、変更されます)
  2. 解析 (文法の宣言によって構築されたパーサーによって行われます)

したがって、文法によって作成されたパーサーは、トークナイザーによって既にトークン化されているトークンで機能します。個々の文字または複数のトークンで構成される長い文字列では機能しません。

于 2012-03-07T01:49:07.307 に答える