1
Fork 0
mirror of https://git.cs.ou.nl/joshua.moerman/mealy-decompose.git synced 2025-04-29 17:57:44 +02:00
mealy-decompose/hs/app/Main.hs
2025-04-29 09:57:09 +02:00

66 lines
2.4 KiB
Haskell

{-# OPTIONS_GHC -Wno-missing-signatures #-}
-- | Copyright: (c) 2025 Joshua Moerman, Open Universiteit
-- SPDX-License-Identifier: EUPL-1.2
module Main where
import CommonOptions
import DecomposeInput
import DecomposeOutput
import DecomposeTemp
import HsiMethod
import LStarMain
import RandomGen
import Options.Applicative
import System.Directory
main = do
-- parse command and options
let opts = info optionsParser (fullDesc <> header "Tool(s) to decompose a finite state machine into separate components.")
Options{..} <- execParser opts
-- setup some logging facilities
createDirectoryIfMissing True (logDirectory commonOptions)
createDirectoryIfMissing True (resultsDirectory commonOptions)
-- dispatch to actual functionality, based on the command provided
case optCommand of
DecomposeOutput options -> mainDecomposeOutput options commonOptions
DecomposeInput options -> mainDecomposeInput options commonOptions
DecomposeTemp options -> mainDecomposeTemp options
HsiMethod options -> mainHsiMethod options
LStar options -> mainLStar options
RandomGen options -> mainRandomGen options
data Options = Options
{ optCommand :: Command
, commonOptions :: CommonOptions
}
deriving Show
optionsParser =
Options
<$> commandParser
<*> commonOptionsParser
<**> helper
<**> simpleVersioner "0.4.0.0"
data Command
= DecomposeOutput DecomposeOutputOptions
| DecomposeInput DecomposeInputOptions
| DecomposeTemp DecomposeTempOptions
| HsiMethod HsiMethodOptions
| LStar LStarOptions
| RandomGen RandomGenOptions
deriving Show
commandParser =
hsubparser
( command "decompose-output" (info (DecomposeOutput <$> decomposeOutputOptionsParser) (progDesc "decompose based on output"))
<> command "decompose-input" (info (DecomposeInput <$> decomposeInputOptionsParser) (progDesc "decompose based on independent inputs"))
<> command "decompose-temp" (info (DecomposeTemp <$> decomposeTempOptionsParser) (progDesc "temporary experiment"))
<> command "hsi-method" (info (HsiMethod <$> hsiMethodOptionsParser) (progDesc "construct HSI test suite from specification dot file"))
<> command "lstar" (info (LStar <$> lStarOptionsParser) (progDesc "little l* playground"))
<> command "random-gen" (info (RandomGen <$> randomGenOptionsParser) (progDesc "generate random parallel compositions"))
)