-- | Commands Subparsers. module BNFC.Options.Commands where import BNFC.Prelude import BNFC.Backend.Agda.Options ( AgdaBackendOptions, agdaOptionsParser ) import BNFC.Backend.C ( CBackendOptions, cOptionsParser ) import BNFC.Backend.CPP ( CppBackendOptions, cppOptionsParser ) import BNFC.Backend.Haskell.Options ( HaskellBackendOptions, haskellOptionsParser ) import BNFC.Backend.Txt2Tags.Options ( Txt2TagsBackendOptions, txt2tagsOptionsParser ) import BNFC.Backend.Java ( JavaBackendOptions, javaOptionsParser ) import BNFC.Backend.Latex ( LatexBackendOptions, latexOptionsParser ) import BNFC.Backend.OCaml ( OcamlBackendOptions, ocamlOptionsParser ) import Options.Applicative -- | subcommands parser. commandsParser :: Parser Command commandsParser = hsubparser ( command "c" (info (C <$> cOptionsParser) (progDesc "Output C code")) <> command "cpp" (info (Cpp <$> cppOptionsParser) (progDesc "Output C++ code")) <> command "haskell" (info (Haskell <$> haskellOptionsParser) (progDesc "Output Haskell code for use with Alex and Happy")) <> command "agda" (info (Agda <$> agdaOptionsParser) (progDesc "Output Haskell code for use with Alex and Happy together with Agda bindings for AST, parser and printer")) <> command "java" (info (Java <$> javaOptionsParser) (progDesc "Output Java code")) <> command "latex" (info (Latex <$> latexOptionsParser) (progDesc "Output LaTeX code to generate a PDF description of the language")) <> command "ocaml" (info (OCaml <$> ocamlOptionsParser) (progDesc "Output Ocaml code")) <> command "txt2tags" (info (Txt2Tags <$> txt2tagsOptionsParser) (progDesc "Output a text file to feed to txt2tags")) <> command "check" (info (pure Check) (progDesc "Just check the input LBNF file. No output.")) ) data Command = Agda AgdaBackendOptions | C CBackendOptions | Cpp CppBackendOptions | Haskell HaskellBackendOptions | Java JavaBackendOptions | Latex LatexBackendOptions | OCaml OcamlBackendOptions | Txt2Tags Txt2TagsBackendOptions | Check