JP5966801B2 - 言語変換装置、プログラム - Google Patents
言語変換装置、プログラム Download PDFInfo
- Publication number
- JP5966801B2 JP5966801B2 JP2012206144A JP2012206144A JP5966801B2 JP 5966801 B2 JP5966801 B2 JP 5966801B2 JP 2012206144 A JP2012206144 A JP 2012206144A JP 2012206144 A JP2012206144 A JP 2012206144A JP 5966801 B2 JP5966801 B2 JP 5966801B2
- Authority
- JP
- Japan
- Prior art keywords
- node
- language
- conversion
- child
- function
- 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.)
- Active
Links
- 238000006243 chemical reaction Methods 0.000 claims description 114
- 230000006870 function Effects 0.000 claims description 106
- 238000012545 processing Methods 0.000 claims description 87
- 238000006467 substitution reaction Methods 0.000 claims description 6
- 238000000034 method Methods 0.000 description 45
- 230000008569 process Effects 0.000 description 35
- 229920003266 Leaf® Polymers 0.000 description 24
- 230000008707 rearrangement Effects 0.000 description 13
- 238000007796 conventional method Methods 0.000 description 8
- 230000009466 transformation Effects 0.000 description 7
- 238000012217 deletion Methods 0.000 description 2
- 230000037430 deletion Effects 0.000 description 2
- 230000001419 dependent effect Effects 0.000 description 2
- 238000010586 diagram Methods 0.000 description 2
- 238000004891 communication Methods 0.000 description 1
- 230000000694 effects Effects 0.000 description 1
- 238000005516 engineering process Methods 0.000 description 1
- 230000010365 information processing Effects 0.000 description 1
- 230000004044 response Effects 0.000 description 1
- 239000007858 starting material Substances 0.000 description 1
- 238000000547 structure data Methods 0.000 description 1
- 238000002910 structure generation Methods 0.000 description 1
Landscapes
- Devices For Executing Special Programs (AREA)
Description
しかし、上記方式により演算を行うには、命令スタックとデータスタックという構成が必要となり、これらの構成と備えない装置では実行が困難、または、前記方式をエミュレーションするため性能が低下するという問題があった。その問題を解決するために、関数型言語を手続型言語に変換して、手続型言語(たとえばC言語)で実行する方式が提案されていた(特許文献4)。
図14に示すツリー構造は、図13に示す配列順に従って、順次、この配列の各要素から図14に示す各ノードを生成していくことで作成される。図14に示す各ノードは、“ノードの名称”、“インスタンス名”、“子供ノードへのポインタ”、“次のノードへのポインタ”の各データ項目から成る。
関数型言語は全ての関数に値を持ち、関数の引数に関数を記述することが可能であるため、条件分岐(たとえばIF〜THEN〜ELSE〜END_IF)を行ない、その結果をさらに、条件に用いる記述を簡単に行うことが可能である。
本発明の課題は、関数型制御言語プログラムを手続型言語プログラムに変換することができ、命令スタックとデータスタックを待たない手続き形の命令処理を行うことができると共に、特に条件分岐を有する関数型制御言語プログラムについて、関数型制御言語の条件分岐命令を適切な構文に変換することができ、余分な実行や一時変数を作成することもなく効率的な実行が実現できる言語変換装置、プログラム等を提供することである。
上記構成の言語変換装置において、例えば、前記識別子は、前記手続型言語における代入先とし、前記識別子付与手段によって前記同一の識別子の付与が行われていることによって、前記thenに係る前記代入先と、前記elseに係る前記代入先とに、同一の識別子が用いられる。
図1は、本例の言語変換装置の構成・機能ブロック図である。
図示の本例の言語変換装置10によれば、関数型制御言語(FCL)を手続型言語(C言語など)に変換することができ、命令スタックとデータスタックを待たない手続き形の命令処理を行うことができると共に、特に条件分岐を有するFCLプログラム等について、FCLの条件分岐命令を適切な構文に変換することができ、余分な処理実行を行うことが無くなり、余分な一時変数を作成することもなく、効率的な実行が実現できるようにすることが可能となる。
図3と図4とを比較すれば明らかなように、両者の相違はインスタンス名である。すなわち、図3に示すように(そして、特許文献4に記載のように)、従来ではインスタンス名はユニークな存在であり、従って複数のノードに同一のインスタンス名が付与されるようなことはない。これに対して、図4に示すように、本例の場合、複数のノードに同一のインスタンス名が付与されることも有り得る。
以下、上述した各種機能部について、具体例も参照しながら、更に詳細に説明する。
二次元構造(ツリー)変換部12は、関数型言語(FCL)格納部11に格納される上記配列の各要素(本例ではFCLコード)を順次読み出して、上記ツリー構造を生成する(但し、未だインスタンス名は無い)。本処理は、例えば特許文献4に記載のように、関数開始子(開き括弧“(”)、関数終了子(閉じ括弧“)”)、オペランド(括弧以外)等に基づいて、例えば下記の手法により実現できる。
尚、NULLの設定方法は、一例を上記したが、他の例については特許文献4に記載されており、ここでは省略する。尚、図3、図4において、斜線がNULLを意味している。よって、例えば図上右上角に示す“b”のノードの場合には、“インスタンス名”、“子供ノードへのポインタ”、“次のノードへのポインタ”の3つの項目にNULLが設定されていることになる。
図6は全体フローチャート図、図7〜図9は図6の各処理の詳細フローチャート図である。
そして、上記ツリー構造の先頭ノードに、走査位置(例えば上記“現在処理中ノード”を示すポインタ等)をセットする(ステップS3)。そして、この走査位置を末端方向へ向けて順次移動させながら(“現在処理中ノード”を順次変えながら)、子供ノードがリーフだけであるノードを探索する(ステップS4)。ステップS4の処理の詳細は、図8に示し、後に説明する。
図7の処理では、ツリー構造の先頭から各ノードを順次“現在処理中ノード”として、現在の“現在処理中ノード”が、条件分岐の関数(ここでは“(IF”)に係るノードである場合には(ステップS21,YES)、このノードの子供ノードの数をカウントし(ステップS22)、子供ノードが2個であるか否かを判定する(ステップS23)。
図8の処理では、現在、走査位置があるノード(“現在処理中ノード”)について、この“現在処理中ノード”の最初の子供ノード(“子供ノードへのポインタ”が示すノード)に走査位置をセットした後(つまり、当該最初の子供ノードを、新たな“現在処理中ノード”とする)(ステップS41)、ステップS42以降の処理を繰り返す。
図9は、上記ステップS5の「検索されたノード位置を手続型言語に変換する」処理の詳細フローチャート図である。
then部;
} 』
これによって、上記の例の場合、下記の変換結果が得られて、これが手続型言語格納部17に出力されて書き込まれることになる。尚、上記一時的に記憶してあった変換結果は、手続型言語格納部17に出力したら削除する。
INST_5 := a−b
}
そして、変換対象ノードに3番目の子供ノードが無い場合には(ステップS53、NO)、そのまま本処理を終了する(但し、未処理部分があるならばステップS51に戻る)。
子供ノードの内容
} 』
これによって、上記の例の場合、下記の変換結果が得られて、これが手続型言語格納部17に出力されて書き込まれることになる。
INST_5 := b−a
} 』
尚、ステップS52、S54の処理において、任意の変換結果を雛形に当て嵌めた直後に、更に、次の変換結果も参照して、当該次の変換結果に、上記雛形に当て嵌めた変換結果における代入先のインスタンス名が含まれている場合には、更に当該次の変換結果も続型言語格納部17に出力して書き込むようにしてもよい。
if(INST_5 = 10)
の部分が生成されるが、その際、更に、2番目の子供ノードに係わる上記変換結果である「INST_7 := a*a」を参照して、これに上記INST_5が含まれているか否かを判定する。この場合は、含まれていないので、何も行わない。
INST_7 := a*a;
の部分が生成されるが、その際、更に、その次の変換結果である「INST_6 := (c:=INST_7)」を参照して、これに上記INST_7が含まれているか否かを判定する。この場合は含まれているので、「INST_6 := (c:=INST_7)」も更に出力する。
if(INST_5 = 10){
INST_7 := a*a;
INST_6 := (c:=INST_7);
の部分が、生成されることになる。
尚、この場合、上記ステップS53の「変換対象ノードに3番目の子供ノードがある場合には(ステップS53,YES)」は、例えば、それまでにn番目の子供ノードに係わる変換結果を出力した場合に、「変換対象ノードにn+1番目の子供ノードがある場合には(ステップS53,YES)」に置き換えるものとする。
11 関数型言語(FCL)格納部
12 二次元構造(ツリー)変換部
13 二次元構造格納部
14 関数名−インスタンス名作成部
15 インスタンス名管理部
16 命令並び換え部
17 手続型言語格納部
Claims (8)
- 関数型言語で記述された制御処理プログラムを、手続型の命令処理を行う装置で実行可能な言語形式のプログラムである手続型言語プログラムに変換する言語変換装置において、
前記関数型言語で記述された制御処理プログラムにおける関数又はオペランドの各要素の配列を記憶した関数型言語記憶手段と、
前記配列の各要素を順次取得し、該各要素に応じたノードと該ノード間のリンクから成るツリー構造を生成するツリー構造作成手段と、
前記ツリー構造中のノードは、子供ノードを持たないノードであるリーフと、該リーフ以外のノードである子持ノードとから成り、該ツリー構造中の各ノードのうち該子持ノードにユニークな識別子を付与すると共に、条件分岐の関数に係わるノードの子供ノードには、同一の識別子を付与する識別子付与手段と、
前記識別子を付与後の前記ツリー構造の各ノードに基づいて前記手続型言語への変換を行う手段であって、変換対象ノードが前記条件分岐の関数に係わるノードである場合には、予め登録されている条件分岐処理に係る所定の雛形を用いて前記手続型言語プログラムの生成を行う変換手段と、
を有することを特徴とする言語変換装置。 - 前記所定の雛形は、if〜then〜else文であり、
前記変換手段は、前記条件分岐の関数に係わるノードの各子供ノードに係わる前記手続型言語への変換結果を、前記所定の雛形の該当箇所に当て嵌めることで、前記手続型言語プログラムの生成を行うことを特徴とする請求項1記載の言語変換装置。 - 前記識別子は、前記手続型言語における代入先とし、
前記識別子付与手段によって前記同一の識別子の付与が行われていることによって、前記thenに係る前記代入先と、前記elseに係る前記代入先とに、同一の識別子が用いられることを特徴とする請求項2記載の言語変換装置。 - 前記識別子付与手段は、前記条件分岐の関数に係わるノードの複数の子供ノードのうちの2番目と3番目のノードに、同一の識別子を付与することを特徴とする請求項1〜3の何れかに記載の言語変換装置。
- 前記変換手段は、
そのノードの子供ノードが前記リーフしかないノードを、前記変換対象ノードとし、
変換対象ノードが前記条件分岐の関数に係わるノード以外のノードである場合には、該変換対象ノードに係る前記関数について、該変換対象ノードの子供ノードに係る前記オペランドまたは前記識別子を引数として用いて、該変換対象ノードの識別子を代入先とする命令文の生成を行って一時的に記憶すると共に、該変換対象ノードの全ての子供ノードを削除することで変換対象ノードを前記リーフとすることを特徴とする請求項2記載の言語変換装置。 - 前記変換手段は、前記一時的に記憶された各命令文を、前記条件分岐の関数に係わるノードの各子供ノードに係わる前記手続型言語への変換結果として、前記所定の雛形の該当箇所に当て嵌めると共に、前記一時的に記憶された命令文全てを消去することを特徴とする請求項5記載の言語変換装置。
- 前記ノードは、ノード名称、識別子、子供ノードへのポインタ、親ノードが同一である他のノードをポイントする次ノードへのポインタの各項目を有し、
前記ツリー構造作成手段は、
前記配列から取得した要素が任意の関数である場合には、該関数の名称を前記ノード名称とするノードを新規作成すると共に、現在処理中ノードから該新規作成ノードをポイントするポインタを、該現在処理中ノードにおける前記子供ノードへのポインタまたは次ノードへのポインタの何れかに設定し、更に、該新規作成ノードを新たな前記現在処理中ノードとし、
前記配列から取得した要素が任意のオペランドである場合には、該オペランドの名称を前記ノード名称とするノードを新規作成すると共に、前記現在処理中ノードから該新規作成ノードをポイントするポインタを、該現在処理中ノードにおける前記子供ノードへのポインタまたは次ノードへのポインタの何れかに設定し、更に、該新規作成ノードにおける前記子供ノードへのポインタを無効化し、更に、該新規作成したノードを新たな前記現在処理中ノードとし、
前記配列から取得した要素が関数終了子である場合には、そのときの現在処理中ノードにおける前記次ノードへのポインタを無効化すると共に、該関数終了子に対応する前記関数に関して作成済みのノードを、新たな前記現在処理中ノードとすることを特徴とする請求項1〜6の何れかに記載の言語変換装置。 - 関数型言語で記述された制御処理プログラムを、手続型の命令処理を行う装置で実行可能な言語形式のプログラムである手続型言語プログラムに変換する言語変換装置のコンピュータを、
前記関数型言語で記述された制御処理プログラムにおける関数又はオペランドの各要素の配列を記憶した関数型言語記憶手段と、
前記配列の各要素を順次取得し、該各要素に応じたノードと該ノード間のリンクから成るツリー構造を生成するツリー構造作成手段と、
前記ツリー構造中のノードは、子供ノードを持たないノードであるリーフと、該リーフ以外のノードである子持ノードとから成り、該ツリー構造中の各ノードのうち該子持ノードにユニークな識別子を付与すると共に、条件分岐の関数に係わるノードの子供ノードには、同一の識別子を付与する識別子付与手段と、
前記識別子を付与後の前記ツリー構造の各ノードに基づいて前記手続型言語への変換を行う手段であって、変換対象ノードが前記条件分岐の関数に係わるノードである場合には、予め登録されている所定の雛形を用いて前記手続型言語プログラムの生成を行う変換手段、
として機能させる為のプログラム。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2012206144A JP5966801B2 (ja) | 2012-09-19 | 2012-09-19 | 言語変換装置、プログラム |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2012206144A JP5966801B2 (ja) | 2012-09-19 | 2012-09-19 | 言語変換装置、プログラム |
Publications (2)
Publication Number | Publication Date |
---|---|
JP2014059848A JP2014059848A (ja) | 2014-04-03 |
JP5966801B2 true JP5966801B2 (ja) | 2016-08-10 |
Family
ID=50616238
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2012206144A Active JP5966801B2 (ja) | 2012-09-19 | 2012-09-19 | 言語変換装置、プログラム |
Country Status (1)
Country | Link |
---|---|
JP (1) | JP5966801B2 (ja) |
Families Citing this family (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP6402639B2 (ja) * | 2015-01-23 | 2018-10-10 | 富士電機株式会社 | 言語変換装置 |
Family Cites Families (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JPH03113505A (ja) * | 1989-09-27 | 1991-05-14 | Fuji Facom Corp | プログラム制御用関数型言語の展開方法 |
JP2008009869A (ja) * | 2006-06-30 | 2008-01-17 | Denso Corp | プログラムコード生成装置 |
JP5541102B2 (ja) * | 2010-11-12 | 2014-07-09 | 富士電機株式会社 | 言語変換装置および言語変換プログラム |
-
2012
- 2012-09-19 JP JP2012206144A patent/JP5966801B2/ja active Active
Also Published As
Publication number | Publication date |
---|---|
JP2014059848A (ja) | 2014-04-03 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN107943691B (zh) | 一种自动产生智能合约的功能测试页面的方法及装置 | |
CN110149800B (zh) | 一种用于处理与源程序的源代码相关联的抽象语法树的装置 | |
CN106648662B (zh) | 基于工程造价计算描述语言bcl的报表生成装置及生成方法 | |
CN111124379B (zh) | 页面生成方法、装置、电子设备及存储介质 | |
CN108170435A (zh) | 一种源代码转换方法、装置及设备 | |
CN109145055A (zh) | 一种基于Flink的数据同步方法和系统 | |
US20190155628A1 (en) | Method for opening up data and functions of terminal application based on reconstruction technology | |
KR101350798B1 (ko) | 오프로스 플랫폼에 기반하여 제어되는 로봇 시스템 및 그 로봇 제어방법 | |
CN115562629A (zh) | 一种rpa流程表示方法、系统、装置及存储介质 | |
CN111078217A (zh) | 脑图生成方法、装置和计算机可读存储介质 | |
JP7131277B2 (ja) | システム移行支援装置、システム移行支援方法及びプログラム | |
JP5966801B2 (ja) | 言語変換装置、プログラム | |
CN110134434B (zh) | 一种应用生成处理方法及系统、应用生成系统 | |
JP5541102B2 (ja) | 言語変換装置および言語変換プログラム | |
US20160350090A1 (en) | Information processing apparatus, method of compiling, and storage medium | |
JP5932707B2 (ja) | 計算機、プログラム及びデータ生成方法 | |
JP6175306B2 (ja) | 制御プログラム分割装置、制御プログラム分割方法及びその記録媒体 | |
JP4698943B2 (ja) | プログラム生産方法、プログラム生産装置、プログラム自動変換方法、およびプログラム | |
JP4449799B2 (ja) | データ動的読み込み型テンプレート適用方法および装置 | |
JP4472768B2 (ja) | プログラム解析装置、プログラム解析方法、およびプログラム | |
JP4354514B2 (ja) | プログラム自動変換方法、プログラム自動変換装置、およびプログラム | |
JP6008456B2 (ja) | 装置及びプログラム | |
JP2009080681A (ja) | プログラム構造解析方法及び装置 | |
JP2014157384A (ja) | 並列化設計支援システム、プログラム、および方法 | |
JP2010026968A (ja) | 回路生成支援プログラム及び回路生成支援方法 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A621 | Written request for application examination |
Free format text: JAPANESE INTERMEDIATE CODE: A621 Effective date: 20150812 |
|
A977 | Report on retrieval |
Free format text: JAPANESE INTERMEDIATE CODE: A971007 Effective date: 20160421 |
|
TRDD | Decision of grant or rejection written | ||
A01 | Written decision to grant a patent or to grant a registration (utility model) |
Free format text: JAPANESE INTERMEDIATE CODE: A01 Effective date: 20160607 |
|
A61 | First payment of annual fees (during grant procedure) |
Free format text: JAPANESE INTERMEDIATE CODE: A61 Effective date: 20160620 |
|
R150 | Certificate of patent or registration of utility model |
Ref document number: 5966801 Country of ref document: JP Free format text: JAPANESE INTERMEDIATE CODE: R150 |
|
R250 | Receipt of annual fees |
Free format text: JAPANESE INTERMEDIATE CODE: R250 |
|
R250 | Receipt of annual fees |
Free format text: JAPANESE INTERMEDIATE CODE: R250 |
|
R250 | Receipt of annual fees |
Free format text: JAPANESE INTERMEDIATE CODE: R250 |
|
R250 | Receipt of annual fees |
Free format text: JAPANESE INTERMEDIATE CODE: R250 |
|
R250 | Receipt of annual fees |
Free format text: JAPANESE INTERMEDIATE CODE: R250 |
|
R250 | Receipt of annual fees |
Free format text: JAPANESE INTERMEDIATE CODE: R250 |