JPS61282935A - プログラムにおける属性割当て検査方法及び装置 - Google Patents

プログラムにおける属性割当て検査方法及び装置

Info

Publication number
JPS61282935A
JPS61282935A JP61103255A JP10325586A JPS61282935A JP S61282935 A JPS61282935 A JP S61282935A JP 61103255 A JP61103255 A JP 61103255A JP 10325586 A JP10325586 A JP 10325586A JP S61282935 A JPS61282935 A JP S61282935A
Authority
JP
Japan
Prior art keywords
attribute
attributes
grammar
program
checking
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Pending
Application number
JP61103255A
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.)
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 JPS61282935A publication Critical patent/JPS61282935A/ja
Pending legal-status Critical Current

Links

Classifications

    • 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/427Parsing
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/43Checking; Contextual analysis
    • G06F8/436Semantic checking

Landscapes

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

Abstract

(57)【要約】本公報は電子出願前の出願データであるた
め要約のデータは記録されません。

Description

【発明の詳細な説明】 以下の順序で本発明を説明する。
A、産業上の利用分野 B、従来技術 C0発明が解決しようとする問題点 り0問題点を解決するための手段 E、実施例 el、本発明の概要 e2.文脈自由文法(第2〜11図) e3.グループ2文法(第12〜21図)e4.グルー
プ3文法(第22〜31図)e5.グループ4文法(第
32〜41図)e6.グループ5文法 e7.属性プロセッサの動作(第43図)F0発明の効
果 A、産業上の利用分野 この発明は、コンパイラに使用される属性解析技術に関
し、特にパーサ(コマンド解析機能)に基づく、コンパ
イラ用の属性解析技術に関するものである。尚、この発
明はPL/Iプログラミングにより記述されるが、これ
は−例にすぎず、本発明が他のプログラミング言語にも
適用できることが明らかであろう。
B、従来技術 汎用コンピュータ上で走行するプログラムを作成する際
、プログラムは先ずソース・コードで記述され、次に、
そのソース・コードをオブジェクト・コードまたは機械
語に変換するコンパイラを通過させられる。最終的にオ
ブジェクト・コード出力を発生する前にコンパイラによ
って実行されるいくつかのタスクがあるが、これらのタ
スクのうちの1つは、コンパイラの前端部の″属性プロ
セッサ”により実行されるタスクである。さらに詳しく
述べると、PL/Iソース・プログラムを書く際、プロ
グラムで使用されるデータ項目にはさまざまな″属性”
が割り当てられる。すなわち、変数かまたは定数かの属
性、及びPARAM[ETER,C0NTR0LLED
または5TATIGの属性を割りあてることができる。
これらの属性を割りあてる最も一般的な方法は宣言ステ
ートメントによることであるが5例えばデータ記述ステ
ートメント、LIKEステートメントまたはおそらくデ
ータ項目を、ある属性を要求する文脈中で使用すること
などの他の技術によっても属性を割のあてることができ
る。第1図に概略的に示すように、PL/Iソース・プ
ログラムのコンパイルの間にPL/Iコンパイラの属性
プロセッサによって実行されるタスクは次のようなもの
がある: (a)定義的なPL/I宣言ステートメント中の宣言さ
れた各データ項目に対応して記述された属性のシンタッ
クス的な正しさのチェック。
(b) fffli約内部表記に有効な属性の初期セッ
トを表示すること。
(c)最終属性セットの無矛盾性と完全性をチェックす
る間に、不在の属性の適当なデフォールト値を与えるこ
とにより各データ項目の初期属性セットを完成すること
属性プロセッサのタスクは、米国規格協会(ANSI)
のPL/I規格の特に第4章に定義された統語的文法(
syntax grammar)に基づき実行されなく
てはならない。属性無矛盾のテストはその83〜85ペ
ージの84.3.6.1に示されている。属性無矛盾検
査の目的は、データ項目が矛盾する属性、例えば実数と
複素数を割り付けられていないことを保証することにあ
る。デフォールト値をもつ属性セットの完成はANSI
  PL/■規格の86〜88ペ一ジg4.3.6.3
〜54.3.6.5に記述されている。最終属性セット
が完全であり無矛盾であることを判断するためのチェッ
クは、ANSI  PL/I規格の93ページの84.
3.7.1に記述されている。PL/エコンパイラの前
端の属性プロセッサにより実行されるタスクはANSI
  PL/I規格の上記で引用した項に示されているス
テップのみに限定されないが、これらの項は、属性プロ
セッサ中で守られなくてはならない文法的規則を例示す
るものである。
従来のPL/Iコンパイラにおいては、デフオール1−
値が追加される一方で、さまざまな特定目的用の技術に
より属性解析が実行され、プログラムを小さい部分に分
解して内側から外側ヘチェツクする等の特殊化された処
理を用いることによって最終的な属性セットのチェック
が行なわれる。
このためには、典型的にはプログラムの手操作により作
成される大量のコードの記述が必要であるこのことは時
間がかかり退屈であるのみならず、ラグが通常必要とさ
れる。きわめて長いプログラムのリスト中のエラーを見
出し訂正することは時間のかかる作業である。
さらに、動作するコンパイラが得られた後も、新規なま
たは変更された言語の特性に適合させるために時々はコ
ンパイラを更新することが必要である。もとのコンパイ
ラ・プログラムの生成と同様に、複雑な文法規則を実行
する長大なオブジェクト・コード・リストを更新しデバ
ッグすることは、プログラムの相当な作業時間を要する
上述の理由から、従来の技術によってコンパイラ・プロ
グラムの属性プロセッサ部分を生成することは、エラー
を生じやすく、新規なまたは変更された言語特性に適合
させるのが不十分且つ困難である。
C0発明が解決しようとする問題点 この発明の目的は、属性プロセッサを実行するための簡
易化された技術を提供することにある。
D9問題点を解決するための手段 手短かに述べると1本発明の上述及びその他の目的は、
属性プロセッサを、テーブル駆動属性パーサ(コマンド
解析機能)として実行させることにより実現される。本
発明は、属性プロセッサ中にテーブル駆動パーサを有す
るのみならず、シンタックス・テーブルと、属性パーサ
を作成するオペランド解析ドライバとを形成するための
技術を有している0本発明のパーサに基づく属性解析に
おいては、PL/I宣言−の属性の無矛盾がチェックさ
れ、十分且つ信頼の置けるLALR(1)コマンド解析
技術に基づき、欠落属性のデフォールト値が加えられる
。ANS I規格に記述された属性解析文法は、LAL
R(1)文法プロセッサに入力として与えられる文脈自
由文法の用語で表現される。よく知られた方法により、
文法プロセッサは、シンタックス・テーブル及びオペラ
ンド解析ドライバとからなる有限状態マシン(FSM)
を生成する。これらはコンパイラの前端部に含まれ、属
性セットの無矛盾性と完全性をチェックすると同時に必
要なデフォールト属性を付与するために使用することが
できる。
本発明のパーサに基づく属性解析は、系統的であり、有
効であり、特殊な場合を扱わなくともよいという点で従
来の方法よりも相当な改善となっている。さらにまた、
パーサ生成手段は、シンタックス・テーブルとオペラン
ド解析ドライバとを生成するために使用されるので1本
発明の技術は、プログラマに手操作による多量のオブジ
ェクト・コードの作成を要求する従来の技術よりもはる
かにエラーを被りにくいという長所がある。また、その
属性プロセッサは、追加的な統語規則または意味論的チ
ェックに対応して容易に変更可能である。
E、実施例 el、本発明は、ANS I規格で定義されているよう
なPL/I宣言の属性は、文脈自由文法として表現され
うる統語的構造をもつという発明者の認識に基づいてい
る。さらに、この文法のシンタックスは、属性の無矛盾
性を検証するために必要な意味論的チェックをも含むよ
うに変更することができ、また、そのシンタックスは任
意の欠落した属性が、ユーザーが定義した、またはシス
テムのデフォールトのセットから自動的に供給されるよ
うにも育成することができる。そのような属性チェック
を行う文法によれば、テーブル駆動属性パーサ、すなわ
ち、シンタックス・テーブルと、属性セットの無矛盾性
と完全性をチェックすると同時に必要なデフォールト属
性を追加し得るオペランド解析ドライバとからなる有限
状態マシン(FSM)を作成するために使用することが
できる。
テーブル駆動属性パーサが生成された後は、適正な順序
で各初期属性セットからの属性を属性パーサに供給する
ことができるような簡単な属性スキャナを与えることが
必要なすべてである。この適正な順序とは、属性が属性
文法中で定義され、完全な属性解析を行うために属性パ
ーサを使用することができるような順序である。もし矛
盾が存在するなら、パーサはそのストリームを拒絶する
ことになる。そして、各システム・デフォールト属性の
追加が、そのパーサによって検出された特定の縮約と関
連づけられる。
本発明の属性パーサ作成の第1ステツプは、パーサ生成
手段によって使用することのできる属性チェック文法を
得ることである。パーサ生成手段は1例えば米国カリフ
ォルニア州すンタ・クルーズのメタウェア(metaw
are)社からTranslatorWriting 
Systemの名称で入手可能なLALR(1)文法プ
ロセッサなどの、従来知られているタイプの文法プロセ
ッサである。よ(知られていることだが、この文法プロ
セッサは、適当な文脈自由文法の定義を与えたときに、
その文法中で作成されたステートメントをオペランド解
析することができるテーブル駆動パーサを生成する。
PL/Iコンパイラの場合、無矛盾性のチェックと属性
デフォールトの付与、及び例えば″標準”PL/Iへの
所望の拡散を含む異なる言語レベルのために使用な変更
を施してなる。ANSI  PL/I規格@4.3.6
.1中で定義された文法に基づく文脈自由文法を得るこ
とが必要である。
文脈自由文法を得るにあたっては、4ステツプの手法が
行なわれる。前述したように、ANS I標準PL/I
は、データ属性のセットが無矛盾である時期を判断する
ためのシンタックスを与える。
無矛盾性チェックは、″テスト属性無矛盾性″と題する
規格のfi4.3.6.1のステップ4.5及び6に関
与する。このステップ4及び5は意味論的チェックであ
り、ステップ6はシンタックスに関するものである。こ
のように、所与の属性セットの無矛盾性を単にテストす
る目的には、ANSIシンタックスは不完全である。し
かし、このシンタックスを変更することによって、AN
SI意味論的無矛盾性をそのシンタックス中に含ませる
ことができ、そのシンタックスをLAR(1)とするこ
とができる。
ANSI属性シンタックスは先ずグループ1文法で表現
され1次にグループ2文法で″再び″順序づけられる。
このグループ2シンタツクスは、ANS I規格の@4
.3.6.1のステップ中の意味論的限定を統語的に組
み込んでなる。
無矛盾性チェックのための完全なシンタックスは、グル
ープ2シンタツクスからの合法酌交のすべての部分集合
を許容するものでなくてはならない。このことは、各キ
ーワード上を選択的にスキップするとともに多重的空白
経路を禁止するグループ3シンタツクスで実行される。
次に、規準的順序でエンコードされたデータ属性を生成
する″辞書的スキャナ″が使用されるならば、無矛盾性
をチェックするために標準LALR(1)パーサを使用
することができる。ユーザー供給のデフォールトが存在
する場合、この無矛盾性チェック手段は、ユーザー・デ
フォールトを処理するための標準ANS Iアルゴリズ
ムで使用することができる。
このシンタックス中で生成物を適正に構成することによ
り、システム・デフォールト属性の必要な追加に厳密に
対応するように、空白規則または欠落成分に関する規則
の低減をはかることができる。このための統語的ダイア
グラムがグループ4文法中に示され、このダイアグラム
はシステム・デフォールト・ステートメン1〜への参照
を含む。
こうして、属性のセットはその無矛盾性をチェックされ
、システム・デフォールト属性を本質的に1ステツプで
加えられる。最後の“グループ5”バージョンは、バッ
カス・ナウア形式(BackusNaur Forn+
 : B N F )を用いてグループ3及び4を結合
することにより得られる。これは、パーサ生成手段で使
用される最後のシンタックスである。
このシンタックスは155の規則をもち、UNIXシス
テム上のYACCパーサ生成手段によって処理されたと
き、168の状態と、240エントリがゼロでないよう
な306のテーブル・エントリを作成する。
ユーザーが供給したデフォールトの後システムデフォー
ルトが存在する場合、すなわち” N ONE J+が
使用されていない場合、上述の無矛盾チェック手段を用
いてユーザー・デフォールト属性を追加することができ
、その後、得られた属性上で最終チェックを行うために
、システム・デフォールトを追加するための本発明の処
理を使用することができる。このことは、それらがユー
ザー・デフォールトであるかのようにシステム・デフォ
ールト処理の不十分さを回避する。
標準的な無矛盾チェックに加えて、ANSIPL/I規
格の84.3.7.1のパチェック属性完全性及び削除
属性中にいくつかの゛′最終チェック”が存在する。こ
れらは、すべてのデフォールト属性が追加された後で実
行される。これらの最終チェックのうちのいくつかは最
終シンタックス中に含まれているが、それ以外の最終チ
ェックは統語的にではなく意味論動作として一層容易に
追加することができる。
e2.文脈自由文法 さて、LALR(1)パーサ発生手段で使用される文脈
自由文法を完全に導出することについて詳細に説明する
第1のステップでは、PL/I規格94,3゜6.1に
記述された、PO3ITIONを有する“P”、くスト
リング〉、PRECISIONとAREAを有する5I
ZE、及びPRECISIONを有する5CALEとい
う値の属性を付与されてなるもとのANS。1文法から
、第2〜11図に図示された文脈自由″グループ1″文
法が作成される。さらに、もとのANS I文法の拡張
としてGRAPRIC属性が付与されている。この文法
は、所与の属性セットが無矛盾であることをチェックす
るためにのみ使用され得たものである。
また、グループ1文法はLALR(1)タイプのパーサ
生成手段の入力には不適合である。
ANSI  PL/I規格の@4.3.6.1に記述さ
れた、属性無矛盾チェックは、各属性が、く無矛盾記述
〉、く無矛盾リテラル定数〉またはく無矛盾宣言〉のど
れかに根ノードをもつシンタックス木のある経路からの
属性の部分集合に含まれていることを検証することによ
って無矛盾性のチェックを行う。第2図及び第5〜11
図はく無矛盾宣言〉根ノードのシンタックス木をあられ
し第3及び7図は、く無矛盾リテラル定数〉根ノードの
シンタックス木をあられし、第4図及び第6〜9図は、
〈無矛盾記述〉根ノードのシンタックス木をあられす。
e3.グループ2文法 文法導出の第2段階では、″グループ2″文法が作成さ
れる。このグループ2文法は、第12〜21図に示され
ており、それらは順次第2〜11図に対応する。グルー
プ2文法は、ANS Iに記述された属性使用上の意味
論的制約のうちのいくかを組み込むようにグループ1文
法を再配列することにより得られる@ANSI  PL
/I規格の14.3.6.1を参照すれば見てとれるこ
とではあるが、くデータ記述〉に5TRUCTURE属
性が割りあてられそれと同時に〈データ記述〉を〈境界
合せ〉データとして定義することが可能である。一方、
く境界合せ〉データにはALIGNEDまたはUNAL
IGNED属性を割りあてることができる。それゆえ、
グループ1属性を図式化するときには、5TRUCTU
REと〈境界合せ〉属性が同一の経路にあられれること
になろう。しかし、PL/I規格のii4.3.6.1
のステップ5は、5TRUCTURE属性とく境界合せ
〉属性をともに記述することができないという意味論的
制約を課すのである。この意味論的制約は、5TRUC
TURE属性を含む経路から異なる経路上にく境界合せ
〉属性を移動させることにより、すなわち第6図のく境
界合せ〉属性を第16図の左側の枝に移動させることに
よりグループ2文法に組み入れられる。
次に、DIMENTIONが、〈変数〉中でENTRY
、FILE、FORMAT及びLABELの前に生じ、
(第5,6及び9図参照)。一方〈定数〉中でそれらの
同一の属性の後に生じるという点でDIMENTION
が矛盾的に配列されていることに注意されたい、こうし
て、DIMENTIONがくデータ記述〉(第6図)及
び〈定数〉(第10図)からくくり出されて、その代わ
りに第12図に加えることができる。また、MEMBE
Rもく変数〉属性中でくデータ記述〉より前に生じ、一
方、〈無矛盾記述〉(第4図)中ではくデータ記述〉の
後に生じているという点で矛盾的に配列されている。こ
うして第14図に示すように、MEMBERは第4図に
おいて移動されうる。
以下で説明するこの後の導出ステップで選択的な“スキ
ップ”が追加されるときは、さらに先読み(looka
head)の問題が点在する。先ずINITIALはく
変数〉にのみ付属するので、C0N5TANTが欠落し
ている場合く定数−〉から〈変数〉を分離するためにI
NITIALは第6図において前方へ移動されなくては
ならない。このことは第16図に示されている。また、
変数としてのENTRYの場合、同様の状況がRETU
RNと0PTIONSについて存在し、従ってこれらは
第9図のくアクセス・タイプ〉ダイアグラムでENTR
Yの前に移動されるべきである。このことは第19図に
示されている。さらにまた、くファイルセット〉(第1
1図)中のキーワードが定数FILEを識別し、これに
よりそれらのキーワードは第10図のく定数〉ダイヤグ
ラムのFILEの前に来るべきである。このことは第2
0図に示されている・ 最後に、以下で説明する、EXTERNAL、GENE
TICまたはMEMBERに関与する意味的制約の処理
を支援するために、INTERNALまたはEXTER
NAL記述が移動される。
グループ2文法は、所与の属性セットが無矛盾であり、
すべての組み込まれた意味論的制約を満たすことをチェ
ックするために有効であると思われる。
文法導出の次の段階は、グループ2文法をめいめいの属
性とともに使用することのできる属性のすべての部分集
合を許容するように拡張することによって得られるグル
ープ3文法である。より詳しく述べると、グループ2文
法は、グループ2文法の任意の特定″経路″に従うこと
によって生じ得るべきすべての属性のリストをもたらす
けれども、所与の属性セットにおけるすべての属性を記
述される必要がある訳ではない。グループ3文法は、許
容し得る属性の部分集合を受け入れるべく、ある選択的
な属性をバイパスするために必要な“スキップ″を組み
入れる。グループ2文法から省略されたいくつかの付加
的な意味論的限定もまたグループ3文法には組み入れら
れる。
e4.グループ3文法 グループ3文法は第22〜31図に示されており、これ
らはそれぞれ順次に第12〜21図に対応する。第22
〜31図に図示されているシンタックスは、グループ2
文法により許容されたキーワードの任意の部分集合を許
容すること以外は、第12〜21図のグループ2文法と
基本的には同一である。不明瞭さを防止するためには、
何らかの属性分配及びその他の変更が必要である。単一
性のためのいくつかの選択は、後の文法導出ステップで
追加されるべきDEFAULT処理を容易ならしめるた
めに行なわれる。例えば、単独で発生する(すなわちI
NITIAL、ALIGNEDまたはUNALIGNE
Dを伴うことなく) ENTRYまたはFILEはく定
数〉のシンタックスにのみ属しく第20図及び第30図
)、一方単独で発生する(すなわちC0N5TANTを
伴うことなく)FORMATまたはLABEL!!<変
数〉内のくアクセス・タイプ〉(第19図)にのみ属す
る(第15〜19図)。このように、単独で発生するE
NTRY及びFILEはくデータ記述〉(第16〜19
図)内のくアクセス・タイプ〉から除去され、く記述〉
が残される(第26〜29図)、<データ記述〉とく記
述〉のダイアグラムをさらに比較すると、ストリング及
びピクチャーの境界合わせ属性が後述する特殊処理のた
めに分離され、ENTRY及びFILE属性が単独では
発生できないように(さもないとそれらはく定数〉ダイ
アグラムに属することになろう)、それらが特別に処理
される。
さらに、経路は、EXTERNALがGENERICま
たはMEMBERとともには決して発生しないことを定
めるANSI  PL/I規格の94.3.6.1のス
テップ4に基づき変更される。
変更の残りの部分は、明確なスキップを与えることを含
む。さらに詳しく述べると、属性の部分集合を許容する
1つの方法は、各キーワード上に選択的なスキップを与
えることである。しかし、このことは、多重空白経路を
発生することにより、LALR(1)文法プロセッサに
適合しないあいまいさをもたらすことになろう。この問
題を避けるために、第42図に示されているような構成
が使用される。第42図に示されている構成はXとYの
どちらかまたはその両方を許容するが、空白経路は許容
しない。尚、例えば、第31図のくファイル・セット〉
ダイアグラムが空白経路を含まないが、許容可能な経路
はくファイル・セット〉中のキーワードの任意の順序づ
けられた部分集合を含むことに注意されたい。
第22〜31図のグループ3文法は、たとえそのいくつ
かの属性が欠落していても所与の属性セットが無矛盾で
あることをチェックするために使用できるとともに、そ
のセットがすべてのANSNS法論的制限に適合するこ
とをチェックするためにも使用することができる。
文法導出における次のステップは、デフオールト属性の
セットを参照してグループ3の文法シンタックスを増補
し、ANSI  PL/I規格の54.3.7.1にあ
る最終完全性チェックのいくつかを含ませることにより
グループ4文法を導出することである。
e5.グループ4文法 第22〜31図に順次個別に対応する第32〜41図に
おいては、スキップ経路における数が下記のシステム・
デフォールト・テーブルに示されているシステム・デフ
ォールト・ステートメントを参照する。尚、このテーブ
ルにおいて記号″1″′は論理ORをあられし、記号“
〜”はNOTをあられす。
第37図のく算術〉ダイアグラムにおいては、5IZE
のまわりの各2重スキップが所与のデフォールトを使用
することに注意されたい。というのは、もしPRECI
  5IONのみが存在するなら、ANSI  PL/
I規格の84.3.6゜2に記述されている“テスト無
効複写”手続が5IZEまたは5IZE及び5CALE
(7)追加を許容するからである。
デフォールト・テーブル呑号を追加し、第35図中のく
変数〉の左側でスキップ経路を分離することの他に、第
22〜31図のグループ3文法からの唯一の変化は、A
NSI  PL/I規格の54.3.7.1にある1′
最終”チェックにより不当であると判断されたいくかの
場合を除外するためのいくつかの経路の変更である。例
えば、54゜3.7.1のステップ3はEXTERNA
LがAUTOMATIC,BASED、DEFINED
PARAMETERまたはBUILTINに伴って発生
できないことを記述し、@4.3.7.1ノステップ4
はEXTERNALとCONSTANTの組み合わせが
FORMATまたはLABELとともには発生できない
ことを記述する。また、いくつかの不当な単一属性、す
なわち、POS ITI○N、C0N5TANT、EN
VIROMENT、VARYING、N0NVARYI
NG、LOCAL及びOPT’l0NS+J除去される
尚、第33図のく無矛盾リテラル定数〉のシンタックス
においては、く算術〉が〈作成された定数〉に変更され
ていることに注意されたい。このく作成された定数〉は
、変数のデフォールト規則とは異なるデフォールト規則
を有するリテラルを識別する。リテラルのデフォールト
属性を追加することは慣用的な方法で実行されるか、ま
たはリテラルのシンタックスをデフォールトする属性を
、ANSI  PL/I規格の84.4.7の1′定数
作成″から導出することができる。この導出は上述の変
数について記述した方法に類似する方法で実行されるの
で、ここで詳述する必要はないと考える。
次のステップは、グループ4文法をグループ3文法と組
み合わせて、無矛盾性のチェック・デフォールトの付与
、及び最終属性セットが完全であることを検証するため
に使用すべき“グループ5″文法を作成することである
。このグループ5文法は、後述するBNF文法中で示さ
れる。
C6,グループ5文法 グループ5文法は、無矛盾性と完全性をチェックするた
めの基本的な規則に加えて、サブセット(部分集合)規
則とデフォールト規則からなる。
いくつかの状態変数を使用することにより、サブセット
規則とデフオール1〜規則のどちらか、また、は両方を
効率的に非活動化することができる。結局、1つの文法
を次のような複数の目的に使用することができる。
基本:無矛盾性と完全性のチェック。
基本及び部分集合:無矛盾性チェックのみ。
基本及びデフォールト:デフォールト属性付与(一度に
すべて)を伴う無矛盾性及び完全性チェック・ 基本1部分集合及びデフォールト:デフォールト属性付
与を伴う無矛盾性チェック。
PL/I属性シンタックス構造を文脈自由文法で定義し
終えると、その文法記述はよく知られた方法でバッカス
ーナウア形式(BNF)文法に変換され、好適にはLA
LR(1)プロセッサである文法プロセッサに供給され
る。そしてLALR(1)プロセッサは、本発明に基づ
くテーブル駆動パーサを形成するシンタックス・テーブ
ルとパース・ドライバを生成することになる。LALR
(1)プロセッサの動作においては、エンコードされた
属性を、正準的な順序、すなわちシンタックスに適合す
る順序に従うトークン(token )として文法プロ
セッサに供給するために“辞書的スキャナ”が使用され
る。例えば、そのトークン配列は、以下のトークン順序
テーブルで与えることができる。
この順序を用いると、BNF文法は次のように定義する
ことができる。
尚、非接続部はすべて小文字であり、それに関という記
法は、存在する属性(attrilrute)に関連す
る特定の属性のシステム・デフォールト付与を示す、′
サブセット生成規則はコメント区切り、すなわち/串1
0.傘/内にあり、′デフォールト″規則は関連する“
add”動作に伴われている。
コメント中のサブセット生成規則は、無矛盾性のチェッ
クには正当であるが、追加すべきそれ以上のユーザー・
デフォールト属性がない場合は正当ではない。
e−一 の                       α
Φ 一 本一〇・ 上記に定義したようにBNF文法が与えられたとき、L
ALR(1)文法プロセッサの動作は周知であり詳細に
説明する必要はないと考える。
一般的には、正準的な順序でトークンを供給する辞書構
造に関連づけられた辞書的スキャナが存在する。辞書ま
たは記号テーブル・アブストラクション(abstra
ction)  “diet”が制御アブストラクショ
ンまたは繰返し手段(iteraton)を有すること
ができる: すべての属性(attrs) = I TE R(r 
:参照名)が属性を返却する。この構成は次のようにし
て使用される: complete attrs(r) :1nitia
lize 1nternal 5tate ;FORa
:  attr IN dict、all attrs
(r)O 生成されたテーブルから 標準オペランド解析アルゴリズム が走る END ; END  complete  attrs;e、7 
 属性プロセッサの動作 先ず、以下の記述で使用されるいくつかの用語を定義し
た後で1本発明の属性プロセッサの動作を説明する。
任意のPL/Iソース・コード・プログラムは“プログ
ラム木″′の形式で表現することができ、これはそのプ
ログラムを表現するさまざまなノードの非サイクル的(
ループのない)グラフである。
例えば、第43図に概念的に示されているように。
手続及び開始ブロックを表現するノードや、実行可能な
ステートメントや、表現が存在する。
以下では“B L o c k−m”がプログラム木の
ノードを指すものとする。このとき各手続毎及び開始ブ
ロックには1個のBLock−mがPL/Iソース・プ
ログラムで定義されている(プログラム全体を包含する
主外部手続を含む)。各Bloak  mノードはまた
宣言テーブルと呼ばれるデータ構造を識別する。宣言テ
ーブルは、対応保る手続または開始ブロックで宣言され
たデータ項目を記述する。
所与のPL/Iソース・プログラム中で定義された各手
続及び開始ブロックには1つの宣言チー! プルが存在する。その各テーブルはDec、!smエン
トリのセットであり、その1つのエントリは。
手続または開始ブロック中の各宣言データ項目には、手
続または開始ブロック中で宣言されたデータ項目の特定
の1つに対応する。各Declrnエントリは、対応す
るデータ項目に割りあてられた属性を識別する。これら
の割りあてられた属性には、例えばPL/Iソース・プ
ログラム中のDECLAREステートメントによって明
示的に割りあてられたものもあり、また例えばデフォー
ルト値などの、間接的に割りあてられた属性もある。
データ項目に対応する属性のセットの表現は、属性レコ
ードと呼ばれる構造の形式にあり、属性レコードの要素
はそのセット中で属性を識別し記述する。例えば、所与
の属性レコードの属性セット要素は、このデータ項目に
対応してどの属性が明示的に定義されているかを示す。
これは簡単な属性、例えばAUTOMATIC,BIN
ARYなど、及び関連する別の独立な宣言を有する複合
属性、例えばBASED、DEFINEDなどを含む。
属性レコードのサブノード(Subnode)  ・セ
ット要素は、属性レコードにおけるどの複合属性が属性
サブノードと呼ばれる追加的な記述子を有しているかを
示し、その属性レコードのサブノード要素は、属性サブ
ノードを有するデータ・ベース・オブジェクトを識別す
る。
他の用語については、以下のテーブル駆動パーサの動作
の記述において、必要に応じて説明する。
属性解析アルゴリズムは、ソース・プログラム木の横断
の間にコンパイラによって実行される。
属性解析は、別の解析機能、例えば名称参照(nama
 reference)の解析が実行されているプログ
ラム木の横断の間に実行することができる。この横断の
間に実行された動作と、各動作で作成された対応データ
は以下のように記述される。
ト、ツブ・ダウン経路の間で、手続をあられす特定のB
lock  mノードを処理している時に、この手続の
形式的なパラメータがDeci  mエントリによって
識別され表現される。これらのエントリは、Block
  mの宣言テーブルに配置される。さらに、各パラメ
ータに対応する属性の初期セットが属性レコードによっ
て表示され、一方複合属性は属性サブノードによって表
示される。
各属性レコードは、対応するDecl  mエントリに
配置される。
コンパイラの、ソース・プログラムを介するボトム・ア
ップ経路では、属性解析アルゴリズムの残りの部分が、
各B−ck−mノードの宣言テーブルに表示されたすべ
てのデータ項目について実行される。これは次のような
動作を含む=LIKE属性をもつデータ項目の場合、こ
れらの属性は拡散され、そうして得られた追加的データ
項目がDecl  mエントリによって表示される。さ
らに、そのような各項目の初期属性セットが属性レコー
ドによって表示され、複合属性も属性サブセットによっ
て表示される。各属性レコードは対応するDeci  
mエントリ中に配置される。こうして、この時点で、宣
言テーブルは、属性パーサによる最終的な属性解析にか
けられるべきすべてのデータ項目を表示する。
次に、最終の宣言テーブルに表示されためいめいのデー
タに対して1次のステップを実行するために属性パーサ
が呼び出される。: (a)初期属性セットをオペランド解析して、そのシン
タックスを検証し、初期意味論的チェックを実行し、 (b)デフォールト値を加えることにより属性セットを
完成し、 (c)最終属性セットの無矛盾性と完全性をチェックす
る。
これらの機能はすべて、LALR(1)パーサ発生手段
によって、PL/I文脈自由属性チェック文法から生成
したシンタックス・テーブル及びパーサ・ドライバを用
いて、テーブル駆動属性パーサによって実行される。コ
ンパイラからのパーサの呼び出しは、コンピュータ・プ
ログラミングの分野の熟練した当業者には説明の要もな
い簡単な方法によって行なわれる。
F0発明の効果 上記の説明から理解されるように5本発明に基づき、属
性文法を、既知の文法プロセッサに適合する文脈自由文
法に変換することにより、コンパイラの前端で属性解析
を実行するために多量のオブジェクト・コードを作成す
るという退屈な作業を回避することができる。標準的な
文法、例えば英語の文法のシンタックス・チェックを行
うためのシンタックス・テーブルとパーサ・ドライバを
生成するためにそのような文法プロセッサを使用する方
法は知られており、その同一の技術はソース・プログラ
ムにおいて属性のシンタックスと完全性をチェックする
ためにも使用することができる。尚、テーブル駆動パー
サの動作は、実質的に慣用的な動作を、今まで認識され
ていなかった応用技術に適用されたものであるから、こ
こでは詳細に説明する必要はないと考える。本発明によ
れば、コンパイラ前端の属性解析部分に対応して多量の
オブジェクト・コードを手作業で作成するという負担の
大きい作業が、属性文法を1文法プロセッサに適合する
文脈自由文法として表現するだけの簡単な作業に置き換
えられる0次に1文法プロセッサは効果的で信頼性の高
い方法でテーブル駆動パーサを生成する。さらに本発明
によれば。
コンパイラを、プログラミング言語における後の変化に
適合させることが比較的容易になり、新しいコンパイラ
を生成するために必要な時間が実質的に減少する。
尚、上記においてはテーブル駆動属性パーサを生成する
ためにLALR(1)文法プロセッサを利用するものと
して説明がなされているが、別の文法プロセッサも使用
可能であることが明らかであろう。
また、本発明はPL/Iコンパイラに用いるものとして
説明されているが、属性文法が、L、ALR(1)また
はその他の適当な文法プロセッサに適合する文脈自由文
法として表現し得るような他のプログラム言語にも適用
可能であることを理解されたい。
【図面の簡単な説明】
第1図は、コンパイラの動作を示す概念的な図、第2〜
11図は、本発明で使用される文脈自由PL/I文法の
導出の間のグループ1文法を示す図。 第12〜21図は、本発明で使用される文脈自由文法の
導出の次の段階におけるグループ2文法を示す図、 第22〜31図は、本発明で使用される文脈自由文法の
導出のさらに次の段階におけるグループ3文法を示す図
、 第32〜41図は、本発明で使用される文脈自由文法の
さらに次の段階におけるグループ4文法を示す図 第42図は、グループ3文法で゛′スキップ″の追加の
際に空白経路を回避するために使用される構成を示す図
。 第43図は、典型的なコンピュータ・プログラムに特徴
的な形式を示すフローチャートである。 出願人  インターナショナル・ビジネス・マシーンズ
・コーポレーション 代理人  弁理士  山  本  仁  朗FIG。 
1 く*牧 〉く理数 > BUILTIN  C0NDI
TION  GENERICF工G。2 く 無−P盾すテラI+−之牧  〉 墓 C0N5TANT く算術 >  BIT  CHARAcTERGRAP
HICく    撫 →シ 蹟1 記 ガL   〉〈
 テ゛−り記述 〉 FIG、’+ VARIABLε FIG、  5    ALIGNED    UNA
LIGNED傷楓八 インターナシへナル0ビジネス・
マシーンズ會コーボレーム・鱈シ<ll  術 〉 FIG。8 FIG。7 <、i牧 〉 FILE            ENTRY    
 F口RMAT    LABELINPUT    
  0UTPUT    INPUT   0UTPU
T  UPDATEく  無 セト 盾  I  〉 く 無−P盾り干うル之数 〉 C0N5TANT <   ]   i   >            
 B11     CHARACTERGRAPHIC
