JPH04163625A - ソースコード生成装置 - Google Patents

ソースコード生成装置

Info

Publication number
JPH04163625A
JPH04163625A JP29101390A JP29101390A JPH04163625A JP H04163625 A JPH04163625 A JP H04163625A JP 29101390 A JP29101390 A JP 29101390A JP 29101390 A JP29101390 A JP 29101390A JP H04163625 A JPH04163625 A JP H04163625A
Authority
JP
Japan
Prior art keywords
source code
component
generated
template
name
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
JP29101390A
Other languages
English (en)
Inventor
Masatake Iwata
岩田 正武
Atsushi Kurabe
倉部 淳
Hiroshi Ichiji
伊知地 宏
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.)
Fujifilm Business Innovation Corp
Original Assignee
Fuji Xerox 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 Fuji Xerox Co Ltd filed Critical Fuji Xerox Co Ltd
Priority to JP29101390A priority Critical patent/JPH04163625A/ja
Publication of JPH04163625A publication Critical patent/JPH04163625A/ja
Pending legal-status Critical Current

Links

Landscapes

  • Stored Programmes (AREA)

Abstract

(57)【要約】本公報は電子出願前の出願データであるた
め要約のデータは記録されません。

Description

【発明の詳細な説明】 [産業上の利用分野] この発明は、ワークステーションやパーソナルコンピュ
ータ等を通して設計、編集されたグラフィカル・ニーサ
インターフエースデータから特定プログラミング言語の
ソースコードを生成するに好適なソースコード生成装置
に関する。
[従来の技術] ワークステーションやパーソナルコンピュータ等に視覚
的な操作環境を提供するグラフィカル・ユーザインター
フェース(以下、GUIと略称する)は、これらワーク
ステーションやパーソナルコンピュータ等を通しての知
的生産を著しく高め得る手段或いは技術として、近年、
大いに注目を集めている。
例えば、 ◆rGM、W(ギブ・ミー・モア・ウィンドウス)ウィ
ンドウ・システム上のアプリケーション構築についてJ
大谷浩司 他著 コンピュータソフトウェア Vol、Iγ  No、1   (1990,1,16
)P、45−60◆「ヒユーマンインタフェースの最先
端」日本ソフトウェア科学会 平成2年1月18日発行
P、29−46 7グラフイカルなユーザ・インターフ
ェースとその開発環境について」萩谷昌己著◆rise
r Interrace Management Sy
stems  (ユーザ・インターフェース・マネージ
メント・システムス’) J  G、E、Pf’arf
 (ジー・イー・ファフ)編Springer−Ver
