Programming D. E. Knuth in Python with the Deterministic Finite Automaton construct
Kiuhnm
kiuhnm03.4t.yahoo.it
Sat Mar 17 13:55:14 EDT 2012
On 3/17/2012 16:53, Michael Torrie wrote:
> On 03/17/2012 09:12 AM, Kiuhnm wrote:
>> On 3/17/2012 16:01, Michael Torrie wrote:
>>> On 03/17/2012 08:45 AM, Kiuhnm wrote:
>>>> Your way is easy, but the result is poor.
>>>
>>> In what way?
>>
>> The resulting code is inefficient, difficult to comprehend and to mantain.
>>
>>> What is your recommended way?
>>
>> One should rewrite the code. There is a reason why Python doesn't have
>> gotos.
>
> We appear to have a language barrier here. How should one rewrite the
> code? Everyone knows python doesn't have gotos and state machines have
> to be created using other mechanisms like loops, state variables, and
> such. Your suggestion to "rewrite the code" is unhelpful to the OP if
> you're not willing to suggest the best method for doing so.
Why should I write a treatise on decompilation techniques on this ng?
> Saying, "be
> like a decompiler" doesn't say anything.
That looks like a glaring contradiction to me...
I'm sure the interested reader will think of some ways of getting additional information on the subject.
Here's an example of rewriting:
A1. (Do the work of Phase A1.) If <zap> then go to Phase A5,
otherwise continue.
A2. (Do some work.) If <zorp> go to Phase A4.
A3. (Some more work.)
A4. (Do something.) If <condition ZZZ> go to Phase A1.
A5. (Something more). If <foobar> then go to Phase A2, otherwise
end.
==>
A1. (Do the work of Phase A1.)
If not <zap>:
A2. (Do some work.) If <zorp> go to Phase A4.
A3. (Some more work.)
A4. (Do something.) If <condition ZZZ> go to Phase A1.
A5. (Something more). If <foobar> then go to Phase A2, otherwise
end.
==>
A1. (Do the work of Phase A1.)
If not <zap>:
A2. (Do some work.)
If not <zorp>:
A3. (Some more work.)
A4. (Do something.) If <condition ZZZ> go to Phase A1.
A5. (Something more). If <foobar> then go to Phase A2, otherwise
end.
==>
while (True):
A1. (Do the work of Phase A1.)
If not <zap>:
A2. (Do some work.)
If not <zorp>:
A3. (Some more work.)
A4. (Do something.)
If not <condition ZZZ>:
break
A5. (Something more). If <foobar> then go to Phase A2
==>
while (True):
A1. (Do the work of Phase A1.)
If not <zap>:
A2. (Do some work.)
If not <zorp>:
A3. (Some more work.)
A4. (Do something.)
If not <condition ZZZ>:
A5. (Something more).
If <foobar> then go to Phase A2
break
==>
again = TRUE
while (again):
A1. (Do the work of Phase A1.)
If not <zap>:
while (True):
A2. (Do some work.)
If not <zorp>:
A3. (Some more work.)
A4. (Do something.)
If not <condition ZZZ>:
A5. (Something more).
If <foobar>:
continue
again = FALSE; break
==>
def f:
while (True):
A1. (Do the work of Phase A1.)
If not <zap>:
while (True):
A2. (Do some work.)
If not <zorp>:
A3. (Some more work.)
A4. (Do something.)
If not <condition ZZZ>:
A5. (Something more).
If <foobar>:
continue
return
==>
def f:
while (True):
A1. (Do the work of Phase A1.)
If <zap>:
continue
while (True):
A2. (Do some work.)
If not <zorp>:
A3. (Some more work.)
A4. (Do something.)
If not <condition ZZZ>:
A5. (Something more).
If <foobar>:
continue
return
==>
def f:
while (True):
A1. (Do the work of Phase A1.)
If <zap>:
continue
while (True):
A2. (Do some work.)
If not <zorp>:
A3. (Some more work.)
A4. (Do something.)
If <condition ZZZ>:
continue
A5. (Something more).
If <foobar>:
continue
return
==>
def f:
while (True):
A1. (Do the work of Phase A1.)
If <zap>:
continue
while (True):
A2. (Do some work.)
If not <zorp>:
A3. (Some more work.)
A4. (Do something.)
If <condition ZZZ>:
continue
A5. (Something more).
If not <foobar>:
return
Etc... until you're satisfied with the result.
If the code is more complex, divide et impera.
Kiuhnm
More information about the Python-list
mailing list