gf-3.11:语法框架
安全哈斯克尔
语言哈斯克尔2010

GF公司

描述

GF,语法框架,作为一个图书馆

简介

命令行界面

主要的::IO(输入输出)()来源 #

运行GF主程序,从命令行获取参数。(它叫setConsoleEncoding(设置控制台编码)获取选项,然后main选项.)运行gf—帮助了解用法信息。

获取选项::IO(输入输出)(选项, [文件路径])来源 #

获取并解析GF命令行参数。固定相对路径。电话获取参数parseOptions(解析选项).

main选项::选项-> [文件路径] ->IO(输入输出)()来源 #

使用给定的选项和文件运行GF主程序。取决于它调用的选项主GFC,主GFI,主运行GFI,主服务器GFI,或者它只打印版本/使用信息。

主GFI::选项-> [文件路径] ->IO(输入输出)()来源 #

运行交互式GF Shell

主运行GFI::选项-> [文件路径] ->IO(输入输出)()来源 #

在安静模式下运行GF Shell(gf-运行).

主服务器GFI::选项->国际-> [文件路径] ->IO(输入输出) 服务器 来源 #

运行GF服务器(gf-服务器).这个国际参数是HTTP服务的端口号。

主GFC::选项-> [文件路径] ->IO(输入输出)()来源 #

编译给定的GF语法文件。结果是.gfo型文件夹并且,根据选项.pgf(磅/平方英尺)文件。 (gf-批次,gf-品牌)

链接语法::选项-> (UTC时间, [(模块名称,语法)]) ->IO(输入输出)()来源 #

创建一个.pgf(磅/平方英尺)文件(如果指定,可能还有其他格式的文件在中选项)从的输出并行批处理编译.如果.pgf(磅/平方英尺)同名文件已存在,并且比源语法文件(如UTC时间参数),它不是重新创建。电话写入PGF写入输出.

写入PGF::选项->前列腺素F->IOE公司()来源 #

写下编译语法的结果(例如编译到PGF链接)到.pgf(磅/平方英尺)文件。如果-拆分pgf选项。

编译GF语法

编译到PGF::选项-> [文件路径] ->IOE公司 前列腺素F 来源 #

编译许多源文件并生成前列腺素F结构。这是由链接批处理编译.

链接::选项-> (模块名称,语法) ->IOE公司 PGF公司 来源 #

将语法链接到前列腺素F可以用来使线性化解析使用前列腺素F运行时系统。

批处理编译::选项-> [文件路径] ->IOE公司(UTC时间, (模块名称,语法))来源 #

编译给定的语法文件及其依赖的所有内容。编译的模块存储在.gfo型文件(除非-标签选项是使用,在这种情况下,将生成标记文件)。现有的.gfo型如果文件是最新的,则会重用这些文件(除非选择-型钢混凝土阿卡-力重组使用)。

srcAbs名称::语法->模块名称->模块名称 来源 #

返回与命名的具体语法相对应的抽象语法的名称

并行批处理编译::也许 吧 国际->选项-> [文件路径] ->IO(输入输出)(UTC时间, [(模块名称,语法)])来源 #

编译给定的语法文件及其依赖的所有内容,喜欢批处理编译。此函数并行编译模块。它保存编译的模块目前所有时态模式分离,存储.gfo型文件位于单独的子目录中,以避免创建相同的具体语法。

第一个参数控制要运行的作业数平行。如果GF是用GHC>=7.6编译的,那么这是有效的,否则你必须使用GHC运行时标志+RTS-N-RTS以实现并行性。

导出PGF 来源 #

论据

::选项 
->输出格式 
->前列腺素F 
-> [(文件路径,字符串)]

推荐文件名和内容的列表。

将PGF导出到给定输出格式。对于许多输出格式,额外的选项可用于控制输出。

编译单个模块

compileOne(编译一):: (输出米,错误消息m之间,莫纳迪奥m之间,单数失败m) =>选项->语法->完整路径->米一个输出 来源 #

