Grammatical Framework (GF) is a programming language for writing grammars of natural languages. GF is capable of parsing and generating texts in several languages simultaneously while working from a language-independent representation of meaning. Grammars written in GF can be compiled into a platform independent format and then used from different programming languages including C and Java, C#, Python and Haskell. A companion to GF is the GF Resource Grammar Library, a reusable library for dealing with the morphology and syntax of a growing number of natural languages. Both GF itself and the GF Resource Grammar Library are open-source. Typologically, GF is a functional programming language. Mathematically, it is a type-theoretic formal system (a logical framework to be precise) based on Martin-Löf's intuitionistic type theory, with additional judgments tailored specifically to the domain of linguistics.
Language features a static type system, to detect potential programming errors functional programming for powerful abstractions support for writing libraries, to be used on other grammars tools for Information extraction, to convert linguistic resources into GF
Tutorial Goal: write a multilingual grammar for expressing statements about John and Mary loving each other.
Abstract and concrete modules In GF, grammars are divided to two module types:
an abstract module, containing judgement forms cat and fun. cat or category declarations list categories i.e. all the possible types of trees there can be. fun or function declarations state functions and their types, these must be implemented by concrete modules (see below). one or more concrete modules, containing judgement forms lincat and lin. lincat or linearization type definitions, says what type of objects linearization produces for each category listed in cat. lin or linearization rules implement functions declared in fun. They say how trees are linearized. Consider the following: Abstract syntax
Concrete syntax: English
Notice: Str (token list or "string") as the only linearization type.
Making a grammar multilingual A single abstract syntax may be applied to many concrete syntaxes, in our case one for each new natural language we wish to add. The same system of trees can be given:
different words different word orders different linearization types Concrete syntax: French
Translation and multilingual generation We can now use our grammar to translate phrases between French and English. The following commands can be executed in the GF interactive shell. Import many grammars with the same abstract syntax
Translation: pipe linearization to parsing
Multilingual generation: linearize into all languages
Parameters, tables Latin has cases: nominative for subject, accusative for object.
Ioannes Mariam amat "John-Nom loves Mary-Acc" Maria Ioannem amat "Mary-Nom loves John-Acc" We use a parameter type for case (just 2 of Latin's 6 cases). The linearization type of NP is a table type: from Case to Str. The linearization of John is an inflection table. When using an NP, we select (!) the appropriate case from the table. Concrete syntax: Latin
Discontinuous constituents, records In Dutch, the verb heeft lief is a discontinuous constituent. The linearization type of V2 is a record type with two fields. The linearization of Love is a record. The values of fields are picked by projection (.) Concrete syntax: Dutch
Variable and inherent features, agreement, Unicode support For Hebrew, NP has gender as its inherent feature – a field in the record. VP has gender as its variable feature – an argument of a table. In predication, the VP receives the gender of the NP. Concrete syntax: Hebrew
Visualizing parse trees GF has inbuilt functions which can be used for visualizing parse trees and word alignments. The following commands will generate parse trees for the given phrases and open the produced PNG image using the system's eog command.
Generating word alignment In languages L1 and L2: link every word with its smallest spanning subtree. Delete the intervening tree, combining links directly from L1 to L2. In general, this gives phrase alignment. Links can be crossing, phrases can be discontinuous. The align_words command follows a similar syntax:
Resource Grammar Library In natural language applications, libraries are a way to cope with thousands of details involved in syntax, lexicon, and inflection. The GF Resource Grammar Library is the standard library for Grammatical Framework. It covers the morphology and basic syntax for an increasing number of languages, currently including Afrikaans, Amharic (partial), Arabic (partial), Basque (partial), Bulgarian, Catalan, Chinese, Czech (partial), Danish, Dutch, English, Estonian, Finnish, French, German, Greek ancient (partial), Greek modern, Hebrew (fragments), Hindi, Hungarian (partial), Interlingua, Italian, Japanese, Korean (partial), Latin (partial), Latvian, Maltese, Mongolian, Nepali, Norwegian bokmål, Norwegian nynorsk, Persian, Polish, Punjabi, Romanian, Russian, Sindhi, Slovak (partial), Slovene (partial), Somali (partial), Spanish, Swahili (fragments), Swedish, Thai, Turkish (fragments), and Urdu. In addition, 14 languages have WordNet lexicon and large-scale parsing extensions. A full API documentation of the library can be found at the RGL Synopsis page. The RGL status document gives the languages currently available in the GF Resource Grammar Library, including their maturity.
Uses of GF GF was first created in 1998 at Xerox Research Centre Europe, Grenoble, in the project Multilingual Document Authoring. At Xerox, it was used for prototypes including a restaurant phrase book, a database query system, a formalization of an alarm system instructions with translations to 5 languages, and an authoring system for medical drug descriptions. Later projects using GF and involving third parties include:
… excerpt ends here. Continue reading the full article.




