JPH10508398A - ソースコードを一つの高級コンピュータ言語から別の高級コンピュータ言語へ変換する方法及び装置 - Google Patents

ソースコードを一つの高級コンピュータ言語から別の高級コンピュータ言語へ変換する方法及び装置

Info

Publication number
JPH10508398A
JPH10508398A JP8512724A JP51272496A JPH10508398A JP H10508398 A JPH10508398 A JP H10508398A JP 8512724 A JP8512724 A JP 8512724A JP 51272496 A JP51272496 A JP 51272496A JP H10508398 A JPH10508398 A JP H10508398A
Authority
JP
Japan
Prior art keywords
tree
source
fragment
target
double
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.)
Ceased
Application number
JP8512724A
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 JPH10508398A publication Critical patent/JPH10508398A/ja
Ceased 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
    • 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/99941Database schema or data structure
    • Y10S707/99942Manipulating data structure, e.g. compression, compaction, compilation

Landscapes

  • Engineering & Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Devices For Executing Special Programs (AREA)

Abstract

(57)【要約】 本発明は、二重根付けトリー・データ構造を用いて、一つのコンピュータ言語を他の言語に変換する方法、システム、及びプログラムである。二重根付けトリー(7,19)は、共通のセットの葉を共有する階層的に関係する2つのセットのオブジェクトの組み合わせである。N重根付けトリーも記載されている。二重根付けトリーが特定の方法により構築され、さらに、第2の二重根付けトリーに変換されたとき、ソース言語コードはターゲット言語コードに変換される。さらに、変換は、マクロ、ある条件でコンパイルされるコード領域、ソース包含ステートメント及びコメントを含むソース言語コードのプリプロセッサの特徴を保存する。

Description

