| 開発者 | セマンティックデザイン |
|---|---|
| ライセンス | 独自の |
| Webサイト | www.semanticdesigns.com/Products/DMS/DMSToolkit.html |
DMSソフトウェア リエンジニアリング ツールキットは、大規模なソフトウェア システムの任意のソース言語の組み合わせに対して、カスタム ソース プログラムの分析、変更、翻訳、またはソフトウェア システムの生成を自動化するために使用できる独自のプログラム変換ツール セットです。 [1] DMS は、もともとソフトウェアの設計を保守するための設計保守システムと呼ばれる理論に触発されて開発されました。[2] DMS および「設計保守システム」は、Semantic Designs の登録商標です。
使用法
DMSは、ドメイン固有言語(工場制御用のコード生成など)、テストカバレッジ[3]、プロファイリングツール、クローン検出[4]、言語移行ツール、C++コンポーネントリエンジニアリング[5]の実装に使用され、 C++の信頼性の高いリファクタリングなどの難しいトピックの研究にも使用されています。[6]
特徴
ツールキットは、言語文法を定義する手段を提供し、抽象構文木(AST)を自動的に構築するパーサーと、元のまたは変更された AST をコンパイル可能なソース テキストに変換するプリティ プリンタを生成します。 パース ツリーは、ソースの位置、コメント、数値の基数と形式など、元のソース プログラムに関する完全な詳細をキャプチャし、プリティ プリンタはそれを再生成します。これにより、再生成されたソース テキストは、適用された変換を除けば元のテキストと同様にプログラマーにとって認識可能になります。
DMS は、セマンティック述語によるGLR解析テクノロジを使用します。これにより、すべての文脈自由文法と、Fortranなどのほとんどの非文脈自由言語構文を処理できます。 Fortranでは、解析時に正しくネストされたループの AST を生成するために、ラベルによる複数の DO ループと共有 CONTINUE ステートメントの一致が必要です。 DMS には、C++0x、C#、Java、Python、PHP、EGL、Fortran、COBOL、Visual Basic、Verilog、VHDLなど、 CおよびC++の実際の方言のほとんどをカバーするさまざまな定義済み言語フロントエンドがあり、その他 20 以上の言語もカバーしています。 DMS は、 ASCII、ISO-8859、UTF-8、UTF-16、EBCDIC、Shift-JIS、およびさまざまな Microsoft 文字エンコードを処理できます。
DMS は、メトリックなどの AST 上のカスタム分析を計算するための属性文法評価機能を提供し、シンボルテーブル構築のサポートも含まれています。その他のプログラム ファクトは、組み込みの制御フローおよびデータフロー分析エンジン、ローカルおよびグローバルポインタ分析、プログラム全体の呼び出しグラフ抽出、および抽象解釈によるシンボル範囲分析によって抽出できます。
DMSは並列プログラミング言語PARLANSEで実装されており、対称型マルチプロセッシングを使用して大規模な分析や変換を高速化することができます。[7]
書き直し
AST の変更は、PARLANSE でコード化された手続き型メソッドと、 DMS のルール仕様言語 (RSL) を使用して、抽出されたプログラム ファクトによって条件付けされた表面構文を使用した書き換えルールとしてコード化されたソース間ツリー変換の両方によって実行できます。RSL をサポートする書き換えルール エンジンは、結合ルールと交換ルールを処理します。複雑な条件を演算子で置き換える C の書き換えルールは、?:次のように記述されます。
ルールの簡素化条件割り当て(v:左側、e1:式、e2:式、e3:式)
:ステートメント->ステートメント
= " if (\e1) \v=\e2; else \v=e3; "
-> " \v=\e1?\e2:\e3; "
副作用がない場合(v);
書き換えルールには、たとえば、simply_conditional_assignmentなどの名前があります。各ルールには、「これと一致」と「あれで置き換え」のパターン ペアがあり、この例では読みやすくするために別の行に->で区切られています。パターンは言語構文カテゴリに対応している必要があります。この場合、両方のパターンは、パターンに合わせて->で区切られた構文カテゴリステートメントである必要があります。ターゲット言語 (例: C) の表面構文は、メタ引用符"内に記述され、書き換えルール構文をターゲット言語の構文から分離します。メタ引用符内のバックスラッシュはドメインエスケープを表し、シグネチャ行のメタ変数宣言に対応する任意の言語構成要素に一致するパターン メタ変数 (例: \v、\e1、\e2 ) を示します。たとえば、 e1 は構文カテゴリ: (任意の)式 である必要があります。メタ変数が一致パターンで複数回言及されている場合、それは同一のサブツリーに一致する必要があります。この例では、一致パターンの両方の割り当てに同じ同一形状のvが出現する必要があります。置換パターンのメタ変数は、左側の対応する一致に置き換えられます。条件句if は、ルールを適用するために満たす必要がある追加の条件を提供します。たとえば、一致したメタ変数v は任意の左側であり、副作用があってはなりません (たとえば、a[i++]の形式であってはなりません。no_side_effects述語は、他の DMS メカニズムを使用して構築されたアナライザーによって定義されます。
コードの複雑な変換は、望ましい効果を達成するために連携するいくつかのルールを提供することで実現されます。ルールセットは、PARLANSE でコード化されたメタプログラムによってプログラムの一部に焦点が当てられます。
高校の代数学と微積分学をドメイン固有言語として 使用して、言語定義とソース間の変換ルールを定義および適用した完全な例を示します。
参考文献
- ^ DMS: 実用的なスケーラブルなソフトウェア進化のためのプログラム変換。国際ソフトウェア工学会議 2004 の議事録、再版
- ^ 設計保守システム。Communications of the ACM 1992 再版
- ^ 任意の言語の分岐カバレッジを簡単に実現
- ^ 「抽象構文木を使用したクローン検出。Proceedings International Conference on Software Maintenance 1998」。doi :10.1109/ICSM.1998.738528。S2CID 12834606。 2012年10月10日時点のオリジナルよりアーカイブ。 2010年11月6日閲覧。
{{cite journal}}:ジャーナルを引用するには|journal=(ヘルプ)が必要です - ^ Akers, Robert L.; Baxter, Ira D.; Mehlich, Michael; Ellis, Brian J.; Luecke, Kenn R. (2007). 「ケーススタディ: 自動プログラム変換による C++ コンポーネントモデルのリエンジニアリング」.情報およびソフトウェア技術. 49 (3): 275–291. doi :10.1016/j.infsof.2006.10.012. S2CID 13219993.
- ^ 中小企業イノベーション研究 (DoE): Refactor++
- ^ 「Semantic Designs: Windows Pentium/80x86 向け PARLANSE 並列プログラミング言語」www.semanticdesigns.com。
外部リンク
- DMS ソフトウェア リエンジニアリング ツールキットのメイン Web ページ
