Sun, 26 Jan 2014 23:18:48 +0200
- merged object writer into parser
73
1ee9b312dc18
- *hot stuff coming through*
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
1 | /* |
85
264a61e9eba0
- use the Skulltag 97c2 license which is slightly differently worded
Teemu Piippo <crimsondusk64@gmail.com>
parents:
82
diff
changeset
|
2 | Copyright 2012-2014 Santeri Piippo |
73
1ee9b312dc18
- *hot stuff coming through*
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
3 | All rights reserved. |
1ee9b312dc18
- *hot stuff coming through*
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
4 | |
1ee9b312dc18
- *hot stuff coming through*
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
5 | Redistribution and use in source and binary forms, with or without |
85
264a61e9eba0
- use the Skulltag 97c2 license which is slightly differently worded
Teemu Piippo <crimsondusk64@gmail.com>
parents:
82
diff
changeset
|
6 | modification, are permitted provided that the following conditions |
264a61e9eba0
- use the Skulltag 97c2 license which is slightly differently worded
Teemu Piippo <crimsondusk64@gmail.com>
parents:
82
diff
changeset
|
7 | are met: |
73
1ee9b312dc18
- *hot stuff coming through*
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
8 | |
85
264a61e9eba0
- use the Skulltag 97c2 license which is slightly differently worded
Teemu Piippo <crimsondusk64@gmail.com>
parents:
82
diff
changeset
|
9 | 1. Redistributions of source code must retain the above copyright |
264a61e9eba0
- use the Skulltag 97c2 license which is slightly differently worded
Teemu Piippo <crimsondusk64@gmail.com>
parents:
82
diff
changeset
|
10 | notice, this list of conditions and the following disclaimer. |
264a61e9eba0
- use the Skulltag 97c2 license which is slightly differently worded
Teemu Piippo <crimsondusk64@gmail.com>
parents:
82
diff
changeset
|
11 | 2. Redistributions in binary form must reproduce the above copyright |
264a61e9eba0
- use the Skulltag 97c2 license which is slightly differently worded
Teemu Piippo <crimsondusk64@gmail.com>
parents:
82
diff
changeset
|
12 | notice, this list of conditions and the following disclaimer in the |
264a61e9eba0
- use the Skulltag 97c2 license which is slightly differently worded
Teemu Piippo <crimsondusk64@gmail.com>
parents:
82
diff
changeset
|
13 | documentation and/or other materials provided with the distribution. |
264a61e9eba0
- use the Skulltag 97c2 license which is slightly differently worded
Teemu Piippo <crimsondusk64@gmail.com>
parents:
82
diff
changeset
|
14 | 3. The name of the author may not be used to endorse or promote products |
264a61e9eba0
- use the Skulltag 97c2 license which is slightly differently worded
Teemu Piippo <crimsondusk64@gmail.com>
parents:
82
diff
changeset
|
15 | derived from this software without specific prior written permission. |
73
1ee9b312dc18
- *hot stuff coming through*
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
16 | |
85
264a61e9eba0
- use the Skulltag 97c2 license which is slightly differently worded
Teemu Piippo <crimsondusk64@gmail.com>
parents:
82
diff
changeset
|
17 | THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR |
264a61e9eba0
- use the Skulltag 97c2 license which is slightly differently worded
Teemu Piippo <crimsondusk64@gmail.com>
parents:
82
diff
changeset
|
18 | IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES |
264a61e9eba0
- use the Skulltag 97c2 license which is slightly differently worded
Teemu Piippo <crimsondusk64@gmail.com>
parents:
82
diff
changeset
|
19 | OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. |
264a61e9eba0
- use the Skulltag 97c2 license which is slightly differently worded
Teemu Piippo <crimsondusk64@gmail.com>
parents:
82
diff
changeset
|
20 | IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, |
264a61e9eba0
- use the Skulltag 97c2 license which is slightly differently worded
Teemu Piippo <crimsondusk64@gmail.com>
parents:
82
diff
changeset
|
21 | INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT |
264a61e9eba0
- use the Skulltag 97c2 license which is slightly differently worded
Teemu Piippo <crimsondusk64@gmail.com>
parents:
82
diff
changeset
|
22 | NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, |
264a61e9eba0
- use the Skulltag 97c2 license which is slightly differently worded
Teemu Piippo <crimsondusk64@gmail.com>
parents:
82
diff
changeset
|
23 | DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY |
264a61e9eba0
- use the Skulltag 97c2 license which is slightly differently worded
Teemu Piippo <crimsondusk64@gmail.com>
parents:
82
diff
changeset
|
24 | THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
264a61e9eba0
- use the Skulltag 97c2 license which is slightly differently worded
Teemu Piippo <crimsondusk64@gmail.com>
parents:
82
diff
changeset
|
25 | (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF |
264a61e9eba0
- use the Skulltag 97c2 license which is slightly differently worded
Teemu Piippo <crimsondusk64@gmail.com>
parents:
82
diff
changeset
|
26 | THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
73
1ee9b312dc18
- *hot stuff coming through*
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
27 | */ |
1ee9b312dc18
- *hot stuff coming through*
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
28 | |
1ee9b312dc18
- *hot stuff coming through*
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
29 | #ifndef BOTC_PARSER_H |
1ee9b312dc18
- *hot stuff coming through*
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
30 | #define BOTC_PARSER_H |
1ee9b312dc18
- *hot stuff coming through*
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
31 | |
1ee9b312dc18
- *hot stuff coming through*
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
32 | #include <stdio.h> |
1ee9b312dc18
- *hot stuff coming through*
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
33 | #include "main.h" |
1ee9b312dc18
- *hot stuff coming through*
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
34 | #include "commands.h" |
1ee9b312dc18
- *hot stuff coming through*
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
35 | #include "lexer_scanner.h" |
1ee9b312dc18
- *hot stuff coming through*
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
36 | #include "tokens.h" |
1ee9b312dc18
- *hot stuff coming through*
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
37 | |
1ee9b312dc18
- *hot stuff coming through*
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
38 | #define MAX_SCOPE 32 |
1ee9b312dc18
- *hot stuff coming through*
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
39 | #define MAX_CASE 64 |
86
43fe4be38a58
- merged object writer into parser
Teemu Piippo <crimsondusk64@gmail.com>
parents:
85
diff
changeset
|
40 | #define MAX_MARKS 512 // TODO: get rid of this |
73
1ee9b312dc18
- *hot stuff coming through*
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
41 | |
86
43fe4be38a58
- merged object writer into parser
Teemu Piippo <crimsondusk64@gmail.com>
parents:
85
diff
changeset
|
42 | class data_buffer; |
73
1ee9b312dc18
- *hot stuff coming through*
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
43 | class lexer; |
1ee9b312dc18
- *hot stuff coming through*
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
44 | class script_variable; |
1ee9b312dc18
- *hot stuff coming through*
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
45 | |
86
43fe4be38a58
- merged object writer into parser
Teemu Piippo <crimsondusk64@gmail.com>
parents:
85
diff
changeset
|
46 | struct undefined_label |
43fe4be38a58
- merged object writer into parser
Teemu Piippo <crimsondusk64@gmail.com>
parents:
85
diff
changeset
|
47 | { |
43fe4be38a58
- merged object writer into parser
Teemu Piippo <crimsondusk64@gmail.com>
parents:
85
diff
changeset
|
48 | string name; |
43fe4be38a58
- merged object writer into parser
Teemu Piippo <crimsondusk64@gmail.com>
parents:
85
diff
changeset
|
49 | byte_mark* target; |
43fe4be38a58
- merged object writer into parser
Teemu Piippo <crimsondusk64@gmail.com>
parents:
85
diff
changeset
|
50 | }; |
43fe4be38a58
- merged object writer into parser
Teemu Piippo <crimsondusk64@gmail.com>
parents:
85
diff
changeset
|
51 | |
43fe4be38a58
- merged object writer into parser
Teemu Piippo <crimsondusk64@gmail.com>
parents:
85
diff
changeset
|
52 | // ============================================================================ |
73
1ee9b312dc18
- *hot stuff coming through*
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
53 | // Operators |
86
43fe4be38a58
- merged object writer into parser
Teemu Piippo <crimsondusk64@gmail.com>
parents:
85
diff
changeset
|
54 | // |
73
1ee9b312dc18
- *hot stuff coming through*
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
55 | enum operator_e |
1ee9b312dc18
- *hot stuff coming through*
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
56 | { |
1ee9b312dc18
- *hot stuff coming through*
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
57 | OPER_ADD, |
1ee9b312dc18
- *hot stuff coming through*
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
58 | OPER_SUBTRACT, |
1ee9b312dc18
- *hot stuff coming through*
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
59 | OPER_MULTIPLY, |
1ee9b312dc18
- *hot stuff coming through*
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
60 | OPER_DIVIDE, |
1ee9b312dc18
- *hot stuff coming through*
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
61 | OPER_MODULUS, |
1ee9b312dc18
- *hot stuff coming through*
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
62 | OPER_ASSIGN, |
1ee9b312dc18
- *hot stuff coming through*
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
63 | OPER_ASSIGNADD, |
1ee9b312dc18
- *hot stuff coming through*
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
64 | OPER_ASSIGNSUB, |
1ee9b312dc18
- *hot stuff coming through*
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
65 | OPER_ASSIGNMUL, |
1ee9b312dc18
- *hot stuff coming through*
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
66 | OPER_ASSIGNDIV, |
1ee9b312dc18
- *hot stuff coming through*
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
67 | OPER_ASSIGNMOD, // -- 10 |
1ee9b312dc18
- *hot stuff coming through*
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
68 | OPER_EQUALS, |
1ee9b312dc18
- *hot stuff coming through*
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
69 | OPER_NOTEQUALS, |
1ee9b312dc18
- *hot stuff coming through*
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
70 | OPER_LESSTHAN, |
1ee9b312dc18
- *hot stuff coming through*
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
71 | OPER_GREATERTHAN, |
1ee9b312dc18
- *hot stuff coming through*
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
72 | OPER_LESSTHANEQUALS, |
1ee9b312dc18
- *hot stuff coming through*
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
73 | OPER_GREATERTHANEQUALS, |
1ee9b312dc18
- *hot stuff coming through*
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
74 | OPER_LEFTSHIFT, |
1ee9b312dc18
- *hot stuff coming through*
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
75 | OPER_RIGHTSHIFT, |
1ee9b312dc18
- *hot stuff coming through*
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
76 | OPER_ASSIGNLEFTSHIFT, |
1ee9b312dc18
- *hot stuff coming through*
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
77 | OPER_ASSIGNRIGHTSHIFT, // -- 20 |
1ee9b312dc18
- *hot stuff coming through*
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
78 | OPER_OR, |
1ee9b312dc18
- *hot stuff coming through*
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
79 | OPER_AND, |
1ee9b312dc18
- *hot stuff coming through*
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
80 | OPER_BITWISEOR, |
1ee9b312dc18
- *hot stuff coming through*
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
81 | OPER_BITWISEAND, |
1ee9b312dc18
- *hot stuff coming through*
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
82 | OPER_BITWISEEOR, |
1ee9b312dc18
- *hot stuff coming through*
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
83 | OPER_TERNARY, |
1ee9b312dc18
- *hot stuff coming through*
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
84 | OPER_STRLEN, |
1ee9b312dc18
- *hot stuff coming through*
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
85 | }; |
1ee9b312dc18
- *hot stuff coming through*
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
86 | |
86
43fe4be38a58
- merged object writer into parser
Teemu Piippo <crimsondusk64@gmail.com>
parents:
85
diff
changeset
|
87 | // ============================================================================ |
43fe4be38a58
- merged object writer into parser
Teemu Piippo <crimsondusk64@gmail.com>
parents:
85
diff
changeset
|
88 | // |
73
1ee9b312dc18
- *hot stuff coming through*
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
89 | struct operator_info |
1ee9b312dc18
- *hot stuff coming through*
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
90 | { |
1ee9b312dc18
- *hot stuff coming through*
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
91 | operator_e opercode; |
75
bf8c57437231
- renamed files to .cxx, restructured parser.cc
Teemu Piippo <crimsondusk64@gmail.com>
parents:
74
diff
changeset
|
92 | e_data_header dataheader; |
73
1ee9b312dc18
- *hot stuff coming through*
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
93 | e_token token; |
1ee9b312dc18
- *hot stuff coming through*
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
94 | }; |
1ee9b312dc18
- *hot stuff coming through*
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
95 | |
86
43fe4be38a58
- merged object writer into parser
Teemu Piippo <crimsondusk64@gmail.com>
parents:
85
diff
changeset
|
96 | // ============================================================================ |
73
1ee9b312dc18
- *hot stuff coming through*
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
97 | // Mark types |
86
43fe4be38a58
- merged object writer into parser
Teemu Piippo <crimsondusk64@gmail.com>
parents:
85
diff
changeset
|
98 | // |
73
1ee9b312dc18
- *hot stuff coming through*
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
99 | enum marktype_e |
1ee9b312dc18
- *hot stuff coming through*
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
100 | { |
74 | 101 | e_label_mark, |
102 | e_if_mark, | |
103 | e_internal_mark, // internal structures | |
73
1ee9b312dc18
- *hot stuff coming through*
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
104 | }; |
1ee9b312dc18
- *hot stuff coming through*
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
105 | |
86
43fe4be38a58
- merged object writer into parser
Teemu Piippo <crimsondusk64@gmail.com>
parents:
85
diff
changeset
|
106 | // ============================================================================ |
43fe4be38a58
- merged object writer into parser
Teemu Piippo <crimsondusk64@gmail.com>
parents:
85
diff
changeset
|
107 | // Scope types |
43fe4be38a58
- merged object writer into parser
Teemu Piippo <crimsondusk64@gmail.com>
parents:
85
diff
changeset
|
108 | // |
73
1ee9b312dc18
- *hot stuff coming through*
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
109 | enum scopetype_e |
1ee9b312dc18
- *hot stuff coming through*
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
110 | { |
74 | 111 | e_unknown_scope, |
112 | e_if_scope, | |
113 | e_while_scope, | |
114 | e_for_scope, | |
115 | e_do_scope, | |
116 | e_switch_scope, | |
117 | e_else_scope, | |
73
1ee9b312dc18
- *hot stuff coming through*
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
118 | }; |
1ee9b312dc18
- *hot stuff coming through*
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
119 | |
1ee9b312dc18
- *hot stuff coming through*
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
120 | // ============================================================================ |
86
43fe4be38a58
- merged object writer into parser
Teemu Piippo <crimsondusk64@gmail.com>
parents:
85
diff
changeset
|
121 | // Meta-data about scopes |
43fe4be38a58
- merged object writer into parser
Teemu Piippo <crimsondusk64@gmail.com>
parents:
85
diff
changeset
|
122 | // |
73
1ee9b312dc18
- *hot stuff coming through*
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
123 | struct ScopeInfo |
1ee9b312dc18
- *hot stuff coming through*
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
124 | { |
86
43fe4be38a58
- merged object writer into parser
Teemu Piippo <crimsondusk64@gmail.com>
parents:
85
diff
changeset
|
125 | byte_mark* mark1; |
43fe4be38a58
- merged object writer into parser
Teemu Piippo <crimsondusk64@gmail.com>
parents:
85
diff
changeset
|
126 | byte_mark* mark2; |
43fe4be38a58
- merged object writer into parser
Teemu Piippo <crimsondusk64@gmail.com>
parents:
85
diff
changeset
|
127 | scopetype_e type; |
43fe4be38a58
- merged object writer into parser
Teemu Piippo <crimsondusk64@gmail.com>
parents:
85
diff
changeset
|
128 | data_buffer* buffer1; |
73
1ee9b312dc18
- *hot stuff coming through*
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
129 | |
1ee9b312dc18
- *hot stuff coming through*
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
130 | // switch-related stuff |
1ee9b312dc18
- *hot stuff coming through*
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
131 | // Which case are we at? |
86
43fe4be38a58
- merged object writer into parser
Teemu Piippo <crimsondusk64@gmail.com>
parents:
85
diff
changeset
|
132 | int casecursor; |
73
1ee9b312dc18
- *hot stuff coming through*
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
133 | |
1ee9b312dc18
- *hot stuff coming through*
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
134 | // Marks to case-blocks |
86
43fe4be38a58
- merged object writer into parser
Teemu Piippo <crimsondusk64@gmail.com>
parents:
85
diff
changeset
|
135 | byte_mark* casemarks[MAX_CASE]; |
73
1ee9b312dc18
- *hot stuff coming through*
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
136 | |
1ee9b312dc18
- *hot stuff coming through*
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
137 | // Numbers of the case labels |
86
43fe4be38a58
- merged object writer into parser
Teemu Piippo <crimsondusk64@gmail.com>
parents:
85
diff
changeset
|
138 | int casenumbers[MAX_CASE]; |
73
1ee9b312dc18
- *hot stuff coming through*
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
139 | |
1ee9b312dc18
- *hot stuff coming through*
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
140 | // actual case blocks |
86
43fe4be38a58
- merged object writer into parser
Teemu Piippo <crimsondusk64@gmail.com>
parents:
85
diff
changeset
|
141 | data_buffer* casebuffers[MAX_CASE]; |
73
1ee9b312dc18
- *hot stuff coming through*
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
142 | |
1ee9b312dc18
- *hot stuff coming through*
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
143 | // What is the current buffer of the block? |
86
43fe4be38a58
- merged object writer into parser
Teemu Piippo <crimsondusk64@gmail.com>
parents:
85
diff
changeset
|
144 | data_buffer* recordbuffer; |
73
1ee9b312dc18
- *hot stuff coming through*
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
145 | }; |
1ee9b312dc18
- *hot stuff coming through*
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
146 | |
1ee9b312dc18
- *hot stuff coming through*
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
147 | // ============================================================================ |
86
43fe4be38a58
- merged object writer into parser
Teemu Piippo <crimsondusk64@gmail.com>
parents:
85
diff
changeset
|
148 | // |
73
1ee9b312dc18
- *hot stuff coming through*
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
149 | struct constant_info |
1ee9b312dc18
- *hot stuff coming through*
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
150 | { |
1ee9b312dc18
- *hot stuff coming through*
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
151 | string name; |
1ee9b312dc18
- *hot stuff coming through*
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
152 | type_e type; |
1ee9b312dc18
- *hot stuff coming through*
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
153 | string val; |
1ee9b312dc18
- *hot stuff coming through*
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
154 | }; |
1ee9b312dc18
- *hot stuff coming through*
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
155 | |
1ee9b312dc18
- *hot stuff coming through*
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
156 | // ============================================================================ |
86
43fe4be38a58
- merged object writer into parser
Teemu Piippo <crimsondusk64@gmail.com>
parents:
85
diff
changeset
|
157 | // |
73
1ee9b312dc18
- *hot stuff coming through*
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
158 | class botscript_parser |
1ee9b312dc18
- *hot stuff coming through*
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
159 | { |
1ee9b312dc18
- *hot stuff coming through*
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
160 | public: |
1ee9b312dc18
- *hot stuff coming through*
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
161 | // ==================================================================== |
1ee9b312dc18
- *hot stuff coming through*
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
162 | // METHODS |
1ee9b312dc18
- *hot stuff coming through*
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
163 | botscript_parser(); |
1ee9b312dc18
- *hot stuff coming through*
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
164 | ~botscript_parser(); |
86
43fe4be38a58
- merged object writer into parser
Teemu Piippo <crimsondusk64@gmail.com>
parents:
85
diff
changeset
|
165 | void parse_botscript (string file_name); |
43fe4be38a58
- merged object writer into parser
Teemu Piippo <crimsondusk64@gmail.com>
parents:
85
diff
changeset
|
166 | data_buffer* parse_command (command_info* comm); |
43fe4be38a58
- merged object writer into parser
Teemu Piippo <crimsondusk64@gmail.com>
parents:
85
diff
changeset
|
167 | data_buffer* parse_expression (type_e reqtype); |
43fe4be38a58
- merged object writer into parser
Teemu Piippo <crimsondusk64@gmail.com>
parents:
85
diff
changeset
|
168 | data_buffer* parse_assignment (script_variable* var); |
43fe4be38a58
- merged object writer into parser
Teemu Piippo <crimsondusk64@gmail.com>
parents:
85
diff
changeset
|
169 | int parse_operator (bool peek = false); |
43fe4be38a58
- merged object writer into parser
Teemu Piippo <crimsondusk64@gmail.com>
parents:
85
diff
changeset
|
170 | data_buffer* parse_expr_value (type_e reqtype); |
43fe4be38a58
- merged object writer into parser
Teemu Piippo <crimsondusk64@gmail.com>
parents:
85
diff
changeset
|
171 | string parse_float(); |
43fe4be38a58
- merged object writer into parser
Teemu Piippo <crimsondusk64@gmail.com>
parents:
85
diff
changeset
|
172 | void push_scope(); |
43fe4be38a58
- merged object writer into parser
Teemu Piippo <crimsondusk64@gmail.com>
parents:
85
diff
changeset
|
173 | data_buffer* parse_statement(); |
43fe4be38a58
- merged object writer into parser
Teemu Piippo <crimsondusk64@gmail.com>
parents:
85
diff
changeset
|
174 | void add_switch_case (data_buffer* b); |
43fe4be38a58
- merged object writer into parser
Teemu Piippo <crimsondusk64@gmail.com>
parents:
85
diff
changeset
|
175 | void check_toplevel(); |
43fe4be38a58
- merged object writer into parser
Teemu Piippo <crimsondusk64@gmail.com>
parents:
85
diff
changeset
|
176 | void check_not_toplevel(); |
43fe4be38a58
- merged object writer into parser
Teemu Piippo <crimsondusk64@gmail.com>
parents:
85
diff
changeset
|
177 | bool token_is (e_token a); |
43fe4be38a58
- merged object writer into parser
Teemu Piippo <crimsondusk64@gmail.com>
parents:
85
diff
changeset
|
178 | string token_string(); |
43fe4be38a58
- merged object writer into parser
Teemu Piippo <crimsondusk64@gmail.com>
parents:
85
diff
changeset
|
179 | string describe_position() const; |
43fe4be38a58
- merged object writer into parser
Teemu Piippo <crimsondusk64@gmail.com>
parents:
85
diff
changeset
|
180 | void write_to_file (string outfile); |
43fe4be38a58
- merged object writer into parser
Teemu Piippo <crimsondusk64@gmail.com>
parents:
85
diff
changeset
|
181 | |
43fe4be38a58
- merged object writer into parser
Teemu Piippo <crimsondusk64@gmail.com>
parents:
85
diff
changeset
|
182 | inline int get_num_events() const |
43fe4be38a58
- merged object writer into parser
Teemu Piippo <crimsondusk64@gmail.com>
parents:
85
diff
changeset
|
183 | { |
43fe4be38a58
- merged object writer into parser
Teemu Piippo <crimsondusk64@gmail.com>
parents:
85
diff
changeset
|
184 | return m_num_events; |
43fe4be38a58
- merged object writer into parser
Teemu Piippo <crimsondusk64@gmail.com>
parents:
85
diff
changeset
|
185 | } |
43fe4be38a58
- merged object writer into parser
Teemu Piippo <crimsondusk64@gmail.com>
parents:
85
diff
changeset
|
186 | |
43fe4be38a58
- merged object writer into parser
Teemu Piippo <crimsondusk64@gmail.com>
parents:
85
diff
changeset
|
187 | inline int get_num_states() const |
43fe4be38a58
- merged object writer into parser
Teemu Piippo <crimsondusk64@gmail.com>
parents:
85
diff
changeset
|
188 | { |
43fe4be38a58
- merged object writer into parser
Teemu Piippo <crimsondusk64@gmail.com>
parents:
85
diff
changeset
|
189 | return m_num_states; |
43fe4be38a58
- merged object writer into parser
Teemu Piippo <crimsondusk64@gmail.com>
parents:
85
diff
changeset
|
190 | } |
73
1ee9b312dc18
- *hot stuff coming through*
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
191 | |
1ee9b312dc18
- *hot stuff coming through*
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
192 | private: |
86
43fe4be38a58
- merged object writer into parser
Teemu Piippo <crimsondusk64@gmail.com>
parents:
85
diff
changeset
|
193 | // The lexer we're using. |
43fe4be38a58
- merged object writer into parser
Teemu Piippo <crimsondusk64@gmail.com>
parents:
85
diff
changeset
|
194 | lexer* m_lx; |
43fe4be38a58
- merged object writer into parser
Teemu Piippo <crimsondusk64@gmail.com>
parents:
85
diff
changeset
|
195 | |
43fe4be38a58
- merged object writer into parser
Teemu Piippo <crimsondusk64@gmail.com>
parents:
85
diff
changeset
|
196 | // The main buffer - the contents of this is what we |
43fe4be38a58
- merged object writer into parser
Teemu Piippo <crimsondusk64@gmail.com>
parents:
85
diff
changeset
|
197 | // write to file after parsing is complete |
43fe4be38a58
- merged object writer into parser
Teemu Piippo <crimsondusk64@gmail.com>
parents:
85
diff
changeset
|
198 | data_buffer* m_main_buffer; |
43fe4be38a58
- merged object writer into parser
Teemu Piippo <crimsondusk64@gmail.com>
parents:
85
diff
changeset
|
199 | |
43fe4be38a58
- merged object writer into parser
Teemu Piippo <crimsondusk64@gmail.com>
parents:
85
diff
changeset
|
200 | // onenter buffer - the contents of the onenter{} block |
43fe4be38a58
- merged object writer into parser
Teemu Piippo <crimsondusk64@gmail.com>
parents:
85
diff
changeset
|
201 | // is buffered here and is merged further at the end of state |
43fe4be38a58
- merged object writer into parser
Teemu Piippo <crimsondusk64@gmail.com>
parents:
85
diff
changeset
|
202 | data_buffer* m_on_enter_buffer; |
43fe4be38a58
- merged object writer into parser
Teemu Piippo <crimsondusk64@gmail.com>
parents:
85
diff
changeset
|
203 | |
43fe4be38a58
- merged object writer into parser
Teemu Piippo <crimsondusk64@gmail.com>
parents:
85
diff
changeset
|
204 | // Mainloop buffer - the contents of the mainloop{} block |
43fe4be38a58
- merged object writer into parser
Teemu Piippo <crimsondusk64@gmail.com>
parents:
85
diff
changeset
|
205 | // is buffered here and is merged further at the end of state |
43fe4be38a58
- merged object writer into parser
Teemu Piippo <crimsondusk64@gmail.com>
parents:
85
diff
changeset
|
206 | data_buffer* m_main_loop_buffer; |
43fe4be38a58
- merged object writer into parser
Teemu Piippo <crimsondusk64@gmail.com>
parents:
85
diff
changeset
|
207 | |
43fe4be38a58
- merged object writer into parser
Teemu Piippo <crimsondusk64@gmail.com>
parents:
85
diff
changeset
|
208 | // Switch buffer - switch case data is recorded to this |
43fe4be38a58
- merged object writer into parser
Teemu Piippo <crimsondusk64@gmail.com>
parents:
85
diff
changeset
|
209 | // buffer initially, instead of into main buffer. |
43fe4be38a58
- merged object writer into parser
Teemu Piippo <crimsondusk64@gmail.com>
parents:
85
diff
changeset
|
210 | data_buffer* m_switch_buffer; |
43fe4be38a58
- merged object writer into parser
Teemu Piippo <crimsondusk64@gmail.com>
parents:
85
diff
changeset
|
211 | |
43fe4be38a58
- merged object writer into parser
Teemu Piippo <crimsondusk64@gmail.com>
parents:
85
diff
changeset
|
212 | int m_num_states; |
43fe4be38a58
- merged object writer into parser
Teemu Piippo <crimsondusk64@gmail.com>
parents:
85
diff
changeset
|
213 | int m_num_events; |
43fe4be38a58
- merged object writer into parser
Teemu Piippo <crimsondusk64@gmail.com>
parents:
85
diff
changeset
|
214 | parsermode_e m_current_mode; |
43fe4be38a58
- merged object writer into parser
Teemu Piippo <crimsondusk64@gmail.com>
parents:
85
diff
changeset
|
215 | string m_current_state; |
43fe4be38a58
- merged object writer into parser
Teemu Piippo <crimsondusk64@gmail.com>
parents:
85
diff
changeset
|
216 | bool m_state_spawn_defined; |
43fe4be38a58
- merged object writer into parser
Teemu Piippo <crimsondusk64@gmail.com>
parents:
85
diff
changeset
|
217 | bool m_got_main_loop; |
43fe4be38a58
- merged object writer into parser
Teemu Piippo <crimsondusk64@gmail.com>
parents:
85
diff
changeset
|
218 | int m_scope_cursor; |
43fe4be38a58
- merged object writer into parser
Teemu Piippo <crimsondusk64@gmail.com>
parents:
85
diff
changeset
|
219 | data_buffer* m_if_expression; |
43fe4be38a58
- merged object writer into parser
Teemu Piippo <crimsondusk64@gmail.com>
parents:
85
diff
changeset
|
220 | bool m_can_else; |
43fe4be38a58
- merged object writer into parser
Teemu Piippo <crimsondusk64@gmail.com>
parents:
85
diff
changeset
|
221 | list<undefined_label> m_undefined_labels; |
43fe4be38a58
- merged object writer into parser
Teemu Piippo <crimsondusk64@gmail.com>
parents:
85
diff
changeset
|
222 | list<constant_info> m_constants; |
77
ad17801b1a36
- various corrections
Teemu Piippo <crimsondusk64@gmail.com>
parents:
75
diff
changeset
|
223 | |
86
43fe4be38a58
- merged object writer into parser
Teemu Piippo <crimsondusk64@gmail.com>
parents:
85
diff
changeset
|
224 | // How many bytes have we written to file? |
43fe4be38a58
- merged object writer into parser
Teemu Piippo <crimsondusk64@gmail.com>
parents:
85
diff
changeset
|
225 | int m_num_written_bytes; |
43fe4be38a58
- merged object writer into parser
Teemu Piippo <crimsondusk64@gmail.com>
parents:
85
diff
changeset
|
226 | |
43fe4be38a58
- merged object writer into parser
Teemu Piippo <crimsondusk64@gmail.com>
parents:
85
diff
changeset
|
227 | // Scope data |
43fe4be38a58
- merged object writer into parser
Teemu Piippo <crimsondusk64@gmail.com>
parents:
85
diff
changeset
|
228 | // TODO: make a list |
43fe4be38a58
- merged object writer into parser
Teemu Piippo <crimsondusk64@gmail.com>
parents:
85
diff
changeset
|
229 | ScopeInfo m_scope_stack[MAX_SCOPE]; |
43fe4be38a58
- merged object writer into parser
Teemu Piippo <crimsondusk64@gmail.com>
parents:
85
diff
changeset
|
230 | |
43fe4be38a58
- merged object writer into parser
Teemu Piippo <crimsondusk64@gmail.com>
parents:
85
diff
changeset
|
231 | data_buffer* buffer(); |
43fe4be38a58
- merged object writer into parser
Teemu Piippo <crimsondusk64@gmail.com>
parents:
85
diff
changeset
|
232 | constant_info* find_constant (const string& tok); |
43fe4be38a58
- merged object writer into parser
Teemu Piippo <crimsondusk64@gmail.com>
parents:
85
diff
changeset
|
233 | void parse_state_block(); |
43fe4be38a58
- merged object writer into parser
Teemu Piippo <crimsondusk64@gmail.com>
parents:
85
diff
changeset
|
234 | void parse_event_block(); |
43fe4be38a58
- merged object writer into parser
Teemu Piippo <crimsondusk64@gmail.com>
parents:
85
diff
changeset
|
235 | void parse_mainloop(); |
43fe4be38a58
- merged object writer into parser
Teemu Piippo <crimsondusk64@gmail.com>
parents:
85
diff
changeset
|
236 | void parse_on_enter_exit(); |
43fe4be38a58
- merged object writer into parser
Teemu Piippo <crimsondusk64@gmail.com>
parents:
85
diff
changeset
|
237 | void parse_variable_declaration(); |
43fe4be38a58
- merged object writer into parser
Teemu Piippo <crimsondusk64@gmail.com>
parents:
85
diff
changeset
|
238 | void parse_goto(); |
43fe4be38a58
- merged object writer into parser
Teemu Piippo <crimsondusk64@gmail.com>
parents:
85
diff
changeset
|
239 | void parse_if(); |
43fe4be38a58
- merged object writer into parser
Teemu Piippo <crimsondusk64@gmail.com>
parents:
85
diff
changeset
|
240 | void parse_else(); |
43fe4be38a58
- merged object writer into parser
Teemu Piippo <crimsondusk64@gmail.com>
parents:
85
diff
changeset
|
241 | void parse_while_block(); |
43fe4be38a58
- merged object writer into parser
Teemu Piippo <crimsondusk64@gmail.com>
parents:
85
diff
changeset
|
242 | void parse_for_block(); |
43fe4be38a58
- merged object writer into parser
Teemu Piippo <crimsondusk64@gmail.com>
parents:
85
diff
changeset
|
243 | void parse_do_block(); |
43fe4be38a58
- merged object writer into parser
Teemu Piippo <crimsondusk64@gmail.com>
parents:
85
diff
changeset
|
244 | void parse_switch_block(); |
43fe4be38a58
- merged object writer into parser
Teemu Piippo <crimsondusk64@gmail.com>
parents:
85
diff
changeset
|
245 | void parse_switch_case(); |
43fe4be38a58
- merged object writer into parser
Teemu Piippo <crimsondusk64@gmail.com>
parents:
85
diff
changeset
|
246 | void parse_switch_default(); |
43fe4be38a58
- merged object writer into parser
Teemu Piippo <crimsondusk64@gmail.com>
parents:
85
diff
changeset
|
247 | void parse_break(); |
43fe4be38a58
- merged object writer into parser
Teemu Piippo <crimsondusk64@gmail.com>
parents:
85
diff
changeset
|
248 | void parse_continue(); |
43fe4be38a58
- merged object writer into parser
Teemu Piippo <crimsondusk64@gmail.com>
parents:
85
diff
changeset
|
249 | void parse_block_end(); |
43fe4be38a58
- merged object writer into parser
Teemu Piippo <crimsondusk64@gmail.com>
parents:
85
diff
changeset
|
250 | void parse_const(); |
43fe4be38a58
- merged object writer into parser
Teemu Piippo <crimsondusk64@gmail.com>
parents:
85
diff
changeset
|
251 | void parse_label(); |
43fe4be38a58
- merged object writer into parser
Teemu Piippo <crimsondusk64@gmail.com>
parents:
85
diff
changeset
|
252 | void parse_eventdef(); |
43fe4be38a58
- merged object writer into parser
Teemu Piippo <crimsondusk64@gmail.com>
parents:
85
diff
changeset
|
253 | void parse_funcdef(); |
43fe4be38a58
- merged object writer into parser
Teemu Piippo <crimsondusk64@gmail.com>
parents:
85
diff
changeset
|
254 | void write_member_buffers(); |
43fe4be38a58
- merged object writer into parser
Teemu Piippo <crimsondusk64@gmail.com>
parents:
85
diff
changeset
|
255 | void write_string_table(); |
73
1ee9b312dc18
- *hot stuff coming through*
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
256 | }; |
1ee9b312dc18
- *hot stuff coming through*
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
257 | |
75
bf8c57437231
- renamed files to .cxx, restructured parser.cc
Teemu Piippo <crimsondusk64@gmail.com>
parents:
74
diff
changeset
|
258 | constant_info* find_constant (const string& tok); |
73
1ee9b312dc18
- *hot stuff coming through*
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
259 | |
1ee9b312dc18
- *hot stuff coming through*
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff
changeset
|
260 | #endif // BOTC_PARSER_H |