JPH0685150B2 - コンピユータ・プログラム変換装置および方法 - Google Patents

コンピユータ・プログラム変換装置および方法

Info

Publication number
JPH0685150B2
JPH0685150B2 JP30676989A JP30676989A JPH0685150B2 JP H0685150 B2 JPH0685150 B2 JP H0685150B2 JP 30676989 A JP30676989 A JP 30676989A JP 30676989 A JP30676989 A JP 30676989A JP H0685150 B2 JPH0685150 B2 JP H0685150B2
Authority
JP
Japan
Prior art keywords
input
node
language
pointer
type
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.)
Expired - Lifetime
Application number
JP30676989A
Other languages
English (en)
Other versions
JPH02183339A (ja
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.)
International Business Machines Corp
Original Assignee
International Business Machines Corp
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 International Business Machines Corp filed Critical International Business Machines Corp
Publication of JPH02183339A publication Critical patent/JPH02183339A/ja
Publication of JPH0685150B2 publication Critical patent/JPH0685150B2/ja
Anticipated expiration legal-status Critical
Expired - Lifetime legal-status Critical Current

Links

Classifications

    • GPHYSICS
    • G06COMPUTING OR CALCULATING; COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/42Syntactic analysis
    • G06F8/427Parsing
    • GPHYSICS
    • G06COMPUTING OR CALCULATING; COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/30Creation or generation of source code

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)
  • Machine Translation (AREA)

Description