编译给定的源文件(或只加载.gfo文件),给定一个语法包含它所依赖的一切。电话重复使用GFO使用TheSource.

重复使用GFO:: (输出米,错误消息米,莫纳迪奥米,单数失败m) =>选项->语法->完整路径->米一个输出 来源 #

阅读已编译的GF模块。还要撤消公共subexp优化,以启用正常计算。

使用来源:: (输出米,错误消息米,莫纳迪奥米,单数失败m) =>选项->语法->完整路径->米一个输出 来源 #

从源代码编译GF模块。它既返回结果,又将其存储在.gfo型文件(或标记文件,如果使用-标签选项)

抽象语法、解析、漂亮打印和序列化

获取源模块:: (莫纳迪奥米,错误消息m) =>选项->文件路径->米(模块名称,模块信息)来源 #

读取源文件并对其进行解析(应用选项中指定的预处理器后)

语法模块

数据 语法 来源 #

语法是语法模块的自包含集合

实例

实例详细信息
二元的 语法 来源 # 
实例详细信息

定义于GF.语法。二元的

方法

::语法->放置

得到::获取语法

很漂亮 语法 来源 # 
实例详细信息

定义于GF.语法。打印机

语法部分::语法->模块->语法 来源 #

只选择给定模块所依赖的模块,包括其自身

所有延伸::语法->模块名称-> [模块]来源 #

模块通过限制直接或间接扩展的所有模块

所有ExtendsPlus::语法->模块名称-> [模块名称]来源 #

一样所有延伸另外,实例扩展了其接口

isCompileable模块::模块信息->布尔 来源 #

不要为接口和不完整的模块生成代码

isComplete模块::模块信息->布尔 来源 #

接口和“不完整M”不完整

所有摘要::语法-> [模块名称]来源 #

所有抽象模块按从最小到最大的顺序排序

最伟大的摘要::语法->也许 吧 模块名称 来源 #

按依赖顺序排列的最后一个摘要(列表头)

所有资源::语法-> [模块名称]来源 #

所有资源模块

最大的资源::语法->也许 吧 模块名称 来源 #

按依赖顺序排列的最大资源

所有混凝土::语法->模块名称-> [模块名称]来源 #

给定抽象的所有具体内容

所有混凝土模块::语法-> [模块名称]来源 #

任何抽象的所有具体模块

混凝土文摘::错误消息m=>语法->模块名称->米模块名称 来源 #

我们用标识符存储模块类型

判决

数据 信息 来源 #

建设者在

  • 抽象语法(防抱死制动系统)
  • 资源(皇家经济学会)
  • 具体语法(数控)

和间接到模块(印度卢比)

建造师

AbsCat公司(也许 吧(L(左) 上下文))

(防抱死制动系统)类别的上下文

AbsFun公司(也许 吧(L(左) 类型)) (也许 吧 国际) (也许 吧[L(左) 方程式]) (也许 吧 布尔)

(防抱死制动系统)函数的类型、数组和定义

重新参数(也许 吧(L(左)[参数])) (也许 吧[期限])

(皇家经济学会)第二个参数是所有可能值的列表

ResValue(ResValue)(L(左) 类型)

(皇家经济学会)标记参数构造函数以进行查找

ResOper(恢复操作)(也许 吧(L(左) 类型)) (也许 吧(L(左) 期限))

(皇家经济学会)

重新过载[模块名称] [(L(左) 类型,L(左) 期限)]

(皇家经济学会)标识:继承的模块

CncCat公司(也许 吧(L(左) 类型)) (也许 吧(L(左) 期限)) (也许 吧(L(左) 期限)) (也许 吧(L(左) 期限)) (也许 吧 PMCFG公司)

(数控)林德夫,

CncFun公司(也许 吧(标识,上下文,类型)) (也许 吧(L(左) 期限)) (也许 吧(L(左) 期限)) (也许 吧 PMCFG公司)

(数控)类型信息添加于总费用

任何Ind 布尔 模块名称

(印度卢比)的布尔说如果规范

实例

实例详细信息
显示 信息 来源 # 
实例详细信息

