GF徽标

GF资源语法教程

用语法框架创建语言资源

阿内·兰塔

介绍

本教程于2010年5月17日在马耳他LREC上提供,是在GF暑期学校2009该课程于2009年4月首次在在线课程中介绍。2009年8月的暑期学校有来自20个国家的30名学员。启动了15种新语言。自第一所暑期学校以来,图书馆已经从12种语言发展到了30多种语言。

本教程的目的是通过解释GF的实际使用和资源语法库中的语言概念,介绍一种快速的资源语法写作方法。

有关更多详细信息,我们建议

本教程中的代码示例位于

https://github.com/语法框架/gf-contrib/tree/master/lrec-tutorial.

我们再怎么强调你自己在使用GF系统的代码示例和练习上的工作的重要性也不为过!

本课程五课内容

1.GF系统,简单的多语言语法

2.形态学范式和词汇

3.建立语言句法

4.在应用程序中使用资源语法库

5.开发新的资源语法

GF系统与简单多语言语法

目录

什么是GF

安装GF系统

的语法约翰爱玛丽英语、法语、拉丁语、荷兰语、希伯来语

测试语法和构建应用程序

资源语法库的范围

练习

GF=语法框架

GF是一个语法形式主义:书写语法的符号

GF是一个函数式程序设计语言具有类型和模块

GF程序被称为语法

语法是一个声明性程序,它定义

多语言语法

许多语言由一个共同的抽象语法

GF计划

口译员用于测试语法(GF外壳)

编译器将语法转换为有用的格式

GF资源文法库

形态学和基本语法

不同语言的通用API

目前(2010年5月)有17种语言:保加利亚语、加泰罗尼亚语、丹麦语、荷兰语、英语、芬兰语、法语、德语、语际语、意大利语、挪威语、波兰语、罗马尼亚语、俄语、西班牙语、瑞典语、乌尔都语。

至少有19种语言正在建设中:南非荷兰语、阿姆哈拉语、阿拉伯语、巴托努姆语、世界语、波斯语、希腊语(古代)、希伯来语、冰岛语、日语、拉丁语、拉脱维亚语、马耳他语、蒙古语、葡萄牙语、斯瓦希里语、泰语、茨瓦纳语、土耳其语。

使用GF的位置

自然语言界面:WebALT,请参阅

webalt.math.helsinki.fi/PublicFiles/CD/Screencast/TextMathEditor%20Demo.swf

对话系统:TALK,参见www.youtube.com/watch?v=1bfaYHWS6zU

翻译:MOLTO,请参阅www.molto-project.eu

GF运行时系统

PGF语法可以是嵌入的在Haskell、Java和Prolog程序中

它们可以用于web服务器

安装和使用GF系统

转到GF主页http://语法框架.org并按照快捷方式

这个开发人员方法推荐给资源语法开发人员:

启动GF外壳

命令玻璃纤维启动GF外壳:

gf美元*  *  **           ******        * * * * * **        *         **       * * * *  **     *      **  *  *这是GF 3.1.6版。许可证:请参阅帮助-许可证。错误报告:http://code.google.com/p/grammatic-framework/issues/list语言:>

使用GF外壳:帮助

命令小时=帮助

>帮助

给出了带有简短描述的命令列表。

>帮助分析

提供有关命令的详细帮助解析.

命令有短名称(1或2个字母)和长名称。

在GF中使用上下文无关语法

这些是GF中可用的最简单语法。例如:

预处理。S::=NP VP;完成。VP::=V2 NP;厕所。NP::=“约翰”;玛丽。NP::=“玛丽”;爱。V2::=“爱”;

每个规则中的第一项是句法功能,用于建筑:Pred公司=预测,完成=互补。

第二项是类别:S=句子,NP=名词短语,VP=动词短语,V2=二位动词。

导入和分析

将上述语法复制或写入文件零.cf.

在GF中使用语法:进口=

>i零.cf

收件人解析树的字符串:解析=

>p“约翰爱玛丽”Pred John(《Compl Love Mary》)

默认情况下,解析在类别中S公司。这可以被覆盖。

随机生成、线性化和管道

生成随机树:生成_随机=

>克Pred Mary(完全爱Mary)

收件人使线性化树到字符串:使线性化=

>l Pred Mary(完全爱Mary)玛丽爱玛丽

收件人对另一个命令:|

>克|l玛丽爱玛丽

抽象树的图形视图

在Mac中:

>p“约翰爱玛丽”|visualize_tree-view=打开

在Ubuntu Linux中:

>p“约翰爱玛丽”|visualize_tree-view=oeg

您需要Graphviz程序来查看视图。

解析树的图形视图

>p“约翰爱玛丽”|visualize_parse-view=open

抽象和具体语法

无上下文规则

预测。S::=NP副总裁

定义了两件事:

GF的主要思想是:将这两件事分开。

分离抽象语法和具体语法

无上下文规则转换为两个判决在GF中:

预测。S::=NP VP===>有趣Pred:NP->VP->Slin Pred np vp=np++vp

函数和串联

函数类型:A->B->C,读取“函数来自A类B类C类"

功能应用:f a b公司,读取“(f)应用于参数b条"

串联:x++y,读取“字符串x个后跟字符串"

参见Haskell中的函数编程。

注意:在GF中,++介于令牌列表因此“创造了一个空间”。

从无上下文到GF语法

语法分为两部分模块

判决 阅读
C类 C类是一个类别
乐趣 (f):T型 (f)是类型为的函数T型
林肯猫 C类 = L(左) C类具有线性化类型L(左)
f x x = t吨 f x x具有线性化t吨

抽象语法,示例

抽象零={S;NP;副总裁;V2;乐趣预测:NP->VP->S;完成:V2->NP->VP;玛丽·约翰:NP;爱情:V2;}

具体语法,英语

混凝土零工程={林肯猫S、 NP,VP,V2=结构;Pred np vp=np++vp;完成v2 np=v2++np;约翰=“约翰”;Mary=“玛丽”;Love=“爱”;}

注意:Str公司(标记列表,“字符串”)作为唯一的线性化类型。

使语法多语言

一个抽象+许多具体

可以给出相同的树系统

具体语法,法语

混凝土零频率={林肯猫S、 NP,VP,V2=结构;Pred np vp=np++vp;完成v2 np=v2++np;约翰=“Jean”;玛丽=“玛丽”;爱=“aime”;}

只需使用不同的单词

翻译和多语言生成

导入许多具有相同抽象语法的语法

>i ZeroEng.gf零频率.gf语言:ZeroEng ZeroFre

转换:管道线性化到解析

>p-lang=ZeroEng“约翰爱玛丽”|l-lang=ZeroFre让-艾梅-玛丽

多语言生成:线性化为所有语言

>克|lPred Mary(完全爱Mary)玛丽爱玛丽玛丽艾美玛丽

多语言树库

树库:显示树及其线性化

>gr | l-树库零:Pred Mary(Compl Love Mary)零英:玛丽爱玛丽ZeroFre:Marie aime玛丽

具体语法,拉丁语

零的具体零纬度={林肯猫S、 VP,V2=Str;NP=案例=>Str;Pred np vp=np!标称++vp;完成v2 np=np!Acc++v2;John=表{Nom=>“Ioannes”;Acc=>“Ioannem”};玛丽=表格{Nom=>“玛丽亚”;Acc=>“玛利亚”};爱=“业余”;参数案例=Nom|Acc;}

不同的语序,不同的线性化类型,参数。

线性化中的参数

拉丁语有案例主语为主语,宾语为宾语。

参数类型对于案例(拉丁语的6个案例中只有2个案例):

param Case=Nom|Acc

表格类型和表格

线性化类型NP公司是一个肉用:来自案例Str公司,

lincat NP=案例=>Str

线性化约翰是一个屈折表,

lin John=表{Nom=>“Ioannes”;Acc=>“Ioannem”}

使用NP时,选择(!)表中的适当情况,

Pred np vp=np!标称++vp完成v2 np=np!Acc++版本2

具体语法,荷兰语

混凝土零度={林肯猫S、 NP,VP=Str;V2={v:Str;p:Str};Pred np vp=np++vp;完成v2 np=v2.v++np++v2.p;John=“Jan”;玛丽=“玛丽”;爱={v=“heeft”;p=“lief”};}

