22
|
1 /*
|
|
2 lwbasic.h
|
|
3
|
|
4 Copyright © 2011 William Astle
|
|
5
|
|
6 This file is part of LWTOOLS.
|
|
7
|
|
8 LWTOOLS is free software: you can redistribute it and/or modify it under the
|
|
9 terms of the GNU General Public License as published by the Free Software
|
|
10 Foundation, either version 3 of the License, or (at your option) any later
|
|
11 version.
|
|
12
|
|
13 This program is distributed in the hope that it will be useful, but WITHOUT
|
|
14 ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
|
15 FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
|
|
16 more details.
|
|
17
|
|
18 You should have received a copy of the GNU General Public License along with
|
|
19 this program. If not, see <http://www.gnu.org/licenses/>.
|
|
20 */
|
|
21
|
|
22 /*
|
|
23 definitions used throughout lwbasic
|
|
24 */
|
|
25
|
|
26 #ifndef __lwbasic_h_seen__
|
|
27 #define __lwbasic_h_seen__
|
|
28
|
25
|
29 #include <stdint.h>
|
|
30
|
|
31 /* note: integer and uinteger will be the same for positive values from 0
|
|
32 through 0x7FFFFFFF; the unsigned type should be used for doing ascii
|
|
33 conversions and then if a negative value was discovered, it should be
|
|
34 negated IFF it is in range. */
|
|
35
|
|
36 union lexer_numbers
|
|
37 {
|
|
38 uint32_t uinteger;
|
|
39 int32_t integer;
|
|
40 };
|
|
41
|
22
|
42 typedef struct
|
|
43 {
|
|
44 char *output_file;
|
|
45 char *input_file;
|
|
46
|
|
47 int debug_level;
|
25
|
48
|
|
49 char *lexer_token_string;
|
|
50 union lexer_numbers lexer_token_number;
|
|
51 int lexer_token;
|
|
52 int lexer_curchar;
|
|
53 int lexer_ignorechar;
|
|
54
|
|
55 int parser_state;
|
23
|
56
|
|
57 void *input_state;
|
22
|
58 } cstate;
|
|
59
|
25
|
60 /* parser states */
|
|
61 enum
|
|
62 {
|
|
63 parser_state_global = 0, /* only global decls allowed */
|
|
64 parser_state_error
|
|
65 };
|
|
66
|
|
67 /* token types */
|
|
68 enum
|
|
69 {
|
|
70 token_kw_sub, /* SUB keyword */
|
|
71 token_kw_function, /* FUNCTION keyword */
|
|
72 token_kw_as, /* AS keyword */
|
|
73 token_kw_public, /* PUBLIC keyword */
|
|
74 token_kw_private, /* PRIVATE keyword */
|
|
75 token_kw_params, /* PARAMS keyword */
|
|
76 token_kw_returns, /* RETURNS keyword */
|
|
77 token_kw_integer, /* INTEGER keyword */
|
|
78 token_identifier, /* an identifier (variable, function, etc. */
|
|
79 token_char, /* single character; fallback */
|
|
80 token_uint, /* unsigned integer up to 32 bits */
|
|
81 token_int, /* signed integer up to 32 bits */
|
|
82 token_eol, /* end of line */
|
|
83 token_eof /* end of file */
|
|
84 };
|
|
85
|
23
|
86 #ifndef __input_c_seen__
|
|
87 extern int input_getchar(cstate *state);
|
|
88 #endif
|
|
89
|
25
|
90 #ifndef __main_c_seen__
|
|
91 extern void lwb_error(const char *fmt, ...);
|
|
92 #endif
|
|
93
|
|
94 #ifndef __lexer_c_seen__
|
|
95 extern void lexer(cstate *state);
|
|
96 #endif
|
|
97
|
22
|
98 #endif /* __lwbasic_h_seen__ */
|