mirror of
https://github.com/GrammaticalFramework/gf-core.git
synced 2026-04-10 05:29:30 -06:00
This changes lots of stuff, let me know if it broke anything. Comments: - We use a local hacked version of GetOpt that allows long forms of commands to start with a single dash. This breaks other parts of GetOpt. For example, arguments to short options now require a =, and does not allo pace after the option character. - The new command parsing is currently only used for the program command line, pragmas and the arguments for the 'i' shell command. - I made a quick hack for the options for showTerm, which currently makes it impossible to use the print style flags for cc. This will be replaced by a facility for parsing command-specific options. - The verbosity handling is broken in some places. I will fix that in a later patch.
56 lines
1.5 KiB
Haskell
56 lines
1.5 KiB
Haskell
----------------------------------------------------------------------
|
|
-- |
|
|
-- Module : GetGrammar
|
|
-- Maintainer : AR
|
|
-- Stability : (stable)
|
|
-- Portability : (portable)
|
|
--
|
|
-- > CVS $Date: 2005/11/15 17:56:13 $
|
|
-- > CVS $Author: aarne $
|
|
-- > CVS $Revision: 1.16 $
|
|
--
|
|
-- this module builds the internal GF grammar that is sent to the type checker
|
|
-----------------------------------------------------------------------------
|
|
|
|
module GF.Compile.GetGrammar where
|
|
|
|
import GF.Data.Operations
|
|
import qualified GF.Source.ErrM as E
|
|
|
|
import GF.Infra.UseIO
|
|
import GF.Infra.Modules
|
|
import GF.Grammar.Grammar
|
|
import qualified GF.Source.AbsGF as A
|
|
import GF.Source.SourceToGrammar
|
|
---- import Macros
|
|
---- import Rename
|
|
import GF.Infra.Option
|
|
--- import Custom
|
|
import GF.Source.ParGF
|
|
import qualified GF.Source.LexGF as L
|
|
|
|
import GF.Compile.ReadFiles
|
|
|
|
import Data.Char (toUpper)
|
|
import Data.List (nub)
|
|
import qualified Data.ByteString.Char8 as BS
|
|
import Control.Monad (foldM)
|
|
import System.Cmd (system)
|
|
|
|
getSourceModule :: Options -> FilePath -> IOE SourceModule
|
|
getSourceModule opts file0 = do
|
|
file <- foldM runPreprocessor file0 (moduleFlag optPreprocessors opts)
|
|
string <- readFileIOE file
|
|
let tokens = myLexer string
|
|
mo1 <- ioeErr $ pModDef tokens
|
|
ioeErr $ transModDef mo1
|
|
|
|
-- FIXME: should use System.IO.openTempFile
|
|
runPreprocessor :: FilePath -> String -> IOE FilePath
|
|
runPreprocessor file0 p =
|
|
do let tmp = "_gf_preproc.tmp"
|
|
cmd = p +++ file0 ++ ">" ++ tmp
|
|
ioeIO $ system cmd
|
|
-- ioeIO $ putStrLn $ "preproc" +++ cmd
|
|
return tmp
|