From e7088ee93a36f755c693fe3263ed97b2e4876310 Mon Sep 17 00:00:00 2001 From: aarne Date: Sat, 28 Mar 2009 13:20:47 +0000 Subject: [PATCH] doc for next-lib; adjustments in summerschool-flyer --- ...hool-folder.pdf => summerschool-flyer.pdf} | Bin 2777116 -> 2785805 bytes ...hool-folder.tex => summerschool-flyer.tex} | 48 +- next-lib/doc/German.dot | 107 + next-lib/doc/German.png | Bin 0 -> 21000 bytes next-lib/doc/Grammar.dot | 75 + next-lib/doc/Grammar.png | Bin 0 -> 6517 bytes next-lib/doc/Lang.dot | 68 + next-lib/doc/Lang.png | Bin 0 -> 7676 bytes next-lib/doc/Makefile | 16 + next-lib/doc/MkSynopsis.hs | 244 + next-lib/doc/Resource-HOWTO.txt | 787 ++ next-lib/doc/Syntax.dot | 111 + next-lib/doc/Syntax.png | Bin 0 -> 14804 bytes next-lib/doc/categories-imagemap.html | 53 + next-lib/doc/categories-intro.txt | 19 + next-lib/doc/categories.dot | 149 + next-lib/doc/categories.png | Bin 0 -> 123025 bytes next-lib/doc/editor.png | Bin 0 -> 20552 bytes next-lib/doc/index.txt | 267 + next-lib/doc/official.txt | 581 ++ next-lib/doc/paradigms.txt | 48 + next-lib/doc/synopsis-browse.txt | 34 + next-lib/doc/synopsis-example.txt | 51 + next-lib/doc/synopsis-intro.txt | 26 + next-lib/doc/synopsis.html | 6693 +++++++++++++++++ next-lib/doc/synopsis.txt | 1703 +++++ next-lib/src/api/TryBul.gf | 2 +- next-lib/src/api/TryCat.gf | 2 +- next-lib/src/api/TryEng.gf | 2 +- next-lib/src/api/TrySwe.gf | 4 +- next-lib/src/french/StructuralFre.gf | 4 +- 31 files changed, 11068 insertions(+), 26 deletions(-) rename doc/{summerschool-folder.pdf => summerschool-flyer.pdf} (98%) rename doc/{summerschool-folder.tex => summerschool-flyer.tex} (54%) create mode 100644 next-lib/doc/German.dot create mode 100644 next-lib/doc/German.png create mode 100644 next-lib/doc/Grammar.dot create mode 100644 next-lib/doc/Grammar.png create mode 100644 next-lib/doc/Lang.dot create mode 100644 next-lib/doc/Lang.png create mode 100644 next-lib/doc/Makefile create mode 100644 next-lib/doc/MkSynopsis.hs create mode 100644 next-lib/doc/Resource-HOWTO.txt create mode 100644 next-lib/doc/Syntax.dot create mode 100644 next-lib/doc/Syntax.png create mode 100644 next-lib/doc/categories-imagemap.html create mode 100644 next-lib/doc/categories-intro.txt create mode 100644 next-lib/doc/categories.dot create mode 100644 next-lib/doc/categories.png create mode 100644 next-lib/doc/editor.png create mode 100644 next-lib/doc/index.txt create mode 100644 next-lib/doc/official.txt create mode 100644 next-lib/doc/paradigms.txt create mode 100644 next-lib/doc/synopsis-browse.txt create mode 100644 next-lib/doc/synopsis-example.txt create mode 100644 next-lib/doc/synopsis-intro.txt create mode 100644 next-lib/doc/synopsis.html create mode 100644 next-lib/doc/synopsis.txt diff --git a/doc/summerschool-folder.pdf b/doc/summerschool-flyer.pdf similarity index 98% rename from doc/summerschool-folder.pdf rename to doc/summerschool-flyer.pdf index 548fecb6426869c7e65fa7a2c084ed45a95d908e..60a44c149c70cf2ed2b51a19b80b912345095db8 100644 GIT binary patch delta 32341 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 Wn#N^hZf<5^Y0jmp%Hrzp#svU98oGu6 diff --git a/doc/summerschool-folder.tex b/doc/summerschool-flyer.tex similarity index 54% rename from doc/summerschool-folder.tex rename to doc/summerschool-flyer.tex index c6ed12841..86d72dc41 100644 --- a/doc/summerschool-folder.tex +++ b/doc/summerschool-flyer.tex @@ -3,8 +3,11 @@ \pagestyle{empty} \usepackage[urlcolor=blue,colorlinks=true]{hyperref} +\setlength{\parindent}{0mm} +\setlength{\parskip}{2mm} + \setlength{\oddsidemargin}{0mm} -\setlength{\evensidemargin}{-2mm} +\setlength{\evensidemargin}{0mm} \setlength{\topmargin}{-12mm} \setlength{\textheight}{240mm} \setlength{\textwidth}{158mm} @@ -32,7 +35,7 @@ Gothenburg, 17-28 August 2009 \newpage \begin{itemize} -\item Do you like programming? +\item Do you like programming challenges? \item Are you interested in how your language really works? \item Would you like to try and build a computational grammar for your language, and make it available as a part of an international open-source @@ -42,44 +45,51 @@ Gothenburg, 17-28 August 2009 Then you should consider attending the GF Resource Grammar Summer School in Gothenburg on 17-28 August 2009. -The GF Resource Grammar Library is an open-source computational grammar resource -that currently covers 12 languages. The Summer School is a part of a -collaborative effort to extend the library to all of the 23 official -EU languages. Also other languages chosen by the participants are welcome. +The GF Resource Grammar Library is an open-source computational grammar +resource that currently covers 12 languages. It has been created in +a collaborative effort using the GF (Grammatical Framework) grammar formalism. +The Summer School aims to boost the extension of the library to new languages. -The missing EU languages are: -Czech, Dutch, Estonian, Greek, Hungarian, Irish, Latvian, Lithuanian, -Maltese, Portuguese, Slovak, and Slovenian. There is also more work to +Particularly in focus are the missing 12 of the 23 official languages of the +European Union: \textit{Czech, Dutch, +Estonian, Greek, Hungarian, Irish, Latvian, Lithuanian, +Maltese, Portuguese, Slovak, and Slovenian}. There is also more work to be done on Polish and Romanian. +Any other languages chosen by the participants are also welcome. +Good knowledge of the language is essential, but you don't need to be a +native speaker. The linguistic coverage of the library includes the inflectional morphology -and basic syntax of each language. It can be used in GF applications -and also ported to other formats. It can also be used for building other -linguistic resources, such as morphological lexica and parsers. +and basic syntax of each language. It can be used for parsing, +generation, translation, multilingual web pages, +speech recognition, dialogue systems, language teaching, morphological +analysis, software localization, and lots of other things. +Grammars written in GF can be converted to many different formats. The library is licensed under LGPL. In the summer school, each language will be implemented by one or two students working together. A morphology implementation will be credited -as a Chalmers course worth 7.5 ETCS points; adding a syntax implementation +as a Chalmers University +course worth 7.5 ETCS points; adding a syntax implementation will be worth more. The estimated total work load is 1-2 months for the morphology, and 3-6 months for the whole grammar. Participation in the summer school is free. -Registration is done via the courses's Google group, +Registration is via the courses's Google group, \begin{verbatim} http://groups.google.com/group/gf-resource-school-2009/ \end{verbatim} -The registration deadline is 15 June 2009. +The registration deadline is 15 June 2009. An on-line course on GF (recommended, +but not compulsory) starts on 20 April. Some travel grants will be available. They are distributed on the basis of a -GF programming contest in April and May. +GF programming contest in May. -For more information, see the Google Group above, as well as the -Summer School web page, +For more information, see the Google Group and the Summer School web page, \begin{verbatim} - http://digitalgrammars.com/gf/doc/gf-summerschool.html + http://digitalgrammars.com/gf/summerschool.html \end{verbatim} % LaTeX2e code generated by txt2tags 2.4 (http://txt2tags.sf.net) diff --git a/next-lib/doc/German.dot b/next-lib/doc/German.dot new file mode 100644 index 000000000..e17ca1484 --- /dev/null +++ b/next-lib/doc/German.dot @@ -0,0 +1,107 @@ +digraph { + +size = "12,12" ; + +LangGer [style = "dashed", shape = "box", URL = "LangGer.gf"]; +LangGer -> NounGer [style = "solid"]; +LangGer -> VerbGer [style = "solid"]; +LangGer -> ConjunctionGer [style = "solid"]; +LangGer -> StructuralGer [style = "solid"]; +LangGer -> LexiconGer [style = "solid"]; +LangGer -> Lang [arrowhead = "empty", style = "dashed"]; + +Lang [style = "solid", shape = "ellipse", URL = "Lang.gf"]; +Lang -> Noun [style = "solid"]; +Lang -> Verb [style = "solid"]; +Lang -> Conjunction [style = "solid"]; +Lang -> Structural [style = "solid"]; +Lang -> Lexicon [style = "solid"]; + +NounGer [style = "dashed", shape = "box", URL = "NounGer.gf"]; +NounGer -> CatGer [style = "solid"]; +NounGer -> ResGer [style = "dotted"]; +NounGer -> Prelude [style = "dotted"]; +NounGer -> Noun [arrowhead = "empty", style = "dashed"]; + +Noun [style = "solid", shape = "ellipse", URL = "Noun.gf"]; +Noun -> Cat [style = "solid"]; + +VerbGer [style = "dashed", shape = "box", URL = "VerbGer.gf"]; +VerbGer -> CatGer [style = "solid"]; +VerbGer -> Prelude [style = "dotted"]; +VerbGer -> ResGer [style = "dotted"]; +VerbGer -> Verb [arrowhead = "empty", style = "dashed"]; + +Verb [style = "solid", shape = "ellipse", URL = "Verb.gf"]; +Verb -> Cat [style = "solid"]; + +ConjunctionGer [style = "dashed", shape = "box", URL = "ConjunctionGer.gf"]; +ConjunctionGer -> CatGer [style = "solid"]; +ConjunctionGer -> ResGer [style = "dotted"]; +ConjunctionGer -> Coordination [style = "dotted"]; +ConjunctionGer -> Prelude [style = "dotted"]; +ConjunctionGer -> Conjunction [arrowhead = "empty", style = "dashed"]; + +Conjunction [style = "solid", shape = "ellipse", URL = "Conjunction.gf"]; +Conjunction -> Cat [style = "solid"]; + +Coordination [style = "dashed", shape = "ellipse", URL = "Coordination.gf"]; +Coordination -> Prelude [style = "dotted"]; + +StructuralGer [style = "dashed", shape = "box", URL = "StructuralGer.gf"]; +StructuralGer -> CatGer [style = "solid"]; +StructuralGer -> MorphoGer [style = "dotted"]; +StructuralGer -> Prelude [style = "dotted"]; +StructuralGer -> Structural [arrowhead = "empty", style = "dashed"]; + +Structural [style = "solid", shape = "ellipse", URL = "Structural.gf"]; +Structural -> Cat [style = "solid"]; + +LexiconGer [style = "dashed", shape = "box", URL = "LexiconGer.gf"]; +LexiconGer -> CatGer [style = "solid"]; +LexiconGer -> Prelude [style = "dotted"]; +LexiconGer -> ParadigmsGer [style = "dotted"]; +LexiconGer -> Lexicon [arrowhead = "empty", style = "dashed"]; + +Lexicon [style = "solid", shape = "ellipse", URL = "Lexicon.gf"]; +Lexicon -> Cat [style = "solid"]; + +ParadigmsGer [style = "dashed", shape = "ellipse", URL = "ParadigmsGer.gf"]; +ParadigmsGer -> Predef [style = "dotted"]; +ParadigmsGer -> Prelude [style = "dotted"]; +ParadigmsGer -> MorphoGer [style = "dotted"]; +ParadigmsGer -> CatGer [style = "dotted"]; + +CatGer [style = "dashed", shape = "box", URL = "CatGer.gf"]; +CatGer -> CommonX [style = "solid"]; +CatGer -> ResGer [style = "dotted"]; +CatGer -> Prelude [style = "dotted"]; +CatGer -> Cat [arrowhead = "empty", style = "dashed"]; + +Cat [style = "solid", shape = "ellipse", URL = "Cat.gf"]; +Cat -> Common [style = "solid"]; + +CommonX [style = "dashed", shape = "box", URL = "CommonX.gf"]; +CommonX -> ParamX [style = "dotted"]; +CommonX -> Common [arrowhead = "empty", style = "dashed"]; + +Common [style = "solid", shape = "ellipse", URL = "Common.gf"]; + +MorphoGer [style = "dashed", shape = "ellipse", URL = "MorphoGer.gf"]; +MorphoGer -> ResGer [style = "solid"]; +MorphoGer -> Prelude [style = "dotted"]; +MorphoGer -> Predef [style = "dotted"]; + +ResGer [style = "dashed", shape = "ellipse", URL = "ResGer.gf"]; +ResGer -> ParamX [style = "solid"]; +ResGer -> Prelude [style = "dotted"]; + +ParamX [style = "dashed", shape = "ellipse", URL = "ParamX.gf"]; +ParamX -> Prelude [style = "dotted"]; + +Prelude [style = "dashed", shape = "ellipse", URL = "Prelude.gf"]; +Prelude -> Predef [style = "dotted"]; + +Predef [style = "dashed", shape = "ellipse", URL = "Predef.gf"]; + +} diff --git a/next-lib/doc/German.png b/next-lib/doc/German.png new file mode 100644 index 0000000000000000000000000000000000000000..7c6303897a4b886ce47b8ee35d40ba63b2ec041e GIT binary patch literal 21000 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 WxMd`}a~%T%1B0ilpUXO@geCxkR7a-( literal 0 HcmV?d00001 diff --git a/next-lib/doc/Grammar.dot b/next-lib/doc/Grammar.dot new file mode 100644 index 000000000..cb2998eb3 --- /dev/null +++ b/next-lib/doc/Grammar.dot @@ -0,0 +1,75 @@ +digraph { + +size = "12,8" ; + +Lang [style = "solid", shape = "ellipse", URL = "Lang.gf"]; + +Lang -> Grammar [style = "solid"]; +Lang -> Lexicon [style = "solid"]; + +Grammar [style = "solid", shape = "ellipse", URL = "Lang.gf"]; + + +Grammar -> Noun [style = "solid"]; +Grammar -> Verb [style = "solid"]; +Grammar -> Adjective [style = "solid"]; +Grammar -> Adverb [style = "solid"]; +Grammar -> Numeral [style = "solid"]; +Grammar -> Sentence [style = "solid"]; +Grammar -> Question [style = "solid"]; +Grammar -> Relative [style = "solid"]; +Grammar -> Conjunction [style = "solid"]; +Grammar -> Phrase [style = "solid"]; +Grammar -> Text [style = "solid"]; +Grammar -> Idiom [style = "solid"]; +Grammar -> Structural [style = "solid"]; + + +Noun [style = "solid", shape = "ellipse", URL = "Noun.gf"]; +Noun -> Cat [style = "solid"]; + +Verb [style = "solid", shape = "ellipse", URL = "Verb.gf"]; +Verb -> Cat [style = "solid"]; + +Adjective [style = "solid", shape = "ellipse", URL = "Adjective.gf"]; +Adjective -> Cat [style = "solid"]; + +Adverb [style = "solid", shape = "ellipse", URL = "Adverb.gf"]; +Adverb -> Cat [style = "solid"]; + +Numeral [style = "solid", shape = "ellipse", URL = "Numeral.gf"]; +Numeral -> Cat [style = "solid"]; + +Sentence [style = "solid", shape = "ellipse", URL = "Sentence.gf"]; +Sentence -> Cat [style = "solid"]; + +Question [style = "solid", shape = "ellipse", URL = "Question.gf"]; +Question -> Cat [style = "solid"]; + +Relative [style = "solid", shape = "ellipse", URL = "Relative.gf"]; +Relative -> Cat [style = "solid"]; + +Conjunction [style = "solid", shape = "ellipse", URL = "Conjunction.gf"]; +Conjunction -> Cat [style = "solid"]; + +Phrase [style = "solid", shape = "ellipse", URL = "Phrase.gf"]; +Phrase -> Cat [style = "solid"]; + +Text [style = "solid", shape = "ellipse", URL = "Phrase.gf"]; +Text -> Cat [style = "solid"]; + +Idiom [style = "solid", shape = "ellipse", URL = "Phrase.gf"]; +Idiom -> Cat [style = "solid"]; + +Structural [style = "solid", shape = "ellipse", URL = "Structural.gf"]; +Structural -> Cat [style = "solid"]; + +Lexicon [style = "solid", shape = "ellipse", URL = "Lexicon.gf"]; +Lexicon -> Cat [style = "solid"]; + +Cat [style = "solid", shape = "ellipse", URL = "Cat.gf"]; +Cat -> Common [style = "solid"]; + +Common [style = "solid", shape = "ellipse", URL = "Tense.gf"]; + +} diff --git a/next-lib/doc/Grammar.png b/next-lib/doc/Grammar.png new file mode 100644 index 0000000000000000000000000000000000000000..1c05474b21d3befc02077cf48c539dc369fedc9c GIT binary patch literal 6517 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 literal 0 HcmV?d00001 diff --git a/next-lib/doc/Lang.dot b/next-lib/doc/Lang.dot new file mode 100644 index 000000000..7de26e74c --- /dev/null +++ b/next-lib/doc/Lang.dot @@ -0,0 +1,68 @@ +digraph { + +size = "12,8" ; + +Lang [style = "solid", shape = "ellipse", URL = "Lang.gf"]; +Lang -> Noun [style = "solid"]; +Lang -> Verb [style = "solid"]; +Lang -> Adjective [style = "solid"]; +Lang -> Adverb [style = "solid"]; +Lang -> Numeral [style = "solid"]; +Lang -> Sentence [style = "solid"]; +Lang -> Question [style = "solid"]; +Lang -> Relative [style = "solid"]; +Lang -> Conjunction [style = "solid"]; +Lang -> Phrase [style = "solid"]; +Lang -> Text [style = "solid"]; +Lang -> Idiom [style = "solid"]; +Lang -> Structural [style = "solid"]; +Lang -> Lexicon [style = "solid"]; + +Noun [style = "solid", shape = "ellipse", URL = "Noun.gf"]; +Noun -> Cat [style = "solid"]; + +Verb [style = "solid", shape = "ellipse", URL = "Verb.gf"]; +Verb -> Cat [style = "solid"]; + +Adjective [style = "solid", shape = "ellipse", URL = "Adjective.gf"]; +Adjective -> Cat [style = "solid"]; + +Adverb [style = "solid", shape = "ellipse", URL = "Adverb.gf"]; +Adverb -> Cat [style = "solid"]; + +Numeral [style = "solid", shape = "ellipse", URL = "Numeral.gf"]; +Numeral -> Cat [style = "solid"]; + +Sentence [style = "solid", shape = "ellipse", URL = "Sentence.gf"]; +Sentence -> Cat [style = "solid"]; + +Question [style = "solid", shape = "ellipse", URL = "Question.gf"]; +Question -> Cat [style = "solid"]; + +Relative [style = "solid", shape = "ellipse", URL = "Relative.gf"]; +Relative -> Cat [style = "solid"]; + +Conjunction [style = "solid", shape = "ellipse", URL = "Conjunction.gf"]; +Conjunction -> Cat [style = "solid"]; + +Phrase [style = "solid", shape = "ellipse", URL = "Phrase.gf"]; +Phrase -> Cat [style = "solid"]; + +Text [style = "solid", shape = "ellipse", URL = "Phrase.gf"]; +Text -> Cat [style = "solid"]; + +Idiom [style = "solid", shape = "ellipse", URL = "Phrase.gf"]; +Idiom -> Cat [style = "solid"]; + +Structural [style = "solid", shape = "ellipse", URL = "Structural.gf"]; +Structural -> Cat [style = "solid"]; + +Lexicon [style = "solid", shape = "ellipse", URL = "Lexicon.gf"]; +Lexicon -> Cat [style = "solid"]; + +Cat [style = "solid", shape = "ellipse", URL = "Cat.gf"]; +Cat -> Common [style = "solid"]; + +Common [style = "solid", shape = "ellipse", URL = "Tense.gf"]; + +} diff --git a/next-lib/doc/Lang.png b/next-lib/doc/Lang.png new file mode 100644 index 0000000000000000000000000000000000000000..3fc770382edfb5bbad6884393b869bb90c084383 GIT binary patch literal 7676 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 literal 0 HcmV?d00001 diff --git a/next-lib/doc/Makefile b/next-lib/doc/Makefile new file mode 100644 index 000000000..e91ff322c --- /dev/null +++ b/next-lib/doc/Makefile @@ -0,0 +1,16 @@ +.PHONY: abstract synopsis + +all: synopsis abstract + +index: + txt2tags -thtml index.txt +synopsis: + runghc MkSynopsis.hs + +categories-imagemap.html: categories.dot + dot -Tcmapx $^ > $@ + +abstract: + gfdoc -txthtml ../src/abstract/*.gf + mv ../src/abstract/*.html abstract + diff --git a/next-lib/doc/MkSynopsis.hs b/next-lib/doc/MkSynopsis.hs new file mode 100644 index 000000000..88fe82c0d --- /dev/null +++ b/next-lib/doc/MkSynopsis.hs @@ -0,0 +1,244 @@ +import System +import Char +import List + +type Cats = [(String,String,String)] +type Rules = [(String,String,String)] + +main = do + xx <- getArgs + let isLatex = case xx of + "-tex":_ -> True + _ -> False + cs1 <- getCats commonAPI + cs2 <- getCats catAPI + let cs = sortCats (cs1 ++ cs2) + writeFile synopsis "GF Resource Grammar Library: Synopsis" + append "B. Bringert and A. Ranta" + space + append "%!postproc(html): '(SRC=\"categories.png\")' '\\1 USEMAP=\"#categories\"'" + append "%!postproc(html): '#LParadigms' ''" + append "%!postproc(tex): '#LParadigms' ''" + delimit $ addToolTips cs + include "synopsis-intro.txt" + title "Categories" + space + link "Source 1:" commonAPI + space + link "Source 2:" catAPI + space + append "==A hierarchic view==\n" + include "categories-intro.txt" + append "==Explanations==\n" + delimit $ mkCatTable isLatex cs + space + title "Syntax Rules and Structural Words" + space + link "Source 1:" syntaxAPI + space + link "Source 2:" structuralAPI + space + rs <- getRules syntaxAPI + rs2 <- getRules structuralAPI + delimit $ mkSplitTables True isLatex cs $ rs ++ rs2 + space +-- title "Structural Words" +-- space +-- link "Source:" structuralAPI +-- space +-- rs <- rulesTable False isLatex cs structuralAPI +-- delimit rs + space + title "Lexical Paradigms" + mapM_ (putParadigms isLatex cs) paradigmFiles + space + include "synopsis-browse.txt" + space + title "An Example of Usage" + space + include "synopsis-example.txt" + space + let format = if isLatex then "tex" else "html" + system $ "txt2tags -t" ++ format ++ " --toc " ++ synopsis + if isLatex then (system $ "pdflatex synopsis.tex") >> return () else return () + +addToolTips :: Cats -> [String] +addToolTips = map f + where f (n,e,_) = "%!postproc(html): '(?i)(HREF=\"#" ++ n ++ "\")( TITLE=\"[^\"]*\")?' '\\1 TITLE=\"" ++ e' ++ "\"'" + where e' = n ++ if null e then "" else " - " ++ e + +getCats :: FilePath -> IO Cats +getCats file = do + ss <- readFile file >>= return . lines + return $ getrs [] ss + where + getrs rs ss = case ss of + ('-':'-':'.':_):_ -> reverse rs + [] -> reverse rs + ('-':'-':_):ss2 -> getrs rs ss2 + s:ss2 -> case words s of + cat:";":"--":exp -> getrs ((cat,unwords expl, unwords (tail ex)):rs) ss2 where + (expl,ex) = span (/="e.g.") exp + _ -> getrs rs ss2 + +rulesTable :: Bool -> Bool -> Cats -> FilePath -> IO [String] +rulesTable hasEx isLatex cs file = do + rs <- getRules file + return $ mkTable hasEx isLatex cs rs + + +getRules :: FilePath -> IO Rules +getRules file = do + ss <- readFile file >>= return . lines + return $ getrs [] ss + where + getrs rs ss = case ss of + ('-':'-':'.':_):_ -> reverse rs + [] -> reverse rs + ('-':'-':_):ss2 -> getrs rs ss2 + s:ss2 -> case words s of + _:_:"overload":_ -> getrs rs ss2 + _:":":_ -> getrs (rule s:rs) ss2 + _ -> getrs rs ss2 + rule s = (name, typ, ex) + where + ws = takeWhile (/="--#") $ words s + name = head ws + (t,e) = span (/="--") (tail ws) + typ = unwords $ filtype (drop 1 t) + filtype = filter (/=";") + ex = if null e then "" else unwords $ unnumber $ drop 1 e + unnumber e = case e of + n:ws | last n == '.' && not (null (init n)) && all isDigit (init n) -> ws + _ -> e + +putParadigms :: Bool -> Cats -> (String, FilePath) -> IO () +putParadigms isLatex cs (lang,file) = do + stitle ("Paradigms for " ++ lang) + append "#LParadigms" + space + link "source" file + space + rs <- rulesTable False isLatex cs file + space + delimit rs + space + +inChunks :: Int -> ([a] -> [String]) -> [a] -> [String] +inChunks i f = concat . intersperse ["\n\n"] . map f . chunks i where + chunks _ [] = [] + chunks i xs = x : chunks i y where (x,y) = splitAt i xs + +-- Makes one table per result category. +-- Adds a subsection header for each table. +mkSplitTables :: Bool -> Bool -> Cats -> Rules -> [String] +mkSplitTables hasEx isLatex cs = concatMap t . addLexicalCats cs . sortRules + where t (c, xs) = [subtitle c expl] ++ tableOrLink + where + expl = case [e | (n,e,_) <- cs, n == c] of + [] -> "" + e:_ -> e + tableOrLink = if null xs then parad else mkTable hasEx isLatex cs xs + parad = [ + "Lexical category, constructors given in", + "[lexical paradigms #RParadigms]." + ] + +mkTable :: Bool -> Bool -> Cats -> Rules -> [String] +mkTable hasEx isLatex cs = inChunks chsize (\rs -> header : map (unwords . row) rs) + where + chsize = if isLatex then 40 else 1000 + header = if hasEx then "|| Function | Type | Example ||" + else "|| Function | Type ||" + row (name,typ,ex) + = if hasEx then ["|", name', "|", typ', "|", ex', "|"] + else ["|", name', "|", typ', "|"] + where + name' = ttf name + typ' = showTyp cs typ + ex' = if null ex then itf (takeWhile (/='_') name) else itf ex + +mkCatTable :: Bool -> Cats -> [String] +mkCatTable isLatex cs = inChunks chsize (\rs -> header ++ map mk1 rs) cs + where + header = ["|| Category | Explanation | Example ||"] + chsize = if isLatex then 40 else 1000 + mk1 (name,expl,ex) = unwords ["|", showCat cs name, "|", expl, "|", typo ex, "|"] + typo ex = if take 1 ex == "\"" then itf (init (tail ex)) else ex + +srcPath = ("../src" ++) + +synopsis = "synopsis.txt" +commonAPI = srcPath "/abstract/Common.gf" +catAPI = srcPath "/abstract/Cat.gf" +syntaxAPI = srcPath "/api/Constructors.gf" +structuralAPI = srcPath "/abstract/Structural.gf" +paradigmFiles = [ + ("Bulgarian", srcPath "/bulgarian/ParadigmsBul.gf"), + ("Catalan", srcPath "/catalan/ParadigmsCat.gf"), + ("Danish", srcPath "/danish/ParadigmsDan.gf"), + ("English", srcPath "/english/ParadigmsEng.gf"), + ("Finnish", srcPath "/finnish/ParadigmsFin.gf"), + ("French", srcPath "/french/ParadigmsFre.gf"), + ("German", srcPath "/german/ParadigmsGer.gf"), +-- ("Interlingua", srcPath "/interlingua/ParadigmsIna.gf"), + ("Italian", srcPath "/italian/ParadigmsIta.gf"), + ("Norwegian", srcPath "/norwegian/ParadigmsNor.gf"), + ("Romanian", srcPath "/romanian/ParadigmsRon.gf"), + ("Russian", srcPath "/russian/ParadigmsRus.gf"), + ("Spanish", srcPath "/spanish/ParadigmsSpa.gf"), + ("Swedish", srcPath "/swedish/ParadigmsSwe.gf") + ] + +append s = appendFile synopsis ('\n':s) +title s = append $ "=" ++ s ++ "=" +stitle s = append $ "==" ++ s ++ "==" +include s = append $ "%!include: " ++ s +space = append "\n" +delimit ss = mapM_ append ss +link s f = append $ s ++ " [``" ++ fa ++ "`` " ++ f ++ "]" where + fa = "http://www.cs.chalmers.se/~aarne/GF/lib/resource" ++ dropWhile (=='.') f + +ttf s = "``" ++ s ++ "``" +itf s = "//" ++ s ++ "//" + +----------------- + +-- sort category synopsis by category, retain one table +sortCats :: Cats -> Cats +sortCats = sortBy compareCat + where compareCat (n1,_,_) (n2,_,_) = compare n1 n2 + +-- sort function synopsis by category, into separate tables +sortRules :: Rules -> [Rules] +sortRules = groupBy sameCat . sortBy compareRules + where sameCat r1 r2 = resultCat r1 == resultCat r2 + compareRules r1@(n1,_,_) r2@(n2,_,_) + = compare (resultCat r1,n1) (resultCat r2,n2) + +addLexicalCats :: Cats -> [Rules] -> [(String,Rules)] +addLexicalCats cs rss = + map head $ groupBy fstEq $ sortBy (\x y -> compare (fst x) (fst y)) $ + [ (resultCat r, rs) | rs@(r:_) <- rss] ++ [(n,[]) | (n,_,_) <- cs] + where fstEq p1 p2 = fst p1 == fst p2 + +resultCat :: (String,String,String) -> String +resultCat (_,t,_) = last (words t) + + +subtitle cat expl = "==" ++ cat ++ e ++ "==" ++ "[" ++ cat ++ "]" + where e = if null expl then "" else " - " ++ expl + +showCat :: Cats -> String -> String +showCat cs cat = "[" ++ cat ++ " #" ++ cat ++ "]" + +showTyp :: Cats -> String -> String +showTyp cs = unwords . map f . words + where f s | head s == '(' && last s == ')' && isCat c + = "(" ++ showCat cs c ++ ")" + | isCat s = showCat cs s + | otherwise = ttf s + where c = init (tail s) + isCat cat = cat `notElem` ["Str","Int"] + && all (\c -> isAlphaNum c || c == '\'') cat + && isUpper (head cat) diff --git a/next-lib/doc/Resource-HOWTO.txt b/next-lib/doc/Resource-HOWTO.txt new file mode 100644 index 000000000..fff5f439f --- /dev/null +++ b/next-lib/doc/Resource-HOWTO.txt @@ -0,0 +1,787 @@ +Resource grammar writing HOWTO +Author: Aarne Ranta +Last update: %%date(%c) + +% NOTE: this is a txt2tags file. +% Create an html file from this file using: +% txt2tags --toc -thtml Resource-HOWTO.txt + +%!target:html + +**History** + +October 2007: updated for API 1.2. + +January 2006: first version. + + +The purpose of this document is to tell how to implement the GF +resource grammar API for a new language. We will //not// cover how +to use the resource grammar, nor how to change the API. But we +will give some hints how to extend the API. + +A manual for using the resource grammar is found in + +[``http://www.cs.chalmers.se/~aarne/GF/lib/resource-1.0/doc/synopsis.html`` http://www.cs.chalmers.se/~aarne/GF/lib/resource-1.0/doc/synopsis.html]. + +A tutorial on GF, also introducing the idea of resource grammars, is found in + +[``http://www.cs.chalmers.se/~aarne/GF/doc/tutorial/gf-tutorial2.html`` ../../../doc/tutorial/gf-tutorial2.html]. + +This document concerns the API v. 1.0. You can find the current code in + +[``http://www.cs.chalmers.se/~aarne/GF/lib/resource-1.0/`` ..] + + + + +==The resource grammar structure== + +The library is divided into a bunch of modules, whose dependencies +are given in the following figure. + +[Syntax.png] + +- solid contours: module used by end users +- dashed contours: internal module +- ellipse: abstract/concrete pair of modules +- rectangle: resource or instance +- diamond: interface + + +The solid ellipses show the API as visible to the user of the library. The +dashed ellipses form the main of the implementation, on which the resource +grammar programmer has to work with. With the exception of the ``Paradigms`` +module, the visible API modules can be produced mechanically. + +[Grammar.png] + +Thus the API consists of a grammar and a lexicon, which is +provided for test purposes. + +The module structure is rather flat: most modules are direct +parents of ``Grammar``. The idea +is that you can concentrate on one linguistic aspect at a time, or +also distribute the work among several authors. The module ``Cat`` +defines the "glue" that ties the aspects together - a type system +to which all the other modules conform, so that e.g. ``NP`` means +the same thing in those modules that use ``NP``s and those that +constructs them. + + + +===Phrase category modules=== + +The direct parents of the top will be called **phrase category modules**, +since each of them concentrates on a particular phrase category (nouns, verbs, +adjectives, sentences,...). A phrase category module tells +//how to construct phrases in that category//. You will find out that +all functions in any of these modules have the same value type (or maybe +one of a small number of different types). Thus we have + + +- ``Noun``: construction of nouns and noun phrases +- ``Adjective``: construction of adjectival phrases +- ``Verb``: construction of verb phrases +- ``Adverb``: construction of adverbial phrases +- ``Numeral``: construction of cardinal and ordinal numerals +- ``Sentence``: construction of sentences and imperatives +- ``Question``: construction of questions +- ``Relative``: construction of relative clauses +- ``Conjunction``: coordination of phrases +- ``Phrase``: construction of the major units of text and speech +- ``Text``: construction of texts as sequences of phrases +- ``Idiom``: idiomatic phrases such as existentials + + + + +===Infrastructure modules=== + +Expressions of each phrase category are constructed in the corresponding +phrase category module. But their //use// takes mostly place in other modules. +For instance, noun phrases, which are constructed in ``Noun``, are +used as arguments of functions of almost all other phrase category modules. +How can we build all these modules independently of each other? + +As usual in typeful programming, the //only// thing you need to know +about an object you use is its type. When writing a linearization rule +for a GF abstract syntax function, the only thing you need to know is +the linearization types of its value and argument categories. To achieve +the division of the resource grammar to several parallel phrase category modules, +what we need is an underlying definition of the linearization types. This +definition is given as the implementation of + +- ``Cat``: syntactic categories of the resource grammar + + +Any resource grammar implementation has first to agree on how to implement +``Cat``. Luckily enough, even this can be done incrementally: you +can skip the ``lincat`` definition of a category and use the default +``{s : Str}`` until you need to change it to something else. In +English, for instance, many categories do have this linearization type. + + + +===Lexical modules=== + +What is lexical and what is syntactic is not as clearcut in GF as in +some other grammar formalisms. Logically, lexical means atom, i.e. a +``fun`` with no arguments. Linguistically, one may add to this +that the ``lin`` consists of only one token (or of a table whose values +are single tokens). Even in the restricted lexicon included in the resource +API, the latter rule is sometimes violated in some languages. For instance, +``Structural.both7and_DConj`` is an atom, but its linearization is +two words e.g. //both - and//. + +Another characterization of lexical is that lexical units can be added +almost //ad libitum//, and they cannot be defined in terms of already +given rules. The lexical modules of the resource API are thus more like +samples than complete lists. There are two such modules: + +- ``Structural``: structural words (determiners, conjunctions,...) +- ``Lexicon``: basic everyday content words (nouns, verbs,...) + + +The module ``Structural`` aims for completeness, and is likely to +be extended in future releases of the resource. The module ``Lexicon`` +gives a "random" list of words, which enable interesting testing of syntax, +and also a check list for morphology, since those words are likely to include +most morphological patterns of the language. + +In the case of ``Lexicon`` it may come out clearer than anywhere else +in the API that it is impossible to give exact translation equivalents in +different languages on the level of a resource grammar. In other words, +application grammars are likely to use the resource in different ways for +different languages. + + +==Language-dependent syntax modules== + +In addition to the common API, there is room for language-dependent extensions +of the resource. The top level of each languages looks as follows (with English as example): +``` + abstract English = Grammar, ExtraEngAbs, DictEngAbs +``` +where ``ExtraEngAbs`` is a collection of syntactic structures specific to English, +and ``DictEngAbs`` is an English dictionary +(at the moment, it consists of ``IrregEngAbs``, +the irregular verbs of English). Each of these language-specific grammars has +the potential to grow into a full-scale grammar of the language. These grammar +can also be used as libraries, but the possibility of using functors is lost. + +To give a better overview of language-specific structures, +modules like ``ExtraEngAbs`` +are built from a language-independent module ``ExtraAbs`` +by restricted inheritance: +``` + abstract ExtraEngAbs = Extra [f,g,...] +``` +Thus any category and function in ``Extra`` may be shared by a subset of all +languages. One can see this set-up as a matrix, which tells +what ``Extra`` structures +are implemented in what languages. For the common API in ``Grammar``, the matrix +is filled with 1's (everything is implemented in every language). + +In a minimal resource grammar implementation, the language-dependent +extensions are just empty modules, but it is good to provide them for +the sake of uniformity. + + +==The core of the syntax== + +Among all categories and functions, a handful are +most important and distinct ones, of which the others are can be +seen as variations. The categories are +``` + Cl ; VP ; V2 ; NP ; CN ; Det ; AP ; +``` +The functions are +``` + PredVP : NP -> VP -> Cl ; -- predication + ComplV2 : V2 -> NP -> VP ; -- complementization + DetCN : Det -> CN -> NP ; -- determination + ModCN : AP -> CN -> CN ; -- modification +``` +This [toy Latin grammar latin.gf] shows in a nutshell how these +rules relate the categories to each other. It is intended to be a +first approximation when designing the parameter system of a new +language. + + +===Another reduced API=== + +If you want to experiment with a small subset of the resource API first, +try out the module +[Syntax http://www.cs.chalmers.se/~aarne/GF/doc/tutorial/resource/Syntax.gf] +explained in the +[GF Tutorial http://www.cs.chalmers.se/~aarne/GF/doc/tutorial/gf-tutorial2.html]. + + +===The present-tense fragment=== + +Some lines in the resource library are suffixed with the comment +```--# notpresent +which is used by a preprocessor to exclude those lines from +a reduced version of the full resource. This present-tense-only +version is useful for applications in most technical text, since +they reduce the grammar size and compilation time. It can also +be useful to exclude those lines in a first version of resource +implementation. To compile a grammar with present-tense-only, use +``` + i -preproc=GF/lib/resource-1.0/mkPresent LangGer.gf +``` + + + +==Phases of the work== + +===Putting up a directory=== + +Unless you are writing an instance of a parametrized implementation +(Romance or Scandinavian), which will be covered later, the +simplest way is to follow roughly the following procedure. Assume you +are building a grammar for the German language. Here are the first steps, +which we actually followed ourselves when building the German implementation +of resource v. 1.0. + ++ Create a sister directory for ``GF/lib/resource/english``, named + ``german``. +``` + cd GF/lib/resource/ + mkdir german + cd german +``` + ++ Check out the [ISO 639 3-letter language code + http://www.w3.org/WAI/ER/IG/ert/iso639.htm] + for German: both ``Ger`` and ``Deu`` are given, and we pick ``Ger``. + ++ Copy the ``*Eng.gf`` files from ``english`` ``german``, + and rename them: +``` + cp ../english/*Eng.gf . + rename 's/Eng/Ger/' *Eng.gf +``` + ++ Change the ``Eng`` module references to ``Ger`` references + in all files: +``` + sed -i 's/English/German/g' *Ger.gf + sed -i 's/Eng/Ger/g' *Ger.gf +``` + The first line prevents changing the word ``English``, which appears + here and there in comments, to ``Gerlish``. + ++ This may of course change unwanted occurrences of the + string ``Eng`` - verify this by +``` + grep Ger *.gf +``` + But you will have to make lots of manual changes in all files anyway! + ++ Comment out the contents of these files: +``` + sed -i 's/^/--/' *Ger.gf +``` + This will give you a set of templates out of which the grammar + will grow as you uncomment and modify the files rule by rule. + ++ In all ``.gf`` files, uncomment the module headers and brackets, + leaving the module bodies commented. Unfortunately, there is no + simple way to do this automatically (or to avoid commenting these + lines in the previous step) - but uncommenting the first + and the last lines will actually do the job for many of the files. + ++ Uncomment the contents of the main grammar file: +``` + sed -i 's/^--//' LangGer.gf +``` + ++ Now you can open the grammar ``LangGer`` in GF: +``` + gf LangGer.gf +``` + You will get lots of warnings on missing rules, but the grammar will compile. + ++ At all following steps you will now have a valid, but incomplete + GF grammar. The GF command +``` + pg -printer=missing +``` + tells you what exactly is missing. + + +Here is the module structure of ``LangGer``. It has been simplified by leaving out +the majority of the phrase category modules. Each of them has the same dependencies +as e.g. ``VerbGer``. + +[German.png] + + +===Direction of work=== + +The real work starts now. There are many ways to proceed, the main ones being +- Top-down: start from the module ``Phrase`` and go down to ``Sentence``, then + ``Verb``, ``Noun``, and in the end ``Lexicon``. In this way, you are all the time + building complete phrases, and add them with more content as you proceed. + **This approach is not recommended**. It is impossible to test the rules if + you have no words to apply the constructions to. + +- Bottom-up: set as your first goal to implement ``Lexicon``. To this end, you + need to write ``ParadigmsGer``, which in turn needs parts of + ``MorphoGer`` and ``ResGer``. + **This approach is not recommended**. You can get stuck to details of + morphology such as irregular words, and you don't have enough grasp about + the type system to decide what forms to cover in morphology. + + +The practical working direction is thus a saw-like motion between the morphological +and top-level modules. Here is a possible course of the work that gives enough +test data and enough general view at any point: ++ Define ``Cat.N`` and the required parameter types in ``ResGer``. As we define +``` + lincat N = {s : Number => Case => Str ; g : Gender} ; +``` +we need the parameter types ``Number``, ``Case``, and ``Gender``. The definition +of ``Number`` in [``common/ParamX`` ../common/ParamX.gf] works for German, so we +use it and just define ``Case`` and ``Gender`` in ``ResGer``. + ++ Define ``regN`` in ``ParadigmsGer``. In this way you can +already implement a huge amount of nouns correctly in ``LexiconGer``. Actually +just adding ``mkN`` should suffice for every noun - but, +since it is tedious to use, you +might proceed to the next step before returning to morphology and defining the +real work horse ``reg2N``. + ++ While doing this, you may want to test the resource independently. Do this by +``` + i -retain ParadigmsGer + cc regN "Kirche" +``` + ++ Proceed to determiners and pronouns in +``NounGer`` (``DetCN UsePron DetSg SgQuant NoNum NoOrd DefArt IndefArt UseN``)and +``StructuralGer`` (``i_Pron every_Det``). You also need some categories and +parameter types. At this point, it is maybe not possible to find out the final +linearization types of ``CN``, ``NP``, and ``Det``, but at least you should +be able to correctly inflect noun phrases such as //every airplane//: +``` + i LangGer.gf + l -table DetCN every_Det (UseN airplane_N) + + Nom: jeder Flugzeug + Acc: jeden Flugzeug + Dat: jedem Flugzeug + Gen: jedes Flugzeugs +``` + ++ Proceed to verbs: define ``CatGer.V``, ``ResGer.VForm``, and +``ParadigmsGer.regV``. You may choose to exclude ``notpresent`` +cases at this point. But anyway, you will be able to inflect a good +number of verbs in ``Lexicon``, such as +``live_V`` (``regV "leven"``). + ++ Now you can soon form your first sentences: define ``VP`` and +``Cl`` in ``CatGer``, ``VerbGer.UseV``, and ``SentenceGer.PredVP``. +Even if you have excluded the tenses, you will be able to produce +``` + i -preproc=mkPresent LangGer.gf + > l -table PredVP (UsePron i_Pron) (UseV live_V) + + Pres Simul Pos Main: ich lebe + Pres Simul Pos Inv: lebe ich + Pres Simul Pos Sub: ich lebe + Pres Simul Neg Main: ich lebe nicht + Pres Simul Neg Inv: lebe ich nicht + Pres Simul Neg Sub: ich nicht lebe +``` + ++ Transitive verbs (``CatGer.V2 ParadigmsGer.dirV2 VerbGer.ComplV2``) +are a natural next step, so that you can +produce ``ich liebe dich``. + ++ Adjectives (``CatGer.A ParadigmsGer.regA NounGer.AdjCN AdjectiveGer.PositA``) +will force you to think about strong and weak declensions, so that you can +correctly inflect //my new car, this new car//. + ++ Once you have implemented the set +(``Noun.DetCN Noun.AdjCN Verb.UseV Verb.ComplV2 Sentence.PredVP), +you have overcome most of difficulties. You know roughly what parameters +and dependences there are in your language, and you can now produce very +much in the order you please. + + + +===The develop-test cycle=== + +The following develop-test cycle will +be applied most of the time, both in the first steps described above +and in later steps where you are more on your own. + ++ Select a phrase category module, e.g. ``NounGer``, and uncomment some + linearization rules (for instance, ``DefSg``, which is + not too complicated). + ++ Write down some German examples of this rule, for instance translations + of "the dog", "the house", "the big house", etc. Write these in all their + different forms (two numbers and four cases). + ++ Think about the categories involved (``CN, NP, N``) and the + variations they have. Encode this in the lincats of ``CatGer``. + You may have to define some new parameter types in ``ResGer``. + ++ To be able to test the construction, + define some words you need to instantiate it + in ``LexiconGer``. You will also need some regular inflection patterns + in``ParadigmsGer``. + ++ Test by parsing, linearization, + and random generation. In particular, linearization to a table should + be used so that you see all forms produced: +``` + gr -cat=NP -number=20 -tr | l -table +``` + ++ Spare some tree-linearization pairs for later regression testing. Use the + ``tree_bank`` command, +``` + gr -cat=NP -number=20 | tb -xml | wf NP.tb +``` + You can later compared your modified grammar to this treebank by +``` + rf NP.tb | tb -c +``` + + + +You are likely to run this cycle a few times for each linearization rule +you implement, and some hundreds of times altogether. There are 66 ``cat``s and +458 ``funs`` in ``Lang`` at the moment; 149 of the ``funs`` are outside the two +lexicon modules). + +Here is a [live log ../german/log.txt] of the actual process of +building the German implementation of resource API v. 1.0. +It is the basis of the more detailed explanations, which will +follow soon. (You will found out that these explanations involve +a rational reconstruction of the live process! Among other things, the +API was changed during the actual process to make it more intuitive.) + + +===Resource modules used=== + +These modules will be written by you. + +- ``ResGer``: parameter types and auxiliary operations +(a resource for the resource grammar!) +- ``ParadigmsGer``: complete inflection engine and most important regular paradigms +- ``MorphoGer``: auxiliaries for ``ParadigmsGer`` and ``StructuralGer``. This need +not be separate from ``ResGer``. + + +These modules are language-independent and provided by the existing resource +package. + +- ``ParamX``: parameter types used in many languages +- ``CommonX``: implementation of language-uniform categories + such as $Text$ and $Phr$, as well as of + the logical tense, anteriority, and polarity parameters +- ``Coordination``: operations to deal with lists and coordination +- ``Prelude``: general-purpose operations on strings, records, + truth values, etc. +- ``Predefined``: general-purpose operations with hard-coded definitions + + +An important decision is what rules to implement in terms of operations in +``ResGer``. A golden rule of functional programming says that, whenever +you find yourself programming by copy and paste, you should write a function +instead. This indicates that an operation should be created if it is to be +used at least twice. At the same time, a sound principle of vicinity says that +it should not require too much browsing to understand what a rule does. +From these two principles, we have derived the following practice: +- If an operation is needed //in two different modules//, +it should be created in ``ResGer``. An example is ``mkClause``, +used in ``Sentence``, ``Question``, and ``Relative``- +- If an operation is needed //twice in the same module//, but never +outside, it should be created in the same module. Many examples are +found in ``Numerals``. +- If an operation is only needed once, it should not be created (but rather +inlined). Most functions in phrase category modules are implemented in this +way. + + +This discipline is very different from the one followed in earlier +versions of the library (up to 0.9). We then valued the principle of +abstraction more than vicinity, creating layers of abstraction for +almost everything. This led in practice to the duplication of almost +all code on the ``lin`` and ``oper`` levels, and made the code +hard to understand and maintain. + + + +===Morphology and lexicon=== + +The paradigms needed to implement +``LexiconGer`` are defined in +``ParadigmsGer``. +This module provides high-level ways to define the linearization of +lexical items, of categories ``N, A, V`` and their complement-taking +variants. + + + +For ease of use, the ``Paradigms`` modules follow a certain +naming convention. Thus they for each lexical category, such as ``N``, +the functions + +- ``mkN``, for worst-case construction of ``N``. Its type signature + has the form +``` + mkN : Str -> ... -> Str -> P -> ... -> Q -> N +``` + with as many string and parameter arguments as can ever be needed to + construct an ``N``. +- ``regN``, for the most common cases, with just one string argument: +``` + regN : Str -> N +``` +- A language-dependent (small) set of functions to handle mild irregularities + and common exceptions. + +For the complement-taking variants, such as ``V2``, we provide + +- ``mkV2``, which takes a ``V`` and all necessary arguments, such + as case and preposition: +``` + mkV2 : V -> Case -> Str -> V2 ; +``` +- A language-dependent (small) set of functions to handle common special cases, + such as direct transitive verbs: +``` + dirV2 : V -> V2 ; + -- dirV2 v = mkV2 v accusative [] +``` + + +The golden rule for the design of paradigms is that + +- The user will only need function applications with constants and strings, + never any records or tables. + + +The discipline of data abstraction moreover requires that the user of the resource +is not given access to parameter constructors, but only to constants that denote +them. This gives the resource grammarian the freedom to change the underlying +data representation if needed. It means that the ``ParadigmsGer`` module has +to define constants for those parameter types and constructors that +the application grammarian may need to use, e.g. +``` + oper + Case : Type ; + nominative, accusative, genitive, dative : Case ; +``` +These constants are defined in terms of parameter types and constructors +in ``ResGer`` and ``MorphoGer``, which modules are not +visible to the application grammarian. + + +===Lock fields=== + +An important difference between ``MorphoGer`` and +``ParadigmsGer`` is that the former uses "raw" record types +for word classes, whereas the latter used category symbols defined in +``CatGer``. When these category symbols are used to denote +record types in a resource modules, such as ``ParadigmsGer``, +a **lock field** is added to the record, so that categories +with the same implementation are not confused with each other. +(This is inspired by the ``newtype`` discipline in Haskell.) +For instance, the lincats of adverbs and conjunctions are the same +in ``CommonX`` (and therefore in ``CatGer``, which inherits it): +``` + lincat Adv = {s : Str} ; + lincat Conj = {s : Str} ; +``` +But when these category symbols are used to denote their linearization +types in resource module, these definitions are translated to +``` + oper Adv : Type = {s : Str ; lock_Adv : {}} ; + oper Conj : Type = {s : Str} ; lock_Conj : {}} ; +``` +In this way, the user of a resource grammar cannot confuse adverbs with +conjunctions. In other words, the lock fields force the type checker +to function as grammaticality checker. + +When the resource grammar is ``open``ed in an application grammar, the +lock fields are never seen (except possibly in type error messages), +and the application grammarian should never write them herself. If she +has to do this, it is a sign that the resource grammar is incomplete, and +the proper way to proceed is to fix the resource grammar. + +The resource grammarian has to provide the dummy lock field values +in her hidden definitions of constants in ``Paradigms``. For instance, +``` + mkAdv : Str -> Adv ; + -- mkAdv s = {s = s ; lock_Adv = <>} ; +``` + + +===Lexicon construction=== + +The lexicon belonging to ``LangGer`` consists of two modules: + +- ``StructuralGer``, structural words, built by directly using + ``MorphoGer``. +- ``BasicGer``, content words, built by using ``ParadigmsGer``. + + +The reason why ``MorphoGer`` has to be used in ``StructuralGer`` +is that ``ParadigmsGer`` does not contain constructors for closed +word classes such as pronouns and determiners. The reason why we +recommend ``ParadigmsGer`` for building ``LexiconGer`` is that +the coverage of the paradigms gets thereby tested and that the +use of the paradigms in ``LexiconGer`` gives a good set of examples for +those who want to build new lexica. + + + + + + + +==Inside grammar modules== + +Detailed implementation tricks +are found in the comments of each module. + + +===The category system=== + +- [Common gfdoc/Common.html], [CommonX ../common/CommonX.gf] +- [Cat gfdoc/Cat.html], [CatGer gfdoc/CatGer.gf] + + +===Phrase category modules=== + +- [Noun gfdoc/Noun.html], [NounGer ../german/NounGer.gf] +- [Adjective gfdoc/Adjective.html], [AdjectiveGer ../german/AdjectiveGer.gf] +- [Verb gfdoc/Verb.html], [VerbGer ../german/VerbGer.gf] +- [Adverb gfdoc/Adverb.html], [AdverbGer ../german/AdverbGer.gf] +- [Numeral gfdoc/Numeral.html], [NumeralGer ../german/NumeralGer.gf] +- [Sentence gfdoc/Sentence.html], [SentenceGer ../german/SentenceGer.gf] +- [Question gfdoc/Question.html], [QuestionGer ../german/QuestionGer.gf] +- [Relative gfdoc/Relative.html], [RelativeGer ../german/RelativeGer.gf] +- [Conjunction gfdoc/Conjunction.html], [ConjunctionGer ../german/ConjunctionGer.gf] +- [Phrase gfdoc/Phrase.html], [PhraseGer ../german/PhraseGer.gf] +- [Text gfdoc/Text.html], [TextX ../common/TextX.gf] +- [Idiom gfdoc/Idiom.html], [IdiomGer ../german/IdiomGer.gf] +- [Lang gfdoc/Lang.html], [LangGer ../german/LangGer.gf] + + +===Resource modules=== + +- [ResGer ../german/ResGer.gf] +- [MorphoGer ../german/MorphoGer.gf] +- [ParadigmsGer gfdoc/ParadigmsGer.html], [ParadigmsGer.gf ../german/ParadigmsGer.gf] + + +===Lexicon=== + +- [Structural gfdoc/Structural.html], [StructuralGer ../german/StructuralGer.gf] +- [Lexicon gfdoc/Lexicon.html], [LexiconGer ../german/LexiconGer.gf] + + +==Lexicon extension== + +===The irregularity lexicon=== + +It may be handy to provide a separate module of irregular +verbs and other words which are difficult for a lexicographer +to handle. There are usually a limited number of such words - a +few hundred perhaps. Building such a lexicon separately also +makes it less important to cover //everything// by the +worst-case paradigms (``mkV`` etc). + + + +===Lexicon extraction from a word list=== + +You can often find resources such as lists of +irregular verbs on the internet. For instance, the +[Irregular German Verbs http://www.iee.et.tu-dresden.de/~wernerr/grammar/verben_dt.html] +page gives a list of verbs in the +traditional tabular format, which begins as follows: +``` + backen (du bäckst, er bäckt) backte [buk] gebacken + befehlen (du befiehlst, er befiehlt; befiehl!) befahl (beföhle; befähle) befohlen + beginnen begann (begönne; begänne) begonnen + beißen biß gebissen +``` +All you have to do is to write a suitable verb paradigm +``` + irregV : (x1,_,_,_,_,x6 : Str) -> V ; +``` +and a Perl or Python or Haskell script that transforms +the table to +``` + backen_V = irregV "backen" "bäckt" "back" "backte" "backte" "gebacken" ; + befehlen_V = irregV "befehlen" "befiehlt" "befiehl" "befahl" "beföhle" "befohlen" ; +``` + +When using ready-made word lists, you should think about +coyright issues. Ideally, all resource grammar material should +be provided under GNU General Public License. + + + +===Lexicon extraction from raw text data=== + +This is a cheap technique to build a lexicon of thousands +of words, if text data is available in digital format. +See the [Functional Morphology http://www.cs.chalmers.se/~markus/FM/] +homepage for details. + + + +===Extending the resource grammar API=== + +Sooner or later it will happen that the resource grammar API +does not suffice for all applications. A common reason is +that it does not include idiomatic expressions in a given language. +The solution then is in the first place to build language-specific +extension modules. This chapter will deal with this issue (to be completed). + + +==Writing an instance of parametrized resource grammar implementation== + +Above we have looked at how a resource implementation is built by +the copy and paste method (from English to German), that is, formally +speaking, from scratch. A more elegant solution available for +families of languages such as Romance and Scandinavian is to +use parametrized modules. The advantages are + +- theoretical: linguistic generalizations and insights +- practical: maintainability improves with fewer components + + +In this chapter, we will look at an example: adding Italian to +the Romance family (to be completed). Here is a set of +[slides http://www.cs.chalmers.se/~aarne/geocal2006.pdf] +on the topic. + + +==Parametrizing a resource grammar implementation== + +This is the most demanding form of resource grammar writing. +We do //not// recommend the method of parametrizing from the +beginning: it is easier to have one language first implemented +in the conventional way and then add another language of the +same family by aprametrization. This means that the copy and +paste method is still used, but at this time the differences +are put into an ``interface`` module. + + + +This chapter will work out an example of how an Estonian grammar +is constructed from the Finnish grammar through parametrization. + + diff --git a/next-lib/doc/Syntax.dot b/next-lib/doc/Syntax.dot new file mode 100644 index 000000000..a7081660e --- /dev/null +++ b/next-lib/doc/Syntax.dot @@ -0,0 +1,111 @@ +digraph { + +size = "12,8" ; + +German [style = "solid", shape = "ellipse"]; +ExtraGer [style = "solid", shape = "ellipse"]; +IrregGer [style = "solid", shape = "ellipse"]; + +German -> IrregGer [style = "solid"]; +German -> ExtraGer [style = "solid"]; +German -> LangGer [style = "solid"]; +IrregGer -> ParadigmsGer [style = "solid"]; +ExtraGer -> Grammar [style = "solid"]; + +TryGer [style = "solid", shape = "rectangle"]; + +LangGer [style = "solid", shape = "ellipse"]; + +TryGer -> SyntaxGer [style = "solid"]; + +TryGer -> ParadigmsGer [style = "solid"]; + +TryGer -> Lexicon [style = "solid"]; + +LangGer -> Grammar [style = "solid"]; +LangGer -> Lexicon [style = "solid"]; + +Lexicon [style = "dashed", shape = "ellipse", URL = "Lang.gf"]; + +SyntaxGer [style = "solid", shape = "rectangle"]; + +SyntaxGer -> Syntax [style = "solid"]; + +ParadigmsGer [style = "solid", shape = "rectangle"]; + +Syntax [style = "solid", shape = "diamond"]; + +Syntax -> Grammar [style = "solid"]; +Syntax -> Constructors [style = "solid"]; +ParadigmsGer -> Grammar [style = "solid"]; + +Constructors [style = "dashed", shape = "ellipse", URL = "Lang.gf"]; + +Constructors -> Grammar [style = "solid"]; + +Grammar [style = "dashed", shape = "ellipse", URL = "Lang.gf"]; + + +Grammar -> Noun [style = "solid"]; +Grammar -> Verb [style = "solid"]; +Grammar -> Adjective [style = "solid"]; +Grammar -> Adverb [style = "solid"]; +Grammar -> Numeral [style = "solid"]; +Grammar -> Sentence [style = "solid"]; +Grammar -> Question [style = "solid"]; +Grammar -> Relative [style = "solid"]; +Grammar -> Conjunction [style = "solid"]; +Grammar -> Phrase [style = "solid"]; +Grammar -> Text [style = "solid"]; +Grammar -> Idiom [style = "solid"]; +Grammar -> Structural [style = "solid"]; + + +Noun [style = "dashed", shape = "ellipse", URL = "Noun.gf"]; +Noun -> Cat [style = "solid"]; + +Verb [style = "dashed", shape = "ellipse", URL = "Verb.gf"]; +Verb -> Cat [style = "solid"]; + +Adjective [style = "dashed", shape = "ellipse", URL = "Adjective.gf"]; +Adjective -> Cat [style = "solid"]; + +Adverb [style = "dashed", shape = "ellipse", URL = "Adverb.gf"]; +Adverb -> Cat [style = "solid"]; + +Numeral [style = "dashed", shape = "ellipse", URL = "Numeral.gf"]; +Numeral -> Cat [style = "solid"]; + +Sentence [style = "dashed", shape = "ellipse", URL = "Sentence.gf"]; +Sentence -> Cat [style = "solid"]; + +Question [style = "dashed", shape = "ellipse", URL = "Question.gf"]; +Question -> Cat [style = "solid"]; + +Relative [style = "dashed", shape = "ellipse", URL = "Relative.gf"]; +Relative -> Cat [style = "solid"]; + +Conjunction [style = "dashed", shape = "ellipse", URL = "Conjunction.gf"]; +Conjunction -> Cat [style = "solid"]; + +Phrase [style = "dashed", shape = "ellipse", URL = "Phrase.gf"]; +Phrase -> Cat [style = "solid"]; + +Text [style = "dashed", shape = "ellipse", URL = "Phrase.gf"]; +Text -> Cat [style = "solid"]; + +Idiom [style = "dashed", shape = "ellipse", URL = "Phrase.gf"]; +Idiom -> Cat [style = "solid"]; + +Structural [style = "dashed", shape = "ellipse", URL = "Structural.gf"]; +Structural -> Cat [style = "solid"]; + +#Lexicon [style = "dashed", shape = "ellipse", URL = "Lexicon.gf"]; +#Lexicon -> Cat [style = "solid"]; + +Cat [style = "dashed", shape = "ellipse", URL = "Cat.gf"]; +Cat -> Common [style = "solid"]; + +Common [style = "dashed", shape = "ellipse", URL = "Tense.gf"]; + +} diff --git a/next-lib/doc/Syntax.png b/next-lib/doc/Syntax.png new file mode 100644 index 0000000000000000000000000000000000000000..1cc8161b1a5691a34795c243583d87a34eaac6a0 GIT binary patch literal 14804 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 literal 0 HcmV?d00001 diff --git a/next-lib/doc/categories-imagemap.html b/next-lib/doc/categories-imagemap.html new file mode 100644 index 000000000..31f01eef5 --- /dev/null +++ b/next-lib/doc/categories-imagemap.html @@ -0,0 +1,53 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/next-lib/doc/categories-intro.txt b/next-lib/doc/categories-intro.txt new file mode 100644 index 000000000..f5498fcfe --- /dev/null +++ b/next-lib/doc/categories-intro.txt @@ -0,0 +1,19 @@ + + +The chart below shows the categories in a hierarchical top-down order. +The edges do not define the complete dependency structure; if they did, +the graph would have many many more edges, and also many cycles. The precise +meaning of a directed edge from //C// to //D// is: there is a constructor +of //C// that takes //D// as an argument. What the constructors exactly are, +and what other arguments they take, is described by separate tables for +each category. + + | [categories.png] | + +%!include(html): ''categories-imagemap.html'' + + +The rectangular boxes mark open lexical categories, which have constructors +also in the ``Paradigms`` modules. + + diff --git a/next-lib/doc/categories.dot b/next-lib/doc/categories.dot new file mode 100644 index 000000000..69cf67e74 --- /dev/null +++ b/next-lib/doc/categories.dot @@ -0,0 +1,149 @@ + +digraph categories { + +size = "11,11" ; +node [href="#\N"]; + +Text [style = "solid", shape = "ellipse"]; +Text -> Punct [style = "solid"]; +Text -> Phr [style = "solid"]; + +Punct [style = "solid", shape = "ellipse"]; + +Phr [style = "solid", shape = "ellipse"]; +Phr -> PConj [style = "solid"]; +Phr -> Utt [style = "solid"]; +Phr -> Voc [style = "solid"]; + +PConj [style = "solid", shape = "ellipse"]; +Voc [style = "solid", shape = "ellipse"]; + +Utt [style = "solid", shape = "ellipse"]; +Utt -> Imp [style = "solid"]; +Utt -> S [style = "solid"]; +Utt -> QS [style = "solid"]; + +Imp [style = "solid", shape = "ellipse"]; + +S [style = "solid", shape = "ellipse"]; +S -> Tense [style = "solid"]; +S -> Ant [style = "solid"]; +S -> Pol [style = "solid"]; +S -> Cl [style = "solid"]; +S -> ListS [style = "solid"]; +S -> Conjs [style = "solid"]; + +Conjs [label = "Conj", href="#Conj", style = "solid", shape = "ellipse"]; + +Tense [style = "solid", shape = "ellipse"]; +Ant [style = "solid", shape = "ellipse"]; +Pol [style = "solid", shape = "ellipse"]; + +Cl [style = "solid", shape = "ellipse"]; +Cl -> NP [style = "solid"]; +Cl -> VP [style = "solid"]; +Cl -> Adv [style = "solid"]; + +Adv [style = "solid", shape = "rectangle"]; +Adv -> Subj [style = "solid"]; +Adv -> ListAdj [style = "solid"]; + + +NP [style = "solid", shape = "ellipse"]; +NP -> Predet [style = "solid"]; +NP -> Pron [style = "solid"]; +NP -> PN [style = "solid"]; +NP -> Det [style = "solid"]; +NP -> CN [style = "solid"]; +NP -> ListNP [style = "solid"]; + +Predet [style = "solid", shape = "ellipse"]; + +Pron [style = "solid", shape = "ellipse"]; +PN [style = "solid", shape = "rectangle"]; + +Det [style = "solid", shape = "ellipse"]; +Det -> Art [style = "solid"]; +Det -> Quant [style = "solid"]; +Det -> Num [style = "solid"]; +Det -> Ord [style = "solid"]; + + +Art [label = "Art", style = "solid", shape = "ellipse"]; +Quant [label = "Quant", style = "solid", shape = "ellipse"]; + + +Num [style = "solid", shape = "ellipse"]; +Num -> Card [style = "solid"]; + +Card [style = "solid", shape = "ellipse"]; +Card -> Numerals [style = "solid"]; +Card -> AdN [style = "solid"]; + +AdN [style = "solid", shape = "ellipse"]; +AdN -> CAdv [style = "solid"]; + +Numerals [label = "Numeral,Digits", href="#Numeral", style = "solid", shape = "ellipse"]; + + +Ord [style = "solid", shape = "ellipse"]; + +CN [style = "solid", shape = "ellipse"]; +CN -> Ns [style = "solid"]; +CN -> RS [style = "solid"]; + +Ns [label = "N,N2,N3", href="#N", style = "solid", shape = "rectangle"]; + + +VP [style = "solid", shape = "ellipse"]; +VP -> AdV [style = "solid"]; +VP -> Vs [style = "solid"]; +VP -> AP [style = "solid"]; + +AdV [style = "solid", shape = "ellipse"]; + +Vs [label = "V,V2,V3,V*,V2*", href="#V", style = "solid", shape = "rectangle"]; + +AP [style = "solid", shape = "ellipse"]; +AP -> AdA [style = "solid"]; +AP -> As [style = "solid"]; +AP -> ListAP [style = "solid"]; + +As [label = "A, A2", href="#A", style = "solid", shape = "rectangle"]; + + + + +QS [style = "solid", shape = "ellipse"]; +QS -> QCl [style = "solid"]; + +QCl [style = "solid", shape = "ellipse"]; +QCl -> IP [style = "solid"]; +QCl -> IAdv [style = "solid"]; +QCl -> ClSlash [style = "solid"]; + +IP [style = "solid", shape = "ellipse"]; +IP -> IDet [style = "solid"]; + +IDet [style = "solid", shape = "ellipse"]; +IDet -> IQuant [style = "solid"]; + +IQuant [style = "solid", shape = "ellipse"]; + +IAdv [style = "solid", shape = "ellipse"]; + +ClSlash [style = "solid", shape = "ellipse"]; +ClSlash -> VPSlash [style = "solid"]; + +VPSlash [style = "solid", shape = "ellipse"]; + +RS [style = "solid", shape = "ellipse"]; +RS -> RCl [style = "solid"]; + +RCl [style = "solid", shape = "ellipse"]; +RCl -> RP [style = "solid"]; + +RP [style = "solid", shape = "ellipse"]; + + +} diff --git a/next-lib/doc/categories.png b/next-lib/doc/categories.png new file mode 100644 index 0000000000000000000000000000000000000000..590540fc51dc4187be56636998adde51d4f5c469 GIT binary patch literal 123025 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 L`njxgN@xNANfd0H literal 0 HcmV?d00001 diff --git a/next-lib/doc/editor.png b/next-lib/doc/editor.png new file mode 100644 index 0000000000000000000000000000000000000000..63a3161bfc38346991ade7840c152f7a9172284a GIT binary patch literal 20552 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 +Last update: %%date(%c) + +% NOTE: this is a txt2tags file. +% Create an html file from this file using: +% txt2tags --toc -thtml index.txt + +%!target:html + +%!postproc(html): #BCEN
+%!postproc(html): #ECEN
+ + +#BCEN + +[10lang-large.png] + +#ECEN + + +The GF Resource Grammar Library defines the basic grammar of +ten languages: +Danish, English, Finnish, French, German, +Italian, Norwegian, Russian, Spanish, Swedish. +Still incomplete implementations for Arabic and Catalan are also +included. + +**New** in December 2007: Browsing the library by syntax editor +[directly on the web ../../../demos/resource-api/editor.html]. + + + + +==Authors== + +Inger Andersson and Therese Soderberg (Spanish morphology), +Nicolas Barth and Sylvain Pogodalla (French verb list), +Ali El Dada (Arabic modules), +Magda Gerritsen and Ulrich Real (Russian paradigms and lexicon), +Janna Khegai (Russian modules), +Bjorn Bringert (many Swadesh lexica), +Carlos Gonzalía (Spanish cardinals), +Harald Hammarström (German morphology), +Patrik Jansson (Swedish cardinals), +Andreas Priesnitz (German lexicon), +Aarne Ranta, +Jordi Saludes (Catalan modules), +Henning Thielemann (German lexicon). + + +We are grateful for contributions and +comments to several other people who have used this and +the previous versions of the resource library, including +Ludmilla Bogavac, +Ana Bove, +David Burke, +Lauri Carlson, +Gloria Casanellas, +Karin Cavallin, +Robin Cooper, +Hans-Joachim Daniels, +Elisabet Engdahl, +Markus Forsberg, +Kristofer Johannisson, +Anni Laine, +Hans Leiß, +Peter Ljunglöf, +Saara Myllyntausta, +Wanjiku Ng'ang'a, +Nadine Perera, +Jordi Saludes. + + +==License== + +The GF Resource Grammar Library is open-source software licensed under +GNU Lesser General Public License (LGPL). See the file [LICENSE ../LICENSE] for more +details. + + +==Scope== + +Coverage, for each language: +- complete morphology +- lexicon of the ca. 100 most important structural words +- test lexicon of ca. 300 content words (rough equivalents in each language) +- list of irregular verbs (separately for each language) +- representative fragment of syntax (cf. CLE (Core Language Engine)) +- rather flat semantics (cf. Quasi-Logical Form of CLE) + + +Organization: +- top-level (API) modules +- Ground API + special-purpose APIs +- "school grammar" concepts rather than advanced linguistic theory + + +Presentation: +- tool ``gfdoc`` for generating HTML from grammars +- example collections + + +==Location== + +Assuming you have installed the libraries, you will find the precompiled +``gfc`` and ``gfr`` files directly under ``$GF_LIB_PATH``, whose default +value is ``/usr/local/share/GF/``. The precompiled subdirectories are +``` + alltenses + mathematical + multimodal + present +``` +Do for instance +``` + cd $GF_LIB_PATH + gf alltenses/langs.gfcm + + > p -cat=S -lang=LangEng "this grammar is too big" | tb +``` +For more details, see the [Synopsis synopsis.html]. + + +==Compilation== + +If you want to compile the library from scratch, use ``make`` in the root of +the source directory: +``` + cd GF/lib/resource-1.0 + make +``` +The ``make`` procedure does not by default make Arabic and Catalan, but you +can uncomment the relevant lines in ``Makefile`` to compile them. + + +==Encoding== + +Finnish, German, Romance, and Scandinavian languages are in isolatin-1. + +Arabic and Russian are in UTF-8. + +English is in pure ASCII. + +The different encodings imply, unfortunately, that it is hard to get +a nice view of all languages simultaneously. The easiest way to achieve this is +to use ``gfeditor``, which automatically converts grammars to UTF-8. + + +==Using the resource as library== + +This API is accessible by both ``present`` and ``alltenses``. The modules you most often need are +- ``Syntax``, the interface to syntactic structures +- ``Syntax``//L//, the implementations of ``Syntax`` for each language //L// +- ``Paradigms``//L//, the morphological paradigms for each language //L// + + +The [Synopsis synopsis.html] gives examples on the typical usage of these +modules. + + +==Using the resource as top level grammar== + +The following modules can be used for parsing and linearization. They are accessible from both +``present`` and ``alltenses``. +- ``Lang``//L// for each language //L//, implementing a common abstract syntax ``Lang`` +- ``Danish``, ``English``, etc, implementing ``Lang`` with language-specific extensions + + +In addition, there is in both ``present`` and ``alltenses`` the file +- ``langs.gfcm``, a package with precompiled ``Lang``//L// grammars + + +A way to test and view the resource grammar is to load ``langs.gfcm`` either into ``gfeditor`` +or into the ``gf`` shell and perform actions such as syntax editing and treebank generation. +For instance, the command +``` + > p -lang=LangEng -cat=S "this grammar is too big" | tb +``` +creates a treebank entry with translations of this sentence. + +For parsing, currently only English and the Scandinavian languages are within the limits ofr +reasonable resources. For other languages //L//, parsing with ``Lang``//L// will probably eat +up the computer resources before finishing the parser generation. + + + +==Accessing the lower level ground API== + +The ``Syntax`` API is implemented in terms a bunch of ``abstract`` modules, which +as of version 1.2 are mainly interesting for implementors of the resource. +See the [documentation for version 1.1 index-1.1.html] for more details. + + +==Known bugs and missing components== + +Danish +- the lexicon and chosen inflections are only partially verified + + +English + + +Finnish +- wrong cases in some passive constructions + + +French +- multiple clitics (with V3) not always right +- third person pronominal questions with inverted word order + have wrong forms if "t" is required e.g. + (e.g. "comment fera-t-il" becomes "comment fera il") + + +German + + +Italian +- multiple clitics (with V3) not always right + + +Norwegian +- the lexicon and chosen inflections are only partially verified + + +Russian +- some functions missing +- some regular paradigms are missing + + +Spanish +- multiple clitics (with V3) not always right +- missing contractions with imperatives and clitics + + +Swedish + + + + +==More reading== + +[Synopsis synopsis.html]. The concise guide to API v. 1.2. + +[Grammars as Software Libraries gslt-sem-2006.html]. Slides +with background and motivation for the resource grammar library. + +[GF Resource Grammar Library Version 1.0 clt2006.html]. Slides +giving an overview of the library and practical hints on its use. + +[How to write resource grammars Resource-HOWTO.html]. Helps you +start if you want to add another language to the library. + +[Parametrized modules for Romance languages http://www.cs.chalmers.se/~aarne/geocal2006.pdf]. +Slides explaining some ideas in the implementation of +French, Italian, and Spanish. + +[Grammar writing by examples http://www.cs.chalmers.se/~aarne/slides/webalt-2005.pdf]. +Slides showing how linearization rules are written as strings parsable by the resource grammar. + +[Multimodal Resource Grammars http://www.cs.chalmers.se/~aarne/slides/talk-edin2005.pdf]. +Slides showing how to use the multimodal resource library. N.B. the library +examples are from ``multimodal/old``, which is a reduced-size API. + +[GF Resource Grammar Library ../../../doc/resource.pdf] (pdf). +Printable user manual with API documentation, for version 1.0. + diff --git a/next-lib/doc/official.txt b/next-lib/doc/official.txt new file mode 100644 index 000000000..1216226e2 --- /dev/null +++ b/next-lib/doc/official.txt @@ -0,0 +1,581 @@ +The Official EU languages + +The 20 official languages of the EU and their abbreviations are as follows: + +Español ES Spanish +Dansk DA Danish +Deutsch DE German +Elinika EL Greek +English EN +Français FR French +Italiano IT Italian +Nederlands NL Dutch +Português PT Portuguese +Suomi FI Finnish +Svenska SV Swedish +?e?tina CS Czech +Eesti ET Estonian +Latviesu valoda LV Latvian +Lietuviu kalba LT Lithuanian +Magyar HU Hungarian +Malti MT Maltese +Polski PL Polish +Sloven?ina SK Slovak +Sloven??ina SL Slovene + +http://europa.eu.int/comm/education/policies/lang/languages/index_en.html + +----- +http://www.w3.org/WAI/ER/IG/ert/iso639.htm + +ar arabic +no norwegian +ru russian + +-- + +ISO 639: 3-letter codes + +abk ab Abkhazian +ace Achinese +ach Acoli +ada Adangme +aar aa Afar +afh Afrihili +afr af Afrikaans +afa Afro-Asiatic (Other) +aka Akan +akk Akkadian +alb/sqi sq Albanian +ale Aleut +alg Algonquian languages +tut Altaic (Other) +amh am Amharic +apa Apache languages +ara ar Arabic +arc Aramaic +arp Arapaho +arn Araucanian +arw Arawak +arm/hye hy Armenian +art Artificial (Other) +asm as Assamese +ath Athapascan languages +map Austronesian (Other) +ava Avaric +ave Avestan +awa Awadhi +aym ay Aymara +aze az Azerbaijani +nah Aztec +ban Balinese +bat Baltic (Other) +bal Baluchi +bam Bambara +bai Bamileke languages +bad Banda +bnt Bantu (Other) +bas Basa +bak ba Bashkir +baq/eus eu Basque +bej Beja +bem Bemba +ben bn Bengali +ber Berber (Other) +bho Bhojpuri +bih bh Bihari +bik Bikol +bin Bini +bis bi Bislama +bra Braj +bre be Breton +bug Buginese +bul bg Bulgarian +bua Buriat +bur/mya my Burmese +bel be Byelorussian +cad Caddo +car Carib +cat ca Catalan +cau Caucasian (Other) +ceb Cebuano +cel Celtic (Other) +cai Central American Indian (Other) +chg Chagatai +cha Chamorro +che Chechen +chr Cherokee +chy Cheyenne +chb Chibcha +chi/zho zh Chinese +chn Chinook jargon +cho Choctaw +chu Church Slavic +chv Chuvash +cop Coptic +cor Cornish +cos co Corsican +cre Cree +mus Creek +crp Creoles and Pidgins (Other) +cpe Creoles and Pidgins, English-based (Other) +cpf Creoles and Pidgins, French-based (Other) +cpp Creoles and Pidgins, Portuguese-based (Other) +cus Cushitic (Other) + hr Croatian +ces/cze cs Czech +dak Dakota +dan da Danish +del Delaware +din Dinka +div Divehi +doi Dogri +dra Dravidian (Other) +dua Duala +dut/nla nl Dutch +dum Dutch, Middle (ca. 1050-1350) +dyu Dyula +dzo dz Dzongkha +efi Efik +egy Egyptian (Ancient) +eka Ekajuk +elx Elamite +eng en English +enm English, Middle (ca. 1100-1500) +ang English, Old (ca. 450-1100) +esk Eskimo (Other) +epo eo Esperanto +est et Estonian +ewe Ewe +ewo Ewondo +fan Fang +fat Fanti +fao fo Faroese +fij fj Fijian +fin fi Finnish +fiu Finno-Ugrian (Other) +fon Fon +fra/fre fr French +frm French, Middle (ca. 1400-1600) +fro French, Old (842- ca. 1400) +fry fy Frisian +ful Fulah +gaa Ga +gae/gdh Gaelic (Scots) +glg gl Gallegan +lug Ganda +gay Gayo +gez Geez +geo/kat ka Georgian +deu/ger de German +gmh German, Middle High (ca. 1050-1500) +goh German, Old High (ca. 750-1050) +gem Germanic (Other) +gil Gilbertese +gon Gondi +got Gothic +grb Grebo +grc Greek, Ancient (to 1453) +ell/gre el Greek, Modern (1453-) +kal kl Greenlandic +grn gn Guarani +guj gu Gujarati +hai Haida +hau ha Hausa +haw Hawaiian +heb he Hebrew +her Herero +hil Hiligaynon +him Himachali +hin hi Hindi +hmo Hiri Motu +hun hu Hungarian +hup Hupa +iba Iban +ice/isl is Icelandic +ibo Igbo +ijo Ijo +ilo Iloko +inc Indic (Other) +ine Indo-European (Other) +ind id Indonesian +ina ia Interlingua (International Auxiliary language Association) +ine - Interlingue +iku iu Inuktitut +ipk ik Inupiak +ira Iranian (Other) +gai/iri ga Irish +sga Irish, Old (to 900) +mga Irish, Middle (900 - 1200) +iro Iroquoian languages +ita it Italian +jpn ja Japanese +jav/jaw jv/jw Javanese +jrb Judeo-Arabic +jpr Judeo-Persian +kab Kabyle +kac Kachin +kam Kamba +kan kn Kannada +kau Kanuri +kaa Kara-Kalpak +kar Karen +kas ks Kashmiri +kaw Kawi +kaz kk Kazakh +kha Khasi +khm km Khmer +khi Khoisan (Other) +kho Khotanese +kik Kikuyu +kin rw Kinyarwanda +kir ky Kirghiz +kom Komi +kon Kongo +kok Konkani +kor ko Korean +kpe Kpelle +kro Kru +kua Kuanyama +kum Kumyk +kur ku Kurdish +kru Kurukh +kus Kusaie +kut Kutenai +lad Ladino +lah Lahnda +lam Lamba +oci oc Langue d'Oc (post 1500) +lao lo Lao +lat la Latin +lav lv Latvian +ltz Letzeburgesch +lez Lezghian +lin ln Lingala +lit lt Lithuanian +loz Lozi +lub Luba-Katanga +lui Luiseno +lun Lunda +luo Luo (Kenya and Tanzania) +mac/mak mk Macedonian +mad Madurese +mag Magahi +mai Maithili +mak Makasar +mlg mg Malagasy +may/msa ms Malay +mal Malayalam +mlt ml Maltese +man Mandingo +mni Manipuri +mno Manobo languages +max Manx +mao/mri mi Maori +mar mr Marathi +chm Mari +mah Marshall +mwr Marwari +mas Masai +myn Mayan languages +men Mende +mic Micmac +min Minangkabau +mis Miscellaneous (Other) +moh Mohawk +mol mo Moldavian +mkh Mon-Kmer (Other) +lol Mongo +mon mn Mongolian +mos Mossi +mul Multiple languages +mun Munda languages +nau na Nauru +nav Navajo +nde Ndebele, North +nbl Ndebele, South +ndo Ndongo +nep ne Nepali +new Newari +nic Niger-Kordofanian (Other) +ssa Nilo-Saharan (Other) +niu Niuean +non Norse, Old +nai North American Indian (Other) +nor no Norwegian +nno Norwegian (Nynorsk) +nub Nubian languages +nym Nyamwezi +nya Nyanja +nyn Nyankole +nyo Nyoro +nzi Nzima +oji Ojibwa +ori or Oriya +orm om Oromo +osa Osage +oss Ossetic +oto Otomian languages +pal Pahlavi +pau Palauan +pli Pali +pam Pampanga +pag Pangasinan +pan pa Panjabi +pap Papiamento +paa Papuan-Australian (Other) +fas/per fa Persian +peo Persian, Old (ca 600 - 400 B.C.) +phn Phoenician +pol pl Polish +pon Ponape +por pt Portuguese +pra Prakrit languages +pro Provencal, Old (to 1500) +pus ps Pushto +que qu Quechua +roh rm Rhaeto-Romance +raj Rajasthani +rar Rarotongan +roa Romance (Other) +ron/rum ro Romanian +rom Romany +run rn Rundi +rus ru Russian +sal Salishan languages +sam Samaritan Aramaic +smi Sami languages +smo sm Samoan +sad Sandawe +sag sg Sango +san sa Sanskrit +srd Sardinian +sco Scots +sel Selkup +sem Semitic (Other) + sr Serbian +scr sh Serbo-Croatian +srr Serer +shn Shan +sna sn Shona +sid Sidamo +bla Siksika +snd sd Sindhi +sin si Singhalese +sit - Sino-Tibetan (Other) +sio Siouan languages +sla Slavic (Other) +ssw ss Siswant +slk/slo sk Slovak +slv sl Slovenian +sog Sogdian +som so Somali +son Songhai +wen Sorbian languages +nso Sotho, Northern +sot st Sotho, Southern +sai South American Indian (Other) +esl/spa es Spanish +suk Sukuma +sux Sumerian +sun su Sudanese +sus Susu +swa sw Swahili +ssw Swazi +sve/swe sv Swedish +syr Syriac +tgl tl Tagalog +tah Tahitian +tgk tg Tajik +tmh Tamashek +tam ta Tamil +tat tt Tatar +tel te Telugu +ter Tereno +tha th Thai +bod/tib bo Tibetan +tig Tigre +tir ti Tigrinya +tem Timne +tiv Tivi +tli Tlingit +tog to Tonga (Nyasa) +ton Tonga (Tonga Islands) +tru Truk +tsi Tsimshian +tso ts Tsonga +tsn tn Tswana +tum Tumbuka +tur tr Turkish +ota Turkish, Ottoman (1500 - 1928) +tuk tk Turkmen +tyv Tuvinian +twi tw Twi +uga Ugaritic +uig ug Uighur +ukr uk Ukrainian +umb Umbundu +und Undetermined +urd ur Urdu +uzb uz Uzbek +vai Vai +ven Venda +vie vi Vietnamese +vol vo Volapük +vot Votic +wak Wakashan languages +wal Walamo +war Waray +was Washo +cym/wel cy Welsh +wol wo Wolof +xho xh Xhosa +sah Yakut +yao Yao +yap Yap +yid yi Yiddish +yor yo Yoruba +zap Zapotec +zen Zenaga +zha za Zhuang +zul zu Zulu +zun Zuni + +ISO 639: 2-letter codes + +AA "Afar" +AB "Abkhazian" +AF "Afrikaans" +AM "Amharic" +AR "Arabic" +AS "Assamese" +AY "Aymara" +AZ "Azerbaijani" +BA "Bashkir" +BE "Byelorussian" +BG "Bulgarian" +BH "Bihari" +BI "Bislama" +BN "Bengali" "Bangla" +BO "Tibetan" +BR "Breton" +CA "Catalan" +CO "Corsican" +CS "Czech" +CY "Welsh" +DA "Danish" +DE "German" +DZ "Bhutani" +EL "Greek" +EN "English" "American" +EO "Esperanto" +ES "Spanish" +ET "Estonian" +EU "Basque" +FA "Persian" +FI "Finnish" +FJ "Fiji" +FO "Faeroese" +FR "French" +FY "Frisian" +GA "Irish" +GD "Gaelic" "Scots Gaelic" +GL "Galician" +GN "Guarani" +GU "Gujarati" +HA "Hausa" +HI "Hindi" +HR "Croatian" +HU "Hungarian" +HY "Armenian" +IA "Interlingua" +IE "Interlingue" +IK "Inupiak" +IN "Indonesian" +IS "Icelandic" +IT "Italian" +IW "Hebrew" +JA "Japanese" +JI "Yiddish" +JW "Javanese" +KA "Georgian" +KK "Kazakh" +KL "Greenlandic" +KM "Cambodian" +KN "Kannada" +KO "Korean" +KS "Kashmiri" +KU "Kurdish" +KY "Kirghiz" +LA "Latin" +LN "Lingala" +LO "Laothian" +LT "Lithuanian" +LV "Latvian" "Lettish" +MG "Malagasy" +MI "Maori" +MK "Macedonian" +ML "Malayalam" +MN "Mongolian" +MO "Moldavian" +MR "Marathi" +MS "Malay" +MT "Maltese" +MY "Burmese" +NA "Nauru" +NE "Nepali" +NL "Dutch" +NO "Norwegian" +OC "Occitan" +OM "Oromo" "Afan" +OR "Oriya" +PA "Punjabi" +PL "Polish" +PS "Pashto" "Pushto" +PT "Portuguese" +QU "Quechua" +RM "Rhaeto-Romance" +RN "Kirundi" +RO "Romanian" +RU "Russian" +RW "Kinyarwanda" +SA "Sanskrit" +SD "Sindhi" +SG "Sangro" +SH "Serbo-Croatian" +SI "Singhalese" +SK "Slovak" +SL "Slovenian" +SM "Samoan" +SN "Shona" +SO "Somali" +SQ "Albanian" +SR "Serbian" +SS "Siswati" +ST "Sesotho" +SU "Sudanese" +SV "Swedish" +SW "Swahili" +TA "Tamil" +TE "Tegulu" +TG "Tajik" +TH "Thai" +TI "Tigrinya" +TK "Turkmen" +TL "Tagalog" +TN "Setswana" +TO "Tonga" +TR "Turkish" +TS "Tsonga" +TT "Tatar" +TW "Twi" +UK "Ukrainian" +UR "Urdu" +UZ "Uzbek" +VI "Vietnamese" +VO "Volapuk" +WO "Wolof" +XH "Xhosa" +YO "Yoruba" +ZH "Chinese" +ZU "Zulu" diff --git a/next-lib/doc/paradigms.txt b/next-lib/doc/paradigms.txt new file mode 100644 index 000000000..0c4cf260c --- /dev/null +++ b/next-lib/doc/paradigms.txt @@ -0,0 +1,48 @@ +Morphological Paradigms in the GF Resource Grammar Library +Aarne Ranta + + +This is a synopsis of the main morphological paradigms for +nouns (``N``), adjectives (``A``), and verbs (``V``). + + +=English= + +``` + mkN : (flash : Str) -> N ; -- car, bus, ax, hero, fly, boy + mkN : (man,men : Str) -> N ; -- index, indices + mkN : (man,men,man's,men's : Str) -> N ; + mkN : Str -> N -> N ; -- baby boom + + mkA : (happy : Str) -> A ; -- small, happy, free + mkA : (fat,fatter : Str) -> A ; + mkA : (good,better,best,well : Str) -> A + compoundA : A -> A ; -- -/more/most ridiculous + + mkV : (cry : Str) -> V ; -- call, kiss, echo, cry, pray + mkV : (stop,stopped : Str) -> V ; + mkV : (drink,drank,drunk : Str) -> V ; + mkV : (run,ran,run,running : Str) -> V ; + mkV : (go,goes,went,gone,going : Str) -> V +``` + +=French= + +``` + mkN : (cheval : Str) -> N ; -- pas, prix, nez, bijou, cheval + mkN : (foie : Str) -> Gender -> N ; + mkN : (oeil,yeux : Str) -> Gender -> N ; + mkN : N -> Str -> N + + mkA : (cher : Str) -> A ; -- banal, heureux, italien, jeune, amer, carré, joli + mkA : (sec,seche : Str) -> A ; + mkA : (banal,banale,banaux,banalement : Str) -> A ; + mkA : (bon : A) -> (meilleur : A) -> A + prefixA : A -> A ; + + mkV : (finir : Str) -> V ; -- aimer, céder, placer, manger, payer, finir + mkV : (jeter,jette,jettera : Str) -> V ; + mkV : V2 -> V + etreV : V -> V ; + reflV : V -> V ; +``` diff --git a/next-lib/doc/synopsis-browse.txt b/next-lib/doc/synopsis-browse.txt new file mode 100644 index 000000000..4d26fc600 --- /dev/null +++ b/next-lib/doc/synopsis-browse.txt @@ -0,0 +1,34 @@ + + + + +=Browsing the libraries with GF commands= + +**New**: Browsing by syntax editor +[directly on the web ../../../demos/resource-api/editor.html]. + +All of the following assume +``` + cd $GF_LIB_PATH +``` +To try out inflection paradigms: +``` + > i -path=alltenses -retain alltenses/ParadigmsGer.gfo + > cc mkN "Farbe" +``` +To try out overloaded syntax, test lexicon, and inflection paradigms: +``` + > i -path=alltenses -retain alltenses/TryGer.gfo + > cc mkCl (mkNP this_Quant (mkN "Farbe")) (mkA "dunkel") +``` +% To look for a syntax tree in the overload API by parsing: +% ``` +% > i -path=alltenses alltenses/OverLangEng.gf +% > p -cat=S -overload "this grammar is too big" +% ``` +% To view linearizations in all languages by parsing from English: +% ``` +% > i alltenses/langs.gfcm +% > p -cat=S -lang=LangEng "this grammar is too big" | tb +% ``` + diff --git a/next-lib/doc/synopsis-example.txt b/next-lib/doc/synopsis-example.txt new file mode 100644 index 000000000..8c992339e --- /dev/null +++ b/next-lib/doc/synopsis-example.txt @@ -0,0 +1,51 @@ + +The standard way of building an application has the following modules. + +An abstract syntax: +``` + abstract Music = { + cat + Kind, + Property ; + fun + PropKind : Kind -> Property -> Kind ; + Song : Kind ; + American : Property ; + } +``` +A domain lexicon interface: +``` + interface LexMusic = open Cat in { + oper + song_N : N ; + american_A : A ; + } +``` +A functor on ``Syntax`` and the domain lexicon interface: +``` + incomplete concrete MusicI of Music = open Syntax, MusicLex in { + lincat + Kind = CN ; + Property = AP ; + lin + PropKind k p = mkCN p k ; + Song = mkCN song_N ; + American = mkAP american_A ; + } +``` +For each language, an instance of the domain lexicon: +``` + instance LexMusicGer of LexMusic = CatGer ** open ParadigmsGer in { + oper + song_N = mkN "Lied" "Lieder" neuter ; + american_A = mkA "amerikanisch" ; + } +``` +For each language, an instantiation of the functor: +``` + --# -path=.:present:prelude + + concrete MusicGer of Music = MusicI with + (Syntax = SyntaxGer), + (LexMusic = LexMusicGer) ; +``` diff --git a/next-lib/doc/synopsis-intro.txt b/next-lib/doc/synopsis-intro.txt new file mode 100644 index 000000000..5a473d241 --- /dev/null +++ b/next-lib/doc/synopsis-intro.txt @@ -0,0 +1,26 @@ + + + +=Introduction= + +This document contains the most important parts of the GF Resource Grammar API. +It has been machine-generated from the source files; each chapter gives a link +to the relevant source files, which give more information. Some of the files have +not yet been prepared so that the machine generated documentation has the right +format. + +Since the character encoding is UTF-8 for Russian and Latin-1 for other +languages, you +may have to change the encoding preference of your browser when reading different +parts of the document. + +The second-last chapter gives instructions on how to "browse" the library by +loading the grammars into the ``gf`` command editor. + +**New**: Browsing by syntax editor +[directly on the web ../../../demos/resource-api/editor.html]. + +The last chapter contains a brief example of how application grammars can +import resource modules. At the same time, it illustrates a "design pattern" for +using the resource API to build functor-based applications + diff --git a/next-lib/doc/synopsis.html b/next-lib/doc/synopsis.html new file mode 100644 index 000000000..6bb70acd5 --- /dev/null +++ b/next-lib/doc/synopsis.html @@ -0,0 +1,6693 @@ + + + + +GF Resource Grammar Library: Synopsis + +

