説明

モジュラフォレストオートマトン

モジュラフォレストオートマトン(MFA)は、半順序正規ツリーパターンについての統一された記載を提供する。MFAはまた、これらのパターンの決定化、サブタイプ化、交わり、および相補のための簡素な方法を提供する。MFAは、高性能のパターン分析およびマッチングをサポートする。モジュラフォレストオートマトンと併せて、モジュラフォレストトランスデューサにより、コンパイラが、セマンティックアクションを任意の状態遷移におくことが可能にされ、一方でラベル付き有向グラフの効率的な変換がサポートされる。

【発明の詳細な説明】
【技術分野】
【0001】
本発明は、モジュラフォレストオートマトンに関する。
【背景技術】
【0002】
プログラミング言語では、値のクラス間を区別するパターンを使用することが可能である。例えば、以下の疑似コードの2行では、整数のリストの合計を計算する関数が定義される。
Sum(nil)=0
Sum(cons[head,tail])=head+Sum(tail)
【0003】
この例のパターンは2つの役割を有する。すなわち、第1に、入力事例を区別すること、第2に、パターン変数および型推論の使用を介して簡潔な値の脱構築を可能にすることである。
【0004】
パターンは、構造型に密接に関連する。本明細書において記載する正規ツリーパターンは、変数束縛を含むことができる正規ツリー型である。セマンティックアクションと連結されたツリーパターンをツリー変換規則と呼ぶ。
【0005】
XMLスキーマ言語等の構造型システムでは、値のカテゴリを定義する。プログラミング言語では、構造型システムを使用してプログラムの安全特性を静的にチェックすることがよくある。SQLデータベースではまた、主として構造に焦点を合わせた型システムを使用する。結合の結果得られるテーブルは、例えば、無名の構造型を持つものとして記載されるタプルを含む。データベース管理システムは、様々なプログラムがシステムに記憶されるデータを解釈することが可能であることを要求する。構造型システムは、データベース管理システムがこの要求を満たすようにサポートする。
【0006】
分散システムではまた、構造型に対する要求を引き起こす。レイテンシのため、分散プログラムコンポーネント間で交換されるメッセージは、オブジェクト間で交換されるメソッド引数より大きくかつ複雑であることが多い。
【0007】
データベースに記憶され分散コンポーネント間で交換される値は、複雑性においては、プログラム表現により操作される単純な値とチューリングマシンの複雑性との中間にある。本明細書において記載するが、正規ツリーパターンを使用して構造の複雑性のこれらの中間レベルが定義される。
【0008】
順序正規ツリーパターンおよび非順序正規ツリーパターンの両方を表現しかつ分析することは、有用かつ有益な能力であろう。分析が有益に向上されるであろうドメインの例には、モデル検査および半順序ツリーパターンを使用する権限付与ロジックが含まれる。XMLスキーマ等の特定の既存の言語では、順序正規ツリーを部分的に使用することができるが、現在のところサブタイプ化するための手段がない。さらに、そのような言語では、現在既知の方法の下で効果的な実現をサポートするためにセマンティックな制約が課せられる。
【0009】
欲張りな正規表現のマッチングおよびプログラミング言語XStaticについて研究がなされ、正規の順序ツリー型をオブジェクト指向の言語にどのように組み込むかが模索されてきた。XDuceのように、XStaticでは、シーケンスに対して一定の表現を使用する。そのような研究により正規の順序ツリー型がオブジェクトにマップされ、フラット化を使用して、正規言語の包含物の自然意味論をサポートする。最後にtrxが、スキームの文脈で正規順序ツリー型を模索する。
【発明の概要】
【課題を解決するための手段】
【0010】
プッシュダウンフォレストオートマトン(PFA)についても研究が達成された。しかし、PFAでは、非順序のネスト(マルチ集合)に対処するサブタイプ化のアルゴリズムまたは機構を提供しない。
【0011】
本発明の実施形態は、モジュラフォレストオートマトン(MFA)に関する。本明細書において記載するモジュラフォレストオートマトンを使用して、正規ツリーパターンを記述および分析することが可能であり、また、ラベル付き有向グラフの変換を簡潔に表現することができるモジュラフォレストトランスデューサ(MFT)を作成することが可能である。グラフ変換は、ロジック、処理モデル、およびプログラミング言語の実装における基本の要素である。モジュラフォレストオートマトンの実装を使用して、高性能な、強力にタイプ化されたグラフ変換をサポートすることができる。
【0012】
モジュラフォレストオートマトンは、半順序の、有限の、ランク付けされないツリーのコレクションを定義、再組織化、および変換するための機構である。MFAは、MFA階層の分析および合成をサポートする。MFAでは、順序ツリーパターンおよび非順序ツリーパターンを統一して処理する。
【0013】
本明細書において記載する実施形態には、正規ツリーパターンを分析するための方法、システム、およびコンピュータプログラム製品が含まれる。特定の実施形態では、シーケンスおよび集合の両方を記述するモジュール(マシン(machine))として決定または書き換えされることが可能なデータが、受け取られる。和集合は、受け取られたデータから決定されるモジュールから作成することができる。決定されたモジュールおよびモジュールの和集合は、ラベル付き受容状態を備えることができる。ラベル付き受容状態から、サブタイプ関係がモジュールに対して決定される。
【0014】
本明細書において記載する他の実施異形態にはまた、正規ツリーパターンの変換を表現するための方法、システム、およびコンピュータプログラム製品が含まれる。正規ツリーパターンが受け取られ、特定のインスタンスデータが受け取られる。トランスデューサが、受け取られた正規ツリーパターンからコンパイルされる。トランスデューサの遷移が、所望の変換に対応する命令で拡張される。拡張されたトランスデューサの遷移およびインスタンスデータから、正規ツリーパターンのエレメントとインスタンスデータのエレメントとの間の対応が決定される。
【0015】
この要約は、以下の「発明を実施するための形態」でさらに述べる概念を選択して簡略化した形式で紹介するために提供するものである。この要約は、請求の主題の重要な特徴または主要な特徴を確認することを意図しておらず、請求の主題の範囲を決定する際の助けとして使用されることも意図していない。
【0016】
本発明の追加の特徴および利点は、以下に続く記載において説明され、一部は記載により明らかにされ、または、本発明の実践により習得されるであろう。本発明の特徴および利点は、特に添付の請求項において指摘される機器および組み合わせを用いて、実現および取得することができる。本発明のこれらおよびその他の特徴は、以下の記載および添付の請求項からさらに完全に明らかにされ、または、以下に説明されるような本発明の実践により習得されるであろう。
【図面の簡単な説明】
【0017】
本発明の上記に列挙した利点および特徴ならびに他の利点および特徴を取得することが可能な方法で記載するために、上記で簡単に記載された本発明のより詳しい説明が、添付の図面に例示される本発明の特定の実施形態を参照して描写される。これらの図面は、本発明の単なる典型的な実施形態を示し、かつ、従ってその範囲を制限するとみなされないことを理解した上で、本発明は、添付の図面を使用して追加の特異性および詳細と共に記載および説明されるであろう。
【図1】本発明の原理の実施形態を動作させることができるコンピュータ環境を例示する図である。
【図2】パターンのネストされたコンテンツに対する置換モジュラフォレストオートマトンを例示する図である。
【図3】特定のパターンExprの決定された翻訳を例示する図である。
【図4】パターンPondのネストされたコンテンツに対する最適化されたモジュラフォレストオートマトンを例示する図である。
【図5】サブタイプ分析で決定された種々のサブタイプの図式表現を例示する図である。
【図6】パターンGTEのネストされたコンテンツに対する非決定性モジュラフォレストオートマトンを例示する図である。
【図7】パターンGTEのネストされたコンテンツに対して決定されたモジュラフォレストオートマトンを例示する図である。
【図8】本発明の特定の実施形態に従って、正規ツリーパターンを分析するための方法のフローチャートを例示する図である。
【図9】本発明の特定の実施形態に従って、正規ツリーパターンの変換を表現するための方法のフローチャートを例示する図である。
【発明を実施するための形態】
【0018】
本明細書において記載する実施形態は、正規ツリーパターンを分析するための方法、システムおよびコンピュータプログラム製品に関する。本明細書において記載する追加の実施形態は、正規ツリーパターンの(単数または複数の)変換を表現するための方法、システムおよびコンピュータプログラム製品に関する。本発明の実施形態は、以下で詳細に検討するように、種々のコンピュータハードウェアを含む専用または汎用のコンピュータを備えることができる。
【0019】
図1は、本明細書において記載する実施形態が実践される例示のコンピュータ環境100を説明する。コンピュータ環境100には、1つまたは複数のコンピュータプロセッサ110が含まれる。コンピュータ環境100にはまた、1つまたは複数のコンピュータメモリのインスタンス120が含まれる。コンピュータメモリ120は、適切であることが既知である任意のコンピュータ可読メモリとすることができ、RAM、SRAM、およびフラッシュメモリを含む(がこれに限定されない)。コンピュータメモリはまた、ハードディスク、ソリッドステートディスクドライブ、CDROM、DVD、等の永続記憶装置130とすることができる。コンピュータメモリ120および記憶装置130は、任意の特定の実施形態において適切であるように、ROMまたはCDまたはDVD等の読取り専用メモリとすることができ、または、RAM、フラッシュメモリおよび一般的なディスクドライブ等の読取り可能かつ書込み可能メモリとすることができる。
【0020】
コンピュータ環境100にはまた、入力/出力140が含まれる。入力/出力140は、磁気ディスクに記憶されるデータ、ネットワークを介してアクセス可能なデータ、またはその他、等の任意の適切なフォーマットまたは媒体を備えることができる。コンピュータ環境100にはまた、データが送受信される外部永続記憶装置150が含まれる。記憶装置130と同様に、外部永続記憶装置150は、磁気ディスク、テープ、CD−R/W、またはその他、等の任意の適切な形式をとることができる。
【0021】
本発明の範囲内にある実施形態にはまた、コンピュータ実行可能命令またはそれに記憶されるデータ構造を搬送するまたは有するためのコンピュータ可読媒体が含まれる。そのようなコンピュータ可読媒体は、汎用または専用のコンピュータによりアクセス可能な任意の利用可能な媒体とすることができる。制限ではなく例として、そのようなコンピュータ可読媒体は、RAM、ROM、EEPROM、CD−ROMもしくは他の光ディスク記憶装置、磁気ディスク記憶装置もしくは他の磁気記憶デバイス、または、汎用または専用のコンピュータによりアクセス可能なコンピュータ実行可能命令またはデータ構造の形式の所望のプログラムコード手段を、搬送または記憶するために使用可能な任意の他の媒体、等の記憶媒体を備えることができる。ネットワークまたは別の通信接続(有線、無線、または有線と無線の組み合わせ)を介して、コンピュータに情報が転送または提供されると、コンピュータはその接続をコンピュータ可読媒体として適正に見なす。そのようなネットワークまたは通信接続を、本明細書において、通信媒体と称する。従って、任意のそのような接続を、適正にコンピュータ可読媒体と呼ぶ。記憶媒体および通信媒体の両方を含む上記の組み合わせもまた、コンピュータ可読媒体の範囲に含めることができる。
【0022】
コンピュータ実行可能命令は、例えば、汎用コンピュータ、専用コンピュータ、または専用の処理デバイスに、特定の機能または機能のグループを実行させる、命令およびデータを備える。そのようなコンピュータ実行可能命令は、コンピュータメモリ120内、永続記憶装置130内、任意の入力もしくは出力の媒体もしくはデバイス140上、または外部記憶装置150上、に記憶することができる。コンピュータ実行可能命令を、任意の適切な通信媒体を介して適切なコンピュータ環境に転送することもできる。
【0023】
主題が、構造的特徴および/または方法論的な動作に特有の言語で記載されたが、添付の請求項に定義される主題が必ずしも記載された特有の特徴または動作に限定されないことは理解されるべきである。むしろ、前述の特有の特徴および動作は、請求項を実装する例示の形式として開示される。
【0024】
本明細書において記載する実施形態は、正規ツリーパターンを分析するための方法、システム、およびコンピュータプログラム製品に関する。本明細書において記載する追加の実施形態は、正規ツリーパターンの変換を表現するための方法、システムおよびコンピュータプログラム製品に関する。本発明の実施形態は、以下で詳細に検討するように、種々のコンピュータハードウェアを含む専用または汎用のコンピュータを備えることができる。
【0025】
例えば、図8は、正規ツリーパターンを分析するための方法を例示する。方法は、1シーケンスおよび1集合の内の少なくとも1つを備える正規ツリーパターンを備えるデータを受け取るステップ810を含む。ツリーパターンが1シーケンスを備える場合、820で、そのシーケンスに対応するマシンが決定される。決定されたマシンは、「モジュール」とも呼ばれる。1シーケンスは、その名前が暗に示すように、特定の順番を有するエレメントの1集合である。
【0026】
830で、ツリーパターンが1集合を備える場合、その1集合に対応するマシンが決定される。特定の順番を有する1シーケンスとは対照的に、1集合は、特に順番が指定されないエレメントのコレクションとすることができる。
【0027】
840で、決定されたマシンの和集合が作成される。850で、決定されたマシン(モジュール)の和集合から、ラベル付き受容状態の1集合が決定される。最後に、860で、ラベル付き受容状態からサブタイプ関係が決定される。
【0028】
本明細書においてさらに詳細に記載するように、サブタイプ関係は、等価、サブタイプ、スーパータイプ、互いに素、および交わり、の内の1つとすることができる。2つのモジュールM1およびM2が、同一の受容状態を有す場合、これらは等価である。M1がM2の全ての受容状態を含み、その逆が無い場合、M1はM2のスーパータイプであり、M2はM1のサブタイプである。M1とM2が共通した受容状態を持たない場合、M1とM2は互いに素である。M1とM2がいくつかの受容状態を共有するが、M1、M2のそれぞれが他とは共有されない受容状態を有する場合、これらは交わっている。サブタイプ関係は、以下でより詳細に図5と併せて検討する。
【0029】
実施形態はまた、ラベル付きネストへの少なくとも1つの遷移を備えるルートレベルマシン(モジュール)を決定するステップを含む。ラベル付きネストは、本明細書においてより詳細に記載するように、Label[・・]またはLabel{・・}の形式を有することができる。モジュールは、ラベル付きネストに対応して作成される。ラベル付きネストからの復帰(リターン)に対応する継続状態は、スタック上に置くことができる。継続状態をスタック上に置いた後、ラベル付きネストに対応するアクションが実行される。受容状態がラベル付きネストに達すると、継続状態がスタックからポップされ、処理はルートレベルマシンに向かって再開される。
【0030】
明細書において記載する実施形態を採用すると、受け取られたデータは、プログラミング言語で構造型を定義するデータに対応する。そのようなデータは、本明細書において記載する技術により分析されて、構造型が等価であるか、または、本明細書に記載されるような他のサブタイプ関係のいずれかを有するか、を判定することができる。
【0031】
本明細書において記載する実施形態を採用すると、受け取られたデータは、データベースのスキーマおよび/またはスキーマ定義を備えるデータに対応する。そのようなデータは、本明細書において記載する技術により分析されて、スキーマとスキーマ定義が等価であるか、または、他のサブタイプ関係のいずれかを有するか、を判定することができる。
【0032】
本明細書において記載する実施形態を採用すると、受け取られたデータは、XMLスキーマに対応する。そのようなデータは、本明細書において記載する技術により分析されて、XMLスキーマが等価であるか、または、他のサブタイプ関係のいずれかを有するか、を判定することができる。
【0033】
本明細書において記載する実施形態を採用して、判定されたサブタイプ関係に対応する構造的関係および論理的関係を決定することができ、また、プログラミング言語、データベース、オブジェクト等におけるデータ構造に対する最適化、効率、およびデータ翻訳の目的に適用することができる。
【0034】
本明細書において記載する実施形態はまた、正規ツリーパターンの変換を表現するための方法を含む。図9は、正規ツリーパターンの変換を表現するための方法900を例示する。方法は、正規ツリーパターンに対応する第1のデータを受け取るステップ910を含む。方法はまた、実際のインスタンスに対応する第2のデータを受け取るステップ920を含む。
【0035】
例えば、正規ツリーパターンを備えるデータは、XMLスキーマを備えることができ、データベーススキーマを備えることができ、プログラミング言語またはオブジェクト定義のための構造型を備えることができる。実際のインスタンスに対応するデータは、データベース内のデータを備えることができ、シリアルデータ入力ストリームを備えることができ、または、オブジェクト指向のオブジェクト内で具現化されるデータまたはプログラミング言語内に定義される構造型を備えることができる。
【0036】
方法900は、正規ツリーパターンをトランスデューサにコンパイルするステップ930を含む。ツリーパターンのコンパイルについては、本記載の後の章でより詳細に記載する。コンパイルされると、940で、トランスデューサの遷移が所望の変換に対応する命令で拡張される。遷移が命令で拡張された後、950で、拡張された遷移から、および、実際のインスタンスに対応するデータから、インスタンスのエレメントと正規ツリーパターンのエレメントとの間の対応が決定される。
【0037】
例えば、Root[A+,B*,C?]等のパターン、および、実際のインスタンスデータ(環境内に与えられた)[aaa,bbb,−]がある。この例から、方法900では、特定の束縛A=‘aaa’、B=‘bbb’、およびC=‘−’を決定することができる。さらに、例えば、action:Root[A,B,C]→Root[A,C]、等のアクションが実行される。束縛が決定されると、例示のアクションは、「Bを削除する」アクションであると考えることができる。
【0038】
方法900を、変数束縛の環境に採用することができる。そのような変数束縛は、プログラミング言語、データベーススキーマ、XMLスキーマ等における構造型と、タイプまたはスキーマ内に定義される変数に対応する実際の値と、の間の対応を決定することができる。
【0039】
方法900の命令はまた、条件のマッチングを備えることができ、また、セマンティックアクションを備えることができる。方法900のインスタンスデータは、XMLスキーマインスタンスを備えることができ、特定のデータベーススキーマに従ってデータベース内に含まれるデータのインスタンスを備えることができ、または、プログラミング言語内に定義される構造型に従って定義または記憶されるデータを備えることができる。
【0040】
方法900はまた、クエリ表現をコンパイルするステップと、正規ツリーパターンおよび実際のインスタンスデータに対応するクエリ表現の結果を判定するステップと、を備えることができる。例えば、そのようなクエリは、SQL等のデータベースクエリとすることができ、また、データアクセス等の権限付与クエリとすることができる。
【0041】
なお、本明細書において記載する全ての方法および技術は、コンピュータ環境内で実行する方法、本明細書において記載する方法および技術を実行するためのコンピュータ実行可能コードを備えるコンピュータプログラム製品、および、本明細書において記載する方法および技術を実行するためのコンピュータプロセッサおよびコンピュータ実行可能コードを備えるコンピュータシステム、を備えることができる(がこれに限定されない)種々の実施形態において実現することができる。
【0042】
本明細書において記載する実施形態の方法および技術についての、より詳細かつ綿密な検討が続く。
【0043】
正規ツリーパターン
リスト1には、正規ツリーパターンに使用することができる構文を記載する。リスト1の文法では、項Actionはセマンティックアクションの言語を参照する引数である。項Name、Variable、およびLabelは、1つのアルファベットで呼ばれる記号の集合をそれぞれ提供する引数である。本明細書において記載するように、変数、パターン名、およびラベルの記号は、別々のアルファベットでできているものとする。これらの記号に加えて、パターンは、非パターン型、またはリテラル値を含む基の記号を参照することができる。
Definition→ Name‘=’Pattern
Pattern → Union
| ΛVariable.Pattern
| ε
Union → Rule(‘|’RuIe)*
Rule → TreeAction?
Tree → Label[Forest?]
| Label{Forest?}
| BindingTree
| TreeRepetition
| Tree∧Tree
| ¬Tree
| (Tree)
| any
| Reference
Forest → TreeForest,Tree
Repetition→ *|+|?
| [Min...Max]
Reference → SymbolTypeParam?
TypeParam → (Union)
Binding → Variable:
リスト1.正規ツリーパターン構文
【0044】
正規ツリーパターンの定義では、ネスト演算子(以下で説明する)の文脈内での再帰的なパターン参照を可能にするだけである。正規ツリー文法に対するそのような制約を採用して、正規ツリーの文法が文脈自由文字列文法の最大限の力を引き出すことが無いようにする。
【0045】
Repetition(繰り返し)の構造「*|+|?」は、この構造が修飾するTreeに対して許可される最小発生回数および最大発生回数を表す。最大発生回数は、無限とすることができる。演算子「*」「+」および「?」は、それぞれ[0..∞]、[l..∞]および[0..1]と解釈される。換言すると、「A*」は0個以上のA(すなわち、[0..∞])、「B+」は1つまたは複数個のB(すなわち、[l..∞])、「C?」は、0個または1個のC(すなわち,[0..1])、を意味する。この構造は、ランク付けされないツリーノードを特定するパターンをサポートする。ランク付けされないツリーノードは、任意の数の子を持つことができる。
【0046】
任意のワイルドカードは任意の値をマッチングする。¬演算子は、ツリーパターンを補間する。∧演算子は、1対のツリーパターンの共通集合を表す。|演算子は、1対のツリーパターンの和集合を表す。最後に、λP.b演算子は、ボディbおよびパターン引数Pを持つポリモーフィック(多型)パターンを表す。
【0047】
ネスト演算子L[Forest?]は、ラベルLの順序付きのランク付けされないツリーノードを定義する。そのような順序付きの項目はまた、シーケンスとも呼ばれる。ネスト演算子L{Forest?}は、ラベルLの非順序付きのランク付けされないツリーノードを定義する。非順序付きの項目は、集合(またはマルチ集合)とも呼ばれる。我々は、用語マルチ集合パターンを使用して、L{c}の形式のパターンを参照するが、これはcが0個以上のツリーノードのマルチ集合をマッチングするからである。我々は、用語半順序ツリーパターンを使用して、順序サブツリーおよび非順序サブツリーの両方を特定することができるツリーパターンを参照する。
【0048】
半順序ツリーパターンにより、厳密な順序ツリーパターンまたは非順序ツリーパターンを使用して表現することが冗長または不可能な考えを、プログラマが正確に表現することを可能にする。例えば、リスト2で定義される変換規則を含む処理モデル検査アプリケーションを以下に記載する。
par{sender:choice{seq[send[x:any],CS:any],any*},
receiver:choice{seq[recv[x:any],CR:any],any*},
procs:any*
==>
par{CS,CR,procs
リスト2 処理相互作用規則
ラベルparのマルチ集合パターンは、並行して実行される処理のコレクションをモデル化する。choiceでラベル付けされる各ノードは、選択肢の集合の中から選択することにより継続される処理をモデル化する。Seqでラベル付けされる各ノードは、処理のシーケンスを示す。最後に、send[x]およびreceive[x]は、タイプxのメッセージを送信および受信することに対応する。
【0049】
規則は、対になった処理(パターンにおける変数の送信側と受信側に結び付けられる)の間の相互作用をモデル化する。送信側の処理では、タイプxのメッセージを送信し、受信側の処理では、このメッセージを受信する。相互作用の後、並行処理のコレクションには、送信側(CS)の継続、受信側(CR)の継続、およびこの相互作用に加わらない処理のコレクション(procs)、が含まれる。
【0050】
並行処理の集合内には、相互作用のパターンとマッチすると、複数の対の潜在的に相互作用する処理、および、従って複数の可能性のある成果が存在する場合がある。以下に記載するMFAの機構を使用して、1つまたは複数のこれらの成果を生成することができる。
【0051】
マルチ集合パターンは、簡潔さ以上のものを提供する。これらはまた、実装および特定の実施形態において、入力コレクションの本質的には非順序の表現が使用されることを可能にする。探索ツリーまたはハッシュテーブル等の非順序の表現を直接使用することで、変換エンジンに入力コレクションに対して別のインデックスを形成させないようにすることができる。
【0052】
例えば、アクセス要求が権限付与のポリシーを満たすことを、要求をアサーションのデータベースおよび規則の集合に対してマッチングすることによりチェックする、以下に記載する権限付与ロジックの実装が、評価される。権限付与のポリシーのアプリケーションは、アサーションデータベースの非順序の表現に対して直接働くマルチ集合パターンを使用することができる。
【0053】
マルチ集合パターンおよびポリモーフィズム(多態性)が、正規ツリーの文法から削除されると、正規ツリー型システムは、理解されるように、XMLツリー変換の関数型プログラミング言語と同様のところにたどり着く。そのようなシステムを採用して、ネストされた正規の表現上のサブタイプ関係を決定するためのアルゴリズムを生成することができる。そのようなアルゴリズムでは、トップダウンのアプローチを使用して、パターンの表現を比較する。アルゴリズムは、正規ツリー表現に関する以前の理論的研究から発展し、それを拡大させる。このプロジェクトでは、最初はボトムアップツリーオートマトンの決定化を使用して包含物を決定したが、これは拡大可能なアプローチではないことが分かった、と報告されている。ボトムアップツリーオートマトンの決定化アルゴリズムは、サブセットの構成を適用する際に左の文脈を考慮に入れない。これは、指数関数的な爆発が、文脈に注意することよりもはるかに一般的なものになる原因となる。どのようにモジュラフォレストオートマトンが左の文脈を使用してそのような落とし穴を回避し、一方で決定化およびサブタイプ化に直接アプローチする簡略性を維持するのか、を以下に示す。
【0054】
別の実施形態では、上述のシステムを、ポリモーフィズム、関数型、およびレコードで拡大させる。レコードは、一意性制約をラベル全体に要求する。以下に記載するMFAの実装では、パターン変数全体への等式制約に加えて、一意性制約をサポートする。
【0055】
理解されるように、アンビエント計算演算子n[]、は、正規ツリーパターンの演算子Label{Forest?}に強力に対応する。アンビエント計算の並行合成演算子を、1対のツリーをその根で連結されるツリー合成演算子として解釈できることが実証される。アンビエント論理を、ツリー構造を記述しクエリするための基本として使用できることが提案される。アンビエント論理は、処理に関して推論するための一時的な空間論理である。リスト1の正規ツリーの文法とは異なり、アンビエント論理は非順序のネストのみを考慮する。アンビエント論理では、サブタイプ関係の決定は、含意を決定することと同意義である。これは、この理論の変形に対しても当てはまる。
【0056】
XMLスキーマ言語
成功裏にインポートされ、かつ、W3CXMLスキーマ言語のインスタンスに対するサブタイプ関係を決定する、モジュラフォレストオートマトン(MFA)の実装が、本明細書において記載される。XSD複合型は、構造式に対して名称を割り当てる。XSDにおける構造式は、コンテントモデルと呼ばれる。コンテントモデルは、要素宣言、属性一覧と呼ばれる非順序ネストパターン、および、パーティクルコンポジタを含む。all、choice、およびsequenceの3つのコンポジタがある。正規ツリー文法の和集合および連結のコンストラクタは、選択およびシーケンスのコンポジタにそれぞれ対応する。
【0057】
allコンポジタは、本明細書において記載する非順序のネスト演算子に対応する。XSDは、allコンポジタの使用について何らかの制約を与える。例えば、XSDではallコンポジタ内の項目は多様性が限定されることを要求する。
【0058】
XMLの要素の宣言は、要素qnameの役割を担う演算子名Labelを用い、正規ツリーの文法の順序ツリー構造Label[Forest?]と同一構造である。しかし、XMLスキーマ言語は、2つのコンテントパーティクルaおよびbの任意の和集合に対して、単一の先行読み取りの一意のパーティクル属性の実行、すわなち、トークンを1つだけ読むこと、をパーサが可能でなければならないことと、インスタンスがchoiceの枝aまたはbに対応するかどうかをパーサが識別可能でなければならないこととを要求する。
【0059】
モジュラフォレストオートマトン
半順序正規ツリーパターンについては上記に記載した。
モジュラフォレストオートマトン(MFA)は、シーケンスおよび集合の順序正規ツリーパターンおよび非順序正規ツリーパターンを統一して処理する機構を提供する。そのような順序正規ツリーパターンおよび非順序正規ツリーパターンは、シーケンスおよび集合と呼ばれることがある。各MFAは、MFA階層の分析および合成をサポートする規約を実装する。規約により、MFAは、本明細書において検討したように、決定化の間に左の文脈を活用することができる。MFAにおける左の文脈の使用により、ボトムアップツリーオートマトンの決定化のための特定の以前の方法に見られた、可能性のある状態の爆発が回避できる。
【0060】
モジュラフォレストオートマトン(MFA)は、可視プッシュダウンオートマトン(VPA)である。可視プッシュダウンオートマトンは、当業者には既知であるようなプッシュダウンオートマトンの1クラスである。MFAに対して、プッシュダウンオートマトンは1タプルとして定義される。
【0061】
M=(K,Σ,Γ,Δ,s,F)、ここで
Kは状態の有限集合、
Σは、アルファベット(入力記号)、
Γは、アルファベット(スタック記号)、
s∈Kは、初期状態、
F⊆Kは、最終状態の集合、
【0062】
Δは、遷移関係であり、(K×Σ*×Γ*)×(K×Γ*)の有限のサブセットである。
遷移関係は、3種類のもの(カレント状態、入力記号、ポップされるスタック記号)を対(新しい状態、プッシュされるスタック記号)にマップする。
【0063】
分析をサポートするには、MFAでは、可視プッシュダウン言語(VPL)のスタック使用の制約を採用する。このクラスの言語は、その遷移関係をリスト3の3つのプッシュダウン遷移カテゴリの1つに従うように制約するプッシュダウンオートマトンを使用して定義される。
Local(q0,a∈Σ1,ε)→(q1,ε)
Call(callSite,a∈ΣC,ε)−>(callTarget,callSite)
Return(returnSite,a∈Σr,callSite)→(continuation,ε)
リスト3 MFA遷移カテゴリ
これらのカテゴリは、Σを、call(コール)、return(リターン)、およびlocal(ローカル)、の遷移を生じさせることが可能な記号にそれぞれ対応する3つの互いに素な集合、ΣC、Σr、Σ1、に分割する。ローカル遷移は、正規有限オートマトンにおける遷移と同一である。MFAであるM0における状態q0からのコール遷移は、記号aを読み込み、callSiteをスタックにセーブし、状態callTargetに制御を渡す。リターン遷移は、スタックからcallSiteをポップさせ、カレント状態をcontinuation(継続)させる。
【0064】
上述のスタック規則により、VPLを、プッシュダウンオートマトンの、クリーネスターとリネームする和集合および連接の閉包性に加えて、共通集合および補集合の下で閉じたままにすることができる。一般的な非決定性文脈自由言語とは異なり、非決定性VPLのクラスは、決定性VPLのクラスと等価である。
【0065】
各MFAのMは、コール対象の状態の集合Tを有する。Mの開始状態は、コール遷移で終了するパスによりsから到達可能な任意の状態のように、T内にある。Mは、モジュールと呼ばれる状態の互いに素な集合の階層として見ることができる。Mは、各状態t∈Tに対して1つのモジュールを持つ。コール対象の状態をtとすると、対応するモジュールModule(T)は、ローカル遷移のみを使用してtから到達可能な状態の集合である。
【0066】
1つのモジュールはただ1つのコール対象の状態tを含むことが要求される。コール対象の状態tは、モジュールのエントリポイントと呼ばれる。従って、MFAは、別のコール対象の状態からローカル遷移により到達可能な対象の状態を有するコール遷移を含むことができない。MFAの開始状態を含むモジュールは、MFAのトップレベルモジュールと呼ばれる。スタック規則を維持するために、MFAでは、モジュール間ε遷移を許可しない。
【0067】
有限の追加の記帳をMFAに使用して、VPAのコール/リターン戦略を、非順序ネストパターンに適用して、順序ネストパターンおよび非順序ネストパターンの両方に適用可能な単一のサブタイプ化方法を得る。
【0068】
各MFAの状態は、0個以上のパターンの同値類が状態により受容されることを示すビットベクトルでラベル付けされる。このラベルはタグと呼ばれる。各MFAには、マッピングTag:K→B(ここで、Bはkビットの文字列)が含まれる。所与のモジュールMに対して、kは一定であり、kはモジュールMのタグ長と呼ばれる。Fにおける各最終状態fに対して、Tag(f)は少なくとも1つの非ゼロビットを含まなければならない。
【0069】
タグの目的は、呼び出しから復帰した時に、呼び出しているMFAをどのように継続させるかを導くことである。MFAにおいて、リターン遷移は、固定した対象の状態を持たない。その代わり、MFAの状態sからのリターン遷移は、コール状態をスタックからポップさせ、スタックTag(s)にプッシュし、カレント状態をコール状態に変更する。そして、コール状態は、タグをスタックからポップさせ、かつ、制御を継続状態に渡す、継続遷移を実行する。
【0070】
MFA機構に継続遷移を追加することは、MFAの基本のプロパティを変更することではない。なぜなら、継続遷移を持つMFAの継続遷移を除去することができるからである。継続遷移を持つMFAの継続遷移を除去することは、以下のように行う。まず、Module(t)における状態の、コール対象の状態tを有する各コールサイトcに対するコピーを作る。このコピーは対象モジュールと呼ばれる。次に、対象モジュールにおける各リターン遷移(r;α∈Σr,c)→(c,tag)に対して、対応する継続遷移(c,ε,tag)→(continuation;ε)をコールモジュールにおいて求め、両方の遷移を削除する。最後に、リターン遷移(r;α∈Σr;c)→(continuation;ε)を対象モジュールに追加する。上述したように継続遷移の削除が可能であるため、MFAが継続遷移を持つことが推測される。
【0071】
また、MFAが、フォレストの入力スタックと呼ばれるスタック対するアクセスを有する、と推測することができる。MFAの実行は、入力スタックが元の入力フォレストを含むMFAの開始状態で始まる。MFAには、カレントツリーの概念が含まれる。カレントツリーは、入力スタックのトップにあるフォレスト内の何かのツリーである。これらの構想を使用して、MFAの特定の実装にマップすることができる。コールは、カレントツリーの子を入力スタックにプッシュする。リターンは子をスタックからポップさせる。
【0072】
モジュールMのローカル遷移のみを考慮すると、Mは、フォレストのコンテンツを認識する正規文字列オートマトンである。理解されるように、これを使用してプッシュダウンフォレストオートマトン(PFA)のクラスを定義することができる。プッシュダウンフォレストオートマトンは、フォレスト状態QFおよびツリー状態QTという2つの状態の集合を持つ。プッシュダウンフォレストオートマトンは、フォレスト状態の互いに素な集合に連結するEntry(入場)遷移およびExit(退場)遷移を持つ。プッシュダウンフォレストオートマトンはまた、退場遷移からの情報を組み込み、かつ、制御をツリー状態からフォレスト状態に渡す、遷移関係Combを有する。
【0073】
タグがMFAから削除されると、PFAはMFAと同一構造となる。所与のPFAであるPを、等価のMFAであるMPに以下のように変換することができる。Pの各フォレスト状態に対して、Mpにおける状態を作成する。Pにおける各ツリー状態に対して、Mpにおける状態を作成する。Pの入場遷移、退場遷移、その組み合わせの遷移、およびローカル遷移を直接MPにコピーする。これらは、コール遷移、リターン遷移、継続遷移、ローカル遷移にそれぞれ対応する。各コール状態cをフォレスト状態とツリー状態tとに分割すること、かつ、初期状態がtである継続遷移となるべき継続遷移を適合させることにより、タグの無いMFAを、等価のPFAに変換することができる。
【0074】
プリプロセッサPrep(s)を、任意のMFAの状態sと関連付けることができる。Prep(s)は、有効なMFAに対してまたは⊥に対して設定されなければならない。所与のモジュール内では、全ての状態が同じプリプロセッサ値を共有しなければならない。状態が⊥以外のプリプロセッサを有するモジュールは、プリプロセシングモジュールと呼ばれる。入力フォレストをiとすると、プリプロセシングモジュールは、iの各エレメントに対してそのエレメントを処理する前にプリプロセッサを呼び出す。プリプロセッサを使用して、入力の同値類間を区別する。プリプロセッサを再帰的に呼び出すことはできない。特に、プリプロセシングモジュールprepの状態には、Prep(t)=prepであるような対象状態tを有する遷移を含むパスを初期化できるものはない。プリプロセッサを使用して、マルチ集合パターンをマッチンング可能なMFAを構成することができる。
【0075】
プリプロセシングモジュールを追加することは、MFAの基本のプロパティを変更することではない。プリプロセシングモジュールは、その各入力iをΨ[i](ここでΨは予約ラベル)に変換することにより動作するものと考えることができる。そして、プリプロセッシングのステップは、Ψでラベル付けされるネストに対してコール遷移として符号化することができる。
【0076】
また、セマンティックアクションAction(tr)を、任意のローカルMFA遷移trに追加することができる。このようにして拡張される遷移は、アクション遷移と呼ばれる。1つまたは複数のアクション遷移を持つMFAは、モジュラフォレストトランスデューサ(MFT)と呼ばれる。セマンティックアクションの順序付けは、MFT決定化の間、保持される。
【0077】
MFAへのツリーパターンの翻訳
半順序正規ツリーパターンは、MFAに変換することができる。共通集合および補集合の方法には、決定化ステップが含まれるため、非決定性MFA(NMFA)の決定化のための方法の詳細を最初に提供する。
【0078】
ツリーパターンからNMFAを形成するための構築プロシージャは、他の既知の構築プロシージャとは異なる。第1に、ツリーパターンには、ネスト演算子が含まれる。第2に、ツリーパターンは、アクションおよび変数束縛を含むことができる。特定の実装におけるパターンコンパイラは、変数束縛をアクションに翻訳することができる。従って、変数束縛は特には扱わない。
【0079】
MFAへの入力は、ツリー値の適格なフォレストとすることができる。適格な入力フォレストは、フォレスト終了の記号「]」で終了する。翻訳プロシージャは、あらゆる生成されたMFA状態sに対して、にリターン遷移を追加する]。
【0080】
2つのNMFAの和集合M2=M0∪M1は、タグおよびプリプロセッサに調整を加えることにより拡張される既知の標準的な方法を使用して計算される。構築においては、M0が長さk0のタグを持ち、M1が長さk1のタグを持つことを前提とする。M2は、長さk0+k1のタグを持つこととなる。M2の状態sがM0の最終状態を有する時、k1個のゼロでできた文字列がそのタグに加えられる。そうでなければ、sがM1の最終状態である時、そのタグは左にk0個分シフトされ、ゼロが書き込まれる。
【0081】
プリプロセシングモジュールの組み合わせをサポートするには、和集合の構築を以下のように修正する。M2=M0∪M1を計算する時、M0のトップレベルモジュールがプリプロセッサprep0≠⊥を持ち、かつ、トップレベルモジュールM1がプリプロセッサprep1≠⊥を持つ場合、M2のトップレベルモジュールの各状態にプリプロセッサprep0∪prep1を割り当てる。
【0082】
プリプロセシングモジュールと正規モジュールを組み合わせるには、プリプロセッサを、正規モジュールに対して合成する。prep0≠⊥かつprep1=⊥であると仮定する。Mlに対するプリプロセッサは、M1のローカル遷移のための遷移記号を認識するMFAの集合の和集合に対して第1の設定prep1により合成される。次に、M1の遷移関係内の各コール遷移(c,L,ε)→(callTarget,c)に対して、prep1=prep1∪Nを設定する(ここでNは、開始状態がcallTargetであるモジュールにより識別される子を持つLでラベル付けされるツリーを認識するMFAである)。
【0083】
ネスト
ネスト演算子は、順序または非順序のどちらであっても翻訳される。ラベルLおよびコンテンツcのネスト演算子を仮定すると、まず、cに対してMcというNMFAを作成し、開始状態をscとする。次に、MnestというNMFAを作成し、開始状態s、最終状態f、および、遷移が(s,L,ε)→(sc,s)(Mcをコール)および(s,ε,tagc)→(f,ε)(コールから継続)とする。最後に、Mcの状態をMnestに組み込み、Mcの各最終状態fcをタグtagcに割り当て、fcを、リターン遷移(fc,],s)→(s;tagc)を持つ非最終状態に変更する。この構築において、Mcの状態がMnestのモジュールになる。
【0084】
連接演算子を使用して、順序ネストのコンテンツを翻訳することができる。1対のNMFAをM0およびM1とすると、この方法では、M2に対して新しい開始状態を作成し、M0の各最終状態からM1の開始状態へのε遷移を作成することによりsからM0の開始状態へのε遷移を作成し、最後にM2の最終状態としてM1の最終状態を採用することにより、M2=M0,M1を構築する。
【0085】
マルチ集合のネストされたコンテンツ
以下の戦略を使用して、非順序ネストのコンテンツを認識するMFAを生成することができる。
【0086】
一般に、マルチ集合パターンは、以下の形式を持つものと見なすことができる。
【0087】
【数1】

