1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83
|
{-
BNF Converter: Main file
Copyright (C) 2002-2013 Authors:
Jonas Almström Duregård, Krasimir Angelov, Björn Bringert, Johan Broberg, Paul Callaghan,
Grégoire Détrez, Markus Forsberg, Ola Frid, Peter Gammie, Thomas Hallgren, Patrik Jansson,
Kristofer Johannisson, Antti-Juhani Kaijanaho, Ulf Norell,
Michael Pellauer and Aarne Ranta 2002 - 2013.
Björn Bringert, Johan Broberg, Markus Forsberg, Peter Gammie,
Patrik Jansson, Antti-Juhani Kaijanaho, Ulf Norell,
Michael Pellauer, Aarne Ranta
-}
module Main where
import BNFC.Backend.Base
import BNFC.Backend.C
import BNFC.Backend.CPP.NoSTL
import BNFC.Backend.CPP.STL
import BNFC.Backend.Haskell
import BNFC.Backend.HaskellGADT
import BNFC.Backend.Java
import BNFC.Backend.Latex
import BNFC.Backend.OCaml
import BNFC.Backend.Pygments
import BNFC.CF (CF)
import BNFC.GetCF
import BNFC.Options hiding (make, Backend)
import BNFC.License ( license )
import Paths_BNFC ( version )
import Data.Version ( showVersion )
import System.Environment (getArgs)
import System.Exit (exitFailure, exitSuccess)
import System.IO (stderr, hPutStrLn)
-- Print an error message and a (short) usage help and exit
printUsageErrors :: [String] -> IO ()
printUsageErrors msg = do
mapM_ (hPutStrLn stderr) msg
hPutStrLn stderr usage
exitFailure
main :: IO ()
main = do
args <- getArgs
let (mode, warnings) = parseMode args
-- Print command-line argument warnings (if any).
mapM_ (hPutStrLn stderr) warnings
case mode of
UsageError e -> printUsageErrors [e]
Help -> putStrLn help >> exitSuccess
Version -> putStrLn (showVersion version) >> exitSuccess
License -> putStr license >> exitSuccess
Target options file
| target options == TargetCheck ->
readFile file
>>= parseCF options TargetCheck
>> return ()
| otherwise ->
readFile file
>>= parseCF options (target options)
>>= writeFiles (outDir options) . maketarget (target options) options
maketarget :: Target -> SharedOptions -> CF -> Backend
maketarget = \case
TargetC -> makeC
TargetCpp -> makeCppStl
TargetCppNoStl -> makeCppNoStl
TargetHaskell -> makeHaskell
TargetHaskellGadt -> makeHaskellGadt
TargetLatex -> makeLatex
TargetJava -> makeJava
TargetOCaml -> makeOCaml
TargetPygments -> makePygments
TargetCheck -> error "impossible"
|