【発明の詳細な説明】 A.産業上の利用分野 この発明は全般的にはコンピユータ・プログラミング言
語の変換に関し、より具体化にはプログラミング言語ト
ランスレータの記述および実行に関連して実行時機能を
利用するようにしたものである。
B.従来の技術 コンピユータ・プログラミング言語を用いて、デジタル
・コンピユータが処理すべき操作シーケンスを記述する
ようになつている。多くの異種のプログラミング言語が
存在し、その幅は、ハードウエアが直接変換するマシン
言語から、ハードウエアによる実行に先立つて等価形態
に変換しなければならない高レベル言語まである。
「トランスレーシヨン」(変換)はプログラムの形態を
1の言語から他の言語に変化させる事を指す用語であ
る。「コンパイル」は「トランスレーシヨン」の類似語
であるけれども、一般には高レベル言語を機械語すなわ
ちコンピユータ・システムのハードウエアで直接に実行
できる言語に変換する処理を指すものと了解されてい
る。あるいは高レベル言語を、アツセンブリ言語すなわ
ち比較的わずかな操作で機械語に直接に変換できる言語
に、変換する処理を指すものと了解されている。
言語トランスレーシヨンをプログラムする際の問題を解
決するために多くの研究がなされてきた。そして1つの
言語から他の言語へのトランスレーシヨンを書く者をア
シストする理論的ないし実際的なツールも利用可能であ
る。この点に関し、多くの文献があるけれども、プログ
ラム言語のトランスレーシヨンの理論および実際を解説
するものとして広く知られているものとしては、“The
Theory of Parsing,Translation and Compiling",A.Aho
およびJ.Vllman、Premitice-Hall,Engelwood Cliffs,Ne
w Jerses(1972)および“Principles of Compiler Des
ing",A.AhoおよびJ.Vllman,Addison-Wesley,Reading,Ma
ryland(1977)がある。
プログラム言語トランスレータを書くのは大変に複雑で
困難な作業である。トランスレータはいくつかの処理を
実行しなければならず、それら処理の各々は個別的にも
複雑なプログラム上の課題である。これら個別の事項は
広い意味で言えば字句解析、構文解析および意味解析を
含む。これらはソース・プログラムの解析ならびに最適
化およびコード生成と関連し、また出力フアイルの構築
にも関連する。
トランスレーシヨン処理のある部分は自動化の余地があ
る。とくに、字句解析および構文解析のステツプは厳格
な形式的な解析にまかされてきた。その結果、字句スキ
ヤナすなわち字句解析を実行する部分およびパーサすな
わち構文解析を実行する部分を大体自動的に生成するツ
ールを利用できるようになつている。このようなツール
の一例はLexおよびYaccであり、Unix(商標)および関
連ソフトウエア・システム上で利用可能である。
LexおよびYaccのような現行ツールではプログラム言語
トランスレータを自動的に生成するという観点から望ま
れる多くの事項を未解決としている。これらツールは字
句スキヤニングおよび構文パーシングを実行するプログ
ラム・コードを生成するけれども、統合化されていな
い。Lexによつて生成された続語スキヤナの出力を取り
出し、Yaccによつて生成された構文パーサで利用可能な
入力に変換するコードを書くのは依然人間のトランスレ
ータ・ライタである。さらに人間のトランスレータ・ラ
イタはすべての必要な意味解析を作成しなければならな
い。
LexおよびYaccのような利用可能なプログラムの出力
は、変換すべき用語の仕様に変更があると自動生成コー
ド全体にわたって多くの点で変更が必要となるという欠
点があった。トランスレータ・ライタは、2度目にツー
ルを用いて新しい言語仕様を実行した後に、トランスレ
ータ・ライタ自身が個別に書いたコードのすべての部分
を変更してLexおよびYaccで生成したコードの変更の適
合するようにしなければならない。このような変更は複
雑であり、極めて多岐にわたるため、変更により加わっ
たエラーがないと保障するのは困難である。また一つの
部分たとえば字句スキヤナになされた変更が他の部分た
とえばパーサに適切に反映すると保障するのも困難であ
る。
字句スキヤナおよびパーサを記述するのに自動化ツール
を使用するかどうかにかかわらず、各プログラム言語ト
ランスレータは字句および構文解析を実行するのに必要
なコードのすべてを含んでいる必要がある。変換される
言語の知識はこのコード中に組み込まれているので、一
般に異なる言語を変換する際に用いるように容易に適合
化するのは不可能である。このことは、わずかであれ重
要な相違があれば、プログラム言語が極めて類似であつ
ても同様である。現在、どのような言語が変換されるに
しろ、字句スキヤニングおよびパーシングの処理が極め
て標準的態様で実行されているという利点を十分に利用
したメカニズムは存在していない。
ほとんどのプログラム言語において字句スキヤニングお
よびパーシングは機能的に類似の処理であるという利点
を生かしたシステムを提供することが望まれる。またい
くつかの異なるプログラム言語の各トランスレータとと
もに簡易に用いることができるシステムが望まれる。
C.発明が解決しようとする課題 この発明は事情を考慮してなされるものであり、入力言
語の字句スキヤニングおよびパーシングを行う手順を提
供することを目的としている。
またこの発明はトランスレータを記述する目的言語と無
関係な字句スキヤニングおよびパーシングの手順を提供
することを目的としている。
またこの発明はトランスレータを記述する目的言語と無
関係な、また入力言語と無関係な字句スキヤニングおよ
びパーシングの手順を提供することを目的としている。
D.課題を解決するための手段 この発明では、以上の目的を達成するために、一組の字
句スキヤニング及びパーシングの手続きが呼び出し可能
なライブラリ・ルーチンとして提供される。入力言語ト
ランスレータは目的言語で記述され、標準の、予め定め
られたデータ構造が目的言語で与えられる。このような
データ構造に含まれる情報は入力言語用の字句解析およ
び構文解析の規則を定義する。ライブラリ・ルーチンは
上述の予め定められたデータ構造を参照し、入力言語プ
ログラムまたはプログラムの断片の完全な字句および構
文解析がライブラリ手続き内で実行される。ライブラリ
手続きの機能は目的言語と独立であり、また入力言語と
も独立である。ただし、入力言語が、ライブラリ手続き
の参照するデータ構造により定義されるという限度で例
外となる。
E.実施例 以下の説明では3つのプログラム言語に触れる。これら
3つの言語はメタ言語、目的言語および入力言語であ
る。メタ言語は入力言語を様式化したものである。入力
言語はトランスレータがそのために記述されるところの
言語である。目的言語はトランスレータを記述するのに
用いる言語である。第1図において、メタ言語ソース・
フアイル10は入力言語の形式的な仕様を含んでいる。仕
様は好ましく標準的なフオーマツトたとえばBackus-Nau
rフオーマツト(BNF)とされ、入力言語の語彙、続語仕
様および構文を記述する。メタ言語ソース・フアイル10
のステートメントはメタ言語トランスレータ12より読み
取られ、目的言語オブジエクトを含むフアイル14に変換
される。
メタ言語トランスレータ12は、メタ言語ソース・フアイ
ル10を以下の特徴を有する目的言語オブジエクト14に変
換できる任意のプログラムであつてよい。この発明にあ
つては、メタ言語ソース・フアイル10およびトランスレ
ータ12自体はなくてもよく、目的言語オブジエクト14が
直接に保持されてもよい。ただしメタ言語ソース・フア
イル10を用いれば、一般にユーザ(プログラム言語トラ
ンスレータを記述する人)が入力言語の仕様をより明瞭
に理解できることになる。
オブジエクト14を記述する目的言語は、トランスレータ
を記述するのに適したいかなる言語であつてもよい。そ
のような言語の例はC、PascalおよびAdaである。目的
言語の選択は入力言語と別個に行うことができ、一般に
ユーザが使いなれている言語が選ばれる。
目的言語オブジエクト14は完全なトランスレータを表わ
していない。ユーザは、トランスレータの意味解析部お
よびコード生成部を含む1以上のユーザ・ソース・フア
イル16を提供する必要がある。ユーザ・ソースファイル
16および目的言語オブジエクト14は目的言語トランスレ
ータ18への入力として用いられる。目的言語トランスレ
ータ18は実行可能な入力言語トランスレータ20を生成す
る。このトランスレータ20は入力言語ソース・フアイル
22からソース・プログラムを読み出して、変換済み入力
言語フアイル24を生成する。変換済み入力言語フアイル
24は実行可能フアイルでもよく、また実行可能フアイル
に実質的に変換で任意の形態のフアイルでもよい。変換
済み入力言語フアイル24の形態は、入力言語トランスレ
ータ20のコード生成部によつて決まり、これはユーザ・
ソース・フアイル16中のコードにより定義される。
実行時ライブラリ26は入力言語ソース・フアイル22の字
句解析および構文解析を実行する一組の手続きを提供す
る。入力言語トランスレータはライブラリ26内で、パー
サ・ルーチンを呼び出し、ソース・フアイル22からの入
力ストリングおよびパーシングすべきゴールをパラメー
タとして渡す。このゴールはたとえば単一のステートメ
ント、サブルーチンまたは完全なプログラムであつてよ
い。つぎにパーサ・ルーチンは入力ストリングの構文を
チエツクし、要求されているゴールとして有効かどうか
を判別する。たとえば入力言語のプログラム全体を変換
することが望まれるのであれば、プログラム全体をパー
シングするためにパーサにゴールが付与される。入力言
語ソース・フアイルが有効な入力言語のプログラムであ
れば、実行時ライブラリ26内のパーサが有効を示す結果
を返すことになる。
第2図において、実行時ライブラリ26内のルーチンの内
部動作が示されている。第1のステツプでは、入力言語
トランスレータ20が入力ストリングのパーシングに適用
されるゴールを決定する。つぎにパーサ32が呼び出さ
れ、所望のゴールおよび入力ストリングの位置がパラメ
ータとして渡される。つぎにパーサ32はスクリーナ34か
らのトークンを要求する。これに応じてスクリーナ34は
スキヤナ36からのトークンを要求する。スキヤナ36は入
力ストリングをスキヤニングして字句オブジエクトの各
々を特定する。この特定は、一組の低レベルI/O機能38
から個々のキヤラクタを要求して行なわれる。これは一
般にオペレーテイング・システムの一部として供給され
る。
I/O機能38はつぎに単一の継続キヤラクタを入力ストリ
ングからスキヤナ36に返す。スキヤナ36は所定の字句オ
ブジエクト用に許容されている一組のキヤラクタを基準
に入力キヤラクタをチエツクし、受け取つたキヤラクタ
を、単一の字句オブジエクトを表わすトークン中に結合
する。そのトークンに対するテキスト・ストリングは保
持され、後に使用の際に当該トークンとともに引き渡さ
れる。結合処理の間に、スキヤナ36はいくつかの入力キ
ヤラクタの変換たとえばタブ・キヤリツジ・リターンお
よびブランクは付行送りの置換、複数の継続するブラン
クの削除、すべてのアルフアベツト・キヤラクタの大文
字化等を行うことができる。このような文字置換処理は
予め定められた字句オブジエクト・データ構造で定義さ
れる方がよい。つぎに36はトークンおよびそのテキスト
・ストリングをスクリーナ34に渡す。スクリーナ34は予
め定められた予約語の辞書中でトークンを検索する。つ
ぎにスクリーナ34は対応するトークンをパーサ32に渡
し、パーサ32はそのトークンをパーシング動作に用い
る。パーシングが不完全であれば、パーサ32はスクリー
ナ34からつぎのトークンを要求し、処理が繰り返され
る。
パースが終了すると、パーサはその結果を入力言語トラ
ンスレータ20に戻す。パース終了時、入力言語トランス
レータは変換済み入力言語フアイル24のコード生成の実
行に必要なすべての情報を保有している。
つぎに第3図を参照してスキヤナ36の動作を説明する。
スキヤナ36はまず入力テキスト・ストリングをトークン
化する。これはテキスト・ストリングを字句規則のリス
トと比較することによつて行なわれる。字句規則の各々
は(1)すべての有効な初期キヤラクタの組、(2)テ
キスト・ストリングの本体用の有効なすべてのキヤラク
タの組および(3)すべての有効な終端文字の組を定義
する。この情報は単一のデータ構造に簡易にストアする
ことができる。第3図の41〜46のボツクスは各々1つの
字句規則を表わす。これらの規則は字句文脈を定義し、
リストを構成するように結合される。この場合規則41〜
43は1つの組の最初の3つの規則であり、規則44〜46は
2番目の組の最初の3つの規則である。一組の規則のみ
が一時に能動とされる。
スキヤナ36がテキスト・ストリングのスキヤニングを開
始するとき、スキヤナ36はストリングの最初のキヤラク
タを第1の規則41として有効な初期キヤラクタの組と比
較する。そのキヤラクタがその組の中になければ、次の
規則42として有効な初期キヤラクタの組に上述最初のキ
ヤラクタを比較させる。この処理は、一致が判別される
か、規則のリストの終りに到る(このことは入力ストリ
ングにエラーがあることを示す)まで続けられる。
テキスト・ストリングの最初のキヤラクタと所定の字句
規則の初期の最初の組との間に一致があると、その規則
が選択されてテキスト・ストリングの残りがスキヤンさ
れて、残りのストリングの全キヤラクタが、選択された
規則により定義される字句オブジエクトの本体として有
効なキヤラクタかどうかの判別が行なわれる。全テキス
ト・ストリングが読み出され、字句規則に正しくは一致
すると、全テキスト・ストリングはトークンに変換され
る。この処理にはトークンに字句規則番号を割り当てる
処理も含まれる。
スキヤナ34はまたテキスト・ストリングが予約語かどう
かの判別も行う。この判別は辞書引きと関連して行われ
る。テキスト・ストリングに対する一致が、辞書中の予
約語の個別のリスト中に見出されると、字句オブジエク
トに対するトークンID番号が字句規則ID番号から辞書ト
ークンID番号に切り換えられる。
第3図は字句規則の並行結合リストを示す。各リストは
異なる字句文脈を表わす。このリストは、単一のソース
・フアイル内の2以上の異なる言語の入力ストリングを
スキヤンする必要があるシステムに有益である。ボツク
ス48は規則48で始まる。結合リストへのポインタであ
る。ただし、破線で示すように、規則44で始まる結合リ
ストをポインタするように変更できる。ポインタ48の値
を変更すると、入力テキスト・ストリングに種々の組の
字句規則を適用することができる。ポインタ48の値はパ
ーサ32を呼び出す前に、入力言語トランスレータ20によ
つて決定される。
つぎに第4図および第5図を参照してパーサ32の動作に
ついて説明する。第4図はグラフを構成するように一体
に結合された一連のオブジエクト51〜59を示している。
オブジエクトの各々は次のオブジエクトへのポインタ
(NEXT)と代替オブジエクトへのポインタ(ALT)とを
含んでいる。オブジエクトの各々またはオブジエクトの
タイプおよびその値を示す情報を含んでいる。好ましい
例では、4つのノード・タイプがある。まず意味機能で
ある。この場合値は、ユーザが供給したり、マシーンが
生成したりする実行すべき意味機能を表わす。つぎは予
約語である。この場合値は予約語のリストへのインデツ
クスである。つぎは字句オブジエクト・タイプである。
この場合値は字句トークンのID番号(字句規則ID番号)
である。最後は非終端である。この場合値はポインタ・
アレイへのインデツクスである。ポインタの各々は構文
グラフへのノードをポイントする。
パーサ32はトークンを一時に1つずつ読み出して、構文
グラフへのノードに比較して動作を行う。トークンがグ
ラフの現行ノードが予定するものと一致すれば、パーサ
は次トークンを要求し、グラフ37の次ノードに移動す
る。パーサ32はNEXTポインタが空になるまで、1対1で
トークンをノードに突き合わせて構文グラフをトラバー
スし続ける。NEXTポイントが空であることは第4図のNI
LLによつて示される。NEXTポインタがNILLのとき、第5
図を参照して説明されるようにゴールまたはサブゴール
に到着する。
第5図はパーサ32の動作を説明する。パーサ32は入力言
語トランスレータ20からゴールを受け取る(ステツプ7
0)。ゴールは入力言語内の識別可能なコード・ブロツ
クである。たとえば、単一のステートメント、宣言セク
シヨン、サブルーチンまたは全体のプログラムである。
入力言語用に定義されている実現可能なゴールは構文グ
ラフの入口ポイントに対応する。入口ポイントを構文グ
ラフ内のノードへのポインタからなるアレイに構成して
もよい。このアレイ中の各エントリ(入口)はそれぞれ
ゴールに対応する。後述するように、所定のゴールをパ
ースするには、付加的なサブゴールを生成して満たすよ
うにしなくてはならないことがある。たとえばプログラ
ム全体は宣言、サブルーチンおよびステートメントを含
むであろうし、サブルーチンはさらに宣言、サブルーチ
ンおよびステートメントを含むことがある。後述のよう
に、構文グラフはパーサーによつて再帰的にトラバース
される。
ゴールに到達すると、パーサは構文グラフの対応するノ
ードを第1ノードとして選択し(ステツプ72)、最初の
トークンを取り出す(ステツプ74)。このトークンおよ
びパーサにより取り出される他のトークンは第2図を参
照して説明したように要求され、受け取られる。
パーサが採用する動作は現行ノードのタイプによつて決
まり、パーサの制御の流れの分岐はこのノードのタイプ
によつて決まる(ステツプ76)。ノードが終端であれ
ば、値フイールドは満足させられるべき新しいサブコー
ルを表わす。したがつて現行ノードの識別子がスタツク
に挿入される(ステツプ77)、パーサは表示されたノー
ドにジヤンプし(ステツプ78)、これがサブコールに対
応する。この処理ではトークンは使用されない。トーク
ンはE移動およびプツシユ・ダウンのオートメーシヨン
に対応する。ノード・タイプが字句オブジエクト・タイ
プまたは予約語であれば、値フイールドはパースのその
時点において予定される字句オブジエクトのID番号を示
す。現行トークンのID番号が現行ノードの値に比較され
る(ステツプ79)。トークンID番号および予定された字
句オブジエクト番号が一致しなければ、ALTポインタの
値がチエツクされる(ステツプ80)。このポインタがNI
Lであれば、入力言語により定義された有効な代替的な
パースがなく、エラー状態が通知される(ステツプ8
2)。このエラー状態ではパースが中止されるであろう
し、またエラーの位置が示されるであろう。またより複
雑なエラー回復ルーチンを採用してもよい。そうでなけ
れば、ALTポインタを辿つて適切なノードに到り(ステ
ツプ84)、制御をステツプ76に戻す。この処理でもトー
クンを使用することはない。
ステツプ79においてトークンID番号が当該ノードに予定
されるID番号と一致し、イエスの分岐がとらえると、入
力ストリングにまだトークンが残つているかどうか判定
される(ステツプ86)。トークンが利用可能であり、す
なわちパースが終了していないのであれば、次トークン
を取り出す(ステツプ88)。NEXTポインタの値がチエツ
クされNILかどうかが判別される(ステツプ90)。NILで
なければパーサは次ノードに移行し(ステツプ92)、制
御がステツプ76に戻る。この時点で、ステツプ88で得ら
れたトークンがステツプ92で到されたノードに比較され
ることになる。
ステツプ90でNEXTポインタがNILであると、スタツクが
空かどうかの判別を行う。空であれば、パーサはステツ
プで受け取つた元のゴールをハースしおえたことにな
り、パースが終了する。(ステツプ94)。スタツクが空
でなければ、パーサがサブゴールをパースしおえたこと
になり、そのサブゴールを呼び出した時点に制御を戻さ
なければならない。そのために、スタツクからトツプ・
ノードを取り出し(ステツプ95)、当該ノードに移行す
る(ステツプ92)。
パースがステツプ94で終了すると、入力トークン・スト
リングはまだ空ではない。これは、パーサがステツプ70
で受け取つた元のゴールを完全にパースしたけれど、入
力がまた残つていることを示す。パーサに供給された入
力ストリングが、ステツプ70で受け取つたゴールに正確
にパースされるとすると、このような事態はエラーがあ
つたことを示すことになる。他のシステム・デザインで
はこの状態がエラーを示すのでなく、そのかわりに元の
ゴールのパースを終了するのにどのくらい多くの入力ス
トリングが読み込まれたかを示す入力ストリングへのポ
インタをパーサが返すようにしてもよい。この情報を用
いて入力言語トランスレータ20がつぎに取るべき動作を
決定することができる。
ステツプ86のテストにおいて、入力トークンがないこと
が示されると、入力ストリングが使用しつくされたこと
になる。この時点では、パースを終了するためにこれ以
上の入力トークンを読みだす必要はないであろう。ただ
しパーサは一連のサブコールに到る複数のレベルの深さ
を有しており、一連のE移動においてパース・スタツク
が空になり得るかどうかを決定する必要がある。
ステツプ96において、現行ノードのNEXTポインタをチエ
ツクしてNILがどうかを調べる。NILでなければエラー状
態が起こる(ステツプ98)。これは、入力ストリングは
消費しつくされたけれども、パーサはそのパースの終了
のために他の入力をさらに必要とすることを意味する。
エラー処理はステツプ98において行われる。
ステツプ96のテストがNEXTポインタがNILであることを
示すと、パース・スタツクをチエツクしてスタツクが空
かどうかを調べる(ステツプ100)。空であれば、入力
ストリングが使用されつくされたのと同時にスタツクが
空にされたのであり、正しいパースが完了されたことに
なる(ステツプ102)。この状態は入力言語トランスレ
ータに通知される。
ステツプ100においてステツプがまた空でないことが示
されると、トツプ・ノードがスタツクから取り出され
(ステツプ104)、そのNEXTポインタをチエツクしてNIL
かどうかを調べる(ステツプ96)。ステツプ96、100お
よび104のループはスタツクが空になるか、NEXTポイン
タとしてNILを持たないノードが取り出されるまで続け
られる。
ステツプ76で検出されたノード・タイプが意味機能であ
れば、その機能を呼び出す(ステツプ110)。意味機能
はユーザーにより供給されたり、パーサに対する補助的
な機能としてメタ言語トランスレータによつて生成さ
れ、パーサ32に渡される入力言語ストリングの意味解析
を実行する。これには、シンボル・テーブル操作、タイ
プを変数に関連付ける操作等の機能が含まれる。コード
生成はステツプ110によつて呼び出される機能によつて
実行される。パース間の意味機能を実行できるから、パ
ース終了後に意味解析を実行するパース・トリーをパー
サが生成する必要がない。ユーザが記述した意味機能に
おいて必要であればパース・トリーを構築でき、コード
を直接に生成してもよい。
意味機能はパースを継続してもよいかどうかを示す終了
コードを返すことができる。たとえば、入力言語の構文
は特定の時点で変数を要求してもよい。しかし入力スト
リングは、現行トークンが不適切にタイプの混在した表
現を生成するのであれば、無効とされるべきである。同
様な状況での変数タイプを意味機能によつてテストさ
れ、この意味機能はトークンが実際に有効かどうかを示
す値を返すことができる。この返却された値をステツプ
112においてチエツクし、もし終了コードが成功であれ
ば制御をステツプ86に戻す。他方終了コードが成功でな
ければエラーを返す(ステツプ114)。
F.発明の効果 第4図の構文グラフのノードの中に含まれるデータが入
力言語の構文を定義する場合には、第5図のパーサが再
帰的にそのグラフをトラバースして入力ストリングをパ
ースすることは明らかである。パーサ自体は入力言語に
特有の情報を何ら有さず、そのかわりパースの標準的な
ステツプを抽出する。具体的な入力言語に特有の情報
は、予め定められ、かつパーサが利用できる標準的なデ
ータ構造内にすべて含まれている。なお、第5図のパー
サはLL(0)パーサを実現していることは当業者に明ら
かであろう。
【図面の簡単な説明】
第1図はこの発明の一実施例のシステムを示すブロツク
図、第2図は上述実施例の字句スキヤンおよびパース・
ルーチンを説明するフローチヤート、第3図は上述実施
例の字句スキヤナが用いるデータ構造を示す図、第4図
は上述実施例のパーサが用いる構文グラフを示す図、第
5図は上述パーサの動作を説明するフローチャートであ
る。 10……メタ言語ソース・フアイル、12……メタ言語トラ
ンスレータ、14……目的言語オブジエクト、16……ユー
ザ・ソース・フアイル、18……目的言語トランスレー
タ、20……入力言語トランスレータ、22……入力言語ソ
ース・フアイル、24……変換済み入力言語フアイル、26
……実行時ライブラリ。

