JPH01116830A - Lr構文解析テーブル圧縮方法 - Google Patents
Lr構文解析テーブル圧縮方法Info
- Publication number
- JPH01116830A JPH01116830A JP20485588A JP20485588A JPH01116830A JP H01116830 A JPH01116830 A JP H01116830A JP 20485588 A JP20485588 A JP 20485588A JP 20485588 A JP20485588 A JP 20485588A JP H01116830 A JPH01116830 A JP H01116830A
- Authority
- JP
- Japan
- Prior art keywords
- state
- action
- terminal
- matrix
- symbol
- 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
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
- G06F8/42—Syntactic analysis
- G06F8/427—Parsing
Landscapes
- Engineering & Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Devices For Executing Special Programs (AREA)
- Compression, Expansion, Code Conversion, And Decoders (AREA)
Abstract
(57)【要約】本公報は電子出願前の出願データであるた
め要約のデータは記録されません。
め要約のデータは記録されません。
Description
【発明の詳細な説明】
A、産業上の利用分野
本発明は一般的にはデータ処理に関し、さらに詳しくは
パーサ(構文解析系)の圧縮法に関する。
パーサ(構文解析系)の圧縮法に関する。
B、従来技術およびその問題点
ADA、C等の高級言語をマシン・リーダプルな形(マ
シン語)に変換するのに用いられるコンパイラは、しば
しば、丁度英語の学習者が文の正確さを確かめるために
文を主語、動詞、目的語に解析するのと同じように、1
行のソース・コードを構成要素に解析するパーサを含む
。パーサがその作業を終えると、コンパイラの他の部分
がソース・コードからマシン・コードへの実際の変換作
業を行なう。
シン語)に変換するのに用いられるコンパイラは、しば
しば、丁度英語の学習者が文の正確さを確かめるために
文を主語、動詞、目的語に解析するのと同じように、1
行のソース・コードを構成要素に解析するパーサを含む
。パーサがその作業を終えると、コンパイラの他の部分
がソース・コードからマシン・コードへの実際の変換作
業を行なう。
過去数年の間に、新しい言語が完全な文法をもって開発
されたり、あるいは既存の言語が完全な文法をもって特
定されたりしてきた。コンビュー夕言語であれ人間の原
語であれ、任意の言語の文法の場合と同様に、文法とい
うものは1文法的に許容できる構造を決定する規則を備
える。コンピュータ言語文法に基づいて、マトリックス
形式のテーブルからなるLR(左−右)パーサを生成す
ることができる。そこでは、行がパーサの状態を表わし
、列がパーサへの入力を表わす。行と列の交点は、パー
サの特定状態への所与の入力の結果化じる。アクション
(動作)を保持する。このようにマトリックスは、オー
トマトン、つまり例えば言語の文法規則に従う機械の特
徴を記憶するのに用いられる。
されたり、あるいは既存の言語が完全な文法をもって特
定されたりしてきた。コンビュー夕言語であれ人間の原
語であれ、任意の言語の文法の場合と同様に、文法とい
うものは1文法的に許容できる構造を決定する規則を備
える。コンピュータ言語文法に基づいて、マトリックス
形式のテーブルからなるLR(左−右)パーサを生成す
ることができる。そこでは、行がパーサの状態を表わし
、列がパーサへの入力を表わす。行と列の交点は、パー
サの特定状態への所与の入力の結果化じる。アクション
(動作)を保持する。このようにマトリックスは、オー
トマトン、つまり例えば言語の文法規則に従う機械の特
徴を記憶するのに用いられる。
スピード性能の面で、マトリックスはLRオートマトン
を記憶するのに極めて効率のよい方法である。なぜなら
、プロセッサに対してルックアップ・テーブルの形で提
示できるからである。残念ながら、マトリックスが必要
とするスペース量は、マトリックスに含まれる有意(非
エラー)エントリの数ではなくて、行と列の数によって
決まる。
を記憶するのに極めて効率のよい方法である。なぜなら
、プロセッサに対してルックアップ・テーブルの形で提
示できるからである。残念ながら、マトリックスが必要
とするスペース量は、マトリックスに含まれる有意(非
エラー)エントリの数ではなくて、行と列の数によって
決まる。
例えば、ADA等の言語の場合、約500の状態と約4
00の可能な入力があり得る。この結果。
00の可能な入力があり得る。この結果。
マトリックスには200,000個のエントリが存在す
る。一般に、LR子テーブル含まれる有意エントリは極
めて少なく、典型的な場合にはマトリックスの2%を占
めるにすぎない。マトリックス・スペースの残り98%
は非有意情報、つまりゼロである。時間の効率の点から
マトリックスに近い表現であって、テーブル中の有意エ
ントリの数に比例する量だけが必要になるものを選択す
るのが望ましい。
る。一般に、LR子テーブル含まれる有意エントリは極
めて少なく、典型的な場合にはマトリックスの2%を占
めるにすぎない。マトリックス・スペースの残り98%
は非有意情報、つまりゼロである。時間の効率の点から
マトリックスに近い表現であって、テーブル中の有意エ
ントリの数に比例する量だけが必要になるものを選択す
るのが望ましい。
また、入力に従う可能状態の連係を主に示すグラフィッ
ク形式でオートマトンを表わすことも可能である。かか
る表現は、有意エントリの数と同じだけの大きさしか必
要としないから、コンパクトであるという利点を持つ。
ク形式でオートマトンを表わすことも可能である。かか
る表現は、有意エントリの数と同じだけの大きさしか必
要としないから、コンパクトであるという利点を持つ。
しかしながら、希望する状態と入力が見つかるまで各鎖
のリンクを探査しなければならないので、かかる表現に
基づくオートマトンは極めて遅い。
のリンクを探査しなければならないので、かかる表現に
基づくオートマトンは極めて遅い。
LR解析テーブルの圧縮のためのいくつかの方法が知ら
れている。大抵のLRパーサ・ジュネレータは、解析テ
ーブルを圧縮して提供していた。
れている。大抵のLRパーサ・ジュネレータは、解析テ
ーブルを圧縮して提供していた。
通常、圧縮はハツシングまたは線形リストを使って行わ
れる。これらのデータ構造は極めて一般的であり、それ
らの解析テーブル圧縮への応用は一般に文献に記されて
いない。
れる。これらのデータ構造は極めて一般的であり、それ
らの解析テーブル圧縮への応用は一般に文献に記されて
いない。
ハツシング法では、希薄なマトリックスを表現するのに
、ハツシュ・テーブルが用いられる。行と列のインデッ
クスが“ハツシュ”されて、シングル・テーブルへのイ
ンデックスを形成する。ハツシュ衝突とエラーをチエツ
クするために、テーブルは解析動作のみならず、行と列
のインデックスも含まなければならない。ハツシュ解析
テーブルで必要になるスペースは極めて多い。また、行
と列のインデックスをチエツクするので、解析時間が増
加する。本発明のテーブル圧縮によれば。
、ハツシュ・テーブルが用いられる。行と列のインデッ
クスが“ハツシュ”されて、シングル・テーブルへのイ
ンデックスを形成する。ハツシュ衝突とエラーをチエツ
クするために、テーブルは解析動作のみならず、行と列
のインデックスも含まなければならない。ハツシュ解析
テーブルで必要になるスペースは極めて多い。また、行
と列のインデックスをチエツクするので、解析時間が増
加する。本発明のテーブル圧縮によれば。
ハツシング・テーブルを使った場合のせいぜい1/2未
満のスペースしか必要としない解析テーブルが得られる
。
満のスペースしか必要としない解析テーブルが得られる
。
線形リストを使う方法では解析マトリックス・エントリ
が線形リストをなしで記憶されたときに相当のスペース
の節約をもたらす。しかしながら、。
が線形リストをなしで記憶されたときに相当のスペース
の節約をもたらす。しかしながら、。
解析動作が必要になると、リストを逐次的にサーチしな
ければならない。したがって、解析動作を決定するのに
要する時間は一定でなく、解析マトリックス・エントリ
の数に依存することになる。
ければならない。したがって、解析動作を決定するのに
要する時間は一定でなく、解析マトリックス・エントリ
の数に依存することになる。
かかる方法は、スペースの節約にはなるけれども、時間
の点で犠牲を払うことになる。この方法は、Aho、5
ethi、υl1man著”Compilers:Pr
1nciples。
の点で犠牲を払うことになる。この方法は、Aho、5
ethi、υl1man著”Compilers:Pr
1nciples。
Techiques、and Toolg、”Addi
son−1i1eslog社、1986年発行の245
ページに記されている。
son−1i1eslog社、1986年発行の245
ページに記されている。
行変位(displacement)−を使う方法にお
いては、希薄な解析マトリックスの行が互いに”オーバ
ーレイ”されて1つの1次元テーブルとされる。オーバ
ーレイ・テーブルにおける各行の開始インデックスを検
索するために、補助テーブルが必要とされる。また、オ
ーバーレイ・テーブル中の各エントリには、インデック
スされた場所が有効エントリに対応することを確認する
“チエツク″エントリが関連していなければならない。
いては、希薄な解析マトリックスの行が互いに”オーバ
ーレイ”されて1つの1次元テーブルとされる。オーバ
ーレイ・テーブルにおける各行の開始インデックスを検
索するために、補助テーブルが必要とされる。また、オ
ーバーレイ・テーブル中の各エントリには、インデック
スされた場所が有効エントリに対応することを確認する
“チエツク″エントリが関連していなければならない。
この方法はZiegler、S、F、著”Smalle
r Faster Table Driv、en Pa
rser”、 (未公開M稿) Madison Ac
ademic computing Center、U
niv、of Wisconsin、Madison
1977年にて提案されており、(他の方法とともに
)YACCパーサ・ジェネレータ、っまりJohnso
n 。
r Faster Table Driv、en Pa
rser”、 (未公開M稿) Madison Ac
ademic computing Center、U
niv、of Wisconsin、Madison
1977年にて提案されており、(他の方法とともに
)YACCパーサ・ジェネレータ、っまりJohnso
n 。
S、C,著、”Y A CC・・・Yet anoth
er Compilercompiler”、C3TR
32、Be1l Laboratories。
er Compilercompiler”、C3TR
32、Be1l Laboratories。
Murray 1li11. N J 1975年で使
用されている。
用されている。
この方法は解析動作時間に関して成功しているけれども
、スペースの需要が過大なものになり得る。
、スペースの需要が過大なものになり得る。
この方法におけるスペース効率は、行がどのようにオー
バーレイされるかに非常に依存する。本発明の方法は、
ある程度行を変位させるけれども、行のオーバーレイに
関して新規な手法を用い、実際に1次元テーブルにおけ
る未使用エントリの数を最小にする。
バーレイされるかに非常に依存する。本発明の方法は、
ある程度行を変位させるけれども、行のオーバーレイに
関して新規な手法を用い、実際に1次元テーブルにおけ
る未使用エントリの数を最小にする。
Dencker、 P 、 、 DurreeK He
uft、 J 、 、によって“Optimizatf
on of Parser Tables for P
ortableCompilers、” PP、 54
6−572、ACM T。
uft、 J 、 、によって“Optimizatf
on of Parser Tables for P
ortableCompilers、” PP、 54
6−572、ACM T。
PLAS第6巻、ナンバー4.1984年10月に提案
されているグラフ・カラリング法は、互換性のあるエン
トリを備えた行と列を認識することによって1元のマト
リックスのエントリ数を減らそうと努める。ブラフ・カ
ラリング・アルゴリズムは、解析マトリックスをより小
さな動作マトリックスとブーリアン・チエツク、マトリ
ックスとに簡約するのに用いられる。結果として、迅速
にアクセスすることのできる極めて小さな解析テーブル
が得られる。本発明も互換性のある行を識別することに
より終点動作エントリの数を減らすけれども、上記文献
のものとは異なる方法によってであり、ブーリアン・チ
エツク、テーブルは使われない。上記文献では、終点動
作毎にブーリアン・マトリックスをアクセスしなければ
ならない。
されているグラフ・カラリング法は、互換性のあるエン
トリを備えた行と列を認識することによって1元のマト
リックスのエントリ数を減らそうと努める。ブラフ・カ
ラリング・アルゴリズムは、解析マトリックスをより小
さな動作マトリックスとブーリアン・チエツク、マトリ
ックスとに簡約するのに用いられる。結果として、迅速
にアクセスすることのできる極めて小さな解析テーブル
が得られる。本発明も互換性のある行を識別することに
より終点動作エントリの数を減らすけれども、上記文献
のものとは異なる方法によってであり、ブーリアン・チ
エツク、テーブルは使われない。上記文献では、終点動
作毎にブーリアン・マトリックスをアクセスしなければ
ならない。
大抵のマシンにおいて、かかる形式のアクセスは、単純
なテーブル・インデックス型のものよりかなり遅い。
なテーブル・インデックス型のものよりかなり遅い。
したがって、本発明の目的は、構文テーブル内の有意な
エントリの数に比例するメモリ・スペースに記憶するこ
とのできる。圧縮された解析テーブルを提供することに
ある。
エントリの数に比例するメモリ・スペースに記憶するこ
とのできる。圧縮された解析テーブルを提供することに
ある。
本発明の別の目的は、コンパクトに記憶することができ
るけれども、対応する行列表現よりも高速に動作するこ
とのできる解析テーブル表現を提供することにある、。
るけれども、対応する行列表現よりも高速に動作するこ
とのできる解析テーブル表現を提供することにある、。
本発明のさらに別の目的は、既存の方法を使う場合より
も小さく、顕著にアクセス時間の短い解析テーブルを与
えることにある。
も小さく、顕著にアクセス時間の短い解析テーブルを与
えることにある。
C0問題点を解決するための手段
本発明は、コンピュータ言語をコイパイルするのに使わ
れるようなLR解析テーブルを圧縮する方法を提供する
。この方法では、第1に、同じ、つまり互換性のある動
作を持つ状態を併合する。
れるようなLR解析テーブルを圧縮する方法を提供する
。この方法では、第1に、同じ、つまり互換性のある動
作を持つ状態を併合する。
続いて、マトリックス・テーブルの隣接する行同士をオ
ーバーレイさせてベクトル表現とし、有意性のないエン
トリを削除する。第3に、圧縮されたテーブルへのイン
デックスとして使うために、状態番号を符号化する。
ーバーレイさせてベクトル表現とし、有意性のないエン
トリを削除する。第3に、圧縮されたテーブルへのイン
デックスとして使うために、状態番号を符号化する。
D、実施例
コンピュータ言語用のLR解析テーブルは、該言語の文
法を要約したものである。それはマトリックスとして記
述することができる。その行はスタック駆動・有限状態
オートマトンの状態を表わし、列は言語の記号(シンボ
ル)を表わし、「動作(アクション)」と呼ばれるマト
リックスの各要素の値はオートマトンの遷移(トランジ
ション)またはエラーの何れか一方を表わす。オートマ
トンはスタック駆動式である。・なぜなら、解析の際に
、初期状態から現在状態へ至るべくとられた、オートマ
トン中の経路(path)を追跡するのに、補助スタッ
クを使うからである。
法を要約したものである。それはマトリックスとして記
述することができる。その行はスタック駆動・有限状態
オートマトンの状態を表わし、列は言語の記号(シンボ
ル)を表わし、「動作(アクション)」と呼ばれるマト
リックスの各要素の値はオートマトンの遷移(トランジ
ション)またはエラーの何れか一方を表わす。オートマ
トンはスタック駆動式である。・なぜなら、解析の際に
、初期状態から現在状態へ至るべくとられた、オートマ
トン中の経路(path)を追跡するのに、補助スタッ
クを使うからである。
最初、スタックは、オートマトンの初期状態だけを持つ
。解析の際の任意の時点において、パーサはスタックの
頂点(トップ)で示される状態にある。パーサは、入力
ストリーム中の最初のトークン・シンボルにアクセスす
る。2種類の遷移が起こり得る。
。解析の際の任意の時点において、パーサはスタックの
頂点(トップ)で示される状態にある。パーサは、入力
ストリーム中の最初のトークン・シンボルにアクセスす
る。2種類の遷移が起こり得る。
1)新しい状態への前向遷移。新しい状態がスタックに
ブツシュされることになる。
ブツシュされることになる。
2)後退(regression )スタックの頂点か
らゼロ以上の状態を取り去ることになる。
らゼロ以上の状態を取り去ることになる。
コンピュータ言語のシルポルは2つのカテゴリに分類で
きる。すなわち、1)終端(ターミナル)、2)非終端
(ノン・ターミナル)である。
きる。すなわち、1)終端(ターミナル)、2)非終端
(ノン・ターミナル)である。
終端とは実際の入カドークンとして使用され得る記号に
ことにである。つまり、例えば、プログラムを書く人間
によって与えられる。言語中の諸命令のことである。非
終端とは言語によって内部的に使用される。言語中のフ
レーズのことである。
ことにである。つまり、例えば、プログラムを書く人間
によって与えられる。言語中の諸命令のことである。非
終端とは言語によって内部的に使用される。言語中のフ
レーズのことである。
記号をカテゴライズした結果、解析テーブルは論理的に
別々の2個のテーブルに分けることができる。つまり、
1)行として状態を、列として終端を、それぞれ持つ終
端動作テーブル、および2)行として状態を、列として
非終端を、それぞれ持つ非終端動作テーブルつまり先行
(GOTO)テーブルである。以下の説明で使う文法に
関する終端動作テーブルと非終端動作テーブルが、第1
図と第2図にそれぞれ示されている。
別々の2個のテーブルに分けることができる。つまり、
1)行として状態を、列として終端を、それぞれ持つ終
端動作テーブル、および2)行として状態を、列として
非終端を、それぞれ持つ非終端動作テーブルつまり先行
(GOTO)テーブルである。以下の説明で使う文法に
関する終端動作テーブルと非終端動作テーブルが、第1
図と第2図にそれぞれ示されている。
LRパーサは、現在状態と現在記号から計算された動作
によって次の状態と次の記号が決定される。オートマト
ンであるので、マトリックスの直接アクセス性は維持さ
れなくてもよい。言い換えると、オートマトンが状態S
になるための唯一の方法は、前向遷移が状態をSへ移す
か、あるいは前向遷移が先行して既にスタック中にSを
置いていた場合に後退によってSに戻ることである。そ
れゆえ、Sに至る前向遷移エントリだけがSをアクセス
しなければならない。
によって次の状態と次の記号が決定される。オートマト
ンであるので、マトリックスの直接アクセス性は維持さ
れなくてもよい。言い換えると、オートマトンが状態S
になるための唯一の方法は、前向遷移が状態をSへ移す
か、あるいは前向遷移が先行して既にスタック中にSを
置いていた場合に後退によってSに戻ることである。そ
れゆえ、Sに至る前向遷移エントリだけがSをアクセス
しなければならない。
上記解析テーブルの説明は、例を参照した方がよく理解
できる。以下の例は、本明細書の以後の部分において、
解析テーブルの一般論および本発明の詳細な説明するの
に用いられる。
できる。以下の例は、本明細書の以後の部分において、
解析テーブルの一般論および本発明の詳細な説明するの
に用いられる。
選んだ例は、単純な数式、例えばa+b、amb、ある
いはam(a+b)を生成するための文法である。該文
法には、以下のとおり、終端シンボル、非終端シンボル
、および11個の規則(ルール)が含まれる。
いはam(a+b)を生成するための文法である。該文
法には、以下のとおり、終端シンボル、非終端シンボル
、および11個の規則(ルール)が含まれる。
終端記号 id ()+*eof
非終端記号 : ETFVR
ルール
1、E::=T
2、E::=+T
3、 E ::= E+T4、T::
=F 5、 T ::=−TmF3、F::=V 7、F::=R 8、V ::= id 9、 V ::= 1dR10、R:
:= (E) 11、 R::= (E)R 終端記号は通常ユーザが与えるものである。したがって
、ユーザがa+bというステートメントを与えたならば
、終端記号はa、b、および十である。
=F 5、 T ::=−TmF3、F::=V 7、F::=R 8、V ::= id 9、 V ::= 1dR10、R:
:= (E) 11、 R::= (E)R 終端記号は通常ユーザが与えるものである。したがって
、ユーザがa+bというステートメントを与えたならば
、終端記号はa、b、および十である。
終端記号# i d jlは識別子を表わし、この場合
では、a、b、cあるいはx、y、zといった変数であ
る。終端希望11 e o f”は、入力の終了を表わ
すという意味で特殊である。この文法により生成される
式の1例を下に挙げる°。
では、a、b、cあるいはx、y、zといった変数であ
る。終端希望11 e o f”は、入力の終了を表わ
すという意味で特殊である。この文法により生成される
式の1例を下に挙げる°。
id+id (id)
この式は、″トークン″の例を入力と解することにより
、”解析″される。
、”解析″される。
id+id (id)eof
トークンは左から右へ“読まれ″、各トークンが読まれ
る毎に1以以の解析″動作″が取られる。
る毎に1以以の解析″動作″が取られる。
解析の際には、以前の解析動作の゛′結果″を覚えてお
くのに補助“スタック”が必要とされる。これらの結果
は状態と呼ばれ、結果を保持するスタックは“状態スタ
ック”と呼ばれる。解析の際の任意の瞬間において、あ
る程度の数の入カドークンは消費されており、そのよう
な行為した結果は状態スタックで記録されている。11
eofIIトークンに達すると、入力は゛′受理され
た”状態にあると言え、解析は終了する。トークンの入
力シーケンスが文法により生成される言語に属さないな
ら(すなわち、入力が例としてあげた文法では許容され
ない式なら)、“エラー″が表示され、解析は終了する
(つまり、″ブロック”)。
くのに補助“スタック”が必要とされる。これらの結果
は状態と呼ばれ、結果を保持するスタックは“状態スタ
ック”と呼ばれる。解析の際の任意の瞬間において、あ
る程度の数の入カドークンは消費されており、そのよう
な行為した結果は状態スタックで記録されている。11
eofIIトークンに達すると、入力は゛′受理され
た”状態にあると言え、解析は終了する。トークンの入
力シーケンスが文法により生成される言語に属さないな
ら(すなわち、入力が例としてあげた文法では許容され
ない式なら)、“エラー″が表示され、解析は終了する
(つまり、″ブロック”)。
非終端記号はユーザにとってトランスペアレントである
中間記号であり、実際その意味はルールに依存する。
中間記号であり、実際その意味はルールに依存する。
工ないし11の番号を付されたルールは、合法的に生じ
得る還元(リダクション)を確立する。
得る還元(リダクション)を確立する。
シンボル::=は、右辺から左辺への1方向の等優性を
表わす。例えば、ルール1によると、ステートメントE
::=Tは、TがEと置換され得る(つまりEに還元さ
れ得る)ことを意味する。
表わす。例えば、ルール1によると、ステートメントE
::=Tは、TがEと置換され得る(つまりEに還元さ
れ得る)ことを意味する。
例のルール1〜11は、標準的な演算階層、つまり演算
子の優先順位を維持している。したがって、式a+b
* cでは1乗算b*Cが最初に行なわれ、加算+はそ
の後に続く。このとこはルールの中で反映されている。
子の優先順位を維持している。したがって、式a+b
* cでは1乗算b*Cが最初に行なわれ、加算+はそ
の後に続く。このとこはルールの中で反映されている。
ルールの中で、可能性があるとするなら、最終りダクシ
ョン(還元)はルール1に対応する。加算演算子を含む
ルール2は。
ョン(還元)はルール1に対応する。加算演算子を含む
ルール2は。
乗算演算子を含むルール5よりも、ルー゛ル1による最
終りダクションに近い。
終りダクションに近い。
パーサの制御は、現在の入カドークンとスタックの頂部
の現在状態が与えられると取るべき活動を指定するテー
ブルによって行なわれる。これらテーブル(または行列
)は、特定文法についての動作を内容とする。かかる行
列の例が第1図および第2図に示されており、以下で詳
細に説明する。
の現在状態が与えられると取るべき活動を指定するテー
ブルによって行なわれる。これらテーブル(または行列
)は、特定文法についての動作を内容とする。かかる行
列の例が第1図および第2図に示されており、以下で詳
細に説明する。
解析時に起こり得る動作は合計7通である。そのうち終
端動作行列に従って起こり得る動作は5通りであり、非
終端動作行列に従うのは2通りである。終端動作テーブ
ルのエントリは、5通りの値のうちの1つを有すること
ができる。
端動作行列に従って起こり得る動作は5通りであり、非
終端動作行列に従うのは2通りである。終端動作テーブ
ルのエントリは、5通りの値のうちの1つを有すること
ができる。
シフトnは″シフト″入力を意味しくつまり。
後続シンボルが現在シンボルになる)、nを現在状態と
して、nを状態スタックにブツシュする。
して、nを状態スタックにブツシュする。
シフト動作は前進遷移であり、これに関連するテーブル
・エントリは、パーサが入るべき後続の状態である。一
般に、シフトにおいては、入力ストリーム中の後続の新
たなシンボルが受理されて解析に回される。
・エントリは、パーサが入るべき後続の状態である。一
般に、シフトにおいては、入力ストリーム中の後続の新
たなシンボルが受理されて解析に回される。
(2)pによる還−:
文法ルールPを適用する。これは、ルールpの右辺の各
記号につき1つの状態をスタックから除去し、(ポツプ
・オフ)、状態スタックの頂点になった状態を現在状態
とし、ルールpの左辺の記号についての非終端動作を取
ることにより行なわれる。還元動作は後退であり、これ
に関連するテーブル・エントリはルール番号を表わす整
数である。スタックの頂部から除去する状態数には、右
辺の長さとして計算される。還元動作の実行後、還元さ
れたルールの左辺が現在入力記号となり。
記号につき1つの状態をスタックから除去し、(ポツプ
・オフ)、状態スタックの頂点になった状態を現在状態
とし、ルールpの左辺の記号についての非終端動作を取
ることにより行なわれる。還元動作は後退であり、これ
に関連するテーブル・エントリはルール番号を表わす整
数である。スタックの頂部から除去する状態数には、右
辺の長さとして計算される。還元動作の実行後、還元さ
れたルールの左辺が現在入力記号となり。
残りのトークン・ストリームの前に置かれる。
3 シフト/ による゛ −:
ルールpによる還元がすぐに続く、シフト入力動作であ
る。シフト/還元動作は、還元動作に先立つ任意の状態
へのシフト動作と等価である。シフト/還元に関連する
テーブル・エントリはルール番号である。
る。シフト/還元動作は、還元動作に先立つ任意の状態
へのシフト動作と等価である。シフト/還元に関連する
テーブル・エントリはルール番号である。
口12え雇じ−
人力の解析が成功したことを知らせる。解析は完了して
いる。どんな解析テーブルでも1つだけ受理動作がある
。
いる。どんな解析テーブルでも1つだけ受理動作がある
。
℃σ工孔う:二L
エラー動作−一解析を停止して入力を拒絶する。
それから先の解析は不可能である。つまり入力はエラー
である。
である。
非終端動作マトリックスは還元動作に続く非終端動作用
のものである。行先テーブルのエントリには、2通りの
値のうちの1つを有することができる。
のものである。行先テーブルのエントリには、2通りの
値のうちの1つを有することができる。
状態nに状態スタックにブツシュし、状態nを現在状態
にする。goto動作は前向遷移であり、これに関連す
るテーブル・エントリはパーサが入るべき後続の状態で
ある。後続の動作は終端動作である。
にする。goto動作は前向遷移であり、これに関連す
るテーブル・エントリはパーサが入るべき後続の状態で
ある。後続の動作は終端動作である。
(2) goto/i元p
名前のない状態に対してgoto動作を実行し、直後に
還元p動作を行なう。goto/還元動作は、還元動作
に先立つ任意の状態へのgoto動作と等価である。g
oto/i元動作に関連するテーブル・エントリは、ル
ール番号である。
還元p動作を行なう。goto/還元動作は、還元動作
に先立つ任意の状態へのgoto動作と等価である。g
oto/i元動作に関連するテーブル・エントリは、ル
ール番号である。
非終端動作マトリックスは空(void)のエントリを
持ち得るけれども、エラー・エントリは存在しない。
持ち得るけれども、エラー・エントリは存在しない。
パ還元″動作は1文法ルールに従う入力の派生(der
ivation)の再生成(reconstructi
on)を可能にするので、最も重要性が高い。例えば、
式id+idは、非終端記号Eから生成される。
ivation)の再生成(reconstructi
on)を可能にするので、最も重要性が高い。例えば、
式id+idは、非終端記号Eから生成される。
派生は非終端記号から始まり、ここまで生成されたシー
ケンスの最も右にある非終端記号に対しであるルールが
適用される。適用されるルールの番号が、次の式におい
て記号11 => 11の下に示されている。
ケンスの最も右にある非終端記号に対しであるルールが
適用される。適用されるルールの番号が、次の式におい
て記号11 => 11の下に示されている。
E = > E + T = > E + F = >
E 十V = > E + i d”>T+i d=
>F+i d=>V+i d=>i dl 4
6 8 十id したがって、まずルール3を使ってEが書き直されてE
+Tが得られる。次にルール4を使ってE+Fに書き直
される。次にルール6を使ってFがVに書き直される。
E 十V = > E + i d”>T+i d=
>F+i d=>V+i d=>i dl 4
6 8 十id したがって、まずルール3を使ってEが書き直されてE
+Tが得られる。次にルール4を使ってE+Fに書き直
される。次にルール6を使ってFがVに書き直される。
といった具合である。書き直すべき非終端記号がなくな
ると、派生は停止する。その結果、式id+idが生ま
れる。
ると、派生は停止する。その結果、式id+idが生ま
れる。
入力シーケンスの解析によれば、還元動作に通して派生
の逆が生成される。上記例では。
の逆が生成される。上記例では。
id+id<=V+id<=F+id<:T十id<=
E+i d<=E+V<=E+F<=E+T<=E 解析動作は以下のとおりである。
E+i d<=E+V<=E+F<=E+T<=E 解析動作は以下のとおりである。
L)Eを予期する状態でスタートする。
2)′vを予期する状態にシフトし、最も左にあるid
トークンを読み取る。
トークンを読み取る。
3)ルール8によって還元する。
4)goto/ルール6での還元。
5)goto/ルール4での電光。
6)Tが解析済であることを覚えている状態にシフトす
る。
る。
7)ルール1による還元。
8)Eが解析済であることを覚えている状態にシフトす
る。
る。
9)Tを予期する状態にシフトし、十トークンを読み取
る。
る。
10)Vを予期する状態にシフトし、最も左のidトー
クンを読み取る。
クンを読み取る。
11)ルール8による還元。
12 ) goto/ルール6での還元。
13 ) goto/ルール4での還元。
14)Tが解析済であることを覚えている状態にシフト
する。
する。
15)ルール3による還元。
16)eofトークンを受理する。
パーサの状態は、終端記号・非終端記号である番号とし
て符号化される。ルール番号はルールを表わすのに用い
られる。文法例に対応する終端記号・マトリックスおよ
び非終端記号・マトリックスの例が、第1図および第2
図にそれぞれ示されている。この例では状態が1から始
まる番号として示されている。しかし、わかりやすくす
るため、番号は記号に割り当てられているわけではない
。
て符号化される。ルール番号はルールを表わすのに用い
られる。文法例に対応する終端記号・マトリックスおよ
び非終端記号・マトリックスの例が、第1図および第2
図にそれぞれ示されている。この例では状態が1から始
まる番号として示されている。しかし、わかりやすくす
るため、番号は記号に割り当てられているわけではない
。
マトリックスのエントリは上述した解析動作である。こ
れらの動作はマトリックスの中で次のように略記されて
いる。
れらの動作はマトリックスの中で次のように略記されて
いる。
Sn 状態番号nへのシフト
Gn 状態記号nへ行< (goto)Rk
ルール番号kによる還元 SRk シフト/ルール番号による還元G Rk
goto/ルール番号kによる還元Acc 受
理動作 Err エラー 非終端動作マトリックスはgotoおよびgoto・還
元動作を含む。終端動作マトリックスはシフト、シフト
・還元、還元、および受理動作を含む。エラー動作は空
白のエントリによって示されている。
ルール番号kによる還元 SRk シフト/ルール番号による還元G Rk
goto/ルール番号kによる還元Acc 受
理動作 Err エラー 非終端動作マトリックスはgotoおよびgoto・還
元動作を含む。終端動作マトリックスはシフト、シフト
・還元、還元、および受理動作を含む。エラー動作は空
白のエントリによって示されている。
文法例についてのLRパーサの終端動作マトリックスが
第1図に示され、非終端動作マトリックス(行先、go
toマトリックス)が第2図に示されている。−船釣に
行列も非常に希薄である。(つまり、はとんどのエント
リがエラー動作である。)この例では、終端動作マトリ
ックスは約半分しか詰まっておらず、非終端動作マトリ
ックスは約1/3しか詰まっていない。
第1図に示され、非終端動作マトリックス(行先、go
toマトリックス)が第2図に示されている。−船釣に
行列も非常に希薄である。(つまり、はとんどのエント
リがエラー動作である。)この例では、終端動作マトリ
ックスは約半分しか詰まっておらず、非終端動作マトリ
ックスは約1/3しか詰まっていない。
これら2つの行列は多くの空白のエントリを含むけれど
も、そのままで使うことができる。本発明による圧縮法
の目標は、エントリをできるだけ多くの削減して、各マ
トリックスを単純線形(1次元)テーブルに圧縮するこ
とである。
も、そのままで使うことができる。本発明による圧縮法
の目標は、エントリをできるだけ多くの削減して、各マ
トリックスを単純線形(1次元)テーブルに圧縮するこ
とである。
入力シーケンスの解析は、これらの行列、およびその時
までに解析された入力の形を覚える5′状態スタツク”
によってコントロールされる。″状態″は動作マトリッ
クスの行インデックスとして符号化される。解析の始ま
る初期つまり開始状態があり、これは約束で状態1とさ
れる。構文解析は状態スタックで状態1から開始する。
までに解析された入力の形を覚える5′状態スタツク”
によってコントロールされる。″状態″は動作マトリッ
クスの行インデックスとして符号化される。解析の始ま
る初期つまり開始状態があり、これは約束で状態1とさ
れる。構文解析は状態スタックで状態1から開始する。
さらに、入力シーケンスの終りに追加されて、入力が終
了したことを知らせる。特殊な入力記号″eOfnがあ
る。
了したことを知らせる。特殊な入力記号″eOfnがあ
る。
これらのマトリックスは次のようにして使用される。パ
現在状態″は常に状態スタックのトップにある状態であ
る。″現在人力″記号は現在読取中の記号である。現在
入力記号についての動作を獲得するために、現在状態と
現在入力記号が、それぞれ終端マトリックスの行インデ
ックスと例インデックスとして使用される。
現在状態″は常に状態スタックのトップにある状態であ
る。″現在人力″記号は現在読取中の記号である。現在
入力記号についての動作を獲得するために、現在状態と
現在入力記号が、それぞれ終端マトリックスの行インデ
ックスと例インデックスとして使用される。
シフト動作は後続の入力記号を獲得して、新たな現在状
態を状態スタックにブツシュする。還元動作は状態スタ
ックから状態を除去するとともに、還元中のルールの左
辺に相当する非終端記号について非終端動作を行なう。
態を状態スタックにブツシュする。還元動作は状態スタ
ックから状態を除去するとともに、還元中のルールの左
辺に相当する非終端記号について非終端動作を行なう。
以上のことは、” A + B”を例にとって考えると
理解し易い。“A + B ”は“A + B ’ e
of”になる。eof記号は式の終りを表示するマーカ
ーの役を果たす。今の例では最初の入カドークンはA’
(id終端記号)である。したがって、第1図によれば
、状態1の行とidの列を参照することにより、最初の
動作が発見される。そこに配置されている動作は“S5
”であり、これは入力をシフトさせ、かつ状態5を状態
スタックにブツシュすることを意味する。入力ストリー
ムの次のトークン“+”が現在入力記号になり、かつ状
態スタックのトップにある状態5が現在状態になる。し
たがって、とるべき終端動作は、行5において“+”入
カドークンの下1手表示されているR8”である。これ
は、ルール8による還元を意味し、idをVに還元する
。
理解し易い。“A + B ”は“A + B ’ e
of”になる。eof記号は式の終りを表示するマーカ
ーの役を果たす。今の例では最初の入カドークンはA’
(id終端記号)である。したがって、第1図によれば
、状態1の行とidの列を参照することにより、最初の
動作が発見される。そこに配置されている動作は“S5
”であり、これは入力をシフトさせ、かつ状態5を状態
スタックにブツシュすることを意味する。入力ストリー
ムの次のトークン“+”が現在入力記号になり、かつ状
態スタックのトップにある状態5が現在状態になる。し
たがって、とるべき終端動作は、行5において“+”入
カドークンの下1手表示されているR8”である。これ
は、ルール8による還元を意味し、idをVに還元する
。
還元動作の結果、状態スタックから1つの状態。
状態5が除かれる。なぜなら、ルール8の右辺には記号
が1つしかないからである。したがって。
が1つしかないからである。したがって。
今の現在状態は1である。■、つまりルール8の左辺に
ついての非終端動作が実行される。したがって1行1に
おいてVと記された列の下を見ると。
ついての非終端動作が実行される。したがって1行1に
おいてVと記された列の下を見ると。
次の動作が“GR6”であることがわかる。これは、ル
ール6を用いる還元が直後に続く無名の状態へのgot
oである。ルール6の右辺の長さは1なので、スタック
にブツシュされる無名の状態は還元動作によって直ちに
除かれる。このため、無名の状態を任意に選んでよい。
ール6を用いる還元が直後に続く無名の状態へのgot
oである。ルール6の右辺の長さは1なので、スタック
にブツシュされる無名の状態は還元動作によって直ちに
除かれる。このため、無名の状態を任意に選んでよい。
結果として、現在状態は1のままである。ルール6はV
をFに還元する。オートマトンはまだ状態1にあるから
、F列の下を見ると、そこには“G R4”がある。こ
れは、”goto/ルール4による還元”を意味する。
をFに還元する。オートマトンはまだ状態1にあるから
、F列の下を見ると、そこには“G R4”がある。こ
れは、”goto/ルール4による還元”を意味する。
ルール4の右辺には記号が1つしかないので、無名の状
態が状態スタックにブツシュされ、その後除去される。
態が状態スタックにブツシュされ、その後除去される。
ルール4はFをTに還元する。まだ状態1にあるので、
T列を見ると、“G4″が見つかる。これは状態4へ行
くことを意味する。状態4が状態スタックにブツシュさ
れ、シーケンス1.4がその内容になる。次の動作は終
端動作である。記号41 + Itが依然として現在記
号であり。
T列を見ると、“G4″が見つかる。これは状態4へ行
くことを意味する。状態4が状態スタックにブツシュさ
れ、シーケンス1.4がその内容になる。次の動作は終
端動作である。記号41 + Itが依然として現在記
号であり。
状態4が現在状態である。次に終端動作マトリックスに
おいてトークン“+”の下で状s4を探すと、ルール1
による還元が見つかる。これは、TをEを還元する。還
元動作の結果、スタックのトップから状態4が除かれ、
状態1が現在状態になる。続いてルール1の左辺である
記号Eを使って非終端動作が行なわれる。行1と列1の
交点における動作は “G2”である。つまり状態2へのgotoである。
おいてトークン“+”の下で状s4を探すと、ルール1
による還元が見つかる。これは、TをEを還元する。還
元動作の結果、スタックのトップから状態4が除かれ、
状態1が現在状態になる。続いてルール1の左辺である
記号Eを使って非終端動作が行なわれる。行1と列1の
交点における動作は “G2”である。つまり状態2へのgotoである。
状態2が状態スタックにブツシュされる。このとき、状
態スタックは、現在状態を2として、シーケンス1.2
をその内容としている。現在入力記号は依然としてit
+ Itである。終端動作が求められる。
態スタックは、現在状態を2として、シーケンス1.2
をその内容としている。現在入力記号は依然としてit
+ Itである。終端動作が求められる。
状態2において、11 + 11に対応する終端動作は
11 S 71jである。これは、入力をシフトし、か
つ状態7を状態スタックにブツシュすることを意味する
。状態スタックは状態7を現在状態とし、1.2.7に
なる。後続の記号は# B !+であり、it id
Fjが現在入力記号になる。終端動作がとられる。
11 S 71jである。これは、入力をシフトし、か
つ状態7を状態スタックにブツシュすることを意味する
。状態スタックは状態7を現在状態とし、1.2.7に
なる。後続の記号は# B !+であり、it id
Fjが現在入力記号になる。終端動作がとられる。
状態7では、It i d ljについての終端動作は
ZrS2”である。これは入力をシフト、かつ状態5を
状態スタックにブツシュすることを意味する。状態スタ
ックは1,2.7,5になり、41cof#jが現在入
力記号になる。現在状態は5である。
ZrS2”である。これは入力をシフト、かつ状態5を
状態スタックにブツシュすることを意味する。状態スタ
ックは1,2.7,5になり、41cof#jが現在入
力記号になる。現在状態は5である。
状態において゛1eofjl対応する終端動作はR8で
ある。これは、idをVに還元する。その結果、状態5
が状態スタックのトップかち除かれ、新しい状態7にお
いてVに関する非終端動作が行なわれる。この動作はG
R6であり、”goto/ルール6による還元(F=
>V)”である。ある無毛の状態が状態スタックにブツ
シュされた後そこからポツプされ、現在状態は7のまま
である。続いて。
ある。これは、idをVに還元する。その結果、状態5
が状態スタックのトップかち除かれ、新しい状態7にお
いてVに関する非終端動作が行なわれる。この動作はG
R6であり、”goto/ルール6による還元(F=
>V)”である。ある無毛の状態が状態スタックにブツ
シュされた後そこからポツプされ、現在状態は7のまま
である。続いて。
状態7においてFについての非終端動作が実行される。
この動作はGll、つまり“goto 11 ”であり
、状態11を状態スタックにブツシュする。
、状態11を状態スタックにブツシュする。
このとき、状態スタックは1.2.7.11である。状
態11が現在状態であり 11eofljが現在入力記
号である。終端動作がとられる。状態11において、t
leoftTについての終端動作はR3であり、ルール
3による還元、つまりE=>E+Tである。このルール
の右辺の長さは3であるので、3個の状態が状態スタッ
クのトップから除去され、状態1だけが残ることになる
。状態1を現在状態とし、かつルール3の左辺であるE
を非終端記号として、非終端動作が行なわれる。非終端
動作マトリックスの与える動作はG2、つまり“Got
o 2 ”であり、状態2を状態スタックにブツシュす
る。
態11が現在状態であり 11eofljが現在入力記
号である。終端動作がとられる。状態11において、t
leoftTについての終端動作はR3であり、ルール
3による還元、つまりE=>E+Tである。このルール
の右辺の長さは3であるので、3個の状態が状態スタッ
クのトップから除去され、状態1だけが残ることになる
。状態1を現在状態とし、かつルール3の左辺であるE
を非終端記号として、非終端動作が行なわれる。非終端
動作マトリックスの与える動作はG2、つまり“Got
o 2 ”であり、状態2を状態スタックにブツシュす
る。
状態スタックの内容は1と2になり、状態2を現在状態
としている。現在入力記号は依然としてIIeOfll
である。次の動作は終端動作である。
としている。現在入力記号は依然としてIIeOfll
である。次の動作は終端動作である。
状態2“eof”ではについての終端動作はAcC1つ
まり受理動作である。したがって、当該入力シーケンス
に関して構文解析が成功裡に終了した。
まり受理動作である。したがって、当該入力シーケンス
に関して構文解析が成功裡に終了した。
上述したタイプの動作マトリックスは一般に巨大であり
、マトリックス式アクセスは一般に高価なものとなる。
、マトリックス式アクセスは一般に高価なものとなる。
第1図と第2図の例では、合計132のエントリがあり
、そのうち61が非エラー・エントリである。モダン・
プログラミング言語用の文法だとエントリの数は200
0oO以上になるけれども、約4000個(2%)以外
のエントリはエラー・エントリであることが普通である
。
、そのうち61が非エラー・エントリである。モダン・
プログラミング言語用の文法だとエントリの数は200
0oO以上になるけれども、約4000個(2%)以外
のエントリはエラー・エントリであることが普通である
。
マトリックスの行と列を並べ換え、かつそれに応じて前
向遷移エントリを変更することにより、オリジナルと同
形(isomorphic)であって同一の8語を認識
する別のオートマトンを生成することができる。実際1
行の並べ換えは状態の再ラベル付けとなるし、列の並べ
換えは記号の再ラベル付けとなる。
向遷移エントリを変更することにより、オリジナルと同
形(isomorphic)であって同一の8語を認識
する別のオートマトンを生成することができる。実際1
行の並べ換えは状態の再ラベル付けとなるし、列の並べ
換えは記号の再ラベル付けとなる。
このような151mが本発明に従うテーブル圧縮法の基
礎を形成する。パーサがQ個の状態、M個の終端、N個
の非終端を備えていると仮定しよう。
礎を形成する。パーサがQ個の状態、M個の終端、N個
の非終端を備えていると仮定しよう。
動作テーブルは、終端記号が列位置1〜Mを占める状態
で、〔1・・・Q、1・・・M〕なる次元を持つ。一方
、行先テーブルは、非終端記号が列位置1〜Nを占める
状態で、〔1・・・Q、0・・・N〕なる次元を持つ。
で、〔1・・・Q、1・・・M〕なる次元を持つ。一方
、行先テーブルは、非終端記号が列位置1〜Nを占める
状態で、〔1・・・Q、0・・・N〕なる次元を持つ。
行先テーブルに付加された0番目の列は、重要なエント
リだけを含むと仮定されるが、これについては後で詳し
く説明する。
リだけを含むと仮定されるが、これについては後で詳し
く説明する。
普通、NXMマトリックスの1番目の行、5番目の列の
要素にアクセスするためには、加算1回、減算1回、そ
して乗算1回が必要とされる。本発明では、行先テーブ
ル(Gotoテーブル)がBASE ACTION
(基底動作)と呼ばれる単純ベクトルに圧縮される。各
状態Sは、BASE ACTIONにおける、状態S
に対応する行先マトリックスの行が置かれた場所のイン
デックスとして表わされる。したがって1行先マトリッ
クスの列インデックスによって表わされる非終端Aが与
えられると、状態Sにおける記号Aについての動作が、
BASE ACTION (SEA)として、つま’
JBASE ACTIONテーブルをインデックスS
+Aでもって引くことにより、計算可能である。このた
め、本方法を用いる非終端動作の計算コストは1回の加
算と1回のインデックス動作であり、マトリックス表現
を用いる動作の計算コストより少ない。構文解析の際に
計算される動作の大部分は非終端動作である。ので、か
かる効果は顕著なものになる。
要素にアクセスするためには、加算1回、減算1回、そ
して乗算1回が必要とされる。本発明では、行先テーブ
ル(Gotoテーブル)がBASE ACTION
(基底動作)と呼ばれる単純ベクトルに圧縮される。各
状態Sは、BASE ACTIONにおける、状態S
に対応する行先マトリックスの行が置かれた場所のイン
デックスとして表わされる。したがって1行先マトリッ
クスの列インデックスによって表わされる非終端Aが与
えられると、状態Sにおける記号Aについての動作が、
BASE ACTION (SEA)として、つま’
JBASE ACTIONテーブルをインデックスS
+Aでもって引くことにより、計算可能である。このた
め、本方法を用いる非終端動作の計算コストは1回の加
算と1回のインデックス動作であり、マトリックス表現
を用いる動作の計算コストより少ない。構文解析の際に
計算される動作の大部分は非終端動作である。ので、か
かる効果は顕著なものになる。
BASE−ACT工oNベクトルにおける有意エントリ
の数は、行先テーブルの有意エントリの数にオートマト
ンの状態数を加えた数に等しい。
の数は、行先テーブルの有意エントリの数にオートマト
ンの状態数を加えた数に等しい。
通常、BASE ACTI○N要素の5%しか未使用
にならない。それにもかかわらず、時間を犠牲にして、
さらに2つのベクトルBASE CHECK (基本
チエツク)とGOTO−DEFAUL T (goto
デフォルト)を伴う本方法の変形を使うことにより、顕
著なスペース面での改善が図られる。
にならない。それにもかかわらず、時間を犠牲にして、
さらに2つのベクトルBASE CHECK (基本
チエツク)とGOTO−DEFAUL T (goto
デフォルト)を伴う本方法の変形を使うことにより、顕
著なスペース面での改善が図られる。
B A S E CHE CKベクトルは、BASE
−ACTIONベクトルとパラレルに用いられ、状態S
と非終端Aのそれぞれについて、非終端アクションが状
態SのAで規定されている場合にのみ。
−ACTIONベクトルとパラレルに用いられ、状態S
と非終端Aのそれぞれについて、非終端アクションが状
態SのAで規定されている場合にのみ。
BASE CHECK (SEA)はAに等しくなる
。GOTODEFAULTベク1−ルは、各非終端につ
いてのデフォルトの動作をその内容としている。非終端
Aについてのデフォルト動作は、行先マトリックスで最
も頻繁い登場する動作である。
。GOTODEFAULTベク1−ルは、各非終端につ
いてのデフォルトの動作をその内容としている。非終端
Aについてのデフォルト動作は、行先マトリックスで最
も頻繁い登場する動作である。
新しい表現と使うと、状態S、非終端Aについて規定さ
れている動作は、以下のアルゴリズムを用いて計算でき
る。なお、II / * uとLd 、 / l″の間
にはコメントを記している。
れている動作は、以下のアルゴリズムを用いて計算でき
る。なお、II / * uとLd 、 / l″の間
にはコメントを記している。
if BASJCHECK(SEA)=A thenY
ield BASIE−ACTION(SEA) ;
/ ”動作はBASJAC丁l0N(SEA) であ
る亨/ else Yield GOTO−DEFAULT(A
);/*そうでない場合、 動作GOTO−DEFAULT(A) である*/ この新たな表現では、インデックス動作を1回、比較を
1回行なう。つまり詳しく言うと、RASE CHE
CKベクトルをSEAでもって引くとともに、BASE
CHECK (SEA)とAが等価であるか比較を
行なうので、時間コストは余分にかかる。しかしながら
、BASE ACTIONが元々必要とするスペース
の50%をも節約することができる。
ield BASIE−ACTION(SEA) ;
/ ”動作はBASJAC丁l0N(SEA) であ
る亨/ else Yield GOTO−DEFAULT(A
);/*そうでない場合、 動作GOTO−DEFAULT(A) である*/ この新たな表現では、インデックス動作を1回、比較を
1回行なう。つまり詳しく言うと、RASE CHE
CKベクトルをSEAでもって引くとともに、BASE
CHECK (SEA)とAが等価であるか比較を
行なうので、時間コストは余分にかかる。しかしながら
、BASE ACTIONが元々必要とするスペース
の50%をも節約することができる。
動作テーブルは2つのパラレルなベクトルに圧縮される
。1つはTERM ACTION (終端動作)であ
り、実際の終端動作エントリを含む。
。1つはTERM ACTION (終端動作)であ
り、実際の終端動作エントリを含む。
もう1つはTERM CHECK (終端チエツク)
であり、TERM ACTION中の対応する要素の
有効性を確かめるのに使われる。これらのテーブル中の
有意エントリの数は、一般に動作テーブル中の有意エン
トリの数よりも少ない。このような節約が達成されるの
は、動作テーブルの多くの行がTERM ACTIO
Nに配置される前に組み合わされるからである。状態S
と終端記号して規定される動作は、以下のアルゴリズム
を使って計算することができる。
であり、TERM ACTION中の対応する要素の
有効性を確かめるのに使われる。これらのテーブル中の
有意エントリの数は、一般に動作テーブル中の有意エン
トリの数よりも少ない。このような節約が達成されるの
は、動作テーブルの多くの行がTERM ACTIO
Nに配置される前に組み合わされるからである。状態S
と終端記号して規定される動作は、以下のアルゴリズム
を使って計算することができる。
ss : = 5Asc、、gAcr工oN(s) ;
/ 率SS ヲBASE−ACTION(S)にする
ネ/ if TERM、、−CHECK(SS+t) = t
thenYield TERMJCTION (SS
十t );/宰動作はTERMJCTION (SS+t)である。傘/ else Yield TERMJCTON(SS);
7本そうでない場合、動 作はTERMJCTON (SS )である。*/ ここでも、1回の終端動作の計算は、3回のインデック
ス動作、1回の加算、および1回の比較からなるので、
マトリックス要素のアクセス・コストに極めて近くなる
。
/ 率SS ヲBASE−ACTION(S)にする
ネ/ if TERM、、−CHECK(SS+t) = t
thenYield TERMJCTION (SS
十t );/宰動作はTERMJCTION (SS+t)である。傘/ else Yield TERMJCTON(SS);
7本そうでない場合、動 作はTERMJCTON (SS )である。*/ ここでも、1回の終端動作の計算は、3回のインデック
ス動作、1回の加算、および1回の比較からなるので、
マトリックス要素のアクセス・コストに極めて近くなる
。
パーサは、各ルールの左辺の記号を内容に持つベクトル
と各ルールの右辺の長さを内容に持つぺクトルとを必要
とする。BASE CHECKベクトル(Gotoデ
フォルトが使われるとき)とこれらの2つの補助ベクト
ルに追加(アペンド)される。したがって、ベース・ベ
クトルの下限は、言語のルール数に1を加えた数である
。
と各ルールの右辺の長さを内容に持つぺクトルとを必要
とする。BASE CHECKベクトル(Gotoデ
フォルトが使われるとき)とこれらの2つの補助ベクト
ルに追加(アペンド)される。したがって、ベース・ベ
クトルの下限は、言語のルール数に1を加えた数である
。
Gotoデフォルトを使うと、各非終端について最も頻
轄に生じる動作が、登場位置がどこであれ、行先マトリ
ックスから除去される。Gotoデフォルト・ベクトル
は、非終端記号の各々をその“デフォルト″つまり、最
も頻繁に発生する動作と関連づけるのに用いられる。既
に述べたように、パーサに影響を与えることなく、行先
マトリックスの行と列を並べ換えることができる。行と
列が、そこに含む動作の数の順に並べ換えられる。すな
わち、動作が最も多い行が第1行となり、動作が最も多
い列が第1列となる。本発明のこのステップは重要であ
る。なぜなら、マトリックスの上玉角部に有意動作エン
トリを集中させることにつながるからである。その結果
、密度の比較的濃い行が最初に登場し、各行の行動は第
1列の近辺に群がる傾向が出ている。ゼロによって索引
づけられる特別の列が、並べ換えた後のマトリックスに
追加される。この列は、各行の本来のインデックスをそ
の内容としており、したがって行に施された並べ換えを
表わす。どのシフト動作goto動作も状態の並べ換え
に従って再番号づけしなければならないので、この列は
必要である。BASE ACTIONベクトルを生成
する際にも、このベクトルは、対応する状態の終端動作
についてのインデックス位置を与えるのに用いられる。
轄に生じる動作が、登場位置がどこであれ、行先マトリ
ックスから除去される。Gotoデフォルト・ベクトル
は、非終端記号の各々をその“デフォルト″つまり、最
も頻繁に発生する動作と関連づけるのに用いられる。既
に述べたように、パーサに影響を与えることなく、行先
マトリックスの行と列を並べ換えることができる。行と
列が、そこに含む動作の数の順に並べ換えられる。すな
わち、動作が最も多い行が第1行となり、動作が最も多
い列が第1列となる。本発明のこのステップは重要であ
る。なぜなら、マトリックスの上玉角部に有意動作エン
トリを集中させることにつながるからである。その結果
、密度の比較的濃い行が最初に登場し、各行の行動は第
1列の近辺に群がる傾向が出ている。ゼロによって索引
づけられる特別の列が、並べ換えた後のマトリックスに
追加される。この列は、各行の本来のインデックスをそ
の内容としており、したがって行に施された並べ換えを
表わす。どのシフト動作goto動作も状態の並べ換え
に従って再番号づけしなければならないので、この列は
必要である。BASE ACTIONベクトルを生成
する際にも、このベクトルは、対応する状態の終端動作
についてのインデックス位置を与えるのに用いられる。
続いて、並べ換えられた行先マトリックスはBASE
ACTIONベクトルを形成すべく圧縮される。圧縮
アルゴリズムは以下の通りである。
ACTIONベクトルを形成すべく圧縮される。圧縮
アルゴリズムは以下の通りである。
BASE AC”j’IONベクトルのエントリの各
々は、最初、エントリがパ未定義″であることを示す特
別な値に設定される。次に、並べ換えられた行先マトリ
ックスの各行は、BASE−ACTIONベクトルの未
使用部と“比較″される。比較はBASE ACTI
ONベクトルの最初の使用可能・未定義エントリから始
められ、行先マトリックスの行の各有意エントリがBA
SE ACTIONベクトルの未定義エントリと対応
すると判断されたら成功する。比較が不成功に終わると
。
々は、最初、エントリがパ未定義″であることを示す特
別な値に設定される。次に、並べ換えられた行先マトリ
ックスの各行は、BASE−ACTIONベクトルの未
使用部と“比較″される。比較はBASE ACTI
ONベクトルの最初の使用可能・未定義エントリから始
められ、行先マトリックスの行の各有意エントリがBA
SE ACTIONベクトルの未定義エントリと対応
すると判断されたら成功する。比較が不成功に終わると
。
BASE ACTI○Nベクトルの次の使用可能・未
定義エントリが試みられ、処理が繰り返される。
定義エントリが試みられ、処理が繰り返される。
最後には比較は成功しなければならない。比較が成功し
た点において、行先マトリックスの行はBASE A
CTIONベクトルにオーバーレイされる。このアルゴ
リズムは下記の擬似コードに要約される。
た点において、行先マトリックスの行はBASE A
CTIONベクトルにオーバーレイされる。このアルゴ
リズムは下記の擬似コードに要約される。
BASE ACTI○N全エントリを未定義にセット
する。
する。
並べ換えられた行先マトリックスの各行工について実行
BASE ACTION (J)が未定義に等しいよ
うな各Jについて実行。Goto (I 、 K)が有
意であるようなすべてのKについて BASE ACTION (J+K)が未定義ならば
かかるすべてについてBASE−ACTION(J+K
)をGoto (I、K)にセットする。次に行1につ
いて継続する。
うな各Jについて実行。Goto (I 、 K)が有
意であるようなすべてのKについて BASE ACTION (J+K)が未定義ならば
かかるすべてについてBASE−ACTION(J+K
)をGoto (I、K)にセットする。次に行1につ
いて継続する。
各行のO番目の要素は有意エントリとなるから。
各行がユニークな場所で開始することが保証される。上
述したような行と列の頻度ソートは、良好な圧縮を達成
するのに役立つ。最も高密度の行がBASE ACT
IONにまず置かれるので、作られたギャップは後で希
薄な行で満たされる。そのような希薄行の多くは1,2
個のエントリしかもたない。
述したような行と列の頻度ソートは、良好な圧縮を達成
するのに役立つ。最も高密度の行がBASE ACT
IONにまず置かれるので、作られたギャップは後で希
薄な行で満たされる。そのような希薄行の多くは1,2
個のエントリしかもたない。
状態は、BASE ACTIONでの0番目要素のイ
ンデックスによって表現される。したがって、状態Sが
与えられたなら、Sにおいて記号Xについて規定された
動作を得るためには、XをSに加算してBASE A
CTIONをその結果で引けばよい。
ンデックスによって表現される。したがって、状態Sが
与えられたなら、Sにおいて記号Xについて規定された
動作を得るためには、XをSに加算してBASE A
CTIONをその結果で引けばよい。
BASE ACTION中のすべての前向遷移(go
to動作)は、状態の新しいラベル付けを反映するよう
に変えられる。5TART 5TATEという特別な
変数は、オートマトンの開始状態の値を維持するのに用
いられる。受理動作(ACCEPT−ACTION)の
値は、BASE ACT、IONにおいてGoto行
が用いる最高インデックスの値プラス1として符号化さ
れる。エラー動作(ERRORACTION)の値は、
ACCEPT−ACTION+1として符号化される。
to動作)は、状態の新しいラベル付けを反映するよう
に変えられる。5TART 5TATEという特別な
変数は、オートマトンの開始状態の値を維持するのに用
いられる。受理動作(ACCEPT−ACTION)の
値は、BASE ACT、IONにおいてGoto行
が用いる最高インデックスの値プラス1として符号化さ
れる。エラー動作(ERRORACTION)の値は、
ACCEPT−ACTION+1として符号化される。
BASE ACTION内の未定義のま末であるすべ
ての位置(有意エントリを持つ最後のインデックスまテ
)ニはERRORACTIONが割り当てられる。Go
toデフォルトが用いられるときは所与の状態およびB
ASE ACTIONテーブルから得られた入力記号
についての非終端動作は必ずしも正確でないので、パラ
レルなりASE−CHECKテーブルに照らしてチエツ
クされなければならない。各行はBASE ACTI
ONの中のユニークな場所から始まるので、有意動作が
規定されている。行の中の各記号もユニークな場所を持
つ。したがって、BASE ACTIONベクトルの
有意エントリに対応するBASE CHECKベクト
ルは、有意エントリが規定されている記号を含む。BA
SE ACTIONのERRORACTIONエント
リに対応する。BASE’ CHECKの上限は、B
ASE ACTIONにおけ最高のインデックスを獲
得したGoto行で規定される。最高の非終端動作に関
するチエツクを許容できるように、拡張されなければな
らない。
ての位置(有意エントリを持つ最後のインデックスまテ
)ニはERRORACTIONが割り当てられる。Go
toデフォルトが用いられるときは所与の状態およびB
ASE ACTIONテーブルから得られた入力記号
についての非終端動作は必ずしも正確でないので、パラ
レルなりASE−CHECKテーブルに照らしてチエツ
クされなければならない。各行はBASE ACTI
ONの中のユニークな場所から始まるので、有意動作が
規定されている。行の中の各記号もユニークな場所を持
つ。したがって、BASE ACTIONベクトルの
有意エントリに対応するBASE CHECKベクト
ルは、有意エントリが規定されている記号を含む。BA
SE ACTIONのERRORACTIONエント
リに対応する。BASE’ CHECKの上限は、B
ASE ACTIONにおけ最高のインデックスを獲
得したGoto行で規定される。最高の非終端動作に関
するチエツクを許容できるように、拡張されなければな
らない。
2つのベクトル、つまりTERMINAL ACTI
ON (終端動作) とTERMINAL CHEC
K、(終端チエツク)を使って、終端動作マトリックス
が表現される。TERMINAL−CHECKベクトル
はBASE−CHECKベクトルと同じ機能を持つ。す
なわち、所与の状態及び終端入力記号に関して、計算で
求められたTERMINAL CHECKベクトルの
エントリがTERMINAL−ACTIONべ’)ト)
Li中の対応エントリの有効性を検査する。TERMI
NALCHECKベクトルが必要とされる理由は、入力
がエラーであるかもしれないこと、およびデフォルト還
元が使用されることにある。
ON (終端動作) とTERMINAL CHEC
K、(終端チエツク)を使って、終端動作マトリックス
が表現される。TERMINAL−CHECKベクトル
はBASE−CHECKベクトルと同じ機能を持つ。す
なわち、所与の状態及び終端入力記号に関して、計算で
求められたTERMINAL CHECKベクトルの
エントリがTERMINAL−ACTIONべ’)ト)
Li中の対応エントリの有効性を検査する。TERMI
NALCHECKベクトルが必要とされる理由は、入力
がエラーであるかもしれないこと、およびデフォルト還
元が使用されることにある。
終端動作マトリックスをベクトルに圧縮する前に、有意
エントリの数を減らすべく2つのステップが実行される
。それらは、互換性のある(ompatible)状態
を併合(merge)すること、および各行の最も頻度
の高い還元動作をデフォルト還元と置換することである
。
エントリの数を減らすべく2つのステップが実行される
。それらは、互換性のある(ompatible)状態
を併合(merge)すること、および各行の最も頻度
の高い還元動作をデフォルト還元と置換することである
。
以下の条件が満足されるとき、状態S2は他の状態S1
と互換性があると言う。
と互換性があると言う。
1.81と82は同じシフト、シフト/還元動作エント
リを有する。
リを有する。
2.82の還元動作に関係するルール・セットと81の
還元動作に関係するそれは同じである。
還元動作に関係するそれは同じである。
3、状態S1とS2の両方において規定されている還元
動作に関する終端記号tの各々について、還元動作が一
致する。
動作に関する終端記号tの各々について、還元動作が一
致する。
まずオートマトンの状態が区分され、それにより終端動
作マトリックスの行が互換性クラスに区分される。まず
上記条件1のみに基づいて粗い区分が行なわれる。条件
1は、シフトとシフト/還元の動作が一致するなら状態
同士の互換性ありとするものであった。所与のしようだ
いに関するシフト・エントリは、その状態の″シフト・
マツプ″によって表わされ得る。ここでシフト・マツプ
とは、終端記号と所与の状態で該記号についてなされる
べきシフトまたはシフト/還元動作とからなる対のセッ
トのことである。ある互換性クラス内の状態はすべて同
じシフト・マツプを有する。
作マトリックスの行が互換性クラスに区分される。まず
上記条件1のみに基づいて粗い区分が行なわれる。条件
1は、シフトとシフト/還元の動作が一致するなら状態
同士の互換性ありとするものであった。所与のしようだ
いに関するシフト・エントリは、その状態の″シフト・
マツプ″によって表わされ得る。ここでシフト・マツプ
とは、終端記号と所与の状態で該記号についてなされる
べきシフトまたはシフト/還元動作とからなる対のセッ
トのことである。ある互換性クラス内の状態はすべて同
じシフト・マツプを有する。
所与の状態に関する還元エントリは、その″還元マツプ
″すなわち終端記号と該所与の状態で該記号についてな
されるべき還元動作とからなる対のセットによって表わ
される。シフト・マツプ互換性クラスの各々は、該クラ
スの状態の還元マツプに従ってさらに区分することがで
きる。この区分は上記条件2、条件3に基いて行なわれ
る。
″すなわち終端記号と該所与の状態で該記号についてな
されるべき還元動作とからなる対のセットによって表わ
される。シフト・マツプ互換性クラスの各々は、該クラ
スの状態の還元マツプに従ってさらに区分することがで
きる。この区分は上記条件2、条件3に基いて行なわれ
る。
区分が完了した後、各クラスの状態は以下のようにして
単一状態に併合される。シフト・エントリおよびシフト
/還元動作は共通している。所与のクラスの任意の状態
においである還元動作が生じるなら、それも含まれる。
単一状態に併合される。シフト・エントリおよびシフト
/還元動作は共通している。所与のクラスの任意の状態
においである還元動作が生じるなら、それも含まれる。
併合後の状態に対応するべく、終端動作マトリックスの
行は再定義される。
行は再定義される。
次に、“デフォルト還元”動作が修正後の終端動作マト
リックスの各行について計算され、所与の行の0番目の
列に入れられる。デフォルト還元は、当該行において還
元動作があるなら単純に最も発生頻度の高い還元動作と
され、なければエラー動作とされる。
リックスの各行について計算され、所与の行の0番目の
列に入れられる。デフォルト還元は、当該行において還
元動作があるなら単純に最も発生頻度の高い還元動作と
され、なければエラー動作とされる。
行が併合され、デフォルト還元列が付加された終端動作
行列は、行先マトリックスを圧縮するのに使ったのと同
じアルゴリズムを使って圧縮される。結果生じるのが、
TERMIN ACTIONテーブルとTERMIN
CHECKテーブルである。TERMIN AC
,Tl0Nテーブル中のシフト動作(前向遷移)はすべ
て、BASE−ACTIONで用いられたのと同じ状態
ラベルリングを反映するように変更される。各シフト/
還元動作rrは、ルールrrに関する還元動作と区別さ
れるように、ERRORACTION+rrとして符号
化される。最終的に、BASE ACTION中の各
行先テーブル行の第Oエントリは、TERMINAL
ACTION中の対応する終端動作マトリックス行の
開始(第0)インデックスを使って更新される。ここで
、併合されたすべての行は、TERMINAL AC
TION内で同一の開始位置を有することに注意された
い。
行列は、行先マトリックスを圧縮するのに使ったのと同
じアルゴリズムを使って圧縮される。結果生じるのが、
TERMIN ACTIONテーブルとTERMIN
CHECKテーブルである。TERMIN AC
,Tl0Nテーブル中のシフト動作(前向遷移)はすべ
て、BASE−ACTIONで用いられたのと同じ状態
ラベルリングを反映するように変更される。各シフト/
還元動作rrは、ルールrrに関する還元動作と区別さ
れるように、ERRORACTION+rrとして符号
化される。最終的に、BASE ACTION中の各
行先テーブル行の第Oエントリは、TERMINAL
ACTION中の対応する終端動作マトリックス行の
開始(第0)インデックスを使って更新される。ここで
、併合されたすべての行は、TERMINAL AC
TION内で同一の開始位置を有することに注意された
い。
動作新たな符号化により、その値がルールの数似下であ
るエントリは、還元またはgoto還元エントリである
。また、その値がルールの数より大きいけれどもACC
EPT ACTION未満であるエントリは、シフト
またはgotoエントリである。
るエントリは、還元またはgoto還元エントリである
。また、その値がルールの数より大きいけれどもACC
EPT ACTION未満であるエントリは、シフト
またはgotoエントリである。
その値がERRORACTIONより大きなエントリな
シフト/還元動作であり、還元されるルールはエントリ
値からERRORACTIONを減することにより得ら
れる。
シフト/還元動作であり、還元されるルールはエントリ
値からERRORACTIONを減することにより得ら
れる。
結果として得られる圧縮されたテーブルは、標準的なL
R解析のアルゴリズムとともに使用してよい。構文解析
の任意の時点において、保留動作。
R解析のアルゴリズムとともに使用してよい。構文解析
の任意の時点において、保留動作。
現在状態、現在終端入力記号、および残っている入力の
シーケンスとともに状態を持つスタックが存在する。ス
タックは最初開始状態を内容としている。現在状態は常
に状態スタックのトップにある状態である。圧縮済テー
ブルを使うと、開始状態はBASE ACTIONテ
ーブルに対する所定のインデックスになる。最初このイ
ンデックスが状態スタックにブツシュされる。現在状態
と現在入力記号によって後続の解析動作が決定される。
シーケンスとともに状態を持つスタックが存在する。ス
タックは最初開始状態を内容としている。現在状態は常
に状態スタックのトップにある状態である。圧縮済テー
ブルを使うと、開始状態はBASE ACTIONテ
ーブルに対する所定のインデックスになる。最初このイ
ンデックスが状態スタックにブツシュされる。現在状態
と現在入力記号によって後続の解析動作が決定される。
この動作は常に終端記号動作である。このように。
現在状態インデックスでのBASE ACTIONテ
ーブルの値は、TERMINAL ACTIONにお
ける終端動作の見つかるインデックスを与える。したが
って、C8が現在状態を意味し、CIが現在入力を意味
するとすると、解析動作は、TERMINAL CH
ECK (BASE AcTroN(Cs)+CI)
がCIに等しいならば、TERMINAL ACTI
ON (BASEACTION (C8)+CI)の値
になる。
ーブルの値は、TERMINAL ACTIONにお
ける終端動作の見つかるインデックスを与える。したが
って、C8が現在状態を意味し、CIが現在入力を意味
するとすると、解析動作は、TERMINAL CH
ECK (BASE AcTroN(Cs)+CI)
がCIに等しいならば、TERMINAL ACTI
ON (BASEACTION (C8)+CI)の値
になる。
そうでないならば、TERMINAL ACTION
(BASE ACTION (C8))になる。
(BASE ACTION (C8))になる。
このようにして決まる終端記号動作は、還元動作である
かもしれないしく値がルール数以下の場合)、シフト動
作であるかもしれないしく値がルール数を超えるけれど
もACCEPT ACTION未満である場合)、シ
フト/還元動作であるカモシれないしく値がERROR
ACTIONを超える場合)、受理動作であるかもしれ
ないしく値がACCEPT ACTIONに等しい場
合)、あるいはエラーであるかもしれない、(値がER
RORACTIONに等しい場合)。上述したようにし
て決まった動作がシフト動作である場合。
かもしれないしく値がルール数以下の場合)、シフト動
作であるかもしれないしく値がルール数を超えるけれど
もACCEPT ACTION未満である場合)、シ
フト/還元動作であるカモシれないしく値がERROR
ACTIONを超える場合)、受理動作であるかもしれ
ないしく値がACCEPT ACTIONに等しい場
合)、あるいはエラーであるかもしれない、(値がER
RORACTIONに等しい場合)。上述したようにし
て決まった動作がシフト動作である場合。
新たな状態が状態スタックにブツシュされ、後続の入力
記号が現在入力記号になる。また、還元動作に決まった
場合とは、還元されるルールの右辺の長さに等しい数の
状態がスタックからポツプされる。スタックのトップが
現在状態になり、現在状態と還元されるルールの左辺を
使って非終端動作が実行される。動作がシフト/還元動
作であるなら、還元動作が実行されるけれども、右辺の
長さは1減少される。動作が受理動作なら、解析は成功
裡に終了したことになる。動作がエラー動作なら、解析
は入力中のエラーよってブロックされたわけである。
記号が現在入力記号になる。また、還元動作に決まった
場合とは、還元されるルールの右辺の長さに等しい数の
状態がスタックからポツプされる。スタックのトップが
現在状態になり、現在状態と還元されるルールの左辺を
使って非終端動作が実行される。動作がシフト/還元動
作であるなら、還元動作が実行されるけれども、右辺の
長さは1減少される。動作が受理動作なら、解析は成功
裡に終了したことになる。動作がエラー動作なら、解析
は入力中のエラーよってブロックされたわけである。
非終端動作はBASE ACTIONテーブル、現在
C8、最後に還元されたルールの左辺記号りを使って行
なわれる。
C8、最後に還元されたルールの左辺記号りを使って行
なわれる。
BASE ACTION (C8+L)がLに等しい
なら、非終端動作はBASE ACTION(C3+
L)の値となる。
なら、非終端動作はBASE ACTION(C3+
L)の値となる。
その他の場合、DEFAULT GOT○(L)が非
終端動作になる。
終端動作になる。
この動作はgoto動作またはgoto還元動作である
。
。
前者の場合、当該値が状態スタックにブツシュされ、現
在状態になる。現在状態と現在記号に関する終端動作が
生じる。後者の場合、還元動作が実行されるけれども、
右辺の長さは1だけ減る。
在状態になる。現在状態と現在記号に関する終端動作が
生じる。後者の場合、還元動作が実行されるけれども、
右辺の長さは1だけ減る。
上記方法は、以下の例を参照すること比よって、より明
解に理解されるのであろう。
解に理解されるのであろう。
まず、非終端動作行列が簡約され、続いて圧縮される。
非終端動作の数の削減は、″デフォルト″goto動作
の使用によって達成される。すなわち、非終端マトリッ
クスの各列から、最も頻繁に発生する動作(gotoま
たはgoto/還元)が除かれる。
の使用によって達成される。すなわち、非終端マトリッ
クスの各列から、最も頻繁に発生する動作(gotoま
たはgoto/還元)が除かれる。
最も頻繁に発生する動作が2以上ある場合は、そのうち
の何れかを選択してもよい。結果は、非終端記号によっ
てインデックスされるgotoデフォルト動作のベクト
ルである。今の例では、このベクトルは第3図で示され
るようなデフォルトgoto (行先)テーブルである
。
の何れかを選択してもよい。結果は、非終端記号によっ
てインデックスされるgotoデフォルト動作のベクト
ルである。今の例では、このベクトルは第3図で示され
るようなデフォルトgoto (行先)テーブルである
。
このようなファクタライズの結果、非終端動作マトリッ
クスに最初あった23エントリのうちの17が削除され
る。マトリックスでは、デフォルト動作が°エラー(つ
まり空席)エントリと置換される。したがって、今の例
では、非終端動作マトリックスは第4図に示される如く
になる。
クスに最初あった23エントリのうちの17が削除され
る。マトリックスでは、デフォルト動作が°エラー(つ
まり空席)エントリと置換される。したがって、今の例
では、非終端動作マトリックスは第4図に示される如く
になる。
この簡約ステップにはコストがかかる。デフォルトgo
to子テーブル非終端動作マトリックスの1行分のス
ペースを必要とする。非終端動作を獲得するのにもコス
トがかかる。行先をデフォルトにしない場合、解析時に
決定された非終端動作がエラー動作になることはあり得
ない。行先をデフォルトにすると、非終端エラー動作に
よって、所与の非終端記号につきデフォルト動作をとる
べきことが示される。これは解析時にしなければならな
い特別なチエツクである。非終端動作マトリックスが単
純ベクトルに圧縮されると、エラーのチエツクは余分な
チエツク・ベクトルを必要とする。
to子テーブル非終端動作マトリックスの1行分のス
ペースを必要とする。非終端動作を獲得するのにもコス
トがかかる。行先をデフォルトにしない場合、解析時に
決定された非終端動作がエラー動作になることはあり得
ない。行先をデフォルトにすると、非終端エラー動作に
よって、所与の非終端記号につきデフォルト動作をとる
べきことが示される。これは解析時にしなければならな
い特別なチエツクである。非終端動作マトリックスが単
純ベクトルに圧縮されると、エラーのチエツクは余分な
チエツク・ベクトルを必要とする。
gotoデフォルト動作の使用は本圧縮方法の1部では
ないけれども、本方法とともに使われて通常はテーブル
・スペースの相当な節約をもたらす。
ないけれども、本方法とともに使われて通常はテーブル
・スペースの相当な節約をもたらす。
さて、節約化された非終端マトリックスは、単一の動作
テーブルとチエツク・テーブルとに圧縮される。チエツ
ク・テーブルが必要なのは、 got。
テーブルとチエツク・テーブルとに圧縮される。チエツ
ク・テーブルが必要なのは、 got。
デフォルト動作が使用される場合のみである。マトリッ
クスのテーブルへの圧縮は、大部分、行をシフトさせ互
いにオーバーレイすることによって行なわれる。
クスのテーブルへの圧縮は、大部分、行をシフトさせ互
いにオーバーレイすることによって行なわれる。
1つの方法は次のように進行する。第1行をレイ・ダウ
ンする。第2行を1位置分右ヘシフトさせ、第1行と″
オーバーレイ″できるか否かテストする。ある行の非エ
ラー・エントリを持つ位置の各々において、他の行がエ
ラー(ブランク)エントリを持つならば、前者は後者に
オーバーレイすることができる。第2行の第1行へのオ
ーバーレイは、第2行の非エラーエントリの各々を第1
行の対応位置に置くことにより達成される。オーバーレ
イが不可能なら、第2行はさらに1位置分右へシフトさ
れ、処理が繰り返される。最悪の場合には、第2行を第
1行の完全に右側ヘシフトさせなければならない。第1
行の右側と第2行の左側にエラー・エントリが来ること
を仮定する。
ンする。第2行を1位置分右ヘシフトさせ、第1行と″
オーバーレイ″できるか否かテストする。ある行の非エ
ラー・エントリを持つ位置の各々において、他の行がエ
ラー(ブランク)エントリを持つならば、前者は後者に
オーバーレイすることができる。第2行の第1行へのオ
ーバーレイは、第2行の非エラーエントリの各々を第1
行の対応位置に置くことにより達成される。オーバーレ
イが不可能なら、第2行はさらに1位置分右へシフトさ
れ、処理が繰り返される。最悪の場合には、第2行を第
1行の完全に右側ヘシフトさせなければならない。第1
行の右側と第2行の左側にエラー・エントリが来ること
を仮定する。
第2行かだい1行にオーバーレイされた場合、その結果
を第1行を考え、第3行を第2行であると考える。マト
リックスのすべての行がオーバーレイされ尽くすまで処
理は繰り返される。簡単にするため、最初に空白行はす
べて削除できるとしよう。今の例では、第5図に示され
る結果が得られる。
を第1行を考え、第3行を第2行であると考える。マト
リックスのすべての行がオーバーレイされ尽くすまで処
理は繰り返される。簡単にするため、最初に空白行はす
べて削除できるとしよう。今の例では、第5図に示され
る結果が得られる。
第5図は、対応するテーブル・エントリの下にインデッ
クス番号を付すことによって、各行の開始位置を示して
いる。したがって、行3は位置1で開始し、行5は位置
2で開示する。どいつた具合である。非終端動作マトリ
ックスの列インデックスに対応する非終端記号に番号を
付することにより、このテーブルを使って非終端動作を
見つける場合に必要とされるのは、状態番号を取り出し
てテーブルにおける動作行インデックスを見つけること
だけである。該インデックスに対して非終端記号を加え
た後にその和から1を引き算した結果は、テーブルを引
くのに使える。すなわち。
クス番号を付すことによって、各行の開始位置を示して
いる。したがって、行3は位置1で開始し、行5は位置
2で開示する。どいつた具合である。非終端動作マトリ
ックスの列インデックスに対応する非終端記号に番号を
付することにより、このテーブルを使って非終端動作を
見つける場合に必要とされるのは、状態番号を取り出し
てテーブルにおける動作行インデックスを見つけること
だけである。該インデックスに対して非終端記号を加え
た後にその和から1を引き算した結果は、テーブルを引
くのに使える。すなわち。
ACTI○N NO,=PO8ITION NO,
+SYMBOL No、−1である。
+SYMBOL No、−1である。
したがって、(第5図の位置4から始まる)状態7にお
ける記号番号2(T)に対応する動作を見つけるために
は、位置4+2−1 (=5)に行き、動作Gllを読
めばよい。
ける記号番号2(T)に対応する動作を見つけるために
は、位置4+2−1 (=5)に行き、動作Gllを読
めばよい。
gotoデフォルトを使用中なので、チエツク、テーブ
ルが必要になる。このテーブルは第5図の圧縮済動作テ
ーブルと同じ長さであり、動作が規定されて゛いる。各
位置には非終端記号が含まれている。記号Errはエラ
ーつまり未使用チエツク、テーブルを示すのに使われて
いる。今の議論で使用するチエツク、テーブルを第6図
に示す。
ルが必要になる。このテーブルは第5図の圧縮済動作テ
ーブルと同じ長さであり、動作が規定されて゛いる。各
位置には非終端記号が含まれている。記号Errはエラ
ーつまり未使用チエツク、テーブルを示すのに使われて
いる。今の議論で使用するチエツク、テーブルを第6図
に示す。
状態7と記号番号2(T)についての動作を見つけるた
めには、インデックスが5として計算され、チエツク、
テーブル(第6図)の当該位置のエントリがTであるか
否かのチエツクが行なわれる。今の例ではその通りなの
で、希望する動作が動作テーブルから獲得される。
めには、インデックスが5として計算され、チエツク、
テーブル(第6図)の当該位置のエントリがTであるか
否かのチエツクが行なわれる。今の例ではその通りなの
で、希望する動作が動作テーブルから獲得される。
状態3、記号番号3(F)に関する動作(つまり、第2
図に示されるGR4)を希望する場合には、まずインデ
ックスが1+3−1=3として計算される。チエツク、
テーブルの位置3の値はFではなくてEであるので、F
についてデフォルトgotoテーブル(第3図)を使っ
て動作G4を得なければならない。
図に示されるGR4)を希望する場合には、まずインデ
ックスが1+3−1=3として計算される。チエツク、
テーブルの位置3の値はFではなくてEであるので、F
についてデフォルトgotoテーブル(第3図)を使っ
て動作G4を得なければならない。
上記のオーバーレイ手法によって線形ベクトルが生成さ
れる。しかし、なお多くのエントリが未使用であり、6
7%もの余分のスペースが必要とされている(つまり、
6個のエントリで済ませたいところ、合計10個のエン
トリが存在している)。本発明による以下の方法を使う
と、オーバーレイされたテーブルをさらに簡約すること
ができる。
れる。しかし、なお多くのエントリが未使用であり、6
7%もの余分のスペースが必要とされている(つまり、
6個のエントリで済ませたいところ、合計10個のエン
トリが存在している)。本発明による以下の方法を使う
と、オーバーレイされたテーブルをさらに簡約すること
ができる。
まず、行と列を並べ換え、含む動作の数の順に並ぶよう
にする。動作が最も多い行、列をそれぞれ第1行、第1
列にする。この結果、動作行列は“三角行列化″する傾
向にある。すなわち大抵の動作は対角線より上に登場し
、対角線の下には動作がほとんど登場しなくなる。第4
図の簡約された非終端動作マトリックスについてかかる
整理をした結果が、第7図に示され動作テーブルである
。
にする。動作が最も多い行、列をそれぞれ第1行、第1
列にする。この結果、動作行列は“三角行列化″する傾
向にある。すなわち大抵の動作は対角線より上に登場し
、対角線の下には動作がほとんど登場しなくなる。第4
図の簡約された非終端動作マトリックスについてかかる
整理をした結果が、第7図に示され動作テーブルである
。
ここで、動作のない状態に対応する行とエントリのない
非終端に対応する列は、第4図のテーブルから削除され
ている。したがって、列V、そして行1.2.4.8.
10.11が削除されている。削除された非終端には、
他のものに続く番号が割り当てられる。
非終端に対応する列は、第4図のテーブルから削除され
ている。したがって、列V、そして行1.2.4.8.
10.11が削除されている。削除された非終端には、
他のものに続く番号が割り当てられる。
行また列のエントリの数が同じ場合には、それらの配置
は交換可能である。したがって、今の例では列RとTが
最も多くのエントリ(どちらも2個)を持つから、これ
らの列が第7図の整理済マトリックスの最初の2行を形
成する。すべての行のエントリの数は同じなので、各行
は整理済マトリックスの任意の位置に置くことができる
。
は交換可能である。したがって、今の例では列RとTが
最も多くのエントリ(どちらも2個)を持つから、これ
らの列が第7図の整理済マトリックスの最初の2行を形
成する。すべての行のエントリの数は同じなので、各行
は整理済マトリックスの任意の位置に置くことができる
。
行の動作が変更されているので、同様にgotoデフォ
ルト・テーブルにも変更を加えなければならない。その
結果の新たなgotoデフォルト・テーブルを第8図に
示す。
ルト・テーブルにも変更を加えなければならない。その
結果の新たなgotoデフォルト・テーブルを第8図に
示す。
上記のオーバーレイ・アルゴリズムを使うと、第9図と
第10図にそれぞれ示す非終端動作テーブルとチエツク
・テーブルが得られる。
第10図にそれぞれ示す非終端動作テーブルとチエツク
・テーブルが得られる。
ここで、未使用のエントリは2個だけである。
(余分に33%のスペースが必要とされるだけである。
)チエツク・テーブルは最終行の長さ全体まで延ばされ
、インデックスを確実に収めている。
、インデックスを確実に収めている。
しかしながら、本発明では、テーブル7.9がさらに改
善される。本発明による改善は、動作テーブルのインデ
ックスによって状態番号を符号化することにより可能と
される。今の例では、状態6に番号1を付し、状態3に
番号2を付し、といった様なことが行なえる。続いて、
goto動作を状態番号を置き換えることできる。しか
しながら、非終端動作を持たない(つまりデフォルト動
作しか持たない)状態もある。したがって、テーブル・
インデックスは未使用状態の各々にも同様に割り当てら
れなければならない。さらに、終端動作テーブル(その
構成は後で説明する)中の所与の状態について、終端動
作の開始を突き止める必要がある。したがって、第7図
のマトリックスの非終端動作に、各状態に関するその終
端動作の開始インデックスを与える特別な列を付加する
のが好都合である。例えば、第1行(状態6)の特別な
左側列は、T6を含むであろう。マトリックスが完璧に
オーバーレイするなら、非終端動作テーブルの長さは、
簡約されたマトリックスのエントリの総数に状態数をプ
ラスしたものになる。
善される。本発明による改善は、動作テーブルのインデ
ックスによって状態番号を符号化することにより可能と
される。今の例では、状態6に番号1を付し、状態3に
番号2を付し、といった様なことが行なえる。続いて、
goto動作を状態番号を置き換えることできる。しか
しながら、非終端動作を持たない(つまりデフォルト動
作しか持たない)状態もある。したがって、テーブル・
インデックスは未使用状態の各々にも同様に割り当てら
れなければならない。さらに、終端動作テーブル(その
構成は後で説明する)中の所与の状態について、終端動
作の開始を突き止める必要がある。したがって、第7図
のマトリックスの非終端動作に、各状態に関するその終
端動作の開始インデックスを与える特別な列を付加する
のが好都合である。例えば、第1行(状態6)の特別な
左側列は、T6を含むであろう。マトリックスが完璧に
オーバーレイするなら、非終端動作テーブルの長さは、
簡約されたマトリックスのエントリの総数に状態数をプ
ラスしたものになる。
実際、終端動作がない、またはデフォルト動作だけしか
ない状態について必要とされる単独エントリは、他の行
とのオーバーレイの結果残る孔を埋めるので、結果とし
て完全なバッキングが実現される。説明中の例では、各
状態の終端動作についてのエントリを編入することによ
り、第7図の″三角行列化″された非終端動作マトリッ
クスに由来する。第11図に示すような非終端動作テー
ブルがもたらされる。
ない状態について必要とされる単独エントリは、他の行
とのオーバーレイの結果残る孔を埋めるので、結果とし
て完全なバッキングが実現される。説明中の例では、各
状態の終端動作についてのエントリを編入することによ
り、第7図の″三角行列化″された非終端動作マトリッ
クスに由来する。第11図に示すような非終端動作テー
ブルがもたらされる。
対応するチエツク・テーブルもある。第11図に示すチ
エツク・テーブルは、第9図のチエツク・テーブルと同
様にして生成されるけれども、第10図の非終端動作テ
ーブルに対応させた形で示されている。ゼロまたは終端
エントリのすべてにはErrエントリが与えられ、 g
otoエントリには、第7図のgotoエントリが現わ
れる列で決まる記号が与えられる。
エツク・テーブルは、第9図のチエツク・テーブルと同
様にして生成されるけれども、第10図の非終端動作テ
ーブルに対応させた形で示されている。ゼロまたは終端
エントリのすべてにはErrエントリが与えられ、 g
otoエントリには、第7図のgotoエントリが現わ
れる列で決まる記号が与えられる。
状態kについての終端動作の開始はTKによって表示さ
れている。状態記号は動作テーブル中の開始インデック
スに符号化される。さらに、テーブルは、ルール番号よ
り1つ大きなインデックスで始まる。今の例ではルール
が11個があるので、開始インデックスは12である。
れている。状態記号は動作テーブル中の開始インデック
スに符号化される。さらに、テーブルは、ルール番号よ
り1つ大きなインデックスで始まる。今の例ではルール
が11個があるので、開始インデックスは12である。
goto動作の場合、符号化された状態番号は、例えば
GR5を例にとると5である。一方、G8については番
号27が用いられる。なぜなら、状態8は第11図にお
いて16にインデックスされており、かつルールの数は
11なので、11+16=27になる。 got。
GR5を例にとると5である。一方、G8については番
号27が用いられる。なぜなら、状態8は第11図にお
いて16にインデックスされており、かつルールの数は
11なので、11+16=27になる。 got。
/還元動作の場合には、ルール番号が動作を表わす。最
終的に、2つのインデックスが取って置か九だ。
終的に、2つのインデックスが取って置か九だ。
1つは受理動作番手ついてであり、もう1つはエラー動
作についてである。結果生じたテーブルは″基本動作テ
ーブル″と呼ばれ、第13図に示されるような内容であ
る。
作についてである。結果生じたテーブルは″基本動作テ
ーブル″と呼ばれ、第13図に示されるような内容であ
る。
受理動作は30として符号化され、エラー動作は31と
して符号化される(図示していない)。
して符号化される(図示していない)。
終端動作テーブルが(下記のようにして)作られるとき
、そのエントリは1から始まるようにインデックスされ
る。所与の状態kについての終端動作に関する開始イン
デックスが決まると、基本動作テーブル中のTkについ
てのエントリは当該インデックスにセットされる。
、そのエントリは1から始まるようにインデックスされ
る。所与の状態kについての終端動作に関する開始イン
デックスが決まると、基本動作テーブル中のTkについ
てのエントリは当該インデックスにセットされる。
次に、終端動作行列の簡約・圧縮について考えよう。エ
ントリ数を減らすために、互換性のある行が識別される
。2つの行のシフトおよびシフト/還元動作が一致し、
かつ還元動作の組が、同じならば、2つの行は1′互換
性がある″。1方の状態と終端記号について一還元動作
が規定されるときは、必ず、他方の状態で当該終端記号
について、同じ還元動作が規定されているか、または動
作が何も規定されていないか、である。第1図の動作テ
ーブルを調べると、状態1.6が互換であり、状態3.
7.9が互換性をもつ。この結果、終端動作行列から行
が3つ除かれる。今の例での結果の行列が第14図に示
されている。
ントリ数を減らすために、互換性のある行が識別される
。2つの行のシフトおよびシフト/還元動作が一致し、
かつ還元動作の組が、同じならば、2つの行は1′互換
性がある″。1方の状態と終端記号について一還元動作
が規定されるときは、必ず、他方の状態で当該終端記号
について、同じ還元動作が規定されているか、または動
作が何も規定されていないか、である。第1図の動作テ
ーブルを調べると、状態1.6が互換であり、状態3.
7.9が互換性をもつ。この結果、終端動作行列から行
が3つ除かれる。今の例での結果の行列が第14図に示
されている。
互換性のある状態を合併することにより、今の例では7
動作(約20%)が削除される。デフォルトの還元を取
り出すことにより、さらに多くの動作を削除することが
できる。すなわち、状態(行)毎に、頻度の最も高い還
元を抽出する。それがデフォルト還元である。所与の行
について還元がないならば、エラー動作をデフォルト還
元として使用する。今の例でデフォルト還元を取り出し
た結果が第15図に示されている。そこで、第1例(d
ef)がデフォルト動作を示している。
動作(約20%)が削除される。デフォルトの還元を取
り出すことにより、さらに多くの動作を削除することが
できる。すなわち、状態(行)毎に、頻度の最も高い還
元を抽出する。それがデフォルト還元である。所与の行
について還元がないならば、エラー動作をデフォルト還
元として使用する。今の例でデフォルト還元を取り出し
た結果が第15図に示されている。そこで、第1例(d
ef)がデフォルト動作を示している。
今の例ではデフォルト還元を取ると、8エントリ (約
20%)が節約される。したがって1元のマトリックス
の38エントリのうち、15が既に削除されたわけであ
る。
20%)が節約される。したがって1元のマトリックス
の38エントリのうち、15が既に削除されたわけであ
る。
次に、上述した並べ換え方法を適用する。エントリの数
に従って行と列が並べ換えられるので、行の有効なオー
バーレイが保証される。説明中の例についての結果が第
16図に示されている。上記のように、並べ換え法の使
用によって、マトリックスは三角行列化する傾向にある
。
に従って行と列が並べ換えられるので、行の有効なオー
バーレイが保証される。説明中の例についての結果が第
16図に示されている。上記のように、並べ換え法の使
用によって、マトリックスは三角行列化する傾向にある
。
次に、行のオーバーレイが実行されて、終端動作テーブ
ルが作られる。チエツク・テーブルも必要である。終端
記号がチエツク記号とマツチしないなら、該状態につい
てのデフォルト動作がとられる。今取り上げている例を
使ったオーバーレイの結果が、第17図と第18図にそ
れぞれ示す終端動作テーブルとチエツク・テーブルであ
る。
ルが作られる。チエツク・テーブルも必要である。終端
記号がチエツク記号とマツチしないなら、該状態につい
てのデフォルト動作がとられる。今取り上げている例を
使ったオーバーレイの結果が、第17図と第18図にそ
れぞれ示す終端動作テーブルとチエツク・テーブルであ
る。
ここではバッキングが完璧であり、未使用のエントリは
ない。残っているのは、終端動作テーブルおよびチエツ
ク・テーブルにとっての適当な開始インデックスを割り
当て、すべての動作を符号化することだけである。シフ
ト動作は基本動作テーブル(第13図)におけるシフト
された状態のインデックスにより表わされる。シフト/
還元動作は、基本動作テーブルのエラー・エントリのイ
ンデックスに還元されつつあるルールのルール番号を加
算することにより符号化される。受理動作は基本動作テ
ーブルにおける受理のインデックス(30)により符号
化される。エラー動作は基本動作テーブルにおけるエラ
ーのインデックス(31)により符号化される。これは
第19図に示されている。
ない。残っているのは、終端動作テーブルおよびチエツ
ク・テーブルにとっての適当な開始インデックスを割り
当て、すべての動作を符号化することだけである。シフ
ト動作は基本動作テーブル(第13図)におけるシフト
された状態のインデックスにより表わされる。シフト/
還元動作は、基本動作テーブルのエラー・エントリのイ
ンデックスに還元されつつあるルールのルール番号を加
算することにより符号化される。受理動作は基本動作テ
ーブルにおける受理のインデックス(30)により符号
化される。エラー動作は基本動作テーブルにおけるエラ
ーのインデックス(31)により符号化される。これは
第19図に示されている。
最終終端チエツク・テーブルに用いられる終端記号のイ
ンデックスは、整理された動作マトリックス(第16図
)の列の順番づけに基いて割り当てられる。終端チエツ
ク・テーブルでは、ゼロはエラー・エントリのために用
いられる。今の例では、最終終端動作テーブルが第19
図に、最終終端チエツク・テーブルが第20図に、それ
ぞれ示されている。
ンデックスは、整理された動作マトリックス(第16図
)の列の順番づけに基いて割り当てられる。終端チエツ
ク・テーブルでは、ゼロはエラー・エントリのために用
いられる。今の例では、最終終端動作テーブルが第19
図に、最終終端チエツク・テーブルが第20図に、それ
ぞれ示されている。
第19図の終端動作デープルの状態のインデックスを用
い盃と基本動作テーブルを完成させることが可能になる
。この例では、最終基本動作テーブルが第21図に、最
終非終端チエツク・テーブルが第22図に、そしてgo
toデフォルト・テーブルが第23図にそれぞれ示され
ている。
い盃と基本動作テーブルを完成させることが可能になる
。この例では、最終基本動作テーブルが第21図に、最
終非終端チエツク・テーブルが第22図に、そしてgo
toデフォルト・テーブルが第23図にそれぞれ示され
ている。
E0発明の効果
本発明によれば、LR構文解析テーブルを記憶するのに
要する記憶装置のスペースを大幅に節約することができ
る。
要する記憶装置のスペースを大幅に節約することができ
る。
第1図は、サンプル文法についての終端動作マトリック
スである。 第2図は、サンプル文法についての非終端動作マトリッ
クスである。 第3図ないし第5図は、従来技術に従ってLR子テーブ
ル圧縮する方法を示す図である。 第6図ないし第23図は1本発明方法に従って、サンプ
ル文法に対応するLR子テーブル圧縮する様子を示す図
である。 FIG、1 yta゛動イ乍マトリ・ソクヌ
FIG、2 非終瑞旬イ乍マトリックスFIG、3 テ°′フォルト・チーアノし
スである。 第2図は、サンプル文法についての非終端動作マトリッ
クスである。 第3図ないし第5図は、従来技術に従ってLR子テーブ
ル圧縮する方法を示す図である。 第6図ないし第23図は1本発明方法に従って、サンプ
ル文法に対応するLR子テーブル圧縮する様子を示す図
である。 FIG、1 yta゛動イ乍マトリ・ソクヌ
FIG、2 非終瑞旬イ乍マトリックスFIG、3 テ°′フォルト・チーアノし
Claims (1)
- 【特許請求の範囲】 構文解析時にとるべき動作が現在状態に対応する行と現
在入力記号に対応する列の交点を参照することにより決
定されるマトリックス状のLR構文解析テーブルの圧縮
方法であつて、 (a)上記テーブルの中の、同じ動作を持つ行を探し、 (b)同じ動作を持つ複数の行が存在するならば、これ
らの行に対応する状態を併合し、かつ上記テーブル中に
はこれらの行を代表する行を1つだけ残して不要となつ
た行は上記テーブルから削除し、 (c)上記テーブル中の有意でないエントリが削除され
るように、上記(a)、(b)のステップを経たテーブ
ル中の行を重ね合わせて上記テーブルをベクトル化し、 (d)上記ベクトル化されたテーブルに対するインデッ
クスとして使えるように上記状態を符号化する ことを特徴とする方法。
Applications Claiming Priority (2)
| Application Number | Priority Date | Filing Date | Title |
|---|---|---|---|
| US11545687A | 1987-10-30 | 1987-10-30 | |
| US115456 | 1987-10-30 |
Publications (1)
| Publication Number | Publication Date |
|---|---|
| JPH01116830A true JPH01116830A (ja) | 1989-05-09 |
Family
ID=22361525
Family Applications (1)
| Application Number | Title | Priority Date | Filing Date |
|---|---|---|---|
| JP20485588A Pending JPH01116830A (ja) | 1987-10-30 | 1988-08-19 | Lr構文解析テーブル圧縮方法 |
Country Status (2)
| Country | Link |
|---|---|
| EP (1) | EP0313973A3 (ja) |
| JP (1) | JPH01116830A (ja) |
Families Citing this family (1)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| JPH0486946A (ja) * | 1990-07-31 | 1992-03-19 | Toshiba Corp | 拡張lrパーザによる文認識方式 |
-
1988
- 1988-08-19 JP JP20485588A patent/JPH01116830A/ja active Pending
- 1988-10-19 EP EP19880117367 patent/EP0313973A3/en not_active Withdrawn
Also Published As
| Publication number | Publication date |
|---|---|
| EP0313973A2 (en) | 1989-05-03 |
| EP0313973A3 (en) | 1990-10-17 |
Similar Documents
| Publication | Publication Date | Title |
|---|---|---|
| US5105353A (en) | Compressed LR parsing table and method of compressing LR parsing tables | |
| Purdom | A sentence generator for testing parsers | |
| Liang | Word Hy-phen-a-tion by Com-put-er | |
| US5526477A (en) | System and method for generating glyphs of unknown characters | |
| JPH07210555A (ja) | 言語解析方法及びその装置 | |
| US5625773A (en) | Method of encoding and line breaking text | |
| CN116089663B (zh) | 一种规则表达式匹配方法、装置及计算机可读存储介质 | |
| Schabes et al. | Parsing with lexicalized tree adjoining grammar | |
| US6999917B1 (en) | Left-corner chart parsing system | |
| Schabes et al. | Deterministic left to right parsing of tree adjoining languages | |
| JPH01116830A (ja) | Lr構文解析テーブル圧縮方法 | |
| Lucas | The structure of formula-translators | |
| WO1996017310A1 (en) | System and process for creating structured documents | |
| Nasr et al. | A simple string-rewriting formalism for dependency grammar | |
| JP2626722B2 (ja) | 日本語生成装置 | |
| CN119690447B (zh) | 代码规范检查方法及装置 | |
| JP3995186B2 (ja) | 構文解析装置 | |
| Eriksen et al. | The BOBS-system | |
| Horning | Lr grammars and analysers | |
| Mráz et al. | Marcus t-contextual grammars and cut hierarchies and monotonicity for restarting automata | |
| CN120950053A (zh) | 页面代码生成方法及其装置、设备、介质 | |
| CN121411778A (zh) | 一种适用于协议解码的解释语言生成方法、设备及介质 | |
| Marks | Taming the PL/I syntax | |
| JP3044463B2 (ja) | データ変換方法 | |
| Schimpf | Construction Methods of LR Parsers |