JPH04342026A - 構造体データのパターンマッチング方式 - Google Patents
構造体データのパターンマッチング方式Info
- Publication number
- JPH04342026A JPH04342026A JP11464291A JP11464291A JPH04342026A JP H04342026 A JPH04342026 A JP H04342026A JP 11464291 A JP11464291 A JP 11464291A JP 11464291 A JP11464291 A JP 11464291A JP H04342026 A JPH04342026 A JP H04342026A
- Authority
- JP
- Japan
- Prior art keywords
- data
- matching
- tag
- parts
- argument
- 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.)
- Withdrawn
Links
- 238000000547 structure data Methods 0.000 claims description 14
- 238000000034 method Methods 0.000 claims description 12
- 238000010586 diagram Methods 0.000 description 4
- 238000013473 artificial intelligence Methods 0.000 description 1
- 230000000694 effects Effects 0.000 description 1
Landscapes
- Devices For Executing Special Programs (AREA)
Abstract
(57)【要約】本公報は電子出願前の出願データであるた
め要約のデータは記録されません。
め要約のデータは記録されません。
Description
【0001】
【産業上の利用分野】本発明は、構造体データどうしの
パターンマッチング方式に関する。
パターンマッチング方式に関する。
【0002】Prologなどの人工知能言語や、 G
HC(Guarded Horn CLause )
,Linda などの並列論理型言語においては、パタ
ーンマッチングが頻繁に現れる。従ってこのような言語
の処理系を効率的に実現するには、パターンマッチング
を高速に実現する必要があり、特にLinda などで
は、各引数が整数、文字ポインタなどの単純なデータ型
であり、引数の数もせいぜい4つ程度と少ない。 なお、引数として文字列も多く現れるが、これはポイン
タにより処理されている。
HC(Guarded Horn CLause )
,Linda などの並列論理型言語においては、パタ
ーンマッチングが頻繁に現れる。従ってこのような言語
の処理系を効率的に実現するには、パターンマッチング
を高速に実現する必要があり、特にLinda などで
は、各引数が整数、文字ポインタなどの単純なデータ型
であり、引数の数もせいぜい4つ程度と少ない。 なお、引数として文字列も多く現れるが、これはポイン
タにより処理されている。
【0003】
【従来の技術】このような単純型データのマッチングの
例を図4を参照して説明する。構造体データとして(x
,1,? y , ” abc ” ) を考える。あ
る構造体データが(x,1,? y , ” abc
” ) にマッチングするか否かの判定は次のように行
う。
例を図4を参照して説明する。構造体データとして(x
,1,? y , ” abc ” ) を考える。あ
る構造体データが(x,1,? y , ” abc
” ) にマッチングするか否かの判定は次のように行
う。
【0004】■各引数のデータ型が同じか否かのチェッ
ク ■各引数のデータが等しいか否かのチェックという処理
を行った後マッチしていたら、■引数の一方が変数で、
もう一方が定数ならば、変数に定数を代入した後に同じ
か否かのチェックを行う。
ク ■各引数のデータが等しいか否かのチェックという処理
を行った後マッチしていたら、■引数の一方が変数で、
もう一方が定数ならば、変数に定数を代入した後に同じ
か否かのチェックを行う。
【0005】なお、変数yの前に?がある場合は、その
構造体がマッチした場合に、その変数に値が代入される
ことを表す。?がない場合は単なる比較である。例えば
、この場合、このマッチングの時点でx=2,y=5と
いう値が入っているならば、構造体データ(x,1,?
y , ” abc ” ) は(2, 1, 5,
” abc ” ) とマッチングすることができ?
yの値は5となる。
構造体がマッチした場合に、その変数に値が代入される
ことを表す。?がない場合は単なる比較である。例えば
、この場合、このマッチングの時点でx=2,y=5と
いう値が入っているならば、構造体データ(x,1,?
y , ” abc ” ) は(2, 1, 5,
” abc ” ) とマッチングすることができ?
yの値は5となる。
【0006】
【発明が解決しようとする課題】構造体データ(x,1
,? y , ” abc ” ) の引数情報は図4
のようなレコード領域に格納されるが、パターンマッチ
ングを行う際以下の問題があった。■各引数ごとに、ま
ずタグ部のチェックを行い、その後データ部のチェック
を行っていたので、タグ部のチェックには引数の数に比
例したコストが必要となる。また第1引数、第2引数が
マッチしても、第3引数がマッチしなければそれまでに
行った第1引数、第2引数のデータ部に対する比較のコ
ストが無駄になる。
,? y , ” abc ” ) の引数情報は図4
のようなレコード領域に格納されるが、パターンマッチ
ングを行う際以下の問題があった。■各引数ごとに、ま
ずタグ部のチェックを行い、その後データ部のチェック
を行っていたので、タグ部のチェックには引数の数に比
例したコストが必要となる。また第1引数、第2引数が
マッチしても、第3引数がマッチしなければそれまでに
行った第1引数、第2引数のデータ部に対する比較のコ
ストが無駄になる。
【0007】■さらに、データ部に代入を行っていた場
合には、その値を元に戻す必要があり、そのためのコス
トも余分にかかる。■また、引数のデータ部に等しいか
否かをチェックする際整数型のような単純なデータ型の
場合は、等しいか否かの判定は、例えば整数の比較命令
1個ですむので容易に行える。しかし、文字列同志の比
較のような場合には、一般には1文字ずつ比較すること
が必要となり、複数命令で行わなければならず、複雑と
なりコスト高となる。
合には、その値を元に戻す必要があり、そのためのコス
トも余分にかかる。■また、引数のデータ部に等しいか
否かをチェックする際整数型のような単純なデータ型の
場合は、等しいか否かの判定は、例えば整数の比較命令
1個ですむので容易に行える。しかし、文字列同志の比
較のような場合には、一般には1文字ずつ比較すること
が必要となり、複数命令で行わなければならず、複雑と
なりコスト高となる。
【0008】本発明は、上述の問題点に鑑みてなされた
もので、文字列も含む単純データ型の構造体データのパ
ターンマッチングを高速に行う方式を提供することを目
的とする。
もので、文字列も含む単純データ型の構造体データのパ
ターンマッチングを高速に行う方式を提供することを目
的とする。
【0009】
【課題を解決するための手段】上記目的を達成するため
、構造体データどうしのパターンマッチング方式におい
て、各引数のタグ部とデータ部を分離し、タグとデータ
をそれぞれ別々にまとめて格納し、まずタグ部間のマッ
チングを行い、一致していれば次にデータ部間のマッチ
ングを行う。
、構造体データどうしのパターンマッチング方式におい
て、各引数のタグ部とデータ部を分離し、タグとデータ
をそれぞれ別々にまとめて格納し、まずタグ部間のマッ
チングを行い、一致していれば次にデータ部間のマッチ
ングを行う。
【0010】また、前記データ部間のマッチングに際し
、まず定数データ間の比較を行い、一致した場合、次に
変数に対し値を代入してマッチングをする。
、まず定数データ間の比較を行い、一致した場合、次に
変数に対し値を代入してマッチングをする。
【0011】また、前記データ部に文字列が含まれる場
合、各文字列をそれぞれ固有の識別符号で表しこの識別
符号同志のマッチングを行う。
合、各文字列をそれぞれ固有の識別符号で表しこの識別
符号同志のマッチングを行う。
【0012】
【作用】上記構成により、タグ部間のマッチングの段階
で不一致がチェックされれば、その時点でマッチングが
終了するので無駄な比較を行わなくなる。
で不一致がチェックされれば、その時点でマッチングが
終了するので無駄な比較を行わなくなる。
【0013】また、まず定数データ間の比較を行い、一
致した後に変数に値を代入してマッチングをするので、
定数データの段階で不一致が発生すれば、変数への代入
およびマッチング終了後のその値の戻し処理を行う必要
がなくなる。
致した後に変数に値を代入してマッチングをするので、
定数データの段階で不一致が発生すれば、変数への代入
およびマッチング終了後のその値の戻し処理を行う必要
がなくなる。
【0014】また、文字列をそれ固有の識別符号で表し
、その識別符号どうしが一致するか否かをチェックする
ので、文字の比較を1文字ずつ行う必要がなくなり高速
マッチングが可能となる。
、その識別符号どうしが一致するか否かをチェックする
ので、文字の比較を1文字ずつ行う必要がなくなり高速
マッチングが可能となる。
【0015】
【実施例】以下、本発明の実施例を図面を参照して説明
する。図1は本実施例の構造体データの格納方法を示す
。各引数のタグ部とデータ部とを分離し、タグはタグ、
データはデータごとにまとめて格納する。文字列の比較
は一般には単純ではない。然し文字列を整数などの定数
値で代用することは可能であっても、プログラムにバク
を潜ませてしまう可能性が高くなる。プログラムのあち
こちで、パターンマッチングを行うようなプログラムを
書いていると、マッチしてはいけない者同志をマッチン
グさせてしまうことがある。例えば、“begin ”
, “end ” , “here” など意味のあ
る文字列を単なる0,1,2,などに置き換えてしまう
と、そのうち本来どれとどれをマッチングさせるべきか
わかりにくくなってくる。
する。図1は本実施例の構造体データの格納方法を示す
。各引数のタグ部とデータ部とを分離し、タグはタグ、
データはデータごとにまとめて格納する。文字列の比較
は一般には単純ではない。然し文字列を整数などの定数
値で代用することは可能であっても、プログラムにバク
を潜ませてしまう可能性が高くなる。プログラムのあち
こちで、パターンマッチングを行うようなプログラムを
書いていると、マッチしてはいけない者同志をマッチン
グさせてしまうことがある。例えば、“begin ”
, “end ” , “here” など意味のあ
る文字列を単なる0,1,2,などに置き換えてしまう
と、そのうち本来どれとどれをマッチングさせるべきか
わかりにくくなってくる。
【0016】そこで本実施例では「定数ポインタ型」と
いう新しいデータ型を導入する。この「定数ポインタ型
」データは、プログラム全体でグローバルであり、かつ
実行中に誤って値を変更してしまうことのないように、
プログラム実行中は値が不変な「定数」とする。しかも
、表示が異なれば、決してマッチしないものとする。具
体的には、この形のデータが出現する度に(コンパイル
時に)、各文字列にユニークな整数値をコンパイラが割
り当てるようにする。例えば文字列“abc ”に0を
割り当て、文字列“abcd” に1を割り当てる。こ
れにより“abc ” と“abcd” はマッチしな
いということが整数値の比較の場合と同じコストで実現
されることになる。図2はこのように定数型ポインタで
文字列“abc ” を0と表した状態を示す。
いう新しいデータ型を導入する。この「定数ポインタ型
」データは、プログラム全体でグローバルであり、かつ
実行中に誤って値を変更してしまうことのないように、
プログラム実行中は値が不変な「定数」とする。しかも
、表示が異なれば、決してマッチしないものとする。具
体的には、この形のデータが出現する度に(コンパイル
時に)、各文字列にユニークな整数値をコンパイラが割
り当てるようにする。例えば文字列“abc ”に0を
割り当て、文字列“abcd” に1を割り当てる。こ
れにより“abc ” と“abcd” はマッチしな
いということが整数値の比較の場合と同じコストで実現
されることになる。図2はこのように定数型ポインタで
文字列“abc ” を0と表した状態を示す。
【0017】次にマッチング動作について説明する。ま
ず引数のタグ部のチェックを連続して行う。構造体の引
数はせいぜい4個だとすると、全てのタグを4バイト(
1ワード)内に収めることができるので、ワードの比較
命令1個で行える。引数の数が8個程度なら2命令で済
むことになり、ダブルワードの比較命令があるマシンな
ら1命令で行える。
ず引数のタグ部のチェックを連続して行う。構造体の引
数はせいぜい4個だとすると、全てのタグを4バイト(
1ワード)内に収めることができるので、ワードの比較
命令1個で行える。引数の数が8個程度なら2命令で済
むことになり、ダブルワードの比較命令があるマシンな
ら1命令で行える。
【0018】タグ部のマッチングで不一致があればそこ
で中止し、全て一致していればデータ部のチェックを連
続して行う。この場合、必ず定数同志の比較を行ったあ
とで変数に定数の代入を行う。
で中止し、全て一致していればデータ部のチェックを連
続して行う。この場合、必ず定数同志の比較を行ったあ
とで変数に定数の代入を行う。
【0019】図3はマッチングを行うプログラムの一例
を示したものである。マッチングをする構造体データは
(x,1,? y , ” abc ” ) とし、i
nt x,y;const abc ; x=2 y=3 であるとき、マッチングする構造体データを捜す場合を
表す。
を示したものである。マッチングをする構造体データは
(x,1,? y , ” abc ” ) とし、i
nt x,y;const abc ; x=2 y=3 であるとき、マッチングする構造体データを捜す場合を
表す。
【0020】まず、このパターンマッチングの部分を図
3に示すようにC言語に一度展開し、更にこれをコンパ
イルするという方式をとる。またコンパイルにより、構
造体データ(x,1,? y , ” abc ” )
の引数情報を図2のように格納する。
3に示すようにC言語に一度展開し、更にこれをコンパ
イルするという方式をとる。またコンパイルにより、構
造体データ(x,1,? y , ” abc ” )
の引数情報を図2のように格納する。
【0021】このようにすることにより、■全てのタグ
部の比較を1つの比較演算で行うことができる。■代入
よりも比較を先行して行っているので、無駄な代入操作
を行うことがない。■各データ部の比較も全て、単純な
ワード比較命令1個で行える。
部の比較を1つの比較演算で行うことができる。■代入
よりも比較を先行して行っているので、無駄な代入操作
を行うことがない。■各データ部の比較も全て、単純な
ワード比較命令1個で行える。
【0022】
【発明の効果】以上の説明から明らかなように、本発明
は、■まず全引数のタグ部のチェックをまとめて行い、
次にデータ部のチェックを行うので不一致を早期に発見
し無駄なマッチングを行わない。■データ部のチェック
に際しては必ず比較を代入より先に行うことにより、無
駄な代入操作を行わない。■文字列の比較は定数ポイン
タ型を設け各文字列にユニークな数値を割り当てて行う
ので整数値の比較の場合と同じコストで実現できる。以
上により構造体データのパターンマッチングを高速で行
うことができる。
は、■まず全引数のタグ部のチェックをまとめて行い、
次にデータ部のチェックを行うので不一致を早期に発見
し無駄なマッチングを行わない。■データ部のチェック
に際しては必ず比較を代入より先に行うことにより、無
駄な代入操作を行わない。■文字列の比較は定数ポイン
タ型を設け各文字列にユニークな数値を割り当てて行う
ので整数値の比較の場合と同じコストで実現できる。以
上により構造体データのパターンマッチングを高速で行
うことができる。
【図1】本実施例の構造体データ格納方法を示す図であ
る。
る。
【図2】本実施例の文字列の定数型ポインタの例を表す
図である。
図である。
【図3】本実施例を表すプログラムの一例を示す図であ
る。
る。
【図4】従来の構造体データ格納方法を示す図である。
Claims (3)
- 【請求項1】 構造体データどうしのパターンマッチ
ング方式において、各引数のタグ部とデータ部を分離し
、タグとデータをそれぞれ別々にまとめて格納し、まず
タグ部間のマッチングを行い、一致していれば次にデー
タ部間のマッチングを行うことを特徴とする構造体デー
タのパターンマッチング方式 - 【請求項2】 前記データ部間のマッチングに際し、
まず定数データ間の比較を行い、一致した場合、次に変
数に対し値を代入してマッチングをすることを特徴とす
る請求項1記載の構造体データのパターンマッチング方
式。 - 【請求項3】 前記データ部に文字列が含まれる場合
、各文字列をそれぞれ固有の識別符号で表しこの識別符
号同志のマッチングを行うことを特徴とする請求項1記
載の構造体データのマッチング方式。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP11464291A JPH04342026A (ja) | 1991-05-20 | 1991-05-20 | 構造体データのパターンマッチング方式 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP11464291A JPH04342026A (ja) | 1991-05-20 | 1991-05-20 | 構造体データのパターンマッチング方式 |
Publications (1)
Publication Number | Publication Date |
---|---|
JPH04342026A true JPH04342026A (ja) | 1992-11-27 |
Family
ID=14642917
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP11464291A Withdrawn JPH04342026A (ja) | 1991-05-20 | 1991-05-20 | 構造体データのパターンマッチング方式 |
Country Status (1)
Country | Link |
---|---|
JP (1) | JPH04342026A (ja) |
-
1991
- 1991-05-20 JP JP11464291A patent/JPH04342026A/ja not_active Withdrawn
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US4712189A (en) | Table driven translator | |
US7711685B1 (en) | Method and system for an extensible macro language | |
US5367683A (en) | Smart recompilation of performing matchup/difference after code generation | |
US20190317879A1 (en) | Deep learning for software defect identification | |
KR20020070809A (ko) | 포스트-링크 코드 최적화 | |
US5625822A (en) | Using sorting to do matchup in smart recompilation | |
JP2018510445A (ja) | プログラム性能を向上させる領域特化システムおよび方法 | |
US5446899A (en) | Hint generation in smart recompilation | |
Neuhold | The formal description of programming languages | |
US5535392A (en) | Using hint generation to cause portions of object files to remain the same | |
JP3318051B2 (ja) | 翻訳処理方法 | |
Warshall et al. | A general-purpose table-driven compiler | |
Hayes-Roth | Representation of structured events and efficient procedures for their recognition | |
Zosel | A parallel approach to compilation | |
JPH04342026A (ja) | 構造体データのパターンマッチング方式 | |
Freiburghouse | The multics PL/1 compiler | |
US5671431A (en) | Method for processing user program on a parallel computer system by inserting a tag during compiling | |
JPH0784797A (ja) | ロードモジュールへのソースコード行番号登録方法および装置 | |
Karjoth | Implementing LOTOS specifications by communicating state machines | |
WO1997007452A1 (en) | Programmable compiler | |
EP0856789A2 (en) | Smart recompilation of source program | |
JP2000207226A (ja) | コ―ド最適化装置、言語処理装置及びコ―ド最適化方法 | |
Lutz | Program debugging by near-miss recognition and symbolic evaluation | |
Harada et al. | An automatic programming system SPACE with highly visualized and abstract program specification | |
Patnaik et al. | DFL: a data flow language |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A300 | Application deemed to be withdrawn because no request for examination was validly filed |
Free format text: JAPANESE INTERMEDIATE CODE: A300 Effective date: 19980806 |