AUTOMATIC TRANSFORMATION OF PROCEDURAL PROGRAMMING LANGUAGE PROGRAMMING PROGRAMS INTO DATAFLOW GRAPHS AND ASSOCIATED SYSTEMS AND METHODS - Patent application

By analyzing the program's syntax and generating a control flow relationship directory, configuring the data flow chart component, the problem of converting programs into data flow charts in the prior art is solved, and the parallel processing capability and data processing efficiency are improved.

JP7669342B2Active Publication Date: 2025-04-28AB INITIO TECHNOLOGY LLC
View PDF 4 Cites 0 Cited by

Patent Information

Application Number
JP2022503534
Authority / Receiving Office
JP · JP
Patent Type
Patents
Current Assignee / Owner
Priority Date
2019-07-18
Filing Date
2020-07-17
Publication Date
2025-04-28
Estimated Expiration
2040-07-17

AI Technical Summary

Technical Problem

The prior art is difficult to effectively convert programs into data flow graphs, resulting in a lack of parallel processing capabilities and affecting data processing efficiency.

Method used

By analyzing the syntax used by the program, a directory that controls flow relationships is generated, and the data flow graph component is configured based on these relationships, a data flow graph is established, including identifying the data flow graph component and generating flows representing the flow of data records.

Benefits of technology

It realizes the conversion of programs into data flow graphs, thereby supporting parallel processing, such as pipeline parallelism and component parallelism, improving the efficiency of data processing.

✦ Generated by Eureka AI based on patent content.

Smart Images

  • Figure 0007669342000001
    Figure 0007669342000001
  • Figure 0007669342000002
    Figure 0007669342000002
  • Figure 0007669342000003
    Figure 0007669342000003
Patent Text Reader

Abstract

This paper describes a technique for enhancing the functionality of data processing systems by using computer execution tools that convert programs written in procedural languages ​​into components that can be executed as a dataflow graph. A dataflow graph generated from a program written in a procedural programming language can support various forms of parallel processing, such as pipeline parallelism and / or component parallelism. In some embodiments, parallelism can be achieved by parsing the program based on grammar and identifying control flow relationships between data operations performed by the program. Specifically, the type of dataflow graph component can be identified using grammar as corresponding to a particular data operation (or group of data operations) in the program. The dataflow graph can be generated to include identified components that can be connected to each other using flows in an order according to identified control flow relationships between data operations.
Need to check novelty before this filing date? Find Prior Art

Description

[Background technology]

[0001] Procedural programming is a paradigm in which programs are written as a series of explicit commands to be executed in sequence by a processor. Subsequences of commands can be grouped and arbitrarily called from other parts of the program, thereby extending the range of commands that the rest of the program can perform. These subsequences may be called subroutines, functions, or subprograms, depending on the particular programming language used.

[0002] In contrast, dataflow programming emphasizes the flow of data through a set of operations using a program called a dataflow graph, which defines the operations and how data flows between the operations. A dataflow graph is typically constructed to take data records from one or more sources, perform operations on a set of data records, and produce some output. Generally, the parts of a dataflow graph that perform operations on data records are called components, and the connections between components are called flows.

[0003] The difference between a program written in a procedural language and a program written in a dataflow graph is that in a dataflow graph, multiple operations can occur simultaneously, because data records that have reached earlier components in the dataflow graph ("upstream" components) can be operated on while other data records have already been propagated to later components in the dataflow graph ("downstream" components). This phenomenon is a type of parallelism that is sometimes called pipeline parallelism. In this way, a dataflow graph can be thought of as like a series of workers on an assembly line (with components representing workers), whereas a program written in a procedural language is more like a single worker completing a series of tasks (each task is completed before the next one begins). Summary of the Invention [Means for solving the problem]

[0004] According to some aspects, a non-transitory computer readable medium including instructions that, when executed by at least one processor, perform a method of transforming a program into a data flow graph, the program including data operations and a control flow indicating a sequence of execution of the data operations, the method using the at least one processor and using a grammar stored by the at least one computer readable medium to analyze the program, the analyzing including: identifying a plurality of sequential steps of the program based on the grammar, each step of the plurality of steps including one or more data operations of the program; generating a catalog that stores control flow relationships between the steps of the plurality of identified steps of the program; and for each of the identified plurality of steps of the program, generating a catalog that stores control flow relationships between the steps of the plurality of identified steps of the program based on the data operations of the step and based on the grammar as corresponding to the step. A non-transitory computer readable medium is provided that includes analyzing, including identifying one of a data flow graph component type, thereby identifying a plurality of data flow graph components, each corresponding to a respective step of a plurality of steps of a program, and composing the plurality of data flow graph components based on each corresponding step of the plurality of steps of the program and based on a grammar, thereby creating a plurality of composed data flow graph components; and generating, using at least one processor, a data flow graph including the plurality of composed data flow graph components and one or more flows representing a flow of data records between the one or more data flow graph components, wherein the one or more data flow graph components are connected by the one or more flows in an order according to the generated catalog.

[0005] According to some aspects, a computer-implemented method for automatically converting a program into a data flow graph, the program including data operations and a control flow indicating a sequence of execution of the data operations, the method comprising: analyzing the program using at least one processor and using a grammar stored by at least one computer readable medium, the analyzing including identifying a plurality of sequential steps of the program based on the grammar, each step of the plurality of steps including one or more data operations of the program; generating a catalog that stores control flow relationships between the plurality of identified steps of the program; and for each of the identified plurality of steps of the program, generating a plurality of data flow graph component types as corresponding to the step based on the data operations of the step and based on the grammar. In one embodiment, the method includes: identifying one of the types of data flow graph components corresponding to each step of the plurality of steps of the program, thereby identifying a plurality of data flow graph components each corresponding to a respective step of the plurality of steps of the program; and composing the plurality of data flow graph components based on each corresponding step of the plurality of steps of the program and based on the grammar, thereby creating a plurality of composed data flow graph components; and generating, using at least one processor, a data flow graph including the plurality of composed data flow graph components and one or more flows representing a flow of data records between the one or more data flow graph components, the one or more data flow graph components being connected by the one or more flows in an order according to the generated catalog.

[0006] According to some aspects, a system for automatically converting a program into a data flow graph, the program including data operations and a control flow indicating a sequence of execution of the data operations, the system comprising means for analyzing the program using at least one processor and a grammar stored by at least one computer readable medium, the analyzing comprising: identifying a plurality of sequential steps of the program based on the grammar, each step of the plurality of steps including one or more data operations of the program; generating a catalog that preserves control flow relationships between the plurality of identified steps of the program; and for each of the plurality of identified steps of the program, generating a plurality of data flow graphs based on the data operations of the step and based on the grammar as corresponding to the step. A system is provided that includes means for identifying one of the component types, thereby identifying a plurality of data flow graph components, each corresponding to a respective step of a plurality of steps of the program, and constructing the plurality of data flow graph components based on each corresponding step of the plurality of steps of the program and based on a grammar, thereby creating a plurality of composed data flow graph components; and means for generating a data flow graph, the data flow graph including the plurality of composed data flow graph components and one or more flows representing a flow of data records between the one or more data flow graph components, the one or more data flow graph components being connected by the one or more flows in an order according to the generated catalog.