【0088】
この表記では、入力コレクションをマッチングするマルチ集合ネスト演算子の内容に対して、各パターンエレメントPiが少なくともli個の入力エレメントとマッチしなければならず、また、多くともhi個の入力エレメントとマッチすることができる、ということが指定される。
【0089】
マルチ集合パターンは、最初に変換されて任意の発生の制約が取り除かれる。上述のように指定されるマルチ集合パターンをPとすると、パターンコンパイラは、以下のようにPを等価なマルチ集合パターンP’に変換することができる。
P内の各エレメントパターン
【0090】
【数2】

【0091】
に対して、
a)P’にpiのl1個のコピーを追加する。
これらのコピーをP’の要求されるパターンエレメントとする。
b)hiが有限ならば、p1*をP’に追加する。
追加されたパターンをP’の非束縛パターンエレメントとする。
そうでなければ、pi?のhi−li個のコピーをP’に追加する。
これらのコピーをP’の選択的パターンエレメントとする。
リスト4 変換マルチ集合パターン
パターンコンパイラは次に、パターンエレメント∪iiの和集合をマッチングするエレメントMFAと呼ばれるプリプロセシングMFAを構築する。第3に、パターンコンパイラは、置換MFAを構築する。置換MFAは、その入力上にプリプロセッサとしてエレメントMFAを呼び出す。各呼び出しにおいて、エレメントMFAは、どのpiがカレント入力とマッチするかを示すタグを戻す。置換MFAは、要求されるパターンまたは選択的パターンとマッチする入力に遭遇すると、状態を変更する。状態変更は、要求されるパターンまたは選択的パターンをカウントする。置換MFAは、非束縛パターンに遭遇すると、カレント状態にループバックする。
【0092】
置換MFAが、カウントオートマトンの形式であることは認識されるであろう。置換MFAは、そのプリプロセッサステップでの使用における他のカウントオートマトンとは異なる。図2は、置換MFAが入力をどのようにカウントするかを例示する。図2に例示されるMFA200は、以下のパターンのネストされたコンテンツをマッチングする。
Pond=Pond{water,frog+,canoe*,bridge?}
【0093】
Repetition(繰り返し)、Reference(参照)、Type Parameter(型引数)
リスト1の繰り返し構造を翻訳するには、パターンコンパイラでは、周知の技術を使用する。この構造を拡張して、繰り返されるパターンをマッチングして入力項目を蓄積する変数束縛を実装することができる。
【0094】
記号参照を翻訳するには、パターンコンパイラが、記号のいくつかのクラス間を区別しなければならない。基本型すなわちリテラル記号symは、symに対する単一のローカル遷移として翻訳される。型引数paramへの参照は、paramに対する形式的遷移として翻訳される。形式的遷移は実行することができない。コンパイラは、形式的遷移を含むパラメータ化されたモジュールを生成することができるが、実行可能なモジュールを作成するためには、モジュールの形式的遷移に対して実際のパターンを与えることにより、パラメータ化されたモジュールをインスタンス化しなければならない。インスタンス化の間、コンパイラは、各形式的遷移の代わりに、対応する実際のパターンの翻訳を用いる。
【0095】
パターンコンパイラは、パターンPへの参照を、Pを参照した文脈に、Pを翻訳して変換することで代用して、翻訳する。知られているように、正規ツリーの文法は、next演算子の文脈の外への再帰的な参照を許可しない。パターンコンパイラは、このプロパティと、ネストがコールとしてコンパイルされるという不変条件と、を組み合わせて、全てのインライン展開が、ネスト演算子またはパターン参照を含まないパターン等の基本事例に到達することを確実にすることができる。
【0096】
例えば、図3は、以下の再帰的パターンに対する翻訳を例示する。
Expr=c|plus[Expr,Expr]
図3では、各ノードがそのタグでラベル付けされる。図3には2つのモジュールが含まれ、それぞれ、300および310で示され、Expr300およびPlusNest310と名付けられる。Expr300は、和集合をマッチングするためタグ長2を持つ。PlusNest310はタグ長1を持つ。モジュールExpr300は、MFAの開始状態を含み、cをマッチングすることにより、または、PlusNest310を呼び出して、PlusNestからタグ1が復帰した時に、10がタグ付けされた最終状態に継続することにより、Exprパターンをマッチングする。PlusNest310は、パターンExprの2つのインラインインスタンスを連接させることにより、パターンフラグメント[Expr,Expr]をマッチングする。Exprのこれらのインライン展開は、PlusNestへの再帰的呼び出しを生み出す。非最終状態へつながるリターン遷移またはパスは示さない。
【0097】