lag  (スプリンガー出版)1983.11..1
3 P、9−20 r Report on Dialog
ue 5pecirication To−ols  
(リポート・オン・ダイアログ・スペンフィケーション
・ツールス) J  M、Green (エム・クリー
ン)著 ◆ r Human−Computer  Inter
face  Development:  c−onc
epts and Systems for Its 
Management (ツユ−マン−コンピュータ・
インターフェース・デヘロップメント:コンセプト・ア
ンド・システムス・フォー・イッツ・マネージメント)
」)1.REX HARTSON  (エイチ・レック
ス・ハートマン)DEBORAHHIX  (デポアー
・ヒックス)共著ACM Computing 5ur
veys  Vol、21  No、I  19g9.
3P、5−92 等々は何れも、GUIについて考察された文献であり、
この他にも、様々な形で、GUIに関する研究や開発が
進められている。
ところで、このようなGUIを実現するためのオブジェ
クトプログラムは通常、 (^)GU1部品か所定に組み合わされたデータとして
構成されるGUIデータをGUI編集装置を通じて設計
、編集する。
(I3)この設計、編集されたGUIデータをソースコ
ード生成装置に読み込んで、特定のプログラミング言語
のソースコードを生成する。
(C)この生成されたソースコードを、上記特定のプロ
グラミング言語用のコンパイラによってコンパイルする
といった手順を経て生成されるが、上記のGUI編集装
置やソースコード生成装置は元来、O8(オペジーテイ
ンクシステム)やプログラミング言語、ライブラリ等々
のGUIを構築する環境に大きく依存しているのか普通
であることから、特にソースコード生成装置に限ってい
っても、(1)上記GUIを構築する環境か異なれば、
ソースコードに埋め込まれるテキストやその形式、順序
等も異なってくることから、これらGUIの構築環境毎
にソースコード生成装置を用意する必要がある。因みに
従来は、ソースコードの出力フォーマットが同装置のソ
ースコード生成プログラムに内蔵されているのが普通で
ある。
(2)上記オブジェクトプログラム内で使用する変数名
もこのソースコード生成装置を通して自動的に生成され
るか、生成されたソースコードを後に人為的に編集しよ
うとした場合、この変数名がとのような目的で使用され
ているか理解しにくい。
すなわち、こうしたソースコード生成装置では、人間か
使用しないような文字列の組合せを選んで上記の変数名
を自動生成することから、変数名の重複はないものの、
その可読性は著しく低いものとなっている。
等々、実用上は、また汎用性を考える場合には、尚多く
の問題を抱えている。
なお、上記ソースコード生成装置やコンパイラの概念に
ついては、例えば ◆「コンパイラの理論と実現」正円、石畑 共著共立出
版 1989年6月 に詳しい。
[発明が解決しようとする課題] 上述のように、従来のGUI開発環境におけるソースコ
ード生成装置あっては、上記(1)〜(2)として挙げ
たような課題を残すものであり、特に現在開発中のもの
も含む多くのGUI開発環境に対応すべく、その汎用性
、並びに実用性を考える上では、これら課題の早急な解
決か望まれる。
この発明は、こうした実情に鑑みてなされたものであり
、いかなるGUI開発環境にあっても、上記の課題を解
決して、汎用性に富み、可読性の高いソースコードを生
成することのできるソースコード生成装置を提供するこ
とを目的とする。
[課題を解決するための手段] こうした目的を達成するために、この発明では、複数の
GU1部品がその属性に従って分類された木構造のデー
タとして表現されるGUIデータから、特定プログラミ
ング言語のソースコードを生成することを前提に、 (a)前記GUIデータを、その構成部品の種類、構成
部品の属性名、及び構成部品の属性値からなるトークン
の列に分解する字句解析手段。
(b)この分解されたトークンの列に基づき、部品の識
別子、部品の名前及び種類、リソースリスト、及びオブ
ジェクトプログラムで使用する変数名によって構成され
るデータテーブルを生成する構文解析手段。
(C)前記生成対象とするソースコードとして直接に付
加される文字列、及び同生成対象とするソースコードと
するために前記生成されるデータテーブルに対して補う
必要のある情報が記述されたテンプレート。
(d)前記生成されるデータテーブルを、前記テンプレ
ートに記述されている情報に基づき変換しかつ、同テン
プレートにより指示される部位に埋め込みつつ、対象と
なるソースコードを生成するコード生成手段。
を少なくとも具えてソースコード生成装置を構成するよ
うにする。
U作用] 上記(C)の態様で必要文字列(テキスト)及び必要情
報が記述されたテンプレートを用意することで、更には
また、上記(d)の態様でこのテンプレートを利用する
コード生成手段を具えることで、上記字句解析手段及び
構文解析手段を通して生成されるデータテーブルであれ
ば、GUI構築環境かとのようなものであれ、その生成
されるソースコードは、対象となるプログラミング言語
の仕様に応じた所定の規則に従ったものとなる。すなわ
ち、GUI構築環境の違いに基つくソースコードの出力
フォーマットの違いといったようなものは上記テンプレ
ートによって吸収されるようになる。
したがって、各GUiの構築環境毎に、それぞれその仕
様に応じた各別のテンプレートを用意しておき、利用す
るGUI構築環境に応じて、それに見合ったテンプレー
トをその都度使い分けるようにすれば、ソースコード生
成装置自体は只1つのもので済むようになる。
なおこれに併せ、上記構文解析手段において、部品の名
前と部品の識別子とをセパレータ(例えば”−°°)に
て結合して前記の変数名を生成するようにすれば、この
生成される変数名を、非常に可読性の高いものとするこ
とができるようにもなる。これによって、上記自動生成
されるソースコードの後の編集やメンテナンスも容易と
なる。
また更に、上記コード生成手段を、 (d−1)生成対象とするソースコードの各々異なる機
能部分について各別にコード生成を行う複数のサブコー
ド生成手段。
(d−2>これら各サブコード生成手段にて生成される
各別のコードを、対象とするプロクラミンク言語の仕様
に応して結合するコードマージ手段。
を具えて構成し、上記テンプレートも、これらサブコー
ド生成手段の別に複数用意するようにすれば、ソースコ
ードの行の並びに対して独立にコードを生成することか
できるようになり、該ソースコード生成装置としての汎
用性も更に高いものとなる。
[実施例] 第1図に、この発明にかかるソースコード生成装置の一
実施例をGUI (クラフィカル・ユーザインターフェ
ース)編集装置とともに示す。
この実施例では便宜上、GUIの部品として、汎用O8
であるUNIX上でのGUI構築環境の1つとしてしら
れているXウィンドウシステム・バージョン11の、A
thena  Widget(アテナ・ウィンエツト)
を使用し、また生成の対象とするソースコードとしては
、C言語で記述されたソースプロクラムとする場合につ
いて説明する。
はじめに、この実施例のソースコード生成装置に読み込
まれるGUIデータの形態について、その大木となる編
集装置との兼ね合いのもとに説明する。
まず、第1図において、GUIIは、表示装置(図示せ
ず)の制御プロクラムとして、この表示装置上にAth
ena  Widgetて定義されたGUI編集用の画
面を視覚的に表示制御するXウィンドウシステムからな
る。そしてこのGUllては、これら表示情報に対する
キーボードやマウスなどの入力袋W(図示せず)を通し
てユーザ入力があった場合、これをイベン]・とじて受
は取って、そのイベント内容を、編集装置2にメツセー
ジとして通知する。編集装置2では、以下に説明する全
ての処理が、このGUII(Xウィンドウシステム)と
の間でのメツセージ通信を通して実行されるようになる
。第2図に、このGUIIによる表示装置を通しての表
示制御画面の一例を示す。
因みにこの第2図に示す画面において、]1は、GU1
部品(widget)表示用のウィンドウであるブラウ
ザエリア、12は、GUIデータの編集(設計)用のウ
ィンドウである編集用エリア、13a、13b及び13
Cは、各々redit(エデイツト)」メニュー、rf
ile(ファイル)」メニュー、及び「main(メイ
ン)」メニューをプルダウン表示させるだめのメニュー
ボタン、14は、上記ブラウザエリア11に所望のGU
1部品を表示させるためのブラウジングボタン、をそれ
ぞれ示している。後に述べるGUIデータの編集(設計
)操作等は、全てこのGUI画面を通じて実行されるよ
うになる。
また、第1図において、上記GUIIを通してユーザ入
力によるイベントが通知される編集装置2は、大きくは
、該通知されるイベントを都度の編集状態に応じて解析
する部分である編集動作解析部21と、上記ブラウザエ
リア]1を通して操作されるGUI部品の管理を主に行
う部分であるブラウザ22と、上記編集用エリア12を
通して設計或いは編集されるGUIデータを管理する部
分である編集データ管理部23とを具えて構成される。
すなわちこの編集装置2では、例えば (1)ブラウザ22によって管理されているGUI部品
が上記ブラウザエリア11を通して指定される。
(2)この指定された部品か該ブラウザエリア11から
上記編集用エリア12の所定位置にマウスによりドラッ
グされるなとして配置される。
といったようなユーザによる編集操作に対し、(3)編
集動作解析部21が、この間のイベントを解析してその
編集内容が「部品の追加」である旨判断し、該編集動作
解析部21から上記編集データ管理部23に対して当該
GU1部品の追加指令を発する。
(4)これを受けた編集データ管理部23か、その時点
で管理している当該編集GUIデータにこの部品の情報
を加えて、これを新たなGUIデータとして管理する。
といったかたちで、ユーザによるGUI編集作業を裏面
から支えるよう動作する。
また第1図において、記憶装置3は、1つには、上記編
集装置2のブラウザ22によって管理されるGU1部品
をはしめ、同編集装置2を通じてこうして編集(設計)
、管理されるGUIデータを格納、保持するための装置
である。この記憶装置3はまた、この実施例のソースコ
ード生成装置における各種作業データの保管装置として
も併せ用いられるが、その詳細については、ソースコー
ド生成装置とともに後に詳述する。
ところで、上記編集装置2では、GUIを構成する各部
品をオブジェクトとして捉えている。このため、これら
部品をクラスという概念で分類することかできるように
なる。ここでいうクラスとは、同じ特徴を持つオブジェ
クトの仕様を定義したものである。
またここでは、オブジェクト指向における継承(1nh
eritance )の考えを取り入れている。こ□れ
により、上記クラスの定義を行うにも、その上位クラス
との差分のみを記述することて足りるようになる。
特に、この編集装置2として、上記のように、編集用エ
リア12(第2図)に呼び出された各GU1部品及びそ
の編集内容をGUIデータとして管理する部分である編
集データ管理部23では、これら各GUI部品をこうし
たオブジェクトとして捉えることにより、同部品をそれ
ら各々の持つ属性に従ってカテゴリに分類し、木構造を
用いて管理している。ここでのカテゴリは、上記クラス
に対応し、下位のカテゴリの定義には、その上位のカテ
ゴリとの差分のみか用いられる。
また、同編集データ管理部23は、上記編集用エリア1
2に呼び出された部品に対して、その各々に個別の識別
子を設定する機能も併せ持つ。これら設定された識別子
の値は、その都度、編集動作解析部21に返されるとと
もに、該編集データ管理部23によって管理されるGU
Iデータ自身にも、それを構成する部品の識別情報とし
て付加されるようになる。
第3図に、こうした編集装置2を通じて編集(設計)さ
れるGUIデータの一例を構造図として示す。
この第3図に例示するデータは、先の第2図においてそ
の編集用エリア12内に参考までに付記した部品をイメ
ージしたものであって、例えば、識別子r6522Jか
付された「Window(ウィンドウ)」部品WWの上
に置かれた◇X座標=100 ◇y座標=200 ◇ラベル表示=” c omma n d”◇ca ]
 1back関数名=100◇識別子=6524 なるrCommand (コマンド)」部品CWを想定
