JP3044463B2 - データ変換方法 - Google Patents

データ変換方法

Info

Publication number
JP3044463B2
JP3044463B2 JP62120201A JP12020187A JP3044463B2 JP 3044463 B2 JP3044463 B2 JP 3044463B2 JP 62120201 A JP62120201 A JP 62120201A JP 12020187 A JP12020187 A JP 12020187A JP 3044463 B2 JP3044463 B2 JP 3044463B2
Authority
JP
Japan
Prior art keywords
symbol
conversion rule
terminal
input
node
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.)
Expired - Fee Related
Application number
JP62120201A
Other languages
English (en)
Other versions
JPS63285636A (ja
Inventor
啓伸 来間
紘一 山野
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.)
Hitachi Ltd
Original Assignee
Hitachi Ltd
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 Hitachi Ltd filed Critical Hitachi Ltd
Priority to JP62120201A priority Critical patent/JP3044463B2/ja
Priority to US07/195,142 priority patent/US5321606A/en
Publication of JPS63285636A publication Critical patent/JPS63285636A/ja
Application granted granted Critical
Publication of JP3044463B2 publication Critical patent/JP3044463B2/ja
Anticipated expiration legal-status Critical
Expired - Fee Related legal-status Critical Current

Links

Landscapes

  • Devices For Executing Special Programs (AREA)

Description