【0098】
リスト6は、MFAを決定化するための構造を提供する。決定化を簡素化するために、コール遷移
(c,Label,ε)→(callTarget,c)
と、その関連する継続遷移
(c,ε,tag)→(cont,ε)
と、をネスト遷移と呼ばれるモジュール内遷移
(c,(Label,callTarget,tag),ε)→(cont,ε)
として組み合わせて表す。
この表現により、決定化メソッドでは遷移を均一に処理できるが、これはローカル遷移およびネスト遷移の両方がモジュール内遷移であるからである。リスト6の決定化メソッドにおける使用のために、関数Labels(s)が導入され、これにより、sから生じるネスト遷移において使用されるラベルの集合が生み出される。
【0099】
トップレベルモジュールをMとすると、決定化メソッドでは、以下の2つのステップを、NFAの決定化のためのクラスメソッドに追加する。第1に、ステップ2.cでは、CombineNestsメソッドを使用して、状態tからのネスト遷移のコール対象を組み合わせる。第2に、ステップ4では、決定されたMFAの最終状態F’の集合における各最終状態に対するタグを更新する。所与の最終状態f’に対して、ステップ4では、f’の要素であるNMFAの状態のタグ全体に亘って、f’に対するタグをビットワイズ論理和に設定する。
【0100】
決定化メソッドでは、サブルーチンとしてε閉包演算子E(s)を使用する。状態をsとすると、E(s)は、ε遷移のみを含むパスによりsから到達可能な状態の集合である。明確にするために、リスト6では、ワイルドカード遷移の扱いに関する詳細は省略する。状態tから生じるワイルドカード遷移を実装するために、ワイルドカード遷移に対するmovesetを、tから生じる各非ワイルドカード遷移のmovesetと組み合わせる。
【0101】
サブタイプ化
決定化の間、追加の記帳に労力を使ってタグを追跡するため、追加の記帳の利点が、1対のMFAであるM0およびM1の比較において得られる。MFAを比較するためのプロシージャをリスト7に与える。
0.1対のMFAをM0およびM1とし、M0およびM1により認識される値の集合間の包含関係を決定する。
1.M0またはM1の各状態qに対して、
Tag(q)≠0ならば、Tag(q)=1を設定;
そうでなければ、Tag(q)=0を設定;
2.M2=M0∪M1を設定する。
(例えば、和集合の構造では、M0の最終状態にタグ01を割り当て、M1の最終状態にタグ10を割り当てる)
3.Determinize(M2)の最終状態にある異なるタグの集合にCを設定する。
表1のCの値を調べることによりM0とM1との関係を求める。
リスト7 MFA比較アルゴリズム
【0102】
重要な目的は、決定化プロシージャが、最終状態にあるタグを介して、M0およびM1が同時にアクセスされるのか、および、M0またはM1または両方がお互いに無関係にアクセスされるのか、について追跡することである。表1xxxxを使用して、比較の結果に対して、M0およびM1の決定化された和集合における最終状態に存在するタグ値の集合Cをマップすることができる。図5は、表1に列挙される可能性のあるサブタイプ関係の図式的な例示である。
【0103】
【表1】

