| Copyright | (c) João Saraiva 200120022003200420052017 |
|---|---|
| License | LGPL |
| Maintainer | jas@di.uminho.pt |
| Stability | provisional |
| Portability | portable |
| Safe Haskell | Safe-Inferred |
| Language | Haskell2010 |
Language.HaLex.Dfa
Description
Deterministic Finite Automata in Haskell.
Code Included in the Lecture Notes on Language Processing (with a functional flavour).
Synopsis
- data Dfa st sy = Dfa [sy] [st] st [st] (st -> sy -> st)
- dfaaccept :: Eq st => Dfa st sy -> [sy] -> Bool
- dfawalk :: (st -> sy -> st) -> st -> [sy] -> st
- type TableDfa st = [(st, [st])]
- ttAllSts :: TableDfa st -> [st]
- ttAllDestSts :: Eq st => TableDfa st -> [st]
- ttDfa2Dfa :: (Eq st, Eq sy) => ([sy], [st], st, [st], [(st, sy, st)]) -> Dfa st sy
- dfa2tdfa :: (Eq st, Ord sy) => Dfa st sy -> TableDfa st
- complementDfa :: Eq st => Dfa st sy -> Dfa st sy
- transitionsFromTo :: Eq st => (st -> sy -> st) -> [sy] -> st -> st -> [sy]
- destinationsFrom :: (st -> sy -> st) -> [sy] -> st -> [st]
- transitionTableDfa :: (Ord st, Ord sy) => Dfa st sy -> [(st, sy, st)]
- transitionTableDfa' :: (Ord st, Ord sy) => Dfa st sy -> [(st, [st])]
- reachedStatesFrom :: (Eq st, Ord st) => (st -> sy -> st) -> [sy] -> st -> [st]
- beautifyDfa :: (Ord st, Ord sy) => Dfa st sy -> Dfa Int sy
- renameDfa :: (Ord st, Ord sy) => Dfa st sy -> Int -> Dfa Int sy
- showDfaDelta :: (Show st, Show sy) => [st] -> [sy] -> (st -> sy -> st) -> [Char] -> [Char]
- beautifyDfaWithSyncSt :: Eq st => Dfa [st] sy -> Dfa [Int] sy
- dfaIO :: (Show st, Show sy) => Dfa st sy -> String -> IO ()
- sizeDfa :: Dfa st sy -> Int
- nodesAndEdgesDfa :: (Eq st, Ord st, Ord sy) => Dfa st sy -> (Int, Int)
- nodesAndEdgesNoSyncDfa :: (Eq st, Ord st, Ord sy) => Dfa st sy -> (Int, Int)
- dfadeadstates :: Ord st => Dfa st sy -> [st]
- dfasyncstates :: Eq st => Dfa st sy -> [st]
- cyclomaticDfa :: (Ord st, Ord sy) => Dfa st sy -> Int
- isStDead :: Ord st => (st -> sy -> st) -> [sy] -> [st] -> st -> Bool
- isStSync :: Eq st => (st -> sy -> st) -> [sy] -> [st] -> st -> Bool
- numberOutgoingArrows :: (st -> sy -> st) -> [sy] -> st -> Int
- numberIncomingArrows :: Eq st => (st -> sy -> st) -> [sy] -> [st] -> st -> Int
Data type
The type of Deterministic Finite Automata parameterized with
the type st of states and sy of symbols.
Constructors
| Dfa [sy] [st] st [st] (st -> sy -> st) |
Instances
| (Show st, Show sy, Ord st, Ord sy) => Fa Dfa st sy Source # | |
Defined in Language.HaLex.FaClasses Methods accept :: Dfa st sy -> [sy] -> Bool Source # sizeFa :: Dfa st sy -> Int Source # equiv :: Dfa st sy -> Dfa st sy -> Bool Source # minimize :: Dfa st sy -> Dfa [[st]] sy Source # reverseFa :: Dfa st sy -> Ndfa st sy Source # deadstates :: Dfa st sy -> [st] Source # syncstates :: Dfa st sy -> [st] Source # cyclomatic :: Dfa st sy -> Int Source # sentences :: Dfa st sy -> [[sy]] Source # toHaskell' :: Dfa st sy -> String -> IO () Source # toGraph :: Dfa st sy -> String -> String Source # toGraphIO :: Dfa st sy -> String -> IO () Source # unionFa :: Dfa st sy -> Dfa st sy -> Ndfa st sy Source # concatFa :: Dfa st sy -> Dfa st sy -> Ndfa st sy Source # | |
| (Show st, Show sy) => Show (Dfa st sy) Source # | Print a |
Acceptance
Test whether the given automaton accepts the given list of input symbols (expressed as a fold).
Arguments
| :: (st -> sy -> st) | Transition function |
| -> st | Initial state |
| -> [sy] | Input symbols |
| -> st | Final state |
Execute the transition function of a Dfa on an initial state
and list of input symbol. Return the final state when all input
symbols have been consumed.
Transformation
type TableDfa st = [(st, [st])] Source #
Type of Table-based Deterministic Finite Automata. v1 , v2 , ... , vn vocabulary [ ( o1 , [ d , d , ... , d ]) , ( o2 , [ d , d , ... , d ]) ... ]
Arguments
| :: Eq st | |
| => TableDfa st | Transition Table (maybe not totally defined) |
| -> [st] | set of states in the table |
Compute all destinations states in a (transition) table It considers all states in the second element of the pair: the destion states. Usefull when the transition table is being constructed.
Complement of a Dfa
Transitions
Arguments
| :: Eq st | |
| => (st -> sy -> st) | Transition function |
| -> [sy] | Vocabulary |
| -> st | Origin |
| -> st | Destination |
| -> [sy] | Labels |
Compute the labels with the same (giving) origin and destination states
Arguments
| :: (st -> sy -> st) | Tansition Function |
| -> [sy] | Vocabulary |
| -> st | Origin |
| -> [st] | Destination States |
Compute the destination states giving the origin state
Arguments
| :: (Eq st, Ord st) | |
| => (st -> sy -> st) | Transition function |
| -> [sy] | Vocabulary |
| -> st | Origin |
| -> [st] | Reached states |
Compute the states that can be reached from a state according to a given transition function and vocabulary
Printing
beautifyDfa :: (Ord st, Ord sy) => Dfa st sy -> Dfa Int sy Source #
Beautify a Dfa by assigning (natural) numbers to states.
Arguments
| :: (Ord st, Ord sy) | |
| => Dfa st sy | Automaton |
| -> Int | Initial state ID |
| -> Dfa Int sy | Renamed automaton |
Renames a Dfa.
It renames a DFA in such a way that the renaming of two isomorphic DFA
returns the same DFA.
It is the basis for the equivalence test for minimized DFA.
showDfaDelta :: (Show st, Show sy) => [st] -> [sy] -> (st -> sy -> st) -> [Char] -> [Char] Source #
Helper function to show the transition function of a Dfa.
Write a Dfa to a Haskell module in a file.
Properties of Dfa
sizeDfa :: Dfa st sy -> Int Source #
Compute the size of a deterministic finite automaton. The size of an automaton is the number of its states.
Compute the number of states and transtions of a Dfa
nodesAndEdgesNoSyncDfa Source #
Compute the number of states and transtions of a Dfa
It does not consider nodes (nor transitions to) dead states nor
sync states.
Compute the dead states of a Dfa
Compute the sync states of a Dfa
cyclomaticDfa :: (Ord st, Ord sy) => Dfa st sy -> Int Source #
Compute the cyclomatic complexity of a Dfa
The Cyclomatic Complexity (CC) is given by
cc = N - E + 2 * P
where N is the number of nodes
E is the number of edges
P is tne number of connected components
Properties of States
Arguments
| :: Ord st | |
| => (st -> sy -> st) | Transition Function |
| -> [sy] | Vocabulary |
| -> [st] | Set of Final States |
| -> st | State |
| -> Bool |
Checks whether a state is dead or not.
One state is dead when it is not possible to reach a final state from it. (probably we should consider that it has to be reachable from the initial state, as well)
Arguments
| :: Eq st | |
| => (st -> sy -> st) | Transition Function |
| -> [sy] | Vocabulary |
| -> [st] | Set of Final States |
| -> st | State |
| -> Bool |
Checks whether a state is a sync state or not
A sync state is a state that has transitions to itself for all symbols of the vocabulary ans it is not final/accepting state.
Arguments
| :: (st -> sy -> st) | Transition Function |
| -> [sy] | Vocabulary |
| -> st | Origin |
| -> Int | Number of Arrows |
Compute the number of outgoing arrows for a given state