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
Application number
JP28069298A
Other languages
English (en)
Other versions
JP2000112768A (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.)
NEC Corp
Original Assignee
NEC Corp
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by NEC Corp filed Critical NEC Corp
Priority to JP28069298A priority Critical patent/JP3194372B2/ja
Publication of JP2000112768A publication Critical patent/JP2000112768A/ja
Application granted granted Critical
Publication of JP3194372B2 publication Critical patent/JP3194372B2/ja
Anticipated expiration legal-status Critical
Expired - Fee Related legal-status Critical Current

Links

Landscapes

  • Devices For Executing Special Programs (AREA)

Description

【発明の詳細な説明】
【0001】
【発明の属する技術分野】本発明はパーザ生成システ
ム、パーザ生成方法およびパーザ生成用プログラムを記
録した記録媒体に関し、特に手続き的な処理プログラム
を記述せずにパーザを容易に記述できるパーザ生成シス
テム、パーザ生成方法およびパーザ生成用プログラムを
記録した記録媒体に関する。
【0002】
【従来の技術】定義した所望の文法に従い字句列等を構
文解析するパーザ(構文解析器)を自動生成するパーザ
生成システムとして、例えば「インフォメーション・ア
ンド・コントロール、第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による論
文に示すようにパーザを作成するためのツールとして用
いられている。
【0003】図18に示すように、この従来のパーザ生
成システムは、パーザ開発者が、文法を記述したBNF
(Backus Nauer Form)定義ファイル50と、パーザ
開発者がテキストエディタ170を用いて、文法に応じ
た動作を定める「アクション」と呼ぶプログラム記述を
BNF定義ファイル50に追記したアクション付きBN
F定義ファイル120と、アクション付きBNF定義フ
ァイル120を入力としパーザのプログラムファイルを
生成するパーザ生成器130と、から構成されている。
【0004】このような構成を有する従来のパーザ生成
システムは、つぎのように動作する。すなわち、パーザ
開発者はまず、パーズしたい対象の入力文法を定め、こ
れをBNF定義ファイル50として記述する。次にパー
ズの結果として生成したい抽象構文木を想定し、パーザ
開発者がテキストエディタ170を使って、手続き的処
理を記述したプログラムであるアクションをBNF規則
の右辺式ごとに追記し、アクション付きBNF定義ファ
イル120とする。
【0005】そしてアクション付きBNF定義ファイル
120を入力とするパーザ生成器130を起動し、パー
ザの動作を記述したプログラムファイル140を生成す
る。
【0006】このプログラムファイルをC言語コンパイ
ラなどのコンパイラ150でコンパイルすると、パーザ
の実行ファイル160が生成される。
【0007】プログラム実行手段20が実行ファイル1
60を起動する。プログラム実行手段20は、BNF定
義ファイル50で定義された文法に従った入力ファイル
10を読み込み、入力ファイル10をパーズし、抽象構
文木を生成し、それを抽象構文データベース30に格納
するパーザとして動作する。
【0008】パーザ生成器の動作の方式は、上記LAL
R構文解析方法に基づくものが多く、一部には、SLA
方式、LL(1)方式をとるものもある。
【0009】
【発明が解決しようとする課題】しかしながら、従来の
パーザ生成システムは、下記記載の問題点を有してい
る。
【0010】第1の問題点は、パーザの開発が困難であ
る、ということである。
【0011】その理由は、従来のシステムでは、アクシ
ョンを手続き的処理のプログラムとして記述しているた
めに、C言語などのプログラミング言語に精通すること
がパーザ開発者に要求されている、ためである。宣言的
な記述であるBNF定義部分に対し、アクション部分の
記述は、アクションを手続き的に記述する必要があるた
め、その作成は難しい。
【0012】また、手続き的記述であるアクション部分
のソースコード量は一般に大きい。例えば、ITU X.271
で定められているASN.1文法のパーザを作成するための
アクション付きBNF定義ファイルのソースコードは、
BNF規則が計298行であるのに対して、アクション部
分は計1843行である。
【0013】第2の問題点は、生成する抽象構文木の仕
様と、生成されたパーザが生成する抽象構文木の不一致
が発生しやすい、ということである。
【0014】その理由は、アクションの記述が手続き的
であり、抽象構文木の仕様からアクション部分で記述す
る手続きを作成するには隔たりがあるために、パーザ開
発者がアクション部分の記述の作成に際して誤りをおか
しやすいためである。
【0015】したがって本発明は、上記問題点に鑑みて
なされたものであって、その目的は、入力ファイルを作
成を容易化するパーザ生成器プリプロセッサシステム及
び方法を提供することにある。
【0016】本発明の他の目的は、少ない記述量でパー
ザを生成できるパーザ生成器プリプロセッサシステム及
び方法を提供することにある。
【0017】本発明のさらに他の目的は、抽象構文木の
仕様とほぼ一致した表現形態を入力可能とするパーザ生
成器プリプロセッサシステム及び方法を提供することに
ある。
【0018】
【課題を解決するための手段】前記目的を達成する本発
明のパーザ生成器プリプロセッサシステムは、抽象構文
左辺をキーとし、右辺規則を検索対象とする抽象構文規
則の一覧を格納する抽象構文一覧表と、入力した抽象構
文木定義ファイルを構文解析し、前記抽象構文木定義フ
ァイルの内容に従い抽象構文木定義規則の左辺をキーと
して、右辺の規則を前記抽象構文一覧表に登録する抽象
構文木定義パーザと、入力したBNF定義ファイルの内
容に従い、前記抽象構文一覧表から抽象構文規則の右辺
式を取り出すBNFパーザと、前記BNFパーザが取り
出した抽象構文規則の右辺式を表形式で記憶する一覧表
である右辺式一覧表と、前記BNFパーザが構文解析し
たBNF規則を一つ格納するBNF規則格納表と、前記
右辺式一覧表及び前記BNF規則格納表を参照し、アク
ション付きBNF定義ファイルを生成する前記コード生
成手段と、を備える。
【0019】本発明のパーザ生成器用プリプロセス(パ
ーザ生成器の前処理)方法は、(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)の各コードを生成
する、ことを特徴とする。
【0020】
【発明の実施の形態】本発明の実施の形態について説明
する。本発明のパーザ生成器プリプロセッサは、その好
ましい一実施の形態において、図2を参照すると、抽象
構文一覧表(70)と、抽象構文木定義パーザ(80)
と、BNFパーザ(90)と、右辺式一覧表(100)
と、BNF規則格納表(115)と、コード生成器(1
10)とを備え、BNF定義ファイル(50)および抽
象構文木定義ファイル(40)の両ファイルを入力し、
パーザ生成器の入力ファイルであるアクション付きBN
F定義ファイル(120)を生成する。
【0021】また、本発明のパーザ生成器プリプロッサ
は、好ましい別の実施の形態において、図10を参照す
ると、抽象構文一覧表(70)と、抽象構文木定義パー
ザ(80)と、BNFパーザ(210)と、右辺式一覧
表(100)と、BNF規則格納表(115)と、コー
ド生成器(110)と、を備え、正しい抽象構文木定義
ファイル(40)を入力すると、前記一実施の形態と同
様、アクション付きBNF定義ファイル(120)を生
成する。不正な抽象構文木定義ファイル(40)を入力
すると、パーザ生成器プリプロセッサは異常停止する。
【0022】また、本発明のパーザ生成器プリプロセッ
サシステムは、別の実施の形態において、図12を参照
すると、抽象構文一覧表(70)と、抽象構文木定義パ
ーザ(380)と、BNFパーザ(90)と、右辺式一
覧表(100)と、BNF規則格納表(115)と、コ
ード生成器(320)と、抽象構文トークン一覧表(3
10)と、を備え、BNF定義ファイル(50)および
抽象構文木定義ファイル(40)を入力すると、前記一
実施の形態よりも、メモリ効率および速度効率のよいア
クション部を有するアクション付きBNF定義ファイル
(120)を生成する。
【0023】また、本発明のパーザ生成器プリプロセッ
サシステムは、さらに別の実施の形態において、図16
を参照すると、抽象構文一覧表(70)と、抽象構文木
定義パーザ(380)と、BNFパーザ(210)と、
右辺式一覧表(100)と、BNF規則格納表(11
5)と、コード生成器(320)と、抽象構文トークン
一覧表(310)とを備え、正しい抽象構文木定義ファ
イル(40)を入力すると、前記第一実施の形態よりも
メモリ効率および速度効率のよいアクション部を有する
アクション付きBNF定義ファイル(120)を生成す
る。一方、不正な抽象構文木定義ファイル(40)を入
力すると、パーザ生成器プリプロセッサは異常停止す
る。
【0024】次に、本発明の実施の形態について図面を
参照して、詳細に説明する。
【0025】[実施の形態1]図1は、本発明の第1の
実施の形態の構成を示す図である。図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と、を含む。
【0026】図1に示したシステムの動作の概略を説明
すると、パーザ開発者は、BNF定義ファイル50及び
抽象構文木定義ファイル40を記述し、これらを入力と
してパーザ生成器プリプロセッサ60を起動する。パー
ザ生成器プリプロセッサ60は、両ファイルからアクシ
ョン付きBNF定義ファイル120を生成する。生成さ
れたアクション付きBNF定義ファイル120をパーザ
生成器130にかけ、パーザ生成器130は、パーザの
動作を表すプログラムファイル140を生成する。
【0027】このファイル140に対して、コンパイラ
150を起動してコンパイルすることで、パーザ実行フ
ァイル160が作成される。プログラム実行手段20を
使ってパーザ実行ファイル160を実行すると、目的言
語入力ファイル10をパーズし、抽象構文木を抽象構文
木データベース30に格納するパーザが動作することに
なる。
【0028】図2は、本発明の第1の実施の形態におけ
るパーザ生成器プリプロセッサ60の構成を示すブロッ
ク図である。図2を参照すると、抽象構文一覧表70
は、抽象構文の左辺をキーとし、右辺規則を検索対象と
する一覧表である。抽象構文木定義の左辺を与えると、
その右辺規則を得ることができる。
【0029】抽象構文木定義パーザ80は、抽象構文木
定義ファイル40をパーズし、抽象構文一覧表(「抽象
構文木定義一覧表」ともいう)70を、抽象構文木定義
ファイル40の内容に従い埋める。
【0030】BNFパーザ90は、BNF定義ファイル
50の内容に従い、抽象構文一覧表70から右辺式を取
り出し、取り出した右辺式を、右辺式一覧表100およ
びBNF規則格納表115に格納する。
【0031】右辺式一覧表100は、BNFパーザ90
とコード生成器110の一時記憶装置として用いられ、
抽象構文木定義(抽象構文木定義規則)の右辺式を表形
式で記憶する記憶手段である。
【0032】BNF規則格納表115は、BNFパーザ
90がパーズしたBNF規則を一つ一時的に格納する記
憶手段である。
【0033】コード生成器110は、右辺式一覧表10
0およびBNF規則格納表115を参照して、アクショ
ン付きBNF定義ファイル120を生成する。
【0034】図3に、BNF定義ファイル50の文法
(生成規則)の一例を示す。BNF定義ファイル50は
BNF規則の集まりである。
【0035】BNF規則は、一つの左辺と、一つの右辺
規則から構成される。左辺と右辺規則は、記号列“::
=”で区切られる。
【0036】右辺規則は、複数の右辺式から成り立つ。
右辺規則の末尾は記号“;”で終了する。右辺式同士は
記号“│”で区切られる。
【0037】右辺式は、0個、1個もしくは複数個の右
辺と右辺値の組で構成される。この組を「右辺対」と呼
ぶ。
【0038】右辺は、左辺を参照、もしくは入力ファイ
ル10中の文字列を表す。
【0039】右辺値は、同じ右辺式の中で、同じ右辺が
複数個現れたときに、区別するための識別子である。右
辺と右辺値の間は記号“:”で区切られる。
【0040】図4に、抽象構文木定義ファイル40の文
法の一例を示す。
【0041】抽象構文木定義規則は、複数の抽象構文規
則から構成される。
【0042】抽象構文規則は、一つの左辺と、一つの右
辺規則から構成される。左辺と右辺規則は、記号
列“::=”で区切られる。左辺は、BNF定義中に全
く同一の左辺が存在することが必要である。
【0043】右辺規則は、複数の右辺式から成り立つ。
右辺規則の末尾は記号“;”で終了する。右辺式同士は
記号“│”で区切られる。
【0044】右辺式は0個、1個、もしくは複数個の枝
名とシンボルパスの組から構成される。枝名は、抽象構
文木の枝を指し示す識別子である。シンボルパスは1又
は複数の右辺と右辺値の組である右辺対で構成される。
右辺対の間は記号“.”で区切られる。右辺対は、全く
同一の右辺対が、BNF定義中に存在するものとする。
【0045】BNF定義および抽象構文木定義で現れる
左辺および右辺にあたる識別子は「トークン」と呼ばれ
る。
【0046】BNF定義ファイル50の意味は、多くの
参考文献、例えば、佐々政孝によるい「1989年、1
0月刊の「プログラミング言語処理系」(岩波講座ソフ
トウェア科学)の第104頁から105頁の記載が参照
される。
【0047】抽象構文木定義ファイル40の意味を、図
5に示す木状のデータとして示す。図5(A)は、BN
F定義を表す「BNF構文木」と呼ぶデータ構造の一例
を示す図である。木のノードが、BNF規則の左辺に相
当し、そのノードから伸びる枝の先が、BNF定義の右
辺対に相当する。また、そのノードも、他のBNF規則
の左辺であり、その右辺対を枝の先に有する。枝の末端
(リーフ)が、入力ファイル内に含まれる文字列に対応
する。
【0048】一方、図5(B)は、抽象構文木に相当す
る。木のノードが抽象構文規則左辺に相当する。ノード
から延びる枝は識別子として枝名を有する。枝の先に
は、シンボルパスが指し示すノードがついている。その
ノードも、抽象構文木規則左辺であり、枝を有する。抽
象構文左辺はBNF定義の左辺のいずれかであるので、
抽象構文木のノードは、図5(A)に示したBNF構文
のデータ構造のノードのいずれかに対応する。
【0049】抽象構文木ノードがBNF構文木のどのノ
ードに当たるか対応関係を示すのが、シンボルパスであ
る。シンボルパスは抽象構文左辺ノードに対応するBN
F構文木ノードからどのように枝を辿れば、抽象構文木
ノードに対応するBNF構文木のノードに行き着くかを
示す。このようにして、BNF定義ファイル50と抽象
構文木定義ファイル40を用いて抽象構文木を定めるこ
とができる。
【0050】図1および図2に示した手段はそれぞれ概
略つぎのように動作する。
【0051】目的言語入力ファイル10は、パーザに対
する入力であり、BNF定義ファイル50で定義された
文法に従って、その中身が記述されている。
【0052】プログラム実行手段20は、与えられたパ
ーザ実行プログラム160に従って動作する。つまり、
BNF定義ファイル50で定義された文法に正しく従っ
た入力ファイルをパーズし、抽象構文定義ファイル50
で定められた抽象構文木と呼ぶデータ構造を生成するパ
ーザとして振る舞う。
【0053】抽象構文データベース30は、抽象構文木
を一又は複数格納する。検索処理要求に対して、抽象構
文木内の適切なノードを問い合わせ者に返却する。
【0054】BNF定義ファイル50は、パーザが正し
く受理する文法を定める。BNF定義ファイル50の文
法を、図3に示す。このBNF定義ファイル50は、パ
ーザ開発者が記述する。
【0055】抽象構文木定義ファイル40は、パーザが
出力する抽象構文木を定義する。抽象構文木定義ファイ
ルの文法を図4に示す。抽象構文木定義ファイルは、パ
ーザ開発者が記述する。
【0056】パーザ生成器プリプロセッサ60は、BN
F定義ファイル50および抽象構文木定義ファイル40
の両ファイルを入力とし、アクション付きBNF定義フ
ァイル120を生成する。アクション付きBNF定義フ
ァイル120のBNF部分は、BNF定義ファイル50
とまったく同一の内容である。パーザ生成器プリプロセ
ッサ60は、BNF定義ファイル50および抽象構文木
定義ファイル40からアクションを生成し、アクション
付きBNF定義ファイル120とする。
【0057】アクション付きBNF定義ファイル120
は、従来のパーザ生成器の入力であるアクション付きB
NF定義ファイル120とまったく同一である。
【0058】アクション付きBNF定義ファイル120
は、BNF定義部分とBNF定義の右辺式毎に設けられ
たプログラムであるアクション部分とから構成される。
後者は、抽象構文木を構築するプログラムに相当する。
【0059】パーザ生成器130は、従来のシステムの
パーザ生成器130と同一であり、アクション付きBN
F定義ファイル120を入力とし、パーザの動作を表す
プログラムであるプログラムファイル140を生成す
る。
【0060】プログラムファイル140は、パーザの動
作を表すプログラムである。このプログラムファイル
は、C言語やJavaなどの一般的なプログラミング言語で
記述される。
【0061】コンパイラ150は、プログラムファイル
140を記述しているプログラミング言語で記述された
プログラムを、プログラム実行手段20が解釈するパー
ザ実行ファイル160に変換する。
【0062】パーザ実行ファイル160は、プログラム
実行手段20が動作する手順を書いたプログラム実行手
段20が解釈可能なファイルである。
【0063】図2を参照すると、抽象構文一覧表70は
抽象構文木定義をパーズした結果を記録し、抽象構文木
左辺から抽象構文木定義右辺規則を得ることができる一
覧表である。この一覧表はBNFパーザが使用する。
【0064】抽象構文木パーザ80は、抽象構文木定義
ファイル40をパーズし、その内容を抽象構文一覧表7
0に登録する。
【0065】BNFパーザ90は、BNF定義ファイル
50を読み込み、第1の動作として、BNF規則格納表
115にBNF規則を格納する。第2の動作として、B
NF規則の左辺と同じ左辺を持つ抽象構文木定義規則の
右辺規則を得、右辺式一覧表100にそれを登録する。
【0066】コード生成器110は、右辺式ごとに、B
NFパーザ90から受け取ったBNF規則をアクション
付きBNF定義ファイ120ルのBNF部分として出力
する。加えて、右辺式一覧表100から得た、抽象構文
木定義規則の右辺規則を基に、アクション付きBNF定
義ファイル120のアクション部分を生成する。
【0067】次に、図1及び図2のブロック図、図6、
図7及び図8のフローチャートを参照して、本発明の第
1の実施の形態の全体の動作について詳細に説明する。
【0068】まず、抽象構文木パーザ80が抽象構文木
定義ファイル40を読み込み、構文解析を行う(図6の
ステップA10)。
【0069】次に、抽象構文パーザ80は、抽象構文木
定義ファイル40内のすべての抽象構文木定義規則につ
いて、左辺をキーにし、右辺規則を抽象構文一覧表70
に登録する(ステップA20)。
【0070】抽象構文木定義ファイル40のパーズが終
了したら、次に、BNFパーザ90がBNF定義ファイ
ル50をBNF規則ごとにパーズし、得たBNF規則を
BNF規則格納表115に登録する(ステップA3
0)。
【0071】BNF定義ファイル50に、BNF規則が
あれば、BNF規則をパーズするステップA45に進
み、ステップA45からステップA90までの処理を、
左辺がつきるまで行う。左辺式がなければステップA4
0に進む。
【0072】ステップA40では、コード生成器110
は、「BNF定義の開始文法規則の戻り値から抽象構文
部分を取り出す。」というコードを生成し、コード生成
を終了する。
【0073】ステップA45では、コード生成器110
は、左辺および文字列“::=”を、アクション付きB
NF定義ファイル120に、BNF文法規則の一部とし
て、出力する。
【0074】続いて、BNFパーザ90は、BNF規則
左辺と同じ左辺を有する抽象構文規則を、抽象構文一覧
表70から検索し、その抽象構文木規則右辺規則を得る
(ステップA50)。得た右辺規則から右辺式を順次
得、各右辺式ごとに、ステップA65からステップA9
0の一連の処理を行う(ステップA60)。
【0075】もし、右辺式が尽きたら、ステップA45
からA90までの一連の処理を次のBNF規則におい
て、繰り返す。
【0076】まず、コード生成器110は、BNF右辺
式をBNF文法規則の一部として、アクション付きBN
F定義ファイル120に出力する(ステップA65)。
【0077】BNFパーザ90は、右辺式一覧表100
の内容を空白にする(ステップA70)。
【0078】次にBNFパーザ90は、ステップA60
で得た抽象構文木定義規則の右辺式のうち、BNF右辺
式が「含む」抽象構文木定義規則右辺式を選び出し、右
辺式一覧表110に登録する。
【0079】ここで、「含む」とは、抽象構文木定義規
則右辺式に含まれるすべてのシンボルパスについて、B
NF右辺式の右辺対からシンボルパスどおりBNF構文
を辿ることができるノードが存在していることをいう。
【0080】BNF右辺式に含まれる左辺を共有する抽
象構文木定義規則中のすべての抽象構文木定義規則右辺
式について、「含む」か「含まない」か判断し終わった
ら、コード生成器110がアクションコードの生成を行
う(ステップA90)。
【0081】図7及び図8は、図6のステップA90の
アクションコード生成の処理フローを示す流れ図であ
る。
【0082】まず、アクション付きBNF定義ファイル
120のアクション部分として、コード生成器110
は、「BNF定義左辺に相当するBNF構文木のノード
(仮に「a」とする)を生成する。」というコードを生
成する(ステップB10)。
【0083】次にBNF定義の右辺式の中にある右辺対
ごとに繰り返し、以下のステップB30からステップB
40の処理を行う。
【0084】もし、右辺式中のすべての右辺対について
処理を終えたならば、ステップB50の処理に進む。
【0085】コード生成器110は、アクション付きB
NF定義ファイル120のアクション部分として、「ノ
ードaに、BNF規則右辺対に相当するBNF構文木ノ
ード(仮に「b」とする)を枝として追加する。」とい
う動作を行うコードを生成する(ステップB30)。
【0086】そして、次のBNF右辺式の右辺対に進
み、ステップB30を繰り返す(ステップB40)。
【0087】コード生成器110は、アクション付きB
NF定義ファイル120のアクション部分として、「抽
象構文ノードAを生成する。」という動作を行うコード
を生成する(ステップB50)。
【0088】コード生成器110は、右辺式一覧表10
0から抽象構文木定義規則の右辺式を一つずつ取り出
し、その右辺式の個数分だけ以下のステップB80から
ステップB120の処理を行う(ステップB70)。
【0089】コード生成器110が、すべての右辺式に
ついて処理を終えていたら、ステップB130の処理を
行う。
【0090】コード生成器110は、取り出した抽象構
文木定義の右辺式からシンボルパスを一つずつ取り出
し、それぞれについてステップB90からステップB1
10の一連の処理を繰り返し行う(ステップB80)。
【0091】コード生成器110が、右辺式中のすべて
のシンボルパスについてステップB90からステップB
110の一連の処理を終えたならば、ステップB120
に進む。
【0092】コード生成器110は、アクション付きB
NF定義ファイル120のアクション部分として、「シ
ンボルパスの右辺対の連なりに応じてBNF構文木ノー
ド(例えば「b」とする)の枝を手繰ってシンボルパス
が指し示すBNF構文木ノード(仮にこれを「c」とす
る)を得る手続きをする。」という動作を行うコードを
生成する(ステップB90)。
【0093】続いて、コード生成器110は、アクショ
ン付きBNF定義ファイル120のアクション部分とし
て、「BNF構文木のノードcに添付している抽象構文
木のノード(仮にこれをCとする)をcから取り出し、抽
象構文ノードAの枝の先にCをくっつける」という動作
を行うコードを生成する。このとき、枝名はシンボルパ
スに対応する枝名とする(ステップB100)。
【0094】そして、抽象構文木規則の右辺式中のシン
ボルパスの一つについて処理が終了したので、右辺式中
の次のシンボルパスについて同じ処理を繰り返す(ステ
ップB110)。
【0095】抽象構文木定義規則の右辺式において、す
べてのシンボルパスについての処理が終了したら、抽象
構文木定義規則右辺規則の次の右辺式を取り出し、ステ
ップB80からステップB120の処理を行う(ステッ
プB120)。
【0096】右辺式一覧表100において登録されたす
べての右辺式について、ステップB80からステップB
120の処理が終了したら、コード生成器110は、ア
クション付きBNF定義ファイル120のアクション部
分として、「BNF構文木のノードaに抽象構文木のノ
ードAを添付する。」という動作を行うコードを生成す
る(図8のステップB130)。
【0097】以上のステップB10からB130の一連
の処理により、アクション付きBNF定義ファイル12
0のアクション部分のコード生成用副処理を終え、BN
F右辺式ごとに、次のような処理を行うアクション部分
のコードが生成される。
【0098】BNF左辺に相当する構文木ノード(仮に
「a」とする)を生成する。
【0099】ノードaに、BNF規則右辺対に相当する
ノード(仮に「b」とする)を枝として追加する。この
追加はBNF右辺式中の右辺対の数だけ行う。
【0100】抽象構文ノードAを生成する。
【0101】シンボルパスの右辺対の連なりに応じてB
NF構文木ノード(例えば「b」)の枝を手繰ってシン
ボルパスが指し示すBNF構文木ノード(仮に、これを
「c」とする)を得る。この処理は、BNF規則右辺式
に含まれる左辺を、BNF右辺式と共有する抽象構文右
辺式が有するシンボルパスの数だけ行う。
【0102】得られたBNF構文木ノードcに添付して
いる抽象構文木ノード(仮にこれを「C」とする)をcか
ら取り出し、抽象構文ノードAの枝の先にCをくっつけ
る。この処理は、BNF規則右辺式に含まれる左辺を、
BNF右辺式と共有する抽象構文右辺式が有するシンボ
ルパスの数だけ行う。
【0103】BNF構文木aに抽象構文木定義Aを添付
する。
【0104】次に、本発明の第1の実施の形態の効果に
ついて説明する。
【0105】本発明の第1の実施の形態においては、パ
ーザ開発者が記述するものは、BNF定義ファイル50
と抽象構文木定義ファイル40である。これらは、それ
ぞれ図4、図5に示すように、手続き的な処理を記述す
る必要がないため、プログラミングの知識のないパーザ
開発者でも、容易にパーザの開発が可能である。
【0106】また、本発明の第1の実施の形態におい
て、さらに、抽象構文木定義ファイル40の内容が、パ
ーザが出力すべき抽象構文木の仕様に近い形で記述でき
るために、仕様とパーザプログラムの不一致を防ぐこと
ができる。
【0107】また、本発明の第1の実施の形態では、さ
らに、アクションの手続きを記述するよりも抽象構文木
を記述した方がパーザ開発者の作成する入力行数が少な
くて済む。例えば、ITU X.271で定められているASN.1
文法のパーザを作成するためのアクション付きBNF定
義ファイルの行数は2330行に対して、本実施の形態
では、BNF定義ファイル50と抽象構文木定義ファイ
ル40を合わせて859行である。
【0108】[実施例1]本発明の第1の実施の形態に
ついてさらに詳細に説明すべく、具体的な実施例に即し
て説明する。
【0109】図9(A)に示すBNF定義ファイル50
と、図9(B)に示す抽象構文木定義ファイル40を入
力とした場合のパーザ生成器プリプロセッサ60の動作
について説明する。
【0110】まず、抽象構文パーザ80が、抽象構文木
定義ファイル40を読み込み、その抽象構文木を作成す
る(図6のステップA10)。
【0111】この場合、抽象構文木定義中に含まれる抽
象構文木定義規則は一つである。これを、抽象構文一覧
表70に登録する(ステップA20)。
【0112】このとき、キーは、左辺“a”であり、右
辺規則は、 “(b1)b:e1.d:e1(b2)b:e1.d:e1.e:e1(b3)c:e2
│;” である。
【0113】次に、BNFパーザ90がBNF定義ファ
イル50をパーズし、その左辺ごとに処理を行う(ステ
ップA30)。
【0114】まず左辺“a”について処理を行う。すな
わちコード生成器110は、左辺“a”および文字
列“::=”を、アクション付きBNF定義ファイル1
20に出力する(ステップA45)。このとき、BNF
パーザ90は、左辺“a”および、右辺規則“b:e1 c:
e2;”を、BNF規則格納表110に登録する。
【0115】続いて、BNFパーザ90は、抽象構文一
覧表70から左辺“a”を有する抽象構文木定義の右辺
規則、 “(b1) b:e1.d:e1 (b2) b:e1.d:e1.e:e1 (b3) c:
e2│;” を得る(ステップA50)。
【0116】BNF右辺規則から右辺式を順次得る(ス
テップA60)。
【0117】最初は、“b:e1 c:e2”である。この右
辺式を、アクション付きBNF定義ファイル120に出
力する(ステップA65)。
【0118】これにより、アクション付きBNF定義フ
ァイル120の内容は、“a::=b:e1 c:e2”とな
る。
【0119】この右辺規則に対して、まず、BNFパー
ザ90は、右辺式一覧表100の中身をクリアし、空に
する(ステップA70)。
【0120】次に、BNFパーザ90は、抽象構文木定
義の右辺式の中で、BNF右辺式規則“b:e1 c:e2”
が「含む」右辺式を求める(ステップA80)。
【0121】求める右辺式は、 “(b1) b:e1.d:e1 (b2) b:e1.d:e1.e:e1 (b3) c:
e2” である。というのは、シンボルパス“b:e1.d:e1”
は、BNF右辺式中の“b:e1”から、“b”を左辺とす
るBNF規則を得、“b”を左辺とするBNF規則中の
右辺規則の中に“d:e1”が含まれる。
【0122】シンボルパス“b:e1.d:e1.e:e1”は、
BNF右辺式中の“b:e1”から、“b”を左辺とするB
NF規則を得、“b”を左辺とするBNF規則中の右辺
規則の中に“d:e1”が含まれる。
【0123】さらに“d”を左辺とするBNF規則中の
右辺規則の中に“e:e1”が含まれる。
【0124】シンボルパス“c:e2”について、右辺対
“c:e2”は、BNF定義右辺式中に存在する。
【0125】以上3点より、抽象構文右辺式中の3つの
シンボルパスは、すべて右辺式“b:e1c:e2”に含まれ
るためである。
【0126】そして、アクションコード生成処理を行う
(ステップA90)。ステップA90での処理は、次の
通りである。
【0127】まず、コード生成器110は、「BNF左
辺“a”に相当するBNF構文木のノード(仮に「node−
a」とする)を生成する。」というコードをアクション付
きBNF定義ファイル120に出力する(図7のステッ
プB10)。
【0128】以下、“b:e1 c:e2”の右辺対“b:e
1”,“c:e2”ごとに以下の処理を行う。
【0129】まず、“b:e1”について、「“b:e1”の
右辺“b”に相当するBNF構文木のノードを生成し
(仮に「node−b」とする)、node−bをnode−aの枝の
先に加える。」というコードをコード生成器110が生
成する(ステップB30)。
【0130】右辺対“c:e2”に対しても同様の処理を
行う。
【0131】次に、コード生成器110は、「抽象構文
木定義左辺“a”に相当するノード(仮に「node−A」と
する)を生成する。」というコードを生成する(ステッ
プB50)。
【0132】そして、コード生成器110は、右辺式一
覧表100から、抽象構文木定義右辺式を順次取り出す
(ステップB70)。
【0133】この場合、右辺式は、“(b1) b:e1.d:e1
(b2) b:e1.d:e1.e:e1 (b3) c:e2”の一つのみであ
る。この右辺式について、順次シンボルパスを取り出す
(ステップB80)。
【0134】まず、“b:e1.d:e1”である。コード生
成器110は、「シンボルパスに従ってBNF構文ノー
ドを取り出す。」というコードを生成する(ステップB
90)。
【0135】つまり、「まず、b:e1に相当するBNF
構文ノードnode−bを取り出し、次にnode−bの枝の先に
ついているd:e1に相当するノードを、node−cをnode−
bの枝から取り出す。」というコードを生成する。
【0136】そして、「node−Cからそれに付随した抽
象構文ノード(仮に「node−C」とする)を得、抽象構
文木ノードnode−Aの枝“b1”の先にnode−Cを追加す
る。」というコードを生成する(ステップB100)。
【0137】残るシンボルパスは、“b:e1.d:e1.e:e
1”と“c:e2”である。これらについても、“b:e1.
d:e1”と同様に、ステップB90からステップB10
0の処理を行う。
【0138】右辺式一覧表100に登録された右辺式
は、一つのみであるため、ステップB130に進み、
「node−aにnode−Aを付随させる。」というコードを生
成する(ステップB130)。
【0139】以上で、右辺式“b:e1 c:e2”に対する
アクションコードの生成を終了する。
【0140】右辺式“b:e1 c:e2”に対する処理が終
了したので、次に右辺式“”についての処理を行う。右
辺式“”に含まれる右辺対は0個である。
【0141】まず、コード生成器110は、右辺式をア
クション付きBNF定義ファイル120に出力する(ス
テップA65)。この場合、“│”も含めて、“│”を
出力する。
【0142】そして、BNFパーザ90は、右辺式一覧
表100をクリアする(図6のステップA70)。
【0143】抽象構文右辺規則“(b1) b:e1.d:e1 (b
2) b:e1.d:e1.e:e1 (b3) c:e2│;”の中で、BN
F右辺式に含まれるものを調べる。このとき、抽象構文
規則の右辺式は“”の1つのみである。これは、抽象構
文右辺式中の右辺対は全く存在しない。このため、抽象
構文右辺対の中にBNF含まれないものは存在しない。
そのため、抽象構文右辺式“”はBNF右辺式“”に含
まれると考える。BNFパーザ90は、右辺式一覧表1
00に、“”を一つのみ登録する(ステップA80)。
【0144】そして、このBNF右辺式に対してアクシ
ョンコード生成を行う(ステップA90)。
【0145】次にステップA90の詳細について説明す
る。
【0146】まず、コード生成器110は、「BNF左
辺“a”に相当する構文木ノードnode−aを生成する。」
というコードを生成する(図7のステップB10)。
【0147】次に、コード生成器110は、BNF右辺
対ごとの処理を行うが、右辺対が存在しないため、何も
せず、ステップB50に進む。
【0148】コード生成器110は、「抽象構文木ノー
ドnode−Aを生成する。」というコードを生成する。
【0149】そして、コード生成器110は、右辺式一
覧表100から抽象構文木定義右辺式を取り出し、それ
ぞれについて処理を行う(ステップB70)。ただし、
今回、右辺一覧表100に登録された右辺式は″の一つ
である。“”が含む右辺対について、それぞれステップ
B80からステップB110の処理を行うが、“”が含
む右辺対は、0個であるため、これらの処理は行われな
い。
【0150】ステップB130に進み、コード生成器1
10は「node−aにnode−Aを付随させる。」というコー
ドを生成する(ステップB130)。以上で、右辺式に
対するアクションコードの生成を終了する。
【0151】そして、BNF左辺“a”についての処理
も終了し、次にBNF左辺“b”についての処理とな
る。コード生成器110は左辺“b”および文字
列“::=”をアクション付きBNF定義ファイル12
0に出力する(ステップA45)。
【0152】次にBNFパーザ90は、抽象構文一覧表
70から左辺“b”を有する抽象構文木定義右辺規則を
得ようとする(ステップA50)。
【0153】しかし、該当する右辺規則は0個である。
【0154】次にBNF右辺規則“d:e1 f:e2;”か
ら右辺式を得る(ステップA60)。この場合、右辺式
は“d:e1 f:e2”一個である。
【0155】右辺式“d:e1 f:e2”について、まず、
コード生成器110は、“d:e1 f:e2”をアクション
付きBNF定義ファイル120のBNF部分の一部とし
て出力する(ステップA65)。
【0156】そして、右辺式一覧表100の中身をクリ
アする(ステップA70)。
【0157】続いてBNF構文右辺式が含む抽象構文右
辺式を見つけようとする(ステップA80)。
【0158】しかし、抽象構文右辺規則がないので、含
む右辺式は存在しない。ゆえに、右辺式一覧表100は
空のままである。
【0159】そして、BNFパーザ90は、アクション
コード生成処理を行う(ステップA90)。
【0160】コード生成器110は、「BNF左辺
“b”に相当するBNF構文木のノード(仮に「node−
b」とする)を生成する。」というコードをアクション付
きBNF定義ファイル120に出力する(ステップB1
0)。
【0161】以下、“d:e1 f:e2”の右辺対“d:e
1”,“f:e2”ごとに以下の処理を行う。まず、“d:e
1”について、「“d:e1”に相当するBNF構文木のノ
ードを生成し(仮に「node−d」とする)、node−dをno
de−bの枝の先に加える。」というコードをコード生成
器110が生成する(ステップB30)。
【0162】ノード“f:e2”に対しても同様の処理を
行う。ここで、左辺“b”に対応する抽象構文規則はな
いので、“d:e1 f:e2”に対するアクションコードの
生成が終了する。
【0163】左辺“b”の有する右辺は、“d:e1 f:e
2”のみなのであるため、左辺“b”に対する処理が終了
する。
【0164】続いて、左辺“c”,“d”,“f”に対して
も左辺“b”と同様の処理を行う。
【0165】このようにして、すべてのBNF定義のす
べての左辺について処理を終えるとステップA40に進
む。ここで、最終的に得られたBNF構文木には、抽象
構文木ノードが付随している。
【0166】そこで、コード生成器110は、「得られ
たBNFノードに付随した抽象構文木ノードを取り出
し、抽象構文木とする。」というコードを生成する(ス
テップA40)。
【0167】[実施の形態2]次に、本発明の第2の実
施の形態について図面を参照して詳細に説明する。
【0168】図10は、本発明の第2の実施の形態のパ
ーザ生成器プリプロセッサ60の構成を示す図である。
本発明の第2の実施形態は、前記第1の実施形態のBN
Fパーザ90を、BNFパーザ210で置き換えたもの
である。全体のシステム構成は、前記実施の形態と同
様、図1に示した構成からなる。
【0169】BNFパーザ210は、BNFパーザ90
と同様に、BNF定義ファイル50を読み込みパーズ
し、その結果を、BNF規則格納表115および右辺式
一覧表100に格納する。この際、右辺式一覧表100
に登録する要素の数を検査し、それが0個のときに処理
を停止する機能を有する。
【0170】図11は、本発明の第2の実施の形態の処
理フローを示す流れ図である。図10及び図11を参照
して、本発明の第2の実施の形態の全体の動作について
詳細に説明する。
【0171】図11に示すように、ステップA10から
ステップA80は、図6に示した前記第1の実施の形態
の処理とまったく同じ処理である。また、ステップA9
0のアクション生成処理は、図7に示した前記第1の実
施の形態の副処理と同一である。さらに、ステップA1
00も同じである。
【0172】ただし、ステップA80の後に、BNFパ
ーザ210は、右辺一覧表100に登録されている抽象
構文の右辺式の数を調べる。もし、抽象構文右辺規則が
存在し、かつ、右辺一覧表100に登録されている右辺
式の数が0ならば、BNFパーザ210は処理を中断
し、異常停止する。
【0173】右辺式が一つもないということは、抽象構
文木定義が誤っていることを示す。もし、1個以上存在
すれば、ステップA90に進み、前記第1の実施形態と
同じ処理を行う。
【0174】次に、本発明の第2の実施の形態の作用効
果について説明する。
【0175】本発明の第2の実施の形態では、前記第1
の実施の形態の作用効果に加えて、不正な抽象構文木定
義ファイルの内容を予め検査するために、パーザ開発者
は早期に抽象構文木定義ファイルの過ちに気づくことが
でき、正しいパーザを作成することができる。
【0176】[実施例2]次に、本発明の第2の実施の
形態についてさらに詳細に説明すべく、具体的な実施例
に即して説明する。
【0177】図15(A)に示すBNF定義ファイル5
0および図15(B)に示す抽象構文木定義ファイル4
0を入力として、パーザ生成器プリプロセッサ60を起
動した場合を考える。
【0178】まず、図12のステップA10からステッ
プA20の処理により、前記第1の実施の形態と同様
に、BNFパーザ210は、左辺が“a”および“b”の
抽象構文定義規則を抽象構文一覧表70に登録する。
【0179】続いてBNF定義ファイル50についての
処理が行われる。BNFパーザ210は、BNF定義の
BNF規則を一つずつ選びだし(ステップA30)、ス
テップA45以降それごとの処理が施されるが、今回
は、BNF規則“b::=d:e1f:e2;”を例に説明す
る。
【0180】ステップA45は、前記第1の実施の形態
とまったく同じ動作をする。
【0181】続いてステップA45からステップA60
により、BNFパーザ210は左辺“b”を有する抽象
構文規則“b::=(b1) f:e2.d:e1│(b2) f:e1;”を
得る。そして、BNFパーザ210はBNF右辺式
“d:e1 f:e2”を得る(ステップA60)。
【0182】図12のステップA65からステップA7
0では、前記第1の実施の形態と、全く同じ処理を行
う。
【0183】そして、BNFパーザ210は、抽象構文
右辺規則“(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”を「含
む」か調べる。
【0184】“f:e2”は、“b”の右辺対であるが、右
辺対“d:e1”は“f”を左辺とするBNF右辺規則中に
存在しない。そのため、「含まれない」。
【0185】次に、BNF右辺式“(b2) f:e1”につい
てであるが、“f:e1”は、BNF右辺式“d:e1 f:e
2”に存在しない。そのため、「含まれない」。
【0186】よって、抽象構文右辺規則“b::=(b1)
f:e2.d:e1│(b2) f:e1;”には、右辺式“d:e1 f:
e2”に含まれる右辺式が存在しない。
【0187】左辺“b”を有する抽象構文木定義規則が
存在するのに、含まれる抽象構文木定義の右辺式が存在
しないので、BNFパーザ210はエラーメッセージを
出し、異常停止する。
【0188】これは、抽象構文規則“b::=(b1) f:e
2.d:e1│(b2) f:e1;”に過ちがあるためと、パーザ
開発者は解釈することができる。
【0189】[実施の形態3]次に、本発明の第3の実
施の形態について図面を参照して詳細に説明する。
【0190】図12は、本発明の第3の実施の形態のパ
ーザ生成器プリプロセッサ60の構成を示す図である。
図12を参照すると、本発明の第3の実施の形態におい
ては、前記第1の実施の形態の構成に加えて、抽象構文
トークン一覧表310を備えている。また、コード生成
器110が、コード生成器320に置き換わっている。
さらに、抽象構文木定義パーザ80が、抽象構文木定義
パーザ380に置き換わっている。
【0191】抽象構文木定義パーザ380は、前記第1
の実施の形態の抽象構文木定義パーザ80と同様に、抽
象構文木定義ファイル40を読み込み、その内容を抽象
構文一覧表70に登録する。
【0192】さらに、抽象構文木定義パーザ380は、
抽象構文木定義ファイル40に現れるすべてのトークン
を抽象構文トークン一覧表310に登録する。
【0193】抽象構文トークン一覧表310は、抽象構
文で現れるトークンをすべて格納する一覧表である。重
複したトークンを登録した場合は、同じトークンのうち
ただ一つのみ登録する。抽象構文トークン一覧表310
は、与えられたトークンが表中に存在するかを調べるこ
とができる。
【0194】コード生成器320は、コード生成器11
0と同様に、右辺一覧表100およびBNF規則格納表
115を参照して、アクション付きBNF定義ファイル
120を生成する。この際、コード生成器320は、抽
象構文トークン一覧表310を参照して、出力するコー
ドを変更することができる。
【0195】図13及び図14は、本発明の第3の実施
の形態の処理フローを示す流れ図である。図12乃至図
14を参照して、本発明の第3の実施の形態の全体の動
作について詳細に説明する。
【0196】図13を参照すると、ステップA10から
ステップA20までの一連の処理は図6に示した前記第
1の実施の形態の処理と同一の処理を行う。
【0197】続いて、抽象構文木定義パーザ380は、
抽象構文木定義ファイル40中に現れるすべてのトーク
ンを抽象構文トークン一覧表310に登録する(ステッ
プA320)。
【0198】続いて、ステップA30からステップA8
0まで、図6に示した前記第1の実施の形態と同様の処
理を行う。
【0199】本発明の第3の実施の形態において、前記
第1の実施の形態の処理と相違するのは、ステップA9
0で、アクションコードの生成処理を行う代わりに、ス
テップA390で、アクションコード生成の前処理を施
している、ことである。
【0200】図14は、図13のステップA390のア
クションコード生成の前処理の処理手順を示す流れ図で
ある。図13及び図14の流れ図を参照して、まず、コ
ード生成器320はBNF規則格納表115からBNF
左辺を取得し、その左辺と同じトークンが抽象構文トー
クン一覧表310に存在するかを検査する(ステップC
10)。存在すれば、前記第1の実施の形態と同様に、
アクションコードの生成処理(ステップA90)を実行す
る。
【0201】一方、存在しなければ、コード生成器32
0は、このBNF右辺規則が有するすべての右辺式のア
クション部分として、「本左辺に対するBNF構文木に
相当するノードがないことを示すnullを返す。」という
コードを生成する(ステップC20)。
【0202】ステップA90もしくはステップC20が
終了すると、アクションコード生成の前処理を終了す
る。
【0203】次に本発明の第3の実施の形態の作用効果
について説明する。
【0204】本発明の第3の実施の形態では、前記第1
の実施の形態の作用効果に加えて、コード生成器320
が抽象構文トークン一覧表310を参照することによ
り、生成されたパーザが、不必要なBNF構文木を作成
しない構成になっているため、パーザが動作中に、プロ
グラム実行手段20が使用する作業メモリ領域を、前記
第1の実施の形態よりも、削減することができる。
【0205】また、同様の理由により、余分なBNF構
文木を作成する処理を減らすことができるために、パー
ザの処理をより高速に実行することができる。
【0206】[実施例3]次に、本発明の第3の実施の
形態についてさらに詳細に説明すべく,具体的な実施例
に即して説明する。
【0207】図9(A)、図9(B)にそれぞれ示すB
NF定義ファイルおよび抽象構文木定義を入力として、
前記本発明の第3の実施の形態を実行した場合について
説明する。
【0208】図13のステップA10からステップA2
0までは、図6に示した前記第1の実施の形態とまった
く同じ処理を行う。
【0209】さらに、抽象構文木定義パーザ380は、
抽象構文木定義ファイル40に現れるすべてのトークン
を抽象構文トークン一覧表310に登録する。
【0210】本実施の形態の場合、登録されるトークン
は、“a”,“b”,“d”,“b”,“d”,“e”,“e”であ
り、抽象構文トークン一覧表310は重複した場合は一
つのみ登録されるので、表中には、“a”,“b”,“d”,
“e”が登録される。
【0211】続いて、ステップA30以降のBNF定義
ファイル50に関する処理について処理が行われる。B
NF定義ファイル50のうち、左辺が“a”,“b”,
“c”のものについては、抽象構文トークン一覧表31
0に登録されているので、前記第1の実施の形態と同じ
処理を行うことになる。
【0212】ここでは、BNF規則“f::=e:e1│f:
e1;”についての処理について説明する。
【0213】まず、ステップA30からA80までは、
前記第1の実施の形態と同様の処理が行われる。
【0214】続いて、右辺式“e:e1”について、アク
ションコード生成の前処理が行われる(ステップA39
0)。
【0215】アクションコード生成の前処理について、
図14を参照して詳細に説明する。
【0216】まず、コード生成器320は、BNF左辺
“f”に当たるトークンが抽象構文トークン一覧表31
0に存在するかどうかを検査する(ステップC10)。
【0217】この場合、“f”は、抽象構文トークン一
覧表310に存在しない。そこで、コード生成器320
は、「本左辺に対するBNF構文木に相当するノードが
ないことを示すnullを返す。」というコードを生成する
(ステップC20)。
【0218】続いてステップA60に戻り、残る右辺式
“f:e1”についても“e:e1”と同様の処理を行う。
【0219】以上で、“f::=e:e1│e:e2;”に関す
る処理が終了する。
【0220】ステップA30に戻り、すでにすべてのB
NF左辺について処理が終えているので、ステップA4
0に進み、以降、前記第1の実施の形態と同様の処理を
行う。
【0221】[実施の形態4]次に、本発明の第4の実
施の形態について図面を参照して詳細に説明する。
【0222】図16は、本発明の第4の実施の形態のパ
ーザ生成器プリプロセッサ60の構成を示す図である。
図16を参照すると、本発明の第4の実施の形態は、前
記第2の実施の形態の構成に加えて、抽象構文トークン
一覧表310を備えている。また、コード生成器110
がコード生成器320に置き換わっている。さらに、抽
象構文木定義パーザ80が抽象構文木定義パーザ380
に置き換わっている。
【0223】これらの手段はそれぞれ概略つぎのような
機能を有する。
【0224】抽象構文トークン一覧表310は、前記第
3の実施の形態の抽象構文トークン一覧表310と同一
である。コード生成器320は、前記第3の実施の形態
のコード生成器320と同一である。抽象構文木定義パ
ーザ380は、前記第3の実施の形態の抽象構文木定義
パーザ380と同一である。
【0225】図17は、本発明の第4の実施の形態の処
理フローを示す流れ図である。図16及び図17を参照
して、本発明の第4の実施の形態の全体の動作について
詳細に説明する。
【0226】図17において、ステップA10からステ
ップA80までは、図11に示した前記第2の実施の形
態のステップA10からA80までと同じ処理が行われ
る。また、ステップA390については、図13及び図
14に示した前記第3の実施の形態のステップA390
と同一の処理が行われる。
【0227】次に、本発明の第4の実施の形態の作用効
果について説明する。
【0228】本発明の第4の実施の形態では、前記第1
の実施の形態の作用効果に加えて、前記第2の実施の形
態と前記第3の実施の形態の作用効果を併せ持つ。つま
り、前記第1の実施の形態の効果に加えて、本実施の形
態では、不正な抽象構文木定義ファイルの内容を予め検
査するために、パーザ開発者は早期に抽象構文木定義フ
ァイルの過ちに気づくことができ、正しいパーザを作成
する一助とすることができる。また、本実施の形態で
は、コード生成器320が抽象構文トークン一覧表31
0を参照することにより、生成されたパーザが、不要な
BNF構文木を作成しない構成になっているため、パー
ザが動作中にプログラム実行手段20が使用する作業メ
モリ領域を、前記第1の実施の形態よりも削減すること
ができる。
【0229】また、同様の理由により、余計なBNF構
文木を作成する処理を減らすことができるために、パー
ザの処理をより高速に実行することができる。
【0230】[実施例4]次に、本発明の第4の実施の
形態についてさらに詳細に説明すべく、具体的な実施例
に即して説明する。
【0231】図9(A)、図9(B)にそれぞれ示した
BNF定義ファイルおよび抽象構文木定義を入力とし
て、本発明の第4の実施の形態を実行した場合について
説明する。この場合、前記第3の実施の形態で説明した
動作と同様の動作を行い、パーザ生成器プリプロセッサ
60は、同じアクション付きBNF定義ファイル120
を出力する。
【0232】また、図15(A)、図15(B)にそれ
ぞれ示したBNF定義ファイルおよび抽象構文木定義フ
ァイルを入力として、パーザ生成器プリプロセッサ60
を起動した場合について説明する。この場合、前記第2
の実施の形態と同様に動作し、パーザ生成器プリプロセ
ッサ60は異常停止をする。
【0233】
【発明の効果】以上説明したように、本発明によれば下
記記載の効果を奏する。
【0234】本発明の第1の効果は、パーザ開発者が、
アクション付きBNF定義ファイルを記述するより容易
に、BNF定義ファイルおよび抽象構文木定義ファイル
を記述することができる、ということである。
【0235】その理由は、本発明においては、アクショ
ン付きBNF定義ファイル中の手続き的記述であるアク
ションの代わりに、非手続き的な記述である抽象構文木
定義ファイルをパーザ開発者は記述するだけで済む構成
としたためである。
【0236】本発明の第2の効果は、少ない記述量で入
力ファイルからパーザを生成できる、ということにあ
る。
【0237】その理由は、一般に手続きを記述するアク
ション部分に比べて、非手続き的記述である抽象構文木
定義は、記述される行数は、少なくて済む、からであ
る。
【0238】本発明の第3の効果は、抽象構文木の仕様
とほぼ一致した表現形態で入力することができる、とい
うことにある。
【0239】その理由は、本発明においては、抽象構文
木定義ファイルの内容を、抽象構文木の仕様と同様に記
述できるようにしためである。
【図面の簡単な説明】
【図1】本発明の第1の実施の形態の構成を示す示すブ
ロック図である。
【図2】本発明の第1の実施の形態の要部の構成を示す
示すブロック図である。
【図3】BNF定義の文法を示す説明図である。
【図4】抽象構文木定義の文法を示す説明図である。
【図5】BNF構文木と抽象構文木との対応を示す図で
ある。
【図6】本発明の第1の実施の形態の動作を説明するた
めの流れ図である。
【図7】本発明の第1の実施の形態の動作を説明するた
めの流れ図である。
【図8】本発明の第1の実施の形態の動作を説明するた
めの流れ図である。
【図9】本発明の第1、第3の実施の形態を説明するた
めの図であり、(A)はBNF定義ファイル入力サンプ
ル、(B)は抽象構文木定義ファイル入力サンプルを示
す図である。
【図10】本発明の第2の実施の形態の要部の構成を示
す示すブロック図である。
【図11】本発明の第2の実施の形態の動作を説明する
ための流れ図である。
【図12】本発明の第3の実施の形態の要部の構成を示
す示すブロック図である。
【図13】本発明の第3の実施の形態の動作を説明する
ための流れ図である。
【図14】本発明の第3の実施の形態の動作を説明する
ため流れ図である。
【図15】本発明の第2の実施の形態を説明するための
図であり、(A)はBNF定義ファイル入力サンプル、
(B)は抽象構文木定義ファイル入力サンプルを示す図
である。
【図16】本発明の第4の実施の形態の要部の構成を示
す示すブロック図である。
【図17】本発明の第4の実施の形態の動作を説明する
ための流れ図である。
【図18】従来のパーザ生成システムの主要部の構成を
示す示すブロック図である。
【符号の説明】
10 目的言語入力ファイル 20 プログラム実行手段 30 抽象構文木データベース 40 抽象構文木定義ファイル 50 BNF定義ファイル 60 パーザ生成器プリプロセッサ 70 抽象構文一覧表 80 抽象構文木定義パーザ 90 BNFパーザ 100 右辺式一覧表 115 BNF規則格納表 110 コード生成器 120 アクション付きBNF定義ファイル 130 パーザ生成器 140 プログラムファイル 150 コンパイラ 160 パーザ実行ファイル 210 BNFパーザ 310 抽象構文トークン一覧表 320 コード生成器 380 抽象構文木定義パーザ

Claims (11)

    (57)【特許請求の範囲】
  1. 【請求項1】抽象構文木定義ファイルを入力して構文解
    析し、前記抽象構文木定義ファイル内のすべての抽象構
    文木定義規則について左辺をキーとし、右辺規則を、記
    憶装置内の抽象構文一覧表に登録する手段と、 BNF定義ファイルを入力し、前記BNF定義ファイル
    をBNF規則毎に構文解析し、前記記憶装置内のBNF
    規則格納表に格納し、前記BNF規則の左辺と同一の左
    辺を有する抽象構文木定義規則の左辺を有する抽象構文
    木定義規則の右辺式を前記抽象構文規則一覧表から取得
    し、前記取得した抽象構文木定義規則の右辺式を、表形
    式で前記記憶装置内の右辺式一覧表に格納するBNFパ
    ーザと、 前記BNFパーザから受け取ったBNF規則をアクショ
    ン付きBNF定義ファイルのBNF部分として出力する
    とともに、BNF規則毎に前記BNF規則の左辺に対応
    する具象構文木ノードを生成し、作成済みの下位の具象
    構文木とつなぐプログラムコードと、前記左辺を表す抽
    象構文木ノードを生成するプログラムコードと、前記右
    辺式一覧表から共通の左辺の値を有する抽象構文規則右
    辺式を前記抽象構文規則右辺式のシンボルパスごと
    に、具象構文木を辿りシンボルパス内の右辺と対応する
    前記具象構文木内の具象構文木ノードを得るプログラム
    コードと、得た前記具象構文木ノードに付与された抽象
    構文木ノードを取り出し、前記抽象構文木ノードを子と
    し前記左辺を表す前記抽象構文木ノードをつなぎ、抽象
    構文木を構成するプログラムコードと、前記左辺を表す
    前記抽象構文木ノードを、前記左辺を表す前記具象構文
    木ノードに付与するプログラムコードとを、生成し、
    記アクション付き定義ファイルのアクション部するコ
    ード生成手段と、 を備えたことを特徴とするパーザプリプロセッサシステ
    ム。
  2. 【請求項2】抽象構文木左辺をキーとし、右辺規則が検
    索対象とされる抽象構文規則の一覧を格納する抽象構文
    一覧表と、 入力した抽象構文木定義ファイルを構文解析し、前記抽
    象構文木定義ファイルの内容に従い、抽象構文木定義規
    則の左辺をキーとして右辺規則を前記抽象構文一覧表に
    登録する抽象構文木定義パーザと、 入力したBNF定義ファイルの内容に従い、前記抽象構
    文一覧表から抽象構文規則の右辺式を取り出すBNFパ
    ーザと、 前記BNFパーザが取り出した抽象構文規則の右辺式を
    表形式で記憶する一覧表である右辺式一覧表と、前記BNFパーザから受け取ったBNF規則をアクショ
    ン付きBNF定義ファイルのBNF部分として出力する
    とともに、BNF規則毎に前記BNF規則の左辺値に対
    応する具象構文木ノードを生成し、作成済みの下位の具
    象構文木とつなぐプログラムコードを生成し、もし前記
    抽象構文トークン一覧表にBNF規則左辺と同じ値があ
    るときに限り前記左辺を表す抽象構文木ノードを生成す
    るプログラムコードを生成し、前記右辺式一覧表から共
    通の左辺の値を有する抽象構文木右辺式を得、前記抽象
    構文木右辺式のシンボルパスごとに具象構文木を辿りシ
    ンボルパス内の右辺と対応する前記具象構文木内の具象
    構文木ノードを得るプログラムコードを生成し、得た前
    記具象構文木ノードに付与された抽象構文木ノードを取
    り出し、前記抽象構文木につなぎ抽象構文木を構成する
    プログラムコードを生成し、前記左辺を表す前記具象構
    文木ノードに前記左辺を表す前記抽象構文木ノードを付
    与するプログラムコードを生成し、前記左辺に対応する
    前記具象構文木ノードを生成し下位具象構文木とつなぐ
    前記プログラムコードと、前記左辺に対応する前記抽象
    構文木ノードを生成する前記プログラムコードと、前記
    具象構文木ノードを得る前記プログラムコードと、前記
    具象構文木ノードに付与された前記抽象構文木ノードを
    前記左辺に対応する前記抽象構文木ノードにつなぐ前記
    プログラムコードと、前記左辺に対応する前記抽象構文
    木ノードを前記左辺に対応する前記抽象構文木ノードに
    付与する前記プログラムコードを前記アクション付き定
    義ファイルのアクション部とする コード生成手段と、 を備えたことを特徴とするパーザ生成器プリプロセッサ
    システム。
  3. 【請求項3】抽象構文左辺をキーとし、右辺規則が検索
    対象とされる、抽象構文規則の一覧を格納する抽象構文
    一覧表と、 入力した抽象構文木定義ファイルを構文解析し、前記抽
    象構文木定義ファイルの内容に従い抽象構文木定義規則
    の左辺をキーとして、右辺規則を前記抽象構文一覧表に
    登録する抽象構文木定義パーザと、 入力したBNF定義ファイルの内容に従い、前記抽象構
    文一覧表から抽象構文規則の右辺式を取り出し、右辺式
    一覧表およびBNF規則格納表を埋め、その際、前記右
    辺式一覧表に登録する要素の数を検査し、0個の場合に
    は、処理を停止する機能を有するBNFパーザと、 前記BNFパーザによる抽象構文規則の右辺式を記憶す
    る一覧表である前記右辺式一覧表と、 前記BNFパーザが構文解析したBNF規則を一つ格納
    する前記BNF規則格納表と、前記BNFパーザから受け取ったBNF規則をアクショ
    ン付きBNF定義ファイルのBNF部分として出力する
    とともに、BNF規則毎に前記BNF規則の左辺値に対
    応する具象構文木ノードを生成し、作成済みの下位の具
    象構文木とつなぐプログラムコードを生成し、もし前記
    抽象構文トークン一覧表にBNF規則左辺と同じ値があ
    るときに限り前記左辺を表す抽象構文木ノードを生成す
    るプログラムコードを生成し、前記右辺式一覧表から共
    通の左辺の値を有する抽象構文木右辺式を得、前記抽象
    構文木右辺式のシンボルパスごとに具象構文木を辿りシ
    ンボルパス内の右辺と対応する前記具象構文木内の具象
    構文木ノードを得るプログラムコードを生成し、得た前
    記具象構文木ノードに付与された抽象構文木ノードを取
    り出し、前記抽象構文木につなぎ抽象構文木を構成する
    プログラムコードを生成し、前記左辺を表す前記具象構
    文木ノードに前記左辺を表す前記抽象構文木ノードを付
    与するプログラムコードを生成し、前記左辺に対応する
    前記具象構文木ノードを生成し下位具象構文木とつなぐ
    前記プログラムコードと、前記左辺に対応する前記抽象
    構文木ノードを生成する前記プログラムコードと、前記
    具象構文木ノードを得る前記プログラムコードと、前記
    具象構文木ノードに付与された前記抽象構文木ノードを
    前記左辺に対応する前記抽象構文木ノードにつなぐ前記
    プログラムコードと、前記左辺に対応する前記抽象構文
    木ノードを前記左辺に対応する前記抽象構文木ノードに
    付与する前記プログラムコードを前記アクション付き定
    義ファイルのアクション部とする コード生成手段と、 を備えたことを特徴とするパーザ生成器プリプロセッサ
    システム。
  4. 【請求項4】抽象構文木左辺をキーとし、右辺規則を検
    索対象とする抽象構文木規則の一覧を格納する抽象構文
    木一覧表と、 入力した抽象構文木定義ファイルを構文解析し、前記抽
    象構文木定義ファイルに従い、抽象構文木定義規則の左
    辺をキーとして、右辺規則を前記抽象構文木一覧表に登
    録するとともに、前記抽象構文木定義ファイルに現れる
    すべてのトークンを、抽象構文トークン一覧表に登録す
    る抽象構文木パーザと、 入力したBNF定義ファイルの内容に従い、前記抽象構
    文一覧表から右辺式を取り出し、右辺式一覧表およびB
    NF規則格納表を埋めるBNFパーザと、 前記BNFパーザと後述のコード生成手段の一時記憶手
    段として使用され、抽象構文規則の右辺式を記憶する一
    覧表である前記右辺式一覧表と、 前記BNFパーザが構文解析したBNF規則を格納する
    前記BNF規則格納表と、 抽象構文で表れる左辺及び右辺をすべて格納する一覧表
    である前記抽象構文トークン一覧表と、 前記右辺式一覧表、前記BNF規則格納表、および前記
    抽象構文トークン一覧表を参照して、前記BNFパーザ
    から受け取ったBNF規則をアクション付きBNF定義
    ファイルのBNF部分として出力するとともに、BNF
    規則毎に前記BNF規則の左辺値に対応する具象構文木
    ノードを生成し、作成済みの下位の具象構文木とつなぐ
    プログラムコードを生成し、もし前記抽象構文トークン
    一覧表にBNF規則左辺と同じ値があるときに限り前記
    左辺を表す抽象構文木ノードを生成するプログラムコー
    ドを生成し、前記右辺式一覧表から共通の左辺の値を有
    する抽象構文木右辺式を得、前記抽象構文木右辺式のシ
    ンボルパスごとに具象構文木を辿りシンボルパス内の右
    辺と対応する前記具象構文木内の具象構文木ノードを得
    るプログラムコードを生成し、得た前記具象構文木ノー
    ドに付与された抽象構文木ノードを取り出し、前記抽象
    構文木につなぎ抽象構文木を構成するプログラムコード
    を生成し、前記左辺を表す前記具象構文木ノードに前記
    左辺を表す前記抽象構文木ノードを付与するプログラム
    コードを生成し、前記左辺に対応する 前記具象構文木ノ
    ードを生成し下位具象構文木とつなぐ前記プログラムコ
    ードと、前記左辺に対応する前記抽象構文木ノードを生
    成する前記プログラムコードと、前記具象構文木ノード
    を得る前記プログラムコードと、前記具象構文木ノード
    に付与された前記抽象構文木ノードを前記左辺に対応す
    る前記抽象構文木ノードにつなぐ前記プログラムコード
    と、前記左辺に対応する前記抽象構文木ノードを前記左
    辺に対応する前記抽象構文木ノードに付与する前記プロ
    グラムコードを前記アクション付き定義ファイルのアク
    ション部とするコード生成手段と、 を備えたことを特徴とするパーザ生成プリプロセッサシ
    ステム。
  5. 【請求項5】抽象構文左辺をキーとし、右辺規則を検索
    対象とする抽象構文規則の一覧を格納する抽象構文一覧
    表と、 入力した抽象構文木定義ファイルを構文解析し、前記抽
    象構文木定義ファイルの内容に従い抽象構文木定義規則
    の左辺をキーとして、右辺規則を前記抽象構文一覧表に
    登録するとともに、前記抽象構文木定義ファイルに現れ
    るすべてのトークンを抽象構文トークン一覧表に登録す
    る抽象構文木定義パーザと、 入力したBNF定義ファイルの内容に従い、前記抽象構
    文一覧表から抽象構文規則の右辺式を取り出し、右辺式
    一覧表およびBNF規則格納表を埋め、その際、前記右
    辺式一覧表に登録する要素の数を検査し、0個の場合に
    は、処理を停止する機能を有するBNFパーザと、 前記BNFパーザとコード生成手段の一時記憶手段とし
    て使用され、抽象構文規則の右辺式を記憶する一覧表で
    ある前記右辺式一覧表と、 前記BNFパーザが構文解析したBNF規則を一つ格納
    する前記BNF規則格納表と、 抽象構文規則で現れる左辺および右辺をすべて格納する
    一覧表である前記抽象構文トークン一覧表と、 前記右辺式一覧表、前記BNF規則格納表、および前記
    抽象構文トークン一覧表を参照して、前記BNFパーザ
    から受け取ったBNF規則をアクション付きBNF定義
    ファイルのBNF部分として出力するとともに、BNF
    規則毎に前記BNF規則の左辺値に対応する具象構文木
    ノードを生成し、作成済みの下位の具象 構文木とつなぐ
    プログラムコードを生成し、もし前記抽象構文トークン
    一覧表にBNF規則左辺と同じ値があるときに限り前記
    左辺を表す抽象構文木ノードを生成するプログラムコー
    ドを生成し、前記右辺式一覧表から共通の左辺の値を有
    する抽象構文木右辺式を得、前記抽象構文木右辺式のシ
    ンボルパスごとに具象構文木を辿りシンボルパス内の右
    辺と対応する前記具象構文木内の具象構文木ノードを得
    るプログラムコードを生成し、得た前記具象構文木ノー
    ドに付与された抽象構文木ノードを取り出し、前記抽象
    構文木につなぎ抽象構文木を構成するプログラムコード
    を生成し、前記左辺を表す前記具象構文木ノードに前記
    左辺を表す前記抽象構文木ノードを付与するプログラム
    コードを生成し、前記左辺に対応する前記具象構文木ノ
    ードを生成し下位具象構文木とつなぐ前記プログラムコ
    ードと、前記左辺に対応する前記抽象構文木ノードを生
    成する前記プログラムコードと、前記具象構文木ノード
    を得る前記プログラムコードと、前記具象構文木ノード
    に付与された前記抽象構文木ノードを前記左辺に対応す
    る前記抽象構文木ノードにつなぐ前記プログラムコード
    と、前記左辺に対応する前記抽象構文木ノードを前記左
    辺に対応する前記抽象構文木ノードに付与する前記プロ
    グラムコードを前記アクション付き定義ファイルのアク
    ション部とするコード生成手段と、 を備えたことを特徴とするパーザ生成器プリプロセッサ
    システム。
  6. 【請求項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. 【請求項7】前記右辺一覧表に登録されている抽象構文
    の右辺式の数を調べ、抽象構文右辺規則が存在し、か
    つ、前記右辺一覧表に登録されている右辺式の数が0な
    らば処理を中断し、異常停止する、 ことを特徴とする請求項記載のパーザ生成器用プリプ
    ロセス方法。
  8. 【請求項8】前記コード生成器が、BNF左辺と同じト
    ークンが抽象構文トークン一覧表に存在するか否かを検
    査し、存在しなければ、 前記BNF左辺に対するBNF構文木に相当するノード
    がないことを示すヌル(null)を返すコードを生成す
    る、ことを特徴とする請求項又は記載のパーザ生成
    器用プリプロセス方法。
  9. 【請求項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. 【請求項10】請求項に記載の記録媒体において、 前記右辺一覧表に登録されている抽象構文の右辺式の数
    を調べ、抽象構文右辺規則が存在し、かつ、前記右辺一
    覧表に登録されている右辺式の数が0ならば処理を中断
    し、異常停止する処理、を前記コンピュータ上で実行さ
    せるためのプログラムを記録した記録媒体。
  11. 【請求項11】請求項又は10に記載の記録媒体にお
    いて、 BNF左辺と同じトークンが抽象構文トークン一覧表に
    存在するかを検査し、存在しなければ、前記BNF左辺
    に対するBNF構文木に相当するノードがないことを示
    すヌル(null)を返すコードを生成する処理、を前
    記コンピュータ上で実行させるためのプログラムを記録
    した記録媒体。
JP28069298A 1998-10-02 1998-10-02 パーザ生成器プリプロセッサシステム、パーザ生成器用プリプロセス方法 Expired - Fee Related JP3194372B2 (ja)

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)

* Cited by examiner, † Cited by third party
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 北京小米松果电子有限公司 文本转换方法、装置、存储介质及电子设备

Non-Patent Citations (2)

* Cited by examiner, † Cited by third party
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