[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