【発明の詳細な説明】 ソースコードを一つの高級コンピュータ言語から別の高級コンピュータ言語へ変 換する方法及び装置 発明の背景 本発明は、高級コンピュータプログラミング言語間の自動変換に関する。 本発明は、特に、ソース高級言語に含まれたプリプロセッサ特性(マクロ、ソ ースファイル包含構造及びコメンタリの如き)のターゲット高級言語の改良され た保存に関する。本発明の一つの特徴は、プリプロセッサ特性をプリプロセッサ によって必ずしも処理する必要がないということである。 高級コンピュータ言語により、コンピュータプログラマは、コンピュータと通 信することができる。ステートメントプログラマは、あるコンピュータ言語形式 にて、コンピュータに一組のタスクを行わせることを命令するコンピュータプロ グラムを書く。「翻訳・解釈(translation))」は、高級コンピュータ言語を、 コンピュータが理解して実行することができる一般的に機械コードと称される命 令へと変換する態様である。コンパイラは、このような変換を行うコンピュータ プログラムである。 一般的には、コンピュータの種類が異なれば、理解しうる機械コード命令のセ ットも異なる。したがって、各コンピュータ毎に、高級コンピュータ言語を変換 するための異なるコンパイラを設けておかねばならない。すべての高級コンピュ ータ言語のためのコンパイラが、どの種類のコンピュータにも存在しているとい うのではないので、すべてのプログラムをすべてのマシンにて実行するというわ けにはいかない。プログラマは、ターゲットコンピュータのために存在している コンパイラに対する言語でしかプログラムを書くことができない。 しかしながら、単一のコンピュータプログラムを、できるだけ多くの種類のコ ンピュータにて実行できるようにすることが望ましい。アプリケーションプログ ラムは、普通複雑で書くのが難しい。多数の種類のコンピュータにて実行しうる ように多数の言語にてプログラムを書き換えることは実施不可能である。同様に 、 コンパイラは、書くのが難しい。すべての種類のコンピュータに対するすべての 言語でそれらを与えるのも実施不可能である。これらの問題に対する一つの解決 方法は、よく知られており広く使用されており標準化された高級言語の開発であ った。これらの言語のためのコンパイラは、ある広い範囲に亘る種類のコンピュ ータに利用しうる。 標準化言語の開発は、完全な解決ではなかった。種々な言語及びこれら言語で 書かれた多くの大規模プログラムがあるが、これらは、どれも独特のものであっ たり、標準化されすぎたものであったり、あまり使用されていないものであった り、時代遅れのものであったり、特定のコンピュータに対して設計されたもので あったりであった。多くのコンピュータは、これら言語で使用しうるコンパイラ を有していない。 多くの高級コンピュータ言語は、それらが標準化されているものでも、いない ものでも、すべてのコンピュータについて翻訳され得ないものなので、プログラ ムは、他の言語へと変換されねばならない。変換は手で行うことができるが、そ れでは、労力、時間、費用が掛かるだけでなく、エラーを伴いがちである。この 問題を解決するため、ある高級言語で書かれたプログラムを別の高級言語で書か れたプログラムへと変換するための自動翻訳プログラムが開発されてきている。 自動翻訳プログラムは、特定のコンピュータについて特定の言語に対して利用 しえないコンパイラの問題を解決するために、2つの異なる戦略のうちの一方の 戦略にて使用されうる。第一の戦略では、プログラマは、元のソース言語にてプ ログラムを書き続けそれを維持し続けることができる。翻訳プログラムは、これ らのプログラムを、ターゲット言語にて中間コードへ変換する。それから、その ターゲット言語に対して使用しうるコンパイラが、その中間コードを、ターゲッ トコンピュータが理解しうる機械コードへと変換する。そのターゲット言語は、 通常、標準の広く使用しうる言語であるが、翻訳プログラムは、読み取り得る又 は維持しうるソースコードを発生する必要はない。 第二の戦略では、翻訳プログラムが、読み取り得る又は維持しうるソースコー ドを発生する必要がある。このような戦略をとるプログラマは、ターゲット言語 をとって元の言語を棄てることを望む。このような型の翻訳プログラムを形成す るのは、より難しいタスクであり、本発明の目指すところである。 読み取り得るコードを発生する翻訳プログラムを形成するためになされた従来 の試みの目指すところは種々異なっており、また、その成果も種々異なっていた 。ある高級言語の構文(シンタックス)は、別の高級言語の構文へと首尾よく変 換された。ある翻訳プログラムは、魅力的にフォーマット化されたターゲットコ ードを発生していた。ソースコードコメントがターゲットコードへ移されていた のであるが、これらの置き換えは、必ずしも最適ではなかった。翻訳プログラム は、また、プログラムのスタイルを変換してそれらをより詠み易いものとしよう としていた。他のものは、ソースプログラムの意味を引き出し、それをターゲッ ト言語に書き換えるために、知識ベースシステムを使用していた。 しかしながら、従来の翻訳プログラムは、普遍的且つ充分には、一般的にプリ プロセッサ特性として知られたプログラミング構成を保存することができないも のである。多くの高級言語は、言語自体とは別であるがそれと共存するプリプロ セッサ言語を含む。プリプロセッサ言語の特性(ここでは、呼出し表現とも称さ れる)は、条件付き翻訳機構、マクロ機構、ソース包含機構、種々なコンパイラ 指示文、及びコメント機構を含みうる。簡単化し過ぎる危険はあるが、プリプロ セッサは、プログラマがより長い構成に対して速記表現を使用しうるようにする 。したがって、ソースコードがプリプロセッサによって実行されるとき、その速 記表現を呼び出すことにより、テキスト代入がトリガされる。 翻訳プログラムがプリプロセッサ特性を充分に取り扱えないという問題がある ことが良く知られている。当業者達は、ソース言語マクロ定義をターゲット言語 マクロ定義でどのように置き換えるかを考えているときに、「我々は、このよう な置き換えを行える一般的な完全に自動的な機構を知らない。」と述べている。 次の2つの示唆がなされている。すなわち、 −ある良好に形成された完全なソース言語構成によりそれらを正しく変換しうる という希望をもって、マクロボディをそれらの用途文脈外で解析する試み− −パターンマッチによりマクロボディにおけるトークンの共通シーケンスを認識 すること− 上記の最初の示唆は、一般的解決法ではない。何故ならば、言語はマクロを使用 するのに制約をなさず、このような制約は、どのような場合にも、マクロが意味 エラーを受けやすくするからである。上記の二番目の示唆は、特定の場合にしか 働かないであろう。 発明の概要 本発明の一般的な目的は、ソースコードを、ある高級コンピュータ言語から別 の言語のソースコードへと自動的に変換する方法及び装置を提供することである 。 本発明の特定の目的は、コードを、あるソースコンピュータ言語からあるター ゲット言語へと、ソース言語にて書かれたコードのプリプロセッサ特性を保存し つつ、変換する方法を提供することである。 本発明の別の目的は、あるコンピュータ言語から別のコンピュータ言語への自 動的変換でも、ある自然言語から別の自然言語への自動的変換でも、それら自動 的変換に有用なデータ構造を提供することである。二重根付きトリーと称される データ構造は、2つの従来のトリーデータ構造を、それらのリーブが一致するよ うに組み合わせている。二重根付きトリーを特定の仕方で形成して詰め込み、そ れから、それを第2の二重根付きトリーへ変換することにより、コンピュータ言 語のプリプロセッサ特性は、他のステートメント、構成及び表現を変換しながら 、保存されうる。 二重根付きトリーは、より複雑なデータ構造のためのベースとして作用しうる 。例えば、さらに別のトリーをリーフにて接合することにより、N重根トリーを 形成しうる。このようなリンクされたトリーのセットは、コンピュータデータベ ースアプリケーションを有する。 本発明のその他の目的は、次の説明及び請求の範囲の記載から明らかになるで あろうし、また、本発明の好ましい実施例及び原理を例示し且つこれら原理を適 用するのに現在において最良の形態であると考えられるものを示している添付図 面に例示されている。これらの原理及び同様の原理を実施する本発明の他の実施 例を使用することができ、また、これらの変形構成もまた、本発明及び請求の範 囲から逸脱せずに、当業者には必要に応じてなしうるものである。 図面の簡単な説明 図において、 図1は、従来のトリー構造を示す図である。 図2は、本発明によりリーフで接合された二重根付きトリーデータ構造を示す 図である。 図2Aは、本発明で使用するコンピュータシステムの概略ブロック図である。 図3は、簡単な従来のコンパイラによるデータの流れを示すブロック図である 。 図4は、本発明の一実施例による自動ソースコード翻訳プログラムによるデー タの流れを示すブロック図である。 図5は、本発明の一実施例による二重根付きトリーにおける第1のトリーを形 成する方法を記述するフローチャートを示す図である。この方法は、深さ優先探 索順にて上から下へトリーを形成する。 図6は、本発明の一実施例により、図5において導入された二重根付きトリー における第2のトリーの形成を記述するフローチャートを示す図である。第1の トリーの順次探索により、パーサー623へ入力されるリーフの順序集合が発生 される。この方法は、深さ優先探索順にて下から上へトリーを形成する。 図7は、本発明の一実施例による、第1の二重根付きトリーにおける第2のト リーの第2の二重根付きトリーにおける対応するトリーへの変換を記述するフロ ーチャートを示す図である。 図8は、本発明の一実施例による、図5にて述べられた第1の二重根付きトリ ーにおける第1のトリーの第2の二重根付きトリーにおける対応するトリーへの 変換を記述するフローチャートを示す図である。 図9は、ソース言語として高級コンピュータ言語pTALを使用した実例フラ グメントトリー及び構文トリーを示す図である。 図10は、図9において導入されたものをリンクするリーフ(トークン)を含 む実例pTALソースフラグメントトリー及びソース構文トリーを示す図である 。図10は、また、ソース構文トリーの変換を表す別の高級コンピュータ言語C ++のターゲット構文トリー及びターゲット二重根付きトリーの半分を示してい る。 図11は、ソースフラグメントトリーの変換後の図10に導入したソース二重 根付きトリーおよぼターゲット二重根付きトリーを示す図である。4つのトリー のすべてが例示されている。すなわち、実例pTALソースフラグメントトリー 及びソース構文トリー、並びに、意味上等価なC++ターゲットフラグメントト リー及びターゲット構文トリーである。 発明の詳細な説明 本発明は、レガシーソフトウエアを異なる高級プログラミング言語へと変換す る戦略を実施する。この変換プロセスは、マクロ、コードの条件付きで翻訳され た領域及びソース包含の如きテキストプリプロセッサ機構を保存する。この欄で は、この戦略を実施するロゼッタ翻訳プログラムの構造について詳細に説明する 。ロゼッタ翻訳プログラムは、タンデムのポータブルトランザクションアプリケ ーション言語(pTAL)からC++への変換を行う。 ソース−ソース変換 Cの如き標準の移植性のある広く使用しうる言語へのソース−ソース変換は、 外来言語を多くのプラットホーム2,3,4,9にて使用しうるものとする優れた手段 であることが示されている。プログラマは、元のソース言語にてプログラムを書 き続けそれを維持し続け、変換されたソースを中間コードとして使用する。これ らの翻訳プログラムは、読み取り得て維持しうるコードを発生する際の問題、す なわち、マクロ定義及びプログラム構造を保存したり、意味のあるネーミング、 コメント置換及びフォーマットを保持したりする問題を解決する必要がない。 あるプログラムのスタイルを変換してそれをより読み取り易いものとするソー ス−ソース翻訳プログラムを実施したり、または、あるプログラムの意味を引き 出し、知識ベースシステムを使用してそのプログラムをより高い水準の言語8で 表現したりする試みがなされている。本発明者は、このような技術を効果的に適 用することはできなかった。 pTAL、C++、及び多くの高級プログラミング言語は、ある高級言語とは 別ではあるがその高級言語と共存するプリプロセッサ言語からなる。プリプロセ ッサ言語は、条件付き翻訳機構、マクロ機構、ソース包含機構、種々なコンパイ ラ指示文、及びコメント機構を含みうる。プリプロセッサ言語は、別のプリプロ セッサによって実施される必要はない。ロゼッタ翻訳プログラムは、高級言語構 成だけでなく、プリプロセッサ構成をも変換する。プリプロセッサ構成を保存す ることは難しいが、読み取り得て維持しうるコードを発生する重要な部分である 。 いくつかの刊行文献には、読み取り得る高級コード1,5を発生する翻訳プログ ラムについて開示されているが、本発明者は、読み取り得て維持しうるコードを 発生し且つプリプロセッサ機構を保存する翻訳プログラムについて開示している 刊行文献には出会わなかった。 言語 ソース言語pTALは、アルゴル−60を元にして導出された専有ブロック構 造システムプログラミング言語である。タンデムのシステムコードの大多数は、 pTALまたはそのプリカーソルTALで書かれている。ロゼッタ翻訳プログラ ムは、そのソース言語として、TALの代わりに、pTALを使用する。何故な らば、pTALは、アセンブリ言語コードステートメント及び任意レジスタマニ ピュレーションの如き標準プログラミング言語において使用し得ない種々なアー キテクチャ特定TAL特徴を除外しているからである。すべてのTALコードが 、結局、pTALへ移る。 変換されたコードは、C++のC言語サブセットによって支配されるが、C+ +に対する特定の臨時構成を含む。ロゼッタ翻訳プログラムは、オブジェクト指 向コードを発生しない。C++は、いくつかの重要なpTAL言語構成のストロ ングタイプチェッキング及び容易なエミュレーション及び将来におけるオブジャ エクト指向パラダイムを使用する機会を含む多くの理由のために、Cよりもはる かに良いターゲット言語である。ここで提示される概念は、変換する実際的必要 を有するプリプロセッサを含む他のプログラミング言語に適用する。 概念 次の概念は、マクロを保存する方法の記述にとって重要である。 仮想ソース プログラムの仮想ソースは、そのプログラムを表す構文トリーを形成するため にコンパイラが解析するトークンのストリームである。 仮想ソース発生機構 仮想ソース生成機構は、仮想ソースを生成するために、スキャナ、若しくは、 プリプロセッサによって使用される。pTALやC++で利用できる仮想ソース 生成機構は、 − ファイルのソース包含 − マクロ拡張 − マクロフォーマルパラメータ置換え である。仮想ソース生成機構は、ソースファイルのいずれの場所にも現れること ができ、構文構造のいずれの部分を生成することもできる:それは、オナー構文 構造バウンダリを必要としない。仮想ソースは、いずれの単一のソースファイル においても、文字形式で存在することを要しない:トークンストリームは、一連 のソース包含、マクロ拡張、マクロフォーマルパラメータ置換えによって生成さ れる。 ロゼッタ翻訳プログラムは、高レベル言語構造に加えて仮想ソース生成機構を 翻訳する。それは、単に、その翻訳を実行する前にプリプロセッサを用いて仮想 ソースを拡張するのではない。プログラマーが知っており、また、親しみのある マクロは、翻訳コードに現れ、同じ事項を意味する。 フラグメント 「フラグメント」は、仮想ソース生成機構の呼出しの結果を表示する:ソース ファイル包含、マクロ拡張、若しくは、マクロフォーマルパラメータ置換え。各 フラグメントは、その呼出し構文を形成するトークンにリンクされる:マクロフ ォーマルパラメータ、マクロ呼出し(パラメータリストを含む)、若しくはソー ス包含ディレクティブを表示するトークン。各フラグメントは、その拡張を構成 する複数のトークンを含む:マクロアクチュアルパラメータ、マクロ本体、若し くは含有ファイル。呼出し構文を構成するトークンは、それら自身、使用可能な そのコンテクストを表示するような他のフラグメントに含有されている。例えば 、マクロ呼出しを、マクロ本体、若しくは、メインプログラムファイルに埋め込 むことができる。 フラグメントは、コンパイラディレクティブによって、複数の「パーティショ ン」に分割され得る。幾つかのコンパイラディレクティブは、プログラムのセマ ンティックに影響を与えるものであり、また、幾つかはどのテキストが操作され るのかを決定するものであることから(例えば、条件付編集(conditional compi lation)ディレクティブ)、ディレクティブバウンダリは保存されなければなら ない。 パーティションは、 − コンパイラディレクティブ − マクロ定義におけるマクロ本体の開始及び終了 − ファイルの開始及び終了 によって境界付けされる。パーティションバウンダリの保存に関する詳細につい ては本明細書には記述しない。 フラグメントトリー フラグメントトリーは、ソース包含、マクロ拡張、及び仮想ソースを生成する ために使用されたマクロアクチュアルパラメータ置換えの各々を表示する。 スタィックフラグメント スタィックフラグメントは1つの型であり、フラグメントは、この型から形成 される:各フラグメントは、スタティックフラグメントのインスタンスである。 ソースファイルは、スタティックフラグメントであり、それは、有効スタティッ クフラグメント(nested static fragments)を含んでいてもよい。ロゼッタ翻訳 プログラムは、C++フラグメントの文字形式を継ぎ足してC++出力ファイル を形成し、マクロ本体のテクスチュアル表示をその定義に適合させる。ロゼッタ 翻訳プログラムの設計は、各ソース言語マクロが、正確に、1つのターゲット言 語マクロへマップすることを必要とするものであるから、それは、全てのマクロ 使用のテクスチュアルの一貫性をチェックして、マクロテキストが使用可能な全 てのコンテクストで「ワーク」することを確実ならしめる。それは、以前の翻訳 セションの間に発生されたフラグメントと、「現在の」セションの間に発生され たフラグメントの間のテクスチュアルの一貫性をチェックして、含有されるファ イルの区分が使用可能な全てのコンテクストで「ワーク」することを確実ならし める。 翻訳プログラムの概略 このセクションは、プログラム内のマクロ呼出し、マクロアクチュアルパラメ ータ置換え、及びソース包含を表示する手段として、「フラグメントトリー」を 導入する。また、このセクションでは、フラグメントトリーを保存するための段 階を含む翻訳プログラムフェーズの概略を述べる。その後、このセクションでは 、フラグメントトリーの構造を詳述し、フラグメントトリー翻訳方法を述べる。 ロゼッタ翻訳プログラムは、2、3の付加的な段階を用いて、通常のコンパイ ラと同様に振る舞う。pTAL構文ストリーは、仮想ソースの構文構造を表す。 トークンは、別の伝統的なアブストラクト構文ストリーのリーフ上に現れる。各 トークンは、フラグメントととも関連付けられており、該フラグメントは、どの 仮想ソース生成機構がそれを仮想ソースに持っていくのかを表示する。構文スト リーとフラグメントトリーは、「トークンで接合される」べきであると言われる 。 操作フェーズは、pTALフラグメントトリーを構築する。pTAL構文スト リーは、C++構文ストリーへ翻訳される。付加的な翻訳段階が、pTALフラ グメントトリーをC++フラグメントトリーへ変換する。 翻訳後、各C++マクロ呼出しフラグメント、若しくは、包含フラグメントは 、そのマクロ本体、若しくは、含有ファイルに属するテキストを表示するような C++トークンのシーケンスを含む。ソースジェネレータは、翻訳されたインス タンスを継ぎ足して、生成テキストファイルを形成する。トークンとコメントは 、それらを含有する構文スに基づいてフォーマットされ(ファイル位置を割り当 てられ)、対応するソース言語構造のフォーマットから指示を受ける。図4は、 ロゼッタ翻訳プログラムのデータフローの概略図を示す。 以下が、幾つかのサンプルpTALソースコードと、翻訳されたC++ソース コードである。 図9は、従前の例からループの間のpTALを表示するフラグメントトリーを 表示する。仮想ソースにおけるトークンは、フラグメントトリーと構文ストリー の両方に存在する。 フラグメントの特性 フラグメントは、幾つかの興味のある特性を有する: pTALフラグメントは、セマンィック的には、該pTALフラグメントが翻 訳されるC++フラグメントと等価である。マクロを「ワーク」させるため、そ れは、生成コードにおける使用可能な全てのコンテクストで意味のあるトークン ストリームへ拡張されなければならない。マクロを読み出し可能とし、維持可能 とするため、それは、ソースコードにおけるのと同じ目的で生成コードにおいて インボウクされなければならない:それは、等価なターゲット言語テキストをエ ンカプセルすることによって、同じ利点を与えなければならない。マクロに関す るこれらの考慮は、他のファイルからマクロアクチュアルパラメータへ含有され るコードにも適用する。 pTALフラグメントのトークンは、使用中のそれらのコンテキスツまたはコ ンテキストに翻訳(変換)されなければならない。マクロは、それらの定義の時 点では直ちに翻訳され得ない。なぜなら、テキストが解剖されることができたと しても、セマンィック分析は、可能ではないからである。マクロがコンテクスト 中で拡張されたときのみが、利用可能な翻訳に必要なセマンティック情報である 。マクロは、それ故、それらの呼出しが拡張され、分析された後に、翻訳される 。パラメータ化されたマクロのアクチュアルパラメータと、含有テキストの領域 は、類似的に処理される。不使用のマクロの本体は翻訳されず、不使用のアクチ ュアルパラメータは翻訳されない。 この特性が持つ重要な意味は、マクロ定義、若しくは、状態編集を含んだ共有 インタフェースファイルは、それらを使用するモジュールを翻訳するサイド効果 として、増分的に翻訳される傾向があるということである。 pTALフラグメントは、使用可能な全てのコンテクストにおいて同じC++ テキスへ翻訳すべきである。マクロ本体は、仮想ソースにおける各拡張のために 一旦翻訳される。ロゼッタ翻訳プログラムは、ソース言語マクロの各々に対して 正確に1つのターゲット言語マクロを生成するよう選択する:この設計決定は、 マクロ拡張の各インスタンスの翻訳は、テクスチュアル的に同一であることを要 求するものである。ロゼッタ翻訳プログラムは、もしマクロ拡張の全てのインス タンスがテクスチュアル的に同じ発生コードである場合には、使用可能な全ての コンテクストにおいてマクロの翻訳が「ワーク」することを確信できるだけであ る。例えば、2つの別々のオペレーションを表現する構文スが、ソース言語では 同じであるが、ターゲット言語では異なる場合に、テクスチュアル不整合が発生 し得る。パン(2つの別々の意味を持つ1つのフレーズ)は、翻訳しない。テク スチュアル不整合を防ぎ、防止され得ない不整合を有するコピーのためのストラ テジは、本明細書で後述する。同じ考慮を、他のファイルからマクロアクチュア ルパラメータへ含有されるコードに適用する。 構造翻訳は、フラグメントバウンダリを不明瞭にすべきでない。各pTAL構 文構造は、対応するC++構文構造へマップされ、その構造内部のpTALは、 対応するC++構造内部の対応するC++トークンへマップされる。結果として 生じたトークンストリーム内のトークンは、それらを発生したpTALトークン と同じ相対オーダリングを維持する必要はないが、フラグメントバウンダリは、 オーダリングエンフォースメントのポイントである。所定のC++フラグメント の各トークンは、同じpTALフラグメントの幾つかのトークンから発生される 。フラグメントバウンダリバイオレーションを防ぎ、防止され得ないバイオレー ションを有するコピーのためのストラテジは、本明細書で後述する。 構文ストリーの翻訳 ロゼッタ翻訳プログラムは、ソース言語構文ストリーを翻訳して等価なターゲ ット言語構文ストリーを発生する。ほとんどのソース言語構文ストリー構造のた めの翻訳ルーチンは、適当な場合にはターゲット言語でイディオムを発生する。 ロゼッタ翻訳プログラムは、生成された各ターゲット言語トークンを1つのソ ース言語トークンに関連させる。ソース言語トークンの「翻訳」は、ターゲット 言語トークンを生成し、この関連を確立する。どのトークンがある1つの所定の C++トークンと関連付けられるのかという選択は、C++トークンが属するフ ラグメントを決定する;pTALフラグメントのC++相対物には関連付けられ たpTAIトークンが存在する。 幾つかの構造によって、ソース言語トークンからターゲット言語トークンへの 1対1対マッピングが可能とされる。トークンが1対1にマッピングを行わない 場合、ロゼッタ翻訳プログラムは「セマンテッィクコングルーアンス(semantic congruence)」を最大とするトークンマッピングを選択する、即ち、それは、ト ークンをそれらの論理相対物に関連付けようとする。適当なマッピングを選択す ることは、意味のあるマクロ翻訳を確実なものとすることを助ける。ソース言語 のマクロ本体(若しくは、マクロアクチュアルパラメータ)に含まれるトークン のコレクションは、ターゲット言語で同じ意味を有する1つのコレクションを発 生する傾向がある。 図10は、pTAL構文ストリーとフラグメントトリーの一部を示しており、 仮想ソースを形成するpTALトークンによって接合されている。破線は、C+ +トークンとそれを発生したpTALトークンの各々の間のリンクを示す。 関連表現のトークンは、ソース言語からターゲット言語へ1対1にマッピングす る。ソース言語の「while」のキーワードは、ターゲット言語の「whil e」トークンに加えて、ターゲット言語かっこトークンを発生する。 フラグメントトリーの翻訳 C++構文ストリーを構築した後、ロゼッタ翻訳プログラムは、ターゲット言 語仮想ソーストークンストリームをあちこち移動し、その仮想ソースストリーム で出会った各ターゲット言語トークンの各々と関連付けられたソース言語トーク ンのpTALフラグメントトリーにおける位置に基づいて、C++フラングメン トトリーを構築する。 このセクションで述べる方法は、ターゲット言語フラグメントトリーを構築す る。オペレーションは以下のようなものである。 Attach(x,y):xをyにくっつけろ:yがxの親になる。xは前も って存在する兄弟の後に位置的に付加される。 Translate(n):n(トークン、若しくは、フラグメント)をオブ ジェクトのターゲット言語版へ翻訳し、その翻訳を戻せ。 Translation(n):フラグメントnの最も最近の翻訳を戻せ。もし それが翻訳されていなければnilを戻せ。 Parent(n):nがトークンの場合には、nが存在するフラグメントを戻 せ。nがフラグメントの場合には、フラグメント(例えば、マクロネームトーク ン)の呼出し構文を戻せ。 IsOpen(n):フラグメントnがターゲットフラグメントトリーにおいて オープンされている場合には、「真」を戻せ。ターゲット言語フラグメントトリ ー中の「オープン」ノードは、フラグメントトリーに付加された最後のトークン の祖先を含む。子供をフラグメントに付加することは、最も最近付加されたトー クンのもはや祖先ではないノードを「クローズ」する。 メインソースを翻訳することによる開始はフラグメントを含む。このフラグメン トが最初にオープンされる。 コード複製 ターゲットフラグメントトリーがソースフラグメントトリーに似た形状を通常 有している間は、コード複製及び再オーダリングは、この方法によって、新しい サブトリーを生成し、若しくは、サブトリーを新たな位置に生成することができ る(例えば、複製、若しくは、再オーダリングされたコードがマクロ拡張の全体 を表しているとき)。 次の例における例からの「for」ループは、制御変数の代わりに、マクロ呼 出しを使用する。 ロゼッタ翻訳プログラムは、forループの制御変数におけるコードがサイド 効果なく実行する場合にのみ、オリジナルコードのセマンテッィクを保存する。 この発行は、forループにマクロ呼出しが存在するか、存在しないかとは無関 係である;この発行はコードの複製に関連する。 ロゼッタ翻訳プログラムにおける見聞 自動翻訳は、クリティカルなシステムコードを所有権を主張できるプラグラム 言語から移動する重要な媒体である。それらを共に使用した場合、システム生成 物は、何万ものコードラインを含み、その中の何百、何千のコードラインは、何 千ものマクロを含むインタフェースを共有する。これらのマクロは、多種多様な 言語構造を含み、これらの言語構造は、しばしば良好には形成されていない。ロ ゼッタ翻訳プログラムは、この移動を促進する。本明細書の記載時において、予 備翻訳は、タンデムのコアシステムソフトウェアの主要部分をC++へ変換する 。 この章では、ロゼッタ(Rosetta)翻訳プログラムのデザインを導いた原理と要 件を記述する。 ロゼッタ翻訳プログラムの要件 ロゼッタ翻訳プログラムは、遺産的ソフトウエアの大きな本体部分を支持する 一方で、所有権主張システムのプログラミング言語上での依存性を減少させて最 終的にはなくする方法として計画された。そのため、ロゼッタ翻訳プログラムは 、本願の出願人であるタンデム社のポータブル・トランザクション・アプリケー ション言語(pTAL)から、C++のサブセットへ、高度の自動翻訳を行って いる。翻訳されたソフトウエアは、よりポータブル(移植性)があり、また、商 業的に入手可能なプログラミングツールとコンパチブルである。新しいソフトウ エアは、遺産的コードと協働しながら、オブジェクト指向プログラミング・パラ ダイムの使用を作成することができる。得られたC++ソースコードは、オリジ ナルのpTALソースコードを引退させ得るように、十分に読み取り可能でかつ 保全性がある。 ロゼッタ翻訳プログラムは数個の要件を有する: その翻訳処理は高度に自動的でなければならない。ロゼッタ翻訳プログラムは 短い経過時間でプロダクト全体を翻訳せねばならない。ロゼッタ翻訳プログラム は、「高度に自動的」でなければならないが、完全に自動的である必要はない。 ロゼッタ翻訳プログラムは、経過翻訳時間を早めるため、問題分析ツールのセッ トを備えている。自動の、ソースからソースへのトランスレータは、ソース言語 のサブセットだけを自動的に翻訳するためのものであるとか、不明瞭なコードを 発生させる点において批判の余地があり、また、言語の幾つかの特徴を翻訳する のを辞退するソースからソースへのトランスレータは、そのソースコードが大変 に長いとき、無用のものとして、批判することができる。ロゼッタ翻訳プログラ ムは、該トランスレータの便宜のためにソース言語を実質上サブセットとしては ならない、産業界での強力なツールセットである。それは、また、ターゲット言 語の共通に使用されるイディオム的な特徴の使用を作成せねばならないし、厳密 には安全であるけれど、特定的には読み取り可能でなく保全性ではない翻訳を避 けねばならない。ロゼッタ翻訳プログラムは、未熟なコードの発生を避けるのを 助力する熟練者からヒントを得ることができる。 翻訳処理は、1モジュール毎のベースで、少しずつ翻訳するのを可能にせねば ならない。1つの実現言語から他の言語への翻訳を容易にするため、製品は、そ の実現モジュール全てを翻訳する前に、翻訳したインタフェースをエクスポート できねばならないし、その製品の翻訳を、1度に1モジュールずつ、位相をあわ せねばならない。得られたC++コードは、pTALコードと協働しうるもので なければならない。 得られたコードは、オリジナルのプログラムのセマンティクスを忠実に再現で きねばならない。 得られたコードは、読み取り可能でかつ保全性がなければならない。生成され たプログラムは、言語とそのコードを実現する製品との両方に通じたプログラマ ーにとって、オリジナルコードと同じように、読み取り可能でかつ保全性がなけ ればならない。その製品に通じたプログラマーは、翻訳後、その実施の有効なメ ンタル・モデルをまだ保持していることを見出さねばならない。識別子が正当な スペルにマップされねばならない。コメントは、たとえそれが記述しているコー ドが移動してしまったときでも、そのコードに隣接して現れねばならない。ライ ン・エンドのコメントに埋め込まれたパターンやピクチャーは可能な範囲に保存 されねばならない。コードのフォーマットは、そのいくつかのものが著者の好み を反映するオリジナルコードのスタイルや整列に従うとしても、ターゲット言語 に自然に現れねばならない。ソースコード中に定義されたマクロは、可能な範囲 で、翻訳されたコードに同じ意味をエンキャプセルせねばならない。 ロゼッタ翻訳プログラムは、その新言語の自然な姿がプログラムのデザインを 顕著には変えない出力を発生する。ソフトウエア会社がせねばならない大きな投 資の1つは、ソフトウエアのメンテナンスにあり、ソフトウエア・メンテナーが 有するべき大きな資産の1つは、大きくて複雑なソフトウエア・システムの実現 の詳細に精通していることである。ほとんどのリデザインは、プログラマーによ ってうまく運営されており、プログラマーは、複雑な判断コールを作るのに十分 な資格を有するだけでなく、その後においてもその実施の経験を上手に使用する 。 得られたコードは効率的なものでなけれならない。発生したプログラムの実行 速度は、オリジナルのpTALコード・プログラムと匹敵するものでなければな らない。この目標を遂げるのには、ターゲット言語を実現するコンパイラの手の 中により多くのものがあるけれど、我々は、それらの翻訳のデザインの際に、種 々の構造のパフォーマンスを考慮に入れるための機会を持った。 上記の要件は、ロゼッタ翻訳プログラムに対して、デュアル(二重式)言語イ ンタフェースの維持(メンテナンス)、言語構造のトークンのマッピング、一致 しない翻訳の部分の処理等を含む多数の挑戦へ導いた。 デュアル言語インタフェースの維持(保全) 残念なことに、製品をC++へ変換することが、即座に、pTAL言語の使用 を除去するのではない。pTALコードインタフェースをエクスポートする製品 は、pTALクライアントが残らなくなるまで、pTALのそのインタフェース とC++とをエクスポートし続けねばならない。外部化したインタフェースのサ イズと複合性のために、及び、両言語のパラレルインタフェースを手動で維持す る場合に固有のエラーの機会のために、製品のメンテナンス員がインタフェース のただ1個のコピーをアップデートし他の言語にそのインタフェース発生するよ うにツールを使用することが、肝要になる。そのツールがロゼッタ翻訳プログラ ムである。製品メンテナンス員はpTALのバージョンを基準コピーとして使用 する。 この問題は、ロゼッタ翻訳プログラムがロール準備可(ready-to-roll)である コードを発しなければならないことを示唆している。もし、インタフェースファ イルに何らかの調整またはエンハンスメントが必要なならば、調整又はエンハン スメントが、発生したC++が読取られてそのまま使用できるように、pTAL コードへなされねばならない。pTALコードは多くの有用なC++特徴を支持 していないので、我々は、pTALソースの中に新C++だけの構造表現する方 法を提供している。 共用インタフェースのオブジェクトは、基準言語すなわちpTAL言語は表現 できないので、C++に変換したクライアントに有用なだけである。従って、言 語の変換は、外部化したインタフェースにおいて可視化したパラダイム・シフト のための方法を、即座にはクリアしない。 言語構造の翻訳 各統合的構造の翻訳は、ソース言語の辞書的要素からターゲット言語の辞書的 要素へ辞書的にマッピングするのを実施する。ターゲット言語構造とソース言語 構造からターゲット言語構造へのトークンのマッピングとの選択は、両辞書的要 素の間のセマンティックな対応を最大にする事項である。 数個の簡単な原理が、ロゼッタ翻訳プログラムの構造の翻訳の選択を案内する 。これらの原理は、得られたコードを大抵のマシン生成コードよりも自然にみえ るようにしようとする。 簡単な得られたコードを、その変形(Transformation)が一般的ではないとして も、簡単なソースコードをエミュレートするように生成する。ソース言語の困難 なコーナをエミュレートする必要のあるときにのみ、複雑な得られたコードを生 成する。例えば、pTAL言語によって、構造フィールドが他のタイプのフィー ルドを任意にオーバレイする。スペース割り当てフィールドがそれをオーバレイ するフィールドと少なくとも同じ大きさである場合、ロゼッタ翻訳プログラムC ++共用体を生成する。そうでない場合、ロゼッタ翻訳プログラムは、マクロ呼 出し(Macro Invocation)を生成し、これが、そのフィールドの使用のとき、適正 なメモリ・ロケーションへのアクセスを与える。次の例は、構造のタイプと変数 の翻訳を示している。 ロゼッタ翻訳プログラムは、本例のインボケーション表示「 redef」のような マクロに対する基準を生成し、困難なpTAL特徴のエミュレーションをエンキ ャプセレートする。これらのマクロは、包含(Incrude)ファイル「rosttta.h」の 中にある。 可能なときには変形(transformation)の単純化を使用する。例えば、C++に おいては、アレイの始まりのアドレスが、アレイの名前の使用を表示するのに最 も容易であり、ロゼッタ翻訳プログラムが初めに「&arrayname(0)」を生成する ならば、「arrayname」を生成するように、単純な変形を適用する。 ターゲット言語に共通に使用されているイディオムを生成するのを試みる。例 えば、C++ユーザは、しばしば、変数のインクリメントのために、「++」イ ディオムを用いており、ロゼッタ翻訳プログラムは、適当なときに、このイディ オムの種類(breed)を生成する。 コーディングスタイルの同じようにもっともらしい選択があるとき、プログラ マーが使用したスタイルを保存する。例えば、C++の「*varname」と「varnam e(0)」との間で選択するとき、ロゼッタ翻訳プログラムはpTALコードのスタ イルをエミュレートする。 うまくマッチングしていない言語構造に対処する戦略 1つのソース言語を別のものに翻訳するように対処するために、その言語構造 がトークンレベルにおいて相互に正確にはマッピングしていないとき、いくつか の戦略が可能になる。ロゼッタ翻訳プログラムは、それぞれ、最も役に立つ場合 のものとして、次の戦略を用いる。 --ソース言語を、ターゲット言語へ直接翻訳され得る構造に制限する。このアプ ローチは構造の翻訳を単純にする。その主たる不利な点は、ユーザが、翻訳して いない構造の使用を避けるか、または生成したコードを訂正するかしなけれなら ないことである。これは、等しく支持されたコード存在するときまたは禁止され た構造を含む遺産的ソースコードが仮想的にないときにだけ、実際的である。我 々は、ソース言語構造を、ラベルのアドレスを取る等のように、ターゲット言語 では表現され得ない一定のものに制限するように選択している。我々はまた、ソ ース言語特徴を、評価の順(order)に依存するpTAL表現のように、その翻訳 が特に読取り可能性を欠いている一定のものに制限するように選択している。そ の制限した構造は容易に記録され得る。ロゼッタ・ツールセットは、これらの特 徴の依存性の除去において、半自動的な助力を提供している。 --ソースプログラムを、より良い翻訳に導く特別の情報を与えるように拡張する 。ソースコードに精通したプログラマーからの少量の情報の場合、ロゼッタ翻訳 プログラムは相当に自然にみえる生成コードを生成できる。その主たる不利な点 は、ユーザが翻訳の前にそのソースコードを修正せねばならないということであ る。 --ロゼッタ・ツールセットは、その活動を殆ど退屈させずにエラーの傾向を少な くするツールを提供し、プログラマーの時間の使用を最適にするツールを提供す る。このトランスレータは、特定の種類の情報が役立つものであって適当な診断 を発するときを検知する。ソースコードに精通したプログラマーは、特殊なコメ ントをソースコードに埋め込むことによって、セマンティック・ヒントにするロ ゼッタ翻訳プログラムの要求に応答し、前記のソースコードから、ロゼッタ翻訳 プログラムはそれが必要とする特別の情報を拾い集めることができる。この方法 でヒントを与えることは、ソースコードの性質を阻害しないし、ソース言語のコ ンパイラを拡張することを要求しない。その情報は、将来の翻訳のため、オリジ ナルソースコードに保持される。問題分析ツールは、熟練精通者によって所望の 特殊コメントを正しい場所に挿入することによって成されたタスクを簡単にする 。 例えば、pTAL言語は署名のない変数の宣言(declaration)のないものであ り、その代わりに、署名のない演算(arithmetic)を実施する署名のないオペレー タを提供する。ユーザは、pTAL変数を、特定のコメントを変数の宣言に挿入 することによって署名なしとすることができる。ロゼッタ翻訳プログラムはそれ を真の署名なし変数として翻訳し、署名なしオペレーションを強制するタイプキ ャストの必要性をなくする。次の例は、署名なしオペレーションの翻訳を示して いる。 翻訳したコードの複雑さを、メタ言語の非常に複雑なコーナを実現するように 該言語を(マクロ経由して)消去することによって、隠す。これは、ターゲット 言語を拡張するポータブルな方法である。このアプローチは、たとえソース言語 からの簡単な構造がターゲット言語のかなり複雑な構造に翻訳しても、読み取り 可能性を保存できる。主たる不利な点は、ソフトウエアのメンテナンス員が、特 殊なマクロの使用方法を学習せねばならないということである。例えば、整数上 でのビットの抽出及び配置(deposit)オペレーションが、包含フィールド(rosett a.h)内のマクロとして供給される。次の例は、ビット抽出とビット配置の翻訳を 示している。 標準のターゲット言語で表現できないハードウエア依存性を取扱うようにター ゲット言語を拡張する。ターゲット言語は、過去において、タンデム社のシステ ムソフトウエアのいくつかの特殊な機能的要件を支持するように、拡張された。 ターゲット言語は、自動翻訳に適合するようには、拡張されていなかった。ロゼ ッタ翻訳プログラムは、ソース言語からターゲット言語の拡張部分へ、システム プログラミング構造を翻訳する。例えば、プログラムは、C++とpTALとの 間で同じようなデータのレイアウトを生成するように付加された。 コメントのハンドリング ソースからソースへのトランスレータは、ソース言語プログラムに散在してい るコメントを翻訳するためのいくつかの戦略の1つを使用することができる。 --ソースコードからコメントを集めて別々に翻訳し、翻訳したコメントを翻訳し たプログラムテキストによって出力ストリームに照合する 5。この戦略は、コメ ントの結合(association)の論点を言語構造の翻訳の問題から分離することによ って、翻訳を簡単にする。1つの不利な点は、再順序付けされたコードを記述す るコメントがセンスのある配置になるのが困難であるということである。 --コメントを、該コメントが埋め込まれている統合的構造と関連付ける 1。この 戦略は、コメントとコードを一緒に再順序付けし、コメントの配置の論点が言語 構造の翻訳を混乱させることあない。1つの不利な点は、非常に微細な結合は保 存しえないということである。キューとして特殊なコメントを使用するドキュメ ントジェネレータのようなテキストベースのプリプロセッサは、より微細な結合 が保存されるならば、より容易な入力として新言語を受け入れるであろう。 --コメントを近トークンと関連付ける。 ロゼッタ翻訳プログラムの戦略は、コメントをトークンの近くに拘束し、トー クンがターゲット言語にマップされるとき、それぞれのトークンに対応するコメ ントを翻訳することである。1つの不利な点は、ソース言語トークンがターゲッ ト言語トークンと1対1に対応しないとき、構文構造の翻訳がコメントのマッピ ングをはっきり特定しなければならないことである。この戦略は、制御の複雑さ を無くし、また適当なコメントの配置を保存するには制御を強めるのが好ましい 。 ロゼッタ翻訳プログラムは、エンドオブラインコメントを元の形で保存するこ とができ、これは内部に含まれる情報がその性質上表又は図であるときは特に有 用である。囲む構造の一部を移動しなければならない場合も、全てのコメントは 、記述したトークンと対応して残る。 ソーストークンがターゲットトークンにマップされるとき、前者に結びついた コメントは自動的に翻訳され、後者に付けられる。言語構成翻訳を実行するルー チンは、それぞれのソース言語トークンに対応するコメントを考慮する必要があ る。ソース言語トークンが、ターゲット言語トークンにマップしないなら、その コメントはマップされる適当なトークンに移動しなければならない。 発生したコードの出現は、トークンの集合と異なるかもしれないコメントの集 合を創造する構造翻訳ルーチンから利益を得ることができる。例えば、特定の構 造の第1ソース言語トークンが現れる前に現れるコメントが、また翻訳された構 造内の第1ターゲット言語トークンの前に現れる場合は、例え第1ソーストーク ンが第1ターゲットトークンにマップしない場合でも、ある構造翻訳はより現れ やすい。 トークンを含まないフラグメント内で走査されたコメントは、静的フラグメン トと組み合わされ、トリーの翻訳と別に翻訳され、類似C++静的フラグメント内 に現れる。 フラグメントの一致 ロゼッタ翻訳プログラムの設計は、それぞれのソース言語マクロが、正確に1 つのターゲット言語マクロにマップすることを要求するので、全てのマクロ使用 が遂語的に同一であることを確認し、マクロテキストが全ての使用状況で「作動 する」ことを保証する。それはまた、含まれるファイルを確認する。マクロ実際 のパラメータ範囲は、マクロボディー自体に制限されるので、ロゼッタ翻訳プロ グラムは、与えられたマクロ拡張内の形式的パラメータの全ての拡張が遂語的に 同一であることを確認しさえすればよい。 この節及び次の幾つかの節は、フラグメントの遂語的なミスマッチ、ミスマッ チを最小にする戦略、防止できないミスマッチの矯正法を述べる。 パンを含むフラグメント 2つの異なる作動を表す構文が、ターゲット言語では異なるがソース言語では 同一のときは、フラグメントの翻訳は全ての使用状況では「作用」しない。自然 言語におけるのと同様に、プログラム言語ではパンは不完全に翻訳する傾向があ る。2つの言語間でタイプ互換性規則が異なる時は、例えばタイプキャストは、 多くのタイプで使用されるマクロのミスマッチになる場合がある。 次の例は、エラー状態を例示する。同じマクロの2つの拡張の翻訳が、異なる マクロボディーテキストになる。マクロボディーの全ての例は、出力ソース発生 の前に一致するかを確認しなければならない。ロゼッタ翻訳プログラムは、この 例では"-redef"と"-tobitfield”等の参照を発生し、それがマクロに異なるpTAL 態様のエミュレーションを封じ込める。この場合、整数フィールド「a」がビッ トフィールド「k」に重なる。"-tobitfield"マクロは、パラメータとして周囲 のクラス形の名前をとる。その名前は、マクロの2つの使用について異なる、即 ち"f-"と"g-"である。次の例は、2つの使用がマッチしないマクロボディーテキ ストになるマクロを表す。即ちミスマッチのトークンが目立つ。 あいまいなフラグメントの境界 構造翻訳がフラグメントの境界をあいまいにすると、翻訳されたフラグメント のトリーは、フラグメントの2つの例が造られ、これらのフラグメントの内容が 遂語的に同一でないように見える。フラグメントの境界の侵害は、作動しないパ ンを検出するのと同じフラグメント一致性チェックにより検出される。次の例は 、不都合に形成されたマクロの使用であいまいになったフラグメントの境界を表 す。 優先するルールが、2つの言語で異なる場合は、元の表現の意味論を保存する ため括弧を導入することが一致の侵害になる場合がある。pTAL言語は、追加のオ ペレータより、レフトシフトオペレータに高い優先性を与える。C++言語は、レ フトシフトオペレータより、追加のオペレータに高い優先性を与える。括弧は、 評価の順番を保持するため、表現のターゲット言語バージョン内に現れる。括弧 トークンは、偶然高い優先性のあるオペレータから発生し、それがフラグメント の割当を決める。 前の例の翻訳は、同一のテキストを含まない実際のパラメータフラグメントの 2つの例を持つように見えるC++フラグメントトリーになる。 マクロとマクロの実際のパラメータの翻訳が一致しないことを 最小にする戦略 マクロボディーとマクロの実際のパラメータの翻訳が一致しないことは、可能 であればトークンのマッピング方法に特別のルールを組み込むことにより最小に することができる。 マクロの拡張の中にあるとき、発生したコードの変形を簡単にするのを抑制す る。一般に、構文変換は、発生したコードがマクロボディーの拡張又はマクロ形 式パラメータ拡張の内側にあるかどうかに感度は良くない。構造翻訳を実行する 幾つかのルーチンは、フラグメントを翻訳はしないがフラグメントの境界に感度 が高い。これらのルーチンは、異なるマクロ呼び出しの翻訳を遂語的に同一にす るため、マクロの拡張又はマクロ形式パラメータ拡張内の変形を簡単にするのを 抑制する。例えば、テキスト"&arrayvar[0]"を"arrayvar"に簡略化する変換は、 インデックスがマクロパラメータ内にある時はマクロ内で抑制される。同様に、 テキスト"(*ptr).field"を"p-〉field"に簡略化する変換は、"*p"がマクロの実 際のパラメータであるときは抑制される。 可能な時は、マクロの呼び出し間で異なるトークンを実際のパラメータに吸収 する。ソース言語トークンは、それ自体の論理翻訳を発生するだけでなく、幾つ かの付随バゲージも発生する場合がある。もしそのバゲージが、同じマクロの異 なる呼び出しで違う可能性があるなら、バゲージがマクロボディーでなく実際の パラメータにマップされるなら問題はない。例えば、pTALの実際のパラメータト ークンからのみ発生したC++トークンを囲む場合は、適当なオペレータを優先さ せるC++括弧は、翻訳された実際のパラメータに吸収させるべきである。 同様に、C++ "*" オペレータが、マクロ実際のパラメータ内の内在する異なる ポインターの翻訳で発生したのであれば、ノンポインター変数がマクロ内に通過 できるように、"*"オペレータは翻訳された実際のパラメータ内の吸収されるべ きである。 マクロの呼び出し間で異なるトークンをマクロ呼び出し構文を含むフラグメン ト内に押し出す。前述した戦略と同様、異なるトークンがマクロボディーのC++ 翻訳のエッジにあるなら、外側にマップされても問題はない。例えば、C++タイ プキャストが全マクロ拡張に適用されるなら、発生したテキストはマクロ呼び出 し構文に適用されるタイプキャストを示すべきである。 一致しない翻訳をされたマクロとマクロ実際のパラメータの矯正 トークンの組合せを注意深く設計しても、ソース言語内に共通コードの実行を 考慮すると、フラグメントの不一致の問題が稀であることは保証できても、全て のある得る問題を防止できるわけではない。不一致の翻訳をされたマクロまたは マクロの実際のパラメータが起こる場合は、ユーザーは3つの矯正法から選択す ることができる。それぞれの矯正法は、フラグメント不一致の問題を解決するこ とができる。もし問題のマクロがエクスポートされるなら、元の言語を実行する マクロインターフェースを変換することは、通常は可能ではない。 翻訳が「作用する」ようにマクロボディーを記録する。もしマクロボディーの 記録が問題のある構造を防ぎ、マクロのインターフェース又は使用法を乱さない なら、この戦略は可能である。マクロを記録することで使用の全ポイントを変え ることが必要なら、これは可能な解決法ではない。 ロゼッタ翻訳プログラムにマクロの全ての使用を拡張することができるように する。この戦略は、問題を含むマクロを実行しないことでいかなるフラグメント の不一致の問題をも減少させる。マクロがソフトウエアの有用性、保全性、信頼 性を改善するのに有用であれば、またはマクロがエクスポートされるなら、これ は好ましい解決法ではない。製品メインテナーがマクロを保存するのに関係しな いなら、これは可能な解決法である。次の例は、マクロの拡張を表す。 違いを封じ込めるように、ロゼッタ翻訳プログラムに追加のマクロパラメータ の発生を許す。この戦略は、どのようなフラグメントの不一致の問題をも解決す る。プログラマーが書くより感度が悪いターゲット言語コード内で実際のパラメ ータを生じる可能性がある。前の節から不一致のマクロボディーの例を呼び戻せ ば、違いを封じ込めることができる。次の例は、この封じ込めを示す。 好ましい実施例の説明 従来のトリーデータ構造を図1に概略的に示す。このデータ構造のターゲット は、一組の「物」またはオブジェクトを一つの階層(ヒエアルキー)に関連付け ることである。この組みにおける根節(root node)と称される一つのオブジェク トは、頂点にある。この根から、分岐と称されるリンクが節と称される他のオブ ジェクトに接続する。それから、これら節は、他の節へと分岐していき、最後に は、葉と称される一組のオブジェクトで終わる。このトリーを、根から葉へと分 岐の単一路を辿って見るとき、節は、互いに先祖である。逆に、このトリーを、 葉から根へと単一路を辿って見るとき、節は、互いに子孫である。任意の節を選 択するとき、根の方へ分岐するのが、その節の子供と考えられ、葉の方へ分岐す るのが、その節の親と考えられる。 図2は、従来技術に対する本発明の寄与を例示している。これは、二重根付き トリーデータ構造と称される。この二重根付きトリーは、2つの根511及び5 17を有しているが、単一の組の葉515しか有していない。従来のように、各 根から一つのトリーが発しているが、これら2つのトリーの節513及び519 、分岐521及び523、及び階層化配列は、これら2つのトリーが単一の組み の葉515にて共に終わるまでは、異なっている。本発明においては、二重根付 きトリーのリーブは、トークンと考えられ、まとめて「仮想ソース」と称される 。 図2Aは、図2のデータ構造を組み込んだ、全体として参照符号10Aとして 示したコンピュータシステムの概略ブロック図である。図2Aに例示されるよう に、コンピュータシステム10Aは、バス構造18Aによってメモリ14A及び 入力/出力チャンネル(IOC)16Aに結合された中央処理装置(CPU)1 1Aを含む。それから、IOC16Aは、CPU11Aを、入力/出力(I/O )20Aによってデータ記憶領域22Aに接続する。データ記憶領域22Aは、 磁気ディスク媒体記憶装置や電子メモリまたは他の記憶領域への通信リンクの形 を取りうる。 二重根付きトリーは二次元的なものであるが、この概念は、三次元、四次元ま たはそれ以上の次元(例示していない)へと拡張しうる。多重トリーは、単一組 の葉にて共に終わるN重根付きトリーを形成しうる。 従来のトリーは、図3のデータフローチャートに示す簡単なコンパイラの如き コンピュータ言語コンパイラにおいて有用である。この従来のコンパイラにおい ては、ソースコード51は、先ず、文字のストリームが認識しうる「ワード」ま たはトークンに分割されるスキャナ53に通され、それから、それらトークンの 間の階層化関係を決定して構文トリー57を形成するパーサ55へ通される。意 味分析器59によって行われる付加的ステップにより、構文トリー57がさらに 洗練される。構文翻訳プログラム61は、構文トリー57を中間コードトリー6 3へ変換する。それから、コード発生器65は、その中間コードトリー63をオ ブジェクトコード67へ変換する。また、普通機械コードと称されるオブジェク トコード67は、コンピュータが直接的に実行でき、通常、磁気媒体または電子 メモリに記憶される命令シーケンスである。通常の使用においては、機械コード は、人間が読み取り且つ翻訳しうる形では記憶されない。コンパイラの構成につ いての背景情報については、「Aho,Sethi,and Ullman,Compilers: Principle s,Techniques,and Tools,Addison-Wesley,1985」を参照されたい。 図4に例示されるように、簡単化された形の本発明のソースコード−ソースコ ード翻訳プログラムは、一般的には、図3の従来のコンパイラのフローに従って いる。しかしながら、簡単なトリーデータ構造を使用する代わりに、この翻訳プ ログラムは、マクロ、コードの条件付き翻訳領域、ソース包含、コメント及び他 のプリプロセッサ特性の如き文脈情報を保存するために二重根付きトリーを使用 している。 図5は、葉で接合された二重根付きトリーにおける第1のトリーを形成する方 法を記述しているフローチャートである。この方法は、図4のソースフラグメン トトリー19を形成するのに適用しうる。このフローチャートは、次のデータ及 びオペレーションを使用する。 ソースは、その一つがプライマリとして識別される、ステップ603にて使用 される一組のオブジェクトの順序集合である。 オブジェクト、オペレーションの順序集合: オープン603 その集合が空となているか否かのテスト605 次のオブジェクトを取る607 オブジェクトは、葉または順序集合である オペレーション: そのオブジェクトが葉または順序集合であるかのテスト609 親節への付加 節オペレーション: 子供の順序付加の受け入れ 親節を取る 図6は、葉で接合された二重根付きトリーにおける第2のトリーを形成する方 法を記述するフローチャートである。この方法は、図4のソース構文トリーを形 成するのに適用しうる。パーサ623へ入力されるステップ621における葉の 順序集合は、第1のトリーの順序探索によって発生される。この方法は、トリー を下から上へと形成する。 図7は、葉で接合された二重根付きトリーにおける第2のトリーの変換を記述 するフローチャートである。 図8は、葉で接合された二重根付きトリーにおける第1のトリーの変換を記述 するフローチャートである。このフローチャートは、次のデータ及びオペレーシ ョンを使用する。 節オペレーション: 変換 親節への付加 節が「オープン」であるかのテスト:このトリーにおける「オープン」 節は、このトリーに加えられた最後の葉の祖先を含む。ある節へ子供を加えると 、節が「クローズ」され、それら節は、もはや加えられた最後の葉の祖先ではな い。 葉オペレーション: 親節への付加 入力セットオペレーション: その集合が空となっているかのテスト 図8を別の仕方で記述すると、それは、ソース二重根付きトリーからターゲッ ト二重根付きトリーへとフラグメントトリーを変換する方法を示している。これ は、変換プロセスにおける重要な段階である。それは、プリプロセッサ特性がソ ースコードからターゲットコードへと変換されるポイントである。ターゲット言 語構文トリーを形成した後、翻訳プログラムは、ターゲット言語仮想ソーストー クンストリームを探索し、その仮想ソースストリームにおいて出会う各ターゲッ ト言語トークンに関連したソース言語トークンのソース言語フラグメントトリー における位置に基づいてターゲット言語フラグメントトリーを形成する。 オペレーションは、次のようである。 付加(x,y):xをyへ付加:yは、xの親となる。xは、位置的に先在する 兄弟の後に加えられる。 変換(n):n(フラグメントのトークン)をオブジェクトのターゲット言語バ ージョンへ変換し、そのトランスレーションを戻す。 トランスレーション(n):フラグメントnの最後のトランスレーションを戻す :もし、それが変換されていないならば、無とする。 親(n):もし、nがトークンであるならば、nが存在しているフラグメントを 戻す。もし、nがフラグメントであるならば、フラグメントの呼出し構文(例え ば、マクロネームトークン)を戻す。 IsOpen(n):フラグメントnがターゲットフラグメントトリーにおいてオープ ンであるならば、真に戻る。ターゲット言語フラグメントトリーにおける「オー プン」節は、そのフラグメントトリーに加えられた最後のトークンの祖先を含む 。フラグメントに子供を加えると、節がクローズされ、それら節は、最早や、加 えられた最後のトークンの祖先ではない。 主ソース包含フラグメントを変換することにより始める。このフラグメントは、 初期的にオープンである。 FOR(TargetToken=ターゲット言語仮想ソース)BEGIN SourceToken=現在TargetTokenに関連したソーストークン SourceFrag=Parent(SourceToken) IF(IsOpen(Translation(SourceFrag))) THEN BEGIN / ★既にオープンである既存のフラグメントへ新しいトークンを加える/★ TargetFrag=Translation(SourceFrag) Attach(TargetToken,TargetFrag) END ELSE BEGIN / ★新しいフラグメントを形成して、それを新しいトークンを加える/★ TargetFrag=Translation(SourceFrag) Attach(TargetToken,TargetFrag) SourceInvSyntax=Parent(SourceFrag) TargetInvSyntax=Translate(SourceInvSyntax) Attach(TargetFrag,TargetInvSyntax) SourceFrag=Parent(SourceInvSyntax) / ★TargetTokenがそのトリーに接続されるまで、新しいフラグメントおよ び呼出し構文を形成する/★ WHILE(NOT IsOpen(Translation(SourceFrag)))BEGIN TargetFrag=Translate(SourceFrag) Attach(TargetInvSyntax,TargetFrag) SourceInvSyntax=Parent(SourceFrag) TargetInvSyntax=Translate(SourceInvSyntax) Attach(TargetFrag,TargetInvSyntax) SourceFrag=Parent(SourceInvSyntax) END WHILE TargetFrag=Translation(SourceFrag) Attach(TargetInvSyntax,TargetFrag) END ELSE END FOR 図9、図10及び図11は、一緒になって、図5、図6、図7及び図8の方法 が特定の2つのリンクマクロに対してどのようにオペレートするかを示している 。 このマクロは、タンデム専有高級言語pTALのコンパイラのために書かれてい る。ターゲットソースコードは、良く知られた標準化されたC++である。 C++へ正しく変換されたマクロは、次のようである。 図9は、ソース言語としてpTAL言語を使用したフラグメントトリーと構文 トリーの例を示している。この図は、pTAL構文トリー、pTALフラグメン トトリー、図4のより一般的な方法により示されたようにこれらを結合するpT ALトークンのエクスプロージョンを示している。なお、図4の方法は、ソース ・フラグメントトリー19、ソース構文トリー7及び葉9がそれらを結合してい る。pTALフラグメントトリーと構文トリーは、トークンで結合された2つの ルートを通るトリーである。定義“レス(less)”の本体を構成するトークンは、 それらの用途の文脈において表される。 フラグメント121は、主入力ファイルを表している。フラグメント127は 、マクロ“レス”の呼出しを表している。トークン153,155,157,1 59,161,163,165,167,169,129,131,135,1 77は、フラグメント127内にある。マクロの呼出し構文129,131,1 35は、フラグメント127に関連している。マクロ本体を構成しているトーク ン171,173,141も、フラグメント127内にある。フラグメント13 7は、トークン175であるが、実際のパラメータテキストのマクロ・フォーマ ル・パラメータ“x”のための置換えを表している。このマクロ・フォーマル・ パラメータの呼出し構文141は、フラグメント137と関連している。トーク ン175は、マクロの実際のパラメータであり、フラグメント137内にある。 節179は、pTAL手続きを表している。この手続きは、節147により表 されたマクロ宣言及び節149により表されたホワイル・ステートメント(while statement)により構成されている。このマクロ・デクラレーション147は、 トークン153,155,157,159,161,163,165,167を 含む。このマクロの本体は、その用途の文脈内で拡張される。ホワイル・ステー トメント149は、トークン169、節151により表された表現(expression) 及びトークン177から構成されている。この表現151は、トークン171, 173,175から構成されている。 図10は、これらを連結するトークンを含むpTALフラグメントトリーと構 文トリーを示している。図10は、pTAL構文トリーの変換を表すC++構文 トリーも表している。この構文翻訳プログラムは、各pTAL構文の構成を同じ 意味のC++構文の構成に変換する。さらに、構文翻訳プログラムは、pTAL トークンをC++トークンにマップする。pTALは、フラグメントトリーは、 そのC++の対応するものに未だ変換されていない。ソース言語ホワイル・ステ ートメント149は、ターゲット言語ホワイル・ステートメント239に変換さ れている。ソース言語表現151は、ターゲット言語表現241に変換されてい る。C++の構文トリー243,245,247,249,251,253内の 各C++トークンは、正確に一つのpTALにより生成された。C++トークン 243はpTALトークン169により生成され、C++トークン245はpT ALトークン171により生成され、さらに、図中の破線の矢印で示されたよう に各トークンが生成された。破線の矢印で示されたC++トークンとpTALの 関係が、トークンがどの仮想フラグメントに属しているかを決定し、これらの関 係により、目標言語フラグメントトリーを構築することが可能となる。あるpT ALトークンは幾つかのC++トークンを生成することができる。例えば、pT ALトークン169はC++トークン243,245,253を生成することが できる。あるpTALトークンはC++トークンを生成することができない。例 えば、pTALトークン177はC++トークンを生成することができない。各 C++トークンは、正確に一つのpTALトークンにより生成される。 図11は、これらを連結するトークンを含むpTALフラグメントトリーと構 文トリーを示している。図11は、これらを連結する意味の同じC++グラグメ ント・トリーと構文トリーも表している。図11は、フラグメントトリーの変換 後を表している。変換を実行するために、C++構文トリーの葉を走査させる。 これらの葉は、将来的にC++フラグメントトリーの葉となる。 次に、図10と図11に示されたpTALフラグメント・サブトリーと等しい 意味のC++フラグメント・サブトリーの例の構築の概要を説明する。C++フ ラグメントトリー内のフラグメントは、それがこのC++フラグメントトリーに 最も新しく加えられた葉の祖先であるならば、“オープン”である。 pTALフラグメントトリーの根を変換する。即ち、pTALフラグメント1 21がC++フラグメント273に変換される。C++フラグメントトリー根節 273は、最初は“オープン”である。 C++トークン243を検討する。このトークンは、pTALトークン169 と関係している。pTALトークン169は、pTALフラグメント121内に 含まれ、このpTALフラグメント121はC++フラグメント273に変換さ れる。C++フラグメント273は、“オープン”である。C++フラグメント 273にC++トークン243を加える。 C++トークン245を検討する。このトークンはpTALトークン169と 関係している。このpTALトークン169は、pTALフラグメント121内 に含まれる。pTALフラグメント121はC++フラグメント273にトラン スレーションされる。C++フラグメント273は“オープン”である。C++ フラグメント273にC++トークン245を加える。 C++トークン247を検討する。このトークンはpTALトークン171と 関係している。このpTALトークン171は、pTALフラグメント127内 に含まれる。pTALフラグメント127は変換されず、そのため、C++フラ グメントトリー内に現れない。C++フラグメント127を変換し、C++フラ グメント265を生成する。C++トークン247をC++フラグメント265 に加える。pTALフラグメント127の親は、pTALフラグメント121で ある。このpTALフラグメント121がC++フラグメント273に変換され る。このC++フラグメント273は、C++フラグメントトリー内で“オープ ン”である。C++フラグメント265をC++フラグメント273に加える。 C++トークン249を検討する。このトークンはpTALトークン173と 関係している。このpTALトークン173は、pTALフラグメント127内 に含まれる。pTALフラグメント127はC++フラグメント265に変換さ れる。C++フラグメント265は、C++フラグメントトリー内で“オープン ”である。C++トークン249をC++フラグメント265に加える。 C++トークン251を検討する。このトークンはpTALトークン175と 関係している。このpTALトークン175は、pTALフラグメント137内 に含まれる。pTALフラグメント137は変換されず、そのため、C++フラ グメントトリー内に現れない。pTALフラグメント137を変換し、C++フ ラグメント261を生成する。C++トークン251をC++フラグメント26 1に加える。pTALフラグメント137の親は、pTALフラグメント 127である。このpTALフラグメント127がC++フラグメント265に 変換される。このC++フラグメント265は、C++フラグメントトリー内で “オープン”である。C++フラグメント261をC++フラグメント265に 加える。 C++トークン253を検討する。このトークンはpTALトークン169と 関係している。このpTALトークン169は、pTALフラグメント121内 に含まれ、C++フラグメント273に変換される。C++フラグメント273 は、“オープン”である。C++トークン253をC++フラグメント273に 加える。 ここで、C++フラグメント261,265は、もはや“オープン”ではない 。即ち、これらは、もはやC++フラグメントトリーに加えられるべき最後のC ++トークンの前身ではない。
───────────────────────────────────────────────────── フロントページの続き (72)発明者 デル ヴィーニャ ポール アメリカ合衆国 カリフォルニア州 95126 サン ホセ マグノリア アベニ ュー 1374 (72)発明者 モーロイ マーク イー アメリカ合衆国 カリフォルニア州 95138 サン ホセ ユアシャン コート 138

