JPH02121030A - 接続方法、ノード接続方法、データ処理方法、及び木内にノードを挿入する方法 - Google Patents

接続方法、ノード接続方法、データ処理方法、及び木内にノードを挿入する方法

Info

Publication number
JPH02121030A
JPH02121030A JP1207103A JP20710389A JPH02121030A JP H02121030 A JPH02121030 A JP H02121030A JP 1207103 A JP1207103 A JP 1207103A JP 20710389 A JP20710389 A JP 20710389A JP H02121030 A JPH02121030 A JP H02121030A
Authority
JP
Japan
Prior art keywords
node
nodes
child
list
subtrees
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
Application number
JP1207103A
Other languages
English (en)
Other versions
JP2534360B2 (ja
Inventor
Anthony J Arcuri
アンソニイ・ジヨセフ・アークリイ
William S Cadden
ウイリアム・スコツト・カデーン
Patrick C Mancuso
パトリツク・チヤールズ・マンクソ
Frederick P Muller
フレデリツク・ポール・マラー
Kurt A Riegel
カート・アレン・リイージエル
Robert C Seacord
ロバート・チヤールズ・シイーコード
David W Stafford
デヴイド・ウールワース・スタフオード
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 JPH02121030A publication Critical patent/JPH02121030A/ja
Application granted granted Critical
Publication of JP2534360B2 publication Critical patent/JP2534360B2/ja
Anticipated expiration legal-status Critical
Expired - Lifetime legal-status Critical Current

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/30Creation or generation of source code
    • G06F8/33Intelligent editors
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F40/00Handling natural language data
    • G06F40/10Text processing
    • G06F40/12Use of codes for handling textual entities
    • G06F40/14Tree-structured documents
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F40/00Handling natural language data
    • G06F40/10Text processing
    • G06F40/166Editing, e.g. inserting or deleting
    • YGENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y10TECHNICAL SUBJECTS COVERED BY FORMER USPC
    • Y10STECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y10S707/00Data processing: database and file management or data structures
    • Y10S707/99931Database or file accessing
    • YGENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y10TECHNICAL SUBJECTS COVERED BY FORMER USPC
    • Y10STECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y10S707/00Data processing: database and file management or data structures
    • Y10S707/99941Database schema or data structure
    • Y10S707/99942Manipulating data structure, e.g. compression, compaction, compilation

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Health & Medical Sciences (AREA)
  • Software Systems (AREA)
  • Artificial Intelligence (AREA)
  • Audiology, Speech & Language Pathology (AREA)
  • Computational Linguistics (AREA)
  • General Health & Medical Sciences (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
  • Stored Programmes (AREA)

Abstract

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

Description

【発明の詳細な説明】 A、産業上の利用分野 本発明は情報処理システム、特に関連するデータを操作
するためのコンピュータ・システムに関するものであり
、詳細にいえばデータと関係をノードを形成するデータ
要素、及び木構造内のノードの配置を定義する関係とに
よって、階層ないし木として表わすことのできる関係す
るデータを編集するためのエディタに関するものである
。木構造=5− によって表わされるデータ及び関係を「木構造データ」
と呼ぶ。
B、従来技術 エディタは通常、ユーザからのコマンドを受は入れ、処
置の結果を表示するユーザ・インターフェース、必要な
編集機能を遂行するデータ操作工程、データ及び関係を
維持するデータ記憶手段、ならびに要求された処置を検
証する際に、データ操作工程によって、使用されるデー
タ・ノード間の有効な関係を表わす(オプションの)構
文規則で構成されている。
木構造で表わされたデータの操作は以下の機能を含んで
いる。
新しいデータ・ノードまたはノードのセットの木構造へ
の挿入 データ・ノードまたはノードのセットからの木構造から
の削除 データ・ノードまたはノードのセットの構造内の新しい
位置への複写 データ・ノードまたはノードのセットの構造内の新しい
位置への移動 操作機能は挿入、削除、複写、移動されるノードのセッ
ト間の関係を含むノードの間に存在している関係を保存
しなければならない。
木構造データを編集するために多くのシステムが、開発
されている。一般に構造エディタと呼ばれるこれらのシ
ステムは主として、形式的に記述されたプログラミング
言語を編集することに関するものである。これらのエデ
ィタはデータ・ノードの間の有効な関係を表わす構文規
則を守らせる。
多くの現代のプログラミング言語、及び正規の言語は一
般に、バーズ木といわれる木として表わされる、ステー
トメントの基礎構造ないし階層を処理する。木を形成す
る関係はデータを操作する自然な方法を提供する。
プログラミング言語は関係、すなわちその言語に有効な
、木を支配する構文規則を有している。
これらの規則を厳密に遵守しなければ、プログラムは無
意味なものとなる。したがって、プログラムを作成する
言語の規則を守らせ、かつプログラムの基礎構造の理解
に基づいてデータの操作の選択を可能とすることによっ
て、プログラムの作成及び保守を援助するエディタが開
発された。これらのエディタは「言語ベース・エディタ
」または「構文制御形エディタ」などと呼ばれている。
本発明者らが知っているもののようなエディタの実施形
態は、おおまかに2つのクラスに分けられる。最初のも
のは標準的なラインまたはキャラクタ指向テキスト・エ
ディタときわめて類似したユーザ・インターフェースを
提供する。編集はプログラムのテキスト記述を対象とす
るものであり、これから各編集操作後に構造が再生成さ
れる。構造が再生成できない場合、あるいは再生成され
た構造が何らかの構文規則に違反している場合には、エ
ディタは編集操作を拒絶したり、あるいは結果をどのよ
うに形成するかについて最善の推測を行ない、有効な構
造を再生成できるようにする。
このような手法の利点は、これがきわめて−殻内なもの
であって、編集操作に使用できる文字セットについて何
の制約もないこと、及び現在単純なテキスト・エディタ
で作業をしているプログラマにとってきわめてなじみや
すい編集モデルを作れることである。プログラマが与え
た無効な構造から、エディタが有効な構造を作成しよう
とした場合、エディタがプログラマの意図している構造
を生成している限り、プログラマの作業の多(は自動的
に行なうことができる。しかしながら、これらの利点は
同時に、この手法の欠点ともなる。絶対的な普遍性は、
構文制御形エディタがないと起こしてしまうのと同じ誤
りを、プログラマに簡単に起こさせてしまうものであり
、これらの誤りは入力の時点で見つかり、作業を中断し
、誤りを修正せざるをえなくする。さらに、エディタが
それ自体で誤りを修正しようとした場合、エディタは厳
密な修正を行ないながら、プログラマが意図していない
ことも行なってしまうことがある。修正がプログラマの
考えている方向と同じでない場合には、プログラマは自
分自身の曝りを修正するだけではなく、エディタが生成
した間違った情報の修正も行なわなければならなくなる
。既存の構造を利用して新しい構造を再生成し、エディ
タの部分の作業を重複させるという利点がほとんどない
ため、この手法はかなり効率が悪い。編集の過程で、プ
ログラマが短期間の中間段階として正しくないプログラ
ムを作成することがきわめてしばしばある。この種のエ
ディタはこれらの段階を認めることも、それを自身で修
正することもなく、これを間違って行なう可能性がある
(上述のように)。このようなエディタの例は、コーネ
ル大学(cornell University)のリ
チャード・コンウェイ他(Richard Conwa
y et al、 )が開発したC0PEプログラミン
グ環境にある。
他のクラスの構文制御形エディタは木の構造を直接操作
する。このクラスのユーザ・インターフェースは通常グ
ラフィカルなもので、ユーザはプログラム・ステートメ
ントのグループを表わすグラフィック・イメージを用い
て作業を行なうことができる。グラフィック・イメージ
は指定された階層関係にしたがって、接続された木とし
て表示される。を効な木をもたらす操作のみを、完了す
ることができる。操作は完全なサブツリーによって指定
される(完全なサブツリーはノード、及びその子、これ
らの子の子など、他の子が得られなくなるまでのすべて
の子によって構成される)。
これらのサブツリーを移動または複写して、他のノード
のサブツリーにしてもよいし、また完全に削除してもよ
い。新しいノードまたは定義済みサブツリーを、既存の
ノードの子として挿入することもできる。
このクラスのエディタは、木の構造のみを操作するため
、きわめて効率がよい。また、完全なサブツリーのみが
移動されるので、多くの一般的な誤りが生じるのも防止
する。残念ながら、エディタとして日常に使用するには
、きわめて制限が強い。サブツリーはプログラムの適切
な取扱いにきわめて基本的なものではあるが、単一の完
全なサブツリーが役に立つことはほとんどない。プログ
ラマがノードの階層からレベルを除去したり、挿入した
りしようとすることがしばしばある。この操作はプログ
ラムを作成しようと考えてからほんの5公租度で終わる
ことがよくある、プログラム作成の最も最初の段階以降
のプログラム編集の基本である。この欠点はこの方法を
、基本編集モデルとして役立つものとするのを妨げてい
る主要な欠点である。
さらに、プログラマはほとんど常に、いくつかのスコー
プのサブツリー(行のスコープに対応している)を扱っ
ているが、単純なサブツリー操作モデルはしばしばこの
ような操作をサポートしない。いくつかのエディタの機
能を強化したものは前のサブツリーに続くサブツリーを
、その前のサブツリーの最後の子として表わす。これは
任意のスタート位置から、階層のそのレベルにおける順
序の終りまでの「順次」リストを適切なサブツリーとし
て表示することを可能とする。最後の子を取り扱うサブ
ツリーから分離したものとみなすことを可能とする他の
機能強化は、部分サブツリーとみなせる順次ステートメ
ントを、他の制限なしで、1回の操作で移動させるのを
可能とする。しかしながら、これらの機能強化は完全な
サブツリーに基づく編集モデルに適合させにくい。これ
らの機能強化を行なっても、モデルはまだ制限の多いも
のであって、たとえば、ノードを追加できるのは、既存
のノードのサブツリーとしてだけであって、既存のノー
ドの親としてではない。
このモデルを使用するエディタの例としては、コーネル
大学(cornell University)のティ
ム・テイトルバウム他(Tim Teitlebaum
 et al、)が開発したコーネル・プログラム・シ
ンセサイザ(cornell I’rogram 5y
nthesizer) N及びジノチック・リサーチ・
インク(Xinotech Re5earch、 In
c、)が開発したジノチック・プログラム・コンポーザ
(Xinotech Program Compose
r)があるOC0発明が解決しようとする問題点 本発明は完全なサブツリーの操作に限定されない構造エ
ディタを提供することに関するものである。好ましい実
施例は1つまたは複数のサブツリーで動作するデータ操
作方法を提供する。この方法はデータの挿入、削除、複
写及び移動を実現するものであり、操作のためのデータ
を選択するための汎用化されたスコープ指定方法を改善
したものであり、また結果として得られたデータの位置
及び関係を指定するための汎用化されたターゲット指定
方法を改善したものである。さらに好ましい実施例は、
スコープを包含しているサブツリーのセットの収集、ス
コープを包含しているノードの削除、汎用のターゲット
で示された点におけるスコープを包含しているノードの
接合を含むサブオペレーションの組合せによって、ノー
ドの挿入、削除、複写及び移動を行なうことに関するも
のである。好ましい実施例の拡張は、指定された構文規
則を遵守させる構文制御形エディタに関する。
好ましい実施例の方法は、各種のユーザ・インターフェ
ース、データ記憶手法、及び構文規則の指定で操作でき
るものである。
したがって、本発明の目的は、木の有効な構造を維持し
ながら、構造エディタにおいて融通性の高い挿入、移動
、複写、及び削除操作を提供することである。他の目的
は以下の事項を行なえるようにすることである。
完全なサブツリーだけではなく、ツリー内のノードの任
意の選択物の移動、複写、及び削除。
選択されたノード及び選択されないノードの両方の相対
構造(すなわち、ネスティング及び左から右への関係)
の維持。
選択されたノードの、既存のノードの親としての移動、
複写、及び挿入(すなわち、既存のノードの周囲への新
しいノードの挿入)。
選択されたノードの、既存のノードのすべての子として
の移動、複写、及び挿入(すなわち、親ノードとその子
の間への新しいノードの挿入)。
選択されたノードの、既存のノードの子としての移動、
複写、及び挿入。
これらの操作及び他の操作を行なった場合の、木の有効
な構造に関する規則の維持。
本発明のさらに他の目的は、木の有効な構造を維持しな
がら、メモリの有効なバーズ木に高速な接合及び置換操
作を提供することである。
本発明のさらに他の目的は、以下の事項を行なえるよう
にすることである。
n元のノード(すなわち、任意の数のノードが接続され
たノード)を使用した木の記憶、したがって記憶空間の
大幅な節約。
バーズ水内のノードの子が有効なタイプのものであり、
かつ有効な順序であることの効率的なチエツク。
ノードの特定な子の後へのサブツリーのリストの接合、
ならびに結果として得られるノード及びその子が構文的
に正しいことの確認。
特定のノードの下のサブツリーのリストの、サブツリー
の新しいリストとの置換、ならびに結果として得られる
ノード及びその子が構文的に正しいことの確認。
D0問題点を解決するための手段 本発明の一態様によれば、以降の操作のために、1つま
たは複数の関連するn元のデータ要素ないしノードの1
つまたは複数のグループを収集する編集方法が提供され
る。収集される水内のすべてのノードが選択され、この
ように選択された各最高位のノードが識別される。識別
された最高位のノードについて、すべての選択された子
孫が識別される。子孫は次いで最高位のノードに接続さ
れ、相対階層が子孫と最高位ノードの間のものとして保
存される単純に接続されたサブツリーを形成する。
本発明の他の態様によれば、1つまたは複数の単純に接
続されたn元のデータ要素ないしノードの1つまたは複
数のグループを、木から削除する編集方法が提供される
。上記の木の1つまたは複数の単純に接続されたノード
の1つまたは複数のグループは、削除するために選択さ
れる。ノードの各選択されたグループの最上位のノード
の親ノードが識別される。ノードの各選択されたグルー
プの子も識別される。次いで、ノードの選択されたグル
ープが削除される。最後に、ノードの各削除されたグル
ープの子は、各削除されたグループの最上位ノードの親
に接続される。
本発明のさらに他の態様によれば、n元のデータ要素な
いしノードのサブツリーを、選択されたノードを中心と
する木に挿入する方法が提供される。サブツリーのリス
トが提供され、ターゲ・シト・ノードが選択される。タ
ーゲット・ノードの親ノードとの接続が断たれる。サブ
ツリーのリストが親ノードに、その子として接続される
。最後に、接続が断たれたターゲット・ノードが、ター
ゲット・ノード及びその子を接続できる親ノードの最下
位ノードの最初のものを判断するための所定の順序のテ
ストによって、サブツリーのリストに接続される。子の
ような接続を行なえるという判断が行なわれた場合に、
ターゲット・ノードが接続される。
本発明のさらにまた他の態様によれば、n元のデータ要
素ないしノードの1つまたは複数のサブツリーを、選択
されたノードに接続された木に挿入する方法が提供され
る。1つまたは複数のサブツリーのリストが提供され、
ターゲット・ノードが選択される。ターゲット・ノード
の子の接続が断たれる。サブツリーのリストがターゲッ
ト・ノードヘ、その子として接続される。最後に、接続
の断たれた子を接続できるサブツリーのリストの最下位
のノードの最初のものを判断するための所定の順序のテ
ストによって、接続の断たれた子がサブツリーのリスト
に接続される。このような接続を行なえるという判断が
行なわれた場合に、子が接続される。
本発明のさらにまた他の態様によれば、一連の規則にし
たがって木構造を形成するために相互接続されるノード
を生成し、取り扱う構造エディタにおいて、最初のノー
ドを2番目のノードに接続できるかどうかを判断する方
法が提供される。本発明のこの態様によれば、木を形成
する一連のノードの少なくとも若干のものに対して、ノ
ードのタイプ、及びノードに対してその子として接続す
ることが可能なノードの配列に関する、上述の規則のセ
ットからの規則の1つまたは複数のサブセットが定義さ
れる。ただし、規則が第1及び第2レベルのものである
というように、ノードのタイプは相互に異なっている可
能性のあるものである。
第1レベルの規則はその規則を適用した場合に、他の規
則を適用せずに所定のノードが接続できるかどうかを判
断するものである。第2レベルの規則は他の第2レベル
の規則を介して、所定のノードが接続できるかどうかを
判断するための第1レベルの規則の少なくとも1つを、
直接または間接に参照する。2つまたはそれ以上のノー
ドの接続を必要とする操作を実施した場合、他のノード
が接続されるノードに基づいて、これらの規則が適用さ
れる。
最後に、本発明のさらにまた他の態様によれば、データ
要素ないしノードが複写、削除、移動または挿入される
構造エディタにおいて、ノードを互いに接続するための
方法が提供される。木に接続されるノードが選択される
。階層関係、及び選択されたノードと既存の木の間の順
序関係に関する第1セツトの規則が提供される。第1セ
ツトの規則が選択されたノードに関して使用されて、木
のノードに対する1つまたは複数の接続を識別する。
木内のノードに認められる配列に関する第2セツトの規
則が提供される。第2セツトの規則を使用して、識別さ
れた接続をテストし、第2セツトの規則が接続で満たさ
れるかどうかを判定する。第2セツトの規則が満たされ
れば、接続が行なわれる。
それ故、本発明が構造エディタの編集操作の融通性を大
幅に改善する手法を提供することが、理解されよう。木
内のノードの任意の選択を、収集、削除、または挿入な
どの操作のために識別できる。
さらに、構文が強制されるエディタにおいて、本発明は
、基礎となる構文を維持しながら、これらのきわめて融
通性の高い操作を可能とする強力な手法を提供する。
E、実施例 El、好ましい実施例の概要 本発明は構造エディタにおける融通性の高いスコープ編
集方法に関する。構造エディタを含む典型的な編集シス
テム構造の構成要素を、第1図に示す。編集システムは
ユーザ・インターフェース21、データ操作処理部26
、データ構造記憶装置28、及びオプションの構造構文
規則30を有している。ユーザ・インターフェース21
は通常、編集対象の構造またはステートメントを表示す
るためのビデオ表示画面20または類似の装置、情報を
入力するためのキーボード22、及び画面の表示からデ
ータ項目を選択するためのマウスなどのボインティング
装置24を含んでいる。データ操作処理部26は記憶装
置28に記憶すべきデータを作成または変更する構造の
編集を含む編集機能を行なう。1実施例において、デー
タ構造を支配する構文規則は、データ記憶装置30に記
憶されている。データ記憶装置28及び30は固定また
はフレキシブル磁気ディスク、磁気テープなどの装置で
ある。これが本発明方法を実施できる環境のひとつに過
ぎず、本方法の用途を限定することを目的とするもので
ないことが、理解されたい。
好ましい実施例はデータ操作処理部26の一部として、
新規な融通性の高いスコープ編集方法を備えている。融
通性の高いスコープ編集方法は、階層または木構造化デ
ータのデータ・ノードの挿人、削除、複写、または移動
を行なう手段を提供する。本発明は融通性の高いスコー
プ指定(すなわち、たとえば、サブツリーを完成させる
ために制限のない編集操作のためにデータ・ノードの選
択)、及び汎用化されたターゲット指定の提供に関する
。好ましい実施例を実現するエディタは構造化データを
、ビデオ表示装置20にグラフィック的に表示すること
ができる。グラフィック表示装置は第2a図の形態を取
ることができるが、多くの他の形態が可能である。スコ
ープ指定中、及びターゲット指定のためのデータの選択
は、ポインティング装置24を使用し、適切なデータ・
ノードを示すことによって行なわれる。しかしながら、
当分野の技術者には、本発明がグラフィック表示装置を
使用した適用例に限定されるものではなく、ポインティ
ング装置を使用しないテキスト表示装置を使用して実施
できることが理解されよう。
汎用構造編集操作には、2つの主要なアイディア、すな
わちスコープとターゲットがある。汎用構造編集操作は
データの構造(すなわち、サブツリー法が行なうのと同
様に、データの間の関係)を直接扱う。さらに、好まし
い実施例の方法は融通性の高いスコープ指定及び汎用の
ターゲットを備えている。すなわち、選択されたデータ
(スコープ)の間の関係、及びこのデータの移動先また
は複写先の位置(ターゲット)に何の制限も課さない。
好ましい実施例の汎用のスコープは以降の編集操作のた
めに選択された一連のノードである。ノードを選択する
ためのユーザ・インターフェースは、上述のように、標
準インターフェースまたはカストム化インターフェース
である。ただし、以下の選択操作は、ノードをスコープ
・セットに追加、または除去するために提案されるもの
である。
5copeSubtree  ノードを与え(たとえば
、ポインティング装置で示して)、このノー ド及びすべてのその子孫をスコー プを構成するノードのセットに追 加する。ただし、与えられたノー ドが最初のスコープのセット内に あった場合には、とのノード及び その子をスコープ・セットから除 去する。
ノードを与え、これをスコープに 追加する。スコープ・セットに既 に存在していた場合には、これを セットから除去する。
2つのノードを与え、この2つの ノードを含む列の下にあるサブツ リーを含んでいる兄第(兄第は共 通の親を共有するノードであり、 この親の下にあるノードの列のあ るノードの次のノードである)の 最小の列を見つけだし、2つのう ち最初のノードが既にスコープ・ セットにある場合には、サブツリー のこの列をスコープ・セットから 除去し、それ以外の場合には、こ れをセットに追加する。
好ましい実施例の汎用ターゲットは、ノード及scop
eRan25 一5copeRan びこのノードに対する関係として指定される。スコープ
はターゲットに対して複写、または移動され、また指定
された関係にしたがって挿入される。
関係は次のようになる。
Left      ターゲット・ノードの兄第として
Right      ターゲット・ノードの兄第とし
てAround     ターゲット・ノードの親とし
てυ1thin     すべてのターゲット・ノード
の子が新しいノードの子となるという、 ターゲット・ノードの子として 本発明の好ましい実施例の方法は、任意のノードのセッ
ト(スコープ)を与えた場合に、移動、複写、挿入、及
び削除操作を提供し、かつ(移動、複写及び挿入の場合
に)汎用のターゲットの指定を行なう。汎用ターゲット
は木に対する複雑な変更を1回の自然な工程で行なえる
ようにするが、これは従来技術の方法では、2回の工程
を必要とするものであった。汎用スコープはきわめて強
力な編集操作をもたらすが、これは直感的なものと考え
られるが、他の方法では多くの直感に反した操作を必要
とするものである。
好ましい実施例に含まれる概念は、ノードを単純に接続
するというものである。あるノードから始めて、1つま
たは複数の単純な接続を横切ることによって、すべての
他のノードに到達できるという単純な接続が、ノードの
間に存在する場合、ノードのグループを単純に接続する
ことができる。
単純な接続はあるノードから他のノードへのポインタで
ある。
最高のレベルにおいて、本方法は移動、複写、挿入、及
び削除を次の3つの工程に分割する。
1、サブツリーの収集。スコープから作成できるサブツ
リーのリストを収集する。2.削除。スコープを構成す
るノードを削除する。3.貼付け。サブツリーのリスト
をターゲット位置に貼り付ける。
貼込み操作は汎用ターゲットを使用し、サブツリーの収
集及びスコープのノードの削除は融通性の窩い範囲指定
を含んでいる。基本的な移動、複写、削除、及び挿入操
作は、上述の工程の1つまたは複数を組み合わせること
によって遂行される。
これらの基本操作は図面に示されている例によって、最
も良く表わされる。第2a図は以降の操作の範囲に含め
るために選択された8つのノードを有する木を示してい
る。(スコープ・ノードはアステリスクによって示され
ている。)スコープの収集は、第2b図に示すサブツリ
ーの3要素リストをもたらす。プライム符号(たとえば
、G2′)は、これがオリジナルのノードの複写である
ことを示す。(収集及び削除操作が1つの工程に組み合
わされた場合、実際のノードは複写ではなく、収集され
る。) スコープを削除すると、第3図に示す構造がもたらされ
る。
ノードとして第3図のE2を、また汎用ターゲットの関
係として「アラウンド」を選択し、汎用ターゲットにし
たがってスコープを貼り込むと、第4図に示す構造がも
たらされる。
サブツリーの収集を削除と組み合わせ、その後貼込みを
行なった最終結果は、両方の次元におけるこれらの相対
関係(先祖関係及び左から右への兄弟関係)を維持しな
がらの、スコープ・ノードをターゲット位置への移動と
なる。削除が行なわれないと、結果は複写操作となる。
削除だけを行なうと、結果は削除操作となる。さらに、
ノードを木の外部で作成しくスコープに基づかないで)
、次いで貼り込むと、結果はそのノードの木への挿入と
なる。
本発明による融通性の高いスコープ編集方法の好ましい
実施例を説明する。本方法の工程の開示に使用される記
述言語の説明を行なう。次いで、好ましい実施例で使用
されるユーティリティ機能すなわち方法、ユーティリテ
ィ機能に基づく基本機能、及び融通性の高いスコープ編
集方法の主な工程を説明する主要関数を説明する。主要
関数に続き、構文規則、及び有効な構造に対する構文チ
エツクを組み込んだ、好ましい実施例の拡張機能を説明
する。次いで、好ましい実施例の拡張機能のユーティリ
ティ関数、データ、基本関数及び主要関数の説明を行な
う。詳細にいえば、拡張機能の主要関数は、すべての構
文規則が遵守されていることを確実とする接合及び置換
関数を提供する。
E2.記述言語 本発明の詳細な段階を説明するために、単純な指定言語
を本明細書全体にわたって使用する。関数の説明、関数
の入力及び出力の定義、関数を遂行するのに必要な方法
の工程を含め、本発明を実施する関数を提示する。この
言語は以下のステートメントを認める。
割当て     x=yの形式の単純な割当てが認めら
れる。
Iflotherwise  テストを「=」、「<=
」などの標準関係演算子とともに、英 語で表現する。テスト結果が真 であれば、If節のステートメ ントが実行される。テスト結果 が偽であればN Otherwi se節のステートメントが実行 される。
Ca5eの式   式のいくつかの相互排除値の間で選
択が行なわれる。式と合致 する値のステートメントが実行 される。
1Jhile      いくつかの条件が真である限
り、多数のステートメントを実行す る。
Return      サブルーチンからの成功した
戻り。
Fail       サブルーチンからの不成功の戻
り。戻りの変更は、これらが項 目にある条件に対するルーチン で行なわれる。
成功または失敗が明示的に検証されない限り、失敗した
ルーチンは呼出しルーチンが失敗したことも意味する。
成功または失敗が明示的に検証された場合、特定の呼出
しが失敗したときに、検証された状態に基づいた代替処
理が行なわれる。
注釈は角かっこで囲まれる。
変数を宣言する必要はなく、また何らかの特定の値に初
期設定されるとはみなされない。変数はこれらが使用さ
れる方法によって、これらに関連付けられるタイプ(た
とえば、整数対ストリング)を有している。
サブルーチンは名前、ならびに入力または出力パラメー
タを存するものとして指定され、この後にかっこに入れ
られたパラメータが付けられる。
サブルーチンは他のサブルーチンと同じ名前を持ってい
てもかまわないが、そのサブルーチンに与えられるパラ
メータのタイプ及び数によって区別される。
好ましい実施例に使用されるユーティリティ関数以下の
基本操作が好ましい実施例を実現するのに利用でき、か
つ、たとえば、周知のユーティリティ関数によって提供
されるものと想定する。
木を操作するための関数。操作が以下にリストする単純
なものに限定されている限り、木の操作は周知の分野で
ある。
graft サブツリーのリストをノードの「リーフ」として、その
ノードの特定の子の後に挿入する(空の子は操作が最初
の子の前に行なわれることを示す)。構文制御形エディ
タにおける構文チエツクのため、この操作は失敗するこ
とがある。好ましい実施例の方法は、graftが構文
をチエツクした場合に、この方法が構文的に正しい木を
構築するようになされている。ただし、この方法はgr
aftが構文をチエツクするか、否かを扱う。
(graft操作内で構文をチエツクする方法を提供す
る、好ましい実施例の拡張機能は好ましい実施例の移動
、複写、挿入及び削除操作を説明した後、説明する。) replace サブツリーの包括的な範囲を所定の親ノードから切り放
し、次いでこれをサブツリーのリストと置き換える。構
文制御形エディタ内の構文チエツクによってN  re
placeが失敗することがある。この方法はrepl
aceが構文をチエツクした場合に、この方法が構文的
に正しい木を構築するようになされている。ただし、こ
の方法はreplaceが構文をチエツクするか、否か
を扱う。
(replace操作内で構文をチエツクする方法を提
供する、好ましい実施例の拡張は好ましい実施例の移動
、複写、挿入及び削除操作を説明した後、説明する。)
copyMode 所定のノードと同一な、新しい子のないノードを形成す
る。
destroyNode ノードにマークを付け、delete操作の終了時にこ
れを破壊できるようにする。
この方法は破壊されたノードの子がどうなるかについて
、仮定を行なわない。
createHode 所定のタイプの子のないノードを作成する。単純な構造
化エディタにおいては、すべてのノードは同一のタイプ
のものである。
copysubtree 所定のサブツリーと同一な、新しいサブツリーを作成す
る。
destroySubtree サブツリー内のすべてのノードにマークを付け、del
ete操作の終了時にこれを破壊できるようにする。
getParent 所定のノードの親ノードを返すか、あるいはそのノード
が親を持っていない場合には、空文字を返す。
getP 1rstCh i ld 所定のノードの最初の子を返すか、あるいはそのノード
が子を持っていない場合には、空文字を返す。
getLastchild 所定のノードの最後の子を返すか、あるいはそのノード
が子を持っていない場合には、空文字を返す。
getRightsibling ノードの右側の兄第を返すか、あるいはそのノードがそ
の親の最後の子である場合には、空文字を返す。
getLef tS i b l ingノードの左側
の兄第を返すか、あるいはそのノードがその親の最初の
子である場合には、空文字を返す。
getFirstLeaf サブツリーが与えられた場合、このサブツリー内の最初
のリーフ(子のないノード)を返す。サブツリーのルー
トに子がない場合には、空文字を返す。
getHextLeaf サブツリーとリーフ・ノードが与えられた場合、このサ
ブツリーの次のリーフ・ノードを返すか、あるいは他の
リーフがない場合には、空文字を返す。
getsubtreeHodes サブツリー内のノードを、セットに追加する。
セット、特にノードのセットを操作する機能。
reate 新しい空のセットを作成する。
opy 何らかの既存のセットのコピーである新しい空のセット
を作成する。
destroy 既存のセットを完全に除去する。
n5ert セットに項目を挿入する。
elete セットから項目を削除する。
uery 項目がセットにあるがどうかを判定する。
makeEmpty 与えられたセットを空にする。
isEmpty 与えられたセットが空であるがどうが を判定する。
getF 1rst セットに項目を返す。任意の項目であってもかまわない
getNext 項目が与えられた場合、最後のge tFirst以降
に返されていないセットに、任意の項目を返す。なにも
残っていない場合には、空文字を返す。
difference あるセットから、これが第2のセットを共通に持ってい
る要素を除去する。
−項目のリスト、特にサブツリーのリストを操作する関
数 reate 新しい空のリストを作成する。
destroy リストを完全に破壊する。
ppend 項目を、リストの最後に付加する。
prepend 項目を、リストの最初に付加する。
getF 1rst リストの最初の項目を返す。
getNext リストとそのリストの項目が与えられた場合、リストの
次の項目を返すか、あるいは与えられた項目が最後のも
のの場合には、空文字を返す。
基本関数の定義 本発明の好ましい実施例の方法の工程を記述するのに使
用されるサブルーチンの定義を、以下で行なう。
I 、 findFirstScoped(root、
 5cope、 5copeUnder。
node)。サブツリーのルート(このサブツリーの最
も上のノード)を与えた場合、スコープ内のノードを示
すノード識別子のセット、どのノードがスコープ内にあ
る子孫を有しているがを示すノード識別子のセットを与
えた場合、スコープに含まれているサブツリーの最初の
ノードを返す。ただし、この場合、「最初」とは子がス
コープ内にあれば、与えられたサブツリーのルートの最
も左側の子として、子がスコープ内にないのであれば、
与えられたサブツリーのルートの最も左側のサブツリー
にある最初のスコープが指定されたノードとして再帰的
に定義されるものである。また、何もないのであれば、
前のテストを、与えられたサブツリーのルートの残りの
子に適用する。最初のスコープが指定されたノードの前
に残っている子が見つからなければ、与えられたサブツ
リーのルートの下にはスコープが指定されたノードが存
在しない。
第2図ないし第4図を参照して説明した前の例に戻ると
、スコープのセットはB1、B3、C2、El、Fl、
F2、G1、及びG2である。5copeUnderの
セット(スコープ・セット内に子孫を持っているノード
)はA1、B1、B3、B4、C2及びB2を含んでい
る。サブツリーのルートとしてB1の与えられた関数f
 1ndF 1rstscopedは、最初のスコープ
が指定されたノードとしてC2を返す。B2がルートと
して指定された場合、関数は空文字を返す(B2の下に
は、スコープが指定されたノードがない)。B3が指定
された場合、この関数はG1を返す。
入カニ root ノードで、この下にスコープの最初のノードがあること
が望まれるもの。
scope スコープ内にあるノードのセット。
5copeUnder スコープが指定されたノード・の親であるノードのセッ
ト 出カニ node 定義にしたがった最初のスコープが指定されたノード 方法: 1、 query(scopeUnder、root)
が真である場合(ルートの下にスコープが指定されたノ
ードがある場合) a、  child = getFirstchild
(root)b、子が空でなければ[探すことのできる
子がまだあればコ 1 ) query(scope、child)真の場
合(子がスコープ内にある) a) node =child [子が最初のスコープ
が指定されたノードであるコ b ) return 2)それ以外の場合[その子がスコープ内になければ、
その下の最初のスコープ が指定されたノードを探すコ a) findFirstScoped(child、
 5cope。
5copeUnder、 node)  [その子の下
の最初のスコープが指定されたノー ドを探すコ b)ノードが空でなければ[スコープ が指定されたノードが見つかればコ i 、 Return [ノードがルートの下の最初の
スコープが指定され たノードであるから、操作を 終わるコ C)それ以外であれば[ルートのこの 子の下の最初のノードを見つけな いコ i 、  child = getRightsibl
ing(child) [ルートの次の子を 試す] C,node = null C最初の子がどこにも見
つからなかったコ d、  Return 2、それ以外の場合[′ICのノードの下には、スコー
プが指定されたノードが何もないコ a、 node = null [このノードの下には
最初のサブツリーがないコ Il、 findNextscoped(root、 
5cope、 5copeUnder。
prev、 node)。サブツリーのルート、スコー
プのセットN 5copeUnderセツト、及び以前
のノードを与えた場合、そのルートの下の次のスコープ
が指定されたノードを返す。
第2a図の木の例を想定して、ルー)Bl及び以前のノ
ードC2を与えた場合、次のノードは空である。ルート
B3及び以前のノードG1を与えた場合、次のノードは
G2である。
入カニ root ノードで、この下にスコープの次のノードがあることが
望まれるもの。
scope スコープ内にあるノードのセット。
SC(+p6Under その下にスコープが指定されたノードがあるノードのセ
ット prev 後で次のスコープが指定されたノードを見つけようと思
うノード 出カニ node 定義にしたがった次のスコープが指定されたノード 方法: 1、prevがルートと異なっている場合[他に何か探
せるものがなければならないコ a、 rsib = getRightsibling
(prev)b、rsibが空でない場合[試みること
のできる他の兄第がある] 1、 query(scope、rsib)が真であれ
ば[兄第がスコープにあるコ a) node =rsib [兄第が次のスコープが
指定されたノードである] b ) Return 2、それ以外の場合[兄第がスコープ内にないので、そ
の下の最初のスコープが 指定されたノードを見つけだすコ a) findFirstScoped(rsib、 
5cope。
5copeUnder、 node) [この兄第の下
の最初のスコープが指定された ノードを見つけだす] b)ノードが空でない場合[スコープ が指定されたノードが見つかった] i 、 Return [ノードがpreyの後のルー
トノ下の次のスコープが指定さ れたノードであるから、操作を 終了するコ C)それ以外の場合[prevのこの兄第の後に最初の
ノードが見つからないコ i、 rsib =getRightsibling(
rsib) [次の兄第を試みる] c、 prey =getParent(prey) 
[prevの次のどこにも最初の子が見つからないので
、prevの親を試みるコ 2、 node =null [スコープが指定された
ノードが見つからずにルートに到達し たので、preVの後には何もないコ 3、Return m、  getFirstSubtree(root、
5cope、5copeUnder。
compsubtrees、sub、top) oサブ
ツリーのルート0ノード、スコープ壷セット、5cop
eUnderセツト、及び完全にスコープが指定された
サブツリー・セ・ソトを与えた場合、ルートの下のすべ
てのスコープが指定されたノードで形成された最初に収
集されたサブツリーの新しいコピー、及び複写されたサ
ブツリーの元の木のトップ・ノード識別子を返す。
第2a図及び第2b図の例の木を想定し、B1を与えた
場合、C21で始まる新しい「サブ」ツリー及びC2を
返す。
入カニ root ノードで、この下に最初のスコープが指定されたサブツ
リーがあることが望まれるもの。
cope スコープ内にあるノードのセット。
5copeUnder その下にスコープが指定されたノードがあるノードのセ
ット compsubtrees スコープが指定されたノードだけで、そのサブツリーが
作られているノードのセット出カニ sub 見つかった最初の新しいサブツリー op 最初のスコープが指定されたサブツリーの一番上にある
古いノード 方法: 1 、 findFirstScoped(root、
5cope、5copeUnder、top)[最初の
サブツリーの一番上を捕捉するコ2、topが空の場合
[第2のスコープが指定されたノードが見つからなかっ
たので、サブツリーが何もない] a、 sub = null [サブツリーがないコb
、 Return 3、それ以外の場合[サブツリーのtopが見つかった
ので、その下のサブツリーを収集するコa、 quer
y(compsubtrees、top)の場合[完全
なサブツリーがスコープ指定されているかどうか、調べ
るコ 1) copysubtree(top、5ub) [
完全なサブツリーを複写する] b、それ以外の場合[topの下のサブツリー全体がス
コープ指定されていない。スコープが指定されたサブツ
リーの断片を収集する]1) sub =copyNo
de(top) [一番上のスコープが指定されたノー
ドの新しいコピー を作成するコ 2 ) create (l 1st) [リストを取
って、これにサブツリーを収集するコ 3) addSubtrees(top、5cope、
5copeUnder。
compsubtrees、 1ist )4 ) i
sEmpty (l ist )の場合[収集するサブ
ツリーがないコ a) Return [subが存在しているすべての
サブツリーである] 5)それ以外の場合 a) graft(sub、null、1ist、5t
atus)[サブツリーのリストを最初 のパンチとして、subに置く] 一49= b) destroy(list) [もはや、リスト
は必要ない] c ) Return IV、 getNextsubtree(root、5
cope、5copeUnder。
compsubtrees 、 prev 、 sub
 、 top) oサブツリーのルート・ノード、スコ
ープ・セット、5copeUnderセツト、完全にス
コープが指定されたサブツリーのセット、及び以前のノ
ード識別子を与えた場合、preyの後のルートの下の
すべてのスコープが指定されたノードで形成された、次
の収集されたサブツリーの新しいコピー、及びサブツリ
ーが複写された元の木のトップ・ノードの識別子を返す
第2a図及び第2b図の例の木を想定し、ルートとして
B3を、またpreyとしてG1を与えた場合、このル
ーチンはG2’で始まる新しい「サブ」ツリー及びG2
を返す。あるいは、ルートとしてB1を、またprey
としてC2を与えた場合、このルーチンはサブツリーと
して、またtopとして空文字を返す。
入カニ root ノードで、この下にスコープが指定された最初のノード
があることが望まれるもの。
cope スコープ内にあるノードのセット。
5copeUnder その下にスコープが指定されたノードがあるノードのセ
ット compSubtrees スコープが指定されたノードだけで、そのサブツリーが
作られているノードのセットrey 以前のサブツリーの一番上のノード 出カニ sub prevの後で見つかった次の新しいサブツリーop preyの後の次のスコープが指定されたサブツリーの
topである古いノード 方法: 1 、 findHextscoped(root、5
cope、5copeUnder、prev。
top) [次のサブツリーのtopを捕捉するコ2、
topが空の場合[スコープが指定されたノードが見つ
からなかったので、サブツリーが何もないコ a、 sub = null [サブツリーがないコb
、 Return 3、それ以外の場合[サブツリーのtopが見っがった
ので、その下のサブツリーを収集するコa、 quer
y(compsubtrees、top)の場合[完全
なサブツリーがスコープ指定されているがどうか、調べ
るコ 1) copysubtree(top、5ub) [
完全なサブツリーを複写するコ b、それ以外の場合[topの下のサブツリー全体がス
コープ指定されていない。スコープが指定されたサブツ
リーの断片を収集するコ1) sub = copyN
ode(top) [一番上のスコープが指定されたノ
ードの新しいコピー を作成するコ 2 ) create (l 1st) [リストを取
って、これにサブツリーを収集するコ 3) addSubtrees(top、5cope、
5copeUnder。
compsubtrees 、 l ist )4 )
 isEmpty (l ist )の場合[収集する
サブツリーがないコ a) Return [subが存在しているすべての
サブツリーである] 5)それ以外の場合 a) graft(sub、null、1ist、5t
atus)[サブツリーのリストを最初の パンチとして、subに置く] b) destroy(list) [もはや、リスト
は必要ないコ C) Return V 、 addSubtrees(root、5cop
e、5copeUnder。
compsubtrees、1ist) o所定のサブ
ツリーのルート響ノード、スコープeセット、5cop
eUnderセツト、完全にスコープが指定されたサブ
ツリーのセット、及びサブツリーのリストを与えた場合
、スコープが指定されたノードから収集されたルートの
下のサブツリーを、リストに追加する。
第2a図及び第2b図の例の木を想定し、B1と空のリ
ストを与えた場合、このルーチンはc2“がトップとな
ったサブツリーを含んでいるリストを返す。B2と空の
リストを与えた場合、これは空のリストを返す。B3と
空のリストを与えた場合、これはGl”及びG2’を含
んでいるリストを返す。
入カニ root ノードで、この下にサブツリーを収集しなければならな
いもの。
cope スコープ内にあるノードのセット。
5copeUnder その下にスコープが指定されたノードがあるノードのセ
ット (H□HpSubtrees スコープが指定されたノードだけで、そのサブツリーが
作られているノードのセット ist 新しいサブツリーが追加されるリスト 出カニ  ist 新しいサブツリーが追加されるリスト 方法: 1、 getFirstSubtree(root、5
cope、5copcUnder。
compsubtrees、sub、top) [最初
のサブツリーのtopを捕捉する] 2、subが空でない場合[まだ、サブツリーが残って
いる] a、 append(list、5ub) [サブツリ
ーをリストに追加するコ b、getHextsubtree(root、5co
pe、5copeUnder。
compsubtrees、top、sub、top)
 [次のサブツリーを取得して、追加するコ Vl 、 buildscopeUnder(scop
e、5c6peUnder) o スコープ・セットを
与えた場合、その下にスコープが指定されたノードを有
するノードのセットを返す。
サンプルの入力と出力については、 findFirstScopedの例を参照されたい。
入カニ scope スコープ内にあるノードのセット。
出カニ 5copeUnder その下にスコープが指定されたノードがあるノードのセ
ット 方法: 1 、 node = getFirst(scope
) [スコープからノードを取り出すコ 2、ノードが空でない場合[まだ、スコープにノードが
残っているコ a、  parent =getParent(nod
e)b、親が空でなく )query(scopeUn
der、parent)が真でない場合[これまでに追
加されていなかった、追加される親が残っているコ1)
 1nsert(scopeUnder、parent
) t:ノードをセットに追加するコ 2) parent = getParent(par
ent) [次の親を取得して、追加するコ c、 node = getNext(scope) 
[次の任意のノードをスコープから引き出すコ ■、 collectTrees(tree、5cop
e、compsubtrees。
1ist)。完全な木のルート・ノード、スコープ内に
あるノード識別子のセット、及び完全にスコープが指定
されたサブツリーのセットを与えた場合、スコープ内の
ノードから収集された複写されたサブツリーのリストを
返す。
第2a図及び第2b図の例の木を想定し、A1に基づく
木、ならびにB1、B3、C2、El、Fl、F2、G
1、及びG2を含んでいるセットをスコープとして与え
た場合、このルーチンはサブツリーB1“、B3“及び
El“をこの順序で含んでいるリストを返す。
入カニ ree サブツリーを収集する木のルート scope スコープ内にあるノードのセット。
compsubtrees スコープが指定されたノードだけで、そのサブツリーが
作られているノードのセット ist 新しいサブツリーが追加されるリスト 方法: 1、 create(scopeUnder) [その
下にスコープが指定されたノードを有しているノードを
保持するセットを作成する] 2、 buildscopeUnder(scope、
5copeUnder)[5copeUnderセツト
を作成するコ3、 addSubtrees(tree
、5cope、5copeUnder。
compsubtrees、1ist) [サブツリー
をリストに入れるコ ■、 deleteconnected(node、5
cope、compsubtrees。
1ist)。水内でスコープが指定されたノード、スコ
ープが指定されたノード識別子のセット、完全にスコー
プが指定されたサブツリーのセット、及びサブツリーの
リストを与えた場合、識別されたノード、及びノード自
身に接続されたスコープが指定されたノードを削除し、
削除されたノードを差し引いたスコープのセットを返し
、あらゆる孤児のサブツリーをリストに付は加える(孤
児のサブツリーとは、親が削除されてしまったサブツリ
ーである)。
第2a図の例の木を想定し、B1を与えた場合、このル
ーチンはB1、C2、Fl、及びF2を削除し、未変更
のリストを返す。B3を与えた場合、このルーチンはB
3を削除し、Dl及びB2をリストの終りに追加する。
入カニ node 削除が開始されるノード scope スコープ内にあるノードのセット。
compsubtrees スコープが指定されたノードだけで、そのサブツリーが
作られているノードのセット ist スコープが指定されたノードが削除された後残っている
サブツリーが追加されるリスト出カニ scope スコープ内にあるノードのセット。
list スコープが指定されたノードが削除された後残っている
サブツリーが追加されるリスト方法: 1、 query(compsubtrees、nod
e) の場合[完全なサブツリーがスコープ指定されて
いるかどうか、調べるコ a、 getFirstchild(node)が空の
場合[サブツリーがノードだけで構成されているかどう
か、調べる] 1) delete(scope、node) [ノー
ドは子を持つていない。単純なdeleteを使用して
、これをスコープから除去するコ 2) desroyHode(node)b、それ以外
の場合[サブツリーに2つ以上のノードがあるコ 1 ) create (subtreeNodes)
 [サブツリーにノードを保持するセットを作成するコ 2) getsubtreeHodes(node、5
ubtreeHodes)[サブツリー内のノードのセ
ットを 取得するコ 3) difference(scope、5ubtr
eeNodes)[スコープからノードを除去するコ 4) destroy(subtreeHodes)6
l− 5) destroySubtree(node) [
サブツリーを削除する] 2、それ以外の場合 a、 delete(scope、node) [この
ノードをスコープから除去するコ b、 child = getFirstChild(
node) [メートの子を取得するコ C1子が空でない場合[まだ子が残っているコ1) q
uery(scope、child)が真の場合[子が
スコープ内にあるコ a) deleteconnected(child、
5cope。
compsubtrees、1ist) [再帰して1
子に接続されているノードを削除し、リス トに追加するコ 2)それ以外の場合[子がスコープ内にないコa) a
ppend(list、child) [1eftov
erノードを1eftoverノード・リストに追加す
るコ 3) child = getRightsiblin
g(child)[次の子を取得するコ ロ2− d、 destroyNode(node) [削除し
たノードを破壊するコ IX 、 deleteTrees (tree、5c
ope、compSubtrees) o木全体のルー
ト、削除を試みるスコープが指定されているノード識別
子のセット、及び完全にスコープが指定されたサブツリ
ーのセットを与えた場合、スコープ・セットで識別され
たノードを、木から削除し、空のセットを返す。
入カニ ree 削除が行なわれる木のルート scope スコープ内にあるノードのセット。
compsubtrees スコープが指定されたノードだけで、そのサブツリーが
作られているノードのセット出カニ scope スコープ内に残っているノードのセット(削除後は何も
なくなる) 方法: 1、 create(orphanList) [削除
されたノードの子のリストを作成するコ 2、 isEmpty(scope)が真でない場合[
まだ削除できるノードがある] a、 node :getFirst(scope) 
[開始するノードを取得するコ b、 parent = getParent(nod
e) [親ノードを取得するコ C0親が空でなく )query(scope、par
ent)が真の場合[削除するノードの一番上まで上昇
するコ 1) node = parent (ノードが一番上
でなかったコ 2) parent = getParent(nod
e)d、親が空の場合[ルートがスコープ指定されてお
り、削除されたコ 1) Fail [ルートを削除するのは違法であり、
失敗するコ e、 1astToReplace = getLas
tchild(parent)f 、 query(s
cope、IastToReplace)でない場合[
スコープが指定された最後の子を見つけるコ 1)lastToReplace =getLefts
ibling(1astToRep lace) g、  firstToReplace = getF
irstchild(parent)h、 query
(scope、firstToReplace)でない
場合[スコープが指定される最初の子を見つけるコ 1)  firstToReplace =getRi
ghtsibling(f 1rstToRep 1a
ce)i 、  child = firstToRe
placej 、  prevchild = nul
lk、 prevchildが1astToRep 1
aceでない場合[親の最初にスコープが指定された子
と、最後にスコープが指定された子の間の範囲をループ
。スコープ内のノードを削除し、親が養子にしなければ
ならない孤児になったサブツリーを収集するコ 1 ) query(scope、child) [子
にスコープが指定されているかどうか調べるコ a、 deleteconnected(child、
5cope。
compsubtrees、orphanList) 
[子の下のスコープが指定された ノードを、子を含めて削除する。
孤児になったサブツリーを収集 するコ 2)それ以外の場合[子にスコープが指定されていない
コ a、 append(orphanList、chil
d)[f 1rstToReplaceと1astTo
Replaceの間のノードの範囲を置き換え るノードのリストに、子を追加 するコ 3) prevchild = child4) ch
ild = getRightsibling(chi
ld)1、 replace(parent、firs
tToReplace。
1astToReplace、orphanList、
5tatus)[f 1rstToReplaceと1
astToReplaceの間の66一 ノードを、orphanListのノードと置き換える
コ m、 makeEmpty(orphanList) 
[孤児のリストのクリーンアップを行なう] 3、 destroy(orphanList)X、 
removescoped(root、5cope、5
copeUnder。
compsubtrees 、 unremovedL
 tst) o所定のサブツリーに対するスコープが指
定されたルートのノード、スコープ・セットN 5co
peUnderセツト、完全にスコープが指定されたサ
ブツリーのセット、及び未除去サブツリーのリストを与
えた場合、未除去のサブツリーのリストに、除去されな
いルートの下のあらゆるサブツリーを付は加え、ルート
の下のすべてのスコープが指定されたノードを木から除
去する。
第2a図の例の木を想定し、B1及び空の未除去リスト
を与えた場合、このルーチンは未除去のリストに01を
返し、B1、C2、Fl、及びF2を除去する。B3及
び空の未除去リストを与えた場合、Dl及びB2を返し
、B3、G1、及びG2を除去する。
入カニ root ノードで、この下でスコープが指定されたノードが除去
されるもの。
scope スコープ内にあるノードのセット。
5copeUnder その下にスコープが指定されたノードがあるノードのセ
ット compsubtrees スコープが指定されたノードだけで、そのサブツリーが
作られているノードのセットunremovedLis
t 未除去のサブツリーが追加されるリスト出カニ scope スコープ内にあるノードのセット。
unremovedList 新しい未除去のサブツリーが追加されたリスト方法: 1、 query(compsubtrees、roo
t)の場合[サブツリー全体にスコープが指定されてい
るかどうかを調べる。指定されている場合には、スコー
プの更新だけを行なうコ a、 getFirstchild(root)が空の
場合[サブツリーがルートだけで構成されているかどう
かを調べるコ 1) delete(scope+root) [ルー
トに子がない。単純なdeleteを使用して、スコー
プからこのルートを除去する] b、それ以外の場合[サブツリーに2つ以上のノードが
ある] 1) create(subtreeHodes) [
サブツリー内でノードを保持するセットを作成するコ 2) getsubtreeHodes(root、5
ubtreeNodes)[サブツリー内の)−ドのセ
ットを取 得するコ 3) difference(scope、5ubtr
eeNodes)[ノードをスコープから除去するコ 4)  destroy(subtreeHodes)
2、それ以外の場合 a、 delete(scope、root) [この
ノードをスコープから除去する] b、 create(removedList) [除
去されたサブツリーをルートの下に保持するリストを作
成する。これらのサブツリーを収集してから、ルートに
接続するコ c、 1astToReplace = getLas
tchild(root)d、 1astToRepl
aceが空でなく N query(scope。
1astToRep 1ace )の場合[スコープが
指定されていない最後の子を見つけるコ 1) 1astToReplace =getLeft
sibling(lastToRep 1ace) e、 1astToReplaceが空でない場合[す
べての子にスコープが指定されている場合、 1astToReplaceは空となり、この場合、子
はどれも置換されない] 1) firstToReplace =getF 1
rstCh i ld (root)2) query
(scope、firstToReplace)の場合
[範囲が指定されていない最初の子を見つけるコ a) firstToReplace =getRig
htsibling (f 1rstToRep 1ace)f 、 chi
ld =getFirstchild(root)g、
 replaceRange = falseh、子が
空でない場合 1) query(scope、child) [子に
スコープが指定されているかどうか調べるコ a) removescoped(child、5co
pe。
5copeUnder 、 compsubtrees
 。
unremovedList) [接続されたスコープ
が指定されたノードの除去を再帰するコb) repl
aceRange = true [置換される子の範
囲内にあるかどうかを調べる] i、 append(removedList、chi
ld)[すべてが行なわれた場合に、子を ルートに接続しなければならない。
この子を、再接続される子のリスト に追加する] 2)それ以外の場合 a) child = 1astToReplacei
 、 replaceRange = false [
もはや1置換される子の範囲にはないコ b)それ以外の場合 i 、 replaceRange = true [
置換する必要のある子の範囲内にあ るコ c) query(scopeUnder、child
)の場合[子の子孫にスコープが指定され ているかどうか調べる] i 、 removeSubtrees(child、
5cope。
5copeUnder 、 compsubtrees
 。
removedL 1st) [スコープの指定されたノード を除去し、ルートに接続される 除去されたサブツリーを収集す るコ d)  append(unremovedList、
child)[子が除去されないので、この子に 未除去のサブツリーのリストを追加 するコ 3) child =−getRightsiblin
g(child)[次の子を処理するコ i、 1astToReplaceが空でない場合[ル
ートが少なくとも1つのスコープが指 定されていない子を持っている場合 には、置換だけを行なうコ 1) replace(root、firstToRe
place。
1astToReplace、removedList
) [除去されたノードのリストを有しているルートの
子を置換し、これによって除去されたサブツリーを作成
するコ j 、 destroy(removedList)X
l、 removeImmediate(root、f
irstScopedChild。
5cope 、 5copeUnder、 comps
ubtrees 、 l 1st) oスコープが指定
されている子を何しているスコープが指定されていない
ルートのノード、ルートの最初のスフ3− コープが指定された子、スコープ・セット、8゜。、e
Underセット、完全にスコープが指定されたサブツ
リーのセット、及びサブツリーのリストを与えた場合、
リストに、最初のスコープが指定された子の下で、その
右側にあるスコープが指定されたノードから収集された
ルートの下のサブツリーに付は加え、スコープが指定さ
れたノードをルートの下から除去する。
第2図の例の木を想定し、A、1、B1及び空のリスト
を与えた場合、このルーチンはBl、B3、及びElを
含むリストを返し、B1、B3、C2、El、Fl、F
2、G1及びG2を削除する。B2、G1及び空のリス
トを与えた場合、G1及びG2を含むリストを返し、G
1及びG2を木から除去する。
入カニ root ノードで、この下からサブツリーが除去されるもの。
firstScopedChiId スコープが指定されるルートの下の f 1rstScopedCh i ldcope スコープ内にあるノードのセット。
5copeUnder その下にスコープが指定されたノードがあるノードのセ
ット compsubtrees スコープが指定されたノードだけで、そのサブツリーが
作られているノードのセットist 新しいサブツリーが追加されるリスト 出カニ scope スコープ内にあるノードのセット。
list 新しいサブツリーが追加されたリスト 方法: 1 、 create(unremovedList)
 [木から除去されないが、収集されなければならない
サブツリーを保持するリストを作成するコ 2、1astToReplace = getLast
child(root)3、 query(scope
、1astToReplace)でない場合[スコープ
が指定される最後の子を見つけるコa、 IastTo
Replace = getLeftsibling(
lastToRep 1ace) 4、 chilcl = firstScopedCh
ild5、 replaceRange = fals
e6、子が空でない場合[子を通ってループする。
各子の下のスコープが指定されたノードを除去する] a、 query(scope、child)の場合[
子はスコープが指定されたかコ 1) child = 1astToReplaceの
場合a) replaceRange :false 
[もはや蒐置換される子の範囲にはないコ 2)それ以外の場合 a) replaceRange = true [置
換する必要のある子の範囲内にある] 3) removescoped(child、5co
pe。
5copeUnder 、 compsubtrees
 。
unremovedList) [スコープ力(tW、
定されたノード、及びそのスコープが指定さ れた子孫のすべてを除去する。すべて の未除去のサブツリーをリストに付は 加えるコ 4) append(list、child) C子を
、除去されたサブツリーのリストに追加する] b、それ以外の場合 1) query(scopeUnder、child
) [子itスコープが指定された子孫を持っているか
コ a) removesubtrees(child、5
cope。
5copeUnder 、 compsubtrees
 、 l 1st)[スコープが指定された子孫を 除去する] 2) replaceRange = trueの場合
[置換される子の範囲内にあるかどうかを調 べる] a) append(unremovedList、c
hild)[子の除去を行なってから、こ の子を、親の下に再挿入する] c、 child = getRightsiblin
g(child) [次の子を処理するコ ア。rep 1ace (root 、 f 1rst
scopedch i ld 。
1astToReplace、unremovedLi
st) [スコープが指定された子を含んでいる子の範
囲を、その範囲からのすべての未除去のサブツリーと置
き換えるコ 8、 destroy(unremovedList)
X II 、  removesubtrees (r
oot、5cope、5copeUnder+comp
subtrees、 1ist)。所定のサブツリーの
スコープが指定されていないルート・ノード、スコープ
・セット、5copeUnderセツト、完全にスコー
プが指定されたサブツリーのセット、及びサブツリーの
リストを与えた場合、リストに、スコープが指定された
ノードから収集されたルートの下のサブツリーを付は加
え、ルートの下からスコープが指定されたノードを除去
する。
第2図の例の木を想定し、B2及び空のリストを与えた
場合、このルーチンは空のリストを返す。
B2及び空のリストを与えた場合、G工及びG2を含ん
でいるリストを返し、木からG1及びG2を削除する。
入カニ root ノードで、この下からサブツリーが除去されるもの。
cope スコープ内にあるノードのセット。
5copeUnder その下にスコープが指定されたノードがあるノードのセ
ット compsubtrees スコープが指定されたノードだけで、そのサブツリーが
作られているノードのセット ist 新しいサブツリーが追加されるリスト 出カニ cope スコープに残っているノードのセット (removeの後には何もない)  ist 新しいサブツリーが追加されたリスト 方法: 1 、 getFirstscoped(root、5
cope、5copeUnder、top)。
[最初のサブツリーのtopを捕捉する]2、topが
空でない場合[まだ他にサブツリーが残っているコ a、 parent = getParent(top
)b、 removeImmediate(paren
t、top、5cope。
5copeUnder、compsubtrees、1
ist) [親の残っているスコープが指定された子孫
を除去し、リストを更新するコ C1それ以外の場合 1) getHextscoped(root、5co
pe+5copeUnder、parent、top)
 [追加する次のサブツリーを取得し、topが(親の
すべての他のスコープが指定された子孫とともに)除去
されているので、親から探索を開始する] Xll1. removeTrees(tree、5c
ope、compsubtrees。
1ist)。木全体のルート、除去を試みるノード識別
子のセット、及び相補のスコープが指定されたサブツリ
ーのセットを与えた場合、スコープが指定されたノード
から収集されたサブツリーのリストを返し、スコープの
指定されたノードを木から削除する。 removeT
reesはcollectTreesを呼び出し、次い
でde 1eteTreesを呼び出すのと同じ機能を
果たすが、removeTreesの方が効率がよい。
第2図の例の木を想定し、A1に基づく木、ならびにB
1、B3、C2、El、Fl、F2、G1、及びG2を
含むセットをスコープとして与えた場合、このルーチン
はサブツリーC2、B3、及びElをこの順序で含んで
いるリストを返し、Bl、B3、C2、El、Fl、F
2、G1、及びG2を木から削除する。
入カニ ree 木のルートで、これから木が除去されるcope スコープ内にあるノードのセット。
compsubtrees スコープが指定されたノードだけで、そのサブツリーが
作られているノードのセット出カニ cope スコープに残っているノードのセット (removeの後には何もない) ist 木から除去されたサブツリーのリスト 方法: 1、 create(scopeUnder) [その
下にスコープが指定されたノードを有しているノードを
保持するセットを作成する] 2. buildscopeUnder(scope、
5copeUnder)[5copeUnderセツト
を作成するコ3、 query(scope、tree
)の場合[トップ・ノードにスコープが指定されている
かどうか調べるコa、 parent = getPa
rent(tree) [ノードにスコープが指定され
ている。その親を取得するコb、 mが空の場合[木が
ルートであるかどうか調べる] 1) Fail [ルートを除去できないコc、 cr
eate(unremovedList)d、 rem
ovescoped(tree、5cope、5cop
eUnder。
compSubtrees、unremovedLis
t) [トップ1ノード及びそのスコープが指定された
子孫を除去し、未除去のサブツリーのリストを返すコ e、 replace(parent、tree、tr
ee。
unremovedList、5tatus) [木を
未除去のサブツリーと置き換えるコ f、 append(list、tree) [木を除
去されたサブツリーのリストに入れるコ g、 destroy(unremovedList)
4、それ以外の場合 a、 removeSubtrees(tree、5c
ope+5copeUnder。
compsubtrees、1ist) [) ツブ・
ノードにスコープが指定されていない。サブツリーを除
去し、これらをリストに入れるコ XI”/、 1nsertLeft(node、1is
t)。サブツ、リーのリストを木の所定のノードの左側
へ挿入する。
入カニ node 左側へ挿入するノード  ist 挿入するサブツリーのリスト 方法: 1 、 parent = getParent(no
de) [ノードの親を見つけるコ 2、 prey = getLeftsibling(
node) [:その後に挿入を行なうノードを決定す
るコ 3、 graft(parent、prey、1ist
、5tatus) [木を挿入するコ XV、 insertRight(node、1ist
)。サブツリーのリストを木の所定の7−ドの右側へ挿
入する。
入カニ node 右側へ挿入するノード  ist 挿入する木のリスト 方法: 1、 parent = getParent(nod
e) [ノードの親を見つけるコ 2、 graft(parent、node、1ist
、5tatus) [木を挿入するコ XVl、 1nsertAround(node、1i
st)oサブツリーのリストを、リストのサブツリーの
1つのリーフの1つの子として、所定のノードを存して
いるそのノードの親の子として挿入する。選択されたリ
ーフは、所定のノードが適合する最初のリーフである。
入カニ node 周囲へ挿入されるノード list 挿入する木のリスト 方法: 1゜parent = getParent(node
) [ノードの親を見つけるコ 2、 prey = getLeftsibling(
node) [その後に挿入を行なうノードを決定する
コ 3、 create(childList) [接合す
るダミーのりストコ4、 append(childL
ist、node) [後で接合するためにノードを記
憶する] 5、 replace(parent、node、no
de、1ist、5tatus)[ノードを除去し、こ
れをリストと置き換えるコロt、 tree =get
First(list)7、木が空でない場合[リスト
内の木を繰り返すコa、 1eaf = getFir
stLeaf(tree)b、リーフが空でない場合[
木のリーフを繰り返すコ 1)  graft(leaf、null、child
List、5tatus)2) 5tatus = o
kの場合 a) return [周囲への挿入の成功]3) 1
eft =getNextLeaf(tree、1ea
f) [:次の木を試みるコ c、 tree = getHext(list、tr
ee) [次の木を試みるコ 8、 fail [試みることのできる木が他にない。
不成功コ X■、 1nsertlJithin(node、1i
st)。サブツリーのリストを、リストのサブツリーの
1つのリーフの1つの子として、所定のノードの子を有
しているそのノードの子として挿入する。選択されたリ
ーフは、子が適合する最初のリーフである。
入カニ node 内部へ挿入されるノード  ist 挿入する木のリスト 方法: 1.2arent = node [内部に挿入される
親を見つけるコ 2、  create(childList)3、 n
ode = getFirstchild(node)
 [最初の子を見つけだすコ 4、ノードが空でない場合[子を走査するコa、 ap
pend(childList、node) [子を思
い出すコb、 node = getRightsib
ling(node) [次の子コ5、 replac
e(parent、getFirstchild(pa
rent)。
getLastchild(Parent)、1ist
、5tatus) [子をすべてリストと置き換えるコ ロ、 tree = getFirst(list)7
、木が空でない場合[リストの木を繰り返すコa、 1
eaf =getFirstLeaf(tree)b、
リーフが空でない場合[木のリーフを繰り返す] 1) graft(leaf、null、childL
ist、5tatus)2) 5tatus = ok
の場合 a) Return [内部への挿入の成功コ3) 1
eaf = getHextLeaf(tree、1e
af) [次のリーフを試みるコ c、 tree = getNext(list、tr
ee) [次の木を試みる] 8、 fail [試みることのできる木が他にない。
不成功コ X■、 1nsertTrees(node、rela
tion、1ist)o ターゲット・ノード、このタ
ーゲット・ノードとの関係、及び挿入されるサブツリー
のリストを与えた場合、ターゲット・ノードに対する関
係で、サブツリーを挿入する。
入カニ node 内部へ挿入されるノード relation ノードに対するターゲットの関係  ist 挿入する木のリスト 方法: 1、次のCa5eの関係 a、 1eft 1) 1nsertLeft(node、1ist)b
、 right 1) insertRight(node、1ist)
c、 around 1) 1nsertAround(node、1ist
)d、 within 1 ) 1nsert%Jithin(node、 1
ist)XIX、 checkcompsubtree
(node、5cope、compsubtrees。
a 1readychecked)。ノード、スコープ
・セット、完全にスコープが指定されたサブツリーを持
っていることが既にわかっているノードのセット、及び
完全なスコープが指定されたサブツリーについて既にチ
エツク済みのノードのセットを与えた場合、ノードの下
のサブツリーがスコープの指定されたノードだけで作成
されているかどうかを示す。
入カニ node チエツクの対象となるサブツリーのルートcope スコープ内にあるノードのセット。
compsubtrees スコープが指定されたノードだけで構成されているサブ
ツリーを有していることが既にわかっているノードのセ
ット a 1readychecked 既にcheckcompsubtreeによってチエツ
クされているスコープ内のノードのセット 出カニ compsubtrees スコープが指定されたノードだけで構成されているサブ
ツリーを有していることがわかっているノードのセット a lreadychecked checkcompsubtreeによってチエツクさ
れているスコープ内のノードのセット 方法: 1、 query(scope、node)の場合[ノ
ードがスコープ内にあるかどうか調べるコ a、 query(alreadychecked、n
ode)[checkCompSubtreeが既にこ
のノードをチエツクしたかどうかを調べるコ 1 ) return b、 In5ert(alreadychecked、
node) [ノードを)checkcompsubt
reeがチエツクを行なったノードのセットに追加する
] C,child = getFirstchild(n
ocle)d、子が空でない場合[ノードの子がまだあ
る間ループするコ 1) checkcompsubtree(child
、5cope。
co+opsubtrees、AlreadyChec
ked) [子の下のサブツリーに完全にスコープが指
定されているかどうかをチエツクし、指定されている場
合には、ノードをcompsubtreδ′Sに追加す
るコ 2) query(compsubtrees、chi
ld)でない場合a、  return 3)  child = getRightsibli
ng(child)[次の子をチエツクする] e、 insert(compsubtrees、no
de) [ノードにスコープが指定されており、すべて
のその子のサブツリーにスコープが指定されているので
あるから、ノードのサブツリーにはスコープが指定され
るコ XX、 buildcompSubtrees(sco
pe、compsubtrees)oスコープ・セット
を与えた場合、スコープが指定されているノードだけで
構成されているサブツリーのルートであるノードのセッ
トを返す。どのサブツリーにスコープが完全に指定され
ているかを判断するが、これは完全なサブツリーととも
に操作した場合に1collectTrees、 re
moveTrees及びde 1eteTrees操作
が近道を通れるからである。
第2図の例の木を想定した場合、このノードのセットは
C2、Fl、F2、G1、G2、及びElを含む。
入力: scope スコープ内にあるノードのセット。
出カニ compSubtees スコープが指定されたノードだけで、そのサブツリーが
作られているノードのセット方法: 1、 create(alreadychecked)
 [完全なサブツリーについてチエツクされたノードの
セットを初期設定するコ 2、 node =getFirst(scope) 
[:ノードをスコープから取り出すコ 3.7−ドが空でない場合[スコープ内に他のノードが
ある間ループする] a、 checkcompsubtree(node、
5cope。
compSubtrees、alreadyCheck
ed) [ノードの下のサブツリーに完全にスコープが
指定されているかどうかをチエツクし、指定されている
場合には、ノードを compsubtreesに追加するコb、 node
 =getHext(scope) [次の任意のノー
ドをスコープから取り出すコ 4、 destroy(alreadychecked
)主な関数 以下の関数は上述のサブルーチンを使用して定義される
。これらの関数は汎用化された構造編集操作、すなわち
削除、複写、移動、挿入の高レベルの視点を提供する。
第11図は以下で説明する処理の流れを示す。データを
取り扱う工程を中心に検討を行なうが、スコープ、操作
のタイプ、ターゲット・ノード、及びターゲット・ノー
ドに対する関係を指定するのに必要なユーザの対話につ
いては検討しない。
A、 Delete(tree、5cope)。スコー
プを木から削除する。
入カニ ree 削除を開始する木のルート scope スコープ内のノードのセット 出カニ scope スコープ内に残っているノードのセット[削除後は何も
残らないコ 方法: 1、 create(compsubtrees) [
サブツリーに完全にスコープが指定されているノードに
対するセットを作成する] 2、 buildCompSubtrees(scop
e、 compsubtrees)[サブツリーに完全
にスコープが指定されているノードのセットを構築する
コ 3、 deleteTrees(tree、 5cop
e、 compsubtrees)[木を削除するコ 4、 destroy(compSubtrees)B
 、 Copy(tree、5cope、node、r
elation) oスコープをターゲット位置に複写
する。
入カニ ree 削除を開始する木のルート scope スコープ内のノードのセ・シト node ターゲット・ノード relation ノードに対するターゲットの関係 出カニ scope スコープ内に残っているノードのセット[複写後は何も
残らないコ 方法: 1、 create(treelist) [スコープ
を構成する木のりストコ 2、 create(compsubtrees) [
サブツリーに完全にスコープが指定されているノードに
対するセットを作成するコ 3、 buildCompSubtrees(scop
e、 compsubtrees)[サブツリーに完全
にスコープが指定されているノードのセットを構築する
コ 4、 collectTrees(tree、 5co
pe、 compsubtrees。
treeList) [スコープが指定されたサブツリ
ーを収集する] 5、1nsertTrees(node、 relat
ion treeList) [収集された木を、ター
ゲットに挿入するコロ、 makeEmpty(sco
pe) [スコープをクリアするコア 、 deSjr
□y(compSubtrees)8、 destro
y(treeList)c 、 Move(tree、
5cope+node、relationLスコープを
ターゲット位置へ移動する。
入カニ ree 削除を開始する木のルート scope スコープ内のノードのセット node ターゲット・ノード relation ノードに対するターゲットの関係 出カニ scope スコープ内に残っているノードのセット[移動後は何も
残らないコ 方法: 1、 create(treelist) [スコープ
を構成する木のりストコ 2、 create(compsubtrees) [
サブツリーに完全にスコープが指定されているノードに
対するセットを作成するコ 3、 buildCompSubtrees(scop
e、 compsubtrees)[サブツリーに完全
にスコープが指定されているノードのセットを構築する
] 4、 removeTrees(tree、 5cop
e、 compsubtrees。
treeList) [スコープが指定されたサブツリ
ーを収集し、これらを木から削除する] 5、1nsertTrees(node+ relat
ion treeList) [収集された木を、ター
ゲットに挿入するコロ、  destroy(comp
Subtrees)7、  destroy(tree
List)D 、 In5ert(tree、node
、relation、nodeType) o所定のタ
イプの新しいノードを、ターゲット位置に挿入する。
入カニ ree 削除を開始する木のルート node 内部に挿入されるノード re lat ion ノードに対するターゲットの関係 nodeType 作成されるノードのタイプ 方法: 1、 create(treelist) [スコープ
を構成する木のりスト] 2、 createHode(newNode、nod
eType) [適切なタイプでノードを作成するコ 3、 append(treeList、newMod
e)4.1nsertTrees(node、rela
tion、treeList)t5.destroy(
treeList)好ましい実施例の拡張 木構造のデータを処理するための多くの編集システムが
開発されているが、本発明者はn元の木を処理し、この
ような木に構文規則を強制する先行技術を知らない。好
ましい実施例のこの拡張を、以下で説明する。
従来技術において、構文制御形エディタによって処理さ
れた木は、バッカス・ナウル形式(BNF)の構造を内
部水に直接適用した形式を取る。
BNFは一連のデータ内に有効な関係を指定する手段で
ある。何らかの言語に属するものと認識できる正しい順
序を定義するために、BNFは開発された。言語の文法
関係を説明する中間段階を表わすのに木を使用すること
は、その後に行なわれるようになった。
BNFはプロダクションという規則で構成されている。
各プロダクションは何らかの区切り文字、一般には矢印
、またはストリング「::=」によって分離された右辺
と左辺を有している。左辺は単一のワードからなってい
る。(常にそうなのではない。BNFの最も一般的な記
述は、プロダクションの両辺に列を入れることを認める
ものである。
しかしながら、この機能は実際のシステムに使用するに
は困難過ぎるものであり、またプログラミング言語など
の正式な言語には不必要なものである。)このワードは
非端末ワードである。右辺はゼロ個または複数個のワー
ドからなっており、これらは非端末ワードであっても、
端末ワードであってもかまわない。端末ワードがプロダ
クションの左辺に現れることはまったくない。木のノー
ドが各非端末ワードに対して生成された場合には、左辺
としてこの非端末ワードを存しているプロダクションの
右辺は、このノードに対する正しい子を定義する。
非端末ワードを2つ以上のプロダクションの左辺に入れ
てもかまわない。この場合、右辺が等しい必要はない。
すなわち、ノードの単一のタイプは異なる時点で、異な
るタイプの子を有することができる。
非端末ワードをプロダクションの左辺及び右辺の両方に
入れてもよく、あるいは文法の依存関係内で深くネスト
してもよい。この帰納は列をBNFで表現する方法であ
る。たとえば、下記はステートメントの列を帰納的に定
義する。ここで定義されたステートメントの列が、長さ
ゼロにならないことに留意されたい。
statements statements statement statement ifStatement ::=  statement ::=  statement  statement
::=  ifstatement ::=  whilestatement::=  ’
IF’  condition  ’THEN’sta
tement ifstatement    ::=  ’IP’ 
 conclition  ’THEN’statem
ent  ’ELSE’ statement whilestatement ::= ’W旧LE’
 condition ’DO。
statements  ’END’ 言語全体の規則を単純なりNFで書くのは、効率が悪い
。BNFを普遍的に拡張し、規則の簡潔な表現ができる
ようにする。拡張は垂直のバー「1」を用いて、端末ワ
ード及び非端末ワードの間での選択を示し、角かっこ「
「コ」を使用して、オプションの端末または非端末ワー
ドを示し、かつ中かっこ「()」を使用して、長さが0
ないしnのステートメントの列を示すことを含んでいる
(ただし、nは任意の正の整数である)。これらの拡張
の正確な意味の定義は、実施形態ごとに異なる。たとえ
ば、上記の6つのプロダクションを次のものによって置
き換えることができる。
statements   ::=statement
 (statement)statement    
::=ifStatementwh i lestat
ement ifstatement   ::= ’IF’ co
ndition ’THEN’statement [
’ELSE’ statement1 whilestatement ::= ’WHILE
’ condition ’Do。
statements ’END’ これらの拡張はBNFの表現力を拡張するものではなく
、書きやすくするだけのものである。これらの拡張の単
純なりNFへの変形は、簡単である。このため、BNF
の拡張はくだけた言い方で、「構文の砂糖」と呼ばれる
が、これはこれらがBNFの構文を理解しやすくするか
らである。
木の各ノードが単純なりNFのいくつかのプロダクショ
ンの特定の場合を表わすように構築された木を、バーズ
木という。本明細書で提示する簡単な文法を使用して、
ステートメントの有効な列を表わすバーズ木を、第5図
に示す。
使用されている中間ノードの数に留意されたい。
本発明者が認識している先行技術において、構文制御形
エディタによって処理される木は、単純なりNF槽構造
直接内部水に表現した形態を取っている。これは木のノ
ードの各タイプが、一定数の子を持っていることを必要
とする。
本発明の好ましい実施例は、ノーPが可変数の子を有す
ることを可能とし、また拡張BNFとまったく等しい形
態で木を維持することによって、中間ノードの必要性を
除去する。さらに、拡張BNF (D 中間物であるい
くつかのノードが、木に存在する必要はない。この改善
された木の表現を使用すると、以前の単純な文法を第6
図に示すように表わすことができる。
この表現では、多くの小さいノードが必要なことに留意
されたい。列の「バックボーン」として用いる中間ノー
ドが多(なればなるほど、構文制御形エディタのユーザ
が関心を持つデータ、すなわち最低レベルのステートメ
ント自体に利用できる記憶域は少なくなる。さらに、エ
イダ・プログラミング言語のような大規模で、複雑な言
語では、共通言語構成を定義するのに必要な中間プロダ
クションの数は、きわめて多くなる。これらのノードす
べてを処理するには、時間がかかり、ユーザの処置に対
するエディタの応答時間が遅くなる。
好ましい実施例のこの拡張の背景をなす基本的な概念、
すなわち構造エディタの構文の正しさを維持する(それ
故、このエディタを構文制御形エディタとする)方法は
、「ソケット」を使用することである。ソケットはノー
ドのタイプ、及び所定のノードと関連付けることのでき
る関係を定義する。
本実施例はデータ及び関係を表わすn元の木を維持する
。換言すると、各ノードはこれに関連する任意の数を他
のノードを宵することができる。
各ノード(正確に言えば、各タイプのノード)は一定数
のソケットまたは許容可能な関係を存する。
しかしながら、ソケットの基準を満たす任意の数のノー
ドを、このソケットを介して、所定のノードと関連付け
ることもできる。
以下の文法の例を使用して、ソケットの概念の説明を援
助する。「1」、「「コ」及び「()」はこの文法にお
いて、拡張BNFの場合と同じことを意味する。この文
法は木の処理のためだけに使用されるものであるから、
非端末ワードは示さない。
block      ::= (DECLARE) 
(statement)DECLARE     ::
= VARPART TYPEPARTVARPART
     ’ TYPEPART    − statement     ::=IFSTATEM
ENTWHILESTATEMENT IFSTATEMENT   ::= C0HDITI
ON TIIENPART[ELSEPART] C0HDITIOH TIIENPART     : : =(state
ment)ELSEPART     ::=(sta
temenUV)III、ESTATEMENT ::
=C0NDITION nullorblocknul
lorblock   ::= NULLSTATEM
ENT l blockNULLSTATEMENT 
  ::=各右辺の非端末ワードは左辺と関連するソケ
ットを表わす。各ソケットは言語定義テーブルで定義さ
れた2つの属性を有している。この2つの属性は、ソケ
ットに接続できるノードの数を判断するソケット・タイ
プ、及び他のどのノードのタイプをこのソケットに接続
できるがを判断するこのソケットに対する接続規則であ
る。メート・タイプ(左辺で定義される)のすべてのノ
ードは、そのソケットの同一の定義を共有する。
ソケットに有効なタイプは次のとおりである。
必須 接続規則に合致するノードを、常にソケットに接続しな
ければならない。必須ソケットは文法では、「()」ま
たは「「コ」で囲まれていない右辺の非端末ワードとし
て表わされる。たとえば、DECLAREプロダクショ
ンは2つの必須ソケット、VARPART及びTYPE
PARTを有している。
オプション 接続規則に合致するノードをソケットに接続することも
、空にしておくこともできる。オプションのソケットに
対して行なえる接続は、最大1セツトである。オプショ
ンのソケットは文法では、「「コ」で囲まれた右辺の非
端末ワードとして表わされる。たとえば、IFSTΔT
EMENTプロダクシロンはオプションのソケット、[
ELSEPARTコを有している。
n元 接続規則に合致するノードをソケットに接続することも
、空にしておくこともできる。n元のソケットに対して
行なえる接続のセットの数に制限はない。n元のソケッ
トは文法では、「()」で囲まれた右辺の非端末ワード
として表わされる。たとえば、ブロック・プロダクショ
ンは2つのn元のソケット、(DECLARE )及び
(statement )を有している。
各ソケットはプロダクションで決定された、ソケットで
表わされる非端末ワードを定義する単一の接続規則属性
を有している。接続規則は認められる接続の性格を定義
する。接続規則のタイプは4つだけである。すなわち、
単純なタイプ2つき、複雑なタイプ2つである。単純な
タイプは次のとおりである。
構成 構成規則は言語の抽象概念の定義ないし中間定義と対照
をなすものとして、基本的な言語構成、すなわち言語の
使用中に現われる語または句を定義する。構成規則は言
語の指定によって定義される。構成規則は水内に実際に
現われるノードを定義する唯一の規則である。文法例に
おいて、構成規則は大文字の非端末ワードにょって識別
サレル(DECLAREXVARPART、 TYPE
PART 。
1.)。ソケットが構成コネクタ規則名を含んでいる場
合、これは構成コネクタ規則によって定義されたノード
を、ソケットの下に挿入しなければならないことを意味
する。たとえば、IFSTATEMENTノードは構成
接続規則による3つのソケット、すなわちC0HDIT
IO旧こ対するもの、THENPARTに対するもの、
及びELSEPARTに対するオプションのものである
。(第7図のノード4はIFSTATEMENTである
。) ノードのタイプには、その構造を定義する構成規則と同
じ名前が与えられる。たとえば、IFSTATEMEN
T規則で定義されたノードは、IFSTATEMENT
のノード・タイプを有している。
コネクタ・セット コネクタ・セット規則は多くの接続規則タイプの1つの
ノードが、ソケットに接続することを可能とする。(ソ
ケットが必須またはオプションのタイプを有している場
合、このソケットに接続できるノードの最大数が1であ
って、各種類に1つではないことに留意されたい。)コ
ネクタ・セット規則は文法の例では、次のように表わさ
れている。
lhs ::=rhl I rh2 l rh3 l 
rh4  、、。
ただし、すべてのrrhx Jは構成規則タイプを有す
る単一の必須ソケットである。文法の例において、唯一
のコネクタ・セ°ットはrstatement Jであ
る。rnu l 1orb 1ock Jはrbloc
kJが構成規則でないので、コネクタ・セットではない
rblockJが2つ以上のソケットをその右辺に持っ
ており、rDECLARE Jとrstatement
 Jが必須ソケットではなく、かつrstatemen
t Jが構成規則でないので、rblockJはコネク
タ・セットではない。
各構成規則に整数値を割り当てることにより、各構成規
則に対するビット位置を含んでいるビット・アレイとし
て、コネクタ・セットを言語定義テーブルに実現できる
。コネクタ・セット規則が参照する各構成規則に対する
それぞれのビット位置に、1が入れられ、他のビットは
0にセットされる。文法解析アルゴリズムは次いで、き
わめて迅速なビット・アレイ・ルックアップを行なうこ
とによって、与えられた構成規則がコネクタ・セット内
にあるかどうかをチエツクできる。コネクタ・セットは
標準BNFの言語抽出概念または中間ノードを表わす。
複雑な接続規則タイプは編集中の工程に対して高価なも
のにつく。しかしながら、これらは言語の定義でははる
かにまれなものである。上述の2つの規則はきわめて効
率がよく、実際の言語の事例の90%超をカバーしてい
る。エイゾ・プログラミング言語に類似した言語のテス
ト・ケースの文法では、接続規則の97%が構成規則ま
たはコネクタ・セット規則であった。これらの単純な規
則のタイプを、以下で説明する方法とともに使用した場
合、子のノードを子のノード当たりきわめて少ないテー
ブル・ルックアップで、親のノードに接合することがで
きる。
以下の複雑な接続規則タイプは、単一のソケット内にネ
ストされたソケットに対する機構を提供する。これらの
接続規則はきわめて標準的なパーサを定義し、さまざま
な規則タイプがさまざまな効率を得ることを可能とする
コネクタ 合致する接続規則タイプが構成規則に限定されないとい
う意思外は、コネクタはコネクタ・セットと類似してい
る。コネクタ・セット規則と同様に、コネクタ規則は文
法の例では、次のように現われる。
lhs ::=rhl I rh2 l rh31 r
h4 I 、、。
相違点は、各rrhxJが構成規則を宵する単一の必須
ソケットである必要がないところである。
コネクタ・セット、コネクタ、または配列コネクタの接
続規則タイプを有する、単一の必須ソケットでもよい。
文法の例において、 r nu l 1orb 1ock Jはコネクタ規則
である。
配列コネクタ 配列コネクタ規則はソケットを、サブソケットに分割す
る。各サブソケットは任意のタイプのものでよく、かつ
任意のタイプの接続規則を有することができる。「1」
というBNFの符号は配列コネクタ規則では認められな
い。すなわち、サブセットの代替定義はない。文法の例
において、rblockJは配列コネクタ規則である。
本発明の方法は、サブツリーのリストまたは範囲を使用
する、接合及び置換を含む編集操作によって、これらの
構成規則を維持する方法を画定する。
以下の例は接合操作及び置換操作の結果を示す。
これらの例は第7図に示した初期水を有する文法の例に
基づくものである。
この木から開始すると、IFSTATEMENT及びW
HILESTATEMENTがノード9の下、及びノー
ド11の後ろに接合される。その結果を第8図に示す。
第9図はI FSTATEMENT及びMl(ILES
TATEMENTと、ノード1の下の)−ド3及び4を
置き換えた結果を示す。
第10図は文法の例に含まれている情報の表形式、なら
びに本発明の好ましい実施例の実施態様を示す。これを
使用して、上記の接合及び置換操作を行なう。
表には、文法のあらゆるプロダクションに対する行が1
つある。
「規則のタイプ」という欄は各プロダクションがどのタ
イプの規則であるかを示している。
「子は複雑か?」という欄はコネクタまたは配列コネク
タ規則が、構成規則のソケットのいずれかに対する接続
規則として使用されているかどうかを示す。使用されて
いれば、ソケットに接続されている子は複雑(真)であ
り、使用されていなければ、複雑ではない(偽)。r子
は複雑か?」フィールドは、高速ではあるが、融通性の
ない接合または置換アルゴリズムを使用できるかどうか
(複雑でない子)、あるいは遅いが、融通性のあるアル
ゴリズムを使用しなければならないかを判断するために
使用される。
「ソケットの数」という欄は、構成、コネクタ、または
配列コネクタ規則に対して、ソケットがいくつ定義され
ているかを示す。
構成、コネクタ、または配列コネクタ規則に対する「ソ
ケットまたはビット・アレイ」という欄は、ソケットの
リストを含んでいる。各ソケットはソケットのタイプ(
必須(r)、オプション(0)、n元(n))及び接続
規則の数で構成されている。
コネクタ・セット規則に対する「ソケットまたはビット
・アレイ」という欄は、ビット・アレイを含んでいる。
ビット・アレイは各規則に1つのビットで構成されてい
る(規則の数Oないしnが付けられている)。ビットの
1という値は、対応する規則によって定義されたノード
を接続できることを示す。第10図において、規則4、
IFSTATEMEHT規則に対応するビット(ビット
番号5)及びW)IILEsTATEMEHT規則(ヒ
ツト番号9)は1にセットされる。
上述の接合操作、すなわち第8図に示す構造をもたらす
第7図のノード9の下、及びノード11の後にIFST
ATEMENT及びWHILESTATEME)ITを
接合する操作に含まれる工程は、以下のとおりである。
1、プロダクションの定義(第10図)から、THEH
PARTノード9が複雑な子を存していない(複雑な子
は偽である)ことを判断する。これは高速接合アルゴリ
ズムを使用できることを意味する。(高速アルゴリズム
は新しい子が、ターゲット・ソケットに適合するかどう
かをチエツクするだけである。低速アルゴリズムはノー
ドのすべての子について、あるソケットから、他のソケ
ットに、そのいずれかを移動する必要があるかどうかを
チエツクする。) 2、ノード11を含んでいるソケット(「後に挿入され
た」もの)がn元であるかどうかを判断する。n元であ
れば、新しいノードを挿入でき、そうでなければ、ソケ
ットが既に占有されているから、接合は失敗する。
3、ソケットに対する接続規則が、接合されるノードの
タイプの挿入を許容するかどうか判断する。ノード9の
ソケットは「ステートメント」ソケット(接続規則4)
であって、コネクタ・セット接続規則タイプを有してい
る。規則4のコネクタ・セットに関連するビット・アレ
イは、IFSTATEMENT及びI/IILEsTA
TEMEHT / −ドをこのソケットに接続できるこ
とを指定する。挿入される最初のノード(ノード15)
はIFSTATEMENTノードである。第2のノード
(ノード16)はV旧LESTATEMENTノードで
ある。それ故、両方のノードをソケットに挿入できる。
4、ノードをソケットに挿入する。
第7図のノード3及び4を、第9図をもたらすIFST
ATEMEHT及びWHILESTATE)IENTと
置き換えることに関係する工程は次のとおりである。
1、(υHILESTATEMENTノード1)が複雑
な子を宵しているかどうか判断する。有している場合に
は、低速アルゴリズムを使用しなければならない。(低
速アルゴリズムはメートのすべての子について、あるソ
ケットから、他のソケットに、そのいずれかを移動する
必要があるかどうかをチエツクする。) 2、 C0NDITIONノード2、IFSTATE1
4ENTノード15、WHILESTATEMENTノ
ード16、及びltlHILEsTATEMEHTノー
ド5を含んでいるchildrenListを構築する
。これらは置換後、ノード1の新しい子になるノードで
ある。
3 、 C0NDITION / −1’ 2がWII
ILESTATEMENT /−ド1の最初のソケット
に適合するかどうかを判断する。これはυHILEST
ATEMENTの最初のソケットが、C0NDITIO
N構成に接続する必須ソケットだからである。これはノ
ード1の最初のソケットを満たす。
4、ノード1に残っているソケットが1つだけであるか
ら、ノードエ5.16、及び5を第2のソケットに挿入
することが試みられる。このソケットに対する接続規則
は、規則10、nullorblockである。nu 
l Iorb 1ockがコネクタ構成規則タイプであ
るから、新しいノードを適正に挿入できるものが見つか
るまで、新しいノードの仮想ソケットへの挿入を試みる
(コネクタ規則のソケットを仮想ソケットと呼ぶが、こ
れはこれらのソケットが結果として生じる木のソケット
に対応していないからである。) a、 nullorblockの最初の仮想ソケットは
構成規則11 )(IILLsTATE)4ENTであ
る。挿入される次のノード、IFSTATEMENTノ
ード 15がNLILLSTATEMENTではないの
で、こ のテストは失敗する。
b、 nullorblockの次の仮想ソケットは、
配列コネクタ規則Oのブロックである。配列コネクタ規
則の文法解析は、構成規則の文法解析にきわめて類似し
ている。途中でノードを挿入しながら、配列コネクタの
仮想ソケットの左から右へ移動が行なわれる。
1)規則Oのブロックの最初の仮想ソケットは接続規則
DECLAREを有するn元である。次のノードIFS
TATEMENTノード15はDECLAREでないの
で、仮想ソケットに挿入することはできない。
しかし、n元のソケットは子を持つ ことができないので、テストは失敗 しない。
2)ブロックの第2のソケットは接続、またはステート
メントの規則を有 するn元である。ステートメント はIFSTATEMENTまたはWlllLESTAT
E)lENTのいずれかを受は入れるコネ クタ・セット規則タイプである。
次の3つのノード(ノード15. 16及び5)はすべてIFSTATEMEHTまたはv
■■LESTATEMENTテアルカら、これらはこの
仮想ソケット内 で有効である。文法解析はこれで 終了し、ノード2.15.16及 び5をノード1のソケットに接続 する方法が決定された。
5、すべての子を、■(ILESTATEMEHTノー
ド1ソケットから除去する。
8、 C0NDITIONノード2を、WHILEST
ATEMENTノード1の最初のソケットに接続し、I
FSTATEMENT及びWHILESTATE14E
NT / −)’ 15.16、及び5を、Wl(IL
ESTATEMENT / −)’ 1 ノ第2のソケ
ットに接続する。
好ましい実施例の拡張で使用されるユーティリティ関数 以下の基本操作がユーティリティ関数によって利用でき
るものと想定する。
木を操作する関数。木の操作は公知の分野である。操作
は以下に挙げる単純なものに限定される。
getF 1rstCh i ld 与えられたノードの最初の子を返すか、ノードに子がな
い場合には、空文字を返す。
getLastCh i ld 与えられたノードの最後の子を返すか、ノードに子がな
い場合には、空文字を返す。
getRightsibling ノードの右側の兄第を返すか、ノードがその親の最後の
子である場合には、空文字を返す。
getLeftsibling ノードの左側の兄第を返すか、ノードがその親の最初の
子である場合には、空文字を返す。
insertMode 親のノードの下、及び左側の兄第の後ろにノードを挿入
する。
removeNode ノードを親のノードの下から除去する。
項目のリスト、特にサブツリーを操作する関数O reate 新しい空のリストを作成する。
destroy リストを完全に破壊する。
ppend 項目をリストの終りに追加する。
prepend 項目をリストの最初に追加する。
getFirst リストの最初の項目を返す。
getNext リスト及びリストの項目を与えた場合、リストの次の項
目を返すか、あるいは与えられた項目が最後のものであ
る場合には、空文字を返す。
これらの関数はすべて充分に定義されており、業界で周
知のものである。
好ましい実施例の拡張に必要なデータ ノードには2つの関連するデータ、すなわちノード・タ
イプとソケット番号が必要である。ノード・タイプはI
FSTATEMENT /−ドまたはWHILESTA
TEMENTノードなどのノードのタイプを定義する。
ソケット番号は特定のノードによって占存されているそ
の親のソケットを識別する。この方法は各ノードのタイ
プ及びその親のタイプを使用して、ノードをソケットに
割り当てる。ノードをソケットに割り当てることができ
ない場合には、操作は失敗する。
ノード・タイプ・フィールド(ノードを定義する接続規
則と同じもの)は、言語定義テーブル。
アレイに対する指標である。ソケ・ソト・フィールドは
整数であって、ノードが現在割り当てられているソケッ
トを示す。
以下の操作がノード・データを操作するために提供され
る。
getNodeType ノードを与えた場合、そのタイプを返す。
getParentsocket ノードを与えた場合、それが割り当てられているソケッ
トを返す。
5etParentSocket ノード及びソケットの指標を与えた場合、そのメートを
そのソケットに割り当てる。この関数はソケットが子の
間に順序よく割り当てられているかどうかのチエツクは
行なわない。これを行なうのは、接合及び刈込み操作の
責任である。
言語定義テーブルは接続規則番号の指標が付いた構想の
配列である(ノードを関連させた場合、ノード・タイプ
と呼ぶ。以下の説明では、これら2つの語は、互いに置
き換えて使用される。)ノードに実際に割り当てられる
のが、構成接続規則タイプを有する接続規則だけである
ということに留意されたい。他の規則はソケット割当て
工程で、接続規則として使用される。構造に含まれてい
るデータは、接続規則の各タイプごとに異なっている。
接続規則のタイプ、すなわちは構成、コネクタ・セット
、コネクタ、または配列コネクタは、この構造に常に存
在している。
以下の関数は与えられた接続規則番号に対して、接続規
則のタイプを返す。
getRu 1eType 接続規則番号を与えた場合、その接続規則のタイプを返
す。
規則がコネクタ・セット・タイプである場合には、この
コネクタ・セットに対するを効な構成ノードの表わすビ
ットマツプが、構成の他のものに含まれる。以下のルー
チンを定義して、コネクタ・セットの項目からデータを
抽出する。
1nconnset コネクタ・セットを指示するノード・タイプ、及びテス
トするノード・タイプを与えた場合、テストするノード
・タイプが有効なノード・タイプのセット内にあれば、
真を返し、それ以外の場合には、偽を返す。
規則のタイプがコネクタ・セット以外のものである場合
には、構造はこの規則に対して定義されたソケットの番
号、及びソケット記述子のリストを含む。しかしながら
、これらは規則のタイプに基づいて別々に解釈される。
各ソケット記述子はソケット・タイプ・フィールド(必
須、オプション、及びn元)と、このソケットに使用さ
れる接続規則を定義する接続規則番号を有している。以
下の関数を定義して、これらの項目からデータを抽出す
る。
getNumsockets ノード・タイプを与えた場合、この項目に関連したソケ
ットの番号を返す。この番号はゼロであってもかまわな
い。
getsocketType ノード・タイプとソケットの指標を与えた場合、この指
標によって参照されるソケットのタイプ(必須、オプシ
ョン、またはn元)を返す。
getRu le ノード・タイプとソケットの指標を与えた場合、このソ
ケットに対して指定された接続規則を返す。
上記の関数の他に、テーブルの項目が構成規則に対する
ものの場合には、テーブルは構成のソケットのいずれか
がコネクタを使用しているか、あるいは配列コネクタ規
則を使用しているかを示す。
この情報が利用できるのは、コネクタ及び配列コネクタ
規則が使用されている場合、接合及び置換アルゴリズム
がシロート・カットを行なえるからである。
comp 1exCh i 1drenノード・タイプ
を与えた場合、複雑な接続規則(コネクタ規則または配
列コネクタ規則)が、そのノード・タイプのいずれかの
ソケットに対する接続規則として使用されているかどう
かを返す。
好ましい実施例の拡張に対する基本関数の定義好ましい
実施例の方法の拡張を記述するのに使用されるサブルー
チンの定義は以下のとおりである。
I 、 parseSoket(parentType
、  5ocket、  child。
children、  5tatus)。
サブツリーのリストからのサブツリーの文法分析を行な
って、これらがソケットに適合するかどうか調べる。
parsesocketはどのタイプの接続規則を、ソ
ケットに関連付けられるか、また該当するルーチンへの
分岐を決定する。
入カニ parentType 下にある子の文法解析を試みる親ノードのタイプ 5ocket 下にある子の文法解析を試みるソケットhild 子のリストからのサブツリーのトップ。childはソ
ケットの下の文法解析を行なう最初のサブツリーのトッ
プである。
ch i Idrer+ 文法解析を行なうサブツリーのリスト 出カニ tatus 操作が成功したかどうかを調べる。文法の構文規則にし
たがって子の文法解析を行なえない場合には、操作は失
敗する。
child 子のリストからのサブツリーのトップ。childは文
法解析の行なわれる次のサブツリーのトップである。
方法: 1−、 case getRuleType(getR
ule(parentType。
5oket)) [どのタイプの規則がソケットを定義
しているかに応じて、適切なタイプの文法解析を実行す
る] a、構成規則 1) parseconstruct(parentT
ype、 5ocket。
child、 children、 5tatus)b
、コネクタ・セット規則 1) parseConnSet(parentTyp
e、 5ocket。
child、 children、 5tatus)C
,コネクタ規則 1) parseConn(parentType、 
5ocket。
child、 children、 5tatus)d
、配列コネクタ規則 1) parseOrdconn(parentTyp
e、 5ocket。
child、 chilclren、 5tatus)
Il、 parseconstruct(parent
Type、 5ocket、 child。
children、 5tatus)。
ソケットの下の特定の構成タイプの子の文法解析を行な
う。
入カニ parentType 下にある子の文法解析を行なう親のノードのタイプ ocket 下にある子の文法解析を行なうソケットhild 子のリストからのサブツリーのトップ。childはソ
ケットの下の文法解析を行なう最初のサブツリーのトッ
プである。
出カニ tatus 操作が成功したかどうかを調べる。文法の構文規則にし
たがって子の文法解析を行なえない場合には、操作は失
敗する。
child 子のリストからのサブツリーのトップ。childは文
法解析の行なわれる次のサブツリーのトップである。
方法: 1 、 case getsocketType(pa
rentType、 5ocket)[ソケットが必須
、オプション、またはn元であるかに応じて、適切なタ
イプの文法解析を行なうコ a、必須 1)子が空である場合[必須ソケットに入れられる子が
ないコ a) 5tatus = 5yntax error2
)それ以外の場合 a) getModeType(child) =ge
tRule(parentType、 5ocket)
の場合[子のノードが、そのソケットに対して指定され
ている規則と同じタイプであるかどうかを調べるコ i 、 5tatus = ok [文法解析のこの部
分は成功したコ ii、 child = getNext(child
ren、child)[次の子の文法解析を準備 する] b)それ以外の場合 i 、 5tatus =syntax error 
[間違ったタイプのソケットコ b、オプション 1)子が空でない場合 a) getNodeType(child) =ge
tRule(parentType、 5ocket)
の場合[子のノードが、そのソケットに対し て指定されている規則と同じタイプで あるかどうかを調べるコ i 、 child =getHext(childr
en、child)[次の子の文法解析を準備 する] 2) 5tatus =ok [オプシ日ンのソケット
は空にできるから、失敗を引き起こすことはない] C1n元 1) n−aryDone =false2 ) n−
aryDoneが偽の場合a)子が空の場合 i 、 n−aryDoneが真の場合b)それ以外の
場合 i 、 getNodeType(child) =g
etRu le (parentType 、 5oc
ket)の場合[子のノードが、そのソケッ トに対して指定されている規則と同 じタイプであるかどうかを調べるコ i ) child =getNext(childr
en、child) [次の子の文法解析を準備するコ ii、それ以外の場合 ii) n−aryDone = true3) 5t
atus = ok [n元のソケットは空にできるか
ら、失敗を引き起こすことはな いコ m、 parseConnset(parentTyp
e、 5ocket、 child。
children、5tatus)。
コネクタ・セット規則に定義された構文にしたかって子
の文法解析を行なう。コネクタ・セット規則は、ソケッ
ト内で有効な一連の構成規則番号で構成されている。文
法解析はきわめて単純である。すなわち、次の子のタイ
プが、コネクタ・セットで定義された有効な構成規則番
号の1つであるかどうかを判定する。
入カニ parentType 下にある子の文法解析を試みる子のノードのタイプ ocket 下にある子の文法解析を試みるソケットhild 子のリストからのサブツリーのトップ。childはソ
ケットの下の文法解析を行なう最初のサブツリーのトッ
プである。
ch i 1dren 文法解析を行なうサブツリーのリスト 出カニ tatus 操作が成功したかどうかを示す。文法の構文規則にした
がって子の文法解析を行なえない場合には、操作は失敗
する。
child 子のリストからのサブツリーのトップ。childは文
法解析の行なわれる次のサブツリーのトップである。
方法: 1 、 case getSocketType(pa
rentType、 5ocket)[ソケットが必須
、オプション、n元であるかどうかに応じて、適切なタ
イプの文法解析を行なうコ a、必須 1)子が空の場合 a) 5tatus = 5yntax error2
)それ以外の場合 a) inConnSet(getRule(pare
ntType。
5ocket)、 getNodeType(chil
d))i 、 5tatus = ok [文法解析の
この部分は成功したコ ii、 child =getHext(childr
en。
child) [次の子の文法解析を準備するコ b)それ以外の場合 i 、 5tatus =syntax errorb
、オプション 1)子が空でない場合 a) inConnSet(getRule(pare
ntType。
5ocket)、 getNodeType(chil
d))の場合 i 、 child :getNext(childr
en。
child) [次の子の文法解析を準備するコ 2) 5tatus = ok [オプションのソケッ
トは空にできるから、失敗を引き起こ すことはないコ C1n 冗 1)n−aryDone = false2 ) n−
aryDoneが偽の場合a)子が空の場合 i 、 n−aryDoneは真である。
b)それ以外の場合 i 、 inConnSet(getRule(par
entType、5ocket) 。
getNodeType(child))の場合i) 
child = getNext(children、
child) [次の子の文法解析を準備するコ ii、それ以外の場合 i ) n−aryDone = true3) 5t
atus =ok [n元のソケットは空にできるから
、失敗を引き起こ すことはないコ IV、 parseConn(parentType、
 5ocket、 child。
children、 5tatus)。
コネクタ規則に定義された構文にしたがって子の文法解
析を行なう。コネクタ規則は仮想ソケットのリストで構
成されている。(コネクタ規則が木にノードを定義しな
いので、仮想ソケットは子が何することのできる構文を
定義するだけであり、ノードが接続される実際のソケッ
トを定義しない。) 子はこれらの仮想ソケットの1つだけに対して文法解析
される。子の文法解析を行なうことのできる仮想ソケッ
トが見つかるまで、各仮想ソケットを最初から最後まで
試みる。
入カニ parentType 下にある子の文法解析を試みる子のノードのタイプ ocket 下にある子の文法解析を試みるソケットhild 子のリストからのサブツリーのトップ。childはソ
ケットのソケットの下の文法解析を行なう最初のサブツ
リーのトップである。
children 文法解析を行なうサブツリーのりスト 出力: tatus 操作が成功したかどうかを示す。文法の構文規則にした
がって子の文法解析を行なえない場合には、操作は失敗
する。
child 子のリストからのサブツリーのトップ。childは文
法解析の行なわれる次のサブツリーのトップである。
方法: 1 、 connParentType =getRu
le(parentType。
5ocket) [コネクタ規則に対するテーブル項目
に、指標をセットする。この指標は、各コネクタ規則の
仮想ソケットの下の子の文法解析を行なうルーチンに渡
されるコ 2 、 case getsocketType(pa
rentType、 5ocket)[ソケットが必須
、オプション、またはn元であるかどうかにしたがって
、適正なタイプの文法解析を行なうコ a、必須またはオプション 1 ) 5tatus = 5yntax error
  [whileループに対して状況を初期設定するコ 2 ) connsocket = 13 ) con
nsocket <= getHumsocket(c
onnParentType) で、状況が構文エラー
である場合[いずれかの仮想ソケットが空になるか、構
文エラーを起こさずに、仮想ソケットの文法解析が行な
えるまで、各仮想ソケットの下で文法解析を試みる] a) connchild =[子の局所コピーを作成
し、状況がokでない場合に、 parsesocketが子の更新を行なわないように
する。子が更新されるのは、 子のグループの文法解析が、仮想ソ ケット内で適正に行なわれたことが わかっている場合だけである] b) parsesocket(connParent
Type。
connsocket、 connchild。
children、 5tatus) [仮想ソケット
の下で文法解析を試みるコ c) connsocket = connsocke
t + 14)状況がokの場合 a) child = connchild [次の子
の文法解析の準備をするコ 5)それ以外の場合 a) getsocketType(parentTy
pe、5ocket)がオプションの場合 i 、 5tatus = ok [オプションのソケ
ットが空である] b、  n元 1)  n−aryDone = false2 ) 
n−aryDoneが偽の場合a) 5tatus =
 5yntax error [vhileループに対
して状況を初期設定する] b) connsocket =1 c)  connsocket  <=  getNu
msocket(connParentType )で
、状況が構文エラーの場合[いずれかの仮想ソケッ トが空になるか、構文エラーを起こ さずに、仮想ソケットの文法解析が 行なえるまで、各仮想ソケットで文 法解析を試みるコ i 、 connchild = child [子の
局所コピーを作成し、状況がOkで ない場合に、parsesocketが子の更新を行な
わないようにする。
子のグループの文法解析が、仮 想ソケット内で適正に行なわれ たことがわかっている場合だけ、 子を更新する] ii 、 parseSocket (connParentType + connsocket、 connchild。
children、 5tatus) [仮想ソケット
の下で、文法解析を試みる] iii、 connsocket = connsoc
ket + 1d)状況がokでないか、connch
ild= childの場合 i、n−aryDone  =  truee)それ以
外の場合 i 、 child = connchild [次の
子の文法解析の準備をするコ 3) 5tatus = ok [n元のソケットは空
にできるから、失敗を引き起こすことは ないコ V 、 parseordconn(parentTy
pe、 5ocket、 child。
children、 5tatus)c+配列コネクタ
規則に定義された構文にしたがって、子の文法解析を行
なう。配列コネクタ規則は仮想ソケットのリストで構成
されている。(配列コネクタ規則が木にノードを定義し
ないので、仮想ソケットは子を指定できる配列を定義す
るだけであり、ノードの接続される実際のソケットを定
義しない) 文法解析アルゴリズムはソケットを次々に文法解析しよ
うとする。
入カニ parentType 下にある子の文法解析を試みる親のノードのタイプ ocket 下にある子の文法解析を試みるソケットhild 子のリストからのサブツリーのトップ。childはソ
ケットの下の文法解析を行なう最初のサブツリーのトッ
プである。
ch i 1dren 文法解析を行なうサブツリーのリスト 出カニ tatus 操作が成功したかどうかを示す。文法の構文規則にした
がって子の文法解析を行なえない場合には、操作は失敗
する。
child 子のリストからのサブツリーのトップ。childは文
法解析の行なわれる次のサブツリーのトップである。
方法: 1 、 ordConnParentType =ge
tRule(parentType。
5ocket) [配列コネクタ規則に対するテーブル
項目に、指標をセットする。この指標は、各配列コネク
タ規則の仮想ソケットの下の子の文法解析を行なうルー
チンに渡されるコ2、 case getsocket
Type(parentType、 5ocket)[
ソケットが必須、オプション、またはn元であるかどう
かにしたがって、適正なタイプの文法解析を行なうコ a、必須またはオプション 1) ordconnchild =child [子
の局所コピーを作成し、状況がOkでない場合に、 parsesocketが子の更新を行なわないように
する。子のグループの文法解析が、配列コネクタ規則全
体の下で適正に行なわれたことがわかっている場合だけ
、子を更新する] 2) 5tatus = ok [whileループに
対して状況を初期設定するコ 3) ordconnsocket = 14) or
dconnsocket <= getNumsock
ets(ordConnParentType )で、
状況がOkの場合口すべての仮想ソケットの下で、いず
れかの文法解析が終了するまで、あるいは構文エラーが
検出されるまで、各仮想ソケットの下で文法解析を試み
るコ a) parsesocket(ordConnPar
entType。
ordconnsocket、 ordconn Ch
ild。
Children、 5tatus) [配列コネクタ
規則の仮想ソケット内で、子の文法 解析を試みるコ b) ordconnsocket = ordCon
nSocket弓 5)状況がokの場合 a) child =ordconnchild [次
の子の文法解析の準備をするコ ロ)それ以外の場合 a) getsocketType(parentTy
pe、5ocket)がオプションの場合 i 、 5tatus = ok [オプションのソケ
ットは空である] b、  n元 1)n−aryDone = false2 ) n−
aryDoneが偽の場合a) ordconnchi
ld = child [子の局所コピーを作成し、状
況がokでない場合に、parsesocketが子の
更新を行なわないようにする。子のグループの文法解析
が、配列コネクタ規則の下で適正に行なわれたことがわ
かっている場合だけ、子を更新するコ b) 5tatus =ok [whileループに対
して状況を初期設定するコ C) ordconnsocket =1d)  or
dconnsocket 〈:getNumsocke
ts (ordConnParentType )で)状況が
okの場合[すべての仮想ソケットの下で、いずれかの
文法解析が終了するまで、 あるいは構文エラーが検出されるまで、各仮想ソケット
の下で文法解析を試み るコ i、  parsesocket(ordConnPa
rentType。
ordConnSocket 、 ordConnCh
 i ld 。
Children、5tatus) [配列コネクタ規
則の仮想ソケットの下で、子の 文法解析を試みるコ if、 ordconnsocket =ordcon
nsocket+ 1 e)状況がokであるか、 ordconnchild = childの場合i 
、 n−aryDone = truef)それ以外の
場合 i 、 child =ordconncbild [
次の子の文法解析の準備をするコ 3) 5tatus = ok [n元のソケットは空
にできるから、これらが失敗を引き起こすことはないコ
V1. parsechildren(parentT
ype、 firstsocket。
1astsocket、 children、 5ta
tus)。
子のリストの文法解析を行なって、親のノード内のソケ
ットの範囲に適合するかどうか調べる。
適合する場合には、5etParentsocket 
Dを呼び出して、どのソケットにそれが所属しているの
かを記録する。
入カニ parentType 下にある子の文法解析を試みる親のタイプ。
parentTypeは常に、構成規則である。
f 1rstsocket 内部の子の文法解析を試みるソケットの範囲の最初のソ
ケット。f 1rstsocketは整数である。
1astsocket 内部の子の文法解析を試みるソケットの範囲の最後のソ
ケット。1astsocketは整数である。
children 文法解析を行なうサブツリーのリスト 出カニ tatus 操作が成功したかどうかを示す。文法の構文規則にした
がって新しいノードを挿入できない場合には、操作は失
敗する。
方法: 1 、 child = getFirst(chil
dren)2、5tatus = ok 3 、5ocket = firstsocket4、
5ocket <= 1astsocketで1sta
tus = okの場合a、 nextchild =
 child [文法解析を開始した子を、開始光とし
て保管する。これはどのソケットを、子の内部に入れる
べきがを記録するのに必要である。
b、 parsesocket(parentType
、’5ocket、 child。
children、 5tatus) [ソケットの下
の子の文法解析を試みるコ C,5tatus = okの場合 1 ) nextCh i ldが子でない場合[文法
解析を行なったばかりの子をループする。各子の内部に
入れるべきソケットを記録する。
a) 5etParentsocket(nextch
ild。
5ocket ) b) nextchild =getHext(chi
ldren。
nextchild) d、 5ocket = 5ocket + 15、状
況がOkの場合 a、子が空でない場合[すべての子が文法解析に使用さ
れた場合、子は空となるコ a) 5tatus =syntax error [
すべての子は文法解析に使用されてはおらず、これは構
文エラーであるコ ■、 removechildren(firstch
ild、 1astchild)。
親ノードの下からサブツリーの範囲を除去する。
結果の構文をチエツクしない。
入カニ f 1rstCh i Id 除去すべき最初の子。
1istchild 除去すべき最後の子。
方法: 1 、 prevchfld = null2、 ch
ild = firstchild3、 prevch
ildが1astChildでない場合[サブツリーを
除去する] a、 prevchild =childb、 chi
ld = getRightsibling(chil
d)c、 removeHode(prevchild
)■、 insertchildren(leftsi
bling、Children)左側の兄第の後にサブ
ツリーのリストを挿入する。子の構文をチエツクしない
入力 leftsibling サブツリーのリストの最も左側のノードの左側の兄第に
なる親の子。リストを親の下の最も左側の子として挿入
すべきものである場合には、空となる。
ch i 1dren 挿入されるサブツリーのリスト。
方法: 1、 prevchild = leftsiblin
g2、 child = getFirst(chil
dren)3、子が空でない場合[1Nの下にサブツリ
ーを挿入する] a、 insertMode(prevchild、c
hild)b、 prevchild = child
c、 child =getNext(childre
n、child)IX、 1nsertFlexibl
e(parent、 leftsibling。
nevNodes、 5tatus)。
親の下、及び左側の兄第の後にサブツリーのリストを挿
入する。
サブツリーの一番上のノードは親の下のソケットに割り
当てられ、トップがこれらのソケットの接続規則に合致
するようにされる。サブツリーをソケットに割り当てる
ことができない場合、挿入は失敗する。
1nsertF1exibleは1nsertQu i
ckと同じ機能を行なうが、低速で融通性の高いアルゴ
リズムを使用する。
入カニ parent その下にサブツリーのリストが挿入されるノード。
leftsibling サブツリーのリストの最も左側の7−ドの左側の兄第に
なる親の子。リストが親の下の最も左側の子として挿入
されるものであれば、これは空であってもかまわない。
newNodes 挿入されるサブツリーのリスト。
出カニ tatus 操作が成功したかどうかを示す。文法の構文規則にした
がって新しいノードを挿入できない場合には、操作は失
敗する。
方法: 1 、 create(childList) [1M
のすべての子を保持するリストを作成するコ 2、 childList = nevNodes3、
 child = leftsibling4、子が空
でない場合[新しいノードの左側になる子を、前に付は
加えるコ a、 prepend(childList、chil
d)b、 child = getLeftsibli
ng(child)5、 child = getRi
ghtsibling(leftsibling)8、
子が空でない場合[新しいノードの右側になる子を付は
加える] a、 append(childList、child
)b、 child =getRightsiblin
g(child)7、 firstSocket = 
18、1astsocket = getNumsoc
kets(parent)9、 parentType
 =getModeType(parent)10、 
parsechildren(parentType、
 null。
firstsocket、 1astsocket、 
childList。
5tatus) [子の構文が適正かどうかを判断する
ために、文法解析を行なうコ 11、状況がokの場合 a、 removechildren(getFirs
tchild(parent)。
getLastchild(parent)) [親の
下のすべての子を除去するコ b、 1nsertchildren(null、 c
hildList) [新しい子を、親の下に挿入する
コ 12゜destroy (ah i ldL 1st)
X、 1nsertQuick(parent、 le
ftsibling、 newNodes+5tatu
s) 。
親の下、及び左側の兄第の後にサブツリーのリストを挿
入する。
サブツリーの一番上のノードは親の下のソケットに割り
当てられ、トップがこれらのソケットの接続規則に合致
するようにされる。サブツリーをソケットに割り当てる
ことができない場合、挿入は失敗する。
1nsertQu ickは1nsertF1exib
leと同じ機能を行なうが、高速で融通性の低いアルゴ
リズムを使用する。
入カニ parent その下にサブツリーのリストが挿入されるノード。
1eftSfbling サブツリーのリストの最も左側のノードの左側の兄第に
なる親の子。リストが親の下の最も左側の子として挿入
されるものであれば、これは空であってもかまわない。
newNodes 挿入されるサブツリーのリスト。
出カニ tatus 操作が成功したかどうかを示す。文法の構文規則にした
がって新しいノードを挿入できない場合には、操作は失
敗する・。
方法: 1 、 parentType = getHodeT
ype(parent)2、 leftsibling
が空の場合a、 nextchild =getFir
stchild(parent) [前に挿入される子
コ b、 firstSocket =1 [newNod
esが親の下に、最初の子として挿入される。親の下の
最初のソケットで挿入を開始する] 3、それ以外の場合 a、 nextchild = getRightsi
bling(child)[その前に新しいノードが挿
入される子を取得するコ b、 childsocket = getParen
tsocket(leftsibling) [lef
tSiblingが含まれるソケットを取得するコ c、 getsocketType(parentTy
pe、 childsocket)がn元の場合[1e
ftSiblingがn元のソケットの内部にあるかど
うかを調べる。挿入が行なえるのは、そうなっている場
合だけである] 1) firstsocket = childsoc
ket[1ef tS ib l ingと同じソケッ
トへの挿入を試みるコ d、それ以外の場合 1) firstsocket = childsoc
ket+1[1ef tS fb l ingを含んで
いるものの後のソケットに挿入を試みるコ 4、 nextchildが空の場合 a、 1astsocket = getNumsoc
kets(parentType)[newNodes
が他のすべての子の後に挿入される。親の下の最後のソ
ケットで挿入を終了する] 5、それ以外の場合 a、 nextchildsocket =getPa
rentsocket(nextchild) [ne
xtChildを含んでいるソケットを取得する] b、 getsocketType(parentTy
pe。
nextchildsocket )がn元の場合[次
の子がn元のソケット内にあるかどうかを調べる。内部
にある場合にのみ、挿入を行なえる] 1) 1astsocket = nextchild
socket [必要に応じN nextchildを
含んでいるソケットに挿入を試みるコ C1それ以外の場合 1) 1astsocket =ne*tchilds
ocket −1[内部への挿入を試みる最後のソケッ
トは、nextchildsocketの前のものであ
るコロ、 parsechildren(parent
Type、 firstsocket。
1astSocket、 newNodes、 5ta
tus) [:文法解析を行なって、newNodes
の子を親の下に適正に挿入できるかどうか判定する。n
ewNodesのノードを、これらがソケットの唯一の
ノードであるかのようにして、文法解析する。ソケット
内のその他の子は、コネクタ規則及び配列コネクタ規則
が使用されないことがわかっているので、無視できる。
コ ア、状況がokの場合 a、 insertchildren(leftsib
ling、 newNodes)[子を、挿入するコ X I 、replaceFlexible(pare
nt、firstchild。
1astchild、newNodes、5tatus
)。
firstchildと1astChildの間の子を
N newNodesのサブツリーと置き換える。
サブツリーのトップのノードを親の下のソケットに割り
当て、トップがこれらのソケットの接続規則と合致する
ようにする。サブツリーをソケットに適切に割り当てる
ことができない場合、置換は失敗する。
replaceFlexibleはrep 1aceQ
u ickと同じ機能を実行するが、低速で融通性の高
いアルゴリズムを使用する。
入カニ parent その下でリスト置換を行なうノード。
f 1rstCh i ld 置換される子の範囲内の最初の子。
f 1rstchildは1astCh i ld N
 または1astCh i ldの左側のいずれかと等
しくなければならない。
1astchild 置換される子の範囲内の最後の子。
newHodes 挿入されるサブツリーのリスト。
出カニ tatus 操作が成功したかどうかを示す。文法の構文規則にした
がって新しいノードを置換できない場合には、操作は失
敗する。
方法: 1、 create(childList) [親のす
べての子を保持するリストを作成するコ 2、 childList = newHodes3、
 child = getLeftsibling(f
irstchild)4、子が空でない場合口置換され
る範囲の左側になる子を前に付は加える] a、 prepend(childList、chil
d)b、 child = getLeftSibli
ng(child)5、 child = getRi
ghtsibltng(lastchild)6、子が
空でない場合[置換される範囲の右側になる子を付は加
えるコ a、 append(childList、child
)b、 child = getRightsibli
ng(child)7、 firstsocket =
 18、1astsocket = getHumso
kets(parent)9、 parentType
 = getHodeType(parent)10、
 parsechildren(parentType
、 null。
firstsocket、 1astsocket、 
childList。
5tatus) [文法解析を行なって、子の構文が正
しいかどうか判定するコ 11、状況がokの場合 a、 removechildren(getFirs
tchild(parent)。
getLastchild(parent)) [すべ
ての子を除去する] b、 1nsertchildren(null、 c
hildList) [すべての新しい子を挿入するコ 12、 destroy(childList)XIl
、 replaceQuick(parent、 fi
rstchild。
1astChild、 newHodes+ 5tat
us)。
f 1rstch i ldと1astchi ldの
間の子をN nevNodesのサブツリーと置き換え
る。
サブツリーのトップのノードを親の下のソケットに割り
当て、トップがこれらのソケットの接続規則と合致する
ようにする。ノードをソケットに適切に割り当てること
ができない場合、置換は失敗する。
rep 1aceQu ickはreplaceFle
xibleと同じ機能を実行するが、高速で融通性の低
いアルゴリズムを使用する。
入カニ f 1rstCh i ld 置換される子の範囲内の最初の子。
f 1rstCh i ldは1astCh i ld
 N または1astchildの左側のいずれかと等
しくなければならない。
1astchild 置換される子の範囲内の最後の子。
newNodes 挿入されるサブツリーのリスト。
出カニ tatus 操作が成功したかどうかを示す。文法の構文規則にした
がって新しいノードを置換できない場合には、操作は失
敗する。
方法: 1 、 leftsibling = getLeft
sibling(firstchild)2、 rig
htsibling = getRightsibli
ng(IastChild)3、 parentTyp
e = getNodeType(parent)4、
leftsiblingが空の場合a、 firsts
ocket = 1 [newHodesを親の下の最
初の子として挿入するコ 5、それ以外の場合 a、 childsocket = getParen
tsocket(leftsibling) [1ef
tSiblingが含まれているソケットを取得するコ b、 getSocketType(parentTy
pe、childsocket)がn元である場合[1
eftSiblingがn元のソケット内にあるかどう
か調べる。内部にある場合にのみ、挿入を行なえる] 1)firstSocket = childsock
et[1eftSiblingと同じソケットを挿入す
ることを試みるコ C0それ以外の場合 1) firstsocket =childsock
et+1 [ソケ、yトを、leftsiblingを
含んでいるものの後に挿入することを試みる] 8、 rightsiblingが空の場合a、 1a
stsocket =getHumsockets(p
arentType)[親の下の最後の子としてnew
Nodesを挿入するコ ア、それ以外の場合 a、 childsocket = getParen
tsocket(rightsibling) [右側
の兄第を含んでいるソケットを取得するコ b、 getSocketType(parentTy
pe、childSocket)がn元の場合[右側の
兄第がn元のソケット内にあるかどうかを調べる。内部
にある場合にのみ、挿入を行なえるコ 1)  1astsocket :childsock
et[rightSiblingを含んでいる子のとこ
ろまで挿入を試みるコ C1それ以外の場合 1) 1astsocket :childsocke
t−1[内部へ挿入を試みる最後のソケットは、 rightsiblingを含んでいるソケットの前の
ソケットである] 8、 parsechildren(parentTy
pe、  firstsocket。
1astsocket、 newHodes、 5ta
tus) [文法解析を行なって、nevNodesの
子を親の下に適正に挿入できるかどうか判定する。ne
vNodesのノードを、これらがソケットの唯一のノ
ードであるかのようにして、文法解析する。ソケット内
のその他の子は、コネクタ規則及び配列コネクタ規則が
使用されないことがわかっているので、無視できる。コ
9、状況がokの場合 a、 removechildren(firstch
ild、1astchild)[指定された範囲の子を
除去するコ ロ9 b、  insertchildren(IeftSi
bling、newNodes)[置換の子を挿入する
コ 拡張の主要関数 上述のサブルーチンを使用して、以下の関数を定義する
。これらの関数は好ましい実施例の拡張にしたがって、
高性能な接合及び置換操作の高レベルの視点を提供する
。(処理の流れを表わすフローチャートについては、第
12図及び第13図を参照されたい。)接合及び置換の
これらの構文チエツク・バージョンは、構文制御形エデ
ィタを作成するために好ましい実施例で使用される標準
的な接合及び置換関数に替わるものである。エディタの
機能は同一であるが、3つの収集、貼込み、及び削除と
いう操作を行なえるのは、構文的に適正な構造がもたら
される場合だけである。
A、 graft(parent、 leftsibl
ing、 nevNodes+5tatus) 。
親、左側の兄第、及びサブツリーのリストを与えた場合
、サブツリーのリストを左側の兄第の後の親の下に挿入
する。
サブツリーのトップのノードを親の下のソケットに割り
当て、トップがこれらのソケットの接続規則と合致する
ようにする。ノードをソケットに割り当てることができ
ない場合、接合操作は失敗する。
入カニ parent その下にサブツリーのリストを挿入するノード leftsibling サブツリーのリストの最も左側のノードの左の兄第とな
る親の子。リストが親の下の最も左側の子として挿入さ
れるものである場合、これは空であってもかまわない。
newHodes 挿入されるサブツリーのリスト。
出カニ tatus 接合が成功したかどうかを示す。新しいノードを文法の
構文規則にしたがって挿入できない場合には、接合は失
敗する。
方法: 1、 complexchildren(getNod
eType(parent)) [親の下の子を定義す
るのに、コネクタ規則または配列コネクタ規則が使用さ
れているかどうか調べるコ a、 1nsertFlexible(parent、
 leftsibling。
newNodes、 5tatus) [低速で、融通
性の高い文法解析アルゴリズムを使用して、親の下にノ
ードを挿入するコ 2、それ以外の場合[親の子の適切な構文を記述するの
に、コネクタもしくは配列コネクタ規則は使用されない
。したがって、高速で、融通性の低い文法解析アルゴリ
ズムを使用することができる。実際のプログラミング言
語においては、この経路に時間のほとんどがかかるコ a、  1nsertQuick(parent、  
1eftSibling。
newNodes、 5tatus) [低速で、融通
性の高い文法解析アルゴリズムを使用して、親の下にノ
ードを挿入するコ b、状況が構文エラーの場合[しばしば、編集操作の順
序が、有効な挿入の場合であっても、1nsertQu
 ickが失敗を引き起こすことがある。したがって、
すべての障害の文法解析を、融通性に高いアルゴリズム
を使用して再度行なわなければならない。はとんどの接
合が成功するから、この経路が頻繁に生じることはない
コ 1) 1nsertFlexible(parent、
 leftsibling。
newNodes、 5tatus) [融通性の高いアルゴリズムによって、文法解析を再度
行なうコ 3、状況がokでない場合 a、 Fail B、 replace(parent、 firstc
hild、 1astchild。
newNodes、 5tatus)。
親、範囲内の最初の子、範囲内の最後の子、及びサブツ
リーのリストを与えた場合、子の範囲をサブツリーのリ
ストと置き換える。
サブツリーのトップのノードを親の下のソケットに割り
当て、トップがこれらのソケットの接続規則と合致する
ようにする。ノードをソケットに割り当てることができ
ない場合、置換操作は失敗する。
入カニ parent その下にサブツリーのリストを挿入するノード f i rstCh i ld 置換される子の範囲内の最初の子。
f 1rstCh i ldは1astchildと等
しくなければならないか、あるいは1astChild
の右側でなければならないかのいずれかである。
1astchild 置換される子の範囲内の最後の子。
nevHodes 挿入されるサブツリーのリスト。
出カニ tatus 置換が成功したかどうかを示す。新しいノードを文法の
構文規則にしたがって挿入できない場合には、置換は失
敗する。
方法: 1、 complexchildren(getNod
eType(parent)) [親の下の子を定義す
るのに、コネクタ規則または配列コネクタ規則が使用さ
れているかどうか調べるコ a、 replaceFlexible(parent
、 firstchild。
1astchild、 newHodes、 5tat
us) [低速で、融通性の高い文法解析アルゴリズム
を使用して、親の下のノードを置換するコ 2、それ以外の場合[親の子の適切な構文を記述するの
に、コネクタもしくは配列コネクタ規則は使用されない
。したがって、高速で、融通性の低い文法解析アルゴリ
ズムを使用することができる。実際のプログラミング言
語においては、この経路に時間のほとんどがかかる] a、 replaceQuick(parent、 f
irstchild。
1astchild、 newNodes、 5tat
us) [高速で1融通性の低いアルゴリズムを使用し
て、親の下にノードを挿入するコ b、状況が構文エラーの場合[しばしば、編集操作の順
序が、有効な置換の場合であっても、replaceQ
uickが失敗を引き起こすことがある。したがって、
すべての障害の文法解析を、融通性に高いアルゴリズム
を使用して再度行なわなければならない。はとんどの置
換が成功するから、この経路が頻繁に生じることはない
コ 1) replaceFlexible(parent
firstchild、 1astChild、 ne
wNodes。
5tatus) [融通性の高いアルゴリズムによって
、文法解析を再度行なうコ 3、状況がokでない場合 a、 Fail 好ましい実施例及び拡張の上述の説明は例として示され
たものである。他の代替策または改変は、当分野の技術
者には明らかであろう。
F0発明の効果 上述のように、本発明はデータ及び関係を階層または木
として表わすことができ、データ要素が木構造内のノー
ドの配置を画定するノード及び関係を形成している、関
係データを編集するためのエディタを提供する。
【図面の簡単な説明】
第1図は、本発明を組み込んだ編集システムの例である
。 第2a図は、スコープ指定を説明するために示された、
構造化エディタにおいて作成され、取り扱われるタイプ
の木の例である。 第2b図は、第2a図に示した木に収集操作を適用した
結果生じる3つのサブツリーを示す図である。 第3図は、第1図でスコープ指定したノードにおける削
除操作後に生じる木を示す図である。 第4図は、第3図に示した木のE2ノードを中心として
、第2図に示したサブツリーのリストを貼り込んだ結果
生じる木を示す図である。 第5図は、単純なパックス・ナウル形(BackusN
aur Form)の構造を使用して、ステートメント
の典型的な有効な順序を表わすバーズ木を示す図である
。 第6図は、拡張されたBNFを使用した、第5図に示し
た木の改善された表示の図である。 第7図は、「ソケット」の概念を説明する木構造である
。 第8図は、典型的な接合操作を行なった後の、第7図に
示したものと類似した木である。 第9図は、典型的な置換操作を行なった後の、第7図に
示したものと類似した木である。 第10図は、本発明の好ましい実施例の拡張の原理を説
明するのに役立つテーブルを示す図である。 第11図は、本発明の好ましい実施例の基本的な処理の
流れを示す流れ図である。 第12図は、好ましい実施例の拡張による接合操作の処
理の流れを示す流れ図である。 第13図は、好ましい実施例の拡張による置換操作の処
理の流れを示す流れ図である。 20・・・・ビデオ表示画面、21・・・・ユーザ・イ
ンターフェース、22・・・・キーボード、24・・・
・ポインティング装置、26・・・・データ操作処理部
、28・・・・データ構造記憶装置、30・・・・構造
構文規則、30・・・・データ記憶装置。 出願人  インターナショナル・ビジネス・マシーンズ
・コーポレーション 代理人  弁理士  山  本  仁  朗(外1名) 111図 第3圓 第5国 第6図

Claims (4)

    【特許請求の範囲】
  1. (1)階層の1つ高位レベルの1つの親データ要素に、
    ゼロ、1またはそれ以上の従属データ要素を関連付ける
    ように、単一のルート・データ要素と、1つまたはそれ
    以上の下層の従属データ要素をもつ階層または木として
    構成されたデータを操作するための方法であって、 (a)実行すべき動作を選択する段階と、 (b)操作すべきデータ要素を選択しまたは作成する段
    階と、 (c)もし上記選択した動作によって要求されるなら、
    ターゲット・データ要素と、該ターゲット・データ要素
    と上記選択しまたは作成したデータ要素の間の関係を記
    述する段階と、 (d)もし上記選択した動作によって要求されるなら、
    上記選択しまたは作成したデータ要素を、現存する階層
    関係を保持するサブトリーのリスト中に集める段階と、 (e)もし上記選択した動作によって要求されるなら、
    上記選択されたデータ要素を上記階層から除去する段階
    と、 (f)もし上記選択した動作によって要求されるなら、
    上記関係が確立されるように、上記ターゲット・データ
    要素が位置する階層中に上記集めたデータ要素を挿入す
    る段階とを有する、 階層データの編集方法。
  2. (2)ノードと呼ばれる、データ要素のサブトリーのリ
    ストを、選択されたターゲット・ノードに関連してトリ
    ーに挿入する方法であって、 (a)サブトリーのリストを用意する段階と、(b)タ
    ーゲット・ノードを選択する段階と、(c)上記ノード
    のリストと上記ターゲット・ノードの間の関係を記述す
    る段階と、 (d)上記ターゲット・ノードの親を識別する段階と、 (e)上記関係によって要求される、上記サブトリーの
    リストと、上記親ノードと、上記ターゲット・ノードの
    間の接続を確立する段階を有する、選択されたターゲッ
    ト・ノードに関連してトリーに挿入する方法。
  3. (3)第1のデータ要素と第2のデータ要素の間にシン
    タックス的に正しい関係を維持する為の方法であって、 (a)許容されたデータ要素タイプのリストを作成する
    段階と、 (b)各データ要素タイプに第1レベルのシンタックス
    規則を決定する段階と、 (c)有効な関係を記述するために、1つまたはそれ以
    上の第2レベルのシンタックス規則を介して、直接また
    は間接的に上記第1レベルのシンタックス規則を参照す
    るような第2レベルのシンタックス規則を決定する段階
    であって、そのときそれらのシンタックス規則は、上記
    データ要素タイプの間に確立され得る関係のリストを決
    定するものであり、該関係は、確立され得る関係の数と
    、関連付けられ得るデータ要素タイプとを決定するもの
    である、段階と、 (d)上記第1のデータ要素タイプに対応する上記第1
    レベルのシンタックス規則のうちの1つを見出す段階と
    、 (e)上記第2のデータ要素が上記第1のデータ要素に
    関連付けられ得るデータ要素タイプのものであるかどう
    かを判断するために、上記第2のデータ要素をテストす
    る段階と、 (f)もし許容されるなら、上記第1のデータ要素と第
    2のデータ要素の間に関係を確立する段階を有する、 データ要素の間にシンタックス的に正しい関係を維持す
    る為の方法。
  4. (4)データ要素またはノードが追加、コピー、削除、
    移動または挿入される構造エディタにおいてノードを接
    続する方法であって、 (a)木に接続すべきノードを選択する段階と、(b)
    上記木のノードの間の階層関係及び順序関係を記述する
    第1の組の規則を与える段階と、(c)上記木のノード
    に対する1つまたはそれ以上の接続を識別するために、
    上記選択されたノードに関連して上記第1の組の規則を
    使用する段階と、 (d)上記木のノードの間の許容される関係に関連する
    第2の組の規則を与える段階と、 (e)上記接続において上記第2の組の規則が満足され
    るかどうかを判断するために、上記識別された接続をテ
    ストするべく上記第2の組の規則を使用する段階と、 (f)もし上記段階(e)の判断が肯定的なら上記接続
    を形成する段階を有する、 構造エディタにおいてノードを接続する方法。
JP1207103A 1988-09-26 1989-08-11 接続方法、ノ―ド接続方法、デ―タ処理方法、及び木内にノ―ドを挿入する方法 Expired - Lifetime JP2534360B2 (ja)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US24883588A 1988-09-26 1988-09-26
US248835 1988-09-26

Publications (2)

Publication Number Publication Date
JPH02121030A true JPH02121030A (ja) 1990-05-08
JP2534360B2 JP2534360B2 (ja) 1996-09-11

Family

ID=22940886

Family Applications (1)

Application Number Title Priority Date Filing Date
JP1207103A Expired - Lifetime JP2534360B2 (ja) 1988-09-26 1989-08-11 接続方法、ノ―ド接続方法、デ―タ処理方法、及び木内にノ―ドを挿入する方法

Country Status (4)

Country Link
US (1) US5493678A (ja)
EP (1) EP0361737B1 (ja)
JP (1) JP2534360B2 (ja)
DE (1) DE68926483T2 (ja)

Cited By (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH0418665A (ja) * 1990-05-11 1992-01-22 Sharp Corp 小型電子機器
JP2007525733A (ja) * 2003-06-06 2007-09-06 インテンショナル ソフトウェア コーポレーション プログラムツリー内でカテゴリ別にノードを編成し操作する方法およびシステム
JP6162909B2 (ja) * 2015-07-31 2017-07-12 楽天株式会社 木構造データ編集装置、木構造データ編集方法、及びプログラム

Families Citing this family (70)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
AU638636B2 (en) * 1988-04-25 1993-07-01 Hewlett-Packard Company A method of deleting objects from a linked object data structure
US5111398A (en) * 1988-11-21 1992-05-05 Xerox Corporation Processing natural language text using autonomous punctuational structure
JPH06176081A (ja) * 1992-12-02 1994-06-24 Hitachi Ltd 階層構造ブラウジング方法およびその装置
CA2134059C (en) 1993-10-29 2009-01-13 Charles Simonyi Method and system for generating a computer program
US5761511A (en) * 1994-01-28 1998-06-02 Sun Microsystems, Inc. Method and apparatus for a type-safe framework for dynamically extensible objects
US5870608A (en) * 1994-06-03 1999-02-09 Synopsys, Inc. Method and apparatus for displaying text including context sensitive information derived from parse tree
US5704041A (en) * 1994-09-21 1997-12-30 International Business Machines Corporation Object independent scoping in an open system interconnection system
US5768564A (en) * 1994-10-07 1998-06-16 Tandem Computers Incorporated Method and apparatus for translating source code from one high-level computer language to another
US5842204A (en) * 1994-10-07 1998-11-24 Tandem Computers, Inc. Method and apparatus for translating source code from one high-level computer language to another
US6006031A (en) * 1994-10-07 1999-12-21 Tandem Computers Incorporated Method and apparatus for reconciling conflicting translations by factoring and parameterizing differences
TW367447B (en) * 1994-12-21 1999-08-21 Canon Kk Block selection review and editing system
US5678052A (en) * 1995-01-19 1997-10-14 International Business Machines Corporation Methods and system for converting a text-based grammar to a compressed syntax diagram
US5581696A (en) * 1995-05-09 1996-12-03 Parasoft Corporation Method using a computer for automatically instrumenting a computer program for dynamic debugging
US5752058A (en) * 1995-07-06 1998-05-12 Sun Microsystems, Inc. System and method for inter-token whitespace representation and textual editing behavior in a program editor
US5813019A (en) * 1995-07-06 1998-09-22 Sun Microsystems, Inc. Token-based computer program editor with program comment management
US5748975A (en) * 1995-07-06 1998-05-05 Sun Microsystems, Inc. System and method for textual editing of structurally-represented computer programs with on-the-fly typographical display
US5857212A (en) * 1995-07-06 1999-01-05 Sun Microsystems, Inc. System and method for horizontal alignment of tokens in a structural representation program editor
US5884247A (en) * 1996-10-31 1999-03-16 Dialect Corporation Method and apparatus for automated language translation
US6047296A (en) * 1996-12-09 2000-04-04 Omnimark Technologies Corporation Comprehensive method of resolving nested forward references in electronic data streams within defined resolution scopes
US6425118B1 (en) 1997-07-18 2002-07-23 Compaq Computer Corporation System for automatically generating tests to ensure binary compatibility between software components produced by a source-to-source computer language translator
US6105062A (en) * 1998-02-26 2000-08-15 Novell, Inc. Method and system for pruning and grafting trees in a directory service
US7028043B2 (en) * 1998-04-10 2006-04-11 International Business Machines Corporation Creation of customized trees
US7039859B1 (en) 1998-11-12 2006-05-02 International Business Machines Corporation Generating visual editors from schema descriptions
US6301554B1 (en) 1999-09-23 2001-10-09 Wordstream, Inc. Language translation using a constrained grammar in the form of structured sentences formed according to pre-defined grammar templates
US6728733B2 (en) * 2000-03-29 2004-04-27 Komatsu Wall System Development Co., Ltd. System, method, and program product for administrating document file in computerized network system
US6735600B1 (en) * 2001-03-30 2004-05-11 Lsi Logic Corporation Editing protocol for flexible search engines
US7117479B2 (en) * 2001-10-01 2006-10-03 Sun Microsystems, Inc. Language-sensitive whitespace adjustment in a software engineering tool
AU2003276815A1 (en) * 2002-06-13 2003-12-31 Cerisent Corporation Xml-db transactional update system
US7171404B2 (en) * 2002-06-13 2007-01-30 Mark Logic Corporation Parent-child query indexing for XML databases
WO2003107323A1 (en) * 2002-06-13 2003-12-24 Cerisent Corporation A subtree-structured xml database
WO2003107174A1 (en) * 2002-06-13 2003-12-24 Cerisent Corporation Xml database mixed structural-textual classification system
US20040003374A1 (en) * 2002-06-28 2004-01-01 Van De Vanter Michael L. Efficient computation of character offsets for token-oriented representation of program code
US20040006763A1 (en) * 2002-06-28 2004-01-08 Van De Vanter Michael L. Undo/redo technique with insertion point state handling for token-oriented representation of program code
US20040003373A1 (en) * 2002-06-28 2004-01-01 Van De Vanter Michael L. Token-oriented representation of program code with support for textual editing thereof
US7386834B2 (en) * 2002-06-28 2008-06-10 Sun Microsystems, Inc. Undo/redo technique for token-oriented representation of program code
US20040133853A1 (en) * 2002-09-23 2004-07-08 Colleen Poerner System and method for navigating an HMI
US20040104946A1 (en) * 2002-09-23 2004-06-03 Yufeng Li System and method for automated positioning of graphic objects
US7065745B2 (en) * 2002-12-16 2006-06-20 Sun Microsystems, Inc. System and method for evaluating and executing hierarchies of rules
US20040225998A1 (en) * 2003-05-06 2004-11-11 Sun Microsystems, Inc. Undo/Redo technique with computed of line information in a token-oriented representation of program code
US20040225997A1 (en) * 2003-05-06 2004-11-11 Sun Microsystems, Inc. Efficient computation of line information in a token-oriented representation of program code
US7237226B2 (en) * 2003-05-09 2007-06-26 Intentional Software Corporation Method and system for storing pending changes to data
US7607099B2 (en) 2003-11-03 2009-10-20 Intentional Software Corporation Method and system for reversible design tree transformations
US8037102B2 (en) 2004-02-09 2011-10-11 Robert T. and Virginia T. Jenkins Manipulating sets of hierarchical data
EP1591916B1 (en) * 2004-04-26 2013-11-06 Sap Ag Method, computer program and device for deleting data sets contained in a table system
US9646107B2 (en) 2004-05-28 2017-05-09 Robert T. and Virginia T. Jenkins as Trustee of the Jenkins Family Trust Method and/or system for simplifying tree expressions such as for query reduction
MXPA06014859A (es) * 2004-06-21 2007-04-16 Equestron Llc Metodo y aparato para evaluar la salud y desempeno de animales.
US7627591B2 (en) 2004-10-29 2009-12-01 Skyler Technology, Inc. Method and/or system for manipulating tree expressions
US7801923B2 (en) * 2004-10-29 2010-09-21 Robert T. and Virginia T. Jenkins as Trustees of the Jenkins Family Trust Method and/or system for tagging trees
US7630995B2 (en) 2004-11-30 2009-12-08 Skyler Technology, Inc. Method and/or system for transmitting and/or receiving data
US7636727B2 (en) 2004-12-06 2009-12-22 Skyler Technology, Inc. Enumeration of trees from finite number of nodes
NZ536931A (en) * 2004-12-01 2005-12-23 Simplicity Technologies Ltd A data editor
US8316059B1 (en) 2004-12-30 2012-11-20 Robert T. and Virginia T. Jenkins Enumeration of rooted partial subtrees
US8615530B1 (en) 2005-01-31 2013-12-24 Robert T. and Virginia T. Jenkins as Trustees for the Jenkins Family Trust Method and/or system for tree transformation
US7681177B2 (en) 2005-02-28 2010-03-16 Skyler Technology, Inc. Method and/or system for transforming between trees and strings
US8356040B2 (en) 2005-03-31 2013-01-15 Robert T. and Virginia T. Jenkins Method and/or system for transforming between trees and arrays
US7899821B1 (en) 2005-04-29 2011-03-01 Karl Schiffmann Manipulation and/or analysis of hierarchical data
US7487143B2 (en) * 2005-11-17 2009-02-03 International Business Machines Corporation Method for nested categorization using factorization
JP4912026B2 (ja) * 2006-04-27 2012-04-04 キヤノン株式会社 情報処理装置、情報処理方法
US20070266039A1 (en) * 2006-05-11 2007-11-15 Boykin James R Simplifying A Visual Depiction of A Graph
US7949949B2 (en) * 2006-11-20 2011-05-24 Intentional Software Corporation Domain transformation languages
US20080141230A1 (en) * 2006-12-06 2008-06-12 Microsoft Corporation Scope-Constrained Specification Of Features In A Programming Language
US8051105B1 (en) 2007-01-10 2011-11-01 The Mathworks, Inc. Directing searches on tree data structures
US8850414B2 (en) * 2007-02-02 2014-09-30 Microsoft Corporation Direct access of language metadata
US20100192077A1 (en) * 2009-01-26 2010-07-29 Raytheon Company Parent/Child Control System for a Workflow Automation Tool
US8504984B1 (en) * 2009-05-29 2013-08-06 Google Inc. Modifying grammars to correct programming language statements
JP5842437B2 (ja) * 2011-07-27 2016-01-13 富士ゼロックス株式会社 情報処理装置及び情報処理プログラム
US9047643B2 (en) * 2012-03-19 2015-06-02 Alcatel Lucent Method of extending web service application programming interfaces using query languages
US9177168B2 (en) 2012-03-19 2015-11-03 Alcatel Lucent Method of modifying access control for web services using query languages
US9710243B2 (en) * 2013-11-07 2017-07-18 Eagle Legacy Modernization, LLC Parser that uses a reflection technique to build a program semantic tree
CN111563116A (zh) 2019-02-13 2020-08-21 霍尼韦尔国际公司 用于使用基于网络的编辑工具生成和操纵电子载具检查单的方法和系统

Family Cites Families (17)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
GB1540299A (en) * 1975-02-15 1979-02-07 Mathematik Datenverarbeitung G Computer employing reduction language
US4318184A (en) * 1978-09-05 1982-03-02 Millett Ronald P Information storage and retrieval system and method
US4468728A (en) * 1981-06-25 1984-08-28 At&T Bell Laboratories Data structure and search method for a data base management system
US4447875A (en) * 1981-07-07 1984-05-08 Burroughs Corporation Reduction processor for executing programs stored as treelike graphs employing variable-free applicative language codes
US4611298A (en) * 1983-06-03 1986-09-09 Harding And Harris Behavioral Research, Inc. Information storage and retrieval system and method
US4677550A (en) * 1983-09-30 1987-06-30 Amalgamated Software Of North America, Inc. Method of compacting and searching a data index
JPH0640302B2 (ja) * 1984-01-30 1994-05-25 株式会社日立製作所 図式・ソ−スプログラム自動生成方法
US4656603A (en) * 1984-03-01 1987-04-07 The Cadware Group, Ltd. Schematic diagram generating system using library of general purpose interactively selectable graphic primitives to create special applications icons
US4613946A (en) * 1984-06-07 1986-09-23 Forman Ernest H Method and apparatus for generating hierarchical displays
US4710763A (en) * 1984-10-19 1987-12-01 Texas Instruments Incorporated Method for generating and displaying tree structures in a limited display area
US4817036A (en) * 1985-03-15 1989-03-28 Brigham Young University Computer system and method for data base indexing and information retrieval
US4763277A (en) * 1986-01-17 1988-08-09 International Business Machines Corporation Method for obtaining information in an expert system
JPH0823864B2 (ja) * 1986-03-29 1996-03-06 株式会社東芝 見出し判定方法
US4764867A (en) * 1986-06-03 1988-08-16 Banner Blue Software Incorporated Display system and method for constructing and editing a hierarchical arrangement of information
US4868743A (en) * 1986-11-25 1989-09-19 Hitachi, Ltd. Traversal method of processing tree structure information and apparatus using the same
US4860204A (en) * 1987-02-05 1989-08-22 Softron, Inc. Computer based workstation for development of graphic representation of computer programs
US4866635A (en) * 1987-10-19 1989-09-12 Carnegie Group Inc. Domain independent shell for building a diagnostic expert system

Cited By (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH0418665A (ja) * 1990-05-11 1992-01-22 Sharp Corp 小型電子機器
JP2007525733A (ja) * 2003-06-06 2007-09-06 インテンショナル ソフトウェア コーポレーション プログラムツリー内でカテゴリ別にノードを編成し操作する方法およびシステム
US7730102B2 (en) 2003-06-06 2010-06-01 Intentional Software Corporation Method and system for organizing and manipulating nodes by category in a program tree
JP2010146583A (ja) * 2003-06-06 2010-07-01 Intentional Software Corp プログラムツリー内でカテゴリ別にノードをまとめる方法及びシステム
JP6162909B2 (ja) * 2015-07-31 2017-07-12 楽天株式会社 木構造データ編集装置、木構造データ編集方法、及びプログラム
JPWO2017022041A1 (ja) * 2015-07-31 2017-08-03 楽天株式会社 木構造データ編集装置、木構造データ編集方法、及びプログラム
US11055069B2 (en) 2015-07-31 2021-07-06 Rakuten, Inc. Tree structure data editing device, tree structure data editing method, and program

Also Published As

Publication number Publication date
JP2534360B2 (ja) 1996-09-11
DE68926483T2 (de) 1996-12-05
US5493678A (en) 1996-02-20
EP0361737A3 (en) 1992-09-30
EP0361737A2 (en) 1990-04-04
EP0361737B1 (en) 1996-05-15
DE68926483D1 (de) 1996-06-20

Similar Documents

Publication Publication Date Title
JPH02121030A (ja) 接続方法、ノード接続方法、データ処理方法、及び木内にノードを挿入する方法
US5870590A (en) Method and apparatus for generating an extended finite state machine architecture for a software specification
US6038378A (en) Method and apparatus for testing implementations of software specifications
US7505951B2 (en) Hierarchical state machine generation for interaction management using goal specifications
US8924837B2 (en) Text file interface support in an object oriented application
US7698694B2 (en) Methods and systems for transforming an AND/OR command tree into a command data model
US4860203A (en) Apparatus and method for extracting documentation text from a source code program
EP0204942A2 (en) Compiler for a source program, a method of making the same and its use
US20050004942A1 (en) Methods and systems for controlling network infrastructure devices
WO2002033582A9 (en) Method for analyzing text and method for builing text analyzers
US5557720A (en) Method of determining whether a document tree is weakly valid
CN109614329B (zh) 一种基于接口控制文件的软件测试用例辅助设计方法
JP3781561B2 (ja) 自然言語解析装置、システム及び記録媒体
JP5147240B2 (ja) リバーシブルなデザイン・ツリーの変換のための方法とシステム
JPH0567144A (ja) 前編集支援方法およびその装置
US7065753B2 (en) Method, system and computer program for syntax validation
Butting et al. Deriving fluent internal domain-specific languages from grammars
Murching et al. Incremental recursive descent parsing
CN111522554A (zh) 用于线性广义ll识别和上下文感知解析的方法和系统
JP3451660B2 (ja) 文書処理装置及び方法
JP5181788B2 (ja) ソースプログラムの言語変換装置、方法及びプログラム
JP4389332B2 (ja) 機械翻訳解析結果選択装置
Emerson et al. Metamodeling languages and metaprogrammable tools
JP3044463B2 (ja) データ変換方法
Kintala Attributed grammars for query language translations