[pypy-svn] r34145 - in pypy/dist/pypy/lang/automata: . test

rxe at codespeak.net rxe at codespeak.net
Fri Nov 3 19:29:31 CET 2006


Author: rxe
Date: Fri Nov  3 19:29:26 2006
New Revision: 34145

Modified:
   pypy/dist/pypy/lang/automata/dfa.py
   pypy/dist/pypy/lang/automata/test/test_dfa.py
Log:
two steps back, one step forward

Modified: pypy/dist/pypy/lang/automata/dfa.py
==============================================================================
--- pypy/dist/pypy/lang/automata/dfa.py	(original)
+++ pypy/dist/pypy/lang/automata/dfa.py	Fri Nov  3 19:29:26 2006
@@ -99,10 +99,17 @@
     res = hint(res, variable=True)
     return res
 
-def recognizeparts(trans, finals, s):
+def convertagain(automaton):
+    alltrans = {}
+    for (s, c), r in automaton.transitions.items():
+        statetrans = alltrans.setdefault(s, {})
+        statetrans[c] = r
+    return alltrans, automaton.final_states
+
+def recognizeparts(alltrans, finals, s):
     " a less simple recognizer "
-    trans = hint(trans, deepfreeze=True)
     finals = hint(finals, deepfreeze=True)
+    alltrans = hint(alltrans, deepfreeze=True)
 
     indx = 0
     state = 0
@@ -114,10 +121,12 @@
         char = s[indx]
         char = hint(char, promote=True)
 
-        state = trans.get((state, char), -1)
+        statetrans = alltrans[state]
+        state = statetrans.get(char, -1)
+        
+        hint(state, concrete=True)
         if state == -1:
             return False
-        hint(state, concrete=True)
         indx += 1
         
     res = state in finals

Modified: pypy/dist/pypy/lang/automata/test/test_dfa.py
==============================================================================
--- pypy/dist/pypy/lang/automata/test/test_dfa.py	(original)
+++ pypy/dist/pypy/lang/automata/test/test_dfa.py	Fri Nov  3 19:29:26 2006
@@ -40,4 +40,13 @@
         return recognizetable(dfatable, s, final_states)
     assert interpret(main, [0])
     assert not interpret(main, [1])
+
+def test_dfa_compiledummy2():
+    def main(gets):
+        a = getautomaton()
+        alltrans, final_states = convertagain(a)
+        s = ["aaaaaaaaaab", "aaaa"][gets]
+        return recognizeparts(alltrans, final_states, s)
+    assert interpret(main, [0])
+    assert not interpret(main, [1])
     



More information about the Pypy-commit mailing list