Mercurial > hg > index.cgi
comparison lwbasic/attic/lwbasic.h @ 185:cca933d32298
Clean up some mess in lwbasic directory
author | lost@l-w.ca |
---|---|
date | Thu, 22 Dec 2011 18:03:38 -0700 |
parents | lwbasic/lwbasic.h@5325b640424d |
children |
comparison
equal
deleted
inserted
replaced
184:6433cb024174 | 185:cca933d32298 |
---|---|
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 | |
29 #include <stdint.h> | |
30 | |
31 #include "symtab.h" | |
32 | |
33 /* note: integer and uinteger will be the same for positive values from 0 | |
34 through 0x7FFFFFFF; the unsigned type should be used for doing ascii | |
35 conversions and then if a negative value was discovered, it should be | |
36 negated IFF it is in range. */ | |
37 | |
38 union lexer_numbers | |
39 { | |
40 uint32_t uinteger; | |
41 int32_t integer; | |
42 }; | |
43 | |
44 typedef struct | |
45 { | |
46 char *output_file; | |
47 char *input_file; | |
48 | |
49 int debug_level; | |
50 | |
51 char *lexer_token_string; | |
52 union lexer_numbers lexer_token_number; | |
53 int lexer_token; | |
54 int lexer_curchar; | |
55 int lexer_ignorechar; | |
56 int expression; | |
57 int parser_state; | |
58 | |
59 void *input_state; | |
60 | |
61 char *currentsub; | |
62 symtab_t *global_syms; | |
63 symtab_t *local_syms; | |
64 int returntype; | |
65 int framesize; | |
66 } cstate; | |
67 | |
68 /* parser states */ | |
69 enum | |
70 { | |
71 parser_state_global = 0, /* only global decls allowed */ | |
72 parser_state_error | |
73 }; | |
74 | |
75 /* token types */ | |
76 enum | |
77 { | |
78 token_kw_sub, /* SUB keyword */ | |
79 token_kw_function, /* FUNCTION keyword */ | |
80 token_kw_as, /* AS keyword */ | |
81 token_kw_public, /* PUBLIC keyword */ | |
82 token_kw_private, /* PRIVATE keyword */ | |
83 token_kw_params, /* PARAMS keyword */ | |
84 token_kw_returns, /* RETURNS keyword */ | |
85 token_kw_integer, /* INTEGER keyword */ | |
86 token_kw_endsub, /* ENDSUB keyword */ | |
87 token_kw_endfunction, /* ENDFUNCTION keyword */ | |
88 token_kw_dim, /* DIM keyword */ | |
89 token_op_assignment, /* assignment operator */ | |
90 token_op_equality, /* equality test */ | |
91 token_op_greater, /* greater than */ | |
92 token_op_less, /* less than */ | |
93 token_op_greaterequal, /* greater or equal */ | |
94 token_op_lessequal, /* less or equal */ | |
95 token_op_notequal, /* not equal */ | |
96 token_op_and, /* boolean and */ | |
97 token_op_or, /* boolean or */ | |
98 token_op_xor, /* boolean exlusive or */ | |
99 token_op_band, /* bitwise and */ | |
100 token_op_bor, /* bitwise or */ | |
101 token_op_bxor, /* bitwise xor */ | |
102 token_op_plus, /* plus */ | |
103 token_op_minus, /* minus */ | |
104 token_op_times, /* times */ | |
105 token_op_divide, /* divide */ | |
106 token_op_modulus, /* modulus */ | |
107 token_op_oparen, /* open paren */ | |
108 token_op_cparen, /* close paren */ | |
109 token_op_not, /* boolean not */ | |
110 token_op_bnot, /* bitwise not */ | |
111 token_identifier, /* an identifier (variable, function, etc. */ | |
112 token_char, /* single character; fallback */ | |
113 token_uint, /* unsigned integer up to 32 bits */ | |
114 token_int, /* signed integer up to 32 bits */ | |
115 token_eol, /* end of line */ | |
116 token_eof /* end of file */ | |
117 }; | |
118 | |
119 /* symbol types */ | |
120 enum | |
121 { | |
122 symtype_sub, /* "sub" (void function) */ | |
123 symtype_func, /* function (nonvoid) */ | |
124 symtype_param, /* function parameter */ | |
125 symtype_var /* variable */ | |
126 }; | |
127 | |
128 #ifndef __input_c_seen__ | |
129 extern int input_getchar(cstate *state); | |
130 #endif | |
131 | |
132 #ifndef __main_c_seen__ | |
133 extern void lwb_error(const char *fmt, ...); | |
134 #endif | |
135 | |
136 #ifndef __lexer_c_seen__ | |
137 extern void lexer(cstate *state); | |
138 extern char *lexer_return_token(cstate *state); | |
139 extern char *lexer_token_name(int token); | |
140 #endif | |
141 | |
142 #ifndef __emit_c_seen__ | |
143 extern void emit_prolog(cstate *state, int vis); | |
144 extern void emit_epilog(cstate *state); | |
145 #endif | |
146 | |
147 | |
148 #endif /* __lwbasic_h_seen__ */ |