altos/scheme: Add ports. Split scheme code up.
[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 TRUE_TOKEN             12
39 # define FALSE_TOKEN            13
40 #ifdef AO_SCHEME_FEATURE_VECTOR
41 # define OPEN_VECTOR            14
42 #endif
43
44 /*
45  * character classes
46  */
47
48 # define PRINTABLE      0x0001  /* \t \n ' ' - ~ */
49 # define SPECIAL        0x0002  /* ( [ { ) ] } ' ` , */
50 #ifdef AO_SCHEME_FEATURE_QUASI
51 # define SPECIAL_QUASI  SPECIAL
52 #else
53 # define SPECIAL_QUASI  0
54 #endif
55 #
56 # define ALPHA          0x0004  /* A-Z a-z */
57 # define WHITE          0x0008  /* ' ' \t \n */
58 # define DIGIT          0x0010  /* [0-9] */
59 # define SIGN           0x0020  /* +- */
60 #ifdef AO_SCHEME_FEATURE_FLOAT
61 # define FLOATC         0x0040  /* . e E */
62 #else
63 # define FLOATC         0
64 #endif
65 # define ENDOFFILE      0x0080  /* end of file */
66 # define COMMENT        0x0100  /* ; */
67 # define IGNORE         0x0200  /* \0 - ' ' */
68 # define STRINGC        0x0400  /* " */
69 # define HEX_LETTER     0x0800  /* a-f A-F */
70
71 # define NOTNAME        (STRINGC|COMMENT|ENDOFFILE|WHITE|SPECIAL)
72 # define INTEGER        (DIGIT|SIGN)
73 # define NUMBER         (INTEGER|FLOATC)
74 # define HEX_DIGIT      (DIGIT|HEX_LETTER)
75
76 #endif /* _AO_SCHEME_READ_H_ */