[0007] The above-described apparatus and method embodiments may be implemented in any suitable combination of the aspects, features, and acts described above or in more detail below. These and other aspects, embodiments, and features of the present teachings may be more fully understood from the following description taken in conjunction with the accompanying drawings.

[0008] Various aspects and embodiments are described with reference to the following drawings. It should be understood that the drawings are not necessarily drawn to scale. In the drawings, each identical or nearly identical component shown in various figures is represented by a like numeral. For purposes of clarity, not every component is shown in every drawing. [Brief description of the drawings]

[0009] [Figure 1] 1 shows an illustrative data flow graph according to some embodiments. [Diagram 2] 1 illustrates a flowchart of a method for automatically converting a program written in a procedural language into a dataflow graph according to some embodiments. [Diagram 3] 1 is a flowchart of a method for automatically converting a program written in a procedural language into a dataflow graph according to some embodiments. [Figure 4A] 1 is an illustrative SAS program according to some embodiments. [Figure 4B] 4B shows an illustrative data flow graph generated according to the program shown in FIG. 4A in accordance with some embodiments. [Figure 4C] 4B illustrates the illustrative dataflow graph of FIG. 4B, where the dataflow graph components are annotated with corresponding steps of a SAS program, according to some embodiments. [Figure 4D] 4B illustrates details of transforming a first step of the program shown in FIG. 4A into a first component of the dataflow graph shown in FIG. 4B, according to some embodiments. [Figure 4E] FIG. 4B illustrates an example of parsing a program step shown in FIG. 4A using a grammar to identify the step and its control flow relationships to other steps, select a corresponding data flow graph component, and configure the selected data flow graph component, according to some embodiments. [Figure 4F]4B illustrates details of transforming a second step of the program shown in FIG. 4A into a second component of the data flow graph shown in FIG. 4B, according to some embodiments. [Diagram 5] 1 illustrates an example of a computing system environment in which aspects of the present invention may be implemented. DETAILED DESCRIPTION OF THE PREFERRED EMBODIMENTS

[0010] The inventors have recognized and appreciated that the functionality of a data processing system can be increased by a computer-implemented tool that converts a program written in a procedural language into components that can be executed as a dataflow graph. In particular, the computer-implemented tool can identify types of dataflow graph components as corresponding to portions of the program such that the behavior of each portion can be replicated by an appropriate portion of the dataflow graph. In some embodiments, a graph generated from a program written in a procedural programming language can support various forms of parallelism, such as pipeline parallelism and / or component parallelism, even though the program written in the procedural language lacks such parallelism. In some embodiments, parallelism can be achieved by parsing the program based on a grammar and identifying control flow relationships between data operations performed by the program. Furthermore, types of dataflow graph components can be identified as corresponding to particular data operations (or groups of data operations) of the program using the grammar. A dataflow graph can be generated to include the identified components that can be connected to each other with flow in an order according to the identified control flow relationships between the data operations.

[0011] There may be several advantages to processing data using dataflow programming compared to procedural programming. In particular, as mentioned above, dataflow graphs can naturally provide parallelism using pipeline parallelism, making dataflow programming a natural choice for processing data sets where certain operations are repeated on a large number of data, such as data records of a data set. A further type of parallelism afforded by dataflow graphs is component parallelism, which occurs when different branches of the dataflow graph are operating simultaneously. For example, data records from a single data source may be output along different flows, and different operations may be performed along different branches simultaneously.

[0012] Despite the advantages that dataflow graphs can provide, some entities (e.g., industry) may still rely on programs written in procedural languages ​​for data processing. In some cases, an entity may still utilize programs written in procedural languages ​​while partially using dataflow graphs. This approach generally involves executing a dataflow graph in place of an older program written in a procedural language while incorporating a component of the dataflow graph that executes some of the code of the program written in the procedural language outside of the dataflow graph. In this way, the dataflow graph is executed as a kind of "wrapper" and while the dataflow graph is the program that is ultimately executed by the system, much of the functionality of the program may still be executed externally by the procedural language.

[0013] One drawback of this approach may be that the dataflow graph language may not have the ability to understand what is happening within a component that executes external code written in a procedural language. Another useful feature of dataflow graphs is the ability to follow the data sequence, using a single dataflow graph or multiple dataflow graphs, to gain an understanding of where data comes from and where it is going within an organization's operations. However, components that execute external code may be like a "black box" to the dataflow graph software in terms of data sequence, since the dataflow graph software may not be able to follow the data sequence through the component because the operations the component performs are unknown to the software. This approach may also hinder pipeline parallelism, since the external code may need to be fully executed before downstream components can be executed.

[0014] As discussed above, the inventors have recognized and understood that the functionality of data processing systems can be increased by computer-implemented tools that convert programs written in procedural languages ​​into components that can be executed as dataflow graphs. These techniques can be applied to generate native dataflow graph code throughout the generated dataflow graph so that data sequences can be followed using the dataflow graph. The natural efficiency benefits of dataflow graphs, such as component parallelism and / or pipeline parallelism as discussed above, can be naturally provided in the generated dataflow graph. The inventors have further recognized and understood techniques for implementing such tools based on grammars, as further described below.

[0015] According to some embodiments, a system for converting a program written in a procedural language into a data flow graph may execute a parser to parse the text of the program. In some embodiments, such parsing may identify operations performed on data by the program, and further identify the type of such operations. Based on the type of data operations performed by the program, a particular type of data flow graph component capable of performing the same operations may be identified by accessing a data structure constructed to associate a particular operation with a particular data flow graph component. For example, if a language in the program is identified by the parser as performing a merge between data, the data structure may identify a data flow graph component that combines a stream of data records together as corresponding to the merge operation. In some embodiments, such a parser may also determine an execution order of the data operations when executed by the program. When generating a data flow graph based on the program, flows between components representing the data operations are generated, and the components may be connected to each other by flows in an order based on the determined execution order.

[0016] Following is a more detailed description of various concepts related to techniques for automatically converting programs written in procedural languages ​​into data flow graphs, and embodiments of such techniques. It should be understood that the various aspects described herein may be implemented in any of numerous ways. For illustrative purposes only, specific implementation examples are provided herein. In addition, the various aspects described in the following embodiments may be used alone or in any combination, and are not limited to the combinations expressly described herein.

[0017] Figure 1 shows an illustrative dataflow graph, according to some embodiments. A dataflow graph 100 is shown in Figure 1 to illustrate some of the above features of dataflow graphs. A dataflow graph is a program that can be represented as a visual flow of data records through components and flows. The components referred to herein are parts of the dataflow graph that perform operations on data records, and the connections between components are referred to herein as flows.

[0018] Generally speaking, a dataflow graph is created by arranging components and flows in a graphical user interface. Figure 1 shows an example of such a view of a dataflow graph, where rectangular boxes represent components and lines between them represent flows. Because dataflow graphs allow one to visualize the flow of data when viewed, they are a convenient way of writing programs that operate on data records. When a dataflow graph is ready to be executed, it is compiled and can then be executed by a suitable computing system.

