JPH11501421A - ツリーデータ構造マニピュレーション及び一つの高水準コンピュータ言語から別のコンピュータ言語にソースコードを翻訳する方法及び装置 - Google Patents

ツリーデータ構造マニピュレーション及び一つの高水準コンピュータ言語から別のコンピュータ言語にソースコードを翻訳する方法及び装置

Info

Publication number
JPH11501421A
JPH11501421A JP8514847A JP51484796A JPH11501421A JP H11501421 A JPH11501421 A JP H11501421A JP 8514847 A JP8514847 A JP 8514847A JP 51484796 A JP51484796 A JP 51484796A JP H11501421 A JPH11501421 A JP H11501421A
Authority
JP
Japan
Prior art keywords
fragment
node
source
tree
macro
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Pending
Application number
JP8514847A
Other languages
English (en)
Inventor
クリスティ エイ アンドリュース
ビグナ ポール デル
マーク イー モーロイ
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Tandem Computers Inc
Original Assignee
Tandem Computers Inc
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Tandem Computers Inc filed Critical Tandem Computers Inc
Publication of JPH11501421A publication Critical patent/JPH11501421A/ja
Pending legal-status Critical Current

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/30Creation or generation of source code
    • G06F8/33Intelligent editors
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/90Details of database functions independent of the retrieved data types
    • G06F16/901Indexing; Data structures therefor; Storage structures
    • G06F16/9027Trees
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/42Syntactic analysis
    • G06F8/423Preprocessors
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/48Incremental compilation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/51Source to source
    • YGENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y10TECHNICAL SUBJECTS COVERED BY FORMER USPC
    • Y10STECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y10S707/00Data processing: database and file management or data structures
    • Y10S707/99931Database or file accessing
    • Y10S707/99933Query processing, i.e. searching
    • YGENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y10TECHNICAL SUBJECTS COVERED BY FORMER USPC
    • Y10STECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y10S707/00Data processing: database and file management or data structures
    • Y10S707/99941Database schema or data structure
    • Y10S707/99943Generating database or data structure, e.g. via user interface

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Databases & Information Systems (AREA)
  • Data Mining & Analysis (AREA)
  • Devices For Executing Special Programs (AREA)

Abstract

(57)【要約】 一つのコンピュータ言語で書かれたソースコードを別のコンピュータ言語で書かれたソースコードに翻訳する方法及び装置であり、翻訳された静的フラグメントは、テキスト的不一致にもかかわらず生成される。正確に、各ソース言語静的フラグメントの一つのターゲット言語定義が生成されかつ相違新しいパラメータに封じ込められる。

Description

