JP3194372B2 - パーザ生成器プリプロセッサシステム、パーザ生成器用プリプロセス方法 - Google Patents
パーザ生成器プリプロセッサシステム、パーザ生成器用プリプロセス方法Info
- Publication number
- JP3194372B2 JP3194372B2 JP28069298A JP28069298A JP3194372B2 JP 3194372 B2 JP3194372 B2 JP 3194372B2 JP 28069298 A JP28069298 A JP 28069298A JP 28069298 A JP28069298 A JP 28069298A JP 3194372 B2 JP3194372 B2 JP 3194372B2
- Authority
- JP
- Japan
- Prior art keywords
- bnf
- abstract syntax
- syntax tree
- rule
- list
- 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
Links
Landscapes
- Devices For Executing Special Programs (AREA)
Description
ム、パーザ生成方法およびパーザ生成用プログラムを記
録した記録媒体に関し、特に手続き的な処理プログラム
を記述せずにパーザを容易に記述できるパーザ生成シス
テム、パーザ生成方法およびパーザ生成用プログラムを
記録した記録媒体に関する。
文解析するパーザ(構文解析器)を自動生成するパーザ
生成システムとして、例えば「インフォメーション・ア
ンド・コントロール、第8巻、第6号、1965年(In
formation and Control,Vol.8,No.6)」の第607頁乃
至第639頁に掲載された「オン・ザ・トランスレーショ
ン・オブ・ランゲージ・フロム・レフト・ツー・ライト
(On the Translation ofLanguages from Left to Righ
t)」と題するKnuth,D.E.による論文に記載されているL
ALR構文解析方法を基に、19971年の「プローシー
ディングス・オブ・アイエフアイピー71(Proc.IFIP
71)」の第513頁ないし第518頁に掲載された「アン・エ
ルエーエルアール・パーザ・ジェネレータ(An LALR
(k) Parser Generator)」と題するLaLondeによる論
文に示すようにパーザを作成するためのツールとして用
いられている。
成システムは、パーザ開発者が、文法を記述したBNF
(Backus Nauer Form)定義ファイル50と、パーザ
開発者がテキストエディタ170を用いて、文法に応じ
た動作を定める「アクション」と呼ぶプログラム記述を
BNF定義ファイル50に追記したアクション付きBN
F定義ファイル120と、アクション付きBNF定義フ
ァイル120を入力としパーザのプログラムファイルを
生成するパーザ生成器130と、から構成されている。
システムは、つぎのように動作する。すなわち、パーザ
開発者はまず、パーズしたい対象の入力文法を定め、こ
れをBNF定義ファイル50として記述する。次にパー
ズの結果として生成したい抽象構文木を想定し、パーザ
開発者がテキストエディタ170を使って、手続き的処
理を記述したプログラムであるアクションをBNF規則
の右辺式ごとに追記し、アクション付きBNF定義ファ
イル120とする。
120を入力とするパーザ生成器130を起動し、パー
ザの動作を記述したプログラムファイル140を生成す
る。
ラなどのコンパイラ150でコンパイルすると、パーザ
の実行ファイル160が生成される。
60を起動する。プログラム実行手段20は、BNF定
義ファイル50で定義された文法に従った入力ファイル
10を読み込み、入力ファイル10をパーズし、抽象構
文木を生成し、それを抽象構文データベース30に格納
するパーザとして動作する。
R構文解析方法に基づくものが多く、一部には、SLA
方式、LL(1)方式をとるものもある。
パーザ生成システムは、下記記載の問題点を有してい
る。
る、ということである。
ョンを手続き的処理のプログラムとして記述しているた
めに、C言語などのプログラミング言語に精通すること
がパーザ開発者に要求されている、ためである。宣言的
な記述であるBNF定義部分に対し、アクション部分の
記述は、アクションを手続き的に記述する必要があるた
め、その作成は難しい。
のソースコード量は一般に大きい。例えば、ITU X.271
で定められているASN.1文法のパーザを作成するための
アクション付きBNF定義ファイルのソースコードは、
BNF規則が計298行であるのに対して、アクション部
分は計1843行である。
様と、生成されたパーザが生成する抽象構文木の不一致
が発生しやすい、ということである。
であり、抽象構文木の仕様からアクション部分で記述す
る手続きを作成するには隔たりがあるために、パーザ開
発者がアクション部分の記述の作成に際して誤りをおか
しやすいためである。
なされたものであって、その目的は、入力ファイルを作
成を容易化するパーザ生成器プリプロセッサシステム及
び方法を提供することにある。
ザを生成できるパーザ生成器プリプロセッサシステム及
び方法を提供することにある。
仕様とほぼ一致した表現形態を入力可能とするパーザ生
成器プリプロセッサシステム及び方法を提供することに
ある。
明のパーザ生成器プリプロセッサシステムは、抽象構文
左辺をキーとし、右辺規則を検索対象とする抽象構文規
則の一覧を格納する抽象構文一覧表と、入力した抽象構
文木定義ファイルを構文解析し、前記抽象構文木定義フ
ァイルの内容に従い抽象構文木定義規則の左辺をキーと
して、右辺の規則を前記抽象構文一覧表に登録する抽象
構文木定義パーザと、入力したBNF定義ファイルの内
容に従い、前記抽象構文一覧表から抽象構文規則の右辺
式を取り出すBNFパーザと、前記BNFパーザが取り
出した抽象構文規則の右辺式を表形式で記憶する一覧表
である右辺式一覧表と、前記BNFパーザが構文解析し
たBNF規則を一つ格納するBNF規則格納表と、前記
右辺式一覧表及び前記BNF規則格納表を参照し、アク
ション付きBNF定義ファイルを生成する前記コード生
成手段と、を備える。
ーザ生成器の前処理)方法は、(a)抽象構文パーザ
は、抽象構文木定義ファイルを読み込み、その内容に対
応した抽象構文木定義規則を生成し、(b)生成した前
記抽象構文木定義規則の左辺をキーとし、右辺規則を、
抽象構文一覧表に登録し、(c)BNFパーザでは、B
NF定義ファイルを読み込み、左辺ごとにパーズ(構文
解析)し、(d)左辺および文字列“::=”を、アク
ション付きBNF定義ファイルに、BNF文法規則の一
部として出力し、(e)BNF規則を一つパーズし、同
じ左辺を有する抽象構文木定義規則を、前記抽象構文一
覧表から検索して、抽象構文木定義規則の右辺規則を
得、(f)BNF右辺式を、アクション付きBNF定義
ファイルに、BNF文法規則の一部として出力し、
(g)前記右辺式一覧表の内容を空白にし、(h)前記
BNF右辺式が含む抽象構文木定義規則右辺式を選び出
し、右辺式一覧表に登録し、つづいて、コード生成器に
おいて、(i)BNF左辺に相当する構文木ノードを生
成する、(j)左辺ノードに、BNF規則右辺対に相当
するノードを枝として追加する、(k)抽象構文ノード
を生成する、(l)シンボルパスの右辺対の連なりに応
じて、BNF構文木ノードの枝を辿ってシンボルパスが
指し示すBNF構文木ノードを得る、(m)取得した前
記BNF構文木ノードに付随している抽象構文木ノード
を、前記BNF構文木から取り出し、前記(k)で生成
された前記抽象構文木ノードの枝の先に付加する、
(n)前記BNF構文木のノードに、前記(k)で生成
された前記抽象構文木のノードを付加する、(o)BN
F定義の開始文法規則の戻り値から、抽象構文部分を取
り出す、からなる前記(i)〜(o)の各コードを生成
する、ことを特徴とする。
する。本発明のパーザ生成器プリプロセッサは、その好
ましい一実施の形態において、図2を参照すると、抽象
構文一覧表(70)と、抽象構文木定義パーザ(80)
と、BNFパーザ(90)と、右辺式一覧表(100)
と、BNF規則格納表(115)と、コード生成器(1
10)とを備え、BNF定義ファイル(50)および抽
象構文木定義ファイル(40)の両ファイルを入力し、
パーザ生成器の入力ファイルであるアクション付きBN
F定義ファイル(120)を生成する。
は、好ましい別の実施の形態において、図10を参照す
ると、抽象構文一覧表(70)と、抽象構文木定義パー
ザ(80)と、BNFパーザ(210)と、右辺式一覧
表(100)と、BNF規則格納表(115)と、コー
ド生成器(110)と、を備え、正しい抽象構文木定義
ファイル(40)を入力すると、前記一実施の形態と同
様、アクション付きBNF定義ファイル(120)を生
成する。不正な抽象構文木定義ファイル(40)を入力
すると、パーザ生成器プリプロセッサは異常停止する。
サシステムは、別の実施の形態において、図12を参照
すると、抽象構文一覧表(70)と、抽象構文木定義パ
ーザ(380)と、BNFパーザ(90)と、右辺式一
覧表(100)と、BNF規則格納表(115)と、コ
ード生成器(320)と、抽象構文トークン一覧表(3
10)と、を備え、BNF定義ファイル(50)および
抽象構文木定義ファイル(40)を入力すると、前記一
実施の形態よりも、メモリ効率および速度効率のよいア
クション部を有するアクション付きBNF定義ファイル
(120)を生成する。
サシステムは、さらに別の実施の形態において、図16
を参照すると、抽象構文一覧表(70)と、抽象構文木
定義パーザ(380)と、BNFパーザ(210)と、
右辺式一覧表(100)と、BNF規則格納表(11
5)と、コード生成器(320)と、抽象構文トークン
一覧表(310)とを備え、正しい抽象構文木定義ファ
イル(40)を入力すると、前記第一実施の形態よりも
メモリ効率および速度効率のよいアクション部を有する
アクション付きBNF定義ファイル(120)を生成す
る。一方、不正な抽象構文木定義ファイル(40)を入
力すると、パーザ生成器プリプロセッサは異常停止す
る。
参照して、詳細に説明する。
実施の形態の構成を示す図である。図1を参照すると、
本発明の第1の実施の形態は、生成するパーザがパーズ
すべき目的言語入力ファイル10と、パーザ生成器13
0が生成するパーザ実行プログラム160を実行するプ
ログラム実行手段20と、パーザとして動作するプログ
ラム実行手段20が生成した抽象構文木を格納する抽象
構文木データベース30と、目的入力ファイル10の文
法を定義したBNF定義ファイル50と、抽象構文木を
定義した抽象構文木定義ファイル40と、BNF定義フ
ァイル50と抽象構文木定義ファイル40の両者を入力
としアクション付きBNF定義ファイル120を出力す
るパーザ生成器プリプロセッサ60と、パーザ生成器プ
リプロセッサ60が出力するアクション付きBNF定義
ファイル120と、アクション付きBNF定義ファイル
120を入力とし、パーザ20を実現するプログラムが
記述されたプログラムファイル140を出力するパーザ
生成器130と、パーザの振舞いを記述したプログラム
ファイル140と、プログラムファイル140を記述す
るプログラミング言語をコンパイルするためのコンパイ
ラ150と、コンパイラが生成し、パーザの動作を表す
パーザ実行ファイル160と、を含む。
すると、パーザ開発者は、BNF定義ファイル50及び
抽象構文木定義ファイル40を記述し、これらを入力と
してパーザ生成器プリプロセッサ60を起動する。パー
ザ生成器プリプロセッサ60は、両ファイルからアクシ
ョン付きBNF定義ファイル120を生成する。生成さ
れたアクション付きBNF定義ファイル120をパーザ
生成器130にかけ、パーザ生成器130は、パーザの
動作を表すプログラムファイル140を生成する。
150を起動してコンパイルすることで、パーザ実行フ
ァイル160が作成される。プログラム実行手段20を
使ってパーザ実行ファイル160を実行すると、目的言
語入力ファイル10をパーズし、抽象構文木を抽象構文
木データベース30に格納するパーザが動作することに
なる。
るパーザ生成器プリプロセッサ60の構成を示すブロッ
ク図である。図2を参照すると、抽象構文一覧表70
は、抽象構文の左辺をキーとし、右辺規則を検索対象と
する一覧表である。抽象構文木定義の左辺を与えると、
その右辺規則を得ることができる。
定義ファイル40をパーズし、抽象構文一覧表(「抽象
構文木定義一覧表」ともいう)70を、抽象構文木定義
ファイル40の内容に従い埋める。
50の内容に従い、抽象構文一覧表70から右辺式を取
り出し、取り出した右辺式を、右辺式一覧表100およ
びBNF規則格納表115に格納する。
とコード生成器110の一時記憶装置として用いられ、
抽象構文木定義(抽象構文木定義規則)の右辺式を表形
式で記憶する記憶手段である。
90がパーズしたBNF規則を一つ一時的に格納する記
憶手段である。
0およびBNF規則格納表115を参照して、アクショ
ン付きBNF定義ファイル120を生成する。
(生成規則)の一例を示す。BNF定義ファイル50は
BNF規則の集まりである。
規則から構成される。左辺と右辺規則は、記号列“::
=”で区切られる。
右辺規則の末尾は記号“;”で終了する。右辺式同士は
記号“│”で区切られる。
辺と右辺値の組で構成される。この組を「右辺対」と呼
ぶ。
ル10中の文字列を表す。
複数個現れたときに、区別するための識別子である。右
辺と右辺値の間は記号“:”で区切られる。
法の一例を示す。
則から構成される。
辺規則から構成される。左辺と右辺規則は、記号
列“::=”で区切られる。左辺は、BNF定義中に全
く同一の左辺が存在することが必要である。
右辺規則の末尾は記号“;”で終了する。右辺式同士は
記号“│”で区切られる。
名とシンボルパスの組から構成される。枝名は、抽象構
文木の枝を指し示す識別子である。シンボルパスは1又
は複数の右辺と右辺値の組である右辺対で構成される。
右辺対の間は記号“.”で区切られる。右辺対は、全く
同一の右辺対が、BNF定義中に存在するものとする。
左辺および右辺にあたる識別子は「トークン」と呼ばれ
る。
参考文献、例えば、佐々政孝によるい「1989年、1
0月刊の「プログラミング言語処理系」(岩波講座ソフ
トウェア科学)の第104頁から105頁の記載が参照
される。
5に示す木状のデータとして示す。図5(A)は、BN
F定義を表す「BNF構文木」と呼ぶデータ構造の一例
を示す図である。木のノードが、BNF規則の左辺に相
当し、そのノードから伸びる枝の先が、BNF定義の右
辺対に相当する。また、そのノードも、他のBNF規則
の左辺であり、その右辺対を枝の先に有する。枝の末端
(リーフ)が、入力ファイル内に含まれる文字列に対応
する。
る。木のノードが抽象構文規則左辺に相当する。ノード
から延びる枝は識別子として枝名を有する。枝の先に
は、シンボルパスが指し示すノードがついている。その
ノードも、抽象構文木規則左辺であり、枝を有する。抽
象構文左辺はBNF定義の左辺のいずれかであるので、
抽象構文木のノードは、図5(A)に示したBNF構文
のデータ構造のノードのいずれかに対応する。
ードに当たるか対応関係を示すのが、シンボルパスであ
る。シンボルパスは抽象構文左辺ノードに対応するBN
F構文木ノードからどのように枝を辿れば、抽象構文木
ノードに対応するBNF構文木のノードに行き着くかを
示す。このようにして、BNF定義ファイル50と抽象
構文木定義ファイル40を用いて抽象構文木を定めるこ
とができる。
略つぎのように動作する。
する入力であり、BNF定義ファイル50で定義された
文法に従って、その中身が記述されている。
ーザ実行プログラム160に従って動作する。つまり、
BNF定義ファイル50で定義された文法に正しく従っ
た入力ファイルをパーズし、抽象構文定義ファイル50
で定められた抽象構文木と呼ぶデータ構造を生成するパ
ーザとして振る舞う。
を一又は複数格納する。検索処理要求に対して、抽象構
文木内の適切なノードを問い合わせ者に返却する。
く受理する文法を定める。BNF定義ファイル50の文
法を、図3に示す。このBNF定義ファイル50は、パ
ーザ開発者が記述する。
出力する抽象構文木を定義する。抽象構文木定義ファイ
ルの文法を図4に示す。抽象構文木定義ファイルは、パ
ーザ開発者が記述する。
F定義ファイル50および抽象構文木定義ファイル40
の両ファイルを入力とし、アクション付きBNF定義フ
ァイル120を生成する。アクション付きBNF定義フ
ァイル120のBNF部分は、BNF定義ファイル50
とまったく同一の内容である。パーザ生成器プリプロセ
ッサ60は、BNF定義ファイル50および抽象構文木
定義ファイル40からアクションを生成し、アクション
付きBNF定義ファイル120とする。
は、従来のパーザ生成器の入力であるアクション付きB
NF定義ファイル120とまったく同一である。
は、BNF定義部分とBNF定義の右辺式毎に設けられ
たプログラムであるアクション部分とから構成される。
後者は、抽象構文木を構築するプログラムに相当する。
パーザ生成器130と同一であり、アクション付きBN
F定義ファイル120を入力とし、パーザの動作を表す
プログラムであるプログラムファイル140を生成す
る。
作を表すプログラムである。このプログラムファイル
は、C言語やJavaなどの一般的なプログラミング言語で
記述される。
140を記述しているプログラミング言語で記述された
プログラムを、プログラム実行手段20が解釈するパー
ザ実行ファイル160に変換する。
実行手段20が動作する手順を書いたプログラム実行手
段20が解釈可能なファイルである。
抽象構文木定義をパーズした結果を記録し、抽象構文木
左辺から抽象構文木定義右辺規則を得ることができる一
覧表である。この一覧表はBNFパーザが使用する。
ファイル40をパーズし、その内容を抽象構文一覧表7
0に登録する。
50を読み込み、第1の動作として、BNF規則格納表
115にBNF規則を格納する。第2の動作として、B
NF規則の左辺と同じ左辺を持つ抽象構文木定義規則の
右辺規則を得、右辺式一覧表100にそれを登録する。
NFパーザ90から受け取ったBNF規則をアクション
付きBNF定義ファイ120ルのBNF部分として出力
する。加えて、右辺式一覧表100から得た、抽象構文
木定義規則の右辺規則を基に、アクション付きBNF定
義ファイル120のアクション部分を生成する。
図7及び図8のフローチャートを参照して、本発明の第
1の実施の形態の全体の動作について詳細に説明する。
定義ファイル40を読み込み、構文解析を行う(図6の
ステップA10)。
定義ファイル40内のすべての抽象構文木定義規則につ
いて、左辺をキーにし、右辺規則を抽象構文一覧表70
に登録する(ステップA20)。
了したら、次に、BNFパーザ90がBNF定義ファイ
ル50をBNF規則ごとにパーズし、得たBNF規則を
BNF規則格納表115に登録する(ステップA3
0)。
あれば、BNF規則をパーズするステップA45に進
み、ステップA45からステップA90までの処理を、
左辺がつきるまで行う。左辺式がなければステップA4
0に進む。
は、「BNF定義の開始文法規則の戻り値から抽象構文
部分を取り出す。」というコードを生成し、コード生成
を終了する。
は、左辺および文字列“::=”を、アクション付きB
NF定義ファイル120に、BNF文法規則の一部とし
て、出力する。
左辺と同じ左辺を有する抽象構文規則を、抽象構文一覧
表70から検索し、その抽象構文木規則右辺規則を得る
(ステップA50)。得た右辺規則から右辺式を順次
得、各右辺式ごとに、ステップA65からステップA9
0の一連の処理を行う(ステップA60)。
からA90までの一連の処理を次のBNF規則におい
て、繰り返す。
式をBNF文法規則の一部として、アクション付きBN
F定義ファイル120に出力する(ステップA65)。
の内容を空白にする(ステップA70)。
で得た抽象構文木定義規則の右辺式のうち、BNF右辺
式が「含む」抽象構文木定義規則右辺式を選び出し、右
辺式一覧表110に登録する。
則右辺式に含まれるすべてのシンボルパスについて、B
NF右辺式の右辺対からシンボルパスどおりBNF構文
を辿ることができるノードが存在していることをいう。
象構文木定義規則中のすべての抽象構文木定義規則右辺
式について、「含む」か「含まない」か判断し終わった
ら、コード生成器110がアクションコードの生成を行
う(ステップA90)。
アクションコード生成の処理フローを示す流れ図であ
る。
120のアクション部分として、コード生成器110
は、「BNF定義左辺に相当するBNF構文木のノード
(仮に「a」とする)を生成する。」というコードを生
成する(ステップB10)。
ごとに繰り返し、以下のステップB30からステップB
40の処理を行う。
処理を終えたならば、ステップB50の処理に進む。
NF定義ファイル120のアクション部分として、「ノ
ードaに、BNF規則右辺対に相当するBNF構文木ノ
ード(仮に「b」とする)を枝として追加する。」とい
う動作を行うコードを生成する(ステップB30)。
み、ステップB30を繰り返す(ステップB40)。
NF定義ファイル120のアクション部分として、「抽
象構文ノードAを生成する。」という動作を行うコード
を生成する(ステップB50)。
0から抽象構文木定義規則の右辺式を一つずつ取り出
し、その右辺式の個数分だけ以下のステップB80から
ステップB120の処理を行う(ステップB70)。
ついて処理を終えていたら、ステップB130の処理を
行う。
文木定義の右辺式からシンボルパスを一つずつ取り出
し、それぞれについてステップB90からステップB1
10の一連の処理を繰り返し行う(ステップB80)。
のシンボルパスについてステップB90からステップB
110の一連の処理を終えたならば、ステップB120
に進む。
NF定義ファイル120のアクション部分として、「シ
ンボルパスの右辺対の連なりに応じてBNF構文木ノー
ド(例えば「b」とする)の枝を手繰ってシンボルパス
が指し示すBNF構文木ノード(仮にこれを「c」とす
る)を得る手続きをする。」という動作を行うコードを
生成する(ステップB90)。
ン付きBNF定義ファイル120のアクション部分とし
て、「BNF構文木のノードcに添付している抽象構文
木のノード(仮にこれをCとする)をcから取り出し、抽
象構文ノードAの枝の先にCをくっつける」という動作
を行うコードを生成する。このとき、枝名はシンボルパ
スに対応する枝名とする(ステップB100)。
ボルパスの一つについて処理が終了したので、右辺式中
の次のシンボルパスについて同じ処理を繰り返す(ステ
ップB110)。
べてのシンボルパスについての処理が終了したら、抽象
構文木定義規則右辺規則の次の右辺式を取り出し、ステ
ップB80からステップB120の処理を行う(ステッ
プB120)。
べての右辺式について、ステップB80からステップB
120の処理が終了したら、コード生成器110は、ア
クション付きBNF定義ファイル120のアクション部
分として、「BNF構文木のノードaに抽象構文木のノ
ードAを添付する。」という動作を行うコードを生成す
る(図8のステップB130)。
の処理により、アクション付きBNF定義ファイル12
0のアクション部分のコード生成用副処理を終え、BN
F右辺式ごとに、次のような処理を行うアクション部分
のコードが生成される。
「a」とする)を生成する。
ノード(仮に「b」とする)を枝として追加する。この
追加はBNF右辺式中の右辺対の数だけ行う。
NF構文木ノード(例えば「b」)の枝を手繰ってシン
ボルパスが指し示すBNF構文木ノード(仮に、これを
「c」とする)を得る。この処理は、BNF規則右辺式
に含まれる左辺を、BNF右辺式と共有する抽象構文右
辺式が有するシンボルパスの数だけ行う。
いる抽象構文木ノード(仮にこれを「C」とする)をcか
ら取り出し、抽象構文ノードAの枝の先にCをくっつけ
る。この処理は、BNF規則右辺式に含まれる左辺を、
BNF右辺式と共有する抽象構文右辺式が有するシンボ
ルパスの数だけ行う。
する。
ついて説明する。
ーザ開発者が記述するものは、BNF定義ファイル50
と抽象構文木定義ファイル40である。これらは、それ
ぞれ図4、図5に示すように、手続き的な処理を記述す
る必要がないため、プログラミングの知識のないパーザ
開発者でも、容易にパーザの開発が可能である。
て、さらに、抽象構文木定義ファイル40の内容が、パ
ーザが出力すべき抽象構文木の仕様に近い形で記述でき
るために、仕様とパーザプログラムの不一致を防ぐこと
ができる。
らに、アクションの手続きを記述するよりも抽象構文木
を記述した方がパーザ開発者の作成する入力行数が少な
くて済む。例えば、ITU X.271で定められているASN.1
文法のパーザを作成するためのアクション付きBNF定
義ファイルの行数は2330行に対して、本実施の形態
では、BNF定義ファイル50と抽象構文木定義ファイ
ル40を合わせて859行である。
ついてさらに詳細に説明すべく、具体的な実施例に即し
て説明する。
と、図9(B)に示す抽象構文木定義ファイル40を入
力とした場合のパーザ生成器プリプロセッサ60の動作
について説明する。
定義ファイル40を読み込み、その抽象構文木を作成す
る(図6のステップA10)。
象構文木定義規則は一つである。これを、抽象構文一覧
表70に登録する(ステップA20)。
辺規則は、 “(b1)b:e1.d:e1(b2)b:e1.d:e1.e:e1(b3)c:e2
│;” である。
イル50をパーズし、その左辺ごとに処理を行う(ステ
ップA30)。
わちコード生成器110は、左辺“a”および文字
列“::=”を、アクション付きBNF定義ファイル1
20に出力する(ステップA45)。このとき、BNF
パーザ90は、左辺“a”および、右辺規則“b:e1 c:
e2;”を、BNF規則格納表110に登録する。
覧表70から左辺“a”を有する抽象構文木定義の右辺
規則、 “(b1) b:e1.d:e1 (b2) b:e1.d:e1.e:e1 (b3) c:
e2│;” を得る(ステップA50)。
テップA60)。
辺式を、アクション付きBNF定義ファイル120に出
力する(ステップA65)。
ァイル120の内容は、“a::=b:e1 c:e2”とな
る。
ザ90は、右辺式一覧表100の中身をクリアし、空に
する(ステップA70)。
義の右辺式の中で、BNF右辺式規則“b:e1 c:e2”
が「含む」右辺式を求める(ステップA80)。
e2” である。というのは、シンボルパス“b:e1.d:e1”
は、BNF右辺式中の“b:e1”から、“b”を左辺とす
るBNF規則を得、“b”を左辺とするBNF規則中の
右辺規則の中に“d:e1”が含まれる。
BNF右辺式中の“b:e1”から、“b”を左辺とするB
NF規則を得、“b”を左辺とするBNF規則中の右辺
規則の中に“d:e1”が含まれる。
右辺規則の中に“e:e1”が含まれる。
“c:e2”は、BNF定義右辺式中に存在する。
シンボルパスは、すべて右辺式“b:e1c:e2”に含まれ
るためである。
(ステップA90)。ステップA90での処理は、次の
通りである。
辺“a”に相当するBNF構文木のノード(仮に「node−
a」とする)を生成する。」というコードをアクション付
きBNF定義ファイル120に出力する(図7のステッ
プB10)。
1”,“c:e2”ごとに以下の処理を行う。
右辺“b”に相当するBNF構文木のノードを生成し
(仮に「node−b」とする)、node−bをnode−aの枝の
先に加える。」というコードをコード生成器110が生
成する(ステップB30)。
行う。
木定義左辺“a”に相当するノード(仮に「node−A」と
する)を生成する。」というコードを生成する(ステッ
プB50)。
覧表100から、抽象構文木定義右辺式を順次取り出す
(ステップB70)。
(b2) b:e1.d:e1.e:e1 (b3) c:e2”の一つのみであ
る。この右辺式について、順次シンボルパスを取り出す
(ステップB80)。
成器110は、「シンボルパスに従ってBNF構文ノー
ドを取り出す。」というコードを生成する(ステップB
90)。
構文ノードnode−bを取り出し、次にnode−bの枝の先に
ついているd:e1に相当するノードを、node−cをnode−
bの枝から取り出す。」というコードを生成する。
象構文ノード(仮に「node−C」とする)を得、抽象構
文木ノードnode−Aの枝“b1”の先にnode−Cを追加す
る。」というコードを生成する(ステップB100)。
1”と“c:e2”である。これらについても、“b:e1.
d:e1”と同様に、ステップB90からステップB10
0の処理を行う。
は、一つのみであるため、ステップB130に進み、
「node−aにnode−Aを付随させる。」というコードを生
成する(ステップB130)。
アクションコードの生成を終了する。
了したので、次に右辺式“”についての処理を行う。右
辺式“”に含まれる右辺対は0個である。
クション付きBNF定義ファイル120に出力する(ス
テップA65)。この場合、“│”も含めて、“│”を
出力する。
表100をクリアする(図6のステップA70)。
2) b:e1.d:e1.e:e1 (b3) c:e2│;”の中で、BN
F右辺式に含まれるものを調べる。このとき、抽象構文
規則の右辺式は“”の1つのみである。これは、抽象構
文右辺式中の右辺対は全く存在しない。このため、抽象
構文右辺対の中にBNF含まれないものは存在しない。
そのため、抽象構文右辺式“”はBNF右辺式“”に含
まれると考える。BNFパーザ90は、右辺式一覧表1
00に、“”を一つのみ登録する(ステップA80)。
ョンコード生成を行う(ステップA90)。
る。
辺“a”に相当する構文木ノードnode−aを生成する。」
というコードを生成する(図7のステップB10)。
対ごとの処理を行うが、右辺対が存在しないため、何も
せず、ステップB50に進む。
ドnode−Aを生成する。」というコードを生成する。
覧表100から抽象構文木定義右辺式を取り出し、それ
ぞれについて処理を行う(ステップB70)。ただし、
今回、右辺一覧表100に登録された右辺式は″の一つ
である。“”が含む右辺対について、それぞれステップ
B80からステップB110の処理を行うが、“”が含
む右辺対は、0個であるため、これらの処理は行われな
い。
10は「node−aにnode−Aを付随させる。」というコー
ドを生成する(ステップB130)。以上で、右辺式に
対するアクションコードの生成を終了する。
も終了し、次にBNF左辺“b”についての処理とな
る。コード生成器110は左辺“b”および文字
列“::=”をアクション付きBNF定義ファイル12
0に出力する(ステップA45)。
70から左辺“b”を有する抽象構文木定義右辺規則を
得ようとする(ステップA50)。
ら右辺式を得る(ステップA60)。この場合、右辺式
は“d:e1 f:e2”一個である。
コード生成器110は、“d:e1 f:e2”をアクション
付きBNF定義ファイル120のBNF部分の一部とし
て出力する(ステップA65)。
アする(ステップA70)。
辺式を見つけようとする(ステップA80)。
む右辺式は存在しない。ゆえに、右辺式一覧表100は
空のままである。
コード生成処理を行う(ステップA90)。
“b”に相当するBNF構文木のノード(仮に「node−
b」とする)を生成する。」というコードをアクション付
きBNF定義ファイル120に出力する(ステップB1
0)。
1”,“f:e2”ごとに以下の処理を行う。まず、“d:e
1”について、「“d:e1”に相当するBNF構文木のノ
ードを生成し(仮に「node−d」とする)、node−dをno
de−bの枝の先に加える。」というコードをコード生成
器110が生成する(ステップB30)。
行う。ここで、左辺“b”に対応する抽象構文規則はな
いので、“d:e1 f:e2”に対するアクションコードの
生成が終了する。
2”のみなのであるため、左辺“b”に対する処理が終了
する。
も左辺“b”と同様の処理を行う。
べての左辺について処理を終えるとステップA40に進
む。ここで、最終的に得られたBNF構文木には、抽象
構文木ノードが付随している。
たBNFノードに付随した抽象構文木ノードを取り出
し、抽象構文木とする。」というコードを生成する(ス
テップA40)。
施の形態について図面を参照して詳細に説明する。
ーザ生成器プリプロセッサ60の構成を示す図である。
本発明の第2の実施形態は、前記第1の実施形態のBN
Fパーザ90を、BNFパーザ210で置き換えたもの
である。全体のシステム構成は、前記実施の形態と同
様、図1に示した構成からなる。
と同様に、BNF定義ファイル50を読み込みパーズ
し、その結果を、BNF規則格納表115および右辺式
一覧表100に格納する。この際、右辺式一覧表100
に登録する要素の数を検査し、それが0個のときに処理
を停止する機能を有する。
理フローを示す流れ図である。図10及び図11を参照
して、本発明の第2の実施の形態の全体の動作について
詳細に説明する。
ステップA80は、図6に示した前記第1の実施の形態
の処理とまったく同じ処理である。また、ステップA9
0のアクション生成処理は、図7に示した前記第1の実
施の形態の副処理と同一である。さらに、ステップA1
00も同じである。
ーザ210は、右辺一覧表100に登録されている抽象
構文の右辺式の数を調べる。もし、抽象構文右辺規則が
存在し、かつ、右辺一覧表100に登録されている右辺
式の数が0ならば、BNFパーザ210は処理を中断
し、異常停止する。
文木定義が誤っていることを示す。もし、1個以上存在
すれば、ステップA90に進み、前記第1の実施形態と
同じ処理を行う。
果について説明する。
の実施の形態の作用効果に加えて、不正な抽象構文木定
義ファイルの内容を予め検査するために、パーザ開発者
は早期に抽象構文木定義ファイルの過ちに気づくことが
でき、正しいパーザを作成することができる。
形態についてさらに詳細に説明すべく、具体的な実施例
に即して説明する。
0および図15(B)に示す抽象構文木定義ファイル4
0を入力として、パーザ生成器プリプロセッサ60を起
動した場合を考える。
プA20の処理により、前記第1の実施の形態と同様
に、BNFパーザ210は、左辺が“a”および“b”の
抽象構文定義規則を抽象構文一覧表70に登録する。
処理が行われる。BNFパーザ210は、BNF定義の
BNF規則を一つずつ選びだし(ステップA30)、ス
テップA45以降それごとの処理が施されるが、今回
は、BNF規則“b::=d:e1f:e2;”を例に説明す
る。
とまったく同じ動作をする。
により、BNFパーザ210は左辺“b”を有する抽象
構文規則“b::=(b1) f:e2.d:e1│(b2) f:e1;”を
得る。そして、BNFパーザ210はBNF右辺式
“d:e1 f:e2”を得る(ステップA60)。
0では、前記第1の実施の形態と、全く同じ処理を行
う。
右辺規則“(b1) f:e2.d:e1│(b2)f:e1”の中で、B
NF右辺式“d:e1 f:e2”が「含む」抽象構文右辺式
をみつけようとする。まず、BNF右辺式“d:e1 f:e
2”が抽象構文右辺規則“(b1) f:e2.d:e2”を「含
む」か調べる。
辺対“d:e1”は“f”を左辺とするBNF右辺規則中に
存在しない。そのため、「含まれない」。
てであるが、“f:e1”は、BNF右辺式“d:e1 f:e
2”に存在しない。そのため、「含まれない」。
f:e2.d:e1│(b2) f:e1;”には、右辺式“d:e1 f:
e2”に含まれる右辺式が存在しない。
存在するのに、含まれる抽象構文木定義の右辺式が存在
しないので、BNFパーザ210はエラーメッセージを
出し、異常停止する。
2.d:e1│(b2) f:e1;”に過ちがあるためと、パーザ
開発者は解釈することができる。
施の形態について図面を参照して詳細に説明する。
ーザ生成器プリプロセッサ60の構成を示す図である。
図12を参照すると、本発明の第3の実施の形態におい
ては、前記第1の実施の形態の構成に加えて、抽象構文
トークン一覧表310を備えている。また、コード生成
器110が、コード生成器320に置き換わっている。
さらに、抽象構文木定義パーザ80が、抽象構文木定義
パーザ380に置き換わっている。
の実施の形態の抽象構文木定義パーザ80と同様に、抽
象構文木定義ファイル40を読み込み、その内容を抽象
構文一覧表70に登録する。
抽象構文木定義ファイル40に現れるすべてのトークン
を抽象構文トークン一覧表310に登録する。
文で現れるトークンをすべて格納する一覧表である。重
複したトークンを登録した場合は、同じトークンのうち
ただ一つのみ登録する。抽象構文トークン一覧表310
は、与えられたトークンが表中に存在するかを調べるこ
とができる。
0と同様に、右辺一覧表100およびBNF規則格納表
115を参照して、アクション付きBNF定義ファイル
120を生成する。この際、コード生成器320は、抽
象構文トークン一覧表310を参照して、出力するコー
ドを変更することができる。
の形態の処理フローを示す流れ図である。図12乃至図
14を参照して、本発明の第3の実施の形態の全体の動
作について詳細に説明する。
ステップA20までの一連の処理は図6に示した前記第
1の実施の形態の処理と同一の処理を行う。
抽象構文木定義ファイル40中に現れるすべてのトーク
ンを抽象構文トークン一覧表310に登録する(ステッ
プA320)。
0まで、図6に示した前記第1の実施の形態と同様の処
理を行う。
第1の実施の形態の処理と相違するのは、ステップA9
0で、アクションコードの生成処理を行う代わりに、ス
テップA390で、アクションコード生成の前処理を施
している、ことである。
クションコード生成の前処理の処理手順を示す流れ図で
ある。図13及び図14の流れ図を参照して、まず、コ
ード生成器320はBNF規則格納表115からBNF
左辺を取得し、その左辺と同じトークンが抽象構文トー
クン一覧表310に存在するかを検査する(ステップC
10)。存在すれば、前記第1の実施の形態と同様に、
アクションコードの生成処理(ステップA90)を実行す
る。
0は、このBNF右辺規則が有するすべての右辺式のア
クション部分として、「本左辺に対するBNF構文木に
相当するノードがないことを示すnullを返す。」という
コードを生成する(ステップC20)。
終了すると、アクションコード生成の前処理を終了す
る。
について説明する。
の実施の形態の作用効果に加えて、コード生成器320
が抽象構文トークン一覧表310を参照することによ
り、生成されたパーザが、不必要なBNF構文木を作成
しない構成になっているため、パーザが動作中に、プロ
グラム実行手段20が使用する作業メモリ領域を、前記
第1の実施の形態よりも、削減することができる。
文木を作成する処理を減らすことができるために、パー
ザの処理をより高速に実行することができる。
形態についてさらに詳細に説明すべく,具体的な実施例
に即して説明する。
NF定義ファイルおよび抽象構文木定義を入力として、
前記本発明の第3の実施の形態を実行した場合について
説明する。
0までは、図6に示した前記第1の実施の形態とまった
く同じ処理を行う。
抽象構文木定義ファイル40に現れるすべてのトークン
を抽象構文トークン一覧表310に登録する。
は、“a”,“b”,“d”,“b”,“d”,“e”,“e”であ
り、抽象構文トークン一覧表310は重複した場合は一
つのみ登録されるので、表中には、“a”,“b”,“d”,
“e”が登録される。
ファイル50に関する処理について処理が行われる。B
NF定義ファイル50のうち、左辺が“a”,“b”,
“c”のものについては、抽象構文トークン一覧表31
0に登録されているので、前記第1の実施の形態と同じ
処理を行うことになる。
e1;”についての処理について説明する。
前記第1の実施の形態と同様の処理が行われる。
ションコード生成の前処理が行われる(ステップA39
0)。
図14を参照して詳細に説明する。
“f”に当たるトークンが抽象構文トークン一覧表31
0に存在するかどうかを検査する(ステップC10)。
覧表310に存在しない。そこで、コード生成器320
は、「本左辺に対するBNF構文木に相当するノードが
ないことを示すnullを返す。」というコードを生成する
(ステップC20)。
“f:e1”についても“e:e1”と同様の処理を行う。
る処理が終了する。
NF左辺について処理が終えているので、ステップA4
0に進み、以降、前記第1の実施の形態と同様の処理を
行う。
施の形態について図面を参照して詳細に説明する。
ーザ生成器プリプロセッサ60の構成を示す図である。
図16を参照すると、本発明の第4の実施の形態は、前
記第2の実施の形態の構成に加えて、抽象構文トークン
一覧表310を備えている。また、コード生成器110
がコード生成器320に置き換わっている。さらに、抽
象構文木定義パーザ80が抽象構文木定義パーザ380
に置き換わっている。
機能を有する。
3の実施の形態の抽象構文トークン一覧表310と同一
である。コード生成器320は、前記第3の実施の形態
のコード生成器320と同一である。抽象構文木定義パ
ーザ380は、前記第3の実施の形態の抽象構文木定義
パーザ380と同一である。
理フローを示す流れ図である。図16及び図17を参照
して、本発明の第4の実施の形態の全体の動作について
詳細に説明する。
ップA80までは、図11に示した前記第2の実施の形
態のステップA10からA80までと同じ処理が行われ
る。また、ステップA390については、図13及び図
14に示した前記第3の実施の形態のステップA390
と同一の処理が行われる。
果について説明する。
の実施の形態の作用効果に加えて、前記第2の実施の形
態と前記第3の実施の形態の作用効果を併せ持つ。つま
り、前記第1の実施の形態の効果に加えて、本実施の形
態では、不正な抽象構文木定義ファイルの内容を予め検
査するために、パーザ開発者は早期に抽象構文木定義フ
ァイルの過ちに気づくことができ、正しいパーザを作成
する一助とすることができる。また、本実施の形態で
は、コード生成器320が抽象構文トークン一覧表31
0を参照することにより、生成されたパーザが、不要な
BNF構文木を作成しない構成になっているため、パー
ザが動作中にプログラム実行手段20が使用する作業メ
モリ領域を、前記第1の実施の形態よりも削減すること
ができる。
文木を作成する処理を減らすことができるために、パー
ザの処理をより高速に実行することができる。
形態についてさらに詳細に説明すべく、具体的な実施例
に即して説明する。
BNF定義ファイルおよび抽象構文木定義を入力とし
て、本発明の第4の実施の形態を実行した場合について
説明する。この場合、前記第3の実施の形態で説明した
動作と同様の動作を行い、パーザ生成器プリプロセッサ
60は、同じアクション付きBNF定義ファイル120
を出力する。
ぞれ示したBNF定義ファイルおよび抽象構文木定義フ
ァイルを入力として、パーザ生成器プリプロセッサ60
を起動した場合について説明する。この場合、前記第2
の実施の形態と同様に動作し、パーザ生成器プリプロセ
ッサ60は異常停止をする。
記記載の効果を奏する。
アクション付きBNF定義ファイルを記述するより容易
に、BNF定義ファイルおよび抽象構文木定義ファイル
を記述することができる、ということである。
ン付きBNF定義ファイル中の手続き的記述であるアク
ションの代わりに、非手続き的な記述である抽象構文木
定義ファイルをパーザ開発者は記述するだけで済む構成
としたためである。
力ファイルからパーザを生成できる、ということにあ
る。
ション部分に比べて、非手続き的記述である抽象構文木
定義は、記述される行数は、少なくて済む、からであ
る。
とほぼ一致した表現形態で入力することができる、とい
うことにある。
木定義ファイルの内容を、抽象構文木の仕様と同様に記
述できるようにしためである。
ロック図である。
示すブロック図である。
ある。
めの流れ図である。
めの流れ図である。
めの流れ図である。
めの図であり、(A)はBNF定義ファイル入力サンプ
ル、(B)は抽象構文木定義ファイル入力サンプルを示
す図である。
す示すブロック図である。
ための流れ図である。
す示すブロック図である。
ための流れ図である。
ため流れ図である。
図であり、(A)はBNF定義ファイル入力サンプル、
(B)は抽象構文木定義ファイル入力サンプルを示す図
である。
す示すブロック図である。
ための流れ図である。
示す示すブロック図である。
Claims (11)
- 【請求項1】抽象構文木定義ファイルを入力して構文解
析し、前記抽象構文木定義ファイル内のすべての抽象構
文木定義規則について左辺をキーとし、右辺規則を、記
憶装置内の抽象構文一覧表に登録する手段と、 BNF定義ファイルを入力し、前記BNF定義ファイル
をBNF規則毎に構文解析し、前記記憶装置内のBNF
規則格納表に格納し、前記BNF規則の左辺と同一の左
辺を有する抽象構文木定義規則の左辺を有する抽象構文
木定義規則の右辺式を前記抽象構文規則一覧表から取得
し、前記取得した抽象構文木定義規則の右辺式を、表形
式で前記記憶装置内の右辺式一覧表に格納するBNFパ
ーザと、 前記BNFパーザから受け取ったBNF規則をアクショ
ン付きBNF定義ファイルのBNF部分として出力する
とともに、BNF規則毎に前記BNF規則の左辺に対応
する具象構文木ノードを生成し、作成済みの下位の具象
構文木とつなぐプログラムコードと、前記左辺を表す抽
象構文木ノードを生成するプログラムコードと、前記右
辺式一覧表から共通の左辺の値を有する抽象構文規則右
辺式を得、前記抽象構文規則右辺式のシンボルパスごと
に、具象構文木を辿りシンボルパス内の右辺と対応する
前記具象構文木内の具象構文木ノードを得るプログラム
コードと、得た前記具象構文木ノードに付与された抽象
構文木ノードを取り出し、前記抽象構文木ノードを子と
し前記左辺を表す前記抽象構文木ノードをつなぎ、抽象
構文木を構成するプログラムコードと、前記左辺を表す
前記抽象構文木ノードを、前記左辺を表す前記具象構文
木ノードに付与するプログラムコードとを、生成し、前
記アクション付き定義ファイルのアクション部とするコ
ード生成手段と、 を備えたことを特徴とするパーザプリプロセッサシステ
ム。 - 【請求項2】抽象構文木左辺をキーとし、右辺規則が検
索対象とされる抽象構文規則の一覧を格納する抽象構文
一覧表と、 入力した抽象構文木定義ファイルを構文解析し、前記抽
象構文木定義ファイルの内容に従い、抽象構文木定義規
則の左辺をキーとして右辺規則を前記抽象構文一覧表に
登録する抽象構文木定義パーザと、 入力したBNF定義ファイルの内容に従い、前記抽象構
文一覧表から抽象構文規則の右辺式を取り出すBNFパ
ーザと、 前記BNFパーザが取り出した抽象構文規則の右辺式を
表形式で記憶する一覧表である右辺式一覧表と、前記BNFパーザから受け取ったBNF規則をアクショ
ン付きBNF定義ファイルのBNF部分として出力する
とともに、BNF規則毎に前記BNF規則の左辺値に対
応する具象構文木ノードを生成し、作成済みの下位の具
象構文木とつなぐプログラムコードを生成し、もし前記
抽象構文トークン一覧表にBNF規則左辺と同じ値があ
るときに限り前記左辺を表す抽象構文木ノードを生成す
るプログラムコードを生成し、前記右辺式一覧表から共
通の左辺の値を有する抽象構文木右辺式を得、前記抽象
構文木右辺式のシンボルパスごとに具象構文木を辿りシ
ンボルパス内の右辺と対応する前記具象構文木内の具象
構文木ノードを得るプログラムコードを生成し、得た前
記具象構文木ノードに付与された抽象構文木ノードを取
り出し、前記抽象構文木につなぎ抽象構文木を構成する
プログラムコードを生成し、前記左辺を表す前記具象構
文木ノードに前記左辺を表す前記抽象構文木ノードを付
与するプログラムコードを生成し、前記左辺に対応する
前記具象構文木ノードを生成し下位具象構文木とつなぐ
前記プログラムコードと、前記左辺に対応する前記抽象
構文木ノードを生成する前記プログラムコードと、前記
具象構文木ノードを得る前記プログラムコードと、前記
具象構文木ノードに付与された前記抽象構文木ノードを
前記左辺に対応する前記抽象構文木ノードにつなぐ前記
プログラムコードと、前記左辺に対応する前記抽象構文
木ノードを前記左辺に対応する前記抽象構文木ノードに
付与する前記プログラムコードを前記アクション付き定
義ファイルのアクション部とする コード生成手段と、 を備えたことを特徴とするパーザ生成器プリプロセッサ
システム。 - 【請求項3】抽象構文左辺をキーとし、右辺規則が検索
対象とされる、抽象構文規則の一覧を格納する抽象構文
一覧表と、 入力した抽象構文木定義ファイルを構文解析し、前記抽
象構文木定義ファイルの内容に従い抽象構文木定義規則
の左辺をキーとして、右辺規則を前記抽象構文一覧表に
登録する抽象構文木定義パーザと、 入力したBNF定義ファイルの内容に従い、前記抽象構
文一覧表から抽象構文規則の右辺式を取り出し、右辺式
一覧表およびBNF規則格納表を埋め、その際、前記右
辺式一覧表に登録する要素の数を検査し、0個の場合に
は、処理を停止する機能を有するBNFパーザと、 前記BNFパーザによる抽象構文規則の右辺式を記憶す
る一覧表である前記右辺式一覧表と、 前記BNFパーザが構文解析したBNF規則を一つ格納
する前記BNF規則格納表と、前記BNFパーザから受け取ったBNF規則をアクショ
ン付きBNF定義ファイルのBNF部分として出力する
とともに、BNF規則毎に前記BNF規則の左辺値に対
応する具象構文木ノードを生成し、作成済みの下位の具
象構文木とつなぐプログラムコードを生成し、もし前記
抽象構文トークン一覧表にBNF規則左辺と同じ値があ
るときに限り前記左辺を表す抽象構文木ノードを生成す
るプログラムコードを生成し、前記右辺式一覧表から共
通の左辺の値を有する抽象構文木右辺式を得、前記抽象
構文木右辺式のシンボルパスごとに具象構文木を辿りシ
ンボルパス内の右辺と対応する前記具象構文木内の具象
構文木ノードを得るプログラムコードを生成し、得た前
記具象構文木ノードに付与された抽象構文木ノードを取
り出し、前記抽象構文木につなぎ抽象構文木を構成する
プログラムコードを生成し、前記左辺を表す前記具象構
文木ノードに前記左辺を表す前記抽象構文木ノードを付
与するプログラムコードを生成し、前記左辺に対応する
前記具象構文木ノードを生成し下位具象構文木とつなぐ
前記プログラムコードと、前記左辺に対応する前記抽象
構文木ノードを生成する前記プログラムコードと、前記
具象構文木ノードを得る前記プログラムコードと、前記
具象構文木ノードに付与された前記抽象構文木ノードを
前記左辺に対応する前記抽象構文木ノードにつなぐ前記
プログラムコードと、前記左辺に対応する前記抽象構文
木ノードを前記左辺に対応する前記抽象構文木ノードに
付与する前記プログラムコードを前記アクション付き定
義ファイルのアクション部とする コード生成手段と、 を備えたことを特徴とするパーザ生成器プリプロセッサ
システム。 - 【請求項4】抽象構文木左辺をキーとし、右辺規則を検
索対象とする抽象構文木規則の一覧を格納する抽象構文
木一覧表と、 入力した抽象構文木定義ファイルを構文解析し、前記抽
象構文木定義ファイルに従い、抽象構文木定義規則の左
辺をキーとして、右辺規則を前記抽象構文木一覧表に登
録するとともに、前記抽象構文木定義ファイルに現れる
すべてのトークンを、抽象構文トークン一覧表に登録す
る抽象構文木パーザと、 入力したBNF定義ファイルの内容に従い、前記抽象構
文一覧表から右辺式を取り出し、右辺式一覧表およびB
NF規則格納表を埋めるBNFパーザと、 前記BNFパーザと後述のコード生成手段の一時記憶手
段として使用され、抽象構文規則の右辺式を記憶する一
覧表である前記右辺式一覧表と、 前記BNFパーザが構文解析したBNF規則を格納する
前記BNF規則格納表と、 抽象構文で表れる左辺及び右辺をすべて格納する一覧表
である前記抽象構文トークン一覧表と、 前記右辺式一覧表、前記BNF規則格納表、および前記
抽象構文トークン一覧表を参照して、前記BNFパーザ
から受け取ったBNF規則をアクション付きBNF定義
ファイルのBNF部分として出力するとともに、BNF
規則毎に前記BNF規則の左辺値に対応する具象構文木
ノードを生成し、作成済みの下位の具象構文木とつなぐ
プログラムコードを生成し、もし前記抽象構文トークン
一覧表にBNF規則左辺と同じ値があるときに限り前記
左辺を表す抽象構文木ノードを生成するプログラムコー
ドを生成し、前記右辺式一覧表から共通の左辺の値を有
する抽象構文木右辺式を得、前記抽象構文木右辺式のシ
ンボルパスごとに具象構文木を辿りシンボルパス内の右
辺と対応する前記具象構文木内の具象構文木ノードを得
るプログラムコードを生成し、得た前記具象構文木ノー
ドに付与された抽象構文木ノードを取り出し、前記抽象
構文木につなぎ抽象構文木を構成するプログラムコード
を生成し、前記左辺を表す前記具象構文木ノードに前記
左辺を表す前記抽象構文木ノードを付与するプログラム
コードを生成し、前記左辺に対応する 前記具象構文木ノ
ードを生成し下位具象構文木とつなぐ前記プログラムコ
ードと、前記左辺に対応する前記抽象構文木ノードを生
成する前記プログラムコードと、前記具象構文木ノード
を得る前記プログラムコードと、前記具象構文木ノード
に付与された前記抽象構文木ノードを前記左辺に対応す
る前記抽象構文木ノードにつなぐ前記プログラムコード
と、前記左辺に対応する前記抽象構文木ノードを前記左
辺に対応する前記抽象構文木ノードに付与する前記プロ
グラムコードを前記アクション付き定義ファイルのアク
ション部とするコード生成手段と、 を備えたことを特徴とするパーザ生成プリプロセッサシ
ステム。 - 【請求項5】抽象構文左辺をキーとし、右辺規則を検索
対象とする抽象構文規則の一覧を格納する抽象構文一覧
表と、 入力した抽象構文木定義ファイルを構文解析し、前記抽
象構文木定義ファイルの内容に従い抽象構文木定義規則
の左辺をキーとして、右辺規則を前記抽象構文一覧表に
登録するとともに、前記抽象構文木定義ファイルに現れ
るすべてのトークンを抽象構文トークン一覧表に登録す
る抽象構文木定義パーザと、 入力したBNF定義ファイルの内容に従い、前記抽象構
文一覧表から抽象構文規則の右辺式を取り出し、右辺式
一覧表およびBNF規則格納表を埋め、その際、前記右
辺式一覧表に登録する要素の数を検査し、0個の場合に
は、処理を停止する機能を有するBNFパーザと、 前記BNFパーザとコード生成手段の一時記憶手段とし
て使用され、抽象構文規則の右辺式を記憶する一覧表で
ある前記右辺式一覧表と、 前記BNFパーザが構文解析したBNF規則を一つ格納
する前記BNF規則格納表と、 抽象構文規則で現れる左辺および右辺をすべて格納する
一覧表である前記抽象構文トークン一覧表と、 前記右辺式一覧表、前記BNF規則格納表、および前記
抽象構文トークン一覧表を参照して、前記BNFパーザ
から受け取ったBNF規則をアクション付きBNF定義
ファイルのBNF部分として出力するとともに、BNF
規則毎に前記BNF規則の左辺値に対応する具象構文木
ノードを生成し、作成済みの下位の具象 構文木とつなぐ
プログラムコードを生成し、もし前記抽象構文トークン
一覧表にBNF規則左辺と同じ値があるときに限り前記
左辺を表す抽象構文木ノードを生成するプログラムコー
ドを生成し、前記右辺式一覧表から共通の左辺の値を有
する抽象構文木右辺式を得、前記抽象構文木右辺式のシ
ンボルパスごとに具象構文木を辿りシンボルパス内の右
辺と対応する前記具象構文木内の具象構文木ノードを得
るプログラムコードを生成し、得た前記具象構文木ノー
ドに付与された抽象構文木ノードを取り出し、前記抽象
構文木につなぎ抽象構文木を構成するプログラムコード
を生成し、前記左辺を表す前記具象構文木ノードに前記
左辺を表す前記抽象構文木ノードを付与するプログラム
コードを生成し、前記左辺に対応する前記具象構文木ノ
ードを生成し下位具象構文木とつなぐ前記プログラムコ
ードと、前記左辺に対応する前記抽象構文木ノードを生
成する前記プログラムコードと、前記具象構文木ノード
を得る前記プログラムコードと、前記具象構文木ノード
に付与された前記抽象構文木ノードを前記左辺に対応す
る前記抽象構文木ノードにつなぐ前記プログラムコード
と、前記左辺に対応する前記抽象構文木ノードを前記左
辺に対応する前記抽象構文木ノードに付与する前記プロ
グラムコードを前記アクション付き定義ファイルのアク
ション部とするコード生成手段と、 を備えたことを特徴とするパーザ生成器プリプロセッサ
システム。 - 【請求項6】(a)抽象構文パーザは、抽象構文木定義
ファイルを読み込み、その内容に対応した抽象構文木定
義規則を生成し、 (b)生成した前記抽象構文木定義規則の左辺をキーと
し、右辺規則を、抽象構文一覧表に登録し、 (c)BNFパーザでは、BNF定義ファイルを読み込
み、左辺ごとにパーズ(構文解析)し、 (d)左辺および文字列“::=”を、アクション付き
BNF定義ファイルに、BNF文法規則の一部として出
力し、 (e)BNF規則を一つパーズし、同じ左辺を有する抽
象構文木定義規則を、前記抽象構文一覧表から検索し
て、抽象構文木定義規則の右辺規則を得、 (f)BNF右辺式を、アクション付きBNF定義ファ
イルに、BNF文法規則の一部として出力し、 (g)前記右辺式一覧表の内容を空白にし、 (h)前記BNF右辺式が含む抽象構文木定義規則右辺
式を選び出し、右辺式一覧表に登録し、 つづいて、コード生成器において、 (i)BNF左辺に相当する構文木ノードを生成する、 (j)左辺ノードに、BNF規則右辺対に相当するノー
ドを枝として追加する、 (k)抽象構文ノードを生成する、 (l)シンボルパスの右辺対の連なりに応じて、BNF
構文木ノードの枝を辿ってシンボルパスが指し示すBN
F構文木ノードを得る、 (m)取得した前記BNF構文木ノードに付随している
抽象構文木ノードを、前記BNF構文木から取り出し、
前記(k)で生成された前記抽象構文木ノードの枝の先
に付加する、 (n)前記BNF構文木のノードに、前記(k)で生成
された前記抽象構文木のノードを付加する、 (o)BNF定義の開始文法規則の戻り値から、抽象構
文部分を取り出す、 前記(i)〜(o)の各コードを生成する、 ことを特徴とするパーザ生成器用プリプロセス方法。 - 【請求項7】前記右辺一覧表に登録されている抽象構文
の右辺式の数を調べ、抽象構文右辺規則が存在し、か
つ、前記右辺一覧表に登録されている右辺式の数が0な
らば処理を中断し、異常停止する、 ことを特徴とする請求項6記載のパーザ生成器用プリプ
ロセス方法。 - 【請求項8】前記コード生成器が、BNF左辺と同じト
ークンが抽象構文トークン一覧表に存在するか否かを検
査し、存在しなければ、 前記BNF左辺に対するBNF構文木に相当するノード
がないことを示すヌル(null)を返すコードを生成す
る、ことを特徴とする請求項6又は7記載のパーザ生成
器用プリプロセス方法。 - 【請求項9】(a)抽象構文木定義ファイルを読み込み
該抽象構文木定義ファイルの内容に対応した抽象構文木
定義を生成する処理と、 (b)生成した抽象構文木定義の左辺をキーとし、右辺
規則を抽象構文一覧表に登録する処理と、 (c)BNF定義ファイルを左辺ごとにパーズする処理
と、 (d)左辺および文字列“::=”を、アクション付き
BNF定義ファイルに、BNF文法規則の一部として、
出力する処理と、 (e)BNF規則を一つパーズし、同じ左辺を有する抽
象構文規則を、前記抽象構文一覧表から検索し、前記抽
象構文規則の右辺規則を得る処理と、 (f)BNF右辺式を、アクション付きBNF定義ファ
イルに、BNF文法規則の一部として、出力する処理
と、 (g)右辺式一覧表の内容を空白にする処理と、 (e)BNF右辺式が含む抽象構文規則の右辺式を選び
出し、前記右辺式一覧表に登録する処理と、 (f)BNF左辺に相当する構文木ノードを生成する、 (g)左辺ノードに、BNF規則右辺対に相当するノー
ドを枝として追加する, (h)抽象構文ノードを生成する、 (i)シンボルパスの右辺対の連なりに応じてBNF構
文木ノードの枝を手繰ってシンボルパスが指し示すBN
F構文木ノードを得る、 (j)得たBNF構文木ノードに添付している抽象構文
木ノードをBNF構文木から取り出し、抽象構文ノード
の枝の先に付加する、 (k)BNF構文木のノードに抽象構文木のノードを添
付する、 (l)BNF定義の開始文法規則の戻り値から、抽象構
文部分を取り出す、 前記(f)乃至(l)のコードを生成する処理と、 を、コンピュータ上で実行させるためのプログラムを記
録した記録媒体。 - 【請求項10】請求項9に記載の記録媒体において、 前記右辺一覧表に登録されている抽象構文の右辺式の数
を調べ、抽象構文右辺規則が存在し、かつ、前記右辺一
覧表に登録されている右辺式の数が0ならば処理を中断
し、異常停止する処理、を前記コンピュータ上で実行さ
せるためのプログラムを記録した記録媒体。 - 【請求項11】請求項9又は10に記載の記録媒体にお
いて、 BNF左辺と同じトークンが抽象構文トークン一覧表に
存在するかを検査し、存在しなければ、前記BNF左辺
に対するBNF構文木に相当するノードがないことを示
すヌル(null)を返すコードを生成する処理、を前
記コンピュータ上で実行させるためのプログラムを記録
した記録媒体。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP28069298A JP3194372B2 (ja) | 1998-10-02 | 1998-10-02 | パーザ生成器プリプロセッサシステム、パーザ生成器用プリプロセス方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP28069298A JP3194372B2 (ja) | 1998-10-02 | 1998-10-02 | パーザ生成器プリプロセッサシステム、パーザ生成器用プリプロセス方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
JP2000112768A JP2000112768A (ja) | 2000-04-21 |
JP3194372B2 true JP3194372B2 (ja) | 2001-07-30 |
Family
ID=17628624
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP28069298A Expired - Fee Related JP3194372B2 (ja) | 1998-10-02 | 1998-10-02 | パーザ生成器プリプロセッサシステム、パーザ生成器用プリプロセス方法 |
Country Status (1)
Country | Link |
---|---|
JP (1) | JP3194372B2 (ja) |
Families Citing this family (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8954940B2 (en) | 2012-10-12 | 2015-02-10 | International Business Machines Corporation | Integrating preprocessor behavior into parsing |
CN112749552B (zh) * | 2021-01-29 | 2023-11-21 | 北京小米松果电子有限公司 | 文本转换方法、装置、存储介质及电子设备 |
-
1998
- 1998-10-02 JP JP28069298A patent/JP3194372B2/ja not_active Expired - Fee Related
Non-Patent Citations (2)
Title |
---|
情報処理,1991年3月,第32巻第3号,p.282−294 |
情報処理,1994年7月,第35巻第7号,p.651−657 |
Also Published As
Publication number | Publication date |
---|---|
JP2000112768A (ja) | 2000-04-21 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
Klint et al. | EASY Meta-programming with Rascal | |
US7934205B2 (en) | Restructuring computer programs | |
JPS6375835A (ja) | 目的コ−ド、プログラム・リスト及び設計文書を生成する装置 | |
Hunt et al. | Extensible language-aware merging | |
US10891117B2 (en) | Method and system for using subroutine graphs for formal language processing | |
JP2008299723A (ja) | プログラム検証方法、プログラム検証装置 | |
Lerner et al. | Combining form and function: Static types for JQuery programs | |
US7065753B2 (en) | Method, system and computer program for syntax validation | |
US20040010780A1 (en) | Method and apparatus for approximate generation of source code cross-reference information | |
JP3194372B2 (ja) | パーザ生成器プリプロセッサシステム、パーザ生成器用プリプロセス方法 | |
Raad et al. | DOM: specification and client reasoning | |
Hughes et al. | Polish parsers, step by step | |
Vinju | Analysis and transformation of source code by parsing and rewriting | |
AT&T | ||
Crichton et al. | A Core Calculus for Documents: Or, Lambda: The Ultimate Document | |
Ribeiro et al. | A mechanized textbook proof of a type unification algorithm | |
Bülow | Proof visualization for the lean 4 theorem prover | |
Groote et al. | Tutorial and reference guide for the CRL toolset version 1.0 | |
Grigorev et al. | String-embedded language support in integrated development environment | |
JP3584204B2 (ja) | 原始プログラム自動変換装置 | |
Kats et al. | Interactive disambiguation of meta programs with concrete object syntax | |
Brady | The Idris Programming Language: Implementing Embedded Domain Specific Languages with Dependent Types | |
Van Steenbergen et al. | Generic selections of subexpressions | |
Seipel et al. | JSquash: source code analysis of embedded database applications for determining SQL statements | |
Vinju | A Type-driven Approach to Concrete Meta Programming |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A01 | Written decision to grant a patent or to grant a registration (utility model) |
Free format text: JAPANESE INTERMEDIATE CODE: A01 Effective date: 20010501 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20090601 Year of fee payment: 8 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20100601 Year of fee payment: 9 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20100601 Year of fee payment: 9 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20110601 Year of fee payment: 10 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20110601 Year of fee payment: 10 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20120601 Year of fee payment: 11 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20120601 Year of fee payment: 11 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20130601 Year of fee payment: 12 |
|
LAPS | Cancellation because of no payment of annual fees |