く   テ゛−り k迷    〉 VARIABLE く  テ“−タ 龜乙述   〉 く 算 術>         <r’にス−?、<プ
>   5TRLICTuREく   :―L    
ルC1〉 BINARY    DECIMAL FIXED      FLOAT IZE FIG。 ]7 〈ストリング又【;ピクチャー〉 PIG  18 FIG。 1つ く走数°〉 cONSTANT く無身盾宜文〉 〈オ術>   CHARACTERGRApHICBI
T、FIG。23 〈′P、矛It己這〉 くアクセス・9イブ〉 FIG、29 く変数〉 くに述>     ENTRY  FILEFIG。2
6 〈X#〉 FIG。27 くストリレゲ又℃ゴピケ千七−〉 FIG。28 く理数〉 FIG。30 〈無千盾宜さ〉 CHARACTER<イ乍f&、され丁;地歌>  G
RApHICBITFIG。33 く変数〉 〈記述>         ENTRY   FILE
く翼桁〉 くアクセス・タイフロ〉 く”hイル・セν擾

Claims (4)

    【特許請求の範囲】
  1. (1)プログラム・セグメントにより相互接続された複
    数のノードをもつプログラム木によって定義されたプロ
    グラムのプログラミング言語に関連する属性文法規則に
    従って、該プログラム中で属性割りあての無矛盾性をチ
    ェックするための方法において、 (a)各プログラム・セグメントに対応して、その対応
    するプログラム・セグメントで宣言されたすべてのデー
    タ項目をリストする宣言テーブルを生成し、 (b)上記各宣言テーブルにリストされた個々のデータ
    項目に対応して、上記対応するプログラム・セグメント
    で宣言された対応するデータ項目に割当てられた属性の
    初期セットを有する複数の属性レコードを生成し、 (c)上記属性の初期セットのシンタックスを検証し、
    且つ上記属性の初期セットが上記属性文法に含まれてい
    る意味論的制約に適合することを検証するために各デー
    タ項目毎に上記属性の初期セットをオペランド解析し、 (d)上記各データ項目毎に最終の属性セットを得るた
    めに選択された属性レコードにデフォールト値を追加し
    、 (e)上記属性文法規則に基づき、各最終的な属性セッ
    トにおける各属性の無矛盾性と各最終的な属性セットの
    完全性をチェックする段階を有するプログラムにおける
    属性割当て検査方法。
  2. (2)属性割当てのための属性文法規則を有するプログ
    ラミング言語で書かれ、データ項目に属性を割当ててな
    るソース・プログラムを受け取ってコンパイルするため
    のコンパイラを有し、該コンパイラは該プログラムによ
    って特定のデータ項目に割当てられた属性の無矛盾性を
    チェックし上記データ項目にデフォールト属性を選択的
    に割当てるための属性解析手段を具備する装置において
    、上記属性解析手段は、上記属性割当てが上記属性文法
    規則に従うことを検証するためのシンタックス・テーブ
    ルとパーサ・ドライバを含むテーブル駆動属性パーサを
    具備することを特徴とするプログラムにおける属性割当
    て検査装置。
  3. (3)上記テーブル駆動属性パーサが、各データ項目毎
    に最終的な属性セットを得るために上記デフォールト値
    を加えるための手段を含む特許請求の範囲第(2)項記
    載の装置。
  4. (4)上記テーブル駆動属性パーサが、上記属性文法規
    則に基づき上記最終的な属性セットにおけるさまざまな
    属性をチェックし、且つ上記最終的な属性セットの完全
    性をチェックするための手段を含む特許請求の範囲第(
    3)項記載の装置。
