1
0
Fork 0
mirror of https://github.com/ganelson/inform.git synced 2024-07-05 08:34:22 +03:00
inform7/docs/if-module/P-wtmd.html
2021-03-16 09:08:31 +00:00

145 lines
9.7 KiB
HTML

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>What This Module Does</title>
<link href="../docs-assets/Breadcrumbs.css" rel="stylesheet" rev="stylesheet" type="text/css">
<meta name="viewport" content="width=device-width initial-scale=1">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<meta http-equiv="Content-Language" content="en-gb">
<link href="../docs-assets/Contents.css" rel="stylesheet" rev="stylesheet" type="text/css">
<link href="../docs-assets/Progress.css" rel="stylesheet" rev="stylesheet" type="text/css">
<link href="../docs-assets/Navigation.css" rel="stylesheet" rev="stylesheet" type="text/css">
<link href="../docs-assets/Fonts.css" rel="stylesheet" rev="stylesheet" type="text/css">
<link href="../docs-assets/Base.css" rel="stylesheet" rev="stylesheet" type="text/css">
<link href="../docs-assets/Colours.css" rel="stylesheet" rev="stylesheet" type="text/css">
</head>
<body class="commentary-font">
<nav role="navigation">
<h1><a href="../index.html">
<img src="../docs-assets/Inform.png" height=72">
</a></h1>
<ul><li><a href="../compiler.html">compiler tools</a></li>
<li><a href="../other.html">other tools</a></li>
<li><a href="../extensions.html">extensions and kits</a></li>
<li><a href="../units.html">unit test tools</a></li>
</ul><h2>Compiler Webs</h2><ul>
<li><a href="../inbuild/index.html">inbuild</a></li>
<li><a href="../inform7/index.html">inform7</a></li>
<li><a href="../inter/index.html">inter</a></li>
</ul><h2>Inbuild Modules</h2><ul>
<li><a href="../supervisor-module/index.html">supervisor</a></li>
</ul><h2>Inform7 Modules</h2><ul>
<li><a href="../core-module/index.html">core</a></li>
<li><a href="../assertions-module/index.html">assertions</a></li>
<li><a href="../values-module/index.html">values</a></li>
<li><a href="../knowledge-module/index.html">knowledge</a></li>
<li><a href="../imperative-module/index.html">imperative</a></li>
<li><a href="../runtime-module/index.html">runtime</a></li>
<li><a href="index.html"><span class="selectedlink">if</span></a></li>
<li><a href="../multimedia-module/index.html">multimedia</a></li>
<li><a href="../index-module/index.html">index</a></li>
</ul><h2>Inter Modules</h2><ul>
<li><a href="../bytecode-module/index.html">bytecode</a></li>
<li><a href="../building-module/index.html">building</a></li>
<li><a href="../codegen-module/index.html">codegen</a></li>
</ul><h2>Services</h2><ul>
<li><a href="../arch-module/index.html">arch</a></li>
<li><a href="../calculus-module/index.html">calculus</a></li>
<li><a href="../html-module/index.html">html</a></li>
<li><a href="../inflections-module/index.html">inflections</a></li>
<li><a href="../kinds-module/index.html">kinds</a></li>
<li><a href="../linguistics-module/index.html">linguistics</a></li>
<li><a href="../problems-module/index.html">problems</a></li>
<li><a href="../syntax-module/index.html">syntax</a></li>
<li><a href="../words-module/index.html">words</a></li>
<li><a href="../../../inweb/docs/foundation-module/index.html">foundation</a></li>
</ul>
</nav>
<main role="main">
<!--Weave of 'What This Module Does' generated by Inweb-->
<div class="breadcrumbs">
<ul class="crumbs"><li><a href="../index.html">Home</a></li><li><a href="../compiler.html">Inform7</a></li><li><a href="index.html">if</a></li><li><a href="index.html#P">Preliminaries</a></li><li><b>What This Module Does</b></li></ul></div>
<p class="purpose">An overview of the if module's role and abilities.</p>
<ul class="toc"><li><a href="P-wtmd.html#SP1">&#167;1. Prerequisites</a></li><li><a href="P-wtmd.html#SP2">&#167;2. So many plugins</a></li></ul><hr class="tocbar">
<p class="commentary firstcommentary"><a id="SP1" class="paragraph-anchor"></a><b>&#167;1. Prerequisites. </b>The if module is a part of the Inform compiler toolset. It is presented as a
literate program or "web". Before diving in:
</p>
<ul class="items"><li>(a) It helps to have some experience of reading webs: see <a href="../../../inweb/docs/index.html" class="internal">inweb</a> for more.
</li><li>(b) The module is written in C, in fact ANSI C99, but this is disguised by the
fact that it uses some extension syntaxes provided by the <a href="../../../inweb/docs/index.html" class="internal">inweb</a> literate
programming tool, making it a dialect of C called InC. See <a href="../../../inweb/docs/index.html" class="internal">inweb</a> for
full details, but essentially: it's C without predeclarations or header files,
and where functions have names like <span class="extract"><span class="extract-syntax">Tags::add_by_name</span></span> rather than just <span class="extract"><span class="extract-syntax">add_by_name</span></span>.
</li><li>(c) This module uses other modules drawn from the <a href="../compiler.html" class="internal">compiler</a>, and also
uses a module of utility functions called <a href="../../../inweb/docs/foundation-module/index.html" class="internal">foundation</a>.
For more, see <a href="../../../inweb/docs/foundation-module/P-abgtf.html" class="internal">A Brief Guide to Foundation (in foundation)</a>.
</li></ul>
<p class="commentary firstcommentary"><a id="SP2" class="paragraph-anchor"></a><b>&#167;2. So many plugins. </b>This module consists entirely of plugins, and when they are all inactive,
as for example with a Basic Inform project, it's as if the module does not exist
at all: it does nothing.
</p>
<p class="commentary">The module is divided into four substantive parts, which form Chapters 2 to 5,
and are largely independent of each other:
</p>
<ul class="items"><li>&#9679; <a href="2-bd.html" class="internal">Chapter 2: Bibliographic Data</a> is a single plugin, "bibliographic data".
This manages metadata on projects, notably the Interactive Fiction ID, and
follows a number of Internet standards for such things. <a href="2-ri.html" class="internal">Release Instructions</a>
collates release details included in the source text, and acts as a bridge to
the releasing agent <a href="../inblorb/index.html" class="internal">inblorb</a>.
</li><li>&#9679; <a href="3-sm.html" class="internal">Chapter 3: Space and Time</a>, by contrast, is made up of many individual
plugins, which can independently be active or not: collectively they form the
usual model world for interactive fiction, but it's possible, for example,
to remove the concept of a geographical map, or of scenes, and still have
the rest.
</li><li>&#9679; <a href="4-ap.html" class="internal">Chapter 4: Actions</a> is the single plugin "actions", which provides a
framework for how agents in the world model can perform simple tasks such as
picking things up, or going from place to place.
</li><li>&#9679; <a href="5-pp.html" class="internal">Chapter 5: Command Parser</a> is the single plugin "parsing", and
provides for command parsing. Projects using other mechanisms for having
the reader interact with them do not need this, and can deactivate the plugin.
</li></ul>
<p class="commentary firstcommentary"><a id="SP3" class="paragraph-anchor"></a><b>&#167;3. </b>Grammar is organised in a three-level hierarchy:
</p>
<ul class="items"><li>(a) A command grammar (CG) is a small independent grammar of alternative
formulations for some concept: for instance, the possible commands beginning
TAKE, or the possible verbal forms of numbers. Each CG is a list of CGLs, and
an individual CGL must belong to exactly one CG. There are five different
types of CG, differentiated mostly by the purpose to which the CG is put:
<ul class="items"><li>(1) <span class="extract"><span class="extract-syntax">CG_IS_COMMAND</span></span>. An imperative verbal command at run-time.
</li><li>(2) <span class="extract"><span class="extract-syntax">CG_IS_TOKEN</span></span>. A square-bracketed token in other grammar.
</li><li>(3) <span class="extract"><span class="extract-syntax">CG_IS_SUBJECT</span></span>. A noun phrase at run time: a name for an object.
</li><li>(4) <span class="extract"><span class="extract-syntax">CG_IS_VALUE</span></span>. A noun phrase at run time: a name for a value.
</li><li>(5) <span class="extract"><span class="extract-syntax">CG_IS_CONSULT</span></span>. A pattern to match in part of a command (such as "consult").
</li><li>(6) <span class="extract"><span class="extract-syntax">CG_IS_PROPERTY_NAME</span></span>. A noun phrase at run time: a name for one
possibility for an either/or property, say "open" or "fixed in place".
</li></ul>
<li>(b) A grammar line (CGL) is a single possibility within a CG: for
example, the line matching <span class="extract"><span class="extract-syntax">"take [something]"</span></span> in the CG for the TAKE
command. Each CGL is a list of tokens, and an individual token must belong
to exactly one CGL.
</li><li>(c) A grammar token (GTOK) is a single particle of a CGL: for
example, <span class="extract"><span class="extract-syntax">'take'</span></span> and <span class="extract"><span class="extract-syntax">something</span></span> are tokens.
</li></ul>
<p class="commentary">The picture is not quite so hierarchical as it looks, though, because
a CG naming a token can be used as a token inside other CGs. We need to
be careful that this does not lead to infinite regress: see below.
</p>
<nav role="progress"><div class="progresscontainer">
<ul class="progressbar"><li class="progressprevoff">&#10094;</li><li class="progresscurrentchapter">P</li><li class="progresscurrent">wtmd</li><li class="progresschapter"><a href="1-im.html">1</a></li><li class="progresschapter"><a href="2-bd.html">2</a></li><li class="progresschapter"><a href="3-sm.html">3</a></li><li class="progresschapter"><a href="4-ap.html">4</a></li><li class="progresschapter"><a href="5-pp.html">5</a></li><li class="progressnext"><a href="1-im.html">&#10095;</a></li></ul></div>
</nav><!--End of weave-->
</main>
</body>
</html>