JP2010140408A - Source code converting device - Google Patents

Source code converting device Download PDF

Info

Publication number
JP2010140408A
JP2010140408A JP2008318346A JP2008318346A JP2010140408A JP 2010140408 A JP2010140408 A JP 2010140408A JP 2008318346 A JP2008318346 A JP 2008318346A JP 2008318346 A JP2008318346 A JP 2008318346A JP 2010140408 A JP2010140408 A JP 2010140408A
Authority
JP
Japan
Prior art keywords
source code
node
source
programming language
conversion
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
JP2008318346A
Other languages
Japanese (ja)
Inventor
Ayataro Kimura
綾太郎 木村
Yuki Fujita
由起 藤田
Shunsuke Yamashiro
俊介 山城
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.)
Nomura Research Institute Ltd
Original Assignee
Nomura Research Institute 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 Nomura Research Institute Ltd filed Critical Nomura Research Institute Ltd
Priority to JP2008318346A priority Critical patent/JP2010140408A/en
Publication of JP2010140408A publication Critical patent/JP2010140408A/en
Pending legal-status Critical Current

Links

Images

Abstract

<P>PROBLEM TO BE SOLVED: To convert a source code written in a certain programming language into a source code written in a different programming language. <P>SOLUTION: A source code processing device acquires a Hitachi source code 200, and parses it to generate a conversion source AST. The AST is a model obtained by structuring nodes corresponding to components of a source code according to its logical structure. A conversion destination AST corresponding to IBM-COBOL is generated from the conversion source AST. According to the nodes included in the conversion destination AST and its structure, an IBM source code 202 is generated. <P>COPYRIGHT: (C)2010,JPO&INPIT

Description

本発明は、コンピュータプログラムの分析、特に、ソースコードの分析を支援するための技術に関する。   The present invention relates to a technique for supporting analysis of a computer program, and in particular, analysis of a source code.

企業や公共施設などの運用を支える業務システム、いわゆるエンタープライズシステム(Enterprise System)は、今や、大小さまざまな組織の基盤として導入されている。業務システムは、ノード端末やデータベースから得られるデータを集計、蓄積、解析、加工した上でより付加価値の高い情報を出力する。業務システムを構成するプログラムファイルの数は、数十万、時には数百万にも及ぶことがある。業務システムは複雑化する組織マネジメントをより効率化するために発展を続けている。   Business systems that support the operation of companies and public facilities, so-called enterprise systems, are now being introduced as the foundations of large and small organizations. The business system aggregates, accumulates, analyzes, and processes data obtained from node terminals and databases, and outputs information with higher added value. The number of program files that make up a business system may reach hundreds of thousands and sometimes millions. Business systems continue to evolve to make more complex organizational management more efficient.

業務システムは、開発時だけでなく保守作業時・再構築時においてもソースコードの検査・修正を必要とする。ソースコードの解析を支援するために、さまざまなソフトウェア解析ツール(以下、単に「解析ツール」とよぶ)が提供されている。
特開2007−156791号公報
Business systems require inspection and correction of source code not only during development, but also during maintenance work and reconstruction. Various software analysis tools (hereinafter simply referred to as “analysis tools”) are provided to support the analysis of source code.
JP 2007-156791 A

業務システムに含まれるソースコードは、COBOL(COmmon Business Oriented Language)とよばれるプログラミング言語で記述されることが多い。しかし、COBOLには派生が多い。たとえば、日立製作所が提供するCOBOL(以下、「日立COBOL」とよぶ)には他のベンダーが提供するCOBOLにはない独自部分が含まれている。IBM(International Business Machines)が提供するCOBOL(以下、「IBM・COBOL」とよぶ)についても同様である。このため、あるベンダーがIBM・COBOL用に有用な解析ツールを提供していても、日立COBOLで記述されたソースコードを解析できない、という事態が生じる。従来、こういった状況においては、
1.ユーザが、解析対象となるソースコードを日立COBOLからIBM・COBOLに書き直す。
2.日立COBOL用の解析ツールを自作する。
といった対応策が採られることが多かった。
The source code included in the business system is often written in a programming language called COBOL (COmmon Business Oriented Language). However, there are many derivations in COBOL. For example, COBOL provided by Hitachi, Ltd. (hereinafter referred to as “Hitachi COBOL”) includes a unique part that is not found in COBOL provided by other vendors. The same applies to COBOL provided by IBM (International Business Machines) (hereinafter referred to as “IBM COBOL”). For this reason, even if a certain vendor provides a useful analysis tool for IBM and COBOL, a situation occurs in which the source code described in Hitachi COBOL cannot be analyzed. Traditionally, in this situation,
1. The user rewrites the source code to be analyzed from Hitachi COBOL to IBM / COBOL.
2. Create an analysis tool for Hitachi COBOL.
Such countermeasures were often taken.

本発明は、本発明者による上記課題認識に基づいて完成された発明であり、その主たる目的は、あるプログラミング言語で記述されたソースコードを別のプログラミング言語によるソースコードに変換するための技術を提供することにある。   The present invention has been completed on the basis of recognition of the above problems by the present inventor, and its main object is to provide a technique for converting source code described in one programming language into source code in another programming language. It is to provide.

本発明のある態様は、ソースコード変換装置に関する。
この装置は、第1のプログラミング言語で記述されたソースコードである第1ソースコードから、第1ソースコードの論理構造を基本ノードの集合体により示す第1構文モデルを生成し、第2のプログラミング言語において使用可能な構成要素に対応するノードである変換先ノードに基本ノードを変換することにより、第1ソースコードの論理構造を変換先ノードの集合体により示す第2構文モデルを生成し、第2構文モデルに含まれる変換先ノードとその構造にしたがって、第2のプログラミング言語で記述されたソースコードとしての第2ソースコードを生成する。
One embodiment of the present invention relates to a source code conversion apparatus.
The apparatus generates a first syntax model indicating a logical structure of the first source code by a set of basic nodes from the first source code which is a source code described in the first programming language, and performs the second programming. By converting a basic node to a conversion destination node that is a node corresponding to a component that can be used in the language, a second syntax model indicating the logical structure of the first source code by an aggregate of conversion destination nodes is generated, and The second source code as the source code described in the second programming language is generated according to the conversion destination node and its structure included in the two syntax model.

ここでいう第1のプログラミング言語と第2のプログラミング言語は、日立COBOLとIBM・COBOLのように、同系統のプログラミング言語でありながら細部において異なるプログラミング言語であってもよい。あるいは、COBOLとJAVA(登録商標)、COBOLとC++、JAVA(登録商標)とC++のように、別系統のプログラミング言語であってもよい。   Here, the first programming language and the second programming language may be programming languages of the same type but different in details, such as Hitachi COBOL and IBM COBOL. Alternatively, different programming languages such as COBOL and JAVA (registered trademark), COBOL and C ++, JAVA (registered trademark) and C ++ may be used.

なお、以上に示した各構成要素の任意の組み合わせ、本発明を方法、システム、記録媒体、コンピュータプログラムにより表現したものもまた、本発明の態様として有効である。   It should be noted that any combination of the above-described components, and the present invention expressed by a method, system, recording medium, and computer program are also effective as an aspect of the present invention.

本発明によれば、あるプログラミング言語で記述されたソースコードを別のプログラミング言語で記述されたソースコードに変換しやすくなる。   ADVANTAGE OF THE INVENTION According to this invention, it becomes easy to convert the source code described in one programming language into the source code described in another programming language.

図1は、ソースコードの言語変換過程を示す模式図である。
本実施例においては、日立COBOLで記述されたソースコード(以下、「日立ソース200」とよぶ)をIBM・COBOLで記述されたソースコード(以下、「IBMソース202」とよぶ)に変換する過程を例として説明する。
FIG. 1 is a schematic diagram showing a language conversion process of source code.
In the present embodiment, a process of converting source code described in Hitachi COBOL (hereinafter referred to as “Hitachi source 200”) into source code described in IBM / COBOL (hereinafter referred to as “IBM source 202”). Will be described as an example.