【発明の詳細な説明】 〔産業上の利用分野〕 本発明は、データ処理装置による記号列の変換に関
し、特に、外部から与えられた変換規則を用いて行なわ
れる、入力記号列から出力項への変換に関する。このよ
うな変換は、機械による翻訳又は言語処理、例えば、コ
ンパイラ,インタプリタ等のプログラミング言語処理系
にとつて、不可欠な機能である。 〔従来の技術〕 言語の変換では、多くの場合、入力言語と目的言語の
間に中間表現を設け、この中間表現を経由して段階的に
行われる。中間表現は、一般に、木構造による表示が用
いられる。コンパイラの場合、文字の列である入力文
を、文の構造を木構造で表現した解析木へと変換し、こ
の木構造データに対して意味解析,最適化,コード生成
を行ない、目的とする機械語へと変換する。この過程
は、入力された記号列を与えられた規則に従つて変換す
る過程とみなすことが出来る。従来、このような変換を
行なう装置は、変換規則に基づいて設計されたものが多
く、変換規則が異なるごとに設計を変えなければならな
かつた。 このような変換を一般的に行なうためには、変換規則
も入力として、入力された変換規則に基づいてデータを
変換する装置が必要である。個々の変換規則に依存しな
い変換装置に類似するものとしては、パーサージエネレ
ーターがある。パーサージエネレーターは、文法を入力
することによつて、その入力された文法に基づいて構文
解析を行なう構文解析装置を生成する。 構文解析では、文法は、通常、文法規則(又は書き換
え規則,生成規則)と呼ばれる関係の集合Pと、終端記
号の集合Tと、非終端記号の集合Nと、開始記号sとに
よつて記述される。文法規則は左辺と右辺より構成さ
れ、左辺の記号列が右辺の記号列に書き換えられること
を表わす。非終端記号はPによつて書き換えることので
きる記号であり、終端記号はPによつて書き換えること
のできない記号である。sは特別な非終端記号で、入力
文が文法に適合するならば、sにPを適用することによ
り、入力文に書き換えることが出来る。 文法の基本的なクラスの一つに、文脈自由文法があ
る。文脈自由文法とは、Pに属する文法規則の左辺を一
つの非終端記号、右辺を0個以上の非終端記号及び/又
は終端記号の並びに制約した文法、すなわち、各々の文
法規則が、 A→a A∈N,a∈(N∪T)* と表わされる文法である。ここで、( )*は集合の任
意の要素の0個以上の列を表わす。 一般に、従来のパーサージエネレーターが扱う文法の
クラスは、文脈自由文法の中でも、文法規則に強い制約
を加えたものである。このような文法は、構文解析機構
を簡単にする代償として、文の構造の記述すなわち解析
木の構造を自由に設定できない難点を持つ。特に、再帰
構造を持つ文法の記述が著しい制約を受ける。 これに対し、DCG(Definite Clause Grammer)では、
文法を拡張された文脈自由文法で記述し、記述された文
法規則を、PrologプログラムとみなしてProlog処理系で
実行することにより、構文解析が遂行される。DCGの詳
細は、F.Pereira and D.Warren,“Definite Clause Gra
mmars for Language Analysis−A Survey of the Forma
lism and a Comparison with Augmented Transition Ne
tworks",Artificial Intelligence,Vol.13,1980,pp.231
−278に記載されており、ここではその概要のみを述べ
る。 DCGは、文法を一階の述語論理の節の集りとして表現
する。この思想に従えば、ある言語の文を構文解析する
ことは、言語を記述する公理系のもとで定理を証明する
ことと同等である。更に、節の集りはプログラムである
とする考え方によれば、この定理証明は自動的に行なう
ことができる。その意味で、DCGで記述された文法は、
同時に一階の述語論理のもとで公理系であり、更にProl
ogプログラムとして実行可能である。このプログラムの
実行は、その言語のトップダウンパーサーの生成であ
る。 DCGの記法は、文脈自由文法の記法を次の2点で拡張
したものである。ここでは、変数記号を大文字で始まる
英文字列で表わす。 (1)非終端記号が引数を持つことを許す。 例: 文脈自由文法:np DCG:np(X,S) (2)文法規則の右辺に、非終端記号や終端記号のリス
トだけでなく、手続き呼び出しを書くことができる。 ここで、文脈自由文法の右辺に出現するNAMEは終端記
号であり、名前の字句カテゴリに属する特定の文字列を
表わす。DCGの右辺の{is_name(W)}は、文字列Wが
名前であるとき真値を返す述語is_name(W)の呼び出
しを表わす。 例えば、(ただし、S0,S1,Sは語列中の位置を表わす)で始まる
一連の適当な文法規則と辞書がDCGとして与えられてい
るとき、入力文 [every,man,loves,mary] に対して、前記文法規則と辞書がPrologプログラムとし
て実行されて、項 sentence(theta,[every,man,loves,mary],[]) が真となる。ここで、thetaは、項 s(np(det(every),n(man),rel(nil)), vp(tv(loves),np(name(mary))) であり、これは解析木と等価である。 前述した引数と手続き呼び出し項の導入は、更に次の
ようなことを可能にする。 (1)手続き呼び出しを用いて、条件を与えることがで
きる。 この例では、M月D日という日付が、月を表わす句
(M)とそれに続く記号Dで詳述されることを示す文法
規則において、Dが整数のとき真となる述語integer
(D)と、Dが正のとき真となる述語0<Dと、Dが32
より小さいとき真となる述語D<32を呼び出し、Dを、
0より大きくて32より小さい整数に制約している。 (2)引数を用いて、文脈に依存する情報を運搬し、テ
ストすることができる。 この例では、noun_phrase,verb_phraseその他の数の
影響を受ける非終端記号に数を運搬する引数Nを付与
し、辞書で与えられた数(singular,plural)をnoun_ph
rase,verb_phraseまで運搬する。noun_phrase,verb_phr
aseが運搬した数はsentenceのレベルで照合され、一致
する場合のみ述語sentenceは真となる。 以上をまとめると、DCGは次の特徴を持つ。 (1)文脈自由文法を拡張した文法である。 (2)prologプログラムとして実行することにより、構
文解析装置を生成する。 (3)構文解析の結果は、構文解析の際に使われた非終
端記号に引数として与えた項であり、引数の与え方によ
つて、単なる解析木とは異なる出力項を得ることが可能
である。 (4)文法規則に手続き呼出しを記述することができ
る。 (5)文脈に依存する文法規則を記載することができ
る。 〔発明が解決しようとする問題点〕 前記DCGは、引数等の導入により、構文解析及び言語
変換の能力を増強した。しかしながら、DCGは、文法規
則と辞書を、一階述語論理として記述し、これをProlog
プログラムとして実行するものであるから、文法規則と
辞書は一体をなし、分離できない。その結果、辞書の保
守(修正,補充,削除等)に不便が生じ、更に、構文解
析とそれ以外の処理による辞書の共用に困難をきたす。 更に、Prologプログラムとしての処理はトツプダウン
型であり、その結果、左再帰的な文法規則をうまく処理
できないという問題がある。すなわち、左辺の非終端記
号が右辺の左端に現われる文法規則が与えられると、DC
G処理は停止しない。 本発明は、これらの問題を解決して、前記のような制
約を受けることのないデータ変換システムを提供するこ
とを目的とする。 〔問題点を解決するための手段〕 本発明は、入力記号列の構造を文脈自由文法の記法で
記述するとともに、出力項の構造の記述を終端記号と非
終端記号に所定の表記形式で連結して(例えばそれらの
引数の形で)具備する変換規則を、外部から受取り、こ
の変換規則に記述された入力記号列の構造に基づくリダ
クシヨン処理によつて、入力記号列の構造を解析する。
そして、入力記号列の構造に対応する終端記号と非終端
記号に連結された出力項の構造の記述に従つて、出力項
を生成する。 ここで、リダクシヨン(reduction)処理とは、与え
られた表現を書き換える処理をいい、書き換えの態様を
直接的に示す文法規則を参照して行なわれる構文解析処
理は、後述するEarleyの構文解析アルゴリズムを含め
て、この処理の型に属する。これに対して、Prologプロ
グラムの実行のように、ゴールを真とするすべての変数
の束縛を作る処理は、リゾリユーシヨン(resolution)
処理と呼ばれる。したがつて、DCGをPrologプログラム
として実行することにより行なわれる構文解析は、リゾ
リユーシヨン処理に他ならない。 〔作用〕 前記変換規則に基づく入力記号列の構造の解析は、終
端記号と非終端記号を入力記号列の構造に対応付ける。
こうして対応付けられた終端記号と非終端記号の群は、
同時に、それらに連結された出力項の構造の記述によつ
て、入力記号列に対応する出力項の構造を特定する。し
たがつて、入力記号列の構造の解析は、対応する出力項
の決定に直結する。 出力項の構造の記述は、終端記号にも連結されてお
り、この記述を介して、入力記号の与える値が出力項に
直接反映される。例えば、記号の字句カテゴリと記号か
ら受け取るべき値とが、一緒に変換規則中に記述され
る。これに対して、DCGでは、字句カテゴリを文法規則
中に記述する代りに、記号がその字句カテゴリに属する
ことを判定する手続きの呼び出しが記述される。加え
て、本発明における構造解析は、リゾリユーシヨン処理
ではなく、リダクシヨン処理によつて遂行される。これ
らの結果、字句情報(辞書)と変換規則(文法)の分離
が可能になる。 更に、リダクシヨン処理の採用は、リゾリユーシヨン
処理にとつて不可避なトツプダウン型の解析処理を回避
することを可能にする。 〔実施例〕 第1図は、本発明が適用されたデータ処理システムの
一例を、機能的ブロツクダイヤグラムの形で表わす。こ
のシステムは、変換規則1と記号列2を入力として受け
て、記号列2を変換規則1に従つて変換し、変換の結果
を項3として出力する。変換規則1は、非終端記号と終
端記号が引数を持ちうる点を除き文脈自由文法と同型式
で記述される。変換規則解析部4は、与えられた変換規
則1を解析して、それを内部表現に変換する。パターン
マツチ制御部5は、文脈自由文法のための構文解析アル
ゴリズム(例えばEarleyのアルゴリズム)に基づいて、
パターンマツチ部6を制御する。パターンマツチ部6
は、入力記号列2と内部表現に変換された変換規則1の
間のパターンマツチ(ユニフイケーシヨン)を行なつ
て、中間木を生成し、次いで、この中間木から、パター
ンマツチにより、出力項3を生成する。変換規則解析部
4での変換により得られた変換規則の内部表現は、変換
規則記憶部7に記憶され、ここから、パターンマツチ制
御部5とパターンマツチ部6に読み出されて、利用され
る。パターンマツチ部6により生成された中間木は、中
間木記憶部8に記憶される。変換過程で得られるパター
ンマツチに関する情報も、ここの中間木上に記憶され
る。 項を、引き数を持つ定数記号又は関数記号を用いて、
次のように定義する。 (i) 0引数の関数記号は項である。 (ii) fがn引数の関数記号、t1,t2,…,tnが項であ
るとき、f(t1,t2,…,tn)は項である。 本明細書では、木構造を持つデータは項で表現する。
また、記号列とは、文字列や項の列を含む、計算機内部
で表現可能なあらゆるデータの列とする。 本実施例では、各々の変換規則を、非終端記号によつ
て特徴づける。中間木は変換規則の左辺の非終端記号と
右辺の非終端記号及び/又は終端記号の関係によつて表
現する。終端記号は入力記号に、非終端記号はその列に
対応する。 出力項の構造は、非終端記号及び終端記号の引数とし
て記述する。これは、中間木のノードを出力項のノード
に対応させるためである。 非終端記号の引数と終端記号を、変数を含む項で記述
する。変数を含む項は、関数記号と変数記号上の項であ
り、次のように定義する。 (i) 0引数の関数記号は、変数を含む項である。 (ii) 変数記号は、変数を含む項である。 (iii) fがn引数の関数記号、t1,t2,…,tnが変数を
含む項であるとき、f(t1,t2,…,tn)は変数を含む項
である。 終端記号中の関数記号は、字句カテゴリを記述する。 変換規則は、次のように表現できる。 上記表現において、記号「→」は、「右のように記述
される」の意味を表わし、記号 は、文脈自由文法でいえば文法規則記号(→)に相当
し、本発明に関しては右辺が左辺に書き換えうることを
表わす。そして、「<非終端記号>(<変数を含む項>
の並び)」は、非終端記号に続く括弧内に、引数の形式
で、変数を含む項の並びが記述されることを表わす。平
明に述べれば、本変換規則は、 の左辺に1個の「非終端記号(変数を含む項の並び)」
を持ち、右辺に「非終端記号(変数を含む項の並び)」
及び/又は終端記号のリストを持つ。そして、終端記号
は変数を含む項の形を取り、また、リストは空であつて
もよい。以下において、関数記号を英小文字列で表わ
し、変数記号を_の付いた英小文字列で表わし、非終端
記号を英大文字列で表わす。 理解を助けるため、簡単な変換規則の例を示す。 この例で、EXPRは非終端記号であり、id(_x),+,i
d(_y)は終端記号であり、関数記号idは字句カテゴリ
の識別子(identifier)である。EXPRの引数add(_x,_
y)は出力項の形式を示し、その変数_xと_yは、右辺の
対応する変数の値が入力記号とのパターンマツチにより
特定される結果として、特定の値を取る。 この変換規則を処理系に与えることにより、この変換
規則に従つて入力記号列を書き換えるデータ変換系が生
成される。この生成されたデータ変換系は、例えば、記
号列 id(n)+id(m) を入力として受けると、これを、項 add(n,m) へ変換し、出力する。 データ変換は処理系内部で2段階に分けて行なわれ
る。第1は入力記号列から中間木を生成する段階であ
り、第2は中間木から出力項を生成する段階である。そ
れぞれの生成は、変数を含む項の変数記号を、パターン
マツチの結果対応する項で置き換えることによつて遂行
される。 入力記号列から中間木を生成する段階では、変換規則
から導かれる終端記号の列と、入力記号列のパターンマ
ツチを行なう。このとき、同一の終端記号列を導く過程
は、一般に複数個存在するが、本発明では、それらの導
出過程の選択を、文脈自由文法の構文解析技法によつて
制御する。 中間木から出力項を生成する段階は、中間木に従つ
て、入力記号列から得られた情報と中間木のノードに記
録された情報のパターンマツチを行い、変数を含む項の
変数記号を対応する項で置き換えることにより進行す
る。 この変換過程の概要を、前述の例1について図示した
のが第2図である。処理系は、まず、入力記号列2と変
換規則1を、Earleyによる文脈自由文法の構文解析アル
ゴリズムの制御のもとでパターンマツチし、マツチした
変換規則の非終端記号EXPRとその引数add(_x,_y)をノ
ード、終端記号id(_x),id(_y)をリーフとする中間
木10を生成する。この際、終端記号に含まれる変数記号
_x,_yを、入力記号列の対応する部分n,mで置き換えると
同時に、この置き換えに関する情報を中間木のノード上
に記録する。出力項3は、中間木のノードに記録された
情報に対し、パターンマツチを行なつて生成する。この
例では、中間木のノードに、そのノードに対応する非終
端記号の引数として記述された、変数を含む項add(_x,
_y)を記録しており、かつ、リーフに変数記号が置換さ
れた終端記号id(n),id(m)を記録しているので、
前者に含まれる変数記号を、中間木のノードの親子関
係、すなわち、変換規則の左辺と右辺の関係に従つて後
者の値で置き換えることによつて、出力項add(n,m)を
生成する。 本発明では、異なる変換を、変換規則1を差し換える
のみで、処理系4〜8に変更を加えることなく行なうこ
とができる。変換規則の例として、更に、次の2例を考
える。 例2の変換規則を与えた処理系は、記号列 id(n):=id(n)+id(m) を、項 へと変換し、出力する。この項は、スタツクを備えた計
算機により解釈実行することができる。 これに対し、例3の変換規則を与えた場合は、 記号列 id(n):=id(n)+id(m) を、項 へと変換し、出力する。この項は、アキユムレータを備
えた計算機により解釈実行することができる。 また、本発明では、変換にパターンマツチを用いてい
ることから、変換規則に出現する変数記号を使つて文脈
に依存する変換規則を記述することができる。 この変換規則を与えた処理系は、記号列 id(n)+id(n) を受け取ると、項 double(n) へ変換し、出力するが、記号列 id(n)+id(m) を受け取ると、“構文エラー”を出力する。 本実施例では、前述のように、Earleyの構文解析アル
ゴリズムが利用される。このアルゴリズムの詳細は、例
えば、Jay.Earley,“An Efficient Context−Free Pars
ing Algorithm",CACM Vol.13,No.2,Feb.1970,pp.94−10
2に記載されているので、ここでは概要のみを述べる。
このアルゴリズムは、生成規則(文法規則)の右辺の記
号列を一つの印によつて分割した印付き生成規則(dott
ed−rule)と、入力文の語の列上の位置とから成る「状
態」を導入し、入力文を1語読み取るごとにいくつかの
状態を生成し、それらを集合にまとめることにより、構
文解析の過程で適用されつつある生成規則を管理してい
る。状態は、印付き生成規則の右辺の印の左側の記号列
が語の列に書き換えられうることを意味し、生成規則の
適用状況を表現する。 解析木は、状態に対応したポインタの列を設けて、そ
れを印付き生成規則の右辺の印の左側の記号列に対応さ
せ、それぞれの記号の書き換えの際に適用された状態を
ポイントさせることにより表現する。文脈自由文法で
は、一つの記号の書き換えの際に適用されうる生成規則
は一般に複数個存在するが、それはポインタを集合化す
ることにより解決される。ポインタを集合化すること
は、複数の解析木をノードを共用することにより重ね合
せて表現することに相当する。 もし少し詳しく述べれば、任意の生成規則 DP→CP1……CPr に対し、印(*)付き生成規則を DP→CP1……CPj*CPj+1……CPr で表わす。ただし、DPは非終端記号であり、CPh(1
hr)は非終端記号又は終端記号のいずれでもよい。
入力文を語wi(1in)の列とし、任意の連続する
語の列wk+1……wm(0kmn)を整数の対kmによ
つて表わす。そうすると状態は、 <DP→CP1……CPj*CPj+1……CPr,km> で表わされる。 状態の集合Sを生成して解析木を出力するアルゴリズ
ムは、初期状態として、 <s→*CP1……CPr,00> を与えた後、Predictor,Completer,Scannerと呼ばれる
3種の操作を選択的に適用する。 (1)Predictor <DP→CP1……CPt*CPt+1……CPr,im>∈S であり、かつ、CPt+1が非終端記号ならば、 <CPt+1→*Cq1……Cqs,mm> を(それが既に存在する場合を除き)Sに追加する。 (2)Completer <Cqt+1→CP1……CPr*,im>∈S であり、かつ、 <Dq→Cq1…Cqt*Cqt+1…Cqs,ji>∈S のときに、 <Dq→Cq1…Cq1+1*Cqt+2…Cqs,jm> がS中に存在すれば、そのCqt+1のインスタンスから、 <Cqt+1→CP1……CPr*,im> へのポインタを張り、存在しなければ、この <Dq→Cq1…Cqt+1*Cqt+2…Cqs,jm> をSに追加して、そのCqt+1のインスタンスから、 <Cqt+1→Cp1……Cpr*,im> へのポインタを張る。 (3)Scanner <DP→CP1…CPt*CPt+1…CPr,im>∈Si であつて、CPt+1が終端記号であり、かつ、 CPt+1=wm+1ならば、 <DP→CP1…CPt+1*CPt+2…,im+1> を(それが既に存在する場合を除き)Si+1に追加する。 最後に、 <s→CP1……CPr*,0m>∈S が得られれば、この状態のインスタンスを解析木として
出力する。しかし、この状態が得られなければ、reject
とする。 Earleyの構文解析アルゴリズムは、すべての文脈自由
文法に基づく構文解析が可能であり、文法があいまい性
を持つ(一つの文に対して複数の構文が同時に成立しう
る)場合には、与えられた入力文から生成可能なすべて
の解析木を、処理の重複なしに生成する。 第1図の各機能ブロツクは、ハードウエアによつて
も、ソフトウエアによつても実現することができるが、
以下では、通常の入出力装置と記憶装置とCPUを備えた
データ処理システム上のソフトウエアによる一実施例を
説明する。 第3図は、変換規則記憶部7と中間木記憶部8に記憶
される情報の例である。41は、変換規則記憶部7で記憶
される変換規則の内部表現の詳細である。ここで、入力
パターンとは、変換規則右辺の非終端記号または終端記
号の一つであり、出力項パターンとは、入力パターンと
して記入された因子の左の因子である。ただし、該当す
る因子が変数を含む項でなければ、この要素は空であ
り、また、入力パターンが右辺の左端の因子であれば、
この要素は左辺の非終端記号の引数である。変換規則解
析部4は、各々の変換規則にたいして、このような内部
表現の並びを生成する。並びの最後のものは、入力パタ
ーンを空とする。したがつて、各変換規則について、そ
の右辺の因子の数より1だけ多い内部表現41が生成され
る。42〜45は、中間木記憶部8で記憶される情報の詳細
である。42はノード集合子であり、ノード結合子をリス
ト化して管理し、その第2要素は、ノードを共有する他
の中間木のノード集合子へのポインタである。43はノー
ド結合子であり、その第2要素は、兄弟関係にあるノー
ドのノード集合子へのポインタである。44は中間木ノー
ド、45は中間木リーフである。これらは、変換の過程で
得られるパターンマツチに関する情報を、パターンマツ
チ環境として保持する。その情報が変換のどの段階で得
られたかを示すため、本実施例では、入力記号の相次ぐ
境界に連続する整数を割り当て、入力記号の前後の境界
を示す1対の整数をその入力記号の位置として用いる。 第4図は、第2図に示された例について、第3図に示
された内部表現の具体例を示す。例1の変換規則 の右辺の各因子を入力パターンとして持つ変換規則の内
部表現41a〜41cが生成され、更に、入力パターンとして
空を示す特殊記号 を持つ内部表現41dが付加される。このように分解され
た内部表現の個々のものを、以後、変換規則要素とい
う。先頭変換規則要素41aでは、その入力パターンが変
換規則の右辺の左端の因子id(_x)であり、その出力項
パターンは、左辺の非終端記号の引数add(_x,_y)であ
る。また、第3変換規則要素41cでは、その入力パター
ンid(_y)の左の変換規則因子が定数+であり、したが
つて、その出力項パターンは空である。 この例における中間木は、ノード44a〜44dと、リーフ
45a〜45cからなり、ノード44a〜44dは、ノード集合子42
aの列とノード結合子43aの列によつて、対応する変換規
則要素に連結されるとともに、また、相互にも連結され
て、ノードの集合を形成する。このノードの集合は、そ
れが連結された変換規則の左辺の非終端記号EXPRに対応
する巨視的な単一のノードとみなすことができる。この
観点から、個々のノード44はノード要素とでもいうべき
ものであるが、紛れるおそれがないかぎり、これらも単
にノードと呼ぶ。先頭変換規則要素41aに連結されたノ
ード44aは、パターンマツチ環境として、この変換規則
要素における出力項パターン、すなわち、左辺の非終端
記号の引数を持ち、他のノード44b〜44dは、パターンマ
ツチ環境として、それらが連結された変換規則要素にお
ける出力項パターンに対する変数の拘束条件を持つ。こ
の拘束条件は、一つ前の変換規則要素における入力パタ
ーンとそれに対応する位置にある入力記号との、パター
ンマツチの結果として得られる。ノード44cにおけるパ
ターンマツチ環境は、何の拘束条件も示さない。その理
由は、このノードに連結された変換規則要素41cにおい
て、出力項のパターンが空(一つ前の変換規則要素41b
の入力パターンが定数)だからである。ノード44b〜44d
は、また、ノード集合子42bとノード結合子43bによつ
て、リーフ45a〜45cにそれぞれ連結される。各リーフに
おけるパターンマツチ環境は、それにノードを介して連
結された変換規則要素の一つ前の変換規則要素が入力パ
ターンとして持つ終端記号に、マツチした入力記号であ
る。 次に、本実施例における処理を、第5図ないし第11図
のフローチヤートを参照して説明する。第5図は、変換
規則の解析のフローチヤートであり、この処理は、変換
規則1の解析と、それの内部表現41への変換に係わる。 変換規則1と開始記号が与えられると、変換規則解析
部4は、変換規則を読み取つて(601)、各変換規則に
ついて、右辺の<因子のリスト>を<因子>に分離し
(602)、分離された各々の<因子>と左辺の非終端記
号の組について内部表現すなわち変換規則要素41を作つ
た後(603)、これらの内部表現をチエインで連結する
(604)。更に、変換規則の検索を容易にするため、同
一の非終端記号を持つ変換規則の内部表現をチエインで
結び、かつ、開始記号に印を付して(605)、変換規則
記憶部7に出力して(606)、処理を終了する。分離さ
れた各<因子>についての内部表現は、中間木生成の際
に子ノードの核となる。 第6図はデータ変換処理の全体の概要を示すフローチ
ヤートであり、データ変換処理の開始と終了、記号列の
読み取り、及び項の出力に係わる。処理系が起動される
と、パターンマツチ制御部5は、印が付された非終端記
号(開始記号)を探し出し(701)、その非終端記号と
記号の位置の初期値(0,0)を引数として手続き(1)
を呼び出す(702)。手続き(1)の処理終了後、入力
記号列2から一つの記号とその位置を読み取り(70
3)、読み取つた記号が記号列の終わりを示す特殊記号
ならば(704)、その記号の位置と開始記号を引数とし
て手続き(5)を呼び出し(705)、生成された項を出
力する。そうでなければ、読み取つた記号とその位置を
引数として手続き(2)を呼び出し(706)、その処理
終了後、処理703へ戻つて次の記号の処理を行なう。 第7図は手続き(1)のフローチヤートである。この
手続きは、次に読み込まれる可能性のある終端記号の導
出と、中間木ノードの生成に係わり、Earleyのアルゴリ
ズムにいうpredictorに相当する。手続き(1)は、非
終端記号と記号の位置を引数とし、まず、変換規則記憶
部7から、引数の非終端記号を左辺に持つ先頭変換規則
要素を検索する(801)。そのような先頭変換規則要素
をすべて検索し終えていれば(802)、処理を終了し、
そうでなければ、検索された変換規則要素に連結された
中間木ノードを調べ、引数の記号の位置を持つノードが
既に存在すれば(803)、処理801へ戻つて、次の先頭変
換規則要素を探す。他方、そのようなノードが存在しな
ければ、中間木ノードを生成する(804)。この中間木
ノードのパターンマツチ環境には、先頭変換規則要素の
出力項パターン、すなわち、左辺の非終端記号の引数が
記入される。次に、ノード集合子を生成し(805)、更
にノード結合子を生成して(806)、これらにより、処
理804で生成したノードを処理801で検索した変換規則要
素に連結する。このノード結合子におけるノード集合子
へのポインタは、初期値として空に設定される。処理80
1で検索された変換規則要素と処理805で生成したノード
集合子を引数として手続き(3)を呼び出し(807)、
その後、処理801に戻り、次の先頭変換規則要素を探
す。第4図の例では、この手続きにより、ノード44aが
生成されて、変換規則要素41aに連結される。 第8図は手続き(2)のフローチヤートである。この
手続きは、終端記号と入力記号のパターンマツチと、中
間木リーフ及びノードの生成り係わり、Earleyのアルゴ
リズムにいうscannerに相当する。手続き(2)は、読
み取られた入力記号とその位置を引数として、まず、引
数の記号と位置をそれぞれパターンマツチ環境と記号の
位置として持つ中間木リーフを生成し(901)、待ち状
態にある変換規則要素のうちから引数の記号とマツチす
る入力パターンを持つものを検索する(902)。この
時、調べた変換規則要素の待ち状態を解除する。変換規
則要素の待ち状態は、後述する手続き(3)において設
定されている。そのような変換規則要素が存在しない
か、又はすべて処理済みであれば(903)、処理を終了
し、そうでなければ、検索された変換規則要素に連結さ
れた中間木ノードを調べて、そのノードの記号の位置が
引数の記号の位置と連続しないならば(904)、処理902
に戻つて、次の変換規則要素を探す。他方、記号の位置
が連続すれば、処理902で得た変換規則要素に連結され
たノード集合子へのポインタを得た(905)後、変換規
則記憶部7から、処理902で得た変換規則要素にチエイ
ンされた次位変換規則要素を得る(906)。次いで、中
間木ノードを生成するとともに、ノード集合子と、処理
905で得たポインタを第2要素に持つノード結合子とを
生成して、この生成された中間木ノードを、これらの変
換規則要素に連結された中間木ノードの集合に加える
(907)。この中間木ノードの記号の位置は、終端が引
数の記号の位置まで伸ばされており、また、そのパター
ンマツチ環境は、処理902におけるマツチングの結果で
ある変数拘束条件である。更に、処理901で生成した中
間木リーフを処理907で生成された中間木ノードに連結
するためのノード集合子とノード結合子を生成し(90
8)、処理906で検索した変換規則要素と処理907で生成
したノード集合子を引数として、手続き(3)を呼び出
し(909)、その後、処理902に戻つて、次の変換規則要
素を探す。第4図の例では、この手続きにより、リーフ
45a〜45cとノード44b〜44dが順次生成される。 第9図は手続き(3)のフローチヤートであり、この
手続きは、変換規則要素の入力パターンの種別に応じ
て、次に行なう処理を選択する。手続き(3)の引数
は、変換規則要素とノード集合子である。引数の変換規
則要素の入力パターンが空(変換規則の終わり)ならば
(1001)、その変換規則要素の左辺の非終端記号と引数
のノード集合子を引数として手続き(4)を呼び出し
(1003)、入力パターンが非終端記号ならば(1002)、
その非終端記号と、引数のノード集合子から連結された
中間木ノードの記号の位置を引数として、手続き(1)
を呼び出し(1004)、入力パターンが終端記号ならば、
その変換規則要素を待ち状態にする(1005)。 第10図は手続き(4)のフローチヤートである。この
手続きは、中間木ノードの生成と、出力項生成のための
パターンマツチ環境の整備とに係わり、Earleyのアルゴ
リズムにいうcompleterに相当する。手続き(4)の引
数は非終端記号とノード集合子であり、まず、変換規則
記憶部7から、引数の非終端記号を入力パターンに持つ
変換規則要素を検索する(1101)。そのような変換規則
要素がすべて処理済みならば(1102)、処理を終了し、
そうでなければ、検索した変換規則要素に連結された中
間木ノードを調べて、その記号の位置が引数のノード集
合子からたどつて直接達する中間木ノードの記号の位置
と連続しなければ(1103)、処理1101に戻つて、次の変
換規則要素を探す。他方、記号の位置が連続すれば、処
理1101で得た変換規則要素に連結されたノード集合子へ
のポインタを得た(1104)後、処理1101で得た変換規則
要素にチエインされた次位変換規則要素を得る(110
5)。次いで、中間木ノードを生成するとともに、ノー
ド集合子と、処理1104で得たポインタを第2要素に持つ
ノード結合子とを生成して、この生成された中間木ノー
ドを、これらの変換規則要素に連結された中間木ノード
の集合に加える(1106)。この中間木ノードの記号の位
置は、その終端が、引数のノード集合子からたどつて直
接達する中間木ノードの記号の位置まで伸ばされてお
り、また、そのノード集合子へのポインタは、引数のノ
ード集合子を指すように設定される。更に、処理1105で
得られた変換規則要素の出力項パターンを、引数のノー
ド集合子からたどつて達する中間木ノードの集合のパタ
ーンマツチ環境の下で評価し、その結果のパターンマツ
チ情報を、前記の生成された中間木ノードのパターンマ
ツチ環境として記録する。処理1104で得た変換規則要素
と、処理1106で生成されたノード集合子を引数として手
続き(3)を呼び出し(1107)、手続き(3)の処理終
了後処理1101へ戻り、次の変換規則要素を得る。なお、
第4図では、簡明化のため、手続き(4)に関する部分
は示されていない。 第11図は手続き(5)のフローチヤートであり、出力
項の生成に係わる。手続き(5)は、開始記号と記号列
の最後を示す特殊記号の位置を引数とし、開始記号を左
辺に持ち入力パターンが空の変換規則要素を、変換規則
記憶部7から得る(1201)。得られた変換規則要素に連
結される中間木ノードの記号の位置が「引数の記号の位
置−1」ならば(1202)、その中間木ノードに連結され
た中間木ノードを、ノード結合子とノード集合子をたど
ることにより索出し、これらの中間木ノードに記録され
たパターンマツチ環境を順に適用して、ノード上の変数
を含む項の変数記号を、変数の置き換えが終つた項で順
次置き換え、出力項を生成する(1203)。そうでなけれ
ば構文エラーを出力する(1204)。 第4図に示された例でいえば、EXPRが開始記号であ
り、処理1202により、ノード44dと連結された変換規則
要素41dが索出される。それから、処理1203により、ノ
ード44c〜44aが索出され、ノード44a内の変数xとyが
ノード44dと44b内のパターンマツチ環境に従つて置換さ
れて、出力項add(n,m)が生成される。 本実施例によれば、記号列の構造解析における状態の
生成と中間木の生成を同時に行なうことができる。ま
た、ノード結合情報が集合化されていることから、複数
の中間木が重ね合せて表現され、中間木の占めるメモリ
サイズを小さくできると同時に、中間木ノードを共有す
ることにより、ノードが無限回繰返し出現する中間木
を、有限の時間で生成することができる。次に示す変換
規則の例5は、このことを利用し、自然数の加算を記述
した例である。 例5の変換規則を与えた処理系に、文字列 succ(zero)+succ(succ(zero)) を入力すると、項 succ(succ(succ(zero))) を出力する。この時、中間木は、パターンマツチの過程
で導かれたADDノードの数に応じて、無限個生成され
る。本実施例では、複数の中間木を重ね合せることによ
り、それらの総てを同時に管理する。これらの中間木
は、中間木から項を生成する段階で、パターンマツチに
より選別される。この場合は、ADDノードが2個の中間
木に対してパターンマツチが成功する。 中間木生成段階において、構文解析の状態と中間木を
分離し、まず状態を生成した後に、中間木を1つずつ生
成して行く手順で本発明を実施することも可能である。 本実施例の手続き(1)と手続き(2)と手続き
(4)は、並列処理の可能な独立の実行単位として実現
できる。 本実施例の入力記号の位置は、記号を特定するととも
にその前後の関連を示す他の情報で置き換えることがで
きる。その例としては、記号へのポインタとノードへの
ポインタの組が採用できる。 また、第4図に示した内部表現は、論理的に同じ意味
を持つ別の表現、例えば、テーブルによる表現等を用い
ても実施できる。 本実施例では、中間木を表現するため、ノード集合子
とノード結合子を導入しているが、他の表現方法を用い
ても中間木を表現できる。 変換規則の記述において、終端記号及び非終端記号と
変数を含む項との関連付けは、引数以外の形式によつて
も記述できる。その一例を次に示す。 すなわち、この記述形式では、左辺の非終端記号に関
連付けられた<変数を含む項>の並びが、右辺の末尾
に、一対の斜線記号に挟まれて記述される。この記述形
式によれば、例2の変換規則は、次のように記述する。 この場合、変換規則解析部(4)の処理を1部変える
ことにより、変換規則の内部表現を変更することなく、
例2に対してと同じ処理を行なうことが可能である。 〔発明の効果〕 以上の説明から明らかなように、本発明によれば、DC
Gによるデータ変換に固有の制約が除かれて、辞書と文
法規則の分離と、トツプダウン型処理の回避が可能にな
る。前者は、辞書の保守を容易にするとともに、単一の
辞書を変換の各種段階で共用することを容易にし、後者
は、利用可能な変換規則の範囲の拡張を可能にする。
【図面の簡単な説明】 第1図は本発明が適用されたデータ処理装置の一例を機
能的に示すブロツクダイヤグラム、第2図は本発明によ
る変換過程を例示する模式図、第3図は本発明の一実施
例で使用される情報の内部表現の形式を示す図、第4図
は第2図の例に対する第3図の内部表現を示す図、第5
図は変換規則を解析する処理のフローチヤート、第6図
は本実施例による変換処理の全体の概要を示すフローチ
ヤート、第7図ないし第11図は第6図の処理の部分であ
る手続き(1)なしい(5)の詳細をそれぞれ示すフロ
ーチヤートである。 1……変換規則、2……入力記号列、3……出力項、4
……変換規則解析部、5……パターンマツチ制御部、6
……パターンマツチ部、7……変換規則記憶部、7……
中間木記憶部、702〜704,705……入力記号列解析処理、
705……出力項生成処理。
───────────────────────────────────────────────────── フロントページの続き (56)参考文献 情報処理学会第32回(昭和61年前期) 全国大会講演論文集,P.551−552 発明協会公開技報公技番号 83−2994 号 (58)調査した分野(Int.Cl.7,DB名) G06F 9/45 JICSTファイル(JOIS)

Claims (1)

  1. (57)【特許請求の範囲】 1.外部から与えられた変換規則に従つて入力記号列を
    出力項に変換するデータ処理装置において、入力記号列
    の構造を文脈自由文法の記法で記述するとともに出力項
    の構造の記述を含み、出力項の構造の前記記述が前記文
    脈自由文法で用いられる終端記号と非終端記号に所定の
    表記形式で連結されている変換規則を入力するステツプ
    と、記号列を入力するステツプと、前記変換規則に記述
    された入力記号列の構造に基づくリダクシヨン処理によ
    つて前記入力記号列の構造を解析するステツプと、前記
    入力記号列の構造に対応する終端記号と非終端記号に連
    結された出力項の構造の前記記述に従つて出力項を生成
    して出力するステツプとを有する、データ変換方法。 2.特許請求の範囲1において、前記解析ステツプは、
    前記入力記号列と前記変換規則のパターンマツチを行な
    うステツプと、前記非終端記号をノードとし前記終端記
    号をリーフとする中間木を形成するとともにパターンマ
    ツチの結果を前記ノード及びリーフ上に記録するステツ
    プとを含み、前記出力項生成出力ステツプは、ノード及
    びリーフ上に記録された前記パターンマツチの結果を対
    応する非終端記号及び終端記号に連結された出力項の構
    造に適用して前記出力項を形成するステツプを含む、デ
    ータ変換方法。 3.特許請求の範囲1において、前記リダクシヨン処理
    は、Earleyの構文解析アルゴリズムに基づいて行なわれ
    る、データ変換方法。 4.特許請求の範囲1において、終端記号と非終端記号
    に連結された出力項の構造の前記記述は、終端記号と非
    終端記号の引数として与えられる、データ変換方法。
JP62120201A 1987-05-19 1987-05-19 データ変換方法 Expired - Fee Related JP3044463B2 (ja)

Priority Applications (2)

Application Number Priority Date Filing Date Title
JP62120201A JP3044463B2 (ja) 1987-05-19 1987-05-19 データ変換方法
US07/195,142 US5321606A (en) 1987-05-19 1988-05-18 Data transforming method using externally provided transformation rules

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP62120201A JP3044463B2 (ja) 1987-05-19 1987-05-19 データ変換方法

Publications (2)

Publication Number Publication Date
JPS63285636A JPS63285636A (ja) 1988-11-22
JP3044463B2 true JP3044463B2 (ja) 2000-05-22

Family

ID=14780405

Family Applications (1)

Application Number Title Priority Date Filing Date
JP62120201A Expired - Fee Related JP3044463B2 (ja) 1987-05-19 1987-05-19 データ変換方法

Country Status (1)

Country Link
JP (1) JP3044463B2 (ja)

Non-Patent Citations (2)

* Cited by examiner, † Cited by third party
Title
情報処理学会第32回(昭和61年前期)全国大会講演論文集,P.551−552
発明協会公開技報公技番号 83−2994号

Also Published As

Publication number Publication date
JPS63285636A (ja) 1988-11-22

Similar Documents

Publication Publication Date Title
US5321606A (en) Data transforming method using externally provided transformation rules
US4860203A (en) Apparatus and method for extracting documentation text from a source code program
JP3152868B2 (ja) 検索装置および辞書/テキスト検索方法
US5870608A (en) Method and apparatus for displaying text including context sensitive information derived from parse tree
Barenghi et al. Parallel parsing made practical
US6535886B1 (en) Method to compress linguistic structures
Gerdemann Parsing and generation of unification grammars
Jiang et al. Formal grammars and languages
JPS59176823A (ja) 自然言語を用いてコンピュータに入力する方法
Koskimies et al. The design of a language processor generator
JP3044463B2 (ja) データ変換方法
CN115935943A (zh) 一种支持自然语言结构计算的分析框架
Lang The systematic construction of Early Parsers: Application to the production of an O (n^ 6) Early Parser for Tree Adjoining Grammars.
US7143027B2 (en) Sentence realization system for use with unification grammars
Kuno The augmented predictive analyzer for context-free languages—its relative efficiency
Huet The Zen computational linguistics toolkit: Lexicon structures and morphology computations using a modular functional programming language
Munnecke et al. MUMPS: Characteristics and comparisons with other programming systems
Scott et al. Multiple input parsing and lexical analysis
Koskimies A specification language for one-pass semantic analysis
KR20050065015A (ko) 프로그램의 복제 여부를 검사하는 방법 및 시스템
Marti RLISP'88: an evolutionary approach to program design and reuse
Eriksen et al. The BOBS-system
Walsh Adapting Compiler Front Ends for Generalised Parsing
JPH02183338A (ja) プログラム言語トランスレータ生成装置および方法
Nudds The design of the MAX macroprocessor

Legal Events

Date Code Title Description
LAPS Cancellation because of no payment of annual fees