【発明の詳細な説明】 ツリーデータ構造マニピュレーション及び一つの高水準コンピュータ言語から別 のコンピュータ言語にソースコードを翻訳する方法及び装置関連出願 本出願は、タンデムコンピュータインコーポレーティッドに譲渡された1994年 10月 7日出願の米国特許出願第08/319,682号の一部継続出願である。発明の分野 この発明は、高水準コンピュータプログラミング言語間の自動翻訳(automated translation)に関する。 この発明は、特に、ソース高水準コンピュータ言語に含まれる(マクロ(macro s)、ソースファイル包含構造、及びコメンタリ(commentary)のような)呼出し表 現及びプリプロセッサ特性のターゲット高水準コンピュータ言語における改良さ れた保存に関する発明の背景 高水準コンピュータ言語は、コンピュータ・プログラマがコンピュータと通信 できるようにする。コンピュータ言語でプログラマが書くステートメントは、一 組のタスクを実行すべく次いでコンピュータに命令するコンピュータプログラム を形成する。“コンパイル(Compilation)”は、高水準コンピュータ言語を、コ ンピュータが理解しかつ実行することができる、マシンコードと一般に呼ばれる 、命令に変換する処理である。コンパイラは、この翻訳を実行するコンピュータ プログラムである。 一般に、コンピュータの各ブランドは、異なる組のマシンコード命令を理解す る。従って、異なるコンパイラは、高水準コンピュータ言語を翻訳するために各 コンピュータに対して存在しなければならない。全ての高水準コンピュータ言語 に対するコンパイラがコンピュータの全てのブランドに対して存在しないので、 全てのプログラムは、全てのマシンで実行することができない。プログラマは、 それらのターゲットコンピュータに対してコンパイラが存在するような言語でプ ログラムを書くことができるだけである。 しかしながら、できるだけ多くのコンピュータのブランドで走る単一のコンピ ュータプログラムを有することが非常に望ましい。アプリケーションプログラム は、一般に複雑でかつ書くことが難しい;コンピュータの複数のブランドで走ら せるために複数の言語でプログラムを書き換えることは、実用的ではない。同様 に、コンパイラは、書くことが難しい;コンピュータの全てのブランドに対する 全ての言語をそれらに供給することは、同様に実用的ではない。これらの問題を 扱う一つの方法は、よく知られ、広く用いられ、標準化された高水準言語の開発 である。これらの言語に対するコンパイラは、種々のコンピュータに対して利用 可能である。 標準化された言語の開発は、完全な解ではない。多数の高水準言語、及びそれ らで書かれた多くの大きなプログラムが存在し、珍しい、非常に特定化され、ほ とんど用いられない、陳腐化したものか、または特定のコンピュータに対して設 計されたものである。多くのコンピュータは、これらの言語に対して利用可能な コンパイラを有していない。 それらが標準化されたかどうかに係わらず、多くの高水準コンピュータ言語が 全てのコンピュータでコンパイルすることができないので、プログラムは、他の 言語に翻訳されなければならない。翻訳は、手動で行うことができるが、それは 、面倒で、時間を消費し、かつ誤りを犯しやすい高価な処理である。この問題を 扱うために、一つの高水準言語で書かれたプログラムを別の高水準言語に翻訳す べく自動翻訳が開発され続けている。 自動トランスレータは、特定のコンピュータの特定の言語に対して利用できな いコンパイラの問題を解決すべく二つの別個の戦略のいずれかで用いられうる。 まず、プログラマは、オリジナルソース言語でプログラムを書きかつ保全し続け る。トランスレータは、ターゲット言語の中間コードにこれらのプログラムを変 換する。ターゲット言語に対する利用可能なコンパイラは、次いで、ターゲット コンピュータが理解することができるマシンコードにこの中間コードを変換する 。 ターゲット言語は、標準の、広範に利用可能な言語であるが、トランスレータは 、読取り可能なまたは保全可能なソースコードを生成する必要がない。 第2の戦略は、読取り可能なかつ保全可能なコードを生成するためにトランス レータを必要とする。このルートを行くプログラマは、ターゲットのためにオリ ジナル言語を放棄することを欲する。この型のトランスレータを構築することは 、さらに難しいタスクでありかつこの発明の対象である。 従来技術は、読取り可能なコードが異なる目的及び種々の成功の水準を生成す るトランスレータを構築することを試みる。ある高水準言語のシンタックス(syn tax)は、他の高水準言語のシンタックスに成功裏に変形された。あるトランスレ ータは、魅力的にフォーマットされたターゲットコードを生成する。ソースコー ドコメントがターゲットコードに移行されると同時に、それらの配置は、常に最 適であるとは限らない。トランスレータは、また、それらをさらに読取り可能に すべくプログラムのスタイルを変形することも試みた。他のものは、ソースプロ グラムのセマンティックを抽出しかつターゲット言語でそれを書き換えるべく知 識型システムを用いた。 しかしながら、従来技術のトランスレータは、プリプロセッサ特性として知ら れたプログラミング構成体を保存することができない。多くの高水準言語は、言 語自体とは別個であるがそれと共存しているプリプロセッサ言語を含む。プリプ ロセッサ言語の特性は、条件付きコンパイル機構、マクロ機構、ソース包含機構 、種々のコンパイラディレクティブ、及びコメント機構を含みうる。プリプロセ ッサ特徴のあるものは、プログラマに長い構成体に対して速記呼出し表現を用い らせる。それゆえに、速記表現を呼出すことは、ソースコードがプリプロセッサ を通して走らされるときにテキスト置換えをトリガする。 親出願(08/319,682)は、テキスト置換えプリプロセッサ特性の翻訳のための方 法を記述する。そこに記載された方法の一つの重要な態様は、呼出し表現によっ て呼出されたテキスト(例えば、別のファイルから含まれたテキスト、拡張され たマクロの本体であるテキスト、マクロ仮パラメータの代わりに置換されたマク ロ実パラメータテキスト)が使用のそのコンテキストに翻訳されなければならな いということである。これらの置換えテキストソースは、“静的フラグメント” と呼ばれる。静的フラグメントは、テキストをパーズすることができても、セマ ンティック解析が可能でないので、定義のそれらの点で即に翻訳することができ ない。従って、静的フラグメントは、それらの呼出しが拡張されかつ使用のそれ らのコンテキストで解析された後で翻訳される。 呼出し表現に関連付けられたソース言語テキストは、使用の異なるコンテキス トの異なるターゲット言語テキストに翻訳するということが可能である。テキス ト的ミスマッチは、例えば、タイプ互換性規則がソース言語におけるよりもター ゲット言語においてさらに限定的であるときに、起こり得り、ソース言語では現 れないタイプキャストを必要とする。タイプキャストが使用の異なるコンテキス トで異なるならば、テキストミスマッチが起こる。 ソース間トランスレータは、テキストミスマッチにもかかわらず翻訳された静 的フラグメントを生成するための戦略を選択しなければならない。一つの可能な 方法は、静的フラグメントの一つ以上のターゲット言語定義を生成することであ る。この戦略は、読取り可能性(読取り容易性(readability))及び保全性(main tainability)問題を与える;定義の単一点が望ましい。発明の目的および概要 本発明は、ソース間トランスレータについての方法及び装置に関する。本発明 の目的は、特に、テキスト不一致にもかかわらず翻訳された静的フラグメントを 生成する方法を提供することである。この方法によって、各ソース言語の静的フ ラグメントに関して正確に一つの目的言語の定義が発生し、そして新たなパラメ ータにおける違いが封じ込められる。 本発明の別の目的は、「ツリーサージェリ(tree surgery)」、ツリーのデータ の階層構造の解剖(dissection)、及び解剖の点におけるノードの挿入を行うため の方法及び装置を提供することである。 本発明のその他の目的は、以下の明細書の記載、請求の範囲及び添付図面から 明確になると思われる。その図面は、説明のため、本発明とその原理に関する好 ましい実施例、及びこの原理を適用するために最良であると思われるものを示し ている。同一又は等価である原理を具体化する本発明の他の実施例を用いること が可能であり、そして当業者が望む場合本発明及び請求の範囲から逸脱すること なく構成の変更をすることも可能である。図面の簡単な説明 図1は、従来技術によるツリーのデータ構造を示す。 図2Aは、ツリーサージェリをカプセル化する前のツリーのデータの階級構造 を示す。 図2Bは、ツリーサージェリをカプセル化する前のツリーのデータの階級構造 を示す。 図2Cは、ツリーサージェリをカプセル化した後の図2Aのツリーのデータの 階級構造を示す。 図2Dは、ツリーサージェリをカプセル化した後の図2Bのツリーのデータの 階級構造を示す。 図3は、本発明と共に使用する計算システムの簡略化したブロック図である。 図4は、簡略化した形態の本発明のソースコード間トランスレータを示す。 図5は、現在のセッションと以前のセッションとの間で不一致をチェックする ための本発明の方法のフローチャートを示す。 図6は、現在の翻訳セッションによって生じたフラグメント間で不一致をチェ ックするための本発明の方法のフローチャートを示す。 図7は、トークンの連続を封じ込めるための本発明の方法のフローチャートを 示す。 図8は、含まれた同じファイルを用いている2つの翻訳セッションを説明する 簡略化したブロック図である。 図9は、仮想フラグメントのツリーの例を示す。 図10は、仮想フラグメントのツリーの第2の例を示す。 図11は、ゴーストフォーマルを使用する例を示す。 図12は、ゴーストフォーマルを使用する第2の例を示す。 図13は、マクロパラメータを使用する仮想フラグメントのツリーの例を示す 。 図14は、マクロパラメータを使用する仮想フラグメントのツリーの第2の例 を示す。 図15は、仮パラメータを再使用する例を示す。 図16は、仮パラメータを再使用する第2の例を示す。 図17は、仮使用を導入する仮想フラグメントのツリーの例を示す。 図18は、仮想フラグメントのツリーの例を示す。 図19は、仮使用を伝搬する図18の仮想フラグメントのツリーの例を示す。実施例 このセクションは、翻訳の不一致が異なるテキストにおいて1つのマクロの2 つの使用の間に現れるときでも、ソースからソースへの翻訳中にマクロ定義の翻 訳を記述する。ロゼッタトランスレータはこの技術を具現化する。概念 次の概念はマクロを保存するための方法のキーである。 バーチャルソース: プログラムのバーチャルソースは、コンパイラがプログ ラムを表すシンタックスツリーを作るために記述するトークンの流れである。バ ーチャルソースは単一のソースファイルの原文形に必ずしも存在しない;トーク ンの流れが一連のマクロ拡張、マクロ仮パラメータの置換、及びソースの包含に よって作られる。 フラグメント: フラグメントはマクロ拡張、マクロの実パラメータの置換、 或いはソースファイルの包含の結果を表す。これらのプリプロセッサのメカニズ ムは、ソースファイルの何処にでも現れ、統語上の構成のあらゆる部分を生じる ;それらは統語上の構成の境界を守る必要がない。 フラグメントツリー: フラグメントツリーはマクロ、実際のマクロパラメー タ及びプログラムのバーチャルソースを作成するために、スキャナー或いはプリ プロセッサによって用いられたソースの包含を表す。 フラグメントの一致 ロゼッタトランスレータは目的言語のフラグメントの原文表現をつなぎ合わせ て、例えばマクロ本体の原文表現をその定義に合わせて、目的言語出力ファイル を生成する。ロゼッタトランスレータの設計は、各ソース言語のマクロが一つの 目的言語のマクロに正確に写像するのことを要求するので、それは、あらゆるマ クロの使用が原文上同一であることをチェックして、使用の全てのコンテクスト においてマクロテキストが“働く”ことを保証する。実際のマクロパラメータは マクロ本体自身に制限され、ロゼッタトランスレータは、与えられたマクロ拡張 内で仮パラメータの全ての拡張が原文的に同一であることをチェックする必要が あるだけである。 パンや新規なセマンティック情報を含むフラグメント 2つの異なる動作を表現するためのシンタックスは目的言語においては異なる が、ソース言語においては同じである場合、フラグメント翻訳はあらゆるコンテ クストの使用においては“働かない”かもしれない。自然語としてのプログラミ ング言語において、パンはうまく翻訳しない傾向にある。タイプの両立性ルール は2つの言語間で異なると、タイプのキャストは多重タイプと共に用いられるマ クロに不一致を生じる。翻訳されたコードがオリジナルのコードからの異なる文 章上の情報を必要とすると、異なるコンテクストの使用も不一致を生じる。 次の例は誤り条件を示す:同じマクロの2つの表現の翻訳は、異なるマクロ本 体のテキストを生じる。マクロ本体の全ての例は、出力ソースの発生前に一致性 のためにチェックされなければならない。ロゼッタトランスレータは、この例に おいては異なるPTAL特徴のエミュレーションを包含する“_redef”及び“ _obitfield”のようなマクロのリファレンスを生成する。この場合、整数フィ ールドはビットフィールド“k”を全てオーバーレイする。この“_tobitfield ”マクロはパラメータとして周りのクラスタイプの名前を取る。その名前はマク ロの2つの使用に対して異なっている:“f_”対“g_”。次の例は、2つの 使用が一致しないマクロ本体テキストを生じるマクロを示す;不一致のトークン は、ボールドで表される。 例1:不一致のぼやけたフラグメント境界を生じるマクロ及び2つの使用 構成の翻訳がフラグメント境界をぼやけさせたならば、翻訳されたフラグメン トツリーは、あたかもフラグメントの2つの例が作られたようにみえ、これらの フラグメントの内容は原文的に同一でない。フラグメント境界の違反は、働かな いパンを検出する同じフラグメントの一致性のチェックによって検出される。次 の例は不良に形成されたマクロの使用におけるぼやけたフラグメント境界を示す 。 順位ルールが2つの言語間で異なっていると、オリジナルの表現の文章を保存 するために括弧を導入することは、一致性の違反へ導く。PTAL言語は追加のオペ レータより左のシフトオペレータへ高い順位を割り当てる。C++ 言語は左のシフ トオペレータより追加のオペレータへ高い順位を割り当てる。括弧は表現の目的 言語バージョンに現れて、評価の順位を保つ。括弧のトークンはフラグメントの 割り当てを決定する高い順位のオペレータからたまたま発生される。 例2:低い順位オペレータを含むマクロ 前の例の翻訳は同一のテキストを含まない実際のパラメータフラグメントの2 つの例を有するように見えるC++に生じる。不一致に翻訳されたマクロ及びマクロの実際のパラメータを最小にすること 不一致に翻訳されたマクロ本体とマクロの実際のパラメータは、可能な場合に 、トークンマッピングアルゴリズムに特定なルールを構築することによって最小 にされる。マクロ拡張の内部にあるとき、発生されたコード上で変換を簡単にすることを抑 制する 一般に、シンタックスの変換は、発生されたコードがマクロ本体の拡張 或いはマクロのフォーマルなパラメータ拡張の内側にあるか否かに敏感でない。 構成上の翻訳を行う或るルーチンは、それらがフラグメントを翻訳しないけれど も、フラグメント境界に敏感である。これらのルーチンは、異なるマクロ呼出し のための翻訳を原文的に同一にするために、マクロ拡張やマクロのフォーマルな パラメータ拡張内で変換を単純化することを抑制する。例えば、テキストの“ar rayvar[0]”を“arrayvar”に単純化する変換は、インデックスがマクロパラメ ータにあるとき、マクロ内で抑えられる。同様に、テキスト“(*ptr).field”を “p->field”へ単純化する変換は、“*p-”が実際のマクロパラメータであると きに、抑制さられる。 可能な場合、マクロのインボケーション間で異なるトークンを実際のパラメー タへ吸収する ソース言語のトークンがそれら自身の論理的な翻訳ばかりでなく 、あるアテンダントバッゲジ(attendant baggage)も発生する。そのバッゲジが 同じマクロの2つの異なるインボケーションにおいて相違しているならば、バッ ゲジがマクロ本体より実際のパラメータに写像されるかどうかは問題でない。例 えば、適切なオペレータの順位を強制するために発生されるC++括弧は、それら がPTALの実際のパラメータトークンからのみ発生されたC++トークンを囲むなら ば、翻訳された実際のパラメータへ吸収されるべきである。 同様に、C++“*”オペレータが実際のマクロパラメータにある無条件に参照さ れないポインターの翻訳に発生されるなら、“*”オペレータは、非ポインター 変数がマクロへ通過されるように、翻訳された実際のパラメータに吸収されるべ きである。 マクロのインボケーション間で異なるトークンをマクロインボケーションを含 むフラグメントへ追放する 前の記載と同様に、もし異なっているトークンがマ クロ本体のC++のエッジ上にあるなら、それらが外部で写像されるかどうかは問 題でない。例えば、発生されたテキストはマクロインボケーションシンタッスへ 与えられた型式キャストを示すべきである。不一致に翻訳されたマクロと実際のマクロパラメータのための救済策 トークンアソシエーション(token associations)の注意深い設計は、ソース言 語における共通コーディングの実際を考慮して、フラグメントの不一致問題が稀 な事象であることを保証するが、それはあらゆる可能性の問題を防ぐことはでき ない。不一致に翻訳されたマクロ或いは実際のマクロパラメータが発生すると、 ユーザーは3つの救済策から選ぶことができる。救済策のおのおのは、あらゆる フラグメントの不一致問題を解決することができる。もし、問題のマクロがエク スポートされなら、オリジナル言語の具現化においてマクロインターフェイスを 変更することは通常不可能である。翻訳が“作動する”ようにマクロ自体を再コードする もし、マクロの本体を再 コードすることが問題の構成を避け、インターフェイス或いはマクロの使用を妨 害しないならば、これは実行可能である。もし、マクロの要求を再コードするこ とが使用の全ての点において変わるなら、これは実行可能な解決策ではないかも しれない。マクロの全ての拡張のためにロゼッタトランスレータを許可する これによって、問題を含んだマクロを実行しないという犠牲を払ってあらゆる フラグメント不整合の問題を解消する。このマクロがソフトウエアの有用性、持 続性、読取可能性を改善するのに有用であった場合、あるいはこのマクロが輸出 されたものである場合には、これは、望ましい解決手段ではない。プロダクトメ インテナーがこのマクロを保存することに興味を持っていない場合には、これは 有効な解決手段である。以下は一例である。 例3:マクロを拡張する 相違点を封入するための追加マクロパラメータを作成するためにロゼッタトラン スレータを許可する これによってあらゆるフラグメント不整合の問題を解消する。プログラマーが 書くよりも感度が低い目標言語コードで実際のパラメータを作成する可能性を有 する。例1から不整合が生じているマクロボディの例を呼出して、相違点を以下 の例で示すように封入することができる。 例4:テキストの不整合を封入する マクロボディ不整合及び実際パラメータ不整合を封入すること このセクションでは、マクロの2つの拡張子の間のテキスト不整合を封入する ために必要な目標言語フラグメントツリー変換を説明する。テキスト不整合 ロゼッタトランスレータが、それぞれのソース言語マクロに対応する1つの目 標言語マクロを正確に生成するようになっているので、それぞれのマクロボディ とそれぞれのマクロ実際パラメータのすべての目標言語の場合について一致性チ ェックを実行し、それらは使用されているすべてのコンテックストにおいて同じ 目標言語テキストに翻訳するのを保証する。もしそれらが一致しない場合には、 エラーの状態である。例1はこのエラーの状態を示す。 1つのマクロの2つの拡張子の間に不整合が生じると、ロゼッタトランスレー タは異なるトークンの続きを計算する。この相違は以下のものと思われる。括弧 のついたトークンは不整合の境界であり、新たな実際のパラメータには含まれて いない。もし1つのトークンの続きがエンプティである場合には、その境界トー クンはフォーマルなパラメータがどこに位置するかを示す。 例5:トークンの相違 フラグメント不整合が目標言語マクロボディあるいはマクロ実際パラメータに 発生した場合には、ロゼッタトランスレータはその相違を封入するためにユーザ ーが新たなフォーマルなパラメータを特定することによってこの問題を解決する 診断提案をエミットする。ゴーストパラメータを特定する 翻訳されたマクロの定義と実施においてパラメータのテキストの相違の封入は 異なる拡張子のテキスト上の不整合翻訳から生じるエラーに対して有効な解決方 法である。この新しいパラメータを“ゴースト”パラメータとよぶ。 ユーザーはマクロの定義における特別のコメントで意味のあるフォーマルなパ ラメータの名称を特定する。このコメントはオリジナルソースコードの挙動を混 乱させるもノデハない。以下の例はゴーストパラメータの特定を示す。 例6:ゴーストフォーマルを特定する ゴーストパラメータはマクロの翻訳された目標言語バージョンに存在する。。 ゴーストフォーマルパラメータ名称をと特定するコメントのみがソース言語コー ドに現れる。不整合を封入するためにゴーストフォーマルの使用を導入する マクロ拡張におけるテキスト上の相違を例1から呼び出す。 例7:2つのマクロの使用 図9及び図10のC++フラグメントサブツリーはマクロ拡張の2つの場合が テキスト的に整合しないトークンの続きを含むことを示している。 ロゼッタトランスレータは、図11及び図12に示すように目標言語フラグメ ントツリーを調整して、ゴーストフォーマルパラメータの使用をする。破線は実 際のパラメータの場合を示す。 ロゼッタトランスレータはゴーストパラメータを代用した後以下のテキストを 発生する。 例8:Generated C++ テキストゴーストフォーマルの使用を後のマクロ拡張に伝搬させる ゴーストフォーマルの使用がマクロ拡張に導入される場合には、そのごそのマ クロのすべてのたの拡張子は類似のゴーストフォーマルの使用に習うようにしな ければならない。そのマクロのたのフラグメントを表す拡張子とそのフォーマル 使用が導入されるフラブメントとの比較によってそのフォーマルの使用と他のフ ラグメントの封入を待っているトークンとの間のテキスト的な不整合が判明する 。たとえば、もし、マクロ“フィールド”が第3の場所で使用された場合には、 その後それぞれのマクロ拡張におけるトークンの比較によってそのフォーマルパ ラメータを表すトークンとそのフォーマルの新たな使用の中に封入されるべきト ークンとの間の不整合が明らかになる。 例9:代用の後の最初のものと比較される第3のマクロの使用 相違は以下のように現れる。括弧付のトークンは同期点である。 例10:トークンの相違 ロゼッタトランスレータは第1の異なる結果における唯一のトークンはマクロ フォーマルパラメータの名称であり、そのパラメータにおいてトークンを封入す る第2のフラグメントに新たなフォーマルの使用を導入する。 実例11:伝播仮パラメータの使用 前述したように、使用されていないマクロの本体は翻訳されず、マクロ定義を 含む共通インターフェイスファイルは、それらを使用するモジュールを翻訳する 側面効果として、インクレメント的に翻訳されがちである。ロゼッタトランスレ ータは、各マクロ体と、もし、前の翻訳セッション中に発生されたものがあるな らば、その発生されたものとの間の一致性のチェックを行なう。これは、最後の 実例に示されるように、前の翻訳セッションからのゴースト仮パラメータ使用を そのマクロの本体の現在の翻訳へと伝播させなければならない。 図17は、第2のマクロ拡張で差を封じ込めるためにフォーマルが加えられた マクロ拡張を例示している。図18は、第3のマクロ拡張を例示している。第1 のマクロ拡張からのフォーマル使用が第3のマクロ拡張へと伝播され、図19に 示したマクロ拡張が与えられる。仮パラメータの多重使用 多重の不一致が逐語的に同一であるときには、それらは、同じ仮パラメータに おいて封じ込まれうる。例えば、定義「フィールド」がビットフィールドをオー バーレイする2つの整数フィールドを含むように拡張されたならば、2つの逐語 的に同一の不一致がある。差の両方のセットは、1つのゴーストパラメータで解 決されうる。pTAL マクロ C++ マクロ pTAL コード C++ コード 実例12:発生C++ テキスト 図13および図14は、既存のフォーマル使用でのフラグメントの2つの例に おける逐語的不一致を例示している。図15および図16は、その逐語的不一致 を包み込むための仮パラメータの再使用を示している。次の実例コードが、これ らの図に例示されている。pTAL マクロ pTAL コード pTAL 拡張 C++ 拡張 C++ コード C++ マクロ 実例13:仮パラメータの再使用 実際のパラメータ不一致 ロゼッタトランスレータが同じマクロ拡張におけるマクロ仮パラメータの2つ の拡張の間に不一致を検出するとき、潜在的なエラー状態がある。また、もし、 新しいフォーマルが利用しうる場合には、それらパラメータのうちの一つの代わ りに、その新しいフォーマルを置き換えて使用する。 技術用語の語彙 オーグメンテーション(Augmentation) コンテキスト“インボケーション表現オーグメンテーション”におけるよう に、オーグメンテーションは、付加的表現エレメントを加えることを意味してお り、例えば、付加的な実際のマクロパラメータをマクロ呼出しである呼出し表現 へと加えることを意味している。 自動トランスレータ(Automatic Translation) 一つのプログラミング言語(「ターゲット言語」)で書かれたコンピュータ プログラムを、別のプログラミング言語(「ソース言語」)での語義的に等価な プログラムに翻訳または変換するコンピュータプログラム。 C++ ロゼッタトランスレータがそのターゲット言語として使用する工業標準プロ グラミング言語。 キャスト(Cast) 「タイプキャスト」と同じ。 コードファイル(Code File) マシン命令を含むファイル;通常、コードファイルは、ランダムアクセスメ モリへロードされ、コンピュータによって直接的に実行されうる。 コメント(Comment) コンパイラによって無視され、したがって、プログラムが実行されるときに 実際に行われることに対して影響を及ぼさないコンピュータプログラム内に置か れた説明的テキスト。コメントは、コンパイラが知ってそれらを無視しうるよう に特定的に境界を定められねばならない。例えば、C++においては、文字対「 /*」と「*/」との間のテキストは、コメントとして処理される。 コメント機構(Comment Mechanism) コメントがプログラムソースにおいて境界を定められコンパイラによって無 視されるようにする手段。「コメント」を参照。 コンパイル(Compilation) コンパイラがあるプログラムソースを実行しうるコードファイルへと変換す るプロセス。 コンパイラ(Compiler) 編集のプロセスを行なうプログラム。大抵の場合、コンパイラは、プログラ マーによって直接的に書かれたプログラムソースからコンピュータによって直接 実行するのに適したコードファイルへと翻訳するのに使用される。 コンパイラ指令(Compiler Directive) 編集されるべきプログラムのリストが発生されているか否かの如きコンパイ ラの挙動のある特徴を制御する、典型的には、実際のプログラミング言語の外で あると考えられるプログラミング言語構成。 コンピュータプログラミング言語(Computer Programming Language) あるコンピュータプログラムが特定されうるルールのセット。これらのルー ルは、メモリ場所がどのように命名されるか、また、これらの場所におけるデー タに対してオペレーションがどのように行われるか、のようなことを指定する。 コンピユータ言語(Computer Language) 「コンピュータプログラミング言語」と同じ。 コンピュータプログラム(Computer Program) コンピュータのオペレーションを制御するための命令のセットに対する総称 。用語「コンピュータプログラム」は、プログラマーによって書かれたようなプ ログラムソース、または、プログラムを編集することによって形成されるコード ファイルを示すのに使用される。 条件付き編集機構(Conditional Compilation Mechanism) プログラムテキストの特定のセクションが、命名または番号付けされたスイ ッチのセッティングに依存して、コンパイラによって無視されるべきか否かを指 定する手段。このような領域は、そのスイッチを命名する特殊マーカーによって 特定的に境界を定められる。条件付き編集は、例えば、異なるスイッチセッティ ングで編集されるときに、わずかに異なった挙動をするプログラムを得 るのに有用である。 使用のコンテキスト(Context of Use) ある構成が使用されているプログラムソースのポイントでの「インスコープ 」である識別子のセット。包含構成内におけるその構成の相対位置が、その「使 用のコンテキスト」と称される。 定義(Define) 「マクロ」の同意語。 封じ込み(Encapsulation) 比瞼的に、包みまたはカプセル内に物を隠すこと。「フラグメント差を封じ 込む」のコンテキストにおいて、これは、元の仮想フラグメントの両方に対して 同じであるインボケーションシンタックスを有する挿入仮想フラグメントにて同 じスタチックフラグメントに対応する別の仮想フラグメントのトークンのサブシ ーケンスと異なる1つの仮想フラグメントのトークンのサブシーケンスを表すこ とによって行われる。これは、2つの仮想フラグメントのテキスト差を効果的に 隠し、または包み込む。例えば、もし、2つの仮想フラグメントがマクロである 同じスタチックフラグメントの例であるが、これら2つの仮想フラグメントのテ キストレンダリングの間にテキスト差がある場合には、この差は、マクロ実パラ メータ置換にて包み込まれうる。各仮想フラグメントは、新しい仮パラメータの 名であるインボケーションシンタクッスを有する新しい仮想フラグメントを得る 。これが、異なるトークンサブシーケンスに代わり、そのコールの場所でのマク ロのインボケーション表現をオーグメントするマクロ実パラメータとなる。 フラグメントの封じ込め(Encapsulating Fragment) 同じ構文フラグメントの例である2つの仮想フラグメントの間の違いを封じ 込めるのに使用されるフラグメント。上記「封じ込め(Encapsulation)における 説明を参照。 ファイル(File) 常時磁気ディスクのような耐久媒体により保持されているコンピュータメモ リ。ファイルは通常名前により探索可能であり、生成、書き込み、読み出し及 び削除が可能である。 フラグメント(Fragment) フラグメントはマクロ拡張、マクロ実パラメータ置換又はソースファイル内 包から得られる順序付けされたトークンシーケンスを表す。これらのプリプロセ ッサ機構はソースファイルの何処にも現れ、構文構成(syntactic construct)の 任意の部分を生成することが可能であり、構文構成境界を尊重する必要はない。 フラグメントはネストフラグメントのための呼出し表現を表すトークンを含んで もよい。 フラグメント境界(Fragment Boundary) フラグメントを形成する連続順序トークンシーケンスの最初と最後のトーク ン。 フラグメントツリー(Fragment Tree) フラグメントツリーは、プログラムソースファイルをプログラムの仮想ソー スに変形するためにスキャナ又はプリプロセッサにより用いられたマクロ拡張、 マクロ実際パラメータ置換及びソースファイル内包を表す。 フラグメント不一致(Fragment Mismatch) 同じスタティックフラグメントの2つの例の翻訳が同一のテキストを持たな いならば、そのテキストの違いをフラグメント不一致という。 ゴースト仮パラメータ(Ghost Formal Parameter) 目的言語テキストに存在してソース言語テキストに存在しないマクロ仮パラ メータ。 高水準コンピュータプログラミング言語(High-Level Computer Programming Lan guage) 翻訳される命令セットから比較的独立したコンピュータプログラミング言語 。高水準コンピュータ言語は、2つ以上のブランドやモデルのコンピュータで翻 訳実行できるので良好である。 例(Instance) プログラミング言語構成の例示。例えば、プログラムソースの異なる場所に おいてマクロ「m」が10回使用される場合には、各使用のポイントは、その 使用により発生されたテキストをプラスして、計10例についてマクロの単一の 例を形成する。 呼出し表現(Invocation Expression) コンパイラ又はテキストプリプロセッサが特定のテキスト置換を行うべきこ とを表示するトークンシーケンス。例えば、呼出し表現のポイントにおいてソー スファイル‘f.h’の内容を置換すべきことを表示するプログラミング言語C++に おける呼出し表現は'#include“f.h”である。 マシンコード命令(Machine Code Instruction) (「機械命令」の説明参照)コンピュータが直接実行できる動作の仕様。例 えば、2つのメモリのレジスタの内容を加えること。 機械命令(Machine Instruction) 「マシンコード命令」と同義語。 マクロ(Macro) (「定義」(define)参照)コンパイラ又はプリプロセッサがプログラムソー ス内で名前の使用に代用するであろう命名されたトークンシーケンス。マクロは 、マクロの定義で特定された名前である仮パラメータを有してもよい。仮の名前 の各々について、別のトークンシーケンスがマクロ呼出しの場所に与えられなけ ればならない。コンパイラ又はプリプロセッサは、仮の名前がマクロ定義に使用 されるマクロ拡張のポイントにおいてこれらの後者のシーケンスを置換するであ ろう。 マクロ実パラメータ(Macro Actual Parameter) マクロ呼出しの場所において与えられたトークンシーケンスは、マクロの定 義で特定されたマクロ仮パラメータに対応する。対応関係が位置的に確立される 。マクロ本体において第1のマクロ仮パラメータが命名されるポイント毎に第1 のトークンシーケンスが置換される等。 マクロ実パラメータ置換(Macro Actual Parameter Substitution) マクロ拡張内でマクロ仮パラメータをマクロ仮想パラメータで置換すること により生成されたプログラムソースのフラグメント。 マクロ拡張(Macro Expansion) プログラムソースにおいてマクロが命名されているポイントにおいて、マク ロの本体であると定義されるトークンシーケンスを置換することにより生成され たプログラムソースのフラグメント。 マクロ仮パラメータ(Macro Formal Parameter) マクロ定義で宣言され、マクロの本体で0又はそれ以上の回数使用(命名) されたた識別子。マクロ本体で仮パラメータが命名される各ポイントにおいて、 対応するマクロ実際パラメータとしてマクロ呼出しのポイントにおいて与えられ るトークンシーケンスはマクロ拡張内で置換されるであろう。 マクロインターフェイス(Macro Interface) マクロを呼び出す構文。これは常にマクロの名前を含む。これは、マクロの 定義に特定されたマクロ仮パラメータがあるならば、マクロ実際パラメータの挿 入されたリストを含む。各仮パラメータについて1つの実際パラメータがなけれ ばならない。 マクロ呼出し(Macro Invocation) プログラムテキスト内でマクロ名前を使用することにより、プリプロセッサ 又はコンパイラがプログラムソースのポイントにおいてマクロの本体を置換する 。 マクロ機構(Macro Mechanism) プログラムソースの処理においてマクロを特定し、呼出し及び拡張する手段 。 オーダ隣接子(Order-Adjacent Children) 階層ツリーにおいてノードの子の浅いインオーダトラバーサルを行うコンテ キストにおいて、オーダ隣接子は、子の任意のサブセットである。そのサブセッ トのメンバーは、サブセットにないノードの任意の子を訪れることなくすべてイ ンオーダトラバーサルにより訪れられる。 パージング(Parsing) ソースプログラムの構文構造を決定する手段。比喩的表現では、ソースプロ グラムが本の語のようなものとすれば、ページングは、本の文章、段落、節及び 章の構造を認識する手段として働く。実際には、プログラムソースのページング は、再帰下向き、LL(1)パージング及びLR(1)パージングのよう な多くの代替方法により行われる。Aho,Sethi,and Ullman,Compilers:Princi ples,Techniques,and Tools,Addison-Wesley,1985参照。 定義のポイント(Point of Definition) 構成が最初に命名された或いは特定されたプログラムソースにおけるポイン ト。 プリプロセッサ特性(Preprocessor Characteristics) 「仮想ソース生成機構」と同義語。 プリプロセッサ言語(Preprocessor Language) コンパイラ又はプリプロセッサがプリプロセッサ言語を翻訳する規則。 プリプロセッサ機構(Preprocessor Mechanism) 「仮想ソース生成機構」と同義語。 プログラム(Program) 「コンピュータプログラム」と同じ。 プログラムソース(Program Source) コンピュータプログラムを表すテキストが存在するメモリ(1つ以上のソー スファイル)。 プログラミング言語(Programming Language) 「コンピュータプログラミング言語」と同じ。 プログラマ(programmer) コンピュータプログラムを書く人。 専有高水準言語(Proprietary High-Level Language) 定義がパブリックドメインでなく一定の会社により所有されるプログラミン グ言語。専有言語は通常特定の目的で開発されるか又は履歴アーティファクトで ある。 Ptal−「ポータブルトランザクション応用言語」(Portable Transaction Appli cation Language) ロゼッタ(Rosetta)トランスレータが工業標準プログラミング言語“C++”に 翻訳する専有プログラミング言語。 ロセッタトランスレータ(Rosetta Translator) 本願発明を実施するタンデムコンピュータの製品。それは、古代エジプト語 を解釈するカギーであった「ロセットストーン」にちなんで命名された。 走査(Scanning) 一度にコンピュータプログラムのテキストを検査して隣接した文字グループ をトークンと認識するコンピュータ方法。 スコープ(Scope) 識別子が或る意味を持つように認識されるプログラムテキストの領域。例え ば、マクロ仮パラメータのみがマクロ本体内に「スコープ」を有し、マクロ定義 のフロントの前にもエンドの後にも認識されない。 意味解析(Semantic Analysis) プログラムの正しいコードファイルを発生するために必要なプログラムに関 する追加情報を決定するためのコンパイラによる構文ツリーの処理。 浅いインオーダトラバーサル(Shallow In-Order Traversal) 階層ツリー構造のコンテキストにおいて、ツリー内のノードからの浅いイン オーダトラバーサルがファーストツウラストオーダにおけるノードのイミディエ ートチルドレンを訪問する。このオーダリングは通常、最初整然としているチャ イルドノードをノードの左端チャイルドとして配置し、その直ぐ右側に次のチャ イルドノードを配置することにより図解的に表される。 ソースコード(Source Code) 翻訳されるプログラムのプログラムソース。 ソースファイル(Source File) コンピュータメモリ−−磁気ディスクのような耐久性のある媒体に通常保持 される−−プログラムソースの一部または全部が保持される。 ソースファイル内包(Source File Inclusion) 構成体において命名されたソースファイルにより含まれるトークンシーケン スがプログラムソースにおいてソースファイル内包仕様と置換されるべきことを 特定するプログラミング言語構成。 ソース内包機構(Source Inclusion Mechanism) ソースファイル内包をプログラムソースにおいて特定しコンパイラ又はプリ プロセッサにより実行する手段。 ソース言語(Source language) 翻訳すべきプログラムを特定するコンピュータプログラミング言語。 ソース言語テキスト(Source Language Text) ソース言語で特定されるプログラムソース。 標準化高水準言語(Standard High-Level Language) 定義がパブリックドメインにあり、1以上の公式又は事実上の標準により特 定されるコンピュータ言語。通常多くのブランド又はモデルのコンピュータに関 する標準言語に利用できるコンパイラがある。 スタティックフラグメント(Static Fragment) 仮想ソース生成機構が呼び出されるときに置換されるべきトークンシーケン スを特定するプログラムソースの部分。 サブツリー(Subtree) ツリーのノード、そのノードの子孫の全て及びさらにその子孫の全てを加え たもの。 構文構成(Syntactic Construct) あるコンピュータ動作を特定するトークンシーケンス。構成の例はメモリロ ケーションの命名及びそれらのロケーションにおける算術演算の実行を含む。 シンタクチック構成体境界(Syntactic Construct Boundary) シンタクチック構成体の使用を指定するのに使用された最初と最後のトーク ン。 シンタックス(Syntax) プログラム言語中の構成体を指定するためプログラムソース中のトークンが 解釈される規則。 ターゲット言語(Target Language) ロゼッタ等の言語−言語トランスレータにより生じるコンピュータプログラ ム言語。(それゆえ、言語"aimed at"は、ターゲット言語) ターゲット言語コード(Target Language Code) ターゲット言語内の翻訳されたコンピュータプログラムのテキスト仕様書。 ターゲット言語出力ファイル(Target Language Output Files) ターゲット言語内のプログラムを表すソースファイル。翻訳プロセスの結果 (出力)であるので、「出力ファイル」と呼ぶ。 ターゲット言語テキスト(Target Language Text) ターゲット言語コードの同義語。 ターゲット高水準言語(Target High-Level Language) プログラムが翻訳されるコンピュータプログラム言語。 テキストミスマッチ(Textual Mismatch) 同じ相対的オフセットで2つのフラグメント間で同じでない1つ又はそれ以 上のキャラクターを有すること。 トークン(Token) 単一のシンボル、定数、演算子、句読点を形成するプログラムソース中の隣 接するキャラクターの集合。 翻訳(Translation) 1つのプログラム言語で特定されたプログラムを他のプログラム言語で表現 された同等のプログラムにするプロセス。 翻訳セッション(Translation Session) 言語間トランスレータの1つの実行。1つのセッションが多くのソースファ イルを翻訳する場合がある。 ツリー(Tree) 「ルート」と分かる単一のノードを有する有向非輪グラフ。 ツリーサージェリ(Tree Surgery) 有効な階層的ツリーデータ構造を他の異なる有効な階層的ツリーデータ構造 を生じるように改変すること。この特許の文脈では、ツリーサージェリは、フラ グメントツリー中にフラグメントの封じ込めを挿入するため、より一般的にはシ ャロー−インオーダー−トラバース−レコンシレーションを挿入するため行われ る。 タイプキャスト(Type Cast) 1つのデータ形(例えば、整数)のオペランドを他のデータ形(例えば、実 数)に変換し扱うことを指定するプログラム言語の実行。 タイプ互換性規則(Type Compatibility Rules) 異なるタイプのオペランド(例えば、英数字、整数、実数)が計算、比較、 データ移動等の実行で共に使用できるかを制御する(通常使用されるコンパイラ で実施される)プログラム言語規則。 仮想フラグメント(Virtual Fragment) 仮想ソース生産機構の呼出しから直接生じるトークンの列。 仮想ソース(Virtual Source) プログラムの仮想ソースは、プログラムを表すシンタックスツリーを生じる ためコンパイラがパーズするトークンの流れ。仮想ソースは、必ずしも単一のソ ースファイル中にテキスト的な形式では存在しない。トークンの流れは、一連の マクロ拡張、マクロ形式パラメータ置き換え、ソース包含により生じる。 仮想ソース生成機構(Virtual Source Production Mechanism) ソースファイル包含、マクロ拡張、マクロ実際パラメータ置き換えを含むプ ログラム言語中のテキスト置き換えを指定するあらゆる手段。コンピュータプロ グラム中の全てのこのような手段の結合の結果のテキストは、手段は集合的に「 仮想ソース生成機構」と呼ばれるので、「仮想ソース」と呼ばれる。 イールド(Yield) 階層的ツリーのノードの子供のシャロー−インオーダー−トラバースを行う 状況では、「イールド」は、それぞれの子供が訪問されるとき得られる利益の価 値の列である。例えば、仮想フラグメントツリーでは、仮想フラグメントを表す ノードからのシャロー−インオーダー−トラバースは、ノードの直接の子孫であ る下位の仮想フラグメントとトークンを訪問する。下位の仮想フラグメントの利 益の価値は、これらの下位のフラグメントの呼出しの表現のテキストである。ト ークンの利益の価値は、トークンを表すのに必要なテキストである。トラバース の全体のイールドは、表される仮想フラグメントを作り上げる呼出し表現とトー クンの指示されたテキストである。 好適な実施例 従来のツリーデータ構造を図1に示す。このデータ構造の目的は、「物事」の セット即ち階層内の対象物を関係付けることである。ルートノードと呼ばれるこ のセットの1つの対象物は、頂点にある。ブランチと呼ばれるリンクは、ルート からノードと呼ばれる他の対象物に接続する。次に、ノードはリーフと呼ばれる 対象物のセットで終了する他のノードに枝分かれする。ツリーをルートからリー フに見ると、ブランチの1つの経路を辿ると、ノードは互いの先祖である。逆に ツリーをリーフからルートに見ると、再度1つの経路を辿ると、ノードは互いの 子孫である。任意のノードを選択すると、ノードの子供はルートに向かって枝分 かれし、ノードの親はリーフに向かって枝分かれすると考えられる。ツリーにサ イクルはない。対象物は直接的にも間接的にもそれ自身の先祖となることはない 。 図2A、2B、2C、2Dは、従来技術に対する本発明の寄与を表す。それは 、「ツリーサージェリの封じ込め」と言われる。図2Aと2Bを参照すると、第 1と第2のツリーが示される。第1のツリーにデータ項目Cを含むノードがあり 、第2のツリーに同じデータ項目Cを含む第2のノードがある。ツリーサージェ リの目的は、個々のシャロー−インオーダー−トラバースが正確に対応するノー ドのセットを生じるように第1と第2のツリーを変化させることである。図2C と2Dに示すように、これは、次により達成される。 −−第1、第2のノードから異なる下位を除去するが、順序を保ち、捨てない 。 −−第1ノードの子供としてデータ項目Mを有するサブノードを作る。 −−第2ノードの子供として同じデータ項目Mを有する第2サブノードを作る 。 第1サブノードの第1ノードの子供から除去されたものから異なる子孫を作る 。 −−第2ノードから除去された図2Cの第2サブノードMの子供である子孫D とEを図2Aの下位に付ける。 図3は、図1のデータ構造を組み込んだ全体を参照番号50Aで示されるコン ピュータ装置の簡略化したブロック線図である。図3に示すように、コンピュー タ装置50Aは、バス構造58Aによりメモリ−54Aと入力/出力チャンネル (IOC)56Aに接続された中央演算ユニット(CPU)51Aを備える。次 に、IOC56Aは、入力/出力60AによりCPU51Aをデータ記憶領域 62Aに接続する。データ記憶領域62Aは、磁気ディスク媒体記憶デバイス、 電子記憶、又は他の記憶領域への通信リンクの形をとることができる。 図4に示すように、本発明のソースコードからソースコードへのトランスレー タは、簡略化した形では親出願のトランスレータの流れに従う。主な違いは、3 6a、36b、41a、41bで示すような一致のチェックを行う一方で、封じ 込めの追加のステップがあることである。 図5は、異なる翻訳セッションで生じる静的フラグメントの一致のチェックを 行うフローチャートである。プログラムは、多くのファイルからなり、幾つかは 異なるセッションで翻訳される場合がある。全ての翻訳は、個々の静的フラグメ ントの同じ定義を共有しなければならない。それゆえ、静的フラグメントの全て の翻訳は一致をチェックする必要がある。その方法は、フラグメント間の違いを 計算すること、呼出し表現を指定すること、トークンをマッチさせること、異な るトークンの部分列の封じ込めすることを備える。 図6は、現在の翻訳セッション内で生じた仮想フラグメントの一致のチェック を行うフローチャートである。プログラムソースの個々の静的フラグメントは、 その翻訳はターゲット仮想フラグメントツリーの仮想フラグメントである多くの 例を有する場合がある。これらの(参照例と呼ばれる)例の1つを行うテキスト は、ソース静的フラグメントの翻訳であるターゲット静的フラグメントになり、 全てのターゲット静的フラグメントの例である仮想フラグメントを正確に表さな ければならない。それゆえ、個々の静的フラグメントの全ての翻訳は、一致をチ ェックしなければならない。個々を行うテキストは、参照例を行うテキストとテ キスト的に同じでなければならない。 図6に示す方法は、フラグメント間の違いを計算すること、呼出し表現を同定 すること、トークンをマッチさせること、異なるトークンの部分列の封じ込めを することを備える。 図7は、トークンの部分列の封じ込めのフローチャートである。図2A、2B 、2C、2Dに示すツリー封じ込めサージェリの方法の実行である。制御は、末 端ブロック680で始まり、直ちに機能ブロック681に行き、そこで同定され たトークンが存在する第1フラグメントが得られる。機能ブロック683で、静 的 フラグメントの例である封じ込めフラグメントが生じる。次に、機能ブロック6 85で、封じ込めフラグメントの呼出し表現が作られる。機能ブロック687で 、呼出し表現は封じ込めフラグメントにリンクされる。機能ブロック689で、 第1フラグメントから同定されたトークンが除去される。機能ブロック691で 、第1フラグメントの除去された同定されたトークンが占めていた場所に呼出し 表現が追加される。最後に機能ブロック693で、同定されたトークンが封じ込 めフラグメントに置かれる。 図8は、共有されたソースファイルの2つの翻訳の間の一致のチェックを実行 するトランスレータの2つの実行を示す簡略化した例である。2つのソースファ イル701と703は、トランスレータセッション705の入力である。トラン スレータセッション705は報告707、ソースファイル701の翻訳709、 ソースファイル703の第1の翻訳713を作る。次に、2つのソースファイル 711と713がトランスレータセッション715の入力となる。トランスレー タセッション715は報告717、ソースファイル711の翻訳719、ソース ファイル703の第2の翻訳721を作る。翻訳721は、翻訳713に取って 代わる。即ち、翻訳721は翻訳713に含まれていた有効な静的フラグメント 翻訳以上のセットを含む。 図8は、ロゼッタトランスレータの2つの呼出しを例示する。第1の705は 、第1の入力ファイルとして"myprog"701を取り、それが次にテキストファイ ル"incl1"703のソースとなる。 第1の翻訳セッション705の後、プログラムが使用したマクロが翻訳され、 プログラムが使用しなかったマクロは翻訳されない。この翻訳セッションは、C+ +コード化“myprog”ファイル709と C++ コード化“incl 1”713とを生 成する。 第2の翻訳セッション715は、一次入力ファイルとして、pTALプログラムフ ァイル“hisprog”711をとり、これが、pTALファイル“incl 1”703のソ ースとなる。pTALファイル“incl 1”は一部が翻訳されているため、第2翻訳セ ッション715は、一貫性検査をすることができるように、入力として“incl 1 ”703のC++ コード化バージョンをとる。 第2翻訳セッション715の後、先に翻訳されたプログラムが使用したマクロ が翻訳され、翻訳プログラムが使用しなかったマクロは翻訳されない。この第2 翻訳セッションは、C++ コード化“hisprog”ファイル719と増大したC++ コ ード化“incl 1”721とを生成する。 図9は、仮想のフラグメントツリーの1例である。図10は、仮想のフラグメ ントツリーの第2の例であり、図9の仮想フラグメントツリーが1例であるのと 同じ静的フラグメントツリーの例である。図9及び図10のフラグメントサブツ リーは、マクロ拡張の2つの例がテキスト的にはマッチしていないトークンのシ ーケンスを含むことを示している。 図11は、ゴーストフォーマルの挿入によって修正された図9を示している。 同様に、図12は、ゴーストフォーマルの挿入によって修正された図10を示し ている。トランスレータは、ゴースト仮パラメータの差をエンキヤプセルするよ うに、両方の場所にあるターゲット言語フラグメントツリーを調整する。図の破 線は、現実のパラメータの例を示している。 図13は、マクロパラメータの使用を含む仮想のフラグメントツリーの1例で ある。図14は、マクロパラメータの使用を含む仮想のフラグメントツリーの第 2の例である。図13のツリーと図14のツリーとは、同じ静的フラグメントの 例である。図13及び図14のフラグメントツリーは、テキスト的にはマッチし ていないトークンのシーケンスを含むマクロ拡張の2つの例を示している。更に 、各例におけるミスマッチ・トークンは、マクロ拡張フラグメントに対して下位 にある現存のマクロ仮使用のフラグメントに封じ込められたトークンにマッチす る。 図15は、現存のマクロ仮パラメータ,sname の追加の使用を挿入することに よって修正された後の図13を示している。同様に、図16は、現存のマクロ仮 パラメータ,sname の追加の使用を挿入することによって修正された後の図14 を示している。トランスレータは、現存のパラメータの追加使用における差を封 じ込めるように、両方の場所にあるターゲット言語フラグメントツリーを調整す る。 図17は、図11と同様である。このツリーには、マクロ仮パラメータの使用 が、このマクロ拡張の第1例と同じマクロの拡張の第2例との間のテキスト上で の差をエンキヤプセルように、挿入されている。図18は、同じマクロの第3の 拡張を示している。図17に示したマクロ拡張フラグメントのトークンのシーケ ンスは、図18に示すマクロ拡張フラグメントのトークンのシーケンスにはマッ チしない。特に、図17のトークン“stype”は、図18のトークン“h_”とは 、テキスト上では等しくない。第1の異なるサブシーケンス(“stype”)のトー クンがフラグメントの呼出しを示しているので、第2の異なるサブシーケンスを 、トークンの第1サブシーケンスが呼び出すフラグメントの新しい例に、エンキ ヤプセルすることができる。この変換は、新フラグメントへのエンキヤプセルの 伝搬と呼ばれる。図19は、封じ込め後の図18からのフラグメントを示してい る。 本発明が特定の実施例を参照して説明されたが、この説明は、本発明を制限的 なものにするものではない。ここに開示した実施例の種々の変形例や他の実施例 が、当業者には、この説明を参照することによって明らかであろう。従って、請 求の範囲には、本発明の真の範囲に含まれる、かかる変形例や実施例が含まれる ことが意図されている。
───────────────────────────────────────────────────── フロントページの続き (72)発明者 デル ビグナ ポール アメリカ合衆国 カリフォルニア州 95126 サンホセ マグノリア アベニュ ー 1374 (72)発明者 モーロイ マーク イー アメリカ合衆国 カリフォルニア州 95138 サンホセ ウルシアン コート 138 【要約の続き】