[0019] In the example of Figure 1, three data inputs 102, 104, and 106 are accessed, processed, and combined in a manner described below to produce two data outputs 122 and 124. The data inputs may be provided from a variety of sources, including from a file stored on a computer readable medium, from a collection of files, or from a database table. In the example of Figure 1, the data inputs 102, 104, and 106 are depicted in a manner often used to depict a single data file stored on a computer readable medium.

[0020] In the example of Figure 1, input data 102 is read and manipulated by a filter component 108, which outputs data records that satisfy a particular logical expression. For example, if the input data 102 includes a data field specifying a country code, filter 108 may be configured to output only data records having a value for that data field of "US". The data records output from filter 108 are input to a sort component 110, which sorts the data records in an order determined by a selected sort "key", which identifies one or more data fields according to which the records are to be ordered. The sorted data records are output to a join component 120.

[0021] Further, the input data 104 is read and manipulated by a transformation component 112, which processes the input data records according to transformation code stored in (or accessed by) the transformation component 112. For example, the transformation may add or remove data fields per data record and / or manipulate the values ​​of the data fields when creating the output data. Note that in the example of FIG. 1, the filter component 108 and the transformation component 112 illustrate component parallelism; that is, data records from the input data 102 may be operated on by the filter 108 at the same time that data records from the input data 104 are operated on by the transformation 112. Component parallelism may be exploited by executing the filter 108 and the transformation component 112 using different processors in some cases and different computing systems in some cases.

[0022] 1, the join component 116 receives the data records output from the transform 112 and the data records output from the filter component 114 (which operates as described above in connection with the filter 108). The join component may be configured to create a single data record set from the two sets of input data records by matching records from each set according to keys that identify data fields from each set. The transformation code stored in (or accessed by) the join component 116 may further define how to construct the data records that exit the join component based on the data field values ​​contained in the matching records from the two input data record sets.

[0023] The data records output by the join component 116 are replicated by the replicate component 118 to create two identical sets of data records. One of these sets of data records is stored as output data 124, and the other set is combined with the data records output by the sort 110 and the result is stored as output data 122.

[0024] In general, components of a dataflow graph are configured to some degree to define their functionality. For example, in the case of the filter and transform components in the example of FIG. 1, these components are configured with transformation code that defines how records are selected or transformed, respectively. In some cases, the transform component may also define an output record format that differs from the record format of the input data records. A sort component may be configured by specifying a sort key, and in some cases, by specifying how the sort should be done (e.g., ascending values ​​vs. descending values). In each of these cases, some configuration manner is applied to describe how the component should manipulate the data records. Data describing such configuration may be collectively referred to herein as "configuration data." Thus, transformation code, key values, record formats, etc. are each a type of configuration data. The replicate component in the example of FIG. 1 may function without defined configuration data, at least in some cases, because the component may be designed only to replicate dataflow and not otherwise configurable.

[0025] 2 illustrates a flowchart of a method for automatically converting a program written in a procedural language into a dataflow graph, according to some embodiments. As mentioned above, according to some aspects of the present application, the functionality of a data processing system can be increased by a computer-implemented tool that converts a program written in a procedural language into components that can be executed as a dataflow graph. Method 200 illustrates how such a tool can be operated to perform such a conversion by converting a program 201 into a dataflow graph 208.

[0026] In the example of Figure 2, a program 201 written in a procedural language is provided as input to a transformation engine 205, which includes one or more computing devices executing the tools described above. The program 201 may be written in any procedural language, as the techniques described herein are not limited to any particular language. Examples of suitable languages ​​include Statistical Analysis System (SAS), BASIC, Fortran, Java, Mathematica, MATLAB, Pascal, Perl, Python, R, Unix shell, and Visual Basic.

[0027] During execution by the transformation engine, the tools may utilize predefined grammars 206. Grammars 206 may provide various definitions on which the tools executed by transformation engine 205 rely to enable the tools to parse program 201 and generate data flow graph 208. These definitions provided by grammars 206 may instruct the tools how to interpret words and symbols in program 201, how to identify a data operation (or group of data operations) in the program as having functionality corresponding to a particular type of data flow graph component, how to generate the data flow graph component, how to identify a data operation (or group of data operations) in the program as relating to configuration data for the identified type of data flow graph component, how to configure a data flow graph component that corresponds to the data operations in the program, and / or how to determine the control flow of the data operations in the program.

[0028] As used herein, "control flow" refers to the order in which individual data operations are performed consistent with a program. For example, a program may be configured to perform operations C, D, and E, and such that operation C is performed before either operation D or operation E. This dependency on the relative ordering of operations C, D, and E is an example of control flow.

[0029] 2, data created by a tool that parses a program may be stored in a catalog 207, which may include any suitable data structure in which aspects such as determined control flow relationships of data operations in a program may be stored. The catalog may be accessed by a transformation engine during subsequent parsing operations, as described further below.

[0030] As referred to herein, a "data operation" of a program refers to a portion of the program that, when executed, modifies the execution environment of the program. A data operation may encompass, for example, the modification of the value of one or more variables or other data present in the execution environment. It will be understood that the modification of a value may itself include one or more data operations. For example, if a command of a procedural program sets the value of a variable equal to the result of a calculation, each part of the calculation may represent a separate data operation, as well as the final result of saving the calculated value to the variable. Thus, in at least some cases, a single command of a program may represent multiple data operations, as various changes to the execution environment occur during the execution of the command.

[0031] According to some embodiments, the transformation engine 205 may generate one or more components and flows of the dataflow graph 208 to correspond to a sequence of data operations in the program 201. In some cases, generating a component of the dataflow graph 208 may include identifying a type of component from among multiple available dataflow graph components. In some cases, generating a component of the dataflow graph 208 may also include generating configuration data for the identified component, which may include defining parameters or other configurable aspects of the component based on the data operations in the program. For example, an instance of the illustrative dataflow graph transformation code 209 shown in FIG. 2 may be generated by a tool executed by the transformation engine and associated with the identified component.

[0032] According to some embodiments, the tools executed by the transformation engine 205 may generate flows between identified components of the dataflow graph 208 based on the determined control flow relationships of the data operations in the program. For example, if the tools identify a first and a second component with respect to a particular data operation (or set of data operations), the tools may also identify that one or more data operations associated with the first component occur prior to one or more data operations associated with the second component in the control flow. As a result, the tools may generate one or more flows connecting the first and second components such that the second component executes downstream from the first component in the dataflow graph (i.e., in a sequence of components, data flows out of the first component before data flows into the second component).

[0033] The end result of the process performed by transformation engine 205 based on grammar 206 is to generate dataflow graph 208, which is a dataflow graph representation of program 201. This relationship between the program and the equivalent dataflow graph is illustrated in FIG. 2 and subsequent figures by zigzag arrows.

[0034] 3 is a flowchart of a method for automatically converting a program written in a procedural language into a dataflow graph, according to some embodiments. Method 300 is an illustrative process in which a program 301 written in a procedural language is automatically converted into a dataflow graph. Method 300 may be performed, for example, by the tools shown in FIG. 2 and executed by conversion engine 205 described above.