JP61103255A 1985-06-07 1986-05-07 プログラムにおける属性割当て検査方法及び装置 Pending JPS61282935A (ja)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US742493 1985-06-07
US06/742,493 US4686623A (en) 1985-06-07 1985-06-07 Parser-based attribute analysis

Publications (1)

Publication Number Publication Date
JPS61282935A true JPS61282935A (ja) 1986-12-13

Family

ID=24985059

Family Applications (1)

Application Number Title Priority Date Filing Date
JP61103255A Pending JPS61282935A (ja) 1985-06-07 1986-05-07 プログラムにおける属性割当て検査方法及び装置

Country Status (4)

Country Link
US (1) US4686623A (ja)
EP (1) EP0204942A3 (ja)
JP (1) JPS61282935A (ja)
CA (1) CA1252900A (ja)

Families Citing this family (45)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US4931928A (en) * 1988-11-09 1990-06-05 Greenfeld Norton R Apparatus for analyzing source code
US5201050A (en) * 1989-06-30 1993-04-06 Digital Equipment Corporation Line-skip compiler for source-code development system
US5325531A (en) * 1989-06-30 1994-06-28 Digital Equipment Corporation Compiler using clean lines table with entries indicating unchanged text lines for incrementally compiling only changed source text lines
US5193191A (en) * 1989-06-30 1993-03-09 Digital Equipment Corporation Incremental linking in source-code development system
JPH04211830A (ja) * 1990-02-05 1992-08-03 Matsushita Electric Ind Co Ltd 並列化コンパイル方式
WO1992003782A1 (en) * 1990-08-23 1992-03-05 Super-Computer Systems Limited Partnership Parsing program data streams
US5560009A (en) * 1990-09-21 1996-09-24 Hewlett-Packard Company Generating symbolic debug information by merging translation and compiler debug information
JPH04280320A (ja) * 1991-03-08 1992-10-06 Nec Corp プログラム自動生成装置
US5487147A (en) * 1991-09-05 1996-01-23 International Business Machines Corporation Generation of error messages and error recovery for an LL(1) parser
US5488727A (en) * 1991-09-30 1996-01-30 International Business Machines Corporation Methods to support multimethod function overloading with compile-time type checking
US5613115A (en) * 1991-12-09 1997-03-18 Total Control Products, Inc. Method for using PLC programming information to generate secondary functions such as diagnostics and operator interface
US5511213A (en) * 1992-05-08 1996-04-23 Correa; Nelson Associative memory processor architecture for the efficient execution of parsing algorithms for natural language processing and pattern recognition
US5367685A (en) * 1992-12-22 1994-11-22 Firstperson, Inc. Method and apparatus for resolving data references in generated code
US5491628A (en) * 1993-12-10 1996-02-13 Xerox Corporation Method and apparatus for document transformation based on attribute grammars and attribute couplings
US5696973A (en) * 1995-02-17 1997-12-09 International Business Machines Corporation Index-based method for supporting multimethod function overloading with compile-time type checking and run-time dispatch
US5687378A (en) * 1995-06-07 1997-11-11 Motorola, Inc. Method and apparatus for dynamically reconfiguring a parser
AU743193B2 (en) * 1997-02-26 2002-01-17 Nec Corporation Decoder using a finite state machine in decoding an abstract syntex notation-message and an encoder for carrying out encoding operation at a high speed
US5991539A (en) * 1997-09-08 1999-11-23 Lucent Technologies, Inc. Use of re-entrant subparsing to facilitate processing of complicated input data
US6321376B1 (en) * 1997-10-27 2001-11-20 Ftl Systems, Inc. Apparatus and method for semi-automated generation and application of language conformity tests
US5949993A (en) * 1997-10-31 1999-09-07 Production Languages Corporation Method for the generation of ISA simulators and assemblers from a machine description
US6405365B1 (en) * 1999-07-02 2002-06-11 Cisco Technology, Inc. Computer program command generator and parser
US9916134B2 (en) * 1999-10-05 2018-03-13 Dietrich Charisius Methods and systems for accessing distributed computing components through the internet
US7089541B2 (en) * 2001-11-30 2006-08-08 Sun Microsystems, Inc. Modular parser architecture with mini parsers
US20030144978A1 (en) * 2002-01-17 2003-07-31 Zeine Hatem I. Automated learning parsing system
US7080352B2 (en) * 2002-01-30 2006-07-18 Dloo, Incorporated Method and system for creating programs using code having coupled syntactic and semantic relationships
US6925541B2 (en) 2002-06-12 2005-08-02 Hitachi, Ltd. Method and apparatus for managing replication volumes
US7603661B2 (en) * 2003-01-30 2009-10-13 Hamilton Sunstrand Parse table generation method and system
US20040181707A1 (en) * 2003-03-11 2004-09-16 Hitachi, Ltd. Method and apparatus for seamless management for disaster recovery
US7058864B1 (en) * 2003-05-21 2006-06-06 Hewlett-Packard Development Company, L.P. Test for processor memory cache
US8190723B2 (en) * 2003-12-14 2012-05-29 Cisco Technology, Inc. Method and system for automatically determining commands for a network element
US8683437B1 (en) * 2004-04-16 2014-03-25 At&T Intellectual Property Ii, L.P. System and method for the automatic validation of dialog run time systems
US7945903B1 (en) 2004-04-16 2011-05-17 At&T Intellectual Property Ii, L.P. System and method for converting graphical call flows into finite state machines
US7721304B2 (en) 2004-06-08 2010-05-18 Cisco Technology, Inc. Method and apparatus providing programmable network intelligence
US7735140B2 (en) * 2004-06-08 2010-06-08 Cisco Technology, Inc. Method and apparatus providing unified compliant network audit
US8010952B2 (en) * 2004-06-08 2011-08-30 Cisco Technology, Inc. Method and apparatus for configuration syntax and semantic validation
US20060015591A1 (en) * 2004-06-08 2006-01-19 Datla Krishnam R Apparatus and method for intelligent configuration editor
US20070113221A1 (en) * 2005-08-30 2007-05-17 Erxiang Liu XML compiler that generates an application specific XML parser at runtime and consumes multiple schemas
US8037092B2 (en) 2005-10-05 2011-10-11 International Business Machines Corporation System and method for merging manual parameters with predefined parameters
US8843906B1 (en) * 2006-10-16 2014-09-23 The Mathworks, Inc. Inferring data types from compiler call site
US20090024366A1 (en) * 2007-07-18 2009-01-22 Microsoft Corporation Computerized progressive parsing of mathematical expressions
US9158519B2 (en) * 2008-05-21 2015-10-13 Optumsoft, Inc. Dynamic collection attribute-based computer programming language methods
US20120191446A1 (en) * 2009-07-15 2012-07-26 Proviciel - Mlstate System and method for creating a parser generator and associated computer program
CN102426550B (zh) * 2011-10-26 2014-05-14 中国信息安全测评中心 源代码解析方法和系统
WO2014152800A1 (en) * 2013-03-14 2014-09-25 Massively Parallel Technologies, Inc. Project planning and debugging from functional decomposition
US9875087B2 (en) * 2015-04-10 2018-01-23 Oracle International Corporation Declarative program engine for large-scale program analysis