Claims (1)

  1. 【特許請求の範囲】 1.データ処理システムで実行されているアプリケーションプログラムによって アクセスされるメモリを改良する方法であり、 階層的ツリーデータ構造を前記メモリに記憶し、 配置され直されるべきサブツリーに対する祖先である、修正されるべき前記 ツリーの第1ノードを識別し、 第2ノードを作り出し、 前記サブツリーを前記第1ノードから切り離し、 第2ノードを第1ノードの子として結合し、そして 前記サブツリーを第2ノードの子として結合する、コンピュータで実行され るステップを備える方法。 2.請求項1の工程によって作り出されたメモリ。 3.請求項2のメモリ及びCPUから成るコンピュータシステム。 4.第1ツリー内の第1識別ノードからの浅い順の通過での収率が、第2ツリー の第2識別ノードからの浅い順の通過での収率と一致するデータ構造を与えるた めに、データ処理システム上で実行されているアプリケーションプログラムによ ってアクセスされるメモリを改良するために使用する方法が、 第1及び第2階層ツリーデータ構造を前記メモリに記憶し、 第1ツリー内の第1ノード及び第2ツリー内の第2ノードを識別し、ここで は、第1ノードからの浅い順の通過での収率が、第2ノードからの浅い順の通過 での収率とは異なり、 前記第1ノードの順番に隣接する子のリストの第1の組、及びこの第1の組 のメンバーと一対一で対応する第2ノードの順番で隣接する子のリストの第2の 組を識別し、この際、第1の組のリストの要素を第1ノードから切り離すことが 、第1ノード及び第2ノードの順での収率が等しくなる様にし、 切り離すが、第1の組のリストの要素のノードを残し、要素が第1ノードに どの様にして取り付けられるかに付いての順番と相対位置をメモリに残し、 切り離すが、第2の組のリストの要素のノードを残し、要素が第2ノードの どの様にして取り付けられるかに付いての順番と相対位置をメモリに残し、 一つの新たなノードを、第1の組の各メンバーに対する第1ノードの子とし て挿入し、この際、各新たなノードが、ノードから切り離され且つ順番に隣接す る子の一つのリストの前の位置に対応する位置に挿入される様にし、 一つの新たなノードを第2の組の各メンバーに対する第2ノードの子として 挿入し、ここで、各新たなノードが、第2のノードから切り離され且つ順番に隣 接する子の一つのリストの前の位置に対応する位置に挿入され、第2ノードの子 である新たなノードは各々、第1ノードの子である対応する新たなノードに等し い収率を与え、 子として設定された第1の組のリストの要素である残されたノードを、第1 ノードの新たなノードに接続し、ここで、残されたノードの新たなノードの子と しての相対順が、残されたノードが第1ノードの直接の子孫であった時の残され たノード相対順と同じであり、そして 子として設定された第2の組のリストの要素である残されたノードを、第2 ノードの新たなノードに接続し、ここで、残されたノードの新たなノードの子と しての相対順が、残されたノードが第2ノードの直接の子孫であった時の残され たノード相対順と同じである、コンピュータで実行されるステップを備える方法 。 5.請求項1の工程によって作り出されたメモリ。 6.請求項2のメモリ及びCPUから成るコンピュータシステム。 7.第1高水準レベル言語でのソースプログラムを、第2高水準レベル言語での ターゲットプログラムに翻訳するためのコンピュータシステムで使用するための 方法が、 ソースプログラムを記憶装置から得、 仮想ソースを前記ソースプログラムから発生し、 この仮想ソースをスキャニングし、 この仮想ソースを解析し、 ソースフラグメントツリーを、仮想ソースのトークンを表す一組の葉と関係 する仮想ソースで組み立て、 ソースシンタックスツリーを前記一組の葉と関係する仮想ソースで組み立て 、 ソースシンタックスツリーを語義的に解析し、 ソースシンタックスツリーをターゲットシンタックスツリーに翻訳し、 ソースフラグメントツリーをターゲットフラグメントツリーに翻訳し、そし て ターゲットソースコードを発生する、コンピュータで実行されるステップ、 を備える方法。 8.ターゲットソースコードを発生する前記ステップが、 現在の翻訳期間で発生された第1フラグメントと、前の翻訳期間で発生され た第2フラグメントと間での一致をチェックし、そして ツリーデータ構造のフラグメント間での一致をチェックする、コンピュータ で実行されるステップから成る請求項7記載の方法。 9.ツリーデータ構造のフラグメント間での一致をチェックする前記ステップが 、 (a) 第1静的フラグメントのインスタンスである第1フラグメントを得、 (b) 第2静的フラグメントのインスタンスである第2フラグメントを得、 (c) 第1フラグメント及び第2フラグメントの差を計算し、一組のトークンサ ブシークエンスを発生し、ここで、このサブシークエンスの複数の対の内の一つ が、第1フラグメントに含まれるトークンの順序付けられたサブシークエンスを 含む第1メンバー及び第2フラグメントに含まれるトークンの順序付けられたサ ブシークエンスを含む第2メンバーから成り、 (d) 前記対の第1及び第2メンバーが呼出し表現を表しているかを決め、 (e) 呼出し表現が第1フラグメントに含まれる第1下位従属フラグメントを得 、 (f) 呼出し表現が第2フラグメントに含まれる第2下位従属フラグメントを得 、 (g) 前記対の第1メンバーが第1下位従属フラグメント内のトークンと一致す るか否かを決め、 (h) 前記対の第2メンバーが第2下位従属フラグメント内のトークンと一致す るか否かを決め、 (i) 第2静的フラグメントを得、 (j) トークンの順序付けられたサブシークエンスを、第2静的フラグメントの インスタンス内に封入し、そして (k) 前記対が無くなる迄、ステップ(b)、(c)、(d)、(e)、(g)、(h)、(i)及び( j)を繰り返す、コンピュータで実行されるステップを備える方法。 10.前記封入するステップが、トークンの順序付けられたサブシークエンスを含 むフラグメントを得、 一つの静的フラグメントのインスタンスである封入フラグメントを作り出し 、 この封入フラグメントに対する呼出し表現を作り出し、 この呼出し表現を封入フラグメントに結合し、 フラグメントからトークンを除去し、フラグメント内のトークンの位置を記 憶し、 呼出し表現を前記位置でのフラグメントに加え、そして トークンを封入フラグメント内に設置する、コンピュータで実行されるステ ップから成ることを特徴とする請求項9記載の方法。 11.現在のトランスレーションセションで製造された第1のグラグメントと、従 前のトランスレーションセションで製造された第2のフラグメントとの間の一致 性をチェックする前記段階は、コンピュータにより実行される段階であり、 (a) 静的フラグメントが従前のトランスレーションセションでトランスレート されたかどうかを決定する段階と、 (b) 現在のトランスレーションセションで製造された第1のフラグメントを得 る段階と、 (c) 従前のトランスレーションセションで製造された第2のフラグメントを得 る段階と、 (d) 第1のフラグメントと第2のフラグメントの間の差を計算し、複数のトー クンサブシーケンスの1つのセットを製造する段階であって、前記セットでは、 サブシーケンスの複数の対の中の1つが、第1のフラグメントに含まれる順序付 けされた複数のトークンのサブシーケンスを有する第1の部材と、第2のフラグ メントに含まれる順序付けされた複数のトークンのサブシーケンスを有する第2 の部材とを備える、前記段階と、 (e) 前記対の第2の部材がインボケーション表現オーグメンテーションを表示 するものかどうかを決定する段階と、 (f) 第2の静的フラグメントを得る段階と、 (g) 順序付けされた複数のトークンのサブシーケンスを第2の静的フラグメン トのインスタンスにエンカプセル化する段階と、 (h) 前記対が使い尽くされるまで段階(e)、(f)、(g)を繰り返す段階と、 を備えることを特徴とする請求項8記載の方法。 12.エンカプセル化する前記段階は、コンピュータによって実行される段階であ り、 順序付けされた複数のトークンのサブシーケンスを含むフラグメントを得る 段階と、 エンカプセルフラグメントを1つの静的フラグメントのインスタンスとして 生成する段階と、 エンカプセルフラグメントのためのインボケーション表現を生成する段階と 、 インボケーション表現をエンカプセルフラグメントヘリンクする段階と、 トークンをフラグメントから取り除いて、フラグメントにおけるトークンの ロケーションを覚える段階と、 インボケーション表現をフラグメントに前記ロケーションにて付加する段階 と、 トークンをエンカプセルフラグメントに配置する段階と、 を備える請求項11記載の方法。 13.コンピュータシステムにおいて、 与えられたソースプログラムから仮想源を製造する手段と、 仮想源をスキャンする手段と、 仮想源をパースする手段と、 複数のリーフの1つのセットと関連付けられた仮想源を有するソースフラグ メントツリーを構築する手段と、 複数のリーフの1つのセットと関連付けられた仮想源を有するソースシンタ ックスツリーを構築する手段と、 ソースシンタックスツリーをセマンティック分析する手段と、 ソースフラグメントツリーをターゲットフラグメントツリーへトランスレー トする手段と、 ソーシシンタックスツリーをターゲットシンタックスツリーへトランスレー トする手段と、 ターゲットソースコードを発生する手段と、 を備えることを特徴とするコンピュータシステム。 14.ターゲットソースコードを発生する前記手段は、 現在のトランスレーションセションで製造された第1のフラグメントと、従 前のトランスレーションセションで製造された第2のフラグメントとの間の一致 性をチェックする手段と、 ツリーデータ構造のフラグメントの間の一致性をチェックする手段と、 を備える請求項13記載のシステム。 15.ツリーデータ構造のフラグメントの間の一致性をチェックする前記手段は、 トークンサブシーケンスの複数の対の1つのセットを得る手段であって、前 記セットでは、各対が、あるフラグメントに含まれる順序付けされた複数のトー クンのサブシーケンスを有する第1の部材と、次のフラグメントに含まれる順序 付けされた複数のトークンのサブシーケンスを有する第2の部材とを備える、前 記手段と、 各対の各部材の静的フラグメント表示の間の差を計算する手段と、 前記対の部材がインボケーション表現を表示するものかどうかを決定する手 段と、 前記対の部材がフラグメントのトークンと整合するかどうかを決定する手段 と、 サブシーケンスを含むフラグメント及び静的フラグメントからのトークンを エンカプセルする手段と、 を備える請求項14記載のシステム。 16.現在のトランスレーションセションで製造された第1のフラグメントと、従 前のトランスレーションセションで製造された第2のフラグメントとの間の一致 性をチェックする前記手段は、 第1のフラグメントが従前のトランスレーションセションでトランスレート されたかどうかを決定する手段と、 第1のフラグメントに含まれる複数のトークンサブシーケンスの第1のセッ トと、第2のフラグメントに含まれる複数のトークンサブシーケンスの第2のセ ットとの間の差を計算する手段と、 トークンの前記第2のセットがインボケーション表現を表示するものかどう かを決定する手段と、、 トークンの前記第2のセットが、トークンの前記第1のセットに含まれない インボケーション表現アクチュアルパラメータを表示するものかどうかを決定す る手段と、 トークンの前記第1のセットを静的フラグメントのインスタンスにエンカプ セルする手段と、 を備える請求項14記載のシステム。 17.エンカプセルする前記手段は、 エンカプセルフラグメントを1つの静的フラグメントのインスタンスとして 生成する手段と、 エンカプセルフラグメントのためのインボケーション表現を生成する手段と 、 インボケーション表現をエンカプセルフラグメントにリンクする手段と、 トークンを1つのフラグメントから取り除いて、トークンの前記1つのフラ グメントにおけるロケーションを覚える手段と、 インボケーション表現を前記1つのフラグメントに前記ロケーションにて付 加する手段と、 トークンをエンカプセルフラグメントに配置する手段と、 を備える請求項15若しくは16のいずれかに記載のシステム。