GF Resource Grammar Library: Synopsis

+ +B. Bringert and A. Ranta
+
+ +

+
+

+ + +

+
+

+ +

Introduction

+

+This document contains the most important parts of the GF Resource Grammar API. +It has been machine-generated from the source files; each chapter gives a link +to the relevant source files, which give more information. Some of the files have +not yet been prepared so that the machine generated documentation has the right +format. +

+

+Since the character encoding is UTF-8 for Russian and Latin-1 for other +languages, you +may have to change the encoding preference of your browser when reading different +parts of the document. +

+

+The second-last chapter gives instructions on how to "browse" the library by +loading the grammars into the gf command editor. +

+

+New: Browsing by syntax editor +directly on the web. +

+

+The last chapter contains a brief example of how application grammars can +import resource modules. At the same time, it illustrates a "design pattern" for +using the resource API to build functor-based applications +

+ +

Categories

+

+Source 1: http://www.cs.chalmers.se/~aarne/GF/lib/resource/src/abstract/Common.gf +

+

+Source 2: http://www.cs.chalmers.se/~aarne/GF/lib/resource/src/abstract/Cat.gf +

+ +

A hierarchic view

+

+The chart below shows the categories in a hierarchical top-down order. +The edges do not define the complete dependency structure; if they did, +the graph would have many many more edges, and also many cycles. The precise +meaning of a directed edge from C to D is: there is a constructor +of C that takes D as an argument. What the constructors exactly are, +and what other arguments they take, is described by separate tables for +each category. +

+ + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+The rectangular boxes mark open lexical categories, which have constructors +also in the Paradigms modules. +

+ +

Explanations

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
CategoryExplanationExample
Aone-place adjectivewarm
A2two-place adjectivedivisible
APadjectival phrasevery warm
AdAadjective-modifying adverbvery
AdNnumeral-modifying adverbmore than
AdVadverb directly attached to verbalways
Advverb-phrase-modifying adverbin the house
Antanterioritysimultaneous, anterior
CAdvcomparative adverbmore
CNcommon noun (without determiner)red house
Cardcardinal numberseven
Cldeclarative clause, with all tensesshe looks at this
Compcomplement of copula, such as APvery warm
Conjconjunctionand
Detdeterminer phrasethose seven
Digitscardinal or ordinal in digits1,000/1,000th
IAdvinterrogative adverbwhy
ICompinterrogative complement of copulawhere
IDetinterrogative determinerhow many
IPinterrogative pronounwho
Impimperativelook at this
Ncommon nounhouse
N2relational nounson
N3three-place relational nounconnection
NPnoun phrase (subject or object)the red house
Numnumber determining elementseven
Numeralcardinal or ordinal in wordsfive/fifth
Ordordinal number (used in Det)seventh
PConjphrase-beginning conjunctiontherefore
PNproper nameParis
Phrphrase in a textbut be quiet please
Polpolaritypositive, negative
Predetpredeterminer (prefixed Quant)all
Preppreposition, or just casein
Pronpersonal pronounshe
QClquestion clause, with all tenseswhy does she walk
QSquestionwhere did she live
Quantquantifier ('nucleus' of Det)this/these
RClrelative clause, with all tensesin which she lives
RPrelative pronounin which
RSrelativein which she lived
Sdeclarative sentenceshe lived here
SCembedded sentence or questionthat it rains
Subjsubjunctionif
Temptemporal and aspectual featurespast anterior
Tensetensepresent, past, future
Texttext consisting of several phrasesHe is here. Why?
Uttsentence, question, word...be quiet
Vone-place verbsleep
V2two-place verblove
V2Averb with NP and AP complementpaint
V2Qverb with NP and Q complementask
V2Sverb with NP and S complementtell
V2Vverb with NP and V complementcause
V3three-place verbshow
VAadjective-complement verblook
VPverb phraseis very warm
VPSlashverb phrase missing complementgive to John
VQquestion-complement verbwonder
VSsentence-complement verbclaim
VVverb-phrase-complement verbwant
Vocvocative or "please"my darling
+ + +

Syntax Rules and Structural Words

+

+Source 1: http://www.cs.chalmers.se/~aarne/GF/lib/resource/src/api/Constructors.gf +

+

+Source 2: http://www.cs.chalmers.se/~aarne/GF/lib/resource/src/abstract/Structural.gf +

+ +

A - one-place adjective

+

+Lexical category, constructors given in +lexical paradigms. +

+ +

A2 - two-place adjective

+

+Lexical category, constructors given in +lexical paradigms. +

+ +

AP - adjectival phrase

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
FunctionTypeExample
comparAPA -> APwarmer
mkAPA -> APold
mkAPA -> NP -> APolder than John
mkAPA2 -> NP -> APmarried to her
mkAPA2 -> APmarried
mkAPAP -> S -> APprobable that John walks
mkAPAP -> QS -> APuncertain if John walks
mkAPAP -> VP -> APready to go
mkAPAdA -> A -> APvery old
mkAPAdA -> AP -> APvery very old
mkAPConj -> AP -> AP -> APold and big
mkAPConj -> ListAP -> APold, big, and warm
mkAPOrd -> APoldest
mkAPCAdv -> AP -> NP -> APas old as John
reflAPA2 -> APmarried to himself
+ + +

AdA - adjective-modifying adverb

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
FunctionTypeExample
almost_AdAAdAalmost
quite_AdvAdAquite
so_AdAAdAso
too_AdAAdAtoo
very_AdAAdAvery
+ + +

AdN - numeral-modifying adverb

+ + + + + + + + + + + + + + + + + + + + + + + + + + +
FunctionTypeExample
almost_AdNAdNalmost
at_least_AdNAdNat
at_most_AdNAdNat
mkAdNCAdv -> AdNmore than
+ + +

AdV - adverb directly attached to verb

+ + + + + + + + + + + +
FunctionTypeExample
always_AdVAdValways
+ + +

Adv - verb-phrase-modifying adverb

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
FunctionTypeExample
everywhere_AdvAdveverywhere
here7from_AdvAdvfrom here
here7to_AdvAdvto here
here_AdvAdvhere
mkAdvA -> Advwarmly
mkAdvPrep -> NP -> Advwith John
mkAdvSubj -> S -> Advwhen John walks
mkAdvCAdv -> A -> NP -> Advmore warmly than John
mkAdvCAdv -> A -> S -> Advmore warmly than John walks
mkAdvAdA -> Adv -> Advvery warmly
mkAdvConj -> Adv -> Adv -> Advhere and now
mkAdvConj -> ListAdv -> Advwith John, here and now
somewhere_AdvAdvsomewhere
there7from_AdvAdvfrom there
there7to_AdvAdvto there
there_AdvAdvthere
+ + +

Ant - anteriority

+ + + + + + + + + + + + + + + + +
FunctionTypeExample
anteriorAntAnt(John has walked)
simultaneousAntAnt(John walks) [default]
+ + +

CAdv - comparative adverb

+ + + + + + + + + + + + + + + + + + + + + +
FunctionTypeExample
as_CAdvCAdvas
less_CAdvCAdvless
more_CAdvCAdvmore
+ + +

CN - common noun (without determiner)

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
FunctionTypeExample
mkCNN -> CNhouse
mkCNN2 -> NP -> CNmother of John
mkCNN3 -> NP -> NP -> CNdistance from this city to Paris
mkCNN2 -> CNson
mkCNN3 -> CNflight
mkCNA -> N -> CNbig house
mkCNA -> CN -> CNbig blue house
mkCNAP -> N -> CNvery big house
mkCNAP -> CN -> CNvery big blue house
mkCNN -> RS -> CNhouse that John loves
mkCNCN -> RS -> CNbig house that John loves
mkCNN -> Adv -> CNhouse in the city
mkCNCN -> Adv -> CNbig house in the city
mkCNCN -> S -> CNrule that John walks
mkCNCN -> QS -> CNquestion if John walks
mkCNCN -> VP -> CNreason to walk
mkCNN -> NP -> CNking John
mkCNCN -> NP -> CNold king John
+ + +

Card - cardinal number

+

+Lexical category, constructors given in +lexical paradigms. +

+ +

Cl - declarative clause, with all tenses

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
FunctionTypeExample
genericClVP -> Clone walks
mkClNP -> V -> ClJohn walks
mkClNP -> V2 -> NP -> ClJohn loves her
mkClNP -> V3 -> NP -> NP -> ClJohn sends it to her
mkClNP -> VV -> VP -> ClJohn wants to walk
mkClNP -> VS -> S -> ClJohn says that it is good
mkClNP -> VQ -> QS -> ClJohn wonders if it is good
mkClNP -> VA -> AP -> ClJohn becomes old
mkClNP -> V2A -> NP -> AP -> ClJohn paints it red
mkClNP -> V2S -> NP -> S -> ClJohn tells her that we are here
mkClNP -> V2Q -> NP -> QS -> ClJohn asks her who is here
mkClNP -> V2V -> NP -> VP -> ClJohn forces us to sleep
mkClNP -> A -> ClJohn is old
mkClNP -> A -> NP -> ClJohn is older than her
mkClNP -> A2 -> NP -> ClJohn is married to her
mkClNP -> AP -> ClJohn is very old
mkClNP -> N -> ClJohn is a man
mkClNP -> CN -> ClJohn is an old man
mkClNP -> NP -> ClJohn is the man
mkClNP -> Adv -> ClJohn is here
mkClNP -> VP -> ClJohn walks here
mkClV -> Clit rains
mkClVP -> Clit is raining
mkClN -> Clthere is a house
mkClCN -> Clthere is an old houses
mkClNP -> Clthere are five houses
mkClNP -> RS -> Clit is John that walks
mkClAdv -> S -> Clit is here John walks
+ + +

ClSlash

+ + + + + + + + + + + + + + + + + + + + + + + + + + +
FunctionTypeExample
mkClSlashNP -> V2 -> ClSlash(whom) John loves
mkClSlashNP -> VV -> V2 -> ClSlash(whom) John wants to see
mkClSlashCl -> Prep -> ClSlash(with whom) John walks
mkClSlashClSlash -> Adv -> ClSlash(whom) John loves today
+ + +

Comp - complement of copula, such as AP

+

+Lexical category, constructors given in +lexical paradigms. +

+ +

Conj - conjunction

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
FunctionTypeExample
and_ConjConjand
both7and_DConjConjboth...and
either7or_DConjConjeither...or
if_then_ConjConjif
or_ConjConjor
+ + +

Det - determiner phrase

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
FunctionTypeExample
every_DetDetevery
few_DetDetfew
many_DetDetmany
mkDetQuant -> Detthis
mkDetQuant -> (Ord) -> Detthis first
mkDetQuant -> Num -> Detthese
mkDetQuant -> Num -> (Ord) -> Detthese five best
mkDetQuant -> Detthis
mkDetQuant -> Num -> Detthese five
mkDetCard -> Detalmost twenty
mkDetNumeral -> Detfive
mkDetDigits -> Det51
mkDetPron -> Detmy (house)
mkDetPron -> Num -> Detmy (houses)
much_DetDetmuch
somePl_DetDetsomePl
someSg_DetDetsomeSg
+ + +

Dig

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
FunctionTypeExample
n0_DigDig0
n1_DigDig1
n2_DigDig2
n3_DigDig3
n4_DigDig4
n5_DigDig5
n6_DigDig6
n7_DigDig7
n8_DigDig8
n9_DigDig9
+ + +

Digits - cardinal or ordinal in digits

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
FunctionTypeExample
mkDigitsDig -> Digits8
mkDigitsDig -> Digits -> Digits876
n1000_DigitsDigits1,000
n100_DigitsDigits100
n10_DigitsDigits10
n1_DigitsDigits1
n20_DigitsDigits20
n2_DigitsDigits2
n3_DigitsDigits3
n4_DigitsDigits4
n5_DigitsDigits5
n6_DigitsDigits6
n7_DigitsDigits7
n8_DigitsDigits8
n9_DigitsDigits9
+ + +

IAdv - interrogative adverb

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
FunctionTypeExample
how_IAdvIAdvhow
mkIAdvPrep -> IP -> IAdvin which city
when_IAdvIAdvwhen
where_IAdvIAdvwhere
why_IAdvIAdvwhy
+ + +

IComp - interrogative complement of copula

+

+Lexical category, constructors given in +lexical paradigms. +

+ +

IDet - interrogative determiner

+ + + + + + + + + + + +
FunctionTypeExample
how8many_IDetIDethow8many
+ + +

