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

AltStyle によって変換されたページ (->オリジナル) /