ParseKitの開発者はこちら。
明らかな問題が 1 つconjunction
あります。文法のいくつかの場所で のスペルが間違っています。
ParseKit の Grammar Parser のエラー メッセージはそれほど大きくありません。理想的には、問題につながる素敵なエラー メッセージが表示されるはずです (ただし、これはオープン ソースなので、誰でもこの性質の修正に貢献できます)。
ただし、これらの問題をどのように見つけたかをお伝えできます。
- ParseKit の作業コピーをGoogle コードトランクの先頭に更新します。
- Xcode でブレークポイントをオンにして、すべての例外にブレークポイントを追加します。
- ParseKit 文法をこのファイルに配置します。
~/Desktop/grammar.txt
- (オプション) 入力例をこのファイルに配置します。
~/Desktop/input.txt
DebugApp
デバッグ構成でParseKit ターゲットを実行します。
Run
アプリの実行時に表示されるウィンドウの大きなボタンをクリックします。
- 例外がスローされるのを待ちます。ブレークポイントがヒットします。
文法にバグがある場合、次のような ParseKit アセンブラー コールバックで例外が発生した可能性が最も高いことがわかります。
- (void)parser:(PKParser *)p didMatchExpression:(PKAssembly *)a
a
デバッグ コンソールに出力します。次のように表示されます。
(lldb) po a
(PKAssembly *) $1 = 0x00000001075a9010 [] /conjuction/ ^(/or/ /conjuction/)/*
これは、PKAssembly
コールバックに渡されたオブジェクトの出力です。ここで、ParseKit の文法パーサーが文法の解析に失敗した場所を確認できます。次の式の解析中に、ParseKit Grammar Parser が失敗したようです。
conjuction (or conjuction)*;
(キャレット)の位置から^
、最初の を見た直後にパーサーがチョークしたことがわかりますconjuction
。
この式は、文法内の 1 行だけにあります。
disjunction = conjuction (or conjuction)*;
それで、この行にスペルミスがあることに気付きました。
このアプローチは、常に文法の問題のある行につながります。それが役立つことを願っています。