IP - interrogative pronoun

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
FunctionTypeExample
mkIPIQuant -> N -> IPwhich city
mkIPIQuant -> (Num) -> CN -> IPwhich five big cities
mkIPIP -> Adv -> IPwho in Paris
whatPl_IPIPwhat (plural)
whatSg_IPIPwhat (singular)
whoPl_IPIPwho (plural)
whoSg_IPIPwho (singular)
+ + +

IQuant

+ + + + + + + + + + + +
FunctionTypeExample
which_IQuantIQuantwhich
+ + +

Imp - imperative

+ + + + + + + + + + + + + + + + + + + + + +
FunctionTypeExample
mkImpV -> Impgo
mkImpV2 -> NP -> Imptake it
mkImpVP -> Impgo there now
+ + +

ImpForm

+ + + + + + + + + + + + + + + + + + + + + +
FunctionTypeExample
pluralImpFormImpForm(help yourselves)
politeImpFormImpForm(help yourself) (polite singular)
singularImpFormImpForm(help yourself) [default]
+ + +

ListAP

+ + + + + + + + + + + + + + + + +
FunctionTypeExample
mkListAPAP -> AP -> ListAPold, big
mkListAPAP -> ListAP -> ListAPold, big, warm
+ + +

ListAdv

+ + + + + + + + + + + + + + + + +
FunctionTypeExample
mkListAdvAdv -> Adv -> ListAdvhere, now
mkListAdvAdv -> ListAdv -> ListAdvto me, here, now
+ + +

ListNP

+ + + + + + + + + + + + + + + + +
FunctionTypeExample
mkListNPNP -> NP -> ListNPJohn, I
mkListNPNP -> ListNP -> ListNPJohn, I, that
+ + +

ListRS

+ + + + + + + + + + + + + + + + +
FunctionTypeExample
mkListRSRS -> RS -> ListRSwho walks, who runs
mkListRSRS -> ListRS -> ListRSwho walks, who runs, who sleeps
+ + +

ListS

+ + + + + + + + + + + + + + + + +
FunctionTypeExample
mkListSS -> S -> ListShe walks, I run
mkListSS -> ListS -> ListSJohn walks, I run, you sleep
+ + +

N - common noun

+

+Lexical category, constructors given in +lexical paradigms. +

+ +

N2 - relational noun

+

+Lexical category, constructors given in +lexical paradigms. +

+ +

N3 - three-place relational noun

+

+Lexical category, constructors given in +lexical paradigms. +

+ +

NP - noun phrase (subject or object)

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
FunctionTypeExample
everybody_NPNPeverybody
everything_NPNPeverything
mkNPQuant -> N -> NPthis men
mkNPQuant -> (Num) -> CN -> NPthese five old men
mkNPDet -> N -> NPthe first man
mkNPDet -> CN -> NPthe first old man
mkNPNumeral -> N -> NPtwenty men
mkNPNumeral -> CN -> NPtwenty old men
mkNPDigits -> N -> NP45 men
mkNPDigits -> CN -> NP45 old men
mkNPCard -> N -> NPalmost twenty men
mkNPCard -> CN -> NPalmost twenty old men
mkNPPron -> N -> NPmy man
mkNPPron -> CN -> NPmy old man
mkNPPN -> NPJohn
mkNPPron -> NPhe
mkNPQuant -> NPthis
mkNPDet -> NPthese five
mkNPN -> NPbeer
mkNPCN -> NPbeer
mkNPPredet -> NP -> NPonly John
mkNPNP -> V2 -> NPJohn killed
mkNPNP -> Adv -> NPJohn in Paris
mkNPNP -> RS -> NPJohn, who lives in Paris
mkNPConj -> NP -> NP -> NPJohn and I
mkNPConj -> ListNP -> NPJohn, I, and that
nobody_NPNPnobody
nothing_NPNPnothing
somebody_NPNPsomebody
something_NPNPsomething
+ + +

Num - number determining element

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
FunctionTypeExample
mkNumNumeral -> Numtwenty
mkNumDigits -> Num51
mkNumCard -> Numalmost ten
mkNumAdN -> Card -> Numalmost ten
plNumNumplural
sgNumNumsingular
+ + +

Numeral - cardinal or ordinal in words

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
FunctionTypeExample
n1000_NumeralNumeralthousand
n100_NumeralNumeralhundred
n10_NumeralNumeralten
n1_NumeralNumeralone
n20_NumeralNumeraltwenty
n2_NumeralNumeraltwo
n3_NumeralNumeralthree
n4_NumeralNumeralfour
n5_NumeralNumeralfive
n6_NumeralNumeralsix
n7_NumeralNumeralseven
n8_NumeralNumeraleight
n9_NumeralNumeralnine
+ + +

Ord - ordinal number (used in Det)

+ + + + + + + + + + + + + + + + + + + + + +
FunctionTypeExample
mkOrdNumeral -> Ordtwentieth
mkOrdDigits -> Ord51st
mkOrdA -> Ordbest
+ + +

PConj - phrase-beginning conjunction

+ + + + + + + + + + + + + + + + + + + + + + + + + + +
FunctionTypeExample
but_PConjPConjbut
mkPConjConj -> PConjand
otherwise_PConjPConjotherwise
therefore_PConjPConjtherefore
+ + +

PN - proper name

+

+Lexical category, constructors given in +lexical paradigms. +

+ +

Phr - phrase in a text

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
FunctionTypeExample
mkPhrUtt -> Phrwhy
mkPhr(PConj) -> Utt -> (Voc) -> Phrbut why John
mkPhrS -> PhrJohn walked
mkPhrCl -> PhrJohn walks
mkPhrQS -> Phrdid John walk
mkPhrImp -> Phrwalk
+ + +

Pol - polarity

