JPH0695890A - コンパイラにおける名前置換方式 - Google Patents

コンパイラにおける名前置換方式

Info

Publication number
JPH0695890A
JPH0695890A JP26799892A JP26799892A JPH0695890A JP H0695890 A JPH0695890 A JP H0695890A JP 26799892 A JP26799892 A JP 26799892A JP 26799892 A JP26799892 A JP 26799892A JP H0695890 A JPH0695890 A JP H0695890A
Authority
JP
Japan
Prior art keywords
name
variable
rule
code
program
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Pending
Application number
JP26799892A
Other languages
English (en)
Inventor
Yoshimi Miyazaki
義実 宮崎
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.)
Toyo Communication Equipment Co Ltd
Original Assignee
Toyo Communication Equipment Co Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Toyo Communication Equipment Co Ltd filed Critical Toyo Communication Equipment Co Ltd
Priority to JP26799892A priority Critical patent/JPH0695890A/ja
Publication of JPH0695890A publication Critical patent/JPH0695890A/ja
Pending legal-status Critical Current

Links

Landscapes

  • Devices For Executing Special Programs (AREA)

Abstract

(57)【要約】 【目的】 局所変数を利用したルールプログラムが所望
の動作をするようコンパイルするためのコンパイラにお
ける名前置換方式を提供する。 【構成】 プログラム中の変数名、関数名等の名前を抽
出する名前抽出手段と、前記抽出した名前を格納する名
前表と、前記名前表に格納されている名前に対応する対
応名を作成する対応名作成手段とを有し、前記対応名と
前記名前表に格納されている名前のお互いの対応関係か
ら、前記プログラムにおける名前を対応名に置換する。

Description

