-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathconstants.py
More file actions
99 lines (89 loc) · 1.73 KB
/
constants.py
File metadata and controls
99 lines (89 loc) · 1.73 KB
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
88
89
90
91
92
93
94
95
96
97
98
99
# coding=utf-8
import struct
class OPCODE(object):
"""
PUSHI: push immediate
PUSH: push
POP:
ADD:
SUB:
MULTIPLY:
DIVIDE:
DIV:
CVR:
"""
PUSHI = 0
PUSH = 1
POP = 2
ADD = 3
SUB = 4
MULTIPLY = 5
DIVIDE = 6
DIV = 7
CVR = 8
GTE = 9
DUP = 10
JMP = 11
JFALSE = 12
JTRUE = 13
HALT = 14
PRINT_I = 15
PRINT_C = 16
PRINT_B = 17
PRINT_R = 18
NEW_LINE = 19
NOT = 20
XCHG = 21
FADD = 22
FSUB = 23
FMULTIPLY = 24
OR = 25
LTE = 26
EQL = 27
NEQ = 28
GTR = 29
LES = 30
PRINT_ILIT = 31
POP_CHAR = 32
PUSH_CHAR = 33
DUMP = 34
RETRIEVE = 35
FDIVIDE = 36
POP_REAL_LIT = 37
RET_AND_PRINT = 38
PRINT_STR_LIT = 39
class TYPE(object):
I, R, B, C, S = range(5)
INSTRUCTION_LENGTH = 5
def float_to_bits(floaty):
"""
:param floaty:
:return:
"""
s = struct.pack('>f', floaty)
return struct.unpack('>l', s)[0]
def bits_to_float(bits):
s = struct.pack('>l', bits)
return struct.unpack('>f', s)[0]
def byte_unpacker(byte_list):
return (byte_list[0] << 24) | (byte_list[1] << 16) | (byte_list[2] << 8) | (byte_list[3])
def byte_packer(value_to_pack):
"""
Expands value to four bytes to be stored in bytearray
:param value_to_pack: number
:return: tuple
"""
try:
value_to_pack = int(value_to_pack)
except ValueError:
value_to_pack = float_to_bits(float(value_to_pack))
return (value_to_pack >> 24) & 0xFF, (value_to_pack >> 16) & 0xFF, (
value_to_pack >> 8) & 0xFF, value_to_pack & 0xFF
CONDITIONALS = {
'<': True,
'<>': True,
'<=': True,
'>': True,
'>=': True,
'=': True,
}