gf-3.11:语法框架
维护人员克拉西米尔·安吉洛夫
稳定性稳定的
便携性便携式的
安全哈斯克尔
语言哈斯克尔2010

前列腺素F

描述

本模块是一个应用程序编程接口,用于加载并解释以可移植语法格式(PGF)编译的语法。PGF格式作为GF编译器的最终输出生成。API旨在用于在Haskell中嵌入GF语法程序

简介

前列腺素F

数据 前列腺素F 来源 #

表示多语言语法的抽象数据类型可移植语法格式。

实例

实例详细信息
二元的 前列腺素F 来源 # 
实例详细信息

定义于PGF公司。二元的

方法

::前列腺素F->放置

得到::获取前列腺素F

读取PGF::文件路径->IO(输入输出) 前列腺素F 来源 #

以可移植语法格式读取文件并生成前列腺素F结构。文件通常使用以下内容生成:

$gf-make<语法文件名>

解析PGF::字节字符串->前列腺素F 来源 #

喜欢读取PGF但你有管理文件处理。

自:3.9.1

标识符

数据 CId代码 来源 #

表示PGF中函数和类别的标识符。

实例

实例详细信息
等式 CId代码 来源 # 
实例详细信息

定义于PGF公司。CId代码

订单 CId代码 来源 # 
实例详细信息

定义于PGF公司。CId代码

阅读 CId代码 来源 # 
实例详细信息

定义于PGF公司。CId代码

显示 CId代码 来源 # 
实例详细信息

定义于PGF。CId代码

JSON语言 CId代码 来源 # 
实例详细信息

定义于示例服务

JSON语言 CId代码 来源 # 
实例详细信息

定义于PGF服务

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

定义于PGF公司。二元的

方法

::CId代码->放置

得到::获取CId代码

读取CID::字符串->也许 吧 CId代码 来源 #

从中读取标识符字符串。函数返回没有什么如果字符串不是有效的标识符。

utf8CI码::字节字符串->CId代码 来源 #

从UTF-8编码创建标识符字节字符串

语言文字

类型 语言=CId代码 来源 #

这只是一个CId代码语言名称为。语言名称是您在GF顶部混凝土或抽象模块具体/抽象关键字。例子:

abstract Lang=。。。Lang的混凝土LangEng=。。。

语言::前列腺素F-> [语言]来源 #

给定语法中可用的所有语言的列表。

摘要名称::PGF公司->语言 来源 #

抽象语言名称是顶级语言的名称抽象模块

语言代码::前列腺素F->语言->也许 吧 字符串 来源 #

获取RFC 4646语言标记给定具体语法实现的语言,如果这在源语法中列出。示例语言标记包括“en”(英语)对于英语,“en-UK”(英语)英国英语。

类型

类型 海波= (绑定类型,CId代码,类型)来源 #

海波代表一种类型的假设,即在类型a->B中,a是假设

showType(显示类型):: [CId代码] ->类型->字符串 来源 #

将类型呈现为字符串.列表标识符的是所有自由变量的列表表达式中的顺序与顺序相反绑定的。

mk类型:: [海波] ->CId公司-> [Expr公司] ->类型 来源 #

从假设、类别和类别的参数列表。操作mk类型[h_1,…,h_n]C[e_1,…,e_m]将创建h1->…->h_n->Ce_1。。。(_m)

mkHypo公司::类型->海波 来源 #

为非依赖类型创建假设,即A

mkDepHypo公司::CId代码->类型->海波 来源 #

为依赖类型创建假设,即(x:A)

mkImplHypo公司::CId代码->类型->海波 来源 #

为具有隐式参数的依赖类型创建假设,即({x}:A)

类别::PGF公司-> [CId代码]来源 #

给定语法中定义的所有类别的列表。类别是在抽象语法中定义的使用“cat”关键字。

启动Cat::前列腺素F->类型 来源 #

开始类别在语法中定义为“startcat”标志。这通常是句子类别但这并不是必须的。尽管有一个开始类别您可以用任何类别进行解析。开始类别定义只是为了方便。

功能

功能::前列腺素F-> [CId代码]来源 #

抽象语法中定义的所有函数的列表

功能ByCat::前列腺素F->CId代码-> [CId公司]来源 #

为给定类别定义的所有函数的列表

缺少Lins::前列腺素F->语言-> [CId代码]来源 #

给定语言中缺少线性化的函数列表。

表达式和树

类型 =Expr公司 来源 #

