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__ */