[0035] Method 300 begins in act 302 where program 301 is divided into steps based on grammar 303. A tool performing method 300 may rely on grammar 303, similar to the example grammar 206 of FIG. 2, to indicate, among other things, how to interpret words and symbols in the program and how to identify a data operation (or group of data operations) in the program as having functionality corresponding to a particular type of data flow graph component. Specifically, the tool may parse program 301 using grammar 303 to identify one or more data operations in act 302. Each group of one or more data operations may be referred to as a "step," whereby the data operations of the program are divided into a series of steps (each step containing one or more data operations performed by the program).

[0036] In act 304, the tool performing the method 300 may save or record information identifying the recognized steps in a catalog 305. The catalog created in act 304 may identify the steps of the program and the control flow relationships of the steps, and may further identify one or more data operations of the program 301 that correspond to each step.

[0037] In Act 306, the tool executing method 300 selects a type of dataflow graph component that corresponds to the identified steps of the program (which may have been stored in the catalog in Act 304). The selected type of dataflow graph component may be based on parsing the data operations of the identified steps using the grammar 303 and determining, based on the parsing, what type of dataflow graph component corresponds to the data operations of said steps. As mentioned above, the grammar 303 may be configured to associate a particular type of dataflow graph component with a particular language in the program, so that it can appropriately generate a dataflow graph component that performs the same function as the step in which said language appears.

[0038] In some embodiments, a pre-configured library of dataflow graph component types may be available to the tool such that identifying a dataflow graph component involves selecting one of the component types from the library (e.g., a "sort" or "filter" type component, as described in connection with FIG. 1). In some embodiments, an instance of a dataflow graph component of the selected component type may be generated having functionality that corresponds to the program steps.

[0039] In act 308, the tool performing the method 300 may configure the dataflow graph components selected in act 306. Accordingly, act 308 may include generating configuration data for one or more of the components selected in act 306. The tool may access a grammar to determine how to configure a given dataflow graph component based on the data operations present in the corresponding step of the program. As mentioned above, data describing the configuration of a dataflow graph component is referred to herein as "configuration data." Accordingly, act 308 may include generating values ​​for operational parameters of the component and / or generating transformation code for the component. It can be appreciated that some of the components identified in act 306 may not require configuration data, and as a result, configuration data may not be generated for all of the identified components.

[0040] In act 310, the tool performing method 300 may generate a dataflow graph including the identified components configured by act 308 (e.g., including the generated configuration data), if applicable, and having flows connecting the components in a sequence according to the identified control flow relationships of the program steps. In some embodiments, act 310 may include recording the already identified and configured components along with the generated flows connecting the components in an appropriate computer-readable storage medium. For example, the dataflow graph may be saved as a data file containing data describing or identifying the dataflow graph components, flows, and configuration data regarding the components, and act 310 may include recording said data file. In some embodiments, such a data file may be arranged to be compiled by another program prior to execution. In some embodiments, the generated dataflow graph may be created as an executable data file, in which case act 310 may include compiling the dataflow graph according to the identified dataflow graph components, flows, and configuration data regarding the components. Act 310 may include generating a flow to connect the data flow graph components in an ordering according to the control flow relationships identified by the catalog.

[0041] In some embodiments, the program 301 may include one or more procedures (sometimes referred to as routines, functions, subroutines, or macros), and the tool performing the method 300 may identify such procedures when parsing the program using a grammar. For example, the tool may identify one or more procedure calls and / or recognize procedure definitions. In some embodiments, the tool performing the method 300 may generate a reusable group of dataflow graph components, sometimes referred to as a "subgraph," to represent the data operations of the identified procedures. In some cases, the subgraph may be saved in a data file that can be accessed by the generated dataflow graph. This may enable the generated dataflow graph to reuse the same set of components in a manner similar to how the program 301 may make repeated procedure calls, thereby reusing the same section of code. The subgraph may represent the entire identified steps of the program, or may instead represent a portion of the identified steps of the program.

[0042] When a tool executing method 300 generates a subgraph to represent a procedure of program 301, the procedure may utilize one or more values ​​as inputs to the procedure. In such a case, the generated subgraph may be parameterized such that the behavior of a dataflow graph component of the subgraph behaves differently based on the values ​​of subgraph parameters. For example, a branch of a component may be enabled or disabled within the subgraph based on the value of the component.

[0043] According to some embodiments, the program 301 may include or function based on one or more global variables, which are values ​​defined in the execution environment and may change the way the program's data manipulations are performed. In such cases, the tool executing the method 300 may generate one or more dataflow graph parameters, which are parameters set at the dataflow graph level whose values ​​may be accessed by one or more components of the dataflow graph to define the behavior of the components. As an illustrative example, the program 301 may be written to initialize a global variable with a value of a country code and perform subsequent processing of data that depends on the value. The generated dataflow graph may be defined with a graph parameter that defines the country code, and the components of the dataflow graph may utilize this parameter definition in their transformation code or otherwise.

[0044] According to some embodiments, a tool performing method 300 may identify comments in program 301. Comments are sections of a program that are not executed and are generally identified using delimiters at the beginning or at the beginning and end of the comment section. In some cases, a tool performing method 300 may identify such comments in the program and copy those comments to relevant locations in the generated data flow graph. Comments may be identified by the tool as relating to particular data operations in the program based on, for example, the proximity of the comment text to the data operations. Such comments may be placed in the transformation code of the components that correspond to those data operations such that any information in those comments may be preserved in the resulting data flow graph.

[0045] According to some embodiments, a tool performing method 300 may identify and preserve white space in program 301 when generating a dataflow graph. As referred to herein, "white space" refers to any character or sequence of characters that represents horizontal or vertical space in typography within a program, the most common example being a "space" character. In some cases, a tool performing method 300 may identify such white space within the data operations of the program and preserve the presence of the white space when generating transformation code (or other configuration data) for the data operations in components of the dataflow graph.

[0046] Figures 4A-4F provide an illustrative example of converting a program written in the procedural language SAS into a dataflow graph, according to some embodiments. Figure 4A shows an illustrative SAS program that performs a series of operations on two input data files and creates an output data file. As mentioned above, a computer-implemented tool can be executed to convert the illustrated program into components that can be executed as a dataflow graph.

[0047] According to some embodiments, when program 400 is executed and provided as input, a tool can identify four steps of the program, labeled 401a, 401b, 401c, and 401d. As discussed above in connection with act 302 of FIG. 3, the tool can access a grammar to identify data operations or groups of data operations that correspond to the steps of the program. In the illustrative program 400, the steps are configured to perform the following actions: Step 401a reads a data file called "FILE_A", parses its contents into three data fields, and creates a further data field (ORDER_FULL_NAME) from the contents of the three data fields. Step 401b reads a data file called "FILE_B", parses its contents into three data fields, and creates a further data field (ORDER_FULL_NAME) from the contents of the three data fields. Step 401c merges the results of steps 401a and 401b. Step 401d filters out all data records that do not have the particular value ("US") in the first two characters of the ORDER_FULL_NAME data field.