动词后背褶皱是一个不连续成分.

记录类型和记录

线性化类型第2版是一个记录类型有两个领域

lincat V2={v:Str;p:Str}

线性化是一个记录

lin Love={v=“hat”;p=“lieb”}

字段值由投影(.)

lin Compl v2 np=v2.v++np++v2.p

具体语法,希伯来语

零的混凝土ZeroHeb={标志编码=utf8;林肯猫S=Str;NP={s:Str;g:性别};VP,V2=性别=>Str;Pred np vp=np.s++vp!np.g;Compl v2 np=表{g=>v2!g++“”++np.s};约翰={s=“ג”;g=Masc};玛丽={s=“”;g=Fem};爱=表{Masc=>“”;Fem=>“”};参数性别=Masc|Fem;}

动词同意主题的性别。

可变和固有特征、协议

NP具有性别固有特性-记录中的字段

lincat NP={s:Str;g:性别}林玛丽={s=“mry”;g=Fem}

副总裁的性别可变特征-表的参数

lincat VP=性别=>性别

在预测中,VP接收NP的性别

lin Pred np-vp=np.s++vp!净重(np.g)

功能设计

确定变量和固有特性是GF编程的核心。

好的提示:字典给出了各种形式的可变特性和固有特性的值。

示例:法语名词

由此我们推断法语名词有可变的数字和固有的性别

lincat N={s:Number=>Str;g:性别}

可视化树和单词对齐

从抽象树到解析树

链接间隔单词用它最小生成子树

更换间隔构造函数函数用它价值类别

生成单词对齐

在L1和L2中:用最小的生成子树链接每个单词

删除中间树,直接合并从L1到L2的链接

通知:一般来说,这会给短语对齐

通知:链接可以交叉,短语可以不连续

通过树对齐单词

>解析“约翰爱玛丽”|aw-view=打开

更复杂的单词对齐

构建应用程序

将语法编译为PGF:

$gf-使ZeroEng.gf ZeroFre.gf ZeroLat.gf Zero Ger.gf ZerorHeb.gf

结果文件零磅/平方英尺例如,可以包含在冰箱磁铁中:

按比例放大语法

零gf是资源语法的一小部分

当前的资源语法有80个类别,200个句法功能,最小词汇量为500个单词。

偶数S、 NP、VP、V2将需要更丰富的线性化类型。

关于句子的更多内容

类别S公司必须照顾好

此外:疑问句、祈使句、关系从句

名词短语的更多操作

NP公司还包括

此外:常见名词、形容词

练习

1.安装玻璃纤维在您的计算机上。

2.学习并尝试命令对齐单词,空的,生成_随机,生成树,帮助,进口,使线性化,解析,输入字符串,退出,读取文件,翻译测验,unicode表,可视化解析,可视化树,写入文件.

3.写一个具体的语法另一种语言(例如你的暑期学校项目语言)。

4.扩展语法中有十个新的名词短语和动词。

5.添加到语法一个范畴A类形容词和函数完成:A->副总裁,形成动词短语,如是旧的.

形态学范式与词汇构建

目录

形态学、屈折、范式-例如:英语动词

规则模式和智能范式

超负荷操作

词汇中的固有特征

构建和引导词典

非连接性形态学:阿拉伯语

形态学

弯曲形态:定义不同形式共个单词

衍生形态学:讲述新词是如何由旧词形成的

我们可以在GF中完成这两项工作,但现在专注于屈折形态学。

资源语法的良好开端

完整的屈折系统:1-6周

综合词典:天或周

形态学分析:每秒多达200000个单词

导出到SQL、XFST。。。

单词是什么?

在抽象语法中:基本类型的对象,例如爱情:V2

在具体语法中,

因此,,

词汇类别

词性=单词类别=词汇范畴

在GF中,词性被定义为及其关联林肯猫.

在GF中,词汇和其他词汇之间没有形式上的区别第条。

但在资源语法中,我们保持了一个独立词汇类别的规则。

资源语法中的主要词汇类别

名称 例子
N个 名词 房子
A类 形容词 小的
V(V) 动词 睡觉
第2版 双位动词
Adv公司 副词 今天

典型特征设计

变量 固有的
N个 编号,案例 性别
A类 人数、病例、性别、学位 位置
V(V) 时态、数字、人称。。。 辅助的
第2版 作为V(V) 补码大小写
Adv公司 - -

模块结构

资源模块屈折函数为操作

资源MorphoEng={操作规则V:Str->V;…}

词汇:抽象和具体语法

abstract Lex={fun Walk:V;…}Lex的具体LexEng=在{lin Walk=regV“Walk”;…}中打开MorphoEng

可以使用相同的资源(打开ed)在许多词汇中。

抽象和具体是顶层-他们定义树、解析、线性化。

资源模块和操作人员s不是顶级的-它们在编译后被“丢弃”(即不保存在PGF中)。

示例:英语动词屈折变化的资源模块

使用库模块前奏曲.

首先定义参数类型和词类。

