1

私は数式バリデーターのようなものを作っており、それを達成するために ParseKit フレームワークを使用しています。私のアプローチは、適切な文法を作成することです。サンプル文字列で didMatchFormula コールバック メソッドが呼び出されると、数式が見つかったので有効であると想定します。

ただし、問題が 1 つあります。式部分の後に他の文字が含まれている場合でも、サンプル文字列から式が検出されます。マッチングには貪欲モードのようなものが必要です-文字列全体が数式文法と照合されるため、文字列に数式が含まれ、他の文字が含まれていない場合にのみ didMatchFormula が呼び出されます。

PaseKit またはその他の方法でそれを達成する方法のヒントを教えてください。私の式は再帰を使用し、正規表現はそれを処理するための適切なツールではないため、正規表現を使用できません。

4

1 に答える 1

0

ParseKitの開発者はこちら。

おそらく、ParseKit (または任意の解析ツールキット) を使用してこれを行う最も簡単で最も洗練された方法は、すべてのステートメントの後にターミネーター char を持つ式言語を設計することです。;これは、ほとんどの C に似たプログラミング言語でステートメントを終了するのと同じ概念です。

.以下は、ステートメント ターミネータとして使用するおもちゃの数式言語の例です。

@start = lang;
lang = statment+;
statment = Word+ terminator;
terminator = '.';

あなたの「貪欲な」要件が言語の固有の機能であるように、私がどのように言語を設計したかに注目してください。考えてみてください。入力文字列の末尾が有効なステートメントではないジャンク コンテンツで終わっている場合.、私のlangプロダクションは一致を見つけられず、解析は失敗します。

このタイプの設計では、使用する parsking ツールキットに「貪欲な」機能は必要ありません。むしろ、あなたの要件は言語設計によって自然に満たされます。

于 2012-12-19T14:37:51.680 に答える