これは素晴らしい個人的なプロジェクトのように聞こえます。コンパイラの基本的な部分がどのように機能するかについて多くを学びます。パーサジェネレータを使用することはスキップします。これがあなた自身の啓蒙のためであるならば、あなたはそれをすべてゼロから行うことによってより多くを学ぶでしょう。
そのようなシステムが機能する方法は、私たちが自然言語を理解する方法の形式化です。「犬、ローバー、彼の食べ物を食べました。」という文をあなたに与えると、あなたが最初にすることはそれを言葉と句読点に分割することです。「The」、「SPACE」、「dog」、「COMMA」、「SPACE」、「Rover」、...それは「トークン化」または「字句解析」です。
次に行うことは、トークンストリームを分析して、文が文法的であるかどうかを確認することです。英語の文法は非常に複雑ですが、この文はかなり単純です。SUBJECT-APPOSITIVE-VERB-OBJECT。これが「構文解析」です。
文が文法的であることがわかったら、文を分析して実際に意味を引き出すことができます。たとえば、この文には、主語、同格、およびオブジェクト内の「彼」の3つの部分があり、すべて同じエンティティ、つまり犬を参照していることがわかります。犬が食べているものであり、食べ物が食べられているものであることがわかります。これはセマンティック分析フェーズです。
コンパイラーには、人間にはない第4フェーズがあります。つまり、コンパイラーは、言語で記述されたアクションを表すコードを生成します。
だから、それをすべて行います。言語のトークンを定義することから始め、基本クラスTokenとそれぞれの派生クラスの束を定義します。(IdentifierToken、OrToken、AndToken、ImpliesToken、RightParenToken ...)。次に、文字列を受け取り、IEnumerable'を返すメソッドを記述します。それがあなたのレクサーです。
次に、言語の文法が何であるかを理解し、IEnumerableを言語の文法エンティティを表す抽象構文ツリーに分割する再帰下降パーサーを記述します。
次に、そのツリーを調べて、「いくつの異なる自由変数がありますか?」のように計算するアナライザーを作成します。
次に、真理値表を評価するために必要なコードを吐き出すコードジェネレーターを記述します。ILを吐くのはやり過ぎのように思えますが、本当にバフになりたいのであれば、そうすることができます。式ツリーライブラリにそれを行わせる方が簡単かもしれません。解析ツリーを式ツリーに変換してから、式ツリーをデリゲートに変換して、デリゲートを評価できます。
幸運を!