Add 'dotscape/' from commit 'f306501a68a51b634e895c5fdac70788ae899d75'
git-subtree-dir: dotscape git-subtree-mainline:6b91d64fc3git-subtree-split:f306501a68
This commit is contained in:
44
dotscape/fcore/parser/all-dfa.sml
Normal file
44
dotscape/fcore/parser/all-dfa.sml
Normal file
@@ -0,0 +1,44 @@
|
||||
structure AllDfa =
|
||||
struct
|
||||
type t =
|
||||
{ curInt: int
|
||||
, curSpace: int
|
||||
, curBrace: int
|
||||
, lastInt: int
|
||||
, lastSpace: int
|
||||
, lastBrace: int
|
||||
}
|
||||
|
||||
val initial: t =
|
||||
{ curInt = IntDfa.start
|
||||
, curSpace = SpaceDfa.start
|
||||
, curBrace = BraceDfa.start
|
||||
, lastInt = ~1
|
||||
, lastSpace = ~1
|
||||
, lastBrace = ~1
|
||||
}
|
||||
|
||||
fun areAllDead ({curInt, curSpace, curBrace, ...}: t) =
|
||||
curInt = 0 andalso curSpace = 0 andalso curBrace = 0
|
||||
|
||||
fun update (chr, dfa, pos) =
|
||||
let
|
||||
val {curInt, curSpace, curBrace, lastInt, lastBrace, lastSpace} = dfa
|
||||
|
||||
val curInt = IntDfa.next (curInt, chr)
|
||||
val curSpace = SpaceDfa.next (curSpace, chr)
|
||||
val curBrace = BraceDfa.next (curBrace, chr)
|
||||
|
||||
val lastInt = if IntDfa.isFinal curInt then pos else lastInt
|
||||
val lastSpace = if SpaceDfa.isFinal curSpace then pos else lastSpace
|
||||
val lastBrace = if BraceDfa.isFinal curBrace then pos else lastBrace
|
||||
in
|
||||
{ curInt = curInt
|
||||
, curSpace = curSpace
|
||||
, curBrace = curBrace
|
||||
, lastInt = lastInt
|
||||
, lastBrace = lastBrace
|
||||
, lastSpace = lastSpace
|
||||
}
|
||||
end
|
||||
end
|
||||
Reference in New Issue
Block a user