【発明の詳細な説明】
【0001】
【産業上の利用分野】本発明はプログラム中の変数名、
関数名等の名前を他の名前に置換するコンパイラにおけ
る名前置換方式に関し、特にプロダクションシステム構
築に用いるルールコンパイラにおける名前置換方式に関
する。
【0002】
【従来技術】プロダクションシステムとはIF〜THE
N〜の形で記述されるプロダクションルール(以下単に
ルールと称する)から成るルールプログラムを用いるシ
ステムであり、通常の手続き型の言語ではプログラミン
グが複雑かつ面倒な処理をいとも簡単に記述できる。そ
の動作の基本はルールとデータであるWMEの照合を行
い、その結果ルールの条件部とマッチするWMEがあれ
ばそのルールとWMEの組をインスタンシェーションと
し、該ルールを選択の候補として競合集合を作るもので
ある。更に競合集合中の1つをある基準に従って選択
し、該ルールの動作部に記述してある動作を実行し、こ
れら一連の動作を繰り返して所望の処理を行うものであ
る。
【0003】ルールプログラムの実行は、ルールプログ
ラム専用計算機を用いる他、従来のノイマン型計算機を
用いて行う場合も多い。そのいずれの場合でも、ルール
コンパイラを用いてルールプログラムを計算機が実行可
能な機械語に変換する。図5は従来のルールコンパイラ
の一例を示す図である。同図において1はルールプログ
ラムのソースコードであり、ルールコンパイラ2に前記
ソースコード1を入力し、ルールコンパイラ2はターゲ
ットマシン3にて実行可能なオブジェクトコード4を出
力する。また、図6は従来のルールコンパイラの他の例
であり、ルールコンパイラ5はソースコード6をまず中
間コード7に変換し、該中間コード7をコンパイラある
いはアセンブラ8にてコンパイル/アセンブルすること
によってターゲットマシン9の実行可能なオブジェクト
コード10を得る。
【0004】ところで、ルールプログラムにおいても変
数が用いられ、全域変数と局所変数とがあることは手続
きプログラムと同様である。全域変数はその値が常に保
持され、またプログラム中の全ての箇所から参照可能で
あるので、プログラム内でのデータのやりとりが多いも
のに使用する。プロダクションシステムにおけるWME
はその値が常に保持され、プログラム中の全ての箇所か
ら参照されるので広い意味では全域変数であるが、ここ
ではWMEは全域変数から除外して考える。
【0005】局所変数は有効範囲の動作が終了するとそ
の値を保持しないので、変数の記憶領域の増加を防ぐ。
また有効範囲外からは参照不可であるので、プログラム
中で同一の名前を二度以上宣言して複数の箇所で使用す
ることができる。
【0006】ルールプログラムにおける局所変数の有効
範囲は一つのルールであるから、ルールコンパイラの出
力するオブジェクトコードの内部で一つのルールに対応
する部分を局所変数の有効範囲とすればよい。この有効
範囲をブロックという。
【0007】しかしながら従来のルールコンパイラでは
次のような問題があった。
【0008】即ち、一つのルールに対して一つのブロッ
クが現れ、オブジェクトコード中に現れるブロック数は
最大ではルールの数となる。ところが中間言語としてC
言語を使用すると、扱えるブロック数に制限があるた
め、ルール数を増やせないという問題があった。
【0009】この問題を避けるには、実際は局所変数で
あるにも拘らず、C言語に変換する際に全て全域変数と
して宣言を行えばよい。しかしこの場合、本来はブロッ
ク毎に値が異なるべき複数の同一名の変数が全て同じ値
となってしまう。その結果、プログラムが所望の動作を
しないという問題があった。
【0010】同一の変数を複数回宣言することはC言語
の文法上の誤りではないのでエラーとして検出されな
い。このため実際に機械語に変換してプログラムを動作
させるまでこのような問題の存在に気がつかず、デバッ
グ作業、コンパイル作業、実行等に多くの工数を要して
いた。
【0011】
【発明の目的】本発明は上述した問題を解決するために
なされたものであって、局所変数を利用したルールプロ
グラムが所望の動作をするようコンパイルするためのコ
ンパイラにおける名前置換方式を提供することを目的と
する。
【0012】
【発明の概要】この目的を達成するため、本発明に係る
コンパイラの名前置換方式は、以下のように構成する。
【0013】即ち、プログラム中の変数名、関数名等の
名前を抽出する名前抽出手段と、前記抽出した名前を格
納する名前表と、前記名前表に格納されている名前に対
応する対応名を作成する対応名作成手段とを有し、前記
対応名と前記名前表に格納されている名前のお互いの対
応関係から、前記プログラムにおける名前を対応名に置
換する。
【0014】また、第2の発明においては前記名前の有
効範囲がプログラム中で限定されている場合に、当該有
効範囲の最初に前記名前の定義を無効とするコードを挿
入し、次に前記名前を対応表に格納されている名前で新
たに定義し直すコードを挿入し、ソースプログラム中の
名前そのものは置換しない。
【0015】そして第3の発明では変数、関数等の宣言
時にその名前を置換するか否かの指定を同時に行うこと
を特徴とする。
【0016】
【実施例】以下、図示した実施例に基づき本発明を詳細
に説明する。
【0017】図1は本発明の名前置換方式の一実施例を
示すブロック図である。同図において11は予約語と非
予約語とからなるルールプログラムのソースコードであ
り、ルールコンパイラ12に入力される。ルールコンパ
イラ12は字句解析部13、構文解析部14によって前
記ソースコード11の中から非予約語からなる変数名を
抽出する。15は名前表であり、字句解析部13、構文
解析部14が抽出した名前を格納する。16は対応名作
成手段であり、前記名前表15に格納されている名前に
対応する名前を作成し、該対応名を対応表17に格納す
る。18はコード生成部であり、前記名前表15及び対
応表17のお互いの名前の対応関係から、前記ソースコ
ード11の変数名を対応表17に格納されている名前に
置換した上で、中間コード19を出力する。
【0018】次に、図1における動作を説明する。
【0019】まず、字句解析部13、構文解析部14は
ソースプログラム11の内容を解析しながら、変数名を
抽出し、該変数名は抽出される度に名前表15に格納さ
れる。対応名作成手段16は変数名が抽出される毎にこ
れに対応する新たな名前を作成し、対応表17に格納す
る。対応名作成手段16の作成する名前は全て異なるよ
うにする。例えばベースとなる名前に順番に数値を加え
ていけば全て異なる名前が作られ、ベースをvとすれば
変数名が出現する毎にv1、v2、………という名前が
対応表17に格納されていく。そして、コード生成部1
8は前記名前表15及び対応表17のお互いの名前の対
応関係から、前記ソースコード11における変数名を対
応表17に格納されている名前に置換した上で、中間コ
ード19を出力する。
【0020】このようにすれば局所変数名は全域変数名
として宣言されるものの、その全てが異なった名前に置
換される。つまりソースコード11の複数箇所で同一の
局所変数の名を宣言していたとしても、中間コード19
ではそれらは異なる全域変数名となる。従って、複数の
同一名の変数が全て同じ値となるという問題はなくな
る。その結果、実際に動作させて初めて所望の動作をし
ないことに気づくということはなくなり、プログラムの
デバッグ作業が容易になる。
【0021】図2はソースコードと中間コードの具体例
であり、20はソースコード、21は中間コードであ
る。ソースコード20において22で示す部分は第1の
ルール、23で示す部分は第2のルールであり、その両
方でPARTという整数型の局所変数を使用している
(図中24、25)。IF以下は条件部、THEN以下
は動作部であり、動作部についての記述は省略してい
る。中間コード21において26で示す部分は第1のル
ールに対応する出力、27で示す部分は第2のルールに
対応する出力である。ソースコード20中の局所変数宣
言24、25は各々28、29に示すように全域変数v
1、v2として宣言される。それと共に30、31で示
す第1のルールの変数PARTは32、33に示すよう
にv1と置換され、34、35で示す第2のルールの変
数PARTは36、37に示すようv2と置換される。
従って第1のルールで使用する局所変数PARTと第2
のルールで使用する局所変数PARTは別の変数に置換
されるため、両者を全域変数として宣言できる。
【0022】しかし、変数名が全て置換されてしまう
と、デバッグの際にソースコードにおける変数名と中間
コードにおける変数名の対応が瞬時に分からず、対応表
17を参照しつつデバッグをする必要がある。
【0023】そこで、第2の実施例では変数名そのもの
を置換せずに、局所変数を用いたルールプログラムを中
間コードに変換する。即ち、前記全域変数は元々局所変
数であるから、その有効範囲は一つのルール内に限定さ
れていることに着目し、当該有効範囲の最初に前記変数
名の定義を無効とするコードを挿入し、次に前記変数名
を対応表に格納されている対応名で新たに定義し直すコ
ードを挿入することにより、ソースプログラム中の変数
名そのものは置換しない。
【0024】図3は名前そのものは置換しない場合の実
施例における中間コードの具体例である。
【0025】中間コード38において第1のルールに対
応する出力コードの最初の部分から局所変数PARTの
有効範囲とする。もし、この箇所以前にPARTという
変数名が使用されていれば、これを無効とするために3
9に示すコードを挿入する。このコードは変数名PAR
Tを無効とするC言語のコードである。
【0026】次にPARTを定義し直すために40に示
すコードを挿入する。このコードは変数名PARTをv
1と定義するC言語のコードである。第2のルールに関
しても同様のコードを挿入する。
【0027】以上のようなコードを挿入すれば、出力さ
れる中間コードの変数名が変わらないので、デバッグ時
に変数の参照が容易に行うことができ、更に効率よくデ
バッグを行うことができる。
【0028】ところで、中間コードとして出力されたC
ソースコードと、ルールプログラム以外のC言語ソース
コード等をリンクして実行形式のオブジェクトコードを
得ることができるが、その場合ルールプログラムで使用
する変数名と、それ以外のモジュールで使用する変数名
とが一致しなければお互いに参照ができない。上述の実
施例では変数名を全て置換しているため、ルールプログ
ラム中の変数名と、それ以外のモジュールで使用する変
数名とが一致しなくなってしまう。
【0029】その場合は、局所変数の宣言時にその名前
を置換するか否かの指定を同時に行えばよい。
【0030】図4は指定した名前のみを置換する場合の
例である。同図において41はソースコード、42は中
間コード、43は他にリンクするC言語のソースコード
である。
【0031】例えばルールプログラムの第1のルールと
その他のモジュールの両方でPARTという局所変数を
参照したい場合は、44に示すようにEXTERNとい
うコードを用いて宣言をする。字句解析部13と構文解
析部14はEXTERNなる予約語が変数名を置換しな
い旨の指定であると解釈し、対応名作成部16は対応名
を作成せず、コード生成部18は元の変数を置換せずに
そのまま出力する。中間コード42において、第1のル
ールの局所変数はexternというコードを用いない
ため、全てv1という名前に置換されるが、第2のルー
ルの局所変数は置換されない。
【0032】このようにすればルールプログラムとそれ
以外のモジュールとをリンクすることができる。また、
局所変数でありながら複数の特定箇所で同時に参照する
ことも可能となる。
【0033】本発明は以上の他、種々変形してもよい。
【0034】上記3つの実施例では本発明をルールコン
パイラに適用した例を説明したが、ルールコンパイラに
限らず手続き型言語のコンパイラに適用してもよい。
【0035】変数名を置換する例を説明したが、変数名
に限らず関数名等の置換に適用してもよい。
【0036】対応名の作成方法としてベースとなる名前
にvを用いたが、この名前は何でもよい。また、全ての
対応名が異なるのであればベースと番号から成る名前に
する必要はなく、順にA、B、C………という対応名と
してもよいし、同じ変数名の宣言ができた場合にのみ新
たな名前を作成して、それ以外の場合は対応名は元の名
前のままとしてもよい。
【0037】名前抽出手段である構文解析部と字句解析
部は一体となっていてもよい。
【0038】対応表に対応名を格納するとしたが、後に
対応関係を知る必要がなければ変数名が現れる毎に順次
コードを生成していき、対応表を作成しなくてもよい。
【0039】
【発明の効果】本発明は上述したように構成し、動作す
るものであるから、局所変数を利用したルールプログラ
ムが所望の動作をするようコンパイルするためのコンパ
イラを提供する上で著しい効果がある。
【図面の簡単な説明】
【図1】本発明の第1の実施例を示すブロック図であ
る。
【図2】本発明の第1の実施例におけるソースコードと
中間コードの例である。
【図3】名前そのものは置換しない場合における中間コ
ードの例である。
【図4】指定した名前のみを置換する場合におけるソー
スコードと中間コードの例である。
【図5】ルールコンパイラの一例を示す図である。
【図6】ルールコンパイラの他の例を示す図である。
【符号の説明】
11 ルールプログラムのソースコード、12 ルール
コンパイラ、13 字句解析部、14 構文解析部、1
5 名前表、14 構文解析部、16 対応名作成手
段、17 対応表、18 コード生成部、