resource Morpho=打开前奏曲{参数VForm=VInf|VPres|VPast|VPastPart|VPresPart;操作人员动词:Type={s:VForm=>Str};

判决书操作人员:辅助操作.

启动:最坏情况功能

为了节省写作并在动词类型

mk动词:(_,_,_,_,_:Str)->动词=\去,去,去,去->{s=表格{VInf=>去;VPres=>去;VPast=>进行了;VPastPart=>消失;VPresPart=>正在进行}} ;

在资源模块中测试计算

使用导入保持选项

>i-保留形态.gf

使用命令立方厘米=计算机_混凝土

>cc mkVerb“use”“uses”“used”“used”“using”{s:形态.VForm=>结构=表格形态。VForm格式{莫尔弗。VInf=>“使用”;莫尔弗。VPres=>“使用”;莫尔弗。VPast=>“已使用”;莫尔弗。VPastPart=>“已使用”;莫尔弗。VPresPart=>“使用”}}

定义范例

A类范式是类型为的操作

Str->动词

它接受一个字符串并返回一个变形表。

让我们首先定义正则动词的范例:

regVerb:Str->动词=\walk->mkVerb walk(walk+“s”)(walk+“ed”)(walk+“d”)(步行+“ing”);

这将适用于步行,兴趣,.

它不适用于,,使用,哭泣,,停止.

更多范例

对于以结尾的动词,x个,z(z),中国

s_regVerb:Str->动词=\kiss->mkVerb kiss(kiss+“es”)(kiss+ed)(kiss+“ed”)(亲吻+“ing”);

对于以结尾的动词e(电子)

e_regVerb:Str->动词=\使用->让我们=初始化使用在mkVerb中使用(使用+“s”)(us+“ed”)(us+“ed“)(us+ing);

注意:

还有更多的范例

对于以结尾的动词

y_regVerb:Str->动词=\哭->让cr=init哭泣在里面mk动词cry(cr+“ies”);

对于以结尾的动词

ie_regVerb:Str->动词=\die->设dy=Predef.tk 2模+“y”在里面mkVerb die(die+“s”)(die+d)(die+“d”)(dy+“ing”);

选择什么样的范式

如果不定式以结尾s、 x、z、ch,选择s_regRerb(重新注册):用力咀嚼,咀嚼

如果不定式以结尾,选择_规则重新设置:哭泣,,

如果不定式以结尾e(电子),选择e_regVerb(_regVerb):使用,习惯于,使用

聪明的范例

让GF通过以下方式选择范例字符串上的模式匹配

smartVerb:Str->Verb=\v->case v of{_+(“s”|“z”|“x”|“ch”)=>s_regVerb v;_+“ie”=>ie_regVerb v;_+“ee”=>ee_regVerb v;_+“e”=>e_regVerb v;_+(“a”|“e”|“o”|“u”)+“y”=>regVerb v;_+“y”=>y_regVerb v;_=>regVerb v} ;

字符串上的模式匹配

格式:案例 一串 第页,共页{ 图案 => 价值 }

模式:

常见做法:最后的模式是一个全面的_

测试智能范式

>cc-all smartVerb“munch”咀嚼咀嚼>cc-所有smartVerb“死亡”死亡死亡死亡死亡>cc-所有smartVerb“同意”同意>cc-所有smartVerb“部署”部署部署部署部署>cc-所有smartVerb“分类”分类分类分类分类

智能范式尚不完善

不规则动词显然不包括在内

>cc-所有smartVerb“sing”唱歌唱歌唱歌唱歌

有辅音重复的规则动词也不是

>cc-所有smartVerb“停止”停止停止停止停止

韵母重复范式

使用Prelude函数最后的

dupRegVerb:Str->动词=\stop->let stop=停止+最后一次停止在里面mkVerb停止(停止+“s”);

字符串模式:以元音开头的相关辅音

_+(“a”|“e”|“i”|“o”|“u”)+(“b”|“d”|“g”|“m”|“n”|“p”|“r”|“s”|“t”)=>dupRegVerb v;

测试辅音重复

现在它工作了

>cc-所有smartVerb“停止”停止停止停止停止

但是怎么办

>cc-所有智能动词“coat”涂层涂层涂层涂层

解决方案:在最后一个字符之前出现双元音(?匹配一个字符)

_+(“ea”|“ee”|“ie”|“oa”|”oo“|”ou“)+?=>regVerb v;

没有防水解决方案

重复取决于重音,重音在英语中没有标记:

这意味着我们有时必须提供多个表单。

对于不规则动词,我们已经知道了这一点。我们也不能为每一个都写模式,因为例如。两者都可以谎言,谎言,谎言谎言,谎言,谎言.

不规则动词范例

论点:三种形式,而不是一种。

正则动词中完成的模式匹配可以重用。

不规则动词:(_,_,_:Str)->动词=\sing,sang,sung->让v=smartVerb唱歌在里面mk动词演唱(v.s!VPres)演唱(v.s!VPresPart);

把所有这些放在一起

我们有三个功能:

smartVerb:Str->动词不规则动词:Str->Str->Str->VerbmkVerb:Str->Str->Str->Str->Str->Str->动词

由于所有类型都不同,我们可以使用过载给他们起一个相同的名字。

超载的范例

对于文档:显示参数示例的变量名。

mkV=过载{mkV:(cry:Str)->动词=smartVerb;mkV:(sing,sang,sing:Str)->动词=不定式动词;mkV:(go,gos,goes,gone,going:Str)->动词=mkVerb;} ;

测试过载的范例

>cc-所有mkV“谎言”谎言谎言谎言谎言>cc-所有mkV“谎言”“谎言”谎言谎言谎言谎言>cc—所有mkV“忽略”省略省略省略>cc-所有mkV“呕吐物”呕吐呕吐呕吐呕吐>cc-所有mkV“呕吐”“呕吐”呕吐呕吐呕吐呕吐>cc-所有mkV“呕吐”“呕吐”呕吐物

当然我们可以做得更好呕吐物...

形态实施阶段

1.线性化类型,具有参数化和固有特性。

2.最坏情况函数。

3.一套范例,传统上每一个都有一个论点。

4.聪明的范例,具有相关数量的参数。

5.用户功能过载,收集智能范例。

其他词类

通常建议的顺序:

1.名词,最简单的类。

2.形容词,通常使用名词屈折,加上性别和程度。

动词,通常是最复杂的类别,在分词中使用形容词。

形态语音功能

许多操作对不同的语音部分是通用的。

示例:添加英语名词或动词。

add_s:Str->Str=\v->case v of{_+(“s”|“z”|“x”|“ch”)=>v+“es”;_+(“a”|“e”|“o”|“u”)+“y”=>v+“s”;cr+“y”=>cr+“ies”;_=>v+“s”} ;

这应该单独定义,而不是直接在动词连词中定义。

注意:模式变量匹配,如_但被束缚住了。

构建词典

令人厌烦的是,我们甚至需要一种语言的抽象和具体模块。

abstract Lex={concrete LexEng=open中的Morpho{V类;lincat V=动词;有趣的林播放_V:V;play_V=mkV“播放”;睡眠_V:V;sleep_V=mkV“sleep”“sleed”“sleped”;}

幸运的是,这些模块可以通过机器从POS标记的单词列表中生成

V播放V睡眠睡眠

引导词典

备选方案1。从形态POS标记的单词列表中:平凡

已播放V播放V睡眠睡眠

备选方案2。从一个简单的单词列表中,POS-tagged:开始假设规则性,通过迭代生成、更正和添加表单

V向播放===>V向播放V睡眠V睡眠V睡觉V睡眠

示例:芬兰语名词平均需要1.42个形式(生成26个形式)。

非连接性形态学:阿拉伯语

闪族语言,例如阿拉伯语:卡塔巴具有表单卡阿提布,雅克图布, ...

传统分析:

例子:雅克图布=千桶+亚菲库鲁

单词是数据结构,而不是字符串!

阿拉伯语数据结构

根是字符串的记录。

根:类型={F,C,L:Str};

模式是从根到字符串的函数。

模式:类型=根->结构;

填充是一种特殊情况:字符串填充根中四个插槽的记录。

填充:类型={F,FC,CL,L:Str};

除了中辅音重复(例如。FaCCaLa公司).

应用图案

从填充物中获得的图案将记录交织在一起:

填充:填充->图案=\p,r->p.F+r.F+p.FC+r.C+p.CL+r.L+p.L;

中辅音重复也使用填充,但重复了C类根的辅音:

数据填充:填充->图案=\p,r->p.F+r.F+p.FC+r.C+r.C+p.CL+r.L+p.L;

用字符串编码根

这只是为了便于编程和编写词典。

F=第一个字母,C=第二个字母,L=其余字母。

getRoot:Str->Root=\s->case s of{F@?+C@?+L=>{F=F;C=C;L=L};_=>Predef.error(“无法从”++s获取根)} ;

这个按图案显示 x@p比赛并绑定x个.

这个误差函数 预定义错误停止计算并显示字符串。这是一个典型的catch-all值。

按字符串编码模式

图案是用字母编码的F类,C类,L(左).

getPattern:Str->Pattern=\s->case s of{F+“F”+FC+“CC”+CL+“L”+L=>dfill{F=F;FC=FC;CL=CL;L=L};F+“F”+FC+“C”+CL+“L”+L=>填充{F=F;FC=FC;CL=CL;L=L};_=>Predef.error(“无法从”++s获取模式)} ;

高级词典构建函数

字典条目:根+模式。

获取单词:Str->Str->Str=\r,p->getPattern p(getRoot r);

现在我们可以尝试:

>抄送getWord“ktb”“yaFCuLu”“牦牛图布”>抄送getWord“ktb”“muFaCCiLu”“穆卡提布”

阿拉伯语动词类型的参数

时态、数字、人称、性别的屈折。

参数编号=Sg|Dl|Pl;性别=Masc|Fem;时态=Perf|Impf;个人=Per1|Per2|Per3;

但不是在所有组合中。例如:没有第一人称对偶。

(我们省略了大多数时态和语气。)

阿拉伯语动词屈折变化示例

阿拉伯语动词类型:实现

我们使用代数数据类型只包括有意义的组合。

参数VPer=Vp3编号性别|Vp2Sg性别|Vp2Dl公司|Vp2Pl性别|Vp1Sg|Vp1Pl;操作动词:类型={s:Tense=>VPer=>Str};

因此,2*(3*2+2+1+2+1+1)=26个形式,而不是2*3*2*3=36。

阿拉伯语动词范例

pattV_u:时态->VPer->Pattern=\t,v->getPattern(第个案例,共个案例{性能=>第v种,共种{Vp3 Sg Masc=>“FaCaLa”;Vp3 Sg Fem=>“FaCaLato”;--o是no-vowel符号(“sukun”)Vp3 Dl Masc=>“FaCaLaA”;-- ...} ;Impf=>第v种情况{-- ...Vp1Sg=>“A?aFoCuLu”;Vp1Pl=>“naFoCuLu”}});u_Verb:Str->动词=\s->{s=\\t,p=>appPattern(获取根)(pattV_u t p)} ;

应用阿拉伯语范例

在资源模块中测试:

>抄送-所有u_Verb“ktb”kataba katabato katabaA katabataA katabuwA katabona katabota kataboutikatabotuma一个katabotum katabotunv2a katabotu katabona一个yakotubu takotubun亚科图巴Ani takotuba Ani yakotubuwna yakotubna takotubu takotubiynatakotubaAni takotubuwna takotubona A?阿科图布-纳科图布

建立词典:

趣味ktb_V:V;lin ktb_V=u_Verb“ktb”;

我们如何进行打印(娱乐性GF黑客攻击)

我们定义了一个HTML打印操作

操作verbTable:动词->字符串

并将其用于特殊类别由建造

趣味选项卡:V->表格;lin选项卡v=verbTable v;

然后我们使用

>l选项卡ktb_V|ps-env=引号-to_arabic|ps-to_html|wf-file=ara.html>!tr“\”“”“<ara.html>ar.html

练习

1.学会使用命令计算机_混凝土,形态分析,形态测验.

2.尝试资源库文件中的一些智能范例范例对于一些你知道(或还不知道)的语言。使用命令立方厘米为了这个。

3.为目标语言中的一些词类和一些范例编写一个词法实现。从功能设计开始,以智能范式结束。

4.用你的目标语言引导一个包含100个单词的GF词典(抽象+具体)。

5.(娱乐GF黑客。)编写一个类似于verb表格用于在HTML中打印漂亮的屈折表。

语言语法实现的基础

目录

关键类别和规则

形态学语法接口

英语、意大利语、法语、芬兰语、瑞典语、德语、印地语的示例和变体

微型资源语法:意大利语

模块扩展和依赖关系图

印地语/乌尔都语的发音

如果这个讲座的细节让人感到困难,不要担心! 语法困难,这就是为什么资源语法如此有用!

资源语法中的语法

“语言本体论”:语言常见的句法结构

80个类别,200个函数,迄今为止适用于所有资源语言

足以表达意义的大多数目的:数学、技术文件、对话系统

必须通过特定于语言的规则进行扩展,以允许解析任意文本(英语中大约多10%?)

工作量大,容易出错!

关键类别和功能

关键类别

名称 例子
条款 每个年轻人都爱玛丽
副总裁 动词短语 爱玛丽
第2版 双位动词
NP公司 名词短语 每个年轻人
中国 普通名词 年轻人
Det公司 测定器 每一个
AP公司 形容词短语 年轻的

关键功能

乐趣 名称 例子
预处理VP:NP->VP->Cl 预测 每个男人都爱玛丽
完成2:V2->NP->VP 互补 爱玛丽
DetCN:Det->CN->NP 决心 每个人
调整CN:AP->CN->CN 修改 年轻人

功能设计

变量 固有的
紧张的 -
副总裁 时态,agr -
第2版 时态,agr 案例
NP公司 案例 农业土地储备
中国 编号,案例 性别
Det公司 性别,案例
AP公司 性别、数量、案例 -

agr公司=协议功能:性别、人数、人员

谓词:构建子句

功能之间的相互作用

param时态,格,农业lincat Cl={s:时态=>Str}lincat NP={s:Case=>Str;a:Agr}lincat VP={s:时态=>Agr=>Str}fun PredVP:NP->VP->Cllin PredVP np-vp={s=\\t=>np.s!sub++vp.s!t!np.a}操作主题:案例

功能传递

一般来说,组合规则只通过特征:无案例分析(桌子表达式)。

因此,一种特殊的符号是有用的:

\\p、 q=>t===表{p=>表{q=>t}}

它类似于lambda抽象(\x、 y->t在函数类型中)。

预测:示例

英语

np.agr公司 目前 过去的 未来
Sg每1 我睡觉 我睡着了 我会睡觉的
Sg每3 她睡觉了 她睡着了 她会睡着的
Pl每1 我们睡觉 我们睡着了 我们会睡觉的

意大利语(“我累了”、“她累了”和“我们累了”)

np.agr公司 目前 过去的 未来
每1个Masc Sg 伊奥·索诺·斯坦索 io ero斯坦索 io saróstanco公司
女性中士Per3 莱耶斯坦察 雷时代的立场 利萨塔
Fem Pl每1 noi siamo止血 noi eravamo站姿 非剖宫产止血

预测:变化

语序:

专业下降:

发射率:

可变主题案例:

补语:构建动词短语

功能之间的相互作用

lincat NP={s:Case=>Str;a:Agr}lincat VP={s:时态=>Agr=>Str}lincat V2={s:时态=>Agr=>Str;c:格}乐趣完成2:V2->NP->VPlin CompleV2 v2 vp={s=\\t,a=>v2.s!t!a++np.s!v2.c}

补充:示例

英语

v2.外壳 不定式VP
会计科目 爱我
+Acc公司 看着我

芬兰语

v2.外壳 VP,不定式 翻译
Accusative公司 塔瓦塔小步舞 “见我”
分词 拉卡斯塔·米努阿 “爱我”
激动人心的 皮塔瓦努斯塔 “像我一样”
属格+每个州 katsoa minun peräni村 “照顾我”

互补:变体

介词:两位动词通常在加法格中包含介词

lincat V2={s:时态=>Agr=>Str;c:大小写;prep:Str}lin CompleV2 v2 vp={s=\\t,a=>v2.s!t!a++v2.prep++np.s!v2.c}

Clitics公司:主题的位置可能不同,如意大利语:

确定:构建名词短语

功能之间的相互作用

lincat NP={s:Case=>Str;a:Agr}lincat CN={s:Number=>Case=>Str;g:性别}lincat Det={s:性别=>案例=>结构;n:数字}乐趣DetCN:Det->CN->NPlin DetCN det cn={s=\\c=>详细信息!中国!c++cn.s!详细信息!c;a=agr cn.g det.n Per3}运营经理:性别->人数->人数->农业

确定:示例

英语

Det.num公司 NP公司
Sg公司 每家每户
Pl公司 这些房子

意大利语(“这款葡萄酒”、“这款披萨”、“那些披萨”)

Det.num公司 CN.gen公司 NP公司
Sg公司 马斯克 奎斯托葡萄酒
Sg公司 股骨 奎斯塔披萨
Pl公司 股骨 平息披萨

芬兰语(“每间房子”、“这些房子”)

Det.num公司 NP,主格 NP,阴性
Sg公司 约凯尼·塔罗 约凯塞萨·塔洛萨
Pl公司 纳梅塔洛 näissätaloissa村

确定:变化

系统数变化:

“零”决定因素:

名词的特异性参数:

修饰:给名词添加形容词

功能之间的相互作用

lincat AP={s:性别=>数量=>案例=>结构}lincat CN={s:数字=>案例=>结构;g:性别}趣味AdjCN:AP->CN->CNlin-AdjCN-ap-cn={s=\\n,c=>ap.s!中国!不!c++cn.s!不!c;g=库存数量}

修改:示例

英语

CN,单数 CN,复数
新房子 新房子

意大利语(“红酒”、“红屋”)

CN.gen公司 CN,单数 CN,复数
马斯克 红葡萄酒 红葡萄酒
股骨 卡萨罗萨 凯斯·罗斯

芬兰语(“红房子”)

CN,sg,主格 CN,sg,烧蚀 CN、pl、essive
普纳茵塔罗 普奈斯塔·塔洛塔 巴拿西纳塔洛瓦

修改:变化

形容词短语的位置

形容词的特异性参数

词汇插入

要“开始”每个类别,请使用词典中的单词。

词汇插入函数对于每个词汇类别:

使用N:N->CN使用A:A->AP使用V:V->VP

线性化规则通常很简单,因为林肯猫s匹配

lin使用n n=nlin使用a a=alin使用v v=v

然而,对于使用V尤其是,这通常会更加复杂。

短语的开头

插入的单词是从中构建的短语:

通常有很多例外和修改,

这适用于向心的短语:标题与完整短语的类型相同。

名词短语的头是什么?

在一个NP公司形式的检测CN,是Det公司中国头部?

实际上两者都不是,因为功能是双向传递的:

lin DetCN det cn={s=\\c=>详细信息!中国!c++cn.s!详细信息!c;a=agr cn.g det.n Per3}

此外,这NP公司偏心的:没有任何部分与整体的类型相同。

结构词

结构词=虚词,具有特殊语法功能的单词

通常是的成员封闭类这意味着从未(或很少)向他们介绍新单词。

线性化类型通常是特定的,屈折变化是不规则的。

意大利语小型资源文法

我们将其分为五个模块——比全部资源少得多!

抽象语法——句法猫和funsabstract Lang=语法**…--添加到语法中的测试词典resource ResIta--意大利语资源具体语法Ita of Grammar=open ResIta in…--意大利语语法语言的具体语言=语法**在…--It.lexicon中打开ResIta

延伸与开放

模块扩展:N=M1、M2、M3**{…}

模块打开:N={…}中的开R1、R2、R3

模块依赖性

矩形=抽象,实心椭圆=具体,虚线椭圆=资源

生成依赖关系图

使用命令分布式电源=依赖关系图和graphviz

>i-保留LangIta.gf>依赖关系图在文件gfdepgraph.dot中写入图形>!dot-Tjpg_gfdepgraph.dot>测试dep.jpg

通话前,卸下模块Predef公司以节省空间。

语法模块

抽象语法={氯;NP;副总裁;AP;中国;检测;N;A;V;V2;乐趣PredVP:NP->VP->Cl;复杂V2:V2->NP->VP;DetCN:Det->CN->NP;ModCN:CN->AP->CN;使用V:V->VP;用法N:N->CN;使用A:A->AP;a_Det,即_Det:Det;this_Det,these_Det:检测;i_NP、she_NP、we_NP:NP;}

参数

参数定义见ResIta.gf公司56种动词形式中只有11种。

编号=Sg|Pl;性别=Masc|Fem;案例=Nom|Acc|Dat;Aux=Avere|Essere;--动词的助动词时态=Pres|Perf;个人=Per1|Per2|Per3;Agr=Ag性别编号人员;VForm=VInf|VPres编号人员|VPart性别编号;

意大利语动词短语

动词短语在句法上的时态和一致性

使用V arrive_V 压力 性能
Ag Masc Sg Per1公司 阿利沃 索诺·阿里瓦托
Ag-Fem Sg Per1(Ag-Fem-Sg Per1) 阿利沃 到达声
Ag Masc Sg Per2公司 到达 到达目的地
Ag-Fe-Sg-Per2 到达 sei arrivata公司
Ag Masc Sg Per3公司 到达 艾瑞瓦托
Ag Fem Sg Per3每3 到达 艾瑞瓦塔
Ag Masc Pl每1 到达 阿里瓦蒂西亚莫
Ag-Fem Pl每1 到达 西莫·阿里维尔
Ag Masc Pl Per2公司 无公害的 到达锡耶特
Ag-Fem Pl-Per2 无公害的 siete arrivate公司
Ag Masc Pl每3 阿里瓦诺 索诺·阿里瓦蒂
银-铁-Pl Per3 阿里瓦诺 索诺·阿里维尔

动词的形态,在形态学中

到达_V 形式
VInf公司 到达
VPres序列Per1 阿利沃
VPres序列Per2 到达
VPres序列Per3 到达
VPres Pl Per1公司 到达
VPres Pl每2 无公害的
VPres Pl每3 阿里瓦诺
VPart Masc Sg公司 到达
VPart女性Sg 到达
VPart Masc公共有限公司 到达
副总裁Fem Pl 无公害的

固有特征:辅助的埃塞尔.

动词短语类型

词汇插入图V(V)副总裁.

两种可能性副总裁:要么接近,

lincat VP={s:时态=>Agr=>Str}

或接近V(V),只需在动词中添加一个clitic和一个object,

lincat VP={v:Verb;clit:Str;obj:Str};

我们选择后者。它在解析方面更有效。

动词短语构成

词汇插入是微不足道的。

lin UseV v={v=v;clit,obj=[]}

互补假设NP公司有一个阴蒂和一个普通的客体部分。

lin完成2=nps=np.s!v2.c版英寸{v={s=v2.s;aux=v2.aux};clit=nps.clit;对象=nps.obj}

意大利语名词短语

性欲取决于具体情况

lincat NP={s:Case=>{clit,obj:Str};a:农业};

示例:

lin-she_NP=林舍{s=表格{Nom=>{clit=[];obj=“lei”};帐户=>{clit=“la”;对象=[]};日期=>{clit=“le”;对象=[]}} ;a=Ag-Fem Sg Per3}lin John_NP={s=表格{Nom|Acc=>{clit=[];obj=“Giovanni”};Dat=>{clit=[];obj=“乔瓦尼”}} ;a=Ag-Fem Sg Per3}

名词短语:或者

使用特征而不是单独的字段,

lincat NP={s:Case=>{s:Str;isClit:Bool};a:农业};

单独字段的使用效率更高,并且可以更好地扩展到多个气候位置。

确定

没有惊喜

lincat Det={s:性别=>案例=>结构;n:数字};lin DetCN det cn={s=\\c=>{obj=det.s!cn.g!c++cn.s!det.n;clit=[]};a=Ag cn.g det.n Per3} ;

建筑限定符

通常来自形容词:

lin this_Det=adjDet(mkA“questo”)Sg;lin these_Det=adjDet(mkA“questo”)Pl;oper prepCase:案例->Str=\c->案例c,共个{Dat=>“a”;_ => []} ;运算adjDet:调整->数字->决定符=\Adj,n->{s=\\g,c=>prepCase c++adj.s!g!n;n=n} ;

文章:请参阅语法Ita.gf

形容词修饰

回忆位置的固有特征

lincat AP={s:性别=>数量=>结构;isPre:Bool};lin ModCN cn ap={s=\\n=>preOrPost ap.isPre(ap.s!cn.g!n)(cn.s!n);g=库存数量} ;

显然,可以使用单独的前部件和后部件来代替。

意大利形态学

复杂但最有趣的是:

regNoun:Str->Noun=\vino->case vino of{fuo+c@(“c”|“g”)+“o”=>mkNoun vino(fuo+c+“hi”)Masc;ol+“io”=>mkNoun vino(ol+“i”)Masc;vin+“o”=>mkNoun vino(vin+“i”)Masc;cas+“a”=>mkNoun vino(cas+“e”)Fem;pan+“e”=>mkNoun vino(pan+“i”)Masc;_=>mkNoun vino vino Masc(葡萄酒大师)} ;

请参见ResIta公司了解更多详细信息。

预测,终于

放置宾语和连接词,并选择动词形式。

lin PredVP副总裁=sub=(np.s!Nom).obj;obj=vp.obj;clit=vp.clit;动词=表格{压力=>agrV vp.v np.a;性能=>agrV(auxVerb vp.v.aux)np.a++agrPart vp.v np.a}英寸{s=\\t=>sub++clit++动词!t++对象} ;

动词形式的选择

我们需要现在时态

oper agrV:动词->农业->Str=\v,a->第a种情况{Ag _ n p=>v.s!视频分辨率n p} ;

如果助词是埃塞尔

操作agrPart:动词->Agr->Str=\v,a->case v.aux,共{Avere=>v.s!VPart Masc Sg;Essere=>案例a{Ag g n _=>v.s!V零件g n}} ;

待办事项

有关核心资源语法的详细信息,请参阅ResIta公司(150 loc)和格拉玛意大利(80处)。

有一件事还没有做对:分词与宾语从句的一致性:现在它给出了io-la-ho-amato先生,而不是io la ho amata先生.

这是一个练习!

印地语/乌尔都语的发音

通常情况下,主语是主格,动词与主语一致。

然而,在完成时态中:

示例:“男孩/女孩吃苹果/面包”

主题 对象 发电机存在 完美的
马斯克 马斯克 拉德卡:塞布·卡:塔:海 ladke ne seb Ka:你:
马斯克 股骨 拉德卡:罗蒂:卡:塔:海 ladke ne roTi:Ka:yi(拉丁语):
股骨 马斯克 ladki:seb Ka:ti:海 ladki:ne seb Ka:你:
股骨 股骨 ladki:roTi:Ka:ti:hai ladki:ne roTi:Ka:yi(拉丁语):

不同时态的印地语从句

练习

1.学习命令依赖关系图,打印语法,系统逃逸!、和系统管道?.

2.写下目标语言关键句法功能的示例表,尽量包括所有可能的形式。

3.实施语法冗长的针对您的目标语言。

4.即使你不懂意大利语可以试试这个:在中添加参数或其他内容格拉玛意大利执行完成时态分词与宾格连词在性别和数量上一致的规则。用句子测试这个雷拉哈阿玛塔雷次哈马蒂(当前语法给出阿马托在这两种情况下)。

5.学习一些语言学!我最喜欢的书是理论语言学导论约翰·莱昂斯(剑桥,1968年,至少14个版本)。

在应用程序中使用资源语法库

目录

软件库:程序员与用户视图

语义语法与句法语法

语义语法示例及其实现

接口和参数化模块

自由变化

资源语法API概述

软件库

可重用函数/类型/类的集合

美国石油学会=应用程序设计员界面

示例:Haskell、C++、Java…中的映射(查找表、散列映射)。。。

类型映射查找:键->映射->val更新:key->val->Map->Map

隐藏:类型的定义地图和函数的查找更新.

软件库的优势

程序员有

可以继承改进和错误修复

语法作为软件库

作为形态学API的智能范式

mkN:(目录:Str)->N

抽象语法作为语法组合的API

预处理副总裁:NP->VP->Cl完成2:V2->NP->VP数字CN:Num->CN->NP

使用库:自然语言输出

任务:在电子邮件程序中,生成以下短语您有n条消息()

问题:避免你有一条消息

解决方案:使用库

PredVP youSg_NP(CompleV2 have_V2(NumCN two_Num(UseN(mkN“消息”)))===>您有两条消息PredVP youSg_NP(ComplV2 have_V2(NumCN one_Num(UseN(mkN“message”)))===>您有一条消息

软件本地化

将电子邮件程序改编为意大利语、芬兰语、阿拉伯语。。。

PredVP youSg_NP(CompleV2 have_V2(NumCN two_Num(UseN(mkN“消息”)))===>hai到期消息PredVP youSg_NP(CompleV2 have_V2(NumCN two_Num(UseN(mkN“viesti”)))卡克西·维埃斯蒂的辛努拉PredVP youSg_NP(CompleV2 have_V2(NumCN two_Num(UseN(mkN“risaAlat.u.”)))卡克西·维埃斯蒂的辛努拉

新语言比英语更复杂,但只是内部语言,而不是API级别的语言!

阿拉伯数字正确

(摘自Ali Dada的“GF中阿拉伯数字及其语法的实现”,ACL阿拉伯语研讨会,布拉格,2007年)

语法库的用例

语法需要非常许多的非常专业知识,以及许多对于软件库来说,这是一个很好的主题!

语法已被证明有用的一些应用程序:

两种语法学家

应用程序语法与。资源语法学家

语法学家 应用程序 资源
专业知识 应用程序域 语言学
编程技能 一般编程 GF编程
语言技能 实际使用 理论知识

我们想要一个分工.

两种语法

应用程序语法与。资源语法

语法 应用 资源
抽象语法 语义的 句法
具体语法 使用资源API 参数、表格、记录
词典 惯用、技术 只是为了测试
大小 小或大 大的

也就是说。语义语法与。句法语法.

有意义的翻译

翻译必须保留意义。

它不需要保留句法结构。

有时甚至是不可能的:

语义语法中的抽象语法是一个逻辑谓词:

趣味爱好:人物->人物->事实lin喜欢x y=x++“喜欢”++y--英语lin喜欢x y=y++“piace”++“a”++x--意大利语

翻译和资源语法

为了获得正确的语法细节,我们使用资源语法而不是字符串

lincat Person=NP;事实=Cl;lin Like x y=PredVP x(CompleV2 Like _V2 y)--英语lin Like x y=PredVP y(CompleV2 piacere_V2 x)--意大利语

从句法角度来看,我们执行转移即结构变化。

GF有编译时传输,并在运行时使用中间语言(语义抽象语法)。

领域语义

“英语语义学”,或任何其他自然语言的整体语义学,从未建立。

具有以下语义更可行碎片-自然语言中理解力强的小部分。

这种语言被称为领域语言及其语义,领域语义.

领域语义=本体论在语义Web术语中。

域语义示例

用各种形式语言表达

GF抽象语法可以用于任何这些!

示例:“Face”社区的抽象语法

社区页面上可以表达什么信息?

抽象面={标志startcat=消息;消息;人;对象;编号;乐趣有:人->号码->对象->消息;--p没有例如:人员->对象->消息;--p喜欢o您:个人;朋友,邀请:对象;一、二、百:数字;}

请注意启动标志,因为起始类别不是S公司.

呈现资源语法

实际上,资源语法的抽象语法很不方便

我们的操作与形态学中的操作相同:重载操作,命名为百万C类哪里C类是值类别。

资源定义了例如。

mkCl:NP->V2->NP->Cl=\subj,动词,obj->PredVP sub(CompleV2动词obj)mkCl:NP->V->Cl=\subj,动词->PredVP sub(UseV动词)

“脸”资源语法API的相关部分

使用这些功能(其中一些是结构词)。

功能 例子
mkCl:NP->V2->NP->Cl 约翰爱玛丽
mkNP:数字->CN->NP 五辆汽车
mkNP:数量->中国->NP 那辆车
mkNP:代词->NP 我们
mkCN:N->中国 汽车
this_Quant:数量 这个,这些
youSg_Pron:Pron (单数)
n1_Numeral,n2_Numeral:数字 一,二
n100_数字:数字 一百
有_V2:V2

英语的具体语法

如何使用库来表达消息?

混凝土FaceEng of Face=开放式SyntaxEng,ParadigmsEng in{林肯猫消息=Cl;人=NP;对象=CN;数字=数字;使p n o=mkCl p Have_V2(mkNP n o);Like p o=mkCl p Like _V2(mkNP this_Quant o);You=mkNP-youSg_Pron;好友=mkCN好友_N;邀请=mkCN Invitation_N;一=n1_Numeral;二=n2_Numeral;百=n100_数字;操作人员like_V2=mkV2“喜欢”;invitation_N=mkN“邀请”;friend_N=mkN“朋友”;}

芬兰语的具体语法

如何使用库来表达消息?

concrete FaceFin of Face=开放语法Fin,ParadigmsFin in{林肯猫消息=Cl;人=NP;对象=CN;数字=数字;使p n o=mkCl p Have_V2(mkNP n o);Like p o=mkCl p Like _V2(mkNP this_Quant o);You=mkNP-youSg_Pron;好友=mkCN好友_N;邀请=mkCN Invitation_N;一=n1_Numeral;二=n2_Numeral;百=n100_数字;操作人员like_V2=mkV2“pitää”relative;invitation_N=mkN“kutsu”;friend_N=mkN“ystävä”;}

函数和接口

英语和芬兰语:相同的组合规则,只有不同的单词!

我们能避免重复林肯猫代码?对!

新模块类型:函子,又名。不完整的参数化的模块

不完整的具体FaceI of Face=开放语法,LexFace in。。。

函子可以打开接口.

接口具有操作人员只有一个类型,没有定义的声明。

在这里,语法LexFace公司是接口。

域词典接口

语法是资源语法接口,并提供

中未给出内容词语法,但在领域词典

interface LexFace=open语法{操作人员喜欢_V2:V2;邀请编号:N;好友N:N;}

具体语法函子“FaceI”

不完整的具体FaceI of Face=开放语法,LexFace in{林肯猫消息=Cl;人=NP;对象=CN;数字=数字;使p n o=mkCl p Have_V2(mkNP n o);Like p o=mkCl p Like _V2(mkNP this_Quant o);You=mkNP-youSg_Pron;好友=mkCN好友_N;邀请=mkCN Invitation_N;一=n1_Numeral;二=n2_Numeral;百=n100_数字;}

领域词典的英语实例

定义英语领域单词

instance LexFaceEng of LexFace=打开SyntaxEng,ParadigmsEng in{操作人员like_V2=mkV2“喜欢”;invitation_N=mkN“邀请”;friend_N=mkN“朋友”;}

将所有内容放在一起:函数实例化

实例化函子人脸I通过为其接口提供实例

--#-路径=。:目前混凝土面工程面=面I(语法=SyntaxEng),(LexFace=LexFaceEng);

还要注意域搜索路径。

将语法移植到芬兰语

1.领域词汇:使用芬兰语范型和单词

instance LexFaceFin of LexFace=打开SyntaxFin,ParadigmsFin in{操作人员like_V2=mkV2(mkV“pitää”)有效;invitation_N=mkN“kutsu”;friend_N=mkN“ystävä”;}

2.函数实例化:机械改变工程翅片

--#-路径=。:目前混凝土面面鳍=面I(语法=SyntaxFin),(LexFace=LexFaceFin);

领域语法模块:“Face”社区

1.抽象语法,面对

2.参数化的具体语法:人脸I

3.领域词典接口:LexFace公司

4.对于每种语言L(左):域词典实例LexFace公司L(左)

5.对于每种语言L(左):具体语法实例化面对L(左)

模块依赖关系图

红色=待办事项,橙色=待办(琐碎),蓝色=待办事务(一次),绿色=库

将语法移植到意大利语

1.领域词汇:使用意大利语范例和单词

instance LexFaceIta of LexFace=打开语法Ita,ParadigmsIta in{操作人员like _V2=mkV2(mkV(piacere_64“piacere”)日期;invitation_N=mkN“邀请”;friend_N=mkN“朋友”;}

2.函数实例化:限制继承,不包括喜欢

混凝土面Ita of Face=FaceI-[Like](语法=SyntaxIta),(LexFace=LexFaceIta)**在中打开SyntaxIta{lin喜欢p o=mkCl(mkNP this_Quant o)类似于V2 p;}

自由变化

可能有许多的表达给定语义结构的方式。

这可以用变体操作人员|.

趣味购物券:城市->城市->请求lin购买票x y=((“我想要”++((“买”|[])++(“票”)|“去”))|((“你能”|[])++“给我”++“一张票”)|[]) ++“从”++x++“到”++y

这些变体当然也可以是资源语法表达式。

资源语法API概述

有关完整故事,请参阅资源语法概要在里面

语法框架.org/lib/doc/synopsis.html

主要部门:

主要类别及其依赖关系

复杂短语的类别

类别 说明 例子
文本 语序 约翰走路吗?对。
乌特 言语 约翰走路吗
Imp公司 命令 不要走路
S公司 衰老(固定时态) 约翰不愿走路
质量体系 疑问句 没有走路的人
子句(可变时态) 约翰走路
QCl公司 疑问句 不会走路的人
副总裁 动词短语 爱她
AP公司 形容词短语 非常年轻
中国 常用名词短语 年轻人
Adv公司 状语短语 在房子里

构建谓词的词汇类别

说明 完成 例子
A类 一位形容词 - 聪明的
A2级 两位形容词 NP公司 已婚的(对她来说)
Adv公司 副词 - 在这里
N个 普通名词 - 男人
氮气 关系名词 NP公司 朋友(约翰的)
NP公司 名词短语 - 老板
V(V) 一位动词 - 睡觉
第2版 双位动词 NP公司 ()
第3版 三位动词 NP公司,NP公司 显示(对我来说)
VS公司 句子复合动词 S公司 (我在跑步)
VV公司 动词补语动词 副总裁 希望(运行)

用于构建谓词子句的函数

有趣 类型 例子
mkCl公司 NP->V->Cl 约翰走路
mkCl公司 NP->V2->NP->Cl 约翰爱她
mkCl公司 NP->V3->NP->NP->氯 约翰把它寄给了她
mkCl公司 NP->VV->VP->Cl 约翰想走路
mkCl公司 NP->VS->S->Cl 约翰说这很好
mkCl公司 NP->A->Cl 约翰老了
mkCl公司 NP->A->NP->Cl 约翰比玛丽大
mkCl公司 NP->A2->NP->Cl 约翰和她结婚了
mkCl公司 NP->AP->Cl 约翰很老了
mkCl公司 NP->N->Cl 约翰是个男人
mkCl公司 NP->CN->Cl 约翰是个老人
mkCl公司 NP->NP->Cl 约翰就是那个人
mkCl公司 NP->高级->氯 约翰来了

名词短语和常用名词

有趣 类型 例子
mkNP公司 数量->中国->NP 这个男人
mkNP公司 数字->CN->NP 五个人
mkNP公司 PN->NP 约翰
mkNP公司 前->NP 我们
mkNP公司 数量->数量->CN->NP 这(五)个人
mkCN公司 N->中国 男人
mkCN公司 A->N->中国 老人
mkCN公司 亚太地区->中国->中国 非常老的中国人
mk编号 数字->数字
n100_数字 数字 一百
plNum(电话号码) 号码 (复数)

问题和疑问句

有趣 类型 例子
mkQCl公司 Cl->QCl 约翰走路吗
mkQCl公司 IP->V->QCl 谁会走路
mkQCl公司 IP->V2->NP->QCl 谁爱她
mkQCl公司 IP->NP->V2->QCl 她爱谁
mkQCl公司 IP->AP->QCl 谁老了
mkQCl公司 IP->NP->QCl 谁是老板
mkQCl公司 IP->高级->QCl 谁在这里
mkQCl公司 IAdv->Cl->QCl 约翰走在哪里
mkIP公司 中国->IP 哪辆车
谁(_IP) IP(IP)
为什么是IAdv IAdv公司 为什么?
其中_高级 IAdv公司 哪里

句子的构成、时态和极性

有趣 类型 例子
mkS公司 氯->硫 他走路
mkS公司 (时态)->(Ant)->(Pol)->Cl->S 他就不会走路了
mkQS公司 QCl->QS 他走路吗
mkQS公司 (时态)->(Ant)->(Pol)->QCl->QS 他不会走路吗
功能 类型 例子
条件时态 时态 (他会走路)
未来感 时态 (他会走路)
过去时态 时态 (他走路了)
present时态 时态 (他走路)[默认]
前蚂蚁 蚂蚁 (他走了)
阴性Pol 波尔 (他不会走路)

言语和命令

有趣 类型 例子
mkUtt公司 Cl->Utt(氯->Utt) 他走路
mkUtt公司 S->Utt公司 他没有走路
mkUtt公司 QS->Utt公司 没有走路的人
mkUtt公司 Imp->Utt(输入->输出) 步行
mkImp公司 V->增强 步行
mkImp公司 V2->NP->Imp 找到它
mkImp公司 AP->杂质 勇敢

更多

文本:谁会走路?厕所。在哪里?给!

关系子句:拥有一头驴的人

副词:在房子里

次级连接:如果一个人拥有一头驴

协调:约翰和玛丽是英国人还是美国人

练习

1.编译并提供最新版本的资源语法库。编译依据制作在里面GF/库/src。通过设置使其可用GF_LIB_PATHGF/库.

2.编译和测试语法面/面L(左)(在课程源文件中提供)。

3.写一个具体的语法面对对于其他一些资源语言,通过添加域词典和函子实例化。

4.将函数添加到面对并至少为某些语言编写具体的语法。

5.设计你自己的领域语法,并为一些语言实现它。

开发GF资源语法

目录

模块结构

统计

如何开始构建一种新语言

如何测试资源语法

任务

主要模块结构

实体=API,虚线=内部,椭圆=抽象+具体,矩形=资源/实例,菱形=接口,绿色=给定,蓝色=机械,红色=待办

分工

由资源语法师编写:

已经机械给出或推导:

模块的角色:库API

语法:句法组合和结构词

范例:形态学范式

尝试:(几乎)所有东西都放在一起

建造师:仅语法组合

不规则:不规则屈折词(主要是动词)

模块的角色:顶级语法

冗长的:常见语法和词汇

全部:通用语法和依赖语言的扩展

语法:常见语法

结构:结构词词典

词典:测试300个内容词的词典

:通用类型系统

通用:语言常用的具体语法

模块的角色:短语类别

模块 范围 价值类别
形容词 形容词 AP公司
副词 副词片语 AdN、Adv
汇合点 协调 高级、AP、NP、RS、S
白痴 习惯用语 Cl、QCl、副总裁、Utt
名词 名词短语和名词 卡片、中国大陆、德国、NP、数字、订单
数字 基数和序数 数字,数字
短语 超句子短语 PConj、Phr、Utt、Voc
问题 疑问句和疑问句 IAdv、IComp、IDet、IP、QCl
相对 相对。从句和代词 RCl、RP
句子 从句和句子 Cl、Imp、QS、RS、S、SC、S闪存
文本 多短语文本 文本
动词 动词短语 公司、副总裁、副总裁

类型纪律和一致性

生产商:每个短语类别模块都是上一张幻灯片中列出的价值类别的生产者。

消费者:所有模块都可以使用任何类别作为参数类型。

合同:模块定义消费者和生产者通用的类型系统。

不同的语法学家可以安全地为不同的制作人工作。

这甚至适用于类别的相互依赖:

句子。UseCl:Temp->Pol->Cl->S——S使用Cl句子。PredVP:VP->NP->Cl——使用VP动词。CompleVS:VS->S->VP——使用S

辅助模块

资源库提供的模块:

资源模块由语法学家编写:

依赖关系

大多数短语类别模块:

动词的具体动词=CatGer**打开ResGer,前奏。。。

连接:

连接的具体连接Ger=CatGer**开放协调,ResGer,前奏曲在。。。

词汇:

Lexicon的具体LexiconGer=CatGer**打开ParadigmsGer,在中打开IrregGer{

函数式编程风格

黄金法则:每当你发现自己通过复制和粘贴进行编程时,就写一个函数!

资源语法库中的函数

在语系中使用

结构:

示例:DiffRomance

当然,单词和词法是不同的,我们还没有尝试过形式化。

在语法上,只有八个参数从根本上起了作用:

与文章融合的介词(Fre,Spa判定元件,; Ita也反对的论点,数据采集,在里面,).

param Prepos;

就助词而言,存在哪些类型的动词。(法语,意大利语阿维尔,存在,存在和refl;仅限水疗中心哈伯和ref)。

参数VType;

派生词,如果/当分词与主语一致时。(频率elle est党,意大利莱耶·帕提塔,水疗不)

oper-partAgr:VType->VPAgr;

分词是否同意前面的clitic。(频率我爱你,水疗悠悠乐和远景)

运营vpAgrClit:农业->VPAgr;

介词是否与连词(Fre)重复第三天晚上和第四天晚上,意大利拉索玛di 3 e 4).

操作连接案例:NPForm->NPForm;

不定式和阴蒂是如何相对放置的(Fre拉沃瓦,意大利维德拉). 这个布尔用于指示是否有阴蒂。

操作clitInf:Bool->Str->Str->Str;

将代词变元表示为修饰语和/或普通补语。退换商品真的如果有阴蒂。

操作pronArg:数字->人->CAgr->CAgr->Str*Str*Bool;

表达命令(用阴蒂等)。

操作mkImperative:Bool->Person->VPC->{s:Polarity=>AAgr=>Str};

函子的正反

+智力满足:语言概括

+代码可以共享:语法代码中,罗曼斯语占75%,斯堪的纳维亚语占85%

+bug修复和维护通常也可以共享

+添加同一家族的新语言非常容易

-很难开始正确的抽象

-新语言可能需要扩展接口

工作流:不要从functor开始,而是通常使用一种语言,并将其重构为接口、functor和实例。

关于新语言函子的建议

浪漫:葡萄牙语可能使用functor,罗马尼亚语可能独立

日耳曼语:荷兰语可能来自德语,冰岛可能独立

斯拉夫语:保加利亚人和俄罗斯人不是模仿者,可能是西斯拉夫人(捷克人、斯洛伐克人、波兰人)和南斯拉夫(保加利亚人)的模仿者

芬诺-美国:爱沙尼亚语可能是芬兰语的仿词

印地语:印地语和乌尔都语肯定是通过仿函数

闪米特语:阿拉伯语、希伯来语、马耳他语可能独立

工作量统计,完成的语言

语言 语法 吗啡 法律 全部的 起动
常见的 413 - - 413 2 2001
摘要 729 - 468 1197 24 2001
保加利亚语 1200 2329 502 4031 2008
英语 1025 772 506 2303 6 2001
芬兰语 1471 1490 703 3664 6 2003
德国的 1337 604 492 2433 6 2002
俄语 1492 3668 534 5694 18 2002
浪漫 1346 - - 1346 10 2003
加泰罗尼亚语 521 *9000 518 *10039 4 2006
法语 468 1789 514 2771 6 2002
意大利人 423 *7423 500 *8346 2003
西班牙的 417 *6549 516 *7482 2004
斯堪的纳维亚语 1293 - - 1293 4 2005
丹麦语 262 683 486 1431 2 2005
挪威语 281 676 488 1445 2 2005
瑞典的 280 717 491 1488 4 2001
全部的 12545 *36700 6718 *55963 103 2001

2009年4月的源代码行,粗略估计人月数。*=生成的代码。

如何开始构建语言,例如马拉地语

1.创建目录GF/lib/src/马拉地

2.查看ISO 639-3语言代码:3月

3.从最接近的相关语言复制文件,例如。印度语

4.重命名文件马拉地语/*Hin.gf马拉地/*马拉地

5.变更进口Hin公司要导入的模块3月模块

6.注释掉中间的每一行收割台 {和决赛}

7.现在您可以导入(空)语法:i马拉地语/LangMar.gf

继续使用语言的建议顺序

1ResMar公司:名词所需的参数类型

2CatMar公司:林卡特N

三。范例Mar:一些常规名词范例

4LexiconMar公司:新范式涵盖的一些单词

5.(1.-4.)用于V(V),也许用现在时态

6ResMar公司:所需的参数类型Cl、CN、Det、NP、Quant、VP

7CatMar公司:lincat Cl、CN、Det、NP、Quant、VP

8名词马尔:林DetCN,DetQuant

9动词Mar:使用中V

10判刑标志:lin预处理副总裁

非ASCII语言的字符编码

GF内部:32位unicode

生成的文件(.gfo型,.pgf(磅/平方英尺)):UTF-8

源文件:任何您想要的,但如果不是isolatin-1,则使用标记。

UTF-8和cp1251(西里尔文)可以在字符串中使用,但不能在标识符中使用。模块必须包含

标志编码=utf8;--OR编码=cp1251

音译可用于许多字母(请参见帮助unicode表(_T)).

使用音译

这是你必须添加的内容GF/src/GF/文本/音译.hs

音译希伯来语::音译transHebrew=mk音译allTrans-allCodes,其中allTrans=单词$“A b g d h w z h T y K K l M M N”++“n S O P P Z.Z q r S t----”++“w2 w3 y2 g1 g2”所有代码=[0x05d0..0x05f4]

还编辑中的几个位置GF/src/GF/Command/Commands.hs.

您可以稍后将文件转换为UTF-8(请参见帮助put_string).

沿途的诊断方法

确保你有一个compilable朗玛任何时候!

使用GF命令pg-缺失检查缺少哪些功能。

使用GF命令gr-cat=C|l-表格测试C类

使用树库进行回归测试

建立和维护树银行:一组树及其线性化:

1.创建文件测试树只有树,一棵接一棵。

2.将每棵树线性化为所有形式,可能使用英语进行比较。

>i英语/LangEng.gf>i马拉地语/LangMar.gf>rf-lines-tree-file=测试树|l-all-treebank | wf-file=test.treebank

3.创建金本位制 金树银行测试树库通过手动修正马拉地线性化。

4.与Unix命令进行比较差异测试.treebank gold.treebanks

5.每次更改具体语法后,重新运行(2.)和(4.);在每个新实现的功能之后扩展树集和黄金标准。

来源

A类好的语法书

A类好的词典

维基百科关于语言的文章

谷歌作为“金标准”:是吗芝麻菜巧克力?

谷歌翻译建议(但不可信!)

编译库

当前的开发库源位于GF/库/src.

使用制作在此目录中编译库。

使用runghc生成lang-api-langs=Mar只编译语言3月.

任务:良好的开端

1.为目标语言构建一个目录和一组文件。

2.实现一些类别、形态范式和语法规则。

3.给出规则中至少有100个条目词典.

4.发送给我们:您的源文件和一个包含100棵树的树库,并用英语和您的目标语言进行线性化。这些线性化应该是正确的,并且直接从语法实现中生成。