定义于GF.语法。语法

二元的 信息 来源 # 
实例详细信息

定义于GF.语法。二元的

方法

::信息->放置

得到::获取信息

条款

数据 期限 来源 #

建造师

Vr(沃尔沃) 标识

变量

抄送 标识

常数

反对的论点 标识

建造师

排序 标识

基本类型

EInt公司 国际

整数型

E漂浮 双精度

浮点文字

K(K) 字符串

字符串文字或标记:“foo”

清空

空字符串[]

应用程序 期限 期限

应用程序:财务报表

防抱死制动系统 绑定类型 标识 期限

抽象:x->b

!元ID

元变量:?我(仅可解析:?=?0)

ImplArg公司 期限

隐式参数的占位符{t}(t)

生产 绑定类型 标识 期限 期限

函数类型:(x:A)->B,A->B,({x}:A)->B

键入 期限 期限

类型注释项

在下面,构造函数只用于具体语法

例子 期限 字符串

基于示例的术语:@在M.C“foo”中

记录类型[标签]

记录类型:{p:A;…}

R(右)[分配]

记录:{p=a;…}

P(P) 期限 标签

投影:相对压力

外部R 期限 期限

扩展名:R**{x:A}(类型和术语)

期限 期限

表格类型:P=>A

T型 TInfo信息[案例]

表:表{p=>c;…}

V(V) 类型[期限]

作为数值过程给出的表:表T[c1;…;cn]

S公司 期限 期限

选择:t!p(t!p)

本地定义 期限

本地定义:设{t:t=a}在b中

Q齿

包中的限定常数

质量控制 Q齿

包中的合格构造函数

C 期限 期限

串联:s++t(秒++t)

胶水 期限 期限

凝集作用:秒+吨

EPatt公司 帕特

模式(在宏定义中):#p

EPatt类型 期限

图案类型:图案T

ELincat公司 识别 期限

装箱线性化类型的Ident

ELin公司 标识 期限

类型Ident的装箱线性化

AdHoc过载[期限]

重命名中生成的临时重载

FV公司[期限]

自由变化的备选方案:变体{s;…}

Alts(备选方案) 期限[(期限,期限)]

按前缀列出的备选方案:前置{t;s/c;…}

Strs公司[期限]

条件前缀字符串:字符串{s;…}

错误 字符串

Predef.error返回的错误值

类型 =Q齿 来源 #

数据 帕特 来源 #

模式

建造师

个人计算机 标识[帕特]

构造函数模式:C第1页。..密码 C

聚丙烯 Q齿[帕特]

包构造函数模式:P.C第1页。..密码 邮政编码:

光伏 标识

可变图案:x

PW公司

通配符模式:_

公共关系[(标签,Patt公司)]

记录模式:{r=p;…}--仅混凝土

P字符串 字符串

字符串文字模式:“foo”--只是抽象的

PInt公司 国际

整数文字模式:12--只是抽象的

PFloat浮体 双精度

浮点文字模式:1.2--只是抽象的

PT公司 类型 帕特

类型标注图案

PA 标识 帕特

as-pattern:x@p

PImplArg公司 帕特

隐式参数模式的占位符{p}

PTilde公司 期限

无法访问的模式

PNeg(PNeg) 帕特

否定模式:-p

PAlt公司 帕特 Patt公司

析取模式:p1|p2

PSeq公司 Patt公司 帕特

标记部分的序列:p+q

PMSeq公司兆瓦兆瓦

标记部分的序列:p+q

准备 帕特

标记部分的重复:p*

字符数组

长度为1的字符串:?

PChars公司[烧焦]

字符列表:[“aeiou”]

PMacro公司 标识 
颗粒物 Q齿 

数据 TInfo信息 来源 #

指导表的计算和类型检查

建造师

TRaw公司

从解析器接收;可以是任何东西

T键入 类型

类型已注释,但可以是任何类型

TComp公司 类型

扩大

TWild公司 类型

只有一个通配符模式,无需扩展

源位置

数据 L(左)来源 #

附加位置信息

