nitlanguage
/
nit.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Merge: No old style accessors
[nit.git]
/
contrib
/
nitcc
/
src
/
autom.nit
diff --git
a/contrib/nitcc/src/autom.nit
b/contrib/nitcc/src/autom.nit
index
feac320
..
c20f3df
100644
(file)
--- a/
contrib/nitcc/src/autom.nit
+++ b/
contrib/nitcc/src/autom.nit
@@
-278,6
+278,35
@@
class Automaton
return res
end
return res
end
+ # Reverse an automaton in place
+ fun reverse
+ do
+ for s in states do
+ var tmp = s.ins
+ s.ins = s.outs
+ s.outs = tmp
+ for t in s.outs do
+ var tmp2 = t.from
+ t.from = t.to
+ t.to = tmp2
+ end
+ end
+ var st = start
+ if accept.length == 1 then
+ start = accept.first
+ else
+ var st2 = new State
+ start = st2
+ states.add(st2)
+
+ for s in accept do
+ st2.add_trans(s, null)
+ end
+ end
+ accept.clear
+ accept.add(st)
+ end
+
# Generate a minimal DFA
# REQUIRE: self is a DFA
fun to_minimal_dfa: Automaton
# Generate a minimal DFA
# REQUIRE: self is a DFA
fun to_minimal_dfa: Automaton
@@
-331,7
+360,6
@@
class Automaton
end
end
end
end
end
end
- print '2'
for s1 in states do for s2 in states do
if distincts[s1].has(s2) then continue
for s1 in states do for s2 in states do
if distincts[s1].has(s2) then continue
@@
-359,6
+387,8
@@
class Automaton
f.write("{token.name.escape_to_c}\\n")
end
f.write("\"")
f.write("{token.name.escape_to_c}\\n")
end
f.write("\"")
+ else
+ f.write(",label=\"\"")
end
f.write("];\n")
var outs = new HashMap[State, Array[nullable TSymbol]]
end
f.write("];\n")
var outs = new HashMap[State, Array[nullable TSymbol]]
@@
-579,7
+609,7
@@
private class DFAGenerator
for s in automaton.states do
var n = names[s]
for s in automaton.states do
var n = names[s]
- add("class DFAState{n}\n")
+ add("private class DFAState{n}\n")
add("\tsuper DFAState\n")
if automaton.accept.has(s) then
var token
add("\tsuper DFAState\n")
if automaton.accept.has(s) then
var token