262 {
263
264 this.manager = manager;
265
266 this.scriptName = scriptName;
267
268 try
269 {
270
271 List<Token> tokenStream = null;
272 if (binary == true)
273 {
274 tokenStream = new List<Token>();
275 using (var fs = new FileStream(scriptName, FileMode.Open, FileAccess.Read))
276 using (var br = new BinaryReader(fs))
277 {
278 int count = br.ReadInt32();
279
280 for (int i = 0; i < count; i++)
281 {
282 var typeInt = br.ReadInt32();
283 var lexemeStr = br.ReadString();
284 var line = br.ReadInt32();
285 var column = br.ReadInt32();
286 var text = "";
287
289 object lexeme = ConvertLexeme(type, lexemeStr);
290
291 tokenStream.Add(new Token(type, lexeme, line, column, text));
292 }
293 }
294 }
295 else
296 {
297 string json = File.ReadAllText(scriptName, Encoding.UTF8);
298
299 var serializableTokens = JsonSerializer.Deserialize<List<SerializableToken>>(json);
300
301
302 tokenStream = serializableTokens
303 .Select(st => new Token(
304 st.Type,
305 ConvertLexeme(st),
306 st.Line,
307 st.Column,
308 st.Text))
309 .ToList();
310 }
311
312 Parser parser = new Parser(this, tokenStream);
313
314 parser.DebugMode = this.manager.Debug;
315
316 executable = parser.
Parse();
317
318
319 if (this.manager.Optimize)
320 {
321
322 Optimizer optimizer = new Optimizer(executable);
323
324 optimizer.OptimizerInfo = false;
325
326 optimizer.Optimize();
327
328 }
329
330
331 }
332 catch (Exception exception)
333 {
334 throw new ScriptStackException("Fehler in '" + scriptName + "'.", exception);
335 }
336
337 }
TokenType
Known types of Token.