JP8514847A 1994-11-01 1995-11-01 ツリーデータ構造マニピュレーション及び一つの高水準コンピュータ言語から別のコンピュータ言語にソースコードを翻訳する方法及び装置 Pending JPH11501421A (ja)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US08/332,966 US5842204A (en) 1994-10-07 1994-11-01 Method and apparatus for translating source code from one high-level computer language to another
US08/332,966 1994-11-01
PCT/US1995/014206 WO1996013784A2 (en) 1994-11-01 1995-11-01 Method and apparatus for tree data structure manipulation and translating source code from one high-level computer language to another

Publications (1)

Publication Number Publication Date
JPH11501421A true JPH11501421A (ja) 1999-02-02

Family

ID=23300662

Family Applications (1)

Application Number Title Priority Date Filing Date
JP8514847A Pending JPH11501421A (ja) 1994-11-01 1995-11-01 ツリーデータ構造マニピュレーション及び一つの高水準コンピュータ言語から別のコンピュータ言語にソースコードを翻訳する方法及び装置

Country Status (5)

Country Link
US (1) US5842204A (ja)
EP (1) EP0789885A2 (ja)
JP (1) JPH11501421A (ja)
CA (1) CA2204118A1 (ja)
WO (1) WO1996013784A2 (ja)

Families Citing this family (42)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6425118B1 (en) 1997-07-18 2002-07-23 Compaq Computer Corporation System for automatically generating tests to ensure binary compatibility between software components produced by a source-to-source computer language translator
US6317871B1 (en) * 1997-07-18 2001-11-13 Compaq Computer Corporation System for ensuring the accuracy of file structures in a source-to-source computer program translator
GB2327786B (en) * 1997-07-31 2002-04-03 Ibm Method and apparatus for strategic compilation of source programs into two or more target languages
US6014517A (en) * 1998-01-06 2000-01-11 Emc Corporation Automatic creation of C to assembler interface
US6105035A (en) * 1998-02-17 2000-08-15 Lucent Technologies, Inc. Method by which notions and constructs of an object oriented programming language can be implemented using a structured query language (SQL)
DE19817617C1 (de) * 1998-04-21 1999-09-09 Deutsche Telekom Mobil Verfahren zur Konvertierung baumstrukturierter Daten
US6256618B1 (en) * 1998-04-23 2001-07-03 Christopher Spooner Computer architecture using self-manipulating trees
US6269367B1 (en) * 1998-06-30 2001-07-31 Migratec, Inc. System and method for automated identification, remediation, and verification of computer program code fragments with variable confidence factors
US6792597B1 (en) * 1999-03-04 2004-09-14 Wysdom Wireless, Inc. Automatic consistency checking of computer programs
EP1266313A2 (en) 1999-03-19 2002-12-18 Trados GmbH Workflow management system
US7340684B2 (en) * 1999-08-19 2008-03-04 National Instruments Corporation System and method for programmatically generating a second graphical program based on a first graphical program
US8146007B2 (en) * 1999-08-19 2012-03-27 National Instruments Corporation Converting a first graphical program into an intermediate abstract representation for new graphical program generation
US7043693B2 (en) 1999-08-19 2006-05-09 National Instruments Corporation System and method for programmatically generating a second graphical program based on a first graphical program
US6654950B1 (en) 1999-08-24 2003-11-25 Bae Systems Mission Solutions Inc. Software rehosting system and method
US20060116865A1 (en) 1999-09-17 2006-06-01 Www.Uniscape.Com E-services translation utilizing machine translation and translation memory
US6934709B2 (en) 2001-03-26 2005-08-23 Matrixone, Inc. Interface definition language compiler
CN1509433A (zh) * 2001-05-11 2004-06-30 ���������˼�빫˾ 把传统软件应用程序转换为现代面向对象系统的方法和系统
DE10254532A1 (de) * 2002-11-22 2004-06-03 Abb Research Ltd. Verfahren und System zur wissensbasierten Transformation von textuellen Programmen, die sich auf die Softwarekonfiguration eines verteilten Leitsystems beziehen
US7337438B1 (en) 2003-03-31 2008-02-26 Applied Micro Circuits Corporation Macros to support structures for an assembler that does not support structures
CN100437476C (zh) * 2003-04-16 2008-11-26 Nxp股份有限公司 用于处理文件的机器执行方法及结合该方法的机器
US7571431B2 (en) * 2003-04-29 2009-08-04 Microsoft Corporation Processing macro information and displaying via GUI in different tools
US7272821B2 (en) 2003-08-25 2007-09-18 Tech Mahindra Limited System and method of universal programming language conversion
US7983896B2 (en) * 2004-03-05 2011-07-19 SDL Language Technology In-context exact (ICE) matching
US20060143598A1 (en) * 2004-12-29 2006-06-29 Zimmer Vincent J Method and apparatus for transforming program representations
US8521506B2 (en) 2006-09-21 2013-08-27 Sdl Plc Computer-implemented method, computer software and apparatus for use in a translation system
US8516458B2 (en) * 2008-02-29 2013-08-20 Iti Scotland Limited System representation and handling techniques
US8813043B2 (en) * 2008-12-31 2014-08-19 Microsoft Corporation Unifying type checking and property checking for low level programs
GB2468278A (en) 2009-03-02 2010-09-08 Sdl Plc Computer assisted natural language translation outputs selectable target text associated in bilingual corpus with input target text from partial translation
US9262403B2 (en) 2009-03-02 2016-02-16 Sdl Plc Dynamic generation of auto-suggest dictionary for natural language translation
US8548798B2 (en) * 2010-02-26 2013-10-01 International Business Machines Corporation Representations for graphical user interfaces of operators, data types, and data values in a plurality of natural languages
US8683451B1 (en) * 2010-04-30 2014-03-25 The United States Of America As Represented By The Secretary Of The Navy System and method for translating software code
US9128929B2 (en) 2011-01-14 2015-09-08 Sdl Language Technologies Systems and methods for automatically estimating a translation time including preparation time in addition to the translation itself
US10638221B2 (en) 2012-11-13 2020-04-28 Adobe Inc. Time interval sound alignment
US10249321B2 (en) * 2012-11-20 2019-04-02 Adobe Inc. Sound rate modification
US10455219B2 (en) 2012-11-30 2019-10-22 Adobe Inc. Stereo correspondence and depth sensors
US10459829B2 (en) 2017-06-07 2019-10-29 M/S. Cigniti Technologies Limited Overall test tool migration pipeline
US10635863B2 (en) 2017-10-30 2020-04-28 Sdl Inc. Fragment recall and adaptive automated translation
US10817676B2 (en) 2017-12-27 2020-10-27 Sdl Inc. Intelligent routing services and systems
WO2019213779A1 (en) 2018-05-10 2019-11-14 Miovision Technologies Incorporated Blockchain data exchange network and methods and systems for submitting data to and transacting data on such a network
US11256867B2 (en) 2018-10-09 2022-02-22 Sdl Inc. Systems and methods of machine learning for digital assets and message creation
US10846059B2 (en) 2019-02-05 2020-11-24 Simply Inspired Software, Inc. Automated generation of software bindings
US11294649B1 (en) * 2021-01-13 2022-04-05 Amazon Technologies, Inc. Techniques for translating between high level programming languages