【0104】
図5は、等価500関係、サブタイプ510関係、スーパータイプ520関係、互いに素530関係、および交わり540関係、のそれぞれを示す。
補集合、共通集合、差
追加の利点が、上述したタグの記帳から得られる。タグを使用して、MFAの補集合、共通集合、および差のためのプロシージャを実装することができる。共通集合M0∧M1を構成するために、共通集合構造はまず、決定化された和集合I=Determinize(M0∪M1)を計算し、次に、タグ11を持つ最終状態が到達可能できない各状態tをIから除去する。
【0105】
この計算の結果、MFAである、状態を持たないIが得られた場合は、単一の非アクセス開始状態がIに加えられ、Iは入力にアクセスしないMFAとなる。
【0106】
同様の構造を使用して、M0−M1を計算することができる。そのようにするには、上記の交わりの構造においてタグ11の代わりにタグ01を用いる。M1−M0を計算するために、構造内にタグ10を使用する。
【0107】
¬M、すなわちMの補集合、を構築するには、補集合構造はまず、M’=Determinize(M)を計算する。次に、M’の各最終状態fに対して、構造は、fのタグを0に設定し、fを非最終とする。元のM’の各非最終状態nfに対して、構造は、nfのタグを1に設定し、nfを最終とする。タグが調節されたM’は¬Mを受容する。
【0108】
この構造の重要な態様は、呼び出されたモジュールにより戻されたゼロのタグに対する遷移が最終状態につながるということである。ゼロのタグに対して暗黙的遷移を使用することにより空間を確保するMFAの実装では、これらの遷移を補集合に対する明示的遷移に変換する方法を持たなければならない。
セマンティックアクションの順序付け
特定の本発明の実施形態の利点により、パターンコンパイラが、セマンティックアクションを任意のNMFAの遷移に置くことが可能にされる。この柔軟性をサポートするために、決定化の間、セマンティックアクションの順序を保持するための方法が必要とされる。NMFAであるMの全てのパス[tr1,tr2,...,trn]に対して、i<jの時に限りAction(tri)はAction(trj)の前に実行される、というプロパティを保持することは有益である。このプロパティを保持するために、MのパスがDeterminize(M)の遷移と関連付けられる。
【0109】
これを達成するために、決定性MFAの基本パス
M’=Determinize(M)
が、ローカル遷移またはネスト遷移のシーケンス[tr1,tr2,...,trn]として定義され、各遷移tri=(qi,sym,ε)→(qi+1,ε)に対して、qi+1が入力遷移を1つだけ持つ、i=0、またはi+1=n、のいずれかであるとする。この定義の目的のため、M’の開始状態は、暗黙的入力遷移を持つと考える。
【0110】
M’の基本パスは、複数の入力遷移を持つ状態で開始および終了することができる。しかし、基本パス中の任意の中間状態は、厳密に1つの遷移のみを持たなければならない。このプロパティから導かれる結果は、基本パスの最終遷移trnが一意的にこの基本パスを識別するということである。
【0111】
この結果は、各基本パスbpの最終遷移trnに、bpに対応するNMFAのパスの集合npから順番に集められるセマンティックアクションのシーケンスの集合Aを割り当てることにより、使用される。MFTは、bpの遷移trnを実行する時に、Aの各要素をも実行する。
【0112】
M’の所与の基本パスbpに対して、Mからの対応するパスnpの集合が、以下の方法で求められる。まず、bp内の各遷移triに対して、triに対応するNMFAの遷移を求める。NMFAの遷移
ntr=(r1,sym,ε)→(r2,ε)
は、r1∈qiかつr2∈qi+1である限り、triに対応する。
【0113】
triに対応する各NMFAの遷移に対して、NMFAのパスは、npathi=patha,ntr,pathb(ここで、pathaは以下のプロパティを持つ)であるように構築される。第1に、pathaは全て、最初の状態と最後の状態がqi内にあるε遷移から成る。第2に、pathaの第1の状態は、qi内に先行するものを持たない。最後に、pathaの最終的な状態は、遷移ntrの最初の状態である。同様に、pathbは全て、最初の状態と最後の状態がqi+1内にあるε遷移から成り、pathbは、ntrの最後の状態で始まる。
【0114】
順に、NMFAのパスは、bp内の何らかの遷移に対応する全てのサブパスを一続きにすることにより、基本パスbpに従って構築される。bpの各遷移が、対応するNMFAの遷移を1つしか持たない場合、これらのサブパスは、単一のNMFAパスを形成するであろう。しかし、bpのいくつかの遷移が、対応するNMFAの遷移を複数持つ場合、npathaの最終的な状態がnpathbの第1の状態となるNMFAのサブパスの対(npatha、npathb)を連結することにより、サブパスを組み合わせることができる。所与のNMFAのサブパスが、複数のそのような対に関与することができ、そのため、所与の基本パスに対応するいくつかのNMFAのパスは、共通のプレフィックスを共有することができる。
【0115】
図6および7は、パターン
GTE=GTE[any,0]|GTE[0,S[any]]
のネストされたコンテンツに対する構造化されたNMFA600と、その決定された等価物700との間の対応をそれぞれ示す。これらの図におけるMFAには、表2で記載したように、シフトアクションおよび受容アクションが含まれる。図6では、記号eを使用してε遷移を表す。図7は、NMFAのパスのそれぞれからのアクションシーケンス700が、どのように集められ、かつ、決定されたMFAの基本パスを終了させる遷移にどのように割り当てられたか、を例示する。これらの遷移はまた、それらに割り当てられたNMFAのパスでラベル付けされる。
【0116】
図7はまた、ワイルドカードanyに対する翻訳の視点を与える。GTEに対して決定されたMFAでは、otherwiseでラベル付けされる遷移を使用して、ワイルドカードを翻訳する。この翻訳はデフォルト翻訳と呼ばれ、他の翻訳が適用されない場合に実行される。状態sから開始されるワイルドカード遷移の対象状態tが、sからのデフォルト翻訳のmovesetに追加される。加えて、tが、sからの任意の非ワイルドカード遷移のmovesetに追加される。
【0117】
最後に、図7は、セマンティックアクションの順序付けを簡素化するリターン遷移を表すための技術を例示する。リターン遷移は、フォレスト終了(])に対するローカル遷移として見ることができる。これらのローカル遷移は、セマンティックアクションのプレースホルダとなることができる。本明細書において記載するパターンコンパイラは、この技術を使用する。
【0118】
置換MFAの最適化
異なる入力順序を明らかにするため、置換MFAは、多数の遷移を持つことができる。置換MFAにおける遷移の数を減らすためには、パターンコンパイラは、タグオーダと呼ばれる半順序を、エレメントMFAに対応するタグに割り当てることができる。コンパイラは次に、置換MFAから適切でないパスを削除することができ、ランタイムシステムが次の2つの戦略の内の1つを使用して入力フォレストをマッチングすることを予測する。第1の戦略として、ランタイムシステムは、入力コレクション全体にインデックスを使用して、要求されるパターンエレメントとマッチするであろう項目を抽出することができる。第2の戦略として、ランタイムシステムは、エレメントMFAを使用して、入力フォレストを前処理することができ、そして、その結果をエレメントMFAのタグオーダに従ってソートすることができる。
【0119】
第1の戦略は、パターンエレメントの1つがワイルドカードany*である場合に良く機能する。このシナリオにおいて、ランタイムシステムは、インデックスを使用してタグオーダで、要求されるパターンエレメントを「チェリーピック(良いものだけを選択)」し、残りの入力フォレストの項目をワイルドカードパターンエレメントに割り当てることができる。
【0120】
第2の戦略では、減少したメモリの使用と、ソートのために潜在的に増加するマッチングの時間とを交換する。置換MFAは、ラベル付き有向グラフの変換に使用すると、典型的には、入力フォレストのかなりの部分を変数に対して束縛することができる。さらに、マルチ集合パターンのユーザにおいては、マッチング操作から変数束縛の複数の集合が明らかにされることを期待することができる。これらのシナリオにおいて、ランタイムシステムは、入力フォレストのコピーを保持しなければならず、従ってソートをサポートすることになる。
【0121】
パターンエレメントの集合をPとすると、対応するプリプロセッサMFAのタグの全順序は、以下のように導き出すことができる。まず、パターンエレメントを順序付ける。Pにおける1対のパターンエレメントを(pi,pj)とすると、piが要求されかつpjが要求されない場合、または、piが選択肢でありかつpjが非束縛である場合、または、piがpjより高い優先度を持つ場合に、pi<pjを定義する。優先度が割り当てられていない場合、優先度を辞書順に割り当て、パターンエレメント間に全順序をつける。
【0122】
決定化の際、プリプロセッサMFAは、1つまたは複数のパターンエレメントの集合の受容を示すタグを持つ。そのような1対のタグを(ti、tj)とすると、min(ti)<min(tj)ならば、ti<tjである。tiおよびtjが同じ最小エレメントを持つ場合、|ti|>|tj|ならばti<tjである。この最後の規則は、置換 MFAにより、いくつかのパターンエレメントとマッチする最初の入力が考慮されることを確実にする。図4は、Pondパターン
Pond=Pond{water,frog+,canoe*,bridge?}
に対するMFA400ついてのタグオーダの最適化の効果を例示する。
【0123】
MFAの実装
MFAおよびMFTの特定の実装において、トランスデューサと呼ばれるこれらのオートマトンのインスタンスを実装するランタイムシステムがある。別の実施形態において、パターンコンパイラは、正規ツリーパターンをトランスデューサに変換し、変数束縛と、条件のマッチングと、セマンティックアクションと、を実装する命令でトランスデューサの遷移を拡張する。特定の実施形態は、少なくとも4つの応用に適用することができる。すなわち、主張に基づく権限付与サービス、プロトコルモデル検査アプリケーション、XMLスキーマインスタンスをインポート、サブタイプ化、マッチングするためのシステム、およびクエリ表現のためのコンパイラ、である。
【0124】
特定の実施形態の実際の評価として、1秒当たり240万から890万ノードのレートでラベル付き有向グラフをマッチングするトランスデューサランタイムが得られた。さらに、このトランスデューサランタイムは、1秒当たり60万から210万ノードのレートでラベル付き有向グラフを変換することができた。
ランタイム
【0125】
各変換規則
rule=pattern,action
に対して、パターンコンパイラは、フレームテンプレートを作成する。フレームテンプレートは、規則で束縛される各変数のためのスロットを特定し、さらに、追加のスロットを特定してアクションを適用した結果を保持する。ランタイム時、トランスデューサ機構は、各規則rに対してフレームコレクションのスタックを割り当てることができる。各規則rに対するフレームコレクションは、fに対するフレームテンプレートにより記載される配置を持つ0個以上のフレームを含む。フレームコレクションは、複数のフレームを含むことができるが、それは、マルチ集合パターンが、その入力を複数の方法でマッチングすることができ、変数束縛の複数の集合を生み出すからである。フレームコレクションをスタックさせて、再帰を操作することができる。
トランスデューサの命令
【0126】
【表2】