Claims (3)

    【特許請求の範囲】
  1. 【請求項1】 プログラム中の変数名、関数名等の名前
    を抽出する名前抽出手段と、前記抽出した名前を格納す
    る名前表と、前記名前表に格納されている名前に対応す
    る対応名を作成する対応名作成手段とを有し、前記対応
    名と前記名前表に格納されている名前のお互いの対応関
    係から、前記プログラムにおける名前を対応名に置換す
    ることを特徴とするコンパイラにおける名前置換方式。
  2. 【請求項2】 前記名前の有効範囲がプログラム中で限
    定されている場合に、当該有効範囲の最初に前記名前の
    定義を無効とするコードを挿入し、次に前記名前を対応
    表に格納されている名前で新たに定義し直すコードを挿
    入し、ソースプログラム中の名前そのものは置換しない
    ことを特徴とする請求項1記載のコンパイラにおける名
    前置換方式。
  3. 【請求項3】 変数、関数等の宣言時にその名前を置換
    するか否かの指定を同時に行うことを特徴とする請求項
    1又は2記載のコンパイラにおける名前置換方式。
JP26799892A 1992-09-10 1992-09-10 コンパイラにおける名前置換方式 Pending JPH0695890A (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP26799892A JPH0695890A (ja) 1992-09-10 1992-09-10 コンパイラにおける名前置換方式

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP26799892A JPH0695890A (ja) 1992-09-10 1992-09-10 コンパイラにおける名前置換方式

Publications (1)

Publication Number Publication Date
JPH0695890A true JPH0695890A (ja) 1994-04-08

Family

ID=17452495

Family Applications (1)

Application Number Title Priority Date Filing Date
JP26799892A Pending JPH0695890A (ja) 1992-09-10 1992-09-10 コンパイラにおける名前置換方式

Country Status (1)

Country Link
JP (1) JPH0695890A (ja)

Cited By (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2008243019A (ja) * 2007-03-28 2008-10-09 Toshiba Corp ソースコード変換装置及びソースコード変換方法
JP2009086898A (ja) * 2007-09-28 2009-04-23 Delta Electronics Inc プログラム可能な論理制御装置用マシーンコード・プログラムのコンパイル法
JP2009169846A (ja) * 2008-01-18 2009-07-30 Fujitsu Ltd コマンド文構築プログラム,処理方法,および処理装置

Cited By (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2008243019A (ja) * 2007-03-28 2008-10-09 Toshiba Corp ソースコード変換装置及びソースコード変換方法
JP2009086898A (ja) * 2007-09-28 2009-04-23 Delta Electronics Inc プログラム可能な論理制御装置用マシーンコード・プログラムのコンパイル法
JP2009169846A (ja) * 2008-01-18 2009-07-30 Fujitsu Ltd コマンド文構築プログラム,処理方法,および処理装置

Similar Documents

Publication Publication Date Title
USRE38104E1 (en) Method and apparatus for resolving data references in generated code
US5819097A (en) Industrial controller compiler with expandable instruction set
US20080104096A1 (en) Software development system
US5367683A (en) Smart recompilation of performing matchup/difference after code generation
US6425124B1 (en) Resource allocation device for reducing the size and run time of a machine language program
US20150020051A1 (en) Method and apparatus for automated conversion of software applications
US20040010780A1 (en) Method and apparatus for approximate generation of source code cross-reference information
US6256782B1 (en) Compile apparatus, compile method and computer-readable medium storing compiler
JPH0695890A (ja) コンパイラにおける名前置換方式
US7603661B2 (en) Parse table generation method and system
JPH09218789A (ja) 分割コンパイル方式
JPH07271606A (ja) プログラム翻訳装置
JPS6022373B2 (ja) プログラマブル制御装置のプログラム変換機構
JP2827724B2 (ja) プログラムデバッグ処理方法
JPH11154093A (ja) プログラムコンパイラ及びコンパイラ用プログラムを記録した記録媒体
JP3114199B2 (ja) 言語処理システムのリスト出力方式
JPH06266562A (ja) オブジェクト指向言語処理システムにおける目的コードサイズ最適化方式
JPH05120025A (ja) ソースプログラムのインライン展開方法
JP2009515243A (ja) ホストコンピュータ上で実行可能なシミュレーションプログラムを生成する方法
JPH0566929A (ja) コンパイラの再コンパイル時間の短縮方式
JPS6326730A (ja) プログラム修正方式
JPS62166432A (ja) プログラム翻訳制御方式
Robinson Towards a Programming System
JPH0371229A (ja) プログラム制御装置
JPH05204705A (ja) 未定義変数検出処理方法