1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204
|
<HTML>
<!--
***********************************************************************
FUNNELWEB MANUAL WEB PAGE
=========================
Copyright (c) Ross N. Williams 1992,1999. All rights reserved.
Permission is granted to redistribute and use this manual in
any medium, with or without modification, provided that all
notices (including, without limitation, the copyright
notice, this permission notice, any record of modification,
and all legal notices) are preserved on all copies, that all
modifications are clearly marked, and that modified versions
are not represented as the original version unless all the
modifications since the manual's original release by Ross N.
Williams (www.ross.net) consist of translations or other
transformations that alter only the manual's form, not its
content. THIS MANUAL IS PROVIDED "AS IS" AND WITHOUT ANY
EXPRESS OR IMPLIED WARRANTIES, INCLUDING, WITHOUT
LIMITATION, THE IMPLIED WARRANTIES OF MERCHANTIBILITY AND
FITNESS FOR A PARTICULAR PURPOSE. TO THE EXTENT PERMITTED BY
LAW THERE IS ABSOLUTELY NO WARRANTY.
***********************************************************************
-->
<HEAD>
<TITLE>5.3 FunnelWeb the Martinet</TITLE>
<STYLE TYPE="text/css"> <!-- A {text-decoration: none} // --> </STYLE>
</HEAD>
<BODY BACKGROUND="binary/background.gif"
BGCOLOR="#FFFFFF"
TEXT="#000000"
VLINK="#660000"
LINK="#FF0000"
ALINK="#CC0000">
<TABLE WIDTH="490">
<TR>
<TD WIDTH="130" VALIGN="top">
<IMG SRC="binary/d_clear.gif" ALT="" WIDTH="130" HEIGHT="1"><BR>
<FONT SIZE="2">
<BR>
<A HREF="http://www.ross.net/"
TARGET="rosshome"
onClick="window.open('','rosshome','location,status,menubar,scrollbars,resizable',false).focus(); return true;"
>
<IMG SRC="binary/rossnet_logo.gif"
WIDTH="64" HEIGHT="32"
BORDER="0" ALT="RossNet"
HSPACE="0" VSPACE="1"></A><BR>
<BR>
<A HREF="../index.shtml"
TARGET="funnelweb"
onClick="window.open('','funnelweb','location,status,menubar,scrollbars,resizable',false).focus(); return true;"
>
<IMG SRC="binary/linklogo.gif"
WIDTH="64" HEIGHT="32"
BORDER="0" ALT="FunnelWeb"
HSPACE="0" VSPACE="1"></A><BR>
<BR>
<TABLE CELLSPACING=0 CELLPADDING=0 BORDER=0><TR><TD BGCOLOR="#000000">
<A HREF="../reference/index.html"
TARGET="funnelwebreference"
onClick="window.open('','funnelwebreference','location,status,menubar,scrollbars,resizable',false).focus(); return true;"
><FONT COLOR="#FFFFFF"><B>Reference</B></FONT></A><BR>
<BR>
<A HREF="../developer/index.html"
TARGET="funnelwebdeveloper"
onClick="window.open('','funnelwebdeveloper','location,status,menubar,scrollbars,resizable',false).focus(); return true;"
><FONT COLOR="#FFFFFF"><B>Developer</B></FONT></A><BR>
<BR>
<A HREF="index.html"><FONT COLOR="#FFFFFF"><B>Tutorial</B></FONT></A><BR>
<A HREF="intro.html"><FONT COLOR="#FFFFFF">1 Introduction</FONT></A><BR>
<A HREF="macro.html"><FONT COLOR="#FFFFFF">2 Macros</FONT></A><BR>
<A HREF="type.html"><FONT COLOR="#FFFFFF">3 Typesetting</FONT></A><BR>
<A HREF="example.html"><FONT COLOR="#FFFFFF">4 Example</FONT></A><BR>
<A HREF="hints.html"><FONT COLOR="#FFFFFF">5 Hints</FONT></A><BR>
<A HREF="examples.html"><FONT COLOR="#FFFFFF">6 Examples</FONT></A><BR>
<A HREF="web.html"><FONT COLOR="#FFFFFF">7 Webmaking</FONT></A><BR>
<BR>
<A HREF="search.html"><FONT COLOR="#FFFFFF"><B>SEARCH</B></FONT></A><BR>
</FONT>
</TD></TR></TABLE>
</TD>
<TD WIDTH="360" VALIGN="top">
<FONT SIZE="3">
<A HREF="../reference/index.html"><IMG SRC="binary/title.gif"
WIDTH="302" HEIGHT="24"
BORDER="0" ALT="FunnelWeb Tutorial Manual"
HSPACE="0" VSPACE="0"></A>
<P><FONT SIZE="5">5.3 FunnelWeb the Martinet</FONT><BR>
<P>There are many ways in which a macro preprocessor can
cause unexpected difficulties. FunnelWeb seeks to avoid many
of these problems by performing a number of checks. This
section describes some of the checks that FunnelWeb
performs.
<P><BLOCKQUOTE><B>Trailing blanks in the input
file:</B> Trailing blanks are usually
not dangerous, but FunnelWeb disallows them anyway. All
trailing blanks in the <I>input</I> (<SAMP>.fw</SAMP> file)
are flagged as errors by FunnelWeb. FunnelWeb does not flag
trailing blanks in any of its output files.</BLOCKQUOTE>
<P><BLOCKQUOTE><B>Input line length:</B> FunnelWeb has a maximum
input line length. If FunnelWeb
reads an input line longer than this length, it flags the
line with an error message. The maximum length can be
changed using a pragma (see the <A HREF="../reference/index.html"
TARGET="funnelwebreference"
onClick="window.open('','funnelwebreference','location,status,menubar,scrollbars,resizable',false).focus(); return true;"
>FunnelWeb Reference Manual</A>).</BLOCKQUOTE>
<P><BLOCKQUOTE><B>Product file line length:</B> FunnelWeb
watches the length of output lines and all output lines longer than the limit
are flagged with error messages. The maximum length can be
changed using a pragma. That FunnelWeb polices output lines
is very important. Some programs can behave very strangely
if they get an input line that is too long (e.g. Fortran
compilers can simply ignore text
past a certain column!) and once FunnelWeb starts expanding
macros using indentation, it is sometimes not obvious how
wide the product file will be.</BLOCKQUOTE>
<P><BLOCKQUOTE><B>Control characters:</B> The presence of
control characters in a text
file can result in some confusing behaviour downstream when
the file is presented to various programs. Unfortunately,
some text editors allow control
characters to be inserted into the text rather too easily,
and it is all too easy to be tripped up. FunnelWeb prevents
these problems by flagging with diagnostics all
non-end-of-line control characters detected in the input
(<SAMP>.fw</SAMP>) file (even TABs). The result is
that the user is guaranteed that product files generated
from FunnelWeb contain no unintentional control characters.
This said, FunnelWeb does allow the insertion of control
characters in the output file by explicitly specifying them
in the text using a <SAMP>@^</SAMP> control sequence.</BLOCKQUOTE>
<P><BLOCKQUOTE><B>Number of invocations:</B> FunnelWeb checks
the number of times that each
macro is called and issues an error if the total is not one.
The <SAMP>@Z</SAMP> (for zero) and <SAMP>@M</SAMP> (for many)
macro attributes can be used to bypass these checks.</BLOCKQUOTE>
<P><BLOCKQUOTE><B>Recursion:</B> Because
FunnelWeb does not provide any conditional constructs, all
recursively defined macros must, by definition, expand
infinitely*, and are therefore unacceptable. FunnelWeb
performs <I>static</I> checks to detect recursion,
detecting it before macro expansion commences. The user need
not fear that FunnelWeb will lock up or spew forth if a
recursive macro is accidentally specified.
(* Note: A special case exists where there is
recursion but no content. In this case, the expansion is
finite (the empty string) even though the operation of
expanding is infinite. FunnelWeb does not treat this case
specially).</BLOCKQUOTE>
<P>
<TABLE WIDTH="100%">
<TR>
<TD ALIGN="left" VALIGN="bottom"><A HREF="hints_qnames.html"><IMG SRC="binary/fw_left.gif" HEIGHT="32" WIDTH="32" BORDER="0" ALT="Prev"></A></TD>
<TD ALIGN="center" VALIGN="bottom"><A HREF="hints.html"><IMG SRC="binary/fw_up.gif" HEIGHT="32" WIDTH="32" BORDER="0" ALT="Up"></A></TD>
<TD ALIGN="right" VALIGN="bottom"><A HREF="hints_eols.html"><IMG SRC="binary/fw_right.gif" HEIGHT="32" WIDTH="32" BORDER="0" ALT="Next"></A></TD>
</TR>
</TABLE>
<HR>
<FONT SIZE="2">
<A HREF="mailto:webmaster@ross.net">Webmaster</A>
<A HREF="copyright.html">Copyright © Ross N. Williams 1992,1999. All rights reserved.</A><BR>
</FONT>
</FONT>
</TD>
</TR>
</TABLE>
</BODY>
<!-- *********************************************************************** -->
<!-- End Of A FunnelWeb Manual Web Page (www.ross.net/funnelweb/) -->
<!-- *********************************************************************** -->
</HTML>
|