JP5038760B2 - Source code conversion apparatus and source code conversion method - Google Patents
Source code conversion apparatus and source code conversion method Download PDFInfo
- Publication number
- JP5038760B2 JP5038760B2 JP2007085406A JP2007085406A JP5038760B2 JP 5038760 B2 JP5038760 B2 JP 5038760B2 JP 2007085406 A JP2007085406 A JP 2007085406A JP 2007085406 A JP2007085406 A JP 2007085406A JP 5038760 B2 JP5038760 B2 JP 5038760B2
- Authority
- JP
- Japan
- Prior art keywords
- source code
- conversion
- analysis unit
- policy
- compiler
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Expired - Fee Related
Links
Images
Landscapes
- Devices For Executing Special Programs (AREA)
Description
本発明は、ソースコードを複数のパターンに変換するソースコード変換装置及びソースコード変換方法に関する。 The present invention relates to a source code conversion apparatus and a source code conversion method for converting a source code into a plurality of patterns.
組み込みシステムにおいてはソースコードの性能が優先される局面が多い。しかし、時間的性能と空間的性能はトレードオフの関係にあることが多く、そのトレードオフを充分に検討する必要がある。特に組込みシステムでは、プラットフォーム(CPU等)の変更が頻繁に発生し、その度にコンパイラが変更される。その上、組込みシステムで使用されるコンパイラは、コードの書き方により最適化の利き具合が異なる。しかしながら、ソースコードの最適化のノウハウを習得するコストを多くかけることは望ましくない。 In an embedded system, the performance of source code is often prioritized. However, temporal performance and spatial performance are often in a trade-off relationship, and it is necessary to fully consider the trade-off. Especially in an embedded system, a platform (CPU or the like) frequently changes, and the compiler is changed each time. In addition, compilers used in embedded systems have different levels of optimization depending on how the code is written. However, it is not desirable to increase the cost of acquiring know-how for optimizing source code.
また、組み込みシステムにおいて最適化オプションを用いることも考えられるが、例えばテスト版と製品版とで同じオブジェクトファイルを使いたいとか、デバッガでソースコードとの対応がとりにくくなる等の理由により、最適化オプションを使いたくない場面も想定し得る。 It is also possible to use an optimization option in an embedded system. For example, if you want to use the same object file for the test version and the product version, or if it is difficult to use the source code in the debugger, the optimization option is used. You can also imagine situations where you do not want to use options.
よって、組み込みシステムに使用されるソースコードは、コンパイラや性能面での要求に合わせて記述される必要がある。しかし、開発の際には常に同じコンパイラが使われるとは限らず、また性能面での要求もCPUやメモリ搭載量等はターゲットシステムにより異なっている。従って、どのようなソースコードが開発環境にあったソースコードなのかを知る必要もある。 Therefore, the source code used in the embedded system needs to be described according to the compiler and performance requirements. However, the same compiler is not always used at the time of development, and the demands in terms of performance also differ depending on the target system, such as CPU and memory loading. Therefore, it is necessary to know what source code is the source code suitable for the development environment.
そのためには、多くのソースコードが試験されることにより最適なものが選択されることが望ましい。コンパイラを変更した際に、当初のコンパイラに最適化したソースコードのままだと、逆に最適化の機会を逃したり必要もないのに可読性が低下したままになっていたりする。これらの試行には多くの組み合わせのソースコードが必要となるが、それを人手で生成するのは、現実的ではない。実際に現場のソースコードを読むとあちこちに当初のコンパイラに合わせて記述された名残が存在することがあり、その場合、可読性が低下している。 For this purpose, it is desirable to select an optimum one by testing many source codes. When the compiler is changed, if the source code optimized for the original compiler is left as it is, the readability may still be lowered even though the opportunity for optimization is not missed or necessary. These trials require many combinations of source code, but it is not practical to generate them manually. When actually reading the source code in the field, there may be remnants written around the original compiler, and in this case, the readability is lowered.
そこで、ソースコードの最適化を行うシステムが提案されている(特許文献1参照)。このシステムは、ソースコードにおいてループ処理内で使用されるコードの一部を削除することにより、処理速度の向上やコードサイズの低減を図っている。
ソースコードを最適化する際には、以下のような課題がある。 When optimizing the source code, there are the following problems.
人間系での試行においては、ある開発環境において、どのような記述法が良いか知るにはコンパイラのマニュアルや試行が必要である。ただし、等価な機能を生成する書法は多くあり、それを一々人が試すのは時間的に現実的な作業ではなく問題となっている。 In human trials, it is necessary to have a compiler manual and trials in order to know what description method is good in a certain development environment. However, there are many writing systems that generate equivalent functions, and it is not a realistic task in time but a problem for people to try them one by one.
コンパイラにおいては、ターゲットとなるマシン上で効率よく動作するようにコードを最適化をする必要がある。また、コンパイル中の後工程で利用(最適化)しやすいように変換を実施しているが、その方法は、ユーザが評価を行いフィードバックをかけることができず、他コンパイラで利用することもできないため、開発環境が変わりコンパイラが変わることが多い分野では大きな問題となる。 In the compiler, it is necessary to optimize the code so that it operates efficiently on the target machine. In addition, the conversion is performed so that it can be easily used (optimized) in the later stage of compilation, but this method cannot be evaluated by the user and fed back, and cannot be used by other compilers. Therefore, it becomes a big problem in fields where the development environment changes and compilers often change.
さらに、オプション設定によりユーザからトレードオフの選択を受ける方法も用いられているが、その設定の粒度は荒く、細かな設定を実施することができない。数十kバイト以下に収まるように速度優先等を考慮する必要があるが、速度優先やメモリ優先等の簡単な条件程度しか決定できない。 Furthermore, although a method of receiving a trade-off selection from the user by option setting is also used, the granularity of the setting is rough, and detailed setting cannot be performed. Although it is necessary to consider speed priority so as to be within several tens of kilobytes, only simple conditions such as speed priority and memory priority can be determined.
その上、コンパイラにより予めどのような最適化を可能かが決まってしまい、書法などにより最適化のばらつきが生じる可能性がある。そのため、コンパイラを変えた場合にかえって最適化を妨げたり、最適化に影響がないにもかかわらず可読性が低下したままとなっている可能性があり問題である。 Furthermore, it will be determined whether it is possible in advance what optimization by the compiler, it is possible that variations in the optimization occurs due calligraphy. For this reason, there is a possibility that the optimization may be hindered when the compiler is changed, or the readability may remain lowered even though the optimization is not affected.
ケースツールにおいては、ソースコードのリバースエンジニアリングを行いモデルを出力することが望まれる。また、モデルからソースコードを(半)自動生成することが望まれる。この方法は、全体を見れば、ソースコードからソースコードを出力しているように見えるが、下記の制約がある。 In case tools, it is desirable to reverse engineer source code and output models. In addition, it is desirable to (semi) automatically generate source code from a model. Although this method seems to output the source code from the source code as a whole, there are the following restrictions.
・リバースエンジニアリングでは、ケースツールに対応したダイアグラムで表現できるものに対応するソースコードしか変換できない。また、ソースコードの書式を指定するものもある。これでは、既に書いてしまったソースコードをケースツールに入力することは難しい。 ・ In reverse engineering, only source code corresponding to what can be expressed in a diagram corresponding to the case tool can be converted. Some also specify the format of the source code. This makes it difficult to input source code that has already been written into the case tool.
・モデルからソースコードを生成する際に最適化を行うものもあるが、モデル上の情報を基に最適化を行っているため、モデルにない部分についてまで考慮できるわけではない。最適化を行うためには、プログラマがモデルや指定のフォーマットでソースコードを記述する必要がある。既にソースコードが存在している場合、指定のフォーマットに書き直す作業が必要である。 ・ Some optimizations are performed when generating source code from a model. However, since optimization is performed based on information on the model, it is not possible to consider parts that are not in the model. In order to perform optimization, the programmer needs to write the source code in a model or specified format. If the source code already exists, rewriting to the specified format is required.
リファクタリングツールにおいては、ソースコードについて、ユーザの指示に従って修正する必要がある部分をできる限り少なくすることが望ましい。この際、手作業で書き直すのに比べ間違い等が少なくなるのは確かであるが、一度に複数のソースコードを生成するわけではなく、ある程度、ユーザがどこをどう直せばよいのかわかっている必要がある。したがって、この方法では、コンパイラに関するノウハウが蓄積されていない時点で、つまり試行錯誤が必要な状況では、手間を大きく削減することはできない。 In the refactoring tool, it is desirable to reduce as much as possible the part of the source code that needs to be corrected according to the user's instructions. At this time, it is certain that there will be fewer errors etc. compared to manual rewriting, but it does not generate multiple source codes at once, and it is necessary to know to what extent the user should fix to some extent There is. Therefore, with this method, it is not possible to greatly reduce the effort at the time when know-how related to the compiler is not accumulated, that is, in a situation where trial and error are necessary.
本発明は、上記課題を鑑みなされたもので、元のソースコードを、可能な限り多彩な変換パターンの中から、適切なパターンのソースコードに変換することができるソースコード変換装置及びソースコード変換方法を提供することを目的とする。 The present invention has been made in view of the above problems, and a source code conversion apparatus and source code conversion capable of converting an original source code into a source code having an appropriate pattern from a variety of conversion patterns as much as possible. It aims to provide a method.
上記課題を解決するために、本発明に係るソースコード変換装置は、ソースコードの構造を解析して構造木を作成する解析部と、ソースコードの複数の変換パターンを示すパターン表を記憶する記憶部と、ソースコードを変換するためのポリシを有するとともに、前記記憶部が記憶するパターン表を前記ポリシに照らし合わせて変換式の組み合わせを作成する一致性解析部と、前記一致性解析部により作成された変換式の組み合わせに基づいてソースコードを変換する作成部と、前記作成部により予め作成された複数パターンのソースコードに基づいてコンパイラ特性を作成するフィードバック解析部を備え、前記一致性解析部は、前記パターン表をこのフィードバック解析部により作成されたコンパイラ特性及び前記ポリシに照らし合わせて、変換式の組み合わせを作成することを特徴とする。 In order to solve the above problems, a source code conversion apparatus according to the present invention includes an analysis unit that analyzes a structure of a source code to create a structure tree, and a memory that stores a pattern table indicating a plurality of conversion patterns of the source code And a consistency analysis unit that creates a combination of conversion formulas by comparing a pattern table stored in the storage unit against the policy and a policy for converting the source code A matching unit that includes a creation unit that converts source code based on a combination of the converted conversion formulas, and a feedback analysis unit that creates compiler characteristics based on a plurality of patterns of source code created in advance by the creation unit. The pattern table is checked against the compiler characteristics created by the feedback analysis unit and the policy. Characterized by creating a combination of conversion formulas.
また、本発明に係るソースコード変換方法は、解析部と、ソースコードの複数の変換パターンを示すパターン表を記憶する記憶部と、ソースコードを変換するためのポリシを有する一致性解析部と、作成部と、フィードバック解析部とを備えたソースコード変換装置におけるソースコード変換方法であって、前記解析部が、ソースコードの構造を解析して構造木を作成する解析ステップと、前記一致性解析部が、前記パターン表を前記ポリシに照らし合わせて変換式の組み合わせを作成する一致性解析ステップと、前記作成部が、前記一致性解析ステップにより作成された変換式の組み合わせに基づいてソースコードを変換する作成ステップと、前記フィードバック解析部が、前記作成ステップにより予め作成された複数パターンのソースコードに基づいてコンパイラ特性を作成するフィードバック解析ステップと、を有し、前記コンパイラ特性が作成された後における一致性解析ステップでは、前記一致性解析部が、前記パターン表を前記コンパイラ特性及び前記ポリシに照らし合わせて、変換式の組み合わせを作成することを特徴とする。 Further, the source code conversion method according to the present invention includes an analysis unit, a storage unit that stores a pattern table indicating a plurality of conversion patterns of the source code, a consistency analysis unit having a policy for converting the source code, a creation unit, a source code conversion method in the source code conversion apparatus and a feedback analyzer, the analyzer is an analyzing step of creating a tree structure by analyzing the structure of the source code, the coincidence analysis parts includes a consistent analysis step of creating a combination of conversion equation against the pattern table to the policy, the creation unit, a source code based on a combination of the conversion formulas created by the matching analysis step a generating step of converting said feedback analyzer is Sosuko plurality of patterns created beforehand by the creation step Anda feedback analysis step of creating a compiler characteristics based on de, in conformity analyzing step of definitive after the compiler characteristics is created, the coincidence analysis unit, the compiler characteristics and the policy of the pattern table It is characterized by creating a combination of conversion formulas in light of the above.
本発明に係るソースコード変換装置及びソースコード変換方法によると、元のソースコードを、可能な限り多彩な変換パターンの中から、適切なパターンのソースコードに変換することが可能となる。 According to the source code conversion device and the source code conversion method according to the present invention, it is possible to convert the original source code into a source code having an appropriate pattern from as many conversion patterns as possible.
本発明に係るソースコード変換装置及びソースコード変換方法の実施形態を、添付図面に基づいて詳細に説明する。 Embodiments of a source code conversion apparatus and a source code conversion method according to the present invention will be described in detail with reference to the accompanying drawings.
〔第1実施形態〕
図1は、本発明に係るソースコード変換装置の第1実施形態を示すシステム構成図である。
[First Embodiment]
FIG. 1 is a system configuration diagram showing a first embodiment of a source code conversion apparatus according to the present invention.
第1実施形態のソースコード変換装置1は、ソースコード20の変換を行うPC(Personal Computer)等の装置であり、ソースコード20の構文解析を行って構文木を作成する構文解析部2と、構文解析部2により作成された構文木に対して文脈解析を行う文脈解析部3と、構文のバリエーションパターンを記憶するバリエーションパターン記憶部4と、バリエーションパターン記憶部4が記憶するバリエーションパターンを変換ポリシ40に照らし合わせて変換式の組み合わせを作成するバリエーションパターン一致性解析部5と、バリエーションパターン一致性解析部5により作成された変換式の組み合わせに基づいて複数パターンのソースコード20を変換するバリエーション生成部6と、バリエーション生成部6により生成されたソースコード20Aに対してコンパイルやプロファイリング、解析を行うコンパイラ・プロファイラ・静的解析ツール7と、を備えている。
The source code conversion device 1 according to the first embodiment is a device such as a PC (Personal Computer) that converts the
ソースコード変換装置1による変換の対象となるソースコード20は、C言語等のプログラミング言語の文法に則り、動作確認ができた既存のソースコード20をプリプロセッサ(前処理系)にかけたものとする。
It is assumed that the
構文解析部2は、ソースコード20を構文解析し、その解析結果を図2に示すような構造木形式で出力する。構造木の各ノードには、行番号、予約語、数値、条件式、代入式、単項演算式、スコープの情報が蓄積される。
The
行番号の情報は、変換時に変更箇所を指定するために利用される。予約語は、プログラミング言語の仕様で定められた、変数名や関数名として定義できない単語であり、「if」、「for」、「while」、「return」、「true」等を予約語としているプログラム言語が多い。この予約語の情報は、他形式の条件文へ変換する際に利用される。数値の情報は、例えば2のべき乗であるか否か等の情報である。条件式は、等値演算に使われる変数で、例えば「if」等の条件文において使用される。この条件式の情報は、「switch」文等への変換に利用される。代入式や単項演算式は、繰り返し文のカウンタとして利用されているか否かを調べるために利用される。スコープとは変数や関数の有効範囲である。 The line number information is used to specify the changed part at the time of conversion. A reserved word is a word that is defined in a programming language specification and cannot be defined as a variable name or function name, and “if”, “for”, “while”, “return”, “true”, etc. are reserved words. There are many programming languages. This reserved word information is used when converting into a conditional statement of another format. The numerical information is information such as whether or not it is a power of 2, for example. The conditional expression is a variable used for an equality operation, and is used in a conditional statement such as “if”, for example. Information on this conditional expression is used for conversion to a “switch” sentence or the like. An assignment expression or a unary operation expression is used to check whether it is used as a counter for repeated statements. A scope is the scope of a variable or function.
文脈解析部3は、構文解析部2による構文解析の解析結果(構造木)をたどり、文脈、すなわちコードの前後関係から導かれる情報をこの構造木に付加する。
The
例えば、「while」文の条件式に使われている変数が、サブ文(ループ文)中でカウンタ(「for」文の第3式)として利用されているかを確認する。また、スコープ内で新たに定義した変数が既に定義済みの変数を隠蔽する場合、隠蔽しない変数名を新たに生成し、ノードに記録する。 For example, it is confirmed whether a variable used in a conditional expression of a “while” statement is used as a counter (third expression of a “for” statement) in a sub-statement (loop statement). When a newly defined variable in the scope hides a variable that has already been defined, a new variable name that is not hidden is generated and recorded in the node.
バリエーションパターン記憶部4は、図3に示すようなバリエーションパターン表30を予め記憶している。バリエーションパターン表30は、繰り返し文や条件文、2のべき乗を用いた乗除算のバリエーションを生成する様々なパターンが記述されている表である。
The variation
例えば図3に示すバリエーションパターン表30においては、ソースコード20のパターンとして、パターンA、パターンB、パターンCの3種類のパターンが示されている。パターンAの1行目(「1A」の欄)は、「for (<A>;<b>;<C>) <D>」と示されていて、パターンBの1行目(「1B」の欄)には、「<A>; while(<B>) 〔<D><C>〕」と示されていて、また、パターンCの1行目(「1C」の欄)には、「<A>; do{<D>;<C>} while (<B>);」と示されている。これらの1A、1B、1Cはパターンは違うが同義である。同様に、2A、2B、2C、及び、3A、3B、3Cも同義である。
For example, in the variation pattern table 30 shown in FIG. 3, three types of patterns A, B, and C are shown as patterns of the
バリエーションパターン一致性解析部5は、ソースコード変換を行うための方針を示した変換ポリシ40とバリエーションパターン表30とを照らし合わせ、バリエーションパターン表30の各々の変換パターンから変換ポリシ40の変換方針と一致している構文を見つけ出す。例えば、繰り返し文であれば、構文解析の解析結果において、図3に示した<A>、<B>、<C>、<D>に一致する部分が現れているとする。このとき、バリエーションパターン一致性解析部5は、変換ポリシ40に基づいて、不要なバリエーションを生成する変換式を削除する。
The variation pattern matching
変換ポリシ40は、図4に示すように、変換する際に、バリエーション指定で利用しないパターンや変換しない関数を選択するための方針を示したものであり、バリエーション一致性解析部が予め記憶している。なお、変換ポリシ40には、効果的に変換パターンを抑制するために、読みやすさといった指標も与えられている。バリエーションパターン一致性解析部5は、この変換ポリシ40に基づいてソースコード20の変換を行う。
As shown in FIG. 4, the
図4に示した変換ポリシ40において、「Readable」では、図3のセル(例えば「1A」等)を続けて記述することで、可読性が高い変換パターンを指定する。変換ポリシ40において複数のセルが指定されている場合は、先(左側)に書かれたセルの方が可読性が高いこととする。「Unuse」では、変換パターンとして利用しないセルや関数を指定する。これは、可読性が著しく落ちる変換や性能等に特に貢献しない無用な変換を抑制するためのものである。
In the
また、「Not Optimize Function」では、変換しない関数を指定する。「Not Optimize File」では、変換しないファイルを指定する。「Optimize Priority」では、変換する際に優先する項目(Speed、RomSize、StackSize、RamSize等)を指定する。 In “Not Optimize Function”, a function that is not converted is designated. In “Not Optimize File”, a file not to be converted is designated. In “Optimize Priority”, an item (Speed, RomSize, StackSize, RamSize, etc.) to be prioritized at the time of conversion is designated.
なお、各変換ポリシ40でトレードオフが生じる場合、より上に書かれた変換ポリシ40が優先される。
When a trade-off occurs between the
変換ポリシにおける変換方針の典型的な例を、以下の(1)〜(6)に挙げる。(1)〜(4)は所定のコンパイラに対して最適化する際の方針であり、(5)〜(6)はソースコード20の可読性をあげるための方針である。
(1)ポインタを用いた間接メモリアクセスは最適化されにくいのでポインタアクセスを局所化する。
(2)一般的に「do」〜「while」が最もROMサイズを消費しないので、「do」〜「while」を優先して利用する。
(3)一般的に「if」文が最もROMサイズを消費しないので、「if」文に統一する。
(4)コンパイラのバグに該当するパターンを除く。
(5)排他的な条件分岐には、「if」〜「else」文を用いる。
(6)「switch」文が使える場合には、「switch」文を用いる。
Typical examples of the conversion policy in the conversion policy are given in the following (1) to (6). (1) to (4) are policies for optimizing a predetermined compiler, and (5) to (6) are policies for improving the readability of the
(1) Since indirect memory access using a pointer is difficult to optimize, the pointer access is localized.
(2) Since “do” to “while” generally consumes the least amount of ROM, “do” to “while” are preferentially used.
(3) Since the “if” statement generally consumes the least ROM size, it is unified with the “if” statement.
(4) Exclude patterns corresponding to compiler bugs.
(5) “if” to “else” statements are used for exclusive conditional branching.
(6) When the “switch” sentence can be used, the “switch” sentence is used.
また、バリエーションパターン一致性解析部5は、変換式の組み合わせを生成する。変換を行うスコープは、構文解析時に得たソースコード20のファイル名とソースコード20の行番号の情報から知ることができる。変換式は、正規表現に基づくsed(UNIX(登録商標)等のコマンドライン環境で使われる、定型的なテキストデータの処理を行うプログラム)等の文字列変換ツールで扱える変換式とする。
Further, the variation pattern matching
そして、バリエーションパターン一致性解析部5は、バリエーションパターン表30の各セル毎に生成された変換式をリストとしてつなぎ、変換式の組み合わせ毎にリストを生成する。
Then, the variation pattern matching
バリエーション生成部6は、バリエーションパターン一致性解析部5により作成された変換式の組み合わせを利用し、構文解析部2により構文解析される前の元のソースコード20のバリエーションパターンを、変換式の組み合わせの分だけ生成する。
The
コンパイラ・プロファイラ・静的解析ツール7は、開発環境に合わせたコンパイラやプロファイラ、静的解析ツール7であり、必要に応じて設けられる。この静的解析ツール7は、ユーザがバリエーション生成部6により生成されたソースコード20Aを評価する際に用いられる。
The compiler / profiler / static analysis tool 7 is a compiler / profiler / static analysis tool 7 suitable for the development environment, and is provided as necessary. The static analysis tool 7 is used when the user evaluates the
ソースコード変換装置1では、ソースコード20を元のコードと等価な様々なバリーションの複数のソースコード20Aに変換するソースコード変換処理を行う。ソースコード変換装置1がソースコード変換処理を行う際の手順について、図5、図6、図8、及び図9に示すフローチャートに基づいて説明する。
The source code conversion apparatus 1 performs source code conversion processing for converting the
始めに、構文解析部2が、ソースコード20のデータ構造を解析して、構造木を作成する(S101)。
First, the
次に、文脈解析部3が文脈解析を行う。文脈解析部3は、文脈解析として、例えば「for」文の第3式(「for」文の中で指定される3つの構文のうちの3番目の構文)を抽出する第3式抽出処理(S103)、例えばビットシフト可能な計算式を抽出する計算式抽出処理(S105)、例えばグローバル変数に隠蔽されてしまうローカル変数を検出する隠蔽変数検出処理(S107)を行う。
Next, the
図6は、文脈解析部3が第3式抽出処理を行う手順を示すフローチャートである。文脈解析部3は、「while」文等のループ文を「for」文に変換する際に、「for」文の第3式(「for」文において指定される3つの構文のうちの3番目の構文)の候補をいくつか抽出し、これらから第3式を確定する。
FIG. 6 is a flowchart illustrating a procedure in which the
まず、文脈解析部3は、構文解析部2により作成された構造木を取得する(S201)。また文脈解析部3は、S201で取得した構造木から、例えば「while」文等の繰り返しの条件式で使われている変数群を取得する(S203)。
First, the
文脈解析部3は、S203で取得した変数群から構文を取得する(S205)。そして文脈解析部3は、S205で取得した構文が、「for」文の第3式候補で使われている変数を参照しているか否かを判断する(S207)。この「for」文の第3式候補は、後述するS219の処理で既に選出されたものとする。その変数を参照している場合(S207のYes)、例えばインクリメント等で使用している場合には「for」文の第3式ではないので、参照している変数を用いる「for」文の第3式候補から外す(S209)。なお、第3式候補が選出されていない場合は、そのままS211に進む。
The
文脈解析部3は、S205で取得した構文が代入文(単項演算も含む)を含むか否かを判断する(S211)。構文が代入式を含まない場合(S211のNo)は、文脈解析部3は、S205に戻り、次の構文を取得する(S205)。
The
構文が代入文を含む場合(S211のYes)は、文脈解析部3は、S205で取得した構文に含まれる代入文を取得し、検査対象の代入文とする(S213)。文脈解析部3は、代入文から代入される変数を取得する(S215)。
When the syntax includes an assignment statement (Yes in S211), the
文脈解析部3は、S213で取得した変数が、条件式で使用されている変数群(S203で取得しされた変数群)の中にあるか否かを判断する(S217)。変数が変数群の中にある場合(S217のYes)は、文脈解析部3は、検査対象とした代入文を「for」文の第3式候補とする(S219)。この「for」文の第3式候補は、S207、S209の処理で使用される。
The
変数が変数群にない場合(S217のNo)は、文脈解析部3は、S205で取得した構文に、S215からS217の処理が行われていない未処理の代入文があるか否かを判断する(S221)。未処理の代入文がある場合(S221のYes)は、文脈解析部3は、S213に戻って、未処理の代入式を検査対象の代入文とする。
When the variable is not in the variable group (No in S217), the
未処理の代入文がない場合、すなわち全ての代入文に対してS213からS217(またはS219)までの処理を行った場合(S221のNo)、または、代入文を「for」文の第3式候補とした場合(S219)は、文脈解析部3は、未処理の構文があるか否かを判断する(S223)。未処理の構文があった場合(S213のYes)は、S205に戻って次の構文を取得し(S205)、再びS207からS223の処理を行う。
When there is no unassigned assignment statement, that is, when the processing from S213 to S217 (or S219) is performed on all assignment statements (No in S221), or the assignment statement is the third expression of the “for” statement. When it is determined as a candidate (S219), the
未処理の構文がない場合、すなわち全ての構文に対してS205からS221(またはS219)までの処理を行った場合は、文脈解析部3は、S213で検査対象とした代入文を「for」文の第3式として決定する(S225)。
When there is no unprocessed syntax, that is, when the processing from S205 to S221 (or S219) is performed for all syntaxes, the
また文脈解析部3は、S225で決定した「for」文の第3式を、構造木に追加する(S227)。なお、追加後の構造木を図7に示す。図7に示す記述Aのように、図2に示した構造木に、『「for」文にした場合の第3式』、『「for」文の第3式として利用可能か』の情報が追加される。
Further, the
また、S225で決定された第3式に使われている変数について、S203で取得した変数群において最初に定義がされていた場合は、文脈解析部3は、これを「for」文の第1式として、構造木に『「for」文にした場合の第1式』の情報を追加する。
If the variable used in the third expression determined in S225 is first defined in the variable group acquired in S203, the
このようにして、文脈解析部3により第3式候補抽出処理が行われる。
In this way, the third type candidate extraction process is performed by the
次に文脈解析部3は、ビットシフト可能な計算式を抽出する計算式抽出処理を行う(S105)。文脈解析部3がこの計算式抽出処理を行う手順を、図8に示すフローチャートに基づいて説明する。
Next, the
まず文脈解析部3は、S225により「for」文の第3式候補が追加された構造木を取得する(S301)。また文脈解析部3は、S301で取得した構造木から、例えば「while」文等の繰り返しの条件式で使われている変数群を取得する(S303)。
First, the
文脈解析部3は、S303で取得した変数群から構文を取得する(S305)。そして文脈解析部3は、S305で取得した構文の中に2のべき乗になっている定数値があるか否かを判断する(S307)。2のべき乗になっている定数値がある場合(S307のYes)は、文脈解析部3は、その定数値を取得する(S309)。
The
文脈解析部3は、S309で取得した定数値が乗除算に利用されているか否かを判断する(S311)。S309で取得した定数値が乗除算に利用されている場合(S311のYes)は、文脈解析部3は、この定数値がビットシフト可能であるとする(S313)。そして、文脈解析部3は、この定数値がビットシフト可能である旨を、S301で取得した構造木に追加する(S315)。具体的には、図7に示す記述Bのように、図2に示した構造木に、『2のべき乗』の情報が追加される。
The
また、S309で取得した定数値が乗除算に利用されていない場合(S311のNo)は、文脈解析部3は、その低数値がビットシフト可能でないとする(S317)。この場合は、文脈解析部3はS301で取得した構造木への追加は行わない。
When the constant value acquired in S309 is not used for multiplication / division (No in S311), the
S315またはS317の処理が完了すると、あるいはS305で取得した構文の中に2のべき乗になっている定数値がなかった場合(S307のNo)は、文脈解析部3は、S303で取得した変数群の中に、S305からS315(またはS317)までの処理が行われていない未処理の構文があるか否かを判断する(S319)。
When the processing of S315 or S317 is completed, or when there is no constant value that is a power of 2 in the syntax acquired in S305 (No in S307), the
未処理の構文があった場合(S319のYes)は、文脈解析部3は、S305に戻って未処理の構文を取得する。また、未処理の構文がなかった場合、すなわちS303で取得した変数群の中の全ての構文についてS305からS315(またはS317)までの処理がなされた場合(S319のNo)は、文脈解析部3は、計算式抽出処理を終了する。
If there is an unprocessed syntax (Yes in S319), the
文脈解析部3は、計算式抽出処理を終了すると、例えばグローバル変数に隠蔽されてしまうローカル変数を検出する隠蔽変数検出処理(S107)を行う。文脈解析部3がこの隠蔽変数検出処理を行う際の手順を、図9に示すフローチャートに基づいて説明する。
When completing the calculation formula extraction process, the
ソースコード20内で複数のローカル変数が使用されるが、ローカル変数は局所的に宣言される関数であるため、同一のソースコード20内に同定義のローカル変数が多数存在する可能性がある。同定義のローカル変数が複数存在した場合には、個々のローカル変数を識別することが困難になってしまう。これを防止するために、文脈解析部3は、同定義のローカル変数を検出する隠蔽変数検出処理を行う。
A plurality of local variables are used in the
文脈解析部3は、計算式抽出処理を終えた構造木を取得する(S401)。また文脈解析部3は、S401で取得した構造木からグローバル変数を取得する(S403)。文脈解析部3は、S403で取得したグローバル変数を羅列することにより、変数リストを作成する(S405)。
The
文脈解析部3は、S401で取得した構造木から、例えば「while」文等の繰り返しの条件式で使われている変数群を取得する(S407)。また文脈解析部3は、S407で取得した変数群から構文を取得する(S409)。
The
文脈解析部3は、未処理のローカル変数があるか否かを判断する(S411)。未処理のローカル変数とは、後述するS413からS421の処理が行われていないローカル変数とする。
The
未処理のローカル変数があった場合(S407のYes)は、文脈解析部3は、このローカル変数を取得する(S413)。そして文脈解析部3は、S405で作成した変数リストの中に、S413で取得したローカル変数と同定義(例えば同名)のものが含まれているか否かを判断する(S415)。
If there is an unprocessed local variable (Yes in S407), the
ローカル変数が変数リストに含まれている場合(S415のYes)は、ローカル変数が他のローカル変数またはグローバル変数と重複しているため、このローカル変数を、変数リストに含まれていない任意のローカル変数に変更する(S417)。この際、ローカル変数は、例えば名前を変更すること等により、変更される。 If the local variable is included in the variable list (Yes in S415), the local variable is duplicated with other local variables or global variables, so this local variable is not included in the variable list. Change to a variable (S417). At this time, the local variable is changed, for example, by changing the name.
文脈解析部3は、ローカル変数を変数リストに追加する(S419)。この際、文脈解析部3は、S417にてローカル変数を変更した場合には、変更後のローカル変数を変数リストに追加し、ローカル変数が変数リストに含まれていなかった場合(S415のNo)には、S413で取得したローカル変数を変数リストに追加する。
The
また文脈解析部3は、ローカル変数を構造木に追加する(S421)。この場合もS419と同様に、文脈解析部3は、S417にてローカル変数を変更した場合には、変更後のローカル変数を構造木に追加し、ローカル変数が変数リストに含まれていなかった場合(S415のNo)には、S413で取得したローカル変数を構造木に追加する。具体的には、図7に示す記述Cのように、図2に示した構造木に、ローカル変数の『別名候補』の情報が追加される。
The
文脈解析部3は、S409からS421までの処理を行っていない未処理の構文があるか否かを判断する(S423)。未処理の構文がある場合(S423のYes)は、S409に戻り、未処理の構文を取得し、S411からS421までの処理を行う。未処理の構文がない場合(S423のNo)は、文脈解析部3は、隠蔽変数検出処理を終了する。
The
文脈解析部3による隠蔽変数検出処理が終了すると、バリエーションパターン一致性解析部5は、変換ポリシ40に基づいて、バリエーションパターンの一致性を解析する。
When the concealment variable detection process by the
まず、バリエーションパターン一致性解析部5は、バリエーションパターン記憶部4が記憶しているバリエーションパターン表30(図3)を取得する(S111)。また、バリエーションパターン一致性解析部5は、自身が記憶している変換ポリシ40(図4)を取得する(S113)。
First, the variation pattern matching
バリエーションパターン一致性解析部5は、S111で取得したバリエーションパターン表30とS113で取得した変換ポリシ40とを比較し、変換ポリシ40に適合したバリエーションパターンを一つまたは複数選出して、それぞれソースコード20を変換するための変換式の組み合わせを作成する(S115)。
The variation pattern
そしてバリエーション生成部6は、S115にてバリエーションパターン一致性解析部5が作成した変換式の組み合わせに基づいて、元のソースコード20を変換し、各々のバリエーションパターンのソースコード20Aを生成する(S117)。
Then, the
なお、第1実施形態として、第3式抽出処理、計算式抽出処理、及び隠蔽変数検出処理を別々に行う例を説明したが、これに限らず、構文を取得する処理(S205、S305、S409)までを同時に行うことにより、並列して各処理を行っても良い。この際には、S403及びS405の処理は、前もって行われているものとする。 In addition, although the example which performs 3rd type | formula extraction processing, calculation formula extraction processing, and concealment variable detection processing separately was demonstrated as 1st Embodiment, it is not restricted to this, The process which acquires syntax (S205, S305, S409) )) May be performed in parallel, so that each process may be performed in parallel. At this time, it is assumed that the processes of S403 and S405 have been performed in advance.
また、ソースコード変換装置1を用いてソースコード20を複数のパターンのソースコード20Aに変換した後に、ユーザがコンパイラ・プロファイラ・静的解析ツール7を用いて、ソースコード20Aをコンパイラにかけたり変換されたソースコードを評価したりして、利用すべき変換パターンを決定すると良い。
Further, after the
さらに、第1実施形態において隠蔽変数検出処理にてローカル変数がグローバル変数または他のローカル変数に隠蔽されていることを例に挙げて説明したが、これに限らず、グローバル変数がローカル変数に隠蔽されている場合にも同様の処理を行う。 Furthermore, in the first embodiment, it has been described as an example that the local variable is concealed by the global variable or another local variable in the concealment variable detection process. However, the present invention is not limited to this, and the global variable is concealed by the local variable. The same processing is performed even if it is.
ソースコード変換装置1によると、ソースコード20に対して、複数のバリエーションパターンから可能な限りの変換パターンを選出することにより、様々なパターンのソースコード20Aに変換することが可能となる。
According to the source code conversion device 1, by selecting as many conversion patterns as possible from a plurality of variation patterns for the
また、ソースコード変換装置1によると、変換ポリシ40を明らかに不要な変換を行わないように設定することにより、ソースコード20を、所望のパターンのソースコード20Aに狙いを定めて変換させることが可能となる。
Further, according to the source code conversion apparatus 1, by setting the
また、ソースコード変換装置1によると、ソースコード20を変換する際に、例えばローカル変数がグローバル変数に隠蔽されている場合等に、単純に変数名のみを使って変換していくと変数の隠蔽が生じてしまう可能性がある。変数が隠蔽されている箇所を把握しておくことにより、変換範囲を指定する事で、変換する際に隠蔽されている箇所を除いたり、その部分だけを変換したりすることが可能になる。
Further, according to the source code conversion device 1, when the
〔第2実施形態〕
本発明に係るソースコード変換装置及びソースコード変換方法の第2実施形態について、図10及び図11に基づいて説明する。なお、第1実施形態と同一の構成には同一の符号を付し、重複する説明を省略する。
[Second Embodiment]
A second embodiment of the source code conversion apparatus and source code conversion method according to the present invention will be described with reference to FIGS. In addition, the same code | symbol is attached | subjected to the structure same as 1st Embodiment, and the overlapping description is abbreviate | omitted.
図10は、第2実施形態のソースコード変換装置1Aを示すシステム構成図である。第2実施形態のソースコード変換装置1Aは、第1実施形態と同様に、ソースコード20の変換を行うPC(Personal Computer)等の装置であり、ソースコード20の構文解析を行って構文木を作成する構文解析部2と、構文解析部2により作成された構文木に対して文脈解析を行う文脈解析部3と、構文のバリエーションパターンを記憶するバリエーションパターン記憶部4と、バリエーションパターン記憶部4が記憶するバリエーションパターンを変換ポリシ40Aに照らし合わせて変換式の組み合わせを作成するバリエーションパターン一致性解析部5Aと、バリエーションパターン一致性解析部5Aにより解析された変換式の組み合わせに基づいてソースコード20を複数のパターンに変換するバリエーション生成部6と、コンパイルやプロファイリング、解析を行うコンパイラ・プロファイラ・静的解析ツール7と、を備えている。
FIG. 10 is a system configuration diagram showing a source
ソースコード変換装置1Aによる変換の対象となるソースコード20は、第1実施形態と同様に、C言語等のプログラミング言語の文法に則り、動作確認ができた既存のソースコード20をプリプロセッサ(前処理系)にかけたものとする。
As in the first embodiment, the
第2実施形態のソースコード変換装置1Aが第1実施形態のソースコード変換装置1と異なる点はバリエーションパターン一致性解析部5Aにより変換式を作成する際に、コンパイラ特性50を用いている点である。第2実施形態のソースコード変換装置1Aは、予めソースコード変換を行って得た複数パターンのソースコード20を解析、プロファイリングし、フィードバック情報としてコンパイラ特性50を作成するとともに、このコンパイラ特性50を加えた変換ポリシ40を利用してソースコード20の変換を行う。
The source
よって、ソースコード変換装置1Aのバリエーションパターン一致性解析部5Aが保持している変換ポリシ40Aには、図11に示すように、コンパイラ特性50と連携させる記述が含まれている。
Therefore, the
例えば「Optimize Priority」は、ソースコード20を変換する際に優先する項目(Speed、RomSize、StackSize、RamSize、Readable)を指定する。「Speed」は、時間的効率性を優先する場合、「RomSize」は、ロムサイズ削減を優先する場合、「StackSize」は、スタックサイズ削減を優先する場合、「RamSize」はラムサイズ削減を優先する場合、「Readable」は可読性を優先する場合に用いる。複数の項目が指定された場合、左側の項目がより優先される。ソースコード変換装置1Aがソースコード変換を行う際には、これらの項目に貢献しないことが分かっている変換は行われない。
For example, “Optimize Priority” specifies items (Speed, RomSize, StackSize, RamSize, and Readable) to be prioritized when the
「Optimize RomSize」には、ソースコード変換時に、どの程度のロムサイズを削減すべきかをバイト単位で指定する。変換前のソースコード20に比べ、指定された分だけRomSizeを削減したらRomSize削減を優先する変換を行わない。それまでは、RomSize削減に貢献する変換を優先して変換する。
“Optimize RomSize” specifies in bytes how much ROM size should be reduced during source code conversion. If the RomSize is reduced by a specified amount compared to the
「Optimize RunnningTime」には、ソースコード変換時にどの程度、実行性能を向上させるべきかを指定する。指定された数値の分だけ実行時間を削減できたら、ソースコード変換を行わない。この変換ポリシ40が指定されていた場合、実行効率向上に貢献する変換を優先して変換する。
“Optimize Running Time” specifies how much the execution performance should be improved during source code conversion. If the execution time can be reduced by the specified number, source code conversion is not performed. When this
「Optimize RunnningTime%」は、よく実行される箇所を優先して変換することを指定する。指定された数値は、変換箇所の実行時間に占める割合を指す。実行時間に占める割合を超えたら、残りのファイルや関数に対して変換を行わない。実行時間の多い関数から変換し、変換した関数の累積値が実行時間に占める割合を超えたら変換をやめる。 “Optimize Running Time%” specifies that a frequently executed part is preferentially converted. The specified numerical value indicates the ratio of the conversion location to the execution time. If the percentage of execution time is exceeded, the remaining files and functions are not converted. Convert from a function with a long execution time, and stop conversion when the cumulative value of the converted function exceeds the percentage of the execution time.
コンパイラ特性50は、図12に示すように、各種変換されたソースコード20Aをコンパイル、プロファイリングした結果が記述される。コンパイラ特性50には、プロファイリング結果、各変換で有意な差が生じなければ、差がないことを記述される。またコンパイラ特性50には、コンパイルオプションにより、プロファイリング結果に差が出るのであれば、コンパイラオプションごとに記述する。コンパイラ特性50は、変換ポリシ40と組み合わせて、コードの変換量を抑制する効果をもたらす。
As shown in FIG. 12, the
例えば「Speed」には、ソースコードの速度的な性能が、ソースコード変換によりどの程度変化したかが記述される。この項目は、図3に示したバリエーションパターン表30のセル名と、カッコ内の数値で表される。カッコ内の数値は、一番左に示されたセル名のパターンに対する速度の増減であり、所要時間(μ秒単位)で記述される。すなわち、図12に示すコンパイル特性の1行目は、「A1」のパターンに比べて「B1」のパターンでは、所要時間が+30μ秒であることを意味する。なお、具体的な数値を記述できない場合は、左から速い順に並べて記述するのみでも良い。 For example, “Speed” describes how much the speed performance of the source code has changed due to source code conversion. This item is represented by a cell name in the variation pattern table 30 shown in FIG. 3 and a numerical value in parentheses. The numerical value in parentheses is an increase / decrease of the speed with respect to the cell name pattern shown on the leftmost side, and is described in a required time (in microseconds). That is, the first line of the compilation characteristics shown in FIG. 12 means that the required time is +30 μsec in the “B1” pattern compared to the “A1” pattern. If specific numerical values cannot be described, the numerical values may be described in order from the left in ascending order.
「RomSize」、「StackSize」、「RamSize」には、図3に示すバリエーションパターン表30の各パターンにおいて、どの程度ロムサイズ(スタックサイズ、ラムサイズ)が変換するかが記述される。これらの項目は、バリエーションパターン表30のセル名と、カッコ内の数値で表される。カッコ内の数値は、一番左に示されたセル名のパターンに対する増減量であり、バイト単位で記述される。 “RomSize”, “StackSize”, and “RamSize” describe how much the ROM size (stack size, ram size) is converted in each pattern of the variation pattern table 30 shown in FIG. These items are represented by a cell name in the variation pattern table 30 and a numerical value in parentheses. The numerical value in parentheses is an increase / decrease amount with respect to the cell name pattern shown on the leftmost side, and is described in units of bytes.
「RunningTimeRate」には、シナリオ名を定義し、そのシナリオでの各関数の実行時間の割合を記述する。例えば図12に示すように、カッコ内にシナリオ名を記述し、関数名の後にプロファイル時の実行時間の割合(%単位)を記述する。 In “RunningTimeRate”, a scenario name is defined, and the execution time ratio of each function in the scenario is described. For example, as shown in FIG. 12, the scenario name is described in parentheses, and the ratio (% unit) of the execution time at the time of profiling is described after the function name.
「BUG」には、変換されたソースコード20Aをコンパイルした際に、コンパイラのバグやコンパイルエラーにひっかかる恐れのある変換パターンを記述する。例えばバリエーションパターン表30のセル名で記述される。
“BUG” describes a conversion pattern that may cause a compiler bug or a compilation error when the converted
ここで、変換ポリシ40Aとコンパイラ特性50との関係性について説明する。変換ポリシ40A中の「Optimize Priority」で優先される項目がコンパイラ特性50から取得され、優先される項目に対して貢献しない項目が検出される。この優先される項目に対して貢献しない変換はソースコード変換時に実施されない。また、複数の項目が書かれている場合は、全ての項目に貢献しない変換はソースコード変換時に実施されない。
Here, the relationship between the
変換ポリシ40A中の「Optimize RomSize」の後に数値が指定されている場合、変換前のソースコード20と比較してその数値(単位はバイトとみなす)の分だけロムサイズを削減されたら、ロムサイズ削減を実施する変換を行わない。この際のロムサイズの削減量は、コンパイラ特性50に基づいて計算される。変換する順番は、他に優先される指定がなければロムサイズを削減しやすい項目から優先的に変換を行う。コンパイラ特性50に何も記述されていなければ、無視される。
When a numerical value is specified after “Optimize RomSize” in the
変換ポリシ40A中の「Optimize RunnningTime」で指定されている数値の分だけ実行時間が削減されたら、ソースコード20の変換を行わない。どれだけ実行時間を削減できるかは、コンパイラ特性50に基づいて計算される。この項目が指定されている場合、実行時間を削減しやすい項目をコンパイラ特性50を元に選択し、削減しやすい項目から優先的に変換を行う。コンパイラ特性50に何も記述されていなければ、無視される。
If the execution time is reduced by the numerical value designated by “Optimizing RunningTime” in the
変換ポリシ40A中の「Optimize RunnningTimeRate」で指定されている数値は、実行時間に占める割合を指す。実行時間の多い関数から変換され、変換された関数の累積値が実行時間に占める割合を超えたら変換をやめる。実行時間は、コンパイラ特性50から取得する。コンパイラ特性50に何も記述されていなければ、無視される。
The numerical value specified by “Optimizing RunningTimeRate” in the
次に、ソースコード変換装置1Aがソースコード変換処理を行う際の手順を、図13に示すフローチャートに基づいて説明する。
Next, the procedure when the source
まずソースコード変換装置1Aは、S501乃至S509の処理として、S101乃至S109と同様の処理を行う。なお、S501乃至S509の処理の説明は省略する。
First, the source
バリエーションパターン一致性解析部5Aは、バリエーションパターン記憶部4から図3に示すバリエーションパターン表30を取得すると(S509)、図11に示す変換ポリシ40及び図12に示すコンパイラ特性50を取得する(S511)。
When the variation pattern matching
バリエーションパターン一致性解析部5Aは、S509で取得したバリエーションパターン表30を、S511で取得した変換ポリシ40A及びコンパイル特性とに照らし合わせて、変換ポリシ40A及びコンパイル特性に適合したバリエーションパターンを一つまたは複数選出して、それぞれソースコード20を変換するための変換式の組み合わせを作成する(S513)。
The variation pattern
そしてバリエーション生成部6は、S513にてバリエーションパターン一致性解析部5Aが作成した変換式の組み合わせに基づいて、元のソースコード20を変換し、各々のバリエーションパターンのソースコード20Aを生成する(S515)。
Then, the
コンパイル・プロファイラ・静的解析ツール7は、S515で生成されたソースコード20Aに対して、コンパイラにかけたりプロファイリングや解析を行ったりして、変換されたソースコード20Aを評価し、バリエーションパターン一致性解析部5が保持するコンパイラ特性50に記述する(S517)。
The compile / profiler / static analysis tool 7 evaluates the converted
第2実施形態のソースコード変換装置1Aによると、ソースコード変換のフィードバック情報として速度やメモリサイズ等に関するコンパイラ特性50を取得することにより、コンパイラ特性50に基づいて速度向上やメモリサイズ削減に有効なソースコード変換を優先して行うことが可能となる。
According to the source
また、第2実施形態のソースコード変換装置1Aによると、ソースコード変換時に、最適化に貢献しない変換を削減したり、特定の部分(例えば実行時間の80%を占める部分だけ)を最適化したりすることが可能となる。
Further, according to the source
特に組込みシステムでは、所要の制約に収まるのであれば、最適化する必要のない場面も存在するので、不必要な最適化を避けて不必要な可読性の低下を防止することが可能となる。 In particular, in an embedded system, there are scenes that do not need to be optimized as long as they fall within the required constraints. Therefore, it is possible to avoid unnecessary optimization and prevent unnecessary readability degradation.
さらに、第2実施形態のソースコード変換装置1Aでは、コンパイラ特性50を取得することにより、コンパイラのバグの原因となる変換を避けることが可能となる。
Furthermore, in the source
なお、第1実施形態及び第2実施形態では、装置内部に発明を実施する機能が予め記録されている場合で説明をしたが、これに限らず、同様の機能がネットワークから装置にダウンロードされても良いし、同様の機能を記録媒体に記憶させたものが装置にインストールされてもよい。 In the first embodiment and the second embodiment, the function for carrying out the invention is recorded in advance in the apparatus. However, the present invention is not limited to this, and the same function is downloaded from the network to the apparatus. Alternatively, the same function stored in the recording medium may be installed in the apparatus.
記録媒体としては、CD−ROM等プログラムを記憶でき、かつ装置が読み取り可能な記録媒体であれば、その形態は何れの形態であっても構わない。 The recording medium may be in any form as long as it can store a program such as a CD-ROM and can be read by the apparatus.
また、このように予めインストールやダウンロードにより得る機能は、装置内部のOS(オペレーティング・システム)等と協働してその機能を実現させるものであってもよい。 Further, the function obtained by installing or downloading in advance may be realized in cooperation with an OS (operating system) or the like inside the apparatus.
1、1A ソースコード変換装置
2 構文解析部
3 文脈解析部
4 バリエーションパターン記憶部
5、5A バリエーションパターン一致性解析部
6 バリエーション生成部
7 コンパイラ・プロファイラ・静的解析ツール
20、20A ソースコード
30 バリエーションパターン表
40、40A 変換ポリシ
50 コンパイラ特性
DESCRIPTION OF
Claims (2)
ソースコードの複数の変換パターンを示すパターン表を記憶する記憶部と、
ソースコードを変換するためのポリシを有するとともに、前記記憶部が記憶するパターン表を前記ポリシに照らし合わせて変換式の組み合わせを作成する一致性解析部と、
前記一致性解析部により作成された変換式の組み合わせに基づいて前記解析部が作成した構造木を変換することによりソースコードを変換する作成部と、
前記作成部により予め作成された複数パターンのソースコードに基づいてコンパイラ特性を作成するフィードバック解析部を備え、
前記一致性解析部は、前記パターン表をこのフィードバック解析部により作成されたコンパイラ特性及び前記ポリシに照らし合わせて、変換式の組み合わせを作成するソースコード変換装置。 An analysis unit that analyzes the structure of the source code and creates a structural tree;
A storage unit for storing a pattern table indicating a plurality of conversion patterns of the source code;
A consistency analysis unit that has a policy for converting the source code and creates a combination of conversion formulas by comparing the pattern table stored in the storage unit with the policy;
A creation unit that transforms source code by transforming a structural tree created by the analysis unit based on a combination of conversion formulas created by the consistency analysis unit;
A feedback analysis unit for creating compiler characteristics based on a plurality of patterns of source code created in advance by the creation unit;
The coincidence analysis unit is a source code conversion device that generates a combination of conversion expressions by comparing the pattern table with the compiler characteristics generated by the feedback analysis unit and the policy .
前記解析部が、ソースコードの構造を解析して構造木を作成する解析ステップと、
前記一致性解析部が、前記パターン表を前記ポリシに照らし合わせて変換式の組み合わせを作成する一致性解析ステップと、
前記作成部が、前記一致性解析ステップにより作成された変換式の組み合わせに基づいてソースコードを変換する作成ステップと、
前記フィードバック解析部が、前記作成ステップにより予め作成された複数パターンのソースコードに基づいてコンパイラ特性を作成するフィードバック解析ステップと、
を有し、
前記コンパイラ特性が作成された後における一致性解析ステップでは、前記一致性解析部が、前記パターン表を前記コンパイラ特性及び前記ポリシに照らし合わせて、変換式の組み合わせを作成する、ソースコード変換方法。 A source comprising: an analysis unit; a storage unit for storing a pattern table indicating a plurality of conversion patterns of source code; a consistency analysis unit having a policy for converting source code; a creation unit; and a feedback analysis unit A source code conversion method in a code conversion device, comprising:
The analyzing unit, an analysis step of creating a tree structure by analyzing the structure of the source code,
The consistency analysis unit creates a combination of conversion expressions by comparing the pattern table with the policy, and a consistency analysis step,
The creation unit converts the source code based on a combination of conversion formulas created by the consistency analysis step; and
A feedback analysis step in which the feedback analysis unit creates compiler characteristics based on a plurality of patterns of source code created in advance by the creation step;
Have
Wherein in the matching analysis steps definitive after the compiler characteristics is created, the coincidence analysis unit, against the pattern table to the compiler characteristics and the policy to create a combination of conversion formulas, source code conversion method.
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2007085406A JP5038760B2 (en) | 2007-03-28 | 2007-03-28 | Source code conversion apparatus and source code conversion method |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2007085406A JP5038760B2 (en) | 2007-03-28 | 2007-03-28 | Source code conversion apparatus and source code conversion method |
Publications (2)
Publication Number | Publication Date |
---|---|
JP2008243019A JP2008243019A (en) | 2008-10-09 |
JP5038760B2 true JP5038760B2 (en) | 2012-10-03 |
Family
ID=39914248
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2007085406A Expired - Fee Related JP5038760B2 (en) | 2007-03-28 | 2007-03-28 | Source code conversion apparatus and source code conversion method |
Country Status (1)
Country | Link |
---|---|
JP (1) | JP5038760B2 (en) |
Families Citing this family (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US9170918B2 (en) | 2009-05-12 | 2015-10-27 | Nec Corporation | Model verification system, model verification method, and recording medium |
WO2010134123A1 (en) * | 2009-05-18 | 2010-11-25 | 株式会社Nst | Test support device and test support method |
JP5293563B2 (en) * | 2009-10-30 | 2013-09-18 | 新日鐵住金株式会社 | Language conversion device, language conversion method and program |
JP7064680B1 (en) * | 2021-07-28 | 2022-05-11 | SOPPRA Digital transformation株式会社 | Program code automatic generation system |
Family Cites Families (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JPH0488531A (en) * | 1990-08-01 | 1992-03-23 | Fuji Xerox Co Ltd | Code optimizing system |
JPH05134853A (en) * | 1991-11-12 | 1993-06-01 | Shikoku Nippon Denki Software Kk | Program source language translating device |
JPH0695890A (en) * | 1992-09-10 | 1994-04-08 | Toyo Commun Equip Co Ltd | Name replacement system in compiler |
JPH08272622A (en) * | 1995-03-31 | 1996-10-18 | Hitachi Software Eng Co Ltd | Program conversion device |
JP3235462B2 (en) * | 1996-04-08 | 2001-12-04 | 日本電気株式会社 | while loop structure conversion device |
JP2002169696A (en) * | 2000-12-04 | 2002-06-14 | Mitsubishi Electric Corp | Data processing apparatus |
JP4328328B2 (en) * | 2003-10-23 | 2009-09-09 | 富士通株式会社 | Software development tool program |
-
2007
- 2007-03-28 JP JP2007085406A patent/JP5038760B2/en not_active Expired - Fee Related
Also Published As
Publication number | Publication date |
---|---|
JP2008243019A (en) | 2008-10-09 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN110908640B (en) | Method for realizing service function and script engine | |
CN110149800B (en) | Apparatus for processing abstract syntax tree associated with source code of source program | |
US11579856B2 (en) | Multi-chip compatible compiling method and device | |
JP4822817B2 (en) | Compilation system | |
US8522222B2 (en) | Tracing just-in-time compilation with pointers to local variables | |
US7493610B1 (en) | Versioning optimization for dynamically-typed languages | |
US5606697A (en) | Compiler system for language processing program | |
US10289394B2 (en) | Selective generation of multiple versions of machine code for source code functions for execution on different processor versions and/or architectures | |
US9081586B2 (en) | Systems and methods for customizing optimization/transformation/ processing strategies | |
US7917899B2 (en) | Program development apparatus, method for developing a program, and a computer program product for executing an application for a program development apparatus | |
CN109086215B (en) | Embedded software unit test case generation method and system | |
EP1918812A1 (en) | A software development system | |
JP2009503677A (en) | Compiler that supports programs as data objects | |
JP2005216177A (en) | Configurable processor design apparatus and method, library optimizing method, processor, and method of manufacturing semiconductor device comprising processor | |
US6934940B2 (en) | Source code transformation-temporary object reduction | |
KR20010086159A (en) | Method for platform specific efficiency enhancement of java programs and software product therefor | |
JP3813087B2 (en) | Program conversion method, computer apparatus and program | |
KR20190015285A (en) | Query optimizer for CPU utilization and code refactoring | |
US8037463B2 (en) | Computer program functional partitioning system for heterogeneous multi-processing systems | |
JP5038760B2 (en) | Source code conversion apparatus and source code conversion method | |
US7478376B2 (en) | Computer program code size partitioning method for multiple memory multi-processing systems | |
US20150020051A1 (en) | Method and apparatus for automated conversion of software applications | |
KR20080096306A (en) | Compiling method and system for a rule-based optimal placement of scaling shifts | |
JP2008276735A (en) | Program code converter and program code conversion method | |
KR20090011974A (en) | Method for extracting the target files of compilation |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A621 | Written request for application examination |
Free format text: JAPANESE INTERMEDIATE CODE: A621 Effective date: 20091019 |
|
RD04 | Notification of resignation of power of attorney |
Free format text: JAPANESE INTERMEDIATE CODE: A7424 Effective date: 20100426 |
|
RD01 | Notification of change of attorney |
Free format text: JAPANESE INTERMEDIATE CODE: A7421 Effective date: 20111201 |
|
A977 | Report on retrieval |
Free format text: JAPANESE INTERMEDIATE CODE: A971007 Effective date: 20120130 |
|
A131 | Notification of reasons for refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A131 Effective date: 20120207 |
|
A521 | Written amendment |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20120404 |
|
A131 | Notification of reasons for refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A131 Effective date: 20120424 |
|
A521 | Written amendment |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20120528 |
|
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: 20120612 |
|
A01 | Written decision to grant a patent or to grant a registration (utility model) |
Free format text: JAPANESE INTERMEDIATE CODE: A01 |
|
A61 | First payment of annual fees (during grant procedure) |
Free format text: JAPANESE INTERMEDIATE CODE: A61 Effective date: 20120706 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20150713 Year of fee payment: 3 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20150713 Year of fee payment: 3 |
|
LAPS | Cancellation because of no payment of annual fees |