General-Purpose Mail Filter
Functions or variables declared in another module must be imported prior to their actual use. MFL provides two ways of doing so: by requiring the entire module or by importing selected symbols from it.
require statement instructs the compiler to locate the
module modname and to load all public interfaces from it.
The compiler looks for the file modname.mf in the current search path (see include search path). If no such file is found, a compilation error is reported.
For example, the following statement:
imports all interfaces from the module revip.mf.
Another, more sophisticated way to import from a module is to use the ‘from ... import’ construct:
from module import symbols.
Note the final dot. The ‘from’ and ‘module’ statements are the only two constructs in MFL that require the delimiter.
The module has the same semantics as in the
construct. The symbols is a comma-separated list of symbol
names to import from module. A symbol name may be given in
Literals specify exact symbol names to import. For example, the following statement imports from module A.mf symbols ‘foo’ and ‘bar’:
from A import foo,bar.
Regular expressions must be surrounded by slashes. A regular expression instructs the compiler to import all symbols whose names match that expression. For example, the following statement imports from A.mf all symbols whose names begin with ‘foo’ and contain at least one digit after it:
from A import '/^foo.*[0-9]/'.
The type of regular expressions used in the ‘from’ statement is
#pragma regex (see regex).
Regular expression may be followed by a s-expression, i.e. a
sed-like expression of the form:
where regexp is a regular expression, replace is a replacement for each part of the input that matches regexp. S-expressions and their parts are discussed in detail in s-expression.
The effect of such construct is to import all symbols that match the regular expression and apply the s-expression to their names.
from A import '/^foo.*[0-9]/s/.*/my_&/'.
This statement imports all symbols whose names begin with ‘foo’ and contain at least one digit after it, and renames them, by prefixing their names with the string ‘my_’. Thus, if A.mf declared a function ‘foo_1’, it becomes visible under the name of ‘my_foo_1’.
This document was generated on January 3, 2019 using makeinfo.Verbatim copying and distribution of this entire article is permitted in any medium, provided this notice is preserved.