The Temporal Engineering of Software is a disciplined thought process involving the creation of a language that defines a structure in time. Initially the process is an overview lacking detail. As the process analysis expands new details expand the structure of the language. As an iterative process the structure becomes a Domain Specific Language (DSL) as details are ferreted out. Temporal Engineering Service provide consulting services from the beginning of projects, especially in the analysis phase when the language can be defined and refined with the most knowledgeable participants. Defining process-flow has been a nemesis for Computer Aided Software Engineering (CASE) Tools and Code Generation for decades. That’s why CASE has been all about data structures and entity relationships. The Temporal Engineering of Software has solved this difficult problem with Temporal Engineering.
Temporal Engineering starts with defining the context within which an application will exist. There are a number of standard examples used to explain software approaches. The most complex example is the five-function calculator. The fundamental definition in Temporal Engineering Language, a from of DSL is straight forward and typical of how we think of using a calculator:
Calculator = Operand1 Operation Operand2 Result;
This definition is saying enter a first operand number, how ever a number is defined; followed by an operation such as add, subtract, multiply, or divide. The enter the second operand number followed by choosing the result, a percentage, an equal, or a chain operation. Each element in this production will be used to define Temporal Rules. The semicolon at the end terminates the production. Productions do not need to fit on a single line. The chain operation means repeating the Operation Operand3, something like Add Number creating a summation of a list of numbers until the equals key is entered.
The next phase is to provide more detail defining what each Rule / Step in the calculator definition involves.
The Operand1 production is more detailed and more complex. Clearly this production needs more detail because if interpreted as written all numbers would be negative, have a decimal point and be cleared before we could use them. Certainly not our intent. Not all numbers are negative. Throughout this process we will be using symbols and meanings from regular expressions and BNF. Rather than list them here they will be explained as they are used.
Negate is an optional element in the production. Using ‘Negate?’ indicates this is an optional element. Using ‘Digit*’ means that zero or more digits must be used. Not all numbers have a decimal point: (Dot Digit+)? This expression groups Dot and Digit as optional. When used the ‘+’ indicates that there must be at least one or more digits. After the number has been interred the Clear Entry and Clear must be option and one or the other chosen. The Clear Entry also needs to be grouped and treated as a single word '<'Clear Entry> resulting in ('<'Clear Entry> | Clear)? The ‘|’ is the ‘OR’ symbol. We now have a complete definition for Operand1: