JP2720643B2 - プログラムジェネレータ生成装置 - Google Patents
プログラムジェネレータ生成装置Info
- Publication number
- JP2720643B2 JP2720643B2 JP3199407A JP19940791A JP2720643B2 JP 2720643 B2 JP2720643 B2 JP 2720643B2 JP 3199407 A JP3199407 A JP 3199407A JP 19940791 A JP19940791 A JP 19940791A JP 2720643 B2 JP2720643 B2 JP 2720643B2
- Authority
- JP
- Japan
- Prior art keywords
- program
- character string
- specification description
- generator
- program generator
- 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 - Lifetime
Links
Landscapes
- Devices For Executing Special Programs (AREA)
- Stored Programmes (AREA)
Description
【0001】
【産業上の利用分野】本発明はプログラムジェネレータ
生成装置に関するものである。
生成装置に関するものである。
【0002】
【従来の技術】近年、電子計算機のプログラムを作成す
る際に、プログラムジェネレータを利用することが、盛
んに行なわれている。プログラムジェネレータとは、あ
るプログラミング言語で書かれたプログラムを、他のプ
ログラミング言語で書かれたプログラムに変換するもの
である。
る際に、プログラムジェネレータを利用することが、盛
んに行なわれている。プログラムジェネレータとは、あ
るプログラミング言語で書かれたプログラムを、他のプ
ログラミング言語で書かれたプログラムに変換するもの
である。
【0003】プログラムジェネレータには、広い意味で
はコンパイラも含まれる。コンパイラとは、プログラミ
ング言語の内でも高級プログラミング言語と呼ばれる
C、フォートラン、パスカルなどで記述されたプログラ
ムを、計算機のハードウエアが直接実行できる形態であ
る機械語、あるいは機械語に簡単に変換できる形態であ
るアセンブラ言語に変換するものである。
はコンパイラも含まれる。コンパイラとは、プログラミ
ング言語の内でも高級プログラミング言語と呼ばれる
C、フォートラン、パスカルなどで記述されたプログラ
ムを、計算機のハードウエアが直接実行できる形態であ
る機械語、あるいは機械語に簡単に変換できる形態であ
るアセンブラ言語に変換するものである。
【0004】従来、広く使われていたプログラムジェネ
レータの大部分はコンパイラであった。つまり、生成す
るプログラムは、アセンブラ言語などの、単純な言語が
主であった。しかし、多くの計算機に、C言語などの一
般的、かつ違う機種の間でもプログラムの互換性が高い
高級プログラミング言語のコンパイラが普及したため、
C言語などよりさらに高級なプログラミング言語や、特
殊なプログラミング言語から、普及しているプログラミ
ング言語、たとえばC言語などへの変換を行なうプログ
ラムジェネレータが使用されるようになった。特に、ミ
チェル・ビーらによる「マッチメーカー:アン インタ
フェース スペシフィケーション ラングェジ フォ
ディストリビューテッド プロセッシング」(Michael
B. Jones, Richard F. Rashid, Mary R. Thompson,"M
atchmaker: An Interface Specification Language for
Distributed Processing", Proceeding of the 12th A
CMSIGACT-SIGPLAN Symposium on Princeples of Progra
mming Language, ACM, January 1985. )に見られるよ
うに、計算機間のデータ通信を行なうためのプログラム
を作成する際には、広くプログラムジェネレータが用い
られるようになった。
レータの大部分はコンパイラであった。つまり、生成す
るプログラムは、アセンブラ言語などの、単純な言語が
主であった。しかし、多くの計算機に、C言語などの一
般的、かつ違う機種の間でもプログラムの互換性が高い
高級プログラミング言語のコンパイラが普及したため、
C言語などよりさらに高級なプログラミング言語や、特
殊なプログラミング言語から、普及しているプログラミ
ング言語、たとえばC言語などへの変換を行なうプログ
ラムジェネレータが使用されるようになった。特に、ミ
チェル・ビーらによる「マッチメーカー:アン インタ
フェース スペシフィケーション ラングェジ フォ
ディストリビューテッド プロセッシング」(Michael
B. Jones, Richard F. Rashid, Mary R. Thompson,"M
atchmaker: An Interface Specification Language for
Distributed Processing", Proceeding of the 12th A
CMSIGACT-SIGPLAN Symposium on Princeples of Progra
mming Language, ACM, January 1985. )に見られるよ
うに、計算機間のデータ通信を行なうためのプログラム
を作成する際には、広くプログラムジェネレータが用い
られるようになった。
【0005】この場合、プログラムジェネレータは、デ
ータ通信の仕様を記述した仕様記述を読み込み、その記
述に従って、データ通信を行なうためのプログラムを生
成する。
ータ通信の仕様を記述した仕様記述を読み込み、その記
述に従って、データ通信を行なうためのプログラムを生
成する。
【0006】このようなプログラムジェネレータを作成
する際には、通常のプログラミング言語を使って作成し
てもよいが、作成を容易にするための支援装置を用いる
と、より簡単に作成することが可能となる。このような
支援装置を、プログラムジェネレータ生成装置と呼ぶこ
とにする。
する際には、通常のプログラミング言語を使って作成し
てもよいが、作成を容易にするための支援装置を用いる
と、より簡単に作成することが可能となる。このような
支援装置を、プログラムジェネレータ生成装置と呼ぶこ
とにする。
【0007】プログラムジェネレータ生成装置には各種
のものがあるが、ここでは、その中でも代表的なもので
あるyaccを使用した場合についてのべる。yacc
は、プログラムジェネレータの中の構文解析部を自動的
に生成することを主たる目的としており、構文解析の結
果を利用するための動作については、使用者がC言語で
記述する必要がある。なお、yacc、およびyacc
を用いたコンパイラの構成方法については、近藤嘉雪
著、”yaccによるCコンパイラプログラミング”、
ソフトバンク株式会社出版事業部、1990年 が詳し
い。
のものがあるが、ここでは、その中でも代表的なもので
あるyaccを使用した場合についてのべる。yacc
は、プログラムジェネレータの中の構文解析部を自動的
に生成することを主たる目的としており、構文解析の結
果を利用するための動作については、使用者がC言語で
記述する必要がある。なお、yacc、およびyacc
を用いたコンパイラの構成方法については、近藤嘉雪
著、”yaccによるCコンパイラプログラミング”、
ソフトバンク株式会社出版事業部、1990年 が詳し
い。
【0008】以下、図21を参照しながら、yaccを
例にとって従来のプログラムジェネレータ生成装置の構
成について説明する。なお、一般的な字句解析、構文解
析、構文解析表の生成、および構文解析器の生成の構
成、および方法については、佐々政孝著、”プログラミ
ング言語処理系”、岩波書店、1989年が詳しいの
で、ここでは詳細は省略する。
例にとって従来のプログラムジェネレータ生成装置の構
成について説明する。なお、一般的な字句解析、構文解
析、構文解析表の生成、および構文解析器の生成の構
成、および方法については、佐々政孝著、”プログラミ
ング言語処理系”、岩波書店、1989年が詳しいの
で、ここでは詳細は省略する。
【0009】図21は、プログラムジェネレータ生成装
置としてyaccを使用した場合の、プログラムの生成
の手順を示したブロック図である。図21において、2
101は、生成されるプログラムジェネレータの仕様を
記述した仕様記述、2102は、プログラムジェネレー
タ生成装置、2102aは仕様記述2101を読み込
み、字句に分解する仕様記述字句解析手段、2102b
は仕様記述字句解析手段2102aが字句に分解した仕
様記述の構文解析を行なう仕様記述構文解析手段、21
02cは、仕様記述の構文解析の結果をもとに、入力プ
ログラム2106の構文解析に必要な構文解析表を生成
する構文解析表生成手段、2102dは、仕様記述の構
文解析、および生成された構文解析表をもとに構文解析
部を生成する構文解析部生成手段、2103は、プログ
ラムジェネレータ生成装置2102によって生成された
構文解析部、2104は、使用者がC言語によって記述
したユーザプログラム、2105は、構文解析部210
3、ユーザプログラム2104をコンパイルし、リンク
するためのコンパイラ、2106はプログラムジェネレ
ータへの入力プログラム、2107は、入力プログラム
2106を変換するためのプログラムジェネレータ、2
108はプログラムジェネレータ2107によって生成
された出力プログラムである。
置としてyaccを使用した場合の、プログラムの生成
の手順を示したブロック図である。図21において、2
101は、生成されるプログラムジェネレータの仕様を
記述した仕様記述、2102は、プログラムジェネレー
タ生成装置、2102aは仕様記述2101を読み込
み、字句に分解する仕様記述字句解析手段、2102b
は仕様記述字句解析手段2102aが字句に分解した仕
様記述の構文解析を行なう仕様記述構文解析手段、21
02cは、仕様記述の構文解析の結果をもとに、入力プ
ログラム2106の構文解析に必要な構文解析表を生成
する構文解析表生成手段、2102dは、仕様記述の構
文解析、および生成された構文解析表をもとに構文解析
部を生成する構文解析部生成手段、2103は、プログ
ラムジェネレータ生成装置2102によって生成された
構文解析部、2104は、使用者がC言語によって記述
したユーザプログラム、2105は、構文解析部210
3、ユーザプログラム2104をコンパイルし、リンク
するためのコンパイラ、2106はプログラムジェネレ
ータへの入力プログラム、2107は、入力プログラム
2106を変換するためのプログラムジェネレータ、2
108はプログラムジェネレータ2107によって生成
された出力プログラムである。
【0010】以上のような構成において、まず、仕様記
述字句解析手段2102aは仕様記述2101を読み込
んで、その内容を字句に分解する。次に仕様記述構文解
析手段2102bは字句に分解された仕様記述の構文解
析を行なう。次に、構文解析表生成手段2102cは、
仕様記述の構文解析の結果に基づいて、入力プログラム
2106の構文解析をするときに必要な構文解析表を生
成する。次に構文解析部生成手段2102dは、生成さ
れた構文解析表、および構文解析の結果をもとに、プロ
グラムジェネレータの一部である構文解析部を生成す
る。次に使用者があらかじめ作っておいた、ユーザプロ
グラム2104、つまり、プログラムジェネレータ21
07のうちの構文解析器2103以外の部分と、生成さ
れた構文解析部2103をコンパイルし、リンクし、計
算機で実行可能な形式として、プログラムジェネレータ
2107を生成する。生成されたプログラムジェネレー
タ2107を用いると、入力プログラム2106を、出
力プログラム2108に変換することができる。
述字句解析手段2102aは仕様記述2101を読み込
んで、その内容を字句に分解する。次に仕様記述構文解
析手段2102bは字句に分解された仕様記述の構文解
析を行なう。次に、構文解析表生成手段2102cは、
仕様記述の構文解析の結果に基づいて、入力プログラム
2106の構文解析をするときに必要な構文解析表を生
成する。次に構文解析部生成手段2102dは、生成さ
れた構文解析表、および構文解析の結果をもとに、プロ
グラムジェネレータの一部である構文解析部を生成す
る。次に使用者があらかじめ作っておいた、ユーザプロ
グラム2104、つまり、プログラムジェネレータ21
07のうちの構文解析器2103以外の部分と、生成さ
れた構文解析部2103をコンパイルし、リンクし、計
算機で実行可能な形式として、プログラムジェネレータ
2107を生成する。生成されたプログラムジェネレー
タ2107を用いると、入力プログラム2106を、出
力プログラム2108に変換することができる。
【0011】
【発明が解決しようとする課題】しかしながら上記の従
来の構成では、共通の課題として、プログラムジェネレ
ータ生成装置2102は、構文解析器の生成を行なって
いるのみであり、文字列の管理をするプログラムは、ユ
ーザがプログラミングしなくてはならず、プログラムジ
ェネレータの作成を効率的に行なうことができないとい
う課題を有していた。また、第1の課題として、プログ
ラムジェネレータ生成装置2102は構文解析器の生成
を行なっているのみである。C言語のような高級言語に
よって書かれたプログラムを生成するプログラムジェネ
レータを作成する場合には、生成するプログラムの一部
を文字列として扱うことが多いが、このような文字列を
扱うためのプログラムは生成されないため、プログラム
ジェネレータの開発者が作成してユーザプログラム21
04の中に入れるか、あるいは仕様記述2101の中に
入れる必要があるため、開発のための作業が増えるとい
う課題を有していた。
来の構成では、共通の課題として、プログラムジェネレ
ータ生成装置2102は、構文解析器の生成を行なって
いるのみであり、文字列の管理をするプログラムは、ユ
ーザがプログラミングしなくてはならず、プログラムジ
ェネレータの作成を効率的に行なうことができないとい
う課題を有していた。また、第1の課題として、プログ
ラムジェネレータ生成装置2102は構文解析器の生成
を行なっているのみである。C言語のような高級言語に
よって書かれたプログラムを生成するプログラムジェネ
レータを作成する場合には、生成するプログラムの一部
を文字列として扱うことが多いが、このような文字列を
扱うためのプログラムは生成されないため、プログラム
ジェネレータの開発者が作成してユーザプログラム21
04の中に入れるか、あるいは仕様記述2101の中に
入れる必要があるため、開発のための作業が増えるとい
う課題を有していた。
【0012】また、第2の課題として、前述のデータ通
信用プログラム生成装置のように、プログラム変換装置
の入力が、簡単な仕様記述で、その仕様記述に沿って大
量のプログラムを生成するような場合においては、プロ
グラム生成の仕様記述の中に大量の、文字列が入ってし
まう。このような場合に、たとえばyaccの仕様記述ファ
イルの中に直接、その文字列を書き込むと、仕様記述が
読みにくくなり、仕様の全体を理解することが困難にな
ってくるという課題を有していた。
信用プログラム生成装置のように、プログラム変換装置
の入力が、簡単な仕様記述で、その仕様記述に沿って大
量のプログラムを生成するような場合においては、プロ
グラム生成の仕様記述の中に大量の、文字列が入ってし
まう。このような場合に、たとえばyaccの仕様記述ファ
イルの中に直接、その文字列を書き込むと、仕様記述が
読みにくくなり、仕様の全体を理解することが困難にな
ってくるという課題を有していた。
【0013】また、第3の課題として、仕様記述中にあ
る文字列を変更しようとした場合にも、その仕様記述全
体をyaccに読ませて、構文解析部を生成させて、プログ
ラムジェネレータ全体を生成しなおさなければならな
い。よって、少しの変更のために、最初に開発する場合
と同一の作業が発生し、長い時間を要してしまうという
課題を有していた。
る文字列を変更しようとした場合にも、その仕様記述全
体をyaccに読ませて、構文解析部を生成させて、プログ
ラムジェネレータ全体を生成しなおさなければならな
い。よって、少しの変更のために、最初に開発する場合
と同一の作業が発生し、長い時間を要してしまうという
課題を有していた。
【0014】また、第4の課題として、上記の構成で高
級言語のプログラムを生成するプログラムジェネレータ
を生成した場合、仕様記述2101のなかの長い文字
列、あるいはその中に挿入するように指示された長い文
字列の中の一部を、入力プログラム2106の中のある
文字列で置き換えた文字列を生成することが多くある。
ここで、この長い文字列を、テンプレート、テンプレー
トの途中に挿入される文字列を挿入文字列と呼ぶことに
する。しかし従来の構成例では文字列置換のための手続
きを生成する機能を有していないため、テンプレートを
置換する場所で前半と後半に分け、まずテンプレートの
前半を出力し、その後挿入文字列を出力し、最後にテン
プレートの後半を出力するなどというプログラムを、ユ
ーザが作成しなければなかった。このような方法を用い
ると、開発のための作業が多く必要となり、また、あと
からその部分のプログラムを見たときに、動作が理解し
にくくなるという課題を有していた。
級言語のプログラムを生成するプログラムジェネレータ
を生成した場合、仕様記述2101のなかの長い文字
列、あるいはその中に挿入するように指示された長い文
字列の中の一部を、入力プログラム2106の中のある
文字列で置き換えた文字列を生成することが多くある。
ここで、この長い文字列を、テンプレート、テンプレー
トの途中に挿入される文字列を挿入文字列と呼ぶことに
する。しかし従来の構成例では文字列置換のための手続
きを生成する機能を有していないため、テンプレートを
置換する場所で前半と後半に分け、まずテンプレートの
前半を出力し、その後挿入文字列を出力し、最後にテン
プレートの後半を出力するなどというプログラムを、ユ
ーザが作成しなければなかった。このような方法を用い
ると、開発のための作業が多く必要となり、また、あと
からその部分のプログラムを見たときに、動作が理解し
にくくなるという課題を有していた。
【0015】本発明は、上記従来技術の第1から第4の
課題を解決するもので、第1の課題に対して、文字列操
作を行なうプログラムの作成を省き、プログラムジェネ
レータの開発の効率を向上させることができるプログラ
ムジェネレータ生成装置を提供することを目的とする。
課題を解決するもので、第1の課題に対して、文字列操
作を行なうプログラムの作成を省き、プログラムジェネ
レータの開発の効率を向上させることができるプログラ
ムジェネレータ生成装置を提供することを目的とする。
【0016】また、第2の課題に対して、従来より読み
やすい形式の仕様記述からプログラムジェネレータを生
成することによって間違いを少なくするプログラムジェ
ネレータ生成装置を提供することを目的とする。
やすい形式の仕様記述からプログラムジェネレータを生
成することによって間違いを少なくするプログラムジェ
ネレータ生成装置を提供することを目的とする。
【0017】また、第3の課題に対して、仕様の変更が
発生した場合に、再コンパイル等の作業を行なうことな
く、少ない作業で短時間にその変更に対応することが可
能なプログラムジェネレータを生成するプログラムジェ
ネレータ生成装置を提供することを目的とする。
発生した場合に、再コンパイル等の作業を行なうことな
く、少ない作業で短時間にその変更に対応することが可
能なプログラムジェネレータを生成するプログラムジェ
ネレータ生成装置を提供することを目的とする。
【0018】また、第4の課題に対して、文字列の挿入
機能を簡単に実現できるプログラムジェネレータ生成装
置を提供することを目的とする。
機能を簡単に実現できるプログラムジェネレータ生成装
置を提供することを目的とする。
【0019】
【課題を解決するための手段】この目的を達成するため
に本発明のプログラムジェネレータ生成装置は第一に、
生成すべきプログラムジェネレータの仕様記述を読み込
み字句に分解する仕様記述字句解析手段と、分解して得
られた字句の中の文字列を分離して抜き出す文字列抜き
出し手段と、抜き出した文字列の保管場所を、当該保管
場所にユニークな識別子を付与してプログラムジェネレ
ータ中で管理する文字列管理部を生成する文字列管理部
生成手段と、前記文字列抜き出し手段により加工された
仕様記述の構文解析を行う仕様記述構文解析手段と、前
記構文解析手段の出力に基づき構文解析表を生成する構
文解析表生成手段を有する構成となっている。
に本発明のプログラムジェネレータ生成装置は第一に、
生成すべきプログラムジェネレータの仕様記述を読み込
み字句に分解する仕様記述字句解析手段と、分解して得
られた字句の中の文字列を分離して抜き出す文字列抜き
出し手段と、抜き出した文字列の保管場所を、当該保管
場所にユニークな識別子を付与してプログラムジェネレ
ータ中で管理する文字列管理部を生成する文字列管理部
生成手段と、前記文字列抜き出し手段により加工された
仕様記述の構文解析を行う仕様記述構文解析手段と、前
記構文解析手段の出力に基づき構文解析表を生成する構
文解析表生成手段を有する構成となっている。
【0020】第2に、生成すべきプログラムジェネレー
タの仕様記述を読み込み字句に分解する仕様記述字句解
析手段と、分解して得られた字句の中からファイル挿入
命令を検出するファイル挿入命令検出手段と、ファイル
挿入命令に従って指定されたファイルの内容を、プログ
ラムジェネレータ中の文字列管理部の管理する文字列の
集合の中に挿入するファイル挿入手段と前記ファイル挿
入手段により加工された仕様記述の構文解析を行う仕様
記述構文解析手段と、前記構文解析手段の出力に基づき
構文解析表を生成する構文解析表生成手段を有する構成
となっている。
タの仕様記述を読み込み字句に分解する仕様記述字句解
析手段と、分解して得られた字句の中からファイル挿入
命令を検出するファイル挿入命令検出手段と、ファイル
挿入命令に従って指定されたファイルの内容を、プログ
ラムジェネレータ中の文字列管理部の管理する文字列の
集合の中に挿入するファイル挿入手段と前記ファイル挿
入手段により加工された仕様記述の構文解析を行う仕様
記述構文解析手段と、前記構文解析手段の出力に基づき
構文解析表を生成する構文解析表生成手段を有する構成
となっている。
【0021】第3に、生成すべきプログラムジェネレー
タの仕様記述を読み込み字句に分解する仕様記述字句解
析手段と、分解して得られた字句の中からプログラムジ
ェネレータによって、入力プログラムを出力プログラム
に変換する時である実行時に実行される、実行時ファイ
ル挿入命令を検出する実行時ファイル挿入命令検出手段
と、仕様記述をプログラムジェネレータに変換する時で
あるプログラム変換時にファイル挿入命令に従って指定
されたファイルの内容を出力プログラム中に挿入する手
続きを、生成されるプログラムジェネレータのプログラ
ム中に挿入するファイル挿入手続き挿入手段と、前記フ
ァイル挿入手続き挿入手段により加工された仕様記述の
構文解析を行う仕様記述構文解析手段と、前記構文解析
手段の出力に基づき構文解析表を生成する構文解析表生
成手段を有する構成となっている。
タの仕様記述を読み込み字句に分解する仕様記述字句解
析手段と、分解して得られた字句の中からプログラムジ
ェネレータによって、入力プログラムを出力プログラム
に変換する時である実行時に実行される、実行時ファイ
ル挿入命令を検出する実行時ファイル挿入命令検出手段
と、仕様記述をプログラムジェネレータに変換する時で
あるプログラム変換時にファイル挿入命令に従って指定
されたファイルの内容を出力プログラム中に挿入する手
続きを、生成されるプログラムジェネレータのプログラ
ム中に挿入するファイル挿入手続き挿入手段と、前記フ
ァイル挿入手続き挿入手段により加工された仕様記述の
構文解析を行う仕様記述構文解析手段と、前記構文解析
手段の出力に基づき構文解析表を生成する構文解析表生
成手段を有する構成となっている。
【0022】第4に、生成すべきプログラムジェネレー
タの仕様記述を読み込み字句に分解する仕様記述字句解
析手段と、分解して得られた字句の中から文字列置換命
令を検出する文字列置換命令検出手段と、仕様記述をプ
ログラムジェネレータに変換する時であるプログラム変
換時に文字列置換命令に従って文字列置換を行なう手続
きを生成されるプログラムジェネレータのプログラム中
に挿入する文字列置換手続き挿入手段と前記文字列置換
手続き挿入手段により加工された仕様記述の構文解析を
行う仕様記述構文解析手段と、前記構文解析手段の出力
に基づき構文解析表を生成する構文解析表生成手段とを
有する構成になっている。
タの仕様記述を読み込み字句に分解する仕様記述字句解
析手段と、分解して得られた字句の中から文字列置換命
令を検出する文字列置換命令検出手段と、仕様記述をプ
ログラムジェネレータに変換する時であるプログラム変
換時に文字列置換命令に従って文字列置換を行なう手続
きを生成されるプログラムジェネレータのプログラム中
に挿入する文字列置換手続き挿入手段と前記文字列置換
手続き挿入手段により加工された仕様記述の構文解析を
行う仕様記述構文解析手段と、前記構文解析手段の出力
に基づき構文解析表を生成する構文解析表生成手段とを
有する構成になっている。
【0023】
【作用】上記構成において本発明は、第1に文字列抜き
出し手段が字句に分解した仕様記述の中から文字列を分
離して抜き出し、文字列管理部生成手段が抜き出した文
字列をプログラムジェネレータ中で管理する文字列管理
部を生成することにより、文字列管理を行なうプログラ
ムの作成を省き、プログラムジェネレータの開発の効率
を向上させることができる。
出し手段が字句に分解した仕様記述の中から文字列を分
離して抜き出し、文字列管理部生成手段が抜き出した文
字列をプログラムジェネレータ中で管理する文字列管理
部を生成することにより、文字列管理を行なうプログラ
ムの作成を省き、プログラムジェネレータの開発の効率
を向上させることができる。
【0024】第2に、ファイル挿入命令検出手段が分解
して得られた字句の中からファイル挿入命令を検出し、
ファイル挿入手段が検出されたファイル挿入命令によっ
て指定されたファイルの内容を読みだし字句の並びの中
に挿入することで、仕様記述とは別に置かれたファイル
の内容をプログラムジェネレータに挿入することが可能
となり、簡潔で、読みやすい仕様記述からプログラムジ
ェネレータの生成を行なうことができる。
して得られた字句の中からファイル挿入命令を検出し、
ファイル挿入手段が検出されたファイル挿入命令によっ
て指定されたファイルの内容を読みだし字句の並びの中
に挿入することで、仕様記述とは別に置かれたファイル
の内容をプログラムジェネレータに挿入することが可能
となり、簡潔で、読みやすい仕様記述からプログラムジ
ェネレータの生成を行なうことができる。
【0025】第3に、実効時ファイル命令検出手段が分
解して得られた字句の中から実行時ファイル挿入命令を
検出し、ファイル挿入手続き挿入手段がプログラム変換
時にファイル挿入命令に従って指定されたファイルの内
容を出力プログラム中に挿入する手続きをプログラムジ
ェネレータ中に挿入することにより、プログラムジェネ
レータがプログラムの変換を行なう時に、出力プログラ
ムの中に指定されたファイルの内容を挿入することで、
簡潔で、読みやすい仕様記述からプログラムジェネレー
タの生成を行なうことができる。
解して得られた字句の中から実行時ファイル挿入命令を
検出し、ファイル挿入手続き挿入手段がプログラム変換
時にファイル挿入命令に従って指定されたファイルの内
容を出力プログラム中に挿入する手続きをプログラムジ
ェネレータ中に挿入することにより、プログラムジェネ
レータがプログラムの変換を行なう時に、出力プログラ
ムの中に指定されたファイルの内容を挿入することで、
簡潔で、読みやすい仕様記述からプログラムジェネレー
タの生成を行なうことができる。
【0026】第4に、文字列置換命令検出手段が分解し
て得られた字句の中から文字列置換命令を検出し、文字
列置換手続き挿入手段が、プログラム変換時に文字列置
換命令に従って文字列置換を行なう手続きをプログラム
ジェネレータ中に挿入し、動作時に文字列の置換を行な
うプログラムジェネレータを生成することによって、簡
潔で、読みやすい仕様記述からプログラムジェネレータ
の生成を行なうことができる。
て得られた字句の中から文字列置換命令を検出し、文字
列置換手続き挿入手段が、プログラム変換時に文字列置
換命令に従って文字列置換を行なう手続きをプログラム
ジェネレータ中に挿入し、動作時に文字列の置換を行な
うプログラムジェネレータを生成することによって、簡
潔で、読みやすい仕様記述からプログラムジェネレータ
の生成を行なうことができる。
【0027】
(実施例1)以下、本発明の第1の実施例について、図
面を参照しながら説明する。
面を参照しながら説明する。
【0028】図1は本発明の第1の実施例におけるプロ
グラムの生成の手順を及びプログラムジェネレータ生成
装置の構成を示したブロック図である。図1において、
101は、生成されるプログラムジェネレータの仕様を
記述した仕様記述、102は、プログラムジェネレータ
生成装置、102aは仕様記述101を読み込み、字句
に分解する仕様記述字句解析手段、102bは仕様記述
字句解析手段102aが字句に分解した仕様記述の中か
ら文字列の部分を検出して抜き出し、その文字列に識別
子を付与し、仕様記述の字句の並びの中には文字列その
もののかわりに、付与された識別子を挿入する文字列抜
き出し手段、102cは文字列抜き出し手段102bが
抜き出した文字列を、プログラムジェネレータ108中
で管理するための文字列管理部104を生成する文字列
管理部生成手段、102dは仕様記述字句解析手段10
2aが字句に分解し、さらに文字列抜き出し手段102
bによって文字列を示す識別子を挿入された仕様記述の
構文解析を行なう仕様記述構文解析手段、102eは、
仕様記述の構文解析の結果をもとに、入力プログラム1
07の構文解析に必要な構文解析表を生成する構文解析
表生成手段、102fは、仕様記述の構文解析、および
生成された構文解析表をもとに構文解析部を生成する構
文解析部生成手段、103は、プログラムジェネレータ
生成装置102によって生成された構文解析部、104
は、文字列管理部生成手段102cによって生成された
文字列管理部、105は、使用者がC言語によって記述
したユーザプログラム、106は、構文解析部103、
プログラム生成部104、ユーザプログラム105をコ
ンパイルし、リンクするためのコンパイラ、107はプ
ログラムジェネレータへの入力プログラム、108は、
入力プログラム107を変換するためのプログラムジェ
ネレータ、109はプログラムジェネレータ107によ
って生成された出力プログラムである。
グラムの生成の手順を及びプログラムジェネレータ生成
装置の構成を示したブロック図である。図1において、
101は、生成されるプログラムジェネレータの仕様を
記述した仕様記述、102は、プログラムジェネレータ
生成装置、102aは仕様記述101を読み込み、字句
に分解する仕様記述字句解析手段、102bは仕様記述
字句解析手段102aが字句に分解した仕様記述の中か
ら文字列の部分を検出して抜き出し、その文字列に識別
子を付与し、仕様記述の字句の並びの中には文字列その
もののかわりに、付与された識別子を挿入する文字列抜
き出し手段、102cは文字列抜き出し手段102bが
抜き出した文字列を、プログラムジェネレータ108中
で管理するための文字列管理部104を生成する文字列
管理部生成手段、102dは仕様記述字句解析手段10
2aが字句に分解し、さらに文字列抜き出し手段102
bによって文字列を示す識別子を挿入された仕様記述の
構文解析を行なう仕様記述構文解析手段、102eは、
仕様記述の構文解析の結果をもとに、入力プログラム1
07の構文解析に必要な構文解析表を生成する構文解析
表生成手段、102fは、仕様記述の構文解析、および
生成された構文解析表をもとに構文解析部を生成する構
文解析部生成手段、103は、プログラムジェネレータ
生成装置102によって生成された構文解析部、104
は、文字列管理部生成手段102cによって生成された
文字列管理部、105は、使用者がC言語によって記述
したユーザプログラム、106は、構文解析部103、
プログラム生成部104、ユーザプログラム105をコ
ンパイルし、リンクするためのコンパイラ、107はプ
ログラムジェネレータへの入力プログラム、108は、
入力プログラム107を変換するためのプログラムジェ
ネレータ、109はプログラムジェネレータ107によ
って生成された出力プログラムである。
【0029】以上のように構成されたプログラムジェネ
レータ生成装置について、図2に示すフローチャートを
用いてその動作を説明する。
レータ生成装置について、図2に示すフローチャートを
用いてその動作を説明する。
【0030】まず、仕様記述字句解析手段102aは仕
様記述101を読み込み、その内容を字句に分解する
(図2ステップ(イ))。次に、文字列抜き出し手段1
02bは仕様記述字句解析手段102aが字句に分解し
た仕様記述の中から文字列の部分を検出し1つ1つの文
字列にユニークな識別子を付与し、仕様記述の字句の並
びの中には文字列そのもののかわりに、付与された識別
子を挿入する(図2ステップ(ロ))。次に文字列管理
部生成手段102cは文字列抜き出し手段102bが抜
き出した文字列を、プログラムジェネレータ108中で
管理するための文字列管理部104を生成する(図2ス
テップ(ハ))。次に仕様記述構文解析手段102dは
仕様記述字句解析手段102aが字句に分解し、さらに
文字列抜き出し手段102bによって文字列を示す識別
子を挿入された仕様記述の構文解析を行なう(図2ステ
ップ(ニ))。次に構文解析表生成手段102eは、仕
様記述の構文解析の結果をもとに、入力プログラム10
7の構文解析に必要な構文解析表を生成する(図2ステ
ップ(ホ))。次に構文解析部生成手段102fは、仕
様記述の構文解析、および生成された構文解析表をもと
に構文解析部を生成する(図2ステップ(ヘ))。
様記述101を読み込み、その内容を字句に分解する
(図2ステップ(イ))。次に、文字列抜き出し手段1
02bは仕様記述字句解析手段102aが字句に分解し
た仕様記述の中から文字列の部分を検出し1つ1つの文
字列にユニークな識別子を付与し、仕様記述の字句の並
びの中には文字列そのもののかわりに、付与された識別
子を挿入する(図2ステップ(ロ))。次に文字列管理
部生成手段102cは文字列抜き出し手段102bが抜
き出した文字列を、プログラムジェネレータ108中で
管理するための文字列管理部104を生成する(図2ス
テップ(ハ))。次に仕様記述構文解析手段102dは
仕様記述字句解析手段102aが字句に分解し、さらに
文字列抜き出し手段102bによって文字列を示す識別
子を挿入された仕様記述の構文解析を行なう(図2ステ
ップ(ニ))。次に構文解析表生成手段102eは、仕
様記述の構文解析の結果をもとに、入力プログラム10
7の構文解析に必要な構文解析表を生成する(図2ステ
ップ(ホ))。次に構文解析部生成手段102fは、仕
様記述の構文解析、および生成された構文解析表をもと
に構文解析部を生成する(図2ステップ(ヘ))。
【0031】使用者は、あらかじめ作成しておいたユー
ザプログラム105と、上記の動作によって生成された
構文解析部103、および文字列管理部104をコンパ
イラ106によってコンパイル、リンクし、目的とする
プログラムジェネレータ108を生成する。
ザプログラム105と、上記の動作によって生成された
構文解析部103、および文字列管理部104をコンパ
イラ106によってコンパイル、リンクし、目的とする
プログラムジェネレータ108を生成する。
【0032】次に、生成されたプログラムジェネレータ
108について図面を参照しながら説明する。
108について図面を参照しながら説明する。
【0033】図3はプログラムジェネレータ108の構
成を示したブロック図である。図3において、301
は、入力プログラム107を読み込み、字句に分解する
字句解析部、103は、字句解析部301によって字句
に分解された入力プログラム107を構文解析する構文
解析部、302は、構文解析部103による、入力プロ
グラム107の解析結果をもとに出力プログラム109
を生成するコード生成部、303はプログラムジェネレ
ータ108中で用いられる基本的なデータ構造の管理を
行なうデータ管理部、104は、データ管理部303の
中の、文字列に関する管理を行なう文字列管理部、30
4は、データ管理部303によって管理されるデータに
対する操作や、出力操作などのように、汎用性の高い操
作を行なう手続きを提供するライブラリ関数群である。
成を示したブロック図である。図3において、301
は、入力プログラム107を読み込み、字句に分解する
字句解析部、103は、字句解析部301によって字句
に分解された入力プログラム107を構文解析する構文
解析部、302は、構文解析部103による、入力プロ
グラム107の解析結果をもとに出力プログラム109
を生成するコード生成部、303はプログラムジェネレ
ータ108中で用いられる基本的なデータ構造の管理を
行なうデータ管理部、104は、データ管理部303の
中の、文字列に関する管理を行なう文字列管理部、30
4は、データ管理部303によって管理されるデータに
対する操作や、出力操作などのように、汎用性の高い操
作を行なう手続きを提供するライブラリ関数群である。
【0034】以上のように構成されたプログラムジェネ
レータ108について、図4に示すフローチャートを用
いてその動作を説明する。
レータ108について、図4に示すフローチャートを用
いてその動作を説明する。
【0035】まず、字句解析部301は入力プログラム
107を読み込み、その内容を字句に分解する(図4ス
テップ(イ))。次に構文解析部103は字句解析部3
01が字句に分解した入力プログラム107の構文解析
を行なう(図4ステップ(ロ))。次にコード生成部3
02は構文解析の結果をもとに出力プログラムの合成を
行なう(図4ステップ(ハ))。文字列の合成を行なう
際には、文字列そのものを合成するのではなく、その文
字列に付与された識別子を用いて行なう。次にコード生
成部302は、合成されたデータ構造をもとに、出力プ
ログラムを出力する(図4ステップ(ニ))。
107を読み込み、その内容を字句に分解する(図4ス
テップ(イ))。次に構文解析部103は字句解析部3
01が字句に分解した入力プログラム107の構文解析
を行なう(図4ステップ(ロ))。次にコード生成部3
02は構文解析の結果をもとに出力プログラムの合成を
行なう(図4ステップ(ハ))。文字列の合成を行なう
際には、文字列そのものを合成するのではなく、その文
字列に付与された識別子を用いて行なう。次にコード生
成部302は、合成されたデータ構造をもとに、出力プ
ログラムを出力する(図4ステップ(ニ))。
【0036】次に、プログラムジェネレータ108にお
いて文字列がどのように扱われるかを、図面を参照しな
がら説明する。
いて文字列がどのように扱われるかを、図面を参照しな
がら説明する。
【0037】図5は、データ管理部303によって扱わ
れるデータ構造のうち、文字列と、連結に関するものの
構造を示した構造図である。図5において、501は2
つのデータの連結を表現するコンスセル、502は、文
字列を格納する文字列オブジェクトである。なお、この
データ構造の構成は、記号処理用プログラミング言語で
あるLispの言語処理系が用いるデータ構造に近い。
Lisp言語処理系については、後藤滋樹著、”記号処
理プログラミング”、岩波書店、1988が詳しい。
れるデータ構造のうち、文字列と、連結に関するものの
構造を示した構造図である。図5において、501は2
つのデータの連結を表現するコンスセル、502は、文
字列を格納する文字列オブジェクトである。なお、この
データ構造の構成は、記号処理用プログラミング言語で
あるLispの言語処理系が用いるデータ構造に近い。
Lisp言語処理系については、後藤滋樹著、”記号処
理プログラミング”、岩波書店、1988が詳しい。
【0038】コンスセル501は、2つの領域を持って
おり、そこにポインタ、識別子などを格納できる。この
データ構造は、主に、文字列などを連結する操作を表現
したいときに用いる。文字列オブジェクト502は、文
字列を格納しておくためのものであり、その中に文字列
を格納している。また、タグと呼ばれる領域には、この
データ構造がどのような種類のデータ構造であるかをし
めす識別子が入っている。このタグはコンスセル501
にも付いているが、一般的にコンスセルを図的に表記す
る場合にはタグの領域を示さないので、図5では省略し
た。
おり、そこにポインタ、識別子などを格納できる。この
データ構造は、主に、文字列などを連結する操作を表現
したいときに用いる。文字列オブジェクト502は、文
字列を格納しておくためのものであり、その中に文字列
を格納している。また、タグと呼ばれる領域には、この
データ構造がどのような種類のデータ構造であるかをし
めす識別子が入っている。このタグはコンスセル501
にも付いているが、一般的にコンスセルを図的に表記す
る場合にはタグの領域を示さないので、図5では省略し
た。
【0039】図6は、仕様記述101を示す図である。
601は、文法記号b、c、dに相当する記述が連続し
て入力プログラム107中に現われたときに、その3つ
の文法記号をまとめて、文法記号aと見なすことがで
き、その際には中かっこの中に示した動作を行なうとい
う仕様を示すルール、602は、文法記号aに相当する
記述が2つ連続して入力プログラム107中に現われた
ときに、その2つの文法記号をまとめて、文法記号eと
見なすことができ、その際には中かっこの中に示した動
作を行なうという仕様を示すルールである。この仕様記
述法は、yaccの仕様記述方法に基づいている。中かっこ
の前の文法を示す部分は生成規則、中かっこの中の動作
はアクションと呼ばれる。アクション中の$$は文法規則
中の:の左に位置する文法記号の属性値を示す記号であ
る。$1,$2,....は、それぞれ文法規則中の:の右に位置
する、1番目の文法記号、2番目の文法記号、...の
属性値を示す記号である。アクション中に示した関数li
stは、引数として与えられた値をコンスセル501を用
いて連結するための関数である。
601は、文法記号b、c、dに相当する記述が連続し
て入力プログラム107中に現われたときに、その3つ
の文法記号をまとめて、文法記号aと見なすことがで
き、その際には中かっこの中に示した動作を行なうとい
う仕様を示すルール、602は、文法記号aに相当する
記述が2つ連続して入力プログラム107中に現われた
ときに、その2つの文法記号をまとめて、文法記号eと
見なすことができ、その際には中かっこの中に示した動
作を行なうという仕様を示すルールである。この仕様記
述法は、yaccの仕様記述方法に基づいている。中かっこ
の前の文法を示す部分は生成規則、中かっこの中の動作
はアクションと呼ばれる。アクション中の$$は文法規則
中の:の左に位置する文法記号の属性値を示す記号であ
る。$1,$2,....は、それぞれ文法規則中の:の右に位置
する、1番目の文法記号、2番目の文法記号、...の
属性値を示す記号である。アクション中に示した関数li
stは、引数として与えられた値をコンスセル501を用
いて連結するための関数である。
【0040】図7は、図6に示した仕様記述をプログラ
ムジェネレータ生成装置102が読み込んだときに生成
される文字列管理部104を、C言語によって実現した
ときのプログラムを示す図である。図7において、make
_stringという関数は、文字列オブジェクト502を生
成し、与えられた文字列をその中に格納して、その文字
列オブジェクト502へのポインタを返す関数である。
配列string_storageは、そのポインタを格納して置くた
めの配列である。配列の添え字は、文字列抜き出し手段
102bによって文字列に付与された識別子と、1対1
に対応するようにしておく、たとえば、識別子iを与え
られた文字列の文字列オブジェクトは、配列の中の添え
字がiの要素に、入っているようにしておく。
ムジェネレータ生成装置102が読み込んだときに生成
される文字列管理部104を、C言語によって実現した
ときのプログラムを示す図である。図7において、make
_stringという関数は、文字列オブジェクト502を生
成し、与えられた文字列をその中に格納して、その文字
列オブジェクト502へのポインタを返す関数である。
配列string_storageは、そのポインタを格納して置くた
めの配列である。配列の添え字は、文字列抜き出し手段
102bによって文字列に付与された識別子と、1対1
に対応するようにしておく、たとえば、識別子iを与え
られた文字列の文字列オブジェクトは、配列の中の添え
字がiの要素に、入っているようにしておく。
【0041】図8は、図6のルール601に示した文法
記号の列b,c,dが入力プログラム107中に現れ、
ルール601のアクションが実行されたときに生成され
るデータ構造を示す構造図である。
記号の列b,c,dが入力プログラム107中に現れ、
ルール601のアクションが実行されたときに生成され
るデータ構造を示す構造図である。
【0042】図9は、図6のルール602に示した文法
記号の列a,aが入力プログラム107中に現れ、ルー
ル602のアクションが実行されたときに生成されるデ
ータ構造を示す構造図である。図8、図9においてポイ
ンタ0、1、2はそれぞれ文字列0、1、2を指し示し
ている。このようなデータ構造によって文字列の連結が
表現されている場合に連結された文字列を出力するため
にはコンスセルによって構成されるツリー構造の中を、
左から順番に探索して、文字列オブジェクトが見つかっ
た時点で、その文字列を出力すればよい。
記号の列a,aが入力プログラム107中に現れ、ルー
ル602のアクションが実行されたときに生成されるデ
ータ構造を示す構造図である。図8、図9においてポイ
ンタ0、1、2はそれぞれ文字列0、1、2を指し示し
ている。このようなデータ構造によって文字列の連結が
表現されている場合に連結された文字列を出力するため
にはコンスセルによって構成されるツリー構造の中を、
左から順番に探索して、文字列オブジェクトが見つかっ
た時点で、その文字列を出力すればよい。
【0043】図9に示されるように、仕様記述101中
の文字列はプログラムジェネレータ108中で、連結さ
れるときに、ポインタとして扱われる。本発明のように
文字列管理部も生成し、プログラムジェネレータ108
の中に含むような構成を用いると、それぞれの文字列を
別の位置に格納し、その格納された文字列を示すポイン
タのみを連結することによって合成を行なうことができ
る。このことによって、文字列のコピーなどを行なうこ
となく、効率よく文字列の合成を行うことができる。こ
こでは、文字列オブジェクトを示すためにポインタを用
いる方法を説明したが、これは文字列オブジェクトの識
別子であってもかまわない。
の文字列はプログラムジェネレータ108中で、連結さ
れるときに、ポインタとして扱われる。本発明のように
文字列管理部も生成し、プログラムジェネレータ108
の中に含むような構成を用いると、それぞれの文字列を
別の位置に格納し、その格納された文字列を示すポイン
タのみを連結することによって合成を行なうことができ
る。このことによって、文字列のコピーなどを行なうこ
となく、効率よく文字列の合成を行うことができる。こ
こでは、文字列オブジェクトを示すためにポインタを用
いる方法を説明したが、これは文字列オブジェクトの識
別子であってもかまわない。
【0044】次に、従来例と比較して、本発明の優れて
いる点について説明する。文字列管理部を生成する機能
を持たない従来例で、このような仕様記述中に書かれた
文字列の合成の機能を実現する方法には、次の3つの方
法が考えられる。
いる点について説明する。文字列管理部を生成する機能
を持たない従来例で、このような仕様記述中に書かれた
文字列の合成の機能を実現する方法には、次の3つの方
法が考えられる。
【0045】第1の方法は、文字列の合成を行なうたび
に、合成されるすべての文字列を、1つのバッファに先
頭から順にコピーしていくというものである。この方法
には、合成を行なうたびに、バッファコピーが起こるの
で、実行速度が遅くなるという点と、合成して得られる
文字列の長さが大きくなると、合成のたびに大きなバッ
ファが必要となり、メモリを大量に消費するという点
の、2つの問題点がある。
に、合成されるすべての文字列を、1つのバッファに先
頭から順にコピーしていくというものである。この方法
には、合成を行なうたびに、バッファコピーが起こるの
で、実行速度が遅くなるという点と、合成して得られる
文字列の長さが大きくなると、合成のたびに大きなバッ
ファが必要となり、メモリを大量に消費するという点
の、2つの問題点がある。
【0046】第2の方法はポインタの値によって、文字
列を認識する方法である。本実施例では、すべてのデー
タは、idを格納する領域を持ち、あるポインタが指す
データが文字列であるか、コンスセルであるかの判断
を、そのidの値を調べることによって行なっている。
この方法を変更して、コンスセルの存在する領域を限定
しておいて、その中を指しているポインタであれば、コ
ンスセルとして認識し、その範囲外であれば、文字列と
認識する方法が考えられる。文字列の合成は、単に、そ
の文字列の先頭アドレスをポインタとして用いて、本実
施例と同様の操作を行なえばよい。この方法では、メモ
リ効率の点では、第1の方法の欠点は解消されている。
しかし、次のような問題点がある。仕様記述中のアクシ
ョン部はyaccで処理されたあとのC言語のプログラ
ムの中でも文字列として扱われる。その後、C言語のコ
ンパイラによってコンパイルされたときに、文字列が、
オブジェクトコード中のどこに存在するのかは、言語処
理系や、OS、計算機の機種などによってまちまちであ
る。また、その文字列の存在する位置を知ることは、一
般的に難しい。このような不確定な文字列の位置に関す
る情報に基づいて動作するプログラムは、移植性、保守
性の乏しいものになるため、一般的には好ましくない。
また、この例ではコンスセルと文字列の組合せしか示さ
なかったが、ジェネレータ内で扱うデータに、たとえ
ば、通常の言語処理系で使われるところの、シンボル
や、文字、数値といったデータが入ってくると、それぞ
れの文字毎にその存在する範囲を限定して、ポインタの
指すデータ構造をプリントアウトすときには、1つのポ
インタに対して(データの種類の数−1)回のアドレス
の比較が必要となり、実行速度が遅くなる。この点から
も、第2の方法は好ましくない。
列を認識する方法である。本実施例では、すべてのデー
タは、idを格納する領域を持ち、あるポインタが指す
データが文字列であるか、コンスセルであるかの判断
を、そのidの値を調べることによって行なっている。
この方法を変更して、コンスセルの存在する領域を限定
しておいて、その中を指しているポインタであれば、コ
ンスセルとして認識し、その範囲外であれば、文字列と
認識する方法が考えられる。文字列の合成は、単に、そ
の文字列の先頭アドレスをポインタとして用いて、本実
施例と同様の操作を行なえばよい。この方法では、メモ
リ効率の点では、第1の方法の欠点は解消されている。
しかし、次のような問題点がある。仕様記述中のアクシ
ョン部はyaccで処理されたあとのC言語のプログラ
ムの中でも文字列として扱われる。その後、C言語のコ
ンパイラによってコンパイルされたときに、文字列が、
オブジェクトコード中のどこに存在するのかは、言語処
理系や、OS、計算機の機種などによってまちまちであ
る。また、その文字列の存在する位置を知ることは、一
般的に難しい。このような不確定な文字列の位置に関す
る情報に基づいて動作するプログラムは、移植性、保守
性の乏しいものになるため、一般的には好ましくない。
また、この例ではコンスセルと文字列の組合せしか示さ
なかったが、ジェネレータ内で扱うデータに、たとえ
ば、通常の言語処理系で使われるところの、シンボル
や、文字、数値といったデータが入ってくると、それぞ
れの文字毎にその存在する範囲を限定して、ポインタの
指すデータ構造をプリントアウトすときには、1つのポ
インタに対して(データの種類の数−1)回のアドレス
の比較が必要となり、実行速度が遅くなる。この点から
も、第2の方法は好ましくない。
【0047】第3の方法は、自動的に文字列を管理する
ことをあきらめて、文字列管理の部分は、ユーザが作成
するというものである。この方法では、プログラムジェ
ネレータ自体は本実施例とまったく同じにできるので、
実行速度やメモリ効率の点では、本実施例に劣ることは
ない。しかし、文字列自体がユーザの書くソースコード
の中に入り、仕様記述の中では、それらの文字列を、識
別子などで指示することになる。つまり、仕様記述の中
に文字列を直接書き込むことはできず、構文解析と構文
に従った動作に関する仕様と、そのときに用いられる文
字列が、離れた位置、たとえば別のファイルなどに置か
れることになる。このことによって、本実施例と比較す
ると、仕様記述の読みやすさが大きく損なわれる。ま
た、使用者が文字列管理部を作成する必要があるため、
開発効率も悪くなる。
ことをあきらめて、文字列管理の部分は、ユーザが作成
するというものである。この方法では、プログラムジェ
ネレータ自体は本実施例とまったく同じにできるので、
実行速度やメモリ効率の点では、本実施例に劣ることは
ない。しかし、文字列自体がユーザの書くソースコード
の中に入り、仕様記述の中では、それらの文字列を、識
別子などで指示することになる。つまり、仕様記述の中
に文字列を直接書き込むことはできず、構文解析と構文
に従った動作に関する仕様と、そのときに用いられる文
字列が、離れた位置、たとえば別のファイルなどに置か
れることになる。このことによって、本実施例と比較す
ると、仕様記述の読みやすさが大きく損なわれる。ま
た、使用者が文字列管理部を作成する必要があるため、
開発効率も悪くなる。
【0048】これに対して、本発明を使用した場合、構
文解析のルールと、文字列合成に用いられる文字列を近
い位置、つまり、ルールのアクションの部分に直接書き
込むことができ、かつ、プログラムジェネレータが文字
列の合成を行なう際にも、識別子、あるいはポインタを
連結することによって、文字列の合成を表現できる。本
発明は、この点において従来例に対して優っている。
文解析のルールと、文字列合成に用いられる文字列を近
い位置、つまり、ルールのアクションの部分に直接書き
込むことができ、かつ、プログラムジェネレータが文字
列の合成を行なう際にも、識別子、あるいはポインタを
連結することによって、文字列の合成を表現できる。本
発明は、この点において従来例に対して優っている。
【0049】また、文字列を扱うための文字列管理部を
自動的に生成し、さらに文字列の連結、出力などの標準
的な手続きを、使用者に対して標準ライブラリとして提
供することにより、利用者は構文解析のためのルール
と、文字列合成のルールを仕様記述のなかに表記するだ
けで、プログラムジェネレータを生成することが可能と
なる。つまり、ユーザプログラム105の内、新規に開
発する部分がなくなり、その開発のための時間を省くこ
とができる。これにより、プログラムジェネレータの開
発効率、保守性を向上させることができる。
自動的に生成し、さらに文字列の連結、出力などの標準
的な手続きを、使用者に対して標準ライブラリとして提
供することにより、利用者は構文解析のためのルール
と、文字列合成のルールを仕様記述のなかに表記するだ
けで、プログラムジェネレータを生成することが可能と
なる。つまり、ユーザプログラム105の内、新規に開
発する部分がなくなり、その開発のための時間を省くこ
とができる。これにより、プログラムジェネレータの開
発効率、保守性を向上させることができる。
【0050】また、図6においてはyaccの標準的な記法
に基づいて、各文法記号の属性値を1つのみとして説明
したが、yaccでは、各文法記号について、その属性値の
データ型を指定することもできる。このデータ型を複数
の要素を持った構造体とすることによって、複数の属性
値を、仕様記述中で用いることも可能である。また、各
文法記号の属性値のデータ型の指定をユーザに行なわせ
ず、生成規則中で指定した属性値を扱えるようにする機
能を持たせることも可能である。
に基づいて、各文法記号の属性値を1つのみとして説明
したが、yaccでは、各文法記号について、その属性値の
データ型を指定することもできる。このデータ型を複数
の要素を持った構造体とすることによって、複数の属性
値を、仕様記述中で用いることも可能である。また、各
文法記号の属性値のデータ型の指定をユーザに行なわせ
ず、生成規則中で指定した属性値を扱えるようにする機
能を持たせることも可能である。
【0051】以上のように本実施例によれば、プログラ
ムジェネレータ生成装置中に文字列抜き出し手段、およ
び文字列管理部生成手段を設けることにより、文字列管
理を行なうプログラムの作成を省き、かつ生成されたプ
ログラムジェネレータにおいての効率の良い文字列合成
を行なうことができ、プログラムジェネレータの開発の
効率を向上させることができる。
ムジェネレータ生成装置中に文字列抜き出し手段、およ
び文字列管理部生成手段を設けることにより、文字列管
理を行なうプログラムの作成を省き、かつ生成されたプ
ログラムジェネレータにおいての効率の良い文字列合成
を行なうことができ、プログラムジェネレータの開発の
効率を向上させることができる。
【0052】(実施例2)以下、本発明の第2の実施例
について、図面を参照しながら説明する。
について、図面を参照しながら説明する。
【0053】図10は本発明の第2の実施例におけるプ
ログラムジェネレータ生成過程とプログラムジェネレー
タ生成装置の構成を示したブロック図である。
ログラムジェネレータ生成過程とプログラムジェネレー
タ生成装置の構成を示したブロック図である。
【0054】図10の構成と図1の構成で異なる要素に
ついて説明する。図10において、1002bは、仕様
記述字句解析手段1002aが生成した字句の並びの中
からファイル挿入命令を検出するファイル挿入命令検出
手段、1002cは、仕様記述の字句の並びの中にファ
イル挿入命令に従って被挿入ファイル1009を挿入す
るファイル挿入手段、1009は、ファイル挿入手段1
002cによって仕様記述の字句の並びの中に挿入され
る被挿入ファイルである。その他は図1と同じである。
ついて説明する。図10において、1002bは、仕様
記述字句解析手段1002aが生成した字句の並びの中
からファイル挿入命令を検出するファイル挿入命令検出
手段、1002cは、仕様記述の字句の並びの中にファ
イル挿入命令に従って被挿入ファイル1009を挿入す
るファイル挿入手段、1009は、ファイル挿入手段1
002cによって仕様記述の字句の並びの中に挿入され
る被挿入ファイルである。その他は図1と同じである。
【0055】上記のように構成されたプログラムジェネ
レータ生成装置について、図11に示すフローチャート
を用いて、その動作を説明する。図11において、ステ
ップ(イ)、ステップ(ニ)、ステップ(ホ)、ステッ
プ(ヘ)は、図2の動作と同様なものである。図2の動
作と異なるのは、ステップ(イ)によって生成された字
句の並びから、ファイル挿入命令を検出し(ステップ
(ロ))、検出されたファイル挿入命令によって指定さ
れたファイルの内容を読みだして、ステップ(イ)で生
成された字句の並びの中に挿入する(ステップ(ハ))
というステップを追加した点である。
レータ生成装置について、図11に示すフローチャート
を用いて、その動作を説明する。図11において、ステ
ップ(イ)、ステップ(ニ)、ステップ(ホ)、ステッ
プ(ヘ)は、図2の動作と同様なものである。図2の動
作と異なるのは、ステップ(イ)によって生成された字
句の並びから、ファイル挿入命令を検出し(ステップ
(ロ))、検出されたファイル挿入命令によって指定さ
れたファイルの内容を読みだして、ステップ(イ)で生
成された字句の並びの中に挿入する(ステップ(ハ))
というステップを追加した点である。
【0056】この処理フローに基づき、図12、図1
3、および図14を参照しながら実際の使用例について
説明する。
3、および図14を参照しながら実際の使用例について
説明する。
【0057】図12は仕様記述1001の一部を示した
図である。図12において、1201は、プログラム変
換の規則の内の1つを示したルールである。
図である。図12において、1201は、プログラム変
換の規則の内の1つを示したルールである。
【0058】図13は、被挿入ファイルを示した図であ
り、図13ーaに示した内容はfile1という名前のファ
イルに、図13ーbに示した内容はfile2という名前の
ファイルに格納されているものとする。
り、図13ーaに示した内容はfile1という名前のファ
イルに、図13ーbに示した内容はfile2という名前の
ファイルに格納されているものとする。
【0059】図14は、本発明を用いた場合に、図12
に示した仕様記述と等価な結果を生じる仕様記述を示し
た図である。
に示した仕様記述と等価な結果を生じる仕様記述を示し
た図である。
【0060】図12において、includeという文字列は
予約語であり、そのあとに続くかっこでくくられた中の
文字列と同じ名前を持ったファイルをその位置に挿入せ
よということを、プログラムジェネレータ生成装置10
02に命令する挿入命令である。
予約語であり、そのあとに続くかっこでくくられた中の
文字列と同じ名前を持ったファイルをその位置に挿入せ
よということを、プログラムジェネレータ生成装置10
02に命令する挿入命令である。
【0061】プログラムジェネレータ生成装置1002
は、この命令を、ファイル挿入命令検出手段1002b
によって検出し、その位置に、指定されたファイルの内
容を挿入する。図12においては、文字列includeが2
回出現するが、その1番目の命令を検出したときには、
file1という名前のファイルを、2番目の命令を検出し
たときには、file2という名前のファイルを挿入する。f
ile1,file2という名前のファイルの内容が、図13に示
すものだったとする。それぞれの内容が、挿入された結
果、仕様記述構文解析手段1002dに渡される字句の
並びは、仕様記述1001として、図14に示した記述
を用いた場合と等しくなる。
は、この命令を、ファイル挿入命令検出手段1002b
によって検出し、その位置に、指定されたファイルの内
容を挿入する。図12においては、文字列includeが2
回出現するが、その1番目の命令を検出したときには、
file1という名前のファイルを、2番目の命令を検出し
たときには、file2という名前のファイルを挿入する。f
ile1,file2という名前のファイルの内容が、図13に示
すものだったとする。それぞれの内容が、挿入された結
果、仕様記述構文解析手段1002dに渡される字句の
並びは、仕様記述1001として、図14に示した記述
を用いた場合と等しくなる。
【0062】図13に示す例ではfile1,file2の内容が
数十文字程度と短いものであるが、高級プログラミング
言語のプログラムを生成するプログラムジェネレータの
仕様を記述する場合には一つの文字列が1000文字を
越える場合があり、このような文字列が仕様記述の中に
入ると、仕様記述が読み難くなり、保守性を悪くする。
また、仕様記述の中で文字列を表記する場合には、改
行を示す文字や、文字列の始まりと終わりを示す文字
は、特別な扱いをしなければならない。これは、C言語
ではエスケープと呼ばれ、特殊な記法を用いて、それら
の文字を表記している。そのため、文字列の内容を理解
するのが難しくなる。よって、このような場合には、別
のファイルに文字列の内容を書いて、仕様記述中にはそ
のファイルを挿入することを示すファイル挿入命令のみ
を書いておくほうが、仕様記述が読みやすくなる。
数十文字程度と短いものであるが、高級プログラミング
言語のプログラムを生成するプログラムジェネレータの
仕様を記述する場合には一つの文字列が1000文字を
越える場合があり、このような文字列が仕様記述の中に
入ると、仕様記述が読み難くなり、保守性を悪くする。
また、仕様記述の中で文字列を表記する場合には、改
行を示す文字や、文字列の始まりと終わりを示す文字
は、特別な扱いをしなければならない。これは、C言語
ではエスケープと呼ばれ、特殊な記法を用いて、それら
の文字を表記している。そのため、文字列の内容を理解
するのが難しくなる。よって、このような場合には、別
のファイルに文字列の内容を書いて、仕様記述中にはそ
のファイルを挿入することを示すファイル挿入命令のみ
を書いておくほうが、仕様記述が読みやすくなる。
【0063】このように、本実施例と従来のものを比較
すると本実施例によるプログラムジェネレータは、仕様
記述が読みやすくなるという点で優れた効果が得られ
る。
すると本実施例によるプログラムジェネレータは、仕様
記述が読みやすくなるという点で優れた効果が得られ
る。
【0064】以上のように本実施例によれば、プログラ
ムジェネレータ生成装置中にファイル挿入命令検出手
段、およびファイル挿入手段を設けることにより、より
読みやすい形態の仕様記述からプログラムジェネレータ
の生成を行なうことができ、プログラムジェネレータの
開発の効率を向上させることができる。
ムジェネレータ生成装置中にファイル挿入命令検出手
段、およびファイル挿入手段を設けることにより、より
読みやすい形態の仕様記述からプログラムジェネレータ
の生成を行なうことができ、プログラムジェネレータの
開発の効率を向上させることができる。
【0065】(実施例3)以下、本発明の第3の実施例
について、図面を参照しながら説明する。
について、図面を参照しながら説明する。
【0066】図15は本発明の第3の実施例におけるプ
ログラムジェネレータ生成過程とプログラムジェネレー
タ生成装置の構成を示したブロック図である。
ログラムジェネレータ生成過程とプログラムジェネレー
タ生成装置の構成を示したブロック図である。
【0067】図15の構成と図10の構成で異なる要素
について説明する。図15において、1502bは、仕
様記述字句解析手段1502aが生成した字句の並びの
中から実行時ファイル挿入命令を検出する実行時ファイ
ル挿入命令検出手段、1502cは、仕様記述の字句の
並びの中に、プログラムジェネレータの実行時に、実行
時被挿入ファイル1509を挿入する手続きを挿入する
ファイル挿入手続き挿入手段、1509は、実行時に出
力ファイル1508の中に挿入される実行時被挿入ファ
イルである。その他は図10の構成と同じである。
について説明する。図15において、1502bは、仕
様記述字句解析手段1502aが生成した字句の並びの
中から実行時ファイル挿入命令を検出する実行時ファイ
ル挿入命令検出手段、1502cは、仕様記述の字句の
並びの中に、プログラムジェネレータの実行時に、実行
時被挿入ファイル1509を挿入する手続きを挿入する
ファイル挿入手続き挿入手段、1509は、実行時に出
力ファイル1508の中に挿入される実行時被挿入ファ
イルである。その他は図10の構成と同じである。
【0068】上記のように構成されたプログラムジェネ
レータ生成装置について、図16に示すフローチャート
を用いて、その動作を説明する。図16において、ステ
ップ(イ)、ステップ(ロ)、ステップ(ニ)、ステッ
プ(ホ)、ステップ(ヘ)は、図11の動作と同様なも
のである。図11の動作と異なるのは、ステップ(イ)
によって検出された実行時ファイル挿入命令を受け取
り、プログラムジェネレータの動作時に、指定されたフ
ァイルの内容を読みだして、出力プログラム中に挿入す
る手続きを、字句の並びの中に挿入する(ステップ
(ハ))というステップを追加した点である。
レータ生成装置について、図16に示すフローチャート
を用いて、その動作を説明する。図16において、ステ
ップ(イ)、ステップ(ロ)、ステップ(ニ)、ステッ
プ(ホ)、ステップ(ヘ)は、図11の動作と同様なも
のである。図11の動作と異なるのは、ステップ(イ)
によって検出された実行時ファイル挿入命令を受け取
り、プログラムジェネレータの動作時に、指定されたフ
ァイルの内容を読みだして、出力プログラム中に挿入す
る手続きを、字句の並びの中に挿入する(ステップ
(ハ))というステップを追加した点である。
【0069】次に、上記構成を用いた場合の効果につい
て、図面を参照しながら説明する。この構成を用いた場
合、実施例2と同様に、図12のように記述された仕様
記述が図14と同様の結果を生じ、より読みやすい仕様
記述を用いてプログラムジェネレータの生成を行なうこ
とができ、プログラムジェネレータの開発の効率を向上
させることができる。さらに、実行時被挿入ファイル1
509は、プログラムジェネレータ1507を生成した
ときではなく、プログラムジェネレータ1507が動作
するときに、出力プログラム1508中に挿入されるた
め、実行時被挿入ファイル1509に変更を加えた場合
に、プログラムジェネレータの生成、コンパイルを再度
行なうことなく、変更を出力プログラム1508に反映
させることができる。
て、図面を参照しながら説明する。この構成を用いた場
合、実施例2と同様に、図12のように記述された仕様
記述が図14と同様の結果を生じ、より読みやすい仕様
記述を用いてプログラムジェネレータの生成を行なうこ
とができ、プログラムジェネレータの開発の効率を向上
させることができる。さらに、実行時被挿入ファイル1
509は、プログラムジェネレータ1507を生成した
ときではなく、プログラムジェネレータ1507が動作
するときに、出力プログラム1508中に挿入されるた
め、実行時被挿入ファイル1509に変更を加えた場合
に、プログラムジェネレータの生成、コンパイルを再度
行なうことなく、変更を出力プログラム1508に反映
させることができる。
【0070】このことによって、プログラムジェネレー
タを開発する際に、実行時被挿入ファイルに変更を加え
るためにに必要な時間を短縮することができ、開発の効
率を向上させることができる。以上のように本実施例に
よれば、プログラムジェネレータ生成装置中に実行時フ
ァイル挿入命令検出手段、およびファイル挿入手続き挿
入手段を設けることにより、より読みやすい形態の仕様
記述からプログラムジェネレータの生成を行なうことが
でき、かつ、挿入されるファイルに変更が生じたときに
もプログラムジェネレータの生成、コンパイルを行なわ
ずに、その変更を出力プログラムに反映させることがで
きるため、プログラムジェネレータの開発の効率を向上
させることができる。
タを開発する際に、実行時被挿入ファイルに変更を加え
るためにに必要な時間を短縮することができ、開発の効
率を向上させることができる。以上のように本実施例に
よれば、プログラムジェネレータ生成装置中に実行時フ
ァイル挿入命令検出手段、およびファイル挿入手続き挿
入手段を設けることにより、より読みやすい形態の仕様
記述からプログラムジェネレータの生成を行なうことが
でき、かつ、挿入されるファイルに変更が生じたときに
もプログラムジェネレータの生成、コンパイルを行なわ
ずに、その変更を出力プログラムに反映させることがで
きるため、プログラムジェネレータの開発の効率を向上
させることができる。
【0071】なお、実施例2の場合と違い、実施例3で
は、プログラムジェネレータ1507の中に、手続きを
挿入しなければならない。手続きは、構文解析部150
3の中に、プログラムとして表現されていてもよいし、
実施例1と同様の方法を用いて、別途、手続きの管理を
行なう部分を生成して、プログラムジェネレータ150
7の中に組み込んでもよい。
は、プログラムジェネレータ1507の中に、手続きを
挿入しなければならない。手続きは、構文解析部150
3の中に、プログラムとして表現されていてもよいし、
実施例1と同様の方法を用いて、別途、手続きの管理を
行なう部分を生成して、プログラムジェネレータ150
7の中に組み込んでもよい。
【0072】(実施例4)以下、本発明の第4の実施例
について、図面を参照しながら説明する。
について、図面を参照しながら説明する。
【0073】図17は本発明の第4の実施例におけるプ
ログラムジェネレータ生成過程とプログラムジェネレー
タ生成装置の構成を示したブロック図である。
ログラムジェネレータ生成過程とプログラムジェネレー
タ生成装置の構成を示したブロック図である。
【0074】図17の構成と図1の構成で異なる要素に
ついて説明する。図17において、1702bは、仕様
記述字句解析手段1702aが生成した字句の並びの中
から文字列置換命令を検出する文字列置換命令検出手
段、1702cは、仕様記述の字句の並びの中に、プロ
グラムジェネレータの実行時に、文字列置換を行なう手
続きを挿入する文字列置換手続き挿入手段である。その
他は図1と同じである。
ついて説明する。図17において、1702bは、仕様
記述字句解析手段1702aが生成した字句の並びの中
から文字列置換命令を検出する文字列置換命令検出手
段、1702cは、仕様記述の字句の並びの中に、プロ
グラムジェネレータの実行時に、文字列置換を行なう手
続きを挿入する文字列置換手続き挿入手段である。その
他は図1と同じである。
【0075】上記のように構成されたプログラムジェネ
レータ生成装置について、図18に示すフローチャート
を用いて、その動作を説明する。図18において、ステ
ップ(イ)、ステップ(ニ)、ステップ(ホ)、ステッ
プ(ヘ)は、図2の動作と同様なものである。図2の動
作と異なるのは、ステップ(イ)によって生成された字
句の並びから文字列置換命令を検出し(ステップ
(ロ))、プログラムジェネレータの動作時に、指定さ
れた文字列置換を行なう手続きを、字句の並びの中に挿
入する(ステップ(ハ))というステップを追加した点
である。
レータ生成装置について、図18に示すフローチャート
を用いて、その動作を説明する。図18において、ステ
ップ(イ)、ステップ(ニ)、ステップ(ホ)、ステッ
プ(ヘ)は、図2の動作と同様なものである。図2の動
作と異なるのは、ステップ(イ)によって生成された字
句の並びから文字列置換命令を検出し(ステップ
(ロ))、プログラムジェネレータの動作時に、指定さ
れた文字列置換を行なう手続きを、字句の並びの中に挿
入する(ステップ(ハ))というステップを追加した点
である。
【0076】この処理フローに基づき、図19、および
図20を参照しながら使用例について説明する。
図20を参照しながら使用例について説明する。
【0077】図19は仕様記述1701の一部を示した
図である。図20は、本発明を用いた場合に、図19に
示した仕様記述と等価な結果を生じる仕様記述を示した
図である。
図である。図20は、本発明を用いた場合に、図19に
示した仕様記述と等価な結果を生じる仕様記述を示した
図である。
【0078】図19において、replaceという文字列は
予約語であり、そのあとに続くかっこでくくられた中の
第1引数の文字列の中の、第2引数の文字列と同じ部分
を、第3引数の文字列で置き換えることを示した、文字
列置換命令である。プログラムジェネレータ生成装置1
702は、この命令を、文字列置換命令検出手段170
2bによって検出し、その位置に、プログラムジェネレ
ータ1707の動作時に、指定された文字列の置換を行
なう手続きを挿入する。
予約語であり、そのあとに続くかっこでくくられた中の
第1引数の文字列の中の、第2引数の文字列と同じ部分
を、第3引数の文字列で置き換えることを示した、文字
列置換命令である。プログラムジェネレータ生成装置1
702は、この命令を、文字列置換命令検出手段170
2bによって検出し、その位置に、プログラムジェネレ
ータ1707の動作時に、指定された文字列の置換を行
なう手続きを挿入する。
【0079】図19において文字列replaceを検出した
ときには、第1引数の文字列の中のFUNCTIONという文字
列を、生成規則の中の、bという文法記号の属性値で置
き換えるための手続きを挿入する。もし、bという文法
記号の属性値が、multiplyという文字列であった場合に
は、文字列FUNCTIONは、文字列multiplyで置き換えられ
るため、図19の仕様記述は、図20の仕様記述と同じ
意味を持つ。
ときには、第1引数の文字列の中のFUNCTIONという文字
列を、生成規則の中の、bという文法記号の属性値で置
き換えるための手続きを挿入する。もし、bという文法
記号の属性値が、multiplyという文字列であった場合に
は、文字列FUNCTIONは、文字列multiplyで置き換えられ
るため、図19の仕様記述は、図20の仕様記述と同じ
意味を持つ。
【0080】本発明の主たる目的である高級プログラミ
ング言語のプログラムを生成するプログラムジェネレー
タの仕様を記述する場合には大量の定型の文字列の中
に、入力プログラムの内容に従って変更したい部分が散
らばっていることが多い。このようなときに、本実施例
のプログラムジェネレータ生成装置では、その変更した
い部分を、特定の文字列にして、大量の文字列全体をま
とめて記述しておいて、文字列置換命令によって、プロ
グラム変換装置の動作時に文字列置換を行なうことがで
き、仕様記述の読みやすさや、開発効率の点で優れた効
果を得ることができる。
ング言語のプログラムを生成するプログラムジェネレー
タの仕様を記述する場合には大量の定型の文字列の中
に、入力プログラムの内容に従って変更したい部分が散
らばっていることが多い。このようなときに、本実施例
のプログラムジェネレータ生成装置では、その変更した
い部分を、特定の文字列にして、大量の文字列全体をま
とめて記述しておいて、文字列置換命令によって、プロ
グラム変換装置の動作時に文字列置換を行なうことがで
き、仕様記述の読みやすさや、開発効率の点で優れた効
果を得ることができる。
【0081】以上のように本実施例によれば、プログラ
ムジェネレータ生成装置中に文字列置換命令検出手段、
および文字列置換手続き挿入手段を設けることにより、
より読みやすい形態の仕様記述からプログラムジェネレ
ータの生成を行なうことができ、プログラムジェネレー
タの開発の効率を向上させることができる。
ムジェネレータ生成装置中に文字列置換命令検出手段、
および文字列置換手続き挿入手段を設けることにより、
より読みやすい形態の仕様記述からプログラムジェネレ
ータの生成を行なうことができ、プログラムジェネレー
タの開発の効率を向上させることができる。
【0082】なお、実施例1から実施例4では、それぞ
れの実施例を独立なものとして説明したが、これらを任
意に組み合わせることにより、より一層の効果を得るこ
とができる。
れの実施例を独立なものとして説明したが、これらを任
意に組み合わせることにより、より一層の効果を得るこ
とができる。
【0083】
【発明の効果】以上のように本発明は、第1に、プログ
ラムジェネレータ生成装置中に文字列抜き出し手段、お
よび文字列管理部生成手段を設けることにより、文字列
管理を行なうプログラムの作成を省き、かつ生成された
プログラムジェネレータにおいての効率の良い文字列合
成を行なうことができ、プログラムジェネレータの開発
の効率を向上させることができる。
ラムジェネレータ生成装置中に文字列抜き出し手段、お
よび文字列管理部生成手段を設けることにより、文字列
管理を行なうプログラムの作成を省き、かつ生成された
プログラムジェネレータにおいての効率の良い文字列合
成を行なうことができ、プログラムジェネレータの開発
の効率を向上させることができる。
【0084】第2に、プログラムジェネレータ生成装置
中にファイル挿入命令検出手段、およびファイル挿入手
段を設けることにより、より読みやすい形態の仕様記述
からプログラムジェネレータの生成を行なうことがで
き、プログラムジェネレータの開発の効率を向上させる
ことができる。
中にファイル挿入命令検出手段、およびファイル挿入手
段を設けることにより、より読みやすい形態の仕様記述
からプログラムジェネレータの生成を行なうことがで
き、プログラムジェネレータの開発の効率を向上させる
ことができる。
【0085】第3に、プログラムジェネレータ生成装置
中にファイル挿入命令検出手段、およびファイル挿入命
令挿入手段を設けることにより、より読みやすい形態の
仕様記述からプログラムジェネレータの生成を行なうこ
とができ、かつ、挿入されるファイルに変更が生じたと
きにもプログラムジェネレータの生成、コンパイルを行
なわずに、その変更を出力プログラムに反映させること
ができるため、プログラムジェネレータの開発の効率を
向上させることができる。
中にファイル挿入命令検出手段、およびファイル挿入命
令挿入手段を設けることにより、より読みやすい形態の
仕様記述からプログラムジェネレータの生成を行なうこ
とができ、かつ、挿入されるファイルに変更が生じたと
きにもプログラムジェネレータの生成、コンパイルを行
なわずに、その変更を出力プログラムに反映させること
ができるため、プログラムジェネレータの開発の効率を
向上させることができる。
【0086】第4に、プログラムジェネレータ生成装置
中に文字列置換命令検出手段、および文字列置換手続き
挿入手段を設けることにより、より読みやすい形態の仕
様記述からプログラムジェネレータの生成を行なうこと
ができ、プログラムジェネレータの開発の効率を向上さ
せることができる。
中に文字列置換命令検出手段、および文字列置換手続き
挿入手段を設けることにより、より読みやすい形態の仕
様記述からプログラムジェネレータの生成を行なうこと
ができ、プログラムジェネレータの開発の効率を向上さ
せることができる。
【図面の簡単な説明】
【図1】本発明の第1の実施例におけるプログラムジェ
ネレータ生成過程とプログラムジェネレータ生成装置の
構成を示したブロック図
ネレータ生成過程とプログラムジェネレータ生成装置の
構成を示したブロック図
【図2】第1の実施例におけるプログラムジェネレータ
生成装置の動作を示すフローチャート
生成装置の動作を示すフローチャート
【図3】第1の実施例のプログラムジェネレータ生成装
置によって生成されたプログラムジェネレータの構成を
示すブロック図
置によって生成されたプログラムジェネレータの構成を
示すブロック図
【図4】第1の実施例のプログラムジェネレータ生成装
置によって生成されたプログラムジェネレータの動作を
示すフローチャート
置によって生成されたプログラムジェネレータの動作を
示すフローチャート
【図5】第1の実施例のプログラムジェネレータ生成装
置によって生成されたプログラムジェネレータ中で用い
られる基本的なデータ構造を示す構造図
置によって生成されたプログラムジェネレータ中で用い
られる基本的なデータ構造を示す構造図
【図6】第1の実施例におけるプログラムジェネレータ
生成装置の入力として用いられる仕様記述を示した図
生成装置の入力として用いられる仕様記述を示した図
【図7】第1の実施例におけるプログラムジェネレータ
生成装置が生成する文字列管理部をC言語で実現したプ
ログラムを示す図
生成装置が生成する文字列管理部をC言語で実現したプ
ログラムを示す図
【図8】第1の実施例におけるプログラムジェネレータ
生成装置が生成するプログラムジェネレータの内部で使
用されるデータ構造の例を示した構造図
生成装置が生成するプログラムジェネレータの内部で使
用されるデータ構造の例を示した構造図
【図9】第1の実施例におけるプログラムジェネレータ
生成装置が生成するプログラムジェネレータの内部で使
用されるデータ構造の例を示した構造図
生成装置が生成するプログラムジェネレータの内部で使
用されるデータ構造の例を示した構造図
【図10】本発明の第2の実施例におけるプログラムジ
ェネレータ生成過程とプログラムジェネレータ生成装置
の構成を示したブロック図
ェネレータ生成過程とプログラムジェネレータ生成装置
の構成を示したブロック図
【図11】第2の実施例におけるプログラムジェネレー
タ生成装置の動作を示すフローチャート
タ生成装置の動作を示すフローチャート
【図12】第2の実施例におけるプログラムジェネレー
タ生成装置の入力として用いられる仕様記述を示した図
タ生成装置の入力として用いられる仕様記述を示した図
【図13】(a)第2の実施例におけるプログラムジェ
ネレータ生成装置が、仕様記述の中に挿入するファイル
のうち、file1という名前が付いたものを示した図 (b)第2の実施例におけるプログラムジェネレータ生
成装置が、仕様記述の中に挿入するファイルのうち、fi
le2という名前が付いたものを示した図
ネレータ生成装置が、仕様記述の中に挿入するファイル
のうち、file1という名前が付いたものを示した図 (b)第2の実施例におけるプログラムジェネレータ生
成装置が、仕様記述の中に挿入するファイルのうち、fi
le2という名前が付いたものを示した図
【図14】図12の仕様記述と等価な結果な結果を生じ
る仕様記述を示した図
る仕様記述を示した図
【図15】本発明の第3の実施例におけるプログラムジ
ェネレータ生成過程とプログラムジェネレータ生成装置
の構成を示したブロック図
ェネレータ生成過程とプログラムジェネレータ生成装置
の構成を示したブロック図
【図16】第3の実施例におけるプログラムジェネレー
タ生成装置の動作を示すフローチャート
タ生成装置の動作を示すフローチャート
【図17】本発明の第4の実施例におけるプログラムジ
ェネレータ生成過程とプログラムジェネレータ生成装置
の構成を示したブロック図
ェネレータ生成過程とプログラムジェネレータ生成装置
の構成を示したブロック図
【図18】第4の実施例におけるプログラムジェネレー
タ生成装置の動作を示すフローチャート
タ生成装置の動作を示すフローチャート
【図19】第4の実施例におけるプログラムジェネレー
タ生成装置の入力として用いられる仕様記述を示した図
タ生成装置の入力として用いられる仕様記述を示した図
【図20】図19の仕様記述と等価な結果な結果を生じ
る仕様記述を示した図
る仕様記述を示した図
【図21】従来のプログラムジェネレータ生成装置の構
成を示したブロック図
成を示したブロック図
101 仕様記述 102 プログラムジェネレータ生成装置 102a 仕様記述字句解析手段 102b 文字列抜き出し手段 102c 文字列管理部生成手段 102d 仕様記述構文解析手段 102e 構文解析表生成手段 102f 構文解析部生成手段 103 構文解析部 104 文字列管理部 105 ユーザプログラム 106 コンパイラ 107 入力プログラム 108 プログラムジェネレータ 109 出力プログラム 301 字句解析部 302 コード生成部 303 データ管理部 304 ライブラリ関数群 501 コンスセル 502 文字列オブジェクト 601 ルール 602 ルール 1001 仕様記述 1002 プログラムジェネレータ生成装置 1002a 仕様記述字句解析手段 1002b ファイル挿入命令検出手段 1002c ファイル挿入手段 1002d 仕様記述構文解析手段 1002e 構文解析表生成手段 1002f 構文解析部生成手段 1003 構文解析部 1004 ユーザプログラム 1005 コンパイラ 1006 入力プログラム 1007 プログラムジェネレータ 1008 出力プログラム 1009 被挿入ファイル 1201 ルール 1501 仕様記述 1502 プログラムジェネレータ生成装置 1502a 仕様記述字句解析手段 1502b 実行時ファイル挿入命令検出手段 1502c ファイル挿入手続き挿入手段 1502d 仕様記述構文解析手段 1502e 構文解析表生成手段 1502f 構文解析部生成手段 1503 構文解析部 1504 ユーザプログラム 1505 コンパイラ 1506 入力プログラム 1507 プログラムジェネレータ 1508 出力プログラム 1509 実行時被挿入ファイル 1701 仕様記述 1702 プログラムジェネレータ生成装置 1702a 仕様記述字句解析手段 1702b 文字列置換命令検出手段 1702c 文字列置換手続き挿入手段 1702d 仕様記述構文解析手段 1702e 構文解析表生成手段 1702f 構文解析部生成手段 1703 構文解析部 1704 ユーザプログラム 1705 コンパイラ 1706 入力プログラム 1707 プログラムジェネレータ 1708 出力プログラム 2101 仕様記述 2102 プログラムジェネレータ生成装置 2102a 仕様記述字句解析手段 2102b 仕様記述構文解析手段 2102c 構文解析表生成手段 2102d 構文解析部生成手段 2103 構文解析部 2104 ユーザプログラム 2105 コンパイラ 2106 入力プログラム 2107 プログラムジェネレータ 2108 出力プログラム
───────────────────────────────────────────────────── フロントページの続き (72)発明者 イバン イ ペッチ 大阪府門真市大字門真1006番地 松下電 器産業株式会社内 (72)発明者 鈴木 芳彦 大阪府門真市大字門真1006番地 松下電 器産業株式会社内 (56)参考文献 佐々政孝 「プログラミング言語処理 系」 岩波書店 (1989) P.293− 305
Claims (4)
- 【請求項1】 生成すべきプログラムジェネレータの仕
様記述を読み込み字句に分解する仕様記述字句解析手段
と、分解して得られた字句の中の文字列を分離して抜き
出す文字列抜き出し手段と、抜き出した文字列の保管場
所を、当該保管場所にユニークな識別子を付与してプロ
グラムジェネレータ中で管理する文字列管理部を生成す
る文字列管理部生成手段と、前記文字列抜き出し手段に
より加工された仕様記述の構文解析を行う仕様記述構文
解析手段と、前記構文解析手段の出力に基づき構文解析
表を生成する構文解析表生成手段と、前記構文解析手段
の出力、および前記構文解析表に基づきプログラムジェ
ネレータ中で構文解析を行なう構文解析部を生成する構
文解析部生成手段を有するプログラムジェネレータ生成
装置。 - 【請求項2】 生成すべきプログラムジェネレータの仕
様記述を読み込み字句に分解する仕様記述字句解析手段
と、分解して得られた字句の中からファイル挿入命令を
検出するファイル挿入命令検出手段と、ファイル挿入命
令に従って指定されたファイルの内容を、プログラムジ
ェネレータ中の文字列管理部の管理する文字列の集合の
中に挿入するファイル挿入手段と前記ファイル挿入手段
により加工された仕様記述の構文解析を行う仕様記述構
文解析手段と、前記構文解析手段の出力に基づき構文解
析表を生成する構文解析表生成手段と、前記構文解析手
段の出力、および前記構文解析表に基づきプログラムジ
ェネレータ中で構文解析を行なう構文解析部を生成する
構文解析部生成手段を有するプログラムジェネレータ生
成装置。 - 【請求項3】 生成すべきプログラムジェネレータの仕
様記述を読み込み字句に分解する仕様記述字句解析手段
と、分解して得られた字句の中からプログラムジェネレ
ータによって、入力プログラムを出力プログラムに変換
する時である実行時に実行される、実行時ファイル挿入
命令を検出する実行時ファイル挿入命令検出手段と、仕
様記述をプログラムジェネレータに変換する時であるプ
ログラム変換時にファイル挿入命令に従って指定された
ファイルの内容を出力プログラム中に挿入する手続き
を、生成されるプログラムジェネレータのプログラム中
に挿入するファイル挿入手続き挿入手段と、前記ファイ
ル挿入手続き挿入手段により加工された仕様記述の構文
解析を行う仕様記述構文解析手段と、前記構文解析手段
の出力に基づき構文解析表を生成する構文解析表生成手
段と、前記構文解析手段の出力、および前記構文解析表
に基づきプログラムジェネレータ中で構文解析を行なう
構文解析部を生成する構文解析部生成手段を有するプロ
グラムジェネレータ生成装置。 - 【請求項4】 生成すべきプログラムジェネレータの仕
様記述を読み込み字句に分解する仕様記述字句解析手段
と、分解して得られた字句の中から文字列置換命令を検
出する文字列置換命令検出手段と、仕様記述をプログラ
ムジェネレータに変換する時であるプログラム変換時に
文字列置換命令に従って文字列置換を行なう手続きを、
生成されるプログラムジェネレータのプログラム中に挿
入する文字列置換手続き挿入手段と前記文字列置換手続
き挿入手段により加工された仕様記述の構文解析を行う
仕様記述構文解析手段と、前記構文解析手段の出力に基
づき構文解析表を生成する構文解析表生成手段と、前記
構文解析手段の出力、および前記構文解析表に基づきプ
ログラムジェネレータ中で構文解析を行なう構文解析部
を生成する構文解析部生成手段を有するプログラムジェ
ネレータ生成装置。
Priority Applications (1)
| Application Number | Priority Date | Filing Date | Title |
|---|---|---|---|
| JP3199407A JP2720643B2 (ja) | 1991-08-08 | 1991-08-08 | プログラムジェネレータ生成装置 |
Applications Claiming Priority (1)
| Application Number | Priority Date | Filing Date | Title |
|---|---|---|---|
| JP3199407A JP2720643B2 (ja) | 1991-08-08 | 1991-08-08 | プログラムジェネレータ生成装置 |
Publications (2)
| Publication Number | Publication Date |
|---|---|
| JPH0546368A JPH0546368A (ja) | 1993-02-26 |
| JP2720643B2 true JP2720643B2 (ja) | 1998-03-04 |
Family
ID=16407286
Family Applications (1)
| Application Number | Title | Priority Date | Filing Date |
|---|---|---|---|
| JP3199407A Expired - Lifetime JP2720643B2 (ja) | 1991-08-08 | 1991-08-08 | プログラムジェネレータ生成装置 |
Country Status (1)
| Country | Link |
|---|---|
| JP (1) | JP2720643B2 (ja) |
-
1991
- 1991-08-08 JP JP3199407A patent/JP2720643B2/ja not_active Expired - Lifetime
Non-Patent Citations (1)
| Title |
|---|
| 佐々政孝 「プログラミング言語処理系」 岩波書店 (1989) P.293−305 |
Also Published As
| Publication number | Publication date |
|---|---|
| JPH0546368A (ja) | 1993-02-26 |
Similar Documents
| Publication | Publication Date | Title |
|---|---|---|
| US6434742B1 (en) | Symbol for automatically renaming symbols in files during the compiling of the files | |
| US20020143823A1 (en) | Conversion system for translating structured documents into multiple target formats | |
| EP0735466A2 (en) | Method and apparatus for displaying locations of errors detected inside software macro calls | |
| US20130152061A1 (en) | Full fidelity parse tree for programming language processing | |
| JPH08202545A (ja) | ターゲット言語コードを生成するためのオブジェクト指向システム及びその方法 | |
| Van Wyk et al. | Waving A Language-Independent WEB. | |
| KR102614967B1 (ko) | 자바스크립트의 중간 언어 기반 의미론 추출 자동화 시스템 및 방법 | |
| US20030115571A1 (en) | Construction of a software application from a plurality of programming languages | |
| Angelov et al. | PGF: A portable run-time format for type-theoretical grammars | |
| Ballance et al. | Grammatical abstraction and incremental syntax analysis in a language-based editor | |
| Wetherell et al. | LR—automatic parser generator and LR (1) parser | |
| Koskimies et al. | The design of a language processor generator | |
| JP2720643B2 (ja) | プログラムジェネレータ生成装置 | |
| Paakki | Prolog in practical compiler writing | |
| Andrews et al. | The formal definition of Modula-2 and its associated interpreter | |
| Minas et al. | Specifying and implementing visual process modeling languages with DiaGen | |
| Cyre et al. | Generating validation feedback for automatic interpretation of informal requirements | |
| JP2675100B2 (ja) | 言語変換器及び言語変換方法 | |
| JP3003459B2 (ja) | プログラム作成支援装置 | |
| Amal et al. | Software tool for translating pseudocode to a programming language | |
| Kirslis | The SAGA editor: a language-oriented editor based on an incremental LR (1) parser | |
| JP2003050700A (ja) | プログラム変換方法 | |
| Tarhio | A compiler generator for attribute evaluation during LR parsing | |
| JP3596570B2 (ja) | クラスの主記憶装置への配置方法 | |
| JP3141945B2 (ja) | コンパイル装置 |