{-# LANGUAGE TypeFamilies #-} {-# LANGUAGE DataKinds #-} module BNFC.Backend.OCaml where import BNFC.CF import BNFC.Prelude import BNFC.Options.GlobalOptions import BNFC.Options.Target import BNFC.Backend.CommonInterface.Backend import Control.Monad.Except import Control.Monad.State import Options.Applicative instance Backend 'TargetOCaml where type BackendOptions 'TargetOCaml = OcamlBackendOptions type BackendState 'TargetOCaml = OcamlBackendState parseOpts :: Parser OcamlBackendOptions parseOpts = undefined initState :: LBNF ->GlobalOptions -> BackendOptions 'TargetOCaml -> Except String (BackendState 'TargetOCaml) initState = undefined abstractSyntax :: LBNF -> State (BackendState 'TargetOCaml) Result abstractSyntax = undefined printer :: LBNF -> State (BackendState 'TargetOCaml) Result printer = undefined lexer :: LBNF -> State (BackendState 'TargetOCaml) Result lexer = undefined parser :: LBNF -> State (BackendState 'TargetOCaml) Result parser = undefined parserTest :: LBNF -> State (BackendState 'TargetOCaml) Result parserTest = undefined makefile :: LBNF -> State (BackendState 'TargetOCaml) Result makefile = undefined newtype OcamlBackendOptions = OcamlOpts Bool ocamlOptionsParser :: Parser OcamlBackendOptions ocamlOptionsParser = OcamlOpts <$> oMenhir where -- menhir option oMenhir = switch ( long "menhir" <> help "Output OCaml code for use with ocamllex and menhir" ) data OcamlBackendState