Holy crap. ----- Forwarded message from Andrew Kuchling <akuchlin@mems-exchange.org> ----- From: Andrew Kuchling <akuchlin@mems-exchange.org> Subject: [Python-Dev] Crude Python->Parrot compiler To: python-dev@python.org Reply-To: akuchlin@mems-exchange.org X-Beenthere: python-dev@python.org X-Mailman-Version: 2.0.6 (101270) Over the last few days I've been experimenting with a simple Python->Parrot compiler. This morning I finally implemented binding variables to a register, so it now can actually compute something. See http://www.mems-exchange.org/software/files/parrot-gen.py for the code. Limitations: * Currently this only understands a *really* limited subset of Python. * The only allowable type is integer; strings, floats, long ints, &c., aren't supported at all. * It will die with an assertion if you feed it a language construct it doesn't handle (def, class, most operators). * Code structure is suboptimal; this is just a quick-and-dirty hack. Example usage: ute parrot>cat euclid.py # Python implementation of Euclid's algorithm m = 96 n = 64 print m,n r = m % n while r != 0: m = n n = r r = m % n print n ute parrot>python euclid.py 96 64 32 ute parrot>python parrot-gen.py -r euclid.py 96 64 32 ute parrot>cat euclid.pasm main: set I3, 96 set I10, 64 set I9, 0 add I0, I3, I9 ... <rest deleted; you get the idea> ... Currently the Parrot interpreter only supports integer, floating point, and string registers. There's no way to store the contents of a register in memory as far as I can tell, and PMCs -- the polymorphic objects that would correspond to PyObjects -- aren't implemented either. This means it's not possible to handle general variables, and therefore we'll have to wait for PMCs before general Python programs can be handled. --amk _______________________________________________ Python-Dev mailing list Python-Dev@python.org http://mail.python.org/mailman/listinfo/python-dev ----- End forwarded message ----- -- You are in a maze of little twisting passages, all different.