この回答は、包括的な回答というよりもストーリーですが、計算言語学の論文には、Haskell、Python、および C++ を組み合わせて使用し、作成していない C および Java ツールもいくつか使用しました。Python を接着コードとして使用して、Haskell、C++、および Java プログラムを開始することで、すべてを個別のプロセスとして実行するのが最も簡単であることがわかりました。
C++ は、機能の出現をカウントする非常に単純でタイトなループでした。基本的には、数学と単純な I/O だけでした。実際には、Python グルー コードに#define
s でいっぱいのヘッダーを書き出させて再コンパイルすることで、オプションを制御しました。ちょっとハックですが、うまくいきました。
Haskell はすべての中間処理でした。私が使用したさまざまな C および Java パーサーから複雑な出力を取得し、無関係なデータをフィルター処理して、C++ コードが期待する単純な形式に変換します。次に、C++ の出力を取得し、LaTeX マークアップ (他の形式の中でも) に変換しました。
これは、Python が強いと期待される分野ですが、Haskell を使用すると複雑な構造を簡単に操作できることがわかりました。単純な行から行への変換にはおそらく Python の方が適していますが、解析ツリーを細かく分割していたところ、Python でコードを書いたときに入力と出力の型を忘れていたことに気付きました。
私は Haskell をより構造化されたスクリプト言語のように使用していたので、いくつかのファイル I/O ユーティリティを作成することになりましたが、それ以上は、ツリーとリスト操作用の組み込みライブラリで十分でした。
要約すると、私のような問題がある場合は、メモリに制約があり速度が重要な部分には C++ を、高レベルの変換には Haskell を、すべてを実行するには Python をお勧めします。