建造师

L(左) 位置 

PMCFG公司

类型 顺序=阵列DotPos符号来源 #

用于构造和分析源代码项的函数。

分配

地图分配::莫纳德m=>(期限->m c)->[分配]->米[(标签, (也许 吧c、 c))]来源 #

记录

类型

条款

mk刷新变量:: [标识] ->标识 来源 #

刷新变量

mk刷新变量X:: [标识] ->标识->标识 来源 #

试图保留给定的符号

刷新AsTerm::字符串->期限 来源 #

在编辑器中使用var进行精化的快速方法

字符串2项::字符串->期限 来源 #

为具体语法创建终端

标识2端子::标识->期限 来源 #

根据标识符创建端子

术语和模式转换

几乎是成分

合成安全操作:: (期限->期限) ->期限->期限 来源 #

定义组合项函数

合成Op::莫纳德m=>(期限->米期限) ->期限->米期限 来源 #

定义组合项函数

mconcat地图::单体c=>(a->c)->[a]->c来源 #

收集器PattOp:: (帕特->[a])->帕特->【a】来源 #

其他

所有案例值::期限-> [([帕特],期限)]来源 #

在表格中收集最终案例;保留图案列表

strsFromTerm字符串::期限->错误[结构]来源 #

从表示端子序列的术语中获取字符串

单词InTerm::期限-> [字符串]来源 #

查找术语中的单词项

分拣接收:: [(标签,a)]->[(标签,a)]来源 #

规范记录和记录类型;把s放在第一位

依赖关系

所有依赖项:: (模块名称->布尔) ->地图 标识 信息-> [(标识, [标识])]来源 #

依赖性检查、检测循环和返回拓扑排序列表

印刷精美

标识符

标识2utf8::标识->字节字符串 来源 #

由于返回的ByteString是UTF-8编码。

普通标识符(由解析器返回)

内部使用的特殊标识符

变量Str::标识 来源 #

在lin默认值中使用

原始标识符

数据 RawIdent公司 来源 #

标识符存储为UTF-8编码的字节串。(也可以使用常规Haskell字符串s、 有点性能降低,内存使用增加。)

实例

实例详细信息
等式 RawIdent公司 来源 # 
实例详细信息

定义于GF.参考。标识

订单 RawIdent公司 来源 # 
实例详细信息

定义于GF.参考。标识

阅读 RawIdent公司 来源 # 
实例详细信息

定义于GF.参考。标识

显示 RawIdent公司 来源 # 
实例详细信息

定义于GF.参考。标识

JSON格式 RawIdent公司 来源 # 
实例详细信息

定义于GF.语法。规范JSON

二元的 RawIdent公司 来源 # 
实例详细信息

定义于GF.参考。标识

方法

::RawIdent公司->放置

得到::获取RawIdent公司

很漂亮 RawIdent公司 来源 # 
实例详细信息

定义于GF.参考。标识

二进制序列化

数据 版本标记来源 #

实例

实例详细信息
Functor(仿真器) 已标记版本 来源 # 
实例详细信息

定义于GF.语法。二元的

二元的a=>二元的(已标记版本a) 来源 # 
实例详细信息

定义于GF.语法。二元的

方法

::版本标记a->出售

得到::获取(版本标记a)

解码模块标题::莫纳迪奥io=>文件路径->国际奥委会(已标记版本 模块)来源 #

只读取模块头,返回模块会有一个空的身体

标准GF

语法的::选项->模块名称->语法->语法 来源 #

为命名的抽象语法和所有关联的语法生成规范代码混凝土合成物

摘要2经典::模块名称->语法->摘要 来源 #

为命名的抽象语法生成规范代码

混凝土2标准::选项->模块名称->语法-> [(文件路径,混凝土)]来源 #

为与关联的所有具体语法生成规范代码给定语法中的命名抽象语法。

投影::LinValue公司->标签Id->LinValue公司 来源 #

用于投影的智能构造函数

选择::LinValue公司->LinValue公司->LinValue公司 来源 #

用于选择的智能构造函数