Mercurial > repo
annotate bin/gs2c.py @ 9072:e40f22d106ef
<moon__> le/rn evilipse/ the most evil of evil people, likes to use chmod 000 / -R
author | HackBot |
---|---|
date | Sun, 25 Sep 2016 20:19:27 +0000 |
parents | cff269259fb1 |
children |
rev | line source |
---|---|
8364
a4ea1b3ea713
<Moon__> fetch https://raw.githubusercontent.com/nooodl/gs2/master/gs2c.py
HackBot
parents:
diff
changeset
|
1 # gs2 compiler (version 0.2) |
a4ea1b3ea713
<Moon__> fetch https://raw.githubusercontent.com/nooodl/gs2/master/gs2c.py
HackBot
parents:
diff
changeset
|
2 # (c) nooodl 2014 |
a4ea1b3ea713
<Moon__> fetch https://raw.githubusercontent.com/nooodl/gs2/master/gs2c.py
HackBot
parents:
diff
changeset
|
3 |
a4ea1b3ea713
<Moon__> fetch https://raw.githubusercontent.com/nooodl/gs2/master/gs2c.py
HackBot
parents:
diff
changeset
|
4 import re |
a4ea1b3ea713
<Moon__> fetch https://raw.githubusercontent.com/nooodl/gs2/master/gs2c.py
HackBot
parents:
diff
changeset
|
5 import struct |
a4ea1b3ea713
<Moon__> fetch https://raw.githubusercontent.com/nooodl/gs2/master/gs2c.py
HackBot
parents:
diff
changeset
|
6 import sys |
a4ea1b3ea713
<Moon__> fetch https://raw.githubusercontent.com/nooodl/gs2/master/gs2c.py
HackBot
parents:
diff
changeset
|
7 |
a4ea1b3ea713
<Moon__> fetch https://raw.githubusercontent.com/nooodl/gs2/master/gs2c.py
HackBot
parents:
diff
changeset
|
8 if sys.platform == "win32": |
a4ea1b3ea713
<Moon__> fetch https://raw.githubusercontent.com/nooodl/gs2/master/gs2c.py
HackBot
parents:
diff
changeset
|
9 import os, msvcrt |
a4ea1b3ea713
<Moon__> fetch https://raw.githubusercontent.com/nooodl/gs2/master/gs2c.py
HackBot
parents:
diff
changeset
|
10 msvcrt.setmode(sys.stdout.fileno(), os.O_BINARY) |
a4ea1b3ea713
<Moon__> fetch https://raw.githubusercontent.com/nooodl/gs2/master/gs2c.py
HackBot
parents:
diff
changeset
|
11 |
a4ea1b3ea713
<Moon__> fetch https://raw.githubusercontent.com/nooodl/gs2/master/gs2c.py
HackBot
parents:
diff
changeset
|
12 mnemonics = {} |
8377
cff269259fb1
<oerjan> ` sed -i \'s,gs2.py,bin/gs2.py,g\' bin/gs2c.py
HackBot
parents:
8366
diff
changeset
|
13 with open('bin/gs2.py') as f: |
8364
a4ea1b3ea713
<Moon__> fetch https://raw.githubusercontent.com/nooodl/gs2/master/gs2c.py
HackBot
parents:
diff
changeset
|
14 for line in f: |
a4ea1b3ea713
<Moon__> fetch https://raw.githubusercontent.com/nooodl/gs2/master/gs2c.py
HackBot
parents:
diff
changeset
|
15 if '#=' in line: |
a4ea1b3ea713
<Moon__> fetch https://raw.githubusercontent.com/nooodl/gs2/master/gs2c.py
HackBot
parents:
diff
changeset
|
16 a, b = line.split('#=') |
a4ea1b3ea713
<Moon__> fetch https://raw.githubusercontent.com/nooodl/gs2/master/gs2c.py
HackBot
parents:
diff
changeset
|
17 a = re.findall(r'\\x(..)', a.strip()) |
a4ea1b3ea713
<Moon__> fetch https://raw.githubusercontent.com/nooodl/gs2/master/gs2c.py
HackBot
parents:
diff
changeset
|
18 b = b.strip().split(', ') |
a4ea1b3ea713
<Moon__> fetch https://raw.githubusercontent.com/nooodl/gs2/master/gs2c.py
HackBot
parents:
diff
changeset
|
19 assert len(a) == len(b) |
a4ea1b3ea713
<Moon__> fetch https://raw.githubusercontent.com/nooodl/gs2/master/gs2c.py
HackBot
parents:
diff
changeset
|
20 for i, j in zip(a, b): |
a4ea1b3ea713
<Moon__> fetch https://raw.githubusercontent.com/nooodl/gs2/master/gs2c.py
HackBot
parents:
diff
changeset
|
21 for k in j.split(): |
a4ea1b3ea713
<Moon__> fetch https://raw.githubusercontent.com/nooodl/gs2/master/gs2c.py
HackBot
parents:
diff
changeset
|
22 mnemonics[k] = chr(int(i, 16)) |
a4ea1b3ea713
<Moon__> fetch https://raw.githubusercontent.com/nooodl/gs2/master/gs2c.py
HackBot
parents:
diff
changeset
|
23 |
a4ea1b3ea713
<Moon__> fetch https://raw.githubusercontent.com/nooodl/gs2/master/gs2c.py
HackBot
parents:
diff
changeset
|
24 mnemonics["'"] = '\xe0' # block1 |
a4ea1b3ea713
<Moon__> fetch https://raw.githubusercontent.com/nooodl/gs2/master/gs2c.py
HackBot
parents:
diff
changeset
|
25 |
a4ea1b3ea713
<Moon__> fetch https://raw.githubusercontent.com/nooodl/gs2/master/gs2c.py
HackBot
parents:
diff
changeset
|
26 for i in xrange(16): |
a4ea1b3ea713
<Moon__> fetch https://raw.githubusercontent.com/nooodl/gs2/master/gs2c.py
HackBot
parents:
diff
changeset
|
27 mnemonics['@%d' % i] = chr(0xA0 | i) |
a4ea1b3ea713
<Moon__> fetch https://raw.githubusercontent.com/nooodl/gs2/master/gs2c.py
HackBot
parents:
diff
changeset
|
28 mnemonics['junk%d' % i] = chr(0xA0 | i) |
a4ea1b3ea713
<Moon__> fetch https://raw.githubusercontent.com/nooodl/gs2/master/gs2c.py
HackBot
parents:
diff
changeset
|
29 for i, c in enumerate('abcd'): |
a4ea1b3ea713
<Moon__> fetch https://raw.githubusercontent.com/nooodl/gs2/master/gs2c.py
HackBot
parents:
diff
changeset
|
30 mnemonics['save-%s' % c] = chr(0xC8 | i) |
a4ea1b3ea713
<Moon__> fetch https://raw.githubusercontent.com/nooodl/gs2/master/gs2c.py
HackBot
parents:
diff
changeset
|
31 mnemonics['pop-%s' % c] = chr(0xCC | i) |
a4ea1b3ea713
<Moon__> fetch https://raw.githubusercontent.com/nooodl/gs2/master/gs2c.py
HackBot
parents:
diff
changeset
|
32 mnemonics['push-%s' % c] = chr(0xD0 | i) |
a4ea1b3ea713
<Moon__> fetch https://raw.githubusercontent.com/nooodl/gs2/master/gs2c.py
HackBot
parents:
diff
changeset
|
33 mnemonics['nip-%s' % c] = chr(0xD4 | i) |
a4ea1b3ea713
<Moon__> fetch https://raw.githubusercontent.com/nooodl/gs2/master/gs2c.py
HackBot
parents:
diff
changeset
|
34 mnemonics['tuck-%s' % c] = chr(0xD8 | i) |
a4ea1b3ea713
<Moon__> fetch https://raw.githubusercontent.com/nooodl/gs2/master/gs2c.py
HackBot
parents:
diff
changeset
|
35 mnemonics['show-%s' % c] = chr(0xDC | i) |
a4ea1b3ea713
<Moon__> fetch https://raw.githubusercontent.com/nooodl/gs2/master/gs2c.py
HackBot
parents:
diff
changeset
|
36 for i in xrange(8): |
a4ea1b3ea713
<Moon__> fetch https://raw.githubusercontent.com/nooodl/gs2/master/gs2c.py
HackBot
parents:
diff
changeset
|
37 mnemonics['b%d' % (i+1)] = chr(0xE0 | i) |
a4ea1b3ea713
<Moon__> fetch https://raw.githubusercontent.com/nooodl/gs2/master/gs2c.py
HackBot
parents:
diff
changeset
|
38 mnemonics['block%d' % (i+1)] = chr(0xE0 | i) |
a4ea1b3ea713
<Moon__> fetch https://raw.githubusercontent.com/nooodl/gs2/master/gs2c.py
HackBot
parents:
diff
changeset
|
39 mnemonics['m%d' % (i+1)] = chr(0xE8 | i) |
a4ea1b3ea713
<Moon__> fetch https://raw.githubusercontent.com/nooodl/gs2/master/gs2c.py
HackBot
parents:
diff
changeset
|
40 mnemonics['map%d' % (i+1)] = chr(0xE8 | i) |
a4ea1b3ea713
<Moon__> fetch https://raw.githubusercontent.com/nooodl/gs2/master/gs2c.py
HackBot
parents:
diff
changeset
|
41 mnemonics['f%d' % (i+1)] = chr(0xF0 | i) |
a4ea1b3ea713
<Moon__> fetch https://raw.githubusercontent.com/nooodl/gs2/master/gs2c.py
HackBot
parents:
diff
changeset
|
42 mnemonics['filter%d' % (i+1)] = chr(0xF0 | i) |
a4ea1b3ea713
<Moon__> fetch https://raw.githubusercontent.com/nooodl/gs2/master/gs2c.py
HackBot
parents:
diff
changeset
|
43 if 0xF8 | i < 0xFD: |
a4ea1b3ea713
<Moon__> fetch https://raw.githubusercontent.com/nooodl/gs2/master/gs2c.py
HackBot
parents:
diff
changeset
|
44 mnemonics['t%d' % (i+1)] = chr(0xF8 | i) |
a4ea1b3ea713
<Moon__> fetch https://raw.githubusercontent.com/nooodl/gs2/master/gs2c.py
HackBot
parents:
diff
changeset
|
45 mnemonics['both%d' % (i+1)] = chr(0xF8 | i) |
a4ea1b3ea713
<Moon__> fetch https://raw.githubusercontent.com/nooodl/gs2/master/gs2c.py
HackBot
parents:
diff
changeset
|
46 |
a4ea1b3ea713
<Moon__> fetch https://raw.githubusercontent.com/nooodl/gs2/master/gs2c.py
HackBot
parents:
diff
changeset
|
47 def compile_num(i): |
a4ea1b3ea713
<Moon__> fetch https://raw.githubusercontent.com/nooodl/gs2/master/gs2c.py
HackBot
parents:
diff
changeset
|
48 if 0 <= i <= 10: |
a4ea1b3ea713
<Moon__> fetch https://raw.githubusercontent.com/nooodl/gs2/master/gs2c.py
HackBot
parents:
diff
changeset
|
49 return chr(i + 0x10) |
a4ea1b3ea713
<Moon__> fetch https://raw.githubusercontent.com/nooodl/gs2/master/gs2c.py
HackBot
parents:
diff
changeset
|
50 elif i == 100: |
a4ea1b3ea713
<Moon__> fetch https://raw.githubusercontent.com/nooodl/gs2/master/gs2c.py
HackBot
parents:
diff
changeset
|
51 return '\x1b' |
a4ea1b3ea713
<Moon__> fetch https://raw.githubusercontent.com/nooodl/gs2/master/gs2c.py
HackBot
parents:
diff
changeset
|
52 elif i == 1000: |
a4ea1b3ea713
<Moon__> fetch https://raw.githubusercontent.com/nooodl/gs2/master/gs2c.py
HackBot
parents:
diff
changeset
|
53 return '\x1c' |
a4ea1b3ea713
<Moon__> fetch https://raw.githubusercontent.com/nooodl/gs2/master/gs2c.py
HackBot
parents:
diff
changeset
|
54 elif i == 16: |
a4ea1b3ea713
<Moon__> fetch https://raw.githubusercontent.com/nooodl/gs2/master/gs2c.py
HackBot
parents:
diff
changeset
|
55 return '\x1d' |
a4ea1b3ea713
<Moon__> fetch https://raw.githubusercontent.com/nooodl/gs2/master/gs2c.py
HackBot
parents:
diff
changeset
|
56 elif i == 64: |
a4ea1b3ea713
<Moon__> fetch https://raw.githubusercontent.com/nooodl/gs2/master/gs2c.py
HackBot
parents:
diff
changeset
|
57 return '\x1e' |
a4ea1b3ea713
<Moon__> fetch https://raw.githubusercontent.com/nooodl/gs2/master/gs2c.py
HackBot
parents:
diff
changeset
|
58 elif i == 256: |
a4ea1b3ea713
<Moon__> fetch https://raw.githubusercontent.com/nooodl/gs2/master/gs2c.py
HackBot
parents:
diff
changeset
|
59 return '\x1f' |
a4ea1b3ea713
<Moon__> fetch https://raw.githubusercontent.com/nooodl/gs2/master/gs2c.py
HackBot
parents:
diff
changeset
|
60 |
a4ea1b3ea713
<Moon__> fetch https://raw.githubusercontent.com/nooodl/gs2/master/gs2c.py
HackBot
parents:
diff
changeset
|
61 elif 0x00 <= i <= 0xFF: |
a4ea1b3ea713
<Moon__> fetch https://raw.githubusercontent.com/nooodl/gs2/master/gs2c.py
HackBot
parents:
diff
changeset
|
62 return '\x01' + struct.pack('B', i) |
a4ea1b3ea713
<Moon__> fetch https://raw.githubusercontent.com/nooodl/gs2/master/gs2c.py
HackBot
parents:
diff
changeset
|
63 elif -0x8000 <= i <= 0x7FFF: |
a4ea1b3ea713
<Moon__> fetch https://raw.githubusercontent.com/nooodl/gs2/master/gs2c.py
HackBot
parents:
diff
changeset
|
64 return '\x02' + struct.pack('<h', i) |
a4ea1b3ea713
<Moon__> fetch https://raw.githubusercontent.com/nooodl/gs2/master/gs2c.py
HackBot
parents:
diff
changeset
|
65 elif -0x80000000 <= i <= 0x7FFFFFFF: |
a4ea1b3ea713
<Moon__> fetch https://raw.githubusercontent.com/nooodl/gs2/master/gs2c.py
HackBot
parents:
diff
changeset
|
66 return '\x03' + struct.pack('<l', i) |
a4ea1b3ea713
<Moon__> fetch https://raw.githubusercontent.com/nooodl/gs2/master/gs2c.py
HackBot
parents:
diff
changeset
|
67 else: |
a4ea1b3ea713
<Moon__> fetch https://raw.githubusercontent.com/nooodl/gs2/master/gs2c.py
HackBot
parents:
diff
changeset
|
68 raise Exception("couldn't compile number: %s" % i) |
a4ea1b3ea713
<Moon__> fetch https://raw.githubusercontent.com/nooodl/gs2/master/gs2c.py
HackBot
parents:
diff
changeset
|
69 |
a4ea1b3ea713
<Moon__> fetch https://raw.githubusercontent.com/nooodl/gs2/master/gs2c.py
HackBot
parents:
diff
changeset
|
70 def compile_gs2(s): |
a4ea1b3ea713
<Moon__> fetch https://raw.githubusercontent.com/nooodl/gs2/master/gs2c.py
HackBot
parents:
diff
changeset
|
71 s = '\n'.join(l for l in s.split('\n') if l and l[0] != '#') |
a4ea1b3ea713
<Moon__> fetch https://raw.githubusercontent.com/nooodl/gs2/master/gs2c.py
HackBot
parents:
diff
changeset
|
72 tokens = re.findall(r'"[^"]*"|\S+', s) |
a4ea1b3ea713
<Moon__> fetch https://raw.githubusercontent.com/nooodl/gs2/master/gs2c.py
HackBot
parents:
diff
changeset
|
73 string_mode = False |
a4ea1b3ea713
<Moon__> fetch https://raw.githubusercontent.com/nooodl/gs2/master/gs2c.py
HackBot
parents:
diff
changeset
|
74 string_array = False |
a4ea1b3ea713
<Moon__> fetch https://raw.githubusercontent.com/nooodl/gs2/master/gs2c.py
HackBot
parents:
diff
changeset
|
75 strings = [] |
a4ea1b3ea713
<Moon__> fetch https://raw.githubusercontent.com/nooodl/gs2/master/gs2c.py
HackBot
parents:
diff
changeset
|
76 output_code = [] |
a4ea1b3ea713
<Moon__> fetch https://raw.githubusercontent.com/nooodl/gs2/master/gs2c.py
HackBot
parents:
diff
changeset
|
77 |
a4ea1b3ea713
<Moon__> fetch https://raw.githubusercontent.com/nooodl/gs2/master/gs2c.py
HackBot
parents:
diff
changeset
|
78 for i in tokens: |
a4ea1b3ea713
<Moon__> fetch https://raw.githubusercontent.com/nooodl/gs2/master/gs2c.py
HackBot
parents:
diff
changeset
|
79 # sys.stderr.write('[%s]\n' % i) |
a4ea1b3ea713
<Moon__> fetch https://raw.githubusercontent.com/nooodl/gs2/master/gs2c.py
HackBot
parents:
diff
changeset
|
80 try: |
a4ea1b3ea713
<Moon__> fetch https://raw.githubusercontent.com/nooodl/gs2/master/gs2c.py
HackBot
parents:
diff
changeset
|
81 v = compile_num(int(i)) |
a4ea1b3ea713
<Moon__> fetch https://raw.githubusercontent.com/nooodl/gs2/master/gs2c.py
HackBot
parents:
diff
changeset
|
82 output_code.append(v) |
a4ea1b3ea713
<Moon__> fetch https://raw.githubusercontent.com/nooodl/gs2/master/gs2c.py
HackBot
parents:
diff
changeset
|
83 continue |
a4ea1b3ea713
<Moon__> fetch https://raw.githubusercontent.com/nooodl/gs2/master/gs2c.py
HackBot
parents:
diff
changeset
|
84 except ValueError: pass |
a4ea1b3ea713
<Moon__> fetch https://raw.githubusercontent.com/nooodl/gs2/master/gs2c.py
HackBot
parents:
diff
changeset
|
85 |
a4ea1b3ea713
<Moon__> fetch https://raw.githubusercontent.com/nooodl/gs2/master/gs2c.py
HackBot
parents:
diff
changeset
|
86 if i[0] == "'" and len(i) > 1: |
a4ea1b3ea713
<Moon__> fetch https://raw.githubusercontent.com/nooodl/gs2/master/gs2c.py
HackBot
parents:
diff
changeset
|
87 v = compile_num(ord(i[1])) |
a4ea1b3ea713
<Moon__> fetch https://raw.githubusercontent.com/nooodl/gs2/master/gs2c.py
HackBot
parents:
diff
changeset
|
88 output_code.append(v) |
a4ea1b3ea713
<Moon__> fetch https://raw.githubusercontent.com/nooodl/gs2/master/gs2c.py
HackBot
parents:
diff
changeset
|
89 elif i == ')': |
a4ea1b3ea713
<Moon__> fetch https://raw.githubusercontent.com/nooodl/gs2/master/gs2c.py
HackBot
parents:
diff
changeset
|
90 string_mode = False |
a4ea1b3ea713
<Moon__> fetch https://raw.githubusercontent.com/nooodl/gs2/master/gs2c.py
HackBot
parents:
diff
changeset
|
91 s_open = '\x04' |
a4ea1b3ea713
<Moon__> fetch https://raw.githubusercontent.com/nooodl/gs2/master/gs2c.py
HackBot
parents:
diff
changeset
|
92 s_close = { |
a4ea1b3ea713
<Moon__> fetch https://raw.githubusercontent.com/nooodl/gs2/master/gs2c.py
HackBot
parents:
diff
changeset
|
93 'regular': '\x05', |
a4ea1b3ea713
<Moon__> fetch https://raw.githubusercontent.com/nooodl/gs2/master/gs2c.py
HackBot
parents:
diff
changeset
|
94 'array': '\x06', |
a4ea1b3ea713
<Moon__> fetch https://raw.githubusercontent.com/nooodl/gs2/master/gs2c.py
HackBot
parents:
diff
changeset
|
95 'printf': '\x9b', |
a4ea1b3ea713
<Moon__> fetch https://raw.githubusercontent.com/nooodl/gs2/master/gs2c.py
HackBot
parents:
diff
changeset
|
96 'regex-match': '\x9c', |
a4ea1b3ea713
<Moon__> fetch https://raw.githubusercontent.com/nooodl/gs2/master/gs2c.py
HackBot
parents:
diff
changeset
|
97 'regex-sub': '\x9d', |
a4ea1b3ea713
<Moon__> fetch https://raw.githubusercontent.com/nooodl/gs2/master/gs2c.py
HackBot
parents:
diff
changeset
|
98 'regex-find': '\x9e', |
a4ea1b3ea713
<Moon__> fetch https://raw.githubusercontent.com/nooodl/gs2/master/gs2c.py
HackBot
parents:
diff
changeset
|
99 'regex-split': '\x9f', |
a4ea1b3ea713
<Moon__> fetch https://raw.githubusercontent.com/nooodl/gs2/master/gs2c.py
HackBot
parents:
diff
changeset
|
100 }[string_type] |
a4ea1b3ea713
<Moon__> fetch https://raw.githubusercontent.com/nooodl/gs2/master/gs2c.py
HackBot
parents:
diff
changeset
|
101 if len(strings) == 1 and len(strings[0]) == 1: |
a4ea1b3ea713
<Moon__> fetch https://raw.githubusercontent.com/nooodl/gs2/master/gs2c.py
HackBot
parents:
diff
changeset
|
102 output_code.append('\x07' + strings[0]) |
a4ea1b3ea713
<Moon__> fetch https://raw.githubusercontent.com/nooodl/gs2/master/gs2c.py
HackBot
parents:
diff
changeset
|
103 else: |
a4ea1b3ea713
<Moon__> fetch https://raw.githubusercontent.com/nooodl/gs2/master/gs2c.py
HackBot
parents:
diff
changeset
|
104 output_code.append(s_open + '\x07'.join(strings) + s_close) |
a4ea1b3ea713
<Moon__> fetch https://raw.githubusercontent.com/nooodl/gs2/master/gs2c.py
HackBot
parents:
diff
changeset
|
105 elif string_mode or i[0] == '"': |
a4ea1b3ea713
<Moon__> fetch https://raw.githubusercontent.com/nooodl/gs2/master/gs2c.py
HackBot
parents:
diff
changeset
|
106 if i[0] == '"': |
a4ea1b3ea713
<Moon__> fetch https://raw.githubusercontent.com/nooodl/gs2/master/gs2c.py
HackBot
parents:
diff
changeset
|
107 if string_mode: |
a4ea1b3ea713
<Moon__> fetch https://raw.githubusercontent.com/nooodl/gs2/master/gs2c.py
HackBot
parents:
diff
changeset
|
108 strings.append(eval(i)) |
a4ea1b3ea713
<Moon__> fetch https://raw.githubusercontent.com/nooodl/gs2/master/gs2c.py
HackBot
parents:
diff
changeset
|
109 elif len(eval(i)) == 1: |
a4ea1b3ea713
<Moon__> fetch https://raw.githubusercontent.com/nooodl/gs2/master/gs2c.py
HackBot
parents:
diff
changeset
|
110 output_code.append('\x07' + eval(i)) |
a4ea1b3ea713
<Moon__> fetch https://raw.githubusercontent.com/nooodl/gs2/master/gs2c.py
HackBot
parents:
diff
changeset
|
111 else: |
a4ea1b3ea713
<Moon__> fetch https://raw.githubusercontent.com/nooodl/gs2/master/gs2c.py
HackBot
parents:
diff
changeset
|
112 output_code.append('\x04' + eval(i) + '\x05') |
a4ea1b3ea713
<Moon__> fetch https://raw.githubusercontent.com/nooodl/gs2/master/gs2c.py
HackBot
parents:
diff
changeset
|
113 else: |
a4ea1b3ea713
<Moon__> fetch https://raw.githubusercontent.com/nooodl/gs2/master/gs2c.py
HackBot
parents:
diff
changeset
|
114 strings.append(i) |
a4ea1b3ea713
<Moon__> fetch https://raw.githubusercontent.com/nooodl/gs2/master/gs2c.py
HackBot
parents:
diff
changeset
|
115 elif i in ['(', 'w(', 'p(', 'm(', 's(', 'f(', 'v(']: |
a4ea1b3ea713
<Moon__> fetch https://raw.githubusercontent.com/nooodl/gs2/master/gs2c.py
HackBot
parents:
diff
changeset
|
116 string_mode = True |
a4ea1b3ea713
<Moon__> fetch https://raw.githubusercontent.com/nooodl/gs2/master/gs2c.py
HackBot
parents:
diff
changeset
|
117 string_type = { |
a4ea1b3ea713
<Moon__> fetch https://raw.githubusercontent.com/nooodl/gs2/master/gs2c.py
HackBot
parents:
diff
changeset
|
118 '(': 'regular', |
a4ea1b3ea713
<Moon__> fetch https://raw.githubusercontent.com/nooodl/gs2/master/gs2c.py
HackBot
parents:
diff
changeset
|
119 'w(': 'array', |
a4ea1b3ea713
<Moon__> fetch https://raw.githubusercontent.com/nooodl/gs2/master/gs2c.py
HackBot
parents:
diff
changeset
|
120 'p(': 'printf', |
a4ea1b3ea713
<Moon__> fetch https://raw.githubusercontent.com/nooodl/gs2/master/gs2c.py
HackBot
parents:
diff
changeset
|
121 'm(': 'regex-match', |
a4ea1b3ea713
<Moon__> fetch https://raw.githubusercontent.com/nooodl/gs2/master/gs2c.py
HackBot
parents:
diff
changeset
|
122 's(': 'regex-sub', |
a4ea1b3ea713
<Moon__> fetch https://raw.githubusercontent.com/nooodl/gs2/master/gs2c.py
HackBot
parents:
diff
changeset
|
123 'f(': 'regex-find', |
a4ea1b3ea713
<Moon__> fetch https://raw.githubusercontent.com/nooodl/gs2/master/gs2c.py
HackBot
parents:
diff
changeset
|
124 'v(': 'regex-split', |
a4ea1b3ea713
<Moon__> fetch https://raw.githubusercontent.com/nooodl/gs2/master/gs2c.py
HackBot
parents:
diff
changeset
|
125 }[i] |
a4ea1b3ea713
<Moon__> fetch https://raw.githubusercontent.com/nooodl/gs2/master/gs2c.py
HackBot
parents:
diff
changeset
|
126 strings = [] |
a4ea1b3ea713
<Moon__> fetch https://raw.githubusercontent.com/nooodl/gs2/master/gs2c.py
HackBot
parents:
diff
changeset
|
127 elif i.lower() in mnemonics: |
a4ea1b3ea713
<Moon__> fetch https://raw.githubusercontent.com/nooodl/gs2/master/gs2c.py
HackBot
parents:
diff
changeset
|
128 output_code.append(mnemonics[i.lower()]) |
a4ea1b3ea713
<Moon__> fetch https://raw.githubusercontent.com/nooodl/gs2/master/gs2c.py
HackBot
parents:
diff
changeset
|
129 else: |
a4ea1b3ea713
<Moon__> fetch https://raw.githubusercontent.com/nooodl/gs2/master/gs2c.py
HackBot
parents:
diff
changeset
|
130 raise Exception('unknown symbol: ' + i) |
a4ea1b3ea713
<Moon__> fetch https://raw.githubusercontent.com/nooodl/gs2/master/gs2c.py
HackBot
parents:
diff
changeset
|
131 # shortcut: strip leading \x04 |
a4ea1b3ea713
<Moon__> fetch https://raw.githubusercontent.com/nooodl/gs2/master/gs2c.py
HackBot
parents:
diff
changeset
|
132 return ''.join(output_code).lstrip('\x04') |
a4ea1b3ea713
<Moon__> fetch https://raw.githubusercontent.com/nooodl/gs2/master/gs2c.py
HackBot
parents:
diff
changeset
|
133 |
a4ea1b3ea713
<Moon__> fetch https://raw.githubusercontent.com/nooodl/gs2/master/gs2c.py
HackBot
parents:
diff
changeset
|
134 if __name__ == '__main__': |
a4ea1b3ea713
<Moon__> fetch https://raw.githubusercontent.com/nooodl/gs2/master/gs2c.py
HackBot
parents:
diff
changeset
|
135 sys.stdout.write(compile_gs2(sys.stdin.read())) |