Family Cites Families (10)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPS58201175A (ja) * 1982-05-20 1983-11-22 Kokusai Denshin Denwa Co Ltd <Kdd> 機械翻訳方式
US4667290A (en) * 1984-09-10 1987-05-19 501 Philon, Inc. Compilers using a universal intermediate language
JPS62194533A (ja) * 1986-02-21 1987-08-27 Hitachi Ltd 木構造デ−タのパタ−ンマツチング方式
US4956809A (en) * 1986-11-24 1990-09-11 Mark Williams Company Method for canonical ordering of binary data for portable operating systems
US4868743A (en) * 1986-11-25 1989-09-19 Hitachi, Ltd. Traversal method of processing tree structure information and apparatus using the same
JP2534360B2 (ja) * 1988-09-26 1996-09-11 インターナシヨナル・ビジネス・マシーンズ・コーポレーシヨン 接続方法、ノ―ド接続方法、デ―タ処理方法、及び木内にノ―ドを挿入する方法
US4989132A (en) * 1988-10-24 1991-01-29 Eastman Kodak Company Object-oriented, logic, and database programming tool with garbage collection
US5276874A (en) * 1989-08-11 1994-01-04 Digital Equipment Corporation Method for creating a directory tree in main memory using an index file in secondary memory
US5151697A (en) * 1990-10-15 1992-09-29 Board Of Regents Of The University Of Washington Data structure management tagging system
JPH0778742B2 (ja) * 1992-08-12 1995-08-23 インターナショナル・ビジネス・マシーンズ・コーポレイション コンピユータ・プログラム言語変換装置及びその方法

