-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathconstants.py
87 lines (83 loc) · 1.69 KB
/
constants.py
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
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
# keywords
CLASS = 'class'
CONSTRUCTOR = 'constructor'
FUNCTION = 'function'
METHOD = 'method'
FIELD = 'field'
STATIC = 'static'
VAR = 'var'
INT = 'int'
CHAR = 'char'
BOOLEAN = 'boolean'
VOID = 'void'
TRUE = 'true'
FALSE = 'false'
NULL = 'null'
THIS = 'this'
THAT = 'that'
LET = 'let'
DO = 'do'
IF = 'if'
ELSE = 'else'
WHILE = 'while'
RETURN = 'return'
# Symbols
LEFT_BRACE = '{'
RIGHT_BRACE = '}'
LEFT_PAREN = '('
RIGHT_PAREN = ')'
LEFT_BRACKET = '['
RIGHT_BRACKET = ']'
DOT = '.'
COMMA = ','
SEMI_COLON = ';'
PLUS = '+'
MINUS = '-'
ASTERISK = '*'
FORWARD_SLASH = '/'
AMPERSAND = '&'
PIPE = '|'
LESS_THAN = '<'
GREATER_THAN = '>'
EQUAL_SIGN = '='
TILDE = '~'
# other constants
DOUBLE_QUOTES = '"'
INT_CONSTANT = 'integerConstant'
STR_CONSTANT = 'stringConstant'
IDENTIFIER = 'identifier'
KEYWORD = 'keyword'
SYMBOL = 'symbol'
UNARY_OP = {MINUS, TILDE} # faster for in operator
OP = {PLUS, MINUS, ASTERISK, FORWARD_SLASH, AMPERSAND, PIPE, LESS_THAN, GREATER_THAN, EQUAL_SIGN}
TRUE_FALSE_NULL_THIS = {TRUE, FALSE, NULL, THIS}
SUBROUTINE = 'subroutine'
LOCAL = 'local'
ARGUMENT = 'argument'
VM_OPERATIONS = {
PLUS: "add",
MINUS: "sub",
ASTERISK: "call Math.multiply 2",
FORWARD_SLASH: "call Math.divide 2",
EQUAL_SIGN: "eq",
LESS_THAN: "lt",
GREATER_THAN: "gt",
AMPERSAND: "and",
PIPE: "or",
TILDE: "not"
}
SEGMENT_OF_KIND = {
FIELD: THIS,
ARGUMENT: ARGUMENT,
LOCAL: LOCAL,
STATIC: STATIC
}
# informative labels
IF_FALSE = "IF_FALSE"
IF_TRUE = "IF_TRUE"
WHILE_END = "WHILE_END"
WHILE_EXP = 'WHILE_EXP'
SRC_FILE_EXT = '.jack'
VM_FILE_EXT = '.vm'
NEWLINE = '\n'
INDENT_NUM_SPACES = 2