+ + + + + + + + + + + + + + + + +
FunctionTypeExample
negativePolPol(John doesn't walk)
positivePolPol(John walks) [default]
+ + +

Predet - predeterminer (prefixed Quant)

+ + + + + + + + + + + + + + + + + + + + + + + + + + +
FunctionTypeExample
all_PredetPredetall
most_PredetPredetmost
not_PredetPredetnot
only_PredetPredetonly
+ + +

Prep - preposition, or just case

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
FunctionTypeExample
above_PrepPrepabove
after_PrepPrepafter
before_PrepPrepbefore
behind_PrepPrepbehind
between_PrepPrepbetween
by8agent_PrepPrepby (agent)
by8means_PrepPrepby (means of)
during_PrepPrepduring
except_PrepPrepexcept
for_PrepPrepfor
from_PrepPrepfrom
in8front_PrepPrepin front of
in_PrepPrepin
on_PrepPrepon
part_PrepPreppart
possess_PrepPrepof (possessive)
through_PrepPrepthrough
to_PrepPrepto
under_PrepPrepunder
with_PrepPrepwith
without_PrepPrepwithout
+ + +

Pron - personal pronoun

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
FunctionTypeExample
he_PronPronhe
i_PronProni
it_PronPronit
she_PronPronshe
they_PronPronthey
we_PronPronwe
youPl_PronPronyou (plural)
youPol_PronPronyou (polite)
youSg_PronPronyou (singular)
+ + +

Punct

+ + + + + + + + + + + + + + + + + + + + + +
FunctionTypeExample
exclMarkPunctPunct!
fullStopPunctPunct.
questMarkPunctPunct?
+ + +

QCl - question clause, with all tenses

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
FunctionTypeExample
mkQClCl -> QCldoes John walk
mkQClIP -> VP -> QClwho walks
mkQClIP -> NP -> V2 -> QClwhom does John love
mkQClIP -> ClSlash -> QClwhom does John love today
mkQClIAdv -> Cl -> QClwhy does John walk
mkQClPrep -> IP -> Cl -> QClwith who does John walk
mkQClIAdv -> NP -> QClwhere is John
mkQClIP -> QClwhat is there
+ + +

QS - question

+ + + + + + + + + + + + + + + + + + + + + +
FunctionTypeExample
mkQSQCl -> QSwho walks
mkQS(Tense) -> (Ant) -> (Pol) -> QCl -> QSwho wouldn't have walked
mkQSCl -> QSdoes John walk
+ + +

Quant - quantifier ('nucleus' of Det)

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
FunctionTypeExample
a_QuantQuanta
no_QuantQuantno
that_QuantQuantthat
the_QuantQuantthe
this_QuantQuantthis
+ + +

RCl - relative clause, with all tenses

+ + + + + + + + + + + + + + + + + + + + + + + + + + +
FunctionTypeExample
mkRClRP -> VP -> RClthat walk
mkRClRP -> NP -> V2 -> RClwhich John loves
mkRClRP -> ClSlash -> RClwhich John loves today
mkRClCl -> RClsuch that John loves her
+ + +

RP - relative pronoun

+ + + + + + + + + + + + + + + + +
FunctionTypeExample
mkRPPrep -> NP -> RP -> RPall the houses in which
which_RPRPwhich
+ + +

RS - relative

+ + + + + + + + + + + + + + + + + + + + + + + + + + +
FunctionTypeExample
mkRSRCl -> RSthat walk
mkRS(Tense) -> (Ant) -> (Pol) -> RCl -> RSthat wouldn't have walked
mkRSConj -> RS -> RS -> RSwho walks and whom I know
mkRSConj -> ListRS -> RSwho walks, whose son runs, and whom I know
+ + +

S - declarative sentence

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
FunctionTypeExample
mkSCl -> SJohn walks
mkS(Tense) -> (Ant) -> (Pol) -> Cl -> SJohn wouldn't have walked
mkSConj -> S -> S -> SJohn walks and I run
mkSConj -> ListS -> SJohn walks, I run and you sleep
mkSAdv -> S -> Stoday, John walks
+ + +

SC - embedded sentence or question

+

+Lexical category, constructors given in +lexical paradigms. +

+ +

Subj - subjunction

+ + + + + + + + + + + + + + + + + + + + + + + + + + +
FunctionTypeExample
although_SubjSubjalthough
because_SubjSubjbecause
if_SubjSubjif
when_SubjSubjwhen
+ + +

Temp - temporal and aspectual features

+

+Lexical category, constructors given in +lexical paradigms. +

+ +

Tense - tense

+ + + + + + + + + + + + + + + + + + + + + + + + + + +
FunctionTypeExample
conditionalTenseTense(John would walk)
futureTenseTense(John will walk)
pastTenseTense(John walked)
presentTenseTense(John walks) [default]
+ + +

Text - text consisting of several phrases

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
FunctionTypeExample
emptyTextText(empty text)
mkTextPhr -> TextBut John walks.
mkTextPhr -> (Punct) -> (Text) -> TextJohn walks? Yes.
mkTextUtt -> TextJohn.
mkTextS -> TextJohn walked.
mkTextCl -> TextJohn walks.
mkTextQS -> TextDid John walk?
mkTextImp -> TextWalk!
mkTextText -> Text -> TextWhere? When? Here. Now!
+ + +

Utt - sentence, question, word...

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
FunctionTypeExample
lets_UttVP -> Uttlet's walk
mkUttS -> UttJohn walked
mkUttCl -> UttJohn walks
mkUttQS -> Uttdid John walk
mkUttQCl -> Uttdoes John walk
mkUttImp -> Uttlove yourself
mkUtt(ImpForm) -> (Pol) -> Imp -> Uttdon't love yourselves
mkUttIP -> Uttwho
mkUttIAdv -> Uttwhy
mkUttNP -> UttJohn
mkUttAdv -> Utthere
mkUttVP -> Uttto walk
no_UttUttno
yes_UttUttyes
+ + +

V - one-place verb

+

+Lexical category, constructors given in +lexical paradigms. +

+ +

V2 - two-place verb

+

+Lexical category, constructors given in +lexical paradigms. +

+ +

V2A - verb with NP and AP complement

+

+Lexical category, constructors given in +lexical paradigms. +

+ +

V2Q - verb with NP and Q complement

+

+Lexical category, constructors given in +lexical paradigms. +

+ +

V2S - verb with NP and S complement

+

+Lexical category, constructors given in +lexical paradigms. +

+ +

V2V - verb with NP and V complement

+

+Lexical category, constructors given in +lexical paradigms. +

+ +

V3 - three-place verb

+

+Lexical category, constructors given in +lexical paradigms. +

+ +

VA - adjective-complement verb

+

+Lexical category, constructors given in +lexical paradigms. +

+ +

VP - verb phrase

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
FunctionTypeExample
mkVPV -> VPwalk
mkVPV2 -> NP -> VPlove her
mkVPV3 -> NP -> NP -> VPsend it to her
mkVPVV -> VP -> VPwant to walk
mkVPVS -> S -> VPknow that she walks
mkVPVQ -> QS -> VPask if she walks
mkVPVA -> AP -> VPbecome old
mkVPV2A -> NP -> AP -> VPpaint it red
mkVPA -> VPbe warm
mkVPAP -> VPbe very warm
mkVPA -> NP -> VPbe older than her
mkVPA2 -> NP -> VPbe married to her
mkVPN -> VPbe a man
mkVPCN -> VPbe an old man
mkVPNP -> VPbe the man
mkVPAdv -> VPbe here
mkVPVP -> Adv -> VPsleep here
mkVPAdV -> VP -> VPalways sleep
mkVPVPSlash -> NP -> VPpaint it black
mkVPVPSlash -> VPpaint itself black
passiveVPV2 -> VPbe loved
passiveVPV2 -> NP -> VPbe loved by her
progressiveVPVP -> VPbe sleeping
reflexiveVPV2 -> VPlove itself
+ + +

VPSlash - verb phrase missing complement

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
FunctionTypeExample
mkVPSlashV2 -> VPSlash(whom) (John) loves
mkVPSlashV3 -> NP -> VPSlash(whom) (John) gives an apple
mkVPSlashV2A -> AP -> VPSlash(whom) (John) paints red
mkVPSlashV2Q -> QS -> VPSlash(whom) (John) asks who sleeps
mkVPSlashV2S -> S -> VPSlash(whom) (John) tells that we sleep
mkVPSlashV2V -> VP -> VPSlash(whom) (John) forces to sleep
+ + +

VQ - question-complement verb

+

+Lexical category, constructors given in +lexical paradigms. +

+ +

VS - sentence-complement verb

+

+Lexical category, constructors given in +lexical paradigms. +

+ +

VV - verb-phrase-complement verb

+ + + + + + + + + + + + + + + + + + + + + + + + + + +
FunctionTypeExample
can8know_VVVVcan (capacity)
can_VVVVcan (possibility)
must_VVVVmust
want_VVVVwant
+ + +

Voc - vocative or "please"

+ + + + + + + + + + + + + + + + +
FunctionTypeExample
mkVocNP -> VocJohn
please_VocVocplease
+ + +

Lexical Paradigms

+ +

Paradigms for Bulgarian

+

+ +

+

+source http://www.cs.chalmers.se/~aarne/GF/lib/resource/src/bulgarian/ParadigmsBul.gf +

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
FunctionType
mkN001Str -> N
mkN002Str -> N
mkN002aStr -> N
mkN003Str -> N
mkN004Str -> N
mkN005Str -> N
mkN006Str -> N
mkN007Str -> N
mkN007bStr -> N
mkN007aStr -> N
mkN008Str -> N
mkN008bStr -> N
mkN008cStr -> N
mkN008aStr -> N
mkN009Str -> N
mkN009aStr -> N
mkN010Str -> N
mkN011Str -> N
mkN012Str -> N
mkN013Str -> N
mkN014Str -> N
mkN014aStr -> N
mkN015Str -> N
mkN015aStr -> N
mkN016Str -> N
mkN016aStr -> N
mkN017Str -> N
mkN018Str -> N
mkN018aStr -> N
mkN019Str -> N
mkN019aStr -> N
mkN020Str -> N
mkN021Str -> N
mkN022Str -> N
mkN023Str -> N
mkN024aStr -> N
mkN024Str -> N
mkN025Str -> N
mkN026Str -> N
mkN027Str -> N
mkN028Str -> N
mkN028aStr -> N
mkN029Str -> N
mkN030Str -> N
mkN031Str -> N
mkN031aStr -> N
mkN032Str -> N
mkN032aStr -> N
mkN033Str -> N
mkN034Str -> N
mkN035Str -> N
mkN035aStr -> N
mkN036Str -> N
mkN037Str -> N
mkN038Str -> N
mkN039Str -> N
mkN040Str -> N
mkN040aStr -> N
mkN041Str -> N
mkN041aStr -> N
mkN041bStr -> N
mkN042Str -> N
mkN043Str -> N
mkN043aStr -> N
mkN044Str -> N
mkN045Str -> N
mkN046Str -> N
mkN047Str -> N
mkN048Str -> N
mkN049Str -> N
mkN050Str -> N
mkN051Str -> N
mkN052Str -> N
mkN052aStr -> N
mkN053Str -> N
mkN054Str -> N
mkN055Str -> N
mkN056Str -> N
mkN057Str -> N
mkN057aStr -> N
mkN058Str -> N
mkN059Str -> N
mkN060Str -> N
mkN061Str -> N
mkN062Str -> N
mkN063Str -> N
mkN064Str -> N
mkN065Str -> N
mkN066Str -> N
mkN067Str -> N
mkN068Str -> N
mkN069Str -> N
mkN070Str -> N
mkN071Str -> N
mkN072Str -> N
mkN073Str -> N
mkN074Str -> N
mkN075Str -> N
mkA076Str -> A
mkA077Str -> A
mkA078Str -> A
mkA079Str -> A
mkA080Str -> A
mkA081Str -> A
mkA082Str -> A
mkA082aStr -> A
mkA083Str -> A
mkA084Str -> A
mkA084aStr -> A
mkA085Str -> A
mkA086Str -> A
mkA087Str -> A
mkA088Str -> A
mkA089aStr -> A
mkV142Str -> VTable
mkV143Str -> VTable
mkV144Str -> VTable
mkV145Str -> VTable
mkV145aStr -> VTable
mkV145bStr -> VTable
mkV146Str -> VTable
mkV146aStr -> VTable
mkV147Str -> VTable
mkV148Str -> VTable
mkV149Str -> VTable
mkV150Str -> VTable
mkV150aStr -> VTable
mkV151Str -> VTable
mkV152Str -> VTable
mkV152aStr -> VTable
mkV153Str -> VTable
mkV154Str -> VTable
mkV155Str -> VTable
mkV156Str -> VTable
mkV157Str -> VTable
mkV158Str -> VTable
mkV159Str -> VTable
mkV160Str -> VTable
mkV160aStr -> VTable
mkV161Str -> VTable
mkV161aStr -> VTable
mkV162Str -> VTable
mkV163Str -> VTable
mkV164Str -> VTable
mkV165Str -> VTable
mkV166Str -> VTable
mkV167Str -> VTable
mkV168Str -> VTable
mkV169Str -> VTable
mkV170Str -> VTable
mkV171Str -> VTable
mkV172Str -> VTable
mkV173Str -> VTable
mkV174Str -> VTable
mkV175Str -> VTable
mkV176Str -> VTable
mkV177Str -> VTable
mkV178Str -> VTable
mkV179Str -> VTable
mkV180Str -> VTable
mkV181Str -> VTable
mkV182Str -> VTable
mkV183Str -> VTable
mkV184Str -> VTable
mkV185Str -> VTable
mkV186Str -> VTable
mkV187Str -> VTable
adjAdvA -> Str -> A =
+ + +

Paradigms for Catalan

+

+ +

+

+source http://www.cs.chalmers.se/~aarne/GF/lib/resource/src/catalan/ParadigmsCat.gf +

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
FunctionType
GenderType
masculineGender
feminineGender
NumberType
singularNumber
pluralNumber
accusativePrep
genitivePrep
dativePrep
mkPrepStr -> Prep
mkN(llum : Str) -> N
mkNStr -> Gender -> N
mkN(disc,discos : Str) -> Gender -> N
compNN -> Str -> N
mkN2N -> Prep -> N2
deN2N -> N2
aN2N -> N2
mkN3N -> Prep -> Prep -> N3
mkPN(Anna : Str) -> PN
mkPN(Pilar : Str) -> Gender -> PN
mkA(sol : Str) -> A
mkA(fort,forta,forts,fortes,fortament : Str) -> A
mkA(bo : A) -> (millor : A) -> A
prefixAA -> A
mkA2A -> Prep -> A2
mkAdvStr -> Adv
mkAdVStr -> AdV
mkAdAStr -> AdA
mkV(cantar : Str) -> V
mkVVerbum -> V
reflVV -> V
special_ppVV -> Str -> V
mkV2Str -> V2
mkV2V -> V2
mkV2V -> Prep -> V2
v2VV2 -> V
mkV3V -> Prep -> Prep -> V3
dirV3V -> Prep -> V3
dirdirV3V -> V3
mkV0V -> V0
mkVSV -> VS
mkV2SV -> Prep -> V2S
mkVVV -> VV
deVVV -> VV
aVVV -> VV
mkV2VV -> Prep -> Prep -> V2V
mkVAV -> VA
mkV2AV -> Prep -> Prep -> V2A
mkVQV -> VQ
mkV2QV -> Prep -> V2Q
mkASA -> AS
mkA2SA -> Prep -> A2S
mkAVA -> Prep -> AV
mkA2VA -> Prep -> Prep -> A2V
V0Type
+ + +

Paradigms for Danish

+

+ +

+

+source http://www.cs.chalmers.se/~aarne/GF/lib/resource/src/danish/ParadigmsDan.gf +

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
FunctionType
GenderType
utrumGender
neutrumGender
NumberType
singularNumber
pluralNumber
CaseType
nominativeCase
genitiveCase
mkPrepStr -> Prep
noPrepPrep
mkN(bil : Str) -> N
mkN(hus : Str) -> Gender -> N
mkN(bil,bilen : Str) -> N
mkN(bil,bilen,biler : Str) -> N
mkN(dreng,drengen,drenge,drengene : Str) -> N
mkN2N -> Prep -> N2
regN2Str -> Gender -> N2
mkN3N -> Prep -> Prep -> N3
mkPNStr -> PN
mkPNStr -> Gender -> PN
mkPNN -> PN
mkA(fin : Str) -> A
mkA(fin,fint : Str) -> A
mkA(galen,galet,galne : Str) -> A
mkA(stor,stort,store,storre,storst : Str) -> A
mkAA -> A
mkA2A -> Prep -> A2
mkAdvStr -> Adv
mkAdVStr -> AdV
mkAdAStr -> AdA
mkV(snakke : Str) -> V
mkV(leve,levde : Str) -> V
mkV(drikke, drakk, drukket : Str) -> V
mkV(spise,spiser,spises,spiste,spist,spis : Str) -> V
mkVV -> Str -> V
vaereVV -> V
depVV -> V
reflVV -> V
mkV2Str -> V2
mkV2V -> V2
mkV2V -> Prep -> V2
mkV3V -> Prep -> Prep -> V3
dirV3V -> Prep -> V3
dirdirV3V -> V3
mkV0V -> V0
mkVSV -> VS
mkV2SV -> Prep -> V2S
mkVVV -> VV
mkV2VV -> Prep -> Prep -> V2V
mkVAV -> VA
mkV2AV -> Prep -> V2A
mkVQV -> VQ
mkV2QV -> Prep -> V2Q
mkASA -> AS
mkA2SA -> Prep -> A2S
mkAVA -> AV
mkA2VA -> Prep -> A2V
V0Type
+ + +

Paradigms for English

+

+ +

+

+source http://www.cs.chalmers.se/~aarne/GF/lib/resource/src/english/ParadigmsEng.gf +

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
FunctionType
GenderType
humanGender
nonhumanGender
masculineGender
feminineGender
NumberType
singularNumber
pluralNumber
CaseType
nominativeCase
genitiveCase
mkN(flash : Str) -> N
mkN(man,men : Str) -> N
mkN(man,men,man's,men's : Str) -> N
mkNGender -> N -> N
mkNStr -> N -> N
mkN2N -> Prep -> N2
mkN2N -> Str -> N2
mkN2Str -> Str -> N2
mkN2N -> N2
mkN2Str -> N2
mkN3N -> Prep -> Prep -> N3
mkPNStr -> PN
mkPNN -> PN
mkQuant(this, these : Str) -> Quant
mkQuant(no_sg, no_pl, none_sg, non_pl : Str) -> Quant
mkOrdStr -> Ord
mkA(happy : Str) -> A
mkA(fat,fatter : Str) -> A
mkA(good,better,best,well : Str) -> A
compoundAA -> A
simpleAA -> A
mkA2A -> Prep -> A2
mkA2A -> Str -> A2
mkA2Str -> Prep -> A2
mkA2Str -> Str -> A2
mkAdvStr -> Adv
mkAdVStr -> AdV
mkAdAStr -> AdA
mkAdNStr -> AdN
mkPrepStr -> Prep
noPrepPrep
mkConjStr -> Conj
mkConjStr -> Number -> Conj
mkConjStr -> Str -> Conj
mkConjStr -> Str -> Number -> Conj
mkV(cry : Str) -> V
mkV(stop, stopped : Str) -> V
mkV(drink, drank, drunk : Str) -> V
mkV(run, ran, run, running : Str) -> V
mkV(go, goes, went, gone, going : Str) -> V
mkVStr -> V -> V
partVV -> Str -> V
reflVV -> V
mkV2Str -> V2
mkV2V -> V2
mkV2V -> Prep -> V2
mkV2V -> Str -> V2
mkV2Str -> Prep -> V2
mkV2Str -> Str -> V2
mkV3V -> Prep -> Prep -> V3
mkV3V -> Prep -> V3
mkV3V -> Str -> V3
mkV3Str -> Str -> V3
mkV3V -> V3
mkV3Str -> V3
mkV0V -> V0
mkVSV -> VS
mkV2SV -> Prep -> V2S
mkVVV -> VV
mkV2VV -> Prep -> Prep -> V2V
mkVAV -> VA
mkV2AV -> Prep -> V2A
mkVQV -> VQ
mkV2QV -> Prep -> V2Q
mkASA -> AS
mkA2SA -> Prep -> A2S
mkAVA -> AV
mkA2VA -> Prep -> A2V
V0Type
mkSubjStr -> Subj = \s -> {s = s lock_Subj = <>}
+ + +

Paradigms for Finnish

+

+ +

+

+source http://www.cs.chalmers.se/~aarne/GF/lib/resource/src/finnish/ParadigmsFin.gf +

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
FunctionType
NumberType
singularNumber
pluralNumber
CaseType
nominativeCase
genitiveCase
partitiveCase
translativeCase
inessiveCase
elativeCase
illativeCase
adessiveCase
ablativeCase
allativeCase
prePrepCase -> Str -> Prep
postPrepCase -> Str -> Prep
postGenPrepStr -> Prep
casePrepCase -> Prep
mkN(talo : Str) -> N
mkN(savi,savia : Str) -> N
mkN(vesi,veden,vesiä : Str) -> N
mkN(vesi,veden,vesiä,vettä : Str) -> N
mkN(olo,olon,olona,oloa,oloon,olojen,oloja,oloina,oloissa,oloihin : Str) -> N
mkN(pika : Str) -> (juna : N) -> N
mkN(oma : N) -> (tunto : N) -> N
mkN2N -> N2
mkN2N -> Prep -> N2
mkN3N -> Prep -> Prep -> N3
mkPNStr -> PN
mkPNN -> PN
mkAStr -> A
mkAN -> A
mkAN -> (kivempaa,kivinta : Str) -> A
mkA(hyva,parempi,paras : N) -> (hyvin,paremmin,parhaiten : Str) -> A
mkA2A -> Prep -> A2 = \a,p -> a ** {c2 = p lock_A2 = <>};
mkV(huutaa : Str) -> V
mkV(huutaa,huusi : Str) -> V
mkV(huutaa,huudan,huusi : Str) -> V
mkV(
huusin,huusi,huusisi,huutanut,huudettu,huutaneeStr) -> V
caseVCase -> V -> V
vOllaV
mkV2Str -> V2
mkV2V -> V2
mkV2V -> Case -> V2
mkV2V -> Prep -> V2
mkV3V -> Prep -> Prep -> V3
dirV3V -> Case -> V3
dirdirV3V -> V3
mkV0V -> V0
mkVSV -> VS
mkV2SV -> Prep -> V2S
mkVVV -> VV
mkVVfV -> InfForm -> VV
mkV2VV -> Prep -> V2V
mkV2VfV -> Prep -> InfForm -> V2V
mkVAV -> Prep -> VA
mkV2AV -> Prep -> Prep -> V2A
mkVQV -> VQ
mkV2QV -> Prep -> V2Q
mkASA -> AS
mkA2SA -> Prep -> A2S
mkAVA -> AV
mkA2VA -> Prep -> A2V
V0Type
+ + +

Paradigms for French

+

+ +

+

+source http://www.cs.chalmers.se/~aarne/GF/lib/resource/src/french/ParadigmsFre.gf +

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
FunctionType
GenderType
masculineGender
feminineGender
NumberType
singularNumber
pluralNumber
accusativePrep
genitivePrep
dativePrep
mkPrepStr -> Prep
mkN(cheval : Str) -> N
mkN(foie : Str) -> Gender -> N
mkN(oeil,yeux : Str) -> Gender -> N
mkNN -> Str -> N
mkN2N -> Prep -> N2
deN2N -> N2
aN2N -> N2
mkN3N -> Prep -> Prep -> N3
mkPNStr -> PN
mkPNStr -> Gender -> PN
mkA(cher : Str) -> A
mkA(sec,seche : Str) -> A
mkA(banal,banale,banaux,banalement : Str) -> A
mkAA -> A -> A
prefixAA -> A
mkA2A -> Prep -> A2
mkAdvStr -> Adv
mkAdVStr -> AdV
mkAdAStr -> AdA
mkV(finir : Str) -> V
mkV(jeter,jette,jettera : Str) -> V
mkVV2 -> V
etreVV -> V
reflVV -> V
mkV2Str -> V2 = \s -> dirV2 (regV s)
mkV2V -> V2 = dirV2
mkV2V -> Prep -> V2 = mmkV2
mkV3V -> V3
mkV3V -> Prep -> V3
mkV3V -> Prep -> Prep -> V3
mkV0V -> V0
mkVSV -> VS
mkV2SV -> Prep -> V2S
mkVVV -> VV
deVVV -> VV
aVVV -> VV
mkV2VV -> Prep -> Prep -> V2V
mkVAV -> VA
mkV2AV -> Prep -> Prep -> V2A
mkVQV -> VQ
mkV2QV -> Prep -> V2Q
mkASA -> AS
mkA2SA -> Prep -> A2S
mkAVA -> Prep -> AV
mkA2VA -> Prep -> Prep -> A2V
V0Type
+ + +

Paradigms for German

+

+ +

+

+source http://www.cs.chalmers.se/~aarne/GF/lib/resource/src/german/ParadigmsGer.gf +

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
FunctionType
GenderType
masculineGender
feminineGender
neuterGender
CaseType
nominativeCase
accusativeCase
dativeCase
genitiveCase
NumberType
singularNumber
pluralNumber
mkN(Stufe : Str) -> N
mkN(Bild,Bilder : Str) -> Gender -> N
mkN(x1,_,_,_,_,x6 : Str) -> Gender -> N
mkN2Str -> N2
mkN2N -> N2
mkN2N -> Prep -> N2
mkN3N -> Prep -> Prep -> N3
mkPNStr -> PN
mkPN(nom,gen : Str) -> PN
mkPN(nom,acc,dat,gen : Str) -> PN
mkAStr -> A
mkA(gut,besser,beste : Str) -> A
mkA(gut,gute,besser,beste : Str) -> A
invarAStr -> A
mkA2A -> Prep -> A2
mkAdvStr -> Adv
mkPrepStr -> Case -> Prep
accPrepPrep
datPrepPrep
genPrepPrep
von_PrepPrep
zu_PrepPrep
mkV(führen : Str) -> V
mkV(sehen,sieht,sah,sähe,gesehen : Str) -> V
mkV(geben, gibt, gib, gab, gäbe, gegeben : Str) -> V
mkVStr -> V -> V
no_geVV -> V
seinVV -> V
habenVV -> V
reflVV -> Case -> V
mkV2Str -> V2
mkV2V -> V2
mkV2V -> Prep -> V2
mkV2V -> Case -> V2
mkV3V -> Prep -> Prep -> V3
dirV3V -> Prep -> V3
accdatV3V -> V3
mkV0V -> V0
mkVSV -> VS
mkV2SV -> Prep -> V2S
mkVVV -> VV
mkV2VV -> Prep -> V2V
mkVAV -> VA
mkV2AV -> Prep -> V2A
mkVQV -> VQ
mkV2QV -> Prep -> V2Q
mkASA -> AS
mkA2SA -> Prep -> A2S
mkAVA -> AV
mkA2VA -> Prep -> A2V
V0Type
+ + +

Paradigms for Italian

+

+ +

+

+source http://www.cs.chalmers.se/~aarne/GF/lib/resource/src/italian/ParadigmsIta.gf +

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
FunctionType
GenderType
masculineGender
feminineGender
NumberType
singularNumber
pluralNumber
--PrepType
accusativePrep
genitivePrep
dativePrep
mkPrepStr -> Prep
mkN(cane : Str) -> N
mkN(carne : Str) -> Gender -> N
mkN(uomo,uomini : Str) -> Gender -> N
mkNN -> Str -> N
mkN2Str -> N2
mkN2N -> Prep -> N2
mkN3N -> Prep -> Prep -> N3
mkPNStr -> PN
mkPNStr -> Gender -> PN
mkA(bianco : Str) -> A
mkA(solo,sola,soli,sole,solamente : Str) -> A
mkAA -> A -> A
prefixAA -> A = prefA
mkA2A -> Prep -> A2
mkAdvStr -> Adv
mkAdVStr -> AdV
mkAdAStr -> AdA
mkVStr -> V
mkVVerbo -> V
mkV(udire,odo,ode,udiamo,udiro,udii,udisti,udi,udirono,odi,udito : Str) -> V
essereVV -> V
reflVV -> V
mkV2Str -> V2
mkV2V -> V2
mkV2V -> Prep -> V2
v2VV2 -> V
mkV3V -> Prep -> Prep -> V3
dirV3V -> Prep -> V3
dirdirV3V -> V3
mkV0V -> V0
mkVSV -> VS
mkV2SV -> Prep -> V2S
mkVVV -> VV
deVVV -> VV
aVVV -> VV
mkV2VV -> Prep -> Prep -> V2V
mkVAV -> VA
mkV2AV -> Prep -> Prep -> V2A
mkVQV -> VQ
mkV2QV -> Prep -> V2Q
mkASA -> AS
mkA2SA -> Prep -> A2S
mkAVA -> Prep -> AV
mkA2VA -> Prep -> Prep -> A2V
V0Type
+ + +

Paradigms for Norwegian

+

+ +

+

+source http://www.cs.chalmers.se/~aarne/GF/lib/resource/src/norwegian/ParadigmsNor.gf +

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
FunctionType
GenderType
masculineGender
feminineGender
neutrumGender
NumberType
singularNumber
pluralNumber
CaseType
nominativeCase
genitiveCase
mkPrepStr -> Prep
noPrepPrep
mkNStr -> N
mkNStr -> Gender -> N
mkN(bil,bilen : Str) -> N
mkN(dreng,drengen,drenger,drengene : Str) -> N
mkN2N -> Prep -> N2
regN2Str -> Gender -> N2
mkN3N -> Prep -> Prep -> N3
mkPNStr -> PN
mkPNStr -> Gender -> PN
mkPNN -> PN
mkA(fin : Str) -> A
mkA(fin,fint : Str) -> A
mkA(galen,galet,galne : Str) -> A
mkA(stor,stort,store,storre,storst : Str) -> A
mkAA -> A
mkA2A -> Prep -> A2
mkAdvStr -> Adv
mkAdVStr -> AdV
mkAdAStr -> AdA
mkV(snakke : Str) -> V
mkV(leve,levde : Str) -> V
mkV(drikke, drakk, drukket : Str) -> V
mkV(spise,spiser,spises,spiste,spist,spis : Str) -> V
mkVV -> Str -> V
vaereVV -> V
depVV -> V
reflVV -> V
mkV2Str -> V2
mkV2V -> V2
mkV2V -> Prep -> V2
mkV3V -> Prep -> Prep -> V3
dirV3V -> Prep -> V3
dirdirV3V -> V3
mkV0V -> V0
mkVSV -> VS
mkV2SV -> Prep -> V2S
mkVVV -> VV
mkV2VV -> Prep -> Prep -> V2V
mkVAV -> VA
mkV2AV -> Prep -> V2A
mkVQV -> VQ
mkV2QV -> Prep -> V2Q
mkASA -> AS
mkA2SA -> Prep -> A2S
mkAVA -> AV
mkA2VA -> Prep -> A2V
V0Type
+ + +

Paradigms for Romanian

+

+ +

+

+source http://www.cs.chalmers.se/~aarne/GF/lib/resource/src/romanian/ParadigmsRon.gf +

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
FunctionType
NGenderType
masculineNGender
feminineNGender
neuterNGender
GenderType
MasculineGender
FeminineGender
AnimType
animateAnim
inanimateAnim;
NumberType
singularNumber
pluralNumber
PrepositionType
NCaseType
AccNCase
DatNCase
GenNCase
mkPrepStr -> NCase -> Prep
noPrepNCase -> Prep
mkN2N -> Prep -> N2
mkN3N -> Prep -> Prep -> N3
mkPNStr -> PN = mkPropN
mkPNStr -> Gender -> PN = mkPropNoun
mkPNStr -> Gender -> Number -> PN = mkProperNoun;
mkPropNStr -> PN = \Ion ->
mkPropNounStr -> Gender -> PN = \Ion, gen ->
mkProperNounStr -> Gender -> Number -> PN = \Ion, gen, num ->
mkA2A -> Prep -> A2
+ + +

Paradigms for Russian

+

+ +

+

+source http://www.cs.chalmers.se/~aarne/GF/lib/resource/src/russian/ParadigmsRus.gf +

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
FunctionType
GenderType
masculineGender
feminineGender
neuterGender
CaseType
nominativeCase
genitiveCase
dativeCase
accusativeCase
instructiveCase
prepositionalCase
NumberType
singularNumber
pluralNumber
mkN(karta : Str) -> N
mkN(tigr : Str) -> Animacy -> N
mkN(nomSg, genSg, datSg, accSg, instSg, preposSg, prepos2Sg, nomPl, genPl, datPl, accPl, instPl, preposPl : Str) -> Gender -> Animacy -> N
mkN2N -> N2
mkN2N -> Prep -> N2
mkN3N -> Prep -> Prep -> N3
mkPNStr -> Gender -> Animacy -> PN
nounPNN -> PN
mkA(positive : Str) -> A
mkA(positive, comparative : Str) -> A
mkA2A -> Str -> Case -> A2
mkAdvStr -> Adv
mkVAspect -> (presentSgP1,presentSgP2,presentSgP3,
pastSgP1,imperative,infinitiveStr) -> V
mkV2V -> Str -> Case -> V2
mkV3V -> Str -> Str -> Case -> Case -> V3
dirV2V -> V2
tvDirDirV -> V3
+ + +

Paradigms for Spanish

+

+ +

+

+source http://www.cs.chalmers.se/~aarne/GF/lib/resource/src/spanish/ParadigmsSpa.gf +

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
FunctionType
GenderType
masculineGender
feminineGender
NumberType
singularNumber
pluralNumber
accusativePrep
genitivePrep
dativePrep
mkPrepStr -> Prep
mkN(luz : Str) -> N
mkNStr -> Gender -> N
mkN(baston,bastones : Str) -> Gender -> N
compNN -> Str -> N
mkN2N -> Prep -> N2
deN2N -> N2
aN2N -> N2
mkN3N -> Prep -> Prep -> N3
mkPN(Anna : Str) -> PN
mkPN(Pilar : Str) -> Gender -> PN
mkA(util : Str) -> A
mkA(solo,sola,solos,solas,solamente : Str) -> A
mkA(bueno : A) -> (mejor : A) -> A
prefixAA -> A
mkA2A -> Prep -> A2
mkAdvStr -> Adv
mkAdVStr -> AdV
mkAdAStr -> AdA
mkV(pagar : Str) -> V
mkV(mostrar,muestro : Str) -> V
mkVVerbum -> V
reflVV -> V
special_ppVV -> Str -> V
mkV2Str -> V2
mkV2V -> V2
mkV2V -> Prep -> V2
v2VV2 -> V
mkV3V -> Prep -> Prep -> V3
dirV3V -> Prep -> V3
dirdirV3V -> V3
mkV0V -> V0
mkVSV -> VS
mkV2SV -> Prep -> V2S
mkVVV -> VV
deVVV -> VV
aVVV -> VV
mkV2VV -> Prep -> Prep -> V2V
mkVAV -> VA
mkV2AV -> Prep -> Prep -> V2A
mkVQV -> VQ
mkV2QV -> Prep -> V2Q
mkASA -> AS
mkA2SA -> Prep -> A2S
mkAVA -> Prep -> AV
mkA2VA -> Prep -> Prep -> A2V
V0Type
+ + +

Paradigms for Swedish

+

+ +

+

+source http://www.cs.chalmers.se/~aarne/GF/lib/resource/src/swedish/ParadigmsSwe.gf +

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
FunctionType
GenderType
utrumGender
neutrumGender
NumberType
singularNumber
pluralNumber
CaseType
nominativeCase
genitiveCase
mkPrepStr -> Prep
noPrepPrep
mkN(apa : Str) -> N
mkN(lik : Str) -> Gender -> N
mkN(nyckel,nycklar : Str) -> N
mkN(museum,museet,museer,museerna : Str) -> N
mkN2Str -> N2
mkN2N -> Prep -> N2
mkN3N -> Prep -> Prep -> N3
mkPNStr -> PN
mkPNStr -> Gender -> PN
mkPN(jesus,jesu : Str) -> Gender -> PN
mkA(billig : Str) -> A
mkA(bred,brett : Str) -> A
mkA(tung,tyngre,tyngst : Str) -> A
mkA(god,gott,goda,battre,bast : Str) -> A
mkA(liten,litet,lilla,sma,mindre,minst,minsta : Str) -> A
compoundAA -> A
mkA2A -> Prep -> A2
mkAdvStr -> Adv
mkAdVStr -> AdV
mkAdAStr -> AdA
mkV(stämmer : Str) -> V
mkV(dricka,drack,druckit : Str) -> V
mkV(gå,går,gå,gick,gått,gången : Str) -> V
mkVV -> Str -> V
depVV -> V
reflVV -> V
mkV2Str -> V2
mkV2V -> V2
mkV2V -> Prep -> V2
mkV3Str -> V3
mkV3V -> V3
mkV3V -> Prep -> V3
mkV3V -> Prep -> Prep -> V3
mkV0V -> V0
mkVSV -> VS
mkV2SV -> Prep -> V2S
mkVVV -> VV
mkV2VV -> Prep -> Prep -> V2V
mkVAV -> VA
mkV2AV -> Prep -> V2A
mkVQV -> VQ
mkV2QV -> Prep -> V2Q
mkASA -> AS
mkA2SA -> Prep -> A2S
mkAVA -> AV
mkA2VA -> Prep -> A2V
V0Type
+ + +

Browsing the libraries with GF commands

+

+New: Browsing by syntax editor +directly on the web. +

+

+All of the following assume +

+
+    cd $GF_LIB_PATH
+
+

+To try out inflection paradigms: +

+
+    > i -path=alltenses -retain alltenses/ParadigmsGer.gfo
+    > cc mkN "Farbe"
+
+

+To try out overloaded syntax, test lexicon, and inflection paradigms: +

+
+    > i -path=alltenses -retain alltenses/TryGer.gfo
+    > cc mkCl (mkNP this_Quant (mkN "Farbe")) (mkA "dunkel")
+
+

+ +

An Example of Usage

+

+The standard way of building an application has the following modules. +

+

+An abstract syntax: +

+
+    abstract Music = {    
+    cat 
+      Kind, 
+      Property ;
+    fun 
+      PropKind : Kind -> Property -> Kind ; 
+      Song : Kind ;
+      American : Property ;
+    }
+
+

+A domain lexicon interface: +

+
+    interface LexMusic = open Cat in {
+    oper
+      song_N : N ;
+      american_A : A ;
+    }
+
+

+A functor on Syntax and the domain lexicon interface: +

+
+    incomplete concrete MusicI of Music = open Syntax, MusicLex in {
+    lincat 
+      Kind = CN ;
+      Property = AP ;
+    lin
+      PropKind k p = mkCN p k ;
+      Song = mkCN song_N ;
+      American = mkAP american_A ;
+    }
+
+

+For each language, an instance of the domain lexicon: +

+
+    instance LexMusicGer of LexMusic = CatGer ** open ParadigmsGer in {    
+    oper
+      song_N = mkN "Lied" "Lieder" neuter ;
+      american_A = mkA "amerikanisch" ;
+    }
+
+

+For each language, an instantiation of the functor: +

+
+    --# -path=.:present:prelude
+  
+    concrete MusicGer of Music = MusicI with
+      (Syntax = SyntaxGer),
+      (LexMusic = LexMusicGer) ;
+
+

+ + + + diff --git a/next-lib/doc/synopsis.txt b/next-lib/doc/synopsis.txt new file mode 100644 index 000000000..247220d2e --- /dev/null +++ b/next-lib/doc/synopsis.txt @@ -0,0 +1,1703 @@ +GF Resource Grammar Library: Synopsis +B. Bringert and A. Ranta + + +%!postproc(html): '(SRC="categories.png")' '\1 USEMAP="#categories"' +%!postproc(html): '#LParadigms' '' +%!postproc(tex): '#LParadigms' '' +%!postproc(html): '(?i)(HREF="#A")( TITLE="[^"]*")?' '\1 TITLE="A - one-place adjective"' +%!postproc(html): '(?i)(HREF="#A2")( TITLE="[^"]*")?' '\1 TITLE="A2 - two-place adjective"' +%!postproc(html): '(?i)(HREF="#AP")( TITLE="[^"]*")?' '\1 TITLE="AP - adjectival phrase"' +%!postproc(html): '(?i)(HREF="#AdA")( TITLE="[^"]*")?' '\1 TITLE="AdA - adjective-modifying adverb"' +%!postproc(html): '(?i)(HREF="#AdN")( TITLE="[^"]*")?' '\1 TITLE="AdN - numeral-modifying adverb"' +%!postproc(html): '(?i)(HREF="#AdV")( TITLE="[^"]*")?' '\1 TITLE="AdV - adverb directly attached to verb"' +%!postproc(html): '(?i)(HREF="#Adv")( TITLE="[^"]*")?' '\1 TITLE="Adv - verb-phrase-modifying adverb"' +%!postproc(html): '(?i)(HREF="#Ant")( TITLE="[^"]*")?' '\1 TITLE="Ant - anteriority"' +%!postproc(html): '(?i)(HREF="#CAdv")( TITLE="[^"]*")?' '\1 TITLE="CAdv - comparative adverb"' +%!postproc(html): '(?i)(HREF="#CN")( TITLE="[^"]*")?' '\1 TITLE="CN - common noun (without determiner)"' +%!postproc(html): '(?i)(HREF="#Card")( TITLE="[^"]*")?' '\1 TITLE="Card - cardinal number"' +%!postproc(html): '(?i)(HREF="#Cl")( TITLE="[^"]*")?' '\1 TITLE="Cl - declarative clause, with all tenses"' +%!postproc(html): '(?i)(HREF="#Comp")( TITLE="[^"]*")?' '\1 TITLE="Comp - complement of copula, such as AP"' +%!postproc(html): '(?i)(HREF="#Conj")( TITLE="[^"]*")?' '\1 TITLE="Conj - conjunction"' +%!postproc(html): '(?i)(HREF="#Det")( TITLE="[^"]*")?' '\1 TITLE="Det - determiner phrase"' +%!postproc(html): '(?i)(HREF="#Digits")( TITLE="[^"]*")?' '\1 TITLE="Digits - cardinal or ordinal in digits"' +%!postproc(html): '(?i)(HREF="#IAdv")( TITLE="[^"]*")?' '\1 TITLE="IAdv - interrogative adverb"' +%!postproc(html): '(?i)(HREF="#IComp")( TITLE="[^"]*")?' '\1 TITLE="IComp - interrogative complement of copula"' +%!postproc(html): '(?i)(HREF="#IDet")( TITLE="[^"]*")?' '\1 TITLE="IDet - interrogative determiner"' +%!postproc(html): '(?i)(HREF="#IP")( TITLE="[^"]*")?' '\1 TITLE="IP - interrogative pronoun"' +%!postproc(html): '(?i)(HREF="#Imp")( TITLE="[^"]*")?' '\1 TITLE="Imp - imperative"' +%!postproc(html): '(?i)(HREF="#N")( TITLE="[^"]*")?' '\1 TITLE="N - common noun"' +%!postproc(html): '(?i)(HREF="#N2")( TITLE="[^"]*")?' '\1 TITLE="N2 - relational noun"' +%!postproc(html): '(?i)(HREF="#N3")( TITLE="[^"]*")?' '\1 TITLE="N3 - three-place relational noun"' +%!postproc(html): '(?i)(HREF="#NP")( TITLE="[^"]*")?' '\1 TITLE="NP - noun phrase (subject or object)"' +%!postproc(html): '(?i)(HREF="#Num")( TITLE="[^"]*")?' '\1 TITLE="Num - number determining element"' +%!postproc(html): '(?i)(HREF="#Numeral")( TITLE="[^"]*")?' '\1 TITLE="Numeral - cardinal or ordinal in words"' +%!postproc(html): '(?i)(HREF="#Ord")( TITLE="[^"]*")?' '\1 TITLE="Ord - ordinal number (used in Det)"' +%!postproc(html): '(?i)(HREF="#PConj")( TITLE="[^"]*")?' '\1 TITLE="PConj - phrase-beginning conjunction"' +%!postproc(html): '(?i)(HREF="#PN")( TITLE="[^"]*")?' '\1 TITLE="PN - proper name"' +%!postproc(html): '(?i)(HREF="#Phr")( TITLE="[^"]*")?' '\1 TITLE="Phr - phrase in a text"' +%!postproc(html): '(?i)(HREF="#Pol")( TITLE="[^"]*")?' '\1 TITLE="Pol - polarity"' +%!postproc(html): '(?i)(HREF="#Predet")( TITLE="[^"]*")?' '\1 TITLE="Predet - predeterminer (prefixed Quant)"' +%!postproc(html): '(?i)(HREF="#Prep")( TITLE="[^"]*")?' '\1 TITLE="Prep - preposition, or just case"' +%!postproc(html): '(?i)(HREF="#Pron")( TITLE="[^"]*")?' '\1 TITLE="Pron - personal pronoun"' +%!postproc(html): '(?i)(HREF="#QCl")( TITLE="[^"]*")?' '\1 TITLE="QCl - question clause, with all tenses"' +%!postproc(html): '(?i)(HREF="#QS")( TITLE="[^"]*")?' '\1 TITLE="QS - question"' +%!postproc(html): '(?i)(HREF="#Quant")( TITLE="[^"]*")?' '\1 TITLE="Quant - quantifier ('nucleus' of Det)"' +%!postproc(html): '(?i)(HREF="#RCl")( TITLE="[^"]*")?' '\1 TITLE="RCl - relative clause, with all tenses"' +%!postproc(html): '(?i)(HREF="#RP")( TITLE="[^"]*")?' '\1 TITLE="RP - relative pronoun"' +%!postproc(html): '(?i)(HREF="#RS")( TITLE="[^"]*")?' '\1 TITLE="RS - relative"' +%!postproc(html): '(?i)(HREF="#S")( TITLE="[^"]*")?' '\1 TITLE="S - declarative sentence"' +%!postproc(html): '(?i)(HREF="#SC")( TITLE="[^"]*")?' '\1 TITLE="SC - embedded sentence or question"' +%!postproc(html): '(?i)(HREF="#Subj")( TITLE="[^"]*")?' '\1 TITLE="Subj - subjunction"' +%!postproc(html): '(?i)(HREF="#Temp")( TITLE="[^"]*")?' '\1 TITLE="Temp - temporal and aspectual features"' +%!postproc(html): '(?i)(HREF="#Tense")( TITLE="[^"]*")?' '\1 TITLE="Tense - tense"' +%!postproc(html): '(?i)(HREF="#Text")( TITLE="[^"]*")?' '\1 TITLE="Text - text consisting of several phrases"' +%!postproc(html): '(?i)(HREF="#Utt")( TITLE="[^"]*")?' '\1 TITLE="Utt - sentence, question, word..."' +%!postproc(html): '(?i)(HREF="#V")( TITLE="[^"]*")?' '\1 TITLE="V - one-place verb"' +%!postproc(html): '(?i)(HREF="#V2")( TITLE="[^"]*")?' '\1 TITLE="V2 - two-place verb"' +%!postproc(html): '(?i)(HREF="#V2A")( TITLE="[^"]*")?' '\1 TITLE="V2A - verb with NP and AP complement"' +%!postproc(html): '(?i)(HREF="#V2Q")( TITLE="[^"]*")?' '\1 TITLE="V2Q - verb with NP and Q complement"' +%!postproc(html): '(?i)(HREF="#V2S")( TITLE="[^"]*")?' '\1 TITLE="V2S - verb with NP and S complement"' +%!postproc(html): '(?i)(HREF="#V2V")( TITLE="[^"]*")?' '\1 TITLE="V2V - verb with NP and V complement"' +%!postproc(html): '(?i)(HREF="#V3")( TITLE="[^"]*")?' '\1 TITLE="V3 - three-place verb"' +%!postproc(html): '(?i)(HREF="#VA")( TITLE="[^"]*")?' '\1 TITLE="VA - adjective-complement verb"' +%!postproc(html): '(?i)(HREF="#VP")( TITLE="[^"]*")?' '\1 TITLE="VP - verb phrase"' +%!postproc(html): '(?i)(HREF="#VPSlash")( TITLE="[^"]*")?' '\1 TITLE="VPSlash - verb phrase missing complement"' +%!postproc(html): '(?i)(HREF="#VQ")( TITLE="[^"]*")?' '\1 TITLE="VQ - question-complement verb"' +%!postproc(html): '(?i)(HREF="#VS")( TITLE="[^"]*")?' '\1 TITLE="VS - sentence-complement verb"' +%!postproc(html): '(?i)(HREF="#VV")( TITLE="[^"]*")?' '\1 TITLE="VV - verb-phrase-complement verb"' +%!postproc(html): '(?i)(HREF="#Voc")( TITLE="[^"]*")?' '\1 TITLE="Voc - vocative or "please""' +%!include: synopsis-intro.txt +=Categories= + + +Source 1: [``http://www.cs.chalmers.se/~aarne/GF/lib/resource/src/abstract/Common.gf`` ../src/abstract/Common.gf] + + +Source 2: [``http://www.cs.chalmers.se/~aarne/GF/lib/resource/src/abstract/Cat.gf`` ../src/abstract/Cat.gf] + + +==A hierarchic view== + +%!include: categories-intro.txt +==Explanations== + +|| Category | Explanation | Example || +| [A #A] | one-place adjective | //warm// | +| [A2 #A2] | two-place adjective | //divisible// | +| [AP #AP] | adjectival phrase | //very warm// | +| [AdA #AdA] | adjective-modifying adverb | //very// | +| [AdN #AdN] | numeral-modifying adverb | //more than// | +| [AdV #AdV] | adverb directly attached to verb | //always// | +| [Adv #Adv] | verb-phrase-modifying adverb | //in the house// | +| [Ant #Ant] | anteriority | simultaneous, anterior | +| [CAdv #CAdv] | comparative adverb | //more// | +| [CN #CN] | common noun (without determiner) | //red house// | +| [Card #Card] | cardinal number | //seven// | +| [Cl #Cl] | declarative clause, with all tenses | //she looks at this// | +| [Comp #Comp] | complement of copula, such as AP | //very warm// | +| [Conj #Conj] | conjunction | //and// | +| [Det #Det] | determiner phrase | //those seven// | +| [Digits #Digits] | cardinal or ordinal in digits | //1,000/1,000th// | +| [IAdv #IAdv] | interrogative adverb | //why// | +| [IComp #IComp] | interrogative complement of copula | //where// | +| [IDet #IDet] | interrogative determiner | //how many// | +| [IP #IP] | interrogative pronoun | //who// | +| [Imp #Imp] | imperative | //look at this// | +| [N #N] | common noun | //house// | +| [N2 #N2] | relational noun | //son// | +| [N3 #N3] | three-place relational noun | //connection// | +| [NP #NP] | noun phrase (subject or object) | //the red house// | +| [Num #Num] | number determining element | //seven// | +| [Numeral #Numeral] | cardinal or ordinal in words | //five/fifth// | +| [Ord #Ord] | ordinal number (used in Det) | //seventh// | +| [PConj #PConj] | phrase-beginning conjunction | //therefore// | +| [PN #PN] | proper name | //Paris// | +| [Phr #Phr] | phrase in a text | //but be quiet please// | +| [Pol #Pol] | polarity | positive, negative | +| [Predet #Predet] | predeterminer (prefixed Quant) | //all// | +| [Prep #Prep] | preposition, or just case | //in// | +| [Pron #Pron] | personal pronoun | //she// | +| [QCl #QCl] | question clause, with all tenses | //why does she walk// | +| [QS #QS] | question | //where did she live// | +| [Quant #Quant] | quantifier ('nucleus' of Det) | //this/these// | +| [RCl #RCl] | relative clause, with all tenses | //in which she lives// | +| [RP #RP] | relative pronoun | //in which// | +| [RS #RS] | relative | //in which she lived// | +| [S #S] | declarative sentence | //she lived here// | +| [SC #SC] | embedded sentence or question | //that it rains// | +| [Subj #Subj] | subjunction | //if// | +| [Temp #Temp] | temporal and aspectual features | past anterior | +| [Tense #Tense] | tense | present, past, future | +| [Text #Text] | text consisting of several phrases | //He is here. Why?// | +| [Utt #Utt] | sentence, question, word... | //be quiet// | +| [V #V] | one-place verb | //sleep// | +| [V2 #V2] | two-place verb | //love// | +| [V2A #V2A] | verb with NP and AP complement | //paint// | +| [V2Q #V2Q] | verb with NP and Q complement | //ask// | +| [V2S #V2S] | verb with NP and S complement | //tell// | +| [V2V #V2V] | verb with NP and V complement | //cause// | +| [V3 #V3] | three-place verb | //show// | +| [VA #VA] | adjective-complement verb | //look// | +| [VP #VP] | verb phrase | //is very warm// | +| [VPSlash #VPSlash] | verb phrase missing complement | //give to John// | +| [VQ #VQ] | question-complement verb | //wonder// | +| [VS #VS] | sentence-complement verb | //claim// | +| [VV #VV] | verb-phrase-complement verb | //want// | +| [Voc #Voc] | vocative or "please" | //my darling// | + + +=Syntax Rules and Structural Words= + + +Source 1: [``http://www.cs.chalmers.se/~aarne/GF/lib/resource/src/api/Constructors.gf`` ../src/api/Constructors.gf] + + +Source 2: [``http://www.cs.chalmers.se/~aarne/GF/lib/resource/src/abstract/Structural.gf`` ../src/abstract/Structural.gf] + + +==A - one-place adjective==[A] +Lexical category, constructors given in +[lexical paradigms #RParadigms]. +==A2 - two-place adjective==[A2] +Lexical category, constructors given in +[lexical paradigms #RParadigms]. +==AP - adjectival phrase==[AP] +|| Function | Type | Example || +| ``comparAP`` | [A #A] ``->`` [AP #AP] | //warmer// | +| ``mkAP`` | [A #A] ``->`` [AP #AP] | //old// | +| ``mkAP`` | [A #A] ``->`` [NP #NP] ``->`` [AP #AP] | //older than John// | +| ``mkAP`` | [A2 #A2] ``->`` [NP #NP] ``->`` [AP #AP] | //married to her// | +| ``mkAP`` | [A2 #A2] ``->`` [AP #AP] | //married// | +| ``mkAP`` | [AP #AP] ``->`` [S #S] ``->`` [AP #AP] | //probable that John walks// | +| ``mkAP`` | [AP #AP] ``->`` [QS #QS] ``->`` [AP #AP] | //uncertain if John walks// | +| ``mkAP`` | [AP #AP] ``->`` [VP #VP] ``->`` [AP #AP] | //ready to go// | +| ``mkAP`` | [AdA #AdA] ``->`` [A #A] ``->`` [AP #AP] | //very old// | +| ``mkAP`` | [AdA #AdA] ``->`` [AP #AP] ``->`` [AP #AP] | //very very old// | +| ``mkAP`` | [Conj #Conj] ``->`` [AP #AP] ``->`` [AP #AP] ``->`` [AP #AP] | //old and big// | +| ``mkAP`` | [Conj #Conj] ``->`` [ListAP #ListAP] ``->`` [AP #AP] | //old, big, and warm// | +| ``mkAP`` | [Ord #Ord] ``->`` [AP #AP] | //oldest// | +| ``mkAP`` | [CAdv #CAdv] ``->`` [AP #AP] ``->`` [NP #NP] ``->`` [AP #AP] | //as old as John// | +| ``reflAP`` | [A2 #A2] ``->`` [AP #AP] | //married to himself// | +==AdA - adjective-modifying adverb==[AdA] +|| Function | Type | Example || +| ``almost_AdA`` | [AdA #AdA] | //almost// | +| ``quite_Adv`` | [AdA #AdA] | //quite// | +| ``so_AdA`` | [AdA #AdA] | //so// | +| ``too_AdA`` | [AdA #AdA] | //too// | +| ``very_AdA`` | [AdA #AdA] | //very// | +==AdN - numeral-modifying adverb==[AdN] +|| Function | Type | Example || +| ``almost_AdN`` | [AdN #AdN] | //almost// | +| ``at_least_AdN`` | [AdN #AdN] | //at// | +| ``at_most_AdN`` | [AdN #AdN] | //at// | +| ``mkAdN`` | [CAdv #CAdv] ``->`` [AdN #AdN] | //more than// | +==AdV - adverb directly attached to verb==[AdV] +|| Function | Type | Example || +| ``always_AdV`` | [AdV #AdV] | //always// | +==Adv - verb-phrase-modifying adverb==[Adv] +|| Function | Type | Example || +| ``everywhere_Adv`` | [Adv #Adv] | //everywhere// | +| ``here7from_Adv`` | [Adv #Adv] | //from here// | +| ``here7to_Adv`` | [Adv #Adv] | //to here// | +| ``here_Adv`` | [Adv #Adv] | //here// | +| ``mkAdv`` | [A #A] ``->`` [Adv #Adv] | //warmly// | +| ``mkAdv`` | [Prep #Prep] ``->`` [NP #NP] ``->`` [Adv #Adv] | //with John// | +| ``mkAdv`` | [Subj #Subj] ``->`` [S #S] ``->`` [Adv #Adv] | //when John walks// | +| ``mkAdv`` | [CAdv #CAdv] ``->`` [A #A] ``->`` [NP #NP] ``->`` [Adv #Adv] | //more warmly than John// | +| ``mkAdv`` | [CAdv #CAdv] ``->`` [A #A] ``->`` [S #S] ``->`` [Adv #Adv] | //more warmly than John walks// | +| ``mkAdv`` | [AdA #AdA] ``->`` [Adv #Adv] ``->`` [Adv #Adv] | //very warmly// | +| ``mkAdv`` | [Conj #Conj] ``->`` [Adv #Adv] ``->`` [Adv #Adv] ``->`` [Adv #Adv] | //here and now// | +| ``mkAdv`` | [Conj #Conj] ``->`` [ListAdv #ListAdv] ``->`` [Adv #Adv] | //with John, here and now// | +| ``somewhere_Adv`` | [Adv #Adv] | //somewhere// | +| ``there7from_Adv`` | [Adv #Adv] | //from there// | +| ``there7to_Adv`` | [Adv #Adv] | //to there// | +| ``there_Adv`` | [Adv #Adv] | //there// | +==Ant - anteriority==[Ant] +|| Function | Type | Example || +| ``anteriorAnt`` | [Ant #Ant] | //(John has walked)// | +| ``simultaneousAnt`` | [Ant #Ant] | //(John walks) [default]// | +==CAdv - comparative adverb==[CAdv] +|| Function | Type | Example || +| ``as_CAdv`` | [CAdv #CAdv] | //as// | +| ``less_CAdv`` | [CAdv #CAdv] | //less// | +| ``more_CAdv`` | [CAdv #CAdv] | //more// | +==CN - common noun (without determiner)==[CN] +|| Function | Type | Example || +| ``mkCN`` | [N #N] ``->`` [CN #CN] | //house// | +| ``mkCN`` | [N2 #N2] ``->`` [NP #NP] ``->`` [CN #CN] | //mother of John// | +| ``mkCN`` | [N3 #N3] ``->`` [NP #NP] ``->`` [NP #NP] ``->`` [CN #CN] | //distance from this city to Paris// | +| ``mkCN`` | [N2 #N2] ``->`` [CN #CN] | //son// | +| ``mkCN`` | [N3 #N3] ``->`` [CN #CN] | //flight// | +| ``mkCN`` | [A #A] ``->`` [N #N] ``->`` [CN #CN] | //big house// | +| ``mkCN`` | [A #A] ``->`` [CN #CN] ``->`` [CN #CN] | //big blue house// | +| ``mkCN`` | [AP #AP] ``->`` [N #N] ``->`` [CN #CN] | //very big house// | +| ``mkCN`` | [AP #AP] ``->`` [CN #CN] ``->`` [CN #CN] | //very big blue house// | +| ``mkCN`` | [N #N] ``->`` [RS #RS] ``->`` [CN #CN] | //house that John loves// | +| ``mkCN`` | [CN #CN] ``->`` [RS #RS] ``->`` [CN #CN] | //big house that John loves// | +| ``mkCN`` | [N #N] ``->`` [Adv #Adv] ``->`` [CN #CN] | //house in the city// | +| ``mkCN`` | [CN #CN] ``->`` [Adv #Adv] ``->`` [CN #CN] | //big house in the city// | +| ``mkCN`` | [CN #CN] ``->`` [S #S] ``->`` [CN #CN] | //rule that John walks// | +| ``mkCN`` | [CN #CN] ``->`` [QS #QS] ``->`` [CN #CN] | //question if John walks// | +| ``mkCN`` | [CN #CN] ``->`` [VP #VP] ``->`` [CN #CN] | //reason to walk// | +| ``mkCN`` | [N #N] ``->`` [NP #NP] ``->`` [CN #CN] | //king John// | +| ``mkCN`` | [CN #CN] ``->`` [NP #NP] ``->`` [CN #CN] | //old king John// | +==Card - cardinal number==[Card] +Lexical category, constructors given in +[lexical paradigms #RParadigms]. +==Cl - declarative clause, with all tenses==[Cl] +|| Function | Type | Example || +| ``genericCl`` | [VP #VP] ``->`` [Cl #Cl] | //one walks// | +| ``mkCl`` | [NP #NP] ``->`` [V #V] ``->`` [Cl #Cl] | //John walks// | +| ``mkCl`` | [NP #NP] ``->`` [V2 #V2] ``->`` [NP #NP] ``->`` [Cl #Cl] | //John loves her// | +| ``mkCl`` | [NP #NP] ``->`` [V3 #V3] ``->`` [NP #NP] ``->`` [NP #NP] ``->`` [Cl #Cl] | //John sends it to her// | +| ``mkCl`` | [NP #NP] ``->`` [VV #VV] ``->`` [VP #VP] ``->`` [Cl #Cl] | //John wants to walk// | +| ``mkCl`` | [NP #NP] ``->`` [VS #VS] ``->`` [S #S] ``->`` [Cl #Cl] | //John says that it is good// | +| ``mkCl`` | [NP #NP] ``->`` [VQ #VQ] ``->`` [QS #QS] ``->`` [Cl #Cl] | //John wonders if it is good// | +| ``mkCl`` | [NP #NP] ``->`` [VA #VA] ``->`` [AP #AP] ``->`` [Cl #Cl] | //John becomes old// | +| ``mkCl`` | [NP #NP] ``->`` [V2A #V2A] ``->`` [NP #NP] ``->`` [AP #AP] ``->`` [Cl #Cl] | //John paints it red// | +| ``mkCl`` | [NP #NP] ``->`` [V2S #V2S] ``->`` [NP #NP] ``->`` [S #S] ``->`` [Cl #Cl] | //John tells her that we are here// | +| ``mkCl`` | [NP #NP] ``->`` [V2Q #V2Q] ``->`` [NP #NP] ``->`` [QS #QS] ``->`` [Cl #Cl] | //John asks her who is here// | +| ``mkCl`` | [NP #NP] ``->`` [V2V #V2V] ``->`` [NP #NP] ``->`` [VP #VP] ``->`` [Cl #Cl] | //John forces us to sleep// | +| ``mkCl`` | [NP #NP] ``->`` [A #A] ``->`` [Cl #Cl] | //John is old// | +| ``mkCl`` | [NP #NP] ``->`` [A #A] ``->`` [NP #NP] ``->`` [Cl #Cl] | //John is older than her// | +| ``mkCl`` | [NP #NP] ``->`` [A2 #A2] ``->`` [NP #NP] ``->`` [Cl #Cl] | //John is married to her// | +| ``mkCl`` | [NP #NP] ``->`` [AP #AP] ``->`` [Cl #Cl] | //John is very old// | +| ``mkCl`` | [NP #NP] ``->`` [N #N] ``->`` [Cl #Cl] | //John is a man// | +| ``mkCl`` | [NP #NP] ``->`` [CN #CN] ``->`` [Cl #Cl] | //John is an old man// | +| ``mkCl`` | [NP #NP] ``->`` [NP #NP] ``->`` [Cl #Cl] | //John is the man// | +| ``mkCl`` | [NP #NP] ``->`` [Adv #Adv] ``->`` [Cl #Cl] | //John is here// | +| ``mkCl`` | [NP #NP] ``->`` [VP #VP] ``->`` [Cl #Cl] | //John walks here// | +| ``mkCl`` | [V #V] ``->`` [Cl #Cl] | //it rains// | +| ``mkCl`` | [VP #VP] ``->`` [Cl #Cl] | //it is raining// | +| ``mkCl`` | [N #N] ``->`` [Cl #Cl] | //there is a house// | +| ``mkCl`` | [CN #CN] ``->`` [Cl #Cl] | //there is an old houses// | +| ``mkCl`` | [NP #NP] ``->`` [Cl #Cl] | //there are five houses// | +| ``mkCl`` | [NP #NP] ``->`` [RS #RS] ``->`` [Cl #Cl] | //it is John that walks// | +| ``mkCl`` | [Adv #Adv] ``->`` [S #S] ``->`` [Cl #Cl] | //it is here John walks// | +==ClSlash==[ClSlash] +|| Function | Type | Example || +| ``mkClSlash`` | [NP #NP] ``->`` [V2 #V2] ``->`` [ClSlash #ClSlash] | //(whom) John loves// | +| ``mkClSlash`` | [NP #NP] ``->`` [VV #VV] ``->`` [V2 #V2] ``->`` [ClSlash #ClSlash] | //(whom) John wants to see// | +| ``mkClSlash`` | [Cl #Cl] ``->`` [Prep #Prep] ``->`` [ClSlash #ClSlash] | //(with whom) John walks// | +| ``mkClSlash`` | [ClSlash #ClSlash] ``->`` [Adv #Adv] ``->`` [ClSlash #ClSlash] | //(whom) John loves today// | +==Comp - complement of copula, such as AP==[Comp] +Lexical category, constructors given in +[lexical paradigms #RParadigms]. +==Conj - conjunction==[Conj] +|| Function | Type | Example || +| ``and_Conj`` | [Conj #Conj] | //and// | +| ``both7and_DConj`` | [Conj #Conj] | //both...and// | +| ``either7or_DConj`` | [Conj #Conj] | //either...or// | +| ``if_then_Conj`` | [Conj #Conj] | //if// | +| ``or_Conj`` | [Conj #Conj] | //or// | +==Det - determiner phrase==[Det] +|| Function | Type | Example || +| ``every_Det`` | [Det #Det] | //every// | +| ``few_Det`` | [Det #Det] | //few// | +| ``many_Det`` | [Det #Det] | //many// | +| ``mkDet`` | [Quant #Quant] ``->`` [Det #Det] | //this// | +| ``mkDet`` | [Quant #Quant] ``->`` ([Ord #Ord]) ``->`` [Det #Det] | //this first// | +| ``mkDet`` | [Quant #Quant] ``->`` [Num #Num] ``->`` [Det #Det] | //these// | +| ``mkDet`` | [Quant #Quant] ``->`` [Num #Num] ``->`` ([Ord #Ord]) ``->`` [Det #Det] | //these five best// | +| ``mkDet`` | [Quant #Quant] ``->`` [Det #Det] | //this// | +| ``mkDet`` | [Quant #Quant] ``->`` [Num #Num] ``->`` [Det #Det] | //these five// | +| ``mkDet`` | [Card #Card] ``->`` [Det #Det] | //almost twenty// | +| ``mkDet`` | [Numeral #Numeral] ``->`` [Det #Det] | //five// | +| ``mkDet`` | [Digits #Digits] ``->`` [Det #Det] | //51// | +| ``mkDet`` | [Pron #Pron] ``->`` [Det #Det] | //my (house)// | +| ``mkDet`` | [Pron #Pron] ``->`` [Num #Num] ``->`` [Det #Det] | //my (houses)// | +| ``much_Det`` | [Det #Det] | //much// | +| ``somePl_Det`` | [Det #Det] | //somePl// | +| ``someSg_Det`` | [Det #Det] | //someSg// | +==Dig==[Dig] +|| Function | Type | Example || +| ``n0_Dig`` | [Dig #Dig] | //0// | +| ``n1_Dig`` | [Dig #Dig] | //1// | +| ``n2_Dig`` | [Dig #Dig] | //2// | +| ``n3_Dig`` | [Dig #Dig] | //3// | +| ``n4_Dig`` | [Dig #Dig] | //4// | +| ``n5_Dig`` | [Dig #Dig] | //5// | +| ``n6_Dig`` | [Dig #Dig] | //6// | +| ``n7_Dig`` | [Dig #Dig] | //7// | +| ``n8_Dig`` | [Dig #Dig] | //8// | +| ``n9_Dig`` | [Dig #Dig] | //9// | +==Digits - cardinal or ordinal in digits==[Digits] +|| Function | Type | Example || +| ``mkDigits`` | [Dig #Dig] ``->`` [Digits #Digits] | //8// | +| ``mkDigits`` | [Dig #Dig] ``->`` [Digits #Digits] ``->`` [Digits #Digits] | //876// | +| ``n1000_Digits`` | [Digits #Digits] | //1,000// | +| ``n100_Digits`` | [Digits #Digits] | //100// | +| ``n10_Digits`` | [Digits #Digits] | //10// | +| ``n1_Digits`` | [Digits #Digits] | //1// | +| ``n20_Digits`` | [Digits #Digits] | //20// | +| ``n2_Digits`` | [Digits #Digits] | //2// | +| ``n3_Digits`` | [Digits #Digits] | //3// | +| ``n4_Digits`` | [Digits #Digits] | //4// | +| ``n5_Digits`` | [Digits #Digits] | //5// | +| ``n6_Digits`` | [Digits #Digits] | //6// | +| ``n7_Digits`` | [Digits #Digits] | //7// | +| ``n8_Digits`` | [Digits #Digits] | //8// | +| ``n9_Digits`` | [Digits #Digits] | //9// | +==IAdv - interrogative adverb==[IAdv] +|| Function | Type | Example || +| ``how_IAdv`` | [IAdv #IAdv] | //how// | +| ``mkIAdv`` | [Prep #Prep] ``->`` [IP #IP] ``->`` [IAdv #IAdv] | //in which city// | +| ``when_IAdv`` | [IAdv #IAdv] | //when// | +| ``where_IAdv`` | [IAdv #IAdv] | //where// | +| ``why_IAdv`` | [IAdv #IAdv] | //why// | +==IComp - interrogative complement of copula==[IComp] +Lexical category, constructors given in +[lexical paradigms #RParadigms]. +==IDet - interrogative determiner==[IDet] +|| Function | Type | Example || +| ``how8many_IDet`` | [IDet #IDet] | //how8many// | +==IP - interrogative pronoun==[IP] +|| Function | Type | Example || +| ``mkIP`` | [IQuant #IQuant] ``->`` [N #N] ``->`` [IP #IP] | //which city// | +| ``mkIP`` | [IQuant #IQuant] ``->`` ([Num #Num]) ``->`` [CN #CN] ``->`` [IP #IP] | //which five big cities// | +| ``mkIP`` | [IP #IP] ``->`` [Adv #Adv] ``->`` [IP #IP] | //who in Paris// | +| ``whatPl_IP`` | [IP #IP] | //what (plural)// | +| ``whatSg_IP`` | [IP #IP] | //what (singular)// | +| ``whoPl_IP`` | [IP #IP] | //who (plural)// | +| ``whoSg_IP`` | [IP #IP] | //who (singular)// | +==IQuant==[IQuant] +|| Function | Type | Example || +| ``which_IQuant`` | [IQuant #IQuant] | //which// | +==Imp - imperative==[Imp] +|| Function | Type | Example || +| ``mkImp`` | [V #V] ``->`` [Imp #Imp] | //go// | +| ``mkImp`` | [V2 #V2] ``->`` [NP #NP] ``->`` [Imp #Imp] | //take it// | +| ``mkImp`` | [VP #VP] ``->`` [Imp #Imp] | //go there now// | +==ImpForm==[ImpForm] +|| Function | Type | Example || +| ``pluralImpForm`` | [ImpForm #ImpForm] | //(help yourselves)// | +| ``politeImpForm`` | [ImpForm #ImpForm] | //(help yourself) (polite singular)// | +| ``singularImpForm`` | [ImpForm #ImpForm] | //(help yourself) [default]// | +==ListAP==[ListAP] +|| Function | Type | Example || +| ``mkListAP`` | [AP #AP] ``->`` [AP #AP] ``->`` [ListAP #ListAP] | //old, big// | +| ``mkListAP`` | [AP #AP] ``->`` [ListAP #ListAP] ``->`` [ListAP #ListAP] | //old, big, warm// | +==ListAdv==[ListAdv] +|| Function | Type | Example || +| ``mkListAdv`` | [Adv #Adv] ``->`` [Adv #Adv] ``->`` [ListAdv #ListAdv] | //here, now// | +| ``mkListAdv`` | [Adv #Adv] ``->`` [ListAdv #ListAdv] ``->`` [ListAdv #ListAdv] | //to me, here, now// | +==ListNP==[ListNP] +|| Function | Type | Example || +| ``mkListNP`` | [NP #NP] ``->`` [NP #NP] ``->`` [ListNP #ListNP] | //John, I// | +| ``mkListNP`` | [NP #NP] ``->`` [ListNP #ListNP] ``->`` [ListNP #ListNP] | //John, I, that// | +==ListRS==[ListRS] +|| Function | Type | Example || +| ``mkListRS`` | [RS #RS] ``->`` [RS #RS] ``->`` [ListRS #ListRS] | //who walks, who runs// | +| ``mkListRS`` | [RS #RS] ``->`` [ListRS #ListRS] ``->`` [ListRS #ListRS] | //who walks, who runs, who sleeps// | +==ListS==[ListS] +|| Function | Type | Example || +| ``mkListS`` | [S #S] ``->`` [S #S] ``->`` [ListS #ListS] | //he walks, I run// | +| ``mkListS`` | [S #S] ``->`` [ListS #ListS] ``->`` [ListS #ListS] | //John walks, I run, you sleep// | +==N - common noun==[N] +Lexical category, constructors given in +[lexical paradigms #RParadigms]. +==N2 - relational noun==[N2] +Lexical category, constructors given in +[lexical paradigms #RParadigms]. +==N3 - three-place relational noun==[N3] +Lexical category, constructors given in +[lexical paradigms #RParadigms]. +==NP - noun phrase (subject or object)==[NP] +|| Function | Type | Example || +| ``everybody_NP`` | [NP #NP] | //everybody// | +| ``everything_NP`` | [NP #NP] | //everything// | +| ``mkNP`` | [Quant #Quant] ``->`` [N #N] ``->`` [NP #NP] | //this men// | +| ``mkNP`` | [Quant #Quant] ``->`` ([Num #Num]) ``->`` [CN #CN] ``->`` [NP #NP] | //these five old men// | +| ``mkNP`` | [Det #Det] ``->`` [N #N] ``->`` [NP #NP] | //the first man// | +| ``mkNP`` | [Det #Det] ``->`` [CN #CN] ``->`` [NP #NP] | //the first old man// | +| ``mkNP`` | [Numeral #Numeral] ``->`` [N #N] ``->`` [NP #NP] | //twenty men// | +| ``mkNP`` | [Numeral #Numeral] ``->`` [CN #CN] ``->`` [NP #NP] | //twenty old men// | +| ``mkNP`` | [Digits #Digits] ``->`` [N #N] ``->`` [NP #NP] | //45 men// | +| ``mkNP`` | [Digits #Digits] ``->`` [CN #CN] ``->`` [NP #NP] | //45 old men// | +| ``mkNP`` | [Card #Card] ``->`` [N #N] ``->`` [NP #NP] | //almost twenty men// | +| ``mkNP`` | [Card #Card] ``->`` [CN #CN] ``->`` [NP #NP] | //almost twenty old men// | +| ``mkNP`` | [Pron #Pron] ``->`` [N #N] ``->`` [NP #NP] | //my man// | +| ``mkNP`` | [Pron #Pron] ``->`` [CN #CN] ``->`` [NP #NP] | //my old man// | +| ``mkNP`` | [PN #PN] ``->`` [NP #NP] | //John// | +| ``mkNP`` | [Pron #Pron] ``->`` [NP #NP] | //he// | +| ``mkNP`` | [Quant #Quant] ``->`` [NP #NP] | //this// | +| ``mkNP`` | [Det #Det] ``->`` [NP #NP] | //these five// | +| ``mkNP`` | [N #N] ``->`` [NP #NP] | //beer// | +| ``mkNP`` | [CN #CN] ``->`` [NP #NP] | //beer// | +| ``mkNP`` | [Predet #Predet] ``->`` [NP #NP] ``->`` [NP #NP] | //only John// | +| ``mkNP`` | [NP #NP] ``->`` [V2 #V2] ``->`` [NP #NP] | //John killed// | +| ``mkNP`` | [NP #NP] ``->`` [Adv #Adv] ``->`` [NP #NP] | //John in Paris// | +| ``mkNP`` | [NP #NP] ``->`` [RS #RS] ``->`` [NP #NP] | //John, who lives in Paris// | +| ``mkNP`` | [Conj #Conj] ``->`` [NP #NP] ``->`` [NP #NP] ``->`` [NP #NP] | //John and I// | +| ``mkNP`` | [Conj #Conj] ``->`` [ListNP #ListNP] ``->`` [NP #NP] | //John, I, and that// | +| ``nobody_NP`` | [NP #NP] | //nobody// | +| ``nothing_NP`` | [NP #NP] | //nothing// | +| ``somebody_NP`` | [NP #NP] | //somebody// | +| ``something_NP`` | [NP #NP] | //something// | +==Num - number determining element==[Num] +|| Function | Type | Example || +| ``mkNum`` | [Numeral #Numeral] ``->`` [Num #Num] | //twenty// | +| ``mkNum`` | [Digits #Digits] ``->`` [Num #Num] | //51// | +| ``mkNum`` | [Card #Card] ``->`` [Num #Num] | //almost ten// | +| ``mkNum`` | [AdN #AdN] ``->`` [Card #Card] ``->`` [Num #Num] | //almost ten// | +| ``plNum`` | [Num #Num] | //plural// | +| ``sgNum`` | [Num #Num] | //singular// | +==Numeral - cardinal or ordinal in words==[Numeral] +|| Function | Type | Example || +| ``n1000_Numeral`` | [Numeral #Numeral] | //thousand// | +| ``n100_Numeral`` | [Numeral #Numeral] | //hundred// | +| ``n10_Numeral`` | [Numeral #Numeral] | //ten// | +| ``n1_Numeral`` | [Numeral #Numeral] | //one// | +| ``n20_Numeral`` | [Numeral #Numeral] | //twenty// | +| ``n2_Numeral`` | [Numeral #Numeral] | //two// | +| ``n3_Numeral`` | [Numeral #Numeral] | //three// | +| ``n4_Numeral`` | [Numeral #Numeral] | //four// | +| ``n5_Numeral`` | [Numeral #Numeral] | //five// | +| ``n6_Numeral`` | [Numeral #Numeral] | //six// | +| ``n7_Numeral`` | [Numeral #Numeral] | //seven// | +| ``n8_Numeral`` | [Numeral #Numeral] | //eight// | +| ``n9_Numeral`` | [Numeral #Numeral] | //nine// | +==Ord - ordinal number (used in Det)==[Ord] +|| Function | Type | Example || +| ``mkOrd`` | [Numeral #Numeral] ``->`` [Ord #Ord] | //twentieth// | +| ``mkOrd`` | [Digits #Digits] ``->`` [Ord #Ord] | //51st// | +| ``mkOrd`` | [A #A] ``->`` [Ord #Ord] | //best// | +==PConj - phrase-beginning conjunction==[PConj] +|| Function | Type | Example || +| ``but_PConj`` | [PConj #PConj] | //but// | +| ``mkPConj`` | [Conj #Conj] ``->`` [PConj #PConj] | //and// | +| ``otherwise_PConj`` | [PConj #PConj] | //otherwise// | +| ``therefore_PConj`` | [PConj #PConj] | //therefore// | +==PN - proper name==[PN] +Lexical category, constructors given in +[lexical paradigms #RParadigms]. +==Phr - phrase in a text==[Phr] +|| Function | Type | Example || +| ``mkPhr`` | [Utt #Utt] ``->`` [Phr #Phr] | //why// | +| ``mkPhr`` | ([PConj #PConj]) ``->`` [Utt #Utt] ``->`` ([Voc #Voc]) ``->`` [Phr #Phr] | //but why John// | +| ``mkPhr`` | [S #S] ``->`` [Phr #Phr] | //John walked// | +| ``mkPhr`` | [Cl #Cl] ``->`` [Phr #Phr] | //John walks// | +| ``mkPhr`` | [QS #QS] ``->`` [Phr #Phr] | //did John walk// | +| ``mkPhr`` | [Imp #Imp] ``->`` [Phr #Phr] | //walk// | +==Pol - polarity==[Pol] +|| Function | Type | Example || +| ``negativePol`` | [Pol #Pol] | //(John doesn't walk)// | +| ``positivePol`` | [Pol #Pol] | //(John walks) [default]// | +==Predet - predeterminer (prefixed Quant)==[Predet] +|| Function | Type | Example || +| ``all_Predet`` | [Predet #Predet] | //all// | +| ``most_Predet`` | [Predet #Predet] | //most// | +| ``not_Predet`` | [Predet #Predet] | //not// | +| ``only_Predet`` | [Predet #Predet] | //only// | +==Prep - preposition, or just case==[Prep] +|| Function | Type | Example || +| ``above_Prep`` | [Prep #Prep] | //above// | +| ``after_Prep`` | [Prep #Prep] | //after// | +| ``before_Prep`` | [Prep #Prep] | //before// | +| ``behind_Prep`` | [Prep #Prep] | //behind// | +| ``between_Prep`` | [Prep #Prep] | //between// | +| ``by8agent_Prep`` | [Prep #Prep] | //by (agent)// | +| ``by8means_Prep`` | [Prep #Prep] | //by (means of)// | +| ``during_Prep`` | [Prep #Prep] | //during// | +| ``except_Prep`` | [Prep #Prep] | //except// | +| ``for_Prep`` | [Prep #Prep] | //for// | +| ``from_Prep`` | [Prep #Prep] | //from// | +| ``in8front_Prep`` | [Prep #Prep] | //in front of// | +| ``in_Prep`` | [Prep #Prep] | //in// | +| ``on_Prep`` | [Prep #Prep] | //on// | +| ``part_Prep`` | [Prep #Prep] | //part// | +| ``possess_Prep`` | [Prep #Prep] | //of (possessive)// | +| ``through_Prep`` | [Prep #Prep] | //through// | +| ``to_Prep`` | [Prep #Prep] | //to// | +| ``under_Prep`` | [Prep #Prep] | //under// | +| ``with_Prep`` | [Prep #Prep] | //with// | +| ``without_Prep`` | [Prep #Prep] | //without// | +==Pron - personal pronoun==[Pron] +|| Function | Type | Example || +| ``he_Pron`` | [Pron #Pron] | //he// | +| ``i_Pron`` | [Pron #Pron] | //i// | +| ``it_Pron`` | [Pron #Pron] | //it// | +| ``she_Pron`` | [Pron #Pron] | //she// | +| ``they_Pron`` | [Pron #Pron] | //they// | +| ``we_Pron`` | [Pron #Pron] | //we// | +| ``youPl_Pron`` | [Pron #Pron] | //you (plural)// | +| ``youPol_Pron`` | [Pron #Pron] | //you (polite)// | +| ``youSg_Pron`` | [Pron #Pron] | //you (singular)// | +==Punct==[Punct] +|| Function | Type | Example || +| ``exclMarkPunct`` | [Punct #Punct] | //!// | +| ``fullStopPunct`` | [Punct #Punct] | //.// | +| ``questMarkPunct`` | [Punct #Punct] | //?// | +==QCl - question clause, with all tenses==[QCl] +|| Function | Type | Example || +| ``mkQCl`` | [Cl #Cl] ``->`` [QCl #QCl] | //does John walk// | +| ``mkQCl`` | [IP #IP] ``->`` [VP #VP] ``->`` [QCl #QCl] | //who walks// | +| ``mkQCl`` | [IP #IP] ``->`` [NP #NP] ``->`` [V2 #V2] ``->`` [QCl #QCl] | //whom does John love// | +| ``mkQCl`` | [IP #IP] ``->`` [ClSlash #ClSlash] ``->`` [QCl #QCl] | //whom does John love today// | +| ``mkQCl`` | [IAdv #IAdv] ``->`` [Cl #Cl] ``->`` [QCl #QCl] | //why does John walk// | +| ``mkQCl`` | [Prep #Prep] ``->`` [IP #IP] ``->`` [Cl #Cl] ``->`` [QCl #QCl] | //with who does John walk// | +| ``mkQCl`` | [IAdv #IAdv] ``->`` [NP #NP] ``->`` [QCl #QCl] | //where is John// | +| ``mkQCl`` | [IP #IP] ``->`` [QCl #QCl] | //what is there// | +==QS - question==[QS] +|| Function | Type | Example || +| ``mkQS`` | [QCl #QCl] ``->`` [QS #QS] | //who walks// | +| ``mkQS`` | ([Tense #Tense]) ``->`` ([Ant #Ant]) ``->`` ([Pol #Pol]) ``->`` [QCl #QCl] ``->`` [QS #QS] | //who wouldn't have walked// | +| ``mkQS`` | [Cl #Cl] ``->`` [QS #QS] | //does John walk// | +==Quant - quantifier ('nucleus' of Det)==[Quant] +|| Function | Type | Example || +| ``a_Quant`` | [Quant #Quant] | //a// | +| ``no_Quant`` | [Quant #Quant] | //no// | +| ``that_Quant`` | [Quant #Quant] | //that// | +| ``the_Quant`` | [Quant #Quant] | //the// | +| ``this_Quant`` | [Quant #Quant] | //this// | +==RCl - relative clause, with all tenses==[RCl] +|| Function | Type | Example || +| ``mkRCl`` | [RP #RP] ``->`` [VP #VP] ``->`` [RCl #RCl] | //that walk// | +| ``mkRCl`` | [RP #RP] ``->`` [NP #NP] ``->`` [V2 #V2] ``->`` [RCl #RCl] | //which John loves// | +| ``mkRCl`` | [RP #RP] ``->`` [ClSlash #ClSlash] ``->`` [RCl #RCl] | //which John loves today// | +| ``mkRCl`` | [Cl #Cl] ``->`` [RCl #RCl] | //such that John loves her// | +==RP - relative pronoun==[RP] +|| Function | Type | Example || +| ``mkRP`` | [Prep #Prep] ``->`` [NP #NP] ``->`` [RP #RP] ``->`` [RP #RP] | //all the houses in which// | +| ``which_RP`` | [RP #RP] | //which// | +==RS - relative==[RS] +|| Function | Type | Example || +| ``mkRS`` | [RCl #RCl] ``->`` [RS #RS] | //that walk// | +| ``mkRS`` | ([Tense #Tense]) ``->`` ([Ant #Ant]) ``->`` ([Pol #Pol]) ``->`` [RCl #RCl] ``->`` [RS #RS] | //that wouldn't have walked// | +| ``mkRS`` | [Conj #Conj] ``->`` [RS #RS] ``->`` [RS #RS] ``->`` [RS #RS] | //who walks and whom I know// | +| ``mkRS`` | [Conj #Conj] ``->`` [ListRS #ListRS] ``->`` [RS #RS] | //who walks, whose son runs, and whom I know// | +==S - declarative sentence==[S] +|| Function | Type | Example || +| ``mkS`` | [Cl #Cl] ``->`` [S #S] | //John walks// | +| ``mkS`` | ([Tense #Tense]) ``->`` ([Ant #Ant]) ``->`` ([Pol #Pol]) ``->`` [Cl #Cl] ``->`` [S #S] | //John wouldn't have walked// | +| ``mkS`` | [Conj #Conj] ``->`` [S #S] ``->`` [S #S] ``->`` [S #S] | //John walks and I run// | +| ``mkS`` | [Conj #Conj] ``->`` [ListS #ListS] ``->`` [S #S] | //John walks, I run and you sleep// | +| ``mkS`` | [Adv #Adv] ``->`` [S #S] ``->`` [S #S] | //today, John walks// | +==SC - embedded sentence or question==[SC] +Lexical category, constructors given in +[lexical paradigms #RParadigms]. +==Subj - subjunction==[Subj] +|| Function | Type | Example || +| ``although_Subj`` | [Subj #Subj] | //although// | +| ``because_Subj`` | [Subj #Subj] | //because// | +| ``if_Subj`` | [Subj #Subj] | //if// | +| ``when_Subj`` | [Subj #Subj] | //when// | +==Temp - temporal and aspectual features==[Temp] +Lexical category, constructors given in +[lexical paradigms #RParadigms]. +==Tense - tense==[Tense] +|| Function | Type | Example || +| ``conditionalTense`` | [Tense #Tense] | //(John would walk)// | +| ``futureTense`` | [Tense #Tense] | //(John will walk)// | +| ``pastTense`` | [Tense #Tense] | //(John walked)// | +| ``presentTense`` | [Tense #Tense] | //(John walks) [default]// | +==Text - text consisting of several phrases==[Text] +|| Function | Type | Example || +| ``emptyText`` | [Text #Text] | //(empty text)// | +| ``mkText`` | [Phr #Phr] ``->`` [Text #Text] | //But John walks.// | +| ``mkText`` | [Phr #Phr] ``->`` ([Punct #Punct]) ``->`` ([Text #Text]) ``->`` [Text #Text] | //John walks? Yes.// | +| ``mkText`` | [Utt #Utt] ``->`` [Text #Text] | //John.// | +| ``mkText`` | [S #S] ``->`` [Text #Text] | //John walked.// | +| ``mkText`` | [Cl #Cl] ``->`` [Text #Text] | //John walks.// | +| ``mkText`` | [QS #QS] ``->`` [Text #Text] | //Did John walk?// | +| ``mkText`` | [Imp #Imp] ``->`` [Text #Text] | //Walk!// | +| ``mkText`` | [Text #Text] ``->`` [Text #Text] ``->`` [Text #Text] | //Where? When? Here. Now!// | +==Utt - sentence, question, word...==[Utt] +|| Function | Type | Example || +| ``lets_Utt`` | [VP #VP] ``->`` [Utt #Utt] | //let's walk// | +| ``mkUtt`` | [S #S] ``->`` [Utt #Utt] | //John walked// | +| ``mkUtt`` | [Cl #Cl] ``->`` [Utt #Utt] | //John walks// | +| ``mkUtt`` | [QS #QS] ``->`` [Utt #Utt] | //did John walk// | +| ``mkUtt`` | [QCl #QCl] ``->`` [Utt #Utt] | //does John walk// | +| ``mkUtt`` | [Imp #Imp] ``->`` [Utt #Utt] | //love yourself// | +| ``mkUtt`` | ([ImpForm #ImpForm]) ``->`` ([Pol #Pol]) ``->`` [Imp #Imp] ``->`` [Utt #Utt] | //don't love yourselves// | +| ``mkUtt`` | [IP #IP] ``->`` [Utt #Utt] | //who// | +| ``mkUtt`` | [IAdv #IAdv] ``->`` [Utt #Utt] | //why// | +| ``mkUtt`` | [NP #NP] ``->`` [Utt #Utt] | //John// | +| ``mkUtt`` | [Adv #Adv] ``->`` [Utt #Utt] | //here// | +| ``mkUtt`` | [VP #VP] ``->`` [Utt #Utt] | //to walk// | +| ``no_Utt`` | [Utt #Utt] | //no// | +| ``yes_Utt`` | [Utt #Utt] | //yes// | +==V - one-place verb==[V] +Lexical category, constructors given in +[lexical paradigms #RParadigms]. +==V2 - two-place verb==[V2] +Lexical category, constructors given in +[lexical paradigms #RParadigms]. +==V2A - verb with NP and AP complement==[V2A] +Lexical category, constructors given in +[lexical paradigms #RParadigms]. +==V2Q - verb with NP and Q complement==[V2Q] +Lexical category, constructors given in +[lexical paradigms #RParadigms]. +==V2S - verb with NP and S complement==[V2S] +Lexical category, constructors given in +[lexical paradigms #RParadigms]. +==V2V - verb with NP and V complement==[V2V] +Lexical category, constructors given in +[lexical paradigms #RParadigms]. +==V3 - three-place verb==[V3] +Lexical category, constructors given in +[lexical paradigms #RParadigms]. +==VA - adjective-complement verb==[VA] +Lexical category, constructors given in +[lexical paradigms #RParadigms]. +==VP - verb phrase==[VP] +|| Function | Type | Example || +| ``mkVP`` | [V #V] ``->`` [VP #VP] | //walk// | +| ``mkVP`` | [V2 #V2] ``->`` [NP #NP] ``->`` [VP #VP] | //love her// | +| ``mkVP`` | [V3 #V3] ``->`` [NP #NP] ``->`` [NP #NP] ``->`` [VP #VP] | //send it to her// | +| ``mkVP`` | [VV #VV] ``->`` [VP #VP] ``->`` [VP #VP] | //want to walk// | +| ``mkVP`` | [VS #VS] ``->`` [S #S] ``->`` [VP #VP] | //know that she walks// | +| ``mkVP`` | [VQ #VQ] ``->`` [QS #QS] ``->`` [VP #VP] | //ask if she walks// | +| ``mkVP`` | [VA #VA] ``->`` [AP #AP] ``->`` [VP #VP] | //become old// | +| ``mkVP`` | [V2A #V2A] ``->`` [NP #NP] ``->`` [AP #AP] ``->`` [VP #VP] | //paint it red// | +| ``mkVP`` | [A #A] ``->`` [VP #VP] | //be warm// | +| ``mkVP`` | [AP #AP] ``->`` [VP #VP] | //be very warm// | +| ``mkVP`` | [A #A] ``->`` [NP #NP] ``->`` [VP #VP] | //be older than her// | +| ``mkVP`` | [A2 #A2] ``->`` [NP #NP] ``->`` [VP #VP] | //be married to her// | +| ``mkVP`` | [N #N] ``->`` [VP #VP] | //be a man// | +| ``mkVP`` | [CN #CN] ``->`` [VP #VP] | //be an old man// | +| ``mkVP`` | [NP #NP] ``->`` [VP #VP] | //be the man// | +| ``mkVP`` | [Adv #Adv] ``->`` [VP #VP] | //be here// | +| ``mkVP`` | [VP #VP] ``->`` [Adv #Adv] ``->`` [VP #VP] | //sleep here// | +| ``mkVP`` | [AdV #AdV] ``->`` [VP #VP] ``->`` [VP #VP] | //always sleep// | +| ``mkVP`` | [VPSlash #VPSlash] ``->`` [NP #NP] ``->`` [VP #VP] | //paint it black// | +| ``mkVP`` | [VPSlash #VPSlash] ``->`` [VP #VP] | //paint itself black// | +| ``passiveVP`` | [V2 #V2] ``->`` [VP #VP] | //be loved// | +| ``passiveVP`` | [V2 #V2] ``->`` [NP #NP] ``->`` [VP #VP] | //be loved by her// | +| ``progressiveVP`` | [VP #VP] ``->`` [VP #VP] | //be sleeping// | +| ``reflexiveVP`` | [V2 #V2] ``->`` [VP #VP] | //love itself// | +==VPSlash - verb phrase missing complement==[VPSlash] +|| Function | Type | Example || +| ``mkVPSlash`` | [V2 #V2] ``->`` [VPSlash #VPSlash] | //(whom) (John) loves// | +| ``mkVPSlash`` | [V3 #V3] ``->`` [NP #NP] ``->`` [VPSlash #VPSlash] | //(whom) (John) gives an apple// | +| ``mkVPSlash`` | [V2A #V2A] ``->`` [AP #AP] ``->`` [VPSlash #VPSlash] | //(whom) (John) paints red// | +| ``mkVPSlash`` | [V2Q #V2Q] ``->`` [QS #QS] ``->`` [VPSlash #VPSlash] | //(whom) (John) asks who sleeps// | +| ``mkVPSlash`` | [V2S #V2S] ``->`` [S #S] ``->`` [VPSlash #VPSlash] | //(whom) (John) tells that we sleep// | +| ``mkVPSlash`` | [V2V #V2V] ``->`` [VP #VP] ``->`` [VPSlash #VPSlash] | //(whom) (John) forces to sleep// | +==VQ - question-complement verb==[VQ] +Lexical category, constructors given in +[lexical paradigms #RParadigms]. +==VS - sentence-complement verb==[VS] +Lexical category, constructors given in +[lexical paradigms #RParadigms]. +==VV - verb-phrase-complement verb==[VV] +|| Function | Type | Example || +| ``can8know_VV`` | [VV #VV] | //can (capacity)// | +| ``can_VV`` | [VV #VV] | //can (possibility)// | +| ``must_VV`` | [VV #VV] | //must// | +| ``want_VV`` | [VV #VV] | //want// | +==Voc - vocative or "please"==[Voc] +|| Function | Type | Example || +| ``mkVoc`` | [NP #NP] ``->`` [Voc #Voc] | //John// | +| ``please_Voc`` | [Voc #Voc] | //please// | + + + + +=Lexical Paradigms= +==Paradigms for Bulgarian== +#LParadigms + + +source [``http://www.cs.chalmers.se/~aarne/GF/lib/resource/src/bulgarian/ParadigmsBul.gf`` ../src/bulgarian/ParadigmsBul.gf] + + + + +|| Function | Type || +| ``mkN001`` | ``Str`` ``->`` [N #N] | +| ``mkN002`` | ``Str`` ``->`` [N #N] | +| ``mkN002a`` | ``Str`` ``->`` [N #N] | +| ``mkN003`` | ``Str`` ``->`` [N #N] | +| ``mkN004`` | ``Str`` ``->`` [N #N] | +| ``mkN005`` | ``Str`` ``->`` [N #N] | +| ``mkN006`` | ``Str`` ``->`` [N #N] | +| ``mkN007`` | ``Str`` ``->`` [N #N] | +| ``mkN007b`` | ``Str`` ``->`` [N #N] | +| ``mkN007a`` | ``Str`` ``->`` [N #N] | +| ``mkN008`` | ``Str`` ``->`` [N #N] | +| ``mkN008b`` | ``Str`` ``->`` [N #N] | +| ``mkN008c`` | ``Str`` ``->`` [N #N] | +| ``mkN008a`` | ``Str`` ``->`` [N #N] | +| ``mkN009`` | ``Str`` ``->`` [N #N] | +| ``mkN009a`` | ``Str`` ``->`` [N #N] | +| ``mkN010`` | ``Str`` ``->`` [N #N] | +| ``mkN011`` | ``Str`` ``->`` [N #N] | +| ``mkN012`` | ``Str`` ``->`` [N #N] | +| ``mkN013`` | ``Str`` ``->`` [N #N] | +| ``mkN014`` | ``Str`` ``->`` [N #N] | +| ``mkN014a`` | ``Str`` ``->`` [N #N] | +| ``mkN015`` | ``Str`` ``->`` [N #N] | +| ``mkN015a`` | ``Str`` ``->`` [N #N] | +| ``mkN016`` | ``Str`` ``->`` [N #N] | +| ``mkN016a`` | ``Str`` ``->`` [N #N] | +| ``mkN017`` | ``Str`` ``->`` [N #N] | +| ``mkN018`` | ``Str`` ``->`` [N #N] | +| ``mkN018a`` | ``Str`` ``->`` [N #N] | +| ``mkN019`` | ``Str`` ``->`` [N #N] | +| ``mkN019a`` | ``Str`` ``->`` [N #N] | +| ``mkN020`` | ``Str`` ``->`` [N #N] | +| ``mkN021`` | ``Str`` ``->`` [N #N] | +| ``mkN022`` | ``Str`` ``->`` [N #N] | +| ``mkN023`` | ``Str`` ``->`` [N #N] | +| ``mkN024a`` | ``Str`` ``->`` [N #N] | +| ``mkN024`` | ``Str`` ``->`` [N #N] | +| ``mkN025`` | ``Str`` ``->`` [N #N] | +| ``mkN026`` | ``Str`` ``->`` [N #N] | +| ``mkN027`` | ``Str`` ``->`` [N #N] | +| ``mkN028`` | ``Str`` ``->`` [N #N] | +| ``mkN028a`` | ``Str`` ``->`` [N #N] | +| ``mkN029`` | ``Str`` ``->`` [N #N] | +| ``mkN030`` | ``Str`` ``->`` [N #N] | +| ``mkN031`` | ``Str`` ``->`` [N #N] | +| ``mkN031a`` | ``Str`` ``->`` [N #N] | +| ``mkN032`` | ``Str`` ``->`` [N #N] | +| ``mkN032a`` | ``Str`` ``->`` [N #N] | +| ``mkN033`` | ``Str`` ``->`` [N #N] | +| ``mkN034`` | ``Str`` ``->`` [N #N] | +| ``mkN035`` | ``Str`` ``->`` [N #N] | +| ``mkN035a`` | ``Str`` ``->`` [N #N] | +| ``mkN036`` | ``Str`` ``->`` [N #N] | +| ``mkN037`` | ``Str`` ``->`` [N #N] | +| ``mkN038`` | ``Str`` ``->`` [N #N] | +| ``mkN039`` | ``Str`` ``->`` [N #N] | +| ``mkN040`` | ``Str`` ``->`` [N #N] | +| ``mkN040a`` | ``Str`` ``->`` [N #N] | +| ``mkN041`` | ``Str`` ``->`` [N #N] | +| ``mkN041a`` | ``Str`` ``->`` [N #N] | +| ``mkN041b`` | ``Str`` ``->`` [N #N] | +| ``mkN042`` | ``Str`` ``->`` [N #N] | +| ``mkN043`` | ``Str`` ``->`` [N #N] | +| ``mkN043a`` | ``Str`` ``->`` [N #N] | +| ``mkN044`` | ``Str`` ``->`` [N #N] | +| ``mkN045`` | ``Str`` ``->`` [N #N] | +| ``mkN046`` | ``Str`` ``->`` [N #N] | +| ``mkN047`` | ``Str`` ``->`` [N #N] | +| ``mkN048`` | ``Str`` ``->`` [N #N] | +| ``mkN049`` | ``Str`` ``->`` [N #N] | +| ``mkN050`` | ``Str`` ``->`` [N #N] | +| ``mkN051`` | ``Str`` ``->`` [N #N] | +| ``mkN052`` | ``Str`` ``->`` [N #N] | +| ``mkN052a`` | ``Str`` ``->`` [N #N] | +| ``mkN053`` | ``Str`` ``->`` [N #N] | +| ``mkN054`` | ``Str`` ``->`` [N #N] | +| ``mkN055`` | ``Str`` ``->`` [N #N] | +| ``mkN056`` | ``Str`` ``->`` [N #N] | +| ``mkN057`` | ``Str`` ``->`` [N #N] | +| ``mkN057a`` | ``Str`` ``->`` [N #N] | +| ``mkN058`` | ``Str`` ``->`` [N #N] | +| ``mkN059`` | ``Str`` ``->`` [N #N] | +| ``mkN060`` | ``Str`` ``->`` [N #N] | +| ``mkN061`` | ``Str`` ``->`` [N #N] | +| ``mkN062`` | ``Str`` ``->`` [N #N] | +| ``mkN063`` | ``Str`` ``->`` [N #N] | +| ``mkN064`` | ``Str`` ``->`` [N #N] | +| ``mkN065`` | ``Str`` ``->`` [N #N] | +| ``mkN066`` | ``Str`` ``->`` [N #N] | +| ``mkN067`` | ``Str`` ``->`` [N #N] | +| ``mkN068`` | ``Str`` ``->`` [N #N] | +| ``mkN069`` | ``Str`` ``->`` [N #N] | +| ``mkN070`` | ``Str`` ``->`` [N #N] | +| ``mkN071`` | ``Str`` ``->`` [N #N] | +| ``mkN072`` | ``Str`` ``->`` [N #N] | +| ``mkN073`` | ``Str`` ``->`` [N #N] | +| ``mkN074`` | ``Str`` ``->`` [N #N] | +| ``mkN075`` | ``Str`` ``->`` [N #N] | +| ``mkA076`` | ``Str`` ``->`` [A #A] | +| ``mkA077`` | ``Str`` ``->`` [A #A] | +| ``mkA078`` | ``Str`` ``->`` [A #A] | +| ``mkA079`` | ``Str`` ``->`` [A #A] | +| ``mkA080`` | ``Str`` ``->`` [A #A] | +| ``mkA081`` | ``Str`` ``->`` [A #A] | +| ``mkA082`` | ``Str`` ``->`` [A #A] | +| ``mkA082a`` | ``Str`` ``->`` [A #A] | +| ``mkA083`` | ``Str`` ``->`` [A #A] | +| ``mkA084`` | ``Str`` ``->`` [A #A] | +| ``mkA084a`` | ``Str`` ``->`` [A #A] | +| ``mkA085`` | ``Str`` ``->`` [A #A] | +| ``mkA086`` | ``Str`` ``->`` [A #A] | +| ``mkA087`` | ``Str`` ``->`` [A #A] | +| ``mkA088`` | ``Str`` ``->`` [A #A] | +| ``mkA089a`` | ``Str`` ``->`` [A #A] | +| ``mkV142`` | ``Str`` ``->`` [VTable #VTable] | +| ``mkV143`` | ``Str`` ``->`` [VTable #VTable] | +| ``mkV144`` | ``Str`` ``->`` [VTable #VTable] | +| ``mkV145`` | ``Str`` ``->`` [VTable #VTable] | +| ``mkV145a`` | ``Str`` ``->`` [VTable #VTable] | +| ``mkV145b`` | ``Str`` ``->`` [VTable #VTable] | +| ``mkV146`` | ``Str`` ``->`` [VTable #VTable] | +| ``mkV146a`` | ``Str`` ``->`` [VTable #VTable] | +| ``mkV147`` | ``Str`` ``->`` [VTable #VTable] | +| ``mkV148`` | ``Str`` ``->`` [VTable #VTable] | +| ``mkV149`` | ``Str`` ``->`` [VTable #VTable] | +| ``mkV150`` | ``Str`` ``->`` [VTable #VTable] | +| ``mkV150a`` | ``Str`` ``->`` [VTable #VTable] | +| ``mkV151`` | ``Str`` ``->`` [VTable #VTable] | +| ``mkV152`` | ``Str`` ``->`` [VTable #VTable] | +| ``mkV152a`` | ``Str`` ``->`` [VTable #VTable] | +| ``mkV153`` | ``Str`` ``->`` [VTable #VTable] | +| ``mkV154`` | ``Str`` ``->`` [VTable #VTable] | +| ``mkV155`` | ``Str`` ``->`` [VTable #VTable] | +| ``mkV156`` | ``Str`` ``->`` [VTable #VTable] | +| ``mkV157`` | ``Str`` ``->`` [VTable #VTable] | +| ``mkV158`` | ``Str`` ``->`` [VTable #VTable] | +| ``mkV159`` | ``Str`` ``->`` [VTable #VTable] | +| ``mkV160`` | ``Str`` ``->`` [VTable #VTable] | +| ``mkV160a`` | ``Str`` ``->`` [VTable #VTable] | +| ``mkV161`` | ``Str`` ``->`` [VTable #VTable] | +| ``mkV161a`` | ``Str`` ``->`` [VTable #VTable] | +| ``mkV162`` | ``Str`` ``->`` [VTable #VTable] | +| ``mkV163`` | ``Str`` ``->`` [VTable #VTable] | +| ``mkV164`` | ``Str`` ``->`` [VTable #VTable] | +| ``mkV165`` | ``Str`` ``->`` [VTable #VTable] | +| ``mkV166`` | ``Str`` ``->`` [VTable #VTable] | +| ``mkV167`` | ``Str`` ``->`` [VTable #VTable] | +| ``mkV168`` | ``Str`` ``->`` [VTable #VTable] | +| ``mkV169`` | ``Str`` ``->`` [VTable #VTable] | +| ``mkV170`` | ``Str`` ``->`` [VTable #VTable] | +| ``mkV171`` | ``Str`` ``->`` [VTable #VTable] | +| ``mkV172`` | ``Str`` ``->`` [VTable #VTable] | +| ``mkV173`` | ``Str`` ``->`` [VTable #VTable] | +| ``mkV174`` | ``Str`` ``->`` [VTable #VTable] | +| ``mkV175`` | ``Str`` ``->`` [VTable #VTable] | +| ``mkV176`` | ``Str`` ``->`` [VTable #VTable] | +| ``mkV177`` | ``Str`` ``->`` [VTable #VTable] | +| ``mkV178`` | ``Str`` ``->`` [VTable #VTable] | +| ``mkV179`` | ``Str`` ``->`` [VTable #VTable] | +| ``mkV180`` | ``Str`` ``->`` [VTable #VTable] | +| ``mkV181`` | ``Str`` ``->`` [VTable #VTable] | +| ``mkV182`` | ``Str`` ``->`` [VTable #VTable] | +| ``mkV183`` | ``Str`` ``->`` [VTable #VTable] | +| ``mkV184`` | ``Str`` ``->`` [VTable #VTable] | +| ``mkV185`` | ``Str`` ``->`` [VTable #VTable] | +| ``mkV186`` | ``Str`` ``->`` [VTable #VTable] | +| ``mkV187`` | ``Str`` ``->`` [VTable #VTable] | +| ``adjAdv`` | [A #A] ``->`` ``Str`` ``->`` [A #A] ``=`` | + + +==Paradigms for Catalan== +#LParadigms + + +source [``http://www.cs.chalmers.se/~aarne/GF/lib/resource/src/catalan/ParadigmsCat.gf`` ../src/catalan/ParadigmsCat.gf] + + + + +|| Function | Type || +| ``Gender`` | [Type #Type] | +| ``masculine`` | [Gender #Gender] | +| ``feminine`` | [Gender #Gender] | +| ``Number`` | [Type #Type] | +| ``singular`` | [Number #Number] | +| ``plural`` | [Number #Number] | +| ``accusative`` | [Prep #Prep] | +| ``genitive`` | [Prep #Prep] | +| ``dative`` | [Prep #Prep] | +| ``mkPrep`` | ``Str`` ``->`` [Prep #Prep] | +| ``mkN`` | ``(llum`` ``:`` ``Str)`` ``->`` [N #N] | +| ``mkN`` | ``Str`` ``->`` [Gender #Gender] ``->`` [N #N] | +| ``mkN`` | ``(disc,discos`` ``:`` ``Str)`` ``->`` [Gender #Gender] ``->`` [N #N] | +| ``compN`` | [N #N] ``->`` ``Str`` ``->`` [N #N] | +| ``mkN2`` | [N #N] ``->`` [Prep #Prep] ``->`` [N2 #N2] | +| ``deN2`` | [N #N] ``->`` [N2 #N2] | +| ``aN2`` | [N #N] ``->`` [N2 #N2] | +| ``mkN3`` | [N #N] ``->`` [Prep #Prep] ``->`` [Prep #Prep] ``->`` [N3 #N3] | +| ``mkPN`` | ``(Anna`` ``:`` ``Str)`` ``->`` [PN #PN] | +| ``mkPN`` | ``(Pilar`` ``:`` ``Str)`` ``->`` [Gender #Gender] ``->`` [PN #PN] | +| ``mkA`` | ``(sol`` ``:`` ``Str)`` ``->`` [A #A] | +| ``mkA`` | ``(fort,forta,forts,fortes,fortament`` ``:`` ``Str)`` ``->`` [A #A] | +| ``mkA`` | ``(bo`` ``:`` ``A)`` ``->`` ``(millor`` ``:`` ``A)`` ``->`` [A #A] | +| ``prefixA`` | [A #A] ``->`` [A #A] | +| ``mkA2`` | [A #A] ``->`` [Prep #Prep] ``->`` [A2 #A2] | +| ``mkAdv`` | ``Str`` ``->`` [Adv #Adv] | +| ``mkAdV`` | ``Str`` ``->`` [AdV #AdV] | +| ``mkAdA`` | ``Str`` ``->`` [AdA #AdA] | +| ``mkV`` | ``(cantar`` ``:`` ``Str)`` ``->`` [V #V] | +| ``mkV`` | [Verbum #Verbum] ``->`` [V #V] | +| ``reflV`` | [V #V] ``->`` [V #V] | +| ``special_ppV`` | [V #V] ``->`` ``Str`` ``->`` [V #V] | +| ``mkV2`` | ``Str`` ``->`` [V2 #V2] | +| ``mkV2`` | [V #V] ``->`` [V2 #V2] | +| ``mkV2`` | [V #V] ``->`` [Prep #Prep] ``->`` [V2 #V2] | +| ``v2V`` | [V2 #V2] ``->`` [V #V] | +| ``mkV3`` | [V #V] ``->`` [Prep #Prep] ``->`` [Prep #Prep] ``->`` [V3 #V3] | +| ``dirV3`` | [V #V] ``->`` [Prep #Prep] ``->`` [V3 #V3] | +| ``dirdirV3`` | [V #V] ``->`` [V3 #V3] | +| ``mkV0`` | [V #V] ``->`` [V0 #V0] | +| ``mkVS`` | [V #V] ``->`` [VS #VS] | +| ``mkV2S`` | [V #V] ``->`` [Prep #Prep] ``->`` [V2S #V2S] | +| ``mkVV`` | [V #V] ``->`` [VV #VV] | +| ``deVV`` | [V #V] ``->`` [VV #VV] | +| ``aVV`` | [V #V] ``->`` [VV #VV] | +| ``mkV2V`` | [V #V] ``->`` [Prep #Prep] ``->`` [Prep #Prep] ``->`` [V2V #V2V] | +| ``mkVA`` | [V #V] ``->`` [VA #VA] | +| ``mkV2A`` | [V #V] ``->`` [Prep #Prep] ``->`` [Prep #Prep] ``->`` [V2A #V2A] | +| ``mkVQ`` | [V #V] ``->`` [VQ #VQ] | +| ``mkV2Q`` | [V #V] ``->`` [Prep #Prep] ``->`` [V2Q #V2Q] | +| ``mkAS`` | [A #A] ``->`` [AS #AS] | +| ``mkA2S`` | [A #A] ``->`` [Prep #Prep] ``->`` [A2S #A2S] | +| ``mkAV`` | [A #A] ``->`` [Prep #Prep] ``->`` [AV #AV] | +| ``mkA2V`` | [A #A] ``->`` [Prep #Prep] ``->`` [Prep #Prep] ``->`` [A2V #A2V] | +| ``V0`` | [Type #Type] | + + +==Paradigms for Danish== +#LParadigms + + +source [``http://www.cs.chalmers.se/~aarne/GF/lib/resource/src/danish/ParadigmsDan.gf`` ../src/danish/ParadigmsDan.gf] + + + + +|| Function | Type || +| ``Gender`` | [Type #Type] | +| ``utrum`` | [Gender #Gender] | +| ``neutrum`` | [Gender #Gender] | +| ``Number`` | [Type #Type] | +| ``singular`` | [Number #Number] | +| ``plural`` | [Number #Number] | +| ``Case`` | [Type #Type] | +| ``nominative`` | [Case #Case] | +| ``genitive`` | [Case #Case] | +| ``mkPrep`` | ``Str`` ``->`` [Prep #Prep] | +| ``noPrep`` | [Prep #Prep] | +| ``mkN`` | ``(bil`` ``:`` ``Str)`` ``->`` [N #N] | +| ``mkN`` | ``(hus`` ``:`` ``Str)`` ``->`` [Gender #Gender] ``->`` [N #N] | +| ``mkN`` | ``(bil,bilen`` ``:`` ``Str)`` ``->`` [N #N] | +| ``mkN`` | ``(bil,bilen,biler`` ``:`` ``Str)`` ``->`` [N #N] | +| ``mkN`` | ``(dreng,drengen,drenge,drengene`` ``:`` ``Str)`` ``->`` [N #N] | +| ``mkN2`` | [N #N] ``->`` [Prep #Prep] ``->`` [N2 #N2] | +| ``regN2`` | ``Str`` ``->`` [Gender #Gender] ``->`` [N2 #N2] | +| ``mkN3`` | [N #N] ``->`` [Prep #Prep] ``->`` [Prep #Prep] ``->`` [N3 #N3] | +| ``mkPN`` | ``Str`` ``->`` [PN #PN] | +| ``mkPN`` | ``Str`` ``->`` [Gender #Gender] ``->`` [PN #PN] | +| ``mkPN`` | [N #N] ``->`` [PN #PN] | +| ``mkA`` | ``(fin`` ``:`` ``Str)`` ``->`` [A #A] | +| ``mkA`` | ``(fin,fint`` ``:`` ``Str)`` ``->`` [A #A] | +| ``mkA`` | ``(galen,galet,galne`` ``:`` ``Str)`` ``->`` [A #A] | +| ``mkA`` | ``(stor,stort,store,storre,storst`` ``:`` ``Str)`` ``->`` [A #A] | +| ``mkA`` | [A #A] ``->`` [A #A] | +| ``mkA2`` | [A #A] ``->`` [Prep #Prep] ``->`` [A2 #A2] | +| ``mkAdv`` | ``Str`` ``->`` [Adv #Adv] | +| ``mkAdV`` | ``Str`` ``->`` [AdV #AdV] | +| ``mkAdA`` | ``Str`` ``->`` [AdA #AdA] | +| ``mkV`` | ``(snakke`` ``:`` ``Str)`` ``->`` [V #V] | +| ``mkV`` | ``(leve,levde`` ``:`` ``Str)`` ``->`` [V #V] | +| ``mkV`` | ``(drikke,`` ``drakk,`` ``drukket`` ``:`` ``Str)`` ``->`` [V #V] | +| ``mkV`` | ``(spise,spiser,spises,spiste,spist,spis`` ``:`` ``Str)`` ``->`` [V #V] | +| ``mkV`` | [V #V] ``->`` ``Str`` ``->`` [V #V] | +| ``vaereV`` | [V #V] ``->`` [V #V] | +| ``depV`` | [V #V] ``->`` [V #V] | +| ``reflV`` | [V #V] ``->`` [V #V] | +| ``mkV2`` | ``Str`` ``->`` [V2 #V2] | +| ``mkV2`` | [V #V] ``->`` [V2 #V2] | +| ``mkV2`` | [V #V] ``->`` [Prep #Prep] ``->`` [V2 #V2] | +| ``mkV3`` | [V #V] ``->`` [Prep #Prep] ``->`` [Prep #Prep] ``->`` [V3 #V3] | +| ``dirV3`` | [V #V] ``->`` [Prep #Prep] ``->`` [V3 #V3] | +| ``dirdirV3`` | [V #V] ``->`` [V3 #V3] | +| ``mkV0`` | [V #V] ``->`` [V0 #V0] | +| ``mkVS`` | [V #V] ``->`` [VS #VS] | +| ``mkV2S`` | [V #V] ``->`` [Prep #Prep] ``->`` [V2S #V2S] | +| ``mkVV`` | [V #V] ``->`` [VV #VV] | +| ``mkV2V`` | [V #V] ``->`` [Prep #Prep] ``->`` [Prep #Prep] ``->`` [V2V #V2V] | +| ``mkVA`` | [V #V] ``->`` [VA #VA] | +| ``mkV2A`` | [V #V] ``->`` [Prep #Prep] ``->`` [V2A #V2A] | +| ``mkVQ`` | [V #V] ``->`` [VQ #VQ] | +| ``mkV2Q`` | [V #V] ``->`` [Prep #Prep] ``->`` [V2Q #V2Q] | +| ``mkAS`` | [A #A] ``->`` [AS #AS] | +| ``mkA2S`` | [A #A] ``->`` [Prep #Prep] ``->`` [A2S #A2S] | +| ``mkAV`` | [A #A] ``->`` [AV #AV] | +| ``mkA2V`` | [A #A] ``->`` [Prep #Prep] ``->`` [A2V #A2V] | +| ``V0`` | [Type #Type] | + + +==Paradigms for English== +#LParadigms + + +source [``http://www.cs.chalmers.se/~aarne/GF/lib/resource/src/english/ParadigmsEng.gf`` ../src/english/ParadigmsEng.gf] + + + + +|| Function | Type || +| ``Gender`` | [Type #Type] | +| ``human`` | [Gender #Gender] | +| ``nonhuman`` | [Gender #Gender] | +| ``masculine`` | [Gender #Gender] | +| ``feminine`` | [Gender #Gender] | +| ``Number`` | [Type #Type] | +| ``singular`` | [Number #Number] | +| ``plural`` | [Number #Number] | +| ``Case`` | [Type #Type] | +| ``nominative`` | [Case #Case] | +| ``genitive`` | [Case #Case] | +| ``mkN`` | ``(flash`` ``:`` ``Str)`` ``->`` [N #N] | +| ``mkN`` | ``(man,men`` ``:`` ``Str)`` ``->`` [N #N] | +| ``mkN`` | ``(man,men,man's,men's`` ``:`` ``Str)`` ``->`` [N #N] | +| ``mkN`` | [Gender #Gender] ``->`` [N #N] ``->`` [N #N] | +| ``mkN`` | ``Str`` ``->`` [N #N] ``->`` [N #N] | +| ``mkN2`` | [N #N] ``->`` [Prep #Prep] ``->`` [N2 #N2] | +| ``mkN2`` | [N #N] ``->`` ``Str`` ``->`` [N2 #N2] | +| ``mkN2`` | ``Str`` ``->`` ``Str`` ``->`` [N2 #N2] | +| ``mkN2`` | [N #N] ``->`` [N2 #N2] | +| ``mkN2`` | ``Str`` ``->`` [N2 #N2] | +| ``mkN3`` | [N #N] ``->`` [Prep #Prep] ``->`` [Prep #Prep] ``->`` [N3 #N3] | +| ``mkPN`` | ``Str`` ``->`` [PN #PN] | +| ``mkPN`` | [N #N] ``->`` [PN #PN] | +| ``mkQuant`` | ``(this,`` ``these`` ``:`` ``Str)`` ``->`` [Quant #Quant] | +| ``mkQuant`` | ``(no_sg,`` ``no_pl,`` ``none_sg,`` ``non_pl`` ``:`` ``Str)`` ``->`` [Quant #Quant] | +| ``mkOrd`` | ``Str`` ``->`` [Ord #Ord] | +| ``mkA`` | ``(happy`` ``:`` ``Str)`` ``->`` [A #A] | +| ``mkA`` | ``(fat,fatter`` ``:`` ``Str)`` ``->`` [A #A] | +| ``mkA`` | ``(good,better,best,well`` ``:`` ``Str)`` ``->`` [A #A] | +| ``compoundA`` | [A #A] ``->`` [A #A] | +| ``simpleA`` | [A #A] ``->`` [A #A] | +| ``mkA2`` | [A #A] ``->`` [Prep #Prep] ``->`` [A2 #A2] | +| ``mkA2`` | [A #A] ``->`` ``Str`` ``->`` [A2 #A2] | +| ``mkA2`` | ``Str`` ``->`` [Prep #Prep] ``->`` [A2 #A2] | +| ``mkA2`` | ``Str`` ``->`` ``Str`` ``->`` [A2 #A2] | +| ``mkAdv`` | ``Str`` ``->`` [Adv #Adv] | +| ``mkAdV`` | ``Str`` ``->`` [AdV #AdV] | +| ``mkAdA`` | ``Str`` ``->`` [AdA #AdA] | +| ``mkAdN`` | ``Str`` ``->`` [AdN #AdN] | +| ``mkPrep`` | ``Str`` ``->`` [Prep #Prep] | +| ``noPrep`` | [Prep #Prep] | +| ``mkConj`` | ``Str`` ``->`` [Conj #Conj] | +| ``mkConj`` | ``Str`` ``->`` [Number #Number] ``->`` [Conj #Conj] | +| ``mkConj`` | ``Str`` ``->`` ``Str`` ``->`` [Conj #Conj] | +| ``mkConj`` | ``Str`` ``->`` ``Str`` ``->`` [Number #Number] ``->`` [Conj #Conj] | +| ``mkV`` | ``(cry`` ``:`` ``Str)`` ``->`` [V #V] | +| ``mkV`` | ``(stop,`` ``stopped`` ``:`` ``Str)`` ``->`` [V #V] | +| ``mkV`` | ``(drink,`` ``drank,`` ``drunk`` ``:`` ``Str)`` ``->`` [V #V] | +| ``mkV`` | ``(run,`` ``ran,`` ``run,`` ``running`` ``:`` ``Str)`` ``->`` [V #V] | +| ``mkV`` | ``(go,`` ``goes,`` ``went,`` ``gone,`` ``going`` ``:`` ``Str)`` ``->`` [V #V] | +| ``mkV`` | ``Str`` ``->`` [V #V] ``->`` [V #V] | +| ``partV`` | [V #V] ``->`` ``Str`` ``->`` [V #V] | +| ``reflV`` | [V #V] ``->`` [V #V] | +| ``mkV2`` | ``Str`` ``->`` [V2 #V2] | +| ``mkV2`` | [V #V] ``->`` [V2 #V2] | +| ``mkV2`` | [V #V] ``->`` [Prep #Prep] ``->`` [V2 #V2] | +| ``mkV2`` | [V #V] ``->`` ``Str`` ``->`` [V2 #V2] | +| ``mkV2`` | ``Str`` ``->`` [Prep #Prep] ``->`` [V2 #V2] | +| ``mkV2`` | ``Str`` ``->`` ``Str`` ``->`` [V2 #V2] | +| ``mkV3`` | [V #V] ``->`` [Prep #Prep] ``->`` [Prep #Prep] ``->`` [V3 #V3] | +| ``mkV3`` | [V #V] ``->`` [Prep #Prep] ``->`` [V3 #V3] | +| ``mkV3`` | [V #V] ``->`` ``Str`` ``->`` [V3 #V3] | +| ``mkV3`` | ``Str`` ``->`` ``Str`` ``->`` [V3 #V3] | +| ``mkV3`` | [V #V] ``->`` [V3 #V3] | +| ``mkV3`` | ``Str`` ``->`` [V3 #V3] | +| ``mkV0`` | [V #V] ``->`` [V0 #V0] | +| ``mkVS`` | [V #V] ``->`` [VS #VS] | +| ``mkV2S`` | [V #V] ``->`` [Prep #Prep] ``->`` [V2S #V2S] | +| ``mkVV`` | [V #V] ``->`` [VV #VV] | +| ``mkV2V`` | [V #V] ``->`` [Prep #Prep] ``->`` [Prep #Prep] ``->`` [V2V #V2V] | +| ``mkVA`` | [V #V] ``->`` [VA #VA] | +| ``mkV2A`` | [V #V] ``->`` [Prep #Prep] ``->`` [V2A #V2A] | +| ``mkVQ`` | [V #V] ``->`` [VQ #VQ] | +| ``mkV2Q`` | [V #V] ``->`` [Prep #Prep] ``->`` [V2Q #V2Q] | +| ``mkAS`` | [A #A] ``->`` [AS #AS] | +| ``mkA2S`` | [A #A] ``->`` [Prep #Prep] ``->`` [A2S #A2S] | +| ``mkAV`` | [A #A] ``->`` [AV #AV] | +| ``mkA2V`` | [A #A] ``->`` [Prep #Prep] ``->`` [A2V #A2V] | +| ``V0`` | [Type #Type] | +| ``mkSubj`` | ``Str`` ``->`` [Subj #Subj] ``=`` ``\s`` ``->`` ``{s`` ``=`` ``s`` ``lock_Subj`` ``=`` ``<>}`` | + + +==Paradigms for Finnish== +#LParadigms + + +source [``http://www.cs.chalmers.se/~aarne/GF/lib/resource/src/finnish/ParadigmsFin.gf`` ../src/finnish/ParadigmsFin.gf] + + + + +|| Function | Type || +| ``Number`` | [Type #Type] | +| ``singular`` | [Number #Number] | +| ``plural`` | [Number #Number] | +| ``Case`` | [Type #Type] | +| ``nominative`` | [Case #Case] | +| ``genitive`` | [Case #Case] | +| ``partitive`` | [Case #Case] | +| ``translative`` | [Case #Case] | +| ``inessive`` | [Case #Case] | +| ``elative`` | [Case #Case] | +| ``illative`` | [Case #Case] | +| ``adessive`` | [Case #Case] | +| ``ablative`` | [Case #Case] | +| ``allative`` | [Case #Case] | +| ``prePrep`` | [Case #Case] ``->`` ``Str`` ``->`` [Prep #Prep] | +| ``postPrep`` | [Case #Case] ``->`` ``Str`` ``->`` [Prep #Prep] | +| ``postGenPrep`` | ``Str`` ``->`` [Prep #Prep] | +| ``casePrep`` | [Case #Case] ``->`` [Prep #Prep] | +| ``mkN`` | ``(talo`` ``:`` ``Str)`` ``->`` [N #N] | +| ``mkN`` | ``(savi,savia`` ``:`` ``Str)`` ``->`` [N #N] | +| ``mkN`` | ``(vesi,veden,vesiä`` ``:`` ``Str)`` ``->`` [N #N] | +| ``mkN`` | ``(vesi,veden,vesiä,vettä`` ``:`` ``Str)`` ``->`` [N #N] | +| ``mkN`` | ``(olo,olon,olona,oloa,oloon,olojen,oloja,oloina,oloissa,oloihin`` ``:`` ``Str)`` ``->`` [N #N] | +| ``mkN`` | ``(pika`` ``:`` ``Str)`` ``->`` ``(juna`` ``:`` ``N)`` ``->`` [N #N] | +| ``mkN`` | ``(oma`` ``:`` ``N)`` ``->`` ``(tunto`` ``:`` ``N)`` ``->`` [N #N] | +| ``mkN2`` | [N #N] ``->`` [N2 #N2] | +| ``mkN2`` | [N #N] ``->`` [Prep #Prep] ``->`` [N2 #N2] | +| ``mkN3`` | [N #N] ``->`` [Prep #Prep] ``->`` [Prep #Prep] ``->`` [N3 #N3] | +| ``mkPN`` | ``Str`` ``->`` [PN #PN] | +| ``mkPN`` | [N #N] ``->`` [PN #PN] | +| ``mkA`` | ``Str`` ``->`` [A #A] | +| ``mkA`` | [N #N] ``->`` [A #A] | +| ``mkA`` | [N #N] ``->`` ``(kivempaa,kivinta`` ``:`` ``Str)`` ``->`` [A #A] | +| ``mkA`` | ``(hyva,parempi,paras`` ``:`` ``N)`` ``->`` ``(hyvin,paremmin,parhaiten`` ``:`` ``Str)`` ``->`` [A #A] | +| ``mkA2`` | [A #A] ``->`` [Prep #Prep] ``->`` [A2 #A2] ``=`` ``\a,p`` ``->`` ``a`` ``**`` ``{c2`` ``=`` ``p`` ``lock_A2`` ``=`` ``<>};`` | +| ``mkV`` | ``(huutaa`` ``:`` ``Str)`` ``->`` [V #V] | +| ``mkV`` | ``(huutaa,huusi`` ``:`` ``Str)`` ``->`` [V #V] | +| ``mkV`` | ``(huutaa,huudan,huusi`` ``:`` ``Str)`` ``->`` [V #V] | +| ``mkV`` | ``(`` | +| ``huusin,huusi,huusisi,huutanut,huudettu,huutanee`` | ``Str)`` ``->`` [V #V] | +| ``caseV`` | [Case #Case] ``->`` [V #V] ``->`` [V #V] | +| ``vOlla`` | [V #V] | +| ``mkV2`` | ``Str`` ``->`` [V2 #V2] | +| ``mkV2`` | [V #V] ``->`` [V2 #V2] | +| ``mkV2`` | [V #V] ``->`` [Case #Case] ``->`` [V2 #V2] | +| ``mkV2`` | [V #V] ``->`` [Prep #Prep] ``->`` [V2 #V2] | +| ``mkV3`` | [V #V] ``->`` [Prep #Prep] ``->`` [Prep #Prep] ``->`` [V3 #V3] | +| ``dirV3`` | [V #V] ``->`` [Case #Case] ``->`` [V3 #V3] | +| ``dirdirV3`` | [V #V] ``->`` [V3 #V3] | +| ``mkV0`` | [V #V] ``->`` [V0 #V0] | +| ``mkVS`` | [V #V] ``->`` [VS #VS] | +| ``mkV2S`` | [V #V] ``->`` [Prep #Prep] ``->`` [V2S #V2S] | +| ``mkVV`` | [V #V] ``->`` [VV #VV] | +| ``mkVVf`` | [V #V] ``->`` [InfForm #InfForm] ``->`` [VV #VV] | +| ``mkV2V`` | [V #V] ``->`` [Prep #Prep] ``->`` [V2V #V2V] | +| ``mkV2Vf`` | [V #V] ``->`` [Prep #Prep] ``->`` [InfForm #InfForm] ``->`` [V2V #V2V] | +| ``mkVA`` | [V #V] ``->`` [Prep #Prep] ``->`` [VA #VA] | +| ``mkV2A`` | [V #V] ``->`` [Prep #Prep] ``->`` [Prep #Prep] ``->`` [V2A #V2A] | +| ``mkVQ`` | [V #V] ``->`` [VQ #VQ] | +| ``mkV2Q`` | [V #V] ``->`` [Prep #Prep] ``->`` [V2Q #V2Q] | +| ``mkAS`` | [A #A] ``->`` [AS #AS] | +| ``mkA2S`` | [A #A] ``->`` [Prep #Prep] ``->`` [A2S #A2S] | +| ``mkAV`` | [A #A] ``->`` [AV #AV] | +| ``mkA2V`` | [A #A] ``->`` [Prep #Prep] ``->`` [A2V #A2V] | +| ``V0`` | [Type #Type] | + + +==Paradigms for French== +#LParadigms + + +source [``http://www.cs.chalmers.se/~aarne/GF/lib/resource/src/french/ParadigmsFre.gf`` ../src/french/ParadigmsFre.gf] + + + + +|| Function | Type || +| ``Gender`` | [Type #Type] | +| ``masculine`` | [Gender #Gender] | +| ``feminine`` | [Gender #Gender] | +| ``Number`` | [Type #Type] | +| ``singular`` | [Number #Number] | +| ``plural`` | [Number #Number] | +| ``accusative`` | [Prep #Prep] | +| ``genitive`` | [Prep #Prep] | +| ``dative`` | [Prep #Prep] | +| ``mkPrep`` | ``Str`` ``->`` [Prep #Prep] | +| ``mkN`` | ``(cheval`` ``:`` ``Str)`` ``->`` [N #N] | +| ``mkN`` | ``(foie`` ``:`` ``Str)`` ``->`` [Gender #Gender] ``->`` [N #N] | +| ``mkN`` | ``(oeil,yeux`` ``:`` ``Str)`` ``->`` [Gender #Gender] ``->`` [N #N] | +| ``mkN`` | [N #N] ``->`` ``Str`` ``->`` [N #N] | +| ``mkN2`` | [N #N] ``->`` [Prep #Prep] ``->`` [N2 #N2] | +| ``deN2`` | [N #N] ``->`` [N2 #N2] | +| ``aN2`` | [N #N] ``->`` [N2 #N2] | +| ``mkN3`` | [N #N] ``->`` [Prep #Prep] ``->`` [Prep #Prep] ``->`` [N3 #N3] | +| ``mkPN`` | ``Str`` ``->`` [PN #PN] | +| ``mkPN`` | ``Str`` ``->`` [Gender #Gender] ``->`` [PN #PN] | +| ``mkA`` | ``(cher`` ``:`` ``Str)`` ``->`` [A #A] | +| ``mkA`` | ``(sec,seche`` ``:`` ``Str)`` ``->`` [A #A] | +| ``mkA`` | ``(banal,banale,banaux,banalement`` ``:`` ``Str)`` ``->`` [A #A] | +| ``mkA`` | [A #A] ``->`` [A #A] ``->`` [A #A] | +| ``prefixA`` | [A #A] ``->`` [A #A] | +| ``mkA2`` | [A #A] ``->`` [Prep #Prep] ``->`` [A2 #A2] | +| ``mkAdv`` | ``Str`` ``->`` [Adv #Adv] | +| ``mkAdV`` | ``Str`` ``->`` [AdV #AdV] | +| ``mkAdA`` | ``Str`` ``->`` [AdA #AdA] | +| ``mkV`` | ``(finir`` ``:`` ``Str)`` ``->`` [V #V] | +| ``mkV`` | ``(jeter,jette,jettera`` ``:`` ``Str)`` ``->`` [V #V] | +| ``mkV`` | [V2 #V2] ``->`` [V #V] | +| ``etreV`` | [V #V] ``->`` [V #V] | +| ``reflV`` | [V #V] ``->`` [V #V] | +| ``mkV2`` | ``Str`` ``->`` [V2 #V2] ``=`` ``\s`` ``->`` ``dirV2`` ``(regV`` ``s)`` | +| ``mkV2`` | [V #V] ``->`` [V2 #V2] ``=`` ``dirV2`` | +| ``mkV2`` | [V #V] ``->`` [Prep #Prep] ``->`` [V2 #V2] ``=`` ``mmkV2`` | +| ``mkV3`` | [V #V] ``->`` [V3 #V3] | +| ``mkV3`` | [V #V] ``->`` [Prep #Prep] ``->`` [V3 #V3] | +| ``mkV3`` | [V #V] ``->`` [Prep #Prep] ``->`` [Prep #Prep] ``->`` [V3 #V3] | +| ``mkV0`` | [V #V] ``->`` [V0 #V0] | +| ``mkVS`` | [V #V] ``->`` [VS #VS] | +| ``mkV2S`` | [V #V] ``->`` [Prep #Prep] ``->`` [V2S #V2S] | +| ``mkVV`` | [V #V] ``->`` [VV #VV] | +| ``deVV`` | [V #V] ``->`` [VV #VV] | +| ``aVV`` | [V #V] ``->`` [VV #VV] | +| ``mkV2V`` | [V #V] ``->`` [Prep #Prep] ``->`` [Prep #Prep] ``->`` [V2V #V2V] | +| ``mkVA`` | [V #V] ``->`` [VA #VA] | +| ``mkV2A`` | [V #V] ``->`` [Prep #Prep] ``->`` [Prep #Prep] ``->`` [V2A #V2A] | +| ``mkVQ`` | [V #V] ``->`` [VQ #VQ] | +| ``mkV2Q`` | [V #V] ``->`` [Prep #Prep] ``->`` [V2Q #V2Q] | +| ``mkAS`` | [A #A] ``->`` [AS #AS] | +| ``mkA2S`` | [A #A] ``->`` [Prep #Prep] ``->`` [A2S #A2S] | +| ``mkAV`` | [A #A] ``->`` [Prep #Prep] ``->`` [AV #AV] | +| ``mkA2V`` | [A #A] ``->`` [Prep #Prep] ``->`` [Prep #Prep] ``->`` [A2V #A2V] | +| ``V0`` | [Type #Type] | + + +==Paradigms for German== +#LParadigms + + +source [``http://www.cs.chalmers.se/~aarne/GF/lib/resource/src/german/ParadigmsGer.gf`` ../src/german/ParadigmsGer.gf] + + + + +|| Function | Type || +| ``Gender`` | [Type #Type] | +| ``masculine`` | [Gender #Gender] | +| ``feminine`` | [Gender #Gender] | +| ``neuter`` | [Gender #Gender] | +| ``Case`` | [Type #Type] | +| ``nominative`` | [Case #Case] | +| ``accusative`` | [Case #Case] | +| ``dative`` | [Case #Case] | +| ``genitive`` | [Case #Case] | +| ``Number`` | [Type #Type] | +| ``singular`` | [Number #Number] | +| ``plural`` | [Number #Number] | +| ``mkN`` | ``(Stufe`` ``:`` ``Str)`` ``->`` [N #N] | +| ``mkN`` | ``(Bild,Bilder`` ``:`` ``Str)`` ``->`` [Gender #Gender] ``->`` [N #N] | +| ``mkN`` | ``(x1,_,_,_,_,x6`` ``:`` ``Str)`` ``->`` [Gender #Gender] ``->`` [N #N] | +| ``mkN2`` | ``Str`` ``->`` [N2 #N2] | +| ``mkN2`` | [N #N] ``->`` [N2 #N2] | +| ``mkN2`` | [N #N] ``->`` [Prep #Prep] ``->`` [N2 #N2] | +| ``mkN3`` | [N #N] ``->`` [Prep #Prep] ``->`` [Prep #Prep] ``->`` [N3 #N3] | +| ``mkPN`` | ``Str`` ``->`` [PN #PN] | +| ``mkPN`` | ``(nom,gen`` ``:`` ``Str)`` ``->`` [PN #PN] | +| ``mkPN`` | ``(nom,acc,dat,gen`` ``:`` ``Str)`` ``->`` [PN #PN] | +| ``mkA`` | ``Str`` ``->`` [A #A] | +| ``mkA`` | ``(gut,besser,beste`` ``:`` ``Str)`` ``->`` [A #A] | +| ``mkA`` | ``(gut,gute,besser,beste`` ``:`` ``Str)`` ``->`` [A #A] | +| ``invarA`` | ``Str`` ``->`` [A #A] | +| ``mkA2`` | [A #A] ``->`` [Prep #Prep] ``->`` [A2 #A2] | +| ``mkAdv`` | ``Str`` ``->`` [Adv #Adv] | +| ``mkPrep`` | ``Str`` ``->`` [Case #Case] ``->`` [Prep #Prep] | +| ``accPrep`` | [Prep #Prep] | +| ``datPrep`` | [Prep #Prep] | +| ``genPrep`` | [Prep #Prep] | +| ``von_Prep`` | [Prep #Prep] | +| ``zu_Prep`` | [Prep #Prep] | +| ``mkV`` | ``(führen`` ``:`` ``Str)`` ``->`` [V #V] | +| ``mkV`` | ``(sehen,sieht,sah,sähe,gesehen`` ``:`` ``Str)`` ``->`` [V #V] | +| ``mkV`` | ``(geben,`` ``gibt,`` ``gib,`` ``gab,`` ``gäbe,`` ``gegeben`` ``:`` ``Str)`` ``->`` [V #V] | +| ``mkV`` | ``Str`` ``->`` [V #V] ``->`` [V #V] | +| ``no_geV`` | [V #V] ``->`` [V #V] | +| ``seinV`` | [V #V] ``->`` [V #V] | +| ``habenV`` | [V #V] ``->`` [V #V] | +| ``reflV`` | [V #V] ``->`` [Case #Case] ``->`` [V #V] | +| ``mkV2`` | ``Str`` ``->`` [V2 #V2] | +| ``mkV2`` | [V #V] ``->`` [V2 #V2] | +| ``mkV2`` | [V #V] ``->`` [Prep #Prep] ``->`` [V2 #V2] | +| ``mkV2`` | [V #V] ``->`` [Case #Case] ``->`` [V2 #V2] | +| ``mkV3`` | [V #V] ``->`` [Prep #Prep] ``->`` [Prep #Prep] ``->`` [V3 #V3] | +| ``dirV3`` | [V #V] ``->`` [Prep #Prep] ``->`` [V3 #V3] | +| ``accdatV3`` | [V #V] ``->`` [V3 #V3] | +| ``mkV0`` | [V #V] ``->`` [V0 #V0] | +| ``mkVS`` | [V #V] ``->`` [VS #VS] | +| ``mkV2S`` | [V #V] ``->`` [Prep #Prep] ``->`` [V2S #V2S] | +| ``mkVV`` | [V #V] ``->`` [VV #VV] | +| ``mkV2V`` | [V #V] ``->`` [Prep #Prep] ``->`` [V2V #V2V] | +| ``mkVA`` | [V #V] ``->`` [VA #VA] | +| ``mkV2A`` | [V #V] ``->`` [Prep #Prep] ``->`` [V2A #V2A] | +| ``mkVQ`` | [V #V] ``->`` [VQ #VQ] | +| ``mkV2Q`` | [V #V] ``->`` [Prep #Prep] ``->`` [V2Q #V2Q] | +| ``mkAS`` | [A #A] ``->`` [AS #AS] | +| ``mkA2S`` | [A #A] ``->`` [Prep #Prep] ``->`` [A2S #A2S] | +| ``mkAV`` | [A #A] ``->`` [AV #AV] | +| ``mkA2V`` | [A #A] ``->`` [Prep #Prep] ``->`` [A2V #A2V] | +| ``V0`` | [Type #Type] | + + +==Paradigms for Italian== +#LParadigms + + +source [``http://www.cs.chalmers.se/~aarne/GF/lib/resource/src/italian/ParadigmsIta.gf`` ../src/italian/ParadigmsIta.gf] + + + + +|| Function | Type || +| ``Gender`` | [Type #Type] | +| ``masculine`` | [Gender #Gender] | +| ``feminine`` | [Gender #Gender] | +| ``Number`` | [Type #Type] | +| ``singular`` | [Number #Number] | +| ``plural`` | [Number #Number] | +| ``--Prep`` | [Type #Type] | +| ``accusative`` | [Prep #Prep] | +| ``genitive`` | [Prep #Prep] | +| ``dative`` | [Prep #Prep] | +| ``mkPrep`` | ``Str`` ``->`` [Prep #Prep] | +| ``mkN`` | ``(cane`` ``:`` ``Str)`` ``->`` [N #N] | +| ``mkN`` | ``(carne`` ``:`` ``Str)`` ``->`` [Gender #Gender] ``->`` [N #N] | +| ``mkN`` | ``(uomo,uomini`` ``:`` ``Str)`` ``->`` [Gender #Gender] ``->`` [N #N] | +| ``mkN`` | [N #N] ``->`` ``Str`` ``->`` [N #N] | +| ``mkN2`` | ``Str`` ``->`` [N2 #N2] | +| ``mkN2`` | [N #N] ``->`` [Prep #Prep] ``->`` [N2 #N2] | +| ``mkN3`` | [N #N] ``->`` [Prep #Prep] ``->`` [Prep #Prep] ``->`` [N3 #N3] | +| ``mkPN`` | ``Str`` ``->`` [PN #PN] | +| ``mkPN`` | ``Str`` ``->`` [Gender #Gender] ``->`` [PN #PN] | +| ``mkA`` | ``(bianco`` ``:`` ``Str)`` ``->`` [A #A] | +| ``mkA`` | ``(solo,sola,soli,sole,solamente`` ``:`` ``Str)`` ``->`` [A #A] | +| ``mkA`` | [A #A] ``->`` [A #A] ``->`` [A #A] | +| ``prefixA`` | [A #A] ``->`` [A #A] ``=`` ``prefA`` | +| ``mkA2`` | [A #A] ``->`` [Prep #Prep] ``->`` [A2 #A2] | +| ``mkAdv`` | ``Str`` ``->`` [Adv #Adv] | +| ``mkAdV`` | ``Str`` ``->`` [AdV #AdV] | +| ``mkAdA`` | ``Str`` ``->`` [AdA #AdA] | +| ``mkV`` | ``Str`` ``->`` [V #V] | +| ``mkV`` | [Verbo #Verbo] ``->`` [V #V] | +| ``mkV`` | ``(udire,odo,ode,udiamo,udiro,udii,udisti,udi,udirono,odi,udito`` ``:`` ``Str)`` ``->`` [V #V] | +| ``essereV`` | [V #V] ``->`` [V #V] | +| ``reflV`` | [V #V] ``->`` [V #V] | +| ``mkV2`` | ``Str`` ``->`` [V2 #V2] | +| ``mkV2`` | [V #V] ``->`` [V2 #V2] | +| ``mkV2`` | [V #V] ``->`` [Prep #Prep] ``->`` [V2 #V2] | +| ``v2V`` | [V2 #V2] ``->`` [V #V] | +| ``mkV3`` | [V #V] ``->`` [Prep #Prep] ``->`` [Prep #Prep] ``->`` [V3 #V3] | +| ``dirV3`` | [V #V] ``->`` [Prep #Prep] ``->`` [V3 #V3] | +| ``dirdirV3`` | [V #V] ``->`` [V3 #V3] | +| ``mkV0`` | [V #V] ``->`` [V0 #V0] | +| ``mkVS`` | [V #V] ``->`` [VS #VS] | +| ``mkV2S`` | [V #V] ``->`` [Prep #Prep] ``->`` [V2S #V2S] | +| ``mkVV`` | [V #V] ``->`` [VV #VV] | +| ``deVV`` | [V #V] ``->`` [VV #VV] | +| ``aVV`` | [V #V] ``->`` [VV #VV] | +| ``mkV2V`` | [V #V] ``->`` [Prep #Prep] ``->`` [Prep #Prep] ``->`` [V2V #V2V] | +| ``mkVA`` | [V #V] ``->`` [VA #VA] | +| ``mkV2A`` | [V #V] ``->`` [Prep #Prep] ``->`` [Prep #Prep] ``->`` [V2A #V2A] | +| ``mkVQ`` | [V #V] ``->`` [VQ #VQ] | +| ``mkV2Q`` | [V #V] ``->`` [Prep #Prep] ``->`` [V2Q #V2Q] | +| ``mkAS`` | [A #A] ``->`` [AS #AS] | +| ``mkA2S`` | [A #A] ``->`` [Prep #Prep] ``->`` [A2S #A2S] | +| ``mkAV`` | [A #A] ``->`` [Prep #Prep] ``->`` [AV #AV] | +| ``mkA2V`` | [A #A] ``->`` [Prep #Prep] ``->`` [Prep #Prep] ``->`` [A2V #A2V] | +| ``V0`` | [Type #Type] | + + +==Paradigms for Norwegian== +#LParadigms + + +source [``http://www.cs.chalmers.se/~aarne/GF/lib/resource/src/norwegian/ParadigmsNor.gf`` ../src/norwegian/ParadigmsNor.gf] + + + + +|| Function | Type || +| ``Gender`` | [Type #Type] | +| ``masculine`` | [Gender #Gender] | +| ``feminine`` | [Gender #Gender] | +| ``neutrum`` | [Gender #Gender] | +| ``Number`` | [Type #Type] | +| ``singular`` | [Number #Number] | +| ``plural`` | [Number #Number] | +| ``Case`` | [Type #Type] | +| ``nominative`` | [Case #Case] | +| ``genitive`` | [Case #Case] | +| ``mkPrep`` | ``Str`` ``->`` [Prep #Prep] | +| ``noPrep`` | [Prep #Prep] | +| ``mkN`` | ``Str`` ``->`` [N #N] | +| ``mkN`` | ``Str`` ``->`` [Gender #Gender] ``->`` [N #N] | +| ``mkN`` | ``(bil,bilen`` ``:`` ``Str)`` ``->`` [N #N] | +| ``mkN`` | ``(dreng,drengen,drenger,drengene`` ``:`` ``Str)`` ``->`` [N #N] | +| ``mkN2`` | [N #N] ``->`` [Prep #Prep] ``->`` [N2 #N2] | +| ``regN2`` | ``Str`` ``->`` [Gender #Gender] ``->`` [N2 #N2] | +| ``mkN3`` | [N #N] ``->`` [Prep #Prep] ``->`` [Prep #Prep] ``->`` [N3 #N3] | +| ``mkPN`` | ``Str`` ``->`` [PN #PN] | +| ``mkPN`` | ``Str`` ``->`` [Gender #Gender] ``->`` [PN #PN] | +| ``mkPN`` | [N #N] ``->`` [PN #PN] | +| ``mkA`` | ``(fin`` ``:`` ``Str)`` ``->`` [A #A] | +| ``mkA`` | ``(fin,fint`` ``:`` ``Str)`` ``->`` [A #A] | +| ``mkA`` | ``(galen,galet,galne`` ``:`` ``Str)`` ``->`` [A #A] | +| ``mkA`` | ``(stor,stort,store,storre,storst`` ``:`` ``Str)`` ``->`` [A #A] | +| ``mkA`` | [A #A] ``->`` [A #A] | +| ``mkA2`` | [A #A] ``->`` [Prep #Prep] ``->`` [A2 #A2] | +| ``mkAdv`` | ``Str`` ``->`` [Adv #Adv] | +| ``mkAdV`` | ``Str`` ``->`` [AdV #AdV] | +| ``mkAdA`` | ``Str`` ``->`` [AdA #AdA] | +| ``mkV`` | ``(snakke`` ``:`` ``Str)`` ``->`` [V #V] | +| ``mkV`` | ``(leve,levde`` ``:`` ``Str)`` ``->`` [V #V] | +| ``mkV`` | ``(drikke,`` ``drakk,`` ``drukket`` ``:`` ``Str)`` ``->`` [V #V] | +| ``mkV`` | ``(spise,spiser,spises,spiste,spist,spis`` ``:`` ``Str)`` ``->`` [V #V] | +| ``mkV`` | [V #V] ``->`` ``Str`` ``->`` [V #V] | +| ``vaereV`` | [V #V] ``->`` [V #V] | +| ``depV`` | [V #V] ``->`` [V #V] | +| ``reflV`` | [V #V] ``->`` [V #V] | +| ``mkV2`` | ``Str`` ``->`` [V2 #V2] | +| ``mkV2`` | [V #V] ``->`` [V2 #V2] | +| ``mkV2`` | [V #V] ``->`` [Prep #Prep] ``->`` [V2 #V2] | +| ``mkV3`` | [V #V] ``->`` [Prep #Prep] ``->`` [Prep #Prep] ``->`` [V3 #V3] | +| ``dirV3`` | [V #V] ``->`` [Prep #Prep] ``->`` [V3 #V3] | +| ``dirdirV3`` | [V #V] ``->`` [V3 #V3] | +| ``mkV0`` | [V #V] ``->`` [V0 #V0] | +| ``mkVS`` | [V #V] ``->`` [VS #VS] | +| ``mkV2S`` | [V #V] ``->`` [Prep #Prep] ``->`` [V2S #V2S] | +| ``mkVV`` | [V #V] ``->`` [VV #VV] | +| ``mkV2V`` | [V #V] ``->`` [Prep #Prep] ``->`` [Prep #Prep] ``->`` [V2V #V2V] | +| ``mkVA`` | [V #V] ``->`` [VA #VA] | +| ``mkV2A`` | [V #V] ``->`` [Prep #Prep] ``->`` [V2A #V2A] | +| ``mkVQ`` | [V #V] ``->`` [VQ #VQ] | +| ``mkV2Q`` | [V #V] ``->`` [Prep #Prep] ``->`` [V2Q #V2Q] | +| ``mkAS`` | [A #A] ``->`` [AS #AS] | +| ``mkA2S`` | [A #A] ``->`` [Prep #Prep] ``->`` [A2S #A2S] | +| ``mkAV`` | [A #A] ``->`` [AV #AV] | +| ``mkA2V`` | [A #A] ``->`` [Prep #Prep] ``->`` [A2V #A2V] | +| ``V0`` | [Type #Type] | + + +==Paradigms for Romanian== +#LParadigms + + +source [``http://www.cs.chalmers.se/~aarne/GF/lib/resource/src/romanian/ParadigmsRon.gf`` ../src/romanian/ParadigmsRon.gf] + + + + +|| Function | Type || +| ``NGender`` | [Type #Type] | +| ``masculine`` | [NGender #NGender] | +| ``feminine`` | [NGender #NGender] | +| ``neuter`` | [NGender #NGender] | +| ``Gender`` | [Type #Type] | +| ``Masculine`` | [Gender #Gender] | +| ``Feminine`` | [Gender #Gender] | +| ``Anim`` | [Type #Type] | +| ``animate`` | [Anim #Anim] | +| ``inanimate`` | ``Anim;`` | +| ``Number`` | [Type #Type] | +| ``singular`` | [Number #Number] | +| ``plural`` | [Number #Number] | +| ``Preposition`` | [Type #Type] | +| ``NCase`` | [Type #Type] | +| ``Acc`` | [NCase #NCase] | +| ``Dat`` | [NCase #NCase] | +| ``Gen`` | [NCase #NCase] | +| ``mkPrep`` | ``Str`` ``->`` [NCase #NCase] ``->`` [Prep #Prep] | +| ``noPrep`` | [NCase #NCase] ``->`` [Prep #Prep] | +| ``mkN2`` | [N #N] ``->`` [Prep #Prep] ``->`` [N2 #N2] | +| ``mkN3`` | [N #N] ``->`` [Prep #Prep] ``->`` [Prep #Prep] ``->`` [N3 #N3] | +| ``mkPN`` | ``Str`` ``->`` [PN #PN] ``=`` ``mkPropN`` | +| ``mkPN`` | ``Str`` ``->`` [Gender #Gender] ``->`` [PN #PN] ``=`` ``mkPropNoun`` | +| ``mkPN`` | ``Str`` ``->`` [Gender #Gender] ``->`` [Number #Number] ``->`` [PN #PN] ``=`` ``mkProperNoun;`` | +| ``mkPropN`` | ``Str`` ``->`` [PN #PN] ``=`` ``\Ion`` ``->`` | +| ``mkPropNoun`` | ``Str`` ``->`` [Gender #Gender] ``->`` [PN #PN] ``=`` ``\Ion,`` ``gen`` ``->`` | +| ``mkProperNoun`` | ``Str`` ``->`` [Gender #Gender] ``->`` [Number #Number] ``->`` [PN #PN] ``=`` ``\Ion,`` ``gen,`` ``num`` ``->`` | +| ``mkA2`` | [A #A] ``->`` [Prep #Prep] ``->`` [A2 #A2] | + + +==Paradigms for Russian== +#LParadigms + + +source [``http://www.cs.chalmers.se/~aarne/GF/lib/resource/src/russian/ParadigmsRus.gf`` ../src/russian/ParadigmsRus.gf] + + + + +|| Function | Type || +| ``Gender`` | [Type #Type] | +| ``masculine`` | [Gender #Gender] | +| ``feminine`` | [Gender #Gender] | +| ``neuter`` | [Gender #Gender] | +| ``Case`` | [Type #Type] | +| ``nominative`` | [Case #Case] | +| ``genitive`` | [Case #Case] | +| ``dative`` | [Case #Case] | +| ``accusative`` | [Case #Case] | +| ``instructive`` | [Case #Case] | +| ``prepositional`` | [Case #Case] | +| ``Number`` | [Type #Type] | +| ``singular`` | [Number #Number] | +| ``plural`` | [Number #Number] | +| ``mkN`` | ``(karta`` ``:`` ``Str)`` ``->`` [N #N] | +| ``mkN`` | ``(tigr`` ``:`` ``Str)`` ``->`` [Animacy #Animacy] ``->`` [N #N] | +| ``mkN`` | ``(nomSg,`` ``genSg,`` ``datSg,`` ``accSg,`` ``instSg,`` ``preposSg,`` ``prepos2Sg,`` ``nomPl,`` ``genPl,`` ``datPl,`` ``accPl,`` ``instPl,`` ``preposPl`` ``:`` ``Str)`` ``->`` [Gender #Gender] ``->`` [Animacy #Animacy] ``->`` [N #N] | +| ``mkN2`` | [N #N] ``->`` [N2 #N2] | +| ``mkN2`` | [N #N] ``->`` [Prep #Prep] ``->`` [N2 #N2] | +| ``mkN3`` | [N #N] ``->`` [Prep #Prep] ``->`` [Prep #Prep] ``->`` [N3 #N3] | +| ``mkPN`` | ``Str`` ``->`` [Gender #Gender] ``->`` [Animacy #Animacy] ``->`` [PN #PN] | +| ``nounPN`` | [N #N] ``->`` [PN #PN] | +| ``mkA`` | ``(positive`` ``:`` ``Str)`` ``->`` [A #A] | +| ``mkA`` | ``(positive,`` ``comparative`` ``:`` ``Str)`` ``->`` [A #A] | +| ``mkA2`` | [A #A] ``->`` ``Str`` ``->`` [Case #Case] ``->`` [A2 #A2] | +| ``mkAdv`` | ``Str`` ``->`` [Adv #Adv] | +| ``mkV`` | [Aspect #Aspect] ``->`` ``(presentSgP1,presentSgP2,presentSgP3,`` | +| ``pastSgP1,imperative,infinitive`` | ``Str)`` ``->`` [V #V] | +| ``mkV2`` | [V #V] ``->`` ``Str`` ``->`` [Case #Case] ``->`` [V2 #V2] | +| ``mkV3`` | [V #V] ``->`` ``Str`` ``->`` ``Str`` ``->`` [Case #Case] ``->`` [Case #Case] ``->`` [V3 #V3] | +| ``dirV2`` | [V #V] ``->`` [V2 #V2] | +| ``tvDirDir`` | [V #V] ``->`` [V3 #V3] | + + +==Paradigms for Spanish== +#LParadigms + + +source [``http://www.cs.chalmers.se/~aarne/GF/lib/resource/src/spanish/ParadigmsSpa.gf`` ../src/spanish/ParadigmsSpa.gf] + + + + +|| Function | Type || +| ``Gender`` | [Type #Type] | +| ``masculine`` | [Gender #Gender] | +| ``feminine`` | [Gender #Gender] | +| ``Number`` | [Type #Type] | +| ``singular`` | [Number #Number] | +| ``plural`` | [Number #Number] | +| ``accusative`` | [Prep #Prep] | +| ``genitive`` | [Prep #Prep] | +| ``dative`` | [Prep #Prep] | +| ``mkPrep`` | ``Str`` ``->`` [Prep #Prep] | +| ``mkN`` | ``(luz`` ``:`` ``Str)`` ``->`` [N #N] | +| ``mkN`` | ``Str`` ``->`` [Gender #Gender] ``->`` [N #N] | +| ``mkN`` | ``(baston,bastones`` ``:`` ``Str)`` ``->`` [Gender #Gender] ``->`` [N #N] | +| ``compN`` | [N #N] ``->`` ``Str`` ``->`` [N #N] | +| ``mkN2`` | [N #N] ``->`` [Prep #Prep] ``->`` [N2 #N2] | +| ``deN2`` | [N #N] ``->`` [N2 #N2] | +| ``aN2`` | [N #N] ``->`` [N2 #N2] | +| ``mkN3`` | [N #N] ``->`` [Prep #Prep] ``->`` [Prep #Prep] ``->`` [N3 #N3] | +| ``mkPN`` | ``(Anna`` ``:`` ``Str)`` ``->`` [PN #PN] | +| ``mkPN`` | ``(Pilar`` ``:`` ``Str)`` ``->`` [Gender #Gender] ``->`` [PN #PN] | +| ``mkA`` | ``(util`` ``:`` ``Str)`` ``->`` [A #A] | +| ``mkA`` | ``(solo,sola,solos,solas,solamente`` ``:`` ``Str)`` ``->`` [A #A] | +| ``mkA`` | ``(bueno`` ``:`` ``A)`` ``->`` ``(mejor`` ``:`` ``A)`` ``->`` [A #A] | +| ``prefixA`` | [A #A] ``->`` [A #A] | +| ``mkA2`` | [A #A] ``->`` [Prep #Prep] ``->`` [A2 #A2] | +| ``mkAdv`` | ``Str`` ``->`` [Adv #Adv] | +| ``mkAdV`` | ``Str`` ``->`` [AdV #AdV] | +| ``mkAdA`` | ``Str`` ``->`` [AdA #AdA] | +| ``mkV`` | ``(pagar`` ``:`` ``Str)`` ``->`` [V #V] | +| ``mkV`` | ``(mostrar,muestro`` ``:`` ``Str)`` ``->`` [V #V] | +| ``mkV`` | [Verbum #Verbum] ``->`` [V #V] | +| ``reflV`` | [V #V] ``->`` [V #V] | +| ``special_ppV`` | [V #V] ``->`` ``Str`` ``->`` [V #V] | +| ``mkV2`` | ``Str`` ``->`` [V2 #V2] | +| ``mkV2`` | [V #V] ``->`` [V2 #V2] | +| ``mkV2`` | [V #V] ``->`` [Prep #Prep] ``->`` [V2 #V2] | +| ``v2V`` | [V2 #V2] ``->`` [V #V] | +| ``mkV3`` | [V #V] ``->`` [Prep #Prep] ``->`` [Prep #Prep] ``->`` [V3 #V3] | +| ``dirV3`` | [V #V] ``->`` [Prep #Prep] ``->`` [V3 #V3] | +| ``dirdirV3`` | [V #V] ``->`` [V3 #V3] | +| ``mkV0`` | [V #V] ``->`` [V0 #V0] | +| ``mkVS`` | [V #V] ``->`` [VS #VS] | +| ``mkV2S`` | [V #V] ``->`` [Prep #Prep] ``->`` [V2S #V2S] | +| ``mkVV`` | [V #V] ``->`` [VV #VV] | +| ``deVV`` | [V #V] ``->`` [VV #VV] | +| ``aVV`` | [V #V] ``->`` [VV #VV] | +| ``mkV2V`` | [V #V] ``->`` [Prep #Prep] ``->`` [Prep #Prep] ``->`` [V2V #V2V] | +| ``mkVA`` | [V #V] ``->`` [VA #VA] | +| ``mkV2A`` | [V #V] ``->`` [Prep #Prep] ``->`` [Prep #Prep] ``->`` [V2A #V2A] | +| ``mkVQ`` | [V #V] ``->`` [VQ #VQ] | +| ``mkV2Q`` | [V #V] ``->`` [Prep #Prep] ``->`` [V2Q #V2Q] | +| ``mkAS`` | [A #A] ``->`` [AS #AS] | +| ``mkA2S`` | [A #A] ``->`` [Prep #Prep] ``->`` [A2S #A2S] | +| ``mkAV`` | [A #A] ``->`` [Prep #Prep] ``->`` [AV #AV] | +| ``mkA2V`` | [A #A] ``->`` [Prep #Prep] ``->`` [Prep #Prep] ``->`` [A2V #A2V] | +| ``V0`` | [Type #Type] | + + +==Paradigms for Swedish== +#LParadigms + + +source [``http://www.cs.chalmers.se/~aarne/GF/lib/resource/src/swedish/ParadigmsSwe.gf`` ../src/swedish/ParadigmsSwe.gf] + + + + +|| Function | Type || +| ``Gender`` | [Type #Type] | +| ``utrum`` | [Gender #Gender] | +| ``neutrum`` | [Gender #Gender] | +| ``Number`` | [Type #Type] | +| ``singular`` | [Number #Number] | +| ``plural`` | [Number #Number] | +| ``Case`` | [Type #Type] | +| ``nominative`` | [Case #Case] | +| ``genitive`` | [Case #Case] | +| ``mkPrep`` | ``Str`` ``->`` [Prep #Prep] | +| ``noPrep`` | [Prep #Prep] | +| ``mkN`` | ``(apa`` ``:`` ``Str)`` ``->`` [N #N] | +| ``mkN`` | ``(lik`` ``:`` ``Str)`` ``->`` [Gender #Gender] ``->`` [N #N] | +| ``mkN`` | ``(nyckel,nycklar`` ``:`` ``Str)`` ``->`` [N #N] | +| ``mkN`` | ``(museum,museet,museer,museerna`` ``:`` ``Str)`` ``->`` [N #N] | +| ``mkN2`` | ``Str`` ``->`` [N2 #N2] | +| ``mkN2`` | [N #N] ``->`` [Prep #Prep] ``->`` [N2 #N2] | +| ``mkN3`` | [N #N] ``->`` [Prep #Prep] ``->`` [Prep #Prep] ``->`` [N3 #N3] | +| ``mkPN`` | ``Str`` ``->`` [PN #PN] | +| ``mkPN`` | ``Str`` ``->`` [Gender #Gender] ``->`` [PN #PN] | +| ``mkPN`` | ``(jesus,jesu`` ``:`` ``Str)`` ``->`` [Gender #Gender] ``->`` [PN #PN] | +| ``mkA`` | ``(billig`` ``:`` ``Str)`` ``->`` [A #A] | +| ``mkA`` | ``(bred,brett`` ``:`` ``Str)`` ``->`` [A #A] | +| ``mkA`` | ``(tung,tyngre,tyngst`` ``:`` ``Str)`` ``->`` [A #A] | +| ``mkA`` | ``(god,gott,goda,battre,bast`` ``:`` ``Str)`` ``->`` [A #A] | +| ``mkA`` | ``(liten,litet,lilla,sma,mindre,minst,minsta`` ``:`` ``Str)`` ``->`` [A #A] | +| ``compoundA`` | [A #A] ``->`` [A #A] | +| ``mkA2`` | [A #A] ``->`` [Prep #Prep] ``->`` [A2 #A2] | +| ``mkAdv`` | ``Str`` ``->`` [Adv #Adv] | +| ``mkAdV`` | ``Str`` ``->`` [AdV #AdV] | +| ``mkAdA`` | ``Str`` ``->`` [AdA #AdA] | +| ``mkV`` | ``(stämmer`` ``:`` ``Str)`` ``->`` [V #V] | +| ``mkV`` | ``(dricka,drack,druckit`` ``:`` ``Str)`` ``->`` [V #V] | +| ``mkV`` | ``(gå,går,gå,gick,gått,gången`` ``:`` ``Str)`` ``->`` [V #V] | +| ``mkV`` | [V #V] ``->`` ``Str`` ``->`` [V #V] | +| ``depV`` | [V #V] ``->`` [V #V] | +| ``reflV`` | [V #V] ``->`` [V #V] | +| ``mkV2`` | ``Str`` ``->`` [V2 #V2] | +| ``mkV2`` | [V #V] ``->`` [V2 #V2] | +| ``mkV2`` | [V #V] ``->`` [Prep #Prep] ``->`` [V2 #V2] | +| ``mkV3`` | ``Str`` ``->`` [V3 #V3] | +| ``mkV3`` | [V #V] ``->`` [V3 #V3] | +| ``mkV3`` | [V #V] ``->`` [Prep #Prep] ``->`` [V3 #V3] | +| ``mkV3`` | [V #V] ``->`` [Prep #Prep] ``->`` [Prep #Prep] ``->`` [V3 #V3] | +| ``mkV0`` | [V #V] ``->`` [V0 #V0] | +| ``mkVS`` | [V #V] ``->`` [VS #VS] | +| ``mkV2S`` | [V #V] ``->`` [Prep #Prep] ``->`` [V2S #V2S] | +| ``mkVV`` | [V #V] ``->`` [VV #VV] | +| ``mkV2V`` | [V #V] ``->`` [Prep #Prep] ``->`` [Prep #Prep] ``->`` [V2V #V2V] | +| ``mkVA`` | [V #V] ``->`` [VA #VA] | +| ``mkV2A`` | [V #V] ``->`` [Prep #Prep] ``->`` [V2A #V2A] | +| ``mkVQ`` | [V #V] ``->`` [VQ #VQ] | +| ``mkV2Q`` | [V #V] ``->`` [Prep #Prep] ``->`` [V2Q #V2Q] | +| ``mkAS`` | [A #A] ``->`` [AS #AS] | +| ``mkA2S`` | [A #A] ``->`` [Prep #Prep] ``->`` [A2S #A2S] | +| ``mkAV`` | [A #A] ``->`` [AV #AV] | +| ``mkA2V`` | [A #A] ``->`` [Prep #Prep] ``->`` [A2V #A2V] | +| ``V0`` | [Type #Type] | + + + + +%!include: synopsis-browse.txt + + +=An Example of Usage= + + +%!include: synopsis-example.txt + diff --git a/next-lib/src/api/TryBul.gf b/next-lib/src/api/TryBul.gf index 9becc455d..5b58da938 100644 --- a/next-lib/src/api/TryBul.gf +++ b/next-lib/src/api/TryBul.gf @@ -1,7 +1,7 @@ --# -path=.:alltenses:prelude resource TryBul = SyntaxBul, LexiconBul, ParadigmsBul - [mkAdv] ** - open (P = ParadigmsBul), in { + open (P = ParadigmsBul) in { oper diff --git a/next-lib/src/api/TryCat.gf b/next-lib/src/api/TryCat.gf index c1a9acfba..872a85395 100644 --- a/next-lib/src/api/TryCat.gf +++ b/next-lib/src/api/TryCat.gf @@ -1,7 +1,7 @@ --# -path=.:alltenses:prelude resource TryCat = SyntaxCat, LexiconCat, ParadigmsCat - [mkAdv] ** - open (P = ParadigmsCat), in { + open (P = ParadigmsCat) in { oper diff --git a/next-lib/src/api/TryEng.gf b/next-lib/src/api/TryEng.gf index 3204af793..823dc212f 100644 --- a/next-lib/src/api/TryEng.gf +++ b/next-lib/src/api/TryEng.gf @@ -1,7 +1,7 @@ --# -path=.:alltenses:prelude resource TryEng = SyntaxEng-[mkAdN], LexiconEng, ParadigmsEng - [mkAdv,mkAdN,mkOrd] ** - open (P = ParadigmsEng), in { + open (P = ParadigmsEng) in { oper diff --git a/next-lib/src/api/TrySwe.gf b/next-lib/src/api/TrySwe.gf index 1d5612fd3..ea721ac3c 100644 --- a/next-lib/src/api/TrySwe.gf +++ b/next-lib/src/api/TrySwe.gf @@ -1,7 +1,7 @@ --# -path=.:alltenses:prelude resource TrySwe = SyntaxSwe, LexiconSwe, ParadigmsSwe - [mkAdv] ** - open (P = ParadigmsSwe), in { + open (P = ParadigmsSwe) in { oper @@ -9,4 +9,4 @@ oper mkAdv : Str -> Adv = P.mkAdv ; } ; -} \ No newline at end of file +} diff --git a/next-lib/src/french/StructuralFre.gf b/next-lib/src/french/StructuralFre.gf index 8096a0c8e..2bdaeb577 100644 --- a/next-lib/src/french/StructuralFre.gf +++ b/next-lib/src/french/StructuralFre.gf @@ -96,7 +96,7 @@ lin Sg => \\g,c => prepCase c ++ genForms "celui-là" "celle-là" ! g ; Pl => \\g,c => prepCase c ++ genForms "celui-là" "celle-là" ! g } ; - s2 = "-là" + s2 = [] ---- "-là" } ; ---b that_NP = makeNP ["cela"] Masc Sg ; @@ -119,7 +119,7 @@ lin Sg => \\g,c => prepCase c ++ genForms "celui-ci" "celle-ci" ! g ; Pl => \\g,c => prepCase c ++ genForms "celui-ci" "celle-ci" ! g } ; - s2 = "-ci" + s2 = [] ---- "-ci" } ; ---b this_NP = pn2np (mkPN ["ceci"] Masc) ;