src/parser.h

Sun, 26 Jan 2014 23:18:48 +0200

author
Teemu Piippo <crimsondusk64@gmail.com>
date
Sun, 26 Jan 2014 23:18:48 +0200
changeset 86
43fe4be38a58
parent 85
264a61e9eba0
permissions
-rw-r--r--

- 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
007fbadfa7f9 more rework
Teemu Piippo <crimsondusk64@gmail.com>
parents: 73
diff changeset
101 e_label_mark,
007fbadfa7f9 more rework
Teemu Piippo <crimsondusk64@gmail.com>
parents: 73
diff changeset
102 e_if_mark,
007fbadfa7f9 more rework
Teemu Piippo <crimsondusk64@gmail.com>
parents: 73
diff changeset
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
007fbadfa7f9 more rework
Teemu Piippo <crimsondusk64@gmail.com>
parents: 73
diff changeset
111 e_unknown_scope,
007fbadfa7f9 more rework
Teemu Piippo <crimsondusk64@gmail.com>
parents: 73
diff changeset
112 e_if_scope,
007fbadfa7f9 more rework
Teemu Piippo <crimsondusk64@gmail.com>
parents: 73
diff changeset
113 e_while_scope,
007fbadfa7f9 more rework
Teemu Piippo <crimsondusk64@gmail.com>
parents: 73
diff changeset
114 e_for_scope,
007fbadfa7f9 more rework
Teemu Piippo <crimsondusk64@gmail.com>
parents: 73
diff changeset
115 e_do_scope,
007fbadfa7f9 more rework
Teemu Piippo <crimsondusk64@gmail.com>
parents: 73
diff changeset
116 e_switch_scope,
007fbadfa7f9 more rework
Teemu Piippo <crimsondusk64@gmail.com>
parents: 73
diff changeset
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

mercurial