ソースコードの言語変換を実現するための主たる機能は3つあり、それぞれ、パーサ(parser)、プロセッサ(processor)、ライタ(writer)とよぶ。各機能は、解析処理、変換処理、生成処理をそれぞれ担当する。
解析処理(S1):まず、第1ソースコードとして日立ソース200を取得し、パーサが構文解析し、第1の構文モデルとしての抽象構文木(以下、「AST(Abstract Syntax Tree)」とよぶ)を生成する。ASTは、演算子やそのオペランドといったソースコードの構成要素にノードを対応づけた木構造として形成される。ASTは、一般的なコンパイラやインタプリタで採用されている既存技術の応用により生成できる。日立ソース200のように変換元となるソースコードを「変換元ソース」、変換元ソースから生成されるASTを「変換元AST」、変換元ASTに含まれるノードを「基本ノード」、または、「変換元ノード」とよぶ。変換元ASTは、変換元ソースの言語構造に対応したASTであってもよいし、他のプログラミング言語、たとえば、標準的なCOBOLの言語構造に対応した標準モデルとしてのASTであってもよい。解析処理については、図3に関連して詳述する。
There are three main functions for realizing language conversion of the source code, which are called a parser, a processor, and a writer, respectively. Each function is in charge of analysis processing, conversion processing, and generation processing.
Analysis process (S1): First, Hitachi source 200 is acquired as the first source code, the parser parses it, and an abstract syntax tree as the first syntax model (hereinafter referred to as “AST (Abstract Syntax Tree)”). Is generated. The AST is formed as a tree structure in which nodes are associated with source code components such as operators and their operands. The AST can be generated by application of existing technology adopted by a general compiler or interpreter. As in the Hitachi source 200, the source code as the conversion source is “conversion source source”, the AST generated from the conversion source source is “conversion source AST”, and the node included in the conversion source AST is “basic node” or “ This is called a “transformer node”. The conversion source AST may be an AST corresponding to the language structure of the conversion source, or may be an AST as a standard model corresponding to another programming language, for example, a standard COBOL language structure. The analysis process will be described in detail with reference to FIG.

変換処理(S2):プロセッサは、変換元ASTを、第2ソースコードとしてのIBMソース202に対応したASTに変換する。IBMソース202のように変換先となるソースコードを「変換先ソース」、変換先ソースのために生成されるASTを「変換先AST」、変換先ASTに含まれるノードを「変換先ノード」とよぶ。第2構文モデルとしての変換先ASTは、変換先ソースの言語構造に対応する。変換処理については、図3および図4に関連して詳述する。   Conversion process (S2): The processor converts the conversion source AST into an AST corresponding to the IBM source 202 as the second source code. As in the IBM source 202, the source code as the conversion destination is “conversion destination source”, the AST generated for the conversion destination source is “conversion destination AST”, and the nodes included in the conversion destination AST are “conversion destination node”. Call it. The conversion destination AST as the second syntax model corresponds to the language structure of the conversion destination source. The conversion process will be described in detail with reference to FIGS.

生成処理(S3):ライタは、変換先ASTから変換先ソースであるIBMソース202を生成する。生成処理については、図4に関連して詳述する。
以上に示したように、変換元ソースである日立ソース200から変換元ASTを生成し、変換元ASTから変換先ASTを生成し、変換先ASTから変換先ソースであるIBMソース202を生成することにより、日立ソース200がIBMソース202に変換される。
Generation process (S3): The writer generates an IBM source 202 that is a conversion destination source from the conversion destination AST. The generation process will be described in detail with reference to FIG.
As described above, the conversion source AST is generated from the Hitachi source 200 which is the conversion source, the conversion destination AST is generated from the conversion source AST, and the IBM source 202 which is the conversion destination source is generated from the conversion destination AST. Thus, the Hitachi source 200 is converted to the IBM source 202.

言語変換処理を実現するためには、1.変換元ソースから変換元ASTを生成するためのルール(以下、「第1ASTルール」とよぶ)、2.変換元ASTから変換先ASTを生成するためのルール(以下、「第2ASTルール」とよぶ)、3.変換先ASTから変換先ソースを生成するためのルール(以下、「ソース生成ルール」とよぶ)の3種類のルールが必要である。各種のプログラミング言語についてこれらのルールをライブラリとして提供することにより、さまざまなプログラミング言語間における言語変換処理が実現される。   In order to realize language conversion processing, 1. 1. Rules for generating conversion source AST from conversion source (hereinafter referred to as “first AST rule”); 2. rules for generating the conversion destination AST from the conversion source AST (hereinafter referred to as “second AST rule”); Three types of rules are required: a rule for generating a conversion source from the conversion destination AST (hereinafter referred to as “source generation rule”). By providing these rules as a library for various programming languages, language conversion processing between various programming languages is realized.

図2は、ソースコード処理装置100の機能ブロック図である。
ここに示す各ブロックは、ハードウェア的には、コンピュータのCPUをはじめとする素子や機械装置で実現でき、ソフトウェア的にはコンピュータプログラム等によって実現されるが、ここでは、それらの連携によって実現される機能ブロックを描いている。したがって、これらの機能ブロックはハードウェア、ソフトウェアの組合せによっていろいろなかたちで実現できることは、当業者には理解されるところである。
ソースコード処理装置100は、図1に示したパーサ、プロセッサ、ライタの機能を担う装置である。本実施例においては、ソースコード処理装置100の主たる機能は、コンピュータ上のソフトウェアとして実現されるものとして説明する。より具体的には、本実施例におけるソースコード処理装置100の各機能は、主として、JAVA(登録商標)やScalaにより記述され、JVM(Java Virtual Machine)上において実行されるコンピュータプログラムにより実現される。
FIG. 2 is a functional block diagram of the source code processing device 100.
Each block shown here can be realized in hardware by an element such as a CPU of a computer or a mechanical device, and in software it is realized by a computer program or the like. Draw functional blocks. Therefore, those skilled in the art will understand that these functional blocks can be realized in various forms by a combination of hardware and software.
The source code processing device 100 is a device responsible for the functions of the parser, processor, and writer shown in FIG. In the present embodiment, the main function of the source code processing apparatus 100 will be described as being realized as software on a computer. More specifically, each function of the source code processing device 100 in the present embodiment is mainly described by JAVA (registered trademark) or Scala, and is realized by a computer program executed on a JVM (Java Virtual Machine). .

ソースコード処理装置100は、UI(ユーザインタフェース)部110、データ処理部120およびデータ保持部140を含む。
UI部110は、ユーザインタフェース処理を担当する。データ処理部120は、UI部110やデータ保持部140から取得されたデータを元にして各種のデータ処理を実行する。データ処理部120は、UI部110とデータ保持部140との間のインタフェースの役割も果たす。データ保持部140は、各種データを保持するための記憶領域である。
The source code processing device 100 includes a UI (user interface) unit 110, a data processing unit 120, and a data holding unit 140.
The UI unit 110 is in charge of user interface processing. The data processing unit 120 executes various data processing based on data acquired from the UI unit 110 or the data holding unit 140. The data processing unit 120 also serves as an interface between the UI unit 110 and the data holding unit 140. The data holding unit 140 is a storage area for holding various data.

UI部110:
UI部110は、入力部112と出力部116を備える。入力部112は、ユーザの各種入力を検出したり、ファイル等のデータを外部装置から取得する。出力部116は、各種情報を表示したり、ファイル等のデータを外部装置に送信する。入力部112は、コード取得部114を含む。コード取得部114は、図1の日立ソース200のような変換元ソースを取得する。出力部116は、コード出力部118を含む。コード出力部118は、図1のIBMソース202のような変換先ソースを出力する。
UI unit 110:
The UI unit 110 includes an input unit 112 and an output unit 116. The input unit 112 detects various user inputs and acquires data such as files from an external device. The output unit 116 displays various types of information and transmits data such as files to an external device. The input unit 112 includes a code acquisition unit 114. The code acquisition unit 114 acquires a conversion source source such as the Hitachi source 200 in FIG. The output unit 116 includes a code output unit 118. The code output unit 118 outputs a conversion destination source such as the IBM source 202 of FIG.

データ処理部120:
データ処理部120は、第1構文モデル生成部122、第2構文モデル生成部124、コード生成部126、検査部128および注釈ノード設定部130を含む。第1構文モデル生成部122は、第1ASTルール152を含む。第1構文モデル生成部122は、第1ASTルール152を参照して、変換元ソースから変換元ASTを生成する。第2構文モデル生成部124は、第2ASTルール154を含む。第2構文モデル生成部124は、第2ASTルール154を参照して、変換元ASTから変換先ASTを生成する。コード生成部126は、ソース生成ルール156を含む。コード生成部126は、ソース生成ルール156を参照して、変換先ASTから変換先ソースを生成する。
Data processing unit 120:
The data processing unit 120 includes a first syntax model generation unit 122, a second syntax model generation unit 124, a code generation unit 126, a check unit 128, and an annotation node setting unit 130. The first syntax model generation unit 122 includes a first AST rule 152. The first syntax model generation unit 122 refers to the first AST rule 152 and generates a conversion source AST from the conversion source. The second syntax model generation unit 124 includes a second AST rule 154. The second syntax model generation unit 124 refers to the second AST rule 154 and generates a conversion destination AST from the conversion source AST. The code generation unit 126 includes a source generation rule 156. The code generation unit 126 refers to the source generation rule 156 and generates a conversion destination source from the conversion destination AST.

