言語実装には誰も使用していますが、 はそれらを比較することができ、強みと という弱点を指摘していますか? ASTウォーカーコードの生成をサポートするRADツールを探します。 SableCCはLALRであるため、 は '左回帰'をサポートしますが、ANTLRはLL(*)です。 これは典型的な文法やDSLにとって重要ですか?ドメイン固有の分析を行うには、 が必要です。 (私のコンパイラのターゲット言語 はOpenCL Cになります)。これが学生プロジェクトのために になるので、私は その多くの時間を面倒なところで失うことはなく、それは の言語のフロントエンドを実装しています。DSL実装用のANTLRまたはSableCC?
答えて
ANTLRについてはあまり言えませんが、SableCCについての情報は多分あります。
デザイン
これは、コードと手書きのコードがきれいに生成されたパーサを、生成Visitorパターンを用いて分離し、抽象構文木にコンクリート構文木から変換統合しています。その結果、パーサが入力を成功したと解析した後、設計者はASTを取得し、ツリーを歩き回って対応するノードに対してアクションを実行することができます。
デザイナーはまず文法を書いてデバッグし、具体的な構文木から抽象構文木への変換を最適化しようとします。彼は強固なASTを得た後、分離したクラスでアクションコードを書くことができます。そのため、設計者は文法を一度しか書いておらず、文法のためのより多くのタイプのアクションを書くことができます(例えば、構文ハイライトでは一度、セマンティック解析とコードジェネレータでは一度)。私は生産的なシステムでそれをやった。それはとてもうまくいく。
ANTLRを使用すると、設計者は文法でアクションコードを追加してASTツリーを作成し、ASTを生成して別の方法で再利用することができます。しかし、生成されたコードと手書きコードとの間に明確な分離はありません。
他の側面では、IDEがサポートされている可能性があります。 SableCCではコードを分離しているので、IDEのオートコンプリート機能を簡単に使うことができます。
文法
SableCCはLR(1)パーサジェネレータであり、LL(トリックなし)(K)パーサジェネレータであるANTLR、のための文法を書くことIMO容易です。私は(aberではない)SableCCは非常に人気がある唯一の1つのLR(1)Javaパーサジェネレータだと思います。 SableCCが唯一のJava(主流)にパーサを生成することができますが
出力パーサ
ANTLRは、多くの言語でパーサを生成することができます。他の言語でパーサを生成するためのプラグイン/アダプタがいくつかありますが、著者(http://www.mare.ee/indrek/sablecc/)によると、それらは古すぎます。 SableCC 4はより多く生成することができますが、ベータ版であり、深刻なプロジェクトにはお勧めできません。
開発サポート
ANTLRの帽子文法を書き込むためのIDE。視覚的な文法が可能なANTLRWorksです(トークンやプロダクションの定義にジャンプするなど)。 SableCCにはこのようなツールはありません。 VIM用のプリミティブな構文ハイライトスクリプトとNetbeans用の貧弱な機能プラグインがあります。
結論
はIMO私は大きなプロジェクトのために、必要な長期メンテナンスSableCCがANTLRよりも適していると思います。
Martin FowlerはSableCCに関する情報を提供しています。こちらをご覧ください。
私は答えが "パーサージェネレータ"だけではないと思います。 *あなたのDSLコードを分析し分析することについて真剣であれば、 "単なる解析"エンジンを選ぶことはあなたにはあまり役に立たないことがわかります。パーサージェネレータのように、もっと多くのメカニズムが必要ですが、実際にはすべてのメカニズムを自分で構築したくありません。私のエッセイ「分析後の生命」を参照してください:http://www.semanticdesigns.com/Products/DMS/LifeAfterParsing.html –
はい、私は同意します。解析はちょうど始まりです。一度ASTをしてからあまりにも多くのことがあります。ですから、自分で作成するだけではなく、自動的に生成されたASTを作成したいと考えています。私はそう思う。私はパーザとコンパイラの専門家ではなく、ただのアマチュアです。 – lazyboy
SABLEもANTLRも私の理解では自動的にASTを生成しません。あなたはSABLEがいくらか助けていることを暗示しているようです。私たちのDMSは自動的にASTを生成します。パーサ+ ASTの文法。 –
- 1. ANTLR Dターゲット - 成熟した実装はありますか?
- 2. ダミーのためのANTLRとDSLの解析:空白の処理
- 3. .NET上でDSLを実装する
- 4. ルビーに安全なDSL実装がありますか?
- 5. DSLがRESTサービスのルーティングと処理のビジネスルールを実装する
- 6. ANTLR構文Visual StudioでDSLを強調表示する
- 7. 異なるGPL(汎用プログラミング言語)を使用して実装されたDSL(汎用プログラミング言語)
- 8. ActiveAdmin - DSLでHABTM /多次元配列を実装する
- 9. スカラーDSLと型付き演算子:慣用的な実装ですか?
- 10. Javaを使用したAntlrツリーのトラバース
- 11. Base32またはBase64のカスタム実装
- 12. バディヒープアルゴのデータ構造または実装
- 13. Cantの実装View OnClickListenerまたはToolTipView.OnToolTipViewClickedListener
- 14. LL(1)ANTLRまたはANTLR3を使用するテーブル駆動コンパイラ
- 15. DSL用のjavascriptオートコンプリート。 (例:SQL)
- 16. はANTLR
- 17. ドロップダウンを使用したAJAXの実装
- 18. LinkedBlockingQueueを使用したIntentServiceの実装?
- 19. GWTPを使用したサーバープッシュの実装
- 20. OpenIDを使用したメンバーシップシステムの実装
- 21. findを使用したrfindの実装
- 22. AutoMapperを使用した.ToViewModel()の実装
- 23. ActionbarSherlockを使用したアクションバーの実装
- 24. Djangoを使用したリーダーボードの実装
- 25. BizTalkを使用したEDIの実装
- 26. Ajaxを使用したSearchBoxの実装
- 27. アロケータクラスを使用したベクターの実装
- 28. バイナリツリーを使用したディクショナリの実装
- 29. CまたはC++またはSystemCのCPUキャッシュ実装
- 30. ドメイン固有のXMLを生成するためにRubyでDSLを実装する
OpenCLをターゲットにしている場合、DSLのオペランドのデータ型について多くのことを知る必要はありませんか?これは、ANTLRとSableCCのどちらも特定のサポートを提供していないというシンボルテーブルと型推論を意味します。私はあなたのDSLツールを、単に解析するだけでなく、提供する必要があるメカニズムを考慮して選ぶべきであると考えています。あなたが必要とするすべての*が解析されている場合(どのように知っていますか?)、これらのいずれかが良い選択肢になります。 –
サポートされている唯一のデータ型は、単精度浮動小数点数です。整数演算はほとんどのGPUアーキテクチャではそれほど高速ではありません。私はまだドメイン(Neuronモデル)で少し読書をしなければならないが、主に私は木を歩かなければならないと思う。 SableCCが訪問者のデザインパターンを実装するクラスを生成すると聞いたことがあります。一方、ANTLRには>>>ユーザーコミュニティがあり、より良いチュートリアル、書籍、ドキュメントを入手できます。 –
GPUの場合、あなたがサポートしていると思うどのデータ型の配列(暗黙的または明示的な)も必要です。そうしないと、計算上の馬力を得ることができなくなります。もしそれが良いDSLであれば、実装の単精度浮動小数点に対する主張によって中毒されることはありません。したがって、intとGPUではなく*問題*に適したさまざまな精度浮動小数点数を持つことが期待されます。あなたが学生なら、好きなことをすることができます。 –