Abstract:
The apparatus used to develop software to operate a multiple element processor-based system, is comprised of an icon-based language that enables users to input data defining interrelationships among the subsystem elements. A data modeling apparatus is used to define a set of logical attributes and a set of physical attributes of said subsystem elements. The input data is then translated into a set of program instructions, using a sequential program language, representative of software to operate said processor-based system.

Description:
This application is a continuation, of application Ser. No. 08/153,265, filed Nov. 15, 1993 now abandoned, which is a continuation of application Ser. No. 07/517,840, filed May 2, 1990, now abandoned. 
    
    
     A portion of the disclosure of this patent document contains material which is subject to copyright protection. The copyright owner has no objection to the facsimile reproduction by anyone of the patent document or the patent disclosure, as it appears in the Patent and Trademark Office patent file or records, but otherwise reserves all copyright rights whatsoever. 
     FIELD OF THE INVENTION 
     This invention is a new and unique method which relates in general to the Computer Aided System Engineering (CASE) field. Specifically, this invention reveals breakthroughs in 1) information modeling, and 2) intermediate text language. 
     It should be noted that the specification is supplemented by a complete program listing of the corresponding specific program language (source code) in a Microfiche Appendix containing three hundred twenty-three (323) microfiche pages. 
     BACKGROUND OF THE INVENTION 
     In the CASE environment, automated systems production has traditionally been based on a methodology which examines the current physical process in order to determine new system requirements. Such automated systems production based on a process-oriented methodology often results in awkard key structures and access paths, highly unnormalized physical data structures, and programs that are burdened with navigating and updating those data structures. 
     When pre-defined data structures are available for process development, they are usually a physical data implementation, built to satisfy the data needs of one or more specific processes. These designs are also somewhat constrained by the idiosyncrasies of a particular access method. Also, they are typically based upon physical data implementations to which the system designers were exposed in the past. 
     Such constraints can unduly impact the design of screens, reports and other batch processing. Close ties between processes and physical data structures can make a system difficult to construct and maintain. Further disadvantages are excessively complex data structures and access paths which can result when performance issues are over-emphasized early in a development effort. 
     SUMMARY OF THE INVENTION 
     The present invention provides a number of advantages over the prior art, including, but not limited to, (1) an object-oriented approach toward the system design question of how programmers can best manipulate software design entities within the context of a machine workstation environment, and (2) breakthroughs resulting from the ability to formalize and express within the computer system new system building constructs which allow the systems designer and programmer to achieve a higher level of abstraction when creating computer systems. 
     The processing model employed by this invention creates a universal framework for code generation. The transaction processing model isolates the physical constraints from the logical application processing. The separation of a transaction (either online or batch) into the four-part model, display, syntax edit, reference edit, and processing, allows code to be generated to handle virtually all transaction-oriented processes. This four-part model creates a high-level contruct within which intermediate text language (ITL) can reside. 
     This invention includes a mechanism, developed through the use of data modeling constructs, to separate the logical design attributes of a computer system from the physical implementation of that computer system. Techniques developed herein enable system designers to concentrate on the logical aspect of computer systems. The mapping of that logical structure to the physical implementation is done automatically. This allows system designers to attain a new level of abstraction when designing computer systems. 
     The present invention&#39;s new universal unique icon based language can be used to formally describe any conventional computer system. The description of computing systems in intermediate text language (ITL) allows later translation into any other sequential computer language. This new level of abstraction afforded by ITL, coupled with its icon based editor, insures program correctness. The interactive ITL editor will not allow incorrect ITL to be entered. 
     Since ITL is algebraically provable, programs written in ITL cannot end abnormally. 
     The two constructs described below are unique to the present invention: 
     1. Information Modeling. 
     The Information Modeling aspect provides a means of placing system data entities in a single diagram and modeling the crucial elements of the target software system. The following can be accomplished: graphic relationships between the data entities can be displayed; relationships between systems, their underlying subsystems and processes can be created; relationships between files, records, screens, and reports can be created. Then the code for a selected process can be analyzed and generated (discussed under Intermediate Text Language). 
     This invention is an information model that is a well-defined structure, not just a collection of records. It provides enforced entity/relationship construction rules and offers the promise of assured data integrity via foreign key knowledge. This invention also functions as a springboard for expert systems which typically depend on the intelligence supplied by a well-defined data model. 
     This method of information modeling (IM) facilitates increased flexibility in the system engineering field. Since this invention offers a data-centered approach to systems design, future changes in processing requirements can be more readily incorporated. Processes are designed based upon the logical IM model, before or after the physical data structure has been solidified. Changes to the physical data structure do not require process re-specification. Changes to the contents of a system and conversion between data base management systems is facilitated by the logical-to-physical mapping. 
     Via a Data Dictionary means augmented by the IM model, data and relationships (context) are defined in the system. The fully keyed access paths defined by the logical Information Model, along with implied key derivation rules, provide the necessary information for all data storage and retrieval. As a result, automated mapping and scrolling of multiple occurring screen fields is made possible. The &#34;home&#34; data location attributed to each unique Data Table column facilitates the &#34;best record&#34; logic of Code Analyze. 
     By storing rules non-redundantly at the most general level (such as on the Data Table Column) duplication of specialized code at the procedural level is minimized. Reasonable process input/output sequencing is enforced by and validated against the logical IM model. Based on the defined entities and relationships of the information model, default screen and record layouts may be inferred and generated. In general, the additional rules and knowledge of a well-defined information model permit more powerful inferences and analysis, as well as faster and simpler user design interfaces. Less expertise is required of the system designer. 
     2. Intermediate Text Language. 
     When all external views of the system are complete, the analysis/code generation process is activated to make inferences and build the Intermediate Text Language (ITL) for each module. This ITL can then be used for conversion into other high level languages such as PL/I, COBOL, etc. Due to this invention&#39;s unique features, entire systems can be designed and generated, delaying the decision of which language to use until later in the development process. 
     Another key feature of this invention is the fact that the procedures generated are provably correct. Correctness of a procedure is defined to mean that execution of the procedure will terminate in some finite time with no fatal errors. 
    
    
     BRIEF DESCRIPTION OF THE DRAWINGS 
     The invention, together with further objects and advantages thereof, can best be understood by reference to the following specification, taken in connection with the accompanying drawings, in which: 
     FIG. 1 represents the hardware used to implement a preferred embodiment of the invention. 
    
    
     DETAILED DESCRIPTION OF THE PREFERRED EMBODIMENT 
     A preferred embodiment of the method of the present invention is implemented by utilizing a digital computer supported by a hardware platform with the following characteristics: 
     High resolution display to support graphical modeling tools 
     Windowing capabilities to allow concurrent access to multiple tools 
     Multi-tasking operating system to support interprocess communication among various tools 
     Local Area Network (LAN) for shared access to the repository and peripherals 
     Object server capability to share analysis, design and construction objects across all workstations 
     FIG. 1 illustrates a typical 6 workstation cluster hardware environment wherein systems engineers utilize Sun 3/60 workstations, a product of Sun Microsystems, Inc., Mountain View, Calif., containing a 32-bit, 68020 processor running at approximately 3 MIPS. The workstation contains 8 megabytes of RAM, expandable to 24 megabytes. Each workstation is a diskless node that depends on the central file server for disk storage. The screens are monochrome and provide the 1152×900 pixel resolution and optical mouse support required for sophisticated diagramming. The multi-tasking requirement is satisfied by Berkeley Standard UNIX 3.4; UNIX is a trademark of American Telephone and Telegraph Company. Windowing support is provided by Sun&#39;s SunView windowing environment; SunView is a trademark of Sun Microsystems, Inc., Mountain View, Calif. Each workstation is linked to the file server and laser printer via a local area network (LAN). 
     The file server contains its own 68020 processor with 8 megabytes of RAM and two 892 megabyte disk drives. A standard dumb terminal is used as the system console. A built-in tape drive provides the backup facility. The file server is connected to the development group via a 2400 baud modem. Typically, mainframe access is provided through a 9600 baud modem. No special environment is required to house the file server. 
     I. OVERVIEW OF PREFERRED EMBODIMENT 
     This invention makes a significant contribution to the field of Computer Aided Systems Engineering (CASE). This breakthrough concerns advancements in the areas of: 
     1. Logical Information Modeling 
     2. Physical Implementation 
     3. Intermediate Text Language 
     The disclosure which follows will describe each of these in detail below. 
     1. Logical Information Modeling 
     The systems engineer enters the basic data flows and file specifications desired. The systems engineer must then invoke the analysis/code Generation procedure. At the end of the Analysis/Code generation session, a message is displayed indicating whether any errors were detected. If errors are detected during the analysis phase, then code will not be generated. Disclosure of these error messages and their meaning reveals, by inference, the underlying rules of this invention&#39;s information modeling technique, and enables one skilled in the art to reproduce a similar system. 
     Due to the complexity of the invention, the description of the preferred embodiment is supplemented by a fully complemented copy of the rules and accompanying error messages which are built into Analyze in Appendix I. 
     2. Physical Implementation 
     An integral part of this invention&#39;s information modeling technique concerns the efficient processing of transactions. The following describes the function and usage of the On-line Scheduling code that is generated into target programs. This unique code is responsible for controlling the processing of all on-line transactions which are generated by this invention&#39;s development environment. 
     This On-Line Scheduling code operates in basically two modes: 1) NEXT mode and 2) DATA. Depending on the current mode, the On-Line Scheduling code will take either a path which leads to an application displayer being called to format a screen or an application reference editor and processor being called to take some update action based on the data contained on the screen. 
     Current Status From Terminal Record. 
     The On-Line Scheduler determines the mode it is in each time it receives control from the telecommunication monitor. This information and other control information is stored in the On-Line Scheduler Terminal file. Each terminal which signs on the On-Line Scheduler must have an entry in the Terminal file. If the system uses terminal security, then the entry must exist prior to signing on the On-Line Scheduler; if not, then the On-Line Scheduler will create the entry in the Terminal file whenever the user signs on for the first time. 
     1. Process When Mode Is NEXT. 
     Taking the modes individually, in NEXT mode, the On-Line Scheduler interrogates the current command line, and the current program function keys (if any is active) to determine the &#34;next&#34; function to activate. 
     a. Determine the Next Function. 
     Certain of the program function keys result in immediate switching to another function, others depend on the current mode. In next mode, any function key will result in immediate switching. 
     b. Check Against The Menu Lists 
     Once the On-Line Scheduler has determined the next function to execute, the function is checked against the menu lists loaded by the scheduler. These lists include both the On-Line Scheduler system menu list and the application menu list. If the function is found in either of these lists a link to the program associated with the function is performed. This link returns the address of the application&#39;s Transaction Specification Block (TSB). 
     c. Set Up the Screen Defaults. 
     The Scheduler uses the information in the TSB to set up a screen area with all the default screen attributes (highlighting, protection, dark, etc.) which have been defined for the screen in this invention. It uses the file information in the TSB to set up the On-Line Scheduler File Array. 
     d. Link to the Displayer. 
     The Scheduler links to the displayer requesting that the displayer use the command line and format the screen. If the displayer is satisfied that the information on the command line is correct and completes the screen, the Scheduler sends the screen back to the terminal, changes to DATA mode, saves the current information on a terminal record, and, returns control to the telecommunication monitor. 
     2. Process When Mode is Data. 
     In DATA mode, the On-Line Scheduler assumes a logical process in which each step must be completed prior to the next step being started and if any of the steps fails, an error message is sent to the current screen. Prior to taking those steps, the Scheduler links to the displayer to get the TSB, help pointers, and the names of the application programs to be used by this function. 
     a. Link to the Syntax Editor. 
     The first step in the process is the syntax edit step. The syntax editor, usually the one provided by the On-Line Scheduler is linked and passed the address of the screen. The job of a syntax editor is to verify that all the fields on the screen pass the minimum set of edits, such as numeric, alpha, table verification, etc. If any of the edits fail, the syntax editor passes an error return and error message to the Scheduler. The Scheduler in turn sends the screen back to the terminal and saves the current information in the terminal record without changing modes. 
     b. Link to Reference Editor. 
     The second step in the process is the reference edit step. The application reference editor, if one has been generated or written, is linked and passed the address of the current screen. The job of a reference editor is to verify relationships between and among any records involved in processing the function. Edits it might perform are: 1) verify that a record to be inserted does not already exist and 2) verify that a record to be updated still exists. If any of the edits fail, the reference editor passes an error return and error message to the Scheduler. The Scheduler then sends the screen back to the terminal and saves the current information in the terminal record without changing modes. 
     c. Link to the Processor. 
     The third step in the process is the processor step. The application processor, either generated or handwritten, is linked and passed the address of the current screen. The job of the processor is to carry out any required updates as indicated by the function. If any of these updates fail, the processor passes back an error return. The scheduler assuming that any error from the processor is fatal, then forces an abnormal end and sends a broadcast message to the terminal. 
     d. Determine Path After Process. 
     If all the steps are completed error free, the Scheduler has two options, depending on the confirmation indicator in the TSB. 
     e. Confirmation to Screen Request. 
     If confirmation is requested for this function, the Scheduler sends a &#34;transaction completed&#34; message to the terminal, changes the mode to &#34;next,&#34; saves the current information in the terminal record and returns to the telecommunications monitor. 
     f. NEXT Process Again 
     If confirmation is not requested for this function, the Scheduler changes the mode to &#34;next,&#34; and goes down the NEXT path as outlined above. 
     g. Menu List Processing 
     The basis for determining if a function is authorized in an On-Line Scheduler environment is if the function appears in one of the menu lists which the On-Line Scheduler loads when it starts for the first time in the online session. 
     There are always two menu lists for each On-Line Scheduler environment, namely: a list of all the On-Line Scheduler generated functions, and a list of the application functions, also generated from an On-Line Scheduler environment. 
     A menu list provides the hierarchy of functions (determined by the System Component connections of the invention), the action modes for each function, the name of the function displayer module and a flag to indicate whether the function is to be displayed on the menu. 
     In addition to the proper separation of logical and physical components, this invention facilitates their active integration. The unique logical-to-physical mapping scheme within this invention permits the inferential power of a fully normalized entity/relationship model to be actively utilized by various physical implementations. Since physical system design is based directly upon the logical model, the capability for reasonable default layouts is provided. The unique &#34;clicking&#34; interface along Data Table paths permits lucid and unambiguous input/output sequencing for the various physical design formats. 
     3. Intermediate Text Language 
     When all external views of the system are complete, the analysis/code generation process is activated to make inferences and build the intermediate text language (ITL) for each module. To further enable one skilled in the art to reproduce a similar system, the description of the preferred embodiment is supplemented by a complete listing in Backus-Naur Form (BNF) of the syntactic and semantic definition grammar used in the translation from the iconic specification to the textual language in Appendix II. 
     By using the structured code expert system, this provably-correct ITL code can be viewed and modified with icons that represent the intermediate text language constructs. The ITL can then be translated into a mainframe language. Due to a unique feature of this ITL, entire systems can be designed and generated, delaying the decision of which language to use until mainframe translation. Since the ITL translates into systems that can execute under various operating systems, the on-line monitor decision can be delayed until ITL translation time. This unique feature enables systems developers to develop and test using one on-line monitor, while the production system uses another. 
     One key unique feature is that the procedures generated by this invention are correct. Correctness of a procedure is defined to mean that execution of the procedure will terminate (in some finite time) and that there are no ABENDs. The idea of terminableness is straightforward, though it should be noted that a finite time could be a very long time. The following section further explains the concept of no ABENDs. 
     A realization of an abstract or blue-sky procedure is built out of real world components. The real world component does not always match the abstract component because of either a fuzziness in the abstract component, or because of limitations in the real world component. Real world components often have meaning such that if a specific event occurs during execution of the component, then control is transferred to the end of the program. This meaning is normally not included in the intended meaning in the abstract model. The result is a program that has many paths from many components going to the end of the program that are not part of the meaning of the abstract program. These paths are static in the sense that they exist in a program whether the program is run or not. These can be called static paths. Similarly, dynamic paths are those that are actually executed. It is possible for a realization of an abstract procedure to have the same meaning (always gets the same results) as the abstract procedure even though the realization has extra static paths. This occurs when the two have the same dynamic paths. In other words, it is acceptable to have static ABEND paths if they are never taken. To make sure that there are no unintended dynamic paths to the end of a procedure (i.e. that it has no ABENDs), one of two approaches can be taken: change the real world components so that the realization has no static ABEND paths, or show that, despite the extra static paths, there are no extra dynamic paths. 
     Showing terminableness also can be done one of two ways. The first is to ensure that all structures and components used in the realization will terminate. In this invention, each instance of a structure or component terminates through a single exit path. The second is to allow more freedom but show that, though some structures may not always terminate, in the current use they do. 
     Procedures generated by the invented system can be viewed on two levels. On one level, these procedures are high level programs in a data base environment. On another level, these procedures are definitions in an intermediate language called ITL. Unlike that of high level languages, the definition of ITL is under control of the development team. It is the interface between this design system and the high level code generation. ITL has only an &#34;intuitive&#34; semantics and a fuzzy boundary between it and the design data base. 
     Defining the semantics of ITL has some secondary benefits. It establishes a single portable language, even though target languages, such as C, COBOL, or PL/I, might have different meanings for addition, etc. Thus, the invention on the design side of the interface does not need to know about how ITL is coded in different languages. Also, writing down the exact meaning of ITL components and structures can be an aid to those that use the interface such as those who write the target language generators. 
     The ITL employs a traditional &#34;f(x,y)&#34; style of functional notation almost exclusively to make it readable by a wide range of readers. It uses an abstract syntax instead of a concrete one that Backus-Naur Form (BNF) would provide, because it is easier to associate with the semantics and because there seems to be no text realization of ITL to require a concrete textual syntax. 
     The following is a demonstration as to why procedures defined by the appended definition always terminate and never ABEND: 
     ITL procedures never ABEND. Every procedure is a statement. All statements and other program components are either defined to no ABEND or are defined to not ABEND if their components don&#39;t. By induction, ITL procedures never ABEND. 
     Finite ITL procedures always terminate. Every procedure is a statement. Each procedure either has a non-recursive definition and thus terminates, or is a FOR or a SELECT. Only a finite number of WHEN&#39;s are allowed for SELECT, so it terminates. In the iterative part of the FOR statement, since the step value is non-zero and numbers are bounded in ITL, then for every starting number and an increment there is a last number. FOR terminates. By induction, ITL procedures terminate. 
     ITL definition method. 
     The following may help in the reading of the 1TL definition provided later herein. 
     The meaning of many kinds of programs can be thought of as a function from a world state just before execution of the program to a world state just after execution. The ITL definition uses the traditional but somewhat naive interpretation of world state as the set of pairs associating variables with values. Limiting this view of the world to the values of program variables is satisfactory for our goals. Every statement in ITL is hence viewed as a function from the state of the variables to another state of the variables and a function of the form. 
     
         execute(Environment, state, Statement) 
    
     is defined for each syntactic type of statement. Thus, in the definition, &#34;execute&#34; is defined many times. The result of this function is, of course, a state. 
     The Environment mentioned as a parameter in the function &#34;execute&#34; accounts static declarative information, such as whether a variable is numerical and so on. 
     For expressions, a similar function is defined, except that it must also return a value. It is of the form 
     
         evaluate(Environment, state, Expression) 
    
     and returns a pair consisting of the resulting value of the expression and a new state. In the definition, this pair is often written as &lt;v,s&gt; where v is the value and s is the state. Some statements include more than one expression. You can see the order of execution of the expressions by noting which output states are whose input states in the definition of the statement. 
     As an example of how the function evaluate is defined for each expression, examine the wordy version of the definition of ADDITION EXPRESSION below. It essentially describes what X+Y means. 
     ADDITION EXPRESSION 
     Syntactic Components 
     First Operand: Numerical expression. 
     Second Operand: Numerical expression. 
     Semantics 
     Where 
     s is the state before execution, 
     a is the instance of ADDITION EXPRESSION to be executed 
     v1 and s1 are the value and state resulting from the evaluation of the first operand with the starting state s, 
     v2 and s2 are the value and state resulting from the evaluation of the second operand with the starting state s1; 
     the result of evaluating a is 
     (1) a value which is the sum of v1 and v2 coerced to the intermediate accuracy for numerical values, if the sum is within upper and lower limits for intermediate numerical values, 0 otherwise; and 
     (2) a state which is s2 if the sum is within upper and lower limits for intermediate numerical values, but otherwise is s2 modified so that the (new) value of the error message text is whatever the standard arithmetic error message is and no other values are changed. 
     The second operand evaluation is dependent on the resultant state of the first operand&#39;s evaluation, which illustrates from a procedural viewpoint, that the first expression is evaluated first. 
     Concerning the overflow behavior of evaluating an addition expression, no abnormal control path is available to be taken. A numerical value is always returned. Addition in ITL is still a binary function but not the one in mathematics. Other options could have been to use the upper or lower limits as values instead of 0 at overflow, to add a special overflow symbol to numerical values, or to not bother to set the error message variable. The important thing is that something reasonable happens and things continue. No ABENDs. 
     Other arithmetic operators have similar definitions. As an example of the way arithmetic in ITL could be compiled in a high level language, such as PL/I, consider the following ITL program (shown in abstract syntactic form) for converting degrees Centigrade to degrees Fahrenheit (F=(9/5)C+32): 
     
         ______________________________________Assignment StatementPlace: FExpression:Addition ExpressionFirst operand:   Multiplication Expression     First Operand:       Division Expression         First Operand: 9         Second Operand: 5     Second Operand: CSecond Operand: 32______________________________________ 
    
     In this example, C and F correspond to ids in the ITL definition which are not defined there. The environment &#34;knows&#34; the total number of digits and the number of digits to the right of the decimal place for C and F. Regardless of the representation in the environment, after translation to PL/I they are assumed to have been declared as follows: 
     
         DECLARE C FIXED DECIMAL (3,1); 
    
     
         DECLARE F FIXED DECIMAL (4,1); 
    
     Then, the following PL/I code could be generated for the ITL program segment above: 
     
         ______________________________________DECLARE OVF.sub.-- FLAG FIXED BINARY (1);MATH.sub.-- ERROR = `Arithmetic resulted in too big of  a number; zero is used.`;. . .ON FIXEDOVERFLOW DO OVF.sub.-- FLAG = 1;ON SIZE DO OVF.sub.-- FLAG = 1;ON ZERODIVIDE DO OVF.sub.-- FLAG = 1;. . .OVF.sub.-- FLAG = 0;(SIZE): F = ADD(MULTIPLY(DIVIDE(9,5,15,5)C,15,5),32,15,5);IF OVF.sub.-- FLAG = 1 THEN DO;F = 000.0;TCCR.sub.-- MSG.sub.-- TEXT = MATH.sub.-- ERROR;END;. . .______________________________________ 
    
     Note that all of the arithmetic is done in FIXED(15,5) and the result will be converted to FIXED(4,1) for assignment to F. Also note that in general, both SIZE and FIXEDOVERFLOW conditions may be raised during an assignment statement involving arithmetic, so code to handle that possibility is included. Hence, this code is the obvious translation of the ITL code based on the semantics of assignments and expressions. 
     Of course, the ITL program could have been transformed into code that is potentially more efficient by taking advantage of the properties of the particular ITL code being translated. For instance, consider ##EQU1## 
     This code always has exactly the same effect on the state as the longer PL/I code above. To see that this is true, let us step through the execution of this assignment statement: 
     1. The constant 1.8 is FIXED(2,1). In the first program, the division of 9 by 5 would have resulted in the same value, but in FIXED(15,5). 
     2. Since C is FIXED(3,1), the PL/I rule for precision in the case of fixed-point multiplication implies that the result of 1.8*C will be FIXED(6,2). Clearly, the result will be no larger than 180. In the first program, the exact same value would be computed, but in FIXED(15,5). 
     3. Since the constant 32 is FIXED(2,0), the PL/I rule for precision in the case of fixed-point addition implies that the result of 1.8*C+32 will be FIXED(7,2). Clearly, the result will be no larger than 212. In the first program, the exact same value would be computed, but in FIXED(15,5). 
     4. Finally, the result, which is FIXED(7,2), will be converted to FIXED(4,1) and stored in F. But this is exactly the same as what would happen in the first program, where the same value in FIXED(15,5) is converted to FIXED(4,1). Since this value is no larger than 212 there will be no SIZE condition raised. In fact, in each of the previous steps, neither program has the potential for a value that exceeds the space allocated for it. So, no SIZE or FIXEDOVERFLOW condition will be raised in either program. Hence, the code dealing with these conditions is not needed. 
     Note that the following is not an acceptable translation: ##EQU2## 
     The constants 9 and 5 are both FIXED(1,0). According to the PL/I rule for fixed-point division, the result of 9/5 will have precision (15,14). Since C is FIXED(3,1), the result of 9/5*C is FIXED(15,15). For some values of C, such as 1.0, this computation will produce a result which does not fit into a FIXED(15,15). So, this code could result in an ABEND which is not only contrary to the semantics of the original ITL code, but a disaster in terms of the goals of this invention. 
     ITL DEFINITION 
     The Environment consists of whatever declarative information is needed to precisely define the meaning of an ITL procedure. It includes references to much of the invention&#39;s design data base plus local declarations made with CREATE. Program variables are referenced by what is called an id in this document. Functions of the form f(E,id) are used to extract information from the environment about that id. Some of these functions might be is-a-numerical-variable(E,id), or number-of-digits(E,id). The structure of the environment and that of the id are not defined. (Perhaps an id is a data element reference paired with a dupe number.) 
     The state is a set of pairs consisting of an id (representing a program variable) and its value. Primitive functions that operate on a state are: 
     initial-state(E) which creates the initial state with valid values for each program variable, 
     value(s,p) which gets the value for that place (see definition below), 
     update(s,p,v) which returns a new state which is like the old one except that value v is now at place p, 
     install(s,id,v) which returns a new state which has the pair &lt;id,v&gt; added to s, and 
     remove(s,id) which returns a new state which is the same as s except the pair for the id is removed. 
     The important state functions are value(s,p), and update(s,p,v). 
     A place is either the id of a numerical program variable or a triple consisting of a string program variable and start and end positions. Note that it is possible for only part of a variable to be changed in an update. 
     All definitions are defined functionally. The &#34;Where&#34; notation is designed to make function definitions readable and should not be interpreted procedurally. The functions if, or, and and are used in their sense. That is, if is a selector function. 
     ITLCODE 
     Syntactic Components 
     Environment: 
     Procedure: Statement. 
     Semantics 
     Where 
     I is an instance of it1 code, 
     E=environment(I), 
     s=initial-state(E), 
     meaning(I)=execute(E,s,procedure(I)). 
     Note 
     Defining the meaning of a program as its final state is of course not exactly right, but is suitable for the purpose of the ITL definition. Defining it as the sequence of calls to &#34;secondary functions&#34; is better, but one that defines changes to the data base would be better yet but must be done on a larger scope. 
     STATEMENT 
     A Statement is either a compound statement, an error-message statement, an assignment statement, an if statement, a for statement, a &#34;secondary function&#34; statement, a select statement, or a create statement. 
     COMPOUND STATEMENT 
     Syntactic Components 
     First Statement: Statement. 
     Second Statement: Statement. 
     Semantics 
     Where 
     E is the environment, 
     s is the state before execution, 
     C is an instance of compound statement, 
     s1 execute(E,s,first-statement(C)), 
     s2 execute(E,s1,second-statement(C)), 
     execute(E,s,C)=s2. 
     ERROR-MESSAGE STATEMENT 
     Syntactic Components 
     Message: String expression. 
     Semantics 
     Where 
     E is the environment, 
     s is the state before execution, 
     M is an instance of error-message statement, 
     &lt;v,s1&gt; evaluate(E,s,message(M)), 
     execute(E,s,M)=update(s1,error-message,v). 
     ASSIGNMENT STATEMENT 
     An assignment statement is either 
     a numerical assignment statement, or 
     a string assignment statement. 
     IF STATEMENT 
     Syntactic Components 
     Condition: Boolean expression. 
     First statement: Statement. 
     Second statement: Statement. 
     Semantics 
     Where 
     E is the environment, 
     s is the state before execution, 
     I is an instance of if statement, 
     &lt;v,s1&gt;=evaluate(E,s,condition(l)), 
     s2=execute(E,s1,first-statement(I)), 
     s3=execute(E,s1,second-statement(I)), 
     execute(E,s,I)=if(is-true(v),s2,s3). 
     FOR STATEMENT 
     Syntactic Components 
     Loop index: Id. 
     Start value: Numerical expression. 
     End value: Numerical expression. 
     Increment value: Numerical expression. 
     Body: Statement. 
     Semantics 
     Where 
     
         ______________________________________E is the environment,s is the state before execution,F is an instance of for statement,&lt;vs,s1&gt; = evaluate (E,s,start-value(F))&lt;ve,s2&gt;= evaluate(E,s1,end-value(F)),&lt;vi,s3&gt;= evaluate(E,s2,increment-value(F))new-loop-var(E,1,v) creates a new environment suchthat value(E,1) = v, and is-a-loop-var(E,1) =true,iterate(v,sv) ifor( and(v≦ve,vi&gt;0) and(v&gt;ve,vi&lt;0))`iterate(v+vi,executenew-loop-var(E,loop-index(F),v),sv,body(F)),sv);execute(E,s,F) if(vi=0, s3, iterate(vsvs3))______________________________________ 
    
     Note 
     Consider the loop index as a lexically scoped named constant. The body is executed with different values for that constant. 
     SECONDARY FUNCTION STATEMENT 
     A secondary function statement can be one of several. A dummy is described below as an aid in the writing of definitions. It can also be used as an indefinite place holder, if no secondary functions are defined. Some amount of vagueness is acceptable. 
     DUMMY SECONDARY FUNCTION 
     
         ______________________________________   Syntactic Components______________________________________   Alice: Numerical expression.   Betty: String expression.   Carla: Numerical place.   . . .   Zelda: String place.______________________________________ 
    
     Semantics 
     Places and values are evaluated A to Z resulting in a new state. Execute(E,s,F) is a new state based on that one with possibly the above places changed. 
     SELECT STATEMENT 
     Syntactic Components 
     Selector: Numerical expression. 
     When list: List of When clauses, 
     where a When clause has syntactic components 
     Literal value: Literal numerical value, 
     Clause body: Statement, 
     Otherwise clause: Statement. 
     Semantics 
     Where 
     
         ______________________________________E is the environment,s is the state before execution,S is an instance of select statement,&lt;v,s1&gt; = evaluate(E,s,selector(S)),select(w) = if(empty(w),execute(E,s1,otherwise-clause(S)),if(v = literal-value(first(w)),execute(E,s1,clause-body(w)),select(rest(w))));execute(E,s,S) = select when-list(S)).______________________________________ 
    
     CREATE STATEMENT 
     Syntactic Components 
     Create Specification: 
     Create body: Statement. 
     Semantics 
     Where 
     E is the environment, 
     s is the state before execution, 
     C is an instance of create statement, 
     i is the new id created from E, and create-specification(C), 
     E1 is the new environment created from E, and create-specification(C), 
     v is the initial value for i created front E, and create-specification(C), 
     s1=install(s,i,v), 
     s2=execute(E1,s1,create-body(C)), 
     s3=remove(s2,i); 
     execute(E,s,C)=s3. 
     Note 
     This is a lexically scoped general purpose variable declaring mechanism much like let in lisp. 
     Numerical Expression and Assignment 
     Every numerical value in ITL has a decimal point. Accuracy in intermediate calculations is to 5 places to the right of the decimal point. A parameter of numerical variables is the accuracy which may be from 0 to 5 places to the right of the decimal point. Intermediate calculations are constrained by the limit of ±9,999,999,999.99999. Parameters of numerical variables include the minimum and maximum values allowed to be stored in that program variable. Functions over the Environment and the id representing the variable represent the way the ITL definition &#34;knows&#34; about the parameters. 
     NUMERICAL ASSIGNMENT STATEMENT 
     Syntactic Components 
     Lefthand side: Numerical place. 
     Righthand side: Numerical expression. 
     Semantics 
     Where 
     E is the environment, 
     s is the state before execution, 
     A is an instance of numerical assignment statement, 
     &lt;p,s1&gt;=place(E,s,left-hand-side(A)), 
     &lt;v,s2&gt;=evaluate(E,s1,right-hand-side(A)), 
     d1=most-pos-number(E,p), 
     d2=most-neg-number(E,p), 
     v1=limited-to-accuracy(accuracy(E,p),v), 
     s3=update(s2,p,v1), 
     s4=update(update(s2,p,0), error-message, &#34;Arithmetic resulted in too big of a number; zero is used.&#34;, 
     execute (E,s,A)=if(d2≦v1≦d1,s3,s4). 
     NUMERICAL PLACE 
     A numerical place is a numerical program variable. 
     NUMERICAL EXPRESSION 
     A numerical expression is either an addition expression, a subtraction expression, a multiplication expression, a division expression, a negation expression, or an atomic expression. 
     ADDITION EXPRESSION 
     Syntactic Components 
     First Operand: Numerical expression. 
     Second Operand: Numerical expression. 
     Semantics 
     Where 
     
         ______________________________________E is the environment,s is the state before evaluation,N is an instance of addition expression,&lt;v1,s1&gt;= evaluate(E,s,first-operand(N)),&lt;v2,s2 &gt;= evaluate(E,s1,second-operand(N)),v = coerce-to-intermediate-accuracy(v1+v2),evaluate(E,s,N) = if(within-intermediate-range(v),&lt;v,s2&gt;,&lt;0,update(s2,error-message, &#34;Arithmetic resultedin too big of a number; zero is used.&#34;)&gt;).______________________________________ 
    
     SUBTRACTION EXPRESSION 
     Syntactic Components 
     First Operand: Numerical expression. 
     Second Operand: Numerical expression. 
     Semantics 
     Where 
     
         ______________________________________E is the environment,s is the state before evaluation,N is an instance of subtraetion expression,&lt;v1,s1&gt;= evaluate(E,s,first-operand(N)),&lt;v2,s2&gt;= evaluate(E,s1,second-operand(N)),v = coerce-to-intermediate-accuracy(v1-v2)evaluate(E,s,N) if(within-intermediate-range(v),&lt;V,s2&gt;,&lt;0,update(s2,error-message, &#34;Arithmetic resultedin too big of a number; zero is used.&#34;)&gt;).______________________________________ 
    
     MULTIPLICATION EXPRESSION 
     Syntactic Components 
     First Operand: Numerical expression. 
     Second Operand: Numerical expression. 
     Semantics 
     Where 
     
         ______________________________________E is the environment,s is the state before evaluation,N is an instance of multiplication expression,&lt;v1,s1&gt;= evaluate(E,s,first-operand(N))&lt;v2,s2&gt;= evaluate(E,s1,second-operand(N))v = coerce-to-intermediate-accuracy(v1*v2)evaluate(E,s,N) if(within intermediate-range(v),&lt;v,s2&gt;&lt;0,update(s2,error-message, &#34;Arithmetic resultedin too big of a number; zero is used.&#34;)&gt;).______________________________________ 
    
     DIVISION EXPRESSION 
     Syntactic Components 
     First Operand: Numerical expression. 
     Second Operand: Numerical expression. 
     Semantics 
     Where 
     
         ______________________________________E is the environment,s is the state before evaluation,N is an instance of division expression,&lt;v1,s1&gt;= evaluate(E,s,first-operand(N)),&lt;v2,s2&gt;= evaluate(E,s,1,second-operand(N)),v = if(v2 = 00,coerce-to-intermediate-accuracy(v1/v2);evaluate(E,s,N) if(and(within-intermediate-range(v),v2,&lt;&gt;0),&lt;v,s2&gt;,&lt;0,update(s2,error-message, &#34;Arithmetic resultedin too big of a number; zero is used.&#34;)&gt;).______________________________________ 
    
     NEGATION EXPRESSION 
     Syntactic Components 
     Operand: Numerical expression. 
     Semantics 
     Where 
     E is the environment, 
     s is the state before evaluation, 
     N is an instance of negation expression, 
     &lt;v,s1&gt;evaluate(E,s,operand(N)), 
     evaluate(E,s,N)&lt;-v,s1&gt; 
     ATOMIC EXPRESSION 
     An atomic expression is either 
     a numerical variable, 
     a loop index, or 
     a literal numerical value. 
     NUMERICAL VARIABLE 
     Syntactic Components 
     Variable: id. 
     Semantics 
     Where 
     E is the environment, 
     s is the state before evaluation, 
     N is an instance of numerical variable, 
     evaluate(E,s,N)&lt;value(s,variable(N)),s&gt;, and 
     place(E,s,variable(N))=variable(N). 
     LOOP INDEX 
     Syntactic Components 
     Loop index: Id. 
     Semantics 
     Where 
     E is the environment, 
     s is the state before evaluation, 
     N is an instance of loop index, 
     evaluate(E,s,N)=&lt;value(E,loop-index(N)),s&gt;. 
     LITERAL NUMERICAL VALUE 
     Syntactic Components 
     Literal value: Numeric constant. 
     Semantics 
     Where 
     E is the environment, 
     s is the state before evaluation, 
     N is an instance of literal numerical value, 
     evaluate(E,s,N)=&lt;literal-value(N),s&gt;. 
     Note 
     The syntactic numeral is coerced to a mathematical number. 
     Boolean Expression 
     BOOLEAN EXPRESSION 
     A Boolean expression is either 
     a conjunction expression, 
     a disjunction expression, 
     a Boolean negation expression, or 
     an atomic Boolean expression. 
     CONJUNCTION EXPRESSION 
     Syntactic Components 
     First Operand: Boolean expression. 
     Second Operand: Boolean expression. 
     Semantics 
     Where 
     E is the environment, 
     s is the state before evaluation, 
     B is an instance of conjunction expression, 
     &lt;v1,s1&gt;=evaluate(E,s,first-operand(B)), 
     &lt;v2,s2&gt;=evaluate(E,s1,second-operand(B)), 
     evaluate(E,s,B)=&lt;and(v1,v2),s2&gt; 
     DISJUNCTION EXPRESSION 
     Syntactic Components 
     First Operand: Boolean expression. 
     Second Operand: Boolean expression. 
     Semantics 
     Where 
     E is the environment, 
     s is the state before evaluation, 
     B is an instance of disjunction expression, 
     &lt;v1,s1&gt;=evaluate(E,s,first-operand(B)), 
     &lt;v2,s2&gt;=evaluate(E,s1,second-operation(B)), 
     evaluate(E,s,B)=&lt;or(v1,v2),s2&gt;. 
     BOOLEAN NEGATION EXPRESSION 
     Syntactic Components 
     First Operand: Boolean expression. 
     Semantics 
     Where 
     E is the environment, 
     s is the state before evaluation, 
     B is an instance of Boolean negation expression, 
     &lt;v,s1&gt;=evaluate(E,s,first-operand(B)), 
     evaluate(E,s,B)=&lt;not(v),s1&gt;. 
     ATOMIC BOOLEAN EXPRESSION 
     An atomic Boolean expression is either 
     a numeric comparison, 
     a string equality comparison, 
     a Boolean literal value expression. 
     NUMERIC COMPARISON 
     A numeric comparison is either 
     numeric =, 
     numeric &lt;, 
     numeric &gt;, 
     numeric &lt; or =, 
     numeric &gt; or =. 
     Only one is defined below. The rest are similar. 
     NUMERIC 
     Syntactic Components 
     First Operand: Numerical expression. 
     Second Operand: Numerical expression. 
     Semantics 
     Where 
     E is the environment, 
     s is the state before evaluation, 
     B is an instance of numeric comparison, 
     &lt;v1,s1&gt;=evaluate(E,s,first-operand(B)), 
     &lt;v2,s2&gt;=evaluate(E,s1,second-operand(B)), 
     evaluate(E,s,N)=&lt;v1=v2,s2&gt;. 
     STRING EQUALITY COMPARISON 
     Syntactic Comnonents 
     First Operand: String expression. 
     Second Operand: String expression. 
     Semantics 
     Where 
     E is the environment, 
     s is the state before evaluation, 
     B is an instance of string comparison, 
     &lt;v1,s1&gt;=evaluate(E,s,first-operand(B)), 
     &lt;v2,s2&gt;=evaluate(E,s1,second-operand(B)) 
     evaluate(E,s,N)=&lt;v1=v2,s2&gt;. 
     BOOLEAN LITERAL VALUE EXPRESSION 
     Syntactic Components 
     Literal value: Boolean constant (true or false). 
     Semantics 
     Where 
     E is the environment, 
     s is the state before evaluation, 
     B is an instance of loop index expression, 
     evaluate (E,s,B)&lt;literal-value(B),s&gt;. 
     String Expressions and Assignment 
     String values are a sequence of 0 to 4000 characters. String program variables are assigned a fixed length from 1 to 4000. The function string-adjust(1,v) adjusts the string v to length 1 by either padding with blanks or dropping off the righthand characters. Note that string expressions use string-adjust(4000,v), effectively making the suing accumulator 4000 characters long. 
     STRING ASSIGNMENT STATEMENT 
     Syntactic Components 
     Lefthand side: String place. 
     Righthand side: String expression. 
     Semantics 
     Where 
     E is the environment, 
     s is the state before execution, 
     A is an instance of string assignment statement, 
     &lt;p,s1&gt;place(E,s,left-hand-side(A)), 
     &lt;v,s2&gt;=evaluate(E,s1,right-hand-side(A)), 
     1=length(E,p), 
     v1=string-adjust(1,v), 
     s3=update(s2,p,v1), 
     execute(E,s,A )=s3. 
     STRING PLACE 
     A string place is either 
     a string program variable, 
     a substring place, or 
     possibly other primary functions. 
     STRING PROGRAM VARIABLE 
     Syntactic Components 
     Variable: Id. 
     Semantics 
     Where 
     E is the environment, 
     s is the state before execution, 
     S is an instance of string program variable, 
     p=&lt;variable(S),1,length(E,variable(S))&gt; 6   
     evaluate(E,s,S)=&lt;value(s,variable(S)),s&gt;, and 
     place(E,S)=&lt;p,s&gt;. 
     SUBSTRING PLACE 
     Syntactic Components 
     Place: String place. 
     Base position: Numerical expression. 
     Length: Numerical expression. 
     Semantics 
     Where 
     E is the environment, 
     s is the state before execution, 
     S is an instance of substring place, 
     &lt;&lt;i,ks,ke&gt;,s1&gt;=place(E,place(S)), 
     &lt;v1,s2&gt;=evaluate(E,s1,base-position(S)), 
     &lt;v2,s3&gt;=evaluate(E,s2,length(S)), 
     vs=if(v,&lt;1,1,v1,)+ks-1, 
     ve=min(ke,if(v2&lt;0,0,v2)+ks-1); 
     place(E,s,S)&lt;&lt;i,vs,ve&gt;,s3&gt;. 
     STRING EXPRESSION 
     A string expression is either 
     a concatenation, or 
     a value from a string place. 
     VALUE FROM A STRING PLACE 
     Syntactic Components 
     Place: String place. 
     Semantics 
     Where 
     E is the environment, 
     s is the state before execution, 
     V is an instance of value from a string place, 
     &lt;p,s2&gt;=place(E,place(V); 
     evaluate(E,s,V)=&lt;value(s2,p),s2&gt;. 
     CONCATENATION 
     Syntactic Components 
     First operand: String expression. 
     Second operand: String expression. 
     Semantics 
     Where 
     E is the environment, 
     s is the state before evaluation, 
     C is an instance of concatenation, 
     &lt;v1,s1&gt;=evaluate(E,s,first-operand(C)), 
     &lt;v2,s2&gt;=evaluate(Ef,s,second-operand(C)), 
     v3 is the pasting together of v1 and v2, 
     v4=string-adjust(4000,v3); 
     evaluate(E,s,C)=&lt;v4,s2&gt; 
     It should be understood that the present invention is not limited to the precise structure of the illustrated embodiments, it being intended that the foregoing description of the presently preferred embodiments be regarded as an illustration rather than as a limitation of the present invention. It is the following claims, including all equivalents, which are intended to define the scope of the invention. ##SPC1##