検査部128は、変換元AST、あるいは、変換先ASTのノードを走査して、所定の「検出条件」に合致する箇所を特定する。検査部128は、コーディングルール158を含む。検出条件の全部または一部は、コーディングルール158として定義される。検出条件については、図5以降に関連して詳述する。注釈ノード設定部130は、検出条件に合致する箇所が検出されたとき、「注釈ノード」をASTに設定する。注釈ノード設定部130は、注釈ノード設定ルール160を含む。注釈ノード設定ルール160には、検出条件と注釈ノードが対応づけられている。ある検出条件に合致する箇所が検出されたとき、どのような注釈ノードを設定すべきか、はこの注釈ノード設定ルール160に設定されている。注釈ノードの設定の詳細については、図6以降に関連して詳述する。検出条件と注釈ノードは、ASTを対象として所定のコーディングルールが守られているか、プログラミング構造的に不適切な記載箇所がないか、を判断するために導入される。   The inspection unit 128 scans the node of the conversion source AST or the conversion destination AST, and specifies a location that matches a predetermined “detection condition”. The inspection unit 128 includes a coding rule 158. All or part of the detection conditions are defined as coding rules 158. The detection conditions will be described in detail with reference to FIG. The annotation node setting unit 130 sets “annotation node” to AST when a location that matches the detection condition is detected. The annotation node setting unit 130 includes an annotation node setting rule 160. In the annotation node setting rule 160, a detection condition and an annotation node are associated with each other. It is set in this annotation node setting rule 160 which annotation node should be set when a location that matches a certain detection condition is detected. Details of the annotation node setting will be described in detail with reference to FIG. The detection condition and the annotation node are introduced in order to determine whether a predetermined coding rule is observed for AST or whether there is a description portion inappropriate for the programming structure.

データ保持部140:
データ保持部140は、第1構文モデル保持部142と第2構文モデル保持部144を含む。第1構文モデル保持部142は、第1構文モデル生成部122が生成した変換元ASTを保持する。第2構文モデル保持部144は、第2構文モデル生成部124が生成した変換先ASTを保持する。
Data holding unit 140:
The data holding unit 140 includes a first syntax model holding unit 142 and a second syntax model holding unit 144. The first syntax model holding unit 142 holds the conversion source AST generated by the first syntax model generation unit 122. The second syntax model holding unit 144 holds the conversion destination AST generated by the second syntax model generation unit 124.

解析処理(S1)、すなわち、パーサとしての機能は、主として、入力部112と第1構文モデル生成部122により実現される。変換処理(S2)、すなわち、プロセッサとしての機能は、主として、第2構文モデル生成部124により実現される。生成処理(S3)、すなわち、ライタとしての機能は、主として、コード生成部126や出力部116により実現される。   The analysis process (S1), that is, the function as a parser is mainly realized by the input unit 112 and the first syntax model generation unit 122. The conversion process (S2), that is, the function as a processor is mainly realized by the second syntax model generation unit 124. The generation process (S3), that is, the function as a writer is mainly realized by the code generation unit 126 and the output unit 116.

ソースコード処理装置100は、変換元ソースを変換先ソースに言語変換する「ソースコード変換装置」としての機能のほかに、検出条件を設定することにより、ソースコードの記述内容を検査する「ソースコード検査装置」としての機能も備える。以下、「ソースコード変換装置」としての機能と「ソースコード検査装置」としての機能を分けて説明する。   The source code processing device 100 inspects the description content of the source code by setting a detection condition in addition to the function as a “source code conversion device” for converting the source source language into the destination source. It also has a function as an “inspection device”. Hereinafter, the function as the “source code conversion apparatus” and the function as the “source code inspection apparatus” will be described separately.

[ソースコード変換装置としての機能]
図3は、日立ソース200から変換元ASTを生成する過程を説明するための模式図である。
同図に示す日立ソース200は、変数「A」と変数「B」を比較対象とし、「AとBが共に1」という条件が成立するときには、変数「FLAG」に文字列「Y」を設定し、それ以外のときには変数「FLAG」に文字列「N」を設定する、という内容を示している。1行目の構文「EVALUATE A B」は、「A」と「B」を比較対象とする、という処理内容を示している。
[Function as a source code converter]
FIG. 3 is a schematic diagram for explaining the process of generating the conversion source AST from the Hitachi source 200.
The Hitachi source 200 shown in the figure compares the variable “A” and the variable “B”, and sets the character string “Y” in the variable “FLAG” when the condition “A and B are both 1” is satisfied. In other cases, the variable “FLAG” is set to the character string “N”. The syntax “EVALUATE AB” on the first line indicates the processing content that “A” and “B” are to be compared.

コード取得部114が日立ソース200を取得すると、第1構文モデル生成部122は、まず、構文「EVALUATE A B」を取得する。この構文の構成要素は、「EVALUATE」、「A」、「B」である。第1構文モデル生成部122は、まず、第1ASTルールに基づき、「EVALUATE」に対応する変換元ノードEvaluateStatement206を設定し、「EVALUATE」の変数リスト宣言に対応する変換ノードEvaluateTagList208を設定する。構成要素とは、ソースコードに記述されている変数や定数、宣言や関数といったステートメントであり、ノードとはそれらの構成要素に対応づけられるASTの要素である。ノードの中には、EvaluateStatement206のように、ソースコード中において明示的に記述されている構成要素に対応して設定されるノードもあれば、EvaluateTagList208のように、EvaluateStatement206のような他ノードに付随して設定されるノードもある。   When the code acquisition unit 114 acquires the Hitachi source 200, the first syntax model generation unit 122 first acquires the syntax “EVALUATE A B”. The components of this syntax are “EVALUATE”, “A”, and “B”. First, based on the first AST rule, the first syntax model generation unit 122 sets a conversion source node EvaluateStatement 206 corresponding to “EVALUATE”, and sets a conversion node EvaluateTagList 208 corresponding to a variable list declaration of “EVALUATE”. The component is a statement such as a variable, a constant, a declaration, or a function described in the source code, and the node is an AST element associated with the component. Some nodes, such as EvaluateStatement 206, are set corresponding to the components that are explicitly described in the source code. Other nodes such as EvaluateTagList 208 are associated with other nodes such as EvaluateStatement 206. Some nodes are set as follows.

「EVALUATE」の引数「A」、「B」に対応して、Expression:"A"210とExpression:"B"212という2つのノードがEvaluateTagList208の子ノードとして設定される。更に、引数「A」、「B」の並置を示すためのノード「None214」も設定される。日立ソース200では、「EVALUATE A B」のように引数をそのまま並べて書くことができるが、IBMソース202では、「EVALUATE A ALSO B」のように引数「A」、「B」の間に「ALSO」という構成要素が記述される。日立ソース200から変換元AST204を生成するときには、Expression:"A"210とExpression:"B"212だけでなく、None214というノードも設定される。より具体的には、「EVALUATE」という表現に対しては、EvaluateStatement206、EvaluateTagList208および引数に対応するノードと引数をつなぐためのノード(None214)が第1ASTルールにおいて対応づけられている。第1構文モデル生成部122はこの第1ASTルールにしたがって、「EVALUATE」という表現に対応してしかるべき変換元ノードを組み立てる。
変換元AST204が標準的・統一的な構文モデルであるならば、変換元ソースのプログラミング言語ごとに第1ASTルールを用意すれば、任意の変換元ソースから標準的な構文モデルとしての変換元AST204を生成できる。
Corresponding to the arguments “A” and “B” of “EVALUATE”, two nodes of Expression: “A” 210 and Expression: “B” 212 are set as child nodes of EvaluateTagList 208. Furthermore, a node “None214” for indicating the juxtaposition of the arguments “A” and “B” is also set. In Hitachi source 200, arguments can be written as they are like “EVALUATE AB”, but in IBM source 202, “ALSO” is placed between arguments “A” and “B” like “EVALUATE A ALSO B”. Are described. When generating the conversion source AST 204 from the Hitachi source 200, not only Expression: “A” 210 and Expression: “B” 212 but also a node called None 214 is set. More specifically, the expression “EVALUATE” is associated with the EvaluateStatement 206, the EvaluateTagList 208, and the node (None 214) for connecting the argument and the node corresponding to the argument in the first AST rule. The first syntax model generation unit 122 assembles an appropriate transformation source node corresponding to the expression “EVALUATE” according to the first AST rule.
If the conversion source AST 204 is a standard / unified syntax model, if the first AST rule is prepared for each programming language of the conversion source, the conversion source AST 204 as a standard syntax model can be obtained from an arbitrary conversion source. Can be generated.

