JPH08286926A - 一般フロントエンド、及び動的にロード可能なバックエンドを有するコンパイラ - Google Patents
一般フロントエンド、及び動的にロード可能なバックエンドを有するコンパイラInfo
- Publication number
- JPH08286926A JPH08286926A JP8075601A JP7560196A JPH08286926A JP H08286926 A JPH08286926 A JP H08286926A JP 8075601 A JP8075601 A JP 8075601A JP 7560196 A JP7560196 A JP 7560196A JP H08286926 A JPH08286926 A JP H08286926A
- Authority
- JP
- Japan
- Prior art keywords
- backend
- tree
- node
- abstract syntax
- back end
- 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.)
- Granted
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
- G06F8/47—Retargetable compilers
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)
- Computer And Data Communications (AREA)
- Stored Programmes (AREA)
Abstract
(57)【要約】
【課題】 1回の実行でコンハ゜イラからの可変目標出力を提
供する。 【解決手段】 コンハ゜イラはフロントエント゛と一般、個別ハ゛ックエント゛
を含む。フロントエント゛は抽象シンタックス・ツリーを作成し、これが一
般、個別ハ゛ックエント゛で処理されハ゛ックエント゛・ツリーが作成され
る。各ハ゛ックエント゛・ツリーは特定ハ゛ックエント゛に適応し、様々な目
標出力の構造を表す。一般ハ゛ックエント゛は抽象シンタックス・ツリーを
横断し、そのツリーの各ノート゛に関し、そこに付属されたハ゛ッ
クエント゛・ツリーのノート゛を有する各ハ゛ックエント゛を呼び出す。ハ゛ックエ
ント゛は次に、それ自身のハ゛ックエント゛・ツリーを変更し、ハ゛ックエント
゛・ノート゛を抽象シンタックス・ツリーの他ノート゛に付属させる。次に一
般ハ゛ックエント゛はこうして追加された付属ノート゛を、抽象シンタッ
クス・ツリーの全ノート゛に関し、付属の全ハ゛ックエント゛・ノート゛が処理
されるまで、呼び出す。この結果、フロントエント゛の単一ハ゜ス
のみが用いられ、全ハ゛ックエント゛に関し完全なハ゛ックエント゛・ツリー
が提供される。個別ハ゛ックエント゛は各ハ゛ックエント゛・ツリーを処理し
目標出力を作成する。
供する。 【解決手段】 コンハ゜イラはフロントエント゛と一般、個別ハ゛ックエント゛
を含む。フロントエント゛は抽象シンタックス・ツリーを作成し、これが一
般、個別ハ゛ックエント゛で処理されハ゛ックエント゛・ツリーが作成され
る。各ハ゛ックエント゛・ツリーは特定ハ゛ックエント゛に適応し、様々な目
標出力の構造を表す。一般ハ゛ックエント゛は抽象シンタックス・ツリーを
横断し、そのツリーの各ノート゛に関し、そこに付属されたハ゛ッ
クエント゛・ツリーのノート゛を有する各ハ゛ックエント゛を呼び出す。ハ゛ックエ
ント゛は次に、それ自身のハ゛ックエント゛・ツリーを変更し、ハ゛ックエント
゛・ノート゛を抽象シンタックス・ツリーの他ノート゛に付属させる。次に一
般ハ゛ックエント゛はこうして追加された付属ノート゛を、抽象シンタッ
クス・ツリーの全ノート゛に関し、付属の全ハ゛ックエント゛・ノート゛が処理
されるまで、呼び出す。この結果、フロントエント゛の単一ハ゜ス
のみが用いられ、全ハ゛ックエント゛に関し完全なハ゛ックエント゛・ツリー
が提供される。個別ハ゛ックエント゛は各ハ゛ックエント゛・ツリーを処理し
目標出力を作成する。
Description
【発明の詳細な説明】
【0001】
【発明の属する技術分野】本発明は、一般的に多くの実
行可能な関連する出力ファイルに、ソース・コード・フ
ァイルをコンパイルするための方法、及びシステムに関
し、より詳しくは、様々なコンパイル出力のために、コ
ンパイラのバックエンドの動的ローディングを使用する
方法、及びシステムに関する。
行可能な関連する出力ファイルに、ソース・コード・フ
ァイルをコンパイルするための方法、及びシステムに関
し、より詳しくは、様々なコンパイル出力のために、コ
ンパイラのバックエンドの動的ローディングを使用する
方法、及びシステムに関する。
【0002】
【従来の技術】従来のコンピュータ・コードの開発環境
において、コンパイラは、ソース・コード・ファイルか
ら様々なタイプの目標コード・ファイルを作成するのに
用いられてきた。従来のコンパイラは1つのフロントエ
ンド・ユニット、及び1つ以上の専用バックエンド・ユ
ニットを含んでいる。そのフロントエンドは通常、入力
ソース・コードを読み取り、そのソース・コードで使用
されるプログラム言語に関連するトークンを出力するス
キャナを含んでいる。フロントエンドは通常、スキャナ
のトークンのシーケンスを取り、そのトークンの文法的
な構造を表す抽象シンタクス・ツリーを作成する構文解
析系も含んでいる。通常のコンパイラは、1つ以上のバ
ックエンドを持つこともあり、そのそれぞれは、抽象シ
ンタクス・ツリー内のトークンのデータ・タイプ、それ
らのソースの位置、及びその他の情報を識別し、この情
報からバックエンド・ツリーを作成する。バックエンド
は、そのバックエンド・ツリーから特別なタイプの目標
出力を作成する。このバックエンドの目標出力は、ヘダ
ー・ファイル、データ・タイプ・ファイル、スケルトン
・コード・ファイル、スタブ・コード・ファイル他とい
ったコード・ファイルを含むかまたは、オブジェクト定
義に関するインタフェース・リポジトリをロードした
り、持続的な記憶データベースを作成するといったよう
な特別なシーケンスの動作を含む。
において、コンパイラは、ソース・コード・ファイルか
ら様々なタイプの目標コード・ファイルを作成するのに
用いられてきた。従来のコンパイラは1つのフロントエ
ンド・ユニット、及び1つ以上の専用バックエンド・ユ
ニットを含んでいる。そのフロントエンドは通常、入力
ソース・コードを読み取り、そのソース・コードで使用
されるプログラム言語に関連するトークンを出力するス
キャナを含んでいる。フロントエンドは通常、スキャナ
のトークンのシーケンスを取り、そのトークンの文法的
な構造を表す抽象シンタクス・ツリーを作成する構文解
析系も含んでいる。通常のコンパイラは、1つ以上のバ
ックエンドを持つこともあり、そのそれぞれは、抽象シ
ンタクス・ツリー内のトークンのデータ・タイプ、それ
らのソースの位置、及びその他の情報を識別し、この情
報からバックエンド・ツリーを作成する。バックエンド
は、そのバックエンド・ツリーから特別なタイプの目標
出力を作成する。このバックエンドの目標出力は、ヘダ
ー・ファイル、データ・タイプ・ファイル、スケルトン
・コード・ファイル、スタブ・コード・ファイル他とい
ったコード・ファイルを含むかまたは、オブジェクト定
義に関するインタフェース・リポジトリをロードした
り、持続的な記憶データベースを作成するといったよう
な特別なシーケンスの動作を含む。
【0003】
【発明が解決しようとする課題】従来のコンパイラで
は、バックエンドはコンパイラ専用であり、一体化され
ていた。これは、コンパイラのユーザが、コンパイラ・
フロントエンドとともに使用してユーザの特定の要求に
答える目標コードを生成する新しいバックエンドを作成
することができないことを意味している。このことは、
コンパイラのメーカ以外のメーカが、様々なフロントエ
ンドとともに使用するための、マシン依存型目標出力を
作成する、独立型バックエンドを製造することを妨げて
いる。更に、バックエンドが複数ある場合においても、
各バックエンドが、フロントエンドから出力される特別
な中間ファイル・フォーマットに関して動作する。フロ
ントエンドは、各バックエンドに関するこれらの様々な
中間ファイルを生成できなければならない。従って、コ
ンパイラが様々なバックエンド出力を提供する間、フロ
ントエンドは、所望の中間ファイルを生成するために毎
回実行され、それによって様々な目標コード・ファイル
のコンパイルに必要な時間が増加する。
は、バックエンドはコンパイラ専用であり、一体化され
ていた。これは、コンパイラのユーザが、コンパイラ・
フロントエンドとともに使用してユーザの特定の要求に
答える目標コードを生成する新しいバックエンドを作成
することができないことを意味している。このことは、
コンパイラのメーカ以外のメーカが、様々なフロントエ
ンドとともに使用するための、マシン依存型目標出力を
作成する、独立型バックエンドを製造することを妨げて
いる。更に、バックエンドが複数ある場合においても、
各バックエンドが、フロントエンドから出力される特別
な中間ファイル・フォーマットに関して動作する。フロ
ントエンドは、各バックエンドに関するこれらの様々な
中間ファイルを生成できなければならない。従って、コ
ンパイラが様々なバックエンド出力を提供する間、フロ
ントエンドは、所望の中間ファイルを生成するために毎
回実行され、それによって様々な目標コード・ファイル
のコンパイルに必要な時間が増加する。
【0004】従って、バックエンドがフロントエンドに
依存せず、コンパイル時に、ユーザが望むとおりに動的
に呼び出されるコンパイラ設計を提供することが好まし
い。
依存せず、コンパイル時に、ユーザが望むとおりに動的
に呼び出されるコンパイラ設計を提供することが好まし
い。
【0005】
【課題を解決するための手段】本発明は、こうした様々
な制限を、実行時にロードされる多くの独立型バックエ
ンドとともに動作可能な一般バックエンド(generic bac
k end)を有するコンパイラを提供することによって克服
するものである。各バックエンドは、そのバックエンド
の出力に適応した自身のバックエンド・ツリーを作成す
る。コンパイラは、入力ソース・コード・ファイルから
抽象シンタックス・ツリーを作成するフロントエンドを
含んでいる。抽象シンタックス・ツリーは、ソース・コ
ード・ファイル内のトークンを表すノードからなる。こ
の一般バックエンドは、所与のバックエンド・ツリーか
らのバックエンド・ノードを、抽象シンタックス・ツリ
ーの選択されたノードに付属させる、付属動作を含んで
いる。この一般バックエンドは、抽象シンタックス・ツ
リーのノードにわたって、そこに付属されたバックエン
ド・ツリーの全てのノードを、元の抽象シンタックス・
ツリーの各ノードに関して呼び出すことを繰り返し行
う。このような各バックエンドは、抽象シンタックス・
ツリーのノードを処理して、バックエンド・ツリーが、
抽象シンタックス・ツリーのノードに関する1つ以上の
バックエンド・ノードを含むように変更されるかどうか
判定する、追加動作を含んでいる。新しいバックエンド
・ノードがこうして追加された場合、そのノードは抽象
シンタックス・ツリーのいくつかの他のノードにも付属
されうる。こうして、各独立型バックエンドは、それ自
身のバックエンド・ツリーを、フロントエンド・コンパ
イラによる単一パスのみに基づいて作成することがで
き、抽象シンタックス・ツリーが作成される。一般バッ
クエンドは、各バックエンドが他のバックエンドに関し
て正しい順序で抽象シンタックス・ツリーを分析できる
ように、個別バックエンドの動作を管理する。一般バッ
クエンドはまた、他のバックエンド・ツリー内の他のノ
ードからの要求に応答して、指定されたファミリ識別値
に基づいて、バックエンド・ツリー内のゼロ以上のノー
ドを返す、ルックアップ動作も含む。このことによっ
て、バックエンド・ツリー内のノードが、別のバックエ
ンド内のノードを参照できる。
な制限を、実行時にロードされる多くの独立型バックエ
ンドとともに動作可能な一般バックエンド(generic bac
k end)を有するコンパイラを提供することによって克服
するものである。各バックエンドは、そのバックエンド
の出力に適応した自身のバックエンド・ツリーを作成す
る。コンパイラは、入力ソース・コード・ファイルから
抽象シンタックス・ツリーを作成するフロントエンドを
含んでいる。抽象シンタックス・ツリーは、ソース・コ
ード・ファイル内のトークンを表すノードからなる。こ
の一般バックエンドは、所与のバックエンド・ツリーか
らのバックエンド・ノードを、抽象シンタックス・ツリ
ーの選択されたノードに付属させる、付属動作を含んで
いる。この一般バックエンドは、抽象シンタックス・ツ
リーのノードにわたって、そこに付属されたバックエン
ド・ツリーの全てのノードを、元の抽象シンタックス・
ツリーの各ノードに関して呼び出すことを繰り返し行
う。このような各バックエンドは、抽象シンタックス・
ツリーのノードを処理して、バックエンド・ツリーが、
抽象シンタックス・ツリーのノードに関する1つ以上の
バックエンド・ノードを含むように変更されるかどうか
判定する、追加動作を含んでいる。新しいバックエンド
・ノードがこうして追加された場合、そのノードは抽象
シンタックス・ツリーのいくつかの他のノードにも付属
されうる。こうして、各独立型バックエンドは、それ自
身のバックエンド・ツリーを、フロントエンド・コンパ
イラによる単一パスのみに基づいて作成することがで
き、抽象シンタックス・ツリーが作成される。一般バッ
クエンドは、各バックエンドが他のバックエンドに関し
て正しい順序で抽象シンタックス・ツリーを分析できる
ように、個別バックエンドの動作を管理する。一般バッ
クエンドはまた、他のバックエンド・ツリー内の他のノ
ードからの要求に応答して、指定されたファミリ識別値
に基づいて、バックエンド・ツリー内のゼロ以上のノー
ドを返す、ルックアップ動作も含む。このことによっ
て、バックエンド・ツリー内のノードが、別のバックエ
ンド内のノードを参照できる。
【0006】
【発明の実施の形態】図1を参照すると、動的にロード
可能なバックエンドを有する、改良されたコンパイラを
提供するシステムの一実施例が示されている。システム
100はアドレス指定可能メモリ103、テキスト・エディタ
107、コンパイラ109、及び複数の独立型バックエンド12
3を有するコンピュータ101を含んでいる。コンピュータ
101は、プロセッサ115、入力装置117と出力装置119、ネ
ットワーク・インタフェース113、及び大容量記憶装置1
11を含む従来の設計のものである。このコンピュータ
は、アメリカ合衆国カリフォルニア州、マウンテン・ビ
ューのSun Microsystemsによって製造されるSPARCステ
ーションTMコンピュータのような最も汎用的なコンピュ
ータであってよい。他の任意の汎用コンピュータも本発
明による使用に適応しうる。コンピュータ101は、Sun M
icrosystemsのSolarisTMオペレーティング・システムの
ような汎用オペレーティング・システム105を実行す
る。プロセッサ115は、動作の全てが含まれる、テキス
ト・エディタ107、コンパイラ109、及びバックエンド12
3を実行する。このプロセッサ115はまた、テキスト・エ
ディタ107とコンパイラ109の実行中に、大容量記憶装置
111からソース・コード・ファイルを読み取り、大容量
記憶装置111に目標出力ファイルを書き込む。
可能なバックエンドを有する、改良されたコンパイラを
提供するシステムの一実施例が示されている。システム
100はアドレス指定可能メモリ103、テキスト・エディタ
107、コンパイラ109、及び複数の独立型バックエンド12
3を有するコンピュータ101を含んでいる。コンピュータ
101は、プロセッサ115、入力装置117と出力装置119、ネ
ットワーク・インタフェース113、及び大容量記憶装置1
11を含む従来の設計のものである。このコンピュータ
は、アメリカ合衆国カリフォルニア州、マウンテン・ビ
ューのSun Microsystemsによって製造されるSPARCステ
ーションTMコンピュータのような最も汎用的なコンピュ
ータであってよい。他の任意の汎用コンピュータも本発
明による使用に適応しうる。コンピュータ101は、Sun M
icrosystemsのSolarisTMオペレーティング・システムの
ような汎用オペレーティング・システム105を実行す
る。プロセッサ115は、動作の全てが含まれる、テキス
ト・エディタ107、コンパイラ109、及びバックエンド12
3を実行する。このプロセッサ115はまた、テキスト・エ
ディタ107とコンパイラ109の実行中に、大容量記憶装置
111からソース・コード・ファイルを読み取り、大容量
記憶装置111に目標出力ファイルを書き込む。
【0007】テキスト・エディタ107は、ソース・コー
ド・テキスト・ファイルを作成し、編集するための従来
のエディタである。このエディタ107は、従来のソース
・コード出力をASCIIテキスト、またはそれと同様のテ
キスト・ファイルとして提供する。このソース・コード
は、C、C++、SmallTalk他のような、任意の高水準言語
で記述されうる。
ド・テキスト・ファイルを作成し、編集するための従来
のエディタである。このエディタ107は、従来のソース
・コード出力をASCIIテキスト、またはそれと同様のテ
キスト・ファイルとして提供する。このソース・コード
は、C、C++、SmallTalk他のような、任意の高水準言語
で記述されうる。
【0008】図2を参照すると、バックエンド123と協
働するコンパイラ109のデータフロー図が示されてい
る。コンパイラ109は、ソース・コード・テキスト・フ
ァイルを受け取り、そこから従来の方法で抽象シンタッ
クス・ツリーを作成するフロントエンド201を含んでい
る。この抽象シンタックス・ツリーは、ソース・コード
・テキスト・ファイルのシンタックスと構造のグラフ表
現である。好適実施例では、コンパイラ109は分散オブ
ジェクトに関するオブジェクト・インタフェースを定義
する、インタフェース定義言語(IDL)に基づいて動作す
る。この好適実施例では、フロントエンド201が1つ、
または複数の入力IDLファイルの抽象シンタックス・ツ
リーを作成する。
働するコンパイラ109のデータフロー図が示されてい
る。コンパイラ109は、ソース・コード・テキスト・フ
ァイルを受け取り、そこから従来の方法で抽象シンタッ
クス・ツリーを作成するフロントエンド201を含んでい
る。この抽象シンタックス・ツリーは、ソース・コード
・テキスト・ファイルのシンタックスと構造のグラフ表
現である。好適実施例では、コンパイラ109は分散オブ
ジェクトに関するオブジェクト・インタフェースを定義
する、インタフェース定義言語(IDL)に基づいて動作す
る。この好適実施例では、フロントエンド201が1つ、
または複数の入力IDLファイルの抽象シンタックス・ツ
リーを作成する。
【0009】バックエンド123と関連して、コンパイラ1
09は様々な異なる目標出力を生成することができる。こ
れらの目標出力は、様々なヘダーやコード・ファイル、
または他のファイルに基づく動作や資源を含んでいる。
例えば、所与のファイルx.idlに関して、コンパイラ109
とバックエンド123の好適実施例は、x.hh、xsurrogate
s.hh、xsurrogates.cc、xmarshal.hh、xmarshal.cc、xt
ypes.hh、及びxtypes.ccのような目標出力ファイルを作
成することができる。これらの目標出力ファイルのそれ
ぞれは、データ・タイプ、スタブ、及びスケルトンの記
述とルーチン整理の支援を含み、バックエンド123の1
つによって作成される。バックエンド123は、目標出力
として、ファイルを作成する代わりにいくつかの動作を
作成できる。例えば、バックエンド123は、所与のIDLフ
ァイルから導出されたインタフェース定義を有するイン
タフェース・リポジトリをロードすることができる。そ
の特定の出力を作成するために、各バックエンド123は
通常、抽象シンタックス・ツリーで利用可能なものより
多くの情報を必要とする。同様に、各バックエンド123
は、抽象シンタックス・ツリーからのある情報だけを使
用することができる。この理由の両方によって、各バッ
クエンド123は、その目標出力に特に適応したそれ自身
のバックエンド・ツリーを作成する。
09は様々な異なる目標出力を生成することができる。こ
れらの目標出力は、様々なヘダーやコード・ファイル、
または他のファイルに基づく動作や資源を含んでいる。
例えば、所与のファイルx.idlに関して、コンパイラ109
とバックエンド123の好適実施例は、x.hh、xsurrogate
s.hh、xsurrogates.cc、xmarshal.hh、xmarshal.cc、xt
ypes.hh、及びxtypes.ccのような目標出力ファイルを作
成することができる。これらの目標出力ファイルのそれ
ぞれは、データ・タイプ、スタブ、及びスケルトンの記
述とルーチン整理の支援を含み、バックエンド123の1
つによって作成される。バックエンド123は、目標出力
として、ファイルを作成する代わりにいくつかの動作を
作成できる。例えば、バックエンド123は、所与のIDLフ
ァイルから導出されたインタフェース定義を有するイン
タフェース・リポジトリをロードすることができる。そ
の特定の出力を作成するために、各バックエンド123は
通常、抽象シンタックス・ツリーで利用可能なものより
多くの情報を必要とする。同様に、各バックエンド123
は、抽象シンタックス・ツリーからのある情報だけを使
用することができる。この理由の両方によって、各バッ
クエンド123は、その目標出力に特に適応したそれ自身
のバックエンド・ツリーを作成する。
【0010】フロントエンド201は抽象シンタックス・
ツリーを一般バックエンド203に提供する。一般バック
エンド203は、個別バックエンド123によってバックエン
ド・ツリーの構造を調整する。各バックエンド・ツリー
は抽象シンタックス・ツリーから導出され、バックエン
ド123に対して、そのバックエンド123から目標出力を作
成するように、特に適応される。本明細書における議論
では、抽象シンタックス・ツリーと個別のバックエンド
・ツリーを参照するが、こうした「ツリー」は、ツリー
構造の形式上の制限がないグラフとして、より一般的に
定義されることが理解される。
ツリーを一般バックエンド203に提供する。一般バック
エンド203は、個別バックエンド123によってバックエン
ド・ツリーの構造を調整する。各バックエンド・ツリー
は抽象シンタックス・ツリーから導出され、バックエン
ド123に対して、そのバックエンド123から目標出力を作
成するように、特に適応される。本明細書における議論
では、抽象シンタックス・ツリーと個別のバックエンド
・ツリーを参照するが、こうした「ツリー」は、ツリー
構造の形式上の制限がないグラフとして、より一般的に
定義されることが理解される。
【0011】図3(4)は、ここでは「AST」と省略する抽
象シンタックス・ツリーの標準的な例示である。この抽
象シンタックス・ツリー300は、根ASTノード301、及び
複数の子ASTノード303を含んでいるノードからなる。抽
象シンタックス・ツリー300の各ノードはオブジェクト
であり、それは、そのオブジェクトが表すソース・コー
ド・トークンを記述する属性、及びノード情報を返すか
または修正する動作を有している。根ASTノード301と子
ASTノード303の両方は、必要に応じて一緒にASTノード3
09(図示せず)として参照される。個々の識別が容易と
なるように、様々なノード309が、抽象シンタックス・
ツリー300内におけるそれらの相対的な位置を示すため
の、T1ないしT6にラベル付けされる。所与のASTノード
は、その子ノードだけでなく、例えば、データ・タイプ
の定義、またはその他の有用な情報を提供するために、
抽象シンタックス・ツリー300内の任意の他のASTノード
を参照することもある。例えば、ノードT6はノードT4へ
の参照を含む。
象シンタックス・ツリーの標準的な例示である。この抽
象シンタックス・ツリー300は、根ASTノード301、及び
複数の子ASTノード303を含んでいるノードからなる。抽
象シンタックス・ツリー300の各ノードはオブジェクト
であり、それは、そのオブジェクトが表すソース・コー
ド・トークンを記述する属性、及びノード情報を返すか
または修正する動作を有している。根ASTノード301と子
ASTノード303の両方は、必要に応じて一緒にASTノード3
09(図示せず)として参照される。個々の識別が容易と
なるように、様々なノード309が、抽象シンタックス・
ツリー300内におけるそれらの相対的な位置を示すため
の、T1ないしT6にラベル付けされる。所与のASTノード
は、その子ノードだけでなく、例えば、データ・タイプ
の定義、またはその他の有用な情報を提供するために、
抽象シンタックス・ツリー300内の任意の他のASTノード
を参照することもある。例えば、ノードT6はノードT4へ
の参照を含む。
【0012】各バックエンド123は、一般バックエンド2
01と調整して、それ自身のバックエンド・ツリー500を
作成する。図3(5)は、抽象シンタックス・ツリー300か
ら導出されるバックエンド・ツリーを例示する図であ
る。各バックエンド・ツリー500は、根バックエンド・
ノード501と、複数の子バックエンド・ノード503を含ん
でいる。根バックエンド・ノード501と、子バックエン
ド・ノード503の両方は、必要に応じて一緒にバックエ
ンド・ノード509(図示せず)として参照される。バッ
クエンド・ノード509のそれぞれは、1つ以上のASTノー
ド309に対応でき、従ってバックエンド・ツリー500の構
造は抽象シンタックス・ツリー300の部分集合である必
要がない。このことが図4の、ノードD5ではなく根バッ
クエンド・ノードD1に従属するノードD6に示されてい
る。更に、各バックエンド・ノード509は、1つ以上のA
STノード309に付属させることができ、その付属の形態
は図4の、ASTノードT5とT6に付属されたノードD5に示
されている。バックエンド・ノード509は直接ASTノード
309に付属されうるかまたは、間接的に中間データ構造
を介して付属される。本開示の残りにおけるバックエン
ド・ツリー500とバックエンド・ノード509に対する参照
は、一般的に任意のバックエンド・ツリー500とバック
エンド・ノード509を参照するよう意図されたものであ
り、図3(1)ないし(5)、及び図4に示されている特定の
ツリーを指すものではない。
01と調整して、それ自身のバックエンド・ツリー500を
作成する。図3(5)は、抽象シンタックス・ツリー300か
ら導出されるバックエンド・ツリーを例示する図であ
る。各バックエンド・ツリー500は、根バックエンド・
ノード501と、複数の子バックエンド・ノード503を含ん
でいる。根バックエンド・ノード501と、子バックエン
ド・ノード503の両方は、必要に応じて一緒にバックエ
ンド・ノード509(図示せず)として参照される。バッ
クエンド・ノード509のそれぞれは、1つ以上のASTノー
ド309に対応でき、従ってバックエンド・ツリー500の構
造は抽象シンタックス・ツリー300の部分集合である必
要がない。このことが図4の、ノードD5ではなく根バッ
クエンド・ノードD1に従属するノードD6に示されてい
る。更に、各バックエンド・ノード509は、1つ以上のA
STノード309に付属させることができ、その付属の形態
は図4の、ASTノードT5とT6に付属されたノードD5に示
されている。バックエンド・ノード509は直接ASTノード
309に付属されうるかまたは、間接的に中間データ構造
を介して付属される。本開示の残りにおけるバックエン
ド・ツリー500とバックエンド・ノード509に対する参照
は、一般的に任意のバックエンド・ツリー500とバック
エンド・ノード509を参照するよう意図されたものであ
り、図3(1)ないし(5)、及び図4に示されている特定の
ツリーを指すものではない。
【0013】再び図2を参照すると、好適実施例におい
て注釈バックエンド123a、イベント生成バックエンド12
3b、及びコード生成バックエンド123cの3つのバックエ
ンド123の一般的なタイプが示されている。注釈バック
エンド123aは、テキスト・エディタ107から出力された
ソース・コード・テキスト・ファイル内に定義される個
々のデータ・タイプを記述する情報を提供する。この情
報は、例えば、タイプ・コード、データ・タイプ・サイ
ズ、名前分解支援、及びCやC++などの所与の目標言語に
関するその他のものを含む。注釈バックエンド123aはコ
ードを生成しないが、コード生成バックエンド123cとイ
ベント生成バックエンド123bによって、所望の目標出力
ファイルや目標動作を出力するために使用される情報を
提供する、その注釈バックエンド自身のバックエンド・
ツリーを作成する。イベント生成バックエンド123bは、
システムに、IDLファイル内のインタフェース定義を有
するインタフェース・リポジトリをロードするような、
追加機能を提供する目標動作を生成する。コード生成バ
ックエンド123cは、上述のように、C、C++、その他のよ
うな指定言語で実際のコード・ファイルを生成する。代
替実施例では、バックエンド123aないし123cの様々なタ
イプのゼロ以上の例が使用されうる。
て注釈バックエンド123a、イベント生成バックエンド12
3b、及びコード生成バックエンド123cの3つのバックエ
ンド123の一般的なタイプが示されている。注釈バック
エンド123aは、テキスト・エディタ107から出力された
ソース・コード・テキスト・ファイル内に定義される個
々のデータ・タイプを記述する情報を提供する。この情
報は、例えば、タイプ・コード、データ・タイプ・サイ
ズ、名前分解支援、及びCやC++などの所与の目標言語に
関するその他のものを含む。注釈バックエンド123aはコ
ードを生成しないが、コード生成バックエンド123cとイ
ベント生成バックエンド123bによって、所望の目標出力
ファイルや目標動作を出力するために使用される情報を
提供する、その注釈バックエンド自身のバックエンド・
ツリーを作成する。イベント生成バックエンド123bは、
システムに、IDLファイル内のインタフェース定義を有
するインタフェース・リポジトリをロードするような、
追加機能を提供する目標動作を生成する。コード生成バ
ックエンド123cは、上述のように、C、C++、その他のよ
うな指定言語で実際のコード・ファイルを生成する。代
替実施例では、バックエンド123aないし123cの様々なタ
イプのゼロ以上の例が使用されうる。
【0014】バックエンド123は、一般バックエンド203
と直接統合されないが、コンパイラ109の実行中にプロ
セッサ115によって、選択的にロードされうる。更に、
アプリケーション開発者のようなシステム100のユーザ
は、他のバックエンドを設計し、それをコンパイラ自身
を再構築することなく、コンパイラ109とともに直接使
用することができる。
と直接統合されないが、コンパイラ109の実行中にプロ
セッサ115によって、選択的にロードされうる。更に、
アプリケーション開発者のようなシステム100のユーザ
は、他のバックエンドを設計し、それをコンパイラ自身
を再構築することなく、コンパイラ109とともに直接使
用することができる。
【0015】一般バックエンド203は、抽象シンタック
ス・ツリー300を操作するための動作を含んでいる。こ
れらの動作は、抽象シンタックス・ツリー300の指定さ
れたノード309に付属された他のバックエンド・ツリー5
00のゼロ以上のバックエンド・ノード509を、バックエ
ンド123に提供する、ルックアップ動作207を含む。一般
バックエンド203は更に、付属動作205を含むことが好ま
しい。付属動作205は、指定されたバックエンド・ノー
ド509を、あるASTノード309(単数あるいは複数)に付
属させる。バックエンド123はこれらの一般バックエン
ド203の動作を、それらの抽象シンタックス・ツリー300
の処理中に呼び出す。バックエンド123はまた、一般バ
ックエンド203によって呼び出されうる特定の動作も含
む。バックエンド123の追加動作209は、ゼロ以上のノー
ド509を、抽象シンタックス・ツリー300内の指定された
ノード309に基づいて、バックエンド・ツリー500に追加
する。バックエンド123の作成動作211は、バックエンド
123に関連づけられたバックエンド・ツリー500を分析
し、ファイルまたは動作の目標出力を作成する。より詳
しくは、バックエンド123を生成するイベントの作成動
作211は、選択された目標イベント、または動作を作成
する。バックエンド123を生成するコードの作成動作
は、目標コード・ファイルを作成する。一般バックエン
ド203と個別バックエンド123のこれらの動作は、以下で
より詳細に説明する。
ス・ツリー300を操作するための動作を含んでいる。こ
れらの動作は、抽象シンタックス・ツリー300の指定さ
れたノード309に付属された他のバックエンド・ツリー5
00のゼロ以上のバックエンド・ノード509を、バックエ
ンド123に提供する、ルックアップ動作207を含む。一般
バックエンド203は更に、付属動作205を含むことが好ま
しい。付属動作205は、指定されたバックエンド・ノー
ド509を、あるASTノード309(単数あるいは複数)に付
属させる。バックエンド123はこれらの一般バックエン
ド203の動作を、それらの抽象シンタックス・ツリー300
の処理中に呼び出す。バックエンド123はまた、一般バ
ックエンド203によって呼び出されうる特定の動作も含
む。バックエンド123の追加動作209は、ゼロ以上のノー
ド509を、抽象シンタックス・ツリー300内の指定された
ノード309に基づいて、バックエンド・ツリー500に追加
する。バックエンド123の作成動作211は、バックエンド
123に関連づけられたバックエンド・ツリー500を分析
し、ファイルまたは動作の目標出力を作成する。より詳
しくは、バックエンド123を生成するイベントの作成動
作211は、選択された目標イベント、または動作を作成
する。バックエンド123を生成するコードの作成動作
は、目標コード・ファイルを作成する。一般バックエン
ド203と個別バックエンド123のこれらの動作は、以下で
より詳細に説明する。
【0016】コンパイラの動作 図5を参照すると、個々のバックエンド123を動的にロ
ードし、動作させることによって、目標出力ファイルと
目標出力動作を作成する、コンパイラ109の動作のフロ
ーチャートが示されている。コンパイラ109は、処理さ
れるソース・コード・ファイル、処理に使用されるバッ
クエンド123、及びその他の任意の関連オプションを指
定する複数の引数とともに、呼び出される(401)。次
に、フロントエンド201が、ソース・コード・ファイル
(単数または複数)に関する抽象シンタックス・ツリー
の根ノードを作成する。図3(1)は、根ASTノード301の
みを有する、抽象シンタックス・ツリー300を例示す
る。
ードし、動作させることによって、目標出力ファイルと
目標出力動作を作成する、コンパイラ109の動作のフロ
ーチャートが示されている。コンパイラ109は、処理さ
れるソース・コード・ファイル、処理に使用されるバッ
クエンド123、及びその他の任意の関連オプションを指
定する複数の引数とともに、呼び出される(401)。次
に、フロントエンド201が、ソース・コード・ファイル
(単数または複数)に関する抽象シンタックス・ツリー
の根ノードを作成する。図3(1)は、根ASTノード301の
みを有する、抽象シンタックス・ツリー300を例示す
る。
【0017】一般バックエンド203は、コマンド行引数
で指定されるバックエンド123をロードする(405)。各バ
ックエンド123がロードされると(405)、各バックエンド
123は、バックエンド123に関連づけられたバックエンド
・ツリー500の根バックエンド・ノード501を作成する(4
06)。バックエンド123は次に、その根バックエンド・ノ
ード501を根ASTノード301に付属させる(408)。この根バ
ックエンド・ノード501は、以下で詳述するように、各
バックエンド123に関する優先順位値に従って、付属さ
れる(408)。これは、他の以前に付属された根バックエ
ンド・ノード501の前に、根バックエンド・ノード501を
挿入することを含み得る。図3(2)は、以下で示す4つ
の根バックエンド・ノード501が付属する抽象シンタッ
クス・ツリー300を示している。この根バックエンド・
ノード501は、A1ないしD1にラベル付けされている。
で指定されるバックエンド123をロードする(405)。各バ
ックエンド123がロードされると(405)、各バックエンド
123は、バックエンド123に関連づけられたバックエンド
・ツリー500の根バックエンド・ノード501を作成する(4
06)。バックエンド123は次に、その根バックエンド・ノ
ード501を根ASTノード301に付属させる(408)。この根バ
ックエンド・ノード501は、以下で詳述するように、各
バックエンド123に関する優先順位値に従って、付属さ
れる(408)。これは、他の以前に付属された根バックエ
ンド・ノード501の前に、根バックエンド・ノード501を
挿入することを含み得る。図3(2)は、以下で示す4つ
の根バックエンド・ノード501が付属する抽象シンタッ
クス・ツリー300を示している。この根バックエンド・
ノード501は、A1ないしD1にラベル付けされている。
【0018】フロントエンド201は次に、ソース・コー
ド・ファイルを読み取り(407)、ソース・コード・ファ
イルと任意のインクルードされているファイルのシンタ
ックス構造を表す、抽象シンタックス・ツリー300を従
来の方法で配置する(409)。ソース・コード・ファイル
内でエラーが検出された場合、またはツリー配置の間に
エラーが発生した場合、コンパイラ109は終了する(41
1)。図3(3)には、以下の配置(409)が行われた抽象シン
タックス・ツリー300が示されている。
ド・ファイルを読み取り(407)、ソース・コード・ファ
イルと任意のインクルードされているファイルのシンタ
ックス構造を表す、抽象シンタックス・ツリー300を従
来の方法で配置する(409)。ソース・コード・ファイル
内でエラーが検出された場合、またはツリー配置の間に
エラーが発生した場合、コンパイラ109は終了する(41
1)。図3(3)には、以下の配置(409)が行われた抽象シン
タックス・ツリー300が示されている。
【0019】図3(3)では、一般バックエンド203と関連
して動作する、4つのバックエンド123に関する4つの
根バックエンド・ノード501が示されている。これらの
根バックエンド・ノードは、他のバックエンド123で使
用されるデータ・タイプ情報を生成するための注釈バッ
クエンド123a、x.hhまたはxtypes.hhコード・ファイル
のような目標コード・ファイルを生成するための、コー
ド生成バックエンド123c、または、ソース・コード・フ
ァイルからのインタフェース定義を有するインタフェー
ス・リポジトリをロードするためのような、イベント生
成バックエンド123bのうちの1つ以上に関するものであ
りうる。
して動作する、4つのバックエンド123に関する4つの
根バックエンド・ノード501が示されている。これらの
根バックエンド・ノードは、他のバックエンド123で使
用されるデータ・タイプ情報を生成するための注釈バッ
クエンド123a、x.hhまたはxtypes.hhコード・ファイル
のような目標コード・ファイルを生成するための、コー
ド生成バックエンド123c、または、ソース・コード・フ
ァイルからのインタフェース定義を有するインタフェー
ス・リポジトリをロードするためのような、イベント生
成バックエンド123bのうちの1つ以上に関するものであ
りうる。
【0020】上述のように、一般バックエンド203は、
バックエンド・ノード509を、付属動作への入力パラメ
ータとして指定された特定のASTノード309に付属させ
る、付属動作205を含んでいる。この付属動作205は2つ
の論理パラメータを有するが、実際には必須ではない。
第1のパラメータは、第2のパラメータで指定されたバ
ックエンド・ノード509が付属される抽象シンタックス
・ツリー300内のASTノード309を指定する。オブジェク
ト指向の実施例においては、この付属動作は、所与のAS
Tノード309に関して、そのノードがポインタで指定され
ている場合に、付属動作が(C++で)ast_node->attach
(back_end_node)として呼び出されるように、各ASTノー
ド309内に含まれる。他の同等の表記とデータ・タイプ
が、他のオブジェクト指向言語、または手続言語で使用
されうる。手続型の実施例において、付属動作は一般バ
ックエンド203の手続コード内に含まれ、動作用のパラ
メータを直接指定する。任意の実施例において、付属動
作205は、コンパイラ109と一般バックエンド203の実行
中に、プロセッサ115によって実行される。
バックエンド・ノード509を、付属動作への入力パラメ
ータとして指定された特定のASTノード309に付属させ
る、付属動作205を含んでいる。この付属動作205は2つ
の論理パラメータを有するが、実際には必須ではない。
第1のパラメータは、第2のパラメータで指定されたバ
ックエンド・ノード509が付属される抽象シンタックス
・ツリー300内のASTノード309を指定する。オブジェク
ト指向の実施例においては、この付属動作は、所与のAS
Tノード309に関して、そのノードがポインタで指定され
ている場合に、付属動作が(C++で)ast_node->attach
(back_end_node)として呼び出されるように、各ASTノー
ド309内に含まれる。他の同等の表記とデータ・タイプ
が、他のオブジェクト指向言語、または手続言語で使用
されうる。手続型の実施例において、付属動作は一般バ
ックエンド203の手続コード内に含まれ、動作用のパラ
メータを直接指定する。任意の実施例において、付属動
作205は、コンパイラ109と一般バックエンド203の実行
中に、プロセッサ115によって実行される。
【0021】根バックエンド・ノード501が付属される
(408)順序を含む、一般バックエンド203がバックエンド
・ノード509を付属させる特定の順序は、抽象シンタッ
クス・ツリー300のバックエンド処理を改善するように
制御されうる。多くの場合、異なるバックエンド123
が、それらの個々のバックエンド・ツリーの作成に有用
な基本的なデータ・タイプ情報または他の情報を共有す
る。例えば、C、及びC++に関するコード生成バックエン
ド123cは、C、またはC++におけるデータ・タイプ・サイ
ズを判定するための共通コード、またはそれらのタイプ
・コードを共有する。従って、こうしたバックエンド・
ノードまたはそれらの共通情報に依存するかまたは、そ
れらを参照する他のバックエンド・ノード509を構築す
る、あるいは追加する前に、バックエンド・ツリー500
内で利用可能なこうした共通情報を表すバックエンド・
ノード509を有することが好ましい。
(408)順序を含む、一般バックエンド203がバックエンド
・ノード509を付属させる特定の順序は、抽象シンタッ
クス・ツリー300のバックエンド処理を改善するように
制御されうる。多くの場合、異なるバックエンド123
が、それらの個々のバックエンド・ツリーの作成に有用
な基本的なデータ・タイプ情報または他の情報を共有す
る。例えば、C、及びC++に関するコード生成バックエン
ド123cは、C、またはC++におけるデータ・タイプ・サイ
ズを判定するための共通コード、またはそれらのタイプ
・コードを共有する。従って、こうしたバックエンド・
ノードまたはそれらの共通情報に依存するかまたは、そ
れらを参照する他のバックエンド・ノード509を構築す
る、あるいは追加する前に、バックエンド・ツリー500
内で利用可能なこうした共通情報を表すバックエンド・
ノード509を有することが好ましい。
【0022】好適実施例では、一般バックエンド203
が、各バックエンド・ノード509に関連づけられたバッ
クエンド123の優先レベルに従って、各ASTノード309に
付属されたバックエンド・ノード509を順序づけること
によって、この要件を満足させる。この好適実施例で
は、付属動作205が、バックエンド・ノード509に関連づ
けられたバックエンド123の優先順位値に従って、指定
されたバックエンド・ノード509を付属させる。バック
エンド123の優先レベルは、システム内で使用される異
なるバックエンド123の間の生産者−消費者関係によっ
て判定されるのが好ましい。注釈バックエンド123aのよ
うな生産者バックエンドは、コード生成バックエンド12
3cまたはイベント生成バックエンド123bのような消費者
バックエンドより、高い優先順位を有する。実際の任意
のバックエンド123の特定の優先順位は、システム100で
使用される他のバックエンド123に依存する。コンパイ
ラの開発者は、各バックエンド123毎に優先レベルを指
定できる。更に、優先順位を所与のタイプのバックエン
ド123の間で確立させることもできる。代替実施例で
は、生産者−消費者関係以外の優先順位技法が、各バッ
クエンド123の優先レベルを判定するために使用されう
る。
が、各バックエンド・ノード509に関連づけられたバッ
クエンド123の優先レベルに従って、各ASTノード309に
付属されたバックエンド・ノード509を順序づけること
によって、この要件を満足させる。この好適実施例で
は、付属動作205が、バックエンド・ノード509に関連づ
けられたバックエンド123の優先順位値に従って、指定
されたバックエンド・ノード509を付属させる。バック
エンド123の優先レベルは、システム内で使用される異
なるバックエンド123の間の生産者−消費者関係によっ
て判定されるのが好ましい。注釈バックエンド123aのよ
うな生産者バックエンドは、コード生成バックエンド12
3cまたはイベント生成バックエンド123bのような消費者
バックエンドより、高い優先順位を有する。実際の任意
のバックエンド123の特定の優先順位は、システム100で
使用される他のバックエンド123に依存する。コンパイ
ラの開発者は、各バックエンド123毎に優先レベルを指
定できる。更に、優先順位を所与のタイプのバックエン
ド123の間で確立させることもできる。代替実施例で
は、生産者−消費者関係以外の優先順位技法が、各バッ
クエンド123の優先レベルを判定するために使用されう
る。
【0023】従って、根バックエンド・ノード501が、
一般バックエンド203によって、それらの各バックエン
ド123の優先レベルに従って根ASTノード301に付属され
る(408)。
一般バックエンド203によって、それらの各バックエン
ド123の優先レベルに従って根ASTノード301に付属され
る(408)。
【0024】抽象シンタックス・ツリー300が配置され
ると(409)、一般バックエンド203が根ASTノード301に関
してDo_Add動作を呼び出す。このDo_Add動作は、個々の
バックエンド123を調整して、それらのバックエンド・
ツリー500を構築し、各バックエンド123は選択されたAS
Tノード309を処理する。Do_Add動作は、各ASTノード309
に付属されたバックエンド・ノード509を呼び出し、各
子ASTノード303に関して追加動作209を呼び出す。追加
動作209は、ASTノード309によって表されるソース・ト
ークンがバックエンド123の機能と関連する場合、バッ
クエンド・ノード503をバックエンド・ツリー500に追加
する。基本となるASTノード309がバックエンド123の目
標出力と関係ないために、この追加動作209がバックエ
ンド・ノード503をバックエンド・ツリー500に追加しな
い場合もある。Do_Add動作は、このDo_Add動作が根AST
ノード301に関して完了した場合に、抽象シンタックス
・ツリー300全体を横断して、各バックエンド・ツリー5
00が各バックエンド123の出力を表すように、再帰的で
あることが望ましい。一般バックエンド201は次に、Do_
Produce動作を呼び出し(415)、このDo_Produce動作は各
バックエンド213の作成動作を呼び出し、バックエンド1
23の関連する目標出力ファイル、または動作を作成す
る。
ると(409)、一般バックエンド203が根ASTノード301に関
してDo_Add動作を呼び出す。このDo_Add動作は、個々の
バックエンド123を調整して、それらのバックエンド・
ツリー500を構築し、各バックエンド123は選択されたAS
Tノード309を処理する。Do_Add動作は、各ASTノード309
に付属されたバックエンド・ノード509を呼び出し、各
子ASTノード303に関して追加動作209を呼び出す。追加
動作209は、ASTノード309によって表されるソース・ト
ークンがバックエンド123の機能と関連する場合、バッ
クエンド・ノード503をバックエンド・ツリー500に追加
する。基本となるASTノード309がバックエンド123の目
標出力と関係ないために、この追加動作209がバックエ
ンド・ノード503をバックエンド・ツリー500に追加しな
い場合もある。Do_Add動作は、このDo_Add動作が根AST
ノード301に関して完了した場合に、抽象シンタックス
・ツリー300全体を横断して、各バックエンド・ツリー5
00が各バックエンド123の出力を表すように、再帰的で
あることが望ましい。一般バックエンド201は次に、Do_
Produce動作を呼び出し(415)、このDo_Produce動作は各
バックエンド213の作成動作を呼び出し、バックエンド1
23の関連する目標出力ファイル、または動作を作成す
る。
【0025】図6は、Do_Add動作のロジック例を示して
いる。Do_Add動作が呼び出されると、ここでは「X」と
して指定されているASTノード309が、初期パラメータと
して送信される。一対のネストされたループが、Do_Add
における処理を制御する。外側のループは、ASTノードX
の子ASTノードZのそれぞれに対して繰り返され(419)、
内側のループは、ASTノードXに付属されたバックエンド
・ノードYのそれぞれに対して繰り返される(421)。この
ことによって、こうしたバックエンドのそれぞれは、子
ASTノードZのそれぞれを処理することができる。これら
の様々なノードの関係が、図8に示されている。図8で
は、抽象シンタックス・ツリー300の一部が示されてお
り、このツリーは、ここではノードXとして示されるAST
ノード309と、ここではZ1ないしZnで示されている任意
の数の子ASTノード303を有している。ノードXに付属さ
れたものは、任意の数のバックエンド・ノード509であ
り、ここではノードY1ないしYnでラベル付けされてい
る。
いる。Do_Add動作が呼び出されると、ここでは「X」と
して指定されているASTノード309が、初期パラメータと
して送信される。一対のネストされたループが、Do_Add
における処理を制御する。外側のループは、ASTノードX
の子ASTノードZのそれぞれに対して繰り返され(419)、
内側のループは、ASTノードXに付属されたバックエンド
・ノードYのそれぞれに対して繰り返される(421)。この
ことによって、こうしたバックエンドのそれぞれは、子
ASTノードZのそれぞれを処理することができる。これら
の様々なノードの関係が、図8に示されている。図8で
は、抽象シンタックス・ツリー300の一部が示されてお
り、このツリーは、ここではノードXとして示されるAST
ノード309と、ここではZ1ないしZnで示されている任意
の数の子ASTノード303を有している。ノードXに付属さ
れたものは、任意の数のバックエンド・ノード509であ
り、ここではノードY1ないしYnでラベル付けされてい
る。
【0026】ループの中心で、バックエンドYの追加動
作209が、子ASTノードZに関して呼び出される(423)。図
8の例では、Y1の追加動作209は、Z1に関して呼び出さ
れ、Y2はZ1に関して呼び出され、同様にしてYnまで続け
られる。追加動作209は、子ASTノードZがバックエンド1
23のバックエンド・ツリー500に関連するかどうかを判
定する。この判定は、子ASTノードZまたはその親のAST
ノードXのデータ・タイプ、あるいは、より一般的に
は、バックエンド・ツリー500の所望の構造に基づいて
行うことができる。例えば、コード生成バックエンド12
3cに関するバックエンド・ノード509の追加動作209は、
インクルードされたソース・コード・ファイルからのト
ークンを表すASTノードZに関するバックエンド・ノード
を追加することはない。子ASTノードZがバックエンド12
3の機能と関連している場合、1つ以上のバックエンド
・ノード509が作成されて、バックエンド・ツリー500に
追加される。更に、追加動作209は、任意の数のASTノー
ド309に関して付属動作を呼び出し、新しく作成された
バックエンド・ノード509をこうしたASTノード309(単
数または複数)に付属させることができる。
作209が、子ASTノードZに関して呼び出される(423)。図
8の例では、Y1の追加動作209は、Z1に関して呼び出さ
れ、Y2はZ1に関して呼び出され、同様にしてYnまで続け
られる。追加動作209は、子ASTノードZがバックエンド1
23のバックエンド・ツリー500に関連するかどうかを判
定する。この判定は、子ASTノードZまたはその親のAST
ノードXのデータ・タイプ、あるいは、より一般的に
は、バックエンド・ツリー500の所望の構造に基づいて
行うことができる。例えば、コード生成バックエンド12
3cに関するバックエンド・ノード509の追加動作209は、
インクルードされたソース・コード・ファイルからのト
ークンを表すASTノードZに関するバックエンド・ノード
を追加することはない。子ASTノードZがバックエンド12
3の機能と関連している場合、1つ以上のバックエンド
・ノード509が作成されて、バックエンド・ツリー500に
追加される。更に、追加動作209は、任意の数のASTノー
ド309に関して付属動作を呼び出し、新しく作成された
バックエンド・ノード509をこうしたASTノード309(単
数または複数)に付属させることができる。
【0027】上述のように、追加動作209は2つの論理
パラメータを含んでいるが、実際は必須ではない。第1
パラメータは、追加動作209が実行されるべきASTノード
Xに関連づけられたバックエンド・ツリー500内のバック
エンド・ノードYを指定し、第2パラメータは、ASTノー
ドXの子ASTノードZを指定する。オブジェクト指向環境
では、この追加動作209はバックエンド・ツリー500の各
ノード内に含まれる。例えば、C++では、この呼び出し
はY->add(Z)で表され、ここで「Y」及び「Z」はそれぞ
れのツリー内のノードに対するポインタである。手続型
の環境において、追加動作209は、各バックエンド123に
関する手続コードの一部である。どちらの場合にも、各
バックエンド123は、追加動作209の機能を制御する。好
適実施例において、ソース・コード・プログラミング言
語で、各データ・タイプが利用可能な追加動作209が存
在する。例えば、IDLソース・コード・ファイルに関連
したコンパイラ109の動作に関して、構造、インタフェ
ース、モジュール、定数、例外、タイプ定義(typedef)
その他を表すバックエンド・ノードを、個別のバックエ
ンド・ツリー500に追加するための、個別の追加動作が
ある。これらの特定の追加動作209のそれぞれは、それ
らの関連するデータ・タイプ、及びそこから抽出される
情報を分析するように最適化される。
パラメータを含んでいるが、実際は必須ではない。第1
パラメータは、追加動作209が実行されるべきASTノード
Xに関連づけられたバックエンド・ツリー500内のバック
エンド・ノードYを指定し、第2パラメータは、ASTノー
ドXの子ASTノードZを指定する。オブジェクト指向環境
では、この追加動作209はバックエンド・ツリー500の各
ノード内に含まれる。例えば、C++では、この呼び出し
はY->add(Z)で表され、ここで「Y」及び「Z」はそれぞ
れのツリー内のノードに対するポインタである。手続型
の環境において、追加動作209は、各バックエンド123に
関する手続コードの一部である。どちらの場合にも、各
バックエンド123は、追加動作209の機能を制御する。好
適実施例において、ソース・コード・プログラミング言
語で、各データ・タイプが利用可能な追加動作209が存
在する。例えば、IDLソース・コード・ファイルに関連
したコンパイラ109の動作に関して、構造、インタフェ
ース、モジュール、定数、例外、タイプ定義(typedef)
その他を表すバックエンド・ノードを、個別のバックエ
ンド・ツリー500に追加するための、個別の追加動作が
ある。これらの特定の追加動作209のそれぞれは、それ
らの関連するデータ・タイプ、及びそこから抽出される
情報を分析するように最適化される。
【0028】追加動作が終了すると、一般バックエンド
203はASTノードXに関して残りのバックエンド・ノードY
が存在するかどうかを判定する(425)。残りが存在して
いる場合には、ASTノードXの子ASTノードZに関して、こ
れらの付属バックエンド・ノードYの全てが処理される
まで処理が続けられる。一般バックエンド203は次に、
現在のASTノードXの子ASTノードZに関して、Do_Addを再
帰的に呼び出す(427)。この再帰呼び出しは、抽象シン
タックス・ツリー300を縦断して、完了するまでASTノー
ドZの子に関してDo_Addを再度呼び出す。この再帰呼び
出しが完了すると、一般バックエンド203は、ASTノード
Xの子ASTノードZがまだ残っているかどうかを判定し(42
9)、残っている場合は外側のループを続ける。このこと
によって、ASTノードXの子全てが上述のように処理され
る。代替実施例では、Do_Addに関する再帰呼び出しのタ
イミングを調整することによって、内側と外側のループ
を入れ替えることができる。
203はASTノードXに関して残りのバックエンド・ノードY
が存在するかどうかを判定する(425)。残りが存在して
いる場合には、ASTノードXの子ASTノードZに関して、こ
れらの付属バックエンド・ノードYの全てが処理される
まで処理が続けられる。一般バックエンド203は次に、
現在のASTノードXの子ASTノードZに関して、Do_Addを再
帰的に呼び出す(427)。この再帰呼び出しは、抽象シン
タックス・ツリー300を縦断して、完了するまでASTノー
ドZの子に関してDo_Addを再度呼び出す。この再帰呼び
出しが完了すると、一般バックエンド203は、ASTノード
Xの子ASTノードZがまだ残っているかどうかを判定し(42
9)、残っている場合は外側のループを続ける。このこと
によって、ASTノードXの子全てが上述のように処理され
る。代替実施例では、Do_Addに関する再帰呼び出しのタ
イミングを調整することによって、内側と外側のループ
を入れ替えることができる。
【0029】図4は、図3(3)で示された抽象シンタッ
クス・ツリー300の根ASTノード301に関してDo_Addを呼
び出した(413)結果を示している。それぞれの子のT2とT
3に関して、根バックエンド・ノードA1、B1、C1、及びD
1が順番に呼び出される(421)ように、Do_Addは最初、親
のT1に関して呼び出される。子 ASTノードT2、及びT3の
それぞれに関して、Do_Addは同じように枝を降り、それ
らに付属する各バックエンド・ノードの追加動作209を
呼び出す。この処理が終了すると、4つのバックエンド
・ツリー500aないし500dが存在し、そのそれぞれは、そ
れぞれのASTノード309に付属するバックエンド・ノード
503を有している。図4はまた、バックエンド・ツリー5
00の可変性も例示している。バックエンド・ツリー500a
は抽象シンタックス・ツリー300のレプリカであるが、
ツリー500bは、バックエンド123が必要とする情報の全
てが既に適当な形式で抽象シンタックス・ツリー300に
おいて利用可能であるため、根バックエンド・ノード50
1しか含んでいない。同様に、バックエンド・ツリー500
cは、抽象シンタックス・ツリー300の1つの枝のみを使
用し、ツリー500cのバックエンド・ノード509は、その
バックエンド123がその目標出力を作成するのに有用な
新しい情報を含むことができる。バックエンド・ツリー
500dは、ASTノードT6が抽象シンタックス・ツリー300内
のASTノードT5に従属していても、根バックエンドD1に
従属するノードD6を有するものとして再構築可能な、バ
ックエンド・ツリーを例示している。
クス・ツリー300の根ASTノード301に関してDo_Addを呼
び出した(413)結果を示している。それぞれの子のT2とT
3に関して、根バックエンド・ノードA1、B1、C1、及びD
1が順番に呼び出される(421)ように、Do_Addは最初、親
のT1に関して呼び出される。子 ASTノードT2、及びT3の
それぞれに関して、Do_Addは同じように枝を降り、それ
らに付属する各バックエンド・ノードの追加動作209を
呼び出す。この処理が終了すると、4つのバックエンド
・ツリー500aないし500dが存在し、そのそれぞれは、そ
れぞれのASTノード309に付属するバックエンド・ノード
503を有している。図4はまた、バックエンド・ツリー5
00の可変性も例示している。バックエンド・ツリー500a
は抽象シンタックス・ツリー300のレプリカであるが、
ツリー500bは、バックエンド123が必要とする情報の全
てが既に適当な形式で抽象シンタックス・ツリー300に
おいて利用可能であるため、根バックエンド・ノード50
1しか含んでいない。同様に、バックエンド・ツリー500
cは、抽象シンタックス・ツリー300の1つの枝のみを使
用し、ツリー500cのバックエンド・ノード509は、その
バックエンド123がその目標出力を作成するのに有用な
新しい情報を含むことができる。バックエンド・ツリー
500dは、ASTノードT6が抽象シンタックス・ツリー300内
のASTノードT5に従属していても、根バックエンドD1に
従属するノードD6を有するものとして再構築可能な、バ
ックエンド・ツリーを例示している。
【0030】図5を再び参照すると、Do_Add処理が完了
した場合、一般バックエンド203はDo_Produce処理を呼
び出して(415)、目標コードの実際の生成と、バックエ
ンド123の動作を初期化する。図7はDo_Produceのロジ
ックを示している。この処理が呼び出されると、一般バ
ックエンド203が、根ASTノード301に付属された根バッ
クエンド・ノードXのそれぞれにわたって処理を繰り返
す。このノードに関して、一般バックエンド203は、作
成方法を呼び出し、次に根バックエンド・ノードXに従
属する特定のバックエンド・ツリー500を横断し、コン
パイラ設計者の仕様に従って目標コード・ファイルまた
は動作を生成する。根バックエンド・ノードが全てなく
なった(417)場合、Do_Produceは終了する(437)。
した場合、一般バックエンド203はDo_Produce処理を呼
び出して(415)、目標コードの実際の生成と、バックエ
ンド123の動作を初期化する。図7はDo_Produceのロジ
ックを示している。この処理が呼び出されると、一般バ
ックエンド203が、根ASTノード301に付属された根バッ
クエンド・ノードXのそれぞれにわたって処理を繰り返
す。このノードに関して、一般バックエンド203は、作
成方法を呼び出し、次に根バックエンド・ノードXに従
属する特定のバックエンド・ツリー500を横断し、コン
パイラ設計者の仕様に従って目標コード・ファイルまた
は動作を生成する。根バックエンド・ノードが全てなく
なった(417)場合、Do_Produceは終了する(437)。
【0031】個別のバックエンド123の実際の実行が行
われている間、バックエンド・ノード509によって、よ
り高優先順位のバックエンド123から提供される情報を
見つける必要もある。通常、バックエンド123は、別のA
STノード309またはバックエンド・ノード509を処理して
いるときに、1つ以上のバックエンド・ノード509から
の情報を必要とする。このようなノードは同じバックエ
ンド・ツリー500内に現在の活動ノードとして存在しな
い可能性がある。この種の情報のアクセスを提供するた
めに、各バックエンド123にファミリ識別値が提供され
る。このファミリ識別値は、所与のバックエンド123に
関連づけられたバックエンド・ノード全て、及び個別の
バックエンド・ツリー500内のノード全てによって共有
される属性であり、それによって、このようなそれぞれ
のバックエンド・ノード509をその特定のバックエンド1
23に属するものとして識別する。
われている間、バックエンド・ノード509によって、よ
り高優先順位のバックエンド123から提供される情報を
見つける必要もある。通常、バックエンド123は、別のA
STノード309またはバックエンド・ノード509を処理して
いるときに、1つ以上のバックエンド・ノード509から
の情報を必要とする。このようなノードは同じバックエ
ンド・ツリー500内に現在の活動ノードとして存在しな
い可能性がある。この種の情報のアクセスを提供するた
めに、各バックエンド123にファミリ識別値が提供され
る。このファミリ識別値は、所与のバックエンド123に
関連づけられたバックエンド・ノード全て、及び個別の
バックエンド・ツリー500内のノード全てによって共有
される属性であり、それによって、このようなそれぞれ
のバックエンド・ノード509をその特定のバックエンド1
23に属するものとして識別する。
【0032】一般バックエンド203はそのため、パラメ
ータとしてASTノード309をとる、ルックアップ動作207
と、ファミリ識別値を含む。一般バックエンド203は、
指定されたASTノード309に付属された、指定されたファ
ミリ識別値を有する1つ以上のバックエンド・ノード50
9を返す。このノード(単数または複数)から、要求バ
ックエンド123は、データ・タイプ・サイズ、タイプ・
コードその他のような必要とされる情報を抽出できる。
図2は、ルックアップ動作207のデータフローを例示し
ている。例えば、図4では、バックエンド・ツリー500d
に関連づけられたバックエンド123は、バックエンド・
ノードD3を作成し、それをASTノードT3に付属させるた
めに、バックエンド・ノードA3から情報を要求すること
ができる。従って、ノードD1に関連づけられたバックエ
ンド123は、ASTノードT3と、バックエンド・ツリー500a
に関連づけられているバックエンド123のファミリ識別
値を送信して、ルックアップ動作を呼び出す。次に一般
バックエンド203は、バックエンド123がバックエンド・
ノードD3を作成するために必要とされる情報を抽出した
箇所から、バックエンド・ノードA3に帰る。
ータとしてASTノード309をとる、ルックアップ動作207
と、ファミリ識別値を含む。一般バックエンド203は、
指定されたASTノード309に付属された、指定されたファ
ミリ識別値を有する1つ以上のバックエンド・ノード50
9を返す。このノード(単数または複数)から、要求バ
ックエンド123は、データ・タイプ・サイズ、タイプ・
コードその他のような必要とされる情報を抽出できる。
図2は、ルックアップ動作207のデータフローを例示し
ている。例えば、図4では、バックエンド・ツリー500d
に関連づけられたバックエンド123は、バックエンド・
ノードD3を作成し、それをASTノードT3に付属させるた
めに、バックエンド・ノードA3から情報を要求すること
ができる。従って、ノードD1に関連づけられたバックエ
ンド123は、ASTノードT3と、バックエンド・ツリー500a
に関連づけられているバックエンド123のファミリ識別
値を送信して、ルックアップ動作を呼び出す。次に一般
バックエンド203は、バックエンド123がバックエンド・
ノードD3を作成するために必要とされる情報を抽出した
箇所から、バックエンド・ノードA3に帰る。
【0033】
【発明の効果】本発明によって、バックエンドが、フロ
ントエンドに依存せず、コンパイル時にユーザが望むと
おりに動的に呼び出される、コンパイラ設計が提供され
る。
ントエンドに依存せず、コンパイル時にユーザが望むと
おりに動的に呼び出される、コンパイラ設計が提供され
る。
【図1】本発明のコンパイラを含むコンピュータ・シス
テムのブロック図である。
テムのブロック図である。
【図2】本発明のコンパイラの動作と構造に関するデー
タフロー図である。
タフロー図である。
【図3】処理の異なる段階における標準的な抽象シンタ
ックス・ツリーの様々な例を示す図である。
ックス・ツリーの様々な例を示す図である。
【図4】処理の異なる段階における標準的な抽象シンタ
ックス・ツリーの様々な例を示す図である。
ックス・ツリーの様々な例を示す図である。
【図5】一般バックエンド、及び個別バックエンドの動
作を示すフローチャートである。
作を示すフローチャートである。
【図6】一般バックエンド、及び個別バックエンドの動
作を示すフローチャートである。
作を示すフローチャートである。
【図7】一般バックエンド、及び個別バックエンドの動
作を示すフローチャートである。
作を示すフローチャートである。
【図8】図6のDo_Add動作の呼び出し順を例示する図で
ある。
ある。
101 コンピュータ 103 アドレス指定可能メモリ 105 オペレーティング・システム 107 テキスト・エディタ 109 コンパイラ 111 大容量記憶装置 113 ネットワーク・インタフェース 115 プロセッサ 117 入力装置 119 出力装置 123 バックエンド
───────────────────────────────────────────────────── フロントページの続き (72)発明者 ジャコブ・ワイ・レヴィ アメリカ合衆国カリフォルニア州94022ロ ス・アルトス,アービュエロ・ウエイ・ 120 (72)発明者 ドナルド・ジェイ・クレッチ アメリカ合衆国カリフォルニア州95014ク パーティノ,バール・ストリート・22292 (72)発明者 ウェズリー・イー・ミッチェル アメリカ合衆国カリフォルニア州94087サ ニーヴェイル,マーティン・アヴェニュ ー・1614 (72)発明者 ベンジャミン・レーナー アメリカ合衆国カリフォルニア州94303パ ロ・アルト,ジャニス・ウエイ・3482
Claims (18)
- 【請求項1】ソース・コード・ファイルをコンパイル
し、そこから可変の目標出力を作成するための装置であ
って、前記装置が、 前記ソース・コード・ファイルを受け取り、そこから前
記ソース・コード・ファイルのシンタックス構造を表す
抽象シンタックス・ツリーを作成するフロントエンドで
あって、前記抽象シンタックス・ツリーが少なくとも1
つの抽象シンタックス・ツリーのノードを有する、前記
フロントエンド、 前記抽象シンタックス・ツリーから、関連するバックエ
ンド・ツリーを作成し、更に、前記バックエンド・ツリ
ーから目標出力を作成する、少なくとも1つのバックエ
ンドであって、前記バックエンド・ツリーが少なくとも
1つのバックエンド・ツリーのノードを有する、前記バ
ックエンド、及び各バックエンドが一般バックエンドか
ら独立し、実行中に装置によって動的にロードされるよ
うに、少なくとも1つのバックエンドを制御して、関連
するバックエンド・ツリーを作成する、前記一般バック
エンドを含むことを特徴とする、前記装置。 - 【請求項2】前記一般バックエンドが、選択された順序
で、抽象シンタックス・ツリーのノードのそれぞれに付
属された各バックエンド・ノードに関連づけられた各バ
ックエンドを呼び出すことを特徴とする、請求項1に記
載の装置。 - 【請求項3】各バックエンドが、一般バックエンドから
呼び出し可能で、ゼロ以上のバックエンド・ノードをバ
ックエンド・ツリーに追加する、追加動作を更に含むこ
とを特徴とする、請求項1に記載の装置。 - 【請求項4】前記一般バックエンドが、バックエンドか
ら呼び出し可能で、バックエンド・ツリーのバックエン
ドを、抽象シンタックス・ツリーの少なくとも1つのノ
ードに付属させる、付属動作を更に含むことを特徴とす
る、請求項3に記載の装置。 - 【請求項5】各バックエンド・ノードが、バックエンド
・ノードに関連づけられたバックエンドの優先順位値に
対応する優先順位値に従って、抽象シンタックス・ツリ
ーに付属されることを特徴とする、請求項4に記載の装
置。 - 【請求項6】1つのバックエンドに関連づけられた、選
択されたバックエンド・ノードが、所定の順序で抽象シ
ンタックス・ツリーに付属されることを特徴とする、請
求項5に記載の装置。 - 【請求項7】各バックエンド・ノードがオブジェクト
で、追加動作がそのオブジェクトの方法であることを特
徴とする、請求項3に記載の装置。 - 【請求項8】抽象シンタックス・ツリー、少なくとも1
つのバックエンド・ツリー、一般バックエンド、及び少
なくとも1つのバックエンドを記憶するメモリ装置、及
び一般バックエンドと少なくとも1つのバックエンドを
実行して少なくとも1つのバックエンドから少なくとも
1つの目標出力を作成する、処理装置を更に含むことを
特徴とする、請求項1に記載の装置。 - 【請求項9】バックエンドに関連づけられた各バックエ
ンド、及び各バックエンド・ノードがファミリ識別値を
有し、前記一般バックエンドが、 ファミリ識別値を有し、抽象シンタックス・ツリーのノ
ードに付属された、少なくとも1つのバックエンド・ツ
リーから、ファミリ識別値と抽象シンタックス・ツリー
のノードを指定しているバックエンドからの要求に応答
して、ゼロ以上のノードを返す、ルックアップ動作を更
に含むことを特徴とする、請求項1に記載の装置。 - 【請求項10】ソース・コード・ファイルをコンパイル
し、そこから可変の目標出力を作成するための方法であ
って、前記方法が、 ソース・コード・ファイルを提供するステップ、 フロントエンドと一般バックエンドを有するコンパイラ
を実行するステップ、 少なくとも1つのバックエンドを、一般バックエンドと
協働させるためにロードするステップ、 フロントエンドによって、1つの根ノードと少なくとも
1つの子ノードを含んでいる抽象シンタックス・ツリー
をソース・コードから作成するステップ、 各バックエンドに関連づけられたバックエンド・ツリー
を生成するステップ、及び各バックエンド・ツリーから
目標出力を作成するステップを含むことを特徴とする、
前記方法。 - 【請求項11】バックエンド・ツリーを生成するステッ
プが、抽象シンタックス・ツリーの選択されたノードに
関して、選択的に各バックエンドを呼び出すことによっ
て実行されることを特徴とする、請求項10に記載の方
法。 - 【請求項12】少なくとも1つのバックエンド・ツリー
のバックエンド・ノードを、抽象シンタックス・ツリー
の根ノードに付属させるステップ、 抽象シンタックス・ツリーのノードを選択し、選択され
たノードのそれぞれに対して、選択されたバックエンド
・ツリーに、抽象シンタックス・ツリーから導出された
シンタックス情報を表す、ゼロ以上のバックエンド・ノ
ードを追加するステップ、及び選択されたバックエンド
・ノードを、抽象シンタックス・ツリーの選択されたノ
ードに付属させるステップを更に含むことを特徴とす
る、請求項10に記載の方法。 - 【請求項13】抽象シンタックス・ツリーの各ノードに
付属された各ノードに関して、前記選択ステップを繰り
返すステップを更に含むことを特徴とする、請求項12に
記載の方法。 - 【請求項14】付属ステップのそれぞれが、 バックエンド・ノードを、前記バックエンド・ノードに
関連づけられたバックエンドの優先順位値に対応する優
先順位値に従って、抽象シンタックス・ツリーに付属さ
せるステップを更に含むことを特徴とする、請求項12に
記載の方法。 - 【請求項15】1つのバックエンドに関連づけられた、
選択されたバックエンド・ノードを、所定の順序で抽象
シンタックス・ツリーに付属させるステップを更に含む
ことを特徴とする、請求項14に記載の方法。 - 【請求項16】抽象シンタックス・ツリーのノードを選
択するステップが、再帰的に実行されることを特徴とす
る、請求項10に記載の方法。 - 【請求項17】各バックエンド、及びそのバックエンド
に関連づけられたバックエンド・ノードがファミリ識別
値を有し、 ファミリ識別値、及び抽象シンタックス・ツリーのノー
ドを指定する要求を受け取るステップ、 同じ識別値を有し、抽象シンタックス・ツリーのノード
に付属されている、少なくとも1つのバックエンド・ツ
リーから、ゼロ以上のバックエンド・ノードを返すステ
ップを更に含むことを特徴とする、請求項10に記載の方
法。 - 【請求項18】ソース・コード・ファイルをコンパイル
し、そこから可変の目標出力を作成するためのコンピュ
ータ・システムであって、前記システムが、 ソース・コード・ファイルのシンタックス構造を表し、
少なくとも1つの抽象シンタックス・ツリーのノードを
有する抽象シンタックス・ツリー、 抽象シンタックス・ツリーから導出される少なくとも1
つのバックエンド・ツリーであって、各バックエンド・
ツリーが少なくとも1つのバックエンド・ノードを有
し、それがバックエンドに関連づけられている、前記少
なくとも1つのバックエンド・ツリー、 抽象シンタックス・ツリーからバックエンドに関連づけ
られたバックエンド・ツリーを作成し、更に、バックエ
ンド・ツリーから目標出力を作成する、少なくとも1つ
のバックエンドであって、各バックエンドはコンパイラ
から独立しており、実行中にコンパイラによって動的に
ロードされ、選択された順序で一般バックエンドによっ
て呼び出される、前記少なくとも1つのバックエンド、
及びソース・コード・ファイルを受け取り、そこから抽
象シンタックス・ツリーを作成するフロントエンドと、
抽象シンタックス・ツリーのノードに付属された少なく
とも1つのバックエンド・ツリーのノードに関連づけら
れたバックエンドを選択された順序で呼び出すことによ
って、少なくとも1つのバックエンド・ツリーの構造を
調整する一般バックエンドを含むコンパイラを記憶する
メモリ装置、及び一般バックエンドと少なくとも1つの
バックエンドを実行して、少なくとも1つのバックエン
ドから、少なくとも1つの目標出力を作成する処理装置
を含むことを特徴とする、前記システム。
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US41254695A | 1995-03-29 | 1995-03-29 | |
US412546 | 1995-03-29 |
Publications (2)
Publication Number | Publication Date |
---|---|
JPH08286926A true JPH08286926A (ja) | 1996-11-01 |
JP3315857B2 JP3315857B2 (ja) | 2002-08-19 |
Family
ID=23633438
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP07560196A Expired - Fee Related JP3315857B2 (ja) | 1995-03-29 | 1996-03-29 | 一般フロントエンド、及び動的にロード可能なバックエンドを有するコンパイラ |
Country Status (5)
Country | Link |
---|---|
US (1) | US5812851A (ja) |
EP (1) | EP0735467B1 (ja) |
JP (1) | JP3315857B2 (ja) |
CA (1) | CA2171570C (ja) |
DE (1) | DE69625948T2 (ja) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2013516701A (ja) * | 2010-01-07 | 2013-05-13 | マイクロソフト コーポレーション | 漸進的変化を伴う効率的な不変構文表現 |
Families Citing this family (52)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2000505224A (ja) * | 1996-11-27 | 2000-04-25 | ソニー オイローパ ビーブイ | タイプされた継続を使用したデータ通信方法 |
US6059839A (en) * | 1997-01-09 | 2000-05-09 | Silicon Graphics, Inc. | Apparatus and method for compiler identification of address data |
GB2327786B (en) * | 1997-07-31 | 2002-04-03 | Ibm | Method and apparatus for strategic compilation of source programs into two or more target languages |
US20050021085A1 (en) * | 1998-05-11 | 2005-01-27 | Surgical Connections, Inc. | Surgical stabilizer devices and methods |
US6594783B1 (en) * | 1999-08-27 | 2003-07-15 | Hewlett-Packard Development Company, L.P. | Code verification by tree reconstruction |
US7168069B1 (en) * | 2000-07-12 | 2007-01-23 | Stmicroelectronics, Inc. | Dynamic generation of multimedia code for image processing |
FR2812479B1 (fr) * | 2000-07-28 | 2003-01-31 | Airsys Atm S A | Generateur universel de code informatique |
US6993744B2 (en) * | 2000-12-19 | 2006-01-31 | Tajen Corporation | Method for enabling a compiler or interpreter to use identifiers found at run time in a map container object in a manner similar or identical to identifiers declared at compile time |
US6577678B2 (en) | 2001-05-08 | 2003-06-10 | Quicksilver Technology | Method and system for reconfigurable channel coding |
US20030108012A1 (en) * | 2001-12-12 | 2003-06-12 | Quicksilver Technology, Inc. | Method and system for detecting and identifying scrambling codes |
US7215701B2 (en) | 2001-12-12 | 2007-05-08 | Sharad Sambhwani | Low I/O bandwidth method and system for implementing detection and identification of scrambling codes |
US7328414B1 (en) | 2003-05-13 | 2008-02-05 | Qst Holdings, Llc | Method and system for creating and programming an adaptive computing engine |
US8108656B2 (en) | 2002-08-29 | 2012-01-31 | Qst Holdings, Llc | Task definition for specifying resource requirements |
US20040068716A1 (en) * | 2002-10-04 | 2004-04-08 | Quicksilver Technology, Inc. | Retargetable compiler for multiple and different hardware platforms |
US8276135B2 (en) * | 2002-11-07 | 2012-09-25 | Qst Holdings Llc | Profiling of software and circuit designs utilizing data operation analyses |
US7051322B2 (en) | 2002-12-06 | 2006-05-23 | @Stake, Inc. | Software analysis framework |
US7219338B2 (en) * | 2003-03-25 | 2007-05-15 | Microsoft Corporation | Multi-language compilation |
US7873992B1 (en) | 2003-12-04 | 2011-01-18 | Avaya Inc. | Dynamic system of autonomous parsers for interpreting arbitrary telecommunication equipment streams |
US7552137B2 (en) * | 2004-12-22 | 2009-06-23 | International Business Machines Corporation | Method for generating a choose tree for a range partitioned database table |
WO2007084780A2 (en) * | 2006-01-20 | 2007-07-26 | Aptana, Inc. | Type inference system and method |
US20080141230A1 (en) * | 2006-12-06 | 2008-06-12 | Microsoft Corporation | Scope-Constrained Specification Of Features In A Programming Language |
US8027946B1 (en) | 2006-12-22 | 2011-09-27 | Avaya Inc. | Higher order logic applied to expert systems for alarm analysis, filtering, correlation and root cause |
US20080182021A1 (en) * | 2007-01-31 | 2008-07-31 | Simka Harsono S | Continuous ultra-thin copper film formed using a low thermal budget |
US8850414B2 (en) * | 2007-02-02 | 2014-09-30 | Microsoft Corporation | Direct access of language metadata |
US8613080B2 (en) | 2007-02-16 | 2013-12-17 | Veracode, Inc. | Assessment and analysis of software security flaws in virtual machines |
US8914774B1 (en) | 2007-11-15 | 2014-12-16 | Appcelerator, Inc. | System and method for tagging code to determine where the code runs |
US8954989B1 (en) | 2007-11-19 | 2015-02-10 | Appcelerator, Inc. | Flexible, event-driven JavaScript server architecture |
US8260845B1 (en) | 2007-11-21 | 2012-09-04 | Appcelerator, Inc. | System and method for auto-generating JavaScript proxies and meta-proxies |
US8719451B1 (en) | 2007-11-23 | 2014-05-06 | Appcelerator, Inc. | System and method for on-the-fly, post-processing document object model manipulation |
US8566807B1 (en) | 2007-11-23 | 2013-10-22 | Appcelerator, Inc. | System and method for accessibility of document object model and JavaScript by other platforms |
US8756579B1 (en) | 2007-12-03 | 2014-06-17 | Appcelerator, Inc. | Client-side and server-side unified validation |
US8806431B1 (en) | 2007-12-03 | 2014-08-12 | Appecelerator, Inc. | Aspect oriented programming |
US8819539B1 (en) | 2007-12-03 | 2014-08-26 | Appcelerator, Inc. | On-the-fly rewriting of uniform resource locators in a web-page |
US8527860B1 (en) | 2007-12-04 | 2013-09-03 | Appcelerator, Inc. | System and method for exposing the dynamic web server-side |
US8938491B1 (en) | 2007-12-04 | 2015-01-20 | Appcelerator, Inc. | System and method for secure binding of client calls and server functions |
US8335982B1 (en) | 2007-12-05 | 2012-12-18 | Appcelerator, Inc. | System and method for binding a document object model through JavaScript callbacks |
US8285813B1 (en) | 2007-12-05 | 2012-10-09 | Appcelerator, Inc. | System and method for emulating different user agents on a server |
US8639743B1 (en) | 2007-12-05 | 2014-01-28 | Appcelerator, Inc. | System and method for on-the-fly rewriting of JavaScript |
US8954869B2 (en) * | 2007-12-17 | 2015-02-10 | International Business Machines Corporation | Generating a front end graphical user interface for a plurality of text based commands |
US8291079B1 (en) | 2008-06-04 | 2012-10-16 | Appcelerator, Inc. | System and method for developing, deploying, managing and monitoring a web application in a single environment |
US8880678B1 (en) | 2008-06-05 | 2014-11-04 | Appcelerator, Inc. | System and method for managing and monitoring a web application using multiple cloud providers |
US20100037213A1 (en) * | 2008-08-07 | 2010-02-11 | Microsoft Corporation | Grammar-based generation of types and extensions |
US7596620B1 (en) | 2008-11-04 | 2009-09-29 | Aptana, Inc. | System and method for developing, deploying, managing and monitoring a web application in a single environment |
US9286063B2 (en) | 2012-02-22 | 2016-03-15 | Veracode, Inc. | Methods and systems for providing feedback and suggested programming methods |
US9465608B2 (en) * | 2013-03-15 | 2016-10-11 | ArtinSoft Corporation | Code separation with semantic guarantees |
US9459862B2 (en) | 2013-01-29 | 2016-10-04 | ArtinSoft Corporation | Automated porting of application to mobile infrastructures |
US10061573B2 (en) | 2013-01-29 | 2018-08-28 | Mobilize.Net Corporation | User interfaces of application porting software platform |
US10019259B2 (en) | 2013-01-29 | 2018-07-10 | Mobilize.Net Corporation | Code transformation using extensibility libraries |
US9329844B2 (en) * | 2014-05-30 | 2016-05-03 | Apple Inc. | Programming system and language for application development |
US10001978B2 (en) * | 2015-11-11 | 2018-06-19 | Oracle International Corporation | Type inference optimization |
CN111338944B (zh) * | 2020-02-21 | 2023-09-08 | 北京字节跳动网络技术有限公司 | 远程过程调用rpc接口测试方法、装置、介质及设备 |
CN116149670B (zh) * | 2023-04-21 | 2023-07-11 | 湖南泛联新安信息科技有限公司 | 一种基于图的hdl编译优化方法 |
-
1996
- 1996-03-12 CA CA002171570A patent/CA2171570C/en not_active Expired - Fee Related
- 1996-03-14 EP EP96104078A patent/EP0735467B1/en not_active Expired - Lifetime
- 1996-03-14 DE DE69625948T patent/DE69625948T2/de not_active Expired - Fee Related
- 1996-03-29 JP JP07560196A patent/JP3315857B2/ja not_active Expired - Fee Related
-
1997
- 1997-03-21 US US08/822,110 patent/US5812851A/en not_active Expired - Lifetime
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2013516701A (ja) * | 2010-01-07 | 2013-05-13 | マイクロソフト コーポレーション | 漸進的変化を伴う効率的な不変構文表現 |
US10564944B2 (en) | 2010-01-07 | 2020-02-18 | Microsoft Technology Licensing, Llc | Efficient immutable syntax representation with incremental change |
Also Published As
Publication number | Publication date |
---|---|
EP0735467B1 (en) | 2003-01-29 |
CA2171570C (en) | 1999-09-21 |
US5812851A (en) | 1998-09-22 |
DE69625948D1 (de) | 2003-03-06 |
JP3315857B2 (ja) | 2002-08-19 |
EP0735467A3 (en) | 1997-05-02 |
EP0735467A2 (en) | 1996-10-02 |
DE69625948T2 (de) | 2003-11-13 |
CA2171570A1 (en) | 1996-09-30 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
JP3315857B2 (ja) | 一般フロントエンド、及び動的にロード可能なバックエンドを有するコンパイラ | |
US6948151B2 (en) | System and method for dynamic packaging of component objects | |
US5359546A (en) | Automatic generation of test drivers | |
US6175948B1 (en) | Method and apparatus for a waveform compiler | |
US7080350B2 (en) | Method for developing Web applications, development support system and storage medium for storing programs developed according to the method | |
US6931621B2 (en) | Method and system and article of manufacture for an N-tier software component architecture oilfield model | |
US6922827B2 (en) | Iterative software development environment with prioritized build rules | |
EP1388064B1 (en) | System and method for combinatorial test generation in a compatibility testing environment | |
US7162709B2 (en) | System and method for common code generation | |
US7954084B2 (en) | Software for generating a computer application code and software description language | |
JP2001109628A (ja) | ソフトウェアシステムとその開発方法 | |
AU2604401A (en) | Method and system and article of manufacture for an N-tier software component architecture application | |
KR20020091071A (ko) | 소프트웨어 컴포넌트를 생성하기 위한 n-계층 소프트웨어아키텍처 디자인 방법 및 시스템 | |
US10666744B2 (en) | Managing discovery and selection of service interface specifications | |
US20040205550A1 (en) | System and method for developing custom programmable tags | |
GB2321731A (en) | Remote compiling of computer source code for cross development | |
US7512937B2 (en) | Integrated visual and language-based method for reusable data transformations | |
US5995100A (en) | Method of automatically generating custom controls for selected modules in a library | |
US20090037878A1 (en) | Web Application Development Tool | |
EP2271982A1 (en) | A method and a system for transforming an object model | |
US20030237073A1 (en) | Software synchronization of interface and class implementation | |
Lor | Automatic Synthesis of SARA Design Models From System | |
US20040194022A1 (en) | Kernel configuration tool | |
WO2008015110A2 (en) | Methods, apparatus and computer programs for modelling computer programs | |
JP3166699B2 (ja) | オブジェクト指向プログラム設計支援装置、方法および記録媒体 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
R250 | Receipt of annual fees |
Free format text: JAPANESE INTERMEDIATE CODE: R250 |
|
R250 | Receipt of annual fees |
Free format text: JAPANESE INTERMEDIATE CODE: R250 |
|
R250 | Receipt of annual fees |
Free format text: JAPANESE INTERMEDIATE CODE: R250 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20080607 Year of fee payment: 6 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20090607 Year of fee payment: 7 |
|
LAPS | Cancellation because of no payment of annual fees |