JP2003216441A - 対称構造パターン・マッチング - Google Patents

対称構造パターン・マッチング

Info

Publication number
JP2003216441A
JP2003216441A JP2003008010A JP2003008010A JP2003216441A JP 2003216441 A JP2003216441 A JP 2003216441A JP 2003008010 A JP2003008010 A JP 2003008010A JP 2003008010 A JP2003008010 A JP 2003008010A JP 2003216441 A JP2003216441 A JP 2003216441A
Authority
JP
Japan
Prior art keywords
filter
equation
expression
code structure
evaluation
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Pending
Application number
JP2003008010A
Other languages
English (en)
Inventor
Jean-Yves Vion-Dury
ヴィオン−デュリー ジーン−イバス
Emmanuel Pietriga
ピエトリガ エマニュエル
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.)
Xerox Corp
Original Assignee
Xerox 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 Xerox Corp filed Critical Xerox Corp
Publication of JP2003216441A publication Critical patent/JP2003216441A/ja
Pending 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/31Programming languages or programming paradigms
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/42Syntactic analysis
    • G06F8/427Parsing
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/455Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
    • G06F9/45504Abstract machines for programme code execution, e.g. Java virtual machine [JVM], interpreters, emulators
    • G06F9/45508Runtime interpretation or emulation, e g. emulator loops, bytecode interpretation

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Computing Systems (AREA)
  • Stored Programmes (AREA)
  • Devices For Executing Special Programs (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
  • Measuring Or Testing Involving Enzymes Or Micro-Organisms (AREA)
  • Debugging And Monitoring (AREA)
  • Machine Translation (AREA)

Abstract

(57)【要約】 【課題】 任意の複雑なデータ構造上のパターン・マッ
チング演算は困難であった。 【解決手段】 コンピュータによるストアが可能な式
が、フィルタに整合するか否かを決定する。式の値を決
定するためにその式を表す第1のコード構造が評価し、
フィルタの特性を決定するためにそのフィルタを表す第
2のコード構造を解析し、フィルタの特性に従って値の
フィルタリングを行う。第1のコード構造は、複数の第
1のプログラミング言語コード構造要素から構成され、
第2のコード構造は、複数の第2のプログラミング言語
コード構造要素から構成される。第2の構造要素のそれ
ぞれは、第1の構造要素の1つに対応する。

Description

【発明の詳細な説明】
【0001】本発明は、参照によりこれに援用する、本
発明と同一譲受人に譲渡された米国特許出願第10/0
46,191号「Bi−Valuation Of P
rogramming Statements(プログ
ラミング・ステートメントの二重評価」(代理人文書番
号:D/A0858Q)をクロスリファレンスとする。
【0002】
【発明の属する技術分野】本発明は、概してプログラミ
ング言語におけるパターン・マッチング・テクニックに
関し、より詳細に述べれば、コンピュータによるストア
が可能な表現がフィルタに整合するか否かを決定するた
めの方法およびシステムに関する。
【0003】
【従来の技術】現在では、ストリング・パターン・マッ
チングのためのいくつかのテクニックが開発されてい
る。もっとも根元的な基礎をなす理論、すなわち常用言
語および認識オートマトンのそれは、テキスト処理から
DNAシーケンスのサーチに至るまで、各種分野に広く
応用されている。ストリング・パターンを記述する式
は、パターン抽出または置換等の問題に関連する循環ス
トリングを解決する上での都合から、今日なお、Pyt
hon(読み:パイソン)またはPerl(読み:パー
ル)等の汎用スクリプティング言語との統合が緊密でな
い。
【0004】構造化された情報の処理、および特に、デ
ータとドキュメントの相互交換を伴う複雑な構造的変換
の重要性の増加に伴って高まりつつある傾向は、パター
ン・マッチング・ファシリティを強力に統合する、特化
されたクエリまたは変換言語の提案である。たとえばツ
リー、さらにはグラフといった複雑な構造が考慮される
限り、言語理論家および設計者は、もっとも根元的なマ
ッチング演算を取り入れるために、表現度の高い、強力
であり、単純、明確、かつ正確な数学的形式を探し続け
ている。しかしながら、複雑なデータ構造の豊富さは、
より多くの変換要件を含み、適正な抽象化レベルにおい
て一般パターン・マッチングを指定するための一般的ソ
リューションは、未だに提案されていない。それにもか
かわらず、この種の一般パターン・マッチング・テクニ
ックは、プログラミング言語の広いクラスへの適用に必
要になるであろう。
【0005】
【発明が解決しようとする課題】現存するテクノロジの
問題を前提とすれば、各種の任意の複雑なデータ構造上
におけるマッチング演算の指定を可能にしつつ、その一
方で基本ビルディング・ブロックを妥当な小ささに維持
する方法およびシステムを提供することは有用であろ
う。
【0006】また現存する、もしくは将来の、専用もし
くは汎用プログラミング言語に埋め込むことができるべ
く、明示的かつ制限された仮定を基礎とするパターン・
マッチング・テクニックを提供することも有利であると
見られる。
【0007】さらに、拡張可能であり、かつ柔軟な理論
的フレームワーク内において、明白な根本原理の上に定
義された、基礎をなすシンタックスおよびシマンティク
スを有するパターン・マッチング方法およびシステムを
提供することも有利であろう。
【0008】さらにまた、単純性に優れ、表現力の高
い、改善されたパターン・マッチング・テクニックを提
供することにも利点があろう。
【0009】
【課題を解決するための手段】本発明は、上記状況の熟
考の上になされたものであり、コンピュータによるスト
アが可能な式がフィルタに整合するか否かを決定するた
めのコンピュータ・システムを動作する方法、およびそ
れのための製品を提供する。式の値を決定するために、
その式を表す第1のコード構造が評価される。フィルタ
の特性を決定するために、そのフィルタを表す第2のコ
ード構造が解析される。第1のコード構造は、複数の第
1のプログラミング言語コード構造要素から構成され、
第2のコード構造は、複数の第2のプログラミング言語
コード構造要素から構成され、それにおいて第2の構造
要素のそれぞれは、第1の構造要素の1つに対応する。
その後、フィルタの特性に従って式の値のフィルタリン
グが行われる。
【0010】さらに本発明は、コンピュータによるスト
アが可能な式がフィルタに整合するか否かを決定するこ
とができるコンピュータ・システムを提供する。このコ
ンピュータ・システムは、式の値を決定するための、そ
の式を表す第1のコード構造の評価、フィルタの特性を
決定するための、そのフィルタを表す第2のコード構造
の解析、およびフィルタの特性に従った値のフィルタリ
ングを行うためのプロセッシング手段を備える。第1の
コード構造は、複数の第1のプログラミング言語コード
構造要素から構成され、第2のコード構造は、複数の第
2のプログラミング言語コード構造要素から構成され
る。第2の構造要素のそれぞれは、第1の構造要素の1
つに対応する。
【0011】添付の図面は、この明細書に組み込まれて
その一部を構成し、本発明のいくつかの実施態様を例証
する。これらの図面は、この説明とともに、本発明の原
理の解釈に有用である。図面は、本発明がいかに構成さ
れ、使用され得るかという代替例の例証を目的としたも
のにすぎず、図示ならびに説明が行われている実施態様
に本発明を限定するものと解釈されるべきではない。こ
のほかの特徴ならびに利点は、付随する図面に例証され
ているように、本発明の各種実施態様に係る以下の、よ
り詳細な説明から明らかなものとなろう。
【0012】
【発明の実施の形態】図面、特にここでは図1を参照す
ると、本発明のコンピュータ・システムが図示されてい
るが、そこにはプロセッシング手段100が備わり、そ
れが入力セクション110および出力セクション120
に接続されている。プロセッシング手段100は、任意
のタイプとすることが可能であり、本発明によって演算
が行われるプログラミング言語ステートメントおよび式
をストアするプログラム・コード・ストレージ130に
対するアクセスを有する。さらにこのシステムは、図1
に示されている例の場合であれば、ステートメント評価
セクション140およびパターン・マッチング・セクシ
ョン150を備え、より詳細を以下において論じるよう
に、プロセッシング手段100のオペレーションを可能
にするインストラクションを含む。
【0013】本発明の詳細に進む前に、基礎をなす言語
の用語に関する一般的抽象化シンタックスの例を示す
が、それにおいて表記eは、命令および宣言ステートメ
ントを包含する。演算シマンティクスは、G. D.
Plotkin(G. D.プロトキン)の論文「A
structural approach to op
erational semantics(演算シマン
ティクスの構造的アプローチ)」(デンマーク;Arh
us(オルフス)大学;コンピュータ・サイエンス学
部;テクニカル・レポートDAIMI−FN−19;1
981年)に述べられているSOSスタイルを使用して
記述し、同時的言語のインターリーブ・シマンティクス
を用いた将来的な拡張をカバーするために「スモール・
ステップ」遷移を考慮している。
【0014】ここではまず、基本構成を記述する第1の
定義セットを示すが、これは、ユニバーサルと考えるこ
とができる。
【表1】
【0015】ローカル変数の導入に関する次の構成:
【数1】 は、しばしば汎関数言語コミュニティにおいて、
【数2】 と表記される。
【0016】広く理解されているシマンティクスを伴
う、たとえばシーケンス、ループ、および割り当てとい
った、より高度な演算構造は、次の文法拡張を通じて記
述される。
【表2】
【0017】伝統的なシステムは、任意の式eの演算を
新しい式e’として定義し、かつe→e’と表記する遷
移関係を通じて言語のインタープリタを記述している。
e→e’→e”といった複数の演算ステップは、表記e
→→e”を使用することによって省略表記することがで
きる。定義により有限演算は、eを、vと表記される、
それ以下に簡約することができない正規値まで簡約す
る;この特定の演算ステップは、e→o v、と表記さ
れ、正規値まで簡約する導出チェーンは、e→→o v
と表記される。関係→oは、次式を通じて形式的に記述
される。
【数3】
【0018】基本的なブール、ストリングおよび算術演
算(前述のとおり★と表記される)の形式的シマンティ
クスについては、広く理解されていると考えられること
から、ここで述べることはしない。
【0019】演算環境をはじめ、変数および参照の使用
および表記について、さらに詳細に説明する。Sと表記
される演算環境は、次のような(変数の)名前から被約
値への写像である:
【数4】 これにおいてxv iの表記は、一意的なラベルxiの、一
意的な被約値viへの写像に関する表記である。参照の
取り扱いには、別の実行構造、すなわち「ヒープ」:
【数5】 も必要となるが、それにおいては、rが参照を示すもの
として同一の表記が用いられる。レイジーでない評価を
伴う帰納的手順もしくは関数は、ローカル環境を取り扱
うために、単純に写像のスタックを必要とすることにな
る。全環境H、Sは、しばしばΓによって省略表記され
る。
【0020】別の表記においては、次のように演算環境
が変数名から被約値への写像としてΓと表わされる。
【数6】
【0021】さらに、Γ、xvは、それぞれH、S∪
{xv}、またはΓ∪{xv}の省略表記であり、同様に
Γ、rvは、H∪{rv}、Sの省略表記である。これに
より遷移関係は、一般的なケースにおいてΓ├e→Γ’
├e’となるが、必要に応じて、明瞭化のために不変実
行構造をスキップすることができる。この関係は、「環
境H、Sにおいて演算された式eは、環境H’、S’に
おいてはe’になる」ことを意味し、それにおいてH’
およびS’は、HおよびSと同じ、もしくは異なるもの
となり得ることを理解する必要がある。次に示す式は、
変数アクセス[var]および宣言[d1,d2]のシ
マンティクスを記述している。
【数7】
【0022】参照の生成および解除は、ポインタおよび
ポインタ算術とは逆に、ほかの演算が定義されていない
中間的な特殊値r(参照)を必要とする。
【数8】
【0023】この[ref2]においては、新しい一意
的な参照rが「ヒープ」内に生成され、この参照が、@
vの演算の結果として返されると言うことができる。
【0024】検定演算においては、ブール部分の評価の
間に環境修正が許される。これは、検定に関する条件と
してのマッチング演算の使用を可能にする。
【数9】
【0025】基本数値演算、すなわち+、/、*、‐の
シマンティクスについては、この分野ではよく知られて
いる。+演算は同質多形であり、したがって各種のシマ
ンティクスにおいて数、ストリング、シーケンス、連
結、マルチセット、離接的和集合、すなわちm1+m2
2=m1、およびディクショナリ(非可換、右優先)に
適用される。
【0026】このパターン・マッチング・テクニック
は、より詳細についてはこれから述べるが、式を表す第
1のコード構造を評価し、その式によるマッチングが行
われることになるフィルタを表す第2のコード構造を解
析し、さらに第2のコード構造によって決定されたフィ
ルタ特性に従い、第1のコード構造を評価することによ
って決定された値のフィルタリングを行う。以下におい
ては、第1のコード構造を「データ構造」と呼び、第2
のコード構造を「パターン構造」と呼んでいるが、これ
らのコード構造は対称に構成され、その結果、ストリン
グ、シーケンス、セット、ディクショナリおよびレコー
ド等だけでなく、ツリー、DAGs(Directed
Acyclic Graphics;有向非輪状グラ
フィック)および一般的なグラフィック等の各種任意の
複雑なデータ構造上にマッチング演算を指定することが
可能になる。これについて、次に、より詳細に説明す
る。
【0027】以下においては、フィルタリング後の構造
の一部もしくは全体に割り当てられる可能性のあるロー
カル変数を宣言することが可能であると仮定する。e、
i等の表現は、リテラル定数、変数、またはe+e、
e*e等の基本演算とすることができる。参照について
は、それらが部分構造の共有およびDAGならびにグラ
フィックのモデリングを可能にすることから考慮する。
【0028】パターン・マッチング演算は、与えられた
式eを、その式が構造的パターンを含むか否かについて
チェックし、かつそのコンテンツの一部を抽出すること
を、単一演算において可能にする。パターン・マッチン
グ演算は、3つの部分からなる:第1の部分は式eであ
り、それに対してフィルタのチェックが行われることに
なる。この部分は、サブジェクトと呼ばれる。第2およ
び第3の部分は、パターン・マッチング演算子#および
フィルタfである。サブジェクトは、変数、定数、ある
いはマッチングに先行して評価が行われる、より複雑な
式とすることができる。
【0029】つまり、パターン・マッチング演算は、次
のような形になる。
【数10】
【0030】これらの演算は、ブール値を返す。演算が
成功した場合、つまりこれは、式がフィルタに整合した
ことを意味し、さらにオプションとして変数がサブジェ
クトのコンテンツの一部に割り当てられたことを意味す
るが、その場合には、それが真を返す。失敗した場合、
つまりこれは、式がフィルタ構造に整合しなかったか、
あるいはそれが所定の値を含んでいなかったことを意味
するが、その場合には、それが偽を返す。
【0031】規約によって、正規値はvと表されるか、
あるいはそれらが数もしくはストリングの場合にはそれ
ぞれn、sと表される。先に示したように、正規値に簡
約する導出チェーンは、e→→o vと表される。マッ
チング演算e # fの一般的なシマンティクスには、
次の順序が要求される:左側オペランドeの評価(vへ
の正規化)(図3のステップ300)、右側オペラン
ド、つまりフィルタfの評価(ステップ310)、およ
び正規化した値に対するフィルタの適用(ステップ32
0)であり、それにより真または偽のいずれかが返され
る。ここで認識されることになろうが、式が非数式とな
る場合もあることから、必ずしも「値」が数値に関係す
る必要はない。さらに、どのような値が獲得されるかに
よらず、環境がマッチング演算によって修正されること
もある。正規化されたフィルタは、太字を使用して示さ
れている。マッチング演算の形式的シマンティクスは、
2段階である。第1段においては、サブジェクトに関す
る簡約されたフォームをまず演算し([match1]
の繰り返し)、続いてフィルタに関してそれを行う
([f−match1]の繰り返し)。
【数11】
【0032】最後の段階、すなわちフィルタの適用自体
は、フィルタおよび注目しているデータ構造に依存し、
以下において、ケースごとに定義する。
【0033】次に、構造コンストラクタの例を示し、そ
れらと、以下に述べる対応するフィルタ・コンストラク
タの間における対称性について例証する。構造コンスト
ラクタおよびフィルタ・コンストラクタは、それぞれの
データ型を表すインジケータ要素である。
【表3】
【0034】さらに、たとえば算術加算、ストリングの
連結、集合のセットというように、データ構造に応じて
異なるシマンティクスを取り得る+演算子が提供されて
いる。
【0035】フィルタは、少数の演算子を使用して表現
され、多くの異なる構造を記述することができる。それ
に加えてフィルタは、整合が必要になる構造を正確に模
し、それらの指定をむしろ容易にする。フィルタは、シ
ーケンス、マルチセット、順組、レコード、ディクショ
ナリ、ストリング、およびこれらの構造の任意の組み合
わせに整合することが可能である。すべてのフィルタ
は、それらと対になるデータ・コンストラクタと同一の
表記を使用するフィルタ・コンストラクタのほかに、3
つの基本的なフィルタ演算子を使用して構築される。こ
れら3つの基本フィルタ演算子は、検定演算子、存在演
算子、および割り当て演算子である。
【0036】検定演算子は、この例においては%を用い
て示しているが、定数、変数、またはマッチングに先行
して評価が行われることになる複雑な式とともに使用さ
れる。これは、構造のいずれかのポイントにおいて、オ
ペランドによって与えられている値の発生をテストす
る。たとえば、
【数12】 は、eがストリング’circus’であるか否かをテ
ストする。また
【数13】 は、eが、値4のアイテムを1つ、値3のアイテムを1
つ、この順序で有するシーケンスであることをチェック
する。
【0037】存在演算子は、?を用いて表され、「任意
の要素と整合する」と定義される。たとえば、
【数14】 は、厳密に2つの要素だけを有する任意の順組と整合
し、次のような例が挙げられる。
【数15】
【0038】割り当て演算子は、?xと表され、それに
おいてはxを変数名とするが、サブジェクトの部分を抽
出し、かつその部分をxに割り当てるために使用され
る。たとえば、
【数16】 は、eが順組であり、3つの要素を含む場合に成功す
る。第1の要素はストリング’circus’でなけれ
ばならず、第2の要素は任意とすることが可能であり、
第3の要素の値は、変数yに割り当てられる。シーケン
ス上の同じのパターン・マッチング演算は、非常に類似
したもの、すなわち
【数17】 になり、コンストラクタを順組からシーケンスに変更す
るだけである。
【0039】これらの基本フィルタ演算子に加えて、+
+を用いて表される連結オペレータが提供されており、
これは互換性のある要素を結合する。これは、データ構
造の連結演算子(+を用いて表される;上記を参照され
たい)の二重演算子と見ることができる。たとえば、ス
トリング’circus’は、次のように3つの部分ス
トリングの連結として考えることが可能である。
【数18】
【0040】対称な方法に従って表わすと、フィルタは
次のようになる。
【数19】
【0041】文字’r’を含むストリングを見つける場
合には、フィルタ
【数20】 を使用することが可能であり、これは、ゼロもしくは任
意数の要素および文字’r’およびその後のゼロもしく
は任意数の要素を意味している。この演算子は、任意の
構造とともに使用可能であり、別の要素を考慮すること
を可能にする。たとえば、e # [?x]は、厳密に
1つの要素からなるシーケンスだけと整合し、この要素
をxに割り当てる。シーケンスeが、順序と無関係に、
少なくとも1つの要素を含まなければならないという事
実を表現するためには、次のように、?と++演算子を
組み合わせて使用することができる:
【数21】
【0042】次に、この構造的パターン・マッチング・
スキームの利点を例証するために、ストリング、順組、
シーケンス、レコード、マルチセット、およびディクシ
ョナリに関する、より複雑な例を示す。
【数22】 これは、’r’を含む任意のストリングに整合し、最初
に現れた’r’の次から始まる部分ストリングを変数x
に割り当てる;e=’circus’の場合には、x
に’cus’が割り当てられる;e=’red’の場合
には、xに’ed’が割り当てられる。
【数23】 これは、最初の要素として1つのレコードを含む任意の
シーケンスと整合する。このレコードは、フィールドf
1を有していなければならない;このフィールドの値
は、変数xに割り当てられる。
【数24】 この演算は成功する;xには10が割り当てられ、yに
は[<f2=’s’>,<f1=3>]が割り当てられ
ることになる。
【数25】 これは、2つの要素からなる順組を要素とする少なくと
も1つのシーケンスを含む任意のマルチセットに整合
し、このマルチセット内のシーケンスの最後の順組の2
番目の要素が、変数xに割り当てられる。この場合、パ
ターン構造が、?++ [<?,?x>]を含むことか
らシーケンスの最後の順組を選択するが、それに代えて
[<?,?x>] ++ ?であれば最初の順組が選択
されることになる。
【数26】 これは、セット内の順序が無関係であることから整合す
る。
【0043】さらにパターン・マッチングを使用して、
ディクショナリから値を検索することもできる。ここで
は、ストリングをシーケンスに写像するディクショナリ
を考える。
【数27】 これは、dictが鍵’k1’を含んでいる場合に成功
する。また、
【数28】 は、dictが鍵’k2’を含む場合に成功し、対応す
るシーケンスを変数xに割り当てる。
【0044】パターン・マッチング演算がブール値を返
すことから、論理コネクタを使用してそれらを合成する
ことができる。したがって、サブジェクトがフィルタも
しくは複合フィルタに整合しない場合だけに限って成功
するフィルタを表現することが可能になる。合成演算子
は3つあり、「not」、「or」および「and」で
ある。「not」は、サブジェクトがフィルタと整合し
ない場合に成功する。たとえば、
【数29】 は、eが文字’r’を含まない場合に限って成功する。
「or」は、2つのフィルタ引数を取り、左から右へ、
それらのマッチングが行われる。たとえば、
【数30】 は、ストリングeが文字’c’で開始するか、あるいは
それが文字’r’を含む場合に限って成功する。「an
d」は、「or」と類似に作用する。これは、式が両方
のフィルタに整合すると成功する。たとえば、
【数31】 は、eが、2要素の順組であることのチェックし、かつ
eをxに割り当てる。
【0045】さらに、「クリーネ」演算子*および+も提
供されており、それぞれ「ゼロもしくはそれを超える数
の要素」および「少なくとも1つの要素」という周知の
シマンティクスで機能する。たとえば、
【数32】 は、次のストリングのいずれにも整合する:’abbd
ee’、’abbcdee’、および’abbcccd
ee’。第2の演算子を使用した同じフィルタ、
【数33】 は、’abbdee’を除く上記のストリングの同じセ
ットと整合する。クリーネ演算子は、シーケンス、セッ
ト、およびディクショナリとともに用いることができ
る。
【0046】前述したように、ここで述べているパター
ン・マッチング・テクニックは、パターン・マッチング
構造およびデータ構造両方の対称構成を可能にし、その
結果、それらが任意の同一の構造的複雑性に達する。さ
らに、マッチング演算は、専用演算子を介して明示的に
呼び出される。マッチングが行われることになる構造の
一般形式の検定をはじめ、包含されている(部分)構造
ならびに実行環境の変数(1ないしは複数)に対するマ
ッチング構造の部分(1ないしは複数)の割り当てにつ
いてもそれが行われる。
【0047】このテクニックは、言語構成、コントロー
ルの抽象化ならびに変換モデル、リライティング・シス
テム理論、項リライティング・システム、コンパイルな
らびに言語処理のための変換言語もしくはシステム、構
造化ドキュメント変換、ツリー・パターン・マッチン
グ、明示的もしくは自動的なドキュメント変換システム
等を含む多数の分野に関係する。
【0048】さらに、このテクニックは、リライト・シ
ステムに比較してより抽象的でなく、かつより一般的で
あり、暗示的なパターン・マッチングを実行し、規則の
適用に関するビルト‐イン・ストラテジを適用する変換
モデルの構築を提供することができる。他方、このテク
ニックは、汎用プログラミング言語の簡素化ならびに拡
張を行う上では充分に抽象的である。つまり、このテク
ニックは、新しい変換テクニックの設計もしくは現存す
るものの拡張において重要な役割を果たすことができ
る。
【0049】現在のところ概念的に効率の低い現存する
アプローチとは異なり、かつそれと独立した単一のアプ
ローチにおいて、4つの基本的なトピックスが解決され
ている:すなわちデータ・モデルの定義、マッチング演
算の定義、変換モデルの定義、およびプログラミング言
語における変換モデルの統合である。
【0050】データ・モデルの定義は、データ構造の表
記に対する正確なフォームを提供し、それは、中身が濃
く、かつプログラマにとって明確であり、しかも同時
に、可能な限りの単純性を維持する必要がある。各種類
の構造の演算プロパティは、最小の負担において完全性
に到達することに重点が置かれるべきである。たとえ
ば、シーケンスは、スタック、FIFO(先入れ先出
し)の取り扱い、あるいはツリーを探索するときの中間
ノードの記憶に有用な順序付き構造であるが、マルチセ
ットは整理されていないデータの「バグ」の管理に有用
である。
【0051】上記のテクニックは、もっとも共通に使用
されたデータ型の統合を基礎として「ユニバーサル」デ
ータ・モデルを提案する。これらは、冗長性を排除し、
任意の複雑性を持った異種構造の構成を可能にする一
方、単純かつ明確となるべく選択される。しかしなが
ら、テクニックの適用は、提案された型のセットの厳密
な使用を求めてなく、データ構造ならびにパターン構造
に対する対称構成の原理の適用だけが必要とされる。
【0052】マッチング演算の定義は、明らかに以前の
ポイントに関係する。これは、3つの基本的な問題をカ
バーする:すなわち、構造の「フォーム」の識別ならび
に検定(図2のステップ200);構造(またはその一
部)の値のチェック(ステップ210);および構造内
にストアされた情報の一部の抽出(ステップ220)で
ある。
【0053】このテクニックは、必要なフォームが明示
的に作られ、その結果、それを指定するプログラマにと
って明確になる方法においてパターン・マッチング構造
を構築することを可能にする。サブジェクト構造の、注
目されていない部分は、「?」を用いて示される基本の
存在フィルタを介して抽象化される。可能性としては複
雑な式となり得るeについても、「%」を用いて示され
る基本の検定フィルタによって、任意の複雑な値に関し
て構造内の値をチェックすることができる。最後に、x
を変数名とするとき、「?x」として示される基本の割
り当てフィルタを使用することによって、サブジェクト
構造内に置かれる情報を抽出し、それを実行環境内にお
いて使用可能な任意の変数にコピーすることができる。
【0054】変換モデルの定義は、マッチング演算が現
実の構造変換プロセスにおける単なる中間ステップであ
り、したがって、より一般的なコンテキストに入れられ
るべきであるということの発見から開始する:変換ステ
ップはどのように記述され、連鎖され、並べられるか
?;構造はどのようにスキャンされ、全体的な変換の結
果は何か?;マッチング演算の間に使用されるコンテキ
スト情報の抽出方法:単純に出力構造(1ないしは複
数)に変換されるだけか、かつ/またはそれ自体が変換
を導出するか?
【0055】このテクニックに従ったマッチング演算の
明示的な呼び出しによって、それをブール評価と見るこ
とが可能になる。したがって変換モデルは、必要条件に
応じて有用なフォームを取ることができる。変換は、e
1 # f1 ⇒ e2 #f2 ⇒ ...、といった規
則、またはシーケンシャルな組み立を使用することによ
って、あるいは「if‐then‐else」ステート
メント等の複雑なネットワークを介してマッチング演算
を縦続構成にすることが可能であり、可能性としては抽
出されたコンテキスト上の演算を包含する。出力構造、
すなわち変換の結果は、使用可能なデータ・モデルおよ
びコンテキスト情報を使用することによってコヒーレン
トに構成され、可能性としては別の演算手段によって変
換される。
【0056】変換モデルの定義および期待される変換の
演算パワーに応じて、パターン・マッチングの相補とし
て内部演算を指定するべく言語構成を用いてパターン・
マッチングを拡張すること、あるいは表現性が増加する
拡張として変換モデル自体を、より一般的なプログラミ
ング言語に統合することを考慮可能である。いずれの選
択肢も、このテクニックによって、明示的なマッチング
演算子および基礎をなす言語に関連する少数の一般的、
かつモジュール方式の仮定によって可能になる。
【0057】前述の観察を考慮すると、ここに述べられ
ているパターン・マッチング・テクニックは、特に、一
般的な型メカニズム(typing mechanis
ms)のサポートに適していることを認識されよう。型
チェックは、プログラミング言語の全般的な信頼性を向
上させ、ランタイムの最適化のための効果的な手段を提
供する。
【0058】前述したように、一般的かつ抽象的なシン
タックスは、式に関してeを使用し、パターン・マッチ
ング・フィルタに関してfを使用する。マッチング演算
は、演算子e # fを介して呼び出され、それにおい
ては左辺の式eがサブジェクトであり、右辺のオペラン
トfがフィルタもしくはパターンである。
【0059】4つの基本的な演算子のほかに結合子(ま
たはフィルタ・コネクタ)が提供されている。
【表4】
【0060】最初の2つのフィルタ、すなわち?および
?xは、通常の形式である。相等のチェックの演算およ
び参照フィルタの演算は、それぞれに埋め込まれた式の
演算を必要とする。
【数34】
【0061】ここで、メタ記号、★ ∈ { ++,
and, or }、を使用することによって、すべて
のバイナリ結合子に有効な等式のファミリを定義する。
【数35】
【0062】クリーネ様演算子f*による変形は、フィ
ルタ([f*])の構造を保存するが、f+の演算は、純
粋なリライティング([f+])である。
【数36】
【0063】フィルタ適用(マッチング)のシマンティ
クスにおいて、vおよびwは、簡約された項を示す。
【数37】
【0064】ここで再び、[m‐%]が、構造に関する
構造的相等を使用することを述べる必要がある。これ
は、考慮されたすべての構造に関して、s1⊆s2、かつ
1⊇s2の場合に限り、s1=s2として定義される。包
含自体は、ストリング、シーケンス、およびマルチセッ
トに関しては単純である;ディクショナリに関しては、
鍵/値のペアの包含に対応する。
【0065】合成結合子++は、ストリング、シーケン
ス、マルチセット、またはディクショナリにのみ適用で
きる。これは、sとして示されるこれら各種のデータ構
造にわたり、ストリングおよびシーケンスに関する連
結、マルチセットに関する直和、およびレコードならび
にディクショナリに関する非可換和をモデリングする+
演算子を使用することによって抽象化が可能である。鍵
は、ディクショナリ内において一意的でなければならな
いことから、右側オペランドの鍵/値のペアは、求めら
れている場合には左側オペランドの鍵/値のペアを置き
換える。これが、関連するマッチング演算のシマンティ
クスに影響を与えることはない。次に示す定義は、構造
の相等関係を使用している。
【数38】
【0066】同様に、ストリング、シーケンス、セッ
ト、およびディクショナリにのみ適用される次に示す定
義においては、項εが空のストリング、空のシーケン
ス、空のセット、および空のディクショナリに関する抽
象化になる。
【数39】
【0067】次に示す式においては、オペランドの順序
が重要になり、成功しなかった演算によって演算環境の
変更をもたらすことも可能である。これは、オリジナル
の環境を保存するための特定の処理をまったく必要とし
ないことから、より効率的な実装を可能にする。
【数40】
【0068】類似の振る舞いが「or」フィルタに関し
て定義される。
【数41】 同様に「not」フィルタは、次のようになる。
【数42】
【0069】当然のことながら、マッチングが失敗した
が、環境の変更をもたらすケースにおいては、バックト
ラッキングが好都合となることがある。さらに、明示的
な復元演算∨(f)による解がシマンティクスを持つこ
ともある。
【数43】
【0070】次に、データおよびフィルタ構造の対称構
成について、順組、シーケンス、マルチセット、ディク
ショナリ、およびレコードを例に、より詳細に説明す
る。
【0071】順組は、固定長の異種構造の取り扱いを可
能にする。この説明では、コンストラクタだけを示す。
順組構造に関する、このほかの一般的な演算には:iが
順組の実際のサイズに対応するものとして、i番目のア
イテムをフェッチするためのt[i]等のインデクス表
記を介したアイテムへのアクセス;i番目のアイテムを
セットするためのt[i] := eがある。順組は、
特に、関係代数および同族語において行われるような直
積の演算に有用である。
【表5】
【0072】次の部分において、eチルダを、
0,...,ekの省略表記とする。順組(またはフィ
ルタ順組)の演算は、すべての部分項の、それらが現れ
る順序で行われる、連続した演算によって定義される。
順組またはフィルタ順組は、すべての部分項または部分
フィルタが簡約されるとき、簡約される。
【数44】
【0073】順組に関するマッチングは、すべての部分
フィルタの、対応する部分構造に対するマッチングによ
って実行される。サブジェクトvが順組でない場合、あ
るいは濃度が異なる場合には、演算結果が「偽」になる
([m−tuple])。
【数45】
【0074】ここで述べておく必要があるが、実行コン
テキストの潜在的な修正は、全マッチング・プロセスを
通じて伝播される。
【0075】シーケンス、マルチセット、およびディク
ショナリは、次の表のように定義される。
【表6】
【数46】
【0076】[set]、[set2]、[f−se
t]、および[f−set2]と呼ばれるセットに関す
る等価式は、上記のものとまったく相似になる。
【数47】
【0077】セットのマッチング時には、S[0,k]がセ
ット{v0,...,vk}を表し、フィルタSF[0,k]
がフィルタ{f0,...,fk}を表す。i∈[0,
k]であれば、S[0,k][i]は、{v0,...,vi
1,vi+1,...,vk}に等しく、SF[0,k][i]
ついても同様になる。この表記を使用すると、セットに
関するマッチングが次のように帰納的に定義される。
【数48】
【0078】この式は、サーチ空間の探索において順序
を明示しない。これは、単に、S内の各値がSF内の対
応するフィルタに整合することを要求するだけである。
ただし、マッチング演算全体を通じて演算環境が修正さ
れ得ることに注意する必要がある。
【0079】ディクショナリは、鍵/値ペアの、出現順
序に従った連続する評価によって計算される。
【数49】
【0080】フィルタ・ディクショナリの計算は、完全
に相似であり、したがって対応する式[f−dic]、
[f−dic2]については省略する。
【0081】ディクショナリのマッチング時には、D
[0,k]がディクショナリ{v0=v0’,...,vk=v
k’}を表し、DF[0,k]がフィルタ{f0
0’,...,fk=fk’}を表す。この表記を用い
ると、ディクショナリに関するマッチングが次のように
帰納的に定義される。
【数50】
【0082】この式は、サーチ空間の探索において順序
を明示しない。これは、単に、鍵/値ペアのそれぞれ
が、対応するフィルタ鍵/フィルタ値ペアに整合するこ
とを要求するだけである。ただし、マッチング演算全体
を通じて演算環境が修正され得ること、および値に先行
して鍵のマッチングが行われることに注意する必要があ
る。
【0083】レコードは、順序のない異種の値の集合で
あり、「メンバ」と呼ばれる名前によって静的に設計さ
れる。この種のデータ構造sに関する標準演算は、メン
バ・アクセス、たとえばa:=s.m、またはメンバ割
り当て、たとえばs.m:=10である。レコードは、
複雑な構造の部分を選択するための有用なニーモニック
を提供し、データ・モデリングにおけるそれらの表現能
力の高さはよく知られている。
【表7】
【0084】データならびにフィルタの簡約は、出現順
序に従う。
【数51】
【0085】フィルタ・レコードも同様に定義される。
【数52】
【0086】マッチングは、順序の影響を受けにくく、
したがってフィルタの順序設定とサブジェクトの順序設
定が異なることは可能であるが、フィルタはその定義順
序に従って適用される。メンバ名は、厳密に同一でなけ
ればならない。
【数53】
【0087】マッチングは、部分マッチングの1つが失
敗すると失敗する。
【数54】
【0088】[帰納的フィルタ]次に、帰納的フィルタ
および「do」演算子について、詳細に説明する。
【0089】帰納的フィルタは、ツリーのフィルタリン
グを可能にする。たとえば、
【数55】 は、eが、ストリング’plus’および’minu
s’によってラベル付けされたノード、および一意的な
(任意の構造の)要素を含む順組であるリーフを伴うツ
リーの場合に成功する。
【0090】「do」演算子は、左側の引数としてフィ
ルタを、右側の引数としてインストラクション(または
インストラクションのシーケンス)を取る。インストラ
クションは、フィルタが成功した場合に限って実行され
る。
【0091】たとえば、
【数56】 は、eが、2つの要素から構成される順組であり、最初
の要素が12である場合に限ってiをインクリメントす
る。この演算子は、帰納的フィルタにおいて特に有用な
ものとなり得る。
【0092】「do」を使用することによって、たとえ
ば前述の例に基づけば、すべての数をツリーから抽出
し、それらをリストnに付属させることが可能になる。
拡張フィルタAは、次のようになる。
【数57】
【0093】次のような基本的な例、
【数58】 すなわちツリーが(1−2)+4をエンコードしている
例においては、パターン・マッチング演算が成功し、適
用後のnは、n+[1,2,4]に等しくなる。
【0094】次に、帰納的フィルタならびに「do」演
算子のシンタックスおよび演算シマンティクスについて
説明する。
【表8】
【0095】前述したように、これらのフィルタは、そ
れらの構造を保存することによって簡約される。「f
do e」フィルタの簡約は、「%e」フィルタの簡約
と異なるが、それは埋め込まれた式eが演算されないこ
とによる。これは、マッチング演算のコンテキストにお
いて、また要求された場合に限って評価される。
【数59】
【0096】帰納的マッチングは、たとえば標準の、ラ
ムダ計算式のβ簡約における場合のように、代入を使用
することによって定義される。
【数60】
【0097】次に示す[m‐do]においては、フィル
タリング演算が成功した場合に限ってeの評価が行われ
る。その場合においては、新しいコンテキストが使用さ
れ、その結果、有用な中間情報の記憶等の副次的効果が
得られる。
【数61】
【0098】次に例証を目的として、上記のテクニック
を、書籍参照のデータベースを管理する例に適用する。
データは、後述するSet構造(順序設定されていない
レコードのコレクション)内にストアされる。
【数62】
【0099】次に、フィルタリングの基本および構造化
パターン・コンストラクタの使用によって、書籍情報の
抽出、フィルタリング、および再結合を行う例を示す。
【0100】1990年から1999年までの間にAd
dison‐Wesley(アディソン・ウェズレー)
から出版されたすべての書籍を探し出し、タイトルをス
トアするために、次のように、結果をSetに返す帰納
的関数F1が定義される。
【数63】
【0101】F1が書籍データベースをパラメータとし
て呼び出される場合(F1(DBase)と記述され
る)には、結果が次のようになる。
【数64】
【0102】残りの情報、たとえば著者(autho
r)は、結果に返されない。次に示した変形もこのジョ
ブを実行するが、おそらくはより読みやすいと考えられ
る。
【数65】
【0103】後に示した例は、明示的なフィルタリング
演算を有することへの関心を示している:最初の適用
は、パラメータxに対してなされており、2番目は「b
ook」に対してなされている。次の等価解において
は、「and」フィルタへの関心が示される;以前の
「and」は、単なる標準ブール連結記号である。
【数66】
【0104】データベース内に明らかになっているすべ
ての出版者を見つけ出すためには、別の構成においてフ
ィルタを使用する:「for」ループは、たとえば次の
シンタックスを有する。
【数67】 これにおいては、fがフィルタであり、e1は、Set
(セット)またはSequence(シーケンス)に対
して評価を行う演算可能な式であり、e2は、任意のプ
ログラミング・ステートメントである。このループは、
Set/Sequence(セット/シーケンス)のす
べての要素にフィルタを適用し、成功した場合にはe2
を実行する。したがって解は、次のようになる。
【数68】
【0105】このプログラムの結果は、次のようにR内
に見つかるが、ここでは実行前のRが空であることを仮
定している。
【数69】
【0106】これからわかるように、出版者Addis
on−Wesley(アディソン・ウェズレー)が2回
にわたって繰り返されている。情報の実際の「投影」が
希望されることもあり、その場合には追加のフィルタが
使用できる。
【数70】
【0107】このプログラムの結果は、期待されたとお
り、次のようになる。
【数71】
【0108】名字が「A」で始まるすべての著者(au
thor)を見つけ出すためには、次に示す構成を使用
することができる。
【数72】
【0109】結果は、{’Abiteboul’}にな
る。
【0110】ここで認識されようが、ここに示したパタ
ーン・マッチング・テクニックは、データ構造変換に特
化されたプログラミング言語の設計、あるいはその種の
変換を取り扱うための現存するプログラミング言語の拡
張の促進に適している。任意の複雑性を伴うデータ構造
ならびにパターン・マッチング構造、すなわちフィルタ
の構成は、対称コンストラクタを使用し、その結果、非
常にすぐれた単純性が見込まれる。基本フィルタ、構造
化フィルタ、帰納的フィルタおよび論理結合子の定義
は、すべてのプログラマに、高い表現力ならびに良好な
レベルの単純性を有する手段を提供する。サブジェクト
のデータ構造に対するパターン・マッチング構造の明示
的な適用を可能にするブール演算子が提供されている。
さらに、形式的演算シマンティクスが提供されており、
それがフィルタならびにマッチング演算の特性をはじ
め、任意の関連付けされた演算モデルとの関係を正確に
定義する。加えてこの形式化は、柔軟な理論的フレーム
ワークを提供し、さらに統合を助けることができる。
【0111】ステートメント評価セクション140を用
いて、コンピュータ・システムは、図4に示したプロセ
スを実行することができる。プログラミング言語のステ
ートメントは、第1および第2の部分ステートメントを
含むことができる。ステップ400においては、第1の
部分ステートメントが評価され、ステップ410の判断
に応じて、第2の部分ステートメントが同様に評価され
る。より詳細については次に述べるが、第2の部分ステ
ートメントの評価を要求するステートメントが存在する
一方、いずれの場合であっても第2の部分ステートメン
トの評価を必要としないステートメントも存在する。
【0112】第1および/または第2の部分ステートメ
ントの評価がステップ400、420においてなされる
とき、評価が成功すれば評価成功の結果が決定され、評
価が失敗すれば特殊値が返される。なお、以下の議論に
おいては、特殊値が「none」(または「なし」)と
示されている。
【0113】評価成功の結果のセットに加えて特殊値を
提供することは、二重評価と呼ばれている。
【0114】二重評価テクニックは、1つのプログラミ
ング言語内における命令および宣言ステートメントの結
合を可能にする。基本的に、命令および宣言ステートメ
ントは、ともに実行時に評価され、「unit(ユニッ
ト)」、値、または「none(なし)」のいずれかを
返す。命令ステートメントが常に成功することから、命
令ステートメントに関しては、値「unit(ユニッ
ト)」が返される。値は、成功した宣言ステートメント
に関して返され、失敗した宣言ステートメントについて
は「なし」が返される。
【0115】したがって、「Then」あるいは「El
se」といった、ステートメントの評価に基づくシマン
ティクスを有する、いわゆる命令コネクタを使用して両
方の種類のステートメントを結合することが可能であ
る。条件、命令、宣言ステートメントおよび命令コネク
タについては、より詳細を後述する。さらに、ステート
メントの混合にどのように命令コネクタが使用されるか
についての立証も行う。
【0116】以下においては、sおよびsiが、命令コ
ネクタによって互いに結合された1ないしは複数の命令
および/または宣言ステートメントを表す。「sを評価
する」という言葉は、「s内のステートメントを実行
し、s内の最後のステートメントの評価を返す」ことを
意味する。e、ei等の式は、リテラル定数、変数、ま
たはe+e、e*e等の基本演算とすることができる。
【0117】条件ステートメント、つまりif‐the
n‐elseステートメントは、次のように示される。
【数73】 これにおいてeはブール式である。eの評価が真となる
か、あるいは偽となるかに応じて、それぞれs1または
2が評価される。
【0118】宣言ステートメントとは対照的に、命令ス
テートメントは常に成功し、評価は「unit(ユニッ
ト)」になる。一例として、x:=eと表される割り当
てが挙げられ、それにおいてxは、変数識別子であり、
eは式である。これは、eの評価の結果をxに割り当て
る。別の例としては、*(s)と示される閉包ループが
ある。このループは、sの評価が「none(なし)」
となったときに終了する。そのシマンティクスを次に示
す。
【数74】
【0119】宣言ステートメントは、条件に基づく。宣
言ステートメントの評価は、条件(1ないしは複数)が
検証されると値を返し、そうでなければ「none(な
し)」を返す。例として規則、順序付き作用システム、
および順序なし作用システムが挙げられる。
【0120】規則は、e→sで表され、それにおいて条
件eは、ブールまたはパターン・マッチング式とするこ
とができる。条件が検証されると、つまりパターンが整
合したか、あるいはブール式が真であると評価された場
合には、規則が起動して右辺のsの評価をトリガする。
規則は、一般に、作用システムに類似の構成内において
それらを結合することによってリライティング・システ
ムで使用される。
【0121】(順序付き)作用システムは、[ | s
1, s2,..., sn | ]と表され、強力な
「Switch(スイッチ)」構成に匹敵する。これ
は、規則の結合に使用される。この作用システムは、評
価が「none(なし)」とならない規則が見つかるま
で、つまり起動する規則であって、かつ評価が「non
e(なし)」とならないステートメントを右辺に有して
いる規則が見つかるまで、逐次これらの評価を行う。作
用システム自体は、これらのステートメントの評価の結
果を返す。また作用システムは、最後のポジションに命
令ステートメントを含むことも可能であり、命令ステー
トメントが常に「unit(ユニット)」を返すことか
ら、デフォルトのケースとしてそれが作用する。
【0122】順序なし作用システムは、{ | s1
2,...,sn | }と表され、規則を評価する
順序を保証せず、言い換えると宣言の順序は、シマンテ
ィクス上の意味を有していない。
【0123】命令コネクタは3つあり、それらは命令お
よび宣言ステートメントの混合を可能にする。命令コネ
クタのセットの一例を次に示す。
【0124】シーケンシング演算「;」は、シーケンス
内の実行されるインストラクションを分離する。
【数75】 これは、各ステートメントを実行し、snの評価を返
す。
【0125】同時演算子‖∧および‖∨は、同時に実行
されるインストラクションを分離する。これらは、それ
ぞれ論理積的、および論理和的シマンティクスを有して
いる。基本的に、s1‖∧s2は、s1およびs2の評価を
同時に行い、siの少なくとも一方の評価が「none
(なし)」になると「none(なし)」を返し;両方
のオペランドの評価が「unit(ユニット)」になる
と、「unit(ユニット)」を返す。s1‖∨s2は、
次のように振る舞う:s1およびs2の評価を同時に行
い、siの少なくとも一方の評価が「unit(ユニッ
ト)」になると「unit(ユニット)」を返し、両方
のオペランドの評価が「none(なし)」になると
「none(なし)」を返す。より形式的なシマンティ
クスの定義については後述する。
【0126】Else演算子s1 Else s2は、s
1を評価する。s1の評価が「none(なし)」になる
と、s2が評価される。シマンティクスを次に示す。
【数76】 fは、新規変数、つまり現在のコンテキストないしは
1もしくはs2内に現れない変数である。
【0127】Then演算子s1 Then s2は、s
1を評価する。s1の評価が「none(なし)」でなけ
れば、s2が評価される。シマンティクスを次に示す。
【数77】
【0128】Or演算子s1 Or s2は、s1を評価
する。s1の評価が「none(なし)」の場合には、
2の評価が返される。s1の評価が「unit(ユニッ
ト)」の場合にもs2の評価は行われるが、s2の評価と
は無関係に「unit(ユニット)」が返される。シマ
ンティクスを次に示す。
【数78】
【0129】And演算子s1 And s2は、s1
評価する。s1の評価が「unit(ユニット)」の場
合には、s2の評価が返される。s1の評価が「none
(なし)」の場合にもs2の評価は行われるが「non
e(なし)」が返される。シマンティクスを次に示す。
【数79】
【0130】演算子And、Or、‖∧および‖∨につ
いては、s1およびs2の評価が「unit(ユニッ
ト)」または「none(なし)」となる必要があり、
これは、それらが命令式でなければならないことを意味
する。
【0131】次に、表記になれるためのいくつかの例を
紹介し、その後、より複雑な例を用いて、このテクニッ
クによってもたらされる表現力を立証する。変数iおよ
びstr1は、それぞれの型が整数およびストリングで
あることが仮定されている。
【0132】単純なシーケンスを、規則を含む「whi
le」ループが続く割り当てステートメントから構成す
る:このループは、iが10に到達するまで、それをイ
ンクリメントする。
【数80】
【0133】規則を含む作用システムにおいては、ネス
ティングされた作用システムが規則および式から作られ
る。
【数81】
【0134】iが5より小さければ、str1にストリ
ング’cir’が割り当てられ、作用システムは47を
返す。それに該当せず、iが100または200に等し
い場合には、作用システムが、それぞれストリング’a
bcd’または’efgh’を返す。さらにそれにも該
当しない場合には、3.1415を返す。この最後の式
は、「デフォルト」のケースとして作用する。それが存
在せず、またiに前もって5または100もしくは20
0が割り当てられていなかった場合には、この作用シス
テムの評価が「none(なし)」になる。
【0135】ここで注意されたいが、作用システムのコ
ンポーネントが、最後のステートメントとして、必ずし
も50‐3あるいは’abcd’といった単純な式を含
む必要はない。これらは、命令式を含むこともできる;
その場合に、作用システムは「unit(ユニット)」
を返す。
【0136】次に示す、より複雑な例は、前述したパタ
ーン・マッチングの特徴を使用している。基本的に、パ
ターン・マッチング式は、規則の左辺内のブール式に代
えて使用することができる;これらは、パターンの認識
およびデータ構造の部分の抽出を可能にする。パターン
・マッチング式の評価は、サブジェクトが整合し、規則
が起動すると真になる。それ以外は、偽の評価になり、
規則は「none(なし)」を返す。
【0137】この例においては、ストリング変数str
1内にストアされているXMLファイルに関するいくつ
かの構造的データを抽出する。このため、次のような数
字を表す複数の変数が生成され、そのカウントが行われ
る。
【表9】
【0138】最初の3つの検定は、遭遇したタグの種
類、つまり開始、終了、空を識別し、ほかの3つは、そ
のタグのコンテンツを調べる。最後の3つの検定が、そ
れに先行するものと独立であり、かつ新しいタグに遭遇
したときに限って関係することから、これらの検定は、
Thenコネクタを用いて結合される2つの作用システ
ムに分けられる。変数tagsは、各タグ名が付加され
るストリングである。すべてのタグの検定を終了する
と、結果が表示される。
【数82】
【0139】この例においては、作用システム、すなわ
ち宣言ステートメントが、別の作用システムおよび割り
当てインストラクション、すなわち命令ステートメント
を伴って構成され、これら3つが閉ループに、つまり命
令ステートメントにネスティングされている。
【0140】提案テクニックによって提供される簡潔性
および判読容易性を例証するため、閉包ループおよびi
f‐then‐elseステートメントのみを伴う同一
のプログラムを次に示す。ここでは、単純化のために条
件内のブール式がパターン・マッチング式に置き換えで
きることを仮定する。
【数83】
【0141】if‐then‐elseステートメント
を使用すると、3×3=9のケースを個別に扱わなけれ
ばならない。CあるいはJava(登録商標)(ジャ
バ)等の言語においては、Switch(スイッチ)構
成が、より判読容易な解をもたらすが、残念ながらSw
itch(スイッチ)は、primary integ
er(プライマリ整数)ならびにchar/byte
(文字/バイト)型を用いてのみ使用可能であり、さら
に検定値が静的に決定されなければならない。
【0142】ここで認識されようが、上に述べたテクニ
ックは、基本的な命令および宣言ステートメントの定
義、有意かつ任意の複雑なコントロール構造における両
種の演算の組み合わせ、およびその種の構成の型宣言
(typing)を可能にする。
【0143】主要な応用は言語構成であり、コントロー
ルの抽象化ならびにより多くの演算上の表現に向かって
のプログラメーション・モデル(programmat
ion models)、リライティング・システム理
論、伝統的な条件項リライティング・システム、明示的
なストラテジ、コンパイルならびに言語処理のための変
換言語およびシステム、構造化ドキュメント変換、ツリ
ー・パターン・マッチング、イベント・マネジメント、
明示的または自動的ドキュメント変換システム等を純化
する。
【0144】このテクニックは、リライティング・シス
テムに比較して、より抽象的でなく、かつ一般的であ
り、しかも汎用プログラミング言語の簡素化ならびに拡
張を行う上では充分に抽象的である。つまりこのテクニ
ックは、新しい変換テクニックの設計もしくは現存する
ものの拡張において重要な役割を果たすことができる。
さらにこのテクニックは、低コストおよび高品質のソリ
ューションをもたらすデータとドキュメントの相互交換
問題を解決することができる。
【0145】以上に加えて、このテクニックは、一般的
シンタックス構成の定義、その演算上のシマンティクス
ならびに関連する形式的型システムを介してプログラミ
ング言語フレームワークを提供する。宣言および命令プ
ログラミング・スタイルを融合するという野心的なゴー
ルの下に横たわる重要な困難は、新しいコンセプトの一
般的アプローチにおいてすべて解決される。
【0146】ここで認識されようが、二重評価テクニッ
クは、これまで述べてきた対称構造パターン・マッチン
グ・テクニックを可能にし、かつそれを完全なものにす
る。さらにこのテクニックは、一般的な型メカニズム
(typing mechanisms)のサポートに
特に適している。型チェックは、プログラミング言語の
グローバルな信頼性を向上させ、最適化のための有効な
手段を提供し、したがってランタイム・パフォーマンス
を向上させる。これについての詳細は、後に説明する。
【0147】プログラミング・ステートメントの二重評
価を用いて、また命令コネクタを使用することによっ
て、新しいプログラミング言語の設計または現存するプ
ログラミング言語の拡張が、革新的な表現性を提供する
構成を伴って可能になる。結果として得られる言語は、
宣言、汎関数、および命令言語の間となる、抽象化に関
して中間的のレベルに置かれる。抽象化の種類は、一般
的構造変換テクノロジ内の重要な役割を演ずることがで
きる。適切なコントロールの抽象化レベルを伴った近代
的プログラミング言語の構築時における主要な困難は、
単純性とパワーの間、簡明性と表現性の間における最良
のトレードオフを探し出すことである。したがって、こ
こで認識されることになろうが、本テクニックは、構成
が合成能力を提供する態様においてプログラミング言語
構成を提供する。またコネクタが提供され、それがその
種の構成と関連するシマンティクスの合成を可能にす
る。さらに、合成エラーのチェックを可能にする確実な
型システムが提供される。
【0148】次に、基本的な条件および命令の構成のシ
ンタックスならびにシマンティクスについて、より詳細
に説明する。
【0149】検定演算おいては、ブール部の評価の間に
環境の修正が許される。これは、検定に関する条件とし
て、コンテキストに対する影響を伴う複合演算の使用を
可能にする。
【数84】
【0150】シーケンシング演算子は、次に示したよう
に定義される。
【数85】
【0151】さらに、最終的に特殊値「unit(ユニ
ット)」まで簡約する割り当て演算子が提供される。従
来技術においては、汎関数フレームワーク内の命令式の
統合用に、命令ステートメントの型宣言(typin
g)に関する類似のメカニズムが存在する。しかしなが
ら、その種の割り当て演算、x := eは、式e自体
の単なる結果である。
【数86】
【0152】それに加え、*(e)として示される閉包
演算子の形で命令構成が提供され、それによって、評価
が特殊値「none(なし)」となるまでの作用eの反
復が可能になる。つまり、割り当てのような純粋な命令
作用に対する閉包の適用がエンドレス演算をもたらすこ
とになるため、この作用は宣言作用でなければならな
い。このプロパティは、以下に述べる型宣言(typi
ng)規則によってチェックされる。*演算子のシマン
ティクスは、次によって単純に定義される。
【数87】
【0153】閉包演算は、常に特殊値「unit(ユニ
ット)」を返すが、純粋な命令(単評価)ステートメン
トと考えられる。
【0154】宣言構成は、次に示すように定義される。
【表10】
【0155】前述したように、最初のユニバーサル構成
は、左辺の条件および当該条件の検証が可能なときに限
って実行される右辺の作用から構成される規則である。
提案されているシンタックス、および続く型システム
は、e1⇒e2⇒e3の形式による規則の縦続を可能に
し、それはe1⇒(e2⇒e3)として解釈される。
【数88】
【0156】宣言環境においては、通常、その種の規則
が、より大きなシステム内に組み立てられる。規則の選
択および適用ストラテジは、各種の提案モデルに応じて
大きく変化するが、もっとも一般的なタクティクスは
「順序に従って規則を試行」または「試行および規則」
ならびに「可能な限りの適用の反復」である。これらの
標準的なモデルをはじめ、より高度なタクティクスは、
作用システムと、先に示した閉包演算子を結合すること
によって、容易にエミュレートされる。
【0157】順序付き作用システムは、所定の順序に従
って試行される作用の連続から構成される。次に示す定
義においては、vfは「新規」変数、つまり一意的な名
前を伴う変数を表す。
【数89】
【0158】ここで注意を要するが、この定義は、すべ
ての作用e1,...,en1が二重評価されること、
すなわち可能性としてはその評価が「none(な
し)」になること;および最後の1つは単評価が可能な
ことを含意している。その場合、「none(なし)」
ではない値が最終的に返されることから、システム全体
が単評価になる。
【0159】順序なし作用システムは、すべての中から
作用eiの(ランダム)選択を行うこと以外は同様に定
義される。
【数90】
【0160】ここで言えるこの定義の1つの結果は、す
べての作用が、上記の意味において二重評価されなけれ
ばならないということである。その種の作用システムが
順列等価の規則の集合を指定し、ランタイムの最適化に
関して大きな見通しを与える。さらにこれは、プログラ
マによる過度のコードの指定を回避することを可能に
し、そのコードは、コードの検討もしくはメンテナンス
を行う他者に対してより理解可能なものとなる。
【0161】次に命令コネクタについて述べるが、用語
「命令コネクタ」は、類似性を強調するために、いわゆ
る「ブール・コネクタ」に対する参照によって選択され
た。いずれのケースにおいても、値が二重評価される。
しかしながら、この場合における評価ドメインに対する
より細かいアプローチは、いくつかのデータ・セットの
取り扱いを可能にする。
【0162】最初の有用なコネクタは、すでに示した
が、よく知られたシーケンス「;」である。
【0163】別の有用な演算子のセットは、同時実行
(バイナリ)演算子であり、e1‖∧e2およびe1‖∨
2によって示され、さらにその両方がe1*2によっ
て示されるが、次のインターリーブ・シマンティクスを
用いて実装される。
【数91】
【0164】最初の演算子‖∧は、その同時的シマンテ
ィクスに加えて、二重評価のマネジメントに関して、一
般に∧と表記される論理積「and」に類似した振る舞
いを持つ。
【数92】
【0165】‖∨については、一般に∨と表記される
「or」に等しく、次のように表される。
【数93】
【0166】この定義は、単純な同時シマンティクスを
記述し、それをより広い範囲に拡張することが可能であ
る。ここでの重要なポイントは、この同時合成をグロー
バル・フレームワークと無矛盾の二重評価ステートメン
トとして定義することである。同時命令コネクタに加え
て、シーケンス命令コネクタ、Then、Else、A
nd、およびOrも提供される。
【0167】ThenおよびElseは、次によって定
義される。
【数94】 fは新規変数、すなわち現在のコンテキストないしは
1もしくはe2のいずれの中にも現れない変数である。
次のAndおよびOr演算子は、どのような結果が計算
される場合であっても両方のオペランドの評価が強制さ
れる点を除けば、極めて類似している。別の相違点は、
両方のオペランドによって計算される値が、{uni
t,none}だけを範囲にできることである({ユニ
ット,なし})。その意味において、e1およびe2は、
次のような命令式である。
【数95】
【0168】次に、構成の使用を例証し、それを可能に
する最小の、形式的な型システムについて説明する。こ
の型システムは、無差別集合型コンストラクタ(non
−discriminating union typ
e constructor)によってもたらされる包
含同質多形(inclusion polymorph
ism)を使用する部分型宣言(subtyping)
関係を基礎としている。型階層構造の一例を図5に示
す。
【0169】型システムは、必要とされる場合には、型
システムを構築するための周知のテクニックに、別の関
連ツールを提供する。これは、「型宣言式(typin
gequations)」によって論理的に整理される
「型判定(typingjudgments)」を介し
て記述される。
【0170】型判定(typing judgmen
t):
【数96】 は、型宣言コンテキスト(typing contex
t)γ内において式eが型tを有することを示す。表
記:
【数97】 は、型tが型t’の部分型であり、よりオリジナルに近
い判定:
【数98】 であることを表明し、式eが最小の型tを有することを
示す。形式的に、最後に示した関係は、次のプロパティ
によって特徴付けされる。
【数99】
【0171】この最小型の表記は、いわゆる包含規則
([Sub]を参照されたい)に起因する過度に一般化
された推論を回避し、しかも部分型宣言(subtyp
ing)メカニズムの利便性を保存する上で有用にな
る。表記:
【数100】 は、「xは型tの変数である」が、型宣言コンテキスト
(typing context)内に登録されている
という事実を表す。より厳密に述べれば、γ,x:t
は、γ’=γ∪{x:t}となるような型宣言コンテキ
スト(typingcontext)γ’であるという
ことになる。次の規則は、すべての適格な型t、t’、
1、t2、t3および型宣言コンテキスト(typin
g context)γに関する再帰ならびに可遷部分
型宣言(subtyping)関係:
【数101】 を定義する。
【数102】
【0172】型に関する適格条件のための規則について
は、ここに示さず、型は、続くすべての定義において適
格であることを前提とする。重要な型コンストラクタ
は、包含同質多形(inclusion polymo
rphism)を提供する無差別集合(non−dis
criminating union)である。
【0173】基本的なリテラルおよび変数の型宣言(t
yping)は、次の公理によって定義される。
【数103】
【0174】演算子は、次によって型宣言(type
d)される。
【数104】
【0175】ここで[Eq,Neq]が、同じ共通の型
を持つことをオペランドに強制しないことに注意が必要
である。言い換えると、相等性の比較は、あらゆる種類
のデータに適用することができる。
【0176】このほかの基本的な構成は、次を通じて型
宣言(typed)が可能である。
【数105】
【0177】同時コネクタは、常に二重評価される命令
になる。
【数106】
【0178】次に示す式は、「and様の」同時発生に
関して、非常に正確な型コントロールを達成する。
【数107】
【0179】同様に、「or様の」同時発生に関しては
次のようになる。
【数108】
【0180】シーケンシャル・コネクタは、適当なt、
t’に関して、次によって定義される。
【数109】
【0181】最後に挙げたこれら2つの式を超えて、同
時コネクタに関する限り、はるかに正確な型チェック
が、合成誤りを検出するために提供されている。
【数110】
【0182】次に、先に述べた言語構成のシマンティク
スに関し、上記の型宣言(typing)アプローチの
関連について、さらに詳細を説明する。
【0183】確実性のプロパティは、良好に型宣言され
た(well typed)構成が、評価の間にエラー
を生成し得ないということを立証することができる。よ
り正確に述べれば、それは、良好に型宣言された(we
ll typed)プロパティの保存を確立する:良好
に型宣言された(well typed)式は、すべて
の可能性のある演算ステップにわたって良好に型宣言さ
れた(well typed)状態を維持する。1つの
基本的なステップは、型宣言コンテキスト(typin
g context)と実行環境の間における論理的な
関係を定義することである。
【0184】実行環境Γは、型宣言コンテキスト(ty
ping context)γに関して適合する(γ
│├ Γで表す)。
【数111】
【0185】次に示した式においては、eが、簡約され
ていないシンタックス式として理解される。型は、簡約
の間にわたって保存される。
【数112】
【0186】証明は、特別困難ではない;それには、e
の構造に対して帰納法を使用する。
【0187】完全性プロパティは、演算上のシマンティ
クスによって定義されるすべての導出、すなわち演算ス
テップが、型コントロール・メカニズムによってカバー
されることを示す。完全性は、次によって定義される。
【数113】
【0188】型の保存に関する限り、証明は特別困難で
はない;それには、eの構造に対して帰納法を使用す
る。
【0189】以上の仕様を用いれば、マシン(またはシ
ステム)、プロセス(または方法)、あるいは製品とし
て、標準プログラミングおよび/またはエンジニアリン
グ・テクニックを使用し、プログラミング・ソフトウエ
ア、ファームウエア、ハードウエア、あるいはそれらの
組み合わせを製造することによって、本発明を実装する
ことができる。
【0190】結果としてもたらされる、コンピュータ可
読プログラム・コードを有するプログラム(1ないしは
複数)は、メモリ・デバイスもしくは転送デバイス等の
1ないしは複数のコンピュータ利用可能メディア内に埋
め込み、それによって本発明に従ったコンピュータ・プ
ログラム・プロダクツもしくは製品を作ることができ
る。そのこと自体、ここで用いている「製品」ならびに
「コンピュータ・プログラム・プロダクツ」という用語
に、任意のメモリ・デバイス上、あるいは任意の転送デ
バイス内といった、あらゆるコンピュータ利用可能メデ
ィア上に(永久に、一時的に、あるいは一過的に)存在
するコンピュータ・プログラムを包含することが意図さ
れている。
【0191】以上、特定の実施態様を参照して本発明の
説明を行ってきた。図面とともにこの明細書を読み、理
解することによって、修正ならびに変更が思いつくこと
もあろう。しかしながら、これらの実施態様は例にすぎ
ず、当業者による各種の変更、修正、変形、あるいは改
良が、付随する特許請求の範囲によってそれらの包含が
意図されたこの教示からなされることもある。
【図面の簡単な説明】
【図1】 本発明に従ったコンピュータ・システムを示
したブロック図である。
【図2】 本発明のパターン・マッチング・テクニック
を示した全般的なフローチャートである。
【図3】 本発明のパターン・マッチング・テクニック
をより詳細に示したフローチャートである。
【図4】 本発明の評価ステートメント・プロセスを示
したフローチャートである。
【図5】 本発明のテクニックに基づいたプログラミン
グ言語における型の階層構造の例を示した説明図であ
る。
【符号の簡単な説明】
100 プロセッシング手段、110 入力セクショ
ン、120 出力セクション、130 プログラム・コ
ード・ストレージ、140 ステートメント評価セクシ
ョン、150 パターン・マッチング・セクション。
フロントページの続き (72)発明者 エマニュエル ピエトリガ フランス セイント イスミエール アレ グロ シー3 ラ フォンテーヌ アメリ エ Fターム(参考) 5B081 AA00 BB08

Claims (3)

    【特許請求の範囲】
  1. 【請求項1】 コンピュータによるストアが可能な式が
    フィルタに整合するか否かを決定するためのコンピュー
    タ・システムを動作する方法において:前記式の値を決
    定するための、前記式を表す第1のコード構造を評価す
    るステップ;前記フィルタの特性を決定するための、前
    記フィルタを表す第2のコード構造を解析するステッ
    プ;および、前記フィルタの特性に従って前記値のフィ
    ルタリングを行うステップ;を含み、 前記第1のコード構造が、複数の第1のプログラミング
    言語コード構造要素から構成され、前記第2のコード構
    造が、複数の第2のプログラミング言語コード構造要素
    から構成され;前記第2の構造要素のそれぞれが、前記
    第1の構造要素の1つに対応することを特徴とする方
    法。
  2. 【請求項2】 コンピュータ・システム内で使用するた
    めの製品であって:メモリ;と前記メモリ内にストアさ
    れた、コンピュータによるストアが可能な式がフィルタ
    に整合するか否かを決定するための方法を機能させるイ
    ンストラクションであって、前記方法が:前記式の値を
    決定するための、前記式を表す第1のコード構造を評価
    するステップ;前記フィルタの特性を決定するための、
    前記フィルタを表す第2のコード構造を解析するステッ
    プ;および、 前記フィルタの特性に従って前記値のフィルタリングを
    行うステップ;を含むインストラクション;とを包含
    し、 前記第1のコード構造が、複数の第1のプログラミング
    言語コード構造要素から構成され、前記第2のコード構
    造が、複数の第2のプログラミング言語コード構造要素
    から構成され;前記第2の構造要素のそれぞれが、前記
    第1の構造要素の1つに対応することを特徴とする製
    品。
  3. 【請求項3】 コンピュータによるストアが可能な式が
    フィルタに整合するか否かを決定するためのシステムに
    おいて:前記式をストアするためのメモリ;および、 前記式の値を決定するための、前記式を表す第1のコー
    ド構造の評価、前記フィルタの特性を決定するための、
    前記フィルタを表す第2のコード構造の解析、および前
    記フィルタの特性に従った前記値のフィルタリングを行
    うためのプロセッサ;を備え、 前記第1のコード構造が、複数の第1のプログラミング
    言語コード構造要素から構成され、前記第2のコード構
    造が、複数の第2のプログラミング言語コード構造要素
    から構成され;前記第2の構造要素のそれぞれが、前記
    第1の構造要素の1つに対応することを特徴とするシス
    テム。
JP2003008010A 2002-01-16 2003-01-16 対称構造パターン・マッチング Pending JP2003216441A (ja)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US10/046,314 2002-01-16
US10/046,314 US7543015B2 (en) 2002-01-16 2002-01-16 Symmetrical structural pattern matching

Publications (1)

Publication Number Publication Date
JP2003216441A true JP2003216441A (ja) 2003-07-31

Family

ID=21942779

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2003008010A Pending JP2003216441A (ja) 2002-01-16 2003-01-16 対称構造パターン・マッチング

Country Status (3)

Country Link
US (1) US7543015B2 (ja)
EP (1) EP1329808A3 (ja)
JP (1) JP2003216441A (ja)

Families Citing this family (16)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7861304B1 (en) * 2004-05-07 2010-12-28 Symantec Corporation Pattern matching using embedded functions
US7913239B2 (en) * 2005-03-08 2011-03-22 International Business Machines Corporation Method and apparatus for a programming framework for pattern matching and transformation of intermediate language expression trees
JP4935047B2 (ja) * 2005-10-25 2012-05-23 ソニー株式会社 情報処理装置、情報処理方法、およびプログラム
US8397226B2 (en) * 2006-08-14 2013-03-12 Microsoft Corporation Pattern matching over structured literals
US8046322B2 (en) * 2007-08-07 2011-10-25 The Boeing Company Methods and framework for constraint-based activity mining (CMAP)
ATE538442T1 (de) * 2008-04-24 2012-01-15 Siemens Ag Verfahren und system zur erkennung von gruppierungseigenschaften
US8495703B2 (en) * 2009-06-18 2013-07-23 Oracle International Corporation Security policy verification system
CN102053993B (zh) * 2009-11-10 2014-04-09 阿里巴巴集团控股有限公司 一种文本过滤方法及文本过滤系统
TWI486796B (zh) * 2010-04-28 2015-06-01 Alibaba Group Holding Ltd Text filtering method and text filtering system
CN103617251A (zh) * 2013-11-28 2014-03-05 金蝶软件(中国)有限公司 一种敏感词匹配方法及系统
JP6340886B2 (ja) * 2014-04-10 2018-06-13 株式会社ジェイテクト プログラマブルロジックコントローラ用プログラムの作成支援装置及びプログラマブルロジックコントローラ用プログラムの作成支援方法
US9483236B2 (en) 2014-04-11 2016-11-01 Fair Isaac Corporation Efficiently representing complex score models
CN109670163B (zh) * 2017-10-17 2023-03-28 阿里巴巴集团控股有限公司 信息识别方法、信息推荐方法、模板构建方法及计算设备
US11574074B2 (en) * 2017-12-11 2023-02-07 Digital Guardian Llc Systems and methods for identifying content types for data loss prevention
US11531779B2 (en) 2017-12-11 2022-12-20 Digital Guardian Llc Systems and methods for identifying personal identifiers in content
US11269602B2 (en) * 2020-05-15 2022-03-08 Red Hat, Inc. Detecting native compilation incompatibilities

Family Cites Families (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPS62194533A (ja) * 1986-02-21 1987-08-27 Hitachi Ltd 木構造デ−タのパタ−ンマツチング方式
US5530863A (en) * 1989-05-19 1996-06-25 Fujitsu Limited Programming language processing system with program translation performed by term rewriting with pattern matching
US6122757A (en) * 1997-06-27 2000-09-19 Agilent Technologies, Inc Code generating system for improved pattern matching in a protocol analyzer
US6487566B1 (en) * 1998-10-05 2002-11-26 International Business Machines Corporation Transforming documents using pattern matching and a replacement language
US6748588B1 (en) * 1999-03-31 2004-06-08 Microsoft Corporation One-pass greedy-pattern-matching finite-state-machine code generation
US6789116B1 (en) * 1999-06-30 2004-09-07 Hi/Fn, Inc. State processor for pattern matching in a network monitor device
US6828963B1 (en) * 2000-09-06 2004-12-07 Proficiency Ltd. Pattern matching for data exchange between computer aided design systems

Also Published As

Publication number Publication date
US7543015B2 (en) 2009-06-02
EP1329808A2 (en) 2003-07-23
EP1329808A3 (en) 2005-06-01
US20030191847A1 (en) 2003-10-09

Similar Documents

Publication Publication Date Title
JP2003223330A (ja) プログラミング・ステートメントの二重評価
US20040267760A1 (en) Query intermediate language method and system
JP2003216441A (ja) 対称構造パターン・マッチング
Sestoft Programming language concepts
Charguéraud Characteristic formulae for mechanized program verification
Odersky Scala by example
Fritzson et al. Towards Modelica 4 meta-programming and language modeling with MetaModelica 2.0
Peyton Jones et al. Unraveling recursion: compiling an IR with recursion to System F
Paulson Isabelle’s Logics: FOL and ZF
Paulson Isabelle’s logics
VanderHart et al. Practical Clojure
Gilmore Programming in Standard ML'97: A tutorial introduction
Bancila Modern C++ Programming Cookbook: Master C++ core language and standard library features, with over 100 recipes, updated to C++ 20
Köhl An executable structural operational formal semantics for Python
Ike-Nwosu Inside the python virtual machine
Brady The Idris Programming Language: Implementing Embedded Domain Specific Languages with Dependent Types
Diatchki High-level abstractions for low-level programming
Blum Evaluating lambda terms with traversals
Fredriksson et al. A totaly Epic backend for Agda
Harrison The HOL light manual (1.1)
Zhao et al. Formalization of a Polymorphic Subtyping Algorithm
Royko The Dynamic Mapping Architecture
Feldman Edward W. Czeck
McArdle A Compiled Language for Statistical Computing
Sestoft Language Concepts

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20060113

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20090203

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20090415

A02 Decision of refusal

Free format text: JAPANESE INTERMEDIATE CODE: A02

Effective date: 20100216