[0048] According to some embodiments, the tool being executed can identify the contents of those portions of program 400 as corresponding to operations that may be performed by components of the dataflow graph. Specifically, the tool can recognize the contents of the portions of code labeled 401a and 401b as performing a transformation of the retrieved data files, respectively. Additionally, the tool can recognize the contents of the portion of code labeled 401c as performing a join operation, and the contents of the portion of code labeled 401d as performing a filter operation. The tool can also identify the control flow relationship of these steps by recognizing that step 401c utilizes the results of steps 401a and 401b ("MERGE DATASET_A DATASET_B"), and that step 401d utilizes the results of step 401c ("SET DATASET_C"). As a result, the components and flows shown in FIG. 4B can be identified. The tool can also generate appropriate configuration data for components 406, 408, 410, and 412. As a final step, the tool can create a dataflow graph that encompasses the arranged and generated configuration data as shown in FIG. 4B.

[0049] Figure 4C shows Figure 4B with annotations associated with components 406, 408, 410, and 412, which indicate each step of program 400 shown in Figure 4A. Procedural language code equivalent to the components of dataflow graph 450 is shown in Figure 4C connected to the components with grey zigzag arrows. Thus, it will be understood that the annotation sections of program 400 are not stored or executed verbatim by each component of dataflow graph 450. Rather, the components of dataflow graph 450 implement functionality equivalent to the associated sections of the program.

[0050] Figure 4D shows details of translating a first step of the program shown in Figure 4A into a first component of the dataflow graph shown in Figures 4B-4C, according to some embodiments. To further illustrate the process of configuring a component by generating configuration data for the component by a tool, Figure 4D shows step 401a of Figure 4A and shows how the resulting section of the dataflow graph may be generated.

[0051] In the example of Figure 4D, a flow 405 is generated to connect the identified transformation component 406 to the input file FILE_A as a result of the data operation "INFILE FILE_A" in section 401a of the program, which indicates that the program should read FILE_A. In addition, the transformation component 406 is configured to read a sequence of bytes from the input file as defined by the data operation "INPUT ORDER_NAME $10 EXT $4 CHANGE_FLAG $1" of the program, which indicates that 10 bytes should be read as the value of the data field ORDER_NAME, the next 4 bytes should be read as the value of the data field EXT, and the next 1 byte should be read as the value of the data field CHANGE_FLAG. Component 406 may be configured to continue reading bytes from the input file FILE_A, assuming there are more bytes, such that each block of 15 bytes in the input file becomes part of a consecutive data record.

[0052] In addition, component 406 is configured to generate a further output data field by concatenating the three field values ​​read from the input file with underscore characters, as defined by the data operations defining ORDER_FULL_NAME in program section 401a, using conversion code 451. Component 406 may be configured to create data records in flow 407 according to the illustrated output record format 452. A tool that generates data flow graphs may generate record format 452 by interpreting program section 401a using a grammar to identify the types and lengths of the data fields being created by this step of the program. In this case, the lengths of the ORDER_NAME, EXT, and CHANGE_FLAG fields can be inferred from the way they are read from the input file, and the length of the ORDER_FULL_NAME field can be inferred as a result of concatenating the three other fields, totaling 15 characters, with two underscore characters.

[0053] Figures 4E-4F show details of translating the second step of the program shown in Figure 4A into the second component of the data flow graph shown in Figures 4B-4C, according to some embodiments. Figure 4E reproduces the content of step 401c of Figure 4A and shows three different parsing operations of that step using grammar 480.

[0054] In the first instance of Figure 4E, the illustrated data operations 481 of the program are parsed using grammar 480 to identify these data operations as steps, i.e., step 401c above. Using grammar 480, a tool may recognize data operation 481 as corresponding to the step based on a) the highlighting language that identifies data operations beginning with "DATA.." and ending with "...RUN;" as defining a step, and b) recognizing that the step depends on "DATASET_A" and "DATASET_B", and that this consequently implies a particular control flow relationship between this step and other parts of the program.

[0055] In the second instance of Figure 4E, the tool may parse the illustrated data operation 482 of the program (which may have now been identified as corresponding to step 401c) using the grammar 480 to determine the type of dataflow graph component that corresponds to the functionality of this step of the program. In the example of Figure 4E, the highlighted keyword "MERGE" may be identified using the grammar as corresponding to a "join" type dataflow graph component.

[0056] In a third instance of Figure 4E, the tool may parse the illustrated data operations 483 of the program (which may have now been identified as corresponding to step 401c) using a grammar 480 to determine how to configure an instance of the type of data flow graph component selected in the second instance of parsing above. In the example of Figure 4E, the highlighted language "BY ORDER_NAME;" may be identified using the grammar as indicating that an instance of the "join" data flow graph component should be configured to use a field called "ORDER_NAME" as the key field of the join operation.

[0057] Figure 4E thus provides one example of how grammar 480 may use parsing of a portion of a program to create these three different types of information about that portion. Although parsing has been described above in terms of three separate instances of parsing, it will be understood that a tool may utilize grammar 480 to parse the portion of a program in any number of ways, each of which parses any suitable portion of the portion of a program in any order, and that the above is provided merely as an illustrative process.

[0058] In light of the above parsing of step 401c, Fig. 4F shows how the resulting section of the data flow graph can be generated. In the example of Fig. 4F, flows 407 and 409 provide data records with the illustrated input record format from two upstream transformation components 406 and 408. In the parsing of step 401c of the program, the tool can identify that a join component is appropriate as a result of the program's "MERGE" command, and can further generate configuration data for the join component that specifies a join key 462 of ORDER_NAME as the field to use to match the incoming records for the join. As a result of the join, the only records that can be output from component 410 along flow 411 can be those for which there were records with the same ORDER_NAME value present in both data record sets coming from the transformation component.

[0059] 5 illustrates an example of a suitable computing system environment 500 on which the technology described herein may be implemented. The computing system environment 500 is only one example of a suitable computing environment and is not intended to suggest any limitation as to the scope of use or functionality of the technology described herein. Neither should the computing environment 500 be interpreted as having any dependency or requirement relating to any one or combination of components illustrated in the exemplary operating environment 500.

[0060] The technology described herein can be used with numerous other general purpose or special purpose computing system environments or configurations. Examples of well-known computing systems, environments, and / or configurations that may be suitable for use with the technology described herein include, but are not limited to, personal computers, server computers, handheld or laptop devices, multiprocessor systems, microprocessor-based systems, set-top boxes, programmable consumer electronics products, network PCs, minicomputers, mainframe computers, distributed computing environments that incorporate any of the above systems or devices, and the like.

[0061] A computing environment can execute computer-executable instructions such as program modules. Generally, program modules include routines, programs, objects, components, data structures, etc. that perform particular tasks or implement particular abstract data types. The techniques described herein may also be practiced in distributed computing environments where tasks are performed by remote processing devices that are linked through a communications network. In a distributed computing environment, program modules may be located in both local and remote computer storage media, including memory storage devices.

[0062] With reference to FIG. 5, an exemplary system for implementing the techniques described herein includes a general purpose computing device in the form of a computer 510. Components of the computer 510 may include, but are not limited to, a processing unit 520, a system memory 530, and a system bus 521 that couples various system components including the system memory to the processing unit 520. The system bus 521 may be any of several types of bus structures including a memory bus or memory controller, a peripheral bus, and a local bus using any of a variety of bus architectures. By way of example, and without limitation, such architectures include Industry Standard Architecture (ISA) bus, MicroChannel Architecture (MCA) bus, Enhanced ISA (EISA) bus, Video Electronics Standards Association (VESA) local bus, and Peripheral Component Interconnect (PCI) bus, also known as Mezzanine bus.