図4は、変換元ASTから変換先AST、IBMソース202を生成する過程を説明するための模式図である。
まず、第2構文モデル生成部124は、変換元AST204から変換先AST220を生成する。変換先ソースであるIBMソース202では、「EVALUATE A ALSO B」のように「EVALUATE」の引数は構成要素「ALSO」によってつなげられる。そこで、第2構文モデル生成部124は、変換元AST204の変換元ノードNone214を、変換先ノードALSO222に変換する。変換元ノードと変換先ノードの対応づけは、プログラミング言語ごとに第2ASTルールとして設定されている。第2構文モデル生成部124はこの第2ASTルールにしたがって変換元AST204から変換先AST220を生成する。
変換元AST204が標準的・統一的な構文モデルであるならば、変換先ソースのプログラミング言語ごとに第2ASTルールを用意すれば、任意の変換先ASTへの変換が可能となる。
FIG. 4 is a schematic diagram for explaining a process of generating the conversion destination AST and the IBM source 202 from the conversion source AST.
First, the second syntax model generation unit 124 generates a conversion destination AST 220 from the conversion source AST 204. In the IBM source 202 which is the conversion destination source, the argument of “EVALUATE” is connected by the component “ALSO” like “EVALUATE A ALSO B”. Therefore, the second syntax model generation unit 124 converts the conversion source node None 214 of the conversion source AST 204 into the conversion destination node ALSO 222. The association between the conversion source node and the conversion destination node is set as a second AST rule for each programming language. The second syntax model generation unit 124 generates the conversion destination AST 220 from the conversion source AST 204 according to the second AST rule.
If the conversion source AST 204 is a standard / unified syntax model, the conversion to an arbitrary conversion destination AST is possible if a second AST rule is prepared for each programming language of the conversion destination source.

コード生成部126は、各変換先ノードごとにIBMソース202の該当構成要素を特定し、特定した構成要素を変換先AST220の構造にしたがって組み立てる。このようなルールは、ソース生成ルールとして定義されている。こうして、ALSO表現を含まない日立ソース200からALSO表現を含むIBMソース202が生成される。この結果、IBM・COBOL用の解析ツールにより日立ソース200を解析可能となる。   The code generation unit 126 identifies the corresponding component of the IBM source 202 for each conversion destination node, and assembles the specified component according to the structure of the conversion destination AST 220. Such a rule is defined as a source generation rule. In this way, the IBM source 202 including the ALSO expression is generated from the Hitachi source 200 not including the ALSO expression. As a result, the Hitachi source 200 can be analyzed by an analysis tool for IBM / COBOL.

IBMソース202を変換元ソース、日立ソース200を変換先ソースとする場合にも基本的な考え方は同様である。IBMソース202から変換元ASTを作るときには、構成要素「ALSO」からノード「ALSO222」を設定する。変換元ASTを日立COBOL用の変換先ASTに変換するときには、ALSO222はNone214に変換される。あるいは、ALSO222に対応するノードを変換先ASTには設定しないとしてもよい。いずれにしても、変換先ASTにおいて、ALSO222に対応するノードが無効化されればよい。コード生成部126は、None214に対応する構成要素を日立ソース200に記述しない。このような処理方法により、IBMソース202の「EVALUATE A ALSO B」は、日立ソース200においては「EVALUATE A B」として表現されることになる。
ここでは、日立ソース200とIBMソース202の違いの例としてALSO222の有無を挙げたが、このほかのさまざまな言語間の差異についても、第1ASTルール、第2ASTルールおよびソース生成ルールを適切に定義することにより変換可能となる。
The basic concept is the same when the IBM source 202 is the conversion source source and the Hitachi source 200 is the conversion destination source. When creating the conversion source AST from the IBM source 202, the node “ALSO 222” is set from the component “ALSO”. When converting the conversion source AST to the conversion destination AST for Hitachi COBOL, the ALSO 222 is converted to None214. Alternatively, the node corresponding to the ALSO 222 may not be set as the conversion destination AST. In any case, the node corresponding to the ALSO 222 may be invalidated in the conversion destination AST. The code generation unit 126 does not describe the component corresponding to None 214 in the Hitachi source 200. With such a processing method, “EVALUATE A ALSO B” of the IBM source 202 is expressed as “EVALUATE AB” in the Hitachi source 200.
Here, the presence or absence of ALSO 222 was given as an example of the difference between Hitachi source 200 and IBM source 202. However, the first AST rule, the second AST rule, and the source generation rule are appropriately defined for differences between various other languages. It becomes possible to convert.

[ソースコード検査装置としての機能]
図5は、「int num,iNumber」という変数宣言文から生成されるASTを示す図である。
検査対象となるASTは、変換元ASTであっても変換先ASTであってもよい。ここでは、変換元ASTを対象として検査を実行するとして説明する。検査の内容はユーザが任意に設定できる。たとえば、業務システムの開発・保守について、以下のようなコーディングルールを設定したとする。
R1.int型の変数名は、文字「i」から始まること
R2.変数宣言においては、1回の型宣言で複数の変数を定義しないこと
R3.変数名は4文字以上であること
[Function as a source code inspection device]
FIG. 5 is a diagram showing an AST generated from a variable declaration statement “int num, iNumber”.
The AST to be inspected may be the conversion source AST or the conversion destination AST. Here, a description will be given assuming that the inspection is performed on the conversion source AST. The contents of the inspection can be arbitrarily set by the user. For example, assume that the following coding rules are set for business system development and maintenance.
R1. Int type variable names must begin with the letter “i” R2. In variable declaration, do not define multiple variables in a single type declaration. R3. Variable name must be at least 4 characters long

コーディングルールの制定は、ソースコードの可読性を高めたり、修正ミスを防ぐ上で重要である。特に、複数のソフトウェアエンジニアが関わる大規模な業務システムの開発において適切なコーディングルールを制定することは重要である。   Establishing coding rules is important for improving the readability of source code and preventing correction errors. In particular, it is important to establish appropriate coding rules in the development of large-scale business systems involving multiple software engineers.

同図の宣言文「int num,iNumber」において、変数「num」は、その先頭文字が「n」であるため、上記のルールR1を満たしていない。また、一つのint型宣言で「num」と「iNumber」という2つの変数をまとめて定義しているため、ルールR2も満たしていない。更に、変数「num」の文字数は3文字しかないため、ルールR3も満たしていない。ソースコード処理装置100は、コーディングルールが実際に守られているか、また、コーディングルールが守られていない箇所はどこか、を検査できる。   In the declaration statement “int num, iNumber” in the figure, the variable “num” does not satisfy the rule R1 because the first character is “n”. Further, since two variables “num” and “iNumber” are defined together in one int type declaration, the rule R2 is not satisfied. Furthermore, since the variable “num” has only three characters, the rule R3 is not satisfied. The source code processing device 100 can inspect whether the coding rules are actually observed and where the coding rules are not observed.

同図に示すAST230は、宣言文「int num,iNumber」に対応する。第1構文モデル生成部122は、変数の宣言文に出会うと、まず、第1ASTルールに基づき、LocalVariableDeclaration232をAST230に設定する。子ノードとして、int型を示すノードであるIntType234と変数リストを示すノードであるVariableDeclarators236が設定される。変数「num」、変数「iNumber」に対しては、VariableDeclarator238とIdentifier:"num"240、VariableDeclarator242とIdentifier:"iNumber"244がそれぞれ設定されている。   The AST 230 shown in the figure corresponds to the declaration sentence “int num, iNumber”. When the first syntax model generation unit 122 encounters a variable declaration statement, it first sets the LocalVariableDeclaration 232 in the AST 230 based on the first AST rule. As child nodes, IntType 234 which is a node indicating an int type and VariableDeclarators 236 which is a node indicating a variable list are set. For the variable “num” and the variable “iNumber”, VariableDeclarator 238 and Identifier: “num” 240 and VariableDeclarator 242 and Identifier: “iNumber” 244 are set, respectively.