Claims (1)

  1. 【特許請求の範囲】 1.データ処理システムで実行されるアプリケーションプログラムによるアクセ スのためのデータを記憶するメモリであって、 前記メモリに記憶された二重根付きトリーデータ構造を備え、 前記データ構造は、 一組の葉; 一つ以上の親、子、祖先、及び子孫を有し、根、一組の枝、及び一組の節 を有するトリーデータ構造によって表しうる、前記一組の葉で終了している、第 1の階層的に関連したオブジェクトの組; 前記一組の葉で終了する第2の階層的に関連したオブジェクトの組; を含んでいることを特徴とするメモリ。 2.前記一組の葉は、前記一組のオブジェクトから生成されたトークンの流れを 含んでいる仮想ソースを備えていることを特徴とする請求項1に記載のメモリ。 3.前記トークンは、スキャナ手段によって生成されることを特徴とする請求項 2に記載のメモリ。 4.請求項1に記載の前記メモリを組み込んでいるコンピュータシステム。 5.前記一組の葉で終了している一つ以上のさらなる階層的に関連したオブジェ クトの組を含んでいる前記メモリに記憶されたN根付きトリー構造を更に備えて いることを特徴とする請求項1に記載のメモリ。 6.二重根付きトリーデータ構造を生成しかつ当該データ構造に情報を記憶する ためにコンピュータシステムで使用する方法であって、 メモリから一組のオブジェクトを検索し; 構文構造物をもたらしている、オブジェクトの間の第1の階層関係の組を識別 し; 前記構文構造物を仮想ソースの中にスキャンし; 第1のトリーが前記仮想ソースで終了するように前記第1の階層関係の組に従 って深さ優先走査順でトップダウン手段により第1のトリーに前記構文構造物を 記憶し; オブジェクトの間の第2の階層関係の組を識別し; 第2のトリーが前記仮想ソースで終了するように前記第2の階層関係の組に従 って深さ優先走査順でボトムアップ手段により第2のトリーに前記オブジェクト を記憶する、 コンピュータインプリメントされた段階を具備することを特徴とする方法。 7.前記オブジェクトの間の前記第1の階層関係の組を識別する方法は、 (a)前記オブジェクトをトークンの中にスキャンし; (b)テキスト置換えに対する呼出し表現を表す一組のトークンを認識し; (c)前記表現を一つ以上の節に関連付け; (d)前記呼出し表現によって表されたようにテキスト置換えを実行し; (e)前記トークンが使い果たされるまで前記段階(b)、(c)、及び(d) を繰り返し、前記構文構造物をもたらすことを含んでいる仮想ソース生成機構を 具備することを特徴とする請求項6に記載の方法。 8.第1のターゲットトリー及び第2のターゲットトリーを含んでいるターゲッ ト二重根付きトリーデータ構造に、第1のソーストリー及び第2のソーストリー を含んでいるソース二重根付きトリーデータ構造を変換するためにコンピュータ システムで使用する方法であって、 前記ソースデータ構造の中に情報を記憶することに結合された前記ソースデー タ構造を生成し; 前記第2のターゲットトリーを生成する手段に結合されたその節を走査するこ とに結合された前記第2のソーストリーを変換し; 前記第1のターゲットトリーを生成する手段に結合されたその節を走査するこ とに結合された前記第1のソーストリーを変換する コンピュータインブリメントされた段階を具備することを特徴とする方法。 9.ソースコンピュータ言語の第1のソースコードをターゲットコンピュータ言 語の第2のソースコードの中に変換するためにコンピュータシステムで使用する 方法であって、 前記第1のソースコードを検索する手段; ソースフラグメントトリーを生成するために前記第1のソースコードからの 仮想ソース生成のための手段; 仮想ソースを形成するために前記第1のソースコードをスキャンし; 前記ソース二重根付きトリーの葉として前記仮想ソースを識別し; 前記ソース二重根付きトリーの前記葉で前記ソースフラグメントトリーの葉 を識別し; 前記ソース構文トリーの前記葉が前記ソース二重根付きトリーの前記葉で識 別されるようにソース構文トリーの中に前記仮想ソースをパーズする手段; 前記ソース構文トリーにおいて前記ソースコードの記述を終了しているセマ ンティク情報を取得しかつ記憶する手段; を含んでいるソース二重根付きトリーデータ構造を生成する手段: ターゲット構文トリーを生成する手段に結合された前記ソース構文トリーを 変換する手段; 前記ターゲット構文トリーの葉を前記ターゲット二重根付きトリーの葉で識 別し; 前記ターゲット二重根付きトリーの葉を前記ソース二重根付きトリーの対応 している葉に関連付け; 前記ターゲットフレグメントトリーの葉がオーダーされるようにターゲット フレグメントトリーを生成する手段に結合された前記ソースフレグメントトリー を変換する手段; 前記ターゲットフレグメントトリーの葉を前記ターゲット二重根付きトリー の葉で識別すること; を含んでいるターゲット二重根付きトリーデータ構造を生成する手段: 前記ターゲット二重根付きトリーから前記第2のソースコードを生成する手段 ; 前記第2のソースコードを記憶する手段 を具備することを特徴とする方法。 10.ターゲットフレグメントトリーを生成する手段に結合された前記ソースフ レグメントトリーを変換する前記手段は、 前記ソースフレグメントトリーの前記根を位置決めし; 前記ソース根を前記ターゲットフレグメントトリーの前記根に変換し; 前記ターゲット構文トリーの各葉を検査し; ターゲットフレグメントトリー葉を位置決めし; 前記ターゲットフレグメントトリー葉に関連付けられたソースフレグメン トトリー葉を検査し; 前記ソースフレグメントトリー葉の親節を検査し; 前記親節の最近の変換が最近装着されたターゲットフレグメントトリー葉 の祖先であるかまたは前記ターゲットフレグメントトリーの前記根であるかをテ ストし; 前記テストがTRUEであれば前記最近装着された葉の前記親節に前 記ターゲットフレグメントトリー葉を装着し; 前記ターゲットフレグメントトリー葉を前記親節に装着し; 次のターゲットフレグメントトリー葉を検査し; 前記テスト結果がFALSEであれば前記親節を変換し; 前記親節を前記ターゲットフレグメントトリーに追加し; 前記ターゲットフレグメントトリー葉を前記親節に装着し; 前記親節を第1の一時オブジェクトに割り当て; 前記親節の親を第2の一時オブジェクトに割り当てる; 段階を含んでいる前記ソースフレグメントトリーにおける葉の位置に基づ き前記ターゲットフレグメントトリーを構築する手段; 前記第2の一時オブジェクトが前記最近装着されたターゲットフレグメン トトリー葉の祖先かまたは前記ターゲットフレグメントトリーの前記根であるか をテストし; 前記テスト結果が“TRUE”であれば前記ターゲットに前記第2の 一時オブジェクトを追加し; 前記第1の一時オブジェクトを前記祖先節に装着し; 次のターゲットフレグメントトリー葉を検査し; 前記テスト結果が“FALSE”であれば前記第2の一時オブジェク トを変換し; 前記第2の一時オブジェクトを前記フレグメントトリーに装着し ; 前記第1の一時オブジェクトを前記第2の一時オブジェクトに装 着し; 前記第2の一時オブジェクトを前記第1の一時オブジェクトに割 り当て; 前記第2の一時オブジェクトをテストすることを繰り返す 段階を具備していること特徴とする請求項9に記載の方法。 11.テキストプリプロセッサステートメント及び表現を保存すると同時に、ソ ースコンピュータ言語の第1のソースコードをターゲットコンピュータ言語の第 2のソースコードに変換する装置であって、 前記第1のソースコードを記憶するために割り当てられたメモリを有するソー スコンピュータ言語ファイル手段; 前記第2のソースコードを記憶するために割り当てられたメモリを有するター ゲットコンピュータ言語ファイル手段; 前記第1及び第2のデータ構造内に記憶されるべき情報に対して割り当てられ たメモリを有する第1及び第2の二重根付きトリーデータ構造を生成する手段; メモリから前記第1のソースコードを検索する手段; 前記第1のソースコードを第1の仮想ソースの中にスキャンしかつパーズする 手段; 前記スキャンしかつパーズする手段に結合され、テキストプリプロセッサステ ートメント及び表現が保存されるように前記第1の二重根付きトリーデータ構造 においてスキャンしかつパーズすると同時に前記第1の仮想ソースコードを記憶 する手段; 前記第1の二重根付きトリー構造を第2の仮想ソースコードの中に変換する手 段; 前記変換する手段に結合され、テキストプリプロセッサステートメント及び表 現が保存されるように前記第2の二重根付きトリーデータ構造に前記第2の仮想 ソースコードを記憶する手段; 前記第2のソースコードを生成する手段に結合された前記第2のデータ構造を 走査する手段; 前記ターゲットコンピュータ言語ファイル手段に結合された前記第2のソース コードを記憶する手段 を備えていることを特徴とする装置。