【0127】
トランスデューサの状態遷移は、トランスデューサの命令のシーケンスであるアクションブロックを参照することができる。トランスデューサの命令の組には、表2に与えられる命令が含まれる。表2において、rでラベル付けされるオペランドは、文法規則を参照する。r.xでラベル付けされるオペランドは、rの規則コレクションスタックの最上部にある規則フレーム内の変数xのスロットを参照する。iでラベル付けされるオペランドは、命令を参照する。tでラベル付けされるオペランドは、受容された規則の集合を示すタグを参照する。bでラベル付けされるオペランドは、アクションブロックの集合を参照する。
【0128】
明示的なオペランドに加えて、命令には、シフト型およびシフト規則を含むこともできる。シフト型は、変換エンジンがフォレスト内で次の項目にどのように移動すべきかを示す。シフト型がSHIFT NESTである場合、変換エンジンは、次のツリーノードに移る前にカレントツリーノードの後継ノードを書き換える。シフト規則は、(ネストパターンがマッチングしたものの中で)どの規則を書き換えるべきかを示す。
【0129】
表2の最初の4つの命令は、フレーム更新命令と呼ばれ、なぜなら、ある規則rについて、rのコレクションスタック上の各フレームに対して、変数r.xのスロットを更新する。
【0130】
Exec命令は、rのコレクションスタックからトップのコレクションをポップさせる。ポップされたコレクションの各フレームに対して、Exec命令は、rに関連する書き換えアクションを実行する。それぞれの結果に対して、Exec命令は、ある変数target.xを更新するフレーム更新命令iを実行する。再帰の場合、targetはrと同じ規則となる。
【0131】
Push命令は、新しい規則コレクションをrに対する規則コレクションスタックにプッシュする。Par命令は、アクションブロックの集合を並行して実行する。集合内の各アクションブロックに対して、Par命令は、カレント入力ノードを用いて開始される。集合内の各アクションブロックは、入力ポインタを同量進ませなければならない。変換エンジンは、並行するブロックの各要素を必ずしも実行するわけではない。各並行するブロックの要素は、規則識別子で示すことができる。トランスデューサは、トランスデューサが現在書き換えている規則用の識別子で示される、並行するブロックの要素のみを実行する。
【0132】
Shift命令は、トランスデューサを次の入力項目に進ませる。パターンコンパイラは、カレントパターン位置に関連する変数束縛が無い場合に、この命令を生成する。パターン位置が変数束縛を持つ場合は、コンパイラはその代わりに、シフト情報をフレーム更新命令の一部として与える。
【0133】
応用
特定の権限付与のポリシーエンジン(Thorと呼ばれる)では、データアクセス要求の主張に基づく権限付与をサポートする権限付与ロジックを使用する。Thorは、主張の大きなデータベースを備え、例えば、a/dns=?x−>b/dns=?x(これは、aが、プロパティdnsは変数xに対して束縛される値を持つ、と主張する場合、bが同じ主張を行う、ということを表す)という主張のような論理で表される。主張a/dns=”LocalHost”は、aが、プロパティdnsに値”LocalHost”が割り当てられる、と主張することを示す。全てのそのような主張は、主張データベースにおいて非順序表として表され、主構とプロパティによりインデックスが付けられる。
【0134】
権限付与のポリシーエンジンは、構造的規約を使用してその主張データベースを非順序フォレストとして表す。主張を処理するためにまず、主張を、形式prove[context{database},goal]のツリーに変換する。次に、エンジンは、規則の集合を使用して、定点に到達するまで主張を繰り返し変換する。エンジンが主張を証明することができる場合、主張は、証明においてステップを識別する証明木に変換される。
【0135】
パターンコンパイラは、エンジンの規則をトランスデューサに翻訳することができる。探索プロシージャは、このトランスデューサを呼び出して、各変換ステップを実行する。規則は、構成的論理の順次計算を実装し、デリゲーション演算子の分散規則で拡張される。この論理における典型的な規則は、以下のものである。
【0136】
ImpliesConditionMet=
prove[
context{typedTerm[proofl:andy,a:any],
typedTerm[proof2:any,implies[a:any,b:any]],
rest:any*},
goal:any]
==>
prove[
context{rest,
typedTerm[proofl:any,a:any],
typedTerm[apply[proof2:any,proofl:any],b:any]},
goal:any];
【0137】
エンジンは、本明細書において上記に記載したインデックス付けおよびタグオーダソートを使用して、かなりのスループット(ある例では、1秒当たり23,000個の主張と計測された)を達成する。これにより、主張処理が、権限付与サービス全体の速度を制限する工程となってしまうことを防ぐという、可能性のある利点がもたらされる。
【0138】
別の応用は、処理モデルチェッカである。そのようなモデルチェッカは、シンプルな反転ビットプロトコルからTCP(通信制御プロトコル)のモデルにまで及ぶプロトコルに適用することができる。モデルチェッカは、デッドロックフリー型プロトコルを検査することができる。モデルチェッカは、多くの結果を産出する、リスト2の相互作用パターン等のパターンを使用する。そのような場合、トランスデューサは、数フレームに相当する変数束縛を、書き換えの度にバッファすることができる。
【0139】
別の実施形態は、XMLスキーマをインポート、認可、およびサブタイプ化する応用に適用される。この実施形態は、XMLスキーマを半順序ツリーパターンにインポートする。そのような応用では、バッチモードおよび相互作用モードの両方において機能する。相互作用モードにおいて、この応用を、パターンをコンピュータアプリケーションに組み込むためのオーサリングシステムの一部として採用することができる。
【0140】
さらに別の実施形態は、クエリ表現のためのコンパイラコンポーネントに適用された。そのようなコンポーネントは、SQLなどのようなデータベースのクエリアプリケーションのフロントエンドとして使用することができる。このコンポーネントは、規則の集合を使用して、クエリ表現Qを包括的な代数に翻訳し、代数的表現を定点に変換する第2の規則の集合を使用することによりQを最適化する。
【0141】
本明細書において記載する実施形態の最適化も可能である。例えば、パターンコンパイラは、束縛された変数間の依存性を認識し、それらの依存性を使用してマッチングを駆動することができる。コンパイラは、上記に示す意味合いでこの最適化をパターンに対して使用することができる。入力フォレストから、パターンエレメント
typedTerm[proof2:any,implies[a:any,b:any]]
とマッチする入力項目を抽出することにより、生成されたトランスデューサは、パターンエレメント
typedTerm[proof1:andy,a:any]
に対する可能性のあるマッチングを制約することができる。
【0142】
モジュラフォレストオートマトンは、半順序正規ツリーパターンについての統一された記載を提供する。MFAはまた、これらのパターンの決定化、サブタイプ化、交わり、および相補のための簡素なアルゴリズムを提供する。実際には、モジュラフォレストオートマトンは、高性能のパターン分析およびマッチングをサポートする。モジュラフォレストトランスデューサにより、コンパイラが、セマンティックアクションを任意の状態遷移におくことが可能にされ、一方でラベル付き有向グラフの効率的な変換がサポートされる。
【0143】
本発明は、その精神または主要な特徴から逸脱することなく他の特定の形式において具現化することができる。記載される実施形態は、あらゆる点において単に例示としてみなされ、制限するものとしてみなされない。従って、本発明の範囲は、前述の記載によるのではなく、添付の請求項により示される。請求項と等価の意味および範囲に入る全ての変更は、請求項の範囲に包含される。