[0063] Computer 510 typically includes a variety of computer readable media. Computer readable media may be any available media that can be accessed by computer 510, and includes both volatile and nonvolatile media, removable and non-removable media. By way of example, and not limitation, computer readable media may include computer storage media and communication media. Computer storage media includes volatile and nonvolatile, removable and non-removable media implemented in any method or technology for storage of information such as computer readable instructions, data structures, program modules, or other data. Computer storage media includes, but is not limited to, RAM, ROM, EEPROM, flash memory or other memory technology, CD-ROM, digital versatile disks (DVD) or other optical disk storage, magnetic cassettes, magnetic tapes, magnetic disk storage or other magnetic storage devices, or other media that can be used to store the desired information and that can be accessed by computer 510. Communication media typically embodies computer readable instructions, data structures, program modules or other data in a modulated data signal such as a carrier wave or other transport mechanism and includes any information delivery media. The term "modulated data signal" means a signal that has one or more of its characteristics set or changed in such a manner as to encode information in the signal. By way of example, and not limitation, communication media includes wired media such as a wired network or direct-wired connection, and wireless media such as acoustic, RF, infrared and other wireless media. Combinations of any of the above are also intended to be included within the scope of computer readable media.

[0064] The system memory 530 encompasses computer storage media in the form of volatile and / or nonvolatile memory such as read only memory (ROM) 531 and random access memory (RAM) 532. A basic input / output system 533 (BIOS), containing the basic routines that help to transfer information between elements within the computer 510, such as during start-up, is typically stored in ROM 531. RAM 532 typically contains data and / or program modules that are immediately available and / or presently being operated on by the processing unit 520. By way of example, and not limitation, FIG. 5 illustrates operating system 534, application programs 535, other program modules 536, and program data 537.

[0065] The computer 510 may also include other removable / non-removable, volatile / non-volatile computer storage media. By way of example only, FIG. 5 illustrates a hard disk drive 541 that reads from or writes to non-removable, non-volatile magnetic media, a flash drive 551 that reads from or writes to a removable, non-volatile memory 552, such as a flash memory, and an optical disk drive 555 that reads from or writes to a removable, non-volatile optical disk 556, such as a CD-ROM or other optical media. Other removable / non-removable, volatile / non-volatile computer storage media that may be used in the exemplary operating environment include, but are not limited to, magnetic tape cassettes, flash memory cards, digital versatile disks, digital video tape, solid state RAM, solid state ROM, and the like. The hard disk drive 541 is typically connected to the system bus 521 through a non-removable memory interface, such as interface 540, and the magnetic disk drive 551 and optical disk drive 555 are typically connected to the system bus 521 by a removable memory interface, such as interface 550.

[0066] The drives and their associated computer storage media, discussed above and illustrated in FIG. 5, provide storage of computer readable instructions, data structures, program modules, and other data for the computer 510. In FIG. 5, for example, hard disk drive 541 is illustrated as storing operating system 544, application programs 545, other program modules 546, and program data 547. Note that these components may be the same as or different from the operating system 534, application programs 535, other program modules 536, and program data 537. The operating system 544, application programs 545, other program modules 546, and program data 547 are numbered differently here to illustrate that, at a minimum, they are different copies. A user may enter commands and information into the computer 510 through input devices such as a keyboard 562 and pointing device 561, commonly referred to as a mouse, trackball, or touch pad. Other input devices (not shown) may include a microphone, joystick, game pad, satellite dish, scanner, or the like. These and other input devices are often connected to the processing unit 520 by a user input interface 560 coupled to the system bus, but may also be connected by other interface and bus structures, such as a parallel port, game port, or universal serial bus (USB). A monitor 591 or other type of display device is also connected to the system bus 521 via an interface, such as a video interface 590. In addition to a monitor, computers may also include other peripheral output devices such as speakers 597 and printer 596, which may be connected through an output peripheral interface 595.

[0067] The computer 510 can operate in a networked environment using logical connections to one or more remote computers, such as a remote computer 580. The remote computer 580 may be a personal computer, a server, a router, a network PC, a peer device, or other common network node, and typically includes many or all of the elements described above relative to the computer 510, although only a memory storage device 581 is illustrated in FIG. 5. The logical connections depicted in FIG. 5 include a local area network (LAN) 571 and a wide area network (WAN) 573, but may also include other networks. Such networking environments are commonplace in offices, enterprise-wide computer networks, intranets, and the Internet.

[0068] When used in a LAN networking environment, the computer 510 is connected to the LAN 571 through a network interface or adapter 570. When used in a WAN networking environment, the computer 510 typically includes a modem 572 or other means for establishing communications over the WAN 573, such as the Internet. The modem 572, which may be internal or external, may be connected to the system bus 521 via the user input interface 560 or other appropriate mechanism. In a networked environment, program modules depicted relative to the computer 510, or portions thereof, may be stored in a remote memory storage device. By way of example, and not limitation, FIG. 5 illustrates remote application programs 585 as residing on memory device 581. It will be appreciated that the network connections shown are exemplary and other means of establishing a communications link between the computers may be used.

[0069] Having thus described several aspects of at least one embodiment of this invention, it is to be appreciated that various alterations, modifications, and improvements will readily occur to those skilled in the art.

[0070] Such changes, modifications, and improvements are intended to be part of this disclosure, and are intended to be within the spirit and scope of the present invention. Furthermore, while advantages of the present invention are set forth, it is to be understood that not all embodiments of the technology described herein encompass all described advantages. Some embodiments may not implement any of the features described herein as advantageous, and in some cases, one or more of the described features may be implemented to obtain further embodiments. Thus, the above description and drawings are merely exemplary.

[0071] The above embodiments of the techniques described herein may be implemented in any of a number of ways. For example, these embodiments may be implemented using hardware, software, or a combination thereof. When implemented in software, the software code may be executed on any suitable processor or collection of processors, whether provided in a single computer or distributed among multiple computers. Such processors may be implemented as integrated circuits, with one or more processors in integrated circuit components, including commercially available integrated circuit components known in the industry by names such as CPU chips, GPU chips, microprocessors, microcontrollers, or coprocessors. Alternatively, the processors may be implemented in custom circuits, such as ASICs, or semi-custom circuits resulting from the configuration of programmable logic devices. As yet a further alternative, the processors may be part of a larger circuit or semiconductor device, whether commercially available, semi-custom, or custom. As a specific example, some commercially available microprocessors have multiple cores, such that one or a subset of the multiple cores may constitute a processor. However, the processors may be implemented using circuits of any suitable format.

[0072] Further, it should be understood that the computer may be embodied in any of a number of forms, such as a rack-mounted computer, a desktop computer, a laptop computer, or a tablet computer, etc. Additionally, the computer may be incorporated into devices not generally considered computers, but equipped with suitable processing capabilities, including a personal digital assistant (PDA), a smart phone, or any other suitable portable or fixed electronic device.