JP8512724A 1994-10-07 1995-10-06 ソースコードを一つの高級コンピュータ言語から別の高級コンピュータ言語へ変換する方法及び装置 Ceased JPH10508398A (ja)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US08/319,682 1994-10-07
US08/319,682 US5768564A (en) 1994-10-07 1994-10-07 Method and apparatus for translating source code from one high-level computer language to another
PCT/US1995/013260 WO1996011437A1 (en) 1994-10-07 1995-10-06 Method and apparatus for translating source code from one high-level computer language to another

Publications (1)

Publication Number Publication Date
JPH10508398A true JPH10508398A (ja) 1998-08-18

Family

ID=23243255

Family Applications (1)

Application Number Title Priority Date Filing Date
JP8512724A Ceased JPH10508398A (ja) 1994-10-07 1995-10-06 ソースコードを一つの高級コンピュータ言語から別の高級コンピュータ言語へ変換する方法及び装置

Country Status (6)

Country Link
US (2) US5768564A (ja)
EP (1) EP0789875B1 (ja)
JP (1) JPH10508398A (ja)
CA (1) CA2201882A1 (ja)
DE (1) DE69516891T2 (ja)
WO (1) WO1996011437A1 (ja)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2006011756A (ja) * 2004-06-24 2006-01-12 Fujitsu Ltd プログラム変換プログラム、プログラム変換装置およびプログラム変換方法

