Add 'dotscape/' from commit 'f306501a68a51b634e895c5fdac70788ae899d75'
git-subtree-dir: dotscape git-subtree-mainline:6b91d64fc3git-subtree-split:f306501a68
This commit is contained in:
29
dotscape/fcore/parser/space-dfa.sml
Normal file
29
dotscape/fcore/parser/space-dfa.sml
Normal file
@@ -0,0 +1,29 @@
|
||||
structure SpaceDfa =
|
||||
struct
|
||||
val dead = 0
|
||||
val start = 1
|
||||
val final = 2
|
||||
|
||||
fun makeDead _ = 0
|
||||
|
||||
fun makeStart i =
|
||||
let val chr = Char.chr i
|
||||
in if Char.isSpace chr then final else dead
|
||||
end
|
||||
|
||||
val deadTable = Vector.tabulate (255, makeDead)
|
||||
val startTable = Vector.tabulate (255, makeStart)
|
||||
val finalTable = startTable
|
||||
|
||||
val tables = #[deadTable, startTable, finalTable]
|
||||
|
||||
fun isFinal state = state = final
|
||||
|
||||
fun next (state, chr) =
|
||||
let
|
||||
val table = Vector.sub (tables, state)
|
||||
val idx = Char.ord chr
|
||||
in
|
||||
Vector.sub (table, idx)
|
||||
end
|
||||
end
|
||||
Reference in New Issue
Block a user