Claims (2)

    【特許請求の範囲】
  1. 【請求項1】コンピュータ・プログラムを含む入力言語
    ソースファイルと、 それぞれがあらかじめ定められたノード・タイプで識別
    される複数のノードを持つ構文グラフを規定するデータ
    構造を保持する記憶手段と、 上記入力言語ソース・ファイルと結合され、該ファイル
    を読み込んで入力ストリングを生成するとともに、上記
    構文グラフにおけるポインタを生成する変換手段と、 上記ポインタに応答して、上記構文グラフのノードをト
    ラバースし、該ノードのタイプに応じて入力ストリング
    を構文解析する手段と、 を具備するコンピュータ・プログラム変換装置。
  2. 【請求項2】入力言語ソース・ファイルに含まれるコン
    ピュータ・プログラムを変換する方法であって、 それぞれがあらかじめ定められたノード・タイプで識別
    される複数のノードを持つ構文グラフを規定するデータ
    構造を供給するステップであって、該ノード・タイプ
    が、(a)軸規則識別子を指定する値を含む字句オブジ
    ェクト・タイプと、(b)該構文グラフの他のノードへ
    の索引値を含む非終端タイプと、(c)意味解析を実行
    する手続きを識別する値を含む意味機能タイプと、
    (d)予約語リストへの索引値を含む予約語タイプとで
    少なくとも構成されるステップと、 上記入力言語ソース・ファイルを読み込んで入力ストリ
    ングを生成するとともに、上記構文グラフにおけるポイ
    ンタを生成するステップと、 上記ポインタに応答して、該ポインタで示される上記構
    文グラフのノードをトラバースし、該ノードのタイプに
    応じて、該ノードの上記値で示される動作を実行するス
    テップと、 を具備するコンピュータ・プログラム変換方法。
