すでに書かれた文法と正規表現を使用するので、ツールの選択は影響力があります。
あなたはフレックス/バイソンで行くことができます、そしてあなたはすでに書かれた多くの文法を見つけるでしょう。それ以外の場合は、C、C ++、およびJavaで問題なく動作するはずのANTLRを使用して、同じことを実行できます。
あなたはこの仕事にどの言語を使うつもりかについて話さなかったので、より良いアプローチを提案することはそれほど簡単ではありません。
すべての言語には独自の機能があるという事実を考えてみてください。たとえば、シンボルテーブルはC++とは異なる方法でRubyで作成されます。これは、宣言を厳密にしたり緩めたりすることができるためです。したがって、必要なものをよく考える必要があります(質問でも説明できるので、より適切なサポートを提供できます)。
あなたの2つのフェーズのうち、私はそれを言うことができます
トークン化は非常に単純で、言語ごとに異なる構造を必要とせず、多数のプログラミング言語をサポートするように簡単に拡張できます。
解析はより困難になる可能性があります。プログラムの抽象構文木を構築してから、好きなことをする必要があります。OOPスタイルを使用する場合は、ノードタイプごとにクラスを使用する必要がありますが、ノードタイプは構造が異なるため言語間で変わる可能性があるため、一般的で他の言語に簡単に拡張できるようにするのは非常に難しいです。
この点で、ANTLRはASTの自動生成を提供するため、FlexとBisonに勝ちます(私がよく覚えている場合)。
これら2つのコンパイラのコンパイラの主な違いは、ANTLRがLL(k)パーサー(トップダウン)を使用するのに対し、BisonはボトムアップのLALR(1)を使用するという事実ですが、すでに記述されている文法を使用する場合は、そんなに難しいことではありません。
個人的なアドバイス:私は多くの通訳者やコンパイラーを書きましたが、完全な機能を備えた言語から始めたことはありません。C構文は非常に大きいので、サブセットから始めて、トークンとASTで何ができるかを確認し、後で完全な構文をサポートするように拡張する必要があります。