Family Cites Families (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US4398249A (en) * 1970-08-12 1983-08-09 Pardo Rene K Process and apparatus for converting a source program into an object program
JPH0630066B2 (ja) * 1983-10-24 1994-04-20 株式会社日立製作所 テーブル型言語翻訳方法

Also Published As

Publication number Publication date
EP0204942A2 (en) 1986-12-17
US4686623A (en) 1987-08-11
CA1252900A (en) 1989-04-18
EP0204942A3 (en) 1988-08-03

Similar Documents

Publication Publication Date Title
JPS61282935A (ja) プログラムにおける属性割当て検査方法及び装置
US5870590A (en) Method and apparatus for generating an extended finite state machine architecture for a software specification
US6269475B1 (en) Interface for object oriented programming language
Zaytsev et al. Parsing in a broad sense
US20040225999A1 (en) Grammer for regular expressions
JPS6288033A (ja) ソフトウエアプログラムを生成するための装置及びその方法
JP5147240B2 (ja) リバーシブルなデザイン・ツリーの変換のための方法とシステム
EP1307828A1 (en) Xml-robot
JP2007521568A (ja) 複数の例外処理モデルの中間表現
de Souza Amorim et al. Multi-purpose syntax definition with SDF3
Hulden Finite-state machine construction methods and algorithms for phonology and morphology
van Binsbergen et al. GLL parsing with flexible combinators
KR20230040516A (ko) 자바스크립트의 중간 언어 기반 의미론 추출 자동화 시스템 및 방법
Bülow Proof visualization for the lean 4 theorem prover
JP2675100B2 (ja) 言語変換器及び言語変換方法
JPH05197560A (ja) プログラミング言語変換装置
Johnstone et al. A tutorial guide to rdp for new users
Walsh Adapting Compiler Front Ends for Generalised Parsing
Hettler A Requirement Specification for a Lexical Analyzer
END VAX SCAN: Rule-based Text Processing Software
JP3044463B2 (ja) データ変換方法
Barnes Exploratory steps towards a grammatical manipulation package (GRAMPA)
Johnstone et al. rdp {compiler compiler User manual for version 1.5
Quesada et al. The ModelCC Model-Based Parser Generator
JPH06348465A (ja) プログラム作成支援装置