Families Citing this family (192)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP3505266B2 (ja) * 1995-06-15 2004-03-08 三洋電機株式会社 プログラム実行装置
US6173327B1 (en) * 1996-07-11 2001-01-09 Jeroen De Borst Object-oriented method and apparatus for information delivery
US5943674A (en) * 1996-07-11 1999-08-24 Tandem Computers Incorporated Data structure representing an interface definition language source file
US6263485B1 (en) 1996-07-11 2001-07-17 Andrew Schofield Method and apparatus for describing an interface definition language-defined interface, operation, and data type
US5884083A (en) * 1996-09-20 1999-03-16 Royce; Robert Computer system to compile non-incremental computer source code to execute within an incremental type computer system
US6658624B1 (en) * 1996-09-24 2003-12-02 Ricoh Company, Ltd. Method and system for processing documents controlled by active documents with embedded instructions
JPH10177495A (ja) * 1996-12-18 1998-06-30 Toshiba Corp 分散形制御ネットワークシステム
JP3130828B2 (ja) * 1997-04-28 2001-01-31 日本電気アイシーマイコンシステム株式会社 アセンブル処理方式
GB2324890B (en) * 1997-05-03 2002-05-08 Ibm Data processing method and apparatus
US6960133B1 (en) * 2000-08-28 2005-11-01 Igt Slot machine game having a plurality of ways for a user to obtain payouts based on selection of one or more symbols (power pays)
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
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
WO1999012094A1 (de) * 1997-09-01 1999-03-11 Siemens Nixdorf Informationssysteme Ag Verfahren zum umsetzen eines objektcodes in einen programmcode
US5953526A (en) * 1997-11-10 1999-09-14 Internatinal Business Machines Corp. Object oriented programming system with displayable natural language documentation through dual translation of program source code
US6631514B1 (en) * 1998-01-06 2003-10-07 Hewlett-Packard Development, L.P. Emulation system that uses dynamic binary translation and permits the safe speculation of trapping operations
US6487566B1 (en) * 1998-10-05 2002-11-26 International Business Machines Corporation Transforming documents using pattern matching and a replacement language
US6317873B1 (en) * 1998-10-14 2001-11-13 Alcatel Usa Sourcing, L.P. Assembly language translator
EP1121654A4 (en) * 1998-10-16 2003-09-24 Computer Ass Think Inc METHOD AND SYSTEM FOR EXTENSIBLE MAGRO LANGUAGE
US6357003B1 (en) * 1998-10-21 2002-03-12 Silicon Graphics, Inc. Advanced firmware boot sequence x86 computer system that maintains legacy hardware and software compatibility
US6346945B1 (en) * 1998-12-28 2002-02-12 Klocwork Solutions Method and apparatus for pattern-based flowcharting of source code
US7047232B1 (en) * 1999-01-13 2006-05-16 Ab Initio Software Corporation Parallelizing applications of script-driven tools
US6374239B1 (en) 1999-02-09 2002-04-16 International Business Machines Corporation Method and computer program product for implementing translatable text in user modifiable SQL scripts
CA2267482C (en) * 1999-03-30 2004-08-10 Ibm Canada Limited-Ibm Canada Limitee Report program language source code translation to object-oriented language source code which emulates report program language behaviour
US6889260B1 (en) * 1999-06-10 2005-05-03 Ec Enabler, Ltd Method and system for transferring information
US7054015B1 (en) * 1999-07-02 2006-05-30 Electronics For Imaging, Inc. Printer description file format generator
FR2798483B1 (fr) * 1999-08-16 2001-12-14 Cit Alcatel Procede de production automatique de specifications
US6654950B1 (en) 1999-08-24 2003-11-25 Bae Systems Mission Solutions Inc. Software rehosting system and method
US6353925B1 (en) * 1999-09-22 2002-03-05 Compaq Computer Corporation System and method for lexing and parsing program annotations
US7734457B2 (en) * 1999-10-16 2010-06-08 Computer Associates Think, Inc. Method and system for generating dynamic comparison models
JP3430252B2 (ja) * 2000-01-24 2003-07-28 独立行政法人産業技術総合研究所 ソースコード変換方法、ソースコード変換プログラムを記録した記録媒体及びソースコード変換装置
US6675370B1 (en) 2000-02-02 2004-01-06 International Business Machines Corporation System and method for imbedding hyperlinked language grammar notation in a “literate” programming environment
US6769985B1 (en) 2000-05-31 2004-08-03 Igt Gaming device and method for enhancing the issuance or transfer of an award
US20030200535A1 (en) * 2000-06-09 2003-10-23 Mcnamara Benedict Bede System for program source code conversion
US6915508B2 (en) * 2000-06-12 2005-07-05 Sun Microsystems, Inc. Method and apparatus for eliminating C recursion from a Java™ bytecode interpreter
US7695363B2 (en) * 2000-06-23 2010-04-13 Igt Gaming device having multiple display interfaces
US7699699B2 (en) 2000-06-23 2010-04-20 Igt Gaming device having multiple selectable display interfaces based on player's wagers
US6874141B1 (en) * 2000-06-29 2005-03-29 Microsoft Corporation Method of compiling schema mapping
US6935955B1 (en) 2000-09-07 2005-08-30 Igt Gaming device with award and deduction proximity-based sound effect feature
US6739973B1 (en) * 2000-10-11 2004-05-25 Igt Gaming device having changed or generated player stimuli
US7120902B2 (en) * 2000-12-04 2006-10-10 Hewlett-Packard Development Company, L.P. Method and apparatus for automatically inferring annotations
US7174536B1 (en) * 2001-02-12 2007-02-06 Iowa State University Research Foundation, Inc. Integrated interactive software visualization environment
US20020111963A1 (en) * 2001-02-14 2002-08-15 International Business Machines Corporation Method, system, and program for preprocessing a document to render on an output device
US6749502B2 (en) * 2001-03-21 2004-06-15 Igt Gaming device having a multi-characteristic matching game
US6934709B2 (en) 2001-03-26 2005-08-23 Matrixone, Inc. Interface definition language compiler
WO2002093367A1 (en) * 2001-05-11 2002-11-21 Computer Associates Think, Inc. Method and system for transforming legacy software applications into modern object-oriented systems
US6993751B2 (en) * 2001-05-14 2006-01-31 Microsoft Corporation Placing exception throwing instructions in compiled code
US7043716B2 (en) * 2001-06-13 2006-05-09 Arius Software Corporation System and method for multiple level architecture by use of abstract application notation
GB0120611D0 (en) * 2001-08-24 2001-10-17 Igt Uk Ltd Video display systems
US7901291B2 (en) 2001-09-28 2011-03-08 Igt Gaming device operable with platform independent code and method
US6848996B2 (en) * 2001-10-15 2005-02-01 Igt Gaming device with sound recording changes associated with player inputs
US7666098B2 (en) 2001-10-15 2010-02-23 Igt Gaming device having modified reel spin sounds to highlight and enhance positive player outcomes
US7708642B2 (en) * 2001-10-15 2010-05-04 Igt Gaming device having pitch-shifted sound and music
US6694497B2 (en) * 2001-10-26 2004-02-17 Stmicroelectronics Limited Method of testing integrated circuitry at system and module level
US6925635B2 (en) * 2001-12-13 2005-08-02 International Business Machines Corporation Embedded pre-processor with dynamic macro forms
US7065549B2 (en) * 2002-03-29 2006-06-20 Illinois Institute Of Technology Communication and process migration protocols for distributed heterogeneous computing
US7359904B2 (en) * 2002-06-14 2008-04-15 Integrated Knowledge Solutions, Inc. Method to efficiently process and present possible arrangements of a set of contiguous peer-to-peer links
US7346897B2 (en) * 2002-11-20 2008-03-18 Purenative Software Corporation System for translating programming languages
US8332828B2 (en) * 2002-11-20 2012-12-11 Purenative Software Corporation System for translating diverse programming languages
US9965259B2 (en) 2002-11-20 2018-05-08 Purenative Software Corporation System for translating diverse programming languages
US8656372B2 (en) * 2002-11-20 2014-02-18 Purenative Software Corporation System for translating diverse programming languages
US9086931B2 (en) 2002-11-20 2015-07-21 Purenative Software Corporation System for translating diverse programming languages
US7120905B2 (en) * 2003-01-29 2006-10-10 Wind River Systems, Inc. System and method for transformation of assembly code for conditional execution
US6961733B2 (en) * 2003-03-10 2005-11-01 Unisys Corporation System and method for storing and accessing data in an interlocking trees datastore
US7337438B1 (en) 2003-03-31 2008-02-26 Applied Micro Circuits Corporation Macros to support structures for an assembler that does not support structures
US20080320054A1 (en) * 2003-04-09 2008-12-25 Cindy Howard Database and Software Conversion System and Method
US7240338B1 (en) 2003-05-29 2007-07-03 Itt Manufacturing Enterprises, Inc. Computer language translation system and method of converting procedural computer language software to object-oriented computer language software
US7165238B2 (en) * 2003-06-06 2007-01-16 Intentional Software Corporation Method and system for organizing and manipulating nodes by category in a program tree
US7383542B2 (en) * 2003-06-20 2008-06-03 Microsoft Corporation Adaptive machine translation service
US7051279B2 (en) * 2003-07-08 2006-05-23 Intentional Software Corporation Method and system for providing multiple levels of help information for a computer program
CN1567223A (zh) * 2003-07-09 2005-01-19 松下电器产业株式会社 程序生成装置、方法及程序
WO2005015389A1 (en) * 2003-07-11 2005-02-17 Computer Associates Think, Inc. Adding user-defined objects to a modeling tool
US7272821B2 (en) 2003-08-25 2007-09-18 Tech Mahindra Limited System and method of universal programming language conversion
US7789748B2 (en) * 2003-09-04 2010-09-07 Igt Gaming device having player-selectable music
US7105736B2 (en) * 2003-09-09 2006-09-12 Igt Gaming device having a system for dynamically aligning background music with play session events
US8516004B2 (en) * 2003-09-19 2013-08-20 Unisys Corporation Method for processing K node count fields using an intensity variable
US7356804B2 (en) * 2003-11-26 2008-04-08 Sap Aktiengesellschaft Language integrated unit testing
US7340471B2 (en) 2004-01-16 2008-03-04 Unisys Corporation Saving and restoring an interlocking trees datastore
US7593923B1 (en) 2004-06-29 2009-09-22 Unisys Corporation Functional operations for accessing and/or building interlocking trees datastores to enable their use with applications software
FR2872600B1 (fr) * 2004-07-02 2008-04-18 Thales Sa Procede de transformation de code informatique et produit/ programme d'ordinateur pour la mise en oeuvre d'un tel procede
US20060041940A1 (en) * 2004-08-21 2006-02-23 Ko-Cheng Fang Computer data protecting method
US7213041B2 (en) 2004-10-05 2007-05-01 Unisys Corporation Saving and restoring an interlocking trees datastore
US8043155B2 (en) 2004-10-18 2011-10-25 Igt Gaming device having a plurality of wildcard symbol patterns
US7716241B1 (en) 2004-10-27 2010-05-11 Unisys Corporation Storing the repository origin of data inputs within a knowledge store
US7908240B1 (en) 2004-10-28 2011-03-15 Unisys Corporation Facilitated use of column and field data for field record universe in a knowledge store
US7676477B1 (en) 2005-10-24 2010-03-09 Unisys Corporation Utilities for deriving values and information from within an interlocking trees data store
US20070162508A1 (en) * 2004-11-08 2007-07-12 Mazzagatti Jane C Updating information in an interlocking trees datastore
US7499932B2 (en) * 2004-11-08 2009-03-03 Unisys Corporation Accessing data in an interlocking trees data structure using an application programming interface
US7418445B1 (en) 2004-11-08 2008-08-26 Unisys Corporation Method for reducing the scope of the K node construction lock
US7348980B2 (en) 2004-11-08 2008-03-25 Unisys Corporation Method and apparatus for interface for graphic display of data from a Kstore
US8698817B2 (en) * 2004-11-15 2014-04-15 Nvidia Corporation Video processor having scalar and vector components
US20060143598A1 (en) * 2004-12-29 2006-06-29 Zimmer Vincent J Method and apparatus for transforming program representations
US7774787B2 (en) * 2005-01-11 2010-08-10 Microsoft Corporation Method for specifying and verifying multi-threaded object-oriented programs with invariants
US7409380B1 (en) 2005-04-07 2008-08-05 Unisys Corporation Facilitated reuse of K locations in a knowledge store
US7590978B2 (en) * 2005-04-15 2009-09-15 Microsoft Corporation Inferring object invariant method and system
US7559054B2 (en) * 2005-04-19 2009-07-07 Microsoft Corporation Abstract interpretation with a congruence abstract domain and/or a heap succession abstract domain
US20060242171A1 (en) * 2005-04-22 2006-10-26 Igor Tsyganskiy Methods of using code-based case tools to verify application layer configurations
US20060242194A1 (en) * 2005-04-22 2006-10-26 Igor Tsyganskiy Systems and methods for modeling and manipulating a table-driven business application in an object-oriented environment
US7720879B2 (en) * 2005-04-22 2010-05-18 Sap Ag Methods of using an integrated development environment to configure business applications
US20060242174A1 (en) * 2005-04-22 2006-10-26 Igor Tsyganskiy Systems and methods for using object-oriented tools to debug business applications
US20060242197A1 (en) * 2005-04-22 2006-10-26 Igor Tsyganskiy Methods of transforming application layer structure as objects
US20060293935A1 (en) * 2005-04-22 2006-12-28 Igor Tsyganskiy Methods and systems for incrementally exposing business application errors using an integrated display
US20060241999A1 (en) * 2005-04-22 2006-10-26 Igor Tsyganskiy Methods of exposing a sequence of instructions into an object-oriented programming language
US7958486B2 (en) * 2005-04-22 2011-06-07 Sap Ag Methods and systems for data-focused debugging and tracing capabilities
US8539003B2 (en) * 2005-04-22 2013-09-17 Sap Ag Systems and methods for identifying problems of a business application in a customer support system
US7542980B2 (en) 2005-04-22 2009-06-02 Sap Ag Methods of comparing and merging business process configurations
US20060241961A1 (en) * 2005-04-22 2006-10-26 Igor Tsyganskiy Methods of optimizing legacy application layer control structure using refactoring
US20060242172A1 (en) * 2005-04-22 2006-10-26 Igor Tsyganskiy Systems and methods for transforming logic entities of a business application into an object-oriented model
US20060242176A1 (en) * 2005-04-22 2006-10-26 Igor Tsyganskiy Methods of exposing business configuration dependencies
US20060242188A1 (en) * 2005-04-22 2006-10-26 Igor Tsyganskiy Methods of exposing a missing collection of application elements as deprecated
US20060293940A1 (en) * 2005-04-22 2006-12-28 Igor Tsyganskiy Methods and systems for applying intelligent filters and identifying life cycle events for data elements during business application debugging
US7702638B2 (en) * 2005-04-22 2010-04-20 Sap Ag Systems and methods for off-line modeling a business application
US20060242196A1 (en) * 2005-04-22 2006-10-26 Igor Tsyganskiy Methods of exposing application layer integrity as object oriented programming language elements
US20060242177A1 (en) * 2005-04-22 2006-10-26 Igor Tsyganskiy Methods of exposing business application runtime exceptions at design time
US20060282458A1 (en) * 2005-04-22 2006-12-14 Igor Tsyganskiy Methods and systems for merging business process configurations
US20060271920A1 (en) * 2005-05-24 2006-11-30 Wael Abouelsaadat Multilingual compiler system and method
US7389301B1 (en) 2005-06-10 2008-06-17 Unisys Corporation Data aggregation user interface and analytic adapted for a KStore
JP4670496B2 (ja) * 2005-06-14 2011-04-13 住友電気工業株式会社 光受信器
US20070011669A1 (en) * 2005-07-06 2007-01-11 International Business Machines Corporation Software migration
US7730477B2 (en) * 2005-09-26 2010-06-01 Bea Systems Inc. System and method for propagation in a web portal system
US7752651B2 (en) * 2005-09-26 2010-07-06 Bea Systems Inc. System and method for propagating security information in a web portal system
WO2007074469A2 (en) * 2005-12-27 2007-07-05 Vaakya Technologies Private Limited Method and system for compiling a source code
US20070214153A1 (en) * 2006-03-10 2007-09-13 Mazzagatti Jane C Method for processing an input particle stream for creating upper levels of KStore
US20080275842A1 (en) * 2006-03-20 2008-11-06 Jane Campbell Mazzagatti Method for processing counts when an end node is encountered
US20070220069A1 (en) * 2006-03-20 2007-09-20 Mazzagatti Jane C Method for processing an input particle stream for creating lower levels of a KStore
US7734571B2 (en) * 2006-03-20 2010-06-08 Unisys Corporation Method for processing sensor data within a particle stream by a KStore
US8015554B2 (en) * 2006-03-24 2011-09-06 International Business Machines Corporation Source-to-source transformation for language dialects
US7689571B1 (en) 2006-03-24 2010-03-30 Unisys Corporation Optimizing the size of an interlocking tree datastore structure for KStore
US8238351B2 (en) * 2006-04-04 2012-08-07 Unisys Corporation Method for determining a most probable K location
US7774746B2 (en) * 2006-04-19 2010-08-10 Apple, Inc. Generating a format translator
JP2007304840A (ja) * 2006-05-11 2007-11-22 Matsushita Electric Ind Co Ltd コンパイル方法、デバッグ方法、コンパイルプログラムおよびデバッグプログラム
US7676330B1 (en) 2006-05-16 2010-03-09 Unisys Corporation Method for processing a particle using a sensor structure
US7788658B2 (en) * 2006-05-31 2010-08-31 International Business Machines Corporation Computer code partitioning for enhanced performance
US8079027B2 (en) * 2006-09-08 2011-12-13 Via Technologies, Inc. Programming language translation systems and methods
WO2008108665A1 (en) * 2007-03-05 2008-09-12 Innaworks Development Limited A computer implemented translation method
US20080250231A1 (en) * 2007-04-03 2008-10-09 Kabushiki Kaisha Toshiba Program code conversion apparatus, program code conversion method and recording medium
EP2037374A1 (en) * 2007-09-11 2009-03-18 Siemens Aktiengesellschaft Method for translating a graphical workflow in a textual description
US8181167B2 (en) * 2008-01-09 2012-05-15 Kan Zhao Method and system for presenting and analyzing software source code through intermediate representation
US8249856B2 (en) * 2008-03-20 2012-08-21 Raytheon Bbn Technologies Corp. Machine translation
US8762962B2 (en) * 2008-06-16 2014-06-24 Beek Fund B.V. L.L.C. Methods and apparatus for automatic translation of a computer program language code
US8099721B2 (en) * 2008-06-17 2012-01-17 Microsoft Corporation Parsing of declarations in all branches of preprocessor conditionals
US20090328016A1 (en) * 2008-06-27 2009-12-31 Microsoft Corporation Generalized expression trees
US8591308B2 (en) * 2008-09-10 2013-11-26 Igt Gaming system and method providing indication of notable symbols including audible indication
US20100088686A1 (en) * 2008-10-06 2010-04-08 Microsoft Corporation Programming language with extensible syntax
US8762963B2 (en) * 2008-12-04 2014-06-24 Beck Fund B.V. L.L.C. Translation of programming code
US20100153912A1 (en) * 2008-12-15 2010-06-17 Apple Inc. Variable type knowledge based call specialization
JP2010287213A (ja) * 2009-05-11 2010-12-24 Nec Corp ファイル変換装置、ファイル変換方法およびファイル変換プログラム
US9665620B2 (en) 2010-01-15 2017-05-30 Ab Initio Technology Llc Managing data queries
US20110307904A1 (en) * 2010-06-14 2011-12-15 James Malnati Method and apparatus for automation language extension
US20110313995A1 (en) * 2010-06-18 2011-12-22 Abraham Lederman Browser based multilingual federated search
DE102010032136A1 (de) * 2010-07-24 2012-01-26 Man Truck & Bus Ag Austauschverfahren für ein Steuergerät in einem Bordnetz eines Fahrzeuges
US9053099B2 (en) * 2010-08-10 2015-06-09 International Business Machines Corporation Method for validating equivalent data structures
US9116955B2 (en) 2011-05-02 2015-08-25 Ab Initio Technology Llc Managing data queries
CN102937910B (zh) * 2011-08-16 2015-06-10 中广核(北京)仿真技术有限公司 控制算法跨平台转换系统及方法
US8799864B2 (en) * 2011-09-13 2014-08-05 Synopsys, Inc. Providing SystemVerilog testing harness for a standardized testing language
US8806452B2 (en) 2011-11-10 2014-08-12 International Business Machines Corporation Transformation of computer programs and eliminating errors
US9043766B2 (en) * 2011-12-16 2015-05-26 Facebook, Inc. Language translation using preprocessor macros
US8460090B1 (en) 2012-01-20 2013-06-11 Igt Gaming system, gaming device, and method providing an estimated emotional state of a player based on the occurrence of one or more designated events
US8740689B2 (en) 2012-07-06 2014-06-03 Igt Gaming system and method configured to operate a game associated with a reflector symbol
US9245407B2 (en) 2012-07-06 2016-01-26 Igt Gaming system and method that determines awards based on quantities of symbols included in one or more strings of related symbols displayed along one or more paylines
US9280322B2 (en) * 2012-09-27 2016-03-08 Intel Corporation Generating source code
US9192857B2 (en) 2013-07-23 2015-11-24 Igt Beat synchronization in a game
US9405652B2 (en) * 2013-10-31 2016-08-02 Red Hat, Inc. Regular expression support in instrumentation languages using kernel-mode executable code
CN103631632B (zh) * 2013-11-29 2017-08-04 华为技术有限公司 移植方法及源到源编译器
AU2014360106B2 (en) 2013-12-06 2019-05-23 Ab Initio Technology Llc Source code translation
US10437819B2 (en) 2014-11-14 2019-10-08 Ab Initio Technology Llc Processing queries containing a union-type operation
US10324712B1 (en) * 2014-12-24 2019-06-18 Thomas A. Nolan Method and system of migrating legacy code for upgraded systems
US10417281B2 (en) 2015-02-18 2019-09-17 Ab Initio Technology Llc Querying a data source on a network
US9575731B1 (en) 2015-06-22 2017-02-21 Chaorong Peng Diagram language for computer programming
US10360236B2 (en) * 2015-09-25 2019-07-23 International Business Machines Corporation Replicating structured query language (SQL) in a heterogeneous replication environment
US9947170B2 (en) 2015-09-28 2018-04-17 Igt Time synchronization of gaming machines
US9658837B1 (en) * 2015-11-06 2017-05-23 Sentry Insurance a Mutual Company Integration of independent platforms
US9715375B1 (en) * 2016-01-27 2017-07-25 International Business Machines Corporation Parallel compilation of software application
US10642896B2 (en) 2016-02-05 2020-05-05 Sas Institute Inc. Handling of data sets during execution of task routines of multiple languages
US10650046B2 (en) 2016-02-05 2020-05-12 Sas Institute Inc. Many task computing with distributed file system
US10795935B2 (en) 2016-02-05 2020-10-06 Sas Institute Inc. Automated generation of job flow definitions
KR101906823B1 (ko) * 2016-03-07 2018-12-05 주식회사 럭스로보 멀티 모듈 컴파일 시스템 및 멀티 모듈 컴파일 방법, 그리고 컴파일러 프로그램을 갖는 컴퓨터 판독가능 저장매체
RU2016137176A (ru) * 2016-09-16 2018-03-19 Оракл Интернэйшнл Корпорейшн Связывание преобразованного исходного кода с первоначальным исходным кодом с помощью метаданных
RU2016137177A (ru) * 2016-09-16 2018-03-19 Оракл Интернэйшнл Корпорейшн Усовершенствованное преобразование исходного кода языка программирования
USD898059S1 (en) 2017-02-06 2020-10-06 Sas Institute Inc. Display screen or portion thereof with graphical user interface
USD898060S1 (en) 2017-06-05 2020-10-06 Sas Institute Inc. Display screen or portion thereof with graphical user interface
US10606573B2 (en) * 2017-06-07 2020-03-31 Syntel, Inc. System and method for computer language migration using a re-architecture tool for decomposing a legacy system and recomposing a modernized system
US10503498B2 (en) 2017-11-16 2019-12-10 Sas Institute Inc. Scalable cloud-based time series analysis
US10423396B1 (en) * 2018-05-04 2019-09-24 Salesforce.Com, Inc. Transforming non-apex code to apex code
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
US10846059B2 (en) 2019-02-05 2020-11-24 Simply Inspired Software, Inc. Automated generation of software bindings
US11449336B2 (en) * 2019-05-24 2022-09-20 Texas Instmments Incorporated Method of storing register data elements to interleave with data elements of a different register, a processor thereof, and a system thereof
US11093223B2 (en) 2019-07-18 2021-08-17 Ab Initio Technology Llc Automatically converting a program written in a procedural programming language into a dataflow graph and related systems and methods
US10733303B1 (en) * 2020-04-23 2020-08-04 Polyverse Corporation Polymorphic code translation systems and methods
US11669613B2 (en) 2020-05-29 2023-06-06 EnSoft Corp. Method for analyzing and verifying software for safety and security
US11875141B2 (en) * 2020-11-20 2024-01-16 Infosys Limited System and method for training a neural machine translation model
US11809839B2 (en) 2022-01-18 2023-11-07 Robert Lyden Computer language and code for application development and electronic and optical communication
CN115454414B (zh) * 2022-11-10 2023-03-24 凯云联创(北京)科技有限公司 一种代码处理方法、装置及计算机可读存储介质

