-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathcompilation_engine.h
45 lines (40 loc) · 1.21 KB
/
compilation_engine.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
#pragma once
#include "OutputEngine.h"
#include "hack_map.h"
#include "tokenizer.h"
class CompilationEngine {
public:
CompilationEngine (std::shared_ptr<HackMap>);
// Setters
void set_tokenizer (std::shared_ptr<Tokenizer>);
void set_output_engine (std::shared_ptr<OutputEngine>);
void compile ();
private:
// Compilers
void compile_class ();
void compile_class_var_dec ();
void compile_subroutine_dec ();
void compile_parameter_list ();
void compile_subroutine_body ();
void compile_var_dec ();
void compile_let ();
void compile_if ();
void compile_while ();
void compile_return ();
void compile_do ();
void compile_expression ();
void compile_term ();
void compile_expression_list (std::string end);
void compile_statements ();
// Helpers
void advance_and_write (TokenType);
void advance_and_write (std::vector<TokenType>);
void advance_and_write (TokenType, std::string);
void _compile_multiple_dec ();
void _compile_var_name ();
void _compile_subroutine_call (bool must = true);
private:
std::shared_ptr<Tokenizer> tokenizer;
std::shared_ptr<HackMap> hack_map;
std::shared_ptr<OutputEngine> output_engine;
};