図6は、ルールR1に対応して注釈ノードが設定されたAST230を示す図である。
検査部128には、上述したルールR1〜R3が検出条件として設定される。検査部128は、まず、ルールR1「int型の変数名は、文字「i」から始まること」に違反している変数ノードをAST230から検索する。検査部128は、AST230を走査して、IntType234を見つけると、その親ノードであるLocalVariableDeclaration232の子ノードの中からidentifierノードを探し、変数名をチェックする。変数「num」はルールR1に違反している。注釈ノード設定部130はIdentifier:"num"240に注釈ノード250を設定する。
FIG. 6 is a diagram showing the AST 230 in which annotation nodes are set corresponding to the rule R1.
In the inspection unit 128, the above-described rules R1 to R3 are set as detection conditions. The inspection unit 128 first searches the AST 230 for a variable node that violates the rule R1 “int-type variable name starts with the letter“ i ””. When the inspection unit 128 scans the AST 230 and finds the IntType 234, the inspection unit 128 searches for the identifier node among the child nodes of the local node LocalVariableDeclaration 232 and checks the variable name. The variable “num” violates rule R1. The annotation node setting unit 130 sets the annotation node 250 to Identifier: “num” 240.

注釈ノード設定部130は、最終的に、AST230中の注釈ノード250を収集し、リスト化して出力部116に出力させる。また、コード生成部126は、注釈ノード250を含むAST230からソースコードを生成してもよい。コード生成部126はソースコード中において、注釈ノード250の対応する箇所に注釈内容を示すコメントを付記してもよい。   The annotation node setting unit 130 finally collects the annotation nodes 250 in the AST 230, lists them, and outputs them to the output unit 116. The code generation unit 126 may generate a source code from the AST 230 including the annotation node 250. The code generation unit 126 may add a comment indicating the annotation content to a corresponding location of the annotation node 250 in the source code.

図7は、更に、ルールR2、R3に対応して注釈ノードが設定されたときのAST230を示す図である。
検査部128は、次に、ルールR2「変数宣言においては、1回の型宣言で複数の変数を定義しないこと」に違反している箇所を検索する。検査部128は、AST230を走査して、LocalVariableDeclaration232を見つけると、その子ノードの中からidentifierノードを探し、宣言されている変数の数をチェックする。ステートメント「int num,iNumber」はルールR2に違反している。注釈ノード設定部130はVariableDeclarators236に注釈ノード254を設定する。
FIG. 7 is a diagram showing the AST 230 when an annotation node is set corresponding to the rules R2 and R3.
Next, the inspection unit 128 searches for a location that violates the rule R2 “Do not define a plurality of variables in one type declaration in a variable declaration”. When the inspection unit 128 scans the AST 230 and finds the LocalVariableDeclaration 232, the inspection unit 128 searches for an identifier node among the child nodes and checks the number of variables declared. The statement “int num, iNumber” violates rule R2. The annotation node setting unit 130 sets the annotation node 254 in the VariableDeclarators 236.

検査部128は、ルールR3「変数名は4文字以上であること」に違反している箇所を検索する。検査部128は、AST230を走査して、LocalVariableDeclaration232を見つけると、その子ノードの中からidentifierノードを探し、宣言されている変数の文字数をチェックする。変数「num」はルールR3に違反しているため、注釈ノード設定部130はIdentifier:"num"240に注釈ノード252を設定する。   The inspection unit 128 searches for a location that violates the rule R3 “variable name must be 4 characters or more”. When the inspection unit 128 scans the AST 230 and finds the LocalVariableDeclaration 232, the inspection unit 128 searches for an identifier node among the child nodes and checks the number of characters of the declared variable. Since the variable “num” violates the rule R 3, the annotation node setting unit 130 sets the annotation node 252 in Identifier: “num” 240.

検出条件は、コーディングルールに関わる条件に限らない。たとえば、コンピュータプログラムの構造として満たされるべき条件を検出条件として設定してもよい。以下、2例を示す。   The detection condition is not limited to the condition related to the coding rule. For example, a condition that should be satisfied as the structure of the computer program may be set as the detection condition. Two examples are shown below.

例1.特定の処理の開始時に記載されるステートメントと終了時に記載されるべきステートメントの確認
たとえば、C++の場合、「new」演算子によりメモリの動的確保がなされる。メモリを解放する演算子は「delete」である。new演算子で確保したメモリは、使用後には、deleteによって解放しなければならない。また、「open」演算子によりファイルディスクリプタを開いたあとは、「close」演算子により同ファイルディスクリプタを閉じなければならない。このように、「メモリの動的確保」や「ファイルディスクリプタの使用」といった特定の処理の前後においては、所定のステートメントが一対として記述されなければならない。以下、newやopenのように特定の処理の開始時に記述されるべき構成要素を「開始要素」、終了時に記述されるべき構成要素を「終了要素」とよぶ。1つのソースファイルにおいては開始要素と終了要素の数は同数となるべきである。開始要素に対応するノードを「先端ノード」、終了要素に対応するノードを「終端ノード」とよぶことにすると、ASTにおいては、先端ノードの数と終端ノードの数は同数となるべきである。
このような観点から、ソースコード処理装置100は先端ノードと終端ノードに基づいてプログラム構造上の不備がないかを検査してもよい。
Example 1. Confirmation of statements to be described at the start and end of a specific process For example, in the case of C ++, memory is dynamically allocated by a “new” operator. The operator that releases the memory is “delete”. Memory allocated with the new operator must be freed with delete after use. In addition, after opening the file descriptor by the “open” operator, the file descriptor must be closed by the “close” operator. Thus, a predetermined statement must be described as a pair before and after specific processing such as “dynamic memory allocation” and “use of file descriptor”. Hereinafter, a component to be described at the start of a specific process such as new or open is referred to as a “start element”, and a component to be described at the end is referred to as an “end element”. In one source file, the number of start elements and end elements should be the same. If the node corresponding to the start element is called “front end node” and the node corresponding to the end element is called “end node”, in AST, the number of front end nodes and the number of end nodes should be the same.
From this point of view, the source code processing device 100 may inspect whether there is a defect in the program structure based on the leading node and the terminal node.

ここでは、openを開始要素、closeを終端要素として説明する。まず、検査部128はASTを走査し、openに対応する先端ノードを検出すると、先端ノード数をインクリメントする。また、closeに対応する終端ノードを検出すると、終端ノード数をインクリメントする。ASTの全ノードを走査したとき、先端ノード数と終端ノード数が同数でなかったときには、ソースコードの記述に欠陥があるのかもしれない。先端ノード数が終端ノード数よりも多いときには、開いたまま閉じられていないファイルディスクリプタが存在する可能性がある。このような場合、注釈ノード設定部130その旨を警告するための注釈ノードを設定する。   Here, open will be described as a start element and close as an end element. First, when the inspection unit 128 scans AST and detects a leading node corresponding to open, the number of leading nodes is incremented. When the terminal node corresponding to close is detected, the number of terminal nodes is incremented. If all the AST nodes are scanned and the number of leading and terminal nodes is not the same, the source code description may be defective. When the number of leading nodes is larger than the number of terminal nodes, there may be a file descriptor that is open and not closed. In such a case, the annotation node setting unit 130 sets an annotation node for warning to that effect.

例2.オーバーライドの範囲の確認
あるclassAにおいてそのメンバ関数method1()を定義したとする。このクラスを継承するclassBは、独自にメンバ関数method1()を定義しなくても、classAのメンバ関数method1()を自らのメンバ関数として提供できる。いわば、classBはclassAのメンバ関数を借用することになる。classA.method1()をコールしたときに実行される処理内容と、classB.method1()をコールしたときに実行される処理内容は全く同じとなる。したがって、classAに定義されているmethod1()の内容を修正すると、classA.method1()だけでなく、classB.method1()の挙動も変化する。
Example 2. Confirming the override range Assume that classA defines its member function method1 (). ClassB, which inherits this class, can provide the member function method1 () of classA as its own member function without defining its own member function method1 (). In other words, classB borrows the member function of classA. The processing content executed when classA.method1 () is called is exactly the same as the processing content executed when classB.method1 () is called. Therefore, when the contents of method1 () defined in classA are modified, not only classA.method1 () but also behavior of classB.method1 () changes.

