Programming D. E. Knuth in Python with the Deterministic Finite Automaton construct

Kiuhnm kiuhnm03.4t.yahoo.it
Mon Mar 19 02:02:23 CET 2012


On 3/18/2012 0:28, Michael Torrie wrote:
> I am familiar with how one
> might implement a decompiler, as well as a compiler (having written a
> simple one in the past), but even now I don't see a connection between a
> decompiler and the process of converting a knuth algorithm into a python
> python implementation.  I was hoping you would shed some light on that.
>   But alas, I'm not really as much of an "interested reader" as you would
> like me to be.

Many ASM languages don't have structured control flow statements but 
only jmps, which are roughly equivalent to gotos. A good decompiler will 
need to analize the net of jmps and try to rewrite the code using 
structured control flow statements.
The idea is to maximize readability, of course.

>> Here's an example of rewriting:
>> <snip>
>
> Thank you.  Your example makes more clear your assertion about "labels"
> and how really A1 and A5 were the only real labels in the example.
> Though I still do not really see why "states" is not a good equivalence
> for labels in this case.  As well, Roy's idea for doing the state
> machines, which works equally well as the nested if statements, is more
> pythonic, which is generally preferred in Python.

What I don't like about the entire issue is that (pseudo-)code shouldn't 
be cut and pasted or blindly ported to another language.
Python is a very expressive language. I don't think you like it when 
someone writes C code in Python. Now we're writing ASM code in Python!
If you want to emulate a DFA, do it, but if you want to implement an 
algorithm whose pseudo-code happens to use labels and gotos, please use 
higher-level control flow statements (unless you're pressed on time and 
you need it done yesterday, of course).

Regarding labels and state, I simply meant that they're completely 
different things, in fact this program has two labels but infinitely 
many states:
A1:  cur = cur + 1
A2:  goto A1
I was being pedantic, to say it your way ;)

Kiuhnm



More information about the Python-list mailing list