JP30676989A 1988-11-29 1989-11-28 コンピユータ・プログラム変換装置および方法 Expired - Lifetime JPH0685150B2 (ja)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US27738888A 1988-11-29 1988-11-29
US277388 1988-11-29

Publications (2)

Publication Number Publication Date
JPH02183339A JPH02183339A (ja) 1990-07-17
JPH0685150B2 true JPH0685150B2 (ja) 1994-10-26

Family

ID=23060648

Family Applications (1)

Application Number Title Priority Date Filing Date
JP30676989A Expired - Lifetime JPH0685150B2 (ja) 1988-11-29 1989-11-28 コンピユータ・プログラム変換装置および方法

Country Status (3)

Country Link
EP (1) EP0371944A3 (ja)
JP (1) JPH0685150B2 (ja)
BR (1) BR8906005A (ja)

Families Citing this family (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5210837A (en) * 1990-06-15 1993-05-11 Digital Equipment Corporation Methods and apparatus for transforming machine language program control into high-level language constructs by manipulating graphical program representations
US5367685A (en) * 1992-12-22 1994-11-22 Firstperson, Inc. Method and apparatus for resolving data references in generated code
AU1323395A (en) * 1993-12-30 1995-07-17 Raymond Obin Method for compiling a procedural program to an object class definition
DE19617719C2 (de) * 1996-04-30 2000-01-05 Fraunhofer Ges Forschung Verfahren zur Programmübersetzung eines in der Programmiersprache C++ geschriebenen Programms
AU760867B2 (en) * 1998-11-26 2003-05-22 Armen Grigorian Method of translating COBOL programming language variables to visual basic programming language variables
DE102007003862A1 (de) 2007-01-25 2009-02-05 Anders, Klaus E., 26127 Oldenburg Verfahren zur interkulturellen mehrsprachigen Kommunikation unter Einbeziehung einer Plansprache
US11036907B2 (en) 2019-03-01 2021-06-15 Synopsys, Inc. Automatic testbench generator for test-pattern validation

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
インターフェース1984No.867月号P.213〜250

Also Published As

Publication number Publication date
EP0371944A2 (en) 1990-06-06
JPH02183339A (ja) 1990-07-17
EP0371944A3 (en) 1991-11-21
BR8906005A (pt) 1990-06-19

Similar Documents

Publication Publication Date Title
US5276880A (en) Method for parsing and representing multi-versioned computer programs, for simultaneous and synchronous processing of the plural parses
EP0643851B1 (en) Debugger program which includes correlation of computer program source code with optimized objet code
US5850550A (en) No preprocessor and a source level debugger for embedded SQL in a 3GL
Heering et al. Incremental generation of parsers
JPS61103247A (ja) 翻訳プログラム作成システム
US5991539A (en) Use of re-entrant subparsing to facilitate processing of complicated input data
JPH07141201A (ja) 2パスコンパイラのための改良された方法
JPH0685150B2 (ja) コンピユータ・プログラム変換装置および方法
Bahlke et al. The psg-programming system generator
Mössenböck Coco/R: A generator for fast compiler front-ends
Koskimies et al. The design of a language processor generator
JPH02183338A (ja) プログラム言語トランスレータ生成装置および方法
Hastings Design and implementation of a speech recognition database query system
KR101314247B1 (ko) 위성 관제 시스템에서 위성 관제 운용 자동화를 위한 언어변환장치 및 방법
Bik A prototype restructuring compiler
Auguston RIGAL—a programming language for compiler writing
Stephenson On the structure and control of commands
Yonke A knowledgeable, language-independent system for program construction and modification
Vasenin et al. Intermediate representation of programs with type specification based on pattern matching
Petrone et al. DUAL: An interactive tool for developing documented programs by step-wise refinements.
Greenwood MACRO: A programming language
Moessenboeck A convenient way to incorporate semantic actions in two‐pass compiling schemes
Lecarme Usability and portability of a compiler writing system
Abrahams The CIMS PL/I compiler
JP3044463B2 (ja) データ変換方法