一方、classBにおいて、独自に、同名のmethod1()を再定義してもよい。これをオーバーライド(override)とよぶ。この場合、classA.method1()をコールしたときに実行される処理内容はclassAのmethod1()により定義され、classB.method1()をコールしたときに実行される処理内容はclassBのmethod1()により定義される。classAとclassBは、同名のインタフェースmethod1()を提供しつつ、その処理内容をclassAとclassBで異ならせることができる。オーバーライドというプログラミングテクニックは、classBのmethod1()と、classAのmethod1()の処理内容がほとんど同じでありながら若干異なる場合に利用されることが多い。   On the other hand, method1 () with the same name may be redefined independently in classB. This is called override. In this case, the processing content executed when classA.method1 () is called is defined by classA method1 (), and the processing content executed when classB.method1 () is called is determined by classB method1 (). Defined. classA and classB can provide different methods of classA and classB while providing interface method1 () with the same name. The programming technique of override is often used when the processing contents of method1 () of classB and method1 () of classA are almost the same but slightly different.

classBでmethod1()を再定義、すなわち、オーバーライドしている場合、classA.method1()の内容を修正すると、当然ながらclassA.method1()の挙動は変化するが、classB.method1()の挙動は変化しない。classA.method1()の内容の修正にあわせて、classB.method1()も変化させたい場合には、classB.method1()にも、同様の修正を忘れずに施す必要がある。
このような観点から、ソースコード処理装置100は、各クラスのメンバ関数について、そのオーバーライドされている箇所を特定することにより、ソースコード解析を支援する。
If method1 () is redefined in classB, that is, if you override classA.method1 (), the behavior of classA.method1 () will of course change, but the behavior of classB.method1 () It does not change. If you want to change classB.method1 () along with the modification of classA.method1 (), remember to make the same modification to classB.method1 ().
From this point of view, the source code processing device 100 supports source code analysis by specifying the overridden part of each class member function.

具体的には、検査部128は、まず、classAを継承しているサブクラス群を特定し、これらのサブクラスにおいて定義されるメンバ関数を検索する。そして、この中からmethod1()という名前のメンバ関数を特定する。classAのサブクラスにおいてmethod1()が定義されていれば、ここでオーバーライドとなっていることがわかる。注釈ノード設定部130は該当箇所に注釈ノードを設定する。classAのmethod1()を修正したときには、このようにして設定された注釈ノードを確認することにより、修正すべきかもしれないメンバ関数の場所を特定できる。   Specifically, the inspection unit 128 first identifies a subclass group that inherits classA, and searches for member functions defined in these subclasses. Then, a member function named method1 () is specified from among them. If method1 () is defined in the subclass of classA, you can see that it is overridden here. The annotation node setting unit 130 sets an annotation node at the corresponding location. When method1 () of classA is modified, the location of the member function that may be modified can be specified by checking the annotation node set in this way.

注釈ノード設定部130は、最終的に、注釈ノード群をリスト化する。このリストには、注釈ノードの内容、注釈ノードが所属するソースファイル名、行番号、桁位置、行テキスト、親ノード名等、注釈ノードの位置を示す情報も含まれることが好ましい。ユーザは、この注釈ノードのリストにより、膨大なソースコードの中から重点的に確認すべき箇所を把握できるため、ソースコードの開発・保守が容易となる。   The annotation node setting unit 130 finally lists the annotation node group. This list preferably also includes information indicating the position of the annotation node, such as the contents of the annotation node, the name of the source file to which the annotation node belongs, the line number, the digit position, the line text, and the parent node name. Since the user can grasp the location to be confirmed from a large amount of source code by using the list of annotation nodes, the development and maintenance of the source code is facilitated.

以上、実施例に基づいて、ソースコード処理装置100を説明した。
ソースコード処理装置100は、「第1ASTルール」、「第2ASTルール」、「ソース生成ルール」を用意すれば、さまざまなプログラミング言語で記述されたソースコードを別のプログラミング言語で記述されたソースコードに変換できる。このため、さまざまなプログラミング言語が混在する業務システムにさまざまな解析ツールを適用しやすくなる。ソースコード同士を直接変換するのではなく、ソースコードの論理構造を反映させたAST同士の変換であるため、変換元ソースの論理構造を変換先ソースに反映させやすくなる。
The source code processing apparatus 100 has been described above based on the embodiments.
If the source code processing apparatus 100 prepares the “first AST rule”, “second AST rule”, and “source generation rule”, the source code described in various programming languages is source code described in another programming language. Can be converted to For this reason, it becomes easy to apply various analysis tools to a business system in which various programming languages are mixed. Since the source code is not directly converted, but is converted between ASTs reflecting the logical structure of the source code, the logical structure of the conversion source source is easily reflected in the conversion destination source.

また、検出条件にしたがってASTから該当箇所を特定し、注釈コードを設定することにより、ソースコードの解析が容易となる。ソースコードのテキスト検索ではなく、ソースコードの論理構造を反映するASTを対象とした検査であるため、膨大なソースコードの中から、コーディングルール違反をしている箇所やコーディングミスの可能性がある箇所を適確に見つけ出しやすくなる。   Further, by identifying the corresponding part from the AST according to the detection condition and setting the annotation code, the source code can be easily analyzed. Since this is not a text search of the source code but an AST that reflects the logical structure of the source code, there is a possibility of coding rule violations or coding mistakes from a huge amount of source code. This makes it easier to find the location accurately.

以上、本発明について実施例をもとに説明した。実施の形態は例示であり、それらの各構成要素や各処理プロセスの組み合わせにいろいろな変形例が可能なこと、またそうした変形例も本発明の範囲にあることは当業者に理解されるところである。   The present invention has been described based on the embodiments. The embodiments are exemplifications, and it will be understood by those skilled in the art that various modifications can be made to combinations of the respective constituent elements and processing processes, and such modifications are within the scope of the present invention. .

以上の実施の形態および変形例から把握される発明のいろいろな態様をすでに特許請求の範囲に記載したものも含むかたちにて以下に例示する。ソースコード検査装置に関連し、以下の発明が認識される。   Various aspects of the invention ascertained from the above embodiments and modifications will be exemplified below, including those already described in the claims. The following inventions are recognized in connection with the source code inspection apparatus.

A1.ソースコードを取得するコード取得部と、
前記ソースコードの構成要素に対応するノードを抽出し、前記ソースコードにおける前記構成要素の配置にしたがって前記ノードを構造化することにより、前記ソースコードの論理構造を前記ノードの集合体により示す構文モデルを生成する構文モデル生成部と、
前記構文モデルにおける各ノードを走査し、前記ソースコードの構成要素についてあらかじめ設定されている検出条件に合致する箇所を特定する検査部と、
前記特定された箇所に注釈を示すノードである注釈ノードを設定する注釈ノード設定部と、
を備えることを特徴とするソースコード検査装置。
A1. A code acquisition unit for acquiring source code;
A syntax model that shows a logical structure of the source code by a collection of nodes by extracting nodes corresponding to the components of the source code and structuring the nodes according to the arrangement of the components in the source code. A syntax model generation unit for generating
An inspection unit that scans each node in the syntax model and identifies a location that matches a detection condition set in advance for the component of the source code;
An annotation node setting unit for setting an annotation node that is a node indicating an annotation at the specified location;
A source code inspection apparatus comprising:

A2.前記検査部は、所定の命名規則に適合しない名称の変数に対応するノードに前記注釈ノードを設定することを特徴とするA1に記載のソースコード検査装置。   A2. The source code inspection apparatus according to A1, wherein the inspection unit sets the annotation node to a node corresponding to a variable whose name does not conform to a predetermined naming rule.

A3.前記検査部は、更に、所定の処理の開始時に記述されるべき構成要素に対応する先端ノードと、前記所定の処理の終了時に記述されるべき構成要素に対応する終端ノードを特定し、先端ノードの数と終端ノードの数が同数となっているかを判定し、
前記注釈ノード設定部は、前記先端ノードの数と前記終端ノードの数が同数となっていないときには、更に、前記先端ノードと前記終端ノードに関するコーディングルールが満たされていない旨を示す注釈ノードを設定することを特徴とするA1または2に記載のソースコード検査装置。
A3. The inspection unit further specifies a leading node corresponding to a component to be described at the start of a predetermined process and a terminal node corresponding to a component to be described at the end of the predetermined process, and the leading node The number of nodes and the number of terminal nodes are the same,
The annotation node setting unit further sets an annotation node indicating that a coding rule relating to the leading node and the terminal node is not satisfied when the number of the leading nodes and the number of the terminal nodes are not the same. The source code inspection apparatus according to A1 or 2, wherein:

