27 | 27 |
self.sexprs = sexprs
|
28 | 28 |
|
29 | 29 |
def __str__(self):
|
30 | |
return "(%s)" % ' '.join([str(s) for s in self.sexprs])
|
|
30 |
return "(%s)" % ' '.join([s.__str__() for s in self.sexprs])
|
31 | 31 |
|
32 | 32 |
def head(self):
|
33 | 33 |
return self.sexprs[0]
|
|
107 | 107 |
return eval(full, prog.tail().tail().tail().tail().head(), arg)
|
108 | 108 |
if prog.head().is_atom('self'):
|
109 | 109 |
return eval(full, full, eval(full, prog.tail().head(), arg))
|
110 | |
return Atom('head').head()
|
|
110 |
raise ValueError("Cannot evaluate %r" % prog)
|
|
111 |
# return Atom('head').head() # too clever for rpython
|
111 | 112 |
|
112 | 113 |
|
113 | 114 |
def run(ptext, atext):
|
|
115 | 116 |
return eval(p, p, Parser(atext).sexpr())
|
116 | 117 |
|
117 | 118 |
|
118 | |
if __name__ == '__main__':
|
|
119 |
def main():
|
119 | 120 |
import sys
|
120 | 121 |
with open(sys.argv[1], 'r') as f:
|
121 | 122 |
inp = sys.stdin.read()
|
|
123 | 124 |
inp = 'ifeq'
|
124 | 125 |
result = run(f.read(), inp)
|
125 | 126 |
print result
|
|
127 |
|
|
128 |
|
|
129 |
def target(*args):
|
|
130 |
import os
|
|
131 |
|
|
132 |
def rpython_load(filename):
|
|
133 |
fd = os.open(filename, os.O_RDONLY, 0644)
|
|
134 |
text = ''
|
|
135 |
chunk = os.read(fd, 1024)
|
|
136 |
text += chunk
|
|
137 |
while len(chunk) == 1024:
|
|
138 |
chunk = os.read(fd, 1024)
|
|
139 |
text += chunk
|
|
140 |
os.close(fd)
|
|
141 |
return text
|
|
142 |
|
|
143 |
def rpython_input():
|
|
144 |
accum = ''
|
|
145 |
done = False
|
|
146 |
while not done:
|
|
147 |
s = os.read(1, 1)
|
|
148 |
if not s:
|
|
149 |
done = True
|
|
150 |
accum += s
|
|
151 |
return accum
|
|
152 |
|
|
153 |
def rpython_main(argv):
|
|
154 |
inp = rpython_input()
|
|
155 |
if not inp:
|
|
156 |
inp = 'ifeq'
|
|
157 |
program = rpython_load(argv[1])
|
|
158 |
result = run(program, inp)
|
|
159 |
print result.__str__()
|
|
160 |
return 0
|
|
161 |
|
|
162 |
return rpython_main, None
|
|
163 |
|
|
164 |
|
|
165 |
if __name__ == '__main__':
|
|
166 |
main()
|