[0073] A computer may also have one or more input and output devices. These devices may be used, among other things, to present a user interface. Examples of output devices that may be used to provide a user interface include a printer or display screen for a visual representation of the output, and a speaker or other sound generating device for an audible representation of the output. Examples of input devices that may be used for a user interface include keyboards and pointing devices such as mice, touch pads, and digitizer tablets. As another example, a computer may receive input information by voice recognition or in other audible formats.

[0074] Such computers may be interconnected by one or more networks of any suitable form, including as a local area network or a wide area network, such as an enterprise network or the Internet. Such networks may be based on any suitable technology and operate according to any suitable protocol, and may include wireless networks, wired networks, or fiber optic networks.

[0075] Also, the various methods or processes outlined herein may be encoded as software executable for one or more processors using any one of a variety of operating systems or platforms. Additionally, such software may be written using any of a number of suitable programming languages ​​and / or programming or scripting tools, and compiled as executable machine code or intermediate code that runs on a framework or virtual machine.

[0076] In this regard, the present invention may be embodied as a computer-readable storage medium (or multiple computer-readable media) (e.g., a computer memory, one or more floppy disks, compact disks (CDs), optical disks, digital video disks (DVDs), magnetic tapes, flash memories, circuitry in field programmable gate arrays or other semiconductor devices, or other tangible computer storage media) encoded with one or more programs that, when executed on one or more computers or other processors, perform methods for implementing the various embodiments of the present invention as described above. As is evident from the above examples, a computer-readable storage medium may retain information for a sufficient time to provide computer-executable instructions in a non-transitory form. Such one or more computer-readable storage media may be portable such that the one or more programs stored thereon may be loaded into one or more different computers or other processors to implement the various aspects of the present invention as described above. In this specification, the term "computer-readable storage medium" covers only non-transitory computer-readable media that can be considered to be an article (i.e., an article of manufacture) or a machine. Alternatively or additionally, the invention may be embodied as a computer readable medium other than a computer readable storage medium, such as a propagating signal.

[0077] The terms "program" or "software," as used herein, are used generically to refer to any type of computer code or set of computer-executable instructions that can be used to program a computer or other processor to implement various aspects of the invention as described above. Additionally, in accordance with certain aspects of the present embodiments, it is to be understood that one or more computer programs that, when executed, perform the methods of the invention need not reside on a single computer or processor, but may be distributed in a modular manner among a number of different computers or processors to implement various aspects of the invention.

[0078] Computer-executable instructions may be in many forms, such as program modules, executed by one or more computers or other devices. Generally, program modules include routines, programs, objects, components, data structures, etc. that perform particular tasks or implement particular abstract data types. Typically the functionality of the program modules may be combined or distributed as desired in various embodiments.

[0079] Additionally, data structures may be stored in a computer-readable medium in any suitable form. For ease of illustration, data structures may be shown with fields related by location within the data structure. Such relationships may similarly be achieved by assigning locations within the computer-readable medium that convey the relationship between the fields to the storage of the fields. However, relationships between information in fields of a data structure may be established using any suitable mechanism, including through the use of pointers, tags, or other mechanisms that establish relationships between data elements.

[0080] Various aspects of the invention may be used alone, in combination, or in various arrangements not specifically set forth in the embodiments described above, and therefore are not limited in their application to the details and arrangements of components set forth in the above description or illustrated in the drawings. For example, aspects described in one embodiment may be combined in any manner with aspects described in other embodiments.

[0081] The invention may also be embodied as a method, of which an example is provided. The acts performed as part of the method may be sequenced in any suitable manner. Thus, embodiments may be constructed in which acts are performed in an order different from that shown (which may include performing some acts simultaneously, even though in the illustrative embodiment they are shown as sequential acts).

[0082] Additionally, some actions are described as being performed by a "user." It is to be understood that a "user" need not be a single individual, and that in some embodiments, actions attributed to a "user" may be performed by a team of individuals and / or an individual in combination with computer-assisted tools or other mechanisms.

[0083] The use of ordinal terms such as "first," "second," "third," etc. in the claims to modify claim elements does not, of itself, imply a priority, precedence, or ordering of one claim element over another, or the chronological order in which acts of a method are performed, but rather is used merely as a label to distinguish one claim element having a certain name from another element having the same name (except for the use of ordinal terms) that distinguishes between the claim elements.

[0084] Also, the phraseology and terminology used herein are for purposes of description and not of limitation. The use of "including," "comprising," "having," "containing," "involving," and variations thereof herein are meant to encompass the items listed thereafter and equivalents thereof, as well as additional items. [Explanation of symbols]

[0085] 100 Data Flow Graphs 102, 104, 106 Data Entry 108 Filter Components 110 Sort Component 112 Conversion Component 114 Filter Components 116 Connected Components 118 Replication Components 120 Combined Components 122, 124 Data Output 200 ways 201 Program 205 conversion engine 206 Predefined Grammars 208 Data Flow Graph 209 Dataflow graph transformation code 300 ways 301 Program 303 Glamour 305 Catalog 400 Programs Steps 401a, 401b, 401c, 401d 406, 408, 410, 412 Components 407, 409, 411 Flow 450 Data Flow Graph 451 conversion code 452 Output Record Format 462 Combined Keys 480 Glamour 481, 482 Data manipulation 500 Computing System Environment 510 Computer 520 Processing equipment 521 System Bus 530 System Memory 531 Read-Only Memory (ROM) 532 Random Access Memory (RAM) 533 Basic Input / Output System (BIOS) 534 Operating Systems 535 Application Program 536 Program Modules 537 Program Data 540 Interface 541 Hard Disk Drive 544 Operating Systems 545 Application Program 546 Program Modules 547 Program Data 550 Interface 551 Flash Drive 552 Removable, non-volatile memory 555 Optical Disk Drive 556 Removable, non-volatile optical disks 560 User Input Interface 561 Pointing Device 562 Keyboard 570 Adapter 571 Local Area Network (LAN) 572 Modem 573 Wide Area Network (WAN) 580 Remote Computer 581 Memory Storage Devices 590 Video Interface 591 Monitor 595 Output Peripheral Interface 596 Printer 597 Speaker

Claims

1. 1. A non-transitory computer readable medium comprising instructions that, when executed by at least one processor, perform a method of converting a program written in a first programming language into a data flow graph, the program including data operations and a control flow indicating a sequence of execution of the data operations, the method comprising: analyzing the program using the at least one processor and using a grammar stored by the non-transitory computer readable medium, where the grammar indicates how to interpret words and symbols in the program written in the first programming language, how to identify data operations in the program written in the first programming language as having functionality corresponding to particular types of data flow graph components, and how to construct data flow graph components that correspond to data operations in the program written in the first programming language; identifying a plurality of sequential steps of the program based on the grammar indicating how to identify data operations within the program, each step of the plurality of steps comprising one or more data operations of the program; generating a catalog preserving control flow relationships between steps of the plurality of identified steps of the program; for each of the identified steps of the program, identifying a plurality of data flow graph components, each corresponding to a respective step of the plurality of steps of the program, based on data operations of the step and based on the grammar indicating how to identify one of a plurality of data flow graph component types as corresponding to the step; constructing the plurality of data flow graph components based on corresponding steps of the plurality of steps of the program and based on the grammar indicating how to construct the plurality of data flow graph components, thereby creating a plurality of constructed data flow graph components; and analyzing the Using the at least one processor, the plurality of constructed data flow graph components; one or more flows representing a flow of data records between said one or more data flow graph components; generating a data flow graph comprising: the one or more data flow graph components are connected by the one or more flows in an order according to the generated catalog; Generating and A non-transitory computer readable medium comprising:

2. 10. The non-transitory computer readable medium of claim 1, wherein the program is a Statistical Analysis System (SAS) program.

3. 2. The non-transitory computer-readable medium of claim 1 , wherein analyzing the program further comprises identifying macros defined in the program, and configuring the plurality of dataflow graph components further comprises generating at least one parameter set based on the macro definitions.

4. 2. The non-transitory computer readable medium of claim 1 , wherein the program includes comments, and configuring the plurality of data flow graph components includes configuring at least some of the plurality of data flow graph components to include the comments.

5. The non-transitory computer-readable medium of claim 1 , wherein the generated dataflow graph includes first and second dataflow graph component groups configured to execute in parallel with each other.

6. the program includes one or more first groups of the plurality of data operations and one or more second groups of the plurality of data operations; the first group of data operations and the second group of data operations are independent of each other; the first group of dataflow graph components performing data operations on the first group; and The non-transitory computer-readable medium of claim 5 , wherein the second group of dataflow graph components performs the second group of data operations.

7. 2. The non-transitory computer-readable medium of claim 1 , wherein the program includes white space between symbols of the program, and configuring the plurality of data flow graph components maintains white space between portions of generated instructions that correspond to the symbols.

8. 2. The non-transitory computer-readable medium of claim 1, wherein analyzing the program further comprises identifying subroutines defined in the program, the method further comprising generating at least one subgraph based on the subroutine definitions.

9. 9. The non-transitory computer-readable medium of claim 8, wherein the subroutine is defined using one or more input values ​​whose values ​​modify the executable behavior of the subroutine, and the generated at least one sub-graph is generated using at least one sub-graph parameter that corresponds to the one or more input values ​​of the subroutine.

10. 2. The non-transitory computer readable medium of claim 1, wherein each step of the plurality of steps comprises a plurality of data operations of the program.

11. A computer-implemented method for automatically converting a program written in a first programming language into a data flow graph, the program including data operations and a control flow illustrating a sequence of execution of the data operations, the method comprising: analyzing the program using at least one processor and using a grammar stored by at least one computer readable medium, the grammar indicating how to interpret words and symbols in the program written in the first programming language, how to identify data operations in the program written in the first programming language as having functionality corresponding to particular types of data flow graph components, and how to construct data flow graph components corresponding to data operations in the program written in the first programming language; identifying a plurality of sequential steps of the program based on the grammar indicating how to identify data operations within the program, each step of the plurality of steps comprising one or more data operations of the program; generating a catalog preserving control flow relationships between steps of the plurality of identified steps of the program; for each of the identified steps of the program, identifying a plurality of data flow graph components, each corresponding to a respective step of the plurality of steps of the program, based on data operations of the step and based on the grammar indicating how to identify one of a plurality of data flow graph component types as corresponding to the step; constructing the plurality of data flow graph components based on corresponding steps of the plurality of steps of the program and based on the grammar indicating how to construct the plurality of data flow graph components, thereby creating a plurality of constructed data flow graph components; and analyzing the Using the at least one processor, the plurality of constructed data flow graph components; one or more flows representing a flow of data records between said one or more data flow graph components; generating a data flow graph comprising: the one or more data flow graph components are connected by the one or more flows in an order according to the generated catalog; Generating and 4. A computer-implemented method comprising:

12. The method of claim 11 , wherein the program is a Statistical Analysis System (SAS) program.

13. 12. The method of claim 11, wherein analyzing the program further comprises identifying macros defined in the program, and configuring the plurality of dataflow graph components further comprises generating at least one parameter set based on the macro definitions.

14. 12. The method of claim 11, wherein the program includes comments, and configuring the plurality of dataflow graph components includes configuring at least some of the plurality of dataflow graph components to include the comments.

15. The method of claim 11 , wherein the generated dataflow graph includes first and second groups of dataflow graph components configured to execute in parallel with each other.

16. the program includes one or more first groups of the plurality of data operations and one or more second groups of the plurality of data operations; the first group of data operations and the second group of data operations are independent of each other; the first group of dataflow graph components performing data operations on the first group; and The method of claim 15 , wherein the second group of dataflow graph components performs operations on the second group of data.

17. 12. The method of claim 11, wherein the program includes white space between symbols of the program, and configuring the plurality of dataflow graph components maintains white space between portions of generated instructions that correspond to the symbols.

18. 12. The method of claim 11, wherein analyzing the program further comprises identifying subroutines defined in the program, the method further comprising generating at least one subgraph based on the subroutine definitions.

19. 20. The method of claim 18, wherein the subroutine is defined with one or more input values ​​whose values ​​modify the executable behavior of the subroutine, and wherein the generated at least one sub-graph is generated with at least one sub-graph parameter corresponding to the one or more input values ​​of the subroutine.

20. 12. The method of claim 11, wherein each step of the plurality of steps comprises a plurality of data operations of the program.

21. A system for automatically converting a program written in a first programming language into a data flow graph, the program including data operations and a control flow illustrating a sequence of execution of the data operations, the system comprising: a means for analyzing the program using at least one processor and using a grammar stored by at least one computer readable medium, the grammar indicating how to interpret words and symbols in a program written in the first programming language, how to identify data operations in a program written in the first programming language as having functionality corresponding to a particular type of data flow graph component, and how to construct data flow graph components corresponding to data operations in a program written in the first programming language, the analyzing comprising: identifying a plurality of sequential steps of the program based on the grammar indicating how to identify data operations within the program, each step of the plurality of steps comprising one or more data operations of the program; generating a catalog preserving control flow relationships between steps of the plurality of identified steps of the program; for each of the identified steps of the program, identifying a plurality of data flow graph components, each corresponding to a respective step of the plurality of steps of the program, based on data operations of the step and based on the grammar indicating how to identify one of a plurality of data flow graph component types as corresponding to the step; constructing the plurality of data flow graph components based on corresponding steps of the plurality of steps of the program and based on the grammar indicating how to construct the plurality of data flow graph components, thereby creating a plurality of constructed data flow graph components; and A means for generating a data flow graph, the data flow graph comprising: the plurality of constructed data flow graph components; one or more flows representing a flow of data records between said one or more data flow graph components; Including, the one or more data flow graph components are connected by the one or more flows in an order according to the generated catalog; Means, Including, the system.

22. The non-transitory computer-readable medium of claim 1, wherein the catalog identifies the one or more data operations of the program corresponding to each step.

23. The method of claim 11, wherein the catalog identifies the one or more data operations of the program corresponding to each step.

24. The system of claim 21, wherein the catalog identifies the one or more data operations of the program corresponding to each step.

Citation Information

Patent Citations

  • Program conversion method

    JP1997006629A

  • Parallelizing application of script-driven tool

    JP2006236360A

  • source code conversion

    JP2017502385A

  • Program analysis method, program analysis device, and program analysis program

    WO2007096935A1