Family Cites Families (17)

* 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
US5239663A (en) * 1987-06-15 1993-08-24 Centre National De La Recherche Scientifique Self-adapting and multifunctional process and structure for the automated evaluation of logical or arithmetic expressions, particularly for extended database consultation
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
GB9005697D0 (en) * 1990-03-14 1990-05-09 Digital Equipment Int Data format conversion
US5151697A (en) * 1990-10-15 1992-09-29 Board Of Regents Of The University Of Washington Data structure management tagging system
US5301284A (en) * 1991-01-16 1994-04-05 Walker-Estes Corporation Mixed-resolution, N-dimensional object space method and apparatus
US5477451A (en) * 1991-07-25 1995-12-19 International Business Machines Corp. Method and system for natural language translation
US5392390A (en) * 1992-04-10 1995-02-21 Intellilink Corp. Method for mapping, translating, and dynamically reconciling data between disparate computer platforms
US5367683A (en) * 1992-06-26 1994-11-22 Digital Equipment Corporation Smart recompilation of performing matchup/difference after code generation
JPH0778742B2 (ja) * 1992-08-12 1995-08-23 インターナショナル・ビジネス・マシーンズ・コーポレイション コンピユータ・プログラム言語変換装置及びその方法
US5384568A (en) * 1993-12-02 1995-01-24 Bell Communications Research, Inc. Data compression

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2006011756A (ja) * 2004-06-24 2006-01-12 Fujitsu Ltd プログラム変換プログラム、プログラム変換装置およびプログラム変換方法
JP4724387B2 (ja) * 2004-06-24 2011-07-13 富士通株式会社 プログラム変換プログラム、プログラム変換装置およびプログラム変換方法