している。
そしてこの部品CWは、同第3図に示されるように、1
つのオブジェクトとして、大きくは「Property
 (資源)」、rldentifier(識別)」、及
びrStruct(構造)」の各要素からなり、更にこ
れら各要素のうちの、rPropertyJ要素か、メ
ジャーなカテゴリ、すなわちrMa jorProps
  (メジャー資源)」として、上記位置の属性r x
 = 1.、 OOJ及びr’y=200Jを含むrG
eometry(幾何)」情報と、マイナーなカテゴリ
、すなわちrMinarProps (マイナー資源)
」として、上記文字列及びcallback関数名の属
性rlabel  (ラベル表示)=Command」
及びrca 11back (ca I 1back関
数名)=fooJを含む情報と、からなり、rlden
tifierJ要素が、当該部品CWの識別情報である
rid (識別子)−6524J、[name (部品
の名前)−commandJ及びl”class (ク
ラス名)−CommandJを含む情報からなり、rs
tructJ要素が、同部品CWの置かれるいわば組部
品としての上記「W i n d o w J部品WW
の識別子rparent (親部品)=6522Jを含
む情報からなる階層構造によって表現されている。
因みに、r P r o p e r t y、J要素
におイテ、上記位置の属性は全ての部品か持つものの、
上記部品上に表示される文字列の属性等は全ての部品が
持つとは限らないことから、すなわち、上記の例のよう
な「コマントホタン」の場合には、こうした文字列の属
性を持つが、「スクロールバー」のような部品の場合に
は、こうした文字列の属性は持たないことから、上記位
置の属性は、全ての部品に通用するメジャーなカテゴリ
としてカテゴリrma jorPropsJに、他方の
文字列等の属性は、全ての部品には通用しないマイナー
なカテゴリとしてカテゴリrminarPropsJに
、それぞれ分類されている。
このように、上記編集装置2を通して編集され、管理さ
れるGUIデータの情報は、第3図に示されるように、
アイテムとそのアイテムの組によって記述される。そし
て上述のように、各アイテムは、類似した性質のもの同
士かカテゴリにまとめられ、更に各カテゴリも、類似し
た種類のもの同士か上位のカテゴリにまとめられる階層
構造となっている。この実施例においては、これをS式
を用いて表記する。
S式とは、人工知能用言語であるrLIsP(リスプ)
」において多く用いられるr Symt+ol 1ce
xpression  (シンボリック・エクスプレッ
ション)」の略である。このS式では、アイテムの構造
を「かっこ0」の組み合せを用いて表記するものであり
、同じ階層にあるアイテムについは、これを同じ組の「
かっこ0」の中に記述し、それより1つ下の階層にある
アイテムについては、これを上位の「かりこ0」の中に
包含される別の組の「かっこ0」の中に記述することで
、その階層構造を表現するようにしている。
例えば、第3図に例示される上記の部品の情報は、該S
式によって、 (#0bject (#Property (ll14aj□rProps (llGeometry (@X  $100) (@y  $200) (ttMinarProps (@1abel  $Command)(@callb
ack  !1iroo)($1dHtiNer (@id  $6524) (@name  $coIImand)(@class
  $Command)(#5truct (@parent  $6522) )                        
、、、(1)のように表記されることとなる。
このように、編集(設計)されるGUIデータを、S式
によって汎用的に表記される階層構造にを用いて管理し
、保存するようにすることで、GUl環境によって限定
されない、より汎用性に富んた情報管理が実現されるよ
うになる。
なお、上記部品CWの置かれるいわば親部品としての上
記rWindowJ部品WWは、同S式%式% ($Geometry (@width  $300) (@height  $400) ($Ider+tHier (lid  $6522) (@name  $5hell) (@class  $5hell) (#5truct (@parent  NULi、) )                   、、、(2
)のように表記されているとする。
さて、この実施例によるソースコード生成装置は、この
ようにS式によって表記され、記憶装置3上に保存され
るGUI編集データを読み込んで、これからC言語で記
述されたソースプログラムを生成するものである。
第1図に併せ示すように、このソースコード生成装置は
、上記読み込んたデータを、部品の属性名、部品の属性
値、及び部品のクラスからなるトークンの列に分解する
字句解析部4]と、この分解されたトークンの列から、
部品の識別子、部品のクラス名、部品の名前、部品の属
性(リソースリスト)、及び生成目的とするプログラム
で使用する変数名により構成されるデータテーブルを生
成する構文解析部42と、この生成されたデータテーブ
ルを、上記記憶装置3上に予め用意されたテンプレート
31に記述されている情報に基づき変換しかつ、同テン
プレート31により指示される部位に埋め込みつつ、対
象となるソースコードを生成するコード生成手段と、を
具えて構成される。テンプレート31には、生成対象と
するソースコードとして直接に付加される文字列(テキ
スト)、及び同生成対象とするソースコードとするため
に上記生成されたデータテーブルに対して補う必要のあ
る情報かそれぞれ記述されているものとする。
以下、これら各部の具体的な機能、並びに動作について
、第4図〜第10図を併せ参照して順次詳述する。
まず、字句解析部41ては上記のように、(1)式、或
いは(2)式として表記されるような編集データを記憶
装置3から読み込んで、これをトークンの列に分解する
。ここで分解されるトークンは、rLBRANCH(左
かっこ)」、rRBRANCH(右かっこ)」、rKE
Y(構造を示す名前)」、rLITERAL (オブジ
ェクトの属性値)」、及びrlDENT (オブジェク
トの属性名)」を単位としたものである。
因みに上記(1)式或いは(2)式において、HtJで
始まる文字列は「KEY(構造を示す名前)」であり、
「@」で始まる文字列はrl DENT(オブジェクト
の属性名)」であり、「$」で始まる文字列はrLIT
ERAL (オブジェクトの属性値)」である。したが
って、第4図に(A)として示す上記(1)式にて表記
される部品の場合には、この字句解析部41による上記
処理によって、同第4図(B)に示されるように、r 
(J、r#0bjectJ、  「(J、r#P ro
pertyJ、「(」、r#MajorPr。
psJ、「(」、r#Ge ome t r yJ、「
(」、「@X」、r$1.00)J、「(」、「@y」
、r$200)J、「)」、「(」、「#MinarP
ropsJ、「(」、r@1abelJ、r$comm
and)J、「(」、r@ca11backJ、r$f
oo)J、「)」、「)」、「)」、「(」、r#Id
entifierJ、「(」、r@idJ、r$652
4)J、「(」、r@nameJ、r$ c omma
 n d)J、「(」、r@classJ、r$com
mand)J、F)」、r(J、r#5tructJ、
r(J、r@parentJ、r$ 6522J、「)
」、「)」及び「)」といったトークンの列に分解され
ることとなる。こうして分解されたトークンの列は配列
に格納される。
こうして、字句解析部41による分解を終えると、次の
構文解析部42ては、これらトークンが格納されている
配列を受は取って、上記のように、部品の識別子、部品
のクラス名、部品の名前、リソースリスト、及びプログ
ラムの中で使われる変数名、の各フィールドを持つ第4
図(C)に示されるようなデータテーブルを記憶装置3
上に生成する。
ここで、該構文解析部42による上記変数名の生成手順
について、第5図を併せ参照しつつ説明する。
先にも述べたように、従来のソースコード生成装置にお
いても、こうした変数名を自動生成する機能はあったが
、これらは何れも、通常人間が使用しないような文字列
の組合せを選んで変数名とすることから、確かに変数名
の重複はないものの、その可読性は著しく低いものとな
っていた。
そこでこの実施例のソースコード生成装置では、上記部
品の名前とGUIデータ編集時に設けられた上記識別子
とを有効利用して、構文111部42を通した以下に列
記する手順によって、可読性の高い変数名を自動生成す
るようにしている。
すなわち構文解析部42ては、 (1)上記配列を受は取るとまず、部品の識別子を決定
するために、属性の名前「1d」の値を取り出し、これ
を当該部品の識別子として上記データテーブルの「識別
子」のフィールドに格納する。
第4図に示す例においては、値r6524jか取り出さ
れ、これが「識別子」のフィールドに格納される。
(2)次いで、同配列から属性の名前rclassJの
値を取り出し、これを当該部品のクラス名として上記デ
ータテーブルの「クラス名」のフィールドに格納する。
第4図に示す例においては、値rcommandJが取
り出され、これか「クラス名」のフィールドに格納され
る。
(3)同様に、配列から属性の名前1”ylameJの
値を取り出し、これを当該部品の名前として上記データ
テーブルの「部品の名前」のフィールドに格納する。第
4図に示す例においては、値rc。
mmandJか取り出され、これが「部品の名前」のフ
ィールドに格納される。
といった一連の処理の後、同データテーブルの「変数名
」のフィールドに格納すべく値を生成するために、同第
4図に示す例においては、上記属性の名前rnameJ
の値である「command」と、上記属性の名前ri
 dJの値である「6524」とを、該構文解析部42
内に定義されている変数名生成関数に渡す。
これにより変数名生成関数では、 (4) convertedlD=convert(i
d)を呼び、上記識別子ridJの値r6524Jを文
字列に変換してこれを変数converted IDに
代入する(第5図ステップ511)。
(5)次に、strcat(vidgetName、”
−”)を呼び)変数wldgetNameに上記部品の
名前rnameJの値rcommandJに応じたrc
ommand  Jを代入する。すなわち、こうした文
字列結合関数によって、「部品の名前」の後にセパレー
タ「−」か付加されるかたちとなる(第5図ステップ5
12)。
(6)最後に、文字列結合関数sLrcaL(widg
etfJamc。
converted 10)を呼び、これら代入した文
字列[Command  J及びr6524Jを結合し
て、変数名rcommand  6524Jを生成する
(第5図ステップ513)。
といった手順にて変数名を生成し、この生成した変数名
rcommand  6524JをtM文解析部42に
返す。
構文解析部42ては、こうして返された変数名rcom
mand  6524Jを、上記生成するデータテーブ
ルの「変数名」のフィールドに加えて(格納して)、そ
の処理を終える。
このように、この実施例によれば、部品の名前と部品の
識別子とをセパレータにて結合してオブジェクトプログ
ラムで使用する変数名を生成するようにしていることか
ら、自動生成されたソースコードを後に人為的に編集す
る場合でも、そこで使われている変数名の用途等につい
ては、容易に理解することかできるようになる。また、
変数名の一部として、部品毎に各別の値として付される
識別子を用いていることから、同一の変数名か重複して
生成されることもない。
こうして構文解析部42を通してデータテーブルか生成
されると、コード生成部43では、記憶装置3上に用意
されている上記テンプレート31を用いて、この生成さ
れたデータテーブルに応したc言語ソースコードを生成
する。
コード生成部43は、第6図に示すように、Ca1lb
ackサブコ一ド生成部431、resourceサブ
コード生成部432.1ncludeサブコ一ド生成部
433、widget  varサブコード生成部43
4、及びwidgetcreateサブコード生成部4
35の5つのサ生成−435部と、これらサブコード生
成部431〜435を通じて生成されるサブコードを所
定に結合して、上記所望とされるソースコードを最終的
に出力するコードマージ部430と、を具えて構成され
る。
ca I 1backサブコ一ド生成部431は、記憶
装置3上に用意されたテンプレート31のうちの第1テ
ンプレート31aに記述されている情報に基つき、上言
己構文解析部24にて生成されたデータテーブル(第4
図(C)参照)から、callback(コールバック
)関数のプログラムのみについてそのソースコードを生
成する部分てあり、resourceサブコード生成部
432は、同テンプレート31のうちの第2テンプレー
ト31bに記述されている情報に基づき、同データテー
ブルから、resource (リソース)のプログラ
ムのみについてそのソースコードを生成する部分であり
、1ncludeサブコ一ド生成部433は、同テンプ
レート31のうちの第3テンプレート31Cに記述され
ている情報に基づき、同データテーブルから、1ncl
ude (インクルート)のプログラムのみについてそ
のソースコードを生成する部分であり、w i d g
 e を−varサブコード生成部434は、同テンプ
レート31のうちの第4テンプレート31dに記述され
ている情報に基つき、同データテーブルから、widg
et  (ライシェツト:部品)変数の宣言のプログラ
ムのみについてそのソースコードを生成する部分であり
、そしてwidget  createサブコード生成
部43生成部間35プレート31のうちの第5テンプレ
ート31. eに記述されている情報に基づき、同デー
タテーブルから、部品の生成に関するプロクラムのみに
ついてそのソースコードを生成する部分である。これら
各サブコード生成部によるソースコード生成手順を第7
図に示す。
すなわち、上記第1〜第5テンプレート31a〜31e
は、前述のように、各々割り当てられたプログラムにつ
いて、そのソースプログラムに直接出力される情報とこ
れに補充する必要のある情報とが所定の形式で記述され
たファイルであり、これらサブコード生成部431〜4
35ては何れも、各々対象となるテンプレートへの記述
情報に基つき、また、上記生成されたデータテーブルに
基づき、以下に列記する手順をもって、その割り当てら
れたソースコード(サブコード)を生成する。
(1)まず、対象となるテンプレートを読み込む(第7
図ステップ521)。
(2)この読み込んだテンプレートに記述されている情
報を解釈して、補充しなければならない情報を生成する
のに必要なデータをリストアツブする(第7図ステップ
522)。
(3)上記データテーブルから該当するデータを取り出
す(第7図ステップ823)。
(4)この取り出したデータを、上記テンプレートに記
述されている情報に基づき、そこで指定されている形式
の情報に変換する(第7図ステップ524)。
(5)この変換した情報を、当該テンプレートの指定さ
れている部分に埋め込む(第7図ステップ525)。
第8図は、上記各テンプレート31a〜31eについて
その具体例を例示したものであり、また第9図は、これ
らテンプレート318〜3 ]、 eに基づく上記各サ
ブコード生成部431〜435のソースコード(サブコ
ード)生成出力例を示したものであり、以下、これら第
8図及び第9図を対比しつつ、上記各サブコード生成部
によるソースコード生成処理を更に具体的に説明する。
なお、この例においては、上記テンプレートに記述され
る情報のうち、補充しなければならない情報については
これを、文字列「〈$」と文字列「$〉」とによって囲
んで定義するものとする。
いま、構文解析部42によって生成された上記データテ
ーブルがコード生成部43に渡されたとすると、cal
lbackサブコード生成部431は、第8図(a)に
示される内容を有する第1テンプレート31aを読み込
んで、コールバック関数のプログラムについてそのソー
スコードの生成を開始する。
この際、該callbackサブコード生成部431で
は、上記データテーブル(第4図(C)参照)の「リソ
ースリスト」フィールドから属性の名前rca l 1
backJの属性値rfooJを取り出し、上記第1テ
ンプレート3]aのコールバック関数理め込み指定部分
である <$ f’unc  name $> の部分に、この取り■したrfooJを埋め込む。
そして、この第1テンプレート31aにrfooJを埋
め込み生成したコードを、rcallbackサブコー
ド」としてコードマージ部430に出力する(第9図(
a)参照)。
また、同データテーブルかコード生成部43に渡される
と、resourceサブコード生成部432は、第8
図(b)に示される内容を有する第2テンプレート31
bを読み込んで、リソースのプログラムについてそのソ
ースコードの生成を開始する。
コノ際、該r e S Ou r Ceサブコード生成
部432ては、上記データテーブル(第4図(C)参照
)の「リソースリスト」フィールドから属性の名前rx
Jとその属性値「]C0」、属性の名前「y」とその属
性値「200」、属性の名前rlabelJとその属性
値rcommandJ、及び同部品の識別名「comm
andJをそれぞれ取り出し、上記第2テンプレート3
1bの($  Identifier    name
  S>の部分に、識別名rcommandJを、<$
  resource    name  $>の部分
に、上記各属性の名前rxJ、ryJ、rlabelJ
を、また <$  resource    value  $>
の部分に、上記各属性の値rloOJ、r200J、r
CommandJをそれぞれ埋め込む。そして、この第
2テンプレート31bにこれら各要素を埋め込み生成し
たコードを、rresourceサブコード」としてコ
ードマージ部430に出力する(第9図(b)参照)。
同じく、コード生成部43にデータテーブルか渡される
と、1ncludeサブコ一ト生成部433は、第8図
(c)に示される内容を有する第3テンプレート31C
を読み込んで、インクルートプログラムについてそのソ
ースコードの生成ヲ開始する。
この際、該inc 1udeサブコ一ト生成部433て
は、同データテーブル(第4図(C)参照)の「クラス
名」フィールドから当該部品のクラス名rcomman
dJを取り出し、」二記第3テンプレート31Cの <$  Header  Widget  C1ass
  $>の部分に、この取り出したクラス名rComm
andJを埋め込む。そして、この第3テンプレート3
1cにrCommandJを埋め込み生成したコードを
、「ine 1udeサブコード」としてコードマージ
部430に出力する(第9図(C)参照)。
同しく、widget  Varサブコード生成部43
4は、データテーブルがコード生成部43に渡されると
、第8図(d)に示される内容を有する第4テンプレー
ト3 ]、 dを読み込んて、widget変数の宣言
のブロクラムについてそのソースコードの生成を開始す
る。
この際、該widget  varサブコード生成部4
34ては、同データテーブル(第4図(C)参照)の「
変数名」フィールドから部品を保持する変数名rcom
mand  6524Jを取り出し、上記第4テンプレ
ート31dの <$  variable    name  $>の
部分に、この取り出した変数名rcommand  6
524Jを埋め込む。そして、この第4テンプレート3
1dにrcommand  6524Jを埋め込み生成
したコードを、r w i d g e を−varサ
ブコード」としてコードマージ部430に出力する(第
9図(d)参照)。
そして、widget  createサブコード生成
部435は、データテーブルかコード生成部43に渡さ
れると、第8図(e)に示される内容を有する第5テン
プレート31eを読み込んで、部品の生成のプロクラム
についてそのソースコードの生成を開始する。
この際、該widget  createサブコード生
成部435では、同データテーブル(第4図(C)参照
)の「クラス名」のフィールドから当該部品のクラス名
[commandJを、「部品の名前」のフィールドか
ら当該部品の名前「CommarrdJを、「変数名」
フィールドから当該部品の変数名rcommand  
6524Jをそれぞれ取り出すとともに、同データテー
ブルの「リソースリスト」のフィールドの属性名「pa
ren tJの属性値によって案内されるデータテーブ
ル、すなわち前記(2)式にて表記されるとする親部品
のオブジェクトから第4図に示した例と同様に生成され
るデータテーブル(図示せず)の「変数名」のフィール
ドから親部品の変数名rshe l l  6522J
を取り出し、これら取り出した各データ要素を上記第5
テンプレート31eの各々指定される部分に埋め込む。
なお、第8図(e)に示すこの第5テンプレート31e
において、文字列「$$」で囲まれた部分は条件式であ
って、この場合、「classJがrshell」であ
る場合には、前半の XtAppContext app  con;<$ 
vartable  name $> −XtAppi
nitialize(&app   con、  ”(
$  widget    name  $>”、NU
LL、  ZERO。
&argc、 argv、 fallback  re
sources、 NULL、、ZERO)。
と記述された部分を使い、それ以外の場合には、後半の ($  variable    name  $> 
 −XtCreateManagedνidget(”
<$  widget   name  $>”、  
($  vidget  −C1ass  $>Wid
getCIass、  <$  parent   v
ariable  $>、  NULL、ZERO)。
と記述された部分を使うことを意味する。ここでの例で
は、[classjがrcommandJとなっている
ことから、後者の部分か使われる。
したがってこの例の場合、widget  creat
eサブコード生成部435ては、該第5テンプレート3
1eにおける後半部分の <$ variable  name $>の部分に、
当該部品の変数名rcommand−6524Jを、 <$  widget    nan+8  $>の部
分に、当該部品の名前「commandJを、また <$  widget    class  $>の部
分に、当該部品のクラス名rcommandJを、そし
て <$  parent    variable  $
>の部分に、親部品の変数名rshe 11 6522
Jをそれぞれ埋め込む。そして、この第5テンプレート
31eにこれら各要、素を埋め込み生成したコードを、
rwidget  createサブコード」としてコ
ードマージ部430に出力する(第9図(e)参照)。
これら各サブコード生成部による以上のサブコード生成
処理は、前記(2)式にて表記されるとした親部品のオ
ブジェクトに対しても同様に実施される。
これらの各サブコードが人力されるコードマージ部43
0は、上述のように、これらサブコードを所定に結合し
て、上記所望とされるソースコードを出力する部分てあ
り、具体的には、以下の手順によって、第10図に示さ
れるような08語のソースプログラムを最終的に生成し
、この生成したコードを記憶装置3に出力する。
(1)includeサブコード生成部433によって
生成された第9図(C)に示される1ncludeサブ
コードと、callbackサブコード生成部431に
よって生成された第9図(a)に示されるcallba
ckサブコードとをマージして、第10図(a)に示さ
れるようなコールバック関数のソースプロクラムを生成
する。
(2)この生成したソースプロクラムを記憶装置3に出
力する。
(3)includeサブコード生成部433によって
生成された第9図(C)に示される1ncladeサブ
コードと、resourceサブコード生成部432に
よって生成された第9図(b)に示されるresour
ceサブコードと、widget  varサブコード
生成部434によっで生成された第9図(d)に示され
るw i d g et  varサブコードと、wi
dget  createサブコード生成部43生成上
435成された第9図<e)に示されるwidget 
 createサブコードとをマージするとともに、C
言語の予約語である main(argc、 argv) int argc: char Hargv: を追加して、第10図(b)に示されるような部品(W
idget)を生成するプログラムのツースコードを生
成する。
(4)この生成したソースプログラムを記憶装置3に出
力する。
なお、第10図(b)に示すソースプログラムにおいて
、 Widget 5hell  6522;は、上記親部
品のオブジェクトに関してv/ i d get  v
arサブコード生成部434か生成したwidget 
 varサブコードの部分てあり、また XtAppContext app  con;5he
ll   8522=XtApplnitialize
(&app   6on。
”sh  elF、 NUI、L、 ZERO,&ar
gc、 argv、  fallback    re
   5ources、  NULL、  ZERO)
;は、同じく上記親部品のオブジェクトに関してWid
get  createサブコード生成部434が生成
したwidget  createサブコ−トの部分で
ある。
このように、この実施例によるソースコード生成装置で
は、上記コード生成部43を、生成対象とするソースコ
ードの各々異なる機能部分について各別にコード生成を
行う複数の(上記の例では5つの)サブコード生成部と
、これら各サブコード生成部にて生成される各別のコー
ドを、対象とするプログラミング言語の仕様に応じて結
合するコードマージ部とを具えて構成するとともに、上
記テンプレート31も、これらサブコード生成部の別に
、各々それに見合ったものを複数用意するようにしたこ
とから、上記のように、ソースコードの行の並びに対し
て独立に所望のコードを生成して、これを任意に結合す
ることができるようになる。このため、GUI環境や生
成の対象となるソースプログラムの言語仕様が異なる場
合であっても、具体的には、ソースプログラムに埋め込
まれるテキストの順の等が異なる場合であっても、従来
のように、これらGUI環境や言語仕様の別にソースコ
ード生成装置を用意する必要はなくなり、該ソースコー
ド生成装置としての汎用性も著しく高められるようにな
る。
なお、上記の実施例では便宜上、Xウィンドウシステム
・バージョン11の、Athena  Widget 
 (アテナ・ライジェット)を使用し、また生成の対象
とするソースコードとしては、C言語で記述されたソー
スプログラムとする場合について説明したが、この発明
にかかるソースコード生成装置が、こうした環境やO3
(オペレーティングシステム)、更には言語仕様に限定
されるものでないことは勿論である。
また、このソースコード生成装置において読み込み対象
とするGUI編集データも、必ずしも前述した8式を用
いて表記する必要はない。要は、当該GUIデータをオ
ブジェクトの集合として捉えてこれらを所要に分類でき
、その各要素の属性等を的確に表すことのできる表記方
法であれば、すなわち、その字句解析並びに構文解析を
通して、第4図(C)に例示した態様に準した形でのデ
ータテーブル生成を可能とする表記方法であればよい。
たたしこの場合、その表記方法と字句並びに構文解析方
法との対応を新たに定義する必要はある。
[発明の効果] 以上説明したように、この発明によれば、生成対象とす
るソースコードとして直接に付加される文字列、及び同
生成対象とするソースコードとするために構文解析され
た内容に対して補う必要のある情報か記述されたテンプ
レートを設け、このテンプレートを通して、異なるGU
I構築環境間における異なるコード生成要素を吸収する
ようにしたことから、各種のGUI構築環境に対し汎用
的に、目的とされるプログラムのソースコードを生成す
ることができるようになる。
【図面の簡単な説明】
第1図は、この発明にかかるソースコード生成装置の一
実施例をGUI編集装置とともに示すブロック図である
。 第2図は、GUI編集装置における編集画面の一例を示
す平面図である。 第3図は、上記のGUI編集装置で編集され、上記実施
例ソースコード生成装置に読み込まれるGUI部品情報
の管理構造について、その−例を模式的に示す略図であ
る。 第4図は、同実施例ソースコード生成装置による字句解
析処理及び構文解析処理を通して生成されるトークンの
列及びデータテーブルについて、その−例を模式的に示
す略図である。 第5図は、同実施例ソースコード生成装置による変数名
生成手順を例示するフローチャートである。 第6図は、同実施例ソースコード生成装置のコード生成
部について、その具体構成と記憶装置との係わりを示す
ブロック図である。 第7図は、上記コード生成部を構成する各サブコード生
成部のソースコード(サブコード)生成手順を示すフロ
ーチャートである。 第8図は、上記記憶装置上に用意されるテンプレートの
具体例を示す略図である。 第9図は、この第8図に示されるテンプレートに基つき
上記各サブコード生成部か生成するサブコード例を示す
略図である。 第10図は、この実施例ソースコード生成装置によって
最終的に生成出力されるソースコード(ソースプログラ
ム)の−例を示す略図である。 1、、、GUI、2.、、編集装置、21 、、、編集
動作解析部、22 、、、ブラウザ、23.、、編集デ
ータ管理部、31.記憶装置、319.テンプレート、
4゜、 ソースコード生成装置、4191字句解析部、
42、 構文解析部、43.、、コード生成部、430
 、、、コードマージ部、431〜4351. サブコ
ード生成部。 第5図 第7図

Claims (3)

    【特許請求の範囲】
  1. (1)複数のグラフィカル・ユーザインターフェース部
    品がその属性に従って分類された木構造のデータとして
    表現されるグラフィカル・ユーザインターフェースデー
    タから、特定プログラミング言語のソースコードを生成
    するソースコード生成装置であって、 前記グラフィカル・ユーザインターフェースデータを、
    その構成部品の種類、構成部品の属性名、及び構成部品
    の属性値からなるトークンの列に分解する字句解析手段
    と、 この分解されたトークンの列に基づき、部品の識別子、
    部品の名前及び種類、リソースリスト、及びオブジェク
    トプログラムで使用する変数名によって構成されるデー
    タテーブルを生成する構文解析手段と、 前記生成対象とするソースコードとして直接に付加され
    る文字列、及び同生成対象とするソースコードとするた
    めに前記生成されるデータテーブルに対して補う必要の
    ある情報が記述されたテンプレートと、 前記生成されるデータテーブルを、前記テンプレートに
    記述されている情報に基づき変換しかつ、同テンプレー
    トにより指示される部位に埋め込みつつ、対象となるソ
    ースコードを生成するコード生成手段と、 を具えるソースコード生成装置。
  2. (2)前記構文解析手段は、前記部品の名前と前記部品
    の識別子とをセパレータにて結合して前記オブジェクト
    プログラムで使用する変数名を生成する 請求項(1)記載のソースコード生成装置。
  3. (3)前記コード生成手段は、 前記生成対象とするソースコードの各々異なる機能部分
    について各別にコード生成を行う複数のサブコード生成
    手段と、 これら各サブコード生成手段にて生成される各別のコー
    ドを、対象とするプログラミング言語の仕様に応じて結
    合するコードマージ手段と、を具えて構成され、 前記テンプレートは、前記サブコード生成手段の別に複
    数用意される 請求項(1)記載のソースコード生成装置。
JP29101390A 1990-10-29 1990-10-29 ソースコード生成装置 Pending JPH04163625A (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP29101390A JPH04163625A (ja) 1990-10-29 1990-10-29 ソースコード生成装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP29101390A JPH04163625A (ja) 1990-10-29 1990-10-29 ソースコード生成装置

Publications (1)

Publication Number Publication Date
JPH04163625A true JPH04163625A (ja) 1992-06-09

Family

ID=17763331

Family Applications (1)

Application Number Title Priority Date Filing Date
JP29101390A Pending JPH04163625A (ja) 1990-10-29 1990-10-29 ソースコード生成装置

Country Status (1)

Country Link
JP (1) JPH04163625A (ja)

Cited By (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7124371B1 (en) 1999-08-03 2006-10-17 Fujitsu Limited GUI screen generating apparatus, GUI screen generating method and storage medium recording GUI screen generating program
US7530024B2 (en) 1993-07-30 2009-05-05 Canon Kabushiki Kaisha System using icons representative for controlling data input and output relationship between a network of multimedia devices
JP2014526081A (ja) * 2011-06-29 2014-10-02 マイクロソフト コーポレーション 事前に構築されたコントロールを用いた論理の作成

Cited By (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7530024B2 (en) 1993-07-30 2009-05-05 Canon Kabushiki Kaisha System using icons representative for controlling data input and output relationship between a network of multimedia devices
US7124371B1 (en) 1999-08-03 2006-10-17 Fujitsu Limited GUI screen generating apparatus, GUI screen generating method and storage medium recording GUI screen generating program
JP2014526081A (ja) * 2011-06-29 2014-10-02 マイクロソフト コーポレーション 事前に構築されたコントロールを用いた論理の作成

Similar Documents

Publication Publication Date Title
Ziadi et al. Software product line engineering with the UML: Deriving products
CA2819008C (en) Method and system for displaying selectable autocompletion suggestions and annotations in mapping tool
US20160041815A1 (en) Computer Source Code Generator for Building Software Applications
US20040060037A1 (en) Method for gesture based modeling
JP2008512794A (ja) オブジェクト処理グラフアプリケーション開発システム
US20060107220A1 (en) Method and system for displaying an annotated file
Koivunen et al. HutWindows: an improved architecture for a user interface management system
JPH04163625A (ja) ソースコード生成装置
JP2007011507A (ja) プログラムツリーの表示方法、およびプログラム生成システム
Vitzthum SSIML/AR: A visual language for the abstract specification of augmented reality user interfaces
JPH064280A (ja) ウィズィウィグ式エディターでオブジェクトをユーザ制御する機能を備えたグラフィカル・ユーザ・インターフェース
Shershakov Vtmine for visio: A graphical tool for modeling in process mining
Klein et al. Constructing SDEs with the IPSEN meta environment
Nassar et al. Code generation in VUML profile: A model driven approach
Noble et al. Functional languages and graphical user interfaces: a review and a case study
Esbai et al. Model-driven transformation for gwt with approach by modeling: From uml model to mvp web applications
Filipović et al. Application of Kroki mockup tool to implementation of executable CERIF specification
JPH0683594A (ja) ウィズィウィグ式エディターとコンパイラーとを統合したグラフィカル・ユーザ・インターフェース
Phillips Lean Cuisine+: an executable graphical notation for describing direct manipulation interfaces
Bergel et al. Meta-driven browsers
Mitchell et al. DRIVE: an environment for the organised construction of user-interfaces to databases
Börstler et al. Bridging the gap between Requirements Engineering and Design
JPH0612250A (ja) 視覚的プログラミング方法
Powell Strongly typed user interfaces in an abstract data store
JP2001134423A (ja) 対話型既存システムを利用する新システムの画面情報出力方法