annotate lwbasic/lwbasic.h @ 26:26aa76da75ad

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