树是给定句子的抽象语法表示在一些具体的语法中。从技术上讲是类型同义词属于Expr公司.

Expr公司

数据 Expr公司 来源 #

语法抽象语法中的表达式。可能是这样的依赖类型或抽象语法树的参数为了一些句子。

实例

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

定义于PGF公司。Expr公司

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

定义于PGF公司。Expr公司

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

定义于PGF公司。Expr公司

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

定义于PGF公司。Expr公司

JSON语言 Expr公司 来源 # 
实例详细信息

定义于示例服务

JSON语言 Expr公司 来源 # 
实例详细信息

定义于PGF服务

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

定义于PGF公司。二元的

方法

::Expr公司->放置

得到::获取Expr公司

显示Expr:: [CId代码] ->Expr公司->字符串 来源 #

将表达式呈现为字符串.列表标识符的是所有自由变量的列表在表达式中按与顺序相反的顺序绑定的。

mk应用程序::CId代码-> [Expr公司] ->Expr公司 来源 #

通过将函数应用于表达式列表来构造表达式

unApp(运行应用程序)::Expr公司->也许 吧(CId代码, [Expr公司])来源 #

将表达式分解为函数的应用程序

不适用::Expr公司-> (Expr公司, [Expr公司])来源 #

将表达式分解为构造函数的应用程序,如常量或元变量

mkStr公司::字符串->Expr公司 来源 #

从字符串文本构造表达式

unStr(无Str)::Expr公司->也许 吧 字符串 来源 #

将表达式分解为字符串文字

mkInt公司::国际->Expr公司 来源 #

从整数文本构造表达式

unInt(取消Int)::Expr公司->也许 吧 国际 来源 #

将表达式分解为整数文字

mk双精度::双重->Expr公司 来源 #

从实数文字构造表达式

unDouble(双精度)::Expr公司->也许 吧 双重 来源 #

将表达式分解为实数文字

mk元::国际->Expr公司 来源 #

构造元变量表达式

unMeta(未元数据)::Expr公司->也许 吧 国际 来源 #

检查表达式是否为元变量

操作

线性化

使线性化::前列腺素F->语言->->字符串 来源 #

在语言中将给定表达式线性化为字符串

线性化AllLang::前列腺素F->-> [(语言,字符串)]来源 #

在所有语言中将给定表达式线性化为字符串在语法中可用。

括号内线性化::前列腺素F->语言->-> [带括号字符串]来源 #

将给定表达式线性化为语言中带括号的字符串

括号内线性化全部::前列腺素F->语言->-> [[带括号字符串]]来源 #

将给定表达式线性化为语言中带括号的字符串

表格线性化::前列腺素F->语言->Expr公司-> [[(字符串,字符串)]]来源 #

创建从要素名称到线性化的表格。外部列表对变化进行编码

显示打印名::前列腺素F->语言->CId代码->字符串 来源 #

显示函数或类别的打印名

数据 带括号的字符串 来源 #

BracketedString表示线性化的句子像往常一样,但我们也希望保留“括号'那个标记每个成分的开头和结尾。

建造师

叶子 代币

这是叶子,即单个标记

支架 CId代码!FId公司!金融情报机构!L索引 CId代码[Expr公司] [带括号字符串]

这是一个支架。这个CId代码是的类别短语。这个FId公司是的唯一标识符句子中的每个短语。对于无上下文语法即,没有不连续的成分该标识符对于每个托架也是唯一的。当存在不连续时短语,则每个短语的标识符都是唯一的,但不是每个括号都是,因为括号代表一个成分。不同的成分仍然可以通过使用构成指数,即。L指数.如果语法重叠那么所有括号的构成指数都是相同的代表相同成分的。

show带括号字符串::带括号字符串->字符串 来源 #

将带括号的字符串呈现为字符串,其中括号如下所示(S…)哪里S公司是类别。

正在分析

解析::前列腺素F->语言->类型->字符串-> []来源 #

尝试用指定的语言分析给定的字符串并生成抽象的语法表达式。

解析所有语言::前列腺素F->类型->字符串-> [(语言, [])]来源 #

尝试使用所有可用语言分析给定字符串。返回的列表包含语言对和抽象语法表达式列表(这是一个列表,因为语法可能不明确)。只有那些语言列出了至少可以进行一次解析的。

评价

计算::前列腺素F->Expr公司->Expr公司 来源 #

将表达式转换为标准形式

类型检查

