1198:* ------------------ interpreter --------------------------------------------* LM R14,R0,=A(4,CT1,N) Set R14=4, R15 --> table, and R0 =no. of entries in table (N) TRY CLC INPUT1,0(R15) ********* Found value in table entry ? BE ACTION * loop * YES, Load register pointer to sub-routine from table AR R15,R14 * * NO, Point to next entry in CT1 by adding R14 (=4) BCT R0,TRY ********* Back until count exhausted, then drop through . default action ... none of the values in table match, do something else LA R15,4(R15) point to default entry (beyond table end) ACTION L R15,0(R15) get pointer into R15,from where R15 points BALR R14,R15 Perform the sub-routine ("CALL" and return) B END go terminate this program * ------------------ control table -----------------------------------------* * | this column of allowable EBCDIC or ASCII values is tested '=' against variable 'input1' * | | this column is the 3-byte address of the appropriate subroutine * v v
1288:* ------------------ interpreter --------------------------------------------* SR R14,R14 ********* Set R14=0 CALC IC R14,INPUT1 * calc * put EBCDIC byte into lo order bits (24β31) of R14 IC R14,CT1X(R14) * * use EBCDIC value as index on table 'CT1X' to get new index FOUND L R15,CT1(R14) ********* get pointer to subroutine using index (0,4, 8 etc.) BALR R14,R15 Perform the sub-routine ("CALL" and return or Default) B END go terminate this program * --------------- additional translate table (EBCDIC --> pointer table INDEX) 256 bytes----* CT1X DC 12AL1(00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00) 12 identical sets of 16 bytes of x'00 * representing X'00 β x'BF' DC AL1(00,
1203:
length) DC C'?',AL3(DEFAULT) default entry β used on drop through to catch all INPUT1 DS C input variable is in this variable * ------------------ sub-routines ------------------------------------------* ADD CSECT sub-routine #1 (shown as separate CSECT here but might . alternatively be in-line code) . instruction(s) to add BR R14 return SUBTRACT CSECT sub-routine #2 . instruction(s) to subtract BR R14 return . etc..
1304:,00,00,00,00,00,00,00,00,00,00,00,00,00) ..x'E0' β X'EF' DC AL1(00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00) ..x'F0' β X'FF' * the assembler can be used to automatically calculate the index values and make the values more user friendly * (for e.g. '04' could be replaced with the symbolic expression 'PADD-CT1' in table CT1X above) * modified CT1 (added a default action when index = 00, single dimension, full 31 bit address)
1355:,00,00,00,00,00,00,00,00,00,00,00,00,00) ..x'E0' β X'EF' DC AL1(00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00) ..x'F0' β X'FF' * the assembler can be used to automatically calculate the index values and make the values more user friendly * (for e.g. '01' could be replaced with the symbolic expression 'PADD-CT1/4' in table CT1X above) * modified CT1 (index now based on 0,1,2,3,4 not 0,4,8,12,16 to allow all 256 variations)
1047:(and based upon just a single input for simplicity), however the intention is merely to demonstrate how control flow can be effected via the use of tables instead of regular program statements. It should be clear that this technique can easily be extended to deal with multiple inputs, either by increasing the number of columns or utilizing multiple table entries (with optional and/or operator). Similarly, by using (hierarchical) 'linked' control tables,
1334:* ------------------ interpreter --------------------------------------------* SR R14,R14 ********* Set R14=0 CALC IC R14,INPUT1 * calc * put EBCDIC byte into lo order bits (24β31) of R14 IC R14,CT1X(R14) * * use EBCDIC value as index on table 'CT1X' to get new index SLL R14,2 * *
25:
3479:'OR' condition incorporated as an extra column (to handle lower case input, however in this instance, this could equally have been handled simply by having an extra entry for each of the lower case characters specifying the same subroutine identifier as the upper case characters). An extra column to count the actual run-time events for each input as they occur is also included.
4789:
992:, requiring, as it does, an interpreter process before the 'native' programming language statements are executed. This however is not always the case. By separating (or 'encapsulating') the executable coding from the logic, as expressed in the table, it can be more readily targeted to perform its function most efficiently. This may be experienced most obviously in a
3647:(This example is actually not the most efficient way to construct such a control table but, by demonstrating a gradual 'evolution' from the first examples above, shows how additional columns can be used to modify behaviour.) The fifth column demonstrates that more than one action can be initiated with a single table entry β in this case an action to be performed
714:' of a conventional program, stripped of its programming language syntax and platform dependent components (e.g. IF/THEN DO.., FOR.., DO WHILE.., SWITCH, GOTO, CALL) and 'condensed' to its variables (e.g. input1), values (e.g. 'A','S','M' and 'D'), and subroutine identities (e.g. 'Add','subtract,..' or #1, #2,..). The structure of the table itself typically
4403:
form that is readily interpreted. The advantage of interpretive techniques are the compactness of representation, the machine independence, and the increased diagnostic capability. An interpreter can often be written so that the amount of time spent in interpretation of the code itself and branching to the appropriate routine is negligible
4048:
the processing of other referenced cells β by altering the control flow within the interpreter. It is the externalization of formulae from the underlying interpreter that clearly identifies both spreadsheets, and the above cited "rule based rating" example as readily identifiable instances of the use of control tables by non programmers.
1339:--------------- additional translate table (EBCDIC --> pointer table INDEX) 256 bytes----* CT1X DC 12AL1(00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00) 12 identical sets of 16 bytes of x'00' * representing X'00 β x'BF' DC AL1(00,
916:
entries as a set of "instructions". There need be no requirement for parsing of control table entries and these should therefore be designed, as far as possible, to be 'execution ready', requiring only the "plugging in" of variables from the appropriate columns to the already compiled generic code of the interpreter. The
4402:
There is another way to look at a program written in interpretative language. It may be regarded as a series of subroutine calls, one after another. Such a program may in fact be expanded into a long sequence of calls on subroutines, and, conversely, such a sequence can usually be packed into a coded
1359:
DC A(DEFAULT) index =00 START of
Control Table (4 byte address constants) PADD DC A(ADD) =01 PSUB DC A(SUBTRACT) =02 PMUL DC A(MULTIPLY) =03 PDIV DC A(DIVIDE)
1308:
DC A(DEFAULT) index =00 START of
Control Table (4 byte address constants) PADD DC A(ADD) =04 PSUB DC A(SUBTRACT) =08 PMUL DC A(MULTIPLY) =12 PDIV DC A(DIVIDE)
190:
In some cases, non-programmers can be assigned to maintain the content of control tables. For example, if a user-entered search phrase contains a certain phrase, a URL (web address) can be assigned in a table that controls where the search user is taken. If the phrase contains "skirt", then the table
3302:
supported, a SWITCH statement or equivalent can be used to alter the control flow to one of a sequence of program labels (e.g.: case0, case1, case2, case3, case4) which then either process the input directly, or else perform a call (with return) to the appropriate subroutine (default, Add, Subtract,
1202:
DC C'A',AL3(ADD) START of
Control Table (4 byte entry length) DC C'S',AL3(SUBTRACT) DC C'M',AL3(MULTIPLY) DC C'D',AL3(DIVIDE) N EQU (*-CT1)/4 number of valid entries in table (total length / entry
1189:
technique β purely to illustrate the concept and demonstrate fewer source lines. To handle all 256 different input values, approximately 265 lines of source code would be required (mainly single line table entries) whereas multiple 'compare and branch' would have normally required around 512 source
125:
This simple control table directs program flow according to the value of the single input variable. Each table entry holds a possible input value to be tested for equality (implied) and a relevant subroutine to perform in the action column. The name of the subroutine could be replaced by a relative
4047:
data sheet can be thought of as a two dimensional control table, with the non empty cells representing data to the underlying spreadsheet program (the interpreter). The cells containing formula are usually prefixed with an equals sign and simply designate a special type of data input that dictates
966:
The subroutines may be coded either in the same language as the interpreter itself or any other supported program language (provided that suitable inter-language 'Call' linkage mechanisms exist). The choice of language for the interpreter and/or subroutines will usually depend upon how portable it
4439:
Jump tables can be especially efficient if the range tests can be omitted. For example, if the control value is an enumerated type (or a character) then it can only contain a small fixed range of values and a range test is redundant provided the jump table is large enough to handle all possible
915:
The interpreter does not need to be unduly complex, or produced by a programmer with the advanced knowledge of a compiler writer, and can be written just as any other application program β except that it is usually designed with efficiency in mind. Its primary function is to "execute" the table
4299:
collected within the table itself (see CT3 and CT4 β with entries that could be periodically sorted by descending count). The interpreter can also optionally choose the most efficient lookup technique dynamically from metrics gathered at run-time (e.g. size of array, range of values, sorted or
3474:
Multi-dimensional control tables can be constructed (i.e. customized) that can be 'more complex' than the above examples that might test for multiple conditions on multiple inputs or perform more than one 'action', based on some matching criteria. An 'action' can include a pointer to another
855:
Comments positioned above each column (or even embedded textual documentation) can render a decision table 'human readable' even after 'condensing down' (encoding) to its essentials (and still broadly in-line with the original program specification β especially if a printed decision table,
1338:
FOUND L R15,CT1(R14) ********* get pointer to subroutine using index (0,4, 8 etc.) BALR R14,R15 Perform the sub-routine ("CALL" and return or
Default) B END go terminate this program *
4362:(these 'intermediate values' can however be calculated beforehand instead within a subroutine and their values referred to in the conditional table entries. Alternatively, a subroutine can perform the complete complex conditional test (as an unconditional 'action') and, by setting a
4139:
is involved, both in accessing the contents and also advancing the counter to point to the next table entry after execution. Calculating the next 'instruction' address (i.e. table entry) can even be performed as an optional additional action of every individual table entry allowing
4034:
If the algorithms are not pre-built into the interpreter (and therefore require additional runtime interpretation of an expression held in the table), it is known as "Rule-based Rating" rather than table-driven rating (and consequently consumes significantly more overhead).
4421:
The space required to represent a program can often be decreased by the use of interpreters in which common sequences of operations are represented compactly. A typical example is the use of a finite-state machine to encode a complex protocol or lexical format into a small
4345:
caused by virtual instructions having to be 'interpreted' (this however can usually be more than offset by a well designed generic interpreter taking full advantage of efficient direct translate, search and conditional testing techniques that may not otherwise have been
4072:β since the table entries could be said to 'modify' the behaviour of the interpreter). The interpreter itself however, and the subroutines, can be programmed using any one of the available paradigms or even a mixture. The table itself can be essentially a collection of "
4384:
recently wrote me that he considers the use of tables to control program flow as a basic idea of computer science that has been nearly forgotten; but he expects it will be ripe for rediscovery any day now. It is the key to efficiency in all the best compilers I have
975:
of a control table. A subordinate control table pointer may optionally substitute for a subroutine pointer in the 'action' columns if the interpreter supports this construct, representing a conditional 'drop' to a lower logical level, mimicking a conventional
626:
and condition code mask are repeated alongside the branch offsets. Control tables containing only the offsets to the program labels can be constructed to overcome this redundancy (at least in assembly languages) and yet requiring only minor execution time
908:), would require additional conventional coding only for new custom subroutines (in addition to specifying the control table itself). The interpreter, optionally, may only apply to some well-defined sections of a complete application program (such as the
718:
the (default) logical operations involved β such as 'testing for equality', performing a subroutine and 'next operation' or following the default sequence (rather than these being explicitly stated within program statements β as required in other
1612:
for all possible values of x (If CT1p contained the names of functions instead of labels, the jump could be replaced with a dynamic function call, eliminating the switch-like goto β but decreasing performance by the additional cost of function
122:
4030:
techniques illustrate the use of control tables in applications where the rules may change frequently because of market forces. The tables that determine the charges may be changed at short notice by non-programmers in many cases.
1326:
To handle 256 different input values, approximately 280 lines of source code or less, would be required (mainly single line table entries), whereas multiple 'compare and branch' would require around 512 lines (the size of the
3638:
in more conventional programs and may be reset in an 'action', also specified in the table entry. The example below (CT4) shows how extending the earlier table, to include a 'next' entry (and/or including an 'alter flow'
1280:
To handle 64 different input values, approximately 85 lines of source code (or less) are required (mainly single line table entries) whereas multiple 'compare and branch' would require around 128 lines (the size of the
1194:
is also approximately halved, each table entry requiring only 4 bytes instead of approximately 8 bytes for a series of 'compare immediate'/branch instructions (For larger input variables, the saving is even greater).
191:
can route the user to "www.shopping.example/catalogs/skirts", which is the skirts product catalog page. (The example URL doesn't work in practice). Marketing personnel may manage such a table instead of programmers.
141:
or play a major part in program control. There are no rigid rules about the structure or content of a control tableβits qualifying attribute is its ability to direct control flow in some way through "execution" by a
694:(instead of just a single set of values and 'branch to' program labels). (The switch statement construct in any case may not be available, or has confusingly differing implementations in high level languages (
1257:
index to CT1 from the raw EBCDIC data. Where n = 6, this would then be equivalent to just 3 sequential compare & branch instructions. However, where n<=64, on average it would need approximately 13
4156:
The interpreter program can optionally save the program counter (and other relevant details depending upon instruction type) at each stage to record a full or partial trace of the actual program flow for
4076:" values that do not even need to be compiled and could be read in from an external source (except in specific, platform dependent, implementations using memory pointers directly for greater efficiency).
1603:
This can be made more efficient if a 256 byte table is used to translate the raw ASCII value (x) directly to a dense sequential index value for use in directly locating the branch address from CT1p (i.e.
4255:
code re-use β the "interpreter" is usually reusable. Frequently it can be easily adapted to new programming tasks using precisely the same technique and can grow 'organically' becoming, in effect, a
1058:. The first column represents the input value to be tested (by an implied 'IF input1 = x') and, if TRUE, the corresponding 2nd column (the 'action') contains a subroutine address to perform by a
836:. Typically a control table will contain values for each possible matching class of input together with a corresponding pointer to an action subroutine. Some languages claim not to support
154:(although this typically refers to generating code automatically from external tables rather than direct run-time tables). In some cases, control tables can be specific implementations of
4103:(CIL) in the aim of creating a common intermediate 'instruction set' that is independent of platform (but unlike CIL, no pretensions to be used as a common resource for other languages).
567:
table size of 65,536 bytes β to handle all input possibilities β whilst allowing just 256 different output values. However, this direct translation technique provides an extremely fast
4099:
program is usually required to perform the actual execution (that is largely conditionally determined by the tables content). There are also some conceptual similarities to the recent
996:
application β where the underlying spreadsheet software transparently converts complex logical 'formulae' in the most efficient manner it is able, in order to display its results.
860:
each unique action, is created before coding begins). The table entries can also optionally contain counters to collect run-time statistics for 'in-flight' or later optimization
560:
processing, if the number of distinct program states is small, a "dense sequence" control variable can be used to efficiently dictate the entire flow of the main program loop.
187:
or program statements over and over again. The two-dimensional nature of most tables makes them easier to view and update than the one-dimensional nature of program code.
3393:
input values (A,S,M,D or unknown) into a pointer array index without actually using a table lookup, but is shown here as a table for consistency with the first example.
844:
which can be used to represent a 'relative subroutine number' to perform conditional execution, controlled by the value in the table entry (e.g. for use in an optimized
4465:
Show me your flowchart and conceal your tables, and I shall continue to be mystified. Show me your tables, and I won't usually need your flowchart; it'll be obvious.
1247:
1377:
one-dimensional lookup table β to obtain an index by matching the input (x), and the second, associated table (CT1p), is a table of addresses of labels to jump to.
4226:
compactness β table usually shows condition/action pairing side-by-side (without the usual platform/language implementation dependencies), often also resulting in
4320:
control tables can be built 'on-the-fly' (according to some user input or from parameters) and then executed by the interpreter (without building code literally).
888:
time from parameters (which themselves may reside in a table). For optimum efficiency, the table should be memory resident when the interpreter begins to use it.
4719:
4577:
3634:
In tables such as these, where a series of similar table entries defines the entire logic, a table entry number or pointer may effectively take the place of a
344:
using the raw data value either directly as the index to the array, or by performing some basic arithmetic on the data beforehand. This can be achieved in
4735:
4609:
1015:, it can be seen, in both cases, that very few lines of code are required to implement the control table approach and yet can achieve very significant
4317:
The interpreter can have debugging, trace and monitor features built-in β that can then be switched on or off at will according to test or 'live' mode
3631:
in the interpreter that processes the table entries, not in the table itself β which simply embodies the program logic via its structure and values).
4747:
4741:
3298:) array of subroutine pointers. The table (CT2) is used to extract the index (from 2nd column) to the pointer array (CT2P). If pointer arrays are
408:(gaps in the range are shown as '..' for this example, meaning 'all hex values up to next row'. The first two columns are not part of the array)
1007:
upon β what otherwise might have been β less efficient, less maintainable and lengthier code. Although the examples given are for a 'low level'
4756:
738:
processing nuances) is required before or after processing (if not already implicit in the function itself). The table may or may not contain
4131:
in that table entry β without necessarily copying all or some of the data within the entry first. Programming languages that are able to use
4679:
309:
itself β the logic of which is essentially embodied within the table structure and content. The structure of the table may be similar to a
928:
of the interpreter is normally by sequential processing of each table row but may be modified by specific actions in the table entries.
3627:
but, crucially, without the actual (language dependent) conditional statements (i.e. instructions) being present (the generic code is
735:
726:
A multi-dimensional control table will normally, as a minimum, contain value/action pairs and may additionally contain operators and
4565:
108:
4427:
4380:
Multiway branching is an important programming technique which is all too often replaced by an inefficient sequence of if tests.
4170:
557:
4292:
3245:/* the following code will execute in constant time, irrespective of the value of the input character (x) */
695:
1277:
than the above example on average, where n= 1 to 64 and up to 13 times less than would be needed using multiple comparisons).
1166:
according to matching value from the table (without a column to indicate otherwise, equality is assumed in this simple case).
4820:
4514:
4132:
4120:
3944:
3415:
1094:
917:
837:
743:
668:
341:
245:
208:
46:
42:
89:
4784:
1688:/* the 256 byte table, below, holds values (1,2,3,4), in corresponding ASCII positions (A,S,M,D), all others set to 0x00 */
4775:
4489:
4065:
255:
61:
4825:
4527:
4100:
221:
176:
4334:
The following mainly apply to their use in multi-dimensional tables, not the one-dimensional tables discussed earlier.
604:
to a program label when branched into by an immediately preceding, and indexed branch. It is sometimes generated by an
4701:
4162:
4729:
4716:
4584:
4212:
portability β can be designed to be 100% language independent (and platform independent β except for the interpreter)
68:
4484:
4367:
4061:
1266:
less instructions β since, in this case, one additional instruction would be required (to multiply the index by 4).
553:
163:
159:
35:
4342:
4145:
4023:
3640:
904:
interpreter, together with a well chosen set of generic subroutines (able to process the most commonly occurring
655:, together with one or more associated 'actions'. These actions are usually performed by generic or custom-built
597:
333:
310:
225:
169:
4658:
Development of
Automated Scoring Algorithms for Complex Performance Assessments: A Comparison of Two Approaches
4350:
1614:
1370:
1364:
952:
806:
698:). The control table concept, by comparison, has no intrinsic language dependencies, but might nevertheless be
241:
75:
612:β provided that the input range is small and dense, with few gaps (as created by the previous array example)
4246:
maintainability β tables often reduce the number of source lines needed to be maintained v. multiple compares
924:
and constitute (possibly arbitrary) values within the table that are meaningful only to the interpreter. The
316:, where a data value (or combination of data values) may be mapped to one or more functions to be performed.
4096:
1213:
944:
679:
660:
273:
147:
143:
1262:
less instructions than using multiple compares. Where n=1 to 256, on average it would use approximately 42
4711:
4509:
4338:
4266:
4136:
3658:
3654:
1048:
989:
977:
932:
628:
57:
4306:β common functions can be pre-loaded and less common functions fetched only on first encounter to reduce
1185:
No attempt is made to optimize the lookup in coding for this first example, and it uses instead a simple
4815:
4459:"Structure and Interpretation of Computer Programs", preface to the first edition, Abelson & Sussman
3669:' constructs), can also be accommodated with suitably designed and 'indented' control table structures.
960:
757:
The table illustrated below applies only to 'input1' since no specific input is specified in the table.
652:
648:
373:
365:
3281:/* goto (Switch to) the label corresponding to the index (0=default, 1=Add, 2=Subtract,.) - see CT1p */
3266:/* extract the correct subroutine index from table CT1x using its ASCII value as an index initially */
999:
The examples below have been chosen partly to illustrate potential performance gains that may not only
912:) and not other, 'less conditional', sections (such as program initialization, termination and so on).
4795:
4707:
162:. If there are several hierarchical levels of control table they may behave in a manner equivalent to
4704:
describes extensions to standard switch statement (providing some similar features to control tables)
4635:
4504:
4187:
4057:
3947:
3418:
3295:
968:
841:
720:
702:
differently according to the available data definition features of the chosen programming language.)
337:
324:
In perhaps its simplest implementation, a control table may sometimes be a one-dimensional table for
298:
294:
155:
134:
4753:
4560:, Humby, E., 2007,Macdonald, 1973 ... Biggerstaff, Ted J. Englewood Cliffs, NJ : Prentice-Hall
4269:β systemwide optimization possible. Any performance improvement to the interpreter usually improves
380:". For this to be feasible, the range of all possible values of the data needs to be small (e.g. an
4494:
4330:
training requirement β application programmers are not usually trained to produce generic solutions
4183:
3624:
901:
897:
810:
687:
683:
605:
369:
1285:
is also almost halved β despite the additional 256 byte table required to extract the 2nd index).
4770:
4216:
4093:
1216:(excluding the subroutine code) is '4n/2 +3', but can easily be reduced, where n = 1 to 64, to a
1051:
can be accomplished (optionally using indentation to help highlight subordinate control tables).
905:
747:
4644:
4191:
4115:
When a multi-dimensional control table is used to determine program flow, the normal "hardware"
4736:
Some comments on the use of ambiguous decision tables and their conversion to computer programs
4640:
4622:
4603:
4561:
4250:
4107:
can also be considered a similar but earlier implementation with origins as far back as 1966.
1170:
1008:
940:
936:
873:
825:
821:
361:
313:
302:
204:
3286:
The next example below illustrates how a similar effect can be achieved in languages that do
4519:
4303:
4256:
1222:
1075:
1067:
1019:
performance improvements, reduce repetitive source coding and aid clarity, as compared with
869:
845:
675:
609:
249:
180:
4688:
4674:
4454:
Programs must be written for people to read, and only incidentally for machines to execute.
82:
4760:
4723:
4523:
4296:
4202:
4116:
4089:
4069:
3635:
1347:,00,00,00,00,00,00,00,00,00,00,00) ..x'C0' β X'CF' DC AL1(00,00,00,00,
1296:,00,00,00,00,00,00,00,00,00,00,00) ..x'C0' β X'CF' DC AL1(00,00,00,00,
1071:
1032:
849:
731:
664:
601:
568:
377:
269:
184:
988:
At first sight, the use of control tables would appear to add quite a lot to a program's
4499:
4198:
4104:
1180:
1155:
644:
429:
3651:
the normal processing of each entry ('-' values mean 'no conditions' or 'no action').
4809:
4538:
4533:
4288:
4194:
4166:
4141:
3662:
1609:
1605:
1374:
1186:
1016:
401:
353:
349:
345:
3675:(a complete 'program' to read input1 and process, repeating until 'E' encountered)
1351:,00,00,00,00,00,00,00,00,00,00,00) ..x'D0' β X'DF' DC AL1(00,00,
1300:,00,00,00,00,00,00,00,00,00,00,00) ..x'D0' β X'DF' DC AL1(00,00,
730:
information such as, the location, size and format of input or output data, whether
4683:
4408:
4390:
3644:
1159:
1055:
1028:
1012:
956:
948:
925:
833:
622:
statements β the branch instructions still carry some redundancy, since the branch
594:
590:
584:
400:
Table to translate raw ASCII values (A,D,M,S) to new subroutine index (1,4,3,2) in
357:
229:
211:
138:
4689:
Compiler code generation for multiway branch statements as a static search problem
4447:
Compiler Code
Generation for Multiway Branch Statements as a Static Search Problem
4276:
extensible β new 'instructions' can be added β simply by extending the interpreter
3623:
The control table entries are then much more similar to conditional statements in
1598:/* not found --> default label */
1583:/* found --> appropriate label */
678:
but with the added possibility of testing for combinations of input values (using
4655:
Brian E. Clauser, Melissa J. Margolis, Stephen G. Clyman, Linette P. Ross (1997)
3389:
As in above examples, it is possible to very efficiently translate the potential
805:(This side-by-side pairing of value and action has similarities to constructs in
4471:
4311:
4260:
4249:
locality of reference β compact tables structures result in tables remaining in
4235:
4229:
4124:
4044:
1328:
1282:
1217:
1191:
1059:
993:
896:
The interpreter can be written in any suitable programming language including a
857:
739:
727:
667:, that 'executes' the control table entries and thus provides a higher level of
640:
419:
389:
24:
1544:/* loop thru ASCII values */
674:
A control table can be constructed along similar lines to a language dependent
4790:
Finite State Tables for
General Computer Programming Applications January 1988
4661:
Journal of
Educational Measurement, Vol. 34, No. 2 (Summer, 1997), pp. 141β161
4381:
4220:
4206:
1163:
921:
829:
809:, namely 'event-detection' and 'event-handling' but without (necessarily) the
751:
691:
656:
217:
173:
4238:
file β reduced in size through elimination of multiple conditional statements
396:
to be smaller than this, the array can be truncated to less than 256 bytes).
4363:
4158:
1044:
935:
in mind β by selecting values that can be used as direct indexes to data or
909:
877:
572:
306:
237:
884:
or may alternatively be partially or entirely built dynamically at program
179:
embedded in them, usually implied by their relative column position in the
121:
4748:
Conversion of decision tables to computer programs by rule mask techniques
4056:
If the control tables technique could be said to belong to any particular
4085:
4073:
3666:
1360:=04 * the rest of the code remains the same as the 2nd example
1158:
alongside other data values, the above table (CT1) can be used to direct
881:
329:
281:
4657:
1309:=16 * the rest of the code remains the same as first example
1176:
1020:
972:
885:
817:
711:
663:" program. The interpreter in this instance effectively functions as a
4800:
4084:
A multi-dimensional control table has some conceptual similarities to
4307:
651:
of decision tables, at several levels). They contain (often implied)
623:
385:
16:
Data structures that control the execution order of computer commands
4785:
Modelling software with finite state machines β a practical approach
284:β but usually with operations implied by the table structure itself
4766:
4366:
as its result, it can then be tested in the next table entry. See
3390:
971:. There may be several versions of the interpreter to enhance the
613:
414:
381:
372:β without any comparisons or loops. The technique is known as a "
4710:, by Christopher Sawtell c1993, Department of Computer Science,
4026:(concerned with the determining the cost of a particular call),
3294:
support indexed branching to a subroutine β contained within a (
1078:"). The last entry is the default case where no match is found.
1063:
575:, together with sufficient fast access memory, permits its use.
4738:
by P. J. H. King and R. G. Johnson, Univ. of London, London, UK
3475:
subordinate control table. The simple example below has had an
1003:
significantly for the additional tier of abstraction, but also
832:
including (for the actions), the option of directly executable
1253:, if a 256 byte translate table is first utilized to create a
1207:
improving the performance of the interpreter in above example
18:
618:
Although quite compact β compared to the multiple equivalent
4754:
A Superoptimizer
Analysis of Multiway Branch Code Generation
643:
or as an executable ("binary") implementation of a printed
571:& conversion to a (relative) subroutine pointer if the
4470:"The Mythical Man-Month: Essays on Software Engineering",
4232:β reduced in size through less duplication of instructions
4636:
Program Code Based vs. Table-driven vs. Rule-Based Rating
754:
to be executed depending upon other values in the "row".
183:. Control tables reduce the need for programming similar
4223:
transparently and be custom designed to suit the problem
4127:
to it. "Fetching" the instruction involves decoding the
1054:"CT1" is an example of a control table that is a simple
453:
150:. The design of such tables is sometimes referred to as
4776:
Page view statistics for this article for
December 2009
1323:
less than would be needed using multiple comparisons).
1154:
For programming languages that support pointers within
1023:
conventional program language constructs. See also the
4279:
interpreter can be written like an application program
1212:
To make a selection in the example above, the average
305:, requiring only a change to the interpreter, not the
4080:
Analogy to bytecode / virtual machine instruction set
1225:
820:
within a control table is largely dependent upon the
639:
More usually, a control table can be thought of as a
293:
The tables can have multiple dimensions, of fixed or
4708:
Control Table example in "C" language using pointers
4273:
applications using it (see examples in 'CT1' above).
1317:
21 times less executed instructions (where n>=64)
3290:support pointer definitions in data structures but
1608:" with a byte-wide array). It will then execute in
840:(directly) but nevertheless can instead support an
49:. Unsourced material may be challenged and removed.
1241:
931:These arbitrary values can thus be designed with
376:" or, when used specifically for branch tables, "
4767:Jump Tables via Function Pointer Arrays in C/C++
4639:, Rating Matters issue n. 12, 13 November 2002
4119:function is effectively simulated with either a
943:, they can be specifically designed to minimize
4769:Jones, Nigel. "Arrays of Pointers to Functions
4463:
4452:
4437:
4419:
4400:
4378:
1319:than the first example on average and up to 42
126:subroutine number if pointers are not supported
4623:UML state machine#Hierarchically nested states
4123:to the first (or next) table entry or else an
4730:From Requirements to Tables to Code and Tests
4357:in data table entries for comparison purposes
1373:uses two tables, the first (CT1) is a simple
690:conditions) and potentially calling multiple
671:than the underlying code of the interpreter.
8:
4680:Structured Programming with go to Statements
4395:Structured Programming with go to Statements
1336:multiply index by 4 (additional instruction)
848:statement β designed with zero gaps (i.e. a
168:Control tables often have the equivalent of
761:conditions and actions implied by structure
593:is a one-dimensional 'array' of contiguous
368:, this can be accomplished in two or three
4742:Ambiguity in limited entry decision tables
4341:β some increase because of extra level of
4241:improved program load (or download) speeds
1031:, concerning tables and the efficiency of
955:compilers, consist of directly executable
710:A control table essentially embodies the '
563:A two byte raw data value would require a
4772:" Embedded Systems Programming, May 1999.
4633:Carl Wright, Service Level Corpo. (2002)
1238:
1224:
951:values or even, in some cases such as in
631:compared to a conventional branch table.
109:Learn how and when to remove this message
4530:, depending upon a single input variable
4215:flexibility β ability to execute either
3940:
3679:
3488:
3411:
3312:
3303:Multiply or Divide,..) to deal with it.
1087:
768:
410:
120:
4550:
4702:Switch statement in Windows PowerShell
4608:: CS1 maint: archived copy as title (
4601:
4263:, controlled by the table definitions.
388:character value which have a range of
268:Acting as virtual instructions for a
7:
4726:by Wayne Cunneyworth of DataKinetics
4173:(see examples CT3 & CT4 above).
3661:, (incorporating the equivalent of '
392:'00' β 'FF'. If the actual range is
332:value to a corresponding subroutine
47:adding citations to reliable sources
4796:MSDN:Trigger-Based Event Processing
1275:26 times less executed instructions
200:Transformation of input values to:
4763:section 3.9, page 16 index mapping
4152:Monitoring control table execution
4135:have the dual advantage that less
1331:is also almost halved once more).
816:The variety of values that can be
254:Controlling the program cycle for
14:
4675:Decision Table Based Methodology
1493:/* labels to goto & default*/
4314:can be employed to achieve this.
1179:(maximum 16Mb address range) or
1070:statement). It is, in effect, a
558:pseudoconversational transaction
23:
4413:The Art of Computer Programming
4060:, the closest analogy might be
1249:with a path length of '5' with
1024:
892:The interpreter and subroutines
34:needs additional citations for
4515:Pointer (computer programming)
1235:
1229:
828:provides the widest scope for
1:
4558:Programs from decision tables
4490:Database-centric architecture
1424:/* permitted input values */
868:Control tables can reside in
256:online transaction processing
4101:Common Intermediate Language
1313:Further improved interpreter
813:nature of the event itself)
4148:instructions at any stage.
4022:In the specialist field of
3643:) subroutine) can create a
1043:The following examples are
967:needs to be across various
939:. For particular platforms/
920:are, in theory, infinitely
404:using one-dimensional array
4842:
4485:Automata-based programming
4432:Writing Efficient Programs
4368:Structured program theorem
4062:Automata-based programming
1039:Examples of control tables
984:Performance considerations
582:
554:automata-based programming
160:automata-based programming
4691:1I994, by David A. Spuler
4024:telecommunications rating
963:" (or pointers to them).
746:to generic or customized
600:instructions to effect a
216:a program name, relative
207:, for later branching or
4759:27 February 2012 at the
4415:Volume 1, 1997, page 202
1619:
1379:
1074:with return (a form of "
945:instruction path lengths
807:Event-driven programming
742:or relative or absolute
635:Multi-dimensional tables
242:event-driven programming
4801:Control Table in c2.com
4287:the interpreter can be
1214:instruction path length
1190:lines (the size of the
659:that are called by an "
170:conditional expressions
4712:University of Auckland
4526:to one of a number of
4510:Keyword-driven testing
4476:
4462:
4451:
4436:
4418:
4399:
4353:cannot always be used
3655:Structured programming
1243:
1242:{\displaystyle O(1)\,}
1049:structured programming
900:. A suitably designed
320:One-dimensional tables
127:
4821:Compiler construction
1244:
721:programming paradigms
374:trivial hash function
124:
4722:10 June 2016 at the
4717:Table driven design
4505:Finite-state machine
4259:of tried and tested
4171:performance analysis
4058:programming paradigm
4052:Programming paradigm
3625:procedural languages
1271:Improved interpreter
1223:
918:program instructions
370:machine instructions
156:finite-state-machine
43:improve this article
4826:Compiler structures
4495:Data-driven testing
4028:table-driven rating
4018:Table-driven rating
898:high level language
606:optimizing compiler
263:More advanced usage
152:table-driven design
4524:multiway branching
4184:Information tables
4094:platform dependent
1239:
1162:to an appropriate
1066:to β similar to a
1033:multiway branching
978:structured program
303:computer platforms
164:UML state machines
128:
4792:by Mark Leininger
4445:David.A. SPULER,
4111:Instruction fetch
4011:
4010:
3992:-->Read Input1
3921:
3920:
3619:
3618:
3468:
3467:
3385:
3384:
1171:Assembly language
1150:
1149:
1035:in this article.
1009:assembly language
937:function pointers
910:main control loop
874:auxiliary storage
826:Assembly language
822:computer language
799:
798:
778:(implied) perform
550:
549:
362:associative array
314:associative array
250:state transitions
137:that control the
119:
118:
111:
93:
4833:
4750:by P. J. H. King
4744:by P. J. H. King
4732:By George Brooke
4662:
4653:
4647:
4631:
4625:
4620:
4614:
4613:
4607:
4599:
4597:
4595:
4589:
4583:. Archived from
4582:
4574:
4568:
4555:
4520:Switch statement
4474:
4460:
4449:
4434:
4416:
4397:
4310:usage. In-table
4304:dynamic dispatch
4295:" using runtime
4257:standard library
4203:fault diagnostic
3999:-->Alter flow
3941:
3680:
3659:"Goto-less" code
3489:
3412:
3313:
3282:
3279:
3276:
3273:
3270:
3267:
3264:
3261:
3258:
3255:
3252:
3249:
3246:
3243:
3240:
3237:
3234:
3231:
3228:
3225:
3222:
3219:
3216:
3213:
3210:
3207:
3204:
3201:
3198:
3195:
3192:
3189:
3186:
3183:
3180:
3177:
3174:
3171:
3168:
3165:
3162:
3159:
3156:
3153:
3150:
3147:
3144:
3141:
3138:
3135:
3132:
3129:
3126:
3123:
3120:
3117:
3114:
3111:
3108:
3105:
3102:
3099:
3096:
3093:
3090:
3087:
3084:
3081:
3078:
3075:
3072:
3069:
3066:
3063:
3060:
3057:
3054:
3051:
3048:
3045:
3042:
3039:
3036:
3033:
3030:
3027:
3024:
3021:
3018:
3015:
3012:
3009:
3006:
3003:
3000:
2997:
2994:
2991:
2988:
2985:
2982:
2979:
2976:
2973:
2970:
2967:
2964:
2961:
2958:
2955:
2952:
2949:
2946:
2943:
2940:
2937:
2934:
2931:
2928:
2925:
2922:
2919:
2916:
2913:
2910:
2907:
2904:
2901:
2898:
2895:
2892:
2889:
2886:
2883:
2880:
2877:
2874:
2871:
2868:
2865:
2862:
2859:
2856:
2853:
2850:
2847:
2844:
2841:
2838:
2835:
2832:
2829:
2826:
2823:
2820:
2817:
2814:
2811:
2808:
2805:
2802:
2799:
2796:
2793:
2790:
2787:
2784:
2781:
2778:
2775:
2772:
2769:
2766:
2763:
2760:
2757:
2754:
2751:
2748:
2745:
2742:
2739:
2736:
2733:
2730:
2727:
2724:
2721:
2718:
2715:
2712:
2709:
2706:
2703:
2700:
2697:
2694:
2691:
2688:
2685:
2682:
2679:
2676:
2673:
2670:
2667:
2664:
2661:
2658:
2655:
2652:
2649:
2646:
2643:
2640:
2637:
2634:
2631:
2628:
2625:
2622:
2619:
2616:
2613:
2610:
2607:
2604:
2601:
2598:
2595:
2592:
2589:
2586:
2583:
2580:
2577:
2574:
2571:
2568:
2565:
2562:
2559:
2556:
2553:
2550:
2547:
2544:
2541:
2538:
2535:
2532:
2529:
2526:
2523:
2520:
2517:
2514:
2511:
2508:
2505:
2502:
2499:
2496:
2493:
2490:
2487:
2484:
2481:
2478:
2475:
2472:
2469:
2466:
2463:
2460:
2457:
2454:
2451:
2448:
2445:
2442:
2439:
2436:
2433:
2430:
2427:
2424:
2421:
2418:
2415:
2412:
2409:
2406:
2403:
2400:
2397:
2394:
2391:
2388:
2385:
2382:
2379:
2376:
2373:
2370:
2367:
2364:
2361:
2358:
2355:
2352:
2349:
2346:
2343:
2340:
2337:
2334:
2331:
2328:
2325:
2322:
2319:
2316:
2313:
2310:
2307:
2304:
2301:
2298:
2295:
2292:
2289:
2286:
2283:
2280:
2277:
2274:
2271:
2268:
2265:
2262:
2259:
2256:
2253:
2250:
2247:
2244:
2241:
2238:
2235:
2232:
2229:
2226:
2223:
2220:
2217:
2214:
2211:
2208:
2205:
2202:
2199:
2196:
2193:
2190:
2187:
2184:
2181:
2178:
2175:
2172:
2169:
2166:
2163:
2160:
2157:
2154:
2151:
2148:
2145:
2142:
2139:
2136:
2133:
2130:
2127:
2124:
2121:
2118:
2115:
2112:
2109:
2106:
2103:
2100:
2097:
2094:
2091:
2088:
2085:
2082:
2079:
2076:
2073:
2070:
2067:
2064:
2061:
2058:
2055:
2052:
2049:
2046:
2043:
2040:
2037:
2034:
2031:
2028:
2025:
2022:
2019:
2016:
2013:
2010:
2007:
2004:
2001:
1998:
1995:
1992:
1989:
1986:
1983:
1980:
1977:
1974:
1971:
1968:
1965:
1962:
1959:
1956:
1953:
1950:
1947:
1944:
1941:
1938:
1935:
1932:
1929:
1926:
1923:
1920:
1917:
1914:
1911:
1908:
1905:
1902:
1899:
1896:
1893:
1890:
1887:
1884:
1881:
1878:
1875:
1872:
1869:
1866:
1863:
1860:
1857:
1854:
1851:
1848:
1845:
1842:
1839:
1836:
1833:
1830:
1827:
1824:
1821:
1818:
1815:
1812:
1809:
1806:
1803:
1800:
1797:
1794:
1791:
1788:
1785:
1782:
1779:
1776:
1773:
1770:
1767:
1764:
1761:
1758:
1755:
1752:
1749:
1746:
1743:
1740:
1737:
1734:
1731:
1728:
1725:
1722:
1719:
1716:
1713:
1710:
1707:
1704:
1701:
1698:
1695:
1692:
1689:
1686:
1683:
1680:
1677:
1674:
1671:
1668:
1665:
1662:
1659:
1656:
1653:
1650:
1647:
1644:
1641:
1638:
1635:
1632:
1629:
1626:
1623:
1599:
1596:
1593:
1590:
1587:
1584:
1581:
1578:
1575:
1572:
1569:
1566:
1563:
1560:
1557:
1554:
1551:
1548:
1545:
1542:
1539:
1536:
1533:
1530:
1527:
1524:
1521:
1518:
1515:
1512:
1509:
1506:
1503:
1500:
1497:
1494:
1491:
1488:
1485:
1482:
1479:
1476:
1473:
1470:
1467:
1464:
1461:
1458:
1455:
1452:
1449:
1446:
1443:
1440:
1437:
1434:
1431:
1428:
1425:
1422:
1419:
1416:
1413:
1410:
1407:
1404:
1401:
1398:
1395:
1392:
1389:
1386:
1383:
1369:This example in
1251:zero comparisons
1248:
1246:
1245:
1240:
1088:
1076:dynamic dispatch
769:
676:switch statement
621:
610:switch statement
411:
356:using a typical
297:and are usually
295:variable lengths
272:processed by an
246:control variable
181:association list
114:
107:
103:
100:
94:
92:
51:
27:
19:
4841:
4840:
4836:
4835:
4834:
4832:
4831:
4830:
4806:
4805:
4761:Wayback Machine
4724:Wayback Machine
4698:
4671:
4666:
4665:
4654:
4650:
4632:
4628:
4621:
4617:
4600:
4593:
4591:
4590:on 10 June 2016
4587:
4580:
4578:"Archived copy"
4576:
4575:
4571:
4556:
4552:
4547:
4539:Token threading
4481:
4475:
4469:
4461:
4458:
4450:
4444:
4435:
4426:
4417:
4407:
4398:
4389:
4377:
4327:
4179:
4154:
4117:Program Counter
4113:
4090:virtual machine
4088:operating on a
4082:
4070:metaprogramming
4054:
4041:
4020:
3636:program counter
3284:
3283:
3280:
3277:
3274:
3271:
3268:
3265:
3262:
3259:
3256:
3253:
3250:
3247:
3244:
3241:
3238:
3235:
3232:
3229:
3226:
3223:
3220:
3217:
3214:
3211:
3208:
3205:
3202:
3199:
3196:
3193:
3190:
3187:
3184:
3181:
3178:
3175:
3172:
3169:
3166:
3163:
3160:
3157:
3154:
3151:
3148:
3145:
3142:
3139:
3136:
3133:
3130:
3127:
3124:
3121:
3118:
3115:
3112:
3109:
3106:
3103:
3100:
3097:
3094:
3091:
3088:
3085:
3082:
3079:
3076:
3073:
3070:
3067:
3064:
3061:
3058:
3055:
3052:
3049:
3046:
3043:
3040:
3037:
3034:
3031:
3028:
3025:
3022:
3019:
3016:
3013:
3010:
3007:
3004:
3001:
2998:
2995:
2992:
2989:
2986:
2983:
2980:
2977:
2974:
2971:
2968:
2965:
2962:
2959:
2956:
2953:
2950:
2947:
2944:
2941:
2938:
2935:
2932:
2929:
2926:
2923:
2920:
2917:
2914:
2911:
2908:
2905:
2902:
2899:
2896:
2893:
2890:
2887:
2884:
2881:
2878:
2875:
2872:
2869:
2866:
2863:
2860:
2857:
2854:
2851:
2848:
2845:
2842:
2839:
2836:
2833:
2830:
2827:
2824:
2821:
2818:
2815:
2812:
2809:
2806:
2803:
2800:
2797:
2794:
2791:
2788:
2785:
2782:
2779:
2776:
2773:
2770:
2767:
2764:
2761:
2758:
2755:
2752:
2749:
2746:
2743:
2740:
2737:
2734:
2731:
2728:
2725:
2722:
2719:
2716:
2713:
2710:
2707:
2704:
2701:
2698:
2695:
2692:
2689:
2686:
2683:
2680:
2677:
2674:
2671:
2668:
2665:
2662:
2659:
2656:
2653:
2650:
2647:
2644:
2641:
2638:
2635:
2632:
2629:
2626:
2623:
2620:
2617:
2614:
2611:
2608:
2605:
2602:
2599:
2596:
2593:
2590:
2587:
2584:
2581:
2578:
2575:
2572:
2569:
2566:
2563:
2560:
2557:
2554:
2551:
2548:
2545:
2542:
2539:
2536:
2533:
2530:
2527:
2524:
2521:
2518:
2515:
2512:
2509:
2506:
2503:
2500:
2497:
2494:
2491:
2488:
2485:
2482:
2479:
2476:
2473:
2470:
2467:
2464:
2461:
2458:
2455:
2452:
2449:
2446:
2443:
2440:
2437:
2434:
2431:
2428:
2425:
2422:
2419:
2416:
2413:
2410:
2407:
2404:
2401:
2398:
2395:
2392:
2389:
2386:
2383:
2380:
2377:
2374:
2371:
2368:
2365:
2362:
2359:
2356:
2353:
2350:
2347:
2344:
2341:
2338:
2335:
2332:
2329:
2326:
2323:
2320:
2317:
2314:
2311:
2308:
2305:
2302:
2299:
2296:
2293:
2290:
2287:
2284:
2281:
2278:
2275:
2272:
2269:
2266:
2263:
2260:
2257:
2254:
2251:
2248:
2245:
2242:
2239:
2236:
2233:
2230:
2227:
2224:
2221:
2218:
2215:
2212:
2209:
2206:
2203:
2200:
2197:
2194:
2191:
2188:
2185:
2182:
2179:
2176:
2173:
2170:
2167:
2164:
2161:
2158:
2155:
2152:
2149:
2146:
2143:
2140:
2137:
2134:
2131:
2128:
2125:
2122:
2119:
2116:
2113:
2110:
2107:
2104:
2101:
2098:
2095:
2092:
2089:
2086:
2083:
2080:
2077:
2074:
2071:
2068:
2065:
2062:
2059:
2056:
2053:
2050:
2047:
2044:
2041:
2038:
2035:
2032:
2029:
2026:
2023:
2020:
2017:
2014:
2011:
2008:
2005:
2002:
1999:
1996:
1993:
1990:
1987:
1984:
1981:
1978:
1975:
1972:
1969:
1966:
1963:
1960:
1957:
1954:
1951:
1948:
1945:
1942:
1939:
1936:
1933:
1930:
1927:
1924:
1921:
1918:
1915:
1912:
1909:
1906:
1903:
1900:
1897:
1894:
1891:
1888:
1885:
1882:
1879:
1876:
1873:
1870:
1867:
1864:
1861:
1858:
1855:
1852:
1849:
1846:
1843:
1840:
1837:
1834:
1831:
1828:
1825:
1822:
1819:
1816:
1813:
1810:
1807:
1804:
1801:
1798:
1795:
1792:
1789:
1786:
1783:
1780:
1777:
1774:
1771:
1768:
1765:
1762:
1759:
1756:
1753:
1750:
1747:
1744:
1741:
1738:
1735:
1732:
1729:
1726:
1723:
1720:
1717:
1714:
1711:
1708:
1705:
1702:
1699:
1696:
1693:
1690:
1687:
1684:
1681:
1678:
1675:
1672:
1669:
1666:
1663:
1660:
1657:
1654:
1651:
1648:
1645:
1642:
1639:
1636:
1633:
1630:
1627:
1624:
1621:
1601:
1600:
1597:
1594:
1591:
1588:
1585:
1582:
1579:
1576:
1573:
1570:
1567:
1564:
1561:
1558:
1555:
1552:
1549:
1546:
1543:
1540:
1537:
1534:
1531:
1528:
1525:
1522:
1519:
1516:
1513:
1510:
1507:
1504:
1501:
1498:
1495:
1492:
1489:
1486:
1483:
1480:
1477:
1474:
1471:
1468:
1465:
1462:
1459:
1456:
1453:
1450:
1447:
1444:
1441:
1438:
1435:
1432:
1429:
1426:
1423:
1420:
1417:
1414:
1411:
1408:
1405:
1402:
1399:
1396:
1393:
1390:
1387:
1384:
1381:
1361:
1310:
1221:
1220:
1204:
1156:data structures
1126:-->Multiply
1116:-->Subtract
1072:multiway branch
1041:
986:
894:
866:
850:multiway branch
732:data conversion
708:
665:virtual machine
637:
619:
602:multiway branch
587:
581:
378:double dispatch
322:
291:
289:Table structure
270:virtual machine
265:
197:
115:
104:
98:
95:
58:"Control table"
52:
50:
40:
28:
17:
12:
11:
5:
4839:
4837:
4829:
4828:
4823:
4818:
4808:
4807:
4804:
4803:
4798:
4793:
4787:
4779:
4778:
4773:
4764:
4751:
4745:
4739:
4733:
4727:
4714:
4705:
4697:
4696:External links
4694:
4693:
4692:
4686:
4677:
4670:
4667:
4664:
4663:
4648:
4626:
4615:
4569:
4549:
4548:
4546:
4543:
4542:
4541:
4536:
4531:
4528:program labels
4517:
4512:
4507:
4502:
4500:Decision table
4497:
4492:
4487:
4480:
4477:
4467:
4456:
4442:
4424:
4405:
4387:
4376:
4373:
4372:
4371:
4359:
4358:
4347:
4332:
4331:
4326:
4323:
4322:
4321:
4318:
4315:
4301:
4281:
4280:
4277:
4274:
4264:
4253:
4247:
4244:
4243:
4242:
4239:
4233:
4224:
4213:
4210:
4207:product guides
4199:general public
4178:
4175:
4153:
4150:
4112:
4109:
4081:
4078:
4053:
4050:
4040:
4037:
4019:
4016:
4015:
4014:
4013:
4012:
4009:
4008:
4002:
4001:
3995:
3994:
3988:
3987:
3981:
3980:
3978:-->Multiply
3974:
3973:
3971:-->Subtract
3967:
3966:
3960:
3959:
3953:
3952:
3950:
3935:
3934:
3933:
3932:
3923:
3922:
3919:
3918:
3913:
3908:
3903:
3898:
3892:
3891:
3886:
3881:
3876:
3871:
3865:
3864:
3859:
3854:
3849:
3844:
3838:
3837:
3832:
3827:
3822:
3817:
3811:
3810:
3805:
3800:
3795:
3790:
3784:
3783:
3778:
3773:
3768:
3763:
3757:
3756:
3751:
3746:
3741:
3736:
3730:
3729:
3724:
3719:
3714:
3709:
3703:
3702:
3697:
3692:
3687:
3684:
3621:
3620:
3617:
3616:
3611:
3606:
3601:
3595:
3594:
3589:
3584:
3579:
3573:
3572:
3567:
3562:
3557:
3551:
3550:
3545:
3540:
3535:
3529:
3528:
3523:
3518:
3513:
3507:
3506:
3501:
3496:
3493:
3472:
3471:
3470:
3469:
3466:
3465:
3459:
3458:
3452:
3451:
3449:-->Multiply
3445:
3444:
3442:-->Subtract
3438:
3437:
3431:
3430:
3424:
3423:
3421:
3406:
3405:
3404:
3403:
3387:
3386:
3383:
3382:
3377:
3371:
3370:
3365:
3359:
3358:
3353:
3347:
3346:
3341:
3335:
3334:
3329:
3323:
3322:
3317:
3239:'\x00'
3233:'\x00'
3227:'\x00'
3221:'\x00'
3215:'\x00'
3209:'\x00'
3203:'\x00'
3197:'\x00'
3191:'\x00'
3185:'\x00'
3179:'\x00'
3173:'\x00'
3167:'\x00'
3161:'\x00'
3155:'\x00'
3149:'\x00'
3143:'\x00'
3137:'\x00'
3131:'\x00'
3125:'\x00'
3119:'\x00'
3113:'\x00'
3107:'\x00'
3101:'\x00'
3095:'\x00'
3089:'\x00'
3083:'\x00'
3077:'\x00'
3071:'\x00'
3065:'\x00'
3059:'\x00'
3053:'\x00'
3047:'\x00'
3041:'\x00'
3035:'\x00'
3029:'\x00'
3023:'\x00'
3017:'\x00'
3011:'\x00'
3005:'\x00'
2999:'\x00'
2993:'\x00'
2987:'\x00'
2981:'\x03'
2975:'\x00'
2969:'\x00'
2963:'\x00'
2957:'\x00'
2951:'\x00'
2945:'\x00'
2939:'\x00'
2933:'\x00'
2927:'\x00'
2921:'\x00'
2915:'\x00'
2909:'\x00'
2903:'\x00'
2897:'\x00'
2891:'\x00'
2885:'\x00'
2879:'\x00'
2873:'\x00'
2867:'\x00'
2861:'\x00'
2855:'\x00'
2849:'\x00'
2843:'\x00'
2837:'\x00'
2831:'\x00'
2825:'\x00'
2819:'\x00'
2813:'\x00'
2807:'\x00'
2801:'\x00'
2795:'\x00'
2789:'\x00'
2783:'\x00'
2777:'\x00'
2771:'\x00'
2765:'\x00'
2759:'\x00'
2753:'\x00'
2747:'\x00'
2741:'\x00'
2735:'\x00'
2729:'\x00'
2723:'\x00'
2717:'\x00'
2711:'\x00'
2705:'\x00'
2699:'\x00'
2693:'\x00'
2687:'\x00'
2681:'\x00'
2675:'\x00'
2669:'\x00'
2663:'\x00'
2657:'\x00'
2651:'\x00'
2645:'\x00'
2639:'\x00'
2633:'\x00'
2627:'\x00'
2621:'\x00'
2615:'\x00'
2609:'\x00'
2603:'\x00'
2597:'\x00'
2591:'\x00'
2585:'\x00'
2579:'\x00'
2573:'\x00'
2567:'\x00'
2561:'\x00'
2555:'\x00'
2549:'\x00'
2543:'\x00'
2537:'\x00'
2531:'\x00'
2525:'\x00'
2519:'\x00'
2513:'\x00'
2507:'\x00'
2501:'\x00'
2495:'\x00'
2489:'\x00'
2483:'\x00'
2477:'\x00'
2471:'\x00'
2465:'\x00'
2459:'\x00'
2453:'\x00'
2447:'\x00'
2441:'\x00'
2435:'\x00'
2429:'\x00'
2423:'\x00'
2417:'\x00'
2411:'\x00'
2405:'\x00'
2399:'\x00'
2393:'\x00'
2387:'\x00'
2381:'\x00'
2375:'\x00'
2369:'\x00'
2363:'\x00'
2357:'\x00'
2351:'\x00'
2345:'\x00'
2339:'\x00'
2333:'\x00'
2327:'\x00'
2321:'\x00'
2315:'\x00'
2309:'\x00'
2303:'\x00'
2297:'\x00'
2291:'\x00'
2285:'\x00'
2279:'\x00'
2273:'\x00'
2267:'\x00'
2261:'\x00'
2255:'\x00'
2249:'\x00'
2243:'\x00'
2237:'\x00'
2231:'\x00'
2225:'\x00'
2219:'\x00'
2213:'\x00'
2207:'\x02'
2201:'\x00'
2195:'\x00'
2189:'\x00'
2183:'\x00'
2177:'\x00'
2171:'\x03'
2165:'\x00'
2159:'\x00'
2153:'\x00'
2147:'\x00'
2141:'\x00'
2135:'\x00'
2129:'\x00'
2123:'\x00'
2117:'\x04'
2111:'\x00'
2105:'\x00'
2099:'\x01'
2093:'\x00'
2087:'\x00'
2081:'\x00'
2075:'\x00'
2069:'\x00'
2063:'\x00'
2057:'\x00'
2051:'\x00'
2045:'\x00'
2039:'\x00'
2033:'\x00'
2027:'\x00'
2021:'\x00'
2015:'\x00'
2009:'\x00'
2003:'\x00'
1997:'\x00'
1991:'\x00'
1985:'\x00'
1979:'\x00'
1973:'\x00'
1967:'\x00'
1961:'\x00'
1955:'\x00'
1949:'\x00'
1943:'\x00'
1937:'\x00'
1931:'\x00'
1925:'\x00'
1919:'\x00'
1913:'\x00'
1907:'\x00'
1901:'\x00'
1895:'\x00'
1889:'\x00'
1883:'\x00'
1877:'\x00'
1871:'\x00'
1865:'\x00'
1859:'\x00'
1853:'\x00'
1847:'\x00'
1841:'\x00'
1835:'\x00'
1829:'\x00'
1823:'\x00'
1817:'\x00'
1811:'\x00'
1805:'\x00'
1799:'\x00'
1793:'\x00'
1787:'\x00'
1781:'\x00'
1775:'\x00'
1769:'\x00'
1763:'\x00'
1757:'\x00'
1751:'\x00'
1745:'\x00'
1739:'\x00'
1733:'\x00'
1727:'\x00'
1721:'\x00'
1715:'\x00'
1709:'\x00'
1620:
1380:
1333:
1287:
1268:
1267:
1237:
1234:
1231:
1228:
1197:
1181:Z/Architecture
1152:
1151:
1148:
1147:
1146:-->Default
1144:
1138:
1137:
1134:
1128:
1127:
1124:
1118:
1117:
1114:
1108:
1107:
1104:
1098:
1097:
1092:
1040:
1037:
985:
982:
893:
890:
886:initialization
865:
864:Table location
862:
803:
802:
801:
800:
797:
796:
793:
789:
788:
785:
781:
780:
775:
773:(implied) IF =
707:
704:
645:decision table
636:
633:
583:Main article:
580:
577:
548:
547:
542:
539:
535:
534:
531:
528:
524:
523:
518:
515:
511:
510:
507:
504:
500:
499:
494:
491:
487:
486:
483:
480:
476:
475:
470:
467:
463:
462:
459:
456:
450:
449:
446:
443:
439:
438:
435:
432:
426:
425:
422:
417:
328:translating a
321:
318:
290:
287:
286:
285:
277:
276:
264:
261:
260:
259:
252:
236:Controlling a
234:
233:
232:
214:
196:
193:
131:Control tables
117:
116:
31:
29:
22:
15:
13:
10:
9:
6:
4:
3:
2:
4838:
4827:
4824:
4822:
4819:
4817:
4814:
4813:
4811:
4802:
4799:
4797:
4794:
4791:
4788:
4786:
4783:
4782:
4781:
4777:
4774:
4771:
4768:
4765:
4762:
4758:
4755:
4752:
4749:
4746:
4743:
4740:
4737:
4734:
4731:
4728:
4725:
4721:
4718:
4715:
4713:
4709:
4706:
4703:
4700:
4699:
4695:
4690:
4687:
4685:
4681:
4678:
4676:
4673:
4672:
4668:
4660:
4659:
4652:
4649:
4646:
4642:
4638:
4637:
4630:
4627:
4624:
4619:
4616:
4611:
4605:
4586:
4579:
4573:
4570:
4567:
4566:0-444-19569-6
4563:
4559:
4554:
4551:
4544:
4540:
4537:
4535:
4534:Threaded code
4532:
4529:
4525:
4521:
4518:
4516:
4513:
4511:
4508:
4506:
4503:
4501:
4498:
4496:
4493:
4491:
4488:
4486:
4483:
4482:
4478:
4473:
4466:
4455:
4448:
4441:
4433:
4429:
4423:
4414:
4410:
4404:
4396:
4392:
4386:
4383:
4374:
4369:
4365:
4361:
4360:
4356:
4352:
4348:
4344:
4340:
4337:
4336:
4335:
4329:
4328:
4325:Disadvantages
4324:
4319:
4316:
4313:
4309:
4305:
4302:
4298:
4294:
4290:
4289:introspective
4286:
4285:
4284:
4283:Optionally:-
4278:
4275:
4272:
4268:
4265:
4262:
4258:
4254:
4252:
4248:
4245:
4240:
4237:
4234:
4231:
4228:
4227:
4225:
4222:
4218:
4214:
4211:
4208:
4204:
4200:
4196:
4193:
4189:
4185:
4181:
4180:
4176:
4174:
4172:
4169:analysis and
4168:
4167:code coverage
4164:
4160:
4151:
4149:
4147:
4143:
4138:
4134:
4130:
4126:
4122:
4118:
4110:
4108:
4106:
4102:
4098:
4097:"interpreter"
4095:
4091:
4087:
4079:
4077:
4075:
4071:
4067:
4063:
4059:
4051:
4049:
4046:
4038:
4036:
4032:
4029:
4025:
4017:
4007:
4004:
4003:
4000:
3997:
3996:
3993:
3990:
3989:
3986:
3983:
3982:
3979:
3976:
3975:
3972:
3969:
3968:
3965:
3962:
3961:
3958:
3957:-->Default
3955:
3954:
3951:
3949:
3946:
3943:
3942:
3939:
3938:
3937:
3936:
3931:pointer array
3930:
3927:
3926:
3925:
3924:
3917:
3914:
3912:
3909:
3907:
3904:
3902:
3899:
3897:
3894:
3893:
3890:
3887:
3885:
3882:
3880:
3877:
3875:
3872:
3870:
3867:
3866:
3863:
3860:
3858:
3855:
3853:
3850:
3848:
3845:
3843:
3840:
3839:
3836:
3833:
3831:
3828:
3826:
3823:
3821:
3818:
3816:
3813:
3812:
3809:
3806:
3804:
3801:
3799:
3796:
3794:
3791:
3789:
3786:
3785:
3782:
3779:
3777:
3774:
3772:
3769:
3767:
3764:
3762:
3759:
3758:
3755:
3752:
3750:
3747:
3745:
3742:
3740:
3737:
3735:
3732:
3731:
3728:
3725:
3723:
3720:
3718:
3715:
3713:
3710:
3708:
3705:
3704:
3701:
3698:
3696:
3693:
3691:
3688:
3685:
3682:
3681:
3678:
3677:
3676:
3674:
3670:
3668:
3664:
3660:
3656:
3652:
3650:
3646:
3642:
3637:
3632:
3630:
3626:
3615:
3612:
3610:
3607:
3605:
3602:
3600:
3597:
3596:
3593:
3590:
3588:
3585:
3583:
3580:
3578:
3575:
3574:
3571:
3568:
3566:
3563:
3561:
3558:
3556:
3553:
3552:
3549:
3546:
3544:
3541:
3539:
3536:
3534:
3531:
3530:
3527:
3524:
3522:
3519:
3517:
3514:
3512:
3509:
3508:
3505:
3502:
3500:
3497:
3494:
3491:
3490:
3487:
3486:
3485:
3484:
3480:
3478:
3464:
3461:
3460:
3457:
3454:
3453:
3450:
3447:
3446:
3443:
3440:
3439:
3436:
3433:
3432:
3429:
3428:-->default
3426:
3425:
3422:
3420:
3417:
3414:
3413:
3410:
3409:
3408:
3407:
3402:pointer array
3401:
3398:
3397:
3396:
3395:
3394:
3392:
3381:
3378:
3376:
3373:
3372:
3369:
3366:
3364:
3361:
3360:
3357:
3354:
3352:
3349:
3348:
3345:
3342:
3340:
3337:
3336:
3333:
3330:
3328:
3325:
3324:
3321:
3318:
3315:
3314:
3311:
3310:
3309:
3308:
3304:
3301:
3297:
3293:
3289:
1618:
1616:
1611:
1610:constant time
1607:
1606:index mapping
1418:"D"
1412:"M"
1406:"S"
1400:"A"
1378:
1376:
1375:linear search
1372:
1368:
1366:
1358:
1354:
1350:
1346:
1342:
1337:
1332:
1330:
1324:
1322:
1318:
1314:
1307:
1303:
1299:
1295:
1291:
1286:
1284:
1278:
1276:
1272:
1265:
1261:
1256:
1252:
1232:
1226:
1219:
1218:constant time
1215:
1211:
1210:
1209:
1208:
1201:
1196:
1193:
1188:
1187:linear search
1183:
1182:
1178:
1174:
1172:
1167:
1165:
1161:
1157:
1145:
1143:
1140:
1139:
1136:-->Divide
1135:
1133:
1130:
1129:
1125:
1123:
1120:
1119:
1115:
1113:
1110:
1109:
1105:
1103:
1100:
1099:
1096:
1093:
1090:
1089:
1086:
1085:
1084:
1083:
1079:
1077:
1073:
1069:
1065:
1061:
1057:
1052:
1050:
1046:
1038:
1036:
1034:
1030:
1026:
1022:
1018:
1017:constant time
1014:
1010:
1006:
1002:
997:
995:
991:
983:
981:
979:
974:
970:
964:
962:
958:
954:
950:
946:
942:
938:
934:
929:
927:
923:
919:
913:
911:
907:
903:
899:
891:
889:
887:
883:
879:
875:
871:
863:
861:
859:
853:
851:
847:
843:
839:
835:
831:
827:
823:
819:
814:
812:
808:
794:
791:
790:
786:
783:
782:
779:
776:
774:
771:
770:
767:
766:
765:
764:
763:
762:
758:
755:
753:
749:
745:
741:
737:
733:
729:
724:
722:
717:
713:
706:Table content
705:
703:
701:
697:
693:
689:
685:
681:
677:
672:
670:
666:
662:
658:
654:
650:
646:
642:
634:
632:
630:
625:
616:
614:
611:
608:to execute a
607:
603:
599:
596:
592:
586:
579:Branch tables
578:
576:
574:
570:
566:
561:
559:
555:
546:
543:
540:
537:
536:
532:
529:
526:
525:
522:
519:
516:
513:
512:
508:
505:
502:
501:
498:
495:
492:
489:
488:
484:
481:
478:
477:
474:
471:
468:
465:
464:
460:
457:
455:
452:
451:
447:
444:
441:
440:
436:
433:
431:
428:
427:
423:
421:
418:
416:
413:
412:
409:
406:
405:
403:
402:constant time
397:
395:
391:
387:
383:
379:
375:
371:
367:
366:architectures
363:
359:
355:
354:binary search
351:
350:linear search
347:
346:constant time
343:
339:
335:
331:
327:
319:
317:
315:
312:
308:
304:
300:
296:
288:
283:
279:
278:
275:
271:
267:
266:
262:
257:
253:
251:
247:
243:
239:
235:
231:
227:
223:
222:program label
219:
215:
213:
210:
206:
202:
201:
199:
198:
195:Typical usage
194:
192:
188:
186:
182:
178:
175:
171:
166:
165:
161:
157:
153:
149:
145:
140:
136:
132:
123:
113:
110:
102:
99:February 2009
91:
88:
84:
81:
77:
74:
70:
67:
63:
60: β
59:
55:
54:Find sources:
48:
44:
38:
37:
32:This article
30:
26:
21:
20:
4816:Control flow
4780:
4684:Donald Knuth
4656:
4651:
4634:
4629:
4618:
4592:. Retrieved
4585:the original
4572:
4557:
4553:
4464:
4453:
4446:
4438:
4431:
4420:
4412:
4409:Donald Knuth
4401:
4394:
4391:Donald Knuth
4379:
4354:
4333:
4282:
4270:
4201:(especially
4197:even by the
4155:
4128:
4114:
4092:, in that a
4083:
4066:"reflective"
4055:
4042:
4039:Spreadsheets
4033:
4027:
4021:
4005:
3998:
3991:
3985:-->Divide
3984:
3977:
3970:
3963:
3956:
3928:
3915:
3910:
3905:
3900:
3895:
3888:
3883:
3878:
3873:
3868:
3861:
3856:
3851:
3846:
3841:
3834:
3829:
3824:
3819:
3814:
3807:
3802:
3797:
3792:
3787:
3780:
3775:
3770:
3765:
3760:
3753:
3748:
3743:
3738:
3733:
3726:
3721:
3716:
3711:
3706:
3699:
3694:
3689:
3672:
3671:
3653:
3648:
3633:
3628:
3622:
3613:
3608:
3603:
3598:
3591:
3586:
3581:
3576:
3569:
3564:
3559:
3554:
3547:
3542:
3537:
3532:
3525:
3520:
3515:
3510:
3503:
3498:
3482:
3481:
3476:
3473:
3463:-->?other
3462:
3456:-->Divide
3455:
3448:
3441:
3434:
3427:
3399:
3388:
3379:
3374:
3367:
3362:
3355:
3350:
3343:
3338:
3331:
3326:
3319:
3306:
3305:
3299:
3291:
3287:
3285:
1615:housekeeping
1602:
1363:
1362:
1356:
1352:
1348:
1344:
1340:
1335:
1325:
1320:
1316:
1312:
1311:
1305:
1301:
1297:
1293:
1289:
1279:
1274:
1270:
1269:
1263:
1259:
1254:
1250:
1206:
1205:
1199:
1184:
1169:
1168:
1160:control flow
1153:
1141:
1131:
1121:
1111:
1101:
1081:
1080:
1056:lookup table
1053:
1042:
1029:Donald Knuth
1011:and for the
1004:
1000:
998:
987:
965:
957:machine code
949:branch table
930:
926:control flow
914:
895:
876:, such as a
872:storage, on
867:
854:
834:machine code
815:
811:asynchronous
804:
777:
772:
760:
759:
756:
725:
715:
709:
699:
673:
653:propositions
638:
617:
595:machine code
591:branch table
588:
585:Branch table
564:
562:
551:
544:
520:
496:
472:
407:
399:
398:
393:
358:lookup table
325:
323:
292:
258:applications
230:control flow
189:
167:
151:
139:control flow
130:
129:
105:
96:
86:
79:
72:
65:
53:
41:Please help
36:verification
33:
4472:Fred Brooks
4428:Jon Bentley
4351:expressions
4343:indirection
4312:memoization
4261:subroutines
4230:binary file
4221:subroutines
4190:and mostly
4165:detection,
4068:(a form of
4045:spreadsheet
1164:subroutines
994:spreadsheet
980:structure.
973:portability
858:enumerating
752:subroutines
700:implemented
692:subroutines
669:abstraction
661:interpreter
657:subroutines
641:Truth table
598:branch/jump
390:hexadecimal
364:). In most
348:(without a
280:similar to
274:interpreter
228:, to alter
224:or program
148:interpreter
4810:Categories
4669:References
4382:Peter Naur
4375:Quotations
4364:truth flag
4291:and "self
4267:efficiency
4217:primitives
4205:tables in
4195:understood
4192:inherently
4188:ubiquitous
4182:clarity β
4177:Advantages
4161:purposes,
3629:physically
1679:&&
1670:&&
1661:&&
1652:&&
1643:&&
1484:&&
1475:&&
1466:&&
1457:&&
1448:&&
1365:C language
1106:-->Add
1025:quotations
1013:C language
1001:compensate
933:efficiency
922:extensible
906:primitives
830:data types
748:primitives
734:(or other
573:heuristics
569:validation
394:guaranteed
218:subroutine
185:structures
177:references
69:newspapers
4645:1532-1886
4346:utilized)
4300:unsorted)
4159:debugging
4006:-->End
3964:-->Add
3686:alternate
3495:alternate
3435:-->Add
1045:arbitrary
969:platforms
878:flat file
307:algorithm
238:main loop
144:processor
4757:Archived
4720:Archived
4604:cite web
4479:See also
4468:β
4457:β
4443:β
4425:β
4406:β
4388:β
4385:studied.
4355:directly
4349:Complex
4339:overhead
4293:optimize
4163:hot spot
4137:overhead
4133:pointers
4086:bytecode
4074:raw data
3667:for loop
3663:DO WHILE
3477:implicit
1673:Multiply
1664:Subtract
1469:Multiply
1460:Subtract
990:overhead
961:snippets
941:language
882:database
880:or on a
838:pointers
744:pointers
736:run-time
629:overhead
330:raw data
326:directly
311:multimap
301:between
299:portable
282:bytecode
244:using a
220:number,
174:function
4297:metrics
4144:and or
4121:pointer
3945:pointer
3683:input 1
3492:input 1
3416:pointer
3316:input 1
3296:0-based
1646:Default
1487:Default
1367:example
1343:,00,00,
1315:(up to
1292:,00,00,
1273:(up to
1177:IBM/360
1173:example
1095:pointer
1091:input 1
1021:verbose
1005:improve
902:generic
818:encoded
795:action
787:action
740:indexes
716:implies
712:essence
680:boolean
565:minimum
342:pointer
209:pointer
158:-based
83:scholar
4643:
4594:17 May
4564:
4440:values
4308:memory
4236:source
4105:P-code
3690:subr #
3665:' or '
3499:subr #
3320:subr #
1691:static
1682:Divide
1622:static
1523:sizeof
1478:Divide
1427:static
1382:static
1329:binary
1283:binary
1255:direct
1192:binary
1068:SWITCH
947:using
870:static
846:SWITCH
824:used.
682:style
647:(or a
624:opcode
424:Array
386:EBCDIC
360:on an
334:offset
226:offset
212:lookup
135:tables
85:
78:
71:
64:
56:
4588:(PDF)
4581:(PDF)
4545:Notes
4422:table
4251:cache
4142:loops
4125:index
3948:array
3695:count
3649:after
3504:count
3419:array
3391:ASCII
1694:const
1625:const
1430:const
1385:const
1321:times
1264:times
1260:times
852:) ).
842:index
792:value
784:value
415:ASCII
382:ASCII
338:index
205:index
90:JSTOR
76:books
4641:ISSN
4610:link
4596:2016
4562:ISBN
4186:are
4146:jump
4129:data
3929:CT4P
3700:jump
3645:loop
3641:jump
3400:CT2P
3275:CT1p
3269:goto
3254:CT1x
1700:CT1x
1697:char
1634:CT1p
1628:void
1592:CT1p
1586:goto
1574:CT1p
1568:goto
1520:<
1439:CT1p
1433:void
1388:char
1175:for
1064:jump
1062:(or
1060:call
728:type
649:tree
556:and
430:null
248:for
133:are
62:news
4682:by
4271:all
4219:or
4064:or
3673:CT4
3657:or
3483:CT3
3307:CT2
3300:not
3288:not
1655:Add
1617:).
1562:CT1
1529:CT1
1502:int
1496:for
1451:Add
1391:CT1
1357:CT1
1306:CT1
1200:CT1
1082:CT1
1027:by
953:JIT
750:or
723:).
696:HLL
684:AND
552:In
533:00
509:00
485:00
461:00
448:00
437:00
420:Hex
384:or
352:or
340:or
240:in
203:an
172:or
146:or
45:by
4812::
4606:}}
4602:{{
4522:β
4430:,
4411:,
4393:,
4043:A
3292:do
3263:);
3242:};
1685:};
1559:==
1550:if
1538:++
1532:);
1490:};
1421:};
1353:02
1349:03
1345:04
1341:01
1302:08
1298:12
1294:16
1290:04
688:OR
620:If
615:.
589:A
545:02
541:53
530:..
527:..
521:03
517:4D
506:..
503:..
497:04
493:44
482:..
479:..
473:01
469:41
458:40
445:..
442:..
434:00
336:,
4612:)
4598:.
4370:)
4209:)
3916:1
3911:0
3906:6
3901:-
3896:-
3889:-
3884:0
3879:0
3874:?
3869:?
3862:-
3857:0
3852:4
3847:d
3842:D
3835:-
3830:0
3825:3
3820:m
3815:M
3808:-
3803:0
3798:2
3793:s
3788:S
3781:-
3776:0
3771:1
3766:a
3761:A
3754:-
3749:0
3744:7
3739:e
3734:E
3727:-
3722:0
3717:5
3712:-
3707:-
3639:(
3614:0
3609:0
3604:?
3599:?
3592:0
3587:4
3582:d
3577:D
3570:0
3565:3
3560:m
3555:M
3548:0
3543:2
3538:s
3533:S
3526:0
3521:1
3516:a
3511:A
3380:0
3375:?
3368:4
3363:D
3356:3
3351:M
3344:2
3339:S
3332:1
3327:A
3278:;
3272:*
3260:x
3257:(
3251:=
3248:i
3236:,
3230:,
3224:,
3218:,
3212:,
3206:,
3200:,
3194:,
3188:,
3182:,
3176:,
3170:,
3164:,
3158:,
3152:,
3146:,
3140:,
3134:,
3128:,
3122:,
3116:,
3110:,
3104:,
3098:,
3092:,
3086:,
3080:,
3074:,
3068:,
3062:,
3056:,
3050:,
3044:,
3038:,
3032:,
3026:,
3020:,
3014:,
3008:,
3002:,
2996:,
2990:,
2984:,
2978:,
2972:,
2966:,
2960:,
2954:,
2948:,
2942:,
2936:,
2930:,
2924:,
2918:,
2912:,
2906:,
2900:,
2894:,
2888:,
2882:,
2876:,
2870:,
2864:,
2858:,
2852:,
2846:,
2840:,
2834:,
2828:,
2822:,
2816:,
2810:,
2804:,
2798:,
2792:,
2786:,
2780:,
2774:,
2768:,
2762:,
2756:,
2750:,
2744:,
2738:,
2732:,
2726:,
2720:,
2714:,
2708:,
2702:,
2696:,
2690:,
2684:,
2678:,
2672:,
2666:,
2660:,
2654:,
2648:,
2642:,
2636:,
2630:,
2624:,
2618:,
2612:,
2606:,
2600:,
2594:,
2588:,
2582:,
2576:,
2570:,
2564:,
2558:,
2552:,
2546:,
2540:,
2534:,
2528:,
2522:,
2516:,
2510:,
2504:,
2498:,
2492:,
2486:,
2480:,
2474:,
2468:,
2462:,
2456:,
2450:,
2444:,
2438:,
2432:,
2426:,
2420:,
2414:,
2408:,
2402:,
2396:,
2390:,
2384:,
2378:,
2372:,
2366:,
2360:,
2354:,
2348:,
2342:,
2336:,
2330:,
2324:,
2318:,
2312:,
2306:,
2300:,
2294:,
2288:,
2282:,
2276:,
2270:,
2264:,
2258:,
2252:,
2246:,
2240:,
2234:,
2228:,
2222:,
2216:,
2210:,
2204:,
2198:,
2192:,
2186:,
2180:,
2174:,
2168:,
2162:,
2156:,
2150:,
2144:,
2138:,
2132:,
2126:,
2120:,
2114:,
2108:,
2102:,
2096:,
2090:,
2084:,
2078:,
2072:,
2066:,
2060:,
2054:,
2048:,
2042:,
2036:,
2030:,
2024:,
2018:,
2012:,
2006:,
2000:,
1994:,
1988:,
1982:,
1976:,
1970:,
1964:,
1958:,
1952:,
1946:,
1940:,
1934:,
1928:,
1922:,
1916:,
1910:,
1904:,
1898:,
1892:,
1886:,
1880:,
1874:,
1868:,
1862:,
1856:,
1850:,
1844:,
1838:,
1832:,
1826:,
1820:,
1814:,
1808:,
1802:,
1796:,
1790:,
1784:,
1778:,
1772:,
1766:,
1760:,
1754:,
1748:,
1742:,
1736:,
1730:,
1724:,
1718:,
1712:,
1706:{
1703:=
1676:,
1667:,
1658:,
1649:,
1640:{
1637:=
1631:*
1604:"
1595:;
1589:*
1580:}
1577:;
1571:*
1565:)
1556:x
1553:(
1547:{
1541:)
1535:i
1526:(
1517:i
1514:;
1511:0
1508:=
1505:i
1499:(
1481:,
1472:,
1463:,
1454:,
1445:{
1442:=
1436:*
1415:,
1409:,
1403:,
1397:{
1394:=
1371:C
1236:)
1233:1
1230:(
1227:O
1142:?
1132:D
1122:M
1112:S
1102:A
959:"
686:/
538:S
514:M
490:D
466:A
454:@
112:)
106:(
101:)
97:(
87:Β·
80:Β·
73:Β·
66:Β·
39:.
Text is available under the Creative Commons Attribution-ShareAlike License. Additional terms may apply.