2011-12-09 9 views
1

テキストファイルの文字列検証が大量に行われる.NETプログラムを作成しています。ユーザーが検証ルールを設定できるようにしたいので、多くのエッジケースをハードコードする必要はありません。あなたは私が持つグループのものにできるようにしたいの上に見ることができるように実行時に未知の論理条件を解析するC#

IF KEY IS "X" AND VALUE IS "Y" RETURN NOTIFICATION 

(IF KEY IS "X" OR VALUE IS "Y") AND (IF SECTIONNAME IS "I") REPLACE "Y" WITH "J" 

:たとえば、私は、次のようなものを想像する(キャップ​​は、ユーザ記述されている引用符でのユーザ操作を制限するためのドロップダウン内の項目と項目があります)論理ANDとORを使用してIF文を処理します。これらの文は、何らかのTrue/False値に評価されて何らかのアクションを実行します。私の質問は、データを解析して、適切なグループ化と適切な操作を行うための最良の方法です。 Googleを介して、抽象構文ツリーを作成したいと思うかもしれませんが、実際に私を始めるための簡単な例を見つけることができなかった場合はそうです。

ご協力いただきありがとうございます。

答えて

1

私はパーサージェネレーターの大ファンです(私のバイオを見てください)が、彼らは時には過剰です。

このシンプルな論理(ブール論理)と小さなアクションのセット(あなたが示したような)の場合、再帰的な降下パーサーはうまくいくはずです。セマンティックアクションを構文解析に組み込むと、ASTは必要ありません。ブール式の結果をオンザフライで計算し、解析されたアクションを実行する必要があるかどうかを決定するためにその結果を使用して、再帰的降下パーサーが左から右へ動作するので、解析することもできます。したがって、ルールをテキストとして保存し、必要に応じてルールを実行するだけで、ユーザーはそのルールをその場で入力することができます。

this SO answer on how to build a recursive descent parser by hand

+0

すべての答えは、これまでに強大な評価されているが、これは私が探していたものです参照してください!私は何かをするためのツールが存在する場合には、ホイールを再発明しようとはしませんが、何が起こっているのかを理解し、経験のためだけにそれを行うことを好みます。ありがとう! – Roger

0

Domain Specific Languageを作成することでC#で行うことができます。基本的には、言語の文法がどのように見えるか、正しいパーサーが書かれているかについての設定ルールを作成しますあなたのために。