WO2015099008A1 - コンピュータプログラム生成装置 - Google Patents
コンピュータプログラム生成装置 Download PDFInfo
- Publication number
- WO2015099008A1 WO2015099008A1 PCT/JP2014/084237 JP2014084237W WO2015099008A1 WO 2015099008 A1 WO2015099008 A1 WO 2015099008A1 JP 2014084237 W JP2014084237 W JP 2014084237W WO 2015099008 A1 WO2015099008 A1 WO 2015099008A1
- Authority
- WO
- WIPO (PCT)
- Prior art keywords
- subtree
- node
- statement
- branch
- computer program
- Prior art date
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/30—Creation or generation of source code
Definitions
- the present invention relates to a computer program generation device, and more particularly to a computer program generation device that generates a computer program described in a predetermined programming language.
- a computer program specification is first created.
- a programmer interprets the created specifications and grasps the meaning and creates a computer program described in a programming language such as C language.
- the created computer program is inspected and an operation for removing defects (bugs) included in the created computer program is performed.
- the created computer program includes many traps derived from misunderstandings and carelessness of the programmer. In order to remove these defects, a great amount of time is required. Therefore, there is a problem that development efficiency is not improved and quality is not improved.
- Japanese Patent Laid-Open No. 05-181651 discloses a technique for automatically creating a computer program from computer program specifications.
- a design knowledge base is constructed by inputting program design knowledge in advance, and a program specification is input later and converted into a syntax tree. A subtree is extracted from the converted syntax tree and a design knowledge base is applied to generate a program. In this method, program generation is not always successful in all cases.
- the root cause of the unsuccessful portion of the method disclosed in Japanese Patent Laid-Open No. 05-181651 is that the computer interprets the semantic interpretation, which is most difficult for the computer, to a dictionary called design knowledge. If a huge amount of design knowledge is registered in the design knowledge base, it is theoretically possible to expect completeness. However, time constraints such as a huge amount of time to search and apply the design knowledge and design This method is not practical given the practical limitations such as how to specifically collect knowledge. In addition, the reason why programmers can create programs with the above-mentioned method of creating computer programs is because humans have the ability to understand the contents and purpose of documented specifications and make appropriate judgments. It is. It is inherently impossible for a computer program without such ability to decipher the program specification.
- An object of the present invention is to provide a computer program generation device capable of improving the development efficiency of a computer program.
- the computer program generation device is a computer program generation device that generates a computer program described in a predetermined programming language.
- the computer program generation device includes a term database, a grammar database, an input unit, and a generation unit.
- the term database stores terms defined by the user and identifiers corresponding to the terms.
- the grammar database is a tree structure formed according to the grammar of the programming language, and has a tree structure including nodes that store components of the command statements used in the programming language.
- the input unit receives input of an algorithm of a computer program including terms.
- the generation unit searches the term database, reads the identifier corresponding to the term input in the input unit, searches the grammar database, reads the component from the node, and arranges the read identifier and the component Generate a statement.
- a command statement used in a predetermined programming language is generated according to the algorithm of the input computer program. Since the algorithm of the computer program including the generated command statement is the same as the input algorithm, the computer program does not perform an operation different from the user's intention. Therefore, the development efficiency of the computer program can be improved.
- the input unit displays an interface for receiving selection of an instruction used in an algorithm among a plurality of instructions used in a programming language and input of a term used in the selected instruction.
- the user can input an algorithm by inputting an operation for selecting an instruction and a term used for the selected instruction.
- the user can generate a computer program without learning a predetermined language used for describing the algorithm or a predetermined programming language.
- the imperative sentence includes an assignment statement including an arithmetic expression, a variable, and an assignment statement definer.
- An assignment statement definer defines that the result of an arithmetic expression is assigned to a variable.
- the grammar database includes an assignment statement definition subtree, a variable subtree, and an arithmetic expression subtree.
- the assignment statement definition subtree is a subtree that defines an assignment statement definer, and includes a node that stores the assignment statement definer.
- the variable subtree is a subtree that defines a variable, and includes a node that stores the variable.
- the arithmetic expression subtree is a subtree that defines an arithmetic expression, and includes a node that stores components of the arithmetic expression.
- the generation unit cruises the assignment statement definition subtree, the variable subtree, and the arithmetic expression subtree in a predetermined order.
- the generator generates the assignment statement components by cruising the assignment statement definition subtree, the variable subtree, and the arithmetic expression subtree in a predetermined order.
- the generated assignment statement of the predetermined programming language does not include a grammatical error, so that development efficiency can be improved.
- the imperative sentence includes a branch sentence including a branch determination expression, an imperative phrase, and a branch sentence definer.
- the instruction phrase indicates an instruction to be executed when the branch determination expression is satisfied.
- the branch statement definer indicates that the command statement is a branch command.
- the grammar database includes a judgment expression subtree, a command phrase subtree, and a branch statement definition subtree.
- the decision expression subtree is a subtree that defines a branch decision expression, and includes a node that stores the components of the branch decision expression.
- the command phrase subtree is a subtree that defines a command phrase, and includes nodes that store components of the command phrase.
- the branch statement definition subtree is a subtree that defines a branch statement definer, and includes a node that stores the branch statement definer.
- the generation unit cruises the judgment expression subtree, the command phrase subtree, and the branch statement definition subtree in a predetermined order.
- the generation unit cruises the judgment expression subtree, the command phrase subtree, and the branch sentence definition subtree in a predetermined order, thereby reading the constituent elements of the branch sentence.
- the generated branch sentence of the predetermined programming language does not include a grammatical error, so that development efficiency can be improved.
- FIG. 1 It is a functional block diagram which shows the hardware constitutions of the computer program generation apparatus which concerns on embodiment of this invention. It is a block diagram which shows the software structure of the computer program production
- FIG. 7 is a table showing correspondence between self labels input to the interface shown in FIG. 6 and self labels converted from the self labels.
- FIG. It is a flowchart of the computer program generation process shown in FIG. It is a flowchart of the command sentence generation process shown in FIG. It is a figure which shows the modification of the structure of the arithmetic expression subtree shown in FIG.
- FIG. 1 is a functional block diagram showing a hardware configuration of a computer program generation device (hereinafter abbreviated as “generation device”) 1 according to the present embodiment.
- generation device a computer program generation device
- FIG. 1 shows data, programs, and the like used by the generation device 1.
- the generation apparatus 1 generates a computer program 24 described in a predetermined programming language.
- the “computer program” means a program generated by the generation device 1.
- the predetermined programming language is C language. That is, the generating apparatus 1 generates the computer program 24 by generating a C language command statement according to the algorithm input by the user.
- the generation device 1 is, for example, a PC (personal computer).
- the PC functions as the generation device 1 by installing a computer program generation program 21 (hereinafter, abbreviated as “generation program 21”) described later.
- generation program 21 a computer program generation program 21
- the PC uses the grammar database 22 and the term database 23 stored in advance in the HDD 14 when operating as the generation apparatus 1. Details of the grammar database 22 and the term database 23 will be described later.
- the generation device 1 includes a CPU (Central Processing Unit) 11, a RAM (Random Access Memory) 12, an operation unit 13, a monitor 14, and an HDD (Hard Disk Drive) 15.
- CPU Central Processing Unit
- RAM Random Access Memory
- HDD Hard Disk Drive
- the CPU 11 loads the program stored in the HDD 15 into the RAM 12 and executes the loaded program to control the generation device 1.
- the RAM 12 is a main memory of the generation device 1.
- the operation unit 13 is a mouse and a keyboard, and accepts user operations.
- the monitor 14 is a liquid crystal display, for example, and displays a program execution result by the CPU 11.
- the HDD 15 stores a generation program 21, a grammar database 22, a term database 23, and a computer program 24.
- the grammar database 22 is a tree structure formed in accordance with the C language grammar, and has a tree structure including leaf nodes that store components of command statements used in the C language.
- the grammar database 22 has a plurality of tree structures corresponding to each statement in C language.
- the grammar database 22 includes an assignment sentence tree 3 and a branch sentence tree 4.
- the assignment statement tree 3 is tree-structured data formed according to the grammar of the assignment statement used in the C language.
- the branch sentence tree 4 is tree-structured data formed according to the grammar of a branch sentence (hereinafter simply referred to as “branch sentence”) based on binary logic used in the C language. Details of the assignment statement and branch statement definition, and the assignment statement tree 3 and the branch statement tree 4 will be described later.
- the term database 23 stores a term defined by a user and an identifier corresponding to the term in association with each other.
- An identifier is information corresponding to a term on a one-to-one basis, and is a symbol string used as a variable, constant, or function in a C language command statement. Definitions of terms and identifiers will be described later.
- the generation program 21 displays an interface for accepting an input of an algorithm of a computer program that the user wants to generate on the monitor 14, and generates a C language command statement according to the algorithm input through the interface. Details of the operation of the generation program 21 will be described later.
- FIG. 2 is a functional block diagram showing a software configuration in the generation apparatus 1.
- generation device 1 includes an input unit 61, a knowledge base 62, and a generation unit 63.
- the input unit 61 and the generation unit 63 are functional units realized by the generation program 21.
- the knowledge base 62 includes a grammar database 22 and a term database 23.
- the input unit 61 receives an input of a computer program algorithm including terms stored in the term database 23.
- the generation unit 63 searches the term database 23 and reads an identifier corresponding to the term input by the input unit 61, searches the grammar database 22 and reads a constituent element from the leaf node.
- the generation unit 63 generates a C language command statement by arranging the read identifiers and components.
- Requirement specification is a human requirement or a statement of intention for solving a problem. Creation of requirement specifications is limited to humans.
- An algorithm is a specific method for solving a problem, that is, a procedure that can be executed mechanically. In generating a computer program using the generating apparatus 1, algorithm determination is limited to humans.
- the requirement specification is a human decision that cannot be substituted by a computer because it is an expression of a human request.
- the algorithm is a concrete method for realizing the human request, the determination of the algorithm is also a human decision.
- the generation device 1 is not involved in determining an algorithm that is a human decision item.
- a system that handles content is shared by humans, and a system that handles formats (formal system) is shared by the generation device 1.
- the formal system is a system that can be mechanically operated without any content. That is, the generation device 1 does not execute the semantic interpretation of the requirement specifications and algorithms, which are human items.
- the minimum description target for describing the required specifications and algorithm is two types, “case division” and “arithmetic expression” for solving the problem.
- first-order predicate logic it is empirically known that most current propositions in mathematics can be described by first-order predicate logic. The reduction is a natural consequence.
- computer programs can be described by three types of control statements: sequential processing, branch processing, and iterative processing, and iterative processing can be described by a combination of sequential processing and branch processing. . If it is within the scope of creating a practical computer program, first-order predicate logic is sufficient.
- function calls may be used when describing required specifications and algorithms.
- a function call is a group of required specifications and corresponds to a group of algorithms. The reason why the function call can be used for the description of the requirement specification and the algorithm will be described below.
- a primitive recursive function in a computable function is a basic theory.
- the primitive recursive function teaches that a computable function is constructed by combining function synthesis and primitive recursion using three initial functions of a zero function, the latter function, and a projection function as starting points. In this embodiment, this concept is also respected to the maximum extent.
- a computer program corresponding to an initial function is called an “initial program”
- the initial program is a “system function” prepared by an OS (operating system) or a programming language, and a “basic function” prepared by the generating apparatus 1 independently.
- a basic function is a program that performs the most basic functions. In accordance with the above teachings, it is understood that when forming a program function, it is shown that an already defined function becomes a function element of the new function. This teaching makes "function call" a necessary function in a program.
- the description means of the requirement specification and the algorithm when expressed in terms of programming languages, are three kinds of description statements: an assignment statement, a branch statement, and a function call. .
- the above three kinds of sentences are used as basic description sentences.
- content terms are symbolized according to certain rules, and the symbolized terms are referred to as “identifiers”.
- identifiers a composition in which a content system and a formal system coexist with terms interposed therebetween is drawn. It is a composition in which content terms and formal identifiers coexist on the same description object.
- a human grasps the semantic content of a description object in the target world by using a term
- the program generation apparatus grasps a description object in the formal system by using an identifier.
- Content and formal contacts appear on terms and identifiers. This is a duality setting between content and formal systems.
- FIG. 3 is a flowchart of the generation program 21 shown in FIG. With reference to FIG. 3, the operation of the generation apparatus 1 that executes the generation program 21 will be described. Note that the grammar database 22 and the term database 23 are stored in the HDD 15 before the generation program 21 starts the processing shown in FIG.
- the generation device 1 displays an algorithm input interface on the monitor 14 and receives an input of an algorithm of a computer program including terms stored in the term database 23 (step S1).
- the process of step S1 corresponds to the process executed by the input unit 61 shown in FIG.
- the algorithm of a computer program described by assignment statements and branch statements includes terms expressed in natural language. Thereby, even if the user has not mastered programming languages, such as C language, the user can input the algorithm which can understand the content easily.
- step S3 When the generation apparatus 1 receives a program generation instruction (Yes in step S2), the generation apparatus 1 generates a computer program 24 according to an algorithm input to the interface (step S3).
- the process in step S3 corresponds to the process executed by the generation unit 63 shown in FIG.
- the generation device 1 searches the term database 23, reads the identifier corresponding to the term input to the interface, searches the grammar database 22, and reads the component from the leaf node. Then, the generation device 1 generates a C-language command statement by arranging the read identifiers and components.
- step S1 the processing of the generation program 21 will be described in more detail.
- step S1 the term database 23 will be described.
- FIG. 4 is a diagram illustrating an example of the term database 23.
- term database 23 is a relational type and has one table.
- each line corresponds to one record.
- Each record has fields of position, term, identifier, type, and array dimension number.
- the position indicates the place where the term is registered in the term database 23 and is information unique to each record. Terms are defined by the user and written in natural language so that the user can understand their meaning, as described above.
- An identifier is a symbol string corresponding to a term on a one-to-one basis, and is used to create a C language command statement.
- the identifier registered in the term database 23 shown in FIG. 4 is used as a variable in a C language command statement.
- the type indicates the data type of the identifier in the computer program 24, and an integer type, a real number type, a character string type, and the like are recorded.
- the number of array dimensions indicates whether the identifier is used as a variable indicating an array. If the number of array dimensions is 0, the corresponding identifier is used as a single variable. If the number of array dimensions is 1 or more, the corresponding identifier is used as an array of dimensions (subscripted variables) corresponding to the number of array dimensions.
- the identifier “V001” corresponds to the term “temperature measurement value” defined by the user.
- the data type of the identifier “V001” is a real number type, and since the number of array dimensions is 0, it can be seen that it is used as a single variable.
- the type and the number of array dimensions may not be recorded. This is because the type and the number of array dimensions are information indicating attributes when the identifier is used as a variable in the computer program, and thus do not directly affect the definition of the term.
- a database for defining identifier attributes may be prepared separately and stored in the HDD 15.
- FIG. 5 is a diagram illustrating an initial screen of the algorithm input interface 5 (algorithm input screen) displayed on the monitor 14.
- the interface 5 includes a menu bar 51, a line number column 52, a label input column 53, a sentence description column 54, and a sentence name column 55.
- the line number column 52, the label input column 53, the sentence description column 54, and the sentence name column 55 are all blank.
- the menu bar 51 displays instructions (assignment sentence, branch sentence) used for the algorithm among a plurality of instructions used for the C language.
- the start sentence and end sentence are statements that declare the start and end of the algorithm.
- the function call statement is used to call a function registered in the knowledge base 62. In FIG. 2, the display of the database in which the function is registered is omitted. The user operates the menu bar 51 to select an instruction used in the algorithm.
- the sentence description column 54 is an area for describing a term used for the instruction selected by the menu bar 51, an arithmetic expression used for the selected instruction, and the like.
- the line number column 52 is an area for describing a line number indicating the position of the instruction of the algorithm input to the sentence description column 54.
- the label input field 53 is an area for inputting a label (self label) for specifying an algorithm command input to the sentence description field 54.
- the sentence name column 55 is used to display information indicating the type of algorithm command input to the sentence description column 54.
- FIG. 6 is a diagram showing the interface 5 after an instruction is selected by a user and terms and arithmetic expressions used for the selected instruction are input.
- the user performs an operation of selecting one of the start statement, end statement, assignment statement, branch statement, and function call statement registered in the menu bar 51.
- the user performs an operation of selecting a start sentence from the menu bar 51 when starting input of the algorithm.
- the generation device 1 adds the line number “001” to the line number column 52 and describes “start” at the position of the sentence description column 54 corresponding to the line number “001”. Thereby, the user can easily recognize that the algorithm is started from the line number “001”.
- the generation device 1 accepts selection of an instruction (assignment statement) used in the algorithm among a plurality of instructions used in the C language.
- the generation apparatus 1 adds the line number “002” to the line number column 52 and displays the template 541 used for inputting the assignment sentence of the algorithm in the sentence description column 54.
- the user inputs an arithmetic expression including a term in the text box 541b, and inputs a term into which the result of the input arithmetic expression is substituted in the text box 541a.
- the term “temperature measurement value” is input.
- sensor output value ⁇ correction coefficient + offset (subscript A)” is input as an arithmetic expression.
- the input arithmetic expression includes the terms “sensor output value”, “correction coefficient”, “offset”, and “subscript A” as terms.
- offset (subscript A)” indicates an array.
- Offset indicates an array name
- “Subscript A” is used as an element number of the array.
- the generation device 1 displays a text box 531 in which a label is input in the label input field 53.
- the text box 531 is arranged at a position corresponding to the line number “002”.
- the user inputs the label “temperature acquisition” of the assignment statement described by the line number “002” in the text box 531.
- the label input to the text box 531 only needs to allow the user to understand the content of the assignment statement described by the line number “002”. Note that the input of the label is arbitrary, and the user may leave the text box 531 blank.
- the label input to the label input field 53 by the user is referred to as “self label”.
- the generation device 1 adds the line number “003” to the line number column 52.
- the generation apparatus 1 displays a text box 532 in which a label is input in the label input field 53.
- the text box 532 is arranged at a position corresponding to the line number “003”.
- the user inputs “temperature determination” in the text box 532 as the self label corresponding to the line number “003”.
- the generation apparatus 1 displays a branch determination expression used in the branch sentence and a template 542 used for inputting its own label in the sentence description field 54.
- the template 542 is arranged at a position corresponding to the line number “003” and includes text boxes 542a and 542b.
- the text box 542a is used for inputting a branch determination formula.
- the text box 542b is used for inputting its own label (branch destination label) indicating an instruction phrase to be executed when the branch determination formula is satisfied.
- the user inputs “temperature measurement value ⁇ internal temperature” as a branch determination formula in the text box 542a, and inputs “temperature recording” as a branch destination label in the text box 542b.
- the input branch judgment expression is described by terms and operators generally used in arithmetic operations.
- the algorithm corresponding to the input branch destination label “temperature record” is input by the user after the input of information related to the branch sentence corresponding to the line number “003” is completed.
- the generation device 1 when the user selects a function call statement from the menu bar, the generation device 1 adds a new line number to the line number column 52 in response to this operation. Similarly to the case where the assignment statement and the branch statement are selected, the generation device 1 places a text box in which its own label is input in the label input field 53, and provides a text box for inputting the function name to be called.
- the included template is arranged in the sentence description field 54.
- the user inputs a function name (term) used in the algorithm being input in a text box in the template.
- the function name (terminology) used in the algorithm and the identifier used by the generation device 1 are associated in advance in the knowledge base 62.
- the user repeats input of an assignment statement, a branch statement, and a function call statement used in the algorithm according to an algorithm created in advance.
- the user declares the end of the algorithm by performing an operation of selecting an end sentence from the menu bar 51.
- the generation device 1 adds a new line number to the line number column 52 and describes “end” in the sentence description column 54 corresponding to the added line number. This completes the algorithm input.
- the generation apparatus 1 when the generation apparatus 1 accepts an input of an algorithm of a computer program, the generation apparatus 1 selects an instruction used in the algorithm among a plurality of instructions used in the C language, and inputs a term used in the selected instruction. Accept.
- the user can input the algorithm without learning a programming language such as C language or a language for describing the algorithm.
- operators used in arithmetic expressions and branch judgment expressions are not operators defined by a specific programming language, but operators used when humans perform general arithmetic operations. is there. Therefore, the user can intuitively understand the algorithm input to the interface 5.
- the generation device 1 generates the computer program 24 according to the algorithm input to the interface (step S3). At this time, the generation device 1 refers to the assignment sentence tree 3 and the branch sentence tree 4 included in the grammar database 22 and generates an instruction sentence used in the C language.
- the structure of the assignment sentence tree 3 and the branch sentence tree 4 will be described in detail.
- FIG. 7 is a diagram showing the structure of the assignment statement tree 3.
- assignment sentence tree 3 has a tree structure formed according to the grammar of an assignment sentence used in C language, and has nodes 300 to 322.
- the node 300 is a root node indicating that the tree structure shown in FIG.
- Nodes 303, 305, 309, 311, 313, 315, 316, 318, 320, and 322 are leaf nodes.
- the components of the assignment statement used in the C language are stored in the leaf nodes in the assignment statement tree 3.
- a leaf node in which a symbol enclosed in double quotations is described stores this symbol as an initial value, and the fixed portion is not changed.
- a leaf node prefixed with an ampersand (&) indicates that an identifier converted from a term defined by the user and a self-label converted from the self-label input by the user are stored. That is, the component stored in the leaf node prefixed with an ampersand (&) is a portion (change portion) that changes according to input information input by the user.
- the leaf node preceded by an ampersand (&) stores an identifier corresponding to the term input by the user later. This will be described later.
- the notation of the leaf node in the diagram showing the structure of the branch sentence tree 4 is the same as described above.
- nodes having descendants are nodes that define which component of the assignment statement the descendant node is used in the C language. Therefore, the components of the assignment statement used in the C language are not stored in the nodes having descendant nodes. The same applies to the branch sentence tree 4.
- the assignment statement tree 3 includes a subtree that defines a label phrase (label phrase subtree 31), a subtree that defines an assignment clause (assignment section subtree 32), and a subtree that defines a semicolon symbol (semicolon subtree 33). ).
- the label phrase subtree 31 includes nodes 301 to 305.
- the node 301 is the root of the label phrase subtree 31 and defines the label phrase subtree 31.
- the node 302 is a node that defines a self label used in the C language, and has a node 303 that stores the self label as a child node.
- the self label is generated from the self label input by the user to the interface 5. Since the self label attached to the assignment statement of the algorithm is a term describing the target world, it is converted into a formal symbol string. For this reason, the self label is converted into the self label by the generation device 1 and then stored in the node 303.
- Node 304 is a node that defines a colon symbol included in a label phrase.
- the node 305 (leaf node) that stores the colon symbol is a child of the node 304.
- the substitution clause subtree 32 is composed of nodes 306 to 320.
- the node 306 is the root of the assignment node subtree 32 and defines the assignment node subtree 32.
- the assignment clause subtree 32 includes a variable subtree 3a, an assignment statement definition subtree 3b, and an arithmetic expression subtree 3c according to the configuration of the assignment clause.
- the variable subtree 3a is a subtree that defines a single variable to which the result of the arithmetic expression is input, and includes a leaf node that stores the single variable.
- Nodes 308 and 309 are used when the single variable is a simple variable.
- the node 308 is a node that defines a simple variable.
- the node 309 is a leaf node that stores an identifier corresponding to a term defined as a single variable by the user.
- Nodes 310 to 316 are used when a single variable is described as a subscripted variable.
- the node 310 is a node that defines a subscripted variable.
- the node 311 is a leaf node that stores an identifier corresponding to the array name.
- the node 312 is a node that defines an array element.
- the node 313 is a leaf node that stores a left bracket symbol indicating the start of an array element in the C language.
- the node 316 is a leaf node that stores a right bracket symbol indicating the end of an array element in the C language.
- the node 314 is a node that defines a subscript variable (element number of the array).
- the node 315 is a leaf node that stores an identifier corresponding to a term specified by the user as a subscript variable in the interface 5.
- the node 317 is the root of the assignment statement definition subtree 3b.
- the arithmetic expression subtree 3c is a subtree that defines an arithmetic expression in an assignment statement used in the C language.
- the node 319 is the root of the arithmetic expression subtree 3c.
- the node 320 is a leaf node, and stores an arithmetic expression obtained by converting an arithmetic expression input to the right side (text box 541b) of the assignment statement of the algorithm according to the C language grammar. Details of conversion of the arithmetic expression will be described later.
- the semicolon subtree 33 is composed of nodes 321 and 322.
- the node 321 is the root of the semicolon subtree 33 and defines the semicolon subtree 33.
- Node 322 stores a semicolon symbol.
- FIG. 8 is a diagram showing the structure of the branch sentence tree 4.
- a branch sentence tree 4 has a tree structure formed according to a branch sentence grammar used in the C language, and has nodes 400 to 425.
- the node 400 is a root node indicating that the tree structure shown in FIG. 8 is a branch sentence.
- Nodes 403, 405, 408, 410, 412, 414, 417, 419, 421, 423, and 425 are leaf nodes.
- the constituent elements of the branch sentence used in the C language are stored in the leaf nodes in the branch sentence tree 4.
- a branch sentence used in the C language is composed of a label phrase ("self label:” part), an if phrase ("if (branch judgment expression) goto true label” part), and a semicolon symbol ";”.
- the branch sentence tree 4 has a label phrase subtree 41, a subtree defining an if phrase (if phrase subtree 42), and a semicolon subtree 43.
- the label phrase subtree 41 has nodes 401 to 405, and the semicolon subtree 43 has nodes 424 and 425. Since the label phrase subtree 41 and the semicolon subtree 43 in the branch sentence tree 4 are the same as those in the assignment sentence tree 3, description thereof is omitted.
- the if phrase subtree 42 will be described.
- the node 406 is the root of the if phrase subtree 42 and defines the if phrase subtree 42.
- the if phrase subtree 42 includes a branch statement definition subtree 4a, a judgment expression subtree 4b, and an instruction phrase subtree 4c according to the configuration of the if phrase.
- the branch statement definition subtree 4a is a subtree that defines a branch statement definer “if” indicating that a command statement used in the C language is a branch statement, and includes nodes 407 and 408.
- the node 407 is the root of the branch statement definition subtree 4a.
- the node 408 is a leaf node that stores the branch statement definer “if”.
- the decision expression subtree 4b is a subtree that defines a branch decision expression indicating a branch condition in a branch sentence used in the C language, and includes nodes 411 and 412.
- the node 411 is the root of the judgment formula subtree 4b.
- the node 412 is a leaf node, and stores a branch determination expression obtained by converting a branch determination expression input as a branch sentence of an algorithm according to a C language grammar. Details of the branch determination expression conversion will be described later.
- the instruction phrase subtree 4c is a subtree that defines an instruction phrase indicating an instruction to be executed when a branch condition is satisfied in a branch statement used in the C language.
- the command phrase subtree 4c has nodes 415 to 423.
- the node 415 is the root of the command phrase subtree 4c.
- Node 416 defines a GOTO statement definer indicating the start of a command phrase in C language.
- the node 417 is a leaf node that stores the GOTO statement definer “goto”.
- the node 418 defines a space symbol added after the GOTO statement definer.
- a node 419 is a leaf node that stores a space symbol.
- the node 420 defines a label (true label) of an instruction executed when the branch condition is satisfied.
- the node 421 stores the true label.
- the true label is a self label converted from a branch destination label input to the text box 542b.
- Node 422 defines a blank sign added after the true label.
- the node 423 is a leaf node that stores a space symbol.
- the assignment sentence tree 3 and the branch sentence tree 4 have a tree structure according to the C language grammar.
- an assignment statement used in the C language is generated by cruising the assignment statement tree 3 in accordance with the description order of the assignment statements used in the C language.
- a branch sentence used in the C language is generated in the same manner.
- step S3 The user performs an operation to instruct the creation of the computer program 24 after the input of the algorithm is completed. In response to this operation, the generation device 1 generates a computer program 24 described in C language according to an algorithm input to the interface 5 (step S3).
- the generation apparatus 1 converts the self label input in the label input field 53 into a character string that can be used in the C language, and generates a label table.
- the generating apparatus 1 In each of the text boxes 531 and 532 provided in the label input field 53, “temperature acquisition” and “temperature determination” are input as their own labels. Since Japanese cannot be used as a C language label as it is, the generating apparatus 1 generates its own label by converting its own label input in the label input field 53 into a character string usable in the C language. To do.
- the self label “acquire temperature” is converted into the self label “L001”, and the self label “temperature determination” is converted into the self label “L002”.
- the self label and the self label are associated in the label table shown in FIG.
- the label table is registered in the knowledge base 62.
- the self label “temperature record” not shown in the interface 5 of FIG. 6 is associated with the self label “L015”.
- FIG. 10 is a flowchart of the computer program generation process (step S3) shown in FIG.
- the computer program generation process (step S3) shown in FIG. 3 is executed for each line number of the algorithm input to the interface 5. For example, an assignment statement used in the C language is generated corresponding to the assignment statement with the line number “002”. Next, a branch sentence used in the C language is generated corresponding to the branch sentence with the line number “003”.
- step S3 the computer program generation process (step S3) will be described by taking as an example the case of generating an assignment sentence for C language corresponding to the assignment sentence of the algorithm at the line number “002”.
- the generation device 1 uses the assignment sentence as a tree used for generation of the C language instruction sentence.
- the tree 3 is selected from the grammar database 22 (step S31).
- the generating apparatus 1 converts the constituent elements of the assignment statement of the algorithm described by the line number “002” so as to conform to the C language grammar by the processes of steps S32 to S36. Specifically, the term (single variable) input to the text box 541a and the arithmetic expression input to the text box 541b are converted. This will be described in detail below.
- the generating device 1 acquires the constituent element of the assignment statement of the algorithm corresponding to the line number “002” (step S32). Specifically, the generation device 1 acquires the terms and arithmetic expressions input in the text boxes 541a and 541b as components.
- the generation apparatus 1 selects the term “temperature measurement value” input in the text box 541a from the acquired components (step S33).
- the generation device 1 searches the term database 23 and identifies the identifier “V001” corresponding to the acquired term “temperature measurement value”.
- the generation apparatus 1 converts the acquired term “temperature measurement value” into the identified identifier “V001” (step S34).
- step S33 does not include an operator or an array symbol. For this reason, the production
- the generation device 1 stores the identifier “V001” converted in step S34 in the leaf node of the assignment statement tree 3 selected in step S31 (step S37).
- the identifier “V001” corresponds to the term “temperature measurement value” input as a single variable in the template 541. Referring to FIG. 4, identifier V001 is a simple variable because the number of array dimensions is 0. Therefore, the generation device 1 stores the identifier “V001” in the node 309 in the variable subtree 3a. As a result, the identifier “V001” can be used as a component of an assignment statement used in the C language.
- step S38 Since the generating apparatus 1 has not selected all the constituent elements of the assignment statement of the algorithm corresponding to the line number “002” (No in step S38), the process returns to step S33.
- the generation apparatus 1 selects the arithmetic expression “sensor output value ⁇ correction coefficient + offset (subscript A)” input in the text box 541b as a constituent element of the assignment statement of the algorithm corresponding to the line number “002” (step S1). S33).
- the generation device 1 converts the term included in the acquired arithmetic expression into an identifier with reference to the term database 23 (step S34). Specifically, the generation apparatus 1 classifies the acquired arithmetic expression using operators such as a multiplication symbol ( ⁇ ) and an addition symbol (+), and parentheses used for defining an element number of the array. As a result, the terms “sensor output value”, “correction coefficient”, “offset”, and “subscript A” are extracted from the acquired arithmetic expression.
- the generation apparatus 1 refers to the term database 23 and converts the term “sensor output value” into the identifier “V002”. Similarly, the term “correction coefficient” is converted to the identifier “V003”. The term “offset” is converted to the identifier “V004”. The term “subscript A” is converted to the identifier “V005”.
- the generation device 1 converts the operator included in the obtained arithmetic expression into an operator that conforms to the C language grammar (step S35).
- the generation apparatus 1 has an operator table in which operators used for algorithm input are associated with operators used in the C language, and the operators are converted using this table.
- the operator table is registered in the knowledge base 62.
- the multiplication symbol “ ⁇ ” used in the arithmetic expression input in the text box 541b is converted into the multiplication symbol “*” used in the C language.
- the addition symbol “+” used in the arithmetic expression input in the text box 541b is converted into the addition symbol “+” used in the C language.
- the generation device 1 converts the array symbol included in the arithmetic expression into an array symbol used in the C language (step S36).
- “offset (subscript A)” indicates an array.
- parentheses are used to define element numbers.
- the generation device 1 converts the parentheses into square brackets that are used to define the element number of the array in the C language.
- the generation device 1 associates symbols (parentheses) used in the definition of array element numbers in the algorithm with symbols (brackets) used in the definition of array element numbers in the C language. Just keep it.
- the arithmetic expression “sensor output value ⁇ correction coefficient + offset (subscript A)” input to the text box 541b is converted into the following arithmetic expression (1) usable in the C language as a result of executing steps S34 to S36. Is done.
- the arithmetic expression (1) does not include a term based on natural language (Japanese), it can be used as an arithmetic expression for an assignment statement used in the C language.
- the generation device 1 stores the arithmetic expression (1) converted in steps S34 to S36 in the leaf node of the assignment sentence tree 3 (step S37).
- the arithmetic expression (1) is generated from the arithmetic expression input to the text box 541b. Therefore, the arithmetic expression (1) is stored in the node 320 (leaf node) of the arithmetic expression subtree 3c in the assignment statement tree 3.
- step S38 Since the generating apparatus 1 has selected all the constituent elements of the assignment statement of the algorithm corresponding to the line number “002” (Yes in step S38), the process proceeds to step S39.
- step S39 the generation device 1 acquires the self label “L001” corresponding to the self label “acquisition of temperature” input in the text box 531 based on the label table (see FIG. 9).
- the generation device 1 stores the acquired self label “L001” in the node 303 (leaf node) of the label phrase subtree in the assignment sentence tree 3 (step S39).
- the assignment statement tree 3 stores all the components of the assignment statement used in the C language.
- the generator 1 generates an assignment statement used in the C language by cruising the assignment statement tree 3 in a predetermined order (step S40).
- step S40 the command statement generation process (step S40) will be described by taking as an example a case where an assignment statement used in the C language is generated using the assignment statement tree 3 in which components are stored by the above processing.
- the generation device 1 cruises through the nodes of the assignment statement tree 3 in the order of travel and acquires the components stored in the leaf nodes. And the production
- FIG. 11 is a flowchart of the command statement generation process (step S40).
- step S40 generation of an assignment statement used in the C language will be described.
- Character strings shown as examples are stored in the nodes 303, 309, and 320 of the assignment sentence tree 3 shown in FIG.
- the generating apparatus 1 sets the node 300 that is the root of the assignment statement tree 3 as the current position as an initial setting (step S401). Since the order of cruising is the order of travel, cruising is performed in the order of the label phrase subtree 31, the assignment clause subtree 32, and the semicolon subtree 33 in the assignment sentence tree 3.
- the generation device 1 moves the current position to a child node of the node 300 (Step S402).
- the current position moves to the leftmost child node among the child nodes that have never been set to the current position.
- the current position moves to the node 301 located on the leftmost side. Thereby, the cruise of the label phrase subtree 31 is started.
- the generating apparatus 1 determines whether or not the current position (node 301) is a leaf node (step S403). Since the node 301 is not a leaf node (No in step S403), the generation apparatus 1 executes step S402 again and moves the current position to the node 302. Since the node 302 is not a leaf node (No in step S403), the generation device 1 moves to the node 303 that is a child of the node 302 (step S402).
- the generation apparatus 1 acquires the component (self label “L001”) stored in the node 303 (step S404).
- the generating apparatus 1 returns to the node 302 that is the parent of the node 303 (step S405), and determines whether or not there is a brother node of the node 303 (step S406). Since there is no younger brother node (No in step S406), the generation device 1 determines whether or not the current position is the root of the assignment sentence tree 3 (node 300) (step S408). Since the current position is the node 302 (No in step S408), the generation apparatus 1 returns to step S405, and moves the current position from the node 302 to the node 301 that is the parent of the node 302 (step S405).
- the generation device 1 moves the current position to the node 304 (step S407) because there is a brother node (node 304) of the cruised node 302 (Yes in step S406).
- the generation device 1 further moves the current position to a child node (node 305) of the node 304 (step S402). Since the node 305 at the current position is a leaf node (Yes in step S403), the generation device 1 acquires the component (colon symbol “:”) stored in the node 305 (step S404). Thereafter, the generation apparatus 1 repeats steps S405, S406, and S408, and moves the current position to the node 300 (step S405). Thereby, the cruise of the label phrase subtree 31 is completed.
- the generation device 1 cruises the substitution node subtree 32. Since the younger brother node (node 306) of the node 301 exists (Yes in step S406), the generation device 1 moves the current position from the node 300 to the node 306 (step S407). Thereby, the cruising of the substitution node subtree 32 is started.
- the generation device 1 cruises in the order of the variable subtree 3a, the assignment statement definition subtree 3b, and the arithmetic expression subtree 3c.
- the cruise of the variable subtree 3a will be described.
- the generation apparatus 1 repeats steps S402 and S403, and moves the current position to the node 309, similarly to the cruise of the label phrase subtree 31. Since the node 309 is a leaf node (Yes in step S403), the generation apparatus 1 acquires the component (identifier “V001”) stored in the node 309 (step S404).
- the generation device 1 executes steps S405, S406, and S408, and moves the current position to the node 307.
- the generation apparatus 1 does not cruise the node 310 and the descendant nodes of the node 310.
- the generation device 1 has already acquired the identifier “V001” as a single variable of the assignment statement, and thus does not use the subscripted variable.
- the generation device 1 cruises the node 310 and the descendant nodes of the node 310, and acquires the component of the subscripted variable. In this case, the generation apparatus 1 acquires components in the order of the nodes 311, 313, 315, and 316.
- the generation apparatus 1 moves the current position to the parent node (node 306) of the node 307 (step S405). Thereby, the cruise of the variable subtree 3a is completed.
- the generation device 1 cruises the arithmetic expression subtree 3c in the same manner as described above, and acquires the arithmetic expression (1) from the node 320 (leaf node) (step S404). Thereafter, the generation apparatus 1 returns to the node 300. Thereby, the cruise of the substitution node subtree 32 is completed.
- the generation device 1 cruises the semicolon subtree 33. Since the younger brother node (node 321) of the node 306 exists (Yes in step S406), the generation device 1 moves the current position to the node 321 (step S407). Thereby, the generation device 1 cruises the semicolon subtree and acquires the semicolon symbol “;” from the node 322 (leaf node) (step S404). Thereafter, the generation apparatus 1 executes steps S405, S406, and S408, and moves the current position to the node 300 (step S405).
- the generating apparatus 1 determines whether or not the current position is the root of the assignment statement tree 3 (node 300). Since the current position is the node 300 (Yes in step S408), the generation device 1 arranges the acquired components in the order of acquisition (step S409). Thereby, an assignment statement used in C language is generated.
- An assignment statement (2) for C language generated by arranging these constituent elements in the order of acquisition is shown below.
- V001 V002 * V003 + V004 [V005]; ... (2)
- the assignment statement (2) used in the above C language shows the same processing as the assignment statement of the algorithm corresponding to the line number “002”. In this way, the generation device 1 can generate a C language assignment statement that corresponds one-to-one with the algorithm assignment statement.
- the generation device 1 generates an assignment statement used in the C language according to the assignment statement of the algorithm corresponding to the line number “002”, and then uses it in the C language according to the branch statement of the algorithm corresponding to the line number “003”. Generate a branch statement.
- the generation apparatus 1 determines that the instruction of the algorithm corresponding to the line number “003” is “branch” as described in the sentence name column 55. Is selected (step S31).
- the generation apparatus 1 uses the branch determination expression “temperature measurement value ⁇ internal temperature” input to the text box 542a and the branch input to the text box 542b as components of the branch sentence of the algorithm corresponding to the line number “003”.
- the first label “temperature record” is acquired (step S32).
- the generation apparatus 1 selects the branch determination formula “temperature measurement value ⁇ internal temperature” from the components acquired in step S32 (step S33).
- step S34 the generation apparatus 1 searches the term database 23 and converts the term “temperature measurement value” included in the acquired branch determination formula into the identifier “V001”.
- the generation device 1 converts the term “internal temperature” included in the acquired branch determination formula into the identifier “V006”.
- steps S34 and S35 the branch determination formula “temperature measurement value ⁇ internal temperature” selected in step S33 is converted into the following branch determination formula (3).
- the branch determination formula (3) is stored in the node 412 (see FIG. 8) of the branch sentence tree 4 as a constituent element of the branch sentence used in the C language (step S37).
- the generation device 1 selects the branch destination label “temperature record” input in the text box 542b as a component of the branch sentence of the algorithm corresponding to the number “003” (step S33).
- the branch destination label “temperature record” is not registered in the term database 23.
- the generating apparatus 1 refers to the label table illustrated in FIG. 9, identifies the own label “L015” corresponding to the label “temperature record”, and identifies the identified own label as a node of the branch sentence tree 4. 421 (see FIG. 8) (step S37).
- the generation apparatus 1 acquires the self label “L002” corresponding to the self label “temperature determination” in the line number “003” from the label table, and adds the node 403 (leaf node) to the branch sentence tree 4. (Step S39).
- the generation device 1 cruises the branch sentence tree 4 for which the component has been stored, and generates a branch sentence used in the C language (step S40).
- the generation device 1 cruises the branch sentence tree 4 in the order of going in the same way as the cruise of the assignment sentence tree 3 (see FIG. 11). Thereby, the generation device 1 acquires the constituent elements of the branch sentence used in the C language from the leaf nodes of the branch sentence tree 4.
- the order in which the generation apparatus 1 cruises the leaf nodes of the branch sentence tree 4 is the order of the nodes 403, 405, 408, 410, 412, 414, 417, 419, 421, 423, and 425.
- the generator 1 generates the C language branch sentence (4) shown below by arranging the acquired components according to the cruise order.
- the branch sentence (4) used in the above C language shows the same processing as the branch sentence of the algorithm corresponding to the line number “003”. In this way, the generation device 1 can generate a C language branch statement that corresponds one-to-one with the algorithm branch statement.
- the generation device 1 generates C language command statements corresponding to the algorithm command statements in a one-to-one order in the order of the line numbers input to the interface 5.
- the generating device 1 generates a computer program 24 by describing C language statements in the order in which they are generated.
- the algorithm of the computer program 24 generated in this way is the same as the algorithm input to the interface 5. Therefore, when the computer program 24 thus generated is executed by the computer, the computer does not execute processing contrary to the user's intention. That is, since it is not necessary to modify the generated computer program, development efficiency can be improved.
- the C language command statement generated by the generation device 1 is generated by cruising the assignment statement tree 3 or the branch statement tree 4 configured according to the C language grammar in the order of travel. There are no grammatical errors. Therefore, the development efficiency of the computer program can be improved.
- the example in which the constituent elements of the instruction sentence (assignment sentence and branch sentence) used in the C language are stored in the leaf node has been described. Not limited.
- the components of the command statement may be stored in a node (intermediate node) having a child node.
- the grammar database 22 only needs to have a tree structure including nodes that store components of command statements used in the C language.
- the processing for storing the arithmetic expression (1) obtained by converting the arithmetic expression in the assignment statement of the algorithm described by the line number “002” in the node 320 (leaf node) has been described.
- the generation device 1 may store each component of the arithmetic expression (1) in a node that forms the expression.
- FIG. 12 is a diagram showing a modification of the arithmetic expression subtree 3c shown in FIG.
- arithmetic expression subtree 3c includes nodes 351 to 358 for storing the components of arithmetic expression (1).
- the nodes 351 to 358 constitute a tree structure (subtree 35) of the arithmetic expression (1).
- the node 351 which is the root of the subtree 35 is a child of the node 319 and stores an operator “+” indicating addition.
- the node 351 has nodes 352 and 355 as child nodes.
- the node 352 stores an operator “*” indicating multiplication, and has nodes 353 and 354 as child nodes.
- the node 353 stores the identifier “V002”, and the node 354 stores the identifier “V003”.
- the node 355 has nodes 356 to 358 as child nodes. Nodes 355 to 358 store constituent elements of subscripted variables (arrays) among constituent elements of the arithmetic expression (1).
- the node 355 stores an identifier “V004” indicating an array name.
- Node 356 stores a left bracket symbol used to define the element number of the array in C language.
- Node 358 stores a right square bracket symbol.
- the node 357 stores an identifier “V005” indicating the element number of the array.
- the component of the arithmetic expression (1) may be stored in the leaf node of the arithmetic expression subtree 3c or an intermediate node.
- the branch determination formula (3) may not be stored in the node 412 (see FIG. 8), similarly to the calculation formula (1).
- the determination expression subtree 4b only needs to include nodes (leaf nodes and intermediate nodes) that store the components of the branch determination expression (3).
- the predetermined programming language may be a high level language such as FORTRAN or BASIC.
- FORTRAN is used as the predetermined programming language
- the assignment sentence tree 3 and the branch sentence tree 4 are configured according to the FORTRAN grammar.
- the predetermined programming language may be a low-level language such as an assembly language or a machine language.
- the assembly language is used, the assignment sentence tree 3 and the branch sentence tree 4 are configured according to the grammar of the assembly language. The same applies when using machine language.
- the case where the one-dimensional array “offset (subscript A)” is input when the arithmetic expression of the assignment statement of the algorithm is input has been described (see FIG. 6).
- the user may use an array of two or more dimensions when inputting an arithmetic expression for an assignment statement, a branch determination expression for a branch statement, or a variable.
- a symbol string indicating the element number of the array is generated as follows. For example, instead of “offset (subscript A)” input in the text box 541b (see FIG. 6), the user inputs “offset (subscript A, subscript B)”.
- the generating apparatus 1 obtains two terms (subscript A and subscript B) by dividing the character string in parentheses based on a comma in the array symbol conversion process (step S36) illustrated in FIG. .
- the generation device 1 encloses two identifiers converted from the acquired two terms in brackets. As a result, a symbol string indicating the element number of the array is generated.
- a symbol string indicating an element number of the array may be generated by separating the two converted identifiers with a comma.
- the definition for each programming language regarding the array representation format is determined by the grammar that defines the array element number.
- This grammar is registered in advance in the grammar database 22.
- the generation apparatus 1 may generate the generation program 21 using the above-described program generation process.
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- General Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Stored Programmes (AREA)
Abstract
コンピュータプログラムの開発効率を向上することができるコンピュータプログラム生成装置を提供することである。コンピュータプログラム生成装置(生成装置)1は、文法データベース22と、用語データベース23とをHDD15に格納する。用語データベース23は、ユーザによって定義された用語と、用語に対応する識別子とを記憶する。文法データベース22は、C言語の文法に従って形成される木構造であって、C言語に用いられる命令文の構成要素を格納するノードを含む木構造を有する。生成装置は、用語を含むコンピュータプログラムのアルゴリズムの入力を受け付ける。生成装置1は、用語データベース23を検索して入力された用語に対応する識別子を読み出し、文法データベース22を検索してノードから構成要素を読み出す。生成装置1は、読み出された識別子及び構成要素を配列することによりC言語の命令文を生成する。
Description
本発明は、コンピュータプログラム生成装置に関し、さらに詳しくは、所定のプログラミング言語により記述されるコンピュータプログラムを生成するコンピュータプログラム生成装置に関する。
一般的なコンピュータプログラムの開発では、最初に、コンピュータプログラムの仕様書が作成される。プログラマが、作成された仕様書を解釈しその意味内容を把握して、C言語などのプログラミング言語により記述されたコンピュータプログラムを作成する。そして、作成されたコンピュータプログラムを検査して、作成されたコンピュータプログラムに含まれる瑕疵(バグ)などを取り除く作業が行なわれる。
しかし、プログラマがコンピュータプログラムを作成する場合、作成されたコンピュータプログラムは、プログラマの思い違いや不注意に由来する多くの瑕疵を含む。これらの瑕疵を取り除くために、非常に多くの時間を必要とするため、開発効率が一向に向上せず品質も向上しないという問題がある。
このため、コンピュータプログラムを作成する工程の一部を自動化することが提案されている。例えば、コンピュータプログラムの仕様書から、コンピュータプログラムを自動的に作成する技術が、特開平05-181651号公報に開示されている。
特開平05-181651号公報の方法では、予めプログラムの設計知識を入力して設計知識ベースを構築しておき、後にプログラム仕様を入力して構文木に変換する。変換された構文木から部分木を取り出して設計知識ベースを適用し、プログラムを生成する。この方法では、すべての場合にプログラム生成が成功するとは限らない。
特開平05-181651号公報の方法が全ての場合に成功するとは限らないのは、プログラム生成の単位が、部分木と呼ばれる複数のプログラム文を含んだプログラム仕様であり、このプログラム仕様に対して設計知識と呼ばれる既知の小プログラム群のいずれかを適用し、プログラムを生成しているからである。登録されている設計知識の量が不足すれば、適用の対象外となるプログラム仕様が現われるのは必然である。
特開平05-181651号公報の方法が不成功部分を残していることの根本原因は、コンピュータが最も不得手とする意味解釈を、設計知識と呼ばれる辞書に委ねたことである。膨大な量の設計知識を設計知識ベースに登録すれば、理論的には完全性が期待できると思われるが、設計知識を検索して適用する時間が膨大になるなどの時間的制約や、設計知識を具体的に収集する方法などの実際的な限界を考えれば、この方法は現実的ではない。また、プログラマがコンピュータプログラムを作成する上述の方法でプログラム作成が可能であったのは、人間が文書化された仕様書の内容や目的を理解し、かつ適切に判断する能力を持っているからである。このような能力を持たないコンピュータプログラムにプログラム仕様を解読させるのは、本来的に無理である。プログラム仕様を意味解釈する行為は、複数の文からなる文脈依存の文章の意味を解釈することに相当して、人間以外の機械には不可能な行為である。特開平05-181651号公報の方法のみならず多くの先行技術がプログラム仕様を入力してその意味を解釈し、解釈した結果に基づいてプログラム生成を試みているが、いずれも生成不可能な場面に遭遇するというプログラム生成の限界性に直面している。従って、特開平05-181651号公報のように、コンピュータに意味解釈を実行させてコンピュータプログラムを生成する方法では、コンピュータプログラムの開発効率の向上に限界がある。
本発明の目的は、コンピュータプログラムの開発効率を向上することができるコンピュータプログラム生成装置を提供することである。
本発明によるコンピュータプログラム生成装置は、所定のプログラミング言語により記述されるコンピュータプログラムを生成するコンピュータプログラム生成装置である。このコンピュータプログラム生成装置は、用語データベースと、文法データベースと、入力部と、生成部とを備える。用語データベースは、ユーザによって定義された用語と、用語に対応する識別子とを記憶する。文法データベースは、プログラミング言語の文法に従って形成される木構造であって、プログラミング言語に用いられる命令文の構成要素を格納するノードを含む木構造を有する。入力部は、用語を含むコンピュータプログラムのアルゴリズムの入力を受け付ける。生成部は、用語データベースを検索して入力部で入力された用語に対応する識別子を読み出し、文法データベースを検索してノードから構成要素を読み出し、読み出された識別子及び構成要素を配列することにより命令文を生成する。
この発明によれば、入力されたコンピュータプログラムのアルゴリズムに従って、所定のプログラミング言語に用いられる命令文が生成される。生成された命令文を含むコンピュータプログラムのアルゴリズムは入力されたアルゴリズムと同じであるため、このコンピュータプログラムは、ユーザの意図と異なる動作を行うことがない。従って、コンピュータプログラムの開発効率を向上させることができる。
好ましくは、入力部は、プログラミング言語に用いられる複数の命令のうちアルゴリズムで用いられる命令の選択と、選択された命令に用いられる用語の入力とを受け付けるためのインタフェースを表示する。
ユーザは、命令を選択する操作と、選択した命令に用いられる用語を入力することにより、アルゴリズムを入力することができる。ユーザは、アルゴリズムの記述に用いる所定の言語や、所定のプログラミング言語を覚えることなく、コンピュータプログラムを生成することができる。
好ましくは、命令文は、演算式と、変数と、代入文定義子とを含む代入文を含む。代入文定義子は、演算式の結果を変数に代入することを定義する。文法データベースは、代入文定義部分木と、変数部分木と、演算式部分木とを含む。代入文定義部分木は、代入文定義子を定義する部分木であって、代入文定義子を格納するノードを含む。変数部分木は、変数を定義する部分木であって、変数を格納するノードを含む。演算式部分木は、演算式を定義する部分木であって、演算式の構成要素を格納するノードを含む。生成部は、代入文定義部分木と、変数部分木と、演算式部分木とを所定の順序で巡航する。
生成部が、代入文定義部分木と、変数部分木と、演算式部分木とを所定の順序で巡航することにより、代入文の構成要素が読み出される。これにより、生成された所定のプログラミング言語の代入文は、文法エラーを含まないため、開発効率を向上させることができる。
好ましくは、命令文は、分岐判定式と、命令句と、分岐文定義子とを含む分岐文を含む。命令句は、分岐判定式が満たされる場合に実行される命令を指示する。分岐文定義子は、命令文が分岐命令であることを示す。文法データベースは、判定式部分木と、命令句部分木と、分岐文定義部分木とを含む。判定式部分木は、分岐判定式を定義する部分木であって、分岐判定式の構成要素を格納するノードを含む。命令句部分木は、命令句を定義する部分木であって、命令句の構成要素を格納するノードを含む。分岐文定義部分木は、分岐文定義子を定義する部分木であって、分岐文定義子を格納するノードを含む。生成部は、判定式部分木と、命令句部分木と、分岐文定義部分木とを所定の順序で巡航する。
生成部が、判定式部分木と、命令句部分木と、分岐文定義部分木とを所定の順序で巡航することにより、分岐文の構成要素が読み出される。これにより、生成された所定のプログラミング言語の分岐文は、文法エラーを含まないため、開発効率を向上させることができる。
以下、図面を参照し、本発明の実施の形態を詳しく説明する。図中同一又は相当部分には同一符号を付してその説明は繰り返さない。
[1.プログラム生成装置の構成]
図1は、本実施の形態に係るコンピュータプログラム生成装置(以下、「生成装置」と略して記載する。)1のハードウェア構成を示す機能ブロック図である。なお、図1において、ハードウェアの他に、生成装置1が使用するデータ、プログラム等を示している。
図1は、本実施の形態に係るコンピュータプログラム生成装置(以下、「生成装置」と略して記載する。)1のハードウェア構成を示す機能ブロック図である。なお、図1において、ハードウェアの他に、生成装置1が使用するデータ、プログラム等を示している。
図1を参照して、生成装置1は、所定のプログラミング言語により記述されるコンピュータプログラム24を生成する。本実施の形態において、「コンピュータプログラム」とは、生成装置1により生成されたプログラムを意味する。本実施の形態では、所定のプログラミング言語は、C言語である。つまり、生成装置1は、ユーザにより入力されたアルゴリズムに従ってC言語の命令文を生成することにより、コンピュータプログラム24を生成する。
生成装置1は、例えば、PC(パーソナルコンピュータ)である。PCは、後述するコンピュータプログラム生成プログラム21(以下、「生成プログラム21」と略して記載する。)がインストールされることにより、生成装置1として機能する。なお、PCは、生成装置1として動作する際に、HDD14に予め保存された文法データベース22及び用語データベース23を使用する。文法データベース22及び用語データベース23の詳細については、後述する。
生成装置1は、CPU(Central Processing Unit)11と、RAM(Random Access Memory)12と、操作部13と、モニタ14と、HDD(Hard Disk Drive)15とを備える。
CPU11は、HDD15に格納されたプログラムをRAM12にロードし、ロードされたプログラムを実行して生成装置1を制御する。RAM12は、生成装置1のメインメモリである。
操作部13は、マウス及びキーボードであり、ユーザによる操作を受け付ける。
モニタ14は、例えば、液晶ディスプレイであり、CPU11によるプログラムの実行結果を表示する。
HDD15は、生成プログラム21と、文法データベース22と、用語データベース23と、コンピュータプログラム24とを記憶する。
文法データベース22は、C言語の文法に従って形成される木構造であって、C言語に用いられる命令文の構成要素を格納する葉ノードを含む木構造を有する。文法データベース22は、C言語における各々の命令文に対応する複数の木構造を有する。本実施の形態では、文法データベース22は、代入文木3と、分岐文木4とを含む。代入文木3は、C言語に用いられる代入文の文法に従って形成される木構造のデータである。分岐文木4は、C言語に用いられる二値論理に基づく分岐文(以下、単に「分岐文」と呼ぶ。)の文法に従って形成される木構造のデータである。代入文及び分岐文の定義、代入文木3及び分岐文木4の詳細は、後述する。
用語データベース23は、ユーザによって定義された用語と、用語に対応する識別子とを対応付けて記憶する。識別子は、用語に1対1に対応する情報であり、C言語用の命令文において変数、定数、関数として用いられる記号列である。用語及び識別子の定義については、後述する。
生成プログラム21は、ユーザが生成したいコンピュータプログラムのアルゴリズムの入力を受け付けるためのインタフェースをモニタ14に表示し、インタフェースを介して入力されたアルゴリズムに従ってC言語用の命令文を生成する。生成プログラム21の動作の詳細については、後述する。
図2は、生成装置1におけるソフトウェア構成を示す機能ブロック図である。図2を参照して、生成装置1は、入力部61と、知識ベース62と、生成部63とを含む。入力部61及び生成部63は、生成プログラム21により実現される機能部である。知識ベース62は、文法データベース22及び用語データベース23を含む。
入力部61は、用語データベース23に記憶された用語を含むコンピュータプログラムのアルゴリズムの入力を受け付ける。生成部63は、用語データベース23を検索して入力部61で入力された用語に対応する識別子を読み出し、文法データベース22を検索して葉ノードから構成要素を読み出す。生成部63は、読み出された識別子及び構成要素を配列することによりC言語の命令文を生成する。
[2.生成装置1の基本思想]
コンピュータプログラムを生成するにあたり、最初に、ユーザは、要求仕様及びアルゴリズムを決定する。
コンピュータプログラムを生成するにあたり、最初に、ユーザは、要求仕様及びアルゴリズムを決定する。
要求仕様とは、問題解決のための人間の要求事項もしくは意思表明の内容である。要求仕様の作成は、人間に限られる。アルゴリズムは、問題解決の具体的方法すなわち機械的に実行できる手続のことである。生成装置1を用いたコンピュータプログラムの生成にあたり、アルゴリズムの決定は人間に限るものとする。要求仕様は、人間要求の発露であるため、コンピュータが代行することが不可能な、人間の専決事項である。また、アルゴリズムが人間要求を実現するための具体的な方法であることから、アルゴリズムの決定も人間の専決事項である。
生成装置1は、人間の専決事項であるアルゴリズムの決定に関与しない。生成装置1を用いたコンピュータプログラムの作成では、内容を扱う系(内容系)を人間が分担し、形式を扱う系(形式系)を生成装置1が分担する。形式系は、内容を一切取り除いて、機械的な操作が可能な体系を指す。つまり、生成装置1は、人間の専決事項である要求仕様及びアルゴリズムの意味解釈を実行しない。
次に、要求仕様及びアルゴリズムの記述方法について説明する。本実施の形態では、要求仕様及びアルゴリズムを記述するための最小の記述対象は、問題解決のための「場合分け」と「演算式」の二種類とする。数理論理学の教えによれば、現在の数学上のほとんどの命題は一階述語論理で記述できることが経験的に知られており、要求仕様の表現手段として場合分けと演算式の二つに要素還元することは自然な帰結である。一方、プログラムに関する構造化定理によれば、コンピュータプログラムは順処理、分岐処理、反復処理の三種類の制御文で記述でき、さらに反復処理は順処理と分岐処理の組み合わせで記述できるとされている。なお、実用的なコンピュータプログラム作成の範囲内なら、一階述語論理で十分である。
上記の理論的背景に裏付けられて、場合分けと演算式の二種類に構造化定理の結果を組み合わせれば、要求仕様及びアルゴリズムの記述手段は、プログラミング言語の用語を援用して表現するなら、代入文と分岐文に要素還元できると結論づけられる。代入文とは、演算式の結果をある名称を持った変数に記憶させておくことに相当し、分岐文とは、最も素朴で単純な二値論理に基づく場合分けに相当する。
さらに、要求仕様及びアルゴリズムを記述する際に、関数呼出を用いてもよい。関数呼出は、ひとまとまりの要求仕様であり、また、ひとまとまりのアルゴリズムに相当する。以下、関数呼出を要求仕様及びアルゴリズムの記述に利用できる理由を説明する。
コンピュータプログラムは、計算可能関数にその理論的基礎を置く。本実施の形態では、計算可能関数の中の原始帰納的(再帰的)関数を基礎理論とする。原始帰納的関数は、ゼロ関数、後者関数、射影関数の3つの初期関数を出発点として、関数合成と原始帰納法を組み合わせながら、計算可能な関数を構成するものと教えている。本実施の形態では、この考え方も最大限に尊重するものとする。初期関数に相当するコンピュータプログラムを「初期プログラム」と呼ぶなら、初期プログラムはOS(オペレーティングシステム)やプログラミング言語が用意する「システム関数」と、生成装置1が独自に用意する「基本関数」である。基本関数とは、最も基礎的な働きをするプログラムであるとする。上記の教えに従えば、一つのプログラム関数を形成するとき、すでに定義された関数が新しい関数の関数要素となることが示されているものと理解される。この教えは、プログラムの中に「関数呼出」を必要機能とするものである。
以上のことを総合すれば、要求仕様及びアルゴリズムの記述手段は、プログラミング言語の用語を援用して表現すると、代入文、分岐文、及び関数呼出の、3種類の記述文であることが結論づけられる。要求仕様及びアルゴリズムの記述において、上記の三種類の文を基本的な記述文とする。以上の結論は、要求仕様及びアルゴリズムが、最も少ない言葉で記述できることを保証するものである。最も少ない言葉とは、ここでは最も少ない指令(命令)と解釈されるものである。
なお、本実施の形態では、代入文及び分岐文を用いたコンピュータプログラム24の生成について詳しく説明する。上述のように、関数呼出は、ひとまとまりのアルゴリズムであるため、関数呼出によって用いられる関数のアルゴリズムも、代入文及び分岐文により記述可能であるためである。
次に、アルゴリズムの入力の際に用いられる用語と、用語データベース23において用語に対応付けられる識別子について説明する。
要求仕様を記述する場合にも、アルゴリズムを記述する場合にも、いずれの場合も言葉を使用して記述する。問題解決の対象となる世界を対象世界と呼ぶならば、対象世界を記述する言葉は、その世界固有の用語である。今後は、この意味を込めて「用語」と言う言葉を使用する。どの用語を使用するかは、人間が決定する。用語を決定する人間は、対象世界に所属する者であり、生成装置1を使用する人間である。用語の意味内容を十分に理解した人間が、用語を収集し命名するものとする。上記の方法で収集された用語は、人間が判断できる情報を含んでいると言う意味で、内容系に属するものと解釈できる。一方で、用語は形式系である生成装置1の記号に変換されなければならない。形式系は、意味内容を取り払った記号を取り扱う体系であるからである。本実施の形態では、内容系の用語を一定の規則に従って記号化するものとし、記号化された用語を「識別子」と呼ぶ。このとき本実施の形態においては、用語を挟んで内容系と形式系が併存する構図が描かれる。内容系の用語と形式系の識別子が、同一記述対象の上で併存する構図である。人間は用語によって対象世界における記述対象の意味内容を把握し、プログラム生成装置は識別子によって形式系における記述対象を把握する。内容系と形式系の接点が、用語および識別子の上に出現する。内容系と形式系の二面性の設定である。
[3.生成プログラム21の処理]
図3は、図1に示す生成プログラム21のフローチャートである。図3を参照して、生成プログラム21を実行する生成装置1の動作を説明する。なお、生成プログラム21が図3に示す処理を開始する前に、文法データベース22及び用語データベース23が、HDD15に保存される。
図3は、図1に示す生成プログラム21のフローチャートである。図3を参照して、生成プログラム21を実行する生成装置1の動作を説明する。なお、生成プログラム21が図3に示す処理を開始する前に、文法データベース22及び用語データベース23が、HDD15に保存される。
最初に、生成装置1は、アルゴリズム入力用のインタフェースをモニタ14に表示して、用語データベース23に記憶された用語を含むコンピュータプログラムのアルゴリズムの入力を受け付ける(ステップS1)。ステップS1の処理は、図2に示す入力部61により実行される処理に対応する。
代入文と分岐文とで記述されたコンピュータプログラムのアルゴリズムは、自然言語で表現された用語を含む。これにより、ユーザは、C言語などのプログラミング言語を習得していなくても、その内容を容易に理解することができるアルゴリズムを入力することができる。
例えば、インタフェースに入力されるアルゴリズムにおいて、演算式や分岐判定式の演算子は、ユーザが日常の算術計算等で用いられるものである。また、入力されたアルゴリズム中の代入文で用いられる用語(変数名)は、ユーザによって選択された自然言語で表現されている。従って、アルゴリズムを入力したユーザ以外のユーザでも、インタフェースに入力されるアルゴリズムの内容を直感的に理解することができる。
生成装置1は、プログラムの生成指示を受け付けた場合(ステップS2においてYes)、インタフェースに入力されたアルゴリズムに従って、コンピュータプログラム24を生成する(ステップS3)。ステップS3の処理は、図2に示す生成部63により実行される処理に対応する。
具体的には、生成装置1は、用語データベース23を検索して、インタフェースに入力された用語に対応する識別子を読み出し、文法データベース22を検索して葉ノードから構成要素を読み出す。そして、生成装置1は、読み出された識別子及び構成要素を配列することにより、C言語の命令文を生成する。
以下、生成プログラム21の処理をさらに詳しく説明する。ステップS1を説明する前に、用語データベース23について説明する。
[3.1.用語データベース23]
図4は、用語データベース23の一例を示す図である。図4を参照して、用語データベース23は、リレーショナル型であり、1つのテーブルを有する。
図4は、用語データベース23の一例を示す図である。図4を参照して、用語データベース23は、リレーショナル型であり、1つのテーブルを有する。
用語データベース23において、各行が1つのレコードに対応する。各レコードは、位置、用語、識別子、型、配列次元数のフィールドを有する。
位置は、用語データベース23において用語が登録されている場所を示し、各レコードに固有の情報である。用語は、ユーザによって定義され、上述のように、ユーザがその意味を理解できるように自然言語で記述される。識別子は、用語に1対1で対応する記号列であり、C言語の命令文の作成に用いられる。図4に示す用語データベース23に登録された識別子は、C言語の命令文において、変数として用いられる。型は、コンピュータプログラム24における識別子のデータ型を示し、整数型、実数型、文字列型などが記録される。配列次元数は、識別子が配列を示す変数として用いられるか否かを示す。配列次元数が0であれば、対応する識別子は、単一変数として用いられる。配列次元数が1以上であれば、対応する識別子は、配列次元数に対応する次元の配列(添字付変数)として用いられる。
例えば、識別子「V001」は、ユーザによって定義された用語「温度測定値」に対応する。識別子「V001」のデータ型は、実数型であり、配列次元数が0であるため単一変数として使用されることがわかる。
なお、用語データベース23において、型及び配列次元数が記録されていなくてもよい。型及び配列次元数は、識別子がコンピュータプログラムにおいて変数として用いられる際の属性を示す情報であるため、用語の定義に直接影響しないためである。この場合、識別子の属性を定義するデータベースを別途準備し、HDD15に格納するようにすればよい。
[3.2.アルゴリズム入力]
図5は、モニタ14に表示されるアルゴリズム入力用のインタフェース5(アルゴリズム入力画面)の初期画面を示す図である。
図5は、モニタ14に表示されるアルゴリズム入力用のインタフェース5(アルゴリズム入力画面)の初期画面を示す図である。
インタフェース5は、メニューバー51と、行番号欄52と、ラベル入力欄53と、文記述欄54と、文名称欄55とを有する。インタフェース5がモニタ14に最初に表示されたとき、行番号欄52と、ラベル入力欄53と、文記述欄54と、文名称欄55とは、全て空欄である。
メニューバー51は、C言語に用いられる複数の命令のうち、アルゴリズムに用いられる命令(代入文、分岐文)を表示する。開始文、終了文は、アルゴリズムの開始、終了を宣言する文である。関数呼出文は、知識ベース62に登録された関数の呼び出しに用いられる。なお、図2では、関数が登録されたデータベースの表示を省略している。ユーザは、メニューバー51を操作することにより、アルゴリズムで用いられる命令を選択する。
文記述欄54は、メニューバー51により選択された命令に用いられる用語や、選択された命令に用いられる演算式等を記述するための領域である。行番号欄52は、文記述欄54に入力されたアルゴリズムの命令の位置を示す行番号を記述するための領域である。ラベル入力欄53は、文記述欄54に入力されたアルゴリズムの命令を特定するラベル(自己のラベル)を入力するための領域である。文名称欄55は、文記述欄54に入力されたアルゴリズムの命令の種類を示す情報の表示に用いられる。
以下、アルゴリズムの入力方法について詳しく説明する。図6は、ユーザにより命令の選択が行われ、選択された命令に用いられる用語及び演算式の入力が行われた後のインタフェース5を示す図である。
ユーザは、メニューバー51に登録されている開始文、終了文、代入文、分岐文、及び関数呼出文のいずれかから1つを選択する操作を行う。
ユーザは、アルゴリズムの入力を開始する場合、メニューバー51から開始文を選択する操作を行う。生成装置1は、この操作に応じて、行番号欄52に行番号「001」を追加し、行番号「001」に対応する文記述欄54の位置に、「開始」と記述する。これにより、アルゴリズムが行番号「001」から開始されたことを、ユーザは容易に認識できる。
次に、ユーザは、メニューバー51から代入文を選択する操作を行う。生成装置1は、この操作により、C言語に用いられる複数の命令のうち、アルゴリズムで用いられる命令(代入文)の選択を受け付ける。
生成装置1は、行番号欄52に行番号「002」を追加し、アルゴリズムの代入文の入力に用いられるテンプレート541を、文記述欄54に表示する。テンプレート541は、行番号「002」に対応する位置に配置され、左辺(単一変数)に対応するテキストボックス541aと右辺(演算式)に対応するテキストボックス541bとを含む。テキストボックス541aと541bとの間には、等号(=)が表示される。また、生成装置1は、文名称欄55において行番号「002」に対応する位置に、代入文に対応するテンプレート541が表示されていることを示す「式と代入」を表示する。
ユーザは、用語を含む演算式をテキストボックス541bに入力し、入力された演算式の結果が代入される用語をテキストボックス541aに入力する。テキストボックス541aには、用語「温度測定値」が入力される。テキストボックス541bには、「センサ出力値×補正係数+オフセット(添字A)」が演算式として入力される。入力された演算式は、用語として、「センサ出力値」、「補正係数」、「オフセット」及び「添字A」を含んでいる。ここで、「オフセット(添字A)」は、配列を示す。「オフセット」は、配列名を示し、「添字A」は、配列の要素番号として用いられる。
また、生成装置1は、ラベルが入力されるテキストボックス531をラベル入力欄53に表示する。テキストボックス531は、行番号「002」に対応する位置に配置される。
ユーザは、行番号「002」で記述される代入文のラベル「温度取得」を、テキストボックス531に入力する。テキストボックス531に入力されるラベルは、行番号「002」で記述される代入文の内容をユーザが理解できるものであればよい。なお、ラベルの入力は任意であり、ユーザは、テキストボックス531を空欄のままにしてもよい。以下、ユーザによりラベル入力欄53に入力されるラベルを「自己のラベル」と呼ぶ。
これにより、行番号「002」に対応する代入文で用いられる用語及び演算式の入力が完了する。
次に、ユーザは、メニューバー51から分岐文を選択する操作を行う。生成装置1は、この操作に応じて、行番号欄52に行番号「003」を追加する。生成装置1は、ラベルが入力されるテキストボックス532をラベル入力欄53に表示する。テキストボックス532は、行番号「003」に対応する位置に配置される。ユーザは、行番号「003」に対応する自己のラベルとして、「温度判定」をテキストボックス532に入力する。
また、生成装置1は、分岐文で用いられる分岐判定式及び自己のラベルの入力に用いられるテンプレート542を文記述欄54に表示する。テンプレート542は、行番号「003」に対応する位置に配置され、テキストボックス542a及び542bを含む。テキストボックス542aは、分岐判定式の入力に用いられる。テキストボックス542bは、分岐判定式が満たされる場合に実行される命令句を示す自己のラベル(分岐先ラベル)の入力に用いられる。
ユーザは、テキストボックス542aに、「温度測定値≦内部温度」を分岐判定式として入力し、テキストボックス542bに、「温度記録」を分岐先ラベルとして入力する。入力される分岐判定式は、用語と算術演算等で一般的に用いられる演算子とにより記述される。入力された分岐先ラベル「温度記録」に対応するアルゴリズムは、行番号「003」に対応する分岐文に関する情報の入力が終了した後に、ユーザにより入力される。
図6に示していないが、ユーザが、メニューバーから関数呼出文を選択した場合、生成装置1は、この操作に応じて、行番号欄52に新たな行番号を追加する。生成装置1は、代入文及び分岐文が選択された時と同様に、自己のラベルが入力されるテキストボックスをラベル入力欄53に配置し、呼出対象の関数名を入力するためのテキストボックスを含むテンプレートを文記述欄54に配置する。ユーザは、テンプレート中のテキストボックスに、入力中のアルゴリズムで使用する関数名(用語)を入力する。なお、アルゴリズムで使用する関数名(用語)と、生成装置1が使用する識別子とは、知識ベース62において予め対応付けられている。
このように、ユーザは、予め作成したアルゴリズムに従って、アルゴリズムに用いられる代入文、分岐文、及び関数呼出文の入力を繰り返す。
最後に、ユーザは、メニューバー51から終了文を選択する操作を行うことにより、アルゴリズムの終了を宣言する。生成装置1は、この操作に応じて、行番号欄52に新たな行番号を追加し、追加された行番号に対応する文記述欄54に、「終了」と記述する。これにより、アルゴリズムの入力が終了する。
このように、生成装置1は、コンピュータプログラムのアルゴリズムの入力を受け付ける際に、C言語に用いられる複数の命令のうちアルゴリズムで用いられる命令の選択と、選択された命令に用いられる用語の入力とを受け付ける。これにより、ユーザは、C言語などのプログラミング言語や、アルゴリズムを記述するための言語を覚えなくても、アルゴリズムを入力することができる。
また、アルゴリズムの入力の際に、演算式や分岐判定式に用いられる演算子は、特定のプログラミング言語により定義された演算子でなく、人間が一般的な演算を行う際に用いられる演算子である。従って、ユーザは、インタフェース5に入力されたアルゴリズムを、直感的に理解できる。
[4.文法データベース22]
生成装置1は、インタフェースに入力されたアルゴリズムに従って、コンピュータプログラム24を生成する(ステップS3)。このとき、生成装置1は、文法データベース22が有する代入文木3及び分岐文木4を参照して、C言語に用いられる命令文を生成する。以下、代入文木3及び分岐文木4の構造について詳しく説明する。
生成装置1は、インタフェースに入力されたアルゴリズムに従って、コンピュータプログラム24を生成する(ステップS3)。このとき、生成装置1は、文法データベース22が有する代入文木3及び分岐文木4を参照して、C言語に用いられる命令文を生成する。以下、代入文木3及び分岐文木4の構造について詳しく説明する。
[4.1.代入文木3の構造]
図7は、代入文木3の構造を示す図である。図7を参照して、代入文木3は、C言語に用いられる代入文の文法に従って形成される木構造であり、ノード300~322を有する。ノード300は、図7に示す木構造が代入文木3であることを示す根ノードである。
図7は、代入文木3の構造を示す図である。図7を参照して、代入文木3は、C言語に用いられる代入文の文法に従って形成される木構造であり、ノード300~322を有する。ノード300は、図7に示す木構造が代入文木3であることを示す根ノードである。
ノード303、305、309、311、313、315、316、318、320、及び322は、葉ノードである。C言語に用いられる代入文の構成要素は、代入文木3内の葉ノードに格納される。
葉ノードにおいて、ダブルクォーテーションで囲まれた記号(“:”、“=”、“;”)は、C言語における命令文において、一定の表現である部分(固定部分)を示す。ダブルクォーテーションで囲まれた記号が記載された葉ノードは、この記号を初期値として格納しており、固定部分は変更されない。
先頭にアンパサンド(&)が付されている葉ノードは、ユーザにより定義された用語から変換された識別子や、ユーザにより入力された自己のラベルから変換された自ラベルが格納されることを示す。つまり、先頭にアンパサンド(&)が付されている葉ノードに格納される構成要素は、ユーザにより入力される入力情報により変化する部分(変化部分)である。先頭にアンパサンド(&)が付されている葉ノードには、ユーザにより入力された用語に対応する識別子が後で格納されるが、この点については、後述する。分岐文木4の構造を示す図(図8参照)における葉ノードの表記も、上記と同様である。
代入文木3において、子孫を有するノード(ノード301、302など)は、子孫ノードがC言語に用いられる代入文のどの構成要素に関連したノードであるかを定義するノードである。従って、子孫ノードを有するノードには、C言語で用いられる代入文の構成要素は格納されない。分岐文木4でも同様である。
C言語で用いられる代入文は、以下のように記述される。
自ラベル:単一変数=演算式;
C言語で用いられる代入文は、ラベル句(「自ラベル:」の部分)と、代入節(「単一変数=演算式」の部分)と、セミコロン記号「;」とにより構成される。代入節は、演算式と、単一変数と、演算式の結果を変数に代入することを定義する代入文定義子「=」とを含む。
代入文木3は、ラベル句を定義する部分木(ラベル句部分木31)と、代入節を定義する部分木(代入節部分木32)と、セミコロン記号を定義する部分木(セミコロン部分木33)とを有する。
ラベル句部分木31は、ノード301~ノード305により構成される。ノード301は、ラベル句部分木31の根であり、ラベル句部分木31を定義する。
ノード302は、C言語に用いられる自ラベルを定義するノードであり、自ラベルを格納するノード303を子ノードとして有する。自ラベルは、ユーザがインタフェース5に入力した自己のラベルから生成される。アルゴリズムの代入文に付された自己のラベルは、対象世界を記述する用語であるため、形式系の記号列に変換される。このため、自己のラベルは、生成装置1により自ラベルに変換された上で、ノード303に格納される。
ノード304は、ラベル句に含まれるコロン記号を定義するノードである。コロン記号を格納するノード305(葉ノード)は、ノード304の子である。
代入節部分木32は、ノード306~320により構成される。ノード306は、代入節部分木32の根であり、代入節部分木32を定義する。代入節部分木32は、代入節の構成に応じて、変数部分木3aと、代入文定義部分木3bと、演算式部分木3cとを有する。
変数部分木3aは、演算式の結果が入力される単一変数を定義する部分木であり、単一変数を格納する葉ノードを含む。
ノード308及び309は、単一変数が単純変数である場合に用いられる。ノード308は、単純変数を定義するノードである。ノード309は、ユーザにより単一変数として定義された用語に対応する識別子を格納する葉ノードである。
ノード310~316は、単一変数が添字付変数として記述される場合に用いられる。ノード310は、添字付変数を定義するノードである。ノード311は、配列名に対応する識別子を格納する葉ノードである。ノード312は、配列要素を定義するノードである。ノード313は、C言語において、配列要素の始まりを示す左大括弧記号を格納する葉ノードである。ノード316は、C言語において、配列要素の終わりを示す右大括弧記号を格納する葉ノードである。ノード314は、添字変数(配列の要素番号)を定義するノードである。ノード315は、インタフェース5において、ユーザが添字変数として指定した用語に対応する識別子を格納する葉ノードである。
代入文定義部分木3bは、代入文定義子「=」を定義する部分木である。ノード317は、代入文定義部分木3bの根である。ノード318は、代入文定義子「=」を格納する葉ノードである。
演算式部分木3cは、C言語に用いられる代入文における演算式を定義する部分木である。ノード319が、演算式部分木3cの根である。ノード320は、葉ノードであり、アルゴリズムの代入文の右辺(テキストボックス541b)に入力された演算式がC言語の文法に従って変換された演算式を格納する。演算式の変換の詳細については、後述する。
セミコロン部分木33は、ノード321及び322により構成される。ノード321は、セミコロン部分木33の根であり、セミコロン部分木33を定義する。ノード322は、セミコロン記号を格納する。
[4.2.分岐文木4の構造]
図8は、分岐文木4の構造を示す図である。図8を参照して、分岐文木4は、C言語に用いられる分岐文の文法に従って形成される木構造であり、ノード400~425を有する。ノード400は、図8に示す木構造が分岐文であることを示す根ノードである。
図8は、分岐文木4の構造を示す図である。図8を参照して、分岐文木4は、C言語に用いられる分岐文の文法に従って形成される木構造であり、ノード400~425を有する。ノード400は、図8に示す木構造が分岐文であることを示す根ノードである。
ノード403、405、408、410、412、414、417、419、421、423、及び425は、葉ノードである。C言語に用いられる分岐文の構成要素は、分岐文木4内の葉ノードに格納される。
C言語に用いられる分岐文は、以下のように記述される。
自ラベル:if(分岐判定式) goto 真ラベル;
C言語で用いられる分岐文は、ラベル句(「自ラベル:」の部分)と、if句(「if(分岐判定式) goto 真ラベル」の部分)と、セミコロン記号「;」とにより構成される。分岐文木4は、この構成に基づいて、ラベル句部分木41と、if句を定義する部分木(if句部分木42)と、セミコロン部分木43とを有する。
分岐文木4において、ラベル句部分木41は、ノード401~405を有し、セミコロン部分木43は、ノード424及び425を有する。分岐文木4におけるラベル句部分木41及びセミコロン部分木43は、代入文木3と同様であるため、その説明を省略する。
if句部分木42について説明する。ノード406は、if句部分木42の根であり、if句部分木42を定義する。if句部分木42は、if句の構成に応じて、分岐文定義部分木4aと、判定式部分木4bと、命令句部分木4cとを有する。
分岐文定義部分木4aは、C言語に用いられる命令文が分岐文であることを示す分岐文定義子「if」を定義する部分木であり、ノード407及び408を含む。ノード407は、分岐文定義部分木4aの根である。ノード408は、分岐文定義子「if」を格納する葉ノードである。
判定式部分木4bは、C言語に用いられる分岐文において分岐条件を示す分岐判定式を定義する部分木であり、ノード411及び412を含む。ノード411は、判定式部分木4bの根である。ノード412は、葉ノードであり、アルゴリズムの分岐文で入力された分岐判定式をC言語の文法に従って変換した分岐判定式を格納する。分岐判定式の変換の詳細については、後述する。
命令句部分木4cは、C言語に用いられる分岐文において分岐条件が満たされる場合に実行される命令を示す命令句を定義する部分木である。命令句部分木4cは、ノード415~423を有する。ノード415は、命令句部分木4cの根である。
ノード416は、C言語において命令句の開始を示すGOTO文定義子を定義する。ノード417は、GOTO文定義子「goto」を格納する葉ノードである。
ノード418は、GOTO文定義子の後に付加される空白記号を定義する。ノード419は、空白記号を格納する葉ノードである。
ノード420は、分岐条件が満たされる場合に実行される命令のラベル(真ラベル)を定義する。ノード421は、真ラベルを格納する。真ラベルは、例えば、図6に示すインタフェース5において、テキストボックス542bに入力される分岐先ラベルから変換された自ラベルである。
ノード422は、真ラベルの後に付加される空白記号を定義する。ノード423は、空白記号を格納する葉ノードである。
このように、代入文木3及び分岐文木4は、C言語の文法に従った木構造を有する。後述するように、代入文木3を、C言語に用いられる代入文の記述順序に従って巡航することにより、C言語に用いられる代入文が生成される。C言語に用いられる分岐文も同様に生成される。
[5.プログラム生成処理(ステップS3)]
ユーザは、アルゴリズムの入力が終了した後に、コンピュータプログラム24の作成を指示する操作を行う。生成装置1は、この操作に応じて、インタフェース5に入力されたアルゴリズムに従って、C言語により記述されるコンピュータプログラム24を生成する(ステップS3)。
ユーザは、アルゴリズムの入力が終了した後に、コンピュータプログラム24の作成を指示する操作を行う。生成装置1は、この操作に応じて、インタフェース5に入力されたアルゴリズムに従って、C言語により記述されるコンピュータプログラム24を生成する(ステップS3)。
最初に、生成装置1は、ラベル入力欄53に入力された自己のラベルを、C言語で利用可能な文字列に変換して、ラベル用のテーブルを生成する。
ラベル入力欄53に設けられたテキストボックス531、532の各々には、自己のラベルとして「温度取得」、「温度判定」が入力される。日本語をC言語のラベルとしてそのまま使用することができないため、生成装置1は、ラベル入力欄53に入力された自己のラベルを、C言語で利用可能な文字列に変換して自ラベルを生成する。
自己のラベル「温度取得」は、自ラベル「L001」に変換され、自己のラベル「温度判定」は、自ラベル「L002」に変換される。自己のラベル及び自ラベルは、図9に示すラベル用のテーブルにおいて対応付けられる。ラベル用のテーブルは、知識ベース62に登録されている。また、図6のインタフェース5に示されていない自己のラベル「温度記録」は、自ラベル「L015」に対応付けられる。
図10は、図3に示すコンピュータプログラム生成処理(ステップS3)のフローチャートである。図3に示すコンピュータプログラム生成処理(ステップS3)は、インタフェース5に入力されたアルゴリズムの行番号ごとに実行される。例えば、行番号「002」の代入文に対応して、C言語に用いられる代入文が生成される。その次に、行番号「003」の分岐文に対応して、C言語に用いられる分岐文が生成される。
以下、行番号「002」におけるアルゴリズムの代入文に対応するC言語用の代入文を生成する場合を例にして、コンピュータプログラム生成処理(ステップS3)を説明する。
図10を参照して、行番号「002」に対応する文名称欄55の表示が「式と代入」であるため、生成装置1は、C言語の命令文の生成に用いる木として、代入文木3を文法データベース22から選択する(ステップS31)。
生成装置1は、ステップS32~S36の処理により、行番号「002」で記述されたアルゴリズムの代入文の構成要素を、C言語の文法に適合するように変換する。具体的には、テキストボックス541aに入力された用語(単一変数)と、テキストボックス541bに入力された演算式が、変換される。以下、詳しく説明する。
生成装置1は、行番号「002」に対応するアルゴリズムの代入文の構成要素を取得する(ステップS32)。具体的には、生成装置1は、テキストボックス541a及び541bに入力された用語及び演算式を構成要素として取得する。
生成装置1は、取得した構成要素の中から、テキストボックス541aに入力された用語「温度測定値」を選択する(ステップS33)。生成装置1は、用語データベース23を検索して、取得された用語「温度測定値」に対応する識別子「V001」を特定する。生成装置1は、取得された用語「温度測定値」を、特定された識別子「V001」に変換する(ステップS34)。
ステップS33において選択された用語「温度測定値」は、演算子及び配列記号を含まない。このため、生成装置1は、ステップS35及びS36を実行せず、ステップS37に進む。ステップS35及びS36については、後述する。
生成装置1は、ステップS34において変換された識別子「V001」を、ステップS31において選択された代入文木3の葉ノードに格納する(ステップS37)。識別子「V001」は、テンプレート541において単一変数として入力された用語「温度測定値」に対応する。図4を参照して、識別子V001は、配列次元数が0であるため、単純変数である。このため、生成装置1は、識別子「V001」を、変数部分木3a内のノード309に格納する。これにより、識別子「V001」は、C言語に用いられる代入文の構成要素として使用可能となる。
生成装置1は、行番号「002」に対応するアルゴリズムの代入文の構成要素を全て選択していないため(ステップS38においてNo)、ステップS33に戻る。
生成装置1は、行番号「002」に対応するアルゴリズムの代入文の構成要素として、テキストボックス541bに入力された演算式「センサ出力値×補正係数+オフセット(添字A)」を選択する(ステップS33)。
生成装置1は、取得した演算式に含まれる用語を、用語データベース23を参照して識別子に変換する(ステップS34)。具体的には、生成装置1は、取得した演算式を、乗算記号(×)、加算記号(+)などの演算子や、配列の要素番号の定義に用いられる小括弧を用いて区分する。これにより、取得した演算式から、用語「センサ出力値」、「補正係数」、「オフセット」、「添字A」が抽出される。生成装置1は、用語データベース23を参照して、用語「センサ出力値」を識別子「V002」に変換する。同様に、用語「補正係数」は、識別子「V003」に変換される。用語「オフセット」は、識別子「V004」に変換される。用語「添字A」は、識別子「V005」に変換される。
次に、生成装置1は、取得した演算式に含まれる演算子を、C言語の文法に適合する演算子に変換する(ステップS35)。生成装置1は、アルゴリズムの入力に用いられる演算子と、C言語に用いられる演算子とを対応付けた演算子用のテーブルを有しており、このテーブルを用いて演算子を変換する。演算子用のテーブルは、知識ベース62に登録される。テキストボックス541bに入力された演算式で用いられる乗算記号「×」は、C言語で用いられる乗算記号「*」に変換される。テキストボックス541bに入力された演算式で用いられる加算記号「+」は、C言語で用いられる加算記号「+」に変換される。
生成装置1は、演算式に含まれる配列記号を、C言語に用いられる配列記号に変換する(ステップS36)。テキストボックス541bに入力された演算式において、「オフセット(添字A)」は、配列を示す。この配列において、小括弧は、要素番号を定義するために用いられる。生成装置1は、小括弧を、C言語において配列の要素番号を定義するために用いられる大括弧に変換する。生成装置1は、演算子用のテーブルにおいて、アルゴリズムで配列の要素番号の定義に用いられる記号(小括弧)を、C言語で配列の要素番号の定義に用いられる記号(大括弧)に対応付けておけばよい。
テキストボックス541bに入力された演算式「センサ出力値×補正係数+オフセット(添字A)」は、ステップS34~S36が実行された結果、C言語で利用可能な下記の演算式(1)に変換される。
V002*V003+V004[V005] ・・・(1)
演算式(1)は、自然言語(日本語)に基づく用語を含んでいないため、C言語に用いられる代入文の演算式として利用可能である。
生成装置1は、ステップS34~S36により変換された演算式(1)を、代入文木3の葉ノードに格納する(ステップS37)。演算式(1)は、テキストボックス541bに入力された演算式から生成されたものである。このため、演算式(1)は、代入文木3における演算式部分木3cのノード320(葉ノード)に格納される。
生成装置1は、行番号「002」に対応するアルゴリズムの代入文の構成要素を全て選択したため、(ステップS38においてYes)、ステップS39に進む。
ステップS39において、生成装置1は、ラベル用のテーブル(図9参照)に基づいて、テキストボックス531に入力された自己のラベル「温度取得」に対応する自ラベル「L001」を取得する。生成装置1は、取得した自ラベル「L001」を、代入文木3におけるラベル句部分木のノード303(葉ノード)に格納する(ステップS39)。
以上の処理により、代入文木3には、C言語に用いられる代入文の全ての構成要素が格納される。生成装置1は、代入文木3を所定の順序で巡航することにより、C言語に用いられる代入文を生成する(ステップS40)。
以下、上記の処理によって構成要素が格納された代入文木3を用いて、C言語に用いられる代入文を生成する場合を例にして、命令文生成処理(ステップS40)を説明する。
命令文生成処理(ステップS40)において、生成装置1は、代入文木3の各ノードを行きがけ順で巡航して葉ノードに格納された構成要素を取得する。そして、生成装置1は、取得した構成要素を、取得した順に配列することにより、C言語に用いられる代入文を生成する。
図11は、命令文生成処理(ステップS40)のフローチャートである。以下、図7及び図11を参照して、C言語に用いられる代入文の生成について説明する。図7に示す代入文木3のノード303、309、320は、それぞれ例として示す文字列が格納されている。
生成装置1は、初期設定として、代入文木3の根であるノード300を現在位置に設定する(ステップS401)。巡航の順序が行きがけ順であるため、代入文木3において、ラベル句部分木31、代入節部分木32、セミコロン部分木33の順に巡航が行われる。
生成装置1は、現在位置を、ノード300の子ノードへ移動する(ステップS402)。ステップS402において、現在位置は、現在位置に設定されたことがない子ノードのうち、最も左側に位置する子ノードに移動する。この時点では、ノード300の全子ノード(ノード301、306、及び321)が現在位置に設定されたことはないため、現在位置は、一番左側に位置するノード301へ移動する。これにより、ラベル句部分木31の巡航が開始される。
生成装置1は、現在位置(ノード301)が葉ノードであるか否かを判断する(ステップS403)。ノード301が葉ノードではないため(ステップS403においてNo)、生成装置1は、ステップS402を再び実行して、現在位置をノード302へ移動する。ノード302が葉ノードではないため(ステップS403においてNo)、生成装置1は、ノード302の子であるノード303へ移動する(ステップS402)。
ノード303が葉ノードであるため(ステップS403においてYes)、生成装置1は、ノード303に格納された構成要素(自ラベル「L001」)を取得する(ステップS404)。
生成装置1は、ノード303の親であるノード302に戻り(ステップS405)、ノード303の弟ノードが存在するか否かを判断する(ステップS406)。弟ノードが存在しないため(ステップS406においてNo)、生成装置1は、現在位置が代入文木3の根(ノード300)であるか否かを判断する(ステップS408)。現在位置がノード302であるため(ステップS408においてNo)、生成装置1は、ステップS405に戻り、現在位置を、ノード302からノード302の親であるノード301に移動する(ステップS405)。
生成装置1は、巡航済みのノード302の弟ノード(ノード304)が存在するため(ステップS406においてYes)、現在位置をノード304に移動する(ステップS407)。生成装置1は、さらに、現在位置をノード304の子ノード(ノード305)に移動する(ステップS402)。現在位置のノード305が葉ノードであるため(ステップS403においてYes)、生成装置1は、ノード305に格納された構成要素(コロン記号「:」)を取得する(ステップS404)。その後、生成装置1は、ステップS405、S406、及びS408を繰り返して、現在位置をノード300に移動する(ステップS405)。これにより、ラベル句部分木31の巡航が終了する。
次に、生成装置1は、代入節部分木32を巡航する。ノード301の弟ノード(ノード306)が存在するため(ステップS406においてYes)、生成装置1は、現在位置をノード300からノード306に移動する(ステップS407)。これにより、代入節部分木32の巡航が開始される。生成装置1は、変数部分木3a、代入文定義部分木3b、演算式部分木3cの順に巡航する。
変数部分木3aの巡航について説明する。生成装置1は、ラベル句部分木31の巡航と同様に、ステップS402及びS403を繰り返して、現在位置をノード309まで移動する。ノード309が葉ノードであるため(ステップS403においてYes)、生成装置1は、ノード309に格納された構成要素(識別子「V001」)を取得する(ステップS404)。
その後、生成装置1は、ステップS405、S406、及びS408を実行して、現在位置をノード307に移動する。しかし、生成装置1は、ノード310及びノード310の子孫ノードの巡航を行わない。上述のように、生成装置1は、代入文の単一変数として、既に識別子「V001」を取得しているため、添字付変数を使用しないためである。生成装置1は、ノード309に構成要素が格納されていなかった場合に、ノード310及びノード310の子孫ノードを巡航して、添字付変数の構成要素を取得する。この場合、生成装置1は、ノード311、313、315、316の順で、構成要素を取得する。
生成装置1は、現在位置を、ノード307の親ノード(ノード306)に移動する(ステップS405)。これにより、変数部分木3aの巡航が終了する。
次に、生成装置1は、代入文定義部分木3bを上記と同様に巡航して、ノード318(葉ノード)から、代入文定義子「=」を取得する(ステップS404)。生成装置1は、演算式部分木3cを上記と同様に巡航して、ノード320(葉ノード)から、演算式(1)を取得する(ステップS404)。その後、生成装置1は、ノード300に戻る。これにより、代入節部分木32の巡航が終了する。
次に、生成装置1は、セミコロン部分木33を巡航する。ノード306の弟ノード(ノード321)が存在するため(ステップS406においてYes)、生成装置1は、現在位置をノード321に移動する(ステップS407)。これにより、生成装置1は、セミコロン部分木を巡航して、ノード322(葉ノード)からセミコロン記号「;」を取得する(ステップS404)。その後、生成装置1は、ステップS405、S406、及びS408を実行して、現在位置をノード300に移動する(ステップS405)。
ノード321の弟ノードが存在しないため(ステップS406においてNo)、生成装置1は、現在位置が代入文木3の根(ノード300)であるか否かを判断する。現在位置がノード300であるため(ステップS408においてYes)、生成装置1は、取得した構成要素を取得した順に配列する(ステップS409)。これにより、C言語で用いられる代入文が生成される。
代入文木3の巡航により取得された構成要素は、取得した順に、「L001」、「:」、「V001」、「=」、「V002*V003+V004[V005]」、「;」である。これの構成要素を取得した順に配列することにより生成されるC言語用の代入文(2)を、以下に示す。
L001:V001=V002*V003+V004[V005];
・・・(2)
・・・(2)
上記のC言語に用いられる代入文(2)は、行番号「002」に対応するアルゴリズムの代入文と同じ処理を示している。このように、生成装置1は、アルゴリズムの代入文と1対1に対応するC言語の代入文を生成することができる。
[6.C言語に用いられる分岐文の生成]
生成装置1は、行番号「002」に対応するアルゴリズムの代入文に従って、C言語に用いられる代入文を生成した後に、行番号「003」に対応するアルゴリズムの分岐文に従って、C言語に用いられる分岐文を生成する。
生成装置1は、行番号「002」に対応するアルゴリズムの代入文に従って、C言語に用いられる代入文を生成した後に、行番号「003」に対応するアルゴリズムの分岐文に従って、C言語に用いられる分岐文を生成する。
以下、C言語に用いられる分岐文の生成について説明する。なお、C言語に用いられる代入文の生成と重複する点については、その説明を省略する。
[6.1.分岐文木4の葉ノードへの格納]
図6及び図10を参照して、生成装置1は、行番号「003」に対応するアルゴリズムの命令が、文名称欄55に記述されているように「分岐」であるため、分岐文木4を選択する(ステップS31)。
図6及び図10を参照して、生成装置1は、行番号「003」に対応するアルゴリズムの命令が、文名称欄55に記述されているように「分岐」であるため、分岐文木4を選択する(ステップS31)。
生成装置1は、行番号「003」に対応するアルゴリズムの分岐文の構成要素として、テキストボックス542aに入力された分岐判定式「温度測定値≦内部温度」と、テキストボックス542bに入力された分岐先ラベル「温度記録」を取得する(ステップS32)。
生成装置1は、ステップS32で取得した構成要素の中から、分岐判定式「温度測定値≦内部温度」を選択する(ステップS33)。ステップS34において、生成装置1は、用語データベース23を検索して、取得された分岐判定式に含まれる用語「温度測定値」を識別子「V001」に変換する。同様に、生成装置1は、取得された分岐判定式に含まれる用語「内部温度」を識別子「V006」に変換する。生成装置1は、演算子用のテーブルを参照して、分岐判定式に含まれる演算子「≦」を、C言語に用いられる演算子「<=」に変換する(ステップS35)。取得された分岐判定式が配列を含まないため、ステップS36は、実行されない。ステップS34及びS35が実行されることにより、ステップS33で選択された分岐判定式「温度測定値≦内部温度」は、下記の分岐判定式(3)に変換される。
V001<=V006 ・・・(3)
分岐判定式(3)は、C言語に用いられる分岐文の構成要素として、分岐文木4のノード412(図8参照)に格納される(ステップS37)。
次に、生成装置1は、番号「003」に対応するアルゴリズムの分岐文の構成要素として、テキストボックス542bに入力された分岐先ラベル「温度記録」を選択する(ステップS33)。分岐先ラベル「温度記録」は、用語データベース23に登録されていない。この場合、生成装置1は、図9に示すラベル用のテーブルを参照して、ラベル「温度記録」に対応する自ラベル「L015」を特定し、特定した自ラベルを、分岐文木4のノード421(図8参照)に格納する(ステップS37)。
そして、生成装置1は、行番号「003」における自己のラベル「温度判定」に対応する自ラベル「L002」を、ラベル用のテーブルから取得して、分岐文木4にノード403(葉ノード)に格納する(ステップS39)。生成装置1は、構成要素の格納が終了した分岐文木4を巡航して、C言語に用いられる分岐文を生成する(ステップS40)。
[6.2.分岐文木4の巡航(ステップS40)]
生成装置1は、代入文木3の巡航と同様に、分岐文木4を行きがけ順で巡航する(図11参照)。これにより、生成装置1は、C言語に用いられる分岐文の構成要素を、分岐文木4の葉ノードから取得する。生成装置1が分岐文木4の葉ノードを巡航する順序は、ノード403、405、408、410、412、414、417、419、421、423、425の順である。生成装置1は、巡航した順序に従って、取得した構成要素を配列することにより、下記に示すC言語用の分岐文(4)を生成する。
生成装置1は、代入文木3の巡航と同様に、分岐文木4を行きがけ順で巡航する(図11参照)。これにより、生成装置1は、C言語に用いられる分岐文の構成要素を、分岐文木4の葉ノードから取得する。生成装置1が分岐文木4の葉ノードを巡航する順序は、ノード403、405、408、410、412、414、417、419、421、423、425の順である。生成装置1は、巡航した順序に従って、取得した構成要素を配列することにより、下記に示すC言語用の分岐文(4)を生成する。
L002:if(V001<=V006) goto L015 ;
・・・(4)
・・・(4)
上記のC言語に用いられる分岐文(4)は、行番号「003」に対応するアルゴリズムの分岐文と同じ処理を示している。このように、生成装置1は、アルゴリズムの分岐文と1対1に対応するC言語用の分岐文を生成することができる。
以下、生成装置1は、インタフェース5に入力された行番号の順に、アルゴリズムの命令文に1対1に対応するC言語用の命令文を生成する。生成装置1は、C言語用の命令文を生成した順序で記述することにより、コンピュータプログラム24を生成する。
このようにして生成されたコンピュータプログラム24のアルゴリズムは、インタフェース5に入力されたアルゴリズムと同じである。従って、生成されたコンピュータプログラム24をコンピュータに実行させた場合、コンピュータは、ユーザの意図に反する処理を実行することがない。つまり、生成されたコンピュータプログラムを修正しなくてもよいため、開発効率を向上させることができる。
また、生成装置1により生成されるC言語用の命令文は、C言語の文法に従って構成された代入文木3又は分岐文木4を行きがけ順で巡航することにより生成されるため、C言語の文法エラーが発生することがない。従って、コンピュータプログラムの開発効率を向上させることができる。
なお、上記実施の形態の代入文木3及び分岐文木4において、C言語に用いられる命令文(代入文及び分岐文)の構成要素が葉ノードに格納される例を説明したが、これに限られない。命令文の構成要素は、子ノードを有するノード(中間ノード)に格納されていてもよい。すなわち、文法データベース22は、C言語に用いられる命令文の構成要素を格納するノードを含む木構造を有していればよい。
また、上記実施の形態において、行番号「002」で記述されたアルゴリズムの代入文中の演算式を変換した演算式(1)を、ノード320(葉ノード)に格納する処理を説明した。しかし、生成装置1は、演算式(1)の構成要素の各々を、式を構成するノードに格納してもよい。
図12は、図7に示す演算式部分木3cの変形例を示す図である。図12を参照して、演算式部分木3cは、演算式(1)の構成要素を格納するノード351~358を含む。ノード351~358は、演算式(1)の木構造(部分木35)を構成する。部分木35の根であるノード351は、ノード319の子であり、加算を示す演算子「+」を格納する。ノード351は、ノード352及び355を子ノードとして有する。
ノード352は、乗算を示す演算子「*」を格納し、ノード353及び354を子ノードとして有する。ノード353は、識別子「V002」を格納し、ノード354は、識別子「V003」を格納する。
ノード355は、ノード356~358を子ノードとして有する。ノード355~358は、演算式(1)の構成要素のうち、添字付変数(配列)の構成要素を格納する。ノード355は、配列名を示す識別子「V004」を格納する。ノード356は、C言語において配列の要素番号を定義するために用いられる左大括弧記号を格納する。ノード358は、右大括弧記号を格納する。ノード357は、配列の要素番号を示す識別子「V005」を格納する。
このように、演算式(1)の構成要素を、演算式部分木3cの葉ノード、あるいは、中間ノードに格納してもよい。分岐判定式(3)も、演算式(1)と同様に、ノード412(図8参照)に格納されなくてもよい。この場合、判定式部分木4bは、分岐判定式(3)の構成要素を格納するノード(葉ノード及び中間ノード)を含んでいればよい。
なお、上記実施の形態では、所定のプログラミング言語としてC言語を例にして説明したが、これに限られない。所定のプログラミング言語は、FORTRAN、BASICなどの高水準言語であってもよい。所定のプログラミング言語としてFORTRANが用いられる場合、代入文木3及び分岐文木4は、FORTRANの文法に従って構成される。
あるいは、所定のプログラミング言語は、アセンブリ言語などの低水準言語であってもよいし、機械語であってもよい。アセンブリ言語を用いる場合、代入文木3及び分岐文木4は、アセンブリ言語の文法に従って構成される。機械語を用いる場合も同様である。
また、上記実施の形態において、アルゴリズムの代入文の演算式を入力する際に、1次元配列「オフセット(添字A)」を入力する場合を説明した(図6参照)。しかし、ユーザは、代入文の演算式、分岐文の分岐判定式、あるいは、変数を入力する際に、2次元以上の配列を用いてもよい。
生成装置1がC言語に用いられる2次元以上の配列を生成する場合、配列の要素番号を示す記号列は、以下のようにして生成される。例えば、テキストボックス541b(図6参照)に入力される「オフセット(添字A)」に代えて、ユーザは、「オフセット(添字A,添字B)」と入力する。この場合、生成装置1は、図10に示す配列記号変換処理(ステップS36)において、カンマを基準に小括弧内の文字列を区分して、2つの用語(添字A、添字B)を取得する。生成装置1は、取得した2つの用語から変換された2つの識別子を、大括弧でそれぞれ括る。これにより、配列の要素番号を示す記号列が生成される。
また、生成装置1がFORTRANに用いられる配列を生成する場合、変換された2つの識別子をカンマで区切ることにより、配列の要素番号を示す記号列を生成すればよい。
このように、配列の表現形式に関するプログラミング言語ごとの定義は、配列要素番号を定義する文法によって定められる。この文法は、文法データベース22に予め登録される。
また、生成装置1は、上述のプログラム生成処理を用いて、生成プログラム21を生成してもよい。
以上、本発明の実施の形態を説明したが、上述した実施の形態は本発明を実施するための例示に過ぎない。よって、本発明は上述した実施の形態に限定されることなく、その趣旨を逸脱しない範囲内で上述した実施の形態を適宜変形して実施することが可能である。
Claims (4)
- 所定のプログラミング言語により記述されるコンピュータプログラムを生成するコンピュータプログラム生成装置であって、
ユーザによって定義された用語と、前記用語に対応する識別子とを記憶する用語データベースと、
前記プログラミング言語の文法に従って形成される木構造であって、前記プログラミング言語に用いられる命令文の構成要素を格納するノードを含む木構造を有する文法データベースと、
前記用語を含む前記コンピュータプログラムのアルゴリズムの入力を受け付ける入力部と、
前記用語データベースを検索して前記入力部で入力された用語に対応する識別子を読み出し、前記文法データベースを検索して前記ノードから構成要素を読み出し、前記読み出された識別子及び構成要素を配列することにより前記命令文を生成する生成部とを備える、コンピュータプログラム生成装置。 - 請求項1に記載のコンピュータプログラム生成装置であって、
前記入力部は、前記プログラミング言語に用いられる複数の命令のうち前記アルゴリズムで用いられる命令の選択と、前記選択された命令に用いられる用語の入力とを受け付けるためのインタフェースを表示する、コンピュータプログラム生成装置。 - 請求項1又は2に記載のコンピュータプログラム生成装置であって、
前記命令文は、演算式と、変数と、前記演算式の結果を前記変数に代入することを定義する代入文定義子とを含む代入文を含み、
前記文法データベースは、
前記代入文定義子を定義する部分木であって、前記代入文定義子を格納するノードを含む代入文定義部分木と、
前記変数を定義する部分木であって、前記変数を格納するノードを含む変数部分木と、
前記演算式を定義する部分木であって、前記演算式の構成要素を格納するノードを含む演算式部分木とを含み、
前記生成部は、前記代入文定義部分木と、前記変数部分木と、前記演算式部分木とを所定の順序で巡航する、コンピュータプログラム生成装置。 - 請求項1~3のいずれか1項に記載のコンピュータプログラム生成装置であって、
前記命令文は、分岐判定式と、前記分岐判定式が満たされる場合に実行される命令を示す命令句と、前記命令文が分岐命令であることを示す分岐文定義子と含む分岐文を含み、
前記文法データベースは、
前記分岐判定式を定義する部分木であって、前記分岐判定式の構成要素を格納するノードを含む判定式部分木と、
前記命令句を定義する部分木であって、前記命令句の構成要素を格納するノードを含む命令句部分木と、
前記分岐文定義子を定義する部分木であって、前記分岐文定義子を格納するノードを含む分岐文定義部分木とを含み、
前記生成部は、前記判定式部分木と、前記命令句部分木と、前記分岐文定義部分木とを所定の順序で巡航する、コンピュータプログラム生成装置。
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2013272170A JP5844347B2 (ja) | 2013-12-27 | 2013-12-27 | コンピュータプログラム生成装置 |
JP2013-272170 | 2013-12-27 |
Publications (1)
Publication Number | Publication Date |
---|---|
WO2015099008A1 true WO2015099008A1 (ja) | 2015-07-02 |
Family
ID=53478855
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
PCT/JP2014/084237 WO2015099008A1 (ja) | 2013-12-27 | 2014-12-25 | コンピュータプログラム生成装置 |
Country Status (2)
Country | Link |
---|---|
JP (1) | JP5844347B2 (ja) |
WO (1) | WO2015099008A1 (ja) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN109542420A (zh) * | 2018-10-15 | 2019-03-29 | 张海光 | 一种基于标记的代码编辑方法 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JPH05181651A (ja) * | 1991-12-27 | 1993-07-23 | Nec Corp | プログラム自動生成装置 |
JPH0798650A (ja) * | 1993-09-29 | 1995-04-11 | Hitachi Software Eng Co Ltd | ソースプログラム生成方法 |
JP2001209547A (ja) * | 2000-01-24 | 2001-08-03 | Natl Inst Of Advanced Industrial Science & Technology Meti | ソースコード変換方法、ソースコード変換プログラムを記録した記録媒体及びソースコード変換装置 |
JP2001273123A (ja) * | 2000-03-28 | 2001-10-05 | Mitsubishi Electric Corp | 指示書入力装置 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP4311327B2 (ja) * | 2004-10-04 | 2009-08-12 | 日本電気株式会社 | ソースコード自動生成装置、ソースコード自動生成方法、プログラムおよび記録媒体 |
-
2013
- 2013-12-27 JP JP2013272170A patent/JP5844347B2/ja active Active
-
2014
- 2014-12-25 WO PCT/JP2014/084237 patent/WO2015099008A1/ja active Application Filing
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JPH05181651A (ja) * | 1991-12-27 | 1993-07-23 | Nec Corp | プログラム自動生成装置 |
JPH0798650A (ja) * | 1993-09-29 | 1995-04-11 | Hitachi Software Eng Co Ltd | ソースプログラム生成方法 |
JP2001209547A (ja) * | 2000-01-24 | 2001-08-03 | Natl Inst Of Advanced Industrial Science & Technology Meti | ソースコード変換方法、ソースコード変換プログラムを記録した記録媒体及びソースコード変換装置 |
JP2001273123A (ja) * | 2000-03-28 | 2001-10-05 | Mitsubishi Electric Corp | 指示書入力装置 |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN109542420A (zh) * | 2018-10-15 | 2019-03-29 | 张海光 | 一种基于标记的代码编辑方法 |
Also Published As
Publication number | Publication date |
---|---|
JP2015125751A (ja) | 2015-07-06 |
JP5844347B2 (ja) | 2016-01-13 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
Nevliudov et al. | Development of a cyber design modeling declarative Language for cyber physical production systems | |
Stone et al. | Linking product functionality to historic failures to improve failure analysis in design | |
Wassermann et al. | Sedna: A BPEL-based environment for visual scientific workflow modeling | |
US8776016B2 (en) | Integration of structured profiling data with source data in the eclipse development environment | |
Nachawati et al. | Unity decision guidance management system: Analytics engine and reusable model repository | |
US9519463B1 (en) | Application for automatically generating graphical flowcharts based on configurable means | |
Reich et al. | Advances in lazy smallcheck | |
Balbaert | Getting started with Julia | |
US20100275183A1 (en) | Source code auditor with a customized rules builder | |
Patankar et al. | MATLAB and Simulink In-Depth: Model-based Design with Simulink and Stateflow, User Interface, Scripting, Simulation, Visualization and Debugging (English Edition) | |
JP5844347B2 (ja) | コンピュータプログラム生成装置 | |
US20190205392A1 (en) | System and method for generating blocks of natural language | |
Li et al. | An Approach for Rapid Source Code Development Based on ChatGPT and Prompt Engineering | |
Balbaert et al. | Julia 1.0 programming complete reference guide: discover Julia, a high-performance language for technical computing | |
EP4352669A1 (en) | Artificial intelligence approach to solving industrial data transformation problems | |
McGrath | R for Data Analysis in easy steps: Covers R Programming essentials | |
CN106598839A (zh) | 一种面向目标代码的程序静态分析方法 | |
Li et al. | A Novel Approach for RapidDevelopment Based on ChatGPT and Prompt Engineering | |
Schrettner et al. | Visualization of software architecture graphs of java systems: managing propagated low level dependencies | |
Balbaert | Julia 1.0 Programming: Dynamic and high-performance programming to build fast scientific applications | |
JP5356851B2 (ja) | マクロプログラムの構造化システム、マクロプログラムの構造化方法およびプログラム | |
EP4345677A1 (en) | System and method for managing simulation artifacts | |
Osakabe et al. | Hitachi Materials Informatics Analytics Platform Assisting Rapid Development. | |
JP2009104336A (ja) | ソフトウェア成果物管理システム、方法及びそのプログラム | |
Crockett et al. | Telerobotics as programming |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
121 | Ep: the epo has been informed by wipo that ep was designated in this application |
Ref document number: 14874028 Country of ref document: EP Kind code of ref document: A1 |
|
NENP | Non-entry into the national phase |
Ref country code: DE |
|
122 | Ep: pct application non-entry in european phase |
Ref document number: 14874028 Country of ref document: EP Kind code of ref document: A1 |