PGF中的类型检查器同时进行类型检查和重命名即,它验证所有标识符都已声明,并且区分全局函数或类型标识符和变量名称。类型检查器应始终应用于用户输入的表达式,即通过函数生成的表达式喜欢读取类型读Expr因为意外的结果可能会出现。所有类型检查函数都返回更新版本输入类型或表达式,因为类型检查可以也会导致元变量实例化。

checkType(检查类型)::前列腺素F->类型->要么 Tc错误 类型 来源 #

检查给定类型是否与摘要一致语法的语法。

检查Expr::前列腺素F->Expr公司->类型->要么 Tc错误 Expr公司 来源 #

根据指定类型检查表达式。

推断表达式::前列腺素F->Expr公司->要么 Tc错误(Expr公司,类型)来源 #

尝试推断给定表达式的类型。请注意即使表达式类型正确,也不总是正确的可以在GF型系统中推断其类型。在这种情况下,函数返回CannotInferType(无法推断类型)错误。

数据 Tc错误 来源 #

如果在类型检查阶段发生错误类型检查器不会返回纯文本错误消息但是一个Tc错误描述错误的结构。

建造师

未知nCat CId代码

找到未知类别名称。

未知Fun CId代码

发现未知函数名。

错误的CatArgs[CId代码]类型 CId代码 国际 国际

类别应用于错误数量的参数。第一个整数是预期参数的数量第二个是给定参数的数量。这个【CId】参数是自由变量列表在类型中。它应该用于showType(显示类型)功能。

类型不匹配[CId代码]Expr公司 类型 类型

表达式不是预期的类型。第一种类型是预期的类型,而二是推断。这个【CId】参数是列表表达式和类型中的自由变量。它应该用于showType(显示类型)显示Expr功能。

非FunType[CId代码]Expr公司 类型

某个参数应用了非函数类型的内容。

CannotInferType(无法推断类型)[CId公司]Expr公司

无法推断表达式的类型。

未解析元变量[CId代码]Expr公司[元Id]

为了完成类型检查,必须实例化一些元变量。

出乎意料的ImplArg[CId代码]Expr公司

在类型不允许的地方传递了隐式参数

无法解决的目标[CId代码]元ID类型

有一个无法解决的目标

实例

实例详细信息
等式 Tc错误 来源 # 
实例详细信息

定义于PGF公司。类型检查

ppT错误::Tc错误->文件 来源 #

将类型检查错误呈现给文档。请参见漂亮打印.

低级解析API

数据 分析状态 来源 #

其值表示的抽象数据类型增量解析器中的当前状态。

初始化状态::前列腺素F->语言->类型->分析状态 来源 #

为给定语言和启动类别。

nextState(下一状态)::分析状态->分析输入->要么错误状态分析状态 来源 #

从当前状态和下一个标记nextState(下一状态)计算新状态,其中标记消耗,当前位置移动一。如果无法接受新令牌,则显示错误状态返回。

完成::分析状态->字符串->地图 代币 分析状态 来源 #

如果下一个标记未知,但只有其前缀(可能为空前缀)然后完成函数可用于计算可能的接下来的单词和随后的状态。这用于中的单词补全GF口译员。

数据 分析输入 来源 #

解析器的输入是一对谓词。第一个piToken从语法建议列表中选择标记,实际出现在输入字符串的当前位置。第二个piLiteral(像素文字)识别具有林id的文本FId公司可以在当前位置匹配。

simpleParseInput(简单分析输入)::代币->分析输入 来源 #

此函数构造最简单的解析器输入。它检查令牌的精确匹配并仅识别字符串,国际浮子文字。这个国际浮子只有当传递的令牌是某个数字时,文本才会匹配。这个字符串文字总是匹配的,但文字的长度只能是一个标记。

数据 分析输出 来源 #

此数据类型对您可以从解析器获得的不同结果进行编码。

建造师

分析失败 国际

整数是解析器失败的标记数位置。

类型错误[(FId公司,Tc错误)]

解析成功,但所有树的类型都不正确。林id(FId公司)指向解析器中带括号的字符串其中类型检查失败。返回了多个错误如果某个短语有很多分析词,但它们的类型都不正确。

分析确定[]

如果解析和类型检查成功,我们会得到一个抽象语法树列表。该列表应为非空。

分析未完成

这个句子不完整。仅产生部分输出

获取分析输出::分析状态->类型->也许 吧 国际-> (分析输出,带括号字符串)来源 #

此函数提取所有已完成解析树的列表这涵盖了迄今为止所消耗的全部输入。这些树也是受指定类别的限制,通常与启动类别相同。

