(57)【要約】      （修正有）【課題】構文解析において、プログラムツリー内のノードをまとめる。【解決手段】プログラムツリーのノードタイプに対して、様々な子ノードカテゴリを定義することができる。子ノードを親ノードに追加するとき、システムは子ノードのカテゴリを識別する。次にシステムは、識別されたカテゴリのカテゴリデータ構造をインスタンス化する。システムは、そのインスタンス化されたカテゴリデータ構造への参照を親ノードに記憶し、子ノードへの参照をそのインスタンス化されたカテゴリデータ構造に記憶する。【選択図】図１
2010146583.tif 000002
【特許請求の範囲】
【請求項１】
プログラムを表すプログラムツリーを格納するコンピュータ可読媒体であって、
前記プログラムツリーは、
前記プログラムツリーによって表される前記プログラムの演算子を表す親ノードと、
前記親ノードの前記演算子のオペランドを表す複数の子ノードと
を含み、
前記子ノードの各々がカテゴリを有し、前記複数の子ノードは前記複数の子ノードのカテゴリ別にまとめられるコンピュータ可読媒体。
【請求項２】
前記親ノードはカテゴリデータ構造によって前記子ノードの各々を参照し、前記カテゴリデータ構造の各々は対応するカテゴリを有する子ノードを参照する、請求項１に記載のコンピュータ可読媒体。
【請求項３】
前記参照はポインタによる、請求項２に記載のコンピュータ可読媒体。
【請求項４】
前記親ノードは前記カテゴリデータ構造の複数のインスタンスを指し、前記カテゴリデータ構造の各々のインスタンスは対応するカテゴリを有する子ノードを参照する、請求項１に記載のコンピュータ可読媒体。
【請求項５】
１つの子ノードは複数の子ノードを有し、前記複数の子ノードは前記複数の子ノードのカテゴリ別にまとめられる、請求項１に記載のコンピュータ可読媒体。
【請求項６】
１つの親ノードは１つのノードタイプを有し、各ノードタイプは前記各ノードタイプの子ノードに対して定義されたカテゴリを有する、請求項１に記載のコンピュータ可読媒体。
【請求項７】
コンピュータシステムにおいてプログラムを表すプログラムツリーを生成する方法であって、
前記プログラムツリーに親ノードを与えるステップと、
前記親ノードの、各々がカテゴリーを有する複数の子ノードを与えるステップと、
複数のカテゴリの各々に対して、前記親ノードと当該カテゴリへの参照とを関連付けるステップと、
前記子ノードの各々に対して、前記子ノードのカテゴリと前記子ノードへの参照とを関連付けるステップと
を含み、
前記親ノードの前記複数の子ノードは、前記複数の子ノードのカテゴリ別にまとめられる方法。
【請求項８】
前記カテゴリへの参照は、前記カテゴリのカテゴリデータ構造への参照である、請求項７に記載の方法。
【請求項９】
前記子ノードへの参照は、前記カテゴリの前記カテゴリデータ構造に記憶される、請求項８に記載の方法。
【請求項１０】
前記親ノードと当該カテゴリへの参照とを関連付けるステップは、前記親ノードに対する前記カテゴリのカテゴリデータ構造を生成するステップを含む、請求項７に記載の方法。
【請求項１１】
前記子ノードへの参照は、前記カテゴリの前記カテゴリデータ構造内に記憶される、請求項１０に記載の方法。
【請求項１２】
前記プログラムツリーに子ノードを追加する指示を受け取るステップと、
前記親ノードに関連付けることのできる複数のカテゴリの指示を与えるステップと、
前記子ノードの前記カテゴリが追加されるとき、前記指示されたカテゴリの１つのカテゴリの選択を受け取るステップと
をさらに含む、請求項７に記載の方法。
【請求項１３】
前記プログラムツリーに子ノードを追加する前記指示を受け取るステップは、
前記親ノードの選択をユーザから受け取るステップと、
前記選択された親ノードに子ノードを追加する指示を前記ユーザから受け取るステップと
を含むことを特徴とする請求項１２に記載の方法。
【請求項１４】
前記親ノードの選択をユーザから受け取るステップは、前記親ノードが子ノードを現在有していないときに生じる、請求項１３に記載の方法。
【請求項１５】
前記プログラムツリーに子ノードを追加する指示を受け取るステップは、
現在の子ノードの選択をユーザから受け取るステップと、
前記現在の子ノードの兄弟ノードを追加する指示を前記ユーザから受け取るステップと
を含む、請求項１２に記載の方法。
【請求項１６】
前記選択された現在の子ノードと追加される子ノードとは同じカテゴリを有する、請求項１５に記載の方法。
【請求項１７】
前記プログラムツリーの各ノードは１つのノードタイプを有し、各ノードタイプは前記ノードタイプのノードに関連付けることができる複数のカテゴリを有する、請求項７に記載の方法。
【請求項１８】
各ノードタイプに対する前記複数のカテゴリは、前記プログラムツリーのスキーマで指定される、請求項１７に記載の方法。
【請求項１９】
コンピュータシステムにおいてプログラムを表すプログラムツリーを修正する方法であって、
前記プログラムツリーの複数のノードの表現を表示するステップと、
前記表示された表現から前記プログラムツリーのノードを選ぶ選択をユーザから受け取るステップであって、前記選択は、前記選ばれたノードの子ノードを前記プログラムツリーに追加することを示すステップと、
前記子ノードのカテゴリの指示を前記ユーザから受け取るステップと、
前記選ばれたノードの子ノードとして１つのノードを前記プログラムツリーに追加するステップと
を含み、
前記選ばれたノードの複数の子ノードは、前記複数の子ノードのカテゴリ別にまとめられる方法。
【請求項２０】
前記ノードの選択は、前記ノードの下位選択である、請求項１９に記載の方法。
【請求項２１】
前記選ばれたノードは、選ばれたときに子ノードを有さない、請求項１９に記載の方法。
【請求項２２】
前記選ばれたノードは、選ばれたときに子ノードを有することを特徴とする請求項１９に記載の方法。
【請求項２３】
プログラムを表すプログラムツリーを生成するためのコンピュータシステムであって、
親ノードとカテゴリへの参照とを関連付ける手段と、
各カテゴリと前記親ノードの複数の子ノードへの参照とを関連付ける手段と
を含み、
前記親ノードの前記複数の子ノードは、前記複数の子ノードのカテゴリ別にまとめられるコンピュータシステム。
【請求項２４】
前記カテゴリへの参照は、前記カテゴリのカテゴリデータ構造への参照である、請求項２３に記載のシステム。
【請求項２５】
前記子ノードへの参照は、前記カテゴリの前記カテゴリデータ構造に記憶される、請求項２４に記載のシステム。
【請求項２６】
前記親ノードと前記カテゴリへの参照とを関連付ける手段は、前記親ノードに対するカテゴリのカテゴリデータ構造を生成する手段を含む、請求項２３に記載のシステム。
【請求項２７】
前記子ノードへの参照は、前記カテゴリの前記カテゴリデータ構造に記憶される、請求項２６に記載のシステム。
【請求項２８】
前記プログラムツリーに子ノードを追加する指示を受け取る手段と、
前記親ノードに関連付けることができる複数のカテゴリの指示を与える手段と、
前記子ノードの前記カテゴリが追加されるとき、前記指示されたカテゴリの１つの選択を受け取る手段と
をさらに含む、請求項２３に記載のシステム。
【請求項２９】
前記プログラムツリーに子ノードを追加する指示を受け取る手段は、
前記親ノードの選択をユーザから受け取る手段と、
前記選ばれた親ノードに子ノードを追加する指示を前記ユーザから受け取る手段と
を含む、請求項２８に記載のシステム。
【請求項３０】
前記親ノードの選択を前記ユーザから受け取る手段は、前記親ノードが子ノードを現在有していないときに生じる、請求項２９に記載のシステム。
【請求項３１】
前記プログラムツリーに子ノードを追加する前記指示を受け取る手段は、
現在の子ノードの選択をユーザから受け取る手段と、
前記現在の子ノードの兄弟ノードを追加する指示を前記ユーザから受け取る手段と
を含む、請求項２８に記載のシステム。
【請求項３２】
前記プログラムツリーの各ノードは１つのノードタイプを有し、各ノードタイプは前記ノードタイプのノードに関連付けることができる複数のカテゴリを有する、請求項２３に記載のシステム。
【請求項３３】
各ノードタイプに対する前記複数のカテゴリは、前記プログラムツリーのスキーマで指定される、請求項３２に記載のシステム。
【請求項３４】
コンピュータシステムを制御してプログラムを表すプログラムツリーを修正する命令を格納したコンピュータ可読媒体であって、
前記修正は、
前記プログラムツリーのノードの表現を表示するステップと、
前記表示された表現からプログラムツリーのノードを選ぶ選択をユーザから受け取るステップであって、前記選択は、前記選ばれたノードの子ノードを前記プログラムツリーに追加することを示すステップと、
前記子ノードのカテゴリの指示を前記ユーザから受け取るステップと、
前記選ばれたノードの子ノードとして１つのノードを前記プログラムツリーに追加するステップと
を含む方法によって行われ、
前記選ばれたノードの複数の子ノードは、前記複数の子ノードのカテゴリ別にまとめられるコンピュータ可読媒体。
【請求項３５】
前記ノードの選択は、前記ノードの下位選択である、請求項３４に記載のコンピュータ可読媒体。
【請求項３６】
前記選ばれたノードは、選ばれたときに子ノードを有さない、請求項３４に記載のコンピュータ可読媒体。
【請求項３７】
前記選ばれたノードは、選ばれたときに子ノードを有する、請求項３４に記載のコンピュータ可読媒体。
【請求項３８】
前記ノードの選択を受け取った後、子ノードの可能なカテゴリの指示を表示するステップをさらに含む、請求項３４に記載のコンピュータ可読媒体。
【請求項３９】
親ノードは１つのノードタイプを有し、前記ノードタイプの複数のノードの複数の子ノードに対する前記カテゴリは１つのスキーマに記憶される、請求項３４に記載のコンピュータ可読媒体。
【請求項４０】
前記スキーマは、前記プログラムツリーの一部分である、請求項３９に記載のコンピュータ可読媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、一般にプログラムツリー内でノードをまとめること及び操作することに関する。
【背景技術】
【０００２】
コンピュータプログラムは、高級プログラミング言語（例えばＪａｖａ（登録商標）あるいはＣ言語）で記述されるのが一般的である。その後、コンパイラを使用して、高級プログラミング言語の命令をコンピュータが実行可能な機械命令に変換する。コンパイル処理は、通常、以下の６つの段階に分かれている。
１．字句解析
２．構文解析
３．意味解析
４．中間コード生成
５．コード最適化
６．最終コード生成
【０００３】
字句解析においては、コンピュータプログラムのソースコードが走査され、高級言語のコンポーネント又はトークンが識別される。コンパイラは、ソースコードを一連のトークンに変換し、それが構文解析において処理される。例えば、字句解析において、コンパイラは、ステートメント
cTable=1.0;
を、変数（cTable）、演算子（=）、定数（1.0）、及びセミコロンとして識別する。変数、演算子、定数、及びセミコロンは、高級言語のトークンである。
【０００４】
構文解析（「パーシング」とも呼ぶ）において、コンパイラは、トークンを処理し、プログラミング言語の構文（「文法」とも呼ぶ）に基づいてプログラムを表すための構文ツリーを生成する。構文ツリーは、演算子が非リーフノードによって表され、そのオペランドが子ノードによって表されるツリー構造である。上記の例では、演算子（「=」）は２つのオペランド、すなわち変数（cTable）及び定数（1.0）を有する。用語「パースツリー」及び「構文ツリー」は、構文解析の結果として生成される構文ベースのツリーを指すために、この説明中で区別なく用いる。例えば、そのようなツリーは、任意に選択して、コンピュータプログラムの構文構造の導出を記述することができる（例えば、あるトークンが、識別子、すなわち構文によって定義された表現であるであると記述することができる）。構文ベースのツリーは、構文構造の導出（derivation）が含まれているときは「具象構文ツリー」と呼ぶことができ、導出が含まれないときは「抽象構文ツリー」と呼ぶことができる。
【０００５】
構文解析において、コンパイラは、意味上の正しさが確保されるように構文ツリーを修正する。例えば、変数（cTable）が整数で、定数（1.0）が浮動小数点の場合、意味解析において浮動小数点から整数への変換が構文ツリーに追加されることになる。
【０００６】
中間コード生成、コード最適化、及び最終コード生成の間、コンパイラは、構文ツリーによって表されるプログラムを実装するために機械命令を生成する。以上のようにして、コンピュータが機械命令を実行することができる。
【０００７】
構文ツリーの一種であるインテンショナルプログラムツリーとして表されるコンピュータプログラムを、生成し維持するためのシステムが提案されている（例えば、「Method and System for Generating and Displaying a Computer Program」という名称の特許文献１、及び「Method and System for Reducing an Intentional Program Tree Represented by High-Level Computational Constructs」という名称の特許文献２参照。これらは本明細書に参照として組み込まれる）。このシステムは、インテンショナルプログラムツリー内でノードを追加、削除、及び移動することによって、構文要素に対応するノードを直接操作するための機構を提供する。インテンショナルプログラムツリーは、「プログラムツリー」の一種である。「プログラムツリー」は、演算子ノード及びオペランドノードを含むコンピュータプログラムのツリー表現である。また、プログラムツリーは、識別子の宣言ノードから識別子のタイプを定義するノードへの参照などのノード間参照（すなわち、ツリー内のノードをリンクするグラフ構造）も備えることができる。抽象構文ツリー及び具象構文ツリーは、プログラムツリーの一例である。プログラムツリーが生成された後、システムは、意味解析、中間コード生成、コード最適化、及び最終コード生成の段階を経て、プログラムツリーによって表されるコンピュータプログラムの実行可能コードへの変換を実行する。
【０００８】
そのシステムはまた、編集機能も提供する。プログラマは、プログラムツリーの一部分を選択し、プログラムツリー内に挿入点を置き、あるタイプのノードを選択してその挿入点に挿入するためのコマンドを発行することができる。システムは、様々なコマンドを、現在の選択部分及び現在の挿入点に対して実行できるようにする。例えば、現在の選択部分を、クリップボードにコピーし又は切り取ることができる。次に、クリップボードの内容を、ペーストコマンドを使用してクリップボードから現在の挿入点にペーストことができる。また、システムは、現在の挿入点に（例えば、割当て演算子を表す）新しいノードを挿入するための様々なコマンド（例えば、「Paste=」）も提供している。
【０００９】
システムは、プログラムツリーの表現を生成することによって、プログラムツリーをプログラマに表示する。表示フォーマットにより、プログラムツリーに挿入できる各種のノードの視覚表現（例えばテキスト表現）が指定される。システムは、Ｃ、Ｊａｖａ（登録商標）、Ｂａｓｉｃ、Ｌｉｓｐなど、普及しているいくつかのプログラミング言語用の表示フォーマットに対応することができる。これによりプログラマは、システムがプログラムツリーの表示を生成するのに使用する表示フォーマットを選択し、いつでも変更することができる。例えば、あるプログラマが、特定のプログラムツリーをＣ言語の表示フォーマットで表示するよう選択し、別のプログラマが、同じプログラムツリーをＬｉｓｐの表示フォーマットで表示するよう選択することができる。また、１人のプログラマが、あるプログラムツリーについて、Ｃ言語の表示フォーマットとＬｉｓｐの表示フォーマットを切り換えることもできる。
【００１０】
システムはまた、プログラムツリーの対応する表示を強調表示することによって、プログラムツリーの現在の選択部分をプログラマに示すこともできる。同様に、システムは、表示される表示内に挿入点マーク（例えば、「|」又は「^」）を表示することによって、現在の挿入点をプログラマに示す。またこのシステムにより、プログラマが、表示に基づいて新しい現在の部分を選択することも、挿入点を再配置することもできる。
【００１１】
システムの編集機能により、通常は兄弟ノードがある場合にのみ新しいノードを挿入することができる。例えば、ノードを、選ばれた兄弟ノードの前にも後にも追加することができる。最初の子ノードは、選択すべき兄弟ノードが存在しないので、このように追加することはできない。その結果、システムは、非リーフノードの親ノードがプログラムツリーに追加されるときはいつでも、子ノードを自動的に追加することができる。例えば、２項演算子ノードがプログラムツリーに追加されるとき、システムは、少なくとも１つの子ノードをオペランドとして追加する。子ノードのタイプは、システムがプログラマの必要とするオペランドのタイプを知らなかったので、「未定」である。次いでシステムは、プログラマがノードのタイプを変更できるようにする。ここでは子ノードを自動的に追加することにより、子ノードを兄弟ノードなしで追加することができたが、「未定」タイプをもつノードを使用せずに子ノードを追加する方法があればそれを選んだプログラマもいたはずである。
【００１２】
図１は、メソッドの定義に対応するプログラムツリーの一部分を示す図である。このメソッドは、以下のように定義される。
public static int increment (ini i){i++; return i;}
ノード１０１は、「increment」メソッドを表すプログラムツリーのサブツリーのルートに対応する。ノード１０２〜１０８は、そのルートノードの子ノードである。ノード１０９及び１１０はノード１０６の子ノード、ノード１１１はノード１０７の子ノード、ノード１１２はノード１０８の子ノードである。各ノードは、ノードタイプを定義する、プログラムツリー内の別のノードへの参照を有する。例えば、ノード１０７（例えば、「ステートメント」）は、ステートメントを定義する宣言ノードを参照し、ノード１１１は、パラメータ「i」に関してノード１０６を参照する（例えば、破線によって示されている）。そのような被参照ノードは、宣言定義とも呼ばれる。
【先行技術文献】
【特許文献】
【００１３】
【特許文献１】米国特許第５，７９０，８６３号明細書
【特許文献２】米国特許第６，０９７，８８８号明細書
【発明の概要】
【００１４】
あるノードタイプのノードは、可変数の子ノードを有することができる。例えば、「increment」メソッドは、７つの子ノードを有する。子ノードへの参照は、親ノードの参照のアレイ内に記憶することができる。例えば、アレイのエントリ１は、タイプ「名前」の子ノードを参照することができ、エントリ２及び３は、タイプ「修飾子」の子ノードを参照することができ、以下同様である。しかし、このようなシステムでは、あるノードタイプをもつ親ノードの子ノードを識別するために、通常、親ノードの各子ノードにアクセスしなければならない。すなわち、このような場合、各子ノードにアクセスする必要なく子ノードのタイプを識別できるようにするのが望ましい。
【００１５】
また、このようなシステムでは、様々なノードタイプのグループを追跡する必要もあった。例えば、メソッドの仮パラメータは、入力パラメータ、出力パラメータ、又は入出力パラメータのノードタイプをもつことができる。このシステムは、これら３つの異なるノードタイプが仮パラメータであると認識してプログラミングする必要がある。したがって、このシステムでは、仮パラメータを表す子ノードを識別する必要があればいつでも、メソッドノードの各子ノードをチェックして、子ノードのノードタイプがこれら３つのノードタイプにマッチするかどうかを調べる。システムにそのような情報（knowledge）が埋め込まれている場合、そのようなグループが変化するたび、新しいグループが追加されるたび、又は新しいノードタイプがグループに追加されるたびに、システムを修正する必要がでてくる。そのようなシステムへの修正を回避することが望ましい。
【図面の簡単な説明】
【００１６】
【図１】プログラムツリーの、メソッドの定義に対応する部分を示す図である。
【図２Ａ】一実施形態における、プログラムツリーの、サンプルユーザプロジェクト及びサンプルスキーマを示す部分を示す図である。
【図２Ｂ】子ノードがカテゴリ別にまとめられたプログラムツリーの、メソッドの定義に対応する部分を示す図である。
【図３】新しいノードを、選択されたノードの子ノードとしてプログラムツリーに挿入する様子を示す図である。
【図４】メソッドノードが挿入された後のプログラムツリーを示す表示ページの図である。
【図５】名前カテゴリが選択された後の表示ページの図である。
【図６】メソッドに名前が付けられた後のプログラムツリーを示す表示ページの図である。
【図７】タイプカテゴリの選択後の表示ページの図である。
【図８】メソッドのタイプが指定された後のプログラムツリーを示す表示ページの図である。
【図９】一実施形態における、編集システムのコンポーネントを示すブロック図である。
【図１０】一実施形態における、ノードタイプ／カテゴリのマッピングを示す図である。
【図１１】一実施形態における、更新が下位選択に基づいてノードを挿入するものであるときの、プログラムツリー更新コンポーネントの処理を示すフローチャートである。
【図１２】一実施形態における、プログラムツリー格納部の更新の処理を示すフローチャートである。
【発明を実施するための形態】
【００１７】
プログラムツリー内のノードをまとめる方法及びシステムが提供される。一実施形態では、このシステムにより、プログラムツリーのノードタイプに対して、様々な子ノードカテゴリを定義することが可能となる。例えば、「メソッド」ノードタイプは、その子ノードに対して定義された修飾子カテゴリ及びパラメータカテゴリを有することができる。子ノードが親ノードに追加されると、システムは、子ノードのカテゴリを識別する。次いでシステムは、識別されたカテゴリのカテゴリデータ構造をインスタンス化する。システムは、インスタンス化されたカテゴリデータ構造への参照を親ノードに記憶し、子ノードへの参照をインスタンス化されたカテゴリデータ構造に記憶する。例えば、修飾子カテゴリの子ノードがメソッドノードに追加されたとき、システムは、修飾子カテゴリデータ構造をインスタンス化し、修飾子カテゴリデータ構造への参照をメソッドノードに記憶し、子ノードへの参照を修飾子カテゴリデータ構造に記憶する。識別されたカテゴリの追加の子ノードが親ノードに追加されると、システムは、その子ノードへの参照をインスタンス化されたカテゴリデータ構造に記憶する。例えば、修飾子カテゴリの別の子ノードがメソッドノードに追加されると、システムは、子ノードへの参照を修飾子カテゴリデータ構造に記憶する。一実施形態におけるカテゴリは、異なるノードタイプのノードを表すことができる。例えば、パラメータのカテゴリは、入力パラメータ、出力パラメータなどのノードタイプを表すことができる。子ノードをカテゴリ別にまとめた結果、識別されたカテゴリのすべての子ノードを、そのカテゴリに対するインスタンス化されたカテゴリデータ構造にアクセスすることによって、必ずしも各子ノードにアクセスすることなく迅速に検出することができる。さらに、カテゴリデータ構造によって提供される間接参照のレベルは、他のカテゴリ内の子ノードの検出に影響を与えることなく、子ノードの新しいカテゴリを追加又は削除できることを意味する。
【００１８】
システムはまた、子ノードを、現在子ノードのない親ノードにも追加できるようにする。システムは、プログラマが親ノードを「下位選択」できるようにする。「下位選択」とは、親ノードの直下の点が選ばれていることを意味する。次いでプログラマが、選択された点でノードを挿入するよう指示した場合、システムは、「下位選択」ノードの子ノードとしてノードを挿入する。一実施形態では、子ノードが追加される前に、システムがプログラマに、子ノードのカテゴリを入力することを促すプロンプトを出す。システムは、「下位選択」ノードの子ノードに適したカテゴリのリストを表示することができる。プログラマは、それらのカテゴリの１つを選択することができる。次に、システムは、適切なカテゴリデータ構造をインスタンス化し、その子ノードへの参照をそのカテゴリデータ構造に追加する。その代わりに、システムはプログラマに、子ノードのカテゴリではなくそのノードタイプを入力するよう促すこともできる。そのような場合、システムは、カテゴリへのノードタイプのマッピングに基づいてカテゴリを決定することができる。
【００１９】
下位選択を、親ノードの最初の子ノード以外の子ノードを挿入するために使用することもできることが、当業者には理解されよう。システムは、カテゴリへのノードタイプのマッピングを備えることができる。このマッピングは、「スキーマ」とも呼ばれる。マッピングでは、各ノードタイプを、その子ノードの可能なノードタイプに対応付けることができる。またマッピングでは、各ノードタイプを、そのカテゴリに対応付ける（map）こともできる。例えば、メソッドノードタイプは、修飾子ノードタイプ、入力パラメータノードタイプなどに対応付けることができる。入力パラメータノードタイプは、パラメータカテゴリに対応付けることができる。子ノードが挿入されると、システムは、マッピングを使用して、選ばれたノードに関連するノードタイプの一覧を表示する。プログラマがノードタイプを入力すると、システムは、マッピングからそのカテゴリを決定する。このようにして、カテゴリに対するノードタイプの特定のマッピングの知識なしでシステムを開発することができ、そのプログラミング環境に合わせてマッピングをカスタマイズすることができる。
【００２０】
図２Ａは、一実施形態における、プログラムツリーのサンプルユーザプロジェクト及びサンプルスキーマを表す部分を示す図である。プログラムツリー２４０は、ユーザプロジェクトサブツリー２５０及びスキーマサブツリー２６０を有している。スキーマサブツリーは、サブツリー２７０、２８０、及び２９０を有しており、各プログラムツリーのＪａｖａ（登録商標）コンピュータプログラムを表す標準部分とすることができる。プログラムツリーのルートは、ノード２４１によって表される。ユーザプロジェクトサブツリー２５０は、以下のコードの一部分を表すノード２５１〜２５４を有している。
class MyWriter {
void write(byte i) {
writeByte(i);
}
void writeByte() {,... }
....
}
【００２１】
スキーマサブツリー２９０は、任意のプログラミング言語に対して共通とすることができる有効なプログラムツリーの構造を指定する。スキーマサブツリー２８０は、任意のオブジェクト指向プログラミング言語に対して共通となり得る有効なプログラムツリーの構造を指定する。スキーマサブツリー２７０は、Ｊａｖａ（登録商標）プログラミング言語用の有効なプログラムツリーの構造を指定する。例えば、ノード２８２は、オブジェクト指向プログラミング言語でのコンピュータプログラムを表すプログラムツリーが、「００タイプ」のノードタイプであるノードを備えることができることを示す。さらに、ノード２８３、２８４、及び２８５はそれぞれ、「００タイプ」のノードタイプをもつノードが「００メンバ関数」、「００データメンバ」、及び「００スーパタイプ」のノードタイプをもつ子ノードを有することができることを示している。各子ノードはまた、有効なプログラムツリーで許されるノードタイプのノードの発生数を指定することもできる。例えば、「０．．Ｎ」は０個又は１個以上発生し得ることを意味し、「０．．１」は０個又は１個発生し得ることを意味し、「１」は必ず１個だけ発生することを意味し、以下同様である。一実施形態における子ノードは、親ノードタイプのノードの可能なカテゴリを表すことができる。例えば、プログラムツリーにおけるノードタイプ「Ｊａｖａ（登録商標）クラス」のノードは、ノード２７４、２７５、及び２７６によって示される、「Ｊａｖａ（登録商標）メソッド」、「Ｊａｖａ（登録商標）フィールド」、又は「スーパクラス」のカテゴリをもつ子ノードを有することができる。プログラムツリーの各ノードは、スキーマ内のノードに対する参照によって定義されるそのノードタイプを有することができる。例えば、ユーザプログラムノード２５２、２５３、及び２５４はそれぞれ、スキーマノード２７２、２７４、及び２７４を参照する。各スキーマは、有効なコンピュータプログラムを定義するある抽象レベルを表す。この例では、スキーマサブツリー２９０はスキーマサブツリー２８０の抽象を表し、スキーマサブツリー２８０はスキーマサブツリー２７０の抽象を表す。スキーマサブツリーの各ノードは、すぐ上の抽象レベルにある対応するノードへの参照を有することができる。例えば、Ｊａｖａ（登録商標）プログラミング言語における「スーパクラス」ノードタイプに対応するノード２７６は、破線２７７によって示される、オブジェクト指向プログラミング言語における「スーパタイプ」ノードタイプに対応するノード２８５への参照を有する。各ノードは、そのノードのノードタイプに関する情報を含む構造（例えば、ドキュメンテーション）を表すことができる。破線によって表されるノード間の参照は、「ｉｓａ」関係とも呼ばれる。各ｉｓａ関係は、参照されるノードの構造を拡張するものと見なすことができる。例えば、「スーパクラス」のノードタイプをもつノード２７６は、「スーパタイプ」のノードタイプをもつノード２８５とｉｓａ関係を有する。ノード２８５は、一般的に「スーパタイプ」ノードタイプを記述するドキュメンテーションを有することができ、一方、ノード２７６は、具体的にＪａｖａ（登録商標）「スーパクラス」ノードタイプを記述するドキュメントを有することができ、これにより、ノード２７６のドキュメンテーションが効果的に拡張される。
【００２２】
図２Ｂは、子ノードをカテゴリ別にまとめたプログラムツリーの、メソッドの定義に対応する部分を示す図である。メソッドは、以下によって定義される。
public static int increment (int i) {i++; return i;}
「increment」メソッドは、図１のメソッドに対応する。円２０１〜２１２は、プログラムツリーのノードを表し、長円形２２１〜２２９は、カテゴリデータ構造に対応する。長円形２２５は、修飾子カテゴリのカテゴリデータ構造のインスタンスを表す。修飾子カテゴリデータ構造は、ノード２０３〜２０４によって表されるメソッドのpublic修飾子及びstatic修飾子をまとめる。メソッドのパラメータは、パラメータカテゴリデータ構造２２２によってまとめられる。この例では、１つのパラメータのみが定義されるので、パラメータカテゴリデータ構造は、入力パラメータノード、すなわちノード２０６への１つの参照のみを含む。ノード２０６の子ノード２０９〜２１０もまた、これらのカテゴリ別にまとめられる。プログラムツリー内の任意のレベルで子ノードのカテゴリ化を実施できることが、当業者には理解されよう。メソッドノード２０１は、カテゴリ名とカテゴリデータ構造への参照との間のマッピングを有することができる。例えば、メソッドノード２０１は、カテゴリ「パラメータ」からパラメータカテゴリデータ構造２２２へのマッピングを有することができる。その結果、親ノードの子ノードのカテゴリデータ構造は、順序非依存である。同様に、カテゴリデータ構造内の子ノードは、子に関連付けられた名前別にまとめることができる。例えば、パラメータカテゴリデータ構造２２２は、パラメータ名（例えば、「int」）と子ノード（例えば、ノード２０６）への参照との間のマッピングを有することができる。カテゴリデータ構造によって提供される情報は、多くの異なる方法で提供できることが、当業者には理解されよう。例えば、その情報を、直接親ノードに記憶することができる。その代わりに、多数のカテゴリデータ構造の情報を、ハッシュテーブルを使用して記憶することもできる。そのような代替方法を用いて、各ノードは、その子ノードのカテゴリを指定する情報をハッシュテーブルから取得するべく使用される一意のノード識別子を有することができる。
【００２３】
図３〜８は、一実施形態における、下位選択及びカテゴリを使用した子ノードの挿入を表示したページを示す図である。図３は、選ばれたノードの子ノードとして、新しいノードをプログラムツリーに挿入する様子を示す図である。表示ページ３００は、メニュー領域３０１及び表示領域３０２を備えている。矢印３０３は、プログラム内で現在選択されている位置を示す。プログラマがペーストメニューアイテムを選択すると、現在の選択点でプログラムツリーに挿入できるノードのノードタイプのリストが表示される。システムは、スキーマから可能なノードタイプを識別する。次いでプログラマは、プログラムツリーに挿入されるノードのノードタイプを選択する。この例では、プログラマは、メソッドノードタイプを選択する。次いでシステムは、親ノードのノードタイプに基づいて、メソッドノードタイプのカテゴリを決定することができる。この例では、親のノードタイプは「モジュール」とすることができる。ノードタイプとカテゴリとの間のマッピングでは、メソッドノードタイプが、モジュールノードタイプ内のステートメントカテゴリに含まれるよう指定することができる。システムは、モジュールノードのステートメントカテゴリデータ構造がまだインスタンス化されていない場合は、それをインスタンス化することができる。メソッド定義ノードは、名前又は本体をまだもっていないので、プログラム内でまだ有効ではない。一実施形態では、システムは、ノードの挿入を、プログラム自体への変更ではなく、プログラムへの保留中の変更として記憶する。この保留中の変更の処理は、米国特許出願に記載されており、それをここに参照により本明細書に組み込む。ただし、このシステムは、図４で示すように、保留中の変更の指示をその挿入点に表示することができる。
【００２４】
図４は、メソッドノードが挿入された後のプログラムツリーを示す表示ページの図である。表示ページ４００は、メニュー領域４０１及び画面領域４０２を備えている。表示領域には、挿入されたばかりのノードに対応する無名メソッド定義（unnamed method definition）４０３がある。次にプログラマは、無名メソッド定義の下位選択を実行し、次いでメニューアイテムを選択してノードを挿入している。システムは、メソッドノードに対するカテゴリ（又は代わりに子ノードタイプ）のリスト４０４を表示している。図５は、名前カテゴリが選択された後の表示ページの図である。表示ページ５００は、メニュー領域５０１及び表示領域５０２を備えている。システムは、ユーザにメソッドの名前を入力するよう促すために、挿入点５０４付きで入力領域５０３を表示したところである。図６は、メソッドに名前が付けられた後のプログラムツリーを示す表示ページの図である。この例では、ユーザは、名前を「increment」と入力している。表示ページ６００は、メニュー領域６０１及び表示領域６０２を備えている。メソッドノード６０３は、その名前で示されている。プログラマは、incrementメソッドの下位選択を実行して、ノードを挿入するためのメニューアイテムを選択している。次いでシステムは、メソッドノードの子ノード用のカテゴリのリスト６０４を表示している。図７は、修飾子カテゴリの選択後の表示ページの図である。表示ページ７００は、メニュー領域７０１及び表示領域７０２を備えている。システムは、プログラマが追加すべき修飾子を選択できるように、メソッド定義用の修飾子のリスト７０３を表示している。図８は、メソッドの修飾子が指定された後のプログラムツリーを示す表示ページの図である。この例では、ユーザは、static修飾子を選択している。表示ページ８００は、メニュー領域８０１及び表示領域８０２を備えている。表示領域には、名前カテゴリ及び修飾子カテゴリが定義されたメソッドステートメント８０３が示されている。
【００２５】
図９は、一実施形態における編集システムのコンポーネントを示すブロック図である。編集システムは、プログラムツリーエディタ９０１、下位選択コンポーネント９０２、プログラムツリー更新コンポーネント９０３、及びプログラムツリー表示コンポーネント９０４を含んでいる。プログラムツリーエディタは、プログラマによる指示に従い、ノードの下位選択を調整するため、下位選択コンポーネントを呼び出す。プログラムツリーエディタは、プログラマがプログラムツリーに対する修正（例えば、ノードの追加）を行うよう指示したとき、プログラムツリー更新コンポーネントを呼び出す。プログラムツリーエディタは、プログラムツリーの表示を更新するためにプログラムツリー表示コンポーネントを呼び出す。また編集システムは、プログラムツリー格納部９０５、構文定義９０６、及びノードタイプ／カテゴリマッピング９０７も備えている。プログラムツリー格納部は、プログラムツリーエディタによって現在修正中のプログラムツリーを有している。構文定義は、現在編集中のプログラムツリーに対して構文を定義する。例えば、構文定義は、Ｃ＃プログラミング言語の構文を表すことができる。ノードタイプ／カテゴリマッピングは、ノードタイプとカテゴリの間のマッピングを有している。一実施形態では、マッピングを、ＸＭＬスキーマ定義（「ＸＳＤ」）を使用して記憶することができる。また、マッピングを、プログラムツリーの宣言定義ノード内に記憶することもできる。例えば、メソッドノードタイプ用の宣言定義ノードは、本体、修飾子、名前、パラメータ、及びタイプカテゴリのリストを有することができる。マッピングを、多くの異なる方法で論理的にまとめられることが、当業者には理解されよう。例えば、各ノードタイプを、その子ノードのカテゴリに対応付ける（ｍａｐ）ことができ、各カテゴリを、そのカテゴリ内のノードタイプに対応付けることができる。別の例として、各ノードタイプを、その子ノードタイプに対応付けることができ、各ノードタイプをそのカテゴリに対応付けることができる。
【００２６】
このシステムは、中央処理装置、メモリ、入力装置（例えば、キーボード及びポインティングデバイス）、出力装置（例えば、表示装置）、及び記憶装置（例えば、ディスク装置）を備えるコンピュータシステム上に実装することができる。メモリ及び記憶装置は、このシステムを実行する命令を有することができるコンピュータ可読媒体である。さらに、データ構造及びメッセージ構造は、通信リンク上の信号などのデータ伝送媒体を介して記憶又は伝送することができる。インターネット、ローカルエリアネットワーク、広域ネットワーク、又はポイントツーポイントダイヤルアップ接続など、様々な通信リンクを使用することができる。
【００２７】
図１０は、一実施形態におけるノードタイプ／カテゴリマッピングを示す図である。このマッピングは、スキーマによって指定されるマッピングの代替マッピングである。この例では、クラス及びメソッドのノードタイプが定義される。クラスノードタイプは、データメンバ、メソッド、クラスタイプ、及びスーパクラスのカテゴリを有するものとして定義される。メソッドノードタイプは、本体、修飾子、名前、パラメータ、及びタイプを有するものとして定義される。各カテゴリは、そのカテゴリ内のノードタイプに対応付けることができる。例えば、修飾子カテゴリを、static及びpublicのノードタイプに対応付けることができる。プログラマが子ノードの追加を選択したとき、システムは、親ノードのノードタイプを識別し、そのノードタイプに対するカテゴリマッピングを取得する。次いでシステムは、プログラマが追加される子ノードに対して適切なカテゴリを選択できるように、カテゴリのリストを表示する。
【００２８】
図１１は、一実施形態において、更新が下位選択に基づくノードの挿入である場合のプログラムツリー更新コンポーネント９０３の処理を示すフローチャートである。コンポーネント９０３には、下位選択されたノードの指示が伝えられる。ブロック１１０１で、コンポーネント９０３は、下位選択ノードのノードタイプを指定する。ブロック１１０２で、コンポーネント９０３は、スキーマ中で定義することができるノードタイプ／カテゴリマッピングから、指定されたノードタイプに対するカテゴリを取得する。ブロック１１０３で、コンポーネント９０３は、カテゴリのリストを表示することによって、プログラマにカテゴリの選択を促すプロンプトを出す。ブロック１１０４で、コンポーネント９０３は、プログラマからカテゴリの選択を受け取る。ブロック１１０５で、コンポーネント９０３は、プログラマに子ノード情報（例えば、修飾子カテゴリの場合はstatic又はpublic）の選択を促すプロンプトを出す。ブロック１１０６で、このコンポーネントは、子ノード情報の選択を受け取る。ブロック１１０７で、コンポーネント９０３は、プログラムツリー格納部の更新を呼び出して、選択されたカテゴリ及び子ノード情報を伴う子ノードの挿入を反映するようにプログラムツリー格納部を更新する。ブロック１１０８で、コンポーネント９０３は、更新されたプログラムツリーを表示し、その後、終了する。
【００２９】
図１２は、一実施形態において、プログラムツリー格納部９０５の更新の処理を示すフローチャートである。コンポーネントは、プログラムツリー格納部９０５の更新を制御する。コンポーネントには、選択されたノードの情報、選択のタイプ、及びプログラムツリーへの更新を記述する情報が伝えられる。図示する処理は、選択が下位選択であり、かつ、アクションが、指定されたノード情報を伴う指定されたカテゴリのノードを挿入するものである場合に実行される。判断ブロック１２０４では、選択が下位選択であり、かつ、アクションがノードを挿入するものである場合、コンポーネントはブロック１２０２に進み、そうでない場合は、このコンポーネントは他のタイプの選択及びアクションの処理に進む。判断ブロック１２０２で、挿入が構文的に正しい場合、このコンポーネントはブロック１２０４で処理を続行し、それ以外の場合、このコンポーネントはブロック１２０３で処理を続行する。ブロック１２０３で、このコンポーネントは、挿入の記述をプログラムツリーへの変更の保留リストに追加し、その後、戻る。判断ブロック１２０１で、選択されたノードについて、指定されたカテゴリのカテゴリデータ構造のインスタンスがすでに存在する場合、このコンポーネントはブロック１２０６で処理を続行し、それ以外の場合、このコンポーネントはブロック１２０５で処理を続行する。ブロック１２０５で、このコンポーネントは、指定されたカテゴリのカテゴリデータ構造のインスタンスを生成する。また、このコンポーネントは、選択されたノードに、インスタンスへの参照を追加する。ブロック１２０６で、このコンポーネントは、子ノードを生成し、その子ノードへの参照をカテゴリデータ構造のインスタンスに追加し、その後、終了する。
【００３０】
説明のために編集システムの特定の実施形態を本明細書に記述してきたが、本発明の趣旨及び範囲から逸脱せずに様々な修正を行うことができることが、当業者には理解されよう。したがって、本発明は、特許請求の範囲によって定義される。
【図１】
2010146583.tif 000003
【図２Ａ】
2010146583.tif 000004
【図２Ｂ】
2010146583.tif 000005
【図３】
2010146583.tif 000006
【図４】
2010146583.tif 000007
【図５】
2010146583.tif 000008
【図６】
2010146583.tif 000009
【図７】
2010146583.tif 000010
【図８】
2010146583.tif 000011
【図９】
2010146583.tif 000012
【図１０】
2010146583.tif 000013
【図１１】
2010146583.tif 000014
【図１２】
2010146583.tif 000015
【手続補正書】
【提出日】平成22年2月15日(2010.2.15)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
プログラムを表すプログラムツリーをコンピュータに生成させるためのコンパイラプログラムであって、
前記プログラムツリーは、
ノードカテゴリとこれに関連付けられたカテゴリとをマッピングすることを含むノードカテゴリマッピングと、
前記プログラムツリーによって表される前記プログラムの演算子を表す親ノードであって、一のカテゴリを有する親ノードと、
それぞれが一のカテゴリに関連付けられた複数のカテゴリデータ構造と、
前記親ノードの前記演算子のオペランドを表す前記親ノードの複数の子ノードであって、それぞれが前記親ノードのカテゴリに関連付けられた一のカテゴリを有する複数の子ノードと
を含み、
前記親ノードは、前記子ノードのカテゴリに関連付けられた前記カテゴリデータ構造を介してそれぞれの子ノードを参照し、
それぞれのカテゴリデータ構造は、その対応するカテゴリを有する子ノードを参照し、
それぞれのカテゴリデータ構造は、その他のいずれのカテゴリデータ構造をも参照せず、
前記親ノード及び前記子ノードはカテゴリデータ構造ではないコンパイラプログラム。
【請求項２】
それぞれのカテゴリデータ構造は自身が関連付けられたカテゴリの指示を含む、請求項１に記載のコンパイラプログラム。
【請求項３】
前記参照はポインタである、請求項２に記載のコンパイラプログラム。
【請求項４】
前記親ノードは前記カテゴリデータ構造の複数のインスタンスを指し、
それぞれのカテゴリデータ構造のインスタンスは対応するカテゴリを有する子ノードを参照する、請求項１に記載のコンパイラプログラム。
【請求項５】
一の子ノードは複数の子ノードを有し、前記複数の子ノードは前記複数の子ノードのカテゴリ別にまとめられる、請求項１に記載のコンパイラプログラム。
【請求項６】
一の親ノードは一のノードタイプを有し、それぞれのノードタイプは自身の子ノードに対するカテゴリを定義している、請求項１に記載のコンパイラプログラム。
【請求項７】
プロセッサ及びメモリを有するコンピュータシステムによって実行される、プログラムを表すプログラムツリーを生成する方法であって、
ノードタイプとこれに関連付けられたノードカテゴリとをマッピングすることを含むノードタイプ／カテゴリマッピングを与えることと、
前記プログラムツリーに、タイプを有する親ノードを与えることと、
前記親ノードの複数の子ノードであって、それぞれの子ノードが前記ノードタイプ／カテゴリマッピングに基づいて前記親ノードのタイプに関連付けられたカテゴリを有する複数の子ノードを与えることと、
それぞれの子ノードのカテゴリに対して、
前記カテゴリに対するカテゴリデータ構造を生成することと、
前記生成されたカテゴリデータ構造への参照を前記親ノードに追加することと、
前記生成されたカテゴリデータ構造に関連付けられたカテゴリを有するそれぞれの子ノードへの参照を前記生成されたカテゴリデータ構造に追加することと
を含み、
前記生成されたカテゴリデータ構造は、その他のカテゴリデータ構造への参照を含まず、
一のカテゴリに関連付けられた複数の子ノードが、当該カテゴリのためのカテゴリデータ構造を介して前記親ノードによりアクセス可能である方法。
【請求項８】
それぞれのカテゴリデータ構造は自身が関連付けられたカテゴリの指示を含む、請求項７に記載の方法。
【請求項９】
前記カテゴリは、表現のオペランドノードと非オペランドノードとでノードを区別する、請求項７に記載の方法。
【請求項１０】
前記プログラムツリーに子ノードを追加する指示を受け取ることと、
前記親ノードに関連付けることのできる複数のカテゴリの指示を与えることと、
前記子ノードのカテゴリが追加されるとき、前記指示されたカテゴリの１つの選択を受け取ることと
を含む、請求項７に記載の方法。
【請求項１１】
前記プログラムツリーに子ノードを追加する前記指示を受け取ることは、
前記親ノードの選択をユーザから受け取ることと、
前記選択された親ノードに子ノードを追加する指示を前記ユーザから受け取ることと
を含む、請求項１０に記載の方法。
【請求項１２】
前記親ノードの選択をユーザから受け取ることは、前記親ノードが子ノードを現在有していないときに生じる、請求項１１に記載の方法。
【請求項１３】
前記プログラムツリーに子ノードを追加する指示を受け取ることは、
現在の子ノードの選択をユーザから受け取ることと、
前記現在の子ノードの兄弟ノードを追加する指示を前記ユーザから受け取ることと
を含む、請求項１０に記載の方法。
【請求項１４】
前記選択された現在の子ノードと追加される子ノードとは同じカテゴリを有する、請求項１３に記載の方法。
【請求項１５】
前記プログラムツリーの各ノードは一のノードタイプを有し、各ノードタイプは前記ノードタイプのノードに関連付けることができる複数のカテゴリを有する、請求項７に記載の方法。
【請求項１６】
それぞれのノードタイプに対する複数のカテゴリは、前記プログラムツリーのスキーマにおいて識別される、請求項１５に記載の方法。
【請求項１７】
プログラムを表すプログラムツリーをコンピュータシステムにおいて修正する方法であって、
ノードタイプとこれに関連付けられたカテゴリであってそれぞれが関連付けられたカテゴリデータ構造を有するカテゴリとをマッピングすることを含むノードタイプ／カテゴリマッピングを与えることと、
前記プログラムツリーの複数のノードの提示を表示することと、
前記表示された提示から前記プログラムツリーのノードを選ぶ選択をユーザから受け取ることであって、前記選択は、前記選ばれたノードの子ノードを前記プログラムツリーに追加することを示し、前記選ばれたノードはタイプを有することと、
前記与えられたノードタイプ／カテゴリマッピングに基づいて、前記選ばれたノードのタイプに関連付けられたカテゴリを決定することと、
前記決定されたカテゴリを表示することと、
前記表示されたカテゴリの１つを選ぶ選択を前記ユーザから受け取ることであって、前記選ばれたカテゴリは第１のカテゴリデータ構造に関連付けられることと、
前記選ばれたノードの子ノードとして一のノードを前記プログラムツリーに追加することと
を含み、
前記一のノードを前記プログラムツリーに追加することは、
前記第１のカテゴリーデータ構造への参照を前記親ノードに追加することと、
前記選ばれたノードの子ノードへの参照を前記第１のカテゴリーデータ構造に追加することと
を少なくとも部分的に含む方法。
【請求項１８】
前記ノードを選ぶ選択は、前記ノードの下位選択である、請求項１７に記載の方法。
【請求項１９】
前記選ばれたノードは、選ばれたときに子ノードを有さない、請求項１７に記載の方法。
【請求項２０】
前記選ばれたノードは、選ばれたときに子ノードを有する、請求項１７に記載の方法。
【請求項２１】
それぞれのカテゴリデータ構造は自身が関連付けられたカテゴリの指示を含む、請求項１７に記載の方法。
【請求項２２】
プログラムを表すプログラムツリーを生成するためのコンピュータシステムであって、
表現演算子を表す親ノードと、前記プログラムツリーによって表される前記プログラムの一部ではないカテゴリへの参照とを関連付ける手段と、
それぞれのカテゴリと、前記親ノードの複数の子ノードへの参照とを関連付ける手段と
を含み、
前記カテゴリは前記参照される子ノードを表現のオペランドノードと非オペランドノードとで区別するコンピュータシステム。
【請求項２３】
前記親ノードと前記カテゴリへの参照とを関連付ける手段は、前記親ノードに対するカテゴリのカテゴリデータ構造を生成する手段を含む、請求項２２に記載のシステム。
【請求項２４】
前記プログラムツリーに子ノードを追加する指示を受け取る手段と、
前記親ノードに関連付けることができるカテゴリの指示を与える手段と、
前記子ノードのカテゴリが追加されるとき、前記指示されたカテゴリの１つの選択を受け取る手段と
を含む、請求項２２に記載のシステム。
【請求項２５】
前記プログラムツリーに子ノードを追加する指示を受け取る手段は、
前記親ノードの選択をユーザから受け取る手段と、
前記選ばれた親ノードに子ノードを追加する指示を前記ユーザから受け取る手段と
を含む、請求項２４に記載のシステム。
【請求項２６】
前記親ノードの選択を前記ユーザから受け取る手段は、前記親ノードが子ノードを現在有していないときに生じる、請求項２５に記載のシステム。
【請求項２７】
前記プログラムツリーに子ノードを追加する前記指示を受け取る手段は、
現在の子ノードの選択をユーザから受け取る手段と、
前記現在の子ノードの兄弟ノードを追加する指示を前記ユーザから受け取る手段と
を含む、請求項２４に記載のシステム。
【請求項２８】
前記プログラムツリーの各ノードは１つのノードタイプを有し、各ノードタイプは前記ノードタイプのノードに関連付けることができる複数のカテゴリを有する、請求項２２に記載のシステム。
【請求項２９】
各ノードタイプに対する前記複数のカテゴリは、前記プログラムツリーのスキーマにおいて識別される、請求項２８に記載のシステム。
【請求項３０】
コンピュータシステムを制御してプログラムを表すプログラムツリーを修正する命令を格納したコンピュータ可読媒体であって、
前記修正は、
前記プログラムツリーのノードの提示を表示することと、
ノードタイプとこれに関連付けられたカテゴリとをマッピングすることを含むノードタイプ／カテゴリマッピングを与えることと、
前記表示された表現からプログラムツリーのノードを選ぶ選択をユーザから受け取ることであって、前記選ばれたノードはタイプを有し、前記選択は、前記選ばれたノードの子ノードを前記プログラムツリーに追加することを示すことと、
前記与えられたノードタイプ／カテゴリマッピングに基づいて、前記選ばれたノードのタイプに関連付けられたカテゴリを決定することと、
前記決定されたカテゴリを表示することと、
前記表示されたカテゴリの１つを選ぶ選択を前記ユーザから受け取ることと、
前記選ばれたノードのための子ノードを生成することと、
前記選ばれたカテゴリに関連付けられたカテゴリデータ構造を生成することと、
前記生成されたカテゴリデータ構造へのポインタを前記選ばれたノードに追加することと、
前記生成された子ノードへのポインタを前記生成されたカテゴリデータ構造に追加することと
を含む方法により行われ、
一のカテゴリに関連付けられた子ノードが、当該カテゴリのためのカテゴリデータ構造を介してアクセス可能であるコンピュータ可読媒体。
【請求項３１】
前記ノードの選択は、前記ノードの下位選択である、請求項３０に記載のコンピュータ可読媒体。
【請求項３２】
前記選ばれたノードは、選ばれたときに子ノードを有さない、請求項３０に記載のコンピュータ可読媒体。
【請求項３３】
前記選ばれたノードは、選ばれたときに子ノードを有する、請求項３０に記載のコンピュータ可読媒体。
【請求項３４】
前記ノードの選択を受け取った後、子ノードの可能なカテゴリの指示を表示することを含む、請求項３０に記載のコンピュータ可読媒体。
【請求項３５】
親ノードは一のノードタイプを有し、当該ノードタイプの複数のノードの複数の子ノードに対するカテゴリは一のスキーマに記憶される、請求項３０に記載のコンピュータ可読媒体。
【請求項３６】
前記スキーマは、前記プログラムツリーの一部分である、請求項３５に記載のコンピュータ可読媒体。
【請求項３７】
それぞれのカテゴリデータ構造は自身が関連付けられたカテゴリの指示を含む、請求項３０に記載のコンピュータ可読媒体。
【請求項３８】
メモリ及びプロセッサを有するコンピュータにより行われる、プログラムを表すプログラムツリーを修正する方法であって、
ノードタイプとこれに関連付けられたカテゴリとをマッピングすることを含むノードタイプ／カテゴリマッピングを与えることと、
前記プログラムツリーのノードを選ぶ選択をユーザから受け取ることであって、前記選ばれたノードはタイプを有し、前記選択は前記選ばれたノードの子ノードを前記プログラムツリーに追加することを示すことと、
前記与えられたノードタイプ／カテゴリマッピングに基づいて前記選ばれたノードのタイプに関連付けられたカテゴリーを決定することと、
前記決定されたカテゴリーを表示することと、
前記表示されたカテゴリーの１つを選ぶ選択をユーザから受け取ることと、
前記選ばれたノードのための子ノードを生成することと、
前記選ばれたカテゴリに関連付けられたカテゴリデータ構造を生成することと、
前記生成されたカテゴリデータ構造へのポインタを前記選ばれたノードに追加することと、
前記生成された子ノードへのポインタを前記生成されたカテゴリデータ構造に追加することと
を含み、
一のカテゴリに関連付けられた子ノードは、当該カテゴリのためのカテゴリデータ構造を介してアクセス可能である方法。
【外国語明細書】
2010146583.tif 000016
2010146583.tif 000017
2010146583.tif 000018
2010146583.tif 000019
2010146583.tif 000020
2010146583.tif 000021
2010146583.tif 000022
2010146583.tif 000023
2010146583.tif 000024
2010146583.tif 000025
2010146583.tif 000026
2010146583.tif 000027
2010146583.tif 000028
2010146583.tif 000029
2010146583.tif 000030
2010146583.tif 000031
2010146583.tif 000032
2010146583.tif 000033
2010146583.tif 000034
2010146583.tif 000035
2010146583.tif 000036
2010146583.tif 000037
2010146583.tif 000038
2010146583.tif 000039
2010146583.tif 000040
2010146583.tif 000041
2010146583.tif 000042
2010146583.tif 000043
2010146583.tif 000044
2010146583.tif 000045
2010146583.tif 000046
2010146583.tif 000047
2010146583.tif 000048
2010146583.tif 000049