summaryrefslogtreecommitdiff
path: root/doc/syntax-define
blob: 277fb54f2c58aeaa22cb19431507657e36404355 (plain)
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
Syntax of definition statements
-------------------------------

Definition statements start with one of 'def' or 'define'.  They may
also start 'acl' to look more squiddish.

The rough syntax of a definition statement is:

'def' <name> <controltype> <0-or-more-args>

There are some loose constraints on the name and controltype
arguments.  The name SHOULD NOT contain quote characters and MUST NOT
start with an exclamation point.  The controltype simply SHOULD NOT
contain quotes.

The control types are typically provided by the program which is using
Lace.  However Lace does provide some simple control types which can
be useful and callers are welcome to add them to their engines.

The two simplest control types Lace provides are the allof and anyof
controls.  They, as their arguments, take two or more rule names and
match if all or any (respectively) of their arguments resolve to true.
As with other parts of Lace, if the rule names are prefixed by
exclamation points then their result is inverted before being tested.

These give you ways to produce common subexpressions of the 'AND' and
'OR' forms to be used in later rules.

Lace also provides a match control type which does a string comparison
on a context value.  The match control type takes two arguments.  The
key to match and the value to test against.  If the value starts with
a tilde then Lace will use Lua pattern matches.  This is not a
terribly useful control type and is provided purely for simple cases
where the caller does not need more complex control types.