<spanclass="sectionpurpose">The top level of the Inform 7 compiler, reading command line arguments and preparing the way.</span></p>
</li>
<li>
<pclass="sectionentry"><ahref="1-wtc.html">
<sponclass="sectiontitle">What To Compile</span></a> -
<spanclass="sectionpurpose">To receive an instruction to compile something from Inbuild, and then to sort out the many locations then used in the host filing system.</span></p>
</li>
<li>
<pclass="sectionentry"><ahref="1-htc.html">
<sponclass="sectiontitle">How To Compile</span></a> -
<spanclass="sectionpurpose">The long production line on which products of Inform are built, one step at a time.</span></p>
<spanclass="sectionpurpose">This tiny section, the Lichtenstein of Inform, prints percentage of completion estimates so that the host application can intercept them and update its graphical progress bar.</span></p>
</li>
</ul>
</li>
<li>
<pclass="chapterentry"><aname="2"></a>
<spanclass="chaptertitle">Chapter 2: Bridge to Problems Module</span></p>
<pclass="chapterpurpose">The issuing of Problem messages.</p>
<spanclass="sectionpurpose">Some supplementary general sorts of problem message.</span></p>
</li>
<li>
<pclass="sectionentry"><ahref="2-pwst.html">
<sponclass="sectiontitle">Problems With Source Text</span></a> -
<spanclass="sectionpurpose">Errors with the source text, either lexical issues or major syntactic ones, are found when Inbuild reads the text in: what this section does is to collect and issue those errors as tidy Inform problem messages.</span></p>
</li>
</ul>
</li>
<li>
<pclass="chapterentry"><aname="3"></a>
<spanclass="chaptertitle">Chapter 3: Bridge to Words Module</span></p>
<pclass="chapterpurpose">Reading source text as a stream of characters and dividing it up into words.</p>
<spanclass="sectionpurpose">To manage definitions of natural languages, such as English or French, which may be used either to write Inform or to read the works it compiles.</span></p>
<spanclass="sectionpurpose">To register and deregister meanings for excerpts of text as nouns, adjectives, imperative phrases and other usages.</span></p>
<spanclass="sectionpurpose">This section masterminds the creation of the World and Kinds index pages, though it delegates much of the work elsewhere. Though it does belong to core Inform, these indexes will look pretty sparse if the spatial Plugins aren't plugged in.</span></p>
<spanclass="sectionpurpose">To create and manage binary predicates, which are the underlying data structures beneath Inform's relations.</span></p>
</li>
<li>
<pclass="sectionentry"><ahref="6-rlt.html">
<sponclass="sectiontitle">Relations</span></a> -
<spanclass="sectionpurpose">What Inform internally calls "binary predicates", the user calls "relations". In this section, we parse definitions of new relations and create the resulting |binary_predicate| objects.</span></p>
<pclass="chapterpurpose">In which the stream of words is broken up into sentences and built into a parse tree, recording primary verbs, noun phrases and some sub-clauses; and in which these sentences are collected under a hierarchy of headings, with material intended only for certain target virtual machines included or excluded as need be.</p>
<ulclass="sectionlist">
<li>
<pclass="sectionentry"><ahref="7-ptu.html">
<sponclass="sectiontitle">Parse Tree Usage</span></a> -
<spanclass="sectionpurpose">Shims for the parse tree.</span></p>
</li>
<li>
<pclass="sectionentry"><ahref="7-hdn.html">
<sponclass="sectiontitle">Headings</span></a> -
<spanclass="sectionpurpose">To keep track of the hierarchy of headings and subheadings found in the source text.</span></p>
<spanclass="sectionpurpose">To construct verb-phrase nodes in the parse tree.</span></p>
</li>
<li>
<pclass="sectionentry"><ahref="7-oaf.html">
<sponclass="sectiontitle">Of and From</span></a> -
<spanclass="sectionpurpose">To verify that "of" and "from" subtrees in assertion sentence noun phrases are validly used, and reconstruct their sentences without them if they are not.</span></p>
<spanclass="sectionpurpose">To tidy up |INVOCATION_LIST_NT| nodes into a list of children under the relevant |RULE_NT| node, and so turn each rule definition into a single subtree.</span></p>
<pclass="chapterpurpose">Extensions of more sentences must be Included as requested; because of which, we also handle extension installation, uninstallation and documentation here.</p>
<spanclass="sectionpurpose">To keep details of the extensions currently loaded, their authors, titles, versions and rubrics, and to index and credit them suitably.</span></p>
</li>
</ul>
</li>
<li>
<pclass="chapterentry"><aname="9"></a>
<spanclass="chaptertitle">Chapter 9: The A-Parser</span></p>
<pclass="chapterpurpose">We work through the assertion sentences in the parse tree one by one, and formulate logical propositions which must be true statements about the model world.</p>
<ulclass="sectionlist">
<li>
<pclass="sectionentry"><ahref="9-ita.html">
<sponclass="sectiontitle">Introduction to Assertions</span></a> -
<spanclass="sectionpurpose">A general introduction to how the A-parser deals with assertions.</span></p>
</li>
<li>
<pclass="sectionentry"><ahref="9-tfa.html">
<sponclass="sectiontitle">Traverse for Assertions</span></a> -
<spanclass="sectionpurpose">To manage the overall process of traversing the parse tree for assertion sentences.</span></p>
</li>
<li>
<pclass="sectionentry"><ahref="9-tbath.html">
<sponclass="sectiontitle">To Be and To Have</span></a> -
<spanclass="sectionpurpose">To handle sentences with primary verb "to be" or "to have".</span></p>
<spanclass="sectionpurpose">To determine which subjects are referred to by noun phrases such as "the table" and "a paper cup" found in assertion sentences being parsed.</span></p>
<spanclass="sectionpurpose">To read assertion sentences, sort them according to a detailed grammatical classification and take the primary actions necessary either to generate problem messages, or to infer information.</span></p>
<spanclass="sectionpurpose">This section draws inferences from assertions which seem to be about the properties of things, independent of their location.</span></p>
<spanclass="sectionpurpose">This section draws inferences about the relationships between objects or values.</span></p>
</li>
<li>
<pclass="sectionentry"><ahref="9-ass.html">
<sponclass="sectiontitle">Assemblies</span></a> -
<spanclass="sectionpurpose">To build the complex multi-object assemblies which result from allowing the source text to say things like "in every room is a vehicle".</span></p>
<spanclass="sectionpurpose">To keep track of a dangerous form of super-assertion called an implication, which is allowed to generalise about properties.</span></p>
<spanclass="sectionpurpose">To parse sentences which create new properties, or assert that particular kinds of value can possess them.</span></p>
</li>
</ul>
</li>
<li>
<pclass="chapterentry"><aname="10"></a>
<spanclass="chaptertitle">Chapter 10: The S-Parser</span></p>
<pclass="chapterpurpose">In which the S-parser is put to work: excerpts of several words at a time are assigned meanings, and compound statements formed of these are parsed, producing lists of possible interpretations.</p>
<ulclass="sectionlist">
<li>
<pclass="sectionentry"><ahref="10-aots.html">
<sponclass="sectiontitle">Architecture of the S-Parser</span></a> -
<spanclass="sectionpurpose">Top-level structure of the S-parser, which turns text into S-nodes.</span></p>
<spanclass="sectionpurpose">To decide if an excerpt of text is a value referred to notationally rather than by name.</span></p>
</li>
<li>
<pclass="sectionentry"><ahref="10-cad.html">
<sponclass="sectiontitle">Constants and Descriptions</span></a> -
<spanclass="sectionpurpose">To parse noun phrases in constant contexts, which specify values either explicitly or by describing them more or less vaguely.</span></p>
</li>
<li>
<pclass="sectionentry"><ahref="10-teav.html">
<sponclass="sectiontitle">Type Expressions and Values</span></a> -
<spanclass="sectionpurpose">To parse two forms of noun: a noun phrase in a sentence, and a description of what text can be written in a given situation.</span></p>
</li>
<li>
<pclass="sectionentry"><ahref="10-varc.html">
<sponclass="sectiontitle">Verbal and Relative Clauses</span></a> -
<spanclass="sectionpurpose">To break down an excerpt into NP and VP-like clauses, perhaps with a primary verb (to make a sentence), perhaps only a relative clause (to make a more complex NP).</span></p>
</li>
<li>
<pclass="sectionentry"><ahref="10-cap.html">
<sponclass="sectiontitle">Conditions and Phrases</span></a> -
<spanclass="sectionpurpose">To parse the text of To... phrases, say phrases and conditions.</span></p>
<pclass="chapterpurpose">In which the meaning of an S-parsed sentence is converted to a statement in predicate calculus, so that verbs and prepositions become relations, while determiners express quantifiers; this produces a mathematical proposition which can be simplified according to logical rules which change its form but not its meaning.</p>
<ulclass="sectionlist">
<li>
<pclass="sectionentry"><ahref="11-itpc.html">
<sponclass="sectiontitle">Introduction to Predicate Calculus</span></a> -
<spanclass="sectionpurpose">An exposition of the form of predicate calculus used by Inform.</span></p>
</li>
<li>
<pclass="sectionentry"><ahref="11-tr.html">
<sponclass="sectiontitle">Terms</span></a> -
<spanclass="sectionpurpose">Terms are the representations of values in predicate calculus: variables, constants or functions of other terms.</span></p>
<spanclass="sectionpurpose">To build and modify structures representing propositions in predicate calculus.</span></p>
</li>
<li>
<pclass="sectionentry"><ahref="11-bas.html">
<sponclass="sectiontitle">Binding and Substitution</span></a> -
<spanclass="sectionpurpose">To substitute constants into propositions in place of variables, and to apply quantifiers to bind any unbound variables.</span></p>
<spanclass="sectionpurpose">The second of the three sources of propositions to conjure with: those which arise from subtrees constructed by the A-parser.</span></p>
<spanclass="sectionpurpose">The third of the three sources of propositions to conjure with: those which arise by the parsing of complex sentence trees in the S-grammar.</span></p>
<spanclass="sectionpurpose">A set of operations each of which takes a proposition and either leaves it unchanged or replaces it with a simpler one logically equivalent to the original.</span></p>
<spanclass="sectionpurpose">Predicate calculus is a largely symbolic exercise, and its rules of working tend to assume that all predicates are meaningful for all terms: this means, for instance, that "if blue is 14" is likely to make a well-formed sentence in predicate calculus. In this section we reject such propositions on the grounds that they violate type-checking requirements on relations -- in this example, the equality relation.</span></p>
</li>
</ul>
</li>
<li>
<pclass="chapterentry"><aname="12"></a>
<spanclass="chaptertitle">Chapter 12: Use of Propositions</span></p>
<pclass="chapterpurpose">This is where the propositions generated by the A-parser and the S-parser are at last acted upon, either immediately (generating inferences) or at run-time (by causing code to be compiled which will some day test or assert the truth of the proposition).</p>
<spanclass="sectionpurpose">To declare that a given proposition is a true statement about the state of the world when play begins.</span></p>
</li>
<li>
<pclass="sectionentry"><ahref="12-is.html">
<sponclass="sectiontitle">I6 Schemas</span></a> -
<spanclass="sectionpurpose">To create, and later expand upon, short prototypes of I6 syntax for such run-time tasks as the setting, unsetting or testing of a relation.</span></p>
<spanclass="sectionpurpose">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.</span></p>
</li>
<li>
<pclass="sectionentry"><ahref="12-dtd.html">
<sponclass="sectiontitle">Deciding to Defer</span></a> -
<spanclass="sectionpurpose">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.</span></p>
</li>
<li>
<pclass="sectionentry"><ahref="12-cad.html">
<sponclass="sectiontitle">Cinders and Deferrals</span></a> -
<spanclass="sectionpurpose">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").</span></p>
<spanclass="sectionpurpose">To compile the I6 routines needed to perform the tests or tasks deferred as being too difficult in their original contexts.</span></p>
</li>
</ul>
</li>
<li>
<pclass="chapterentry"><aname="13"></a>
<spanclass="chaptertitle">Chapter 13: Bridge to Kinds Module</span></p>
<pclass="chapterpurpose">In which values are categorised by their natures, and these in turn occupy a hierarchy.</p>
<ulclass="sectionlist">
<li>
<pclass="sectionentry"><ahref="13-kak.html">
<sponclass="sectiontitle">Knowledge about Kinds</span></a> -
<spanclass="sectionpurpose">How kinds can be inference subjects.</span></p>
<spanclass="sectionpurpose">To produce most of the Kinds page in the Index for a project: the chart at the top, and the detailed entries below.</span></p>
<pclass="chapterpurpose">In which the meanings of excerpts are systematically catalogued according to what they specify; a categorisation much broader than working out kinds of value, since it applies to a much broader range of excerpts than values.</p>
<spanclass="sectionpurpose">Description nodes represent text such as "even numbers", which can either define a set of values or a predicate on them.</span></p>
</li>
<li>
<pclass="sectionentry"><ahref="14-cfs.html">
<sponclass="sectiontitle">Compiling from Specifications</span></a> -
<spanclass="sectionpurpose">To compile specifications into Inform 6 values, conditions or void expressions.</span></p>
</li>
<li>
<pclass="sectionentry"><ahref="14-ds2.html">
<sponclass="sectiontitle">Dash</span></a> -
<spanclass="sectionpurpose">Dash is the part of Inform most nearly like a typechecker in a conventional compiler.</span></p>
<pclass="chapterpurpose">Properties are named values attached to elements of the world model; not only objects, but also other enumerated constant values, and so on.</p>
<ulclass="sectionlist">
<li>
<pclass="sectionentry"><ahref="15-pr.html">
<sponclass="sectiontitle">Properties</span></a> -
<spanclass="sectionpurpose">Elements of the model world, such as objects, have properties associated with them. Here we look after the identities of these different properties.</span></p>
<spanclass="sectionpurpose">To look after the indefinite appearance pseudo-property, used when the source text comments on something with a sentence consisting only of a double-quoted literal text.</span></p>
<spanclass="sectionpurpose">To define adjectives such as large, wide or roomy, which make implicit comparisons of the size of some numerical property, and which (unlike other adjectives) lead to comparative and superlative forms.</span></p>
<spanclass="sectionpurpose">To feed the hierarchy of instances and their property values into Inter.</span></p>
</li>
</ul>
</li>
<li>
<pclass="chapterentry"><aname="16"></a>
<spanclass="chaptertitle">Chapter 16: Inference and Model</span></p>
<pclass="chapterpurpose">Having now essentially disposed of the original assertion sentences by converting them to propositions, which in turn generated basic inferences about the model world, we must now resolve this mass of facts, applying Occam's Razor to construct the simplest explicit model of the world which fits this knowledge.</p>
<spanclass="sectionpurpose">The different data structures for elements of the model world are all unified by a single concept, the inference subject, about which facts can be known.</span></p>
<spanclass="sectionpurpose">To enforce the domain of properties: for instance, that a door can be open or closed but that an animal cannot, or that a person can have a carrying capacity but that a door cannot.</span></p>
</li>
<li>
<pclass="sectionentry"><ahref="16-in.html">
<sponclass="sectiontitle">Inferences</span></a> -
<spanclass="sectionpurpose">To manage the individual pieces of information gathered, with varying degrees of certainty, from assertion sentences. This is mostly information about which objects have what properties.</span></p>
</li>
<li>
<pclass="sectionentry"><ahref="16-cmw.html">
<sponclass="sectiontitle">Complete Model World</span></a> -
<spanclass="sectionpurpose">Once the assertions have all been read and reduced to inferences, and all the creations have been made, we take stock; sometimes we spot inconsistencies, sometimes we make deductions, and we try to complete our picture of the model world.</span></p>
</li>
<li>
<pclass="sectionentry"><ahref="16-cmw2.html">
<sponclass="sectiontitle">Compile Model World</span></a> -
<spanclass="sectionpurpose">To manage the compilation of the diverse run-time arrays and/or code needed to set up the initial state of the model world.</span></p>
<spanclass="sectionpurpose">A plugin which maintains run-time-accessible linked lists of instances of kinds, in order to speed up loops; and instance counts within kinds, in order to speed up relation storage; and the object-kind hierarchy, in order to speed up run-time checking of the type safety of property usage.</span></p>
</li>
</ul>
</li>
<li>
<pclass="chapterentry"><aname="17"></a>
<spanclass="chaptertitle">Chapter 17: Text Data</span></p>
<pclass="chapterpurpose">Text literals, which may be constant strings, or may be functions in order to implement substitutions.</p>
<spanclass="sectionpurpose">To manage the named columns which appear in tables.</span></p>
</li>
<li>
<pclass="sectionentry"><ahref="19-tb.html">
<sponclass="sectiontitle">Tables</span></a> -
<spanclass="sectionpurpose">To manage and compile tables, which are two-dimensional arrays with associative look-up facilities provided at run-time.</span></p>
</li>
<li>
<pclass="sectionentry"><ahref="19-rsft.html">
<sponclass="sectiontitle">Runtime Support for Tables</span></a> -
<spanclass="sectionpurpose">To compile run-time data structures holding tables.</span></p>
</li>
<li>
<pclass="sectionentry"><ahref="19-tod.html">
<sponclass="sectiontitle">Tables of Definitions</span></a> -
<spanclass="sectionpurpose">To support tables which amount to massed groups of assertions.</span></p>
<spanclass="sectionpurpose">To define the binary predicates corresponding to table columns, and which determine whether a given value is listed in that column.</span></p>
<pclass="chapterpurpose">Simple mathematical or scientific equations, which can be solved at run-time.</p>
<ulclass="sectionlist">
<li>
<pclass="sectionentry"><ahref="20-eq.html">
<sponclass="sectiontitle">Equations</span></a> -
<spanclass="sectionpurpose">To manage and compile equations, which relate numerical quantities.</span></p>
</li>
</ul>
</li>
<li>
<pclass="chapterentry"><aname="21"></a>
<spanclass="chaptertitle">Chapter 21: Rules and Rulebooks</span></p>
<pclass="chapterpurpose">Rules are named phrases which are invoked in a particular way, and rulebooks a way to organise lists of them.</p>
<ulclass="sectionlist">
<li>
<pclass="sectionentry"><ahref="21-rl.html">
<sponclass="sectiontitle">Rules</span></a> -
<spanclass="sectionpurpose">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.</span></p>
<spanclass="sectionpurpose">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.</span></p>
</li>
<li>
<pclass="sectionentry"><ahref="21-rl2.html">
<sponclass="sectiontitle">Rulebooks</span></a> -
<spanclass="sectionpurpose">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.</span></p>
</li>
<li>
<pclass="sectionentry"><ahref="21-fao.html">
<sponclass="sectiontitle">Focus and Outcome</span></a> -
<spanclass="sectionpurpose">To look after the value or action on which a rulebook acts, and the possible outcomes it produces.</span></p>
<spanclass="sectionpurpose">To parse and act upon explicit sentences like "The fire alarm rule is listed after the burglar alarm rule in the House Security rules."</span></p>
<spanclass="sectionpurpose">To permit variables to have scopes intermediate between local and global: for example, to be shared by all rules in a given rulebook.</span></p>
</li>
<li>
<pclass="sectionentry"><ahref="21-ac.html">
<sponclass="sectiontitle">Activities</span></a> -
<spanclass="sectionpurpose">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.</span></p>
<pclass="chapterpurpose">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.</p>
<ulclass="sectionlist">
<li>
<pclass="sectionentry"><ahref="22-itp.html">
<sponclass="sectiontitle">Introduction to Phrases</span></a> -
<spanclass="sectionpurpose">An exposition of the data structures used inside Inform to hold phrases, rules and rulebooks.</span></p>
<spanclass="sectionpurpose">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.</span></p>
</li>
<li>
<pclass="sectionentry"><ahref="22-ph.html">
<sponclass="sectiontitle">Phrases</span></a> -
<spanclass="sectionpurpose">To create one |phrase| object for each phrase declaration in the source text.</span></p>
<spanclass="sectionpurpose">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.</span></p>
<spanclass="sectionpurpose">To store the circumstances in which a rule phrase should fire.</span></p>
</li>
<li>
<pclass="sectionentry"><ahref="22-ptd.html">
<sponclass="sectiontitle">Phrase Type Data</span></a> -
<spanclass="sectionpurpose">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.</span></p>
</li>
<li>
<pclass="sectionentry"><ahref="22-dptd.html">
<sponclass="sectiontitle">Describing Phrase Type Data</span></a> -
<spanclass="sectionpurpose">To convert phrase type data to and from text.</span></p>
<spanclass="sectionpurpose">To create and subsequently parse against the list of phrase options with which the user can choose to invoke a To phrase.</span></p>
</li>
<li>
<pclass="sectionentry"><ahref="22-pav.html">
<sponclass="sectiontitle">Phrases as Values</span></a> -
<spanclass="sectionpurpose">To provide the names of phrases as first-class values.</span></p>
</li>
<li>
<pclass="sectionentry"><ahref="22-tp.html">
<sponclass="sectiontitle">To Phrases</span></a> -
<spanclass="sectionpurpose">To manage the sorting of To... phrases in logical precedence order, and keep track of which kinds they are being applied to.</span></p>
<spanclass="sectionpurpose">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.</span></p>
<spanclass="sectionpurpose">The second of four ways phrases are invoked: as definitions of adjectives which can be used as unary predicates in the calculus. (And we also look after adjectives arising from I6 or I7 conditions, and from I6 routines.)</span></p>
</li>
<li>
<pclass="sectionentry"><ahref="23-abrp.html">
<sponclass="sectiontitle">Adjectives by Raw Phrase</span></a> -
<spanclass="sectionpurpose">Defining an adjective with an I6 routine.</span></p>
</li>
<li>
<pclass="sectionentry"><ahref="23-abrc.html">
<sponclass="sectiontitle">Adjectives by Raw Condition</span></a> -
<spanclass="sectionpurpose">Defining an adjective with an I6 condition.</span></p>
</li>
<li>
<pclass="sectionentry"><ahref="23-abp.html">
<sponclass="sectiontitle">Adjectives by Phrase</span></a> -
<spanclass="sectionpurpose">Adjectives defined by an I7 phrase.</span></p>
</li>
<li>
<pclass="sectionentry"><ahref="23-abc.html">
<sponclass="sectiontitle">Adjectives by Condition</span></a> -
<spanclass="sectionpurpose">Defining an adjective with an I7 condition.</span></p>
<spanclass="sectionpurpose">Blocks of code are used to give conditionals and loops greater scope, as in more traditional programming languages.</span></p>
<spanclass="sectionpurpose">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.</span></p>
</li>
<li>
<pclass="sectionentry"><ahref="24-ch.html">
<sponclass="sectiontitle">Chronology</span></a> -
<spanclass="sectionpurpose">To keep track of the state of things so that it will be possible in future to ask questions concerning the past.</span></p>
<spanclass="sectionpurpose">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.</span></p>
<spanclass="sectionpurpose">To register phrases with the excerpt parser, and to provide the excerpt parser with help in putting invocations together.</span></p>
<spanclass="sectionpurpose">Phrases defined with a list of invocations, rather than inline, have to be compiled to I6 routines, and this is where we organise that.</span></p>
<spanclass="sectionpurpose">Inter constants for, say, extremal number values, which depend on the target we are compiling to, and are generally low-level in nature.</span></p>
<spanclass="sectionpurpose">I7 is has no Dijkstra-like conscience about compiling code which is full of |jump| statements, and these require labels to jump to. This section provides those labels, and other related unique-ID-number counters.</span></p>
<spanclass="sectionpurpose">A rudimentary but useful testing system built in to IF produced by Inform, allowing short sequences of commands to be concisely noted in the source text and tried out in the Inform application using the TEST command.</span></p>
<spanclass="sectionpurpose">This routine has to be placed close to the end of the code for boring compilation order reasons, not because it belongs here.</span></p>
</li>
</ul>
</li>
<li>
<pclass="chapterentry"><aname="27"></a>
<spanclass="chaptertitle">Chapter 27: Bridge to Inter Module</span></p>
<pclass="chapterpurpose">Emitting Inter code ready for the code-generator.</p>
<spanclass="sectionpurpose">To identify which parts of the source text come from which source (the main source text, the Standard Rules, or another extension).</span></p>