Also Published As

Publication number Publication date
CA2201882A1 (en) 1996-04-18
DE69516891D1 (de) 2000-06-15
DE69516891T2 (de) 2000-10-05
US5768564A (en) 1998-06-16
EP0789875A4 (ja) 1997-09-03
WO1996011437A1 (en) 1996-04-18
EP0789875A1 (en) 1997-08-20
US6031993A (en) 2000-02-29
EP0789875B1 (en) 2000-05-10

Similar Documents

Publication Publication Date Title
JPH10508398A (ja) ソースコードを一つの高級コンピュータ言語から別の高級コンピュータ言語へ変換する方法及び装置
CN105793818B (zh) 源代码翻译
US5842204A (en) Method and apparatus for translating source code from one high-level computer language to another
US5371747A (en) Debugger program which includes correlation of computer program source code with optimized object code
KR101150003B1 (ko) 소프트웨어 개발 툴 생성 방법
EP2463771B1 (en) Method for translating a cobol source program into readable and maintainable program code in an object oriented second programming language
Carroll Practical unification-based parsing of natural language
JP2005018776A (ja) クエリ中間言語の方法およびシステム
WO1996013784A9 (en) Method and apparatus for tree data structure manipulation and translating source code from one high-level computer language to another
CN101650651A (zh) 一种源代码级别程序结构的可视化方法
Boshernitsan Harmonia: A flexible framework for constructing interactive language-based programming tools
KR102614967B1 (ko) 자바스크립트의 중간 언어 기반 의미론 추출 자동화 시스템 및 방법
Bagge et al. A pretty good formatting pipeline
Renggli Dynamic language embedding with homogeneous tool support
Bose Instruction set design for support of high-level languages
Harsu Re-engineering legacy software through language conversion
Koskimies A specification language for one-pass semantic analysis
Cohen Automatic construction of optimizing parallelizing compilers from specification
Wasserman et al. A balanced view of MUMPS
Varma Generalizing recognition of an individual dialect in program analysis and transformation
Coleman The Design, construction, and implementation of an engineering software command processor and macro compiler
Bevan On defining and checking the context conditions of programming languages
Tye A prototype abstract data store
Turver Software maintenance: generating front ends for cross referencer tools
Hou Mid-level hardware synthesis

Legal Events

Date Code Title Description
A602 Written permission of extension of time

Free format text: JAPANESE INTERMEDIATE CODE: A602

Effective date: 20040216

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20040407

A762 Written abandonment of application

Free format text: JAPANESE INTERMEDIATE CODE: A762

Effective date: 20040524

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

A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20060509

A045 Written measure of dismissal of application [lapsed due to lack of payment]

Free format text: JAPANESE INTERMEDIATE CODE: A045

Effective date: 20060926