altos/scheme: Support scheme subsetting via feature settings
[fw/altos] / src / scheme / ao_scheme_read.h
1 /*
2  * Copyright © 2016 Keith Packard <keithp@keithp.com>
3  *
4  * This program is free software; you can redistribute it and/or modify
5  * it under the terms of the GNU General Public License as published by
6  * the Free Software Foundation, either version 2 of the License, or
7  * (at your option) any later version.
8  *
9  * This program is distributed in the hope that it will be useful, but
10  * WITHOUT ANY WARRANTY; without even the implied warranty of
11  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
12  * General Public License for more details.
13  */
14
15 #ifndef _AO_SCHEME_READ_H_
16 #define _AO_SCHEME_READ_H_
17
18 /*
19  * token classes
20  */
21
22 # define END                    0
23 # define NAME                   1
24 # define OPEN                   2
25 # define CLOSE                  3
26 # define QUOTE                  4
27 #ifdef AO_SCHEME_FEATURE_QUASI
28 # define QUASIQUOTE             5
29 # define UNQUOTE                6
30 # define UNQUOTE_SPLICING       7
31 #endif
32 # define STRING                 8
33 # define NUM                    9
34 #ifdef AO_SCHEME_FEATURE_FLOAT
35 # define FLOAT                  10
36 #endif
37 # define DOT                    11
38 # define BOOL                   12
39 #ifdef AO_SCHEME_FEATURE_VECTOR
40 # define OPEN_VECTOR            13
41 #endif
42
43 /*
44  * character classes
45  */
46
47 # define PRINTABLE      0x0001  /* \t \n ' ' - ~ */
48 # define SPECIAL        0x0002  /* ( [ { ) ] } ' ` , */
49 #ifdef AO_SCHEME_FEATURE_QUASI
50 # define SPECIAL_QUASI  SPECIAL
51 #else
52 # define SPECIAL_QUASI  0
53 #endif
54 # define DOTC           0x0004  /* . */
55 # define WHITE          0x0008  /* ' ' \t \n */
56 # define DIGIT          0x0010  /* [0-9] */
57 # define SIGN           0x0020  /* +- */
58 #ifdef AO_SCHEME_FEATURE_FLOAT
59 # define FLOATC         0x0040  /* . e E */
60 #else
61 # define FLOATC         0
62 #endif
63 # define ENDOFFILE      0x0080  /* end of file */
64 # define COMMENT        0x0100  /* ; */
65 # define IGNORE         0x0200  /* \0 - ' ' */
66 # define BACKSLASH      0x0400  /* \ */
67 # define STRINGC        0x0800  /* " */
68 # define POUND          0x1000  /* # */
69
70 # define NOTNAME        (STRINGC|COMMENT|ENDOFFILE|WHITE|SPECIAL)
71 # define INTEGER        (DIGIT|SIGN)
72 # define NUMBER         (INTEGER|FLOATC)
73
74 #endif /* _AO_SCHEME_READ_H_ */