A4.前記検査部は、第1のクラスにおいて定義されている第1のメンバ関数が、前記第1のクラスを継承する第2のクラスにおいて定義されている第2のメンバ関数によりオーバーライド(override)されているかを判定し、
前記注釈ノード設定部は、前記第2のメンバ関数が前記第1のメンバ関数をオーバーライドしているとき、前記第2のメンバ関数に対応するノードに前記注釈ノードを設定することを特徴とするA1から3のいずれかに記載のソースコード検査装置。
A4. In the checking unit, a first member function defined in a first class is overridden by a second member function defined in a second class that inherits the first class. Whether or not
The annotation node setting unit sets the annotation node to a node corresponding to the second member function when the second member function overrides the first member function. 4. The source code inspection device according to any one of 3 to 4.

A5.ソースコードを取得する処理と、
前記ソースコードの構成要素に対応するノードを抽出し、前記ソースコードにおける前記構成要素の配置にしたがって前記ノードを構造化することにより、前記ソースコードの論理構造を前記ノードの集合体により示す構文モデルを生成する処理と、
前記構文モデルにおける各ノードを走査し、前記ソースコードの構成要素についてあらかじめ設定されている検出条件に合致する箇所を特定する処理と、
前記特定された箇所に注釈を示すノードである注釈ノードを設定する処理と、
をコンピュータに実行させることを特徴とするソースコード検査プログラム。
A5. Processing to get the source code,
A syntax model that shows a logical structure of the source code by a collection of nodes by extracting nodes corresponding to the components of the source code and structuring the nodes according to the arrangement of the components in the source code. Processing to generate
A process of scanning each node in the syntax model and identifying a location that matches a detection condition set in advance for the constituent elements of the source code;
A process of setting an annotation node that is a node indicating an annotation at the specified location;
A source code inspection program characterized by causing a computer to execute.

ソースコードの言語変換過程を示す模式図である。It is a schematic diagram which shows the language conversion process of a source code. ソースコード処理装置の機能ブロック図である。It is a functional block diagram of a source code processing device. 日立ソースから変換元ASTを生成する過程を説明するための模式図である。It is a schematic diagram for demonstrating the process which produces | generates conversion origin AST from a Hitachi source. 変換元ASTから変換先AST、IBMソースを生成する過程を説明するための模式図である。It is a schematic diagram for demonstrating the process which produces | generates the conversion destination AST and IBM source from the conversion origin AST. 「int num,iNumber」という変数宣言文から生成されるASTを示す図である。It is a figure which shows AST produced | generated from the variable declaration sentence of "int num, iNumber". ルールR1に対応して注釈ノードが設定されたASTを示す図である。It is a figure which shows AST to which the annotation node was set corresponding to rule R1. 更に、ルールR2、R3に対応して注釈ノードが設定されたときのASTを示す図である。Furthermore, it is a figure which shows AST when an annotation node is set corresponding to rules R2 and R3.

符号の説明Explanation of symbols

100 ソースコード処理装置、 110 UI部、 112 入力部、 114 コード取得部、 116 出力部、 118 コード出力部、 120 データ処理部、 122 第1構文モデル生成部、 124 第2構文モデル生成部、 126 コード生成部、 128 検査部、 130 注釈ノード設定部、 140 データ保持部、 142 第1構文モデル保持部、 144 第2構文モデル保持部、 200 日立ソース、 202 IBMソース、 204 変換元AST、 220 変換先AST。   100 source code processing device, 110 UI unit, 112 input unit, 114 code acquisition unit, 116 output unit, 118 code output unit, 120 data processing unit, 122 first syntax model generation unit, 124 second syntax model generation unit, 126 Code generation unit, 128 checking unit, 130 annotation node setting unit, 140 data holding unit, 142 first syntax model holding unit, 144 second syntax model holding unit, 200 Hitachi source, 202 IBM source, 204 source AST, 220 conversion AST ahead.

Claims (5)

第1のプログラミング言語で記述されたソースコードを第1ソースコードとして取得するコード取得部と、
前記第1ソースコードの構成要素に対応するノードを基本ノードとして抽出し、前記第1ソースコードにおける前記構成要素の配置にしたがって前記基本ノードを構造化することにより、前記第1ソースコードの論理構造を前記基本ノードの集合体により示す第1構文モデルを生成する第1構文モデル生成部と、
第2のプログラミング言語において使用可能な構成要素に対応するノードである変換先ノードに前記基本ノードを変換することにより、前記第1ソースコードの論理構造を前記変換先ノードの集合体により示す第2構文モデルを生成する第2構文モデル生成部と、
前記第2構文モデルに含まれる前記変換先ノードとその構造にしたがって、前記第2のプログラミング言語において使用可能な構成要素を配列することにより、前記第2のプログラミング言語で記述されたソースコードとしての第2ソースコードを生成するコード生成部と、
を備えることを特徴とするソースコード変換装置。
A code acquisition unit for acquiring source code described in a first programming language as first source code;
A logical structure of the first source code is obtained by extracting a node corresponding to a component of the first source code as a basic node and structuring the basic node according to an arrangement of the component in the first source code. A first syntax model generation unit for generating a first syntax model indicating the basic node by an aggregate of the basic nodes;
A second that indicates the logical structure of the first source code by a collection of the conversion destination nodes by converting the basic node into a conversion destination node that is a node corresponding to a component usable in the second programming language. A second syntax model generation unit for generating a syntax model;
By arranging the components that can be used in the second programming language according to the transformation destination node and its structure included in the second syntax model, the source code described in the second programming language is used as the source code described in the second programming language. A code generator for generating a second source code;
A source code conversion device comprising:
前記第1構文モデル生成部は、前記第1のプログラミング言語において省略可能な構成要素のうち前記第1のプログラミング言語以外のプログラミング言語において必須の構成要素については、前記第1ソースコードにおいて明示的に記載されていなくても対応する前記基本ノードを抽出し、前記抽出した基本ノードを含めて前記第1構文モデルを生成することを特徴とする請求項1に記載のソースコード変換装置。   In the first source code, the first syntax model generation unit explicitly describes components that are optional in programming languages other than the first programming language among components that can be omitted in the first programming language. 2. The source code conversion apparatus according to claim 1, wherein the corresponding basic node is extracted even if not described, and the first syntax model is generated including the extracted basic node. 前記第2構文モデル生成部は、前記第1のプログラミング言語において定義される構成要素のうち前記第2のプログラミング言語において省略されるべき構成要素については、前記省略されるべき構成要素に対応する前記変換先ノードを前記第2構文モデルにおいて無効化することを特徴とする請求項1または2に記載のソースコード変換装置。   The second syntax model generation unit corresponds to the component to be omitted for the component to be omitted in the second programming language among the components defined in the first programming language. 3. The source code conversion apparatus according to claim 1, wherein a conversion destination node is invalidated in the second syntax model. 第1のプログラミング言語で記述されたソースコードを第1ソースコードとして取得する処理と、
前記第1ソースコードの構成要素に対応するノードを基本ノードとして抽出し、前記第1ソースコードにおける前記構成要素の配置にしたがって前記基本ノードを構造化することにより、前記第1ソースコードの論理構造を前記基本ノードの集合体により示す第1構文モデルを生成する処理と、
第2のプログラミング言語において使用可能な構成要素に対応するノードである変換先ノードに前記基本ノードを変換することにより、前記第1ソースコードの論理構造を前記変換先ノードの集合体により示す第2構文モデルを生成する処理と、
前記第2構文モデルに含まれる前記変換先ノードとその構造にしたがって、前記第2のプログラミング言語において使用可能な構成要素を配列することにより、前記第2のプログラミング言語で記述されたソースコードとしての第2ソースコードを生成する処理と、
をコンピュータに実行させることを特徴とするソースコード変換プログラム。
A process of acquiring source code described in a first programming language as first source code;
A logical structure of the first source code is obtained by extracting a node corresponding to a component of the first source code as a basic node and structuring the basic node according to an arrangement of the component in the first source code. Generating a first syntax model that represents a set of basic nodes as follows:
A second that indicates the logical structure of the first source code by a collection of the conversion destination nodes by converting the basic node into a conversion destination node that is a node corresponding to a component usable in the second programming language. Processing to generate a syntax model;
By arranging the components that can be used in the second programming language according to the transformation destination node and its structure included in the second syntax model, the source code described in the second programming language is used as the source code described in the second programming language. Processing to generate the second source code;
A source code conversion program for causing a computer to execute.
第1のプログラミング言語で記述されたソースコードを第1ソースコードとして取得するステップと、
前記第1ソースコードの構成要素に対応するノードを基本ノードとして抽出し、前記第1ソースコードにおける前記構成要素の配置にしたがって前記基本ノードを構造化することにより、前記第1ソースコードの論理構造を前記基本ノードの集合体により示す第1構文モデルを生成するステップと、
第2のプログラミング言語において使用可能な構成要素に対応するノードである変換先ノードに前記基本ノードを変換することにより、前記第1ソースコードの論理構造を前記変換先ノードの集合体により示す第2構文モデルを生成するステップと、
前記第2構文モデルに含まれる前記変換先ノードとその構造にしたがって、前記第2のプログラミング言語において使用可能な構成要素を配列することにより、前記第2のプログラミング言語で記述されたソースコードとしての第2ソースコードを生成するステップと、
を含むことを特徴とするソースコード変換方法。
Obtaining a source code described in a first programming language as a first source code;
A logical structure of the first source code is obtained by extracting a node corresponding to a component of the first source code as a basic node and structuring the basic node according to an arrangement of the component in the first source code. Generating a first syntax model that represents a set of basic nodes;
A second that indicates the logical structure of the first source code by a collection of the conversion destination nodes by converting the basic node into a conversion destination node that is a node corresponding to a component usable in the second programming language. Generating a syntax model;
By arranging the components that can be used in the second programming language according to the transformation destination node and its structure included in the second syntax model, the source code described in the second programming language is used as the source code described in the second programming language. Generating a second source code;
A source code conversion method comprising:
JP2008318346A 2008-12-15 2008-12-15 Source code converting device Pending JP2010140408A (en)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP2008318346A JP2010140408A (en) 2008-12-15 2008-12-15 Source code converting device

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2008318346A JP2010140408A (en) 2008-12-15 2008-12-15 Source code converting device

