git-subtree-dir: dotscape git-subtree-mainline:6b91d64fc3git-subtree-split:f306501a68
33 lines
630 B
Standard ML
33 lines
630 B
Standard ML
structure BraceDfa =
|
|
struct
|
|
val dead = 0
|
|
val start = 1
|
|
val final = 2
|
|
|
|
fun makeStart i =
|
|
let
|
|
val chr = Char.chr i
|
|
in
|
|
if chr = #"{" orelse chr = #"}" orelse chr = #"[" orelse chr = #"]" then
|
|
final
|
|
else
|
|
dead
|
|
end
|
|
|
|
val deadTable = SpaceDfa.deadTable
|
|
val startTable = Vector.tabulate (255, makeStart)
|
|
val finalTable = deadTable
|
|
|
|
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
|