summaryrefslogtreecommitdiff
path: root/src/GF/Compile/API.hs
blob: 242a9e87a97ee7ed6375580118dcd9d615cf06d9 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
module GF.Compile.API (batchCompile, compileToGFCC) where

import GF.Devel.Compile
import GF.Devel.GrammarToGFCC
import GF.GFCC.OptimizeGFCC
import GF.GFCC.CheckGFCC
import GF.GFCC.DataGFCC
import GF.Infra.Option
import GF.Devel.UseIO

-- | Compiles a number of source files and builds a 'GFCC' structure for them.
compileToGFCC :: Options -> [FilePath] -> IOE GFCC
compileToGFCC opts fs = 
    do gr <- batchCompile opts fs
       let name = justModuleName (last fs)
       gc1 <- putPointE opts "linking ... " $
                let (abs,gc0) = mkCanon2gfcc opts name gr
                in ioeIO $ checkGFCCio gc0
       let opt = if oElem (iOpt "noopt") opts then id else optGFCC
           par = if oElem (iOpt "noparse") opts then id else addParsers
       return (par (opt gc1))