3

TradestationのEasyLanguageとC++の間に「トランスレーター」(クロスコンパイラーは正しい言葉ですか?)を構築する必要があります。ただし、EasyLanguageの文法に関する完全なドキュメントはありません(私が見つけたものです)。

より一般的な質問として、いくつかの言語「A」の有効なプログラムのセットが与えられた場合、特定の基本トークンの存在を知っている(または知らない場合でも)場合、「A」の文法を識別することができますか? 'if''else'や予約語のように、またはこれは未解決のケース固有の(難しい?)質問の1つですか。

開始するために使用できる便利なツールはありますか?

4

1 に答える 1

5

簡単な答えは「いいえ」です。

例からのあらゆる種類の一般化は、それが推測しているという基本的な事実に苦しんでいます。言語には「if」トークンがあると推測できます。それが機能すること、またはそれがあなたが理解できるセマンティクスを持っているかどうか、またはそれが綴られていることを保証するものではありません。あなたはあなたのために文法を誘発するための自動化されたツールを手に入れるつもりはありません。

あなたの最善の策は、言語を説明するあなたが得ることができるすべての文書を取り、そしてまあ、文法を推測することです。次に、文法のパーサーを作成し、見つけられる限り大きなコードベースに対して検証し、修正します。私はこれを何十回もさまざまな言語で行ってきました(私の経歴を参照してください)。

それは苦痛ですが、あなたはしばしばかなり役に立つ場所を手に入れます。良いニュースは、パーサーがユーザーが書き方を知らないものを解析する必要がないことです。悪いニュースは、彼らがあなたが今まで見たことがないいくつかのあいまいな例に基づいて、または誤って機能するタイプミスで物事を書くことです。(言語設計者でさえ意図していませんでしたが、それはユーザーにとって重要ではありません。彼のプログラムは機能し、コンパイラーは機能しません。定義上、問題です)。

あなたが決して知らないのは、その言語の提供者が、彼が単に文書化しておらず、他の誰にも見せていない特定の機能を持っているかどうかです。あなたが終わった後ずっと、驚かされるために絶えず準備してください:-{

現在、このプロセスIMHOに使用できる最適なツールは、GLRパーサージェネレーターです。それは私の会社が使用しているものです。これらは、再帰下降、LL(k)、またはLR(k)パーサーのその他の一般的な制限に一致するように文法を曲げるのに多くの苦労をすることなく、(提案する可能性のある)文脈自由言語を解析します。人生は文法を推測するのに十分難しいです。もちろん、文法を推測し、それを曲げる方法を推測して、パーサジェネレータが正しくそれを飲み込むようにします。

文法を正しく理解すれば、翻訳者を作成するという問題もあります。このSOの回答が役立つと思うかもしれません。別のプログラミング言語への翻訳を容易にするために、コードにどのようなパターンを適用できますか?

于 2011-06-28T14:58:26.590 に答える