Compiling imperative code inside phrase or rule definitions. This is version 1.
-
-
What This Module Does - An overview of the imperative module's role and abilities.
-
-
Chapter 1: Configuration and Control
-
Imperative Module - Setting up the use of this module.
-
-
Chapter 2: Rules and Rulebooks
Rules are named phrases which are invoked in a particular way, and rulebooks a way to organise lists of them.
-
Rules - Rule structures abstract the Inform 7 concept of a rule, which may be defined either by an Inform 6 routine or by higher-level source text from a phrase structure. -
Rule Bookings - Bookings are assignments of rules to rulebooks. We can think of them as being looseleaf pages, of which we have an unlimited supply: any rule can be written on them, and they can be bound into any rulebook at any specified position. -
Rulebooks - To create, manage, compile and index rulebooks, the content of which is a linked list of booked rules together with some general conventions as to how they are to be used. -
Focus and Outcome - To look after the value or action on which a rulebook acts, and the possible outcomes it produces. -
Stacked Variables - To permit variables to have scopes intermediate between local and global: for example, to be shared by all rules in a given rulebook. -
Activities - To create and manage activities, which are action-like bundles of rules controlling how the I6 runtime code carries out tasks such as "printing the name of something". Each has its own page in the I7 documentation. An activity list is a disjunction of actitivies.
-
-
In which rules, To... phrases (and similar explicit instructions to do with specific changes in the world) have their preambles parsed and their premisses worked out, and are then collected together into rulebooks, before being compiled as a great mass of Inform 6 routines and arrays.
-
Introduction to Phrases - An exposition of the data structures used inside Inform to hold phrases, rules and rulebooks. -
Rule Subtrees - To tidy up invocation nodes into a list of children under the relevant rule node, and so turn each rule definition into a single subtree. -
Construction Sequence - To deal with all the |.i6t| interpreted commands which bring about the compilation of phrases, and to ensure that they are used in the correct order. -
Phrases - To create one |phrase| object for each phrase declaration in the source text. -
Phrase Usage - To parse the preamble of a phrase declaration to a phrase usage (PHUD) structure containing a mostly textual representation of the conditions for its usage. -
Phrase Runtime Context Data - To store the circumstances in which a rule phrase should fire. -
Phrase Type Data - To create, manage, compare the logical specificity of, and assist excerpt parsing concerning, the type of a To phrase. This involves whether it is void, determines a condition or returns a value (and if so, what kind of value); and also what parameters it takes (possibly values, possible other types used by inline definitions) and their types in turn. -
Describing Phrase Type Data - To convert phrase type data to and from text. -
Phrase Options - To create and subsequently parse against the list of phrase options with which the user can choose to invoke a To phrase. -
Phrases as Values - To provide the names of phrases as first-class values. -
To Phrases - To manage the sorting of To... phrases in logical precedence order, and keep track of which kinds they are being applied to. -
Timed Phrases - Another way phrases can be invoked is as timed events, which need no special Inform data structure and are simply compiled into a pair of timetable I6 arrays to be processed at run-time. -
Phrasebook Index - To compile most of the HTML page for the Phrasebook index.
-
-
Chapter 4: Compilation Context
Preparing a context at run-time in which code can be executed.
-
Local Variables - Local variables are used for call parameters, temporary values, and other ephemeral workspace. -
Phrase Blocks - Blocks of code are used to give conditionals and loops greater scope, as in more traditional programming languages. -
Stack Frames - When Inform compiles phrase invocations, or implied forms of these such as text substitutions, it does so in the context of a "stack frame". This provides for local "let" values, manages loop blocks, and in general looks after any information shared between a whole sequence of invocations. -
Chronology - To keep track of the state of things so that it will be possible in future to ask questions concerning the past.
-
-
Chapter 5: Compiling Propositions
Generating code to test or assert propositions from predicate calculus.
-
Compiling from Specifications - To compile specifications into Inform 6 values, conditions or void expressions. -
Emitting from Schemas - Here we emit code from an I6 schema. -
Compile Atoms - In this section, given an atom of a proposition we compile I6 code as required for any of three possible outcomes: (i) to test whether it is true, (ii) to make it henceforth true, or (iii) to make it henceforth false. -
Deciding to Defer - To decide whether a proposition can be compiled immediately, in the body of the current routine, or whether it must be deferred to a routine of its own, which is called from the current routine. -
Cinders and Deferrals - To compile terms, having carefully preserved any constants which might have been lost in the process of deferring a proposition (such tricky constants being called "cinders"). -
Compile Deferred Propositions - To compile the I6 routines needed to perform the tests or tasks deferred as being too difficult in their original contexts.
-
-
Chapter 6: Compiling Invocations
Generating code to perform individual phrases.
-
Invocations - Specifications which ask to use a phrase (which are "phrasal") indicate which phrase they intend by means of a list of "invocations". This list goes on to record the outcome of type-checking and provides instructions for code generation, as we see here. -
Parse Invocations - To register phrases with the excerpt parser, and to provide the excerpt parser with help in putting invocations together. -
Compile Invocations - Here we generate Inform 6 code to execute the phrase(s) called for by an invocation list. -
Compile Invocations As Calls - Here we generate Inform 6 code to execute the phrase(s) called for by an invocation list. -
Compile Invocations Inline - Here we generate Inform 6 code to execute the phrase(s) called for by an invocation list. -
Compile Phrases - Phrases defined with a list of invocations, rather than inline, have to be compiled to I6 routines, and this is where we organise that. -
Compile Arithmetic - To compile code performing an arithmetic operation. -
Compile Solutions to Equations - To compile code to solve an equation involving numerical quantities.
-
Powered by Inweb.