Also Published As

Publication number Publication date
EP0789885A2 (en) 1997-08-20
WO1996013784A3 (en) 1996-08-15
CA2204118A1 (en) 1996-05-09
US5842204A (en) 1998-11-24
WO1996013784A2 (en) 1996-05-09

Similar Documents

Publication Publication Date Title
JPH11501421A (ja) ツリーデータ構造マニピュレーション及び一つの高水準コンピュータ言語から別のコンピュータ言語にソースコードを翻訳する方法及び装置
WO1996013784A9 (en) Method and apparatus for tree data structure manipulation and translating source code from one high-level computer language to another
EP0789875B1 (en) Method of translating source code from one high-level computer language to another
Kastens et al. Modularity and reusability in attribute grammars
Schordan et al. A source-to-source architecture for user-defined optimizations
US6006031A (en) Method and apparatus for reconciling conflicting translations by factoring and parameterizing differences
US8516458B2 (en) System representation and handling techniques
US11301243B2 (en) Bidirectional evaluation for general—purpose programming
van Der Storm The Rascal language workbench
JPH06501579A (ja) プログラミング演算の効果と従属性とを表現する方法及び装置
van Binsbergen et al. Executable component-based semantics
Reis et al. An on-the-fly grammar modification mechanism for composing and defining extensible languages
Verano Merino et al. Getting grammars into shape for block-based editors
Sturm et al. Generating code from UML with velocity templates
Goldschmidt View-based textual modelling
Pfeiffer et al. The design space of multi-language development environments
Wu et al. Component-based LR parsing
KR102614967B1 (ko) 자바스크립트의 중간 언어 기반 의미론 추출 자동화 시스템 및 방법
JP5600301B2 (ja) システム表現およびハンドリング技術
Kamin Standard ML as a meta-programming language
Farmer HERMIT: mechanized reasoning during compilation in the Glasgow Haskell Compiler
Renggli Dynamic language embedding with homogeneous tool support
Mitchell Transformation and Analysis of Functional Programs
Chiba Foreign language interfaces by code migration
Guyon et al. An integrated development environment for pattern matching programming

Legal Events

Date Code Title Description
A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20050614

A601 Written request for extension of time

Free format text: JAPANESE INTERMEDIATE CODE: A601

Effective date: 20050914

A602 Written permission of extension of time

Free format text: JAPANESE INTERMEDIATE CODE: A602

Effective date: 20051024

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20051207

A711 Notification of change in applicant

Free format text: JAPANESE INTERMEDIATE CODE: A712

Effective date: 20051207

A02 Decision of refusal

Free format text: JAPANESE INTERMEDIATE CODE: A02

Effective date: 20060509