{-# LANGUAGE CPP #-} {-# LANGUAGE TypeFamilies #-} {-# LANGUAGE DataKinds #-} module BNFC.Backend.Java where import BNFC.Prelude import Control.Monad.Except import Control.Monad.State #if !MIN_VERSION_base(4,13,0) import Control.Applicative ((<*>)) #endif import Options.Applicative import BNFC.CF import BNFC.Options.GlobalOptions import BNFC.Options.Target import BNFC.Backend.CommonInterface.Backend instance Backend 'TargetJava where type BackendOptions 'TargetJava = JavaBackendOptions type BackendState 'TargetJava = JavaBackendState parseOpts :: Parser JavaBackendOptions parseOpts = undefined initState :: LBNF -> GlobalOptions -> BackendOptions 'TargetJava -> Except String (BackendState 'TargetJava) initState = undefined abstractSyntax :: LBNF -> State (BackendState 'TargetJava) Result abstractSyntax = undefined printer :: LBNF -> State (BackendState 'TargetJava) Result printer = undefined lexer :: LBNF -> State (BackendState 'TargetJava) Result lexer = undefined parser :: LBNF -> State (BackendState 'TargetJava) Result parser = undefined parserTest :: LBNF -> State (BackendState 'TargetJava) Result parserTest = undefined makefile :: LBNF -> State (BackendState 'TargetJava) Result makefile = undefined data JavaBackendOptions = JavaOpts { lineNumbers :: Bool , nameSpace :: Maybe String , jlex :: Bool , jflex :: Bool , antlr4 :: Bool } javaOptionsParser :: Parser JavaBackendOptions javaOptionsParser = JavaOpts <$> oLineNumbers <*> oNameSpace <*> oJLex <*> oJFlex <*> oAntlr4 where -- line-numbers option oLineNumbers = switch ( short 'l' <> long "line-numbers" <> help "Add and set line_number field for all syntax classes" ) -- name-space option oNameSpace = optional $ strOption ( short 'p' <> long "name-space" <> help "Prepend NAMESPACE to the package/module name" <> metavar "NAMESPACE") -- jlex option oJLex = switch ( long "jlex" <> help "Lex with JLex, parse with CUP (default)" ) -- jflex option oJFlex = switch ( long "jflex" <> help "Lex with JFlex, parse with CUP" ) -- antlr4 option oAntlr4 = switch ( long "antlr4" <> help "Lex and parse with antlr4" ) data JavaBackendState