获取ContinuationInfo::分析状态->地图[代币] [(FunId(功能ID),CId代码,字符串)]来源 #

返回具有可导出类型的Parstate的ContinuationPGFService使用

生成

PGF解释器允许自动生成给定类型的抽象语法表达式。自从GF的类型系统允许依赖类型,生成通常无法确定。事实上,所有类型的集合语法中的签名相当于图灵完备语言(Prolog)。

有几种生成方法,主要区别在于:

  • 表达式是顺序生成的还是随机生成的?
  • 它们是从模板生成的吗?模板是一个表达式包含生成器将填充的元变量。
  • 表达的深度有限制吗?深度可以用来限制搜索空间在某些情况下,这是使搜索具有决定性的唯一方法。

生成全部::前列腺素F->类型-> [Expr公司]来源 #

生成一个详尽的可能无限的列表抽象语法表达式。

生成所有深度::前列腺素F->类型->也许 吧 国际-> [Expr公司]来源 #

的变体生成全部也作为论点生成的表达式深度的上限。

生成自::前列腺素F->Expr公司-> [Expr公司]来源 #

生成抽象语法表达式的列表以类似于的方式生成全部但不是生成给定类型的所有实例,这函数使用模板。

从深度生成::PGF公司->Expr公司->也许 吧 国际-> [Expr公司]来源 #

的变体生成自也作为论点生成的子表达式深度的上限。

生成随机::随机生成g=>g->前列腺素F->类型-> [Expr公司]来源 #

生成随机抽象语法表达式的无限列表。这对于生成树库很有用,之后可以使用用于语法测试。

生成随机深度::随机生成g=>g->前列腺素F->类型->也许 吧 国际-> [Expr公司]来源 #

的变体生成随机也作为论点生成的表达式深度的上限。

从深度生成随机数::随机生成g=>g->前列腺素F->Expr公司->也许 吧 国际-> [Expr公司]来源 #

基于深度有限的模板的随机生成。

形态学分析

数据 吗啡 来源 #

可视化效果

graphvizAbstractTree::前列腺素F-> (布尔,布尔) ->->字符串 来源 #

以Graphviz格式呈现抽象语法树。这对布尔 (娱乐、猫)允许您控制函数名和类别名称包含在渲染树中。

graphvizDependencyTree 来源 #

论据

::字符串

输出格式:“乳胶”,“conll”(控制),“麦芽标签”,“麦芽糖输入”“点”

->布尔

包括额外信息(调试)

->也许 吧 标签

使用获取的抽象标签信息获取DepLabels

->也许 吧 CncLabels公司

使用“”获得的具体标签信息(过去:未使用(过去:也许是字符串))

->前列腺素F 
->CId代码

分析的语言

-> 
->字符串

以指定格式渲染输出

可视化单词依赖关系树。

获取DepLabels::字符串->标签 来源 #

为标签准备从配置文件中获取的行与一起使用graphvizDependencyTree.每行格式乐趣 标签*.

类型 CncLabels公司=[CncLabel]来源 #

可能性

数据 可能性 来源 #

一种抽象数据结构,表示语法中不同函数的概率。

mk概率::前列腺素F->地图 CId代码 双重->可能性 来源 #

建立概率表。第二个参数是一个映射其中包含已知概率。如果某个函数是不在地图上,然后根据概率分配关于未分配概率质量的均匀分布用于结果类别。

默认概率::前列腺素F->可能性 来源 #

返回默认的均匀分布。

显示可能性::可能性->字符串 来源 #

将概率结构呈现为字符串

从文件读取概率::文件路径->前列腺素F->IO(输入输出) 可能性 来源 #

从文件中读取概率。这应该是一个文本文件,其中每行函数名后跟实数。数字表示分配给该函数的概率质量。函数名和概率应该用空格隔开。

问题树::前列腺素F->Expr公司->双重 来源 #

计算给定树的概率

按探测器排列树::前列腺素F-> [Expr公司] -> [(Expr公司,双重)]来源 #

从最高概率到最低概率排序

浏览

尝试

数据 A树t吨来源 #

普通应用树的一种类型

建造师

其他t吨 
应用程序 CId公司[A树t) 

实例

实例详细信息
显示t=>显示(A树t) 来源 # 
实例详细信息

定义于PGF公司

数据 尝试 来源 #

一种普通应用树的尝试类型

到Trie:: [A树 ] -> [[尝试]]来源 #

将树列表合并为trie