2009-09-01 7 views
5

私は2つの言語の間に翻訳者を書きたいと思っています。インターネット上で読書した後、私はANTLRに行くことにしました。私は一からそれを学ばなければならなかったが、左回帰をなくすことにいくつかの問題のほかに、今まではすべてがうまくいった。ANTLR vs. Happy vs.他のパーサージェネレーター

しかし、今日、ある人が、ハスケルベースのパーサジェネレータである「ハッピー」をチェックアウトするようにと言ってきました。私はハスケルの知識がないので、ハッピーがANTLRよりも優れていて、それを学ぶ価値があるなら、いくつかのアドバイスを使うことができます。

具体的には、私の翻訳者はマクロ置換をサポートする必要があります。マクロ置換はANTLRのやり方ではまだわかりません。多分幸せでこれは簡単ですか?

他のパーサージェネレータがさらに優れていると思えば、私はそれらについて聞いてうれしいです。

+0

あなたが言うことができる情報は、 "ソースとターゲット言語は何ですか?" –

+0

@ 280Z28社内で作成された言語です。これらはJavaと多少似ていますが、クラスにはマクロ定義を含めることができ、メソッドの内部ではマクロを展開する必要があります。 – Gabriel

+1

私は、私の問題は私が最初に思ったよりも簡単だとわかりました。私はレクサーでANTLRでそれをやっていましたので、今すぐハッピーや他のジェネレータを急いで学ぶ必要はありません。 – Gabriel

答えて

5

人々はパーサを手に入れるだけで、言語ツールを構築するときには になっていると信じています。それはちょうど間違っている。パーサーは、山麓にあなたを得ます ヒマラヤ次にあなたは真剣に登る必要があります。

言語変換ツールを構築するための業界最高のサポートが必要な場合は、 DMS Software Reengineering Toolkitをご覧ください。 DMSは

  • Unicodeベースのレクサー
  • フル文脈自由パーサ提供(左再帰を?問題ありません!任意の先読み?問題ありません。曖昧な文法?問題ありません)
  • フルフロントはC、C#の場合は終了し、
  • 任意のスコープルールでATTRIBをシンボルテーブルを構築するためのCOBOL、(CおよびC++のための完全なプリプロセッサを含む)は、Java、C++、JavaScriptの、...
  • のASTの自動構築
  • サポート木構造を活用したアナライザを構築するためのュート文法の評価
  • 制御とデータフロー解析のサポート(full C、Java、COBOLの実現も同様)
  • 構文を使用したソースからソースへの変換ソースと
  • ASTソースコードprettyprintingにターゲット言語は、マクロを処理するためのOPの要求に関して、ターゲット言語テキスト

を再生する:私たちのC、COBOLやC++フロントで、それぞれの言語の前処理を処理終了)従来の完全拡張の方法、またはb)ポスト・パースの変換を可能にする非拡張(実用的な場合)マクロそのものの作成。 DMSは基本的にマクロ処理を実装するものではありませんが、同じものの構築と変換をサポートすることができます。

DMSで構築されたトランスレータの例として、 converting JOVIAL to C for the B-2 bomberの説明を参照してください。これは、リアルタイムのコード ハードの> 1 MSLOCの100%翻訳です。 [翻訳された実際のプログラム(秘密)を見ることは決して許されていなかったことを知ってもいいかもしれません。そして、はい、JOVIALにはプリプロセッサがあります。はい、ほとんどのJOVIALマクロを同等のCバージョンに変換しました。

[Haskellはクールなプログラミング言語ですが、このようなことは一切行っていません。 これは言語で表現可能なものではありません。プログラムを操作するタスクをサポートするためにどのような機械が必要であるかを把握し、 100人年を費やして費やしています。]

+1

@Ira Baxter - 小さな世界ですから、私から歩いています。 :o –

+0

「これは素晴らしいコメントです」の「上」ボタンを押してください。あなたは私のしゃっくりの恩恵を受ける。私のユーザー登録ページから私の電子メールアドレスを見つけて、私に紹介ノートを送ってください。ここで楽しい会話かもしれない。 –

+1

これは素晴らしいです。しかし、私はあなたがオープンソースのコミュニティでこれを見つけることができないと仮定します。 – Gabriel

関連する問題