--|GF主程序(语法编译器、交互式shell、http服务器)
{-#语言CPP#-}
模块 GF.主要 哪里
进口 GF编译器
进口 有资格的 GF.互动 作为 GFI1型#如果定义C_RUNTIME进口 有资格的 GF.交互2 作为 GFI2型#结尾进口 GF.数据。错误消息
进口 GF.参考。选项
进口 GF.参考。UseIO(使用IO)
进口 GF.参考。BuildInfo(构建信息) (构建信息)
进口 路径_gf

进口 数据。版本
进口 系统。号码簿
进口 系统。环境 (获取参数)
进口 系统。出口
--导入GF.System。控制台(setConsoleEncoding)

--|运行GF主程序,从命令行获取参数。
--(它调用“setConsoleEncoding”和“getOptions”,然后调用“mainOpts”。)
--运行@gf--help@获取用法信息。
主要的 :: IO(输入输出) ()
主::IO()主要的 = 
  --setConsoleEncoding(设置控制台编码)
  (选项->[文件路径]->IO())->(选项,[文件路径])->IO(对于所有a到b到c(a到>b到>c)->(a,b)->c未修剪的 选项->[文件路径]->IO()main选项 ((选项,[文件路径])->IO())->IO(选项,[FilePath])->IO()对于所有(m::*->*)a b.Monad m=>(a->mb)->ma->mb=<< IO(选项,[FilePath])获取选项

--|获取并解析GF命令行参数。固定相对路径。
--调用“getArgs”和“parseOptions”。
获取选项 时间: IO(输入输出) (选项, [文件路径])
getOptions::IO(选项,[FilePath])获取选项 = 
  [文件路径]参数 <- IO[文件路径]获取参数
  案例 [FilePath]->错误(选项,[FilePath])(错误::*->*)。错误Monad err=>[FilePath]->错误(选项,[FilePath])parseOptions(解析选项) [文件路径]参数 属于
    好 啊 (选项opts选项,[文件路径]文件夹) ->  文件路径当前目录(_D) <- IO文件路径获取当前目录
                          [文件路径]库目录(_D)  <- 选项->IO[FilePath]所有(io::*->*)。MonadIO io=>选项->io[FilePath]获取库目录 选项opts选项
                          (选项,[FilePath])->IO(选项,[文件路径])对于所有(m::*->*)a.Monad m=>a->ma返回 (文件路径->[文件路径]->选项->选项修复相对库路径 文件路径当前目录(_D) [文件路径]库目录(_D) 选项opts选项, [文件路径]文件夹)
     文件路径错误         ->  文件路径->IO()所有(m::*->*)。输出m=>文件路径->m()电子输出导线 文件路径错误
                          文件路径->IO()所有(m::*->*)。输出m=>文件路径->m()电子输出StrLn 文件路径“你可能想试试——帮忙。”
                          IO(选项,[FilePath])对于所有a.IO a退出失败


--|使用给定的选项和文件运行GF主程序。取决于
--它调用的选项有“mainGFC”、“mainGFI”、“mainRunGFI”和“mainServerGFI”,
--或者它只打印版本/使用信息。
主要选项 :: 选项 -> [文件路径] -> IO(输入输出) ()
mainOpts::选项->[文件路径]->IO()main选项 选项opts选项 [文件路径]文件夹 =
    案例 (标志->模式)->选项->模式对于所有a.(标志->a)->选项->a旗帜 标志->模式optMode(操作模式) 选项opts选项 属于
      模式模式版本     -> 文件路径->IO()输入StrLn (文件路径->IO())->文件路径->I/O()对于所有a b(a->b)->a->b$ 文件路径“语法框架(GF)版本” FilePath->FilePath->文件路径对于所有a.[a]->[a]->[a]++ 版本->文件路径showVersion(显示版本) 版本版本 FilePath->FilePath->文件路径对于所有a.[a]->[a]->[a]++ 文件路径“\n” FilePath->FilePath->文件路径对于所有a.[a]->[a]->[a]++ 文件路径构建信息
      模式模式帮助        -> 文件路径->IO()输入StrLn 文件路径帮助消息
      模式服务器 国际港口 -> 选项->Int->[FilePath]->IO()GFI1.main服务器 选项opts选项 国际港口 [文件路径]文件夹
      模式模式编译器    -> 选项->[FilePath]->IO()主GFC 选项opts选项 [文件路径]文件夹
      模式模式交互 -> 选项->[文件路径]->IO()GFI1.mainGFI 选项opts选项 [文件路径]文件夹
      模式模式运行         -> 选项->[文件路径]->IO()GFI1.main运行GFI 选项opts选项 [文件路径]文件夹#如果定义C_RUNTIME      模式交互2 -> GFI2.mainGFI opts选项 文件夹
      模式运行2         -> GFI2.main运行GFI opts选项 文件夹#其他      模式模式交互2 -> IO()对于所有a.IO a无Cruntime
      模式模式运行2         -> IO()对于所有a.IO a无Cruntime
  哪里
    noCruntime::IO b无Cruntime =  文件路径->IO()所有(m::*->*)。输出m=>文件路径->m()电子输出导线 文件路径“GF配置没有C运行时支持”
                    IO b接口对于所有a.IO a退出失败#结尾