【特許請求の範囲】
【請求項1】
コンピュータ環境(100)において正規ツリーパターン(200)を分析するための方法であって、前記コンピュータ環境が少なくとも1つのコンピュータプロセッサおよび少なくとも1つのコンピュータ可読メモリを備え、
シーケンスおよび集合の内の少なくとも1つを備える正規ツリーパターンを備えるデータを受け取るステップ(810)と、
前記ツリーパターンがシーケンスを備える場合、シーケンスに対応する第1のマシンを決定するステップ(820)と、
前記ツリーパターンが集合を備える場合、集合に対応する第2のマシンを決定するステップ(830)と、
前記第1のマシンと第2のマシンとの和集合を作成するステップ(840)と、
前記マシンの和集合に対するラベル付き受容状態の集合を決定するステップ(850)と、
前記ラベル付き受容状態から前記第1のマシンと第2のマシンとに対するサブタイプ関係を決定するステップ(860)と
を含むことを特徴とする方法。
【請求項2】
ラベル付きネストへの少なくとも1つの遷移を備えるルートレベルマシンを決定するステップと、
前記ラベル付きネストに対応するモジュールを作成するステップと、
前記ラベル付きネストの復帰に対応する継続状態をスタック上に置くステップと、
前記ラベル付きネストに対応するアクションを実行するステップと、
前記ラベル付きネストに対する受容状態に到達する時、前記スタックから継続状態をポップさせ、かつ、前記ルートレベルマシンに対する処理を再開するステップと
をさらに含むことを特徴とする請求項1に記載の方法。
【請求項3】
当該受け取られたデータが、プログラミング言語で構造型を定義するデータに対応することを特徴とする請求項1に記載の方法。
【請求項4】
当該受け取られたデータが、データベースのスキーマを備えるデータに対応することを特徴とする請求項1に記載の方法。
【請求項5】
当該受け取られたデータが、XMLスキーマに対応することを特徴とする請求項1に記載の方法。
【請求項6】
正規ツリーパターン(200)を分析するためのコンピュータ実行可能命令を符号化して有するコンピュータ可読媒体(150)を備えるコンピュータプログラム製品であって、前記コンピュータ実行可能命令は、
シーケンスおよび集合の内の少なくとも1つを備える正規ツリーパターンを備えるデータを受け取るステップ(810)と、
前記ツリーパターンがシーケンスを備える場合、シーケンスに対応する第1のマシンを決定するステップ(820)と、
前記ツリーパターンが集合を備える場合、前記集合に対応する第2のマシンを決定するステップ(830)と、
前記第1のマシンと第2のマシンとの和集合を作成するステップ(840)と、
前記マシンの和集合に対するラベル付き受容状態の集合を決定するステップ(850)と、
前記ラベル付き受容状態から前記第1のマシンと第2のマシンとに対するサブタイプ関係を決定するステップ(860)と
を含む方法をコンピュータ環境(100)に実行させることを特徴とするコンピュータプログラム製品。
【請求項7】
ラベル付きネストへの少なくとも1つの遷移を備えるルートレベルマシンを決定するステップと、
前記ラベル付きネストに対応するモジュールを作成するステップと、
前記ラベル付きネストの復帰に対応する継続状態をスタック上に置くステップと、
前記ラベル付きネストに対応するアクションを実行するステップと、
前記ラベル付きネストに対する受容状態に到達する時、前記スタックから継続状態をポップさせ、かつ、前記ルートレベルマシンに対する処理を再開するステップと
をさらに含むことを特徴とする請求項6に記載のコンピュータプログラム製品。
【請求項8】
当該受け取られたデータが、プログラミング言語で構造型を定義するデータに対応することを特徴とする請求項6に記載のコンピュータプログラム製品。
【請求項9】
当該受け取られたデータが、データベースのスキーマを備えるデータに対応することを特徴とする請求項6に記載のコンピュータプログラム製品。
【請求項10】
当該受け取られたデータが、XMLスキーマに対応することを特徴とする請求項6に記載のコンピュータプログラム製品。
【請求項11】
コンピュータ環境(100)において正規ツリーパターン(200)の変換を表現するための方法であって、前記コンピュータ環境は少なくとも1つのコンピュータプロセッサ(110)および少なくとも1つのコンピュータ可読メモリ(120)を備え、前記方法は、
正規ツリーパターンに対応する第1のデータを受け取るステップ(910)と
実際のインスタンスに対応する第2のデータを受け取るステップ(920)と、
前記正規ツリーパターンをトランスデューサにコンパイルするステップ(930)と、
前記トランスデューサの遷移を所望の変換に対応する命令で拡張するステップ(940)と、
前記拡張されたトランスデューサの遷移と前記第2のデータとから、第2のデータのエレメントと前記正規ツリーパターンのエレメントとの間の依存性を決定するステップ(950)と
を含むことを特徴とする方法。
【請求項12】
前記命令が変数束縛を含むことを特徴とする請求項11に記載の方法。
【請求項13】
前記命令が条件のマッチングを含むことを特徴とする請求項11に記載の方法。
【請求項14】
前記命令がセマンティックアクションを含むことを特徴とする請求項11に記載の方法。
【請求項15】
前記第2のデータがXMLスキーマインスタンスを含むことを特徴とする請求項11に記載の方法。

【図1】
image rotate

【図2】
image rotate

【図3】
image rotate

【図4】
image rotate

【図5】
image rotate

【図6】
image rotate

【図7】
image rotate

【図8】
image rotate

【図9】
image rotate


【公表番号】特表2012−513046(P2012−513046A)
【公表日】平成24年6月7日(2012.6.7)
【国際特許分類】
【出願番号】特願2011−530081(P2011−530081)
【出願日】平成21年8月20日(2009.8.20)
【国際出願番号】PCT/US2009/054457
【国際公開番号】WO2010/039348
【国際公開日】平成22年4月8日(2010.4.8)
【出願人】(500046438)マイクロソフト コーポレーション (3,165)
【Fターム(参考)】