Publications (1)

Publication Number Publication Date
JP2010140408A true JP2010140408A (en) 2010-06-24

Family

ID=42350478

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2008318346A Pending JP2010140408A (en) 2008-12-15 2008-12-15 Source code converting device

Country Status (1)

Country Link
JP (1) JP2010140408A (en)

Cited By (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2012032890A1 (en) * 2010-09-09 2012-03-15 株式会社日立製作所 Source code conversion method and source code conversion program
WO2012057170A1 (en) * 2010-10-27 2012-05-03 株式会社日立製作所 Method of converting source code and source code conversion program
JP2014016914A (en) * 2012-07-11 2014-01-30 Fujitsu Ltd Extended language specification information providing method, extended language specification information providing program, and compiling device
CN103617046A (en) * 2013-12-12 2014-03-05 用友软件股份有限公司 Method and device for scanning and extracting resources to be translated in target system source codes
WO2015141150A1 (en) * 2014-03-19 2015-09-24 日本電気株式会社 Source code generation device, source code generation method, and recording medium
KR101770292B1 (en) * 2014-11-27 2017-08-22 주식회사 엘지씨엔에스 Computer-executable model reverse engineering method and apparatus performing the same
KR20180115921A (en) * 2017-04-14 2018-10-24 박태영 Conversion method of programming language

Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH01175036A (en) * 1987-12-29 1989-07-11 Fujitsu Ltd Source selection type conversion system for source converter
JPH0281230A (en) * 1988-09-19 1990-03-22 Hitachi Ltd Syntex analysis and languaging processing system
JP2007140845A (en) * 2005-11-17 2007-06-07 Hitachi Ltd Program management method and program transition assistance apparatus
JP2008165342A (en) * 2006-12-27 2008-07-17 Hitachi Software Eng Co Ltd Source code creating method, device and program
JP2008250914A (en) * 2007-03-30 2008-10-16 Canon Software Inc Program correcting device, method and program

Patent Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH01175036A (en) * 1987-12-29 1989-07-11 Fujitsu Ltd Source selection type conversion system for source converter
JPH0281230A (en) * 1988-09-19 1990-03-22 Hitachi Ltd Syntex analysis and languaging processing system
JP2007140845A (en) * 2005-11-17 2007-06-07 Hitachi Ltd Program management method and program transition assistance apparatus
JP2008165342A (en) * 2006-12-27 2008-07-17 Hitachi Software Eng Co Ltd Source code creating method, device and program
JP2008250914A (en) * 2007-03-30 2008-10-16 Canon Software Inc Program correcting device, method and program

Cited By (17)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2012059026A (en) * 2010-09-09 2012-03-22 Hitachi Ltd Source code conversion method and source code conversion program
WO2012032890A1 (en) * 2010-09-09 2012-03-15 株式会社日立製作所 Source code conversion method and source code conversion program
US9027002B2 (en) 2010-10-27 2015-05-05 Hitachi, Ltd. Method of converting source code and source code conversion program
WO2012057170A1 (en) * 2010-10-27 2012-05-03 株式会社日立製作所 Method of converting source code and source code conversion program
CN103140838A (en) * 2010-10-27 2013-06-05 株式会社日立制作所 Method of converting source code and source code conversion program
CN103140838B (en) * 2010-10-27 2015-06-17 株式会社日立制作所 Method of converting source code
JP5659238B2 (en) * 2010-10-27 2015-01-28 株式会社日立製作所 Source code conversion method and source code conversion program
JP2014016914A (en) * 2012-07-11 2014-01-30 Fujitsu Ltd Extended language specification information providing method, extended language specification information providing program, and compiling device
CN103617046A (en) * 2013-12-12 2014-03-05 用友软件股份有限公司 Method and device for scanning and extracting resources to be translated in target system source codes
CN103617046B (en) * 2013-12-12 2017-05-24 用友网络科技股份有限公司 Method and device for scanning and extracting resources to be translated in target system source codes
WO2015141150A1 (en) * 2014-03-19 2015-09-24 日本電気株式会社 Source code generation device, source code generation method, and recording medium
JPWO2015141150A1 (en) * 2014-03-19 2017-04-06 日本電気株式会社 Source code generation apparatus, source code generation method, and recording medium
US10360006B2 (en) 2014-03-19 2019-07-23 Nec Corporation Source code generation device, source code generation method, and recording medium
KR101770292B1 (en) * 2014-11-27 2017-08-22 주식회사 엘지씨엔에스 Computer-executable model reverse engineering method and apparatus performing the same
CN107148615A (en) * 2014-11-27 2017-09-08 乐金信世股份有限公司 Computer executable model reverse engineering approach and device
KR20180115921A (en) * 2017-04-14 2018-10-24 박태영 Conversion method of programming language
KR101952328B1 (en) * 2017-04-14 2019-02-26 박태영 Conversion method of programming language

Similar Documents

Publication Publication Date Title
US9122540B2 (en) Transformation of computer programs and eliminating errors
CN103092761B (en) Method and device of recognizing and checking modifying code blocks based on difference information file
CN109033843B (en) Java file dependency analysis method and module for distributed static detection system
US20070277163A1 (en) Method and tool for automatic verification of software protocols
US8434062B2 (en) Enhancing source code debugging and readability using visual symbols
US8423971B2 (en) Generating an application software library
US20150026666A1 (en) Analysis system, analysis method, and computer program product
JP2010140408A (en) Source code converting device
JP2010504572A (en) Generation of transition systems used in model checking
CN110543427A (en) Test case storage method and device, electronic equipment and storage medium
Sánchez et al. Tandem: A taxonomy and a dataset of real-world performance bugs
Haitzer et al. DSL-based support for semi-automated architectural component model abstraction throughout the software lifecycle
CN115292058A (en) Service scene level service topology generation method and device and electronic equipment
Liuying et al. Test selection from UML statecharts
JP2010140407A (en) Source code inspection device
Tekin et al. A graph mining approach for detecting identical design structures in object-oriented design models
Samuel et al. A novel test case design technique using dynamic slicing of UML sequence diagrams
Rahman et al. A DSL for importing models in a requirements management system
US9703576B2 (en) Aspect scoping in a modularity runtime
EP2535813B1 (en) Method and device for generating an alert during an analysis of performance of a computer application
Ishio et al. Mining coding patterns to detect crosscutting concerns in Java programs
CN114691197A (en) Code analysis method and device, electronic equipment and storage medium
Zhang et al. A new semantic annotation approach for software vulnerability source code
WO2016085213A1 (en) Computer-executable model reverse engineering method and apparatus
Bisanz Pattern-based smell detection in TTCN-3 test suites

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20110310

A977 Report on retrieval

Effective date: 20121016

Free format text: JAPANESE INTERMEDIATE CODE: A971007

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20121113

A02 Decision of refusal

Effective date: 20130312

Free format text: JAPANESE INTERMEDIATE CODE: A02