gf 3.3 → 3.3.3
raw patch · 640 files changed
+74561/−66770 lines, 640 filessetup-changedbinary-added
Files
- Makefile +1/−1
- Setup.hs +20/−18
- WebSetup.hs +13/−3
- contrib/eaglesconv/CollectLemmas.hs +28/−0
- contrib/eaglesconv/EaglesConv.hs +135/−0
- contrib/eaglesconv/EaglesMatcher.hs +63/−0
- contrib/eaglesconv/EaglesParser.hs +239/−0
- contrib/eaglesconv/README +24/−0
- contrib/eaglesconv/mkAbstract.sh +8/−0
- contrib/eaglesconv/mkConcrete.sh +12/−0
- contrib/eaglesconv/run_conv.sh +4/−0
- contrib/py-bindings/PyGF.hsc +41/−3
- contrib/py-bindings/example.rst +147/−0
- contrib/py-bindings/gfmodule.c +36/−11
- contrib/py-bindings/test.py +28/−8
- contrib/summerschool/foods/FoodsMlt.gf +4/−69
- contrib/summerschool/foods/FoodsTha.gf +33/−0
- contrib/summerschool/foods/ResMlt.gf +71/−0
- css/style.css +4/−2
- demos/TransQuiz/brushed-metal.png binary
- demos/TransQuiz/minibar_quiz.css +0/−93
- demos/TransQuiz/minibar_quiz.js +0/−638
- demos/TransQuiz/pgf_online.js +0/−56
- demos/TransQuiz/quiz_about.html +0/−49
- demos/TransQuiz/quiz_help.html +0/−45
- demos/TransQuiz/quiz_pre_start.js +0/−62
- demos/TransQuiz/quiz_support.js +0/−247
- demos/TransQuiz/support.js +0/−285
- demos/TransQuiz/translation_quiz.html +0/−164
- demos/TransQuiz/translation_quiz.js +0/−764
- demos/index-numbers.html +2/−2
- demos/index.html +8/−19
- doc/gf-bib.bib +40/−0
- doc/gf-bibliography.html +126/−2
- doc/gf-bibliography.t2t +104/−2
- doc/gf-developers.html +2/−2
- doc/gf-editor-modes.html +6/−14
- doc/gf-editor-modes.t2t +1/−7
- doc/gf-help-full.txt +6/−1
- doc/gf-shell-reference.html +21/−1
- doc/new-gf-bib.bib +3801/−0
- doc/tutorial/gf-tutorial.html +426/−11
- download/index-3.2.9.html +4/−75
- download/index-3.2.9.t2t +4/−36
- download/index-3.3.html +176/−0
- download/index-3.3.t2t +123/−0
- download/index.html +51/−18
- download/index.t2t +36/−16
- download/release-3.3.3.html +43/−0
- download/release-3.3.3.t2t +31/−0
- download/release-3.3.html +1/−1
- download/release-3.3.t2t +1/−1
- eclipse/beta/artifacts.jar binary
- eclipse/beta/content.jar binary
- eclipse/beta/features/org.grammaticalframework.feature_1.0.0.201110141249.jar binary
- eclipse/beta/plugins/org.grammaticalframework.eclipse.tests_1.0.0.201110141249.jar binary
- eclipse/beta/plugins/org.grammaticalframework.eclipse.ui_1.0.0.201110141249.jar binary
- eclipse/beta/plugins/org.grammaticalframework.eclipse_1.0.0.201110141249.jar binary
- eclipse/images/eclipse-console-icon.png binary
- eclipse/images/eclipse-launchconfig.png binary
- eclipse/images/eclipse-modulewizard-1.png binary
- eclipse/images/eclipse-syntaxcoloring.png binary
- eclipse/index.html +301/−14
- examples/PennTreebank/Idents.hs +115/−0
- examples/PennTreebank/Monad.hs +98/−0
- examples/PennTreebank/PennFormat.hs +38/−0
- examples/PennTreebank/training.hs +35/−0
- examples/PennTreebank/translate.hs +809/−0
- examples/fracas/COPYING.txt +674/−0
- examples/fracas/Makefile +33/−0
- examples/fracas/README.html +434/−0
- examples/fracas/README.txt +115/−0
- examples/fracas/build_fracasbank.py +166/−0
- examples/fracas/doc/FraCaSBank.bib +70/−0
- examples/fracas/doc/FraCaSBank.lyx +6246/−0
- examples/fracas/doc/FraCaSBank.pdf binary
- examples/fracas/src/Additions.gf +77/−0
- examples/fracas/src/AdditionsEng.gf +104/−0
- examples/fracas/src/AdditionsSwe.gf +83/−0
- examples/fracas/src/FraCaS.gf +59/−0
- examples/fracas/src/FraCaSBank.gf +1579/−0
- examples/fracas/src/FraCaSBankEng.gf +3/−0
- examples/fracas/src/FraCaSBankI.gf +1579/−0
- examples/fracas/src/FraCaSBankOriginal.gf +1581/−0
- examples/fracas/src/FraCaSBankSwe.gf +3/−0
- examples/fracas/src/FraCaSEng.gf +69/−0
- examples/fracas/src/FraCaSLex.gf +519/−0
- examples/fracas/src/FraCaSLexEng.gf +569/−0
- examples/fracas/src/FraCaSLexSwe.gf +585/−0
- examples/fracas/src/FraCaSSwe.gf +69/−0
- examples/nqueens/NQueensAscii.gf +5/−9
- examples/phrasebook/Compile.hs +5/−3
- examples/phrasebook/DisambPhrasebookEng.gf +40/−6
- examples/phrasebook/GreetingsTha.gf +35/−0
- examples/phrasebook/Makefile +18/−11
- examples/phrasebook/PhrasebookRus.gf +2/−2
- examples/phrasebook/PhrasebookTha.gf +11/−0
- examples/phrasebook/Sentences.gf +57/−6
- examples/phrasebook/SentencesCat.gf +35/−12
- examples/phrasebook/SentencesFin.gf +5/−0
- examples/phrasebook/SentencesFre.gf +13/−2
- examples/phrasebook/SentencesGer.gf +10/−1
- examples/phrasebook/SentencesI.gf +71/−2
- examples/phrasebook/SentencesIta.gf +25/−4
- examples/phrasebook/SentencesRus.gf +13/−3
- examples/phrasebook/SentencesSpa.gf +21/−0
- examples/phrasebook/SentencesSwe.gf +9/−4
- examples/phrasebook/SentencesTha.gf +26/−0
- examples/phrasebook/SentencesUrd.gf +1/−1
- examples/phrasebook/Words.gf +54/−6
- examples/phrasebook/WordsBul.gf +40/−0
- examples/phrasebook/WordsEng.gf +46/−0
- examples/phrasebook/WordsFin.gf +49/−1
- examples/phrasebook/WordsRus.gf +98/−91
- examples/phrasebook/WordsSwe.gf +47/−0
- examples/phrasebook/WordsTha.gf +319/−0
- examples/phrasebook/doc-phrasebook.html +12/−11
- examples/phrasebook/doc-phrasebook.txt +9/−9
- examples/phrasebook/missing.txt +14/−12
- examples/phrasebook/thai.png binary
- gf-book/index.html +4/−2
- gf.cabal +6/−10
- index.html +31/−10
- lib/doc/CC_eng_tha.txt +1698/−0
- lib/doc/Compare.hs +32/−0
- lib/doc/Makefile +4/−0
- lib/doc/MkExxTable.hs +3/−2
- lib/doc/MkSynopsis.hs +6/−2
- lib/doc/Test.hs +22/−0
- lib/doc/api-examples.txt +9/−9
- lib/doc/gfdoc/Adjective.html +57/−0
- lib/doc/gfdoc/Adverb.html +53/−0
- lib/doc/gfdoc/Cat.html +147/−0
- lib/doc/gfdoc/Common.html +61/−0
- lib/doc/gfdoc/Conjunction.html +59/−0
- lib/doc/gfdoc/Extra.html +89/−0
- lib/doc/gfdoc/Grammar.html +34/−0
- lib/doc/gfdoc/Idiom.html +36/−0
- lib/doc/gfdoc/Lang.html +24/−0
- lib/doc/gfdoc/Lexicon.html +366/−0
- lib/doc/gfdoc/Noun.html +156/−0
- lib/doc/gfdoc/Numeral.html +72/−0
- lib/doc/gfdoc/Phrase.html +65/−0
- lib/doc/gfdoc/Question.html +74/−0
- lib/doc/gfdoc/Relative.html +40/−0
- lib/doc/gfdoc/Sentence.html +100/−0
- lib/doc/gfdoc/Structural.html +159/−0
- lib/doc/gfdoc/Symbol.html +60/−0
- lib/doc/gfdoc/Syntax.png binary
- lib/doc/gfdoc/Tense.html +32/−0
- lib/doc/gfdoc/Text.html +26/−0
- lib/doc/gfdoc/Verb.html +93/−0
- lib/doc/gfdoc/sources.html +183/−0
- lib/doc/gfdoc/sources.txt +100/−0
- lib/doc/status.html +77/−17
- lib/doc/status.txt +20/−8
- lib/doc/synopsis-intro.txt +15/−11
- lib/doc/synopsis.html +10574/−9600
- lib/src/Make.hs +53/−40
- lib/src/Makefile +14/−6
- lib/src/abstract/Extra.gf +1/−0
- lib/src/abstract/Structural.gf +2/−0
- lib/src/abstract/Tense.gf +1/−1
- lib/src/abstract/Verb.gf +2/−0
- lib/src/afrikaans/ResAfr.gf +5/−5
- lib/src/api/CombinatorsLav.gf +6/−0
- lib/src/api/CombinatorsSnd.gf +6/−0
- lib/src/api/ConstructorsHin.gf +3/−0
- lib/src/api/ConstructorsLav.gf +3/−0
- lib/src/api/ConstructorsSnd.gf +3/−0
- lib/src/api/ConstructorsTha.gf +3/−0
- lib/src/api/SymbolicHin.gf +5/−0
- lib/src/api/SymbolicLav.gf +5/−0
- lib/src/api/SymbolicSnd.gf +5/−0
- lib/src/api/SymbolicTha.gf +5/−0
- lib/src/api/SyntaxHin.gf +5/−0
- lib/src/api/SyntaxLav.gf +5/−0
- lib/src/api/SyntaxSnd.gf +5/−0
- lib/src/api/SyntaxTha.gf +5/−0
- lib/src/api/TryHin.gf +22/−0
- lib/src/api/TryLav.gf +22/−0
- lib/src/api/TrySnd.gf +22/−0
- lib/src/api/TryTha.gf +12/−0
- lib/src/catalan/CatCat.gf +1/−1
- lib/src/catalan/DiffCat.gf +2/−1
- lib/src/catalan/GrammarCat.gf +1/−1
- lib/src/catalan/StructuralCat.gf +3/−3
- lib/src/danish/CatDan.gf +1/−1
- lib/src/danish/DiffDan.gf +2/−0
- lib/src/danish/GrammarDan.gf +2/−2
- lib/src/danish/IdiomDan.gf +1/−1
- lib/src/danish/TenseDan.gf +3/−0
- lib/src/dutch/LexiconDut.gf +2/−2
- lib/src/dutch/ParadigmsDut.gf +3/−0
- lib/src/dutch/ResDut.gf +1/−1
- lib/src/dutch/SentenceDut.gf +1/−1
- lib/src/english/DictEng.gf too large to diff
- lib/src/english/DictEngAbs.gf +23/−2
- lib/src/french/CatFre.gf +1/−1
- lib/src/french/ExtraFre.gf +4/−1
- lib/src/french/GrammarFre.gf +1/−1
- lib/src/german/SentenceGer.gf +1/−1
- lib/src/hindi/AdjectiveHin.gf +1/−1
- lib/src/hindi/AdverbHin.gf +1/−1
- lib/src/hindi/AllHin.gf +2/−2
- lib/src/hindi/AllHinAbs.gf +2/−2
- lib/src/hindi/CatHin.gf +3/−2
- lib/src/hindi/DiffHin.gf +153/−34
- lib/src/hindi/GrammarHin.gf +3/−3
- lib/src/hindi/IdiomHin.gf +9/−8
- lib/src/hindi/LexiconHin.gf +373/−369
- lib/src/hindi/MorphoHin.gf +105/−81
- lib/src/hindi/NounHin.gf +1/−1
- lib/src/hindi/NumeralHin.gf +117/−127
- lib/src/hindi/ParadigmsHin.gf +28/−1
- lib/src/hindi/RelativeHin.gf +1/−1
- lib/src/hindi/ResHin.gf +1/−1
- lib/src/hindi/SentenceHin.gf +1/−1
- lib/src/hindi/StructuralHin.gf +130/−129
- lib/src/hindi/SymbolHin.gf +1/−0
- lib/src/hindi/VerbHin.gf +2/−1
- lib/src/hindi/src/DiffHin.gf +143/−34
- lib/src/hindi/src/ExtraHin.gf +2/−1
- lib/src/hindi/src/IdiomHin.gf +9/−8
- lib/src/hindi/src/LexiconHin.gf +373/−369
- lib/src/hindi/src/MorphoHin.gf +99/−75
- lib/src/hindi/src/NumeralHin.gf +117/−0
- lib/src/hindi/src/StructuralHin.gf +130/−129
- lib/src/hindi/translit.gfs +1/−0
- lib/src/hindustani/AdjectiveHindustani.gf +5/−3
- lib/src/hindustani/AdverbHindustani.gf +1/−1
- lib/src/hindustani/CatHindustani.gf +2/−1
- lib/src/hindustani/CommonHindustani.gf +11/−130
- lib/src/hindustani/DiffHindustani.gf +28/−1
- lib/src/hindustani/NounHindustani.gf +7/−3
- lib/src/hindustani/QuestionHindustani.gf +6/−3
- lib/src/hindustani/RelativeHindustani.gf +2/−2
- lib/src/hindustani/ResHindustani.gf +39/−145
- lib/src/hindustani/SentenceHindustani.gf +5/−5
- lib/src/hindustani/StringsHindustani.gf +1/−1
- lib/src/hindustani/SymbolHindustani.gf +1/−1
- lib/src/hindustani/VerbHindustani.gf +10/−10
- lib/src/italian/CatIta.gf +1/−1
- lib/src/italian/DiffIta.gf +1/−1
- lib/src/italian/ExtraIta.gf +3/−3
- lib/src/italian/GrammarIta.gf +1/−1
- lib/src/italian/StructuralIta.gf +1/−1
- lib/src/latvian/AdjectiveLav.gf +30/−44
- lib/src/latvian/AdverbLav.gf +29/−15
- lib/src/latvian/AllLav.gf +8/−6
- lib/src/latvian/AllLavAbs.gf +3/−6
- lib/src/latvian/CatLav.gf +67/−87
- lib/src/latvian/CompatibilityLav.gf +16/−0
- lib/src/latvian/ConjunctionLav.gf +37/−34
- lib/src/latvian/DictLatAbs.gf +0/−43786
- lib/src/latvian/DictLav.gf too large to diff
- lib/src/latvian/ExtraLav.gf +7/−96
- lib/src/latvian/ExtraLavAbs.gf +2/−19
- lib/src/latvian/GrammarLav.gf +11/−8
- lib/src/latvian/IdiomLav.gf +64/−23
- lib/src/latvian/IrregLav.gf +0/−182
- lib/src/latvian/IrregLavAbs.gf +0/−178
- lib/src/latvian/LangLav.gf +6/−3
- lib/src/latvian/LexiconLav.gf +365/−366
- lib/src/latvian/MakeStructuralLav.gf +11/−9
- lib/src/latvian/MorphoLav.gf +6/−37
- lib/src/latvian/NounLav.gf +129/−122
- lib/src/latvian/NumeralLav.gf +103/−81
- lib/src/latvian/OverloadLav.gf +0/−1
- lib/src/latvian/ParadigmsAdjectivesLav.gf +75/−36
- lib/src/latvian/ParadigmsLav.gf +135/−670
- lib/src/latvian/ParadigmsNounsLav.gf +74/−26
- lib/src/latvian/ParadigmsPronounsLav.gf +23/−18
- lib/src/latvian/ParadigmsVerbsLav.gf +165/−148
- lib/src/latvian/PhraseLav.gf +32/−23
- lib/src/latvian/QuestionLav.gf +42/−42
- lib/src/latvian/RelativeLav.gf +44/−43
- lib/src/latvian/ResLav.gf +80/−466
- lib/src/latvian/SentenceLav.gf +55/−82
- lib/src/latvian/StructuralLav.gf +427/−140
- lib/src/latvian/SymbolLav.gf +22/−21
- lib/src/latvian/VerbLav.gf +97/−38
- lib/src/maltese/AdjectiveMlt.gf +11/−0
- lib/src/maltese/AdverbMlt.gf +12/−0
- lib/src/maltese/AllMlt.gf +19/−0
- lib/src/maltese/AllMltAbs.gf +19/−0
- lib/src/maltese/CatMlt.gf +66/−0
- lib/src/maltese/ConjunctionMlt.gf +15/−0
- lib/src/maltese/ExtraMlt.gf +17/−0
- lib/src/maltese/ExtraMltAbs.gf +13/−0
- lib/src/maltese/GrammarMlt.gf +27/−0
- lib/src/maltese/IdiomMlt.gf +14/−0
- lib/src/maltese/IrregMlt.gf +13/−0
- lib/src/maltese/IrregMltAbs.gf +19/−0
- lib/src/maltese/LangMlt.gf +16/−0
- lib/src/maltese/LexiconMlt.gf +396/−0
- lib/src/maltese/MorphoMlt.gf +10/−0
- lib/src/maltese/NounMlt.gf +17/−0
- lib/src/maltese/NumeralMlt.gf +491/−0
- lib/src/maltese/OrthoMlt.gf +9/−0
- lib/src/maltese/ParadigmsMlt.gf +561/−0
- lib/src/maltese/PatternsMlt.gf +8/−0
- lib/src/maltese/PhraseMlt.gf +14/−0
- lib/src/maltese/QuestionMlt.gf +17/−0
- lib/src/maltese/RelativeMlt.gf +12/−0
- lib/src/maltese/ResMlt.gf +311/−0
- lib/src/maltese/SentenceMlt.gf +26/−0
- lib/src/maltese/StructuralMlt.gf +12/−0
- lib/src/maltese/SymbolMlt.gf +11/−0
- lib/src/maltese/TextMlt.gf +12/−0
- lib/src/maltese/VerbMlt.gf +14/−0
- lib/src/mini/Compile.hs +45/−0
- lib/src/mini/Makefile +7/−5
- lib/src/mini/MiniGrammar.gf +3/−5
- lib/src/mini/MiniGrammarEng.gf +7/−7
- lib/src/mini/MkMini.hs +7/−2
- lib/src/norwegian/CatNor.gf +1/−1
- lib/src/norwegian/DiffNor.gf +2/−0
- lib/src/norwegian/ExtraNor.gf +2/−0
- lib/src/norwegian/GrammarNor.gf +2/−2
- lib/src/norwegian/IdiomNor.gf +1/−1
- lib/src/norwegian/TenseNor.gf +3/−0
- lib/src/prelude/Coordination.gf +24/−24
- lib/src/prelude/Predef.gf +1/−0
- lib/src/prelude/Prelude.gf +4/−4
- lib/src/romance/AdjectiveRomance.gf +1/−1
- lib/src/romance/CatRomance.gf +2/−1
- lib/src/romance/NounRomance.gf +1/−1
- lib/src/romance/ResRomance.gf +9/−8
- lib/src/romance/SentenceRomance.gf +4/−4
- lib/src/romanian/AllRon.gf +1/−0
- lib/src/romanian/LangRon.gf +1/−0
- lib/src/russian/CatRus.gf +4/−4
- lib/src/russian/DictRus.gf too large to diff
- lib/src/russian/DictRusAbs.gf too large to diff
- lib/src/russian/LexiconRus.gf +6/−6
- lib/src/russian/MorphoRus.gf +231/−181
- lib/src/russian/NounRus.gf +41/−24
- lib/src/russian/NumeralRus.gf +194/−68
- lib/src/russian/ParadigmsRus.gf +59/−21
- lib/src/russian/PhraseRus.gf +2/−2
- lib/src/russian/QuestionRus.gf +3/−3
- lib/src/russian/ResRus.gf +8/−2
- lib/src/russian/StructuralRus.gf +15/−11
- lib/src/russian/SymbolRus.gf +21/−21
- lib/src/russian/VerbRus.gf +8/−7
- lib/src/scandinavian/CatScand.gf +11/−6
- lib/src/scandinavian/CommonScand.gf +16/−5
- lib/src/scandinavian/ConjunctionScand.gf +4/−4
- lib/src/scandinavian/DiffScand.gf +3/−1
- lib/src/scandinavian/ExtraScand.gf +12/−4
- lib/src/scandinavian/ExtraScandAbs.gf +3/−1
- lib/src/scandinavian/NounScand.gf +2/−2
- lib/src/scandinavian/RelativeScand.gf +4/−4
- lib/src/scandinavian/ResScand.gf +20/−16
- lib/src/scandinavian/SentenceScand.gf +2/−2
- lib/src/scandinavian/TenseScand.gf +22/−0
- lib/src/sindhi/AdjectiveSnd.gf +40/−0
- lib/src/sindhi/AdverbSnd.gf +20/−0
- lib/src/sindhi/AllSnd.gf +6/−0
- lib/src/sindhi/AllSndAbs.gf +4/−0
- lib/src/sindhi/CatSnd.gf +100/−0
- lib/src/sindhi/ConjunctionSnd.gf +47/−0
- lib/src/sindhi/Coordination.gf +170/−0
- lib/src/sindhi/ExtraSnd.gf +19/−0
- lib/src/sindhi/ExtraSndAbs.gf +9/−0
- lib/src/sindhi/GrammarSnd.gf +24/−0
- lib/src/sindhi/IdiomSnd.gf +40/−0
- lib/src/sindhi/LangSnd.gf +10/−0
- lib/src/sindhi/LexiconSnd.gf +362/−0
- lib/src/sindhi/MakeStructuralSnd.gf +14/−0
- lib/src/sindhi/MorphoSnd.gf +393/−0
- lib/src/sindhi/NounSnd.gf +138/−0
- lib/src/sindhi/NumeralSnd.gf +126/−0
- lib/src/sindhi/ParadigmsSnd.gf +181/−0
- lib/src/sindhi/PhraseSnd.gf +27/−0
- lib/src/sindhi/QuestionSnd.gf +75/−0
- lib/src/sindhi/RelativeSnd.gf +90/−0
- lib/src/sindhi/ResSnd.gf +673/−0
- lib/src/sindhi/SentenceSnd.gf +104/−0
- lib/src/sindhi/StructuralSnd.gf +132/−0
- lib/src/sindhi/SymbolSnd.gf +50/−0
- lib/src/sindhi/VerbSnd.gf +44/−0
- lib/src/sindhi/src/AdjectiveSnd.gf +40/−0
- lib/src/sindhi/src/AdverbSnd.gf +20/−0
- lib/src/sindhi/src/ExtraSnd.gf +19/−0
- lib/src/sindhi/src/IdiomSnd.gf +40/−0
- lib/src/sindhi/src/LexiconSnd.gf +362/−0
- lib/src/sindhi/src/MorphoSnd.gf +393/−0
- lib/src/sindhi/src/NumeralSnd.gf +126/−0
- lib/src/sindhi/src/QuestionSnd.gf +75/−0
- lib/src/sindhi/src/RelativeSnd.gf +90/−0
- lib/src/sindhi/src/ResSnd.gf +673/−0
- lib/src/sindhi/src/SentenceSnd.gf +104/−0
- lib/src/sindhi/src/StructuralSnd.gf +132/−0
- lib/src/sindhi/src/SymbolSnd.gf +50/−0
- lib/src/sindhi/src/VerbSnd.gf +44/−0
- lib/src/spanish/CatSpa.gf +1/−1
- lib/src/spanish/DiffSpa.gf +2/−1
- lib/src/spanish/GrammarSpa.gf +1/−1
- lib/src/spanish/NumeralSpa.gf +2/−2
- lib/src/swedish/AllSwe.gf +1/−1
- lib/src/swedish/AllSweAbs.gf +1/−1
- lib/src/swedish/CatSwe.gf +1/−1
- lib/src/swedish/DictSwe.gf too large to diff
- lib/src/swedish/DictSweAbs.gf too large to diff
- lib/src/swedish/DiffSwe.gf +3/−0
- lib/src/swedish/ExtraSwe.gf +222/−15
- lib/src/swedish/ExtraSweAbs.gf +79/−1
- lib/src/swedish/GrammarSwe.gf +2/−2
- lib/src/swedish/IdiomSwe.gf +1/−1
- lib/src/swedish/ParadigmsSwe.gf +13/−3
- lib/src/swedish/ResSwe.gf +1/−2
- lib/src/swedish/StructuralSwe.gf +1/−1
- lib/src/swedish/TenseSwe.gf +3/−0
- lib/src/thai/AdjectiveTha.gf +18/−29
- lib/src/thai/AdverbTha.gf +12/−16
- lib/src/thai/CatTha.gf +53/−54
- lib/src/thai/ConjunctionTha.gf +34/−45
- lib/src/thai/GrammarTha.gf +4/−4
- lib/src/thai/IdiomTha.gf +33/−30
- lib/src/thai/LexiconTha.gf +357/−360
- lib/src/thai/NounTha.gf +41/−45
- lib/src/thai/NumeralTha.gf +34/−11
- lib/src/thai/ParadigmsTha.gf +95/−496
- lib/src/thai/PhraseTha.gf +5/−2
- lib/src/thai/QuestionTha.gf +34/−30
- lib/src/thai/RelativeTha.gf +10/−48
- lib/src/thai/ResTha.gf +111/−433
- lib/src/thai/SentenceTha.gf +32/−45
- lib/src/thai/StringsTha.gf +92/−80
- lib/src/thai/StructuralTha.gf +94/−96
- lib/src/thai/SymbolTha.gf +36/−0
- lib/src/thai/TextTha.gf +11/−0
- lib/src/thai/ThaiScript.hs +420/−0
- lib/src/thai/VerbTha.gf +58/−30
- lib/src/thai/src/MkLex.hs +19/−0
- lib/src/thai/src/OldStringsTha.gf +93/−0
- lib/src/thai/src/swadesh.txt +209/−0
- lib/src/thai/src/test.txt +207/−0
- lib/src/urdu/CatUrd.gf +1/−1
- lib/src/urdu/CommonHindustani.gf +11/−130
- lib/src/urdu/DiffUrd.gf +133/−0
- lib/src/urdu/GrammarUrd.gf +2/−2
- lib/src/urdu/LexiconUrd.gf +4/−4
- lib/src/urdu/ResHindustani.gf +39/−145
- lib/src/urdu/StringsHindustani.gf +1/−1
- lib/src/urdu/StructuralUrd.gf +3/−3
- lib/src/urdu/TextUrd.gf +1/−1
- lib/src/urdu/src/DiffUrd.gf +133/−0
- lib/src/urdu/src/LexiconUrd.gf +3/−3
- lib/src/urdu/src/NumeralUrd.gf +117/−0
- lib/src/urdu/src/StructuralUrd.gf +6/−6
- src/compiler/GF.hs +2/−2
- src/compiler/GF/Command/Commands.hs +1/−1
- src/compiler/GF/Command/Importing.hs +4/−5
- src/compiler/GF/Compile.hs +89/−60
- src/compiler/GF/Compile/CheckGrammar.hs +112/−83
- src/compiler/GF/Compile/Coding.hs +5/−6
- src/compiler/GF/Compile/Compute/AppPredefined.hs +12/−5
- src/compiler/GF/Compile/Compute/Concrete.hs +2/−6
- src/compiler/GF/Compile/Compute/ConcreteLazy.hs +0/−1
- src/compiler/GF/Compile/Compute/ConcreteNew.hs +104/−0
- src/compiler/GF/Compile/GeneratePMCFG.hs +188/−278
- src/compiler/GF/Compile/GetGrammar.hs +4/−8
- src/compiler/GF/Compile/GrammarToPGF.hs +182/−63
- src/compiler/GF/Compile/ModDeps.hs +4/−6
- src/compiler/GF/Compile/Optimize.hs +7/−8
- src/compiler/GF/Compile/ReadFiles.hs +15/−7
- src/compiler/GF/Compile/Refresh.hs +5/−6
- src/compiler/GF/Compile/Rename.hs +61/−72
- src/compiler/GF/Compile/SubExOpt.hs +10/−11
- src/compiler/GF/Compile/Tags.hs +88/−0
- src/compiler/GF/Compile/TypeCheck/Concrete.hs +0/−1
- src/compiler/GF/Compile/TypeCheck/ConcreteNew.hs +561/−0
- src/compiler/GF/Compile/Update.hs +67/−44
- src/compiler/GF/Grammar/Analyse.hs +5/−6
- src/compiler/GF/Grammar/Binary.hs +109/−68
- src/compiler/GF/Grammar/CF.hs +14/−12
- src/compiler/GF/Grammar/EBNF.hs +4/−3
- src/compiler/GF/Grammar/Grammar.hs +288/−24
- src/compiler/GF/Grammar/Lookup.hs +15/−17
- src/compiler/GF/Grammar/Macros.hs +5/−7
- src/compiler/GF/Grammar/Parser.y +24/−25
- src/compiler/GF/Grammar/Predef.hs +4/−0
- src/compiler/GF/Grammar/Printer.hs +76/−23
- src/compiler/GF/Infra/BuildInfo.hs +0/−3
- src/compiler/GF/Infra/CheckM.hs +1/−1
- src/compiler/GF/Infra/Dependencies.hs +2/−3
- src/compiler/GF/Infra/Modules.hs +0/−344
- src/compiler/GF/Infra/Option.hs +25/−47
- src/compiler/GF/Infra/UseIO.hs +3/−3
- src/compiler/GF/Speech/VoiceXML.hs +0/−1
- src/compiler/GF/Text/Transliterations.hs +26/−7
- src/compiler/GFC.hs +15/−9
- src/compiler/GFI.hs +4/−6
- src/compiler/GFServer.hs +208/−74
- src/compiler/SimpleEditor/Convert.hs +152/−0
- src/compiler/SimpleEditor/JSON.hs +47/−0
- src/compiler/SimpleEditor/Syntax.hs +39/−0
- src/example-based/ExampleDemo.hs +2/−2
- src/example-based/ExampleService.hs +9/−4
- src/example-based/todo.txt +2/−2
- src/runtime/c/AUTHORS +5/−0
- src/runtime/c/COPYING.LESSER +165/−0
- src/runtime/c/Doxyfile +1632/−0
- src/runtime/c/DoxygenLayout.xml +188/−0
- src/runtime/c/Makefile +0/−19
- src/runtime/c/Makefile.am +117/−0
- src/runtime/c/README +119/−0
- src/runtime/c/configure.ac +66/−0
- src/runtime/c/doxygen.am +169/−0
- src/runtime/c/gfcc-term.c +0/−203
- src/runtime/c/gfcc-term.h +0/−65
- src/runtime/c/gfcc-tree.c +0/−61
- src/runtime/c/gfcc-tree.h +0/−49
- src/runtime/c/gu/assert.c +53/−0
- src/runtime/c/gu/assert.h +61/−0
- src/runtime/c/gu/bits.c +53/−0
- src/runtime/c/gu/bits.h +151/−0
- src/runtime/c/gu/choice.c +72/−0
- src/runtime/c/gu/choice.h +37/−0
- src/runtime/c/gu/defs.c +4/−0
- src/runtime/c/gu/defs.h +217/−0
- src/runtime/c/gu/dump.c +411/−0
- src/runtime/c/gu/dump.h +34/−0
- src/runtime/c/gu/enum.c +7/−0
- src/runtime/c/gu/enum.h +35/−0
- src/runtime/c/gu/exn.c +72/−0
- src/runtime/c/gu/exn.h +195/−0
- src/runtime/c/gu/file.c +73/−0
- src/runtime/c/gu/file.h +14/−0
- src/runtime/c/gu/fun.c +1/−0
- src/runtime/c/gu/fun.h +71/−0
- src/runtime/c/gu/hash.c +77/−0
- src/runtime/c/gu/hash.h +40/−0
- src/runtime/c/gu/in.c +421/−0
- src/runtime/c/gu/in.h +146/−0
- src/runtime/c/gu/intern.c +59/−0
- src/runtime/c/gu/intern.h +24/−0
- src/runtime/c/gu/list.c +59/−0
- src/runtime/c/gu/list.h +140/−0
- src/runtime/c/gu/log.c +79/−0
- src/runtime/c/gu/log.h +65/−0
- src/runtime/c/gu/map.c +353/−0
- src/runtime/c/gu/map.h +121/−0
- src/runtime/c/gu/mem.c +346/−0
- src/runtime/c/gu/mem.h +276/−0
- src/runtime/c/gu/out.c +302/−0
- src/runtime/c/gu/out.h +166/−0
- src/runtime/c/gu/prime.c +154/−0
- src/runtime/c/gu/prime.h +16/−0
- src/runtime/c/gu/read.c +15/−0
- src/runtime/c/gu/read.h +31/−0
- src/runtime/c/gu/seq.c +331/−0
- src/runtime/c/gu/seq.h +212/−0
- src/runtime/c/gu/str.c +85/−0
- src/runtime/c/gu/str.h +29/−0
- src/runtime/c/gu/string.c +270/−0
- src/runtime/c/gu/string.h +125/−0
- src/runtime/c/gu/sysdeps.h +30/−0
- src/runtime/c/gu/type.c +229/−0
- src/runtime/c/gu/type.h +454/−0
- src/runtime/c/gu/ucs.c +135/−0
- src/runtime/c/gu/ucs.h +53/−0
- src/runtime/c/gu/utf8.c +220/−0
- src/runtime/c/gu/utf8.h +67/−0
- src/runtime/c/gu/variant.c +100/−0
- src/runtime/c/gu/variant.h +167/−0
- src/runtime/c/gu/write.c +174/−0
- src/runtime/c/gu/write.h +64/−0
- src/runtime/c/gu/yaml.c +339/−0
- src/runtime/c/gu/yaml.h +38/−0
- src/runtime/c/guconfig.h.in +2/−0
- src/runtime/c/libgu.pc.in +10/−0
- src/runtime/c/libpgf.pc.in +11/−0
- src/runtime/c/m4/ax_prog_doxygen.m4 +533/−0
- src/runtime/c/m4/c_ext.m4 +89/−0
- src/runtime/c/pgf.h +0/−14
- src/runtime/c/pgf/data.c +256/−0
- src/runtime/c/pgf/data.h +340/−58
- src/runtime/c/pgf/edsl.h +20/−0
- src/runtime/c/pgf/expr.c +429/−0
- src/runtime/c/pgf/expr.h +133/−116
- src/runtime/c/pgf/linearize.c +540/−0
- src/runtime/c/pgf/linearize.h +122/−0
- src/runtime/c/pgf/loader.c +0/−396
- src/runtime/c/pgf/panic.c +0/−8
- src/runtime/c/pgf/panic.h +0/−6
- src/runtime/c/pgf/parser.c +1449/−0
- src/runtime/c/pgf/parser.h +103/−0
- src/runtime/c/pgf/pgf.h +80/−0
- src/runtime/c/pgf/printer.c +356/−0
- src/runtime/c/pgf/reader.c +884/−0
- src/runtime/c/pgf/type.h +0/−22
- src/runtime/c/pgf/unloader.c +0/−248
- src/runtime/c/utils/pgf-print.c +29/−0
- src/runtime/c/utils/pgf-translate.c +199/−0
- src/runtime/c/utils/pgf2yaml.c +29/−0
- src/runtime/haskell/Data/Binary.hs +11/−0
- src/runtime/haskell/PGF/Binary.hs +1/−1
- src/runtime/haskell/PGF/Forest.hs +1/−1
- src/runtime/haskell/PGF/Printer.hs +1/−1
- src/runtime/haskell/PGF/VisualizeTree.hs +4/−5
- src/server/ContentService.hs +2/−0
- src/server/PGFService.hs +81/−85
- src/server/gf-server.cabal +10/−3
- src/www/TransQuiz/brushed-metal.png binary
- src/www/TransQuiz/minibar_quiz.css +95/−0
- src/www/TransQuiz/minibar_quiz.js +640/−0
- src/www/TransQuiz/pgf_online.js +56/−0
- src/www/TransQuiz/quiz_about.html +50/−0
- src/www/TransQuiz/quiz_help.html +46/−0
- src/www/TransQuiz/quiz_pre_start.js +64/−0
- src/www/TransQuiz/quiz_support.js +248/−0
- src/www/TransQuiz/support.js +285/−0
- src/www/TransQuiz/translation_quiz.html +165/−0
- src/www/TransQuiz/translation_quiz.js +766/−0
- src/www/gfse/about.html +2/−2
- src/www/gfse/cloud.js +2/−2
- src/www/gfse/cloud2.js +51/−13
- src/www/gfse/editor.css +33/−8
- src/www/gfse/editor.js +362/−53
- src/www/gfse/example_based.js +37/−18
- src/www/gfse/gf_abs.js +101/−17
- src/www/gfse/index.html +9/−3
- src/www/gfse/localstorage.js +2/−2
- src/www/gfse/molto.css +31/−8
- src/www/gfse/share.html +2/−2
- src/www/gfse/sort.js +122/−0
- src/www/index.html +16/−4
- src/www/minibar/about.html +8/−6
- src/www/minibar/feedback.cgi +1/−1
- src/www/minibar/feedback.html +3/−2
- src/www/minibar/minibar.css +3/−1
- src/www/minibar/minibar.html +4/−4
- src/www/minibar/minibar.js +6/−3
- src/www/minibar/minibar_online.js +8/−7
- src/www/minibar/minibar_translations.js +10/−10
- src/www/minibar/support.js +20/−6
@@ -1,4 +1,4 @@-.PHONY: all build install doc clean sdist+.PHONY: all build install doc clean sdist gf all: build
@@ -73,7 +73,7 @@ do let dir = getRGLBuildDir lbi mode createDirectoryIfMissing True dir sequence_ [run_gfc pkg lbi ["-s","-make","-name=Lang"++la,- dir ++ "/Lang" ++ la ++ ".gfo"] + dir ++ "/Lang" ++ la ++ ".gfo"] | (_,la) <- optl langsPGF args] run_gfc pkg lbi (["-s","-make","-name=Lang"]++ ["Lang" ++ la ++ ".pgf"|(_,la)<-optl langsPGF args])@@ -190,7 +190,7 @@ -- the languages have long directory names and short ISO codes (3 letters) -- we also give the decodings for postprocessing linearizations, as long as grammars -- don't support all flags needed; they are used in tests- + langsCoding = [ (("amharic", "Amh"),""), (("arabic", "Ara"),""),@@ -206,13 +206,15 @@ (("interlingua","Ina"),""), (("italian", "Ita"),""), (("latin", "Lat"),""),+ (("latvian", "Lav"),""), (("norwegian","Nor"),""), (("polish", "Pol"),""), (("punjabi", "Pnb"),""), (("romanian", "Ron"),""), (("russian", "Rus"),""),+ (("sindhi", "Snd"),""), (("spanish", "Spa"),""),- (("swedish", "Swe"),""), + (("swedish", "Swe"),""), (("thai", "Tha"),"to_thai"), (("turkish", "Tur"),""), (("urdu", "Urd"),"")@@ -224,17 +226,17 @@ -- defaultLangs = langs `only` words "Eng Fre Ger Ita Spa Swe" -- languagues for which to compile Lang-langsLang = langs `except` ["Amh","Ara","Lat","Hin","Tha","Tur"]+langsLang = langs `except` ["Amh","Ara","Lat","Tur"] --langsLang = langs `only` ["Fin"] --test --- languages for which to compile Try -langsAPI = langsLang `except` ["Hin","Ina","Tha"]+-- languages for which to compile Try+langsAPI = langsLang `except` ["Ina"] --- languages for which to compile Symbolic -langsSymbolic = langsAPI `except` ["Rus"]+-- languages for which to compile Symbolic+langsSymbolic = langsAPI -- `except` ["Rus"] -- languages for which to run demo test-langsDemo = langsLang `except` ["Ara","Hin","Ina","Tha"]+langsDemo = langsLang `except` ["Ara","Hin","Ina","Lav","Tha"] -- languages for which to compile parsing grammars langsParse = langs `only` ["Eng"]@@ -243,7 +245,7 @@ langsPGF = langsLang `except` ["Ara","Hin","Ron","Tha"] -- languages for which Compatibility exists (to be extended)-langsCompat = langsLang `only` ["Cat","Eng","Fin","Fre","Ita","Spa","Swe"]+langsCompat = langsLang `only` ["Cat","Eng","Fin","Fre","Ita","Lav","Spa","Swe"] gfc modes pkg lbi file = sequence_ [gfc1 mode pkg lbi file | mode<-modes] gfc1 mode pkg lbi file = do@@ -254,7 +256,7 @@ Minimal -> "-preproc="++({-rgl_src_dir </>-} "mkMinimal") createDirectoryIfMissing True dir putStrLn $ "Compiling [" ++ show mode ++ "] " ++ file- run_gfc pkg lbi ["-s", preproc, "--gfo-dir="++dir, file]+ run_gfc pkg lbi ["-s", "-no-pmcfg", preproc, "--gfo-dir="++dir, file] gf comm files pkg lbi = do putStrLn $ "Reading " ++ unwords files@@ -264,7 +266,7 @@ out <- readProcess gf ("-s":files) comm putStrLn out -demos abstr ls = "gr -number=100 | l -treebank " ++ unlexer abstr ls ++ +demos abstr ls = "gr -number=100 | l -treebank " ++ unlexer abstr ls ++ " | ps -to_html | wf -file=resdemo.html" lang (lla,la) = rgl_src_dir </> lla </> ("All" ++ la ++ ".gf")@@ -285,7 +287,7 @@ then default_modes else explicit_modes where- explicit_modes = + explicit_modes = [Minimal|have "minimal"]++ [Present|have "present"]++ [AllTenses|have "alltenses"]@@ -330,17 +332,17 @@ langs_prefix = "langs=" rgl_prefix = "rgl-" -unlexer abstr ls = - "-unlexer=\\\"" ++ unwords - [abstr ++ la ++ "=" ++ unl | - lla@(_,la) <- ls, let unl = unlex lla, not (null unl)] ++ +unlexer abstr ls =+ "-unlexer=\\\"" ++ unwords+ [abstr ++ la ++ "=" ++ unl |+ lla@(_,la) <- ls, let unl = unlex lla, not (null unl)] ++ "\\\"" where unlex lla = maybe "" id $ lookup lla langsCoding -- | Runs the gf executable in compile mode with the given arguments. run_gfc :: PackageDescription -> LocalBuildInfo -> [String] -> IO ()-run_gfc pkg lbi args = +run_gfc pkg lbi args = do let args' = ["-batch","-gf-lib-path="++rgl_src_dir,"+RTS","-K32M","-RTS"] ++ filter (not . null) args gf = default_gf pkg lbi gf_cmdline = gf ++ " " ++ unwords (map showArg args')
@@ -17,10 +17,20 @@ -} example_grammars = -- :: [(pgf, tmp, src)]- [("Foods.pgf","foods","contrib"</>"summerschool"</>"foods"</>"Foods???.gf"),- ("Letter.pgf","letter","examples"</>"letter"</>"Letter???.gf")]+ [("Foods.pgf","foods",foodsSrc),+ ("Letter.pgf","letter",letterSrc)]+ where+ foodsDir ="contrib"</>"summerschool"</>"foods"+ --foodsSrc = foodsDir</>"Foods???.gf" -- doesn't work on Win32+ foodsSrc = unwords [foodsDir</>"Foods"++lang++".gf"|lang<-foodsLangs]+ foodsLangs = words "Afr Amh Bul Cat Cze Dut Eng Epo Fin Fre Ger Gle Heb Hin Ice Ita Jpn Lav Mlt Mon Nep Pes Por Ron Spa Swe Tha Tsn Tur Urd" + letterDir = "examples"</>"letter"+ --letterSrc = letterDir</>"Letter???.gf"+ letterSrc = unwords [letterDir</>"Letter"++lang++".gf"|lang<-letterLangs]+ letterLangs = words "Eng Fin Fre Heb Rus Swe" + installWeb gf args flags pki lbi = setupWeb gf args dest pki lbi where dest = NoCopyDest@@ -50,7 +60,7 @@ where tmp_dir = gfo_dir</>tmp cmd = gf++" -make -s -optimize-pgf --gfo-dir="++tmp_dir++- " --gf-lib-path=dist/build/rgl"+++ " --gf-lib-path=dist"</>"build"</>"rgl"++ -- " --output-dir="++grammars_dir++ -- has no effect?! " "++src
@@ -0,0 +1,28 @@+-- Copyright (C) 2011 Nikita Frolov++import qualified Data.Text as T+import qualified Data.Text.IO as UTF8+import System.IO+import System.Environment+import Control.Monad+import Control.Monad.State++main :: IO ()+main = do+ args <- getArgs+ forM_ args $ \ f -> do+ entries <- UTF8.readFile f >>= (return . T.lines)+ forM_ entries $ \ entry ->+ do+ let ws = T.words entry+ form = head ws+ tags = toPairs $ tail ws+ forM_ tags $ \ (lemma, tag) ->+ do+ UTF8.putStrLn $ T.concat [lemma, sp, form, sp, tag]+ where sp = T.singleton ' '+ ++toPairs xs = zip (stride 2 xs) (stride 2 (drop 1 xs))+ where stride _ [] = []+ stride n (x:xs) = x : stride n (drop (n-1) xs)
@@ -0,0 +1,135 @@+-- Copyright (C) 2011 Nikita Frolov++-- No, we can't pipeline parsing and generation, because there is no guarantee+-- that we have collected all forms for a lemma before we've scanned the+-- complete file.++import qualified Data.Text as T+import qualified Data.Text.IO as UTF8+import System.IO+import System.Environment+import Control.Monad+import Control.Monad.State+import qualified Data.Map as M+import Codec.Text.IConv+import qualified Data.ByteString.Lazy as BS+import qualified Data.ByteString.Internal as BSI++import EaglesMatcher++type Lemmas = M.Map T.Text Forms++main :: IO ()+main = do+ args <- getArgs+ forM_ args $ \ f -> do+ entries <- UTF8.readFile f >>= (return . T.lines)+ lemmas <- return $ execState (collectLemmas entries) (M.empty :: Lemmas)+ mapM_ generateLin (M.assocs lemmas)++collectLemmas entries = do+ forM_ entries $ \ entry -> do+ let ws = T.words entry+ lemma = head ws+ tags = toPairs $ tail ws+ lemmas <- get+ forM_ tags $ \ (form, tag) -> do+ let forms = (case M.lookup lemma lemmas of+ Just f -> f+ Nothing -> M.empty) :: Forms+ if isOpenCat . T.unpack $ tag+ then put $ M.insert lemma (M.insert tag form forms) lemmas+ else return ()++generateLin :: (T.Text, Forms) -> IO ()+generateLin (lemma, forms) = do+ let lemma' = myVeryOwnCyrillicRomanizationIConvSucks lemma+ UTF8.putStr $ T.concat [T.pack "lin ", lemma']+ UTF8.putStr $ case T.unpack . head . M.keys $ forms of+ ('N':_:_:_:g:a:'0':_) ->+ T.concat $ [T.pack "_N = mkN "]+ ++ map (quote . noun forms) [ ('N','S'), ('G','S')+ , ('D','S'), ('F','S'), ('C','S'), ('O','S')+ , ('L','S'), ('N','P'), ('G','P'), ('D','P')+ , ('F','P'), ('C','P'), ('O','P') ]+ ++ [showG g, sp, showAni a, ln]+ ('N':_:c:n:g:a:_) ->+ T.concat $ [T.pack "_PN = mkPN "+ , quote $ noun forms ('N', 'S')+ , showG g, sp+ , showN n, sp, showAni a, ln]+ ('A':_) ->+ T.concat $ [T.pack "_A = mkA ", quote $ adj forms 'P',+ if adj forms 'P' /= adj forms 'C'+ then quote $ adj forms 'C'+ else T.pack ""+ , ln]+ ('V':t) ->+ let a = case t of+ (_:_:_:_:'P':_:a':_) -> a'+ (_:_:_:_:_:a':_) -> a'+ in+ T.concat $ [T.pack "_V = mkV ", showAsp a, sp]+ ++ map (quote . verbPres forms) [ ('S','1'), ('S','2')+ , ('S','3'), ('P','1')+ , ('P','2'), ('P','3')]+ ++ [ quote $ verbPast forms ('S', 'M')+ , quote $ verbImp forms, quote $ verbInf forms, ln]+ ('D':_) ->+ T.concat $ [T.pack "_Adv = mkAdv "+ , quote . adv $ forms, ln]+ putStrLn ""+ hFlush stdout+ where quote x = T.concat [T.pack "\"", x, T.pack "\" "]+ showG 'F' = T.pack "Fem"+ showG 'A' = T.pack "Neut"+ showG _ = T.pack "Masc"+ showAni 'I' = T.pack "Inanimate"+ showAni _ = T.pack "Animate"+ showN 'P' = T.pack "Pl"+ showN _ = T.pack "Sg"+ showAsp 'F' = T.pack "Perfective"+ showAsp _ = T.pack "Imperfective"+ sp = T.singleton ' '+ ln = T.pack " ;"++toPairs xs = zip (stride 2 xs) (stride 2 (drop 1 xs))+ where stride _ [] = []+ stride n (x:xs) = x : stride n (drop (n-1) xs)++myVeryOwnCyrillicRomanizationIConvSucks s = T.pack . concatMap r . T.unpack $ s+ where r 'а' = "a"+ r 'б' = "b"+ r 'в' = "v"+ r 'г' = "g"+ r 'д' = "d"+ r 'е' = "je"+ r 'ё' = "jo"+ r 'ж' = "zh"+ r 'з' = "z"+ r 'и' = "i"+ r 'й' = "jj"+ r 'к' = "k"+ r 'л' = "l"+ r 'м' = "m"+ r 'н' = "n"+ r 'о' = "o"+ r 'п' = "p"+ r 'р' = "r"+ r 'с' = "s"+ r 'т' = "t"+ r 'у' = "u"+ r 'ф' = "f"+ r 'х' = "kh"+ r 'ц' = "c"+ r 'ч' = "ch"+ r 'ш' = "sh"+ r 'щ' = "shc"+ r 'ъ' = "yy"+ r 'ы' = "y"+ r 'ь' = "q"+ r 'э' = "e"+ r 'ю' = "ju"+ r 'я' = "ja"+ r '-' = "_"+ r o = [o]
@@ -0,0 +1,63 @@+-- Copyright (C) 2011 Nikita Frolov++-- The format specification can be found at+-- http://devel.cpl.upc.edu/freeling/svn/trunk/doc/tagsets/tagset-ru.html++-- Bugs in the specification:+-- Participle, 2nd field: case, not mood+-- Participle, 6th field: field, not person+-- Verb, persons can be denoted both with 'Pnumber' or just 'number'+-- Noun, 10th field can be absent++-- No, it wouldn't be simpler to implement this grammar with Parsec or another+-- parser combinator library.+++module EaglesMatcher where++import qualified Data.Text as T+import Data.List+import qualified Data.Map as M++type Forms = M.Map T.Text T.Text++isOpenCat ('A':_) = True+isOpenCat ('N':_) = True+isOpenCat ('V':_) = True+isOpenCat ('D':_) = True+isOpenCat _ = False++noun forms (c, n) = findForm (matchNoun . T.unpack) forms+ where matchNoun ('N':_:c':n':_) = c == c' && n == n'+ matchNoun _ = False++adj forms d = findForm (matchAdj . T.unpack) forms+ where matchAdj ('A':'N':'S':'M':_:'F':d':_) = d == d+ matchAdj _ = False++verbPres forms (n, p) = findForm (matchPres . T.unpack) forms+ where matchPres ('V':'D':n':_:'P':'P':p':_:'A':_) = n == n' && p == p'+ matchPres ('V':'D':n':_:'F':'P':p':_:'A':_) = n == n' && p == p'+ matchPres ('V':'D':n':_:'P':'P':p':_) = n == n' && p == p'+ matchPres ('V':'D':n':_:'F':'P':p':_) = n == n' && p == p'+ matchPres _ = False++verbPast forms (n, g) = findForm (matchPast . T.unpack) forms+ where matchPast ('V':'D':n':g':'S':_:_:'A':_) = n == n' && g == g'+ matchPast _ = False++verbImp forms = findForm (matchImp . T.unpack) forms+ where matchImp ('V':'M':_) = True+ matchImp _ = False++verbInf forms = findForm (matchInf . T.unpack) forms+ where matchInf ('V':'I':_) = True+ matchInf _ = False++adv forms = findForm (matchAdv . T.unpack) forms+ where matchAdv ('D':d:_) = d == 'P'+ matchAdv _ = False++findForm match forms = case find match (M.keys forms) of+ Just tag -> forms M.! tag+ Nothing -> findForm (\ _ -> True) forms
@@ -0,0 +1,239 @@+-- Copyright (C) 2011 Nikita Frolov++-- An early version of the parser that requires somewhat more memory. Kept for+-- nostalgic reasons.++module EaglesParser where++import qualified Data.Text as T+import Data.List+import qualified Data.Map as M++type Forms = M.Map Tag T.Text++data Tag = A Case Number Gender Animacy Form Degree Extra Obscene+ | Adv Degree Extra Obscene+ | AdvPron Extra+ | Ord Case Number Gender Animacy+ | AdjPron Case Number Gender Animacy Extra+ | Frag Extra+ | Conj Extra+ | Inter Extra Obscene+ | Num Case Number Gender Animacy Extra+ | Part Extra+ | Prep Extra+ | N Case Number Gender Animacy Name Extra Obscene+ | Pron Case Number Gender Animacy Extra+ | V Mood Number Gender Tense Person Aspect Voice Trans Extra Obscene+ | P Case Number Gender Tense Form Aspect Voice Trans Extra Obscene+ deriving (Show, Ord, Eq)++parseTag :: T.Text -> Tag+parseTag tag = case (T.unpack tag) of {+ ('A':c:n:g:a:f:cmp:e:o:[]) -> A (readCase c) (readNumber n)+ (readGender g) (readAnimacy a)+ (readForm f) (readDegree cmp)+ (readExtra e) (readObscene o) ;+ ('D':cmp:e:o:[]) -> Adv (readDegree cmp)+ (readExtra e) (readObscene o) ;+ ('P':e:[]) -> AdvPron (readExtra e) ;+ ('Y':c:n:g:a:[]) -> Ord (readCase c) (readNumber n)+ (readGender g) (readAnimacy a) ;+ ('R':c:n:g:a:e:[]) -> AdjPron (readCase c) (readNumber n)+ (readGender g) (readAnimacy a) (readExtra e) ;+ ('M':e:[]) -> Frag (readExtra e) ;+ ('C':e:[]) -> Conj (readExtra e) ;+ ('J':e:o:[]) -> Inter (readExtra e) (readObscene o) ;+ ('Z':c:n:g:a:e:[]) -> Num (readCase c) (readNumber n)+ (readGender g) (readAnimacy a) (readExtra e) ;+ ('T':e:[]) -> Part (readExtra e) ;+ ('B':e:[]) -> Prep (readExtra e) ;+ ('N':_:c:n:g:a:name:e:o:_:[]) -> N (readCase c) (readNumber n)+ (readGender g) (readAnimacy a)+ (readName name)+ (readExtra e) (readObscene o) ;+ ('N':_:c:n:g:a:name:e:o:[]) -> N (readCase c) (readNumber n)+ (readGender g) (readAnimacy a)+ (readName name)+ (readExtra e) (readObscene o) ;+ ('E':c:n:g:a:e:[]) -> Pron (readCase c) (readNumber n)+ (readGender g) (readAnimacy a) (readExtra e) ;+ ('V':m:n:g:t:'P':p:a:v:tr:e:o:[]) -> V (readMood m) (readNumber n)+ (readGender g) (readTense t)+ (readPerson p) (readAspect a)+ (readVoice v) (readTrans tr)+ (readExtra e) (readObscene o) ;+ ('V':m:n:g:t:'0':a:v:tr:e:o:[]) -> V (readMood m) (readNumber n)+ (readGender g) (readTense t)+ NP (readAspect a)+ (readVoice v) (readTrans tr)+ (readExtra e) (readObscene o) ;+ ('V':m:n:g:t:p:a:v:tr:e:o:[]) -> V (readMood m) (readNumber n)+ (readGender g) (readTense t)+ (readPerson p) (readAspect a)+ (readVoice v) (readTrans tr)+ (readExtra e) (readObscene o) ;+ ('Q':c:n:g:t:f:a:v:tr:e:o:[]) -> P (readCase c) (readNumber n)+ (readGender g) (readTense t)+ (readForm f) (readAspect a)+ (readVoice v) (readTrans tr)+ (readExtra e) (readObscene o) ;+ _ -> error $ "Parse error: " ++ T.unpack tag }++data Case = Nom | Gen | Dat | Acc | Inst | Prepos | Partit | Loc | Voc | NC+ deriving (Show, Ord, Eq)++readCase 'N' = Nom+readCase 'G' = Gen+readCase 'D' = Dat+readCase 'F' = Acc+readCase 'C' = Inst+readCase 'O' = Prepos+readCase 'P' = Partit+readCase 'L' = Loc+readCase 'V' = Voc+readCase '0' = NC++data Number = Sg | Pl | NN deriving (Show, Ord, Eq)++readNumber 'S' = Sg+readNumber 'P' = Pl+readNumber '0' = NN++data Gender = Masc | Fem | Neut | Common | NG deriving (Show, Ord, Eq)++readGender 'F' = Fem+readGender 'M' = Masc+readGender 'A' = Neut+readGender 'C' = Common+readGender '0' = NG++data Animacy = Animate | Inanimate | NA deriving (Show, Ord, Eq)++readAnimacy 'A' = Animate+readAnimacy 'I' = Inanimate+readAnimacy '0' = NA++data Form = Short | Full | NF deriving (Show, Ord, Eq)++readForm 'S' = Short+readForm 'F' = Full+readForm '0' = NF++data Degree = Pos | Comp | Super | ND deriving (Show, Ord, Eq)++readDegree 'E' = Super+readDegree 'C' = Comp+readDegree 'P' = Pos+readDegree '0' = ND++data Extra = Introductory | Difficult | Distorted | Predicative+ | Colloquial | Rare | Abbreviation | Obsolete | NE deriving (Show, Ord, Eq)++readExtra 'P' = Introductory+readExtra 'D' = Difficult+readExtra 'V' = Distorted+readExtra 'R' = Predicative+readExtra 'I' = Colloquial+readExtra 'A' = Rare+readExtra 'B' = Abbreviation+readExtra 'E' = Obsolete+readExtra '0' = NE++data Obscene = Obscene | NO deriving (Show, Ord, Eq)++readObscene 'H' = Obscene+readObscene '0' = NO++data Name = Topo | Proper | Patro | Family | NNa deriving (Show, Ord, Eq)++readName 'G' = Topo+readName 'N' = Proper+readName 'S' = Patro+readName 'F' = Family+readName '0' = NNa++data Mood = Gerund | Inf | Ind | Imp | NM deriving (Show, Ord, Eq)++readMood 'G' = Gerund+readMood 'I' = Inf+readMood 'D' = Ind+readMood 'M' = Imp+readMood '0' = NM++data Tense = Pres | Fut | Past | NT deriving (Show, Ord, Eq)++readTense 'P' = Pres+readTense 'F' = Fut+readTense 'S' = Past+readTense '0' = NT++data Person = P1 | P2 | P3 | NP deriving (Show, Ord, Eq)++readPerson '1' = P1+readPerson '2' = P2+readPerson '3' = P3++data Aspect = Perf | Imperf | NAs deriving (Show, Ord, Eq)++readAspect 'F' = Perf+readAspect 'N' = Imperf+readAspect '0' = NAs++data Voice = Act | Pass | NV deriving (Show, Ord, Eq)++readVoice 'A' = Act+readVoice 'S' = Pass+readVoice '0' = NV++data Trans = Trans | Intrans | NTr deriving (Show, Ord, Eq)++readTrans 'M' = Trans+readTrans 'A' = Intrans+readTrans '0' = NTr++isOpenCat :: Tag -> Bool+isOpenCat (A _ _ _ _ _ _ _ _) = True+isOpenCat (N _ _ _ _ _ _ _) = True+isOpenCat (V _ _ _ _ _ _ _ _ _ _) = True+isOpenCat (Adv _ _ _) = True+isOpenCat _ = False++noun :: Forms -> (Case, Number) -> T.Text+noun forms (c, n) = findForm matchNoun forms+ where matchNoun (N c' n' _ _ _ _ _) = c == c' && n == n'+ matchNoun _ = False++adj :: Forms -> Degree -> T.Text+adj forms d = findForm matchAdj forms+ where matchAdj (A _ _ _ _ _ d' _ _) = d == d+ matchAdj _ = False++verbPres :: Forms -> (Number, Person) -> T.Text+verbPres forms (n, p) = findForm matchPres forms+ where matchPres (V Ind n' _ Pres p' _ Act _ _ _) = n == n' && p == p'+ matchPres _ = False++verbPast :: Forms -> (Number, Gender) -> T.Text+verbPast forms (n, g) = findForm matchPast forms+ where matchPast (V Ind n' g' Past _ _ Act _ _ _) = n == n' && g == g'+ matchPast _ = False++verbImp :: Forms -> T.Text+verbImp forms = findForm matchImp forms+ where matchImp (V Imp _ _ _ _ _ _ _ _ _) = True+ matchImp _ = False++verbInf :: Forms -> T.Text+verbInf forms = findForm matchInf forms+ where matchInf (V Inf _ _ _ _ _ _ _ _ _) = True+ matchInf _ = False++adv :: Forms -> T.Text+adv forms = findForm matchAdv forms+ where matchAdv (Adv d _ _) = d == Pos+ matchAdv _ = False++findForm match forms = case find match (M.keys forms) of+ Just tag -> forms M.! tag+ Nothing -> findForm (\ _ -> True) forms
@@ -0,0 +1,24 @@+How to use:++1) Sort the wordlist so it can be split into sublists. It is necessary because+the converter is quite memory-hungry, and you might not have enough RAM to+process the whole wordlist at once.++./CollectLemmas dicc.src | sort > lemmas.src++2) Split the sorted wordlist.++split -l 500000 lemmas.src++3) Splitting has probably left forms of some lemmas spread across two+sublists. Manually edit sublists so all forms for a lemma are present in just+one sublist.++4) Run the converter.++./run_conv.sh xa*++5) The converter has produced abstract and concrete syntaxes for the+dictionary. You can try them out with GF:++gf DictRus.gf
@@ -0,0 +1,8 @@+#!/bin/sh++echo "abstract DictRusAbs = Cat ** {+"+cat $1 | sed 's/^lin/fun/g;s/=.*$//g;s/\_N/\_N : N\;/g;s/\_PN/\_PN : PN\;/g;s/\_A /\_A : A\;/g;s/\_V/\_V : V\;/g;s/\_Adv/\_Adv : Adv\;/g'++echo "+}"
@@ -0,0 +1,12 @@+#!/bin/sh++echo "--# -path=.:../prelude:../abstract:../common++concrete DictRus of DictRusAbs = CatRus ** + open ParadigmsRus, Prelude, StructuralRus, MorphoRus in {+flags + optimize=values ;+ coding=utf8 ;+"+cat $1+echo "}"
@@ -0,0 +1,4 @@+#!/bin/sh+./EaglesConv "$@" +RTS -K256M -RTS > convtmp+./mkConcrete.sh convtmp > DictRus.gf+./mkAbstract.sh convtmp > DictRusAbs.gf
@@ -1,7 +1,9 @@ {-# LANGUAGE ForeignFunctionInterface #-} --- GF Python bindings -- Jordi Saludes, upc.edu 2010--- Jordi Saludes, upc.edu 2010 --+-- GF Python bindings+-- Jordi Saludes, upc.edu 2010, 2011+--+ module PyGF where import PGF@@ -9,6 +11,8 @@ import CString import Foreign.C.Types import Control.Monad+import Data.Map (keys, (!))+import Data.Char (isSpace) #include "pygf.h" @@ -73,6 +77,7 @@ deRefStablePtr sp -} + foreign export ccall gf_freePGF :: Ptr PGF -> IO () foreign export ccall gf_freeType :: Ptr Type -> IO () foreign export ccall gf_freeLanguage :: Ptr Language -> IO ()@@ -141,8 +146,17 @@ poke pl l pyl << pl --- foreign export ccall "gf_freeArray" free :: Ptr a -> IO () +listToPyStrings :: [String] -> IO (Ptr ())+listToPyStrings ss = do+ pyls <- pyList+ mapM_ (mpoke pyls) ss+ return pyls+ where mpoke pyl s = do+ cs <- newCString s+ pcs <- pyString cs+ pyl << pcs+ foreign export ccall gf_showLanguage :: Ptr Language -> IO CString gf_showLanguage plang = do@@ -256,6 +270,29 @@ _ -> return nullPtr +foreign export ccall gf_completions :: Ptr PGF -> Ptr Language -> Ptr Type -> CString -> IO (Ptr ())+gf_completions ppgf plang pcat ctoks = do+ pgf <- peek ppgf+ lang <- peek plang+ cat <- peek pcat+ toks <- peekCString ctoks+ let (rpre,rs) = break isSpace (reverse toks)+ pre = reverse rpre+ ws = words (reverse rs)+ state0 = initState pgf lang cat+ completions =+ case loop state0 ws of+ Nothing -> []+ Just state -> keys $ getCompletions state pre+ listToPyStrings completions+ where+ loop ps [] = Just ps+ loop ps (w:ws) =+ case nextState ps (simpleParseInput w) of+ Left _ -> Nothing+ Right ps -> loop ps ws+ + foreign import ccall "newLang" pyLang :: IO (Ptr Language) foreign import ccall "newPGF" pyPGF :: IO (Ptr PGF) foreign import ccall "newTree" pyTree :: IO (Ptr Tree) @@ -263,4 +300,5 @@ foreign import ccall "newCId" pyCId :: IO (Ptr CId) foreign import ccall "newExpr" pyExpr :: IO (Ptr Expr) foreign import ccall "newList" pyList :: IO (Ptr ()) +foreign import ccall "newString" pyString :: CString -> IO (Ptr ()) foreign import ccall "append" (<<) :: Ptr () -> Ptr a -> IO ()
@@ -0,0 +1,147 @@+Using the GF python bindings+============================++This is how to use some of the functionalities of the GF shell inside Python.++Loading a pgf file+------------------+First you must import the library:++>>> import gf++then load a PGF file, like this tiny example:++>>> pgf = gf.read_pgf("Query.pgf")++We could ask for the supported languages:++>>> pgf.languages()+[QueryEng, QuerySpa]++The *start category* of the PGF module is:++>>> pgf.startcat()+Question++Parsing and linearizing+-----------------------++Let's us save the languages for later:++>>> eng,spa = pgf.languages()++These are opaque objects, not strings:++>>> type(eng)+<type 'gf.lang'>++and must be used when parsing:++>>> pgf.parse(eng, "is 42 prime")+[Prime (Number 42)]++Yes, I know it should have a '?' at the end, but there is not support for other lexers at this time.++Notice that parsing returns a list of gf trees.+Let's save it and linearize it in Spanish:++>>> t = pgf.parse(eng, "is 42 prime")+>>> pgf.linearize(spa, t[0])+'42 es primo'++(which is not, but there is a '?' lacking at the end, remember?)+++Getting parsing completions+---------------------------+One of the good things of the GF shell is that it suggests you which tokens can continue the line you are composing.++We got this also in the bindings. +Suppose we have no idea on how to start:++>>> pgf.complete(eng, "")+['is']++so, there is only a sensible thing to put in. Let's continue:++>>> pgf.complete(eng, "is ")+[]++Is it important to note the blank space at the end, otherwise we get it again:++>>> pgf.complete(eng, "is")+['is']++But, how come that nothing is suggested at "is "? +At the current point, a literal integer is expected so GF would have to present an infinite list of alternatives. I cannot blame it for refusing to do so.++>>> pgf.complete(eng, "is 42 ")+['even', 'odd', 'prime']++Good. I will go for 'even', just to be in the safe side:++>>> pgf.complete(eng, "is 42 even ")+[]++Nothin again, but this time the phrase is complete. Let us check it by parsing:++>>> pgf.parse(eng, "is 42 even")+[Even (Number 42)]++Deconstructing gf trees+-----------------------+We store the last result and ask for its type:++>>> t = pgf.parse(eng, "is 42 even")[0]+>>> type(t)+<type 'gf.tree'>++What's inside this tree? We use ``unapply`` for that:++>>> t.unapply()+[Even, Number 42]++This method returns a list with the head of the **fun** judgement and its arguments:++>>> map(type, _)+[<type 'gf.cid'>, <type 'gf.expr'>]+++Notice the argument is again a tree (``gf.tree`` or ``gf.expr``, it is all the same here.)++>>> t.unapply()[1]+Number 42+++We will repeat the trick with it now:++>>> t.unapply()[1].unapply()+[Number, 42]++and again, the same structure shows up:++>>> map(type, _) +[<type 'gf.cid'>, <type 'gf.expr'>]++One more time, just to get to the bottom of it:++>>> t.unapply()[1].unapply()[1].unapply()+42++but now it is an actual number:++>>> type(_)+<type 'int'>++We ended with a full decomposed **fun** judgement.+++Note+----++This file can be used to test the bindings: ::++ python -m doctest example.rst+++
@@ -1,5 +1,5 @@ // GF Python bindings-// Jordi Saludes, upc.edu 2010+// Jordi Saludes, upc.edu 2010, 2011 // #include <Python.h>@@ -33,6 +33,7 @@ DEALLOCFN(CId_dealloc, CId, gf_freeCId, "freeCId") + /* PGF methods, constructor and destructor */ DEALLOCFN(PGF_dealloc, PGF, gf_freePGF, "freePGF")@@ -123,17 +124,16 @@ Lang *lang; gfType *cat = NULL; char *lexed;- static char *kwlist[] = {"lexed", "lang", "cat", NULL};- if (!PyArg_ParseTupleAndKeywords(args, kws, "sO|O", kwlist,- &lexed, &lang, &cat))- return NULL;+ static char *kwlist[] = {"lang", "lexed", "cat", NULL};+ if (!PyArg_ParseTupleAndKeywords(args, kws, "Os|O", kwlist, &lang, &lexed, &cat))+ return NULL; if (!checkType(self, &PGFType)) return NULL; if (!checkType(lang, &LangType)) return NULL; if (cat) { if (!checkType(cat, &gfTypeType)) return NULL; } else { - cat = gf_startCat(self); - } + cat = gf_startCat(self);+ } return gf_parse(self, lang, cat, lexed); } @@ -154,10 +154,28 @@ } +static PyObject*+completions(PGF *self, PyObject *args, PyObject *kws)+{ char *tokens;+ Lang *lang;+ gfType *cat = NULL;+ static char *kwlist[] = {"lang", "tokens", "category", NULL};+ if (!PyArg_ParseTupleAndKeywords(args, kws, "Os|O", kwlist, &lang, &tokens, &cat))+ return NULL;+ if (!checkType(self, &PGFType)) return NULL;+ if (!checkType(lang, &LangType)) return NULL;+ if (cat) {+ if (!checkType(cat, &gfTypeType)) return NULL;+ } else {+ cat = gf_startCat(self);+ }+ return gf_completions(self, lang, cat, tokens);+} + static PyMethodDef pgf_methods[] = {- {"parse", (PyCFunction)parse, METH_VARARGS|METH_KEYWORDS,"Parse a string."},- {"lin", (PyCFunction)linearize, METH_VARARGS,"Linearize tree."},+ {"parse", (PyCFunction)parse, METH_VARARGS|METH_KEYWORDS, "Parse a string."},+ {"linearize", (PyCFunction)linearize, METH_VARARGS,"Linearize tree."}, {"lang_code", (PyCFunction)languageCode, METH_VARARGS,"Get the language code."}, {"print_name", (PyCFunction)printName, METH_VARARGS,"Get the print name for a id."}, {"fun_type", (PyCFunction)functiontype, METH_VARARGS,"Get the type of a fun expression."},@@ -166,6 +184,7 @@ {"functions", (PyCFunction)gf_functions, METH_NOARGS,"Get all functions."}, {"abstract", (PyCFunction)abstractName, METH_NOARGS,"Get the module abstract name."}, {"languages", (PyCFunction)gf_languages, METH_NOARGS,"Get the module languages."},+ {"complete", (PyCFunction)completions, METH_VARARGS|METH_KEYWORDS, "Get completions for tokens."}, {NULL, NULL, 0, NULL} /* Sentinel */ }; @@ -248,7 +267,7 @@ -/* tree typr: methods, constructor and destructor */+/* tree type: methods, constructor and destructor */ // Are Expr and Tree equivalent ? REPRCB(tree_repr, Tree, gf_showExpr)@@ -281,12 +300,17 @@ if (PyType_Ready(&t) < 0) return; READYTYPE(CIdType, CId_repr, CId_dealloc)+ PGFType.tp_methods = pgf_methods; READYTYPE(PGFType, pgf_repr, PGF_dealloc)+ READYTYPE(LangType, lang_repr, Lang_dealloc)+ READYTYPE(gfTypeType, gfType_repr, gfType_dealloc)- ExprType.tp_methods = expr_methods;+ + ExprType.tp_methods = expr_methods; READYTYPE(ExprType, expr_repr, expr_dealloc)+ TreeType.tp_methods = expr_methods; // Tree == Expr ? READYTYPE(TreeType, tree_repr, Tree_dealloc) @@ -311,4 +335,5 @@ /* List utilities to be imported by FFI */ inline PyObject* newList() { return PyList_New(0); }+inline PyObject* newString(const char *s) { return PyString_FromString(s); } inline void append(PyObject* l, PyObject* ob) { PyList_Append(l, ob); }
@@ -7,7 +7,6 @@ import gf import unittest - samples = [ (['Odd', ['Number', 89]], {'eng': "is 89 odd",@@ -93,7 +92,7 @@ l = gf.read_language(self.lang) for abs,cnc in self.lexed: rabs = exp2str(abs)- ps = pgf.parse(cnc['eng'], l)+ ps = pgf.parse(l, cnc['eng']) self.failUnless(ps) pt = rmprefix(ps[0]) self.assertEqual(pt,rabs)@@ -108,8 +107,8 @@ def test_Linearize(self): l = self.lang for abs,cnc in self.samples:- ts = self.pgf.parse(cnc['eng'], l)- self.assertEqual(cnc['eng'],self.pgf.lin(l,ts[0]))+ ts = self.pgf.parse(l, cnc['eng'])+ self.assertEqual(cnc['eng'],self.pgf.linearize(l,ts[0])) class TestTranslate(unittest.TestCase): def setUp(self):@@ -122,9 +121,9 @@ for i,l in self.langs: for j,m in self.langs: if i==j: continue- parsed = self.pgf.parse(cnc[i],l)+ parsed = self.pgf.parse(l, cnc[i]) assert len(parsed) == 1- lin = self.pgf.lin(m,parsed[0])+ lin = self.pgf.linearize(m,parsed[0]) self.assertEqual(lin,cnc[j]) class TestUnapplyExpr(unittest.TestCase):@@ -146,7 +145,7 @@ lg = 'eng' lang = self.langs[lg] for abs,cnc in self.samples:- parsed = self.pgf.parse(cnc[lg],lang)+ parsed = self.pgf.parse(lang, cnc[lg]) uparsed = self.deep_unapp(parsed[0]) self.assertEqual(abs,uparsed) @@ -154,7 +153,7 @@ lg = 'eng' lang = self.langs[lg] cnc = self.samples[0][1]- parsed = self.pgf.parse(cnc[lg],lang)+ parsed = self.pgf.parse(lang, cnc[lg]) exp = parsed[0] for t in 'Question Object Int'.split(): self.assertEqual(`exp.infer(self.pgf)`, t)@@ -162,6 +161,27 @@ if type(uexp) != type(2) and type(uexp) != type('2'): exp = uexp[1] ++class TestComplete(unittest.TestCase):+ def setUp(self):+ self.lexed = samples+ self.pgf = gf.read_pgf('Query.pgf')+ self.langs = dict([(lang2iso(l),l) for l in self.pgf.languages()])++ def test_complete(self):+ for (_,d) in self.lexed:+ for l,text in d.items():+ lang = self.langs[l]+ for k in range(len(text)):+ if text[k].isdigit() or text[k-1].isdigit(): # No completion for integer literals+ continue+ comps = self.pgf.complete(lang,text[:k])+ self.assertNotEqual(comps, [],+ msg="while completing '%s^%s'" % (text[:k],text[k:]))++ self.assertTrue(any(w in text for w in comps),+ msg="None of %s is in '%s'" % (comps,text))+ if __name__ == '__main__': unittest.main()
@@ -1,80 +1,15 @@--- (c) 2009 John Camilleri under LGPL+-- (c) 2011 John Camilleri under LGPL -concrete FoodsMlt of Foods = open Prelude in {+concrete FoodsMlt of Foods = open Prelude, ResMlt in { flags coding=utf8 ; - param- Number = Sg | Pl ;- Gender = Masc | Fem ;-- lincat+ lincat Comment = SS ; Quality = {s : Gender => Number => Str} ; Kind = {s : Number => Str ; g : Gender} ; Item = {s : Str ; g : Gender ; n : Number} ; - oper- --Create an adjective (full function)- --Params: Sing Masc, Sing Fem, Plural- adjective : (_,_,_ : Str) -> {s : Gender => Number => Str} = \iswed,sewda,suwed -> {- s = table {- Masc => table {- Sg => iswed ;- Pl => suwed- } ; - Fem => table {- Sg => sewda ;- Pl => suwed- }- }- } ;-- --Create a regular adjective- --Param: Sing Masc- regAdj : Str -> {s : Gender => Number => Str} = \frisk ->- adjective frisk (frisk + "a") (frisk + "i") ;-- --Create a "uni-adjective" eg tal-buzz- --Param: Sing Masc- uniAdj : Str -> {s : Gender => Number => Str} = \uni ->- adjective uni uni uni ;- - --Create a noun- --Params: Singular, Plural, Gender (inherent)- noun : Str -> Str -> Gender -> {s : Number => Str ; g : Gender} = \ktieb,kotba,g -> {- s = table {- Sg => ktieb ;- Pl => kotba- } ;- g = g- } ;-- --Copula is a linking verb- --Params: Number, Gender- copula : Number -> Gender -> Str = \n,g -> case n of {- Sg => case g of { Masc => "huwa" ; Fem => "hija" } ;- Pl => "huma"- } ;-- --Create an article, taking into account first letter of next word- article = pre {- "a"|"e"|"i"|"o"|"u" => "l-" ;- --cons@("ċ"|"d"|"n"|"r"|"s"|"t"|"x"|"ż") => "i" + cons + "-" ;- _ => "il-"- } ;- - --Create a determinant- --Params: Sg/Pl, Masc, Fem- det : Number -> Str -> Str -> Kind -> {s : Str ; g : Gender ; n : Number} = \n,m,f,cn -> {- s = case n of {- Sg => case cn.g of {Masc => m ; Fem => f}; --string- Pl => m --default to masc- } ++ article ++ cn.s ! n ;- g = cn.g ; --gender- n = n --number- } ;-- lin+ lin Pred item quality = ss (item.s ++ copula item.n item.g ++ quality.s ! item.g ! item.n) ; This kind = det Sg "dan" "din" kind ;
@@ -0,0 +1,33 @@+--# -path=.:alltenses + +concrete FoodsTha of Foods = open SyntaxTha, LexiconTha, + ParadigmsTha, (R=ResTha) in { + + flags coding = utf8 ; + + lincat + Comment = Utt ; + Item = NP ; + Kind = CN ; + Quality = AP ; + + lin + Pred item quality = mkUtt (mkCl item quality) ; + This kind = mkNP this_Det kind ; + That kind = mkNP that_Det kind ; + These kind = mkNP these_Det kind ; + Those kind = mkNP those_Det kind ; + Mod quality kind = mkCN quality kind ; + Very quality = mkAP very_AdA quality ; + Wine = mkCN (mkN (R.thword "เหล้าอ" "งุ่น") "ขวด") ; + Pizza = mkCN (mkN (R.thword "พิซ" "ซา") "ถาด") ; + Cheese = mkCN (mkN (R.thword "เนย" "แข็ง") "ก้อน") ; + Fish = mkCN fish_N ; + Fresh = mkAP (mkA "สด") ; + Warm = mkAP warm_A ; + Italian = mkAP (mkA " อิตาลี") ; + Expensive = mkAP (mkA "แพง") ; + Delicious = mkAP (mkA "อร่อย") ; + Boring = mkAP (mkA (R.thword "น่า" "เบิ่อ")) ; + +}
@@ -0,0 +1,71 @@+-- (c) 2011 John Camilleri under LGPL++resource ResMlt = open Prelude in {+ flags coding=utf8 ;++ param+ Number = Sg | Pl ;+ Gender = Masc | Fem ;++ oper+ --Create an adjective (full function)+ --Params: Sing Masc, Sing Fem, Plural+ adjective : (_,_,_ : Str) -> {s : Gender => Number => Str} = \iswed,sewda,suwed -> {+ s = table {+ Masc => table {+ Sg => iswed ;+ Pl => suwed+ } ; + Fem => table {+ Sg => sewda ;+ Pl => suwed+ }+ }+ } ;++ --Create a regular adjective+ --Param: Sing Masc+ regAdj : Str -> {s : Gender => Number => Str} = \frisk ->+ adjective frisk (frisk + "a") (frisk + "i") ;++ --Create a "uni-adjective" eg tal-buzz+ --Param: Sing Masc+ uniAdj : Str -> {s : Gender => Number => Str} = \uni ->+ adjective uni uni uni ;+ + --Create a noun+ --Params: Singular, Plural, Gender (inherent)+ noun : Str -> Str -> Gender -> {s : Number => Str ; g : Gender} = \ktieb,kotba,g -> {+ s = table {+ Sg => ktieb ;+ Pl => kotba+ } ;+ g = g+ } ;++ --Copula is a linking verb+ --Params: Number, Gender+ copula : Number -> Gender -> Str = \n,g -> case n of {+ Sg => case g of { Masc => "huwa" ; Fem => "hija" } ;+ Pl => "huma"+ } ;++ --Create an article, taking into account first letter of next word+ article = pre {+ "a"|"e"|"i"|"o"|"u" => "l-" ;+ --cons@("ċ"|"d"|"n"|"r"|"s"|"t"|"x"|"ż") => "i" + cons + "-" ;+ _ => "il-"+ } ;+ + --Create a determinant+ --Params: Sg/Pl, Masc, Fem+ det : Number -> Str -> Str -> {s : Number => Str ; g : Gender} -> {s : Str ; g : Gender ; n : Number} = \n,m,f,cn -> {+ s = case n of {+ Sg => case cn.g of {Masc => m ; Fem => f}; --string+ Pl => m --default to masc+ } ++ article ++ cn.s ! n ;+ g = cn.g ; --gender+ n = n --number+ } ;++}
@@ -2,9 +2,11 @@ body { background-color: #f2f2f2; } -h1,h2,h3 { font-family: sans-serif; }+h1,h2,h3 { font-family: sans-serif; color: #303030;+ text-shadow: rgba(0,0,0,0.25) 2px 2px 5px;+ } h1 { text-align: center; }-h2 { border-bottom: 2px solid black; clear: right; }+h2 { border-bottom: 2px solid #303030; clear: right; } div.center { text-align: center; } div.news { font-size: small; }
binary file changed (36233 → absent bytes)
@@ -1,93 +0,0 @@-body {- background: #eee url("brushed-metal.png");-}--/* th, td { vertical-align: baseline; text-align: left; } */--div#surface {- min-height: 3ex;- margin: 5px;- padding: 5px;- border: 3px dashed #e0e0e0;-}--div#words {- min-height: 3ex;- margin: 5px;- padding: 6px;- border: 3px solid #e0e0e0;-}--div.word, span.word, div#words input[type=button] {- display: inline-block;- font-family: sans-serif;- font-size: 100%;- background-color: white;- border: 1px solid black;- padding: 3px;- margin: 3px;-}--/* added for quiz */- textarea.quest {- width: 452px;- height: 35px;- font-size:16px;- }-- textarea.explain {- width: 452px;- height: 70px;- font-size:16px;- }- - input.answer1 {- width: 442px;- height: 20px;- font-size:16px;- }- - div.hint {- font-family: Verdana; - font-weight: bold; - font-size:16px;- }- - div.bold { - font-weight: bold; - font-size:16px;- }- - input.number {- text-align:center; - font-family: Verdana; - font-weight: bold; - font-size:16px;- }- - div.shift_left {- padding-left: 320px;- }- /* default for all links */- a:link {color: #2E8B57; font-size:16px; font-weight: bold; text-decoration: underline; }- a:active {color: #2E8B57; font-size:16px; font-weight: bold; text-decoration: underline; }- a:visited {color: #2E8B57; font-size:16px; font-weight: bold; text-decoration: underline; }- a:hover {color: #CD853F; font-size:16px; font-weight: bold; text-decoration: none; }--.invalid { color: red; }--div.modtime { float: right; }-.modtime { color: #444; white-space: nowrap; }--ul.space>li { margin-top: 0.5ex; }--div#saldospel input[type=button] { font-size: 100%; }--div#saldospel input.correct { color: green; }-div#saldospel input.incorrect { color: red; }--#surface input[type=text] { width: 5em; }---span.field { background-color: #eee; }-
@@ -1,638 +0,0 @@-// minibar.js, assumes that support.js has also been loaded--var tree_icon="tree-btn.png";--/*-// This is essentially what happens when you call start_minibar:-if(server.grammar_list) grammars=server.grammar_list;-else grammars=server.get_grammarlist();-show_grammarlist(grammars)-select_grammar(grammars[0])-grammar_info=server.get_languages()-show_languages(grammar_info)-new_language()-complete_output=get_completions()-show_completions(complete_output)-*/--function Minibar(server,opts,target) {- // Typically called when the HTML document is loaded-- /* --- Configuration ---------------------------------------------------- */-- // default values for options:- this.options={- show_abstract: false,- show_trees: false,- show_grouped_translations: true,- delete_button_text: "⌫",- default_source_language: null,- - //modified for quiz- try_google: false,- - feedback_url: null,- - //modified for quiz- random_button: false,- - help_url: null- }-- // Apply supplied options- if(opts) for(var o in opts) this.options[o]=opts[o];-- /* --- Creating user interface elements --------------------------------- */-- this.surface=div_id("surface");- this.extra=div_id("extra");- this.menubar=div_id("menubar");- this.quizbar=div_id("quizbar");- this.words=div_id("words");- this.translations=div_id("translations");-- this.minibar=element(target || "minibar");- this.minibar_contin=element("minibar_contin");- this.minibar_buttons=element("minibar_buttons");- this.minibar.innerHTML="";- - //modified for quiz- with(this) {- appendChildren(minibar,[menubar, quizbar]);- appendChildren(minibar_contin,[surface,words]);- append_extra_buttons(extra,options);- }-- // Filled in and added to minibar later:- this.grammar_menu=empty_id("select","grammar_menu");- this.from_menu=empty_id("select","from_menu");- this.to_menu=empty_id("select","to_menu");- -- /* --- Minibar client state initialisation ------------------------------ */- this.grammar=null;- - //modified for quiz- this.current={from: null, to:null, input: ""};- - this.previous=null;-- this.server=server;-- /* --- Main program, this gets things going ----------------------------- */- with(this) {- if(server.grammar_list) show_grammarlist(server.grammar_list);- else server.get_grammarlist(bind(show_grammarlist,this));- }-}--/* --- Auxiliary functions ---------------------------------------------- */---Minibar.prototype.show_grammarlist=function(grammars) {- debug(this)- with(this) {- //debug("show_grammarlist ")- menubar.innerHTML="";- if(grammars.length>0) {- function opt(g) { return option(g,g); }- appendChildren(grammar_menu,map(opt,grammars));- grammar_menu.onchange=- bind(function() { select_grammar(grammar_menu.value); },this);- appendChildren(menubar,[text("Grammar: "),grammar_menu]);- }- //modified for quiz- appendChildren(menubar,- [text(" From: "), from_menu,- text(" To: "), to_menu]);- //modified for quiz- appendChildren(minibar_buttons,- [button(options.delete_button_text,bind(delete_last,this),"H"),- button("Clear",bind(clear_all,this),"L")]);- - if(options.random_button)- menubar.appendChild(button("Random",bind(generate_random,this),"R"));- if(options.help_url)- menubar.appendChild(button("Help",bind(open_help,this)));- - select_grammar(grammars[0]);- }-}--Minibar.prototype.select_grammar=function(grammar_name) {- var t=this;- //debug("select_grammar ");- function get_languages() {- t.server.get_languages(bind(t.show_languages,t));- }- t.server.switch_grammar(grammar_name,get_languages);-}--Minibar.prototype.show_languages=function(grammar_info) {- var t=this;- with(t) {- //debug("show_languages ");- grammar=grammar_info;-- var new_language=function () {- current.from=from_menu.value;- - //modified for quiz- //clear_all();- }- - //added for quiz- var change_tolang=function () {- current.to=to_menu.value;- - //var langname = element("to_menu").value;- //to_menu.current={to: langname, input: ""};- //clear_all();- }- - from_menu.onchange=bind(new_language,t);- update_language_menu(from_menu,grammar);- set_initial_language(options,from_menu,grammar);- - //modified and added for quiz- //to_menu.onchange=bind(get_translations,t);- to_menu.onchange=bind(change_tolang,t);- - update_language_menu(to_menu,grammar);- - //modified for quiz- //insertFirst(to_menu,option("All","All"));- //to_menu.value="All";-- new_language();- - //added for quiz- change_tolang();- }-}--Minibar.prototype.clear_all1=function() {- with(this) {- remove_typed_input();- current.input="";- previous=null;- surface.innerHTML="";- translations.innerHTML="";- }- - //added for quiz- document.answer.answer_text.value = "";- document.explanation.explanation_text.value= ""; - document.getElementById("hint_txt").innerHTML = "";-}--Minibar.prototype.clear_all=function() {- with(this) {- clear_all1();- get_completions();- }-}--Minibar.prototype.get_completions=function() {- - with(this) {- //debug("get_completions ");- words.innerHTML="...";- - //modified for quiz- server.complete(current.to,current.input,bind(show_completions,this));- }-}--Minibar.prototype.show_completions=function(complete_output) {- with(this) {- //debug("show_completions ");- var completions=complete_output[0].completions;- var emptycnt=add_completions(completions)- if(true/*emptycnt>0*/) get_translations();- else translations.innerHTML="";- if(surface.typed && emptycnt==completions.length) {- if(surface.typed.value=="") remove_typed_input();- }- else add_typed_input();- }- - //added for quiz :updates the hint and prevents the check_notEmpty alert in show_hint when all words are deleted- if (!(document.answer.answer_text.value == null || document.answer.answer_text.value ==""))- { if (hint_times > 0 && hint_times < max_hint_times)- show_hint();- } - else - document.getElementById("hint_txt").innerHTML = "";-}--Minibar.prototype.add_completions=function(completions) {- with(this) {- if(words.timeout) clearTimeout(words.timeout),words.timeout=null;- words.innerHTML="";- words.completions=completions;- words.word=[];- var t=surface.typed ? surface.typed.value : "";- var emptycnt=0;- for(var i=0;i<completions.length;i++) {- var s=completions[i];- if(s.length>0) {- var w=word(s);- words.appendChild(w);- words.word[i]=w;- }- else emptycnt++;- }- filter_completions(t,true);- return emptycnt;- }-}--Minibar.prototype.filter_completions=function(t,dim) {- with(this) {- if(words.timeout) clearTimeout(words.timeout),words.timeout=null;- words.filtered=t;- //if(dim) debug('filter "'+t+'"');- var w=words.word;- words.count=0;- var dimmed=0;- var prefix=""; // longest common prefix, for completion- for(var i=0;i<w.length;i++) {- var s=words.completions[i];- var keep=hasPrefix(s,t);- if(keep) {- if(words.count==0) prefix=s;- else prefix=(commonPrefix(prefix,s));- words.count++;- }- if(dim) {- w[i].style.opacity= keep ? "1" : "0.5";- if(keep) w[i].style.display="inline";- else dimmed++;- }- else - w[i].style.display=keep ? "inline" : "none";- }- words.theword=prefix;- if(dimmed>0)- words.timeout=setTimeout(function(){ filter_completions(t,false)},1000);- }-}- -Minibar.prototype.get_translations=function() {- with(this) {- var c=current;- if(options.show_grouped_translations)- server.translategroup(c.from,c.input,bind(show_groupedtranslations,this));- else- server.translate(c.from,c.input,bind(show_translations,this));- }-}--Minibar.prototype.target_lang=function() {- with(this) return langpart(to_menu.value,grammar.name);-}--Minibar.prototype.add_typed_input=function() {- with(this) {- var inp;- if(surface.typed) inp=surface.typed;- else {- inp=empty("input","type","text");- inp.value="";- inp.setAttribute("accesskey","t");- inp.style.width="10em";- inp.onkeyup=bind(complete_typed,this);- surface.appendChild(inp);- surface.typed=inp;- }- inp.focus();- }-}--Minibar.prototype.remove_typed_input=function() {- with(this) {- if(surface.typed) {- surface.typed.parentNode.removeChild(surface.typed);- surface.typed=null;- }- }-}--Minibar.prototype.complete_typed=function(event) {- with(this) {- //element("debug").innerHTML=show_props(event,"event");- var inp=surface.typed;- //debug('"'+inp.value+'"');- var s=inp.value;- var ws=s.split(" ");- if(ws.length>1 || event.keyCode==13) {- if(ws[0]!=words.filtered) filter_completions(ws[0],true);- if(words.count==1) add_word(words.theword);- else if(elem(ws[0],words.completions)) add_word(ws[0]);- else if(words.theword.length>ws[0].length) inp.value=words.theword;- }- else if(s!=words.filtered) filter_completions(s,true)- }-}--Minibar.prototype.generate_random=function() {- var t=this;- function show_random(random) {- t.clear_all1();- t.add_words(random[0].text);- }- - function lin_random(abs) {- t.server.linearize(abs[0].tree,t.current.from,show_random);- }- t.server.get_random(lin_random);-}--Minibar.prototype.add_words=function(s) {- with(this) {- var ws=s.split(" ");- for(var i=0;i<ws.length;i++)- add_word1(ws[i]+" ");- get_completions();- }- //added for quiz- document.answer.answer_text.value += s+" "; -}--Minibar.prototype.word=function(s) { - var t=this;- function click_word() {- if(t.surface.typed) t.surface.typed.value="";- t.add_word(s);- }- return button(s,click_word);-}--Minibar.prototype.add_word=function(s) {- with(this) {- add_word1(s+" ");- if(surface.typed) {- var s2;- if(hasPrefix(s2=surface.typed.value,s)) {- s2=s2.substr(s.length);- while(s2.length>0 && s2[0]==" ") s2=s2.substr(1);- surface.typed.value=s2;- }- else surface.typed.value="";- }- get_completions();- }- - //added for quiz- document.answer.answer_text.value += s+" ";-}--Minibar.prototype.add_word1=function(s) {- with(this) {- previous={ input: current.input, previous: previous };- current.input+=s;- var w=span_class("word",text(s));- if(surface.typed) surface.insertBefore(w,surface.typed);- else surface.appendChild(w);- }-}--Minibar.prototype.delete_last=function() {- with(this) {- if(surface.typed && surface.typed.value!="")- surface.typed.value="";- else if(previous) {- current.input=previous.input;- previous=previous.previous;- if(surface.typed) {- surface.removeChild(surface.typed.previousSibling);- surface.typed.focus();- }- else surface.removeChild(surface.lastChild);- translations.innerHTML="";- - //added for quiz (to update the user answer area)- var last_answer= document.answer.answer_text.value ;- document.answer.answer_text.value = remove_last(last_answer);- - get_completions();- }- }-}-- //added for quiz- function remove_last(txt){- var str = remove_unwanted_characters(txt);- var ls= str.lastIndexOf(" ");- if (ls > -1)- return str.substring(0,ls ) + " ";- else- return "";- }--Minibar.prototype.tdt=function(tree_btn,txt) {- with(this) {- return options.show_trees ? tda([tree_btn,txt]) : td(txt);- }-}--Minibar.prototype.show_translations=function(translationResults) {- with(this) {- var trans=translations;- //var to=target_lang(); // wrong- var to=to_menu.value;- var cnt=translationResults.length;- //trans.translations=translations;- trans.single_translation=[];- trans.innerHTML="";- /*- trans.appendChild(wrap("h3",text(cnt<1 ? "No translations?" :- cnt>1 ? ""+cnt+" translations:":- "One translation:")));- */- for(p=0;p<cnt;p++) {- var tra=translationResults[p];- if (tra.translations != null) {- for (q = 0; q < tra.translations.length; q++) {- var t = tra.translations[q];- var lin=t.linearizations;- var tbody=empty("tbody");- if(options.show_abstract && t.tree)- tbody.appendChild(tr([th(text("Abstract: ")),- tdt(abstree_button(t.tree),text(" "+t.tree))]));- for(var i=0;i<lin.length;i++) - if(to=="All" || lin[i].to==to)- tbody.appendChild(tr([th(text(langpart(lin[i].to,grammar.name)+": ")),- tdt(parsetree_button(t.tree,lin[i].to),- text(lin[i].text))]));- trans.appendChild(wrap("table",tbody));- }- }- else if(tra.typeErrors) {- var errs=tra.typeErrors;- for(var i=0;i<errs.length;i++)- trans.appendChild(wrap("pre",text(errs[i].msg)))- }- }- }-}--Minibar.prototype.show_groupedtranslations=function(translationsResult) {- with(this) {- var trans=translations;- var to=target_lang();- //var to=to_menu.value // wrong- var cnt=translationsResult.length;- //trans.translations=translationsResult;- trans.single_translation=[];- trans.innerHTML="";- for(p=0;p<cnt;p++) {- var t=translationsResult[p];- if(to=="All" || t.to==to) {- var lin=t.linearizations;- var tbody=empty("tbody");- if(to=="All") tbody.appendChild(tr([th(text(t.to+":"))]));- for(var i=0;i<lin.length;i++) {- if(to!="All") trans.single_translation[i]=lin[i].text;- tbody.appendChild(tr([td(text(lin[i].text))]));- if (lin.length > 1) tbody.appendChild(tr([td(text(lin[i].tree))]));- }- trans.appendChild(wrap("table",tbody));- }- }- }-}--Minibar.prototype.append_extra_buttons=function(extra,options) {- with(this) {- if(options.try_google)- extra.appendChild(button("Try Google Translate",bind(try_google,this)));- if(options.feedback_url)- appendChildren(extra,[text(" "),button("Feedback",bind(open_feedback,this))]);- }-}--Minibar.prototype.try_google=function() {- with(this) {- var to=target_lang();- var s=current.input;- if(surface.typed) s+=surface.typed.value;- var url="http://translate.google.com/?sl="- +langpart(current.from,grammar.name);- if(to!="All") url+="&tl="+to;- url+="&q="+encodeURIComponent(s);- window.open(url);- }-}--Minibar.prototype.open_help=function() {- with(this) open_popup(options.help_url,"help");-}--Minibar.prototype.open_feedback=function() {- with(this) {- // make the minibar state easily accessible from the feedback page:- minibar.state={grammar:grammar,current:current,to:to_menu.value,- translations:translations};- open_popup(options.feedback_url,'feedback');- }-}--function update_language_menu(menu,grammar) {- // Replace the options in the menu with the languages in the grammar- var lang=grammar.languages;- menu.innerHTML="";- - for(var i=0; i<lang.length; i++) {- var ln=lang[i].name;- if(!hasPrefix(ln,"Disamb")) {- var lp=langpart(ln,grammar.name);- menu.appendChild(option(lp,ln));- }- }-}--function set_initial_language(options,menu,grammar) {- if(grammar.userLanguage) menu.value=grammar.userLanguage;- else if(options.default_source_language) {- for(var i=0;i<menu.options.length;i++) {- var o=menu.options[i].value;- var l=langpart(o,grammar.name);- if(l==options.default_source_language) menu.value=o;- }- }-}--function langpart(conc,abs) { // langpart("FoodsEng","Foods") == "Eng"- return hasPrefix(conc,abs) ? conc.substr(abs.length) : conc;-}--function abstree_button(abs) {- var i=img(tree_icon);- i.setAttribute("onclick","toggle_img(this)");- i.other=server.current_grammar_url+"?command=abstrtree&tree="+encodeURIComponent(abs);- return i;-}--function parsetree_button(abs,lang) {- var i=img(tree_icon);- i.setAttribute("onclick","toggle_img(this)");- i.other=server.current_grammar_url- +"?command=parsetree&from="+lang+"&tree="+encodeURIComponent(abs);- return i;-}--function toggle_img(i) {- var tmp=i.src;- i.src=i.other;- i.other=tmp;-}--function open_popup(url,target) {- var w=window.open(url,target,'toolbar=no,location=no,status=no,menubar=no');- w.focus();-}--function setField(form,name,value) {- form[name].value=value;- var el=element(name);- if(el) el.innerHTML=value;-}--function opener_element(id) { with(window.opener) return element(id); }--// This function is called from feedback.html-function prefill_feedback_form() {- var state=opener_element("minibar").state;- var trans=state.translations;- var gn=state.grammar.name- var to=langpart(state.to,gn);-- var form=document.forms.namedItem("feedback");- setField(form,"grammar",gn);- setField(form,"from",langpart(state.current.from,gn));- setField(form,"input",state.current.input);- setField(form,"to",to);- if(to=="All") element("translation_box").style.display="none";- else setField(form,"translation",trans.single_translation.join(" / "));- - // Browser info:- form["inner_size"].value=window.innerWidth+"×"+window.innerHeight;- form["outer_size"].value=window.outerWidth+"×"+window.outerHeight;- form["screen_size"].value=screen.width+"×"+screen.height;- form["available_screen_size"].value=screen.availWidth+"×"+screen.availHeight;- form["color_depth"].value=screen.colorDepth;- form["pixel_depth"].value=screen.pixelDepth;-- window.focus();-}- --/*-se.chalmers.cs.gf.gwt.TranslateApp/align-btn.png--GET /grammars/Foods.pgf?&command=abstrtree&tree=Pred+(This+Fish)+(Very+Fresh)-GET /grammars/Foods.pgf?&command=parsetree&tree=Pred+(This+Fish)+Expensive&from=FoodsAfr-GET /grammars/Foods.pgf?&command=alignment&tree=Pred+(This+Fish)+Expensive-*/
@@ -1,56 +0,0 @@--/* --- Grammar access object ------------------------------------------------ */--function pgf_online(options) {- var server = {- // State variables (private):- grammars_url: "/grammars/",- grammar_list: null,- current_grammar_url: null,- - // Methods:- switch_grammar: function(grammar_url,cont) {- this.current_grammar_url=this.grammars_url+grammar_url;- if(cont) cont();- },- get_grammarlist: function(cont) {- http_get_json(this.grammars_url+"grammars.cgi",cont);- },- pgf_call: function(cmd,args,cont) {- var url=this.current_grammar_url+"?command="+cmd;- for(var arg in args) url+="&"+arg+"="+encodeURIComponent(args[arg]);- http_get_json(url,cont);- },- - get_languages: function(cont) {- this.pgf_call("grammar",{},cont);- },- - get_random: function(cont) {- this.pgf_call("random",{random:Math.random()},cont);- },- linearize: function(tree,to,cont) {- this.pgf_call("linearize",{tree:tree,to:to},cont);- },- linearizeAll: function(tree,to,cont) {- this.pgf_call("linearizeAll",{tree:tree,to:to},cont);- },- complete: function(from,input,cont) {- this.pgf_call("complete",{from:from,input:input},cont);- },- parse: function(from,input,cont) {- this.pgf_call("parse",{from:from,input:input},cont);- },- translate: function(from,input,cont) {- this.pgf_call("translate",{from:from,input:input},cont);- },- translategroup: function(from,input,cont) {- this.pgf_call("translategroup",{from:from,input:input},cont);- }- - };- for(var o in options) server[o]=options[o];- if(server.grammar_list && server.grammar_list.length>0)- server.switch_grammar(server.grammar_list[0]);- return server;-}
@@ -1,49 +0,0 @@-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> -<html> -<head> -<title>Quiz About</title> -<link rel=stylesheet type="text/css" href="minibar_quiz.css"> - -<meta name = "viewport" content = "width = device-width"> -<meta http-equiv="Content-type" content="text/html; charset=UTF-8"> -<meta charset="UTF-8"> - -</head> - -<body> - -<h3>About GF Translation Quiz </h3> - -<p style="font-size:18px;"> - This project is actually part of my master thesis work at <a href="http://chalmers.se/en/Pages/default.aspx" >Chalmers University of Technology</a> - , in the Language Technology group under supervision of Professor <a href="http://www.cse.chalmers.se/~aarne/">Aarne Ranta.</a> The application - is an exercise generator to be used in training the lexical, morphological and syntactic aspects of human languages. - One important aspect of this application is that it is intended to be as general as possible and specially not - to be limited to any specific human language. For this purpose GF’s (The <a href="http://www.grammaticalframework.org/" >Grammatical Framework </a>) - Resource Grammar Libraries have been applied as the constructive core of the project. The application also uses the - <a href="http://code.google.com/p/grammatical-framework/wiki/GFWebServiceAPI" >GF web services API </a> - which has made it possible to apply the PGF API as Web Service, to be more precise the Quiz uses the additional API for JavaScript defined in pgf_online.js provided by the - <a href="http://www.grammaticalframework.org:41296/minibar/minibar.html"> Minibar </a> application. - The Quiz also relies on the Minibar, - in the "Easy Study Mode" of the Quiz, where word magnets from the Minibar are available to help the user construct his/her answer. -</p> -<p style="font-size:18px;"> The generated exercises are in the preliminary form of sentences - in a certain language - selected by the user - which need to be translated to another one - which is also the user's choice. - The user may choose the grammar he/she wants to train with as well. More information about how the quiz works can be found from the - <a href="quiz_help.html" >link </a> in the Quiz main page. - -</p> - -<br/> - Author: <i><b> Elnaz Abolahrar </b></i> (elnaz dot abolahrar at gmail dot com) -<br/> - Date: December, 2010 - Göteborg, Sweden -<br/> -<br/> - -<br/> -<div class="shift_left"><a href="javascript: window.close()">Close page</a></div> - -</body> - -</html>
@@ -1,45 +0,0 @@-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> -<html> -<head> -<title>Quiz Help</title> -<link rel=stylesheet type="text/css" href="minibar_quiz.css"> - -<meta name = "viewport" content = "width = device-width"> -<meta http-equiv="Content-type" content="text/html; charset=UTF-8"> -<meta charset="UTF-8"> - -</head> - -<body> -<a href="quiz_about.html" >About GF Translation Quiz </a> - -<h3>• How the Quiz works? </h3> - -<p style="font-size:18px;"> - <b>Hint:</b> You will find the Hint button very handy in all quiz modes. In fact it works very much similar to the famous <a href="http://en.wikipedia.org/wiki/Mastermind_(board_game)">Mastermind</a> game. Words in green stand for correct words in their correct place in the sentence, and yellow words mean these words are correct words and are part of the right answer but they are misplaced, while red words stand for words which do not exist in the right answer and are either misspelled or totally wrong lexically or grammatically. -<br/><br/> - <b>Check Answer:</b> You can check whether your answer is right by either clicking on this button or pressing the Enter/Return key of your keyboard. (Exception: In the "Easy Study Mode" you cannot use the Enter/Return key for checking your answer, because it has another functionality which is adding typed words to your answer.) Please note that by checking your answer you also submit it, and for each question you have only one submission chance to increase your score - further submissions don't have any impact on your score. Use the Hint if you are not sure and of course if it is available. Also note that Check Answer moves you automatically to the next question if your answer is right. -<br/><br/> - <b>History:</b> At the end of the quiz, either if you end it manually by pressing the "End" button or when the quiz ends itself e.g. when you pass the quiz or at the end of an exam, you will get a "Show Quiz History" button by which you may review and print the whole questions together with your answers and the programs' feedback. -</p> -<hr> - -<h3>• How different are different Quiz Modes? </h3> - -<p style="font-size:18px;"> <b>Easy Study Mode: </b> -In this mode word magnets are available to help you; you can type and/or click on them freely to construct your answer. Use "⌫" (Delete last) <!--img border="0" src="Delete_button.jpg" alt="⌫" width="30" height="17" /--> and "Clear" buttons to delete the last word or all of your answer in case required. Theses words come from the grammar you have chosen, and therefore it keeps you from mistyping words and even making grammatically wrong sentences. Also you have unlimited Hint which is automatically updated as you modify your answer. You can also go to one previous question at a time and of course check your answer's correctness. -<br/><br/><b>Medium Study Mode: </b> -In this mode you can use the Hint button for a maximum of 3 times for each question, and you have the possibility of going to one previous question at a time as well as checking your answer's correctness. -<br/><br/><b>Hard Study Mode: </b> -In this mode you can use the Hint button only once for each question, and you may not use the Previous question button however you may check your answer's correctness. -<br/><br/><b>Exam Mode: </b> -In this mode you cannot use the Hint, Previous question or Check answer buttons, and you will not see your score until the end of the exam. -</p> - -<br/> -<div class="shift_left"><a href="javascript: window.close()">Close page</a></div> - -</body> - -</html> -
@@ -1,62 +0,0 @@-// pre_start: runs on load time before evrything else to prepare the quiz - -function pre_start() -{ - hide_element('history_part'); - hide_element('toggle_show'); - - default_values(); - - var quiz_mode=empty_id("select","quiz_mode"); - - //adds the "Quiz Mode" and "Restart Quiz" and "End Quiz" and "Start Quiz" - appendChildren(minibar.quizbar, - [text(" Quiz Mode: "), quiz_mode, - button("Restart Quiz","restart_quiz()","R"), - button("End Quiz","end_quiz(true)","E"), - button("Start Quiz","start_quiz()","S")]); - - - //adds the "Next Question" and "Previous Question" and "Hint" and "Check Answer" buttons - var buttons_bar=element("buttons_bar"); - appendChildren(buttons_bar, - [button("< Previous Question","previous_question_quiz()","B", "previous_question"), - button("Next Question >","generate_question()","N", "next_question"), - button("Hint","show_hint()","H", "hint"), - submit_button("Check Answer", "check_answer")]); - - disable_all(); - - //hide the minibar word magnets - hide_element('minibar_contin'); - - //hide the delete and clear buttons - hide_element('minibar_buttons'); - - mode_options(quiz_mode); -} - - -function mode_options(quiz_mode) - { - var opt=empty("option"); - opt.setAttribute("value","Easy Study Mode"); - opt.innerHTML="Easy Study Mode"; - quiz_mode.appendChild(opt); - - var opt=empty("option"); - opt.setAttribute("value","Medium Study Mode"); - opt.innerHTML="Medium Study Mode"; - quiz_mode.appendChild(opt); - - var opt=empty("option"); - opt.setAttribute("value","Hard Study Mode"); - opt.innerHTML="Hard Study Mode"; - quiz_mode.appendChild(opt); - - var opt=empty("option"); - opt.setAttribute("value","Exam Mode"); - opt.innerHTML="Exam Mode"; - quiz_mode.appendChild(opt); - } -
@@ -1,247 +0,0 @@- -function hide_element(elem_id) -{ - document.getElementById(elem_id).style.display="none"; -} - -function show_element(elem_id) -{ - document.getElementById(elem_id).style.display=""; -} - -function toggle_info() -{ - if ( info_hidden == true ) - { - show_element("info"); - hide_element("toggle_show"); - show_element("toggle_hide"); - info_hidden = false; - } - else - { - hide_element("info"); - show_element("toggle_show"); - hide_element("toggle_hide"); - info_hidden = true; - } -} - -function show_word_magnets() -{ - if ( words_hidden == true ) - { - show_element("words"); - words_hidden= false; - var buttons_bar=element("buttons_bar"); - buttons_bar.removeChild(buttons_bar.lastChild); - } -} - -function hide_word_magnets() -{ - if ( words_hidden == false ) - { - hide_element("words"); - words_hidden= true; - - //add "Show magnets" button - var buttons_bar=element("buttons_bar"); - appendChildren(buttons_bar, - [ button("Show Magnets","show_word_magnets()","M", "show_magnets")]); - } -} - -function popUp(newPage, pageName) -{ - window.open(newPage, pageName, "dependent = 1, scrollbars=1, location=1, statusbar=1, width=540, height=650, left = 10, top = 20"); -} - - -function disable_all() -{ - //disables the "Hint", "Check Answer", "Next Question" and "Previous Question" buttons + user answer area - document.getElementById('check_answer').disabled = true; - document.getElementById('next_question').disabled = true; - document.getElementById('previous_question').disabled = true; - document.getElementById('hint').disabled = true; - document.getElementById('user_answer').disabled = true; -} - -function set_mode() -{ - //disable the grammar - To - From languages, and mode menubar - document.getElementById('grammar_menu').disabled = true; - document.getElementById('from_menu').disabled = true; - document.getElementById('to_menu').disabled = true; - document.getElementById('quiz_mode').disabled = true; - - - selected_mode = element("quiz_mode").value; - - //sets the Quiz mode displayed - document.getElementById('mode').value = selected_mode; - -/*-------------------------------------- Modes Settings --------------------------------------*/ - switch (selected_mode) - { - case "Easy Study Mode": - have_minibar = true; - have_prevQuestion = true; - have_checkAns = true; - max_hint_times = 100; - break; - - case "Medium Study Mode": - have_minibar = false; - have_prevQuestion = true; - have_checkAns = true; - max_hint_times = 3; - break; - - case "Hard Study Mode": - have_minibar = false; - have_prevQuestion = false; - have_checkAns = true; - max_hint_times = 1; - break; - - case "Exam Mode": - have_minibar = false; - have_prevQuestion = false; - have_checkAns = false; - max_hint_times = 0; - break; - } -} - -function reset_mode() -{ - //enable the grammar - To - From languages, and mode menubar - document.getElementById('grammar_menu').disabled = false; - document.getElementById('from_menu').disabled = false; - document.getElementById('to_menu').disabled = false; - document.getElementById('quiz_mode').disabled = false; - - //clears the Quiz mode displayed - document.getElementById('mode').value = ""; -} - -function remove_minibar() -{ - if (have_minibar && is_ended == false ) - { - //hide the minibar word magnets - hide_element("minibar_contin"); - - //hide the delete and clear buttons - hide_element("minibar_buttons"); - } -} - -function remove_unwanted_characters(txt) -{ - //removes digits, special characters and extra spaces from user's answer - txt = txt.replace(/[\u0021-\u0026 \u0028-\u0040 \u005b-\u0060 \u007b-\u007e]+/g,' ').replace(/^\s+|\s+$/g,'').replace(/\s+/g,' '); - - //changes the first character to lowercase - txt= txt.replace(txt.charAt(0),txt.charAt(0).toLowerCase()); - - return txt; -} - -function split_to_words(str) -{ - if (!(str == "" || str == null)) - str = str.split(" "); - else - str = ""; - - return str; -} - -function string_matching(serv_answer,use_answer) -{ - var result = new Array(); - - //for empty answers - if ( use_answer== "" || use_answer== null) - result= ""; - else - { - var min_length = Math.min(serv_answer.length, use_answer.length); - - var i=0; - for (i= 0; i < min_length; i++) - { - if (serv_answer[i] == use_answer[i]) - result[i] = 1; - else - result[i] = 0; - } - //for answers with extra words (more than the number of words in the right answer) - while ( i < use_answer.length) - { - result[i] = 0; - i++; - } - } - - return result; -} - -function sum_all(arr) { - var s = 0; - for (var i = 0; i < arr.length; i++) - { - s += arr[i]; - } - return s; -} - -function find_closest(all_ans) -{ - var best_match = new Array(); - var comp = new Array(); - var server_answer2 = new Array(); - var max=0; - var k = 0; - for (k= 0; k < all_ans.length; k++) - { - server_answer = remove_unwanted_characters(all_ans[k]); - server_answer2 = split_to_words(server_answer); - - comp = string_matching(server_answer2, user_answer_splited); - var sum = sum_all(comp); - if (sum >= max) - { - best_match = server_answer2; - max= sum; - } - } - return best_match; -} - -function clearing() -{ - //clears the question, answer and the explanation and hint display areas - document.question.question_text.value= "..."; - document.answer.answer_text.value = ""; - document.explanation.explanation_text.value= ""; - document.getElementById("hint_txt").innerHTML = ""; -} - -//checks that the answer field is not empty -function check_notEmpty() -{ - if (document.answer.answer_text.value == null || document.answer.answer_text.value =="") - { - alert(" You have to write something first!"); - //sets the focus on the answer area - document.answer.answer_text.focus(); - - return false; - } - else - return true; -}
@@ -1,285 +0,0 @@-/* --- Accessing document elements ------------------------------------------ */--function element(id) {- return document.getElementById(id);-}--/* --- JavaScript tricks ---------------------------------------------------- */--// To be able to object methods that refer to "this" as callbacks-// See section 3.3 of https://github.com/spencertipping/js-in-ten-minutes/raw/master/js-in-ten-minutes.pdf-function bind(f, this_value) {- return function () {return f.apply (this_value, arguments)};-};--/* --- JSONP ---------------------------------------------------------------- */--// Inspired by the function jsonp from -// http://www.west-wind.com/Weblog/posts/107136.aspx-// See also http://niryariv.wordpress.com/2009/05/05/jsonp-quickly/-// http://en.wikipedia.org/wiki/JSON#JSONP-function jsonp(url,callback)-{ - if (url.indexOf("?") > -1)- url += "&jsonp=" - else- url += "?jsonp=" - url += callback;- //url += "&" + new Date().getTime().toString(); // prevent caching - - var script = empty("script"); - script.setAttribute("src",url);- script.setAttribute("type","text/javascript"); - document.body.appendChild(script);-}--var json = {next:0};--// Like jsonp, but instead of passing the name of the ballback function, you -// pass the callback function directly, making it possible to use anonymous-// functions.-function jsonpf(url,callback)-{- var name="callback"+(json.next++);- json[name]=function(x) { delete json[name]; callback(x); }- jsonp(url,"json."+name);-}--/* --- AJAX ----------------------------------------------------------------- */--function GetXmlHttpObject(handler)-{ - var objXMLHttp=null- if (window.XMLHttpRequest)- {- objXMLHttp=new XMLHttpRequest()- }- else if (window.ActiveXObject)- {- objXMLHttp=new ActiveXObject("Microsoft.XMLHTTP")- }- return objXMLHttp-}--function ajax_http_get(url,callback) {- var http=GetXmlHttpObject()- if (http==null) {- alert ("Browser does not support HTTP Request")- return- } - var statechange=function() {- if (http.readyState==4 || http.readyState=="complete") {- if(http.status==200) callback(http.responseText);- else alert("Request for "+url+" failed: "- +http.status+" "+http.statusText);- }- }- http.onreadystatechange=statechange;- http.open("GET",url,true)- http.send(null)- //dump("http get "+url+"\n")- return http-}--// JSON via AJAX-function ajax_http_get_json(url,cont) {- ajax_http_get(url,function(txt) { cont(eval("("+txt+")")); });-}--function sameOrigin(url) {- return hasPrefix(url,location.protocol+"//"+location.host+"/");-}--// Use AJAX when possible, fallback to JSONP-function http_get_json(url,cont) {- if(sameOrigin(url)) ajax_http_get_json(url,cont);- else jsonpf(url,cont);-}---/* --- HTML construction ---------------------------------------------------- */-function text(s) { return document.createTextNode(s); }--function node(tag,as,ds) {- var n=document.createElement(tag);- for(var a in as) n.setAttribute(a,as[a]);- for(var i in ds) n.appendChild(ds[i]);- return n;-}--function empty(tag,name,value) {- var el=node(tag,{},[])- if(name && value) el.setAttribute(name,value);- return el;-}--function empty_id(tag,id) { return empty(tag,"id",id); }-function empty_class(tag,cls) { return empty(tag,"class",cls); }--function div_id(id) { return empty_id("div",id); }-function span_id(id) { return empty_id("span",id); }--function wrap(tag,contents) { return node(tag,{},[contents]); }--function wrap_class(tag,cls,contents) {- var el=empty_class(tag,cls);- if(contents) el.appendChild(contents);- return el;-}--function span_class(cls,contents) { return wrap_class("span",cls,contents); }-function div_class(cls,contents) { return wrap_class("div",cls,contents); }--function p(contents) { return wrap("p",contents); }-function dt(contents) { return wrap("dt",contents); }-function li(contents) { return wrap("li",contents); }--function th(contents) { return wrap("th",contents); }-function td(contents) { return wrap("td",contents); }--function tr(cells) { return node("tr",{},cells); }--//modified for quiz (id added)-function button(label,action,key ,id) {- var el=node("input",{"type":"button","value":label},[]);- if(typeof action=="string") el.setAttribute("onclick",action);- else el.onclick=action;- if(key) el.setAttribute("accesskey",key);- if(id) el.setAttribute("id",id);- return el;-}--//added for quiz-function submit_button(label, id) {- var el=empty("input","type","submit");- el.setAttribute("value",label);- if(id) el.setAttribute("id", id);- return el;-}--function option(label,value) {- return node("option",{"value":value},[text(label)]);-}--function appendChildren(el,ds) {- for(var i in ds) el.appendChild(ds[i]);- return el;-}--function insertFirst(parent,child) {- parent.insertBefore(child,parent.firstChild);-}--function tda(cs) { return node("td",{},cs); }--function img(src) { return empty("img","src",src); }--/* --- Debug ---------------------------------------------------------------- */--function debug(s) {- var d=element("debug");- if(d) d.appendChild(text(s+"\n"))-}--function show_props(obj, objName) {- var result = "";- for (var i in obj) {- result += objName + "." + i + " = " + obj[i] + "<br>";- }- return result;-}--function field_names(obj) {- var result = "";- for (var i in obj) {- result += " " + i;- }- return result;-}--/* --- Data manipulation ---------------------------------------------------- */-function swap(a,i,j) { // Note: this doesn't work on strings.- var tmp=a[i];- a[i]=a[j];- a[j]=tmp;- return a;-}--function sort(a) {-// https://developer.mozilla.org/en/Core_JavaScript_1.5_Reference/Global_Objects/Array/sort- return a.sort();- /* // Note: this doesn't work on strings.- for(var i=0;i<a.length-1;i++) {- var min=i;- for(var j=i+1;j<a.length;j++)- if(a[j]<a[min]) min=j;- if(min!=i) swap(a,i,min);- }- return a;- */-}--function filter(p,xs) {- var ys=[];- for(var i=0;i<xs.length;i++)- if(p(xs[i])) ys[ys.length]=xs[i];- return ys;-}--function implode(cs) { // array of strings to string- /*- var s="";- for(var i=0;i<cs.length;i++)- s+=cs[i];- return s;- */- return cs.join("");-}--function hasPrefix(s,pre) { return s.substr(0,pre.length)==pre; }--function commonPrefix(s1,s2) {- for(var i=0;i<s1.length && i<s2.length && s1[i]==s2[i];i++);- return s1.substr(0,i);-}--/*-function all(p,xs) {- for(var i=0;i<xs.length;i++)- if(!p(xs[i])) return false;- return true;-}-*/--function map(f,xs) {- var ys=[];- for(var i=0;i<xs.length;i++) ys[i]=f(xs[i]);- return ys;-}--// map in continuation passing style -function mapc(f,xs,cont) { mapc_from(f,xs,0,[],cont); }--function mapc_from(f,xs,i,ys,cont) {- if(i<xs.length)- f(xs[i],function(y){ys[i]=y;mapc_from(f,xs,i+1,ys,cont)});- else- cont(ys);-}--function overlaps(as,bs) {- for(var i=0;i<as.length;i++)- if(elem(as[i],bs)) return true;- return false;-}--function elem(a,as) {- for(var i=0;i<as.length;i++)- if(a==as[i]) return true;- return false;-}--function shuffle(a) {- for(i=0;i<a.length;i++) swap(a,i,Math.floor(Math.random()*a.length))- return a;-}
@@ -1,164 +0,0 @@-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> -<html> -<head> -<title>GF Translation Quiz</title> - -<link rel=stylesheet type="text/css" href="minibar_quiz.css"> - -<meta name = "viewport" content = "width = device-width"> -<meta http-equiv="Content-type" content="text/html;charset=UTF-8"> -<meta charset="UTF-8"> - -<script type="text/JavaScript" src="support.js"></script> -<script type="text/JavaScript" src="minibar_quiz.js"></script> -<script type="text/JavaScript" src="pgf_online.js"></script> -<script type="text/JavaScript" src="quiz_support.js"></script> -<script type="text/javascript" src="translation_quiz.js"></script> -<script type="text/JavaScript" src="quiz_pre_start.js"></script> - -</head> - -<body> - -<div id = "info" > -<a href="javascript:popUp('quiz_about.html', 'about')">About GF Translation Quiz</a> -<h2 style=" padding-left: 35px;"><i> Welcome to GF Translation Quiz </i></h2> - -<p style="font-size:20px;"> - To start the quiz choose a grammar, From and To languages - <br/> as well as a quiz mode, then press the "Start Quiz" button. - <br/> <b>Note:</b> You may not change these settings in the middle of - <br/> a quiz. - The quiz is over when you have done at least - <span style="color:#2E8B57;"><b><script type="text/javascript"> document.write(min_no_questions); </script></b></span> - <br/>examples with a minimum success of - <span style="color:#2E8B57;"><b><script type="text/javascript"> document.write(pass_percentage * 100); </script> % </b></span> - . However <br/> you can restart or quit the quiz - at any time by clicking <br/>on the "Restart Quiz" or "End Quiz" buttons. -</p> - -<a style="font-size:18px;" href="javascript:popUp('quiz_help.html', 'help')">Click here to learn more about how the Quiz works.</a> -<br/> - -</div> - -<div id = "toggle_hide"; class="shift_left"; ><a href="javascript: toggle_info()">Hide Information</a></div> -<div id = "toggle_show"; class="shift_left"; ><a href="javascript: toggle_info()">Show Information</a></div> - -<hr noshade size=0 /> - -<div id = "minibar1" class="bold"> -</div> - -<hr noshade size=0 /> - -<table frame="void" cellpadding="5" > - <tr> - <td><b>Quiz Question:</b></td> - </tr> - <tr> - <td> - <form name="question"> - <textarea class="quest" name="question_text" wrap="virtual" readonly="true"> - </textarea> - </form> - </td> - </tr> -</table> - -<form name="answer" onsubmit="check_answer_quiz(); return false;"> - <fieldset> - - <legend><b>Your Answer: </b></legend> - <div id = "minibar_buttons" class="shift_left";></div> - <div id = "minibar_contin"></div> - <table cellpadding="2"> - <tr> - <td> - <input class="answer1" type="text" id="user_answer" name="answer_text" value="" /> - </td> - </tr> - <tr> - <td> - <div id="hint_txt" class="hint"> - </td> - </tr> - - <tr> - <td> - <div id = "buttons_bar"></div> - </td> - </tr> - <tr> - <td> - <div id = "history_bar"></div> - </td> - </tr> - </table> - - </fieldset> -</form> - - -<table frame="void" cellpadding="5" > - <tr> - <td><b>Explanation:</b></td> - </tr> - <tr> - <td> - <form name="explanation"> - <textarea class="explain" name="explanation_text" wrap="virtual" readonly="true"> - </textarea> - </form> - </td> - </tr> -</table> - -<table cellpadding="1" cellspacing="10"> - <tr> - <td><b>Current Quiz Mode:</b></td> - <td><b>Answered Questions</b></td> - <td><b>Your Score</b></td> - </tr> - <tr> - <td><input type="text" id="mode" style="border: 0; text-align:left; color:#CD5C5C; background-color:#ccc;" class="number" size="18" readonly="true"/></td> - <td><input type="text" id="counter_display" class="number" size="4" readonly="true" value="0" /></td> - <td><input type="text" id="score_display" style="color:#2E8B57" class="number" size="3" readonly="true" value="0" /></td> - </tr> -</table> - -<div id="history_part"> -</div> - -<script type="text/javascript"> - - var online_options={ - grammars_url: "http://www.grammaticalframework.org/grammars/" - //grammars_url: "http://tournesol.cs.chalmers.se:41296/grammars", - //grammars_url: "http://localhost:41296/grammars", - //grammar_list: ["Foods.pgf"], // leave undefined to get list from server - } - - if(/^\?\/tmp\//.test(location.search)) { - online_options.grammars_url=location.search.substr(1); - } - - var server=pgf_online(online_options); - - var minibar_options= { - show_abstract: false, - show_trees: false, - show_grouped_translations: false, - default_source_language: "Eng", - try_google: false - } - - var minibar=new Minibar(server,minibar_options,"minibar1"); - - pre_start(); - -</script> - -</body> - -</html>
@@ -1,764 +0,0 @@-// translation_quiz.js, assumes that quiz_support.js has also been loaded - -/*-------------------------------------- Configuration Variables --------------------------------------*/ - -var pass_percentage = 0.75; -var min_no_questions = 10; -var exam_quesNo = 10; // sets the number of questions appearing in an exam -var max_answer_times = 1; // the max limit for the user to increase his/her score - - -/*-------------------------------------- other Variables --------------------------------------*/ - -var grammar; -var question_lang; -var answer_lang; - -//saves the random tree generated by the server in generate_question function to be used by the check_answer -var rand_tree; - -var counter; -var score; -var confirmed_check = new Boolean(true); -var prev_pressed = new Boolean(); - -var prev_question; -var prev_explanation; -var prev_answer; -var prev_hint; -var current_question; -var current_answer; -var current_explanation= ""; -var current_hint; - -//for history -var quiz_history = []; -var history_shown= new Boolean(); -var index =0; - -//for check answer -var answer_was_right= new Boolean(); -var raw_user_answer; -var user_answer; -var user_answer_splited; -var server_answer; -var all_answers = []; -var parsed_trees = 0; -var words_hidden = new Boolean(); - -var answer_times ; -var hint_times ; -var hint_pressed = new Boolean(); -var restart_active = new Boolean(); -var is_ended = new Boolean(); -var info_hidden = new Boolean(); - -//modes variables -var have_minibar = new Boolean(); -var have_prevQuestion = new Boolean(); -var have_checkAns = new Boolean(); -var max_hint_times; -var selected_mode; - -/*-------------------------------------- Functions --------------------------------------*/ - - -function default_values() -{ - //resets the question, answer and the explanation and hint display areas - document.question.question_text.value= "Quiz questions will be displayed here."; - document.answer.answer_text.value = " "; - document.explanation.explanation_text.value= "Explanations are displayed here."; - document.getElementById("hint_txt").innerHTML = ""; - - //resets some flags - prev_pressed = false; - is_ended = false; //refering to the End button or end o quiz by score or end of exam - restart_active = false; //refering to the Restart button - hint_pressed = false; - answer_was_right= false; - history_shown= false; - - //resets the counter and score displays and some variables - answer_times = 1; - counter = 0; - score = 0; - hint_times =0; - document.getElementById('counter_display').value = counter; - document.getElementById('score_display').value = score; - - //resets the variables for keeping the history - quiz_history = []; - index =0; - var history=element("history_part"); - history.innerHTML =""; - - //resets the variables for keeping the parsing and linearization altenatives - parsed_trees = 0; - all_answers = []; - - //shows the normal user answer area - show_element("user_answer"); -} - -function start_quiz() -{ - //sets the grammar and From and To languages - grammar= minibar.grammar_menu.value; - question_lang= minibar.from_menu.value; - answer_lang= minibar.to_menu.value; - - //removes the start button - minibar.quizbar.removeChild(minibar.quizbar.lastChild); - - set_mode(); - - //shows the minibar area and buttons - var buttons_bar=element("buttons_bar"); - if (have_minibar) - { - //show the minibar word magnets - show_element("minibar_contin"); - - //show the delete and clear buttons - show_element("minibar_buttons"); - - //hides the normal user answer area - hide_element("user_answer"); - - //changes the "Check Answer" button to a none_submit one - buttons_bar.removeChild(buttons_bar.lastChild); - appendChildren(buttons_bar, - [ button("Check Answer","check_answer_quiz()","C", "check_answer")]); - } - else - { - //enable the user answer area - document.getElementById('user_answer').disabled = false; - - //hide the minibar word magnets - hide_element("minibar_contin"); - - //hide the delete and clear buttons - hide_element("minibar_buttons"); - - //changes the "Check Answer" button to a submit one - buttons_bar.removeChild(buttons_bar.lastChild); - appendChildren(buttons_bar, - [ submit_button("Check Answer", "check_answer")]); - } - - //conditionally enbles the "Hint", "Check Answer", "Next Question" and "Previous Question" buttons, and the minibar - - if (have_checkAns) - document.getElementById('check_answer').disabled = false; - else - document.getElementById('check_answer').disabled = true; - - if (have_prevQuestion) - document.getElementById('previous_question').disabled = false; - - if ( max_hint_times > 0 ) - document.getElementById('hint').disabled = false; - - document.getElementById('next_question').disabled = false; - - //generates the first quiz question - generate_question(); - - //resets the restart_active - restart_active= true ; - - //hides the information - if ( info_hidden == false ) - toggle_info(); -} - -function restart_quiz() -{ - //javascript:location.reload(true); - - if (restart_active == true) - { - var end_confirmed= new Boolean(true); - - if (!is_ended ) - end_confirmed = confirm(" Are you sure you want to quit this quiz!"); - - if (end_confirmed) - { - end_quiz(false); - - reset_mode(); - - //add the start button - appendChildren(minibar.quizbar,[ button("Start Quiz","start_quiz()","S")]); - - //removes the History button - var history_bar=element("history_bar"); - history_bar.removeChild(history_bar.lastChild); - - default_values(); - } - } -} - -function generate_question() -{ - //for the exam mode - if (selected_mode == "Exam Mode") - { - if (check_notEmpty()) - { - if (counter > 0) - { - document.getElementById('score_display').value = "?"; - - //save the current user answer for history - current_answer = document.answer.answer_text.value; - quiz_history[index][1] = current_answer; - - make_all_answers(); - } - else - exam_continue(); - } - } - else - { - if (prev_pressed == true ) - { - //changes the question, answer and the explanation back to the current one - document.question.question_text.value= current_question; - document.answer.answer_text.value = current_answer; - document.explanation.explanation_text.value= current_explanation; - document.getElementById("hint_txt").innerHTML = current_hint; - - prev_pressed = false; // to go back to normal - - //enables the "Previous Question","Hint" and "Check Answer" buttons - document.getElementById('previous_question').disabled = false; - document.getElementById('check_answer').disabled = false; - document.getElementById('hint').disabled = false; - } - else - { - // if the user clicks the "Next Question" without cheking his/her previous answer, - // asks for user's confirmation before moving to the next question - if ( answer_times == 0 ) - { - confirmed_check = confirm("Are you sure you don't want to check your answer's correctness!"); - - if ( hint_times == 0 ) - { - //saves the current answer and the explanation which is null(the answer was not checked or hinted) - current_answer = document.answer.answer_text.value; - - current_explanation = "You did not check your answer's correctness!"; - - current_hint = ""; - } - //save the current user answer for history - quiz_history[index][1] = document.answer.answer_text.value; - - //save the current explanation for history - quiz_history[index][2] = "You did not check your answer's correctness!"; - } - if (confirmed_check == true ) - { - //save the current question for the "previous question" button and history - prev_question = current_question; - - //save the current answer for the "previous question" button - prev_answer = current_answer; - - //save the current explanation and hint for the "previous question" button - prev_explanation = current_explanation; - prev_hint= current_hint; - - //clears the question, answer and the explanation and hint display areas - clearing(); - - if (have_minibar) - { - minibar.clear_all(); - - //unhides the words area and removes the "Show Magnets" button - show_word_magnets(); - } - - if (answer_was_right) //here it still contains info about the previous question - document.explanation.explanation_text.value= current_explanation; - - //resets the times user has answered to the current question - answer_times = 0; - - //resets the times user has pressed hint for the current question - hint_times = 0; - - document.getElementById('counter_display').value = counter; - //increments the counter - counter= ++ counter; - - //sends a question retrival request to the server - server.get_random(generate_question2); - } - } - } - //sets the focus on the answer area - document.answer.answer_text.focus(); -} - -function generate_question2(random_trees) -{ - //we now have a random abstract syntax tree that we need to linearize - server.pgf_call("linearizeAll",{tree:random_trees[0].tree, - to:question_lang}, generate_question3); - rand_tree= random_trees[0].tree; -} - -function generate_question3(random_texts) -{ - var no_of_lins = random_texts[0].texts.length; - - //generates a random number, to determine which linearization should be used as the question - var which= Math.floor(Math.random()* no_of_lins ); - if (which >= no_of_lins) - which = which - 1; - - //display the new quiz quetion sent by server - document.question.question_text.value= counter +". " + random_texts[0].texts[which]; - - //save the current question for the "previous question" button and history - current_question = document.question.question_text.value; - index = quiz_history.length; - quiz_history[index] = []; - quiz_history[index][0]= current_question; -} - -function check_answer_quiz() -{ - if (check_notEmpty()) - { - //resets the user confirmation for moving to next question without checking the answer - confirmed_check = true; - - //clears the explanation and Hint display area - document.explanation.explanation_text.value = ""; - document.getElementById("hint_txt").innerHTML = ""; - - //save the current user answer for the "peivious question" button and history - current_answer = document.answer.answer_text.value; - quiz_history[index][1] = current_answer; - - //increments the times the user has answered to the current question - answer_times ++; - - //resets the hint_pressed flag - hint_pressed = false; - - if ((answer_times + hint_times) <= 1) - make_all_answers(); - else - continue_checking(); - } -} - -function make_all_answers() -{ - //resets the variables for keeping the parsing and linearization altenatives - parsed_trees = 0; - all_answers = []; - - //we now need to linearize the random abstract syntax tree in order to - //find all possible correct answers then we check user's answer against these answers. - server.pgf_call("linearize",{tree:rand_tree, to:question_lang}, parse_answer); -} - -function parse_answer(right_answer) -{ - server.parse(question_lang,right_answer[0].text, parse_answer2); -} - -var trees_to_go; -function parse_answer2(parsed_answer) -{ - trees_to_go = parsed_trees = parsed_answer[0].trees.length; - var j =0; - for (j= 0; j < parsed_trees ; j++) - { - server.linearizeAll(parsed_answer[0].trees[j], answer_lang, collect_answers); - } -} - -function collect_answers(lin_answer) -{ - var next= 0; - var i=0; - for (i= 0; i < lin_answer[0].texts.length ; i++) - { - next = all_answers.length; - all_answers[next]= lin_answer[0].texts[i]; - } - - trees_to_go--; - if(trees_to_go == 0) - continue_checking(); -} - -function continue_checking() -{ - if (selected_mode == "Exam Mode") - { - check_answer_exam2(); - exam_continue(); - } - else - if (hint_pressed) - show_hint2(); - else - check_answer2(); -} - -function check_answer2() -{ - if (have_minibar) - hide_word_magnets(); - - raw_user_answer= document.answer.answer_text.value; - user_answer = remove_unwanted_characters(raw_user_answer); - answer_was_right= false; - var k = 0 ; - for (k= 0; k < all_answers.length; k++) - { - server_answer = remove_unwanted_characters(all_answers[k]); - - if ( user_answer == server_answer ) - { - if (answer_times <= max_answer_times) - { - //increments the score - score ++; - document.getElementById('score_display').value = score; - } - - document.explanation.explanation_text.value = "Yes, that was the correct answer."; - answer_was_right= true; - - break; - - } - } - - if (k >= all_answers.length) - { - document.explanation.explanation_text.value= "No, the correct answer(s) is(are): \n " - + all_answers; - document.getElementById('counter_display').value = counter; - } - - //save the current explanation for the "previous question" button and history - current_explanation = document.explanation.explanation_text.value; - quiz_history[index][2] = current_explanation; - - if ((counter >= min_no_questions) && ((score/counter) >= pass_percentage)) - { - if (answer_was_right) - document.explanation.explanation_text.value += "\nAlso, "; - else - document.explanation.explanation_text.value += "\nHowever, "; - - document.explanation.explanation_text.value += "Congratulations!!! You passed the quiz. Click \"Restart Quiz\" for a new one."; - - document.getElementById('counter_display').value = counter; - - end_quiz(false); - } - else - if (answer_was_right) - { - //goes to the next question automaticly after getting the correct answer - generate_question(); - } - - //save the current hint for the "previous question" button - current_hint = document.getElementById("hint_txt").innerHTML ; -} - -function check_answer_exam2() -{ - - raw_user_answer= document.answer.answer_text.value; - user_answer = remove_unwanted_characters(raw_user_answer); - - var k = 0 ; - for (k= 0; k < all_answers.length; k++) - { - server_answer = remove_unwanted_characters(all_answers[k]); - - if ( user_answer == server_answer ) - { - //increments the score - score ++; - - //save the current explanation for history - current_explanation = "Yes, that was the correct answer."; - quiz_history[index][2] = current_explanation; - - break; - } - } - - if (k >= all_answers.length) - { - //save the current explanation for history - current_explanation = "No, the correct answer(s) is(are): \n " + all_answers; - quiz_history[index][2] = current_explanation; - } -} - -function exam_continue() -{ - if (counter >= exam_quesNo) - exam_result(); - else - { - //clears the question and answer and the explanation and hint display areas - clearing(); - - document.getElementById('counter_display').value = counter + "/" + exam_quesNo; - //increments the counter - counter= ++ counter; - - //sends a question retrival request to the server - server.get_random(generate_question2); - } -} - -function exam_result() -{ - document.getElementById('score_display').value = score; - document.getElementById('counter_display').value = counter + "/" + exam_quesNo; - document.explanation.explanation_text.value= "That's the end of exam."; - end_quiz(false); -} - -function show_hint() -{ - if (hint_times < max_hint_times) - { - if (check_notEmpty()) - { - //clears the explanation and Hint area - document.explanation.explanation_text.value = ""; - document.getElementById("hint_txt").innerHTML = ""; - - //increments the times the user has pressed hint button - hint_times= ++ hint_times; - - //resets the user confirmation for moving to next question without checking the answer - confirmed_check = true; - - //save the current user answer for the "peivious question" button - current_answer = document.answer.answer_text.value; - - //sets the hint_pressed flag - hint_pressed = true; - - raw_user_answer= document.answer.answer_text.value; - user_answer = remove_unwanted_characters(raw_user_answer); - user_answer_splited = split_to_words(user_answer); - - if ((answer_times + hint_times) <= 1) - make_all_answers(); - else - continue_checking(); - } - } - else - { - //Error message (max_hint_times is passed) - document.explanation.explanation_text.value = "Sorry, you have already used up your allowed number of hints for this question."; - } -} - -function show_hint2() -{ - var best_answer = new Array(); - best_answer= find_closest(all_answers); - - var compared = new Array(); - compared = string_matching(best_answer, user_answer_splited); - - //preparing the Hint spans - var hint = element("hint_txt"); - hint.innerHTML = "<b>Hint: </b>"; - var max_length = Math.max(best_answer.length, user_answer_splited.length); - for (k= 0; k < max_length; k++) - { - var id = "word" + k.toString(); - var word_span= span_id(id); - hint.appendChild(word_span); - } - - var k=0; - var visited = new Array(); - for (k= 0; k < best_answer.length; k++) - { - visited[k] = 0; - } - - var i= 0; //i is used for the user_answer - var myid = ""; - while ( i < compared.length) - { - myid = "word" + i.toString(); - if (compared[i] == 0) - { - var j =0; //j is used for the server_answer - while (j < best_answer.length) - { - if (visited[j] == 0 && user_answer_splited[i] == best_answer[j] && (j >= compared.length || compared[j] == 0 )) - { - //yellow for the right word in wrong place - document.getElementById(myid).style.color="#FFFF00"; - visited[j] = 1; - break; - } - j++; - } - - if ( j >= best_answer.length) - { - //red for the totaly wrong word - document.getElementById(myid).style.color="#FF0000"; - } - } - else - { //green for the right word in right place - document.getElementById(myid).style.color="#339933"; - } - document.getElementById(myid).innerHTML = user_answer_splited[i] + " "; - i++; - } - - while ( i < best_answer.length) - { - myid = "word" + i.toString(); - document.getElementById(myid).style.color="#FF0000"; - document.getElementById(myid).innerHTML = "____ "; - i++; - } - - //save the current explanation and hint for the "previous question" button - current_explanation = document.explanation.explanation_text.value; - current_hint = document.getElementById("hint_txt").innerHTML ; -} - -function previous_question_quiz() -{ - if ( counter > 1) - { - if ( answer_times == 0 && hint_times == 0 ) - { - //sets the current answer and the explanation and hint - current_answer = document.answer.answer_text.value; - current_explanation = ""; - current_hint = ""; - } - - //disables the "Previous Question","Hint" and "Check Answer" buttons - document.getElementById('previous_question').disabled = true; - document.getElementById('check_answer').disabled = true; - document.getElementById('hint').disabled = true; - - //changes the question, answer and the explanation - document.question.question_text.value= prev_question; - document.answer.answer_text.value = prev_answer; - document.explanation.explanation_text.value= prev_explanation; - document.getElementById("hint_txt").innerHTML = prev_hint; - - prev_pressed = true; // to remember the current question, answer and explanation - } -} - -function end_quiz(confirm_needed) -{ - if (restart_active == true && is_ended == false) - { - var end= new Boolean(true); - - if (confirm_needed) - end = confirm(" Are you sure you want to quit this quiz!"); - - if (end) - { - if (have_minibar) - { - //removes the "Show Magnets" button if exists - show_word_magnets(); - //remove the minibar word magnets if there was any - remove_minibar(); - //shows the normal user answer area - show_element("user_answer"); - } - disable_all(); - is_ended = true; - - //adds a Show Quiz History button - var history_bar=element("history_bar"); - appendChildren(history_bar, - [ button("Show Quiz History","show_history()","H", "quiz_history")]); - } - } -} - -function show_history() -{ - var current_grammar = minibar.grammar.name; // minibar.grammar.name gives the grammar name without .pgf - var to_lang= langpart(minibar.to_menu.value,current_grammar); - var from_lang= langpart(minibar.from_menu.value,current_grammar); - var history=element("history_part"); - if (history_shown == false) - { - var i=0; - for (i= 0; i < quiz_history.length ; i++) - { - var question = text("Question" + " "+quiz_history[i][0] + "\n"); - history.appendChild(empty("br")); - history.appendChild(question); - history.appendChild(empty("br")); - - var answer = text("Your Answer" + ": "+ quiz_history[i][1] + "\n"); - history.appendChild(answer); - history.appendChild(empty("br")); - - var explan = text("Explanation" + ": "+ quiz_history[i][2] + "\n"); - history.appendChild(explan); - history.appendChild(empty("br")); - history.appendChild(empty("br")); - } - history_shown = true; - } - - var history_content = history.innerHTML; - - var history_window = window.open('', 'historyPopup', "dependent = 1, scrollbars=1, location=1, statusbar=1, width=540, height=650, left = 10, top = 20"); - history_window.document.writeln('<html><head><title>Quiz History</title></head><body>'); - history_window.document.writeln('<h3> Your Quiz History </h3>'); - history_window.document.write('<b> Quiz Mode: </b>'); - history_window.document.write(selected_mode+ ", "); - history_window.document.write('<b> Grammar: </b> '); - history_window.document.write(" "+ current_grammar +", "); - history_window.document.write('<b> From: </b>'); - history_window.document.write(" "+ from_lang + ", "); - history_window.document.write('<b> To: </b>'); - history_window.document.writeln(" "+ to_lang); - history_window.document.writeln('<div style="font-size:18px;">'); - history_window.document.writeln(history_content); - history_window.document.writeln('</div>'); - history_window.document.writeln('<div style="color: #2E8B57; font-size:16px; font-weight: bold;"><a href="javascript: window.print()">Print History</a></div>'); - history_window.document.writeln('<div style="padding-left: 320px; color: #2E8B57; font-size:16px; font-weight: bold;"><a href="javascript: window.close()">Close page</a></div>'); - history_window.document.writeln('</body></html>'); - history_window.document.close(); -}
@@ -38,6 +38,6 @@ the directory <CODE>numbers</CODE> to your FileMagnet uploader. </P> -<!-- html code generated by txt2tags 2.5 (http://txt2tags.sf.net) -->-<!-- cmdline: txt2tags -thtml ./demos/index-numbers.t2t -->+<!-- html code generated by txt2tags 2.4 (http://txt2tags.sf.net) -->+<!-- cmdline: txt2tags -thtml index-numbers.txt --> </BODY></HTML>
@@ -9,36 +9,25 @@ <BODY> <H1><a href="../"><IMG SRC="../doc/Logos/gf0.png" alt=""></a>Grammatical Framework Demos</H1> -<p>-<a href="http://www.grammaticalframework.org/demos/phrasebook/">Tourist+<p><a href="http://www.grammaticalframework.org/demos/phrasebook/">Tourist Phrasebook</a> -<p>-<strong>NEW</strong>-<a href="minibar/mathbar.html">Mathbar</a>+<p><a href="minibar/mathbar.html">Mathbar</a> -<p>-<strong>NEW</strong>-<a href="gfse/">GF online editor for simple multilingual grammars</a>+<p><a href="gfse/">GF online editor for simple multilingual grammars</a> (prototype)-<p>-<strong>NEW</strong>-<a href="http://www.grammaticalframework.org:41297/syllogism/syllogism.html">Online syllogism solver</a> -<p>-<strong>NEW</strong>-<a href="TransQuiz/">Translation Quiz</a>+<p><a href="http://www.grammaticalframework.org:41297/syllogism/syllogism.html">Online syllogism solver</a> +<p><a href="../src/www/TransQuiz/translation_quiz.html">Translation Quiz</a> -<P>-<A HREF="minibar/minibar.html">Minibar+<P><a href="minibar/minibar.html">Minibar online</A> | <small><a href="http://www.grammaticalframework.org/~hallgren/hs2js/test/">Minibar offline</a></small>-<P>-<A HREF="http://www.grammaticalframework.org:41296/fridge">Fridge poetry</A> <P>-<A HREF="http://www.grammaticalframework.org:41296/translate">Word-completing translator</A>+<a href="http://www.grammaticalframework.org:41296/fridge">Fridge poetry</A>+ | <a href="http://www.grammaticalframework.org:41296/translate">Word-completing translator</A> <P> <A HREF="http://www.youtube.com/watch?v=1bfaYHWS6zU">Tramdemo on YouTube</A>:
@@ -2707,3 +2707,43 @@ } ++@InProceedings{bringert-angelov-ranta:2009:EACL-DEMOS,+ author = {Bringert, Bj\"{o}rn and Angelov, Krasimir and Ranta, Aarne},+ title = {Grammatical Framework Web Service},+ booktitle = {Proceedings of the Demonstrations Session at EACL 2009},+ month = {April},+ year = 2009,+ address = {Athens, Greece},+ publisher = {Association for Computational Linguistics},+ pages = {9--12},+ url = {http://www.aclweb.org/anthology-new/E09-2003},+ annote = "An overview of how to build web services on top of PGF using the Google Web Toolkit."+}++@InProceedings{ranta-angelov-bringert:2009:EACL-DEMOS,+ author = {Ranta, Aarne and Angelov, Krasimir and Bringert, Bj\"{o}rn},+ title = {Grammar Development in {GF}},+ booktitle = {Proceedings of the Demonstrations Session at EACL 2009},+ month = {April},+ year = 2009,+ address = {Athens, Greece},+ publisher = {Association for Computational Linguistics},+ pages = {57--60},+ url = {http://www.aclweb.org/anthology/E09-2015},+ annote = "An overview of GF from the grammarian's point of view."+}++@InProceedings{ranta-angelov-hallgren:2010:Demos,+ author = {Ranta, Aarne and Angelov, Krasimir and Hallgren, Thomas},+ title = {Tools for Multilingual Grammar-Based Translation on the Web},+ booktitle = {Proceedings of the ACL 2010 System Demonstrations},+ month = {July},+ year = 2010,+ address = {Uppsala, Sweden},+ publisher = {Association for Computational Linguistics},+ pages = {66--71},+ url = {http://www.aclweb.org/anthology/P10-4012},+ annote = "An overview of GF for developers and users of translation systems."+}+
@@ -8,14 +8,37 @@ <P ALIGN="center"><CENTER><H1><a href="../"><IMG src="../doc/Logos/gf0.png"></a>Grammatical Framework Bibliography</H1> <FONT SIZE="4"> <I>Aarne Ranta</I><BR>-Tue Oct 25 21:48:04 2011+Wed Dec 14 18:13:03 2011 </FONT></CENTER> +<P></P>+<HR NOSHADE SIZE=1>+<P></P>+ <UL>+ <LI><A HREF="#toc1">Publications on GF</A>+ <LI><A HREF="#toc2">Background for GF</A>+ </UL>++<P></P>+<HR NOSHADE SIZE=1>+<P></P>+<A NAME="toc1"></A> <H2>Publications on GF</H2> <P> In reverse temporal order: </P> <P>+H. Burden and R. Heldal.+Natural Language Generation from Class Diagrams.+<I>Proceedings of the 8th International Workshop on Model-Driven Engineering, Verification and Validation (MoDeVVa 2011)</I>,+Wellington, New Zealand,+ACM,+2011.+<A HREF="http://www.grammaticalframework.org/doc/archive/a9-burden.pdf">Draft PDF</A>+<br>+<I>Using GF to verbalize platform-independent requirement specifications as a part of a software engineering tool chain.</I>+</P>+<P> C. España-Bonet, R. Enache, A. Slaski, A. Ranta, L. Màrquez, and M. Gonzàlez. Patent translation within the MOLTO project. Proceedings of the 4th Workshop on Patent Translation, @@ -25,6 +48,16 @@ <I>First steps to a hybrid GF-SMT system.</I> </P> <P>+Seyed M. Montazeri, Nivir Roy, and Gerardo Schneider. +From Contracts in Structured English to CL Specifications. +<I>5th International Workshop on Formal Languages and Analysis of Contract-Oriented Software (FLACOS'11)</I>, +volume 68 of EPTCS, pages 55-69, +Málaga, Spain, 22-23 September 2011.+<A HREF="http://dx.doi.org/10.4204/EPTCS.68.6">PDF/DOI</A>+<br>+<I>Formal analysis of contracts written in controlled English.</I>+</P>+<P> S. Virk, M. Humayoun, and A. Ranta. An Open-Source Punjabi Resource Grammar. Proceedings of RANLP-2011, Recent Advances in Natural Language Processing,@@ -35,6 +68,17 @@ <I>Punjabi syntax, building on Humayoun and Ranta 2010.</I> </P> <P>+D. Dannélls, M. Damova, R.Enache, M. Chechev.+A Framework for Improved Access to Museum Databases in the Semantic Web.+Proceedings of the Workshop on Language Technologies for Digital Humanities and Cultural Heritage,+RANLP-2011, Recent Advances in Natural Language Processing, +Hissar, Bulgaria, 12-14 September, 2011,+pp 8-15+<A HREF="http://publications.lib.chalmers.se/cpl/record/index.xsql?pubid=145395">PDF</A>+<br>+<I>Representing and verbalizing in GF of an Cultural Heritage ontology.</I> +</P>+<P> A. Ranta. Translating between Language and Logic: What Is Easy and What is Difficult? In N. Bjørner and V. Sofronie-Stokkermans (eds.),@@ -50,13 +94,41 @@ <I>"for all numbers x, x is even or x is odd" to "every number is even or odd".</I> </P> <P>-A. Ranta. <I>Grammatical Framework: Programming with Multilingual Grammars</I>, +A. Ranta. +<I>Grammatical Framework: Programming with Multilingual Grammars</I>, CSLI Publications, Stanford, 2011. <A HREF="http://www.grammaticalframework.org/gf-book/">Book web page</A> <br> <I>Meant as the standard reference and textbook on GF.</I> </P> <P>+O. Caprotti, K. Angelov, R. Enache, T. Hallgren, A. Ranta.+The MOLTO Phrasebook.+Swedish Language Technology Conference SLTC 2010.+<A HREF="http://publications.lib.chalmers.se/cpl/record/index.xsql?pubid=131251">PDF</A>+<br>+<I>Tourist Phrasebook grammar, available in 14 European languages.</I>+</P>+<P>+G. Détrez and R. Enache.+A Framework for Multilingual Applications on the Android Platform+Swedish Language Technology Conference SLTC 2010.+<A HREF="http://www.grammaticalframework.org/doc/archive/sltc10_submission_24.pdf">PDF</A>+<br>+<I>A description of the Java implementation of the GF runtime system, which makes it possible</I>+to create grammar-based applications running on an Android phone.//+</P>+<P>+Normunds Gruzitis and Guntis Barzdins.+Towards a More Natural Multilingual Controlled Language Interface to OWL,+<I>9th International Conference on Computational Semantics (IWCS)</I>,+pp. 335-339,+2011.+<A HREF="http://www.aclweb.org/anthology/W/W11/W11-0138.pdf">PDF</A>+<br>+<I>Access to ontologies in English and Latvian.</I>+</P>+<P> M. Humayoun and A. Ranta. Developing Punjabi Morphology, Corpus and Lexicon. <I>The 24th Pacific Asia conference on Language, Information and Computation (PACLIC24)</I>,@@ -65,6 +137,25 @@ <I>Yet another South-East Asian language, spoken by 88 million people.</I> </P> <P>+J. Camilleri, Gordon J. Pace, and Mike Rosner.+Playing Nomic using a Controlled Natural Language.+<I>CNL 2010, Controlled Natural Language</I>,+Marettimo,+2010.+<br>+<I>Using GF for defining the rules of a game.</I>+</P>+<P>+R. Enache and K. Angelov+Typeful Ontologies with Direct Multilingual Verbalization.+<I>CNL 2010, Controlled Natural Language</I>,+Marettimo, +2010.+<br>+<I>Investigating the benefits of using GF as a language for representing ontologies.</I>+<A HREF="http://www.grammaticalframework.org/doc/archive/cnl2010_submission_2.pdf">PDF</A>+</P>+<P> S. Virk, M. Humayoun, and A. Ranta. An Open Source Urdu Resource Grammar. <I>Proceedings of the 8th Workshop on Asian Language Resources (Coling 2010 workshop)</I>,@@ -78,8 +169,38 @@ <I>Proceedings of the ACL 2010 System Demonstrations</I>, ACM Digital Library, 2010.+<A HREF="http://www.aclweb.org/anthology-new/P/P10/P10-4012.pdf">PDF</A>+<br>+<I>An overview of GF for developers and users of translation systems.</I> </P> <P>+D. Dannélls and J. Camilleri. +Verb Morphology of Hebrew and Maltese - Towards an Open Source Type Theoretical Resource Grammar in GF.+<I>Proceedings of the Language Resources (LRs) and Human Language Technologies (HLT) for Semitic Languages Status, Updates, and Prospects, LREC-2010 Workshop</I>,+Malta, pp. 57-61.+2010.+<A HREF="http://spraakdata.gu.se/svedd/pub/lrec10.pdf">PDF</A>+<br>+<I>A study of Semitic non-concatenative morphology from the GF point of view.</I>+</P>+<P>+M. Humayoun and C. Raffalli.+MathNat - Mathematical Text in a Controlled Natural Language. +<I>Special issue: Natural Language Processing and its Applications. Journal on Research in Computing Science</I>, Volume 46. +2010.+<br>+<I>Natural language interface to a proof system, implemented in GF.</I>+</P>+<P>+D. Dannélls.+Discourse Generation from Formal Specifications Using the Grammatical Framework, GF. +<I>Special issue: Natural Language Processing and its Applications. Journal on Research in Computing Science (RCS)</I>, +volume 46. pp. 167-178,+2010.+<br>+<I>Interfacing GF with ontology, with a natural language generation perspective.</I>+</P>+<P> R. Enache, A. Ranta, and K. Angelov. An Open-Source Computational Grammar of Romanian. A. Gelbukh (ed.), <I>CiCLING-2010</I>,@@ -157,6 +278,7 @@ The GF Grammar Development Environment. System demo. Proceedings of <I>EACL-2009</I>, 2009.+<A HREF="http://www.aclweb.org/anthology-new/E/E09/E09-2015.pdf">PDF</A> <br> <I>An overview of GF from the grammarian's point of view.</I> </P>@@ -165,6 +287,7 @@ Grammatical Framework Web Service, System demo. Proceedings of <I>EACL-2009</I>, 2009.+<A HREF="http://www.aclweb.org/anthology-new/E/E09/E09-2003.pdf">PDF</A> <br> <I>An overview of how to build web services on top of PGF using the Google Web Toolkit.</I> </P>@@ -650,6 +773,7 @@ <br> <I>Concise theoretical presentation of GF, using the old notation prior to v0.9</I>. </P>+<A NAME="toc2"></A> <H2>Background for GF</H2> <P> In alphabetical order:
@@ -4,10 +4,11 @@ % NOTE: this is a txt2tags file. % Create an html file from this file using:-% txt2tags -thtml --toc gf-reference.html+% txt2tags gf-bibliography.t2t %!style:../css/style.css %!target:html+%!options(html): --toc %!postproc(html): #BR <br> %!postproc(html): <H1> <H1><a href="../"><IMG src="../doc/Logos/gf0.png"></a> @@ -15,6 +16,16 @@ In reverse temporal order: +H. Burden and R. Heldal.+Natural Language Generation from Class Diagrams.+//Proceedings of the 8th International Workshop on Model-Driven Engineering, Verification and Validation (MoDeVVa 2011)//,+Wellington, New Zealand,+ACM,+2011.+[Draft PDF http://www.grammaticalframework.org/doc/archive/a9-burden.pdf]+#BR+//Using GF to verbalize platform-independent requirement specifications as a part of a software engineering tool chain.//+ C. España-Bonet, R. Enache, A. Slaski, A. Ranta, L. Màrquez, and M. Gonzàlez. Patent translation within the MOLTO project. Proceedings of the 4th Workshop on Patent Translation, @@ -23,6 +34,15 @@ #BR //First steps to a hybrid GF-SMT system.// +Seyed M. Montazeri, Nivir Roy, and Gerardo Schneider. +From Contracts in Structured English to CL Specifications. +//5th International Workshop on Formal Languages and Analysis of Contract-Oriented Software (FLACOS'11)//, +volume 68 of EPTCS, pages 55-69, +Málaga, Spain, 22-23 September 2011.+[PDF/DOI http://dx.doi.org/10.4204/EPTCS.68.6]+#BR+//Formal analysis of contracts written in controlled English.//+ S. Virk, M. Humayoun, and A. Ranta. An Open-Source Punjabi Resource Grammar. Proceedings of RANLP-2011, Recent Advances in Natural Language Processing,@@ -32,6 +52,16 @@ #BR //Punjabi syntax, building on Humayoun and Ranta 2010.// +D. Dannélls, M. Damova, R.Enache, M. Chechev.+A Framework for Improved Access to Museum Databases in the Semantic Web.+Proceedings of the Workshop on Language Technologies for Digital Humanities and Cultural Heritage,+RANLP-2011, Recent Advances in Natural Language Processing, +Hissar, Bulgaria, 12-14 September, 2011,+pp 8-15+[PDF http://publications.lib.chalmers.se/cpl/record/index.xsql?pubid=145395]+#BR+//Representing and verbalizing in GF of an Cultural Heritage ontology.// + A. Ranta. Translating between Language and Logic: What Is Easy and What is Difficult? In N. Bjørner and V. Sofronie-Stokkermans (eds.),@@ -46,12 +76,38 @@ //to proof systems, and also exploring how to make the language richer, e.g. how to get from// //"for all numbers x, x is even or x is odd" to "every number is even or odd".// -A. Ranta. //Grammatical Framework: Programming with Multilingual Grammars//, +A. Ranta. +//Grammatical Framework: Programming with Multilingual Grammars//, CSLI Publications, Stanford, 2011. [Book web page http://www.grammaticalframework.org/gf-book/] #BR //Meant as the standard reference and textbook on GF.// +O. Caprotti, K. Angelov, R. Enache, T. Hallgren, A. Ranta.+The MOLTO Phrasebook.+Swedish Language Technology Conference SLTC 2010.+[PDF http://publications.lib.chalmers.se/cpl/record/index.xsql?pubid=131251]+#BR+//Tourist Phrasebook grammar, available in 14 European languages.//+++G. Détrez and R. Enache.+A Framework for Multilingual Applications on the Android Platform+Swedish Language Technology Conference SLTC 2010.+[PDF http://www.grammaticalframework.org/doc/archive/sltc10_submission_24.pdf]+#BR+//A description of the Java implementation of the GF runtime system, which makes it possible//+to create grammar-based applications running on an Android phone.//++Normunds Gruzitis and Guntis Barzdins.+Towards a More Natural Multilingual Controlled Language Interface to OWL,+//9th International Conference on Computational Semantics (IWCS)//,+pp. 335-339,+2011.+[PDF http://www.aclweb.org/anthology/W/W11/W11-0138.pdf]+#BR+//Access to ontologies in English and Latvian.//+ M. Humayoun and A. Ranta. Developing Punjabi Morphology, Corpus and Lexicon. //The 24th Pacific Asia conference on Language, Information and Computation (PACLIC24)//,@@ -59,6 +115,23 @@ #BR //Yet another South-East Asian language, spoken by 88 million people.// +J. Camilleri, Gordon J. Pace, and Mike Rosner.+Playing Nomic using a Controlled Natural Language.+//CNL 2010, Controlled Natural Language//,+Marettimo,+2010.+#BR+//Using GF for defining the rules of a game.//++R. Enache and K. Angelov+Typeful Ontologies with Direct Multilingual Verbalization.+//CNL 2010, Controlled Natural Language//,+Marettimo, +2010.+#BR+//Investigating the benefits of using GF as a language for representing ontologies.//+[PDF http://www.grammaticalframework.org/doc/archive/cnl2010_submission_2.pdf]+ S. Virk, M. Humayoun, and A. Ranta. An Open Source Urdu Resource Grammar. //Proceedings of the 8th Workshop on Asian Language Resources (Coling 2010 workshop)//,@@ -71,7 +144,34 @@ //Proceedings of the ACL 2010 System Demonstrations//, ACM Digital Library, 2010.+[PDF http://www.aclweb.org/anthology-new/P/P10/P10-4012.pdf]+#BR+//An overview of GF for developers and users of translation systems.// +D. Dannélls and J. Camilleri. +Verb Morphology of Hebrew and Maltese - Towards an Open Source Type Theoretical Resource Grammar in GF.+//Proceedings of the Language Resources (LRs) and Human Language Technologies (HLT) for Semitic Languages Status, Updates, and Prospects, LREC-2010 Workshop//,+Malta, pp. 57-61.+2010.+[PDF http://spraakdata.gu.se/svedd/pub/lrec10.pdf]+#BR+//A study of Semitic non-concatenative morphology from the GF point of view.//++M. Humayoun and C. Raffalli.+MathNat - Mathematical Text in a Controlled Natural Language. +//Special issue: Natural Language Processing and its Applications. Journal on Research in Computing Science//, Volume 46. +2010.+#BR+//Natural language interface to a proof system, implemented in GF.//++D. Dannélls.+Discourse Generation from Formal Specifications Using the Grammatical Framework, GF. +//Special issue: Natural Language Processing and its Applications. Journal on Research in Computing Science (RCS)//, +volume 46. pp. 167-178,+2010.+#BR+//Interfacing GF with ontology, with a natural language generation perspective.//+ R. Enache, A. Ranta, and K. Angelov. An Open-Source Computational Grammar of Romanian. A. Gelbukh (ed.), //CiCLING-2010//,@@ -141,6 +241,7 @@ The GF Grammar Development Environment. System demo. Proceedings of //EACL-2009//, 2009.+[PDF http://www.aclweb.org/anthology-new/E/E09/E09-2015.pdf] #BR //An overview of GF from the grammarian's point of view.// @@ -148,6 +249,7 @@ Grammatical Framework Web Service, System demo. Proceedings of //EACL-2009//, 2009.+[PDF http://www.aclweb.org/anthology-new/E/E09/E09-2003.pdf] #BR //An overview of how to build web services on top of PGF using the Google Web Toolkit.//
@@ -8,7 +8,7 @@ <P ALIGN="center"><CENTER><H1>GF Developers Guide</H1> <FONT SIZE="4"> <I>Authors: Björn Bringert and Krasimir Angelov</I><BR>-Last update: Tue Oct 25 21:03:04 2011+Last update: Mon Dec 14 18:55:45 2009 </FONT></CENTER> <P></P>@@ -484,5 +484,5 @@ </P> <!-- html code generated by txt2tags 2.5 (http://txt2tags.sf.net) -->-<!-- cmdline: txt2tags -thtml ./doc/gf-developers.t2t -->+<!-- cmdline: txt2tags gf-developers.txt --> </BODY></HTML>
@@ -13,10 +13,9 @@ <HR NOSHADE SIZE=1> <P></P> <UL>- <LI><A HREF="#toc1">GF Eclipse Plugin</A>- <LI><A HREF="#toc2">Emacs</A>- <LI><A HREF="#toc3">Gedit</A>- <LI><A HREF="#toc4">Geany</A>+ <LI><A HREF="#toc1">Emacs</A>+ <LI><A HREF="#toc2">Gedit</A>+ <LI><A HREF="#toc3">Geany</A> </UL> <P></P>@@ -27,20 +26,13 @@ welcome! </P> <A NAME="toc1"></A>-<H2>GF Eclipse Plugin</H2>-<P>-As a new development under the MOLTO Poject, there is now a (beta) Eclipse plugin for-writing GF grammars within the Eclipse IDE.-Details can be found <A HREF="../eclipse/">here</A>-</P>-<A NAME="toc2"></A> <H2>Emacs</H2> <P> <A HREF="../src/tools/gf.el">gf.el</A> by Johan Bockgård provides syntax highlighting and automatic indentation and lets you run the GF Shell in an emacs buffer. See installation instructions inside. </P>-<A NAME="toc3"></A>+<A NAME="toc2"></A> <H2>Gedit</H2> <P> <A HREF="http://johnjcamilleri.com/">John J. Camilleri</A>@@ -49,7 +41,7 @@ </P> <P> Copy the file below to-<CODE>~/.local/share/gtksourceview-2.0/language-specs/gf.lang</CODE> (under Ubuntu).+<CODE>~/.local/share/gtksourceview-3.0/language-specs/gf.lang</CODE> (under Ubuntu). </P> <UL> <LI><A HREF="../src/tools/gf.lang">gf.lang</A>@@ -73,7 +65,7 @@ <LI>Contributions are welcome! </UL> -<A NAME="toc4"></A>+<A NAME="toc3"></A> <H2>Geany</H2> <P> <A HREF="http://johnjcamilleri.com/">John J. Camilleri</A> provided the following
@@ -8,13 +8,7 @@ We collect GF modes for various editors on this page. Contributions are welcome! -==GF Eclipse Plugin== -As a new development under the MOLTO Poject, there is now a (beta) Eclipse plugin for-writing GF grammars within the Eclipse IDE.-Details can be found [here ../eclipse/]-- ==Emacs== [gf.el ../src/tools/gf.el] by Johan Bockgård provides syntax highlighting and@@ -29,7 +23,7 @@ [Gedit http://www.gedit.org/] (the default text editor in Ubuntu). Copy the file below to-``~/.local/share/gtksourceview-2.0/language-specs/gf.lang`` (under Ubuntu).+``~/.local/share/gtksourceview-3.0/language-specs/gf.lang`` (under Ubuntu). - [gf.lang ../src/tools/gf.lang]
@@ -446,6 +446,7 @@ | ``-from_hebrew`` | from unicode to GF unvocalized Hebrew transliteration | ``-from_nepali`` | from unicode to GF Nepali transliteration | ``-from_persian`` | from unicode to GF Persian/Farsi transliteration+ | ``-from_sindhi`` | from unicode to GF Sindhi transliteration | ``-from_telugu`` | from unicode to GF Telugu transliteration | ``-from_thai`` | from unicode to GF Thai transliteration | ``-from_urdu`` | from unicode to GF Urdu transliteration@@ -463,6 +464,7 @@ | ``-to_html`` | wrap in a html file with linebreaks | ``-to_nepali`` | from GF Nepali transliteration to unicode | ``-to_persian`` | from GF Persian/Farsi transliteration to unicode+ | ``-to_sindhi`` | from GF Sindhi transliteration to unicode | ``-to_telugu`` | from GF Telugu transliteration to unicode | ``-to_thai`` | from GF Thai transliteration to unicode | ``-to_urdu`` | from GF Urdu transliteration to unicode@@ -682,6 +684,7 @@ | ``-from_hebrew`` | from unicode to GF unvocalized Hebrew transliteration | ``-from_nepali`` | from unicode to GF Nepali transliteration | ``-from_persian`` | from unicode to GF Persian/Farsi transliteration+ | ``-from_sindhi`` | from unicode to GF Sindhi transliteration | ``-from_telugu`` | from unicode to GF Telugu transliteration | ``-from_thai`` | from unicode to GF Thai transliteration | ``-from_urdu`` | from unicode to GF Urdu transliteration@@ -699,6 +702,7 @@ | ``-to_html`` | wrap in a html file with linebreaks | ``-to_nepali`` | from GF Nepali transliteration to unicode | ``-to_persian`` | from GF Persian/Farsi transliteration to unicode+ | ``-to_sindhi`` | from GF Sindhi transliteration to unicode | ``-to_telugu`` | from GF Telugu transliteration to unicode | ``-to_thai`` | from GF Thai transliteration to unicode | ``-to_urdu`` | from GF Urdu transliteration to unicode@@ -979,7 +983,7 @@ ====t = tokenize==== #NOINDENT-``t`` = ``tokenize``: //Tokenize string usng the vocabulary.//+``t`` = ``tokenize``: //Tokenize string using the vocabulary.// #TINY @@ -1035,6 +1039,7 @@ | ``-greek`` | modern Greek | ``-hebrew`` | unvocalized Hebrew | ``-persian`` | Persian/Farsi+ | ``-sindhi`` | Sindhi | ``-nepali`` | Nepali | ``-telugu`` | Telugu | ``-thai`` | Thai
@@ -972,6 +972,10 @@ <TD>from unicode to GF Persian/Farsi transliteration</TD> </TR> <TR>+<TD><CODE>-from_sindhi</CODE></TD>+<TD>from unicode to GF Sindhi transliteration</TD>+</TR>+<TR> <TD><CODE>-from_telugu</CODE></TD> <TD>from unicode to GF Telugu transliteration</TD> </TR>@@ -1040,6 +1044,10 @@ <TD>from GF Persian/Farsi transliteration to unicode</TD> </TR> <TR>+<TD><CODE>-to_sindhi</CODE></TD>+<TD>from GF Sindhi transliteration to unicode</TD>+</TR>+<TR> <TD><CODE>-to_telugu</CODE></TD> <TD>from GF Telugu transliteration to unicode</TD> </TR>@@ -1493,6 +1501,10 @@ <TD>from unicode to GF Persian/Farsi transliteration</TD> </TR> <TR>+<TD><CODE>-from_sindhi</CODE></TD>+<TD>from unicode to GF Sindhi transliteration</TD>+</TR>+<TR> <TD><CODE>-from_telugu</CODE></TD> <TD>from unicode to GF Telugu transliteration</TD> </TR>@@ -1561,6 +1573,10 @@ <TD>from GF Persian/Farsi transliteration to unicode</TD> </TR> <TR>+<TD><CODE>-to_sindhi</CODE></TD>+<TD>from GF Sindhi transliteration to unicode</TD>+</TR>+<TR> <TD><CODE>-to_telugu</CODE></TD> <TD>from GF Telugu transliteration to unicode</TD> </TR>@@ -2116,7 +2132,7 @@ <H4>t = tokenize</H4> <P> -<CODE>t</CODE> = <CODE>tokenize</CODE>: <I>Tokenize string usng the vocabulary.</I>+<CODE>t</CODE> = <CODE>tokenize</CODE>: <I>Tokenize string using the vocabulary.</I> </P> <P> @@ -2242,6 +2258,10 @@ <TR> <TD><CODE>-persian</CODE></TD> <TD>Persian/Farsi</TD>+</TR>+<TR>+<TD><CODE>-sindhi</CODE></TD>+<TD>Sindhi</TD> </TR> <TR> <TD><CODE>-nepali</CODE></TD>
@@ -0,0 +1,3801 @@+@STRING{fac = "Formal Aspects of Computing"}+@STRING{amai = "Annals of Mathematics and Artificial Intelligence"}+@STRING{jsl = "Journal of Symbolic Logic"}+@STRING{jsc = "Journal of Symbolic Computation"}+@STRING{jlc = "Journal of Logic and Computation"}+@STRING{jlp = "Journal of Logic Programming"}+@STRING{JFP = "Journal of {F}unctional {P}rogramming"}+@STRING{jar = "Journal of Automated Reasoning"}+@STRING{sl = "Studia Logica"}+@STRING{ipl = "Information Processing Letters"}+@STRING{tcs = "Theoretical Computer Science"}+@STRING{lnm = "Lecture Notes in Mathematics"}+@STRING{lncs = "LNCS"}+@STRING{lnai = "LNCS"}+@STRING{spv = "Springer-Verlag"}+@STRING{cacm = "Communications of the {ACM}"}+@STRING{jacm = "Journal of the {ACM}"}+@STRING{sc = "Soft Computing---A Fusion of Foundations, Methodologies+ and Applications"}+++%%%%%%% GF-related papers++@INCOLLECTION{ranta-finnish,+ AUTHOR = "A. Ranta",+ TITLE = {How predictable is {Finnish} morphology? An experiment on lexicon construction},+ EDITOR = {{J. Nivre and M. Dahll\"of and B. Megyesi}},+ BOOKTITLE = "Resourceful Language Technology: Festschrift in Honor of Anna Sågvall Hein",+ PUBLISHER = {{University of Uppsala}},+ note = {\url{http://publications.uu.se/abstract.xsql?dbid=8933}},+ YEAR = {2008},+ PAGES = {130-148}+ }++@Article{Ranta91b,+ author = "Aarne Ranta",+ title = {Intuitionistic categorial grammar},+ journal = {{Linguistics and Philosophy}},+ year = {1991},+ volume = {14},+ pages = {203--239}+}++@Book{Ranta94,+ author = {A. Ranta},+ title = {{Type Theoretical Grammar}},+ publisher = {Oxford University Press},+ year = {1994}+}++@Book{ranta-1994,+ author = {A. Ranta},+ title = {{Type Theoretical Grammar}},+ publisher = {{Oxford University Press}},+ year = {1994}+}++@InProceedings{Ranta94a,+ author = "Aarne Ranta",+ title = "Type Theory and the Informal Language of Mathematics",+ booktitle = "Selected papers from TYPES'93: + Int.\ Workshop on Types, Nijmegen, The Netherlands",+ series = lncs,+ publisher = spv,+ volume = "806",+ pages = "352--365",+ year = "1994",+ editor = "Hendrik Barendregt and Tobias Nipkow"+}++@Article{Ranta95c,+ author = "Aarne Ranta",+ title = {Type-theoretical interpretation and generalization + of phrase structure grammar},+ journal = {{Bulletin of the IGPL}},+ year = {1995},+ volume = {3},+ pages = {319--342}+}++@InProceedings{Ranta95a,+ author = "Aarne Ranta",+ title = "Syntactic Categories in the Language of Mathematics",+ series = lncs,+ volume = "996",+ pages = "162--182",+ year = "1995",+ publisher = spv,+ booktitle = "Selected papers from TYPES'94: + Int.\ Workshop on Types for+ Proofs and Programs, Bastad, Sweden",+ editor = {Peter Dybjer and Bengt Nordstr\"{o}m and Jan Smith}+}++@InProceedings{ranta-1996,+ author = "A. Ranta",+ title = "Context-Relative Syntactic Categories and the+ Formalization of Mathematical Text",+ booktitle = "Selected papers from TYPES'95: Int.\ Workshop on Types for+ Proofs and Programs, Trento, Italy",+ publisher = spv,+ editor = "S. Berardi and M. Coppo",+ series = lncs,+ volume = 1158,+ pages = "231--248",+ year = "1996"+}++@inproceedings{ranta:torino,+ AUTHOR = {A. Ranta},+ TITLE = {Context-Relative Syntactic Categories + and the Formalization of Mathematical Text}, + BOOKTITLE = {{Types For Proofs and Programs}},+ EDITOR = {S. Berardi and M. Coppo},+ SERIES = {LNCS},+ NUMBER = {1158},+ PAGES = {231--248},+ PUBLISHER = {Springer-Verlag},+ YEAR = {1996}+ }++@Article{ranta-1997,+ author = "Aarne Ranta",+ title = {Structures grammaticales dans le fran\c{c}ais math\'{e}matique},+ journal = {Math\'{e}matiques, informatique et Sciences Humaines},+ year = {1997},+ volume = {138/139},+ pages = {5--56/5--36}+}++@article{ranta:paris,+ AUTHOR = {A. Ranta},+ TITLE = {{Structures grammaticales dans le fran\c{c}ais math\'ematique}},+ JOURNAL = {{Math\'ematiques, informatique et Sciences Humaines}},+ YEAR = {1997},+ NUMBER = {138, 139},+ PAGES = {5--56, 5--36}+ }++@Article{ranta-1998,+ author = "Aarne Ranta",+ title = "Syntactic Calculus with Dependent Types",+ journal = "Journal of Logic, Language, and Information",+ year = "1998",+ volume = "7",+ number = "4",+ pages = "413--431"+}++@InCollection{ranta-1998-regex,+ author = "Aarne Ranta",+ title = "A Multilingual Natural Language Interface to Regular+ Expressions",+ booktitle = "{FSMNLP'98}: International Workshop on Finite State+ Methods in Natural Language Processing",+ publisher = "Bilkent University, Ankara",+ year = "1998",+ editor = "Lauri Karttunen and K. Oflazer",+ pages = "79--90"+}++@InProceedings{DAC98a,+ author = "Matthew B. Dwyer and George S. Avrunin and James C.+ Corbett",+ title = "Property Specification Patterns for Finite-State+ Verification",+ pages = "7--15",+ ISBN_ISSN = "0-89791-954-8",+ editor = "Mark Ardis",+ booktitle = "Proc.\ 2nd Workshop on Formal Methods in+ Software Practice ({FMSP}-98)",+ month = mar,+ publisher = "ACM Press",+ address = "New York",+ year = "1998"+}++@InProceedings{ranta98:regexp,+ author = {A. Ranta},+ title = {A Multilingual Natural-Language Interface to Regular Expressions},+ booktitle = {Proceedings of the International Workshop on Finite State+ Methods in Natural Language Processing},+ pages = {79--90},+ year = 1998,+ editor = {L. Karttunen and K. Oflazer},+ address = {Ankara},+ organization = {Bilkent University}+}++@InProceedings{MaenpaaRanta99,+ author = {P. Mäenpää and A. Ranta},+ title = {The type theory and type checker of {GF}},+ booktitle = {{PLI-1999: + Workshop on Logical Frameworks and Meta-languages, + Paris, France}},+ year = {1999}+}++@Manual{Ranta99a,+ title = {Grammatical Framework Syntax and Semantic},+ author = {Aarne Ranta},+ organization = {Xerox Research Centre Europe},+ address = {Grenoble},+ month = feb,+ year = {1999},+ note = {URL: \texttt{www.xrce.xerox.com/research/mltt/gf/doc/gf-language/index.html}}+}++@Manual{Ranta99b,+ title = {Grammatical Framework Tutorial},+ author = {A. Ranta},+ organization = {Xerox Research Centre Europe},+ address = {Grenoble},+ month = feb,+ year = 1999,+ note = {URL: \texttt{www.xrce.xerox.com/research/mltt/gf/doc/gf-tutorial/index.html}}+}++@Manual{Ranta99c,+ title = {Grammatical Framework Implementation and Interfaces. + {R}evised for {GF} Version 0.5},+ author = {Aarne Ranta},+ organization = {Department of Computing Science,+ Chalmers University of Technology},+ month = jun,+ year = {1999},+ note = {URL: \texttt{www.cs.chalmers.se/\~{}aarne/GF/pub/doc/gf-implementation/index.html}}}++@InProceedings{dymetman-al-2000,+ author = {M.\ Dymetman and V.\ Lux and A.\ Ranta},+ title = {{XML} and Multilingual Document Authoring: Convergent Trends},+ booktitle = {Proc.\ Computational Linguistics COLING, Saarbr\"{u}cken, Germany},+ pages = {243-249},+ year = {2000},+ publisher = {International Committee on Computational Linguistics}+}++@InProceedings{hallgren-ranta-2000,+ author = {T.\ Hallgren and A.\ Ranta},+ title = {{An Extensible Proof Text Editor}},+ editor = {M. Parigot and A. Voronkov},+ booktitle = {{LPAR-2000}},+ year = {2000},+ series = {{LNCS/LNAI}},+ volume = {1955},+ publisher = {Springer},+ note = {\url{http://www.cse.chalmers.se/~aarne/articles/lpar2000.pdf}},+ pages = {70--84}+}+++@TechReport{hallgren-2000,+ author = {T. Hallgren},+ title = {The Correctness of Insertion Sort},+ institution = {Chalmers University of Technology, + Department of Computer Science},+ year = {2000},+ note = {URL: \verb!http://www.cse.chalmers.se/~hallgren/Papers/insertion_sort.ps!}+}++@Misc{gf-homepage,+ author = {A. Ranta and K. Angelov and T. Hallgren},+ title = {{\mbox{Grammatical Framework Homepage}}},+ howpublished = {\verb!http://grammaticalframework.org!},+ documentURL = {"http://www.cs.chalmers.se/~aarne/GF/"},+ year = {2000--2009}+}++@InProceedings{HaehnleRanta01a,+ author = {R.\ H\"{a}hnle and A.\ Ranta},+ title = {Connecting {OCL} with the Rest of the World},+ booktitle = {{ETAPS}/{WTUML},+ {Genova}, {Italy}},+ year = {2001},+ editor = {J. Whittle},+ url = {http://www.cs.chalmers.se/~reiner/papers/wtuml.ps.gz}+}++@InProceedings{krijo-aarne,+ author = "K. Johannisson and A. Ranta",+ title = "Formal Verification of Multilingual Instructions",+ booktitle = "The Joint Winter Meeting of Computing Science and+ Computer Engineering",+ publisher = "Chalmers University of Technology",+ year = "2001"+}++@InProceedings{ranta-cooper-icos,+ author = {A. Ranta and R. Cooper},+ title = {Dialogue Systems as Proof Editors},+ booktitle = {{IJCAR}/{ICoS-3}},+ year = 2001,+ address = {{Siena}, {Italy}}+}++@Misc{italiano,+ author = "A. Ranta",+ title = {1+n representations of {Italian} morphology},+ howpublished = {Essays dedicated to {Jan von Plato} + on the occasion of his 50th birthday,+ \verb6http://www.valt.helsinki.fi/kfil/jvp50.htm6}, + documentURL = "\verb6http://www.valt.helsinki.fi/kfil/jvp50.htm6",+ year = 2001+}++@InProceedings{hahnle-al-2002,+ author = {R.\ Hähnle and K.\ Johannisson and A.\ Ranta},+ title = {{An Authoring Tool for Informal and Formal Requirements Specifications}},+ booktitle = {{Fundamental Approaches to Software Engineering}},+ editor = {R.-D. Kutsche and H. Weber},+ year = {2002},+ series = {LNCS},+ volume = {2306},+ pages = {233--248},+ publisher = {Springer}+}++@Misc{bnfc,+ author = {M. Forsberg and A. Ranta},+ title = {{\mbox{BNF Converter Homepage}}},+ howpublished = {\verb!http://www.cs.chalmers.se/~markus/BNFC/!},+ documentURL = {"http://www.cs.chalmers.se/~markus/BNFC/"},+ year = {2002--2004}+}++@InProceedings{khegai-al-2003,+ author = {J.\ Khegai and B.\ Nordström and A.\ Ranta},+ title = {{Multilingual Syntax Editing in GF}},+ booktitle = {{Intelligent Text Processing and Computational Linguistics+ (CICLing-2003), Mexico City, February 2003}},+ year = {{2003}},+ series = {LNCS},+ volume = {2588},+ editor = {A. Gelbukh},+ note = {\url{http://www.cs.chalmers.se/~aarne/articles/mexico.ps.gz}},+ pages = {453--464},+ publisher = {Springer-Verlag}+}++@ARTICLE{ranta-2004,+ AUTHOR = "A. Ranta",+ TITLE = {{Grammatical Framework: A Type-Theoretical Grammar Formalism}},+ JOURNAL = {{The Journal of Functional Programming}},+ pages={145--189},+ volume={14(2)},+ note = {\url{http://www.cse.chalmers.se/~aarne/articles/gf-jfp.pdf}},+ YEAR = {2004}+ }++@Article{ranta:compsem,+ author = {A. Ranta},+ title = {{Computational Semantics in Type Theory}},+ journal = {{Mathematics and Social Sciences}},+ volume = {165},+ pages = {31--57},+ year = {2004}+}++@InProceedings{numerals,+ AUTHOR = {H. Hammarstr\"{o}m and A. Ranta},+ TITLE = {{Cardinal Numerals Revisited in GF}}, + booktitle = {{Workshop on Numerals in the World's Languages, + Dept. of Linguistics, Max Planck Institute for Evolutionary Anthropology, + Leipzig}},+ note = {\url{http://www.cs.chalmers.se/%7Eharald2/numabstract.pdf}},+ year = {{2004}}+ }++@InProceedings{peb-parsing,+ author = {P. Ljungl\"of},+ title = {{Grammatical Framework and Multiple Context-Free Grammars}},+ booktitle = {{Proceedings of Formal Grammar, Nancy, August 2004}},+ editor = {G. Jaeger and P. Monachesi and G. Penn and S. Wintner},+ pages = {77--90},+ year = {2004}+}++@PhdThesis{ljunglof-2004,+ author = {P. Ljungl\"of},+ title = {{The Expressivity and Complexity of Grammatical Framework}},+ school = {{Dept.\ of Computing Science,+ Chalmers University of Technology and + Gothenburg University}},+ note = {\url{http://www.cs.chalmers.se/~peb/pubs/p04-PhD-thesis.pdf}},+ year = {2004}+}++@article{ranta-cooper,+ author = {A. Ranta and R. Cooper},+ title = {{Dialogue Systems as Proof Editors}},+ journal = {{Journal of Logic, Language and Information}},+ year = 2004+}++@inproceedings{FM,+ title = {{Functional Morphology}},+ author = {M. Forsberg and A. Ranta},+ booktitle = {{ICFP 2004, Showbird, Utah}},+ pages = {213-223},+ note = {\url{http://www.cs.chalmers.se/~markus/FM/FM_ICFP2004.pdf}},+ year = {2004}+}++@inproceedings{gf-esslli,+ AUTHOR = {A. Ranta},+ TITLE = {{Grammatical Framework Tutorial}},+ BOOKTITLE = {{ESSLLI 2003 Course Material I}},+ PUBLISHER = {{Kurt G\"odel Society}},+ pages = {1--86},+ YEAR = {2004}+ }++@techreport{bringert,+ author = {B. Bringert},+ title = {{Embedded Grammars}},+ institution = {Department of Computing Science, Chalmers University+ of Technology},+ type = {{MSc Thesis}},+ year = {2004}+}++@InProceedings{burke-johannisson-2005,+ author = {D. A. Burke and K. Johannisson},+ title = {{Translating Formal Software Specifications to Natural + Language / A Grammar-Based Approach}},+ booktitle = {{Logical Aspects of Computational Linguistics (LACL 2005)}},+ editor = {{P. Blache and E. Stabler and J. Busquets and R. Moot}},+ year = {2005},+ series = {{LNCS/LNAI}},+ volume = {3492},+ note = {\url{http://www.springerlink.com/content/?k=LNCS+3492}},+ pages = {51--66},+ publisher = {Springer}+}++@InProceedings{ranta-nancy,+ author = {A. Ranta},+ title = {Resource Grammars for Dialogue Systems and Grammar Writing by Examples},+ booktitle = {{TALK Meeting}},+ year = 2005,+ address = {{Nancy}}+}++@inproceedings{burden05:lcfrs,+ address = {Vancouver, British Columbia},+ author = {Burden, H\r{a}kan and Ljungl\"{o}f, Peter },+ booktitle = {{P}roceedings of the {N}inth {I}nternational {W}orkshop on {P}arsing {T}echnology},+ citeulike-article-id = {2349372},+ keywords = {grammars},+ pages = {11--17},+ posted-at = {2008-02-07 15:00:18},+ priority = {0},+ publisher = {Association for Computational Linguistics},+ title = {{P}arsing {L}inear {C}ontext-{F}ree {R}ewriting {S}ystems},+ url = {http://www.aclweb.org/anthology/W/W05/W05-1502},+ year = {2005}+}++@PhdThesis{johannisson-2005,+ author = {K. Johannisson},+ title = {{Formal and Informal Software Specifications}},+ school = {{Dept.\ of Computing Science,+ Chalmers University of Technology and + Gothenburg University}},+ year = {2005}+}++@inproceedings{bringert-al-2005,+ author = {Bj\"orn Bringert and Robin Cooper + and Peter Ljungl\"of and Aarne Ranta},+ title = {Multimodal Dialogue System Grammars},+ booktitle = {Proceedings of DIALOR'05, Ninth Workshop on + the Semantics and Pragmatics of Dialogue},+ month = {June},+ year = {2005},+ pages = {53--60},+ location = {Nancy, France},+ url = {http://www.cs.chalmers.se/~bringert/publ/mm-grammars-dialor/mm-grammars-dialor.pdf}+}++@InProceedings{forsberg-al-2006,+ AUTHOR = {M. Forsberg and H. Hammarstr\"{o}m and A. Ranta},+ TITLE = {{Morphological Lexicon Extraction from Raw Text Data}},+ booktitle = {{FinTAL 2006}},+ year = {{2006}},+ series = {{LNCS/LNAI}},+ volume = {4139},+ editor = {T. Salakoski}+ }++@Misc{webalt,+ author = {{WebALT Consortium}},+ title = {{WebALT Online Manual: How-to guide for creating+multilingual mathematical exercises}},+ howpublished = {WebALT Deliverable 7.4, \url{http://webalt.math.helsinki.fi/content/e16/e301/e846/Deliverable7.4_eng.pdf}},+ year = {2006}+}++@book{beckert-al-2006,+ AUTHOR = {B. Beckert and R. Hähnle and P. Schmitt},+ TITLE = {{Verification of Object-Oriented Software: The KeY Approach}},+ YEAR = {2006},+ series = lncs,+ volume = {4334}, + PUBLISHER = {{Springer-Verlag}}+}++@inproceedings{caprotti-2006,+ title = {{WebALT! Deliver Mathematics Everywhere}},+ author = {O. Caprotti},+ note = {\url{http://webalt.math.helsinki.fi/content/e16/e301/e512/PosterDemoWebALT_eng.pdf}},+ booktitle = {{Proceedings of SITE 2006. Orlando March 20-24}},+ year = {2006}+}++@inproceedings{eldada,+ title = {{Implementing an Open Source Arabic Resource Grammar in GF}},+ author = {A. El Dada and A. Ranta},+ booktitle = {{20th Arabic Linguistics Symposium. Western Michigan University March 3-5 2006}},+ year = {2006}+}++@inproceedings{jonson-2006,+ AUTHOR = {Rebecca Jonson},+ TITLE = {{Generating statistical language models from interpretation grammars in dialogue system}},+ BOOKTITLE = {{Proceedings of EACL06, Trento, Italy}},+ YEAR = {2006}+ }++@inproceedings{khegai-acl,+ title = {{GF Parallel Resource Grammars and Russian}},+ author = {J. Khegai},+ booktitle = {{Coling/ACL 2006}},+ pages = {475--482},+ year = {2006}+}++@inproceedings{lemon06:dude,+ author = {Lemon, Oliver and Liu, Xingkun },+ booktitle = {{E}{A}{C}{L} 2006, 11st {C}onference of the {E}uropean {C}hapter of the {A}ssociation for {C}omputational {L}inguistics},+ citeulike-article-id = {1167605},+ keywords = {dialogue, gf},+ posted-at = {2007-03-16 13:30:21},+ priority = {2},+ title = {{D}{U}{D}{E}: a {D}ialogue and {U}nderstanding {D}evelopment {E}nvironment, mapping {B}usiness {P}rocess {M}odels to {I}nformation {S}tate {U}pdate dialogue systems},+ url = {http://homepages.inf.ed.ac.uk/olemon/dude-final.pdf},+ year = {2006}+}++@inproceedings{nganga-africa,+ title = {{Multilingual content development for eLearning in Africa}},+ author = {W. Ng'ang'a},+ booktitle = {{1st Pan-African Conference on ICT for Development, Education and Training. + 24-26 May 2006, Addis Ababa, Ethiopia}},+ year = {2006}+}++@misc{ljunglof-al-2006,+ author = {P. Ljungl\"of and G. Amores and R. Cooper and D. Hjelm and O. Lemon and P. Manch\'on+ and G. P\'erez and A. Ranta},+ year = 2006,+ title = {{Multimodal Grammar Library}},+ note = {{TALK. Talk and Look: + Tools for Ambient Linguistic Knowledge. IST-507802. Deliverable 1.2b}.+ \url{http://www.talk-project.org/fileadmin/talk/publications_public/deliverables_public/TK_D1-2-2.pdf}}+ }++@techreport{humayoun,+ author = {M. Humayoun},+ title = {{Urdu Morphology, Orthography and Lexicon Extraction}},+ institution = {Department of Computing Science, Chalmers University+ of Technology},+ type = {{MSc Thesis}},+ year = {2006}+}++@inproceedings{khegai-mt,+ title = {{Grammatical Framework (GF) for MT in sublanguage domains}},+ author = {J. Khegai},+ booktitle = {{Proceedings of EAMT-2006 (11th Annual conference of the European Association for Machine Translation, Oslo, Norway}},+ pages = {95--104},+ year = {2006}+}++@PhdThesis{khegai-phd,+ author = {J. Khegai},+ title = {{Language Engineering in Grammatical Framework (GF)}},+ school = {{Dept.\ of Computing Science,+ Chalmers University of Technology and + University of Gothenburg}},+ note = {\url{http://www.cs.chalmers.se/~janna/Janna_Khegai_phd.pdf}},+ year = {2006}+}++@inproceedings{humayoun-caasl,+ title = {{Urdu Morphology, Orthography and Lexicon Extraction}},+ author = {M. Humayoun and H. Hammarström and A. Ranta},+ booktitle = {{CAASL-2: The Second Workshop on Computational Approaches to Arabic Script-based Languages, LSA 2007 Linguistic Institute, Stanford University, July 21-22, 2007}},+ year = {2007}+}++@ARTICLE{ranta-2007,+ AUTHOR = "A. Ranta",+ TITLE = {{Modular Grammar Engineering in GF}},+ JOURNAL = {{Research on Language and Computation}},+ volume = {5},+ pages = {133--158},+ note = {\url{http://www.cs.chalmers.se/~aarne/articles/multieng3.pdf}},+ YEAR = {2007} +}++@Book{KeYBook2007,+ editor = {Bernhard Beckert and Reiner H\"ahnle and Peter H. Schmitt},+ title = {Verification of Object-Oriented Software: The {KeY} Approach},+ series = {LNCS 4334},+ publisher = {Springer-Verlag},+ year = {2007}+}++@InProceedings{bringert-sigdial,+ author = {B. Bringert},+ title = {{Rapid Development of Dialogue Systems by Grammar Compilation}},+ booktitle = {{8th SIGdial Workshop on Discourse and Dialogue, Antwerp, Belgium, September 1--2, 2007}} ,+ year = 2007+}++@PhdThesis{forsberg-2007,+ author = {Markus Forsberg},+ title = {{Three Tools for Language Processing: BNF Converter, + Functional Morphology, and Extract}},+ school = {{Dept.\ of Computer Science and Engineering,+ Chalmers University of Technology and + Gothenburg University}},+ year = {2007}+}++@incollection{eldada-book,+ title = {{Implementing an Open Source Arabic Resource Grammar in GF}},+ author = {A. El Dada and A. Ranta},+ booktitle = {{Perspectives on Arabic Linguistics XX}},+ editor = {M.A. Mughazy},+ publisher = {{John Benjamin's}},+ pages = {209--232},+ year = {2007}+}++@inproceedings{bringert-speechgram,+ title = {{Speech Recognition Grammar Compilation in Grammatical Framework}},+ author = {B. Bringert},+ booktitle = {{SPEECHGRAM 2007: ACL Workshop on Grammar-Based Approaches to Spoken + Language Processing, June 29, 2007, Prague}},+ note = {\url{http://www.cs.chalmers.se/~bringert/publ/gf-srg/gf-srg.pdf}},+ year = {2007}+}++@inproceedings{gf-srg,+ author = {Bj\"orn Bringert},+ title = {{Speech Recognition Grammar Compilation in Grammatical Framework}},+ booktitle = {{Proceedings of the Workshop on Grammar-Based Approaches to Spoken Language Processing}},+ month = jun,+ year = {2007},+ pages = {1--8},+ location = {{Prague, Czech Republic}},+ publisher = {{Association for Computational Linguistics}}+}++@inproceedings{perera-ranta-2007,+ title = {{Dialogue System Localization with the GF Resource Grammar Library}},+ author = {N. Perera and A. Ranta},+ booktitle = {{SPEECHGRAM 2007: ACL Workshop on Grammar-Based Approaches to Spoken + Language Processing, June 29, 2007, Prague}},+ note = {\url{http://www.cs.chalmers.se/~aarne/articles/perera-ranta.pdf}},+ year = {2007}+}++@inproceedings{ranta-features,+ title = {{Features in Abstract and Concrete Syntax}},+ author = {A. Ranta},+ booktitle = {{NODALIDA Workshop on Typed Feature Structure Grammars, Tartu, 24 May 2007}},+ note = {\url{http://www.cs.chalmers.se/~aarne/articles/ranta-tfsg2007.pdf}},+ year = {2007}+}+++@INPROCEEDINGS{dannells,+ AUTHOR = {Dana Dann\'{e}lls},+ TITLE = {{Generating Tailored Texts for Museum Exhibits}},+ BOOKTITLE = {{Proceedings of the 6th edition of LREC. + The 2nd Workshop on Language Technology for Cultural Heritage (LaTeCH 2008), + Marrakech, Morocco}},+ PAGES = {17--20},+ YEAR = {2008},+ note = {\url{http://spraakdata.gu.se/svedd/pub/latech08.pdf}}+}++@InProceedings{angelov-gotal,+ author = {K. Angelov},+ title = {{Type-Theoretical Bulgarian Grammar}},+ booktitle = {{Advances in Natural Language Processing (GoTAL 2008)}} ,+ year = 2008,+ editor = {B. Nordstr\"om and A. Ranta},+ series = {{LNCS/LNAI}},+ note = {\url{http://www.springerlink.com/content/978-3-540-85286-5/}},+ volume = 5221,+ pages = {52--64}+}++@InProceedings{larsson-gotal,+ author = {S. Larsson and P. Ljungl\"of},+ title = {{A grammar formalism for specifying ISU-based dialogue systems}},+ booktitle = {{Advances in Natural Language Processing (GoTAL 2008)}} ,+ year = 2008,+ editor = {B. Nordstr\"om and A. Ranta},+ series = {{LNCS/LNAI}},+ note = {\url{http://www.springerlink.com/content/978-3-540-85286-5/}},+ volume = 5221,+ pages = {303--314}+}++@InProceedings{moises-gotal,+ title = {{Interactive Multilingual Web Applications with Grammarical Framework}},+ author = {M. S. {Meza Moreno} and B. Bringert},+ booktitle = {{Advances in Natural Language Processing (GoTAL 2008)}} ,+ year = 2008,+ editor = {B. Nordstr\"om and A. Ranta},+ series = {{LNCS/LNAI}},+ note = {\url{http://www.springerlink.com/content/978-3-540-85286-5/}},+ volume = 5221,+ pages = {336--347}+}++@Misc{bringert-2008c,+ author = {B. Bringert},+ title = {{Semantics of the GF Resource Grammar Library}},+ howpublished = {{Report, Chalmers University}},+ note = {\url{http://www.cse.chalmers.se/alumni/bringert/darcs/mosg/}},+ year = {2008}+}++@misc{cooper-anna,+ author = {R. Cooper},+ year = 2008,+ title = "The Abstract-Concrete Syntax Distinction and Unification in Multilingual Grammar",+ note = {\url{http://publications.uu.se/abstract.xsql?dbid=8933}}+ }++@Misc{bringert-continuations,+ author = {B. Bringert},+ title = {{Delimited Continuations, Applicative Functors and Natural Language Semantics}},+ howpublished = {{Technical Report, Chalmers University of Technology}},+ year = {2009},+ note = {\url{http://digitalgrammars.com/gf/demos/mosg/}}+}+++@article{pgf,+ author = {K. Angelov and B. Bringert and A. Ranta},+ title = {{PGF: A Portable Run-Time Format for Type-Theoretical Grammars}},+ year = 2009,+ journal = {{Journal of Logic, Language and Information}},+ note = {To appear}+}++@inproceedings{angelov-2009,+ AUTHOR = {Krasimir Angelov},+ TITLE = {{Incremental Parsing with Parallel Multiple Context-Free Grammars}},+ BOOKTITLE = {{Proceedings of EACL'09, Athens}},+ YEAR = {2009}+ }++@inproceedings{gf-attempto,+ AUTHOR = {K. Angelov and A. Ranta},+ TITLE = {{Implementing Controlled Languages in GF}},+ BOOKTITLE = {{CNL-2009, + Controlled Natural Language Workshop, Marettimo, Sicily, 2009}},+ YEAR = {2009}+ }++@inproceedings{ranta-2009a,+ title = {{Grammars as Software Libraries}},+ author = {A. Ranta},+ booktitle = {{From Semantics to Computer Science. Essays in Honour of Gilles Kahn}},+ editor = {Y. Bertot and G. Huet and J-J. L\'evy and G. Plotkin},+ publisher = {{Cambridge University Press}},+ note = {\url{http://www.cse.chalmers.se/~aarne/articles/libraries-kahn.pdf}},+ pages = {281--308},+ year = {2009}+}++@article{ranta-2009,+ author = {A. Ranta},+ title = {{The GF Resource Grammar Library}},+ year = 2009,+ journal = {{Linguistics in Language Technology}},+ volume = {2},+ note = {\url{http://elanguage.net/journals/index.php/lilt/article/viewFile/214/158}},+}+++@misc{saldo,+ author = {L. Borin and M. Forsberg and L. L\"onngren},+ year = 2009,+ title = {{SALDO 1.0 (Svenskt associationslexikon version 2)}},+ note = {{Spr\aa kbanken, G\"oteborgs universitet.+ \url{http://spraakbanken.gu.se/personal/markus/publications/saldo_1.0.pdf}}}+ }++@inproceedings{angelov-enache-2010,+ title = {{Typeful Ontologies with Direct Multilingual Verbalization.}},+ author = {K. Angelov and R. Enache},+ booktitle = {{CNL 2010, Controlled Natural Language}},+ editor = {N. Fuchs and M. Rosner},+ year = {2010}+}++@Book{ranta-2010,+ author = {Aarne Ranta},+ title = {{Grammatical Framework:+ Programming with Multilingual Grammars}},+ publisher = {{CSLI Publications}},+ year = {2010},+ note = "to appear"+}++@Book{ranta-2011,+ author = {Aarne Ranta},+ title = {{Grammatical Framework:+ Programming with Multilingual Grammars}},+ publisher = {{CSLI Publications}},+ year = {2011},+ address = "Stanford",+ note = {{ISBN-10: 1-57586-626-9 (Paper), 1-57586-627-7 (Cloth)}}+}+++++%%%%%%%%%%%%% other papers++@inproceedings{mccarthy62towards,+ author = "J.\ McCarthy",+ title = "Towards a mathematical science of computation",+ booktitle = "Proceedings of the Information Processing Cong. 62",+ month = "August",+ publisher = "North-Holland",+ address = "Munich, West Germany",+ pages = "21--28",+ year = "1962"+}++@BOOK{rei48,+ AUTHOR = "Reichenbach, Hans",+ TITLE = "Elements of Symbolic Logic",+ PUBLISHER = {The MacMillan Company},+ ADDRESS = {New York},+ YEAR = {1948} }++@Article{bar-hillel-1953,+ author = "Y. Bar-Hillel",+ title = "A quasi-arithmetical notation for syntactic description",+ journal = {Language},+ year = 1953,+ volume = 29,+ pages = {27-58}+}++@Article{hockett,+ author = {C. F. Hockett},+ title = "Two Models of Grammatical Description", + journal = "Word",+ year = 1954,+ volume = 10,+ pages = {210--233}+}++@article{swadesh,+ author = {Morris Swadesh},+ title = {{Towards Greater Accuracy in Lexicostatistic Dating}},+ journal = {{International Journal of American Linguistics}},+ volume = {21},+ year = {1955},+ pages = {121--137}+ }++@BOOK{chomsky,+ AUTHOR = "Chomsky, N.",+ TITLE = "Syntactic Structures",+ PUBLISHER = {Mouton},+ ADDRESS = {The Hague},+ YEAR = {1957} }++@ARTICLE{lambek,+ AUTHOR = "J. Lambek",+ TITLE = "The mathematics of sentence structure",+ JOURNAL = {{American Mathematical Monthly}},+ VOLUME = {65},+ PAGES = {154-170},+ YEAR = {1958} +}++@Article{mccarthy,+ author = {J. McCarthy},+ title = {{Recursive Functions of Symbolic Expressions and their+ Computation by Machine, part I}},+ journal = {{Communications of the ACM}},+ volume = {3},+ pages = {184--195},+ year = {1960}+}++@Book{nssk,+ editor = {M. Sadeniemi},+ title = {{Nykysuomen sanakirja}},+ publisher = {{WSOY}},+ year = {1961}+}++@InProceedings{curry-1961,+ AUTHOR = "H. B. Curry",+ TITLE = "Some logical aspects of grammatical structure",+ EDITOR = "Jakobson, Roman",+ BOOKTITLE = {{Structure of Language and its+ Mathematical Aspects: Proceedings of the Twelfth Symposium+ in Applied Mathematics}},+ PUBLISHER = {American Mathematical Society},+ YEAR = {1961}, + PAGES = {56--68}+}++@BOOK{diderichsen-1962,+ AUTHOR = "Diderichsen, Paul",+ TITLE = "Elementaer dansk grammatik",+ ADDRESS = {Kobenhavn},+ YEAR = {1962} }++@Article{boehm-p,+ author = {C. B\"{o}hm},+ title = {{On a family of Turing machines and the related programming language}},+ journal = {{ICC Bulletine}},+ year = 1964,+ volume = 3,+ pages = {185-194}+}++@Article{LR,+ author = {D. Knuth},+ title = {On the translation of languages from left to right}, + journal = {Information and {Control}},+ year = 1965,+ volume = 8,+ pages = {607--639}+}++@BOOK{prawitz,+ AUTHOR = "D. Prawitz",+ TITLE = {{Natural Deduction}},+ PUBLISHER = {Almqvist \& Wiksell},+ ADDRESS = {Stockholm},+ YEAR = {1965} }++@ARTICLE{landin,+ AUTHOR = "P. Landin",+ TITLE = "The Next 700 Programming Languages",+ JOURNAL = {{Communications of the ACM}},+ VOLUME = {9},+ PAGES = {157--166},+ YEAR = {1966} +}++@PHDTHESIS{ross-1967,+ AUTHOR = {J. Ross},+ YEAR = 1967,+ TITLE = {{Constraints on Variables in Syntax}},+ SCHOOL = {{Massachusetts Institute of Technology}}+}++@Article{knuth-1968, + author = "D. Knuth",+ title = "Semantics of Context-Free Languages", + journal = {Mathematical {Systems} {Theory}},+ year = 1968,+ volume = 2,+ pages = {127--145}+}++@Book{lyons,+ author = {J. Lyons},+ title = {{Introduction to Theoretical Linguistics}},+ publisher = {{Cambridge University Press}},+ year = {1968}+}++@ARTICLE{scott-str,+ AUTHOR = "D. S. Scott and C. Strachey",+ TITLE = "Toward a mathematical semantics for computer languages",+ JOURNAL = {Microwave Research Institute Symposia Series},+ VOLUME = {21},+ PAGES = {19--46},+ YEAR = {1970} }++@Article{earley,+ author = "J. Earley",+ title = "An efficient context-free parsing algorithm",+ journal = {Communications of the {ACM}},+ year = 1970,+ volume = 13,+ number = 2,+ pages = {94--102}+}++@INCOLLECTION{scott,+ AUTHOR = "D. S. Scott",+ TITLE = "Advice on modal logic",+ booktitle = {Philosophical Problems in Logic},+ EDITOR = {K.\ Lambert},+ publisher = {D. Reidel},+ YEAR = {1970} }++@Article{Wirth,+ author = "N. Wirth",+ title = "Program Development by Stepwise Refinement", + journal = "Communications of the ACM",+ year = 1971,+ volume = 14,+ pages = {221--227}+}++@Article{Parnas,+ author = {D. Parnas},+ title = {{On the Criteria To Be Used in Decomposing Systems into Modules}},+ journal = {{Communications of the ACM}},+ volume = {15},+ pages = {1053--1058},+ year = {1972}+}++@BOOK{montague-1974,+ AUTHOR = "Montague, R.",+ TITLE = "Formal Philosophy",+ NOTE = {Collected papers edited by Richmond Thomason},+ PUBLISHER = {Yale University Press},+ ADDRESS = {New Haven},+ YEAR = {1974} }++@ARTICLE{partee,+ AUTHOR = {B. Partee},+ TITLE = {Montague grammar and transformational grammar},+ JOURNAL = {{Linguistic Inquiry}},+ VOLUME = {6},+ PAGES = {203--300},+ YEAR = {1975} }++@TechReport{johnson-yacc,+ author = {S. C. Johnson},+ title = {{Yacc --- yet another compiler compiler}},+ institution = {{AT \& T Bell Laboratories, Murray Hill, NJ}},+ year = {1975},+ number = {{CSTR-32}}+}++@inproceedings{donzeau-gouge-al-1975,+ author = "V. Donzeau-Gouge and G. Huet and G. Kahn and B. Lang and J.~J. Levy",+ title = {A structure-oriented program editor: + a first step towards computer assisted programming},+ booktitle = {{International Computing Symposium ({ICS'75})}},+ year = {1975}+}++@Book{karlsson-1977,+ author = {F. Karlsson},+ title = {{Finsk grammatik}},+ publisher = {{Suomalaisen Kirjallisuuden Seura}},+ year = {1977}+}++@INCOLLECTION{seelybrown,+ AUTHOR = "R. R. Burton and J. S. Brown",+ TITLE = "Semantic Grammar: A technique for constructing natural language interface to instructional systems",+ BOOKTITLE = "BBN Report 3587",+ PUBLISHER = {{Bolt, Beranek, and Newman, Inc.}},+ ADDRESS = {{Cambridge, Ma.}},+ YEAR = {1977}+}++@book{jackendoff,+ AUTHOR = {R. Jackendoff},+ TITLE = {{X-Bar Syntax: A Study of Phrase Structure}},+ YEAR = {1977},+ PUBLISHER = {{MIT Press}}+}++@ARTICLE{Milner78atheory,+ author = {Robin Milner},+ title = {A theory of type polymorphism in programming},+ journal = {Journal of Computer and System Sciences},+ year = {1978},+ volume = {17},+ pages = {348--375}+}++@ARTICLE{fri-war,+ AUTHOR = "Friedman, J. and D. Warren",+ TITLE = "A parsing method for {Montague} grammar",+ JOURNAL = {Linguistics and Philosophy},+ VOLUME = {2},+ PAGES = {347-372},+ YEAR = {1978} }++@Article{huet-lang,+ author = {G. Huet and B. Lang},+ title = {Proving and applying program transformations expressed + with second-order patterns}, + journal = {{Acta Informatica}},+ year = 1978,+ volume = 11+}++@Book{hellberg,+ author = {S. Hellberg},+ title = {{The Morphology of Present-Day Swedish}},+ publisher = {{Almqvist \& Wiksell}},+ year = {1978}+}++@InProceedings{brodda-karlsson,+ author = {B. Brodda and F. Karlsson},+ title = {{An Experiment with Automatic Morphological Analysis of Finnish}},+ series = {{Papers from the Institute of Linguistics, University of Stockholm}},+ volume = 40,+ year = 1978+}++@InProceedings{saghein-1978,+ author = "Anna {S\aa gvall Hein}",+ title = {{Finnish Morphological Analysis in the Reversible Grammar System}},+ booktitle = {{COLING 78, Information Abstracts}},+ year = {1978}+}++@BOOK{dowty-1979,+ AUTHOR = "Dowty, D",+ TITLE = "Word Meaning and Montague Grammar",+ PUBLISHER = {D. Reidel},+ ADDRESS = {Dordrecht},+ YEAR = {1979} }++@Book{hopcroft,+ author = {J. Hopcroft and J. Ullman},+ title = {{Introduction to Automata Theory, Languages, and Computation}},+ publisher = {Addison-Wesley},+ year = 1979+}++@ARTICLE{dcg,+ AUTHOR = "F. Pereira and D. Warren",+ TITLE = "Definite clause grammars+ for language analysis---a survey of the formalism and a+ comparison with augmented transition networks",+ JOURNAL = {{Artificial Intelligence}},+ VOLUME = {13},+ PAGES = {231--278},+ YEAR = {1980} }++@ARTICLE{koskenniemi-1980,+ AUTHOR = "Kimmo Koskenniemi",+ TITLE = "On Automatic Lemmatization of Finnish",+ JOURNAL = {{Fenno-Ugrica Suecana}},+ VOLUME = {3},+ PAGES = {27--44},+ YEAR = {1980} }++@ARTICLE{saghein-1980,+ AUTHOR = "Anna {S\aa gvall Hein}",+ TITLE = "An Outline of a Computer Model of Finnish Word Recognition",+ JOURNAL = {{Fenno-Ugrica Suecana}},+ VOLUME = {3},+ PAGES = {7--26},+ YEAR = {1980} }++@article{pereira-warren,+ AUTHOR = "F. Pereira and D. Warren",+ TITLE = "Definite Clause Grammars for Language Analysis",+ JOURNAL = {Artificial {Intelligence}},+ YEAR = {1980},+ NUMBER = {13},+ PAGES = {231--278}+ }++@Article{patr,+ author = {L. Karttunen},+ title = {PATR}, + journal = ???,+ year = 1981,+ volume = 0,+ pages = 0+}++@Article{teitelbaum-reps-1981,+ author = "T. Teitelbaum and T. Reps",+ title = {The {Cornell} {Program} {Synthesizer}: a syntax-directed+ programming environment},+ journal = {Commun. {ACM}},+ year = "1981",+ volume = "24",+ number = "9",+ pages = {563-573}+}++@Book{barendregt-1981,+ author = "H. Barendregt",+ title = {{The Lambda Calculus. Its Syntax and Semantics}},+ publisher = "North-Holland",+ year = 1981+}++@Book{cooper,+ author = {R. Cooper},+ title = {Quantification and Syntactic Theory},+ publisher = {D. Reidel},+ year = {1981}+}++@INCOLLECTION{friedman,+ AUTHOR = "Friedman, J.",+ TITLE = "Expressing logical formulas in natural language",+ EDITOR = "J. Groenendijk and T. Janssen and M. Stokhof",+ BOOKTITLE = "Formal Methods in the Study of Language, Part 1",+ PUBLISHER = {Mathematisch Centrum},+ ADDRESS = {Amsterdam},+ YEAR = {1981}, + PAGES = {113-130}}++@article{kamp:drt,+ AUTHOR = {H. Kamp},+ TITLE = {{ A theory of truth and semantic representation}},+ EDITOR = {{J. Groenendijk, T. Janssen, and M. Stokhof}},+ BOOKTITLE = {{Formal Methods in the Study of Language, Part 1}},+ YEAR = {1981},+ PUBLISHER = {{Mathematisch Centrum, Amsterdam}},+ PAGES = {277--322}+ }++@Article{pereira,+ author = {H.~D. Warren and F. Pereira},+ title = {An Efficient Easily Adaptable System for Interpreting Natural + Language Queries},+ year = {1982},+ journal = {{Computational Linguistics}},+ volume = 8,+ pages = {110-122}+}++@Book{lfg,+ editor = "J. Bresnan",+ title = {{The Mental Representation of Grammatical Relations}}, + publisher = {{MIT Press}},+ year = 1982+}++@INCOLLECTION{mar82,+ AUTHOR = "{Martin-L\"{o}f}, Per",+ TITLE = "Constructive mathematics and computer programming",+ EDITOR = "Cohen and Los and Pfeiffer and Podewski",+ BOOKTITLE = "Logic, Methodology and Philosophy of Science VI",+ PUBLISHER = {North-Holland},+ ADDRESS = {Amsterdam},+ YEAR = {1982},+ PAGES = {153-175}}++@Article{metal,+ author = "G. Kahn and B. Lang and B. Mélèse and E. Morcos",+ title = "Metal: a formalism to specify formalisms",+ journal = {Science of {C}omputer {P}rogramming},+ year = 1983,+ volume = 3,+ pages = {151--188}+}++@PhdThesis{koskenniemi-1983,+ author = {Kimmo Koskenniemi},+ title = {{Two-Level Morphology: A General Computational Model for + Word-Form Recognition and Production}},+ school = {{University of Helsinki}},+ year = 1983+}++@Book{BarstowSandewall,+ author = {Barstow, D.~R., Shrobe, H.~E., and Sandewall, E.},+ title = {Interactive Programming Environments},+ publisher = {McGraw Hill},+ year = 1984+}++@Book{prolog,+ author = {W. F. Clocksin and C. S. Mellish},+ title = {{Programming in Prolog}},+ publisher = {Springer},+ year = {1984}+}++@book{martin-lof-1984,+ AUTHOR = {P. Martin-L\"{o}f},+ TITLE = {{Intuitionistic Type Theory}},+ ADDRESS = {Napoli},+ YEAR = {1984},+ PUBLISHER = {Bibliopolis}+}+@BOOK{curryfeys,+ AUTHOR = "Curry, H. B. and R. Feys",+ TITLE = "Combinatory Logic, Vol. 1",+ PUBLISHER = {North-Holland},+ ADDRESS = {Amsterdam},+ YEAR = {1958} }++@book{martin-lof:padova,+ AUTHOR = {P. Martin-L\"{o}f},+ TITLE = {{Intuitionistic Type Theory}},+ ADDRESS = {Napoli},+ YEAR = {1984},+ PUBLISHER = {Bibliopolis}+}++@BOOK{gazdar-1985,+ AUTHOR = "Gazdar, G. and E. Klein and G. Pullum and I. Sag",+ TITLE = "Generalized Phrase Structure Grammar",+ PUBLISHER = {Basil Blackwell},+ ADDRESS = {Oxford},+ YEAR = {1985} }++@InCollection{joshi,+ author = "A. Joshi",+ title = {Tree-Adjoining Grammars: How much context-sensitivity is required + to provide reasonable structural descriptions}, + booktitle = {{Natural Language Parsing}},+ year = 1985,+ editor = "D. Dowty and L. Karttunen and A. Zwicky",+ publisher = {Cambridge University Press},+ pages = {206--250}+}++@InProceedings{wadler,+ author = "P. Wadler",+ title = "How to replace failure by a list of successes",+ booktitle = {{Second International Conference on Functional + Programming Languages and Computer Architectures}},+ series = lncs,+ year = 1985,+ address = spv+}++@Book{shieber,+ author = "S. Shieber",+ title = {{An Introduction to Unification-Based Approaches to Grammars}},+ publisher = "University of Chicago Press",+ year = 1986+}++@book{constable,+ AUTHOR = {R. L. Constable},+ TITLE = {{Implementing Mathematics with the NuPRL Proof Development System}},+ YEAR = {1986},+ PUBLISHER = {Prentice-Hall}+}++@BOOK{ML-wik,+ AUTHOR = "{Wikstr\"{o}m}, {\AA ke}",+ TITLE = "Functional Programming Using Standard ML",+ PUBLISHER = {Prentice-Hall},+ ADDRESS = {London},+ YEAR = {1987} }++@book{pereira-shieber,+ AUTHOR = {F. Pereira and S. Shieber},+ TITLE = {{Prolog and Natural-Language Analysis}},+ ADDRESS = {Stanford},+ YEAR = {1987},+ PUBLISHER = {{CSLI}}+}++@inproceedings{TomitaCarbobell,+ author = {Masaru Tomita and+ Jaime G. Carbonell},+ title = {The Universal Parser Architecture for Knowledge-based Machine+ Translation},+ booktitle = {IJCAI},+ year = {1987},+ pages = {718-721},+ bibsource = {DBLP, http://dblp.uni-trier.de}+}++@Article{Ranta88,+ author = "Aarne Ranta",+ title = {Propositions as games as types},+ journal = {Synthese},+ year = {1988},+ volume = {76},+ pages = {377--395}+}++@Article{discont,+ author = "H. Uszkoreit",+ title = "German word order", + journal = ???,+ year = 1988,+ volume = ???,+ pages = ???+}++@Book{KRC,+ author = {Brian Kernighan and Dennis Ritchie},+ title = {{The C Programming Language}},+ publisher = {{Prentice Hall}},+ year = 1988,+ note = {Second Edition}+}++@INCOLLECTION{steedman,+ AUTHOR = "Steedman, M.",+ TITLE = "Combinators and grammars",+ EDITOR = "R. Oehrle and E. Bach and D. Wheeler",+ BOOKTITLE = "Categorial Grammars and Natural Language Structures",+ PUBLISHER = {D. Reidel},+ ADDRESS = {Dordrecht},+ YEAR = {1988}, + PAGES = {417-442}}++@book{aho-ullman,+ AUTHOR = {A. Aho and R. Sethi and J. Ullman},+ TITLE = {{Compilers: Principles, Techniques, and Tools}},+ YEAR = {1988},+ PUBLISHER = {{Addison-Wesley}}+}++@Article{frost,+ author = "R. Frost and J. Launchbury",+ title = "Constructing natural language interpreters + in a lazy functional language",+ journal = {The {Computer} {Journal}},+ year = 1989,+ volume = 32,+ number = 2,+ pages = {108--121}+}++@PHDTHESIS{muskens-diss,+ AUTHOR = {Muskens, R.},+ YEAR = 1989,+ TITLE = {Meaning and {P}artiality},+ SCHOOL = {University of Amsterdam}+}++@article{Hughes89,+ AUTHOR = {John Hughes},+ TITLE = {Why Functional Programming Matters},+ JOURNAL = {Computer Journal},+ VOLUME = {32},+ NUMBER = {2},+ PAGES = {98--107},+ YEAR = {1989}+}++@Article{abrusci,+ author = "M. Abrusci",+ title = {{Noncommutative Intuitionistic Linear Propositional Logic}},+ journal = {{Zeitschrift für Mathematische Logik und Grundlagen der Mathematik}},+ year = 1990,+ volume = 36,+ pages = {297--398}+}++@BOOK{nordstrom-al-1990,+ AUTHOR = "{Nordstr\"{o}m}, B. and K. Petersson and J. Smith",+ TITLE = "Programming in {Martin-L\"{o}f}'s Type Theory. An Introduction",+ PUBLISHER = {Clarendon Press},+ ADDRESS = {Oxford},+ YEAR = {1990} }++@BOOK{sml,+ AUTHOR = "R. Milner and M. Tofte and R. Harper",+ TITLE = {{Definition of Standard ML}},+ PUBLISHER = {MIT Press},+ YEAR = {1990} + }++@book{nordstrom:book,+ AUTHOR = {B. Nordstr{\"{o}}m and K. Petersson and J. M. Smith},+ TITLE = {{Programming in Martin-Löf's Type Theory. An Introduction}},+ YEAR = {1990},+ PUBLISHER = {Oxford University Press}+}++@inproceedings{abeille-joshi,+ author = {Abeill\'{e},, Anne and Schabes,, Yves and Joshi,, Aravind K.},+ title = {Using lexicalized tags for machine translation},+ booktitle = {Proceedings of the 13th conference on Computational linguistics},+ year = {1990},+ isbn = {952-90-2028-7},+ pages = {1--6},+ location = {Helsinki, Finland},+ doi = {http://dx.doi.org/10.3115/991146.991147},+ publisher = {Association for Computational Linguistics},+ address = {Morristown, NJ, USA},+ }++@inproceedings{shieber-schabes,+ author = {Stuart M. Shieber and+ Yves Schabes},+ title = {Synchronous Tree-Adjoining Grammars},+ booktitle = {COLING},+ year = {1990},+ pages = {253-258},+ ee = {http://acl.ldc.upenn.edu/C/C90/C90-3045.pdf},+ bibsource = {DBLP, http://dblp.uni-trier.de}+}+@article{chomsky-1956,+ author = {Noam Chomsky},+ title = {{Three models for the description of language}},+ journal = {{IRE Transactions on Information Theory}},+ volume = {2},+ year = {1956},+ pages = {113--124},+ note = {\url{http://www.chomsky.info/articles/195609--.pdf}},+ }++@ARTICLE{seki-al-1991,+ author= {H. Seki and T. Matsumura and M. Fujii and T. Kasami},+ title = "On Multiple Context-Free Grammars", + journal = {{Theoretical Computer Science}}, + volume = 88, + pages = {191--229}, + year = 1991+}++@Article{Ranta91a,+ author = "Aarne Ranta",+ title = "Constructing Possible Worlds",+ journal = "Theoria",+ volume = "57",+ number = "1--2",+ pages = "77--100",+ year = "1991"+}++@Article{hutton,+ author = "G. Hutton",+ title = "Higher-order functions for parsing",+ journal = {J. Functional Programming},+ year = 1992,+ volume = 2,+ number = 3,+ pages = {323--343}+}++@BOOK{alshawi-1992,+ AUTHOR = "Alshawi, H",+ TITLE = {{The Core Language Engine}},+ PUBLISHER = {{MIT Press}},+ ADDRESS = {Cambridge, Ma},+ YEAR = {1992} }++@TechReport{luo-pollack-1992,+ author = {Z. Luo and R. Pollack},+ title = {{LEGO Proof Development System}},+ institution = {University of {Edinburgh}},+ year = 1992+}++@BOOK{grevisse,+ AUTHOR = "Grevisse, Maurice",+ TITLE = "Le bon usage, 13me edition",+ PUBLISHER = {Duculot},+ ADDRESS = {Paris},+ YEAR = {1993} }++@Book{jones-partial,+ author = {N.D. Jones and C.K. Gomard and P. Sestoft},+ title = {{Partial Evaluation and Automatic Program Generation}},+ publisher = {Prentice-Hall},+ year = 1993+}++@InCollection{pentus,+ author = "M. Pentus",+ title = "Lambek grammars are context-free",+ booktitle = {{LICS}, {Utrecht}, {The} {Netherlands}},+ year = 1993,+ pages = {35--42}+}++@article{harper-al-1993,+ AUTHOR = {R. Harper and F. Honsell and G. Plotkin},+ TITLE = {{A Framework for Defining Logics}},+ JOURNAL = {{JACM}},+ VOLUME = {40},+ NUMBER = {1},+ YEAR = {1993},+ PAGES = {143--184}+}++@INPROCEEDINGS{Tapanainen94taggingaccurately,+ author = {Pasi Tapanainen and Atro Voutilainen},+ title = {Tagging accurately - Don't guess if you know},+ booktitle = {In Proceedings of ANLP '94},+ year = {1994},+ pages = {47--52}+}++@Article{kaplan-kay,+ author = "R. Kaplan and M. Kay",+ title = {{Regular Models of Phonological Rule Systems}},+ journal = {{Computational Linguistics}},+ year = 1994,+ volume = 20,+ pages = {{331--380}}+}++@Book{hpsg,+ author = "C. Pollard and I. Sag",+ title = {{Head-Driven Phrase Structure Grammar}}, + publisher = {{University of Chicago Press}},+ year = 1994+}++@Book{rosetta-1994,+ author = {M.~T. Rosetta},+ title = {Compositional Translation},+ publisher = "Kluwer",+ address = "Dordrecht",+ year = 1994+}++@PhdThesis{magnusson-1994,+ author = {L. Magnusson},+ title = {The Implementation of ALF - a Proof Editor based on + Martin-L\"of's Monomorphic Type Theory with Explicit+ Substitution},+ school = {Department of Computing Science, Chalmers University of+ Technology and University of G\"oteborg},+ year = {1994}+}++@book{morrill,+ AUTHOR = {G. Morrill},+ TITLE = {{Type Logical Grammar}},+ YEAR = {1994},+ PUBLISHER = {Kluwer}+}++@incollection{debruijn-1994,+ TITLE = {{Mathematical Vernacular: + a Language for Mathematics with Typed Sets}},+ AUTHOR = {N. G. de Bruijn},+ EDITOR = {R. Nederpelt},+ BOOKTITLE = {{Selected Papers on Automath}},+ PUBLISHER = {{North-Holland Publishing Company}},+ PAGES = {865--935},+ YEAR = {1994}+ }++@inproceedings{magnusson-nordstrom-1994,+ AUTHOR = {L. Magnusson and B. Nordstr\"{o}m},+ BOOKTITLE = {{ Types for Proofs and Programs}},+ PUBLISHER = {Springer-Verlag},+ SERIES = LNCS,+ VOL = {806},+ PAGES = {213-237},+ TITLE = {{The ALF proof editor and its proof engine}}, + ADDRESS = {Nijmegen},+ YEAR = {1994}+ }++@inproceedings{magnusson-nordstr,+ AUTHOR = {L. Magnusson and B. Nordstr\"{o}m},+ BOOKTITLE = {{Types for Proofs and Programs}},+ PUBLISHER = {Springer},+ SERIES = {LNCS 806},+ PAGES = {213--237},+ TITLE = {The {ALF} proof editor and its proof engine}, + YEAR = {1994}+ }++@inproceedings{nlyacc,+ author = {Masayuki Ishii and Kazuhisa Ohta and Hiroaki Saito},+ title = {An efficient parser generator for natural language},+ booktitle = {Proceedings of the 15th conference on Computational linguistics},+ year = {1994},+ pages = {417--420},+ location = {Kyoto, Japan},+ doi = {http://dx.doi.org/10.3115/991886.991959},+ publisher = {Association for Computational Linguistics},+ address = {Morristown, NJ, USA},+ }++@misc{kamp-al-1994,+ author = {H. Kamp and R. Crouch and J. van Genabith and R. Cooper and M. Poesio + and J. van Eijck and J. Jaspars and M. Pinkal and E. Vestre and S. Pulman}, + year = 1994,+ title = "Specification of Linguistic Coverage",+ note = {{FRACAS Deliverable D2}} + }++@Article{hoas,+ author = "J. Despeyroux",+ title = "Higher-Order Abstract Syntax", + journal = ???,+ year = 1995,+ volume = ???,+ pages = ???+}++@Book{RussellNorvig95,+ author = "Stuart J. Russell and Peter Norvig",+ title = "Artificial Intelligence. {A} Modern Approach",+ publisher = "Prentice-Hall",+ address = "Englewood Cliffs",+ year = "1995",+ url = "http://www.cs.berkeley.edu/~russell/aima.html"+}++@InProceedings{coscoy-al-1995,+ author = "Y. Coscoy and G. Kahn and L. Thery",+ title = "Extracting text from proofs",+ series = lncs,+ volume = "902",+ pages = {109--123},+ year = "1995",+ booktitle = "Proc.\ {Second} {Int.} {Conf.} on + {Typed} {Lambda} {Calculi} and {Applications}",+ editor = "M. Dezani-Ciancaglini and G. Plotkin"+}++@InProceedings{jones-hudak,+ author = "M. Jones and P. Hudak",+ title = "Using Types to Parse Natural Language",+ booktitle = {{Proceedings of the Glasgow Workshop on Functional Programming}},+ series = {LNCS},+ year = 1995,+ address = spv+}++@misc{minnen95offline,+ author = "G. Minnen and D. Gerdemann and T. Gotz",+ title = "Off-line optimization for Earleystyle hpsg processing",+ text = "G. Minnen, D. Gerdemann, and T. Gotz. Off-line optimization for Earleystyle+ hpsg processing. In Proc. of the 7th Conference of the eacl, Dublin, 1995.",+ year = "1995",+ url = "citeseer.ist.psu.edu/article/minnen95offline.html" }++@Manual{JavaCollection,+ title = {The Java Collection Framework}, + year = {1995--1999},+ author = {{Sun Microsystems Inc.}},+ note = {\texttt{http://java.sun.com/j2se/1.3/docs/guide/collections/}}+ }++@Article{coquand-typecheck,+ author = "T. Coquand",+ title = "An Algorithm for Type Checking Dependent Types",+ journal = "Science of {Computer} {Programming}",+ year = 1996,+ volume = 26,+ pages = {167-177}+}++@Article{hudak,+ author = "P. Hudak",+ title = "Building domain-specific embedded languages",+ journal = "{ACM} {Computing} {Surveys}",+ year = 1996,+ volume = 28,+ number = 4+}++@InProceedings{DahnWolf96,+ author = "Bernd I. Dahn and Andreas Wolf",+ title = "Natural Language Representation and Combination of+ Automatically Generated Proofs",+ editor = "Franz Baader and Klaus U.~Schulz",+ booktitle = "Frontiers of Combining Systems: Proc.\ 1st+ International Workshop, Munich, Germany",+ publisher = "Kluwer Academic Publishers",+ series = "Applied Logic",+ month = mar,+ year = "1996",+ pages = "175--192"+}++@InProceedings{coscoy:textproofs,+ AUTHOR = {Y. Coscoy and G. Kahn and L. Th\'ery},+ TITLE = {Extracting Text from Proof}, + BOOKTITLE = {{Proceedings of the International Conference on Typed Lambda+ Calculus and Applications (TLCA), Edinburgh}},+ EDITOR = {M. Dezani and G. Plotkin},+ SERIES = lncs,+ NUMBER = {902},+ PUBLISHER = {Springer-Verlag},+ YEAR = {1996}+ }++@TechReport{NeculaLee96,+ author = "G. C. Necula and P. Lee",+ title = "Proof-Carrying Code",+ institution = "School of Computer Science, Carnegie Mellon+ University, Pittsburgh, USA",+ year = "1996",+ number = "CMU-CS-96-165",+ month = nov,+ url = "http://www.cs.cmu.edu/~necula/tr96-165.ps.gz"+}++@misc{melchuk,+ AUTHOR = {I. Mel'cuk},+ TITLE = {{Vers une linguistique Sens-Texte. Le\c{c}on inaugurale}},+ YEAR = {1997},+ PUBLISHER = {{Coll\`ege de France}},+ address = {Paris},+ note = {\url{http://olst.ling.umontreal.ca/pdf/MelcukColldeFr.pdf}}+}++@Article{huet-zipper,+ author = "G. Huet",+ title = {The {Zipper}}, + journal = JFP,+ year = 1997,+ volume = 7,+ number = 5,+ pages = {549--554}+}++@Book{bescherelle,+ author = "Bescherelle",+ title = "La conjugaison pour tous",+ publisher = "Hatier",+ year = 1997+}++@Book{jasmin,+ author = {J. Meyer and T. Downing},+ title = {{Java Virtual Machine}},+ publisher = {O'Reilly},+ year = {1997}+}++@InProceedings{Necula97,+ author = "G. C. Necula",+ title = {{Proof-Carrying Code}},+ booktitle = {{Proc.\ 24th {A}{C}{M} Symposium on Principles of+ Programming Languages, {Paris}, {France}}},+ year = "1997",+ url = "http://www.cs.cmu.edu/~necula/popl97.ps.gz",+ pages = "106--119",+ publisher = "ACM Press"+}++@InProceedings{coscoy-1997,+ author = {Y. Coscoy},+ title = {A natural language explanation of formal proofs},+ booktitle = {Logical Aspects of Computational Linguistics},+ pages = {149--167},+ year = 1997,+ editor = {C. {Retor\'e}},+ address = {Heidelberg},+ publisher = {Springer},+ series = lncs,+ number= 1328+}++@article{kay-1997, + AUTHOR = {M. Kay},+ TITLE = {{The Proper Place of Men and Machines in Language Translation}},+ JOURNAL = {{Machine Translation}},+ YEAR = {1997},+ NUMBER = {1--2},+ VOLUME = {12},+ PAGES = {3--23}+ }++@inproceedings{Thompson97a,+ author = {Simon Thompson},+ title = {{\em Where do I begin?} + {A} problem solving approach to teaching + functional programming},+ month = sep,+ year = {1997},+ pages = {},+ url = {http://www.cs.ukc.ac.uk/pubs/1997/208},+ booktitle = {First International Conference on Declarative Programming Languages in Education},+ editor = {Krzysztof Apt and Pieter Hartel and Paul Klint},+ publisher = spv,+ volume = "1292",+ pages = "323--337",+ series = lncs+ } ++@Book{appel-1998,+ author = {A. Appel},+ title = {{Modern Compiler Implementation in ML}},+ publisher = {Cambridge University Press},+ year = {1998}+}++@Book{appel-java,+ author = {A. Appel},+ title = {{Modern Compiler Implementation in Java}},+ publisher = {Cambridge University Press},+ year = {1998}+}++@InProceedings{power-scott-1998,+ author = {R. Power and D. Scott},+ title = {Multilingual authoring using feedback texts},+ booktitle = {COLING-ACL 98},+ year = 1998,+ address = {Montreal, Canada}+}++@InProceedings{semBNF,+ author = {{P. M\"aenp\"a\"a}},+ title = {{Semantic BNF}},+ booktitle = "Types for Proofs and Programs, TYPES'96", + series = lncs,+ publisher = spv,+ volume = "1512",+ pages = "196--215",+ year = "1998",+ editor = "E. Gimenez and C. Paulin-Mohring"+}++@InProceedings{wysiwym,+ author = {R. Power and D. Scott},+ title = {Multilingual authoring using feedback texts},+ booktitle = {{COLING}-{ACL}},+ year = 1998+}++@PhdThesis{carlsson98:fudgets_thesis,+ author = {M. Carlsson and T. Hallgren},+ title = {{Fudgets --- Purely Functional Processes with+ applications to Graphical User Interfaces}},+ booktitle = {{Fudgets --- Purely Functional Processes with+ applications to Graphical User Interfaces}},+ school = {Department of Computing Science, Chalmers University+ of Technology},+ year = 1998,+ address = {S-412 96 Göteborg, Sweden},+ month = {March},+ documentURL = "http://www.cs.chalmers.se/~hallgren/Thesis/"+}++@PhdThesis{fudgets,+ author = {M. Carlsson and T. Hallgren},+ title = {{Fudgets---Purely Functional Processes with+ applications to Graphical User Interfaces}},+ school = {{Department of Computing Science, Chalmers University+ of Technology}},+ year = 1998,+ documentURL = "http://www.cs.chalmers.se/~hallgren/Thesis/"+}++@book{stroustrup,+ AUTHOR = {B. Stroustrup},+ TITLE = {{The C++ Programming Language, Third Edition}},+ YEAR = {1998},+ PUBLISHER = {{Addison-Wesley}}+}++@inproceedings{augustsson:cayenne,+ AUTHOR = {L. Augustsson},+ TITLE = {{Cayenne --- a language with dependent types}},+ BOOKTITLE = {Proc. of the International Conference on Functional Programming (ICFP'98)},+ PUBLISHER = {ACM Press},+ MONTH = {September},+ YEAR = {1998}+ }++@inproceedings{cayenne,+ AUTHOR = {L. Augustsson},+ TITLE = {{Cayenne---a language with dependent types}},+ BOOKTITLE = {Proc. of {ICFP'98}},+ PUBLISHER = {ACM Press},+ MONTH = {September},+ YEAR = {1998}+ }++@unpublished{agda-homepage,+ author = "C. Coquand",+ title = "{{AGDA Homepage}}",+ year = 1998,+ howpublished = {Online document},+ note = {\verb!http://www.cs.chalmers.se/~catarina/agda/!} ,+ documenturl = "http://www.cs.chalmers.se/~catarina/agda/"+ }++@Article{Holt99,+ author = {Alexander Holt},+ title = {Formal verification with natural language specifications: + guidelines, experiments and lessons so far},+ journal = {South African Computer Journal},+ year = {1999},+ volume = {24},+ pages = {253-257},+ month = nov,+ url = {http://www.ltg.ed.ac.uk/prosper/papers/holt-1999-fvn/ps/},+}++@BOOK{CAML,+ AUTHOR = "P. Weis and X. Leroy",+ TITLE = {{Le langage Caml}},+ PUBLISHER = {Dunod},+ ADDRESS = "Paris",+ YEAR = {1999} + }++@Book{LindholmYellinJVM,+ editor = {T. Lindholm and F. Yellin},+ title = {{The Java Virtual Machine Specification Second Edition}},+ publisher = {{Addison-Wesley}},+ year = {{1999}}+}++@Book{warmer-kleppe-1999,+ author = "J. Warmer and A. Kleppe",+ title = {{The Object Constraint Language: Precise Modelling with UML}},+ publisher = {{Addison-Wesley}},+ year = "1999"+}++@INPROCEEDINGS{isar,+ AUTHOR = {M. Wenzel},+ TITLE = {{Isar - a Generic Interpretative Approach to Readable Formal Proof Documents}},+ BOOKTITLE = {{Theorem Proving in Higher Order Logics, TPHOLs'99}},+ YEAR = {1999},+ series = lncs,+ volume = {1690},+ EDITOR = {Y. Bertot and G. Dowek and A. Hirschowitz and C. Paulin and L. Th\'{e}ry}+}++@InProceedings{HKG99,+ author = {Alexander Holt and Ewan Klein and Claire Grover},+ title = {Natural language for hardware verification: + semantic interpretation and model checking},+ booktitle = {Proc.\ ICoS-1: Inference in Computational Semantics, Amsterdam},+ pages = {133-137},+ year = {1999},+ publisher = {Institute for Logic, Language and Computation, + University of Amsterdam},+ url = {http://www.ltg.ed.ac.uk/prosper/papers/holt-1999-nlh/ps/}+}++@InProceedings{HoltEwan99,+ author = {Alexander Holt and Ewan Klein},+ title = {A semantically-derived subset of {E}nglish for + hardware verification},+ booktitle = {Proc.\ 37th Annual Meeting of the Association for + Computational Linguistics: Maryland, USA},+ pages = {451-456},+ year = {1999},+ publisher = {Association for Computational Linguistics},+ url = {\texttt{http://www.ltg.ed.ac.uk/prosper/papers/holt-1999-sds/ps/}}+}++@InProceedings{HoltEwan99,+ author = {Alexander Holt and Ewan Klein},+ title = {A semantically-derived subset of {E}nglish for + hardware verification},+ booktitle = {Proc.\ Ann.\ Meeting Ass.\ for + Comp.\ Ling.},+ pages = {451--456},+ year = {1999},+ url = {http://www.ltg.ed.ac.uk/prosper/papers/holt-1999-sds/ps/}+}++@InProceedings{coquand1999,+ author = {C. Coquand and T. Coquand},+ title = {Structured Type Theory},+ booktitle = {Workshop on Logical Frameworkds and Meta-languages},+ year = 1999,+ address = {Paris, France}+}++@InProceedings{coquand:stt-lfm99,+ author = {C. Coquand and T. Coquand},+ title = {Structured Type Theory},+ booktitle = {Workshop on Logical Frameworkds and Meta-languages},+ year = 1999,+ address = {Paris, France},+ month = {Sep}+}++@InProceedings{luo-callaghan-1999,+ author = {Z. Luo and P. Callaghan},+ title = {Mathematical Vernacular and Conceptual Well-Formedness in Mathematical+ Language},+ booktitle = {{Logical Aspects of Computational Linguistics (LACL)}} ,+ year = 1999,+ editor = {A. Lecomte and F. Lamarche and G. Perrier},+ series = {{LNCS/LNAI}},+ volume = 1582,+ pages = {231--250}+}++@Misc{ALF-family-homepage,+ author = {},+ title = {{Implementation of Proof Editors}},+ howpublished = + {\verb!http://www.cs.chalmers.se/ComputingScience/Research/Logic/!},+ documentURL = "http://www.cs.chalmers.se/ComputingScience/Research/Logic/",+ year = 1999+}+++@Book\{bertot-casteran-2004,+ author = "Bertot, Yves and Cast\'eran, Pierre",+ title = "Interactive Theorem Proving and Program Development. Coq'Art: The Calculus of Inductive Constructions",+ series = "Texts in Theoretical Computer Science",+ year = "2004",+ publisher = "Springer Verlag",+ url = "http://www.labri.fr/publications/l3a/2004/BC04"+}++@Misc{LEGO-new-homepage,+ author = {D. Aspinall},+ title = {{The LEGO Proof Assistant}},+ howpublished = {\verb!http://www.dcs.ed.ac.uk/home/lego/!},+ documentURL = "http://www.dcs.ed.ac.uk/home/lego/",+ year = 1999+}++@Misc{coq,+ author = {{The Coq Development Team}},+ title = {{The Coq Proof Assistant Reference Manual}},+ howpublished = {\verb6pauillac.inria.fr/coq/6},+ documentURL = "http://pauillac.inria.fr/coq/",+ year = 1999+}++@Misc{coq-homepage,+ author = {Coq Development Team},+ title = {{Coq Homepage}},+ howpublished = {\verb!http://pauillac.inria.fr/coq/!},+ documentURL = "http://pauillac.inria.fr/coq/",+ year = 1999+}++@book{mueller,+ author = {Stefan Müller},+ title = {{Deutsche Syntax Deklarativ}},+ year = 1999,+ publisher = {{Max Niemeyer Verlag}}+}++@misc{bohlin-trindi,+ author = {P. Bohlin and J. Bos and S. Larsson and + I. Lewin and C. Matheson and D. Milward}, + year = 1999,+ title = {Survey of Existing Interactive Systems},+ note = {Trindi deliverable D1.3, Gothenburg University}+ }++@BOOK{steedman-book,+ AUTHOR = {M. Steedman},+ TITLE = "The Syntactic Process",+ PUBLISHER = {{The MIT Press}},+ YEAR = {2000} }++@ARTICLE{copestake,+ AUTHOR = "A. Copestake and D. Flickinger",+ TITLE = {{An open-source grammar development environment and broad-coverage English grammar using HPSG}},+ JOURNAL = {{Proceedings of the Second conference on Language Resources and Evaluation (LREC-2000)}},+ YEAR = {2000} +}++@Article{godis,+ author = "S. Larsson and D. Traum",+ title = {{Information state and dialogue management in the + TRINDI Dialogue Move Engine Toolkit}},+ journal = {{Natural Language Engineering}},+ year = 2000,+ volume = 0,+ pages = 0+}++@BOOK{cle2,+ AUTHOR = {M. Rayner and D. Carter and P. Bouillon and V. Digalakis and + M. Wirén},+ TITLE = {{The Spoken Language Translator}},+ PUBLISHER = {{Cambridge University Press}},+ ADDRESS = {Cambridge},+ YEAR = {2000} }++@Book{jurafsky,+ author = "D. Jurafsky and J. Martin",+ title = {{Speech and Language Processing}}, + publisher = {{Prentice Hall}},+ year = 2000+}++@InProceedings{BaarHaehnle00a,+ author = {Thomas Baar and Reiner H\"ahnle},+ title = {An Integrated Metamodel for {OCL} Types},+ booktitle = {Proc.\ OOPSLA 2000 Workshop Refactoring the UML: + In Search of the Core, Minneapolis/MI, USA},+ year = {2000},+ editor = {Robert France and Bernhard Rumpe and Jonathan Whittle},+ month = oct+}++@Manual{Ranta00a,+ title = {PESCA---A Proof Editor for Sequent Calculus},+ author = {Aarne Ranta},+ organization = {Department of Computing Science, + Chalmers University of Technology and University of Gothenburg},+ address = {Gothenburg},+ month = mar,+ year = {2000},+ note = {Program and documentation.+ URL: \texttt{www.cs.chalmers.se\~{}aarne/pesca/}}+}++@Manual{UML1.3-specification,+ key = {UML 1.3},+ title = {Unified Modelling Language Specification, version 1.3},+ organization = {Object Modeling Group},+ month = mar,+ year = 2000,+ url = {http://cgi.omg.org/cgi-bin/doc?formal/00-03-01.ps.gz},+ note = {OMG document formal/00-03-01. {URL:} + \texttt{http://cgi.omg.org/cgi-bin/doc?formal/00-03-01.ps.gz}}+}+@TechReport{LBR00,+ author = "G. T. Leavens and A. L. Baker and C. Ruby",+ title = "Preliminary Design of {JML}: A Behavioral Interface+ Specification Language for {Java}",+ institution = "Iowa State University, Department of Computer+ Science",+ year = "2000",+ number = "98-06i",+ month = feb,+ note = "URL: \texttt{ftp://ftp.cs.iastate.edu/pub/techreports/TR98-06/TR.ps.gz}",+ url = "ftp://ftp.cs.iastate.edu/pub/techreports/TR98-06/TR.ps.gz"+}++@Misc{Isabelle-homepage,+ author = {Isabelle},+ title = {{Isabelle Homepage}},+ howpublished = {\verb!http://www.cl.cam.ac.uk/Research/HVG/Isabelle/!},+ documentURL = "http://www.cl.cam.ac.uk/Research/HVG/Isabelle/index.html",+ year = 2000+}++@Misc{huet-sanskrit,+ author = "G. Huet",+ title = "Sanskrit site",+ howpublished = "Program and documentation, + \verb6http://pauillac.inria.fr/~huet/SKT/6", + documentURL = "\verb6http://pauillac.inria.fr/~huet/SKT/index.html6",+ year = 2000+}++@Misc{huet-sanskrit-short,+ author = "G. Huet",+ title = "Sanskrit site",+ howpublished = {\verb6http://pauillac.inria.fr/~huet/SKT/6}, + year = 2000+}++@Misc{maple-homepage,+ author = {Waterloo Maple Inc.},+ title = {{Maple Homepage}},+ howpublished = {\verb!http://www.maplesof.com/!},+ documentURL = "http://www.maplesof.com/",+ year = 2000+}++@Misc{wolfram-2000,+ author = {Wolfram Research, Inc.},+ title = {{Mathematica Homepage}},+ howpublished = {\url{http://www.wolfram.com/products/mathematica/}},+ documentURL = "http://www.wolfram.com/products/mathematica/",+ year = 2000+}++@PhdThesis{coscoy-2000,+ author = {Y.\ Coscoy},+ title = {Explication textuelle de preuves pour le calcul des+ constructions inductives},+ school = {{Universit\'e de Nice-Sophia-Antipolis}},+ year = 2000+}++@misc{alfa-homepage,+ author = {T. Hallgren},+ year = {2000},+ title = {{Home Page of the Proof Editor Alfa}},+ howpublished = {\verb!http://www.cs.chalmers.se/~hallgren/Alfa/!},+ documentURL = {http://www.cs.chalmers.se/~hallgren/Alfa/}+ }++@unpublished{XML,+ title = {{Extensible Markup Language (XML)}},+ author = {{The World Wide Web Consortium}},+ howpublished = {Online document},+ year = {2000},+ note = {\verb!http://www.w3.org/XML/!}+ }++@Book{Ranta01a,+ author = {Sara Negri and Jan von Plato},+ title = {Structural Proof Theory},+ publisher = {Cambridge University Press},+ year = {2001, to appear},+ note = {Appendix C ``PESCA---A Proof Editor for Sequent Calculus'' + by Aarne Ranta}+}++@Book{Sommerville01,+ author = "Ian Sommerville",+ title = "Software Engineering",+ publisher = "Addison-Wesley",+ year = "2001",+ edition = "6th"+}++@Book{stallman-2001,+ author = {Richard Stallman},+ title = {{Using and Porting the GNU Compiler Collection}},+ publisher = {{Free Software Foundation}},+ year = 2001,+ isbn_issn = {ISBN 0-595-10035-X}+}++@INPROCEEDINGS{muskens-lg,+ AUTHOR = {R. Muskens},+ TITLE = {Lambda {G}rammars and the {S}yntax-{S}emantics+ {I}nterface},+ BOOKTITLE = {Proceedings of the Thirteenth Amsterdam Colloquium},+ PAGES = {150--155},+ YEAR = {2001},+ EDITOR = {van Rooy, R. and Stokhof, M.},+ note = {\url{http://let.uvt.nl/general/people/rmuskens/pubs/amscoll.pdf}},+ PS = {amscoll.ps},+ PDF = {amscoll.pdf},+ ADDRESS = {Amsterdam}+}++@Misc{UMI,+ author = {{Union Mundial pro Interlingua}},+ title = {{Interlingua Homepage}},+ howpublished = {\url{http://www.interlingua.com/}},+ url = {http://www.interlingua.com/},+ year = {2001}+}++@Misc{happy,+ author = {S. Marlow},+ title = {{Happy, The Parser Generator for Haskell}},+ note = {\verb6http://www.haskell.org/happy/6},+ year = 2001+}++@PhdThesis{fiedler,+ author = {A. Fiedler},+ title = {{User-Adaptive Proof Explanation}},+ school = {{Universität des Saarlandes}},+ year = 2001+}++@inproceedings{Dow:Hoc:Gaw:01,+ title = {{Practical Issues in Compiling Typed Unification Grammars + for Speech Recognition}},+ author = {J. Dowding and B. A. Hockey and J. M. Gawron+ and C. Culy},+ booktitle = {{ACL 2001}},+ address = {{Toulouse, France}},+ year = 2001+}++@inproceedings{degroote-acg,+ title = {{Towards Abstract Categorial Grammars}},+ author = {Ph. de Groote},+ booktitle = {{Association for Computational Linguistics, + 39th Annual Meeting and 10th Conference of the European Chapter, Toulouse, France}},+ pages = {148--155},+ note = {\url{http://www.loria.fr/~degroote/papers/acl01.pdf}},+ year = {2001}+}++@unpublished{boeing,+ title = {{Boeing Simplified English Checker}},+ author = {{The Boeing Company}},+ howpublished = {Online document},+ year = {2001},+ note = {\verb!http://www.boeing.com/assocproducts/sechecker/!}+ }++@article{minimal-recursion,+ author = "Copestake, A. and D. Flickinger and C. Pollard and I. Sag",+ title = "Minimal Recursive Semantics: An Introduction",+ journal = "Language and Computation", + volume = 1, + year = 2001,+ pages = {1--47}+ }+++@InProceedings{butt,+ author = {M. Butt and H. Dyvik and T. Holloway King and H. Masuichi + and C. Rohrer},+ title = {{The Parallel Grammar Project}},+ booktitle = {{COLING 2002, Workshop on Grammar Engineering and Evaluation}},+ pages = {1--7},+ note = {\url{http://www2.parc.com/isl/groups/nltt/pargram/buttetal-coling02.pdf}},+ year = {2002}+}++@InProceedings{degroote02,+ author = {Ph. de Groote},+ title = {{Tree-Adjoining Grammars as Abstract Categorial Grammars}},+ booktitle = {{TAG+6, Proceedings of the sixth International Workshop+ on Tree Adjoining Grammars and Related Frameworks}},+ pages = {145--150},+ publisher = {Universit\`a di Venezia},+ year = {2002}+}++@Misc{Isabelle-Paulson,+ author = "L. Paulson",+ title = {{The Isabelle Reference Manual}},+ note = {{With contributions by T. Nipkow and M. Wenzel}},+ howpublished = {Available at the Isabelle homepage \verb!http://www.cl.cam.ac.uk/Research/HVG/Isabelle/!},+ documentURL = "http://www.cl.cam.ac.uk/Research/HVG/Isabelle/dist/Isabelle2002/doc/ref.pdf",+ year = 2002+}++@Misc{nuance,+ author = {{Nuance Communications}},+ title = {{Nuance}},+ note = {\url{http://www.nuance.com}},+ year = 2002+}++@Misc{twelf,+ author = {F. Pfenning},+ title = {{The Twelf Project}},+ howpublished = {\verb!http://www-2.cs.cmu.edu/~twelf!},+ documentURL = {"http://www-2.cs.cmu.edu/~twelf"},+ year = {2002}+}++@book{CopestakeLKB,+ AUTHOR = {A. Copestake},+ TITLE = {{Implementing Typed Feature Structure Grammars}},+ YEAR = {2002},+ PUBLISHER = {{CSLI Publications}}+}++@misc{htk,+ author = {Steve Young and Gunnar Evermann and Dan Kershaw and Gareth+ Moore and Julian Odell and Dave Ollason and Dan Povey and Valtcho+ Valtchev and Phil Woodland},+ title = {{The HTK Book, Version 3.2}},+ year = 2002,+ note = {{Cambridge University Engineering Dept, December 2002},+ \url{http://www.htk.eng.cam.ac.uk.}}+}++@phdthesis{larsson02:issue-based,+ author = {Larsson, Staffan },+ citeulike-article-id = {1177735},+ keywords = {dialogue, godis},+ posted-at = {2007-03-20 16:32:36},+ priority = {2},+ school = {G\"{o}teborg University},+ title = {{I}ssue-based {D}ialogue {M}anagement},+ year = {2002}+}++@unpublished{huet-trie,+ author = {G. Huet},+ title = {{The Zen Computational Linguistics Toolkit}}, + howpublished = {{ESSLLI Summer School, Trento}},+ note = {\verb!http://pauillac.inria.fr/~huet/!},+ year = 2002+}++@unpublished{lkb,+ title = {{The LKB System}},+ author = {Ann Copestake},+ howpublished = {Online document},+ year = {2002},+ note = {Available on-line in \verb!http://www-csli.stanford.edu/~aac/lkb.html!}+ }++@book{karttunen-beesley,+ AUTHOR = {K. Beesley and L. Karttunen},+ TITLE = {{Finite State Morphology}},+ YEAR = {2003},+ PUBLISHER = {{CSLI Publications}}+}++@techreport{KeY2003,+ author = {Wolfgang Ahrendt and Thomas Baar and + Bernhard Beckert and Richard Bubel and+ Martin Giese and Reiner H\"ahnle and+ Wolfram Menzel and Wojciech Mostowski and+ Andreas Roth and Steffen Schlager and+ Peter H. Schmitt},+ title = {The KeY Tool},+ institution = {Department of Computing Science, Chalmers University+ and G\"oteborg University, G\"oteborg, Sweden},+ type = {Technical Report in Computing Science No.\ 2003-5},+ month = feb, + year = {2003}+}++@ARTICLE{lingo-redwoods,+ AUTHOR = {S. Oepen and D. Flickinger and K. Toutanova and C. D. Manning},+ TITLE = {{LinGO Redwoods, A Rich and Dynamic Treebank for HPSG}},+ JOURNAL = {{Research on Language and Computation}},+ volume = {2},+ pages = {575--596},+ note = {\url{http://www.springerlink.com/content/t851781443373812/}},+ YEAR = {2004} +}++@Book{doets-eijck,+ author = {K. Doets and J. van Eijck},+ title = {{The Haskell Road to Logic, Maths and Programming}},+ publisher = {College Publications},+ year = {2004}+}++@INPROCEEDINGS{pollard-hog,+ AUTHOR = {C. Pollard},+ TITLE = {{Higher-Order Categorical Grammar}},+ BOOKTITLE = {{Proceedings of the + Conference on Categorial Grammars (CG2004), Montpellier, France}},+ PAGES = {340--361},+ YEAR = {2004},+ note = {\url{http://www.ling.ohio-state.edu/~hana/hog/pollard2004-CG.pdf}},+ EDITOR = {M. Moortgat}+}++@Misc{Happy-GLR,+ author = {P. Callaghan and B. Medlock},+ title = {{Happy-GLR}},+ note = {\verb6http://www.dur.ac.uk/p.c.callaghan/happy-glr/6},+ year = 2004+}++@Misc{owl,+ author = {Mike Dean and Guus Schreiber},+ title = {{OWL Web Ontology Language Reference}},+ note = {\url{http://www.w3.org/TR/owl-ref/}},+ year = 2004+}++@inproceedings{bos-steedman,+ title = {{Wide-Coverage Semantic Representations from a CCG Parser}},+ author = {J. Bos and S. Clark and M. Steedman and J. Curran and J. Hockenmaier},+ booktitle = {{Coling 2004}},+ note = {\url{http://www.iccs.inf.ed.ac.uk/~stevec/papers/bos_etal.pdf}},+ year = {2004}+}++@inproceedings{wiedijk-2004,+ AUTHOR = {F. Wiedijk},+ BOOKTITLE = {{Types for Proofs and Programs}},+ PUBLISHER = {Springer},+ SERIES = {LNCS 3085},+ editors = {S. Berardi and M. Coppo and F. Damiani},+ PAGES = {378--393},+ TITLE = {{Formal Proof Sketches}}, + YEAR = {2004}+ }++@techreport{xhtml+voice,+ author = {Axelsson, Jonny and Cross, Chris and Ferrans, Jim and McCobb, Gerald and Raman, T. V. and Wilson, Les },+ citeulike-article-id = {1177339},+ institution = {{VoiceXML} Forum},+ keywords = {voicexml, web, xhtml-voice},+ posted-at = {2007-03-20 12:50:18},+ priority = {0},+ title = {{XHTML+Voice} Profile 1.2},+ type = {Specification},+ url = {http://www.voicexml.org/specs/multimodal/x+v/12/},+ year = {2004}+}++@unpublished{eclipse,+ title = {{Eclipse Homepage}},+ author = {{Eclipse.org}},+ howpublished = {Online document},+ year = {2004},+ note = {\verb!http://www.eclipse.org/!}+ }++@unpublished{together,+ title = {{Together}},+ author = {{Borland Software Corporation}},+ howpublished = {Online document},+ year = {2004},+ note = {\verb!http://www.borland.com/together/!}+ }++@ARTICLE{huet-2005,+ AUTHOR = "Gerard Huet",+ TITLE = {{A Functional Toolkit for Morphological and Phonological Processing, Application to a Sanskrit Tagger}},+ JOURNAL = {{The Journal of Functional Programming}},+ pages={573--614},+ volume={15(4)},+ YEAR = {2005} }++@INPROCEEDINGS{claessen-equinox,+ AUTHOR = {K. Claessen},+ TITLE = {{Equinox, A New Theorem Prover for Full First-Order Logic with Equality}},+ BOOKTITLE = {{Dagstuhl Seminar 05431 on Deduction and Applications}},+ note = {\url{http://www.cs.chalmers.se/~koen/pubs/entry-dagstuhl05-equinox.html}},+ YEAR = {2005}+}++@Misc{nuance-bevocal,+ author = {{Bevocal Inc.}},+ title = {{Nuance GSL Grammar Format}},+ note = {\url{http://cafe.bevocal.com/docs/grammar/gsl.html}},+ year = 2005+}++@inproceedings{bender,+ author = {Bender, Emily M. and Flickinger, Dan},+ title = {Rapid Prototyping of Scalable Grammars: + Towards Modularity in Extensions to a Language-Independent Core},+ booktitle = {Proceedings of the 2nd International Joint Conference on + Natural Language Processing IJCNLP-05 (Posters/Demos)},+ note = {\url{http://faculty.washington.edu/ebender/papers/modules05.pdf}},+ address = {Jeju Island, Korea},+ year = 2005+}++@inproceedings{carlson-2005,+ title = {{Inducing a Morphological Transducer from Inflectional Paradigms}},+ author = {Lauri Carlson},+ booktitle = {{Inquiries into Words, Constraints and Contexts.+ Festschrift for Kimmo Koskenniemi on his 60th Birthday}},+ publisher = {{CSLI}},+ year = 2005+}++@Article{frost-survey,+ author = "R. Frost",+ title = "Realization of natural language interfaces using + lazy functional programming",+ journal = {{ACM Comput. Surv.}},+ year = 2006,+ volume = 38,+ number = 4+}++@BOOK{regulus,+ AUTHOR = {Rayner, M. and Hockey, B. A. and Bouillon, P.},+ TITLE = "Putting Linguistics into Speech Recognition: The Regulus Grammar Compiler",+ publisher = {{CSLI Publications}},+ YEAR = {2006} }++@Misc{trybulec-2006,+ author = {A. Trybulec},+ title = {{The Mizar Homepage}},+ note = {\url{http://mizar.org/}},+ documentURL = "http://mizar.org/",+ year = {2006}+}++@Misc{kotus-2006,+ author = "{Kotimaisten Kielten Tutkimuskeskus}",+ title = {{KOTUS Wordlist}},+ note = {\url{http://kaino.kotus.fi/sanat/nykysuomi}},+ year = 2006+}++@article{goldsmith-2006,+ author = {John Goldsmith},+ title = {{An Algorithm for the Unsupervised Learning of Morphology}},+ journal = {{Nat. Lang. Eng.}},+ volume = {12},+ number = {4},+ year = {2006},+ issn = {1351-3249},+ pages = {353--371},+ doi = {http://dx.doi.org/10.1017/S1351324905004055},+ publisher = {Cambridge University Press},+ address = {New York, NY, USA},+ }++@book{aho-lam-ullman,+ AUTHOR = {A. Aho and M. Lam and R. Sethi and J. Ullman},+ TITLE = {{Compilers: Principles, Techniques, and Tools. Second Edition}},+ YEAR = {2006},+ PUBLISHER = {{Addison-Wesley}}+}++@Misc{XLE-homepage,+ author = {R. Kaplan and J. Maxwell},+ title = {{XLE Project Homepage}},+ note = {\verb6http://www2.parc.com/isl/groups/nltt/xle/6},+ year = 2007+}++@article{creutz,+ author = {Mathias Creutz and Krista Lagus},+ title = {{Unsupervised Models for Morpheme Segmentation and Morphology Learning}},+ journal = {{ACM Trans. Speech Lang. Process.}},+ volume = {4},+ number = {1},+ year = {2007},+ issn = {1550-4875},+ pages = {3},+ doi = {http://doi.acm.org/10.1145/1187415.1187418},+ publisher = {ACM},+ address = {New York, NY, USA},+ }++@misc{becker-sammie,+ author = {T. Becker and N. Blaylock and C. Gerstenberger and A. Korthauer and N. + Perera and M. Pitz and P. Poller and J. Schehl and F. Steffens and+ R. Stegmann and J. Steigner},+ year = 2007,+ title = {{In-Car Showcase Based on TALK}},+ note = {{TALK. Talk and Look: + Tools for Ambient Linguistic Knowledge. IST-507802. Deliverable 5.3}.+ \url{http://www.talk-project.org/}}+ }++@Misc{attempto,+ author = {Attempto},+ title = {{Attempto Project Homepage}},+ note = {\url{http://attempto.ifi.uzh.ch/site/}},+ year = {2008}+}++@inproceedings{espinosa,+ title = {{Hypertagging: Supertagging for Surface Realization with CCG}},+ author = "Espinosa, D. and M. White and D. Mehay",+ booktitle = {{ACL 2008}},+ address = {{Columbus, Ohio}},+ year = 2008+}++++@misc{peyton-jones-2003,+ author= {S. {Peyton Jones}},+ title={{Haskell 98 language and libraries: the Revised Report}}, + year=2003, + publisher={{Cambridge University Press}},+ note={\url{http://www.haskell.org/haskellwiki/Language_and_library_specification}}+}++@Book{b-b,+ author = {P. Blackburn and J. Bos},+ title = {Representation and Inference for Natural Language},+ publisher = {Studies in Logic, Language, and Information, CSLI Press},+ year = {to appear}+}++@inproceedings{airline,+ AUTHOR = {L. Augustsson},+ TITLE = {{Partial Evaluation in Airline Crew Scheduling}},+ BOOKTITLE = {???},+ PUBLISHER = {???},+ YEAR = {???}+ }++@misc{pollard-convergent,+ AUTHOR = {C. Pollard},+ TITLE = {{Convergent Grammar web page}},+ YEAR = {2009},+ note = {\url{http://www.ling.ohio-state.edu/~scott/cvg/}}+}++@inproceedings{bringert-al-2009,+ AUTHOR = {B. Bringert and K. Angelov and A. Ranta},+ TITLE = {{Grammatical Framework Web Service}},+ BOOKTITLE = {{System demo, Proceedings of EACL'09, Athens}},+ YEAR = {2009}+ }++@inproceedings{gfdemo-eacl,+ AUTHOR = {B. Bringert and K. Angelov and A. Ranta},+ TITLE = {{The GF Grammar Development System}},+ BOOKTITLE = {{System demo, Proceedings of EACL'09, Athens}},+ YEAR = {2009}+ }++@inproceedings{ranta-angelov-2010,+ AUTHOR = {Ranta, A. and K. Angelov},+ TITLE = {{Implementing Controlled Languages in GF}},+ BOOKTITLE = {{Proceedings of CNL-2009, Athens}},+ series = {LNCS},+ volume = {5972},+ pages = {82--101},+ YEAR = {2010}+ }+++%%%%%%%%%%%% below this: to be sorted++@Book{bar-hillel-1964,+ author = {Y. Bar-Hillel},+ title = {{Language and Information}},+ publisher = "Addison-Wesley",+ address = "Reading, MA",+ year = 1964+}++@InProceedings{damljanovic,+ author = {D. Damljanovic and K. Bontcheva},+ title = "Enhanced Semantic Access to Software Artefacts",+ booktitle = {{Workshop on Semantic Web Enabled Software Engineering (SWESE) held in conjunction with ISWC'08, Karlsruhe, Germany}},+ year = 2008+}++@InProceedings{papineni-2002,+ author = {Kishore Papineni and Salim Roukos and Todd Ward and Wei-Jing Zhu },+ title = {{BLEU}: a Method for Automatic Evaluation of Machine Translation },+ booktitle = {{ACL}},+ pages = {311--318},+ year = 2002+}++@Article{chandioux-1976,+ author = {J. Chandioux},+ title = {{MÉTÉO: un système opérationnel pour la traduction automatique + des bulletins météreologiques destinés au grand public}},+ journal = {{META}},+ volume = {21},+ pages = {127--133},+ year = {1976}+}+++@inproceedings{fuchs-al-2008,+ author = {Norbert E. Fuchs and Kaarel Kaljurand and Tobias Kuhn},+ title = {{Attempto Controlled English for Knowledge Representation}},+ booktitle = {{Reasoning Web, Fourth International Summer School 2008}},+ editor = {Cristina Baroglio and Piero A. Bonatti and Jan Ma{\l}uszy\'nski and Massimo Marchiori and Axel Polleres and Sebastian Schaffert},+ series = lncs,+ number = {5224},+ publisher = {Springer},+ pages = {104--124},+ year = {2008},+}+++@techreport{lc-js-as:webalt2005,+ author = {Carlson, Lauri and Saludes, Jordi and Strotmann, Andreas},+ title = {Study of the state of the art in multilingual and multicultural creation of digital mathematical content.},+ institution = {the WebALT Consortium},+ url = {http://webalt.math.helsinki.fi/content/e16/e301/e305/Deliverable1.2_eng.pdf},+ number = {D1.2},+ type = {{Project Deliverable}},+ year = {2005}+}++%+% Last day additions from Lluís (section 1.2.6)+%++@ARTICLE{brown-al-1990, + AUTHOR = {Peter~F.~Brown and John~Cocke and Stephen~A.~Della~Pietra and Vincent~J.~Della~Pietra and Fredrick~Jelinek and John~D.~Lafferty and Robert~L.~Mercer and Paul~S.~Roossin},+ YEAR = {1990},+ TITLE = {A statistical approach to machine translation},+ JOURNAL = {Computational Linguistics},+ NUMBER = {2},+ PAGES = {76--85},+ VOLUME = {16}+}++@ARTICLE{och-ney-2004, + AUTHOR = {Franz Josef Och and Hermann Ney},+ TITLE = {The Alignment Template Approach to Statistical Machine Translation},+ JOURNAL= {Computational Linguistics}, + NUMBER = 4,+ VOLUME = 30,+ YEAR = 2004,+ PAGES = {417--449}+}++@inproceedings{koehn03,+ author = {Philipp Koehn and Franz Josef Och and Daniel Marcu},+ title = "{Statistical Phrase-Based Translation}",+ booktitle = {Proceedings of the Joint Conference on Human Language Technology and the North American Chapter of the Association for Computational Linguistics (HLT-NAACL)},+ year = {2003}+}++@inproceedings{och02,+ author = {Franz Josef Och and Hermann Ney},+ title = "{Discriminative Training and Maximum Entropy Models for Statistical Machine Translation}",+ booktitle = {Proceedings of the 40th ACL},+ year = {2002},+ pages = {295--302}+}++@techreport{moses,+ author = "Philipp Koehn and Hieu Hoang and Alexandra Birch and Chris Callison-Burch and Marcello Federico and Nicola Bertoldi and Brooke Cowan and Wade Shen and Christine Moran and Richard Zens and Chris Dyer and Ondrej Bojar and Alexandra Constantin and Evan Herbst",+ title = "{Moses: Open Source Toolkit for Statistical Machine Translation}",+ year = "2007",+ institution = "(ACL 2007) demonstration session"+}++@inproceedings{gimenez06,+ author = {Jesús Giménez and Lluís Màrquez},+ title = "{Low-cost Enrichment of Spanish WordNet with Automatically Translated Glosses: Combining General and Specialized Models}",+ booktitle = {Proceedings of COLING-ACL},+ year = {2006},+}++@inproceedings{garcia09,+ author = {Miguel García and Jesús Giménez and Lluís Màrquez},+ title = {Enriching Statistical Translation Models using a Domain-independent Multilingual Lexical Knowledge Base},+ booktitle= {Proceedings of the 10th International Conference on Computational Linguistics and Intelligent Text Processing, CICLing-2009},+ year = {2009},+ pages = {--},+ address = {Ciudad de Mexico, Mexico}+}++@InProceedings{chen07,+ author = {Chen, Yu and Eisele, Andreas and Federmann, Christian and Hasler, Eva and Jellinghaus, Michael and Theison, Silke},+ title = {Multi-Engine Machine Translation with an Open-Source {SMT} Decoder},+ booktitle = {Proceedings of the Second Workshop on Statistical Machine Translation},+ month = {June},+ year = {2007},+ address = {Prague, Czech Republic},+ publisher = {Association for Computational Linguistics},+ pages = {193--196},+}+++@inproceedings{matusov06,+ author = {Evgeny Matusov and Nicola Ueffing and Hermann Ney},+ title = {Computing Consensus Translation for Multiple Machine Translation Systems Using Enhanced Hypothesis Alignment},+ booktitle= {Proceedings of EACL},+ year = {2006},+ pages = {33--40},+ address = {Trento, Italy}+}++@InProceedings{macherey07,+ author = {Macherey, Wolfgang and Och, Franz J.},+ title = {An Empirical Study on Computing Consensus Translations from Multiple Machine Translation Systems},+ booktitle = {Proceedings of the 2007 Joint Conference on Empirical Methods in Natural Language Processing and Computational Natural Language Learning (EMNLP-CoNLL)},+ month = {June},+ year = {2007},+ address = {Prague, Czech Republic},+ publisher = {Association for Computational Linguistics},+ pages = {986--995},+}++@inproceedings{mellebeek06,+ author = {B. Mellebeek and A. Khasin and K. Owczarzak and J. Van Genabith and A. Way},+ title = {Improving online Machine Translation Systems},+ booktitle= {Proceedings of the 10th Machine Translation Summit},+ year = {2006},+ pages = {290--297},+ address = {Phuket, Thailand}+}++@InProceedings{huang07,+ author = {Huang, Fei and Papineni, Kishore},+ title = {Hierarchical System Combination for Machine Translation},+ booktitle = {Proceedings of the 2007 Joint Conference on Empirical Methods in Natural Language Processing and Computational Natural Language Learning (EMNLP-CoNLL)},+ month = {June},+ year = {2007},+ address = {Prague, Czech Republic},+ publisher = {Association for Computational Linguistics},+ pages = {277--286},+}++@InProceedings{rosti07,+ author = {Rosti, Antti-Veikko and Matsoukas, Spyros and Schwartz, Richard},+ title = {Improved Word-Level System Combination for Machine Translation},+ booktitle = {Proceedings of the 45th Annual Meeting of the Association of Computational Linguistics},+ month = {June},+ year = {2007},+ address = {Prague, Czech Republic},+ publisher = {Association for Computational Linguistics},+ pages = {312--319},+}++@InProceedings{karakos08,+ author = {Karakos, Damianos and Eisner, Jason and Khudanpur, Sanjeev and Dreyer, Markus},+ title = {Machine Translation System Combination using ITG-based Alignments},+ booktitle = {Proceedings of ACL-08: HLT, Short Papers},+ month = {June},+ year = {2008},+ address = {Columbus, Ohio},+ publisher = {Association for Computational Linguistics},+ pages = {81--84},+}++@InProceedings{simard07,+ author = {Simard, Michel and Ueffing, Nicola and Isabelle, Pierre and Kuhn, Roland},+ title = {Rule-Based Translation with Statistical Phrase-Based Post-Editing},+ booktitle = {Proceedings of the Second Workshop on Statistical Machine Translation},+ month = {June},+ year = {2007},+ address = {Prague, Czech Republic},+ publisher = {Association for Computational Linguistics},+ pages = {203--206},+}++@inproceedings{terumasa07,+ author = {Ehara Terumasa},+ title = {Rule based machine translation combined with statistical post editor for Japanese to English patent translation},+ booktitle= {MT Summit XI Workshop on patent translation},+ year = {2007},+ pages = {13--18},+ address = {Copenhagen, Denmark}+}++@inproceedings{gimenez06b,+ author = {Jes\'us Gim\'enez and Enrique Amig\'o},+ title = {{\sc IQmt}: A Framework for Automatic Machine Translation Evaluation},+ booktitle = {Proceedings of the 5th International Conference on+ Language Resources and Evaluation (LREC'06)},+ year = {2006}+}++@inproceedings{callison-burch06,+ author = {Chris Callison-Burch and Miles Osborne and Philipp Koehn},+ title = "{Re-evaluating the Role of BLEU in Machine Translation Research}",+ booktitle = {Proceedings of EACL},+ year = {2006}+}+++@inproceedings{gimenez08,+ author = {Jes\'{u}s Gim\'{e}nez and Llu\'{i}s M\`{a}rquez},+ title = "{A Smorgasbord of Features for Automatic MT Evaluation}",+ booktitle = {Proceedings of the ACL Workshop on Statistical Machine Translation},+ year = {2008},+ pages = {195--198},+}+++@phdthesis{gimenez08b,+ author = {Jes\'{u}s Gim\'{e}nez},+ title = "{Empirical Machine Translation and its Evaluation}",+ school = "Universitat Polit\`ecnica de Catalunya",+ year = {2008}+}+++@inproceedings{WMT07,+ author = {Chris Callison-Burch and Cameron Fordyce and Philipp Koehn and Christof Monz and Josh Schroeder},+ title = "{(Meta-) Evaluation of Machine Translation}",+ booktitle = {Proceedings of the ACL-2007 Workshop on Statistical Machine Translation},+ year = {2007},+ pages = {136--158}+}++@inproceedings{WMT08,+ author = {Chris Callison-Burch and Cameron Fordyce and Philipp Koehn and Christof Monz and Josh Schroeder},+ title = "{Further (Meta-) Evaluation of Machine Translation}",+ booktitle = {Proceedings of the ACL-2008 Workshop on Statistical Machine Translation},+ year = {2008}+}++@InProceedings{carreras09,+ author = {Carreras, Xavier and Collins, Michael},+ title = {Non-Projective Parsing for Statistical Machine Translation},+ booktitle = {Proceedings of the 2009 Conference on Empirical Methods in Natural Language Processing},+ month = {August},+ year = {2009},+ address = {Singapore},+ publisher = {Association for Computational Linguistics},+ pages = {200--209},+ url = {http://www.aclweb.org/anthology/D/D09/D09-1021}+ }++++%%%%%%%%%%%%%%%%%%%%%++@Misc{dean-schreiber-2004,+ author = {Mike Dean and Guus Schreiber},+ title = {{OWL Web Ontology Language Reference}},+ note = {\url{http://www.w3.org/TR/owl-ref/}},+ year = 2004+}++@inproceedings{hart-al-2008,+ author = {Glen Hart and+ Martina Johnson and+ Catherine Dolbear},+ title = {Rabbit: Developing a Control Natural Language for Authoring+ Ontologies},+ booktitle = {ESWC},+ year = {2008},+ pages = {348-360}+}++@article{ranta-lilt,+ author = {A. Ranta},+ title = {{The GF Resource Grammar Library}},+ journal = {{Linguistic Issues in Language Technology}},+ volume = {2},+ year = {2009}+}+++@inproceedings{1220242,+ author = {Al-Onaizan, Yaser and Papineni, Kishore},+ title = {Distortion models for statistical machine translation},+ booktitle = {ACL-44: Proceedings of the 21st International Conference on Computational Linguistics and the 44th annual meeting of the Association for Computational Linguistics},+ year = {2006},+ pages = {529--536},+ location = {Sydney, Australia},+ doi = {http://dx.doi.org/10.3115/1220175.1220242},+ publisher = {Association for Computational Linguistics},+ address = {Morristown, NJ, USA},+ }++@ARTICLE{bringert-ranta-2008,+ AUTHOR = {B. Bringert and A. Ranta},+ TITLE = {{A Pattern for Almost Compositional Functions}},+ JOURNAL = {{The Journal of Functional Programming}},+ pages={567--598},+ volume={18(5--6)},+ YEAR = {2008}+ }+++++@book{hutchins-somers-1992,+ AUTHOR = {W. J. Hutchins and H. L. Somers},+ TITLE = {{An Introduction to Machine Translation}},+ YEAR = {1992},+ PUBLISHER = {{Academic Press Limited}},+ Address = "London"+}++@Misc{pierce-al-1966,+ author = {John R. Pierce and John B. Carroll and al.},+ title = {{Language and Machines — Computers in Translation and Linguistics. + ALPAC report}}, + publisher = {{+ National Academy of Sciences, National Research Council}}, + address = {{Washington, DC}},+ year = 1966+}++@book{hutchins-2000,+ AUTHOR = {W. J. Hutchins},+ TITLE = {{Early years in machine translation: Memoirs and biographies of pioneers}},+ YEAR = {2000},+ PUBLISHER = {{John Benjamins}},+ Address = "Amsterdam"+}++@ARTICLE{shannon-1948,+ AUTHOR = {C. Shannon},+ TITLE = {{A Mathematical Theory of Communication}},+ JOURNAL = {{The Bell System Technical Journal}},+ volume={1},+ YEAR = {1948}+ }++@ARTICLE{ajdukiewicz-1935,+ AUTHOR = {K. Ajdukiewicz},+ TITLE = {{Die syntaktische konnexität}},+ JOURNAL = {{Studia Philosophica}},+ volume={1},+ YEAR = {1935},+ pages = {1--27}+ }++@ARTICLE{welsh-al-1991,+ AUTHOR = {J. Welsh and B. Broom and D. Kiong},+ TITLE = {{A design rationale for a language-based editor}},+ JOURNAL = {{Software: Practice and Experience}},+ volume={21},+ YEAR = {1991},+ pages = {923–-948}+ }++@phdthesis{norell-2007,+ author = {Ulf Norell},+ title = {Towards a practical programming language based on dependent type+ theory},+ school = {Department of Computer Science and Engineering, Chalmers University of Technology},+ year = 2007,+ month = {September},+ address = {SE-412 96 G\"{o}teborg, Sweden}+}+++@article {angelov-al-2010,+ title = {D10.2 MOLTO web service, first version},+ number = {D10.2},+ year = {2010},+ month = {06/2010},+ type = {Project Deliverable},+ address = {Gothenburg, Sweden},+ attachments = {http://www.molto-project.eu/sites/default/files/D10.2.pdf},+ author = {Krasimir Angelov and Olga Caprotti and Ramona Enache and Thomas Hallgren and Listenmaa, Inari and Aarne Ranta and Saludes, Jordi and Slaski, Adam}+}++@article{jelinek-2009,+ author = {Jelinek, Frederick},+ title = {{The dawn of statistical ASR and MT}},+ journal = {Computational Linguistics},+ volume = {35},+ number = {4},+ year = {2009},+ issn = {0891-2017},+ pages = {483--494},+ doi = {http://dx.doi.org/10.1162/coli.2009.35.4.35401},+ publisher = {MIT Press},+ address = {Cambridge, MA, USA},+ }++@techreport{dowek-al-1993,+ HAL_ID = {inria-00070014},+ URL = {http://hal.inria.fr/inria-00070014/en/},+ title = { {T}he {C}oq proof assistant user's guide : version 5.8},+ author = {{D}owek, {G}illes and {F}elty, {A}my and {H}erbelin, {H}ugo and {H}uet, {G}{\'e}rard and {P}arent, {C}atherine and {P}aulin-{M}ohring, {C}hristine and {W}erner, {B}enjamin and {M}urthy, {C}hetan},+ language = {{E}nglish},+ affiliation = {{INRIA} {R}ocquencourt - {INRIA} {R}ocquencourt - {INRIA} },+ pages = {120 },+ type = {{R}esearch {R}eport},+ institution = {INRIA},+ number = {{RT}-0154},+ year = {1993},+ URL = {http://hal.inria.fr/inria-00070014/PDF/RT-0154.pdf},+}+++@Book{carlson-1983,+ author = {Lauri Carlson},+ title = {{Dialogue Games: An Approach to Discourse Analysis}},+ publisher = "D. Reidel Co.",+ address = "Dordrecht",+ year = {1983}+ }++@INCOLLECTION{ranta-2008,+ AUTHOR = "A. Ranta",+ TITLE = {How predictable is {Finnish} morphology? An experiment on lexicon construction},+ EDITOR = {{J. Nivre and M. Dahll\"of and B. Megyesi}},+ BOOKTITLE = "Resourceful Language Technology: Festschrift in Honor of Anna Sågvall Hein",+ PUBLISHER = {{University of Uppsala}},+ note = {\url{http://publications.uu.se/abstract.xsql?dbid=8933}},+ YEAR = {2008},+ PAGES = {130-148}+ }+++@Article{karttunen-karttunen-1976,+ author = "Frances Karttunen and Lauri Karttunen",+ title = {{The clitic -kin/-kaan in Finnish}},+ journal = "Texas Linguistic Forum",+ year = 1976,+ volume = 5,+ pages = {89-118}+}++@Article{zwicky-1977,+ author = "Arnold Zwicky",+ title = "On Clitics",+ journal = "Indiana University Linguistic Club",+ year = 1976,+ volume = 5,+ pages = {89-118}+}++@InCollection{carlson-1993,+ author = "Lauri Carlson",+ title = {{Dialogue Games with Finnish Clitics}},+ booktitle = "Yearbook of the Linguistic Society of Finland",+ publisher = "SKY",+ address = "Helsinki",+ year = "1993",+ editor = "M. Vilkuna and S. Shore"+}++@PhdThesis{nevis-1986,+ author = "Joel A. Nevis",+ title = "Finnish Particle Clitics and General Clitic Theory",+ school = "Department of Linguistics, Ohio State University, Columbus",+ year = {1986}+}++@InProceedings{benzmuller-al-1997,+ title = {Omega: Towards a mathematical assistant},+ author = {C. Benzm\"uller and L. Cheikhrouhou and D. Fehrer and A. Fiedler and Huang and M. Kerber and M. Kohlhase and K. Konrad and E. Melis and A. Meier and W. Schaarschmidt and J. Siekmann and V. Sorge},+ year = {1997},+ booktitle = {Proceedings of the 14th Conference on Automated Deduction},+ publisher = {Springer},+}++@INPROCEEDINGS{wenzel-1999,+ author = {Markus Wenzel},+ title = {Isar - A Generic Interpretative Approach to Readable Formal+ Proof Documents},+ booktitle = {TPHOLs},+ year = {1999},+ pages = {167-184},+ ee = {http://link.springer.de/link/service/series/0558/bibs/1690/16900167.htm},+ crossref = {DBLP:conf/tphol/1999},+ bibsource = {DBLP, http://dblp.uni-trier.de}+}++@proceedings{DBLP:conf/tphol/1999,+ editor = {Yves Bertot and+ Gilles Dowek and+ Andr{\'e} Hirschowitz and+ C. Paulin and+ Laurent Th{\'e}ry},+ title = {Theorem Proving in Higher Order Logics, 12th International+ Conference, TPHOLs'99, Nice, France, September, 1999, Proceedings},+ booktitle = {TPHOLs},+ publisher = {Springer},+ series = lncs,+ volume = {1690},+ year = {1999},+ isbn = {3-540-66463-7},+ bibsource = {DBLP, http://dblp.uni-trier.de}+}++@BOOK{frege-1879,+ AUTHOR = "Frege, Gottlob",+ TITLE = "Begriffsschrift",+ PUBLISHER = {Louis Nebert},+ ADDRESS = {Halle A/S},+ YEAR = {1879} +}+++@article{kamareddine-wells-2008,+ author = {Fairouz Kamareddine and+ J. B. Wells},+ title = {{Computerizing Mathematical Text with MathLang}},+ journal = {Electr. Notes Theor. Comput. Sci.},+ volume = {205},+ year = {2008},+ pages = {5-30},+ ee = {http://dx.doi.org/10.1016/j.entcs.2008.03.063},+ bibsource = {DBLP, http://dblp.uni-trier.de}+}++@inproceedings{cramer-al-2009,+ author = {Marcos Cramer and+ Bernhard Fisseni and+ Peter Koepke and+ Daniel K{\"u}hlwein and+ Bernhard Schr{\"o}der and+ Jip Veldman},+ title = {{The Naproche Project Controlled Natural Language Proof Checking+ of Mathematical Texts}},+ booktitle = {CNL},+ year = {2009},+ pages = {170-186},+ ee = {http://dx.doi.org/10.1007/978-3-642-14418-9_11},+ crossref = {fuchs-2009},+ bibsource = {DBLP, http://dblp.uni-trier.de}+}++@proceedings{fuchs-2009,+ editor = {Norbert E. Fuchs},+ title = {Controlled Natural Language, Workshop on Controlled Natural+ Language, CNL 2009, Marettimo Island, Italy, June 8-10,+ 2009. Revised Papers},+ booktitle = {CNL},+ publisher = {Springer},+ series = lncs,+ volume = {5972},+ year = {2010},+ isbn = {978-3-642-14417-2},+ ee = {http://dx.doi.org/10.1007/978-3-642-14418-9},+ bibsource = {DBLP, http://dblp.uni-trier.de}+}+++@misc{neumaier-2009,+ author = "Arnold Neumaier",+ title = {{FMathL - Formal Mathematical Language}},+ year = "2009",+ note = {\url{http://www.mat.univie.ac.at/~neum/FMathL.html}}+}++@article{libbrecht-2001,+ author = "Paul Libbrecht",+ title = {{OpenMath Home Page}},+ year = "2001",+ note = {\url{http://www.openmath.org/}}+}++@misc{saludes-2010,+ author = "Jordi Saludes and Sebasti\`a Xamb\'o",+ title = {{MOLTO Mathematical Grammar Library}},+ year = "2010",+ note = {\url{http://www.molto-project.eu/node/1246}}+}++@article{barwise-cooper-1981,+ volume = {4},+ number = {2},+ author = {Jon Barwise and Robin Cooper},+ title = {Generalized Quantifiers and Natural Language},+ journal = {Linguistics and Philosophy},+ year = {1981},+ pages = {159--219}+}++@book{reiter-dale-2000,+ author = "Ehud Reiter and Robert Dale",+ title = {{Building Natural Language Generation Systems}},+ publisher = "Cambridge University Press",+ year = "2000"+}++@inproceedings{bos-al-2004,+ title = {{Wide-Coverage Semantic Representations from a CCG Parser}},+ author = {Bos, Johan and Clark, Stephen and Steedman, Mark and Curran, James R. and Hockenmaier, Julia},+ booktitle = {Proceedings of the 20th International Conference on Computational Linguistics (COLING '04)},+ address = {Geneva, Switzerland},+ pages = {1240--1246},+ year = {2004}+}+++@inproceedings{bos-markert-2005,+ author = {Johan Bos and+ Katja Markert},+ title = {{Recognising Textual Entailment with Robust Logical Inference}},+ booktitle = {MLCW},+ year = {2005},+ pages = {404-426},+ ee = {http://dx.doi.org/10.1007/11736790_23},+ crossref = {DBLP:conf/mlcw/2005},+ bibsource = {DBLP, http://dblp.uni-trier.de}+}+@proceedings{DBLP:conf/mlcw/2005,+ editor = {Joaquin Qui{\~n}onero Candela and+ Ido Dagan and+ Bernardo Magnini and+ Florence d'Alch{\'e}-Buc},+ title = {{Machine Learning Challenges, Evaluating Predictive Uncertainty,+ Visual Object Classification and Recognizing Textual Entailment,+ First PASCAL Machine Learning Challenges Workshop, MLCW+ 2005, Southampton, UK, April 11-13, 2005, Revised Selected+ Papers}},+ booktitle = {MLCW},+ publisher = {Springer},+ series = lncs,+ volume = {3944},+ year = {2006},+ isbn = {3-540-33427-0},+ bibsource = {DBLP, http://dblp.uni-trier.de}+}++@phdthesis{bobrow-1964,+ author = "Daniel G. Bobrow",+ title = "Natural Language Input for a Computer Problem Solving System",+ school = "Massachusetts Institute of Technology",+ year = "1964"+}++@phdthesis{zinn-2004,+ author = "Claus Zinn",+ title = "Understanding Informal Mathematical Discourse",+ school = "Department of Computer Science, University of Erlangen-N{\"u}rnberg",+ year = "2010"+}++@phdthesis{ganesalingam-2010,+ author = "Mohan Ganesalingam",+ title = "The Language of Mathematics",+ school = "Department of Computer Science, University of Cambridge",+ year = "2010",+ note = {\url{http://people.pwf.cam.ac.uk/mg262/}}+}++@article{rice-1953,+ jstor_articletype = {research-article},+ title = {Classes of Recursively Enumerable Sets and Their Decision Problems},+ author = {Rice, H. G.},+ journal = {Transactions of the American Mathematical Society},+ jstor_issuetitle = {},+ volume = {74},+ number = {2},+ jstor_formatteddate = {Mar., 1953},+ pages = {pp. 358-366},+ url = {http://www.jstor.org/stable/1990888},+ ISSN = {00029947},+ abstract = {},+ language = {English},+ year = {1953},+ publisher = {American Mathematical Society},+ copyright = {Copyright © 1953 American Mathematical Society},+ }++@article{abbott-al-1996,+ author = {Abbott, John and D\'{\i}az, Angel and Sutor, Robert S.},+ title = {{A report on OpenMath: a protocol for the exchange of mathematical information}},+ journal = {SIGSAM Bull.},+ volume = {30},+ issue = {1},+ month = {March},+ year = {1996},+ issn = {0163-5824},+ pages = {21--24},+ numpages = {4},+ url = {http://doi.acm.org/10.1145/231191.231194},+ doi = {http://doi.acm.org/10.1145/231191.231194},+ acmid = {231194},+ publisher = {ACM},+ address = {New York, NY, USA},+} ++@misc{ranta-2011b,+ author = "Aarne Ranta",+ title = {{Grammatical Framework: A Hands-On Introduction}},+ howpublished = "CADE-23 Tutorial, Wroclaw",+ year = "2011",+ note = {{\url{http://www.grammaticalframework.org/gf-cade-2011/}}},+ url = http://www.grammaticalframework.org/gf-tutorial-cade-2011/+}++@inproceedings{gruzitis-2011,+ author = "Normunds Gruzitis and Guntis Barzdins",+ title = {{Towards a More Natural Multilingual Controlled Language Interface to OWL}},+ booktitle = "9th International Conference on Computational Semantics (IWCS)",+ year = "2011",+ note = {\url{http://www.aclweb.org/anthology/W/W11/W11-0138.pdf}},+ pages = {335--339}+}++@inproceedings{niles-pease-2001,+ author = {Niles, Ian and Pease, Adam},+ title = {Towards a standard upper ontology},+ booktitle = {Proceedings of the international conference on Formal Ontology in Information Systems - Volume 2001},+ series = {FOIS '01},+ year = {2001},+ isbn = {1-58113-377-4},+ location = {Ogunquit, Maine, USA},+ pages = {2--9},+ numpages = {8},+ url = {http://doi.acm.org/10.1145/505168.505170},+ doi = {http://doi.acm.org/10.1145/505168.505170},+ acmid = {505170},+ publisher = {ACM},+ address = {New York, NY, USA},+ keywords = {knowledge interchange format, ontologies},+} ++@article{humayoun-raffalli-2010,+ author = "Muhammad Humayoun and Christophe Raffalli",+ title = {{MathNat - Mathematical Text in a Controlled Natural Language}},+ journal = {{Journal on Research in Computing Science}},+ year = "2010",+ volume = "66"+}++@article{sutcliffe-benzmuller-2010,+ author = "Geoff Sutcliffe and Christoph Benzm{\"u}ller",+ title = {{Automated Reasoning in Higher-Order Logic+ using the TPTP THF Infrastructure}},+ journal = {{Journal of Formalized Reasoning}},+ year = "2010",+ volume = "3"+}++@inproceedings{camilleri-al-2010,+ author = "John J. Camilleri and Gordon J. Pace and Michael Rosner",+ booktitle = {{Playing Nomic Using a Controlled Natural Language}},+ conference = "CNL 2010, Second Workshop on Controlled Natural Languages",+ year = "2010",+ note = {\url{http://sunsite.informatik.rwth-aachen.de/Publications/CEUR-WS/Vol-622/paper7.pdf}}+}++@misc{mitankin-al-2010,+ author = "Petar Mitankin and Atanas Ilchev",+ title = {{Knowledge Representation Infrastructure}},+ year = "2010",+ note = {{MOLTO Deliverable D4.1. \url{http://www.molto-project.eu/sites/default/files/D4.1_0.pdf}}}+}++@article{buchberger-al-2006,+ author = {Bruno Buchberger and+ Adrian Craciun and+ Tudor Jebelean and+ Laura Kov{\'a}cs and+ Temur Kutsia and+ Koji Nakagawa and+ Florina Piroi and+ Nikolaj Popov and+ Judit Robu and+ Markus Rosenkranz},+ title = {Theorema: Towards computer-aided mathematical theory exploration},+ journal = {J. Applied Logic},+ volume = {4},+ number = {4},+ year = {2006},+ pages = {470-504},+ ee = {http://dx.doi.org/10.1016/j.jal.2005.10.006},+ bibsource = {DBLP, http://dblp.uni-trier.de}+}++@BOOK{wittgenstein-1953,+ AUTHOR = "Wittgenstein, Ludwig",+ TITLE = "Philosophical Investigations",+ PUBLISHER = {Basil Blackwell},+ ADDRESS = {Oxford},+ YEAR = {1953} +}++@inproceedings{shiffman-al-2010,+ author = {Shiffman, Richard N. and Michel, George and Krauthammer, Michael and Fuchs, Norbert E. and Kaljurand, Kaarel and Kuhn, Tobias},+ title = {Writing clinical practice guidelines in controlled natural language},+ booktitle = {Proceedings of the 2009 conference on Controlled natural language},+ series = {CNL'09},+ year = {2010},+ isbn = {3-642-14417-9, 978-3-642-14417-2},+ location = {Marettimo Island, Italy},+ pages = {265--280},+ numpages = {16},+ url = {http://portal.acm.org/citation.cfm?id=1893475.1893493},+ acmid = {1893493},+ publisher = {Springer-Verlag},+ address = {Berlin, Heidelberg},+} +++@inproceedings{koehn-hoang-2007,+ author = {Philipp Koehn and+ Hieu Hoang},+ title = {Factored Translation Models},+ booktitle = {EMNLP-CoNLL},+ year = {2007},+ pages = {868-876},+ ee = {http://www.aclweb.org/anthology/D07-1091},+ crossref = {DBLP:conf/emnlp/2007},+ bibsource = {DBLP, http://dblp.uni-trier.de}+}+@proceedings{DBLP:conf/emnlp/2007,+ title = {EMNLP-CoNLL 2007, Proceedings of the 2007 Joint Conference+ on Empirical Methods in Natural Language Processing and+ Computational Natural Language Learning, June 28-30, 2007,+ Prague, Czech Republic},+ booktitle = {EMNLP-CoNLL},+ publisher = {ACL},+ year = {2007},+ bibsource = {DBLP, http://dblp.uni-trier.de}+}++@article{lopez-2008,+ author = {Adam Lopez},+ title = {Statistical machine translation},+ journal = {ACM Comput. Surv.},+ volume = {40},+ number = {3},+ year = {2008},+ ee = {http://doi.acm.org/10.1145/1380584.1380586},+ bibsource = {DBLP, http://dblp.uni-trier.de}+}++@inproceedings{rayner-al-2011,+ author = {Manny Rayner and Paula Estrella and Pierrette Bouillon},+ title = {Bootstrapping A Statistical Speech Translator From A Rule-Based One},+ booktitle = {Proceedings of the Second International Workshop on + Free/Open-Source Rule-Based Machine Translation (2011: Barcelona)},+ year = {2011},+ note = {\url{http://hdl.handle.net/10609/5647}}+}++@inproceedings{tyers-nordfalk-2009,+ author = {Francis Tyers and Jacob Nordfalk},+ title = {{Shallow-transfer rule-based machine translation for Swedish to Danish}},+ booktitle = {Proceedings of the First International Workshop on + Free/Open-Source Rule-Based Machine Translation (2009: Alicante)},+ year = {2009},+ note = {\url{http://hdl.handle.net/10045/12024}}+}++@Book{hellberg-1978,+ author = {S. Hellberg},+ title = {{The Morphology of Present-Day Swedish}},+ publisher = {{Almqvist \& Wiksell}},+ year = {1978}+}++@Article{borin-2008,+title = {SALDO 1.0 (Svenskt associationslexikon version 2)},+author = {L. Borin, M. Forsberg, L. Lönngren},+journal = {Språkbanken},+publisher = {Göteborg universitet},+volume* = {volume},+year = {2008},+month = {05}+}++@Article{kaplan-kay-1994,+ author = "R. Kaplan and M. Kay",+ title = {{Regular Models of Phonological Rule Systems}},+ journal = {{Computational Linguistics}},+ year = 1994,+ volume = 20,+ pages = {{331--380}}+}++@Article{chaitin-1966,+ author = {G. J. Chaitin},+ title = {On the length of programs for computing finite binary sequences},+ journal = {Journal of the ACM},+ year = 1966,+ volume = 13,+ number = 4,+ pages = {{547--569}}+}++@Article{kolmogorov-1965,+ author = {A. N. Kolmogorov},+ title = {Three approaches to the quantitative definition of informati\+on},+ journal = {Problems of Information and Transmission},+ year = 1965,+ volume = 1,+ number = 1,+ pages = {{1--7}}+}++@Article{solomonoff-1964,+ author = {R. J. Solomonoff},+ title = {A formal theory of inductive inference: Parts 1 and 2},+ journal = {Information and Control},+ year = 1964,+ volume = 7,+ pages = {{1--22 and 224--254}}+}++@article{chanod-1995,+ author = {Jean-Pierre Chanod and+ Pasi Tapanainen},+ title = {Creating a tagset, lexicon and guesser for a French tagger},+ journal = {CoRR},+ volume = {cmp-lg/9503004},+ year = {1995},+ ee = {http://arxiv.org/abs/cmp-lg/9503004},+ bibsource = {DBLP, http://dblp.uni-trier.de}+}++@incollection{hlavacova-2001,+ author = {Hlaváčová, Jaroslava},+ affiliation = {Charles university Institute of the Czech National Corpus, Faculty of Arts nám. J. Palacha 2 116 38 Prague 1 Czech Republic},+ title = {Morphological Guesser of Czech Words},+ booktitle = {Text, Speech and Dialogue},+ series = {Lecture Notes in Computer Science},+ editor = {Matoušek, Václav and Mautner, Pavel and Moucek, Roman and Taušer, Karel},+ publisher = {Springer Berlin / Heidelberg},+ isbn = {978-3-540-42557-1},+ keyword = {Computer Science},+ pages = {70-75},+ volume = {2166},+ url = {http://dx.doi.org/10.1007/3-540-44805-5_9},+ year = {2001}+}++@MISC{nakov-2003,+ author = {Preslav Nakov and Yury Bonev and et al.},+ title = {Guessing Morphological Classes of Unknown German Nouns},+ year = {2003}+}++%% inria-00121489, version 1+%% http://hal.inria.fr/inria-00121489/en/+@inproceedings{romary-2004,+ hal_id = {inria-00121489},+ url = {http://hal.inria.fr/inria-00121489/en/},+ title = {{Standards going concrete: from LMF to Morphalou}},+ author = {Romary, Laurent and Salmon-Alt, Susanne and Francopoulo, Gil},+ abstract = {{Application of the ISO standard LMF to the French CNRS lexicon Morphalou. LMF is the ISO standard for NLP lexicons (aka ISO-24613).}},+ keywords = {NLP morphology LMF ISO ISO-24613},+ language = {English},+ affiliation = {LANGUE ET DIALOGUE - INRIA Lorraine - LORIA - INRIA - CNRS : UMR7503 - Universit{\'e} Henri Poincar{\'e} - Nancy I - Universit{\'e} Nancy II - Institut National Polytechnique de Lorraine - Analyse et Traitement Informatique de la Langue Fran{\c c}aise - ATILF - CNRS : UMR7118 - Universit{\'e} Henri Poincar{\'e} - Nancy I - Universit{\'e} Nancy II},+ booktitle = {{The 20th International Conference on Computational Linguistics - COLING 2004}},+ address = {Gen{\`e}ve/Switzerland},+ organization = {coling},+ audience = {not specified },+ year = {2004},+ pdf = {http://hal.inria.fr/inria-00121489/PDF/LRSSAGFFinal.pdf},+}++@inproceedings{clement-al-2004,+ author = "L. Clement and B. Sagot and B. Lang",+ title = "Morphology based automatic acquisition of large-coverage lexica",+ booktitle = "Proceedings of LREC-04, Lisboa, Portugal",+ year = 2004,+ pages = "1841--1844"+}
@@ -11,9 +11,261 @@ December 2010 for GF 3.2 </FONT></CENTER> +<P></P>+<HR NOSHADE SIZE=1>+<P></P>+ <UL>+ <LI><A HREF="#toc1">Overview</A>+ <UL>+ <LI><A HREF="#toc2">Outline</A>+ <LI><A HREF="#toc3">Slides</A>+ </UL>+ <LI><A HREF="#toc4">Lesson 1: Getting Started with GF</A>+ <UL>+ <LI><A HREF="#toc5">What GF is</A>+ <LI><A HREF="#toc6">GF grammars and language processing tasks</A>+ <LI><A HREF="#toc7">Getting the GF system</A>+ <LI><A HREF="#toc8">Running the GF system</A>+ <LI><A HREF="#toc9">A "Hello World" grammar</A>+ <UL>+ <LI><A HREF="#toc10">The program: abstract syntax and concrete syntaxes</A>+ <LI><A HREF="#toc11">Using grammars in the GF system</A>+ <LI><A HREF="#toc12">Exercises on the Hello World grammar</A>+ </UL>+ <LI><A HREF="#toc13">Using grammars from outside GF</A>+ <LI><A HREF="#toc14">GF scripts</A>+ <LI><A HREF="#toc15">What else can be done with the grammar</A>+ <LI><A HREF="#toc16">Embedded grammar applications</A>+ </UL>+ <LI><A HREF="#toc17">Lesson 2: Designing a grammar for complex phrases</A>+ <UL>+ <LI><A HREF="#toc18">The abstract syntax Food</A>+ <LI><A HREF="#toc19">The concrete syntax FoodEng</A>+ <UL>+ <LI><A HREF="#toc20">Exercises on the Food grammar</A>+ </UL>+ <LI><A HREF="#toc21">Commands for testing grammars</A>+ <UL>+ <LI><A HREF="#toc22">Generating trees and strings</A>+ <LI><A HREF="#toc23">Exercises on generation</A>+ <LI><A HREF="#toc24">More on pipes: tracing</A>+ <LI><A HREF="#toc25">Writing and reading files</A>+ <LI><A HREF="#toc26">Visualizing trees</A>+ <LI><A HREF="#toc27">System commands</A>+ </UL>+ <LI><A HREF="#toc28">An Italian concrete syntax</A>+ <UL>+ <LI><A HREF="#toc29">Exercises on multilinguality</A>+ </UL>+ <LI><A HREF="#toc30">Free variation</A>+ <LI><A HREF="#toc31">More application of multilingual grammars</A>+ <UL>+ <LI><A HREF="#toc32">Multilingual treebanks</A>+ <LI><A HREF="#toc33">Translation quiz</A>+ </UL>+ <LI><A HREF="#toc34">Context-free grammars and GF</A>+ <UL>+ <LI><A HREF="#toc35">The "cf" grammar format</A>+ <LI><A HREF="#toc36">Restrictions of context-free grammars</A>+ </UL>+ <LI><A HREF="#toc37">Modules and files</A>+ <LI><A HREF="#toc38">Using operations and resource modules</A>+ <UL>+ <LI><A HREF="#toc39">Operation definitions</A>+ <LI><A HREF="#toc40">The ``resource`` module type</A>+ <LI><A HREF="#toc41">Opening a resource</A>+ <LI><A HREF="#toc42">Partial application</A>+ <LI><A HREF="#toc43">Testing resource modules</A>+ </UL>+ <LI><A HREF="#toc44">Grammar architecture</A>+ <UL>+ <LI><A HREF="#toc45">Extending a grammar</A>+ <LI><A HREF="#toc46">Multiple inheritance</A>+ </UL>+ </UL>+ <LI><A HREF="#toc47">Lesson 3: Grammars with parameters</A>+ <UL>+ <LI><A HREF="#toc48">The problem: words have to be inflected</A>+ <LI><A HREF="#toc49">Parameters and tables</A>+ <LI><A HREF="#toc50">Inflection tables and paradigms</A>+ <UL>+ <LI><A HREF="#toc51">Exercises on morphology</A>+ </UL>+ <LI><A HREF="#toc52">Using parameters in concrete syntax</A>+ <UL>+ <LI><A HREF="#toc53">Agreement</A>+ <LI><A HREF="#toc54">Determiners</A>+ <LI><A HREF="#toc55">Parametric vs. inherent features</A>+ </UL>+ <LI><A HREF="#toc56">An English concrete syntax for Foods with parameters</A>+ <LI><A HREF="#toc57">More on inflection paradigms</A>+ <UL>+ <LI><A HREF="#toc58">Worst-case functions</A>+ <LI><A HREF="#toc59">Smart paradigms</A>+ <LI><A HREF="#toc60">Exercises on regular patterns</A>+ <LI><A HREF="#toc61">Function types with variables</A>+ <LI><A HREF="#toc62">Separating operation types and definitions</A>+ <LI><A HREF="#toc63">Overloading of operations</A>+ <LI><A HREF="#toc64">Morphological analysis and morphology quiz</A>+ </UL>+ <LI><A HREF="#toc65">The Italian Foods grammar</A>+ <UL>+ <LI><A HREF="#toc66">Exercises on using parameters</A>+ </UL>+ <LI><A HREF="#toc67">Discontinuous constituents</A>+ <LI><A HREF="#toc68">Strings at compile time vs. run time</A>+ <UL>+ <LI><A HREF="#toc69">Supplementary constructs for concrete syntax</A>+ </UL>+ </UL>+ <LI><A HREF="#toc70">Lesson 4: Using the resource grammar library</A>+ <UL>+ <LI><A HREF="#toc71">The coverage of the library</A>+ <LI><A HREF="#toc72">The structure of the library</A>+ <UL>+ <LI><A HREF="#toc73">Lexical vs. phrasal rules</A>+ <LI><A HREF="#toc74">Lexical categories</A>+ <LI><A HREF="#toc75">Lexical rules</A>+ <LI><A HREF="#toc76">Resource lexicon</A>+ <LI><A HREF="#toc77">Phrasal categories</A>+ <LI><A HREF="#toc78">Syntactic combinations</A>+ <LI><A HREF="#toc79">Example syntactic combination</A>+ </UL>+ <LI><A HREF="#toc80">The resource API</A>+ <UL>+ <LI><A HREF="#toc81">A miniature resource API: categories</A>+ <LI><A HREF="#toc82">A miniature resource API: rules</A>+ <LI><A HREF="#toc83">A miniature resource API: structural words</A>+ <LI><A HREF="#toc84">A miniature resource API: paradigms</A>+ <LI><A HREF="#toc85">A miniature resource API: more paradigms</A>+ <LI><A HREF="#toc86">Exercises</A>+ </UL>+ <LI><A HREF="#toc87">Example: English</A>+ <UL>+ <LI><A HREF="#toc88">English example: linearization types and combination rules</A>+ <LI><A HREF="#toc89">English example: lexical rules</A>+ <LI><A HREF="#toc90">English example: exercises</A>+ </UL>+ <LI><A HREF="#toc91">Functor implementation of multilingual grammars</A>+ <UL>+ <LI><A HREF="#toc92">New language by copy and paste</A>+ <LI><A HREF="#toc93">Functors: functions on the module level</A>+ <LI><A HREF="#toc94">Code for the Foods functor</A>+ <LI><A HREF="#toc95">Code for the LexFoods interface</A>+ <LI><A HREF="#toc96">Code for a German instance of the lexicon</A>+ <LI><A HREF="#toc97">Code for a German functor instantiation</A>+ <LI><A HREF="#toc98">Adding languages to a functor implementation</A>+ <LI><A HREF="#toc99">Example: adding Finnish</A>+ <LI><A HREF="#toc100">A design pattern</A>+ <LI><A HREF="#toc101">Functors: exercises</A>+ </UL>+ <LI><A HREF="#toc102">Restricted inheritance</A>+ <UL>+ <LI><A HREF="#toc103">A problem with functors</A>+ <LI><A HREF="#toc104">Restricted inheritance: include or exclude</A>+ <LI><A HREF="#toc105">The functor problem solved</A>+ </UL>+ <LI><A HREF="#toc106">Grammar reuse</A>+ <UL>+ <LI><A HREF="#toc107">Library exercises</A>+ </UL>+ <LI><A HREF="#toc108">Tenses</A>+ </UL>+ <LI><A HREF="#toc109">Lesson 5: Refining semantics in abstract syntax</A>+ <UL>+ <LI><A HREF="#toc110">Dependent types</A>+ <UL>+ <LI><A HREF="#toc111">A dependent type system</A>+ <LI><A HREF="#toc112">Examples of devices and actions</A>+ <LI><A HREF="#toc113">Linearization and parsing with dependent types</A>+ <LI><A HREF="#toc114">Solving metavariables</A>+ </UL>+ <LI><A HREF="#toc115">Polymorphism</A>+ <UL>+ <LI><A HREF="#toc116">Dependent types: exercises</A>+ </UL>+ <LI><A HREF="#toc117">Proof objects</A>+ <UL>+ <LI><A HREF="#toc118">Proof-carrying documents</A>+ </UL>+ <LI><A HREF="#toc119">Restricted polymorphism</A>+ <UL>+ <LI><A HREF="#toc120">Example: classes for switching and dimming</A>+ </UL>+ <LI><A HREF="#toc121">Variable bindings</A>+ <UL>+ <LI><A HREF="#toc122">Higher-order abstract syntax</A>+ <LI><A HREF="#toc123">Higher-order abstract syntax: linearization</A>+ <LI><A HREF="#toc124">Eta expansion</A>+ <LI><A HREF="#toc125">Parsing variable bindings</A>+ <LI><A HREF="#toc126">Exercises on variable bindings</A>+ </UL>+ <LI><A HREF="#toc127">Semantic definitions</A>+ <UL>+ <LI><A HREF="#toc128">Computing a tree</A>+ <LI><A HREF="#toc129">Definitional equality</A>+ <LI><A HREF="#toc130">Judgement forms for constructors</A>+ <LI><A HREF="#toc131">Exercises on semantic definitions</A>+ </UL>+ <LI><A HREF="#toc132">Lesson 6: Grammars of formal languages</A>+ <UL>+ <LI><A HREF="#toc133">Arithmetic expressions</A>+ <LI><A HREF="#toc134">Concrete syntax: a simple approach</A>+ </UL>+ <LI><A HREF="#toc135">Lexing and unlexing</A>+ <UL>+ <LI><A HREF="#toc136">Most common lexers and unlexers</A>+ </UL>+ <LI><A HREF="#toc137">Precedence and fixity</A>+ <UL>+ <LI><A HREF="#toc138">Precedence as a parameter</A>+ <LI><A HREF="#toc139">Fixities</A>+ <LI><A HREF="#toc140">Exercises on precedence</A>+ </UL>+ <LI><A HREF="#toc141">Code generation as linearization</A>+ <UL>+ <LI><A HREF="#toc142">Programs with variables</A>+ <LI><A HREF="#toc143">Exercises on code generation</A>+ </UL>+ </UL>+ <LI><A HREF="#toc144">Lesson 7: Embedded grammars</A>+ <UL>+ <LI><A HREF="#toc145">Functionalities of an embedded grammar format</A>+ <LI><A HREF="#toc146">The portable grammar format</A>+ <UL>+ <LI><A HREF="#toc147">Haskell: the EmbedAPI module</A>+ <LI><A HREF="#toc148">First application: a translator</A>+ <LI><A HREF="#toc149">Producing PGF for the translator</A>+ <LI><A HREF="#toc150">A translator loop</A>+ <LI><A HREF="#toc151">A question-answer system</A>+ <LI><A HREF="#toc152">Abstract syntax of the query system</A>+ <LI><A HREF="#toc153">Exporting GF datatypes to Haskell</A>+ <LI><A HREF="#toc154">The question-answer function</A>+ <LI><A HREF="#toc155">Converting between Haskell and GF trees</A>+ <LI><A HREF="#toc156">Putting it all together: the transfer definition</A>+ <LI><A HREF="#toc157">Putting it all together: the Main module</A>+ <LI><A HREF="#toc158">Putting it all together: the Makefile</A>+ </UL>+ <LI><A HREF="#toc159">Web server applications</A>+ <LI><A HREF="#toc160">JavaScript applications</A>+ <UL>+ <LI><A HREF="#toc161">Compiling to JavaScript</A>+ <LI><A HREF="#toc162">Using the JavaScript grammar</A>+ </UL>+ <LI><A HREF="#toc163">Language models for speech recognition</A>+ <UL>+ <LI><A HREF="#toc164">More speech recognition grammar formats</A>+ </UL>+ </UL>+ </UL>++<P></P>+<HR NOSHADE SIZE=1>+<P></P> <P> <!-- NEW --> </P>+<A NAME="toc1"></A> <H1>Overview</H1> <P> This is a hands-on introduction to grammar writing in GF.@@ -40,6 +292,7 @@ <P> <!-- NEW --> </P>+<A NAME="toc2"></A> <H2>Outline</H2> <P> <a href="#chaptwo">Lesson 1</a>: a multilingual "Hello World" grammar. English, Finnish, Italian.@@ -66,6 +319,7 @@ <P> <!-- NEW --> </P>+<A NAME="toc3"></A> <H2>Slides</H2> <P> You can chop this tutorial into a set of slides by the command@@ -89,6 +343,7 @@ <P> <!-- NEW --> </P>+<A NAME="toc4"></A> <H1>Lesson 1: Getting Started with GF</H1> <P> <a name="chaptwo"></a>@@ -105,6 +360,7 @@ <P> <!-- NEW --> </P>+<A NAME="toc5"></A> <H2>What GF is</H2> <P> We use the term GF for three different things:@@ -133,6 +389,7 @@ <P> <!-- NEW --> </P>+<A NAME="toc6"></A> <H2>GF grammars and language processing tasks</H2> <P> A GF program is called a <B>grammar</B>. @@ -160,6 +417,7 @@ <P> <!-- NEW --> </P>+<A NAME="toc7"></A> <H2>Getting the GF system</H2> <P> Open-source free software, downloaded via the GF Homepage:@@ -188,6 +446,7 @@ <P> <!-- NEW --> </P>+<A NAME="toc8"></A> <H2>Running the GF system</H2> <P> Type <CODE>gf</CODE> in the Unix (or Cygwin) shell:@@ -220,6 +479,7 @@ <P> <!-- NEW --> </P>+<A NAME="toc9"></A> <H2>A "Hello World" grammar</H2> <P> Like most programming language tutorials, we start with a@@ -237,6 +497,7 @@ <P> <!-- NEW --> </P>+<A NAME="toc10"></A> <H3>The program: abstract syntax and concrete syntaxes</H3> <P> A GF program, in general, is a <B>multilingual grammar</B>. Its main parts@@ -356,6 +617,7 @@ <P> <!-- NEW --> </P>+<A NAME="toc11"></A> <H3>Using grammars in the GF system</H3> <P> In order to compile the grammar in GF,@@ -462,6 +724,7 @@ <P> <!-- NEW --> </P>+<A NAME="toc12"></A> <H3>Exercises on the Hello World grammar</H3> <OL> <LI>Test the parsing and translation examples shown above, as well as@@ -491,6 +754,7 @@ <P> <!-- NEW --> </P>+<A NAME="toc13"></A> <H2>Using grammars from outside GF</H2> <P> You can use the <CODE>gf</CODE> program in a Unix pipe. @@ -516,6 +780,7 @@ <P> <!-- NEW --> </P>+<A NAME="toc14"></A> <H2>GF scripts</H2> <P> If we name this script <CODE>hello.gfs</CODE>, we can do@@ -541,6 +806,7 @@ <P> <!-- NEW --> </P>+<A NAME="toc15"></A> <H2>What else can be done with the grammar</H2> <P> Some more functions that will be covered:@@ -559,6 +825,7 @@ <P> <!-- NEW --> </P>+<A NAME="toc16"></A> <H2>Embedded grammar applications</H2> <P> Application programs, using techniques from <a href="#chapeight">Lesson 7</a>:@@ -580,6 +847,7 @@ <P> <!-- NEW --> </P>+<A NAME="toc17"></A> <H1>Lesson 2: Designing a grammar for complex phrases</H1> <P> <a name="chapthree"></a>@@ -596,6 +864,7 @@ <P> <!-- NEW --> </P>+<A NAME="toc18"></A> <H2>The abstract syntax Food</H2> <P> Phrases usable for speaking about food:@@ -643,6 +912,7 @@ <P> <!-- NEW --> </P>+<A NAME="toc19"></A> <H2>The concrete syntax FoodEng</H2> <PRE> concrete FoodEng of Food = {@@ -690,6 +960,7 @@ <P> <!-- NEW --> </P>+<A NAME="toc20"></A> <H3>Exercises on the Food grammar</H3> <OL> <LI>Extend the <CODE>Food</CODE> grammar by ten new food kinds and@@ -706,7 +977,9 @@ <P> <!-- NEW --> </P>+<A NAME="toc21"></A> <H2>Commands for testing grammars</H2>+<A NAME="toc22"></A> <H3>Generating trees and strings</H3> <P> Random generation (<CODE>generate_random = gr</CODE>): build@@ -768,6 +1041,7 @@ <P> <!-- NEW --> </P>+<A NAME="toc23"></A> <H3>Exercises on generation</H3> <OL> <LI>If the command <CODE>gt</CODE> generated all@@ -781,6 +1055,7 @@ <P> <!-- NEW --> </P>+<A NAME="toc24"></A> <H3>More on pipes: tracing</H3> <P> Put the <B>tracing</B> option <CODE>-tr</CODE> to each command whose output you@@ -805,6 +1080,7 @@ <P> <!-- NEW --> </P>+<A NAME="toc25"></A> <H3>Writing and reading files</H3> <P> To save the outputs into a file, pipe it to the <CODE>write_file = wf</CODE> command,@@ -829,6 +1105,7 @@ <P> <!-- NEW --> </P>+<A NAME="toc26"></A> <H3>Visualizing trees</H3> <P> Parentheses give a linear representation of trees,@@ -881,6 +1158,7 @@ <P> <!-- NEW --> </P>+<A NAME="toc27"></A> <H3>System commands</H3> <P> You can give a <B>system command</B> without leaving GF:@@ -909,6 +1187,7 @@ <P> <!-- NEW --> </P>+<A NAME="toc28"></A> <H2>An Italian concrete syntax</H2> <P> <a name="secanitalian"></a>@@ -976,6 +1255,7 @@ <P> <!-- NEW --> </P>+<A NAME="toc29"></A> <H3>Exercises on multilinguality</H3> <OL> <LI>Write a concrete syntax of <CODE>Food</CODE> for some other language.@@ -993,6 +1273,7 @@ <P> <!-- NEW --> </P>+<A NAME="toc30"></A> <H2>Free variation</H2> <P> Semantically indistinguishable ways of expressing a thing.@@ -1040,7 +1321,9 @@ <P> <!-- NEW --> </P>+<A NAME="toc31"></A> <H2>More application of multilingual grammars</H2>+<A NAME="toc32"></A> <H3>Multilingual treebanks</H3> <P> <a name="sectreebank"></a>@@ -1064,6 +1347,7 @@ <P> <!-- NEW --> </P>+<A NAME="toc33"></A> <H3>Translation quiz</H3> <P> <CODE>translation_quiz = tq</CODE>:@@ -1095,7 +1379,9 @@ <P> <!-- NEW --> </P>+<A NAME="toc34"></A> <H2>Context-free grammars and GF</H2>+<A NAME="toc35"></A> <H3>The "cf" grammar format</H3> <P> The grammar <CODE>FoodEng</CODE> can be written in a BNF format as follows:@@ -1129,6 +1415,7 @@ <P> <!-- NEW --> </P>+<A NAME="toc36"></A> <H3>Restrictions of context-free grammars</H3> <P> Separating concrete and abstract syntax allows@@ -1147,6 +1434,7 @@ <P> <!-- NEW --> </P>+<A NAME="toc37"></A> <H2>Modules and files</H2> <P> GF uses suffixes to recognize different file formats:@@ -1192,7 +1480,9 @@ <P> <!-- NEW --> </P>+<A NAME="toc38"></A> <H2>Using operations and resource modules</H2>+<A NAME="toc39"></A> <H3>Operation definitions</H3> <P> The golden rule of functional programmin:@@ -1254,6 +1544,7 @@ <P> <!-- NEW --> </P>+<A NAME="toc40"></A> <H3>The ``resource`` module type</H3> <P> The <CODE>resource</CODE> module type is used to package@@ -1272,6 +1563,7 @@ <P> <!-- NEW --> </P>+<A NAME="toc41"></A> <H3>Opening a resource</H3> <P> Any number of <CODE>resource</CODE> modules can be@@ -1304,6 +1596,7 @@ <P> <!-- NEW --> </P>+<A NAME="toc42"></A> <H3>Partial application</H3> <P> <a name="secpartapp"></a>@@ -1341,6 +1634,7 @@ <P> <!-- NEW --> </P>+<A NAME="toc43"></A> <H3>Testing resource modules</H3> <P> Import with the flag <CODE>-retain</CODE>, @@ -1359,10 +1653,12 @@ <P> <!-- NEW --> </P>+<A NAME="toc44"></A> <H2>Grammar architecture</H2> <P> <a name="secarchitecture"></a> </P>+<A NAME="toc45"></A> <H3>Extending a grammar</H3> <P> A new module can <B>extend</B> an old one:@@ -1418,6 +1714,7 @@ <P> <!-- NEW --> </P>+<A NAME="toc46"></A> <H3>Multiple inheritance</H3> <P> Extend several grammars at the same time:@@ -1451,6 +1748,7 @@ <P> <!-- NEW --> </P>+<A NAME="toc47"></A> <H1>Lesson 3: Grammars with parameters</H1> <P> <a name="chapfour"></a>@@ -1479,6 +1777,7 @@ <P> <!-- NEW --> </P>+<A NAME="toc48"></A> <H2>The problem: words have to be inflected</H2> <P> Plural forms are needed in things like@@ -1511,6 +1810,7 @@ <P> <!-- NEW --> </P>+<A NAME="toc49"></A> <H2>Parameters and tables</H2> <P> We define the <B>parameter type</B> of number in English by@@ -1621,6 +1921,7 @@ <P> <!-- NEW --> </P>+<A NAME="toc50"></A> <H2>Inflection tables and paradigms</H2> <P> A morphological <B>paradigm</B> is a formula telling how a class of @@ -1672,6 +1973,7 @@ <P> <!-- NEW --> </P>+<A NAME="toc51"></A> <H3>Exercises on morphology</H3> <OL> <LI>Identify cases in which the <CODE>regNoun</CODE> paradigm does not@@ -1684,6 +1986,7 @@ <P> <!-- NEW --> </P>+<A NAME="toc52"></A> <H2>Using parameters in concrete syntax</H2> <P> Purpose: a more radical@@ -1708,6 +2011,7 @@ <P> <!-- NEW --> </P>+<A NAME="toc53"></A> <H3>Agreement</H3> <P> In English, the phrase-forming rule@@ -1749,6 +2053,7 @@ <P> <!-- NEW --> </P>+<A NAME="toc54"></A> <H3>Determiners</H3> <P> How does an <CODE>Item</CODE> subject receive its number? The rules@@ -1818,6 +2123,7 @@ <P> <!-- NEW --> </P>+<A NAME="toc55"></A> <H3>Parametric vs. inherent features</H3> <P> <CODE>Kind</CODE>s have number as a <B>parametric feature</B>: both singular and plural@@ -1885,6 +2191,7 @@ <P> <!-- NEW --> </P>+<A NAME="toc56"></A> <H2>An English concrete syntax for Foods with parameters</H2> <P> We use some string operations from the library <CODE>Prelude</CODE> are used. @@ -1949,6 +2256,7 @@ <P> <!-- NEW --> </P>+<A NAME="toc57"></A> <H2>More on inflection paradigms</H2> <P> <a name="secinflection"></a>@@ -1962,6 +2270,7 @@ <P> <!-- NEW --> </P>+<A NAME="toc58"></A> <H3>Worst-case functions</H3> <P> We perform <B>data abstraction</B> from the type@@ -2051,6 +2360,7 @@ <P> <!-- NEW --> </P>+<A NAME="toc59"></A> <H3>Smart paradigms</H3> <P> The regular <I>dog</I>-<I>dogs</I> paradigm has@@ -2117,6 +2427,7 @@ <P> <!-- NEW --> </P>+<A NAME="toc60"></A> <H3>Exercises on regular patterns</H3> <OL> <LI>The same rules that form plural nouns in English also@@ -2141,6 +2452,7 @@ <P> <!-- NEW --> </P>+<A NAME="toc61"></A> <H3>Function types with variables</H3> <P> In <a href="#chapsix">Lesson 5</a>, <B>dependent function types</B> need a notation@@ -2196,6 +2508,7 @@ <P> <!-- NEW --> </P>+<A NAME="toc62"></A> <H3>Separating operation types and definitions</H3> <P> In librarues, it is useful to group type signatures separately from@@ -2215,6 +2528,7 @@ <P> <!-- NEW --> </P>+<A NAME="toc63"></A> <H3>Overloading of operations</H3> <P> <B>Overloading</B>: different functions can be given the same name, as e.g. in C++.@@ -2256,6 +2570,7 @@ <P> <!-- NEW --> </P>+<A NAME="toc64"></A> <H3>Morphological analysis and morphology quiz</H3> <P> The command <CODE>morpho_analyse = ma</CODE>@@ -2292,6 +2607,7 @@ <P> <!-- NEW --> </P>+<A NAME="toc65"></A> <H2>The Italian Foods grammar</H2> <P> <a name="secitalian"></a>@@ -2429,6 +2745,7 @@ <P> <!-- NEW --> </P>+<A NAME="toc66"></A> <H3>Exercises on using parameters</H3> <OL> <LI>Experiment with multilingual generation and translation in the@@ -2448,6 +2765,7 @@ <P> <!-- NEW --> </P>+<A NAME="toc67"></A> <H2>Discontinuous constituents</H2> <P> A linearization record may contain more strings than one, and those@@ -2485,6 +2803,7 @@ <P> <!-- NEW --> </P>+<A NAME="toc68"></A> <H2>Strings at compile time vs. run time</H2> <P> Tokens are created in the following ways:@@ -2543,6 +2862,7 @@ <P> <!-- NEW --> </P>+<A NAME="toc69"></A> <H3>Supplementary constructs for concrete syntax</H3> <H4>Record extension and subtyping</H4> <P>@@ -2604,6 +2924,7 @@ <P> <!-- NEW --> </P>+<A NAME="toc70"></A> <H1>Lesson 4: Using the resource grammar library</H1> <P> <a name="chapfive"></a>@@ -2620,6 +2941,7 @@ <P> <!-- NEW --> </P>+<A NAME="toc71"></A> <H2>The coverage of the library</H2> <P> The current 16 resource languages (GF version 3.2, December 2010) are@@ -2650,6 +2972,7 @@ <P> <!-- NEW --> </P>+<A NAME="toc72"></A> <H2>The structure of the library</H2> <P> <a name="seclexical"></a>@@ -2671,6 +2994,7 @@ <P> <!-- NEW --> </P>+<A NAME="toc73"></A> <H3>Lexical vs. phrasal rules</H3> <P> A resource grammar has two kinds of categories and two kinds of rules:@@ -2698,6 +3022,7 @@ <P> <!-- NEW --> </P>+<A NAME="toc74"></A> <H3>Lexical categories</H3> <P> Two kinds of lexical categories:@@ -2729,6 +3054,7 @@ <P> <!-- NEW --> </P>+<A NAME="toc75"></A> <H3>Lexical rules</H3> <P> Closed classes: module <CODE>Syntax</CODE>. In the <CODE>Foods</CODE> grammar, we need@@ -2760,6 +3086,7 @@ <P> <!-- NEW --> </P>+<A NAME="toc76"></A> <H3>Resource lexicon</H3> <P> Alternative concrete syntax for@@ -2790,6 +3117,7 @@ <P> <!-- NEW --> </P>+<A NAME="toc77"></A> <H3>Phrasal categories</H3> <P> In <CODE>Foods</CODE>, we need just four phrasal categories:@@ -2810,6 +3138,7 @@ <P> <!-- NEW --> </P>+<A NAME="toc78"></A> <H3>Syntactic combinations</H3> <P> We need the following combinations:@@ -2837,6 +3166,7 @@ <P> <!-- NEW --> </P>+<A NAME="toc79"></A> <H3>Example syntactic combination</H3> <P> The sentence@@ -2862,6 +3192,7 @@ <P> <!-- NEW --> </P>+<A NAME="toc80"></A> <H2>The resource API</H2> <P> Language-specific and language-independent parts - roughly,@@ -2883,8 +3214,9 @@ <P> <!-- NEW --> </P>+<A NAME="toc81"></A> <H3>A miniature resource API: categories</H3>-<TABLE BORDER="1" CELLPADDING="4">+<TABLE CELLPADDING="4" BORDER="1"> <TR> <TH>Category</TH> <TH>Explanation</TH>@@ -2935,8 +3267,9 @@ <P> <!-- NEW --> </P>+<A NAME="toc82"></A> <H3>A miniature resource API: rules</H3>-<TABLE BORDER="1" CELLPADDING="4">+<TABLE CELLPADDING="4" BORDER="1"> <TR> <TH>Function</TH> <TH>Type</TH>@@ -2977,8 +3310,9 @@ <P> <!-- NEW --> </P>+<A NAME="toc83"></A> <H3>A miniature resource API: structural words</H3>-<TABLE BORDER="1" CELLPADDING="4">+<TABLE CELLPADDING="4" BORDER="1"> <TR> <TH>Function</TH> <TH>Type</TH>@@ -3014,11 +3348,12 @@ <P> <!-- NEW --> </P>+<A NAME="toc84"></A> <H3>A miniature resource API: paradigms</H3> <P> From <CODE>ParadigmsEng</CODE>: </P>-<TABLE BORDER="1" CELLPADDING="4">+<TABLE CELLPADDING="4" BORDER="1"> <TR> <TH>Function</TH> <TH COLSPAN="2">Type</TH>@@ -3040,7 +3375,7 @@ <P> From <CODE>ParadigmsIta</CODE>: </P>-<TABLE BORDER="1" CELLPADDING="4">+<TABLE CELLPADDING="4" BORDER="1"> <TR> <TH>Function</TH> <TH COLSPAN="2">Type</TH>@@ -3058,11 +3393,12 @@ <P> <!-- NEW --> </P>+<A NAME="toc85"></A> <H3>A miniature resource API: more paradigms</H3> <P> From <CODE>ParadigmsGer</CODE>: </P>-<TABLE BORDER="1" CELLPADDING="4">+<TABLE CELLPADDING="4" BORDER="1"> <TR> <TH>Function</TH> <TH COLSPAN="2">Type</TH>@@ -3104,7 +3440,7 @@ <P> From <CODE>ParadigmsFin</CODE>: </P>-<TABLE BORDER="1" CELLPADDING="4">+<TABLE CELLPADDING="4" BORDER="1"> <TR> <TH>Function</TH> <TH COLSPAN="2">Type</TH>@@ -3122,6 +3458,7 @@ <P> <!-- NEW --> </P>+<A NAME="toc86"></A> <H3>Exercises</H3> <P> 1. Try out the morphological paradigms in different languages. Do @@ -3136,6 +3473,7 @@ <P> <!-- NEW --> </P>+<A NAME="toc87"></A> <H2>Example: English</H2> <P> <a name="secenglish"></a>@@ -3169,6 +3507,7 @@ <P> <!-- NEW --> </P>+<A NAME="toc88"></A> <H3>English example: linearization types and combination rules</H3> <P> As linearization types, we use clauses for <CODE>Phrase</CODE>, noun phrases@@ -3198,6 +3537,7 @@ <P> <!-- NEW --> </P>+<A NAME="toc89"></A> <H3>English example: lexical rules</H3> <P> We use resource paradigms and lexical insertion rules.@@ -3223,6 +3563,7 @@ <P> <!-- NEW --> </P>+<A NAME="toc90"></A> <H3>English example: exercises</H3> <P> 1. Compile the grammar <CODE>FoodsEng</CODE> and generate @@ -3237,10 +3578,12 @@ <P> <!-- NEW --> </P>+<A NAME="toc91"></A> <H2>Functor implementation of multilingual grammars</H2> <P> <a name="secfunctor"></a> </P>+<A NAME="toc92"></A> <H3>New language by copy and paste</H3> <P> If you write a concrete syntax of <CODE>Foods</CODE> for some other@@ -3271,6 +3614,7 @@ <P> <!-- NEW --> </P>+<A NAME="toc93"></A> <H3>Functors: functions on the module level</H3> <P> <B>Functors</B> familiar from the functional programming languages ML and OCaml, @@ -3315,6 +3659,7 @@ <P> <!-- NEW --> </P>+<A NAME="toc94"></A> <H3>Code for the Foods functor</H3> <PRE> --# -path=.:../foods@@ -3350,6 +3695,7 @@ <P> <!-- NEW --> </P>+<A NAME="toc95"></A> <H3>Code for the LexFoods interface</H3> <P> <a name="secinterface"></a>@@ -3373,6 +3719,7 @@ <P> <!-- NEW --> </P>+<A NAME="toc96"></A> <H3>Code for a German instance of the lexicon</H3> <PRE> instance LexFoodsGer of LexFoods = open SyntaxGer, ParadigmsGer in {@@ -3393,6 +3740,7 @@ <P> <!-- NEW --> </P>+<A NAME="toc97"></A> <H3>Code for a German functor instantiation</H3> <PRE> --# -path=.:../foods:present@@ -3405,6 +3753,7 @@ <P> <!-- NEW --> </P>+<A NAME="toc98"></A> <H3>Adding languages to a functor implementation</H3> <P> Just two modules are needed:@@ -3430,6 +3779,7 @@ <P> <!-- NEW --> </P>+<A NAME="toc99"></A> <H3>Example: adding Finnish</H3> <P> Lexicon instance@@ -3463,6 +3813,7 @@ <P> <!-- NEW --> </P>+<A NAME="toc100"></A> <H3>A design pattern</H3> <P> This can be seen as a <I>design pattern</I> for multilingual grammars:@@ -3485,6 +3836,7 @@ <P> <!-- NEW --> </P>+<A NAME="toc101"></A> <H3>Functors: exercises</H3> <P> 1. Compile and test <CODE>FoodsGer</CODE>.@@ -3525,7 +3877,9 @@ <P> <!-- NEW --> </P>+<A NAME="toc102"></A> <H2>Restricted inheritance</H2>+<A NAME="toc103"></A> <H3>A problem with functors</H3> <P> Problem: a functor only works when all languages use the resource <CODE>Syntax</CODE> @@ -3555,6 +3909,7 @@ <P> <!-- NEW --> </P>+<A NAME="toc104"></A> <H3>Restricted inheritance: include or exclude</H3> <P> A module may inherit just a selection of names.@@ -3575,6 +3930,7 @@ <P> <!-- NEW --> </P>+<A NAME="toc105"></A> <H3>The functor problem solved</H3> <P> The English instantiation inherits the functor @@ -3596,6 +3952,7 @@ <P> <!-- NEW --> </P>+<A NAME="toc106"></A> <H2>Grammar reuse</H2> <P> Abstract syntax modules can be used as interfaces, @@ -3617,6 +3974,7 @@ <P> <!-- NEW --> </P>+<A NAME="toc107"></A> <H3>Library exercises</H3> <P> 1. Find resource grammar terms for the following@@ -3641,6 +3999,7 @@ <P> <!-- NEW --> </P>+<A NAME="toc108"></A> <H2>Tenses</H2> <P> <a name="sectense"></a>@@ -3732,6 +4091,7 @@ <P> <!-- NEW --> </P>+<A NAME="toc109"></A> <H1>Lesson 5: Refining semantics in abstract syntax</H1> <P> <a name="chapsix"></a>@@ -3759,6 +4119,7 @@ <P> <!-- NEW --> </P>+<A NAME="toc110"></A> <H2>Dependent types</H2> <P> <a name="secsmarthouse"></a>@@ -3786,6 +4147,7 @@ <P> <!-- NEW --> </P>+<A NAME="toc111"></A> <H3>A dependent type system</H3> <P> Ontology: @@ -3814,6 +4176,7 @@ <P> <!-- NEW --> </P>+<A NAME="toc112"></A> <H3>Examples of devices and actions</H3> <P> Assume the kinds <CODE>light</CODE> and <CODE>fan</CODE>,@@ -3846,6 +4209,7 @@ <P> <!-- NEW --> </P>+<A NAME="toc113"></A> <H3>Linearization and parsing with dependent types</H3> <P> Concrete syntax does not know if a category is a dependent type. @@ -3888,6 +4252,7 @@ <P> <!-- NEW --> </P>+<A NAME="toc114"></A> <H3>Solving metavariables</H3> <P> Use the command <CODE>put_tree = pt</CODE> with the option <CODE>-typecheck</CODE>:@@ -3910,6 +4275,7 @@ <P> <!-- NEW --> </P>+<A NAME="toc115"></A> <H2>Polymorphism</H2> <P> <a name="secpolymorphic"></a>@@ -3942,6 +4308,7 @@ <P> <!-- NEW --> </P>+<A NAME="toc116"></A> <H3>Dependent types: exercises</H3> <P> 1. Write an abstract syntax module with above contents@@ -3958,6 +4325,7 @@ <P> <!-- NEW --> </P>+<A NAME="toc117"></A> <H2>Proof objects</H2> <P> <B>Curry-Howard isomorphism</B> = <B>propositions as types principle</B>:@@ -4002,6 +4370,7 @@ <P> <!-- NEW --> </P>+<A NAME="toc118"></A> <H3>Proof-carrying documents</H3> <P> Idea: to be semantically well-formed, the abstract syntax of a document @@ -4045,6 +4414,7 @@ <P> <!-- NEW --> </P>+<A NAME="toc119"></A> <H2>Restricted polymorphism</H2> <P> Above, all Actions were either of@@ -4069,6 +4439,7 @@ <P> <!-- NEW --> </P>+<A NAME="toc120"></A> <H3>Example: classes for switching and dimming</H3> <P> We modify the smart house grammar:@@ -4091,6 +4462,7 @@ <P> <!-- NEW --> </P>+<A NAME="toc121"></A> <H2>Variable bindings</H2> <P> <a name="secbinding"></a>@@ -4124,6 +4496,7 @@ <P> <!-- NEW --> </P>+<A NAME="toc122"></A> <H3>Higher-order abstract syntax</H3> <P> Abstract syntax can use functions as arguments:@@ -4161,6 +4534,7 @@ <P> <!-- NEW --> </P>+<A NAME="toc123"></A> <H3>Higher-order abstract syntax: linearization</H3> <P> HOAS has proved to be useful in the semantics and computer implementation of@@ -4194,6 +4568,7 @@ <P> <!-- NEW --> </P>+<A NAME="toc124"></A> <H3>Eta expansion</H3> <P> To make sense of linearization, syntax trees must be@@ -4242,6 +4617,7 @@ <P> <!-- NEW --> </P>+<A NAME="toc125"></A> <H3>Parsing variable bindings</H3> <P> GF can treat any one-word string as a variable symbol.@@ -4261,6 +4637,7 @@ <P> <!-- NEW --> </P>+<A NAME="toc126"></A> <H3>Exercises on variable bindings</H3> <P> 1. Write an abstract syntax of the whole@@ -4279,6 +4656,7 @@ <P> <!-- NEW --> </P>+<A NAME="toc127"></A> <H2>Semantic definitions</H2> <P> <a name="secdefdef"></a>@@ -4317,6 +4695,7 @@ <P> <!-- NEW --> </P>+<A NAME="toc128"></A> <H3>Computing a tree</H3> <P> Computation: follow a chain of definition until no definition@@ -4342,6 +4721,7 @@ <P> <!-- NEW --> </P>+<A NAME="toc129"></A> <H3>Definitional equality</H3> <P> Two trees are definitionally equal if they compute into the same tree.@@ -4369,6 +4749,7 @@ <P> <!-- NEW --> </P>+<A NAME="toc130"></A> <H3>Judgement forms for constructors</H3> <P> The judgement form <CODE>data</CODE> tells that a category has @@ -4398,6 +4779,7 @@ <P> <!-- NEW --> </P>+<A NAME="toc131"></A> <H3>Exercises on semantic definitions</H3> <P> 1. Implement an interpreter of a small functional programming@@ -4413,6 +4795,7 @@ <P> <!-- NEW --> </P>+<A NAME="toc132"></A> <H2>Lesson 6: Grammars of formal languages</H2> <P> <a name="chapseven"></a>@@ -4429,6 +4812,7 @@ <P> <!-- NEW --> </P>+<A NAME="toc133"></A> <H3>Arithmetic expressions</H3> <P> We construct a calculator with addition, subtraction, multiplication, and@@ -4459,6 +4843,7 @@ <P> <!-- NEW --> </P>+<A NAME="toc134"></A> <H3>Concrete syntax: a simple approach</H3> <P> We begin with a@@ -4500,6 +4885,7 @@ <P> <!-- NEW --> </P>+<A NAME="toc135"></A> <H2>Lexing and unlexing</H2> <P> <a name="seclexing"></a>@@ -4552,8 +4938,9 @@ <P> <!-- NEW --> </P>+<A NAME="toc136"></A> <H3>Most common lexers and unlexers</H3>-<TABLE ALIGN="center" BORDER="1" CELLPADDING="4">+<TABLE ALIGN="center" CELLPADDING="4" BORDER="1"> <TR> <TH>lexer</TH> <TH>unlexer</TH>@@ -4589,6 +4976,7 @@ <P> <!-- NEW --> </P>+<A NAME="toc137"></A> <H2>Precedence and fixity</H2> <P> Arithmetic expressions should be unambiguous. If we write@@ -4627,6 +5015,7 @@ <P> <!-- NEW --> </P>+<A NAME="toc138"></A> <H3>Precedence as a parameter</H3> <P> Precedence can be made into an inherent feature of expressions:@@ -4671,6 +5060,7 @@ <P> <!-- NEW --> </P>+<A NAME="toc139"></A> <H3>Fixities</H3> <P> We can define left-associative infix expressions:@@ -4711,6 +5101,7 @@ <P> <!-- NEW --> </P>+<A NAME="toc140"></A> <H3>Exercises on precedence</H3> <P> 1. Define non-associative and right-associative infix operations@@ -4724,6 +5115,7 @@ <P> <!-- NEW --> </P>+<A NAME="toc141"></A> <H2>Code generation as linearization</H2> <P> Translate arithmetic (infix) to JVM (postfix):@@ -4753,6 +5145,7 @@ <P> <!-- NEW --> </P>+<A NAME="toc142"></A> <H3>Programs with variables</H3> <P> A <B>straight code</B> programming language, with@@ -4801,6 +5194,7 @@ <P> <!-- NEW --> </P>+<A NAME="toc143"></A> <H3>Exercises on code generation</H3> <P> 1. Define a C-like concrete syntax of the straight-code language.@@ -4841,6 +5235,7 @@ <P> <!-- NEW --> </P>+<A NAME="toc144"></A> <H1>Lesson 7: Embedded grammars</H1> <P> <a name="chapeight"></a>@@ -4858,6 +5253,7 @@ <P> <!-- NEW --> </P>+<A NAME="toc145"></A> <H2>Functionalities of an embedded grammar format</H2> <P> GF grammars can be used as parts of programs written in other programming@@ -4874,6 +5270,7 @@ <P> <!-- NEW --> </P>+<A NAME="toc146"></A> <H2>The portable grammar format</H2> <P> The portable format is called PGF, "Portable Grammar Format".@@ -4901,6 +5298,7 @@ <P> <!-- NEW --> </P>+<A NAME="toc147"></A> <H3>Haskell: the EmbedAPI module</H3> <P> The Haskell API contains (among other things) the following types and functions:@@ -4929,6 +5327,7 @@ <P> <!-- NEW --> </P>+<A NAME="toc148"></A> <H3>First application: a translator</H3> <P> Let us first build a stand-alone translator, which can translate@@ -4963,6 +5362,7 @@ <P> <!-- NEW --> </P>+<A NAME="toc149"></A> <H3>Producing PGF for the translator</H3> <P> Then produce a PGF file. For instance, the <CODE>Food</CODE> grammar set can be @@ -4990,6 +5390,7 @@ <P> <!-- NEW --> </P>+<A NAME="toc150"></A> <H3>A translator loop</H3> <P> To avoid starting the translator over and over again:@@ -5011,6 +5412,7 @@ <P> <!-- NEW --> </P>+<A NAME="toc151"></A> <H3>A question-answer system</H3> <P> <a name="secmathprogram"></a>@@ -5055,6 +5457,7 @@ <P> <!-- NEW --> </P>+<A NAME="toc152"></A> <H3>Abstract syntax of the query system</H3> <P> Input: abstract syntax judgements@@ -5081,6 +5484,7 @@ <P> <!-- NEW --> </P>+<A NAME="toc153"></A> <H3>Exporting GF datatypes to Haskell</H3> <P> To make it easy to define a transfer function, we export the@@ -5131,6 +5535,7 @@ <P> <!-- NEW --> </P>+<A NAME="toc154"></A> <H3>The question-answer function</H3> <P> Haskell's type checker guarantees that the functions are well-typed also with@@ -5154,6 +5559,7 @@ <P> <!-- NEW --> </P>+<A NAME="toc155"></A> <H3>Converting between Haskell and GF trees</H3> <P> The generated Haskell module also contains@@ -5186,6 +5592,7 @@ <P> <!-- NEW --> </P>+<A NAME="toc156"></A> <H3>Putting it all together: the transfer definition</H3> <PRE> module TransferDef where@@ -5219,6 +5626,7 @@ <P> <!-- NEW --> </P>+<A NAME="toc157"></A> <H3>Putting it all together: the Main module</H3> <P> Here is the complete code in the Haskell file <CODE>TransferLoop.hs</CODE>.@@ -5250,6 +5658,7 @@ <P> <!-- NEW --> </P>+<A NAME="toc158"></A> <H3>Putting it all together: the Makefile</H3> <P> To automate the production of the system, we write a <CODE>Makefile</CODE> as follows:@@ -5287,6 +5696,7 @@ <P> <!-- NEW --> </P>+<A NAME="toc159"></A> <H2>Web server applications</H2> <P> PGF files can be used in web servers, for which there is a Haskell library included@@ -5305,6 +5715,7 @@ <P> <!-- NEW --> </P>+<A NAME="toc160"></A> <H2>JavaScript applications</H2> <P> JavaScript is a programming language that has interpreters built in in most@@ -5318,6 +5729,7 @@ <P> <!-- NEW --> </P>+<A NAME="toc161"></A> <H3>Compiling to JavaScript</H3> <P> JavaScript is one of the output formats of the GF batch compiler. Thus the following@@ -5333,6 +5745,7 @@ <P> <!-- NEW --> </P>+<A NAME="toc162"></A> <H3>Using the JavaScript grammar</H3> <P> To perform parsing and linearization, the run-time library@@ -5358,6 +5771,7 @@ <P> <!-- NEW --> </P>+<A NAME="toc163"></A> <H2>Language models for speech recognition</H2> <P> The standard way of using GF in speech recognition is by building@@ -5404,11 +5818,12 @@ <P> <!-- NEW --> </P>+<A NAME="toc164"></A> <H3>More speech recognition grammar formats</H3> <P> Other formats available via the <CODE>--output-format</CODE> flag include: </P>-<TABLE ALIGN="center" BORDER="1" CELLPADDING="4">+<TABLE ALIGN="center" CELLPADDING="4" BORDER="1"> <TR> <TH>Format</TH> <TH COLSPAN="2">Description</TH>@@ -5451,6 +5866,6 @@ All currently available formats can be seen with <CODE>gf --help</CODE>. </P> -<!-- html code generated by txt2tags 2.5 (http://txt2tags.sf.net) -->-<!-- cmdline: txt2tags -thtml ./doc/tutorial/gf-tutorial.t2t -->+<!-- html code generated by txt2tags 2.4 (http://txt2tags.sf.net) -->+<!-- cmdline: txt2tags -\-toc gf-tutorial.t2t --> </BODY></HTML>
@@ -13,84 +13,13 @@ <B>GF 3.2.9</B> source-only snapshot was released on 12 September 2011. </P> <P>-<B>GF 3.2</B> was released on 23 December 2010.-</P>-<P>-What's new? See the <A HREF="release-3.2.html">Release notes</A>.-</P>-<H2>Latest released binary packages</H2>-<TABLE CELLPADDING="4">-<TR>-<TH>Platform</TH>-<TH>Download</TH>-<TH>How to install</TH>-</TR>-<TR>-<TD>Ubuntu (32-bit)</TD>-<TD><A HREF="gf_3.2-4_i386.deb">gf_3.2-4_i386.deb</A></TD>-<TD>Double-click on the package icon, or use <CODE>sudo dpkg -i gf_3.2-4_i386.deb</CODE></TD>-</TR>-<TR>-<TD>Ubuntu (64-bit)</TD>-<TD><A HREF="gf_3.2-4_amd64.deb">gf_3.2-4_amd64.deb</A></TD>-<TD>Double-click on the package icon, or use <CODE>sudo dpkg -i gf_3.2-4_amd64.deb</CODE></TD>-</TR>-<TR>-<TD>Linux (32-bit)</TD>-<TD><A HREF="gf-3.2-bin-i386-linux.tar.gz">gf-3.2-bin-i386-linux.tar.gz</A></TD>-<TD><CODE>sudo tar -C /usr/local -zxf gf-3.2-bin-i386-linux.tar.gz</CODE></TD>-</TR>-<TR>-<TD>Linux (64-bit)</TD>-<TD><A HREF="gf-3.2-bin-x86_64-linux.tar.gz">gf-3.2-bin-x86_64-linux.tar.gz</A></TD>-<TD><CODE>sudo tar -C /usr/local -zxf gf-3.2-bin-x86_64-linux.tar.gz</CODE></TD>-</TR>-<TR>-<TD>MacOS X</TD>-<TD><A HREF="gf-3.2-snowleopard.pkg">gf-3.2-snowleopard.pkg</A></TD>-<TD>Double-click on the package icon and follow the instructions</TD>-</TR>-<TR>-<TD>MacOS X</TD>-<TD><A HREF="gf-3.2-bin-intel-mac.tar.gz">gf-3.2-bin-intel-mac.tar.gz</A></TD>-<TD><CODE>sudo tar -C /usr/local -zxf gf-3.2-bin-intel-mac.tar.gz</CODE></TD>-</TR>-<TR>-<TD>Windows</TD>-<TD><A HREF="gf-3.2-bin-i386-windows.zip">gf-3.2-bin-i386-windows.zip</A></TD>-<TD><CODE>unzip gf-3.2-bin-i386-windows.zip</CODE></TD>-</TR>-</TABLE>--<P>-More packages might be added later.-</P>-<H3>Notes</H3>-<P>-The Windows package is installed by just unpacking it anywhere. -It finds the libraries relative to the <CODE>.exe</CODE> file.-</P>-<P>-The <CODE>.deb</CODE> packages work on Ubuntu 10.04 and 10.10.-</P>-<P>-The <CODE>.pkg</CODE> package works on MacOS X 10.6 (Snow Leopard). The MacOS tar-package works on 10.5 (Leopard) and 10.6 (Snow Leopard).-</P>-<P>-The MacOS and Linux tar packages are designed to be installed in <CODE>/usr/local</CODE>.-You can install them in other locations, but then you need to set the-<CODE>GF_LIB_PATH</CODE> environment variable:+What's new? Faster grammar compilation! </P>-<PRE>- export GF_LIB_PATH=/usr/local/share/gf-3.2/lib-</PRE>-<P></P>+<H2>Binary packages</H2> <P>-where <CODE>/usr/local</CODE> should be replaced with the path to the location where you-unpacked the package.+No binary packages were created for this release. </P>-<H2>Installing the latest release from source</H2>+<H2>Installing from source</H2> <P> <A HREF="http://hackage.haskell.org/package/gf">GF is on Hackage</A>, so the prodedure is fairly simple:
@@ -8,48 +8,16 @@ **GF 3.2.9** source-only snapshot was released on 12 September 2011. -**GF 3.2** was released on 23 December 2010.--What's new? See the [Release notes release-3.2.html].+What's new? Faster grammar compilation! -== Latest released binary packages ==+== Binary packages == -| **Platform** | **Download** | **How to install**-| Ubuntu (32-bit) | [gf_3.2-4_i386.deb gf_3.2-4_i386.deb] | Double-click on the package icon, or use ``sudo dpkg -i gf_3.2-4_i386.deb``-| Ubuntu (64-bit) | [gf_3.2-4_amd64.deb gf_3.2-4_amd64.deb] | Double-click on the package icon, or use ``sudo dpkg -i gf_3.2-4_amd64.deb``-| Linux (32-bit) | [gf-3.2-bin-i386-linux.tar.gz gf-3.2-bin-i386-linux.tar.gz] | ``sudo tar -C /usr/local -zxf gf-3.2-bin-i386-linux.tar.gz``-| Linux (64-bit) | [gf-3.2-bin-x86_64-linux.tar.gz gf-3.2-bin-x86_64-linux.tar.gz] | ``sudo tar -C /usr/local -zxf gf-3.2-bin-x86_64-linux.tar.gz``-| MacOS X | [gf-3.2-snowleopard.pkg gf-3.2-snowleopard.pkg] | Double-click on the package icon and follow the instructions-| MacOS X | [gf-3.2-bin-intel-mac.tar.gz gf-3.2-bin-intel-mac.tar.gz] | ``sudo tar -C /usr/local -zxf gf-3.2-bin-intel-mac.tar.gz``-| Windows | [gf-3.2-bin-i386-windows.zip gf-3.2-bin-i386-windows.zip] | ``unzip gf-3.2-bin-i386-windows.zip``--More packages might be added later.--===Notes===--The Windows package is installed by just unpacking it anywhere. -It finds the libraries relative to the ``.exe`` file.--The ``.deb`` packages work on Ubuntu 10.04 and 10.10.--The ``.pkg`` package works on MacOS X 10.6 (Snow Leopard). The MacOS tar-package works on 10.5 (Leopard) and 10.6 (Snow Leopard).--The MacOS and Linux tar packages are designed to be installed in ``/usr/local``.-You can install them in other locations, but then you need to set the-``GF_LIB_PATH`` environment variable:--```- export GF_LIB_PATH=/usr/local/share/gf-3.2/lib-```--where ``/usr/local`` should be replaced with the path to the location where you-unpacked the package.+No binary packages were created for this release. -==Installing the latest release from source==+==Installing from source== [GF is on Hackage http://hackage.haskell.org/package/gf], so the prodedure is fairly simple:
@@ -0,0 +1,176 @@+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">+<HTML>+<HEAD>+<META NAME="generator" CONTENT="http://txt2tags.sf.net">+<LINK REL="stylesheet" TYPE="text/css" HREF="../css/style.css">+<TITLE>Grammatical Framework Download and Installation</TITLE>+</HEAD><BODY BGCOLOR="white" TEXT="black">+<P ALIGN="center"><CENTER><H1><a href="../"><IMG src="../doc/Logos/gf0.png"></a>Grammatical Framework Download and Installation</H1>+<FONT SIZE="4">+</FONT></CENTER>++<P>+<B>GF 3.3</B> was released on 27 October 2011.+</P>+<P>+What's new? See the <A HREF="release-3.3.html">Release notes</A>.+</P>+<H2>Binary packages</H2>+<TABLE CELLPADDING="4">+<TR>+<TH>Platform</TH>+<TH>Download</TH>+<TH>How to install</TH>+</TR>+<TR>+<TD>Linux (32-bit)</TD>+<TD><A HREF="gf-3.3-bin-i386-linux.tar.gz">gf-3.3-bin-i386-linux.tar.gz</A></TD>+<TD><CODE>sudo tar -C /usr/local -zxf gf-3.3-bin-i386-linux.tar.gz</CODE></TD>+</TR>+<TR>+<TD>Linux (64-bit)</TD>+<TD><A HREF="gf-3.3-bin-amd64-linux.tar.gz">gf-3.3-bin-amd64-linux.tar.gz</A></TD>+<TD><CODE>sudo tar -C /usr/local -zxf gf-3.3-bin-amd64-linux.tar.gz</CODE></TD>+</TR>+<TR>+<TD>MacOS X</TD>+<TD><A HREF="gf-3.3-bin-intel-mac.tar.gz">gf-3.3-bin-intel-mac.tar.gz</A></TD>+<TD><CODE>sudo tar -C /usr/local -zxf gf-3.3-bin-intel-mac.tar.gz</CODE></TD>+</TR>+<TR>+<TD>Ubuntu 11.10 (32-bit)</TD>+<TD><A HREF="gf_3.3-1_i386-oneiric.deb">gf_3.3-1_i386-oneiric.deb</A></TD>+<TD>Double-click on the package icon, or use <CODE>sudo dpkg -i gf_3.3-1_i386-oneiric.deb</CODE></TD>+</TR>+<TR>+<TD>Ubuntu 11.10 (64-bit)</TD>+<TD><A HREF="gf_3.3-1_amd64-oneiric.deb">gf_3.3-1_amd64-oneiric.deb</A></TD>+<TD>Double-click on the package icon, or use <CODE>sudo dpkg -i gf_3.3-1_amd64-oneiric.deb</CODE></TD>+</TR>+<TR>+<TD>Ubuntu 11.04 (32-bit)</TD>+<TD><A HREF="gf_3.3-1_i386-natty.deb">gf_3.3-1_i386-natty.deb</A></TD>+<TD>Double-click on the package icon, or use <CODE>sudo dpkg -i gf_3.3-1_i386-natty.deb</CODE></TD>+</TR>+<TR>+<TD>Ubuntu 11.04 (64-bit)</TD>+<TD><A HREF="gf_3.3-1_amd64-natty.deb">gf_3.3-1_amd64-natty.deb</A></TD>+<TD>Double-click on the package icon, or use <CODE>sudo dpkg -i gf_3.3-1_amd64-natty.deb</CODE></TD>+</TR>+<TR>+<TD>Windows</TD>+<TD><A HREF="gf-3.3-bin-i386-windows.zip">gf-3.3-bin-i386-windows.zip</A></TD>+<TD><CODE>unzip gf-3.3-bin-i386-windows.zip</CODE></TD>+</TR>+</TABLE>++<P>+More packages might be added later.+</P>+<H3>Notes</H3>+<P>+The Windows package is installed by just unpacking it anywhere. +It finds the libraries relative to the <CODE>.exe</CODE> file.+</P>+<P>+The MacOS tar package works on 10.5 (Leopard), 10.6 (Snow Leopard) and probably+also 10.7 (Lion).+</P>+<P>+The MacOS and Linux <CODE>.tar.gz</CODE> packages are designed to be installed in <CODE>/usr/local</CODE>.+You can install them in other locations, but then you need to set the+<CODE>GF_LIB_PATH</CODE> environment variable:+</P>+<PRE>+ export GF_LIB_PATH=/usr/local/share/gf-3.3/lib+</PRE>+<P></P>+<P>+where <CODE>/usr/local</CODE> should be replaced with the path to the location where you+unpacked the package.+</P>+<H2>Installing the latest release from source</H2>+<P>+<A HREF="http://hackage.haskell.org/package/gf">GF is on Hackage</A>, so the prodedure is+fairly simple:+</P>+<OL>+<LI>Install the+ <A HREF="http://hackage.haskell.org/platform">Haskell Platform 2010.2.0.0 (July 2010)</A>+ or newer.+<LI><CODE>cabal update</CODE>+<LI>On Linux: install some C libraries from your Linux distribution (see below)+<LI><CODE>cabal install gf</CODE>+</OL>++<P>+You can also download the full source package from here:+<A HREF="gf-3.3.tar.gz"><CODE>gf-3.3.tar.gz</CODE></A>.+</P>+<H3>Notes</H3>+<P>+The above steps installs GF for a single user and does not require root+privileges. The executables are put in <CODE>$HOME/.cabal/bin</CODE>+(or, with recent versions of the Haskell platform on Mac OS X,+in <CODE>$HOME/Library/Haskell/bin</CODE>), so it is a good+idea to put a line in your <CODE>.bash_profile</CODE> to add that directory to you path:+</P>+<PRE>+ PATH=$HOME/.cabal/bin:$PATH+</PRE>+<P>+or+</P>+<PRE>+ PATH=$HOME/Library/Haskell/bin:$PATH+</PRE>+<P></P>+<P>+GF uses <CODE>haskeline</CODE>, which depends some non-Haskell libraries that+won't be installed automatically by cabal, so you need to install+them manually. Here is one way to do this:+</P>+<UL>+<LI>On Ubuntu: <CODE>sudo apt-get install libghc6-terminfo-dev</CODE>+<LI>On Fedora: <CODE>sudo yum install ghc-terminfo-devel</CODE>+</UL>++<H2>Installing from the latest developer code</H2>+<P>+The first time:+</P>+<PRE>+ darcs get --lazy http://www.grammaticalframework.org/ GF+ cd GF+ cabal install+</PRE>+<P></P>+<P>+Subsequently:+</P>+<PRE>+ cd GF+ darcs pull -a+ cabal install+</PRE>+<P></P>+<P>+The above notes for installing from source apply also in this case.+</P>+<H2>Older releases</H2>+<UL>+<LI><A HREF="index-3.2.9.html">GF 3.2.9</A> source-only snapshot (September 2011).+<LI><A HREF="index-3.2.html">GF 3.2</A> (December 2010).+<LI><A HREF="index-3.1.6.html">GF 3.1.6</A> (April 2010).+<LI><A HREF="old-index.html">GF 3.1</A> (December 2009).+</UL>++<HR NOSHADE SIZE=1>+<P></P>+<P>+<A HREF="http://www.grammaticalframework.org">www.grammaticalframework.org</A>+</P>++<!-- html code generated by txt2tags 2.5 (http://txt2tags.sf.net) -->+<!-- cmdline: txt2tags -thtml ./download/index-3.3.t2t -->+</BODY></HTML>
@@ -0,0 +1,123 @@+Grammatical Framework Download and Installation+++%!style:../css/style.css+%!postproc(html): <TD><B> <TH>+%!postproc(html): </B></TD> </TH>+%!postproc(html): <H1> <H1><a href="../"><IMG src="../doc/Logos/gf0.png"></a>++**GF 3.3** was released on 27 October 2011.++What's new? See the [Release notes release-3.3.html].+++== Binary packages ==++| **Platform** | **Download** | **How to install**+| Linux (32-bit) | [gf-3.3-bin-i386-linux.tar.gz gf-3.3-bin-i386-linux.tar.gz] | ``sudo tar -C /usr/local -zxf gf-3.3-bin-i386-linux.tar.gz``+| Linux (64-bit) | [gf-3.3-bin-amd64-linux.tar.gz gf-3.3-bin-amd64-linux.tar.gz] | ``sudo tar -C /usr/local -zxf gf-3.3-bin-amd64-linux.tar.gz``+| MacOS X | [gf-3.3-bin-intel-mac.tar.gz gf-3.3-bin-intel-mac.tar.gz] | ``sudo tar -C /usr/local -zxf gf-3.3-bin-intel-mac.tar.gz``+| Ubuntu 11.10 (32-bit) | [gf_3.3-1_i386-oneiric.deb gf_3.3-1_i386-oneiric.deb] | Double-click on the package icon, or use ``sudo dpkg -i gf_3.3-1_i386-oneiric.deb``+| Ubuntu 11.10 (64-bit) | [gf_3.3-1_amd64-oneiric.deb gf_3.3-1_amd64-oneiric.deb] | Double-click on the package icon, or use ``sudo dpkg -i gf_3.3-1_amd64-oneiric.deb``+| Ubuntu 11.04 (32-bit) | [gf_3.3-1_i386-natty.deb gf_3.3-1_i386-natty.deb] | Double-click on the package icon, or use ``sudo dpkg -i gf_3.3-1_i386-natty.deb``+| Ubuntu 11.04 (64-bit) | [gf_3.3-1_amd64-natty.deb gf_3.3-1_amd64-natty.deb] | Double-click on the package icon, or use ``sudo dpkg -i gf_3.3-1_amd64-natty.deb``+| Windows | [gf-3.3-bin-i386-windows.zip gf-3.3-bin-i386-windows.zip] | ``unzip gf-3.3-bin-i386-windows.zip``++More packages might be added later.++===Notes===++The Windows package is installed by just unpacking it anywhere. +It finds the libraries relative to the ``.exe`` file.++%The ``.deb`` packages work on Ubuntu 10.04 and 10.10.++%The ``.pkg`` package works on MacOS X 10.6 (Snow Leopard).+The MacOS tar package works on 10.5 (Leopard), 10.6 (Snow Leopard) and probably+also 10.7 (Lion).++The MacOS and Linux ``.tar.gz`` packages are designed to be installed in ``/usr/local``.+You can install them in other locations, but then you need to set the+``GF_LIB_PATH`` environment variable:++```+ export GF_LIB_PATH=/usr/local/share/gf-3.3/lib+```++where ``/usr/local`` should be replaced with the path to the location where you+unpacked the package.+++==Installing the latest release from source==++[GF is on Hackage http://hackage.haskell.org/package/gf], so the prodedure is+fairly simple:+++ Install the+ [Haskell Platform 2010.2.0.0 (July 2010) http://hackage.haskell.org/platform]+ or newer.++ ``cabal update``++ On Linux: install some C libraries from your Linux distribution (see below)++ ``cabal install gf``+++You can also download the full source package from here:+[``gf-3.3.tar.gz`` gf-3.3.tar.gz].++=== Notes ===++The above steps installs GF for a single user and does not require root+privileges. The executables are put in ``$HOME/.cabal/bin``+(or, with recent versions of the Haskell platform on Mac OS X,+in ``$HOME/Library/Haskell/bin``), so it is a good+idea to put a line in your ``.bash_profile`` to add that directory to you path:++```+ PATH=$HOME/.cabal/bin:$PATH+```+or+```+ PATH=$HOME/Library/Haskell/bin:$PATH+```++GF uses ``haskeline``, which depends some non-Haskell libraries that+won't be installed automatically by cabal, so you need to install+them manually. Here is one way to do this:++- On Ubuntu: ``sudo apt-get install libghc6-terminfo-dev``+- On Fedora: ``sudo yum install ghc-terminfo-devel``+++==Installing from the latest developer code==++The first time:++```+ darcs get --lazy http://www.grammaticalframework.org/ GF+ cd GF+ cabal install+```++Subsequently:++```+ cd GF+ darcs pull -a+ cabal install+```++The above notes for installing from source apply also in this case.+++==Older releases==++- [GF 3.2.9 index-3.2.9.html] source-only snapshot (September 2011).+- [GF 3.2 index-3.2.html] (December 2010).+- [GF 3.1.6 index-3.1.6.html] (April 2010).+- [GF 3.1 old-index.html] (December 2009).+++--------------------++[www.grammaticalframework.org http://www.grammaticalframework.org]+
@@ -10,10 +10,10 @@ </FONT></CENTER> <P>-<B>GF 3.3</B> was released on 27 October 2011.+<B>GF 3.3.3</B> was released on 3 March 2012. </P> <P>-What's new? See the <A HREF="release-3.3.html">Release notes</A>.+What's new? See the <A HREF="release-3.3.3.html">Release notes</A>. </P> <H2>Binary packages</H2> <TABLE CELLPADDING="4">@@ -23,6 +23,26 @@ <TH>How to install</TH> </TR> <TR>+<TD>Linux (32-bit)</TD>+<TD><A HREF="gf-3.3.3-bin-i386-linux.tar.gz">gf-3.3.3-bin-i386-linux.tar.gz</A></TD>+<TD><CODE>sudo tar -C /usr/local -zxf gf-3.3.3-bin-i386-linux.tar.gz</CODE></TD>+</TR>+<TR>+<TD>Linux (64-bit)</TD>+<TD><A HREF="gf-3.3.3-bin-amd64-linux.tar.gz">gf-3.3.3-bin-amd64-linux.tar.gz</A></TD>+<TD><CODE>sudo tar -C /usr/local -zxf gf-3.3.3-bin-amd64-linux.tar.gz</CODE></TD>+</TR>+<TR>+<TD>MacOS X</TD>+<TD><A HREF="gf-3.3.3-bin-intel-mac.tar.gz">gf-3.3.3-bin-intel-mac.tar.gz</A></TD>+<TD><CODE>sudo tar -C /usr/local -zxf gf-3.3.3-bin-intel-mac.tar.gz</CODE></TD>+</TR>+<TR>+<TD>Windows</TD>+<TD><A HREF="gf-3.3.3-bin-windows.zip">gf-3.3.3-bin-windows.zip</A></TD>+<TD><CODE>unzip gf-3.3.3-bin-windows.zip</CODE></TD>+</TR>+<TR> <TD>...</TD> <TD>...</TD> <TD>...</TD>@@ -38,19 +58,16 @@ It finds the libraries relative to the <CODE>.exe</CODE> file. </P> <P>-The <CODE>.deb</CODE> packages work on Ubuntu 10.04 and 10.10.-</P>-<P>-The <CODE>.pkg</CODE> package works on MacOS X 10.6 (Snow Leopard). The MacOS tar-package works on 10.5 (Leopard) and 10.6 (Snow Leopard).+The MacOS tar package works on 10.5 (Leopard), 10.6 (Snow Leopard) and probably+also 10.7 (Lion). </P> <P>-The MacOS and Linux tar packages are designed to be installed in <CODE>/usr/local</CODE>.+The MacOS and Linux <CODE>.tar.gz</CODE> packages are designed to be installed in <CODE>/usr/local</CODE>. You can install them in other locations, but then you need to set the <CODE>GF_LIB_PATH</CODE> environment variable: </P> <PRE>- export GF_LIB_PATH=/usr/local/share/gf-3.3/lib+ export GF_LIB_PATH=/usr/local/share/gf-3.3.3/lib </PRE> <P></P> <P>@@ -63,30 +80,40 @@ fairly simple: </P> <OL>-<LI>Install the- <A HREF="http://hackage.haskell.org/platform">Haskell Platform 2010.2.0.0 (July 2010)</A>- or newer.+<LI>Install the <A HREF="http://hackage.haskell.org/platform">Haskell Platform</A>+ (versions 2010.2.0.0 - 2011.4.0.0 should work) (see note 2 below) <LI><CODE>cabal update</CODE>-<LI>On Linux: install some C libraries from your Linux distribution (see below)+<LI>On Linux: install some C libraries from your Linux distribution+ (see note 1 below) <LI><CODE>cabal install gf</CODE> </OL> <P> You can also download the full source package from here:-<A HREF="gf-3.3.tar.gz"><CODE>gf-3.3.tar.gz</CODE></A>.+<A HREF="gf-3.3.3.tar.gz"><CODE>gf-3.3.3.tar.gz</CODE></A>. </P> <H3>Notes</H3> <P>-The above steps installs GF for a single user and does not require root-privileges. The executables are put in <CODE>$HOME/.cabal/bin</CODE>, so it is a good+The above steps installs GF for a single user.+The executables are put in <CODE>$HOME/.cabal/bin</CODE>+(or, with recent versions of the Haskell platform on Mac OS X,+in <CODE>$HOME/Library/Haskell/bin</CODE>), so it is a good idea to put a line in your <CODE>.bash_profile</CODE> to add that directory to you path: </P> <PRE> PATH=$HOME/.cabal/bin:$PATH </PRE>+<P>+or+</P>+<PRE>+ PATH=$HOME/Library/Haskell/bin:$PATH+</PRE> <P></P> <P>-GF uses <CODE>haskeline</CODE>, which depends some non-Haskell libraries that+<B>Note 1</B>.+GF uses <A HREF="http://hackage.haskell.org/package/haskeline"><CODE>haskeline</CODE></A>, which+depends some non-Haskell libraries that won't be installed automatically by cabal, so you need to install them manually. Here is one way to do this: </P>@@ -95,6 +122,11 @@ <LI>On Fedora: <CODE>sudo yum install ghc-terminfo-devel</CODE> </UL> +<P>+<B>Note 2</B>.+GF does <B>not</B> compile with the most recent versions of GHC (>=7.2).+GF does <B>not</B> compile with the most recent versions of Alex (>=3.0).+</P> <H2>Installing from the latest developer code</H2> <P> The first time:@@ -119,8 +151,9 @@ </P> <H2>Older releases</H2> <UL>+<LI><A HREF="index-3.3.html">GF 3.3</A> (October 2011). <LI><A HREF="index-3.2.9.html">GF 3.2.9</A> source-only snapshot (September 2011).-<LI><A HREF="index-3.2.html">GF 3.2</A> (December 2011).+<LI><A HREF="index-3.2.html">GF 3.2</A> (December 2010). <LI><A HREF="index-3.1.6.html">GF 3.1.6</A> (April 2010). <LI><A HREF="old-index.html">GF 3.1</A> (December 2009). </UL>
@@ -6,14 +6,18 @@ %!postproc(html): </B></TD> </TH> %!postproc(html): <H1> <H1><a href="../"><IMG src="../doc/Logos/gf0.png"></a> -**GF 3.3** was released on 27 October 2011.+**GF 3.3.3** was released on 3 March 2012. -What's new? See the [Release notes release-3.3.html].+What's new? See the [Release notes release-3.3.3.html]. == Binary packages == | **Platform** | **Download** | **How to install**+| Linux (32-bit) | [gf-3.3.3-bin-i386-linux.tar.gz gf-3.3.3-bin-i386-linux.tar.gz] | ``sudo tar -C /usr/local -zxf gf-3.3.3-bin-i386-linux.tar.gz``+| Linux (64-bit) | [gf-3.3.3-bin-amd64-linux.tar.gz gf-3.3.3-bin-amd64-linux.tar.gz] | ``sudo tar -C /usr/local -zxf gf-3.3.3-bin-amd64-linux.tar.gz``+| MacOS X | [gf-3.3.3-bin-intel-mac.tar.gz gf-3.3.3-bin-intel-mac.tar.gz] | ``sudo tar -C /usr/local -zxf gf-3.3.3-bin-intel-mac.tar.gz``+| Windows | [gf-3.3.3-bin-windows.zip gf-3.3.3-bin-windows.zip] | ``unzip gf-3.3.3-bin-windows.zip`` | ... | ... | ... More packages might be added later.@@ -23,17 +27,18 @@ The Windows package is installed by just unpacking it anywhere. It finds the libraries relative to the ``.exe`` file. -The ``.deb`` packages work on Ubuntu 10.04 and 10.10.+%The ``.deb`` packages work on Ubuntu 10.04 and 10.10. -The ``.pkg`` package works on MacOS X 10.6 (Snow Leopard). The MacOS tar-package works on 10.5 (Leopard) and 10.6 (Snow Leopard).+%The ``.pkg`` package works on MacOS X 10.6 (Snow Leopard).+The MacOS tar package works on 10.5 (Leopard), 10.6 (Snow Leopard) and probably+also 10.7 (Lion). -The MacOS and Linux tar packages are designed to be installed in ``/usr/local``.+The MacOS and Linux ``.tar.gz`` packages are designed to be installed in ``/usr/local``. You can install them in other locations, but then you need to set the ``GF_LIB_PATH`` environment variable: ```- export GF_LIB_PATH=/usr/local/share/gf-3.3/lib+ export GF_LIB_PATH=/usr/local/share/gf-3.3.3/lib ``` where ``/usr/local`` should be replaced with the path to the location where you@@ -45,28 +50,37 @@ [GF is on Hackage http://hackage.haskell.org/package/gf], so the prodedure is fairly simple: -+ Install the- [Haskell Platform 2010.2.0.0 (July 2010) http://hackage.haskell.org/platform]- or newer.++ Install the [Haskell Platform http://hackage.haskell.org/platform]+ (versions 2010.2.0.0 - 2011.4.0.0 should work) (see note 2 below) + ``cabal update``-+ On Linux: install some C libraries from your Linux distribution (see below)++ On Linux: install some C libraries from your Linux distribution+ (see note 1 below) + ``cabal install gf`` You can also download the full source package from here:-[``gf-3.3.tar.gz`` gf-3.3.tar.gz].+[``gf-3.3.3.tar.gz`` gf-3.3.3.tar.gz]. === Notes === -The above steps installs GF for a single user and does not require root-privileges. The executables are put in ``$HOME/.cabal/bin``, so it is a good+The above steps installs GF for a single user.+% and does not require root privileges.+The executables are put in ``$HOME/.cabal/bin``+(or, with recent versions of the Haskell platform on Mac OS X,+in ``$HOME/Library/Haskell/bin``), so it is a good idea to put a line in your ``.bash_profile`` to add that directory to you path: ``` PATH=$HOME/.cabal/bin:$PATH ```+or+```+ PATH=$HOME/Library/Haskell/bin:$PATH+``` -GF uses ``haskeline``, which depends some non-Haskell libraries that+**Note 1**.+GF uses [``haskeline`` http://hackage.haskell.org/package/haskeline], which+depends some non-Haskell libraries that won't be installed automatically by cabal, so you need to install them manually. Here is one way to do this: @@ -74,9 +88,14 @@ - On Fedora: ``sudo yum install ghc-terminfo-devel`` +**Note 2**.+GF does **not** compile with the most recent versions of GHC (>=7.2).+GF does **not** compile with the most recent versions of Alex (>=3.0).+ ==Installing from the latest developer code== The first time:+%, assuming you already have the Haskell Platform and darcs ``` darcs get --lazy http://www.grammaticalframework.org/ GF@@ -97,8 +116,9 @@ ==Older releases== +- [GF 3.3 index-3.3.html] (October 2011). - [GF 3.2.9 index-3.2.9.html] source-only snapshot (September 2011).-- [GF 3.2 index-3.2.html] (December 2011).+- [GF 3.2 index-3.2.html] (December 2010). - [GF 3.1.6 index-3.1.6.html] (April 2010). - [GF 3.1 old-index.html] (December 2009).
@@ -0,0 +1,43 @@+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">+<HTML>+<HEAD>+<META NAME="generator" CONTENT="http://txt2tags.sf.net">+<LINK REL="stylesheet" TYPE="text/css" HREF="../css/style.css">+<TITLE>GF Version 3.3.3 Release Notes</TITLE>+</HEAD><BODY BGCOLOR="white" TEXT="black">+<P ALIGN="center"><CENTER><H1><IMG src="../doc/Logos/gf0.png">GF Version 3.3.3 Release Notes</H1>+<FONT SIZE="4">+<I>March 2012</I><BR>+</FONT></CENTER>++<H2>Installation</H2>+<P>+See the <A HREF="http://www.grammaticalframework.org/download/index.html">download page</A>.+</P>+<H2>New features</H2>+<UL>+<LI>New option <CODE>gf -tags</CODE> generates tags files for use with the+ <A HREF="http://www.grammaticalframework.org/eclipse/">GF Eclipse plugin</A>.+<LI>New languages in the Resource Grammar Library: Latvian, Thai, Hindi, Sindhi+ (see the <A HREF="../lib/doc/synopsis.html">updated synopsis</A>). Improvements for other+ languages, e.g. Russian and Swedish.+<LI>Improved separate compilation makes recompiling large grammars faster.+ The flag <CODE>-no-pmcfg</CODE> reverts to the old behaviour.+<LI>Version numbers in <CODE>.gfo</CODE> files to avoid problems caused by reuse of+ <CODE>.gfo</CODE> files produced with an incompatible version of the compiler.+<LI>The web-based grammar editor now supports grammar extension and text mode+ editing with instant syntax checking.+<LI>Fix for a bug that prevented the shell commands <CODE>abstract_info</CODE>,+ <CODE>generate_random</CODE> and <CODE>generate_trees</CODE> from working properly.+<LI>Various other small improvements and bug fixes.+</UL>++<HR NOSHADE SIZE=1>+<P></P>+<P>+<A HREF="http://www.grammaticalframework.org">www.grammaticalframework.org</A>+</P>++<!-- html code generated by txt2tags 2.5 (http://txt2tags.sf.net) -->+<!-- cmdline: txt2tags -thtml ./download/release-3.3.3.t2t -->+</BODY></HTML>
@@ -0,0 +1,31 @@+GF Version 3.3.3 Release Notes+March 2012++%!style:../css/style.css+%!postproc(html): <H1> <H1><IMG src="../doc/Logos/gf0.png">++==Installation==++See the [download page http://www.grammaticalframework.org/download/index.html].++==New features==++- New option ``gf -tags`` generates tags files for use with the+ [GF Eclipse plugin http://www.grammaticalframework.org/eclipse/].+- New languages in the Resource Grammar Library: Latvian, Thai, Hindi, Sindhi+ (see the [updated synopsis ../lib/doc/synopsis.html]). Improvements for other+ languages, e.g. Russian and Swedish.+- Improved separate compilation makes recompiling large grammars faster.+ The flag ``-no-pmcfg`` reverts to the old behaviour.+- Version numbers in ``.gfo`` files to avoid problems caused by reuse of+ ``.gfo`` files produced with an incompatible version of the compiler.+- The web-based grammar editor now supports grammar extension and text mode+ editing with instant syntax checking.+- Fix for a bug that prevented the shell commands ``abstract_info``,+ ``generate_random`` and ``generate_trees`` from working properly.+- Various other small improvements and bug fixes.+++--------------------++[www.grammaticalframework.org http://www.grammaticalframework.org]
@@ -7,7 +7,7 @@ </HEAD><BODY BGCOLOR="white" TEXT="black"> <P ALIGN="center"><CENTER><H1><IMG src="../doc/Logos/gf0.png">GF Version 3.3 Release Notes</H1> <FONT SIZE="4">-<I>October 2010</I><BR>+<I>October 2011</I><BR> </FONT></CENTER> <H2>Installation</H2>
@@ -1,5 +1,5 @@ GF Version 3.3 Release Notes-October 2010+October 2011 %!style:../css/style.css %!postproc(html): <H1> <H1><IMG src="../doc/Logos/gf0.png">
binary file changed (640 → absent bytes)
binary file changed (2366 → absent bytes)
binary file changed (963 → absent bytes)
binary file changed (2469 → absent bytes)
binary file changed (361746 → absent bytes)
binary file changed (434519 → absent bytes)
binary file changed (absent → 9487 bytes)
binary file changed (80409 → 81925 bytes)
binary file changed (43019 → 38365 bytes)
binary file changed (absent → 70900 bytes)
@@ -1,14 +1,301 @@-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">-<HTML>-<HEAD>-<TITLE>GF Eclipse Plugin</TITLE>-</HEAD>-<BODY>-<CENTER>-<H1>GF Eclipse Plugin</H1>-<P>-This information has now moved to the <A href="http://www.molto-project.eu/node/1395" title="GF Eclipse Plugin at the MOLTO Project website Wiki">MOLTO Project Wiki</A>.-</P>-</CENTER>-</BODY>-</HTML>+<h1>The GF Eclipse Plugin</h1>++<p>John J. Camilleri<br />+Updated: 8 Feb 2012</p>++<p><em>The research leading to these results has received funding from the European Union’s Seventh Framework Programme (FP7/2007-2013) under grant agreement n° FP7-ICT-247914.</em></p>++<p><em>This documentation is also available at the <a href="http://www.molto-project.eu/node/1395">MOLTO Project Wiki</a>.</em></p>++<h2>Introduction</h2>++<p>The aim behind developing a desktop IDE for GF is to provide more powerful tools than may be possible and/or practical in a web-based environment (the GF Web IDE). In particular, the ability to resolve identifier cross-references and browse external libraries quickly during development time is one of the primary motivations for the project.</p>++<p>The choice was made to develop this desktop IDE as a plugin for the Eclipse Platform as it emerged as the most popular choice among the GF developer community. Support for the platform is vast and many tools for adapting Eclipse to domain-specific languages already exist. Unlike the zero-click Web IDE approach, using the GF Eclipse plugin (GFEP) will require some manual installation and configuration on the development machine. Thus the GFEP is aimed more at seasoned developers rather than the curious GF newbie.</p>++<p>The starting point for the GFEP is using the <a href="http://www.eclipse.org/Xtext/">Xtext DSL Framework</a> for Eclipse. By converting the GF grammar into the appropriate Extended-BNF form required by the LL(*) ANTLR parser, the framework provides a good starting point for future plugin development, already including a variery of syntax checking tools and some cross-reference resolution support. The specific requirements of the GF language, particularly in the way of its special module hierarchy, mean that significant customisations to this generated base plugin are needed.</p>++<p>The GFEP is being developed by as part of Work Package 2 of the <a href="http://www.molto-project.eu/">MOLTO Project</a>.</p>++<h3>Links</h3>++<ul>+<li>This document shall contain the most up-to-date information about the plugin. The most up-to-date version of this file can always be found in the source-code repository at <a href="https://github.com/GrammaticalFramework/gf-eclipse-plugin/blob/master/README.markdown">https://github.com/GrammaticalFramework/gf-eclipse-plugin/blob/master/README.markdown</a></li>+<li>Source code repository is at <a href="https://github.com/GrammaticalFramework/gf-eclipse-plugin">https://github.com/GrammaticalFramework/gf-eclipse-plugin</a> (do not try to run the plugin from source; please only use the packaged releases).</li>+<li>For reporting bugs and requesting features, please use the <a href="https://github.com/GrammaticalFramework/gf-eclipse-plugin/issues">GitHub Issue Tracker</a></li>+<li>Here are some <a href="http://www.grammaticalframework.org/eclipse/examples/">example GF projects</a> for testing out the plugin features.</li>+<li>Software update site URL for installing through Eclipse: <a href="http://www.grammaticalframework.org/eclipse/release/">http://www.grammaticalframework.org/eclipse/release/</a></li>+</ul>++<hr />++<h2>Features</h2>++<h3>Implemented</h3>++<ul>+<li>Syntax highlighting and error detection</li>+<li>Code folding, quick block-commenting, automatic code formatting</li>+<li>Definition outlining, jump to declaration, find usage</li>+<li>Warnings for problems in module dependancy hierarchy</li>+<li>Launch configurations, i.e. compilation directly from IDE</li>+<li>Use GF Shell from within Eclipse</li>+<li>Auto-completion for declared identifiers</li>+<li>Background compilation (shallow) using project builder</li>+<li>Support for <em>Open Declaration</em> (F3)</li>+<li>Code generation for new languages in application grammars</li>+</ul>++<h3>Near-term</h3>++<ul>+<li>Built-in library browser (in particular for GF resource grammar library)</li>+<li>Inline documentation for function calls, overloads</li>+<li>Quick-fix suggestions for syntax and naming errors</li>+<li>Code generation for concrete/instance modules</li>+<li>Grouping of concrete syntaxes by language, fast switching and linked navigation</li>+</ul>++<h3>Long-term goals</h3>++<ul>+<li>Test-suite functionality</li>+<li>Treebank management and testing</li>+<li>Provide a single platform for developing and using embedded grammars</li>+<li>Integration with ontology engineering tools</li>+</ul>++<hr />++<h2>Major release history</h2>++<dl>+<dt><strong>07/02/12</strong></dt>+<dd>(1.3.0.x) Re-written underlying GF grammar.</dd>++<dt><strong>02/02/12</strong></dt>+<dd>(1.2.5.x) Hugely improved scoping performance. New “Clone to new language” wizard. Improved code formatting. More efficient builder. Removed library path preference. GF runtime is now automatically found.</dd>++<dt><strong>23/01/12</strong></dt>+<dd>(1.2.4.x) Logging is now done to the Eclipse Platform Log (use “Error Log” view). Tested with Eclipse 3.6.2. Bug fixes.</dd>++<dt><strong>11/01/12</strong></dt>+<dd>(1.2.3.x) Updated to use Xtext 2.1.0. Links to external files now moved into new “GF Library View”.</dd>++<dt><strong>24/11/11</strong></dt>+<dd>(1.2.0.x) with support for “Open Declaration” (F3) function, including for external libraries.</dd>++<dt><strong>18/11/11</strong></dt>+<dd>Third BETA (1.1.0.x) released, overhauled to take advantage of new compiler features. Tag-based scoping with caching for better performance. Interactive console (GF Shell) for luanch configs.</dd>++<dt><strong>11/10/11</strong></dt>+<dd>Second BETA (1.0.0.x) released, with improved support for qualified names, local variable bindings, selective inheritance, module outlining, and launch configurations. Also new GF Project type.</dd>++<dt><strong>01/10/11</strong></dt>+<dd>Initial BETA released.</dd>+</dl>++<hr />++<h2>Installation & updating</h2>++<h3>System requirements</h3>++<ol>+<li>The plugin makes use of the newest GF features, and <strong>requires the latest developer version of GF</strong> to be installed on your system (instructions <a href="http://www.grammaticalframework.org/download/index.html">here</a>).+<em>Specifically, you need a version of GF which supports the “—tags” flag, added in November 2011.</em></li>+<li>Paths to GF must be set within the plugin (see below). This means:++<ul>+<li>you don’t necessarily need to have GF in your <code>PATH</code> environment variable</li>+<li>you can use a separate GF installation for GFEP if you wish</li>+</ul></li>+<li>The plugin was developed using Eclipse 3.7. It has been successfully installed on Eclipse as low as 3.6.2.</li>+</ol>++<h3>Installing the plugin for the first time</h3>++<p><strong>Note about Available Software Sites</strong></p>++<p>In order for dependencies to be satisfied, you need to ensure that your Eclipse has the following update site URLs set:</p>++<ul>+<li>Eclipse releases (change version name to match): <a href="http://download.eclipse.org/releases/indigo">http://download.eclipse.org/releases/indigo</a></li>+<li>Xtext: <a href="http://download.eclipse.org/modeling/tmf/xtext/updates/composite/releases/">http://download.eclipse.org/modeling/tmf/xtext/updates/composite/releases/</a></li>+</ul>++<p><strong>Steps for installation</strong></p>++<ol>+<li>Inside Eclipse, go to <strong>Help → Install New Software</strong>.</li>+<li>Add new software site using the URL: <a href="http://www.grammaticalframework.org/eclipse/release/">http://www.grammaticalframework.org/eclipse/release/</a></li>+<li>Select the <strong>GF Eclipse Plugin</strong>, and make sure the <strong>Contact all update sites during install to find required software</strong> option is checked.</li>+<li>Click Next, accept the license agreement and install.</li>+<li>Accept the prompt warning that the software is unsigned.</li>+<li>Restart Eclipse when prompted.</li>+</ol>++<h4>Settings</h4>++<ol>+<li>Add the GF perspective by clicking <strong>Open Perspective → Other</strong> and choosing <strong>GF</strong>.</li>+<li>The plugin will try to determine the path to your GF executable automatically. You can always check/overwrite it by going to <strong>Window → Preferences → Grammatical Framework</strong>. </li>+<li>You can also adjust the verbosity level of the GFEP console log in the preferences window.</li>+</ol>++<h3>Updating the plugin</h3>++<ol>+<li>In Eclipse, go to <strong>Help → Check for updates</strong>.</li>+<li>Any available updates will appear in the dialog. Select them and follow the usual steps.</li>+</ol>++<h4>Deprecated stuff</h4>++<ul>+<li>If your project has a folder named <code>(External)</code> you can safely delete this <strong>via the Eclipse Project Explorer</strong>. It is no longer used in GFEP >= 1.2.3</li>+<li>If your workspace contains a log file <code>gfep.log</code> then you can safely delete it from your system. As of version 1.2.4, GFEP uses Eclipse’s standard log file at <code>.metadata/.log</code></li>+</ul>++<h3>Project settings</h3>++<p>Although the plugin should take care of your project settings for you, in case anything gets messed up you can always correct them manually as follows:</p>++<h4>Project nature</h4>++<p>Your <code>.project</code> file should include the GF Project Nature as follows:</p>++<pre><code><natures>+ <nature>org.grammaticalframework.eclipse.ui.natures.projectNatureID</nature>+</natures>+</code></pre>++<h4>Builder</h4>++<p>Your <code>.project</code> file should include the GF Builder as follows:</p>++<pre><code><buildSpec>+ <buildCommand>+ <name>org.grammaticalframework.eclipse.ui.build.GFBuilderID</name>+ <arguments>+ </arguments>+ </buildCommand>+</buildSpec>+</code></pre>++<hr />++<h2>Getting started</h2>++<p>Some steps you can follow to get a feel of of the plugin’s features.</p>++<ul>+<li>Create a new <strong>GF Project</strong>.</li>+</ul>++<p><img src="http://www.grammaticalframework.org/eclipse/images/eclipse-projectwizard-1.png" alt="New project wizard" />+<img src="http://www.grammaticalframework.org/eclipse/images/eclipse-projectwizard-2.png" alt="New project wizard" /></p>++<ul>+<li>Create some new modules using the <strong>GF Module</strong> wizard from <strong>File → New → Other → GF Module</strong>:</li>+</ul>++<p><img src="http://www.grammaticalframework.org/eclipse/images/eclipse-modulewizard-1.png" alt="New module wizard" /></p>++<p><em>If asked whether you want to add the <strong>Xtext nature</strong> to your project, you can safely say <strong>No</strong> (this prompt has been removed in newer versions).</em></p>++<ul>+<li><p>You can find some small examples at <a href="http://www.grammaticalframework.org/eclipse/examples/">http://www.grammaticalframework.org/eclipse/examples/</a>. Download the +files and manually add them to your Eclipse workspace to experiment with some of the plugin features.</p></li>+<li><p>You can change your syntax colouring styles as you wish from <strong>Window → Preferences → Grammatical Framework → Syntax Coloring</strong></p></li>+</ul>++<p><img src="http://www.grammaticalframework.org/eclipse/images/eclipse-syntaxcoloring.png" alt="Syntax highlighting styles" /></p>++<ul>+<li>Use Eclipes’ own features to drag and drop your editor tabs to suit your needs. Notice the <strong>Outline</strong> view in the bottom-right offers a quite overview of your module structure. Clicking any of the terms will make your cursor jump to that point in the file.</li>+</ul>++<p><img src="http://www.grammaticalframework.org/eclipse/images/eclipse-editor-general.png" alt="The editor and outline view" /></p>++<ul>+<li>Note how changing a <code>cat</code> definition for example will produce warnings and/or errors in other the modules.</li>+</ul>++<p><img src="http://www.grammaticalframework.org/eclipse/images/eclipse-editor-cat.png" alt="Warnings and errors in the editor" /></p>++<ul>+<li>Use the built-in code formatter to tidy your code automatically. Right-click in the editor and choose <strong>Format</strong> or use the keyboard shortcut <strong>Ctrl+Shift+F</strong>.</li>+</ul>++<p><img src="http://www.grammaticalframework.org/eclipse/images/eclipse-before-format.png" alt="Before auto-formatting" /> <img src="http://www.grammaticalframework.org/eclipse/images/eclipse-after-format.png" alt="After auto-formatting" /></p>++<ul>+<li>Set up a launch configuration from <strong>Run → Run Configurations… → Grammatical Framework</strong>. You will see the dialog below with some fields automatically filled in for you. </li>+</ul>++<p><img src="http://www.grammaticalframework.org/eclipse/images/eclipse-launchconfig.png" alt="Launch configuration dialog" /></p>++<ul>+<li>Run the launch config and you will see the output from the GF compiler in the console view within Eclipse.</li>+</ul>++<p><img src="http://www.grammaticalframework.org/eclipse/images/eclipse-compileroutput.png" alt="Output from the GF compiler" /></p>++<h3>Usage hints & issues</h3>++<h4>Consoles</h4>++<p>The plugin provides its own console view named <em>GFEP Log</em>, which shows log messages based on the <strong>Log Level</strong> preference (<strong>Window → Preferences → Grammatical Framework</strong>).</p>++<p>Additionally, everytime a grammar is <strong>Run</strong> a <em>new</em> console is opened to display the output. This console may also serve as the interactive GF Shell, depending on the <strong>Interactive Mode</strong> checkbox in your <strong>Run Configuration</strong>.</p>++<p>Eclipse does not make it obvious when multiple console windows open; click on the <strong>Display Selected Console</strong> button to switch between open consoles:</p>++<p><img src="http://www.grammaticalframework.org/eclipse/images/eclipse-console-icon.png" alt="Display Selected Console icon" /></p>++<p><em>The Eclipse console implementation does not support command history (up arrow) or auto-completion (tab).</em></p>++<h4>Logs</h4>++<p>You can set the log verbosity from <strong>Window → Preferences → Grammatical Framework</strong>.</p>++<h4>Validation</h4>++<p>For validation to work correctly, the project’s <strong>Build Automatically</strong> option should be turned on.</p>++<p>The in-editor validation sometimes needs to be triggered/updated by a keystroke. If you can still see errors which you believe should be correct, try adding a space character to ensure the validation is re-triggered.</p>++<p>Sometimes you may get an entire file marked with errors, even though in fact there is only a single error which is causing the internal builder to fail. In such cases referring to the <strong>Problems</strong> view should help you locate the cause. This issue is particularly relevant when changes made to one module may induce errors in its descendants (e.g. renaming a parameter in a resource module). This behaviour will hopefully be improved in future versions.</p>++<hr />++<h2>Evaluation & feedback</h2>++<p>Please try to use the plugin for developing your own GF projects and report any issues you come up against.</p>++<p>For all bug reports and feature requests please use the GitHub Issue Tracker at <a href="https://github.com/GrammaticalFramework/gf-eclipse-plugin/issues">https://github.com/GrammaticalFramework/gf-eclipse-plugin/issues</a>.</p>++<p>Do not hesitate to let us know how you think the plugin can be improved!</p>++<h3>Criteria</h3>++<p>As part of the evaluation of the GF Eclipse Plugin, feedback (both negative and positive) on the following would be appreciated:</p>++<ol>+<li>Issues encountered with installation</li>+<li>Incorrect support of GF syntactic constructs, module hierarchy system</li>+<li>Performance issues (speed, resources footprint)</li>+<li>General intuitiveness of the UI</li>+<li>Feature wish-list</li>+<li>Compatibilities / conflicts with other Eclipse plugins</li>+</ol>++<h3>Logs</h3>++<p>The GFEP writes to the Eclipse platform log. This can be accessed in two ways:</p>++<ol>+<li>By opening the <strong>Error Log</strong> view in Eclipse</li>+<li>Accessing the file directly at <code>workspace/.metadata/.log</code></li>+</ol>
@@ -0,0 +1,115 @@+module Idents where++import PGF++cidASimul = mkCId "ASimul"+cidAAnter = mkCId "AAnter"+cidPositAdvAdj = mkCId "PositAdvAdj"+cidPositAdVAdj = mkCId "PositAdVAdj"+cidUseCl = mkCId "UseCl"+cidPredVP = mkCId "PredVP"+cidSlashVP = mkCId "SlashVP"+cidComplPredVP = mkCId "ComplPredVP"+cidAdjCN = mkCId "AdjCN"+cidUseN = mkCId "UseN"+cidDetQuant = mkCId "DetQuant"+cidDetQuantOrd = mkCId "DetQuantOrd"+cidNumSg = mkCId "NumSg"+cidNumPl = mkCId "NumPl"+cidDetCN = mkCId "DetCN"+cidIndefArt = mkCId "IndefArt"+cidUsePN = mkCId "UsePN"+cidUseQuantPN = mkCId "UseQuantPN"+cidSymbPN = mkCId "SymbPN"+cidMkSymb = mkCId "MkSymb"+cidUsePron = mkCId "UsePron"+cidConjNP = mkCId "ConjNP"+cidBaseNP = mkCId "BaseNP"+cidConsNP = mkCId "ConsNP"+cidConjCN = mkCId "ConjCN"+cidBaseCN = mkCId "BaseCN"+cidConsCN = mkCId "ConsCN"+cidConjAdv = mkCId "ConjAdv"+cidBaseAdv = mkCId "BaseAdv"+cidConsAdv = mkCId "ConsAdv"+cidBaseS = mkCId "BaseS"+cidConsS = mkCId "ConsS"+cidConjS = mkCId "ConjS"+cidMassNP = mkCId "MassNP"+cidAdvNP = mkCId "AdvNP"+cidTPres = mkCId "TPres"+cidTPast = mkCId "TPast"+cidTFut = mkCId "TFut"+cidTCond = mkCId "TCond"+cidTTAnt = mkCId "TTAnt"+cidPPos = mkCId "PPos"+cidPNeg = mkCId "PNeg"+cidComplSlash = mkCId "ComplSlash"+cidSlashV2a = mkCId "SlashV2a"+cidComplVS = mkCId "ComplVS"+cidComplVV = mkCId "ComplVV"+cidUseV = mkCId "UseV"+cidAdVVP = mkCId "AdVVP"+cidAdvVP = mkCId "AdvVP"+cidAdvVPSlash = mkCId "AdvVPSlash"+cidPrepNP = mkCId "PrepNP"+cidto_Prep = mkCId "to_Prep"+cidsuch_as_Prep= mkCId "such_as_Prep"+cidPastPartAP = mkCId "PastPartAP"+cidPassVPSlash = mkCId "PassVPSlash"+cidAdvS = mkCId "AdvS"+cidPositA = mkCId "PositA"+cidIDig = mkCId "IDig"+cidIIDig = mkCId "IIDig"+cidNumCard = mkCId "NumCard" +cidNumDigits = mkCId "NumDigits"+cidNumNumeral = mkCId "NumNumeral"+cidnum = mkCId "num"+cidpot2as3 = mkCId "pot2as3"+cidpot1as2 = mkCId "pot1as2"+cidpot0as1 = mkCId "pot0as1"+cidpot01 = mkCId "pot01"+cidpot0 = mkCId "pot0"+cidn2 = mkCId "n2"+cidn3 = mkCId "n3"+cidn4 = mkCId "n4"+cidn5 = mkCId "n5"+cidn6 = mkCId "n6"+cidn7 = mkCId "n7"+cidn8 = mkCId "n8"+cidn9 = mkCId "n9"+cidPossPron = mkCId "PossPron"+cidCompAP = mkCId "CompAP"+cidCompNP = mkCId "CompNP"+cidCompAdv = mkCId "CompAdv"+cidCompS = mkCId "CompS"+cidCompVP = mkCId "CompVP"+cidUseComp = mkCId "UseComp"+cidCompoundCN = mkCId "CompoundCN"+cidDashCN = mkCId "DashCN"+cidProgrVP = mkCId "ProgrVP"+cidGerundN = mkCId "GerundN"+cidGerundAP = mkCId "GerundAP"+cidGenNP = mkCId "GenNP"+cidPredetNP = mkCId "PredetNP"+cidDetNP = mkCId "DetNP"+cidAdAP = mkCId "AdAP"+cidAdvAP = mkCId "AdvAP"+cidPositAdAAdj = mkCId "PositAdAAdj"+cideither7or_DConj = mkCId "either7or_DConj"+cidboth7and_DConj = mkCId "both7and_DConj"+cidor_Conj = mkCId "or_Conj"+cidand_Conj = mkCId "and_Conj"+cidamp_Conj = mkCId "amp_Conj"+cidSlashV2V = mkCId "SlashV2V"+cidComplVA = mkCId "ComplVA"+cidAdNum = mkCId "AdNum"+cidi_Pron = mkCId "i_Pron"+cidOrdSuperl = mkCId "OrdSuperl"+cidno_RP = mkCId "no_RP"+cidthat_RP = mkCId "that_RP"+cidUseRCl = mkCId "UseRCl"+cidRelSlash = mkCId "RelSlash"+cidRelNP = mkCId "RelNP"+cidRelVP = mkCId "RelVP"+cidmany_Det = mkCId "many_Det"
@@ -0,0 +1,98 @@+module Monad ( Rule(..), Grammar, grammar+ , P, parse+ , cat, word, lemma, inside, transform+ , many, many1, opt+ ) where++import Data.Tree+import Data.Char+import qualified Data.Map as Map+import Control.Monad+import PGF hiding (Tree,parse)++infix 1 :->+++data Rule t e = t :-> P t e e+type Grammar t e = t -> PGF -> Morpho -> [Tree t] -> e++grammar :: (Ord t,Show t) => ([e] -> e) -> [Rule t e] -> Grammar t e+grammar def rules = gr+ where+ gr = \tag ->+ case Map.lookup tag pmap of+ Just f -> \pgf m ts -> case unP f gr pgf m ts of+ Just (e,[]) -> e+ _ -> case ts of+ [Node w []] -> def []+ ts -> def [gr tag pgf m ts | Node tag ts <- ts]+ Nothing -> \pgf m ts -> case ts of+ [Node w []] -> def []+ ts -> def [gr tag pgf m ts | Node tag ts <- ts]++ pmap = Map.fromListWith mplus (map (\(t :-> r) -> (t,r)) rules)+++newtype P t e a = P {unP :: Grammar t e -> PGF -> Morpho -> [Tree t] -> Maybe (a,[Tree t])}++instance Monad (P t e) where+ return x = P (\gr pgf m ts -> Just (x,ts))+ f >>= g = P (\gr pgf m ts -> case unP f gr pgf m ts of+ Just (x,ts) -> unP (g x) gr pgf m ts+ Nothing -> Nothing)++instance MonadPlus (P t e) where+ mzero = P (\gr pgf m ts -> Nothing)+ mplus f g = P (\gr pgf m ts -> unP f gr pgf m ts `mplus` unP g gr pgf m ts)+++parse :: Grammar t e -> PGF -> Morpho -> Tree t -> e+parse gr pgf morpho (Node tag ts) = gr tag pgf morpho ts++cat :: Eq t => t -> P t e e+cat tag = P (\gr pgf morpho ts -> + case ts of+ (Node tag1 ts1 : ts) | tag == tag1 -> Just (gr tag1 pgf morpho ts1,ts)+ _ -> Nothing)++word :: P t e t+word = P (\gr pgf morpho ts -> + case ts of+ (Node w [] : ts) -> Just (w,ts)+ _ -> Nothing)++inside :: Eq t => t -> P t e a -> P t e a+inside tag f = P (\gr pgf morpho ts ->+ case ts of+ (Node tag1 ts1 : ts) | tag == tag1 -> case unP f gr pgf morpho ts1 of+ Just (x,[]) -> Just (x,ts)+ _ -> Nothing+ _ -> Nothing)++lemma :: String -> String -> P String e CId+lemma cat0 an0 = P (\gr pgf morpho ts -> + case ts of+ (Node w [] : ts) -> case [lemma | (lemma, an1) <- lookupMorpho morpho (map toLower w)+ , let cat1 = maybe "" (showType []) (functionType pgf lemma)+ , cat0 == cat1 && an0 == an1] of+ (id:_) -> Just (id,ts)+ _ -> Nothing+ _ -> Nothing)++transform :: ([Tree t] -> [Tree t]) -> P t e ()+transform f = P (\gr pgf morpho ts -> Just ((),f ts))++many :: P t e a -> P t e [a]+many f = do x <- f+ xs <- many f+ return (x:xs)+ `mplus`+ do return []++many1 :: P t e a -> P t e [a]+many1 f = do x <- f+ xs <- many f+ return (x:xs)++opt :: P t e a -> a -> P t e a+opt f x = mplus f (return x)
@@ -0,0 +1,38 @@+module PennFormat(parseTreebank, showTree) where++import Text.PrettyPrint+import Data.Tree+import Data.Char++parseTreebank :: String -> [Tree String]+parseTreebank [] = []+parseTreebank (c:cs)+ | isSpace c = parseTreebank cs+ | c == '(' = let (ts,cs1) = parseTrees cs+ in ts ++ parseTreebank cs1++parseTrees [] = ([],[])+parseTrees (c:cs)+ | isSpace c = parseTrees cs+ | c == ')' = ([],cs)+ | c == '(' = let (w, cs1) = parseWord cs+ (children,cs2) = parseTrees cs1+ (rest, cs3) = parseTrees cs2+ in (Node (normalize w) children : rest,cs3)+ | otherwise = let (w, cs1) = parseWord (c:cs)+ (rest, cs2) = parseTrees cs1+ in (Node w [] : rest,cs2)++normalize tag =+ let (tag0,mod) = break (=='-') tag+ in if null tag0+ then tag+ else tag0++parseWord = break (\c -> isSpace c || c == '(' || c == ')')++printTree (Node w []) = text w+printTree (Node l children) = parens (text l <+> hsep (map printTree children))++showTree :: Tree String -> String+showTree = render . printTree
@@ -0,0 +1,35 @@+import PGF+import qualified Data.Map as Map+import Data.Maybe+import Data.List++main = do+ pgf <- readPGF "PennTreebank.pgf"+ ls <- fmap lines $ readFile "log.txt"+ let stats = foldl' collectStats Map.empty [e | l <- ls, Just e <- [readExpr (map toQ l)]]+ mapM_ putStrLn [show f ++ "\t" ++ show p | (f,p) <- Map.toList (probs pgf stats), f /= mkCId "Q"]+ where+ toQ '?' = 'Q'+ toQ c = c++collectStats stats e =+ case unApp e of+ Just (f,args) -> let c = fromMaybe 0 (Map.lookup f stats)+ in c `seq` foldl' collectStats (Map.insert f (c+1) stats) args+ Nothing -> stats++probs pgf stats =+ Map.mapWithKey toProb stats + where+ toProb f c + | f == mkCId "Q" = 1.0+ | otherwise = let (_,cat,_) = case functionType pgf f of+ Just ty -> unType ty+ Nothing -> error ("unknown: "++show f)+ cat_mass = fromMaybe 0 (Map.lookup cat mass)+ in (fromIntegral c / fromIntegral cat_mass :: Double)++ mass = Map.fromListWith (+)+ [(cat,c) | f <- functions pgf,+ let Just (_,cat,_) = fmap unType (functionType pgf f),+ let c = fromMaybe 0 (Map.lookup f stats)]
@@ -0,0 +1,809 @@+-- [1416,4467,4623,4871,4561,4303,3763,3137,2501,1857,1353,952,646,483,332,200,116,89,54,41,20,22,7,2,4,5,0,3,2,1,0,0,0,0,0,1]+-- average 5++import Monad+import Idents+import PennFormat++import PGF hiding (Tree,parse)+import Control.Monad+import System.IO+import System.Process+import Data.Maybe+import Data.List+import Data.IORef+import Data.Char+import Data.Tree++test = False++main = do+ pgf <- readPGF "ParseEngAbs.pgf"+ let Just language = readLanguage "ParseEng"+ morpho = buildMorpho pgf language+ s <- readFile "wsj.02-21"+ ref <- newIORef (0,0,0)+ mapM_ (process pgf morpho ref) ((if test then take 40 else id) (parseTreebank s))+ where+ process pgf morpho ref t = do+ (cn,co,l) <- readIORef ref+ let e = (flatten . parse penn pgf morpho . prune) t+ (cn',co') = count (cn,co) e+ l' = l+1+ writeIORef ref (cn',co',l')+ hPutStrLn stdout (showExpr [] e)+ when test $ do+ writeFile ("tmp_tree.dot") (graphvizAbstractTree pgf (True,False) e)+ rawSystem "dot" ["-Tpdf", "tmp_tree.dot", "-otrees/tree"++showAlign l'++".pdf"]+ return ()+ hPutStrLn stderr (show ((fromIntegral cn' / fromIntegral co') * 100))++ count (cn,co) e = cn `seq` co `seq`+ case unApp e of+ Just (f,es) -> if f == meta+ then foldl' count (cn, co+1) es+ else foldl' count (cn+1,co+1) es+ Nothing -> (cn+1,co+1)+++ showAlign n =+ replicate (5 - length s) '0' ++ s+ where+ s = show n++ prune (Node tag ts)+ | tag == "S" + && not (null ts)+ && last ts == Node "." [Node "." []] = Node tag (init ts)+ | otherwise = Node tag ts+ + flatten e =+ case unApp e of+ Just (f,es) | f == meta -> mkApp f (concatMap grab es)+ | otherwise -> mkApp f (map flatten es)+ Nothing -> e++ grab e =+ case unApp e of+ Just (f,es) | f == meta -> concatMap grab es+ | otherwise -> [mkApp f (map flatten es)]+ Nothing -> []+++penn :: Grammar String Expr+penn =+ grammar (mkApp meta) + [ "ADVP":-> do adv <- cat "RB"+ case unApp adv of+ Just (f,[a]) | f == cidPositAdvAdj -> return (mkApp cidPositAdVAdj [a])+ _ -> mzero+ `mplus`+ do adV <- inside "RB" (lemma "AdV" "s")+ return (mkApp adV [])+ , "ADJP":-> do adas <- many pAdA+ v <- inside "JJ" (lemma "V2" "s VPPart")+ pps <- many (cat "PP")+ let adj = mkApp cidPastPartAP [mkApp v []]+ ap0 = foldr (\ada ap -> mkApp cidAdAP [ada,ap]) adj adas+ ap = foldr (\pp ap -> mkApp cidAdvAP [ap,pp]) ap0 pps+ return ap+ `mplus`+ do adas0 <- many pAdA+ adjs <- many1 (cat "JJ")+ let adj = last adjs+ adas = adas0 ++ [mkApp cidPositAdAAdj [adj] | adj <- init adjs]+ ap = foldr (\ada ap -> mkApp cidAdAP [ada,ap]) (mkApp cidPositA [adj]) adas+ return ap+ , "S" :-> do advs <- many $ do pp <- cat "PP"+ inside "," word+ return pp+ `mplus`+ do cat "ADVP" + e0 <- do (tmp,pol,sl,e) <- pClSlash+ guard (not sl)+ return (mkApp cidUseCl [tmp,pol,e])+ `mplus`+ do s <- cat "S"+ inside "," word+ np <- cat "NP"+ inside "VP" $ do+ (t,v) <- pV "VS"+ inside "SBAR" $ do+ cat "-NONE-"+ inside "S" $ do+ cat "-NONE-"+ return (mkApp cidUseCl [mkApp cidTTAnt [ mkApp (fromMaybe meta (isVTense t)) []+ , mkApp cidASimul []+ ]+ ,mkApp cidPPos []+ ,mkApp cidComplPredVP [np,mkApp cidComplVS [mkApp v [],s]]+ ])+ opt (inside "." word) ""+ return (foldr (\ad e -> mkApp cidAdvS [ad, e]) e0 advs)+ `mplus`+ do s1 <- cat "S"+ opt (inside "," word) ""+ cc <- cat "CC"+ s2 <- cat "S"+ return (mkApp cidConjS [cc, mkApp cidBaseS [s1,s2]])+ , "SBAR" :-> do (do cat "-NONE-" -- missing preposition+ return ()+ `mplus`+ do w <- inside "IN" word+ guard (w == "that"))+ cat "S"+ , "NP" :-> do (m_cc,list_np) <- pBaseNPs+ case m_cc of+ Just cc -> return (mkApp cidConjNP [cc, mkListNP list_np])+ Nothing -> if length list_np > 1+ then return (mkApp meta list_np)+ else return (head list_np)+ `mplus`+ do np <- cat "NP"+ rs <- inside "SBAR" $+ do rp <- cat "WHNP"+ inside "S" $+ do (tmp,pol,sl,e) <- pClSlash+ guard sl+ return (mkApp cidUseRCl [tmp,pol,mkApp cidRelSlash [rp,e]])+ `mplus`+ do inside "NP" (cat "-NONE-")+ (tmp,pol,sl,vp) <- inside "VP" pVP+ guard (not sl)+ return (mkApp cidUseRCl [fromMaybe (mkApp meta []) (isVTense tmp)+ ,mkApp pol []+ ,mkApp cidRelVP [rp,vp]])+ return (mkApp cidRelNP [np,rs])+ `mplus`+ do (m_cc,list_np) <- pNPs+ case m_cc of+ Just cc -> return (mkApp cidConjNP [cc, mkListNP list_np])+ Nothing -> if length list_np > 1+ then return (mkApp meta list_np)+ else return (head list_np)+ , "VP" :-> do (_,_,_,e) <- pVP+ return e+ , "PP" :-> do prep <- do cat "IN"+ `mplus`+ do inside "TO" word+ return (mkApp cidto_Prep [])+ `mplus`+ do w1 <- inside "JJ" word+ w2 <- inside "IN" word+ guard (w1 == "such" && w2 == "as")+ return (mkApp cidsuch_as_Prep [])+ np <- cat "NP"+ return (mkApp cidPrepNP [prep,np])+ `mplus`+ do pp1 <- cat "PP"+ inside "," word+ conj <- cat "CC"+ pp2 <- cat "PP"+ opt (inside "," word) ""+ return (mkApp cidConjAdv [conj, mkApp cidBaseAdv [pp1,pp2]])+ , "CC" :-> do cc <- word+ case cc of+ "and" -> return (mkApp cidand_Conj [])+ "&" -> return (mkApp cidamp_Conj [])+ "or" -> return (mkApp cidor_Conj [])+ _ -> mzero+ , "DT" :-> do (dt,b) <- pDT+ return dt+ , "IN" :-> do prep <- lemma "Prep" "s"+ return (mkApp prep [])+ , "NN" :-> do transform (concatMap splitDashN)+ (do n <- lemma "N" "s Sg Nom"+ (do inside "-" word+ n2 <- lemma "N" "s Sg Nom"+ return (mkApp cidDashCN [mkApp n [], mkApp n2 []])+ `mplus`+ do return (mkApp n [])))+ `mplus`+ do v <- lemma "V" "s VPresPart"+ return (mkApp cidGerundN [mkApp v []])+ , "NNS" :-> do transform (concatMap splitDashN)+ (do n <- lemma "N" "s Pl Nom"+ return (mkApp n [])+ `mplus`+ do n1 <- lemma "N" "s Sg Nom"+ inside "-" word+ n2 <- lemma "N" "s Pl Nom"+ return (mkApp cidDashCN [mkApp n1 [], mkApp n2 []]))+ , "PRP" :-> do p <- (lemma "Pron" "s (NCase Nom)"+ `mplus`+ lemma "Pron" "s NPAcc"+ `mplus`+ (do w <- word+ guard (w == "I") -- upper case word+ return cidi_Pron))+ return (mkApp p [])+ , "PRP$":-> do p <- lemma "Pron" "s (NCase Gen)"+ return (mkApp cidPossPron [mkApp p []])+ , "RB" :-> do a <- lemma "A" "s AAdv"+ return (mkApp cidPositAdvAdj [mkApp a []])+ `mplus`+ do adv <- lemma "Adv" "s"+ return (mkApp adv [])+ , "QP" :-> do adn <- inside "IN" (lemma "AdN" "s")+ num <- pCD+ return (mkApp cidDetQuant [mkApp cidIndefArt [], mkApp cidNumCard [mkApp cidAdNum [mkApp adn [], num]]])+ , "WHNP":-> cat "WP"+ `mplus`+ cat "WDT"+ `mplus`+ cat "WP$"+ `mplus`+ do cat "-NONE-"+ return (mkApp cidno_RP [])+ `mplus`+ do w <- inside "IN" word+ guard (w == "that")+ return (mkApp cidthat_RP [])+ , "-NONE-"+ :-> return (mkApp meta [])+ , "JJ" :-> do a <- lemma "A" "s (AAdj Posit Nom)"+ return (mkApp a [])+ , "JJR" :-> do a <- lemma "A" "s (AAdj Compar Nom)"+ return (mkApp a [])+ , "JJS" :-> do a <- lemma "A" "s (AAdj Superl Nom)"+ return (mkApp cidOrdSuperl [mkApp a []])+ , "VB" :-> do v <- mplus (lemma "V" "s VInf") (lemma "V2" "s VInf")+ return (mkApp v [])+ , "VBD" :-> do v <- mplus (lemma "V" "s VPast") (lemma "V2" "s VPast")+ return (mkApp v [])+ , "VBG" :-> do v <- mplus (lemma "V" "s VPresPart") (lemma "V2" "s VPresPart")+ return (mkApp v [])+ , "VBN" :-> do v <- mplus (lemma "V" "s VPPart") (lemma "V2" "s VPPart")+ return (mkApp v [])+ , "VBP" :-> do v <- mplus (lemma "V" "s VInf") (lemma "V2" "s VInf")+ return (mkApp v [])+ , "VBZ" :-> do v <- mplus (lemma "V" "s VPres") (lemma "V2" "s VPres")+ return (mkApp v [])+ , "PDT" :-> do pdt <- lemma "Predet" "s"+ return (mkApp pdt [])+ , "WP" :-> do rp <- (lemma "RP" "s (RC Masc (NCase Nom))"+ `mplus`+ lemma "RP" "s (RC Masc NPAcc)")+ return (mkApp rp [])+ , "WDT" :-> do rp <- lemma "RP" "s (RC Neutr (NCase Nom))"+ return (mkApp rp [])+ , "WP$" :-> do rp <- lemma "RP" "s (RC Masc (NCase Gen))"+ return (mkApp rp [])+ ]++data VForm a+ = VInf | VPart | VGerund | VTense a++instance Functor VForm where+ fmap f VInf = VInf+ fmap f VPart = VPart+ fmap f VGerund = VGerund+ fmap f (VTense t) = VTense (f t)++isVInf VInf = True+isVInf _ = False++isVPart VPart = True+isVPart _ = False++isVGerund VGerund = True+isVGerund _ = False++isVTense (VTense t) = Just t+isVTense _ = Nothing+++pVP = do+ (t,a,p,sl,e0) <- do t <- pCopula+ p <- pPol+ inside "VP" $ do+ advs <- many (cat "ADVP")+ (t',p',sl,e0) <- pVP+ guard (isVPart t' && sl && p' == cidPPos)+ let e1 = mkApp cidPassVPSlash [e0]+ e2 = foldr (\pp e -> mkApp cidAdVVP [pp, e]) e1 advs+ return (t,cidASimul,p,False,e2)+ `mplus`+ do t <- pCopula+ p <- pPol+ advs <- many (cat "ADVP")+ e <- do e <- cat "ADJP"+ return (mkApp cidCompAP [e])+ `mplus`+ do e <- cat "NP"+ return (mkApp cidCompNP [e])+ `mplus`+ do e <- cat "NP"+ return (mkApp cidCompNP [e])+ `mplus`+ do e <- cat "PP"+ return (mkApp cidCompAdv [e])+ `mplus`+ do e <- cat "SBAR" + return (mkApp cidCompS [e])+ `mplus`+ do e <- inside "S" $ do+ inside "NP" (cat "-NONE-")+ (tmp,pol,sl,e) <- inside "VP" pVP+ guard (isVInf tmp && not sl && pol == cidPPos)+ return e+ return (mkApp cidCompVP [e])+ let e1 = foldr (\pp e -> mkApp cidAdVVP [pp, e]) (mkApp cidUseComp [e]) advs+ return (t,cidASimul,p,False,e1)+ `mplus`+ do t <- pCopula+ p <- pPol+ advs <- many (cat "ADVP")+ (tmp,pol,sl,e) <- inside "VP" pVP+ guard (isVGerund tmp && not sl && pol == cidPPos)+ let e1 = foldr (\pp e -> mkApp cidAdVVP [pp, e]) e advs+ return (t,cidASimul,p,False,mkApp cidProgrVP [e1])+ `mplus`+ do t <- pCopula+ p <- pPol+ adv <- cat "ADVP"+ return (t,cidASimul,p,False,mkApp cidUseComp [mkApp cidCompAdv [adv]])+ `mplus`+ do w <- inside "MD" word+ t <- case w of+ "will" -> return cidTFut+ "would" -> return cidTCond+ _ -> mzero+ p <- pPol+ advs <- many (cat "ADVP")+ (tmp,pol,sl,e0) <- inside "VP" pVP+ guard (isVInf tmp && pol == cidPPos)+ let e1 = foldr (\pp e -> mkApp cidAdVVP [pp, e]) e0 advs+ return (VTense t,cidASimul,p,sl,e1)+ `mplus`+ do t <- pHave+ p <- pPol+ advs <- many (cat "ADVP")+ (tmp,pol,sl,e0) <- inside "VP" pVP+ guard (isVPart tmp && pol == cidPPos)+ let e1 = foldr (\pp e -> mkApp cidAdVVP [pp, e]) e0 advs+ return (t,cidAAnter,p,sl,e1)+ `mplus`+ do t <- pDo+ p <- pPol+ advs <- many (cat "ADVP")+ (tmp,p',sl,e0) <- inside "VP" $ pVP+ guard (p' == cidPPos)+ let e1 = foldr (\pp e -> mkApp cidAdVVP [pp, e]) e0 advs+ return (t,cidASimul,p,sl,e1)+ `mplus`+ do advs <- many (cat "ADVP")+ inside "TO" word -- infinitives+ e0 <- cat "VP"+ let e1 = foldr (\pp e -> mkApp cidAdVVP [pp, e]) e0 advs+ return (VInf,cidASimul,cidPPos,False,e1)+ `mplus`+ do advs1 <- many (cat "ADVP")+ (t,v) <- pV "V2"+ pps <- many (cat "PP")+ let e0 = mkApp cidSlashV2a [mkApp v []]+ e1 = foldl (\e pp -> mkApp cidAdvVPSlash [e, pp]) e0 pps+ (sl,e2) <- (do (inside "NP" (cat "-NONE-")+ `mplus`+ inside "SBAR" (cat "-NONE-"))+ return (True,e1)+ `mplus`+ do np <- cat "NP"+ return (False,mkApp cidComplSlash [e1, np]))+ let e3 = foldr (\pp e -> mkApp cidAdVVP [pp, e]) e2 advs1+ return (t,cidASimul,cidPPos,sl,e3)+ `mplus`+ do (t,v) <- inside "MD" $+ (do v <- lemma "VV" "s (VVF VPres)"+ return (cidTPres,v)+ `mplus`+ do v <- lemma "VV" "s (VVF VPast)"+ return (cidTPast,v))+ p <- pPol+ advs <- many (cat "ADVP")+ vp <- cat "VP"+ let e0 = mkApp cidComplVV [mkApp v [], vp]+ e1 = foldr (\pp e -> mkApp cidAdVVP [pp, e]) e0 advs+ return (VTense t,cidASimul,p,False,e1)+ `mplus`+ do advs <- many (cat "ADVP")+ (t,v) <- pVV+ vp <- inside "S" $ do+ inside "NP" (cat "-NONE-")+ (tmp,pol,sl,e) <- inside "VP" pVP+ guard ((isVInf tmp || isVGerund tmp) && not sl && pol == cidPPos)+ return e+ let e0 = mkApp cidComplVV [mkApp v [], vp] + e1 = foldr (\pp e -> mkApp cidAdVVP [pp, e]) e0 advs+ return (t,cidASimul,cidPPos,False,e1)+ `mplus`+ do advs <- many (cat "ADVP")+ (t,v) <- pV "V2V"+ inside "S" $ + (do inside "NP" (cat "-NONE-")+ (tmp,pol,sl,vp) <- inside "VP" pVP+ guard (isVInf tmp && not sl)+ let e0 = mkApp cidSlashV2V [mkApp v [], mkApp pol [], vp]+ e1 = foldr (\pp e -> mkApp cidAdVVP [pp, e]) e0 advs+ return (t,cidASimul,cidPPos,True,e1)+ `mplus`+ do np <- cat "NP"+ (tmp,pol,sl,vp) <- inside "VP" pVP+ guard (isVInf tmp && not sl)+ let e0 = mkApp cidComplSlash [mkApp cidSlashV2V [mkApp v [], mkApp pol [], vp], np]+ e1 = foldr (\pp e -> mkApp cidAdVVP [pp, e]) e0 advs+ return (t,cidASimul,cidPPos,False,e1))+ `mplus`+ do advs <- many (cat "ADVP")+ (t,v) <- pV "VA"+ adjp <- cat "ADJP"+ let e0 = mkApp cidComplVA [mkApp v [], adjp]+ e1 = foldr (\pp e -> mkApp cidAdVVP [pp, e]) e0 advs+ return (t,cidASimul,cidPPos,False,e1)+ `mplus`+ do advs <- many (cat "ADVP")+ (t,v) <- pV "VS"+ s <- cat "S" `mplus` cat "SBAR"+ let e0 = mkApp cidComplVS [mkApp v [], s]+ e1 = foldr (\pp e -> mkApp cidAdVVP [pp, e]) e0 advs+ return (t,cidASimul,cidPPos,False,e1)+ `mplus`+ do advs <- many (cat "ADVP")+ (t,v) <- pV "V"+ let e0 = mkApp cidUseV [mkApp v []]+ e1 = foldr (\pp e -> mkApp cidAdVVP [pp, e]) e0 advs+ return (t,cidASimul,cidPPos,False,e1)+ pps <- many (cat "PP"+ `mplus`+ inside "ADVP" (cat "RB"))+ let tmp = fmap (\t -> mkApp cidTTAnt [mkApp t [],mkApp a []]) t+ e1 = foldl (\e pp -> mkApp (if sl then cidAdvVPSlash else cidAdvVP) [e, pp]) e0 pps+ return (tmp, p, sl, e1)++pClSlash = do np <- cat "NP"+ advs <- many (cat "ADVP")+ (tmp,pol,sl,vp) <- do (tmp,pol,sl,vp) <- inside "VP" pVP+ return (isVTense tmp,pol,sl,vp)+ `mplus`+ do vp <- cat "VP"+ return (Nothing,meta,False,vp)+ let vp1 = foldr (\pp e -> mkApp cidAdVVP [pp, e]) vp advs+ return (fromMaybe (mkApp meta []) tmp+ ,mkApp pol []+ ,sl+ ,mkApp (if sl then cidSlashVP else cidPredVP) [np,vp1]+ )++pV cat =+ do v <- lookup "VB" "s VInf"+ return (VInf,v)+ `mplus`+ do v <- lookup "VBP" "s VInf"+ return (VTense cidTPres,v)+ `mplus`+ do v <- lookup "VBZ" "s VPres"+ return (VTense cidTPres,v)+ `mplus`+ do v <- lookup "VBD" "s VPast"+ return (VTense cidTPast,v)+ `mplus`+ do v <- lookup "VBN" "s VPPart"+ return (VPart,v)+ `mplus`+ do v <- lookup "VBG" "s VPresPart"+ return (VGerund,v)+ where+ lookup pos fld = + inside pos $+ (do lemma cat fld+ `mplus`+ do w <- word+ return (mkCId ("["++w++"_"++cat++"]")))++pVV =+ do v <- lookup "VB" "s (VVF VInf)"+ return (VInf,v)+ `mplus`+ do v <- lookup "VBP" "s (VVF VInf)"+ return (VTense cidTPres,v)+ `mplus`+ do v <- lookup "VBZ" "s (VVF VPres)"+ return (VTense cidTPres,v)+ `mplus`+ do v <- lookup "VBD" "s (VVF VPast)"+ return (VTense cidTPast,v)+ `mplus`+ do v <- lookup "VBN" "s (VVF VPPart)"+ return (VPart,v)+ `mplus`+ do v <- lookup "VBG" "s (VVF VPresPart)"+ return (VGerund,v)+ where+ lookup pos fld = + inside pos $+ (do lemma "VV" fld+ `mplus`+ do w <- word+ return (mkCId ("["++w++"_VV]")))++pCopula =+ do s <- inside "VB" word+ guard (s == "be")+ return VInf+ `mplus`+ do s <- inside "VBP" word+ guard (s == "am" || s == "'m" || s == "are" || s == "'re")+ return (VTense cidTPres)+ `mplus`+ do s <- inside "VBZ" word+ guard (s == "is" || s == "'s")+ return (VTense cidTPres)+ `mplus`+ do s <- inside "VBD" word+ guard (s == "were" || s == "was")+ return (VTense cidTPast)+ `mplus`+ do s <- inside "VBN" word+ guard (s == "been")+ return VPart+ `mplus`+ do s <- inside "VBG" word+ guard (s == "being")+ return VGerund++pDo =+ do s <- inside "VB" word+ guard (s == "do")+ return VInf+ `mplus`+ do s <- inside "VBP" word+ guard (s == "do")+ return (VTense cidTPres)+ `mplus`+ do s <- inside "VBZ" word+ guard (s == "does")+ return (VTense cidTPres)+ `mplus`+ do s <- inside "VBD" word+ guard (s == "did")+ return (VTense cidTPast)++pHave =+ do s <- inside "VB" word+ guard (s == "have")+ return VInf+ `mplus`+ do s <- inside "VBP" word+ guard (s == "have")+ return (VTense cidTPres)+ `mplus`+ do s <- inside "VBZ" word+ guard (s == "has")+ return (VTense cidTPres)+ `mplus`+ do s <- inside "VBD" word+ guard (s == "had")+ return (VTense cidTPast)+ `mplus`+ do s <- inside "VBN" word+ guard (s == "had")+ return VPart++pPol =+ do w <- inside "RB" word+ guard (w == "n't" || w == "not")+ return cidPNeg+ `mplus`+ do return cidPPos++pBaseNP = + do np <- inside "NN" (lemma "NP" "s (NCase Nom)")+ return (mkApp np [])+ `mplus`+ do m_pdt <- opt (liftM Just (cat "PDT")) Nothing+ m_q <- opt (liftM Just pQuant) Nothing+ m_num <- opt (liftM Just pCD ) Nothing+ m_ord <- opt (liftM Just (cat "JJS")) Nothing+ adjs <- many pModCN+ ns <- many1 (mplus (cat "NN" >>= \n -> return (n,cidNumSg)) + (cat "NNS" >>= \n -> return (n,cidNumPl)))+ let (n,s) = last ns+ cn0 = foldr (\(n,s) e -> mkApp cidCompoundCN [mkApp s [], n, e])+ (mkApp cidUseN [n])+ (init ns)+ cn = foldr (\adj e -> mkApp cidAdjCN [adj, e]) + cn0+ adjs+ num = maybe (mkApp s []) (\n -> mkApp cidNumCard [n]) m_num+ + mkDetQuant q num =+ case m_ord of+ Just ord -> mkApp cidDetQuantOrd [q,num,ord]+ Nothing -> mkApp cidDetQuant [q,num]++ e0 <- if s == cidNumSg+ then case m_q of+ Just (q,True) -> return (mkApp cidDetCN [mkDetQuant q num,cn])+ Just (q,False) -> return (mkApp cidDetCN [q,cn])+ Nothing -> do guard (isNothing m_num)+ return (mkApp cidMassNP [cn])+ else case m_q of+ Just (q,True) -> return (mkApp cidDetCN [mkDetQuant q num,cn])+ Just (q,False) -> return (mkApp cidDetCN [q,cn])+ Nothing -> return (mkApp cidDetCN [mkDetQuant (mkApp cidIndefArt []) num,cn])+ let e1 = case m_pdt of+ Just pdt -> mkApp cidPredetNP [pdt,e0]+ Nothing -> e0+ return e1+ `mplus`+ do dt <- cat "QP"+ n <- mplus (cat "NN") (cat "NNS")+ return (mkApp cidDetCN [dt,mkApp cidUseN [n]])+ `mplus`+ do m_q <- opt (liftM Just pQuant) Nothing+ ws2 <- many1 (inside "NNP" word `mplus` inside "NNPS" word)+ let e0 = mkApp cidSymbPN+ [mkApp cidMkSymb + [mkStr (unwords ws2)]]+ case m_q of+ Just (q,b) -> do guard b+ return (mkApp cidUseQuantPN [q,e0])+ Nothing -> return (mkApp cidUsePN [e0])+ `mplus`+ do p <- inside "PRP" (lemma "NP" "s (NCase Nom)")+ return (mkApp p [])+ `mplus`+ do p <- cat "PRP"+ return (mkApp cidUsePron [p])+ `mplus`+ do np <- cat "NP"+ pps <- many1 (cat "PP")+ prns <- many (cat "PRN")+ let e0 = foldl (\e pp -> mkApp cidAdvNP [e, pp]) np pps+ e1 = foldl (\e pn -> mkApp meta [e, pn]) e0 prns+ return e1+ `mplus`+ do np <- cat "NP"+ inside "," word+ (t',p',sl,vp) <- inside "VP" pVP+ guard (isVPart t' && sl && p' == cidPPos)+ inside "," word+ return (mkApp meta [np, vp])+ `mplus`+ do (q,b) <- pQuant+ return (mkApp cidDetNP [if b+ then mkApp cidDetQuant [mkApp cidIndefArt [],mkApp cidNumSg []]+ else q])+ `mplus`+ do n <- pCD+ return (mkApp cidDetNP [mkApp cidDetQuant [mkApp cidIndefArt [],mkApp cidNumCard [n]]])++pBaseNPs = do+ np <- pBaseNP+ (do inside "," word+ (m_cc,nps) <- pBaseNPs+ return (m_cc ,np:nps)+ `mplus`+ do cc <- cat "CC"+ np2 <- pBaseNP+ return (Just cc,[np,np2])+ `mplus`+ do return (Nothing,[np]))++pNPs = do+ (t1,t2) <- do w <- inside "DT" word+ case map toLower w of+ "both" -> return (mkApp cidand_Conj [],mkApp cidboth7and_DConj [])+ "either" -> return (mkApp cidor_Conj [],mkApp cideither7or_DConj [])+ _ -> mzero+ `mplus`+ do return (mkApp meta [],mkApp meta [])+ (m_cc,nps) <- pList+ return (fmap (toDConj t1 t2) m_cc,nps)+ where+ toDConj t1 t2 cc+ | cc == t1 = t2+ | otherwise = cc++ pList = do+ np <- cat "NP"+ (do inside "," word+ (m_cc,nps) <- pList+ return (m_cc ,np:nps)+ `mplus`+ do cc <- cat "CC"+ np2 <- cat "NP"+ return (Just cc,[np,np2])+ `mplus`+ do return (Nothing,[np]))++mkListNP nps0 =+ foldr (\np1 np2 -> mkApp cidConsNP [np1,np2]) (mkApp cidBaseNP nps2) nps1+ where+ (nps1,nps2) = splitAt (length nps0-2) nps0++pModCN =+ do v <- inside "VBN" (lemma "V2" "s VPPart")+ return (mkApp cidPastPartAP [mkApp v []])+ `mplus`+ do v <- inside "JJ" (lemma "V2" "s VPPart")+ return (mkApp cidPastPartAP [mkApp v []])+ `mplus`+ do v <- inside "JJ" (lemma "V" "s VPresPart")+ return (mkApp cidGerundAP [mkApp v []])+ `mplus`+ do a <- cat "JJ"+ return (mkApp cidPositA [a])+ `mplus`+ do a <- cat "ADJP"+ return a++pCD = + do w0 <- inside "CD" word+ let w = filter (/=',') w0+ guard (not (null w) && all isDigit w)+ let es = [mkApp (mkCId ("D_"++[d])) [] | d <- w]+ e0 = foldr (\e1 e2 -> mkApp cidIIDig [e1,e2]) (mkApp cidIDig [last es]) (init es)+ e1 = mkApp cidNumDigits [e0]+ return e1+ `mplus`+ do w <- inside "CD" word+ e <- case map toLower w of+ "one" -> return (mkApp cidnum [mkApp cidpot2as3 [mkApp cidpot1as2 [mkApp cidpot0as1 [mkApp cidpot01 []]]]])+ "two" -> return (mkApp cidnum [mkApp cidpot2as3 [mkApp cidpot1as2 [mkApp cidpot0as1 [mkApp cidpot0 [mkApp cidn2 []]]]]])+ "three" -> return (mkApp cidnum [mkApp cidpot2as3 [mkApp cidpot1as2 [mkApp cidpot0as1 [mkApp cidpot0 [mkApp cidn3 []]]]]])+ "four" -> return (mkApp cidnum [mkApp cidpot2as3 [mkApp cidpot1as2 [mkApp cidpot0as1 [mkApp cidpot0 [mkApp cidn4 []]]]]])+ "five" -> return (mkApp cidnum [mkApp cidpot2as3 [mkApp cidpot1as2 [mkApp cidpot0as1 [mkApp cidpot0 [mkApp cidn5 []]]]]])+ "six" -> return (mkApp cidnum [mkApp cidpot2as3 [mkApp cidpot1as2 [mkApp cidpot0as1 [mkApp cidpot0 [mkApp cidn6 []]]]]])+ "seven" -> return (mkApp cidnum [mkApp cidpot2as3 [mkApp cidpot1as2 [mkApp cidpot0as1 [mkApp cidpot0 [mkApp cidn7 []]]]]])+ "eight" -> return (mkApp cidnum [mkApp cidpot2as3 [mkApp cidpot1as2 [mkApp cidpot0as1 [mkApp cidpot0 [mkApp cidn8 []]]]]])+ "nine" -> return (mkApp cidnum [mkApp cidpot2as3 [mkApp cidpot1as2 [mkApp cidpot0as1 [mkApp cidpot0 [mkApp cidn9 []]]]]])+ _ -> mzero+ return (mkApp cidNumNumeral [e])+ `mplus`+ do cat "CD"++pQuant =+ inside "DT" pDT+ `mplus`+ do dt <- cat "PRP$"+ return (dt,True)+ `mplus`+ do np <- inside "NP" $ do+ np <- pBaseNP+ inside "POS" word+ return np+ return (mkApp cidGenNP [np],True)+ `mplus`+ do dt <- pMany+ return (dt,False)++pDT =+ do dt <- mplus (lemma "Quant" "s False Sg")+ (lemma "Quant" "s False Pl")+ return (mkApp dt [],True)+ `mplus`+ do dt <- lemma "Det" "s"+ return (mkApp dt [],False)++pMany =+ do w <- inside "JJ" word+ guard (map toLower w == "many")+ return (mkApp cidmany_Det [])++pAdA = do adv <- cat "RB"+ case unApp adv of+ Just (f,[a]) | f == cidPositAdvAdj + -> return (mkApp cidPositAdAAdj [a])+ _ -> mzero+ `mplus`+ do ada <- inside "RB" (lemma "AdA" "s")+ return (mkApp ada [])++splitDashN (Node w []) =+ case break (=='-') w of+ (w1,'-':w2) -> Node w1 [] : Node "-" [Node "-" []] : splitDashN (Node w2 [])+ _ -> [Node w []]+splitDashN t = [t]++meta = mkCId "?"
@@ -0,0 +1,674 @@+ GNU GENERAL PUBLIC LICENSE+ Version 3, 29 June 2007++ Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>+ Everyone is permitted to copy and distribute verbatim copies+ of this license document, but changing it is not allowed.++ Preamble++ The GNU General Public License is a free, copyleft license for+software and other kinds of works.++ The licenses for most software and other practical works are designed+to take away your freedom to share and change the works. By contrast,+the GNU General Public License is intended to guarantee your freedom to+share and change all versions of a program--to make sure it remains free+software for all its users. We, the Free Software Foundation, use the+GNU General Public License for most of our software; it applies also to+any other work released this way by its authors. You can apply it to+your programs, too.++ When we speak of free software, we are referring to freedom, not+price. Our General Public Licenses are designed to make sure that you+have the freedom to distribute copies of free software (and charge for+them if you wish), that you receive source code or can get it if you+want it, that you can change the software or use pieces of it in new+free programs, and that you know you can do these things.++ To protect your rights, we need to prevent others from denying you+these rights or asking you to surrender the rights. Therefore, you have+certain responsibilities if you distribute copies of the software, or if+you modify it: responsibilities to respect the freedom of others.++ For example, if you distribute copies of such a program, whether+gratis or for a fee, you must pass on to the recipients the same+freedoms that you received. You must make sure that they, too, receive+or can get the source code. And you must show them these terms so they+know their rights.++ Developers that use the GNU GPL protect your rights with two steps:+(1) assert copyright on the software, and (2) offer you this License+giving you legal permission to copy, distribute and/or modify it.++ For the developers' and authors' protection, the GPL clearly explains+that there is no warranty for this free software. For both users' and+authors' sake, the GPL requires that modified versions be marked as+changed, so that their problems will not be attributed erroneously to+authors of previous versions.++ Some devices are designed to deny users access to install or run+modified versions of the software inside them, although the manufacturer+can do so. This is fundamentally incompatible with the aim of+protecting users' freedom to change the software. The systematic+pattern of such abuse occurs in the area of products for individuals to+use, which is precisely where it is most unacceptable. Therefore, we+have designed this version of the GPL to prohibit the practice for those+products. If such problems arise substantially in other domains, we+stand ready to extend this provision to those domains in future versions+of the GPL, as needed to protect the freedom of users.++ Finally, every program is threatened constantly by software patents.+States should not allow patents to restrict development and use of+software on general-purpose computers, but in those that do, we wish to+avoid the special danger that patents applied to a free program could+make it effectively proprietary. To prevent this, the GPL assures that+patents cannot be used to render the program non-free.++ The precise terms and conditions for copying, distribution and+modification follow.++ TERMS AND CONDITIONS++ 0. Definitions.++ "This License" refers to version 3 of the GNU General Public License.++ "Copyright" also means copyright-like laws that apply to other kinds of+works, such as semiconductor masks.++ "The Program" refers to any copyrightable work licensed under this+License. Each licensee is addressed as "you". "Licensees" and+"recipients" may be individuals or organizations.++ To "modify" a work means to copy from or adapt all or part of the work+in a fashion requiring copyright permission, other than the making of an+exact copy. The resulting work is called a "modified version" of the+earlier work or a work "based on" the earlier work.++ A "covered work" means either the unmodified Program or a work based+on the Program.++ To "propagate" a work means to do anything with it that, without+permission, would make you directly or secondarily liable for+infringement under applicable copyright law, except executing it on a+computer or modifying a private copy. Propagation includes copying,+distribution (with or without modification), making available to the+public, and in some countries other activities as well.++ To "convey" a work means any kind of propagation that enables other+parties to make or receive copies. Mere interaction with a user through+a computer network, with no transfer of a copy, is not conveying.++ An interactive user interface displays "Appropriate Legal Notices"+to the extent that it includes a convenient and prominently visible+feature that (1) displays an appropriate copyright notice, and (2)+tells the user that there is no warranty for the work (except to the+extent that warranties are provided), that licensees may convey the+work under this License, and how to view a copy of this License. If+the interface presents a list of user commands or options, such as a+menu, a prominent item in the list meets this criterion.++ 1. Source Code.++ The "source code" for a work means the preferred form of the work+for making modifications to it. "Object code" means any non-source+form of a work.++ A "Standard Interface" means an interface that either is an official+standard defined by a recognized standards body, or, in the case of+interfaces specified for a particular programming language, one that+is widely used among developers working in that language.++ The "System Libraries" of an executable work include anything, other+than the work as a whole, that (a) is included in the normal form of+packaging a Major Component, but which is not part of that Major+Component, and (b) serves only to enable use of the work with that+Major Component, or to implement a Standard Interface for which an+implementation is available to the public in source code form. A+"Major Component", in this context, means a major essential component+(kernel, window system, and so on) of the specific operating system+(if any) on which the executable work runs, or a compiler used to+produce the work, or an object code interpreter used to run it.++ The "Corresponding Source" for a work in object code form means all+the source code needed to generate, install, and (for an executable+work) run the object code and to modify the work, including scripts to+control those activities. However, it does not include the work's+System Libraries, or general-purpose tools or generally available free+programs which are used unmodified in performing those activities but+which are not part of the work. For example, Corresponding Source+includes interface definition files associated with source files for+the work, and the source code for shared libraries and dynamically+linked subprograms that the work is specifically designed to require,+such as by intimate data communication or control flow between those+subprograms and other parts of the work.++ The Corresponding Source need not include anything that users+can regenerate automatically from other parts of the Corresponding+Source.++ The Corresponding Source for a work in source code form is that+same work.++ 2. Basic Permissions.++ All rights granted under this License are granted for the term of+copyright on the Program, and are irrevocable provided the stated+conditions are met. This License explicitly affirms your unlimited+permission to run the unmodified Program. The output from running a+covered work is covered by this License only if the output, given its+content, constitutes a covered work. This License acknowledges your+rights of fair use or other equivalent, as provided by copyright law.++ You may make, run and propagate covered works that you do not+convey, without conditions so long as your license otherwise remains+in force. You may convey covered works to others for the sole purpose+of having them make modifications exclusively for you, or provide you+with facilities for running those works, provided that you comply with+the terms of this License in conveying all material for which you do+not control copyright. Those thus making or running the covered works+for you must do so exclusively on your behalf, under your direction+and control, on terms that prohibit them from making any copies of+your copyrighted material outside their relationship with you.++ Conveying under any other circumstances is permitted solely under+the conditions stated below. Sublicensing is not allowed; section 10+makes it unnecessary.++ 3. Protecting Users' Legal Rights From Anti-Circumvention Law.++ No covered work shall be deemed part of an effective technological+measure under any applicable law fulfilling obligations under article+11 of the WIPO copyright treaty adopted on 20 December 1996, or+similar laws prohibiting or restricting circumvention of such+measures.++ When you convey a covered work, you waive any legal power to forbid+circumvention of technological measures to the extent such circumvention+is effected by exercising rights under this License with respect to+the covered work, and you disclaim any intention to limit operation or+modification of the work as a means of enforcing, against the work's+users, your or third parties' legal rights to forbid circumvention of+technological measures.++ 4. Conveying Verbatim Copies.++ You may convey verbatim copies of the Program's source code as you+receive it, in any medium, provided that you conspicuously and+appropriately publish on each copy an appropriate copyright notice;+keep intact all notices stating that this License and any+non-permissive terms added in accord with section 7 apply to the code;+keep intact all notices of the absence of any warranty; and give all+recipients a copy of this License along with the Program.++ You may charge any price or no price for each copy that you convey,+and you may offer support or warranty protection for a fee.++ 5. Conveying Modified Source Versions.++ You may convey a work based on the Program, or the modifications to+produce it from the Program, in the form of source code under the+terms of section 4, provided that you also meet all of these conditions:++ a) The work must carry prominent notices stating that you modified+ it, and giving a relevant date.++ b) The work must carry prominent notices stating that it is+ released under this License and any conditions added under section+ 7. This requirement modifies the requirement in section 4 to+ "keep intact all notices".++ c) You must license the entire work, as a whole, under this+ License to anyone who comes into possession of a copy. This+ License will therefore apply, along with any applicable section 7+ additional terms, to the whole of the work, and all its parts,+ regardless of how they are packaged. This License gives no+ permission to license the work in any other way, but it does not+ invalidate such permission if you have separately received it.++ d) If the work has interactive user interfaces, each must display+ Appropriate Legal Notices; however, if the Program has interactive+ interfaces that do not display Appropriate Legal Notices, your+ work need not make them do so.++ A compilation of a covered work with other separate and independent+works, which are not by their nature extensions of the covered work,+and which are not combined with it such as to form a larger program,+in or on a volume of a storage or distribution medium, is called an+"aggregate" if the compilation and its resulting copyright are not+used to limit the access or legal rights of the compilation's users+beyond what the individual works permit. Inclusion of a covered work+in an aggregate does not cause this License to apply to the other+parts of the aggregate.++ 6. Conveying Non-Source Forms.++ You may convey a covered work in object code form under the terms+of sections 4 and 5, provided that you also convey the+machine-readable Corresponding Source under the terms of this License,+in one of these ways:++ a) Convey the object code in, or embodied in, a physical product+ (including a physical distribution medium), accompanied by the+ Corresponding Source fixed on a durable physical medium+ customarily used for software interchange.++ b) Convey the object code in, or embodied in, a physical product+ (including a physical distribution medium), accompanied by a+ written offer, valid for at least three years and valid for as+ long as you offer spare parts or customer support for that product+ model, to give anyone who possesses the object code either (1) a+ copy of the Corresponding Source for all the software in the+ product that is covered by this License, on a durable physical+ medium customarily used for software interchange, for a price no+ more than your reasonable cost of physically performing this+ conveying of source, or (2) access to copy the+ Corresponding Source from a network server at no charge.++ c) Convey individual copies of the object code with a copy of the+ written offer to provide the Corresponding Source. This+ alternative is allowed only occasionally and noncommercially, and+ only if you received the object code with such an offer, in accord+ with subsection 6b.++ d) Convey the object code by offering access from a designated+ place (gratis or for a charge), and offer equivalent access to the+ Corresponding Source in the same way through the same place at no+ further charge. You need not require recipients to copy the+ Corresponding Source along with the object code. If the place to+ copy the object code is a network server, the Corresponding Source+ may be on a different server (operated by you or a third party)+ that supports equivalent copying facilities, provided you maintain+ clear directions next to the object code saying where to find the+ Corresponding Source. Regardless of what server hosts the+ Corresponding Source, you remain obligated to ensure that it is+ available for as long as needed to satisfy these requirements.++ e) Convey the object code using peer-to-peer transmission, provided+ you inform other peers where the object code and Corresponding+ Source of the work are being offered to the general public at no+ charge under subsection 6d.++ A separable portion of the object code, whose source code is excluded+from the Corresponding Source as a System Library, need not be+included in conveying the object code work.++ A "User Product" is either (1) a "consumer product", which means any+tangible personal property which is normally used for personal, family,+or household purposes, or (2) anything designed or sold for incorporation+into a dwelling. In determining whether a product is a consumer product,+doubtful cases shall be resolved in favor of coverage. For a particular+product received by a particular user, "normally used" refers to a+typical or common use of that class of product, regardless of the status+of the particular user or of the way in which the particular user+actually uses, or expects or is expected to use, the product. A product+is a consumer product regardless of whether the product has substantial+commercial, industrial or non-consumer uses, unless such uses represent+the only significant mode of use of the product.++ "Installation Information" for a User Product means any methods,+procedures, authorization keys, or other information required to install+and execute modified versions of a covered work in that User Product from+a modified version of its Corresponding Source. The information must+suffice to ensure that the continued functioning of the modified object+code is in no case prevented or interfered with solely because+modification has been made.++ If you convey an object code work under this section in, or with, or+specifically for use in, a User Product, and the conveying occurs as+part of a transaction in which the right of possession and use of the+User Product is transferred to the recipient in perpetuity or for a+fixed term (regardless of how the transaction is characterized), the+Corresponding Source conveyed under this section must be accompanied+by the Installation Information. But this requirement does not apply+if neither you nor any third party retains the ability to install+modified object code on the User Product (for example, the work has+been installed in ROM).++ The requirement to provide Installation Information does not include a+requirement to continue to provide support service, warranty, or updates+for a work that has been modified or installed by the recipient, or for+the User Product in which it has been modified or installed. Access to a+network may be denied when the modification itself materially and+adversely affects the operation of the network or violates the rules and+protocols for communication across the network.++ Corresponding Source conveyed, and Installation Information provided,+in accord with this section must be in a format that is publicly+documented (and with an implementation available to the public in+source code form), and must require no special password or key for+unpacking, reading or copying.++ 7. Additional Terms.++ "Additional permissions" are terms that supplement the terms of this+License by making exceptions from one or more of its conditions.+Additional permissions that are applicable to the entire Program shall+be treated as though they were included in this License, to the extent+that they are valid under applicable law. If additional permissions+apply only to part of the Program, that part may be used separately+under those permissions, but the entire Program remains governed by+this License without regard to the additional permissions.++ When you convey a copy of a covered work, you may at your option+remove any additional permissions from that copy, or from any part of+it. (Additional permissions may be written to require their own+removal in certain cases when you modify the work.) You may place+additional permissions on material, added by you to a covered work,+for which you have or can give appropriate copyright permission.++ Notwithstanding any other provision of this License, for material you+add to a covered work, you may (if authorized by the copyright holders of+that material) supplement the terms of this License with terms:++ a) Disclaiming warranty or limiting liability differently from the+ terms of sections 15 and 16 of this License; or++ b) Requiring preservation of specified reasonable legal notices or+ author attributions in that material or in the Appropriate Legal+ Notices displayed by works containing it; or++ c) Prohibiting misrepresentation of the origin of that material, or+ requiring that modified versions of such material be marked in+ reasonable ways as different from the original version; or++ d) Limiting the use for publicity purposes of names of licensors or+ authors of the material; or++ e) Declining to grant rights under trademark law for use of some+ trade names, trademarks, or service marks; or++ f) Requiring indemnification of licensors and authors of that+ material by anyone who conveys the material (or modified versions of+ it) with contractual assumptions of liability to the recipient, for+ any liability that these contractual assumptions directly impose on+ those licensors and authors.++ All other non-permissive additional terms are considered "further+restrictions" within the meaning of section 10. If the Program as you+received it, or any part of it, contains a notice stating that it is+governed by this License along with a term that is a further+restriction, you may remove that term. If a license document contains+a further restriction but permits relicensing or conveying under this+License, you may add to a covered work material governed by the terms+of that license document, provided that the further restriction does+not survive such relicensing or conveying.++ If you add terms to a covered work in accord with this section, you+must place, in the relevant source files, a statement of the+additional terms that apply to those files, or a notice indicating+where to find the applicable terms.++ Additional terms, permissive or non-permissive, may be stated in the+form of a separately written license, or stated as exceptions;+the above requirements apply either way.++ 8. Termination.++ You may not propagate or modify a covered work except as expressly+provided under this License. Any attempt otherwise to propagate or+modify it is void, and will automatically terminate your rights under+this License (including any patent licenses granted under the third+paragraph of section 11).++ However, if you cease all violation of this License, then your+license from a particular copyright holder is reinstated (a)+provisionally, unless and until the copyright holder explicitly and+finally terminates your license, and (b) permanently, if the copyright+holder fails to notify you of the violation by some reasonable means+prior to 60 days after the cessation.++ Moreover, your license from a particular copyright holder is+reinstated permanently if the copyright holder notifies you of the+violation by some reasonable means, this is the first time you have+received notice of violation of this License (for any work) from that+copyright holder, and you cure the violation prior to 30 days after+your receipt of the notice.++ Termination of your rights under this section does not terminate the+licenses of parties who have received copies or rights from you under+this License. If your rights have been terminated and not permanently+reinstated, you do not qualify to receive new licenses for the same+material under section 10.++ 9. Acceptance Not Required for Having Copies.++ You are not required to accept this License in order to receive or+run a copy of the Program. Ancillary propagation of a covered work+occurring solely as a consequence of using peer-to-peer transmission+to receive a copy likewise does not require acceptance. However,+nothing other than this License grants you permission to propagate or+modify any covered work. These actions infringe copyright if you do+not accept this License. Therefore, by modifying or propagating a+covered work, you indicate your acceptance of this License to do so.++ 10. Automatic Licensing of Downstream Recipients.++ Each time you convey a covered work, the recipient automatically+receives a license from the original licensors, to run, modify and+propagate that work, subject to this License. You are not responsible+for enforcing compliance by third parties with this License.++ An "entity transaction" is a transaction transferring control of an+organization, or substantially all assets of one, or subdividing an+organization, or merging organizations. If propagation of a covered+work results from an entity transaction, each party to that+transaction who receives a copy of the work also receives whatever+licenses to the work the party's predecessor in interest had or could+give under the previous paragraph, plus a right to possession of the+Corresponding Source of the work from the predecessor in interest, if+the predecessor has it or can get it with reasonable efforts.++ You may not impose any further restrictions on the exercise of the+rights granted or affirmed under this License. For example, you may+not impose a license fee, royalty, or other charge for exercise of+rights granted under this License, and you may not initiate litigation+(including a cross-claim or counterclaim in a lawsuit) alleging that+any patent claim is infringed by making, using, selling, offering for+sale, or importing the Program or any portion of it.++ 11. Patents.++ A "contributor" is a copyright holder who authorizes use under this+License of the Program or a work on which the Program is based. The+work thus licensed is called the contributor's "contributor version".++ A contributor's "essential patent claims" are all patent claims+owned or controlled by the contributor, whether already acquired or+hereafter acquired, that would be infringed by some manner, permitted+by this License, of making, using, or selling its contributor version,+but do not include claims that would be infringed only as a+consequence of further modification of the contributor version. For+purposes of this definition, "control" includes the right to grant+patent sublicenses in a manner consistent with the requirements of+this License.++ Each contributor grants you a non-exclusive, worldwide, royalty-free+patent license under the contributor's essential patent claims, to+make, use, sell, offer for sale, import and otherwise run, modify and+propagate the contents of its contributor version.++ In the following three paragraphs, a "patent license" is any express+agreement or commitment, however denominated, not to enforce a patent+(such as an express permission to practice a patent or covenant not to+sue for patent infringement). To "grant" such a patent license to a+party means to make such an agreement or commitment not to enforce a+patent against the party.++ If you convey a covered work, knowingly relying on a patent license,+and the Corresponding Source of the work is not available for anyone+to copy, free of charge and under the terms of this License, through a+publicly available network server or other readily accessible means,+then you must either (1) cause the Corresponding Source to be so+available, or (2) arrange to deprive yourself of the benefit of the+patent license for this particular work, or (3) arrange, in a manner+consistent with the requirements of this License, to extend the patent+license to downstream recipients. "Knowingly relying" means you have+actual knowledge that, but for the patent license, your conveying the+covered work in a country, or your recipient's use of the covered work+in a country, would infringe one or more identifiable patents in that+country that you have reason to believe are valid.++ If, pursuant to or in connection with a single transaction or+arrangement, you convey, or propagate by procuring conveyance of, a+covered work, and grant a patent license to some of the parties+receiving the covered work authorizing them to use, propagate, modify+or convey a specific copy of the covered work, then the patent license+you grant is automatically extended to all recipients of the covered+work and works based on it.++ A patent license is "discriminatory" if it does not include within+the scope of its coverage, prohibits the exercise of, or is+conditioned on the non-exercise of one or more of the rights that are+specifically granted under this License. You may not convey a covered+work if you are a party to an arrangement with a third party that is+in the business of distributing software, under which you make payment+to the third party based on the extent of your activity of conveying+the work, and under which the third party grants, to any of the+parties who would receive the covered work from you, a discriminatory+patent license (a) in connection with copies of the covered work+conveyed by you (or copies made from those copies), or (b) primarily+for and in connection with specific products or compilations that+contain the covered work, unless you entered into that arrangement,+or that patent license was granted, prior to 28 March 2007.++ Nothing in this License shall be construed as excluding or limiting+any implied license or other defenses to infringement that may+otherwise be available to you under applicable patent law.++ 12. No Surrender of Others' Freedom.++ If conditions are imposed on you (whether by court order, agreement or+otherwise) that contradict the conditions of this License, they do not+excuse you from the conditions of this License. If you cannot convey a+covered work so as to satisfy simultaneously your obligations under this+License and any other pertinent obligations, then as a consequence you may+not convey it at all. For example, if you agree to terms that obligate you+to collect a royalty for further conveying from those to whom you convey+the Program, the only way you could satisfy both those terms and this+License would be to refrain entirely from conveying the Program.++ 13. Use with the GNU Affero General Public License.++ Notwithstanding any other provision of this License, you have+permission to link or combine any covered work with a work licensed+under version 3 of the GNU Affero General Public License into a single+combined work, and to convey the resulting work. The terms of this+License will continue to apply to the part which is the covered work,+but the special requirements of the GNU Affero General Public License,+section 13, concerning interaction through a network will apply to the+combination as such.++ 14. Revised Versions of this License.++ The Free Software Foundation may publish revised and/or new versions of+the GNU General Public License from time to time. Such new versions will+be similar in spirit to the present version, but may differ in detail to+address new problems or concerns.++ Each version is given a distinguishing version number. If the+Program specifies that a certain numbered version of the GNU General+Public License "or any later version" applies to it, you have the+option of following the terms and conditions either of that numbered+version or of any later version published by the Free Software+Foundation. If the Program does not specify a version number of the+GNU General Public License, you may choose any version ever published+by the Free Software Foundation.++ If the Program specifies that a proxy can decide which future+versions of the GNU General Public License can be used, that proxy's+public statement of acceptance of a version permanently authorizes you+to choose that version for the Program.++ Later license versions may give you additional or different+permissions. However, no additional obligations are imposed on any+author or copyright holder as a result of your choosing to follow a+later version.++ 15. Disclaimer of Warranty.++ THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY+APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT+HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY+OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,+THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR+PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM+IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF+ALL NECESSARY SERVICING, REPAIR OR CORRECTION.++ 16. Limitation of Liability.++ IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS+THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY+GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE+USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF+DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD+PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),+EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF+SUCH DAMAGES.++ 17. Interpretation of Sections 15 and 16.++ If the disclaimer of warranty and limitation of liability provided+above cannot be given local legal effect according to their terms,+reviewing courts shall apply local law that most closely approximates+an absolute waiver of all civil liability in connection with the+Program, unless a warranty or assumption of liability accompanies a+copy of the Program in return for a fee.++ END OF TERMS AND CONDITIONS++ How to Apply These Terms to Your New Programs++ If you develop a new program, and you want it to be of the greatest+possible use to the public, the best way to achieve this is to make it+free software which everyone can redistribute and change under these terms.++ To do so, attach the following notices to the program. It is safest+to attach them to the start of each source file to most effectively+state the exclusion of warranty; and each file should have at least+the "copyright" line and a pointer to where the full notice is found.++ <one line to give the program's name and a brief idea of what it does.>+ Copyright (C) <year> <name of author>++ This program is free software: you can redistribute it and/or modify+ it under the terms of the GNU General Public License as published by+ the Free Software Foundation, either version 3 of the License, or+ (at your option) any later version.++ This program is distributed in the hope that it will be useful,+ but WITHOUT ANY WARRANTY; without even the implied warranty of+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the+ GNU General Public License for more details.++ You should have received a copy of the GNU General Public License+ along with this program. If not, see <http://www.gnu.org/licenses/>.++Also add information on how to contact you by electronic and paper mail.++ If the program does terminal interaction, make it output a short+notice like this when it starts in an interactive mode:++ <program> Copyright (C) <year> <name of author>+ This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.+ This is free software, and you are welcome to redistribute it+ under certain conditions; type `show c' for details.++The hypothetical commands `show w' and `show c' should show the appropriate+parts of the General Public License. Of course, your program's commands+might be different; for a GUI interface, you would use an "about box".++ You should also get your employer (if you work as a programmer) or school,+if any, to sign a "copyright disclaimer" for the program, if necessary.+For more information on this, and how to apply and follow the GNU GPL, see+<http://www.gnu.org/licenses/>.++ The GNU General Public License does not permit incorporating your program+into proprietary programs. If your program is a subroutine library, you+may consider it more useful to permit linking proprietary applications with+the library. If this is what you want to do, use the GNU Lesser General+Public License instead of this License. But first, please read+<http://www.gnu.org/philosophy/why-not-lgpl.html>.
@@ -0,0 +1,33 @@++VERSION = 0.2++BANK = FraCaSBank+BUILD-FORMATS = xml pl+LANGUAGES = Original Eng Swe++ZIPFILE = $(BANK)-$(VERSION).zip+FILES-TO-ZIP = Makefile *.* src/*.* doc/*.* build/*.*++GF-FILES = $(wildcard src/*.gf)++.PHONY: build clean distclean dist++.DELETE_ON_ERROR:++build: $(BUILD-FORMATS:%=build/$(BANK).%)++clean:+ rm -f src/*.gfo src/*.pyc .DS_Store */.DS_Store++distclean: clean+ rm -f build/$(BANK).*+ rm -f dist/$(ZIPFILE)++dist: build clean+ mkdir -p dist+ rm -f dist/$(ZIPFILE)+ zip dist/$(ZIPFILE) $(FILES-TO-ZIP)++build/$(BANK).%: $(GF-FILES)+ python build_fracasbank.py $* src/$(BANK)I.gf $(LANGUAGES:%=src/$(BANK)%.gf) > $@+
@@ -0,0 +1,434 @@+<?xml version="1.0" encoding="utf-8" ?>+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">+<head>+<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />+<meta name="generator" content="Docutils 0.8.1: http://docutils.sourceforge.net/" />+<title>The FraCaS GF Treebank</title>+<meta name="authors" content="Peter Ljunglöf Magdalena Siverbo" />+<meta name="date" content="2012-01-27" />+<meta name="organization" content="Centre for Language Technology, University of Gothenburg" />+<meta name="copyright" content="Distributed under GNU GPL v3, see COPYING.txt for details" />+<style type="text/css">++/*+:Author: David Goodger (goodger@python.org)+:Id: $Id: html4css1.css 7056 2011-06-17 10:50:48Z milde $+:Copyright: This stylesheet has been placed in the public domain.++Default cascading style sheet for the HTML output of Docutils.++See http://docutils.sf.net/docs/howto/html-stylesheets.html for how to+customize this style sheet.+*/++/* used to remove borders from tables and images */+.borderless, table.borderless td, table.borderless th {+ border: 0 }++table.borderless td, table.borderless th {+ /* Override padding for "table.docutils td" with "! important".+ The right padding separates the table cells. */+ padding: 0 0.5em 0 0 ! important }++.first {+ /* Override more specific margin styles with "! important". */+ margin-top: 0 ! important }++.last, .with-subtitle {+ margin-bottom: 0 ! important }++.hidden {+ display: none }++a.toc-backref {+ text-decoration: none ;+ color: black }++blockquote.epigraph {+ margin: 2em 5em ; }++dl.docutils dd {+ margin-bottom: 0.5em }++object[type="image/svg+xml"], object[type="application/x-shockwave-flash"] {+ overflow: hidden;+}++/* Uncomment (and remove this text!) to get bold-faced definition list terms+dl.docutils dt {+ font-weight: bold }+*/++div.abstract {+ margin: 2em 5em }++div.abstract p.topic-title {+ font-weight: bold ;+ text-align: center }++div.admonition, div.attention, div.caution, div.danger, div.error,+div.hint, div.important, div.note, div.tip, div.warning {+ margin: 2em ;+ border: medium outset ;+ padding: 1em }++div.admonition p.admonition-title, div.hint p.admonition-title,+div.important p.admonition-title, div.note p.admonition-title,+div.tip p.admonition-title {+ font-weight: bold ;+ font-family: sans-serif }++div.attention p.admonition-title, div.caution p.admonition-title,+div.danger p.admonition-title, div.error p.admonition-title,+div.warning p.admonition-title {+ color: red ;+ font-weight: bold ;+ font-family: sans-serif }++/* Uncomment (and remove this text!) to get reduced vertical space in+ compound paragraphs.+div.compound .compound-first, div.compound .compound-middle {+ margin-bottom: 0.5em }++div.compound .compound-last, div.compound .compound-middle {+ margin-top: 0.5em }+*/++div.dedication {+ margin: 2em 5em ;+ text-align: center ;+ font-style: italic }++div.dedication p.topic-title {+ font-weight: bold ;+ font-style: normal }++div.figure {+ margin-left: 2em ;+ margin-right: 2em }++div.footer, div.header {+ clear: both;+ font-size: smaller }++div.line-block {+ display: block ;+ margin-top: 1em ;+ margin-bottom: 1em }++div.line-block div.line-block {+ margin-top: 0 ;+ margin-bottom: 0 ;+ margin-left: 1.5em }++div.sidebar {+ margin: 0 0 0.5em 1em ;+ border: medium outset ;+ padding: 1em ;+ background-color: #ffffee ;+ width: 40% ;+ float: right ;+ clear: right }++div.sidebar p.rubric {+ font-family: sans-serif ;+ font-size: medium }++div.system-messages {+ margin: 5em }++div.system-messages h1 {+ color: red }++div.system-message {+ border: medium outset ;+ padding: 1em }++div.system-message p.system-message-title {+ color: red ;+ font-weight: bold }++div.topic {+ margin: 2em }++h1.section-subtitle, h2.section-subtitle, h3.section-subtitle,+h4.section-subtitle, h5.section-subtitle, h6.section-subtitle {+ margin-top: 0.4em }++h1.title {+ text-align: center }++h2.subtitle {+ text-align: center }++hr.docutils {+ width: 75% }++img.align-left, .figure.align-left, object.align-left {+ clear: left ;+ float: left ;+ margin-right: 1em }++img.align-right, .figure.align-right, object.align-right {+ clear: right ;+ float: right ;+ margin-left: 1em }++img.align-center, .figure.align-center, object.align-center {+ display: block;+ margin-left: auto;+ margin-right: auto;+}++.align-left {+ text-align: left }++.align-center {+ clear: both ;+ text-align: center }++.align-right {+ text-align: right }++/* reset inner alignment in figures */+div.align-right {+ text-align: inherit }++/* div.align-center * { */+/* text-align: left } */++ol.simple, ul.simple {+ margin-bottom: 1em }++ol.arabic {+ list-style: decimal }++ol.loweralpha {+ list-style: lower-alpha }++ol.upperalpha {+ list-style: upper-alpha }++ol.lowerroman {+ list-style: lower-roman }++ol.upperroman {+ list-style: upper-roman }++p.attribution {+ text-align: right ;+ margin-left: 50% }++p.caption {+ font-style: italic }++p.credits {+ font-style: italic ;+ font-size: smaller }++p.label {+ white-space: nowrap }++p.rubric {+ font-weight: bold ;+ font-size: larger ;+ color: maroon ;+ text-align: center }++p.sidebar-title {+ font-family: sans-serif ;+ font-weight: bold ;+ font-size: larger }++p.sidebar-subtitle {+ font-family: sans-serif ;+ font-weight: bold }++p.topic-title {+ font-weight: bold }++pre.address {+ margin-bottom: 0 ;+ margin-top: 0 ;+ font: inherit }++pre.literal-block, pre.doctest-block, pre.math {+ margin-left: 2em ;+ margin-right: 2em }++span.classifier {+ font-family: sans-serif ;+ font-style: oblique }++span.classifier-delimiter {+ font-family: sans-serif ;+ font-weight: bold }++span.interpreted {+ font-family: sans-serif }++span.option {+ white-space: nowrap }++span.pre {+ white-space: pre }++span.problematic {+ color: red }++span.section-subtitle {+ /* font-size relative to parent (h1..h6 element) */+ font-size: 80% }++table.citation {+ border-left: solid 1px gray;+ margin-left: 1px }++table.docinfo {+ margin: 2em 4em }++table.docutils {+ margin-top: 0.5em ;+ margin-bottom: 0.5em }++table.footnote {+ border-left: solid 1px black;+ margin-left: 1px }++table.docutils td, table.docutils th,+table.docinfo td, table.docinfo th {+ padding-left: 0.5em ;+ padding-right: 0.5em ;+ vertical-align: top }++table.docutils th.field-name, table.docinfo th.docinfo-name {+ font-weight: bold ;+ text-align: left ;+ white-space: nowrap ;+ padding-left: 0 }++h1 tt.docutils, h2 tt.docutils, h3 tt.docutils,+h4 tt.docutils, h5 tt.docutils, h6 tt.docutils {+ font-size: 100% }++ul.auto-toc {+ list-style-type: none }++</style>+</head>+<body>+<div class="document" id="the-fracas-gf-treebank">+<h1 class="title">The FraCaS GF Treebank</h1>+<table class="docinfo" frame="void" rules="none">+<col class="docinfo-name" />+<col class="docinfo-content" />+<tbody valign="top">+<tr><th class="docinfo-name">Authors:</th>+<td>Peter Ljunglöf+<br />Magdalena Siverbo</td></tr>+<tr><th class="docinfo-name">Version:</th>+<td>0.2</td></tr>+<tr><th class="docinfo-name">Date:</th>+<td>2012-01-27</td></tr>+<tr><th class="docinfo-name">Organization:</th>+<td>Centre for Language Technology, University of Gothenburg</td></tr>+<tr><th class="docinfo-name">Copyright:</th>+<td>Distributed under GNU GPL v3, see COPYING.txt for details</td></tr>+</tbody>+</table>+<div class="section" id="introduction">+<h1>1. Introduction</h1>+<p>This is the FraCaS Treebank, developed and maintained by+the Centre for Language Technolgy at University of Gothenburg:</p>+<blockquote>+<a class="reference external" href="http://www.clt.gu.se/">http://www.clt.gu.se/</a></blockquote>+<p>The treebank is part of the CLT Toolkit, a set of state-of-the-art+open source Language Technology tools and accompanying linguistic+resources. The different parts of the toolkit, including the+FraCaS Treebank, can be downloaded from:</p>+<blockquote>+<a class="reference external" href="http://www.clt.gu.se/clt-toolkit">http://www.clt.gu.se/clt-toolkit</a></blockquote>+<p>The treebank is built upon the FraCaS textual inference problem set,+which was built in the mid 1990’s by the FraCaS project, a large+collaboration aimed at developing resources and theories for+computational semantics. This test set was later modified and+converted to XML by Bill MacCartney:</p>+<blockquote>+<a class="reference external" href="http://www-nlp.stanford.edu/~wcmac/downloads/fracas.xml">http://www-nlp.stanford.edu/~wcmac/downloads/fracas.xml</a></blockquote>+<p>It is this modified version that has been used in this treebank.+The corpus consists of 346 problems each containing one or more+statements and one yes/no-question (except for four problems, where+there is no question). The total number of sentences in the corpus is+1220, but since some of them are repeated in several problems, there+are in total 874 unique sentences.</p>+</div>+<div class="section" id="description">+<h1>2. Description</h1>+<p>The treebank is created in Grammatical Framework (GF), using its+multilingual Resource Grammar as backend grammar. Currently the+treebank is bilingual, with an English and a Swedish lexicon.</p>+<p>More information about GF, including installation instructions,+can be found at:</p>+<blockquote>+<a class="reference external" href="http://www.grammaticalframework.org/">http://www.grammaticalframework.org/</a></blockquote>+<p>The treebank is also distributed in XML and Prolog formats,+for people that have no interest in learning GF. Note however+that the syntactical constructions come from the GF resource grammar.</p>+</div>+<div class="section" id="download-and-installation">+<h1>3. Download and installation</h1>+<p>The full distribution can be downloaded from+<a class="reference external" href="dist/FraCaSBank-0.2.zip">dist/FraCaSBank-0.2.zip</a>.</p>+<p>The Prolog and XML treebanks are already generated, so to use these+you don't need anything else. But if you want to work with the GF+source files, you need a GF installation including the Resource Grammar.</p>+</div>+<div class="section" id="contents">+<h1>4. Contents</h1>+<div class="section" id="a-documentation">+<h2>a) Documentation</h2>+<p>The documentation is located in the <a class="reference external" href="doc">doc directory</a>:</p>+<dl class="docutils">+<dt><tt class="docutils literal"><span class="pre">FraCaSBank-report.{pdf,lyx,bib}</span></tt>:</dt>+<dd>A technical report describing the treebank, together with+the <a class="reference external" href="http://www.lyx.org">LyX</a> and+<a class="reference external" href="http://www.bibtex.org">BibTeX</a> source files.+The PDF version can be <a class="reference external" href="doc/FraCaSBank-report.pdf">read here</a>.</dd>+</dl>+</div>+<div class="section" id="b-gf-source-files">+<h2>b) GF source files</h2>+<p>The grammar sources are located in the <a class="reference external" href="src">src directory</a>:</p>+<dl class="docutils">+<dt><tt class="docutils literal"><span class="pre">Additions*.gf</span></tt></dt>+<dd>Generic additions to the GF Resource Grammar.</dd>+<dt><tt class="docutils literal"><span class="pre">FraCaS*.gf</span></tt></dt>+<dd>Grammatical constructions specific to the FraCaS domain.</dd>+<dt><tt class="docutils literal"><span class="pre">FraCaSLex*.gf</span></tt></dt>+<dd>The lexical items in the FraCaS treebank.</dd>+<dt><tt class="docutils literal"><span class="pre">FraCaSBank*.gf</span></tt></dt>+<dd>The actual treebank.+The file <tt class="docutils literal">FraCaSBankOriginal.gf</tt> contains the original treebank sentences.+The file <tt class="docutils literal">FraCaSBankI.gf</tt> contains the language-independent abstract syntax trees.</dd>+</dl>+</div>+<div class="section" id="c-other-files">+<h2>c) Other files</h2>+<dl class="docutils">+<dt><tt class="docutils literal">Makefile, build_fracasbank.py</tt></dt>+<dd>Files for automatically generating the XML and Prolog treebank.</dd>+<dt><tt class="docutils literal"><span class="pre">build/FraCaSBank.{xml,pl}</span></tt></dt>+<dd>The automatically generated+<a class="reference external" href="build/FraCaSBank.xml">XML treebank</a> and+<a class="reference external" href="build/FraCaSBank.pl">Prolog treebank</a>.</dd>+<dt><tt class="docutils literal"><span class="pre">dist/FraCaSBank*.zip</span></tt></dt>+<dd>All files collected in a zip file.</dd>+<dt><tt class="docutils literal">README.txt, COPYING.txt</tt>:</dt>+<dd>The <a class="reference external" href="README.txt">source</a> of this README file, and <a class="reference external" href="COPYING.txt">GNU GPL 3</a> licensing information.</dd>+</dl>+</div>+</div>+</div>+</body>+</html>
@@ -0,0 +1,115 @@+======================+The FraCaS GF Treebank+======================++:Authors: Peter Ljunglöf, Magdalena Siverbo+:Version: 0.2+:Date: 2012-01-27+:Organization: Centre for Language Technology, University of Gothenburg+:Copyright: Distributed under GNU GPL v3, see COPYING.txt for details++1. Introduction+===============++This is the FraCaS Treebank, developed and maintained by +the Centre for Language Technolgy at University of Gothenburg:++ http://www.clt.gu.se/++The treebank is part of the CLT Toolkit, a set of state-of-the-art+open source Language Technology tools and accompanying linguistic+resources. The different parts of the toolkit, including the +FraCaS Treebank, can be downloaded from:++ http://www.clt.gu.se/clt-toolkit++The treebank is built upon the FraCaS textual inference problem set, +which was built in the mid 1990’s by the FraCaS project, a large+collaboration aimed at developing resources and theories for+computational semantics. This test set was later modified and+converted to XML by Bill MacCartney:++ http://www-nlp.stanford.edu/~wcmac/downloads/fracas.xml++It is this modified version that has been used in this treebank. +The corpus consists of 346 problems each containing one or more+statements and one yes/no-question (except for four problems, where+there is no question). The total number of sentences in the corpus is+1220, but since some of them are repeated in several problems, there+are in total 874 unique sentences. ++2. Description+==============++The treebank is created in Grammatical Framework (GF), using its+multilingual Resource Grammar as backend grammar. Currently the+treebank is bilingual, with an English and a Swedish lexicon. ++More information about GF, including installation instructions, +can be found at: ++ http://www.grammaticalframework.org/++The treebank is also distributed in XML and Prolog formats, +for people that have no interest in learning GF. Note however +that the syntactical constructions come from the GF resource grammar. ++3. Download and installation+============================++The full distribution can be downloaded from+`<dist/FraCaSBank-0.2.zip>`_.++The Prolog and XML treebanks are already generated, so to use these+you don't need anything else. But if you want to work with the GF+source files, you need a GF installation including the Resource Grammar. ++4. Contents+===========++a) Documentation+----------------++The documentation is located in the `doc directory <doc>`_:++``FraCaSBank-report.{pdf,lyx,bib}``:+ A technical report describing the treebank, together with+ the `LyX <http://www.lyx.org>`_ and + `BibTeX <http://www.bibtex.org>`_ source files.+ The PDF version can be `read here <doc/FraCaSBank-report.pdf>`_.++b) GF source files+------------------++The grammar sources are located in the `src directory <src>`_:++``Additions*.gf``+ Generic additions to the GF Resource Grammar.++``FraCaS*.gf``+ Grammatical constructions specific to the FraCaS domain.++``FraCaSLex*.gf``+ The lexical items in the FraCaS treebank.++``FraCaSBank*.gf``+ The actual treebank. + The file ``FraCaSBankOriginal.gf`` contains the original treebank sentences.+ The file ``FraCaSBankI.gf`` contains the language-independent abstract syntax trees.++c) Other files+--------------++``Makefile, build_fracasbank.py``+ Files for automatically generating the XML and Prolog treebank.++``build/FraCaSBank.{xml,pl}``+ The automatically generated + `XML treebank <build/FraCaSBank.xml>`_ and + `Prolog treebank <build/FraCaSBank.pl>`_.++``dist/FraCaSBank*.zip``+ All files collected in a zip file.++``README.txt, COPYING.txt``:+ The `source <README.txt>`_ of this README file, and `GNU GPL 3 <COPYING.txt>`_ licensing information.
@@ -0,0 +1,166 @@++# Copyright (C) 2011, Peter Ljunglof. All rights reserved.++# This file is part of the FraCaS Treebank.+# +# The FraCaS Treebank is free software: you can redistribute it and/or modify+# it under the terms of the GNU General Public License as published by+# the Free Software Foundation, either version 3 of the License, or+# (at your option) any later version.+# +# The FraCaS Treebank is distributed in the hope that it will be useful,+# but WITHOUT ANY WARRANTY; without even the implied warranty of+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the+# GNU General Public License for more details.+# +# You should have received a copy of the GNU General Public License+# along with the FraCaS Treebank. If not, see <http://www.gnu.org/licenses/>.++"""+Usage: python build_fracasbank.py (xml/pl) FraCaSBankI.gf FraCaSBank{Lang}.gf ...++This script compiles the FraCaS treebank into XML or Prolog format.+The result is printed to standard output.+"""++import re+++def read_treebank(treefile):+ """Reads trees from the FraCaS treebank.+ Returns a dict mapping sentence IDs to the trees.+ """+ treebank = {}+ with open(treefile) as F:+ for line in F:+ match = re.match(r"^lin +(\w+) *= *(.+?) *; *$", line)+ if match:+ sid, tree = match.group(1, 2)+ if re.match(r"^\w+$", tree):+ pass+ elif re.match(r"^ *variants *\{ *\} *$", tree):+ tree = None+ else:+ tree = GFTree.parse(tree)+ treebank[sid] = {'tree': tree}+ return treebank+++def linearize_language(treebank, langfile, lang):+ """Calls GF to linearize the trees in the treebank in the given language.+ Adds the results to the treebank.+ """+ from subprocess import Popen, PIPE+ gf = Popen(["gf", "--quiet", "--run", langfile], stdin=PIPE, stdout=PIPE)+ gfinput = ""+ for sid in sorted(treebank):+ gfinput += 'ps "@ %s"\nl %s\n' % (sid, sid)+ output, _error = gf.communicate(gfinput)++ for result in output.split("@"):+ try:+ sid, lin = result.split(None, 1)+ except ValueError:+ continue+ treebank[sid][lang] = lin.strip()+++def print_treebank(treebank, outformat):+ """Print the treebank on the standard output.+ The outformat can be 'xml' (XML) or 'pl' (Prolog).+ """+ pro = outformat.lower() == "pl"+ xml = outformat.lower() == "xml"+ assert pro or xml, "Unknown output format: '%s'" % outformat++ if xml:+ print "<?xml version='1.0' encoding='UTF-8' ?>"+ print "<treebank>"+ if pro:+ print ":- discontiguous tree/2, sent/3."+ print "%% tree(?SentenceID, ?Tree)"+ print "%% sent(?SentenceID, ?Language, ?Sentence)"++ for sid, item in sorted(treebank.items()):+ if xml: print "<phrase id='%s'>" % sid+ if isinstance(item['tree'], basestring):+ if xml: print "<tree ref='%s'/>" % item['tree']+ if pro: print "tree(%s, %s)." % (plquote(sid), plquote(item['tree']))+ elif isinstance(item['tree'], GFTree):+ if xml: print "<tree>%s</tree>" % item['tree'].xmlstr()+ if pro: print "tree(%s, %s)." % (plquote(sid), item['tree'].prologstr())+ for lang, sent in sorted(item.items()):+ if lang != 'tree':+ if xml: print "<sent lang='%s'>%s</sent>" % (lang, sent)+ if pro: print "sent(%s, %s, %s)." % (plquote(sid), plquote(lang.lower()), plquote(sent))+ if xml: print "</phrase>"+ if pro: print++ if xml: print "</treebank>"+++def plquote(atom):+ """Surround a Prolog atom with '...' if necessary."""+ if re.match(r"^(\d+|[a-z][a-zA-Z0-9_]*)$", atom):+ return atom+ else:+ return "'" + atom.replace("\\", "\\\\").replace("'", "\\'") + "'"+++class GFTree(object):+ def __init__(self, node, children=[]):+ self.node = node+ self.children = list(children)++ @classmethod+ def parse(cls, descr):+ tokens = descr.replace("(", " ( ").replace(")", " ) ").split()+ if tokens[0] == "(" and tokens[-1] == ")":+ tokens = tokens[1:-1]+ result = [[]]+ for token in tokens:+ if token == "(":+ result.append([])+ elif token == ")":+ tree = result.pop()+ result[-1].append(GFTree(tree[0], tree[1:]))+ elif not result[-1]:+ result[-1].append(token)+ else:+ result[-1].append(GFTree(token))+ assert len(result) == 1+ tree = result[0]+ return GFTree(tree[0], tree[1:])++ def __str__(self):+ return "(" + " ".join(map(str, [self.node] + self.children)) + ")"++ def __repr__(self):+ return (type(self).__name__ + "(" ++ ", ".join(map(repr, [self.node] + self.children)) + ")")++ def xmlstr(self):+ return ("<t><n>" + self.node + "</n><cs>" ++ "".join(child.xmlstr() for child in self.children) ++ "</cs></t>")++ def prologstr(self):+ return ("t(" + plquote(self.node) + ", [" ++ ", ".join(child.prologstr() for child in self.children) ++ "])")+++if __name__ == '__main__':+ import sys, os.path+ if len(sys.argv) < 3:+ exit(__doc__)+ outformat, treefile = sys.argv[1:3]+ languages = sys.argv[3:]+ basename = os.path.commonprefix(sys.argv[2:])+ treebank = read_treebank(treefile)+ for langfile in languages:+ lang = langfile[len(basename):]+ if lang.endswith(".gf"): lang = lang[:-3]+ linearize_language(treebank, langfile, lang)+ print_treebank(treebank, outformat)+
@@ -0,0 +1,70 @@+%% This BibTeX bibliography file was created using BibDesk.+%% http://bibdesk.sourceforge.net/+++%% Created for peter ljunglöf at 2012-01-26 13:51:49 +0100 +++%% Saved with string encoding Unicode (UTF-8) ++++@techreport{CooperCrouchEijck1996:Using-the-Framework,+ Author = {Cooper, Robin and Crouch, Dick and van Eijck, Jan and Fox, Chris and van Genabith, Josef and Jan, Jaspars and Kamp, Hans and Milward, David and Pinkal, Manfred and Poesio, Massimo and Pulman, Steve and Briscoe, Ted and Maier, Holger and Konrad, Karsten},+ Institution = {FraCaS Project},+ Number = {D16},+ Title = {Using the Framework},+ Type = {Deliverable},+ Year = {1996}}++@phdthesis{Ljunglof2004:Expressivity-and-Complexity-of-GF,+ Address = {Gothenburg, Sweden},+ Author = {Ljungl{\"o}f, Peter},+ School = {University of Gothenburg and Chalmers University of Technology},+ Title = {Expressivity and Complexity of the Grammatical Framework},+ Year = {2004}}++@inproceedings{MacCartneyManning2007:Natural-logic-for-textual,+ Address = {Prague},+ Author = {MacCartney, Bill and Manning, Christopher D.},+ Booktitle = {ACL'07 Workshop on Textual Entailment and Paraphrasing},+ Title = {Natural logic for textual inference},+ Year = {2007}}++@inproceedings{MacCartneyManning2008:Modeling-semantic-containment,+ Address = {Manchester, UK},+ Author = {MacCartney, Bill and Manning, Christopher D.},+ Booktitle = {COLING'08, 22nd International Conference on Computational Linguistics},+ Title = {Modeling semantic containment and exclusion in natural language inference},+ Year = {2008}}++@article{Ranta2001:Computational-Semantics,+ Author = {Ranta, Aarne},+ Journal = {Mathematics and Social Sciences},+ Pages = {31--57},+ Title = {Computational Semantics in Type Theory},+ Volume = {165},+ Year = {2004}}++@article{Ranta2009:The-GF-Resource-Grammar-Library,+ Author = {Ranta, Aarne},+ Journal = {Linguistic Issues in Language Technology},+ Title = {The {GF} Resource Grammar Library},+ Volume = {2},+ Year = {2009}}++@article{Ranta2009:Grammatical-Framework:-A-Multilingual,+ Author = {Ranta, Aarne},+ Journal = {Language and Linguistics Compass},+ Number = {5},+ Pages = {1242--1265},+ Title = {Grammatical {Framework}: A Multilingual Grammar Formalism},+ Volume = {3},+ Year = {2009}}++@book{Ranta2011:Grammatical-Framework:-Programming,+ Address = {Stanford},+ Author = {Ranta, Aarne},+ Publisher = {CSLI Publications},+ Title = {Grammatical Framework: Programming with Multilingual Grammars},+ Year = {2011}}
@@ -0,0 +1,6246 @@+#LyX 2.0 created this file. For more info see http://www.lyx.org/+\lyxformat 413+\begin_document+\begin_header+\textclass article+\begin_preamble+\usepackage{times}+\end_preamble+\use_default_options true+\maintain_unincluded_children false+\language english+\language_package default+\inputencoding auto+\fontencoding global+\font_roman default+\font_sans default+\font_typewriter default+\font_default_family default+\use_non_tex_fonts false+\font_sc false+\font_osf false+\font_sf_scale 100+\font_tt_scale 100++\graphics default+\default_output_format default+\output_sync 0+\bibtex_command default+\index_command default+\paperfontsize 11+\spacing single+\use_hyperref true+\pdf_bookmarks true+\pdf_bookmarksnumbered false+\pdf_bookmarksopen false+\pdf_bookmarksopenlevel 1+\pdf_breaklinks false+\pdf_pdfborder false+\pdf_colorlinks true+\pdf_backref false+\pdf_pdfusetitle true+\papersize a4paper+\use_geometry false+\use_amsmath 1+\use_esint 1+\use_mhchem 1+\use_mathdots 1+\cite_engine natbib_authoryear+\use_bibtopic false+\use_indices false+\paperorientation portrait+\suppress_date false+\use_refstyle 1+\index Index+\shortcut idx+\color #008000+\end_index+\secnumdepth 3+\tocdepth 3+\paragraph_separation indent+\paragraph_indentation default+\quotes_language english+\papercolumns 1+\papersides 1+\paperpagestyle default+\tracking_changes false+\output_changes false+\html_math_output 0+\html_css_as_file 0+\html_be_strict false+\end_header++\begin_body++\begin_layout Title+A Bilingual Treebank for the FraCaS Test Suite+\begin_inset Newline newline+\end_inset++CLT Project Report+\end_layout++\begin_layout Author+Peter Ljunglöf and Magdalena Siverbo+\begin_inset Newline newline+\end_inset++Centre for Language Technology+\begin_inset Newline newline+\end_inset++University of Gothenburg+\begin_inset Newline newline+\end_inset++E-mail: +\begin_inset Flex URL+status open++\begin_layout Plain Layout++peter.ljunglof@gu.se+\end_layout++\end_inset+++\end_layout++\begin_layout Date+31st October, 2011+\end_layout++\begin_layout Abstract+\noindent+We have created a bilingual treebank for 99% of the sentences in the FraCaS+ test suite.+ The treebank is built together with an associated bilingual English-Swedish+ lexicon written in the Grammatical Framework Resource Grammar.+ The original FraCaS sentences are English, and we have tested the multilinguali+ty of the Resource Grammar by analysing the grammaticality and naturalness+ of the Swedish translations.+ 86% of the sentences are grammatically and semantically correct and sound+ natural.+ About 10% can probably be fixed by adding new lexical items or grammatical+ rules, and only a small amount are considered to be difficult to cure.+\end_layout++\begin_layout Standard+\begin_inset ERT+status open++\begin_layout Plain Layout+++\backslash+thispagestyle{empty}+\end_layout++\end_inset+++\end_layout++\begin_layout Section+Introduction+\end_layout++\begin_layout Standard+In this project we have created a bilingual treebank for the FraCaS test+ suite +\begin_inset CommandInset citation+LatexCommand citep+key "CooperCrouchEijck1996:Using-the-Framework"++\end_inset++, using the Grammatical Framework Resource Grammar Library +\begin_inset CommandInset citation+LatexCommand citep+key "Ranta2009:The-GF-Resource-Grammar-Library,Ranta2009:Grammatical-Framework:-A-Multilingual,Ranta2011:Grammatical-Framework:-Programming"++\end_inset++.+ The project consisted of two parts that were partly interwoven.+ The first aim was to construct a treebank, which involved creating a lexicon+ and a limited grammar specific for the FraCaS test suite, parsing the sentences+ and selecting the most representative trees.+ The second aim was to build a FraCaS corpus in Swedish, using the treebank+ constructed in the first part of the project.+ This involved translating the English lexicon and grammar into Swedish+ equivalents, generating Swedish sentences for all the trees in the treebank+ and evaluate the results.+\end_layout++\begin_layout Standard+\begin_inset Newpage pagebreak+\end_inset+++\end_layout++\begin_layout Subsection+The FraCaS Corpus+\end_layout++\begin_layout Standard+The FraCaS textual inference problem set +\begin_inset CommandInset citation+LatexCommand citep+key "CooperCrouchEijck1996:Using-the-Framework"++\end_inset++ was built in the mid 1990's by the FraCaS project, a large collaboration+ aimed at developing resources and theories for computational semantics.+ This test set was later modified and converted to XML by Bill MacCartney:+ +\end_layout++\begin_layout Standard+\noindent+\align center++\family sans+\begin_inset CommandInset href+LatexCommand href+target "http://www-nlp.stanford.edu/~wcmac/downloads/fracas.xml"++\end_inset+++\end_layout++\begin_layout Standard+It is the latter, modified version that has been used in this project.+ The corpus consists of 346 problems each containing one or more statements+ and one yes/no-question (except for four problems, where there is no question).+ The total number of sentences in the corpus is 1220, but since some of+ them are repeated in several problems, there are in total 874 unique sentences.+\end_layout++\begin_layout Standard+The FraCaS problems contain relatively simple sentences, and the premise+ and hypothesis sentences are usually syntactically similar.+ Despite this simplicity, the problems are intended to reflect a broad variety+ of semantic and inferential phenomena.+ For this reason, the FraCaS corpus has been used as a benchmark for evaluating+ different computational semantics systems +\begin_inset CommandInset citation+LatexCommand citep+key "MacCartneyManning2008:Modeling-semantic-containment"++\end_inset++.+\end_layout++\begin_layout Standard+The FraCaS corpus only contains made-up sentences, which are intended to+ be grammatically correct.+ Therefore we took the opportunity to correct some obvious minor mistakes,+ such as +\emph on++\begin_inset Quotes eld+\end_inset++a executive+\begin_inset Quotes erd+\end_inset+++\emph default+.+ +\emph on++\begin_inset Quotes eld+\end_inset++does +\family typewriter+[\SpecialChar \ldots{}+]+\family default+ has+\begin_inset Quotes erd+\end_inset+++\emph default+, +\emph on++\begin_inset Quotes eld+\end_inset++did +\family typewriter+[\SpecialChar \ldots{}+]+\family default+ delivered+\begin_inset Quotes erd+\end_inset+++\emph default+, and +\emph on++\begin_inset Quotes eld+\end_inset++Jones's+\begin_inset Quotes erd+\end_inset+++\emph default+.+ In total 7 sentences were corrected.+\end_layout++\begin_layout Standard+\begin_inset Note Note+status collapsed++\begin_layout Subsubsection+from MacCartney's thesis:+\end_layout++\begin_layout Plain Layout+The FraCaS test suite +\begin_inset CommandInset citation+LatexCommand cite+key "CooperCrouchEijck1996:Using-the-Framework"++\end_inset++(Cooper et al.+ 1996) of NLI problems was one product of the FraCaS Consortium, a large+ collaboration in the mid-1990s aimed at developing a range of resources+ related to computational semantics.+ The FraCaS problems contain comparatively simple sentences, and the premise+ and hypothesis sentences are usu- ally quite similar, so that just a few+ edits suffice to transform p into h.+ Despite this simplicity, the problems are designed to reflect a broad diversity+ of semantic and infer- ential phenomena.+ For this reason, the FraCaS test suite has proven to be invaluable as a+ developmental test bed for the NatLog system and as a yardstick for evaluating+ its effectiveness.+ Indeed, the test suite was created with just such an application as its+ primary goal.+ As the authors write:+\end_layout++\begin_layout Quote+In light of the view expressed elsewhere in this and other FraCaS de- liverables+ ...+ that inferential ability is not only a central manifestation of semantic+ competence but is in fact centrally constitutive of it, it shouldn’t be+ a surprise that we regard inferencing tasks as the best way of testing+ an NLP system’s semantic capacity.2+\end_layout++\begin_layout Subsubsection+from MacCartney & Manning (2007):+\end_layout++\begin_layout Plain Layout+The FraCaS test suite (Cooper et al., 1996) was de- veloped as part of a+ collaborative research effort in computational semantics.+ It contains 346 inference problems reminiscent of a textbook on formal+ se- mantics.+ In the authors’ view, “inferencing tasks [are] the best way of testing+ an NLP system’s se- mantic capacity.” +\end_layout++\begin_layout Plain Layout+The problems are divided into nine sections, each focused on a category+ of semantic phenomena, such as quantifiers or anaphora (see table 2).+ Each prob- lem consists of one or more premise sentences, fol- lowed by+ a one-sentence question.+ For this project, the questions were converted into declarative hy- potheses.+\end_layout++\begin_layout Plain Layout+Each problem also has an answer, which (usually) takes one of three values:+ yes (the hypoth- esis can be inferred from the premise(s)), no (the negation+ of the hypothesis can be inferred), or unk (neither the hypothesis nor+ its negation can be in- ferred).+\end_layout++\begin_layout Subsubsection+from Mac&Mann (2008):+\end_layout++\begin_layout Plain Layout+The FraCaS test suite (Cooper et al., 1996) con- tains 346 NLI problems,+ divided into nine sec- tions, each focused on a specific category of se-+ mantic phenomena (listed in table 3).+ Each prob- lem consists of one or more premise sentences, a question sentence,+ and one of three answers: yes, no, or unknown+\end_layout++\end_inset+++\end_layout++\begin_layout Subsubsection+Examples from the FraCaS Corpus+\end_layout++\begin_layout Standard+The FraCaS problems are divided into 9 broad categories which cover many+ aspects of semantic inference.+ The categories are called +\emph on+quantifiers+\emph default+, +\emph on+plurals+\emph default+, +\emph on+anaphora+\emph default+, +\emph on+ellipsis+\emph default+, +\emph on+adjectives+\emph default+, +\emph on+comparatives+\emph default+, +\emph on+temporal reference+\emph default+, +\emph on+verbs+\emph default+, and +\emph on+attitudes+\emph default+, and they are also sub-categorised and sub-sub-categorised in an hierarchy+ of semantic phenomena.+ Each problem starts with one or more premises, and a question that can+ be answered with yes, no or unknown.+ Here are two similar examples with different semantic inferences from the+ +\emph on+anaphora+\emph default+ category:+\end_layout++\begin_layout Labeling+\labelwidthstring (999)+(135) P: Every customer who owns a computer has a service contract for it.+\begin_inset Newline newline+\end_inset++P: MFI is a customer that owns several computers.+\begin_inset Newline newline+\end_inset++Q: Does MFI have a service contract for all its computers?+\begin_inset Newline newline+\end_inset++A: Yes.+\end_layout++\begin_layout Labeling+\labelwidthstring (999)+(136) P: Every executive who had a laptop computer brought it to take notes+ at the meeting.+\begin_inset Newline newline+\end_inset++P: Smith is an executive who owns five different laptop computers.+\begin_inset Newline newline+\end_inset++Q: Did Smith take five laptop computers to the meeting?+\begin_inset Newline newline+\end_inset++A: Unknown.+\end_layout++\begin_layout Standard+Some of the problems are equivalent to each other, but with different answers+ depending on ambiguity.+ This happens for the following problem from the +\emph on+ellipsis+\emph default+ category:+\end_layout++\begin_layout Labeling+\labelwidthstring (160--161)+(160--161) P: John owns a red car.+\begin_inset Newline newline+\end_inset++P: Bill owns a fast one.+\begin_inset Newline newline+\end_inset++Q: Does Bill own a fast red car?+\begin_inset Newline newline+\end_inset++A: Yes or unknown, depending on the reading of +\begin_inset Quotes eld+\end_inset++one+\begin_inset Quotes erd+\end_inset++.+\end_layout++\begin_layout Subsection+Grammatical Framework+\end_layout++\begin_layout Standard+Grammatical Framework (GF) +\begin_inset CommandInset citation+LatexCommand citep+key "Ranta2009:Grammatical-Framework:-A-Multilingual,Ranta2011:Grammatical-Framework:-Programming"++\end_inset++ is a grammar formalism based on type theory.+ The main feature is the separation of abstract and concrete syntax.+ The abstract syntax of a grammar defines a set of abstract syntactic structures+, called abstract terms or trees; and the concrete syntax defines a relation+ between abstract structures and concrete structures.+ The concrete syntax is expressive enough to describe language-specific+ linguistic features such as word order, gender and case inflection, and+ discontinuous phrases.+ This makes it very suitable for writing multilingual grammars, where the+ abstract syntax is lifted to a more language universal level.+\end_layout++\begin_layout Subsubsection+Simple GF Example+\end_layout++\begin_layout Standard+As an example to show the possibilities of GF, we define adjectives as noun-modi+fying functions in the spirit of categorial grammar:+\end_layout++\begin_layout Description+(Abstract) +\begin_inset Formula $\mathit{green:CN\rightarrow CN}$+\end_inset+++\end_layout++\begin_layout Standard+This means that +\emph on+green+\emph default+ is a grammatical construction that create common nouns (CN) from common+ nouns (CN).+ This does not say anything about the word order, which is instead defined+ in the linearisation rules in the concrete syntax.+ In English, the adjective comes before the noun:+\end_layout++\begin_layout Description++\series bold+(English) +\series default++\begin_inset Formula $\mathit{green\; n="\! green"\,+\negmedspace\negmedspace+\:\: n}$+\end_inset+++\end_layout++\begin_layout Standard+Whereas in French the adjective comes after:+\end_layout++\begin_layout Description+(French) +\begin_inset Formula $\mathit{green\; n=n\:+\negmedspace\negmedspace+\:\:"\! vert"}$+\end_inset+++\end_layout++\begin_layout Standard+But since French adjectives are inflected by number and gender, this is+ only correct for singular masculine nouns.+ That is why GF concrete syntax has support for inflection tables, inherent+ attributes and discontinuous constituents, which makes the formalism as+ expressive as Multiple Context-Free Grammars +\begin_inset CommandInset citation+LatexCommand citep+key "Ljunglof2004:Expressivity-and-Complexity-of-GF"++\end_inset++.+ A slightly more correct French variant of the adjective +\emph on+green+\emph default+ would then be:+\end_layout++\begin_layout Description++\series bold+(French) +\series default++\begin_inset Formula $\mathit{green\; n=\mathbf{table}\left\{ \begin{array}{l}+Sg\:\Rightarrow\: n\,!\, Sg\:+\negmedspace\negmedspace+\:\:"\! vert"\\+Pl\:\Rightarrow\: n\,!\, Pl\:+\negmedspace\negmedspace+\:\:"\! verts"+\end{array}\right\} }$+\end_inset++ +\end_layout++\begin_layout Standard+But this still does not handle feminine nouns, which of course is possible.+ Even better is to make use of the GF Resource Grammar, where all these+ inflection paradigms are already defined.+\end_layout++\begin_layout Subsubsection+The GF Resource Grammar+\end_layout++\begin_layout Standard+GF has a rich module system which facilitates grammar writing as an engineering+ task, by reusing common grammars.+ The abstract syntax of one grammar can be used as a concrete syntax of+ another grammar.+ This makes it possible to implement grammar resources to be used in several+ different application domains.+ These points are currently exploited in the GF Resource Grammar Library+ +\begin_inset CommandInset citation+LatexCommand citep+key "Ranta2009:The-GF-Resource-Grammar-Library,Ranta2011:Grammatical-Framework:-Programming"++\end_inset++, which is a multilingual GF grammar with a common abstract syntax for 20+ languages, including Finnish, Persian, Russian and Urdu.+ The main purpose of the Grammar Library is as a resource for writing domain-spe+cific grammars.+\end_layout++\begin_layout Standard+Now we can define the French and English linearisations for the adjective+ functions using the resource grammar, which then takes care of all kinds+ of inflection:+\end_layout++\begin_layout Description+(French) +\begin_inset Formula $\mathit{green\; n=AdjCN\:(PositA\:(mkA\;"\! vert"))\: n}$+\end_inset+++\end_layout++\begin_layout Description+(English) +\begin_inset Formula $\mathit{green\; n=AdjCN\:(PositA\:(mkA\;"\! green"))\: n}$+\end_inset+++\end_layout++\begin_layout Standard+Here +\emph on+AdjCN+\emph default+ is a function that modifies a common noun with an adjective phrase, +\emph on+PositA+\emph default+ uses the positive form of an adjective, and +\emph on+mkA+\emph default+ creates all possible inflections of a regular adjective.+ Note that the structures of the English and French linearisations are the+ same, except for the lexical entries, and this can be exploited in GF by+ creating a language-independent concrete syntax.+ The FraCaS treebank is language-independent in this sense, since the tree+ for each sentence is the same for both English and Swedish.+\end_layout++\begin_layout Section+The English Treebank+\end_layout++\begin_layout Subsection+The FraCaS Grammar+\end_layout++\begin_layout Standard+To be able to construct a GF treebank we need a grammar and a lexicon that+ can describe every sentence in the corpus.+ We have used the GF Resource Grammar as underlying grammar, and added lexical+ items that capture the FraCaS domain.+ On top of the resource grammar we have added a few new grammatical construction+s, as well as functions for handling elliptic phrases.+ +\end_layout++\begin_layout Standard+In total, we used 107 grammatical functions out of the 189 that are defined+ in the resource grammar.+ In addition we added four new grammatical constructions that were lacking,+ and 7 different elliptic phrases.+\end_layout++\begin_layout Standard+\begin_inset Note Note+status collapsed++\begin_layout Plain Layout+In order to construct the treebank for FraCaS, two modules were written,+ one lexicon module and one grammar module.+\end_layout++\begin_layout Subsubsection+Lexicon module+\end_layout++\begin_layout Plain Layout+The FraCaS lexicon module consists of an abstract and a concrete part.+\end_layout++\begin_layout Description+FraCaSLex Abstract lexicon for the FraCaS test suite+\end_layout++\begin_layout Description+FraCaSLexEng Concrete lexicon for the FraCaS test suite+\end_layout++\begin_layout Plain Layout+The lexicon was built using the functions mkN, mkA, mkV etc, mainly from+ the Paradigms module.+\end_layout++\begin_layout Subsubsection+Grammar module+\end_layout++\begin_layout Plain Layout+The FraCaS grammar module consists of an abstract and a concrete part.+\end_layout++\begin_layout Description+FraCaS Abstract grammar for the FraCaS test suite+\end_layout++\begin_layout Description+FraCaSEng Concrete grammar for the FraCaS test suite+\end_layout++\begin_layout Plain Layout+Initially, the whole Grammar module from the resource grammar was imported,+ but in the end only parts of the Grammar module (namely Noun, Verb, Adjective,+ Adverb, Numeral and Tense) were imported, while other parts were opened+ and necessary functions used in the FraCaS module.+ A few functions were added, mainly on clause and sentence level, in order+ to simplify the tree structures.+\end_layout++\end_inset+++\end_layout++\begin_layout Subsubsection+Lexicon+\end_layout++\begin_layout Standard+The lexicon has in total 531 entries, some of which are structural words+ already defined in the resource grammar.+ Some of the lexical items denote different meanings of the same word.+ Examples of this include the word +\emph on++\begin_inset Quotes eld+\end_inset++than+\begin_inset Quotes erd+\end_inset+++\emph default+ which can function as a preposition and as a subjunction, the verb +\emph on++\begin_inset Quotes eld+\end_inset++go+\begin_inset Quotes erd+\end_inset+++\emph default+ which can mean +\emph on++\begin_inset Quotes eld+\end_inset++travel+\begin_inset Quotes erd+\end_inset+++\emph default+ or +\emph on++\begin_inset Quotes eld+\end_inset++walk+\begin_inset Quotes erd+\end_inset+++\emph default+, and the conjunction +\emph on++\begin_inset Quotes eld+\end_inset++and+\begin_inset Quotes erd+\end_inset+++\emph default+ which can be a phrase initial conjunction and an ordinary conjuntion.+ Other entries denote different valencies of the same meaning.+ This is most common for verbs, such as the transitive verb +\emph on++\begin_inset Quotes eld+\end_inset++finish+\begin_inset Quotes erd+\end_inset+++\emph default+ which can take a noun phrase or a verb phrase argument, and the verb +\emph on++\begin_inset Quotes eld+\end_inset++know+\begin_inset Quotes erd+\end_inset+++\emph default+ which can take either a question or a sentence as argument.+\end_layout++\begin_layout Standard+The lexicon entries are divided into 63 adjectives, 77 adverbials, 20 conjunctio+ns/subjunctions, 34 determiners, 142 nouns, 19 numerals, 40 proper nouns,+ 15 prepositions, 12 pronouns, and 109 verbs.+ Out of these, 55 adverbials and 28 nouns/proper nouns are multi-word expression+s.+\end_layout++\begin_layout Subsubsection+Multi-word Lexical Items+\begin_inset CommandInset label+LatexCommand label+name "sub:Multi-word-Lexical-Items"++\end_inset+++\end_layout++\begin_layout Standard+83 of the lexical items denote multi-word phrases.+ They were mainly divided into two types:+\end_layout++\begin_layout Standard+\begin_inset Note Note+status collapsed++\begin_layout Itemize+P: Modified proper nouns (A + PN) could not be parsed.+\begin_inset Newline newline+\end_inset++S: “southern Europe” was defined as PN in FraCaSLex.+\end_layout++\begin_layout Itemize+P: Compounds constructed from a proper noun and a noun (PN + N) , and hyphenated+ nouns (N-N) could not be parsed.+\begin_inset Newline newline+\end_inset++S: “Labour MP”, “APCOM manager”, “stock-market” etc.+ were defined as N in FraCaSLex.+\end_layout++\begin_layout Itemize+(SKIP) P: Certain indefinite pronouns were not recognized as they did not+ exist in the resource grammar.+\begin_inset Newline newline+\end_inset++S: “all”, “anyone”, “everyone”, “no one” and “someone” were defined as NP+ in FraCaSLex.+\end_layout++\end_inset+++\begin_inset Note Note+status collapsed++\begin_layout Paragraph+Quantifiers+\end_layout++\begin_layout Itemize+P: Numbers written without spaces between the digits were not recognized.+\begin_inset Newline newline+\end_inset++S: “10”, “99”, “100”, “2500” etc.+ defined as Det in FraCaSLex.+\end_layout++\begin_layout Itemize+P: Certain longer numerical expressions could not be parsed.+\begin_inset Newline newline+\end_inset++S: “one or more”, “the other 99” and “two out of ten” were defined as Det+ in FraCaSLex.+\end_layout++\begin_layout Itemize+P: Certain quantifiers were not recognized as they did not exist in the+ resource grammar.+\begin_inset Newline newline+\end_inset++S: “a few”, “both”, “either”, “most of the”, “several” etc.+ were defined as Det in FraCaSLex.+\end_layout++\begin_layout Paragraph+Conjunctions+\end_layout++\begin_layout Itemize+P: Sentences starting with a conjunction could not be parsed.+\begin_inset Newline newline+\end_inset++S: The functions SentencePAnd and SentencePBut were added in FraCaS.+\end_layout++\begin_layout Itemize+P: Conjunctions preceded by comma or semicolon could not be parsed.+\begin_inset Newline newline+\end_inset++S: “, and” and “; and” were defined as Conj in FraCaSLex.+\end_layout++\end_inset+++\end_layout++\begin_layout Description+Compounds Compound noun phrases such as +\emph on++\begin_inset Quotes eld+\end_inset++southern Europe+\begin_inset Quotes erd+\end_inset+++\emph default+ (adjective + proper noun), +\emph on++\begin_inset Quotes eld+\end_inset++APCOM manager+\begin_inset Quotes erd+\end_inset+++\emph default+ (proper noun + noun) and +\emph on++\begin_inset Quotes eld+\end_inset++university student+\begin_inset Quotes erd+\end_inset+++\emph default+ (noun + noun) were problematic.+ Partly because the Resource Grammar currently cannot handle all kinds of+ compounding, but mostly because many of the corresponding Swedish phrases+ are single compound words.+ In total there were 28 wulti-word compounds, divided between nouns, proper+ nouns and adjectives.+\end_layout++\begin_layout Description+Time+\begin_inset space ~+\end_inset++and+\begin_inset space ~+\end_inset++Date+\begin_inset space ~+\end_inset++Expressions Time and date expressions were problematic for different reasons.+ First, although a generic multilingual time and date resource grammar is+ in the making, it is not finished yet.+ Second, different languages use different syntactic constructions for times+ and dates.+ Especially the use prepositions differ a lot: +\emph on++\begin_inset Quotes eld+\end_inset++in 1990+\begin_inset Quotes erd+\end_inset+++\emph default+, +\emph on++\begin_inset Quotes eld+\end_inset++in February+\begin_inset Quotes erd+\end_inset+++\emph default+ and +\emph on++\begin_inset Quotes eld+\end_inset++in two years+\begin_inset Quotes erd+\end_inset+++\emph default+, are translated to Swedish as +\emph on++\begin_inset Quotes eld+\end_inset++1990+\begin_inset Quotes erd+\end_inset+++\emph default+, +\emph on++\begin_inset Quotes eld+\end_inset++i februari+\begin_inset Quotes erd+\end_inset+++\emph default+ and +\emph on++\begin_inset Quotes eld+\end_inset++om två år+\begin_inset Quotes erd+\end_inset+++\emph default+, respectively.+ For these reasons, we have defined all time and date expressions as multi-word+ adverbials.+ In total we defined 55 different time and date phrases.+\end_layout++\begin_layout Subsubsection+Grammar Additions+\end_layout++\begin_layout Standard+Three different grammatical constructions were added to the grammar.+ They consist of natural extensions to and slight modifications of existing+ functions.+ The intention is that they will be added to the resource grammar in the+ near future.+ Examples include the idiom +\emph on++\begin_inset Quotes eld+\end_inset++so do I+\begin_inset Quotes erd+\end_inset+++\emph default+ / +\emph on++\begin_inset Quotes eld+\end_inset++so did she+\begin_inset Quotes erd+\end_inset+++\emph default+, and question adverbials such as +\emph on++\begin_inset Quotes eld+\end_inset++if Smith signed the contract, did Jones sign the contract?+\begin_inset Quotes erd+\end_inset+++\emph default+.+\end_layout++\begin_layout Subsubsection+Elliptic Phrases+\end_layout++\begin_layout Standard+The resource grammar cannot handle all kinds of conjunctions and elliptical+ phrases.+ In the FraCaS corpus there are 35 sentences with more advanced elliptical+ constructions.+ Examples include +\emph on++\begin_inset Quotes eld+\end_inset++Bill did +\family typewriter+[\SpecialChar \ldots{}+]+\family default+ too+\begin_inset Quotes erd+\end_inset+++\emph default+, and +\emph on++\begin_inset Quotes eld+\end_inset++Smith saw Jones sign the contract and +\family typewriter+[\SpecialChar \ldots{}+]+\family default+ his secretary make a copy+\begin_inset Quotes erd+\end_inset+++\emph default+.+ Our solution was to introduce empty phrases, one for each grammatical category.+ E.g., in the first example, the ellipsis is an empty verb phrase, and the+ longer example contains an empty ditransitive verb.+\end_layout++\begin_layout Subsection+Coverage+\end_layout++\begin_layout Standard+Of the 874 unique sentences, 812 could be parsed directly with the Resource+ Grammar and the implemented lexicon, as shown in table +\begin_inset CommandInset ref+LatexCommand ref+reference "tab:coverage"++\end_inset++.+ With the three additional grammatical constructions 14 more sentences were+ parsed.+ The addition of elliptical phrases increased the number of sentences by+ another 34.+ Of the 14 remaining sentences, we could parse 6 more by doing some minor+ reformulations, such as moving a comma or adding a preposition.+ +\end_layout++\begin_layout Standard+\begin_inset Float table+wide false+sideways false+status open++\begin_layout Plain Layout+\align center+\begin_inset Tabular+<lyxtabular version="3" rows="7" columns="3">+<features tabularvalignment="middle">+<column alignment="left" valignment="top" width="0">+<column alignment="center" valignment="top" width="0">+<column alignment="center" valignment="top" width="0">+<row>+<cell alignment="left" valignment="top" topline="true" bottomline="true" leftline="true" usebox="none">+\begin_inset Text++\begin_layout Plain Layout++\end_layout++\end_inset+</cell>+<cell alignment="center" valignment="top" topline="true" bottomline="true" leftline="true" usebox="none">+\begin_inset Text++\begin_layout Plain Layout+Total+\end_layout++\end_inset+</cell>+<cell alignment="center" valignment="top" topline="true" bottomline="true" leftline="true" rightline="true" usebox="none">+\begin_inset Text++\begin_layout Plain Layout+% of sentences+\end_layout++\end_inset+</cell>+</row>+<row>+<cell alignment="left" valignment="top" topline="true" leftline="true" usebox="none">+\begin_inset Text++\begin_layout Plain Layout+Unique sentences+\end_layout++\end_inset+</cell>+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">+\begin_inset Text++\begin_layout Plain Layout+874+\end_layout++\end_inset+</cell>+<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">+\begin_inset Text++\begin_layout Plain Layout+100%+\end_layout++\end_inset+</cell>+</row>+<row>+<cell alignment="left" valignment="top" topline="true" leftline="true" usebox="none">+\begin_inset Text++\begin_layout Plain Layout+Accepted by the RG+\end_layout++\end_inset+</cell>+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">+\begin_inset Text++\begin_layout Plain Layout+812+\end_layout++\end_inset+</cell>+<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">+\begin_inset Text++\begin_layout Plain Layout+92.9%+\end_layout++\end_inset+</cell>+</row>+<row>+<cell alignment="left" valignment="top" topline="true" leftline="true" usebox="none">+\begin_inset Text++\begin_layout Plain Layout+- with grammar extensions+\end_layout++\end_inset+</cell>+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">+\begin_inset Text++\begin_layout Plain Layout+826+\end_layout++\end_inset+</cell>+<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">+\begin_inset Text++\begin_layout Plain Layout+94.5%+\end_layout++\end_inset+</cell>+</row>+<row>+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">+\begin_inset Text++\begin_layout Plain Layout+- with elliptic phrases+\end_layout++\end_inset+</cell>+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">+\begin_inset Text++\begin_layout Plain Layout+860+\end_layout++\end_inset+</cell>+<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">+\begin_inset Text++\begin_layout Plain Layout+98.4%+\end_layout++\end_inset+</cell>+</row>+<row>+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">+\begin_inset Text++\begin_layout Plain Layout+- with slight reformulation of sentence+\end_layout++\end_inset+</cell>+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">+\begin_inset Text++\begin_layout Plain Layout+866+\end_layout++\end_inset+</cell>+<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">+\begin_inset Text++\begin_layout Plain Layout+99.1%+\end_layout++\end_inset+</cell>+</row>+<row>+<cell alignment="center" valignment="top" topline="true" bottomline="true" leftline="true" usebox="none">+\begin_inset Text++\begin_layout Plain Layout+Unable to parse+\end_layout++\end_inset+</cell>+<cell alignment="center" valignment="top" topline="true" bottomline="true" leftline="true" usebox="none">+\begin_inset Text++\begin_layout Plain Layout+8+\end_layout++\end_inset+</cell>+<cell alignment="center" valignment="top" topline="true" bottomline="true" leftline="true" rightline="true" usebox="none">+\begin_inset Text++\begin_layout Plain Layout+0.9%+\end_layout++\end_inset+</cell>+</row>+</lyxtabular>++\end_inset+++\end_layout++\begin_layout Plain Layout+\begin_inset Caption++\begin_layout Plain Layout+The coverage of the English FraCaS grammar +\begin_inset CommandInset label+LatexCommand label+name "tab:coverage"++\end_inset+++\end_layout++\end_inset+++\end_layout++\end_inset+++\end_layout++\begin_layout Standard+\begin_inset Note Note+status collapsed++\begin_layout Plain Layout+Grammatical extensions: RelNP_nocomma, SoDoI, ExtAdvQS, ConjQS.+\end_layout++\begin_layout Plain Layout+Note that this statistics is very strict in the sense that punctuation (in+ particular commas) are included and has to be incorporated by the grammar.+\end_layout++\begin_layout Plain Layout+After having taken measures to solve the problems described in section 2.2,+ the parsing rate was at 84,6%.+ Part of these sentences could be parsed, but returned no representative+ trees, which gave a lower percentage of correctly parsed sentences (83,2%).+ There were various reasons why certain sentences could not be parsed, with+ various degrees of severity.+ The table below shows the results after changing the corpus by giving substitut+ions for problematic sentences on each of these levels.+ The first number is the number of sentences out of 1220, while the percentage+ is on the next line.+\end_layout++\begin_layout Plain Layout+These are explanations for the different levels:+\end_layout++\begin_layout Enumerate+the original corpus with no changes.+\end_layout++\begin_layout Enumerate+substitution for simple spelling or grammar mistakes, such as double punctuation+ or incorrect verb forms.+ The change also involved using only uncontracted negation, for the sake+ of conformity and simplicity.+ There were only a few sentences of these types, so changing them did not+ make a major difference to the results.+\end_layout++\begin_layout Enumerate+rewriting of certain constructions that could not be handled by the parser.+ These were constructions like “the people [..] all voted...”, changed to “all+ the people [...] voted...”.+\end_layout++\begin_layout Enumerate+filling of gaps in gap constructions, e.g.+ adding “spoken to Mary” to “Bill has”, rendering “Bill has spoken to Mary”.+\end_layout++\begin_layout Plain Layout+\begin_inset Tabular+<lyxtabular version="3" rows="5" columns="3">+<features tabularvalignment="middle">+<column alignment="left" valignment="top" width="0">+<column alignment="center" valignment="top" width="0">+<column alignment="center" valignment="top" width="0">+<row>+<cell alignment="left" valignment="top" topline="true" bottomline="true" leftline="true" usebox="none">+\begin_inset Text++\begin_layout Plain Layout+FraCaS version +\end_layout++\end_inset+</cell>+<cell alignment="center" valignment="top" topline="true" bottomline="true" leftline="true" usebox="none">+\begin_inset Text++\begin_layout Plain Layout+Parsed+\end_layout++\end_inset+</cell>+<cell alignment="center" valignment="top" topline="true" bottomline="true" leftline="true" rightline="true" usebox="none">+\begin_inset Text++\begin_layout Plain Layout+Correctly parsed+\end_layout++\end_inset+</cell>+</row>+<row>+<cell alignment="left" valignment="top" topline="true" leftline="true" usebox="none">+\begin_inset Text++\begin_layout Plain Layout+1.+ original+\end_layout++\end_inset+</cell>+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">+\begin_inset Text++\begin_layout Plain Layout+1032 84,6% +\end_layout++\end_inset+</cell>+<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">+\begin_inset Text++\begin_layout Plain Layout+1015 83,2%+\end_layout++\end_inset+</cell>+</row>+<row>+<cell alignment="left" valignment="top" topline="true" leftline="true" usebox="none">+\begin_inset Text++\begin_layout Plain Layout+2.+ mistakes corrected; uncontracted negation +\end_layout++\end_inset+</cell>+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">+\begin_inset Text++\begin_layout Plain Layout+1037 85,0% +\end_layout++\end_inset+</cell>+<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">+\begin_inset Text++\begin_layout Plain Layout+1020 83,6%+\end_layout++\end_inset+</cell>+</row>+<row>+<cell alignment="left" valignment="top" topline="true" leftline="true" usebox="none">+\begin_inset Text++\begin_layout Plain Layout+3.+ reconstructions +\end_layout++\end_inset+</cell>+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">+\begin_inset Text++\begin_layout Plain Layout+1040 85,2% +\end_layout++\end_inset+</cell>+<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">+\begin_inset Text++\begin_layout Plain Layout+1026 84,1%+\end_layout++\end_inset+</cell>+</row>+<row>+<cell alignment="left" valignment="top" topline="true" bottomline="true" leftline="true" usebox="none">+\begin_inset Text++\begin_layout Plain Layout+4.+ gap filling +\end_layout++\end_inset+</cell>+<cell alignment="center" valignment="top" topline="true" bottomline="true" leftline="true" usebox="none">+\begin_inset Text++\begin_layout Plain Layout+1045 85,7% +\end_layout++\end_inset+</cell>+<cell alignment="center" valignment="top" topline="true" bottomline="true" leftline="true" rightline="true" usebox="none">+\begin_inset Text++\begin_layout Plain Layout+1043 85,5%+\end_layout++\end_inset+</cell>+</row>+</lyxtabular>++\end_inset+++\end_layout++\begin_layout Plain Layout+As we can see, the changes made in the corpus did not cause any major increase+ in the percentage of parsed sentences, and only a slightly higher increase+ in the percentage of correctly parsed sentences.+ It would take more radical changes for a more radical increase.+ In the following section, we will look into what those changes would concern.+\end_layout++\end_inset+++\begin_inset Note Note+status collapsed++\begin_layout Plain Layout+The following are a few examples of tree structures resulting from parsing+ FraCaS sentences using this grammar.+\end_layout++\begin_layout Description+Positive+\begin_inset space ~+\end_inset++declarative: +\begin_inset Quotes eld+\end_inset++No delegate finished the report.+\begin_inset Quotes erd+\end_inset+++\end_layout++\begin_deeper+\begin_layout Plain Layout+Sentence (DeclPos TPast ASimul (PredVP (DetCN (DetQuant no_Quant NumSg)+ (UseN delegate_N)) (ComplSlash (SlashV2a finish_V2) (DetCN (DetQuant DefArt+ NumSg) (UseN report_N)))))+\end_layout++\end_deeper+\begin_layout Description+Negative+\begin_inset space ~+\end_inset++declarative: +\begin_inset Quotes eld+\end_inset++Bill did not speak to Mary on Monday.+\begin_inset Quotes erd+\end_inset+++\end_layout++\begin_deeper+\begin_layout Plain Layout+Sentence (DeclNeg TPast ASimul (PredVP (UsePN bill_PN) (AdvVP (ComplSlash+ (SlashV2a speak_to_V2) (UsePN mary_PN)) on_monday_Adv)))+\end_layout++\end_deeper+\begin_layout Description+Question: +\begin_inset Quotes eld+\end_inset++Did a Swede win a Nobel prize?+\begin_inset Quotes erd+\end_inset+++\end_layout++\begin_deeper+\begin_layout Plain Layout+Sentence (Question TPast ASimul (PredVP (DetCN (DetQuant IndefArt NumSg)+ (UseN swede_N)) (ComplSlash (SlashV2a win_V2) (DetCN (DetQuant IndefArt+ NumSg) (UseN nobel_prize_N)))))+\end_layout++\end_deeper+\begin_layout Description+Clause+\begin_inset space ~+\end_inset++conjunction: +\begin_inset Quotes eld+\end_inset++Smith took a machine on Tuesday, and Jones took a machine on Wednesday.+\begin_inset Quotes erd+\end_inset+++\end_layout++\begin_deeper+\begin_layout Plain Layout+Sentence (DeclConj comma_and_Conj TPast ASimul (PredVP (UsePN smith_PN)+ (AdvVP (ComplSlash (SlashV2a take_V2) (DetCN (DetQuant IndefArt NumSg)+ (UseN machine_N))) on_tuesday_Adv)) (PredVP (UsePN jones_PN) (AdvVP (ComplSlash+ (SlashV2a take_V2) (DetCN (DetQuant IndefArt NumSg) (UseN machine_N)))+ on_wednesday_Adv)))+\end_layout++\end_deeper+\begin_layout Description+Sentence-initial+\begin_inset space ~+\end_inset++conjunction: +\begin_inset Quotes eld+\end_inset++But only one woman.+\begin_inset Quotes erd+\end_inset+++\end_layout++\begin_deeper+\begin_layout Plain Layout+SentencePBut (UttNP (PredetNP only_Predet (DetCN (DetQuant IndefArt (NumCard+ (NumNumeral (num (pot2as3 (pot1as2 (pot0as1 pot01))))))) (UseN woman_N))))+\end_layout++\end_deeper+\begin_layout Description+Noun+\begin_inset space ~+\end_inset++phrase+\begin_inset space ~+\end_inset++conjunction: +\begin_inset Quotes eld+\end_inset++John and his colleagues went to a meeting.+\begin_inset Quotes erd+\end_inset+++\end_layout++\begin_deeper+\begin_layout Plain Layout+Sentence (DeclPos TPast ASimul (PredVP (ConjNP2 and_Conj (UsePN john_PN)+ (DetCN (DetQuant (PossPron he_Pron) NumPl) (UseN colleague_N))) (AdvVP+ (UseV go8walk_V) (PrepNP to_Prep (DetCN (DetQuant IndefArt NumSg) (UseN+ meeting_N))))))+\end_layout++\end_deeper+\end_inset+++\begin_inset Note Note+status collapsed++\begin_layout Plain Layout+Three of the sentences that are encoded as synonyms have attachment ambiguities+ that can be encoded in the grammar.+ This means that they have different trees in different problems (169.1.p/170.1.p,+ 175.1.p/176.1.p, 244.1.p/245.1.p).+ But we don't count them in this statistics.+\end_layout++\end_inset+++\end_layout++\begin_layout Subsection+Syntactical Ambiguity+\end_layout++\begin_layout Standard+All trees in the FraCaS treebank are implemented in the GF grammar described+ above.+ This grammar can be used by itself for parsing and analysing similar sentences.+ It is useful to know how ambiguous the grammar is, so we have parsed the+ 866 sentences that are covered by the grammar and counted the number of+ trees for each sentence.+ Table +\begin_inset CommandInset ref+LatexCommand ref+reference "tab:ambiguity"++\end_inset++ shows that the grammar is moderately ambiguous, where almost 70% of the+ sentences have less than 10 different parse trees, and over 90% have less+ than 100 trees.+ The median is for a sentence to have 5 parse trees, and the largest number+ of trees for a sentence is 33,048.+ The ambiguous sentence is: +\emph on++\begin_inset Quotes eld+\end_inset++Since APCOM bought its present office building it has been paying mortgage+ interest on it for more than 10 years.+\begin_inset Quotes erd+\end_inset+++\end_layout++\begin_layout Standard+Note that the number of parse trees are misleading for the 34 sentences+ with elliptic phrases, since ellipsis is linearised as +\emph on++\begin_inset Quotes eld+\end_inset+++\family typewriter+[\SpecialChar \ldots{}+]+\family default++\begin_inset Quotes erd+\end_inset+++\emph default+ in the FraCaS grammar.+ If we had made the elliptic phrases invisible, the number of parse trees+ would increase dramatically.+\end_layout++\begin_layout Standard+\begin_inset Float table+wide false+sideways false+status open++\begin_layout Plain Layout+\align center+\begin_inset Tabular+<lyxtabular version="3" rows="5" columns="3">+<features tabularvalignment="middle">+<column alignment="center" valignment="top" width="0">+<column alignment="center" valignment="top" width="0">+<column alignment="center" valignment="top" width="0">+<row>+<cell alignment="center" valignment="top" topline="true" bottomline="true" leftline="true" usebox="none">+\begin_inset Text++\begin_layout Plain Layout+No.+ parse trees+\end_layout++\end_inset+</cell>+<cell multicolumn="1" alignment="center" valignment="top" topline="true" bottomline="true" leftline="true" rightline="true" usebox="none">+\begin_inset Text++\begin_layout Plain Layout+No.+ sentences+\end_layout++\end_inset+</cell>+<cell multicolumn="2" alignment="center" valignment="top" topline="true" bottomline="true" leftline="true" usebox="none">+\begin_inset Text++\begin_layout Plain Layout++\end_layout++\end_inset+</cell>+</row>+<row>+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">+\begin_inset Text++\begin_layout Plain Layout+1 -- 9+\end_layout++\end_inset+</cell>+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">+\begin_inset Text++\begin_layout Plain Layout+598+\end_layout++\end_inset+</cell>+<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">+\begin_inset Text++\begin_layout Plain Layout+69.1%+\end_layout++\end_inset+</cell>+</row>+<row>+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">+\begin_inset Text++\begin_layout Plain Layout+10 -- 99+\end_layout++\end_inset+</cell>+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">+\begin_inset Text++\begin_layout Plain Layout+203+\end_layout++\end_inset+</cell>+<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">+\begin_inset Text++\begin_layout Plain Layout+23.4%+\end_layout++\end_inset+</cell>+</row>+<row>+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">+\begin_inset Text++\begin_layout Plain Layout+100 -- 999+\end_layout++\end_inset+</cell>+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">+\begin_inset Text++\begin_layout Plain Layout+49+\end_layout++\end_inset+</cell>+<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">+\begin_inset Text++\begin_layout Plain Layout+5.7%+\end_layout++\end_inset+</cell>+</row>+<row>+<cell alignment="center" valignment="top" topline="true" bottomline="true" leftline="true" usebox="none">+\begin_inset Text++\begin_layout Plain Layout+\begin_inset Formula $\geq$+\end_inset++ 1000+\end_layout++\end_inset+</cell>+<cell alignment="center" valignment="top" topline="true" bottomline="true" leftline="true" usebox="none">+\begin_inset Text++\begin_layout Plain Layout+16+\end_layout++\end_inset+</cell>+<cell alignment="center" valignment="top" topline="true" bottomline="true" leftline="true" rightline="true" usebox="none">+\begin_inset Text++\begin_layout Plain Layout+1.8%+\end_layout++\end_inset+</cell>+</row>+</lyxtabular>++\end_inset+++\end_layout++\begin_layout Plain Layout+\begin_inset Caption++\begin_layout Plain Layout+Ambiguity of the FraCaS treebank +\begin_inset CommandInset label+LatexCommand label+name "tab:ambiguity"++\end_inset+++\end_layout++\end_inset+++\end_layout++\end_inset+++\end_layout++\begin_layout Standard+\begin_inset Note Note+status collapsed++\begin_layout Subsection+Problems remaining+\end_layout++\begin_layout Plain Layout+Some problems could not be solved, due to their complexity and/or the time+ limitations of the project.+ Remaining problems are listed below, categorised according to their nature.+ Examples from the FraCaS corpus are given with the relevant parts italicized.+ For each type of problem, the number of affected sentences is given in+ brackets (out of the 177 sentences that were not correctly parsed).+ A few sentences had more than one problem, but was only counted in one+ category.+\end_layout++\begin_layout Paragraph+Adverbials (46)+\end_layout++\begin_layout Plain Layout+Certain kinds and uses of adverbials were problematic.+\end_layout++\begin_layout Itemize+Verb phrase adverbials (1)+\end_layout++\begin_deeper+\begin_layout Plain Layout+“Every executive who had a laptop computer brought it to take notes at the+ meeting.”+\end_layout++\end_deeper+\begin_layout Itemize+Noun phrase adverbials (3)+\end_layout++\begin_deeper+\begin_layout Plain Layout+“It lasted 2 days.”+\end_layout++\begin_layout Plain Layout+“Smith had been travelling the day before she arrived in Katmandu.”+\end_layout++\end_deeper+\begin_layout Itemize+Sentence-initial adverbials (34)+\end_layout++\begin_deeper+\begin_layout Plain Layout+“Since 1992 ITEL has been in Birmingham.”+\end_layout++\begin_layout Plain Layout+“Yesterday APCOM signed the contract.”+\end_layout++\begin_layout Plain Layout+“Then she took a taxi to the station.”+\end_layout++\begin_layout Plain Layout+“Two years from now Smith will have been to Florence at least four times.”+\end_layout++\end_deeper+\begin_layout Itemize+To this group also belong sentence-initial subordinate clauses.+ (Subordinate clauses following the main clause are treated as adverbials,+ so it is only natural to treat subordinate clauses preceding the main clause+ as adverbials too.)+\end_layout++\begin_deeper+\begin_layout Plain Layout+“If Smith and Anderson did not sign the contract, Jones signed the contract.”+\end_layout++\begin_layout Plain Layout+“When Smith arrived in Katmandu she had been travelling for three days.”+\end_layout++\begin_layout Plain Layout+“Before APCOM bought its present office building, it had been paying mortgage+ interest [...].”+\end_layout++\end_deeper+\begin_layout Itemize+Adverbials with copula (8)+\end_layout++\begin_deeper+\begin_layout Plain Layout+“It is now 1996.”+\end_layout++\begin_layout Plain Layout+“Today is Saturday, July 14th.”+\end_layout++\end_deeper+\begin_layout Paragraph+Verb phrase conjunctions (5)+\end_layout++\begin_layout Plain Layout+The grammar could handle conjunction on the noun phrase and clause level,+ but not verb phrase conjunctions.+\end_layout++\begin_layout Plain Layout+“ICM is one of the companies and owns 150 computers.”+\end_layout++\begin_layout Plain Layout+“She took a taxi to the station and caught the first train to Luxembourg.”+\end_layout++\begin_layout Plain Layout+“Jones graduated in March and has been employed ever since.”+\end_layout++\begin_layout Paragraph+Auxiliary verbs (17)+\end_layout++\begin_layout Plain Layout+Auxiliary verbs used independently could not be parsed.+\end_layout++\begin_layout Plain Layout+“John wanted to buy a car, and he did.”+\end_layout++\begin_layout Plain Layout+“Bill spoke to everyone that John did.”+\end_layout++\begin_layout Plain Layout+“She finished before he did.”+\end_layout++\begin_layout Paragraph+Complex comparisons (23)+\end_layout++\begin_layout Plain Layout+Simple comparatives worked well, but not comparatives embedded in a noun+ phrase or other complex comparisons.+\end_layout++\begin_layout Plain Layout+“John is a fatter politician than Bill.”+\end_layout++\begin_layout Plain Layout+“ITEL won more orders than APCOM lost.”+\end_layout++\begin_layout Plain Layout+“ITEL sold 3000 more computers than APCOM.”+\end_layout++\begin_layout Plain Layout+“APCOM has a more important customer than ITEL.”+\end_layout++\begin_layout Plain Layout+“Mary's story lasted as long as Jones's updating the program.”+\end_layout++\begin_layout Paragraph+Relative clauses (11)+\end_layout++\begin_layout Plain Layout+Some relative clauses could not be parsed or parsed correctly.+\end_layout++\begin_layout Itemize+-- Relative clauses using present participle (1)+\end_layout++\begin_deeper+\begin_layout Plain Layout+“No one gambling seriously stops until he is broke.”+\end_layout++\end_deeper+\begin_layout Itemize+-- Relative clauses modifying a pronoun (8)+\end_layout++\begin_deeper+\begin_layout Plain Layout+“No one who starts gambling seriously stops until he is broke.”+\end_layout++\begin_layout Plain Layout+“Everyone who starts gambling seriously continues until he is broke.”+\end_layout++\begin_layout Plain Layout+“Nobody who is asleep ever knows that he is asleep.”+\end_layout++\end_deeper+\begin_layout Itemize+-- Relative clauses with object gap (2)+\end_layout++\begin_deeper+\begin_layout Plain Layout+“There is a representative that Smith wrote to every week.”+\end_layout++\end_deeper+\begin_layout Paragraph+Complement infinitive clauses (17)+\end_layout++\begin_layout Plain Layout+The verb “see” as in “see someone do something”, defined as V2V, does not+ work.+ It requires an infinitive marker, which should not be present in this case.+\end_layout++\begin_layout Plain Layout+“Smith saw Jones sign the contract.”+\end_layout++\begin_layout Plain Layout+“Smith saw Jones' heart beat.”+\end_layout++\begin_layout Paragraph+Other (58)+\end_layout++\begin_layout Plain Layout+Apart from the problems in the categories above, there are other problems+ that are harder to classify.+ Some of these could have been solved, had time permitted, while others+ are of a more intricate type.+ Each problem is exemplified by one sentence from the FraCaS corpus.+\end_layout++\begin_layout Plain Layout+“Mary represents her own company.” (15)+\end_layout++\begin_layout Plain Layout+“APCOM sold exactly 2500 computers.” (1)+\end_layout++\begin_layout Plain Layout+“Smith spent two hours writing the report.” (12)+\end_layout++\begin_layout Plain Layout+“No representative took less than half a day to read the report.” (1)+\end_layout++\begin_layout Plain Layout+“The conference was over on July 8th, 1994.” (2)+\end_layout++\begin_layout Plain Layout+“Bill owns a blue one.” (6)+\end_layout++\begin_layout Plain Layout+“That is, there was one lawyer who signed all the reports.” (1)+\end_layout++\begin_layout Plain Layout+“Bill is going to speak to Mary.” (1)+\end_layout++\begin_layout Plain Layout+“It is the case that Jones is not and will never be allowed to write his+ memoirs.” (4)+\end_layout++\begin_layout Plain Layout+“It took the representatives more than a week to read the report.” (2)+\end_layout++\begin_layout Plain Layout+“Smith represents his company and so does Jones.” (13)+\end_layout++\begin_layout Subsection+Tree selection+\end_layout++\begin_layout Plain Layout+When having parsed the whole corpus, a selection had to be made for each+ sentence to be represented by the most adequate tree structure.+ Most of the time there was a clear choice, while at other times, two trees+ were kept since it was not clear which one was the most suitable representation+ of the sentence.+ This was especially common for sentences using a copula with an indefinite+ noun phrase as complement.+ In these cases, both the tree with the indefinite article represented and+ the one without were kept.+\end_layout++\end_inset+++\end_layout++\begin_layout Section+The Swedish Corpus+\end_layout++\begin_layout Standard+\begin_inset Note Note+status collapsed++\begin_layout Subsection+Modules+\end_layout++\begin_layout Plain Layout+In order to build the Swedish version of the FraCaS corpus, two modules+ were written, one lexicon module and one grammar module.+\end_layout++\begin_layout Subsubsection+Lexicon module+\end_layout++\begin_layout Plain Layout+FraCaSLexSwe is the Swedish concrete lexicon.+ It was built in a very similar way to the English counterpart, using the+ functions mkN, mkA, mkV etc, mainly from the Paradigms module.+\end_layout++\begin_layout Subsubsection+Grammar module+\end_layout++\begin_layout Plain Layout+FraCaSSwe is the Swedish concrete grammar.+ Just as for the English counterpart, parts of the Grammar module (namely+ Noun, Verb, Adjective, Adverb, Numeral and Tense) were imported, while+ other parts were opened and necessary functions used in FraCaSSwe.+\end_layout++\end_inset+++\begin_inset Note Note+status collapsed++\begin_layout Plain Layout+Some of the FraCaS sentences depend on lexical ambiguity that cannot be+ expressed adequately in Swedish.+\end_layout++\end_inset+++\end_layout++\begin_layout Standard+A long-term goal of this project is that the treebank should be truly multilingu+al for all the languages in the GF resource grammar.+ Of course this is not possible in the general case, since some of the sentences+ cannot even be translated without changing their semantic content.+ But at least we can try to create a multlingual treebank of as many sentences+ as possible.+\end_layout++\begin_layout Standard+As a first step we have created Swedish translations of the sentences, by+ writing a new Swedish lexicon.+ Then we evaluated the translations and iteratively made changes to the+ trees to make the translations better.+ Note that since we use exactly the same syntax trees for the Swedish and+ English sentences, we had to make sure that the English translation was+ not changed when we modified the trees.+ +\end_layout++\begin_layout Standard+This means the corpus was not created by manually translating the English+ sentences, but instead we translated the lexicon and let the Swedish Resource+ Grammar take care of the syntactical translation.+ Currently, out of the 866 sentences in the treebank, 748 are translated+ into grammatically correct and comprehensible Swedish sentences.+\end_layout++\begin_layout Subsection+The Swedish Lexicon+\end_layout++\begin_layout Standard+\begin_inset Note Note+status collapsed++\begin_layout Plain Layout+When creating the Swedish lexicon+\end_layout++\begin_layout Plain Layout+As was the case for the parsing part of the project, certain problems were+ also discovered in the process of generating into Swedish.+ Often these problems had to be solved by going back to the English lexicon+ and making changes so that more suitable, often more general, trees would+ be constructed.+ This is where the two project parts were interwoven.+\end_layout++\begin_layout Plain Layout+Some of the problems could be solved and some remain.+ The solutions are presented in this section, while remaining problems are+ listed in the next section on statistics (3.3).+\end_layout++\begin_layout Plain Layout+The problems encountered have been divided into categories as seen below.+ The explanations follow P (Problem) and S (Solution).+ FraCaSLex here refers to both the abstract lexicon and the two concrete+ lexicons (FraCaSLexEng and FraCaSLexSwe).+ In the same way, FraCaS refers to both the abstract grammar and the two+ concrete grammars (FraCaSEng and FraCaSSwe).+\end_layout++\end_inset+++\end_layout++\begin_layout Standard+When we created the Swedish lexicon, we often had to go back to the English+ lexicon and make changes so that more suitable trees could be constructed.+ Sometimes we merged several lexical entries into one multi-word entry,+ and sometimes we split one entry into different meanings.+ Most of the changes consisted of the following types:+\end_layout++\begin_layout Description+Compounds Many compound noun phrases, such as +\emph on+“company car”+\emph default+, +\emph on+“mortgage interest”+\emph default+ and +\emph on++\begin_inset Quotes eld+\end_inset++APCOM manager+\begin_inset Quotes erd+\end_inset+++\emph default+, are single words in Swedish (+\emph on++\begin_inset Quotes eld+\end_inset++tjänstebil+\begin_inset Quotes erd+\end_inset+++\emph default+, +\emph on++\begin_inset Quotes eld+\end_inset++hypoteksränta+\begin_inset Quotes erd+\end_inset+++\emph default+ and +\emph on++\begin_inset Quotes eld+\end_inset++APCOM-direktör+\begin_inset Quotes erd+\end_inset+++\emph default+, respectively).+ We solved this by defining them as multi-word nouns, as described in section+ +\begin_inset CommandInset ref+LatexCommand ref+reference "sub:Multi-word-Lexical-Items"++\end_inset++.+\end_layout++\begin_layout Description+Lexical+\begin_inset space ~+\end_inset++ambiguity Several words in English are translated into different Swedish+ words, depending on the context.+ Such words were split into different lexical entries.+ The adjective +\emph on+“poor”+\emph default+, for example, was handled by creating two different functions, one with+ the meaning +\emph on++\begin_inset Quotes eld+\end_inset++not good+\begin_inset Quotes erd+\end_inset+++\emph default+ (Swedish +\emph on++\begin_inset Quotes eld+\end_inset++dålig+\begin_inset Quotes erd+\end_inset+++\emph default+), and one with the meaning +\emph on++\begin_inset Quotes eld+\end_inset++not rich+\begin_inset Quotes erd+\end_inset+++\emph default+ (Swedish +\emph on++\begin_inset Quotes eld+\end_inset++fattig+\begin_inset Quotes erd+\end_inset+++\emph default+).+\end_layout++\begin_layout Description+Prepositions Prepositions are often translated differently in different+ contexts.+ E.g., +\emph on++\begin_inset Quotes eld+\end_inset++inhabitant of+\begin_inset Quotes erd+\end_inset+++\emph default+ is translated to +\emph on++\begin_inset Quotes eld+\end_inset++invånare i+\begin_inset Quotes erd+\end_inset+++\emph default+ if the argument is a country or a town, but to +\emph on++\begin_inset Quotes eld+\end_inset++invånare på+\begin_inset Quotes erd+\end_inset+++\emph default+ if the argument is an island.+ This was solved, either by creating different lexical entries, or by making+ the preposition a part of the main verb.+\end_layout++\begin_layout Description+Adverbials Most of the multi-word adverbials are time and date expressions.+ The reason for this is that many time and date expressions are translated+ very differently between different languages.+ E.g., the English preposition +\emph on++\begin_inset Quotes eld+\end_inset++in+\begin_inset Quotes erd+\end_inset+++\emph default+ is translated differently for different time and date expressions: +\emph on++\begin_inset Quotes eld+\end_inset++in March+\begin_inset Quotes erd+\end_inset+++\emph default+ becomes +\emph on++\begin_inset Quotes eld+\end_inset++i mars+\begin_inset Quotes erd+\end_inset+++\emph default+ and +\emph on++\begin_inset Quotes eld+\end_inset++in a month+\begin_inset Quotes erd+\end_inset+++\emph default+ translates to +\emph on++\begin_inset Quotes eld+\end_inset++om en månad+\begin_inset Quotes erd+\end_inset+++\emph default+, whereas +\emph on+“in 1994”+\emph default+ is best formulated as the bare word +\emph on++\begin_inset Quotes eld+\end_inset++1994+\begin_inset Quotes erd+\end_inset+++\emph default+ in Swedish.+ As already explained, we defined all time and date expressions as multi-word+ adverbials.+\end_layout++\begin_layout Subsection+Coverage+\end_layout++\begin_layout Standard+\begin_inset Float table+wide false+sideways false+status open++\begin_layout Plain Layout+\align center+\begin_inset Tabular+<lyxtabular version="3" rows="9" columns="3">+<features tabularvalignment="middle">+<column alignment="left" valignment="top" width="0">+<column alignment="center" valignment="top" width="0">+<column alignment="center" valignment="top" width="0">+<row>+<cell alignment="left" valignment="top" topline="true" bottomline="true" leftline="true" usebox="none">+\begin_inset Text++\begin_layout Plain Layout++\end_layout++\end_inset+</cell>+<cell alignment="center" valignment="top" topline="true" bottomline="true" leftline="true" usebox="none">+\begin_inset Text++\begin_layout Plain Layout+Total+\end_layout++\end_inset+</cell>+<cell alignment="center" valignment="top" topline="true" bottomline="true" leftline="true" rightline="true" usebox="none">+\begin_inset Text++\begin_layout Plain Layout+% of sentences+\end_layout++\end_inset+</cell>+</row>+<row>+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">+\begin_inset Text++\begin_layout Plain Layout+Sentences in treebank+\end_layout++\end_inset+</cell>+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">+\begin_inset Text++\begin_layout Plain Layout+866+\end_layout++\end_inset+</cell>+<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">+\begin_inset Text++\begin_layout Plain Layout+100%+\end_layout++\end_inset+</cell>+</row>+<row>+<cell alignment="left" valignment="top" topline="true" leftline="true" usebox="none">+\begin_inset Text++\begin_layout Plain Layout+Correct Swedish translation+\end_layout++\end_inset+</cell>+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">+\begin_inset Text++\begin_layout Plain Layout+748+\end_layout++\end_inset+</cell>+<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">+\begin_inset Text++\begin_layout Plain Layout+86.4%+\end_layout++\end_inset+</cell>+</row>+<row>+<cell alignment="left" valignment="top" topline="true" leftline="true" usebox="none">+\begin_inset Text++\begin_layout Plain Layout+Problematic sentences+\end_layout++\end_inset+</cell>+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">+\begin_inset Text++\begin_layout Plain Layout+118+\end_layout++\end_inset+</cell>+<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">+\begin_inset Text++\begin_layout Plain Layout+13.6%+\end_layout++\end_inset+</cell>+</row>+<row>+<cell alignment="left" valignment="top" topline="true" leftline="true" usebox="none">+\begin_inset Text++\begin_layout Plain Layout+\begin_inset space ~+\end_inset+++\begin_inset space ~+\end_inset++-- idioms+\end_layout++\end_inset+</cell>+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">+\begin_inset Text++\begin_layout Plain Layout+31+\end_layout++\end_inset+</cell>+<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">+\begin_inset Text++\begin_layout Plain Layout+3.6%+\end_layout++\end_inset+</cell>+</row>+<row>+<cell alignment="left" valignment="top" topline="true" leftline="true" usebox="none">+\begin_inset Text++\begin_layout Plain Layout+\begin_inset space ~+\end_inset+++\begin_inset space ~+\end_inset++-- agreement+\end_layout++\end_inset+</cell>+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">+\begin_inset Text++\begin_layout Plain Layout+24+\end_layout++\end_inset+</cell>+<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">+\begin_inset Text++\begin_layout Plain Layout+2.8%+\end_layout++\end_inset+</cell>+</row>+<row>+<cell alignment="left" valignment="top" topline="true" leftline="true" usebox="none">+\begin_inset Text++\begin_layout Plain Layout+\begin_inset space ~+\end_inset+++\begin_inset space ~+\end_inset++-- future tense+\end_layout++\end_inset+</cell>+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">+\begin_inset Text++\begin_layout Plain Layout+12+\end_layout++\end_inset+</cell>+<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">+\begin_inset Text++\begin_layout Plain Layout+1.4%+\end_layout++\end_inset+</cell>+</row>+<row>+<cell alignment="left" valignment="top" topline="true" leftline="true" usebox="none">+\begin_inset Text++\begin_layout Plain Layout+\begin_inset space ~+\end_inset+++\begin_inset space ~+\end_inset++-- elliptical+\end_layout++\end_inset+</cell>+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">+\begin_inset Text++\begin_layout Plain Layout+19+\end_layout++\end_inset+</cell>+<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">+\begin_inset Text++\begin_layout Plain Layout+2.2%+\end_layout++\end_inset+</cell>+</row>+<row>+<cell alignment="left" valignment="top" topline="true" bottomline="true" leftline="true" usebox="none">+\begin_inset Text++\begin_layout Plain Layout+\begin_inset space ~+\end_inset+++\begin_inset space ~+\end_inset++-- uncomprehensible+\end_layout++\end_inset+</cell>+<cell alignment="center" valignment="top" topline="true" bottomline="true" leftline="true" usebox="none">+\begin_inset Text++\begin_layout Plain Layout+32+\end_layout++\end_inset+</cell>+<cell alignment="center" valignment="top" topline="true" bottomline="true" leftline="true" rightline="true" usebox="none">+\begin_inset Text++\begin_layout Plain Layout+3.7%+\end_layout++\end_inset+</cell>+</row>+</lyxtabular>++\end_inset+++\end_layout++\begin_layout Plain Layout+\begin_inset Caption++\begin_layout Plain Layout+The coverage of the Swedish FraCaS grammar +\begin_inset CommandInset label+LatexCommand label+name "tab:swedish-coverage"++\end_inset+++\end_layout++\end_inset+++\end_layout++\end_inset+++\end_layout++\begin_layout Standard+Table +\begin_inset CommandInset ref+LatexCommand ref+reference "tab:swedish-coverage"++\end_inset++ gives an overview of the coverage of the Swedish lexicon and grammar.+ Of the 866 unique sentences in the treebank, we consider 748 to have good+ Swedish translations.+ The remaining 118 sentences had some problems which we divided into five+ different classes -- idioms, agreement, future tense, elliptical phrases,+ and more difficult errors.+ Table +\begin_inset CommandInset ref+LatexCommand ref+reference "tab:swedish-problems"++\end_inset++ gives examples of some of the encountered problems, and in the next section+ are short descriptions.+\end_layout++\begin_layout Standard+\begin_inset Float table+wide false+sideways false+status open++\begin_layout Plain Layout+\align center+\begin_inset Tabular+<lyxtabular version="3" rows="19" columns="4">+<features tabularvalignment="middle">+<column alignment="center" valignment="middle" width="25col%">+<column alignment="center" valignment="middle" width="25col%">+<column alignment="center" valignment="middle" width="25col%">+<column alignment="center" valignment="middle" width="25col%">+<row>+<cell alignment="center" valignment="middle" topline="true" bottomline="true" leftline="true" usebox="none">+\begin_inset Text++\begin_layout Plain Layout+English original+\end_layout++\end_inset+</cell>+<cell alignment="center" valignment="middle" topline="true" bottomline="true" leftline="true" usebox="none">+\begin_inset Text++\begin_layout Plain Layout+Direct translation+\end_layout++\end_inset+</cell>+<cell alignment="center" valignment="middle" topline="true" bottomline="true" leftline="true" usebox="none">+\begin_inset Text++\begin_layout Plain Layout+Better idiom+\end_layout++\end_inset+</cell>+<cell alignment="center" valignment="middle" topline="true" bottomline="true" leftline="true" rightline="true" usebox="none">+\begin_inset Text++\begin_layout Plain Layout+Literally in English+\end_layout++\end_inset+</cell>+</row>+<row>+<cell multicolumn="1" alignment="center" valignment="top" topline="true" leftline="true" usebox="none">+\begin_inset Text++\begin_layout Plain Layout++\series bold+idioms+\end_layout++\end_inset+</cell>+<cell multicolumn="2" alignment="center" valignment="top" topline="true" leftline="true" usebox="none">+\begin_inset Text++\begin_layout Plain Layout++\end_layout++\end_inset+</cell>+<cell multicolumn="2" alignment="center" valignment="top" topline="true" leftline="true" usebox="none">+\begin_inset Text++\begin_layout Plain Layout++\end_layout++\end_inset+</cell>+<cell multicolumn="2" alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">+\begin_inset Text++\begin_layout Plain Layout++\end_layout++\end_inset+</cell>+</row>+<row>+<cell alignment="center" valignment="middle" topline="true" leftline="true" usebox="none">+\begin_inset Text++\begin_layout Plain Layout++\emph on+X is likely to Y+\end_layout++\end_inset+</cell>+<cell alignment="center" valignment="middle" topline="true" leftline="true" usebox="none">+\begin_inset Text++\begin_layout Plain Layout++\emph on+X +\series bold+är trolig+\series default+ att Y+\end_layout++\end_inset+</cell>+<cell alignment="center" valignment="middle" topline="true" leftline="true" usebox="none">+\begin_inset Text++\begin_layout Plain Layout++\series bold+\emph on+det är troligt+\series default+ att X Y+\end_layout++\end_inset+</cell>+<cell alignment="center" valignment="middle" topline="true" leftline="true" rightline="true" usebox="none">+\begin_inset Text++\begin_layout Plain Layout++\emph on+it is likely that X Y+\end_layout++\end_inset+</cell>+</row>+<row>+<cell alignment="center" valignment="middle" topline="true" leftline="true" usebox="none">+\begin_inset Text++\begin_layout Plain Layout++\emph on+members of the committee+\end_layout++\end_inset+</cell>+<cell alignment="center" valignment="middle" topline="true" leftline="true" usebox="none">+\begin_inset Text++\begin_layout Plain Layout++\series bold+\emph on+medlemmar av+\series default+ kommittén+\end_layout++\end_inset+</cell>+<cell alignment="center" valignment="middle" topline="true" leftline="true" usebox="none">+\begin_inset Text++\begin_layout Plain Layout++\emph on+kommitté+\series bold+medlemmar+\end_layout++\end_inset+</cell>+<cell alignment="center" valignment="middle" topline="true" leftline="true" rightline="true" usebox="none">+\begin_inset Text++\begin_layout Plain Layout++\emph on+committee-members+\end_layout++\end_inset+</cell>+</row>+<row>+<cell alignment="center" valignment="middle" topline="true" leftline="true" usebox="none">+\begin_inset Text++\begin_layout Plain Layout++\emph on+X is asleep+\end_layout++\end_inset+</cell>+<cell alignment="center" valignment="middle" topline="true" leftline="true" usebox="none">+\begin_inset Text++\begin_layout Plain Layout++\emph on+X +\series bold+är sovande+\end_layout++\end_inset+</cell>+<cell alignment="center" valignment="middle" topline="true" leftline="true" usebox="none">+\begin_inset Text++\begin_layout Plain Layout++\emph on+X +\series bold+sover+\end_layout++\end_inset+</cell>+<cell alignment="center" valignment="middle" topline="true" leftline="true" rightline="true" usebox="none">+\begin_inset Text++\begin_layout Plain Layout++\emph on+X sleeps+\end_layout++\end_inset+</cell>+</row>+<row>+<cell alignment="center" valignment="middle" topline="true" leftline="true" usebox="none">+\begin_inset Text++\begin_layout Plain Layout++\emph on+the previous one+\end_layout++\end_inset+</cell>+<cell alignment="center" valignment="middle" topline="true" leftline="true" usebox="none">+\begin_inset Text++\begin_layout Plain Layout++\emph on+den förra +\series bold+en+\end_layout++\end_inset+</cell>+<cell alignment="center" valignment="middle" topline="true" leftline="true" usebox="none">+\begin_inset Text++\begin_layout Plain Layout++\emph on+den förra+\end_layout++\end_inset+</cell>+<cell alignment="center" valignment="middle" topline="true" leftline="true" rightline="true" usebox="none">+\begin_inset Text++\begin_layout Plain Layout++\emph on+the previous+\end_layout++\end_inset+</cell>+</row>+<row>+<cell multicolumn="1" alignment="center" valignment="top" topline="true" leftline="true" usebox="none">+\begin_inset Text++\begin_layout Plain Layout++\series bold+agreement+\end_layout++\end_inset+</cell>+<cell multicolumn="2" alignment="center" valignment="top" topline="true" leftline="true" usebox="none">+\begin_inset Text++\begin_layout Plain Layout++\end_layout++\end_inset+</cell>+<cell multicolumn="2" alignment="center" valignment="top" topline="true" leftline="true" usebox="none">+\begin_inset Text++\begin_layout Plain Layout++\end_layout++\end_inset+</cell>+<cell multicolumn="2" alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">+\begin_inset Text++\begin_layout Plain Layout++\end_layout++\end_inset+</cell>+</row>+<row>+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">+\begin_inset Text++\begin_layout Plain Layout++\emph on+X has the right to Y+\end_layout++\end_inset+</cell>+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">+\begin_inset Text++\begin_layout Plain Layout++\emph on+X har +\series bold+rätten+\series default+ att Y+\end_layout++\end_inset+</cell>+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">+\begin_inset Text++\begin_layout Plain Layout++\emph on+X har +\series bold+rätt+\series default+ att Y+\end_layout++\end_inset+</cell>+<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">+\begin_inset Text++\begin_layout Plain Layout++\emph on+X has right to Y+\end_layout++\end_inset+</cell>+</row>+<row>+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">+\begin_inset Text++\begin_layout Plain Layout++\emph on+traffic increased+\end_layout++\end_inset+</cell>+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">+\begin_inset Text++\begin_layout Plain Layout++\series bold+\emph on+trafik+\series default+ ökade+\end_layout++\end_inset+</cell>+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">+\begin_inset Text++\begin_layout Plain Layout++\series bold+\emph on+trafiken+\series default+ ökade+\end_layout++\end_inset+</cell>+<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">+\begin_inset Text++\begin_layout Plain Layout++\emph on+the traffic increased+\end_layout++\end_inset+</cell>+</row>+<row>+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">+\begin_inset Text++\begin_layout Plain Layout++\emph on+one of the tenors+\end_layout++\end_inset+</cell>+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">+\begin_inset Text++\begin_layout Plain Layout++\series bold+\emph on+ett +\series default+av tenorerna+\end_layout++\end_inset+</cell>+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">+\begin_inset Text++\begin_layout Plain Layout++\series bold+\emph on+en+\series default+ av tenorerna+\end_layout++\end_inset+</cell>+<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">+\begin_inset Text++\begin_layout Plain Layout++\emph on+---+\end_layout++\end_inset+</cell>+</row>+<row>+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">+\begin_inset Text++\begin_layout Plain Layout++\emph on+everyone continues until he is broke+\end_layout++\end_inset+</cell>+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">+\begin_inset Text++\begin_layout Plain Layout++\emph on+alla fortsätter tills +\series bold+han +\series default+är pank+\end_layout++\end_inset+</cell>+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">+\begin_inset Text++\begin_layout Plain Layout++\emph on+alla fortsätter tills +\series bold+de +\series default+är panka+\end_layout++\end_inset+</cell>+<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">+\begin_inset Text++\begin_layout Plain Layout++\emph on+all continue until they are broke+\end_layout++\end_inset+</cell>+</row>+<row>+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">+\begin_inset Text++\begin_layout Plain Layout++\emph on+clients at the demonstration+\end_layout++\end_inset+</cell>+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">+\begin_inset Text++\begin_layout Plain Layout++\series bold+\emph on+klienter +\series default+på presentationen+\end_layout++\end_inset+</cell>+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">+\begin_inset Text++\begin_layout Plain Layout++\series bold+\emph on+klienterna+\series default+ på presentationen+\end_layout++\end_inset+</cell>+<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">+\begin_inset Text++\begin_layout Plain Layout++\emph on+the clients at the demonstration+\end_layout++\end_inset+</cell>+</row>+<row>+<cell multicolumn="1" alignment="center" valignment="top" topline="true" leftline="true" usebox="none">+\begin_inset Text++\begin_layout Plain Layout++\series bold+future tense+\end_layout++\end_inset+</cell>+<cell multicolumn="2" alignment="center" valignment="top" topline="true" leftline="true" usebox="none">+\begin_inset Text++\begin_layout Plain Layout++\end_layout++\end_inset+</cell>+<cell multicolumn="2" alignment="center" valignment="top" topline="true" leftline="true" usebox="none">+\begin_inset Text++\begin_layout Plain Layout++\end_layout++\end_inset+</cell>+<cell multicolumn="2" alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">+\begin_inset Text++\begin_layout Plain Layout++\end_layout++\end_inset+</cell>+</row>+<row>+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">+\begin_inset Text++\begin_layout Plain Layout++\emph on+X will make a poor stock market trader+\end_layout++\end_inset+</cell>+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">+\begin_inset Text++\begin_layout Plain Layout++\emph on+X +\series bold+ska+\series default+ bli en dålig aktiehandlare+\end_layout++\end_inset+</cell>+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">+\begin_inset Text++\begin_layout Plain Layout++\emph on+X +\series bold+kommer att+\series default+ bli en dålig aktiehandlare+\end_layout++\end_inset+</cell>+<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">+\begin_inset Text++\begin_layout Plain Layout++\emph on+---+\end_layout++\end_inset+</cell>+</row>+<row>+<cell multicolumn="1" alignment="center" valignment="top" topline="true" leftline="true" usebox="none">+\begin_inset Text++\begin_layout Plain Layout++\series bold+elliptical phrases+\end_layout++\end_inset+</cell>+<cell multicolumn="2" alignment="center" valignment="top" topline="true" leftline="true" usebox="none">+\begin_inset Text++\begin_layout Plain Layout++\end_layout++\end_inset+</cell>+<cell multicolumn="2" alignment="center" valignment="top" topline="true" leftline="true" usebox="none">+\begin_inset Text++\begin_layout Plain Layout++\end_layout++\end_inset+</cell>+<cell multicolumn="2" alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">+\begin_inset Text++\begin_layout Plain Layout++\end_layout++\end_inset+</cell>+</row>+<row>+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">+\begin_inset Text++\begin_layout Plain Layout++\emph on+X wanted to buy a car, and he did+\end_layout++\end_inset+</cell>+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">+\begin_inset Text++\begin_layout Plain Layout++\emph on+X ville köpa en bil, och han gjorde+\end_layout++\end_inset+</cell>+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">+\begin_inset Text++\begin_layout Plain Layout++\emph on+X ville köpa en bil, och han gjorde +\series bold+det+\end_layout++\end_inset+</cell>+<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">+\begin_inset Text++\begin_layout Plain Layout++\emph on+X wanted to buy a car, and he did it+\end_layout++\end_inset+</cell>+</row>+<row>+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">+\begin_inset Text++\begin_layout Plain Layout++\emph on+X did too+\end_layout++\end_inset+</cell>+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">+\begin_inset Text++\begin_layout Plain Layout++\emph on+X gjorde också+\end_layout++\end_inset+</cell>+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">+\begin_inset Text++\begin_layout Plain Layout++\emph on+X gjorde +\series bold+det +\series default+också+\end_layout++\end_inset+</cell>+<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">+\begin_inset Text++\begin_layout Plain Layout++\emph on+X did it too+\end_layout++\end_inset+</cell>+</row>+<row>+<cell multicolumn="1" alignment="center" valignment="top" topline="true" leftline="true" usebox="none">+\begin_inset Text++\begin_layout Plain Layout++\series bold+more difficult+\end_layout++\end_inset+</cell>+<cell multicolumn="2" alignment="center" valignment="top" topline="true" leftline="true" usebox="none">+\begin_inset Text++\begin_layout Plain Layout++\end_layout++\end_inset+</cell>+<cell multicolumn="2" alignment="center" valignment="top" topline="true" leftline="true" usebox="none">+\begin_inset Text++\begin_layout Plain Layout++\end_layout++\end_inset+</cell>+<cell multicolumn="2" alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">+\begin_inset Text++\begin_layout Plain Layout++\end_layout++\end_inset+</cell>+</row>+<row>+<cell alignment="center" valignment="top" topline="true" bottomline="true" leftline="true" usebox="none">+\begin_inset Text++\begin_layout Plain Layout++\emph on+X took less than half a day to Y+\end_layout++\end_inset+</cell>+<cell alignment="center" valignment="top" topline="true" bottomline="true" leftline="true" usebox="none">+\begin_inset Text++\begin_layout Plain Layout++\emph on+X tog mindre än en halv dag att Y+\end_layout++\end_inset+</cell>+<cell alignment="center" valignment="top" topline="true" bottomline="true" leftline="true" usebox="none">+\begin_inset Text++\begin_layout Plain Layout++\emph on+X tog mindre än en halv dag+\series bold+ på sig för+\series default+ att Y+\end_layout++\end_inset+</cell>+<cell alignment="center" valignment="middle" topline="true" bottomline="true" leftline="true" rightline="true" usebox="none">+\begin_inset Text++\begin_layout Plain Layout+---+\end_layout++\end_inset+</cell>+</row>+</lyxtabular>++\end_inset+++\end_layout++\begin_layout Plain Layout+\begin_inset Caption++\begin_layout Plain Layout+Examples of encountered problems with the Swedish translation +\begin_inset CommandInset label+LatexCommand label+name "tab:swedish-problems"++\end_inset+++\end_layout++\end_inset+++\end_layout++\end_inset+++\end_layout++\begin_layout Subsubsection+Types of translation problems+\end_layout++\begin_layout Description+Idioms We encountered 10 problematic idioms in 31 sentences, where the direct+ translation of a phrase is not the most natural, but instead we should+ use a different syntactical construction.+ +\end_layout++\begin_layout Description+Agreement There were 7 different noun phrase agreement problems in 24 of+ the sentences, where the Swedish translation would be more natural if we+ could change the number, definiteness or gender of the noun phrase.+ +\end_layout++\begin_layout Description+Future+\begin_inset space ~+\end_inset++tense Swedish future tense takes two different forms, either +\emph on++\begin_inset Quotes eld+\end_inset++ska+\begin_inset Quotes erd+\end_inset+++\emph default+ or +\emph on++\begin_inset Quotes eld+\end_inset++kommer att+\begin_inset Quotes erd+\end_inset+++\emph default+.+ The resource grammar defaults to +\emph on++\begin_inset Quotes eld+\end_inset++ska+\begin_inset Quotes erd+\end_inset+++\emph default+, but +\emph on++\begin_inset Quotes eld+\end_inset++kommer att+\begin_inset Quotes erd+\end_inset+++\emph default+ is the more natural translation for all 12 FraCaS sentences using future+ tense.+ This is the case for 12 sentences, one example is +\emph on++\begin_inset Quotes eld+\end_inset++Bill will talk to Mary+\begin_inset Quotes erd+\end_inset+++\emph default+, which should be translated to +\emph on++\begin_inset Quotes eld+\end_inset++Bill kommer att prata med Mary+\begin_inset Quotes erd+\end_inset+++\emph default+.+\end_layout++\begin_layout Description+Elliptical+\begin_inset space ~+\end_inset++phrases 19 sentences has problems with elliptical phrases in Swedish.+ 15 of them has to do with the auxiliary verb +\emph on++\begin_inset Quotes eld+\end_inset++do/does/did+\begin_inset Quotes erd+\end_inset+++\emph default+, which sounds very awkward when it is translated to the Swedish verb +\emph on++\begin_inset Quotes eld+\end_inset++gör/gjorde+\begin_inset Quotes erd+\end_inset+++\emph default+.+ E.g., +\emph on++\begin_inset Quotes eld+\end_inset++Bill did too+\begin_inset Quotes erd+\end_inset+++\emph default+ is translated as +\emph on++\begin_inset Quotes eld+\end_inset++Bill gjorde också+\begin_inset Quotes erd+\end_inset+++\emph default+.+ In Swedish we also need an object +\emph on++\begin_inset Quotes eld+\end_inset++det+\begin_inset Quotes erd+\end_inset+++\emph default+ (lit.+ +\emph on++\begin_inset Quotes eld+\end_inset++it+\begin_inset Quotes erd+\end_inset+++\emph default+), so a better translation is +\emph on++\begin_inset Quotes eld+\end_inset++Bill gjorde det också+\begin_inset Quotes erd+\end_inset+++\emph default+ (lit.+ +\emph on++\begin_inset Quotes eld+\end_inset++Bill did it too+\begin_inset Quotes erd+\end_inset+++\emph default+).+ The remaining four problematic elliptical sentences are more difficult+ to analyse.+\end_layout++\begin_layout Description+Serious 32 of the sentences had more serious problems in Swedish.+ Some of them did not translate at all, since one of the grammatical constructio+ns had not been implemented for Swedish yet.+ Others translated, but with a very strange word order or inflection, since+ the corresponding grammatical construction did not function as expected.+ +\end_layout++\begin_layout Standard+All in all, out of the 118 problematic Swedish sentences we believe than+ more than two thirds of them should be possible to correct without too+ much trouble.+ +\end_layout++\begin_layout Standard+\begin_inset Note Note+status collapsed++\begin_layout Paragraph+Idioms+\end_layout++\begin_layout Plain Layout+\begin_inset Quotes eld+\end_inset++in business+\begin_inset Quotes erd+\end_inset++ => +\begin_inset Quotes eld+\end_inset++i affärsverksamhet+\begin_inset Quotes erd+\end_inset++? (3)+\end_layout++\begin_layout Plain Layout+\begin_inset Quotes eld+\end_inset++Bill is likely to [..]+\begin_inset Quotes erd+\end_inset++ => +\begin_inset Quotes eld+\end_inset++är sannolik/trolig att+\begin_inset Quotes erd+\end_inset++? [bättre: +\begin_inset Quotes eld+\end_inset++det är troligt att Bill [..]+\begin_inset Quotes erd+\end_inset++] (2)+\end_layout++\begin_layout Plain Layout+\begin_inset Quotes eld+\end_inset++Mary is female+\begin_inset Quotes erd+\end_inset++ => +\begin_inset Quotes eld+\end_inset++Mary är kvinnlig+\begin_inset Quotes erd+\end_inset++? [bättre: +\begin_inset Quotes eld+\end_inset++Mary är kvinna+\begin_inset Quotes erd+\end_inset++] (2)+\end_layout++\begin_layout Plain Layout+\begin_inset Quotes eld+\end_inset++members of the committee+\begin_inset Quotes erd+\end_inset++ => +\begin_inset Quotes eld+\end_inset++medlemmar av kommittén+\begin_inset Quotes erd+\end_inset++ [bättre: +\begin_inset Quotes eld+\end_inset++kommittémedlem+\begin_inset Quotes erd+\end_inset++] (2)+\end_layout++\begin_layout Plain Layout+\begin_inset Quotes eld+\end_inset++had his paper accepted+\begin_inset Quotes erd+\end_inset++ => +\begin_inset Quotes eld+\end_inset++hade sin uppsats godkänd+\begin_inset Quotes erd+\end_inset++ [bättre: +\begin_inset Quotes eld+\end_inset++fick sin uppsats godkänd+\begin_inset Quotes erd+\end_inset++] (3)+\end_layout++\begin_layout Plain Layout+\begin_inset Quotes eld+\end_inset++made a loss+\begin_inset Quotes erd+\end_inset++ => +\begin_inset Quotes eld+\end_inset++gjorde en förlust+\begin_inset Quotes erd+\end_inset++ [bättre: +\begin_inset Quotes eld+\end_inset++gick med förlust+\begin_inset Quotes erd+\end_inset++] (4)+\end_layout++\begin_layout Plain Layout+\begin_inset Quotes eld+\end_inset++a chain of businesses+\begin_inset Quotes erd+\end_inset++ => +\begin_inset Quotes eld+\end_inset++en kedja av affärsverksamheter+\begin_inset Quotes erd+\end_inset++ [bättre: +\begin_inset Quotes eld+\end_inset++en affärskedja+\begin_inset Quotes erd+\end_inset++] (7)+\end_layout++\begin_layout Plain Layout+\begin_inset Quotes eld+\end_inset++be sleeping+\begin_inset Quotes erd+\end_inset++ => +\begin_inset Quotes eld+\end_inset++är sovande+\begin_inset Quotes erd+\end_inset++ [bättre: +\begin_inset Quotes eld+\end_inset++sover+\begin_inset Quotes erd+\end_inset++] (4)+\end_layout++\begin_layout Plain Layout+\begin_inset Quotes eld+\end_inset++no one stops until+\begin_inset Quotes erd+\end_inset++ / +\begin_inset Quotes eld+\end_inset++eveyone continues until+\begin_inset Quotes erd+\end_inset++ => [+\begin_inset Quotes eld+\end_inset++ingen slutar förrän+\begin_inset Quotes erd+\end_inset++ / +\begin_inset Quotes eld+\end_inset++alla fortsätter tills+\begin_inset Quotes erd+\end_inset++]+\end_layout++\begin_layout Plain Layout+\begin_inset Quotes eld+\end_inset++a blue one+\begin_inset Quotes erd+\end_inset++ => +\begin_inset Quotes eld+\end_inset++en blå en+\begin_inset Quotes erd+\end_inset++ / +\begin_inset Quotes eld+\end_inset++en blå+\begin_inset Quotes erd+\end_inset++ (3)+\end_layout++\begin_layout Plain Layout+\begin_inset Quotes eld+\end_inset++the previous one+\begin_inset Quotes erd+\end_inset++ => ?? / +\begin_inset Quotes eld+\end_inset++den förra+\begin_inset Quotes erd+\end_inset++ (1)+\end_layout++\begin_layout Plain Layout++\series bold+OK+\series default+: +\begin_inset Quotes eld+\end_inset++comes cheap+\begin_inset Quotes erd+\end_inset++ => +\begin_inset Quotes eld+\end_inset++fås billigt+\begin_inset Quotes erd+\end_inset++? [bättre: +\begin_inset Quotes eld+\end_inset++är billig+\begin_inset Quotes erd+\end_inset++] (3)+\end_layout++\begin_layout Plain Layout++\series bold+OK+\series default+: (group_N2) +\begin_inset Quotes eld+\end_inset++a group of people+\begin_inset Quotes erd+\end_inset++ => +\begin_inset Quotes eld+\end_inset++en grupp av människor+\begin_inset Quotes erd+\end_inset++ [+\begin_inset Quotes eld+\end_inset++en grupp människor+\begin_inset Quotes erd+\end_inset++] (2)+\end_layout++\begin_layout Paragraph+OK: Passive form+\end_layout++\begin_layout Plain Layout+\begin_inset Quotes eld+\end_inset++was blamed+\begin_inset Quotes erd+\end_inset++ => +\begin_inset Quotes eld+\end_inset++blev beskyllda+\begin_inset Quotes erd+\end_inset++ / +\begin_inset Quotes eld+\end_inset++beskylldes+\begin_inset Quotes erd+\end_inset++ (3)+\end_layout++\begin_layout Plain Layout+\begin_inset Quotes eld+\end_inset++was used+\begin_inset Quotes erd+\end_inset++ => +\begin_inset Quotes eld+\end_inset++blev använd+\begin_inset Quotes erd+\end_inset++ / +\begin_inset Quotes eld+\end_inset++användes+\begin_inset Quotes erd+\end_inset++ (2)+\end_layout++\begin_layout Paragraph+Agreement+\end_layout++\begin_layout Plain Layout+16 of these contained variations of the definite noun phrase +\begin_inset Quotes eld+\end_inset+++\emph on+the right+\begin_inset Quotes erd+\end_inset+++\emph default+ (used in the context +\emph on++\begin_inset Quotes eld+\end_inset+++\emph default+X+\emph on+ has the right to live in +\emph default+Y+\emph on++\begin_inset Quotes erd+\end_inset+++\emph default+), which is translated to +\begin_inset Quotes eld+\end_inset+++\emph on+rätten+\begin_inset Quotes erd+\end_inset+++\emph default+.+ But in Swedish it sounds more natural to say +\emph on++\begin_inset Quotes eld+\end_inset++rätt+\begin_inset Quotes erd+\end_inset+++\emph default+ (lit.+ +\emph on++\begin_inset Quotes eld+\end_inset++right+\begin_inset Quotes erd+\end_inset+++\emph default+), at least in this context.+ In other cases, English indefinite noun phrases are better translated to+ definite form, such as +\emph on++\begin_inset Quotes eld+\end_inset++traffic+\begin_inset Quotes erd+\end_inset+++\emph default+ which should translate to +\emph on++\begin_inset Quotes eld+\end_inset++trafiken+\begin_inset Quotes erd+\end_inset+++\emph default+ (lit.+ +\emph on++\begin_inset Quotes eld+\end_inset++the traffic+\begin_inset Quotes erd+\end_inset+++\emph default+).+ Another example is gender problems, since Swedish has two genders, such+ as +\emph on++\begin_inset Quotes eld+\end_inset++one of the tenors+\begin_inset Quotes erd+\end_inset+++\emph default+ where the gender of +\emph on++\begin_inset Quotes eld+\end_inset++one+\begin_inset Quotes erd+\end_inset+++\emph default+ should depend on the gender of +\emph on++\begin_inset Quotes eld+\end_inset++tenor+\begin_inset Quotes erd+\end_inset+++\emph default+.+ Problems with number were mostly due to the singular pronoun +\emph on++\begin_inset Quotes eld+\end_inset++everyone+\begin_inset Quotes erd+\end_inset+++\emph default+ which was translated to the plural pronoun +\emph on++\begin_inset Quotes eld+\end_inset++alla+\begin_inset Quotes erd+\end_inset+++\emph default+.+\end_layout++\begin_layout Paragraph+Agreement examples+\end_layout++\begin_layout Plain Layout+\begin_inset Quotes eld+\end_inset++one of the tenors+\begin_inset Quotes erd+\end_inset++ => +\begin_inset Quotes eld+\end_inset++ett av tenorerna+\begin_inset Quotes erd+\end_inset++ / +\begin_inset Quotes eld+\end_inset++en av tenorerna+\begin_inset Quotes erd+\end_inset++ (1)+\end_layout++\begin_layout Plain Layout+\begin_inset Quotes eld+\end_inset++everyone continues until he is broke+\begin_inset Quotes erd+\end_inset++ => +\begin_inset Quotes eld+\end_inset++alla fortsätter tills han är pank+\begin_inset Quotes erd+\end_inset++ / +\begin_inset Quotes eld+\end_inset++\SpecialChar \ldots{}+ tills de är panka+\begin_inset Quotes erd+\end_inset++ (1)+\end_layout++\begin_layout Plain Layout+\begin_inset Quotes eld+\end_inset++clients at the demonstration+\begin_inset Quotes erd+\end_inset++ => +\begin_inset Quotes eld+\end_inset++klienter på presentationen+\begin_inset Quotes erd+\end_inset++ / +\begin_inset Quotes eld+\end_inset++klienterna \SpecialChar \ldots{}++\begin_inset Quotes erd+\end_inset++ (2)+\end_layout++\begin_layout Plain Layout+\begin_inset Quotes eld+\end_inset++traffic increased+\begin_inset Quotes erd+\end_inset++ => +\begin_inset Quotes eld+\end_inset++trafik ökade+\begin_inset Quotes erd+\end_inset++ / +\begin_inset Quotes eld+\end_inset++trafiken ökade+\begin_inset Quotes erd+\end_inset++ (1)+\end_layout++\begin_layout Plain Layout+\begin_inset Quotes eld+\end_inset++is the chairman of ITEL+\begin_inset Quotes erd+\end_inset++ => +\begin_inset Quotes eld+\end_inset++är ordföranden för ITEL+\begin_inset Quotes erd+\end_inset++ / +\begin_inset Quotes eld+\end_inset++ordförande+\begin_inset Quotes erd+\end_inset++ (1)+\end_layout++\begin_layout Plain Layout+\begin_inset Quotes eld+\end_inset++every customer who owns a computer has a service contract for it+\begin_inset Quotes erd+\end_inset++ => +\begin_inset Quotes eld+\end_inset++varje kund som äger en dator har ett servicekontrakt för det+\begin_inset Quotes erd+\end_inset++ / +\begin_inset Quotes eld+\end_inset++\SpecialChar \ldots{}+ för den+\begin_inset Quotes erd+\end_inset++ (2)+\end_layout++\begin_layout Plain Layout+\begin_inset Quotes eld+\end_inset++the right to \SpecialChar \ldots{}++\begin_inset Quotes erd+\end_inset++ => +\begin_inset Quotes eld+\end_inset++rätten att \SpecialChar \ldots{}++\begin_inset Quotes erd+\end_inset++ / +\begin_inset Quotes eld+\end_inset++rätt att \SpecialChar \ldots{}++\begin_inset Quotes erd+\end_inset++ (16)+\end_layout++\begin_layout Paragraph+OK: (ta bort ProgrVP på svenska) Progressive+\end_layout++\begin_layout Plain Layout+\begin_inset Quotes eld+\end_inset++Smith was writing a report+\begin_inset Quotes erd+\end_inset++ => +\begin_inset Quotes eld+\end_inset++Smith höll på att skriva en rapport+\begin_inset Quotes erd+\end_inset++ / +\begin_inset Quotes eld+\end_inset++skrev en rapport+\begin_inset Quotes erd+\end_inset++ (24)+\end_layout++\begin_layout Plain Layout+\begin_inset Quotes eld+\end_inset++APCOM has been paying mortgage+\begin_inset Quotes erd+\end_inset++ => +\begin_inset Quotes eld+\end_inset++APCOM har hållit på att betala hypoteksränta+\begin_inset Quotes erd+\end_inset++ / +\begin_inset Quotes eld+\end_inset++betalat+\begin_inset Quotes erd+\end_inset+++\end_layout++\begin_layout Paragraph+Reflexive pronouns+\end_layout++\begin_layout Plain Layout++\series bold+OK+\series default+: (lägg till refl_Pron) +\begin_inset Quotes eld+\end_inset++his/her/their+\begin_inset Quotes erd+\end_inset++ => +\begin_inset Quotes eld+\end_inset++hans/hennes/deras+\begin_inset Quotes erd+\end_inset++ / +\begin_inset Quotes eld+\end_inset++sin+\begin_inset Quotes erd+\end_inset++/+\begin_inset Quotes erd+\end_inset++sitt+\begin_inset Quotes erd+\end_inset++/+\begin_inset Quotes erd+\end_inset++sina+\begin_inset Quotes erd+\end_inset++ (~30)+\end_layout++\begin_layout Plain Layout+\begin_inset Quotes eld+\end_inset++himself+\begin_inset Quotes erd+\end_inset++ => +\begin_inset Quotes eld+\end_inset++sig+\begin_inset Quotes erd+\end_inset++ / +\begin_inset Quotes eld+\end_inset++sig själv+\begin_inset Quotes erd+\end_inset++ (but not always) (1)+\end_layout++\begin_layout Paragraph+Uncomprehensible+\end_layout++\begin_layout Plain Layout+prepositions/subjunctions: 2+\end_layout++\begin_layout Plain Layout+\begin_inset Quotes eld+\end_inset++twice as many than \SpecialChar \ldots{}++\begin_inset Quotes erd+\end_inset++ => +\begin_inset Quotes eld+\end_inset++dubbelt så många än \SpecialChar \ldots{}++\begin_inset Quotes erd+\end_inset++ / +\begin_inset Quotes eld+\end_inset++som+\begin_inset Quotes erd+\end_inset++ +\end_layout++\begin_layout Plain Layout+\begin_inset Quotes eld+\end_inset++Bill suggested to Frank's boss that \SpecialChar \ldots{}+, and Carl to Alan's wife+\begin_inset Quotes erd+\end_inset++ => +\begin_inset Quotes eld+\end_inset++Bill föreslog för Franks chef att \SpecialChar \ldots{}+, och Carl till Alans fru+\begin_inset Quotes erd+\end_inset++ / +\begin_inset Quotes eld+\end_inset++för Alans fru+\begin_inset Quotes erd+\end_inset++ +\end_layout++\begin_layout Plain Layout++\series bold+OK+\series default+: (arrive_in_V2) +\begin_inset Quotes eld+\end_inset++arrived in Katmandu+\begin_inset Quotes erd+\end_inset++ => +\begin_inset Quotes eld+\end_inset++anlände i Katmandu+\begin_inset Quotes erd+\end_inset++ / +\begin_inset Quotes eld+\end_inset++till+\begin_inset Quotes erd+\end_inset++ (2)+\end_layout++\begin_layout Plain Layout+Uncomprehensible/difficult to fix: 6+\end_layout++\begin_layout Plain Layout+No linearisation: 24+\end_layout++\begin_layout Plain Layout+\begin_inset Note Note+status collapsed++\begin_layout Subsection+Statistics+\end_layout++\begin_layout Plain Layout+Out of 1220 original sentences, 1043 could eventually be correctly parsed+ and their tree representations be used for generating the equivalent Swedish+ sentences.+ Also, the changes listed in section 3.2 were performed, resulting in better+ linearizations.+ The generated Swedish sentences were checked for accuracy and divided into+ a few different groups.+ The number of sentences in each group is given in the left-most column.+ Descriptions and examples for each group are given on the right and can+ be viewed as a list of remaining problems to be solved.+\end_layout++\begin_layout Plain Layout+\begin_inset Tabular+<lyxtabular version="3" rows="4" columns="3">+<features tabularvalignment="middle">+<column alignment="center" valignment="top" width="0">+<column alignment="center" valignment="top" width="0">+<column alignment="center" valignment="top" width="0">+<row>+<cell alignment="center" valignment="top" topline="true" bottomline="true" leftline="true" usebox="none">+\begin_inset Text++\begin_layout Plain Layout++\end_layout++\end_inset+</cell>+<cell alignment="center" valignment="top" topline="true" bottomline="true" leftline="true" usebox="none">+\begin_inset Text++\begin_layout Plain Layout++\end_layout++\end_inset+</cell>+<cell alignment="center" valignment="top" topline="true" bottomline="true" leftline="true" rightline="true" usebox="none">+\begin_inset Text++\begin_layout Plain Layout++\end_layout++\end_inset+</cell>+</row>+<row>+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">+\begin_inset Text++\begin_layout Plain Layout++\end_layout++\end_inset+</cell>+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">+\begin_inset Text++\begin_layout Plain Layout++\end_layout++\end_inset+</cell>+<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">+\begin_inset Text++\begin_layout Plain Layout++\end_layout++\end_inset+</cell>+</row>+<row>+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">+\begin_inset Text++\begin_layout Plain Layout++\end_layout++\end_inset+</cell>+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">+\begin_inset Text++\begin_layout Plain Layout++\end_layout++\end_inset+</cell>+<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">+\begin_inset Text++\begin_layout Plain Layout++\end_layout++\end_inset+</cell>+</row>+<row>+<cell alignment="center" valignment="top" topline="true" bottomline="true" leftline="true" usebox="none">+\begin_inset Text++\begin_layout Plain Layout++\end_layout++\end_inset+</cell>+<cell alignment="center" valignment="top" topline="true" bottomline="true" leftline="true" usebox="none">+\begin_inset Text++\begin_layout Plain Layout++\end_layout++\end_inset+</cell>+<cell alignment="center" valignment="top" topline="true" bottomline="true" leftline="true" rightline="true" usebox="none">+\begin_inset Text++\begin_layout Plain Layout++\end_layout++\end_inset+</cell>+</row>+</lyxtabular>++\end_inset+++\end_layout++\begin_layout Plain Layout+\begin_inset Tabular+<lyxtabular version="3" rows="6" columns="3">+<features tabularvalignment="middle">+<column alignment="center" valignment="top" width="0">+<column alignment="center" valignment="top" width="0">+<column alignment="center" valignment="top" width="0">+<row>+<cell alignment="center" valignment="top" topline="true" bottomline="true" leftline="true" usebox="none">+\begin_inset Text++\begin_layout Plain Layout++\end_layout++\end_inset+</cell>+<cell alignment="center" valignment="top" topline="true" bottomline="true" leftline="true" usebox="none">+\begin_inset Text++\begin_layout Plain Layout++\end_layout++\end_inset+</cell>+<cell alignment="center" valignment="top" topline="true" bottomline="true" leftline="true" rightline="true" usebox="none">+\begin_inset Text++\begin_layout Plain Layout++\end_layout++\end_inset+</cell>+</row>+<row>+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">+\begin_inset Text++\begin_layout Plain Layout+unique sentences+\end_layout++\end_inset+</cell>+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">+\begin_inset Text++\begin_layout Plain Layout+874+\end_layout++\end_inset+</cell>+<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">+\begin_inset Text++\begin_layout Plain Layout++\end_layout++\end_inset+</cell>+</row>+<row>+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">+\begin_inset Text++\begin_layout Plain Layout+(som förut)+\end_layout++\end_inset+</cell>+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">+\begin_inset Text++\begin_layout Plain Layout+599+\end_layout++\end_inset+</cell>+<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">+\begin_inset Text++\begin_layout Plain Layout++\end_layout++\end_inset+</cell>+</row>+<row>+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">+\begin_inset Text++\begin_layout Plain Layout+(skiljer sig)+\end_layout++\end_inset+</cell>+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">+\begin_inset Text++\begin_layout Plain Layout+89+\end_layout++\end_inset+</cell>+<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">+\begin_inset Text++\begin_layout Plain Layout++\end_layout++\end_inset+</cell>+</row>+<row>+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">+\begin_inset Text++\begin_layout Plain Layout+(hade inte förut)+\end_layout++\end_inset+</cell>+<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">+\begin_inset Text++\begin_layout Plain Layout+150+\end_layout++\end_inset+</cell>+<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">+\begin_inset Text++\begin_layout Plain Layout++\end_layout++\end_inset+</cell>+</row>+<row>+<cell alignment="center" valignment="top" topline="true" bottomline="true" leftline="true" usebox="none">+\begin_inset Text++\begin_layout Plain Layout+no linearisation+\end_layout++\end_inset+</cell>+<cell alignment="center" valignment="top" topline="true" bottomline="true" leftline="true" usebox="none">+\begin_inset Text++\begin_layout Plain Layout+36+\end_layout++\end_inset+</cell>+<cell alignment="center" valignment="top" topline="true" bottomline="true" leftline="true" rightline="true" usebox="none">+\begin_inset Text++\begin_layout Plain Layout++\end_layout++\end_inset+</cell>+</row>+</lyxtabular>++\end_inset+++\end_layout++\begin_layout Paragraph+Number Type Description Result Desired result+\end_layout++\begin_layout Itemize+811 correct & natural +\end_layout++\begin_layout Itemize+120 considered correct but could be more natural+\end_layout++\begin_deeper+\begin_layout Itemize+“each” / “every”: “varje europé” “alla européer”+\end_layout++\begin_layout Itemize+\begin_inset Note Note+status open++\begin_layout Plain Layout+proper inclusion -- indefinite article: “Mary är en student” “Mary är student”+\end_layout++\end_inset+++\end_layout++\begin_layout Itemize+\begin_inset Note Note+status open++\begin_layout Plain Layout+infinitive marker desired: “John sade Bill hade skadat sig” “John sade att+ Bill hade skadat sig”+\end_layout++\end_inset+++\end_layout++\begin_layout Itemize+\begin_inset Note Note+status open++\begin_layout Plain Layout+infinitive marker not desired: “lyckades att vinna” “lyckades vinna”+\end_layout++\end_inset+++\end_layout++\begin_layout Itemize+passive constructions: “blev använd” “användes”+\end_layout++\begin_layout Itemize+gender of pronoun referring to previous sentence: “Bill äger ett också”+ (referring to “bil”) “Bill äger en också”+\end_layout++\begin_layout Itemize+definite form: “ordföranden för” “ordförande för”+\end_layout++\begin_layout Itemize+meaning of “female”: “Mary är kvinnlig” “Mary är kvinna”+\end_layout++\end_deeper+\begin_layout Itemize+28 requiring changes in the FraCaS lexicon +\end_layout++\begin_deeper+\begin_layout Itemize+“of” constructions:+\end_layout++\begin_deeper+\begin_layout Itemize+“medlemmar av kommittén” “medlemmar i kommittén”+\end_layout++\begin_layout Itemize+“kedja av affärsverksamhet” “affärskedja”+\end_layout++\begin_layout Itemize+“grupp av människor” “grupp människor”+\end_layout++\begin_layout Itemize+\begin_inset Note Note+status open++\begin_layout Plain Layout+“alla av dem” “alla” / “allihop”+\end_layout++\end_inset+++\end_layout++\end_deeper+\begin_layout Itemize+\begin_inset Note Note+status open++\begin_layout Plain Layout+translation of “should”: “föreslog [...] att de borde” “föreslog [...] att de+ skulle”+\end_layout++\end_inset+++\end_layout++\begin_layout Itemize+translation of “make a loss”: “gjorde en förlust” “gick med förlust”+\end_layout++\begin_layout Itemize+translation of “have been to”: “har varit till” “har varit i”+\end_layout++\begin_layout Itemize+translation of “be asleep”: “har varit sovande” “har sovit”+\end_layout++\end_deeper+\begin_layout Itemize+30 requiring changes in the English and/or Swedish general grammar(s) +\end_layout++\begin_deeper+\begin_layout Itemize+gender: “ett av de ledande tenorerna” “en av de ledande tenorerna”+\end_layout++\begin_layout Itemize+translation of “come cheap”: “fås billigt” “vara billig (att anlita)”+\end_layout++\begin_layout Itemize+\begin_inset Note Note+status open++\begin_layout Plain Layout+“both” with adjective -- definite article: “båda ledande tenorerna” “båda+ de ledande tenorerna”+\end_layout++\end_inset+++\end_layout++\begin_layout Itemize+“will” -- difference in modality: “ska bli” “kommer att bli” (sometimes)+\end_layout++\begin_layout Itemize+AdV position of “also”: “hon gav också dem en faktura” “hon gav dem också+ en faktura”+\end_layout++\begin_layout Itemize+translation of “awarded himself”: “tilldelade sig” “tilldelade sig själv”+\end_layout++\begin_layout Itemize+\begin_inset Note Note+status open++\begin_layout Plain Layout+translation of “used to be”: “brukade att vara” e.g.+ “var tidigare”+\end_layout++\end_inset+++\end_layout++\end_deeper+\begin_layout Itemize+54 difficult to correct +\end_layout++\begin_deeper+\begin_layout Itemize+\begin_inset Note Note+status open++\begin_layout Plain Layout+“were blamed for” (non-human subject): “blev anklagade för” [difficult to+ find Swedish equivalent]+\end_layout++\end_inset+++\end_layout++\begin_layout Itemize+reflexive possessive: “skrev hans första roman” “skrev sin första roman”+\end_layout++\begin_layout Itemize+progressive aspect: “höll på att” (sometimes meaning “nearly”) [difficult+ to find Swedish equivalent]+\end_layout++\begin_layout Itemize+singular / plural: “alla italienska män vill vara en framstående tenor”+ “alla italienska män vill vara framstående tenorer”+\end_layout++\begin_layout Itemize+“be likely to”: “Smith är sannolik att bli” “det är sannolikt att Smith+ blir”+\end_layout++\begin_layout Itemize+\begin_inset Note Note+status open++\begin_layout Plain Layout+“some”: “snabbare än någon ITEL-dator” “snabbare än någon viss ITEL-dator”+\end_layout++\end_inset+++\end_layout++\begin_layout Itemize+“lose one's temper”: “Smith förlorade hans humör” “Smith tappade humöret”+\end_layout++\begin_layout Itemize+“have something accepted”: “John hade hans uppsats godkänd” “John fick sin+ uppsats godkänd”+\end_layout++\end_deeper+\end_inset+++\end_layout++\end_inset+++\end_layout++\begin_layout Section+Discussion+\end_layout++\begin_layout Standard+The FraCaS treebank was a small project financed by the Centre for Language+ Technology (CLT) at the University of Gothenburg.+ The project used less than three person months to create a treebank for+ the FraCaS test suite, together with a bilingual GF grammar for the trees.+ The coverage of the English grammar is 95--99%, depending on whether you+ include elliptic phrases or not.+ The Swedish grammar is not as developed yet and has a coverage of 86% of+ the FraCaS sentences.+\end_layout++\begin_layout Standard+The treebank is released under an open-source license, and can be downloaded+ as a part of the Gothenburg CLT Toolkit:+\end_layout++\begin_layout Standard+\noindent+\align center++\family sans+\begin_inset CommandInset href+LatexCommand href+target "http://www.clt.gu.se/clt-toolkit"++\end_inset+++\end_layout++\begin_layout Subsection+Implications for the FraCaS Test Suite+\end_layout++\begin_layout Standard+From the corpus point of view, the FraCaS test suite is not very interesting.+ It is a small corpus (less than 1000 sentences), with non-natural, made+ up sentences.+ Furthermore it uses a fairly standard syntax and is monolingual.+\end_layout++\begin_layout Standard+However, the main value of FraCaS is as a resource for testing semantic+ inference algorithms +\begin_inset CommandInset citation+LatexCommand citep+key "MacCartneyManning2007:Natural-logic-for-textual,MacCartneyManning2008:Modeling-semantic-containment"++\end_inset++.+ This project adds syntactic structures to the test sentences, which we+ hope can be beneficial since the semantics of a sentence has a close dependence+ on syntax.+ +\end_layout++\begin_layout Standard+Furthermore, we have added a new language to the test set, albeit not perfect+ yet.+ And since we are using the multilingual GF resource grammar, more languages+ should be relatively easy to add.+ +\end_layout++\begin_layout Subsection+Implications for GF+\end_layout++\begin_layout Standard+The making of this treebank has been a strees test, both for GF and for+ the resource grammar.+ The main work in this project has been by a person who is an experienced+ computational linguist, but had never used GF before.+ This means that the project has been a test of how easy it is to learn+ and start using GF and its resource grammar.+ Furthermore, the project was a test of the coverage of the existing grammatical+ constructions in the resource grammar.+ +\end_layout++\begin_layout Subsection+Future Work+\end_layout++\begin_layout Standard+There are several remaining problems and interesting extension possible+ with the FraCaS treebank; the following are some examples:+\end_layout++\begin_layout Itemize+First and most important is to get most of the remaining Swedish sentences+ to work, by factoring out idioms and other constructions from the treebank+ and put them in the grammars instead.+ +\end_layout++\begin_layout Itemize+A good treatment of elliptical phrases, by implementing more coordination+ constructions in the resource grammar.+ +\end_layout++\begin_layout Itemize+We would like to add new languages from the resource grammar to the multilingual+ FraCaS grammar.+ Hopefully this will also benefit the existing two languages, by requiring+ us to abstract away from language-specific details, thus making the grammar+ more abstract.+\end_layout++\begin_layout Itemize+A long-term goal would be to make the treebank and the associated grammar+ more +\begin_inset Quotes eld+\end_inset++semantic+\begin_inset Quotes erd+\end_inset++ by factoring out even more syntactic constructions and put them in a semantic+ resource grammar.+ That it is possible to formulate classic Montague semantics in GF has already+ been shown +\begin_inset CommandInset citation+LatexCommand citep+key "Ranta2001:Computational-Semantics"++\end_inset++, but here we need to handle many more semantic and pragmatic phenomena.+\end_layout++\begin_layout Standard+\begin_inset Note Note+status open++\begin_layout Subsection+Related work+\end_layout++\begin_layout Plain Layout+Converting the Penn Treebank to GF, Swedish Talbanken to GF+\end_layout++\end_inset+++\end_layout++\begin_layout Standard+\begin_inset CommandInset bibtex+LatexCommand bibtex+bibfiles "FraCaSBank"+options "apalike"++\end_inset+++\end_layout++\end_body+\end_document
binary file changed (absent → 164529 bytes)
@@ -0,0 +1,77 @@+--# -path=.:alltenses++-- Additions to the resource grammar++abstract Additions = Cat ** {++-- First we start with the contents of the RGL's Extra.gf, as it looked like in October 2011.++fun+ GenNP : NP -> Quant ; -- this man's+ ComplBareVS : VS -> S -> VP ; -- know you go++ StrandRelSlash : RP -> ClSlash -> RCl ; -- that he lives in+ EmptyRelSlash : ClSlash -> RCl ; -- he lives in++cat+ VPI ;+ [VPI] {2} ;++fun+ MkVPI : VP -> VPI ;+ ConjVPI : Conj -> [VPI] -> VPI ;+ ComplVPIVV : VV -> VPI -> VP ;++cat+ VPS ;+ [VPS] {2} ;++fun+ MkVPS : Temp -> Pol -> VP -> VPS ;+ ConjVPS : Conj -> [VPS] -> VPS ;+ PredVPS : NP -> VPS -> S ;++fun+ PartVP : VP -> AP ; -- (the man) looking at Mary+ EmbedPresPart : VP -> SC ; -- looking at Mary (is fun)++ PassVPSlash : VPSlash -> VP ; -- be forced to sleep++-- And then we give some FraCaS-specific additions to the original Extra.gf.++cat+ [QS]{2} ;+ [Det]{2} ;++fun+ -- NP relative phrases, without comma+ RelNPa : NP -> RS -> NP ;++ -- just to overcome a bug in AdjectiveScand.gf+ UseComparA_prefix : A -> AP ;++ -- s-form passive+ PassV2s : V2 -> VP ;++ -- idiom "so do I", "so did she"+ SoDoI : NP -> Cl ;++ -- as ExtAdvS, but for questions+ ExtAdvQS : Adv -> QS -> QS ;++ -- question conjunction+ ConjQS : Conj -> [QS] -> QS ;++ -- determiner conjunction+ ConjDet : Conj -> [Det] -> Det ;++ -- -- possible additional functions:+ -- AdVAdv : Adv -> AdV ;+ -- PassV2V : V2V -> VV ;+ -- ComplVPIV2V : V2V -> VPI -> VPSlash ;+ -- ComplVV : VV -> VP -> VP ;+ -- ComparAdvNoun : CAdv -> CN -> NP -> NP ;+ -- ComparAdvNounS : CAdv -> CN -> S -> NP ;+ -- ConjVPSlash : Conj -> VPSlash -> VPSlash -> VPSlash ;++}
@@ -0,0 +1,104 @@+--# -path=.:alltenses++concrete AdditionsEng of Additions = CatEng **+ open ResEng, Coordination, Prelude, MorphoEng, ParadigmsEng,+ (E=ExtraEng),+ (R=ResEng),+ (G=GrammarEng),+ (P=ParadigmsEng),+ (X=ParamX),+ (C=Coordination)+ in {++-- First we start with the contents of the RGL's ExtraEng.gf, as it looked like in October 2011.++lin+ GenNP = E.GenNP ;+ ComplBareVS = E.ComplBareVS ;+ StrandRelSlash = E.StrandRelSlash ; + EmptyRelSlash = E.EmptyRelSlash ; ++lincat+ VPI = E.VPI ;+ [VPI] = E.ListVPI ;++lin+ BaseVPI = E.BaseVPI ;+ ConsVPI = E.ConsVPI ;+ MkVPI = E.MkVPI ;+ ConjVPI = E.ConjVPI ;+ ComplVPIVV = E.ComplVPIVV ;++lincat+ VPS = E.VPS ;+ [VPS] = E.ListVPS ;++lin+ BaseVPS = E.BaseVPS ;+ ConsVPS = E.ConsVPS ;+ PredVPS = E.PredVPS ;+ MkVPS = E.MkVPS ;+ ConjVPS = E.ConjVPS ;++lin+ PassVPSlash = E.PassVPSlash ;+ PartVP = E.PartVP ;+ EmbedPresPart = E.EmbedPresPart ;++-- And then we give some FraCaS-specific additions to the original ExtraEng.gf.++lincat+ [QS] = {s1,s2 : X.QForm => Str} ;+ [Det] = {s1,s2 : Str ; sp1,sp2 : R.NPCase => Str ; n : X.Number ; hasNum : Bool} ;++lin+ RelNPa np rs = {+ s = \\c => np.s ! c ++ rs.s ! np.a ;+ a = np.a+ } ;++ UseComparA_prefix = G.UseComparA ;++ PassV2s = G.PassV2 ;++ SoDoI subj = {+ s = \\t,a,b,o =>+ let + so = case b of {+ R.CPos => "so" ; + R.CNeg c => "neither"+ } ;+ did = case <t,a> of {+ <X.Pres,X.Simul> => R.agrVerb "does" "do" subj.a ;+ <X.Pres,X.Anter> => R.agrVerb "has" "have" subj.a ;+ <X.Past,X.Simul> => "did" ;+ <X.Past,X.Anter> => "had" ;+ <X.Fut ,_ > => "will" ;+ <X.Cond,_ > => "would" + }+ in + case o of {+ R.ODir => so ++ did ++ (subj.s ! R.npNom) ;+ R.OQuest => did ++ (subj.s ! R.npNom) ++ so + }+ } ;++ ExtAdvQS a s = {s = \\q => a.s ++ "," ++ s.s ! q} ;++ ConjQS conj ss = C.conjunctDistrTable X.QForm conj ss ;+ BaseQS x y = C.twoTable X.QForm x y ;+ ConsQS x xs = C.consrTable X.QForm C.comma x xs ;++ ConjDet conj ss = C.conjunctDistrSS conj ss ** {+ sp = \\c => conj.s1 ++ ss.sp1 ! c ++ conj.s2 ++ ss.sp2 ! c;+ n = X.conjNumber conj.n ss.n; hasNum = ss.hasNum+ } ;+ BaseDet x y = C.twoSS x y ** {+ sp1 = x.sp; sp2 = y.sp; n = X.conjNumber x.n y.n; hasNum = orB x.hasNum y.hasNum+ } ;+ ConsDet x xs = C.consrSS C.comma x xs ** {+ sp1 = \\c => x.sp ! c ++ C.comma ++ xs.sp1 ! c;+ sp2 = xs.sp2; n = X.conjNumber xs.n x.n; hasNum = orB xs.hasNum x.hasNum+ } ;++}
@@ -0,0 +1,83 @@+--# -path=.:alltenses++concrete AdditionsSwe of Additions = CatSwe ** + open CommonScand, Coordination, ResSwe, ParamX,+ Prelude,+ (E=ExtraSwe),+ (M=MorphoSwe),+ (P=ParadigmsSwe),+ (I=IrregSwe),+ (G=GrammarSwe),+ (X=ParamX),+ (C=Coordination)+ in {++-- First we start with the contents of the RGL's ExtraSwe.gf, as it looked like in October 2011.++lin+ GenNP = E.GenNP ;+ ComplBareVS = E.ComplBareVS ;+ StrandRelSlash = E.StrandRelSlash ; + EmptyRelSlash = E.EmptyRelSlash ; ++lincat+ VPI = E.VPI ;+ [VPI] = E.ListVPI ;++lin+ BaseVPI = E.BaseVPI ;+ ConsVPI = E.ConsVPI ;+ MkVPI = E.MkVPI ;+ ConjVPI = E.ConjVPI ;+ ComplVPIVV = E.ComplVPIVV ;++lincat+ VPS = E.VPS ;+ [VPS] = E.ListVPS ;++lin+ BaseVPS = E.BaseVPS ;+ ConsVPS = E.ConsVPS ;+ PredVPS = E.PredVPS ;+ MkVPS = E.MkVPS ;+ ConjVPS = E.ConjVPS ;++lin+ PassVPSlash vps = variants{} ; -- M.insertObj (\\a => "[??]") (UseV M.verbBecome) ;+ PartVP vp = variants{} ; -- {s = \\ap => "[??]"; isPre = False} ;+ EmbedPresPart vp = variants{} ;++-- And then we give some FraCaS-specific additions to the original ExtraSwe.gf.++lincat+ [QS] = {s1,s2 : X.QForm => Str} ;+ [Det] = {s1,s2,sp1,sp2 : Bool => M.NGender => Str ; n : M.Number ; det : M.DetSpecies} ;++lin+ RelNPa np rs = {+ s = \\c => np.s ! c ++ rs.s ! np.a ! M.RNom ;+ a = np.a ;+ isMod = np.isMod+ } ;++ UseComparA_prefix a = {s = (G.UseComparA a).s; isPre = True};++ PassV2s v2 = predV (P.depV (lin V v2)) ;++ SoDoI subj = M.mkClause "det" (M.agrP3 M.neutrum M.Sg) + (M.insertObj (\\_ => subj.s ! M.nominative ++ "också") (G.UseV I.göra_V)) ;+ -- error in Anter: "det har gjort han också"+ -- error in PNeg: "det gör inte han också" (better: "inte heller")+ -- probably error in Inv/Sub word order too++ ExtAdvQS a s = {s = \\q => a.s ++ "," ++ s.s ! q} ;++ ConjQS conj ss = C.conjunctDistrTable X.QForm conj ss ;+ BaseQS x y = C.twoTable X.QForm x y ;+ ConsQS x xs = C.consrTable X.QForm C.comma x xs ;++ ConjDet conj ss = variants{} ;+ BaseDet x y = variants{} ;+ ConsDet x xs = variants{} ;++}
@@ -0,0 +1,59 @@+--# -path=.:alltenses++abstract FraCaS = Grammar, Additions, FraCaSLex ** {++flags+ startcat = Phr ;++-- language independent functions++fun+ ComparAsAs : A -> NP -> AP;++fun+ Adverbial : Adv -> Phr;+ PAdverbial : PConj -> Adv -> Phr;+ Nounphrase : NP -> Phr;+ PNounphrase : PConj -> NP -> Phr;+ Question : QS -> Phr;+ PQuestion : PConj -> QS -> Phr;+ Sentence : S -> Phr;+ PSentence : PConj -> S -> Phr;++fun+ Past : Temp;+ PastPerfect : Temp;+ Present : Temp;+ PresentPerfect : Temp;+ Future : Temp;+ FuturePerfect : Temp;+ Conditional : Temp;++fun+ ConjCN2 : Conj -> CN -> CN -> CN;+ ConjNP2 : Conj -> NP -> NP -> NP;+ ConjNP3 : Conj -> NP -> NP -> NP -> NP;+ ConjQS2 : Conj -> QS -> QS -> QS;+ ConjS2 : Conj -> S -> S -> S;+ ConjVPI2 : Conj -> VP -> VP -> VPI;+ ConjVPS2 : Conj -> Temp -> Pol -> VP -> Temp -> Pol -> VP -> VPS;++-- language dependent functions++fun+ UncNeg : Pol ;++fun+ ComplVSa : VS -> S -> VP ;+ ProgrVPa : VP -> VP ;++fun+ elliptic_V : V ;+ elliptic_NP_Sg, elliptic_NP_Pl : NP ; + elliptic_CN : CN ; + elliptic_VP : VP ;+ elliptic_Cl : Cl ; + elliptic_VPSlash : VPSlash ;+ elliptic_V2V : V2V ;++}
@@ -0,0 +1,1579 @@+--# -path=.:alltenses:prelude++abstract FraCaSBank = {++cat FraCaSPhrase;++fun s_001_1_p : FraCaSPhrase;+fun s_001_2_q : FraCaSPhrase;+fun s_001_3_h : FraCaSPhrase;++fun s_002_1_p : FraCaSPhrase;+fun s_002_2_p : FraCaSPhrase;+fun s_002_3_q : FraCaSPhrase;+fun s_002_4_h : FraCaSPhrase;++fun s_003_1_p : FraCaSPhrase;+fun s_003_2_p : FraCaSPhrase;+fun s_003_3_q : FraCaSPhrase;+fun s_003_4_h : FraCaSPhrase;++fun s_004_1_p : FraCaSPhrase;+fun s_004_2_p : FraCaSPhrase;+fun s_004_3_q : FraCaSPhrase;+fun s_004_4_h : FraCaSPhrase;++fun s_005_1_p : FraCaSPhrase;+fun s_005_2_q : FraCaSPhrase;+fun s_005_3_h : FraCaSPhrase;++fun s_006_1_p : FraCaSPhrase;+fun s_006_2_q : FraCaSPhrase;+fun s_006_3_h : FraCaSPhrase;++fun s_007_1_p : FraCaSPhrase;+fun s_007_2_q : FraCaSPhrase;+fun s_007_3_h : FraCaSPhrase;++fun s_008_1_p : FraCaSPhrase;+fun s_008_2_q : FraCaSPhrase;+fun s_008_3_h : FraCaSPhrase;++fun s_009_1_p : FraCaSPhrase;+fun s_009_2_q : FraCaSPhrase;+fun s_009_3_h : FraCaSPhrase;++fun s_010_1_p : FraCaSPhrase;+fun s_010_2_q : FraCaSPhrase;+fun s_010_3_h : FraCaSPhrase;++fun s_011_1_p : FraCaSPhrase;+fun s_011_2_p : FraCaSPhrase;+fun s_011_3_q : FraCaSPhrase;+fun s_011_4_h : FraCaSPhrase;++fun s_012_1_p : FraCaSPhrase;+fun s_012_2_q : FraCaSPhrase;+fun s_012_3_h : FraCaSPhrase;++fun s_013_1_p : FraCaSPhrase;+fun s_013_2_p : FraCaSPhrase;+fun s_013_3_q : FraCaSPhrase;+fun s_013_4_h : FraCaSPhrase;++fun s_014_1_p : FraCaSPhrase;+fun s_014_2_p : FraCaSPhrase;+fun s_014_3_q : FraCaSPhrase;+fun s_014_4_h : FraCaSPhrase;++fun s_015_1_p : FraCaSPhrase;+fun s_015_2_q : FraCaSPhrase;+fun s_015_3_h : FraCaSPhrase;++fun s_016_1_p : FraCaSPhrase;+fun s_016_2_q : FraCaSPhrase;+fun s_016_3_h : FraCaSPhrase;++fun s_017_1_p : FraCaSPhrase;+fun s_017_2_q : FraCaSPhrase;+fun s_017_3_h : FraCaSPhrase;++fun s_018_1_p : FraCaSPhrase;+fun s_018_2_p : FraCaSPhrase;+fun s_018_3_p : FraCaSPhrase;+fun s_018_4_q : FraCaSPhrase;+fun s_018_5_h : FraCaSPhrase;++fun s_019_1_p : FraCaSPhrase;+fun s_019_2_p : FraCaSPhrase;+fun s_019_3_p : FraCaSPhrase;+fun s_019_4_q : FraCaSPhrase;+fun s_019_5_h : FraCaSPhrase;++fun s_020_1_p : FraCaSPhrase;+fun s_020_2_p : FraCaSPhrase;+fun s_020_3_p : FraCaSPhrase;+fun s_020_4_q : FraCaSPhrase;+fun s_020_5_h : FraCaSPhrase;++fun s_021_1_p : FraCaSPhrase;+fun s_021_2_p : FraCaSPhrase;+fun s_021_3_p : FraCaSPhrase;+fun s_021_4_q : FraCaSPhrase;+fun s_021_5_h : FraCaSPhrase;++fun s_022_1_p : FraCaSPhrase;+fun s_022_2_q : FraCaSPhrase;+fun s_022_3_h : FraCaSPhrase;++fun s_023_1_p : FraCaSPhrase;+fun s_023_2_q : FraCaSPhrase;+fun s_023_3_h : FraCaSPhrase;++fun s_024_1_p : FraCaSPhrase;+fun s_024_2_q : FraCaSPhrase;+fun s_024_3_h : FraCaSPhrase;++fun s_025_1_p : FraCaSPhrase;+fun s_025_2_q : FraCaSPhrase;+fun s_025_3_h : FraCaSPhrase;++fun s_026_1_p : FraCaSPhrase;+fun s_026_2_p : FraCaSPhrase;+fun s_026_3_p : FraCaSPhrase;+fun s_026_4_q : FraCaSPhrase;+fun s_026_5_h : FraCaSPhrase;++fun s_027_1_p : FraCaSPhrase;+fun s_027_2_p : FraCaSPhrase;+fun s_027_3_p : FraCaSPhrase;+fun s_027_4_q : FraCaSPhrase;+fun s_027_5_h : FraCaSPhrase;++fun s_028_1_p : FraCaSPhrase;+fun s_028_2_p : FraCaSPhrase;+fun s_028_3_p : FraCaSPhrase;+fun s_028_4_q : FraCaSPhrase;+fun s_028_5_h : FraCaSPhrase;++fun s_029_1_p : FraCaSPhrase;+fun s_029_2_q : FraCaSPhrase;+fun s_029_3_h : FraCaSPhrase;++fun s_030_1_p : FraCaSPhrase;+fun s_030_2_q : FraCaSPhrase;+fun s_030_3_h : FraCaSPhrase;++fun s_031_1_p : FraCaSPhrase;+fun s_031_2_q : FraCaSPhrase;+fun s_031_3_h : FraCaSPhrase;++fun s_032_1_p : FraCaSPhrase;+fun s_032_2_q : FraCaSPhrase;+fun s_032_3_h : FraCaSPhrase;++fun s_033_1_p : FraCaSPhrase;+fun s_033_2_q : FraCaSPhrase;+fun s_033_3_h : FraCaSPhrase;++fun s_034_1_p : FraCaSPhrase;+fun s_034_2_p : FraCaSPhrase;+fun s_034_3_p : FraCaSPhrase;+fun s_034_4_q : FraCaSPhrase;+fun s_034_5_h : FraCaSPhrase;++fun s_035_1_p : FraCaSPhrase;+fun s_035_2_p : FraCaSPhrase;+fun s_035_3_p : FraCaSPhrase;+fun s_035_4_q : FraCaSPhrase;+fun s_035_5_h : FraCaSPhrase;++fun s_036_1_p : FraCaSPhrase;+fun s_036_2_p : FraCaSPhrase;+fun s_036_3_p : FraCaSPhrase;+fun s_036_4_q : FraCaSPhrase;+fun s_036_5_h : FraCaSPhrase;++fun s_037_1_p : FraCaSPhrase;+fun s_037_2_p : FraCaSPhrase;+fun s_037_3_p : FraCaSPhrase;+fun s_037_4_q : FraCaSPhrase;+fun s_037_5_h : FraCaSPhrase;++fun s_038_1_p : FraCaSPhrase;+fun s_038_2_q : FraCaSPhrase;+fun s_038_3_h : FraCaSPhrase;++fun s_039_1_p : FraCaSPhrase;+fun s_039_2_q : FraCaSPhrase;+fun s_039_3_h : FraCaSPhrase;++fun s_040_1_p : FraCaSPhrase;+fun s_040_2_q : FraCaSPhrase;+fun s_040_3_h : FraCaSPhrase;++fun s_041_1_p : FraCaSPhrase;+fun s_041_2_q : FraCaSPhrase;+fun s_041_3_h : FraCaSPhrase;++fun s_042_1_p : FraCaSPhrase;+fun s_042_2_p : FraCaSPhrase;+fun s_042_3_p : FraCaSPhrase;+fun s_042_4_q : FraCaSPhrase;+fun s_042_5_h : FraCaSPhrase;++fun s_043_1_p : FraCaSPhrase;+fun s_043_2_p : FraCaSPhrase;+fun s_043_3_p : FraCaSPhrase;+fun s_043_4_q : FraCaSPhrase;+fun s_043_5_h : FraCaSPhrase;++fun s_044_1_p : FraCaSPhrase;+fun s_044_2_p : FraCaSPhrase;+fun s_044_3_p : FraCaSPhrase;+fun s_044_4_q : FraCaSPhrase;+fun s_044_5_h : FraCaSPhrase;++fun s_045_1_p : FraCaSPhrase;+fun s_045_2_q : FraCaSPhrase;+fun s_045_3_h : FraCaSPhrase;++fun s_046_1_p : FraCaSPhrase;+fun s_046_2_q : FraCaSPhrase;+fun s_046_3_h : FraCaSPhrase;++fun s_047_1_p : FraCaSPhrase;+fun s_047_2_q : FraCaSPhrase;+fun s_047_3_h : FraCaSPhrase;++fun s_048_1_p : FraCaSPhrase;+fun s_048_2_q : FraCaSPhrase;+fun s_048_3_h : FraCaSPhrase;++fun s_049_1_p : FraCaSPhrase;+fun s_049_2_p : FraCaSPhrase;+fun s_049_3_q : FraCaSPhrase;+fun s_049_4_h : FraCaSPhrase;++fun s_050_1_p : FraCaSPhrase;+fun s_050_2_p : FraCaSPhrase;+fun s_050_3_q : FraCaSPhrase;+fun s_050_4_h : FraCaSPhrase;++fun s_051_1_p : FraCaSPhrase;+fun s_051_2_p : FraCaSPhrase;+fun s_051_3_q : FraCaSPhrase;+fun s_051_4_h : FraCaSPhrase;++fun s_052_1_p : FraCaSPhrase;+fun s_052_2_p : FraCaSPhrase;+fun s_052_3_q : FraCaSPhrase;+fun s_052_4_h : FraCaSPhrase;++fun s_053_1_p : FraCaSPhrase;+fun s_053_2_p : FraCaSPhrase;+fun s_053_3_q : FraCaSPhrase;+fun s_053_4_h : FraCaSPhrase;++fun s_054_1_p : FraCaSPhrase;+fun s_054_2_q : FraCaSPhrase;+fun s_054_3_h : FraCaSPhrase;++fun s_055_1_p : FraCaSPhrase;+fun s_055_2_q : FraCaSPhrase;+fun s_055_3_h : FraCaSPhrase;++fun s_056_1_p : FraCaSPhrase;+fun s_056_2_q : FraCaSPhrase;+fun s_056_3_h : FraCaSPhrase;++fun s_057_1_p : FraCaSPhrase;+fun s_057_2_q : FraCaSPhrase;+fun s_057_3_h : FraCaSPhrase;++fun s_058_1_p : FraCaSPhrase;+fun s_058_2_q : FraCaSPhrase;+fun s_058_3_h : FraCaSPhrase;++fun s_059_1_p : FraCaSPhrase;+fun s_059_2_q : FraCaSPhrase;+fun s_059_3_h : FraCaSPhrase;++fun s_060_1_p : FraCaSPhrase;+fun s_060_2_q : FraCaSPhrase;+fun s_060_3_h : FraCaSPhrase;++fun s_061_1_p : FraCaSPhrase;+fun s_061_2_q : FraCaSPhrase;+fun s_061_3_h : FraCaSPhrase;++fun s_062_1_p : FraCaSPhrase;+fun s_062_2_q : FraCaSPhrase;+fun s_062_3_h : FraCaSPhrase;++fun s_063_1_p : FraCaSPhrase;+fun s_063_2_q : FraCaSPhrase;+fun s_063_3_h : FraCaSPhrase;++fun s_064_1_p : FraCaSPhrase;+fun s_064_2_q : FraCaSPhrase;+fun s_064_3_h : FraCaSPhrase;++fun s_065_1_p : FraCaSPhrase;+fun s_065_2_p : FraCaSPhrase;+fun s_065_3_q : FraCaSPhrase;+fun s_065_4_h : FraCaSPhrase;++fun s_066_1_p : FraCaSPhrase;+fun s_066_2_p : FraCaSPhrase;+fun s_066_3_q : FraCaSPhrase;+fun s_066_4_h : FraCaSPhrase;++fun s_067_1_p : FraCaSPhrase;+fun s_067_2_p : FraCaSPhrase;+fun s_067_3_q : FraCaSPhrase;+fun s_067_4_h : FraCaSPhrase;++fun s_068_1_p : FraCaSPhrase;+fun s_068_2_p : FraCaSPhrase;+fun s_068_3_q : FraCaSPhrase;+fun s_068_4_h : FraCaSPhrase;++fun s_069_1_p : FraCaSPhrase;+fun s_069_2_p : FraCaSPhrase;+fun s_069_3_q : FraCaSPhrase;+fun s_069_4_h : FraCaSPhrase;++fun s_070_1_p : FraCaSPhrase;+fun s_070_2_q : FraCaSPhrase;+fun s_070_3_h : FraCaSPhrase;++fun s_071_1_p : FraCaSPhrase;+fun s_071_2_q : FraCaSPhrase;+fun s_071_3_h : FraCaSPhrase;++fun s_072_1_p : FraCaSPhrase;+fun s_072_2_q : FraCaSPhrase;+fun s_072_3_h : FraCaSPhrase;++fun s_073_1_p : FraCaSPhrase;+fun s_073_2_q : FraCaSPhrase;+fun s_073_3_h : FraCaSPhrase;++fun s_074_1_p : FraCaSPhrase;+fun s_074_2_q : FraCaSPhrase;+fun s_074_3_h : FraCaSPhrase;++fun s_075_1_p : FraCaSPhrase;+fun s_075_2_q : FraCaSPhrase;+fun s_075_3_h : FraCaSPhrase;++fun s_076_1_p : FraCaSPhrase;+fun s_076_2_q : FraCaSPhrase;+fun s_076_3_h : FraCaSPhrase;++fun s_077_1_p : FraCaSPhrase;+fun s_077_2_q : FraCaSPhrase;+fun s_077_3_h : FraCaSPhrase;++fun s_078_1_p : FraCaSPhrase;+fun s_078_2_q : FraCaSPhrase;+fun s_078_3_h : FraCaSPhrase;++fun s_079_1_p : FraCaSPhrase;+fun s_079_2_q : FraCaSPhrase;+fun s_079_3_h : FraCaSPhrase;++fun s_080_1_p : FraCaSPhrase;+fun s_080_2_q : FraCaSPhrase;+fun s_080_3_h : FraCaSPhrase;++fun s_081_1_p : FraCaSPhrase;+fun s_081_2_q : FraCaSPhrase;+fun s_081_3_h : FraCaSPhrase;++fun s_082_1_p : FraCaSPhrase;+fun s_082_2_q : FraCaSPhrase;+fun s_082_3_h : FraCaSPhrase;++fun s_083_1_p : FraCaSPhrase;+fun s_083_2_q : FraCaSPhrase;+fun s_083_3_h : FraCaSPhrase;++fun s_084_1_p : FraCaSPhrase;+fun s_084_2_q : FraCaSPhrase;+fun s_084_3_h : FraCaSPhrase;++fun s_085_1_p : FraCaSPhrase;+fun s_085_2_q : FraCaSPhrase;+fun s_085_3_h : FraCaSPhrase;++fun s_086_1_p : FraCaSPhrase;+fun s_086_2_q : FraCaSPhrase;+fun s_086_3_h : FraCaSPhrase;++fun s_087_1_p : FraCaSPhrase;+fun s_087_2_q : FraCaSPhrase;+fun s_087_3_h : FraCaSPhrase;++fun s_088_1_p : FraCaSPhrase;+fun s_088_2_q : FraCaSPhrase;+fun s_088_3_h : FraCaSPhrase;++fun s_089_1_p : FraCaSPhrase;+fun s_089_2_q : FraCaSPhrase;+fun s_089_3_h : FraCaSPhrase;++fun s_090_1_p : FraCaSPhrase;+fun s_090_2_q : FraCaSPhrase;+fun s_090_3_h : FraCaSPhrase;++fun s_091_1_p : FraCaSPhrase;+fun s_091_2_q : FraCaSPhrase;+fun s_091_3_h : FraCaSPhrase;++fun s_092_1_p : FraCaSPhrase;+fun s_092_2_q : FraCaSPhrase;+fun s_092_3_h : FraCaSPhrase;++fun s_093_1_p : FraCaSPhrase;+fun s_093_2_q : FraCaSPhrase;+fun s_093_3_h : FraCaSPhrase;++fun s_094_1_p : FraCaSPhrase;+fun s_094_2_q : FraCaSPhrase;+fun s_094_3_h : FraCaSPhrase;++fun s_095_1_p : FraCaSPhrase;+fun s_095_2_q : FraCaSPhrase;+fun s_095_3_h : FraCaSPhrase;++fun s_096_1_p : FraCaSPhrase;+fun s_096_2_q : FraCaSPhrase;+fun s_096_3_h : FraCaSPhrase;++fun s_097_1_p : FraCaSPhrase;+fun s_097_2_q : FraCaSPhrase;+fun s_097_3_h : FraCaSPhrase;++fun s_098_1_p : FraCaSPhrase;+fun s_098_2_p : FraCaSPhrase;+fun s_098_3_q : FraCaSPhrase;+fun s_098_4_h : FraCaSPhrase;++fun s_099_1_p : FraCaSPhrase;+fun s_099_2_p : FraCaSPhrase;+fun s_099_3_q : FraCaSPhrase;+fun s_099_4_h : FraCaSPhrase;++fun s_100_1_p : FraCaSPhrase;+fun s_100_2_q : FraCaSPhrase;+fun s_100_3_h : FraCaSPhrase;++fun s_101_1_p : FraCaSPhrase;+fun s_101_2_p : FraCaSPhrase;+fun s_101_3_q : FraCaSPhrase;+fun s_101_4_h : FraCaSPhrase;++fun s_102_1_p : FraCaSPhrase;+fun s_102_2_p : FraCaSPhrase;+fun s_102_3_q : FraCaSPhrase;+fun s_102_4_h : FraCaSPhrase;++fun s_103_1_p : FraCaSPhrase;+fun s_103_2_p : FraCaSPhrase;+fun s_103_3_q : FraCaSPhrase;+fun s_103_4_h : FraCaSPhrase;++fun s_104_1_p : FraCaSPhrase;+fun s_104_2_p : FraCaSPhrase;+fun s_104_3_q : FraCaSPhrase;+fun s_104_4_h : FraCaSPhrase;++fun s_105_1_p : FraCaSPhrase;+fun s_105_2_q : FraCaSPhrase;+fun s_105_3_h : FraCaSPhrase;++fun s_106_1_p : FraCaSPhrase;+fun s_106_2_q : FraCaSPhrase;+fun s_106_3_h : FraCaSPhrase;++fun s_107_1_p : FraCaSPhrase;+fun s_107_2_q : FraCaSPhrase;+fun s_107_3_h : FraCaSPhrase;++fun s_108_1_p : FraCaSPhrase;+fun s_108_2_q : FraCaSPhrase;+fun s_108_3_h : FraCaSPhrase;++fun s_109_1_p : FraCaSPhrase;+fun s_109_2_q : FraCaSPhrase;+fun s_109_3_h : FraCaSPhrase;++fun s_110_1_p : FraCaSPhrase;+fun s_110_2_q : FraCaSPhrase;+fun s_110_3_h : FraCaSPhrase;++fun s_111_1_p : FraCaSPhrase;+fun s_111_2_p : FraCaSPhrase;+fun s_111_3_q : FraCaSPhrase;+fun s_111_4_h : FraCaSPhrase;++fun s_112_1_p : FraCaSPhrase;+fun s_112_2_p : FraCaSPhrase;+fun s_112_3_q : FraCaSPhrase;+fun s_112_4_h : FraCaSPhrase;++fun s_113_1_p : FraCaSPhrase;+fun s_113_2_p : FraCaSPhrase;+fun s_113_3_q : FraCaSPhrase;+fun s_113_4_h : FraCaSPhrase;++fun s_114_1_p : FraCaSPhrase;+fun s_114_2_q : FraCaSPhrase;+fun s_114_3_h : FraCaSPhrase;++fun s_115_1_p : FraCaSPhrase;+fun s_115_2_q : FraCaSPhrase;+fun s_115_3_h : FraCaSPhrase;++fun s_116_1_p : FraCaSPhrase;+fun s_116_2_q : FraCaSPhrase;+fun s_116_3_h : FraCaSPhrase;++fun s_117_1_p : FraCaSPhrase;+fun s_117_2_p : FraCaSPhrase;+fun s_117_3_q : FraCaSPhrase;+fun s_117_4_h : FraCaSPhrase;++fun s_118_1_p : FraCaSPhrase;+fun s_118_2_p : FraCaSPhrase;+fun s_118_3_q : FraCaSPhrase;+fun s_118_4_h : FraCaSPhrase;++fun s_119_1_p : FraCaSPhrase;+fun s_119_2_p : FraCaSPhrase;+fun s_119_3_q : FraCaSPhrase;+fun s_119_4_h : FraCaSPhrase;++fun s_120_1_p : FraCaSPhrase;+fun s_120_2_p : FraCaSPhrase;+fun s_120_3_q : FraCaSPhrase;+fun s_120_4_h : FraCaSPhrase;++fun s_121_1_p : FraCaSPhrase;+fun s_121_2_p : FraCaSPhrase;+fun s_121_3_p : FraCaSPhrase;+fun s_121_4_q : FraCaSPhrase;+fun s_121_5_h : FraCaSPhrase;++fun s_122_1_p : FraCaSPhrase;+fun s_122_2_p : FraCaSPhrase;+fun s_122_3_q : FraCaSPhrase;+fun s_122_4_h : FraCaSPhrase;++fun s_123_1_p : FraCaSPhrase;+fun s_123_2_p : FraCaSPhrase;+fun s_123_3_q : FraCaSPhrase;+fun s_123_4_h : FraCaSPhrase;++fun s_124_1_p : FraCaSPhrase;+fun s_124_2_p : FraCaSPhrase;+fun s_124_3_q : FraCaSPhrase;+fun s_124_4_h : FraCaSPhrase;++fun s_125_1_p : FraCaSPhrase;+fun s_125_2_p : FraCaSPhrase;+fun s_125_3_q : FraCaSPhrase;+fun s_125_4_h : FraCaSPhrase;++fun s_126_1_p : FraCaSPhrase;+fun s_126_2_p : FraCaSPhrase;+fun s_126_3_q : FraCaSPhrase;+fun s_126_4_h : FraCaSPhrase;++fun s_127_1_p : FraCaSPhrase;+fun s_127_2_p : FraCaSPhrase;+fun s_127_3_q : FraCaSPhrase;+fun s_127_4_h : FraCaSPhrase;++fun s_128_1_p : FraCaSPhrase;+fun s_128_2_p : FraCaSPhrase;+fun s_128_3_q : FraCaSPhrase;+fun s_128_4_h : FraCaSPhrase;++fun s_129_1_p : FraCaSPhrase;+fun s_129_2_p : FraCaSPhrase;+fun s_129_3_q : FraCaSPhrase;+fun s_129_4_h : FraCaSPhrase;++fun s_130_1_p : FraCaSPhrase;+fun s_130_2_p : FraCaSPhrase;+fun s_130_3_q : FraCaSPhrase;+fun s_130_4_h : FraCaSPhrase;++fun s_131_1_p : FraCaSPhrase;+fun s_131_2_p : FraCaSPhrase;+fun s_131_3_q : FraCaSPhrase;+fun s_131_4_h : FraCaSPhrase;++fun s_132_1_p : FraCaSPhrase;+fun s_132_2_p : FraCaSPhrase;+fun s_132_3_q : FraCaSPhrase;+fun s_132_4_h : FraCaSPhrase;++fun s_133_1_p : FraCaSPhrase;+fun s_133_2_p : FraCaSPhrase;+fun s_133_3_q : FraCaSPhrase;+fun s_133_4_h : FraCaSPhrase;++fun s_134_1_p : FraCaSPhrase;+fun s_134_2_p : FraCaSPhrase;+fun s_134_3_q : FraCaSPhrase;+fun s_134_4_h : FraCaSPhrase;++fun s_135_1_p : FraCaSPhrase;+fun s_135_2_p : FraCaSPhrase;+fun s_135_3_q : FraCaSPhrase;+fun s_135_4_h : FraCaSPhrase;++fun s_136_1_p : FraCaSPhrase;+fun s_136_2_p : FraCaSPhrase;+fun s_136_3_q : FraCaSPhrase;+fun s_136_4_h : FraCaSPhrase;++fun s_137_1_p : FraCaSPhrase;+fun s_137_2_p : FraCaSPhrase;+fun s_137_3_p : FraCaSPhrase;+fun s_137_4_p : FraCaSPhrase;+fun s_137_5_p : FraCaSPhrase;+fun s_137_6_q : FraCaSPhrase;+fun s_137_7_h : FraCaSPhrase;++fun s_138_1_p : FraCaSPhrase;+fun s_138_2_p : FraCaSPhrase;+fun s_138_3_p : FraCaSPhrase;+fun s_138_4_q : FraCaSPhrase;+fun s_138_5_h : FraCaSPhrase;++fun s_139_1_p : FraCaSPhrase;+fun s_139_2_q : FraCaSPhrase;+fun s_139_3_h : FraCaSPhrase;++fun s_140_1_p : FraCaSPhrase;+fun s_140_2_q : FraCaSPhrase;+fun s_140_3_h : FraCaSPhrase;++fun s_141_1_p : FraCaSPhrase;+fun s_141_2_q : FraCaSPhrase;+fun s_141_3_h : FraCaSPhrase;++fun s_142_1_p : FraCaSPhrase;+fun s_142_2_p : FraCaSPhrase;+fun s_142_3_q : FraCaSPhrase;+fun s_142_4_h : FraCaSPhrase;++fun s_143_1_p : FraCaSPhrase;+fun s_143_2_p : FraCaSPhrase;+fun s_143_3_p : FraCaSPhrase;+fun s_143_4_q : FraCaSPhrase;+fun s_143_5_h : FraCaSPhrase;++fun s_144_1_p : FraCaSPhrase;+fun s_144_2_p : FraCaSPhrase;+fun s_144_3_q : FraCaSPhrase;+fun s_144_4_h : FraCaSPhrase;++fun s_145_1_p : FraCaSPhrase;+fun s_145_2_p : FraCaSPhrase;+fun s_145_3_q : FraCaSPhrase;+fun s_145_4_h : FraCaSPhrase;++fun s_146_1_p : FraCaSPhrase;+fun s_146_2_p : FraCaSPhrase;+fun s_146_3_q : FraCaSPhrase;+fun s_146_4_h : FraCaSPhrase;++fun s_147_1_p : FraCaSPhrase;+fun s_147_2_p : FraCaSPhrase;+fun s_147_3_q : FraCaSPhrase;+fun s_147_4_h : FraCaSPhrase;++fun s_148_1_p : FraCaSPhrase;+fun s_148_2_p : FraCaSPhrase;+fun s_148_3_q : FraCaSPhrase;+fun s_148_4_h : FraCaSPhrase;++fun s_149_1_p : FraCaSPhrase;+fun s_149_2_p : FraCaSPhrase;+fun s_149_3_q : FraCaSPhrase;+fun s_149_4_h : FraCaSPhrase;++fun s_150_1_p : FraCaSPhrase;+fun s_150_2_q : FraCaSPhrase;+fun s_150_3_h : FraCaSPhrase;++fun s_151_1_p : FraCaSPhrase;+fun s_151_2_q : FraCaSPhrase;+fun s_151_3_h : FraCaSPhrase;++fun s_152_1_p : FraCaSPhrase;+fun s_152_2_q : FraCaSPhrase;+fun s_152_3_h : FraCaSPhrase;++fun s_153_1_p : FraCaSPhrase;+fun s_153_2_q : FraCaSPhrase;+fun s_153_3_h : FraCaSPhrase;++fun s_154_1_p : FraCaSPhrase;+fun s_154_2_p : FraCaSPhrase;+fun s_154_3_q : FraCaSPhrase;+fun s_154_4_h : FraCaSPhrase;++fun s_155_1_p : FraCaSPhrase;+fun s_155_2_p : FraCaSPhrase;+fun s_155_3_q : FraCaSPhrase;+fun s_155_4_h : FraCaSPhrase;++fun s_156_1_p : FraCaSPhrase;+fun s_156_2_p : FraCaSPhrase;+fun s_156_3_q : FraCaSPhrase;+fun s_156_4_h : FraCaSPhrase;++fun s_157_1_p : FraCaSPhrase;+fun s_157_2_p : FraCaSPhrase;+fun s_157_3_q : FraCaSPhrase;+fun s_157_4_h : FraCaSPhrase;++fun s_158_1_p : FraCaSPhrase;+fun s_158_2_p : FraCaSPhrase;+fun s_158_3_q : FraCaSPhrase;+fun s_158_4_h : FraCaSPhrase;++fun s_159_1_p : FraCaSPhrase;+fun s_159_2_p : FraCaSPhrase;+fun s_159_3_q : FraCaSPhrase;+fun s_159_4_h : FraCaSPhrase;++fun s_160_1_p : FraCaSPhrase;+fun s_160_2_p : FraCaSPhrase;+fun s_160_3_q : FraCaSPhrase;+fun s_160_4_h : FraCaSPhrase;++fun s_161_1_p : FraCaSPhrase;+fun s_161_2_p : FraCaSPhrase;+fun s_161_3_q : FraCaSPhrase;+fun s_161_4_h : FraCaSPhrase;++fun s_162_1_p : FraCaSPhrase;+fun s_162_2_p : FraCaSPhrase;+fun s_162_3_q : FraCaSPhrase;+fun s_162_4_h : FraCaSPhrase;++fun s_163_1_p : FraCaSPhrase;+fun s_163_2_p : FraCaSPhrase;+fun s_163_3_q : FraCaSPhrase;+fun s_163_4_h : FraCaSPhrase;++fun s_164_1_p : FraCaSPhrase;+fun s_164_2_p : FraCaSPhrase;+fun s_164_3_q : FraCaSPhrase;+fun s_164_4_h : FraCaSPhrase;++fun s_165_1_p : FraCaSPhrase;+fun s_165_2_p : FraCaSPhrase;+fun s_165_3_q : FraCaSPhrase;+fun s_165_4_h : FraCaSPhrase;++fun s_166_1_p : FraCaSPhrase;+fun s_166_2_p : FraCaSPhrase;+fun s_166_3_q : FraCaSPhrase;+fun s_166_4_h : FraCaSPhrase;++fun s_167_1_p : FraCaSPhrase;+fun s_167_2_p : FraCaSPhrase;+fun s_167_3_q : FraCaSPhrase;+fun s_167_4_h : FraCaSPhrase;++fun s_168_1_p : FraCaSPhrase;+fun s_168_2_p : FraCaSPhrase;+fun s_168_3_q : FraCaSPhrase;+fun s_168_4_h : FraCaSPhrase;++fun s_169_1_p : FraCaSPhrase;+fun s_169_2_q : FraCaSPhrase;+fun s_169_3_h : FraCaSPhrase;++fun s_170_1_p : FraCaSPhrase;+fun s_170_2_q : FraCaSPhrase;+fun s_170_3_h : FraCaSPhrase;++fun s_171_1_p : FraCaSPhrase;+fun s_171_2_p : FraCaSPhrase;+fun s_171_3_q : FraCaSPhrase;+fun s_171_4_h : FraCaSPhrase;++fun s_172_1_p : FraCaSPhrase;+fun s_172_2_q : FraCaSPhrase;+fun s_172_3_h : FraCaSPhrase;++fun s_173_1_p : FraCaSPhrase;+fun s_173_2_p : FraCaSPhrase;+fun s_173_3_q : FraCaSPhrase;+fun s_173_4_h : FraCaSPhrase;++fun s_174_1_p : FraCaSPhrase;+fun s_174_2_p : FraCaSPhrase;+fun s_174_3_q : FraCaSPhrase;+fun s_174_4_h : FraCaSPhrase;++fun s_175_1_p : FraCaSPhrase;+fun s_175_2_q : FraCaSPhrase;+fun s_175_3_h : FraCaSPhrase;++fun s_176_1_p : FraCaSPhrase;+fun s_176_2_q : FraCaSPhrase;+fun s_176_3_h : FraCaSPhrase;++fun s_177_1_p : FraCaSPhrase;+fun s_177_1_p_NEW : FraCaSPhrase;+fun s_177_2_q : FraCaSPhrase;+fun s_177_3_h : FraCaSPhrase;++fun s_178_1_p : FraCaSPhrase;+fun s_178_2_q : FraCaSPhrase;+fun s_178_3_h : FraCaSPhrase;++fun s_179_1_p : FraCaSPhrase;+fun s_179_2_p : FraCaSPhrase;+fun s_179_3_q : FraCaSPhrase;+fun s_179_4_h : FraCaSPhrase;++fun s_180_1_p : FraCaSPhrase;+fun s_180_2_q : FraCaSPhrase;+fun s_180_3_h : FraCaSPhrase;++fun s_181_1_p : FraCaSPhrase;+fun s_181_2_q : FraCaSPhrase;+fun s_181_3_h : FraCaSPhrase;++fun s_182_1_p : FraCaSPhrase;+fun s_182_2_q : FraCaSPhrase;+fun s_182_3_h : FraCaSPhrase;++fun s_183_1_p : FraCaSPhrase;+fun s_183_2_q : FraCaSPhrase;+fun s_183_3_h : FraCaSPhrase;++fun s_184_1_p : FraCaSPhrase;+fun s_184_2_q : FraCaSPhrase;+fun s_184_3_h : FraCaSPhrase;++fun s_185_1_p : FraCaSPhrase;+fun s_185_2_q : FraCaSPhrase;+fun s_185_3_h : FraCaSPhrase;++fun s_186_1_p : FraCaSPhrase;+fun s_186_2_q : FraCaSPhrase;+fun s_186_3_h : FraCaSPhrase;++fun s_187_1_p : FraCaSPhrase;+fun s_187_2_q : FraCaSPhrase;+fun s_187_3_h : FraCaSPhrase;++fun s_188_1_p : FraCaSPhrase;+fun s_188_2_q : FraCaSPhrase;+fun s_188_3_h : FraCaSPhrase;++fun s_189_1_p : FraCaSPhrase;+fun s_189_2_p : FraCaSPhrase;+fun s_189_3_q : FraCaSPhrase;+fun s_189_4_h : FraCaSPhrase;++fun s_190_1_p : FraCaSPhrase;+fun s_190_2_p : FraCaSPhrase;+fun s_190_3_q : FraCaSPhrase;+fun s_190_4_h : FraCaSPhrase;++fun s_191_1_p : FraCaSPhrase;+fun s_191_2_q : FraCaSPhrase;+fun s_191_3_h : FraCaSPhrase;++fun s_192_1_p : FraCaSPhrase;+fun s_192_2_q : FraCaSPhrase;+fun s_192_3_h : FraCaSPhrase;++fun s_193_1_p : FraCaSPhrase;+fun s_193_2_q : FraCaSPhrase;+fun s_193_3_h : FraCaSPhrase;++fun s_194_1_p : FraCaSPhrase;+fun s_194_2_q : FraCaSPhrase;+fun s_194_3_h : FraCaSPhrase;++fun s_195_1_p : FraCaSPhrase;+fun s_195_2_q : FraCaSPhrase;+fun s_195_3_h : FraCaSPhrase;++fun s_196_1_p : FraCaSPhrase;+fun s_196_2_p : FraCaSPhrase;+fun s_196_3_q : FraCaSPhrase;+fun s_196_4_h : FraCaSPhrase;++fun s_197_1_p : FraCaSPhrase;+fun s_197_2_q : FraCaSPhrase;+fun s_197_3_h : FraCaSPhrase;++fun s_198_1_p : FraCaSPhrase;+fun s_198_2_q : FraCaSPhrase;+fun s_198_3_h : FraCaSPhrase;++fun s_199_1_p : FraCaSPhrase;+fun s_199_2_q : FraCaSPhrase;+fun s_199_3_h : FraCaSPhrase;++fun s_200_1_p : FraCaSPhrase;+fun s_200_2_q : FraCaSPhrase;+fun s_200_3_h : FraCaSPhrase;++fun s_201_1_p : FraCaSPhrase;+fun s_201_2_q : FraCaSPhrase;+fun s_201_3_h : FraCaSPhrase;++fun s_202_1_p : FraCaSPhrase;+fun s_202_2_q : FraCaSPhrase;+fun s_202_3_h : FraCaSPhrase;++fun s_203_1_p : FraCaSPhrase;+fun s_203_2_q : FraCaSPhrase;+fun s_203_3_h : FraCaSPhrase;++fun s_204_1_p : FraCaSPhrase;+fun s_204_2_q : FraCaSPhrase;+fun s_204_3_h : FraCaSPhrase;++fun s_205_1_p : FraCaSPhrase;+fun s_205_2_q : FraCaSPhrase;+fun s_205_3_h : FraCaSPhrase;++fun s_206_1_p : FraCaSPhrase;+fun s_206_2_q : FraCaSPhrase;+fun s_206_3_h : FraCaSPhrase;++fun s_207_1_p : FraCaSPhrase;+fun s_207_2_q : FraCaSPhrase;+fun s_207_3_h : FraCaSPhrase;++fun s_208_1_p : FraCaSPhrase;+fun s_208_2_p : FraCaSPhrase;+fun s_208_3_q : FraCaSPhrase;+fun s_208_4_h : FraCaSPhrase;++fun s_209_1_p : FraCaSPhrase;+fun s_209_2_p : FraCaSPhrase;+fun s_209_3_q : FraCaSPhrase;+fun s_209_4_h : FraCaSPhrase;++fun s_210_1_p : FraCaSPhrase;+fun s_210_2_p : FraCaSPhrase;+fun s_210_3_q : FraCaSPhrase;+fun s_210_4_h : FraCaSPhrase;++fun s_211_1_p : FraCaSPhrase;+fun s_211_2_p : FraCaSPhrase;+fun s_211_3_q : FraCaSPhrase;+fun s_211_4_h : FraCaSPhrase;++fun s_212_1_p : FraCaSPhrase;+fun s_212_2_p : FraCaSPhrase;+fun s_212_3_p : FraCaSPhrase;+fun s_212_4_p : FraCaSPhrase;+fun s_212_5_q : FraCaSPhrase;+fun s_212_6_h : FraCaSPhrase;++fun s_213_1_p : FraCaSPhrase;+fun s_213_2_p : FraCaSPhrase;+fun s_213_3_q : FraCaSPhrase;+fun s_213_4_h : FraCaSPhrase;++fun s_214_1_p : FraCaSPhrase;+fun s_214_2_p : FraCaSPhrase;+fun s_214_3_q : FraCaSPhrase;+fun s_214_4_h : FraCaSPhrase;++fun s_215_1_p : FraCaSPhrase;+fun s_215_2_p : FraCaSPhrase;+fun s_215_3_q : FraCaSPhrase;+fun s_215_4_h : FraCaSPhrase;++fun s_216_1_p : FraCaSPhrase;+fun s_216_2_q : FraCaSPhrase;+fun s_216_3_h : FraCaSPhrase;++fun s_217_1_p : FraCaSPhrase;+fun s_217_2_q : FraCaSPhrase;+fun s_217_3_h : FraCaSPhrase;++fun s_218_1_p : FraCaSPhrase;+fun s_218_2_q : FraCaSPhrase;+fun s_218_3_h : FraCaSPhrase;++fun s_219_1_p : FraCaSPhrase;+fun s_219_2_q : FraCaSPhrase;+fun s_219_3_h : FraCaSPhrase;++fun s_220_1_p : FraCaSPhrase;+fun s_220_2_p : FraCaSPhrase;+fun s_220_3_q : FraCaSPhrase;+fun s_220_4_h : FraCaSPhrase;++fun s_221_1_p : FraCaSPhrase;+fun s_221_2_q : FraCaSPhrase;+fun s_221_3_h : FraCaSPhrase;++fun s_222_1_p : FraCaSPhrase;+fun s_222_2_p : FraCaSPhrase;+fun s_222_3_q : FraCaSPhrase;+fun s_222_4_h : FraCaSPhrase;++fun s_223_1_p : FraCaSPhrase;+fun s_223_2_p : FraCaSPhrase;+fun s_223_3_q : FraCaSPhrase;+fun s_223_4_h : FraCaSPhrase;++fun s_224_1_p : FraCaSPhrase;+fun s_224_2_p : FraCaSPhrase;+fun s_224_3_q : FraCaSPhrase;+fun s_224_4_h : FraCaSPhrase;++fun s_225_1_p : FraCaSPhrase;+fun s_225_2_q : FraCaSPhrase;+fun s_225_3_h : FraCaSPhrase;++fun s_226_1_p : FraCaSPhrase;+fun s_226_2_p : FraCaSPhrase;+fun s_226_3_q : FraCaSPhrase;+fun s_226_4_h : FraCaSPhrase;++fun s_227_1_p : FraCaSPhrase;+fun s_227_2_p : FraCaSPhrase;+fun s_227_3_q : FraCaSPhrase;+fun s_227_4_h : FraCaSPhrase;++fun s_228_1_p : FraCaSPhrase;+fun s_228_2_q : FraCaSPhrase;+fun s_228_3_h : FraCaSPhrase;++fun s_229_1_p : FraCaSPhrase;+fun s_229_2_q : FraCaSPhrase;+fun s_229_3_h : FraCaSPhrase;++fun s_230_1_p : FraCaSPhrase;+fun s_230_2_q : FraCaSPhrase;+fun s_230_3_h : FraCaSPhrase;++fun s_231_1_p : FraCaSPhrase;+fun s_231_2_q : FraCaSPhrase;+fun s_231_3_h : FraCaSPhrase;++fun s_232_1_p : FraCaSPhrase;+fun s_232_2_p : FraCaSPhrase;+fun s_232_3_q : FraCaSPhrase;+fun s_232_4_h : FraCaSPhrase;++fun s_233_1_p : FraCaSPhrase;+fun s_233_2_q : FraCaSPhrase;+fun s_233_3_h : FraCaSPhrase;++fun s_234_1_p : FraCaSPhrase;+fun s_234_2_q : FraCaSPhrase;+fun s_234_3_h : FraCaSPhrase;++fun s_235_1_p : FraCaSPhrase;+fun s_235_2_p : FraCaSPhrase;+fun s_235_3_q : FraCaSPhrase;+fun s_235_4_h : FraCaSPhrase;++fun s_236_1_p : FraCaSPhrase;+fun s_236_2_q : FraCaSPhrase;+fun s_236_3_h : FraCaSPhrase;++fun s_237_1_p : FraCaSPhrase;+fun s_237_2_q : FraCaSPhrase;+fun s_237_3_h : FraCaSPhrase;++fun s_238_1_p : FraCaSPhrase;+fun s_238_2_p : FraCaSPhrase;+fun s_238_3_q : FraCaSPhrase;+fun s_238_4_h : FraCaSPhrase;++fun s_239_1_p : FraCaSPhrase;+fun s_239_2_q : FraCaSPhrase;+fun s_239_3_h : FraCaSPhrase;++fun s_240_1_p : FraCaSPhrase;+fun s_240_2_q : FraCaSPhrase;+fun s_240_3_h : FraCaSPhrase;++fun s_241_1_p : FraCaSPhrase;+fun s_241_2_p : FraCaSPhrase;+fun s_241_3_q : FraCaSPhrase;+fun s_241_4_h : FraCaSPhrase;++fun s_242_1_p : FraCaSPhrase;+fun s_242_2_p : FraCaSPhrase;+fun s_242_3_q : FraCaSPhrase;+fun s_242_4_h : FraCaSPhrase;++fun s_243_1_p : FraCaSPhrase;+fun s_243_2_p : FraCaSPhrase;+fun s_243_3_q : FraCaSPhrase;+fun s_243_4_h : FraCaSPhrase;++fun s_244_1_p : FraCaSPhrase;+fun s_244_2_q : FraCaSPhrase;+fun s_244_3_h : FraCaSPhrase;++fun s_245_1_p : FraCaSPhrase;+fun s_245_2_q : FraCaSPhrase;+fun s_245_3_h : FraCaSPhrase;++fun s_246_1_p : FraCaSPhrase;+fun s_246_2_p : FraCaSPhrase;+fun s_246_3_q : FraCaSPhrase;+fun s_246_4_h : FraCaSPhrase;++fun s_247_1_p : FraCaSPhrase;+fun s_247_2_p : FraCaSPhrase;+fun s_247_3_q : FraCaSPhrase;+fun s_247_4_h : FraCaSPhrase;++fun s_248_1_p : FraCaSPhrase;+fun s_248_2_p : FraCaSPhrase;+fun s_248_3_q : FraCaSPhrase;+fun s_248_4_h : FraCaSPhrase;++fun s_249_1_p : FraCaSPhrase;+fun s_249_2_q : FraCaSPhrase;+fun s_249_3_h : FraCaSPhrase;++fun s_250_1_p : FraCaSPhrase;+fun s_250_2_q : FraCaSPhrase;+fun s_250_3_h : FraCaSPhrase;++fun s_251_1_p : FraCaSPhrase;+fun s_251_2_q : FraCaSPhrase;+fun s_251_3_h : FraCaSPhrase;++fun s_252_1_p : FraCaSPhrase;+fun s_252_2_p : FraCaSPhrase;+fun s_252_3_q : FraCaSPhrase;+fun s_252_4_h : FraCaSPhrase;++fun s_253_1_p : FraCaSPhrase;+fun s_253_2_p : FraCaSPhrase;+fun s_253_3_q : FraCaSPhrase;+fun s_253_4_h : FraCaSPhrase;++fun s_254_1_p : FraCaSPhrase;+fun s_254_2_p : FraCaSPhrase;+fun s_254_3_q : FraCaSPhrase;+fun s_254_4_h : FraCaSPhrase;++fun s_255_1_p : FraCaSPhrase;+fun s_255_2_p : FraCaSPhrase;+fun s_255_3_q : FraCaSPhrase;+fun s_255_4_h : FraCaSPhrase;++fun s_256_1_p : FraCaSPhrase;+fun s_256_2_p : FraCaSPhrase;+fun s_256_3_q : FraCaSPhrase;+fun s_256_4_h : FraCaSPhrase;++fun s_257_1_p : FraCaSPhrase;+fun s_257_2_p : FraCaSPhrase;+fun s_257_3_q : FraCaSPhrase;+fun s_257_4_h : FraCaSPhrase;++fun s_258_1_p : FraCaSPhrase;+fun s_258_2_q : FraCaSPhrase;+fun s_258_3_h : FraCaSPhrase;++fun s_259_1_p : FraCaSPhrase;+fun s_259_2_p : FraCaSPhrase;+fun s_259_3_q : FraCaSPhrase;+fun s_259_4_h : FraCaSPhrase;++fun s_260_1_p : FraCaSPhrase;+fun s_260_2_p : FraCaSPhrase;+fun s_260_3_q : FraCaSPhrase;+fun s_260_4_h : FraCaSPhrase;++fun s_261_1_p : FraCaSPhrase;+fun s_261_2_p : FraCaSPhrase;+fun s_261_3_q : FraCaSPhrase;+fun s_261_4_h : FraCaSPhrase;++fun s_262_1_p : FraCaSPhrase;+fun s_262_2_p : FraCaSPhrase;+fun s_262_3_q : FraCaSPhrase;+fun s_262_4_h : FraCaSPhrase;++fun s_263_1_p : FraCaSPhrase;+fun s_263_2_p : FraCaSPhrase;+fun s_263_3_q : FraCaSPhrase;+fun s_263_4_h : FraCaSPhrase;++fun s_264_1_p : FraCaSPhrase;+fun s_264_2_p : FraCaSPhrase;+fun s_264_3_p : FraCaSPhrase;+fun s_264_4_q : FraCaSPhrase;+fun s_264_5_h : FraCaSPhrase;++fun s_265_1_p : FraCaSPhrase;+fun s_265_2_p : FraCaSPhrase;+fun s_265_3_p : FraCaSPhrase;+fun s_265_4_q : FraCaSPhrase;+fun s_265_5_h : FraCaSPhrase;++fun s_266_1_p : FraCaSPhrase;+fun s_266_2_p : FraCaSPhrase;+fun s_266_3_p : FraCaSPhrase;+fun s_266_4_q : FraCaSPhrase;+fun s_266_5_h : FraCaSPhrase;++fun s_267_1_p : FraCaSPhrase;+fun s_267_2_p : FraCaSPhrase;+fun s_267_3_p : FraCaSPhrase;+fun s_267_4_q : FraCaSPhrase;+fun s_267_5_h : FraCaSPhrase;++fun s_268_1_p : FraCaSPhrase;+fun s_268_2_p : FraCaSPhrase;+fun s_268_3_p : FraCaSPhrase;+fun s_268_4_q : FraCaSPhrase;+fun s_268_5_h : FraCaSPhrase;++fun s_269_1_p : FraCaSPhrase;+fun s_269_2_p : FraCaSPhrase;+fun s_269_3_p : FraCaSPhrase;+fun s_269_4_q : FraCaSPhrase;+fun s_269_5_h : FraCaSPhrase;++fun s_270_1_p : FraCaSPhrase;+fun s_270_2_p : FraCaSPhrase;+fun s_270_3_p : FraCaSPhrase;+fun s_270_4_q : FraCaSPhrase;+fun s_270_5_h : FraCaSPhrase;++fun s_271_1_p : FraCaSPhrase;+fun s_271_2_p : FraCaSPhrase;+fun s_271_3_p : FraCaSPhrase;+fun s_271_4_q : FraCaSPhrase;+fun s_271_5_h : FraCaSPhrase;++fun s_272_1_p : FraCaSPhrase;+fun s_272_2_p : FraCaSPhrase;+fun s_272_3_p : FraCaSPhrase;+fun s_272_4_q : FraCaSPhrase;+fun s_272_5_h : FraCaSPhrase;++fun s_273_1_p : FraCaSPhrase;+fun s_273_2_p : FraCaSPhrase;+fun s_273_3_p : FraCaSPhrase;+fun s_273_4_q : FraCaSPhrase;+fun s_273_5_h : FraCaSPhrase;++fun s_274_1_p : FraCaSPhrase;+fun s_274_2_p : FraCaSPhrase;+fun s_274_3_p : FraCaSPhrase;+fun s_274_4_q : FraCaSPhrase;+fun s_274_5_h : FraCaSPhrase;++fun s_275_1_p : FraCaSPhrase;+fun s_275_2_q : FraCaSPhrase;+fun s_275_3_h : FraCaSPhrase;++fun s_276_1_p : FraCaSPhrase;++fun s_277_1_p : FraCaSPhrase;+fun s_277_2_q : FraCaSPhrase;+fun s_277_3_h : FraCaSPhrase;++fun s_278_1_p : FraCaSPhrase;+fun s_278_2_q : FraCaSPhrase;+fun s_278_3_h : FraCaSPhrase;++fun s_279_1_p : FraCaSPhrase;+fun s_279_2_q : FraCaSPhrase;+fun s_279_3_h : FraCaSPhrase;++fun s_280_1_p : FraCaSPhrase;+fun s_280_2_q : FraCaSPhrase;+fun s_280_3_h : FraCaSPhrase;++fun s_281_1_p : FraCaSPhrase;+fun s_281_2_q : FraCaSPhrase;+fun s_281_3_h : FraCaSPhrase;++fun s_282_1_p : FraCaSPhrase;+fun s_282_2_q : FraCaSPhrase;+fun s_282_3_h : FraCaSPhrase;++fun s_283_1_p : FraCaSPhrase;+fun s_283_2_q : FraCaSPhrase;+fun s_283_3_h : FraCaSPhrase;++fun s_284_1_p : FraCaSPhrase;+fun s_284_2_p : FraCaSPhrase;+fun s_284_3_q : FraCaSPhrase;+fun s_284_4_h : FraCaSPhrase;++fun s_285_1_p : FraCaSPhrase;+fun s_285_2_q : FraCaSPhrase;+fun s_285_3_h : FraCaSPhrase;++fun s_286_1_p : FraCaSPhrase;+fun s_286_2_q : FraCaSPhrase;+fun s_286_3_h : FraCaSPhrase;++fun s_287_1_p : FraCaSPhrase;+fun s_287_2_q : FraCaSPhrase;+fun s_287_3_h : FraCaSPhrase;++fun s_288_1_p : FraCaSPhrase;+fun s_288_2_q : FraCaSPhrase;+fun s_288_3_h : FraCaSPhrase;++fun s_289_1_p : FraCaSPhrase;+fun s_289_2_q : FraCaSPhrase;+fun s_289_3_h : FraCaSPhrase;++fun s_290_1_p : FraCaSPhrase;+fun s_290_2_q : FraCaSPhrase;+fun s_290_3_h : FraCaSPhrase;++fun s_291_1_p : FraCaSPhrase;+fun s_291_2_q : FraCaSPhrase;+fun s_291_3_h : FraCaSPhrase;++fun s_292_1_p : FraCaSPhrase;+fun s_292_2_q : FraCaSPhrase;+fun s_292_3_h : FraCaSPhrase;++fun s_293_1_p : FraCaSPhrase;+fun s_293_2_q : FraCaSPhrase;+fun s_293_3_h : FraCaSPhrase;++fun s_294_1_p : FraCaSPhrase;+fun s_294_2_q : FraCaSPhrase;+fun s_294_3_h : FraCaSPhrase;++fun s_295_1_p : FraCaSPhrase;+fun s_295_2_q : FraCaSPhrase;+fun s_295_3_h : FraCaSPhrase;++fun s_296_1_p : FraCaSPhrase;+fun s_296_2_q : FraCaSPhrase;+fun s_296_3_h : FraCaSPhrase;++fun s_297_1_p : FraCaSPhrase;+fun s_297_2_q : FraCaSPhrase;+fun s_297_3_h : FraCaSPhrase;++fun s_298_1_p : FraCaSPhrase;+fun s_298_2_q : FraCaSPhrase;+fun s_298_3_h : FraCaSPhrase;++fun s_299_1_p : FraCaSPhrase;+fun s_299_2_q : FraCaSPhrase;+fun s_299_3_h : FraCaSPhrase;++fun s_300_1_p : FraCaSPhrase;+fun s_300_2_q : FraCaSPhrase;+fun s_300_3_h : FraCaSPhrase;++fun s_301_1_p : FraCaSPhrase;+fun s_301_2_q : FraCaSPhrase;+fun s_301_3_h : FraCaSPhrase;++fun s_302_1_p : FraCaSPhrase;+fun s_302_2_q : FraCaSPhrase;+fun s_302_3_h : FraCaSPhrase;++fun s_303_1_p : FraCaSPhrase;+fun s_303_2_q : FraCaSPhrase;+fun s_303_3_h : FraCaSPhrase;++fun s_304_1_p : FraCaSPhrase;+fun s_304_2_q : FraCaSPhrase;+fun s_304_3_h : FraCaSPhrase;++fun s_305_1_p : FraCaSPhrase;++fun s_306_1_p : FraCaSPhrase;+fun s_306_2_q : FraCaSPhrase;+fun s_306_3_h : FraCaSPhrase;++fun s_307_1_p : FraCaSPhrase;+fun s_307_2_q : FraCaSPhrase;+fun s_307_3_h : FraCaSPhrase;++fun s_308_1_p : FraCaSPhrase;+fun s_308_2_q : FraCaSPhrase;+fun s_308_3_h : FraCaSPhrase;++fun s_309_1_p : FraCaSPhrase;+fun s_309_2_p : FraCaSPhrase;++fun s_310_1_p : FraCaSPhrase;+fun s_310_2_p : FraCaSPhrase;++fun s_311_1_p : FraCaSPhrase;+fun s_311_2_p : FraCaSPhrase;+fun s_311_3_q : FraCaSPhrase;+fun s_311_4_h : FraCaSPhrase;++fun s_312_1_p : FraCaSPhrase;+fun s_312_2_p : FraCaSPhrase;+fun s_312_3_q : FraCaSPhrase;+fun s_312_4_h : FraCaSPhrase;++fun s_313_1_p : FraCaSPhrase;+fun s_313_2_p : FraCaSPhrase;+fun s_313_3_q : FraCaSPhrase;+fun s_313_4_h : FraCaSPhrase;++fun s_314_1_p : FraCaSPhrase;+fun s_314_2_p : FraCaSPhrase;+fun s_314_3_p : FraCaSPhrase;+fun s_314_4_q : FraCaSPhrase;+fun s_314_5_h : FraCaSPhrase;++fun s_315_1_p : FraCaSPhrase;+fun s_315_2_q : FraCaSPhrase;+fun s_315_3_h : FraCaSPhrase;+fun s_315_3_h_NEW : FraCaSPhrase;++fun s_316_1_p : FraCaSPhrase;+fun s_316_2_p : FraCaSPhrase;+fun s_316_3_q : FraCaSPhrase;+fun s_316_4_h : FraCaSPhrase;++fun s_317_1_p : FraCaSPhrase;+fun s_317_2_p : FraCaSPhrase;+fun s_317_3_p : FraCaSPhrase;+fun s_317_4_p : FraCaSPhrase;+fun s_317_5_q : FraCaSPhrase;+fun s_317_6_h : FraCaSPhrase;++fun s_318_1_p : FraCaSPhrase;+fun s_318_2_p : FraCaSPhrase;+fun s_318_3_q : FraCaSPhrase;+fun s_318_4_h : FraCaSPhrase;++fun s_319_1_p : FraCaSPhrase;+fun s_319_2_p : FraCaSPhrase;+fun s_319_3_q : FraCaSPhrase;+fun s_319_4_h : FraCaSPhrase;++fun s_320_1_p : FraCaSPhrase;+fun s_320_2_q : FraCaSPhrase;+fun s_320_3_h : FraCaSPhrase;+fun s_320_3_h_NEW : FraCaSPhrase;++fun s_321_1_p : FraCaSPhrase;+fun s_321_2_p : FraCaSPhrase;+fun s_321_3_q : FraCaSPhrase;+fun s_321_4_h : FraCaSPhrase;++fun s_322_1_p : FraCaSPhrase;+fun s_322_1_p_NEW : FraCaSPhrase;+fun s_322_2_q : FraCaSPhrase;+fun s_322_3_h : FraCaSPhrase;++fun s_323_1_p : FraCaSPhrase;+fun s_323_1_p_NEW : FraCaSPhrase;+fun s_323_2_p : FraCaSPhrase;+fun s_323_3_q : FraCaSPhrase;+fun s_323_4_h : FraCaSPhrase;+fun s_323_4_h_NEW : FraCaSPhrase;++fun s_324_1_p : FraCaSPhrase;+fun s_324_2_q : FraCaSPhrase;+fun s_324_3_h : FraCaSPhrase;++fun s_325_1_p : FraCaSPhrase;+fun s_325_2_p : FraCaSPhrase;+fun s_325_3_q : FraCaSPhrase;+fun s_325_4_h : FraCaSPhrase;++fun s_326_1_p : FraCaSPhrase;+fun s_326_2_q : FraCaSPhrase;+fun s_326_3_h : FraCaSPhrase;++fun s_327_1_p : FraCaSPhrase;+fun s_327_2_q : FraCaSPhrase;+fun s_327_3_h : FraCaSPhrase;++fun s_328_1_p : FraCaSPhrase;+fun s_328_2_q : FraCaSPhrase;+fun s_328_3_h : FraCaSPhrase;++fun s_329_1_p : FraCaSPhrase;+fun s_329_2_q : FraCaSPhrase;+fun s_329_3_h : FraCaSPhrase;++fun s_330_1_p : FraCaSPhrase;+fun s_330_2_q : FraCaSPhrase;+fun s_330_3_h : FraCaSPhrase;++fun s_331_1_p : FraCaSPhrase;+fun s_331_2_q : FraCaSPhrase;+fun s_331_3_h : FraCaSPhrase;++fun s_332_1_p : FraCaSPhrase;+fun s_332_2_q : FraCaSPhrase;+fun s_332_3_h : FraCaSPhrase;++fun s_333_1_p : FraCaSPhrase;+fun s_333_2_q : FraCaSPhrase;+fun s_333_3_h : FraCaSPhrase;++fun s_334_1_p : FraCaSPhrase;+fun s_334_2_q : FraCaSPhrase;+fun s_334_3_h : FraCaSPhrase;++fun s_335_1_p : FraCaSPhrase;+fun s_335_2_q : FraCaSPhrase;+fun s_335_3_h : FraCaSPhrase;++fun s_336_1_p : FraCaSPhrase;+fun s_336_2_q : FraCaSPhrase;+fun s_336_3_h : FraCaSPhrase;++fun s_337_1_p : FraCaSPhrase;+fun s_337_2_q : FraCaSPhrase;+fun s_337_3_h : FraCaSPhrase;++fun s_338_1_p : FraCaSPhrase;+fun s_338_2_q : FraCaSPhrase;+fun s_338_3_h : FraCaSPhrase;++fun s_339_1_p : FraCaSPhrase;+fun s_339_2_q : FraCaSPhrase;+fun s_339_3_h : FraCaSPhrase;++fun s_340_1_p : FraCaSPhrase;+fun s_340_2_p : FraCaSPhrase;+fun s_340_3_q : FraCaSPhrase;+fun s_340_4_h : FraCaSPhrase;++fun s_341_1_p : FraCaSPhrase;+fun s_341_2_p : FraCaSPhrase;+fun s_341_3_q : FraCaSPhrase;+fun s_341_4_h : FraCaSPhrase;++fun s_342_1_p : FraCaSPhrase;+fun s_342_2_q : FraCaSPhrase;+fun s_342_3_h : FraCaSPhrase;++fun s_343_1_p : FraCaSPhrase;+fun s_343_2_p : FraCaSPhrase;+fun s_343_3_q : FraCaSPhrase;+fun s_343_4_h : FraCaSPhrase;++fun s_344_1_p : FraCaSPhrase;+fun s_344_2_p : FraCaSPhrase;+fun s_344_3_q : FraCaSPhrase;+fun s_344_4_h : FraCaSPhrase;++fun s_345_1_p : FraCaSPhrase;+fun s_345_2_q : FraCaSPhrase;+fun s_345_3_h : FraCaSPhrase;++fun s_346_1_p : FraCaSPhrase;+fun s_346_2_q : FraCaSPhrase;+fun s_346_3_h : FraCaSPhrase;++}
@@ -0,0 +1,3 @@+--# -path=.:alltenses:prelude++concrete FraCaSBankEng of FraCaSBank = FraCaSBankI with (FraCaS = FraCaSEng);
@@ -0,0 +1,1579 @@+--# -path=.:alltenses:prelude++incomplete concrete FraCaSBankI of FraCaSBank = open FraCaS, Prelude in {++lincat FraCaSPhrase = SS;++lin s_001_1_p = (Sentence (UseCl (Past) (PPos) (PredVP (DetCN (DetQuant (IndefArt) (NumSg)) (UseN (italian_N))) (ComplSlash (SlashV2a (become_V2)) (DetCN (DetQuantOrd (GenNP (DetCN (DetQuant (DefArt) (NumSg)) (UseN (world_N)))) (NumSg) (OrdSuperl (great_A))) (UseN (tenor_N)))))));+lin s_001_2_q = (Question (UseQCl (Past) (PPos) (QuestCl (ExistNP (DetCN (DetQuant (IndefArt) (NumSg)) (RelCN (UseN (italian_N)) (UseRCl (Past) (PPos) (RelVP (IdRP) (ComplSlash (SlashV2a (become_V2)) (DetCN (DetQuantOrd (GenNP (DetCN (DetQuant (DefArt) (NumSg)) (UseN (world_N)))) (NumSg) (OrdSuperl (great_A))) (UseN (tenor_N))))))))))));+lin s_001_3_h = (Sentence (UseCl (Past) (PPos) (ExistNP (DetCN (DetQuant (IndefArt) (NumSg)) (RelCN (UseN (italian_N)) (UseRCl (Past) (PPos) (RelVP (IdRP) (ComplSlash (SlashV2a (become_V2)) (DetCN (DetQuantOrd (GenNP (DetCN (DetQuant (DefArt) (NumSg)) (UseN (world_N)))) (NumSg) (OrdSuperl (great_A))) (UseN (tenor_N)))))))))));++lin s_002_1_p = (Sentence (UseCl (Present) (PPos) (PredVP (DetCN (every_Det) (AdjCN (PositA (italian_A)) (UseN (man_N)))) (ComplVV (want_VV) (UseComp (CompCN (AdjCN (PositA (great_A)) (UseN (tenor_N)))))))));+lin s_002_2_p = (Sentence (UseCl (Present) (PPos) (PredVP (DetCN (somePl_Det) (AdjCN (PositA (italian_A)) (UseN (man_N)))) (UseComp (CompCN (AdjCN (PositA (great_A)) (UseN (tenor_N))))))));+lin s_002_3_q = (Question (UseQCl (Present) (PPos) (QuestCl (ExistNP (DetCN (DetQuant (IndefArt) (NumPl)) (RelCN (AdjCN (PositA (italian_A)) (UseN (man_N))) (UseRCl (Present) (PPos) (RelVP (IdRP) (ComplVV (want_VV) (UseComp (CompNP (DetCN (DetQuant (IndefArt) (NumSg)) (AdjCN (PositA (great_A)) (UseN (tenor_N)))))))))))))));+lin s_002_4_h = (Sentence (UseCl (Present) (PPos) (ExistNP (DetCN (DetQuant (IndefArt) (NumPl)) (RelCN (AdjCN (PositA (italian_A)) (UseN (man_N))) (UseRCl (Present) (PPos) (RelVP (IdRP) (ComplVV (want_VV) (UseComp (CompNP (DetCN (DetQuant (IndefArt) (NumSg)) (AdjCN (PositA (great_A)) (UseN (tenor_N))))))))))))));++lin s_003_1_p = (Sentence (UseCl (Present) (PPos) (PredVP (PredetNP (all_Predet) (DetCN (DetQuant (IndefArt) (NumPl)) (AdjCN (PositA (italian_A)) (UseN (man_N))))) (ComplVV (want_VV) (UseComp (CompNP (DetCN (DetQuant (IndefArt) (NumSg)) (AdjCN (PositA (great_A)) (UseN (tenor_N))))))))));+lin s_003_2_p = s_002_2_p;+lin s_003_3_q = s_002_3_q;+lin s_003_4_h = s_002_4_h;++lin s_004_1_p = (Sentence (UseCl (Present) (PPos) (PredVP (DetCN (each_Det) (AdjCN (PositA (italian_A)) (UseN (tenor_N)))) (ComplVV (want_VV) (UseComp (CompAP (PositA (great_A))))))));+lin s_004_2_p = (Sentence (UseCl (Present) (PPos) (PredVP (DetCN (somePl_Det) (AdjCN (PositA (italian_A)) (UseN (tenor_N)))) (UseComp (CompAP (PositA (great_A)))))));+lin s_004_3_q = (Question (UseQCl (Present) (PPos) (QuestCl (ExistNP (DetCN (DetQuant (IndefArt) (NumPl)) (RelCN (AdjCN (PositA (italian_A)) (UseN (tenor_N))) (UseRCl (Present) (PPos) (RelVP (IdRP) (ComplVV (want_VV) (UseComp (CompAP (PositA (great_A)))))))))))));+lin s_004_4_h = (Sentence (UseCl (Present) (PPos) (ExistNP (DetCN (DetQuant (IndefArt) (NumPl)) (RelCN (AdjCN (PositA (italian_A)) (UseN (tenor_N))) (UseRCl (Present) (PPos) (RelVP (IdRP) (ComplVV (want_VV) (UseComp (CompAP (PositA (great_A))))))))))));++lin s_005_1_p = (Sentence (UseCl (Present) (PPos) (PredVP (DetCN (DetQuant (DefArt) (NumPl)) (AdjCN (AdAP (really_AdA) (PositA (ambitious_A))) (UseN (tenor_N)))) (UseComp (CompAP (PositA (italian_A)))))));+lin s_005_2_q = (Question (UseQCl (Present) (PPos) (QuestCl (ExistNP (DetCN (DetQuant (IndefArt) (NumPl)) (RelCN (AdjCN (AdAP (really_AdA) (PositA (ambitious_A))) (UseN (tenor_N))) (UseRCl (Present) (PPos) (RelVP (IdRP) (UseComp (CompAP (PositA (italian_A))))))))))));+lin s_005_3_h = (Sentence (UseCl (Present) (PPos) (ExistNP (DetCN (DetQuant (IndefArt) (NumPl)) (RelCN (AdjCN (AdAP (really_AdA) (PositA (ambitious_A))) (UseN (tenor_N))) (UseRCl (Present) (PPos) (RelVP (IdRP) (UseComp (CompAP (PositA (italian_A)))))))))));++lin s_006_1_p = (Sentence (UseCl (Present) (PPos) (PredVP (DetCN (DetQuant (no_Quant) (NumPl)) (AdjCN (AdAP (really_AdA) (PositA (great_A))) (UseN (tenor_N)))) (UseComp (CompAP (PositA (modest_A)))))));+lin s_006_2_q = (Question (UseQCl (Present) (PPos) (QuestCl (ExistNP (DetCN (DetQuant (IndefArt) (NumPl)) (RelCN (AdjCN (AdAP (really_AdA) (PositA (great_A))) (UseN (tenor_N))) (UseRCl (Present) (PPos) (RelVP (IdRP) (UseComp (CompAP (PositA (modest_A))))))))))));+lin s_006_3_h = (Sentence (UseCl (Present) (PPos) (ExistNP (DetCN (DetQuant (IndefArt) (NumPl)) (RelCN (AdjCN (AdAP (really_AdA) (PositA (great_A))) (UseN (tenor_N))) (UseRCl (Present) (PPos) (RelVP (IdRP) (UseComp (CompAP (PositA (modest_A)))))))))));++lin s_007_1_p = (Sentence (UseCl (Present) (PPos) (PredVP (DetCN (somePl_Det) (AdjCN (PositA (great_A)) (UseN (tenor_N)))) (UseComp (CompAP (PositA (swedish_A)))))));+lin s_007_2_q = (Question (UseQCl (Present) (PPos) (QuestCl (ExistNP (DetCN (DetQuant (IndefArt) (NumPl)) (RelCN (AdjCN (PositA (great_A)) (UseN (tenor_N))) (UseRCl (Present) (PPos) (RelVP (IdRP) (UseComp (CompAP (PositA (swedish_A))))))))))));+lin s_007_3_h = (Sentence (UseCl (Present) (PPos) (ExistNP (DetCN (DetQuant (IndefArt) (NumPl)) (RelCN (AdjCN (PositA (great_A)) (UseN (tenor_N))) (UseRCl (Present) (PPos) (RelVP (IdRP) (UseComp (CompAP (PositA (swedish_A)))))))))));++lin s_008_1_p = (Sentence (UseCl (Present) (PPos) (PredVP (DetCN (many_Det) (AdjCN (PositA (great_A)) (UseN (tenor_N)))) (UseComp (CompAP (PositA (german_A)))))));+lin s_008_2_q = (Question (UseQCl (Present) (PPos) (QuestCl (ExistNP (DetCN (DetQuant (IndefArt) (NumPl)) (RelCN (AdjCN (PositA (great_A)) (UseN (tenor_N))) (UseRCl (Present) (PPos) (RelVP (IdRP) (UseComp (CompAP (PositA (german_A))))))))))));+lin s_008_3_h = (Sentence (UseCl (Present) (PPos) (ExistNP (DetCN (DetQuant (IndefArt) (NumPl)) (RelCN (AdjCN (PositA (great_A)) (UseN (tenor_N))) (UseRCl (Present) (PPos) (RelVP (IdRP) (UseComp (CompAP (PositA (german_A)))))))))));++lin s_009_1_p = (Sentence (UseCl (Present) (PPos) (PredVP (DetCN (several_Det) (AdjCN (PositA (great_A)) (UseN (tenor_N)))) (UseComp (CompAP (PositA (british_A)))))));+lin s_009_2_q = (Question (UseQCl (Present) (PPos) (QuestCl (ExistNP (DetCN (DetQuant (IndefArt) (NumPl)) (RelCN (AdjCN (PositA (great_A)) (UseN (tenor_N))) (UseRCl (Present) (PPos) (RelVP (IdRP) (UseComp (CompAP (PositA (british_A))))))))))));+lin s_009_3_h = (Sentence (UseCl (Present) (PPos) (ExistNP (DetCN (DetQuant (IndefArt) (NumPl)) (RelCN (AdjCN (PositA (great_A)) (UseN (tenor_N))) (UseRCl (Present) (PPos) (RelVP (IdRP) (UseComp (CompAP (PositA (british_A)))))))))));++lin s_010_1_p = (Sentence (UseCl (Present) (PPos) (PredVP (PredetNP (most_Predet) (DetCN (DetQuant (IndefArt) (NumPl)) (AdjCN (PositA (great_A)) (UseN (tenor_N))))) (UseComp (CompAP (PositA (italian_A)))))));+lin s_010_2_q = (Question (UseQCl (Present) (PPos) (QuestCl (ExistNP (DetCN (DetQuant (IndefArt) (NumPl)) (RelCN (AdjCN (PositA (great_A)) (UseN (tenor_N))) (UseRCl (Present) (PPos) (RelVP (IdRP) (UseComp (CompAP (PositA (italian_A))))))))))));+lin s_010_3_h = (Sentence (UseCl (Present) (PPos) (ExistNP (DetCN (DetQuant (IndefArt) (NumPl)) (RelCN (AdjCN (PositA (great_A)) (UseN (tenor_N))) (UseRCl (Present) (PPos) (RelVP (IdRP) (UseComp (CompAP (PositA (italian_A)))))))))));++lin s_011_1_p = (Sentence (UseCl (Present) (PPos) (PredVP (DetCN (a_few_Det) (AdjCN (PositA (great_A)) (UseN (tenor_N)))) (ComplSlash (SlashV2a (sing_V2)) (MassNP (UseN (popular_music_N)))))));+lin s_011_2_p = (Sentence (UseCl (Present) (PPos) (PredVP (DetCN (somePl_Det) (AdjCN (PositA (great_A)) (UseN (tenor_N)))) (ComplSlash (SlashV2a (like_V2)) (MassNP (UseN (popular_music_N)))))));+lin s_011_3_q = (Question (UseQCl (Present) (PPos) (QuestCl (ExistNP (DetCN (DetQuant (IndefArt) (NumPl)) (RelCN (AdjCN (PositA (great_A)) (UseN (tenor_N))) (UseRCl (Present) (PPos) (RelVP (IdRP) (ComplSlash (SlashV2a (sing_V2)) (MassNP (UseN (popular_music_N))))))))))));+lin s_011_4_h = (Sentence (UseCl (Present) (PPos) (ExistNP (DetCN (DetQuant (IndefArt) (NumPl)) (RelCN (AdjCN (PositA (great_A)) (UseN (tenor_N))) (UseRCl (Present) (PPos) (RelVP (IdRP) (ComplSlash (SlashV2a (sing_V2)) (MassNP (UseN (popular_music_N)))))))))));++lin s_012_1_p = (Sentence (UseCl (Present) (PPos) (PredVP (DetCN (few_Det) (AdjCN (PositA (great_A)) (UseN (tenor_N)))) (UseComp (CompAP (PositA (poor8penniless_A)))))));+lin s_012_2_q = (Question (UseQCl (Present) (PPos) (QuestCl (ExistNP (DetCN (DetQuant (IndefArt) (NumPl)) (RelCN (AdjCN (PositA (great_A)) (UseN (tenor_N))) (UseRCl (Present) (PPos) (RelVP (IdRP) (UseComp (CompAP (PositA (poor8penniless_A))))))))))));+lin s_012_3_h = (Sentence (UseCl (Present) (PPos) (ExistNP (DetCN (DetQuant (IndefArt) (NumPl)) (RelCN (AdjCN (PositA (great_A)) (UseN (tenor_N))) (UseRCl (Present) (PPos) (RelVP (IdRP) (UseComp (CompAP (PositA (poor8penniless_A)))))))))));++lin s_013_1_p = (Sentence (UseCl (Present) (PPos) (PredVP (DetCN (both_Det) (AdjCN (PositA (leading_A)) (UseN (tenor_N)))) (UseComp (CompAP (PositA (excellent_A)))))));+lin s_013_2_p = (Sentence (UseCl (Present) (PPos) (PredVP (DetCN (DetQuant (IndefArt) (NumPl)) (RelCN (AdjCN (PositA (leading_A)) (UseN (tenor_N))) (UseRCl (Present) (PPos) (RelVP (IdRP) (UseComp (CompAP (PositA (excellent_A)))))))) (UseComp (CompAP (PositA (indispensable_A)))))));+lin s_013_3_q = (Question (UseQCl (Present) (PPos) (QuestCl (PredVP (DetCN (both_Det) (AdjCN (PositA (leading_A)) (UseN (tenor_N)))) (UseComp (CompAP (PositA (indispensable_A))))))));+lin s_013_4_h = (Sentence (UseCl (Present) (PPos) (PredVP (DetCN (both_Det) (AdjCN (PositA (leading_A)) (UseN (tenor_N)))) (UseComp (CompAP (PositA (indispensable_A)))))));++lin s_014_1_p = (Sentence (UseCl (Present) (PPos) (PredVP (DetCN (neither_Det) (AdjCN (PositA (leading_A)) (UseN (tenor_N)))) (come_cheap_VP))));+lin s_014_2_p = (Sentence (UseCl (Present) (PPos) (PredVP (AdvNP (DetNP (DetQuant (IndefArt) (NumSg))) (PrepNP (part_Prep) (DetCN (DetQuant (DefArt) (NumPl)) (AdjCN (PositA (leading_A)) (UseN (tenor_N)))))) (UseComp (CompNP (UsePN (pavarotti_PN)))))));+lin s_014_3_q = (Question (UseQCl (Present) (PPos) (QuestCl (PredVP (UsePN (pavarotti_PN)) (UseComp (CompCN (RelCN (AdjCN (PositA (leading_A)) (UseN (tenor_N))) (UseRCl (Present) (PPos) (RelVP (IdRP) (come_cheap_VP))))))))));+lin s_014_4_h = (Sentence (UseCl (Present) (PPos) (PredVP (UsePN (pavarotti_PN)) (UseComp (CompCN (RelCN (AdjCN (PositA (leading_A)) (UseN (tenor_N))) (UseRCl (Present) (PPos) (RelVP (IdRP) (come_cheap_VP)))))))));++lin s_015_1_p = (Sentence (UseCl (Future) (PPos) (PredVP (PredetNP (at_least_Predet) (DetCN (DetQuant (IndefArt) (NumCard (NumNumeral (N_three)))) (UseN (tenor_N)))) (ComplSlash (SlashV2a (take_part_in_V2)) (DetCN (DetQuant (DefArt) (NumSg)) (UseN (concert_N)))))));+lin s_015_2_q = (Question (UseQCl (Present) (PPos) (QuestCl (ExistNP (DetCN (DetQuant (IndefArt) (NumPl)) (RelCN (UseN (tenor_N)) (UseRCl (Future) (PPos) (RelVP (IdRP) (ComplSlash (SlashV2a (take_part_in_V2)) (DetCN (DetQuant (DefArt) (NumSg)) (UseN (concert_N))))))))))));+lin s_015_3_h = (Sentence (UseCl (Present) (PPos) (ExistNP (DetCN (DetQuant (IndefArt) (NumPl)) (RelCN (UseN (tenor_N)) (UseRCl (Future) (PPos) (RelVP (IdRP) (ComplSlash (SlashV2a (take_part_in_V2)) (DetCN (DetQuant (DefArt) (NumSg)) (UseN (concert_N)))))))))));++lin s_016_1_p = (Sentence (UseCl (Future) (PPos) (PredVP (PredetNP (at_most_Predet) (DetCN (DetQuant (IndefArt) (NumCard (NumNumeral (N_two)))) (UseN (tenor_N)))) (ComplSlash (Slash3V3 (contribute_to_V3) (MassNP (UseN (charity_N)))) (DetCN (DetQuant (PossPron (theyRefl_Pron)) (NumPl)) (UseN (fee_N)))))));+lin s_016_2_q = (Question (UseQCl (Present) (PPos) (QuestCl (ExistNP (DetCN (DetQuant (IndefArt) (NumPl)) (RelCN (UseN (tenor_N)) (UseRCl (Future) (PPos) (RelVP (IdRP) (ComplSlash (Slash3V3 (contribute_to_V3) (MassNP (UseN (charity_N)))) (DetCN (DetQuant (PossPron (theyRefl_Pron)) (NumPl)) (UseN (fee_N))))))))))));+lin s_016_3_h = (Sentence (UseCl (Present) (PPos) (ExistNP (DetCN (DetQuant (IndefArt) (NumPl)) (RelCN (UseN (tenor_N)) (UseRCl (Future) (PPos) (RelVP (IdRP) (ComplSlash (Slash3V3 (contribute_to_V3) (MassNP (UseN (charity_N)))) (DetCN (DetQuant (PossPron (theyRefl_Pron)) (NumPl)) (UseN (fee_N)))))))))));++lin s_017_1_p = (Sentence (UseCl (Past) (PPos) (PredVP (DetCN (DetQuant (IndefArt) (NumSg)) (UseN (irishman_N))) (ComplSlash (SlashV2a (win_V2)) (DetCN (DetQuant (DefArt) (NumSg)) (ComplN2 (nobel_prize_N2) (MassNP (UseN (literature_N)))))))));+lin s_017_2_q = (Question (UseQCl (Past) (PPos) (QuestCl (PredVP (DetCN (DetQuant (IndefArt) (NumSg)) (UseN (irishman_N))) (ComplSlash (SlashV2a (win_V2)) (DetCN (DetQuant (IndefArt) (NumSg)) (UseN (nobel_prize_N))))))));+lin s_017_3_h = (Sentence (UseCl (Past) (PPos) (PredVP (DetCN (DetQuant (IndefArt) (NumSg)) (UseN (irishman_N))) (ComplSlash (SlashV2a (win_V2)) (DetCN (DetQuant (IndefArt) (NumSg)) (UseN (nobel_prize_N)))))));++lin s_018_1_p = (Sentence (UseCl (Present) (PPos) (PredVP (DetCN (every_Det) (UseN (european_N))) (ComplSlash (SlashV2a (have_V2)) (DetCN (DetQuant (DefArt) (NumSg)) (SentCN (UseN (right_N)) (EmbedVP (AdvVP (UseV (live_V)) (PrepNP (in_Prep) (UsePN (europe_PN)))))))))));+lin s_018_2_p = (Sentence (UseCl (Present) (PPos) (PredVP (DetCN (every_Det) (UseN (european_N))) (UseComp (CompCN (UseN (person_N)))))));+lin s_018_3_p = (Sentence (UseCl (Present) (PPos) (PredVP (DetCN (every_Det) (RelCN (UseN (person_N)) (UseRCl (Present) (PPos) (RelVP (IdRP) (ComplSlash (SlashV2a (have_V2)) (DetCN (DetQuant (DefArt) (NumSg)) (SentCN (UseN (right_N)) (EmbedVP (AdvVP (UseV (live_V)) (PrepNP (in_Prep) (UsePN (europe_PN)))))))))))) (ComplVV (can_VV) (AdvVP (AdvVP (UseV (travel_V)) (PositAdvAdj (free_A))) (PrepNP (within_Prep) (UsePN (europe_PN))))))));+lin s_018_4_q = (Question (UseQCl (Present) (PPos) (QuestCl (PredVP (DetCN (every_Det) (UseN (european_N))) (ComplVV (can_VV) (AdvVP (AdvVP (UseV (travel_V)) (PositAdvAdj (free_A))) (PrepNP (within_Prep) (UsePN (europe_PN)))))))));+lin s_018_5_h = (Sentence (UseCl (Present) (PPos) (PredVP (DetCN (every_Det) (UseN (european_N))) (ComplVV (can_VV) (AdvVP (AdvVP (UseV (travel_V)) (PositAdvAdj (free_A))) (PrepNP (within_Prep) (UsePN (europe_PN))))))));++lin s_019_1_p = (Sentence (UseCl (Present) (PPos) (PredVP (PredetNP (all_Predet) (DetCN (DetQuant (IndefArt) (NumPl)) (UseN (european_N)))) (ComplSlash (SlashV2a (have_V2)) (DetCN (DetQuant (DefArt) (NumSg)) (SentCN (UseN (right_N)) (EmbedVP (AdvVP (UseV (live_V)) (PrepNP (in_Prep) (UsePN (europe_PN)))))))))));+lin s_019_2_p = s_018_2_p;+lin s_019_3_p = s_018_3_p;+lin s_019_4_q = (Question (UseQCl (Present) (PPos) (QuestCl (PredVP (PredetNP (all_Predet) (DetCN (DetQuant (IndefArt) (NumPl)) (UseN (european_N)))) (ComplVV (can_VV) (AdvVP (AdvVP (UseV (travel_V)) (PositAdvAdj (free_A))) (PrepNP (within_Prep) (UsePN (europe_PN)))))))));+lin s_019_5_h = (Sentence (UseCl (Present) (PPos) (PredVP (PredetNP (all_Predet) (DetCN (DetQuant (IndefArt) (NumPl)) (UseN (european_N)))) (ComplVV (can_VV) (AdvVP (AdvVP (UseV (travel_V)) (PositAdvAdj (free_A))) (PrepNP (within_Prep) (UsePN (europe_PN))))))));++lin s_020_1_p = (Sentence (UseCl (Present) (PPos) (PredVP (DetCN (each_Det) (UseN (european_N))) (ComplSlash (SlashV2a (have_V2)) (DetCN (DetQuant (DefArt) (NumSg)) (SentCN (UseN (right_N)) (EmbedVP (AdvVP (UseV (live_V)) (PrepNP (in_Prep) (UsePN (europe_PN)))))))))));+lin s_020_2_p = s_018_2_p;+lin s_020_3_p = s_018_3_p;+lin s_020_4_q = (Question (UseQCl (Present) (PPos) (QuestCl (PredVP (DetCN (each_Det) (UseN (european_N))) (ComplVV (can_VV) (AdvVP (AdvVP (UseV (travel_V)) (PositAdvAdj (free_A))) (PrepNP (within_Prep) (UsePN (europe_PN)))))))));+lin s_020_5_h = (Sentence (UseCl (Present) (PPos) (PredVP (DetCN (each_Det) (UseN (european_N))) (ComplVV (can_VV) (AdvVP (AdvVP (UseV (travel_V)) (PositAdvAdj (free_A))) (PrepNP (within_Prep) (UsePN (europe_PN))))))));++lin s_021_1_p = (Sentence (UseCl (Present) (PPos) (PredVP (DetCN (DetQuant (DefArt) (NumPl)) (ComplN2 (resident_in_N2) (DetCN (DetQuant (IndefArt) (NumPl)) (UseN (member_state_N))))) (ComplSlash (SlashV2a (have_V2)) (DetCN (DetQuant (DefArt) (NumSg)) (SentCN (UseN (right_N)) (EmbedVP (AdvVP (UseV (live_V)) (PrepNP (in_Prep) (UsePN (europe_PN)))))))))));+lin s_021_2_p = (Sentence (UseCl (Present) (PPos) (PredVP (PredetNP (all_Predet) (DetCN (DetQuant (IndefArt) (NumPl)) (ComplN2 (resident_in_N2) (DetCN (DetQuant (IndefArt) (NumPl)) (UseN (member_state_N)))))) (UseComp (CompCN (UseN (individual_N)))))));+lin s_021_3_p = (Sentence (UseCl (Present) (PPos) (PredVP (DetCN (every_Det) (RelCN (UseN (individual_N)) (UseRCl (Present) (PPos) (RelVP (IdRP) (ComplSlash (SlashV2a (have_V2)) (DetCN (DetQuant (DefArt) (NumSg)) (SentCN (UseN (right_N)) (EmbedVP (AdvVP (UseV (live_V)) (PrepNP (in_Prep) (UsePN (europe_PN)))))))))))) (ComplVV (can_VV) (AdvVP (AdvVP (UseV (travel_V)) (PositAdvAdj (free_A))) (PrepNP (within_Prep) (UsePN (europe_PN))))))));+lin s_021_4_q = (Question (UseQCl (Present) (PPos) (QuestCl (PredVP (DetCN (DetQuant (DefArt) (NumPl)) (ComplN2 (resident_in_N2) (DetCN (DetQuant (IndefArt) (NumPl)) (UseN (member_state_N))))) (ComplVV (can_VV) (AdvVP (AdvVP (UseV (travel_V)) (PositAdvAdj (free_A))) (PrepNP (within_Prep) (UsePN (europe_PN)))))))));+lin s_021_5_h = (Sentence (UseCl (Present) (PPos) (PredVP (DetCN (DetQuant (DefArt) (NumPl)) (ComplN2 (resident_in_N2) (DetCN (DetQuant (IndefArt) (NumPl)) (UseN (member_state_N))))) (ComplVV (can_VV) (AdvVP (AdvVP (UseV (travel_V)) (PositAdvAdj (free_A))) (PrepNP (within_Prep) (UsePN (europe_PN))))))));++lin s_022_1_p = (Sentence (UseCl (Past) (PPos) (PredVP (DetCN (DetQuant (no_Quant) (NumSg)) (UseN (delegate_N))) (AdvVP (ComplSlash (SlashV2a (finish_V2)) (DetCN (DetQuant (DefArt) (NumSg)) (UseN (report_N)))) (on_time_Adv)))));+lin s_022_2_q = (Question (UseQCl (Past) (PPos) (QuestCl (PredVP (DetCN (DetQuant (no_Quant) (NumSg)) (UseN (delegate_N))) (ComplSlash (SlashV2a (finish_V2)) (DetCN (DetQuant (DefArt) (NumSg)) (UseN (report_N))))))));+lin s_022_3_h = (Sentence (UseCl (Past) (PPos) (PredVP (DetCN (DetQuant (no_Quant) (NumSg)) (UseN (delegate_N))) (ComplSlash (SlashV2a (finish_V2)) (DetCN (DetQuant (DefArt) (NumSg)) (UseN (report_N)))))));++lin s_023_1_p = (Sentence (UseCl (Past) (PPos) (PredVP (DetCN (somePl_Det) (UseN (delegate_N))) (AdvVP (ComplSlash (SlashV2a (finish_V2)) (DetCN (DetQuant (DefArt) (NumSg)) (UseN (survey_N)))) (on_time_Adv)))));+lin s_023_2_q = (Question (UseQCl (Past) (PPos) (QuestCl (PredVP (DetCN (somePl_Det) (UseN (delegate_N))) (ComplSlash (SlashV2a (finish_V2)) (DetCN (DetQuant (DefArt) (NumSg)) (UseN (survey_N))))))));+lin s_023_3_h = (Sentence (UseCl (Past) (PPos) (PredVP (DetCN (somePl_Det) (UseN (delegate_N))) (ComplSlash (SlashV2a (finish_V2)) (DetCN (DetQuant (DefArt) (NumSg)) (UseN (survey_N)))))));++lin s_024_1_p = (Sentence (UseCl (Past) (PPos) (PredVP (DetCN (many_Det) (UseN (delegate_N))) (ComplSlash (Slash3V3 (obtain_from_V3) (DetCN (DetQuant (DefArt) (NumSg)) (UseN (survey_N)))) (DetCN (DetQuant (IndefArt) (NumPl)) (AdjCN (PositA (interesting_A)) (UseN (result_N))))))));+lin s_024_2_q = (Question (UseQCl (Past) (PPos) (QuestCl (PredVP (DetCN (many_Det) (UseN (delegate_N))) (ComplSlash (Slash3V3 (obtain_from_V3) (DetCN (DetQuant (DefArt) (NumSg)) (UseN (survey_N)))) (DetCN (DetQuant (IndefArt) (NumPl)) (UseN (result_N))))))));+lin s_024_3_h = (Sentence (UseCl (Past) (PPos) (PredVP (DetCN (many_Det) (UseN (delegate_N))) (ComplSlash (Slash3V3 (obtain_from_V3) (DetCN (DetQuant (DefArt) (NumSg)) (UseN (survey_N)))) (DetCN (DetQuant (IndefArt) (NumPl)) (UseN (result_N)))))));++lin s_025_1_p = (Sentence (UseCl (Past) (PPos) (PredVP (DetCN (several_Det) (UseN (delegate_N))) (AdvVP (ComplSlash (SlashV2a (get_V2)) (PPartNP (DetCN (DetQuant (DefArt) (NumPl)) (UseN (result_N))) (publish_V2))) (PrepNP (in_Prep) (DetCN (DetQuant (IndefArt) (NumPl)) (AdjCN (PositA (major_A)) (AdjCN (PositA (national_A)) (UseN (newspaper_N))))))))));+lin s_025_2_q = (Question (UseQCl (Past) (PPos) (QuestCl (PredVP (DetCN (several_Det) (UseN (delegate_N))) (ComplSlash (SlashV2a (get_V2)) (PPartNP (DetCN (DetQuant (DefArt) (NumPl)) (UseN (result_N))) (publish_V2)))))));+lin s_025_3_h = (Sentence (UseCl (Past) (PPos) (PredVP (DetCN (several_Det) (UseN (delegate_N))) (ComplSlash (SlashV2a (get_V2)) (PPartNP (DetCN (DetQuant (DefArt) (NumPl)) (UseN (result_N))) (publish_V2))))));++lin s_026_1_p = (Sentence (UseCl (Present) (PPos) (PredVP (PredetNP (most_Predet) (DetCN (DetQuant (IndefArt) (NumPl)) (UseN (european_N)))) (UseComp (CompAP (AdvAP (PositA (resident_A)) (PrepNP (in_Prep) (UsePN (europe_PN)))))))));+lin s_026_2_p = (Sentence (UseCl (Present) (PPos) (PredVP (PredetNP (all_Predet) (DetCN (DetQuant (IndefArt) (NumPl)) (UseN (european_N)))) (UseComp (CompCN (UseN (person_N)))))));+lin s_026_3_p = (Sentence (UseCl (Present) (PPos) (PredVP (PredetNP (all_Predet) (DetCN (DetQuant (IndefArt) (NumPl)) (RelCN (UseN (person_N)) (UseRCl (Present) (PPos) (RelVP (IdRP) (UseComp (CompAP (AdvAP (PositA (resident_A)) (PrepNP (in_Prep) (UsePN (europe_PN))))))))))) (ComplVV (can_VV) (AdvVP (AdvVP (UseV (travel_V)) (PositAdvAdj (free_A))) (PrepNP (within_Prep) (UsePN (europe_PN))))))));+lin s_026_4_q = (Question (UseQCl (Present) (PPos) (QuestCl (PredVP (PredetNP (most_Predet) (DetCN (DetQuant (IndefArt) (NumPl)) (UseN (european_N)))) (ComplVV (can_VV) (AdvVP (AdvVP (UseV (travel_V)) (PositAdvAdj (free_A))) (PrepNP (within_Prep) (UsePN (europe_PN)))))))));+lin s_026_5_h = (Sentence (UseCl (Present) (PPos) (PredVP (PredetNP (most_Predet) (DetCN (DetQuant (IndefArt) (NumPl)) (UseN (european_N)))) (ComplVV (can_VV) (AdvVP (AdvVP (UseV (travel_V)) (PositAdvAdj (free_A))) (PrepNP (within_Prep) (UsePN (europe_PN))))))));++lin s_027_1_p = (Sentence (UseCl (Present) (PPos) (PredVP (DetCN (a_few_Det) (UseN (committee_member_N))) (UseComp (CompAdv (PrepNP (from_Prep) (UsePN (sweden_PN))))))));+lin s_027_2_p = (Sentence (UseCl (Present) (PPos) (PredVP (PredetNP (all_Predet) (DetCN (DetQuant (IndefArt) (NumPl)) (UseN (committee_member_N)))) (UseComp (CompCN (UseN (person_N)))))));+lin s_027_3_p = (Sentence (UseCl (Present) (PPos) (PredVP (PredetNP (all_Predet) (DetCN (DetQuant (IndefArt) (NumPl)) (RelCN (UseN (person_N)) (UseRCl (Present) (PPos) (RelVP (IdRP) (UseComp (CompAdv (PrepNP (from_Prep) (UsePN (sweden_PN)))))))))) (UseComp (CompAdv (PrepNP (from_Prep) (UsePN (scandinavia_PN))))))));+lin s_027_4_q = (Question (UseQCl (Present) (PPos) (QuestCl (PredVP (PredetNP (at_least_Predet) (DetCN (a_few_Det) (UseN (committee_member_N)))) (UseComp (CompAdv (PrepNP (from_Prep) (UsePN (scandinavia_PN)))))))));+lin s_027_5_h = (Sentence (UseCl (Present) (PPos) (PredVP (PredetNP (at_least_Predet) (DetCN (a_few_Det) (UseN (committee_member_N)))) (UseComp (CompAdv (PrepNP (from_Prep) (UsePN (scandinavia_PN))))))));++lin s_028_1_p = (Sentence (UseCl (Present) (PPos) (PredVP (DetCN (few_Det) (UseN (committee_member_N))) (UseComp (CompAdv (PrepNP (from_Prep) (UsePN (portugal_PN))))))));+lin s_028_2_p = s_027_2_p;+lin s_028_3_p = (Sentence (UseCl (Present) (PPos) (PredVP (PredetNP (all_Predet) (DetCN (DetQuant (IndefArt) (NumPl)) (RelCN (UseN (person_N)) (UseRCl (Present) (PPos) (RelVP (IdRP) (UseComp (CompAdv (PrepNP (from_Prep) (UsePN (portugal_PN)))))))))) (UseComp (CompAdv (PrepNP (from_Prep) (UsePN (southern_europe_PN))))))));+lin s_028_4_q = (Question (UseQCl (Present) (PPos) (QuestCl (ExistNP (DetCN (few_Det) (AdvCN (UseN (committee_member_N)) (PrepNP (from_Prep) (UsePN (southern_europe_PN)))))))));+lin s_028_5_h = (Sentence (UseCl (Present) (PPos) (ExistNP (DetCN (few_Det) (AdvCN (UseN (committee_member_N)) (PrepNP (from_Prep) (UsePN (southern_europe_PN))))))));++lin s_029_1_p = (Sentence (UseCl (Past) (PPos) (PredVP (DetCN (both_Det) (UseN (commissioner_N))) (ComplVV (use_VV) (UseComp (CompCN (AdjCN (PositA (leading_A)) (UseN (businessman_N)))))))));+lin s_029_2_q = (Question (UseQCl (Past) (PPos) (QuestCl (PredVP (DetCN (both_Det) (UseN (commissioner_N))) (ComplVV (use_VV) (UseComp (CompCN (UseN (businessman_N)))))))));+lin s_029_3_h = (Sentence (UseCl (Past) (PPos) (PredVP (DetCN (both_Det) (UseN (commissioner_N))) (ComplVV (use_VV) (UseComp (CompCN (UseN (businessman_N))))))));++lin s_030_1_p = (Sentence (UseCl (Present) (PPos) (PredVP (DetCN (neither_Det) (UseN (commissioner_N))) (AdvVP (ComplSlash (SlashV2a (spend_V2)) (DetCN (a_lot_of_Det) (UseN (time_N)))) (at_home_Adv)))));+lin s_030_2_q = (Question (UseQCl (Present) (PPos) (QuestCl (PredVP (DetCN (neither_Det) (UseN (commissioner_N))) (AdvVP (ComplSlash (SlashV2a (spend_V2)) (MassNP (UseN (time_N)))) (at_home_Adv))))));+lin s_030_3_h = (Sentence (UseCl (Present) (PPos) (PredVP (DetCN (neither_Det) (UseN (commissioner_N))) (AdvVP (ComplSlash (SlashV2a (spend_V2)) (MassNP (UseN (time_N)))) (at_home_Adv)))));++lin s_031_1_p = (Sentence (UseCl (Present) (PPos) (PredVP (PredetNP (at_least_Predet) (DetCN (DetQuant (IndefArt) (NumCard (NumNumeral (N_three)))) (UseN (commissioner_N)))) (AdvVP (ComplSlash (SlashV2a (spend_V2)) (DetCN (a_lot_of_Det) (UseN (time_N)))) (at_home_Adv)))));+lin s_031_2_q = (Question (UseQCl (Present) (PPos) (QuestCl (PredVP (PredetNP (at_least_Predet) (DetCN (DetQuant (IndefArt) (NumCard (NumNumeral (N_three)))) (UseN (commissioner_N)))) (AdvVP (ComplSlash (SlashV2a (spend_V2)) (MassNP (UseN (time_N)))) (at_home_Adv))))));+lin s_031_3_h = (Sentence (UseCl (Present) (PPos) (PredVP (PredetNP (at_least_Predet) (DetCN (DetQuant (IndefArt) (NumCard (NumNumeral (N_three)))) (UseN (commissioner_N)))) (AdvVP (ComplSlash (SlashV2a (spend_V2)) (MassNP (UseN (time_N)))) (at_home_Adv)))));++lin s_032_1_p = (Sentence (UseCl (Present) (PPos) (PredVP (PredetNP (at_most_Predet) (DetCN (DetQuant (IndefArt) (NumCard (NumNumeral (N_ten)))) (UseN (commissioner_N)))) (AdvVP (ComplSlash (SlashV2a (spend_V2)) (DetCN (a_lot_of_Det) (UseN (time_N)))) (at_home_Adv)))));+lin s_032_2_q = (Question (UseQCl (Present) (PPos) (QuestCl (PredVP (PredetNP (at_most_Predet) (DetCN (DetQuant (IndefArt) (NumCard (NumNumeral (N_ten)))) (UseN (commissioner_N)))) (AdvVP (ComplSlash (SlashV2a (spend_V2)) (MassNP (UseN (time_N)))) (at_home_Adv))))));+lin s_032_3_h = (Sentence (UseCl (Present) (PPos) (PredVP (PredetNP (at_most_Predet) (DetCN (DetQuant (IndefArt) (NumCard (NumNumeral (N_ten)))) (UseN (commissioner_N)))) (AdvVP (ComplSlash (SlashV2a (spend_V2)) (MassNP (UseN (time_N)))) (at_home_Adv)))));++lin s_033_1_p = s_017_3_h;+lin s_033_2_q = (Question (UseQCl (Past) (PPos) (QuestCl (PredVP (DetCN (DetQuant (IndefArt) (NumSg)) (UseN (irishman_N))) (ComplSlash (SlashV2a (win_V2)) (DetCN (DetQuant (DefArt) (NumSg)) (ComplN2 (nobel_prize_N2) (MassNP (UseN (literature_N))))))))));+lin s_033_3_h = s_017_1_p;++lin s_034_1_p = s_018_5_h;+lin s_034_2_p = s_018_2_p;+lin s_034_3_p = s_018_3_p;+lin s_034_4_q = (Question (UseQCl (Present) (PPos) (QuestCl (PredVP (DetCN (every_Det) (UseN (european_N))) (ComplSlash (SlashV2a (have_V2)) (DetCN (DetQuant (DefArt) (NumSg)) (SentCN (UseN (right_N)) (EmbedVP (AdvVP (UseV (live_V)) (PrepNP (in_Prep) (UsePN (europe_PN))))))))))));+lin s_034_5_h = s_018_1_p;++lin s_035_1_p = s_019_5_h;+lin s_035_2_p = s_018_2_p;+lin s_035_3_p = s_018_3_p;+lin s_035_4_q = (Question (UseQCl (Present) (PPos) (QuestCl (PredVP (PredetNP (all_Predet) (DetCN (DetQuant (IndefArt) (NumPl)) (UseN (european_N)))) (ComplSlash (SlashV2a (have_V2)) (DetCN (DetQuant (DefArt) (NumSg)) (SentCN (UseN (right_N)) (EmbedVP (AdvVP (UseV (live_V)) (PrepNP (in_Prep) (UsePN (europe_PN))))))))))));+lin s_035_5_h = s_019_1_p;++lin s_036_1_p = s_020_5_h;+lin s_036_2_p = s_018_2_p;+lin s_036_3_p = s_018_3_p;+lin s_036_4_q = (Question (UseQCl (Present) (PPos) (QuestCl (PredVP (DetCN (each_Det) (UseN (european_N))) (ComplSlash (SlashV2a (have_V2)) (DetCN (DetQuant (DefArt) (NumSg)) (SentCN (UseN (right_N)) (EmbedVP (AdvVP (UseV (live_V)) (PrepNP (in_Prep) (UsePN (europe_PN))))))))))));+lin s_036_5_h = s_020_1_p;++lin s_037_1_p = s_021_5_h;+lin s_037_2_p = s_021_2_p;+lin s_037_3_p = (Sentence (UseCl (Present) (PPos) (PredVP (DetCN (every_Det) (RelCN (UseN (individual_N)) (UseRCl (Present) (PPos) (RelVP (IdRP) (ComplSlash (SlashV2a (have_V2)) (DetCN (DetQuant (DefArt) (NumSg)) (SentCN (UseN (right_N)) (EmbedVP (AdvVP (AdvVP (UseV (live_V)) (anywhere_Adv)) (PrepNP (in_Prep) (UsePN (europe_PN)))))))))))) (ComplVV (can_VV) (AdvVP (AdvVP (UseV (travel_V)) (PositAdvAdj (free_A))) (PrepNP (within_Prep) (UsePN (europe_PN))))))));+lin s_037_4_q = (Question (UseQCl (Present) (PPos) (QuestCl (PredVP (DetCN (DetQuant (DefArt) (NumPl)) (ComplN2 (resident_in_N2) (DetCN (DetQuant (IndefArt) (NumPl)) (UseN (member_state_N))))) (ComplSlash (SlashV2a (have_V2)) (DetCN (DetQuant (DefArt) (NumSg)) (SentCN (UseN (right_N)) (EmbedVP (AdvVP (AdvVP (UseV (live_V)) (anywhere_Adv)) (PrepNP (in_Prep) (UsePN (europe_PN))))))))))));+lin s_037_5_h = (Sentence (UseCl (Present) (PPos) (PredVP (DetCN (DetQuant (DefArt) (NumPl)) (ComplN2 (resident_in_N2) (DetCN (DetQuant (IndefArt) (NumPl)) (UseN (member_state_N))))) (ComplSlash (SlashV2a (have_V2)) (DetCN (DetQuant (DefArt) (NumSg)) (SentCN (UseN (right_N)) (EmbedVP (AdvVP (AdvVP (UseV (live_V)) (anywhere_Adv)) (PrepNP (in_Prep) (UsePN (europe_PN)))))))))));++lin s_038_1_p = s_022_3_h;+lin s_038_2_q = (Question (UseQCl (Past) (PPos) (QuestCl (PredVP (DetCN (anySg_Det) (UseN (delegate_N))) (AdvVP (ComplSlash (SlashV2a (finish_V2)) (DetCN (DetQuant (DefArt) (NumSg)) (UseN (report_N)))) (on_time_Adv))))));+lin s_038_3_h = (Sentence (UseCl (Past) (PPos) (PredVP (DetCN (someSg_Det) (UseN (delegate_N))) (AdvVP (ComplSlash (SlashV2a (finish_V2)) (DetCN (DetQuant (DefArt) (NumSg)) (UseN (report_N)))) (on_time_Adv)))));++lin s_039_1_p = s_023_3_h;+lin s_039_2_q = (Question (UseQCl (Past) (PPos) (QuestCl (PredVP (DetCN (somePl_Det) (UseN (delegate_N))) (AdvVP (ComplSlash (SlashV2a (finish_V2)) (DetCN (DetQuant (DefArt) (NumSg)) (UseN (survey_N)))) (on_time_Adv))))));+lin s_039_3_h = s_023_1_p;++lin s_040_1_p = s_024_3_h;+lin s_040_2_q = (Question (UseQCl (Past) (PPos) (QuestCl (PredVP (DetCN (many_Det) (UseN (delegate_N))) (ComplSlash (Slash3V3 (obtain_from_V3) (DetCN (DetQuant (DefArt) (NumSg)) (UseN (survey_N)))) (DetCN (DetQuant (IndefArt) (NumPl)) (AdjCN (PositA (interesting_A)) (UseN (result_N)))))))));+lin s_040_3_h = s_024_1_p;++lin s_041_1_p = s_025_3_h;+lin s_041_2_q = (Question (UseQCl (Past) (PPos) (QuestCl (PredVP (DetCN (several_Det) (UseN (delegate_N))) (AdvVP (ComplSlash (SlashV2a (get_V2)) (PPartNP (DetCN (DetQuant (DefArt) (NumPl)) (UseN (result_N))) (publish_V2))) (PrepNP (in_Prep) (DetCN (DetQuant (IndefArt) (NumPl)) (AdjCN (PositA (major_A)) (AdjCN (PositA (national_A)) (UseN (newspaper_N)))))))))));+lin s_041_3_h = s_025_1_p;++lin s_042_1_p = s_026_5_h;+lin s_042_2_p = s_026_2_p;+lin s_042_3_p = s_026_3_p;+lin s_042_4_q = (Question (UseQCl (Present) (PPos) (QuestCl (PredVP (PredetNP (most_Predet) (DetCN (DetQuant (IndefArt) (NumPl)) (UseN (european_N)))) (UseComp (CompAP (AdvAP (PositA (resident_A)) (PrepNP (in_Prep) (UsePN (europe_PN))))))))));+lin s_042_5_h = s_026_1_p;++lin s_043_1_p = (Sentence (UseCl (Present) (PPos) (PredVP (DetCN (a_few_Det) (UseN (committee_member_N))) (UseComp (CompAdv (PrepNP (from_Prep) (UsePN (scandinavia_PN))))))));+lin s_043_2_p = s_027_2_p;+lin s_043_3_p = s_027_3_p;+lin s_043_4_q = (Question (UseQCl (Present) (PPos) (QuestCl (PredVP (PredetNP (at_least_Predet) (DetCN (a_few_Det) (UseN (committee_member_N)))) (UseComp (CompAdv (PrepNP (from_Prep) (UsePN (sweden_PN)))))))));+lin s_043_5_h = (Sentence (UseCl (Present) (PPos) (PredVP (PredetNP (at_least_Predet) (DetCN (a_few_Det) (UseN (committee_member_N)))) (UseComp (CompAdv (PrepNP (from_Prep) (UsePN (sweden_PN))))))));++lin s_044_1_p = (Sentence (UseCl (Present) (PPos) (PredVP (DetCN (few_Det) (UseN (committee_member_N))) (UseComp (CompAdv (PrepNP (from_Prep) (UsePN (southern_europe_PN))))))));+lin s_044_2_p = s_027_2_p;+lin s_044_3_p = s_028_3_p;+lin s_044_4_q = (Question (UseQCl (Present) (PPos) (QuestCl (ExistNP (DetCN (few_Det) (AdvCN (UseN (committee_member_N)) (PrepNP (from_Prep) (UsePN (portugal_PN)))))))));+lin s_044_5_h = (Sentence (UseCl (Present) (PPos) (ExistNP (DetCN (few_Det) (AdvCN (UseN (committee_member_N)) (PrepNP (from_Prep) (UsePN (portugal_PN))))))));++lin s_045_1_p = s_029_3_h;+lin s_045_2_q = (Question (UseQCl (Past) (PPos) (QuestCl (PredVP (DetCN (both_Det) (UseN (commissioner_N))) (ComplVV (use_VV) (UseComp (CompCN (AdjCN (PositA (leading_A)) (UseN (businessman_N))))))))));+lin s_045_3_h = s_029_1_p;++lin s_046_1_p = s_030_3_h;+lin s_046_2_q = (Question (UseQCl (Present) (PPos) (QuestCl (PredVP (DetCN (either_Det) (UseN (commissioner_N))) (AdvVP (ComplSlash (SlashV2a (spend_V2)) (DetCN (a_lot_of_Det) (UseN (time_N)))) (at_home_Adv))))));+lin s_046_3_h = (Sentence (UseCl (Present) (PPos) (PredVP (AdvNP (DetNP (DetQuant (IndefArt) (NumSg))) (PrepNP (part_Prep) (DetCN (DetQuant (DefArt) (NumPl)) (UseN (commissioner_N))))) (AdvVP (ComplSlash (SlashV2a (spend_V2)) (DetCN (a_lot_of_Det) (UseN (time_N)))) (at_home_Adv)))));++lin s_047_1_p = s_031_3_h;+lin s_047_2_q = (Question (UseQCl (Present) (PPos) (QuestCl (PredVP (PredetNP (at_least_Predet) (DetCN (DetQuant (IndefArt) (NumCard (NumNumeral (N_three)))) (UseN (commissioner_N)))) (AdvVP (ComplSlash (SlashV2a (spend_V2)) (DetCN (a_lot_of_Det) (UseN (time_N)))) (at_home_Adv))))));+lin s_047_3_h = s_031_1_p;++lin s_048_1_p = s_032_3_h;+lin s_048_2_q = (Question (UseQCl (Present) (PPos) (QuestCl (PredVP (PredetNP (at_most_Predet) (DetCN (DetQuant (IndefArt) (NumCard (NumNumeral (N_ten)))) (UseN (commissioner_N)))) (AdvVP (ComplSlash (SlashV2a (spend_V2)) (DetCN (a_lot_of_Det) (UseN (time_N)))) (at_home_Adv))))));+lin s_048_3_h = s_032_1_p;++lin s_049_1_p = (Sentence (UseCl (Past) (PPos) (PredVP (DetCN (DetQuant (IndefArt) (NumSg)) (UseN (swede_N))) (ComplSlash (SlashV2a (win_V2)) (DetCN (DetQuant (IndefArt) (NumSg)) (UseN (nobel_prize_N)))))));+lin s_049_2_p = (Sentence (UseCl (Present) (PPos) (PredVP (DetCN (every_Det) (UseN (swede_N))) (UseComp (CompCN (UseN (scandinavian_N)))))));+lin s_049_3_q = (Question (UseQCl (Past) (PPos) (QuestCl (PredVP (DetCN (DetQuant (IndefArt) (NumSg)) (UseN (scandinavian_N))) (ComplSlash (SlashV2a (win_V2)) (DetCN (DetQuant (IndefArt) (NumSg)) (UseN (nobel_prize_N))))))));+lin s_049_4_h = (Sentence (UseCl (Past) (PPos) (PredVP (DetCN (DetQuant (IndefArt) (NumSg)) (UseN (scandinavian_N))) (ComplSlash (SlashV2a (win_V2)) (DetCN (DetQuant (IndefArt) (NumSg)) (UseN (nobel_prize_N)))))));++lin s_050_1_p = (Sentence (UseCl (Present) (PPos) (PredVP (DetCN (every_Det) (AdjCN (PositA (canadian_A)) (UseN (resident_N)))) (ComplVV (can_VV) (AdvVP (AdvVP (UseV (travel_V)) (PositAdvAdj (free_A))) (PrepNP (within_Prep) (UsePN (europe_PN))))))));+lin s_050_2_p = (Sentence (UseCl (Present) (PPos) (PredVP (DetCN (every_Det) (AdjCN (PositA (canadian_A)) (UseN (resident_N)))) (UseComp (CompCN (ComplN2 (resident_on_N2) (DetCN (DetQuant (DefArt) (NumSg)) (AdjCN (PositA (north_american_A)) (UseN (continent_N))))))))));+lin s_050_3_q = (Question (UseQCl (Present) (PPos) (QuestCl (PredVP (DetCN (every_Det) (ComplN2 (resident_on_N2) (DetCN (DetQuant (DefArt) (NumSg)) (AdjCN (PositA (north_american_A)) (UseN (continent_N)))))) (ComplVV (can_VV) (AdvVP (AdvVP (UseV (travel_V)) (PositAdvAdj (free_A))) (PrepNP (within_Prep) (UsePN (europe_PN)))))))));+lin s_050_4_h = (Sentence (UseCl (Present) (PPos) (PredVP (DetCN (every_Det) (ComplN2 (resident_on_N2) (DetCN (DetQuant (DefArt) (NumSg)) (AdjCN (PositA (north_american_A)) (UseN (continent_N)))))) (ComplVV (can_VV) (AdvVP (AdvVP (UseV (travel_V)) (PositAdvAdj (free_A))) (PrepNP (within_Prep) (UsePN (europe_PN))))))));++lin s_051_1_p = (Sentence (UseCl (Present) (PPos) (PredVP (PredetNP (all_Predet) (DetCN (DetQuant (IndefArt) (NumPl)) (AdjCN (PositA (canadian_A)) (UseN (resident_N))))) (ComplVV (can_VV) (AdvVP (AdvVP (UseV (travel_V)) (PositAdvAdj (free_A))) (PrepNP (within_Prep) (UsePN (europe_PN))))))));+lin s_051_2_p = s_050_2_p;+lin s_051_3_q = (Question (UseQCl (Present) (PPos) (QuestCl (PredVP (PredetNP (all_Predet) (DetCN (DetQuant (IndefArt) (NumPl)) (ComplN2 (resident_on_N2) (DetCN (DetQuant (DefArt) (NumSg)) (AdjCN (PositA (north_american_A)) (UseN (continent_N))))))) (ComplVV (can_VV) (AdvVP (AdvVP (UseV (travel_V)) (PositAdvAdj (free_A))) (PrepNP (within_Prep) (UsePN (europe_PN)))))))));+lin s_051_4_h = (Sentence (UseCl (Present) (PPos) (PredVP (PredetNP (all_Predet) (DetCN (DetQuant (IndefArt) (NumPl)) (ComplN2 (resident_on_N2) (DetCN (DetQuant (DefArt) (NumSg)) (AdjCN (PositA (north_american_A)) (UseN (continent_N))))))) (ComplVV (can_VV) (AdvVP (AdvVP (UseV (travel_V)) (PositAdvAdj (free_A))) (PrepNP (within_Prep) (UsePN (europe_PN))))))));++lin s_052_1_p = (Sentence (UseCl (Present) (PPos) (PredVP (DetCN (each_Det) (AdjCN (PositA (canadian_A)) (UseN (resident_N)))) (ComplVV (can_VV) (AdvVP (AdvVP (UseV (travel_V)) (PositAdvAdj (free_A))) (PrepNP (within_Prep) (UsePN (europe_PN))))))));+lin s_052_2_p = s_050_2_p;+lin s_052_3_q = (Question (UseQCl (Present) (PPos) (QuestCl (PredVP (DetCN (each_Det) (ComplN2 (resident_on_N2) (DetCN (DetQuant (DefArt) (NumSg)) (AdjCN (PositA (north_american_A)) (UseN (continent_N)))))) (ComplVV (can_VV) (AdvVP (AdvVP (UseV (travel_V)) (PositAdvAdj (free_A))) (PrepNP (within_Prep) (UsePN (europe_PN)))))))));+lin s_052_4_h = (Sentence (UseCl (Present) (PPos) (PredVP (DetCN (each_Det) (ComplN2 (resident_on_N2) (DetCN (DetQuant (DefArt) (NumSg)) (AdjCN (PositA (north_american_A)) (UseN (continent_N)))))) (ComplVV (can_VV) (AdvVP (AdvVP (UseV (travel_V)) (PositAdvAdj (free_A))) (PrepNP (within_Prep) (UsePN (europe_PN))))))));++lin s_053_1_p = (Sentence (UseCl (Present) (PPos) (PredVP (DetCN (DetQuant (DefArt) (NumPl)) (ComplN2 (resident_in_N2) (DetCN (DetQuant (IndefArt) (NumPl)) (AdjCN (PositA (major_A)) (AdjCN (PositA (western_A)) (UseN (country_N))))))) (ComplVV (can_VV) (AdvVP (AdvVP (UseV (travel_V)) (PositAdvAdj (free_A))) (PrepNP (within_Prep) (UsePN (europe_PN))))))));+lin s_053_2_p = (Sentence (UseCl (Present) (PPos) (PredVP (PredetNP (all_Predet) (DetCN (DetQuant (IndefArt) (NumPl)) (ComplN2 (resident_in_N2) (DetCN (DetQuant (IndefArt) (NumPl)) (AdjCN (PositA (major_A)) (AdjCN (PositA (western_A)) (UseN (country_N)))))))) (UseComp (CompCN (ComplN2 (resident_in_N2) (DetCN (DetQuant (IndefArt) (NumPl)) (AdjCN (PositA (western_A)) (UseN (country_N))))))))));+lin s_053_3_q = (Question (UseQCl (Present) (PPos) (QuestCl (PredVP (DetCN (DetQuant (DefArt) (NumPl)) (ComplN2 (resident_in_N2) (DetCN (DetQuant (IndefArt) (NumPl)) (AdjCN (PositA (western_A)) (UseN (country_N)))))) (ComplSlash (SlashV2a (have_V2)) (DetCN (DetQuant (DefArt) (NumSg)) (SentCN (UseN (right_N)) (EmbedVP (AdvVP (UseV (live_V)) (PrepNP (in_Prep) (UsePN (europe_PN))))))))))));+lin s_053_4_h = (Sentence (UseCl (Present) (PPos) (PredVP (DetCN (DetQuant (DefArt) (NumPl)) (ComplN2 (resident_in_N2) (DetCN (DetQuant (IndefArt) (NumPl)) (AdjCN (PositA (western_A)) (UseN (country_N)))))) (ComplSlash (SlashV2a (have_V2)) (DetCN (DetQuant (DefArt) (NumSg)) (SentCN (UseN (right_N)) (EmbedVP (AdvVP (UseV (live_V)) (PrepNP (in_Prep) (UsePN (europe_PN)))))))))));++lin s_054_1_p = (Sentence (UseCl (Past) (PPos) (PredVP (DetCN (DetQuant (no_Quant) (NumSg)) (AdjCN (PositA (scandinavian_A)) (UseN (delegate_N)))) (AdvVP (ComplSlash (SlashV2a (finish_V2)) (DetCN (DetQuant (DefArt) (NumSg)) (UseN (report_N)))) (on_time_Adv)))));+lin s_054_2_q = s_038_2_q;+lin s_054_3_h = s_038_3_h;++lin s_055_1_p = (Sentence (UseCl (Past) (PPos) (PredVP (DetCN (somePl_Det) (AdjCN (PositA (irish_A)) (UseN (delegate_N)))) (AdvVP (ComplSlash (SlashV2a (finish_V2)) (DetCN (DetQuant (DefArt) (NumSg)) (UseN (survey_N)))) (on_time_Adv)))));+lin s_055_2_q = (Question (UseQCl (Past) (PPos) (QuestCl (PredVP (DetCN (anyPl_Det) (UseN (delegate_N))) (AdvVP (ComplSlash (SlashV2a (finish_V2)) (DetCN (DetQuant (DefArt) (NumSg)) (UseN (survey_N)))) (on_time_Adv))))));+lin s_055_3_h = s_023_1_p;++lin s_056_1_p = (Sentence (UseCl (Past) (PPos) (PredVP (DetCN (many_Det) (AdjCN (PositA (british_A)) (UseN (delegate_N)))) (ComplSlash (Slash3V3 (obtain_from_V3) (DetCN (DetQuant (DefArt) (NumSg)) (UseN (survey_N)))) (DetCN (DetQuant (IndefArt) (NumPl)) (AdjCN (PositA (interesting_A)) (UseN (result_N))))))));+lin s_056_2_q = s_040_2_q;+lin s_056_3_h = s_024_1_p;++lin s_057_1_p = (Sentence (UseCl (Past) (PPos) (PredVP (DetCN (several_Det) (AdjCN (PositA (portuguese_A)) (UseN (delegate_N)))) (AdvVP (ComplSlash (SlashV2a (get_V2)) (PPartNP (DetCN (DetQuant (DefArt) (NumPl)) (UseN (result_N))) (publish_V2))) (PrepNP (in_Prep) (DetCN (DetQuant (IndefArt) (NumPl)) (AdjCN (PositA (major_A)) (AdjCN (PositA (national_A)) (UseN (newspaper_N))))))))));+lin s_057_2_q = s_041_2_q;+lin s_057_3_h = s_025_1_p;++lin s_058_1_p = (Sentence (UseCl (Present) (PPos) (PredVP (PredetNP (most_Predet) (DetCN (DetQuant (IndefArt) (NumPl)) (RelCN (UseN (european_N)) (UseRCl (Present) (PPos) (RelVP (IdRP) (AdvVP (UseComp (CompAP (PositA (resident_A)))) (PrepNP (in_Prep) (UsePN (europe_PN))))))))) (ComplVV (can_VV) (AdvVP (AdvVP (UseV (travel_V)) (PositAdvAdj (free_A))) (PrepNP (within_Prep) (UsePN (europe_PN))))))));+lin s_058_2_q = s_026_4_q;+lin s_058_3_h = s_026_5_h;++lin s_059_1_p = (Sentence (UseCl (Present) (PPos) (PredVP (DetCN (a_few_Det) (AdjCN (PositA (female_A)) (UseN (committee_member_N)))) (UseComp (CompAdv (PrepNP (from_Prep) (UsePN (scandinavia_PN))))))));+lin s_059_2_q = s_027_4_q;+lin s_059_3_h = s_027_5_h;++lin s_060_1_p = (Sentence (UseCl (Present) (PPos) (PredVP (DetCN (few_Det) (AdjCN (PositA (female_A)) (UseN (committee_member_N)))) (UseComp (CompAdv (PrepNP (from_Prep) (UsePN (southern_europe_PN))))))));+lin s_060_2_q = (Question (UseQCl (Present) (PPos) (QuestCl (PredVP (DetCN (few_Det) (UseN (committee_member_N))) (UseComp (CompAdv (PrepNP (from_Prep) (UsePN (southern_europe_PN)))))))));+lin s_060_3_h = s_044_1_p;++lin s_061_1_p = (Sentence (UseCl (Past) (PPos) (PredVP (DetCN (both_Det) (AdjCN (PositA (female_A)) (UseN (commissioner_N)))) (ComplVV (use_VV) (UseComp (CompAdv (PrepNP (in_Prep) (MassNP (UseN (business_N))))))))));+lin s_061_2_q = (Question (UseQCl (Past) (PPos) (QuestCl (PredVP (DetCN (both_Det) (UseN (commissioner_N))) (ComplVV (use_VV) (UseComp (CompAdv (PrepNP (in_Prep) (MassNP (UseN (business_N)))))))))));+lin s_061_3_h = (Sentence (UseCl (Past) (PPos) (PredVP (DetCN (both_Det) (UseN (commissioner_N))) (ComplVV (use_VV) (UseComp (CompAdv (PrepNP (in_Prep) (MassNP (UseN (business_N))))))))));++lin s_062_1_p = (Sentence (UseCl (Present) (PPos) (PredVP (DetCN (neither_Det) (AdjCN (PositA (female_A)) (UseN (commissioner_N)))) (AdvVP (ComplSlash (SlashV2a (spend_V2)) (DetCN (a_lot_of_Det) (UseN (time_N)))) (at_home_Adv)))));+lin s_062_2_q = s_046_2_q;+lin s_062_3_h = s_046_3_h;++lin s_063_1_p = (Sentence (UseCl (Present) (PPos) (PredVP (PredetNP (at_least_Predet) (DetCN (DetQuant (IndefArt) (NumCard (NumNumeral (N_three)))) (AdjCN (PositA (female_A)) (UseN (commissioner_N))))) (AdvVP (ComplSlash (SlashV2a (spend_V2)) (MassNP (UseN (time_N)))) (at_home_Adv)))));+lin s_063_2_q = s_031_2_q;+lin s_063_3_h = s_031_3_h;++lin s_064_1_p = (Sentence (UseCl (Present) (PPos) (PredVP (PredetNP (at_most_Predet) (DetCN (DetQuant (IndefArt) (NumCard (NumNumeral (N_ten)))) (AdjCN (PositA (female_A)) (UseN (commissioner_N))))) (AdvVP (ComplSlash (SlashV2a (spend_V2)) (MassNP (UseN (time_N)))) (at_home_Adv)))));+lin s_064_2_q = s_032_2_q;+lin s_064_3_h = s_032_3_h;++lin s_065_1_p = s_049_4_h;+lin s_065_2_p = s_049_2_p;+lin s_065_3_q = (Question (UseQCl (Past) (PPos) (QuestCl (PredVP (DetCN (DetQuant (IndefArt) (NumSg)) (UseN (swede_N))) (ComplSlash (SlashV2a (win_V2)) (DetCN (DetQuant (IndefArt) (NumSg)) (UseN (nobel_prize_N))))))));+lin s_065_4_h = s_049_1_p;++lin s_066_1_p = s_050_4_h;+lin s_066_2_p = s_050_2_p;+lin s_066_3_q = (Question (UseQCl (Present) (PPos) (QuestCl (PredVP (DetCN (every_Det) (AdjCN (PositA (canadian_A)) (UseN (resident_N)))) (ComplVV (can_VV) (AdvVP (AdvVP (UseV (travel_V)) (PositAdvAdj (free_A))) (PrepNP (within_Prep) (UsePN (europe_PN)))))))));+lin s_066_4_h = s_050_1_p;++lin s_067_1_p = s_051_4_h;+lin s_067_2_p = s_050_2_p;+lin s_067_3_q = (Question (UseQCl (Present) (PPos) (QuestCl (PredVP (PredetNP (all_Predet) (DetCN (DetQuant (IndefArt) (NumPl)) (AdjCN (PositA (canadian_A)) (UseN (resident_N))))) (ComplVV (can_VV) (AdvVP (AdvVP (UseV (travel_V)) (PositAdvAdj (free_A))) (PrepNP (within_Prep) (UsePN (europe_PN)))))))));+lin s_067_4_h = s_051_1_p;++lin s_068_1_p = s_052_4_h;+lin s_068_2_p = s_050_2_p;+lin s_068_3_q = (Question (UseQCl (Present) (PPos) (QuestCl (PredVP (DetCN (each_Det) (AdjCN (PositA (canadian_A)) (UseN (resident_N)))) (ComplVV (can_VV) (AdvVP (AdvVP (UseV (travel_V)) (PositAdvAdj (free_A))) (PrepNP (within_Prep) (UsePN (europe_PN)))))))));+lin s_068_4_h = s_052_1_p;++lin s_069_1_p = (Sentence (UseCl (Present) (PPos) (PredVP (DetCN (DetQuant (DefArt) (NumPl)) (ComplN2 (resident_in_N2) (DetCN (DetQuant (IndefArt) (NumPl)) (AdjCN (PositA (western_A)) (UseN (country_N)))))) (ComplVV (can_VV) (AdvVP (AdvVP (UseV (travel_V)) (PositAdvAdj (free_A))) (PrepNP (within_Prep) (UsePN (europe_PN))))))));+lin s_069_2_p = s_053_2_p;+lin s_069_3_q = (Question (UseQCl (Present) (PPos) (QuestCl (PredVP (DetCN (DetQuant (DefArt) (NumPl)) (ComplN2 (resident_in_N2) (DetCN (DetQuant (IndefArt) (NumPl)) (AdjCN (PositA (major_A)) (AdjCN (PositA (western_A)) (UseN (country_N))))))) (ComplSlash (SlashV2a (have_V2)) (DetCN (DetQuant (DefArt) (NumSg)) (SentCN (UseN (right_N)) (EmbedVP (AdvVP (UseV (live_V)) (PrepNP (in_Prep) (UsePN (europe_PN))))))))))));+lin s_069_4_h = (Sentence (UseCl (Present) (PPos) (PredVP (DetCN (DetQuant (DefArt) (NumPl)) (ComplN2 (resident_in_N2) (DetCN (DetQuant (IndefArt) (NumPl)) (AdjCN (PositA (major_A)) (AdjCN (PositA (western_A)) (UseN (country_N))))))) (ComplSlash (SlashV2a (have_V2)) (DetCN (DetQuant (DefArt) (NumSg)) (SentCN (UseN (right_N)) (EmbedVP (AdvVP (UseV (live_V)) (PrepNP (in_Prep) (UsePN (europe_PN)))))))))));++lin s_070_1_p = s_022_1_p;+lin s_070_2_q = (Question (UseQCl (Past) (PPos) (QuestCl (PredVP (DetCN (anySg_Det) (AdjCN (PositA (scandinavian_A)) (UseN (delegate_N)))) (AdvVP (ComplSlash (SlashV2a (finish_V2)) (DetCN (DetQuant (DefArt) (NumSg)) (UseN (report_N)))) (on_time_Adv))))));+lin s_070_3_h = (Sentence (UseCl (Past) (PPos) (PredVP (DetCN (someSg_Det) (AdjCN (PositA (scandinavian_A)) (UseN (delegate_N)))) (AdvVP (ComplSlash (SlashV2a (finish_V2)) (DetCN (DetQuant (DefArt) (NumSg)) (UseN (report_N)))) (on_time_Adv)))));++lin s_071_1_p = s_023_1_p;+lin s_071_2_q = (Question (UseQCl (Past) (PPos) (QuestCl (PredVP (DetCN (anyPl_Det) (AdjCN (PositA (irish_A)) (UseN (delegate_N)))) (AdvVP (ComplSlash (SlashV2a (finish_V2)) (DetCN (DetQuant (DefArt) (NumSg)) (UseN (survey_N)))) (on_time_Adv))))));+lin s_071_3_h = s_055_1_p;++lin s_072_1_p = s_024_1_p;+lin s_072_2_q = (Question (UseQCl (Past) (PPos) (QuestCl (PredVP (DetCN (many_Det) (AdjCN (PositA (british_A)) (UseN (delegate_N)))) (ComplSlash (Slash3V3 (obtain_from_V3) (DetCN (DetQuant (DefArt) (NumSg)) (UseN (survey_N)))) (DetCN (DetQuant (IndefArt) (NumPl)) (AdjCN (PositA (interesting_A)) (UseN (result_N)))))))));+lin s_072_3_h = s_056_1_p;++lin s_073_1_p = s_025_1_p;+lin s_073_2_q = (Question (UseQCl (Past) (PPos) (QuestCl (PredVP (DetCN (several_Det) (AdjCN (PositA (portuguese_A)) (UseN (delegate_N)))) (AdvVP (ComplSlash (SlashV2a (get_V2)) (PPartNP (DetCN (DetQuant (DefArt) (NumPl)) (UseN (result_N))) (publish_V2))) (PrepNP (in_Prep) (DetCN (DetQuant (IndefArt) (NumPl)) (AdjCN (PositA (major_A)) (AdjCN (PositA (national_A)) (UseN (newspaper_N)))))))))));+lin s_073_3_h = s_057_1_p;++lin s_074_1_p = s_026_5_h;+lin s_074_2_q = (Question (UseQCl (Present) (PPos) (QuestCl (PredVP (PredetNP (most_Predet) (DetCN (DetQuant (IndefArt) (NumPl)) (RelCN (UseN (european_N)) (UseRCl (Present) (PPos) (RelVP (IdRP) (UseComp (CompAP (AdvAP (PositA (resident_A)) (PrepNP (outside_Prep) (UsePN (europe_PN))))))))))) (ComplVV (can_VV) (AdvVP (AdvVP (UseV (travel_V)) (PositAdvAdj (free_A))) (PrepNP (within_Prep) (UsePN (europe_PN)))))))));+lin s_074_3_h = (Sentence (UseCl (Present) (PPos) (PredVP (PredetNP (most_Predet) (DetCN (DetQuant (IndefArt) (NumPl)) (RelCN (UseN (european_N)) (UseRCl (Present) (PPos) (RelVP (IdRP) (UseComp (CompAP (AdvAP (PositA (resident_A)) (PrepNP (outside_Prep) (UsePN (europe_PN))))))))))) (ComplVV (can_VV) (AdvVP (AdvVP (UseV (travel_V)) (PositAdvAdj (free_A))) (PrepNP (within_Prep) (UsePN (europe_PN))))))));++lin s_075_1_p = s_043_1_p;+lin s_075_2_q = (Question (UseQCl (Present) (PPos) (QuestCl (PredVP (PredetNP (at_least_Predet) (DetCN (a_few_Det) (AdjCN (PositA (female_A)) (UseN (committee_member_N))))) (UseComp (CompAdv (PrepNP (from_Prep) (UsePN (scandinavia_PN)))))))));+lin s_075_3_h = (Sentence (UseCl (Present) (PPos) (PredVP (PredetNP (at_least_Predet) (DetCN (a_few_Det) (AdjCN (PositA (female_A)) (UseN (committee_member_N))))) (UseComp (CompAdv (PrepNP (from_Prep) (UsePN (scandinavia_PN))))))));++lin s_076_1_p = s_044_1_p;+lin s_076_2_q = (Question (UseQCl (Present) (PPos) (QuestCl (PredVP (DetCN (few_Det) (AdjCN (PositA (female_A)) (UseN (committee_member_N)))) (UseComp (CompAdv (PrepNP (from_Prep) (UsePN (southern_europe_PN)))))))));+lin s_076_3_h = s_060_1_p;++lin s_077_1_p = s_061_3_h;+lin s_077_2_q = (Question (UseQCl (Past) (PPos) (QuestCl (PredVP (DetCN (both_Det) (AdjCN (PositA (female_A)) (UseN (commissioner_N)))) (ComplVV (use_VV) (UseComp (CompAdv (PrepNP (in_Prep) (MassNP (UseN (business_N)))))))))));+lin s_077_3_h = s_061_1_p;++lin s_078_1_p = s_030_1_p;+lin s_078_2_q = (Question (UseQCl (Present) (PPos) (QuestCl (PredVP (DetCN (either_Det) (AdjCN (PositA (female_A)) (UseN (commissioner_N)))) (AdvVP (ComplSlash (SlashV2a (spend_V2)) (DetCN (a_lot_of_Det) (UseN (time_N)))) (at_home_Adv))))));+lin s_078_3_h = (Sentence (UseCl (Present) (PPos) (PredVP (AdvNP (DetNP (DetQuant (IndefArt) (NumSg))) (PrepNP (part_Prep) (DetCN (DetQuant (DefArt) (NumPl)) (AdjCN (PositA (female_A)) (UseN (commissioner_N)))))) (AdvVP (ComplSlash (SlashV2a (spend_V2)) (DetCN (a_lot_of_Det) (UseN (time_N)))) (at_home_Adv)))));++lin s_079_1_p = s_031_3_h;+lin s_079_2_q = (Question (UseQCl (Present) (PPos) (QuestCl (PredVP (PredetNP (at_least_Predet) (DetCN (DetQuant (IndefArt) (NumCard (NumNumeral (N_three)))) (AdjCN (PositA (male_A)) (UseN (commissioner_N))))) (AdvVP (ComplSlash (SlashV2a (spend_V2)) (MassNP (UseN (time_N)))) (at_home_Adv))))));+lin s_079_3_h = (Sentence (UseCl (Present) (PPos) (PredVP (PredetNP (at_least_Predet) (DetCN (DetQuant (IndefArt) (NumCard (NumNumeral (N_three)))) (AdjCN (PositA (male_A)) (UseN (commissioner_N))))) (AdvVP (ComplSlash (SlashV2a (spend_V2)) (MassNP (UseN (time_N)))) (at_home_Adv)))));++lin s_080_1_p = s_032_3_h;+lin s_080_2_q = (Question (UseQCl (Present) (PPos) (QuestCl (PredVP (PredetNP (at_most_Predet) (DetCN (DetQuant (IndefArt) (NumCard (NumNumeral (N_ten)))) (AdjCN (PositA (female_A)) (UseN (commissioner_N))))) (AdvVP (ComplSlash (SlashV2a (spend_V2)) (MassNP (UseN (time_N)))) (at_home_Adv))))));+lin s_080_3_h = s_064_1_p;++lin s_081_1_p = (Sentence (UseCl (Past) (PPos) (PredVP (ConjNP3 (and_Conj) (UsePN (smith_PN)) (UsePN (jones_PN)) (UsePN (anderson_PN))) (ComplSlash (SlashV2a (sign_V2)) (DetCN (DetQuant (DefArt) (NumSg)) (UseN (contract_N)))))));+lin s_081_2_q = (Question (UseQCl (Past) (PPos) (QuestCl (PredVP (UsePN (jones_PN)) (ComplSlash (SlashV2a (sign_V2)) (DetCN (DetQuant (DefArt) (NumSg)) (UseN (contract_N))))))));+lin s_081_3_h = (Sentence (UseCl (Past) (PPos) (PredVP (UsePN (jones_PN)) (ComplSlash (SlashV2a (sign_V2)) (DetCN (DetQuant (DefArt) (NumSg)) (UseN (contract_N)))))));++lin s_082_1_p = (Sentence (UseCl (Past) (PPos) (PredVP (ConjNP3 (and_Conj) (UsePN (smith_PN)) (UsePN (jones_PN)) (DetCN (several_Det) (UseN (lawyer_N)))) (ComplSlash (SlashV2a (sign_V2)) (DetCN (DetQuant (DefArt) (NumSg)) (UseN (contract_N)))))));+lin s_082_2_q = s_081_2_q;+lin s_082_3_h = s_081_3_h;++lin s_083_1_p = (Sentence (UseCl (Past) (PPos) (PredVP (ConjNP3 (either7or_DConj) (UsePN (smith_PN)) (UsePN (jones_PN)) (UsePN (anderson_PN))) (ComplSlash (SlashV2a (sign_V2)) (DetCN (DetQuant (DefArt) (NumSg)) (UseN (contract_N)))))));+lin s_083_2_q = s_081_2_q;+lin s_083_3_h = s_081_3_h;++lin s_084_1_p = s_083_1_p;+lin s_084_2_q = (Question (ExtAdvQS (SubjS (if_Subj) (UseCl (Past) (UncNeg) (PredVP (ConjNP2 (and_Conj) (UsePN (smith_PN)) (UsePN (anderson_PN))) (ComplSlash (SlashV2a (sign_V2)) (DetCN (DetQuant (DefArt) (NumSg)) (UseN (contract_N))))))) (UseQCl (Past) (PPos) (QuestCl (PredVP (UsePN (jones_PN)) (ComplSlash (SlashV2a (sign_V2)) (DetCN (DetQuant (DefArt) (NumSg)) (UseN (contract_N)))))))));+lin s_084_3_h = (Sentence (ExtAdvS (SubjS (if_Subj) (UseCl (Past) (UncNeg) (PredVP (ConjNP2 (and_Conj) (UsePN (smith_PN)) (UsePN (anderson_PN))) (ComplSlash (SlashV2a (sign_V2)) (DetCN (DetQuant (DefArt) (NumSg)) (UseN (contract_N))))))) (UseCl (Past) (PPos) (PredVP (UsePN (jones_PN)) (ComplSlash (SlashV2a (sign_V2)) (DetCN (DetQuant (DefArt) (NumSg)) (UseN (contract_N))))))));++lin s_085_1_p = (Sentence (UseCl (Past) (PPos) (PredVP (ConjNP2 (and_Conj) (PredetNP (exactly_Predet) (DetCN (DetQuant (IndefArt) (NumCard (NumNumeral (N_two)))) (UseN (lawyer_N)))) (DetCN (DetQuant (IndefArt) (NumCard (NumNumeral (N_three)))) (UseN (accountant_N)))) (ComplSlash (SlashV2a (sign_V2)) (DetCN (DetQuant (DefArt) (NumSg)) (UseN (contract_N)))))));+lin s_085_2_q = (Question (UseQCl (Past) (PPos) (QuestCl (PredVP (DetCN (DetQuant (IndefArt) (NumCard (NumNumeral (N_six)))) (UseN (lawyer_N))) (ComplSlash (SlashV2a (sign_V2)) (DetCN (DetQuant (DefArt) (NumSg)) (UseN (contract_N))))))));+lin s_085_3_h = (Sentence (UseCl (Past) (PPos) (PredVP (DetCN (DetQuant (IndefArt) (NumCard (NumNumeral (N_six)))) (UseN (lawyer_N))) (ComplSlash (SlashV2a (sign_V2)) (DetCN (DetQuant (DefArt) (NumSg)) (UseN (contract_N)))))));++lin s_086_1_p = s_085_1_p;+lin s_086_2_q = (Question (UseQCl (Past) (PPos) (QuestCl (PredVP (DetCN (DetQuant (IndefArt) (NumCard (NumNumeral (N_six)))) (UseN (accountant_N))) (ComplSlash (SlashV2a (sign_V2)) (DetCN (DetQuant (DefArt) (NumSg)) (UseN (contract_N))))))));+lin s_086_3_h = (Sentence (UseCl (Past) (PPos) (PredVP (DetCN (DetQuant (IndefArt) (NumCard (NumNumeral (N_six)))) (UseN (accountant_N))) (ComplSlash (SlashV2a (sign_V2)) (DetCN (DetQuant (DefArt) (NumSg)) (UseN (contract_N)))))));++lin s_087_1_p = (Sentence (UseCl (Past) (PPos) (PredVP (DetCN (every_Det) (ConjCN2 (and_Conj) (UseN (representative_N)) (UseN (client_N)))) (UseComp (CompAdv (PrepNP (at_Prep) (DetCN (DetQuant (DefArt) (NumSg)) (UseN (meeting_N)))))))));+lin s_087_2_q = (Question (UseQCl (Past) (PPos) (QuestCl (PredVP (DetCN (every_Det) (UseN (representative_N))) (UseComp (CompAdv (PrepNP (at_Prep) (DetCN (DetQuant (DefArt) (NumSg)) (UseN (meeting_N))))))))));+lin s_087_3_h = (Sentence (UseCl (Past) (PPos) (PredVP (DetCN (every_Det) (UseN (representative_N))) (UseComp (CompAdv (PrepNP (at_Prep) (DetCN (DetQuant (DefArt) (NumSg)) (UseN (meeting_N)))))))));++lin s_088_1_p = s_087_1_p;+lin s_088_2_q = s_087_2_q;+lin s_088_3_h = s_087_3_h;++lin s_089_1_p = (Sentence (UseCl (Past) (PPos) (PredVP (DetCN (every_Det) (ConjCN2 (or_Conj) (UseN (representative_N)) (UseN (client_N)))) (UseComp (CompAdv (PrepNP (at_Prep) (DetCN (DetQuant (DefArt) (NumSg)) (UseN (meeting_N)))))))));+lin s_089_2_q = (Question (UseQCl (Past) (PPos) (QuestCl (PredVP (ConjNP2 (andSg_Conj) (DetCN (every_Det) (UseN (representative_N))) (DetCN (every_Det) (UseN (client_N)))) (UseComp (CompAdv (PrepNP (at_Prep) (DetCN (DetQuant (DefArt) (NumSg)) (UseN (meeting_N))))))))));+lin s_089_3_h = (Sentence (UseCl (Past) (PPos) (PredVP (ConjNP2 (andSg_Conj) (DetCN (every_Det) (UseN (representative_N))) (DetCN (every_Det) (UseN (client_N)))) (UseComp (CompAdv (PrepNP (at_Prep) (DetCN (DetQuant (DefArt) (NumSg)) (UseN (meeting_N)))))))));++lin s_090_1_p = (Sentence (UseCl (Past) (PPos) (PredVP (DetCN (DetQuant (DefArt) (NumSg)) (UseN (chairman_N))) (ComplSlash (SlashV2a (read_out_V2)) (DetCN (DetQuant (DefArt) (NumPl)) (AdvCN (UseN (item_N)) (PrepNP (on_Prep) (DetCN (DetQuant (DefArt) (NumSg)) (UseN (agenda_N))))))))));+lin s_090_2_q = (Question (UseQCl (Past) (PPos) (QuestCl (PredVP (DetCN (DetQuant (DefArt) (NumSg)) (UseN (chairman_N))) (ComplSlash (SlashV2a (read_out_V2)) (DetCN (every_Det) (AdvCN (UseN (item_N)) (PrepNP (on_Prep) (DetCN (DetQuant (DefArt) (NumSg)) (UseN (agenda_N)))))))))));+lin s_090_3_h = (Sentence (UseCl (Past) (PPos) (PredVP (DetCN (DetQuant (DefArt) (NumSg)) (UseN (chairman_N))) (ComplSlash (SlashV2a (read_out_V2)) (DetCN (every_Det) (AdvCN (UseN (item_N)) (PrepNP (on_Prep) (DetCN (DetQuant (DefArt) (NumSg)) (UseN (agenda_N))))))))));++lin s_091_1_p = (Sentence (UseCl (Past) (PPos) (PredVP (DetCN (DetQuant (DefArt) (NumPl)) (RelCN (UseN (person_N)) (UseRCl (Past) (PPos) (RelVP (IdRP) (UseComp (CompAdv (PrepNP (at_Prep) (DetCN (DetQuant (DefArt) (NumSg)) (UseN (meeting_N)))))))))) (ComplSlash (SlashV2a (vote_for_V2)) (DetCN (DetQuant (IndefArt) (NumSg)) (AdjCN (PositA (new_A)) (UseN (chairman_N))))))));+lin s_091_2_q = (Question (UseQCl (Past) (PPos) (QuestCl (PredVP (AdvNP (UsePron (everyone_Pron)) (PrepNP (at_Prep) (DetCN (DetQuant (DefArt) (NumSg)) (UseN (meeting_N))))) (ComplSlash (SlashV2a (vote_for_V2)) (DetCN (DetQuant (IndefArt) (NumSg)) (AdjCN (PositA (new_A)) (UseN (chairman_N)))))))));+lin s_091_3_h = (Sentence (UseCl (Past) (PPos) (PredVP (AdvNP (UsePron (everyone_Pron)) (PrepNP (at_Prep) (DetCN (DetQuant (DefArt) (NumSg)) (UseN (meeting_N))))) (ComplSlash (SlashV2a (vote_for_V2)) (DetCN (DetQuant (IndefArt) (NumSg)) (AdjCN (PositA (new_A)) (UseN (chairman_N))))))));++lin s_092_1_p = (Sentence (UseCl (Past) (PPos) (PredVP (PredetNP (all_Predet) (DetCN (DetQuant (DefArt) (NumPl)) (RelCN (UseN (person_N)) (UseRCl (Past) (PPos) (RelVP (IdRP) (UseComp (CompAdv (PrepNP (at_Prep) (DetCN (DetQuant (DefArt) (NumSg)) (UseN (meeting_N))))))))))) (ComplSlash (SlashV2a (vote_for_V2)) (DetCN (DetQuant (IndefArt) (NumSg)) (AdjCN (PositA (new_A)) (UseN (chairman_N))))))));+lin s_092_2_q = s_091_2_q;+lin s_092_3_h = s_091_3_h;++lin s_093_1_p = (Sentence (UseCl (Past) (PPos) (PredVP (DetCN (DetQuant (DefArt) (NumPl)) (RelCN (UseN (person_N)) (UseRCl (Past) (PPos) (RelVP (IdRP) (UseComp (CompAdv (PrepNP (at_Prep) (DetCN (DetQuant (DefArt) (NumSg)) (UseN (meeting_N)))))))))) (AdVVP (all_AdV) (ComplSlash (SlashV2a (vote_for_V2)) (DetCN (DetQuant (IndefArt) (NumSg)) (AdjCN (PositA (new_A)) (UseN (chairman_N)))))))));+lin s_093_2_q = s_091_2_q;+lin s_093_3_h = s_091_3_h;++lin s_094_1_p = (Sentence (UseCl (Past) (PPos) (PredVP (DetCN (DetQuant (DefArt) (NumPl)) (ComplN2 (inhabitant_N2) (UsePN (cambridge_PN)))) (ComplSlash (SlashV2a (vote_for_V2)) (DetCN (DetQuant (IndefArt) (NumSg)) (UseN (labour_mp_N)))))));+lin s_094_2_q = (Question (UseQCl (Past) (PPos) (QuestCl (PredVP (DetCN (every_Det) (ComplN2 (inhabitant_N2) (UsePN (cambridge_PN)))) (ComplSlash (SlashV2a (vote_for_V2)) (DetCN (DetQuant (IndefArt) (NumSg)) (UseN (labour_mp_N))))))));+lin s_094_3_h = (Sentence (UseCl (Past) (PPos) (PredVP (DetCN (every_Det) (ComplN2 (inhabitant_N2) (UsePN (cambridge_PN)))) (ComplSlash (SlashV2a (vote_for_V2)) (DetCN (DetQuant (IndefArt) (NumSg)) (UseN (labour_mp_N)))))));++lin s_095_1_p = (Sentence (UseCl (Past) (PPos) (PredVP (DetCN (DetQuant (DefArt) (NumPl)) (AdjCN (PositA (ancient_A)) (UseN (greek_N)))) (UseComp (CompCN (AdjCN (PositA (noted_A)) (UseN (philosopher_N))))))));+lin s_095_2_q = (Question (UseQCl (Past) (PPos) (QuestCl (PredVP (DetCN (every_Det) (AdjCN (PositA (ancient_A)) (UseN (greek_N)))) (UseComp (CompCN (AdjCN (PositA (noted_A)) (UseN (philosopher_N)))))))));+lin s_095_3_h = (Sentence (UseCl (Past) (PPos) (PredVP (DetCN (every_Det) (AdjCN (PositA (ancient_A)) (UseN (greek_N)))) (UseComp (CompCN (AdjCN (PositA (noted_A)) (UseN (philosopher_N))))))));++lin s_096_1_p = (Sentence (UseCl (Past) (PPos) (PredVP (DetCN (DetQuant (DefArt) (NumPl)) (AdjCN (PositA (ancient_A)) (UseN (greek_N)))) (AdVVP (all_AdV) (UseComp (CompCN (AdjCN (PositA (noted_A)) (UseN (philosopher_N)))))))));+lin s_096_2_q = s_095_2_q;+lin s_096_3_h = s_095_3_h;++lin s_097_1_p = (Sentence (UseCl (Past) (PPos) (PredVP (DetCN (DetQuant (IndefArt) (NumPl)) (UseN (software_fault_N))) (AdvVP (PassV2s (blame1_V2)) (PrepNP (for_Prep) (DetCN (DetQuant (DefArt) (NumSg)) (UseN (system_failure_N))))))));+lin s_097_2_q = (Question (UseQCl (Past) (PPos) (QuestCl (PredVP (DetCN (DetQuant (DefArt) (NumSg)) (UseN (system_failure_N))) (AdvVP (PassV2s (blame2_V2)) (PrepNP (on_Prep) (DetCN (one_or_more_Det) (UseN (software_fault_N)))))))));+lin s_097_3_h = (Sentence (UseCl (Past) (PPos) (PredVP (DetCN (DetQuant (DefArt) (NumSg)) (UseN (system_failure_N))) (AdvVP (PassV2s (blame2_V2)) (PrepNP (on_Prep) (DetCN (one_or_more_Det) (UseN (software_fault_N))))))));++lin s_098_1_p = s_097_1_p;+lin s_098_2_p = (Sentence (UseCl (Present) (PPos) (PredVP (UsePN (bug_32985_PN)) (UseComp (CompCN (AdjCN (PositA (known_A)) (UseN (software_fault_N))))))));+lin s_098_3_q = (Question (UseQCl (Past) (PPos) (QuestCl (PredVP (UsePN (bug_32985_PN)) (AdvVP (PassV2s (blame1_V2)) (PrepNP (for_Prep) (DetCN (DetQuant (DefArt) (NumSg)) (UseN (system_failure_N)))))))));+lin s_098_4_h = (Sentence (UseCl (Past) (PPos) (PredVP (UsePN (bug_32985_PN)) (AdvVP (PassV2s (blame1_V2)) (PrepNP (for_Prep) (DetCN (DetQuant (DefArt) (NumSg)) (UseN (system_failure_N))))))));++lin s_099_1_p = (Sentence (UseCl (Past) (PPos) (PredVP (DetCN (DetQuant (IndefArt) (NumPl)) (AdvCN (UseN (client_N)) (PrepNP (at_Prep) (DetCN (DetQuant (DefArt) (NumSg)) (UseN (demonstration_N)))))) (AdVVP (all_AdV) (UseComp (CompAP (ComplA2 (impressed_by_A2) (DetCN (DetQuant (GenNP (DetCN (DetQuant (DefArt) (NumSg)) (UseN (system_N)))) (NumSg)) (UseN (performance_N))))))))));+lin s_099_2_p = (Sentence (UseCl (Past) (PPos) (PredVP (UsePN (smith_PN)) (UseComp (CompCN (AdvCN (UseN (client_N)) (PrepNP (at_Prep) (DetCN (DetQuant (DefArt) (NumSg)) (UseN (demonstration_N))))))))));+lin s_099_3_q = (Question (UseQCl (Past) (PPos) (QuestCl (PredVP (UsePN (smith_PN)) (UseComp (CompAP (ComplA2 (impressed_by_A2) (DetCN (DetQuant (GenNP (DetCN (DetQuant (DefArt) (NumSg)) (UseN (system_N)))) (NumSg)) (UseN (performance_N))))))))));+lin s_099_4_h = (Sentence (UseCl (Past) (PPos) (PredVP (UsePN (smith_PN)) (UseComp (CompAP (ComplA2 (impressed_by_A2) (DetCN (DetQuant (GenNP (DetCN (DetQuant (DefArt) (NumSg)) (UseN (system_N)))) (NumSg)) (UseN (performance_N)))))))));++lin s_100_1_p = (Sentence (UseCl (Past) (PPos) (PredVP (DetCN (DetQuant (IndefArt) (NumPl)) (AdvCN (UseN (client_N)) (PrepNP (at_Prep) (DetCN (DetQuant (DefArt) (NumSg)) (UseN (demonstration_N)))))) (UseComp (CompAP (ComplA2 (impressed_by_A2) (DetCN (DetQuant (GenNP (DetCN (DetQuant (DefArt) (NumSg)) (UseN (system_N)))) (NumSg)) (UseN (performance_N)))))))));+lin s_100_2_q = (Question (UseQCl (Past) (PPos) (QuestCl (PredVP (PredetNP (most_Predet) (DetCN (DetQuant (IndefArt) (NumPl)) (AdvCN (UseN (client_N)) (PrepNP (at_Prep) (DetCN (DetQuant (DefArt) (NumSg)) (UseN (demonstration_N))))))) (UseComp (CompAP (ComplA2 (impressed_by_A2) (DetCN (DetQuant (GenNP (DetCN (DetQuant (DefArt) (NumSg)) (UseN (system_N)))) (NumSg)) (UseN (performance_N))))))))));+lin s_100_3_h = (Sentence (UseCl (Past) (PPos) (PredVP (PredetNP (most_Predet) (DetCN (DetQuant (IndefArt) (NumPl)) (AdvCN (UseN (client_N)) (PrepNP (at_Prep) (DetCN (DetQuant (DefArt) (NumSg)) (UseN (demonstration_N))))))) (UseComp (CompAP (ComplA2 (impressed_by_A2) (DetCN (DetQuant (GenNP (DetCN (DetQuant (DefArt) (NumSg)) (UseN (system_N)))) (NumSg)) (UseN (performance_N)))))))));++lin s_101_1_p = (Sentence (UseCl (Present) (PPos) (PredVP (DetCN (DetQuant (IndefArt) (NumPl)) (UseN (university_graduate_N))) (ComplSlash (SlashV2a (make8become_V2)) (DetCN (DetQuant (IndefArt) (NumPl)) (AdjCN (PositA (poor8bad_A)) (UseN (stockmarket_trader_N))))))));+lin s_101_2_p = (Sentence (UseCl (Present) (PPos) (PredVP (UsePN (smith_PN)) (UseComp (CompCN (UseN (university_graduate_N)))))));+lin s_101_3_q = (Question (UseQCl (Present) (PPos) (QuestCl (PredVP (UsePN (smith_PN)) (UseComp (CompAP (SentAP (PositA (likely_A)) (EmbedVP (ComplSlash (SlashV2a (make8become_V2)) (DetCN (DetQuant (IndefArt) (NumSg)) (AdjCN (PositA (poor8bad_A)) (UseN (stock_market_trader_N)))))))))))));+lin s_101_4_h = (Sentence (UseCl (Present) (PPos) (PredVP (UsePN (smith_PN)) (UseComp (CompAP (SentAP (PositA (likely_A)) (EmbedVP (ComplSlash (SlashV2a (make8become_V2)) (DetCN (DetQuant (IndefArt) (NumSg)) (AdjCN (PositA (poor8bad_A)) (UseN (stock_market_trader_N))))))))))));++lin s_102_1_p = s_101_1_p;+lin s_102_2_p = s_101_2_p;+lin s_102_3_q = (Question (UseQCl (Future) (PPos) (QuestCl (PredVP (UsePN (smith_PN)) (ComplSlash (SlashV2a (make8become_V2)) (DetCN (DetQuant (IndefArt) (NumSg)) (AdjCN (PositA (poor8bad_A)) (UseN (stock_market_trader_N)))))))));+lin s_102_4_h = (Sentence (UseCl (Future) (PPos) (PredVP (UsePN (smith_PN)) (ComplSlash (SlashV2a (make8become_V2)) (DetCN (DetQuant (IndefArt) (NumSg)) (AdjCN (PositA (poor8bad_A)) (UseN (stock_market_trader_N))))))));++lin s_103_1_p = (Sentence (UseCl (Present) (PPos) (PredVP (PredetNP (all_Predet) (DetCN (DetQuant (IndefArt) (NumPl)) (UseN (apcom_manager_N)))) (ComplSlash (SlashV2a (have_V2)) (DetCN (DetQuant (IndefArt) (NumPl)) (UseN (company_car_N)))))));+lin s_103_2_p = (Sentence (UseCl (Present) (PPos) (PredVP (UsePN (jones_PN)) (UseComp (CompCN (UseN (apcom_manager_N)))))));+lin s_103_3_q = (Question (UseQCl (Present) (PPos) (QuestCl (PredVP (UsePN (jones_PN)) (ComplSlash (SlashV2a (have_V2)) (DetCN (DetQuant (IndefArt) (NumSg)) (UseN (company_car_N))))))));+lin s_103_4_h = (Sentence (UseCl (Present) (PPos) (PredVP (UsePN (jones_PN)) (ComplSlash (SlashV2a (have_V2)) (DetCN (DetQuant (IndefArt) (NumSg)) (UseN (company_car_N)))))));++lin s_104_1_p = s_103_1_p;+lin s_104_2_p = s_103_2_p;+lin s_104_3_q = (Question (UseQCl (Present) (PPos) (QuestCl (PredVP (UsePN (jones_PN)) (ComplSlash (SlashV2a (have_V2)) (DetCN (DetQuant (IndefArt) (NumCard (AdNum (more_than_AdN) (NumNumeral (N_one))))) (UseN (company_car_N))))))));+lin s_104_4_h = (Sentence (UseCl (Present) (PPos) (PredVP (UsePN (jones_PN)) (ComplSlash (SlashV2a (have_V2)) (DetCN (DetQuant (IndefArt) (NumCard (AdNum (more_than_AdN) (NumNumeral (N_one))))) (UseN (company_car_N)))))));++lin s_105_1_p = (Sentence (UseCl (Past) (PPos) (PredVP (PredetNP (just_Predet) (DetCN (DetQuant (IndefArt) (NumCard (NumNumeral (N_one)))) (UseN (accountant_N)))) (ComplSlash (SlashV2a (attend_V2)) (DetCN (DetQuant (DefArt) (NumSg)) (UseN (meeting_N)))))));+lin s_105_2_q = (Question (UseQCl (Past) (PPos) (QuestCl (PredVP (DetCN (DetQuant (no_Quant) (NumPl)) (UseN (accountant_N))) (ComplSlash (SlashV2a (attend_V2)) (DetCN (DetQuant (DefArt) (NumSg)) (UseN (meeting_N))))))));+lin s_105_3_h = (Sentence (UseCl (Past) (PPos) (PredVP (DetCN (DetQuant (no_Quant) (NumPl)) (UseN (accountant_N))) (ComplSlash (SlashV2a (attend_V2)) (DetCN (DetQuant (DefArt) (NumSg)) (UseN (meeting_N)))))));++lin s_106_1_p = s_105_1_p;+lin s_106_2_q = (Question (UseQCl (Past) (PPos) (QuestCl (PredVP (DetCN (DetQuant (no_Quant) (NumSg)) (UseN (accountant_N))) (ComplSlash (SlashV2a (attend_V2)) (DetCN (DetQuant (DefArt) (NumSg)) (UseN (meeting_N))))))));+lin s_106_3_h = (Sentence (UseCl (Past) (PPos) (PredVP (DetCN (DetQuant (no_Quant) (NumSg)) (UseN (accountant_N))) (ComplSlash (SlashV2a (attend_V2)) (DetCN (DetQuant (DefArt) (NumSg)) (UseN (meeting_N)))))));++lin s_107_1_p = s_105_1_p;+lin s_107_2_q = (Question (UseQCl (Past) (PPos) (QuestCl (PredVP (DetCN (anyPl_Det) (UseN (accountant_N))) (ComplSlash (SlashV2a (attend_V2)) (DetCN (DetQuant (DefArt) (NumSg)) (UseN (meeting_N))))))));+lin s_107_3_h = (Sentence (UseCl (Past) (PPos) (PredVP (DetCN (somePl_Det) (UseN (accountant_N))) (ComplSlash (SlashV2a (attend_V2)) (DetCN (DetQuant (DefArt) (NumSg)) (UseN (meeting_N)))))));++lin s_108_1_p = s_105_1_p;+lin s_108_2_q = (Question (UseQCl (Past) (PPos) (QuestCl (PredVP (DetCN (anySg_Det) (UseN (accountant_N))) (ComplSlash (SlashV2a (attend_V2)) (DetCN (DetQuant (DefArt) (NumSg)) (UseN (meeting_N))))))));+lin s_108_3_h = (Sentence (UseCl (Past) (PPos) (PredVP (DetCN (someSg_Det) (UseN (accountant_N))) (ComplSlash (SlashV2a (attend_V2)) (DetCN (DetQuant (DefArt) (NumSg)) (UseN (meeting_N)))))));++lin s_109_1_p = s_105_1_p;+lin s_109_2_q = (Question (UseQCl (Past) (PPos) (QuestCl (PredVP (DetCN (somePl_Det) (UseN (accountant_N))) (ComplSlash (SlashV2a (attend_V2)) (DetCN (DetQuant (DefArt) (NumSg)) (UseN (meeting_N))))))));+lin s_109_3_h = s_107_3_h;++lin s_110_1_p = s_105_1_p;+lin s_110_2_q = (Question (UseQCl (Past) (PPos) (QuestCl (PredVP (DetCN (someSg_Det) (UseN (accountant_N))) (ComplSlash (SlashV2a (attend_V2)) (DetCN (DetQuant (DefArt) (NumSg)) (UseN (meeting_N))))))));+lin s_110_3_h = s_108_3_h;++lin s_111_1_p = (Sentence (UseCl (Past) (PPos) (PredVP (UsePN (smith_PN)) (ComplSlash (SlashV2a (sign_V2)) (DetCN (DetQuant (IndefArt) (NumCard (NumNumeral (N_one)))) (UseN (contract_N)))))));+lin s_111_2_p = (Sentence (UseCl (Past) (PPos) (PredVP (UsePN (jones_PN)) (ComplSlash (SlashV2a (sign_V2)) (DetCN (another_Det) (UseN (contract_N)))))));+lin s_111_3_q = (Question (UseQCl (Past) (PPos) (QuestCl (PredVP (ConjNP2 (and_Conj) (UsePN (smith_PN)) (UsePN (jones_PN))) (ComplSlash (SlashV2a (sign_V2)) (DetCN (DetQuant (IndefArt) (NumCard (NumNumeral (N_two)))) (UseN (contract_N))))))));+lin s_111_4_h = (Sentence (UseCl (Past) (PPos) (PredVP (ConjNP2 (and_Conj) (UsePN (smith_PN)) (UsePN (jones_PN))) (ComplSlash (SlashV2a (sign_V2)) (DetCN (DetQuant (IndefArt) (NumCard (NumNumeral (N_two)))) (UseN (contract_N)))))));++lin s_112_1_p = (Sentence (UseCl (Past) (PPos) (PredVP (UsePN (smith_PN)) (ComplSlash (SlashV2a (sign_V2)) (DetCN (DetQuant (IndefArt) (NumCard (NumNumeral (N_two)))) (UseN (contract_N)))))));+lin s_112_2_p = (Sentence (UseCl (Past) (PPos) (PredVP (UsePN (jones_PN)) (ComplSlash (SlashV2a (sign_V2)) (DetCN (DetQuant (IndefArt) (NumCard (NumNumeral (N_two)))) (UseN (contract_N)))))));+lin s_112_3_q = s_111_3_q;+lin s_112_4_h = s_111_4_h;++lin s_113_1_p = s_112_1_p;+lin s_113_2_p = (Sentence (UseCl (Past) (PPos) (PredVP (UsePN (jones_PN)) (AdVVP (also_AdV) (ComplSlash (SlashV2a (sign_V2)) (UsePron (they_Pron)))))));+lin s_113_3_q = s_111_3_q;+lin s_113_4_h = s_111_4_h;++lin s_114_1_p = (Sentence (UseCl (Past) (PPos) (PredVP (UsePN (mary_PN)) (ComplSlash (SlashV2a (use_V2)) (DetCN (DetQuant (PossPron (sheRefl_Pron)) (NumSg)) (UseN (workstation_N)))))));+lin s_114_2_q = (Question (UseQCl (Past) (PPos) (QuestCl (PredVP (DetCN (DetQuant (GenNP (UsePN (mary_PN))) (NumSg)) (UseN (workstation_N))) (PassV2s (use_V2))))));+lin s_114_3_h = (Sentence (UseCl (Past) (PPos) (PredVP (DetCN (DetQuant (GenNP (UsePN (mary_PN))) (NumSg)) (UseN (workstation_N))) (PassV2s (use_V2)))));++lin s_115_1_p = s_114_1_p;+lin s_115_2_q = (Question (UseQCl (Present) (PPos) (QuestCl (PredVP (UsePN (mary_PN)) (ComplSlash (SlashV2a (have_V2)) (DetCN (DetQuant (IndefArt) (NumSg)) (UseN (workstation_N))))))));+lin s_115_3_h = (Sentence (UseCl (Present) (PPos) (PredVP (UsePN (mary_PN)) (ComplSlash (SlashV2a (have_V2)) (DetCN (DetQuant (IndefArt) (NumSg)) (UseN (workstation_N)))))));++lin s_116_1_p = s_114_1_p;+lin s_116_2_q = (Question (UseQCl (Present) (PPos) (QuestCl (PredVP (UsePN (mary_PN)) (UseComp (CompAP (PositA (female_A))))))));+lin s_116_3_h = (Sentence (UseCl (Present) (PPos) (PredVP (UsePN (mary_PN)) (UseComp (CompAP (PositA (female_A)))))));++lin s_117_1_p = (Sentence (UseCl (Past) (PPos) (PredVP (DetCN (every_Det) (UseN (student_N))) (ComplSlash (SlashV2a (use_V2)) (DetCN (DetQuant (PossPron (sheRefl_Pron)) (NumSg)) (UseN (workstation_N)))))));+lin s_117_2_p = (Sentence (UseCl (Present) (PPos) (PredVP (UsePN (mary_PN)) (UseComp (CompCN (UseN (student_N)))))));+lin s_117_3_q = (Question (UseQCl (Past) (PPos) (QuestCl (PredVP (UsePN (mary_PN)) (ComplSlash (SlashV2a (use_V2)) (DetCN (DetQuant (PossPron (sheRefl_Pron)) (NumSg)) (UseN (workstation_N))))))));+lin s_117_4_h = s_114_1_p;++lin s_118_1_p = s_117_1_p;+lin s_118_2_p = s_117_2_p;+lin s_118_3_q = s_115_2_q;+lin s_118_4_h = s_115_3_h;++lin s_119_1_p = (Sentence (UseCl (Past) (PPos) (PredVP (DetCN (DetQuant (no_Quant) (NumSg)) (UseN (student_N))) (ComplSlash (SlashV2a (use_V2)) (DetCN (DetQuant (PossPron (sheRefl_Pron)) (NumSg)) (UseN (workstation_N)))))));+lin s_119_2_p = s_117_2_p;+lin s_119_3_q = (Question (UseQCl (Past) (PPos) (QuestCl (PredVP (UsePN (mary_PN)) (ComplSlash (SlashV2a (use_V2)) (DetCN (DetQuant (IndefArt) (NumSg)) (UseN (workstation_N))))))));+lin s_119_4_h = (Sentence (UseCl (Past) (PPos) (PredVP (UsePN (mary_PN)) (ComplSlash (SlashV2a (use_V2)) (DetCN (DetQuant (IndefArt) (NumSg)) (UseN (workstation_N)))))));++lin s_120_1_p = (Sentence (UseCl (Past) (PPos) (PredVP (UsePN (smith_PN)) (ComplSlash (SlashV2a (attend_V2)) (DetCN (DetQuant (IndefArt) (NumSg)) (UseN (meeting_N)))))));+lin s_120_2_p = (Sentence (UseCl (Past) (PPos) (PredVP (UsePron (she_Pron)) (ComplSlash (SlashV2a (chair_V2)) (UsePron (it_Pron))))));+lin s_120_3_q = (Question (UseQCl (Past) (PPos) (QuestCl (PredVP (UsePN (smith_PN)) (ComplSlash (SlashV2a (chair_V2)) (DetCN (DetQuant (IndefArt) (NumSg)) (UseN (meeting_N))))))));+lin s_120_4_h = (Sentence (UseCl (Past) (PPos) (PredVP (UsePN (smith_PN)) (ComplSlash (SlashV2a (chair_V2)) (DetCN (DetQuant (IndefArt) (NumSg)) (UseN (meeting_N)))))));++lin s_121_1_p = (Sentence (UseCl (Past) (PPos) (PredVP (UsePN (smith_PN)) (AdvVP (ComplSlash (SlashV2a (deliver_V2)) (DetCN (DetQuant (IndefArt) (NumSg)) (UseN (report_N)))) (PrepNP (to_Prep) (UsePN (itel_PN)))))));+lin s_121_2_p = (Sentence (UseCl (Past) (PPos) (PredVP (UsePron (she_Pron)) (AdVVP (also_AdV) (ComplSlash (Slash2V3 (deliver_V3) (DetCN (DetQuant (IndefArt) (NumSg)) (UseN (invoice_N)))) (UsePron (they_Pron)))))));+lin s_121_3_p = (PSentence (and_PConj) (UseCl (Past) (PPos) (PredVP (UsePron (she_Pron)) (ComplSlash (Slash2V3 (deliver_V3) (DetCN (DetQuant (IndefArt) (NumSg)) (UseN (project_proposal_N)))) (UsePron (they_Pron))))));+lin s_121_4_q = (Question (UseQCl (Past) (PPos) (QuestCl (PredVP (UsePN (smith_PN)) (AdvVP (ComplSlash (SlashV2a (deliver_V2)) (ConjNP3 (and_Conj) (DetCN (DetQuant (IndefArt) (NumSg)) (UseN (report_N))) (DetCN (DetQuant (IndefArt) (NumSg)) (UseN (invoice_N))) (DetCN (DetQuant (IndefArt) (NumSg)) (UseN (project_proposal_N))))) (PrepNP (to_Prep) (UsePN (itel_PN))))))));+lin s_121_5_h = (Sentence (UseCl (Past) (PPos) (PredVP (UsePN (smith_PN)) (AdvVP (ComplSlash (SlashV2a (deliver_V2)) (ConjNP3 (and_Conj) (DetCN (DetQuant (IndefArt) (NumSg)) (UseN (report_N))) (DetCN (DetQuant (IndefArt) (NumSg)) (UseN (invoice_N))) (DetCN (DetQuant (IndefArt) (NumSg)) (UseN (project_proposal_N))))) (PrepNP (to_Prep) (UsePN (itel_PN)))))));++lin s_122_1_p = (Sentence (UseCl (Present) (PPos) (PredVP (DetCN (every_Det) (UseN (committee_N))) (ComplSlash (SlashV2a (have_V2)) (DetCN (DetQuant (IndefArt) (NumSg)) (UseN (chairman_N)))))));+lin s_122_2_p = (Sentence (UseCl (Present) (PPos) (PredVP (UsePron (he_Pron)) (AdvVP (PassV2s (appoint_V2)) (PrepNP (by8agent_Prep) (DetCN (DetQuant (PossPron (it_Pron)) (NumPl)) (UseN (member_N))))))));+lin s_122_3_q = (Question (UseQCl (Present) (PPos) (QuestCl (PredVP (DetCN (every_Det) (UseN (committee_N))) (ComplSlash (SlashV2a (have_V2)) (AdvNP (PPartNP (DetCN (DetQuant (IndefArt) (NumSg)) (UseN (chairman_N))) (appoint_V2)) (PrepNP (by8agent_Prep) (DetCN (DetQuant (IndefArt) (NumPl)) (AdvCN (UseN (member_N)) (PrepNP (possess_Prep) (DetCN (DetQuant (DefArt) (NumSg)) (UseN (committee_N)))))))))))));+lin s_122_4_h = (Sentence (UseCl (Present) (PPos) (PredVP (DetCN (every_Det) (UseN (committee_N))) (ComplSlash (SlashV2a (have_V2)) (AdvNP (PPartNP (DetCN (DetQuant (IndefArt) (NumSg)) (UseN (chairman_N))) (appoint_V2)) (PrepNP (by8agent_Prep) (DetCN (DetQuant (IndefArt) (NumPl)) (AdvCN (UseN (member_N)) (PrepNP (possess_Prep) (DetCN (DetQuant (DefArt) (NumSg)) (UseN (committee_N))))))))))));++lin s_123_1_p = (Sentence (UseCl (PresentPerfect) (PPos) (PredVP (UsePN (itel_PN)) (ComplSlash (SlashV2a (send_V2)) (PredetNP (most_of_Predet) (DetCN (DetQuant (DefArt) (NumPl)) (RelCN (UseN (report_N)) (UseRCl (Present) (PPos) (EmptyRelSlash (SlashVP (UsePN (smith_PN)) (SlashV2a (need_V2))))))))))));+lin s_123_2_p = (Sentence (UseCl (Present) (PPos) (PredVP (UsePron (they_Pron)) (UseComp (CompAdv (PrepNP (on_Prep) (DetCN (DetQuant (PossPron (she_Pron)) (NumSg)) (UseN (desk_N)))))))));+lin s_123_3_q = (Question (UseQCl (Present) (PPos) (QuestCl (ExistNP (AdvNP (DetCN (somePl_Det) (AdvCN (UseN (report_N)) (PrepNP (from_Prep) (UsePN (itel_PN))))) (PrepNP (on_Prep) (DetCN (DetQuant (GenNP (UsePN (smith_PN))) (NumSg)) (UseN (desk_N)))))))));+lin s_123_4_h = (Sentence (UseCl (Present) (PPos) (ExistNP (AdvNP (DetCN (somePl_Det) (AdvCN (UseN (report_N)) (PrepNP (from_Prep) (UsePN (itel_PN))))) (PrepNP (on_Prep) (DetCN (DetQuant (GenNP (UsePN (smith_PN))) (NumSg)) (UseN (desk_N))))))));++lin s_124_1_p = (Sentence (UseCl (Present) (PPos) (PredVP (AdvNP (DetNP (DetQuant (IndefArt) (NumCard (NumNumeral (N_two))))) (PrepNP (out_of_Prep) (DetCN (DetQuant (IndefArt) (NumCard (NumNumeral (N_ten)))) (UseN (machine_N))))) (UseComp (CompAP (PositA (missing_A)))))));+lin s_124_2_p = (Sentence (UseCl (PresentPerfect) (PPos) (PredVP (UsePron (they_Pron)) (PassV2s (remove_V2)))));+lin s_124_3_q = (Question (UseQCl (PresentPerfect) (PPos) (QuestCl (PredVP (DetCN (DetQuant (IndefArt) (NumCard (NumNumeral (N_two)))) (UseN (machine_N))) (PassV2s (remove_V2))))));+lin s_124_4_h = (Sentence (UseCl (PresentPerfect) (PPos) (PredVP (DetCN (DetQuant (IndefArt) (NumCard (NumNumeral (N_two)))) (UseN (machine_N))) (PassV2s (remove_V2)))));++lin s_125_1_p = s_124_1_p;+lin s_125_2_p = s_124_2_p;+lin s_125_3_q = (Question (UseQCl (PresentPerfect) (PPos) (QuestCl (PredVP (DetCN (DetQuant (IndefArt) (NumCard (NumNumeral (N_eight)))) (UseN (machine_N))) (PassV2s (remove_V2))))));+lin s_125_4_h = (Sentence (UseCl (PresentPerfect) (PPos) (PredVP (DetCN (DetQuant (IndefArt) (NumCard (NumNumeral (N_eight)))) (UseN (machine_N))) (PassV2s (remove_V2)))));++lin s_126_1_p = s_124_1_p;+lin s_126_2_p = (Sentence (UseCl (Past) (PPos) (PredVP (UsePron (they_Pron)) (AdvVP (AdVVP (all_AdV) (UseComp (CompAdv (here_Adv)))) (yesterday_Adv)))));+lin s_126_3_q = (Question (UseQCl (Past) (PPos) (QuestCl (PredVP (DetCN (DetQuant (IndefArt) (NumCard (NumNumeral (N_ten)))) (UseN (machine_N))) (AdvVP (UseComp (CompAdv (here_Adv))) (yesterday_Adv))))));+lin s_126_4_h = (Sentence (UseCl (Past) (PPos) (PredVP (DetCN (DetQuant (IndefArt) (NumCard (NumNumeral (N_ten)))) (UseN (machine_N))) (AdvVP (UseComp (CompAdv (here_Adv))) (yesterday_Adv)))));++lin s_127_1_p = (Sentence (ConjS2 (comma_and_Conj) (UseCl (Past) (PPos) (PredVP (UsePN (smith_PN)) (AdvVP (ComplSlash (SlashV2a (take_V2)) (DetCN (DetQuant (IndefArt) (NumSg)) (UseN (machine_N)))) (on_tuesday_Adv)))) (UseCl (Past) (PPos) (PredVP (UsePN (jones_PN)) (AdvVP (ComplSlash (SlashV2a (take_V2)) (DetCN (DetQuant (IndefArt) (NumSg)) (UseN (machine_N)))) (on_wednesday_Adv))))));+lin s_127_2_p = (Sentence (UseCl (Past) (PPos) (PredVP (UsePron (they_Pron)) (ComplSlash (Slash3V3 (put_in_V3) (DetCN (DetQuant (DefArt) (NumSg)) (UseN (lobby_N)))) (UsePron (they_Pron))))));+lin s_127_3_q = (Question (UseQCl (Past) (PPos) (QuestCl (PredVP (ConjNP2 (and_Conj) (UsePN (smith_PN)) (UsePN (jones_PN))) (ComplSlash (Slash3V3 (put_in_V3) (DetCN (DetQuant (DefArt) (NumSg)) (UseN (lobby_N)))) (DetCN (DetQuant (IndefArt) (NumCard (NumNumeral (N_two)))) (UseN (machine_N))))))));+lin s_127_4_h = (Sentence (UseCl (Past) (PPos) (PredVP (ConjNP2 (and_Conj) (UsePN (smith_PN)) (UsePN (jones_PN))) (ComplSlash (Slash3V3 (put_in_V3) (DetCN (DetQuant (DefArt) (NumSg)) (UseN (lobby_N)))) (DetCN (DetQuant (IndefArt) (NumCard (NumNumeral (N_two)))) (UseN (machine_N)))))));++lin s_128_1_p = (Sentence (UseCl (Past) (PPos) (PredVP (ConjNP2 (and_Conj) (UsePN (john_PN)) (DetCN (DetQuant (PossPron (he_Pron)) (NumPl)) (UseN (colleague_N)))) (AdvVP (UseV (go8walk_V)) (PrepNP (to_Prep) (DetCN (DetQuant (IndefArt) (NumSg)) (UseN (meeting_N))))))));+lin s_128_2_p = (Sentence (UseCl (Past) (PPos) (PredVP (UsePron (they_Pron)) (ComplSlash (SlashV2a (hate_V2)) (UsePron (it_Pron))))));+lin s_128_3_q = (Question (UseQCl (Past) (PPos) (QuestCl (PredVP (DetCN (DetQuant (GenNP (UsePN (john_PN))) (NumPl)) (UseN (colleague_N))) (ComplSlash (SlashV2a (hate_V2)) (DetCN (DetQuant (DefArt) (NumSg)) (UseN (meeting_N))))))));+lin s_128_4_h = (Sentence (UseCl (Past) (PPos) (PredVP (DetCN (DetQuant (GenNP (UsePN (john_PN))) (NumPl)) (UseN (colleague_N))) (ComplSlash (SlashV2a (hate_V2)) (DetCN (DetQuant (DefArt) (NumSg)) (UseN (meeting_N)))))));++lin s_129_1_p = s_128_1_p;+lin s_129_2_p = s_128_2_p;+lin s_129_3_q = (Question (UseQCl (Past) (PPos) (QuestCl (PredVP (UsePN (john_PN)) (ComplSlash (SlashV2a (hate_V2)) (DetCN (DetQuant (DefArt) (NumSg)) (UseN (meeting_N))))))));+lin s_129_4_h = (Sentence (UseCl (Past) (PPos) (PredVP (UsePN (john_PN)) (ComplSlash (SlashV2a (hate_V2)) (DetCN (DetQuant (DefArt) (NumSg)) (UseN (meeting_N)))))));++lin s_130_1_p = s_128_1_p;+lin s_130_2_p = s_128_2_p;+lin s_130_3_q = s_129_3_q;+lin s_130_4_h = s_129_4_h;++lin s_131_1_p = (Sentence (UseCl (Present) (PPos) (PredVP (DetCN (each_Det) (UseN (department_N))) (ComplSlash (SlashV2a (have_V2)) (DetCN (DetQuant (IndefArt) (NumSg)) (AdjCN (PositA (dedicated_A)) (UseN (line_N))))))));+lin s_131_2_p = (Sentence (UseCl (Present) (PPos) (PredVP (UsePron (they_Pron)) (ComplSlash (Slash3V3 (rent_from_V3) (UsePN (bt_PN))) (UsePron (they_Pron))))));+lin s_131_3_q = (Question (UseQCl (Present) (PPos) (QuestCl (PredVP (DetCN (every_Det) (UseN (department_N))) (ComplSlash (Slash3V3 (rent_from_V3) (UsePN (bt_PN))) (DetCN (DetQuant (IndefArt) (NumSg)) (UseN (line_N))))))));+lin s_131_4_h = (Sentence (UseCl (Present) (PPos) (PredVP (DetCN (every_Det) (UseN (department_N))) (ComplSlash (Slash3V3 (rent_from_V3) (UsePN (bt_PN))) (DetCN (DetQuant (IndefArt) (NumSg)) (UseN (line_N)))))));++lin s_132_1_p = s_131_1_p;+lin s_132_2_p = (Sentence (UseCl (Present) (PPos) (PredVP (DetCN (DetQuant (DefArt) (NumSg)) (UseN (sales_department_N))) (ComplSlash (Slash3V3 (rent_from_V3) (UsePN (bt_PN))) (UsePron (it_Pron))))));+lin s_132_3_q = (Question (UseQCl (Present) (PPos) (QuestCl (PredVP (DetCN (DetQuant (DefArt) (NumSg)) (UseN (sales_department_N))) (ComplSlash (Slash3V3 (rent_from_V3) (UsePN (bt_PN))) (DetCN (DetQuant (IndefArt) (NumSg)) (UseN (line_N))))))));+lin s_132_4_h = (Sentence (UseCl (Present) (PPos) (PredVP (DetCN (DetQuant (DefArt) (NumSg)) (UseN (sales_department_N))) (ComplSlash (Slash3V3 (rent_from_V3) (UsePN (bt_PN))) (DetCN (DetQuant (IndefArt) (NumSg)) (UseN (line_N)))))));++lin s_133_1_p = (Sentence (UseCl (Present) (PPos) (PredVP (UsePN (gfi_PN)) (ComplSlash (SlashV2a (own_V2)) (DetCN (several_Det) (UseN (computer_N)))))));+lin s_133_2_p = (Sentence (UseCl (Present) (PPos) (PredVP (UsePN (itel_PN)) (ComplSlash (SlashV2a (maintain_V2)) (UsePron (they_Pron))))));+lin s_133_3_q = (Question (UseQCl (Present) (PPos) (QuestCl (PredVP (UsePN (itel_PN)) (ComplSlash (SlashV2a (maintain_V2)) (PredetNP (all_Predet) (DetCN (DetQuant (DefArt) (NumPl)) (RelCN (UseN (computer_N)) (UseRCl (Present) (PPos) (RelSlash (that_RP) (SlashVP (UsePN (gfi_PN)) (SlashV2a (own_V2)))))))))))));+lin s_133_4_h = (Sentence (UseCl (Present) (PPos) (PredVP (UsePN (itel_PN)) (ComplSlash (SlashV2a (maintain_V2)) (PredetNP (all_Predet) (DetCN (DetQuant (DefArt) (NumPl)) (RelCN (UseN (computer_N)) (UseRCl (Present) (PPos) (RelSlash (that_RP) (SlashVP (UsePN (gfi_PN)) (SlashV2a (own_V2))))))))))));++lin s_134_1_p = (Sentence (UseCl (Present) (PPos) (PredVP (DetCN (every_Det) (RelCN (UseN (customer_N)) (UseRCl (Present) (PPos) (RelVP (IdRP) (ComplSlash (SlashV2a (own_V2)) (DetCN (DetQuant (IndefArt) (NumSg)) (UseN (computer_N)))))))) (AdvVP (ComplSlash (SlashV2a (have_V2)) (DetCN (DetQuant (IndefArt) (NumSg)) (UseN (service_contract_N)))) (PrepNP (for_Prep) (UsePron (it_Pron)))))));+lin s_134_2_p = (Sentence (UseCl (Present) (PPos) (PredVP (UsePN (mfi_PN)) (UseComp (CompCN (RelCN (UseN (customer_N)) (UseRCl (Present) (PPos) (RelVP (that_RP) (ComplSlash (SlashV2a (own_V2)) (PredetNP (exactly_Predet) (DetCN (DetQuant (IndefArt) (NumCard (NumNumeral (N_one)))) (UseN (computer_N)))))))))))));+lin s_134_3_q = (Question (UseQCl (Present) (PPos) (QuestCl (PredVP (UsePN (mfi_PN)) (AdvVP (ComplSlash (SlashV2a (have_V2)) (DetCN (DetQuant (IndefArt) (NumSg)) (UseN (service_contract_N)))) (PrepNP (for_Prep) (PredetNP (all_Predet) (DetCN (DetQuant (PossPron (itRefl_Pron)) (NumPl)) (UseN (computer_N))))))))));+lin s_134_4_h = (Sentence (UseCl (Present) (PPos) (PredVP (UsePN (mfi_PN)) (AdvVP (ComplSlash (SlashV2a (have_V2)) (DetCN (DetQuant (IndefArt) (NumSg)) (UseN (service_contract_N)))) (PrepNP (for_Prep) (PredetNP (all_Predet) (DetCN (DetQuant (PossPron (itRefl_Pron)) (NumPl)) (UseN (computer_N)))))))));++lin s_135_1_p = s_134_1_p;+lin s_135_2_p = (Sentence (UseCl (Present) (PPos) (PredVP (UsePN (mfi_PN)) (UseComp (CompCN (RelCN (UseN (customer_N)) (UseRCl (Present) (PPos) (RelVP (that_RP) (ComplSlash (SlashV2a (own_V2)) (DetCN (several_Det) (UseN (computer_N))))))))))));+lin s_135_3_q = s_134_3_q;+lin s_135_4_h = s_134_4_h;++lin s_136_1_p = (Sentence (UseCl (Past) (PPos) (PredVP (DetCN (every_Det) (RelCN (UseN (executive_N)) (UseRCl (Past) (PPos) (RelVP (IdRP) (ComplSlash (SlashV2a (have_V2)) (DetCN (DetQuant (IndefArt) (NumSg)) (UseN (laptop_computer_N)))))))) (ComplSlash (SlashV2V (bring_V2V) (AdvVP (ComplSlash (SlashV2a (take_V2)) (DetCN (DetQuant (IndefArt) (NumPl)) (UseN (note_N)))) (PrepNP (at_Prep) (DetCN (DetQuant (DefArt) (NumSg)) (UseN (meeting_N)))))) (UsePron (it_Pron))))));+lin s_136_2_p = (Sentence (UseCl (Present) (PPos) (PredVP (UsePN (smith_PN)) (UseComp (CompCN (RelCN (UseN (executive_N)) (UseRCl (Present) (PPos) (RelVP (IdRP) (ComplSlash (SlashV2a (own_V2)) (DetCN (DetQuant (IndefArt) (NumCard (NumNumeral (N_five)))) (AdjCN (PositA (different_A)) (UseN (laptop_computer_N)))))))))))));+lin s_136_3_q = (Question (UseQCl (Past) (PPos) (QuestCl (PredVP (UsePN (smith_PN)) (AdvVP (ComplSlash (SlashV2a (take_V2)) (DetCN (DetQuant (IndefArt) (NumCard (NumNumeral (N_five)))) (UseN (laptop_computer_N)))) (PrepNP (to_Prep) (DetCN (DetQuant (DefArt) (NumSg)) (UseN (meeting_N)))))))));+lin s_136_4_h = (Sentence (UseCl (Past) (PPos) (PredVP (UsePN (smith_PN)) (AdvVP (ComplSlash (SlashV2a (take_V2)) (DetCN (DetQuant (IndefArt) (NumCard (NumNumeral (N_five)))) (UseN (laptop_computer_N)))) (PrepNP (to_Prep) (DetCN (DetQuant (DefArt) (NumSg)) (UseN (meeting_N))))))));++lin s_137_1_p = (Sentence (UseCl (Present) (PPos) (ExistNP (DetCN (DetQuant (IndefArt) (NumCard (NumNumeral (N_100)))) (UseN (company_N))))));+lin s_137_2_p = (Sentence (PredVPS (UsePN (icm_PN)) (ConjVPS2 (and_Conj) (Present) (PPos) (UseComp (CompNP (AdvNP (DetNP (DetQuant (IndefArt) (NumCard (NumNumeral (N_one))))) (PrepNP (part_Prep) (DetCN (DetQuant (DefArt) (NumPl)) (UseN (company_N))))))) (Present) (PPos) (ComplSlash (SlashV2a (own_V2)) (DetCN (DetQuant (IndefArt) (NumCard (NumNumeral (N_150)))) (UseN (computer_N)))))));+lin s_137_3_p = (Sentence (UseCl (Present) (UncNeg) (PredVP (UsePron (it_Pron)) (AdvVP (ComplSlash (SlashV2a (have_V2)) (DetCN (DetQuant (IndefArt) (NumPl)) (UseN (service_contract_N)))) (PrepNP (for_Prep) (AdvNP (DetNP (anySg_Det)) (PrepNP (part_Prep) (DetCN (DetQuant (PossPron (itRefl_Pron)) (NumPl)) (UseN (computer_N))))))))));+lin s_137_4_p = (Sentence (UseCl (Present) (PPos) (PredVP (AdvNP (DetNP (each_Det)) (PrepNP (part_Prep) (DetCN (DetQuant (the_other_Q) (NumCard (NumNumeral (N_99)))) (UseN (company_N))))) (ComplSlash (SlashV2a (own_V2)) (DetCN (DetQuant (IndefArt) (NumCard (NumNumeral (N_one)))) (UseN (computer_N)))))));+lin s_137_5_p = (Sentence (UseCl (Present) (PPos) (PredVP (UsePron (they_Pron)) (AdvVP (ComplSlash (SlashV2a (have_V2)) (DetCN (DetQuant (IndefArt) (NumPl)) (UseN (service_contract_N)))) (PrepNP (for_Prep) (UsePron (they_Pron)))))));+lin s_137_6_q = (Question (UseQCl (Present) (PPos) (QuestCl (PredVP (PredetNP (most_Predet) (DetCN (DetQuant (IndefArt) (NumPl)) (RelCN (UseN (company_N)) (UseRCl (Present) (PPos) (RelVP (that_RP) (ComplSlash (SlashV2a (own_V2)) (DetCN (DetQuant (IndefArt) (NumSg)) (UseN (computer_N))))))))) (AdvVP (ComplSlash (SlashV2a (have_V2)) (DetCN (DetQuant (IndefArt) (NumSg)) (UseN (service_contract_N)))) (PrepNP (for_Prep) (UsePron (it_Pron))))))));+lin s_137_7_h = (Sentence (UseCl (Present) (PPos) (PredVP (PredetNP (most_Predet) (DetCN (DetQuant (IndefArt) (NumPl)) (RelCN (UseN (company_N)) (UseRCl (Present) (PPos) (RelVP (that_RP) (ComplSlash (SlashV2a (own_V2)) (DetCN (DetQuant (IndefArt) (NumSg)) (UseN (computer_N))))))))) (AdvVP (ComplSlash (SlashV2a (have_V2)) (DetCN (DetQuant (IndefArt) (NumSg)) (UseN (service_contract_N)))) (PrepNP (for_Prep) (UsePron (it_Pron)))))));++lin s_138_1_p = (Sentence (UseCl (Present) (PPos) (PredVP (DetCN (every_Det) (UseN (report_N))) (ComplSlash (SlashV2a (have_V2)) (DetCN (DetQuant (IndefArt) (NumSg)) (UseN (cover_page_N)))))));+lin s_138_2_p = (Sentence (UseCl (Present) (PPos) (PredVP (UsePN (r95103_PN)) (UseComp (CompCN (UseN (report_N)))))));+lin s_138_3_p = (Sentence (UseCl (Past) (PPos) (PredVP (UsePN (smith_PN)) (ComplSlash (SlashV2a (sign_V2)) (DetCN (DetQuant (DefArt) (NumSg)) (UseN (cover_page_N)))))));+lin s_138_4_q = (Question (UseQCl (Past) (PPos) (QuestCl (PredVP (UsePN (smith_PN)) (ComplSlash (SlashV2a (sign_V2)) (DetCN (DetQuant (DefArt) (NumSg)) (AdvCN (UseN (cover_page_N)) (PrepNP (possess_Prep) (UsePN (r95103_PN))))))))));+lin s_138_5_h = (Sentence (UseCl (Past) (PPos) (PredVP (UsePN (smith_PN)) (ComplSlash (SlashV2a (sign_V2)) (DetCN (DetQuant (DefArt) (NumSg)) (AdvCN (UseN (cover_page_N)) (PrepNP (possess_Prep) (UsePN (r95103_PN)))))))));++lin s_139_1_p = (Sentence (UseCl (Past) (PPos) (PredVP (DetCN (DetQuant (IndefArt) (NumSg)) (UseN (company_director_N))) (ReflVP (Slash3V3 (award_V3) (DetCN (DetQuant (IndefArt) (NumSg)) (AdjCN (PositA (large_A)) (UseN (payrise_N)))))))));+lin s_139_2_q = (Question (UseQCl (PresentPerfect) (PPos) (QuestCl (PredVP (DetCN (DetQuant (IndefArt) (NumSg)) (UseN (company_director_N))) (ComplSlash (SlashV2a (award_and_be_awarded_V2)) (DetCN (DetQuant (IndefArt) (NumSg)) (UseN (payrise_N))))))));+lin s_139_3_h = (Sentence (UseCl (PresentPerfect) (PPos) (PredVP (DetCN (DetQuant (IndefArt) (NumSg)) (UseN (company_director_N))) (ComplSlash (SlashV2a (award_and_be_awarded_V2)) (DetCN (DetQuant (IndefArt) (NumSg)) (UseN (payrise_N)))))));++lin s_140_1_p = (Sentence (UseCl (Past) (PPos) (PredVP (UsePN (john_PN)) (ComplVSa (say_VS) (UseCl (PastPerfect) (PPos) (PredVP (UsePN (bill_PN)) (ReflVP (SlashV2a (hurt_V2)))))))));+lin s_140_2_q = (Question (UseQCl (Past) (PPos) (QuestCl (PredVP (UsePN (john_PN)) (ComplVSa (say_VS) (UseCl (PastPerfect) (PPos) (PredVP (UsePN (bill_PN)) (PassV2s (hurt_V2)))))))));+lin s_140_3_h = (Sentence (UseCl (Past) (PPos) (PredVP (UsePN (john_PN)) (ComplVSa (say_VS) (UseCl (PastPerfect) (PPos) (PredVP (UsePN (bill_PN)) (PassV2s (hurt_V2))))))));++lin s_141_1_p = s_140_1_p;+lin s_141_2_q = (Question (UseQCl (Past) (PPos) (QuestCl (PredVP (UsePron (anyone_Pron)) (ComplVSa (say_VS) (UseCl (PastPerfect) (PPos) (PredVP (UsePN (john_PN)) (PassV2s (hurt_V2)))))))));+lin s_141_3_h = (Sentence (UseCl (Past) (PPos) (PredVP (UsePron (someone_Pron)) (ComplVSa (say_VS) (UseCl (PastPerfect) (PPos) (PredVP (UsePN (john_PN)) (PassV2s (hurt_V2))))))));++lin s_142_1_p = (Sentence (UseCl (Past) (PPos) (PredVP (UsePN (john_PN)) (ComplSlash (SlashV2a (speak_to_V2)) (UsePN (mary_PN))))));+lin s_142_2_p = (Sentence (UseCl (Past) (PPos) (SoDoI (UsePN (bill_PN)))));+lin s_142_3_q = (Question (UseQCl (Past) (PPos) (QuestCl (PredVP (UsePN (bill_PN)) (ComplSlash (SlashV2a (speak_to_V2)) (UsePN (mary_PN)))))));+lin s_142_4_h = (Sentence (UseCl (Past) (PPos) (PredVP (UsePN (bill_PN)) (ComplSlash (SlashV2a (speak_to_V2)) (UsePN (mary_PN))))));++lin s_143_1_p = s_142_1_p;+lin s_143_2_p = s_142_2_p;+lin s_143_3_p = (Sentence (UseCl (Past) (PPos) (PredVP (UsePN (john_PN)) (AdvVP (ComplSlash (SlashV2a (speak_to_V2)) (UsePN (mary_PN))) (at_four_oclock_Adv)))));+lin s_143_4_q = (Question (UseQCl (Past) (PPos) (QuestCl (PredVP (UsePN (bill_PN)) (AdvVP (ComplSlash (SlashV2a (speak_to_V2)) (UsePN (mary_PN))) (at_four_oclock_Adv))))));+lin s_143_5_h = (Sentence (UseCl (Past) (PPos) (PredVP (UsePN (bill_PN)) (AdvVP (ComplSlash (SlashV2a (speak_to_V2)) (UsePN (mary_PN))) (at_four_oclock_Adv)))));++lin s_144_1_p = s_143_3_p;+lin s_144_2_p = s_142_2_p;+lin s_144_3_q = s_143_4_q;+lin s_144_4_h = s_143_5_h;++lin s_145_1_p = s_143_3_p;+lin s_145_2_p = (PSentence (and_PConj) (UseCl (Past) (PPos) (PredVP (UsePN (bill_PN)) (AdvVP (ComplVV (do_VV) (elliptic_VP)) (at_five_oclock_Adv)))));+lin s_145_3_q = (Question (UseQCl (Past) (PPos) (QuestCl (PredVP (UsePN (bill_PN)) (AdvVP (ComplSlash (SlashV2a (speak_to_V2)) (UsePN (mary_PN))) (at_five_oclock_Adv))))));+lin s_145_4_h = (Sentence (UseCl (Past) (PPos) (PredVP (UsePN (bill_PN)) (AdvVP (ComplSlash (SlashV2a (speak_to_V2)) (UsePN (mary_PN))) (at_five_oclock_Adv)))));++lin s_146_1_p = (Sentence (UseCl (PresentPerfect) (PPos) (PredVP (UsePN (john_PN)) (ComplSlash (SlashV2a (speak_to_V2)) (UsePN (mary_PN))))));+lin s_146_2_p = (Sentence (UseCl (Present) (PPos) (PredVP (UsePN (bill_PN)) (ProgrVPa (ComplVV (going_to_VV) (elliptic_VP))))));+lin s_146_3_q = (Question (UseQCl (Future) (PPos) (QuestCl (PredVP (UsePN (bill_PN)) (ComplSlash (SlashV2a (speak_to_V2)) (UsePN (mary_PN)))))));+lin s_146_4_h = (Sentence (UseCl (Future) (PPos) (PredVP (UsePN (bill_PN)) (ComplSlash (SlashV2a (speak_to_V2)) (UsePN (mary_PN))))));++lin s_147_1_p = (Sentence (UseCl (Past) (PPos) (PredVP (UsePN (john_PN)) (AdvVP (ComplSlash (SlashV2a (speak_to_V2)) (UsePN (mary_PN))) (on_monday_Adv)))));+lin s_147_2_p = (Sentence (UseCl (Past) (PNeg) (PredVP (UsePN (bill_PN)) (elliptic_VP))));+lin s_147_3_q = (Question (UseQCl (Past) (PPos) (QuestCl (PredVP (UsePN (bill_PN)) (AdvVP (ComplSlash (SlashV2a (speak_to_V2)) (UsePN (mary_PN))) (on_monday_Adv))))));+lin s_147_4_h = (Sentence (UseCl (Past) (PPos) (PredVP (UsePN (bill_PN)) (AdvVP (ComplSlash (SlashV2a (speak_to_V2)) (UsePN (mary_PN))) (on_monday_Adv)))));++lin s_148_1_p = (Question (UseQCl (PresentPerfect) (PPos) (QuestCl (PredVP (UsePN (john_PN)) (ComplSlash (SlashV2a (speak_to_V2)) (UsePN (mary_PN)))))));+lin s_148_2_p = (Sentence (UseCl (PresentPerfect) (PPos) (PredVP (UsePN (bill_PN)) (elliptic_VP))));+lin s_148_3_q = (Question (UseQCl (PresentPerfect) (PPos) (QuestCl (PredVP (UsePN (bill_PN)) (ComplSlash (SlashV2a (speak_to_V2)) (UsePN (mary_PN)))))));+lin s_148_4_h = (Sentence (UseCl (PresentPerfect) (PPos) (PredVP (UsePN (bill_PN)) (ComplSlash (SlashV2a (speak_to_V2)) (UsePN (mary_PN))))));++lin s_149_1_p = s_146_1_p;+lin s_149_2_p = (Sentence (UseCl (PresentPerfect) (PPos) (PredVP (DetCN (DetQuant (DefArt) (NumPl)) (UseN (student_N))) (AdvVP (elliptic_VP) (too_Adv)))));+lin s_149_3_q = (Question (UseQCl (PresentPerfect) (PPos) (QuestCl (PredVP (DetCN (DetQuant (DefArt) (NumPl)) (UseN (student_N))) (ComplSlash (SlashV2a (speak_to_V2)) (UsePN (mary_PN)))))));+lin s_149_4_h = (Sentence (UseCl (PresentPerfect) (PPos) (PredVP (DetCN (DetQuant (DefArt) (NumPl)) (UseN (student_N))) (ComplSlash (SlashV2a (speak_to_V2)) (UsePN (mary_PN))))));++lin s_150_1_p = (Sentence (ConjS2 (comma_and_Conj) (UseCl (Past) (PPos) (PredVP (UsePN (john_PN)) (AdvVP (AdvVP (UseV (go8travel_V)) (PrepNP (to_Prep) (UsePN (paris_PN)))) (PrepNP (by8means_Prep) (MassNP (UseN (car_N))))))) (UseCl (Past) (PPos) (PredVP (UsePN (bill_PN)) (AdvVP (elliptic_VP) (PrepNP (by8means_Prep) (MassNP (UseN (train_N)))))))));+lin s_150_2_q = (Question (UseQCl (Past) (PPos) (QuestCl (PredVP (UsePN (bill_PN)) (AdvVP (AdvVP (UseV (go8travel_V)) (PrepNP (to_Prep) (UsePN (paris_PN)))) (PrepNP (by8means_Prep) (MassNP (UseN (train_N)))))))));+lin s_150_3_h = (Sentence (UseCl (Past) (PPos) (PredVP (UsePN (bill_PN)) (AdvVP (AdvVP (UseV (go8travel_V)) (PrepNP (to_Prep) (UsePN (paris_PN)))) (PrepNP (by8means_Prep) (MassNP (UseN (train_N))))))));++lin s_151_1_p = (Sentence (ConjS2 (comma_and_Conj) (UseCl (Past) (PPos) (PredVP (UsePN (john_PN)) (AdvVP (AdvVP (UseV (go8travel_V)) (PrepNP (to_Prep) (UsePN (paris_PN)))) (PrepNP (by8means_Prep) (MassNP (UseN (car_N))))))) (UseCl (Past) (PPos) (PredVP (UsePN (bill_PN)) (AdvVP (AdvVP (elliptic_VP) (PrepNP (by8means_Prep) (MassNP (UseN (train_N))))) (PrepNP (to_Prep) (UsePN (berlin_PN))))))));+lin s_151_2_q = (Question (UseQCl (Past) (PPos) (QuestCl (PredVP (UsePN (bill_PN)) (AdvVP (AdvVP (UseV (go8travel_V)) (PrepNP (to_Prep) (UsePN (berlin_PN)))) (PrepNP (by8means_Prep) (MassNP (UseN (train_N)))))))));+lin s_151_3_h = (Sentence (UseCl (Past) (PPos) (PredVP (UsePN (bill_PN)) (AdvVP (AdvVP (UseV (go8travel_V)) (PrepNP (to_Prep) (UsePN (berlin_PN)))) (PrepNP (by8means_Prep) (MassNP (UseN (train_N))))))));++lin s_152_1_p = (Sentence (ConjS2 (comma_and_Conj) (UseCl (Past) (PPos) (PredVP (UsePN (john_PN)) (AdvVP (AdvVP (UseV (go8travel_V)) (PrepNP (to_Prep) (UsePN (paris_PN)))) (PrepNP (by8means_Prep) (MassNP (UseN (car_N))))))) (UseCl (Past) (PPos) (PredVP (UsePN (bill_PN)) (AdvVP (elliptic_VP) (PrepNP (to_Prep) (UsePN (berlin_PN))))))));+lin s_152_2_q = (Question (UseQCl (Past) (PPos) (QuestCl (PredVP (UsePN (bill_PN)) (AdvVP (AdvVP (UseV (go8travel_V)) (PrepNP (to_Prep) (UsePN (berlin_PN)))) (PrepNP (by8means_Prep) (MassNP (UseN (car_N)))))))));+lin s_152_3_h = (Sentence (UseCl (Past) (PPos) (PredVP (UsePN (bill_PN)) (AdvVP (AdvVP (UseV (go8travel_V)) (PrepNP (to_Prep) (UsePN (berlin_PN)))) (PrepNP (by8means_Prep) (MassNP (UseN (car_N))))))));++lin s_153_1_p = (Sentence (ConjS2 (comma_and_Conj) (UseCl (Present) (PPos) (PredVP (UsePN (john_PN)) (AdvVP (AdvVP (ProgrVPa (UseV (go8travel_V))) (PrepNP (to_Prep) (UsePN (paris_PN)))) (PrepNP (by8means_Prep) (MassNP (UseN (car_N))))))) (UseCl (Present) (PPos) (PredVP (DetCN (DetQuant (DefArt) (NumPl)) (UseN (student_N))) (AdvVP (elliptic_VP) (PrepNP (by8means_Prep) (MassNP (UseN (train_N)))))))));+lin s_153_2_q = (Question (UseQCl (Present) (PPos) (QuestCl (PredVP (DetCN (DetQuant (DefArt) (NumPl)) (UseN (student_N))) (AdvVP (AdvVP (ProgrVPa (UseV (go8travel_V))) (PrepNP (to_Prep) (UsePN (paris_PN)))) (PrepNP (by8means_Prep) (MassNP (UseN (train_N)))))))));+lin s_153_3_h = (Sentence (UseCl (Present) (PPos) (PredVP (DetCN (DetQuant (DefArt) (NumPl)) (UseN (student_N))) (AdvVP (AdvVP (ProgrVPa (UseV (go8travel_V))) (PrepNP (to_Prep) (UsePN (paris_PN)))) (PrepNP (by8means_Prep) (MassNP (UseN (train_N))))))));++lin s_154_1_p = (Sentence (UseCl (Past) (PPos) (PredVP (UsePN (john_PN)) (AdvVP (AdvVP (UseV (go8travel_V)) (PrepNP (to_Prep) (UsePN (paris_PN)))) (PrepNP (by8means_Prep) (MassNP (UseN (car_N))))))));+lin s_154_2_p = (Sentence (UseCl (Past) (PPos) (PredVP (UsePN (bill_PN)) (AdvVP (elliptic_VP) (PrepNP (by8means_Prep) (MassNP (UseN (train_N))))))));+lin s_154_3_q = s_150_2_q;+lin s_154_4_h = s_150_3_h;++lin s_155_1_p = (Sentence (UseCl (Present) (PPos) (PredVP (UsePN (john_PN)) (ComplSlash (SlashV2a (own_V2)) (DetCN (DetQuant (IndefArt) (NumSg)) (UseN (car_N)))))));+lin s_155_2_p = (Sentence (UseCl (Present) (PPos) (PredVP (UsePN (bill_PN)) (AdvVP (ComplSlash (SlashV2a (own_V2)) (DetNP (DetQuant (IndefArt) (NumSg)))) (too_Adv)))));+lin s_155_3_q = (Question (UseQCl (Present) (PPos) (QuestCl (PredVP (UsePN (bill_PN)) (ComplSlash (SlashV2a (own_V2)) (DetCN (DetQuant (IndefArt) (NumSg)) (UseN (car_N))))))));+lin s_155_4_h = (Sentence (UseCl (Present) (PPos) (PredVP (UsePN (bill_PN)) (ComplSlash (SlashV2a (own_V2)) (DetCN (DetQuant (IndefArt) (NumSg)) (UseN (car_N)))))));++lin s_156_1_p = s_155_1_p;+lin s_156_2_p = s_155_2_p;+lin s_156_3_q = (Question (UseQCl (Present) (PPos) (QuestCl (ExistNP (DetCN (DetQuant (IndefArt) (NumSg)) (RelCN (UseN (car_N)) (UseRCl (Present) (PPos) (RelSlash (that_RP) (SlashVP (ConjNP2 (and_Conj) (UsePN (john_PN)) (UsePN (bill_PN))) (SlashV2a (own_V2)))))))))));+lin s_156_4_h = (Sentence (UseCl (Present) (PPos) (ExistNP (DetCN (DetQuant (IndefArt) (NumSg)) (RelCN (UseN (car_N)) (UseRCl (Present) (PPos) (RelSlash (that_RP) (SlashVP (ConjNP2 (and_Conj) (UsePN (john_PN)) (UsePN (bill_PN))) (SlashV2a (own_V2))))))))));++lin s_157_1_p = (Sentence (UseCl (Present) (PPos) (PredVP (UsePN (john_PN)) (ComplSlash (SlashV2a (own_V2)) (DetCN (DetQuant (IndefArt) (NumSg)) (AdjCN (PositA (red_A)) (UseN (car_N))))))));+lin s_157_2_p = (Sentence (UseCl (Present) (PPos) (PredVP (UsePN (bill_PN)) (ComplSlash (SlashV2a (own_V2)) (DetCN (DetQuant (IndefArt) (NumSg)) (AdjCN (PositA (blue_A)) (UseN (one_N))))))));+lin s_157_3_q = (Question (UseQCl (Present) (PPos) (QuestCl (PredVP (UsePN (bill_PN)) (ComplSlash (SlashV2a (own_V2)) (DetCN (DetQuant (IndefArt) (NumSg)) (AdjCN (PositA (blue_A)) (UseN (car_N)))))))));+lin s_157_4_h = (Sentence (UseCl (Present) (PPos) (PredVP (UsePN (bill_PN)) (ComplSlash (SlashV2a (own_V2)) (DetCN (DetQuant (IndefArt) (NumSg)) (AdjCN (PositA (blue_A)) (UseN (car_N))))))));++lin s_158_1_p = s_157_1_p;+lin s_158_2_p = s_157_2_p;+lin s_158_3_q = (Question (UseQCl (Present) (PPos) (QuestCl (PredVP (UsePN (bill_PN)) (ComplSlash (SlashV2a (own_V2)) (DetCN (DetQuant (IndefArt) (NumSg)) (AdjCN (PositA (red_A)) (UseN (car_N)))))))));+lin s_158_4_h = (Sentence (UseCl (Present) (PPos) (PredVP (UsePN (bill_PN)) (ComplSlash (SlashV2a (own_V2)) (DetCN (DetQuant (IndefArt) (NumSg)) (AdjCN (PositA (red_A)) (UseN (car_N))))))));++lin s_159_1_p = s_157_1_p;+lin s_159_2_p = (Sentence (UseCl (Present) (PPos) (PredVP (UsePN (bill_PN)) (ComplSlash (SlashV2a (own_V2)) (DetCN (DetQuant (IndefArt) (NumSg)) (AdjCN (PositA (fast_A)) (UseN (one_N))))))));+lin s_159_3_q = (Question (UseQCl (Present) (PPos) (QuestCl (PredVP (UsePN (bill_PN)) (ComplSlash (SlashV2a (own_V2)) (DetCN (DetQuant (IndefArt) (NumSg)) (AdjCN (PositA (fast_A)) (UseN (car_N)))))))));+lin s_159_4_h = (Sentence (UseCl (Present) (PPos) (PredVP (UsePN (bill_PN)) (ComplSlash (SlashV2a (own_V2)) (DetCN (DetQuant (IndefArt) (NumSg)) (AdjCN (PositA (fast_A)) (UseN (car_N))))))));++lin s_160_1_p = s_157_1_p;+lin s_160_2_p = s_159_2_p;+lin s_160_3_q = (Question (UseQCl (Present) (PPos) (QuestCl (PredVP (UsePN (bill_PN)) (ComplSlash (SlashV2a (own_V2)) (DetCN (DetQuant (IndefArt) (NumSg)) (AdjCN (PositA (fast_A)) (AdjCN (PositA (red_A)) (UseN (car_N))))))))));+lin s_160_4_h = (Sentence (UseCl (Present) (PPos) (PredVP (UsePN (bill_PN)) (ComplSlash (SlashV2a (own_V2)) (DetCN (DetQuant (IndefArt) (NumSg)) (AdjCN (PositA (fast_A)) (AdjCN (PositA (red_A)) (UseN (car_N)))))))));++lin s_161_1_p = s_157_1_p;+lin s_161_2_p = s_159_2_p;+lin s_161_3_q = s_160_3_q;+lin s_161_4_h = s_160_4_h;++lin s_162_1_p = (Sentence (UseCl (Present) (PPos) (PredVP (UsePN (john_PN)) (ComplSlash (SlashV2a (own_V2)) (DetCN (DetQuant (IndefArt) (NumSg)) (AdjCN (PositA (fast_A)) (AdjCN (PositA (red_A)) (UseN (car_N)))))))));+lin s_162_2_p = (Sentence (UseCl (Present) (PPos) (PredVP (UsePN (bill_PN)) (ComplSlash (SlashV2a (own_V2)) (DetCN (DetQuant (IndefArt) (NumSg)) (AdjCN (PositA (slow_A)) (UseN (one_N))))))));+lin s_162_3_q = (Question (UseQCl (Present) (PPos) (QuestCl (PredVP (UsePN (bill_PN)) (ComplSlash (SlashV2a (own_V2)) (DetCN (DetQuant (IndefArt) (NumSg)) (AdjCN (PositA (slow_A)) (AdjCN (PositA (red_A)) (UseN (car_N))))))))));+lin s_162_4_h = (Sentence (UseCl (Present) (PPos) (PredVP (UsePN (bill_PN)) (ComplSlash (SlashV2a (own_V2)) (DetCN (DetQuant (IndefArt) (NumSg)) (AdjCN (PositA (slow_A)) (AdjCN (PositA (red_A)) (UseN (car_N)))))))));++lin s_163_1_p = (Sentence (UseCl (Past) (PPos) (PredVP (UsePN (john_PN)) (ComplSlash (SlashV2a (have_V2)) (PPartNP (DetCN (DetQuant (PossPron (heRefl_Pron)) (NumSg)) (UseN (paper_N))) (accept_V2))))));+lin s_163_2_p = (Sentence (UseCl (Present) (PNeg) (PredVP (UsePN (bill_PN)) (ComplVQ (know_VQ) (UseQCl (Past) (PPos) (QuestIAdv (why_IAdv) (elliptic_Cl)))))));+lin s_163_3_q = (Question (UseQCl (Present) (PPos) (QuestCl (PredVP (UsePN (bill_PN)) (ComplVQ (know_VQ) (UseQCl (Past) (PPos) (QuestIAdv (why_IAdv) (PredVP (UsePN (john_PN)) (ComplSlash (SlashV2a (have_V2)) (PPartNP (DetCN (DetQuant (PossPron (heRefl_Pron)) (NumSg)) (UseN (paper_N))) (accept_V2)))))))))));+lin s_163_4_h = (Sentence (UseCl (Present) (PPos) (PredVP (UsePN (bill_PN)) (ComplVQ (know_VQ) (UseQCl (Past) (PPos) (QuestIAdv (why_IAdv) (PredVP (UsePN (john_PN)) (ComplSlash (SlashV2a (have_V2)) (PPartNP (DetCN (DetQuant (PossPron (heRefl_Pron)) (NumSg)) (UseN (paper_N))) (accept_V2))))))))));++lin s_164_1_p = s_142_1_p;+lin s_164_2_p = (PAdverbial (and_PConj) (PrepNP (to_Prep) (UsePN (sue_PN))));+lin s_164_3_q = (Question (UseQCl (Past) (PPos) (QuestCl (PredVP (UsePN (john_PN)) (ComplSlash (SlashV2a (speak_to_V2)) (UsePN (sue_PN)))))));+lin s_164_4_h = (Sentence (UseCl (Past) (PPos) (PredVP (UsePN (john_PN)) (ComplSlash (SlashV2a (speak_to_V2)) (UsePN (sue_PN))))));++lin s_165_1_p = s_142_1_p;+lin s_165_2_p = (Adverbial (on_friday_Adv));+lin s_165_3_q = (Question (UseQCl (Past) (PPos) (QuestCl (PredVP (UsePN (john_PN)) (AdvVP (ComplSlash (SlashV2a (speak_to_V2)) (UsePN (mary_PN))) (on_friday_Adv))))));+lin s_165_4_h = (Sentence (UseCl (Past) (PPos) (PredVP (UsePN (john_PN)) (AdvVP (ComplSlash (SlashV2a (speak_to_V2)) (UsePN (mary_PN))) (on_friday_Adv)))));++lin s_166_1_p = (Sentence (UseCl (Past) (PPos) (PredVP (UsePN (john_PN)) (AdvVP (ComplSlash (SlashV2a (speak_to_V2)) (UsePN (mary_PN))) (on_thursday_Adv)))));+lin s_166_2_p = (PAdverbial (and_PConj) (on_friday_Adv));+lin s_166_3_q = s_165_3_q;+lin s_166_4_h = s_165_4_h;++lin s_167_1_p = (Sentence (UseCl (Present) (PPos) (PredVP (DetCN (DetQuant (IndefArt) (NumCard (NumNumeral (N_twenty)))) (UseN (man_N))) (ComplSlash (SlashV2a (work_in_V2)) (DetCN (DetQuant (DefArt) (NumSg)) (UseN (sales_department_N)))))));+lin s_167_2_p = (PNounphrase (but_PConj) (PredetNP (only_Predet) (DetCN (DetQuant (IndefArt) (NumCard (NumNumeral (N_one)))) (UseN (woman_N)))));+lin s_167_3_q = (Question (UseQCl (Present) (PPos) (QuestCl (PredVP (DetCN (DetQuant (IndefArt) (NumCard (NumNumeral (N_two)))) (UseN (woman_N))) (ComplSlash (SlashV2a (work_in_V2)) (DetCN (DetQuant (DefArt) (NumSg)) (UseN (sales_department_N))))))));+lin s_167_4_h = (Sentence (UseCl (Present) (PPos) (PredVP (DetCN (DetQuant (IndefArt) (NumCard (NumNumeral (N_two)))) (UseN (woman_N))) (ComplSlash (SlashV2a (work_in_V2)) (DetCN (DetQuant (DefArt) (NumSg)) (UseN (sales_department_N)))))));++lin s_168_1_p = (Sentence (UseCl (Present) (PPos) (PredVP (DetCN (DetQuant (IndefArt) (NumCard (NumNumeral (N_five)))) (UseN (man_N))) (AdvVP (UseV (work_V)) (part_time_Adv)))));+lin s_168_2_p = (PNounphrase (and_PConj) (DetCN (DetQuant (IndefArt) (NumCard (NumNumeral (N_fortyfive)))) (UseN (woman_N))));+lin s_168_3_q = (Question (UseQCl (Present) (PPos) (QuestCl (PredVP (DetCN (DetQuant (IndefArt) (NumCard (NumNumeral (N_fortyfive)))) (UseN (woman_N))) (AdvVP (UseV (work_V)) (part_time_Adv))))));+lin s_168_4_h = (Sentence (UseCl (Present) (PPos) (PredVP (DetCN (DetQuant (IndefArt) (NumCard (NumNumeral (N_fortyfive)))) (UseN (woman_N))) (AdvVP (UseV (work_V)) (part_time_Adv)))));++lin s_169_1_p = (Sentence (UseCl (Past) (PPos) (PredVP (UsePN (john_PN)) (AdvVP (ComplSlash (SlashV2a (find_V2)) (UsePN (mary_PN))) (PrepNP (before_Prep) (UsePN (bill_PN)))))));+lin s_169_2_q = (Question (UseQCl (Past) (PPos) (QuestCl (PredVP (UsePN (john_PN)) (AdvVP (ComplSlash (SlashV2a (find_V2)) (UsePN (mary_PN))) (SubjS (before_Subj) (UseCl (Past) (PPos) (PredVP (UsePN (bill_PN)) (ComplSlash (SlashV2a (find_V2)) (UsePN (mary_PN)))))))))));+lin s_169_3_h = (Sentence (UseCl (Past) (PPos) (PredVP (UsePN (john_PN)) (AdvVP (ComplSlash (SlashV2a (find_V2)) (UsePN (mary_PN))) (SubjS (before_Subj) (UseCl (Past) (PPos) (PredVP (UsePN (bill_PN)) (ComplSlash (SlashV2a (find_V2)) (UsePN (mary_PN))))))))));++lin s_170_1_p = (Sentence (UseCl (Past) (PPos) (PredVP (UsePN (john_PN)) (ComplSlash (SlashV2a (find_V2)) (AdvNP (UsePN (mary_PN)) (PrepNP (before_Prep) (UsePN (bill_PN))))))));+lin s_170_2_q = (Question (UseQCl (Past) (PPos) (QuestCl (PredVP (UsePN (john_PN)) (AdvVP (ComplSlash (SlashV2a (find_V2)) (UsePN (mary_PN))) (SubjS (before_Subj) (UseCl (Past) (PPos) (PredVP (UsePN (john_PN)) (ComplSlash (SlashV2a (find_V2)) (UsePN (bill_PN)))))))))));+lin s_170_3_h = (Sentence (UseCl (Past) (PPos) (PredVP (UsePN (john_PN)) (AdvVP (ComplSlash (SlashV2a (find_V2)) (UsePN (mary_PN))) (SubjS (before_Subj) (UseCl (Past) (PPos) (PredVP (UsePN (john_PN)) (ComplSlash (SlashV2a (find_V2)) (UsePN (bill_PN))))))))));++lin s_171_1_p = (Sentence (UseCl (Present) (PPos) (PredVP (UsePN (john_PN)) (ComplVV (want_VV) (ComplVQ (know_VQ) (UseQCl (Present) (PPos) (QuestVP (IdetCN (how8many_IDet) (UseN (man_N))) (AdvVP (UseV (work_V)) (part_time_Adv)))))))));+lin s_171_2_p = (PNounphrase (and_PConj) (DetCN (DetQuant (IndefArt) (NumPl)) (UseN (woman_N))));+lin s_171_3_q = (Question (UseQCl (Present) (PPos) (QuestCl (PredVP (UsePN (john_PN)) (ComplVV (want_VV) (ComplVQ (know_VQ) (UseQCl (Present) (PPos) (QuestVP (IdetCN (how8many_IDet) (UseN (woman_N))) (AdvVP (UseV (work_V)) (part_time_Adv))))))))));+lin s_171_4_h = (Sentence (UseCl (Present) (PPos) (PredVP (UsePN (john_PN)) (ComplVV (want_VV) (ComplVQ (know_VQ) (UseQCl (Present) (PPos) (QuestVP (IdetCN (how8many_IDet) (UseN (woman_N))) (AdvVP (UseV (work_V)) (part_time_Adv)))))))));++lin s_172_1_p = (Sentence (UseCl (Present) (PPos) (PredVP (UsePN (john_PN)) (ComplVV (want_VV) (ComplVQ (know_VQ) (ConjQS2 (comma_and_Conj) (UseQCl (Present) (PPos) (QuestVP (IdetCN (how8many_IDet) (UseN (man_N))) (AdvVP (UseV (work_V)) (part_time_Adv)))) (UseQCl (Present) (PPos) (QuestVP (IdetCN (IdetQuant (which_IQuant) (NumPl)) (elliptic_CN)) (elliptic_VP)))))))));+lin s_172_2_q = (Question (UseQCl (Present) (PPos) (QuestCl (PredVP (UsePN (john_PN)) (ComplVV (want_VV) (ComplVQ (know_VQ) (UseQCl (Present) (PPos) (QuestVP (IdetCN (IdetQuant (which_IQuant) (NumPl)) (UseN (man_N))) (AdvVP (UseV (work_V)) (part_time_Adv))))))))));+lin s_172_3_h = (Sentence (UseCl (Present) (PPos) (PredVP (UsePN (john_PN)) (ComplVV (want_VV) (ComplVQ (know_VQ) (UseQCl (Present) (PPos) (QuestVP (IdetCN (IdetQuant (which_IQuant) (NumPl)) (UseN (man_N))) (AdvVP (UseV (work_V)) (part_time_Adv)))))))));++lin s_173_1_p = (Sentence (UseCl (Past) (PPos) (PredVP (UsePN (bill_PN)) (ComplSlash (SlashV2a (speak_to_V2)) (RelNPa (UsePron (everyone_Pron)) (UseRCl (Past) (PPos) (StrandRelSlash (that_RP) (SlashVP (UsePN (john_PN)) (SlashVV (do_VV) (elliptic_VPSlash))))))))));+lin s_173_2_p = s_142_1_p;+lin s_173_3_q = s_142_3_q;+lin s_173_4_h = s_142_4_h;++lin s_174_1_p = s_173_1_p;+lin s_174_2_p = s_142_4_h;+lin s_174_3_q = (Question (UseQCl (Past) (PPos) (QuestCl (PredVP (UsePN (john_PN)) (ComplSlash (SlashV2a (speak_to_V2)) (UsePN (mary_PN)))))));+lin s_174_4_h = s_142_1_p;++lin s_175_1_p = (Sentence (ConjS2 (comma_and_Conj) (UseCl (Past) (PPos) (PredVP (UsePN (john_PN)) (ComplVSa (say_VS) (UseCl (Past) (PPos) (PredVP (UsePN (mary_PN)) (ComplSlash (SlashV2a (write_V2)) (DetCN (DetQuant (IndefArt) (NumSg)) (UseN (report_N))))))))) (UseCl (Past) (PPos) (PredVP (UsePN (bill_PN)) (AdvVP (ComplVV (do_VV) (elliptic_VP)) (too_Adv))))));+lin s_175_2_q = (Question (UseQCl (Past) (PPos) (QuestCl (PredVP (UsePN (bill_PN)) (ComplVSa (say_VS) (UseCl (Past) (PPos) (PredVP (UsePN (mary_PN)) (ComplSlash (SlashV2a (write_V2)) (DetCN (DetQuant (IndefArt) (NumSg)) (UseN (report_N)))))))))));+lin s_175_3_h = (Sentence (UseCl (Past) (PPos) (PredVP (UsePN (bill_PN)) (ComplVSa (say_VS) (UseCl (Past) (PPos) (PredVP (UsePN (mary_PN)) (ComplSlash (SlashV2a (write_V2)) (DetCN (DetQuant (IndefArt) (NumSg)) (UseN (report_N))))))))));++lin s_176_1_p = (Sentence (UseCl (Past) (PPos) (PredVP (UsePN (john_PN)) (ComplVSa (say_VS) (ConjS2 (comma_and_Conj) (UseCl (Past) (PPos) (PredVP (UsePN (mary_PN)) (ComplSlash (SlashV2a (write_V2)) (DetCN (DetQuant (IndefArt) (NumSg)) (UseN (report_N)))))) (UseCl (Past) (PPos) (PredVP (UsePN (bill_PN)) (AdvVP (ComplVV (do_VV) (elliptic_VP)) (too_Adv)))))))));+lin s_176_2_q = (Question (UseQCl (Past) (PPos) (QuestCl (PredVP (UsePN (john_PN)) (ComplVSa (say_VS) (UseCl (Past) (PPos) (PredVP (UsePN (bill_PN)) (ComplSlash (SlashV2a (write_V2)) (DetCN (DetQuant (IndefArt) (NumSg)) (UseN (report_N)))))))))));+lin s_176_3_h = (Sentence (UseCl (Past) (PPos) (PredVP (UsePN (john_PN)) (ComplVSa (say_VS) (UseCl (Past) (PPos) (PredVP (UsePN (bill_PN)) (ComplSlash (SlashV2a (write_V2)) (DetCN (DetQuant (IndefArt) (NumSg)) (UseN (report_N))))))))));++lin s_177_1_p = variants{};+lin s_177_1_p_NEW = (Sentence (UseCl (Past) (PPos) (PredVP (UsePN (john_PN)) (ComplVS (say_VS) (PredVPS (UsePN (mary_PN)) (ConjVPS2 (comma_and_Conj) (Past) (PPos) (ComplSlash (SlashV2a (write_V2)) (DetCN (DetQuant (IndefArt) (NumSg)) (UseN (report_N)))) (Past) (PPos) (ComplVS (say_VS) (UseCl (Past) (PPos) (PredVP (UsePN (bill_PN)) (AdvVP (ComplVV (do_VV) (elliptic_VP)) (too_Adv)))))))))));+lin s_177_2_q = s_175_2_q;+lin s_177_3_h = s_175_3_h;++lin s_178_1_p = (Sentence (ConjS2 (comma_and_Conj) (UseCl (Past) (PPos) (PredVP (UsePN (john_PN)) (ComplSlash (SlashV2a (write_V2)) (DetCN (DetQuant (IndefArt) (NumSg)) (UseN (report_N)))))) (UseCl (Past) (PPos) (PredVP (UsePN (bill_PN)) (AdvVP (ComplVSa (say_VS) (UseCl (Past) (PPos) (PredVP (UsePN (peter_PN)) (ComplVV (do_VV) (elliptic_VP))))) (too_Adv))))));+lin s_178_2_q = (Question (UseQCl (Past) (PPos) (QuestCl (PredVP (UsePN (bill_PN)) (ComplVSa (say_VS) (UseCl (Past) (PPos) (PredVP (UsePN (peter_PN)) (ComplSlash (SlashV2a (write_V2)) (DetCN (DetQuant (IndefArt) (NumSg)) (UseN (report_N)))))))))));+lin s_178_3_h = (Sentence (UseCl (Past) (PPos) (PredVP (UsePN (bill_PN)) (ComplVSa (say_VS) (UseCl (Past) (PPos) (PredVP (UsePN (peter_PN)) (ComplSlash (SlashV2a (write_V2)) (DetCN (DetQuant (IndefArt) (NumSg)) (UseN (report_N))))))))));++lin s_179_1_p = (Sentence (ConjS2 (if_comma_then_Conj) (UseCl (Past) (PPos) (PredVP (UsePN (john_PN)) (ComplSlash (SlashV2a (write_V2)) (DetCN (DetQuant (IndefArt) (NumSg)) (UseN (report_N)))))) (UseCl (Past) (PPos) (PredVP (UsePN (bill_PN)) (AdvVP (ComplVV (do_VV) (elliptic_VP)) (too_Adv))))));+lin s_179_2_p = (Sentence (UseCl (Past) (PPos) (PredVP (UsePN (john_PN)) (ComplSlash (SlashV2a (write_V2)) (DetCN (DetQuant (IndefArt) (NumSg)) (UseN (report_N)))))));+lin s_179_3_q = (Question (UseQCl (Past) (PPos) (QuestCl (PredVP (UsePN (bill_PN)) (ComplSlash (SlashV2a (write_V2)) (DetCN (DetQuant (IndefArt) (NumSg)) (UseN (report_N))))))));+lin s_179_4_h = (Sentence (UseCl (Past) (PPos) (PredVP (UsePN (bill_PN)) (ComplSlash (SlashV2a (write_V2)) (DetCN (DetQuant (IndefArt) (NumSg)) (UseN (report_N)))))));++lin s_180_1_p = (Sentence (ConjS2 (comma_and_Conj) (UseCl (Past) (PPos) (PredVP (UsePN (john_PN)) (ComplVV (want_VV) (ComplSlash (SlashV2a (buy_V2)) (DetCN (DetQuant (IndefArt) (NumSg)) (UseN (car_N))))))) (UseCl (Past) (PPos) (PredVP (UsePron (he_Pron)) (ComplVV (do_VV) (elliptic_VP))))));+lin s_180_2_q = (Question (UseQCl (Past) (PPos) (QuestCl (PredVP (UsePN (john_PN)) (ComplSlash (SlashV2a (buy_V2)) (DetCN (DetQuant (IndefArt) (NumSg)) (UseN (car_N))))))));+lin s_180_3_h = (Sentence (UseCl (Past) (PPos) (PredVP (UsePN (john_PN)) (ComplSlash (SlashV2a (buy_V2)) (DetCN (DetQuant (IndefArt) (NumSg)) (UseN (car_N)))))));++lin s_181_1_p = (Sentence (ConjS2 (comma_and_Conj) (UseCl (Past) (PPos) (PredVP (UsePN (john_PN)) (ComplVV (need_VV) (ComplSlash (SlashV2a (buy_V2)) (DetCN (DetQuant (IndefArt) (NumSg)) (UseN (car_N))))))) (UseCl (Past) (PPos) (PredVP (UsePN (bill_PN)) (ComplVV (do_VV) (elliptic_VP))))));+lin s_181_2_q = (Question (UseQCl (Past) (PPos) (QuestCl (PredVP (UsePN (bill_PN)) (ComplSlash (SlashV2a (buy_V2)) (DetCN (DetQuant (IndefArt) (NumSg)) (UseN (car_N))))))));+lin s_181_3_h = (Sentence (UseCl (Past) (PPos) (PredVP (UsePN (bill_PN)) (ComplSlash (SlashV2a (buy_V2)) (DetCN (DetQuant (IndefArt) (NumSg)) (UseN (car_N)))))));++lin s_182_1_p = (Sentence (ConjS2 (and_Conj) (UseCl (Present) (PPos) (PredVP (UsePN (smith_PN)) (ComplSlash (SlashV2a (represent_V2)) (DetCN (DetQuant (PossPron (heRefl_Pron)) (NumSg)) (UseN (company_N)))))) (UseCl (Present) (PPos) (SoDoI (UsePN (jones_PN))))));+lin s_182_2_q = (Question (UseQCl (Present) (PPos) (QuestCl (PredVP (UsePN (jones_PN)) (ComplSlash (SlashV2a (represent_V2)) (DetCN (DetQuant (GenNP (UsePN (jones_PN))) (NumSg)) (UseN (company_N))))))));+lin s_182_3_h = (Sentence (UseCl (Present) (PPos) (PredVP (UsePN (jones_PN)) (ComplSlash (SlashV2a (represent_V2)) (DetCN (DetQuant (GenNP (UsePN (jones_PN))) (NumSg)) (UseN (company_N)))))));++lin s_183_1_p = s_182_1_p;+lin s_183_2_q = (Question (UseQCl (Present) (PPos) (QuestCl (PredVP (UsePN (jones_PN)) (ComplSlash (SlashV2a (represent_V2)) (DetCN (DetQuant (GenNP (UsePN (smith_PN))) (NumSg)) (UseN (company_N))))))));+lin s_183_3_h = (Sentence (UseCl (Present) (PPos) (PredVP (UsePN (jones_PN)) (ComplSlash (SlashV2a (represent_V2)) (DetCN (DetQuant (GenNP (UsePN (smith_PN))) (NumSg)) (UseN (company_N)))))));++lin s_184_1_p = s_182_1_p;+lin s_184_2_q = (Question (UseQCl (Present) (PPos) (QuestCl (PredVP (UsePN (smith_PN)) (ComplSlash (SlashV2a (represent_V2)) (DetCN (DetQuant (GenNP (UsePN (jones_PN))) (NumSg)) (UseN (company_N))))))));+lin s_184_3_h = (Sentence (UseCl (Present) (PPos) (PredVP (UsePN (smith_PN)) (ComplSlash (SlashV2a (represent_V2)) (DetCN (DetQuant (GenNP (UsePN (jones_PN))) (NumSg)) (UseN (company_N)))))));++lin s_185_1_p = (Sentence (ConjS2 (and_Conj) (UseCl (Past) (PPos) (PredVP (UsePN (smith_PN)) (ComplVSa (claim_VS) (UseCl (PastPerfect) (PPos) (PredVP (UsePron (he_Pron)) (ComplSlash (SlashV2a (cost_V2)) (DetCN (DetQuant (PossPron (heRefl_Pron)) (NumSg)) (UseN (proposal_N))))))))) (UseCl (Past) (PPos) (SoDoI (UsePN (jones_PN))))));+lin s_185_2_q = (Question (UseQCl (Past) (PPos) (QuestCl (PredVP (UsePN (jones_PN)) (ComplVSa (claim_VS) (UseCl (PastPerfect) (PPos) (PredVP (UsePron (he_Pron)) (ComplSlash (SlashV2a (cost_V2)) (DetCN (DetQuant (PossPron (heRefl_Pron)) (NumSg)) (AdjCN (PositA (own_A)) (UseN (proposal_N))))))))))));+lin s_185_3_h = (Sentence (UseCl (Past) (PPos) (PredVP (UsePN (jones_PN)) (ComplVSa (claim_VS) (UseCl (PastPerfect) (PPos) (PredVP (UsePron (he_Pron)) (ComplSlash (SlashV2a (cost_V2)) (DetCN (DetQuant (PossPron (heRefl_Pron)) (NumSg)) (AdjCN (PositA (own_A)) (UseN (proposal_N)))))))))));++lin s_186_1_p = s_185_1_p;+lin s_186_2_q = (Question (UseQCl (Past) (PPos) (QuestCl (PredVP (UsePN (jones_PN)) (ComplVSa (claim_VS) (UseCl (PastPerfect) (PPos) (PredVP (UsePron (he_Pron)) (ComplSlash (SlashV2a (cost_V2)) (DetCN (DetQuant (GenNP (UsePN (smith_PN))) (NumSg)) (UseN (proposal_N)))))))))));+lin s_186_3_h = (Sentence (UseCl (Past) (PPos) (PredVP (UsePN (jones_PN)) (ComplVSa (claim_VS) (UseCl (PastPerfect) (PPos) (PredVP (UsePron (he_Pron)) (ComplSlash (SlashV2a (cost_V2)) (DetCN (DetQuant (GenNP (UsePN (smith_PN))) (NumSg)) (UseN (proposal_N))))))))));++lin s_187_1_p = s_185_1_p;+lin s_187_2_q = (Question (UseQCl (Past) (PPos) (QuestCl (PredVP (UsePN (jones_PN)) (ComplVSa (claim_VS) (UseCl (PastPerfect) (PPos) (PredVP (UsePN (smith_PN)) (ComplSlash (SlashV2a (cost_V2)) (DetCN (DetQuant (GenNP (UsePN (smith_PN))) (NumSg)) (UseN (proposal_N)))))))))));+lin s_187_3_h = (Sentence (UseCl (Past) (PPos) (PredVP (UsePN (jones_PN)) (ComplVSa (claim_VS) (UseCl (PastPerfect) (PPos) (PredVP (UsePN (smith_PN)) (ComplSlash (SlashV2a (cost_V2)) (DetCN (DetQuant (GenNP (UsePN (smith_PN))) (NumSg)) (UseN (proposal_N))))))))));++lin s_188_1_p = s_185_1_p;+lin s_188_2_q = (Question (UseQCl (Past) (PPos) (QuestCl (PredVP (UsePN (jones_PN)) (ComplVSa (claim_VS) (UseCl (PastPerfect) (PPos) (PredVP (UsePN (smith_PN)) (ComplSlash (SlashV2a (cost_V2)) (DetCN (DetQuant (GenNP (UsePN (jones_PN))) (NumSg)) (UseN (proposal_N)))))))))));+lin s_188_3_h = (Sentence (UseCl (Past) (PPos) (PredVP (UsePN (jones_PN)) (ComplVSa (claim_VS) (UseCl (PastPerfect) (PPos) (PredVP (UsePN (smith_PN)) (ComplSlash (SlashV2a (cost_V2)) (DetCN (DetQuant (GenNP (UsePN (jones_PN))) (NumSg)) (UseN (proposal_N))))))))));++lin s_189_1_p = (Sentence (ConjS2 (and_Conj) (UseCl (Present) (PPos) (PredVP (UsePN (john_PN)) (UseComp (CompCN (UseN (man_N)))))) (UseCl (Present) (PPos) (PredVP (UsePN (mary_PN)) (UseComp (CompCN (UseN (woman_N))))))));+lin s_189_2_p = (Sentence (ConjS2 (and_Conj) (UseCl (Present) (PPos) (PredVP (UsePN (john_PN)) (ComplSlash (SlashV2a (represent_V2)) (DetCN (DetQuant (PossPron (heRefl_Pron)) (NumSg)) (UseN (company_N)))))) (UseCl (Present) (PPos) (SoDoI (UsePN (mary_PN))))));+lin s_189_3_q = (Question (UseQCl (Present) (PPos) (QuestCl (PredVP (UsePN (mary_PN)) (ComplSlash (SlashV2a (represent_V2)) (DetCN (DetQuant (PossPron (sheRefl_Pron)) (NumSg)) (AdjCN (PositA (own_A)) (UseN (company_N)))))))));+lin s_189_4_h = (Sentence (UseCl (Present) (PPos) (PredVP (UsePN (mary_PN)) (ComplSlash (SlashV2a (represent_V2)) (DetCN (DetQuant (PossPron (sheRefl_Pron)) (NumSg)) (AdjCN (PositA (own_A)) (UseN (company_N))))))));++lin s_190_1_p = s_189_1_p;+lin s_190_2_p = s_189_2_p;+lin s_190_3_q = (Question (UseQCl (Present) (PPos) (QuestCl (PredVP (UsePN (mary_PN)) (ComplSlash (SlashV2a (represent_V2)) (DetCN (DetQuant (GenNP (UsePN (john_PN))) (NumSg)) (UseN (company_N))))))));+lin s_190_4_h = (Sentence (UseCl (Present) (PPos) (PredVP (UsePN (mary_PN)) (ComplSlash (SlashV2a (represent_V2)) (DetCN (DetQuant (GenNP (UsePN (john_PN))) (NumSg)) (UseN (company_N)))))));++lin s_191_1_p = (Sentence (ConjS2 (comma_and_Conj) (UseCl (Past) (PPos) (PredVP (UsePN (bill_PN)) (ComplSlash (SlashV2S (suggest_to_V2S) (UseCl (Past) (PPos) (PredVP (UsePron (they_Pron)) (ComplVV (shall_VV) (AdvVP (AdvVP (UseV (go8walk_V)) (PrepNP (to_Prep) (DetCN (DetQuant (DefArt) (NumSg)) (UseN (meeting_N))))) (together_Adv)))))) (DetCN (DetQuant (GenNP (UsePN (frank_PN))) (NumSg)) (UseN (boss_N)))))) (UseCl (Past) (PPos) (PredVP (UsePN (carl_PN)) (AdvVP (elliptic_VP) (PrepNP (to_Prep) (DetCN (DetQuant (GenNP (UsePN (alan_PN))) (NumSg)) (UseN (wife_N)))))))));+lin s_191_2_q = (Question (ExtAdvQS (SubjS (if_Subj) (UseCl (Past) (PPos) (ImpersCl (PassVPSlash (SlashV2S (suggest_to_V2S) (UseCl (Past) (PPos) (PredVP (ConjNP2 (and_Conj) (UsePN (bill_PN)) (UsePN (frank_PN))) (ComplVV (shall_VV) (AdvVP (UseV (go8walk_V)) (together_Adv)))))))))) (UseQCl (Past) (PPos) (QuestCl (ImpersCl (PassVPSlash (SlashV2S (suggest_to_V2S) (UseCl (Past) (PPos) (PredVP (ConjNP2 (and_Conj) (UsePN (carl_PN)) (UsePN (alan_PN))) (ComplVV (shall_VV) (AdvVP (UseV (go8walk_V)) (together_Adv))))))))))));+lin s_191_3_h = (Sentence (ExtAdvS (SubjS (if_Subj) (UseCl (Past) (PPos) (ImpersCl (PassVPSlash (SlashV2S (suggest_to_V2S) (UseCl (Past) (PPos) (PredVP (ConjNP2 (and_Conj) (UsePN (bill_PN)) (UsePN (frank_PN))) (ComplVV (shall_VV) (AdvVP (UseV (go8walk_V)) (together_Adv)))))))))) (UseCl (Past) (PPos) (ImpersCl (PassVPSlash (SlashV2S (suggest_to_V2S) (UseCl (Past) (PPos) (PredVP (ConjNP2 (and_Conj) (UsePN (carl_PN)) (UsePN (alan_PN))) (ComplVV (shall_VV) (AdvVP (UseV (go8walk_V)) (together_Adv)))))))))));++lin s_192_1_p = s_191_1_p;+lin s_192_2_q = (Question (ExtAdvQS (SubjS (if_Subj) (UseCl (Past) (PPos) (ImpersCl (PassVPSlash (SlashV2S (suggest_to_V2S) (UseCl (Past) (PPos) (PredVP (ConjNP2 (and_Conj) (UsePN (bill_PN)) (UsePN (frank_PN))) (ComplVV (shall_VV) (AdvVP (UseV (go8walk_V)) (together_Adv)))))))))) (UseQCl (Past) (PPos) (QuestCl (ImpersCl (PassVPSlash (SlashV2S (suggest_to_V2S) (UseCl (Past) (PPos) (PredVP (ConjNP2 (and_Conj) (UsePN (carl_PN)) (DetCN (DetQuant (GenNP (UsePN (alan_PN))) (NumSg)) (UseN (wife_N)))) (ComplVV (shall_VV) (AdvVP (UseV (go8walk_V)) (together_Adv))))))))))));+lin s_192_3_h = (Sentence (ExtAdvS (SubjS (if_Subj) (UseCl (Past) (PPos) (ImpersCl (PassVPSlash (SlashV2S (suggest_to_V2S) (UseCl (Past) (PPos) (PredVP (ConjNP2 (and_Conj) (UsePN (bill_PN)) (UsePN (frank_PN))) (ComplVV (shall_VV) (AdvVP (UseV (go8walk_V)) (together_Adv)))))))))) (UseCl (Past) (PPos) (ImpersCl (PassVPSlash (SlashV2S (suggest_to_V2S) (UseCl (Past) (PPos) (PredVP (ConjNP2 (and_Conj) (UsePN (carl_PN)) (DetCN (DetQuant (GenNP (UsePN (alan_PN))) (NumSg)) (UseN (wife_N)))) (ComplVV (shall_VV) (AdvVP (UseV (go8walk_V)) (together_Adv)))))))))));++lin s_193_1_p = s_191_1_p;+lin s_193_2_q = (Question (ExtAdvQS (SubjS (if_Subj) (UseCl (Past) (PPos) (ImpersCl (PassVPSlash (SlashV2S (suggest_to_V2S) (UseCl (Past) (PPos) (PredVP (ConjNP2 (and_Conj) (UsePN (bill_PN)) (DetCN (DetQuant (GenNP (UsePN (frank_PN))) (NumSg)) (UseN (boss_N)))) (ComplVV (shall_VV) (AdvVP (UseV (go8walk_V)) (together_Adv)))))))))) (UseQCl (Past) (PPos) (QuestCl (ImpersCl (PassVPSlash (SlashV2S (suggest_to_V2S) (UseCl (Past) (PPos) (PredVP (ConjNP2 (and_Conj) (UsePN (carl_PN)) (DetCN (DetQuant (GenNP (UsePN (alan_PN))) (NumSg)) (UseN (wife_N)))) (ComplVV (shall_VV) (AdvVP (UseV (go8walk_V)) (together_Adv))))))))))));+lin s_193_3_h = (Sentence (ExtAdvS (SubjS (if_Subj) (UseCl (Past) (PPos) (ImpersCl (PassVPSlash (SlashV2S (suggest_to_V2S) (UseCl (Past) (PPos) (PredVP (ConjNP2 (and_Conj) (UsePN (bill_PN)) (DetCN (DetQuant (GenNP (UsePN (frank_PN))) (NumSg)) (UseN (boss_N)))) (ComplVV (shall_VV) (AdvVP (UseV (go8walk_V)) (together_Adv)))))))))) (UseCl (Past) (PPos) (ImpersCl (PassVPSlash (SlashV2S (suggest_to_V2S) (UseCl (Past) (PPos) (PredVP (ConjNP2 (and_Conj) (UsePN (carl_PN)) (DetCN (DetQuant (GenNP (UsePN (alan_PN))) (NumSg)) (UseN (wife_N)))) (ComplVV (shall_VV) (AdvVP (UseV (go8walk_V)) (together_Adv)))))))))));++lin s_194_1_p = s_191_1_p;+lin s_194_2_q = (Question (ExtAdvQS (SubjS (if_Subj) (UseCl (Past) (PPos) (ImpersCl (PassVPSlash (SlashV2S (suggest_to_V2S) (UseCl (Past) (PPos) (PredVP (ConjNP2 (and_Conj) (UsePN (bill_PN)) (DetCN (DetQuant (GenNP (UsePN (frank_PN))) (NumSg)) (UseN (boss_N)))) (ComplVV (shall_VV) (AdvVP (UseV (go8walk_V)) (together_Adv)))))))))) (UseQCl (Past) (PPos) (QuestCl (ImpersCl (PassVPSlash (SlashV2S (suggest_to_V2S) (UseCl (Past) (PPos) (PredVP (ConjNP2 (and_Conj) (UsePN (carl_PN)) (UsePN (alan_PN))) (ComplVV (shall_VV) (AdvVP (UseV (go8walk_V)) (together_Adv))))))))))));+lin s_194_3_h = (Sentence (ExtAdvS (SubjS (if_Subj) (UseCl (Past) (PPos) (ImpersCl (PassVPSlash (SlashV2S (suggest_to_V2S) (UseCl (Past) (PPos) (PredVP (ConjNP2 (and_Conj) (UsePN (bill_PN)) (DetCN (DetQuant (GenNP (UsePN (frank_PN))) (NumSg)) (UseN (boss_N)))) (ComplVV (shall_VV) (AdvVP (UseV (go8walk_V)) (together_Adv)))))))))) (UseCl (Past) (PPos) (ImpersCl (PassVPSlash (SlashV2S (suggest_to_V2S) (UseCl (Past) (PPos) (PredVP (ConjNP2 (and_Conj) (UsePN (carl_PN)) (UsePN (alan_PN))) (ComplVV (shall_VV) (AdvVP (UseV (go8walk_V)) (together_Adv)))))))))));++lin s_195_1_p = s_191_1_p;+lin s_195_2_q = (Question (ExtAdvQS (SubjS (if_Subj) (UseCl (Past) (PPos) (ImpersCl (PassVPSlash (SlashV2S (suggest_to_V2S) (UseCl (Past) (PPos) (PredVP (ConjNP3 (and_Conj) (UsePN (bill_PN)) (UsePN (frank_PN)) (DetCN (DetQuant (GenNP (UsePN (frank_PN))) (NumSg)) (UseN (boss_N)))) (ComplVV (shall_VV) (AdvVP (UseV (go8walk_V)) (together_Adv)))))))))) (UseQCl (Past) (PPos) (QuestCl (ImpersCl (PassVPSlash (SlashV2S (suggest_to_V2S) (UseCl (Past) (PPos) (PredVP (ConjNP3 (and_Conj) (UsePN (carl_PN)) (UsePN (alan_PN)) (DetCN (DetQuant (GenNP (UsePN (alan_PN))) (NumSg)) (UseN (wife_N)))) (ComplVV (shall_VV) (AdvVP (UseV (go8walk_V)) (together_Adv))))))))))));+lin s_195_3_h = (Sentence (ExtAdvS (SubjS (if_Subj) (UseCl (Past) (PPos) (ImpersCl (PassVPSlash (SlashV2S (suggest_to_V2S) (UseCl (Past) (PPos) (PredVP (ConjNP3 (and_Conj) (UsePN (bill_PN)) (UsePN (frank_PN)) (DetCN (DetQuant (GenNP (UsePN (frank_PN))) (NumSg)) (UseN (boss_N)))) (ComplVV (shall_VV) (AdvVP (UseV (go8walk_V)) (together_Adv)))))))))) (UseCl (Past) (PPos) (ImpersCl (PassVPSlash (SlashV2S (suggest_to_V2S) (UseCl (Past) (PPos) (PredVP (ConjNP3 (and_Conj) (UsePN (carl_PN)) (UsePN (alan_PN)) (DetCN (DetQuant (GenNP (UsePN (alan_PN))) (NumSg)) (UseN (wife_N)))) (ComplVV (shall_VV) (AdvVP (UseV (go8walk_V)) (together_Adv)))))))))));++lin s_196_1_p = (Sentence (ConjS2 (comma_and_Conj) (UseCl (Past) (PPos) (PredVP (DetCN (DetQuant (IndefArt) (NumSg)) (UseN (lawyer_N))) (ComplSlash (SlashV2a (sign_V2)) (DetCN (every_Det) (UseN (report_N)))))) (UseCl (Past) (PPos) (SoDoI (DetCN (DetQuant (IndefArt) (NumSg)) (UseN (auditor_N)))))));+lin s_196_2_p = (PSentence (that_is_PConj) (UseCl (Past) (PPos) (ExistNP (DetCN (DetQuant (IndefArt) (NumCard (NumNumeral (N_one)))) (RelCN (UseN (lawyer_N)) (UseRCl (Past) (PPos) (RelVP (IdRP) (ComplSlash (SlashV2a (sign_V2)) (PredetNP (all_Predet) (DetCN (DetQuant (DefArt) (NumPl)) (UseN (report_N))))))))))));+lin s_196_3_q = (Question (UseQCl (Past) (PPos) (QuestCl (ExistNP (DetCN (DetQuant (IndefArt) (NumCard (NumNumeral (N_one)))) (RelCN (UseN (auditor_N)) (UseRCl (Past) (PPos) (RelVP (IdRP) (ComplSlash (SlashV2a (sign_V2)) (PredetNP (all_Predet) (DetCN (DetQuant (DefArt) (NumPl)) (UseN (report_N)))))))))))));+lin s_196_4_h = (Sentence (UseCl (Past) (PPos) (ExistNP (DetCN (DetQuant (IndefArt) (NumCard (NumNumeral (N_one)))) (RelCN (UseN (auditor_N)) (UseRCl (Past) (PPos) (RelVP (IdRP) (ComplSlash (SlashV2a (sign_V2)) (PredetNP (all_Predet) (DetCN (DetQuant (DefArt) (NumPl)) (UseN (report_N))))))))))));++lin s_197_1_p = (Sentence (UseCl (Present) (PPos) (PredVP (UsePN (john_PN)) (ComplSlash (SlashV2a (have_V2)) (DetCN (DetQuant (IndefArt) (NumSg)) (AdjCN (PositA (genuine_A)) (UseN (diamond_N))))))));+lin s_197_2_q = (Question (UseQCl (Present) (PPos) (QuestCl (PredVP (UsePN (john_PN)) (ComplSlash (SlashV2a (have_V2)) (DetCN (DetQuant (IndefArt) (NumSg)) (UseN (diamond_N))))))));+lin s_197_3_h = (Sentence (UseCl (Present) (PPos) (PredVP (UsePN (john_PN)) (ComplSlash (SlashV2a (have_V2)) (DetCN (DetQuant (IndefArt) (NumSg)) (UseN (diamond_N)))))));++lin s_198_1_p = (Sentence (UseCl (Present) (PPos) (PredVP (UsePN (john_PN)) (UseComp (CompCN (AdjCN (PositA (former_A)) (UseN (university_student_N))))))));+lin s_198_2_q = (Question (UseQCl (Present) (PPos) (QuestCl (PredVP (UsePN (john_PN)) (UseComp (CompCN (UseN (university_student_N))))))));+lin s_198_3_h = (Sentence (UseCl (Present) (PPos) (PredVP (UsePN (john_PN)) (UseComp (CompCN (UseN (university_student_N)))))));++lin s_199_1_p = (Sentence (UseCl (Present) (PPos) (PredVP (UsePN (john_PN)) (UseComp (CompCN (AdjCN (PositA (successful_A)) (AdjCN (PositA (former_A)) (UseN (university_student_N)))))))));+lin s_199_2_q = (Question (UseQCl (Present) (PPos) (QuestCl (PredVP (UsePN (john_PN)) (UseComp (CompAP (PositA (successful_A))))))));+lin s_199_3_h = (Sentence (UseCl (Present) (PPos) (PredVP (UsePN (john_PN)) (UseComp (CompAP (PositA (successful_A)))))));++lin s_200_1_p = (Sentence (UseCl (Present) (PPos) (PredVP (UsePN (john_PN)) (UseComp (CompCN (AdjCN (PositA (former_A)) (AdjCN (PositA (successful_A)) (UseN (university_student_N)))))))));+lin s_200_2_q = s_199_2_q;+lin s_200_3_h = s_199_3_h;++lin s_201_1_p = s_200_1_p;+lin s_201_2_q = s_198_2_q;+lin s_201_3_h = s_198_3_h;++lin s_202_1_p = (Sentence (UseCl (Present) (PPos) (PredVP (DetCN (every_Det) (UseN (mammal_N))) (UseComp (CompCN (UseN (animal_N)))))));+lin s_202_2_q = (Question (UseQCl (Present) (PPos) (QuestCl (PredVP (DetCN (every_Det) (AdjCN (PositA (fourlegged_A)) (UseN (mammal_N)))) (UseComp (CompCN (AdjCN (PositA (fourlegged_A)) (UseN (animal_N)))))))));+lin s_202_3_h = (Sentence (UseCl (Present) (PPos) (PredVP (DetCN (every_Det) (AdjCN (PositA (fourlegged_A)) (UseN (mammal_N)))) (UseComp (CompCN (AdjCN (PositA (fourlegged_A)) (UseN (animal_N))))))));++lin s_203_1_p = (Sentence (UseCl (Present) (PPos) (PredVP (UsePN (dumbo_PN)) (UseComp (CompCN (AdjCN (PositA (fourlegged_A)) (UseN (animal_N))))))));+lin s_203_2_q = (Question (UseQCl (Present) (PPos) (QuestCl (PredVP (UsePN (dumbo_PN)) (UseComp (CompAP (PositA (fourlegged_A))))))));+lin s_203_3_h = (Sentence (UseCl (Present) (PPos) (PredVP (UsePN (dumbo_PN)) (UseComp (CompAP (PositA (fourlegged_A)))))));++lin s_204_1_p = (Sentence (UseCl (Present) (PPos) (PredVP (UsePN (mickey_PN)) (UseComp (CompCN (AdjCN (PositA (small_A)) (UseN (animal_N))))))));+lin s_204_2_q = (Question (UseQCl (Present) (PPos) (QuestCl (PredVP (UsePN (mickey_PN)) (UseComp (CompCN (AdjCN (PositA (large_A)) (UseN (animal_N)))))))));+lin s_204_3_h = (Sentence (UseCl (Present) (PPos) (PredVP (UsePN (mickey_PN)) (UseComp (CompCN (AdjCN (PositA (large_A)) (UseN (animal_N))))))));++lin s_205_1_p = (Sentence (UseCl (Present) (PPos) (PredVP (UsePN (dumbo_PN)) (UseComp (CompCN (AdjCN (PositA (large_A)) (UseN (animal_N))))))));+lin s_205_2_q = (Question (UseQCl (Present) (PPos) (QuestCl (PredVP (UsePN (dumbo_PN)) (UseComp (CompCN (AdjCN (PositA (small_A)) (UseN (animal_N)))))))));+lin s_205_3_h = (Sentence (UseCl (Present) (PPos) (PredVP (UsePN (dumbo_PN)) (UseComp (CompCN (AdjCN (PositA (small_A)) (UseN (animal_N))))))));++lin s_206_1_p = (Sentence (UseCl (Present) (UncNeg) (PredVP (UsePN (fido_PN)) (UseComp (CompCN (AdjCN (PositA (small_A)) (UseN (animal_N))))))));+lin s_206_2_q = (Question (UseQCl (Present) (PPos) (QuestCl (PredVP (UsePN (fido_PN)) (UseComp (CompCN (AdjCN (PositA (large_A)) (UseN (animal_N)))))))));+lin s_206_3_h = (Sentence (UseCl (Present) (PPos) (PredVP (UsePN (fido_PN)) (UseComp (CompCN (AdjCN (PositA (large_A)) (UseN (animal_N))))))));++lin s_207_1_p = (Sentence (UseCl (Present) (UncNeg) (PredVP (UsePN (fido_PN)) (UseComp (CompCN (AdjCN (PositA (large_A)) (UseN (animal_N))))))));+lin s_207_2_q = (Question (UseQCl (Present) (PPos) (QuestCl (PredVP (UsePN (fido_PN)) (UseComp (CompCN (AdjCN (PositA (small_A)) (UseN (animal_N)))))))));+lin s_207_3_h = (Sentence (UseCl (Present) (PPos) (PredVP (UsePN (fido_PN)) (UseComp (CompCN (AdjCN (PositA (small_A)) (UseN (animal_N))))))));++lin s_208_1_p = s_204_1_p;+lin s_208_2_p = s_205_1_p;+lin s_208_3_q = (Question (UseQCl (Present) (PPos) (QuestCl (PredVP (UsePN (mickey_PN)) (UseComp (CompAP (ComparA (small_A) (UsePN (dumbo_PN)))))))));+lin s_208_4_h = (Sentence (UseCl (Present) (PPos) (PredVP (UsePN (mickey_PN)) (UseComp (CompAP (ComparA (small_A) (UsePN (dumbo_PN))))))));++lin s_209_1_p = s_204_1_p;+lin s_209_2_p = s_205_1_p;+lin s_209_3_q = (Question (UseQCl (Present) (PPos) (QuestCl (PredVP (UsePN (mickey_PN)) (UseComp (CompAP (ComparA (large_A) (UsePN (dumbo_PN)))))))));+lin s_209_4_h = (Sentence (UseCl (Present) (PPos) (PredVP (UsePN (mickey_PN)) (UseComp (CompAP (ComparA (large_A) (UsePN (dumbo_PN))))))));++lin s_210_1_p = (Sentence (UseCl (Present) (PPos) (PredVP (PredetNP (all_Predet) (DetCN (DetQuant (IndefArt) (NumPl)) (UseN (mouse_N)))) (UseComp (CompCN (AdjCN (PositA (small_A)) (UseN (animal_N))))))));+lin s_210_2_p = (Sentence (UseCl (Present) (PPos) (PredVP (UsePN (mickey_PN)) (UseComp (CompCN (AdjCN (PositA (large_A)) (UseN (mouse_N))))))));+lin s_210_3_q = s_204_2_q;+lin s_210_4_h = s_204_3_h;++lin s_211_1_p = (Sentence (UseCl (Present) (PPos) (PredVP (PredetNP (all_Predet) (DetCN (DetQuant (IndefArt) (NumPl)) (UseN (elephant_N)))) (UseComp (CompCN (AdjCN (PositA (large_A)) (UseN (animal_N))))))));+lin s_211_2_p = (Sentence (UseCl (Present) (PPos) (PredVP (UsePN (dumbo_PN)) (UseComp (CompCN (AdjCN (PositA (small_A)) (UseN (elephant_N))))))));+lin s_211_3_q = s_205_2_q;+lin s_211_4_h = s_205_3_h;++lin s_212_1_p = s_210_1_p;+lin s_212_2_p = s_211_1_p;+lin s_212_3_p = s_210_2_p;+lin s_212_4_p = s_211_2_p;+lin s_212_5_q = (Question (UseQCl (Present) (PPos) (QuestCl (PredVP (UsePN (dumbo_PN)) (UseComp (CompAP (ComparA (large_A) (UsePN (mickey_PN)))))))));+lin s_212_6_h = (Sentence (UseCl (Present) (PPos) (PredVP (UsePN (dumbo_PN)) (UseComp (CompAP (ComparA (large_A) (UsePN (mickey_PN))))))));++lin s_213_1_p = s_210_1_p;+lin s_213_2_p = s_210_2_p;+lin s_213_3_q = (Question (UseQCl (Present) (PPos) (QuestCl (PredVP (UsePN (mickey_PN)) (UseComp (CompAP (PositA (small_A))))))));+lin s_213_4_h = (Sentence (UseCl (Present) (PPos) (PredVP (UsePN (mickey_PN)) (UseComp (CompAP (PositA (small_A)))))));++lin s_214_1_p = (Sentence (UseCl (Present) (PPos) (PredVP (PredetNP (all_Predet) (DetCN (DetQuant (IndefArt) (NumPl)) (AdjCN (PositA (legal_A)) (UseN (authority_N))))) (UseComp (CompCN (UseN (law_lecturer_N)))))));+lin s_214_2_p = (Sentence (UseCl (Present) (PPos) (PredVP (PredetNP (all_Predet) (DetCN (DetQuant (IndefArt) (NumPl)) (UseN (law_lecturer_N)))) (UseComp (CompCN (AdjCN (PositA (legal_A)) (UseN (authority_N))))))));+lin s_214_3_q = (Question (UseQCl (Present) (PPos) (QuestCl (PredVP (PredetNP (all_Predet) (DetCN (DetQuant (IndefArt) (NumPl)) (AdjCN (PositA (fat_A)) (AdjCN (PositA (legal_A)) (UseN (authority_N)))))) (UseComp (CompCN (AdjCN (PositA (fat_A)) (UseN (law_lecturer_N)))))))));+lin s_214_4_h = (Sentence (UseCl (Present) (PPos) (PredVP (PredetNP (all_Predet) (DetCN (DetQuant (IndefArt) (NumPl)) (AdjCN (PositA (fat_A)) (AdjCN (PositA (legal_A)) (UseN (authority_N)))))) (UseComp (CompCN (AdjCN (PositA (fat_A)) (UseN (law_lecturer_N))))))));++lin s_215_1_p = s_214_1_p;+lin s_215_2_p = s_214_2_p;+lin s_215_3_q = (Question (UseQCl (Present) (PPos) (QuestCl (PredVP (PredetNP (all_Predet) (DetCN (DetQuant (IndefArt) (NumPl)) (AdjCN (PositA (competent_A)) (AdjCN (PositA (legal_A)) (UseN (authority_N)))))) (UseComp (CompCN (AdjCN (PositA (competent_A)) (UseN (law_lecturer_N)))))))));+lin s_215_4_h = (Sentence (UseCl (Present) (PPos) (PredVP (PredetNP (all_Predet) (DetCN (DetQuant (IndefArt) (NumPl)) (AdjCN (PositA (competent_A)) (AdjCN (PositA (legal_A)) (UseN (authority_N)))))) (UseComp (CompCN (AdjCN (PositA (competent_A)) (UseN (law_lecturer_N))))))));++lin s_216_1_p = (Sentence (UseCl (Present) (PPos) (PredVP (UsePN (john_PN)) (UseComp (CompCN (AdvCN (AdjCN (UseComparA_prefix (fat_A)) (UseN (politician_N))) (PrepNP (than_Prep) (UsePN (bill_PN)))))))));+lin s_216_2_q = (Question (UseQCl (Present) (PPos) (QuestCl (PredVP (UsePN (john_PN)) (UseComp (CompAP (ComparA (fat_A) (UsePN (bill_PN)))))))));+lin s_216_3_h = (Sentence (UseCl (Present) (PPos) (PredVP (UsePN (john_PN)) (UseComp (CompAP (ComparA (fat_A) (UsePN (bill_PN))))))));++lin s_217_1_p = (Sentence (UseCl (Present) (PPos) (PredVP (UsePN (john_PN)) (UseComp (CompCN (AdvCN (AdjCN (UseComparA_prefix (clever_A)) (UseN (politician_N))) (PrepNP (than_Prep) (UsePN (bill_PN)))))))));+lin s_217_2_q = (Question (UseQCl (Present) (PPos) (QuestCl (PredVP (UsePN (john_PN)) (UseComp (CompAP (ComparA (clever_A) (UsePN (bill_PN)))))))));+lin s_217_3_h = (Sentence (UseCl (Present) (PPos) (PredVP (UsePN (john_PN)) (UseComp (CompAP (ComparA (clever_A) (UsePN (bill_PN))))))));++lin s_218_1_p = (Sentence (UseCl (Present) (PPos) (PredVP (UsePN (kim_PN)) (UseComp (CompCN (AdjCN (PositA (clever_A)) (UseN (person_N))))))));+lin s_218_2_q = (Question (UseQCl (Present) (PPos) (QuestCl (PredVP (UsePN (kim_PN)) (UseComp (CompAP (PositA (clever_A))))))));+lin s_218_3_h = (Sentence (UseCl (Present) (PPos) (PredVP (UsePN (kim_PN)) (UseComp (CompAP (PositA (clever_A)))))));++lin s_219_1_p = (Sentence (UseCl (Present) (PPos) (PredVP (UsePN (kim_PN)) (UseComp (CompCN (AdjCN (PositA (clever_A)) (UseN (politician_N))))))));+lin s_219_2_q = s_218_2_q;+lin s_219_3_h = s_218_3_h;++lin s_220_1_p = (Sentence (UseCl (Present) (PPos) (PredVP (DetCN (DetQuant (DefArt) (NumSg)) (UseN (pc6082_N))) (UseComp (CompAP (ComparA (fast_A) (DetCN (DetQuant (DefArt) (NumSg)) (UseN (itelxz_N)))))))));+lin s_220_2_p = (Sentence (UseCl (Present) (PPos) (PredVP (DetCN (DetQuant (DefArt) (NumSg)) (UseN (itelxz_N))) (UseComp (CompAP (PositA (fast_A)))))));+lin s_220_3_q = (Question (UseQCl (Present) (PPos) (QuestCl (PredVP (DetCN (DetQuant (DefArt) (NumSg)) (UseN (pc6082_N))) (UseComp (CompAP (PositA (fast_A))))))));+lin s_220_4_h = (Sentence (UseCl (Present) (PPos) (PredVP (DetCN (DetQuant (DefArt) (NumSg)) (UseN (pc6082_N))) (UseComp (CompAP (PositA (fast_A)))))));++lin s_221_1_p = s_220_1_p;+lin s_221_2_q = s_220_3_q;+lin s_221_3_h = s_220_4_h;++lin s_222_1_p = s_220_1_p;+lin s_222_2_p = s_220_4_h;+lin s_222_3_q = (Question (UseQCl (Present) (PPos) (QuestCl (PredVP (DetCN (DetQuant (DefArt) (NumSg)) (UseN (itelxz_N))) (UseComp (CompAP (PositA (fast_A))))))));+lin s_222_4_h = s_220_2_p;++lin s_223_1_p = s_220_1_p;+lin s_223_2_p = (Sentence (UseCl (Present) (PPos) (PredVP (DetCN (DetQuant (DefArt) (NumSg)) (UseN (pc6082_N))) (UseComp (CompAP (PositA (slow_A)))))));+lin s_223_3_q = s_222_3_q;+lin s_223_4_h = s_220_2_p;++lin s_224_1_p = (Sentence (UseCl (Present) (PPos) (PredVP (DetCN (DetQuant (DefArt) (NumSg)) (UseN (pc6082_N))) (UseComp (CompAP (ComparAsAs (fast_A) (DetCN (DetQuant (DefArt) (NumSg)) (UseN (itelxz_N)))))))));+lin s_224_2_p = s_220_2_p;+lin s_224_3_q = s_220_3_q;+lin s_224_4_h = s_220_4_h;++lin s_225_1_p = s_224_1_p;+lin s_225_2_q = s_220_3_q;+lin s_225_3_h = s_220_4_h;++lin s_226_1_p = s_224_1_p;+lin s_226_2_p = s_220_4_h;+lin s_226_3_q = s_222_3_q;+lin s_226_4_h = s_220_2_p;++lin s_227_1_p = s_224_1_p;+lin s_227_2_p = s_223_2_p;+lin s_227_3_q = s_222_3_q;+lin s_227_4_h = s_220_2_p;++lin s_228_1_p = s_224_1_p;+lin s_228_2_q = (Question (UseQCl (Present) (PPos) (QuestCl (PredVP (DetCN (DetQuant (DefArt) (NumSg)) (UseN (pc6082_N))) (UseComp (CompAP (ComparA (fast_A) (DetCN (DetQuant (DefArt) (NumSg)) (UseN (itelxz_N))))))))));+lin s_228_3_h = s_220_1_p;++lin s_229_1_p = s_224_1_p;+lin s_229_2_q = (Question (UseQCl (Present) (PPos) (QuestCl (PredVP (DetCN (DetQuant (DefArt) (NumSg)) (UseN (pc6082_N))) (UseComp (CompAP (ComparA (slow_A) (DetCN (DetQuant (DefArt) (NumSg)) (UseN (itelxz_N))))))))));+lin s_229_3_h = (Sentence (UseCl (Present) (PPos) (PredVP (DetCN (DetQuant (DefArt) (NumSg)) (UseN (pc6082_N))) (UseComp (CompAP (ComparA (slow_A) (DetCN (DetQuant (DefArt) (NumSg)) (UseN (itelxz_N)))))))));++lin s_230_1_p = (Sentence (UseCl (Past) (PPos) (PredVP (UsePN (itel_PN)) (ComplSlash (SlashV2a (win_V2)) (DetCN (DetQuant (IndefArt) (NumPl)) (AdvCN (AdjCN (UseComparA_prefix (many_A)) (UseN (order_N))) (SubjS (than_Subj) (UseCl (Past) (PPos) (PredVP (UsePN (apcom_PN)) (ComplVV (do_VV) (elliptic_VP)))))))))));+lin s_230_2_q = (Question (UseQCl (Past) (PPos) (QuestCl (PredVP (UsePN (itel_PN)) (ComplSlash (SlashV2a (win_V2)) (DetCN (somePl_Det) (UseN (order_N))))))));+lin s_230_3_h = (Sentence (UseCl (Past) (PPos) (PredVP (UsePN (itel_PN)) (ComplSlash (SlashV2a (win_V2)) (DetCN (somePl_Det) (UseN (order_N)))))));++lin s_231_1_p = s_230_1_p;+lin s_231_2_q = (Question (UseQCl (Past) (PPos) (QuestCl (PredVP (UsePN (apcom_PN)) (ComplSlash (SlashV2a (win_V2)) (DetCN (somePl_Det) (UseN (order_N))))))));+lin s_231_3_h = (Sentence (UseCl (Past) (PPos) (PredVP (UsePN (apcom_PN)) (ComplSlash (SlashV2a (win_V2)) (DetCN (somePl_Det) (UseN (order_N)))))));++lin s_232_1_p = s_230_1_p;+lin s_232_2_p = (Sentence (UseCl (Past) (PPos) (PredVP (UsePN (apcom_PN)) (ComplSlash (SlashV2a (win_V2)) (DetCN (DetQuant (IndefArt) (NumCard (NumNumeral (N_ten)))) (UseN (order_N)))))));+lin s_232_3_q = (Question (UseQCl (Past) (PPos) (QuestCl (PredVP (UsePN (itel_PN)) (ComplSlash (SlashV2a (win_V2)) (PredetNP (at_least_Predet) (DetCN (DetQuant (IndefArt) (NumCard (NumNumeral (N_eleven)))) (UseN (order_N)))))))));+lin s_232_4_h = (Sentence (UseCl (Past) (PPos) (PredVP (UsePN (itel_PN)) (ComplSlash (SlashV2a (win_V2)) (PredetNP (at_least_Predet) (DetCN (DetQuant (IndefArt) (NumCard (NumNumeral (N_eleven)))) (UseN (order_N))))))));++lin s_233_1_p = (Sentence (UseCl (Past) (PPos) (PredVP (UsePN (itel_PN)) (ComplSlash (SlashV2a (win_V2)) (DetCN (DetQuant (IndefArt) (NumPl)) (AdvCN (AdjCN (UseComparA_prefix (many_A)) (UseN (order_N))) (PrepNP (than_Prep) (UsePN (apcom_PN)))))))));+lin s_233_2_q = s_230_2_q;+lin s_233_3_h = s_230_3_h;++lin s_234_1_p = s_233_1_p;+lin s_234_2_q = s_231_2_q;+lin s_234_3_h = s_231_3_h;++lin s_235_1_p = s_233_1_p;+lin s_235_2_p = s_232_2_p;+lin s_235_3_q = s_232_3_q;+lin s_235_4_h = s_232_4_h;++lin s_236_1_p = (Sentence (UseCl (Past) (PPos) (PredVP (UsePN (itel_PN)) (ComplSlash (SlashV2a (win_V2)) (DetCN (DetQuant (IndefArt) (NumPl)) (AdvCN (AdjCN (UseComparA_prefix (many_A)) (UseN (order_N))) (PrepNP (than_Prep) (DetCN (DetQuant (DefArt) (NumSg)) (UseN (apcom_contract_N))))))))));+lin s_236_2_q = (Question (UseQCl (Past) (PPos) (QuestCl (PredVP (UsePN (itel_PN)) (ComplSlash (SlashV2a (win_V2)) (DetCN (DetQuant (DefArt) (NumSg)) (UseN (apcom_contract_N))))))));+lin s_236_3_h = (Sentence (UseCl (Past) (PPos) (PredVP (UsePN (itel_PN)) (ComplSlash (SlashV2a (win_V2)) (DetCN (DetQuant (DefArt) (NumSg)) (UseN (apcom_contract_N)))))));++lin s_237_1_p = s_236_1_p;+lin s_237_2_q = (Question (UseQCl (Past) (PPos) (QuestCl (PredVP (UsePN (itel_PN)) (ComplSlash (SlashV2a (win_V2)) (DetCN (DetQuant (IndefArt) (NumCard (AdNum (more_than_AdN) (NumNumeral (N_one))))) (UseN (order_N))))))));+lin s_237_3_h = (Sentence (UseCl (Past) (PPos) (PredVP (UsePN (itel_PN)) (ComplSlash (SlashV2a (win_V2)) (DetCN (DetQuant (IndefArt) (NumCard (AdNum (more_than_AdN) (NumNumeral (N_one))))) (UseN (order_N)))))));++lin s_238_1_p = (Sentence (UseCl (Past) (PPos) (PredVP (UsePN (itel_PN)) (ComplSlash (SlashV2a (win_V2)) (DetCN (twice_as_many_Det) (AdvCN (UseN (order_N)) (PrepNP (than_Prep) (UsePN (apcom_PN)))))))));+lin s_238_2_p = s_232_2_p;+lin s_238_3_q = (Question (UseQCl (Past) (PPos) (QuestCl (PredVP (UsePN (itel_PN)) (ComplSlash (SlashV2a (win_V2)) (DetCN (DetQuant (IndefArt) (NumCard (NumNumeral (N_twenty)))) (UseN (order_N))))))));+lin s_238_4_h = (Sentence (UseCl (Past) (PPos) (PredVP (UsePN (itel_PN)) (ComplSlash (SlashV2a (win_V2)) (DetCN (DetQuant (IndefArt) (NumCard (NumNumeral (N_twenty)))) (UseN (order_N)))))));++lin s_239_1_p = (Sentence (UseCl (Past) (PPos) (PredVP (UsePN (itel_PN)) (ComplSlash (SlashV2a (win_V2)) (DetCN (DetQuant (IndefArt) (NumPl)) (AdvCN (AdjCN (UseComparA_prefix (many_A)) (UseN (order_N))) (SubjS (than_Subj) (UseCl (Past) (PPos) (PredVP (UsePN (apcom_PN)) (ComplSlash (SlashV2a (lose_V2)) (elliptic_NP_Pl)))))))))));+lin s_239_2_q = s_230_2_q;+lin s_239_3_h = s_230_3_h;++lin s_240_1_p = s_239_1_p;+lin s_240_2_q = (Question (UseQCl (Past) (PPos) (QuestCl (PredVP (UsePN (apcom_PN)) (ComplSlash (SlashV2a (lose_V2)) (DetCN (somePl_Det) (UseN (order_N))))))));+lin s_240_3_h = (Sentence (UseCl (Past) (PPos) (PredVP (UsePN (apcom_PN)) (ComplSlash (SlashV2a (lose_V2)) (DetCN (somePl_Det) (UseN (order_N)))))));++lin s_241_1_p = s_239_1_p;+lin s_241_2_p = (Sentence (UseCl (Past) (PPos) (PredVP (UsePN (apcom_PN)) (ComplSlash (SlashV2a (lose_V2)) (DetCN (DetQuant (IndefArt) (NumCard (NumNumeral (N_ten)))) (UseN (order_N)))))));+lin s_241_3_q = s_232_3_q;+lin s_241_4_h = s_232_4_h;++lin s_242_1_p = (Sentence (UseCl (Present) (PPos) (PredVP (DetCN (DetQuant (DefArt) (NumSg)) (UseN (pc6082_N))) (UseComp (CompAP (ComparA (fast_A) (DetCN (DetQuant (IndefArt) (NumCard (NumNumeral (N_500)))) (UseN (mips_N)))))))));+lin s_242_2_p = (Sentence (UseCl (Present) (PPos) (PredVP (DetCN (DetQuant (DefArt) (NumSg)) (UseN (itelzx_N))) (UseComp (CompAP (ComparA (slow_A) (DetCN (DetQuant (IndefArt) (NumCard (NumNumeral (N_500)))) (UseN (mips_N)))))))));+lin s_242_3_q = (Question (UseQCl (Present) (PPos) (QuestCl (PredVP (DetCN (DetQuant (DefArt) (NumSg)) (UseN (pc6082_N))) (UseComp (CompAP (ComparA (fast_A) (DetCN (DetQuant (DefArt) (NumSg)) (UseN (itelzx_N))))))))));+lin s_242_4_h = (Sentence (UseCl (Present) (PPos) (PredVP (DetCN (DetQuant (DefArt) (NumSg)) (UseN (pc6082_N))) (UseComp (CompAP (ComparA (fast_A) (DetCN (DetQuant (DefArt) (NumSg)) (UseN (itelzx_N)))))))));++lin s_243_1_p = (Sentence (UseCl (Past) (PPos) (PredVP (UsePN (itel_PN)) (ComplSlash (SlashV2a (sell_V2)) (DetCN (DetQuant (IndefArt) (NumCard (NumNumeral (N_3000)))) (AdvCN (AdjCN (UseComparA_prefix (many_A)) (UseN (computer_N))) (PrepNP (than_Prep) (UsePN (apcom_PN)))))))));+lin s_243_2_p = (Sentence (UseCl (Past) (PPos) (PredVP (UsePN (apcom_PN)) (ComplSlash (SlashV2a (sell_V2)) (PredetNP (exactly_Predet) (DetCN (DetQuant (IndefArt) (NumCard (NumNumeral (N_2500)))) (UseN (computer_N))))))));+lin s_243_3_q = (Question (UseQCl (Past) (PPos) (QuestCl (PredVP (UsePN (itel_PN)) (ComplSlash (SlashV2a (sell_V2)) (DetCN (DetQuant (IndefArt) (NumCard (NumNumeral (N_5500)))) (UseN (computer_N))))))));+lin s_243_4_h = (Sentence (UseCl (Past) (PPos) (PredVP (UsePN (itel_PN)) (ComplSlash (SlashV2a (sell_V2)) (DetCN (DetQuant (IndefArt) (NumCard (NumNumeral (N_5500)))) (UseN (computer_N)))))));++lin s_244_1_p = (Sentence (UseCl (Present) (PPos) (PredVP (UsePN (apcom_PN)) (ComplSlash (SlashV2a (have_V2)) (DetCN (DetQuant (IndefArt) (NumSg)) (AdvCN (AdjCN (UseComparA_prefix (important_A)) (UseN (customer_N))) (PrepNP (than_Prep) (UsePN (itel_PN)))))))));+lin s_244_2_q = (Question (UseQCl (Present) (PPos) (QuestCl (PredVP (UsePN (apcom_PN)) (ComplSlash (SlashV2a (have_V2)) (DetCN (DetQuant (IndefArt) (NumSg)) (AdvCN (AdjCN (UseComparA_prefix (important_A)) (UseN (customer_N))) (SubjS (than_Subj) (UseCl (Present) (PPos) (PredVP (UsePN (itel_PN)) (UseComp (CompNP (elliptic_NP_Sg)))))))))))));+lin s_244_3_h = (Sentence (UseCl (Present) (PPos) (PredVP (UsePN (apcom_PN)) (ComplSlash (SlashV2a (have_V2)) (DetCN (DetQuant (IndefArt) (NumSg)) (AdvCN (AdjCN (UseComparA_prefix (important_A)) (UseN (customer_N))) (SubjS (than_Subj) (UseCl (Present) (PPos) (PredVP (UsePN (itel_PN)) (UseComp (CompNP (elliptic_NP_Sg))))))))))));++lin s_245_1_p = (Sentence (UseCl (Present) (PPos) (PredVP (UsePN (apcom_PN)) (AdvVP (ComplSlash (SlashV2a (have_V2)) (DetCN (DetQuant (IndefArt) (NumSg)) (AdjCN (UseComparA_prefix (important_A)) (UseN (customer_N))))) (PrepNP (than_Prep) (UsePN (itel_PN)))))));+lin s_245_2_q = (Question (UseQCl (Present) (PPos) (QuestCl (PredVP (UsePN (apcom_PN)) (AdvVP (ComplSlash (SlashV2a (have_V2)) (DetCN (DetQuant (IndefArt) (NumSg)) (AdjCN (UseComparA_prefix (important_A)) (UseN (customer_N))))) (SubjS (than_Subj) (UseCl (PresentPerfect) (PPos) (PredVP (UsePN (itel_PN)) (elliptic_VP)))))))));+lin s_245_3_h = (Sentence (UseCl (Present) (PPos) (PredVP (UsePN (apcom_PN)) (AdvVP (ComplSlash (SlashV2a (have_V2)) (DetCN (DetQuant (IndefArt) (NumSg)) (AdjCN (UseComparA_prefix (important_A)) (UseN (customer_N))))) (SubjS (than_Subj) (UseCl (PresentPerfect) (PPos) (PredVP (UsePN (itel_PN)) (elliptic_VP))))))));++lin s_246_1_p = (Sentence (UseCl (Present) (PPos) (PredVP (DetCN (DetQuant (DefArt) (NumSg)) (UseN (pc6082_N))) (UseComp (CompAP (ComparA (fast_A) (DetCN (every_Det) (UseN (itel_computer_N)))))))));+lin s_246_2_p = (Sentence (UseCl (Present) (PPos) (PredVP (DetCN (DetQuant (DefArt) (NumSg)) (UseN (itelzx_N))) (UseComp (CompCN (UseN (itel_computer_N)))))));+lin s_246_3_q = s_242_3_q;+lin s_246_4_h = s_242_4_h;++lin s_247_1_p = (Sentence (UseCl (Present) (PPos) (PredVP (DetCN (DetQuant (DefArt) (NumSg)) (UseN (pc6082_N))) (UseComp (CompAP (ComparA (fast_A) (DetCN (someSg_Det) (UseN (itel_computer_N)))))))));+lin s_247_2_p = s_246_2_p;+lin s_247_3_q = s_242_3_q;+lin s_247_4_h = s_242_4_h;++lin s_248_1_p = (Sentence (UseCl (Present) (PPos) (PredVP (DetCN (DetQuant (DefArt) (NumSg)) (UseN (pc6082_N))) (UseComp (CompAP (ComparA (fast_A) (DetCN (anySg_Det) (UseN (itel_computer_N)))))))));+lin s_248_2_p = s_246_2_p;+lin s_248_3_q = s_242_3_q;+lin s_248_4_h = s_242_4_h;++lin s_249_1_p = (Sentence (UseCl (Present) (PPos) (PredVP (DetCN (DetQuant (DefArt) (NumSg)) (UseN (pc6082_N))) (UseComp (CompAP (ComparA (fast_A) (ConjNP2 (and_Conj) (DetCN (DetQuant (DefArt) (NumSg)) (UseN (itelzx_N))) (DetCN (DetQuant (DefArt) (NumSg)) (UseN (itelzy_N))))))))));+lin s_249_2_q = s_242_3_q;+lin s_249_3_h = s_242_4_h;++lin s_250_1_p = (Sentence (UseCl (Present) (PPos) (PredVP (DetCN (DetQuant (DefArt) (NumSg)) (UseN (pc6082_N))) (UseComp (CompAP (ComparA (fast_A) (ConjNP2 (or_Conj) (DetCN (DetQuant (DefArt) (NumSg)) (UseN (itelzx_N))) (DetCN (DetQuant (DefArt) (NumSg)) (UseN (itelzy_N))))))))));+lin s_250_2_q = s_242_3_q;+lin s_250_3_h = s_242_4_h;++lin s_251_1_p = (Sentence (UseCl (Present) (PPos) (PredVP (UsePN (itel_PN)) (AdvVP (ComplSlash (SlashV2a (have_V2)) (DetCN (DetQuant (IndefArt) (NumSg)) (UseN (factory_N)))) (PrepNP (in_Prep) (UsePN (birmingham_PN)))))));+lin s_251_2_q = (Question (UseQCl (Present) (PPos) (QuestCl (PredVP (UsePN (itel_PN)) (AdVVP (currently_AdV) (AdvVP (ComplSlash (SlashV2a (have_V2)) (DetCN (DetQuant (IndefArt) (NumSg)) (UseN (factory_N)))) (PrepNP (in_Prep) (UsePN (birmingham_PN)))))))));+lin s_251_3_h = (Sentence (UseCl (Present) (PPos) (PredVP (UsePN (itel_PN)) (AdVVP (currently_AdV) (AdvVP (ComplSlash (SlashV2a (have_V2)) (DetCN (DetQuant (IndefArt) (NumSg)) (UseN (factory_N)))) (PrepNP (in_Prep) (UsePN (birmingham_PN))))))));++lin s_252_1_p = (Sentence (AdvS (since_1992_Adv) (UseCl (PresentPerfect) (PPos) (PredVP (UsePN (itel_PN)) (UseComp (CompAdv (PrepNP (in_Prep) (UsePN (birmingham_PN)))))))));+lin s_252_2_p = (Sentence (UseCl (Present) (PPos) (ImpersCl (AdVVP (now_AdV) (UseComp (CompAdv (year_1996_Adv)))))));+lin s_252_3_q = (Question (UseQCl (Past) (PPos) (QuestCl (PredVP (UsePN (itel_PN)) (AdvVP (UseComp (CompAdv (PrepNP (in_Prep) (UsePN (birmingham_PN))))) (in_1993_Adv))))));+lin s_252_4_h = (Sentence (UseCl (Past) (PPos) (PredVP (UsePN (itel_PN)) (AdvVP (UseComp (CompAdv (PrepNP (in_Prep) (UsePN (birmingham_PN))))) (in_1993_Adv)))));++lin s_253_1_p = (Sentence (UseCl (PresentPerfect) (PPos) (PredVP (UsePN (itel_PN)) (AdvVP (ComplSlash (SlashV2a (develop_V2)) (DetCN (DetQuant (IndefArt) (NumSg)) (AdjCN (PositA (new_A)) (UseN (editor_N))))) (since_1992_Adv)))));+lin s_253_2_p = s_252_2_p;+lin s_253_3_q = (Question (UseQCl (Past) (PPos) (QuestCl (PredVP (UsePN (itel_PN)) (AdvVP (ComplSlash (SlashV2a (develop_V2)) (DetCN (DetQuant (IndefArt) (NumSg)) (AdjCN (PositA (new_A)) (UseN (editor_N))))) (in_1993_Adv))))));+lin s_253_4_h = (Sentence (UseCl (Past) (PPos) (PredVP (UsePN (itel_PN)) (AdvVP (ComplSlash (SlashV2a (develop_V2)) (DetCN (DetQuant (IndefArt) (NumSg)) (AdjCN (PositA (new_A)) (UseN (editor_N))))) (in_1993_Adv)))));++lin s_254_1_p = (Sentence (UseCl (PresentPerfect) (PPos) (PredVP (UsePN (itel_PN)) (AdvVP (UseV (expand_V)) (since_1992_Adv)))));+lin s_254_2_p = s_252_2_p;+lin s_254_3_q = (Question (UseQCl (Past) (PPos) (QuestCl (PredVP (UsePN (itel_PN)) (AdvVP (UseV (expand_V)) (in_1993_Adv))))));+lin s_254_4_h = (Sentence (UseCl (Past) (PPos) (PredVP (UsePN (itel_PN)) (AdvVP (UseV (expand_V)) (in_1993_Adv)))));++lin s_255_1_p = (Sentence (AdvS (since_1992_Adv) (UseCl (PresentPerfect) (PPos) (PredVP (UsePN (itel_PN)) (ComplSlash (SlashV2a (make8do_V2)) (DetCN (DetQuant (IndefArt) (NumSg)) (UseN (loss_N))))))));+lin s_255_2_p = s_252_2_p;+lin s_255_3_q = (Question (UseQCl (Past) (PPos) (QuestCl (PredVP (UsePN (itel_PN)) (AdvVP (ComplSlash (SlashV2a (make8do_V2)) (DetCN (DetQuant (IndefArt) (NumSg)) (UseN (loss_N)))) (in_1993_Adv))))));+lin s_255_4_h = (Sentence (UseCl (Past) (PPos) (PredVP (UsePN (itel_PN)) (AdvVP (ComplSlash (SlashV2a (make8do_V2)) (DetCN (DetQuant (IndefArt) (NumSg)) (UseN (loss_N)))) (in_1993_Adv)))));++lin s_256_1_p = (Sentence (UseCl (PresentPerfect) (PPos) (PredVP (UsePN (itel_PN)) (AdvVP (ComplSlash (SlashV2a (make8do_V2)) (DetCN (DetQuant (IndefArt) (NumSg)) (UseN (loss_N)))) (since_1992_Adv)))));+lin s_256_2_p = s_252_2_p;+lin s_256_3_q = s_255_3_q;+lin s_256_4_h = s_255_4_h;++lin s_257_1_p = s_256_1_p;+lin s_257_2_p = s_252_2_p;+lin s_257_3_q = s_255_3_q;+lin s_257_4_h = s_255_4_h;++lin s_258_1_p = (Sentence (AdvS (in_march_1993_Adv) (UseCl (Past) (PPos) (PredVP (UsePN (apcom_PN)) (ComplSlash (SlashV2a (found_V2)) (UsePN (itel_PN)))))));+lin s_258_2_q = (Question (UseQCl (Past) (PPos) (QuestCl (PredVP (UsePN (itel_PN)) (AdvVP (UseV (exist_V)) (in_1992_Adv))))));+lin s_258_3_h = (Sentence (UseCl (Past) (PPos) (PredVP (UsePN (itel_PN)) (AdvVP (UseV (exist_V)) (in_1992_Adv)))));++lin s_259_1_p = (Sentence (UseCl (Past) (PPos) (PredVP (DetCN (DetQuant (DefArt) (NumSg)) (UseN (conference_N))) (AdvVP (UseV (start_V)) (on_july_4th_1994_Adv)))));+lin s_259_2_p = (Sentence (UseCl (Past) (PPos) (ImpersCl (ComplSlash (SlashV2a (last_V2)) (DetCN (DetQuant (IndefArt) (NumCard (NumNumeral (N_2)))) (UseN (day_N)))))));+lin s_259_3_q = (Question (UseQCl (Past) (PPos) (QuestCl (PredVP (DetCN (DetQuant (DefArt) (NumSg)) (UseN (conference_N))) (AdvVP (UseComp (CompAdv (over_Adv))) (on_july_8th_1994_Adv))))));+lin s_259_4_h = (Sentence (UseCl (Past) (PPos) (PredVP (DetCN (DetQuant (DefArt) (NumSg)) (UseN (conference_N))) (AdvVP (UseComp (CompAdv (over_Adv))) (on_july_8th_1994_Adv)))));++lin s_260_1_p = (Sentence (AdvS (yesterday_Adv) (UseCl (Past) (PPos) (PredVP (UsePN (apcom_PN)) (ComplSlash (SlashV2a (sign_V2)) (DetCN (DetQuant (DefArt) (NumSg)) (UseN (contract_N))))))));+lin s_260_2_p = (Sentence (UseCl (Present) (PPos) (PredVP (MassNP (UseN (today_N))) (UseComp (CompAdv (saturday_july_14th_Adv))))));+lin s_260_3_q = (Question (UseQCl (Past) (PPos) (QuestCl (PredVP (UsePN (apcom_PN)) (AdvVP (ComplSlash (SlashV2a (sign_V2)) (DetCN (DetQuant (DefArt) (NumSg)) (UseN (contract_N)))) (friday_13th_Adv))))));+lin s_260_4_h = (Sentence (UseCl (Past) (PPos) (PredVP (UsePN (apcom_PN)) (AdvVP (ComplSlash (SlashV2a (sign_V2)) (DetCN (DetQuant (DefArt) (NumSg)) (UseN (contract_N)))) (friday_13th_Adv)))));++lin s_261_1_p = (Sentence (UseCl (Past) (PPos) (PredVP (UsePN (smith_PN)) (AdvVP (UseV (leave_V)) (SubjS (before_Subj) (UseCl (Past) (PPos) (PredVP (UsePN (jones_PN)) (UseV (leave_V)))))))));+lin s_261_2_p = (Sentence (UseCl (Past) (PPos) (PredVP (UsePN (jones_PN)) (AdvVP (UseV (leave_V)) (SubjS (before_Subj) (UseCl (Past) (PPos) (PredVP (UsePN (anderson_PN)) (UseV (leave_V)))))))));+lin s_261_3_q = (Question (UseQCl (Past) (PPos) (QuestCl (PredVP (UsePN (smith_PN)) (AdvVP (UseV (leave_V)) (SubjS (before_Subj) (UseCl (Past) (PPos) (PredVP (UsePN (anderson_PN)) (UseV (leave_V))))))))));+lin s_261_4_h = (Sentence (UseCl (Past) (PPos) (PredVP (UsePN (smith_PN)) (AdvVP (UseV (leave_V)) (SubjS (before_Subj) (UseCl (Past) (PPos) (PredVP (UsePN (anderson_PN)) (UseV (leave_V)))))))));++lin s_262_1_p = (Sentence (UseCl (Past) (PPos) (PredVP (UsePN (smith_PN)) (AdvVP (UseV (leave_V)) (SubjS (after_Subj) (UseCl (Past) (PPos) (PredVP (UsePN (jones_PN)) (UseV (leave_V)))))))));+lin s_262_2_p = (Sentence (UseCl (Past) (PPos) (PredVP (UsePN (jones_PN)) (AdvVP (UseV (leave_V)) (SubjS (after_Subj) (UseCl (Past) (PPos) (PredVP (UsePN (anderson_PN)) (UseV (leave_V)))))))));+lin s_262_3_q = (Question (UseQCl (Past) (PPos) (QuestCl (PredVP (UsePN (smith_PN)) (AdvVP (UseV (leave_V)) (SubjS (after_Subj) (UseCl (Past) (PPos) (PredVP (UsePN (anderson_PN)) (UseV (leave_V))))))))));+lin s_262_4_h = (Sentence (UseCl (Past) (PPos) (PredVP (UsePN (smith_PN)) (AdvVP (UseV (leave_V)) (SubjS (after_Subj) (UseCl (Past) (PPos) (PredVP (UsePN (anderson_PN)) (UseV (leave_V)))))))));++lin s_263_1_p = (Sentence (UseCl (Past) (PPos) (PredVP (UsePN (smith_PN)) (AdvVP (UseComp (CompAP (PositA (present8attending_A)))) (SubjS (after_Subj) (UseCl (Past) (PPos) (PredVP (UsePN (jones_PN)) (UseV (leave_V)))))))));+lin s_263_2_p = (Sentence (UseCl (Past) (PPos) (PredVP (UsePN (jones_PN)) (AdvVP (UseV (leave_V)) (SubjS (after_Subj) (UseCl (Past) (PPos) (PredVP (UsePN (anderson_PN)) (UseComp (CompAP (PositA (present8attending_A)))))))))));+lin s_263_3_q = (Question (UseQCl (Past) (PPos) (QuestCl (PredVP (UsePN (smith_PN)) (AdvVP (UseComp (CompAP (PositA (present8attending_A)))) (SubjS (after_Subj) (UseCl (Past) (PPos) (PredVP (UsePN (anderson_PN)) (UseComp (CompAP (PositA (present8attending_A))))))))))));+lin s_263_4_h = (Sentence (UseCl (Past) (PPos) (PredVP (UsePN (smith_PN)) (AdvVP (UseComp (CompAP (PositA (present8attending_A)))) (SubjS (after_Subj) (UseCl (Past) (PPos) (PredVP (UsePN (anderson_PN)) (UseComp (CompAP (PositA (present8attending_A)))))))))));++lin s_264_1_p = (Sentence (UseCl (Past) (PPos) (PredVP (UsePN (smith_PN)) (UseV (leave_V)))));+lin s_264_2_p = (Sentence (UseCl (Past) (PPos) (PredVP (UsePN (jones_PN)) (UseV (leave_V)))));+lin s_264_3_p = s_261_1_p;+lin s_264_4_q = (Question (UseQCl (Past) (PPos) (QuestCl (PredVP (UsePN (jones_PN)) (AdvVP (UseV (leave_V)) (SubjS (after_Subj) (UseCl (Past) (PPos) (PredVP (UsePN (smith_PN)) (UseV (leave_V))))))))));+lin s_264_5_h = (Sentence (UseCl (Past) (PPos) (PredVP (UsePN (jones_PN)) (AdvVP (UseV (leave_V)) (SubjS (after_Subj) (UseCl (Past) (PPos) (PredVP (UsePN (smith_PN)) (UseV (leave_V)))))))));++lin s_265_1_p = s_264_1_p;+lin s_265_2_p = s_264_2_p;+lin s_265_3_p = s_262_1_p;+lin s_265_4_q = (Question (UseQCl (Past) (PPos) (QuestCl (PredVP (UsePN (jones_PN)) (AdvVP (UseV (leave_V)) (SubjS (before_Subj) (UseCl (Past) (PPos) (PredVP (UsePN (smith_PN)) (UseV (leave_V))))))))));+lin s_265_5_h = (Sentence (UseCl (Past) (PPos) (PredVP (UsePN (jones_PN)) (AdvVP (UseV (leave_V)) (SubjS (before_Subj) (UseCl (Past) (PPos) (PredVP (UsePN (smith_PN)) (UseV (leave_V)))))))));++lin s_266_1_p = s_264_1_p;+lin s_266_2_p = s_264_2_p;+lin s_266_3_p = s_265_5_h;+lin s_266_4_q = (Question (UseQCl (Past) (PPos) (QuestCl (PredVP (UsePN (smith_PN)) (AdvVP (UseV (leave_V)) (SubjS (after_Subj) (UseCl (Past) (PPos) (PredVP (UsePN (jones_PN)) (UseV (leave_V))))))))));+lin s_266_5_h = s_262_1_p;++lin s_267_1_p = (Sentence (UseCl (Past) (PPos) (PredVP (UsePN (jones_PN)) (ComplSlash (SlashV2a (revise_V2)) (DetCN (DetQuant (DefArt) (NumSg)) (UseN (contract_N)))))));+lin s_267_2_p = (Sentence (UseCl (Past) (PPos) (PredVP (UsePN (smith_PN)) (ComplSlash (SlashV2a (revise_V2)) (DetCN (DetQuant (DefArt) (NumSg)) (UseN (contract_N)))))));+lin s_267_3_p = (Sentence (UseCl (Past) (PPos) (PredVP (UsePN (jones_PN)) (AdvVP (ComplSlash (SlashV2a (revise_V2)) (DetCN (DetQuant (DefArt) (NumSg)) (UseN (contract_N)))) (SubjS (before_Subj) (UseCl (Past) (PPos) (PredVP (UsePN (smith_PN)) (ComplVV (do_VV) (elliptic_VP)))))))));+lin s_267_4_q = (Question (UseQCl (Past) (PPos) (QuestCl (PredVP (UsePN (smith_PN)) (AdvVP (ComplSlash (SlashV2a (revise_V2)) (DetCN (DetQuant (DefArt) (NumSg)) (UseN (contract_N)))) (SubjS (after_Subj) (UseCl (Past) (PPos) (PredVP (UsePN (jones_PN)) (ComplVV (do_VV) (elliptic_VP))))))))));+lin s_267_5_h = (Sentence (UseCl (Past) (PPos) (PredVP (UsePN (smith_PN)) (AdvVP (ComplSlash (SlashV2a (revise_V2)) (DetCN (DetQuant (DefArt) (NumSg)) (UseN (contract_N)))) (SubjS (after_Subj) (UseCl (Past) (PPos) (PredVP (UsePN (jones_PN)) (ComplVV (do_VV) (elliptic_VP)))))))));++lin s_268_1_p = s_267_1_p;+lin s_268_2_p = s_267_2_p;+lin s_268_3_p = (Sentence (UseCl (Past) (PPos) (PredVP (UsePN (jones_PN)) (AdvVP (ComplSlash (SlashV2a (revise_V2)) (DetCN (DetQuant (DefArt) (NumSg)) (UseN (contract_N)))) (SubjS (after_Subj) (UseCl (Past) (PPos) (PredVP (UsePN (smith_PN)) (ComplVV (do_VV) (elliptic_VP)))))))));+lin s_268_4_q = (Question (UseQCl (Past) (PPos) (QuestCl (PredVP (UsePN (smith_PN)) (AdvVP (ComplSlash (SlashV2a (revise_V2)) (DetCN (DetQuant (DefArt) (NumSg)) (UseN (contract_N)))) (SubjS (before_Subj) (UseCl (Past) (PPos) (PredVP (UsePN (jones_PN)) (ComplVV (do_VV) (elliptic_VP))))))))));+lin s_268_5_h = (Sentence (UseCl (Past) (PPos) (PredVP (UsePN (smith_PN)) (AdvVP (ComplSlash (SlashV2a (revise_V2)) (DetCN (DetQuant (DefArt) (NumSg)) (UseN (contract_N)))) (SubjS (before_Subj) (UseCl (Past) (PPos) (PredVP (UsePN (jones_PN)) (ComplVV (do_VV) (elliptic_VP)))))))));++lin s_269_1_p = (Sentence (UseCl (Past) (PPos) (PredVP (UsePN (smith_PN)) (UseV (swim_V)))));+lin s_269_2_p = (Sentence (UseCl (Past) (PPos) (PredVP (UsePN (jones_PN)) (UseV (swim_V)))));+lin s_269_3_p = (Sentence (UseCl (Past) (PPos) (PredVP (UsePN (smith_PN)) (AdvVP (UseV (swim_V)) (SubjS (before_Subj) (UseCl (Past) (PPos) (PredVP (UsePN (jones_PN)) (UseV (swim_V)))))))));+lin s_269_4_q = (Question (UseQCl (Past) (PPos) (QuestCl (PredVP (UsePN (jones_PN)) (AdvVP (UseV (swim_V)) (SubjS (after_Subj) (UseCl (Past) (PPos) (PredVP (UsePN (smith_PN)) (UseV (swim_V))))))))));+lin s_269_5_h = (Sentence (UseCl (Past) (PPos) (PredVP (UsePN (jones_PN)) (AdvVP (UseV (swim_V)) (SubjS (after_Subj) (UseCl (Past) (PPos) (PredVP (UsePN (smith_PN)) (UseV (swim_V)))))))));++lin s_270_1_p = (Sentence (UseCl (Past) (PPos) (PredVP (UsePN (smith_PN)) (AdvVP (UseV (swim_V)) (PrepNP (to_Prep) (DetCN (DetQuant (DefArt) (NumSg)) (UseN (shore_N))))))));+lin s_270_2_p = (Sentence (UseCl (Past) (PPos) (PredVP (UsePN (jones_PN)) (AdvVP (UseV (swim_V)) (PrepNP (to_Prep) (DetCN (DetQuant (DefArt) (NumSg)) (UseN (shore_N))))))));+lin s_270_3_p = (Sentence (UseCl (Past) (PPos) (PredVP (UsePN (smith_PN)) (AdvVP (AdvVP (UseV (swim_V)) (PrepNP (to_Prep) (DetCN (DetQuant (DefArt) (NumSg)) (UseN (shore_N))))) (SubjS (before_Subj) (UseCl (Past) (PPos) (PredVP (UsePN (jones_PN)) (AdvVP (UseV (swim_V)) (PrepNP (to_Prep) (DetCN (DetQuant (DefArt) (NumSg)) (UseN (shore_N))))))))))));+lin s_270_4_q = (Question (UseQCl (Past) (PPos) (QuestCl (PredVP (UsePN (jones_PN)) (AdvVP (AdvVP (UseV (swim_V)) (PrepNP (to_Prep) (DetCN (DetQuant (DefArt) (NumSg)) (UseN (shore_N))))) (SubjS (after_Subj) (UseCl (Past) (PPos) (PredVP (UsePN (smith_PN)) (AdvVP (UseV (swim_V)) (PrepNP (to_Prep) (DetCN (DetQuant (DefArt) (NumSg)) (UseN (shore_N)))))))))))));+lin s_270_5_h = (Sentence (UseCl (Past) (PPos) (PredVP (UsePN (jones_PN)) (AdvVP (AdvVP (UseV (swim_V)) (PrepNP (to_Prep) (DetCN (DetQuant (DefArt) (NumSg)) (UseN (shore_N))))) (SubjS (after_Subj) (UseCl (Past) (PPos) (PredVP (UsePN (smith_PN)) (AdvVP (UseV (swim_V)) (PrepNP (to_Prep) (DetCN (DetQuant (DefArt) (NumSg)) (UseN (shore_N))))))))))));++lin s_271_1_p = (Sentence (UseCl (Past) (PPos) (PredVP (UsePN (smith_PN)) (UseComp (CompAP (PositA (present8attending_A)))))));+lin s_271_2_p = (Sentence (UseCl (Past) (PPos) (PredVP (UsePN (jones_PN)) (UseComp (CompAP (PositA (present8attending_A)))))));+lin s_271_3_p = (Sentence (UseCl (Past) (PPos) (PredVP (UsePN (smith_PN)) (AdvVP (UseComp (CompAP (PositA (present8attending_A)))) (SubjS (after_Subj) (UseCl (Past) (PPos) (PredVP (UsePN (jones_PN)) (UseComp (CompAP (PositA (present8attending_A)))))))))));+lin s_271_4_q = (Question (UseQCl (Past) (PPos) (QuestCl (PredVP (UsePN (jones_PN)) (AdvVP (UseComp (CompAP (PositA (present8attending_A)))) (SubjS (before_Subj) (UseCl (Past) (PPos) (PredVP (UsePN (smith_PN)) (UseComp (CompAP (PositA (present8attending_A))))))))))));+lin s_271_5_h = (Sentence (UseCl (Past) (PPos) (PredVP (UsePN (jones_PN)) (AdvVP (UseComp (CompAP (PositA (present8attending_A)))) (SubjS (before_Subj) (UseCl (Past) (PPos) (PredVP (UsePN (smith_PN)) (UseComp (CompAP (PositA (present8attending_A)))))))))));++lin s_272_1_p = s_271_1_p;+lin s_272_2_p = s_271_2_p;+lin s_272_3_p = (Sentence (UseCl (Past) (PPos) (PredVP (UsePN (smith_PN)) (AdvVP (UseComp (CompAP (PositA (present8attending_A)))) (SubjS (before_Subj) (UseCl (Past) (PPos) (PredVP (UsePN (jones_PN)) (UseComp (CompAP (PositA (present8attending_A)))))))))));+lin s_272_4_q = (Question (UseQCl (Past) (PPos) (QuestCl (PredVP (UsePN (jones_PN)) (AdvVP (UseComp (CompAP (PositA (present8attending_A)))) (SubjS (after_Subj) (UseCl (Past) (PPos) (PredVP (UsePN (smith_PN)) (UseComp (CompAP (PositA (present8attending_A))))))))))));+lin s_272_5_h = (Sentence (UseCl (Past) (PPos) (PredVP (UsePN (jones_PN)) (AdvVP (UseComp (CompAP (PositA (present8attending_A)))) (SubjS (after_Subj) (UseCl (Past) (PPos) (PredVP (UsePN (smith_PN)) (UseComp (CompAP (PositA (present8attending_A)))))))))));++lin s_273_1_p = (Sentence (UseCl (Past) (PPos) (PredVP (UsePN (smith_PN)) (ProgrVPa (ComplSlash (SlashV2a (write_V2)) (DetCN (DetQuant (IndefArt) (NumSg)) (UseN (report_N))))))));+lin s_273_2_p = (Sentence (UseCl (Past) (PPos) (PredVP (UsePN (jones_PN)) (ProgrVPa (ComplSlash (SlashV2a (write_V2)) (DetCN (DetQuant (IndefArt) (NumSg)) (UseN (report_N))))))));+lin s_273_3_p = (Sentence (UseCl (Past) (PPos) (PredVP (UsePN (smith_PN)) (AdvVP (ProgrVPa (ComplSlash (SlashV2a (write_V2)) (DetCN (DetQuant (IndefArt) (NumSg)) (UseN (report_N))))) (SubjS (before_Subj) (UseCl (Past) (PPos) (PredVP (UsePN (jones_PN)) (ProgrVPa (ComplSlash (SlashV2a (write_V2)) (DetCN (DetQuant (IndefArt) (NumSg)) (UseN (report_N))))))))))));+lin s_273_4_q = (Question (UseQCl (Past) (PPos) (QuestCl (PredVP (UsePN (jones_PN)) (AdvVP (ProgrVPa (ComplSlash (SlashV2a (write_V2)) (DetCN (DetQuant (IndefArt) (NumSg)) (UseN (report_N))))) (SubjS (after_Subj) (UseCl (Past) (PPos) (PredVP (UsePN (smith_PN)) (ProgrVPa (ComplSlash (SlashV2a (write_V2)) (DetCN (DetQuant (IndefArt) (NumSg)) (UseN (report_N)))))))))))));+lin s_273_5_h = (Sentence (UseCl (Past) (PPos) (PredVP (UsePN (jones_PN)) (AdvVP (ProgrVPa (ComplSlash (SlashV2a (write_V2)) (DetCN (DetQuant (IndefArt) (NumSg)) (UseN (report_N))))) (SubjS (after_Subj) (UseCl (Past) (PPos) (PredVP (UsePN (smith_PN)) (ProgrVPa (ComplSlash (SlashV2a (write_V2)) (DetCN (DetQuant (IndefArt) (NumSg)) (UseN (report_N))))))))))));++lin s_274_1_p = s_273_1_p;+lin s_274_2_p = s_273_2_p;+lin s_274_3_p = (Sentence (UseCl (Past) (PPos) (PredVP (UsePN (smith_PN)) (AdvVP (ProgrVPa (ComplSlash (SlashV2a (write_V2)) (DetCN (DetQuant (IndefArt) (NumSg)) (UseN (report_N))))) (SubjS (after_Subj) (UseCl (Past) (PPos) (PredVP (UsePN (jones_PN)) (ProgrVPa (ComplSlash (SlashV2a (write_V2)) (DetCN (DetQuant (IndefArt) (NumSg)) (UseN (report_N))))))))))));+lin s_274_4_q = (Question (UseQCl (Past) (PPos) (QuestCl (PredVP (UsePN (jones_PN)) (AdvVP (ProgrVPa (ComplSlash (SlashV2a (write_V2)) (DetCN (DetQuant (IndefArt) (NumSg)) (UseN (report_N))))) (SubjS (before_Subj) (UseCl (Past) (PPos) (PredVP (UsePN (smith_PN)) (ProgrVPa (ComplSlash (SlashV2a (write_V2)) (DetCN (DetQuant (IndefArt) (NumSg)) (UseN (report_N)))))))))))));+lin s_274_5_h = (Sentence (UseCl (Past) (PPos) (PredVP (UsePN (jones_PN)) (AdvVP (ProgrVPa (ComplSlash (SlashV2a (write_V2)) (DetCN (DetQuant (IndefArt) (NumSg)) (UseN (report_N))))) (SubjS (before_Subj) (UseCl (Past) (PPos) (PredVP (UsePN (smith_PN)) (ProgrVPa (ComplSlash (SlashV2a (write_V2)) (DetCN (DetQuant (IndefArt) (NumSg)) (UseN (report_N))))))))))));++lin s_275_1_p = (Sentence (UseCl (Past) (PPos) (PredVP (UsePN (smith_PN)) (AdvVP (ComplSlash (SlashV2a (leave_V2)) (DetCN (DetQuant (DefArt) (NumSg)) (UseN (meeting_N)))) (SubjS (before_Subj) (UseCl (Past) (PPos) (PredVP (UsePron (he_Pron)) (ComplSlash (SlashV2a (lose_V2)) (DetCN (DetQuant (PossPron (heRefl_Pron)) (NumSg)) (UseN (temper_N)))))))))));+lin s_275_2_q = (Question (UseQCl (Past) (PPos) (QuestCl (PredVP (UsePN (smith_PN)) (ComplSlash (SlashV2a (lose_V2)) (DetCN (DetQuant (PossPron (heRefl_Pron)) (NumSg)) (UseN (temper_N))))))));+lin s_275_3_h = (Sentence (UseCl (Past) (PPos) (PredVP (UsePN (smith_PN)) (ComplSlash (SlashV2a (lose_V2)) (DetCN (DetQuant (PossPron (heRefl_Pron)) (NumSg)) (UseN (temper_N)))))));++lin s_276_1_p = (Sentence (ExtAdvS (SubjS (when_Subj) (UseCl (Past) (PPos) (PredVP (UsePron (they_Pron)) (ComplSlash (SlashV2a (open_V2)) (UsePN (the_m25_PN)))))) (UseCl (Past) (PPos) (PredVP (MassNP (UseN (traffic_N))) (UseV (increase_V))))));++lin s_277_1_p = (Sentence (UseCl (Past) (PPos) (PredVP (UsePN (smith_PN)) (AdvVP (AdvVP (UseV (live_V)) (PrepNP (in_Prep) (UsePN (birmingham_PN)))) (in_1991_Adv)))));+lin s_277_2_q = (Question (UseQCl (Past) (PPos) (QuestCl (PredVP (UsePN (smith_PN)) (AdvVP (AdvVP (UseV (live_V)) (PrepNP (in_Prep) (UsePN (birmingham_PN)))) (in_1992_Adv))))));+lin s_277_3_h = (Sentence (UseCl (Past) (PPos) (PredVP (UsePN (smith_PN)) (AdvVP (AdvVP (UseV (live_V)) (PrepNP (in_Prep) (UsePN (birmingham_PN)))) (in_1992_Adv)))));++lin s_278_1_p = (Sentence (UseCl (Past) (PPos) (PredVP (UsePN (smith_PN)) (AdvVP (ComplSlash (SlashV2a (write_V2)) (DetCN (DetQuantOrd (PossPron (heRefl_Pron)) (NumSg) (OrdNumeral (N_one))) (UseN (novel_N)))) (in_1991_Adv)))));+lin s_278_2_q = (Question (UseQCl (Past) (PPos) (QuestCl (PredVP (UsePN (smith_PN)) (AdvVP (ComplSlash (SlashV2a (write_V2)) (DetCN (DetQuantOrd (PossPron (heRefl_Pron)) (NumSg) (OrdNumeral (N_one))) (UseN (novel_N)))) (in_1992_Adv))))));+lin s_278_3_h = (Sentence (UseCl (Past) (PPos) (PredVP (UsePN (smith_PN)) (AdvVP (ComplSlash (SlashV2a (write_V2)) (DetCN (DetQuantOrd (PossPron (heRefl_Pron)) (NumSg) (OrdNumeral (N_one))) (UseN (novel_N)))) (in_1992_Adv)))));++lin s_279_1_p = (Sentence (UseCl (Past) (PPos) (PredVP (UsePN (smith_PN)) (AdvVP (ComplSlash (SlashV2a (write_V2)) (DetCN (DetQuant (IndefArt) (NumSg)) (UseN (novel_N)))) (in_1991_Adv)))));+lin s_279_2_q = (Question (UseQCl (Past) (PPos) (QuestCl (PredVP (UsePN (smith_PN)) (AdvVP (ComplSlash (SlashV2a (write_V2)) (UsePron (it_Pron))) (in_1992_Adv))))));+lin s_279_3_h = (Sentence (UseCl (Past) (PPos) (PredVP (UsePN (smith_PN)) (AdvVP (ComplSlash (SlashV2a (write_V2)) (UsePron (it_Pron))) (in_1992_Adv)))));++lin s_280_1_p = s_279_1_p;+lin s_280_2_q = (Question (UseQCl (Past) (PPos) (QuestCl (PredVP (UsePN (smith_PN)) (AdvVP (ComplSlash (SlashV2a (write_V2)) (DetCN (DetQuant (IndefArt) (NumSg)) (UseN (novel_N)))) (in_1992_Adv))))));+lin s_280_3_h = (Sentence (UseCl (Past) (PPos) (PredVP (UsePN (smith_PN)) (AdvVP (ComplSlash (SlashV2a (write_V2)) (DetCN (DetQuant (IndefArt) (NumSg)) (UseN (novel_N)))) (in_1992_Adv)))));++lin s_281_1_p = (Sentence (UseCl (Past) (PPos) (PredVP (UsePN (smith_PN)) (AdvVP (ProgrVPa (ComplSlash (SlashV2a (run_V2)) (DetCN (DetQuant (IndefArt) (NumSg)) (UseN (business_N))))) (in_1991_Adv)))));+lin s_281_2_q = (Question (UseQCl (Past) (PPos) (QuestCl (PredVP (UsePN (smith_PN)) (AdvVP (ProgrVPa (ComplSlash (SlashV2a (run_V2)) (UsePron (it_Pron)))) (in_1992_Adv))))));+lin s_281_3_h = (Sentence (UseCl (Past) (PPos) (PredVP (UsePN (smith_PN)) (AdvVP (ProgrVPa (ComplSlash (SlashV2a (run_V2)) (UsePron (it_Pron)))) (in_1992_Adv)))));++lin s_282_1_p = (Sentence (UseCl (Past) (PPos) (PredVP (UsePN (smith_PN)) (AdvVP (ComplSlash (SlashV2a (discover_V2)) (DetCN (DetQuant (IndefArt) (NumSg)) (AdjCN (PositA (new_A)) (UseN (species_N))))) (in_1991_Adv)))));+lin s_282_2_q = (Question (UseQCl (Past) (PPos) (QuestCl (PredVP (UsePN (smith_PN)) (AdvVP (ComplSlash (SlashV2a (discover_V2)) (UsePron (it_Pron))) (in_1992_Adv))))));+lin s_282_3_h = (Sentence (UseCl (Past) (PPos) (PredVP (UsePN (smith_PN)) (AdvVP (ComplSlash (SlashV2a (discover_V2)) (UsePron (it_Pron))) (in_1992_Adv)))));++lin s_283_1_p = s_282_1_p;+lin s_283_2_q = (Question (UseQCl (Past) (PPos) (QuestCl (PredVP (UsePN (smith_PN)) (AdvVP (ComplSlash (SlashV2a (discover_V2)) (DetCN (DetQuant (IndefArt) (NumSg)) (AdjCN (PositA (new_A)) (UseN (species_N))))) (in_1992_Adv))))));+lin s_283_3_h = (Sentence (UseCl (Past) (PPos) (PredVP (UsePN (smith_PN)) (AdvVP (ComplSlash (SlashV2a (discover_V2)) (DetCN (DetQuant (IndefArt) (NumSg)) (AdjCN (PositA (new_A)) (UseN (species_N))))) (in_1992_Adv)))));++lin s_284_1_p = (Sentence (UseCl (Past) (PPos) (PredVP (UsePN (smith_PN)) (AdvVP (ComplSlash (SlashV2a (write_V2)) (DetCN (DetQuant (IndefArt) (NumSg)) (UseN (report_N)))) (in_two_hours_Adv)))));+lin s_284_2_p = (Sentence (UseCl (Past) (PPos) (PredVP (UsePN (smith_PN)) (AdvVP (ComplVV (start_VV) (ComplSlash (SlashV2a (write_V2)) (DetCN (DetQuant (DefArt) (NumSg)) (UseN (report_N))))) (at_8_am_Adv)))));+lin s_284_3_q = (Question (UseQCl (PastPerfect) (PPos) (QuestCl (PredVP (UsePN (smith_PN)) (AdvVP (ComplVV (finish_VV) (ComplSlash (SlashV2a (write_V2)) (DetCN (DetQuant (DefArt) (NumSg)) (UseN (report_N))))) (by_11_am_Adv))))));+lin s_284_4_h = (Sentence (UseCl (PastPerfect) (PPos) (PredVP (UsePN (smith_PN)) (AdvVP (ComplVV (finish_VV) (ComplSlash (SlashV2a (write_V2)) (DetCN (DetQuant (DefArt) (NumSg)) (UseN (report_N))))) (by_11_am_Adv)))));++lin s_285_1_p = s_284_1_p;+lin s_285_2_q = (Question (UseQCl (Past) (PPos) (QuestCl (PredVP (UsePN (smith_PN)) (ComplSlash (SlashV2a (spend_V2)) (DetCN (DetQuant (IndefArt) (NumCard (NumNumeral (N_two)))) (AdjCN (PartVP (ComplSlash (SlashV2a (write_V2)) (DetCN (DetQuant (DefArt) (NumSg)) (UseN (report_N))))) (UseN (hour_N)))))))));+lin s_285_3_h = (Sentence (UseCl (Past) (PPos) (PredVP (UsePN (smith_PN)) (ComplSlash (SlashV2a (spend_V2)) (DetCN (DetQuant (IndefArt) (NumCard (NumNumeral (N_two)))) (AdjCN (PartVP (ComplSlash (SlashV2a (write_V2)) (DetCN (DetQuant (DefArt) (NumSg)) (UseN (report_N))))) (UseN (hour_N))))))));++lin s_286_1_p = s_284_1_p;+lin s_286_2_q = (Question (UseQCl (Past) (PPos) (QuestCl (PredVP (UsePN (smith_PN)) (ComplSlash (SlashV2a (spend_V2)) (DetCN (DetQuant (IndefArt) (NumCard (AdNum (more_than_AdN) (NumNumeral (N_two))))) (AdjCN (PartVP (ComplSlash (SlashV2a (write_V2)) (DetCN (DetQuant (DefArt) (NumSg)) (UseN (report_N))))) (UseN (hour_N)))))))));+lin s_286_3_h = (Sentence (UseCl (Past) (PPos) (PredVP (UsePN (smith_PN)) (ComplSlash (SlashV2a (spend_V2)) (DetCN (DetQuant (IndefArt) (NumCard (AdNum (more_than_AdN) (NumNumeral (N_two))))) (AdjCN (PartVP (ComplSlash (SlashV2a (write_V2)) (DetCN (DetQuant (DefArt) (NumSg)) (UseN (report_N))))) (UseN (hour_N))))))));++lin s_287_1_p = s_284_1_p;+lin s_287_2_q = (Question (UseQCl (Past) (PPos) (QuestCl (PredVP (UsePN (smith_PN)) (AdvVP (ComplSlash (SlashV2a (write_V2)) (DetCN (DetQuant (IndefArt) (NumSg)) (UseN (report_N)))) (in_one_hour_Adv))))));+lin s_287_3_h = (Sentence (UseCl (Past) (PPos) (PredVP (UsePN (smith_PN)) (AdvVP (ComplSlash (SlashV2a (write_V2)) (DetCN (DetQuant (IndefArt) (NumSg)) (UseN (report_N)))) (in_one_hour_Adv)))));++lin s_288_1_p = s_284_1_p;+lin s_288_2_q = (Question (UseQCl (Past) (PPos) (QuestCl (PredVP (UsePN (smith_PN)) (ComplSlash (SlashV2a (write_V2)) (DetCN (DetQuant (IndefArt) (NumSg)) (UseN (report_N))))))));+lin s_288_3_h = (Sentence (UseCl (Past) (PPos) (PredVP (UsePN (smith_PN)) (ComplSlash (SlashV2a (write_V2)) (DetCN (DetQuant (IndefArt) (NumSg)) (UseN (report_N)))))));++lin s_289_1_p = (Sentence (UseCl (Past) (PPos) (PredVP (UsePN (smith_PN)) (AdvVP (ComplSlash (SlashV2a (discover_V2)) (DetCN (DetQuant (IndefArt) (NumSg)) (AdjCN (PositA (new_A)) (UseN (species_N))))) (in_two_hours_Adv)))));+lin s_289_2_q = (Question (UseQCl (Past) (PPos) (QuestCl (PredVP (UsePN (smith_PN)) (ComplSlash (SlashV2a (spend_V2)) (DetCN (DetQuant (IndefArt) (NumCard (NumNumeral (N_two)))) (SentCN (UseN (hour_N)) (EmbedPresPart (ComplSlash (SlashV2a (discover_V2)) (DetCN (DetQuant (DefArt) (NumSg)) (AdjCN (PositA (new_A)) (UseN (species_N)))))))))))));+lin s_289_3_h = (Sentence (UseCl (Past) (PPos) (PredVP (UsePN (smith_PN)) (ComplSlash (SlashV2a (spend_V2)) (DetCN (DetQuant (IndefArt) (NumCard (NumNumeral (N_two)))) (SentCN (UseN (hour_N)) (EmbedPresPart (ComplSlash (SlashV2a (discover_V2)) (DetCN (DetQuant (DefArt) (NumSg)) (AdjCN (PositA (new_A)) (UseN (species_N))))))))))));++lin s_290_1_p = s_289_1_p;+lin s_290_2_q = (Question (UseQCl (Past) (PPos) (QuestCl (PredVP (UsePN (smith_PN)) (ComplSlash (SlashV2a (discover_V2)) (DetCN (DetQuant (IndefArt) (NumSg)) (AdjCN (PositA (new_A)) (UseN (species_N)))))))));+lin s_290_3_h = (Sentence (UseCl (Past) (PPos) (PredVP (UsePN (smith_PN)) (ComplSlash (SlashV2a (discover_V2)) (DetCN (DetQuant (IndefArt) (NumSg)) (AdjCN (PositA (new_A)) (UseN (species_N))))))));++lin s_291_1_p = (Sentence (UseCl (Past) (PPos) (PredVP (UsePN (smith_PN)) (AdvVP (ComplSlash (SlashV2a (discover_V2)) (DetCN (many_Det) (AdjCN (PositA (new_A)) (UseN (species_N))))) (in_two_hours_Adv)))));+lin s_291_2_q = (Question (UseQCl (Past) (PPos) (QuestCl (PredVP (UsePN (smith_PN)) (ComplSlash (SlashV2a (spend_V2)) (DetCN (DetQuant (IndefArt) (NumCard (NumNumeral (N_two)))) (SentCN (UseN (hour_N)) (EmbedPresPart (ComplSlash (SlashV2a (discover_V2)) (MassNP (AdjCN (PositA (new_A)) (UseN (species_N)))))))))))));+lin s_291_3_h = (Sentence (UseCl (Past) (PPos) (PredVP (UsePN (smith_PN)) (ComplSlash (SlashV2a (spend_V2)) (DetCN (DetQuant (IndefArt) (NumCard (NumNumeral (N_two)))) (SentCN (UseN (hour_N)) (EmbedPresPart (ComplSlash (SlashV2a (discover_V2)) (MassNP (AdjCN (PositA (new_A)) (UseN (species_N))))))))))));++lin s_292_1_p = (Sentence (UseCl (Past) (PPos) (PredVP (UsePN (smith_PN)) (AdvVP (ProgrVPa (ComplSlash (SlashV2a (run_V2)) (DetCN (DetQuant (PossPron (heRefl_Pron)) (NumSg)) (AdjCN (PositA (own_A)) (UseN (business_N)))))) (PrepNP (in_Prep) (DetCN (DetQuant (IndefArt) (NumCard (NumNumeral (N_two)))) (UseN (year_N))))))));+lin s_292_2_q = (Question (UseQCl (Past) (PPos) (QuestCl (PredVP (UsePN (smith_PN)) (ComplSlash (SlashV2a (spend_V2)) (DetCN (DetQuant (IndefArt) (NumCard (NumNumeral (N_two)))) (SentCN (UseN (year_N)) (EmbedPresPart (ComplSlash (SlashV2a (run_V2)) (DetCN (DetQuant (PossPron (heRefl_Pron)) (NumSg)) (AdjCN (PositA (own_A)) (UseN (business_N)))))))))))));+lin s_292_3_h = (Sentence (UseCl (Past) (PPos) (PredVP (UsePN (smith_PN)) (ComplSlash (SlashV2a (spend_V2)) (DetCN (DetQuant (IndefArt) (NumCard (NumNumeral (N_two)))) (SentCN (UseN (year_N)) (EmbedPresPart (ComplSlash (SlashV2a (run_V2)) (DetCN (DetQuant (PossPron (heRefl_Pron)) (NumSg)) (AdjCN (PositA (own_A)) (UseN (business_N))))))))))));++lin s_293_1_p = s_292_1_p;+lin s_293_2_q = (Question (UseQCl (Past) (PPos) (QuestCl (PredVP (UsePN (smith_PN)) (ComplSlash (SlashV2a (spend_V2)) (DetCN (DetQuant (IndefArt) (NumCard (AdNum (more_than_AdN) (NumNumeral (N_two))))) (SentCN (UseN (year_N)) (EmbedPresPart (ComplSlash (SlashV2a (run_V2)) (DetCN (DetQuant (PossPron (heRefl_Pron)) (NumSg)) (AdjCN (PositA (own_A)) (UseN (business_N)))))))))))));+lin s_293_3_h = (Sentence (UseCl (Past) (PPos) (PredVP (UsePN (smith_PN)) (ComplSlash (SlashV2a (spend_V2)) (DetCN (DetQuant (IndefArt) (NumCard (AdNum (more_than_AdN) (NumNumeral (N_two))))) (SentCN (UseN (year_N)) (EmbedPresPart (ComplSlash (SlashV2a (run_V2)) (DetCN (DetQuant (PossPron (heRefl_Pron)) (NumSg)) (AdjCN (PositA (own_A)) (UseN (business_N))))))))))));++lin s_294_1_p = s_292_1_p;+lin s_294_2_q = (Question (UseQCl (Past) (PPos) (QuestCl (PredVP (UsePN (smith_PN)) (ComplSlash (SlashV2a (run_V2)) (DetCN (DetQuant (PossPron (heRefl_Pron)) (NumSg)) (AdjCN (PositA (own_A)) (UseN (business_N)))))))));+lin s_294_3_h = (Sentence (UseCl (Past) (PPos) (PredVP (UsePN (smith_PN)) (ComplSlash (SlashV2a (run_V2)) (DetCN (DetQuant (PossPron (heRefl_Pron)) (NumSg)) (AdjCN (PositA (own_A)) (UseN (business_N))))))));++lin s_295_1_p = (Sentence (AdvS (PrepNP (in_Prep) (DetCN (DetQuant (IndefArt) (NumCard (NumNumeral (N_two)))) (UseN (year_N)))) (UseCl (Past) (PPos) (PredVP (UsePN (smith_PN)) (ComplSlash (SlashV2a (own_V2)) (DetCN (DetQuant (IndefArt) (NumSg)) (AdvCN (UseN (chain_N)) (PrepNP (part_Prep) (DetCN (DetQuant (IndefArt) (NumPl)) (UseN (business_N)))))))))));+lin s_295_2_q = (Question (UseQCl (Past) (PPos) (QuestCl (PredVP (UsePN (smith_PN)) (AdvVP (ComplSlash (SlashV2a (own_V2)) (DetCN (DetQuant (IndefArt) (NumSg)) (AdvCN (UseN (chain_N)) (PrepNP (part_Prep) (MassNP (UseN (business_N))))))) (for_two_years_Adv))))));+lin s_295_3_h = (Sentence (UseCl (Past) (PPos) (PredVP (UsePN (smith_PN)) (AdvVP (ComplSlash (SlashV2a (own_V2)) (DetCN (DetQuant (IndefArt) (NumSg)) (AdvCN (UseN (chain_N)) (PrepNP (part_Prep) (MassNP (UseN (business_N))))))) (for_two_years_Adv)))));++lin s_296_1_p = s_295_1_p;+lin s_296_2_q = (Question (UseQCl (Past) (PPos) (QuestCl (PredVP (UsePN (smith_PN)) (AdvVP (ComplSlash (SlashV2a (own_V2)) (DetCN (DetQuant (IndefArt) (NumSg)) (AdvCN (UseN (chain_N)) (PrepNP (part_Prep) (MassNP (UseN (business_N))))))) (for_more_than_two_years_Adv))))));+lin s_296_3_h = (Sentence (UseCl (Past) (PPos) (PredVP (UsePN (smith_PN)) (AdvVP (ComplSlash (SlashV2a (own_V2)) (DetCN (DetQuant (IndefArt) (NumSg)) (AdvCN (UseN (chain_N)) (PrepNP (part_Prep) (MassNP (UseN (business_N))))))) (for_more_than_two_years_Adv)))));++lin s_297_1_p = s_295_1_p;+lin s_297_2_q = (Question (UseQCl (Past) (PPos) (QuestCl (PredVP (UsePN (smith_PN)) (ComplSlash (SlashV2a (own_V2)) (DetCN (DetQuant (IndefArt) (NumSg)) (AdvCN (UseN (chain_N)) (PrepNP (part_Prep) (MassNP (UseN (business_N)))))))))));+lin s_297_3_h = (Sentence (UseCl (Past) (PPos) (PredVP (UsePN (smith_PN)) (ComplSlash (SlashV2a (own_V2)) (DetCN (DetQuant (IndefArt) (NumSg)) (AdvCN (UseN (chain_N)) (PrepNP (part_Prep) (MassNP (UseN (business_N))))))))));++lin s_298_1_p = (Sentence (UseCl (Past) (PPos) (PredVP (UsePN (smith_PN)) (AdvVP (AdvVP (UseV (live_V)) (PrepNP (in_Prep) (UsePN (birmingham_PN)))) (for_two_years_Adv)))));+lin s_298_2_q = (Question (UseQCl (Past) (PPos) (QuestCl (PredVP (UsePN (smith_PN)) (AdvVP (AdvVP (UseV (live_V)) (PrepNP (in_Prep) (UsePN (birmingham_PN)))) (for_a_year_Adv))))));+lin s_298_3_h = (Sentence (UseCl (Past) (PPos) (PredVP (UsePN (smith_PN)) (AdvVP (AdvVP (UseV (live_V)) (PrepNP (in_Prep) (UsePN (birmingham_PN)))) (for_a_year_Adv)))));++lin s_299_1_p = s_298_1_p;+lin s_299_2_q = (Question (UseQCl (Past) (PPos) (QuestCl (PredVP (UsePN (smith_PN)) (AdvVP (AdvVP (UseV (live_V)) (PrepNP (in_Prep) (UsePN (birmingham_PN)))) (for_exactly_a_year_Adv))))));+lin s_299_3_h = (Sentence (UseCl (Past) (PPos) (PredVP (UsePN (smith_PN)) (AdvVP (AdvVP (UseV (live_V)) (PrepNP (in_Prep) (UsePN (birmingham_PN)))) (for_exactly_a_year_Adv)))));++lin s_300_1_p = s_298_1_p;+lin s_300_2_q = (Question (UseQCl (Past) (PPos) (QuestCl (PredVP (UsePN (smith_PN)) (AdvVP (UseV (live_V)) (PrepNP (in_Prep) (UsePN (birmingham_PN))))))));+lin s_300_3_h = (Sentence (UseCl (Past) (PPos) (PredVP (UsePN (smith_PN)) (AdvVP (UseV (live_V)) (PrepNP (in_Prep) (UsePN (birmingham_PN)))))));++lin s_301_1_p = (Sentence (UseCl (Past) (PPos) (PredVP (UsePN (smith_PN)) (AdvVP (ComplSlash (SlashV2a (run_V2)) (DetCN (DetQuant (PossPron (heRefl_Pron)) (NumSg)) (AdjCN (PositA (own_A)) (UseN (business_N))))) (for_two_years_Adv)))));+lin s_301_2_q = (Question (UseQCl (Past) (PPos) (QuestCl (PredVP (UsePN (smith_PN)) (AdvVP (ComplSlash (SlashV2a (run_V2)) (DetCN (DetQuant (PossPron (heRefl_Pron)) (NumSg)) (AdjCN (PositA (own_A)) (UseN (business_N))))) (for_a_year_Adv))))));+lin s_301_3_h = (Sentence (UseCl (Past) (PPos) (PredVP (UsePN (smith_PN)) (AdvVP (ComplSlash (SlashV2a (run_V2)) (DetCN (DetQuant (PossPron (heRefl_Pron)) (NumSg)) (AdjCN (PositA (own_A)) (UseN (business_N))))) (for_a_year_Adv)))));++lin s_302_1_p = s_301_1_p;+lin s_302_2_q = s_294_2_q;+lin s_302_3_h = s_294_3_h;++lin s_303_1_p = (Sentence (UseCl (Past) (PPos) (PredVP (UsePN (smith_PN)) (AdvVP (ComplSlash (SlashV2a (write_V2)) (DetCN (DetQuant (IndefArt) (NumSg)) (UseN (report_N)))) (for_two_hours_Adv)))));+lin s_303_2_q = (Question (UseQCl (Past) (PPos) (QuestCl (PredVP (UsePN (smith_PN)) (AdvVP (ComplSlash (SlashV2a (write_V2)) (DetCN (DetQuant (IndefArt) (NumSg)) (UseN (report_N)))) (for_an_hour_Adv))))));+lin s_303_3_h = (Sentence (UseCl (Past) (PPos) (PredVP (UsePN (smith_PN)) (AdvVP (ComplSlash (SlashV2a (write_V2)) (DetCN (DetQuant (IndefArt) (NumSg)) (UseN (report_N)))) (for_an_hour_Adv)))));++lin s_304_1_p = s_303_1_p;+lin s_304_2_q = s_288_2_q;+lin s_304_3_h = s_288_3_h;++lin s_305_1_p = (Sentence (UseCl (Past) (PPos) (PredVP (UsePN (smith_PN)) (AdvVP (ComplSlash (SlashV2a (discover_V2)) (DetCN (DetQuant (IndefArt) (NumSg)) (AdjCN (PositA (new_A)) (UseN (species_N))))) (for_an_hour_Adv)))));++lin s_306_1_p = (Sentence (UseCl (Past) (PPos) (PredVP (UsePN (smith_PN)) (AdvVP (ComplSlash (SlashV2a (discover_V2)) (DetCN (DetQuant (IndefArt) (NumPl)) (AdjCN (PositA (new_A)) (UseN (species_N))))) (for_two_years_Adv)))));+lin s_306_2_q = (Question (UseQCl (Past) (PPos) (QuestCl (PredVP (UsePN (smith_PN)) (ComplSlash (SlashV2a (discover_V2)) (DetCN (DetQuant (IndefArt) (NumPl)) (AdjCN (PositA (new_A)) (UseN (species_N)))))))));+lin s_306_3_h = (Sentence (UseCl (Past) (PPos) (PredVP (UsePN (smith_PN)) (ComplSlash (SlashV2a (discover_V2)) (DetCN (DetQuant (IndefArt) (NumPl)) (AdjCN (PositA (new_A)) (UseN (species_N))))))));++lin s_307_1_p = (Sentence (AdvS (in_1994_Adv) (UseCl (Past) (PPos) (PredVP (UsePN (itel_PN)) (AdvVP (ComplSlash (SlashV2a (send_V2)) (DetCN (DetQuant (IndefArt) (NumSg)) (UseN (progress_report_N)))) (every_month_Adv))))));+lin s_307_2_q = (Question (UseQCl (Past) (PPos) (QuestCl (PredVP (UsePN (itel_PN)) (AdvVP (ComplSlash (SlashV2a (send_V2)) (DetCN (DetQuant (IndefArt) (NumSg)) (UseN (progress_report_N)))) (in_july_1994_Adv))))));+lin s_307_3_h = (Sentence (UseCl (Past) (PPos) (PredVP (UsePN (itel_PN)) (AdvVP (ComplSlash (SlashV2a (send_V2)) (DetCN (DetQuant (IndefArt) (NumSg)) (UseN (progress_report_N)))) (in_july_1994_Adv)))));++lin s_308_1_p = (Sentence (UseCl (Past) (PPos) (PredVP (UsePN (smith_PN)) (AdvVP (ComplSlash (SlashV2a (write_to_V2)) (DetCN (DetQuant (IndefArt) (NumSg)) (UseN (representative_N)))) (every_week_Adv)))));+lin s_308_2_q = (Question (UseQCl (Present) (PPos) (QuestCl (ExistNP (DetCN (DetQuant (IndefArt) (NumSg)) (AdvCN (RelCN (UseN (representative_N)) (UseRCl (Past) (PPos) (StrandRelSlash (that_RP) (SlashVP (UsePN (smith_PN)) (SlashV2a (write_to_V2)))))) (every_week_Adv)))))));+lin s_308_3_h = (Sentence (UseCl (Present) (PPos) (ExistNP (DetCN (DetQuant (IndefArt) (NumSg)) (AdvCN (RelCN (UseN (representative_N)) (UseRCl (Past) (PPos) (StrandRelSlash (that_RP) (SlashVP (UsePN (smith_PN)) (SlashV2a (write_to_V2)))))) (every_week_Adv))))));++lin s_309_1_p = (Sentence (UseCl (Past) (PPos) (PredVP (UsePN (smith_PN)) (AdvVP (ComplSlash (SlashV2a (leave_V2)) (DetCN (DetQuant (DefArt) (NumSg)) (UseN (house_N)))) (at_a_quarter_past_five_Adv)))));+lin s_309_2_p = (Sentence (PredVPS (UsePron (she_Pron)) (ConjVPS2 (and_Conj) (Past) (PPos) (ComplSlash (SlashV2a (take_V2)) (DetCN (DetQuant (IndefArt) (NumSg)) (AdvCN (UseN (taxi_N)) (PrepNP (to_Prep) (DetCN (DetQuant (DefArt) (NumSg)) (UseN (station_N))))))) (Past) (PPos) (ComplSlash (SlashV2a (catch_V2)) (DetCN (DetQuantOrd (DefArt) (NumSg) (OrdNumeral (N_one))) (AdvCN (UseN (train_N)) (PrepNP (to_Prep) (UsePN (luxembourg_PN)))))))));++lin s_310_1_p = (Sentence (UseCl (Past) (PPos) (PredVP (UsePN (smith_PN)) (ComplSlash (SlashV2a (lose_V2)) (DetCN (somePl_Det) (UseN (file_N)))))));+lin s_310_2_p = (Sentence (UseCl (Past) (PPos) (PredVP (UsePron (they_Pron)) (AdvVP (PassV2s (destroy_V2)) (SubjS (when_Subj) (UseCl (Past) (PPos) (PredVP (DetCN (DetQuant (PossPron (she_Pron)) (NumSg)) (UseN (hard_disk_N))) (UseV (crash_V)))))))));++lin s_311_1_p = (Sentence (UseCl (PastPerfect) (PPos) (PredVP (UsePN (smith_PN)) (AdvVP (ComplSlash (SlashV2a (leave_V2)) (DetCN (DetQuant (DefArt) (NumSg)) (UseN (house_N)))) (at_a_quarter_past_five_Adv)))));+lin s_311_2_p = (PSentence (then_PConj) (UseCl (Past) (PPos) (PredVP (UsePron (she_Pron)) (ComplSlash (SlashV2a (take_V2)) (DetCN (DetQuant (IndefArt) (NumSg)) (AdvCN (UseN (taxi_N)) (PrepNP (to_Prep) (DetCN (DetQuant (DefArt) (NumSg)) (UseN (station_N))))))))));+lin s_311_3_q = (Question (UseQCl (Past) (PPos) (QuestCl (PredVP (UsePN (smith_PN)) (AdvVP (ComplSlash (SlashV2a (leave_V2)) (DetCN (DetQuant (DefArt) (NumSg)) (UseN (house_N)))) (SubjS (before_Subj) (UseCl (Past) (PPos) (PredVP (UsePron (she_Pron)) (AdvVP (ComplSlash (SlashV2a (take_V2)) (DetCN (DetQuant (IndefArt) (NumSg)) (UseN (taxi_N)))) (PrepNP (to_Prep) (DetCN (DetQuant (DefArt) (NumSg)) (UseN (station_N)))))))))))));+lin s_311_4_h = (Sentence (UseCl (Past) (PPos) (PredVP (UsePN (smith_PN)) (AdvVP (ComplSlash (SlashV2a (leave_V2)) (DetCN (DetQuant (DefArt) (NumSg)) (UseN (house_N)))) (SubjS (before_Subj) (UseCl (Past) (PPos) (PredVP (UsePron (she_Pron)) (AdvVP (ComplSlash (SlashV2a (take_V2)) (DetCN (DetQuant (IndefArt) (NumSg)) (UseN (taxi_N)))) (PrepNP (to_Prep) (DetCN (DetQuant (DefArt) (NumSg)) (UseN (station_N))))))))))));++lin s_312_1_p = (Sentence (UseCl (Present) (PPos) (PredVP (UsePN (itel_PN)) (AdVVP (always_AdV) (AdvVP (ComplSlash (SlashV2a (deliver_V2)) (DetCN (DetQuant (IndefArt) (NumPl)) (UseN (report_N)))) (late_Adv))))));+lin s_312_2_p = (Sentence (AdvS (in_1993_Adv) (UseCl (Past) (PPos) (PredVP (UsePN (itel_PN)) (ComplSlash (SlashV2a (deliver_V2)) (DetCN (DetQuant (IndefArt) (NumPl)) (UseN (report_N))))))));+lin s_312_3_q = (Question (UseQCl (Past) (PPos) (QuestCl (PredVP (UsePN (itel_PN)) (AdvVP (AdvVP (ComplSlash (SlashV2a (deliver_V2)) (DetCN (DetQuant (IndefArt) (NumPl)) (UseN (report_N)))) (late_Adv)) (in_1993_Adv))))));+lin s_312_4_h = (Sentence (UseCl (Past) (PPos) (PredVP (UsePN (itel_PN)) (AdvVP (AdvVP (ComplSlash (SlashV2a (deliver_V2)) (DetCN (DetQuant (IndefArt) (NumPl)) (UseN (report_N)))) (late_Adv)) (in_1993_Adv)))));++lin s_313_1_p = (Sentence (UseCl (Present) (PPos) (PredVP (UsePN (itel_PN)) (AdVVP (never_AdV) (AdvVP (ComplSlash (SlashV2a (deliver_V2)) (DetCN (DetQuant (IndefArt) (NumPl)) (UseN (report_N)))) (late_Adv))))));+lin s_313_2_p = s_312_2_p;+lin s_313_3_q = s_312_3_q;+lin s_313_4_h = s_312_4_h;++lin s_314_1_p = (Sentence (UseCl (Past) (PPos) (PredVP (UsePN (smith_PN)) (AdvVP (ComplSlash (SlashV2a arrive_in_V2) (UsePN (paris_PN))) (on_the_5th_of_may_1995_Adv)))));+lin s_314_2_p = (Sentence (UseCl (Present) (PPos) (PredVP (MassNP (UseN (today_N))) (UseComp (CompAdv (the_15th_of_may_1995_Adv))))));+lin s_314_3_p = (Sentence (UseCl (Present) (PPos) (PredVP (UsePron (she_Pron)) (AdVVP (still_AdV) (UseComp (CompAdv (PrepNP (in_Prep) (UsePN (paris_PN)))))))));+lin s_314_4_q = (Question (UseQCl (Past) (PPos) (QuestCl (PredVP (UsePN (smith_PN)) (AdvVP (UseComp (CompAdv (PrepNP (in_Prep) (UsePN (paris_PN))))) (on_the_7th_of_may_1995_Adv))))));+lin s_314_5_h = (Sentence (UseCl (Past) (PPos) (PredVP (UsePN (smith_PN)) (AdvVP (UseComp (CompAdv (PrepNP (in_Prep) (UsePN (paris_PN))))) (on_the_7th_of_may_1995_Adv)))));++lin s_315_1_p = (Sentence (AdvS (SubjS (when_Subj) (UseCl (Past) (PPos) (PredVP (UsePN (smith_PN)) (ComplSlash (SlashV2a arrive_in_V2) (UsePN (katmandu_PN)))))) (UseCl (PastPerfect) (PPos) (PredVP (UsePron (she_Pron)) (AdvVP (ProgrVPa (UseV (travel_V))) (for_three_days_Adv))))));+lin s_315_2_q = variants{};+lin s_315_3_h = variants{};+lin s_315_3_h_NEW = (Sentence (UseCl (PastPerfect) (PPos) (PredVP (UsePN (smith_PN)) (AdvVP (ProgrVPa (UseV (travel_V))) (PrepNP (on_Prep) (DetCN (DetQuant (DefArt) (NumSg)) (AdvCN (UseN (day_N)) (SubjS (before_Subj) (UseCl (Past) (PPos) (PredVP (UsePron (she_Pron)) (ComplSlash (SlashV2a arrive_in_V2) (UsePN (katmandu_PN)))))))))))));++lin s_316_1_p = (Sentence (PredVPS (UsePN (jones_PN)) (ConjVPS2 (and_Conj) (Past) (PPos) (AdvVP (UseV (graduate_V)) (in_march_Adv)) (PresentPerfect) (PPos) (AdvVP (UseComp (CompAP (PositA (employed_A)))) (ever_since_Adv)))));+lin s_316_2_p = (Sentence (UseCl (PresentPerfect) (PPos) (PredVP (UsePN (jones_PN)) (AdvVP (UseComp (CompAP (PositA (unemployed_A)))) (in_the_past_Adv)))));+lin s_316_3_q = (Question (UseQCl (Past) (PPos) (QuestCl (PredVP (UsePN (jones_PN)) (AdvVP (AdvVP (UseComp (CompAP (PositA (unemployed_A)))) (at_some_time_Adv)) (SubjS (before_Subj) (UseCl (Past) (PPos) (PredVP (UsePron (he_Pron)) (UseV (graduate_V))))))))));+lin s_316_4_h = (Sentence (UseCl (Past) (PPos) (PredVP (UsePN (jones_PN)) (AdvVP (AdvVP (UseComp (CompAP (PositA (unemployed_A)))) (at_some_time_Adv)) (SubjS (before_Subj) (UseCl (Past) (PPos) (PredVP (UsePron (he_Pron)) (UseV (graduate_V)))))))));++lin s_317_1_p = (Sentence (UseCl (PresentPerfect) (PPos) (PredVP (DetCN (every_Det) (UseN (representative_N))) (ComplSlash (SlashV2a (read_V2)) (DetCN (DetQuant (this_Quant) (NumSg)) (UseN (report_N)))))));+lin s_317_2_p = (Sentence (UseCl (PresentPerfect) (PPos) (PredVP (DetCN (DetQuant (no_Quant) (NumCard (NumNumeral (N_two)))) (UseN (representative_N))) (AdvVP (ComplSlash (SlashV2a (read_V2)) (UsePron (it_Pron))) (at_the_same_time_Adv)))));+lin s_317_3_p = (Sentence (UseCl (Past) (PPos) (PredVP (DetCN (DetQuant (no_Quant) (NumSg)) (UseN (representative_N))) (ComplSlash (SlashV2V (take_V2V) (ComplSlash (SlashV2a (read_V2)) (DetCN (DetQuant (DefArt) (NumSg)) (UseN (report_N))))) (DetCN (DetQuant (IndefArt) (NumCard (AdNum (less_than_AdN) (half_a_Card)))) (UseN (day_N)))))));+lin s_317_4_p = (Sentence (UseCl (Present) (PPos) (ExistNP (DetCN (DetQuant (IndefArt) (NumCard (NumNumeral (N_sixteen)))) (UseN (representative_N))))));+lin s_317_5_q = (Question (UseQCl (Past) (PPos) (QuestCl (ImpersCl (ComplSlash (SlashV2V (take_V2V) (ComplSlash (SlashV2a (read_V2)) (DetCN (DetQuant (DefArt) (NumSg)) (UseN (report_N))))) (DetCN (DetQuant (DefArt) (NumPl)) (AdjCN (ComparA (many_A) (DetCN (DetQuant (IndefArt) (NumSg)) (UseN (week_N)))) (UseN (representative_N)))))))));+lin s_317_6_h = (Sentence (UseCl (Past) (PPos) (ImpersCl (ComplSlash (SlashV2V (take_V2V) (ComplSlash (SlashV2a (read_V2)) (DetCN (DetQuant (DefArt) (NumSg)) (UseN (report_N))))) (DetCN (DetQuant (DefArt) (NumPl)) (AdjCN (ComparA (many_A) (DetCN (DetQuant (IndefArt) (NumSg)) (UseN (week_N)))) (UseN (representative_N))))))));++lin s_318_1_p = (Sentence (ExtAdvS (SubjS (while_Subj) (UseCl (Past) (PPos) (PredVP (UsePN (jones_PN)) (ProgrVPa (ComplSlash (SlashV2a (update_V2)) (DetCN (DetQuant (DefArt) (NumSg)) (UseN (program_N)))))))) (PredVPS (UsePN (mary_PN)) (ConjVPS2 (and_Conj) (Past) (PPos) (UseV (come_in_V)) (Past) (PPos) (ComplSlash (Slash3V3 (tell_about_V3) (DetCN (DetQuant (DefArt) (NumSg)) (UseN (board_meeting_N)))) (UsePron (he_Pron)))))));+lin s_318_2_p = (Sentence (UseCl (Past) (PPos) (PredVP (UsePron (she_Pron)) (AdvVP (ComplVV (finish_VV) (elliptic_VP)) (SubjS (before_Subj) (UseCl (Past) (PPos) (PredVP (UsePron (he_Pron)) (ComplVV (do_VV) (elliptic_VP)))))))));+lin s_318_3_q = variants{};+lin s_318_4_h = variants{};++lin s_319_1_p = (Sentence (ExtAdvS (SubjS (before_Subj) (UseCl (Past) (PPos) (PredVP (UsePN (apcom_PN)) (ComplSlash (SlashV2a (buy_V2)) (DetCN (DetQuant (PossPron (itRefl_Pron)) (NumSg)) (AdjCN (PositA (present8current_A)) (UseN (office_building_N)))))))) (UseCl (PastPerfect) (PPos) (ImpersCl (AdvVP (AdvVP (ProgrVPa (ComplSlash (SlashV2a (pay_V2)) (MassNP (UseN (mortgage_interest_N))))) (PrepNP (on_Prep) (DetCN (DetQuant (DefArt) (NumSg)) (AdjCN (PositA (previous_A)) (UseN (one_N)))))) (for_8_years_Adv))))));+lin s_319_2_p = (Sentence (AdvS (SubjS (since_Subj) (UseCl (Past) (PPos) (PredVP (UsePN (apcom_PN)) (ComplSlash (SlashV2a (buy_V2)) (DetCN (DetQuant (PossPron (itRefl_Pron)) (NumSg)) (AdjCN (PositA (present8current_A)) (UseN (office_building_N)))))))) (UseCl (PresentPerfect) (PPos) (ImpersCl (AdvVP (AdvVP (ProgrVPa (ComplSlash (SlashV2a (pay_V2)) (MassNP (UseN (mortgage_interest_N))))) (PrepNP (on_Prep) (UsePron (it_Pron)))) (for_more_than_10_years_Adv))))));+lin s_319_3_q = (Question (UseQCl (PresentPerfect) (PPos) (QuestCl (PredVP (UsePN (apcom_PN)) (AdvVP (ProgrVPa (ComplSlash (SlashV2a (pay_V2)) (MassNP (UseN (mortgage_interest_N))))) (for_a_total_of_15_years_or_more_Adv))))));+lin s_319_4_h = (Sentence (UseCl (PresentPerfect) (PPos) (PredVP (UsePN (apcom_PN)) (AdvVP (ProgrVPa (ComplSlash (SlashV2a (pay_V2)) (MassNP (UseN (mortgage_interest_N))))) (for_a_total_of_15_years_or_more_Adv)))));++lin s_320_1_p = (Sentence (ExtAdvS (SubjS (when_Subj) (UseCl (Past) (PPos) (PredVP (UsePN (jones_PN)) (ComplSlash (SlashV2a (get_V2)) (DetCN (DetQuant (PossPron (heRefl_Pron)) (NumSg)) (AdvCN (UseN (job_N)) (PrepNP (at_Prep) (UsePN (the_cia_PN))))))))) (UseCl (Past) (PPos) (PredVP (UsePron (he_Pron)) (ComplVS (know_VS) (UseCl (Conditional) (PPos) (PredVP (UsePron (he_Pron)) (AdVVP (never_AdV) (PassVPSlash (SlashV2V (allow_V2V) (ComplSlash (SlashV2a (write_V2)) (DetCN (DetQuant (PossPron (heRefl_Pron)) (NumPl)) (UseN (memoir_N))))))))))))));+lin s_320_2_q = variants{};+lin s_320_3_h = variants{};+lin s_320_3_h_NEW = (Sentence (UseCl (Present) (PPos) (ImpersCl (AdvVP (UseComp (CompNP (DetCN (DetQuant (DefArt) (NumSg)) (UseN (case_N))))) (SubjS (that_Subj) (PredVPS (UsePN (jones_PN)) (ConjVPS2 (and_Conj) (Present) (UncNeg) (PassVPSlash (elliptic_VPSlash)) (Future) (PPos) (AdVVP (never_AdV) (PassVPSlash (SlashV2V (allow_V2V) (ComplSlash (SlashV2a (write_V2)) (DetCN (DetQuant (PossPron (heRefl_Pron)) (NumPl)) (UseN (memoir_N))))))))))))));++lin s_321_1_p = (Sentence (UseCl (PresentPerfect) (PPos) (PredVP (UsePN (smith_PN)) (AdvVP (AdvVP (UseComp (CompAdv (PrepNP (to_Prep) (UsePN (florence_PN))))) (twice_Adv)) (in_the_past_Adv)))));+lin s_321_2_p = (Sentence (UseCl (Future) (PPos) (PredVP (UsePN (smith_PN)) (AdvVP (AdvVP (AdvVP (UseV (go8travel_V)) (PrepNP (to_Prep) (UsePN (florence_PN)))) (twice_Adv)) (in_the_coming_year_Adv)))));+lin s_321_3_q = variants{};+lin s_321_4_h = (Sentence (AdvS (two_years_from_now_Adv) (UseCl (FuturePerfect) (PPos) (PredVP (UsePN (smith_PN)) (AdvVP (UseComp (CompAdv (PrepNP (to_Prep) (UsePN (florence_PN))))) (at_least_four_times))))));++lin s_322_1_p = variants{};+lin s_322_1_p_NEW = (Sentence (AdvS (last_week_Adv) (UseCl (Past) (PPos) (PredVP (UsePron (i_Pron)) (AdVVP (already_AdV) (ComplVS (know_VS) (ExtAdvS (SubjS (when_Subj) (ExtAdvS (in_a_months_time_Adv) (UseCl (Conditional) (PPos) (PredVP (UsePN (smith_PN)) (ComplVS (discover_VS) (UseCl (PastPerfect) (PPos) (PredVP (UsePron (she_Pron)) (PassV2 (dupe_V2))))))))) (UseCl (Conditional) (PPos) (PredVP (UsePron (she_Pron)) (UseComp (CompAP (PositA (furious_A)))))))))))));+lin s_322_2_q = variants{};+lin s_322_3_h = (Sentence (UseCl (Future) (PPos) (ImpersCl (AdvVP (UseComp (CompNP (DetCN (DetQuant (DefArt) (NumSg)) (UseN (case_N))))) (SubjS (that_Subj) (ConjS2 (semicolon_and_Conj) (AdvS (in_a_few_weeks_Adv) (UseCl (Future) (PPos) (PredVP (UsePN (smith_PN)) (ComplVS (discover_VS) (UseCl (PresentPerfect) (PPos) (PredVP (UsePron (she_Pron)) (PassV2 (dupe_V2)))))))) (UseCl (Future) (PPos) (PredVP (UsePron (she_Pron)) (UseComp (CompAP (PositA (furious_A))))))))))));++lin s_323_1_p = variants{};+lin s_323_1_p_NEW = (Sentence (UseCl (Present) (PPos) (PredVP (RelNPa (UsePron (no_one_Pron)) (UseRCl (Present) (PPos) (RelVP (IdRP) (AdvVP (ProgrVPa (UseV (gamble_V))) (PositAdvAdj (serious_A)))))) (AdvVP (UseV (stop_V)) (SubjS (until_Subj) (UseCl (Present) (PPos) (PredVP (UsePron (he_Pron)) (UseComp (CompAP (PositA (broke_A)))))))))));+lin s_323_2_p = (Sentence (UseCl (Present) (PPos) (PredVP (UsePron (no_one_Pron)) (ComplVV (can_VV) (AdvVP (UseV (gamble_V)) (SubjS (when_Subj) (UseCl (Present) (PPos) (PredVP (UsePron (he_Pron)) (UseComp (CompAP (PositA (broke_A))))))))))));+lin s_323_3_q = variants{};+lin s_323_4_h = variants{};+lin s_323_4_h_NEW = (Sentence (UseCl (Present) (PPos) (PredVP (RelNPa (UsePron (everyone_Pron)) (UseRCl (Present) (PPos) (RelVP (IdRP) (ComplVV (start_VV) (AdvVP (UseV (gamble_V)) (PositAdvAdj (serious_A))))))) (AdvVP (UseV (stop_V)) (PrepNP (at_Prep) (DetCN (DetQuant (DefArt) (NumSg)) (AdvCN (UseN (moment_N)) (SubjS (when_Subj) (UseCl (Present) (PPos) (PredVP (UsePron (he_Pron)) (UseComp (CompAP (PositA (broke_A))))))))))))));++lin s_324_1_p = (Sentence (UseCl (Present) (PPos) (PredVP (RelNPa (UsePron (no_one_Pron)) (UseRCl (Present) (PPos) (RelVP (IdRP) (ComplVV (start_VV) (AdvVP (UseV (gamble_V)) (PositAdvAdj (serious_A))))))) (AdvVP (UseV (stop_V)) (SubjS (until_Subj) (UseCl (Present) (PPos) (PredVP (UsePron (he_Pron)) (UseComp (CompAP (PositA (broke_A)))))))))));+lin s_324_2_q = variants{};+lin s_324_3_h = (Sentence (UseCl (Present) (PPos) (PredVP (RelNPa (UsePron (everyone_Pron)) (UseRCl (Present) (PPos) (RelVP (IdRP) (ComplVV (start_VV) (AdvVP (UseV (gamble_V)) (PositAdvAdj (serious_A))))))) (AdvVP (UseV (continue_V)) (SubjS (until_Subj) (UseCl (Present) (PPos) (PredVP (UsePron (he_Pron)) (UseComp (CompAP (PositA (broke_A)))))))))));++lin s_325_1_p = (Sentence (UseCl (Present) (PPos) (PredVP (RelNPa (UsePron (nobody_Pron)) (UseRCl (Present) (PPos) (RelVP (IdRP) (UseComp (CompAP (PositA (asleep_A))))))) (AdVVP (ever_AdV) (ComplVS (know_VS) (UseCl (Present) (PPos) (PredVP (UsePron (he_Pron)) (UseComp (CompAP (PositA (asleep_A)))))))))));+lin s_325_2_p = (PSentence (but_PConj) (UseCl (Present) (PPos) (PredVP (DetCN (somePl_Det) (UseN (person_N))) (AdvVP (ComplVS (know_VS) (UseCl (PresentPerfect) (PPos) (PredVP (UsePron (they_Pron)) (UseComp (CompAP (PositA (asleep_A))))))) (SubjS (after_Subj) (UseCl (PresentPerfect) (PPos) (PredVP (UsePron (they_Pron)) (UseComp (CompAP (PositA (asleep_A)))))))))));+lin s_325_3_q = (Question (UseQCl (Present) (PPos) (QuestCl (PredVP (DetCN (somePl_Det) (UseN (person_N))) (ComplVS (discover_VS) (UseCl (PresentPerfect) (PPos) (PredVP (UsePron (they_Pron)) (UseComp (CompAP (PositA (asleep_A)))))))))));+lin s_325_4_h = (Sentence (UseCl (Present) (PPos) (PredVP (DetCN (somePl_Det) (UseN (person_N))) (ComplVS (discover_VS) (UseCl (PresentPerfect) (PPos) (PredVP (UsePron (they_Pron)) (UseComp (CompAP (PositA (asleep_A))))))))));++lin s_326_1_p = (Sentence (UseCl (Past) (PPos) (PredVP (UsePN (itel_PN)) (AdvVP (ComplSlash (SlashV2a (build_V2)) (UsePN (mtalk_PN))) (in_1993_Adv)))));+lin s_326_2_q = (Question (UseQCl (Past) (PPos) (QuestCl (PredVP (UsePN (itel_PN)) (AdvVP (ComplSlash (SlashV2a (finish_V2)) (UsePN (mtalk_PN))) (in_1993_Adv))))));+lin s_326_3_h = (Sentence (UseCl (Past) (PPos) (PredVP (UsePN (itel_PN)) (AdvVP (ComplSlash (SlashV2a (finish_V2)) (UsePN (mtalk_PN))) (in_1993_Adv)))));++lin s_327_1_p = (Sentence (UseCl (Past) (PPos) (PredVP (UsePN (itel_PN)) (AdvVP (ProgrVPa (ComplSlash (SlashV2a (build_V2)) (UsePN (mtalk_PN)))) (in_1993_Adv)))));+lin s_327_2_q = s_326_2_q;+lin s_327_3_h = s_326_3_h;++lin s_328_1_p = (Sentence (UseCl (Past) (PPos) (PredVP (UsePN (itel_PN)) (AdvVP (AdvVP (ComplSlash (SlashV2a (win_V2)) (DetCN (DetQuant (DefArt) (NumSg)) (UseN (contract_N)))) (PrepNP (from_Prep) (UsePN (apcom_PN)))) (in_1993_Adv)))));+lin s_328_2_q = (Question (UseQCl (Past) (PPos) (QuestCl (PredVP (UsePN (itel_PN)) (AdvVP (ComplSlash (SlashV2a (win_V2)) (DetCN (DetQuant (IndefArt) (NumSg)) (UseN (contract_N)))) (in_1993_Adv))))));+lin s_328_3_h = (Sentence (UseCl (Past) (PPos) (PredVP (UsePN (itel_PN)) (AdvVP (ComplSlash (SlashV2a (win_V2)) (DetCN (DetQuant (IndefArt) (NumSg)) (UseN (contract_N)))) (in_1993_Adv)))));++lin s_329_1_p = (Sentence (UseCl (Past) (PPos) (PredVP (UsePN (itel_PN)) (AdvVP (AdvVP (ProgrVPa (ComplSlash (SlashV2a (win_V2)) (DetCN (DetQuant (DefArt) (NumSg)) (UseN (contract_N))))) (PrepNP (from_Prep) (UsePN (apcom_PN)))) (in_1993_Adv)))));+lin s_329_2_q = s_328_2_q;+lin s_329_3_h = s_328_3_h;++lin s_330_1_p = (Sentence (UseCl (Past) (PPos) (PredVP (UsePN (itel_PN)) (AdvVP (ComplSlash (SlashV2a (own_V2)) (UsePN (apcom_PN))) (from_1988_to_1992_Adv)))));+lin s_330_2_q = (Question (UseQCl (Past) (PPos) (QuestCl (PredVP (UsePN (itel_PN)) (AdvVP (ComplSlash (SlashV2a (own_V2)) (UsePN (apcom_PN))) (in_1990_Adv))))));+lin s_330_3_h = (Sentence (UseCl (Past) (PPos) (PredVP (UsePN (itel_PN)) (AdvVP (ComplSlash (SlashV2a (own_V2)) (UsePN (apcom_PN))) (in_1990_Adv)))));++lin s_331_1_p = (Sentence (UseCl (Past) (PPos) (PredVP (ConjNP2 (and_Conj) (UsePN (smith_PN)) (UsePN (jones_PN))) (ComplSlash (SlashV2a (leave_V2)) (DetCN (DetQuant (DefArt) (NumSg)) (UseN (meeting_N)))))));+lin s_331_2_q = (Question (UseQCl (Past) (PPos) (QuestCl (PredVP (UsePN (smith_PN)) (ComplSlash (SlashV2a (leave_V2)) (DetCN (DetQuant (DefArt) (NumSg)) (UseN (meeting_N))))))));+lin s_331_3_h = (Sentence (UseCl (Past) (PPos) (PredVP (UsePN (smith_PN)) (ComplSlash (SlashV2a (leave_V2)) (DetCN (DetQuant (DefArt) (NumSg)) (UseN (meeting_N)))))));++lin s_332_1_p = s_331_1_p;+lin s_332_2_q = (Question (UseQCl (Past) (PPos) (QuestCl (PredVP (UsePN (jones_PN)) (ComplSlash (SlashV2a (leave_V2)) (DetCN (DetQuant (DefArt) (NumSg)) (UseN (meeting_N))))))));+lin s_332_3_h = (Sentence (UseCl (Past) (PPos) (PredVP (UsePN (jones_PN)) (ComplSlash (SlashV2a (leave_V2)) (DetCN (DetQuant (DefArt) (NumSg)) (UseN (meeting_N)))))));++lin s_333_1_p = (Sentence (UseCl (Past) (PPos) (PredVP (ConjNP3 (and_Conj) (UsePN (smith_PN)) (UsePN (anderson_PN)) (UsePN (jones_PN))) (UseV (meet_V)))));+lin s_333_2_q = (Question (UseQCl (Past) (PPos) (QuestCl (ExistNP (DetCN (DetQuant (IndefArt) (NumSg)) (RelCN (ComplN2 group_N2 (DetCN (DetQuant (IndefArt) (NumPl)) (UseN (person_N)))) (UseRCl (Past) (PPos) (RelVP (that_RP) (UseV (meet_V))))))))));+lin s_333_3_h = (Sentence (UseCl (Past) (PPos) (ExistNP (DetCN (DetQuant (IndefArt) (NumSg)) (RelCN (ComplN2 group_N2 (DetCN (DetQuant (IndefArt) (NumPl)) (UseN (person_N)))) (UseRCl (Past) (PPos) (RelVP (that_RP) (UseV (meet_V)))))))));++lin s_334_1_p = (Sentence (UseCl (Past) (PPos) (PredVP (UsePN (smith_PN)) (ComplVS (know_VS) (UseCl (PastPerfect) (PPos) (PredVP (UsePN (itel_PN)) (AdvVP (ComplSlash (SlashV2a (win_V2)) (DetCN (DetQuant (DefArt) (NumSg)) (UseN (contract_N)))) (in_1992_Adv))))))));+lin s_334_2_q = (Question (UseQCl (Past) (PPos) (QuestCl (PredVP (UsePN (itel_PN)) (AdvVP (ComplSlash (SlashV2a (win_V2)) (DetCN (DetQuant (DefArt) (NumSg)) (UseN (contract_N)))) (in_1992_Adv))))));+lin s_334_3_h = (Sentence (UseCl (Past) (PPos) (PredVP (UsePN (itel_PN)) (AdvVP (ComplSlash (SlashV2a (win_V2)) (DetCN (DetQuant (DefArt) (NumSg)) (UseN (contract_N)))) (in_1992_Adv)))));++lin s_335_1_p = (Sentence (UseCl (Past) (PPos) (PredVP (UsePN (smith_PN)) (ComplVS (believe_VS) (UseCl (PastPerfect) (PPos) (PredVP (UsePN (itel_PN)) (AdvVP (ComplSlash (SlashV2a (win_V2)) (DetCN (DetQuant (DefArt) (NumSg)) (UseN (contract_N)))) (in_1992_Adv))))))));+lin s_335_2_q = s_334_2_q;+lin s_335_3_h = s_334_3_h;++lin s_336_1_p = (Sentence (UseCl (Past) (PPos) (PredVP (UsePN (itel_PN)) (AdvVP (ComplVV (manage_VV) (ComplSlash (SlashV2a (win_V2)) (DetCN (DetQuant (DefArt) (NumSg)) (UseN (contract_N))))) (in_1992_Adv)))));+lin s_336_2_q = s_334_2_q;+lin s_336_3_h = s_334_3_h;++lin s_337_1_p = (Sentence (UseCl (Past) (PPos) (PredVP (UsePN (itel_PN)) (AdvVP (ComplVV (try_VV) (ComplSlash (SlashV2a (win_V2)) (DetCN (DetQuant (DefArt) (NumSg)) (UseN (contract_N))))) (in_1992_Adv)))));+lin s_337_2_q = s_334_2_q;+lin s_337_3_h = s_334_3_h;++lin s_338_1_p = (Sentence (UseCl (Present) (PPos) (ImpersCl (UseComp (CompAP (SentAP (PositA (true_A)) (EmbedS (UseCl (Past) (PPos) (PredVP (UsePN (itel_PN)) (AdvVP (ComplSlash (SlashV2a (win_V2)) (DetCN (DetQuant (DefArt) (NumSg)) (UseN (contract_N)))) (in_1992_Adv)))))))))));+lin s_338_2_q = s_334_2_q;+lin s_338_3_h = s_334_3_h;++lin s_339_1_p = (Sentence (UseCl (Present) (PPos) (ImpersCl (UseComp (CompAP (SentAP (PositA (false_A)) (EmbedS (UseCl (Past) (PPos) (PredVP (UsePN (itel_PN)) (AdvVP (ComplSlash (SlashV2a (win_V2)) (DetCN (DetQuant (DefArt) (NumSg)) (UseN (contract_N)))) (in_1992_Adv)))))))))));+lin s_339_2_q = s_334_2_q;+lin s_339_3_h = s_334_3_h;++lin s_340_1_p = (Sentence (UseCl (Past) (PPos) (PredVP (UsePN (smith_PN)) (ComplSlash (SlashV2V (see_V2V) (ComplSlash (SlashV2a (sign_V2)) (DetCN (DetQuant (DefArt) (NumSg)) (UseN (contract_N))))) (UsePN (jones_PN))))));+lin s_340_2_p = (Sentence (ExtAdvS (SubjS (if_Subj) (UseCl (Past) (PPos) (PredVP (UsePN (jones_PN)) (ComplSlash (SlashV2a (sign_V2)) (DetCN (DetQuant (DefArt) (NumSg)) (UseN (contract_N))))))) (UseCl (Past) (PPos) (PredVP (DetCN (DetQuant (PossPron (he_Pron)) (NumSg)) (UseN (heart_N))) (ProgrVPa (UseV (beat_V)))))));+lin s_340_3_q = (Question (UseQCl (Past) (PPos) (QuestCl (PredVP (UsePN (smith_PN)) (ComplSlash (SlashV2V (see_V2V) (UseV (beat_V))) (DetCN (DetQuant (GenNP (UsePN (jones_PN))) (NumSg)) (UseN (heart_N))))))));+lin s_340_4_h = (Sentence (UseCl (Past) (PPos) (PredVP (UsePN (smith_PN)) (ComplSlash (SlashV2V (see_V2V) (UseV (beat_V))) (DetCN (DetQuant (GenNP (UsePN (jones_PN))) (NumSg)) (UseN (heart_N)))))));++lin s_341_1_p = s_340_1_p;+lin s_341_2_p = (Sentence (ExtAdvS (SubjS (when_Subj) (UseCl (Past) (PPos) (PredVP (UsePN (jones_PN)) (ComplSlash (SlashV2a (sign_V2)) (DetCN (DetQuant (DefArt) (NumSg)) (UseN (contract_N))))))) (UseCl (Past) (PPos) (PredVP (DetCN (DetQuant (PossPron (he_Pron)) (NumSg)) (UseN (heart_N))) (ProgrVPa (UseV (beat_V)))))));+lin s_341_3_q = s_340_3_q;+lin s_341_4_h = s_340_4_h;++lin s_342_1_p = s_341_1_p;+lin s_342_2_q = s_081_2_q;+lin s_342_3_h = s_081_3_h;++lin s_343_1_p = s_341_1_p;+lin s_343_2_p = (Sentence (UseCl (Present) (PPos) (PredVP (UsePN (jones_PN)) (UseComp (CompNP (DetCN (DetQuant (DefArt) (NumSg)) (ComplN2 (chairman_N2) (UsePN (itel_PN)))))))));+lin s_343_3_q = (Question (UseQCl (Past) (PPos) (QuestCl (PredVP (UsePN (smith_PN)) (ComplSlash (SlashV2V (see_V2V) (ComplSlash (SlashV2a (sign_V2)) (DetCN (DetQuant (DefArt) (NumSg)) (UseN (contract_N))))) (DetCN (DetQuant (DefArt) (NumSg)) (ComplN2 (chairman_N2) (UsePN (itel_PN)))))))));+lin s_343_4_h = (Sentence (UseCl (Past) (PPos) (PredVP (UsePN (smith_PN)) (ComplSlash (SlashV2V (see_V2V) (ComplSlash (SlashV2a (sign_V2)) (DetCN (DetQuant (DefArt) (NumSg)) (UseN (contract_N))))) (DetCN (DetQuant (DefArt) (NumSg)) (ComplN2 (chairman_N2) (UsePN (itel_PN))))))));++lin s_344_1_p = (Sentence (UseCl (Past) (PPos) (PredVP (UsePN (helen_PN)) (ComplSlash (SlashV2V (see_V2V) (ComplSlash (SlashV2a (answer_V2)) (DetCN (DetQuant (DefArt) (NumSg)) (UseN (phone_N))))) (DetCN (DetQuant (DefArt) (NumSg)) (ComplN2 (chairman_N2) (DetCN (DetQuant (DefArt) (NumSg)) (UseN (department_N)))))))));+lin s_344_2_p = (Sentence (UseCl (Present) (PPos) (PredVP (DetCN (DetQuant (DefArt) (NumSg)) (ComplN2 (chairman_N2) (DetCN (DetQuant (DefArt) (NumSg)) (UseN (department_N))))) (UseComp (CompCN (UseN (person_N)))))));+lin s_344_3_q = (Question (UseQCl (Present) (PPos) (QuestCl (ExistNP (RelNPa (UsePron (anyone_Pron)) (UseRCl (Past) (PPos) (StrandRelSlash (IdRP) (SlashVP (UsePN (helen_PN)) (SlashV2V (see_V2V) (ComplSlash (SlashV2a (answer_V2)) (DetCN (DetQuant (DefArt) (NumSg)) (UseN (phone_N)))))))))))));+lin s_344_4_h = (Sentence (UseCl (Present) (PPos) (ExistNP (RelNPa (UsePron (someone_Pron)) (UseRCl (Past) (PPos) (StrandRelSlash (IdRP) (SlashVP (UsePN (helen_PN)) (SlashV2V (see_V2V) (ComplSlash (SlashV2a (answer_V2)) (DetCN (DetQuant (DefArt) (NumSg)) (UseN (phone_N))))))))))));++lin s_345_1_p = (Sentence (PredVPS (UsePN (smith_PN)) (ConjVPS2 (and_Conj) (Past) (PPos) (ComplSlash (SlashV2V (see_V2V) (ComplSlash (SlashV2a (sign_V2)) (DetCN (DetQuant (DefArt) (NumSg)) (UseN (contract_N))))) (UsePN (jones_PN))) (Past) (PPos) (ComplSlash (SlashV2V (elliptic_V2V) (ComplSlash (SlashV2a (make8do_V2)) (DetCN (DetQuant (IndefArt) (NumSg)) (UseN (copy_N))))) (DetCN (DetQuant (PossPron (heRefl_Pron)) (NumSg)) (UseN (secretary_N)))))));+lin s_345_2_q = (Question (UseQCl (Past) (PPos) (QuestCl (PredVP (UsePN (smith_PN)) (ComplSlash (SlashV2V (see_V2V) (ComplSlash (SlashV2a (sign_V2)) (DetCN (DetQuant (DefArt) (NumSg)) (UseN (contract_N))))) (UsePN (jones_PN)))))));+lin s_345_3_h = s_340_1_p;++lin s_346_1_p = (Sentence (PredVPS (UsePN (smith_PN)) (ConjVPS2 (or_Conj) (Past) (PPos) (ComplSlash (SlashV2V (see_V2V) (ComplSlash (SlashV2a (sign_V2)) (DetCN (DetQuant (DefArt) (NumSg)) (UseN (contract_N))))) (UsePN (jones_PN))) (Past) (PPos) (ComplSlash (SlashV2V (elliptic_V2V) (ComplSlash (SlashV2a (cross_out_V2)) (DetCN (DetQuant (DefArt) (NumSg)) (AdjCN (PositA (crucial_A)) (UseN (clause_N)))))) (elliptic_NP_Sg)))));+lin s_346_2_q = (Question (UseQCl (Past) (PPos) (QuestCl (PredVP (UsePN (smith_PN)) (ComplVPIVV (do_VV) (ConjVPI2 (either7or_DConj) (ComplSlash (SlashV2V (see_V2V) (ComplSlash (SlashV2a (sign_V2)) (DetCN (DetQuant (DefArt) (NumSg)) (UseN (contract_N))))) (UsePN (jones_PN))) (ComplSlash (SlashV2V (see_V2V) (ComplSlash (SlashV2a (cross_out_V2)) (DetCN (DetQuant (DefArt) (NumSg)) (AdjCN (PositA (crucial_A)) (UseN (clause_N)))))) (UsePN (jones_PN)))))))));+lin s_346_3_h = (Sentence (PredVPS (UsePN (smith_PN)) (ConjVPS2 (either7or_DConj) (Past) (PPos) (ComplSlash (SlashV2V (see_V2V) (ComplSlash (SlashV2a (sign_V2)) (DetCN (DetQuant (DefArt) (NumSg)) (UseN (contract_N))))) (UsePN (jones_PN))) (Past) (PPos) (ComplSlash (SlashV2V (see_V2V) (ComplSlash (SlashV2a (cross_out_V2)) (DetCN (DetQuant (DefArt) (NumSg)) (AdjCN (PositA (crucial_A)) (UseN (clause_N)))))) (UsePN (jones_PN))))));++}
@@ -0,0 +1,1581 @@+--# -path=.:alltenses:prelude++concrete FraCaSBankOriginal of FraCaSBank = open Prelude in {++lincat FraCaSPhrase = SS;++-- Sentences++lin s_001_1_p = ss "an Italian became the world's greatest tenor";+lin s_001_2_q = ss "was there an Italian who became the world's greatest tenor";+lin s_001_3_h = ss "there was an Italian who became the world's greatest tenor";++lin s_002_1_p = ss "every Italian man wants to be a great tenor";+lin s_002_2_p = ss "some Italian men are great tenors";+lin s_002_3_q = ss "are there Italian men who want to be a great tenor";+lin s_002_4_h = ss "there are Italian men who want to be a great tenor";++lin s_003_1_p = ss "all Italian men want to be a great tenor";+lin s_003_2_p = ss "some Italian men are great tenors";+lin s_003_3_q = ss "are there Italian men who want to be a great tenor";+lin s_003_4_h = ss "there are Italian men who want to be a great tenor";++lin s_004_1_p = ss "each Italian tenor wants to be great";+lin s_004_2_p = ss "some Italian tenors are great";+lin s_004_3_q = ss "are there Italian tenors who want to be great";+lin s_004_4_h = ss "there are Italian tenors who want to be great";++lin s_005_1_p = ss "the really ambitious tenors are Italian";+lin s_005_2_q = ss "are there really ambitious tenors who are Italian";+lin s_005_3_h = ss "there are really ambitious tenors who are Italian";++lin s_006_1_p = ss "no really great tenors are modest";+lin s_006_2_q = ss "are there really great tenors who are modest";+lin s_006_3_h = ss "there are really great tenors who are modest";++lin s_007_1_p = ss "some great tenors are Swedish";+lin s_007_2_q = ss "are there great tenors who are Swedish";+lin s_007_3_h = ss "there are great tenors who are Swedish";++lin s_008_1_p = ss "many great tenors are German";+lin s_008_2_q = ss "are there great tenors who are German";+lin s_008_3_h = ss "there are great tenors who are German";++lin s_009_1_p = ss "several great tenors are British";+lin s_009_2_q = ss "are there great tenors who are British";+lin s_009_3_h = ss "there are great tenors who are British";++lin s_010_1_p = ss "most great tenors are Italian";+lin s_010_2_q = ss "are there great tenors who are Italian";+lin s_010_3_h = ss "there are great tenors who are Italian";++lin s_011_1_p = ss "a few great tenors sing popular music";+lin s_011_2_p = ss "some great tenors like popular music";+lin s_011_3_q = ss "are there great tenors who sing popular music";+lin s_011_4_h = ss "there are great tenors who sing popular music";++lin s_012_1_p = ss "few great tenors are poor";+lin s_012_2_q = ss "are there great tenors who are poor";+lin s_012_3_h = ss "there are great tenors who are poor";++lin s_013_1_p = ss "both leading tenors are excellent";+lin s_013_2_p = ss "leading tenors who are excellent are indispensable";+lin s_013_3_q = ss "are both leading tenors indispensable";+lin s_013_4_h = ss "both leading tenors are indispensable";++lin s_014_1_p = ss "neither leading tenor comes cheap";+lin s_014_2_p = ss "one of the leading tenors is Pavarotti";+lin s_014_3_q = ss "is Pavarotti a leading tenor who comes cheap";+lin s_014_4_h = ss "Pavarotti is a leading tenor who comes cheap";++lin s_015_1_p = ss "at least three tenors will take part in the concert";+lin s_015_2_q = ss "are there tenors who will take part in the concert";+lin s_015_3_h = ss "there are tenors who will take part in the concert";++lin s_016_1_p = ss "at most two tenors will contribute their fees to charity";+lin s_016_2_q = ss "are there tenors who will contribute their fees to charity";+lin s_016_3_h = ss "there are tenors who will contribute their fees to charity";++lin s_017_1_p = ss "an Irishman won the Nobel prize for literature";+lin s_017_2_q = ss "did an Irishman win a Nobel prize";+lin s_017_3_h = ss "an Irishman won a Nobel prize";++lin s_018_1_p = ss "every European has the right to live in Europe";+lin s_018_2_p = ss "every European is a person";+lin s_018_3_p = ss "every person who has the right to live in Europe can travel freely within Europe";+lin s_018_4_q = ss "can every European travel freely within Europe";+lin s_018_5_h = ss "every European can travel freely within Europe";++lin s_019_1_p = ss "all Europeans have the right to live in Europe";+lin s_019_2_p = ss "every European is a person";+lin s_019_3_p = ss "every person who has the right to live in Europe can travel freely within Europe";+lin s_019_4_q = ss "can all Europeans travel freely within Europe";+lin s_019_5_h = ss "all Europeans can travel freely within Europe";++lin s_020_1_p = ss "each European has the right to live in Europe";+lin s_020_2_p = ss "every European is a person";+lin s_020_3_p = ss "every person who has the right to live in Europe can travel freely within Europe";+lin s_020_4_q = ss "can each European travel freely within Europe";+lin s_020_5_h = ss "each European can travel freely within Europe";++lin s_021_1_p = ss "the residents of member states have the right to live in Europe";+lin s_021_2_p = ss "all residents of member states are individuals";+lin s_021_3_p = ss "every individual who has the right to live in Europe can travel freely within Europe";+lin s_021_4_q = ss "can the residents of member states travel freely within Europe";+lin s_021_5_h = ss "the residents of member states can travel freely within Europe";++lin s_022_1_p = ss "no delegate finished the report on time";+lin s_022_2_q = ss "did no delegate finish the report";+lin s_022_3_h = ss "no delegate finished the report";++lin s_023_1_p = ss "some delegates finished the survey on time";+lin s_023_2_q = ss "did some delegates finish the survey";+lin s_023_3_h = ss "some delegates finished the survey";++lin s_024_1_p = ss "many delegates obtained interesting results from the survey";+lin s_024_2_q = ss "did many delegates obtain results from the survey";+lin s_024_3_h = ss "many delegates obtained results from the survey";++lin s_025_1_p = ss "several delegates got the results published in major national newspapers";+lin s_025_2_q = ss "did several delegates get the results published";+lin s_025_3_h = ss "several delegates got the results published";++lin s_026_1_p = ss "most Europeans are resident in Europe";+lin s_026_2_p = ss "all Europeans are people";+lin s_026_3_p = ss "all people who are resident in Europe can travel freely within Europe";+lin s_026_4_q = ss "can most Europeans travel freely within Europe";+lin s_026_5_h = ss "most Europeans can travel freely within Europe";++lin s_027_1_p = ss "a few committee members are from Sweden";+lin s_027_2_p = ss "all committee members are people";+lin s_027_3_p = ss "all people who are from Sweden are from Scandinavia";+lin s_027_4_q = ss "are at least a few committee members from Scandinavia";+lin s_027_5_h = ss "at least a few committee members are from Scandinavia";++lin s_028_1_p = ss "few committee members are from Portugal";+lin s_028_2_p = ss "all committee members are people";+lin s_028_3_p = ss "all people who are from Portugal are from southern Europe";+lin s_028_4_q = ss "are there few committee members from southern Europe";+lin s_028_5_h = ss "there are few committee members from southern Europe";++lin s_029_1_p = ss "both commissioners used to be leading businessmen";+lin s_029_2_q = ss "did both commissioners used to be businessmen";+lin s_029_3_h = ss "both commissioners used to be businessmen";++lin s_030_1_p = ss "neither commissioner spends a lot of time at home";+lin s_030_2_q = ss "does neither commissioner spend time at home";+lin s_030_3_h = ss "neither commissioner spends time at home";++lin s_031_1_p = ss "at least three commissioners spend a lot of time at home";+lin s_031_2_q = ss "do at least three commissioners spend time at home";+lin s_031_3_h = ss "at least three commissioners spend time at home";++lin s_032_1_p = ss "at most ten commissioners spend a lot of time at home";+lin s_032_2_q = ss "do at most ten commissioners spend time at home";+lin s_032_3_h = ss "at most ten commissioners spend time at home";++lin s_033_1_p = ss "an Irishman won a Nobel prize";+lin s_033_2_q = ss "did an Irishman win the Nobel prize for literature";+lin s_033_3_h = ss "an Irishman won the Nobel prize for literature";++lin s_034_1_p = ss "every European can travel freely within Europe";+lin s_034_2_p = ss "every European is a person";+lin s_034_3_p = ss "every person who has the right to live in Europe can travel freely within Europe";+lin s_034_4_q = ss "does every European have the right to live in Europe";+lin s_034_5_h = ss "every European has the right to live in Europe";++lin s_035_1_p = ss "all Europeans can travel freely within Europe";+lin s_035_2_p = ss "every European is a person";+lin s_035_3_p = ss "every person who has the right to live in Europe can travel freely within Europe";+lin s_035_4_q = ss "do all Europeans have the right to live in Europe";+lin s_035_5_h = ss "all Europeans have the right to live in Europe";++lin s_036_1_p = ss "each European can travel freely within Europe";+lin s_036_2_p = ss "every European is a person";+lin s_036_3_p = ss "every person who has the right to live in Europe can travel freely within Europe";+lin s_036_4_q = ss "does each European have the right to live in Europe";+lin s_036_5_h = ss "each European has the right to live in Europe";++lin s_037_1_p = ss "the residents of member states can travel freely within Europe";+lin s_037_2_p = ss "all residents of member states are individuals";+lin s_037_3_p = ss "every individual who has the right to live anywhere in Europe can travel freely within Europe";+lin s_037_4_q = ss "do the residents of member states have the right to live anywhere in Europe";+lin s_037_5_h = ss "the residents of member states have the right to live anywhere in Europe";++lin s_038_1_p = ss "no delegate finished the report";+lin s_038_2_q = ss "did any delegate finish the report on time";+lin s_038_3_h = ss "some delegate finished the report on time";++lin s_039_1_p = ss "some delegates finished the survey";+lin s_039_2_q = ss "did some delegates finish the survey on time";+lin s_039_3_h = ss "some delegates finished the survey on time";++lin s_040_1_p = ss "many delegates obtained results from the survey";+lin s_040_2_q = ss "did many delegates obtain interesting results from the survey";+lin s_040_3_h = ss "many delegates obtained interesting results from the survey";++lin s_041_1_p = ss "several delegates got the results published";+lin s_041_2_q = ss "did several delegates get the results published in major national newspapers";+lin s_041_3_h = ss "several delegates got the results published in major national newspapers";++lin s_042_1_p = ss "most Europeans can travel freely within Europe";+lin s_042_2_p = ss "all Europeans are people";+lin s_042_3_p = ss "all people who are resident in Europe can travel freely within Europe";+lin s_042_4_q = ss "are most Europeans resident in Europe";+lin s_042_5_h = ss "most Europeans are resident in Europe";++lin s_043_1_p = ss "a few committee members are from Scandinavia";+lin s_043_2_p = ss "all committee members are people";+lin s_043_3_p = ss "all people who are from Sweden are from Scandinavia";+lin s_043_4_q = ss "are at least a few committee members from Sweden";+lin s_043_5_h = ss "at least a few committee members are from Sweden";++lin s_044_1_p = ss "few committee members are from southern Europe";+lin s_044_2_p = ss "all committee members are people";+lin s_044_3_p = ss "all people who are from Portugal are from southern Europe";+lin s_044_4_q = ss "are there few committee members from Portugal";+lin s_044_5_h = ss "there are few committee members from Portugal";++lin s_045_1_p = ss "both commissioners used to be businessmen";+lin s_045_2_q = ss "did both commissioners used to be leading businessmen";+lin s_045_3_h = ss "both commissioners used to be leading businessmen";++lin s_046_1_p = ss "neither commissioner spends time at home";+lin s_046_2_q = ss "does either commissioner spend a lot of time at home";+lin s_046_3_h = ss "one of the commissioners spends a lot of time at home";++lin s_047_1_p = ss "at least three commissioners spend time at home";+lin s_047_2_q = ss "do at least three commissioners spend a lot of time at home";+lin s_047_3_h = ss "at least three commissioners spend a lot of time at home";++lin s_048_1_p = ss "at most ten commissioners spend time at home";+lin s_048_2_q = ss "do at most ten commissioners spend a lot of time at home";+lin s_048_3_h = ss "at most ten commissioners spend a lot of time at home";++lin s_049_1_p = ss "a Swede won a Nobel prize";+lin s_049_2_p = ss "every Swede is a Scandinavian";+lin s_049_3_q = ss "did a Scandinavian win a Nobel prize";+lin s_049_4_h = ss "a Scandinavian won a Nobel prize";++lin s_050_1_p = ss "every Canadian resident can travel freely within Europe";+lin s_050_2_p = ss "every Canadian resident is a resident of the North American continent";+lin s_050_3_q = ss "can every resident of the North American continent travel freely within Europe";+lin s_050_4_h = ss "every resident of the North American continent can travel freely within Europe";++lin s_051_1_p = ss "all Canadian residents can travel freely within Europe";+lin s_051_2_p = ss "every Canadian resident is a resident of the North American continent";+lin s_051_3_q = ss "can all residents of the North American continent travel freely within Europe";+lin s_051_4_h = ss "all residents of the North American continent can travel freely within Europe";++lin s_052_1_p = ss "each Canadian resident can travel freely within Europe";+lin s_052_2_p = ss "every Canadian resident is a resident of the North American continent";+lin s_052_3_q = ss "can each resident of the North American continent travel freely within Europe";+lin s_052_4_h = ss "each resident of the North American continent can travel freely within Europe";++lin s_053_1_p = ss "the residents of major western countries can travel freely within Europe";+lin s_053_2_p = ss "all residents of major western countries are residents of western countries";+lin s_053_3_q = ss "do the residents of western countries have the right to live in Europe";+lin s_053_4_h = ss "the residents of western countries have the right to live in Europe";++lin s_054_1_p = ss "no Scandinavian delegate finished the report on time";+lin s_054_2_q = ss "did any delegate finish the report on time";+lin s_054_3_h = ss "some delegate finished the report on time";++lin s_055_1_p = ss "some Irish delegates finished the survey on time";+lin s_055_2_q = ss "did any delegates finish the survey on time";+lin s_055_3_h = ss "some delegates finished the survey on time";++lin s_056_1_p = ss "many British delegates obtained interesting results from the survey";+lin s_056_2_q = ss "did many delegates obtain interesting results from the survey";+lin s_056_3_h = ss "many delegates obtained interesting results from the survey";++lin s_057_1_p = ss "several Portuguese delegates got the results published in major national newspapers";+lin s_057_2_q = ss "did several delegates get the results published in major national newspapers";+lin s_057_3_h = ss "several delegates got the results published in major national newspapers";++lin s_058_1_p = ss "most Europeans who are resident in Europe can travel freely within Europe";+lin s_058_2_q = ss "can most Europeans travel freely within Europe";+lin s_058_3_h = ss "most Europeans can travel freely within Europe";++lin s_059_1_p = ss "a few female committee members are from Scandinavia";+lin s_059_2_q = ss "are at least a few committee members from Scandinavia";+lin s_059_3_h = ss "at least a few committee members are from Scandinavia";++lin s_060_1_p = ss "few female committee members are from southern Europe";+lin s_060_2_q = ss "are few committee members from southern Europe";+lin s_060_3_h = ss "few committee members are from southern Europe";++lin s_061_1_p = ss "both female commissioners used to be in business";+lin s_061_2_q = ss "did both commissioners used to be in business";+lin s_061_3_h = ss "both commissioners used to be in business";++lin s_062_1_p = ss "neither female commissioner spends a lot of time at home";+lin s_062_2_q = ss "does either commissioner spend a lot of time at home";+lin s_062_3_h = ss "one of the commissioners spends a lot of time at home";++lin s_063_1_p = ss "at least three female commissioners spend time at home";+lin s_063_2_q = ss "do at least three commissioners spend time at home";+lin s_063_3_h = ss "at least three commissioners spend time at home";++lin s_064_1_p = ss "at most ten female commissioners spend time at home";+lin s_064_2_q = ss "do at most ten commissioners spend time at home";+lin s_064_3_h = ss "at most ten commissioners spend time at home";++lin s_065_1_p = ss "a Scandinavian won a Nobel prize";+lin s_065_2_p = ss "every Swede is a Scandinavian";+lin s_065_3_q = ss "did a Swede win a Nobel prize";+lin s_065_4_h = ss "a Swede won a Nobel prize";++lin s_066_1_p = ss "every resident of the North American continent can travel freely within Europe";+lin s_066_2_p = ss "every Canadian resident is a resident of the North American continent";+lin s_066_3_q = ss "can every Canadian resident travel freely within Europe";+lin s_066_4_h = ss "every Canadian resident can travel freely within Europe";++lin s_067_1_p = ss "all residents of the North American continent can travel freely within Europe";+lin s_067_2_p = ss "every Canadian resident is a resident of the North American continent";+lin s_067_3_q = ss "can all Canadian residents travel freely within Europe";+lin s_067_4_h = ss "all Canadian residents can travel freely within Europe";++lin s_068_1_p = ss "each resident of the North American continent can travel freely within Europe";+lin s_068_2_p = ss "every Canadian resident is a resident of the North American continent";+lin s_068_3_q = ss "can each Canadian resident travel freely within Europe";+lin s_068_4_h = ss "each Canadian resident can travel freely within Europe";++lin s_069_1_p = ss "the residents of western countries can travel freely within Europe";+lin s_069_2_p = ss "all residents of major western countries are residents of western countries";+lin s_069_3_q = ss "do the residents of major western countries have the right to live in Europe";+lin s_069_4_h = ss "the residents of major western countries have the right to live in Europe";++lin s_070_1_p = ss "no delegate finished the report on time";+lin s_070_2_q = ss "did any Scandinavian delegate finish the report on time";+lin s_070_3_h = ss "some Scandinavian delegate finished the report on time";++lin s_071_1_p = ss "some delegates finished the survey on time";+lin s_071_2_q = ss "did any Irish delegates finish the survey on time";+lin s_071_3_h = ss "some Irish delegates finished the survey on time";++lin s_072_1_p = ss "many delegates obtained interesting results from the survey";+lin s_072_2_q = ss "did many British delegates obtain interesting results from the survey";+lin s_072_3_h = ss "many British delegates obtained interesting results from the survey";++lin s_073_1_p = ss "several delegates got the results published in major national newspapers";+lin s_073_2_q = ss "did several Portuguese delegates get the results published in major national newspapers";+lin s_073_3_h = ss "several Portuguese delegates got the results published in major national newspapers";++lin s_074_1_p = ss "most Europeans can travel freely within Europe";+lin s_074_2_q = ss "can most Europeans who are resident outside Europe travel freely within Europe";+lin s_074_3_h = ss "most Europeans who are resident outside Europe can travel freely within Europe";++lin s_075_1_p = ss "a few committee members are from Scandinavia";+lin s_075_2_q = ss "are at least a few female committee members from Scandinavia";+lin s_075_3_h = ss "at least a few female committee members are from Scandinavia";++lin s_076_1_p = ss "few committee members are from southern Europe";+lin s_076_2_q = ss "are few female committee members from southern Europe";+lin s_076_3_h = ss "few female committee members are from southern Europe";++lin s_077_1_p = ss "both commissioners used to be in business";+lin s_077_2_q = ss "did both female commissioners used to be in business";+lin s_077_3_h = ss "both female commissioners used to be in business";++lin s_078_1_p = ss "neither commissioner spends a lot of time at home";+lin s_078_2_q = ss "does either female commissioner spend a lot of time at home";+lin s_078_3_h = ss "one of the female commissioners spends a lot of time at home";++lin s_079_1_p = ss "at least three commissioners spend time at home";+lin s_079_2_q = ss "do at least three male commissioners spend time at home";+lin s_079_3_h = ss "at least three male commissioners spend time at home";++lin s_080_1_p = ss "at most ten commissioners spend time at home";+lin s_080_2_q = ss "do at most ten female commissioners spend time at home";+lin s_080_3_h = ss "at most ten female commissioners spend time at home";++lin s_081_1_p = ss "Smith , Jones and Anderson signed the contract";+lin s_081_2_q = ss "did Jones sign the contract";+lin s_081_3_h = ss "Jones signed the contract";++lin s_082_1_p = ss "Smith , Jones and several lawyers signed the contract";+lin s_082_2_q = ss "did Jones sign the contract";+lin s_082_3_h = ss "Jones signed the contract";++lin s_083_1_p = ss "either Smith , Jones or Anderson signed the contract";+lin s_083_2_q = ss "did Jones sign the contract";+lin s_083_3_h = ss "Jones signed the contract";++lin s_084_1_p = ss "either Smith , Jones or Anderson signed the contract";+lin s_084_2_q = ss "if Smith and Anderson did not sign the contract , did Jones sign the contract";+lin s_084_3_h = ss "if Smith and Anderson did not sign the contract , Jones signed the contract";++lin s_085_1_p = ss "exactly two lawyers and three accountants signed the contract";+lin s_085_2_q = ss "did six lawyers sign the contract";+lin s_085_3_h = ss "six lawyers signed the contract";++lin s_086_1_p = ss "exactly two lawyers and three accountants signed the contract";+lin s_086_2_q = ss "did six accountants sign the contract";+lin s_086_3_h = ss "six accountants signed the contract";++lin s_087_1_p = ss "every representative and client was at the meeting";+lin s_087_2_q = ss "was every representative at the meeting";+lin s_087_3_h = ss "every representative was at the meeting";++lin s_088_1_p = ss "every representative and client was at the meeting";+lin s_088_2_q = ss "was every representative at the meeting";+lin s_088_3_h = ss "every representative was at the meeting";++lin s_089_1_p = ss "every representative or client was at the meeting";+lin s_089_2_q = ss "was every representative and every client at the meeting";+lin s_089_3_h = ss "every representative and every client was at the meeting";++lin s_090_1_p = ss "the chairman read out the items on the agenda";+lin s_090_2_q = ss "did the chairman read out every item on the agenda";+lin s_090_3_h = ss "the chairman read out every item on the agenda";++lin s_091_1_p = ss "the people who were at the meeting voted for a new chairman";+lin s_091_2_q = ss "did everyone at the meeting vote for a new chairman";+lin s_091_3_h = ss "everyone at the meeting voted for a new chairman";++lin s_092_1_p = ss "all the people who were at the meeting voted for a new chairman";+lin s_092_2_q = ss "did everyone at the meeting vote for a new chairman";+lin s_092_3_h = ss "everyone at the meeting voted for a new chairman";++lin s_093_1_p = ss "the people who were at the meeting all voted for a new chairman";+lin s_093_2_q = ss "did everyone at the meeting vote for a new chairman";+lin s_093_3_h = ss "everyone at the meeting voted for a new chairman";++lin s_094_1_p = ss "the inhabitants of Cambridge voted for a Labour MP";+lin s_094_2_q = ss "did every inhabitant of Cambridge vote for a Labour MP";+lin s_094_3_h = ss "every inhabitant of Cambridge voted for a Labour MP";++lin s_095_1_p = ss "the Ancient Greeks were noted philosophers";+lin s_095_2_q = ss "was every Ancient Greek a noted philosopher";+lin s_095_3_h = ss "every Ancient Greek was a noted philosopher";++lin s_096_1_p = ss "the Ancient Greeks were all noted philosophers";+lin s_096_2_q = ss "was every Ancient Greek a noted philosopher";+lin s_096_3_h = ss "every Ancient Greek was a noted philosopher";++lin s_097_1_p = ss "software faults were blamed for the system failure";+lin s_097_2_q = ss "was the system failure blamed on one or more software faults";+lin s_097_3_h = ss "the system failure was blamed on one or more software faults";++lin s_098_1_p = ss "software faults were blamed for the system failure";+lin s_098_2_p = ss "Bug # 32-985 is a known software fault";+lin s_098_3_q = ss "was Bug # 32-985 blamed for the system failure";+lin s_098_4_h = ss "Bug # 32-985 was blamed for the system failure";++lin s_099_1_p = ss "clients at the demonstration were all impressed by the system's performance";+lin s_099_2_p = ss "Smith was a client at the demonstration";+lin s_099_3_q = ss "was Smith impressed by the system's performance";+lin s_099_4_h = ss "Smith was impressed by the system's performance";++lin s_100_1_p = ss "clients at the demonstration were impressed by the system's performance";+lin s_100_2_q = ss "were most clients at the demonstration impressed by the system's performance";+lin s_100_3_h = ss "most clients at the demonstration were impressed by the system's performance";++lin s_101_1_p = ss "university graduates make poor stock-market traders";+lin s_101_2_p = ss "Smith is a university graduate";+lin s_101_3_q = ss "is Smith likely to make a poor stock market trader";+lin s_101_4_h = ss "Smith is likely to make a poor stock market trader";++lin s_102_1_p = ss "university graduates make poor stock-market traders";+lin s_102_2_p = ss "Smith is a university graduate";+lin s_102_3_q = ss "will Smith make a poor stock market trader";+lin s_102_4_h = ss "Smith will make a poor stock market trader";++lin s_103_1_p = ss "all APCOM managers have company cars";+lin s_103_2_p = ss "Jones is an APCOM manager";+lin s_103_3_q = ss "does Jones have a company car";+lin s_103_4_h = ss "Jones has a company car";++lin s_104_1_p = ss "all APCOM managers have company cars";+lin s_104_2_p = ss "Jones is an APCOM manager";+lin s_104_3_q = ss "does Jones have more than one company car";+lin s_104_4_h = ss "Jones has more than one company car";++lin s_105_1_p = ss "just one accountant attended the meeting";+lin s_105_2_q = ss "did no accountants attend the meeting";+lin s_105_3_h = ss "no accountants attended the meeting";++lin s_106_1_p = ss "just one accountant attended the meeting";+lin s_106_2_q = ss "did no accountant attend the meeting";+lin s_106_3_h = ss "no accountant attended the meeting";++lin s_107_1_p = ss "just one accountant attended the meeting";+lin s_107_2_q = ss "did any accountants attend the meeting";+lin s_107_3_h = ss "some accountants attended the meeting";++lin s_108_1_p = ss "just one accountant attended the meeting";+lin s_108_2_q = ss "did any accountant attend the meeting";+lin s_108_3_h = ss "some accountant attended the meeting";++lin s_109_1_p = ss "just one accountant attended the meeting";+lin s_109_2_q = ss "did some accountants attend the meeting";+lin s_109_3_h = ss "some accountants attended the meeting";++lin s_110_1_p = ss "just one accountant attended the meeting";+lin s_110_2_q = ss "did some accountant attend the meeting";+lin s_110_3_h = ss "some accountant attended the meeting";++lin s_111_1_p = ss "Smith signed one contract";+lin s_111_2_p = ss "Jones signed another contract";+lin s_111_3_q = ss "did Smith and Jones sign two contracts";+lin s_111_4_h = ss "Smith and Jones signed two contracts";++lin s_112_1_p = ss "Smith signed two contracts";+lin s_112_2_p = ss "Jones signed two contracts";+lin s_112_3_q = ss "did Smith and Jones sign two contracts";+lin s_112_4_h = ss "Smith and Jones signed two contracts";++lin s_113_1_p = ss "Smith signed two contracts";+lin s_113_2_p = ss "Jones also signed them";+lin s_113_3_q = ss "did Smith and Jones sign two contracts";+lin s_113_4_h = ss "Smith and Jones signed two contracts";++lin s_114_1_p = ss "Mary used her workstation";+lin s_114_2_q = ss "was Mary's workstation used";+lin s_114_3_h = ss "Mary's workstation was used";++lin s_115_1_p = ss "Mary used her workstation";+lin s_115_2_q = ss "does Mary have a workstation";+lin s_115_3_h = ss "Mary has a workstation";++lin s_116_1_p = ss "Mary used her workstation";+lin s_116_2_q = ss "is Mary female";+lin s_116_3_h = ss "Mary is female";++lin s_117_1_p = ss "every student used her workstation";+lin s_117_2_p = ss "Mary is a student";+lin s_117_3_q = ss "did Mary use her workstation";+lin s_117_4_h = ss "Mary used her workstation";++lin s_118_1_p = ss "every student used her workstation";+lin s_118_2_p = ss "Mary is a student";+lin s_118_3_q = ss "does Mary have a workstation";+lin s_118_4_h = ss "Mary has a workstation";++lin s_119_1_p = ss "no student used her workstation";+lin s_119_2_p = ss "Mary is a student";+lin s_119_3_q = ss "did Mary use a workstation";+lin s_119_4_h = ss "Mary used a workstation";++lin s_120_1_p = ss "Smith attended a meeting";+lin s_120_2_p = ss "she chaired it";+lin s_120_3_q = ss "did Smith chair a meeting";+lin s_120_4_h = ss "Smith chaired a meeting";++lin s_121_1_p = ss "Smith delivered a report to ITEL";+lin s_121_2_p = ss "she also delivered them an invoice";+lin s_121_3_p = ss "and she delivered them a project proposal";+lin s_121_4_q = ss "did Smith deliver a report , an invoice and a project proposal to ITEL";+lin s_121_5_h = ss "Smith delivered a report , an invoice and a project proposal to ITEL";++lin s_122_1_p = ss "every committee has a chairman";+lin s_122_2_p = ss "he is appointed by its members";+lin s_122_3_q = ss "does every committee have a chairman appointed by members of the committee";+lin s_122_4_h = ss "every committee has a chairman appointed by members of the committee";++lin s_123_1_p = ss "ITEL has sent most of the reports Smith needs";+lin s_123_2_p = ss "they are on her desk";+lin s_123_3_q = ss "are there some reports from ITEL on Smith's desk";+lin s_123_4_h = ss "there are some reports from ITEL on Smith's desk";++lin s_124_1_p = ss "two out of ten machines are missing";+lin s_124_2_p = ss "they have been removed";+lin s_124_3_q = ss "have two machines been removed";+lin s_124_4_h = ss "two machines have been removed";++lin s_125_1_p = ss "two out of ten machines are missing";+lin s_125_2_p = ss "they have been removed";+lin s_125_3_q = ss "have eight machines been removed";+lin s_125_4_h = ss "eight machines have been removed";++lin s_126_1_p = ss "two out of ten machines are missing";+lin s_126_2_p = ss "they were all here yesterday";+lin s_126_3_q = ss "were ten machines here yesterday";+lin s_126_4_h = ss "ten machines were here yesterday";++lin s_127_1_p = ss "Smith took a machine on Tuesday , and Jones took a machine on Wednesday";+lin s_127_2_p = ss "they put them in the lobby";+lin s_127_3_q = ss "did Smith and Jones put two machines in the lobby";+lin s_127_4_h = ss "Smith and Jones put two machines in the lobby";++lin s_128_1_p = ss "John and his colleagues went to a meeting";+lin s_128_2_p = ss "they hated it";+lin s_128_3_q = ss "did John's colleagues hate the meeting";+lin s_128_4_h = ss "John's colleagues hated the meeting";++lin s_129_1_p = ss "John and his colleagues went to a meeting";+lin s_129_2_p = ss "they hated it";+lin s_129_3_q = ss "did John hate the meeting";+lin s_129_4_h = ss "John hated the meeting";++lin s_130_1_p = ss "John and his colleagues went to a meeting";+lin s_130_2_p = ss "they hated it";+lin s_130_3_q = ss "did John hate the meeting";+lin s_130_4_h = ss "John hated the meeting";++lin s_131_1_p = ss "each department has a dedicated line";+lin s_131_2_p = ss "they rent them from BT";+lin s_131_3_q = ss "does every department rent a line from BT";+lin s_131_4_h = ss "every department rents a line from BT";++lin s_132_1_p = ss "each department has a dedicated line";+lin s_132_2_p = ss "the sales department rents it from BT";+lin s_132_3_q = ss "does the sales department rent a line from BT";+lin s_132_4_h = ss "the sales department rents a line from BT";++lin s_133_1_p = ss "GFI owns several computers";+lin s_133_2_p = ss "ITEL maintains them";+lin s_133_3_q = ss "does ITEL maintain all the computers that GFI owns";+lin s_133_4_h = ss "ITEL maintains all the computers that GFI owns";++lin s_134_1_p = ss "every customer who owns a computer has a service contract for it";+lin s_134_2_p = ss "MFI is a customer that owns exactly one computer";+lin s_134_3_q = ss "does MFI have a service contract for all its computers";+lin s_134_4_h = ss "MFI has a service contract for all its computers";++lin s_135_1_p = ss "every customer who owns a computer has a service contract for it";+lin s_135_2_p = ss "MFI is a customer that owns several computers";+lin s_135_3_q = ss "does MFI have a service contract for all its computers";+lin s_135_4_h = ss "MFI has a service contract for all its computers";++lin s_136_1_p = ss "every executive who had a laptop computer brought it to take notes at the meeting";+lin s_136_2_p = ss "Smith is an executive who owns five different laptop computers";+lin s_136_3_q = ss "did Smith take five laptop computers to the meeting";+lin s_136_4_h = ss "Smith took five laptop computers to the meeting";++lin s_137_1_p = ss "there are 100 companies";+lin s_137_2_p = ss "ICM is one of the companies and owns 150 computers";+lin s_137_3_p = ss "it does not have service contracts for any of its computers";+lin s_137_4_p = ss "each of the other 99 companies owns one computer";+lin s_137_5_p = ss "they have service contracts for them";+lin s_137_6_q = ss "do most companies that own a computer have a service contract for it";+lin s_137_7_h = ss "most companies that own a computer have a service contract for it";++lin s_138_1_p = ss "every report has a cover page";+lin s_138_2_p = ss "R-95-103 is a report";+lin s_138_3_p = ss "Smith signed the cover page";+lin s_138_4_q = ss "did Smith sign the cover page of R-95-103";+lin s_138_5_h = ss "Smith signed the cover page of R-95-103";++lin s_139_1_p = ss "a company director awarded himself a large payrise";+lin s_139_2_q = ss "has a company director awarded and been awarded a payrise";+lin s_139_3_h = ss "a company director has awarded and been awarded a payrise";++lin s_140_1_p = ss "John said Bill had hurt himself";+lin s_140_2_q = ss "did John say Bill had been hurt";+lin s_140_3_h = ss "John said Bill had been hurt";++lin s_141_1_p = ss "John said Bill had hurt himself";+lin s_141_2_q = ss "did anyone say John had been hurt";+lin s_141_3_h = ss "someone said John had been hurt";++lin s_142_1_p = ss "John spoke to Mary";+lin s_142_2_p = ss "so did Bill";+lin s_142_3_q = ss "did Bill speak to Mary";+lin s_142_4_h = ss "Bill spoke to Mary";++lin s_143_1_p = ss "John spoke to Mary";+lin s_143_2_p = ss "so did Bill";+lin s_143_3_p = ss "John spoke to Mary at four o'clock";+lin s_143_4_q = ss "did Bill speak to Mary at four o'clock";+lin s_143_5_h = ss "Bill spoke to Mary at four o'clock";++lin s_144_1_p = ss "John spoke to Mary at four o'clock";+lin s_144_2_p = ss "so did Bill";+lin s_144_3_q = ss "did Bill speak to Mary at four o'clock";+lin s_144_4_h = ss "Bill spoke to Mary at four o'clock";++lin s_145_1_p = ss "John spoke to Mary at four o'clock";+lin s_145_2_p = ss "and Bill did [..] at five o'clock";+lin s_145_3_q = ss "did Bill speak to Mary at five o'clock";+lin s_145_4_h = ss "Bill spoke to Mary at five o'clock";++lin s_146_1_p = ss "John has spoken to Mary";+lin s_146_2_p = ss "Bill is going to [..]";+lin s_146_3_q = ss "will Bill speak to Mary";+lin s_146_4_h = ss "Bill will speak to Mary";++lin s_147_1_p = ss "John spoke to Mary on Monday";+lin s_147_2_p = ss "Bill didn't [..]";+lin s_147_3_q = ss "did Bill speak to Mary on Monday";+lin s_147_4_h = ss "Bill spoke to Mary on Monday";++lin s_148_1_p = ss "has John spoken to Mary";+lin s_148_2_p = ss "Bill has [..]";+lin s_148_3_q = ss "has Bill spoken to Mary";+lin s_148_4_h = ss "Bill has spoken to Mary";++lin s_149_1_p = ss "John has spoken to Mary";+lin s_149_2_p = ss "the students have [..] too";+lin s_149_3_q = ss "have the students spoken to Mary";+lin s_149_4_h = ss "the students have spoken to Mary";++lin s_150_1_p = ss "John went to Paris by car , and Bill [..] by train";+lin s_150_2_q = ss "did Bill go to Paris by train";+lin s_150_3_h = ss "Bill went to Paris by train";++lin s_151_1_p = ss "John went to Paris by car , and Bill [..] by train to Berlin";+lin s_151_2_q = ss "did Bill go to Berlin by train";+lin s_151_3_h = ss "Bill went to Berlin by train";++lin s_152_1_p = ss "John went to Paris by car , and Bill [..] to Berlin";+lin s_152_2_q = ss "did Bill go to Berlin by car";+lin s_152_3_h = ss "Bill went to Berlin by car";++lin s_153_1_p = ss "John is going to Paris by car , and the students [..] by train";+lin s_153_2_q = ss "are the students going to Paris by train";+lin s_153_3_h = ss "the students are going to Paris by train";++lin s_154_1_p = ss "John went to Paris by car";+lin s_154_2_p = ss "Bill [..] by train";+lin s_154_3_q = ss "did Bill go to Paris by train";+lin s_154_4_h = ss "Bill went to Paris by train";++lin s_155_1_p = ss "John owns a car";+lin s_155_2_p = ss "Bill owns one too";+lin s_155_3_q = ss "does Bill own a car";+lin s_155_4_h = ss "Bill owns a car";++lin s_156_1_p = ss "John owns a car";+lin s_156_2_p = ss "Bill owns one too";+lin s_156_3_q = ss "is there a car that John and Bill own";+lin s_156_4_h = ss "there is a car that John and Bill own";++lin s_157_1_p = ss "John owns a red car";+lin s_157_2_p = ss "Bill owns a blue one";+lin s_157_3_q = ss "does Bill own a blue car";+lin s_157_4_h = ss "Bill owns a blue car";++lin s_158_1_p = ss "John owns a red car";+lin s_158_2_p = ss "Bill owns a blue one";+lin s_158_3_q = ss "does Bill own a red car";+lin s_158_4_h = ss "Bill owns a red car";++lin s_159_1_p = ss "John owns a red car";+lin s_159_2_p = ss "Bill owns a fast one";+lin s_159_3_q = ss "does Bill own a fast car";+lin s_159_4_h = ss "Bill owns a fast car";++lin s_160_1_p = ss "John owns a red car";+lin s_160_2_p = ss "Bill owns a fast one";+lin s_160_3_q = ss "does Bill own a fast red car";+lin s_160_4_h = ss "Bill owns a fast red car";++lin s_161_1_p = ss "John owns a red car";+lin s_161_2_p = ss "Bill owns a fast one";+lin s_161_3_q = ss "does Bill own a fast red car";+lin s_161_4_h = ss "Bill owns a fast red car";++lin s_162_1_p = ss "John owns a fast red car";+lin s_162_2_p = ss "Bill owns a slow one";+lin s_162_3_q = ss "does Bill own a slow red car";+lin s_162_4_h = ss "Bill owns a slow red car";++lin s_163_1_p = ss "John had his paper accepted";+lin s_163_2_p = ss "Bill doesn't know why [..]";+lin s_163_3_q = ss "does Bill know why John had his paper accepted";+lin s_163_4_h = ss "Bill knows why John had his paper accepted";++lin s_164_1_p = ss "John spoke to Mary";+lin s_164_2_p = ss "and to Sue";+lin s_164_3_q = ss "did John speak to Sue";+lin s_164_4_h = ss "John spoke to Sue";++lin s_165_1_p = ss "John spoke to Mary";+lin s_165_2_p = ss "on Friday";+lin s_165_3_q = ss "did John speak to Mary on Friday";+lin s_165_4_h = ss "John spoke to Mary on Friday";++lin s_166_1_p = ss "John spoke to Mary on Thursday";+lin s_166_2_p = ss "and on Friday";+lin s_166_3_q = ss "did John speak to Mary on Friday";+lin s_166_4_h = ss "John spoke to Mary on Friday";++lin s_167_1_p = ss "twenty men work in the sales department";+lin s_167_2_p = ss "but only one woman";+lin s_167_3_q = ss "do two women work in the sales department";+lin s_167_4_h = ss "two women work in the sales department";++lin s_168_1_p = ss "five men work part time";+lin s_168_2_p = ss "and forty five women";+lin s_168_3_q = ss "do forty five women work part time";+lin s_168_4_h = ss "forty five women work part time";++lin s_169_1_p = ss "John found Mary before Bill";+lin s_169_2_q = ss "did John find Mary before Bill found Mary";+lin s_169_3_h = ss "John found Mary before Bill found Mary";++lin s_170_1_p = ss "John found Mary before Bill";+lin s_170_2_q = ss "did John find Mary before John found Bill";+lin s_170_3_h = ss "John found Mary before John found Bill";++lin s_171_1_p = ss "John wants to know how many men work part time";+lin s_171_2_p = ss "and women";+lin s_171_3_q = ss "does John want to know how many women work part time";+lin s_171_4_h = ss "John wants to know how many women work part time";++lin s_172_1_p = ss "John wants to know how many men work part time , and which [..] [..]";+lin s_172_2_q = ss "does John want to know which men work part time";+lin s_172_3_h = ss "John wants to know which men work part time";++lin s_173_1_p = ss "Bill spoke to everyone that John did [..]";+lin s_173_2_p = ss "John spoke to Mary";+lin s_173_3_q = ss "did Bill speak to Mary";+lin s_173_4_h = ss "Bill spoke to Mary";++lin s_174_1_p = ss "Bill spoke to everyone that John did [..]";+lin s_174_2_p = ss "Bill spoke to Mary";+lin s_174_3_q = ss "did John speak to Mary";+lin s_174_4_h = ss "John spoke to Mary";++lin s_175_1_p = ss "John said Mary wrote a report , and Bill did [..] too";+lin s_175_2_q = ss "did Bill say Mary wrote a report";+lin s_175_3_h = ss "Bill said Mary wrote a report";++lin s_176_1_p = ss "John said Mary wrote a report , and Bill did [..] too";+lin s_176_2_q = ss "did John say Bill wrote a report";+lin s_176_3_h = ss "John said Bill wrote a report";++lin s_177_1_p = ss "John said that Mary wrote a report , and that Bill did [..] too";+lin s_177_1_p_NEW = ss "John said that Mary wrote a report , and said that Bill did [..] too";+lin s_177_2_q = ss "did Bill say Mary wrote a report";+lin s_177_3_h = ss "Bill said Mary wrote a report";++lin s_178_1_p = ss "John wrote a report , and Bill said Peter did [..] too";+lin s_178_2_q = ss "did Bill say Peter wrote a report";+lin s_178_3_h = ss "Bill said Peter wrote a report";++lin s_179_1_p = ss "if John wrote a report , then Bill did [..] too";+lin s_179_2_p = ss "John wrote a report";+lin s_179_3_q = ss "did Bill write a report";+lin s_179_4_h = ss "Bill wrote a report";++lin s_180_1_p = ss "John wanted to buy a car , and he did [..]";+lin s_180_2_q = ss "did John buy a car";+lin s_180_3_h = ss "John bought a car";++lin s_181_1_p = ss "John needed to buy a car , and Bill did [..]";+lin s_181_2_q = ss "did Bill buy a car";+lin s_181_3_h = ss "Bill bought a car";++lin s_182_1_p = ss "Smith represents his company and so does Jones";+lin s_182_2_q = ss "does Jones represent Jones' company";+lin s_182_3_h = ss "Jones represents Jones' company";++lin s_183_1_p = ss "Smith represents his company and so does Jones";+lin s_183_2_q = ss "does Jones represent Smith's company";+lin s_183_3_h = ss "Jones represents Smith's company";++lin s_184_1_p = ss "Smith represents his company and so does Jones";+lin s_184_2_q = ss "does Smith represent Jones' company";+lin s_184_3_h = ss "Smith represents Jones' company";++lin s_185_1_p = ss "Smith claimed he had costed his proposal and so did Jones";+lin s_185_2_q = ss "did Jones claim he had costed his own proposal";+lin s_185_3_h = ss "Jones claimed he had costed his own proposal";++lin s_186_1_p = ss "Smith claimed he had costed his proposal and so did Jones";+lin s_186_2_q = ss "did Jones claim he had costed Smith's proposal";+lin s_186_3_h = ss "Jones claimed he had costed Smith's proposal";++lin s_187_1_p = ss "Smith claimed he had costed his proposal and so did Jones";+lin s_187_2_q = ss "did Jones claim Smith had costed Smith's proposal";+lin s_187_3_h = ss "Jones claimed Smith had costed Smith's proposal";++lin s_188_1_p = ss "Smith claimed he had costed his proposal and so did Jones";+lin s_188_2_q = ss "did Jones claim Smith had costed Jones' proposal";+lin s_188_3_h = ss "Jones claimed Smith had costed Jones' proposal";++lin s_189_1_p = ss "John is a man and Mary is a woman";+lin s_189_2_p = ss "John represents his company and so does Mary";+lin s_189_3_q = ss "does Mary represent her own company";+lin s_189_4_h = ss "Mary represents her own company";++lin s_190_1_p = ss "John is a man and Mary is a woman";+lin s_190_2_p = ss "John represents his company and so does Mary";+lin s_190_3_q = ss "does Mary represent John's company";+lin s_190_4_h = ss "Mary represents John's company";++lin s_191_1_p = ss "Bill suggested to Frank's boss that they should go to the meeting together , and Carl [..] to Alan's wife";+lin s_191_2_q = ss "if it was suggested that Bill and Frank should go together , was it suggested that Carl and Alan should go together";+lin s_191_3_h = ss "if it was suggested that Bill and Frank should go together , it was suggested that Carl and Alan should go together";++lin s_192_1_p = ss "Bill suggested to Frank's boss that they should go to the meeting together , and Carl [..] to Alan's wife";+lin s_192_2_q = ss "if it was suggested that Bill and Frank should go together , was it suggested that Carl and Alan's wife should go together";+lin s_192_3_h = ss "if it was suggested that Bill and Frank should go together , it was suggested that Carl and Alan's wife should go together";++lin s_193_1_p = ss "Bill suggested to Frank's boss that they should go to the meeting together , and Carl [..] to Alan's wife";+lin s_193_2_q = ss "if it was suggested that Bill and Frank's boss should go together , was it suggested that Carl and Alan's wife should go together";+lin s_193_3_h = ss "if it was suggested that Bill and Frank's boss should go together , it was suggested that Carl and Alan's wife should go together";++lin s_194_1_p = ss "Bill suggested to Frank's boss that they should go to the meeting together , and Carl [..] to Alan's wife";+lin s_194_2_q = ss "if it was suggested that Bill and Frank's boss should go together , was it suggested that Carl and Alan should go together";+lin s_194_3_h = ss "if it was suggested that Bill and Frank's boss should go together , it was suggested that Carl and Alan should go together";++lin s_195_1_p = ss "Bill suggested to Frank's boss that they should go to the meeting together , and Carl [..] to Alan's wife";+lin s_195_2_q = ss "if it was suggested that Bill , Frank and Frank's boss should go together , was it suggested that Carl , Alan and Alan's wife should go together";+lin s_195_3_h = ss "if it was suggested that Bill , Frank and Frank's boss should go together , it was suggested that Carl , Alan and Alan's wife should go together";++lin s_196_1_p = ss "a lawyer signed every report , and so did an auditor";+lin s_196_2_p = ss "that is , there was one lawyer who signed all the reports";+lin s_196_3_q = ss "was there one auditor who signed all the reports";+lin s_196_4_h = ss "there was one auditor who signed all the reports";++lin s_197_1_p = ss "John has a genuine diamond";+lin s_197_2_q = ss "does John have a diamond";+lin s_197_3_h = ss "John has a diamond";++lin s_198_1_p = ss "John is a former university student";+lin s_198_2_q = ss "is John a university student";+lin s_198_3_h = ss "John is a university student";++lin s_199_1_p = ss "John is a successful former university student";+lin s_199_2_q = ss "is John successful";+lin s_199_3_h = ss "John is successful";++lin s_200_1_p = ss "John is a former successful university student";+lin s_200_2_q = ss "is John successful";+lin s_200_3_h = ss "John is successful";++lin s_201_1_p = ss "John is a former successful university student";+lin s_201_2_q = ss "is John a university student";+lin s_201_3_h = ss "John is a university student";++lin s_202_1_p = ss "every mammal is an animal";+lin s_202_2_q = ss "is every four-legged mammal a four-legged animal";+lin s_202_3_h = ss "every four-legged mammal is a four-legged animal";++lin s_203_1_p = ss "Dumbo is a four-legged animal";+lin s_203_2_q = ss "is Dumbo four-legged";+lin s_203_3_h = ss "Dumbo is four-legged";++lin s_204_1_p = ss "Mickey is a small animal";+lin s_204_2_q = ss "is Mickey a large animal";+lin s_204_3_h = ss "Mickey is a large animal";++lin s_205_1_p = ss "Dumbo is a large animal";+lin s_205_2_q = ss "is Dumbo a small animal";+lin s_205_3_h = ss "Dumbo is a small animal";++lin s_206_1_p = ss "Fido is not a small animal";+lin s_206_2_q = ss "is Fido a large animal";+lin s_206_3_h = ss "Fido is a large animal";++lin s_207_1_p = ss "Fido is not a large animal";+lin s_207_2_q = ss "is Fido a small animal";+lin s_207_3_h = ss "Fido is a small animal";++lin s_208_1_p = ss "Mickey is a small animal";+lin s_208_2_p = ss "Dumbo is a large animal";+lin s_208_3_q = ss "is Mickey smaller than Dumbo";+lin s_208_4_h = ss "Mickey is smaller than Dumbo";++lin s_209_1_p = ss "Mickey is a small animal";+lin s_209_2_p = ss "Dumbo is a large animal";+lin s_209_3_q = ss "is Mickey larger than Dumbo";+lin s_209_4_h = ss "Mickey is larger than Dumbo";++lin s_210_1_p = ss "all mice are small animals";+lin s_210_2_p = ss "Mickey is a large mouse";+lin s_210_3_q = ss "is Mickey a large animal";+lin s_210_4_h = ss "Mickey is a large animal";++lin s_211_1_p = ss "all elephants are large animals";+lin s_211_2_p = ss "Dumbo is a small elephant";+lin s_211_3_q = ss "is Dumbo a small animal";+lin s_211_4_h = ss "Dumbo is a small animal";++lin s_212_1_p = ss "all mice are small animals";+lin s_212_2_p = ss "all elephants are large animals";+lin s_212_3_p = ss "Mickey is a large mouse";+lin s_212_4_p = ss "Dumbo is a small elephant";+lin s_212_5_q = ss "is Dumbo larger than Mickey";+lin s_212_6_h = ss "Dumbo is larger than Mickey";++lin s_213_1_p = ss "all mice are small animals";+lin s_213_2_p = ss "Mickey is a large mouse";+lin s_213_3_q = ss "is Mickey small";+lin s_213_4_h = ss "Mickey is small";++lin s_214_1_p = ss "all legal authorities are law lecturers";+lin s_214_2_p = ss "all law lecturers are legal authorities";+lin s_214_3_q = ss "are all fat legal authorities fat law lecturers";+lin s_214_4_h = ss "all fat legal authorities are fat law lecturers";++lin s_215_1_p = ss "all legal authorities are law lecturers";+lin s_215_2_p = ss "all law lecturers are legal authorities";+lin s_215_3_q = ss "are all competent legal authorities competent law lecturers";+lin s_215_4_h = ss "all competent legal authorities are competent law lecturers";++lin s_216_1_p = ss "John is a fatter politician than Bill";+lin s_216_2_q = ss "is John fatter than Bill";+lin s_216_3_h = ss "John is fatter than Bill";++lin s_217_1_p = ss "John is a cleverer politician than Bill";+lin s_217_2_q = ss "is John cleverer than Bill";+lin s_217_3_h = ss "John is cleverer than Bill";++lin s_218_1_p = ss "Kim is a clever person";+lin s_218_2_q = ss "is Kim clever";+lin s_218_3_h = ss "Kim is clever";++lin s_219_1_p = ss "Kim is a clever politician";+lin s_219_2_q = ss "is Kim clever";+lin s_219_3_h = ss "Kim is clever";++lin s_220_1_p = ss "the PC-6082 is faster than the ITEL-XZ";+lin s_220_2_p = ss "the ITEL-XZ is fast";+lin s_220_3_q = ss "is the PC-6082 fast";+lin s_220_4_h = ss "the PC-6082 is fast";++lin s_221_1_p = ss "the PC-6082 is faster than the ITEL-XZ";+lin s_221_2_q = ss "is the PC-6082 fast";+lin s_221_3_h = ss "the PC-6082 is fast";++lin s_222_1_p = ss "the PC-6082 is faster than the ITEL-XZ";+lin s_222_2_p = ss "the PC-6082 is fast";+lin s_222_3_q = ss "is the ITEL-XZ fast";+lin s_222_4_h = ss "the ITEL-XZ is fast";++lin s_223_1_p = ss "the PC-6082 is faster than the ITEL-XZ";+lin s_223_2_p = ss "the PC-6082 is slow";+lin s_223_3_q = ss "is the ITEL-XZ fast";+lin s_223_4_h = ss "the ITEL-XZ is fast";++lin s_224_1_p = ss "the PC-6082 is as fast as the ITEL-XZ";+lin s_224_2_p = ss "the ITEL-XZ is fast";+lin s_224_3_q = ss "is the PC-6082 fast";+lin s_224_4_h = ss "the PC-6082 is fast";++lin s_225_1_p = ss "the PC-6082 is as fast as the ITEL-XZ";+lin s_225_2_q = ss "is the PC-6082 fast";+lin s_225_3_h = ss "the PC-6082 is fast";++lin s_226_1_p = ss "the PC-6082 is as fast as the ITEL-XZ";+lin s_226_2_p = ss "the PC-6082 is fast";+lin s_226_3_q = ss "is the ITEL-XZ fast";+lin s_226_4_h = ss "the ITEL-XZ is fast";++lin s_227_1_p = ss "the PC-6082 is as fast as the ITEL-XZ";+lin s_227_2_p = ss "the PC-6082 is slow";+lin s_227_3_q = ss "is the ITEL-XZ fast";+lin s_227_4_h = ss "the ITEL-XZ is fast";++lin s_228_1_p = ss "the PC-6082 is as fast as the ITEL-XZ";+lin s_228_2_q = ss "is the PC-6082 faster than the ITEL-XZ";+lin s_228_3_h = ss "the PC-6082 is faster than the ITEL-XZ";++lin s_229_1_p = ss "the PC-6082 is as fast as the ITEL-XZ";+lin s_229_2_q = ss "is the PC-6082 slower than the ITEL-XZ";+lin s_229_3_h = ss "the PC-6082 is slower than the ITEL-XZ";++lin s_230_1_p = ss "ITEL won more orders than APCOM did [..]";+lin s_230_2_q = ss "did ITEL win some orders";+lin s_230_3_h = ss "ITEL won some orders";++lin s_231_1_p = ss "ITEL won more orders than APCOM did [..]";+lin s_231_2_q = ss "did APCOM win some orders";+lin s_231_3_h = ss "APCOM won some orders";++lin s_232_1_p = ss "ITEL won more orders than APCOM did [..]";+lin s_232_2_p = ss "APCOM won ten orders";+lin s_232_3_q = ss "did ITEL win at least eleven orders";+lin s_232_4_h = ss "ITEL won at least eleven orders";++lin s_233_1_p = ss "ITEL won more orders than APCOM";+lin s_233_2_q = ss "did ITEL win some orders";+lin s_233_3_h = ss "ITEL won some orders";++lin s_234_1_p = ss "ITEL won more orders than APCOM";+lin s_234_2_q = ss "did APCOM win some orders";+lin s_234_3_h = ss "APCOM won some orders";++lin s_235_1_p = ss "ITEL won more orders than APCOM";+lin s_235_2_p = ss "APCOM won ten orders";+lin s_235_3_q = ss "did ITEL win at least eleven orders";+lin s_235_4_h = ss "ITEL won at least eleven orders";++lin s_236_1_p = ss "ITEL won more orders than the APCOM contract";+lin s_236_2_q = ss "did ITEL win the APCOM contract";+lin s_236_3_h = ss "ITEL won the APCOM contract";++lin s_237_1_p = ss "ITEL won more orders than the APCOM contract";+lin s_237_2_q = ss "did ITEL win more than one order";+lin s_237_3_h = ss "ITEL won more than one order";++lin s_238_1_p = ss "ITEL won twice as many orders than APCOM";+lin s_238_2_p = ss "APCOM won ten orders";+lin s_238_3_q = ss "did ITEL win twenty orders";+lin s_238_4_h = ss "ITEL won twenty orders";++lin s_239_1_p = ss "ITEL won more orders than APCOM lost [..]";+lin s_239_2_q = ss "did ITEL win some orders";+lin s_239_3_h = ss "ITEL won some orders";++lin s_240_1_p = ss "ITEL won more orders than APCOM lost [..]";+lin s_240_2_q = ss "did APCOM lose some orders";+lin s_240_3_h = ss "APCOM lost some orders";++lin s_241_1_p = ss "ITEL won more orders than APCOM lost [..]";+lin s_241_2_p = ss "APCOM lost ten orders";+lin s_241_3_q = ss "did ITEL win at least eleven orders";+lin s_241_4_h = ss "ITEL won at least eleven orders";++lin s_242_1_p = ss "the PC-6082 is faster than 500 MIPS";+lin s_242_2_p = ss "the ITEL-ZX is slower than 500 MIPS";+lin s_242_3_q = ss "is the PC-6082 faster than the ITEL-ZX";+lin s_242_4_h = ss "the PC-6082 is faster than the ITEL-ZX";++lin s_243_1_p = ss "ITEL sold 3000 more computers than APCOM";+lin s_243_2_p = ss "APCOM sold exactly 2500 computers";+lin s_243_3_q = ss "did ITEL sell 5500 computers";+lin s_243_4_h = ss "ITEL sold 5500 computers";++lin s_244_1_p = ss "APCOM has a more important customer than ITEL";+lin s_244_2_q = ss "does APCOM have a more important customer than ITEL is [..]";+lin s_244_3_h = ss "APCOM has a more important customer than ITEL is [..]";++lin s_245_1_p = ss "APCOM has a more important customer than ITEL";+lin s_245_2_q = ss "does APCOM have a more important customer than ITEL has [..]";+lin s_245_3_h = ss "APCOM has a more important customer than ITEL has [..]";++lin s_246_1_p = ss "the PC-6082 is faster than every ITEL computer";+lin s_246_2_p = ss "the ITEL-ZX is an ITEL computer";+lin s_246_3_q = ss "is the PC-6082 faster than the ITEL-ZX";+lin s_246_4_h = ss "the PC-6082 is faster than the ITEL-ZX";++lin s_247_1_p = ss "the PC-6082 is faster than some ITEL computer";+lin s_247_2_p = ss "the ITEL-ZX is an ITEL computer";+lin s_247_3_q = ss "is the PC-6082 faster than the ITEL-ZX";+lin s_247_4_h = ss "the PC-6082 is faster than the ITEL-ZX";++lin s_248_1_p = ss "the PC-6082 is faster than any ITEL computer";+lin s_248_2_p = ss "the ITEL-ZX is an ITEL computer";+lin s_248_3_q = ss "is the PC-6082 faster than the ITEL-ZX";+lin s_248_4_h = ss "the PC-6082 is faster than the ITEL-ZX";++lin s_249_1_p = ss "the PC-6082 is faster than the ITEL-ZX and the ITEL-ZY";+lin s_249_2_q = ss "is the PC-6082 faster than the ITEL-ZX";+lin s_249_3_h = ss "the PC-6082 is faster than the ITEL-ZX";++lin s_250_1_p = ss "the PC-6082 is faster than the ITEL-ZX or the ITEL-ZY";+lin s_250_2_q = ss "is the PC-6082 faster than the ITEL-ZX";+lin s_250_3_h = ss "the PC-6082 is faster than the ITEL-ZX";++lin s_251_1_p = ss "ITEL has a factory in Birmingham";+lin s_251_2_q = ss "does ITEL currently have a factory in Birmingham";+lin s_251_3_h = ss "ITEL currently has a factory in Birmingham";++lin s_252_1_p = ss "since 1992 ITEL has been in Birmingham";+lin s_252_2_p = ss "it is now 1996";+lin s_252_3_q = ss "was ITEL in Birmingham in 1993";+lin s_252_4_h = ss "ITEL was in Birmingham in 1993";++lin s_253_1_p = ss "ITEL has developed a new editor since 1992";+lin s_253_2_p = ss "it is now 1996";+lin s_253_3_q = ss "did ITEL develop a new editor in 1993";+lin s_253_4_h = ss "ITEL developed a new editor in 1993";++lin s_254_1_p = ss "ITEL has expanded since 1992";+lin s_254_2_p = ss "it is now 1996";+lin s_254_3_q = ss "did ITEL expand in 1993";+lin s_254_4_h = ss "ITEL expanded in 1993";++lin s_255_1_p = ss "since 1992 ITEL has made a loss";+lin s_255_2_p = ss "it is now 1996";+lin s_255_3_q = ss "did ITEL make a loss in 1993";+lin s_255_4_h = ss "ITEL made a loss in 1993";++lin s_256_1_p = ss "ITEL has made a loss since 1992";+lin s_256_2_p = ss "it is now 1996";+lin s_256_3_q = ss "did ITEL make a loss in 1993";+lin s_256_4_h = ss "ITEL made a loss in 1993";++lin s_257_1_p = ss "ITEL has made a loss since 1992";+lin s_257_2_p = ss "it is now 1996";+lin s_257_3_q = ss "did ITEL make a loss in 1993";+lin s_257_4_h = ss "ITEL made a loss in 1993";++lin s_258_1_p = ss "in March 1993 APCOM founded ITEL";+lin s_258_2_q = ss "did ITEL exist in 1992";+lin s_258_3_h = ss "ITEL existed in 1992";++lin s_259_1_p = ss "the conference started on July 4th , 1994";+lin s_259_2_p = ss "it lasted 2 days";+lin s_259_3_q = ss "was the conference over on July 8th , 1994";+lin s_259_4_h = ss "the conference was over on July 8th , 1994";++lin s_260_1_p = ss "yesterday APCOM signed the contract";+lin s_260_2_p = ss "today is Saturday , July 14th";+lin s_260_3_q = ss "did APCOM sign the contract Friday , 13th";+lin s_260_4_h = ss "APCOM signed the contract Friday , 13th";++lin s_261_1_p = ss "Smith left before Jones left";+lin s_261_2_p = ss "Jones left before Anderson left";+lin s_261_3_q = ss "did Smith leave before Anderson left";+lin s_261_4_h = ss "Smith left before Anderson left";++lin s_262_1_p = ss "Smith left after Jones left";+lin s_262_2_p = ss "Jones left after Anderson left";+lin s_262_3_q = ss "did Smith leave after Anderson left";+lin s_262_4_h = ss "Smith left after Anderson left";++lin s_263_1_p = ss "Smith was present after Jones left";+lin s_263_2_p = ss "Jones left after Anderson was present";+lin s_263_3_q = ss "was Smith present after Anderson was present";+lin s_263_4_h = ss "Smith was present after Anderson was present";++lin s_264_1_p = ss "Smith left";+lin s_264_2_p = ss "Jones left";+lin s_264_3_p = ss "Smith left before Jones left";+lin s_264_4_q = ss "did Jones leave after Smith left";+lin s_264_5_h = ss "Jones left after Smith left";++lin s_265_1_p = ss "Smith left";+lin s_265_2_p = ss "Jones left";+lin s_265_3_p = ss "Smith left after Jones left";+lin s_265_4_q = ss "did Jones leave before Smith left";+lin s_265_5_h = ss "Jones left before Smith left";++lin s_266_1_p = ss "Smith left";+lin s_266_2_p = ss "Jones left";+lin s_266_3_p = ss "Jones left before Smith left";+lin s_266_4_q = ss "did Smith leave after Jones left";+lin s_266_5_h = ss "Smith left after Jones left";++lin s_267_1_p = ss "Jones revised the contract";+lin s_267_2_p = ss "Smith revised the contract";+lin s_267_3_p = ss "Jones revised the contract before Smith did [..]";+lin s_267_4_q = ss "did Smith revise the contract after Jones did [..]";+lin s_267_5_h = ss "Smith revised the contract after Jones did [..]";++lin s_268_1_p = ss "Jones revised the contract";+lin s_268_2_p = ss "Smith revised the contract";+lin s_268_3_p = ss "Jones revised the contract after Smith did [..]";+lin s_268_4_q = ss "did Smith revise the contract before Jones did [..]";+lin s_268_5_h = ss "Smith revised the contract before Jones did [..]";++lin s_269_1_p = ss "Smith swam";+lin s_269_2_p = ss "Jones swam";+lin s_269_3_p = ss "Smith swam before Jones swam";+lin s_269_4_q = ss "did Jones swim after Smith swam";+lin s_269_5_h = ss "Jones swam after Smith swam";++lin s_270_1_p = ss "Smith swam to the shore";+lin s_270_2_p = ss "Jones swam to the shore";+lin s_270_3_p = ss "Smith swam to the shore before Jones swam to the shore";+lin s_270_4_q = ss "did Jones swim to the shore after Smith swam to the shore";+lin s_270_5_h = ss "Jones swam to the shore after Smith swam to the shore";++lin s_271_1_p = ss "Smith was present";+lin s_271_2_p = ss "Jones was present";+lin s_271_3_p = ss "Smith was present after Jones was present";+lin s_271_4_q = ss "was Jones present before Smith was present";+lin s_271_5_h = ss "Jones was present before Smith was present";++lin s_272_1_p = ss "Smith was present";+lin s_272_2_p = ss "Jones was present";+lin s_272_3_p = ss "Smith was present before Jones was present";+lin s_272_4_q = ss "was Jones present after Smith was present";+lin s_272_5_h = ss "Jones was present after Smith was present";++lin s_273_1_p = ss "Smith was writing a report";+lin s_273_2_p = ss "Jones was writing a report";+lin s_273_3_p = ss "Smith was writing a report before Jones was writing a report";+lin s_273_4_q = ss "was Jones writing a report after Smith was writing a report";+lin s_273_5_h = ss "Jones was writing a report after Smith was writing a report";++lin s_274_1_p = ss "Smith was writing a report";+lin s_274_2_p = ss "Jones was writing a report";+lin s_274_3_p = ss "Smith was writing a report after Jones was writing a report";+lin s_274_4_q = ss "was Jones writing a report before Smith was writing a report";+lin s_274_5_h = ss "Jones was writing a report before Smith was writing a report";++lin s_275_1_p = ss "Smith left the meeting before he lost his temper";+lin s_275_2_q = ss "did Smith lose his temper";+lin s_275_3_h = ss "Smith lost his temper";++lin s_276_1_p = ss "when they opened the M25 , traffic increased";++lin s_277_1_p = ss "Smith lived in Birmingham in 1991";+lin s_277_2_q = ss "did Smith live in Birmingham in 1992";+lin s_277_3_h = ss "Smith lived in Birmingham in 1992";++lin s_278_1_p = ss "Smith wrote his first novel in 1991";+lin s_278_2_q = ss "did Smith write his first novel in 1992";+lin s_278_3_h = ss "Smith wrote his first novel in 1992";++lin s_279_1_p = ss "Smith wrote a novel in 1991";+lin s_279_2_q = ss "did Smith write it in 1992";+lin s_279_3_h = ss "Smith wrote it in 1992";++lin s_280_1_p = ss "Smith wrote a novel in 1991";+lin s_280_2_q = ss "did Smith write a novel in 1992";+lin s_280_3_h = ss "Smith wrote a novel in 1992";++lin s_281_1_p = ss "Smith was running a business in 1991";+lin s_281_2_q = ss "was Smith running it in 1992";+lin s_281_3_h = ss "Smith was running it in 1992";++lin s_282_1_p = ss "Smith discovered a new species in 1991";+lin s_282_2_q = ss "did Smith discover it in 1992";+lin s_282_3_h = ss "Smith discovered it in 1992";++lin s_283_1_p = ss "Smith discovered a new species in 1991";+lin s_283_2_q = ss "did Smith discover a new species in 1992";+lin s_283_3_h = ss "Smith discovered a new species in 1992";++lin s_284_1_p = ss "Smith wrote a report in two hours";+lin s_284_2_p = ss "Smith started writing the report at 8 am";+lin s_284_3_q = ss "had Smith finished writing the report by 11 am";+lin s_284_4_h = ss "Smith had finished writing the report by 11 am";++lin s_285_1_p = ss "Smith wrote a report in two hours";+lin s_285_2_q = ss "did Smith spend two hours writing the report";+lin s_285_3_h = ss "Smith spent two hours writing the report";++lin s_286_1_p = ss "Smith wrote a report in two hours";+lin s_286_2_q = ss "did Smith spend more than two hours writing the report";+lin s_286_3_h = ss "Smith spent more than two hours writing the report";++lin s_287_1_p = ss "Smith wrote a report in two hours";+lin s_287_2_q = ss "did Smith write a report in one hour";+lin s_287_3_h = ss "Smith wrote a report in one hour";++lin s_288_1_p = ss "Smith wrote a report in two hours";+lin s_288_2_q = ss "did Smith write a report";+lin s_288_3_h = ss "Smith wrote a report";++lin s_289_1_p = ss "Smith discovered a new species in two hours";+lin s_289_2_q = ss "did Smith spend two hours discovering the new species";+lin s_289_3_h = ss "Smith spent two hours discovering the new species";++lin s_290_1_p = ss "Smith discovered a new species in two hours";+lin s_290_2_q = ss "did Smith discover a new species";+lin s_290_3_h = ss "Smith discovered a new species";++lin s_291_1_p = ss "Smith discovered many new species in two hours";+lin s_291_2_q = ss "did Smith spend two hours discovering new species";+lin s_291_3_h = ss "Smith spent two hours discovering new species";++lin s_292_1_p = ss "Smith was running his own business in two years";+lin s_292_2_q = ss "did Smith spend two years running his own business";+lin s_292_3_h = ss "Smith spent two years running his own business";++lin s_293_1_p = ss "Smith was running his own business in two years";+lin s_293_2_q = ss "did Smith spend more than two years running his own business";+lin s_293_3_h = ss "Smith spent more than two years running his own business";++lin s_294_1_p = ss "Smith was running his own business in two years";+lin s_294_2_q = ss "did Smith run his own business";+lin s_294_3_h = ss "Smith ran his own business";++lin s_295_1_p = ss "in two years Smith owned a chain of businesses";+lin s_295_2_q = ss "did Smith own a chain of business for two years";+lin s_295_3_h = ss "Smith owned a chain of business for two years";++lin s_296_1_p = ss "in two years Smith owned a chain of businesses";+lin s_296_2_q = ss "did Smith own a chain of business for more than two years";+lin s_296_3_h = ss "Smith owned a chain of business for more than two years";++lin s_297_1_p = ss "in two years Smith owned a chain of businesses";+lin s_297_2_q = ss "did Smith own a chain of business";+lin s_297_3_h = ss "Smith owned a chain of business";++lin s_298_1_p = ss "Smith lived in Birmingham for two years";+lin s_298_2_q = ss "did Smith live in Birmingham for a year";+lin s_298_3_h = ss "Smith lived in Birmingham for a year";++lin s_299_1_p = ss "Smith lived in Birmingham for two years";+lin s_299_2_q = ss "did Smith live in Birmingham for exactly a year";+lin s_299_3_h = ss "Smith lived in Birmingham for exactly a year";++lin s_300_1_p = ss "Smith lived in Birmingham for two years";+lin s_300_2_q = ss "did Smith live in Birmingham";+lin s_300_3_h = ss "Smith lived in Birmingham";++lin s_301_1_p = ss "Smith ran his own business for two years";+lin s_301_2_q = ss "did Smith run his own business for a year";+lin s_301_3_h = ss "Smith ran his own business for a year";++lin s_302_1_p = ss "Smith ran his own business for two years";+lin s_302_2_q = ss "did Smith run his own business";+lin s_302_3_h = ss "Smith ran his own business";++lin s_303_1_p = ss "Smith wrote a report for two hours";+lin s_303_2_q = ss "did Smith write a report for an hour";+lin s_303_3_h = ss "Smith wrote a report for an hour";++lin s_304_1_p = ss "Smith wrote a report for two hours";+lin s_304_2_q = ss "did Smith write a report";+lin s_304_3_h = ss "Smith wrote a report";++lin s_305_1_p = ss "Smith discovered a new species for an hour";++lin s_306_1_p = ss "Smith discovered new species for two years";+lin s_306_2_q = ss "did Smith discover new species";+lin s_306_3_h = ss "Smith discovered new species";++lin s_307_1_p = ss "in 1994 ITEL sent a progress report every month";+lin s_307_2_q = ss "did ITEL send a progress report in July 1994";+lin s_307_3_h = ss "ITEL sent a progress report in July 1994";++lin s_308_1_p = ss "Smith wrote to a representative every week";+lin s_308_2_q = ss "is there a representative that Smith wrote to every week";+lin s_308_3_h = ss "there is a representative that Smith wrote to every week";++lin s_309_1_p = ss "Smith left the house at a quarter past five";+lin s_309_2_p = ss "she took a taxi to the station and caught the first train to Luxembourg";++lin s_310_1_p = ss "Smith lost some files";+lin s_310_2_p = ss "they were destroyed when her hard disk crashed";++lin s_311_1_p = ss "Smith had left the house at a quarter past five";+lin s_311_2_p = ss "then she took a taxi to the station";+lin s_311_3_q = ss "did Smith leave the house before she took a taxi to the station";+lin s_311_4_h = ss "Smith left the house before she took a taxi to the station";++lin s_312_1_p = ss "ITEL always delivers reports late";+lin s_312_2_p = ss "in 1993 ITEL delivered reports";+lin s_312_3_q = ss "did ITEL deliver reports late in 1993";+lin s_312_4_h = ss "ITEL delivered reports late in 1993";++lin s_313_1_p = ss "ITEL never delivers reports late";+lin s_313_2_p = ss "in 1993 ITEL delivered reports";+lin s_313_3_q = ss "did ITEL deliver reports late in 1993";+lin s_313_4_h = ss "ITEL delivered reports late in 1993";++lin s_314_1_p = ss "Smith arrived in Paris on the 5th of May , 1995";+lin s_314_2_p = ss "today is the 15th of May , 1995";+lin s_314_3_p = ss "she is still in Paris";+lin s_314_4_q = ss "was Smith in Paris on the 7th of May , 1995";+lin s_314_5_h = ss "Smith was in Paris on the 7th of May , 1995";++lin s_315_1_p = ss "when Smith arrived in Katmandu she had been travelling for three days";+lin s_315_2_q = ss "had Smith been travelling the day before she arrived in Katmandu";+lin s_315_3_h = ss "Smith had been travelling the day before she arrived in Katmandu";+lin s_315_3_h_NEW = ss "Smith had been travelling on the day before she arrived in Katmandu";++lin s_316_1_p = ss "Jones graduated in March and has been employed ever since";+lin s_316_2_p = ss "Jones has been unemployed in the past";+lin s_316_3_q = ss "was Jones unemployed at some time before he graduated";+lin s_316_4_h = ss "Jones was unemployed at some time before he graduated";++lin s_317_1_p = ss "every representative has read this report";+lin s_317_2_p = ss "no two representatives have read it at the same time";+lin s_317_3_p = ss "no representative took less than half a day to read the report";+lin s_317_4_p = ss "there are sixteen representatives";+lin s_317_5_q = ss "did it take the representatives more than a week to read the report";+lin s_317_6_h = ss "it took the representatives more than a week to read the report";++lin s_318_1_p = ss "while Jones was updating the program , Mary came in and told him about the board meeting";+lin s_318_2_p = ss "she finished [..] before he did [..]";+lin s_318_3_q = ss "did Mary's story last as long as Jones' updating the program";+lin s_318_4_h = ss "Mary's story lasted as long as Jones' updating the program";++lin s_319_1_p = ss "before APCOM bought its present office building , it had been paying mortgage interest on the previous one for 8 years";+lin s_319_2_p = ss "since APCOM bought its present office building it has been paying mortgage interest on it for more than 10 years";+lin s_319_3_q = ss "has APCOM been paying mortgage interest for a total of 15 years or more";+lin s_319_4_h = ss "APCOM has been paying mortgage interest for a total of 15 years or more";++lin s_320_1_p = ss "when Jones got his job at the CIA , he knew that he would never be allowed to write his memoirs";+lin s_320_2_q = ss "is it the case that Jones is not and will never be allowed to write his memoirs";+lin s_320_3_h = ss "it is the case that Jones is not and will never be allowed to write his memoirs";+lin s_320_3_h_NEW = ss "it is the case that Jones is not [..] and never will be allowed to write his memoirs";++lin s_321_1_p = ss "Smith has been to Florence twice in the past";+lin s_321_2_p = ss "Smith will go to Florence twice in the coming year";+lin s_321_3_q = ss "two years from now will Smith have been to Florence at least four times";+lin s_321_4_h = ss "two years from now Smith will have been to Florence at least four times";++lin s_322_1_p = ss "last week I already knew that when , in a month's time , Smith would discover that she had been duped she would be furious";+lin s_322_1_p_NEW = ss "last week I already knew that when in a month's time , Smith would discover that she had been duped , she would be furious";+lin s_322_2_q = ss "will it be the case that in a few weeks Smith will discover that she has been duped; and will she be furious";+lin s_322_3_h = ss "it will be the case that in a few weeks Smith will discover that she has been duped; and she will be furious";++lin s_323_1_p = ss "no one gambling seriously stops until he is broke";+lin s_323_1_p_NEW = ss "no one who is gambling seriously stops until he is broke";+lin s_323_2_p = ss "no one can gamble when he is broke";+lin s_323_3_q = ss "does everyone who starts gambling seriously stop the moment he is broke";+lin s_323_4_h = ss "everyone who starts gambling seriously stops the moment he is broke";+lin s_323_4_h_NEW = ss "everyone who starts gambling seriously stops at the moment when he is broke";++lin s_324_1_p = ss "no one who starts gambling seriously stops until he is broke";+lin s_324_2_q = ss "does everyone who starts gambling seriously continue until he is broke";+lin s_324_3_h = ss "everyone who starts gambling seriously continues until he is broke";++lin s_325_1_p = ss "nobody who is asleep ever knows that he is asleep";+lin s_325_2_p = ss "but some people know that they have been asleep after they have been asleep";+lin s_325_3_q = ss "do some people discover that they have been asleep";+lin s_325_4_h = ss "some people discover that they have been asleep";++lin s_326_1_p = ss "ITEL built MTALK in 1993";+lin s_326_2_q = ss "did ITEL finish MTALK in 1993";+lin s_326_3_h = ss "ITEL finished MTALK in 1993";++lin s_327_1_p = ss "ITEL was building MTALK in 1993";+lin s_327_2_q = ss "did ITEL finish MTALK in 1993";+lin s_327_3_h = ss "ITEL finished MTALK in 1993";++lin s_328_1_p = ss "ITEL won the contract from APCOM in 1993";+lin s_328_2_q = ss "did ITEL win a contract in 1993";+lin s_328_3_h = ss "ITEL won a contract in 1993";++lin s_329_1_p = ss "ITEL was winning the contract from APCOM in 1993";+lin s_329_2_q = ss "did ITEL win a contract in 1993";+lin s_329_3_h = ss "ITEL won a contract in 1993";++lin s_330_1_p = ss "ITEL owned APCOM from 1988 to 1992";+lin s_330_2_q = ss "did ITEL own APCOM in 1990";+lin s_330_3_h = ss "ITEL owned APCOM in 1990";++lin s_331_1_p = ss "Smith and Jones left the meeting";+lin s_331_2_q = ss "did Smith leave the meeting";+lin s_331_3_h = ss "Smith left the meeting";++lin s_332_1_p = ss "Smith and Jones left the meeting";+lin s_332_2_q = ss "did Jones leave the meeting";+lin s_332_3_h = ss "Jones left the meeting";++lin s_333_1_p = ss "Smith , Anderson and Jones met";+lin s_333_2_q = ss "was there a group of people that met";+lin s_333_3_h = ss "there was a group of people that met";++lin s_334_1_p = ss "Smith knew that ITEL had won the contract in 1992";+lin s_334_2_q = ss "did ITEL win the contract in 1992";+lin s_334_3_h = ss "ITEL won the contract in 1992";++lin s_335_1_p = ss "Smith believed that ITEL had won the contract in 1992";+lin s_335_2_q = ss "did ITEL win the contract in 1992";+lin s_335_3_h = ss "ITEL won the contract in 1992";++lin s_336_1_p = ss "ITEL managed to win the contract in 1992";+lin s_336_2_q = ss "did ITEL win the contract in 1992";+lin s_336_3_h = ss "ITEL won the contract in 1992";++lin s_337_1_p = ss "ITEL tried to win the contract in 1992";+lin s_337_2_q = ss "did ITEL win the contract in 1992";+lin s_337_3_h = ss "ITEL won the contract in 1992";++lin s_338_1_p = ss "it is true that ITEL won the contract in 1992";+lin s_338_2_q = ss "did ITEL win the contract in 1992";+lin s_338_3_h = ss "ITEL won the contract in 1992";++lin s_339_1_p = ss "it is false that ITEL won the contract in 1992";+lin s_339_2_q = ss "did ITEL win the contract in 1992";+lin s_339_3_h = ss "ITEL won the contract in 1992";++lin s_340_1_p = ss "Smith saw Jones sign the contract";+lin s_340_2_p = ss "if Jones signed the contract , his heart was beating";+lin s_340_3_q = ss "did Smith see Jones' heart beat";+lin s_340_4_h = ss "Smith saw Jones' heart beat";++lin s_341_1_p = ss "Smith saw Jones sign the contract";+lin s_341_2_p = ss "when Jones signed the contract , his heart was beating";+lin s_341_3_q = ss "did Smith see Jones' heart beat";+lin s_341_4_h = ss "Smith saw Jones' heart beat";++lin s_342_1_p = ss "Smith saw Jones sign the contract";+lin s_342_2_q = ss "did Jones sign the contract";+lin s_342_3_h = ss "Jones signed the contract";++lin s_343_1_p = ss "Smith saw Jones sign the contract";+lin s_343_2_p = ss "Jones is the chairman of ITEL";+lin s_343_3_q = ss "did Smith see the chairman of ITEL sign the contract";+lin s_343_4_h = ss "Smith saw the chairman of ITEL sign the contract";++lin s_344_1_p = ss "Helen saw the chairman of the department answer the phone";+lin s_344_2_p = ss "the chairman of the department is a person";+lin s_344_3_q = ss "is there anyone whom Helen saw answer the phone";+lin s_344_4_h = ss "there is someone whom Helen saw answer the phone";++lin s_345_1_p = ss "Smith saw Jones sign the contract and [..] his secretary make a copy";+lin s_345_2_q = ss "did Smith see Jones sign the contract";+lin s_345_3_h = ss "Smith saw Jones sign the contract";++lin s_346_1_p = ss "Smith saw Jones sign the contract or [..] [..] cross out the crucial clause";+lin s_346_2_q = ss "did Smith either see Jones sign the contract or see Jones cross out the crucial clause";+lin s_346_3_h = ss "Smith either saw Jones sign the contract or saw Jones cross out the crucial clause";++}
@@ -0,0 +1,3 @@+--# -path=.:alltenses:prelude++concrete FraCaSBankSwe of FraCaSBank = FraCaSBankI with (FraCaS = FraCaSSwe);
@@ -0,0 +1,69 @@+--# -path=.:alltenses++concrete FraCaSEng of FraCaS = GrammarEng, AdditionsEng, FraCaSLexEng ** open+ Prelude,+ (G=GrammarEng),+ (A=AdditionsEng),+ (E=ExtraEng),+ (R=ResEng),+ (P=ParadigmsEng),+ (X=ParamX),+ (C=Coordination)+ in {++-- language independent functions++lin+ ComparAsAs x0 x1 = (G.CAdvAP (G.as_CAdv) (G.PositA x0) x1);++lin+ Adverbial x0 = (PAdverbial (G.NoPConj) x0);+ PAdverbial x0 x1 = (G.PhrUtt x0 (G.UttAdv x1) (G.NoVoc));+ Nounphrase x0 = (PNounphrase (G.NoPConj) x0);+ PNounphrase x0 x1 = (G.PhrUtt x0 (G.UttNP x1) (G.NoVoc));+ Question x0 = (PQuestion (G.NoPConj) x0);+ PQuestion x0 x1 = (G.PhrUtt x0 (G.UttQS x1) (G.NoVoc));+ Sentence x0 = (PSentence (G.NoPConj) x0);+ PSentence x0 x1 = (G.PhrUtt x0 (G.UttS x1) (G.NoVoc));++lin+ Past = (G.TTAnt (G.TPast) (G.ASimul));+ PastPerfect = (G.TTAnt (G.TPast) (G.AAnter));+ Present = (G.TTAnt (G.TPres) (G.ASimul));+ PresentPerfect = (G.TTAnt (G.TPres) (G.AAnter));+ Future = (G.TTAnt (G.TFut) (G.ASimul));+ FuturePerfect = (G.TTAnt (G.TFut) (G.AAnter));+ Conditional = (G.TTAnt (G.TCond) (G.ASimul));++lin+ ConjCN2 c n1 n2 = (G.ConjCN c (G.BaseCN n1 n2));+ ConjNP2 c n1 n2 = (G.ConjNP c (G.BaseNP n1 n2));+ ConjNP3 c n1 n2 n3 = (G.ConjNP c (G.ConsNP n1 (G.BaseNP n2 n3)));+ ConjQS2 c q1 q2 = (A.ConjQS c (A.BaseQS q1 q2));+ ConjS2 c s1 s2 = (G.ConjS c (G.BaseS s1 s2));+ ConjVPI2 c v1 v2 = (A.ConjVPI c (A.BaseVPI (A.MkVPI v1) (A.MkVPI v2)));+ ConjVPS2 c t1 p1 v1 t2 p2 v2 = (A.ConjVPS c (A.BaseVPS (A.MkVPS t1 p1 v1) (A.MkVPS t2 p2 v2)));++-- language dependent functions++lin+ UncNeg = E.UncNeg ;++lin+ ComplVSa = A.ComplBareVS ;+ ProgrVPa = G.ProgrVP ;++lin+ elliptic_V = P.mkV ellipsis ellipsis ellipsis ellipsis ellipsis ;+ elliptic_NP_Sg = {s = \\c => ellipsis; a = R.AgP3Sg R.Neutr} ;+ elliptic_NP_Pl = {s = \\c => ellipsis; a = R.AgP3Pl} ;+ elliptic_VP = R.predV elliptic_V ;+ elliptic_Cl = {s = \\_,_,_,_ => ellipsis} ;+ elliptic_VPSlash = R.predV elliptic_V ** {c2 = ""};+ elliptic_V2V = P.mkV2V elliptic_V P.noPrep P.noPrep ;+ elliptic_CN = {s = \\n,c => ellipsis; g = R.Neutr} ;++oper+ ellipsis : Str = "[..]" ;++}
@@ -0,0 +1,519 @@+--# -path=.:alltenses++-- FraCaSLex: Abstract lexicon for the FraCaS test suite++abstract FraCaSLex = Cat ** {++fun+-- NOUNS+ accountant_N : N ;+ agenda_N : N ;+ animal_N : N ;+ apcom_contract_N : N ;+ apcom_manager_N : N ;+ auditor_N : N ;+ authority_N : N ;+ board_meeting_N : N ;+ boss_N : N ;+ business_N : N ;+ businessman_N : N ;+ car_N : N ;+ case_N : N ;+ chain_N : N ;+ chairman_N : N ;+ chairman_N2 : N2 ;+ charity_N : N ;+ clause_N : N ;+ client_N : N ;+ colleague_N : N ;+ commissioner_N : N ;+ committee_N : N ;+ committee_member_N : N ;+ company_N : N ;+ company_car_N : N ;+ company_director_N : N ;+ computer_N : N ;+ concert_N : N ;+ conference_N : N ;+ continent_N : N ;+ contract_N : N ;+ copy_N : N ;+ country_N : N ;+ cover_page_N : N ;+ customer_N : N ;+ day_N : N ;+ delegate_N : N ;+ demonstration_N : N ;+ department_N : N ;+ desk_N : N ;+ diamond_N : N ;+ editor_N : N ;+ elephant_N : N ;+ european_N : N ;+ executive_N : N ;+ factory_N : N ;+ fee_N : N ;+ file_N : N ;+ greek_N : N ;+ group_N2 : N2 ;+ hard_disk_N : N ;+ heart_N : N ;+ hour_N : N ;+ house_N : N ;+ individual_N : N ;+ inhabitant_N2 : N2 ;+ invoice_N : N ;+ irishman_N : N ;+ italian_N : N ;+ itel_computer_N : N ;+ itelxz_N : N ;+ itelzx_N : N ;+ itelzy_N : N ;+ item_N : N ;+ job_N : N ;+ labour_mp_N : N ;+ laptop_computer_N : N ;+ law_lecturer_N : N ;+ lawyer_N : N ;+ line_N : N ;+ literature_N : N ;+ lobby_N : N ;+ loss_N : N ;+ machine_N : N ;+ mammal_N : N ;+ man_N : N ;+ meeting_N : N ;+ member_N : N ;+ member_state_N : N ;+ memoir_N : N ;+ mips_N : N ;+ moment_N : N ;+ mortgage_interest_N : N ;+ mouse_N : N ;+ newspaper_N : N ;+ nobel_prize_N : N ;+ nobel_prize_N2 : N2 ;+ note_N : N ;+ novel_N : N ;+ office_building_N : N ;+ one_N : N ;+ order_N : N ;+ paper_N : N ;+ payrise_N : N ;+ pc6082_N : N ;+ performance_N : N ;+ person_N : N ;+ philosopher_N : N ;+ phone_N : N ;+ politician_N : N ;+ popular_music_N : N ;+ program_N : N ;+ progress_report_N : N ;+ project_proposal_N : N ;+ proposal_N : N ;+ report_N : N ;+ representative_N : N ;+ resident_N : N ;+ resident_in_N2 : N2 ;+ resident_on_N2 : N2 ;+ result_N : N ;+ right_N : N ;+ sales_department_N : N ;+ scandinavian_N : N ;+ secretary_N : N ;+ service_contract_N : N ;+ shore_N : N ;+ software_fault_N : N ;+ species_N : N ;+ station_N : N ;+ stock_market_trader_N : N ;+ stockmarket_trader_N : N ;+ story_N : N ;+ student_N : N ;+ survey_N : N ;+ swede_N : N ;+ system_N : N ;+ system_failure_N : N ;+ taxi_N : N ;+ temper_N : N ;+ tenor_N : N ;+ time_N : N ;+ today_N : N ; + traffic_N : N ;+ train_N : N ;+ university_graduate_N : N ;+ university_student_N : N ;+ week_N : N ;+ wife_N : N ;+ woman_N : N ;+ workstation_N : N ;+ world_N : N ;+ year_N : N ;+ +-- PROPER NOUNS+ alan_PN : PN ;+ anderson_PN : PN ;+ apcom_PN : PN ;+ berlin_PN : PN ;+ bill_PN : PN ;+ birmingham_PN : PN ;+ bt_PN : PN ;+ bug_32985_PN : PN ;+ cambridge_PN : PN ;+ carl_PN : PN ;+ dumbo_PN : PN ;+ europe_PN : PN ;+ fido_PN : PN ;+ florence_PN : PN ;+ frank_PN : PN ;+ gfi_PN : PN ;+ helen_PN : PN ;+ icm_PN : PN ;+ itel_PN : PN ;+ john_PN : PN ;+ jones_PN : PN ;+ katmandu_PN : PN ;+ kim_PN : PN ;+ luxembourg_PN : PN ;+ mary_PN : PN ;+ mfi_PN : PN ;+ mickey_PN : PN ;+ mtalk_PN : PN ;+ paris_PN : PN ;+ pavarotti_PN : PN ;+ peter_PN : PN ;+ portugal_PN : PN ;+ r95103_PN : PN ;+ scandinavia_PN : PN ;+ smith_PN : PN ;+ southern_europe_PN : PN ;+ sue_PN : PN ;+ sweden_PN : PN ;+ the_cia_PN : PN ;+ the_m25_PN : PN ;+ +-- PRONOUNS+ anyone_Pron : Pron ;+ everyone_Pron : Pron ;+ no_one_Pron : Pron ;+ someone_Pron : Pron ;+ nobody_Pron : Pron ;+ sheRefl_Pron : Pron ;+ heRefl_Pron : Pron ;+ theyRefl_Pron : Pron ;+ itRefl_Pron : Pron ;++-- RELATIVE PRONOUNS+ that_RP : RP ;+ +-- ADJECTIVES+ ambitious_A : A ;+ ancient_A : A ;+ asleep_A : A ;+ blue_A : A ;+ british_A : A ;+ broke_A : A ;+ canadian_A : A ;+ clever_A : A ;+ competent_A : A ;+ crucial_A : A ;+ dedicated_A : A ;+ different_A : A ;+ employed_A : A ;+ excellent_A : A ;+ false_A : A ;+ fast_A : A ;+ fat_A : A ;+ female_A : A ;+ former_A : A ;+ fourlegged_A : A ;+ free_A : A ;+ furious_A : A ;+ genuine_A : A ;+ german_A : A ;+ great_A : A ;+ important_A : A ;+ impressed_by_A2 : A2 ;+ indispensable_A : A ;+ interesting_A : A ;+ irish_A : A ;+ italian_A : A ;+ known_A : A ;+ large_A : A ;+ leading_A : A ;+ legal_A : A ;+ likely_A : A ;+ major_A : A ;+ male_A : A ;+ many_A : A ;+ missing_A : A ;+ modest_A : A ;+ national_A : A ;+ new_A : A ;+ north_american_A : A ;+ noted_A : A ;+ own_A : A ;+ poor8bad_A : A ;+ poor8penniless_A : A ;+ portuguese_A : A ;+ present8attending_A : A ;+ present8current_A : A ;+ previous_A : A ;+ red_A : A ;+ resident_A : A ;+ scandinavian_A : A ;+ serious_A : A ;+ slow_A : A ;+ small_A : A ;+ successful_A : A ;+ swedish_A : A ;+ true_A : A ;+ unemployed_A : A ;+ western_A : A ;+ +-- VERBS+ accept_V2 : V2 ;+ allow_V2V : V2V ;+ answer_V2 : V2 ;+ appoint_V2 : V2 ;+ arrive_in_V2 : V2 ;+ attend_V2 : V2 ;+ award_V3 : V3 ;+ beat_V : V ;+ become_V2 : V2 ;+ believe_VS : VS ;+ blame1_V2 : V2 ;+ blame2_V2 : V2 ;+ bring_V2V : V2V ;+ build_V2 : V2 ;+ buy_V2 : V2 ;+ catch_V2 : V2 ;+ chair_V2 : V2 ;+ claim_VS : VS ;+ come_cheap_VP : VP ;+ come_in_V : V ;+ continue_V : V ;+ contribute_to_V3 : V3 ;+ cost_V2 : V2 ;+ crash_V : V ;+ cross_out_V2 : V2 ;+ deliver_V2 : V2 ;+ deliver_V3 : V3 ;+ destroy_V2 : V2 ;+ develop_V2 : V2 ;+ discover_V2 : V2 ;+ discover_VS : VS ;+ do_VV : VV ;+ dupe_V2 : V2 ;+ exist_V : V ;+ expand_V : V ;+ find_V2 : V2 ;+ finish_V2 : V2 ;+ finish_VV : VV ;+ found_V2 : V2 ;+ gamble_V : V ;+ get_V2 : V2 ;+ going_to_VV : VV ;+ go8travel_V : V ;+ go8walk_V : V ;+ graduate_V : V ;+ hate_V2 : V2 ;+ hurt_V2 : V2 ;+ increase_V : V ;+ know_VQ : VQ ;+ know_VS : VS ;+ last_V2 : V2 ;+ leave_V : V ;+ leave_V2 : V2 ;+ like_V2 : V2 ;+ live_V : V ;+ lose_V2 : V2 ;+ maintain_V2 : V2 ;+ make8become_V2 : V2 ;+ make8do_V2 : V2 ;+ manage_VV : VV ;+ meet_V : V ;+ need_V2 : V2 ;+ need_VV : VV ;+ obtain_from_V3 : V3 ;+ open_V2 : V2 ;+ own_V2 : V2 ;+ pay_V2 : V2 ;+ publish_V2 : V2 ;+ put_in_V3 : V3 ;+ read_V2 : V2 ;+ read_out_V2 : V2 ;+ remove_V2 : V2 ;+ rent_from_V3 : V3 ;+ represent_V2 : V2 ;+ revise_V2 : V2 ;+ run_V2 : V2 ;+ say_VS : VS ;+ see_V2V : V2V ;+ sell_V2 : V2 ;+ send_V2 : V2 ;+ shall_VV : VV ;+ sign_V2 : V2 ;+ sing_V2 : V2 ;+ speak_to_V2 : V2 ;+ spend_V2 : V2 ;+ start_V : V ;+ start_VV : VV ;+ stop_V : V ;+ suggest_to_V2S : V2S ;+ swim_V : V ;+ take_V2 : V2 ;+ take_V2V : V2V ;+ take_part_in_V2 : V2 ;+ tell_about_V3 : V3 ;+ travel_V : V ;+ try_VV : VV ;+ update_V2 : V2 ;+ use_V2 : V2 ;+ use_VV : VV ;+ vote_for_V2 : V2 ;+ win_V2 : V2 ;+ work_V : V ;+ work_in_V2 : V2 ;+ write_V2 : V2 ;+ write_to_V2 : V2 ;++ award_and_be_awarded_V2 : V2 ;+ +-- DETERMINERS+ a_few_Det : Det ;+ a_lot_of_Det : Det ;+ another_Det : Det ;+ anyPl_Det : Det ;+ anySg_Det : Det ;+ both_Det : Det ;+ each_Det : Det ;+ either_Det : Det ;+ neither_Det : Det ;+ one_or_more_Det : Det ;+ several_Det : Det ;+ twice_as_many_Det : Det ;++ half_a_Card : Card ;++ the_other_Q : Quant ;++-- NUMERALS+ N_one, N_two, N_three, N_four, N_five, N_six, N_eight, N_ten, N_eleven, N_sixteen, N_twenty, N_fortyfive : Numeral ;+ N_2, N_4, N_8, N_10, N_13, N_14, N_15, N_99, N_100, N_150, N_500, N_2500, N_3000, N_5500 : Numeral ;+ +-- ADVERBS+ anywhere_Adv : Adv ;+ ever_since_Adv : Adv ;+ late_Adv : Adv ;+ long_Adv : Adv ;+ over_Adv : Adv ;+ part_time_Adv : Adv ;+ together_Adv : Adv ;+ too_Adv : Adv ;+ twice_Adv : Adv ;+ yesterday_Adv : Adv ;++ at_home_Adv : Adv ;++ all_AdV : AdV ;+ already_AdV : AdV ;+ also_AdV : AdV ;+ currently_AdV : AdV ;+ ever_AdV : AdV ;+ never_AdV : AdV ;+ now_AdV : AdV ;+ still_AdV : AdV ;++ really_AdA : AdA ;++ more_than_AdN : AdN ;+ less_than_AdN : AdN ;++-- TIME & DATE EXPRESSIONS+ at_8_am_Adv : Adv ;+ at_a_quarter_past_five_Adv : Adv ;+ at_five_oclock_Adv : Adv ;+ at_four_oclock_Adv : Adv ;+ by_11_am_Adv : Adv ;+ for_8_years_Adv : Adv ;+ for_a_total_of_15_years_or_more_Adv : Adv ;+ for_a_year_Adv : Adv ;+ for_an_hour_Adv : Adv ;+ for_exactly_a_year_Adv : Adv ;+ for_more_than_10_years_Adv : Adv ;+ for_more_than_two_years_Adv : Adv ;+ for_three_days_Adv : Adv ;+ for_two_hours_Adv : Adv ;+ for_two_years_Adv : Adv ;+ friday_13th_Adv : Adv ;+ from_1988_to_1992_Adv : Adv ;+ in_1990_Adv : Adv ;+ in_1991_Adv : Adv ;+ in_1992_Adv : Adv ;+ in_1993_Adv : Adv ;+ in_1994_Adv : Adv ;+ in_a_few_weeks_Adv : Adv ;+ in_a_months_time_Adv : Adv ;+ in_july_1994_Adv : Adv ;+ in_march_Adv : Adv ;+ in_march_1993_Adv : Adv ;+ in_one_hour_Adv : Adv ;+ in_the_coming_year_Adv : Adv ;+ in_two_hours_Adv : Adv ;+ on_friday_Adv : Adv ;+ on_july_4th_1994_Adv : Adv ;+ on_july_8th_1994_Adv : Adv ;+ on_monday_Adv : Adv ;+ on_the_5th_of_may_1995_Adv : Adv ;+ on_the_7th_of_may_1995_Adv : Adv ;+ on_thursday_Adv : Adv ;+ on_tuesday_Adv : Adv ;+ on_wednesday_Adv : Adv ;+ since_1992_Adv : Adv ;+ in_the_past_Adv : Adv ;+ at_some_time_Adv : Adv ;+ at_the_same_time_Adv : Adv ;+ saturday_july_14th_Adv : Adv ;+ the_15th_of_may_1995_Adv : Adv ;+ year_1996_Adv : Adv ;++ every_month_Adv : Adv ;+ every_week_Adv : Adv ;+ last_week_Adv : Adv ;+ two_years_from_now_Adv : Adv ;+ at_least_four_times : Adv ;+ on_time_Adv : Adv ;++-- PREPOSITIONS+ at_Prep : Prep ;+ outside_Prep : Prep ;+ within_Prep : Prep ;+ than_Prep : Prep ;+ out_of_Prep : Prep ;++-- PREDETERMINERS+ at_least_Predet : Predet ;+ at_most_Predet : Predet ;+ exactly_Predet : Predet ;+ just_Predet : Predet ;+ most_of_Predet : Predet ;+ +-- CONJUNCTIONS+ andSg_Conj : Conj ;+ comma_and_Conj : Conj ;+ semicolon_and_Conj : Conj ;+ if_comma_then_Conj : Conj ;++ after_Subj : Subj ;+ before_Subj : Subj ;+ until_Subj : Subj ;+ while_Subj : Subj ;+ than_Subj : Subj ;+ since_Subj : Subj ;++ that_is_PConj : PConj ;+ and_PConj : PConj ;+ then_PConj : PConj ;++}
@@ -0,0 +1,569 @@+--# -path=.:alltenses++-- FraCaSLexEng: Concrete lexicon for the FraCaS test suite++concrete FraCaSLexEng of FraCaSLex = CatEng **+ open ParadigmsEng, (I=IrregEng), Prelude, MorphoEng, ResEng, (G=GrammarEng), (E=ExtraEng), (X=ConstructX) in {++lin+-- NOUNS+ accountant_N = mkN human (mkN "accountant") ;+ agenda_N = mkN "agenda" ;+ animal_N = mkN "animal" ;+ apcom_contract_N = mkN "APCOM contract" ;+ apcom_manager_N = mkN human (mkN "APCOM manager") ;+ auditor_N = mkN human (mkN "auditor") ;+ authority_N = mkN human (mkN "authority") ;+ board_meeting_N = mkN "board meeting" ;+ boss_N = mkN human (mkN "boss") ;+ business_N = mkN "business" ;+ businessman_N = mkN human (mkN "businessman" "businessmen") ;+ car_N = mkN "car" ;+ case_N = mkN "case" ;+ chain_N = mkN "chain" ;+ chairman_N = mkN human (mkN "chairman" "chairmen") ;+ chairman_N2 = mkN2 (mkN human (mkN "chairman" "chairmen")) (mkPrep "of") ;+ charity_N = mkN "charity" ;+ clause_N = mkN "clause" ;+ client_N = mkN human (mkN "client") ;+ colleague_N = mkN human (mkN "colleague") ;+ commissioner_N = mkN human (mkN "commissioner") ;+ committee_N = mkN "committee" ;+ committee_member_N = mkN human (mkN "committee member") ;+ company_N = mkN "company" ;+ company_car_N = mkN "company car" ;+ company_director_N = mkN human (mkN "company director") ;+ computer_N = mkN "computer" ;+ concert_N = mkN "concert" ;+ conference_N = mkN "conference" ;+ continent_N = mkN "continent" ;+ contract_N = mkN "contract" ;+ copy_N = mkN "copy" ;+ country_N = mkN "country" ;+ cover_page_N = mkN "cover page" ;+ customer_N = mkN human (mkN "customer") ;+ day_N = mkN "day" ;+ delegate_N = mkN human (mkN "delegate") ;+ demonstration_N = mkN "demonstration" ;+ department_N = mkN "department" ;+ desk_N = mkN "desk" ;+ diamond_N = mkN "diamond" ;+ editor_N = mkN human (mkN "editor") ;+ elephant_N = mkN "elephant" ;+ european_N = mkN human (mkN "European") ;+ executive_N = mkN human (mkN "executive") ;+ factory_N = mkN "factory" ;+ fee_N = mkN "fee" ;+ file_N = mkN "file" ;+ greek_N = mkN human (mkN "Greek") ;+ group_N2 = mkN2 (mkN "group") ;+ hard_disk_N = mkN "hard disk" ;+ heart_N = mkN "heart" ;+ hour_N = mkN "hour" ;+ house_N = mkN "house" ;+ individual_N = mkN human (mkN "individual") ;+ inhabitant_N2 = mkN2 (mkN human (mkN "inhabitant")) (mkPrep "of") ;+ invoice_N = mkN "invoice" ;+ irishman_N = mkN human (mkN "Irishman" "Irishmen") ;+ italian_N = mkN human (mkN "Italian") ;+ itel_computer_N = mkN "ITEL computer" ;+ itelxz_N = mkN "ITEL-XZ" ;+ itelzx_N = mkN "ITEL-ZX" ;+ itelzy_N = mkN "ITEL-ZY" ;+ item_N = mkN "item" ;+ job_N = mkN "job" ;+ labour_mp_N = mkN human (mkN "Labour MP") ;+ laptop_computer_N = mkN "laptop computer" ;+ law_lecturer_N = mkN human (mkN "law lecturer") ;+ lawyer_N = mkN human (mkN "lawyer") ;+ line_N = mkN "line" ;+ literature_N = mkN "literature" ;+ lobby_N = mkN "lobby" ;+ loss_N = mkN "loss" ;+ machine_N = mkN "machine" ;+ mammal_N = mkN "mammal" ;+ man_N = mkN human (mkN "man" "men") ;+ meeting_N = mkN "meeting" ;+ member_N = mkN human (mkN "member") ;+ member_state_N = mkN "member state" ;+ memoir_N = mkN "memoir" ;+ mips_N = mkN "MIPS" "MIPS" "MIPS'" "MIPS'" ;+ moment_N = mkN "moment" ;+ mortgage_interest_N = mkN "mortgage interest" ;+ mouse_N = mkN "mouse" "mice" ;+ newspaper_N = mkN "newspaper" ;+ nobel_prize_N = mkN "Nobel prize" ;+ nobel_prize_N2 = mkN2 (mkN "Nobel prize") (mkPrep "for") ;+ note_N = mkN "note" ;+ novel_N = mkN "novel" ;+ office_building_N = mkN "office building" ;+ one_N = mkN "one" ; + order_N = mkN "order" ;+ paper_N = mkN "paper" ;+ payrise_N = mkN "payrise" ;+ pc6082_N = mkN "PC-6082" ;+ performance_N = mkN "performance" ;+ person_N = mkN human (mkN "person" "people") ;+ philosopher_N = mkN human (mkN "philosopher") ;+ phone_N = mkN "phone" ;+ politician_N = mkN human (mkN "politician") ;+ popular_music_N = mkN "popular music" ;+ program_N = mkN "program" ;+ progress_report_N = mkN "progress report" ;+ project_proposal_N = mkN "project proposal" ;+ proposal_N = mkN "proposal" ;+ report_N = mkN "report" ;+ representative_N = mkN human (mkN "representative") ;+ resident_N = mkN human (mkN "resident") ;+ resident_in_N2 = mkN2 (mkN human (mkN "resident")) (mkPrep "of") ;+ resident_on_N2 = mkN2 (mkN human (mkN "resident")) (mkPrep "of") ;+ result_N = mkN "result" ;+ right_N = mkN "right" ;+ sales_department_N = mkN "sales department" ;+ scandinavian_N = mkN human (mkN "Scandinavian") ;+ secretary_N = mkN human (mkN "secretary") ;+ service_contract_N = mkN "service contract" ;+ shore_N = mkN "shore" ;+ software_fault_N = mkN "software fault" ;+ species_N = mkN "species" "species" ;+ station_N = mkN "station" ;+ stock_market_trader_N = mkN human (mkN "stock market trader") ;+ stockmarket_trader_N = mkN human (mkN "stock-market trader") ;+ story_N = mkN "story" ;+ student_N = mkN human (mkN "student") ;+ survey_N = mkN "survey" ;+ swede_N = mkN human (mkN "Swede") ;+ system_N = mkN "system" ;+ system_failure_N = mkN "system failure" ;+ taxi_N = mkN "taxi" ;+ temper_N = mkN "temper" ;+ tenor_N = mkN human (mkN "tenor") ;+ time_N = mkN "time" ;+ today_N = mkN "today" ;+ traffic_N = mkN "traffic" ;+ train_N = mkN "train" ;+ university_graduate_N = mkN human (mkN "university graduate") ;+ university_student_N = mkN human (mkN "university student") ;+ week_N = mkN "week" ;+ wife_N = mkN human (mkN "wife" "wives") ;+ woman_N = mkN human (mkN "woman" "women") ;+ workstation_N = mkN "workstation" ;+ world_N = mkN "world" ;+ year_N = mkN "year" ;+ +-- PROPER NOUNS+ alan_PN = mkPN "Alan" ;+ anderson_PN = mkPN "Anderson" ;+ apcom_PN = mkPN "APCOM" ;+ berlin_PN = mkPN "Berlin" ;+ bill_PN = mkPN "Bill" ;+ birmingham_PN = mkPN "Birmingham" ;+ bt_PN = mkPN "BT" ;+ bug_32985_PN = mkPN "Bug # 32-985" ;+ cambridge_PN = mkPN "Cambridge" ;+ carl_PN = mkPN "Carl" ;+ dumbo_PN = mkPN "Dumbo" ;+ europe_PN = mkPN "Europe" ;+ fido_PN = mkPN "Fido" ;+ florence_PN = mkPN "Florence" ;+ frank_PN = mkPN "Frank" ;+ gfi_PN = mkPN "GFI" ;+ helen_PN = mkPN "Helen" ;+ icm_PN = mkPN "ICM" ;+ itel_PN = mkPN "ITEL" ;+ john_PN = mkPN "John" ;+ jones_PN = mkPN (mkN "Jones" "-" "Jones'" "-") ;+ katmandu_PN = mkPN "Katmandu" ;+ kim_PN = mkPN "Kim" ;+ luxembourg_PN = mkPN "Luxembourg" ;+ mary_PN = mkPN "Mary" ;+ mfi_PN = mkPN "MFI" ;+ mickey_PN = mkPN "Mickey" ;+ mtalk_PN = mkPN "MTALK" ;+ paris_PN = mkPN (mkN "Paris" "-" "Paris'" "-") ;+ pavarotti_PN = mkPN "Pavarotti" ;+ peter_PN = mkPN "Peter" ;+ portugal_PN = mkPN "Portugal" ;+ r95103_PN = mkPN "R-95-103" ;+ scandinavia_PN = mkPN "Scandinavia" ;+ smith_PN = mkPN "Smith" ;+ southern_europe_PN = mkPN "southern Europe" ;+ sue_PN = mkPN "Sue" ;+ sweden_PN = mkPN "Sweden" ;+ the_cia_PN = mkPN "the CIA" ;+ the_m25_PN = mkPN "the M25" ;+ +-- PRONOUNS+ anyone_Pron = mkPron "anyone" "anyone" "anyone's" "anyone's" singular P3 human ;+ everyone_Pron = mkPron "everyone" "everyone" "everyone's" "everyone's" singular P3 human ;+ no_one_Pron = mkPron "no one" "no one" "no one's" "no one's" singular P3 human ;+ nobody_Pron = mkPron "nobody" "nobody" "nobody's" "nobody's" singular P3 human ;+ someone_Pron = mkPron "someone" "someone" "someone's" "someone's" singular P3 human ;+ sheRefl_Pron = G.she_Pron ;+ heRefl_Pron = G.he_Pron ;+ theyRefl_Pron = G.they_Pron ;+ itRefl_Pron = G.it_Pron ;++-- RELATIVE PRONOUNS+ that_RP = E.that_RP ;+ +-- ADJECTIVES+ ambitious_A = mkA "ambitious" ;+ ancient_A = compoundA (mkA "Ancient") ;+ asleep_A = mkA "asleep" ;+ blue_A = mkA "blue" ;+ british_A = mkA "British" ;+ broke_A = compoundA (mkA "broke") ;+ canadian_A = mkA "Canadian" ;+ clever_A = mkA "clever" "cleverer" ;+ competent_A = mkA "competent" ;+ crucial_A = mkA "crucial" ;+ dedicated_A = mkA "dedicated" ;+ different_A = mkA "different" ;+ employed_A = mkA "employed" ;+ excellent_A = mkA "excellent" ;+ false_A = mkA "false" ;+ fast_A = mkA "fast" ;+ fat_A = mkA "fat" ;+ female_A = mkA "female" ;+ former_A = mkA "former" ;+ fourlegged_A = mkA "four-legged" ;+ free_A = mkA "free" ;+ furious_A = mkA "furious" ;+ genuine_A = mkA "genuine" ;+ german_A = mkA "German" ;+ great_A = mkA "great" ;+ important_A = mkA "important" ;+ impressed_by_A2 = mkA2 "impressed" (mkPrep "by") ;+ indispensable_A = mkA "indispensable" ;+ interesting_A = mkA "interesting" ;+ irish_A = compoundA (mkA "Irish") ;+ italian_A = mkA "Italian" ;+ known_A = compoundA (mkA "known") ;+ large_A = mkA "large" ;+ leading_A = mkA "leading" ;+ legal_A = mkA "legal" ;+ likely_A = mkA "likely" "likelier" ;+ major_A = mkA "major" ;+ male_A = compoundA (mkA "male") ;+ many_A = mkA "many" "more" "most" "mostly" ;+ missing_A = mkA "missing" ;+ modest_A = mkA "modest" ;+ national_A = mkA "national" ;+ new_A = mkA "new" ;+ north_american_A = mkA "North American" ;+ noted_A = mkA "noted" ;+ own_A = compoundA (mkA "own") ;+ poor8bad_A = mkA "poor" ;+ poor8penniless_A = mkA "poor" ;+ portuguese_A = mkA "Portuguese" ;+ present8attending_A = mkA "present" ;+ present8current_A = mkA "present" ;+ previous_A = mkA "previous" ;+ red_A = mkA "red" ;+ resident_A = mkA "resident" ;+ scandinavian_A = mkA "Scandinavian" ;+ serious_A = compoundA (mkA "serious") ;+ slow_A = mkA "slow" ;+ small_A = mkA "small" ;+ successful_A = mkA "successful" ;+ swedish_A = mkA "Swedish" ;+ true_A = mkA "true" ;+ unemployed_A = mkA "unemployed" ;+ western_A = mkA "western" ;+ +-- VERBS+ accept_V2 = mkV2 "accept" ;+ allow_V2V = mkV2V (mkV "allow") noPrep (mkPrep "to") ;+ answer_V2 = mkV2 (mkV "answer" "answered") ;+ appoint_V2 = mkV2 "appoint" ;+ arrive_in_V2 = mkV2 (mkV "arrive") (mkPrep "in") ;+ attend_V2 = mkV2 "attend" ;+ award_V3 = mkV3 "award" ;+ beat_V = I.beat_V ;+ become_V2 = mkV2 I.become_V ;+ believe_VS = mkVS (mkV "believe") ;+ blame1_V2 = mkV2 "blame" ;+ blame2_V2 = mkV2 "blame" ;+ bring_V2V = mkV2V I.bring_V noPrep (mkPrep "to") ;+ build_V2 = mkV2 I.build_V ;+ buy_V2 = mkV2 I.buy_V ;+ catch_V2 = mkV2 I.catch_V ;+ chair_V2 = mkV2 "chair" ;+ claim_VS = mkVS (mkV "claim") ;+ come_cheap_VP = G.UseV (partV I.come_V "cheap") ;+ come_in_V = partV I.come_V "in" ;+ continue_V = mkV "continue" ;+ contribute_to_V3 = mkV3 (mkV "contribute") (mkPrep "to") ;+ cost_V2 = mkV2 "cost" ;+ crash_V = mkV "crash" ;+ cross_out_V2 = mkV2 (partV (mkV "cross") "out") ;+ deliver_V2 = mkV2 (mkV "deliver" "delivered") ;+ deliver_V3 = mkV3 (mkV "deliver" "delivered") ;+ destroy_V2 = mkV2 "destroy" ;+ develop_V2 = mkV2 (mkV "develop" "developed") ;+ discover_V2 = mkV2 (mkV "discover" "discovered") ;+ discover_VS = mkVS (mkV "discover" "discovered") ;+ dupe_V2 = mkV2 "dupe" ;+ do_VV = E.do_VV ;+ exist_V = mkV "exist" ;+ expand_V = mkV "expand" ;+ find_V2 = mkV2 I.find_V ;+ finish_V2 = mkV2 "finish" ;+ finish_VV = ingVV (mkV "finish") ;+ found_V2 = mkV2 "found" ;+ gamble_V = mkV "gamble" ;+ get_V2 = mkV2 I.get_V ;+ going_to_VV = mkVV I.go_V ;+ go8travel_V = I.go_V ;+ go8walk_V = I.go_V ;+ graduate_V = mkV "graduate" ;+ hate_V2 = mkV2 "hate" ;+ hurt_V2 = mkV2 I.hurt_V ;+ increase_V = mkV "increase" ;+ know_VQ = mkVQ (mkV "know" "knew" "known") ; -- misrepresented in IrregEng.gf+ know_VS = mkVS (mkV "know" "knew" "known") ; -- misrepresented in IrregEng.gf+ last_V2 = mkV2 (mkV "last") ;+ leave_V = I.leave_V ;+ leave_V2 = mkV2 I.leave_V ;+ like_V2 = mkV2 "like" ;+ live_V = mkV "live" ;+ lose_V2 = mkV2 I.lose_V ;+ maintain_V2 = mkV2 "maintain" ;+ make8become_V2 = mkV2 I.make_V ;+ make8do_V2 = mkV2 I.make_V ;+ manage_VV = mkVV (mkV "manage") ;+ meet_V = I.meet_V ;+ need_V2 = mkV2 "need" ;+ need_VV = mkVV (mkV "need") ;+ obtain_from_V3 = mkV3 (mkV "obtain") (mkPrep "from") ;+ open_V2 = mkV2 (mkV "open" "opened") ;+ own_V2 = mkV2 "own" ;+ pay_V2 = mkV2 I.pay_V ;+ publish_V2 = mkV2 "publish" ;+ put_in_V3 = mkV3 I.put_V (mkPrep "in") ;+ read_V2 = mkV2 I.read_V ;+ read_out_V2 = mkV2 (partV I.read_V "out") ;+ remove_V2 = mkV2 "remove" ;+ rent_from_V3 = mkV3 (mkV "rent") (mkPrep "from") ;+ represent_V2 = mkV2 "represent" ;+ revise_V2 = mkV2 "revise" ;+ run_V2 = mkV2 I.run_V ;+ say_VS = mkVS I.say_V ;+ see_V2V = mkV2V I.see_V noPrep noPrep ;+ sell_V2 = mkV2 I.sell_V ;+ send_V2 = mkV2 I.send_V ;+ shall_VV = {+ s = table {+ VVF VInf => ["shall"] ; -- what to do with these forms?+ VVF VPres => "shall" ;+ VVF VPPart => ["should"] ;+ VVF VPresPart => ["should"] ; -- what to do with these forms?+ VVF VPast => ["should"] ;+ VVPastNeg => ["shouldn't"] ;+ VVPresNeg => "shan't"+ } ;+ typ = VVAux+ } ; + sign_V2 = mkV2 "sign" ;+ sing_V2 = mkV2 I.sing_V ;+ speak_to_V2 = mkV2 I.speak_V (mkPrep "to");+ spend_V2 = mkV2 I.spend_V ;+ start_V = mkV "start" ;+ start_VV = ingVV (mkV "start") ;+ stop_V = mkV "stop" ;+ suggest_to_V2S = mkV2S (mkV "suggest") (mkPrep "to") ;+ swim_V = I.swim_V ;+ take_V2V = mkV2V I.take_V noPrep (mkPrep "to") ;+ take_V2 = mkV2 I.take_V ;+ take_part_in_V2 = mkV2 (partV I.take_V "part") (mkPrep "in") ;+ tell_about_V3 = mkV3 I.tell_V (mkPrep "about") ;+ travel_V = mkV "travel" "travelled" ;+ try_VV = mkVV (mkV "try") ;+ update_V2 = mkV2 "update" ;+ use_V2 = mkV2 "use" ;+ use_VV = mkVV (mkV "used" "used" "used" "used" "used") ; -- e.g. "X used to Y", "X did used to Y"+ vote_for_V2 = mkV2 (mkV "vote") (mkPrep "for") ;+ win_V2 = mkV2 I.win_V ;+ work_V = mkV "work" ;+ work_in_V2 = mkV2 work_V (mkPrep "in") ;+ write_V2 = mkV2 I.write_V ;+ write_to_V2 = mkV2 I.write_V (mkPrep "to") ;++ award_and_be_awarded_V2 = mkV2 (mkV "award and be awarded" + "awards and is awarded" + "awarded and was awarded"+ "awarded and been awarded"+ "awarding and been awarding") ;++-- DETERMINERS+ a_few_Det = mkDeterminer plural "a few" ;+ a_lot_of_Det = mkDeterminer singular "a lot of" ;+ another_Det = mkDeterminer singular "another" ;+ anyPl_Det = mkDeterminer plural "any" ;+ anySg_Det = mkDeterminer singular "any" ;+ both_Det = mkDeterminer plural "both" ;+ each_Det = E.each_Det ;+ either_Det = mkDeterminer singular "either" ;+ neither_Det = mkDeterminer singular "neither" ;+ one_or_more_Det = mkDeterminer plural "one or more" ;+ several_Det = mkDeterminer plural "several" ;+ twice_as_many_Det = mkDeterminer plural "twice as many" ;++ half_a_Card = {s = \\c => "half a"; n = Sg} ;++ the_other_Q = mkQuant "the other" "the other" ;++-- NUMERALS++oper+ selectSub20 : {s : DForm => CardOrd => ResEng.Case => Str} -> DForm -> Numeral ;+ selectSub20 num dform = lin Numeral {s = num.s ! dform; n = plural} ;++ prefixNumeral : Str -> {s : CardOrd => ResEng.Case => Str; n : ResEng.Number} -> Numeral ;+ prefixNumeral prefix num = lin Numeral {s = \\o,c => prefix + num.s ! o ! c; n = num.n} ;++lin+ N_one = {s = G.pot01.s ! unit; n = singular} ;+ N_two = selectSub20 G.n2 unit ;+ N_three = selectSub20 G.n3 unit ;+ N_four = selectSub20 G.n4 unit ;+ N_five = selectSub20 G.n5 unit ;+ N_six = selectSub20 G.n6 unit ;+ N_eight = selectSub20 G.n8 unit ;+ N_ten = selectSub20 G.pot01 ten ;+ N_eleven = selectSub20 G.pot01 teen ;+ N_sixteen = selectSub20 G.n6 teen ;+ N_twenty = selectSub20 G.n2 ten ;+ N_fortyfive = {s = \\o,c => "forty" ++ N_five.s ! o ! c; n = plural} ;++ N_2 = G.D_2 ;+ N_4 = G.D_4 ;+ N_8 = G.D_8 ;+ N_10 = prefixNumeral "1" G.D_0 ;+ N_13 = prefixNumeral "1" G.D_3 ;+ N_14 = prefixNumeral "1" G.D_4 ;+ N_15 = prefixNumeral "1" G.D_5 ;+ N_99 = prefixNumeral "9" G.D_9 ;+ N_100 = prefixNumeral "10" G.D_0 ;+ N_150 = prefixNumeral "15" G.D_0 ;+ N_500 = prefixNumeral "50" G.D_0 ;+ N_2500 = prefixNumeral "250" G.D_0 ;+ N_3000 = prefixNumeral "300" G.D_0 ;+ N_5500 = prefixNumeral "550" G.D_0 ;++ +-- ADVERBS+ anywhere_Adv = mkAdv "anywhere" ;+ ever_since_Adv = mkAdv "ever since" ;+ late_Adv = mkAdv "late" ;+ long_Adv = mkAdv "long" ;+ over_Adv = mkAdv "over" ; + part_time_Adv = mkAdv "part time" ;+ together_Adv = mkAdv "together" ;+ too_Adv = mkAdv "too" ;+ twice_Adv = mkAdv "twice" ;+ yesterday_Adv = mkAdv "yesterday" ;++ at_home_Adv = mkAdv "at home" ;++ all_AdV = mkAdV "all" ;+ already_AdV = mkAdV "already" ;+ also_AdV = mkAdV "also" ;+ currently_AdV = mkAdV "currently" ;+ ever_AdV = mkAdV "ever" ;+ never_AdV = mkAdV "never" ;+ now_AdV = mkAdV "now" ;+ still_AdV = mkAdV "still" ;++ really_AdA = mkAdA "really" ;++ more_than_AdN = mkAdN "more than" ;+ less_than_AdN = mkAdN "less than" ;++-- TIME & DATE EXPRESSIONS+ at_8_am_Adv = mkAdv "at 8 am" ;+ at_a_quarter_past_five_Adv = mkAdv "at a quarter past five" ;+ at_five_oclock_Adv = mkAdv "at five o'clock" ;+ at_four_oclock_Adv = mkAdv "at four o'clock" ;+ at_least_four_times = mkAdv "at least four times" ;+ at_some_time_Adv = mkAdv "at some time" ;+ at_the_same_time_Adv = mkAdv "at the same time" ;+ by_11_am_Adv = mkAdv "by 11 am" ;+ every_month_Adv = mkAdv "every month" ;+ every_week_Adv = mkAdv "every week" ;+ for_8_years_Adv = mkAdv "for 8 years" ;+ for_a_total_of_15_years_or_more_Adv = mkAdv "for a total of 15 years or more" ;+ for_a_year_Adv = mkAdv "for a year" ;+ for_an_hour_Adv = mkAdv "for an hour" ;+ for_exactly_a_year_Adv = mkAdv "for exactly a year" ;+ for_more_than_10_years_Adv = mkAdv "for more than 10 years" ;+ for_more_than_two_years_Adv = mkAdv "for more than two years" ;+ for_three_days_Adv = mkAdv "for three days" ;+ for_two_hours_Adv = mkAdv "for two hours" ;+ for_two_years_Adv = mkAdv "for two years" ;+ friday_13th_Adv = mkAdv "Friday , 13th" ;+ from_1988_to_1992_Adv = mkAdv "from 1988 to 1992" ;+ in_1990_Adv = mkAdv "in 1990" ;+ in_1991_Adv = mkAdv "in 1991" ;+ in_1992_Adv = mkAdv "in 1992" ;+ in_1993_Adv = mkAdv "in 1993" ;+ in_1994_Adv = mkAdv "in 1994" ;+ in_a_few_weeks_Adv = mkAdv "in a few weeks" ;+ in_a_months_time_Adv = mkAdv "in a month's time" ;+ in_july_1994_Adv = mkAdv "in July 1994" ;+ in_march_1993_Adv = mkAdv "in March 1993" ;+ in_march_Adv = mkAdv "in March" ;+ in_one_hour_Adv = mkAdv "in one hour" ;+ in_the_coming_year_Adv = mkAdv "in the coming year" ;+ in_the_past_Adv = mkAdv "in the past" ;+ in_two_hours_Adv = mkAdv "in two hours" ;+ last_week_Adv = mkAdv "last week" ;+ on_friday_Adv = mkAdv "on Friday" ;+ on_july_4th_1994_Adv = mkAdv "on July 4th , 1994" ;+ on_july_8th_1994_Adv = mkAdv "on July 8th , 1994" ;+ on_monday_Adv = mkAdv "on Monday" ;+ on_the_5th_of_may_1995_Adv = mkAdv "on the 5th of May , 1995" ;+ on_the_7th_of_may_1995_Adv = mkAdv "on the 7th of May , 1995" ;+ on_thursday_Adv = mkAdv "on Thursday" ;+ on_tuesday_Adv = mkAdv "on Tuesday" ;+ on_wednesday_Adv = mkAdv "on Wednesday" ;+ saturday_july_14th_Adv = mkAdv "Saturday , July 14th" ;+ since_1992_Adv = mkAdv "since 1992" ;+ the_15th_of_may_1995_Adv = mkAdv "the 15th of May , 1995" ;+ two_years_from_now_Adv = mkAdv "two years from now" ;+ year_1996_Adv = mkAdv "1996" ;+ on_time_Adv = mkAdv "on time" ;++-- PREPOSITIONS+ at_Prep = mkPrep "at" ;+ out_of_Prep = mkPrep "out of" ;+ outside_Prep = mkPrep "outside" ;+ than_Prep = mkPrep "than" ;+ within_Prep = mkPrep "within" ;++-- PREDETERMINERS+ at_least_Predet = ss "at least" ;+ at_most_Predet = ss "at most" ;+ exactly_Predet = ss "exactly" ;+ just_Predet = ss "just" ;+ most_of_Predet = ss "most of" ;++-- CONJUNCTIONS+ andSg_Conj = mkConj "and" singular ;+ comma_and_Conj = mkConj ", and" ;+ if_comma_then_Conj = mkConj "if" ", then" singular ;+ semicolon_and_Conj = mkConj "; and" ;++ after_Subj = mkSubj "after" ;+ before_Subj = mkSubj "before" ;+ since_Subj = mkSubj "since" ; + than_Subj = mkSubj "than" ; + until_Subj = mkSubj "until" ;+ while_Subj = mkSubj "while" ;++ that_is_PConj = ss "that is ,";+ and_PConj = ss "and" ;+ then_PConj = ss "then" ;++}
@@ -0,0 +1,585 @@+--# -path=.:alltenses++-- FraCaSLexSwe: Concrete lexicon for the FraCaS test suite++concrete FraCaSLexSwe of FraCaSLex = CatSwe **+ open ParadigmsSwe, (I=IrregSwe), Prelude, MorphoSwe, ResSwe, (G=GrammarSwe) in {++lin+-- NOUNS+ accountant_N = mkN "bokförare" Utr ; -- för att skilja från 'auditor'-'revisor'+ agenda_N = mkN "dagordning" Utr ;+ animal_N = mkN "djur" Neutr ;+ apcom_contract_N = mkN "APCOM-kontrakt" Neutr ;+ apcom_manager_N = mkN "APCOM-direktör" "APCOM-direktörer" ;+ auditor_N = mkN "revisor" "revisorer" ;+ authority_N = mkN "fackman" "fackmannen" "fackmän" "fackmännen" ;+ board_meeting_N = mkN "styrelsemöte" Neutr ;+ boss_N = mkN "chef" "chefer" ;+ business_N = mkN "affärsverksamhet" "affärsverksamheter" ;+ businessman_N = mkN "affärsman" "affärsmannen" "affärsmän" "affärsmännen" ;+ car_N = mkN "bil" Utr ;+ case_N = mkN "fall" Neutr ;+ chain_N = mkN "kedja" Utr ;+ chairman_N = mkN "ordförande" "ordföranden" "ordförande" "ordförandena" ;+ chairman_N2 = mkN2 chairman_N (mkPrep "för") ;+ charity_N = mkN "välgörenhet" "välgörenheter" ;+ clause_N = mkN "paragraf" "paragrafer" ;+ client_N = mkN "klient" "klienter" ;+ colleague_N = mkN "kollega" Utr ;+ commissioner_N = mkN "ombud" Neutr ;+ committee_N = mkN "kommitté" "kommittén" "kommittéer" "kommittéerna" ;+ committee_member_N = mkN "kommittémedlem" "kommittémedlemmen" "kommittémedlemmar" "kommittémedlemmarna" ;+ company_N = mkN "företag" Neutr ;+ company_car_N = mkN "tjänstebil" Utr ;+ company_director_N = mkN "företagsledare" Utr ;+ computer_N = mkN "dator" "datorer" ;+ concert_N = mkN "konsert" "konserter" ;+ conference_N = mkN "konferens" "konferenser" ;+ continent_N = mkN "kontinent" "kontinenter" ;+ contract_N = mkN "kontrakt" Neutr ;+ copy_N = mkN "kopia" Utr ;+ country_N = mkN "land" "landet" "länder" "länderna" ;+ cover_page_N = mkN "förstasida" Utr ;+ customer_N = mkN "kund" "kunder" ;+ day_N = mkN "dag" Utr ;+ delegate_N = mkN "delegat" "delegater" ;+ demonstration_N = mkN "presentation" "presentationer" ;+ department_N = mkN "avdelning" Utr ;+ desk_N = mkN "skrivbord" Neutr ;+ diamond_N = mkN "diamant" "diamanter" ;+ editor_N = mkN "redigerare" Utr ;+ elephant_N = mkN "elefant" "elefanter" ;+ european_N = mkN "europé" "europén" "européer" "européerna" ;+ executive_N = mkN "företagsledare" Utr ;+ factory_N = mkN "fabrik" "fabriker" ;+ fee_N = mkN "arvode" Neutr ;+ file_N = mkN "fil" "filer" ;+ greek_N = mkN "grek" "greker" ;+ group_N2 = mkN2 (mkN "grupp" "grupper") noPrep ;+ hard_disk_N = mkN "hårddisk" Utr ;+ heart_N = mkN "hjärta" "hjärtat" "hjärtan" "hjärtana" ;+ hour_N = mkN "timme" Utr ;+ house_N = mkN "hus" Neutr ;+ individual_N = mkN "individ" "individer" ;+ inhabitant_N2 = mkN2 (mkN "invånare" "invånare") (mkPrep "i") ;+ invoice_N = mkN "faktura" Utr ;+ irishman_N = mkN "irländare" Utr ;+ italian_N = mkN "italienare" "italienare" ;+ itel_computer_N = mkN "ITEL-dator" "ITEL-datorer" ;+ itelxz_N = mkN "ITEL-XZ" "ITEL-XZ:an" "ITEL-XZ:ar" "ITEL-XZ:arna" ;+ itelzx_N = mkN "ITEL-ZX" "ITEL-ZX:an" "ITEL-ZX:ar" "ITEL-ZX:arna" ;+ itelzy_N = mkN "ITEL-ZY" "ITEL-ZY:an" "ITEL-ZY:ar" "ITEL-ZY:arna" ;+ item_N = mkN "punkt" "punkter" ;+ job_N = mkN "jobb" Neutr ;+ labour_mp_N = mkN "Labour-ledamot" "Labour-ledamöter" ;+ laptop_computer_N = mkN "laptop" Utr ;+ law_lecturer_N = mkN "juridiklärare" "juridiklärare" ;+ lawyer_N = mkN "jurist" "jurister" ;+ line_N = mkN "linje" "linjer" ;+ literature_N = mkN "litteratur" "litteraturer" ;+ lobby_N = mkN "vestibul" "vestibuler" ;+ loss_N = mkN "förlust" "förluster" ;+ machine_N = mkN "maskin" "maskiner" ;+ mammal_N = mkN "däggdjur" Neutr ;+ man_N = mkN "man" "mannen" "män" "männen" ;+ meeting_N = mkN "möte" Neutr ;+ member_N = mkN "medlem" "medlemmen" "medlemmar" "medlemmarna" ;+ member_state_N = mkN "medlemsstat" "medlemsstater" ;+ memoir_N = mkN "memoar" "memoarer" ;+ mips_N = mkN "MIPS" "MIPS" "MIPS" "MIPS" ;+ moment_N = mkN "ögonblick" Neutr ;+ mortgage_interest_N = mkN "hypoteksränta" Utr ;+ mouse_N = mkN "mus" "musen" "möss" "mössen" ;+ newspaper_N = mkN "tidning" Utr ;+ nobel_prize_N = mkN "nobelpris" Neutr ;+ nobel_prize_N2 = mkN2 nobel_prize_N (mkPrep "i") ;+ note_N = mkN "anteckning" Utr ;+ novel_N = mkN "roman" "romaner" ;+ office_building_N = mkN "kontorsbyggnad" "kontorsbyggnader" ;+ one_N = mkN "en" Utr ; + order_N = mkN "order" "ordern" "order" "orderna" ;+ paper_N = mkN "uppsats" "uppsatser" ;+ payrise_N = mkN "löneförhöjning" Utr ;+ pc6082_N = mkN "PC-6082" "PC-6082:an" "PC-6082:or" "PC-6082:orna" ;+ performance_N = mkN "utförande" Neutr ;+ person_N = mkN "människa" Utr ;+ philosopher_N = mkN "filosof" "filosofer" ;+ phone_N = mkN "telefon" Utr ;+ politician_N = mkN "politiker" "politikern" "politiker" "politikerna" ;+ popular_music_N = mkN "populärmusik" "populärmusiken" "populärmusik" "populärmusiken" ;+ program_N = mkN "program" "programmet" "program" "programmen" ;+ progress_report_N = mkN "statusrapport" "statusrapporter" ;+ project_proposal_N = mkN "projektförslag" Neutr ;+ proposal_N = mkN "förslag" Neutr ;+ report_N = mkN "rapport" "rapporter" ;+ representative_N = mkN "representant" "representanter" ;+ resident_N = mkN "invånare" "invånare" ;+ resident_in_N2 = mkN2 resident_N (mkPrep "i") ;+ resident_on_N2 = mkN2 resident_N (mkPrep "på") ;+ result_N = mkN "resultat" Neutr ;+ right_N = mkN "rätt" "rätten" "rättigheter" "rättigheterna" ;+ sales_department_N = mkN "försäljningsavdelning" Utr ;+ scandinavian_N = mkN "skandinav" "skandinaver" ;+ secretary_N = mkN "sekreterare" Utr ;+ service_contract_N = mkN "servicekontrakt" Neutr ;+ shore_N = mkN "strand" "stränder" ;+ software_fault_N = mkN "programvarufel" "programvarufel" ;+ species_N = mkN "art" "arter" ;+ station_N = mkN "station" "stationer" ;+ stock_market_trader_N = mkN "aktiehandlare" "aktiehandlare" ;+ stockmarket_trader_N = mkN "aktiehandlare" Utr ;+ story_N = mkN "berättelse" "berättelser" ;+ student_N = mkN "student" "studenter" ;+ survey_N = mkN "undersökning" Utr ;+ swede_N = mkN "svensk" Utr ;+ system_N = mkN "system" Neutr ;+ system_failure_N = mkN "systemkrasch" "systemkrascher" ;+ taxi_N = mkN "taxi" "taxin" "taxibilar" "taxibilarna" ;+ temper_N = mkN "humör" Neutr ;+ tenor_N = mkN "tenor" "tenorer" ;+ time_N = mkN "tid" "tider" ; -- 'tidpunkt' behövs ev. också+ today_N = mkN "idag" ;+ traffic_N = mkN "trafik" "trafiken" "trafik" "trafiken" ;+ train_N = mkN "tåg" Neutr ;+ university_graduate_N = (mkN "universitetsakademiker" "universitetsakademikern" + "universitetsakademiker" "universitetsakademikerna") ;+ university_student_N = mkN "universitetsstudent" "universitetsstudenter" ;+ week_N = mkN "vecka" Utr ;+ wife_N = mkN "fru" "fruar" ;+ woman_N = mkN "kvinna" Utr ;+ workstation_N = mkN "arbetsstation" "arbetsstationer" ;+ world_N = mkN "värld" Utr ;+ year_N = mkN "år" Neutr ;++-- PROPER NOUNS+ --march_PN = mkPN "mars" ;+ --may_PN = mkPN "maj" ;+ alan_PN = mkPN "Alan" ;+ anderson_PN = mkPN "Anderson" ;+ apcom_PN = mkPN "APCOM" ;+ berlin_PN = mkPN "Berlin" ;+ bill_PN = mkPN "Bill" ;+ birmingham_PN = mkPN "Birmingham" ;+ bt_PN = mkPN "BT" ;+ bug_32985_PN = mkPN "Bug # 32-985" ;+ cambridge_PN = mkPN "Cambridge" ;+ carl_PN = mkPN "Carl" ;+ dumbo_PN = mkPN "Dumbo" ;+ europe_PN = mkPN "Europa" ;+ fido_PN = mkPN "Fido" ;+ florence_PN = mkPN "Florens" ;+ frank_PN = mkPN "Frank" ;+ gfi_PN = mkPN "GFI" ;+ helen_PN = mkPN "Helen" ;+ icm_PN = mkPN "ICM" ;+ itel_PN = mkPN "ITEL" ;+ john_PN = mkPN "John" ;+ jones_PN = mkPN "Jones" ;+ katmandu_PN = mkPN "Katmandu" ;+ kim_PN = mkPN "Kim" ;+ luxembourg_PN = mkPN "Luxemburg" ;+ mary_PN = mkPN "Mary" ;+ mfi_PN = mkPN "MFI" ;+ mickey_PN = mkPN "Mickey" ;+ mtalk_PN = mkPN "MTALK" ;+ paris_PN = mkPN "Paris" ;+ pavarotti_PN = mkPN "Pavarotti" ;+ peter_PN = mkPN "Peter" ;+ portugal_PN = mkPN "Portugal" ;+ r95103_PN = mkPN "R-95-103" ;+ scandinavia_PN = mkPN "Skandinavien" ;+ smith_PN = mkPN "Smith" ;+ southern_europe_PN = mkPN "södra Europa" ;+ sue_PN = mkPN "Sue" ;+ sweden_PN = mkPN "Sverige" ;+ the_cia_PN = mkPN "CIA" ;+ the_m25_PN = mkPN "M25:an" ;+ +-- PRONOUNS+ anyone_Pron = regNP "någon" "någons" Utr Sg ;+ everyone_Pron = regNP "alla" "allas" Utr Pl ;+ no_one_Pron = regNP "ingen" "ingens" Utr Sg ;+ nobody_Pron = regNP "ingen" "ingens" Utr Sg ;+ someone_Pron = regNP "någon" "någons" Utr Sg ;+ sheRefl_Pron = mkNP "hon" "sig" "sin" "sitt" "sina" Utr Sg P3 ;+ heRefl_Pron = mkNP "han" "sig" "sin" "sitt" "sina" Utr Sg P3 ;+ theyRefl_Pron = mkNP "de" "sig" "sin" "sitt" "sina" Utr Pl P1 ;+ itRefl_Pron = mkNP "det" "sig" "sin" "sitt" "sina" Neutr Sg P3 ;++-- RELATIVE PRONOUNS+ that_RP = G.IdRP ;++-- ADJECTIVES+ ambitious_A = compoundA (mkA "ärelysten" "ärelystet") ;+ ancient_A = compoundA (mkA "antik") ;+ asleep_A = compoundA (mkA "sovande") ;+ blue_A = mkA "blå" "blått" ;+ british_A = compoundA (mkA "brittisk") ;+ broke_A = mkA "pank" ;+ canadian_A = compoundA (mkA "kanadensisk") ;+ clever_A = mkA "smart" "smart" ;+-- mkA "begåvad" "begåvat" "begåvade" "begåvade" "mer begåvad" "mest begåvad" "mest begåvade" ;+ competent_A = compoundA (mkA "kompetent" "kompetent") ;+ crucial_A = compoundA (mkA "kritisk") ;+ dedicated_A = mkA "särskild" "särskilt" ;+ different_A = compoundA (mkA "olik") ;+ employed_A = compoundA (mkA "anställd" "anställt") ;+ excellent_A = mkA "förträfflig" ;+ false_A = mkA "inte sann" "inte sant" ;+ fast_A = mkA "snabb" ;+ fat_A = mkA "fet" "fett" ;+ female_A = mkA "kvinnlig" ;+ former_A = compoundA (mkA "före detta") ;+ fourlegged_A = mkA "fyrbent" "fyrbent" ;+ free_A = mkA "fri" "fritt" ;+ furious_A = compoundA (mkA "rasande") ;+ genuine_A = compoundA (mkA "äkta") ;+ german_A = mkA "tysk" ;+ great_A = compoundA (mkA "framstående") ;+ important_A = mkA "viktig" ;+ impressed_by_A2 = mkA2 (mkA "imponerad" "imponerat" "imponerade" "imponerade" "mer imponerad" "mest imponerad" "mest imponerade") (mkPrep "av") ;+ indispensable_A = mkA "oumbärlig" ;+ interesting_A = mkA "intressant" "intressant" ;+ irish_A = compoundA (mkA "irländsk") ;+ italian_A = compoundA (mkA "italiensk") ;+ known_A = mkA "känd" "känt" ; -- jfr 'noted'+ large_A = mkA "stor" "större" "störst" ;+ leading_A = compoundA (mkA "ledande") ;+ legal_A = compoundA (mkA "juridisk") ;+ likely_A = compoundA (mkA "sannolik") ; + major_A = mkA "större" "större" "större" "större" "större" "större" "större" ;+ male_A = mkA "manlig" ;+ many_A = mkA "mycken" "mycket" "myckna" "mer" "mest" ;+ missing_A = compoundA (mkA "försvunnen" "försvunnet" "försvunna" "försvunnare" "försvunnast") ;+ modest_A = mkA "blygsam" "blygsamt" "blygsamma" "blygsamma" "blygsammare" "blygsammast" "blygsammaste" ;+ national_A = compoundA (mkA "nationell") ;+ new_A = mkA "ny" "nytt" ;+ north_american_A = compoundA (mkA "nordamerikansk") ;+ noted_A = compoundA (mkA "välkänd") ;+ own_A = mkA "egen" "eget" ;+ poor8bad_A = mkA "dålig" "sämre" "sämst" ;+ poor8penniless_A = mkA "fattig" ;+ portuguese_A = compoundA (mkA "portugisisk") ;+ present8attending_A = compoundA (mkA "närvarande") ;+ present8current_A = compoundA (mkA "nuvarande") ;+ previous_A = compoundA (mkA "förra") ;+ red_A = mkA "röd" "rött" ;+ resident_A = compoundA (mkA "bosatt") ;+ scandinavian_A = compoundA (mkA "skandinavisk") ;+ serious_A = mkA "seriös" ;+ slow_A = mkA "långsam" "långsamt" "långsamma" "långsamma" "långsammare" "långsammast" "långsammaste" ;+ small_A = mkA "liten" "litet" "lilla" "små" "mindre" "minst" "minsta" ;+ successful_A = compoundA (mkA "framgångsrik") ;+ swedish_A = mkA "svensk" ;+ true_A = mkA "sann" "sant" ;+ unemployed_A = compoundA (mkA "arbetslös") ;+ western_A = compoundA (mkA "västerländsk") ;++-- VERBS+oper taga_V : V = mkV "ta" "tar" "ta" "tog" "tagit" "tagen" ;+lin+ accept_V2 = mkV2 (mkV "godkänna" "godkände" "godkänt") ;+ allow_V2V = mkV2V (mkV "tillåta" "tillät" "tillåtit") noPrep noPrep ;+ answer_V2 = mkV2 "svarar" (mkPrep "i") ;+ appoint_V2 = mkV2 "utnämner" ;+ arrive_in_V2 = mkV2 (mkV "anländer") (mkPrep "till") ;+ attend_V2 = mkV2 "närvarar" (mkPrep "vid") ;+ award_V3 = mkV3 (mkV "tilldelar") ;+-- be_on_V2 = mkV2 I.ligga_V (mkPrep "på") ;+-- be_over_V = partV be_V "over" ;+ beat_V = I.slå_V ;+ become_V2 = mkV2 I.bliva_V ;+ believe_VS = mkVS (mkV "tror") ;+ blame1_V2 = mkV2 "beskyller" ;+ blame2_V2 = mkV2 "skyller" ;+-- blame_for_V3 = mkV3 (mkV "anklagar") (mkPrep "för") ;+-- blame_on_V3 = mkV3 (mkV "skyller") (mkPrep "på") ;+ bring_V2V = mkV2V (partV taga_V "med") noPrep noPrep ;+ build_V2 = mkV2 "tillverkar" ;+ buy_V2 = mkV2 "köper" ;+ catch_V2 = mkV2 (partV I.komma_V "med") ;+ chair_V2 = mkV2 (mkV "leda" "ledde" "lett") ;+ claim_VS = mkVS (mkV "påstå" "påstod" "påstått") ;+ come_cheap_VP = G.UseComp (G.CompAP (G.PositA (mkA "billig"))) ;+ come_in_V = partV I.komma_V "in" ;+ continue_V = mkV "fortsätta" "fortsätter" "fortsätt" "fortsatte" "fortsatt" "fortsatt" ;+ contribute_to_V3 = mkV3 I.giva_V (mkPrep "till") ;+ cost_V2 = mkV2 "kostnadsberäknar" ;+ crash_V = mkV "kraschar" ;+ cross_out_V2 = mkV2 (partV (mkV "stryka" "strök" "strukit") "över") ;+ deliver_V2 = mkV2 "lämnar" ;+ deliver_V3 = mkV3 I.giva_V ;+ destroy_V2 = mkV2 (mkV "förstöra" "förstör" "förstör" "förstörde" "förstört" "förstörd") ;+ develop_V2 = mkV2 "utvecklar" ;+ discover_V2 = mkV2 "upptäcker" ;+ discover_VS = mkVS (mkV "upptäcker") ;+ dupe_V2 = mkV2 "lurar" ;+ exist_V = depV I.finna_V ;+ expand_V = mkV "expanderar" ;+ find_V2 = mkV2 "hittar" ;+ finish_V2 = mkV2 (mkV "slutföra" "slutförde" "slutfört") ;+ finish_VV = mkVV (mkV "slutar") ;+ found_V2 = mkV2 "grundar" ;+ gamble_V = mkV "spelar" ;+ get_V2 = mkV2 (mkV "få" "fick" "fått") ;+ go8travel_V = mkV "åker" ;+ go8walk_V = I.gå_V ;+ graduate_V = depV (mkV "utexamineras") ;+ hate_V2 = mkV2 "hatar" ;+ hurt_V2 = mkV2 "skadar" ;+ increase_V = mkV "ökar" ;+ know_VQ = mkVQ (mkV "veta" "vet" "vet" "visste" "vetat" "känd") ;+ know_VS = mkVS (mkV "veta" "vet" "vet" "visste" "vetat" "känd") ;+ last_V2 = mkV2 (mkV "varar") ;+ leave_V = I.gå_V ;+ leave_V2 = mkV2 "lämnar" ;+ like_V2 = mkV2 "gillar" ;+ live_V = mkV "bor" ;+ lose_V2 = mkV2 "förlorar" ;+ maintain_V2 = mkV2 (mkV "servar") ; -- (mkV "underhålla" "underhöll" "underhållit") ;+ make8become_V2 = mkV2 I.bliva_V ;+ make8do_V2 = mkV2 I.göra_V ;+ manage_VV = mkVV (depV (mkV "lyckas")) ;+ meet_V = depV (mkV "träffas") ;+ need_V2 = mkV2 "behöver" ;+ need_VV = mkV "behöver" ** {c2 = mkComplement [] ; lock_VV = <>} ;+ obtain_from_V3 = mkV3 I.erhålla_V (mkPrep "från") ;+ open_V2 = mkV2 "öppnar" ;+ own_V2 = mkV2 "äger" ;+ pay_V2 = mkV2 "betalar" ;+ publish_V2 = mkV2 "publicerar" ;+ put_in_V3 = mkV3 (mkV "ställer") (mkPrep "i") ;+ read_V2 = mkV2 "läser" ;+ read_out_V2 = mkV2 (partV (mkV "läser") "upp") ;+ remove_V2 = mkV2 "avlägsnar" ;+ rent_from_V3 = mkV3 (mkV "hyra" "hyrde" "hyrt") (mkPrep "från") ;+ represent_V2 = mkV2 "representerar" ;+ revise_V2 = mkV2 "granskar" ;+ run_V2 = mkV2 I.driva_V ;+ say_VS = mkVS I.säga_V ;+ see_V2V = I.se_V ** {c2,c3 = mkComplement ""} ;+ sell_V2 = mkV2 (mkV "sälja" "sålde" "sålt") ;+ send_V2 = mkV2 "skickar" ;+ shall_VV = mkV "böra" "bör" "bör" "borde" "bort" "bord" + ** {c2 = mkComplement [] ; lock_VV = <>} ;+ sign_V2 = mkV2 "undertecknar" ;+ sing_V2 = mkV2 I.sjunga_V ;+ speak_to_V2 = mkV2 "talar" (mkPrep "med") ;+ spend_V2 = mkV2 "tillbringar" ;+ start_V = mkV "börjar" ;+ start_VV = mkV "börjar" ** {c2 = mkComplement [] ; lock_VV = <>} ;+ stop_V = mkV "slutar" ;+ -- suggest_VS = mkVS (mkV "föreslå" "föreslog" "föreslagit") ;+ suggest_to_V2S = mkV2S (mkV "föreslå" "föreslog" "föreslagit") (mkPrep "för") ;+ swim_V = mkV "simmar" ;+ take_V2 = mkV2 taga_V ;+ take_part_in_V2 = mkV2 (mkV "delta" "deltog" "deltagit") (mkPrep "i") ;+ tell_about_V3 = mkV3 (mkV "berättar") (mkPrep "för") (mkPrep "om") ;+ travel_V = mkV "reser" ;+ try_VV = mkVV (mkV "försöker") ;+ update_V2 = mkV2 "uppdaterar" ;+ use_V2 = mkV2 "använder" ;+ -- use_VV = mkVV (mkV "brukar") ;+ use_VV = mkV "brukar" ** {c2 = mkComplement [] ; lock_VV = <>} ;+ vote_for_V2 = mkV2 (mkV "röstar") (mkPrep "för") ;+ win_V2 = mkV2 I.vinna_V ;+ work_V = mkV "arbetar" ;+ work_in_V2 = mkV2 (mkV "arbetar") (mkPrep "på") ;+ write_V2 = mkV2 I.skriva_V ;+ write_to_V2 = mkV2 I.skriva_V (mkPrep "till") ;++ do_VV = I.göra_V ** {c2 = mkComplement [] ; lock_VV = <>} ;+ going_to_VV = mkVV I.komma_V ;+ take_V2V = mkV2V taga_V noPrep noPrep ;++ award_and_be_awarded_V2 = mkV2 (mkV "tilldela och tilldelas" + "tilldelar och tilldelas" + "tilldela och tilldelas" + "tilldelade och tilldelades"+ "tilldelat och tilldelats"+ "tilldelad och bliven tilldelad") ;++-- DETERMINERS+ a_few_Det = {s,sp = \\_,_ => "ett fåtal" ; n = Pl ; det = DIndef} ;+ a_lot_of_Det = {s,sp = \\_,_ => "mycket" ; n = Sg ; det = DIndef} ;+ another_Det = {s,sp = \\_ => genderForms "en annan" "ett annat" ; n = Sg ; det = DIndef} ;+ anyPl_Det = G.somePl_Det ;+ anySg_Det = G.someSg_Det ;+ both_Det = {s,sp = \\b,_ => "båda" ++ if_then_Str b "de" "" ; + n = Pl ; det = DDef Def} ;+ each_Det = G.every_Det ;+ either_Det = {s,sp = \\b,g => genderForms "någon av" "något av" ! g ++ if_then_Str b "de" "" ; + n = Pl ; det = DDef Def} ;+ neither_Det = {s,sp = \\b,g => genderForms "ingen av" "inget av" ! g ++ if_then_Str b "de" "" ; + n = Pl ; det = DDef Def} ;+ one_or_more_Det = {s,sp = \\_ => genderForms "en eller flera" "ett eller flera" ; + n = Pl ; det = DIndef} ;+ several_Det = {s,sp = \\_,_ => "flera" ; n = Pl ; det = DIndef} ;+ twice_as_many_Det = {s,sp = \\_,_ => "dubbelt så många" ; n = Pl ; det = DIndef} ;++ half_a_Card = {s = table {Utr => "en halv"; Neutr => "ett halvt"} ; n = Sg} ;++ the_other_Q = {s,sp = table {Sg => \\_,_ => genderForms ["den andra"] ["det andra"]; + Pl => \\_,_,_ => ["de andra"]};+ det = DDef Def} ;++-- NUMERALS++oper+ selectSub20 : {s : DForm => CardOrd => Str} -> DForm -> Numeral ;+ selectSub20 num dform = lin Numeral {s = num.s ! dform; n = plural} ;++ prefixNumeral : Str -> {s : CardOrd => Str; n : MorphoSwe.Number} -> Numeral ;+ prefixNumeral prefix num = lin Numeral {s = \\o => prefix + num.s ! o; n = num.n} ;++lin+ N_one = G.num (G.pot2as3 (G.pot1as2 (G.pot0as1 G.pot01))) ; -- {s = G.pot01.s ! ental; n = singular} ;+ N_two = selectSub20 G.n2 ental ;+ N_three = selectSub20 G.n3 ental ;+ N_four = selectSub20 G.n4 ental ;+ N_five = selectSub20 G.n5 ental ;+ N_six = selectSub20 G.n6 ental ;+ N_eight = selectSub20 G.n8 ental ;+ N_ten = G.num (G.pot2as3 (G.pot1as2 G.pot110)) ; -- selectSub20 G.pot01 tiotal ;+ N_eleven = G.num (G.pot2as3 (G.pot1as2 G.pot111)) ;+ N_sixteen = selectSub20 G.n6 ton ;+ N_twenty = selectSub20 G.n2 tiotal ;+ N_fortyfive = {s = \\o => "fyrtio" + N_five.s ! o; n = plural} ;++ N_2 = G.D_2 ;+ N_4 = G.D_4 ;+ N_8 = G.D_8 ;+ N_10 = prefixNumeral "1" G.D_0 ;+ N_13 = prefixNumeral "1" G.D_3 ;+ N_14 = prefixNumeral "1" G.D_4 ;+ N_15 = prefixNumeral "1" G.D_5 ;+ N_99 = prefixNumeral "9" G.D_9 ;+ N_100 = prefixNumeral "10" G.D_0 ;+ N_150 = prefixNumeral "15" G.D_0 ;+ N_500 = prefixNumeral "50" G.D_0 ;+ N_2500 = prefixNumeral "250" G.D_0 ;+ N_3000 = prefixNumeral "300" G.D_0 ;+ N_5500 = prefixNumeral "550" G.D_0 ;+++-- ADVERBS+ anywhere_Adv = mkAdv "var som helst" ;+ at_home_Adv = mkAdv "hemma" ;+ at_some_time_Adv = mkAdv "vid någon tidpunkt" ;+ at_the_same_time_Adv = mkAdv "samtidigt" ;+ ever_since_Adv = mkAdv "ända sedan dess" ;+ -- freely_Adv = mkAdv "fritt" ;+ in_the_past_Adv = mkAdv "tidigare" ;+ late_Adv = mkAdv "sent" ;+ long_Adv = mkAdv "länge" ;+ -- now_Adv = mkAdv "nu" ;+ on_time_Adv = mkAdv "i tid" ;+ part_time_Adv = mkAdv "deltid" ;+ -- seriously_Adv = mkAdv "på allvar" ;+ together_Adv = mkAdv "tillsammans" ;+ too_Adv = mkAdv "också" ;+ twice_Adv = mkAdv "två gånger" ;+ yesterday_Adv = mkAdv "igår" ;+ -- four_times_Adv = mkAdv "fyra gånger" ;+ over_Adv = mkAdv "slut" ;++ all_AdV = mkAdV "alla" ;+ already_AdV = mkAdV "redan" ;+ also_AdV = mkAdV "även" ;+ currently_AdV = mkAdV "för närvarande" ;+ ever_AdV = mkAdV "någonsin" ;+ never_AdV = mkAdV "aldrig" ;+ now_AdV = mkAdV "nu" ;+ still_AdV = mkAdV "fortfarande" ;++ really_AdA = mkAdA "verkligt" ;++ more_than_AdN = ss "mer än" ;+ less_than_AdN = ss "mindre än" ;++ -- exactly_AdN = mkAdA "exakt" ;+ -- just_AdN = mkAdA "endast" ;++-- TIME & DATE EXPRESSIONS+ at_8_am_Adv = mkAdv "klockan 8" ;+ at_a_quarter_past_five_Adv = mkAdv "kvart över fem" ;+ at_five_oclock_Adv = mkAdv "klockan fem" ;+ at_four_oclock_Adv = mkAdv "klockan fyra" ;+ at_least_four_times = mkAdv "minst fyra gånger" ;+ by_11_am_Adv = mkAdv "klockan 11" ;+ every_month_Adv = mkAdv "varje månad" ;+ every_week_Adv = mkAdv "varje vecka" ;+ for_8_years_Adv = mkAdv "i 8 år" ;+ for_a_total_of_15_years_or_more_Adv = mkAdv "i totalt 15 år eller mer" ;+ for_a_year_Adv = mkAdv "i ett år" ;+ for_an_hour_Adv = mkAdv "i en timme" ;+ for_exactly_a_year_Adv = mkAdv "i exakt ett år" ;+ for_more_than_10_years_Adv = mkAdv "i mer än 10 år" ;+ for_more_than_two_years_Adv = mkAdv "i mer än två år" ;+ for_three_days_Adv = mkAdv "i tre dagar" ;+ for_two_hours_Adv = mkAdv "i två timmar" ;+ for_two_years_Adv = mkAdv "i två år" ;+ friday_13th_Adv = mkAdv "fredagen den 13:e" ;+ from_1988_to_1992_Adv = mkAdv "från 1988 till 1992" ;+ in_1990_Adv = mkAdv "1990" ;+ in_1991_Adv = mkAdv "1991" ;+ in_1992_Adv = mkAdv "1992" ;+ in_1993_Adv = mkAdv "1993" ;+ in_1994_Adv = mkAdv "1994" ;+ in_a_few_weeks_Adv = mkAdv "om några veckor" ;+ in_a_months_time_Adv = mkAdv "om en månad" ;+ in_july_1994_Adv = mkAdv "i juli 1994" ;+ in_march_1993_Adv = mkAdv "i mars 1993" ;+ in_march_Adv = mkAdv "i mars" ;+ in_one_hour_Adv = mkAdv "på en timme" ;+ in_the_coming_year_Adv = mkAdv "under det kommande året" ;+ in_two_hours_Adv = mkAdv "på två timmar" ;+ last_week_Adv = mkAdv "förra veckan" ;+ on_friday_Adv = mkAdv "på fredagen" ;+ on_july_4th_1994_Adv = mkAdv "4:e juli 1994" ;+ on_july_8th_1994_Adv = mkAdv "8:e juli 1994" ;+ on_monday_Adv = mkAdv "på måndagen" ;+ on_the_5th_of_may_1995_Adv = mkAdv "den 5:e maj 1995" ;+ on_the_7th_of_may_1995_Adv = mkAdv "den 7:e maj 1995" ;+ on_thursday_Adv = mkAdv "på torsdagen" ;+ on_tuesday_Adv = mkAdv "på tisdagen" ;+ on_wednesday_Adv = mkAdv "på onsdagen" ;+ saturday_july_14th_Adv = mkAdv "lördagen den 14 juli" ;+ since_1992_Adv = mkAdv "sedan 1992" ;+ the_15th_of_may_1995_Adv = mkAdv "den 15 maj 1995" ;+ two_years_from_now_Adv = mkAdv "om två år" ;+ year_1996_Adv = mkAdv "1996" ;+ +-- PREPOSITIONS+ at_Prep = mkPrep "på" ;+ out_of_Prep = mkPrep "av" ;+ outside_Prep = mkPrep "utanför" ;+ than_Prep = mkPrep "än" ;+ within_Prep = mkPrep "inom" ;+ +-- PREDETERMINERS+ at_least_Predet = {s = \\_,_ => "minst" ; p = [] ; a = PNoAg} ;+ at_most_Predet = {s = \\_,_ => "högst" ; p = [] ; a = PNoAg} ;+ exactly_Predet = {s = \\_,_ => "exakt" ; p = [] ; a = PNoAg} ;+ just_Predet = {s = \\_,_ => "endast" ; p = [] ; a = PNoAg} ;+ most_of_Predet = {s = \\_,_ => "de flesta" ; p = "av" ; a = PNoAg} ;++-- CONJUNCTIONS+ andSg_Conj = {s1 = [] ; s2 = "och" ; n = Sg} ;+ comma_and_Conj = {s1 = [] ; s2 = ", och" ; n = Pl} ;+ if_comma_then_Conj = {s1 = "om" ; s2 = "så" ; n = Sg} ;+ semicolon_and_Conj = {s1 = [] ; s2 = "; och" ; n = Pl} ;++ after_Subj = ss "efter det att" ;+ before_Subj = ss "innan" ;+ since_Subj = ss "sedan" ;+ than_Subj = ss "än" ; + until_Subj = ss "förrän" ;+ while_Subj = ss "medan" ;++ that_is_PConj = ss "det vill säga ,";+ and_PConj = ss "och" ;+ then_PConj = ss "sedan" ;++}
@@ -0,0 +1,69 @@+--# -path=.:alltenses++concrete FraCaSSwe of FraCaS = GrammarSwe, AdditionsSwe, FraCaSLexSwe ** open+ Prelude,+ (G=GrammarSwe),+ (A=AdditionsSwe),+ (I=IrregSwe),+ (M=MorphoSwe),+ (P=ParadigmsSwe),+ (X=ParamX),+ (C=Coordination)+ in {++-- language independent functions++lin+ ComparAsAs x0 x1 = (G.CAdvAP (G.as_CAdv) (G.PositA x0) x1);++lin+ Adverbial x0 = (PAdverbial (G.NoPConj) x0);+ PAdverbial x0 x1 = (G.PhrUtt x0 (G.UttAdv x1) (G.NoVoc));+ Nounphrase x0 = (PNounphrase (G.NoPConj) x0);+ PNounphrase x0 x1 = (G.PhrUtt x0 (G.UttNP x1) (G.NoVoc));+ Question x0 = (PQuestion (G.NoPConj) x0);+ PQuestion x0 x1 = (G.PhrUtt x0 (G.UttQS x1) (G.NoVoc));+ Sentence x0 = (PSentence (G.NoPConj) x0);+ PSentence x0 x1 = (G.PhrUtt x0 (G.UttS x1) (G.NoVoc));++lin+ Past = (G.TTAnt (G.TPast) (G.ASimul));+ PastPerfect = (G.TTAnt (G.TPast) (G.AAnter));+ Present = (G.TTAnt (G.TPres) (G.ASimul));+ PresentPerfect = (G.TTAnt (G.TPres) (G.AAnter));+ Future = (G.TTAnt (G.TFut) (G.ASimul));+ FuturePerfect = (G.TTAnt (G.TFut) (G.AAnter));+ Conditional = (G.TTAnt (G.TCond) (G.ASimul));++lin+ ConjCN2 c n1 n2 = (G.ConjCN c (G.BaseCN n1 n2));+ ConjNP2 c n1 n2 = (G.ConjNP c (G.BaseNP n1 n2));+ ConjNP3 c n1 n2 n3 = (G.ConjNP c (G.ConsNP n1 (G.BaseNP n2 n3)));+ ConjQS2 c q1 q2 = (A.ConjQS c (A.BaseQS q1 q2));+ ConjS2 c s1 s2 = (G.ConjS c (G.BaseS s1 s2));+ ConjVPI2 c v1 v2 = (A.ConjVPI c (A.BaseVPI (A.MkVPI v1) (A.MkVPI v2)));+ ConjVPS2 c t1 p1 v1 t2 p2 v2 = (A.ConjVPS c (A.BaseVPS (A.MkVPS t1 p1 v1) (A.MkVPS t2 p2 v2)));++-- language dependent functions++lin+ UncNeg = G.PNeg ;++lin+ ComplVSa = G.ComplVS ;+ ProgrVPa vp = vp ;++lin+ elliptic_V = {s = \\_ => ellipsis; part = ""; vtype = M.VAct};+ elliptic_NP_Sg = {s = \\_ => ellipsis; a = M.agrP3 M.utrum M.Sg} ;+ elliptic_NP_Pl = {s = \\_ => ellipsis; a = M.agrP3 M.utrum M.Pl} ;+ elliptic_VP = G.UseV elliptic_V ;+ elliptic_Cl = {s = \\_,_,_,_ => ellipsis} ;+ elliptic_VPSlash = G.UseV elliptic_V ** {c2 = {s=ellipsis; hasPrep=False}; n3 = \\_ => ellipsis};+ elliptic_V2V = elliptic_V ** {c2,c3 = M.mkComplement ""} ;+ elliptic_CN = {s = \\_,_,_ => ellipsis; g = M.utrum; isMod = False} ;++oper+ ellipsis : Str = "[..]" ;++}
@@ -1,17 +1,13 @@-concrete NQueensAscii of NQueens = NatAscii ** open Prelude in {+concrete NQueensAscii of NQueens = NatAscii ** { -lincat S, Matrix = Str ;- Vec = {s : Str; empty : Bool} ;+lincat S, Matrix, Vec = Str ; ListNat, Sat = {} ; lin nqueens _ m = m ; -lin nilV _ _ = {s=""; empty=True} ;- consV _ j k _ _ v = {s=j ++ "X" ++ k ++ - case v.empty of {True=>"";False=>";"} ++ - v.s;- empty=False} ;+lin nilV _ _ = "" ;+ consV _ j k _ _ v = j ++ "X" ++ k ++ ";" ++ v ; - matrix _ v = v.s ;+ matrix _ v = v ; }
@@ -23,9 +23,10 @@ main = do (opts,langs) <- getArgs >>= return . partition ((=='-') . head) let modus = [mkFile la | la <- langs]+ let opt = elem "-opt" opts putStrLn $ unwords modus if notElem "-link" opts - then mapM_ compileOne modus >> return ()+ then mapM_ (compileOne opt) modus >> return () else return () case opts of _ | elem "-make" opts || elem "-link" opts -> do@@ -35,8 +36,9 @@ return () _ -> return () -compileOne modu = do- let comm = "gf -make -s -optimize-pgf -name=" ++ +compileOne opt modu = do+ let optim = if opt then " -optimize-pgf" else ""+ comm = "gf -make -s" ++ optim ++ " -name=" ++ modu ++ " " ++ modu ++ ".gf" ++ " +RTS -K32M" putStrLn comm
@@ -2,6 +2,7 @@ concrete DisambPhrasebookEng of Phrasebook = PhrasebookEng - [+ PGreetingMale, PGreetingFemale, IMale, IFemale, YouFamMale, YouFamFemale, YouPolMale, YouPolFemale, @@ -10,17 +11,40 @@ GSorry, GSorryPol, GPleaseGive, GPleaseGivePol, GNiceToMeetYou, -- GNiceToMeetYouPol,- PYes, PYesToNo, ObjMass+ PYes, PYesToNo, ObjMass,+ MKnow,+ WeMale, WeFemale,+ YouPlurFamMale, YouPlurFamFemale,+ YouPlurPolMale, YouPlurPolFemale,+ TheyMale, TheyFemale,+ PImperativeFamPos, + PImperativeFamNeg, + PImperativePolPos, + PImperativePolNeg,+ PImperativePlurPos,+ PImperativePlurNeg ] - ** open SyntaxEng, ParadigmsEng, Prelude in {+ ** open SyntaxEng, ParadigmsEng, IrregEng, Prelude in { lin+ PGreetingMale g = mkText (lin Text g) (lin Text (ss "(by male)")) ;+ PGreetingFemale g = mkText (lin Text g) (lin Text (ss "(by female)")) ; IMale = mkP i_Pron "(male)" ; IFemale = mkP i_Pron "(female)" ;- YouFamMale = mkP youSg_Pron "(familiar,male)" ;- YouFamFemale = mkP youSg_Pron "(familiar,female)" ;- YouPolMale = mkP youPol_Pron "(polite,male)" ;- YouPolFemale = mkP youPol_Pron "(polite,female)" ;+ WeMale = mkP we_Pron "(male)" ;+ WeFemale = mkP we_Pron "(female)" ;+ YouFamMale = mkP youSg_Pron "(singular,familiar,male)" ;+ YouFamFemale = mkP youSg_Pron "(singular,familiar,female)" ;+ YouPolMale = mkP youPol_Pron "(singular,polite,male)" ;+ YouPolFemale = mkP youPol_Pron "(singular,polite,female)" ;+ YouPlurFamMale = mkP youSg_Pron "(plural,familiar,male)" ;+ YouPlurFamFemale = mkP youSg_Pron "(plural,familiar,female)" ;+ YouPlurPolMale = mkP youPol_Pron "(plural,polite,male)" ;+ YouPlurPolFemale = mkP youPol_Pron "(plural,polite,female)" ;+ TheyMale = mkP they_Pron "(male)" ;+ TheyFemale = mkP they_Pron "(female)" ; + MKnow = mkVV (partV know_V "how") ; ---+ LangNat nat = mkNP nat.lang (ParadigmsEng.mkAdv "(language)") ; -- CitiNat nat = nat.prop ; @@ -38,6 +62,14 @@ ObjMass x = mkNP (mkNP x) (ParadigmsEng.mkAdv "(a portion of)") ; + PImperativeFamPos v = phrasePlease (mkUtt (mkImp (addAdv ("singular,familiar") v))) ;+ PImperativeFamNeg v = phrasePlease (mkUtt negativePol (mkImp (addAdv ("singular,familiar") v))) ;+ PImperativePolPos v = phrasePlease (mkUtt politeImpForm (mkImp (addAdv ("singular,polite") v))) ;+ PImperativePolNeg v = phrasePlease (mkUtt politeImpForm negativePol (mkImp (addAdv ("singular,polite") v))) ;+ PImperativePlurPos v = phrasePlease (mkUtt pluralImpForm (mkImp (addAdv ("plural,familiar") v))) ;+ PImperativePlurNeg v = phrasePlease (mkUtt pluralImpForm negativePol (mkImp (addAdv ("plural,familiar") v))) ;++ oper fam : Str -> SS = \s -> postfixSS "(familiar)" (ss s) ; pol : Str -> SS = \s -> postfixSS "(polite)" (ss s) ;@@ -47,4 +79,6 @@ isPron = False ; -- to show the disambiguation poss = SyntaxEng.mkQuant youSg_Pron } ;++ addAdv : Str -> VP -> VP = \s,vp -> mkVP vp (ParadigmsEng.mkAdv ("("+s+")")) ; }
@@ -0,0 +1,35 @@+concrete GreetingsTha of Greetings = + SentencesTha [Greeting,mkGreeting] ** + open ResTha, Prelude in {++-- สุขสันต์วันเกิด++flags coding = utf8 ;++lin + GBye = mkGreeting (thword "ลา" "ก่อน") ;+ GCheers = mkGreeting (thword "ไช" "โย") ;+ GDamn = mkGreeting (thword "ชิบ" "หาย") ;+ GExcuse, GExcusePol = mkGreeting (thword "ขอ" "โทษ") ;+ GGoodDay = mkGreeting (thword "สวัส" "ดี") ;+ GGoodEvening = mkGreeting (thword "สวัส" "ดี") ;+ GGoodMorning = mkGreeting (thword "สวัส" "ดี") ;+ GGoodNight = mkGreeting (thword "รา" "ตรี" "สวัส" "ดิ์") ;+ GGoodbye = mkGreeting (thword "ลา" "ก่อน") ;+ GHello = mkGreeting (thword "สวัส" "ดี") ;+ GHelp = mkGreeting (thword "ช่วย" "ด้วย") ;+ GHowAreYou = mkGreeting (thword "สบาย" "ดี" "ไหม") ;+ GLookOut = mkGreeting (thword "ระ" "วัง") ; ---- google+ GNiceToMeetYou, GNiceToMeetYouPol = + mkGreeting (thword "ยิน" "ดี" "ที่" "ได้" "รู้" "จัก") ;+ GPleaseGive, GPleaseGivePol = mkGreeting "นะ" ;+ GSeeYouSoon = mkGreeting (thword "เจอ" "กัน" "นะ") ;+ GSorry, GSorryPol = mkGreeting (thword "ขอ" "โทษ") ;+ GThanks = mkGreeting (thword "ขอบ" "คุณ") ;+ GTheCheck = mkGreeting (thword "เช็ค" "บิล") ;+ GCongratulations = mkGreeting (thword "ยิน" "ดี" "ด้วย") ;+ GHappyBirthday = mkGreeting (thword "สุข" "สันต์" "วัน" "เกิด") ;+ GGoodLuck = mkGreeting (thword "โชค" "ดี" "นะ") ; +}++
@@ -1,24 +1,31 @@ compile = runghc Compile -all: fin demo missing+all: demo missing -demo: compdemo linkdemo+thaidroid: #thaiscript+ cp -p Phrasebook.pgf FullPhrasebook.pgf+ $(compile) -opt Eng Swe Tha Thb DisambPhrasebookEng+ $(compile) -link Eng Fin Swe Tha Thb DisambPhrasebookEng+ mv Phrasebook.pgf Thaidroid.pgf+ mv FullPhrasebook.pgf Phrasebook.pgf +thaiscript:+ runghc ../../lib/src/thai/ThaiScript.hs++demo: compdemo fin linkdemo+ compdemo:- $(compile) Bul Cat Dan Dut Eng Fre Ger Ita Nor Pol Ron Spa Swe Urd DisambPhrasebookEng+ $(compile) -opt Bul Cat Dan Dut Eng Fre Ger Ita Nor Pol Ron Rus Spa Swe Tha Urd DisambPhrasebookEng linkdemo:- $(compile) -link Eng Bul Cat Dan Dut Fin Fre Ger Ita Nor Pol Ron Spa Swe Urd DisambPhrasebookEng + $(compile) -link Eng Bul Cat Dan Dut Fin Fre Ger Ita Nor Pol Ron Rus Spa Swe Tha Urd DisambPhrasebookEng +linkdemothb:+ $(compile) -link Eng Bul Cat Dan Dut Fin Fre Ger Ita Nor Pol Ron Rus Spa Swe Tha Thb Urd DisambPhrasebookEng + #separate, because slow... fin:- $(compile) Fin--pgfs:- $(compile) Bul Cat Dan Dut Eng Fin Fre Ger Ita Nor Pol Ron Rus Spa Swe Urd--koe:- $(compile) Eng Fre DisambPhrasebookEng+ $(compile) -opt Fin missing: echo "pg -missing | wf -file=missing.txt" | gf -run Phrasebook.pgf
@@ -6,7 +6,7 @@ SyntaxRus, Prelude in { ---lin--- PGreeting g = lin Text g ;+ -- lin+ -- PGreeting g = lin Text g ; }
@@ -0,0 +1,11 @@+--# -path=.:alltenses++concrete PhrasebookTha of Phrasebook = + GreetingsTha,+ WordsTha+ ** open +-- SyntaxTha,+ Prelude in {+++}
@@ -25,6 +25,8 @@ Item ; -- a single entity e.g. "this pizza" Kind ; -- a type of an item e.g. "pizza" MassKind ; -- a type mass (uncountable) e.g. "water"+ PlurKind ; -- a type usually only in plural e.g. "noodles"+ DrinkKind ; -- a drinkable, countable type e.g. "beer" Quality ; -- qualification of an item, can be complex e.g. "very good" Property ; -- basic property of an item, one word e.g. "good" Place ; -- location e.g. "the bar" @@ -59,9 +61,10 @@ -- PWord : Word -> Phrase ; - PGreeting : Greeting -> Phrase ;- PSentence : Sentence -> Phrase ;- PQuestion : Question -> Phrase ;+ PGreetingMale : Greeting -> Phrase ; -- depends on speaker e.g. in Thai+ PGreetingFemale : Greeting -> Phrase ;+ PSentence : Sentence -> Phrase ;+ PQuestion : Question -> Phrase ; PNumber : Number -> Phrase ; PPrice : Price -> Phrase ;@@ -109,6 +112,7 @@ ObjNumber : Number -> Kind -> PrimObject ; -- five pizzas ObjIndef : Kind -> PrimObject ; -- a pizza ObjPlural : Kind -> PrimObject ; -- pizzas+ ObjPlur : PlurKind -> PrimObject ; -- noodles ObjMass : MassKind -> PrimObject ; -- water ObjAndObj : PrimObject -> Object -> Object ; -- this pizza and a beer OneObj : PrimObject -> Object ; -- this pizza@@ -119,11 +123,15 @@ Too : Property -> Quality ; -- too Italian PropQuality : Property -> Quality ; -- Italian + MassDrink : DrinkKind -> MassKind ; -- beer+ DrinkNumber : Number -> DrinkKind -> PrimObject ; -- five beers+ -- Determiners. - This, That, These, Those : Kind -> Item ; -- this pizza,...,those pizzas- The, Thes : Kind -> Item ; -- the pizza, the pizzas- ThisMass, ThatMass, TheMass : MassKind -> Item ; -- this/that/the water+ This, That, These, Those : Kind -> Item ; -- this pizza,...,those pizzas+ The, Thes : Kind -> Item ; -- the pizza, the pizzas+ ThisMass, ThatMass, TheMass : MassKind -> Item ; -- this/that/the water+ ThesePlur, ThosePlur, ThesPlur : PlurKind -> Item ; -- these/those/the potatoes AmountCurrency : Number -> Currency -> Price ; -- five euros @@ -166,6 +174,49 @@ AKnowSentence : Person -> Sentence -> Action ; -- you know that I am in the bar AKnowPerson : Person -> Person -> Action ; -- you know me AKnowQuestion : Person -> Question -> Action ; -- you know how far the bar is++------------------------------------------------------------------------------------------+-- New things added 30/11/2011 by AR+------------------------------------------------------------------------------------------++ cat+ VerbPhrase ; -- things one does, can do, must do, wants to do, e.g. swim+ Modality ; -- can, want, must+ fun+ ADoVerbPhrase : Person -> VerbPhrase -> Action ; -- I swim+ AModVerbPhrase : Modality -> Person -> VerbPhrase -> Action ; -- I can swim+ ADoVerbPhrasePlace : Person -> VerbPhrase -> Place -> Action ; -- I swim in the hotel+ AModVerbPhrasePlace : Modality -> Person -> VerbPhrase -> Place -> Action ; -- I can swim in the hotel++ QWhereDoVerbPhrase : Person -> VerbPhrase -> Question ; -- where do you swim+ QWhereModVerbPhrase : Modality -> Person -> VerbPhrase -> Question ; -- where can I swim++ MCan, MKnow, MMust, MWant : Modality ;+ +-- lexical items given in the resource Lexicon+ + VPlay, VRun, VSit, VSleep, VSwim, VWalk : VerbPhrase ;+ VDrink, VEat, VRead, VWait, VWrite : VerbPhrase ;+ V2Buy, V2Drink, V2Eat : Object -> VerbPhrase ;+ V2Wait : Person -> VerbPhrase ;++ PImperativeFamPos, -- eat+ PImperativeFamNeg, -- don't eat+ PImperativePolPos, -- essen Sie+ PImperativePolNeg, -- essen Sie nicht+ PImperativePlurPos, -- esst+ PImperativePlurNeg : -- esst nicht+ VerbPhrase -> Phrase ;++-- other new things allowed by the resource++--- PBecause : Sentence -> Sentence -> Phrase ; -- I want to swim because it is hot++ He, She, -- he, she+ WeMale, WeFemale, -- we, said by men/women (affects agreement)+ YouPlurFamMale, YouPlurFamFemale, -- plural familiar you, said to men/women (affects agreement)+ YouPlurPolMale, YouPlurPolFemale, -- plural polite you, said to men/women (affects agreement)+ TheyMale, TheyFemale : Person ; -- they, said of men/women (affects agreement) }
@@ -1,6 +1,7 @@ concrete SentencesCat of Sentences = NumeralCat ** SentencesI - [ IsMass, IFemale, YouFamFemale, YouPolFemale, IMale, YouFamMale, YouPolMale,+ WeMale, WeFemale, YouPlurFamMale, YouPlurFamFemale, YouPlurPolFemale, YouPlurPolMale, TheyMale, TheyFemale, WherePlace, WherePerson, ABePlace, Superlative ] @@ -18,18 +19,40 @@ lin IsMass m q = mkCl (mkNP the_Det m) q ; -- le vin allemand est bon - IFemale = - {name = mkNP (ProDrop i8fem_Pron) ; isPron = True ; poss = mkQuant i_Pron} ; - YouFamFemale = - {name = mkNP (ProDrop youSg8fem_Pron) ; isPron = True ; poss = mkQuant youSg_Pron} ;- YouPolFemale = - {name = mkNP (ProDrop youPol8fem_Pron) ; isPron = True ; poss = mkQuant youPol_Pron};- IMale = - {name = mkNP (ProDrop i_Pron) ; isPron = True ; poss = mkQuant i_Pron} ; - YouFamMale = - {name = mkNP (ProDrop youSg_Pron) ; isPron = True ; poss = mkQuant youSg_Pron} ; - YouPolMale = - {name = mkNP (ProDrop youPol_Pron) ; isPron = True ; poss = mkQuant youPol_Pron} ;+ IFemale = + {name = mkNP (ProDrop i8fem_Pron) ; isPron = True ; poss = mkQuant i_Pron} ; + YouFamFemale = + {name = mkNP (ProDrop youSg8fem_Pron) ; isPron = True ; poss = mkQuant youSg_Pron} ;+ YouPolFemale = + {name = mkNP (ProDrop youPol8fem_Pron) ; isPron = True ; poss = mkQuant youPol_Pron};+ IMale = + {name = mkNP (ProDrop i_Pron) ; isPron = True ; poss = mkQuant i_Pron} ; + YouFamMale = + {name = mkNP (ProDrop youSg_Pron) ; isPron = True ; poss = mkQuant youSg_Pron} ; + YouPolMale = + {name = mkNP (ProDrop youPol_Pron) ; isPron = True ; poss = mkQuant youPol_Pron} ;+ He = + {name = mkNP (ProDrop he_Pron) ; isPron = True ; poss = mkQuant he_Pron} ; + She = + {name = mkNP (ProDrop she_Pron) ; isPron = True ; poss = mkQuant she_Pron} ; + WeMale = + {name = mkNP (ProDrop we_Pron) ; isPron = True ; poss = mkQuant we_Pron} ; + WeFemale = + {name = mkNP (ProDrop we8fem_Pron) ; isPron = True ; poss = mkQuant we_Pron} ; + YouPlurFamMale = + {name = mkNP (ProDrop youPl_Pron) ; isPron = True ; poss = mkQuant youPl_Pron} ; + YouPlurFamFemale = + {name = mkNP (ProDrop youPl8fem_Pron) ; isPron = True ; poss = mkQuant youPl_Pron} ; + YouPlurPolMale = + {name = mkNP (ProDrop youPolPl_Pron) ; isPron = True ; poss = mkQuant youPolPl_Pron} ;+ YouPlurPolFemale = + {name = mkNP (ProDrop youPolPl8fem_Pron) ; isPron = True ; poss = mkQuant youPolPl_Pron};+ TheyMale = + {name = mkNP (ProDrop they_Pron) ; isPron = True ; poss = mkQuant they_Pron} ; + TheyFemale = + {name = mkNP (ProDrop they8fem_Pron) ; isPron = True ; poss = mkQuant they_Pron} ; ++ ABePlace p place = mkCl p.name (mkVP (mkVP ser) place.at) ; WherePlace place = mkQS (mkQCl where_IAdv (mkCl place.name ser) ) ; WherePerson person = mkQS (mkQCl where_IAdv (mkCl person.name ser) ) ;
@@ -1,6 +1,7 @@ concrete SentencesFin of Sentences = NumeralFin ** SentencesI - [Is, IsMass, NameNN, ObjMass, IFemale, YouFamFemale, YouPolFemale, IMale, YouFamMale, YouPolMale,+ WeMale, WeFemale, YouPlurFamMale, YouPlurFamFemale, YouPlurPolFemale, YouPlurPolMale, NPPlace, CNPlace, placeNP, mkCNPlace, mkCNPlacePl, GObjectPlease ] with @@ -34,6 +35,10 @@ {name = mkNP (ProDrop youSg_Pron) ; isPron = True ; poss = ProDropPoss youSg_Pron} ; YouPolMale, YouPolFemale = {name = mkNP (ProDrop youPol_Pron) ; isPron = True ; poss = ProDropPoss youPol_Pron} ;+ WeMale, WeFemale = + {name = mkNP (ProDrop we_Pron) ; isPron = True ; poss = ProDropPoss we_Pron} ; + YouPlurFamMale, YouPlurFamFemale, YouPlurPolMale, YouPlurPolFemale = + {name = mkNP (ProDrop youPl_Pron) ; isPron = True ; poss = ProDropPoss youPl_Pron} ; ObjMass = PartCN ;
@@ -1,7 +1,7 @@ concrete SentencesFre of Sentences = NumeralFre ** SentencesI - [ IsMass, QProp,- IFemale, YouFamFemale, YouPolFemale,+ IFemale, YouFamFemale, YouPolFemale, WeFemale, YouPlurFamFemale, YouPlurPolFemale, YouPlurPolMale, TheyFemale, PYesToNo, SHaveNo,SHaveNoMass, Superlative@@ -23,7 +23,18 @@ YouFamFemale = {name = mkNP youSg8fem_Pron ; isPron = True ; poss = mkQuant youSg_Pron} ; YouPolFemale = - {name = mkNP youPol8fem_Pron ; isPron = True ; poss = mkQuant youPol_Pron};+ {name = mkNP youPol8fem_Pron ; isPron = True ; poss = mkQuant youPol_Pron} ;+ WeFemale = + {name = mkNP we8fem_Pron ; isPron = True ; poss = mkQuant we_Pron} ; + YouPlurFamFemale = + {name = mkNP youPl8fem_Pron ; isPron = True ; poss = mkQuant youPl_Pron} ; + YouPlurPolMale = + {name = mkNP youPl_Pron ; isPron = True ; poss = mkQuant youPol_Pron};+ YouPlurPolFemale = + {name = mkNP youPl8fem_Pron ; isPron = True ; poss = mkQuant youPol_Pron};+ TheyFemale = + {name = mkNP they8fem_Pron ; isPron = True ; poss = mkQuant they_Pron} ; + PYesToNo = mkPhrase (lin Utt (ss "si")) ;
@@ -2,7 +2,9 @@ [PYesToNo,SHaveNo,SHaveNoMass, Proposition, Action, Is, IsMass, SProp, SPropNot, QProp, AHaveCurr, ACitizen, ABePlace, AKnowSentence, AKnowPerson, AKnowQuestion,- Nationality, Language+ Nationality, Language,+ ADoVerbPhrase, AModVerbPhrase, ADoVerbPhrasePlace, AModVerbPhrasePlace,+ YouPlurPolMale, YouPlurPolFemale ] with (Syntax = SyntaxGer), (Symbolic = SymbolicGer),@@ -38,4 +40,11 @@ Nationality = {lang : CN ; country : NP ; prop : A} ; Language = CN ; -- kein Deutsch +-- the new things+ lin+ ADoVerbPhrase p vp = prop (mkCl p.name vp) ;+ AModVerbPrase m p vp = prop (mkCl p.name (mkVP m vp)) ;+ ADoVerbPhrasePlace p vp x = prop (mkCl p.name (mkVP vp x.at)) ;+ AModVerbPrasePlace m p vp x = prop (mkCl p.name (mkVP m (mkVP vp x.at))) ;+ YouPlurPolMale, YouPlurPolFemale = mkPerson youPol_Pron ; }
@@ -20,6 +20,9 @@ Item = NP ; Kind = CN ; MassKind = CN ;+ MassKind = CN ;+ PlurKind = CN ;+ DrinkKind = CN ; Quality = AP ; Property = A ; Object = NP ;@@ -48,7 +51,7 @@ PSentence s = mkText s | lin Text (mkUtt s) ; -- optional '.' PQuestion s = mkText s | lin Text (mkUtt s) ; -- optional '?' - PGreeting g = mkText (lin Phr g) exclMarkPunct | g ;+ PGreetingMale, PGreetingFemale = \g -> mkText (lin Phr g) exclMarkPunct | g ; -- PWord w = w ; @@ -73,7 +76,7 @@ PNo = mkPhrase no_Utt ; PYesToNo = mkPhrase yes_Utt ; - GObjectPlease o = lin Text (mkPhr noPConj (mkUtt o) please_Voc) ;+ GObjectPlease o = lin Text (mkPhr noPConj (mkUtt o) please_Voc) | lin Text (mkUtt o) ; Is = mkCl ; IsMass m q = mkCl (mkNP m) q ;@@ -93,10 +96,14 @@ ObjNumber n k = mkNP n k ; ObjIndef k = mkNP a_Quant k ; ObjPlural k = mkNP aPl_Det k ;+ ObjPlur k = mkNP aPl_Det k ; ObjMass k = mkNP k ; ObjAndObj = mkNP and_Conj ; OneObj o = o ; + MassDrink d = d ;+ DrinkNumber n k = mkNP n k ;+ This kind = mkNP this_Quant kind ; That kind = mkNP that_Quant kind ; These kind = mkNP this_Quant plNum kind ;@@ -106,6 +113,9 @@ ThisMass kind = mkNP this_Quant kind ; ThatMass kind = mkNP that_Quant kind ; TheMass kind = mkNP the_Quant kind ;+ ThesePlur kind = mkNP this_Quant plNum kind ;+ ThosePlur kind = mkNP that_Quant plNum kind ;+ ThesPlur kind = mkNP the_Quant plNum kind ; SuchKind quality kind = mkCN quality kind ; SuchMassKind quality kind = mkCN quality kind ;@@ -227,5 +237,64 @@ -- for languages with GenNP, use "p's wife" -- relativePerson n x (\a,b,c -> mkNP (GenNP b) a c) p ;++ phrasePlease : Utt -> Text = \u -> --- lin Text (mkPhr noPConj u please_Voc) | + lin Text u ;++------------------------------------------------------------------------------------------+-- New things added 30/11/2011 by AR+------------------------------------------------------------------------------------------++ lincat+ VerbPhrase = VP ;+ Modality = VV ;+ lin+ ADoVerbPhrase p vp = mkCl p.name vp ;+ AModVerbPhrase m p vp = mkCl p.name (mkVP m vp) ;+ ADoVerbPhrasePlace p vp x = mkCl p.name (mkVP vp x.at) ;+ AModVerbPhrasePlace m p vp x = mkCl p.name (mkVP m (mkVP vp x.at)) ;++ QWhereDoVerbPhrase p vp = mkQS (mkQCl where_IAdv (mkCl p.name vp)) ;+ QWhereModVerbPhrase m p vp = mkQS (mkQCl where_IAdv (mkCl p.name (mkVP m vp))) ;++ MWant = want_VV ;+ MCan = can_VV ;+ MKnow = can8know_VV ;+ MMust = must_VV ;++ VPlay = mkVP play_V ;+ VRun = mkVP run_V ;+ VSit = mkVP sit_V ;+ VSleep = mkVP sleep_V ;+ VSwim = mkVP swim_V ; + VWalk = mkVP walk_V ;+ VDrink = mkVP <lin V drink_V2 : V> ; + VEat = mkVP <lin V eat_V2 : V> ; + VRead = mkVP <lin V read_V2 : V> ; + VWait = mkVP <lin V wait_V2 : V> ; + VWrite = mkVP <lin V write_V2 : V> ; ++ V2Buy o = mkVP buy_V2 o ;+ V2Drink o = mkVP drink_V2 o ;+ V2Eat o = mkVP eat_V2 o ;+ V2Wait o = mkVP wait_V2 o.name ;++ PImperativeFamPos v = phrasePlease (mkUtt (mkImp v)) ;+ PImperativeFamNeg v = phrasePlease (mkUtt negativePol (mkImp v)) ;+ PImperativePolPos v = phrasePlease (mkUtt politeImpForm (mkImp v)) ;+ PImperativePolNeg v = phrasePlease (mkUtt politeImpForm negativePol (mkImp v)) ;+ PImperativePlurPos v = phrasePlease (mkUtt pluralImpForm (mkImp v)) ;+ PImperativePlurNeg v = phrasePlease (mkUtt pluralImpForm negativePol (mkImp v)) ;++-- other new things allowed by the resource++--- PBecause a b = SSubjS a because_Subj b ;++ He = mkPerson he_Pron ;+ She = mkPerson she_Pron ;+ WeMale, WeFemale = mkPerson we_Pron ;+ YouPlurFamMale, YouPlurFamFemale = mkPerson youPl_Pron ;+ YouPlurPolMale, YouPlurPolFemale = mkPerson youPl_Pron ;+ TheyMale, TheyFemale = mkPerson they_Pron ; }
@@ -1,6 +1,7 @@ concrete SentencesIta of Sentences = NumeralIta ** SentencesI - [ IsMass, IFemale, YouFamFemale, YouPolFemale, IMale, YouFamMale, YouPolMale,+ WeMale, WeFemale, YouPlurFamMale, YouPlurFamFemale, YouPlurPolFemale, YouPlurPolMale, TheyMale, TheyFemale, mkPerson, Superlative, SHaveNoMass ] with @@ -18,16 +19,36 @@ IFemale = {name = mkNP (ProDrop i8fem_Pron) ; isPron = True ; poss = PossFamQuant i_Pron} ; - YouFamFemale = - {name = mkNP (ProDrop youSg8fem_Pron) ; isPron = True ; poss = PossFamQuant youSg_Pron} ; - YouPolFemale = - {name = mkNP (ProDrop youPol8fem_Pron) ; isPron = True ; poss = PossFamQuant youPol_Pron}; IMale = {name = mkNP (ProDrop i_Pron) ; isPron = True ; poss = PossFamQuant i_Pron} ; YouFamMale = {name = mkNP (ProDrop youSg_Pron) ; isPron = True ; poss = PossFamQuant youSg_Pron} ; + YouFamFemale = + {name = mkNP (ProDrop youSg8fem_Pron) ; isPron = True ; poss = PossFamQuant youSg_Pron} ; YouPolMale = {name = mkNP (ProDrop youPol_Pron) ; isPron = True ; poss = PossFamQuant youPol_Pron} ;+ YouPolFemale = + {name = mkNP (ProDrop youPol8fem_Pron) ; isPron = True ; poss = PossFamQuant youPol_Pron};+ He = + {name = mkNP (ProDrop he_Pron) ; isPron = True ; poss = PossFamQuant he_Pron} ; + She = + {name = mkNP (ProDrop she_Pron) ; isPron = True ; poss = PossFamQuant she_Pron} ; + WeMale = + {name = mkNP (ProDrop we_Pron) ; isPron = True ; poss = PossFamQuant we_Pron} ; + WeFemale = + {name = mkNP (ProDrop we8fem_Pron) ; isPron = True ; poss = PossFamQuant we_Pron} ; + YouPlurFamMale = + {name = mkNP (ProDrop youPl_Pron) ; isPron = True ; poss = PossFamQuant youPl_Pron} ; + YouPlurFamFemale = + {name = mkNP (ProDrop youPl8fem_Pron) ; isPron = True ; poss = PossFamQuant youPl_Pron} ; + YouPlurPolMale = + {name = mkNP (ProDrop youPolPl_Pron) ; isPron = True ; poss = PossFamQuant youPolPl_Pron} ;+ YouPlurPolFemale = + {name = mkNP (ProDrop youPolPl8fem_Pron) ; isPron = True ; poss = PossFamQuant youPolPl_Pron};+ TheyMale = + {name = mkNP (ProDrop they_Pron) ; isPron = True ; poss = PossFamQuant they_Pron} ; + TheyFemale = + {name = mkNP (ProDrop they8fem_Pron) ; isPron = True ; poss = PossFamQuant they_Pron} ; SHaveNoMass p k = mkS negativePol (mkCl p.name (ComplCN have_V2 k)) ;
@@ -1,7 +1,17 @@ concrete SentencesRus of Sentences = NumeralRus ** SentencesI - [- Today, NameNN -- not defined in lib+ NameNN, SHave, SHaveNo, SHaveNoMass, QDoHave, AHaveCurr ] with (Syntax = SyntaxRus),--- (Symbolic = SymbolicRus),- (Lexicon = LexiconRus) ** open Prelude, SyntaxRus in {+ (Symbolic = SymbolicRus),+ (Lexicon = LexiconRus), (Grammar = GrammarRus) ** open Prelude, SyntaxRus, (P = ParadigmsRus) in {+ lin+ SHave p obj = mkS (mkCl (mkVP have_V3 obj p.name)) ;+ SHaveNo p obj = mkS (mkCl (mkVP have_not_V3 (mkNP obj) p.name)) ;+ SHaveNoMass p obj = mkS (mkCl (mkVP have_not_V3 (mkNP obj) p.name)) ;+ QDoHave p obj = mkQS (mkQCl (mkCl (mkVP have_V3 obj p.name))) ;++ AHaveCurr p curr = mkCl (mkVP have_V3 (mkNP aPl_Det curr) p.name) ;++ lin NameNN = mkNP (P.mkN "NN") ;+ }
@@ -1,6 +1,7 @@ concrete SentencesSpa of Sentences = NumeralSpa ** SentencesI - [ IsMass, IFemale, YouFamFemale, YouPolFemale, IMale, YouFamMale, YouPolMale,+ WeMale, WeFemale, YouPlurFamMale, YouPlurFamFemale, YouPlurPolFemale, YouPlurPolMale, TheyMale, TheyFemale, WherePlace, WherePerson, ABePlace, Superlative ] @@ -31,6 +32,26 @@ {name = mkNP (ProDrop youSg_Pron) ; isPron = True ; poss = mkQuant youSg_Pron} ; YouPolMale = {name = mkNP (ProDrop youPol_Pron) ; isPron = True ; poss = mkQuant youPol_Pron} ;+ He = + {name = mkNP (ProDrop he_Pron) ; isPron = True ; poss = mkQuant he_Pron} ; + She = + {name = mkNP (ProDrop she_Pron) ; isPron = True ; poss = mkQuant she_Pron} ; + WeMale = + {name = mkNP (ProDrop we_Pron) ; isPron = True ; poss = mkQuant we_Pron} ; + WeFemale = + {name = mkNP (ProDrop we8fem_Pron) ; isPron = True ; poss = mkQuant we_Pron} ; + YouPlurFamMale = + {name = mkNP (ProDrop youPl_Pron) ; isPron = True ; poss = mkQuant youPl_Pron} ; + YouPlurFamFemale = + {name = mkNP (ProDrop youPl8fem_Pron) ; isPron = True ; poss = mkQuant youPl_Pron} ; + YouPlurPolMale = + {name = mkNP (ProDrop youPolPl_Pron) ; isPron = True ; poss = mkQuant youPolPl_Pron} ;+ YouPlurPolFemale = + {name = mkNP (ProDrop youPolPl8fem_Pron) ; isPron = True ; poss = mkQuant youPolPl_Pron};+ TheyMale = + {name = mkNP (ProDrop they_Pron) ; isPron = True ; poss = mkQuant they_Pron} ; + TheyFemale = + {name = mkNP (ProDrop they8fem_Pron) ; isPron = True ; poss = mkQuant they_Pron} ; ABePlace p place = mkCl p.name (mkVP (mkVP estar) place.at) ;
@@ -1,9 +1,14 @@-concrete SentencesSwe of Sentences = NumeralSwe ** SentencesI - [PYesToNo,NameNN] with +concrete SentencesSwe of Sentences = NumeralSwe ** SentencesI - [+ PYesToNo, NameNN,+ DrinkNumber -- should be utrum gender when countable+ ] with (Syntax = SyntaxSwe), (Symbolic = SymbolicSwe), (Lexicon = LexiconSwe) ** open Prelude, SyntaxSwe, (P = ParadigmsSwe) in { - lin PYesToNo = mkPhrase (lin Utt (ss "jo")) ;- lin NameNN = mkNP (P.mkPN "NN") ;-+ lin + PYesToNo = mkPhrase (lin Utt (ss "jo")) ;+ NameNN = mkNP (P.mkPN "NN") ;+ DrinkNumber n d = mkNP n (mkCN (P.mkN [] [] [] [] P.utrum) (lin Adv (mkUtt d))) ; --- empty classifier - quite a hack...+ }
@@ -0,0 +1,26 @@+concrete SentencesTha of Sentences = NumeralTha ** SentencesI - [+ PGreetingMale, PGreetingFemale,+ GObjectPlease,+ IMale, YouFamMale, YouFamFemale,+ ACitizen+ ] with + (Syntax = SyntaxTha),+ (Symbolic = SymbolicTha),+ (Lexicon = LexiconTha) ** open SyntaxTha, (P = ParadigmsTha), (R = ResTha) in {++flags coding=utf8 ;+lin+ PGreetingMale g = mkText (lin Text g) (lin Text (ss "ครับ")) | g ;+ PGreetingFemale g = mkText (lin Text g) (lin Text (ss "ค่ะ")) | g ;++ GObjectPlease o = + lin Text (mkPhr (lin PConj (ss "ขอ")) (mkUtt o) (lin Voc (ss "หน่อย"))) | lin Text (mkUtt o) ;++ ACitizen p n = mkCl p.name (mkVP (mkCN n (P.personN R.khon_s))) ;++ IMale = mkPerson (R.mkNP "ผม") ;+ YouFamMale, YouFamFemale = mkPerson (R.mkNP "เธอ") ;++oper+ thpron = R.thpron ;+}
@@ -1,4 +1,4 @@-concrete SentencesUrd of Sentences = NumeralUrd ** SentencesI - [sing,IFemale,YouFamFemale,YouPolFemale] with +concrete SentencesUrd of Sentences = NumeralUrd ** SentencesI - [sing,IFemale,YouFamFemale,YouPolFemale,MMust] with (Syntax = SyntaxUrd), (Symbolic = SymbolicUrd), (Lexicon = LexiconUrd) **
@@ -1,7 +1,7 @@ --2 Words and idiomatic phrases of the Phrasebook --- (c) 2009 Aarne Ranta under LGPL --%+-- (c) 2010 Aarne Ranta under LGPL --% abstract Words = Sentences ** { @@ -10,19 +10,19 @@ -- kinds of items (so far mostly food stuff) Apple : Kind ;- Beer : MassKind ;+ Beer : DrinkKind ; Bread : MassKind ; Cheese : MassKind ; Chicken : MassKind ; - Coffee : MassKind ; + Coffee : DrinkKind ; Fish : MassKind ; Meat : MassKind ; Milk : MassKind ; Pizza : Kind ; Salt : MassKind ;- Tea : MassKind ; - Water : MassKind ; - Wine : MassKind ;+ Tea : DrinkKind ; + Water : DrinkKind ; + Wine : DrinkKind ; -- properties of kinds (so far mostly of food) @@ -194,5 +194,53 @@ TheWorst : Superlative ; SuperlPlace : Superlative -> PlaceKind -> Place ; -- the best bar+++--------------------------------------------------+-- New 30/11/2011 AR+--------------------------------------------------++ fun+ Thai : Nationality ;+ Baht : Currency ; -- Thailand++ Rice : MassKind ;+ Pork : MassKind ;+ Beef : MassKind ;+ Noodles : PlurKind ;+ Shrimps : PlurKind ;+ + Chili : MassKind ;+ Garlic : MassKind ;++ Durian : Kind ;+ Mango : Kind ;+ Pineapple : Kind ;+ Egg : Kind ;++ Coke : DrinkKind ;+ IceCream : DrinkKind ; --- both mass and plural+ OrangeJuice : DrinkKind ;+ Lemonade : DrinkKind ;+ Salad : DrinkKind ;++ Beach : PlaceKind ;++ ItsRaining : Proposition ;+ ItsWindy : Proposition ;+ ItsWarm : Proposition ;+ ItsCold : Proposition ;+ SunShine : Proposition ;++ Smoke : VerbPhrase ;++ ADoctor : Person -> Action ;+ AProfessor : Person -> Action ;+ ALawyer : Person -> Action ;+ AEngineer : Person -> Action ;+ ATeacher : Person -> Action ;+ ACook : Person -> Action ;+ AStudent : Person -> Action ;+ ABusinessman : Person -> Action ; }
@@ -91,6 +91,7 @@ Rouble = mkCN (mkN041 "рубла") ; SwedishCrown = mkCN (mkA078 "шведски") (mkN041 "крона") | mkCN (mkN041 "крона") ; Zloty = mkCN (mkN041 "злота") ;+ Baht = mkCN (mkN007a "бат") ; -- Nationalities @@ -112,6 +113,7 @@ Russian = mkNat (mkN014 "руснак") (mkN047 "рускиня") (mkA078 "руски") (mkPN "Русия" R.Fem) ; Swedish = mkNat (mkN007 "швед") (mkN041 "шведка") (mkA078 "шведски") (mkPN "Швеция" R.Fem) ; Spanish = mkNat (mkN008a "испанец") (mkN041 "испанка") (mkA078 "испански") (mkPN "Испания" R.Fem) ;+ Thai = mkNat (mkN008a "тайландец") (mkN041 "тайландка") (mkA078 "тайландски") (mkPN "Тайланд" R.Masc) ; -- Means of transportation @@ -224,9 +226,47 @@ IsTranspPlace trans place = mkQS (mkQCl (mkCl (mkCN trans.name place.to))) ; + Rice = mkCN (mkN040a "ориз") ;+ Pork = mkCN (mkN054 "свинско") ;+ Beef = mkCN (mkN054 "телешко") ;+ Egg = mkCN (mkN066 "яйце") ;+ Noodles = mkCN (mkN075 "спагети") ;+ Shrimps = mkCN (mkN041 "скарида") ;+ Chili = mkCN (mkN065 "чили") ;+ Garlic = mkCN (mkN007 "чесън") ;+ Durian = mkCN (mkN007 "дуриан") ;+ Mango = mkCN (mkN065 "манго") ;+ Pineapple = mkCN (mkN007 "ананас") ;+ Coke = mkCN (mkN041 "кола") ;+ IceCream = mkCN (mkN007 "сладолед") ;+ Salad = mkCN (mkN041 "салата") ;+ OrangeJuice = mkCN (mkA076 "портокалов") (mkN001 "сок") ;+ Lemonade = mkCN (mkN041 "лимонада") ;++ Beach = mkPlace (mkN001 "плаж") na_Prep ;+ + ItsRaining = mkCl (mkVP (stateV (mkV174 "валя"))) ;+ ItsCold = mkCl (mkVP (mkA076 "студен")) ;+ ItsWarm = mkCl (mkVP (mkA080 "топъл")) ;+ ItsWindy = mkCl (mkVP (mkA076 "ветровит")) ;+ SunShine = mkCl (progressiveVP (mkVP (actionV (mkV186 "пеквам") (mkV148 "пека")))) ;++ Smoke = mkVP (stateV (mkV176 "пуша")) ;++ ADoctor = mkProfession (mkN007a "доктор") ;+ AProfessor = mkProfession (mkN007a "професор") ;+ ALawyer = mkProfession (mkN007a "адвокат") ;+ AEngineer = mkProfession (mkN007a "инженер") ;+ ATeacher = mkProfession (mkN031a "учител") ;+ ACook = mkProfession (mkN007b "готвач") ;+ AStudent = mkProfession (mkN007a "студент") ;+ ABusinessman = mkProfession (mkN007a "бизнесмен") ;+ -- auxiliaries oper+ mkProfession : N -> NPPerson -> Cl = \n,p -> mkCl p.name n ;+ mkCitizenship : N -> N -> A -> Citizenship = \male, female, adj -> lin Citizenship {s1 = table {R.Fem => female.s; _ => male.s}; s2 = adj} ;
@@ -258,4 +258,50 @@ far_IAdv = ExtraEng.IAdvAdv (ss "far") ; +--------------------------------------------------+-- New 30/11/2011 AR+--------------------------------------------------++ lin+ Thai = mkNat "Thai" "Thailand" ;+ Baht = mkCN (mkN "baht" "baht") ;++ Rice = mkCN (mkN "rice") ;+ Pork = mkCN (mkN "pork") ;+ Beef = mkCN (mkN "beef") ;+ Egg = mkCN L.egg_N ;+ Noodles = mkCN (mkN "noodle") ;+ Shrimps = mkCN (mkN "shrimp") ;+ Chili = mkCN (mkN "chili") ;+ Garlic = mkCN (mkN "garlic") ;+ Durian = mkCN (mkN "durian") ;+ Mango = mkCN (mkN "mango") ;+ Pineapple = mkCN (mkN "pineapple") ;+ Coke = mkCN (mkN "coke") ;+ IceCream = mkCN (mkN "ice cream") ;+ Salad = mkCN (mkN "salad") ;+ OrangeJuice = mkCN (mkN "orange juice") ;+ Lemonade = mkCN (mkN "lemonade") ;++ Beach = mkPlace "beach" "on" ;++ ItsRaining = mkCl (progressiveVP (mkVP L.rain_V0)) ;+ ItsCold = mkCl (mkVP L.cold_A) ;+ ItsWarm = mkCl (mkVP L.warm_A) ;+ ItsWindy = mkCl (mkVP (P.mkA "windy")) ;+ SunShine = mkCl (mkNP the_Det L.sun_N) (progressiveVP (mkVP shine_V)) ;++ Smoke = mkVP (P.mkV "smoke") ;++ ADoctor = mkProfession (mkN "doctor") ;+ AProfessor = mkProfession (mkN "professor") ;+ ALawyer = mkProfession (mkN "lawyer") ;+ AEngineer = mkProfession (mkN "engineer") ;+ ATeacher = mkProfession (mkN "teacher") ;+ ACook = mkProfession (mkN "cook") ;+ AStudent = mkProfession (mkN "student") ;+ ABusinessman = mkProfession (mkN "businessman" "businessmen") ;++ oper+ mkProfession : N -> NPPerson -> Cl = \n,p -> mkCl p.name n ; }
@@ -210,7 +210,7 @@ mkQS (mkQCl (mkIP which_IDet trans.name) (mkVP (mkVP L.go_V) place.to)) ; IsTranspPlace trans place =- mkQS (mkQCl (mkCl (mkVP (mkVP (mkVP (mkV "päästä")) trans.by) place.to))) ;+ mkQS (mkQCl (mkCl (mkVP (mkVP (mkVP (mkV "päästä")) place.to) trans.by))) ; -- pääseekö keskustaan bussilla -- mkQS (mkQCl (E.AdvPredNP place.to L.go_V (E.PartCN (trans.name)))) ; -- meneekö keskustaan bussia@@ -277,4 +277,52 @@ mkSuperl : A -> Det = \a -> mkDet the_Quant (mkOrd a) ; far_IAdv = E.IAdvAdv L.far_Adv ;++--------------------------------------------------+-- New 30/11/2011 AR+--------------------------------------------------++ lin+ Thai = mkNat (mkPN "thai") (mkPN "Thaimaa") (mkA "thaimaalainen") ;+ Baht = mkCN (mkN "baht" "bahteja") ;++ Rice = mkCN (mkN "riisi") ;+ Pork = mkCN (mkN "sika") ;+ Beef = mkCN (mkN "nauta") ;+ Egg = mkCN L.egg_N ;+ Noodles = mkCN (mkN "nuudeli" "nuudeleita") ;+ Shrimps = mkCN (mkN "katka" (mkN "rapu")) ;+ Chili = mkCN (mkN "chili") ;+ Garlic = mkCN (mkN "valko" (mkN "sipuli")) ;+ Durian = mkCN (mkN "durian" "durianeja") ;+ Mango = mkCN (mkN "mango" "mangoja") ;+ Pineapple = mkCN (mkN "ananas" "ananaksia") ;+ Coke = mkCN (mkN "coca-cola") ;+ IceCream = mkCN (mkN "jäätelö" "jäätelöitä") ;+ Salad = mkCN (mkN "salaatti") ;+ OrangeJuice = mkCN (mkN "appelsiini" (mkN "mehu")) ;+ Lemonade = mkCN (mkN "limsa") ;++ Beach = mkPlace (mkN "uima" (mkN "ranta")) lla ;++ ItsRaining = mkCl (mkVP L.rain_V0) ;+ ItsCold = mkCl (mkVP L.cold_A) ;+ ItsWarm = mkCl (mkVP L.warm_A) ;+ ItsWindy = mkCl (mkVP (mkV "tuulla")) ;+ SunShine = mkCl (mkNP the_Det L.sun_N) (mkVP (mkV "paistaa")) ;++ Smoke = mkVP (mkV "tupakoida") ;++ ADoctor = mkProfession (mkN "lääkäri" "lääkäreitä") ;+ AProfessor = mkProfession (mkN "professori" "professoreita") ;+ ALawyer = mkProfession (mkN "laki" L.man_N) ;+ AEngineer = mkProfession (mkN "insinööri" "insinöörejä") ;+ ATeacher = mkProfession (mkN "opettaja" "opettajia") ;+ ACook = mkProfession (mkN "kokki") ;+ AStudent = mkProfession (mkN "opiskelija" "opiskelijoita") ;+ ABusinessman = mkProfession (mkN "liike" L.man_N) ;++ oper+ mkProfession : N -> NPPerson -> Cl = \n,p -> mkCl p.name n ;+ }
@@ -1,4 +1,4 @@--- (c) 2009 Aarne Ranta under LGPL+-- (C) 2009 Aarne Ranta under LGPL concrete WordsRus of Words = SentencesRus ** open SyntaxRus, (P = ParadigmsRus), (L = LexiconRus), Prelude in {@@ -14,7 +14,7 @@ Bread = mkCN L.bread_N ; Cheese = mkCN L.cheese_N ; Chicken = mkCN (P.mkN "курица") ;- Coffee = mkCN (P.mkN "кофе") ;+ Coffee = mkCN (P.mkIndeclinableNoun "кофе" P.masculine P.inanimate) ; Fish = mkCN L.fish_N ; Meat = mkCN (P.mkN "мясо") ; Milk = mkCN L.milk_N ; @@ -35,39 +35,39 @@ Expensive = P.mkA "дорогой" ; Fresh = P.mkA "свежий" ; Good = L.good_A ;- Suspect = P.mkA "подозреваемый" ;+ Suspect = P.mkA "подозрительный" ; Warm = L.warm_A ; -- places - Airport = mkPlace (P.mkN "аэропорт") in_Prep ; --- AmusementPark = ? парк развлечений- Bank = mkPlace (P.mkN "банк") in_Prep ;- Bar = mkPlace (P.mkN "бар") in_Prep ; - Cafeteria = mkPlace (P.mkN "кафетерий") in_Prep ;- Center = mkPlace (P.mkN "центр") in_Prep ;- Church = mkPlace (P.mkN "церковь") in_Prep ; - Cinema = mkPlace (P.mkN "кино") in_Prep ; - Disco = mkPlace (P.mkN "дискотека") on_Prep ;- Hospital = mkPlace (P.mkN "больница") in_Prep ; - Hotel = mkPlace (P.mkN "отель") in_Prep ; - Museum = mkPlace (P.mkN "музей") in_Prep ; - Park = mkPlace (P.mkN "парк") in_Prep ; - Parking = mkPlace (P.mkN "автостоянка") on_Prep ; - Pharmacy = mkPlace (P.mkN "аптека") in_Prep ;- PostOffice = mkPlace (P.mkN "почта") on_Prep ;- Pub = mkPlace (P.mkN "паб") in_Prep ;- Restaurant = mkPlace (P.mkN "ресторан") in_Prep ; - Shop = mkPlace (P.mkN "магазин") in_Prep ; - School = mkPlace (P.mkN "школа") in_Prep ; - Station = mkPlace (P.mkN "станция") on_Prep ; - Supermarket = mkPlace (P.mkN "супермаркет") in_Prep ;- Theatre = mkPlace (P.mkN "театр") in_Prep ;- Toilet = mkPlace (P.mkN "туалет") in_Prep ; - University = mkPlace (P.mkN "университет") in_Prep ; - Zoo = mkPlace (P.mkN "зоопарк") in_Prep ;+ Airport = mkPlace "аэропорт" in_Prep ; + AmusementPark = mkPlace2 "развлечения" "парк" in_Prep;+ Bank = mkPlace "банк" in_Prep ;+ Bar = mkPlace "бар" in_Prep ; + Cafeteria = mkPlace "кафетерий" in_Prep ;+ Center = mkPlace "центр" in_Prep ;+ Church = mkPlace "церковь" in_Prep ; + Cinema = mkPlace "кино" in_Prep ; + Disco = mkPlace "дискотека" on_Prep ;+ Hospital = mkPlace "больница" in_Prep ; + Hotel = mkPlace "отель" in_Prep ; + Museum = mkPlace "музей" in_Prep ; + Park = mkPlace "парк" in_Prep ; + Parking = mkPlace "автостоянка" on_Prep ; + Pharmacy = mkPlace "аптека" in_Prep ;+ PostOffice = mkPlace "почта" on_Prep ;+ Pub = mkPlace "паб" in_Prep ;+ Restaurant = mkPlace "ресторан" in_Prep ; + Shop = mkPlace "магазин" in_Prep ; + School = mkPlace "школа" in_Prep ; + Station = mkPlace "станция" on_Prep ; + Supermarket = mkPlace "супермаркет" in_Prep ;+ Theatre = mkPlace "театр" in_Prep ;+ Toilet = mkPlace "туалет" in_Prep ; + University = mkPlace "университет" in_Prep ; + Zoo = mkPlace "зоопарк" in_Prep ; CitRestaurant cit = @@ -76,37 +76,37 @@ -- currencies - DanishCrown = mkCN (P.mkA "датский") (P.mkN "крона") ;- Dollar = mkCN (P.mkN "доллар") ;- Euro = mkCN (P.mkN "евро") ;- Lei = mkCN (P.mkN "лей") ;- Leva = mkCN (P.mkN "лев") ;- NorwegianCrown = mkCN (P.mkA "норвежский") (P.mkN "крона") ; - Pound = mkCN (P.mkN "фунт");- Rouble = mkCN (P.mkN "рубль") ;- SwedishCrown = mkCN (P.mkA "шведский") (P.mkN "крона") ;- Zloty = mkCN (P.mkN "злотый") ;+ DanishCrown = mkCN (P.mkA "датский") (P.mkN "крона" P.inanimate) ;+ Dollar = mkCN (P.mkN "доллар" P.inanimate) ;+ Euro = mkCN (P.mkIndeclinableNoun "евро" P.neuter P.inanimate) ;+ Lei = mkCN (P.mkN "лей" P.inanimate) ;+ Leva = mkCN (P.mkN "лев" P.inanimate) ;+ NorwegianCrown = mkCN (P.mkA "норвежский") (P.mkN "крона" P.inanimate) ; + Pound = mkCN (P.mkN "фунт" P.inanimate);+ Rouble = mkCN (P.mkN "рубль" P.inanimate) ;+ SwedishCrown = mkCN (P.mkA "шведский") (P.mkN "крона" P.inanimate) ;+ Zloty = mkCN (P.mkN "злотый" P.inanimate) ; -- Nationalities --- Belgian = mkNat "бельгийский" (P.mkN "Бельгия" "Бельгии" "Бельгию" "Бельгию" "Бельгией" "Бельгии" "Бельгии" "Бельгии" "Бельгий" "Бельгиям" "Бельгии" "Бельгиями" "Бельгиях" P.feminine P.animate) ;- Bulgarian = mkNat "болгарский" (P.mkN "Болгария" "Болгарии" "Болгарию" "Болгарию" "Болгарией" "Болгарии" "Болгарии" "Болгарии" "Болгарий" "Болгариям" "Болгарии" "Болгариями" "Болгариях" P.feminine P.animate) ;- Catalan = mkNat "каталонский" (P.mkN "Каталония" "Каталонии" "Каталонию" "Каталонию" "Каталонией" "Каталонии" "Каталонии" "Каталонии" "Каталоний" "Каталониям" "Каталонии" "Каталониями" "Каталониях" P.feminine P.animate) ;- Danish = mkNat "датский" (P.mkN "Дания" "Дании" "Данию" "Данию" "Данией" "Дании" "Дании" "Дании" "Даний" "Даниям" "Дании" "Даниями" "Даниях" P.feminine P.animate) ;- Dutch = mkNat "нидерландский" (P.mkN "Нидерланды" P.animate) ;- English = mkNat "английский" (P.mkN "Англия" "Англии" "Англию" "Англию" "Англией" "Англии" "Англии" "Англии" "Англий" "Англиям" "Англии" "Англиями" "Англиях" P.feminine P.animate) ;- Finnish = mkNat "финский" (P.mkN "Финляндия" "Финляндии" "Финляндию" "Финляндию" "Финляндией" "Финляндии" "Финляндии" "Финляндии" "Финляндий" "Финляндиям" "Финляндии" "Финляндиями" "Финляндиях" P.feminine P.animate) ;--- Flemish = mkNat "фландрийский" (P.mkN "Фландрия" "Фландрии" "Фландрию" "Фландрию" "Фландрией" "Фландрии" "Фландрии" "Фландрии" "Фландрий" "Фландриям" "Фландрии" "Фландриями" "Фландриях" P.feminine P.animate) ;- French = mkNat "французский" (P.mkN "Франция" "Франции" "Францию" "Францию" "Францией" "Франции" "Франции" "Франции" "Франций" "Франциям" "Франции" "Франциями" "Франциях" P.feminine P.animate) ;- German = mkNat "немецкий" (P.mkN "Германия" "Германии" "Германию" "Германию" "Германией" "Германии" "Германии" "Германии" "Германий" "Германиям" "Германии" "Германиями" "Германиях" P.feminine P.animate) ;- Italian = mkNat "итальянский" (P.mkN "Италия" "Италии" "Италию" "Италию" "Италией" "Италии" "Италии" "Италии" "Италий" "Италиям" "Италии" "Италиями" "Италиях" P.feminine P.animate) ;- Norwegian = mkNat "норвежский" (P.mkN "Норвегия" "Норвегии" "Норвегию" "Норвегию" "Норвегией" "Норвегии" "Норвегии" "Норвегии" "Норвегий" "Норвегиям" "Норвегии" "Норвегиями" "Норвегиях" P.feminine P.animate) ;- Polish = mkNat "польский" (P.mkN "Польша" "Польши" "Польшу" "Польшу" "Польшей" "Польше" "Польше" "Польши" "Польш" "Польшам" "Польши" "Польшами" "Польшах" P.feminine P.animate) ;- Romanian = mkNat "румынский" (P.mkN "Румыния" "Румынии" "Румынию" "Румынию" "Румынией" "Румынии" "Румынии" "Румынии" "Румыний" "Румыниям" "Румынии" "Румыниями" "Румыниях" P.feminine P.animate) ;- Russian = mkNat "русский" (P.mkN "Россия" "России" "Россию" "Россию" "Россией" "России" "России" "России" "Россий" "Россиям" "России" "Россиями" "Россиях" P.feminine P.animate) ;- Spanish = mkNat "испанский" (P.mkN "Испания" "Испании" "Испанию" "Испанию" "Испанией" "Испании" "Испании" "Испании" "Испаний" "Испаниям" "Испании" "Испаниями" "Испаниях" P.feminine P.animate) ;- Swedish = mkNat "шведский" (P.mkN "Швеция" "Швеции" "Швецию" "Швецию" "Швецией" "Швеции" "Швеции" "Швеции" "Швеций" "Швециям" "Швеции" "Швециями" "Швециях" P.feminine P.animate) ;+-- Belgian = mkNat "бельгийский" (P.mkPN "Бельгия" P.feminine P.singular P.inanimate) ;+ Bulgarian = mkNat "болгарский" (P.mkPN "Болгария" P.feminine P.singular P.animate) ;+ Catalan = mkNat "каталонский" (P.mkPN "Каталония" P.feminine P.singular P.animate) ;+ Danish = mkNat "датский" (P.mkPN "Дания" P.feminine P.singular P.animate) ;+ Dutch = mkNat "нидерландский" (P.mkPN "Нидерланды" P.neuter P.plural P.inanimate) ;+ English = mkNat "английский" (P.mkPN "Англия" P.feminine P.singular P.animate) ;+ Finnish = mkNat "финский" (P.mkPN "Финляндия" P.feminine P.singular P.animate) ;+-- Flemish = mkNat "фландрийский" (P.mkPN "Фландрия" P.feminine P.singular P.animate) ;+ French = mkNat "французский" (P.mkPN "Франция" P.feminine P.singular P.animate) ;+ German = mkNat "немецкий" (P.mkPN "Германия" P.feminine P.singular P.animate) ;+ Italian = mkNat "итальянский" (P.mkPN "Италия" P.feminine P.singular P.animate) ;+ Norwegian = mkNat "норвежский" (P.mkPN "Норвегия" P.feminine P.singular P.animate) ;+ Polish = mkNat "польский" (P.mkPN "Польша" P.feminine P.singular P.animate) ;+ Romanian = mkNat "румынский" (P.mkPN "Румыния" P.feminine P.singular P.animate) ;+ Russian = mkNat "русский" (P.mkPN "Россия" P.feminine P.singular P.animate) ;+ Spanish = mkNat "испанский" (P.mkPN "Испания" P.feminine P.singular P.inanimate) ;+ Swedish = mkNat "шведский" (P.mkPN "Швеция" P.feminine P.singular P.animate) ; -- Means of transportation@@ -117,8 +117,8 @@ Car = mkTransport (P.mkN "автомобиль"); Ferry = mkTransport (P.mkN "паром") ; Plane = mkTransport (P.mkN "самолет") ;- Subway = mkTransport (P.mkN "метро") ;- Taxi = mkTransport (P.mkN "такси") ;+ Subway = mkTransport (P.mkIndeclinableNoun "метро" P.neuter P.inanimate) ;+ Taxi = mkTransport (P.mkIndeclinableNoun "такси" P.neuter P.inanimate) ; Tram = mkTransport (P.mkN "трамвай") ; Train = mkTransport (P.mkN "поезд") ; @@ -128,7 +128,7 @@ -- actions AHasAge p num = mkCl p.name (mkNP num L.year_N) ; --- AHasName p name = ? + AHasName p name = mkCl (mkVP (P.mkV3 name_is_V "" "" P.accusative P.nominative) p.name name) ; AHasChildren p num = mkCl p.name have_V2 (mkNP num L.child_N) ; AHasRoom p num = mkCl p.name have_V2 (mkNP (mkNP a_Det (P.mkN "номер")) @@ -136,29 +136,28 @@ AHasTable p num = mkCl p.name have_V2 (mkNP (mkNP a_Det (P.mkN "стол")) (SyntaxRus.mkAdv for_Prep (mkNP num (P.mkN "человек")))) ;- AHungry p = mkCl p.name (P.mkAdv "голоден") ; - AIll p = mkCl p.name (P.mkA "болен") ; + AHungry p = mkCl p.name (P.mkAdv "голодный") ; + AIll p = mkCl p.name (P.mkA "больной") ; AKnow p = mkCl p.name (P.regV P.imperfective P.first "зна" "ю" "знал" "знай" "знать" ) ; ALike p item = mkCl p.name (P.dirV2 (P.regV P.imperfective P.second "нрав" "лю" "нравил" "нравь" "нравить" )) item ; ALive p co = mkCl p.name (mkVP (mkVP (P.regV P.imperfective P.firstE "жив" "у" "жил" "живи" "жить")) (SyntaxRus.mkAdv in_Prep co)) ; ALove p q = mkCl p.name (P.dirV2 (P.regV P.imperfective P.second "люб" "лю" "любил" "люби" "любить" )) q.name ; - AMarried p = mkCl p.name (P.mkA "женат") ; - AReady p = mkCl p.name (P.mkA "готов") ; - AScared p = mkCl p.name (P.mkA "боюсь") ;- ASpeak p lang = mkCl p.name (P.mkV2 (P.regV P.imperfective P.secondA "говор" "ю" "говорил" "говори" "говорить")- "на" P.prepositional) lang ; - AThirsty p = mkCl p.name (P.mkA "жажду") ; - ATired p = mkCl p.name (P.mkA "устал") ; + AMarried p = mkCl p.name (P.mkA "женатый") ; + AReady p = mkCl p.name (P.mkA "готовый") ; + AScared p = mkCl p.name (P.mkA "испуганный") ;+ ASpeak p lang = mkCl p.name (P.mkV2 (P.regV P.imperfective P.secondA "говор" "ю" "говорил" "говори" "говорить") "на" P.prepositional) lang ; + AThirsty p = mkCl p.name (P.mkA "жаждущий") ; + ATired p = mkCl p.name (P.mkA "уставший") ; AUnderstand p = mkCl p.name (P.regV P.imperfective P.first "понима" "ю" "понимал" "понимай" "понимать") ; AWant p obj = mkCl p.name want_VV (mkVP have_V2 obj) ; AWantGo p place = mkCl p.name want_VV (mkVP (mkVP L.go_V) place.to) ; -- miscellaneous --- QWhatName p = ? --- QWhatAge p = ?--- HowMuchCost item = ?--- ItCost item price = ? + QWhatName p = mkQS (mkQCl how_IAdv (mkCl (mkVP (P.mkV2 name_is_V "" P.accusative) p.name))) ;+ QWhatAge p = mkQS (mkQCl (mkIP how8many_IDet L.year_N) p.name);+ HowMuchCost item = mkQS (mkQCl how8much_IAdv (mkCl item cost_V)) ; + ItCost item price = mkCl item (P.mkV2 cost_V "" P.accusative) price ; PropOpen p = mkCl p.name open_A ; PropClosed p = mkCl p.name closed_A ; @@ -167,12 +166,13 @@ PropOpenDay p d = mkCl p.name (mkVP (mkVP open_A) d.habitual) ; PropClosedDay p d = mkCl p.name (mkVP (mkVP closed_A) d.habitual) ; + -- Building phrases from strings is complicated: the solution is to use -- mkText : Text -> Text -> Text ; PSeeYouDate d = mkText (lin Text (ss ("увидимся"))) (mkPhrase (mkUtt d)) ; PSeeYouPlace p = - mkText (lin Text (ss ("Вы видите"))) (mkPhrase (mkUtt p.at)) ; + mkText (lin Text (ss ("увидимся"))) (mkPhrase (mkUtt p.at)) ; PSeeYouPlaceDate p d = mkText (lin Text (ss ("увидимся"))) (mkText (mkPhrase (mkUtt d)) (mkPhrase (mkUtt p.at))) ; @@ -181,10 +181,11 @@ -- below. Languages without productive genitives must use an equivalent of -- "the wife of my son" for non-pronouns. - Wife = xOf sing (P.mkN "жена") ; - Husband = xOf sing (P.mkN "муж") ;- Son = xOf sing (P.mkN "сын") ;- Daughter = xOf sing (P.mkN "дочь") ;+ Wife = xOf sing (P.mkN "жена" P.animate) ; + Husband = xOf sing (P.mkN "муж" P.animate) ;+ Son = xOf sing (P.mkN "сын" P.animate) ;+ Daughter = xOf sing (P.mkN "дочь" "дочери" "дочери" "дочь" "дочерью" "дочери" "дочь" "дочери" "дочерей" "дочерям" "дочерей" "дочерьми" "дочерях" P.feminine P.animate) ;+-- Daughter = xOf sing E.daughter_N ; Children = xOf plur L.child_N ; @@ -203,11 +204,11 @@ -- modifiers of places TheBest = mkSuperl L.good_A ;- --TheClosest = mkSuperl ? ; + TheClosest = mkSuperl L.near_A ; TheCheapest = mkSuperl (P.mkA "дешевый") ;- TheMostExpensive = mkSuperl (P.mkA "duur") ;+ TheMostExpensive = mkSuperl (P.mkA "дорогой") ; TheMostPopular = mkSuperl (P.mkA "популярный") ;- TheWorst = mkSuperl (P.mkA "плохой") ;+ TheWorst = mkSuperl L.bad_A ; SuperlPlace sup p = placeNP sup p ; @@ -229,29 +230,35 @@ oper- mkNat : Str -> N -> NPNationality = \la,co -> - mkNPNationality (mkNP (P.mkPN la P.masculine P.animate)) (mkNP co) (P.mkA la) ;+ mkNat : Str -> PN -> NPNationality = \la,co -> + mkNPNationality (mkNP (mkCN (P.mkA la) (P.mkN "язык"))) (mkNP co) (P.mkA la) ; - mkDay : Str -> P.Gender -> {name : NP ; point : Adv ; habitual : Adv} = \d,g -> - mkNPDay (mkNP (P.mkPN d g P.inanimate)) (mkAdv (P.mkPrep [] P.nominative) (mkNP (P.mkPN d g P.inanimate))) + mkDay : Str -> P.Gender -> {name : NP ; point : Adv ; habitual : Adv} =+ \d,g -> mkNPDay (mkNP (P.mkPN d g P.singular P.inanimate)) (mkAdv (P.mkPrep "в" P.accusative) (mkNP (P.mkPN d g P.singular P.inanimate))) ---- (mkAdv on_Prep (mkNP (P.mkPN d))) - (mkAdv on_Prep (mkNP a_Quant plNum (mkCN (P.mkN d)))) ;+ (mkAdv (P.mkPrep "по" P.dative) (mkNP a_Quant plNum (mkCN (P.mkN d)))) ; -- mkPlace : N -> Str -> {name : CN ; at : Prep ; to : Prep} = \p,i -> -- mkCNPlace (mkCN p) (P.mkPrep i P.prepositional) to_Prep ;- mkPlace : N -> Prep -> {name : CN ; at : Prep ; to : Prep ; isPl : Bool} = \p,i -> - mkCNPlace (mkCN p) i to_Prep;+ mkPlace : Str -> Prep -> {name : CN ; at : Prep ; to : Prep ; isPl : Bool} = \p,i -> + mkCNPlace (mkCN (P.mkN p)) i to_Prep; + mkPlace2 : Str -> Str -> Prep -> {name : CN ; at : Prep ; to : Prep ; isPl : Bool} = \p,p2,i -> + mkCNPlace (mkCN (P.mkN2 (P.mkN p2)) (mkNP (P.mkN p))) i to_Prep; - open_A = P.mkA "открыт" ;- closed_A = P.mkA "закрыт" ;+ open_A = P.mkA "открытый";+ closed_A = P.mkA "закрытый"; + cost_V = P.regV P.imperfective P.secondA "сто" "ю" "стоил" "стой" "стоить" ;++ name_is_V = P.regV P.imperfective P.first "зов" "у" "звал" "зови" "звать" ;+ xOf : GNumber -> N -> NPPerson -> NPPerson = \n,x,p -> relativePerson n (mkCN x) (\a,b,c -> mkNP (mkNP the_Quant a c) (SyntaxRus.mkAdv possess_Prep b)) p ; mkTransport : N -> {name : CN ; by : Adv} = \n -> {- name = mkCN n ; - by = SyntaxRus.mkAdv with_Prep (mkNP the_Det n)+ name = mkCN n ; + by = SyntaxRus.mkAdv on_Prep (mkNP the_Det n) } ; far_IAdv = ss "как далеко" ** {lock_IAdv = <>} ;
@@ -245,4 +245,51 @@ mkSuperl : A -> Det = \a -> mkDet the_Art (mkOrd a) ; far_IAdv = ExtraSwe.IAdvAdv L.far_Adv ;++--------------------------------------------------+-- New 30/11/2011 AR+--------------------------------------------------++ lin+ Thai = mkNPNationality (mkNP (mkPN "thai")) (mkNP (mkPN "Thailand")) (mkA "thailändsk") ;+ Baht = mkCN (mkN "baht" "baht") ;++ Rice = mkCN (mkN "ris" "ris") ;+ Pork = mkCN (mkN "fläsk" "fläsk") ;+ Beef = mkCN (mkN "nötkött" "nötkött") ;+ Egg = mkCN L.egg_N ;+ Noodles = mkCN (mkN "nudel" "nudlar") ;+ Shrimps = mkCN (mkN "räka") ;+ Chili = mkCN (mkN "chili" "chilier") ;+ Garlic = mkCN (mkN "vitlök") ;+ Durian = mkCN (mkN "durian" "durianer") ;+ Mango = mkCN (mkN "mango" "mangoer") ;+ Pineapple = mkCN (mkN "ananas" "ananaser") ;+ Coke = mkCN (mkN "kola") ;+ IceCream = mkCN (mkN "glass") ;+ Salad = mkCN (mkN "sallad" "sallader") ;+ OrangeJuice = mkCN (mkN "apelsinjuice" "apelsinjuicer") ;+ Lemonade = mkCN (mkN "läsk") ;+ Beach = mkPlace (mkN "badstrand" "badstränder") "på" ;++ ItsRaining = mkCl (mkVP L.rain_V0) ;+ ItsCold = mkCl (mkVP L.cold_A) ;+ ItsWarm = mkCl (mkVP L.warm_A) ;+ ItsWindy = mkCl (mkVP (mkV "blåser")) ;+ SunShine = mkCl (mkNP the_Det L.sun_N) (skina_V) ;++ Smoke = mkVP (mkV "röker") ;++ ADoctor = mkProfession (mkN "läkare" "läkare") ;+ AProfessor = mkProfession (mkN "professor" "professorer") ;+ ALawyer = mkProfession (mkN "jurist" "jurister") ;+ AEngineer = mkProfession (mkN "ingenjör" "ingenjörer") ;+ ATeacher = mkProfession (mkN "lärare" "lärare") ;+ ACook = mkProfession (mkN "kock") ;+ AStudent = mkProfession (mkN "student" "srudenter") ;+ ABusinessman = mkProfession (mkN "affärsman" "affärsmannen" "affärsmän" "affärsmännen") ;++ oper+ mkProfession : N -> NPPerson -> Cl = \n,p -> mkCl p.name (mkVP (CompBareCN (mkCN n))) ;+ }
@@ -0,0 +1,319 @@+concrete WordsTha of Words = SentencesTha ** + open + SyntaxTha,+ ParadigmsTha,+ (P = ParadigmsTha),+ (R = ResTha),+ (L = LexiconTha),+ Prelude in {++ flags coding = utf8 ;++ lin++-- Kinds; many of them are in the resource lexicon, others can be built by $mkN$.++ Apple = mkCN L.apple_N ;+ Beer = mkCN L.beer_N ;+ Bread = mkCN L.bread_N ;+ Cheese = mkCN L.cheese_N ;+ Chicken = mkCN (mkN "ไก่") ;+ Coffee = mkCN (mkN (R.thword "กา" "แฟ")) ;+ Fish = mkCN L.fish_N ;+ Meat = mkCN L.meat_N ;+ Milk = mkCN L.milk_N ;+ Pizza = mkCN (mkN (R.thword "พิซ" "ซา") "ถาด") ;+ Salt = mkCN L.salt_N ;+ Tea = mkCN (mkN "ชา") ;+ Water = mkCN L.water_N ;+ Wine = mkCN L.wine_N ;++-- Properties; many of them are in the resource lexicon, others can be built by $mkA$.++ Bad = L.bad_A ;+ Boring = mkA (R.thword "น่า" "เบื่อ") ;+ Cheap = mkA (R.thword "รา" "คา" "ถูก") ;+ Cold = L.cold_A ;+ Delicious = mkA "อร่อย" ;+ Expensive = mkA "แพง" ;+ Fresh = mkA "สด" ;+ Good = mkA "ดี" ;+ Suspect = mkA (R.thword "สง" "สัย") ;+ Warm = L.warm_A ;++-- Places require different prepositions to express location; in some languages +-- also the directional preposition varies, but in English we use $to$, as+-- defined by $mkPlace$.++ Airport = mkPlace (placeN (R.thword "สนาม" "บิน")) ;+ AmusementPark = mkPlace (placeN (R.thword "สวน" "สนุก")) ;+ Bank = mkPlace (placeN (R.thword "ธนา" "คาร")) ;+ Bar = mkPlace (placeN (R.thword "บาร์")) ;+ Cafeteria = mkPlace (placeN (R.thword "โรง" "อา" "หาร")) ;+ Center = mkPlace (placeN (R.thword "ศูนย์" "กลาง")) ;+ Cinema = mkPlace (placeN (R.thword "โรง" "หนัง")) ;+ Church = mkPlace (placeN (R.thword "โบส" "ถ์")) ;+ Disco = mkPlace (placeN (R.thword "ดิส" "โก้")) ;+ Hospital = mkPlace (placeN (R.thword "โรง" "พยา" "บาล")) ;+ Hotel = mkPlace (placeN (R.thword "โรง" "แรม")) ;+ Museum = mkPlace (placeN (R.thword "พิ" " พิธ" "ภัณ" "ฑ์")) ;+ Park = mkPlace (placeN (R.thword "สวน")) ;+ Parking = mkPlace (placeN (R.thword "ที่" "จอด" "รถ")) ; + Pharmacy = mkPlace (placeN (R.thword "ร้าน" "ขาย" "ยา")) ;+ PostOffice = mkPlace (placeN (R.thword "ไปร" "ษณี" "ย์")) ;+ Pub = mkPlace (placeN (R.thword "ร้าน" "เหล้า")) ;+ Restaurant = mkPlace L.restaurant_N ;+ School = mkPlace L.school_N ;+ Shop = mkPlace L.shop_N ;+ Station = mkPlace (placeN (R.thword "สถา" "นี")) ;+ Supermarket = mkPlace (placeN (R.thword "ซุป" "เปอ" "ร์" "มา" "เก็ต")) ; + Theatre = mkPlace (placeN (R.thword "โรง" "ละ" "คร")) ;+ Toilet = mkPlace (placeN (R.thword "ห้อง" "น้ำ")) ;+ University = mkPlace L.university_N ;+ Zoo = mkPlace (placeN (R.thword "สวน" "สัต" "ว์")) ;+ + CitRestaurant cit = mkCNPlace (mkCN cit L.restaurant_N) at_Prep noPrep ;+++-- Currencies; $crown$ is ambiguous between Danish and Swedish crowns.++ DanishCrown = mkCN (mkA (R.thword "เดน" "มาร์ค")) (mkN "โครน") | mkCurrency "โครน" ; ---#+ Dollar = mkCurrency (R.thword "ดอล" "ล่า" "ห์") ;+ Euro = mkCurrency (R.thword "ยู" "โร") ;+ Lei = mkCurrency "ลี" ;+ Leva = mkCurrency (R.thword "ลี" "วา") ;+ NorwegianCrown = mkCN (mkA (R.thword "นอร" "เว" "ย์")) (mkN "โครน") | mkCurrency "โครน" ;+ Pound = mkCurrency (R.thword "ปอน" "ด์") ;+ Rouble = mkCurrency (R.thword "รู" "เบิล") ;+ SwedishCrown = mkCN (mkA (R.thword "สวี" "ดิช")) (mkN "โครน") | mkCurrency "โครน" ;+ Zloty = mkCurrency (R.thword "สะ" "ลอ" "ตี้") ;++-- Nationalities++ Belgian = mkA (R.thword "เบล" "เยี่ยน") ;+ Belgium = mkNP (mkPN (R.thword "เบล" "เยี่ยม")) ;+ Bulgarian = mkNat (R.thword "บัล" "แก" "เรียน") ;+ Catalan = mkNat (R.thword "คะ" "ตะ" "ลัน") ;+ Danish = mkNat (R.thword "เดน" "นิช") ;+ Dutch = mkNat (R.thword "ดัทช์") ;+ English = mkNat (R.thword "อัง" "กฤษ") ;+ Finnish = mkNat (R.thword "ฟิน" "นิช") ;+ Flemish = mkNP (mkPN (R.thword "เฟลม" "มิช")) ;+ French = mkNat (R.thword "ฝรั่ง" "เศส") ; + German = mkNat (R.thword "เยอร" "มัน") ;+ Italian = mkNat (R.thword "อิ" "ตา" "เลียน") ;+ Norwegian = mkNat (R.thword "นอร" "เวย์" "เจี้ยน") ;+ Polish = mkNat (R.thword "โป" "ลิช") ;+ Romanian = mkNat (R.thword "โร" "มา" "เนียน") ;+ Russian = mkNat (R.thword "รัส" "เซียน") ;+ Spanish = mkNat (R.thword "สแปน" "นิช") ;+ Swedish = mkNat (R.thword "สวี" "ดิช") ;++-- Means of transportation ++ Bike = mkTransport L.bike_N ;+ Bus = mkTransport (mkN (R.thword "รถ" "เม" "ล์")) ;+ Car = mkTransport L.car_N ;+ Ferry = mkTransport (mkN (R.thword "เรือ" "เฟอ" "รี่")) ;+ Plane = mkTransport L.airplane_N ;+ Subway = mkTransport (mkN (R.thword "รถ" "ไฟ" "ใต้" "ดิน")) ;+ Taxi = mkTransport (mkN (R.thword "รถ" "แท็ก" "ซี่")) ;+ Train = mkTransport L.train_N ;+ Tram = mkTransport (mkN (R.thword "รถ" "ราง")) ;++ ByFoot = P.mkAdv (R.thword "ด้วย" "การ" "เดิน") ;++-- Actions: the predication patterns are very often language-dependent.++ AHasAge p num = mkCl p.name (mkNP (mkNP num L.year_N) (ParadigmsTha.mkAdv (R.thword "อา" "ยุ"))) ;+ AHasChildren p num = mkCl p.name have_V2 (mkNP num L.child_N) ;+ AHasRoom p num = mkCl p.name have_V2 + (mkNP (mkNP a_Det (mkN "ห้อง")) (SyntaxTha.mkAdv for_Prep (mkNP num (mkN "หมาย" "เลข")))) ;+ AHasTable p num = mkCl p.name have_V2 + (mkNP (mkNP a_Det (mkN "โต๊ะ")) (SyntaxTha.mkAdv for_Prep (mkNP num (mkN "ตัว" "ที่")))) ;+ AHasName p name = mkCl p.name (mkV2 "ชื่อ") name ; ---+ AHungry p = mkCl p.name (mkA (R.thword "หิว" "ข้าว")) ;+ AIll p = mkCl p.name (mkA (R.thword "เจ็บ" "ปวย")) ;+ AKnow p = mkCl p.name <lin V L.know_V2 : V> ;+ ALike p item = mkCl p.name (mkV2 (mkV "ชอบ")) item ;+ ALive p co = mkCl p.name (mkVP (mkVP (mkV (R.thword "อา" "ศัย" "อยู่"))) (SyntaxTha.mkAdv in_Prep co)) ;+ ALove p q = mkCl p.name L.love_V2 q.name ;+ AMarried p = mkCl p.name (mkAP L.married_A2) ;+ AReady p = mkCl p.name L.ready_A ;+ AScared p = mkCl p.name (mkA "กลัว") ;+ ASpeak p lang = mkCl p.name L.speak_V2 lang ;+ AThirsty p = mkCl p.name (mkA (R.thword "กระ" "หาย" "น้ำ")) ;+ ATired p = mkCl p.name (mkA "เหนื่อย") ;+ AUnderstand p = mkCl p.name (mkV (R.thword "เข้า" "ใจ")) ;+ AWant p obj = mkCl p.name (mkV2 (mkV (R.thword "ต้อง" "การ"))) obj ;+ AWantGo p place = mkCl p.name want_VV (mkVP (mkVP L.go_V) place.to) ;++-- miscellaneous++ QWhatName p = mkQS (mkQCl whatSg_IP p.name (mkV2 "ชื่อ")) ; ---+ QWhatAge p = mkQS (mkQCl (mkIComp how8much_IAdv) (mkNP p.name (ParadigmsTha.mkAdv (R.thword "อา" "ยุ")))) ; --- Adv+ HowMuchCost item = mkQS (mkQCl (mkIComp how8much_IAdv) item) ;+ ItCost item price = mkCl item (mkV2 (R.thword "เป็น" "รา" "คา")) price ;++ PropOpen p = mkCl p.name open_A ;+ PropClosed p = mkCl p.name closed_A ;+ PropOpenDate p d = mkCl p.name (mkVP (mkVP open_A) d) ; + PropClosedDate p d = mkCl p.name (mkVP (mkVP closed_A) d) ; + PropOpenDay p d = mkCl p.name (mkVP (mkVP open_A) d.habitual) ; + PropClosedDay p d = mkCl p.name (mkVP (mkVP closed_A) d.habitual) ; ++-- Building phrases from strings is complicated: the solution is to use+-- mkText : Text -> Text -> Text ;++ PSeeYouDate d = mkText (lin Text (ss (R.thword "เจอ" "กัน"))) (mkPhrase (mkUtt d)) ;+ PSeeYouPlace p = mkText (lin Text (ss (R.thword "เจอ" "กัน" "ที่"))) (mkPhrase (mkUtt p.at)) ;+ PSeeYouPlaceDate p d = + mkText (lin Text (ss (R.thword "เจอ" "กัน" "ที่"))) + (mkText (mkPhrase (mkUtt p.at)) (mkPhrase (mkUtt d))) ;++-- Relations are expressed as "มย วิฝเ" or "มย สoณส วิฝเ", as defined by $xOf$+-- below. Languages without productive genitives must use an equivalent of+-- "ตหเ วิฝเ oฝ มย สoน" for non-pronouns.++ Wife = xOf (R.thword "ภร" "รยา") ; -- polite+ Husband = xOf (R.thword "สา" "มี") ; -- polite+--- Wife = xOf "เมีย" ; ---- familiar+--- Husband = xOf "ผัว" ; ---- familiar+ Son = xOf (R.thword "ลูก" "ชาย") ;+ Daughter = xOf (R.thword "ลูก" "สาว") ;+ Children = xOf L.child_N.s ; ----++-- week days++ Monday = mkDay (R.thword "วัน" "จั" "นท" "ร์") ;+ Tuesday = mkDay (R.thword "วัน" "อัง" "คาร") ;+ Wednesday = mkDay (R.thword "วัน" "พุธ") ;+ Thursday = mkDay (R.thword "วัน" "พฤ" "หัส" "บดี") ;+ Friday = mkDay (R.thword "วัน" "ศุกร์") ;+ Saturday = mkDay (R.thword "วัน" "เสาร์") ;+ Sunday = mkDay (R.thword "วัน" "อา" "ทิตย์") ;+ + Tomorrow = P.mkAdv (R.thword "วัน" "พรุ่ง" "นี้") ;++-- modifiers of places++ TheBest = mkSuperl L.good_A ;+ TheClosest = mkSuperl L.near_A ; + TheCheapest = mkSuperl (mkA (R.thword "รา" "คา" "ถูก")) ;+ TheMostExpensive = mkSuperl (mkA "แพง") ;+ TheMostPopular = mkSuperl (mkA (R.thword "โด่ง" "ดัง")) ;+ TheWorst = mkSuperl L.bad_A ;++ SuperlPlace sup p = placeNP sup p ;+++-- transports++ HowFar place = mkQS (mkQCl howFar.howfar place.name) ; ---- (mkNP place.name howFar.far)) ;++ HowFarFrom x y = + mkQS (mkQCl howFar.how (mkCl (mkNP y.name howFar.far) (lin AP (R.thbind from_Prep x.name)))) ; --- no yuu++ HowFarFromBy x y t = + mkQS (mkQCl howFar.how (mkCl (mkNP y.name howFar.far) + (lin AP (R.thbind from_Prep (mkNP x.name t))))) ;+-- mkQS (mkQCl howFar.how (mkCl (mkNP y.name howFar.far) +-- (SyntaxTha.mkAdv from_Prep (mkNP x.name t)))) ;++ HowFarBy y t = mkQS (mkQCl howFar.how (mkCl (mkNP y.name howFar.far) <t : AP>)) ;+ + WhichTranspPlace trans place = + mkQS (mkQCl (mkIP which_IDet trans.name) (mkVP (mkVP L.go_V) place.to)) ;++ IsTranspPlace trans place =+ mkQS (mkQCl (mkCl (mkCN (mkCN trans.name (mkSC (mkVP L.go_V))) place.to))) ;++++-- auxiliaries++ oper+-- thpron = R.thpron ;++ mkNat : Str -> NPNationality = \nat -> + mkNPNationality (mkNP (mkCN (mkA nat) L.language_N)) (mkNP (mkCN (mkA nat) L.country_N)) (mkA nat) ;++ mkDay : Str -> {name : NP ; point : Adv ; habitual : Adv} = \d ->+ let day = lin NP (ss d) in + mkNPDay day (SyntaxTha.mkAdv noPrep day) + (SyntaxTha.mkAdv noPrep (mkNP a_Quant plNum (mkCN (mkN d)))) ;+ + mkPlace : N -> {name : CN ; at : Prep ; to : Prep; isPl : Bool} = \p -> + mkCNPlace (mkCN p) at_Prep noPrep ;++ open_A = P.mkA "เปิด" ;+ closed_A = P.mkA "ปิด" ;++ xOf : Str -> NPPerson -> NPPerson = \f,p -> + {name = mkNP the_Det (mkCN (personN f) (SyntaxTha.mkAdv possess_Prep p.name)) ; + isPron = False ; poss = the_Quant} ; ---- poss not used+++ mkTransport : N -> {name : CN ; by : Adv} = \n -> {+ name = mkCN n ; + by = SyntaxTha.mkAdv (mkPrep "โดย") (mkNP n)+ } ;++ mkSuperl : A -> Det = \a -> SyntaxTha.mkDet the_Art (SyntaxTha.mkOrd a) ;++ mkCurrency : Str -> CN = \s -> mkCN (mkN [] s) ; ---- just a classifier+ + howFar : {howfar : IComp ; far : Adv ; how : IAdv} = { --- to avoid yuu+ howfar = lin IComp (ss ("ไกล" + "เท่า" + "ไร")) ; far = lin Adv (ss ("ไกล" + "เท่า" + "ไร")) ; how = lin IAdv (ss [])+ } ;++ at_Prep = mkPrep "ที่" ;+ noPrep = mkPrep [] ;++--------------------------------------------------+-- New 30/11/2011 AR+--------------------------------------------------++ lin+ Thai = mkNat "ไทย" ;+ Baht = mkCurrency "บาท" ;++ Rice = mkCN (mkN ("ข้าว")) ;+ Pork = mkCN (mkN ("หมู")) ;+ Beef = mkCN (mkN ("เนื้อ")) ;+ Egg = mkCN L.egg_N ;+ Noodles = mkCN (mkN (R.thword "ก๋วย" "เตี๋ยว")) ;+ Shrimps = mkCN (mkN ("กุ้ง")) ;+ Chili = mkCN (mkN "พริก") ;+ Garlic = mkCN (mkN (R.thword "กะ" "เทียม")) ;+ Durian = mkCN (mkN (R.thword "ทุ" "เรียน")) ;+ Mango = mkCN (mkN (R.thword "มะ" "ม่วง")) ;+ Pineapple = mkCN (mkN (R.thword "สับ" "ปะ" "รด")) ;+ Coke = mkCN (mkN ("โค้ก")) ;+ IceCream = mkCN (mkN (R.thword "ไอ" "ศ" "กรีม")) ;+ Salad = mkCN (mkN "สลัด") ;+ OrangeJuice = mkCN (mkN (R.thword "น้ำ" "ส้ม" "คั้น")) ;+ Lemonade = mkCN (mkN (R.thword "น้ำ" "มะ" "นาว")) ;+ Beach = mkPlace (placeN (R.thword "หาด")) ;++ ItsRaining = mkCl (mkVP L.rain_V0) ;+ ItsCold = mkCl (mkVP L.cold_A) ;+ ItsWarm = mkCl (mkVP L.warm_A) ;+ ItsWindy = mkCl (mkVP (P.mkA (R.thword "ลม" "จัด"))) ;+ SunShine = mkCl (mkNP the_Det L.sun_N) (mkVP (R.regV (R.thword "ฉาย" "แสง"))) ;++ Smoke = mkVP (P.mkV (R.thword "สูบ" "บุ" "รี")) ;++ ADoctor = mkProfession (P.personN "หมอ") ;+ AProfessor = mkProfession (P.personN (R.thword "อา" "จารย์")) ;+ ALawyer = mkProfession (P.personN (R.thword "มัก" "กฎ" "หมาย")) ;+ AEngineer = mkProfession (P.personN (R.thword "วิ" "ศวกร")) ;+ ATeacher = mkProfession (P.personN "ครู") ;+ ACook = mkProfession (P.personN (R.thword "ภัก" "ษกาน")) ;+ AStudent = mkProfession (P.personN (R.thword "นัก" "ศึก" "ษา")) ;+ ABusinessman = mkProfession (P.personN (R.thword "ฝู้" "ประ" "กอบ" "การ")) ;++ oper+ mkProfession : N -> NPPerson -> Cl = \n,p -> mkCl p.name n ;+}+
@@ -46,6 +46,7 @@ History </P> <UL>+<LI>1 September. Version 1.1: bug fixes, some new constructions. <LI>2 June. Version 1.0 released! <LI>29 May. Link to Google translate with the current language pair and phrase. <LI>27 May. Polish added.@@ -116,7 +117,7 @@ <P> The phrasebook is available as open-source software, licensed under GNU LGPL. The source code resides in -<A HREF="http://code.haskell.org/gf/examples/phrasebook/"><CODE>code.haskell.org/gf/examples/phrasebook/</CODE></A>+<A HREF="http://www.grammaticalframework.org/examples/phrasebook/"><CODE>www.grammaticalframework.org/examples/phrasebook/</CODE></A> </P> <A NAME="toc2"></A> <H1>Points illustrated</H1>@@ -179,7 +180,7 @@ </P> <UL> <LI>the translator was implemented on top of an earlier linguistic knowledge base,- the <A HREF="http://grammaticalframework.com/lib">GF Resource Grammar Library</A>+ the <A HREF="http://www.grammaticalframework.org/lib">GF Resource Grammar Library</A> </UL> <P>@@ -259,9 +260,9 @@ Some explanations can be found in the <A HREF="Ontology.html">ontology document</A>, which is produced from the abstract syntax files-<A HREF="http://code.haskell.org/gf/examples/phrasebook/Sentences.gf"><CODE>Sentences.gf</CODE></A>+<A HREF="http://www.grammaticalframework.org/examples/phrasebook/Sentences.gf"><CODE>Sentences.gf</CODE></A> and-<A HREF="http://code.haskell.org/gf/examples/phrasebook/Words.gf"><CODE>Words.gf</CODE></A>+<A HREF="http://www.grammaticalframework.org/examples/phrasebook/Words.gf"><CODE>Words.gf</CODE></A> by <CODE>make doc</CODE>. </P> <A NAME="toc8"></A>@@ -271,13 +272,13 @@ the <A HREF="http://code.google.com/p/grammatical-framework/wiki/LaunchWebDemos">PGF server</A> written in Haskell and the -<A HREF="http://www.cse.chalmers.se/~hallgren/minibar/about.html">minibar library</A>+<A HREF="http://www.grammaticalframework.org/demos/minibar/about.html">minibar library</A> written in JavaScript. Since the sources of these systems are available, anyone can build the phrasebook locally on her own computer. </P> <A NAME="toc9"></A> <H1>Effort and cost</H1>-<TABLE CELLPADDING="4" BORDER="1">+<TABLE BORDER="1" CELLPADDING="4"> <TR> <TH>Language</TH> <TH>Grammarian's language skills</TH>@@ -588,7 +589,7 @@ <P> The missing concrete syntax entries are added to the <CODE>Words</CODE><I>L</I><CODE>.gf</CODE> files for each language <I>L</I>. The-<A HREF="http://code.haskell.org/gf/lib/doc/synopsis.html#toc78">morphological paradigms</A>+<A HREF="http://www.grammaticalframework.org/lib/doc/synopsis.html#toc78">morphological paradigms</A> of the GF resource library should be used. Actions (prefixed with <CODE>A</CODE>, as <CODE>AWant</CODE>) are a little more demanding, since they also require syntax constructors. Greetings (prefixed with <CODE>G</CODE>) are pure strings.@@ -597,9 +598,9 @@ Some explanations can be found in the <A HREF="Implementation.html">implementation document</A>, which is produced from the concrete syntax files-<A HREF="http://code.haskell.org/gf/examples/phrasebook/SentencesI.gf"><CODE>SentencesI.gf</CODE></A>+<A HREF="http://www.grammaticalframework.org/examples/phrasebook/SentencesI.gf"><CODE>SentencesI.gf</CODE></A> and-<A HREF="http://code.haskell.org/gf/examples/phrasebook/WordsEng.gf"><CODE>WordsEng.gf</CODE></A>+<A HREF="http://www.grammaticalframework.org/examples/phrasebook/WordsEng.gf"><CODE>WordsEng.gf</CODE></A> by <CODE>make doc</CODE>. </P> <P>@@ -611,7 +612,7 @@ using <CODE>darcs pull</CODE>. <LI>Also make sure that you have compiled the library by <CODE>make present</CODE> in <CODE>gf/lib/src/</CODE>. <LI>Work in the directory - <A HREF="http://code.haskell.org/gf/examples/phrasebook/"><CODE>gf/examples/phrasebook/</CODE></A>.+ <A HREF="http://www.grammaticalframework.org/examples/phrasebook/"><CODE>gf/examples/phrasebook/</CODE></A>. <LI>After you've finished your contribution, recompile the phrasebook by <CODE>make pgf</CODE>. <LI>Save your changes in <CODE>darcs record .</CODE> (in the <CODE>phrasebook</CODE> subdirectory). <LI>Make a patch file with <CODE>darcs send -o my_phrasebook_patch</CODE>, which you can @@ -682,6 +683,6 @@ Nick Smallbone. </P> -<!-- html code generated by txt2tags 2.4 (http://txt2tags.sf.net) -->+<!-- html code generated by txt2tags 2.5 (http://txt2tags.sf.net) --> <!-- cmdline: txt2tags -thtml -\-toc doc-phrasebook.txt --> </BODY></HTML>
@@ -76,7 +76,7 @@ The phrasebook is available as open-source software, licensed under GNU LGPL. The source code resides in -[``code.haskell.org/gf/examples/phrasebook/`` http://code.haskell.org/gf/examples/phrasebook/]+[``www.grammaticalframework.org/examples/phrasebook/`` http://www.grammaticalframework.org/examples/phrasebook/] @@ -119,7 +119,7 @@ The use of resource grammars and functors - the translator was implemented on top of an earlier linguistic knowledge base,- the [GF Resource Grammar Library http://grammaticalframework.com/lib]+ the [GF Resource Grammar Library http://www.grammaticalframework.org/lib] Example-based grammar writing and grammar induction from statistical models @@ -180,9 +180,9 @@ Some explanations can be found in the [ontology document Ontology.html], which is produced from the abstract syntax files-[``Sentences.gf`` http://code.haskell.org/gf/examples/phrasebook/Sentences.gf]+[``Sentences.gf`` http://www.grammaticalframework.org/examples/phrasebook/Sentences.gf] and-[``Words.gf`` http://code.haskell.org/gf/examples/phrasebook/Words.gf]+[``Words.gf`` http://www.grammaticalframework.org/examples/phrasebook/Words.gf] by ``make doc``. @@ -193,7 +193,7 @@ the [PGF server http://code.google.com/p/grammatical-framework/wiki/LaunchWebDemos] written in Haskell and the -[minibar library http://www.cse.chalmers.se/~hallgren/minibar/about.html]+[minibar library http://www.grammaticalframework.org/demos/minibar/about.html] written in JavaScript. Since the sources of these systems are available, anyone can build the phrasebook locally on her own computer. @@ -329,7 +329,7 @@ The missing concrete syntax entries are added to the ``Words``//L//``.gf`` files for each language //L//. The-[morphological paradigms http://code.haskell.org/gf/lib/doc/synopsis.html#toc78]+[morphological paradigms http://www.grammaticalframework.org/lib/doc/synopsis.html#toc78] of the GF resource library should be used. Actions (prefixed with ``A``, as ``AWant``) are a little more demanding, since they also require syntax constructors. Greetings (prefixed with ``G``) are pure strings.@@ -337,9 +337,9 @@ Some explanations can be found in the [implementation document Implementation.html], which is produced from the concrete syntax files-[``SentencesI.gf`` http://code.haskell.org/gf/examples/phrasebook/SentencesI.gf]+[``SentencesI.gf`` http://www.grammaticalframework.org/examples/phrasebook/SentencesI.gf] and-[``WordsEng.gf`` http://code.haskell.org/gf/examples/phrasebook/WordsEng.gf]+[``WordsEng.gf`` http://www.grammaticalframework.org/examples/phrasebook/WordsEng.gf] by ``make doc``. Here are the steps to follow for contributors:@@ -348,7 +348,7 @@ using ``darcs pull``. + Also make sure that you have compiled the library by ``make present`` in ``gf/lib/src/``. + Work in the directory - [``gf/examples/phrasebook/`` http://code.haskell.org/gf/examples/phrasebook/].+ [``gf/examples/phrasebook/`` http://www.grammaticalframework.org/examples/phrasebook/]. + After you've finished your contribution, recompile the phrasebook by ``make pgf``. + Save your changes in ``darcs record .`` (in the ``phrasebook`` subdirectory). + Make a patch file with ``darcs send -o my_phrasebook_patch``, which you can
@@ -1,16 +1,18 @@ DisambPhrasebookEng :-PhrasebookBul :-PhrasebookCat :-PhrasebookDan :-PhrasebookDut :+PhrasebookBul : Noodles+PhrasebookCat : ABusinessman ACook ADoctor AEngineer ALawyer AProfessor AStudent ATeacher Baht Beach Beef Chili Coke Durian Egg Garlic IceCream ItsCold ItsRaining ItsWarm ItsWindy Lemonade MMust Mango Noodles ObjPlur OrangeJuice Pineapple Pork Rice Salad Shrimps Smoke SunShine Thai ThesPlur ThesePlur ThosePlur+PhrasebookDan : ABusinessman ACook ADoctor AEngineer ALawyer AProfessor AStudent ATeacher Baht Beach Beef Chili Coke Durian Egg Garlic IceCream ItsCold ItsRaining ItsWarm ItsWindy Lemonade Mango Noodles ObjPlur OrangeJuice Pineapple Pork Rice Salad Shrimps Smoke SunShine Thai ThesPlur ThesePlur ThosePlur+PhrasebookDut : ABusinessman ACook ADoctor AEngineer ALawyer AProfessor AStudent ATeacher Baht Beach Beef Chili Coke Durian Egg Garlic IceCream ItsCold ItsRaining ItsWarm ItsWindy Lemonade Mango Noodles ObjPlur OrangeJuice Pineapple Pork Rice Salad Shrimps Smoke SunShine Thai ThesPlur ThesePlur ThosePlur PhrasebookEng : PhrasebookFin :-PhrasebookFre :-PhrasebookGer :-PhrasebookIta :-PhrasebookNor :-PhrasebookPol :-PhrasebookRon :-PhrasebookSpa :+PhrasebookFre : ABusinessman ACook ADoctor AEngineer ALawyer AProfessor AStudent ATeacher Baht Beach Beef Chili Coke Durian Egg Garlic IceCream ItsCold ItsRaining ItsWarm ItsWindy Lemonade Mango Noodles ObjPlur OrangeJuice Pineapple Pork Rice Salad Shrimps Smoke SunShine Thai ThesPlur ThesePlur ThosePlur+PhrasebookGer : ABusinessman ACook ADoctor AEngineer ALawyer AModVerbPhrase AModVerbPhrasePlace AProfessor AStudent ATeacher Baht Beach Beef Chili Coke Durian Egg Garlic IceCream ItsCold ItsRaining ItsWarm ItsWindy Lemonade Mango Noodles ObjPlur OrangeJuice Pineapple Pork Rice Salad Shrimps Smoke SunShine Thai ThesPlur ThesePlur ThosePlur+PhrasebookIta : ABusinessman ACook ADoctor AEngineer ALawyer AProfessor AStudent ATeacher Baht Beach Beef Chili Coke Durian Egg Garlic IceCream ItsCold ItsRaining ItsWarm ItsWindy Lemonade MCan MMust Mango Noodles ObjPlur OrangeJuice Pineapple Pork Rice Salad Shrimps Smoke SunShine Thai ThesPlur ThesePlur ThosePlur+PhrasebookNor : ABusinessman ACook ADoctor AEngineer ALawyer AProfessor AStudent ATeacher Baht Beach Beef Chili Coke Durian Egg Garlic IceCream ItsCold ItsRaining ItsWarm ItsWindy Lemonade Mango Noodles ObjPlur OrangeJuice Pineapple Pork Rice Salad Shrimps Smoke SunShine Thai ThesPlur ThesePlur ThosePlur+PhrasebookPol : ABusinessman ACook ADoctor AEngineer ALawyer AProfessor AStudent ATeacher Baht Beach Beef Chili Coke Durian Egg Garlic IceCream ItsCold ItsRaining ItsWarm ItsWindy Lemonade Mango Noodles ObjPlur OrangeJuice Pineapple Pork Rice Salad Shrimps Smoke SunShine Thai ThesPlur ThesePlur ThosePlur+PhrasebookRon : ABusinessman ACook ADoctor AEngineer ALawyer AProfessor AStudent ATeacher Baht Beach Beef Chili Coke Durian Egg Garlic IceCream ItsCold ItsRaining ItsWarm ItsWindy Lemonade Mango Noodles ObjPlur OrangeJuice Pineapple Pork Rice Salad Shrimps Smoke SunShine Thai ThesPlur ThesePlur ThosePlur+PhrasebookRus : ABusinessman ACook ADoctor AEngineer ALawyer AProfessor AStudent ATeacher Baht Beach Beef Belgian Belgium Chili Coke Durian Egg Flemish Garlic IceCream ItsCold ItsRaining ItsWarm ItsWindy Lemonade Mango Noodles ObjPlur OrangeJuice Pineapple Pork Rice Salad Shrimps Smoke SunShine Thai ThesPlur ThesePlur ThosePlur+PhrasebookSpa : ABusinessman ACook ADoctor AEngineer ALawyer AProfessor AStudent ATeacher Baht Beach Beef Chili Coke Durian Egg Garlic IceCream ItsCold ItsRaining ItsWarm ItsWindy Lemonade Mango Noodles ObjPlur OrangeJuice Pineapple Pork Rice Salad Shrimps Smoke SunShine Thai ThesPlur ThesePlur ThosePlur PhrasebookSwe :-PhrasebookUrd :+PhrasebookTha :+PhrasebookUrd : ABusinessman ACook ADoctor AEngineer ALawyer AProfessor AStudent ATeacher Baht Beach Beef Chili Coke Durian Egg Garlic IceCream ItsCold ItsRaining ItsWarm ItsWindy Lemonade MMust Mango Noodles ObjPlur OrangeJuice Pineapple Pork Rice Salad Shrimps Smoke SunShine Thai ThesPlur ThesePlur ThosePlur
binary file changed (absent → 2221 bytes)
@@ -121,11 +121,13 @@ <A HREF="./gf-book-slides.pdf">Slides</A> for teaching the book chapter by chapter. </P> <P>-<A HREF="./examples">Code examples</A>+<A HREF="./examples">Code examples</A>. You can also download the+complete example set as a compressed tar file, +<a href="gf-book-examples.tgz">gf-book-examples.tgz</a> </P> <P> <A HREF="http://www.grammaticalframework.org/demos/gfse/">GF Web IDE</A>: -build grammars in the cloud, without installing GF.+build grammars in the cloud, without installing GF. . </P> <P> Demos
@@ -1,5 +1,5 @@ name: gf-version: 3.3+version: 3.3.3 cabal-version: >= 1.8 build-type: Custom@@ -10,7 +10,7 @@ description: GF, Grammatical Framework, is a programming language for multilingual grammar applications homepage: http://www.grammaticalframework.org/ bug-reports: http://code.google.com/p/grammatical-framework/issues/list-tested-with: GHC==6.12.3, GHC==7.0.3+tested-with: GHC==6.12.3, GHC==7.0.4 data-dir: src data-files: www/index.html@@ -23,6 +23,10 @@ www/minibar/*.css www/minibar/*.js www/minibar/*.png+ www/TransQuiz/*.html+ www/TransQuiz/*.css+ www/TransQuiz/*.js+ www/TransQuiz/*.png source-repository head type: darcs@@ -37,10 +41,6 @@ Description: Include --server mode Default: True -flag cclazy- Description: Use the new, lazy compute_concrete (faster than the old, strict version)- Default: True- library build-depends: base >= 4.2 && <5, array,@@ -136,7 +136,6 @@ GF.JavaScript.AbsJS GF.JavaScript.PrintJS GF.Infra.Ident- GF.Infra.Modules GF.Infra.GetOpt GF.Infra.Option GF.Infra.UseIO@@ -205,6 +204,3 @@ other-modules: GF.System.UseSignal else other-modules: GF.System.NoSignal-- if flag(cclazy)- cpp-options: -DCC_LAZY
@@ -1,22 +1,33 @@-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">+<!DOCTYPE html> <HTML> <HEAD> <TITLE>GF - Grammatical Framework</TITLE> <link rel=stylesheet href="css/style.css">+<script type="text/javascript">+function sitesearch() {+ var q=document.forms[0].q.value;+ var site=" site:www.grammaticalframework.org";+ var search=encodeURIComponent(q+site)+ document.location.href="http://www.google.com/search?q="+search+ return false;+}+</script> </HEAD> <BODY>-+<script type="text/javascript">+document.write('<div style="text-align: right"> <form onsubmit="return sitesearch()" method=get action="http://www.google.com/search"> <input type=search name="q" placeholder="site search"> <input type=submit value="Search"> </form></div>')+</script> <div class=center> <IMG SRC="doc/Logos/gf0.png" alt=""> <H1>Grammatical Framework</H1> <P>-Version 3.3+Version 3.3.3 <br>-October 2011+March 2012 <P>-<font size=+2>+<div class=mainlinks style="font-size: 140%"> [ <A HREF="demos/index.html">Demos</A> | <A HREF="http://www.grammaticalframework.org/download/index.html">Download</A> | <A HREF="lib/doc/synopsis.html">Libraries</A>@@ -26,25 +37,34 @@ | <A HREF="http://groups.google.com/group/gf-dev">UserGroup</A> | <A HREF="gf-book">Book</A><font size=-1 color=red><i>New!</i></font> ] -</font>-<P>+</div>+<div class=extralinks>+<p> [ <A HREF="http://code.google.com/p/grammatical-framework/wiki/SideBar?tm=6">Wiki</A> | <A HREF="doc/gf-people.html">People</A> | <A HREF="doc/gf-bibliography.html">Publications</A> | <A HREF="doc/gf-reference.html">QuickRefCard</A> | <A HREF="doc/gf-shell-reference.html">GF Shell Reference</A>-| <a href="doc/gf-editor-modes.html">GF Editor Modes / IDE</a>+| <a href="doc/gf-editor-modes.html">GF Editor Modes</a>+| <a href="eclipse/index.html">GF Eclipse Plugin</a> | <A HREF="doc/gf-lrec-2010.pdf">LibTutorial</A> | <A HREF="http://www.molto-project.eu">MOLTO</A> | <A HREF="http://school.grammaticalframework.org">SummerSchool</A> | <A HREF="/android/">Android</A>-] +] </div>+</div> <H2>News</H2> <div class=news2> <dl>+<dt>2012-03-03: <strong>GF 3.3.3 released!</strong>+ <a href="download/release-3.3.3.html">Release notes</a>.+<dt>2012-02-24: New resource grammar languages: Hindi, Sindhi.+ See <a href="lib/doc/synopsis.html">library synopsis</a>.+<dt>2011-12-29: New resource grammar languages: Latvian, Thai.+ See <a href="lib/doc/synopsis.html">library synopsis</a>. <dt>2011-10-27: <strong>GF 3.3 released!</strong> <a href="download/release-3.3.html">Release notes</a>. <dt>2011-09-20: There is now a page collecting@@ -203,6 +223,7 @@ <LI><A HREF="http://www.interlingua.com/">Interlingua</A> <LI>Italian <LI>Latin (fragments)+<LI>Latvian <LI>Nepali <LI>Norwegian bokmål <LI>Persian@@ -212,7 +233,7 @@ <LI>Russian <LI>Spanish <LI>Swedish-<LI>Thai (fragments)+<LI>Thai <LI>Turkish (fragments) <LI>Urdu </OL>
@@ -0,0 +1,1698 @@++mkText (mkPhr (mkQS (mkCl she_NP sleep_V))) questMarkPunct (mkText (mkPhr yes_Utt) fullStopPunct)+does she sleep ? yes .+หล่อนนอนหลับใช่ไหม ใช่++mkText yes_Utt+yes .+ใช่++mkText (mkS pastTense (mkCl she_NP sleep_V))+she slept .+หล่อนนอนหลับ++mkText (mkCl she_NP sleep_V)+she sleeps .+หล่อนนอนหลับ++mkText (mkQS pastTense (mkQCl (mkCl she_NP sleep_V)))+did she sleep ?+หล่อนนอนหลับไหม++mkText negativePol (mkImp sleep_V)+don't sleep !+อย่านอนหลับ++mkText (mkText (mkPhr (mkUtt where_IAdv)) questMarkPunct (mkText (mkPhr (mkUtt here_Adv)))) (mkText (mkPhr (mkUtt when_IAdv)) questMarkPunct (mkText (mkPhr (mkUtt now_Adv)) exclMarkPunct))+where ? here . when ? now !+ที่ไหนที่นี่เมื่อไรเดี๋ยวนี้ -- spaces++mkPhr but_PConj (mkUtt (mkImp sleep_V)) (mkVoc (mkNP i_Pron friend_N))+but sleep , my friend+แต่นอนหลับซิเพี่อนของฉัน++mkPhr (mkS futureTense negativePol (mkCl she_NP sleep_V))+she won't sleep+หล่อนไม่นอนหลับ -- place of negation (but possible)++mkPhr (mkCl she_NP sleep_V)+she sleeps+หล่อนนอนหลับ++mkPhr (mkQS conditionalTense (mkQCl (mkCl she_NP sleep_V))) +would she sleep+หล่อนนอนหลับไหม++mkPhr (mkImp sleep_V)+sleep+นอนหลับซิ++mkPhr (mkPConj and_Conj) (mkUtt now_Adv)+and now+และเดี๋ยวนี้ -- tone mark++mkPhr yes_Utt (mkVoc (mkNP i_Pron friend_N))+yes , my friend+ใช่เพี่อนของฉัน++mkUtt (mkS pastTense (mkCl she_NP sleep_V))+she slept+หล่อนนอนหลับ++mkUtt (mkCl she_NP sleep_V)+she sleeps+หล่อนนอนหลับ++mkUtt (mkQS pastTense negativePol (mkQCl who_IP sleep_V)) +who didn't sleep+ใครไม่นอนหลับ -- neg place not preferred++mkUtt (mkQCl who_IP sleep_V) +who sleeps+ใครนอนหลับ++mkUtt pluralImpForm negativePol (mkImp (mkVP man_N))+don't be men+อย่าเป็นชาย++mkUtt who_IP+who+ใคร -- ay++mkUtt why_IAdv+why+ทำไม -- th++mkUtt (mkNP this_Det man_N)+this man+ชายคนนี้++mkUtt here_Adv +here+ที่นี่++mkUtt (mkVP sleep_V)+to sleep+นอนหลับ++mkUtt (mkCN beer_N) +beer+เบียร์++mkUtt (mkAP good_A) +good+ดี++mkUtt (mkCard (mkNumeral n5_Unit)) +five+ห้า++mkPhr (lets_Utt (mkVP sleep_V))+let's sleep+นอนหลับ++mkS positivePol (mkCl she_NP sleep_V)+she sleeps+หล่อนนอนหลับ++mkS negativePol (mkCl she_NP sleep_V)+she doesn't sleep+หล่อนไม่นอนหลับ -- neg place++mkS simultaneousAnt (mkCl she_NP sleep_V)+she sleeps+หล่อนนอนหลับ++mkS anteriorAnt (mkCl she_NP sleep_V)+she has slept+หล่อนนอนหลับ++mkS presentTense (mkCl she_NP sleep_V)+she sleeps+หล่อนนอนหลับ++mkS pastTense (mkCl she_NP sleep_V)+she slept+หล่อนนอนหลับ++mkS futureTense (mkCl she_NP sleep_V)+she will sleep+หล่อนจะนอน -- ca !!++mkS conditionalTense (mkCl she_NP sleep_V)+she would sleep+หล่อนนอนหลับ++mkUtt singularImpForm (mkImp (mkVP man_N))+be a man+เป็นชายซิ++mkUtt pluralImpForm (mkImp (mkVP man_N)) +be men+เป็นชายซิ++mkUtt politeImpForm (mkImp (mkVP man_N))+be a man+เป็นชายซิ++mkS conditionalTense anteriorAnt negativePol (mkCl she_NP sleep_V)+she wouldn't have slept+หล่อนไม่ได้นอนหลับ -- daay !!++mkS and_Conj (mkS (mkCl she_NP sleep_V)) (mkS (mkCl i_NP run_V))+she sleeps and I run+หล่อนนอนหลับและฉันวิ่ง++mkS and_Conj (mkListS (mkS (mkCl she_NP sleep_V)) (mkListS (mkS (mkCl i_NP run_V)) (mkS (mkCl (mkNP youSg_Pron) walk_V))))+she sleeps , I run and you walk+หล่อนนอนหลับ ฉันวิ่งและคุณเดิน -- comma++mkS today_Adv (mkS (mkCl she_NP sleep_V))+today she sleeps+วันนี้หล่อนนอนหลับ++mkCl she_NP sleep_V+she sleeps+หล่อนนอนหลับ++mkCl she_NP love_V2 he_NP+she loves him+หล่อนรักเขา++mkCl she_NP send_V3 it_NP he_NP+she sends it to him+หล่อนส่งมันให้กับเขา++mkCl she_NP want_VV (mkVP sleep_V)+she wants to sleep+หล่อนอยากนอนหลับ++mkCl she_NP say_VS (mkS (mkCl i_NP sleep_V))+she says that I sleep+หล่อนพูดว่าฉันนอนหลับ -- wa is complaining++mkCl she_NP wonder_VQ (mkQS (mkQCl who_IP sleep_V))+she wonders who sleeps+หล่อนประหลาดใจว่าใครนอนหลับ++mkCl she_NP become_VA old_A+she becomes old+หล่อนกลายเป็นคนแก่ -- classifier !!++mkCl she_NP become_VA (mkAP very_AdA old_A)+she becomes very old+หล่อนกลายเป็นคนแก่มาก -- classifier !!++mkCl she_NP paint_V2A it_NP red_A+she paints it red+หล่อนทามันสีแดง++mkCl she_NP paint_V2A it_NP (mkAP red_A)+she paints it red+หล่อนทามันสีแดง++mkCl she_NP answer_V2S he_NP (mkS (mkCl we_NP sleep_V))+she answers to him that we sleep+หล่อนตอบเขาว่าเรานอนหลับ++mkCl she_NP ask_V2Q he_NP (mkQS (mkQCl who_IP sleep_V))+she asks him who sleeps+หล่อนถามเขาว่าใครนอนหลับ++mkCl she_NP beg_V2V he_NP (mkVP sleep_V)+she begs him to sleep+หล่อนขอเขานอนหลับ++mkCl she_NP old_A+she is old+หล่อนแก่++mkCl she_NP old_A he_NP+she is older than he+หล่อนแก่กว่าเขา++mkCl she_NP married_A2 he_NP+she is married to him+หล่อนแต่งงานแล้วกับเขา++mkCl she_NP (mkAP very_AdA old_A)+she is very old+หล่อนแก่มาก++mkCl she_NP (mkNP the_Det woman_N)+she is the woman+หล่อนเป็นหญิง++mkCl she_NP woman_N+she is a woman+หล่อนเป็นหญิง++mkCl she_NP (mkCN old_A woman_N)+she is an old woman+หล่อนเป็นหญิงแก่++mkCl she_NP here_Adv+she is here+หล่อนอยู่ที่นี่++mkCl she_NP (mkVP always_AdV (mkVP sleep_V))+she always sleeps+หล่อนนอนหลับเสมอ -- not forever++mkCl house_N+there is a house+มีบ้าน++mkCl (mkNP many_Det house_N) +there are many houses+มีบ้านหลายหลัง++mkCl she_NP (mkRS (mkRCl which_RP (mkVP sleep_V)))+it is she who sleeps+หล่อนเป็นคนที่นอนหลับ -- not classifier !!++mkCl here_Adv (mkS (mkCl she_NP sleep_V)) +it is here that she sleeps+หล่อนนอนหลับที่นี่ -- perhaps thini khue, otherwise thini in the end !!++mkCl rain_V0 +it rains+มีฝน++mkCl (progressiveVP (mkVP rain_V0))+it is raining+กำลังมีฝน++mkCl (mkSC (mkS (mkCl she_NP sleep_V))) (mkVP good_A)+that she sleeps is good+ว่าหล่อนนอนหลับดี++mkS (genericCl (mkVP sleep_V)) +one sleeps+นอนหลับ++mkUtt (mkVP sleep_V) +to sleep+นอนหลับ++mkUtt (mkVP love_V2 he_NP) +to love him+รักเขา++mkUtt (mkVP send_V3 it_NP he_NP) +to send it to him+ส่งมันให้กับเขา -- also without kab++mkUtt (mkVP want_VV (mkVP sleep_V)) +to want to sleep+อยากนอนหลับ++mkUtt (mkVP know_VS (mkS (mkCl she_NP sleep_V))) +to know that she sleeps+รู้ว่าหล่อนนอนหลับ++mkUtt (mkVP wonder_VQ (mkQS (mkQCl who_IP sleep_V))) +to wonder who sleeps+ประหลาดใจว่าใครนอนหลับ -- ay++mkUtt (mkVP become_VA (mkAP red_A))+to become red+กลายเป็นสีแดง++mkUtt (mkVP paint_V2A it_NP (mkAP red_A))+to paint it red+ทามันเป็นสีแดง -- red was missing++mkUtt (mkVP answer_V2S he_NP (mkS (mkCl she_NP sleep_V))) +to answer to him that she sleeps+ตอบเขาว่าหล่อนนอนหลับ -- missing compl++mkUtt (mkVP ask_V2Q he_NP (mkQS (mkQCl who_IP sleep_V))) +to ask him who sleeps+ถามเขาว่าใครนอนหลับ -- missing compl++mkUtt (mkVP beg_V2V he_NP (mkVP sleep_V))+to beg him to sleep+ขอเขาให้นอนหลับ -- compl++mkUtt (mkVP old_A) +to be old+แก่++mkUtt (mkVP old_A he_NP) +to be older than he+แก่กว่าเขา++mkUtt (mkVP married_A2 he_NP) +to be married to him+แต่งงานแล้วกับเขา++mkUtt (mkVP (mkAP very_AdA old_A)) +to be very old+แก่มาก++mkUtt (mkVP woman_N) +to be a woman+เป็นหญิง -- pu ying !!++mkUtt (mkVP (mkCN old_A woman_N)) +to be an old woman+เป็นหญิงแก่ -- pu !!++mkUtt (mkVP (mkNP the_Det woman_N)) +to be the woman+เป็นหญิง++mkUtt (mkVP here_Adv) +to be here+อยู่ที่นี่++mkUtt (mkVP (mkVP sleep_V) here_Adv)+to sleep here+นอนหลับที่นี่++mkUtt (mkVP always_AdV (mkVP sleep_V))+always to sleep+นอนหลับเสมอ -- not forever++mkUtt (mkVP (mkVPSlash paint_V2A (mkAP black_A)) it_NP)+to paint it black+ทามันเป็นสีดำ -- compl++mkUtt (mkVP (mkVPSlash paint_V2A (mkAP black_A)))+to paint itself black+ทาตัวเองเป็นสีดำ -- compl++mkUtt (mkVP (mkComp (mkAP warm_A)))+to be warm+อุ่น++mkUtt (reflexiveVP love_V2) +to love itself+รักตัวเอง++mkUtt (reflexiveVP (mkVPSlash paint_V2A (mkAP black_A)))+to paint itself black+ทาตัวเองเป็นสีดำ -- compl++mkUtt (passiveVP love_V2)+to be loved+ถูกรัก++mkUtt (passiveVP love_V2 she_NP)+to be loved by her+ถูกหล่อนรัก -- agent before verb !!++mkUtt (progressiveVP (mkVP sleep_V))+to be sleeping+กำลังนอนหลับ++mkComp (mkAP old_A)+old+แก่++mkComp (mkNP this_Det man_N)+this man+ชายคนนี้++mkComp here_Adv +here+อยู่ที่นี่++mkSC (mkS (mkCl she_NP sleep_V))+that she sleeps+ว่าหล่อนนอนหลับ++mkSC (mkQS (mkQCl who_IP sleep_V))+who sleeps+ว่าใครนอนหลับ -- ay++mkSC (mkVP sleep_V)+to sleep+นอนหลับ++mkImp (mkVP (mkVP come_V) (mkAdv to_Prep (mkNP i_Pron house_N)))+come to my house+มาถืงบ้านของฉันซิ++mkImp come_V+come+มาซิ++mkImp buy_V2 it_NP+buy it+ซื้อมันซิ++mkUtt (mkNP this_Quant man_N)+this man+ชายคนนี้++mkUtt (mkNP this_Quant (mkCN old_A man_N))+this old man+ชายแก่คนนี้++mkUtt (mkNP this_Quant (mkNum (mkNumeral n5_Unit)) (mkCN old_A man_N))+these five old men+ชายแก่ห้าคนนี้++mkUtt (mkNP this_Quant (mkNum (mkNumeral n5_Unit)) man_N)+these five men+ชายห้าคนนี้++mkUtt (mkNP (mkDet the_Quant (mkNum (mkNumeral n5_Unit))) (mkCN old_A man_N))+the five old men+ชายแก่ห้าคน++mkUtt (mkNP (mkDet the_Quant (mkNum (mkNumeral n5_Unit))) man_N)+the five men+ชายห้าคน++mkUtt (mkNP (mkNumeral (tenfoldSub100 n5_Unit)) (mkCN old_A man_N))+fifty old men+ชายแก่ห้าสิบคน++mkUtt (mkNP (mkNumeral (tenfoldSub100 n5_Unit)) man_N)+fifty men+ชายห้าสิบคน++mkUtt (mkNP (mkDigits n5_Dig (mkDigits n1_Dig)) (mkCN old_A man_N))+5 1 old men+ชายแก่ ๕๑ คน -- space around number !!++mkUtt (mkNP (mkDigits n5_Dig (mkDigits n1_Dig)) man_N)+5 1 men+ชาย ๕๑ คน -- space++mkUtt (mkNP i_Pron (mkCN old_A man_N))+my old man+ชายแก่ของฉัน++mkUtt (mkNP i_Pron man_N)+my man+ชายของฉัน++mkUtt (mkNP paris_PN)+Paris+ปารีส++mkUtt (mkNP we_Pron)+we+เรา++mkUtt (mkNP this_Quant) +this+นี้++mkUtt (mkNP this_Quant (mkNum (mkNumeral n5_Unit)))+these five+ห้านี้++mkUtt (mkNP (mkDet the_Quant (mkNum (mkNumeral n5_Unit)) (mkOrd good_A)))+the five best+ห้าที่ดีที่สุด -- thi as classifier !!++mkUtt (mkNP (mkCN old_A beer_N))+old beer+เบียร์เก่า -- old for inanimate++mkUtt (mkNP beer_N)+beer+เบียร์++mkUtt (mkNP only_Predet (mkNP this_Det woman_N))+only this woman+หญิงคนนี้เท่านั้น -- only comes last !!++mkUtt (mkNP (mkNP the_Det man_N) see_V2)+the man seen+ชายเห็น++mkUtt (mkNP (mkNP paris_PN) today_Adv)+Paris today+ปารีสวันนี้++mkUtt (mkNP (mkNP john_PN) (mkRS (mkRCl which_RP (mkVP walk_V))))+John , who walks+จอห์นคนที่เดิน -- classifier !!++mkUtt (mkNP or_Conj (mkNP this_Det woman_N) (mkNP john_PN))+this woman or John+หญิงคนนี้หริอจอห์น++mkUtt (mkNP or_Conj (mkListNP (mkNP this_Det woman_N) (mkListNP (mkNP john_PN) i_NP)))+this woman , John or I+หญิงคนนี้ จอห์นหริอฉัน -- space, no comma++mkUtt i_NP+I+ฉัน++mkUtt you_NP+you+คุณ++mkUtt youPol_NP+you+คุณ++mkUtt he_NP+he+เขา++mkUtt she_NP+she+หล่อน++mkUtt it_NP+it+มัน++mkUtt we_NP+we+เรา++mkUtt youPl_NP+you+คุณ++mkUtt they_NP+they+เขาทั้งหลาย -- more than one+++mkUtt this_NP+this+นี้ ++mkUtt that_NP+that+นั้น++mkUtt these_NP+these+เหล่านี้ -- more than one !!++mkUtt those_NP+those+เหล่านั้น -- more than one !!++mkUtt (mkNP the_Det house_N)+the house+บ้าน++mkUtt (mkNP a_Det house_N)+a house+บ้าน++mkUtt (mkNP theSg_Det house_N)+the house+บ้าน++mkUtt (mkNP thePl_Det house_N)+the houses+บ้าน++mkUtt (mkNP aSg_Det woman_N)+a woman+หญิง++mkUtt (mkNP aPl_Det woman_N)+women+หญิง++mkUtt (mkNP this_Det woman_N)+this woman+หญิงคนนี้++mkUtt (mkNP that_Det woman_N)+that woman+หญิงคนนั้น++mkUtt (mkNP these_Det woman_N)+these women+หญิงเหล่านี้ -- more than one !!++mkUtt (mkNP those_Det woman_N)+those women+หญิงเหล่านั้น -- more !!++mkUtt (mkNP (mkQuant i_Pron) house_N)+my house+บ้านของฉัน++mkUtt (mkNP the_Quant house_N)+the house+บ้าน++mkUtt (mkNP a_Quant house_N)+a house+บ้าน++mkNum (mkNumeral (tenfoldSub100 n2_Unit))+twenty+ยี่สิบ++mkNum (mkDigits n2_Dig (mkDigits n1_Dig))+2 1+๒๑++mkNum (mkCard almost_AdN (mkCard (mkNumeral n5_Unit))) +almost five+เกิอบห้า -- before numeral !!++mkNum (mkCard almost_AdN (mkCard (mkNumeral n5_Unit)))+almost five+เกิอบห้า -- before++mkCard (mkNumeral n7_Unit)+seven+เจ็ด++mkOrd small_A+smallest+เล็กที่สุด++mkCard (mkAdN more_CAdv) (mkCard (mkNumeral n8_Unit))+more than eight+มากกว่าแปด -- before numeral !!++mkNumeral (mkSub1000 n9_Unit (mkSub100 n9_Unit n9_Unit))+nine hundred and ninety - nine+เก้าร้อยเก้าสิบเก้า -- tone mark for nine++mkNumeral (mkSub1000 n9_Unit (mkSub100 n9_Unit n9_Unit)) (mkSub1000 n9_Unit (mkSub100 n9_Unit n9_Unit))+nine hundred and ninety - nine thousand nine hundred and ninety - nine+เก้าแสนเก้าหมื่นเก้าพันเก้าร้อยเก้าสิบเก้า -- tone++thousandfoldNumeral (mkSub1000 n9_Unit (mkSub100 n9_Unit n9_Unit))+nine hundred and ninety - nine thousand+เก้าแสนเก้าหมื่นเก้าพัน -- tone++mkNumeral (mkSub1000 (mkSub100 n9_Unit n9_Unit))+ninety - nine+เก้าสิบเก้า -- tone++mkNumeral (mkSub1000 n9_Unit)+nine hundred+เก้าร้อย -- tone++mkNumeral (mkSub1000 n9_Unit (mkSub100 n9_Unit n9_Unit))+nine hundred and ninety - nine+เก้าร้อยเก้าสิบเก้า -- tone++mkSub100 n8_Unit+eight+แปด++mkSub100 n8_Unit n3_Unit+eighty - three+แปดสิบสาม++mkSub100 n8_Unit+eight+แปด++mkNumeral n1_Unit+one+หนึง++mkNumeral n2_Unit+two+สอง++mkNumeral n3_Unit+three+สาม++mkNumeral n4_Unit+four+สี่++mkNumeral n5_Unit+five+ห้า++mkNumeral n6_Unit+six+หก++mkNumeral n7_Unit+seven+เจ็ด++mkNumeral n8_Unit+eight+แปด++mkNumeral n9_Unit+nine+เก้า -- tone++mkDigits n4_Dig+4+๔++mkDigits n1_Dig (mkDigits n2_Dig (mkDigits n3_Dig (mkDigits n3_Dig (mkDigits n4_Dig (mkDigits n8_Dig (mkDigits n6_Dig)))))) +1 , 2 3 3 , 4 8 6+๑ ๒๓๓ ๔๘๖ -- commas if amount of money etc !!++mkCN house_N +house+บ้าน++mkCN mother_N2 (mkNP the_Det king_N)+mother of the king+แม่ของพระราชา -- khong++mkCN distance_N3 (mkNP this_Det city_N) (mkNP paris_PN) +distance from this city to Paris+ระยะทางจากเมืองเมืองนี้ถืงปารีส++mkCN mother_N2+mother+แม่++mkCN distance_N3+distance+ระยะทาง++mkCN big_A house_N +big house+บ้านใหญ่++mkCN big_A (mkCN blue_A house_N)+big blue house+บ้านสีน้ำเงินหลังใหญ่ -- better with classifier !!++mkCN (mkAP very_AdA big_A) house_N +very big house+บ้านใหญ่มาก++mkCN (mkAP very_AdA big_A) (mkCN blue_A house_N) +very big blue house+บ้านสีน้ำเงินหลังใหญ่มาก -- better with classifier++mkCN man_N (mkRS (mkRCl which_RP she_NP love_V2))+man whom she loves+ชายที่หล่อนรัก++mkCN (mkCN old_A man_N) (mkRS (mkRCl which_RP she_NP love_V2)) +old man whom she loves+ชายแก่ที่หล่อนรัก++mkCN house_N (mkAdv on_Prep (mkNP the_Det hill_N))+house on the hill+บ้านบนเนินเขา++mkCN (mkCN big_A house_N) (mkAdv on_Prep (mkNP the_Det hill_N))+big house on the hill+บ้านใหญ่บนเนินเขา++mkNum (mkCard almost_AdN (mkCard (mkNumeral n5_Unit)))+almost five+เกิอบห้า -- order++mkNum (mkCard almost_AdN (mkCard (mkNumeral n5_Unit)))+almost five+เกิอบห้า -- order++mkCN (mkCN reason_N) (mkVP sleep_V)+reason to sleep+เหตุที่นอนหลับ -- add thi !!++mkCN (mkCN reason_N) (mkVP sleep_V)+reason to sleep+เหตุที่นอนหลับ -- same as prev++mkCN king_N (mkNP john_PN) +king John+พระราชาจอห์น++mkCN (mkCN old_A king_N) (mkNP john_PN)+old king John+พระราชาแก่จอห์น++mkAP warm_A+warm+อุ่น++mkAP warm_A (mkNP paris_PN)+warmer than Paris+อุ่นกว่าปารีส++mkAP married_A2 she_NP +married to her+แต่งงานแล้วกับหล่อน++mkAP married_A2+married+แต่งงานแล้ว++mkCl (mkVP (mkAP (mkAP good_A) (mkS (mkCl she_NP sleep_V))))+it is good that she sleeps+ดีว่าหล่อนนอนหลับ++mkCl (mkVP (mkAP (mkAP uncertain_A) (mkQS (mkQCl who_IP sleep_V))))+it is uncertain who sleeps+ลังเลใจว่าใครนอนหลับ++mkCl she_NP (mkAP (mkAP ready_A) (mkVP sleep_V))+she is ready to sleep+หล่อนพร้อมนอนหลับ++mkCl she_NP (mkAP (mkAP ready_A) (mkSC (mkVP sleep_V)))+she is ready to sleep+หล่อนพร้อมนอนหลับ++mkAP very_AdA old_A+very old+แก่มาก++mkAP very_AdA (mkAP very_AdA old_A)+very very old+แก่มากมาก++mkAP or_Conj (mkAP old_A) (mkAP young_A)+old or young+แก่หริอรุ่น++mkAP and_Conj (mkListAP (mkAP old_A) (mkListAP (mkAP big_A) (mkAP warm_A)))+old , big and warm+แก่ ใหญ่และอุ่น -- comma++mkAP (mkOrd old_A)+oldest+แก่ที่สุด++mkAP as_CAdv (mkAP old_A) she_NP+as old as she+แก่เท่าหล่อน++mkUtt (reflAP married_A2)+married to itself+แต่งงานแล้วกับตัวเอง++mkUtt (comparAP warm_A)+warmer+อุ่นกว่า++mkAdv warm_A+warmly+อุ่น++mkAdv in_Prep (mkNP the_Det house_N)+in the house+ในบ้าน++mkAdv when_Subj (mkS (mkCl she_NP sleep_V))+when she sleeps+เมื่อหล่อนนอนหลับ -- when !!??++mkAdv more_CAdv warm_A he_NP +more warmly than he+อบอุ่นมากกว่าเขา -- mak kwa++mkAdv more_CAdv warm_A (mkS (mkCl he_NP run_V)) +more warmly than he runs+อบอุ่นมากกว่าที่เขาวิ่ง++mkAdv very_AdA (mkAdv warm_A) +very warmly+อุ่นมาก++mkAdv and_Conj here_Adv now_Adv+here and now+ที่นี่และเดี๋ยวนี้ -- tone mark++mkAdv and_Conj (mkListAdv (mkAdv with_Prep she_NP) (mkListAdv here_Adv now_Adv))+with her , here and now+กับหล่อน ที่นี่และเดี๋ยวนี้ -- comma, tone++mkQS conditionalTense anteriorAnt negativePol (mkQCl who_IP sleep_V)+who wouldn't have slept+ใครนอนไม่หลับ -- ay++mkQS (mkCl she_NP sleep_V)+does she sleep+หล่อนนอนหลับไหม++mkQCl (mkCl she_NP sleep_V)+does she sleep+หล่อนนอนหลับไหม++mkQCl who_IP (mkVP (mkVP sleep_V) here_Adv)+who sleeps here+ใครนอนหลับที่นี่ -- ay++mkQCl who_IP sleep_V+who sleeps+ใครนอนหลับ -- ay++mkQCl who_IP love_V2 she_NP+who loves her+ใครรักหล่อน -- ay++mkQCl who_IP send_V3 it_NP she_NP+who sends it to her+ใครส่งมันให้กับหล่อน -- ay, send++mkQCl who_IP want_VV (mkVP sleep_V)+who wants to sleep+ใครอยากนอนหลับ -- ay++mkQCl who_IP say_VS (mkS (mkCl i_NP sleep_V))+who says that I sleep+ใครบอกว่าฉันนอนหลับ -- ay, say (also phut)++mkQCl who_IP wonder_VQ (mkQS (mkQCl who_IP sleep_V))+who wonders who sleeps+ใครประหลาดใจว่าใครนอนหลับ -- ay ay++mkQCl who_IP become_VA old_A+who becomes old+ใครกลายเป็นคนแก่ -- ay, classifier !!++mkQCl who_IP become_VA (mkAP very_AdA old_A)+who becomes very old+ใครกลายเป็นคนแก่มาก -- ay, classifier++mkQCl who_IP paint_V2A it_NP red_A+who paints it red+ใครทามันสีแดง -- ay, compl++mkQCl who_IP paint_V2A it_NP (mkAP very_AdA red_A)+who paints it very red+ใครทามันสีแดงมาก -- ay, compl++mkQCl who_IP answer_V2S he_NP (mkS (mkCl we_NP sleep_V))+who answers to him that we sleep+ใครตอบเขาว่าเรานอนหลับ -- ay, compl++mkQCl who_IP ask_V2Q he_NP (mkQS (mkQCl who_IP sleep_V))+who asks him who sleeps -- ay, compl+ใครถามเขาว่าใครนอนหลับ++mkQCl who_IP beg_V2V he_NP (mkVP sleep_V)+who begs him to sleep+ใครขอให้เขานอนหลับ -- beg; possible withour hay++mkQCl who_IP old_A+who is old+ใครแก่ -- ay++mkQCl who_IP old_A he_NP+who is older than he+ใครแก่กว่าเขา++mkQCl who_IP married_A2 he_NP+who is married to him+ใครแต่งงานแล้วกับเขา++mkQCl who_IP (mkAP very_AdA old_A)+who is very old+ใครแก่มาก++mkQCl who_IP (mkNP the_Det woman_N)+who is the woman+ใครเป็นหญิง -- possible with pu++mkQCl who_IP woman_N+who is a woman+ใครเป็นหญิง++mkQCl who_IP (mkCN old_A woman_N)+who is an old woman+ใครเป็นหญิงแก่++mkQCl who_IP here_Adv+who is here+ใครอยู่ที่นี่++mkQCl who_IP (mkVP always_AdV (mkVP sleep_V))+who always sleeps+ใครนอนหลับเสมอ -- always++mkQCl why_IAdv (mkCl she_NP sleep_V) +why does she sleep+หล่อนนอนหลับทำไม -- th++mkQCl with_Prep who_IP (mkCl she_NP sleep_V) +with whom does she sleep+หล่อนนอนหลับกับใคร -- ay++mkQCl where_IAdv she_NP +where is she+หล่อนอยู่ที่ไหน++mkQCl (mkIComp who_IP) (mkNP this_Det man_N)+who is this man+ชายคนนี้เป็นใคร++mkQCl (mkIP which_IQuant city_N)+which city is there+คือเมืองเมืองไหน -- order !!++mkQCl who_IP she_NP+who is her+หล่อนเป็นใคร -- order++mkQCl who_IP (mkClSlash (mkClSlash she_NP love_V2) today_Adv)+whom does she love today+หล่อนรักใครวันนี้ -- adv last or first !!++mkIP (mkIDet which_IQuant (mkNum (mkNumeral n5_Unit))) (mkCN big_A city_N) +which five big cities+เมืองใหญ่ห้าเมืองไหน++mkIP (mkIDet which_IQuant (mkNum (mkNumeral n5_Unit))) city_N +which five cities+เมืองห้าเมืองไหน++mkIP (mkIDet which_IQuant (mkNum (mkNumeral n5_Unit)))+which five+ห้าไหน++mkIP which_IQuant (mkCN big_A city_N) +which big city+เมืองใหญ่เมืองไหน++mkIP which_IQuant (mkNum (mkNumeral n5_Unit)) (mkCN big_A city_N) +which five big cities+เมืองใหญ่ห้าเมืองไหน++mkIP which_IQuant city_N+which city+เมืองเมืองไหน++mkIP who_IP (mkAdv in_Prep (mkNP paris_PN))+who in Paris+ใครในปารีส++mkUtt what_IP+what+อะไร++mkUtt who_IP+who+ใคร++mkIAdv in_Prep (mkIP which_IQuant city_N)+in which city+ในเมืองเมืองไหน++mkIAdv where_IAdv (mkAdv in_Prep (mkNP paris_PN)) +where in Paris+ที่ไหนในปารีส++mkIP (mkIDet which_IQuant pluralNum) house_N+which houses+บ้านหลังไหน++mkIP (mkIDet which_IQuant) house_N +which house+บ้านหลังไหน++mkIP which_IDet house_N+which house+บ้านหลังไหน++mkIP whichPl_IDet house_N+which houses+บ้านหลังไหน++mkCN woman_N (mkRS conditionalTense anteriorAnt negativePol (mkRCl which_RP sleep_V))+woman who wouldn't have slept+หญิงที่นอนไม่หลับ++mkCN woman_N (mkRS (mkRCl which_RP sleep_V))+woman who sleeps+หญิงที่นอนหลับ++mkCN woman_N (mkRS or_Conj (mkRS (mkRCl which_RP sleep_V)) (mkRS (mkRCl which_RP we_NP love_V2)))+woman who sleeps or whom we love+หญิงที่นอนหลับหริอที่เรารัก++mkCN woman_N (mkRS (mkRCl which_RP (mkVP (mkVP sleep_V) here_Adv)))+woman who sleeps here+หญิงที่นอนหลับที่นี่++mkCN woman_N (mkRS (mkRCl which_RP sleep_V))+woman who sleeps+หญิงที่นอนหลับ++mkCN woman_N (mkRS (mkRCl which_RP love_V2 he_NP))+woman who loves him+หญิงที่รักเขา++mkCN woman_N (mkRS (mkRCl which_RP send_V3 it_NP he_NP))+woman who sends it to him+หญิงที่ส่งมันให้กับเขา -- send++mkCN woman_N (mkRS (mkRCl which_RP want_VV (mkVP sleep_V)))+woman who wants to sleep+หญิงที่อยากนอนหลับ++mkCN woman_N (mkRS (mkRCl which_RP say_VS (mkS (mkCl i_NP sleep_V))))+woman who says that I sleep+หญิงที่บอกว่าฉันนอนหลับ -- put better than bok?++mkCN woman_N (mkRS (mkRCl which_RP wonder_VQ (mkQS (mkQCl who_IP sleep_V))))+woman who wonders who sleeps+หญิงที่ประหลาดใจว่าใครนอนหลับ++mkCN woman_N (mkRS (mkRCl which_RP become_VA old_A))+woman who becomes old+หญิงที่กลายเป็นคนแก่ -- classifier !! ++mkCN woman_N (mkRS (mkRCl which_RP become_VA (mkAP very_AdA old_A)))+woman who becomes very old+หญิงที่กลายเป็นคนแก่มาก -- classifier++mkCN woman_N (mkRS (mkRCl which_RP paint_V2A it_NP red_A))+woman who paints it red+หญิงที่ทามันสีแดง++mkCN woman_N (mkRS (mkRCl which_RP paint_V2A it_NP (mkAP very_AdA red_A)))+woman who paints it very red+หญิงที่ทามันสีแดงมาก++mkCN woman_N (mkRS (mkRCl which_RP answer_V2S he_NP (mkS (mkCl we_NP sleep_V))))+woman who answers to him that we sleep+หญิงที่ตอบเขาว่าเรานอนหลับ -- compl++mkCN woman_N (mkRS (mkRCl which_RP ask_V2Q he_NP (mkQS (mkQCl who_IP sleep_V))))+woman who asks him who sleeps+หญิงที่ถามเขาว่าใครนอนหลับ -- ay++mkCN woman_N (mkRS (mkRCl which_RP beg_V2V he_NP (mkVP sleep_V)))+woman who begs him to sleep+หญิงที่ขอให้เขานอนหลับ -- beg++mkCN woman_N (mkRS (mkRCl which_RP old_A))+woman who is old+หญิงที่แก่++mkCN woman_N (mkRS (mkRCl which_RP old_A he_NP))+woman who is older than he+หญิงที่แก่กว่าเขา++mkCN woman_N (mkRS (mkRCl which_RP married_A2 he_NP))+woman who is married to him+หญิงที่แต่งงานแล้วกับเขา++mkCN woman_N (mkRS (mkRCl which_RP (mkAP very_AdA old_A)))+woman who is very old+หญิงที่แก่มาก++mkCN woman_N (mkRS (mkRCl which_RP (mkNP the_Det woman_N)))+woman who is the woman+หญิงที่เป็นหญิง++mkCN student_N (mkRS (mkRCl which_RP woman_N))+student who is a woman+นักศึกษาที่เป็นหญิง++mkCN student_N (mkRS (mkRCl which_RP (mkCN old_A woman_N)))+student who is an old woman+นักศึกษาที่เป็นหญิงแก่++mkCN woman_N (mkRS (mkRCl which_RP here_Adv))+woman who is here+หญิงที่อยู่ที่นี่++mkCN woman_N (mkRS (mkRCl which_RP (mkVP always_AdV (mkVP sleep_V))))+woman who always sleeps+หญิงที่นอนหลับเสมอ -- always++mkCN woman_N (mkRS (mkRCl which_RP we_NP love_V2))+woman whom we love+หญิงที่เรารัก++mkCN woman_N (mkRS (mkRCl which_RP (mkClSlash (mkClSlash she_NP love_V2) today_Adv)))+woman whom she loves today+หญิงที่หล่อนรักวันนี้++mkRP in_Prep (mkNP all_Predet (mkNP the_Quant pluralNum city_N)) which_RP+all the cities in whom+ทุกเมืองในที่ -- or เมืองทั้งหมดในที่++mkSSlash (mkTemp pastTense anteriorAnt) negativePol (mkClSlash she_NP (mkVPSlash see_V2))+she hadn't seen+หล่อนไม่เห็น++mkQCl who_IP (mkClSlash she_NP (mkVPSlash see_V2))+whom does she see+หล่อนเห็นใคร++mkQCl who_IP (mkClSlash she_NP see_V2)+whom does she see+หล่อนเห็นใคร++mkQCl who_IP (mkClSlash she_NP want_VV see_V2)+whom does she want to see+หล่อนอยากเห็นใคร++mkQCl who_IP (mkClSlash (mkCl she_NP sleep_V) with_Prep)+with whom does she sleep+หล่อนนอนหลับกับใคร++mkQCl who_IP (mkClSlash (mkClSlash she_NP see_V2) today_Adv)+whom does she see today+หล่อนเห็นใครวันนี้++mkQCl who_IP (mkClSlash she_NP know_VS (mkSSlash (mkTemp pastTense anteriorAnt) negativePol (mkClSlash we_NP (mkVPSlash see_V2))))+whom does she know that we hadn't seen+ใครที่หล่อนรู้ว่าเราไม่เห็น -- khray first !!++mkQCl who_IP (mkClSlash she_NP (mkVPSlash see_V2))+whom does she see+หล่อนเห็นใคร -- or khray thi lon hin !!++mkQCl who_IP (mkClSlash she_NP (mkVPSlash send_V3 it_NP)) +to whom does she send it+หล่อนส่งมันให้ใคร -- send++mkQCl who_IP (mkClSlash she_NP (mkVPSlash paint_V2A (mkAP red_A))) +whom does she paint red+ใครที่หล่อนทาสีแดง++mkQCl who_IP (mkClSlash she_NP (mkVPSlash ask_V2Q (mkQS (mkQCl where_IAdv (mkCl i_NP sleep_V))))) +whom does she ask where I sleep+หล่อนถามใครว่าฉันนอนหลับที่ไหน -- order !!++mkQCl who_IP (mkClSlash she_NP (mkVPSlash answer_V2S (mkS (mkCl i_NP sleep_V)))) +to whom does she answer that I sleep+หล่อนตอบใครว่าฉันนอนหลับ -- compl++mkQCl who_IP (mkClSlash she_NP (mkVPSlash beg_V2V (mkVP sleep_V)))+whom does she beg to sleep+หล่อนขอนอนหลับกับใคร++mkQCl who_IP (mkClSlash she_NP (mkVPSlash want_VV (mkVPSlash see_V2)))+whom does she want to see+หล่อนอยากเห็นใคร++mkQCl who_IP (mkClSlash she_NP (mkVPSlash beg_V2V i_NP (mkVPSlash see_V2)))+whom does she beg me to see+หล่อนขอให้ฉันเห็นใคร -- beg++mkAdv above_Prep it_NP+above it+ข้างบนมัน++mkAdv after_Prep it_NP+after it+หลังจากมัน -- lang cak++mkUtt (mkNP all_Predet (mkNP thePl_Det man_N))+all the men+ชายทั้งหมด -- order !!++mkAP almost_AdA red_A+almost red+เกิอบสีแดง -- order !!++mkCard almost_AdN (mkCard (mkNumeral n8_Unit)) +almost eight+เกิอบแปด -- order !!++mkAdv although_Subj (mkS (mkCl she_NP sleep_V))+although she sleeps+ถืงหล่อนนอนหลับ++always_AdV+always+เสมอ -- always!++mkAdv and_Conj here_Adv now_Adv+here and now+ที่นี่และเดี๋ยวนี้ -- tone++mkAdv because_Subj (mkS (mkCl she_NP sleep_V))+because she sleeps+เพราะหล่อนนอนหลับ++mkAdv before_Prep it_NP+before it+ก่อนมัน++mkAdv behind_Prep it_NP+behind it+หลังมัน++mkAdv between_Prep (mkNP and_Conj you_NP i_NP)+between you and me+ระหว่างคุณและฉัน -- place of tone mark++mkAdv both7and_DConj here_Adv there_Adv+both here and there+ทั้งที่นี่และที่นั่น -- both++but_PConj+but+แต่++mkAdv by8agent_Prep it_NP+by it+มัน++mkAdv by8means_Prep it_NP+by it+ผ่านมัน++mkUtt (mkVP can8know_VV (mkVP sleep_V))+to be able to sleep+นอนหลับได้++mkUtt (mkVP can_VV (mkVP sleep_V))+to be able to sleep+นอนหลับได้++mkAdv during_Prep it_NP+during it+ที่มัน -- ra wang man (= between)++mkAdv either7or_DConj here_Adv there_Adv+either here or there+ที่นี่หริอที่นั่น -- or: mai - ko++mkUtt (mkNP every_Det woman_N)+every woman+หญิงทุกคน++mkUtt everybody_NP+everybody+ทุกคน -- every person++mkUtt everything_NP+everything+ทุกสิ่ง++everywhere_Adv+everywhere+ทุกที่++mkAdv for_Prep it_NP+for it+ให้มัน++mkAdv from_Prep it_NP+from it+จากมัน -- a:++mkUtt (mkNP he_Pron)+he+เขา++here_Adv+here+ที่นี่++here7to_Adv+to here+ที่นี่++here7from_Adv+from here+จากนี่ -- a:++mkUtt how_IAdv+how+อย่างไร++mkUtt (mkIP how8many_IDet house_N)+how many houses+บ้านกี่หลัง++mkUtt how8much_IAdv+how much+เท่าไร++mkUtt (mkNP i_Pron)+I+ฉัน++mkAdv if_Subj (mkS (mkCl she_NP sleep_V))+if she sleeps+ถ้าหล่อนนอนหลับ++mkAdv in8front_Prep it_NP+in front of it+หน้ามัน++mkAdv in_Prep it_NP+in it+ในมัน++mkUtt (mkNP it_Pron)+it+มัน++less_CAdv+less+น้อย++mkUtt (mkNP many_Det house_N)+many houses+บ้านหลายหลัง++more_CAdv+more+มากกว่า -- more than++most_Predet+most+มากที่สุด++mkUtt (mkNP much_Det wine_N)+much wine+เหล้าองุ่นหลายขวด -- the word much++must_VV+have to+ต้อง++no_Utt+no+ไม่++mkAdv on_Prep it_NP+on it+บนมัน++only_Predet+only+เท่านั้น -- tone mark++mkAdv or_Conj here_Adv there_Adv+here or there+ที่นี่หริอที่นั่น++otherwise_PConj+otherwise+ไม่อย่างนั้น -- was very informal++mkAdv part_Prep it_NP+of it+มัน++please_Voc+please+ขอ++mkAdv possess_Prep it_NP+of it+ของมัน++quite_Adv+quite+ค่อนข้าง -- tone mark++mkUtt (mkNP she_Pron)+she+หล่อน++so_AdA+so+ดังนั้น -- (maak, if alone) !!++mkUtt (mkNP someSg_Det wine_N)+some wine+เหล้าองุ่นบางขวด -- tone mark in wrong order; second tone mark off++mkUtt (mkNP somePl_Det woman_N)+some women+หญิงบางคน -- tone mark++mkUtt somebody_NP+somebody+บางคน++mkUtt something_NP+something+บางสิ่ง++somewhere_Adv+somewhere+บางแห่ง++mkUtt (mkNP that_Quant house_N)+that house+บ้านหลังนั้น++mkAdv that_Subj (mkS (mkCl she_NP sleep_V))+that she sleeps+ว่าหล่อนนอนหลับ++there_Adv+there+ที่นั่น++there7to_Adv+there+ที่นั่น++there7from_Adv+from there+จากนั่น -- a:++therefore_PConj+therefore+เพราะฉะนั้น++mkUtt (mkNP they_Pron)+they+เขา++mkUtt (mkNP this_Quant house_N)+this house+บ้านหลังนี้++mkAdv through_Prep it_NP+through it+ผ่านมัน++mkAdv to_Prep it_NP+to it+ถืงมัน++too_AdA+too+เกินไป++mkAdv under_Prep it_NP+under it+ใต้มัน++very_AdA+very+มาก++want_VV+want+อยาก++mkUtt (mkNP we_Pron)+we+เรา++whatPl_IP+what+อะไร++whatSg_IP+what+อะไร++mkUtt when_IAdv+when+เมื่อไร++mkAdv when_Subj (mkS (mkCl she_NP sleep_V))+when she sleeps+ที่หล่อนนอนหลับ -- tone mark, th !! tone mark in Subj?++mkUtt where_IAdv+where+ที่ไหน++mkIP which_IQuant house_N+which house+บ้านหลังไหน++whoPl_IP+who+ใคร++whoSg_IP+who+ใคร++mkUtt why_IAdv+why+ทำไม -- th++mkAdv with_Prep it_NP+with it+กับมัน++mkAdv without_Prep it_NP+without it+ไม่มีมัน -- tone mark++yes_Utt+yes+ใช่++mkUtt (mkNP youSg_Pron)+you+คุณ++mkUtt (mkNP youPl_Pron)+you+คุณ++mkUtt (mkNP youPol_Pron)+you+คุณ++mkUtt (mkNP no_Quant house_N)+no house+ไม่มีบ้าน -- may mi + N + C++mkUtt (mkNP not_Predet everybody_NP)+not everybody+ไม่ทุกคน++mkAdv if_then_Conj here_Adv there_Adv+if here then there+ถ้าที่นี่ก็ที่นั่น++mkCard at_least_AdN (mkCard (mkNumeral n8_Unit))+at least eight+อย่างน้อยแปด -- order++mkCard at_most_AdN (mkCard (mkNumeral n8_Unit))+at most eight+อย่างมากแปด -- order++mkUtt nobody_NP+nobody+ไม่มีใคร++mkUtt nothing_NP+nothing+เปล่า++mkAdv except_Prep it_NP+except it+นอกจากมัน++as_CAdv+as+เท่า++mkUtt (mkVP have_V2 it_NP)+to have it+มีมัน+
@@ -0,0 +1,32 @@+lang1 = "Eng"+lang2 = "Tha"++-- to write a comparison for two languages++main = do+ ss1 <- readFile (exx lang1) >>= return . lines+ ss2 <- readFile (exx lang2) >>= return . lines+ mkExx (ss1, ss2)++exx lang = "api-examples-" ++ lang ++ ".txt"++mkExx sss = case sss of+ (s1:ss1,s2:ss2) | isMsg s1 -> mkExx (ss1,s2:ss2)+ (s1:ss1,s2:ss2) | isMsg s2 -> mkExx (s1:ss1,ss2)+ (s1:ss1,s2:ss2) | s1 /= s2 -> + putStrLn (drops s1) >> putStrLn (filter (not . (==' ')) (drops s2)) >> putStrLn [] >> mkExx (ss1,ss2) -- show strings+ (s1:ss1,s2:ss2) | s1 == s2 && not (isJunk s1) -> + putStrLn (drops s1) >> mkExx (ss1,ss2) -- show the term+ (s1:ss1,s2:ss2) | s1 == s2 -> mkExx (ss1,ss2)+ _ -> return ()++isMsg s = case s of+ '>':_ -> False+ _ -> True++drops = drop 4++isJunk s = any (flip elem s) "*-"+++
@@ -26,7 +26,9 @@ gf -retain -s ../alltenses/TryFin.gfo <api-examples.gfs >api-examples-Fin.txt gf -retain -s ../alltenses/TryFre.gfo <api-examples.gfs >api-examples-Fre.txt gf -retain -s ../alltenses/TryGer.gfo <api-examples.gfs >api-examples-Ger.txt+ gf -retain -s ../alltenses/TryHin.gfo <api-examples.gfs >api-examples-Hin.txt gf -retain -s ../alltenses/TryIta.gfo <api-examples.gfs >api-examples-Ita.txt+ gf -retain -s ../alltenses/TryLav.gfo <api-examples.gfs >api-examples-Lav.txt gf -retain -s ../alltenses/TryNep.gfo <api-examples.gfs >api-examples-Nep.txt gf -retain -s ../alltenses/TryNor.gfo <api-examples.gfs >api-examples-Nor.txt gf -retain -s ../alltenses/TryPes.gfo <api-examples.gfs >api-examples-Pes.txt@@ -34,6 +36,8 @@ gf -retain -s ../alltenses/TryPol.gfo <api-examples.gfs >api-examples-Pol.txt gf -retain -s ../alltenses/TryRon.gfo <api-examples.gfs >api-examples-Ron.txt gf -retain -s ../alltenses/TryRus.gfo <api-examples.gfs >api-examples-Rus.txt+ gf -retain -s ../alltenses/TrySnd.gfo <api-examples.gfs >api-examples-Snd.txt gf -retain -s ../alltenses/TrySpa.gfo <api-examples.gfs >api-examples-Spa.txt gf -retain -s ../alltenses/TrySwe.gfo <api-examples.gfs >api-examples-Swe.txt+ gf -retain -s ../alltenses/TryTha.gfo <api-examples.gfs >api-examples-Tha.txt gf -retain -s ../alltenses/TryUrd.gfo <api-examples.gfs >api-examples-Urd.txt
@@ -68,9 +68,10 @@ prApiEx :: M.Map String String -> [String] prApiEx apexx = case M.toList apexx of (a,e):lexx -> (a ++ ": ``" ++ unwords (words e) ++ "``"):- [l ++ ": //" ++ mkEx e ++ "//" | (l,e) <- lexx]+ [l ++ ": //" ++ mkEx l e ++ "//" | (l,e) <- lexx] -mkEx = unwords . bind . mkE . words where +mkEx l = unws . bind . mkE . words where + unws = if l == "Tha" then concat else unwords mkE e = case e of "atomic":"term":_ -> ["*"] "[]":_ -> ["''"]
@@ -17,7 +17,7 @@ -- all languages shown apiExxFiles = ["api-examples-" ++ lang ++ ".txt" | lang <- words - "Afr Bul Cat Dan Dut Eng Fin Fre Ger Ita Nep Nor Pes Pnb Pol Ron Rus Spa Swe Urd"]+ "Afr Bul Cat Dan Dut Eng Fin Fre Ger Hin Ita Lav Nep Nor Pes Pnb Pol Ron Rus Snd Spa Swe Tha Urd"] main = do xx <- getArgs@@ -136,7 +136,7 @@ _ -> getrs rs ss2 rule s = (name, typ, ex) where - ws = takeWhile (flip notElem ["--#", "--:"]) $ words s+ ws = takeWhile (flip notElem ["--#", "--:", "="]) $ words s name = head ws (t,e) = span (/="--") (tail ws) typ = unwords $ filtype (drop 1 t)@@ -245,16 +245,20 @@ ("Finnish", srcPath "/finnish/ParadigmsFin.gf"), ("French", srcPath "/french/ParadigmsFre.gf"), ("German", srcPath "/german/ParadigmsGer.gf"),+ ("Hindi", srcPath "/hindi/ParadigmsHin.gf"), -- ("Interlingua", srcPath "/interlingua/ParadigmsIna.gf"), ("Italian", srcPath "/italian/ParadigmsIta.gf"),+ ("Latvian", srcPath "/latvian/ParadigmsLav.gf"), ("Nepali", srcPath "/nepali/ParadigmsNep.gf"), ("Norwegian", srcPath "/norwegian/ParadigmsNor.gf"), ("Polish", srcPath "/polish/ParadigmsPol.gf"), ("Punjabi", srcPath "/punjabi/ParadigmsPnb.gf"), ("Romanian", srcPath "/romanian/ParadigmsRon.gf"), ("Russian", srcPath "/russian/ParadigmsRus.gf"),+ ("Sindhi", srcPath "/sindhi/ParadigmsSnd.gf"), ("Spanish", srcPath "/spanish/ParadigmsSpa.gf"), ("Swedish", srcPath "/swedish/ParadigmsSwe.gf"),+ ("Thai", srcPath "/thai/ParadigmsTha.gf"), ("Urdu", srcPath "/urdu/ParadigmsUrd.gf") ]
@@ -0,0 +1,22 @@+import qualified Data.Map as Map+import Data.Char++gold = "CC_eng_tha.txt"+tested = "api-examples-Tha.txt"++main = do+ s <- readFile gold+ let corrects = Map.fromList $ exx 1 5 2 (lines s)+-- mapM_ putStrLn $ concat [[t,s] | (t,s) <- Map.toList corrects]+ t <- readFile tested+ mapM_ (doTest corrects) (exx 18 22 1 (map (drop 4) (lines t)))++exx x y z ss = [(ss!!k,ss!!(k+z)) | k <- [x,y .. length ss - 2]]++doTest corrects (t,s) = case Map.lookup t corrects of+ Just c -> if unspace s == uncomment c then return () else mapM_ putStrLn [t,unspace s,c]+ _ -> return ()++unspace = filter (not . isSpace)+uncomment = unspace . takeWhile (/= '-')+
@@ -706,7 +706,7 @@ after_Prep : Prep mkAdv after_Prep it_NP all_Predet : Predet -mkNP all_Predet (mkNP thePl_Det man_N)+mkUtt (mkNP all_Predet (mkNP thePl_Det man_N)) almost_AdA : AdA mkAP almost_AdA red_A almost_AdN : AdN@@ -742,7 +742,7 @@ either7or_DConj : Conj -- either...or mkAdv either7or_DConj here_Adv there_Adv every_Det : Det -every_Det+mkUtt (mkNP every_Det woman_N) everybody_NP : NP -- everybody mkUtt everybody_NP everything_NP : NP @@ -750,7 +750,7 @@ everywhere_Adv : Adv everywhere_Adv few_Det : Det -few_Det+mkUtt (mkNP few_Det woman_N) for_Prep : Prep mkAdv for_Prep it_NP from_Prep : Prep @@ -782,13 +782,13 @@ less_CAdv : CAdv less_CAdv many_Det : Det -mkNP many_Det house_N+mkUtt (mkNP many_Det house_N) more_CAdv : CAdv more_CAdv most_Predet : Predet most_Predet much_Det : Det -much_Det+mkUtt (mkNP much_Det wine_N) must_VV : VV must_VV no_Utt : Utt @@ -814,9 +814,9 @@ so_AdA : AdA so_AdA someSg_Det : Det -someSg_Det+mkUtt (mkNP someSg_Det wine_N) somePl_Det : Det -somePl_Det+mkUtt (mkNP somePl_Det woman_N) somebody_NP : NP mkUtt somebody_NP something_NP : NP @@ -824,7 +824,7 @@ somewhere_Adv : Adv somewhere_Adv that_Quant : Quant -mkNP that_Quant house_N+mkUtt (mkNP that_Quant house_N) that_Subj : Subj mkAdv that_Subj (mkS (mkCl she_NP sleep_V)) there_Adv : Adv @@ -838,7 +838,7 @@ they_Pron : Pron mkUtt (mkNP they_Pron) this_Quant : Quant -mkNP this_Quant house_N+mkUtt (mkNP this_Quant house_N) through_Prep : Prep mkAdv through_Prep it_NP to_Prep : Prep
@@ -0,0 +1,57 @@+<html>+<body>+<i> Produced by +gfdoc - a rudimentary GF document generator.+(c) Aarne Ranta (aarne@cs.chalmers.se) 2002 under GNU GPL.+ </i>+<p>+<h1> Adjective: Adjectives and Adjectival Phrases</h1>++<pre>+ abstract Adjective = Cat ** {+ + fun+</pre>++The principal ways of forming an adjectival phrase are+positive, comparative, relational, reflexive-relational, and+elliptic-relational.+<pre>+ PositA : A -> AP ; -- warm+ ComparA : A -> NP -> AP ; -- warmer than I+ ComplA2 : A2 -> NP -> AP ; -- married to her+ ReflA2 : A2 -> AP ; -- married to itself+ UseA2 : A2 -> AP ; -- married+ UseComparA : A -> AP ; -- warmer+ CAdvAP : CAdv -> AP -> NP -> AP ; -- as cool as John+</pre>++The superlative use is covered in <tt>Ord</tt>.+<pre>+ AdjOrd : Ord -> AP ; -- warmest+</pre>++Sentence and question complements defined for all adjectival+phrases, although the semantics is only clear for some adjectives.+<pre>+ SentAP : AP -> SC -> AP ; -- good that she is here+</pre>++An adjectival phrase can be modified by an <b>adadjective</b>, such as <i>very</i>.+<pre>+ AdAP : AdA -> AP -> AP ; -- very warm+</pre>++It can also be postmodified by an adverb, typically a prepositional phrase.+<pre>+ AdvAP : AP -> Adv -> AP ; -- warm by nature+</pre>++The formation of adverbs from adjectives (e.g. <i>quickly</i>) is covered+in [Adverb Adverb.html]; the same concerns adadjectives (e.g. <i>extremely</i>).+<pre>+ }+</pre>++</body>+</html>
@@ -0,0 +1,53 @@+<html>+<body>+<i> Produced by +gfdoc - a rudimentary GF document generator.+(c) Aarne Ranta (aarne@cs.chalmers.se) 2002 under GNU GPL.+ </i>+<p>+<h1> Adverb: Adverbs and Adverbial Phrases</h1>++<pre>+ abstract Adverb = Cat ** {+ + fun+</pre>++The two main ways of forming adverbs are from adjectives and by+prepositions from noun phrases.+<pre>+ PositAdvAdj : A -> Adv ; -- warmly+ PrepNP : Prep -> NP -> Adv ; -- in the house+</pre>++Comparative adverbs have a noun phrase or a sentence as object of+comparison.+<pre>+ ComparAdvAdj : CAdv -> A -> NP -> Adv ; -- more warmly than John+ ComparAdvAdjS : CAdv -> A -> S -> Adv ; -- more warmly than he runs+</pre>++Adverbs can be modified by 'adadjectives', just like adjectives.+<pre>+ AdAdv : AdA -> Adv -> Adv ; -- very quickly+</pre>++Like adverbs, adadjectives can be produced by adjectives.+<pre>+ PositAdAAdj : A -> AdA ; -- extremely+</pre>++Subordinate clauses can function as adverbs.+<pre>+ SubjS : Subj -> S -> Adv ; -- when she sleeps+</pre>++Comparison adverbs also work as numeral adverbs.+<pre>+ AdnCAdv : CAdv -> AdN ; -- less (than five)+ + }+</pre>++</body>+</html>
@@ -0,0 +1,147 @@+<html>+<body>+<i> Produced by +gfdoc - a rudimentary GF document generator.+(c) Aarne Ranta (aarne@cs.chalmers.se) 2002 under GNU GPL.+ </i>+<p>+<h1> Cat: the Category System</h1>++The category system is central to the library in the sense+that the other modules (<tt>Adjective</tt>, <tt>Adverb</tt>, <tt>Noun</tt>, <tt>Verb</tt> etc)+communicate through it. This means that a e.g. a function using+<tt>NP</tt>s in <tt>Verb</tt> need not know how <tt>NP</tt>s are constructed in <tt>Noun</tt>:+it is enough that both <tt>Verb</tt> and <tt>Noun</tt> use the same type <tt>NP</tt>,+which is given here in <tt>Cat</tt>.++Some categories are inherited from [``Common`` Common.html].+The reason they are defined there is that they have the same+implementation in all languages in the resource (typically,+just a string). These categories are+<tt>AdA, AdN, AdV, Adv, Ant, CAdv, IAdv, PConj, Phr</tt>, +<tt>Pol, SC, Tense, Text, Utt, Voc, Interj</tt>.+<p>+Moreover, the list categories <tt>ListAdv, ListAP, ListNP, ListS</tt>+are defined on <tt>Conjunction</tt> and only used locally there.+<pre>+ abstract Cat = Common ** {+ + cat+</pre>++<h2> Sentences and clauses</h2>+Constructed in [Sentence Sentence.html], and also in+[Idiom Idiom.html].+<pre>+ S ; -- declarative sentence e.g. "she lived here"+ QS ; -- question e.g. "where did she live"+ RS ; -- relative e.g. "in which she lived"+ Cl ; -- declarative clause, with all tenses e.g. "she looks at this"+ ClSlash;-- clause missing NP (S/NP in GPSG) e.g. "she looks at"+ SSlash ;-- sentence missing NP e.g. "she has looked at"+ Imp ; -- imperative e.g. "look at this"+</pre>++<h2> Questions and interrogatives</h2>+Constructed in [Question Question.html].+<pre>+ QCl ; -- question clause, with all tenses e.g. "why does she walk"+ IP ; -- interrogative pronoun e.g. "who"+ IComp ; -- interrogative complement of copula e.g. "where"+ IDet ; -- interrogative determiner e.g. "how many"+ IQuant; -- interrogative quantifier e.g. "which"+</pre>++<h2> Relative clauses and pronouns</h2>+Constructed in [Relative Relative.html].+<pre>+ RCl ; -- relative clause, with all tenses e.g. "in which she lives"+ RP ; -- relative pronoun e.g. "in which"+</pre>++<h2> Verb phrases</h2>+Constructed in [Verb Verb.html].+<pre>+ VP ; -- verb phrase e.g. "is very warm"+ Comp ; -- complement of copula, such as AP e.g. "very warm"+ VPSlash ; -- verb phrase missing complement e.g. "give to John"+</pre>++<h2> Adjectival phrases</h2>+Constructed in [Adjective Adjective.html].+<pre>+ AP ; -- adjectival phrase e.g. "very warm"+</pre>++<h2> Nouns and noun phrases</h2>+Constructed in [Noun Noun.html]. +Many atomic noun phrases e.g. <i>everybody</i>+are constructed in [Structural Structural.html].+The determiner structure is+``` Predet (QuantSg | QuantPl Num) Ord+as defined in [Noun Noun.html].+<pre>+ CN ; -- common noun (without determiner) e.g. "red house"+ NP ; -- noun phrase (subject or object) e.g. "the red house"+ Pron ; -- personal pronoun e.g. "she"+ Det ; -- determiner phrase e.g. "those seven"+ Predet ; -- predeterminer (prefixed Quant) e.g. "all"+ Quant ; -- quantifier ('nucleus' of Det) e.g. "this/these"+ Num ; -- number determining element e.g. "seven"+ Card ; -- cardinal number e.g. "seven"+ Ord ; -- ordinal number (used in Det) e.g. "seventh"+</pre>++<h2> Numerals</h2>+Constructed in [Numeral Numeral.html].+<pre>+ Numeral ; -- cardinal or ordinal in words e.g. "five/fifth"+ Digits ; -- cardinal or ordinal in digits e.g. "1,000/1,000th"+</pre>++<h2> Structural words</h2>+Constructed in [Structural Structural.html].+<pre>+ Conj ; -- conjunction e.g. "and"+</pre>++-b DConj ; -- distributed conjunction e.g. <i>both - and</i>+<pre>+ Subj ; -- subjunction e.g. "if"+ Prep ; -- preposition, or just case e.g. "in"+</pre>++<h2> Words of open classes</h2>+These are constructed in [Lexicon Lexicon.html] and in +additional lexicon modules.+<pre>+ V ; -- one-place verb e.g. "sleep" + V2 ; -- two-place verb e.g. "love"+ V3 ; -- three-place verb e.g. "show"+ VV ; -- verb-phrase-complement verb e.g. "want"+ VS ; -- sentence-complement verb e.g. "claim"+ VQ ; -- question-complement verb e.g. "wonder"+ VA ; -- adjective-complement verb e.g. "look"+ V2V ; -- verb with NP and V complement e.g. "cause"+ V2S ; -- verb with NP and S complement e.g. "tell"+ V2Q ; -- verb with NP and Q complement e.g. "ask"+ V2A ; -- verb with NP and AP complement e.g. "paint"+ + A ; -- one-place adjective e.g. "warm"+ A2 ; -- two-place adjective e.g. "divisible"+ + N ; -- common noun e.g. "house"+ N2 ; -- relational noun e.g. "son"+ N3 ; -- three-place relational noun e.g. "connection"+ PN ; -- proper name e.g. "Paris"+</pre>++DEPRECATED: QuantSg, QuantPl+- QuantSg ;-- quantifier ('nucleus' of sing. Det) e.g. <i>every</i>+- QuantPl ;-- quantifier ('nucleus' of plur. Det) e.g. <i>many</i>+<pre>+ }+</pre>++</body>+</html>
@@ -0,0 +1,61 @@+<html>+<body>+<i> Produced by +gfdoc - a rudimentary GF document generator.+(c) Aarne Ranta (aarne@cs.chalmers.se) 2002 under GNU GPL.+ </i>+<p>+<h1> Common: Structures with Common Implementations.</h1>++This module defines the categories that uniformly have the linearization+<tt>{s : Str}</tt> in all languages. +<pre>+ abstract Common = {+ + cat+</pre>++<h2> Top-level units</h2>+Constructed in [``Text`` Text.html]: <tt>Text</tt>.+<pre>+ Text ; -- text consisting of several phrases e.g. "He is here. Why?"+</pre>++Constructed in [``Phrase`` Phrase.html]:+<pre>+ Phr ; -- phrase in a text e.g. "but be quiet please"+ Utt ; -- sentence, question, word... e.g. "be quiet"+ Voc ; -- vocative or "please" e.g. "my darling"+ PConj ; -- phrase-beginning conjunction e.g. "therefore"+ Interj ; -- interjection e.g. "alas"+</pre>++Constructed in [``Sentence`` Sentence.html]:+<pre>+ SC ; -- embedded sentence or question e.g. "that it rains"+</pre>++<h2> Adverbs</h2>+Constructed in [``Adverb`` Adverb.html]. +Many adverbs are constructed in [``Structural`` Structural.html].+<pre>+ Adv ; -- verb-phrase-modifying adverb e.g. "in the house"+ AdV ; -- adverb directly attached to verb e.g. "always"+ AdA ; -- adjective-modifying adverb e.g. "very"+ AdN ; -- numeral-modifying adverb e.g. "more than"+ IAdv ; -- interrogative adverb e.g. "why"+ CAdv ; -- comparative adverb e.g. "more"+</pre>++<h2> Tense, polarity, and anteriority</h2>+<pre>+ Temp ; -- temporal and aspectual features e.g. past anterior+ Tense ; -- tense e.g. present, past, future+ Pol ; -- polarity e.g. positive, negative+ Ant ; -- anteriority e.g. simultaneous, anterior+ + }+</pre>++</body>+</html>
@@ -0,0 +1,59 @@+<html>+<body>+<i> Produced by +gfdoc - a rudimentary GF document generator.+(c) Aarne Ranta (aarne@cs.chalmers.se) 2002 under GNU GPL.+ </i>+<p>+<h1> Conjunction: Coordination</h1>++Coordination is defined for many different categories; here is+a sample. The rules apply to <b>lists</b> of two or more elements,+and define two general patterns: +- ordinary conjunction: X,...X and X+- distributed conjunction: both X,...,X and X+<p>+<p>+<tt>VP</tt> conjunctions are not covered here, because their applicability+depends on language. Some special cases are defined in +[``Extra`` ../abstract/Extra.gf].+<pre>+ abstract Conjunction = Cat ** {+</pre>++<h2> Rules</h2>+<pre>+ fun+ ConjS : Conj -> [S] -> S ; -- "he walks and she runs"+ ConjRS : Conj -> [RS] -> RS ; -- "who walks and whose mother runs"+ ConjAP : Conj -> [AP] -> AP ; -- "cold and warm"+ ConjNP : Conj -> [NP] -> NP ; -- "she or we"+ ConjAdv : Conj -> [Adv] -> Adv ; -- "here or there"+ ConjIAdv : Conj -> [IAdv] -> IAdv ; -- "where and with whom"+ ConjCN : Conj -> [CN] -> CN ; -- "man and woman"+</pre>++<h2> Categories</h2>+These categories are only used in this module.+<pre>+ cat+ [S]{2} ; + [RS]{2} ; + [Adv]{2} ; + [NP]{2} ; + [AP]{2} ;+ [IAdv]{2} ;+ [CN] {2} ;+</pre>++<h2> List constructors</h2>+The list constructors are derived from the list notation and therefore+not given explicitly. But here are their type signatures:+<pre>+ -- BaseC : C -> C -> [C] ; -- for C = S, AP, NP, Adv+ -- ConsC : C -> [C] -> [C] ;+ }+</pre>++</body>+</html>
@@ -0,0 +1,89 @@+<html>+<body>+<i> Produced by +gfdoc - a rudimentary GF document generator.+(c) Aarne Ranta (aarne@cs.chalmers.se) 2002 under GNU GPL.+ </i>+<p>+<h1> More syntax rules</h1>++This module defines syntax rules that are not implemented in all+languages, but in more than one, so that it makes sense to offer a+common API.+<pre>+ abstract Extra = Cat ** {+ + fun+ GenNP : NP -> Quant ; -- this man's+ GenIP : IP -> IQuant ; -- whose+ GenRP : Num -> CN -> RP ; -- whose car+ ComplBareVS : VS -> S -> VP ; -- know you go+ + StrandRelSlash : RP -> ClSlash -> RCl ; -- that he lives in+ EmptyRelSlash : ClSlash -> RCl ; -- he lives in+ StrandQuestSlash : IP -> ClSlash -> QCl ; -- whom does John live with+</pre>++<tt>VP</tt> conjunction, which has different fragments implemented in+different languages - never a full <tt>VP</tt>, though.+<pre>+ cat+ VPI ;+ [VPI] {2} ;+ + fun+ MkVPI : VP -> VPI ;+ ConjVPI : Conj -> [VPI] -> VPI ;+ ComplVPIVV : VV -> VPI -> VP ;+ + -- new 4/12/2009+ cat+ VPS ;+ [VPS] {2} ;+ + fun+ MkVPS : Temp -> Pol -> VP -> VPS ;+ ConjVPS : Conj -> [VPS] -> VPS ;+ PredVPS : NP -> VPS -> S ;+ + -- 9/4/2010+ + fun+ ProDrop : Pron -> Pron ; -- unstressed subject pronoun becomes []: "(io) sono stanco"+ ICompAP : AP -> IComp ; -- "how old"+ IAdvAdv : Adv -> IAdv ; -- "how often"+ + CompIQuant : IQuant -> IComp ; -- which (is it) [agreement to NP]+ + PrepCN : Prep -> CN -> Adv ; -- by accident [Prep + CN without article]+ + -- fronted/focal constructions, only for main clauses+ + cat+ Foc ;+ + fun+ FocObj : NP -> ClSlash -> Foc ; -- her I love+ FocAdv : Adv -> Cl -> Foc ; -- today I will sleep+ FocAdV : AdV -> Cl -> Foc ; -- never will I sleep+ FocAP : AP -> NP -> Foc ; -- green was the tree+ FocNeg : Cl -> Foc ; -- not is he here+ FocVP : VP -> NP -> Foc ; -- love her I do+ FocVV : VV -> VP -> NP -> Foc ; -- to love her I want+ + UseFoc : Temp -> Pol -> Foc -> Utt ;+ + fun+ PartVP : VP -> AP ; -- (the man) looking at Mary+ EmbedPresPart : VP -> SC ; -- looking at Mary (is fun)+</pre>++this is a generalization of Verb.PassV2 and should replace it in the future.+<pre>+ PassVPSlash : VPSlash -> VP ; -- be forced to sleep+ + }+</pre>++</body>+</html>
@@ -0,0 +1,34 @@+<html>+<body>+<i> Produced by +gfdoc - a rudimentary GF document generator.+(c) Aarne Ranta (aarne@cs.chalmers.se) 2002 under GNU GPL.+ </i>+<p>+<h1> Grammar: the Main Module of the Resource Grammar</h1>++This grammar is a collection of the different grammar modules,+To test the resource, import [``Lang`` Lang.html], which also contains+a lexicon.+<pre>+ abstract Grammar = + Noun,+ Verb, + Adjective,+ Adverb,+ Numeral,+ Sentence, + Question,+ Relative,+ Conjunction,+ Phrase,+ Text,+ Structural,+ Idiom,+ Tense,+ Transfer + ;+</pre>++</body>+</html>
@@ -0,0 +1,36 @@+<html>+<body>+<i> Produced by +gfdoc - a rudimentary GF document generator.+(c) Aarne Ranta (aarne@cs.chalmers.se) 2002 under GNU GPL.+ </i>+<p>+<h1> Idiom: Idiomatic Expressions</h1>++<pre>+ abstract Idiom = Cat ** {+</pre>++This module defines constructions that are formed in fixed ways,+often different even in closely related languages.+<pre>+ fun+ ImpersCl : VP -> Cl ; -- it is hot+ GenericCl : VP -> Cl ; -- one sleeps+ + CleftNP : NP -> RS -> Cl ; -- it is I who did it+ CleftAdv : Adv -> S -> Cl ; -- it is here she slept+ + ExistNP : NP -> Cl ; -- there is a house+ ExistIP : IP -> QCl ; -- which houses are there+ + ProgrVP : VP -> VP ; -- be sleeping+ + ImpPl1 : VP -> Utt ; -- let's go+ + ImpP3 : NP -> VP -> Utt ; -- let John walk+ }+</pre>++</body>+</html>
@@ -0,0 +1,24 @@+<html>+<body>+<i> Produced by +gfdoc - a rudimentary GF document generator.+(c) Aarne Ranta (aarne@cs.chalmers.se) 2002 under GNU GPL.+ </i>+<p>+<h1> Lang: a Test Module for the Resource Grammar</h1>++This grammar is for testing the resource as included in the+language-independent API, consisting of a grammar and a lexicon.+The grammar without a lexicon is [``Grammar`` Grammar.html],+which may be more suitable to open in applications.+<pre>+ abstract Lang = + Grammar, + Lexicon+ ** {+ flags startcat=Phr ;+ } ;+</pre>++</body>+</html>
@@ -0,0 +1,366 @@+<html>+<body>+<i> Produced by +gfdoc - a rudimentary GF document generator.+(c) Aarne Ranta (aarne@cs.chalmers.se) 2002 under GNU GPL.+ </i>+<p>+<h1></h1>++<pre>+ abstract Lexicon = Cat ** {+ fun+ add_V3 : V3 ;+ airplane_N : N ;+ alas_Interj : Interj ;+ already_Adv : Adv ;+ animal_N : N ;+ answer_V2S : V2S ;+ apartment_N : N ;+ apple_N : N ;+ art_N : N ;+ ashes_N : N ;+ ask_V2Q : V2Q ;+ baby_N : N ;+ back_N : N ;+ bad_A : A ;+ bank_N : N ;+ bark_N : N ;+ beautiful_A : A ;+ become_VA : VA ;+ beer_N : N ;+ beg_V2V : V2V ;+ belly_N : N ;+ big_A : A ;+ bike_N : N ;+ bird_N : N ;+ bite_V2 : V2 ;+ black_A : A ;+ blood_N : N ;+ blow_V : V ;+ blue_A : A ;+ boat_N : N ;+ bone_N : N ;+ book_N : N ;+ boot_N : N ;+ boss_N : N ;+ boy_N : N ;+ bread_N : N ;+ break_V2 : V2 ;+ breast_N : N ;+ breathe_V : V ;+ broad_A : A ;+ brother_N2 : N2 ;+ brown_A : A ;+ burn_V : V ;+ butter_N : N ;+ buy_V2 : V2 ;+ camera_N : N ;+ cap_N : N ;+ car_N : N ;+ carpet_N : N ;+ cat_N : N ;+ ceiling_N : N ;+ chair_N : N ;+ cheese_N : N ;+ child_N : N ;+ church_N : N ;+ city_N : N ;+ clean_A : A ;+ clever_A : A ;+ close_V2 : V2 ;+ cloud_N : N ;+ coat_N : N ;+ cold_A : A ;+ come_V : V ;+ computer_N : N ;+ correct_A : A ;+ country_N : N ;+ count_V2 : V2 ;+ cousin_N : N ;+ cow_N : N ;+ cut_V2 : V2 ;+ day_N : N ;+ die_V : V ;+ dig_V : V ;+ dirty_A : A ;+ distance_N3 : N3 ;+ doctor_N : N ;+ dog_N : N ;+ door_N : N ;+ do_V2 : V2 ;+ drink_V2 : V2 ;+ dry_A : A ;+ dull_A : A ;+ dust_N : N ;+ ear_N : N ;+ earth_N : N ;+ easy_A2V : A2 ;+ eat_V2 : V2 ;+ egg_N : N ;+ empty_A : A ;+ enemy_N : N ;+ eye_N : N ;+ factory_N : N ;+ fall_V : V ;+ far_Adv : Adv ;+ father_N2 : N2 ;+ fat_N : N ;+ fear_VS : VS ;+ fear_V2 : V2 ;+ feather_N : N ;+ fight_V2 : V2 ;+ find_V2 : V2 ;+ fingernail_N : N ;+ fire_N : N ;+ fish_N : N ;+ float_V : V ;+ floor_N : N ;+ flower_N : N ;+ flow_V : V ;+ fly_V : V ;+ fog_N : N ;+ foot_N : N ;+ forest_N : N ;+ forget_V2 : V2 ;+ freeze_V : V ;+ fridge_N : N ;+ friend_N : N ;+ fruit_N : N ;+ full_A : A ;+ fun_AV : A ;+ garden_N : N ;+ girl_N : N ;+ give_V3 : V3 ;+ glove_N : N ;+ gold_N : N ;+ good_A : A ;+ go_V : V ;+ grammar_N : N ;+ grass_N : N ;+ green_A : A ;+ guts_N : N ;+ hair_N : N ;+ hand_N : N ;+ harbour_N : N ;+ hate_V2 : V2 ;+ hat_N : N ;+ head_N : N ;+ heart_N : N ;+ hear_V2 : V2 ;+ heavy_A : A ;+ hill_N : N ;+ hit_V2 : V2 ;+ hold_V2 : V2 ;+ hope_VS : VS ;+ horn_N : N ;+ horse_N : N ;+ hot_A : A ;+ house_N : N ;+ hunt_V2 : V2 ;+ husband_N : N ;+ ice_N : N ;+ important_A : A ;+ industry_N : N ;+ iron_N : N ;+ john_PN : PN ;+ jump_V : V ;+ kill_V2 : V2 ;+ king_N : N ;+ knee_N : N ;+ know_V2 : V2 ;+ know_VQ : VQ ;+ know_VS : VS ;+ lake_N : N ;+ lamp_N : N ;+ language_N : N ;+ laugh_V : V ;+ leaf_N : N ;+ learn_V2 : V2 ;+ leather_N : N ;+ leave_V2 : V2 ;+ left_Ord : Ord ;+ leg_N : N ;+ lie_V : V ;+ like_V2 : V2 ;+ listen_V2 : V2 ;+ liver_N : N ;+ live_V : V ;+ long_A : A ;+ lose_V2 : V2 ;+ louse_N : N ;+ love_N : N ;+ love_V2 : V2 ;+ man_N : N ;+ married_A2 : A2 ;+ meat_N : N ;+ milk_N : N ;+ moon_N : N ;+ mother_N2 : N2 ;+ mountain_N : N ;+ mouth_N : N ;+ music_N : N ;+ name_N : N ;+ narrow_A : A ;+ near_A : A ;+ neck_N : N ;+ new_A : A ;+ newspaper_N : N ;+ night_N : N ;+ nose_N : N ;+ now_Adv : Adv ;+ number_N : N ;+ oil_N : N ;+ old_A : A ;+ open_V2 : V2 ;+ paint_V2A : V2A ;+ paper_N : N ;+ paris_PN : PN ;+ peace_N : N ;+ pen_N : N ;+ person_N : N ;+ planet_N : N ;+ plastic_N : N ;+ play_V2 : V2 ;+ play_V : V ;+ policeman_N : N ;+ priest_N : N ;+ probable_AS : A ;+ pull_V2 : V2 ;+ push_V2 : V2 ;+ put_V2 : V2 ;+ queen_N : N ;+ question_N : N ;+ radio_N : N ;+ rain_N : N ;+ rain_V0 : V ;+ read_V2 : V2 ;+ ready_A : A ;+ reason_N : N ;+ red_A : A ;+ religion_N : N ;+ restaurant_N : N ;+ right_Ord : Ord ;+ river_N : N ;+ road_N : N ;+ rock_N : N ;+ roof_N : N ;+ root_N : N ;+ rope_N : N ;+ rotten_A : A ;+ round_A : A ;+ rubber_N : N ;+ rub_V2 : V2 ;+ rule_N : N ;+ run_V : V ;+ salt_N : N ;+ sand_N : N ;+ say_VS : VS ;+ school_N : N ;+ science_N : N ;+ scratch_V2 : V2 ;+ sea_N : N ;+ seed_N : N ;+ seek_V2 : V2 ;+ see_V2 : V2 ;+ sell_V3 : V3 ;+ send_V3 : V3 ;+ sew_V : V ;+ sharp_A : A ;+ sheep_N : N ;+ ship_N : N ;+ shirt_N : N ;+ shoe_N : N ;+ shop_N : N ;+ short_A : A ;+ silver_N : N ;+ sing_V : V ;+ sister_N : N ;+ sit_V : V ;+ skin_N : N ;+ sky_N : N ;+ sleep_V : V ;+ small_A : A ;+ smell_V : V ;+ smoke_N : N ;+ smooth_A : A ;+ snake_N : N ;+ snow_N : N ;+ sock_N : N ;+ song_N : N ;+ speak_V2 : V2 ;+ spit_V : V ;+ split_V2 : V2 ;+ squeeze_V2 : V2 ;+ stab_V2 : V2 ;+ stand_V : V ;+ star_N : N ;+ steel_N : N ;+ stick_N : N ;+ stone_N : N ;+ stop_V : V ;+ stove_N : N ;+ straight_A : A ;+ student_N : N ;+ stupid_A : A ;+ suck_V2 : V2 ;+ sun_N : N ;+ swell_V : V ;+ swim_V : V ;+ switch8off_V2 : V2 ;+ switch8on_V2 : V2 ;+ table_N : N ;+ tail_N : N ;+ talk_V3 : V3 ;+ teacher_N : N ;+ teach_V2 : V2 ;+ television_N : N ;+ thick_A : A ;+ thin_A : A ;+ think_V : V ;+ throw_V2 : V2 ;+ tie_V2 : V2 ;+ today_Adv : Adv ;+ tongue_N : N ;+ tooth_N : N ;+ train_N : N ;+ travel_V : V ;+ tree_N : N ;+ turn_V : V ;+ ugly_A : A ;+ uncertain_A : A ;+ understand_V2 : V2 ;+ university_N : N ;+ village_N : N ;+ vomit_V : V ;+ wait_V2 : V2 ;+ walk_V : V ;+ warm_A : A ;+ war_N : N ;+ wash_V2 : V2 ;+ watch_V2 : V2 ;+ water_N : N ;+ wet_A : A ;+ white_A : A ;+ wide_A : A ;+ wife_N : N ;+ wind_N : N ;+ window_N : N ;+ wine_N : N ;+ wing_N : N ;+ win_V2 : V2 ;+ wipe_V2 : V2 ;+ woman_N : N ;+ wonder_VQ : VQ ;+ wood_N : N ;+ worm_N : N ;+ write_V2 : V2 ;+ year_N : N ;+ yellow_A : A ;+ young_A : A ;+ + }+</pre>++</body>+</html>
@@ -0,0 +1,156 @@+<html>+<body>+<i> Produced by +gfdoc - a rudimentary GF document generator.+(c) Aarne Ranta (aarne@cs.chalmers.se) 2002 under GNU GPL.+ </i>+<p>+<h1> Noun: Nouns, noun phrases, and determiners</h1>++<pre>+ abstract Noun = Cat ** {+</pre>++<h2> Noun phrases</h2>+The three main types of noun phrases are+- common nouns with determiners+- proper names+- pronouns+<p>+<p>+<pre>+ fun+ DetCN : Det -> CN -> NP ; -- the man+ UsePN : PN -> NP ; -- John+ UsePron : Pron -> NP ; -- he+</pre>++Pronouns are defined in the module [``Structural`` Structural.html].+A noun phrase already formed can be modified by a <tt>Predet</tt>erminer.+<pre>+ PredetNP : Predet -> NP -> NP; -- only the man +</pre>++A noun phrase can also be postmodified by the past participle of a+verb, by an adverb, or by a relative clause+<pre>+ PPartNP : NP -> V2 -> NP ; -- the man seen+ AdvNP : NP -> Adv -> NP ; -- Paris today+ RelNP : NP -> RS -> NP ; -- Paris, which is here+</pre>++Determiners can form noun phrases directly.+<pre>+ DetNP : Det -> NP ; -- these five+</pre>++<h2> Determiners</h2>+The determiner has a fine-grained structure, in which a 'nucleus'+quantifier and an optional numeral can be discerned.+<pre>+ DetQuant : Quant -> Num -> Det ; -- these five+ DetQuantOrd : Quant -> Num -> Ord -> Det ; -- these five best+</pre>++Whether the resulting determiner is singular or plural depends on the+cardinal.+All parts of the determiner can be empty, except <tt>Quant</tt>, which is+the <i>kernel</i> of a determiner. It is, however, the <tt>Num</tt> that determines+the inherent number.+<pre>+ NumSg : Num ;+ NumPl : Num ;+ NumCard : Card -> Num ;+</pre>++<tt>Card</tt> consists of either digits or numeral words.+<pre>+ data+ NumDigits : Digits -> Card ; -- 51+ NumNumeral : Numeral -> Card ; -- fifty-one+</pre>++The construction of numerals is defined in [Numeral Numeral.html].+A <tt>Card</tt> can be modified by certain adverbs.+<pre>+ fun+ AdNum : AdN -> Card -> Card ; -- almost 51+</pre>++An <tt>Ord</tt> consists of either digits or numeral words.+Also superlative forms of adjectives behave syntactically like ordinals.+<pre>+ OrdDigits : Digits -> Ord ; -- 51st+ OrdNumeral : Numeral -> Ord ; -- fifty-first+ OrdSuperl : A -> Ord ; -- warmest+</pre>++Definite and indefinite noun phrases are sometimes realized as+neatly distinct words (Spanish <i>un, unos ; el, los</i>) but also without+any particular word (Finnish; Swedish definites).+<pre>+ IndefArt : Quant ;+ DefArt : Quant ;+</pre>++Nouns can be used without an article as mass nouns. The resource does+not distinguish mass nouns from other common nouns, which can result+in semantically odd expressions.+<pre>+ MassNP : CN -> NP ; -- (beer)+</pre>++Pronouns have possessive forms. Genitives of other kinds+of noun phrases are not given here, since they are not possible+in e.g. Romance languages. They can be found in <tt>Extra</tt> modules.+<pre>+ PossPron : Pron -> Quant ; -- my (house)+</pre>++Other determiners are defined in [Structural Structural.html].+<h2> Common nouns</h2>+Simple nouns can be used as nouns outright.+<pre>+ UseN : N -> CN ; -- house+</pre>++Relational nouns take one or two arguments.+<pre>+ ComplN2 : N2 -> NP -> CN ; -- mother of the king+ ComplN3 : N3 -> NP -> N2 ; -- distance from this city (to Paris)+</pre>++Relational nouns can also be used without their arguments.+The semantics is typically derivative of the relational meaning.+<pre>+ UseN2 : N2 -> CN ; -- mother+ Use2N3 : N3 -> N2 ; -- distance (from this city)+ Use3N3 : N3 -> N2 ; -- distance (to Paris)+</pre>++Nouns can be modified by adjectives, relative clauses, and adverbs+(the last rule will give rise to many 'PP attachment' ambiguities+when used in connection with verb phrases).+<pre>+ AdjCN : AP -> CN -> CN ; -- big house+ RelCN : CN -> RS -> CN ; -- house that John bought+ AdvCN : CN -> Adv -> CN ; -- house on the hill+</pre>++Nouns can also be modified by embedded sentences and questions.+For some nouns this makes little sense, but we leave this for applications+to decide. Sentential complements are defined in [Verb Verb.html].+<pre>+ SentCN : CN -> SC -> CN ; -- question where she sleeps+</pre>++<h2> Apposition</h2>+This is certainly overgenerating.+<pre>+ ApposCN : CN -> NP -> CN ; -- city Paris (, numbers x and y)+ + }+</pre>++</body>+</html>
@@ -0,0 +1,72 @@+<html>+<body>+<i> Produced by +gfdoc - a rudimentary GF document generator.+(c) Aarne Ranta (aarne@cs.chalmers.se) 2002 under GNU GPL.+ </i>+<p>+<h1> Numerals</h1>++This grammar defines numerals from 1 to 999999. +The implementations are adapted from the+[numerals library http://www.cs.chalmers.se/~aarne/GF/examples/numerals/] +which defines numerals for 88 languages.+The resource grammar implementations add to this inflection (if needed)+and ordinal numbers.+<p>+<b>Note</b> 1. Number 1 as defined +in the category <tt>Numeral</tt> here should not be used in the formation of+noun phrases, and should therefore be removed. Instead, one should use+[Structural Structural.html]<tt>.one_Quant</tt>. This makes the grammar simpler+because we can assume that numbers form plural noun phrases.+<p>+<b>Note</b> 2. The implementations introduce spaces between+parts of a numeral, which is often incorrect - more work on+(un)lexing is needed to solve this problem.+<pre>+ abstract Numeral = Cat [Numeral,Digits] ** {+ + cat + Digit ; -- 2..9+ Sub10 ; -- 1..9+ Sub100 ; -- 1..99+ Sub1000 ; -- 1..999+ Sub1000000 ; -- 1..999999+ + data + num : Sub1000000 -> Numeral ;+ + n2, n3, n4, n5, n6, n7, n8, n9 : Digit ;+ + pot01 : Sub10 ; -- 1+ pot0 : Digit -> Sub10 ; -- d * 1+ pot110 : Sub100 ; -- 10+ pot111 : Sub100 ; -- 11+ pot1to19 : Digit -> Sub100 ; -- 10 + d+ pot0as1 : Sub10 -> Sub100 ; -- coercion of 1..9+ pot1 : Digit -> Sub100 ; -- d * 10+ pot1plus : Digit -> Sub10 -> Sub100 ; -- d * 10 + n+ pot1as2 : Sub100 -> Sub1000 ; -- coercion of 1..99+ pot2 : Sub10 -> Sub1000 ; -- m * 100+ pot2plus : Sub10 -> Sub100 -> Sub1000 ; -- m * 100 + n+ pot2as3 : Sub1000 -> Sub1000000 ; -- coercion of 1..999+ pot3 : Sub1000 -> Sub1000000 ; -- m * 1000+ pot3plus : Sub1000 -> Sub1000 -> Sub1000000 ; -- m * 1000 + n+</pre>++Numerals as sequences of digits have a separate, simpler grammar+<pre>+ cat + Dig ; -- single digit 0..9+ + data+ IDig : Dig -> Digits ; -- 8+ IIDig : Dig -> Digits -> Digits ; -- 876+ + D_0, D_1, D_2, D_3, D_4, D_5, D_6, D_7, D_8, D_9 : Dig ;+ + }+</pre>++</body>+</html>
@@ -0,0 +1,65 @@+<html>+<body>+<i> Produced by +gfdoc - a rudimentary GF document generator.+(c) Aarne Ranta (aarne@cs.chalmers.se) 2002 under GNU GPL.+ </i>+<p>+<h1> Phrase: Phrases and Utterances</h1>++<pre>+ abstract Phrase = Cat ** {+</pre>++When a phrase is built from an utterance it can be prefixed+with a phrasal conjunction (such as <i>but</i>, <i>therefore</i>)+and suffixing with a vocative (typically a noun phrase).+<pre>+ fun+ PhrUtt : PConj -> Utt -> Voc -> Phr ; -- but come here, my friend+</pre>++Utterances are formed from sentences, questions, and imperatives.+<pre>+ UttS : S -> Utt ; -- John walks+ UttQS : QS -> Utt ; -- is it good+ UttImpSg : Pol -> Imp -> Utt; -- (don't) love yourself+ UttImpPl : Pol -> Imp -> Utt; -- (don't) love yourselves+ UttImpPol : Pol -> Imp -> Utt ; -- (don't) sleep (polite)+</pre>++There are also 'one-word utterances'. A typical use of them is+as answers to questions.+<b>Note</b>. This list is incomplete. More categories could be covered.+Moreover, in many languages e.g. noun phrases in different cases+can be used.+<pre>+ UttIP : IP -> Utt ; -- who+ UttIAdv : IAdv -> Utt ; -- why+ UttNP : NP -> Utt ; -- this man+ UttAdv : Adv -> Utt ; -- here+ UttVP : VP -> Utt ; -- to sleep+ UttCN : CN -> Utt ; -- house+ UttCard : Card -> Utt ; -- five+ UttAP : AP -> Utt ; -- fine+ UttInterj : Interj -> Utt ; -- alas+</pre>++The phrasal conjunction is optional. A sentence conjunction+can also be used to prefix an utterance.+<pre>+ NoPConj : PConj ; + PConjConj : Conj -> PConj ; -- and+</pre>++The vocative is optional. Any noun phrase can be made into vocative,+which may be overgenerating (e.g. <i>I</i>).+<pre>+ NoVoc : Voc ;+ VocNP : NP -> Voc ; -- my friend+ + }+</pre>++</body>+</html>
@@ -0,0 +1,74 @@+<html>+<body>+<i> Produced by +gfdoc - a rudimentary GF document generator.+(c) Aarne Ranta (aarne@cs.chalmers.se) 2002 under GNU GPL.+ </i>+<p>+<h1> Question: Questions and Interrogative Pronouns</h1>++<pre>+ abstract Question = Cat ** {+</pre>++A question can be formed from a clause ('yes-no question') or+with an interrogative.+<pre>+ fun+ QuestCl : Cl -> QCl ; -- does John walk+ QuestVP : IP -> VP -> QCl ; -- who walks+ QuestSlash : IP -> ClSlash -> QCl ; -- whom does John love+ QuestIAdv : IAdv -> Cl -> QCl ; -- why does John walk+ QuestIComp : IComp -> NP -> QCl ; -- where is John+</pre>++Interrogative pronouns can be formed with interrogative+determiners, with or without a noun.+<pre>+ IdetCN : IDet -> CN -> IP ; -- which five songs+ IdetIP : IDet -> IP ; -- which five+</pre>++They can be modified with adverbs.+<pre>+ AdvIP : IP -> Adv -> IP ; -- who in Paris+</pre>++Interrogative quantifiers have number forms and can take number modifiers.+<pre>+ IdetQuant : IQuant -> Num -> IDet ; -- which (five)+</pre>++Interrogative adverbs can be formed prepositionally.+<pre>+ PrepIP : Prep -> IP -> IAdv ; -- with whom+</pre>++They can be modified with other adverbs.+<pre>+ AdvIAdv : IAdv -> Adv -> IAdv ; -- where in Paris+</pre>++Interrogative complements to copulas can be both adverbs and+pronouns.+<pre>+ CompIAdv : IAdv -> IComp ; -- where (is it)+ CompIP : IP -> IComp ; -- who (is it)+</pre>++More <tt>IP</tt>, <tt>IDet</tt>, and <tt>IAdv</tt> are defined in <tt>Structural</tt>.+Wh questions with two or more question words require a new, special category.+<pre>+ cat + QVP ; -- buy what where+ fun+ ComplSlashIP : VPSlash -> IP -> QVP ; -- buys what + AdvQVP : VP -> IAdv -> QVP ; -- lives where + AddAdvQVP : QVP -> IAdv -> QVP ; -- buys what where + + QuestQVP : IP -> QVP -> QCl ; -- who buys what where+ }+</pre>++</body>+</html>
@@ -0,0 +1,40 @@+<html>+<body>+<i> Produced by +gfdoc - a rudimentary GF document generator.+(c) Aarne Ranta (aarne@cs.chalmers.se) 2002 under GNU GPL.+ </i>+<p>+<h1> Relative clauses and pronouns</h1>++<pre>+ abstract Relative = Cat ** {+ + fun+</pre>++The simplest way to form a relative clause is from a clause by+a pronoun similar to <i>such that</i>.+<pre>+ RelCl : Cl -> RCl ; -- such that John loves her+</pre>++The more proper ways are from a verb phrase +(formed in [``Verb`` Verb.html]) or a sentence +with a missing noun phrase (formed in [``Sentence`` Sentence.html]).+<pre>+ RelVP : RP -> VP -> RCl ; -- who loves John+ RelSlash : RP -> ClSlash -> RCl ; -- whom John loves+</pre>++Relative pronouns are formed from an 'identity element' by prefixing+or suffixing (depending on language) prepositional phrases or genitives.+<pre>+ IdRP : RP ; -- which+ FunRP : Prep -> NP -> RP -> RP ; -- the mother of whom+ + }+</pre>++</body>+</html>
@@ -0,0 +1,100 @@+<html>+<body>+<i> Produced by +gfdoc - a rudimentary GF document generator.+(c) Aarne Ranta (aarne@cs.chalmers.se) 2002 under GNU GPL.+ </i>+<p>+<h1> Sentence: Sentences, Clauses, and Imperatives</h1>++<pre>+ abstract Sentence = Cat ** {+</pre>++<h2> Clauses</h2>+The <tt>NP VP</tt> predication rule form a clause whose linearization+gives a table of all tense variants, positive and negative.+Clauses are converted to <tt>S</tt> (with fixed tense) with the+<tt>UseCl</tt> function below.+<pre>+ data+ PredVP : NP -> VP -> Cl ; -- John walks+</pre>++Using an embedded sentence as a subject is treated separately.+This can be overgenerating. E.g. <i>whether you go</i> as subject+is only meaningful for some verb phrases.+<pre>+ PredSCVP : SC -> VP -> Cl ; -- that she goes is good+</pre>++<h2> Clauses missing object noun phrases</h2>+This category is a variant of the 'slash category' <tt>S/NP</tt> of+GPSG and categorial grammars, which in turn replaces+movement transformations in the formation of questions+and relative clauses. Except <tt>SlashV2</tt>, the construction +rules can be seen as special cases of function composition, in+the style of CCG.+<b>Note</b> the set is not complete and lacks e.g. verbs with more than 2 places.+<pre>+ SlashVP : NP -> VPSlash -> ClSlash ; -- (whom) he sees+ AdvSlash : ClSlash -> Adv -> ClSlash ; -- (whom) he sees today+ SlashPrep : Cl -> Prep -> ClSlash ; -- (with whom) he walks + SlashVS : NP -> VS -> SSlash -> ClSlash ; -- (whom) she says that he loves+</pre>++<h2> Imperatives</h2>+An imperative is straightforwardly formed from a verb phrase.+It has variation over positive and negative, singular and plural.+To fix these parameters, see [Phrase Phrase.html].+<pre>+ ImpVP : VP -> Imp ; -- love yourselves+</pre>++<h2> Embedded sentences</h2>+Sentences, questions, and infinitival phrases can be used as+subjects and (adverbial) complements.+<pre>+ EmbedS : S -> SC ; -- that she goes+ EmbedQS : QS -> SC ; -- who goes+ EmbedVP : VP -> SC ; -- to go+</pre>++<h2> Sentences</h2>+These are the 2 x 4 x 4 = 16 forms generated by different+combinations of tense, polarity, and+anteriority, which are defined in [``Common`` Common.html].+<pre>+ fun+ UseCl : Temp -> Pol -> Cl -> S ;+ UseQCl : Temp -> Pol -> QCl -> QS ;+ UseRCl : Temp -> Pol -> RCl -> RS ;+ UseSlash : Temp -> Pol -> ClSlash -> SSlash ;+</pre>++An adverb can be added to the beginning of a sentence, either with comma (<i>externally</i>)+or without:+<pre>+ AdvS : Adv -> S -> S ; -- then I will go home+ ExtAdvS : Adv -> S -> S ; -- next week, I will go home+</pre>++This covers subjunctive clauses, but they can also be added to the end.+<pre>+ SSubjS : S -> Subj -> S -> S ; -- I go home if she comes+</pre>++A sentence can be modified by a relative clause referring to its contents.+<pre>+ RelS : S -> RS -> S ; -- she sleeps, which is good+</pre>++-- A sentence can also be post-modified by a subjunct sentence.+-- ModSubjS : S -> Subj -> S -> S ; -- she sleeps, because she is old +-- cf. Adverb.SubjS+<pre>+ }+</pre>++</body>+</html>
@@ -0,0 +1,159 @@+<html>+<body>+<i> Produced by +gfdoc - a rudimentary GF document generator.+(c) Aarne Ranta (aarne@cs.chalmers.se) 2002 under GNU GPL.+ </i>+<p>+<h1> Structural: Structural Words</h1>+++Here we have some words belonging to closed classes and appearing+in all languages we have considered.+Sometimes more distinctions are needed, e.g. <tt>we_Pron</tt> in Spanish+should be replaced by masculine and feminine variants, found in+[``ExtraSpa`` ../spanish/ExtraSpa.gf].+<pre>+ abstract Structural = Cat ** {+ + fun+</pre>++This is an alphabetical list of structural words+<pre>+ above_Prep : Prep ; + after_Prep : Prep ;+ all_Predet : Predet ;+ almost_AdA : AdA ; + almost_AdN : AdN ; + although_Subj : Subj ;+ always_AdV : AdV ;+ and_Conj : Conj ;+ because_Subj : Subj ;+ before_Prep : Prep ;+ behind_Prep : Prep ;+ between_Prep : Prep ;+ both7and_DConj : Conj ; -- both...and+</pre>++-b both7and_DConj : DConj ;+<pre>+ but_PConj : PConj ;+ by8agent_Prep : Prep ; -- by (agent)+ by8means_Prep : Prep ; -- by (means of)+ can8know_VV : VV ; -- can (capacity)+ can_VV : VV ; -- can (possibility)+ during_Prep : Prep ;+ either7or_DConj : Conj ; -- either...or+</pre>++-b either7or_DConj : DConj ;+<pre>+ every_Det : Det ;+ everybody_NP : NP ; -- everybody+ everything_NP : NP ;+ everywhere_Adv : Adv ;+</pre>++- first_Ord : Ord ; DEPRECATED+<pre>+ few_Det : Det ;+ for_Prep : Prep ;+ from_Prep : Prep ;+ he_Pron : Pron ;+ here_Adv : Adv ;+ here7to_Adv : Adv ; -- to here+ here7from_Adv : Adv ; -- from here+ how_IAdv : IAdv ;+ how8many_IDet : IDet ;+ how8much_IAdv : IAdv ;+ i_Pron : Pron ;+ if_Subj : Subj ;+ in8front_Prep : Prep ; -- in front of+ in_Prep : Prep ;+ it_Pron : Pron ;+ less_CAdv : CAdv ;+ many_Det : Det ;+ more_CAdv : CAdv ;+ most_Predet : Predet ;+ much_Det : Det ;+ must_VV : VV ;+</pre>++-b no_Phr : Phr ;+<pre>+ no_Utt : Utt ;+ on_Prep : Prep ;+</pre>++- one_Quant : QuantSg ; DEPRECATED+<pre>+ only_Predet : Predet ;+ or_Conj : Conj ;+ otherwise_PConj : PConj ;+ part_Prep : Prep ;+ please_Voc : Voc ;+ possess_Prep : Prep ; -- of (possessive)+ quite_Adv : AdA ;+ she_Pron : Pron ;+ so_AdA : AdA ;+ someSg_Det : Det ;+ somePl_Det : Det ;+ somebody_NP : NP ;+ something_NP : NP ;+ somewhere_Adv : Adv ;+ that_Quant : Quant ;+ that_Subj : Subj ;+ there_Adv : Adv ;+ there7to_Adv : Adv ; -- to there+ there7from_Adv : Adv ; -- from there+ therefore_PConj : PConj ;+ they_Pron : Pron ; + this_Quant : Quant ;+ through_Prep : Prep ;+ to_Prep : Prep ;+ too_AdA : AdA ;+ under_Prep : Prep ;+ very_AdA : AdA ;+ want_VV : VV ;+ we_Pron : Pron ;+ whatPl_IP : IP ; -- what (plural)+ whatSg_IP : IP ; -- what (singular)+ when_IAdv : IAdv ;+ when_Subj : Subj ;+ where_IAdv : IAdv ;+ which_IQuant : IQuant ;+ whoPl_IP : IP ; -- who (plural)+ whoSg_IP : IP ; -- who (singular)+ why_IAdv : IAdv ;+ with_Prep : Prep ;+ without_Prep : Prep ;+</pre>++-b yes_Phr : Phr ;+<pre>+ yes_Utt : Utt ;+ youSg_Pron : Pron ; -- you (singular)+ youPl_Pron : Pron ; -- you (plural)+ youPol_Pron : Pron ; -- you (polite)+ + no_Quant : Quant ; + not_Predet : Predet ;+ if_then_Conj : Conj ;+ at_least_AdN : AdN ;+ at_most_AdN : AdN ;+ nobody_NP : NP ;+ nothing_NP : NP ;+ except_Prep : Prep ;+ + as_CAdv : CAdv ;+ + have_V2 : V2 ;+ + fun language_title_Utt : Utt ;+ + }+</pre>++</body>+</html>
@@ -0,0 +1,60 @@+<html>+<body>+<i> Produced by +gfdoc - a rudimentary GF document generator.+(c) Aarne Ranta (aarne@cs.chalmers.se) 2002 under GNU GPL.+ </i>+<p>+<h1> Symbolic expressions</h1>++<b>Note</b>. This module is not automatically included in the main+grammar [Lang Lang.html].+<pre>+ abstract Symbol = Cat, PredefAbs ** {+</pre>++<h2> Noun phrases with symbols and numbers</h2>+<pre>+ fun+ + SymbPN : Symb -> PN ; -- x+ IntPN : Int -> PN ; -- 27+ FloatPN : Float -> PN ; -- 3.14159+ NumPN : Card -> PN ;+ CNNumNP : CN -> Card -> NP ; -- level five ; level 5+ CNSymbNP : Det -> CN -> [Symb] -> NP ; -- (the) (2) numbers x and y+</pre>++<h2> Sentence consisting of a formula</h2>+<pre>+ SymbS : Symb -> S ; -- A+</pre>++<h2> Symbols as numerals</h2>+<pre>+ SymbNum : Symb -> Card ; -- n+ SymbOrd : Symb -> Ord ; -- n'th+</pre>++<h2> Symbol lists</h2>+A symbol list has at least two elements. The last two are separated+by a conjunction (<i>and</i> in English), the others by commas.+This produces <i>x, y and z</i>, in English. +<pre>+ cat+ Symb ;+ [Symb]{2} ;+ + fun+ MkSymb : String -> Symb ;+</pre>++<h2> Obsolescent</h2>+<pre>+ CNIntNP : CN -> Int -> NP ; -- level 53 (covered by CNNumNP)+ + }+</pre>++</body>+</html>
binary file changed (absent → 72890 bytes)
@@ -0,0 +1,32 @@+<html>+<body>+<i> Produced by +gfdoc - a rudimentary GF document generator.+(c) Aarne Ranta (aarne@cs.chalmers.se) 2002 under GNU GPL.+ </i>+<p>+<h1> Common: Structures with Common Implementations.</h1>++This module defines the abstract parameters of tense, polarity, and+anteriority, which are used in [``Phrase`` Phrase.html] to generate different+forms of sentences. Together they give 4 x 2 x 2 = 16 sentence forms.+These tenses are defined for all languages in the library. More tenses+can be defined in the language extensions, e.g. the <i>passe simple</i> of+Romance languages in [``ExtraRomance`` ../romance/ExtraRomance.gf].+<pre>+ abstract Tense = Common ** {+ + fun+ TTAnt : Tense -> Ant -> Temp ;+ + PPos, PNeg : Pol ; -- I sleep/don't sleep+ + TPres : Tense ; + ASimul : Ant ;+ TPast, TFut, TCond : Tense ; -- I slept/will sleep/would sleep --# notpresent+ AAnter : Ant ; -- I have slept --# notpresent+ }+</pre>++</body>+</html>
@@ -0,0 +1,26 @@+<html>+<body>+<i> Produced by +gfdoc - a rudimentary GF document generator.+(c) Aarne Ranta (aarne@cs.chalmers.se) 2002 under GNU GPL.+ </i>+<p>+<h1> Text: Texts</h1>++Texts are built from an empty text by adding <tt>Phr</tt>ases,+using as constructors the punctuation marks <i>.</i>, <i>?</i>, and <i>!</i>.+Any punctuation mark can be attached to any kind of phrase.+<pre>+ abstract Text = Common ** {+ + fun+ TEmpty : Text ; --+ TFullStop : Phr -> Text -> Text ; -- John walks. ...+ TQuestMark : Phr -> Text -> Text ; -- Are they here? ...+ TExclMark : Phr -> Text -> Text ; -- Let's go! ...+ + }+</pre>++</body>+</html>
@@ -0,0 +1,93 @@+<html>+<body>+<i> Produced by +gfdoc - a rudimentary GF document generator.+(c) Aarne Ranta (aarne@cs.chalmers.se) 2002 under GNU GPL.+ </i>+<p>+<h1> The construction of verb phrases</h1>++<pre>+ abstract Verb = Cat ** {+ + flags coding = utf8 ;+</pre>++<h2> Complementization rules</h2>+Verb phrases are constructed from verbs by providing their+complements. There is one rule for each verb category.+<pre>+ data+ UseV : V -> VP ; -- sleep+ + ComplVV : VV -> VP -> VP ; -- want to run+ ComplVS : VS -> S -> VP ; -- say that she runs+ ComplVQ : VQ -> QS -> VP ; -- wonder who runs+ ComplVA : VA -> AP -> VP ; -- they become red+ + SlashV2a : V2 -> VPSlash ; -- love (it)+ Slash2V3 : V3 -> NP -> VPSlash ; -- give it (to her)+ Slash3V3 : V3 -> NP -> VPSlash ; -- give (it) to her+ + SlashV2V : V2V -> VP -> VPSlash ; -- beg (her) to go+ SlashV2S : V2S -> S -> VPSlash ; -- answer (to him) that it is good+ SlashV2Q : V2Q -> QS -> VPSlash ; -- ask (him) who came+ SlashV2A : V2A -> AP -> VPSlash ; -- paint (it) red+ + ComplSlash : VPSlash -> NP -> VP ; -- love it+ + SlashVV : VV -> VPSlash -> VPSlash ; -- want to buy+ SlashV2VNP : V2V -> NP -> VPSlash -> VPSlash ; -- beg me to buy+</pre>++<h2> Other ways of forming verb phrases</h2>+Verb phrases can also be constructed reflexively and from+copula-preceded complements.+<pre>+ ReflVP : VPSlash -> VP ; -- love himself+ UseComp : Comp -> VP ; -- be warm+</pre>++Passivization of two-place verbs is another way to use+them. In many languages, the result is a participle that+is used as complement to a copula (<i>is used</i>), but other+auxiliary verbs are possible (Ger. <i>wird angewendet</i>, It.+<i>viene usato</i>), as well as special verb forms (Fin. <i>käytetään</i>,+Swe. <i>används</i>).+<p>+<b>Note</b>. the rule can be overgenerating, since the <tt>V2</tt> need not+take a direct object.+<pre>+ PassV2 : V2 -> VP ; -- be loved+</pre>++Adverbs can be added to verb phrases. Many languages make+a distinction between adverbs that are attached in the end+vs. next to (or before) the verb.+<pre>+ AdvVP : VP -> Adv -> VP ; -- sleep here+ AdVVP : AdV -> VP -> VP ; -- always sleep+ + AdvVPSlash : VPSlash -> Adv -> VPSlash ; -- use (it) here+ AdVVPSlash : AdV -> VPSlash -> VPSlash ; -- always use (it)+</pre>++<b>Agents of passives</b> are constructed as adverbs with the+preposition [Structural Structural.html]<tt>.8agent_Prep</tt>.+<h2> Complements to copula</h2>+Adjectival phrases, noun phrases, and adverbs can be used.+<pre>+ CompAP : AP -> Comp ; -- (be) small+ CompNP : NP -> Comp ; -- (be) the man+ CompAdv : Adv -> Comp ; -- (be) here+ CompCN : CN -> Comp ; -- (be) a man/men+</pre>++Copula alone+<pre>+ UseCopula : VP ; -- be+ }+</pre>++</body>+</html>
@@ -0,0 +1,183 @@+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">+<HTML>+<HEAD>+<META NAME="generator" CONTENT="http://txt2tags.org">+<TITLE>More modules in the GF Resource Grammar Library</TITLE>+</HEAD><BODY BGCOLOR="white" TEXT="black">+<CENTER>+<H1>More modules in the GF Resource Grammar Library</H1>+</CENTER>++<P>+<A HREF="../synopsis.html">back to synopsis</A>+</P>++<H2>Extra syntax modules</H2>++<P>+These modules give language-specific extra constructs not available via the common API.+</P>+<P>+<A HREF="../../src/abstract/Extra.gf">common repository</A> +<A HREF="../../src/romance/ExtraRomanceAbs.gf">Romance (Cat, Fre, Ita, Spa)</A> +<A HREF="../../src/scandinavian/ExtraScandAbs.gf">Scandinavian (Dan, Nor, Swe)</A> +</P>+<P>+<A HREF="../../src/afrikaans/ExtraAfrAbs.gf">Afrikaans</A> +<A HREF="../../src/bulgarian/ExtraBulAbs.gf">Bulgarian</A> +<A HREF="../../src/catalan/ExtraCatAbs.gf">Catalan</A> +<A HREF="../../src/danish/ExtraDanAbs.gf">Danish</A> +<A HREF="../../src/dutch/ExtraDutAbs.gf">Dutch</A> +<A HREF="../../src/english/ExtraEngAbs.gf">English</A> +<A HREF="../../src/finnish/ExtraFinAbs.gf">Finnish</A> +<A HREF="../../src/french/ExtraFreAbs.gf">French</A> +<A HREF="../../src/german/ExtraGerAbs.gf">German</A> +<A HREF="../../src/italian/ExtraItaAbs.gf">Italian</A> +<A HREF="../../src/norwegian/ExtraNorAbs.gf">Norwegian</A> +<A HREF="../../src/persian/ExtraPesAbs.gf">Persian</A> +<A HREF="../../src/polish/ExtraPolAbs.gf">Polish</A> +<A HREF="../../src/punjabi/ExtraPnbAbs.gf">Punjabi</A> +<A HREF="../../src/romanian/ExtraRonAbs.gf">Romanian</A> +<A HREF="../../src/russian/ExtraRusAbs.gf">Russian</A> +<A HREF="../../src/spanish/ExtraSpaAbs.gf">Spanish</A> +<A HREF="../../src/swedish/ExtraSweAbs.gf">Swedish</A>+</P>++<H2>Irregular verbs and other words</H2>++<P>+These modules give lists of irregular words, mostly verbs. Their completeness varies.+</P>+<P>+<A HREF="../../src/catalan/IrregCatAbs.gf">Catalan</A>+<A HREF="../../src/danish/IrregDanAbs.gf">Danish</A>+<A HREF="../../src/dutch/IrregDutAbs.gf">Dutch</A>+<A HREF="../../src/english/IrregEngAbs.gf">English</A>+<A HREF="../../src/french/IrregFreAbs.gf">French</A>+<A HREF="../../src/german/IrregGerAbs.gf">German</A>+<A HREF="../../src/norwegian/IrregNorAbs.gf">Norwegian</A>+<A HREF="../../src/spanish/IrregSpaAbs.gf">Spanish</A>+<A HREF="../../src/swedish/IrregSweAbs.gf">Swedish</A>+<A HREF="../../src/turkish/IrregTurAbs.gf">Turkish</A>+</P>++<H2>Large-scale dictionaries</H2>++<P>+These morphological dictionaries are extracted from open source lexica by using the resource grammar paradigms. The figures give the approximate number of lemmas.+</P>+<P>+<A HREF="../../src/bulgarian/DictBulAbs.gf">Bulgarian</A> 53k+<A HREF="../../src/english/DictEngAbs.gf">English</A> 43k+<A HREF="../../src/finnish/DictFinAbs.gf">Finnish</A> 42k+<A HREF="../../src/french/DictFreAbs.gf">French</A> 92k+<A HREF="../../src/swedish/DictSweAbs.gf">Swedish</A> 43k+<A HREF="../../src/turkish/DictTurAbs.gf">Turkish</A> 24k+</P>++<H2>Abstract Syntax Modules</H2>++<P>+These modules are for internal use of resource grammarians, but the comments give some more linguistic explanation of the different constructs.+</P>++<TABLE BORDER="1" CELLPADDING="4">+<TR>+<TH>module</TH>+<TH>contents</TH>+</TR>+<TR>+<TD><A HREF="Adjective.html">Adjective</A></TD>+<TD>constructors for A, AP</TD>+</TR>+<TR>+<TD><A HREF="Adverb.html">Adverb</A></TD>+<TD>constructors for Adv, AdV</TD>+</TR>+<TR>+<TD><A HREF="Cat.html">Cat</A></TD>+<TD>lincats of all categories</TD>+</TR>+<TR>+<TD><A HREF="Common.html">Common</A></TD>+<TD>default lincats for string categories</TD>+</TR>+<TR>+<TD><A HREF="Conjunction.html">Conjunction</A></TD>+<TD>coordination rules</TD>+</TR>+<TR>+<TD><A HREF="Extra.html">Extra</A></TD>+<TD>constructs available in some languages only</TD>+</TR>+<TR>+<TD><A HREF="Grammar.html">Grammar</A></TD>+<TD>everything except content lexicon</TD>+</TR>+<TR>+<TD><A HREF="Idiom.html">Idiom</A></TD>+<TD>idiomatic constructions</TD>+</TR>+<TR>+<TD><A HREF="Lang.html">Lang</A></TD>+<TD>everything (Grammar and Lexicon)</TD>+</TR>+<TR>+<TD><A HREF="Lexicon.html">Lexicon</A></TD>+<TD>content word lexicon</TD>+</TR>+<TR>+<TD><A HREF="Noun.html">Noun</A></TD>+<TD>constructors for NP, CN, Det</TD>+</TR>+<TR>+<TD><A HREF="Numeral.html">Numeral</A></TD>+<TD>constructors for Numeral and Digits</TD>+</TR>+<TR>+<TD><A HREF="Phrase.html">Phrase</A></TD>+<TD>constructors for Phr, Utt</TD>+</TR>+<TR>+<TD><A HREF="Question.html">Question</A></TD>+<TD>constructors for QS, QCl, IP</TD>+</TR>+<TR>+<TD><A HREF="Relative.html">Relative</A></TD>+<TD>constructors for RS, RCl, RP</TD>+</TR>+<TR>+<TD><A HREF="Sentence.html">Sentence</A></TD>+<TD>constructors for S, Cl, SC</TD>+</TR>+<TR>+<TD><A HREF="Structural.html">Structural</A></TD>+<TD>structural word lexicon</TD>+</TR>+<TR>+<TD><A HREF="Symbol.html">Symbol</A></TD>+<TD>mixtures of verbal and symbolic expressions</TD>+</TR>+<TR>+<TD><A HREF="Tense.html">Tense</A></TD>+<TD>common API tense system</TD>+</TR>+<TR>+<TD><A HREF="Text.html">Text</A></TD>+<TD>constructors for Tex</TD>+</TR>+<TR>+<TD><A HREF="Verb.html">Verb</A></TD>+<TD>constructors for VP, VPSlash, Comp</TD>+</TR>+</TABLE>++<H2>The Module Dependency Tree</H2>++<P>+<IMG ALIGN="middle" SRC="Syntax.png" BORDER="0" ALT="">+</P>++<!-- html code generated by txt2tags 2.6 (http://txt2tags.org) -->+<!-- cmdline: txt2tags -thtml sources.txt -->+</BODY></HTML>
@@ -0,0 +1,100 @@+More modules in the GF Resource Grammar Library+++++[back to synopsis ../synopsis.html]++==Extra syntax modules==++These modules give language-specific extra constructs not available via the common API.++[common repository ../../src/abstract/Extra.gf] +[Romance (Cat, Fre, Ita, Spa) ../../src/romance/ExtraRomanceAbs.gf] +[Scandinavian (Dan, Nor, Swe) ../../src/scandinavian/ExtraScandAbs.gf] ++[Afrikaans ../../src/afrikaans/ExtraAfrAbs.gf] +[Bulgarian ../../src/bulgarian/ExtraBulAbs.gf] +[Catalan ../../src/catalan/ExtraCatAbs.gf] +[Danish ../../src/danish/ExtraDanAbs.gf] +[Dutch ../../src/dutch/ExtraDutAbs.gf] +[English ../../src/english/ExtraEngAbs.gf] +[Finnish ../../src/finnish/ExtraFinAbs.gf] +[French ../../src/french/ExtraFreAbs.gf] +[German ../../src/german/ExtraGerAbs.gf] +[Italian ../../src/italian/ExtraItaAbs.gf] +[Norwegian ../../src/norwegian/ExtraNorAbs.gf] +[Persian ../../src/persian/ExtraPesAbs.gf] +[Polish ../../src/polish/ExtraPolAbs.gf] +[Punjabi ../../src/punjabi/ExtraPnbAbs.gf] +[Romanian ../../src/romanian/ExtraRonAbs.gf] +[Russian ../../src/russian/ExtraRusAbs.gf] +[Spanish ../../src/spanish/ExtraSpaAbs.gf] +[Swedish ../../src/swedish/ExtraSweAbs.gf]+++==Irregular verbs and other words==++These modules give lists of irregular words, mostly verbs. Their completeness varies.++[Catalan ../../src/catalan/IrregCatAbs.gf]+[Danish ../../src/danish/IrregDanAbs.gf]+[Dutch ../../src/dutch/IrregDutAbs.gf]+[English ../../src/english/IrregEngAbs.gf]+[French ../../src/french/IrregFreAbs.gf]+[German ../../src/german/IrregGerAbs.gf]+[Norwegian ../../src/norwegian/IrregNorAbs.gf]+[Spanish ../../src/spanish/IrregSpaAbs.gf]+[Swedish ../../src/swedish/IrregSweAbs.gf]+[Turkish ../../src/turkish/IrregTurAbs.gf]+++==Large-scale dictionaries==++These morphological dictionaries are extracted from open source lexica by using the resource grammar paradigms. The figures give the approximate number of lemmas.++[Bulgarian ../../src/bulgarian/DictBulAbs.gf] 53k+[English ../../src/english/DictEngAbs.gf] 43k+[Finnish ../../src/finnish/DictFinAbs.gf] 42k+[French ../../src/french/DictFreAbs.gf] 92k+[Swedish ../../src/swedish/DictSweAbs.gf] 43k+[Turkish ../../src/turkish/DictTurAbs.gf] 24k++++==Abstract Syntax Modules==++These modules are for internal use of resource grammarians, but the comments give some more linguistic explanation of the different constructs.++|| module | contents |+| [Adjective Adjective.html] | constructors for A, AP+| [Adverb Adverb.html] | constructors for Adv, AdV+| [Cat Cat.html] | lincats of all categories+| [Common Common.html] | default lincats for string categories+| [Conjunction Conjunction.html] | coordination rules+| [Extra Extra.html] | constructs available in some languages only+| [Grammar Grammar.html] | everything except content lexicon+| [Idiom Idiom.html] | idiomatic constructions+| [Lang Lang.html] | everything (Grammar and Lexicon)+| [Lexicon Lexicon.html] | content word lexicon+| [Noun Noun.html] | constructors for NP, CN, Det+| [Numeral Numeral.html] | constructors for Numeral and Digits+| [Phrase Phrase.html] | constructors for Phr, Utt+| [Question Question.html] | constructors for QS, QCl, IP+| [Relative Relative.html] | constructors for RS, RCl, RP+| [Sentence Sentence.html] | constructors for S, Cl, SC+| [Structural Structural.html] | structural word lexicon+| [Symbol Symbol.html] | mixtures of verbal and symbolic expressions+| [Tense Tense.html] | common API tense system+| [Text Text.html] | constructors for Tex+| [Verb Verb.html] | constructors for VP, VPSlash, Comp+++==The Module Dependency Tree==++[Syntax.png]+++++
@@ -7,7 +7,7 @@ <CENTER> <H1>The Status of the GF Resource Grammar Library</H1> <FONT SIZE="4"><I>Aarne Ranta</I></FONT><BR>-<FONT SIZE="4">20110814</FONT>+<FONT SIZE="4">20120224</FONT> </CENTER> <P>@@ -38,10 +38,10 @@ <TD>Afr</TD> <TD>+</TD> <TD>-</TD>-<TD>-</TD>-<TD>-</TD>-<TD>-</TD>-<TD>-</TD>+<TD>++</TD>+<TD>+</TD>+<TD>+</TD>+<TD>+</TD> <TD>-</TD> <TD>-</TD> <TD>-</TD>@@ -139,6 +139,19 @@ <TD>*AR,BB</TD> </TR> <TR>+<TD>Est</TD>+<TD>-</TD>+<TD>-</TD>+<TD>-</TD>+<TD>-</TD>+<TD>-</TD>+<TD>-</TD>+<TD>-</TD>+<TD>-</TD>+<TD>-</TD>+<TD>*KK,IL</TD>+</TR>+<TR> <TD>Fin</TD> <TD>+</TD> <TD>+</TD>@@ -204,6 +217,19 @@ <TD>*SV,*KP,MH,AR</TD> </TR> <TR>+<TD>Jap</TD>+<TD>-</TD>+<TD>-</TD>+<TD>-</TD>+<TD>-</TD>+<TD>-</TD>+<TD>-</TD>+<TD>-</TD>+<TD>-</TD>+<TD>-</TD>+<TD>*LZ</TD>+</TR>+<TR> <TD>Ina</TD> <TD>+</TD> <TD>+</TD>@@ -246,14 +272,27 @@ <TD>Lav</TD> <TD>+</TD> <TD>-</TD>+<TD>++</TD>+<TD>+</TD>+<TD>+</TD>+<TD>+</TD> <TD>-</TD> <TD>-</TD> <TD>-</TD>+<TD>*NG,*PP</TD>+</TR>+<TR>+<TD>Mlt</TD>+<TD>+</TD> <TD>-</TD> <TD>-</TD> <TD>-</TD> <TD>-</TD>-<TD>*NG</TD>+<TD>-</TD>+<TD>-</TD>+<TD>-</TD>+<TD>-</TD>+<TD>*JC</TD> </TR> <TR> <TD>Mon</TD>@@ -357,9 +396,22 @@ <TD>-</TD> <TD>-</TD> <TD>-</TD>-<TD>JK</TD>+<TD>JK,*NF</TD> </TR> <TR>+<TD>Snd</TD>+<TD>+</TD>+<TD>+</TD>+<TD>++</TD>+<TD>+</TD>+<TD>+</TD>+<TD>+</TD>+<TD>+</TD>+<TD>-</TD>+<TD>-</TD>+<TD>*SV,*JD</TD>+</TR>+<TR> <TD>Spa</TD> <TD>+</TD> <TD>+</TD>@@ -383,7 +435,7 @@ <TD>-</TD> <TD>-</TD> <TD>-</TD>-<TD>*WN, JM</TD>+<TD>*WN,JM</TD> </TR> <TR> <TD>Swe</TD>@@ -396,20 +448,20 @@ <TD>+</TD> <TD>+</TD> <TD>+</TD>-<TD>*AR,MF</TD>+<TD>*MA,*AR,MF</TD> </TR> <TR> <TD>Tha</TD> <TD>+</TD> <TD>-</TD>-<TD>-</TD>-<TD>-</TD>-<TD>-</TD>-<TD>-</TD>-<TD>-</TD>+<TD>++</TD>+<TD>+</TD>+<TD>+</TD>+<TD>+</TD>+<TD>+</TD> <TD>-</TD> <TD>-</TD>-<TD>*AR</TD>+<TD>*AR,CK</TD> </TR> <TR> <TD>Tsn</TD>@@ -456,7 +508,7 @@ Lang = 3-letter ISO language code, used in library file names </P> <P>-Darcs = available in the darcs repository of <A HREF="http://code.haskell.org/gf">http://code.haskell.org/gf</A>+Darcs = available in the darcs repository of <S><A HREF="http://code.haskell.org/gf">http://code.haskell.org/gf</A></S> <A HREF="http://www.grammaticalframework.org/">http://www.grammaticalframework.org/</A> </P> <P> Mini = minimal resource, compiles with <CODE>make minimal</CODE>@@ -495,6 +547,7 @@ AR Aarne Ranta, AS Adam Slaski, BB Björn Bringert,+CK Chotiros Kairoje, DD Dana Dannélls, DS Dinesh Simk, EA Elnaz Abolahrar,@@ -505,19 +558,26 @@ IL Inari Listenmaa, IN Ilona Novak, JB Jean-Philippe Bernardy,+JC John J. Camilleri,+JD Jherna Devi, JK Janna Khegai,+JM Juliet Mutahi, JS Jordi Saludes, KA Krasimir Angelov,+KK Kaarel Kaljurand, KP Kuchi Prasad,-JM Juliet Mutahi, LPj Laurette Pretorius Jr, LPs Laurette Pretorius Sr,+LZ Liza Zimina,+MA Malin Ahlberg, MF Markus Forsberg, MK Markos Kassa Gobena, MH Muhammad Humayoun, NE Nyamsuren Erdenebadrakh,+NF Nick Frolov, NG Normunds Gruzitis, RE Ramona Enache,+PP Peteris Paikens, SC Server Cimen, SM Sofy Moradi, SV Shafqat Virk,
@@ -13,7 +13,7 @@ || Lang | Darcs | Mini | Parad | Lex | Lang | API | Symb | Irreg | Dict | authors ||-| Afr | + | - | - | - | - | - | - | - | - | *LPs,LPj+| Afr | + | - | ++ | + | + | + | - | - | - | *LPs,LPj | Amh | + | + | ++ | + | + | - | - | - | - | *MK | Ara | + | + | + | + | - | - | - | - | - | AD | Bul | + | + | + | + | + | + | + | + | + | *KA@@ -21,15 +21,18 @@ | Dan | + | + | ++ | + | + | + | + | + | - | *AR | Dut | + | + | ++ | + | + | + | + | + | - | *AR,FJ | Eng | + | + | ++ | + | + | + | + | + | + | *AR,BB+| Est | - | - | - | - | - | - | - | - | - | *KK,IL | Fin | + | + | ++ | + | + | + | + | - | + | *AR | Fre | + | + | ++ | + | + | + | + | + | - | *AR | Ger | + | + | ++ | + | + | + | + | + | - | *AR,HH | Heb | - | - | - | - | - | - | - | - | - | *DD | Hin | + | + | ++ | + | + | + | + | - | - | *SV,*KP,MH,AR+| Jap | - | - | - | - | - | - | - | - | - | *LZ | Ina | + | + | ++ | + | + | - | - | - | - | JB | Ita | + | + | ++ | + | + | + | + | - | - | *AR,*RE,GP | Lat | + | - | - | - | - | - | - | - | - | *AR-| Lav | + | - | - | - | - | - | - | - | - | *NG+| Lav | + | - | ++ | + | + | + | - | - | - | *NG,*PP+| Mlt | + | - | - | - | - | - | - | - | - | *JC | Mon | - | - | - | - | - | - | - | - | - | *NE | Nep | + | + | ++ | + | + | - | - | - | - | *DS | Nor | + | + | ++ | + | + | + | + | + | - | *AR@@ -37,18 +40,19 @@ | Pnb | + | + | + | + | + | + | + | - | - | *SV,MH | Pol | + | + | + | + | + | + | + | - | - | IN,*AS | Ron | + | + | ++ | + | + | + | + | - | - | *RE-| Rus | + | + | ++ | + | + | + | - | - | - | JK+| Rus | + | + | ++ | + | + | + | - | - | - | JK,*NF+| Snd | + | + | ++ | + | + | + | + | - | - | *SV,*JD | Spa | + | + | ++ | + | + | + | + | + | - | *AR,IA,TS,IL-| Swa | + | - | - | - | - | - | - | - | - | *WN, JM-| Swe | + | + | ++ | + | + | + | + | + | + | *AR,MF-| Tha | + | - | - | - | - | - | - | - | - | *AR+| Swa | + | - | - | - | - | - | - | - | - | *WN,JM+| Swe | + | + | ++ | + | + | + | + | + | + | *MA,*AR,MF+| Tha | + | - | ++ | + | + | + | + | - | - | *AR,CK | Tsn | - | - | - | - | - | - | - | - | - | *LPs,AB | Tur | + | - | ++ | + | - | - | - | - | + | *SC,KA | Urd | + | + | ++ | + | + | + | + | - | - | *SV,MH Lang = 3-letter ISO language code, used in library file names -Darcs = available in the darcs repository of http://code.haskell.org/gf+Darcs = available in the darcs repository of --http://code.haskell.org/gf-- http://www.grammaticalframework.org/ Mini = minimal resource, compiles with ``make minimal`` @@ -77,6 +81,7 @@ AR Aarne Ranta, AS Adam Slaski, BB Björn Bringert,+CK Chotiros Kairoje, DD Dana Dannélls, DS Dinesh Simk, EA Elnaz Abolahrar,@@ -87,19 +92,26 @@ IL Inari Listenmaa, IN Ilona Novak, JB Jean-Philippe Bernardy,+JC John J. Camilleri,+JD Jherna Devi, JK Janna Khegai,+JM Juliet Mutahi, JS Jordi Saludes, KA Krasimir Angelov,+KK Kaarel Kaljurand, KP Kuchi Prasad,-JM Juliet Mutahi, LPj Laurette Pretorius Jr, LPs Laurette Pretorius Sr,+LZ Liza Zimina,+MA Malin Ahlberg, MF Markus Forsberg, MK Markos Kassa Gobena, MH Muhammad Humayoun, NE Nyamsuren Erdenebadrakh,+NF Nick Frolov, NG Normunds Gruzitis, RE Ramona Enache,+PP Peteris Paikens, SC Server Cimen, SM Sofy Moradi, SV Shafqat Virk,
@@ -8,7 +8,7 @@ =Introduction= The GF Resource Grammar Library is the standard library for Grammatical Framework.-It covers the morphology and basic syntax of currently 20 languages.+It covers the morphology and basic syntax of currently 24 languages. This document contains the most important parts of the GF Resource Grammar API, as needed by a GF application programmer.@@ -23,21 +23,18 @@ - [Chapter 2 #toc5]: syntactic construction functions, with cross-links and examples. - [Chapter 3 #toc83]: morphological paradigms.-- [Chapter 4 #toc102]: additional libraries.-- [Chapter 5 #toc109]: how to "browse" the library by +- [Chapter 4 #toc105]: additional libraries.+- [Chapter 5 #toc111]: how to "browse" the library by loading the grammars into the ``gf`` command editor.-- [Chapter 6 #toc110]: a brief example of how application grammars can+- [Chapter 6 #toc112]: a brief example of how application grammars can use the resource modules. -- [Detailed table of contents #toc111].+- [Detailed table of contents #toc113]. -Many examples in [Chapter 2 #toc5] can be seen in multiple languages by hovering the-mouse over the example, as shown in the following screenshot:--[hovering.png]- Other relevant documents:-- [``status.html`` ./status.html]: the current status of different languages+- [More modules gfdoc/sources.html]: extra modules, dictionaries, and+ the internals of the resource grammar+- [The RGL Status Document ./status.html]: the current status of different languages and the authors of each grammar - [Resource Grammar Tutorial http://www.grammaticalframework.org/doc/gf-lrec-2010.pdf] as presented in LREC-2010.@@ -51,5 +48,12 @@ Cambridge, pp. 281--308, 2009). The library from a software engineering point of view. [PDF http://www.cse.chalmers.se/~aarne/old/articles/libraries-kahn.pdf]+++Many examples in [Chapter 2 #toc5] can be seen in multiple languages by hovering the+mouse over the example, as shown in the following screenshot:++[hovering.png]+
@@ -17,9606 +17,10580 @@ <P> The GF Resource Grammar Library is the standard library for Grammatical Framework.-It covers the morphology and basic syntax of currently 20 languages.-</P>-<P>-This document contains the most important parts of the GF Resource Grammar API,-as needed by a GF application programmer.-It has been machine-generated from the source files; there are links-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 nicest-possible format.-</P>-<P>-The main contents are:-</P>--<UL>-<LI><A HREF="#toc2">Chapter 1</A>: categories, with links to the functions for-constructing trees in them.-<LI><A HREF="#toc5">Chapter 2</A>: syntactic construction functions, with cross-links and-examples. -<LI><A HREF="#toc83">Chapter 3</A>: morphological paradigms.-<LI><A HREF="#toc102">Chapter 4</A>: additional libraries.-<LI><A HREF="#toc109">Chapter 5</A>: how to "browse" the library by -loading the grammars into the <CODE>gf</CODE> command editor.-<LI><A HREF="#toc110">Chapter 6</A>: a brief example of how application grammars can-use the resource modules. -<LI><A HREF="#toc111">Detailed table of contents</A>.-</UL>--<P>-Many examples in <A HREF="#toc5">Chapter 2</A> can be seen in multiple languages by hovering the-mouse over the example, as shown in the following screenshot:-</P>-<P>-<IMG ALIGN="middle" SRC="hovering.png" BORDER="0" ALT="">-</P>-<P>-Other relevant documents:-</P>--<UL>-<LI><A HREF="./status.html"><CODE>status.html</CODE></A>: the current status of different languages- and the authors of each grammar-<LI><A HREF="http://www.grammaticalframework.org/doc/gf-lrec-2010.pdf">Resource Grammar Tutorial</A>- as presented in LREC-2010.-<LI>Paper "The GF Resource Grammar Library" by A. Ranta- (<I>Linguistic Issues in Language Technology</I>, 2 (2), 2009). An overview of- the library with linguistic motivations.- <A HREF="http://elanguage.net/journals/index.php/lilt/article/viewFile/214/158">PDF</A>-<LI>Paper "Grammars as Software Libraries" by A. Ranta- (In Y. Bertot, G. Huet, J-J. Lévy, and G. Plotkin (eds.),- <I>From Semantics to Computer Science</I>, Cambridge University Press, - Cambridge, pp. 281--308, 2009).- The library from a software engineering point of view.- <A HREF="http://www.cse.chalmers.se/~aarne/old/articles/libraries-kahn.pdf">PDF</A>-</UL>--<A NAME="toc2"></A>-<H1>Categories</H1>--<P>-Source 1: <A HREF="http://www.grammaticalframework.org/lib/src/abstract/Common.gf"><CODE>../src/abstract/Common.gf</CODE></A>-</P>-<P>-Source 2: <A HREF="http://www.grammaticalframework.org/lib/src/abstract/Cat.gf"><CODE>../src/abstract/Cat.gf</CODE></A>-</P>--<A NAME="toc3"></A>-<H2>A hierarchic view</H2>--<P>-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 <I>C</I> to <I>D</I> is: there is a constructor-of <I>C</I> that takes <I>D</I> as an argument. What the constructors exactly are,-and what other arguments they take, is described by separate tables for-each category.-</P>--<TABLE ALIGN="center" BORDER="1" CELLPADDING="4">-<TR>-<TD ALIGN="right"><center><IMG ALIGN="middle" SRC="categories.png" USEMAP="#categories" BORDER="0" ALT=""></center></TD>-</TR>-</TABLE>--<map id="categories" name="categories">-<area shape="poly" href="#Text" TITLE="Text - text consisting of several phrases" alt="" coords="690,23 688,17 685,12 679,8 672,5 664,4 656,5 649,8 643,12 640,17 638,23 640,29 643,34 649,38 656,41 664,42 672,41 679,38 685,34 688,29"/>-<area shape="poly" href="#Punct" title="Punct" alt="" coords="657,95 656,89 652,84 646,80 638,77 629,76 620,77 612,80 606,84 602,89 600,95 602,101 606,106 612,110 620,113 629,114 638,113 646,110 652,106 656,101"/>-<area shape="poly" href="#Phr" TITLE="Phr - phrase in a text" alt="" coords="726,95 725,89 721,84 715,80 708,77 700,76 692,77 685,80 679,84 676,89 675,95 676,101 679,106 685,110 692,113 700,114 708,113 715,110 721,106 725,101"/>-<area shape="poly" href="#PConj" TITLE="PConj - phrase-beginning conjunction" alt="" coords="658,167 656,162 652,156 645,152 637,150 628,149 619,150 610,152 604,156 600,162 598,167 600,173 604,179 610,183 619,185 628,186 637,185 645,183 652,179 656,173"/>-<area shape="poly" href="#Utt" TITLE="Utt - sentence, question, word..." alt="" coords="726,167 725,162 721,156 715,152 708,150 700,149 692,150 685,152 679,156 676,162 675,167 676,173 679,179 685,183 692,185 700,186 708,185 715,183 721,179 725,173"/>-<area shape="poly" href="#Voc" TITLE="Voc - vocative or "please"" alt="" coords="794,167 793,162 789,156 784,152 777,150 769,149 761,150 754,152 748,156 744,162 743,167 744,173 748,179 754,183 761,185 769,186 777,185 784,183 789,179 793,173"/>-<area shape="poly" href="#Imp" TITLE="Imp - imperative" alt="" coords="657,240 656,234 652,229 647,225 640,222 632,221 624,222 617,225 611,229 607,234 606,240 607,246 611,251 617,255 624,258 632,259 640,258 647,255 652,251 656,246"/>-<area shape="poly" href="#S" TITLE="S - declarative sentence" alt="" coords="726,240 725,234 721,229 715,225 708,223 700,222 692,223 685,225 679,229 676,234 675,240 676,245 679,250 685,254 692,257 700,258 708,257 715,254 721,250 725,245"/>-<area shape="poly" href="#QS" TITLE="QS - question" alt="" coords="870,240 868,234 865,229 859,225 852,222 844,221 836,222 829,225 823,229 819,234 818,240 819,246 823,251 829,255 836,258 844,259 852,258 859,255 865,251 868,246"/>-<area shape="poly" href="#Tense" TITLE="Tense - tense" alt="" coords="521,312 519,306 515,301 509,297 501,294 492,293 483,294 475,297 469,301 464,306 463,312 464,318 469,323 475,327 483,330 492,331 501,330 509,327 515,323 519,318"/>-<area shape="poly" href="#Ant" TITLE="Ant - anteriority" alt="" coords="589,312 588,306 584,301 578,297 571,294 563,293 555,294 548,297 542,301 539,306 538,312 539,318 542,323 548,327 555,330 563,331 571,330 578,327 584,323 588,318"/>-<area shape="poly" href="#Pol" TITLE="Pol - polarity" alt="" coords="657,312 656,306 652,301 647,297 640,294 632,293 624,294 617,297 611,301 607,306 606,312 607,318 611,323 617,327 624,330 632,331 640,330 647,327 652,323 656,318"/>-<area shape="poly" href="#Cl" TITLE="Cl - declarative clause, with all tenses" alt="" coords="726,312 725,306 721,301 715,297 708,294 700,293 692,294 685,297 679,301 676,306 675,312 676,318 679,323 685,327 692,330 700,331 708,330 715,327 721,323 725,318"/>-<area shape="poly" href="#ListS" title="ListS" alt="" coords="798,312 797,306 793,301 787,297 779,294 771,293 762,294 754,297 748,301 745,306 743,312 745,318 748,323 754,327 762,330 771,331 779,330 787,327 793,323 797,318"/>-<area shape="poly" href="#Conj" TITLE="Conj - conjunction" alt="" coords="867,312 866,306 862,301 856,297 849,294 841,293 833,294 826,297 820,301 816,306 815,312 816,318 820,323 826,327 833,330 841,331 849,330 856,327 862,323 866,318"/>-<area shape="poly" href="#QCl" TITLE="QCl - question clause, with all tenses" alt="" coords="945,312 943,306 940,301 934,297 927,294 919,293 911,294 904,297 898,301 895,306 893,312 895,318 898,323 904,327 911,330 919,331 927,330 934,327 940,323 943,318"/>-<area shape="poly" href="#NP" TITLE="NP - noun phrase (subject or object)" alt="" coords="270,384 269,379 265,373 260,369 252,366 244,366 237,366 229,369 224,373 220,379 219,384 220,390 224,395 229,400 237,402 244,403 252,402 260,400 265,395 269,390"/>-<area shape="poly" href="#VP" TITLE="VP - verb phrase" alt="" coords="636,384 634,379 631,373 625,369 618,366 610,366 602,366 595,369 589,373 585,379 584,384 585,390 589,395 595,400 602,402 610,403 618,402 625,400 631,395 634,390"/>-<area shape="rect" href="#Adv" TITLE="Adv - verb-phrase-modifying adverb" alt="" coords="702,367,753,401"/>-<area shape="poly" href="#Predet" TITLE="Predet - predeterminer (prefixed Quant)" alt="" coords="65,457 63,451 59,446 52,441 44,439 34,438 25,439 16,441 10,446 5,451 4,457 5,462 10,468 16,472 25,475 34,475 44,475 52,472 59,468 63,462"/>-<area shape="poly" href="#Pron" TITLE="Pron - personal pronoun" alt="" coords="133,457 132,451 129,446 123,441 116,439 108,438 99,439 92,441 86,446 83,451 82,457 83,462 86,468 92,472 99,475 108,475 116,475 123,472 129,468 132,462"/>-<area shape="rect" href="#PN" TITLE="PN - proper name" alt="" coords="150,440,202,474"/>-<area shape="poly" href="#Det" TITLE="Det - determiner phrase" alt="" coords="270,457 269,451 265,446 260,441 252,439 244,438 237,439 229,441 224,446 220,451 219,457 220,462 224,468 229,472 237,475 244,475 252,475 260,472 265,468 269,462"/>-<area shape="poly" href="#CN" TITLE="CN - common noun (without determiner)" alt="" coords="339,457 337,451 334,446 328,441 321,439 313,438 305,439 298,441 292,446 289,451 287,457 289,462 292,468 298,472 305,475 313,475 321,475 328,472 334,468 337,462"/>-<area shape="poly" href="#ListNP" title="ListNP" alt="" coords="420,457 419,451 414,446 407,441 398,439 388,438 378,439 369,441 362,446 358,451 356,457 358,462 362,468 369,472 378,475 388,475 398,475 407,472 414,468 419,462"/>-<area shape="poly" href="#AdV" TITLE="Adv - verb-phrase-modifying adverb" alt="" coords="489,457 488,451 484,446 479,441 471,439 463,438 455,439 448,441 442,446 439,451 437,457 439,462 442,468 448,472 455,475 463,475 471,475 479,472 484,468 488,462"/>-<area shape="rect" href="#V" TITLE="V - one-place verb" alt="" coords="506,440,616,474"/>-<area shape="poly" href="#AP" TITLE="AP - adjectival phrase" alt="" coords="685,457 684,451 680,446 674,441 667,439 659,438 651,439 644,441 639,446 635,451 634,457 635,462 639,468 644,472 651,475 659,475 667,475 674,472 680,468 684,462"/>-<area shape="poly" href="#Subj" TITLE="Subj - subjunction" alt="" coords="753,457 752,451 749,446 743,441 736,439 728,438 720,439 713,441 707,446 703,451 702,457 703,462 707,468 713,472 720,475 728,475 736,475 743,472 749,468 752,462"/>-<area shape="poly" href="#ListAdj" title="ListAdj" alt="" coords="837,457 836,451 831,446 824,441 814,439 804,438 794,439 784,441 777,446 772,451 770,457 772,462 777,468 784,472 794,475 804,475 814,475 824,472 831,468 836,462"/>-<area shape="poly" href="#Art" title="Art" alt="" coords="90,529 89,523 85,518 80,514 73,511 65,510 57,511 50,514 44,518 40,523 39,529 40,535 44,540 50,544 57,547 65,548 73,547 80,544 85,540 89,535"/>-<area shape="poly" 'href="#Quant" TITLE="Quant - quantifier ('nucleus' of Det)"' alt="" coords="166,529 165,523 161,518 154,514 146,511 137,510 128,511 120,514 113,518 109,523 108,529 109,535 113,540 120,544 128,547 137,548 146,547 154,544 161,540 165,535"/>-<area shape="poly" href="#Num" TITLE="Num - number determining element" alt="" coords="237,529 235,523 232,518 226,514 218,511 210,510 202,511 195,514 189,518 185,523 184,529 185,535 189,540 195,544 202,547 210,548 218,547 226,544 232,540 235,535"/>-<area shape="poly" href="#Ord" TITLE="Ord - ordinal number (used in Det)" alt="" coords="305,529 304,523 300,518 295,514 288,511 280,510 272,511 265,514 259,518 255,523 254,529 255,535 259,540 265,544 272,547 280,548 288,547 295,544 300,540 304,535"/>-<area shape="rect" href="#N" TITLE="N - common noun" alt="" coords="323,512,387,546"/>-<area shape="poly" href="#RS" TITLE="RS - relative" alt="" coords="456,529 454,523 451,518 445,514 438,511 430,510 422,511 415,514 409,518 406,523 404,529 406,535 409,540 415,544 422,547 430,548 438,547 445,544 451,540 454,535"/>-<area shape="poly" href="#Card" TITLE="Card - cardinal number" alt="" coords="236,601 235,595 231,590 226,586 218,583 210,582 202,583 195,586 189,590 186,595 184,601 186,607 189,612 195,616 202,619 210,620 218,619 226,616 231,612 235,607"/>-<area shape="poly" href="#Numeral" TITLE="Numeral - cardinal or ordinal in words" alt="" coords="216,674 214,668 206,662 194,658 179,656 162,655 145,656 130,658 118,662 110,668 107,674 110,679 118,685 130,689 145,691 162,692 179,691 194,689 206,685 214,679"/>-<area shape="poly" href="#AdN" TITLE="AdN - numeral-modifying adverb" alt="" coords="285,674 283,668 280,662 274,658 267,656 259,655 251,656 244,658 238,662 234,668 233,674 234,679 238,685 244,689 251,691 259,692 267,691 274,689 280,685 283,679"/>-<area shape="poly" href="#CAdv" TITLE="CAdv - comparative adverb" alt="" coords="288,746 286,740 282,735 276,731 268,728 259,727 250,728 242,731 235,735 231,740 230,746 231,752 235,757 242,761 250,764 259,765 268,764 276,761 282,757 286,752"/>-<area shape="poly" href="#RCl" TITLE="RCl - relative clause, with all tenses" alt="" coords="456,601 454,595 451,590 445,586 438,583 430,582 422,583 415,586 409,590 406,595 404,601 406,607 409,612 415,616 422,619 430,620 438,619 445,616 451,612 454,607"/>-<area shape="poly" href="#AdA" TITLE="AdA - adjective-modifying adverb" alt="" coords="617,529 615,523 612,518 606,514 599,511 591,510 583,511 576,514 570,518 566,523 565,529 566,535 570,540 576,544 583,547 591,548 599,547 606,544 612,540 615,535"/>-<area shape="rect" href="#A" TITLE="A - one-place adjective" alt="" coords="634,512,685,546"/>-<area shape="poly" href="#ListAP" title="ListAP" alt="" coords="767,529 765,523 760,518 753,514 744,511 734,510 725,511 716,514 708,518 704,523 702,529 704,535 708,540 716,544 725,547 734,548 744,547 753,544 760,540 765,535"/>-<area shape="poly" href="#IP" TITLE="IP - interrogative pronoun" alt="" coords="895,384 894,379 890,373 885,369 877,366 870,366 862,366 854,369 849,373 845,379 844,384 845,390 849,395 854,400 862,402 870,403 877,402 885,400 890,395 894,390"/>-<area shape="poly" href="#IAdv" TITLE="IAdv - interrogative adverb" alt="" coords="966,384 965,379 961,373 955,369 947,366 939,366 931,366 923,369 917,373 913,379 912,384 913,390 917,395 923,400 931,402 939,403 947,402 955,400 961,395 965,390"/>-<area shape="poly" href="#ClSlash" title="ClSlash" alt="" coords="1050,384 1048,379 1043,373 1036,369 1026,366 1016,366 1006,366 996,369 989,373 984,379 982,384 984,390 989,395 996,400 1006,402 1016,403 1026,402 1036,400 1043,395 1048,390"/>-<area shape="poly" href="#IDet" TITLE="IDet - interrogative determiner" alt="" coords="906,457 904,451 901,446 895,441 888,439 880,438 872,439 865,441 859,446 856,451 854,457 856,462 859,468 865,472 872,475 880,475 888,475 895,472 901,468 904,462"/>-<area shape="poly" href="#VPSlash" TITLE="VPSlash - verb phrase missing complement" alt="" coords="1052,457 1050,451 1045,446 1037,441 1027,439 1016,438 1005,439 995,441 987,446 982,451 980,457 982,462 987,468 995,472 1005,475 1016,475 1027,475 1037,472 1045,468 1050,462"/>-<area shape="poly" href="#IQuant" title="IQuant" alt="" coords="912,529 910,523 906,518 899,514 890,511 880,510 870,511 861,514 854,518 850,523 848,529 850,535 854,540 861,544 870,547 880,548 890,547 899,544 906,540 910,535"/>-<area shape="poly" href="#RP" TITLE="RP - relative pronoun" alt="" coords="456,674 454,668 451,662 445,658 438,656 430,655 422,656 415,658 409,662 406,668 404,674 406,679 409,685 415,689 422,691 430,692 438,691 445,689 451,685 454,679"/>-</map>-<P>-The rectangular boxes mark open lexical categories, which have constructors-also in the <CODE>Paradigms</CODE> modules.-</P>--<A NAME="toc4"></A>-<H2>Explanations</H2>--<TABLE BORDER="1" CELLPADDING="4">-<TR>-<TH>Category</TH>-<TH>Explanation</TH>-<TH COLSPAN="2">Example</TH>-</TR>-<TR>-<TD><A HREF="#A" TITLE="A - one-place adjective">A</A></TD>-<TD>one-place adjective</TD>-<TD><I>warm</I></TD>-</TR>-<TR>-<TD><A HREF="#A2" TITLE="A2 - two-place adjective">A2</A></TD>-<TD>two-place adjective</TD>-<TD><I>divisible</I></TD>-</TR>-<TR>-<TD><A HREF="#AP" TITLE="AP - adjectival phrase">AP</A></TD>-<TD>adjectival phrase</TD>-<TD><I>very warm</I></TD>-</TR>-<TR>-<TD><A HREF="#AdA" TITLE="AdA - adjective-modifying adverb">AdA</A></TD>-<TD>adjective-modifying adverb</TD>-<TD><I>very</I></TD>-</TR>-<TR>-<TD><A HREF="#AdN" TITLE="AdN - numeral-modifying adverb">AdN</A></TD>-<TD>numeral-modifying adverb</TD>-<TD><I>more than</I></TD>-</TR>-<TR>-<TD><A HREF="#AdV" TITLE="Adv - verb-phrase-modifying adverb">AdV</A></TD>-<TD>adverb directly attached to verb</TD>-<TD><I>always</I></TD>-</TR>-<TR>-<TD><A HREF="#Adv" TITLE="Adv - verb-phrase-modifying adverb">Adv</A></TD>-<TD>verb-phrase-modifying adverb</TD>-<TD><I>in the house</I></TD>-</TR>-<TR>-<TD><A HREF="#Ant" TITLE="Ant - anteriority">Ant</A></TD>-<TD>anteriority</TD>-<TD>simultaneous, anterior</TD>-</TR>-<TR>-<TD><A HREF="#CAdv" TITLE="CAdv - comparative adverb">CAdv</A></TD>-<TD>comparative adverb</TD>-<TD><I>more</I></TD>-</TR>-<TR>-<TD><A HREF="#CN" TITLE="CN - common noun (without determiner)">CN</A></TD>-<TD>common noun (without determiner)</TD>-<TD><I>red house</I></TD>-</TR>-<TR>-<TD><A HREF="#Card" TITLE="Card - cardinal number">Card</A></TD>-<TD>cardinal number</TD>-<TD><I>seven</I></TD>-</TR>-<TR>-<TD><A HREF="#Cl" TITLE="Cl - declarative clause, with all tenses">Cl</A></TD>-<TD>declarative clause, with all tenses</TD>-<TD><I>she looks at this</I></TD>-</TR>-<TR>-<TD><A HREF="#Comp" TITLE="Comp - complement of copula, such as AP">Comp</A></TD>-<TD>complement of copula, such as AP</TD>-<TD><I>very warm</I></TD>-</TR>-<TR>-<TD><A HREF="#Conj" TITLE="Conj - conjunction">Conj</A></TD>-<TD>conjunction</TD>-<TD><I>and</I></TD>-</TR>-<TR>-<TD><A HREF="#Det" TITLE="Det - determiner phrase">Det</A></TD>-<TD>determiner phrase</TD>-<TD><I>those seven</I></TD>-</TR>-<TR>-<TD><A HREF="#Digits" TITLE="Digits - cardinal or ordinal in digits">Digits</A></TD>-<TD>cardinal or ordinal in digits</TD>-<TD><I>1,000/1,000th</I></TD>-</TR>-<TR>-<TD><A HREF="#IAdv" TITLE="IAdv - interrogative adverb">IAdv</A></TD>-<TD>interrogative adverb</TD>-<TD><I>why</I></TD>-</TR>-<TR>-<TD><A HREF="#IComp" TITLE="IComp - interrogative complement of copula">IComp</A></TD>-<TD>interrogative complement of copula</TD>-<TD><I>where</I></TD>-</TR>-<TR>-<TD><A HREF="#IDet" TITLE="IDet - interrogative determiner">IDet</A></TD>-<TD>interrogative determiner</TD>-<TD><I>how many</I></TD>-</TR>-<TR>-<TD><A HREF="#IP" TITLE="IP - interrogative pronoun">IP</A></TD>-<TD>interrogative pronoun</TD>-<TD><I>who</I></TD>-</TR>-<TR>-<TD><A HREF="#Imp" TITLE="Imp - imperative">Imp</A></TD>-<TD>imperative</TD>-<TD><I>look at this</I></TD>-</TR>-<TR>-<TD><A HREF="#Interj" TITLE="Interj - interjection">Interj</A></TD>-<TD>interjection</TD>-<TD><I>alas</I></TD>-</TR>-<TR>-<TD><A HREF="#N" TITLE="N - common noun">N</A></TD>-<TD>common noun</TD>-<TD><I>house</I></TD>-</TR>-<TR>-<TD><A HREF="#N2" TITLE="N2 - relational noun">N2</A></TD>-<TD>relational noun</TD>-<TD><I>son</I></TD>-</TR>-<TR>-<TD><A HREF="#N3" TITLE="N3 - three-place relational noun">N3</A></TD>-<TD>three-place relational noun</TD>-<TD><I>connection</I></TD>-</TR>-<TR>-<TD><A HREF="#NP" TITLE="NP - noun phrase (subject or object)">NP</A></TD>-<TD>noun phrase (subject or object)</TD>-<TD><I>the red house</I></TD>-</TR>-<TR>-<TD><A HREF="#Num" TITLE="Num - number determining element">Num</A></TD>-<TD>number determining element</TD>-<TD><I>seven</I></TD>-</TR>-<TR>-<TD><A HREF="#Numeral" TITLE="Numeral - cardinal or ordinal in words">Numeral</A></TD>-<TD>cardinal or ordinal in words</TD>-<TD><I>five/fifth</I></TD>-</TR>-<TR>-<TD><A HREF="#Ord" TITLE="Ord - ordinal number (used in Det)">Ord</A></TD>-<TD>ordinal number (used in Det)</TD>-<TD><I>seventh</I></TD>-</TR>-<TR>-<TD><A HREF="#PConj" TITLE="PConj - phrase-beginning conjunction">PConj</A></TD>-<TD>phrase-beginning conjunction</TD>-<TD><I>therefore</I></TD>-</TR>-<TR>-<TD><A HREF="#PN" TITLE="PN - proper name">PN</A></TD>-<TD>proper name</TD>-<TD><I>Paris</I></TD>-</TR>-<TR>-<TD><A HREF="#Phr" TITLE="Phr - phrase in a text">Phr</A></TD>-<TD>phrase in a text</TD>-<TD><I>but be quiet please</I></TD>-</TR>-<TR>-<TD><A HREF="#Pol" TITLE="Pol - polarity">Pol</A></TD>-<TD>polarity</TD>-<TD>positive, negative</TD>-</TR>-<TR>-<TD><A HREF="#Predet" TITLE="Predet - predeterminer (prefixed Quant)">Predet</A></TD>-<TD>predeterminer (prefixed Quant)</TD>-<TD><I>all</I></TD>-</TR>-<TR>-<TD><A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A></TD>-<TD>preposition, or just case</TD>-<TD><I>in</I></TD>-</TR>-<TR>-<TD><A HREF="#Pron" TITLE="Pron - personal pronoun">Pron</A></TD>-<TD>personal pronoun</TD>-<TD><I>she</I></TD>-</TR>-<TR>-<TD><A HREF="#QCl" TITLE="QCl - question clause, with all tenses">QCl</A></TD>-<TD>question clause, with all tenses</TD>-<TD><I>why does she walk</I></TD>-</TR>-<TR>-<TD><A HREF="#QS" TITLE="QS - question">QS</A></TD>-<TD>question</TD>-<TD><I>where did she live</I></TD>-</TR>-<TR>-<TD><A 'HREF="#Quant" TITLE="Quant - quantifier ('nucleus' of Det)"'>Quant</A></TD>-<TD>quantifier ('nucleus' of Det)</TD>-<TD><I>this/these</I></TD>-</TR>-<TR>-<TD><A HREF="#RCl" TITLE="RCl - relative clause, with all tenses">RCl</A></TD>-<TD>relative clause, with all tenses</TD>-<TD><I>in which she lives</I></TD>-</TR>-<TR>-<TD><A HREF="#RP" TITLE="RP - relative pronoun">RP</A></TD>-<TD>relative pronoun</TD>-<TD><I>in which</I></TD>-</TR>-<TR>-<TD><A HREF="#RS" TITLE="RS - relative">RS</A></TD>-<TD>relative</TD>-<TD><I>in which she lived</I></TD>-</TR>-<TR>-<TD><A HREF="#S" TITLE="S - declarative sentence">S</A></TD>-<TD>declarative sentence</TD>-<TD><I>she lived here</I></TD>-</TR>-<TR>-<TD><A HREF="#SC" TITLE="SC - embedded sentence or question">SC</A></TD>-<TD>embedded sentence or question</TD>-<TD><I>that it rains</I></TD>-</TR>-<TR>-<TD><A HREF="#Subj" TITLE="Subj - subjunction">Subj</A></TD>-<TD>subjunction</TD>-<TD><I>if</I></TD>-</TR>-<TR>-<TD><A HREF="#Temp" TITLE="Temp - temporal and aspectual features">Temp</A></TD>-<TD>temporal and aspectual features</TD>-<TD>past anterior</TD>-</TR>-<TR>-<TD><A HREF="#Tense" TITLE="Tense - tense">Tense</A></TD>-<TD>tense</TD>-<TD>present, past, future</TD>-</TR>-<TR>-<TD><A HREF="#Text" TITLE="Text - text consisting of several phrases">Text</A></TD>-<TD>text consisting of several phrases</TD>-<TD><I>He is here. Why?</I></TD>-</TR>-<TR>-<TD><A HREF="#Utt" TITLE="Utt - sentence, question, word...">Utt</A></TD>-<TD>sentence, question, word...</TD>-<TD><I>be quiet</I></TD>-</TR>-<TR>-<TD><A HREF="#V" TITLE="V - one-place verb">V</A></TD>-<TD>one-place verb</TD>-<TD><I>sleep</I></TD>-</TR>-<TR>-<TD><A HREF="#V2" TITLE="V2 - two-place verb">V2</A></TD>-<TD>two-place verb</TD>-<TD><I>love</I></TD>-</TR>-<TR>-<TD><A HREF="#V2A" TITLE="V2A - verb with NP and AP complement">V2A</A></TD>-<TD>verb with NP and AP complement</TD>-<TD><I>paint</I></TD>-</TR>-<TR>-<TD><A HREF="#V2Q" TITLE="V2Q - verb with NP and Q complement">V2Q</A></TD>-<TD>verb with NP and Q complement</TD>-<TD><I>ask</I></TD>-</TR>-<TR>-<TD><A HREF="#V2S" TITLE="V2S - verb with NP and S complement">V2S</A></TD>-<TD>verb with NP and S complement</TD>-<TD><I>tell</I></TD>-</TR>-<TR>-<TD><A HREF="#V2V" TITLE="V2V - verb with NP and V complement">V2V</A></TD>-<TD>verb with NP and V complement</TD>-<TD><I>cause</I></TD>-</TR>-<TR>-<TD><A HREF="#V3" TITLE="V3 - three-place verb">V3</A></TD>-<TD>three-place verb</TD>-<TD><I>show</I></TD>-</TR>-<TR>-<TD><A HREF="#VA" TITLE="VA - adjective-complement verb">VA</A></TD>-<TD>adjective-complement verb</TD>-<TD><I>look</I></TD>-</TR>-<TR>-<TD><A HREF="#VP" TITLE="VP - verb phrase">VP</A></TD>-<TD>verb phrase</TD>-<TD><I>is very warm</I></TD>-</TR>-<TR>-<TD><A HREF="#VPSlash" TITLE="VPSlash - verb phrase missing complement">VPSlash</A></TD>-<TD>verb phrase missing complement</TD>-<TD><I>give to John</I></TD>-</TR>-<TR>-<TD><A HREF="#VQ" TITLE="VQ - question-complement verb">VQ</A></TD>-<TD>question-complement verb</TD>-<TD><I>wonder</I></TD>-</TR>-<TR>-<TD><A HREF="#VS" TITLE="VS - sentence-complement verb">VS</A></TD>-<TD>sentence-complement verb</TD>-<TD><I>claim</I></TD>-</TR>-<TR>-<TD><A HREF="#VV" TITLE="VV - verb-phrase-complement verb">VV</A></TD>-<TD>verb-phrase-complement verb</TD>-<TD><I>want</I></TD>-</TR>-<TR>-<TD><A HREF="#Voc" TITLE="Voc - vocative or "please"">Voc</A></TD>-<TD>vocative or "please"</TD>-<TD><I>my darling</I></TD>-</TR>-</TABLE>--<A NAME="toc5"></A>-<H1>Syntax Rules and Structural Words</H1>--<P>-Source 1: <A HREF="http://www.grammaticalframework.org/lib/src/api/Constructors.gf"><CODE>../src/api/Constructors.gf</CODE></A>-</P>-<P>-Source 2: <A HREF="http://www.grammaticalframework.org/lib/src/abstract/Structural.gf"><CODE>../src/abstract/Structural.gf</CODE></A>-</P>--<A NAME="A"></A>-<H2>A - one-place adjective</H2>--<P>-Lexical category, constructors given in-<A HREF="#RParadigms">lexical paradigms</A>.-</P>--<A NAME="A2"></A>-<H2>A2 - two-place adjective</H2>--<P>-Lexical category, constructors given in-<A HREF="#RParadigms">lexical paradigms</A>.-</P>--<A NAME="AP"></A>-<H2>AP - adjectival phrase</H2>--<TABLE BORDER="1" CELLPADDING="4">-<TR>-<TH>Function</TH>-<TH>Type</TH>-<TH COLSPAN="2">Example</TH>-</TR>-<TR>-<TD><CODE>comparAP</CODE></TD>-<TD><A HREF="#A" TITLE="A - one-place adjective">A</A> <CODE>-></CODE> <A HREF="#AP" TITLE="AP - adjectival phrase">AP</A></TD>-<TD><div class=reveal> <I>warmer</I> <div class=popup> <ul> <li>API: <CODE>mkUtt (comparAP warm_A)</CODE> <li>Afr: <I>warmer</I> <li>Bul: <I>по - топъл</I> <li>Cat: <I>més tebi</I> <li>Dan: <I>varmere</I> <li>Dut: <I>warmer</I> <li>Eng: <I>warmer</I> <li>Fin: <I>lämpimämpi</I> <li>Fre: <I>plus chaud</I> <li>Ger: <I>wärmer</I> <li>Ita: <I>più caldo</I> <li>Nep: <I>अली तातो</I> <li>Nor: <I>varmere</I> <li>Pes: <I>گرم</I> <li>Pnb: <I>تتا</I> <li>Pol: <I>cieplejszy</I> <li>Ron: <I>mai călduţ</I> <li>Rus: <I>тёплее</I> <li>Spa: <I>más tibio</I> <li>Swe: <I>varmare</I> <li>Urd: <I>گرم</I> </ul> </div> </div></TD>-</TR>-<TR>-<TD><CODE>mkAP</CODE></TD>-<TD><A HREF="#A" TITLE="A - one-place adjective">A</A> <CODE>-></CODE> <A HREF="#AP" TITLE="AP - adjectival phrase">AP</A></TD>-<TD><div class=reveal> <I>warm</I> <div class=popup> <ul> <li>API: <CODE>mkAP warm_A</CODE> <li>Afr: <I>warm</I> <li>Bul: <I>топъл</I> <li>Cat: <I>tebi</I> <li>Dan: <I>varm</I> <li>Dut: <I>warm</I> <li>Eng: <I>warm</I> <li>Fin: <I>lämmin</I> <li>Fre: <I>chaud</I> <li>Ger: <I>warm</I> <li>Ita: <I>caldo</I> <li>Nep: <I>तातो</I> <li>Nor: <I>varm</I> <li>Pes: <I>گرم</I> <li>Pnb: <I>{s = variants {table ParamX.Number [table ResPnb.Gender [table ResPnb.Case ["تتا";</I> <li>Pol: <I>ciepły</I> <li>Ron: <I>călduţ</I> <li>Rus: <I>тёплый</I> <li>Spa: <I>tibio</I> <li>Swe: <I>varm</I> <li>Urd: <I>گرم</I> </ul> </div> </div></TD>-</TR>-<TR>-<TD><CODE>mkAP</CODE></TD>-<TD><A HREF="#A" TITLE="A - one-place adjective">A</A> <CODE>-></CODE> <A HREF="#NP" TITLE="NP - noun phrase (subject or object)">NP</A> <CODE>-></CODE> <A HREF="#AP" TITLE="AP - adjectival phrase">AP</A></TD>-<TD><div class=reveal> <I>warmer than Paris</I> <div class=popup> <ul> <li>API: <CODE>mkAP warm_A (mkNP paris_PN)</CODE> <li>Afr: <I>warmer as Parys</I> <li>Bul: <I>по - топъл от Париж</I> <li>Cat: <I>més tebi que Paris</I> <li>Dan: <I>varmere end Paris</I> <li>Dut: <I>warmer dan Parijs</I> <li>Eng: <I>warmer than Paris</I> <li>Fin: <I>Pariisia lämpimämpi</I> <li>Fre: <I>plus chaud que Paris</I> <li>Ger: <I>wärmer als Paris</I> <li>Ita: <I>più caldo di Parigi</I> <li>Nep: <I>पेरिस भन्दा तातो</I> <li>Nor: <I>varmere enn Paris</I> <li>Pes: <I>گرم تر از پاریس</I> <li>Pnb: <I>{s : ParamX.Number => ResPnb.Gender => ResPnb.Case => Str</I> <li>Pol: <I>cieplejszy niż Paryż</I> <li>Ron: <I>mai călduţ decât Paris</I> <li>Rus: <I>тёплее Парижа</I> <li>Spa: <I>más tibio que Paris</I> <li>Swe: <I>varmare än Paris</I> <li>Urd: <I>پیرس سے گرم</I> </ul> </div> </div></TD>-</TR>-<TR>-<TD><CODE>mkAP</CODE></TD>-<TD><A HREF="#A2" TITLE="A2 - two-place adjective">A2</A> <CODE>-></CODE> <A HREF="#NP" TITLE="NP - noun phrase (subject or object)">NP</A> <CODE>-></CODE> <A HREF="#AP" TITLE="AP - adjectival phrase">AP</A></TD>-<TD><div class=reveal> <I>married to her</I> <div class=popup> <ul> <li>API: <CODE>mkAP married_A2 she_NP</CODE> <li>Afr: <I>getroud met haar</I> <li>Bul: <I>женен за нея</I> <li>Cat: <I>casat a ella</I> <li>Dan: <I>gift med hende</I> <li>Dut: <I>getrouwd met haar</I> <li>Eng: <I>married to her</I> <li>Fin: <I>hänen kanssa avioitunut</I> <li>Fre: <I>marié à elle</I> <li>Ger: <I>verheiratet mit ihr</I> <li>Ita: <I>sposato con lei</I> <li>Nep: <I>उनी सँग विवाहित</I> <li>Nor: <I>gift med henne</I> <li>Pes: <I>او متأهل</I> <li>Pnb: <I>*</I> <li>Pol: <I>zaślubiony jej</I> <li>Ron: <I>căsătorit cu ea</I> <li>Rus: <I>замужем за ей</I> <li>Spa: <I>casado a ella</I> <li>Swe: <I>gift med henne</I> <li>Urd: <I>اس سے [شادی كرنa]</I> </ul> </div> </div></TD>-</TR>-<TR>-<TD><CODE>mkAP</CODE></TD>-<TD><A HREF="#A2" TITLE="A2 - two-place adjective">A2</A> <CODE>-></CODE> <A HREF="#AP" TITLE="AP - adjectival phrase">AP</A></TD>-<TD><div class=reveal> <I>married</I> <div class=popup> <ul> <li>API: <CODE>mkAP married_A2</CODE> <li>Afr: <I>getroud</I> <li>Bul: <I>женен</I> <li>Cat: <I>casat</I> <li>Dan: <I>gift</I> <li>Dut: <I>getrouwd</I> <li>Eng: <I>married</I> <li>Fin: <I>avioitunut</I> <li>Fre: <I>marié</I> <li>Ger: <I>verheiratet</I> <li>Ita: <I>sposato</I> <li>Nep: <I>विवाहित</I> <li>Nor: <I>gift</I> <li>Pes: <I>متأهل</I> <li>Pnb: <I>*</I> <li>Pol: <I>zaślubiony</I> <li>Ron: <I>căsătorit</I> <li>Rus: <I>замужем</I> <li>Spa: <I>casado</I> <li>Swe: <I>gift</I> <li>Urd: <I>[شادی كرنa]</I> </ul> </div> </div></TD>-</TR>-<TR>-<TD><CODE>mkAP</CODE></TD>-<TD><A HREF="#AP" TITLE="AP - adjectival phrase">AP</A> <CODE>-></CODE> <A HREF="#S" TITLE="S - declarative sentence">S</A> <CODE>-></CODE> <A HREF="#AP" TITLE="AP - adjectival phrase">AP</A></TD>-<TD><div class=reveal> <I>it is good that she sleeps</I> <div class=popup> <ul> <li>API: <CODE>mkCl (mkVP (mkAP (mkAP good_A) (mkS (mkCl she_NP sleep_V))))</CODE> <li>Afr: <I>dit is goed dat sy slaap</I> <li>Bul: <I>е добро , че тя спи</I> <li>Cat: <I>és bo que ella dorm</I> <li>Dan: <I>det er godt at hun sover</I> <li>Dut: <I>'t is goed dat ze slaapt</I> <li>Eng: <I>it is good that she sleeps</I> <li>Fin: <I>on hyvä että hän nukkuu</I> <li>Fre: <I>il est bon qu' elle dort</I> <li>Ger: <I>es ist gut daß sie schläft</I> <li>Ita: <I>è buono che lei dorme</I> <li>Nep: <I>की उनी सुत्छिन् राम्रो छ</I> <li>Nor: <I>det er godt at hun sover</I> <li>Pes: <I>خوب که او می خوابد است</I> <li>Pnb: <I>اچھا كہ او سوندی اے اے</I> <li>Pol: <I>jest dobrze , że ona śpi</I> <li>Ron: <I>este bun cã ea doarme</I> <li>Rus: <I>хорошее , что она спдит</I> <li>Spa: <I>es bueno que ella duerme</I> <li>Swe: <I>det är gott att hon sover</I> <li>Urd: <I>اچھا كہ وہ سوتی ہے ہے</I> </ul> </div> </div></TD>-</TR>-<TR>-<TD><CODE>mkAP</CODE></TD>-<TD><A HREF="#AP" TITLE="AP - adjectival phrase">AP</A> <CODE>-></CODE> <A HREF="#QS" TITLE="QS - question">QS</A> <CODE>-></CODE> <A HREF="#AP" TITLE="AP - adjectival phrase">AP</A></TD>-<TD><div class=reveal> <I>it is uncertain who sleeps</I> <div class=popup> <ul> <li>API: <CODE>mkCl (mkVP (mkAP (mkAP uncertain_A) (mkQS (mkQCl who_IP sleep_V))))</CODE> <li>Afr: <I>dit is onseker wie slaap</I> <li>Bul: <I>е неясно който спи</I> <li>Cat: <I>és incert qui dorm</I> <li>Dan: <I>*</I> <li>Dut: <I>'t is onzeker wie slaapt</I> <li>Eng: <I>it is uncertain who sleeps</I> <li>Fin: <I>on epävarma kuka nukkuu</I> <li>Fre: <I>il est incertain qui dort</I> <li>Ger: <I>es ist unsicher wer schläft</I> <li>Ita: <I>è insicuro chi dorme</I> <li>Nep: <I>को सुत्छन् अनिश्चित छ</I> <li>Nor: <I>*</I> <li>Pes: <I>نامعلوم چه کسی می خوابد است</I> <li>Pnb: <I>*</I> <li>Pol: <I>jest niepewnie , kto śpi</I> <li>Ron: <I>este nesigur cine doarme</I> <li>Rus: <I>*</I> <li>Spa: <I>*</I> <li>Swe: <I>det är osäkert vem som sover</I> <li>Urd: <I>غیریقینی كون سوتا ہے ہے</I> </ul> </div> </div></TD>-</TR>-<TR>-<TD><CODE>mkAP</CODE></TD>-<TD><A HREF="#AP" TITLE="AP - adjectival phrase">AP</A> <CODE>-></CODE> <A HREF="#VP" TITLE="VP - verb phrase">VP</A> <CODE>-></CODE> <A HREF="#AP" TITLE="AP - adjectival phrase">AP</A></TD>-<TD><div class=reveal> <I>she is ready to sleep</I> <div class=popup> <ul> <li>API: <CODE>mkCl she_NP (mkAP (mkAP ready_A) (mkVP sleep_V))</CODE> <li>Afr: <I>sy is reg te slaap</I> <li>Bul: <I>тя е готова да спя</I> <li>Cat: <I>ella és preparata dormir</I> <li>Dan: <I>*</I> <li>Dut: <I>ze is klaar te slapen</I> <li>Eng: <I>she is ready to sleep</I> <li>Fin: <I>hän on valmis nukkua</I> <li>Fre: <I>elle est prête dormir</I> <li>Ger: <I>sie ist fertig zu schlafen</I> <li>Ita: <I>lei è pronta dormire</I> <li>Nep: <I>उनी सुत्न तयार छिन्</I> <li>Nor: <I>*</I> <li>Pes: <I>او آماده خوابیدن است</I> <li>Pnb: <I>*</I> <li>Pol: <I>ona jest <A HREF="exist"> gotowy : the adverb positive form does not</A> spać</I> <li>Ron: <I>ea este pregătită sã doarmă</I> <li>Rus: <I>*</I> <li>Spa: <I>*</I> <li>Swe: <I>hon är färdig att sova</I> <li>Urd: <I>*</I> </ul> </div> </div></TD>-</TR>-<TR>-<TD><CODE>mkAP</CODE></TD>-<TD><A HREF="#AP" TITLE="AP - adjectival phrase">AP</A> <CODE>-></CODE> <A HREF="#SC" TITLE="SC - embedded sentence or question">SC</A> <CODE>-></CODE> <A HREF="#AP" TITLE="AP - adjectival phrase">AP</A></TD>-<TD><div class=reveal> <I>she is ready to sleep</I> <div class=popup> <ul> <li>API: <CODE>mkCl she_NP (mkAP (mkAP ready_A) (mkSC (mkVP sleep_V)))</CODE> <li>Afr: <I>sy is reg te slaap</I> <li>Bul: <I>тя е готова да спя</I> <li>Cat: <I>ella és preparata dormir</I> <li>Dan: <I>*</I> <li>Dut: <I>ze is klaar te slapen</I> <li>Eng: <I>she is ready to sleep</I> <li>Fin: <I>hän on valmis nukkua</I> <li>Fre: <I>elle est prête dormir</I> <li>Ger: <I>sie ist fertig zu schlafen</I> <li>Ita: <I>lei è pronta dormire</I> <li>Nep: <I>उनी सुत्न तयार छिन्</I> <li>Nor: <I>*</I> <li>Pes: <I>او آماده خوابیدن است</I> <li>Pnb: <I>*</I> <li>Pol: <I>ona jest <A HREF="exist"> gotowy : the adverb positive form does not</A> spać</I> <li>Ron: <I>ea este pregătită sã doarmă</I> <li>Rus: <I>*</I> <li>Spa: <I>*</I> <li>Swe: <I>hon är färdig att sova</I> <li>Urd: <I>*</I> </ul> </div> </div></TD>-</TR>-<TR>-<TD><CODE>mkAP</CODE></TD>-<TD><A HREF="#AdA" TITLE="AdA - adjective-modifying adverb">AdA</A> <CODE>-></CODE> <A HREF="#A" TITLE="A - one-place adjective">A</A> <CODE>-></CODE> <A HREF="#AP" TITLE="AP - adjectival phrase">AP</A></TD>-<TD><div class=reveal> <I>very old</I> <div class=popup> <ul> <li>API: <CODE>mkAP very_AdA old_A</CODE> <li>Afr: <I>baie oud</I> <li>Bul: <I>много стар</I> <li>Cat: <I>molt vell</I> <li>Dan: <I>meget gammel</I> <li>Dut: <I>erg oud</I> <li>Eng: <I>very old</I> <li>Fin: <I>erittäin vanha</I> <li>Fre: <I>très vieux</I> <li>Ger: <I>sehr alt</I> <li>Ita: <I>molto vecchio</I> <li>Nep: <I>धेरै बुढो</I> <li>Nor: <I>mye gammel</I> <li>Pes: <I>خیلی پیر</I> <li>Pnb: <I>{s : ParamX.Number => ResPnb.Gender => ResPnb.Case => Str</I> <li>Pol: <I>bardzo stary</I> <li>Ron: <I>foarte vechi</I> <li>Rus: <I>очень старый</I> <li>Spa: <I>muy viejo</I> <li>Swe: <I>mycket gammal</I> <li>Urd: <I>بہت بوڑھا</I> </ul> </div> </div></TD>-</TR>-<TR>-<TD><CODE>mkAP</CODE></TD>-<TD><A HREF="#AdA" TITLE="AdA - adjective-modifying adverb">AdA</A> <CODE>-></CODE> <A HREF="#AP" TITLE="AP - adjectival phrase">AP</A> <CODE>-></CODE> <A HREF="#AP" TITLE="AP - adjectival phrase">AP</A></TD>-<TD><div class=reveal> <I>very very old</I> <div class=popup> <ul> <li>API: <CODE>mkAP very_AdA (mkAP very_AdA old_A)</CODE> <li>Afr: <I>baie baie oud</I> <li>Bul: <I>много много стар</I> <li>Cat: <I>molt molt vell</I> <li>Dan: <I>meget meget gammel</I> <li>Dut: <I>erg erg oud</I> <li>Eng: <I>very very old</I> <li>Fin: <I>erittäin erittäin vanha</I> <li>Fre: <I>très très vieux</I> <li>Ger: <I>sehr sehr alt</I> <li>Ita: <I>molto molto vecchio</I> <li>Nep: <I>धेरै धेरै बुढो</I> <li>Nor: <I>mye mye gammel</I> <li>Pes: <I>خیلی خیلی پیر</I> <li>Pnb: <I>{s : ParamX.Number => ResPnb.Gender => ResPnb.Case => Str</I> <li>Pol: <I>bardzo bardzo stary</I> <li>Ron: <I>foarte foarte vechi</I> <li>Rus: <I>очень очень старый</I> <li>Spa: <I>muy muy viejo</I> <li>Swe: <I>mycket mycket gammal</I> <li>Urd: <I>بہت بہت بوڑھا</I> </ul> </div> </div></TD>-</TR>-<TR>-<TD><CODE>mkAP</CODE></TD>-<TD><A HREF="#Conj" TITLE="Conj - conjunction">Conj</A> <CODE>-></CODE> <A HREF="#AP" TITLE="AP - adjectival phrase">AP</A> <CODE>-></CODE> <A HREF="#AP" TITLE="AP - adjectival phrase">AP</A> <CODE>-></CODE> <A HREF="#AP" TITLE="AP - adjectival phrase">AP</A></TD>-<TD><div class=reveal> <I>old or young</I> <div class=popup> <ul> <li>API: <CODE>mkAP or_Conj (mkAP old_A) (mkAP young_A)</CODE> <li>Afr: <I>oud of jonk</I> <li>Bul: <I>стар или млад</I> <li>Cat: <I>vell o jove</I> <li>Dan: <I>gammel eller ung</I> <li>Dut: <I>oud of jong</I> <li>Eng: <I>old or young</I> <li>Fin: <I>vanha tai nuori</I> <li>Fre: <I>vieux ou jeune</I> <li>Ger: <I>alt oder jung</I> <li>Ita: <I>vecchio o giovane</I> <li>Nep: <I>बुढो अथवा जवान</I> <li>Nor: <I>gammel eller ung</I> <li>Pes: <I>پیر یا جوان</I> <li>Pnb: <I>{s : ParamX.Number => ResPnb.Gender => ResPnb.Case => Str</I> <li>Pol: <I>stary lub młody</I> <li>Ron: <I>vechi sau tânăr</I> <li>Rus: <I>старый или молодой</I> <li>Spa: <I>viejo o joven</I> <li>Swe: <I>gammal eller ung</I> <li>Urd: <I>بوڑھا یا جوان</I> </ul> </div> </div></TD>-</TR>-<TR>-<TD><CODE>mkAP</CODE></TD>-<TD><A HREF="#Conj" TITLE="Conj - conjunction">Conj</A> <CODE>-></CODE> <A HREF="#ListAP">ListAP</A> <CODE>-></CODE> <A HREF="#AP" TITLE="AP - adjectival phrase">AP</A></TD>-<TD><div class=reveal> <I>old , big and warm</I> <div class=popup> <ul> <li>API: <CODE>mkAP and_Conj (mkListAP (mkAP old_A) (mkListAP (mkAP big_A) (mkAP warm_A)))</CODE> <li>Afr: <I>oud , groot en warm</I> <li>Bul: <I>стар , голям и топъл</I> <li>Cat: <I>vell , gros i tebi</I> <li>Dan: <I>gammel , stor og varm</I> <li>Dut: <I>oud , groot en warm</I> <li>Eng: <I>old , big and warm</I> <li>Fin: <I>vanha , suuri ja lämmin</I> <li>Fre: <I>vieux , grand et chaud</I> <li>Ger: <I>alt , groß und warm</I> <li>Ita: <I>vecchio , grande e caldo</I> <li>Nep: <I>बुढो , ठुलो र तातो</I> <li>Nor: <I>gammel , stor og varm</I> <li>Pes: <I>پیر , بزرگ و گرم</I> <li>Pnb: <I>{s : ParamX.Number => ResPnb.Gender => ResPnb.Case => Str</I> <li>Pol: <I>stary , duży i ciepły</I> <li>Ron: <I>vechi , mare şi călduţ</I> <li>Rus: <I>большой , тёплый и старый</I> <li>Spa: <I>viejo , grande y tibio</I> <li>Swe: <I>gammal , stor och varm</I> <li>Urd: <I>بوڑھا , بڑا اور گرم</I> </ul> </div> </div></TD>-</TR>-<TR>-<TD><CODE>mkAP</CODE></TD>-<TD><A HREF="#Ord" TITLE="Ord - ordinal number (used in Det)">Ord</A> <CODE>-></CODE> <A HREF="#AP" TITLE="AP - adjectival phrase">AP</A></TD>-<TD><div class=reveal> <I>oldest</I> <div class=popup> <ul> <li>API: <CODE>mkAP (mkOrd old_A)</CODE> <li>Afr: <I>oudste</I> <li>Bul: <I>най - стар</I> <li>Cat: <I>més vell</I> <li>Dan: <I>ældste</I> <li>Dut: <I>oudst</I> <li>Eng: <I>oldest</I> <li>Fin: <I>vanhin</I> <li>Fre: <I>plus vieux</I> <li>Ger: <I>ältest</I> <li>Ita: <I>più vecchio</I> <li>Nep: <I>सबभन्दा बुढो</I> <li>Nor: <I>eldste</I> <li>Pes: <I>پیر ترین</I> <li>Pnb: <I>بوڈا</I> <li>Pol: <I>najstarszy</I> <li>Ron: <I>cel mai vechi</I> <li>Rus: <I>старый</I> <li>Spa: <I>más viejo</I> <li>Swe: <I>äldsta</I> <li>Urd: <I>سب سے بوڑھا</I> </ul> </div> </div></TD>-</TR>-<TR>-<TD><CODE>mkAP</CODE></TD>-<TD><A HREF="#CAdv" TITLE="CAdv - comparative adverb">CAdv</A> <CODE>-></CODE> <A HREF="#AP" TITLE="AP - adjectival phrase">AP</A> <CODE>-></CODE> <A HREF="#NP" TITLE="NP - noun phrase (subject or object)">NP</A> <CODE>-></CODE> <A HREF="#AP" TITLE="AP - adjectival phrase">AP</A></TD>-<TD><div class=reveal> <I>as old as she</I> <div class=popup> <ul> <li>API: <CODE>mkAP as_CAdv (mkAP old_A) she_NP</CODE> <li>Afr: <I>so oud soos sy</I> <li>Bul: <I>*</I> <li>Cat: <I>tan vell com ella</I> <li>Dan: <I>*</I> <li>Dut: <I>zo oud als ze</I> <li>Eng: <I>as old as she</I> <li>Fin: <I>yhtä vanha kuin hän</I> <li>Fre: <I>aussi vieux qu' elle</I> <li>Ger: <I>ebenso alt wie sie</I> <li>Ita: <I>così vecchio di lei</I> <li>Nep: <I>उनी जत्तीकै बुढो</I> <li>Nor: <I>*</I> <li>Pes: <I>به اندازه ی او پیر</I> <li>Pnb: <I>{s : ParamX.Number => ResPnb.Gender => ResPnb.Case => Str</I> <li>Pol: <I>tak stary jak ona</I> <li>Ron: <I>cel la fel de vechi ca ea</I> <li>Rus: <I>*</I> <li>Spa: <I>si viejo que ella</I> <li>Swe: <I>lika gammal som hon</I> <li>Urd: <I>اتنا بوڑھا جتنا وہ</I> </ul> </div> </div></TD>-</TR>-<TR>-<TD><CODE>reflAP</CODE></TD>-<TD><A HREF="#A2" TITLE="A2 - two-place adjective">A2</A> <CODE>-></CODE> <A HREF="#AP" TITLE="AP - adjectival phrase">AP</A></TD>-<TD><div class=reveal> <I>married to itself</I> <div class=popup> <ul> <li>API: <CODE>mkUtt (reflAP married_A2)</CODE> <li>Afr: <I>getroud met hom</I> <li>Bul: <I>женен за себе си</I> <li>Cat: <I>casat a sÌ</I> <li>Dan: <I>gift med sig</I> <li>Dut: <I>getrouwd met zich</I> <li>Eng: <I>married to itself</I> <li>Fin: <I>avioitunut itsensä kanssa</I> <li>Fre: <I>marié à soi</I> <li>Ger: <I>verheiratet mit sich</I> <li>Ita: <I>sposato con se</I> <li>Nep: <I>आफै सँग विवाहित</I> <li>Nor: <I>gift med seg</I> <li>Pes: <I>متأهل</I> <li>Pnb: <I>*</I> <li>Pol: <I>zaślubiony sobie</I> <li>Ron: <I>căsătorit cu sine însuşi</I> <li>Rus: <I>замужем за собой</I> <li>Spa: <I>casado a sí</I> <li>Swe: <I>gift med sig</I> <li>Urd: <I>[شادی كرنa] خود سے</I> </ul> </div> </div></TD>-</TR>-</TABLE>--<A NAME="AdA"></A>-<H2>AdA - adjective-modifying adverb</H2>--<TABLE BORDER="1" CELLPADDING="4">-<TR>-<TH>Function</TH>-<TH>Type</TH>-<TH COLSPAN="2">Example</TH>-</TR>-<TR>-<TD><CODE>almost_AdA</CODE></TD>-<TD><A HREF="#AdA" TITLE="AdA - adjective-modifying adverb">AdA</A></TD>-<TD><div class=reveal> <I>almost red</I> <div class=popup> <ul> <li>API: <CODE>mkAP almost_AdA red_A</CODE> <li>Afr: <I>byna rooi</I> <li>Bul: <I>почти червен</I> <li>Cat: <I>{s : CommonRomance.AForm => Str</I> <li>Dan: <I>næsten rød</I> <li>Dut: <I>bijna rood</I> <li>Eng: <I>almost red</I> <li>Fin: <I>melkein punainen</I> <li>Fre: <I>presque rouge</I> <li>Ger: <I>fast rot</I> <li>Ita: <I>quasi rosso</I> <li>Nep: <I>झण्डै रातो</I> <li>Nor: <I>nesten rød</I> <li>Pes: <I>تقریباً قرمز</I> <li>Pnb: <I>تقریبا لال</I> <li>Pol: <I>prawie czerwony</I> <li>Ron: <I>aproape roşu</I> <li>Rus: <I>почти красный</I> <li>Spa: <I>casi rojo</I> <li>Swe: <I>nästan röd</I> <li>Urd: <I>تقریبا لال</I> </ul> </div> </div></TD>-</TR>-<TR>-<TD><CODE>quite_Adv</CODE></TD>-<TD><A HREF="#AdA" TITLE="AdA - adjective-modifying adverb">AdA</A></TD>-<TD><div class=reveal> <I>quite</I> <div class=popup> <ul> <li>API: <CODE>quite_Adv</CODE> <li>Afr: <I>heel</I> <li>Bul: <I>доста</I> <li>Cat: <I>bastant</I> <li>Dan: <I>temmelig</I> <li>Dut: <I>heel</I> <li>Eng: <I>quite</I> <li>Fin: <I>melko</I> <li>Fre: <I>assez</I> <li>Ger: <I>ziemlich</I> <li>Ita: <I>assai</I> <li>Nep: <I>एकदम</I> <li>Nor: <I>temmelig</I> <li>Pes: <I>کاملاً</I> <li>Pnb: <I>كہامoسہ</I> <li>Pol: <I>całkiem</I> <li>Ron: <I>chiar</I> <li>Rus: <I>довольно</I> <li>Spa: <I>bastante</I> <li>Swe: <I>ganska</I> <li>Urd: <I>خاموش</I> </ul> </div> </div></TD>-</TR>-<TR>-<TD><CODE>so_AdA</CODE></TD>-<TD><A HREF="#AdA" TITLE="AdA - adjective-modifying adverb">AdA</A></TD>-<TD><div class=reveal> <I>so</I> <div class=popup> <ul> <li>API: <CODE>so_AdA</CODE> <li>Afr: <I>so</I> <li>Bul: <I>толкова</I> <li>Cat: <I>tan</I> <li>Dan: <I>så</I> <li>Dut: <I>zo</I> <li>Eng: <I>so</I> <li>Fin: <I>niin</I> <li>Fre: <I>si</I> <li>Ger: <I>so</I> <li>Ita: <I>così</I> <li>Nep: <I>यस कारण</I> <li>Nor: <I>så</I> <li>Pes: <I>بسیار</I> <li>Pnb: <I>سo</I> <li>Pol: <I>tak</I> <li>Ron: <I>aşa</I> <li>Rus: <I>так</I> <li>Spa: <I>tanto</I> <li>Swe: <I>så</I> <li>Urd: <I>[اس لیE]</I> </ul> </div> </div></TD>-</TR>-<TR>-<TD><CODE>too_AdA</CODE></TD>-<TD><A HREF="#AdA" TITLE="AdA - adjective-modifying adverb">AdA</A></TD>-<TD><div class=reveal> <I>too</I> <div class=popup> <ul> <li>API: <CODE>too_AdA</CODE> <li>Afr: <I>te</I> <li>Bul: <I>прекалено</I> <li>Cat: <I>massa</I> <li>Dan: <I>for</I> <li>Dut: <I>te</I> <li>Eng: <I>too</I> <li>Fin: <I>liian</I> <li>Fre: <I>trop</I> <li>Ger: <I>zu</I> <li>Ita: <I>troppo</I> <li>Nep: <I>पनि</I> <li>Nor: <I>for</I> <li>Pes: <I>خیلی</I> <li>Pnb: <I>بہت</I> <li>Pol: <I>za</I> <li>Ron: <I>prea</I> <li>Rus: <I>слишком</I> <li>Spa: <I>demasiado</I> <li>Swe: <I>för</I> <li>Urd: <I>بہت</I> </ul> </div> </div></TD>-</TR>-<TR>-<TD><CODE>very_AdA</CODE></TD>-<TD><A HREF="#AdA" TITLE="AdA - adjective-modifying adverb">AdA</A></TD>-<TD><div class=reveal> <I>very</I> <div class=popup> <ul> <li>API: <CODE>very_AdA</CODE> <li>Afr: <I>baie</I> <li>Bul: <I>много</I> <li>Cat: <I>molt</I> <li>Dan: <I>meget</I> <li>Dut: <I>erg</I> <li>Eng: <I>very</I> <li>Fin: <I>erittäin</I> <li>Fre: <I>très</I> <li>Ger: <I>sehr</I> <li>Ita: <I>molto</I> <li>Nep: <I>धेरै</I> <li>Nor: <I>mye</I> <li>Pes: <I>خیلی</I> <li>Pnb: <I>بہت</I> <li>Pol: <I>bardzo</I> <li>Ron: <I>foarte</I> <li>Rus: <I>очень</I> <li>Spa: <I>muy</I> <li>Swe: <I>mycket</I> <li>Urd: <I>بہت</I> </ul> </div> </div></TD>-</TR>-</TABLE>--<A NAME="AdN"></A>-<H2>AdN - numeral-modifying adverb</H2>--<TABLE BORDER="1" CELLPADDING="4">-<TR>-<TH>Function</TH>-<TH>Type</TH>-<TH COLSPAN="2">Example</TH>-</TR>-<TR>-<TD><CODE>almost_AdN</CODE></TD>-<TD><A HREF="#AdN" TITLE="AdN - numeral-modifying adverb">AdN</A></TD>-<TD><div class=reveal> <I>almost eight</I> <div class=popup> <ul> <li>API: <CODE>mkCard almost_AdN (mkCard (mkNumeral n8_Unit))</CODE> <li>Afr: <I>byna agt</I> <li>Bul: <I>почти осмина</I> <li>Cat: <I>{s : CommonRomance.Gender => Str</I> <li>Dan: <I>næsten otte</I> <li>Dut: <I>bijna acht</I> <li>Eng: <I>almost eight</I> <li>Fin: <I>melkein kahdeksan</I> <li>Fre: <I>presque huit</I> <li>Ger: <I>fast acht</I> <li>Ita: <I>quasi otto</I> <li>Nep: <I>झण्डै आठ</I> <li>Nor: <I>nesten åtte</I> <li>Pes: <I>تقریباً هشت</I> <li>Pnb: <I>تقریبا اٹھ</I> <li>Pol: <I>prawie osiemm</I> <li>Ron: <I>aproape opt</I> <li>Rus: <I>почти восемь</I> <li>Spa: <I>casi ocho</I> <li>Swe: <I>nästan åtta</I> <li>Urd: <I>تقریبا آٹھ</I> </ul> </div> </div></TD>-</TR>-<TR>-<TD><CODE>at_least_AdN</CODE></TD>-<TD><A HREF="#AdN" TITLE="AdN - numeral-modifying adverb">AdN</A></TD>-<TD><div class=reveal> <I>at least eight</I> <div class=popup> <ul> <li>API: <CODE>mkCard at_least_AdN (mkCard (mkNumeral n8_Unit))</CODE> <li>Afr: <I>ten minste agt</I> <li>Bul: <I>*</I> <li>Cat: <I>almenys vuit</I> <li>Dan: <I>*</I> <li>Dut: <I>ten minste acht</I> <li>Eng: <I>at least eight</I> <li>Fin: <I>vähintään kahdeksan</I> <li>Fre: <I>au moins huit</I> <li>Ger: <I>wenigstens acht</I> <li>Ita: <I>almeno otto</I> <li>Nep: <I>कमसेकम आठ</I> <li>Nor: <I>*</I> <li>Pes: <I>حداقل هشت</I> <li>Pnb: <I>كم توں كم اٹھ</I> <li>Pol: <I>co najmniej osiemm</I> <li>Ron: <I>cel puţin opt</I> <li>Rus: <I>*</I> <li>Spa: <I>*</I> <li>Swe: <I>minst åtta</I> <li>Urd: <I>كم از كم آٹھ</I> </ul> </div> </div></TD>-</TR>-<TR>-<TD><CODE>at_most_AdN</CODE></TD>-<TD><A HREF="#AdN" TITLE="AdN - numeral-modifying adverb">AdN</A></TD>-<TD><div class=reveal> <I>at most eight</I> <div class=popup> <ul> <li>API: <CODE>mkCard at_most_AdN (mkCard (mkNumeral n8_Unit))</CODE> <li>Afr: <I>hoogstens agt</I> <li>Bul: <I>*</I> <li>Cat: <I>com a màxim vuit</I> <li>Dan: <I>*</I> <li>Dut: <I>hooguit acht</I> <li>Eng: <I>at most eight</I> <li>Fin: <I>enintään kahdeksan</I> <li>Fre: <I>au plus huit</I> <li>Ger: <I>höchstens acht</I> <li>Ita: <I>al massimo otto</I> <li>Nep: <I>बढीमा आठ</I> <li>Nor: <I>*</I> <li>Pes: <I>حداکثر هشت</I> <li>Pnb: <I>زیادہ توں زیادہ اٹھ</I> <li>Pol: <I>co najwyżej osiemm</I> <li>Ron: <I>cel mult opt</I> <li>Rus: <I>*</I> <li>Spa: <I>*</I> <li>Swe: <I>högst åtta</I> <li>Urd: <I>زیادہ سے زیادہ آٹھ</I> </ul> </div> </div></TD>-</TR>-<TR>-<TD><CODE>mkAdN</CODE></TD>-<TD><A HREF="#CAdv" TITLE="CAdv - comparative adverb">CAdv</A> <CODE>-></CODE> <A HREF="#AdN" TITLE="AdN - numeral-modifying adverb">AdN</A></TD>-<TD><div class=reveal> <I>more than eight</I> <div class=popup> <ul> <li>API: <CODE>mkCard (mkAdN more_CAdv) (mkCard (mkNumeral n8_Unit))</CODE> <li>Afr: <I>meer as agt</I> <li>Bul: <I>повече от осмина</I> <li>Cat: <I>més que vuit</I> <li>Dan: <I>mer end otte</I> <li>Dut: <I>meer dan acht</I> <li>Eng: <I>more than eight</I> <li>Fin: <I>enemmän kuin kahdeksan</I> <li>Fre: <I>plus qu' huit</I> <li>Ger: <I>mehr als acht</I> <li>Ita: <I>più di otto</I> <li>Nep: <I>भन्दा बढी आठ</I> <li>Nor: <I>mer enn åtte</I> <li>Pes: <I>بیشتر از هشت</I> <li>Pnb: <I>نالوں ہور اٹھ</I> <li>Pol: <I>więcej niż osiemm</I> <li>Ron: <I>mai mult decât opt</I> <li>Rus: <I>более чем восемь</I> <li>Spa: <I>más que ocho</I> <li>Swe: <I>mer än åtta</I> <li>Urd: <I>آٹھ سے زیادہ</I> </ul> </div> </div></TD>-</TR>-</TABLE>--<A NAME="AdV"></A>-<H2>AdV - adverb directly attached to verb</H2>--<TABLE BORDER="1" CELLPADDING="4">-<TR>-<TH>Function</TH>-<TH>Type</TH>-<TH COLSPAN="2">Example</TH>-</TR>-<TR>-<TD><CODE>always_AdV</CODE></TD>-<TD><A HREF="#AdV" TITLE="Adv - verb-phrase-modifying adverb">AdV</A></TD>-<TD><div class=reveal> <I>always</I> <div class=popup> <ul> <li>API: <CODE>always_AdV</CODE> <li>Afr: <I>altyd</I> <li>Bul: <I>винаги</I> <li>Cat: <I>sempre</I> <li>Dan: <I>altid</I> <li>Dut: <I>altijd</I> <li>Eng: <I>always</I> <li>Fin: <I>aina</I> <li>Fre: <I>toujours</I> <li>Ger: <I>immer</I> <li>Ita: <I>sempre</I> <li>Nep: <I>सधैँ</I> <li>Nor: <I>altid</I> <li>Pes: <I>همیشه</I> <li>Pnb: <I>ہمیشہ</I> <li>Pol: <I>zawsze</I> <li>Ron: <I>mereu</I> <li>Rus: <I>всегда</I> <li>Spa: <I>siempre</I> <li>Swe: <I>alltid</I> <li>Urd: <I>ہمیشہ</I> </ul> </div> </div></TD>-</TR>-</TABLE>--<A NAME="Adv"></A>-<H2>Adv - verb-phrase-modifying adverb</H2>--<TABLE BORDER="1" CELLPADDING="4">-<TR>-<TH>Function</TH>-<TH>Type</TH>-<TH COLSPAN="2">Example</TH>-</TR>-<TR>-<TD><CODE>everywhere_Adv</CODE></TD>-<TD><A HREF="#Adv" TITLE="Adv - verb-phrase-modifying adverb">Adv</A></TD>-<TD><div class=reveal> <I>everywhere</I> <div class=popup> <ul> <li>API: <CODE>everywhere_Adv</CODE> <li>Afr: <I>oral</I> <li>Bul: <I>навсякъде</I> <li>Cat: <I>a tot arreu</I> <li>Dan: <I>overalt</I> <li>Dut: <I>overal</I> <li>Eng: <I>everywhere</I> <li>Fin: <I>kaikkialla</I> <li>Fre: <I>partout</I> <li>Ger: <I>überall</I> <li>Ita: <I>dappertutto</I> <li>Nep: <I>जाता ततै</I> <li>Nor: <I>overalt</I> <li>Pes: <I>هر جا</I> <li>Pnb: <I>ہر تھاں</I> <li>Pol: <I>wszędzie</I> <li>Ron: <I>pretutindeni</I> <li>Rus: <I>везде</I> <li>Spa: <I>en todas partes</I> <li>Swe: <I>överallt</I> <li>Urd: <I>ہر جگہ</I> </ul> </div> </div></TD>-</TR>-<TR>-<TD><CODE>here7from_Adv</CODE></TD>-<TD><A HREF="#Adv" TITLE="Adv - verb-phrase-modifying adverb">Adv</A></TD>-<TD><div class=reveal> <I>from here</I> <div class=popup> <ul> <li>API: <CODE>here7from_Adv</CODE> <li>Afr: <I>van hier</I> <li>Bul: <I>от тук</I> <li>Cat: <I>d'aquí</I> <li>Dan: <I>herfra</I> <li>Dut: <I>van hier</I> <li>Eng: <I>from here</I> <li>Fin: <I>täältä</I> <li>Fre: <I>d'ici</I> <li>Ger: <I>hieraus</I> <li>Ita: <I>da quà</I> <li>Nep: <I>यहाँ बाट</I> <li>Nor: <I>herfra</I> <li>Pes: <I>اینجا</I> <li>Pnb: <I>ایتھوں</I> <li>Pol: <I>stąd</I> <li>Ron: <I>de aici</I> <li>Rus: <I>отсюда</I> <li>Spa: <I>de acá</I> <li>Swe: <I>härifrån</I> <li>Urd: <I>یہاں سے</I> </ul> </div> </div></TD>-</TR>-<TR>-<TD><CODE>here7to_Adv</CODE></TD>-<TD><A HREF="#Adv" TITLE="Adv - verb-phrase-modifying adverb">Adv</A></TD>-<TD><div class=reveal> <I>to here</I> <div class=popup> <ul> <li>API: <CODE>here7to_Adv</CODE> <li>Afr: <I>hier</I> <li>Bul: <I>до тук</I> <li>Cat: <I>cap aquí</I> <li>Dan: <I>hit</I> <li>Dut: <I>hier</I> <li>Eng: <I>to here</I> <li>Fin: <I>tänne</I> <li>Fre: <I>ici</I> <li>Ger: <I>hierher</I> <li>Ita: <I>quà</I> <li>Nep: <I>यहाँ सम्म</I> <li>Nor: <I>hit</I> <li>Pes: <I>اینجا</I> <li>Pnb: <I>ایتھے</I> <li>Pol: <I>tutaj</I> <li>Ron: <I>până aici</I> <li>Rus: <I>сюда</I> <li>Spa: <I>para acá</I> <li>Swe: <I>hit</I> <li>Urd: <I>یہاں پر</I> </ul> </div> </div></TD>-</TR>-<TR>-<TD><CODE>here_Adv</CODE></TD>-<TD><A HREF="#Adv" TITLE="Adv - verb-phrase-modifying adverb">Adv</A></TD>-<TD><div class=reveal> <I>here</I> <div class=popup> <ul> <li>API: <CODE>here_Adv</CODE> <li>Afr: <I>hier</I> <li>Bul: <I>тук</I> <li>Cat: <I>aquí</I> <li>Dan: <I>her</I> <li>Dut: <I>hier</I> <li>Eng: <I>here</I> <li>Fin: <I>täällä</I> <li>Fre: <I>ici</I> <li>Ger: <I>hier</I> <li>Ita: <I>quà</I> <li>Nep: <I>यहाँ</I> <li>Nor: <I>her</I> <li>Pes: <I>اینجا</I> <li>Pnb: <I>ایتھے</I> <li>Pol: <I>tutaj</I> <li>Ron: <I>aici</I> <li>Rus: <I>здесь</I> <li>Spa: <I>aquí</I> <li>Swe: <I>här</I> <li>Urd: <I>یہاں</I> </ul> </div> </div></TD>-</TR>-<TR>-<TD><CODE>mkAdv</CODE></TD>-<TD><A HREF="#A" TITLE="A - one-place adjective">A</A> <CODE>-></CODE> <A HREF="#Adv" TITLE="Adv - verb-phrase-modifying adverb">Adv</A></TD>-<TD><div class=reveal> <I>warmly</I> <div class=popup> <ul> <li>API: <CODE>mkAdv warm_A</CODE> <li>Afr: <I>warm</I> <li>Bul: <I>топло</I> <li>Cat: <I>tèbiament</I> <li>Dan: <I>varmt</I> <li>Dut: <I>warm</I> <li>Eng: <I>warmly</I> <li>Fin: <I>lämpimästi</I> <li>Fre: <I>chaudement</I> <li>Ger: <I>warm</I> <li>Ita: <I>caldamente</I> <li>Nep: <I>तातो गरी</I> <li>Nor: <I>varmt</I> <li>Pes: <I>گرم</I> <li>Pnb: <I>تتے</I> <li>Pol: <I>ciepło</I> <li>Ron: <I>călduros</I> <li>Rus: <I>тёпло</I> <li>Spa: <I>tibiamente</I> <li>Swe: <I>varmt</I> <li>Urd: <I>گرم</I> </ul> </div> </div></TD>-</TR>-<TR>-<TD><CODE>mkAdv</CODE></TD>-<TD><A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A> <CODE>-></CODE> <A HREF="#NP" TITLE="NP - noun phrase (subject or object)">NP</A> <CODE>-></CODE> <A HREF="#Adv" TITLE="Adv - verb-phrase-modifying adverb">Adv</A></TD>-<TD><div class=reveal> <I>in the house</I> <div class=popup> <ul> <li>API: <CODE>mkAdv in_Prep (mkNP the_Det house_N)</CODE> <li>Afr: <I>in die huis</I> <li>Bul: <I>в къщата</I> <li>Cat: <I>en la casa</I> <li>Dan: <I>i huset</I> <li>Dut: <I>in het huis</I> <li>Eng: <I>in the house</I> <li>Fin: <I>talossa</I> <li>Fre: <I>dans la maison</I> <li>Ger: <I>im Haus / Hause</I> <li>Ita: <I>nella casa</I> <li>Nep: <I>घर मा</I> <li>Nor: <I>i huset</I> <li>Pes: <I>در خانه</I> <li>Pnb: <I>گھر وچ</I> <li>Pol: <I>w domu</I> <li>Ron: <I>în casă</I> <li>Rus: <I>в доме</I> <li>Spa: <I>en la casa</I> <li>Swe: <I>i huset</I> <li>Urd: <I>گھر میں</I> </ul> </div> </div></TD>-</TR>-<TR>-<TD><CODE>mkAdv</CODE></TD>-<TD><A HREF="#Subj" TITLE="Subj - subjunction">Subj</A> <CODE>-></CODE> <A HREF="#S" TITLE="S - declarative sentence">S</A> <CODE>-></CODE> <A HREF="#Adv" TITLE="Adv - verb-phrase-modifying adverb">Adv</A></TD>-<TD><div class=reveal> <I>when she sleeps</I> <div class=popup> <ul> <li>API: <CODE>mkAdv when_Subj (mkS (mkCl she_NP sleep_V))</CODE> <li>Afr: <I>as sy slaap</I> <li>Bul: <I>когато тя спи</I> <li>Cat: <I>quan ella dorm</I> <li>Dan: <I>når hun sover</I> <li>Dut: <I>als ze slaapt</I> <li>Eng: <I>when she sleeps</I> <li>Fin: <I>kun hän nukkuu</I> <li>Fre: <I>quand elle dort</I> <li>Ger: <I>wenn sie schläft</I> <li>Ita: <I>quando lei dorme</I> <li>Nep: <I>कहिले उनी सुत्छिन्</I> <li>Nor: <I>når hun sover</I> <li>Pes: <I>وقتی که او می خوابد</I> <li>Pnb: <I>كدوں او سوندی اے</I> <li>Pol: <I>jeśli ona śpi</I> <li>Ron: <I>când ea doarme</I> <li>Rus: <I>когда она спдит</I> <li>Spa: <I>cuando ella duerme</I> <li>Swe: <I>när hon sover</I> <li>Urd: <I>جب وہ سوتی ہے</I> </ul> </div> </div></TD>-</TR>-<TR>-<TD><CODE>mkAdv</CODE></TD>-<TD><A HREF="#CAdv" TITLE="CAdv - comparative adverb">CAdv</A> <CODE>-></CODE> <A HREF="#A" TITLE="A - one-place adjective">A</A> <CODE>-></CODE> <A HREF="#NP" TITLE="NP - noun phrase (subject or object)">NP</A> <CODE>-></CODE> <A HREF="#Adv" TITLE="Adv - verb-phrase-modifying adverb">Adv</A></TD>-<TD><div class=reveal> <I>more warmly than he</I> <div class=popup> <ul> <li>API: <CODE>mkAdv more_CAdv warm_A he_NP</CODE> <li>Afr: <I>meer warm as hy</I> <li>Bul: <I>по - топло от него</I> <li>Cat: <I>més tèbiament que ell</I> <li>Dan: <I>mer varmt end han</I> <li>Dut: <I>meer warm dan hij</I> <li>Eng: <I>more warmly than he</I> <li>Fin: <I>enemmän lämpimästi kuin hän</I> <li>Fre: <I>plus chaudement que lui</I> <li>Ger: <I>mehr warm als er</I> <li>Ita: <I>più caldamente di lui</I> <li>Nep: <I>उ भन्दा बढी तातो</I> <li>Nor: <I>mer varmt enn han</I> <li>Pes: <I>گرم بیشتر او</I> <li>Pnb: <I>اونوں ہور تتے</I> <li>Pol: <I>bardziej ciepło niż on</I> <li>Ron: <I>mai călduros decât el</I> <li>Rus: <I>более тёпло чем он</I> <li>Spa: <I>más tibiamente que él</I> <li>Swe: <I>mer varmt än han</I> <li>Urd: <I>اس سے زیادہ گرم</I> </ul> </div> </div></TD>-</TR>-<TR>-<TD><CODE>mkAdv</CODE></TD>-<TD><A HREF="#CAdv" TITLE="CAdv - comparative adverb">CAdv</A> <CODE>-></CODE> <A HREF="#A" TITLE="A - one-place adjective">A</A> <CODE>-></CODE> <A HREF="#S" TITLE="S - declarative sentence">S</A> <CODE>-></CODE> <A HREF="#Adv" TITLE="Adv - verb-phrase-modifying adverb">Adv</A></TD>-<TD><div class=reveal> <I>more warmly than he runs</I> <div class=popup> <ul> <li>API: <CODE>mkAdv more_CAdv warm_A (mkS (mkCl he_NP run_V))</CODE> <li>Afr: <I>meer warm as hy hardloop</I> <li>Bul: <I>по - топло от колкото той бяга</I> <li>Cat: <I>més tèbiament que ell corri</I> <li>Dan: <I>mer varmt end han løber</I> <li>Dut: <I>meer warm dan hij rent</I> <li>Eng: <I>more warmly than he runs</I> <li>Fin: <I>enemmän lämpimästi kuin hän juoksee</I> <li>Fre: <I>plus chaudement qu' il coure</I> <li>Ger: <I>mehr warm als er läuft</I> <li>Ita: <I>più caldamente di lui corra</I> <li>Nep: <I>भन्दा बढी तातो उ कुद्छ</I> <li>Nor: <I>mer varmt enn han springer</I> <li>Pes: <I>گرم بیشتر او می دود</I> <li>Pnb: <I>ہور تتے او دوڑدا اے</I> <li>Pol: <I>bardziej ciepło niż on biegnie</I> <li>Ron: <I>mai călduros decât el fuge</I> <li>Rus: <I>более тёпло чем он бегает</I> <li>Spa: <I>más tibiamente que el corra</I> <li>Swe: <I>mer varmt än han springer</I> <li>Urd: <I>سے زیادہ گرم وہ دوڑتا ہے</I> </ul> </div> </div></TD>-</TR>-<TR>-<TD><CODE>mkAdv</CODE></TD>-<TD><A HREF="#AdA" TITLE="AdA - adjective-modifying adverb">AdA</A> <CODE>-></CODE> <A HREF="#Adv" TITLE="Adv - verb-phrase-modifying adverb">Adv</A> <CODE>-></CODE> <A HREF="#Adv" TITLE="Adv - verb-phrase-modifying adverb">Adv</A></TD>-<TD><div class=reveal> <I>very warmly</I> <div class=popup> <ul> <li>API: <CODE>mkAdv very_AdA (mkAdv warm_A)</CODE> <li>Afr: <I>baie warm</I> <li>Bul: <I>много топло</I> <li>Cat: <I>molt tèbiament</I> <li>Dan: <I>meget varmt</I> <li>Dut: <I>erg warm</I> <li>Eng: <I>very warmly</I> <li>Fin: <I>erittäin lämpimästi</I> <li>Fre: <I>très chaudement</I> <li>Ger: <I>sehr warm</I> <li>Ita: <I>molto caldamente</I> <li>Nep: <I>धेरै तातो गरी</I> <li>Nor: <I>mye varmt</I> <li>Pes: <I>خیلی گرم</I> <li>Pnb: <I>بہت تتے</I> <li>Pol: <I>bardzo ciepło</I> <li>Ron: <I>foarte călduros</I> <li>Rus: <I>очень тёпло</I> <li>Spa: <I>muy tibiamente</I> <li>Swe: <I>mycket varmt</I> <li>Urd: <I>بہت گرم</I> </ul> </div> </div></TD>-</TR>-<TR>-<TD><CODE>mkAdv</CODE></TD>-<TD><A HREF="#Conj" TITLE="Conj - conjunction">Conj</A> <CODE>-></CODE> <A HREF="#Adv" TITLE="Adv - verb-phrase-modifying adverb">Adv</A> <CODE>-></CODE> <A HREF="#Adv" TITLE="Adv - verb-phrase-modifying adverb">Adv</A> <CODE>-></CODE> <A HREF="#Adv" TITLE="Adv - verb-phrase-modifying adverb">Adv</A></TD>-<TD><div class=reveal> <I>here and now</I> <div class=popup> <ul> <li>API: <CODE>mkAdv and_Conj here_Adv now_Adv</CODE> <li>Afr: <I>hier en nou</I> <li>Bul: <I>тук и сега</I> <li>Cat: <I>aquí i ara</I> <li>Dan: <I>her og nu</I> <li>Dut: <I>hier en nu</I> <li>Eng: <I>here and now</I> <li>Fin: <I>täällä ja nyt</I> <li>Fre: <I>ici et maintenant</I> <li>Ger: <I>hier und jetzt</I> <li>Ita: <I>quà e adesso</I> <li>Nep: <I>यहाँ र अहीले</I> <li>Nor: <I>her og nå</I> <li>Pes: <I>اینجا و حالا</I> <li>Pnb: <I>ایتھے تے ہون</I> <li>Pol: <I>tutaj i teraz</I> <li>Ron: <I>aici şi acum</I> <li>Rus: <I>здесь и сейчас</I> <li>Spa: <I>aquí y ahora</I> <li>Swe: <I>här och nu</I> <li>Urd: <I>یہاں اور اب</I> </ul> </div> </div></TD>-</TR>-<TR>-<TD><CODE>mkAdv</CODE></TD>-<TD><A HREF="#Conj" TITLE="Conj - conjunction">Conj</A> <CODE>-></CODE> <A HREF="#ListAdv">ListAdv</A> <CODE>-></CODE> <A HREF="#Adv" TITLE="Adv - verb-phrase-modifying adverb">Adv</A></TD>-<TD><div class=reveal> <I>with her , here and now</I> <div class=popup> <ul> <li>API: <CODE>mkAdv and_Conj (mkListAdv (mkAdv with_Prep she_NP) (mkListAdv here_Adv now_Adv))</CODE> <li>Afr: <I>met haar , hier en nou</I> <li>Bul: <I>с нея , тук и сега</I> <li>Cat: <I>amb ella , aquí i ara</I> <li>Dan: <I>med hende , her og nu</I> <li>Dut: <I>met haar , hier en nu</I> <li>Eng: <I>with her , here and now</I> <li>Fin: <I>hänen kanssa , täällä ja nyt</I> <li>Fre: <I>avec elle , ici et maintenant</I> <li>Ger: <I>mit ihr , hier und jetzt</I> <li>Ita: <I>con lei , quà e adesso</I> <li>Nep: <I>उनी सँग , यहाँ र अहीले</I> <li>Nor: <I>med henne , her og nå</I> <li>Pes: <I>با او , اینجا و حالا</I> <li>Pnb: <I>اونوں دے نال , ایتھے تے ہون</I> <li>Pol: <I>z nią , tutaj i teraz</I> <li>Ron: <I>cu ea , aici şi acum</I> <li>Rus: <I>с ней , здесь и сейчас</I> <li>Spa: <I>con ella , aquí y ahora</I> <li>Swe: <I>med henne , här och nu</I> <li>Urd: <I>اس كے ساتھ , یہاں اور اب</I> </ul> </div> </div></TD>-</TR>-<TR>-<TD><CODE>somewhere_Adv</CODE></TD>-<TD><A HREF="#Adv" TITLE="Adv - verb-phrase-modifying adverb">Adv</A></TD>-<TD><div class=reveal> <I>somewhere</I> <div class=popup> <ul> <li>API: <CODE>somewhere_Adv</CODE> <li>Afr: <I>êrens</I> <li>Bul: <I>някъде</I> <li>Cat: <I>a algun lloc</I> <li>Dan: <I>et eller annet sted</I> <li>Dut: <I>ergens</I> <li>Eng: <I>somewhere</I> <li>Fin: <I>jossain</I> <li>Fre: <I>quelque part</I> <li>Ger: <I>irgendwo</I> <li>Ita: <I>qualche parte</I> <li>Nep: <I>कहीं</I> <li>Nor: <I>et eller annet sted</I> <li>Pes: <I>جایی</I> <li>Pnb: <I>كتلے</I> <li>Pol: <I>gdzieś</I> <li>Ron: <I>undeva</I> <li>Rus: <I>где-нибудь</I> <li>Spa: <I>en ninguna parte</I> <li>Swe: <I>någonstans</I> <li>Urd: <I>كہیں پر</I> </ul> </div> </div></TD>-</TR>-<TR>-<TD><CODE>there7from_Adv</CODE></TD>-<TD><A HREF="#Adv" TITLE="Adv - verb-phrase-modifying adverb">Adv</A></TD>-<TD><div class=reveal> <I>from there</I> <div class=popup> <ul> <li>API: <CODE>there7from_Adv</CODE> <li>Afr: <I>van daar</I> <li>Bul: <I>от там</I> <li>Cat: <I>d'allà</I> <li>Dan: <I>derfra</I> <li>Dut: <I>van daar</I> <li>Eng: <I>from there</I> <li>Fin: <I>sieltä</I> <li>Fre: <I>de là</I> <li>Ger: <I>daher</I> <li>Ita: <I>di là</I> <li>Nep: <I>त्यहाँ बाट</I> <li>Nor: <I>derfra</I> <li>Pes: <I>آنجا</I> <li>Pnb: <I>اوتھوں</I> <li>Pol: <I>stamtąd</I> <li>Ron: <I>de acolo</I> <li>Rus: <I>оттуда</I> <li>Spa: <I>de allá</I> <li>Swe: <I>därifrån</I> <li>Urd: <I>وہاں سے</I> </ul> </div> </div></TD>-</TR>-<TR>-<TD><CODE>there7to_Adv</CODE></TD>-<TD><A HREF="#Adv" TITLE="Adv - verb-phrase-modifying adverb">Adv</A></TD>-<TD><div class=reveal> <I>there</I> <div class=popup> <ul> <li>API: <CODE>there7to_Adv</CODE> <li>Afr: <I>daar</I> <li>Bul: <I>до там</I> <li>Cat: <I>cap a allà</I> <li>Dan: <I>dit</I> <li>Dut: <I>daar</I> <li>Eng: <I>there</I> <li>Fin: <I>sinne</I> <li>Fre: <I>là</I> <li>Ger: <I>dahin</I> <li>Ita: <I>là</I> <li>Nep: <I>त्यहाँ सम्म</I> <li>Nor: <I>dit</I> <li>Pes: <I>آنجا</I> <li>Pnb: <I>اوتھے</I> <li>Pol: <I>tam</I> <li>Ron: <I>până acolo</I> <li>Rus: <I>туда</I> <li>Spa: <I>para allá</I> <li>Swe: <I>dit</I> <li>Urd: <I>وہاں پر</I> </ul> </div> </div></TD>-</TR>-<TR>-<TD><CODE>there_Adv</CODE></TD>-<TD><A HREF="#Adv" TITLE="Adv - verb-phrase-modifying adverb">Adv</A></TD>-<TD><div class=reveal> <I>there</I> <div class=popup> <ul> <li>API: <CODE>there_Adv</CODE> <li>Afr: <I>daar</I> <li>Bul: <I>там</I> <li>Cat: <I>allà</I> <li>Dan: <I>der</I> <li>Dut: <I>daar</I> <li>Eng: <I>there</I> <li>Fin: <I>siellä</I> <li>Fre: <I>là</I> <li>Ger: <I>da</I> <li>Ita: <I>là</I> <li>Nep: <I>त्यहाँ</I> <li>Nor: <I>der</I> <li>Pes: <I>آنجا</I> <li>Pnb: <I>اوتھے</I> <li>Pol: <I>tam</I> <li>Ron: <I>acolo</I> <li>Rus: <I>там</I> <li>Spa: <I>allí</I> <li>Swe: <I>där</I> <li>Urd: <I>وہاں</I> </ul> </div> </div></TD>-</TR>-</TABLE>--<A NAME="Ant"></A>-<H2>Ant - anteriority</H2>--<TABLE BORDER="1" CELLPADDING="4">-<TR>-<TH>Function</TH>-<TH>Type</TH>-<TH COLSPAN="2">Example</TH>-</TR>-<TR>-<TD><CODE>anteriorAnt</CODE></TD>-<TD><A HREF="#Ant" TITLE="Ant - anteriority">Ant</A></TD>-<TD><div class=reveal> <I>she has slept</I> <div class=popup> <ul> <li>API: <CODE>mkS anteriorAnt (mkCl she_NP sleep_V)</CODE> <li>Afr: <I>sy het geslaap</I> <li>Bul: <I>тя е спалa</I> <li>Cat: <I>ella ha dormit</I> <li>Dan: <I>hun har sovet</I> <li>Dut: <I>ze heeft geslapen</I> <li>Eng: <I>she has slept</I> <li>Fin: <I>hän on nukkunut</I> <li>Fre: <I>elle a dormi</I> <li>Ger: <I>sie hat geschlafen</I> <li>Ita: <I>lei ha dormito</I> <li>Nep: <I>उनी सुतेकिछिन्</I> <li>Nor: <I>hun har sovet</I> <li>Pes: <I>او خوابیده است</I> <li>Pnb: <I>او سو گیی اے</I> <li>Pol: <I>ona spała</I> <li>Ron: <I>ea a dormit</I> <li>Rus: <I>она спдит</I> <li>Spa: <I>ella ha dormido</I> <li>Swe: <I>hon har sovit</I> <li>Urd: <I>وہ سو چكی ہے</I> </ul> </div> </div></TD>-</TR>-<TR>-<TD><CODE>simultaneousAnt</CODE></TD>-<TD><A HREF="#Ant" TITLE="Ant - anteriority">Ant</A></TD>-<TD><div class=reveal> <I>she sleeps</I> <div class=popup> <ul> <li>API: <CODE>mkS simultaneousAnt (mkCl she_NP sleep_V)</CODE> <li>Afr: <I>sy slaap</I> <li>Bul: <I>тя спи</I> <li>Cat: <I>ella dorm</I> <li>Dan: <I>hun sover</I> <li>Dut: <I>ze slaapt</I> <li>Eng: <I>she sleeps</I> <li>Fin: <I>hän nukkuu</I> <li>Fre: <I>elle dort</I> <li>Ger: <I>sie schläft</I> <li>Ita: <I>lei dorme</I> <li>Nep: <I>उनी सुत्छिन्</I> <li>Nor: <I>hun sover</I> <li>Pes: <I>او می خوابد</I> <li>Pnb: <I>او سوندی اے</I> <li>Pol: <I>ona śpi</I> <li>Ron: <I>ea doarme</I> <li>Rus: <I>она спдит</I> <li>Spa: <I>ella duerme</I> <li>Swe: <I>hon sover</I> <li>Urd: <I>وہ سوتی ہے</I> </ul> </div> </div></TD>-</TR>-</TABLE>--<A NAME="CAdv"></A>-<H2>CAdv - comparative adverb</H2>--<TABLE BORDER="1" CELLPADDING="4">-<TR>-<TH>Function</TH>-<TH>Type</TH>-<TH COLSPAN="2">Example</TH>-</TR>-<TR>-<TD><CODE>as_CAdv</CODE></TD>-<TD><A HREF="#CAdv" TITLE="CAdv - comparative adverb">CAdv</A></TD>-<TD><div class=reveal> <I>as</I> <div class=popup> <ul> <li>API: <CODE>as_CAdv</CODE> <li>Afr: <I>so</I> <li>Bul: <I>*</I> <li>Cat: <I>tan</I> <li>Dan: <I>*</I> <li>Dut: <I>zo</I> <li>Eng: <I>as</I> <li>Fin: <I>yhtä</I> <li>Fre: <I>aussi</I> <li>Ger: <I>ebenso</I> <li>Ita: <I>così</I> <li>Nep: <I>जत्तीकै</I> <li>Nor: <I>*</I> <li>Pes: <I>به اندازه ی</I> <li>Pnb: <I>ایناں</I> <li>Pol: <I>tak</I> <li>Ron: <I>la fel de</I> <li>Rus: <I>*</I> <li>Spa: <I>si</I> <li>Swe: <I>lika</I> <li>Urd: <I>اتنا</I> </ul> </div> </div></TD>-</TR>-<TR>-<TD><CODE>less_CAdv</CODE></TD>-<TD><A HREF="#CAdv" TITLE="CAdv - comparative adverb">CAdv</A></TD>-<TD><div class=reveal> <I>less</I> <div class=popup> <ul> <li>API: <CODE>less_CAdv</CODE> <li>Afr: <I>minder</I> <li>Bul: <I>не</I> <li>Cat: <I>menys</I> <li>Dan: <I>mindre</I> <li>Dut: <I>minder</I> <li>Eng: <I>less</I> <li>Fin: <I>vähemmän</I> <li>Fre: <I>moins</I> <li>Ger: <I>weniger</I> <li>Ita: <I>meno</I> <li>Nep: <I>कम</I> <li>Nor: <I>mindre</I> <li>Pes: <I>کمتر</I> <li>Pnb: <I>كٹ</I> <li>Pol: <I>mniej</I> <li>Ron: <I>mai puţin</I> <li>Rus: <I>менее</I> <li>Spa: <I>menos</I> <li>Swe: <I>mindre</I> <li>Urd: <I>كم</I> </ul> </div> </div></TD>-</TR>-<TR>-<TD><CODE>more_CAdv</CODE></TD>-<TD><A HREF="#CAdv" TITLE="CAdv - comparative adverb">CAdv</A></TD>-<TD><div class=reveal> <I>more</I> <div class=popup> <ul> <li>API: <CODE>more_CAdv</CODE> <li>Afr: <I>meer</I> <li>Bul: <I>''</I> <li>Cat: <I>més</I> <li>Dan: <I>mer</I> <li>Dut: <I>meer</I> <li>Eng: <I>more</I> <li>Fin: <I>enemmän</I> <li>Fre: <I>plus</I> <li>Ger: <I>mehr</I> <li>Ita: <I>più</I> <li>Nep: <I>बढी</I> <li>Nor: <I>mer</I> <li>Pes: <I>بیشتر</I> <li>Pnb: <I>ہور</I> <li>Pol: <I>bardziej</I> <li>Ron: <I>mai</I> <li>Rus: <I>более</I> <li>Spa: <I>más</I> <li>Swe: <I>mer</I> <li>Urd: <I>زیادہ</I> </ul> </div> </div></TD>-</TR>-</TABLE>--<A NAME="CN"></A>-<H2>CN - common noun (without determiner)</H2>--<TABLE BORDER="1" CELLPADDING="4">-<TR>-<TH>Function</TH>-<TH>Type</TH>-<TH COLSPAN="2">Example</TH>-</TR>-<TR>-<TD><CODE>mkCN</CODE></TD>-<TD><A HREF="#N" TITLE="N - common noun">N</A> <CODE>-></CODE> <A HREF="#CN" TITLE="CN - common noun (without determiner)">CN</A></TD>-<TD><div class=reveal> <I>house</I> <div class=popup> <ul> <li>API: <CODE>mkCN house_N</CODE> <li>Afr: <I>huis</I> <li>Bul: <I>къща</I> <li>Cat: <I>casa</I> <li>Dan: <I>hus</I> <li>Dut: <I>huis</I> <li>Eng: <I>house</I> <li>Fin: <I>talo</I> <li>Fre: <I>maison</I> <li>Ger: <I>Haus</I> <li>Ita: <I>casa</I> <li>Nep: <I>घर</I> <li>Nor: <I>hus</I> <li>Pes: <I>خانه</I> <li>Pnb: <I>{s = table ParamX.Number [table ResPnb.Case ["گھر"; "گھر"; "گھر";</I> <li>Pol: <I>dom</I> <li>Ron: <I>casă</I> <li>Rus: <I>дом</I> <li>Spa: <I>casa</I> <li>Swe: <I>hus</I> <li>Urd: <I>گھر</I> </ul> </div> </div></TD>-</TR>-<TR>-<TD><CODE>mkCN</CODE></TD>-<TD><A HREF="#N2" TITLE="N2 - relational noun">N2</A> <CODE>-></CODE> <A HREF="#NP" TITLE="NP - noun phrase (subject or object)">NP</A> <CODE>-></CODE> <A HREF="#CN" TITLE="CN - common noun (without determiner)">CN</A></TD>-<TD><div class=reveal> <I>mother of the king</I> <div class=popup> <ul> <li>API: <CODE>mkCN mother_N2 (mkNP the_Det king_N)</CODE> <li>Afr: <I>ma van die koning</I> <li>Bul: <I>майка на царя</I> <li>Cat: <I>mare del rei</I> <li>Dan: <I>moder til kongen</I> <li>Dut: <I>moeder van de koning</I> <li>Eng: <I>mother of the king</I> <li>Fin: <I>kuninkaan äiti</I> <li>Fre: <I>mère du roi</I> <li>Ger: <I>Mutter von dem König</I> <li>Ita: <I>madre del ré</I> <li>Nep: <I>राजा को आमा</I> <li>Nor: <I>mor til kongen</I> <li>Pes: <I>مادر پادشاه</I> <li>Pnb: <I>{s : ParamX.Number => ResPnb.Case => Str</I> <li>Pol: <I>matka króla</I> <li>Ron: <I>mamă regelui</I> <li>Rus: <I>мать короля</I> <li>Spa: <I>madre del rey</I> <li>Swe: <I>mor till kungen</I> <li>Urd: <I>بادشاہ كی ماں</I> </ul> </div> </div></TD>-</TR>-<TR>-<TD><CODE>mkCN</CODE></TD>-<TD><A HREF="#N3" TITLE="N3 - three-place relational noun">N3</A> <CODE>-></CODE> <A HREF="#NP" TITLE="NP - noun phrase (subject or object)">NP</A> <CODE>-></CODE> <A HREF="#NP" TITLE="NP - noun phrase (subject or object)">NP</A> <CODE>-></CODE> <A HREF="#CN" TITLE="CN - common noun (without determiner)">CN</A></TD>-<TD><div class=reveal> <I>distance from this city to Paris</I> <div class=popup> <ul> <li>API: <CODE>mkCN distance_N3 (mkNP this_Det city_N) (mkNP paris_PN)</CODE> <li>Afr: <I>afstand van hierdie stad na Parys</I> <li>Bul: <I>разстояние от този град до Париж</I> <li>Cat: <I>distància de aquesta ciutat a Paris</I> <li>Dan: <I>afstand fra denne by til Paris</I> <li>Dut: <I>afstand van deze stad naar Parijs</I> <li>Eng: <I>distance from this city to Paris</I> <li>Fin: <I>etäisyys tästä kaupungista Pariisiin</I> <li>Fre: <I>distance de cette ville à Paris</I> <li>Ger: <I>Entfernung von dieser Stadt zu Paris</I> <li>Ita: <I>distanza di questa città a Parigi</I> <li>Nep: <I>पेरिस देखि यो शहर सम्म को दुरी</I> <li>Nor: <I>avstand fra denne byen til Paris</I> <li>Pes: <I>فاصله از این شهر تا پاریس</I> <li>Pnb: <I>*</I> <li>Pol: <I>odległość z tego miasta do Paryża</I> <li>Ron: <I>distanţă de la acest oraş la Paris</I> <li>Rus: <I>расстояние от этого города к Парижу</I> <li>Spa: <I>distancia de esta ciudad a Paris</I> <li>Swe: <I>avstånd från den här staden till Paris</I> <li>Urd: <I>پیرس كا اس شہر سے فاصلہ</I> </ul> </div> </div></TD>-</TR>-<TR>-<TD><CODE>mkCN</CODE></TD>-<TD><A HREF="#N2" TITLE="N2 - relational noun">N2</A> <CODE>-></CODE> <A HREF="#CN" TITLE="CN - common noun (without determiner)">CN</A></TD>-<TD><div class=reveal> <I>mother</I> <div class=popup> <ul> <li>API: <CODE>mkCN mother_N2</CODE> <li>Afr: <I>ma</I> <li>Bul: <I>майка</I> <li>Cat: <I>mare</I> <li>Dan: <I>moder</I> <li>Dut: <I>moeder</I> <li>Eng: <I>mother</I> <li>Fin: <I>äiti</I> <li>Fre: <I>mère</I> <li>Ger: <I>Mutter</I> <li>Ita: <I>madre</I> <li>Nep: <I>आमा</I> <li>Nor: <I>mor</I> <li>Pes: <I>مادر</I> <li>Pnb: <I>{s : ParamX.Number => ResPnb.Case => Str</I> <li>Pol: <I>matka</I> <li>Ron: <I>mamă</I> <li>Rus: <I>мать</I> <li>Spa: <I>madre</I> <li>Swe: <I>mor</I> <li>Urd: <I>ماں</I> </ul> </div> </div></TD>-</TR>-<TR>-<TD><CODE>mkCN</CODE></TD>-<TD><A HREF="#N3" TITLE="N3 - three-place relational noun">N3</A> <CODE>-></CODE> <A HREF="#CN" TITLE="CN - common noun (without determiner)">CN</A></TD>-<TD><div class=reveal> <I>distance</I> <div class=popup> <ul> <li>API: <CODE>mkCN distance_N3</CODE> <li>Afr: <I>afstand</I> <li>Bul: <I>разстояние</I> <li>Cat: <I>distància</I> <li>Dan: <I>afstand</I> <li>Dut: <I>afstand</I> <li>Eng: <I>distance</I> <li>Fin: <I>etäisyys</I> <li>Fre: <I>distance</I> <li>Ger: <I>Entfernung</I> <li>Ita: <I>distanza</I> <li>Nep: <I>दुरी</I> <li>Nor: <I>avstand</I> <li>Pes: <I>فاصله</I> <li>Pnb: <I>*</I> <li>Pol: <I>odległość</I> <li>Ron: <I>distanţă</I> <li>Rus: <I>расстояние</I> <li>Spa: <I>distancia</I> <li>Swe: <I>avstånd</I> <li>Urd: <I>فاصلہ</I> </ul> </div> </div></TD>-</TR>-<TR>-<TD><CODE>mkCN</CODE></TD>-<TD><A HREF="#A" TITLE="A - one-place adjective">A</A> <CODE>-></CODE> <A HREF="#N" TITLE="N - common noun">N</A> <CODE>-></CODE> <A HREF="#CN" TITLE="CN - common noun (without determiner)">CN</A></TD>-<TD><div class=reveal> <I>big house</I> <div class=popup> <ul> <li>API: <CODE>mkCN big_A house_N</CODE> <li>Afr: <I>groot huis</I> <li>Bul: <I>голяма къща</I> <li>Cat: <I>casa grosa</I> <li>Dan: <I>stort hus</I> <li>Dut: <I>groot huis</I> <li>Eng: <I>big house</I> <li>Fin: <I>suuri talo</I> <li>Fre: <I>grande maison</I> <li>Ger: <I>großes Haus</I> <li>Ita: <I>grande casa</I> <li>Nep: <I>ठुलो घर</I> <li>Nor: <I>stort hus</I> <li>Pes: <I>خانه ی بزرگ</I> <li>Pnb: <I>{s : ParamX.Number => ResPnb.Case => Str</I> <li>Pol: <I>duży dom</I> <li>Ron: <I>casă mare</I> <li>Rus: <I>большой дом</I> <li>Spa: <I>grande casa</I> <li>Swe: <I>stort hus</I> <li>Urd: <I>بڑا گھر</I> </ul> </div> </div></TD>-</TR>-<TR>-<TD><CODE>mkCN</CODE></TD>-<TD><A HREF="#A" TITLE="A - one-place adjective">A</A> <CODE>-></CODE> <A HREF="#CN" TITLE="CN - common noun (without determiner)">CN</A> <CODE>-></CODE> <A HREF="#CN" TITLE="CN - common noun (without determiner)">CN</A></TD>-<TD><div class=reveal> <I>big blue house</I> <div class=popup> <ul> <li>API: <CODE>mkCN big_A (mkCN blue_A house_N)</CODE> <li>Afr: <I>groot blou huis</I> <li>Bul: <I>голяма синя къща</I> <li>Cat: <I>casa blava grosa</I> <li>Dan: <I>stort blått hus</I> <li>Dut: <I>groot blauw huis</I> <li>Eng: <I>big blue house</I> <li>Fin: <I>suuri sininen talo</I> <li>Fre: <I>grande maison bleue</I> <li>Ger: <I>großes blaues Haus</I> <li>Ita: <I>grande casa blù</I> <li>Nep: <I>ठुलो निलो घर</I> <li>Nor: <I>stort blått hus</I> <li>Pes: <I>خانه ی آبی بزرگ</I> <li>Pnb: <I>{s : ParamX.Number => ResPnb.Case => Str</I> <li>Pol: <I>duży niebieski dom</I> <li>Ron: <I>casă albastră mare</I> <li>Rus: <I>большой голубой дом</I> <li>Spa: <I>grande casa azul</I> <li>Swe: <I>stort blått hus</I> <li>Urd: <I>بڑا نیلا گھر</I> </ul> </div> </div></TD>-</TR>-<TR>-<TD><CODE>mkCN</CODE></TD>-<TD><A HREF="#AP" TITLE="AP - adjectival phrase">AP</A> <CODE>-></CODE> <A HREF="#N" TITLE="N - common noun">N</A> <CODE>-></CODE> <A HREF="#CN" TITLE="CN - common noun (without determiner)">CN</A></TD>-<TD><div class=reveal> <I>very big house</I> <div class=popup> <ul> <li>API: <CODE>mkCN (mkAP very_AdA big_A) house_N</CODE> <li>Afr: <I>baie groot huis</I> <li>Bul: <I>много голяма къща</I> <li>Cat: <I>casa molt grosa</I> <li>Dan: <I>meget stort hus</I> <li>Dut: <I>erg groot huis</I> <li>Eng: <I>very big house</I> <li>Fin: <I>erittäin suuri talo</I> <li>Fre: <I>très grande maison</I> <li>Ger: <I>sehr großes Haus</I> <li>Ita: <I>molto grande casa</I> <li>Nep: <I>धेरै ठुलो घर</I> <li>Nor: <I>mye stort hus</I> <li>Pes: <I>خانه ی خیلی بزرگ</I> <li>Pnb: <I>{s : ParamX.Number => ResPnb.Case => Str</I> <li>Pol: <I>bardzo duży dom</I> <li>Ron: <I>casă foarte mare</I> <li>Rus: <I>очень большой дом</I> <li>Spa: <I>muy grande casa</I> <li>Swe: <I>mycket stort hus</I> <li>Urd: <I>بہت بڑا گھر</I> </ul> </div> </div></TD>-</TR>-<TR>-<TD><CODE>mkCN</CODE></TD>-<TD><A HREF="#AP" TITLE="AP - adjectival phrase">AP</A> <CODE>-></CODE> <A HREF="#CN" TITLE="CN - common noun (without determiner)">CN</A> <CODE>-></CODE> <A HREF="#CN" TITLE="CN - common noun (without determiner)">CN</A></TD>-<TD><div class=reveal> <I>very big blue house</I> <div class=popup> <ul> <li>API: <CODE>mkCN (mkAP very_AdA big_A) (mkCN blue_A house_N)</CODE> <li>Afr: <I>baie groot blou huis</I> <li>Bul: <I>много голяма синя къща</I> <li>Cat: <I>casa blava molt grosa</I> <li>Dan: <I>meget stort blått hus</I> <li>Dut: <I>erg groot blauw huis</I> <li>Eng: <I>very big blue house</I> <li>Fin: <I>erittäin suuri sininen talo</I> <li>Fre: <I>très grande maison bleue</I> <li>Ger: <I>sehr großes blaues Haus</I> <li>Ita: <I>molto grande casa blù</I> <li>Nep: <I>धेरै ठुलो निलो घर</I> <li>Nor: <I>mye stort blått hus</I> <li>Pes: <I>خانه ی آبی خیلی بزرگ</I> <li>Pnb: <I>{s : ParamX.Number => ResPnb.Case => Str</I> <li>Pol: <I>bardzo duży niebieski dom</I> <li>Ron: <I>casă albastră foarte mare</I> <li>Rus: <I>очень большой голубой дом</I> <li>Spa: <I>muy grande casa azul</I> <li>Swe: <I>mycket stort blått hus</I> <li>Urd: <I>بہت بڑا نیلا گھر</I> </ul> </div> </div></TD>-</TR>-<TR>-<TD><CODE>mkCN</CODE></TD>-<TD><A HREF="#N" TITLE="N - common noun">N</A> <CODE>-></CODE> <A HREF="#RS" TITLE="RS - relative">RS</A> <CODE>-></CODE> <A HREF="#CN" TITLE="CN - common noun (without determiner)">CN</A></TD>-<TD><div class=reveal> <I>man whom she loves</I> <div class=popup> <ul> <li>API: <CODE>mkCN man_N (mkRS (mkRCl which_RP she_NP love_V2))</CODE> <li>Afr: <I>man wat sy lief het</I> <li>Bul: <I>мъж който тя обича</I> <li>Cat: <I>home que ella estima</I> <li>Dan: <I>mand som hun elsker</I> <li>Dut: <I>man die ze lief heeft</I> <li>Eng: <I>man whom she loves</I> <li>Fin: <I>mies jota hän rakastaa</I> <li>Fre: <I>homme qu' elle aime</I> <li>Ger: <I>Mann den sie liebt</I> <li>Ita: <I>uomo che lei ama</I> <li>Nep: <I>मान्छे जो लाई उनी माया गर्छिन्</I> <li>Nor: <I>mann som hun elsker</I> <li>Pes: <I>مردی که او دوست دارد</I> <li>Pnb: <I>بندہ جن نوں او پیار كردی اے</I> <li>Pol: <I>mężczyzna , którego kocha ona</I> <li>Ron: <I>om pe care îl iubeşte ea</I> <li>Rus: <I>человек , который она любдит</I> <li>Spa: <I>hombre que ella ama</I> <li>Swe: <I>man som hon älskar</I> <li>Urd: <I>آدمی جس كو وہ پیار كرتی ہے</I> </ul> </div> </div></TD>-</TR>-<TR>-<TD><CODE>mkCN</CODE></TD>-<TD><A HREF="#CN" TITLE="CN - common noun (without determiner)">CN</A> <CODE>-></CODE> <A HREF="#RS" TITLE="RS - relative">RS</A> <CODE>-></CODE> <A HREF="#CN" TITLE="CN - common noun (without determiner)">CN</A></TD>-<TD><div class=reveal> <I>old man whom she loves</I> <div class=popup> <ul> <li>API: <CODE>mkCN (mkCN old_A man_N) (mkRS (mkRCl which_RP she_NP love_V2))</CODE> <li>Afr: <I>oud man wat sy lief het</I> <li>Bul: <I>стар мъж който тя обича</I> <li>Cat: <I>home vell que ella estima</I> <li>Dan: <I>gammel mand som hun elsker</I> <li>Dut: <I>oude man die ze lief heeft</I> <li>Eng: <I>old man whom she loves</I> <li>Fin: <I>vanha mies jota hän rakastaa</I> <li>Fre: <I>vieux homme qu' elle aime</I> <li>Ger: <I>alter Mann den sie liebt</I> <li>Ita: <I>vecchio uomo che lei ama</I> <li>Nep: <I>बुढो मान्छे जो लाई उनी माया गर्छिन्</I> <li>Nor: <I>gammel mann som hun elsker</I> <li>Pes: <I>مرد پیری که او دوست دارد</I> <li>Pnb: <I>بوڈا بندہ جن نوں او پیار كردی اے</I> <li>Pol: <I>stary mężczyzna , którego kocha ona</I> <li>Ron: <I>om vechi pe care îl iubeşte ea</I> <li>Rus: <I>старый человек , который она любдит</I> <li>Spa: <I>viejo hombre que ella ama</I> <li>Swe: <I>gammal man som hon älskar</I> <li>Urd: <I>بوڑھا آدمی جس كو وہ پیار كرتی ہے</I> </ul> </div> </div></TD>-</TR>-<TR>-<TD><CODE>mkCN</CODE></TD>-<TD><A HREF="#N" TITLE="N - common noun">N</A> <CODE>-></CODE> <A HREF="#Adv" TITLE="Adv - verb-phrase-modifying adverb">Adv</A> <CODE>-></CODE> <A HREF="#CN" TITLE="CN - common noun (without determiner)">CN</A></TD>-<TD><div class=reveal> <I>house on the hill</I> <div class=popup> <ul> <li>API: <CODE>mkCN house_N (mkAdv on_Prep (mkNP the_Det hill_N))</CODE> <li>Afr: <I>huis op die heuwel</I> <li>Bul: <I>къща на хълма</I> <li>Cat: <I>casa sobre el turó</I> <li>Dan: <I>hus på højen</I> <li>Dut: <I>huis op de heuvel</I> <li>Eng: <I>house on the hill</I> <li>Fin: <I>talo kukkulalla</I> <li>Fre: <I>maison sur la colline</I> <li>Ger: <I>Haus auf dem Hügel</I> <li>Ita: <I>casa sulla collina</I> <li>Nep: <I>घर पहाड मा</I> <li>Nor: <I>hus på haugen</I> <li>Pes: <I>خانه ی روی تپه</I> <li>Pnb: <I>{s : ParamX.Number => ResPnb.Case => Str</I> <li>Pol: <I>dom nа wzgórzu</I> <li>Ron: <I>casă pe deal</I> <li>Rus: <I>дом на холме</I> <li>Spa: <I>casa sobre la colina</I> <li>Swe: <I>hus på kullen</I> <li>Urd: <I>پہاڑی پر گھر</I> </ul> </div> </div></TD>-</TR>-<TR>-<TD><CODE>mkCN</CODE></TD>-<TD><A HREF="#CN" TITLE="CN - common noun (without determiner)">CN</A> <CODE>-></CODE> <A HREF="#Adv" TITLE="Adv - verb-phrase-modifying adverb">Adv</A> <CODE>-></CODE> <A HREF="#CN" TITLE="CN - common noun (without determiner)">CN</A></TD>-<TD><div class=reveal> <I>big house on the hill</I> <div class=popup> <ul> <li>API: <CODE>mkCN (mkCN big_A house_N) (mkAdv on_Prep (mkNP the_Det hill_N))</CODE> <li>Afr: <I>groot huis op die heuwel</I> <li>Bul: <I>голяма къща на хълма</I> <li>Cat: <I>casa grosa sobre el turó</I> <li>Dan: <I>stort hus på højen</I> <li>Dut: <I>groot huis op de heuvel</I> <li>Eng: <I>big house on the hill</I> <li>Fin: <I>suuri talo kukkulalla</I> <li>Fre: <I>grande maison sur la colline</I> <li>Ger: <I>großes Haus auf dem Hügel</I> <li>Ita: <I>grande casa sulla collina</I> <li>Nep: <I>ठुलो घर पहाड मा</I> <li>Nor: <I>stort hus på haugen</I> <li>Pes: <I>خانه ی بزرگ روی تپه</I> <li>Pnb: <I>{s : ParamX.Number => ResPnb.Case => Str</I> <li>Pol: <I>duży dom nа wzgórzu</I> <li>Ron: <I>casă mare pe deal</I> <li>Rus: <I>большой дом на холме</I> <li>Spa: <I>grande casa sobre la colina</I> <li>Swe: <I>stort hus på kullen</I> <li>Urd: <I>پہاڑی پر بڑا گھر</I> </ul> </div> </div></TD>-</TR>-<TR>-<TD><CODE>mkCN</CODE></TD>-<TD><A HREF="#CN" TITLE="CN - common noun (without determiner)">CN</A> <CODE>-></CODE> <A HREF="#S" TITLE="S - declarative sentence">S</A> <CODE>-></CODE> <A HREF="#CN" TITLE="CN - common noun (without determiner)">CN</A></TD>-<TD><div class=reveal> <I>almost five</I> <div class=popup> <ul> <li>API: <CODE>mkNum (mkCard almost_AdN (mkCard (mkNumeral n5_Unit)))</CODE> <li>Afr: <I>byna vyf</I> <li>Bul: <I>почти петима</I> <li>Cat: <I>{s = table CommonRomance.Gender {</I> <li>Dan: <I>næsten fem</I> <li>Dut: <I>bijna vijf</I> <li>Eng: <I>almost five</I> <li>Fin: <I>melkein viisi</I> <li>Fre: <I>presque cinq</I> <li>Ger: <I>fast fünf</I> <li>Ita: <I>quasi cinque</I> <li>Nep: <I>झण्डै पाँच</I> <li>Nor: <I>nesten fem</I> <li>Pes: <I>تقریباً پنج</I> <li>Pnb: <I>تقریبا پنج</I> <li>Pol: <I>prawie pięć</I> <li>Ron: <I>aproape cinci</I> <li>Rus: <I>почти пять</I> <li>Spa: <I>casi cinco</I> <li>Swe: <I>nästan fem</I> <li>Urd: <I>تقریبا پانچ</I> </ul> </div> </div></TD>-</TR>-<TR>-<TD><CODE>mkCN</CODE></TD>-<TD><A HREF="#CN" TITLE="CN - common noun (without determiner)">CN</A> <CODE>-></CODE> <A HREF="#QS" TITLE="QS - question">QS</A> <CODE>-></CODE> <A HREF="#CN" TITLE="CN - common noun (without determiner)">CN</A></TD>-<TD><div class=reveal> <I>almost five</I> <div class=popup> <ul> <li>API: <CODE>mkNum (mkCard almost_AdN (mkCard (mkNumeral n5_Unit)))</CODE> <li>Afr: <I>byna vyf</I> <li>Bul: <I>почти петима</I> <li>Cat: <I>{s = table CommonRomance.Gender {</I> <li>Dan: <I>næsten fem</I> <li>Dut: <I>bijna vijf</I> <li>Eng: <I>almost five</I> <li>Fin: <I>melkein viisi</I> <li>Fre: <I>presque cinq</I> <li>Ger: <I>fast fünf</I> <li>Ita: <I>quasi cinque</I> <li>Nep: <I>झण्डै पाँच</I> <li>Nor: <I>nesten fem</I> <li>Pes: <I>تقریباً پنج</I> <li>Pnb: <I>تقریبا پنج</I> <li>Pol: <I>prawie pięć</I> <li>Ron: <I>aproape cinci</I> <li>Rus: <I>почти пять</I> <li>Spa: <I>casi cinco</I> <li>Swe: <I>nästan fem</I> <li>Urd: <I>تقریبا پانچ</I> </ul> </div> </div></TD>-</TR>-<TR>-<TD><CODE>mkCN</CODE></TD>-<TD><A HREF="#CN" TITLE="CN - common noun (without determiner)">CN</A> <CODE>-></CODE> <A HREF="#VP" TITLE="VP - verb phrase">VP</A> <CODE>-></CODE> <A HREF="#CN" TITLE="CN - common noun (without determiner)">CN</A></TD>-<TD><div class=reveal> <I>reason to sleep</I> <div class=popup> <ul> <li>API: <CODE>mkCN (mkCN reason_N) (mkVP sleep_V)</CODE> <li>Afr: <I>rede te slaap</I> <li>Bul: <I>причина да спя</I> <li>Cat: <I>raó dormir</I> <li>Dan: <I>*</I> <li>Dut: <I>reden te slapen</I> <li>Eng: <I>reason to sleep</I> <li>Fin: <I>syy nukkua</I> <li>Fre: <I>raison dormir</I> <li>Ger: <I>Grund zu schlafen</I> <li>Ita: <I>ragione dormire</I> <li>Nep: <I>सुत्न लाइ कारण</I> <li>Nor: <I>*</I> <li>Pes: <I>دلیل خوابیدن</I> <li>Pnb: <I>*</I> <li>Pol: <I>powód spać</I> <li>Ron: <I>motiv sã doarmă</I> <li>Rus: <I>причина спать</I> <li>Spa: <I>*</I> <li>Swe: <I>anledning att sova</I> <li>Urd: <I>وجہ سونا</I> </ul> </div> </div></TD>-</TR>-<TR>-<TD><CODE>mkCN</CODE></TD>-<TD><A HREF="#CN" TITLE="CN - common noun (without determiner)">CN</A> <CODE>-></CODE> <A HREF="#SC" TITLE="SC - embedded sentence or question">SC</A> <CODE>-></CODE> <A HREF="#CN" TITLE="CN - common noun (without determiner)">CN</A></TD>-<TD><div class=reveal> <I>reason to sleep</I> <div class=popup> <ul> <li>API: <CODE>mkCN (mkCN reason_N) (mkVP sleep_V)</CODE> <li>Afr: <I>rede te slaap</I> <li>Bul: <I>причина да спя</I> <li>Cat: <I>raó dormir</I> <li>Dan: <I>*</I> <li>Dut: <I>reden te slapen</I> <li>Eng: <I>reason to sleep</I> <li>Fin: <I>syy nukkua</I> <li>Fre: <I>raison dormir</I> <li>Ger: <I>Grund zu schlafen</I> <li>Ita: <I>ragione dormire</I> <li>Nep: <I>सुत्न लाइ कारण</I> <li>Nor: <I>*</I> <li>Pes: <I>دلیل خوابیدن</I> <li>Pnb: <I>*</I> <li>Pol: <I>powód spać</I> <li>Ron: <I>motiv sã doarmă</I> <li>Rus: <I>причина спать</I> <li>Spa: <I>*</I> <li>Swe: <I>anledning att sova</I> <li>Urd: <I>وجہ سونا</I> </ul> </div> </div></TD>-</TR>-<TR>-<TD><CODE>mkCN</CODE></TD>-<TD><A HREF="#N" TITLE="N - common noun">N</A> <CODE>-></CODE> <A HREF="#NP" TITLE="NP - noun phrase (subject or object)">NP</A> <CODE>-></CODE> <A HREF="#CN" TITLE="CN - common noun (without determiner)">CN</A></TD>-<TD><div class=reveal> <I>king John</I> <div class=popup> <ul> <li>API: <CODE>mkCN king_N (mkNP john_PN)</CODE> <li>Afr: <I>koning Jan</I> <li>Bul: <I>цар Джон</I> <li>Cat: <I>rei Joan</I> <li>Dan: <I>konge John</I> <li>Dut: <I>koning Jan</I> <li>Eng: <I>king John</I> <li>Fin: <I>kuningas Jussi</I> <li>Fre: <I>roi Jean</I> <li>Ger: <I>König Johann</I> <li>Ita: <I>ré Giovanni</I> <li>Nep: <I>राजा जोन</I> <li>Nor: <I>konge John</I> <li>Pes: <I>پادشاه جان</I> <li>Pnb: <I>بادشاہ جان</I> <li>Pol: <I>król Jan</I> <li>Ron: <I>rege Ion</I> <li>Rus: <I>король Иван</I> <li>Spa: <I>rey Juan</I> <li>Swe: <I>kung Johan</I> <li>Urd: <I>بادشاہ جان</I> </ul> </div> </div></TD>-</TR>-<TR>-<TD><CODE>mkCN</CODE></TD>-<TD><A HREF="#CN" TITLE="CN - common noun (without determiner)">CN</A> <CODE>-></CODE> <A HREF="#NP" TITLE="NP - noun phrase (subject or object)">NP</A> <CODE>-></CODE> <A HREF="#CN" TITLE="CN - common noun (without determiner)">CN</A></TD>-<TD><div class=reveal> <I>old king John</I> <div class=popup> <ul> <li>API: <CODE>mkCN (mkCN old_A king_N) (mkNP john_PN)</CODE> <li>Afr: <I>oud koning Jan</I> <li>Bul: <I>стар цар Джон</I> <li>Cat: <I>rei vell Joan</I> <li>Dan: <I>gammel konge John</I> <li>Dut: <I>oude koning Jan</I> <li>Eng: <I>old king John</I> <li>Fin: <I>vanha kuningas Jussi</I> <li>Fre: <I>vieux roi Jean</I> <li>Ger: <I>alter König Johann</I> <li>Ita: <I>vecchio ré Giovanni</I> <li>Nep: <I>बुढो राजा जोन</I> <li>Nor: <I>gammel konge John</I> <li>Pes: <I>پادشاه پیر جان</I> <li>Pnb: <I>بوڈا بادشاہ جان</I> <li>Pol: <I>stary król Jan</I> <li>Ron: <I>rege vechi Ion</I> <li>Rus: <I>старый король Иван</I> <li>Spa: <I>viejo rey Juan</I> <li>Swe: <I>gammal kung Johan</I> <li>Urd: <I>بوڑھا بادشاہ جان</I> </ul> </div> </div></TD>-</TR>-</TABLE>--<A NAME="Card"></A>-<H2>Card - cardinal number</H2>--<TABLE BORDER="1" CELLPADDING="4">-<TR>-<TH>Function</TH>-<TH>Type</TH>-<TH COLSPAN="2">Example</TH>-</TR>-<TR>-<TD><CODE>mkCard</CODE></TD>-<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#Card" TITLE="Card - cardinal number">Card</A></TD>-<TD><I>thirty-five (given as "35"; range 1-999)</I></TD>-</TR>-<TR>-<TD><CODE>mkCard</CODE></TD>-<TD><A HREF="#Numeral" TITLE="Numeral - cardinal or ordinal in words">Numeral</A> <CODE>-></CODE> <A HREF="#Card" TITLE="Card - cardinal number">Card</A></TD>-<TD><div class=reveal> <I>seven</I> <div class=popup> <ul> <li>API: <CODE>mkCard (mkNumeral n7_Unit)</CODE> <li>Afr: <I>seven</I> <li>Bul: <I>седмина</I> <li>Cat: <I>set</I> <li>Dan: <I>syv</I> <li>Dut: <I>zeven</I> <li>Eng: <I>seven</I> <li>Fin: <I>seitsemän</I> <li>Fre: <I>sept</I> <li>Ger: <I>sieben</I> <li>Ita: <I>sette</I> <li>Nep: <I>सात</I> <li>Nor: <I>sju</I> <li>Pes: <I>هفت</I> <li>Pnb: <I>ست</I> <li>Pol: <I>siedem</I> <li>Ron: <I>şapte</I> <li>Rus: <I>семь</I> <li>Spa: <I>siete</I> <li>Swe: <I>sju</I> <li>Urd: <I>سات</I> </ul> </div> </div></TD>-</TR>-<TR>-<TD><CODE>mkCard</CODE></TD>-<TD><A HREF="#Digits" TITLE="Digits - cardinal or ordinal in digits">Digits</A> <CODE>-></CODE> <A HREF="#Card" TITLE="Card - cardinal number">Card</A></TD>-<TD><I>51</I></TD>-</TR>-<TR>-<TD><CODE>mkCard</CODE></TD>-<TD><A HREF="#AdN" TITLE="AdN - numeral-modifying adverb">AdN</A> <CODE>-></CODE> <A HREF="#Card" TITLE="Card - cardinal number">Card</A> <CODE>-></CODE> <A HREF="#Card" TITLE="Card - cardinal number">Card</A></TD>-<TD><I>almost fifty</I></TD>-</TR>-</TABLE>--<A NAME="Cl"></A>-<H2>Cl - declarative clause, with all tenses</H2>--<TABLE BORDER="1" CELLPADDING="4">-<TR>-<TH>Function</TH>-<TH>Type</TH>-<TH COLSPAN="2">Example</TH>-</TR>-<TR>-<TD><CODE>genericCl</CODE></TD>-<TD><A HREF="#VP" TITLE="VP - verb phrase">VP</A> <CODE>-></CODE> <A HREF="#Cl" TITLE="Cl - declarative clause, with all tenses">Cl</A></TD>-<TD><div class=reveal> <I>one sleeps</I> <div class=popup> <ul> <li>API: <CODE>mkS (genericCl (mkVP sleep_V))</CODE> <li>Afr: <I>mens slaap</I> <li>Bul: <I>някой спи</I> <li>Cat: <I>hom dorm</I> <li>Dan: <I>man sover</I> <li>Dut: <I>men slaapt</I> <li>Eng: <I>one sleeps</I> <li>Fin: <I>nukutaan</I> <li>Fre: <I>on dort</I> <li>Ger: <I>man schläft</I> <li>Ita: <I>si dorme</I> <li>Nep: <I>कोही सुत्छ</I> <li>Nor: <I>man sover</I> <li>Pes: <I>آدم می خوابد</I> <li>Pnb: <I>كوی سوندا اے</I> <li>Pol: <I>ktoś śpi</I> <li>Ron: <I>cineva doarme</I> <li>Rus: <I>ты спдишь</I> <li>Spa: <I>se duerme</I> <li>Swe: <I>man sover</I> <li>Urd: <I>كوی سوتا ہے</I> </ul> </div> </div></TD>-</TR>-<TR>-<TD><CODE>mkCl</CODE></TD>-<TD><A HREF="#NP" TITLE="NP - noun phrase (subject or object)">NP</A> <CODE>-></CODE> <A HREF="#V" TITLE="V - one-place verb">V</A> <CODE>-></CODE> <A HREF="#Cl" TITLE="Cl - declarative clause, with all tenses">Cl</A></TD>-<TD><div class=reveal> <I>she sleeps</I> <div class=popup> <ul> <li>API: <CODE>mkCl she_NP sleep_V</CODE> <li>Afr: <I>sy slaap</I> <li>Bul: <I>тя спи</I> <li>Cat: <I>ella dorm</I> <li>Dan: <I>hun sover</I> <li>Dut: <I>ze slaapt</I> <li>Eng: <I>she sleeps</I> <li>Fin: <I>hän nukkuu</I> <li>Fre: <I>elle dort</I> <li>Ger: <I>sie schläft</I> <li>Ita: <I>lei dorme</I> <li>Nep: <I>उनी सुत्छिन्</I> <li>Nor: <I>hun sover</I> <li>Pes: <I>او می خوابد</I> <li>Pnb: <I>او سوندی اے</I> <li>Pol: <I>ona śpi</I> <li>Ron: <I>ea doarme</I> <li>Rus: <I>она спдит</I> <li>Spa: <I>ella duerme</I> <li>Swe: <I>hon sover</I> <li>Urd: <I>وہ سوتی ہے</I> </ul> </div> </div></TD>-</TR>-<TR>-<TD><CODE>mkCl</CODE></TD>-<TD><A HREF="#NP" TITLE="NP - noun phrase (subject or object)">NP</A> <CODE>-></CODE> <A HREF="#V2" TITLE="V2 - two-place verb">V2</A> <CODE>-></CODE> <A HREF="#NP" TITLE="NP - noun phrase (subject or object)">NP</A> <CODE>-></CODE> <A HREF="#Cl" TITLE="Cl - declarative clause, with all tenses">Cl</A></TD>-<TD><div class=reveal> <I>she loves him</I> <div class=popup> <ul> <li>API: <CODE>mkCl she_NP love_V2 he_NP</CODE> <li>Afr: <I>sy het hom lief</I> <li>Bul: <I>тя обича него</I> <li>Cat: <I>ella el estima</I> <li>Dan: <I>hun elsker ham</I> <li>Dut: <I>ze heeft hem lief</I> <li>Eng: <I>she loves him</I> <li>Fin: <I>hän rakastaa häntä</I> <li>Fre: <I>elle l' aime</I> <li>Ger: <I>sie liebt ihn</I> <li>Ita: <I>lei lo ama</I> <li>Nep: <I>उनी उ लाई माया गर्छिन्</I> <li>Nor: <I>hun elsker ham</I> <li>Pes: <I>او او را دوست دارد</I> <li>Pnb: <I>او اونوں پیار كردی اے</I> <li>Pol: <I>ona kocha jego</I> <li>Ron: <I>ea îl iubeşte</I> <li>Rus: <I>она любдит его</I> <li>Spa: <I>ella lo ama</I> <li>Swe: <I>hon älskar honom</I> <li>Urd: <I>وہ اس كو پیار كرتی ہے</I> </ul> </div> </div></TD>-</TR>-<TR>-<TD><CODE>mkCl</CODE></TD>-<TD><A HREF="#NP" TITLE="NP - noun phrase (subject or object)">NP</A> <CODE>-></CODE> <A HREF="#V3" TITLE="V3 - three-place verb">V3</A> <CODE>-></CODE> <A HREF="#NP" TITLE="NP - noun phrase (subject or object)">NP</A> <CODE>-></CODE> <A HREF="#NP" TITLE="NP - noun phrase (subject or object)">NP</A> <CODE>-></CODE> <A HREF="#Cl" TITLE="Cl - declarative clause, with all tenses">Cl</A></TD>-<TD><div class=reveal> <I>she sends it to him</I> <div class=popup> <ul> <li>API: <CODE>mkCl she_NP send_V3 it_NP he_NP</CODE> <li>Afr: <I>sy stuur dit na hom</I> <li>Bul: <I>тя праща него до него</I> <li>Cat: <I>ella ho li envia</I> <li>Dan: <I>hun sender det til ham</I> <li>Dut: <I>ze stuurt het naar hem</I> <li>Eng: <I>she sends it to him</I> <li>Fin: <I>hän lähettää sen hänelle</I> <li>Fre: <I>elle le lui envoie</I> <li>Ger: <I>sie schickt es ihm</I> <li>Ita: <I>lei lo gli manda</I> <li>Nep: <I>उनी यो उस्लाई लाई पठाउँछिन्</I> <li>Nor: <I>hun sender det til ham</I> <li>Pes: <I>او آن را برای او می فرستد</I> <li>Pnb: <I>او اینوں اونوں پیجدی اے</I> <li>Pol: <I>ona wysyła do niego je</I> <li>Ron: <I>ea i -l trimite</I> <li>Rus: <I>она посылает нему его</I> <li>Spa: <I>ella lo le manda</I> <li>Swe: <I>hon skickar det till honom</I> <li>Urd: <I>وہ اس كو اس كو بھیجتی ہے</I> </ul> </div> </div></TD>-</TR>-<TR>-<TD><CODE>mkCl</CODE></TD>-<TD><A HREF="#NP" TITLE="NP - noun phrase (subject or object)">NP</A> <CODE>-></CODE> <A HREF="#VV" TITLE="VV - verb-phrase-complement verb">VV</A> <CODE>-></CODE> <A HREF="#VP" TITLE="VP - verb phrase">VP</A> <CODE>-></CODE> <A HREF="#Cl" TITLE="Cl - declarative clause, with all tenses">Cl</A></TD>-<TD><div class=reveal> <I>she wants to sleep</I> <div class=popup> <ul> <li>API: <CODE>mkCl she_NP want_VV (mkVP sleep_V)</CODE> <li>Afr: <I>sy wil slaap</I> <li>Bul: <I>тя иска да спи</I> <li>Cat: <I>ella vol dormir</I> <li>Dan: <I>hun vil sove</I> <li>Dut: <I>ze wil slapen</I> <li>Eng: <I>she wants to sleep</I> <li>Fin: <I>hän tahtoo nukkua</I> <li>Fre: <I>elle veut dormir</I> <li>Ger: <I>sie will schlafen</I> <li>Ita: <I>lei vuole dormire</I> <li>Nep: <I>उनी सुत्न चाहन्छिन्</I> <li>Nor: <I>hun vil sove</I> <li>Pes: <I>او می خواهد بخوابد</I> <li>Pnb: <I>او سونا چاندی اے</I> <li>Pol: <I>ona chce spać</I> <li>Ron: <I>ea vrea sã doarmă</I> <li>Rus: <I>она хочет спать</I> <li>Spa: <I>ella quiere dormir</I> <li>Swe: <I>hon vill sova</I> <li>Urd: <I>وہ سونا چاہتی ہے</I> </ul> </div> </div></TD>-</TR>-<TR>-<TD><CODE>mkCl</CODE></TD>-<TD><A HREF="#NP" TITLE="NP - noun phrase (subject or object)">NP</A> <CODE>-></CODE> <A HREF="#VS" TITLE="VS - sentence-complement verb">VS</A> <CODE>-></CODE> <A HREF="#S" TITLE="S - declarative sentence">S</A> <CODE>-></CODE> <A HREF="#Cl" TITLE="Cl - declarative clause, with all tenses">Cl</A></TD>-<TD><div class=reveal> <I>she says that I sleep</I> <div class=popup> <ul> <li>API: <CODE>mkCl she_NP say_VS (mkS (mkCl i_NP sleep_V))</CODE> <li>Afr: <I>sy sê dat ek slaap</I> <li>Bul: <I>тя казва , че аз спя</I> <li>Cat: <I>ella diu que jo dormo</I> <li>Dan: <I>hun siger at jeg sover</I> <li>Dut: <I>ze zegt dat ik slaap</I> <li>Eng: <I>she says that I sleep</I> <li>Fin: <I>hän sanoo että minä nukun</I> <li>Fre: <I>elle dit que je dors</I> <li>Ger: <I>sie sagt daß ich schlafe</I> <li>Ita: <I>lei dice che io dormo</I> <li>Nep: <I>उनी भन्छिन्की म सुत्छु</I> <li>Nor: <I>hun sier at jeg sover</I> <li>Pes: <I>او می گوید که من می خوابم</I> <li>Pnb: <I>او كہدی اے كہ میں سوندا واں</I> <li>Pol: <I>ona mówi , że ja śpię</I> <li>Ron: <I>ea spune cã eu dorm</I> <li>Rus: <I>она говордит , что я сплю</I> <li>Spa: <I>ella dice que yo duermo</I> <li>Swe: <I>hon säger att jag sover</I> <li>Urd: <I>وہ كہتی ہے كہ میں سوتا ہوں</I> </ul> </div> </div></TD>-</TR>-<TR>-<TD><CODE>mkCl</CODE></TD>-<TD><A HREF="#NP" TITLE="NP - noun phrase (subject or object)">NP</A> <CODE>-></CODE> <A HREF="#VQ" TITLE="VQ - question-complement verb">VQ</A> <CODE>-></CODE> <A HREF="#QS" TITLE="QS - question">QS</A> <CODE>-></CODE> <A HREF="#Cl" TITLE="Cl - declarative clause, with all tenses">Cl</A></TD>-<TD><div class=reveal> <I>she wonders who sleeps</I> <div class=popup> <ul> <li>API: <CODE>mkCl she_NP wonder_VQ (mkQS (mkQCl who_IP sleep_V))</CODE> <li>Afr: <I>sy vra hom af wie slaap</I> <li>Bul: <I>тя се учудва кой спи</I> <li>Cat: <I>ella se pregunta qui dorm</I> <li>Dan: <I>hun undres hvem som sover</I> <li>Dut: <I>ze vraagt zich af wie slaapt</I> <li>Eng: <I>she wonders who sleeps</I> <li>Fin: <I>hän ihmettelee kuka nukkuu</I> <li>Fre: <I>elle se demande qui dort</I> <li>Ger: <I>sie wundert sich wer schläft</I> <li>Ita: <I>lei si domanda chi dorme</I> <li>Nep: <I>उनी अचम्म हुन्छिन्की को सुत्छन्</I> <li>Nor: <I>hun undrer hvem som sover</I> <li>Pes: <I>*</I> <li>Pnb: <I>او حیران ہوندی اے كہ كون سوندا اے</I> <li>Pol: <I>ona zastanawia się , kto śpi</I> <li>Ron: <I>ea se întreabă cine doarme</I> <li>Rus: <I>она интересует кто спдит</I> <li>Spa: <I>ella se pregunta quién duerme</I> <li>Swe: <I>hon undrar vem som sover</I> <li>Urd: <I>وہ حیران ہوتی ہے كہ كون سوتا ہے</I> </ul> </div> </div></TD>-</TR>-<TR>-<TD><CODE>mkCl</CODE></TD>-<TD><A HREF="#NP" TITLE="NP - noun phrase (subject or object)">NP</A> <CODE>-></CODE> <A HREF="#VA" TITLE="VA - adjective-complement verb">VA</A> <CODE>-></CODE> <A HREF="#A" TITLE="A - one-place adjective">A</A> <CODE>-></CODE> <A HREF="#Cl" TITLE="Cl - declarative clause, with all tenses">Cl</A></TD>-<TD><div class=reveal> <I>she becomes old</I> <div class=popup> <ul> <li>API: <CODE>mkCl she_NP become_VA old_A</CODE> <li>Afr: <I>sy word oud</I> <li>Bul: <I>тя става стара</I> <li>Cat: <I>ella se torna vell</I> <li>Dan: <I>hun bliver gammel</I> <li>Dut: <I>ze wordt oud</I> <li>Eng: <I>she becomes old</I> <li>Fin: <I>hän tulee vanhaksi</I> <li>Fre: <I>elle devient vieille</I> <li>Ger: <I>sie wird alt</I> <li>Ita: <I>lei diventa vecchia</I> <li>Nep: <I>उनी बुढी हुन्छिन्</I> <li>Nor: <I>hun blir gammel</I> <li>Pes: <I>او پیر می شود</I> <li>Pnb: <I>او بوڈی بندی اے</I> <li>Pol: <I>ona staje się stara</I> <li>Ron: <I>ea devine veche</I> <li>Rus: <I>она становдит старой</I> <li>Spa: <I>ella se converte vieja</I> <li>Swe: <I>hon blir gammal</I> <li>Urd: <I>وہ بوڑھی بنتی ہے</I> </ul> </div> </div></TD>-</TR>-<TR>-<TD><CODE>mkCl</CODE></TD>-<TD><A HREF="#NP" TITLE="NP - noun phrase (subject or object)">NP</A> <CODE>-></CODE> <A HREF="#VA" TITLE="VA - adjective-complement verb">VA</A> <CODE>-></CODE> <A HREF="#AP" TITLE="AP - adjectival phrase">AP</A> <CODE>-></CODE> <A HREF="#Cl" TITLE="Cl - declarative clause, with all tenses">Cl</A></TD>-<TD><div class=reveal> <I>she becomes very old</I> <div class=popup> <ul> <li>API: <CODE>mkCl she_NP become_VA (mkAP very_AdA old_A)</CODE> <li>Afr: <I>sy word baie oud</I> <li>Bul: <I>тя става много стара</I> <li>Cat: <I>ella se torna molt vell</I> <li>Dan: <I>hun bliver meget gammel</I> <li>Dut: <I>ze wordt erg oud</I> <li>Eng: <I>she becomes very old</I> <li>Fin: <I>hän tulee erittäin vanhaksi</I> <li>Fre: <I>elle devient très vieille</I> <li>Ger: <I>sie wird sehr alt</I> <li>Ita: <I>lei diventa molto vecchia</I> <li>Nep: <I>उनी धेरै बुढी हुन्छिन्</I> <li>Nor: <I>hun blir mye gammel</I> <li>Pes: <I>او خیلی پیر می شود</I> <li>Pnb: <I>او بہت بوڈی بندی اے</I> <li>Pol: <I>ona staje się bardzo stara</I> <li>Ron: <I>ea devine foarte veche</I> <li>Rus: <I>она становдит очень старой</I> <li>Spa: <I>ella se converte muy vieja</I> <li>Swe: <I>hon blir mycket gammal</I> <li>Urd: <I>وہ بہت بوڑھی بنتی ہے</I> </ul> </div> </div></TD>-</TR>-<TR>-<TD><CODE>mkCl</CODE></TD>-<TD><A HREF="#NP" TITLE="NP - noun phrase (subject or object)">NP</A> <CODE>-></CODE> <A HREF="#V2A" TITLE="V2A - verb with NP and AP complement">V2A</A> <CODE>-></CODE> <A HREF="#NP" TITLE="NP - noun phrase (subject or object)">NP</A> <CODE>-></CODE> <A HREF="#A" TITLE="A - one-place adjective">A</A> <CODE>-></CODE> <A HREF="#Cl" TITLE="Cl - declarative clause, with all tenses">Cl</A></TD>-<TD><div class=reveal> <I>she paints it red</I> <div class=popup> <ul> <li>API: <CODE>mkCl she_NP paint_V2A it_NP red_A</CODE> <li>Afr: <I>sy skilder dit rooi</I> <li>Bul: <I>тя рисува него червено</I> <li>Cat: <I>ella ho pinta en vermell</I> <li>Dan: <I>hun maler det rødt</I> <li>Dut: <I>ze schildeert het rood</I> <li>Eng: <I>she paints it red</I> <li>Fin: <I>hän maalaa sen punaiseksi</I> <li>Fre: <I>elle le peint en rouge</I> <li>Ger: <I>sie malt es rot</I> <li>Ita: <I>lei lo dipinge rosso</I> <li>Nep: <I>उनी यो लाई रातो रँग लागाउँछिन्</I> <li>Nor: <I>hun maler det rødt</I> <li>Pes: <I>او آن را قرمز رنگ می کند</I> <li>Pnb: <I>او اینوں لال رنگ كردی اے</I> <li>Pol: <I>ona maluje je na czerwono</I> <li>Ron: <I>ea îl pictează roşu</I> <li>Rus: <I>она рисует красным его</I> <li>Spa: <I>ella lo pinta en rojo</I> <li>Swe: <I>hon målar det rött</I> <li>Urd: <I>وہ اس كو لال رنگ كرتی ہے</I> </ul> </div> </div></TD>-</TR>-<TR>-<TD><CODE>mkCl</CODE></TD>-<TD><A HREF="#NP" TITLE="NP - noun phrase (subject or object)">NP</A> <CODE>-></CODE> <A HREF="#V2A" TITLE="V2A - verb with NP and AP complement">V2A</A> <CODE>-></CODE> <A HREF="#NP" TITLE="NP - noun phrase (subject or object)">NP</A> <CODE>-></CODE> <A HREF="#AP" TITLE="AP - adjectival phrase">AP</A> <CODE>-></CODE> <A HREF="#Cl" TITLE="Cl - declarative clause, with all tenses">Cl</A></TD>-<TD><div class=reveal> <I>she paints it red</I> <div class=popup> <ul> <li>API: <CODE>mkCl she_NP paint_V2A it_NP (mkAP red_A)</CODE> <li>Afr: <I>sy skilder dit rooi</I> <li>Bul: <I>тя рисува него червено</I> <li>Cat: <I>ella ho pinta en vermell</I> <li>Dan: <I>hun maler det rødt</I> <li>Dut: <I>ze schildeert het rood</I> <li>Eng: <I>she paints it red</I> <li>Fin: <I>hän maalaa sen punaiseksi</I> <li>Fre: <I>elle le peint en rouge</I> <li>Ger: <I>sie malt es rot</I> <li>Ita: <I>lei lo dipinge rosso</I> <li>Nep: <I>उनी यो लाई रातो रँग लागाउँछिन्</I> <li>Nor: <I>hun maler det rødt</I> <li>Pes: <I>او آن را قرمز رنگ می کند</I> <li>Pnb: <I>او اینوں لال رنگ كردی اے</I> <li>Pol: <I>ona maluje je na czerwono</I> <li>Ron: <I>ea îl pictează roşu</I> <li>Rus: <I>она рисует красным его</I> <li>Spa: <I>ella lo pinta en rojo</I> <li>Swe: <I>hon målar det rött</I> <li>Urd: <I>وہ اس كو لال رنگ كرتی ہے</I> </ul> </div> </div></TD>-</TR>-<TR>-<TD><CODE>mkCl</CODE></TD>-<TD><A HREF="#NP" TITLE="NP - noun phrase (subject or object)">NP</A> <CODE>-></CODE> <A HREF="#V2S" TITLE="V2S - verb with NP and S complement">V2S</A> <CODE>-></CODE> <A HREF="#NP" TITLE="NP - noun phrase (subject or object)">NP</A> <CODE>-></CODE> <A HREF="#S" TITLE="S - declarative sentence">S</A> <CODE>-></CODE> <A HREF="#Cl" TITLE="Cl - declarative clause, with all tenses">Cl</A></TD>-<TD><div class=reveal> <I>she answers to him that we sleep</I> <div class=popup> <ul> <li>API: <CODE>mkCl she_NP answer_V2S he_NP (mkS (mkCl we_NP sleep_V))</CODE> <li>Afr: <I>sy antwoord hom dat ons slaap</I> <li>Bul: <I>тя отговаря му , че ние спим</I> <li>Cat: <I>ella li respon que nosaltres dormim</I> <li>Dan: <I>hun svarer til ham at vi sover</I> <li>Dut: <I>ze antwoordt hem dat we slapen</I> <li>Eng: <I>she answers to him that we sleep</I> <li>Fin: <I>hän vastaa hänelle että me nukumme</I> <li>Fre: <I>elle lui répond que nous dormons</I> <li>Ger: <I>sie antwortet ihm daß wir schlafen</I> <li>Ita: <I>lei gli risponde che noi dormiamo</I> <li>Nep: <I>उनी उ लाई उत्तर दिन्छिन्की हामीहरु सुत्छौँ</I> <li>Nor: <I>hun svarer til ham at vi sover</I> <li>Pes: <I>او به او جواب می دهد که ما می خوابیم</I> <li>Pnb: <I>او اونوں جواب دیندی اے كہ اسی سوندے واں</I> <li>Pol: <I>ona odpowiada jemu , że my śpimy</I> <li>Ron: <I>ea îi răspunde cã noi dormim</I> <li>Rus: <I>она отвечает , что мы спдим его</I> <li>Spa: <I>ella le responde que nosotros dormimos</I> <li>Swe: <I>hon svarar till honom att vi sover</I> <li>Urd: <I>وہ اس كو جواب دیتی ہے كہ ہم سوتے ہیں</I> </ul> </div> </div></TD>-</TR>-<TR>-<TD><CODE>mkCl</CODE></TD>-<TD><A HREF="#NP" TITLE="NP - noun phrase (subject or object)">NP</A> <CODE>-></CODE> <A HREF="#V2Q" TITLE="V2Q - verb with NP and Q complement">V2Q</A> <CODE>-></CODE> <A HREF="#NP" TITLE="NP - noun phrase (subject or object)">NP</A> <CODE>-></CODE> <A HREF="#QS" TITLE="QS - question">QS</A> <CODE>-></CODE> <A HREF="#Cl" TITLE="Cl - declarative clause, with all tenses">Cl</A></TD>-<TD><div class=reveal> <I>she asks him who sleeps</I> <div class=popup> <ul> <li>API: <CODE>mkCl she_NP ask_V2Q he_NP (mkQS (mkQCl who_IP sleep_V))</CODE> <li>Afr: <I>sy vra hom wie slaap</I> <li>Bul: <I>тя пита него кой спи</I> <li>Cat: <I>ella li pregunta qui dorm</I> <li>Dan: <I>hun spørger ham hvem som sover</I> <li>Dut: <I>ze vraagt hem wie slaapt</I> <li>Eng: <I>she asks him who sleeps</I> <li>Fin: <I>hän kysyy häneltä kuka nukkuu</I> <li>Fre: <I>elle lui demande qui dort</I> <li>Ger: <I>sie fragt ihn wer schläft</I> <li>Ita: <I>lei gli chiede chi dorme</I> <li>Nep: <I>उनी उ सँग सोध्छिन्की को सुत्छन्</I> <li>Nor: <I>hun spørr ham hvem som sover</I> <li>Pes: <I>او از او می پرسد چه کسی می خوابد</I> <li>Pnb: <I>او اونوں پچھدی اے كہ كون سوندا اے</I> <li>Pol: <I>ona pyta jego , kto śpi</I> <li>Ron: <I>ea îl întreabă cine doarme</I> <li>Rus: <I>она спрашивает кто спдит его</I> <li>Spa: <I>ella le pregunta quién duerme</I> <li>Swe: <I>hon frågar honom vem som sover</I> <li>Urd: <I>وہ اس سے پوچھتی ہے كہ كون سوتا ہے</I> </ul> </div> </div></TD>-</TR>-<TR>-<TD><CODE>mkCl</CODE></TD>-<TD><A HREF="#NP" TITLE="NP - noun phrase (subject or object)">NP</A> <CODE>-></CODE> <A HREF="#V2V" TITLE="V2V - verb with NP and V complement">V2V</A> <CODE>-></CODE> <A HREF="#NP" TITLE="NP - noun phrase (subject or object)">NP</A> <CODE>-></CODE> <A HREF="#VP" TITLE="VP - verb phrase">VP</A> <CODE>-></CODE> <A HREF="#Cl" TITLE="Cl - declarative clause, with all tenses">Cl</A></TD>-<TD><div class=reveal> <I>she begs him to sleep</I> <div class=popup> <ul> <li>API: <CODE>mkCl she_NP beg_V2V he_NP (mkVP sleep_V)</CODE> <li>Afr: <I>sy smeek hom te slaap</I> <li>Bul: <I>тя моли него да спи</I> <li>Cat: <I>ella el demana a dormir</I> <li>Dan: <I>hun beder ham at sove</I> <li>Dut: <I>ze smeekt hem te slapen</I> <li>Eng: <I>she begs him to sleep</I> <li>Fin: <I>hän pyytää häntä nukkumaan</I> <li>Fre: <I>elle le demande à dormir</I> <li>Ger: <I>sie bittet ihn zu schlafen</I> <li>Ita: <I>lei lo prega di dormire</I> <li>Nep: <I>उनी उ लाई सुत्न आग्रह गर्छिन्</I> <li>Nor: <I>hun ber ham att sove</I> <li>Pes: <I>او از او خواهش می کند بخوابد</I> <li>Pnb: <I>او اونوں سونا دی مانگدی اے</I> <li>Pol: <I>*</I> <li>Ron: <I>ea îl roagă sã doarmă</I> <li>Rus: <I>она просит спать его</I> <li>Spa: <I>ella lo roga a dormir</I> <li>Swe: <I>hon ber honom att sova</I> <li>Urd: <I>وہ اس سے سونے كی التجا كرتی ہے</I> </ul> </div> </div></TD>-</TR>-<TR>-<TD><CODE>mkCl</CODE></TD>-<TD><A HREF="#NP" TITLE="NP - noun phrase (subject or object)">NP</A> <CODE>-></CODE> <A HREF="#A" TITLE="A - one-place adjective">A</A> <CODE>-></CODE> <A HREF="#Cl" TITLE="Cl - declarative clause, with all tenses">Cl</A></TD>-<TD><div class=reveal> <I>she is old</I> <div class=popup> <ul> <li>API: <CODE>mkCl she_NP old_A</CODE> <li>Afr: <I>sy is oud</I> <li>Bul: <I>тя е стара</I> <li>Cat: <I>ella és vell</I> <li>Dan: <I>hun er gammel</I> <li>Dut: <I>ze is oud</I> <li>Eng: <I>she is old</I> <li>Fin: <I>hän on vanha</I> <li>Fre: <I>elle est vieille</I> <li>Ger: <I>sie ist alt</I> <li>Ita: <I>lei è vecchia</I> <li>Nep: <I>उनी बुढी छिन्</I> <li>Nor: <I>hun er gammel</I> <li>Pes: <I>او پیر است</I> <li>Pnb: <I>او بوڈی اے</I> <li>Pol: <I>ona jest stara</I> <li>Ron: <I>ea este veche</I> <li>Rus: <I>она старая</I> <li>Spa: <I>ella es vieja</I> <li>Swe: <I>hon är gammal</I> <li>Urd: <I>وہ بوڑھی ہے</I> </ul> </div> </div></TD>-</TR>-<TR>-<TD><CODE>mkCl</CODE></TD>-<TD><A HREF="#NP" TITLE="NP - noun phrase (subject or object)">NP</A> <CODE>-></CODE> <A HREF="#A" TITLE="A - one-place adjective">A</A> <CODE>-></CODE> <A HREF="#NP" TITLE="NP - noun phrase (subject or object)">NP</A> <CODE>-></CODE> <A HREF="#Cl" TITLE="Cl - declarative clause, with all tenses">Cl</A></TD>-<TD><div class=reveal> <I>she is older than he</I> <div class=popup> <ul> <li>API: <CODE>mkCl she_NP old_A he_NP</CODE> <li>Afr: <I>sy is ouer as hy</I> <li>Bul: <I>тя е по - стара от него</I> <li>Cat: <I>ella és més vell que ell</I> <li>Dan: <I>hun er ældre end han</I> <li>Dut: <I>ze is ouder dan hij</I> <li>Eng: <I>she is older than he</I> <li>Fin: <I>hän on vanhempi kuin hän</I> <li>Fre: <I>elle est plus vieille que lui</I> <li>Ger: <I>sie ist älter als er</I> <li>Ita: <I>lei è più vecchia di lui</I> <li>Nep: <I>उनी उ भन्दा बुढी छिन्</I> <li>Nor: <I>hun er eldre enn han</I> <li>Pes: <I>او پیر تر از او است</I> <li>Pnb: <I>او اورے توں بوڈی اے</I> <li>Pol: <I>ona jest starsza niż on</I> <li>Ron: <I>ea este mai veche decât el</I> <li>Rus: <I>она старше него</I> <li>Spa: <I>ella es más vieja que él</I> <li>Swe: <I>hon är äldre än han</I> <li>Urd: <I>وہ اس سے بوڑھی ہے</I> </ul> </div> </div></TD>-</TR>-<TR>-<TD><CODE>mkCl</CODE></TD>-<TD><A HREF="#NP" TITLE="NP - noun phrase (subject or object)">NP</A> <CODE>-></CODE> <A HREF="#A2" TITLE="A2 - two-place adjective">A2</A> <CODE>-></CODE> <A HREF="#NP" TITLE="NP - noun phrase (subject or object)">NP</A> <CODE>-></CODE> <A HREF="#Cl" TITLE="Cl - declarative clause, with all tenses">Cl</A></TD>-<TD><div class=reveal> <I>she is married to him</I> <div class=popup> <ul> <li>API: <CODE>mkCl she_NP married_A2 he_NP</CODE> <li>Afr: <I>sy is getroud met hom</I> <li>Bul: <I>тя е женена за него</I> <li>Cat: <I>ella és casata a ell</I> <li>Dan: <I>hun er gift med ham</I> <li>Dut: <I>ze is getrouwd met hem</I> <li>Eng: <I>she is married to him</I> <li>Fin: <I>hän on avioitunut hänen kanssa</I> <li>Fre: <I>elle est mariée à lui</I> <li>Ger: <I>sie ist verheiratet mit ihm</I> <li>Ita: <I>lei è sposata con lui</I> <li>Nep: <I>उनी उ सँग विवाहित छिन्</I> <li>Nor: <I>hun er gift med ham</I> <li>Pes: <I>او او متأهل است</I> <li>Pnb: <I>*</I> <li>Pol: <I>ona jest zaślubiona jemu</I> <li>Ron: <I>ea este căsătorită cu el</I> <li>Rus: <I>она замужем за им</I> <li>Spa: <I>ella es casada a él</I> <li>Swe: <I>hon är gift med honom</I> <li>Urd: <I>وہ اس سے [شادی كرنa] ہے</I> </ul> </div> </div></TD>-</TR>-<TR>-<TD><CODE>mkCl</CODE></TD>-<TD><A HREF="#NP" TITLE="NP - noun phrase (subject or object)">NP</A> <CODE>-></CODE> <A HREF="#AP" TITLE="AP - adjectival phrase">AP</A> <CODE>-></CODE> <A HREF="#Cl" TITLE="Cl - declarative clause, with all tenses">Cl</A></TD>-<TD><div class=reveal> <I>she is very old</I> <div class=popup> <ul> <li>API: <CODE>mkCl she_NP (mkAP very_AdA old_A)</CODE> <li>Afr: <I>sy is baie oud</I> <li>Bul: <I>тя е много стара</I> <li>Cat: <I>ella és molt vell</I> <li>Dan: <I>hun er meget gammel</I> <li>Dut: <I>ze is erg oud</I> <li>Eng: <I>she is very old</I> <li>Fin: <I>hän on erittäin vanha</I> <li>Fre: <I>elle est très vieille</I> <li>Ger: <I>sie ist sehr alt</I> <li>Ita: <I>lei è molto vecchia</I> <li>Nep: <I>उनी धेरै बुढी छिन्</I> <li>Nor: <I>hun er mye gammel</I> <li>Pes: <I>او خیلی پیر است</I> <li>Pnb: <I>او بہت بوڈی اے</I> <li>Pol: <I>ona jest bardzo stara</I> <li>Ron: <I>ea este foarte veche</I> <li>Rus: <I>она очень старая</I> <li>Spa: <I>ella es muy vieja</I> <li>Swe: <I>hon är mycket gammal</I> <li>Urd: <I>وہ بہت بوڑھی ہے</I> </ul> </div> </div></TD>-</TR>-<TR>-<TD><CODE>mkCl</CODE></TD>-<TD><A HREF="#NP" TITLE="NP - noun phrase (subject or object)">NP</A> <CODE>-></CODE> <A HREF="#NP" TITLE="NP - noun phrase (subject or object)">NP</A> <CODE>-></CODE> <A HREF="#Cl" TITLE="Cl - declarative clause, with all tenses">Cl</A></TD>-<TD><div class=reveal> <I>she is the woman</I> <div class=popup> <ul> <li>API: <CODE>mkCl she_NP (mkNP the_Det woman_N)</CODE> <li>Afr: <I>sy is die vrou</I> <li>Bul: <I>тя е жената</I> <li>Cat: <I>ella és la dona</I> <li>Dan: <I>hun er kvinden</I> <li>Dut: <I>ze is de vrouw</I> <li>Eng: <I>she is the woman</I> <li>Fin: <I>hän on nainen</I> <li>Fre: <I>elle est la femme</I> <li>Ger: <I>sie ist die Frau</I> <li>Ita: <I>lei è la donna</I> <li>Nep: <I>उनी आईमाई हुन्</I> <li>Nor: <I>hun er kvinna</I> <li>Pes: <I>او زن است</I> <li>Pnb: <I>او زنانی اے</I> <li>Pol: <I>ona jest kobietą</I> <li>Ron: <I>ea este femeia</I> <li>Rus: <I>она женщина</I> <li>Spa: <I>ella es la mujer</I> <li>Swe: <I>hon är kvinnan</I> <li>Urd: <I>وہ عورت ہے</I> </ul> </div> </div></TD>-</TR>-<TR>-<TD><CODE>mkCl</CODE></TD>-<TD><A HREF="#NP" TITLE="NP - noun phrase (subject or object)">NP</A> <CODE>-></CODE> <A HREF="#N" TITLE="N - common noun">N</A> <CODE>-></CODE> <A HREF="#Cl" TITLE="Cl - declarative clause, with all tenses">Cl</A></TD>-<TD><div class=reveal> <I>she is a woman</I> <div class=popup> <ul> <li>API: <CODE>mkCl she_NP woman_N</CODE> <li>Afr: <I>sy is 'n vrou</I> <li>Bul: <I>тя е жена</I> <li>Cat: <I>ella és una dona</I> <li>Dan: <I>hun er en kvinde</I> <li>Dut: <I>ze is vrouw</I> <li>Eng: <I>she is a woman</I> <li>Fin: <I>hän on nainen</I> <li>Fre: <I>elle est une femme</I> <li>Ger: <I>sie ist eine Frau</I> <li>Ita: <I>lei è una donna</I> <li>Nep: <I>उनी आईमाई हुन्</I> <li>Nor: <I>hun er ei kvinne</I> <li>Pes: <I>او زن است</I> <li>Pnb: <I>او زنانی اے</I> <li>Pol: <I>ona jest kobieta</I> <li>Ron: <I>ea este femeie</I> <li>Rus: <I>она женщина</I> <li>Spa: <I>ella es una mujer</I> <li>Swe: <I>hon är en kvinna</I> <li>Urd: <I>وہ عورت ہے</I> </ul> </div> </div></TD>-</TR>-<TR>-<TD><CODE>mkCl</CODE></TD>-<TD><A HREF="#NP" TITLE="NP - noun phrase (subject or object)">NP</A> <CODE>-></CODE> <A HREF="#CN" TITLE="CN - common noun (without determiner)">CN</A> <CODE>-></CODE> <A HREF="#Cl" TITLE="Cl - declarative clause, with all tenses">Cl</A></TD>-<TD><div class=reveal> <I>she is an old woman</I> <div class=popup> <ul> <li>API: <CODE>mkCl she_NP (mkCN old_A woman_N)</CODE> <li>Afr: <I>sy is 'n oud vrou</I> <li>Bul: <I>тя е стара жена</I> <li>Cat: <I>ella és una dona vell</I> <li>Dan: <I>hun er en gammel kvinde</I> <li>Dut: <I>ze is oude vrouw</I> <li>Eng: <I>she is an old woman</I> <li>Fin: <I>hän on vanha nainen</I> <li>Fre: <I>elle est une vieille femme</I> <li>Ger: <I>sie ist eine alte Frau</I> <li>Ita: <I>lei è una vecchia donna</I> <li>Nep: <I>उनी बुढी आईमाई हुन्</I> <li>Nor: <I>hun er ei gammel kvinne</I> <li>Pes: <I>او زن پیر است</I> <li>Pnb: <I>او بوڈی زنانی اے</I> <li>Pol: <I>ona jest stara kobieta</I> <li>Ron: <I>ea este femeie veche</I> <li>Rus: <I>она старая женщина</I> <li>Spa: <I>ella es una vieja mujer</I> <li>Swe: <I>hon är en gammal kvinna</I> <li>Urd: <I>وہ بوڑھی عورت ہے</I> </ul> </div> </div></TD>-</TR>-<TR>-<TD><CODE>mkCl</CODE></TD>-<TD><A HREF="#NP" TITLE="NP - noun phrase (subject or object)">NP</A> <CODE>-></CODE> <A HREF="#Adv" TITLE="Adv - verb-phrase-modifying adverb">Adv</A> <CODE>-></CODE> <A HREF="#Cl" TITLE="Cl - declarative clause, with all tenses">Cl</A></TD>-<TD><div class=reveal> <I>she is here</I> <div class=popup> <ul> <li>API: <CODE>mkCl she_NP here_Adv</CODE> <li>Afr: <I>sy is hier</I> <li>Bul: <I>тя е тук</I> <li>Cat: <I>ella és aquí</I> <li>Dan: <I>hun er her</I> <li>Dut: <I>ze is hier</I> <li>Eng: <I>she is here</I> <li>Fin: <I>hän on täällä</I> <li>Fre: <I>elle est ici</I> <li>Ger: <I>sie ist hier</I> <li>Ita: <I>lei è quà</I> <li>Nep: <I>उनी यहाँ छिन्</I> <li>Nor: <I>hun er her</I> <li>Pes: <I>او اینجا است</I> <li>Pnb: <I>او ایتھے اے</I> <li>Pol: <I>ona jest tutaj</I> <li>Ron: <I>ea este aici</I> <li>Rus: <I>она здесь</I> <li>Spa: <I>ella es aquí</I> <li>Swe: <I>hon är här</I> <li>Urd: <I>وہ یہاں ہے</I> </ul> </div> </div></TD>-</TR>-<TR>-<TD><CODE>mkCl</CODE></TD>-<TD><A HREF="#NP" TITLE="NP - noun phrase (subject or object)">NP</A> <CODE>-></CODE> <A HREF="#VP" TITLE="VP - verb phrase">VP</A> <CODE>-></CODE> <A HREF="#Cl" TITLE="Cl - declarative clause, with all tenses">Cl</A></TD>-<TD><div class=reveal> <I>she always sleeps</I> <div class=popup> <ul> <li>API: <CODE>mkCl she_NP (mkVP always_AdV (mkVP sleep_V))</CODE> <li>Afr: <I>sy slaap altyd altyd</I> <li>Bul: <I>тя винаги спи</I> <li>Cat: <I>ella dorm sempre</I> <li>Dan: <I>hun sover altid</I> <li>Dut: <I>ze slaapt altijd</I> <li>Eng: <I>she always sleeps</I> <li>Fin: <I>hän nukkuu aina</I> <li>Fre: <I>elle dort toujours</I> <li>Ger: <I>sie schläft immer</I> <li>Ita: <I>lei dorme sempre</I> <li>Nep: <I>उनी सधैँ सुत्छिन्</I> <li>Nor: <I>hun sover altid</I> <li>Pes: <I>او همیشه می خوابد</I> <li>Pnb: <I>او ہمیشہ سوندی اے</I> <li>Pol: <I>ona zawsze śpi</I> <li>Ron: <I>ea doarme mereu</I> <li>Rus: <I>она спдит всегда</I> <li>Spa: <I>ella duerme siempre</I> <li>Swe: <I>hon sover alltid</I> <li>Urd: <I>وہ ہمیشہ سوتی ہے</I> </ul> </div> </div></TD>-</TR>-<TR>-<TD><CODE>mkCl</CODE></TD>-<TD><A HREF="#N" TITLE="N - common noun">N</A> <CODE>-></CODE> <A HREF="#Cl" TITLE="Cl - declarative clause, with all tenses">Cl</A></TD>-<TD><div class=reveal> <I>there is a house</I> <div class=popup> <ul> <li>API: <CODE>mkCl house_N</CODE> <li>Afr: <I>daar is 'n huis</I> <li>Bul: <I>има къща</I> <li>Cat: <I>hi ha una casa</I> <li>Dan: <I>det findes et hus</I> <li>Dut: <I>er is een huis</I> <li>Eng: <I>there is a house</I> <li>Fin: <I>on olemassa talo</I> <li>Fre: <I>il y a une maison</I> <li>Ger: <I>es gibt ein Haus</I> <li>Ita: <I>c' è una casa</I> <li>Nep: <I>त्यहाँ घर छ</I> <li>Nor: <I>det finnes et hus</I> <li>Pes: <I>یک خانه است</I> <li>Pnb: <I>اوتھے گھر اے</I> <li>Pol: <I>jest dom</I> <li>Ron: <I>există o casă</I> <li>Rus: <I>существует дом</I> <li>Spa: <I>hay una casa</I> <li>Swe: <I>det finns ett hus</I> <li>Urd: <I>وہاں ایك گھر ہے</I> </ul> </div> </div></TD>-</TR>-<TR>-<TD><CODE>mkCl</CODE></TD>-<TD><A HREF="#CN" TITLE="CN - common noun (without determiner)">CN</A> <CODE>-></CODE> <A HREF="#Cl" TITLE="Cl - declarative clause, with all tenses">Cl</A></TD>-<TD><I>there is an old house</I></TD>-</TR>-<TR>-<TD><CODE>mkCl</CODE></TD>-<TD><A HREF="#NP" TITLE="NP - noun phrase (subject or object)">NP</A> <CODE>-></CODE> <A HREF="#Cl" TITLE="Cl - declarative clause, with all tenses">Cl</A></TD>-<TD><div class=reveal> <I>there are many houses</I> <div class=popup> <ul> <li>API: <CODE>mkCl (mkNP many_Det house_N)</CODE> <li>Afr: <I>daar is baie huise</I> <li>Bul: <I>има много къщи</I> <li>Cat: <I>hi ha moltes cases</I> <li>Dan: <I>det findes mange huse</I> <li>Dut: <I>er zijn veel huizen</I> <li>Eng: <I>there are many houses</I> <li>Fin: <I>on olemassa moni talo</I> <li>Fre: <I>il y a plusieurs maisons</I> <li>Ger: <I>es gibt viele Häuser</I> <li>Ita: <I>ci sono molte case</I> <li>Nep: <I>त्यहाँ थुप्रै घरहरु छन्</I> <li>Nor: <I>det finnes mange hus</I> <li>Pes: <I>تعداد زیادی خانه هستند</I> <li>Pnb: <I>اوتھے بہت زیادہ گھر نے</I> <li>Pol: <I>jest wiele domów</I> <li>Ron: <I>există multe case</I> <li>Rus: <I>существует много дома</I> <li>Spa: <I>hay muchas casas</I> <li>Swe: <I>det finns många hus</I> <li>Urd: <I>وہاں بہت زیادہ گھر ہیں</I> </ul> </div> </div></TD>-</TR>-<TR>-<TD><CODE>mkCl</CODE></TD>-<TD><A HREF="#NP" TITLE="NP - noun phrase (subject or object)">NP</A> <CODE>-></CODE> <A HREF="#RS" TITLE="RS - relative">RS</A> <CODE>-></CODE> <A HREF="#Cl" TITLE="Cl - declarative clause, with all tenses">Cl</A></TD>-<TD><div class=reveal> <I>it is she who sleeps</I> <div class=popup> <ul> <li>API: <CODE>mkCl she_NP (mkRS (mkRCl which_RP (mkVP sleep_V)))</CODE> <li>Afr: <I>dit is sy wat slaap</I> <li>Bul: <I>тя е тaзи която спи</I> <li>Cat: <I>és ella que dorm</I> <li>Dan: <I>det er hun som sover</I> <li>Dut: <I>'t is ze die slaapt</I> <li>Eng: <I>it is she who sleeps</I> <li>Fin: <I>se on hän joka nukkuu</I> <li>Fre: <I>c' est elle qui dort</I> <li>Ger: <I>es ist sie die schläft</I> <li>Ita: <I>è lei che dorme</I> <li>Nep: <I>उनी हुन् जो सुत्छिन्</I> <li>Nor: <I>det er hun som sover</I> <li>Pes: <I>او است که می خوابد</I> <li>Pnb: <I>او اے جیڑی سوندی اے</I> <li>Pol: <I>to ona , która śpi</I> <li>Ron: <I>este ea care doarme</I> <li>Rus: <I>это она , которая спдит</I> <li>Spa: <I>es ella que duerme</I> <li>Swe: <I>det är hon som sover</I> <li>Urd: <I>وہ ہے جو سوتی ہے</I> </ul> </div> </div></TD>-</TR>-<TR>-<TD><CODE>mkCl</CODE></TD>-<TD><A HREF="#Adv" TITLE="Adv - verb-phrase-modifying adverb">Adv</A> <CODE>-></CODE> <A HREF="#S" TITLE="S - declarative sentence">S</A> <CODE>-></CODE> <A HREF="#Cl" TITLE="Cl - declarative clause, with all tenses">Cl</A></TD>-<TD><div class=reveal> <I>it is here that she sleeps</I> <div class=popup> <ul> <li>API: <CODE>mkCl here_Adv (mkS (mkCl she_NP sleep_V))</CODE> <li>Afr: <I>dit is hier dat sy slaap</I> <li>Bul: <I>тук тя спи</I> <li>Cat: <I>és aquí que ella dorm</I> <li>Dan: <I>det er her hun sover</I> <li>Dut: <I>'t is hier dat ze slaapt</I> <li>Eng: <I>it is here that she sleeps</I> <li>Fin: <I>se on täällä kun hän nukkuu</I> <li>Fre: <I>c' est ici qu' elle dort</I> <li>Ger: <I>es ist hier daß sie schläft</I> <li>Ita: <I>è quà che lei dorme</I> <li>Nep: <I>यहाँ उनी सुत्छिन्</I> <li>Nor: <I>det er her hun sover</I> <li>Pes: <I>اینجا او می خوابد</I> <li>Pnb: <I>ایتھے او سوندی اے</I> <li>Pol: <I>tutaj ona śpi</I> <li>Ron: <I>este aici cã ea doarme</I> <li>Rus: <I>это здесь , она спдит</I> <li>Spa: <I>es aquí que ella duerme</I> <li>Swe: <I>det är här hon sover</I> <li>Urd: <I>یہاں وہ سوتی ہے</I> </ul> </div> </div></TD>-</TR>-<TR>-<TD><CODE>mkCl</CODE></TD>-<TD><A HREF="#V" TITLE="V - one-place verb">V</A> <CODE>-></CODE> <A HREF="#Cl" TITLE="Cl - declarative clause, with all tenses">Cl</A></TD>-<TD><div class=reveal> <I>it rains</I> <div class=popup> <ul> <li>API: <CODE>mkCl rain_V0</CODE> <li>Afr: <I>dit reën</I> <li>Bul: <I>вали</I> <li>Cat: <I>plou</I> <li>Dan: <I>det regner</I> <li>Dut: <I>'t regeent</I> <li>Eng: <I>it rains</I> <li>Fin: <I>sataa</I> <li>Fre: <I>il pleut</I> <li>Ger: <I>es regnet</I> <li>Ita: <I>piove</I> <li>Nep: <I>बर्षा हुन्छ</I> <li>Nor: <I>det regner</I> <li>Pes: <I>باران می آید</I> <li>Pnb: <I>بارش ہوندا اے</I> <li>Pol: <I>pada</I> <li>Ron: <I>plouă</I> <li>Rus: <I>идет дождь</I> <li>Spa: <I>llueve</I> <li>Swe: <I>det regnar</I> <li>Urd: <I>بارش ہوتا ہے</I> </ul> </div> </div></TD>-</TR>-<TR>-<TD><CODE>mkCl</CODE></TD>-<TD><A HREF="#VP" TITLE="VP - verb phrase">VP</A> <CODE>-></CODE> <A HREF="#Cl" TITLE="Cl - declarative clause, with all tenses">Cl</A></TD>-<TD><div class=reveal> <I>it is raining</I> <div class=popup> <ul> <li>API: <CODE>mkCl (progressiveVP (mkVP rain_V0))</CODE> <li>Afr: <I>dit is aan die reën</I> <li>Bul: <I>вали</I> <li>Cat: <I>està plovent</I> <li>Dan: <I>det er ved å regne</I> <li>Dut: <I>'t is aan het regenen</I> <li>Eng: <I>it is raining</I> <li>Fin: <I>on satamassa</I> <li>Fre: <I>il est en train de pleuvoir</I> <li>Ger: <I>es regnet eben</I> <li>Ita: <I>sta piovendo</I> <li>Nep: <I>बर्षा भदै छ</I> <li>Nor: <I>det er ved å regne</I> <li>Pes: <I>دارد باران می آید</I> <li>Pnb: <I>بارش ہوندا پیا اے</I> <li>Pol: <I>pada</I> <li>Ron: <I>plouă</I> <li>Rus: <I>идет дождь</I> <li>Spa: <I>está lloviendo</I> <li>Swe: <I>det håller på att regna</I> <li>Urd: <I>بارش ہو رہا ہے</I> </ul> </div> </div></TD>-</TR>-<TR>-<TD><CODE>mkCl</CODE></TD>-<TD><A HREF="#SC" TITLE="SC - embedded sentence or question">SC</A> <CODE>-></CODE> <A HREF="#VP" TITLE="VP - verb phrase">VP</A> <CODE>-></CODE> <A HREF="#Cl" TITLE="Cl - declarative clause, with all tenses">Cl</A></TD>-<TD><div class=reveal> <I>that she sleeps is good</I> <div class=popup> <ul> <li>API: <CODE>mkCl (mkSC (mkS (mkCl she_NP sleep_V))) (mkVP good_A)</CODE> <li>Afr: <I>dat sy slaap is goed</I> <li>Bul: <I>, че тя спи е добър</I> <li>Cat: <I>que ella dorm és bo</I> <li>Dan: <I>at hun sover er godt</I> <li>Dut: <I>dat ze slaapt is goed</I> <li>Eng: <I>that she sleeps is good</I> <li>Fin: <I>että hän nukkuu on hyvä</I> <li>Fre: <I>qu' elle dort est bon</I> <li>Ger: <I>daß sie schläft ist gut</I> <li>Ita: <I>che lei dorme è buono</I> <li>Nep: <I>की उनी सुत्छिन् राम्रो छ</I> <li>Nor: <I>at hun sover er godt</I> <li>Pes: <I>این که او می خوابد خوب است</I> <li>Pnb: <I>كہ او سوندی اے اچھا اے</I> <li>Pol: <I>, że ona śpi jest dobre</I> <li>Ron: <I>cã ea doarme este bun</I> <li>Rus: <I>что она спдит хорошее</I> <li>Spa: <I>que ella duerme es bueno</I> <li>Swe: <I>att hon sover är gott</I> <li>Urd: <I>كہ وہ سوتی ہے اچھا ہے</I> </ul> </div> </div></TD>-</TR>-</TABLE>--<A NAME="ClSlash"></A>-<H2>ClSlash</H2>--<TABLE BORDER="1" CELLPADDING="4">-<TR>-<TH>Function</TH>-<TH>Type</TH>-<TH COLSPAN="2">Example</TH>-</TR>-<TR>-<TD><CODE>mkClSlash</CODE></TD>-<TD><A HREF="#NP" TITLE="NP - noun phrase (subject or object)">NP</A> <CODE>-></CODE> <A HREF="#VPSlash" TITLE="VPSlash - verb phrase missing complement">VPSlash</A> <CODE>-></CODE> <A HREF="#ClSlash">ClSlash</A></TD>-<TD><div class=reveal> <I>whom does she see</I> <div class=popup> <ul> <li>API: <CODE>mkQCl who_IP (mkClSlash she_NP (mkVPSlash see_V2))</CODE> <li>Afr: <I>wie sien sy</I> <li>Bul: <I>кого вижда тя</I> <li>Cat: <I>qui veu ella</I> <li>Dan: <I>hvem ser hun</I> <li>Dut: <I>wie zit ze</I> <li>Eng: <I>whom does she see</I> <li>Fin: <I>kenet hän näkee</I> <li>Fre: <I>qui voit elle</I> <li>Ger: <I>wen sieht sie</I> <li>Ita: <I>chi vede lei</I> <li>Nep: <I>कासलाई उनी हेर्छिन्</I> <li>Nor: <I>hvem ser hun</I> <li>Pes: <I>چه کسی را او می بیند</I> <li>Pnb: <I>كون او ویكھدی اے</I> <li>Pol: <I>kogo widzi ona</I> <li>Ron: <I>pe cine vede ea</I> <li>Rus: <I>кого она видит</I> <li>Spa: <I>quién ve ella</I> <li>Swe: <I>vem ser hon</I> <li>Urd: <I>كون وہ دیكھتی ہے</I> </ul> </div> </div></TD>-</TR>-<TR>-<TD><CODE>mkClSlash</CODE></TD>-<TD><A HREF="#NP" TITLE="NP - noun phrase (subject or object)">NP</A> <CODE>-></CODE> <A HREF="#V2" TITLE="V2 - two-place verb">V2</A> <CODE>-></CODE> <A HREF="#ClSlash">ClSlash</A></TD>-<TD><div class=reveal> <I>whom does she see</I> <div class=popup> <ul> <li>API: <CODE>mkQCl who_IP (mkClSlash she_NP see_V2)</CODE> <li>Afr: <I>wie sien sy</I> <li>Bul: <I>кого вижда тя</I> <li>Cat: <I>qui veu ella</I> <li>Dan: <I>hvem ser hun</I> <li>Dut: <I>wie zit ze</I> <li>Eng: <I>whom does she see</I> <li>Fin: <I>kenet hän näkee</I> <li>Fre: <I>qui voit elle</I> <li>Ger: <I>wen sieht sie</I> <li>Ita: <I>chi vede lei</I> <li>Nep: <I>कासलाई उनी हेर्छिन्</I> <li>Nor: <I>hvem ser hun</I> <li>Pes: <I>چه کسی را او می بیند</I> <li>Pnb: <I>كون او ویكھدی اے</I> <li>Pol: <I>kogo widzi ona</I> <li>Ron: <I>pe cine vede ea</I> <li>Rus: <I>кого она видит</I> <li>Spa: <I>quién ve ella</I> <li>Swe: <I>vem ser hon</I> <li>Urd: <I>كون وہ دیكھتی ہے</I> </ul> </div> </div></TD>-</TR>-<TR>-<TD><CODE>mkClSlash</CODE></TD>-<TD><A HREF="#NP" TITLE="NP - noun phrase (subject or object)">NP</A> <CODE>-></CODE> <A HREF="#VV" TITLE="VV - verb-phrase-complement verb">VV</A> <CODE>-></CODE> <A HREF="#V2" TITLE="V2 - two-place verb">V2</A> <CODE>-></CODE> <A HREF="#ClSlash">ClSlash</A></TD>-<TD><div class=reveal> <I>whom does she want to see</I> <div class=popup> <ul> <li>API: <CODE>mkQCl who_IP (mkClSlash she_NP want_VV see_V2)</CODE> <li>Afr: <I>wie wil sy sien</I> <li>Bul: <I>кого иска да види тя</I> <li>Cat: <I>qui vol ella veure</I> <li>Dan: <I>hvem vil hun se</I> <li>Dut: <I>wie wil ze zien</I> <li>Eng: <I>whom does she want to see</I> <li>Fin: <I>kenet hän tahtoo nähdä</I> <li>Fre: <I>qui veut elle voir</I> <li>Ger: <I>wen will sie sehen</I> <li>Ita: <I>chi vuole lei vedere</I> <li>Nep: <I>कासलाई उनी हेर्न चाहन्छिन्</I> <li>Nor: <I>hvem vil hun se</I> <li>Pes: <I>چه کسی را او می خواهد ببیند</I> <li>Pnb: <I>كون او ویكھنا چاندی اے</I> <li>Pol: <I>kogo ona chce widzieć</I> <li>Ron: <I>pe cine vrea ea sã vadă</I> <li>Rus: <I>кого она хочет видеть</I> <li>Spa: <I>quién quiere ella ver</I> <li>Swe: <I>vem vill hon se</I> <li>Urd: <I>كون وہ دیكھنا چاہتی ہے</I> </ul> </div> </div></TD>-</TR>-<TR>-<TD><CODE>mkClSlash</CODE></TD>-<TD><A HREF="#Cl" TITLE="Cl - declarative clause, with all tenses">Cl</A> <CODE>-></CODE> <A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A> <CODE>-></CODE> <A HREF="#ClSlash">ClSlash</A></TD>-<TD><div class=reveal> <I>with whom does she sleep</I> <div class=popup> <ul> <li>API: <CODE>mkQCl who_IP (mkClSlash (mkCl she_NP sleep_V) with_Prep)</CODE> <li>Afr: <I>met wie slaap sy</I> <li>Bul: <I>с кого спи тя</I> <li>Cat: <I>amb qui dorm ella</I> <li>Dan: <I>med hvem sover hun</I> <li>Dut: <I>met wie slaapt ze</I> <li>Eng: <I>with whom does she sleep</I> <li>Fin: <I>kenen kanssa hän nukkuu</I> <li>Fre: <I>avec qui dort elle</I> <li>Ger: <I>mit wem schläft sie</I> <li>Ita: <I>con chi dorme lei</I> <li>Nep: <I>कासलाई उनी सुत्छिन्</I> <li>Nor: <I>med hvem sover hun</I> <li>Pes: <I>با چه کسی او می خوابد</I> <li>Pnb: <I>كون او سوندی اے</I> <li>Pol: <I>z kim ona śpi</I> <li>Ron: <I>cu cine doarme ea</I> <li>Rus: <I>с кем она спдит</I> <li>Spa: <I>con quién duerme ella</I> <li>Swe: <I>med vem sover hon</I> <li>Urd: <I>كون وہ سوتی ہے</I> </ul> </div> </div></TD>-</TR>-<TR>-<TD><CODE>mkClSlash</CODE></TD>-<TD><A HREF="#ClSlash">ClSlash</A> <CODE>-></CODE> <A HREF="#Adv" TITLE="Adv - verb-phrase-modifying adverb">Adv</A> <CODE>-></CODE> <A HREF="#ClSlash">ClSlash</A></TD>-<TD><div class=reveal> <I>whom does she see today</I> <div class=popup> <ul> <li>API: <CODE>mkQCl who_IP (mkClSlash (mkClSlash she_NP see_V2) today_Adv)</CODE> <li>Afr: <I>wie sien sy vandag</I> <li>Bul: <I>кого вижда тя днес</I> <li>Cat: <I>qui veu ella avui</I> <li>Dan: <I>hvem ser hun idag</I> <li>Dut: <I>wie zit ze vandaag</I> <li>Eng: <I>whom does she see today</I> <li>Fin: <I>kenet hän näkee tänään</I> <li>Fre: <I>qui voit elle aujourd'hui</I> <li>Ger: <I>wen sieht sie heute</I> <li>Ita: <I>chi vede lei oggi</I> <li>Nep: <I>कासलाई आज उनी हेर्छिन्</I> <li>Nor: <I>hvem ser hun idag</I> <li>Pes: <I>چه کسی را امروز او می بیند</I> <li>Pnb: <I>كون اج او ویكھدی اے</I> <li>Pol: <I>kogo dziś widzi ona</I> <li>Ron: <I>pe cine vede ea astăzi</I> <li>Rus: <I>*</I> <li>Spa: <I>quién ve ella hoy</I> <li>Swe: <I>vem ser hon idag</I> <li>Urd: <I>كون آج وہ دیكھتی ہے</I> </ul> </div> </div></TD>-</TR>-<TR>-<TD><CODE>mkClSlash</CODE></TD>-<TD><A HREF="#NP" TITLE="NP - noun phrase (subject or object)">NP</A> <CODE>-></CODE> <A HREF="#VS" TITLE="VS - sentence-complement verb">VS</A> <CODE>-></CODE> <A HREF="#SSlash">SSlash</A> <CODE>-></CODE> <A HREF="#ClSlash">ClSlash</A></TD>-<TD><div class=reveal> <I>whom does she know that we hadn't seen</I> <div class=popup> <ul> <li>API: <CODE>mkQCl who_IP (mkClSlash she_NP know_VS (mkSSlash (mkTemp pastTense anteriorAnt) negativePol (mkClSlash we_NP (mkVPSlash see_V2))))</CODE> <li>Afr: <I>wie weet sy dat ons nie nie gesien had</I> <li>Bul: <I>кого знае че ние не бяхме видeли тя</I> <li>Cat: <I>qui sap ella que nosaltres no havíem vist</I> <li>Dan: <I>hvem ved hun at vi ikke havde set</I> <li>Dut: <I>wie weet ze dat we niet gezien hadden</I> <li>Eng: <I>whom does she know that we hadn't seen</I> <li>Fin: <I>kenet hän tietää että me emme olleet nähneet</I> <li>Fre: <I>qui sait elle que nous n' avions pas vu</I> <li>Ger: <I>wen weiß sie daß wir nicht gesehen hatten</I> <li>Ita: <I>chi sa lei che noi non avevamo visto</I> <li>Nep: <I>कासलाई उनी थाहा पाउँछिन्की हामीहरु हेरेकाथिएनैँ</I> <li>Nor: <I>hvem vet hun at vi ikke hadde sett</I> <li>Pes: <I>چه کسی را او می داند که ما ندیده بودیم</I> <li>Pnb: <I>كون او جاندی اے كہ اسی نیں ویكھ گیے ساں</I> <li>Pol: <I>kogo ona wie , że nie zobaczyliśmy my</I> <li>Ron: <I>pe cine ştie ea cã noi nu văzuserăm</I> <li>Rus: <I>кого она знает , что мы не видели</I> <li>Spa: <I>quién sabe ella que nosotros no habíamos visto</I> <li>Swe: <I>vem vet hon att vi inte hade sett</I> <li>Urd: <I>كون وہ جانتی ہے كہ ہم نہیں دیكھ چكے تھے</I> </ul> </div> </div></TD>-</TR>-</TABLE>--<A NAME="Comp"></A>-<H2>Comp - complement of copula, such as AP</H2>--<TABLE BORDER="1" CELLPADDING="4">-<TR>-<TH>Function</TH>-<TH>Type</TH>-<TH COLSPAN="2">Example</TH>-</TR>-<TR>-<TD><CODE>mkComp</CODE></TD>-<TD><A HREF="#AP" TITLE="AP - adjectival phrase">AP</A> <CODE>-></CODE> <A HREF="#Comp" TITLE="Comp - complement of copula, such as AP">Comp</A></TD>-<TD><div class=reveal> <I>old</I> <div class=popup> <ul> <li>API: <CODE>mkComp (mkAP old_A)</CODE> <li>Afr: <I>oud</I> <li>Bul: <I>стар</I> <li>Cat: <I>vell</I> <li>Dan: <I>gammel</I> <li>Dut: <I>oud</I> <li>Eng: <I>old</I> <li>Fin: <I>vanha</I> <li>Fre: <I>vieux</I> <li>Ger: <I>alt</I> <li>Ita: <I>vecchio</I> <li>Nep: <I>बुढो</I> <li>Nor: <I>gammel</I> <li>Pes: <I>پیر</I> <li>Pnb: <I>بوڈا</I> <li>Pol: <I>stary</I> <li>Ron: <I>vechi</I> <li>Rus: <I>старый</I> <li>Spa: <I>viejo</I> <li>Swe: <I>gammal</I> <li>Urd: <I>بوڑھا</I> </ul> </div> </div></TD>-</TR>-<TR>-<TD><CODE>mkComp</CODE></TD>-<TD><A HREF="#NP" TITLE="NP - noun phrase (subject or object)">NP</A> <CODE>-></CODE> <A HREF="#Comp" TITLE="Comp - complement of copula, such as AP">Comp</A></TD>-<TD><div class=reveal> <I>this man</I> <div class=popup> <ul> <li>API: <CODE>mkComp (mkNP this_Det man_N)</CODE> <li>Afr: <I>hierdie man</I> <li>Bul: <I>този мъж</I> <li>Cat: <I>aquest home</I> <li>Dan: <I>denne mand</I> <li>Dut: <I>deze man</I> <li>Eng: <I>this man</I> <li>Fin: <I>tämä mies</I> <li>Fre: <I>cet homme</I> <li>Ger: <I>dieser Mann</I> <li>Ita: <I>questo uomo</I> <li>Nep: <I>यो मान्छे</I> <li>Nor: <I>denne mannen</I> <li>Pes: <I>این مرد</I> <li>Pnb: <I>اے بندہ</I> <li>Pol: <I>tym mężczyzną</I> <li>Ron: <I>acest om</I> <li>Rus: <I>этот человек</I> <li>Spa: <I>este hombre</I> <li>Swe: <I>den här mannen</I> <li>Urd: <I>یہ آدمی</I> </ul> </div> </div></TD>-</TR>-<TR>-<TD><CODE>mkComp</CODE></TD>-<TD><A HREF="#Adv" TITLE="Adv - verb-phrase-modifying adverb">Adv</A> <CODE>-></CODE> <A HREF="#Comp" TITLE="Comp - complement of copula, such as AP">Comp</A></TD>-<TD><div class=reveal> <I>here</I> <div class=popup> <ul> <li>API: <CODE>mkComp here_Adv</CODE> <li>Afr: <I>hier</I> <li>Bul: <I>тук</I> <li>Cat: <I>aquí</I> <li>Dan: <I>her</I> <li>Dut: <I>hier</I> <li>Eng: <I>here</I> <li>Fin: <I>täällä</I> <li>Fre: <I>ici</I> <li>Ger: <I>hier</I> <li>Ita: <I>quà</I> <li>Nep: <I>यहाँ</I> <li>Nor: <I>her</I> <li>Pes: <I>اینجا</I> <li>Pnb: <I>ایتھے</I> <li>Pol: <I>tutaj</I> <li>Ron: <I>aici</I> <li>Rus: <I>здесь</I> <li>Spa: <I>aquí</I> <li>Swe: <I>här</I> <li>Urd: <I>یہاں</I> </ul> </div> </div></TD>-</TR>-</TABLE>--<A NAME="Conj"></A>-<H2>Conj - conjunction</H2>--<TABLE BORDER="1" CELLPADDING="4">-<TR>-<TH>Function</TH>-<TH>Type</TH>-<TH COLSPAN="2">Example</TH>-</TR>-<TR>-<TD><CODE>and_Conj</CODE></TD>-<TD><A HREF="#Conj" TITLE="Conj - conjunction">Conj</A></TD>-<TD><div class=reveal> <I>here and now</I> <div class=popup> <ul> <li>API: <CODE>mkAdv and_Conj here_Adv now_Adv</CODE> <li>Afr: <I>hier en nou</I> <li>Bul: <I>тук и сега</I> <li>Cat: <I>aquí i ara</I> <li>Dan: <I>her og nu</I> <li>Dut: <I>hier en nu</I> <li>Eng: <I>here and now</I> <li>Fin: <I>täällä ja nyt</I> <li>Fre: <I>ici et maintenant</I> <li>Ger: <I>hier und jetzt</I> <li>Ita: <I>quà e adesso</I> <li>Nep: <I>यहाँ र अहीले</I> <li>Nor: <I>her og nå</I> <li>Pes: <I>اینجا و حالا</I> <li>Pnb: <I>ایتھے تے ہون</I> <li>Pol: <I>tutaj i teraz</I> <li>Ron: <I>aici şi acum</I> <li>Rus: <I>здесь и сейчас</I> <li>Spa: <I>aquí y ahora</I> <li>Swe: <I>här och nu</I> <li>Urd: <I>یہاں اور اب</I> </ul> </div> </div></TD>-</TR>-<TR>-<TD><CODE>both7and_DConj</CODE></TD>-<TD><A HREF="#Conj" TITLE="Conj - conjunction">Conj</A></TD>-<TD><div class=reveal> <I>both here and there</I> <div class=popup> <ul> <li>API: <CODE>mkAdv both7and_DConj here_Adv there_Adv</CODE> <li>Afr: <I>sowel hier as daar</I> <li>Bul: <I>и тук и там</I> <li>Cat: <I>i aquí i allà</I> <li>Dan: <I>både her og der</I> <li>Dut: <I>zowel hier als daar</I> <li>Eng: <I>both here and there</I> <li>Fin: <I>sekä täällä että siellä</I> <li>Fre: <I>et ici et là</I> <li>Ger: <I>sowohl hier als auch da</I> <li>Ita: <I>e quà e là</I> <li>Nep: <I>दुबै यहाँ र त्यहाँ</I> <li>Nor: <I>både her og der</I> <li>Pes: <I>هم اینجا و هم آنجا</I> <li>Pnb: <I>دوویں ایتھے تے اوتھے</I> <li>Pol: <I>zarówno tutaj jak i tam</I> <li>Ron: <I>şi aici şi acolo</I> <li>Rus: <I>как здесь , так и там</I> <li>Spa: <I>y aquí y allí</I> <li>Swe: <I>både här och där</I> <li>Urd: <I>دونوں یہاں اور وہاں</I> </ul> </div> </div></TD>-</TR>-<TR>-<TD><CODE>either7or_DConj</CODE></TD>-<TD><A HREF="#Conj" TITLE="Conj - conjunction">Conj</A></TD>-<TD><div class=reveal> <I>either here or there</I> <div class=popup> <ul> <li>API: <CODE>mkAdv either7or_DConj here_Adv there_Adv</CODE> <li>Afr: <I>òf hier òf daar</I> <li>Bul: <I>или тук или там</I> <li>Cat: <I>o aquí o allà</I> <li>Dan: <I>enten her eller der</I> <li>Dut: <I>ofwel hier of daar</I> <li>Eng: <I>either here or there</I> <li>Fin: <I>joko täällä tai siellä</I> <li>Fre: <I>ou ici ou là</I> <li>Ger: <I>entweder hier oder da</I> <li>Ita: <I>o quà o là</I> <li>Nep: <I>की यहाँ अथवा त्यहाँ</I> <li>Nor: <I>enten her eller der</I> <li>Pes: <I>یا اینجا یا آنجا</I> <li>Pnb: <I>كوی اك ایتھے یا اوتھے</I> <li>Pol: <I>albo tutaj albo tam</I> <li>Ron: <I>sau aici sau acolo</I> <li>Rus: <I>либо здесь , либо там</I> <li>Spa: <I>o aquí o allí</I> <li>Swe: <I>antingen här eller där</I> <li>Urd: <I>كوی ایك یہاں یا وہاں</I> </ul> </div> </div></TD>-</TR>-<TR>-<TD><CODE>if_then_Conj</CODE></TD>-<TD><A HREF="#Conj" TITLE="Conj - conjunction">Conj</A></TD>-<TD><div class=reveal> <I>if here then there</I> <div class=popup> <ul> <li>API: <CODE>mkAdv if_then_Conj here_Adv there_Adv</CODE> <li>Afr: <I>as hier dan daar</I> <li>Bul: <I>*</I> <li>Cat: <I>si aquí llavors allà</I> <li>Dan: <I>*</I> <li>Dut: <I>als hier dan daar</I> <li>Eng: <I>if here then there</I> <li>Fin: <I>jos täällä niin siellä</I> <li>Fre: <I>si ici alors là</I> <li>Ger: <I>wenn hier dann da</I> <li>Ita: <I>si quà allora là</I> <li>Nep: <I>यदि यहाँ भने त्यहाँ</I> <li>Nor: <I>*</I> <li>Pes: <I>اگر اینجا آنگاه آنجا</I> <li>Pnb: <I>اگر ایتھے تے اوتھے</I> <li>Pol: <I>jeżeli tutaj , to tam</I> <li>Ron: <I>dacă aici atunci acolo</I> <li>Rus: <I>*</I> <li>Spa: <I>*</I> <li>Swe: <I>om här så där</I> <li>Urd: <I>اگر یہاں تو وہاں</I> </ul> </div> </div></TD>-</TR>-<TR>-<TD><CODE>or_Conj</CODE></TD>-<TD><A HREF="#Conj" TITLE="Conj - conjunction">Conj</A></TD>-<TD><div class=reveal> <I>here or there</I> <div class=popup> <ul> <li>API: <CODE>mkAdv or_Conj here_Adv there_Adv</CODE> <li>Afr: <I>hier of daar</I> <li>Bul: <I>тук или там</I> <li>Cat: <I>aquí o allà</I> <li>Dan: <I>her eller der</I> <li>Dut: <I>hier of daar</I> <li>Eng: <I>here or there</I> <li>Fin: <I>täällä tai siellä</I> <li>Fre: <I>ici ou là</I> <li>Ger: <I>hier oder da</I> <li>Ita: <I>quà o là</I> <li>Nep: <I>यहाँ अथवा त्यहाँ</I> <li>Nor: <I>her eller der</I> <li>Pes: <I>اینجا یا آنجا</I> <li>Pnb: <I>ایتھے یا اوتھے</I> <li>Pol: <I>tutaj lub tam</I> <li>Ron: <I>aici sau acolo</I> <li>Rus: <I>здесь или там</I> <li>Spa: <I>aquí o allí</I> <li>Swe: <I>här eller där</I> <li>Urd: <I>یہاں یا وہاں</I> </ul> </div> </div></TD>-</TR>-</TABLE>--<A NAME="Det"></A>-<H2>Det - determiner phrase</H2>--<TABLE BORDER="1" CELLPADDING="4">-<TR>-<TH>Function</TH>-<TH>Type</TH>-<TH COLSPAN="2">Example</TH>-</TR>-<TR>-<TD><CODE>aPl_Det</CODE></TD>-<TD><A HREF="#Det" TITLE="Det - determiner phrase">Det</A></TD>-<TD><div class=reveal> <I>women</I> <div class=popup> <ul> <li>API: <CODE>mkUtt (mkNP aPl_Det woman_N)</CODE> <li>Afr: <I>vroue</I> <li>Bul: <I>жени</I> <li>Cat: <I>dones</I> <li>Dan: <I>kvinder</I> <li>Dut: <I>vrouwen</I> <li>Eng: <I>women</I> <li>Fin: <I>naisia</I> <li>Fre: <I>des femmes</I> <li>Ger: <I>Frauen</I> <li>Ita: <I>donne</I> <li>Nep: <I>आईमाईहरु</I> <li>Nor: <I>kvinner</I> <li>Pes: <I>یک زن</I> <li>Pnb: <I>زنانیاں</I> <li>Pol: <I>kobiety</I> <li>Ron: <I>nişte femei</I> <li>Rus: <I>женщины</I> <li>Spa: <I>mujeres</I> <li>Swe: <I>kvinnor</I> <li>Urd: <I>عورتیں</I> </ul> </div> </div></TD>-</TR>-<TR>-<TD><CODE>aSg_Det</CODE></TD>-<TD><A HREF="#Det" TITLE="Det - determiner phrase">Det</A></TD>-<TD><div class=reveal> <I>a woman</I> <div class=popup> <ul> <li>API: <CODE>mkUtt (mkNP aSg_Det woman_N)</CODE> <li>Afr: <I>'n vrou</I> <li>Bul: <I>жена</I> <li>Cat: <I>una dona</I> <li>Dan: <I>en kvinde</I> <li>Dut: <I>een vrouw</I> <li>Eng: <I>a woman</I> <li>Fin: <I>nainen</I> <li>Fre: <I>une femme</I> <li>Ger: <I>eine Frau</I> <li>Ita: <I>una donna</I> <li>Nep: <I>आईमाई</I> <li>Nor: <I>ei kvinne</I> <li>Pes: <I>یک زن</I> <li>Pnb: <I>زنانی</I> <li>Pol: <I>kobieta</I> <li>Ron: <I>o femeie</I> <li>Rus: <I>женщину</I> <li>Spa: <I>una mujer</I> <li>Swe: <I>en kvinna</I> <li>Urd: <I>ایك عورت</I> </ul> </div> </div></TD>-</TR>-<TR>-<TD><CODE>a_Det</CODE></TD>-<TD><A HREF="#Det" TITLE="Det - determiner phrase">Det</A></TD>-<TD><div class=reveal> <I>a house</I> <div class=popup> <ul> <li>API: <CODE>mkUtt (mkNP a_Det house_N)</CODE> <li>Afr: <I>'n huis</I> <li>Bul: <I>къща</I> <li>Cat: <I>una casa</I> <li>Dan: <I>et hus</I> <li>Dut: <I>een huis</I> <li>Eng: <I>a house</I> <li>Fin: <I>talo</I> <li>Fre: <I>une maison</I> <li>Ger: <I>ein Haus</I> <li>Ita: <I>una casa</I> <li>Nep: <I>घर</I> <li>Nor: <I>et hus</I> <li>Pes: <I>یک خانه</I> <li>Pnb: <I>گھر</I> <li>Pol: <I>dom</I> <li>Ron: <I>o casă</I> <li>Rus: <I>дом</I> <li>Spa: <I>una casa</I> <li>Swe: <I>ett hus</I> <li>Urd: <I>ایك گھر</I> </ul> </div> </div></TD>-</TR>-<TR>-<TD><CODE>every_Det</CODE></TD>-<TD><A HREF="#Det" TITLE="Det - determiner phrase">Det</A></TD>-<TD><div class=reveal> <I>every</I> <div class=popup> <ul> <li>API: <CODE>every_Det</CODE> <li>Afr: <I>elk</I> <li>Bul: <I>всеки</I> <li>Cat: <I>cada</I> <li>Dan: <I>hver</I> <li>Dut: <I>elke</I> <li>Eng: <I>every</I> <li>Fin: <I>Prelude.True</I> <li>Fre: <I>chaque</I> <li>Ger: <I>jeder</I> <li>Ita: <I>ogni</I> <li>Nep: <I>सबै</I> <li>Nor: <I>hver</I> <li>Pes: <I>هر</I> <li>Pnb: <I>ہر</I> <li>Pol: <I>każdy</I> <li>Ron: <I>orice</I> <li>Rus: <I>каждый</I> <li>Spa: <I>cada</I> <li>Swe: <I>varje</I> <li>Urd: <I>ہر</I> </ul> </div> </div></TD>-</TR>-<TR>-<TD><CODE>few_Det</CODE></TD>-<TD><A HREF="#Det" TITLE="Det - determiner phrase">Det</A></TD>-<TD><div class=reveal> <I>few</I> <div class=popup> <ul> <li>API: <CODE>few_Det</CODE> <li>Afr: <I>min</I> <li>Bul: <I>няколко</I> <li>Cat: <I>pocs</I> <li>Dan: <I>få</I> <li>Dut: <I>weinig</I> <li>Eng: <I>few</I> <li>Fin: <I>Prelude.True</I> <li>Fre: <I>peu de</I> <li>Ger: <I>wenige</I> <li>Ita: <I>pochi</I> <li>Nep: <I>थोरै</I> <li>Nor: <I>få</I> <li>Pes: <I>تعداد کمی</I> <li>Pnb: <I>كچھ</I> <li>Pol: <I>parę</I> <li>Ron: <I>câţiva</I> <li>Rus: <I>немного</I> <li>Spa: <I>pocos</I> <li>Swe: <I>få</I> <li>Urd: <I>چند</I> </ul> </div> </div></TD>-</TR>-<TR>-<TD><CODE>many_Det</CODE></TD>-<TD><A HREF="#Det" TITLE="Det - determiner phrase">Det</A></TD>-<TD><div class=reveal> <I>many houses</I> <div class=popup> <ul> <li>API: <CODE>mkNP many_Det house_N</CODE> <li>Afr: <I>baie huise</I> <li>Bul: <I>много къщи</I> <li>Cat: <I>// <li>Dan: //mange huse// <li>Dut: //veel huizen// <li>Eng: //many houses// <li>Fin: //moni talo// <li>Fre: //</I> <li>Ger: <I>viele Häuser</I> <li>Ita: <I>// <li>Nep: //थुप्रै घरहरु// <li>Nor: //mange hus// <li>Pes: //تعداد زیادی خانه// <li>Pnb: //بہت زیادہ گھر// <li>Pol: //wielu domów// <li>Ron: //</I> <li>Rus: <I>много дома</I> <li>Spa: <I>''</I> <li>Swe: <I>många hus</I> <li>Urd: <I>بہت زیادہ گھر</I> </ul> </div> </div></TD>-</TR>-<TR>-<TD><CODE>mkDet</CODE></TD>-<TD><A 'HREF="#Quant" TITLE="Quant - quantifier ('nucleus' of Det)"'>Quant</A> <CODE>-></CODE> <A HREF="#Det" TITLE="Det - determiner phrase">Det</A></TD>-<TD><div class=reveal> <I>this</I> <div class=popup> <ul> <li>API: <CODE>mkDet this_Quant</CODE> <li>Afr: <I>hierdie</I> <li>Bul: <I>този</I> <li>Cat: <I>aquest</I> <li>Dan: <I>denne</I> <li>Dut: <I>deze</I> <li>Eng: <I>this</I> <li>Fin: <I>Prelude.True</I> <li>Fre: <I>ce</I> <li>Ger: <I>dieser</I> <li>Ita: <I>questo</I> <li>Nep: <I>यो</I> <li>Nor: <I>denne</I> <li>Pes: <I>این</I> <li>Pnb: <I>اے</I> <li>Pol: <I>ten</I> <li>Ron: <I>acest</I> <li>Rus: <I>этот</I> <li>Spa: <I>este</I> <li>Swe: <I>den här</I> <li>Urd: <I>یہ</I> </ul> </div> </div></TD>-</TR>-<TR>-<TD><CODE>mkDet</CODE></TD>-<TD><A 'HREF="#Quant" TITLE="Quant - quantifier ('nucleus' of Det)"'>Quant</A> <CODE>-></CODE> <A HREF="#Card" TITLE="Card - cardinal number">Card</A> <CODE>-></CODE> <A HREF="#Det" TITLE="Det - determiner phrase">Det</A></TD>-<TD><div class=reveal> <I>these five</I> <div class=popup> <ul> <li>API: <CODE>mkDet this_Quant (mkCard (mkNumeral n5_Unit))</CODE> <li>Afr: <I>hierdie vyf</I> <li>Bul: <I>тези петима</I> <li>Cat: <I>aquests cinc</I> <li>Dan: <I>disse fem</I> <li>Dut: <I>deze vijf</I> <li>Eng: <I>these five</I> <li>Fin: <I>Prelude.True</I> <li>Fre: <I>ces cinq</I> <li>Ger: <I>diese fünf</I> <li>Ita: <I>questi cinque</I> <li>Nep: <I>यी पाँच</I> <li>Nor: <I>disse fem</I> <li>Pes: <I>این پنج</I> <li>Pnb: <I>اے پنج</I> <li>Pol: <I>tych pięć</I> <li>Ron: <I>aceşti cinci</I> <li>Rus: <I>этот пять</I> <li>Spa: <I>estos cinco</I> <li>Swe: <I>de här fem</I> <li>Urd: <I>یہ پانچ</I> </ul> </div> </div></TD>-</TR>-<TR>-<TD><CODE>mkDet</CODE></TD>-<TD><A 'HREF="#Quant" TITLE="Quant - quantifier ('nucleus' of Det)"'>Quant</A> <CODE>-></CODE> <A HREF="#Ord" TITLE="Ord - ordinal number (used in Det)">Ord</A> <CODE>-></CODE> <A HREF="#Det" TITLE="Det - determiner phrase">Det</A></TD>-<TD><div class=reveal> <I>the fifth</I> <div class=popup> <ul> <li>API: <CODE>mkDet the_Quant (mkOrd (mkNumeral n5_Unit))</CODE> <li>Afr: <I>die vyfde</I> <li>Bul: <I>петият</I> <li>Cat: <I>el quint</I> <li>Dan: <I>den femte</I> <li>Dut: <I>de vijfde</I> <li>Eng: <I>the fifth</I> <li>Fin: <I>Prelude.True</I> <li>Fre: <I>le cinquième</I> <li>Ger: <I>der fünfte</I> <li>Ita: <I>il quinto</I> <li>Nep: <I>पाँचौँ</I> <li>Nor: <I>den femte</I> <li>Pes: <I>پنجمین / پنجم</I> <li>Pnb: <I>پنج واں</I> <li>Pol: <I>piąty</I> <li>Ron: <I>al cincilea</I> <li>Rus: <I>// <li>Spa: //el quinto</I> <li>Swe: <I>den femte</I> <li>Urd: <I>پانچ واں</I> </ul> </div> </div></TD>-</TR>-<TR>-<TD><CODE>mkDet</CODE></TD>-<TD><A 'HREF="#Quant" TITLE="Quant - quantifier ('nucleus' of Det)"'>Quant</A> <CODE>-></CODE> <A HREF="#Num" TITLE="Num - number determining element">Num</A> <CODE>-></CODE> <A HREF="#Ord" TITLE="Ord - ordinal number (used in Det)">Ord</A> <CODE>-></CODE> <A HREF="#Det" TITLE="Det - determiner phrase">Det</A></TD>-<TD><div class=reveal> <I>the five best</I> <div class=popup> <ul> <li>API: <CODE>mkDet the_Quant (mkNum (mkNumeral n5_Unit)) (mkOrd good_A)</CODE> <li>Afr: <I>die vyf beste</I> <li>Bul: <I>петимата най - добри</I> <li>Cat: <I>els cinc millors</I> <li>Dan: <I>de fem bedste</I> <li>Dut: <I>de vijf beste</I> <li>Eng: <I>the five best</I> <li>Fin: <I>Prelude.True</I> <li>Fre: <I>les cinq meilleurs</I> <li>Ger: <I>die fünf besten</I> <li>Ita: <I>i cinque migliori</I> <li>Nep: <I>सबभन्दा राम्रो पाँच</I> <li>Nor: <I>de fem beste</I> <li>Pes: <I>پنج خوب ترین</I> <li>Pnb: <I>پنج اچھا</I> <li>Pol: <I>pięć najlepszych</I> <li>Ron: <I>cei mai buni cinci</I> <li>Rus: <I>пять хороший</I> <li>Spa: <I>los cinco mejores</I> <li>Swe: <I>de fem bästa</I> <li>Urd: <I>پانچ سب سے اچھا</I> </ul> </div> </div></TD>-</TR>-<TR>-<TD><CODE>mkDet</CODE></TD>-<TD><A 'HREF="#Quant" TITLE="Quant - quantifier ('nucleus' of Det)"'>Quant</A> <CODE>-></CODE> <A HREF="#Num" TITLE="Num - number determining element">Num</A> <CODE>-></CODE> <A HREF="#Det" TITLE="Det - determiner phrase">Det</A></TD>-<TD><div class=reveal> <I>these</I> <div class=popup> <ul> <li>API: <CODE>mkDet this_Quant pluralNum</CODE> <li>Afr: <I>hierdie</I> <li>Bul: <I>тези</I> <li>Cat: <I>aquests</I> <li>Dan: <I>disse</I> <li>Dut: <I>deze</I> <li>Eng: <I>these</I> <li>Fin: <I>Prelude.True</I> <li>Fre: <I>ces</I> <li>Ger: <I>diese</I> <li>Ita: <I>questi</I> <li>Nep: <I>यी</I> <li>Nor: <I>disse</I> <li>Pes: <I>این</I> <li>Pnb: <I>اے</I> <li>Pol: <I>te</I> <li>Ron: <I>aceşti</I> <li>Rus: <I>этот</I> <li>Spa: <I>estos</I> <li>Swe: <I>de här</I> <li>Urd: <I>یہ</I> </ul> </div> </div></TD>-</TR>-<TR>-<TD><CODE>mkDet</CODE></TD>-<TD><A HREF="#Card" TITLE="Card - cardinal number">Card</A> <CODE>-></CODE> <A HREF="#Det" TITLE="Det - determiner phrase">Det</A></TD>-<TD><div class=reveal> <I>five</I> <div class=popup> <ul> <li>API: <CODE>mkDet (mkCard (mkNumeral n5_Unit))</CODE> <li>Afr: <I>vyf</I> <li>Bul: <I>петима</I> <li>Cat: <I>cinc</I> <li>Dan: <I>fem</I> <li>Dut: <I>vijf</I> <li>Eng: <I>five</I> <li>Fin: <I>Prelude.False</I> <li>Fre: <I>cinq</I> <li>Ger: <I>fünf</I> <li>Ita: <I>cinque</I> <li>Nep: <I>पाँच</I> <li>Nor: <I>fem</I> <li>Pes: <I>یک پنج</I> <li>Pnb: <I>پنج</I> <li>Pol: <I>pięć</I> <li>Ron: <I>cinci</I> <li>Rus: <I>пять</I> <li>Spa: <I>cinco</I> <li>Swe: <I>fem</I> <li>Urd: <I>ایك پانچ</I> </ul> </div> </div></TD>-</TR>-<TR>-<TD><CODE>mkDet</CODE></TD>-<TD><A HREF="#Digits" TITLE="Digits - cardinal or ordinal in digits">Digits</A> <CODE>-></CODE> <A HREF="#Det" TITLE="Det - determiner phrase">Det</A></TD>-<TD><I>51</I></TD>-</TR>-<TR>-<TD><CODE>mkDet</CODE></TD>-<TD><A HREF="#Numeral" TITLE="Numeral - cardinal or ordinal in words">Numeral</A> <CODE>-></CODE> <A HREF="#Det" TITLE="Det - determiner phrase">Det</A></TD>-<TD><I>five</I></TD>-</TR>-<TR>-<TD><CODE>mkDet</CODE></TD>-<TD><A HREF="#Pron" TITLE="Pron - personal pronoun">Pron</A> <CODE>-></CODE> <A HREF="#Det" TITLE="Det - determiner phrase">Det</A></TD>-<TD><I>my</I></TD>-</TR>-<TR>-<TD><CODE>mkDet</CODE></TD>-<TD><A HREF="#Pron" TITLE="Pron - personal pronoun">Pron</A> <CODE>-></CODE> <A HREF="#Num" TITLE="Num - number determining element">Num</A> <CODE>-></CODE> <A HREF="#Det" TITLE="Det - determiner phrase">Det</A></TD>-<TD><div class=reveal> <I>my five</I> <div class=popup> <ul> <li>API: <CODE>mkDet i_Pron (mkNum (mkNumeral n5_Unit))</CODE> <li>Afr: <I>my vyf</I> <li>Bul: <I>моите петима</I> <li>Cat: <I>els meus cinc</I> <li>Dan: <I>mine fem</I> <li>Dut: <I>mijn vijf</I> <li>Eng: <I>my five</I> <li>Fin: <I>Prelude.True</I> <li>Fre: <I>mes cinq</I> <li>Ger: <I>meine fünf</I> <li>Ita: <I>i miei cinque</I> <li>Nep: <I>मेरो पाँच</I> <li>Nor: <I>mine fem</I> <li>Pes: <I>من پنج</I> <li>Pnb: <I>میرا پنج</I> <li>Pol: <I>moich pięć</I> <li>Ron: <I>cei cinci</I> <li>Rus: <I>мой пять</I> <li>Spa: <I>mis cinco</I> <li>Swe: <I>mina fem</I> <li>Urd: <I>میرا پانچ</I> </ul> </div> </div></TD>-</TR>-<TR>-<TD><CODE>much_Det</CODE></TD>-<TD><A HREF="#Det" TITLE="Det - determiner phrase">Det</A></TD>-<TD><div class=reveal> <I>much</I> <div class=popup> <ul> <li>API: <CODE>much_Det</CODE> <li>Afr: <I>baie</I> <li>Bul: <I>много</I> <li>Cat: <I>molt</I> <li>Dan: <I>meget</I> <li>Dut: <I>veel</I> <li>Eng: <I>much</I> <li>Fin: <I>Prelude.True</I> <li>Fre: <I>beaucoup de</I> <li>Ger: <I>vieler</I> <li>Ita: <I>molto</I> <li>Nep: <I>निक्कै</I> <li>Nor: <I>mye</I> <li>Pes: <I>مقدار زیادی</I> <li>Pnb: <I>بہت</I> <li>Pol: <I>dużo</I> <li>Ron: <I>// <li>Rus: //много</I> <li>Spa: <I>mucho</I> <li>Swe: <I>mycket</I> <li>Urd: <I>بہت</I> </ul> </div> </div></TD>-</TR>-<TR>-<TD><CODE>somePl_Det</CODE></TD>-<TD><A HREF="#Det" TITLE="Det - determiner phrase">Det</A></TD>-<TD><div class=reveal> <I>some</I> <div class=popup> <ul> <li>API: <CODE>somePl_Det</CODE> <li>Afr: <I>sommige</I> <li>Bul: <I>някои</I> <li>Cat: <I>alguns</I> <li>Dan: <I>nogle</I> <li>Dut: <I>sommige</I> <li>Eng: <I>some</I> <li>Fin: <I>Prelude.True</I> <li>Fre: <I>quelques</I> <li>Ger: <I>einige</I> <li>Ita: <I>qualche</I> <li>Nep: <I>कोही</I> <li>Nor: <I>noen</I> <li>Pes: <I>چند</I> <li>Pnb: <I>كچھ</I> <li>Pol: <I>pewne</I> <li>Ron: <I>unii</I> <li>Rus: <I>некоторый</I> <li>Spa: <I>algunos</I> <li>Swe: <I>några</I> <li>Urd: <I>كچھ</I> </ul> </div> </div></TD>-</TR>-<TR>-<TD><CODE>someSg_Det</CODE></TD>-<TD><A HREF="#Det" TITLE="Det - determiner phrase">Det</A></TD>-<TD><div class=reveal> <I>some</I> <div class=popup> <ul> <li>API: <CODE>someSg_Det</CODE> <li>Afr: <I>sommige</I> <li>Bul: <I>някой</I> <li>Cat: <I>algun</I> <li>Dan: <I>nogen</I> <li>Dut: <I>sommige</I> <li>Eng: <I>some</I> <li>Fin: <I>Prelude.True</I> <li>Fre: <I>quelque</I> <li>Ger: <I>ein</I> <li>Ita: <I>qualche</I> <li>Nep: <I>कोही</I> <li>Nor: <I>noen</I> <li>Pes: <I>مقداری</I> <li>Pnb: <I>كچھ</I> <li>Pol: <I>pewien</I> <li>Ron: <I>nişte</I> <li>Rus: <I>некоторый</I> <li>Spa: <I>algun</I> <li>Swe: <I>någon</I> <li>Urd: <I>كچھ</I> </ul> </div> </div></TD>-</TR>-<TR>-<TD><CODE>that_Det</CODE></TD>-<TD><A HREF="#Det" TITLE="Det - determiner phrase">Det</A></TD>-<TD><div class=reveal> <I>that woman</I> <div class=popup> <ul> <li>API: <CODE>mkUtt (mkNP that_Det woman_N)</CODE> <li>Afr: <I>daardie vrou</I> <li>Bul: <I>онази жена</I> <li>Cat: <I>aquella dona</I> <li>Dan: <I>den der kvinde</I> <li>Dut: <I>die vrouw</I> <li>Eng: <I>that woman</I> <li>Fin: <I>tuo nainen</I> <li>Fre: <I>cette femme</I> <li>Ger: <I>jene Frau</I> <li>Ita: <I>quella donna</I> <li>Nep: <I>त्ये आईमाई</I> <li>Nor: <I>den der kvinna</I> <li>Pes: <I>آن زن</I> <li>Pnb: <I>وہ زنانی</I> <li>Pol: <I>tamta kobieta</I> <li>Ron: <I>acea femeie</I> <li>Rus: <I>ту женщину</I> <li>Spa: <I>esa mujer</I> <li>Swe: <I>den där kvinnan</I> <li>Urd: <I>وہ عورت</I> </ul> </div> </div></TD>-</TR>-<TR>-<TD><CODE>thePl_Det</CODE></TD>-<TD><A HREF="#Det" TITLE="Det - determiner phrase">Det</A></TD>-<TD><div class=reveal> <I>the houses</I> <div class=popup> <ul> <li>API: <CODE>mkUtt (mkNP thePl_Det house_N)</CODE> <li>Afr: <I>die huise</I> <li>Bul: <I>къщите</I> <li>Cat: <I>les cases</I> <li>Dan: <I>husene</I> <li>Dut: <I>de huizen</I> <li>Eng: <I>the houses</I> <li>Fin: <I>talot</I> <li>Fre: <I>les maisons</I> <li>Ger: <I>die Häuser</I> <li>Ita: <I>le case</I> <li>Nep: <I>घरहरु</I> <li>Nor: <I>husa</I> <li>Pes: <I>خانه</I> <li>Pnb: <I>گھر</I> <li>Pol: <I>domy</I> <li>Ron: <I>casele</I> <li>Rus: <I>домы</I> <li>Spa: <I>las casas</I> <li>Swe: <I>husen</I> <li>Urd: <I>گھر</I> </ul> </div> </div></TD>-</TR>-<TR>-<TD><CODE>theSg_Det</CODE></TD>-<TD><A HREF="#Det" TITLE="Det - determiner phrase">Det</A></TD>-<TD><div class=reveal> <I>the house</I> <div class=popup> <ul> <li>API: <CODE>mkUtt (mkNP theSg_Det house_N)</CODE> <li>Afr: <I>die huis</I> <li>Bul: <I>къщата</I> <li>Cat: <I>la casa</I> <li>Dan: <I>huset</I> <li>Dut: <I>het huis</I> <li>Eng: <I>the house</I> <li>Fin: <I>talo</I> <li>Fre: <I>la maison</I> <li>Ger: <I>das Haus</I> <li>Ita: <I>la casa</I> <li>Nep: <I>घर</I> <li>Nor: <I>huset</I> <li>Pes: <I>خانه</I> <li>Pnb: <I>گھر</I> <li>Pol: <I>dom</I> <li>Ron: <I>casa</I> <li>Rus: <I>дом</I> <li>Spa: <I>la casa</I> <li>Swe: <I>huset</I> <li>Urd: <I>گھر</I> </ul> </div> </div></TD>-</TR>-<TR>-<TD><CODE>the_Det</CODE></TD>-<TD><A HREF="#Det" TITLE="Det - determiner phrase">Det</A></TD>-<TD><div class=reveal> <I>the house</I> <div class=popup> <ul> <li>API: <CODE>mkUtt (mkNP the_Det house_N)</CODE> <li>Afr: <I>die huis</I> <li>Bul: <I>къщата</I> <li>Cat: <I>la casa</I> <li>Dan: <I>huset</I> <li>Dut: <I>het huis</I> <li>Eng: <I>the house</I> <li>Fin: <I>talo</I> <li>Fre: <I>la maison</I> <li>Ger: <I>das Haus</I> <li>Ita: <I>la casa</I> <li>Nep: <I>घर</I> <li>Nor: <I>huset</I> <li>Pes: <I>خانه</I> <li>Pnb: <I>گھر</I> <li>Pol: <I>dom</I> <li>Ron: <I>casa</I> <li>Rus: <I>дом</I> <li>Spa: <I>la casa</I> <li>Swe: <I>huset</I> <li>Urd: <I>گھر</I> </ul> </div> </div></TD>-</TR>-<TR>-<TD><CODE>these_Det</CODE></TD>-<TD><A HREF="#Det" TITLE="Det - determiner phrase">Det</A></TD>-<TD><div class=reveal> <I>these women</I> <div class=popup> <ul> <li>API: <CODE>mkUtt (mkNP these_Det woman_N)</CODE> <li>Afr: <I>hierdie vroue</I> <li>Bul: <I>тези жени</I> <li>Cat: <I>aquestes dones</I> <li>Dan: <I>disse kvinder</I> <li>Dut: <I>deze vrouwen</I> <li>Eng: <I>these women</I> <li>Fin: <I>nämä naiset</I> <li>Fre: <I>ces femmes</I> <li>Ger: <I>diese Frauen</I> <li>Ita: <I>queste donne</I> <li>Nep: <I>यी आईमाईहरु</I> <li>Nor: <I>disse kvinnene</I> <li>Pes: <I>این زن</I> <li>Pnb: <I>اے زنانیاں</I> <li>Pol: <I>te kobiety</I> <li>Ron: <I>aceste femei</I> <li>Rus: <I>эти женщины</I> <li>Spa: <I>estas mujeres</I> <li>Swe: <I>de här kvinnorna</I> <li>Urd: <I>یہ عورتیں</I> </ul> </div> </div></TD>-</TR>-<TR>-<TD><CODE>this_Det</CODE></TD>-<TD><A HREF="#Det" TITLE="Det - determiner phrase">Det</A></TD>-<TD><div class=reveal> <I>this woman</I> <div class=popup> <ul> <li>API: <CODE>mkUtt (mkNP this_Det woman_N)</CODE> <li>Afr: <I>hierdie vrou</I> <li>Bul: <I>тази жена</I> <li>Cat: <I>aquesta dona</I> <li>Dan: <I>denne kvinde</I> <li>Dut: <I>deze vrouw</I> <li>Eng: <I>this woman</I> <li>Fin: <I>tämä nainen</I> <li>Fre: <I>cette femme</I> <li>Ger: <I>diese Frau</I> <li>Ita: <I>questa donna</I> <li>Nep: <I>यो आईमाई</I> <li>Nor: <I>denne kvinna</I> <li>Pes: <I>این زن</I> <li>Pnb: <I>اے زنانی</I> <li>Pol: <I>ta kobieta</I> <li>Ron: <I>această femeie</I> <li>Rus: <I>эту женщину</I> <li>Spa: <I>esta mujer</I> <li>Swe: <I>den här kvinnan</I> <li>Urd: <I>یہ عورت</I> </ul> </div> </div></TD>-</TR>-<TR>-<TD><CODE>those_Det</CODE></TD>-<TD><A HREF="#Det" TITLE="Det - determiner phrase">Det</A></TD>-<TD><div class=reveal> <I>those women</I> <div class=popup> <ul> <li>API: <CODE>mkUtt (mkNP those_Det woman_N)</CODE> <li>Afr: <I>daardie vroue</I> <li>Bul: <I>онези жени</I> <li>Cat: <I>aquelles dones</I> <li>Dan: <I>de der kvinder</I> <li>Dut: <I>die vrouwen</I> <li>Eng: <I>those women</I> <li>Fin: <I>nuo naiset</I> <li>Fre: <I>ces femmes</I> <li>Ger: <I>jene Frauen</I> <li>Ita: <I>quelle donne</I> <li>Nep: <I>यिनीहरु आईमाईहरु</I> <li>Nor: <I>de der kvinnene</I> <li>Pes: <I>آن زن</I> <li>Pnb: <I>وہ زنانیاں</I> <li>Pol: <I>tamte kobiety</I> <li>Ron: <I>acele femei</I> <li>Rus: <I>те женщины</I> <li>Spa: <I>esas mujeres</I> <li>Swe: <I>de där kvinnorna</I> <li>Urd: <I>وہ عورتیں</I> </ul> </div> </div></TD>-</TR>-</TABLE>--<A NAME="Dig"></A>-<H2>Dig</H2>--<TABLE BORDER="1" CELLPADDING="4">-<TR>-<TH>Function</TH>-<TH>Type</TH>-<TH COLSPAN="2">Example</TH>-</TR>-<TR>-<TD><CODE>n0_Dig</CODE></TD>-<TD><A HREF="#Dig">Dig</A></TD>-<TD><I>0</I></TD>-</TR>-<TR>-<TD><CODE>n1_Dig</CODE></TD>-<TD><A HREF="#Dig">Dig</A></TD>-<TD><I>1</I></TD>-</TR>-<TR>-<TD><CODE>n2_Dig</CODE></TD>-<TD><A HREF="#Dig">Dig</A></TD>-<TD><I>2</I></TD>-</TR>-<TR>-<TD><CODE>n3_Dig</CODE></TD>-<TD><A HREF="#Dig">Dig</A></TD>-<TD><I>3</I></TD>-</TR>-<TR>-<TD><CODE>n4_Dig</CODE></TD>-<TD><A HREF="#Dig">Dig</A></TD>-<TD><I>4</I></TD>-</TR>-<TR>-<TD><CODE>n5_Dig</CODE></TD>-<TD><A HREF="#Dig">Dig</A></TD>-<TD><I>5</I></TD>-</TR>-<TR>-<TD><CODE>n6_Dig</CODE></TD>-<TD><A HREF="#Dig">Dig</A></TD>-<TD><I>6</I></TD>-</TR>-<TR>-<TD><CODE>n7_Dig</CODE></TD>-<TD><A HREF="#Dig">Dig</A></TD>-<TD><I>7</I></TD>-</TR>-<TR>-<TD><CODE>n8_Dig</CODE></TD>-<TD><A HREF="#Dig">Dig</A></TD>-<TD><I>8</I></TD>-</TR>-<TR>-<TD><CODE>n9_Dig</CODE></TD>-<TD><A HREF="#Dig">Dig</A></TD>-<TD><I>9</I></TD>-</TR>-</TABLE>--<A NAME="Digits"></A>-<H2>Digits - cardinal or ordinal in digits</H2>--<TABLE BORDER="1" CELLPADDING="4">-<TR>-<TH>Function</TH>-<TH>Type</TH>-<TH COLSPAN="2">Example</TH>-</TR>-<TR>-<TD><CODE>mkDigits</CODE></TD>-<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#Digits" TITLE="Digits - cardinal or ordinal in digits">Digits</A></TD>-<TD><I>35 (from string "35"; ; range 1-9999999)</I></TD>-</TR>-<TR>-<TD><CODE>mkDigits</CODE></TD>-<TD><A HREF="#Dig">Dig</A> <CODE>-></CODE> <A HREF="#Digits" TITLE="Digits - cardinal or ordinal in digits">Digits</A></TD>-<TD><div class=reveal> <I>4</I> <div class=popup> <ul> <li>API: <CODE>mkDigits n4_Dig</CODE> <li>Afr: <I>4</I> <li>Bul: <I>4</I> <li>Cat: <I>4</I> <li>Dan: <I>4</I> <li>Dut: <I>4</I> <li>Eng: <I>4</I> <li>Fin: <I>4</I> <li>Fre: <I>4</I> <li>Ger: <I>4</I> <li>Ita: <I>4</I> <li>Nep: <I>४</I> <li>Nor: <I>4</I> <li>Pes: <I>4</I> <li>Pnb: <I>۴</I> <li>Pol: <I>4</I> <li>Ron: <I>4</I> <li>Rus: <I>4</I> <li>Spa: <I>4</I> <li>Swe: <I>4</I> <li>Urd: <I>۴</I> </ul> </div> </div></TD>-</TR>-<TR>-<TD><CODE>mkDigits</CODE></TD>-<TD><A HREF="#Dig">Dig</A> <CODE>-></CODE> <A HREF="#Digits" TITLE="Digits - cardinal or ordinal in digits">Digits</A> <CODE>-></CODE> <A HREF="#Digits" TITLE="Digits - cardinal or ordinal in digits">Digits</A></TD>-<TD><div class=reveal> <I>1 , 2 3 3 , 4 8 6</I> <div class=popup> <ul> <li>API: <CODE>mkDigits n1_Dig (mkDigits n2_Dig (mkDigits n3_Dig (mkDigits n3_Dig (mkDigits n4_Dig (mkDigits n8_Dig (mkDigits n6_Dig))))))</CODE> <li>Afr: <I>1 2 3 3 4 8 6</I> <li>Bul: <I>1 , 2 3 3 , 4 8 6</I> <li>Cat: <I>1 2 3 3 4 8 6</I> <li>Dan: <I>1 2 3 3 4 8 6</I> <li>Dut: <I>1 2 3 3 4 8 6</I> <li>Eng: <I>1 , 2 3 3 , 4 8 6</I> <li>Fin: <I>1 2 3 3 4 8 6</I> <li>Fre: <I>1 2 3 3 4 8 6</I> <li>Ger: <I>1 2 3 3 4 8 6</I> <li>Ita: <I>1 2 3 3 4 8 6</I> <li>Nep: <I>१२३३४८६</I> <li>Nor: <I>1 2 3 3 4 8 6</I> <li>Pes: <I>1 2 3 3 4 8 6</I> <li>Pnb: <I>۶۸۴۳۳۲۱</I> <li>Pol: <I>1 2 3 3 4 8 6</I> <li>Ron: <I>1 2 3 3 4 8 6</I> <li>Rus: <I>1 2 3 3 4 8 6</I> <li>Spa: <I>1 2 3 3 4 8 6</I> <li>Swe: <I>1 2 3 3 4 8 6</I> <li>Urd: <I>۶۸۴۳۳۲۱</I> </ul> </div> </div></TD>-</TR>-</TABLE>--<A NAME="IAdv"></A>-<H2>IAdv - interrogative adverb</H2>--<TABLE BORDER="1" CELLPADDING="4">-<TR>-<TH>Function</TH>-<TH>Type</TH>-<TH COLSPAN="2">Example</TH>-</TR>-<TR>-<TD><CODE>how8much_IAdv</CODE></TD>-<TD><A HREF="#IAdv" TITLE="IAdv - interrogative adverb">IAdv</A></TD>-<TD><div class=reveal> <I>how much</I> <div class=popup> <ul> <li>API: <CODE>mkUtt how8much_IAdv</CODE> <li>Afr: <I>hoeveel</I> <li>Bul: <I>колко</I> <li>Cat: <I>quant</I> <li>Dan: <I>*</I> <li>Dut: <I>hoeveel</I> <li>Eng: <I>how much</I> <li>Fin: <I>kuinka paljon</I> <li>Fre: <I>combien</I> <li>Ger: <I>wieviel</I> <li>Ita: <I>quanto</I> <li>Nep: <I>कती</I> <li>Nor: <I>*</I> <li>Pes: <I>چقدر</I> <li>Pnb: <I>كینا</I> <li>Pol: <I>*</I> <li>Ron: <I>cât</I> <li>Rus: <I>*</I> <li>Spa: <I>*</I> <li>Swe: <I>hur mycket</I> <li>Urd: <I>كتنا</I> </ul> </div> </div></TD>-</TR>-<TR>-<TD><CODE>how_IAdv</CODE></TD>-<TD><A HREF="#IAdv" TITLE="IAdv - interrogative adverb">IAdv</A></TD>-<TD><div class=reveal> <I>how</I> <div class=popup> <ul> <li>API: <CODE>mkUtt how_IAdv</CODE> <li>Afr: <I>hoe</I> <li>Bul: <I>как</I> <li>Cat: <I>com</I> <li>Dan: <I>hvor</I> <li>Dut: <I>hoe</I> <li>Eng: <I>how</I> <li>Fin: <I>miten</I> <li>Fre: <I>comment</I> <li>Ger: <I>wie</I> <li>Ita: <I>come</I> <li>Nep: <I>कसरी</I> <li>Nor: <I>hvor</I> <li>Pes: <I>چطور</I> <li>Pnb: <I>كسراں</I> <li>Pol: <I>jak</I> <li>Ron: <I>cum</I> <li>Rus: <I>как</I> <li>Spa: <I>como</I> <li>Swe: <I>hur</I> <li>Urd: <I>كیسے</I> </ul> </div> </div></TD>-</TR>-<TR>-<TD><CODE>mkIAdv</CODE></TD>-<TD><A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A> <CODE>-></CODE> <A HREF="#IP" TITLE="IP - interrogative pronoun">IP</A> <CODE>-></CODE> <A HREF="#IAdv" TITLE="IAdv - interrogative adverb">IAdv</A></TD>-<TD><div class=reveal> <I>in which city</I> <div class=popup> <ul> <li>API: <CODE>mkIAdv in_Prep (mkIP which_IQuant city_N)</CODE> <li>Afr: <I>in watter stad</I> <li>Bul: <I>в кой град</I> <li>Cat: <I>en quin ciutat</I> <li>Dan: <I>i hvilken by</I> <li>Dut: <I>in welke stad</I> <li>Eng: <I>in which city</I> <li>Fin: <I>missä kaupungissa</I> <li>Fre: <I>dans quelle ville</I> <li>Ger: <I>in welcher Stadt</I> <li>Ita: <I>in quale città</I> <li>Nep: <I>कुन शहर मा</I> <li>Nor: <I>i hvilken by</I> <li>Pes: <I>در کدام شهر</I> <li>Pnb: <I>{s : Str = "كیڑا" ++ "شہر" ++ "وچ"; lock_IAdv : {} = <>} / {s : Str</I> <li>Pol: <I>w którym mieście</I> <li>Ron: <I>în care oraş</I> <li>Rus: <I>в который город</I> <li>Spa: <I>en qué ciudad</I> <li>Swe: <I>i vilken stad</I> <li>Urd: <I>كون سے شہر میں</I> </ul> </div> </div></TD>-</TR>-<TR>-<TD><CODE>mkIAdv</CODE></TD>-<TD><A HREF="#IAdv" TITLE="IAdv - interrogative adverb">IAdv</A> <CODE>-></CODE> <A HREF="#Adv" TITLE="Adv - verb-phrase-modifying adverb">Adv</A> <CODE>-></CODE> <A HREF="#IAdv" TITLE="IAdv - interrogative adverb">IAdv</A></TD>-<TD><div class=reveal> <I>where in Paris</I> <div class=popup> <ul> <li>API: <CODE>mkIAdv where_IAdv (mkAdv in_Prep (mkNP paris_PN))</CODE> <li>Afr: <I>waar in Parys</I> <li>Bul: <I>къде в Париж</I> <li>Cat: <I>on en Paris</I> <li>Dan: <I>hvor i Paris</I> <li>Dut: <I>waar in Parijs</I> <li>Eng: <I>where in Paris</I> <li>Fin: <I>missä Pariisissa</I> <li>Fre: <I>où dans Paris</I> <li>Ger: <I>wo in Paris</I> <li>Ita: <I>dove in Parigi</I> <li>Nep: <I>कहाँ पेरिस मा</I> <li>Nor: <I>hvor i Paris</I> <li>Pes: <I>در پاریس کجا</I> <li>Pnb: <I>كتھے پیرس وچ</I> <li>Pol: <I>gdzie w Paryżu</I> <li>Ron: <I>unde în Paris</I> <li>Rus: <I>где в Париже</I> <li>Spa: <I>donde en Paris</I> <li>Swe: <I>var i Paris</I> <li>Urd: <I>كہاں پیرس میں</I> </ul> </div> </div></TD>-</TR>-<TR>-<TD><CODE>when_IAdv</CODE></TD>-<TD><A HREF="#IAdv" TITLE="IAdv - interrogative adverb">IAdv</A></TD>-<TD><div class=reveal> <I>when</I> <div class=popup> <ul> <li>API: <CODE>mkUtt when_IAdv</CODE> <li>Afr: <I>wanneer</I> <li>Bul: <I>кога</I> <li>Cat: <I>quan</I> <li>Dan: <I>hvornår</I> <li>Dut: <I>wanneer</I> <li>Eng: <I>when</I> <li>Fin: <I>milloin</I> <li>Fre: <I>quand</I> <li>Ger: <I>wann</I> <li>Ita: <I>quando</I> <li>Nep: <I>कहिले</I> <li>Nor: <I>når</I> <li>Pes: <I>کی</I> <li>Pnb: <I>كدوں</I> <li>Pol: <I>kiedy</I> <li>Ron: <I>când</I> <li>Rus: <I>когда</I> <li>Spa: <I>cuando</I> <li>Swe: <I>när</I> <li>Urd: <I>كب</I> </ul> </div> </div></TD>-</TR>-<TR>-<TD><CODE>where_IAdv</CODE></TD>-<TD><A HREF="#IAdv" TITLE="IAdv - interrogative adverb">IAdv</A></TD>-<TD><div class=reveal> <I>where</I> <div class=popup> <ul> <li>API: <CODE>mkUtt where_IAdv</CODE> <li>Afr: <I>waar</I> <li>Bul: <I>къде</I> <li>Cat: <I>on</I> <li>Dan: <I>hvor</I> <li>Dut: <I>waar</I> <li>Eng: <I>where</I> <li>Fin: <I>missä</I> <li>Fre: <I>où</I> <li>Ger: <I>wo</I> <li>Ita: <I>dove</I> <li>Nep: <I>कहाँ</I> <li>Nor: <I>hvor</I> <li>Pes: <I>کجا</I> <li>Pnb: <I>كتھے</I> <li>Pol: <I>gdzie</I> <li>Ron: <I>unde</I> <li>Rus: <I>где</I> <li>Spa: <I>donde</I> <li>Swe: <I>var</I> <li>Urd: <I>كہاں</I> </ul> </div> </div></TD>-</TR>-<TR>-<TD><CODE>why_IAdv</CODE></TD>-<TD><A HREF="#IAdv" TITLE="IAdv - interrogative adverb">IAdv</A></TD>-<TD><div class=reveal> <I>why</I> <div class=popup> <ul> <li>API: <CODE>mkUtt why_IAdv</CODE> <li>Afr: <I>waarom</I> <li>Bul: <I>защо</I> <li>Cat: <I>per quË</I> <li>Dan: <I>hvorfor</I> <li>Dut: <I>waarom</I> <li>Eng: <I>why</I> <li>Fin: <I>miksi</I> <li>Fre: <I>pourquoi</I> <li>Ger: <I>warum</I> <li>Ita: <I>perché</I> <li>Nep: <I>किन</I> <li>Nor: <I>hvorfor</I> <li>Pes: <I>چرا</I> <li>Pnb: <I>كیوں</I> <li>Pol: <I>dlaczego</I> <li>Ron: <I>de ce</I> <li>Rus: <I>почему</I> <li>Spa: <I>porqué</I> <li>Swe: <I>varför</I> <li>Urd: <I>كیوں</I> </ul> </div> </div></TD>-</TR>-</TABLE>--<A NAME="IComp"></A>-<H2>IComp - interrogative complement of copula</H2>--<TABLE BORDER="1" CELLPADDING="4">-<TR>-<TH>Function</TH>-<TH>Type</TH>-<TH COLSPAN="2">Example</TH>-</TR>-<TR>-<TD><CODE>mkIComp</CODE></TD>-<TD><A HREF="#IAdv" TITLE="IAdv - interrogative adverb">IAdv</A> <CODE>-></CODE> <A HREF="#IComp" TITLE="IComp - interrogative complement of copula">IComp</A></TD>-<TD><I>where (is it)</I></TD>-</TR>-<TR>-<TD><CODE>mkIComp</CODE></TD>-<TD><A HREF="#IP" TITLE="IP - interrogative pronoun">IP</A> <CODE>-></CODE> <A HREF="#IComp" TITLE="IComp - interrogative complement of copula">IComp</A></TD>-<TD><I>who (is it)</I></TD>-</TR>-</TABLE>--<A NAME="IDet"></A>-<H2>IDet - interrogative determiner</H2>--<TABLE BORDER="1" CELLPADDING="4">-<TR>-<TH>Function</TH>-<TH>Type</TH>-<TH COLSPAN="2">Example</TH>-</TR>-<TR>-<TD><CODE>how8many_IDet</CODE></TD>-<TD><A HREF="#IDet" TITLE="IDet - interrogative determiner">IDet</A></TD>-<TD><div class=reveal> <I>how many houses</I> <div class=popup> <ul> <li>API: <CODE>mkUtt (mkIP how8many_IDet house_N)</CODE> <li>Afr: <I>hoeveel huise</I> <li>Bul: <I>колко къщи</I> <li>Cat: <I>quantes cases</I> <li>Dan: <I>hur mange huse</I> <li>Dut: <I>hoeveel huizen</I> <li>Eng: <I>how many houses</I> <li>Fin: <I>kuinka moni talo</I> <li>Fre: <I>combien de maisons</I> <li>Ger: <I>wieviele Häuser</I> <li>Ita: <I>quante case</I> <li>Nep: <I>कती वटा घरहरु</I> <li>Nor: <I>hur mange hus</I> <li>Pes: <I>چند خانه</I> <li>Pnb: <I>كینے گھر</I> <li>Pol: <I>ile domów</I> <li>Ron: <I>câte case</I> <li>Rus: <I>скольки домов</I> <li>Spa: <I>cuantas casas</I> <li>Swe: <I>hur många hus</I> <li>Urd: <I>كتنے گھر</I> </ul> </div> </div></TD>-</TR>-<TR>-<TD><CODE>mkIDet</CODE></TD>-<TD><A HREF="#IQuant">IQuant</A> <CODE>-></CODE> <A HREF="#Num" TITLE="Num - number determining element">Num</A> <CODE>-></CODE> <A HREF="#IDet" TITLE="IDet - interrogative determiner">IDet</A></TD>-<TD><div class=reveal> <I>which houses</I> <div class=popup> <ul> <li>API: <CODE>mkIP (mkIDet which_IQuant pluralNum) house_N</CODE> <li>Afr: <I>watter huise</I> <li>Bul: <I>кои къщи</I> <li>Cat: <I>quins cases</I> <li>Dan: <I>hvilke huse</I> <li>Dut: <I>welke huizen</I> <li>Eng: <I>which houses</I> <li>Fin: <I>mitkä talot</I> <li>Fre: <I>quelles maisons</I> <li>Ger: <I>welche Häuser</I> <li>Ita: <I>quali case</I> <li>Nep: <I>कुन घरहरु</I> <li>Nor: <I>hvilke hus</I> <li>Pes: <I>کدام خانه</I> <li>Pnb: <I>كیڑے گھر</I> <li>Pol: <I>których domów</I> <li>Ron: <I>care case</I> <li>Rus: <I>которые домы</I> <li>Spa: <I>qué casas</I> <li>Swe: <I>vilka hus</I> <li>Urd: <I>كون سے گھر</I> </ul> </div> </div></TD>-</TR>-<TR>-<TD><CODE>mkIDet</CODE></TD>-<TD><A HREF="#IQuant">IQuant</A> <CODE>-></CODE> <A HREF="#IDet" TITLE="IDet - interrogative determiner">IDet</A></TD>-<TD><div class=reveal> <I>which house</I> <div class=popup> <ul> <li>API: <CODE>mkIP (mkIDet which_IQuant) house_N</CODE> <li>Afr: <I>watter huis</I> <li>Bul: <I>коя къща</I> <li>Cat: <I>quin casa</I> <li>Dan: <I>hvilket hus</I> <li>Dut: <I>welk huis</I> <li>Eng: <I>which house</I> <li>Fin: <I>mikä talo</I> <li>Fre: <I>quelle maison</I> <li>Ger: <I>welches Haus</I> <li>Ita: <I>quale casa</I> <li>Nep: <I>कुन घर</I> <li>Nor: <I>hvilket hus</I> <li>Pes: <I>کدام خانه</I> <li>Pnb: <I>{s : ResPnb.Case => Str</I> <li>Pol: <I>którego domu</I> <li>Ron: <I>care casă</I> <li>Rus: <I>который дом</I> <li>Spa: <I>qué casa</I> <li>Swe: <I>vilket hus</I> <li>Urd: <I>كون سا گھر</I> </ul> </div> </div></TD>-</TR>-<TR>-<TD><CODE>whichPl_IDet</CODE></TD>-<TD><A HREF="#IDet" TITLE="IDet - interrogative determiner">IDet</A></TD>-<TD><div class=reveal> <I>which houses</I> <div class=popup> <ul> <li>API: <CODE>mkIP whichPl_IDet house_N</CODE> <li>Afr: <I>watter huise</I> <li>Bul: <I>кои къщи</I> <li>Cat: <I>quins cases</I> <li>Dan: <I>hvilke huse</I> <li>Dut: <I>welke huizen</I> <li>Eng: <I>which houses</I> <li>Fin: <I>mitkä talot</I> <li>Fre: <I>quelles maisons</I> <li>Ger: <I>welche Häuser</I> <li>Ita: <I>quali case</I> <li>Nep: <I>कुन घरहरु</I> <li>Nor: <I>hvilke hus</I> <li>Pes: <I>کدام خانه</I> <li>Pnb: <I>كیڑے گھر</I> <li>Pol: <I>których domów</I> <li>Ron: <I>care case</I> <li>Rus: <I>которые домы</I> <li>Spa: <I>qué casas</I> <li>Swe: <I>vilka hus</I> <li>Urd: <I>كون سے گھر</I> </ul> </div> </div></TD>-</TR>-<TR>-<TD><CODE>which_IDet</CODE></TD>-<TD><A HREF="#IDet" TITLE="IDet - interrogative determiner">IDet</A></TD>-<TD><div class=reveal> <I>which house</I> <div class=popup> <ul> <li>API: <CODE>mkIP which_IDet house_N</CODE> <li>Afr: <I>watter huis</I> <li>Bul: <I>коя къща</I> <li>Cat: <I>quin casa</I> <li>Dan: <I>hvilket hus</I> <li>Dut: <I>welk huis</I> <li>Eng: <I>which house</I> <li>Fin: <I>mikä talo</I> <li>Fre: <I>quelle maison</I> <li>Ger: <I>welches Haus</I> <li>Ita: <I>quale casa</I> <li>Nep: <I>कुन घर</I> <li>Nor: <I>hvilket hus</I> <li>Pes: <I>کدام خانه</I> <li>Pnb: <I>{s : ResPnb.Case => Str</I> <li>Pol: <I>którego domu</I> <li>Ron: <I>care casă</I> <li>Rus: <I>который дом</I> <li>Spa: <I>qué casa</I> <li>Swe: <I>vilket hus</I> <li>Urd: <I>كون سا گھر</I> </ul> </div> </div></TD>-</TR>-</TABLE>--<A NAME="IP"></A>-<H2>IP - interrogative pronoun</H2>--<TABLE BORDER="1" CELLPADDING="4">-<TR>-<TH>Function</TH>-<TH>Type</TH>-<TH COLSPAN="2">Example</TH>-</TR>-<TR>-<TD><CODE>mkIP</CODE></TD>-<TD><A HREF="#IDet" TITLE="IDet - interrogative determiner">IDet</A> <CODE>-></CODE> <A HREF="#CN" TITLE="CN - common noun (without determiner)">CN</A> <CODE>-></CODE> <A HREF="#IP" TITLE="IP - interrogative pronoun">IP</A></TD>-<TD><div class=reveal> <I>which five big cities</I> <div class=popup> <ul> <li>API: <CODE>mkIP (mkIDet which_IQuant (mkNum (mkNumeral n5_Unit))) (mkCN big_A city_N)</CODE> <li>Afr: <I>watter vyf groot stede</I> <li>Bul: <I>кои пет големи града</I> <li>Cat: <I>quins cinc ciutats groses</I> <li>Dan: <I>hvilke fem store byer</I> <li>Dut: <I>welke vijf grote stadden</I> <li>Eng: <I>which five big cities</I> <li>Fin: <I>mitkä viisi suurta kaupunkia</I> <li>Fre: <I>quelles cinq grandes villes</I> <li>Ger: <I>welche fünf großen Städte</I> <li>Ita: <I>quali cinque grandi città</I> <li>Nep: <I>कुन पाँच ठुला शहरहरु</I> <li>Nor: <I>hvilke fem store byer</I> <li>Pes: <I>کدام پنج شهر بزرگ</I> <li>Pnb: <I>كیڑے پنج وڈے شہر</I> <li>Pol: <I>których pięciu dużych miast</I> <li>Ron: <I>care cinci oraşe mari</I> <li>Rus: <I>которые пять большие городы</I> <li>Spa: <I>qué cinco grandes ciudades</I> <li>Swe: <I>vilka fem stora städer</I> <li>Urd: <I>كون سے پانچ بڑے شہر</I> </ul> </div> </div></TD>-</TR>-<TR>-<TD><CODE>mkIP</CODE></TD>-<TD><A HREF="#IDet" TITLE="IDet - interrogative determiner">IDet</A> <CODE>-></CODE> <A HREF="#N" TITLE="N - common noun">N</A> <CODE>-></CODE> <A HREF="#IP" TITLE="IP - interrogative pronoun">IP</A></TD>-<TD><div class=reveal> <I>which five cities</I> <div class=popup> <ul> <li>API: <CODE>mkIP (mkIDet which_IQuant (mkNum (mkNumeral n5_Unit))) city_N</CODE> <li>Afr: <I>watter vyf stede</I> <li>Bul: <I>кои пет града</I> <li>Cat: <I>quins cinc ciutats</I> <li>Dan: <I>hvilke fem byer</I> <li>Dut: <I>welke vijf stadden</I> <li>Eng: <I>which five cities</I> <li>Fin: <I>mitkä viisi kaupunkia</I> <li>Fre: <I>quelles cinq villes</I> <li>Ger: <I>welche fünf Städte</I> <li>Ita: <I>quali cinque città</I> <li>Nep: <I>कुन पाँच शहरहरु</I> <li>Nor: <I>hvilke fem byer</I> <li>Pes: <I>کدام پنج شهر</I> <li>Pnb: <I>كیڑے پنج شہر</I> <li>Pol: <I>których pięciu miast</I> <li>Ron: <I>care cinci oraşe</I> <li>Rus: <I>которые пять городы</I> <li>Spa: <I>qué cinco ciudades</I> <li>Swe: <I>vilka fem städer</I> <li>Urd: <I>كون سے پانچ شہر</I> </ul> </div> </div></TD>-</TR>-<TR>-<TD><CODE>mkIP</CODE></TD>-<TD><A HREF="#IDet" TITLE="IDet - interrogative determiner">IDet</A> <CODE>-></CODE> <A HREF="#IP" TITLE="IP - interrogative pronoun">IP</A></TD>-<TD><div class=reveal> <I>which five</I> <div class=popup> <ul> <li>API: <CODE>mkIP (mkIDet which_IQuant (mkNum (mkNumeral n5_Unit)))</CODE> <li>Afr: <I>watter vyf</I> <li>Bul: <I>кои пет</I> <li>Cat: <I>quins cinc</I> <li>Dan: <I>hvilke fem</I> <li>Dut: <I>welke vijf</I> <li>Eng: <I>which five</I> <li>Fin: <I>mitkä viisi</I> <li>Fre: <I>quels cinq</I> <li>Ger: <I>welche fünf</I> <li>Ita: <I>quali cinque</I> <li>Nep: <I>कुन पाँच</I> <li>Nor: <I>hvilke fem</I> <li>Pes: <I>کدام پنج</I> <li>Pnb: <I>كیڑے پنج</I> <li>Pol: <I>których pięciu</I> <li>Ron: <I>care cinci</I> <li>Rus: <I>которые пять</I> <li>Spa: <I>qué cinco</I> <li>Swe: <I>vilka fem</I> <li>Urd: <I>كون سے پانچ</I> </ul> </div> </div></TD>-</TR>-<TR>-<TD><CODE>mkIP</CODE></TD>-<TD><A HREF="#IQuant">IQuant</A> <CODE>-></CODE> <A HREF="#CN" TITLE="CN - common noun (without determiner)">CN</A> <CODE>-></CODE> <A HREF="#IP" TITLE="IP - interrogative pronoun">IP</A></TD>-<TD><div class=reveal> <I>which big city</I> <div class=popup> <ul> <li>API: <CODE>mkIP which_IQuant (mkCN big_A city_N)</CODE> <li>Afr: <I>watter groot stad</I> <li>Bul: <I>кой голям град</I> <li>Cat: <I>quin ciutat grosa</I> <li>Dan: <I>hvilken stor by</I> <li>Dut: <I>welke grote stad</I> <li>Eng: <I>which big city</I> <li>Fin: <I>mikä suuri kaupunki</I> <li>Fre: <I>quelle grande ville</I> <li>Ger: <I>welche große Stadt</I> <li>Ita: <I>quale grande città</I> <li>Nep: <I>कुन ठुलो शहर</I> <li>Nor: <I>hvilken stor by</I> <li>Pes: <I>کدام شهر بزرگ</I> <li>Pnb: <I>{s : ResPnb.Case => Str</I> <li>Pol: <I>którego dużego miasta</I> <li>Ron: <I>care oraş mare</I> <li>Rus: <I>который большой город</I> <li>Spa: <I>qué grande ciudad</I> <li>Swe: <I>vilken stor stad</I> <li>Urd: <I>كون سا بڑا شہر</I> </ul> </div> </div></TD>-</TR>-<TR>-<TD><CODE>mkIP</CODE></TD>-<TD><A HREF="#IQuant">IQuant</A> <CODE>-></CODE> <A HREF="#Num" TITLE="Num - number determining element">Num</A> <CODE>-></CODE> <A HREF="#CN" TITLE="CN - common noun (without determiner)">CN</A> <CODE>-></CODE> <A HREF="#IP" TITLE="IP - interrogative pronoun">IP</A></TD>-<TD><div class=reveal> <I>which five big cities</I> <div class=popup> <ul> <li>API: <CODE>mkIP which_IQuant (mkNum (mkNumeral n5_Unit)) (mkCN big_A city_N)</CODE> <li>Afr: <I>watter vyf groot stede</I> <li>Bul: <I>кои пет големи града</I> <li>Cat: <I>quins cinc ciutats groses</I> <li>Dan: <I>hvilke fem store byer</I> <li>Dut: <I>welke vijf grote stadden</I> <li>Eng: <I>which five big cities</I> <li>Fin: <I>mitkä viisi suurta kaupunkia</I> <li>Fre: <I>quelles cinq grandes villes</I> <li>Ger: <I>welche fünf großen Städte</I> <li>Ita: <I>quali cinque grandi città</I> <li>Nep: <I>कुन पाँच ठुला शहरहरु</I> <li>Nor: <I>hvilke fem store byer</I> <li>Pes: <I>کدام پنج شهر بزرگ</I> <li>Pnb: <I>كیڑے پنج وڈے شہر</I> <li>Pol: <I>których pięciu dużych miast</I> <li>Ron: <I>care cinci oraşe mari</I> <li>Rus: <I>которые пять большие городы</I> <li>Spa: <I>qué cinco grandes ciudades</I> <li>Swe: <I>vilka fem stora städer</I> <li>Urd: <I>كون سے پانچ بڑے شہر</I> </ul> </div> </div></TD>-</TR>-<TR>-<TD><CODE>mkIP</CODE></TD>-<TD><A HREF="#IQuant">IQuant</A> <CODE>-></CODE> <A HREF="#N" TITLE="N - common noun">N</A> <CODE>-></CODE> <A HREF="#IP" TITLE="IP - interrogative pronoun">IP</A></TD>-<TD><div class=reveal> <I>which city</I> <div class=popup> <ul> <li>API: <CODE>mkIP which_IQuant city_N</CODE> <li>Afr: <I>watter stad</I> <li>Bul: <I>кой град</I> <li>Cat: <I>quin ciutat</I> <li>Dan: <I>hvilken by</I> <li>Dut: <I>welke stad</I> <li>Eng: <I>which city</I> <li>Fin: <I>mikä kaupunki</I> <li>Fre: <I>quelle ville</I> <li>Ger: <I>welche Stadt</I> <li>Ita: <I>quale città</I> <li>Nep: <I>कुन शहर</I> <li>Nor: <I>hvilken by</I> <li>Pes: <I>کدام شهر</I> <li>Pnb: <I>{s : ResPnb.Case => Str</I> <li>Pol: <I>którego miasta</I> <li>Ron: <I>care oraş</I> <li>Rus: <I>который город</I> <li>Spa: <I>qué ciudad</I> <li>Swe: <I>vilken stad</I> <li>Urd: <I>كون سا شہر</I> </ul> </div> </div></TD>-</TR>-<TR>-<TD><CODE>mkIP</CODE></TD>-<TD><A HREF="#IP" TITLE="IP - interrogative pronoun">IP</A> <CODE>-></CODE> <A HREF="#Adv" TITLE="Adv - verb-phrase-modifying adverb">Adv</A> <CODE>-></CODE> <A HREF="#IP" TITLE="IP - interrogative pronoun">IP</A></TD>-<TD><div class=reveal> <I>who in Paris</I> <div class=popup> <ul> <li>API: <CODE>mkIP who_IP (mkAdv in_Prep (mkNP paris_PN))</CODE> <li>Afr: <I>wie in Parys</I> <li>Bul: <I>кой в Париж</I> <li>Cat: <I>qui en Paris</I> <li>Dan: <I>hvem i Paris</I> <li>Dut: <I>wie in Parijs</I> <li>Eng: <I>who in Paris</I> <li>Fin: <I>kuka Pariisissa</I> <li>Fre: <I>qui dans Paris</I> <li>Ger: <I>wer in Paris</I> <li>Ita: <I>chi in Parigi</I> <li>Nep: <I>पेरिस मा को</I> <li>Nor: <I>hvem i Paris</I> <li>Pes: <I>چه کسی در پاریس</I> <li>Pnb: <I>پیرس وچ كون</I> <li>Pol: <I>kogo w Paryżu</I> <li>Ron: <I>cine în Paris</I> <li>Rus: <I>кто в Париже</I> <li>Spa: <I>quién en Paris</I> <li>Swe: <I>vem i Paris</I> <li>Urd: <I>پیرس میں كون</I> </ul> </div> </div></TD>-</TR>-<TR>-<TD><CODE>whatPl_IP</CODE></TD>-<TD><A HREF="#IP" TITLE="IP - interrogative pronoun">IP</A></TD>-<TD><div class=reveal> <I>what</I> <div class=popup> <ul> <li>API: <CODE>whatPl_IP</CODE> <li>Afr: <I>wat</I> <li>Bul: <I>какви</I> <li>Cat: <I>què</I> <li>Dan: <I>hvilke</I> <li>Dut: <I>wat</I> <li>Eng: <I>what</I> <li>Fin: <I>mitkä</I> <li>Fre: <I>que</I> <li>Ger: <I>was</I> <li>Ita: <I>che</I> <li>Nep: <I>के</I> <li>Nor: <I>hva</I> <li>Pes: <I>چه چیزهایی</I> <li>Pnb: <I>*</I> <li>Pol: <I>czego</I> <li>Ron: <I>ce</I> <li>Rus: <I>что</I> <li>Spa: <I>qué</I> <li>Swe: <I>vad</I> <li>Urd: <I>كیا</I> </ul> </div> </div></TD>-</TR>-<TR>-<TD><CODE>whatSg_IP</CODE></TD>-<TD><A HREF="#IP" TITLE="IP - interrogative pronoun">IP</A></TD>-<TD><div class=reveal> <I>what</I> <div class=popup> <ul> <li>API: <CODE>whatSg_IP</CODE> <li>Afr: <I>wat</I> <li>Bul: <I>какъв</I> <li>Cat: <I>què</I> <li>Dan: <I>hvad</I> <li>Dut: <I>wat</I> <li>Eng: <I>what</I> <li>Fin: <I>mikä</I> <li>Fre: <I>que</I> <li>Ger: <I>was</I> <li>Ita: <I>che</I> <li>Nep: <I>के</I> <li>Nor: <I>hva</I> <li>Pes: <I>چه چیزی</I> <li>Pnb: <I>كیا</I> <li>Pol: <I>czego</I> <li>Ron: <I>ce</I> <li>Rus: <I>что</I> <li>Spa: <I>qué</I> <li>Swe: <I>vad</I> <li>Urd: <I>كیا</I> </ul> </div> </div></TD>-</TR>-<TR>-<TD><CODE>what_IP</CODE></TD>-<TD><A HREF="#IP" TITLE="IP - interrogative pronoun">IP</A></TD>-<TD><div class=reveal> <I>what</I> <div class=popup> <ul> <li>API: <CODE>mkUtt what_IP</CODE> <li>Afr: <I>wat</I> <li>Bul: <I>какъв</I> <li>Cat: <I>què</I> <li>Dan: <I>hvad</I> <li>Dut: <I>wat</I> <li>Eng: <I>what</I> <li>Fin: <I>mikä</I> <li>Fre: <I>que</I> <li>Ger: <I>was</I> <li>Ita: <I>che</I> <li>Nep: <I>के</I> <li>Nor: <I>hva</I> <li>Pes: <I>چه چیزی</I> <li>Pnb: <I>كیا</I> <li>Pol: <I>co</I> <li>Ron: <I>ce</I> <li>Rus: <I>что</I> <li>Spa: <I>qué</I> <li>Swe: <I>vad</I> <li>Urd: <I>كیا</I> </ul> </div> </div></TD>-</TR>-<TR>-<TD><CODE>whoPl_IP</CODE></TD>-<TD><A HREF="#IP" TITLE="IP - interrogative pronoun">IP</A></TD>-<TD><div class=reveal> <I>who</I> <div class=popup> <ul> <li>API: <CODE>whoPl_IP</CODE> <li>Afr: <I>wie</I> <li>Bul: <I>кои</I> <li>Cat: <I>qui</I> <li>Dan: <I>hvilke</I> <li>Dut: <I>wie</I> <li>Eng: <I>who</I> <li>Fin: <I>ketkä</I> <li>Fre: <I>qui</I> <li>Ger: <I>wer</I> <li>Ita: <I>chi</I> <li>Nep: <I>को</I> <li>Nor: <I>hvilke</I> <li>Pes: <I>چه کسانی</I> <li>Pnb: <I>*</I> <li>Pol: <I>kogo</I> <li>Ron: <I>cine</I> <li>Rus: <I>кто</I> <li>Spa: <I>quién</I> <li>Swe: <I>vilka</I> <li>Urd: <I>كون</I> </ul> </div> </div></TD>-</TR>-<TR>-<TD><CODE>whoSg_IP</CODE></TD>-<TD><A HREF="#IP" TITLE="IP - interrogative pronoun">IP</A></TD>-<TD><div class=reveal> <I>who</I> <div class=popup> <ul> <li>API: <CODE>whoSg_IP</CODE> <li>Afr: <I>wie</I> <li>Bul: <I>кой</I> <li>Cat: <I>qui</I> <li>Dan: <I>hvem</I> <li>Dut: <I>wie</I> <li>Eng: <I>who</I> <li>Fin: <I>kuka</I> <li>Fre: <I>qui</I> <li>Ger: <I>wer</I> <li>Ita: <I>chi</I> <li>Nep: <I>को</I> <li>Nor: <I>hvem</I> <li>Pes: <I>چه کسی</I> <li>Pnb: <I>كون</I> <li>Pol: <I>kogo</I> <li>Ron: <I>cine</I> <li>Rus: <I>кто</I> <li>Spa: <I>quién</I> <li>Swe: <I>vem</I> <li>Urd: <I>كون</I> </ul> </div> </div></TD>-</TR>-<TR>-<TD><CODE>who_IP</CODE></TD>-<TD><A HREF="#IP" TITLE="IP - interrogative pronoun">IP</A></TD>-<TD><div class=reveal> <I>who</I> <div class=popup> <ul> <li>API: <CODE>mkUtt who_IP</CODE> <li>Afr: <I>wie</I> <li>Bul: <I>кой</I> <li>Cat: <I>qui</I> <li>Dan: <I>hvem</I> <li>Dut: <I>wie</I> <li>Eng: <I>who</I> <li>Fin: <I>kuka</I> <li>Fre: <I>qui</I> <li>Ger: <I>wer</I> <li>Ita: <I>chi</I> <li>Nep: <I>को</I> <li>Nor: <I>hvem</I> <li>Pes: <I>چه کسی</I> <li>Pnb: <I>كون</I> <li>Pol: <I>kto</I> <li>Ron: <I>cine</I> <li>Rus: <I>кто</I> <li>Spa: <I>quién</I> <li>Swe: <I>vem</I> <li>Urd: <I>كون</I> </ul> </div> </div></TD>-</TR>-</TABLE>--<A NAME="IQuant"></A>-<H2>IQuant</H2>--<TABLE BORDER="1" CELLPADDING="4">-<TR>-<TH>Function</TH>-<TH>Type</TH>-<TH COLSPAN="2">Example</TH>-</TR>-<TR>-<TD><CODE>which_IQuant</CODE></TD>-<TD><A HREF="#IQuant">IQuant</A></TD>-<TD><div class=reveal> <I>which house</I> <div class=popup> <ul> <li>API: <CODE>mkIP which_IQuant house_N</CODE> <li>Afr: <I>watter huis</I> <li>Bul: <I>коя къща</I> <li>Cat: <I>quin casa</I> <li>Dan: <I>hvilket hus</I> <li>Dut: <I>welk huis</I> <li>Eng: <I>which house</I> <li>Fin: <I>mikä talo</I> <li>Fre: <I>quelle maison</I> <li>Ger: <I>welches Haus</I> <li>Ita: <I>quale casa</I> <li>Nep: <I>कुन घर</I> <li>Nor: <I>hvilket hus</I> <li>Pes: <I>کدام خانه</I> <li>Pnb: <I>{s : ResPnb.Case => Str</I> <li>Pol: <I>którego domu</I> <li>Ron: <I>care casă</I> <li>Rus: <I>который дом</I> <li>Spa: <I>qué casa</I> <li>Swe: <I>vilket hus</I> <li>Urd: <I>كون سا گھر</I> </ul> </div> </div></TD>-</TR>-</TABLE>--<A NAME="Imp"></A>-<H2>Imp - imperative</H2>--<TABLE BORDER="1" CELLPADDING="4">-<TR>-<TH>Function</TH>-<TH>Type</TH>-<TH COLSPAN="2">Example</TH>-</TR>-<TR>-<TD><CODE>mkImp</CODE></TD>-<TD><A HREF="#VP" TITLE="VP - verb phrase">VP</A> <CODE>-></CODE> <A HREF="#Imp" TITLE="Imp - imperative">Imp</A></TD>-<TD><div class=reveal> <I>come to my house</I> <div class=popup> <ul> <li>API: <CODE>mkImp (mkVP (mkVP come_V) (mkAdv to_Prep (mkNP i_Pron house_N)))</CODE> <li>Afr: <I>kom na my huis</I> <li>Bul: <I>ела до моята къща</I> <li>Cat: <I>venir a la meva casa</I> <li>Dan: <I>kom til mit hus</I> <li>Dut: <I>komt u naar mijn huis</I> <li>Eng: <I>come to my house</I> <li>Fin: <I>tule</I> <li>Fre: <I>venez à ma maison</I> <li>Ger: <I>kommen Sie nach meinem Haus / Hause</I> <li>Ita: <I>venire alla mia casa</I> <li>Nep: <I>आउ मेरो घर सम्म</I> <li>Nor: <I>komm til mit hus</I> <li>Pes: <I>به خانه ی من بیا</I> <li>Pnb: <I>آنا میرا گھر نوں</I> <li>Pol: <I>do mojego domu przychodź</I> <li>Ron: <I>sã vii la casa mea</I> <li>Rus: <I>приходи к моему дому</I> <li>Spa: <I>venir a mi casa</I> <li>Swe: <I>kom till mitt hus</I> <li>Urd: <I>آنا میرے گھر كو</I> </ul> </div> </div></TD>-</TR>-<TR>-<TD><CODE>mkImp</CODE></TD>-<TD><A HREF="#V" TITLE="V - one-place verb">V</A> <CODE>-></CODE> <A HREF="#Imp" TITLE="Imp - imperative">Imp</A></TD>-<TD><div class=reveal> <I>come</I> <div class=popup> <ul> <li>API: <CODE>mkImp come_V</CODE> <li>Afr: <I>kom</I> <li>Bul: <I>ела</I> <li>Cat: <I>venir</I> <li>Dan: <I>kom</I> <li>Dut: <I>komt u</I> <li>Eng: <I>come</I> <li>Fin: <I>tule</I> <li>Fre: <I>venez</I> <li>Ger: <I>kommen Sie</I> <li>Ita: <I>venire</I> <li>Nep: <I>आउ</I> <li>Nor: <I>komm</I> <li>Pes: <I>بیا</I> <li>Pnb: <I>آنا</I> <li>Pol: <I>przychodź</I> <li>Ron: <I>sã vii</I> <li>Rus: <I>приходи</I> <li>Spa: <I>venir</I> <li>Swe: <I>kom</I> <li>Urd: <I>آنا</I> </ul> </div> </div></TD>-</TR>-<TR>-<TD><CODE>mkImp</CODE></TD>-<TD><A HREF="#V2" TITLE="V2 - two-place verb">V2</A> <CODE>-></CODE> <A HREF="#NP" TITLE="NP - noun phrase (subject or object)">NP</A> <CODE>-></CODE> <A HREF="#Imp" TITLE="Imp - imperative">Imp</A></TD>-<TD><div class=reveal> <I>buy it</I> <div class=popup> <ul> <li>API: <CODE>mkImp buy_V2 it_NP</CODE> <li>Afr: <I>koop</I> <li>Bul: <I>купи него</I> <li>Cat: <I>comprar</I> <li>Dan: <I>køb det</I> <li>Dut: <I>koopt u</I> <li>Eng: <I>buy it</I> <li>Fin: <I>osta sen</I> <li>Fre: <I>achetez le</I> <li>Ger: <I>kaufen Sie es</I> <li>Ita: <I>comprare lo</I> <li>Nep: <I>यो किन्</I> <li>Nor: <I>kjøp det</I> <li>Pes: <I>آن را بخر</I> <li>Pnb: <I>اینوں خریدنا</I> <li>Pol: <I>kupuj je</I> <li>Ron: <I>sã îl cumperi</I> <li>Rus: <I>покупай его</I> <li>Spa: <I>comprar</I> <li>Swe: <I>köp det</I> <li>Urd: <I>اس كو خریدنا</I> </ul> </div> </div></TD>-</TR>-</TABLE>--<A NAME="ImpForm"></A>-<H2>ImpForm</H2>--<TABLE BORDER="1" CELLPADDING="4">-<TR>-<TH>Function</TH>-<TH>Type</TH>-<TH COLSPAN="2">Example</TH>-</TR>-<TR>-<TD><CODE>pluralImpForm</CODE></TD>-<TD><A HREF="#ImpForm">ImpForm</A></TD>-<TD><div class=reveal> <I>be men</I> <div class=popup> <ul> <li>API: <CODE>mkUtt pluralImpForm (mkImp (mkVP man_N))</CODE> <li>Afr: <I>wees mans</I> <li>Bul: <I>бъдете мъже</I> <li>Cat: <I>sigueu homes</I> <li>Dan: <I>var mænd</I> <li>Dut: <I>wezen mannen</I> <li>Eng: <I>be men</I> <li>Fin: <I>olkaa miehiä</I> <li>Fre: <I>soyez des hommes</I> <li>Ger: <I>seid Männer</I> <li>Ita: <I>siate uomini</I> <li>Nep: <I>मान्छेहरु हऔ</I> <li>Nor: <I>var menn</I> <li>Pes: <I>مردان</I> <li>Pnb: <I>بندے</I> <li>Pol: <I>bądźcie mężczyzna</I> <li>Ron: <I>fiţi oameni</I> <li>Rus: <I>будьте человеками</I> <li>Spa: <I>sed hombres</I> <li>Swe: <I>var män</I> <li>Urd: <I>آدمی</I> </ul> </div> </div></TD>-</TR>-<TR>-<TD><CODE>politeImpForm</CODE></TD>-<TD><A HREF="#ImpForm">ImpForm</A></TD>-<TD><div class=reveal> <I>be a man</I> <div class=popup> <ul> <li>API: <CODE>mkUtt politeImpForm (mkImp (mkVP man_N))</CODE> <li>Afr: <I>wees 'n man</I> <li>Bul: <I>бъдете мъже</I> <li>Cat: <I>ser un home</I> <li>Dan: <I>var en mand</I> <li>Dut: <I>weest u man</I> <li>Eng: <I>be a man</I> <li>Fin: <I>olkaa mies</I> <li>Fre: <I>soyez un homme</I> <li>Ger: <I>seien Sie ein Mann</I> <li>Ita: <I>essere un uomo</I> <li>Nep: <I>मान्छे होउ</I> <li>Nor: <I>var en mann</I> <li>Pes: <I>مرد</I> <li>Pnb: <I>بندہ</I> <li>Pol: <I>bądź mężczyzna</I> <li>Ron: <I>sã fii om</I> <li>Rus: <I>будь человеком</I> <li>Spa: <I>ser un hombre</I> <li>Swe: <I>var en man</I> <li>Urd: <I>آدمی</I> </ul> </div> </div></TD>-</TR>-<TR>-<TD><CODE>singularImpForm</CODE></TD>-<TD><A HREF="#ImpForm">ImpForm</A></TD>-<TD><div class=reveal> <I>be a man</I> <div class=popup> <ul> <li>API: <CODE>mkUtt singularImpForm (mkImp (mkVP man_N))</CODE> <li>Afr: <I>wees 'n man</I> <li>Bul: <I>бъди мъж</I> <li>Cat: <I>sigues un home</I> <li>Dan: <I>var en mand</I> <li>Dut: <I>wees man</I> <li>Eng: <I>be a man</I> <li>Fin: <I>ole mies</I> <li>Fre: <I>sois un homme</I> <li>Ger: <I>sei ein Mann</I> <li>Ita: <I>sii un uomo</I> <li>Nep: <I>मान्छे होउ</I> <li>Nor: <I>var en mann</I> <li>Pes: <I>مرد</I> <li>Pnb: <I>بندہ</I> <li>Pol: <I>bądź mężczyzna</I> <li>Ron: <I>fii om</I> <li>Rus: <I>будь человеком</I> <li>Spa: <I>sé un hombre</I> <li>Swe: <I>var en man</I> <li>Urd: <I>آدمی</I> </ul> </div> </div></TD>-</TR>-</TABLE>--<A NAME="Interj"></A>-<H2>Interj - interjection</H2>--<P>-Lexical category, constructors given in-<A HREF="#RParadigms">lexical paradigms</A>.-</P>--<A NAME="ListAP"></A>-<H2>ListAP</H2>--<TABLE BORDER="1" CELLPADDING="4">-<TR>-<TH>Function</TH>-<TH>Type</TH>-<TH COLSPAN="2">Example</TH>-</TR>-<TR>-<TD><CODE>mkListAP</CODE></TD>-<TD><A HREF="#AP" TITLE="AP - adjectival phrase">AP</A> <CODE>-></CODE> <A HREF="#AP" TITLE="AP - adjectival phrase">AP</A> <CODE>-></CODE> <A HREF="#ListAP">ListAP</A></TD>-<TD><I>list of two</I></TD>-</TR>-<TR>-<TD><CODE>mkListAP</CODE></TD>-<TD><A HREF="#AP" TITLE="AP - adjectival phrase">AP</A> <CODE>-></CODE> <A HREF="#ListAP">ListAP</A> <CODE>-></CODE> <A HREF="#ListAP">ListAP</A></TD>-<TD><I>list of more</I></TD>-</TR>-</TABLE>--<A NAME="ListAdv"></A>-<H2>ListAdv</H2>--<TABLE BORDER="1" CELLPADDING="4">-<TR>-<TH>Function</TH>-<TH>Type</TH>-<TH COLSPAN="2">Example</TH>-</TR>-<TR>-<TD><CODE>mkListAdv</CODE></TD>-<TD><A HREF="#Adv" TITLE="Adv - verb-phrase-modifying adverb">Adv</A> <CODE>-></CODE> <A HREF="#Adv" TITLE="Adv - verb-phrase-modifying adverb">Adv</A> <CODE>-></CODE> <A HREF="#ListAdv">ListAdv</A></TD>-<TD><I>list of two</I></TD>-</TR>-<TR>-<TD><CODE>mkListAdv</CODE></TD>-<TD><A HREF="#Adv" TITLE="Adv - verb-phrase-modifying adverb">Adv</A> <CODE>-></CODE> <A HREF="#ListAdv">ListAdv</A> <CODE>-></CODE> <A HREF="#ListAdv">ListAdv</A></TD>-<TD><I>list of more</I></TD>-</TR>-</TABLE>--<A NAME="ListNP"></A>-<H2>ListNP</H2>--<TABLE BORDER="1" CELLPADDING="4">-<TR>-<TH>Function</TH>-<TH>Type</TH>-<TH COLSPAN="2">Example</TH>-</TR>-<TR>-<TD><CODE>mkListNP</CODE></TD>-<TD><A HREF="#NP" TITLE="NP - noun phrase (subject or object)">NP</A> <CODE>-></CODE> <A HREF="#NP" TITLE="NP - noun phrase (subject or object)">NP</A> <CODE>-></CODE> <A HREF="#ListNP">ListNP</A></TD>-<TD><I>list of two</I></TD>-</TR>-<TR>-<TD><CODE>mkListNP</CODE></TD>-<TD><A HREF="#NP" TITLE="NP - noun phrase (subject or object)">NP</A> <CODE>-></CODE> <A HREF="#ListNP">ListNP</A> <CODE>-></CODE> <A HREF="#ListNP">ListNP</A></TD>-<TD><I>list of more</I></TD>-</TR>-</TABLE>--<A NAME="ListRS"></A>-<H2>ListRS</H2>--<TABLE BORDER="1" CELLPADDING="4">-<TR>-<TH>Function</TH>-<TH>Type</TH>-<TH COLSPAN="2">Example</TH>-</TR>-<TR>-<TD><CODE>mkListRS</CODE></TD>-<TD><A HREF="#RS" TITLE="RS - relative">RS</A> <CODE>-></CODE> <A HREF="#RS" TITLE="RS - relative">RS</A> <CODE>-></CODE> <A HREF="#ListRS">ListRS</A></TD>-<TD><I>list of two</I></TD>-</TR>-<TR>-<TD><CODE>mkListRS</CODE></TD>-<TD><A HREF="#RS" TITLE="RS - relative">RS</A> <CODE>-></CODE> <A HREF="#ListRS">ListRS</A> <CODE>-></CODE> <A HREF="#ListRS">ListRS</A></TD>-<TD><I>list of more</I></TD>-</TR>-</TABLE>--<A NAME="ListS"></A>-<H2>ListS</H2>--<TABLE BORDER="1" CELLPADDING="4">-<TR>-<TH>Function</TH>-<TH>Type</TH>-<TH COLSPAN="2">Example</TH>-</TR>-<TR>-<TD><CODE>mkListS</CODE></TD>-<TD><A HREF="#S" TITLE="S - declarative sentence">S</A> <CODE>-></CODE> <A HREF="#S" TITLE="S - declarative sentence">S</A> <CODE>-></CODE> <A HREF="#ListS">ListS</A></TD>-<TD><I>list of two</I></TD>-</TR>-<TR>-<TD><CODE>mkListS</CODE></TD>-<TD><A HREF="#S" TITLE="S - declarative sentence">S</A> <CODE>-></CODE> <A HREF="#ListS">ListS</A> <CODE>-></CODE> <A HREF="#ListS">ListS</A></TD>-<TD><I>list of more</I></TD>-</TR>-</TABLE>--<A NAME="N"></A>-<H2>N - common noun</H2>--<P>-Lexical category, constructors given in-<A HREF="#RParadigms">lexical paradigms</A>.-</P>--<A NAME="N2"></A>-<H2>N2 - relational noun</H2>--<P>-Lexical category, constructors given in-<A HREF="#RParadigms">lexical paradigms</A>.-</P>--<A NAME="N3"></A>-<H2>N3 - three-place relational noun</H2>--<P>-Lexical category, constructors given in-<A HREF="#RParadigms">lexical paradigms</A>.-</P>--<A NAME="NP"></A>-<H2>NP - noun phrase (subject or object)</H2>--<TABLE BORDER="1" CELLPADDING="4">-<TR>-<TH>Function</TH>-<TH>Type</TH>-<TH COLSPAN="2">Example</TH>-</TR>-<TR>-<TD><CODE>everybody_NP</CODE></TD>-<TD><A HREF="#NP" TITLE="NP - noun phrase (subject or object)">NP</A></TD>-<TD><div class=reveal> <I>everybody</I> <div class=popup> <ul> <li>API: <CODE>mkUtt everybody_NP</CODE> <li>Afr: <I>almal</I> <li>Bul: <I>всеки</I> <li>Cat: <I>tothom</I> <li>Dan: <I>alle</I> <li>Dut: <I>alle</I> <li>Eng: <I>everybody</I> <li>Fin: <I>jokainen</I> <li>Fre: <I>tout le monde</I> <li>Ger: <I>jeder</I> <li>Ita: <I>tutti</I> <li>Nep: <I>सवौ जाना</I> <li>Nor: <I>alle</I> <li>Pes: <I>*</I> <li>Pnb: <I>ہر كوی</I> <li>Pol: <I>wszyscy</I> <li>Ron: <I>toţi</I> <li>Rus: <I>всех</I> <li>Spa: <I>todos</I> <li>Swe: <I>alla</I> <li>Urd: <I>ہر كوی</I> </ul> </div> </div></TD>-</TR>-<TR>-<TD><CODE>everything_NP</CODE></TD>-<TD><A HREF="#NP" TITLE="NP - noun phrase (subject or object)">NP</A></TD>-<TD><div class=reveal> <I>everything</I> <div class=popup> <ul> <li>API: <CODE>mkUtt everything_NP</CODE> <li>Afr: <I>alles</I> <li>Bul: <I>всичко</I> <li>Cat: <I>tot</I> <li>Dan: <I>alt</I> <li>Dut: <I>alles</I> <li>Eng: <I>everything</I> <li>Fin: <I>kaikki</I> <li>Fre: <I>tout</I> <li>Ger: <I>alles</I> <li>Ita: <I>tutto</I> <li>Nep: <I>हारेक कुरा</I> <li>Nor: <I>alt</I> <li>Pes: <I>*</I> <li>Pnb: <I>ہر شے</I> <li>Pol: <I>wszystko</I> <li>Ron: <I>// <li>Rus: //всё</I> <li>Spa: <I>todo</I> <li>Swe: <I>allting</I> <li>Urd: <I>ہر چیز</I> </ul> </div> </div></TD>-</TR>-<TR>-<TD><CODE>he_NP</CODE></TD>-<TD><A HREF="#NP" TITLE="NP - noun phrase (subject or object)">NP</A></TD>-<TD><div class=reveal> <I>he</I> <div class=popup> <ul> <li>API: <CODE>mkUtt he_NP</CODE> <li>Afr: <I>hy</I> <li>Bul: <I>той</I> <li>Cat: <I>ell</I> <li>Dan: <I>ham</I> <li>Dut: <I>hij</I> <li>Eng: <I>he</I> <li>Fin: <I>hän</I> <li>Fre: <I>lui</I> <li>Ger: <I>er</I> <li>Ita: <I>lui</I> <li>Nep: <I>उ</I> <li>Nor: <I>ham</I> <li>Pes: <I>او</I> <li>Pnb: <I>او</I> <li>Pol: <I>on</I> <li>Ron: <I>el</I> <li>Rus: <I>его</I> <li>Spa: <I>él</I> <li>Swe: <I>honom</I> <li>Urd: <I>وہ</I> </ul> </div> </div></TD>-</TR>-<TR>-<TD><CODE>i_NP</CODE></TD>-<TD><A HREF="#NP" TITLE="NP - noun phrase (subject or object)">NP</A></TD>-<TD><div class=reveal> <I>I</I> <div class=popup> <ul> <li>API: <CODE>mkUtt i_NP</CODE> <li>Afr: <I>ek</I> <li>Bul: <I>аз</I> <li>Cat: <I>mi</I> <li>Dan: <I>mig</I> <li>Dut: <I>ik</I> <li>Eng: <I>I</I> <li>Fin: <I>minä</I> <li>Fre: <I>moi</I> <li>Ger: <I>ich</I> <li>Ita: <I>me</I> <li>Nep: <I>म</I> <li>Nor: <I>meg</I> <li>Pes: <I>من</I> <li>Pnb: <I>میں</I> <li>Pol: <I>ja</I> <li>Ron: <I>eu</I> <li>Rus: <I>меня</I> <li>Spa: <I>mí</I> <li>Swe: <I>mig</I> <li>Urd: <I>میں</I> </ul> </div> </div></TD>-</TR>-<TR>-<TD><CODE>it_NP</CODE></TD>-<TD><A HREF="#NP" TITLE="NP - noun phrase (subject or object)">NP</A></TD>-<TD><div class=reveal> <I>it</I> <div class=popup> <ul> <li>API: <CODE>mkUtt it_NP</CODE> <li>Afr: <I>dit</I> <li>Bul: <I>то</I> <li>Cat: <I>ell</I> <li>Dan: <I>det</I> <li>Dut: <I>het</I> <li>Eng: <I>it</I> <li>Fin: <I>se</I> <li>Fre: <I>lui</I> <li>Ger: <I>es</I> <li>Ita: <I>lui</I> <li>Nep: <I>यो</I> <li>Nor: <I>det</I> <li>Pes: <I>آن</I> <li>Pnb: <I>اے</I> <li>Pol: <I>ono</I> <li>Ron: <I>''</I> <li>Rus: <I>его</I> <li>Spa: <I>él</I> <li>Swe: <I>det</I> <li>Urd: <I>یہ</I> </ul> </div> </div></TD>-</TR>-<TR>-<TD><CODE>mkNP</CODE></TD>-<TD><A 'HREF="#Quant" TITLE="Quant - quantifier ('nucleus' of Det)"'>Quant</A> <CODE>-></CODE> <A HREF="#N" TITLE="N - common noun">N</A> <CODE>-></CODE> <A HREF="#NP" TITLE="NP - noun phrase (subject or object)">NP</A></TD>-<TD><div class=reveal> <I>this man</I> <div class=popup> <ul> <li>API: <CODE>mkUtt (mkNP this_Quant man_N)</CODE> <li>Afr: <I>hierdie man</I> <li>Bul: <I>този мъж</I> <li>Cat: <I>aquest home</I> <li>Dan: <I>denne mand</I> <li>Dut: <I>deze man</I> <li>Eng: <I>this man</I> <li>Fin: <I>tämä mies</I> <li>Fre: <I>cet homme</I> <li>Ger: <I>dieser Mann</I> <li>Ita: <I>questo uomo</I> <li>Nep: <I>यो मान्छे</I> <li>Nor: <I>denne mannen</I> <li>Pes: <I>این مرد</I> <li>Pnb: <I>اے بندہ</I> <li>Pol: <I>ten mężczyzna</I> <li>Ron: <I>acest om</I> <li>Rus: <I>этот человек</I> <li>Spa: <I>este hombre</I> <li>Swe: <I>den här mannen</I> <li>Urd: <I>یہ آدمی</I> </ul> </div> </div></TD>-</TR>-<TR>-<TD><CODE>mkNP</CODE></TD>-<TD><A 'HREF="#Quant" TITLE="Quant - quantifier ('nucleus' of Det)"'>Quant</A> <CODE>-></CODE> <A HREF="#CN" TITLE="CN - common noun (without determiner)">CN</A> <CODE>-></CODE> <A HREF="#NP" TITLE="NP - noun phrase (subject or object)">NP</A></TD>-<TD><div class=reveal> <I>this old man</I> <div class=popup> <ul> <li>API: <CODE>mkUtt (mkNP this_Quant (mkCN old_A man_N))</CODE> <li>Afr: <I>hierdie ou man</I> <li>Bul: <I>този стар мъж</I> <li>Cat: <I>aquest home vell</I> <li>Dan: <I>denne gamle mand</I> <li>Dut: <I>deze oude man</I> <li>Eng: <I>this old man</I> <li>Fin: <I>tämä vanha mies</I> <li>Fre: <I>ce vieux homme</I> <li>Ger: <I>dieser alte Mann</I> <li>Ita: <I>questo vecchio uomo</I> <li>Nep: <I>यो बुढो मान्छे</I> <li>Nor: <I>denne gamle mannen</I> <li>Pes: <I>این مرد پیر</I> <li>Pnb: <I>اے بوڈا بندہ</I> <li>Pol: <I>ten stary mężczyzna</I> <li>Ron: <I>acest om vechi</I> <li>Rus: <I>этот старый человек</I> <li>Spa: <I>este viejo hombre</I> <li>Swe: <I>den här gamla mannen</I> <li>Urd: <I>یہ بوڑھا آدمی</I> </ul> </div> </div></TD>-</TR>-<TR>-<TD><CODE>mkNP</CODE></TD>-<TD><A 'HREF="#Quant" TITLE="Quant - quantifier ('nucleus' of Det)"'>Quant</A> <CODE>-></CODE> <A HREF="#Num" TITLE="Num - number determining element">Num</A> <CODE>-></CODE> <A HREF="#CN" TITLE="CN - common noun (without determiner)">CN</A> <CODE>-></CODE> <A HREF="#NP" TITLE="NP - noun phrase (subject or object)">NP</A></TD>-<TD><div class=reveal> <I>these five old men</I> <div class=popup> <ul> <li>API: <CODE>mkUtt (mkNP this_Quant (mkNum (mkNumeral n5_Unit)) (mkCN old_A man_N))</CODE> <li>Afr: <I>hierdie vyf ou mans</I> <li>Bul: <I>тези петима стари мъже</I> <li>Cat: <I>aquests cinc homes vells</I> <li>Dan: <I>disse fem gamle mænd</I> <li>Dut: <I>deze vijf oude mannen</I> <li>Eng: <I>these five old men</I> <li>Fin: <I>nämä viisi vanhaa miestä</I> <li>Fre: <I>ces cinq vieux hommes</I> <li>Ger: <I>diese fünf alten Männer</I> <li>Ita: <I>questi cinque vecchi uomini</I> <li>Nep: <I>यी पाँच बुढा मान्छेहरु</I> <li>Nor: <I>disse fem gamle mennen</I> <li>Pes: <I>این پنج مرد پیر</I> <li>Pnb: <I>اے پنج بوڈے بندے</I> <li>Pol: <I>tych pięciu starych mężczyzn</I> <li>Ron: <I>aceşti cinci oameni vechi</I> <li>Rus: <I>эти пять старые человеки</I> <li>Spa: <I>estos cinco viejos hombres</I> <li>Swe: <I>de här fem gamla männen</I> <li>Urd: <I>یہ پانچ بوڑھے آدمی</I> </ul> </div> </div></TD>-</TR>-<TR>-<TD><CODE>mkNP</CODE></TD>-<TD><A 'HREF="#Quant" TITLE="Quant - quantifier ('nucleus' of Det)"'>Quant</A> <CODE>-></CODE> <A HREF="#Num" TITLE="Num - number determining element">Num</A> <CODE>-></CODE> <A HREF="#N" TITLE="N - common noun">N</A> <CODE>-></CODE> <A HREF="#NP" TITLE="NP - noun phrase (subject or object)">NP</A></TD>-<TD><div class=reveal> <I>these five men</I> <div class=popup> <ul> <li>API: <CODE>mkUtt (mkNP this_Quant (mkNum (mkNumeral n5_Unit)) man_N)</CODE> <li>Afr: <I>hierdie vyf mans</I> <li>Bul: <I>тези петима мъже</I> <li>Cat: <I>aquests cinc homes</I> <li>Dan: <I>disse fem mænd</I> <li>Dut: <I>deze vijf mannen</I> <li>Eng: <I>these five men</I> <li>Fin: <I>nämä viisi miestä</I> <li>Fre: <I>ces cinq hommes</I> <li>Ger: <I>diese fünf Männer</I> <li>Ita: <I>questi cinque uomini</I> <li>Nep: <I>यी पाँच मान्छेहरु</I> <li>Nor: <I>disse fem mennen</I> <li>Pes: <I>این پنج مرد</I> <li>Pnb: <I>اے پنج بندے</I> <li>Pol: <I>tych pięciu mężczyzn</I> <li>Ron: <I>aceşti cinci oameni</I> <li>Rus: <I>эти пять человеки</I> <li>Spa: <I>estos cinco hombres</I> <li>Swe: <I>de här fem männen</I> <li>Urd: <I>یہ پانچ آدمی</I> </ul> </div> </div></TD>-</TR>-<TR>-<TD><CODE>mkNP</CODE></TD>-<TD><A HREF="#Det" TITLE="Det - determiner phrase">Det</A> <CODE>-></CODE> <A HREF="#CN" TITLE="CN - common noun (without determiner)">CN</A> <CODE>-></CODE> <A HREF="#NP" TITLE="NP - noun phrase (subject or object)">NP</A></TD>-<TD><div class=reveal> <I>the five old men</I> <div class=popup> <ul> <li>API: <CODE>mkUtt (mkNP (mkDet the_Quant (mkNum (mkNumeral n5_Unit))) (mkCN old_A man_N))</CODE> <li>Afr: <I>die vyf ou mans</I> <li>Bul: <I>петимата стари мъже</I> <li>Cat: <I>els cinc homes vells</I> <li>Dan: <I>de fem gamle mænd</I> <li>Dut: <I>de vijf oude mannen</I> <li>Eng: <I>the five old men</I> <li>Fin: <I>viisi vanhaa miestä</I> <li>Fre: <I>les cinq vieux hommes</I> <li>Ger: <I>die fünf alten Männer</I> <li>Ita: <I>i cinque vecchi uomini</I> <li>Nep: <I>पाँच बुढा मान्छेहरु</I> <li>Nor: <I>de fem gamle mennen</I> <li>Pes: <I>پنج مرد پیر</I> <li>Pnb: <I>پنج بوڈے بندے</I> <li>Pol: <I>pięciu starych mężczyzn</I> <li>Ron: <I>cei cinci oameni vechi</I> <li>Rus: <I>пять старые человеки</I> <li>Spa: <I>los cinco viejos hombres</I> <li>Swe: <I>de fem gamla männen</I> <li>Urd: <I>پانچ بوڑھے آدمی</I> </ul> </div> </div></TD>-</TR>-<TR>-<TD><CODE>mkNP</CODE></TD>-<TD><A HREF="#Det" TITLE="Det - determiner phrase">Det</A> <CODE>-></CODE> <A HREF="#N" TITLE="N - common noun">N</A> <CODE>-></CODE> <A HREF="#NP" TITLE="NP - noun phrase (subject or object)">NP</A></TD>-<TD><div class=reveal> <I>the five men</I> <div class=popup> <ul> <li>API: <CODE>mkUtt (mkNP (mkDet the_Quant (mkNum (mkNumeral n5_Unit))) man_N)</CODE> <li>Afr: <I>die vyf mans</I> <li>Bul: <I>петимата мъже</I> <li>Cat: <I>els cinc homes</I> <li>Dan: <I>de fem mændene</I> <li>Dut: <I>de vijf mannen</I> <li>Eng: <I>the five men</I> <li>Fin: <I>viisi miestä</I> <li>Fre: <I>les cinq hommes</I> <li>Ger: <I>die fünf Männer</I> <li>Ita: <I>i cinque uomini</I> <li>Nep: <I>पाँच मान्छेहरु</I> <li>Nor: <I>de fem mennen</I> <li>Pes: <I>پنج مرد</I> <li>Pnb: <I>پنج بندے</I> <li>Pol: <I>pięciu mężczyzn</I> <li>Ron: <I>cei cinci oameni</I> <li>Rus: <I>пять человеки</I> <li>Spa: <I>los cinco hombres</I> <li>Swe: <I>de fem männen</I> <li>Urd: <I>پانچ آدمی</I> </ul> </div> </div></TD>-</TR>-<TR>-<TD><CODE>mkNP</CODE></TD>-<TD><A HREF="#Numeral" TITLE="Numeral - cardinal or ordinal in words">Numeral</A> <CODE>-></CODE> <A HREF="#CN" TITLE="CN - common noun (without determiner)">CN</A> <CODE>-></CODE> <A HREF="#NP" TITLE="NP - noun phrase (subject or object)">NP</A></TD>-<TD><div class=reveal> <I>fifty old men</I> <div class=popup> <ul> <li>API: <CODE>mkUtt (mkNP (mkNumeral (tenfoldSub100 n5_Unit)) (mkCN old_A man_N))</CODE> <li>Afr: <I>vyftig ou mans</I> <li>Bul: <I>петдесетима стари мъже</I> <li>Cat: <I>cinquanta homes vells</I> <li>Dan: <I>halvtreds gamle mænd</I> <li>Dut: <I>vijftig oude mannen</I> <li>Eng: <I>fifty old men</I> <li>Fin: <I>viisikymmentä vanhaa miestä</I> <li>Fre: <I>cinquante vieux hommes</I> <li>Ger: <I>fünfzig alte Männer</I> <li>Ita: <I>cinquanta vecchi uomini</I> <li>Nep: <I>पचास बुढा मान्छेहरु</I> <li>Nor: <I>femti gamle menn</I> <li>Pes: <I>یک پنجاه مرد پیر</I> <li>Pnb: <I>پنجاہ بوڈے بندے</I> <li>Pol: <I>pięćdziesięciu starych mężczyzn</I> <li>Ron: <I>cincizeci de oameni vechi</I> <li>Rus: <I>пятьдесят старые человеки</I> <li>Spa: <I>cinquenta viejos hombres</I> <li>Swe: <I>femtio gamla män</I> <li>Urd: <I>پچاس بوڑھے آدمی</I> </ul> </div> </div></TD>-</TR>-<TR>-<TD><CODE>mkNP</CODE></TD>-<TD><A HREF="#Numeral" TITLE="Numeral - cardinal or ordinal in words">Numeral</A> <CODE>-></CODE> <A HREF="#N" TITLE="N - common noun">N</A> <CODE>-></CODE> <A HREF="#NP" TITLE="NP - noun phrase (subject or object)">NP</A></TD>-<TD><div class=reveal> <I>fifty men</I> <div class=popup> <ul> <li>API: <CODE>mkUtt (mkNP (mkNumeral (tenfoldSub100 n5_Unit)) man_N)</CODE> <li>Afr: <I>vyftig mans</I> <li>Bul: <I>петдесетима мъже</I> <li>Cat: <I>cinquanta homes</I> <li>Dan: <I>halvtreds mænd</I> <li>Dut: <I>vijftig mannen</I> <li>Eng: <I>fifty men</I> <li>Fin: <I>viisikymmentä miestä</I> <li>Fre: <I>cinquante hommes</I> <li>Ger: <I>fünfzig Männer</I> <li>Ita: <I>cinquanta uomini</I> <li>Nep: <I>पचास मान्छेहरु</I> <li>Nor: <I>femti menn</I> <li>Pes: <I>یک پنجاه مرد</I> <li>Pnb: <I>پنجاہ بندے</I> <li>Pol: <I>pięćdziesięciu mężczyzn</I> <li>Ron: <I>cincizeci de oameni</I> <li>Rus: <I>пятьдесят человеки</I> <li>Spa: <I>cinquenta hombres</I> <li>Swe: <I>femtio män</I> <li>Urd: <I>پچاس آدمی</I> </ul> </div> </div></TD>-</TR>-<TR>-<TD><CODE>mkNP</CODE></TD>-<TD><A HREF="#Digits" TITLE="Digits - cardinal or ordinal in digits">Digits</A> <CODE>-></CODE> <A HREF="#CN" TITLE="CN - common noun (without determiner)">CN</A> <CODE>-></CODE> <A HREF="#NP" TITLE="NP - noun phrase (subject or object)">NP</A></TD>-<TD><div class=reveal> <I>5 1 old men</I> <div class=popup> <ul> <li>API: <CODE>mkUtt (mkNP (mkDigits n5_Dig (mkDigits n1_Dig)) (mkCN old_A man_N))</CODE> <li>Afr: <I>5 1 ou mans</I> <li>Bul: <I>5 1 стари мъже</I> <li>Cat: <I>5 1 homes vells</I> <li>Dan: <I>5 1 gamle mænd</I> <li>Dut: <I>5 1 oude mannen</I> <li>Eng: <I>5 1 old men</I> <li>Fin: <I>5 1 vanhaa miestä</I> <li>Fre: <I>5 1 vieux hommes</I> <li>Ger: <I>5 1 alte Männer</I> <li>Ita: <I>5 1 vecchi uomini</I> <li>Nep: <I>५१ बुढा मान्छेहरु</I> <li>Nor: <I>5 1 gamle menn</I> <li>Pes: <I>یک 5 1 مرد پیر</I> <li>Pnb: <I>۱۵ بوڈے بندے</I> <li>Pol: <I>5 1 starzy mężczyźni</I> <li>Ron: <I>5 1 de oameni vechi</I> <li>Rus: <I>5 1 старые человеки</I> <li>Spa: <I>5 1 viejos hombres</I> <li>Swe: <I>5 1 gamla män</I> <li>Urd: <I>۱۵ بوڑھے آدمی</I> </ul> </div> </div></TD>-</TR>-<TR>-<TD><CODE>mkNP</CODE></TD>-<TD><A HREF="#Digits" TITLE="Digits - cardinal or ordinal in digits">Digits</A> <CODE>-></CODE> <A HREF="#N" TITLE="N - common noun">N</A> <CODE>-></CODE> <A HREF="#NP" TITLE="NP - noun phrase (subject or object)">NP</A></TD>-<TD><div class=reveal> <I>5 1 men</I> <div class=popup> <ul> <li>API: <CODE>mkUtt (mkNP (mkDigits n5_Dig (mkDigits n1_Dig)) man_N)</CODE> <li>Afr: <I>5 1 mans</I> <li>Bul: <I>5 1 мъже</I> <li>Cat: <I>5 1 homes</I> <li>Dan: <I>5 1 mænd</I> <li>Dut: <I>5 1 mannen</I> <li>Eng: <I>5 1 men</I> <li>Fin: <I>5 1 miestä</I> <li>Fre: <I>5 1 hommes</I> <li>Ger: <I>5 1 Männer</I> <li>Ita: <I>5 1 uomini</I> <li>Nep: <I>५१ मान्छेहरु</I> <li>Nor: <I>5 1 menn</I> <li>Pes: <I>یک 5 1 مرد</I> <li>Pnb: <I>۱۵ بندے</I> <li>Pol: <I>5 1 mężczyźni</I> <li>Ron: <I>5 1 de oameni</I> <li>Rus: <I>5 1 человеки</I> <li>Spa: <I>5 1 hombres</I> <li>Swe: <I>5 1 män</I> <li>Urd: <I>۱۵ آدمی</I> </ul> </div> </div></TD>-</TR>-<TR>-<TD><CODE>mkNP</CODE></TD>-<TD><A HREF="#Card" TITLE="Card - cardinal number">Card</A> <CODE>-></CODE> <A HREF="#CN" TITLE="CN - common noun (without determiner)">CN</A> <CODE>-></CODE> <A HREF="#NP" TITLE="NP - noun phrase (subject or object)">NP</A></TD>-<TD><I>forty-five old men</I></TD>-</TR>-<TR>-<TD><CODE>mkNP</CODE></TD>-<TD><A HREF="#Card" TITLE="Card - cardinal number">Card</A> <CODE>-></CODE> <A HREF="#N" TITLE="N - common noun">N</A> <CODE>-></CODE> <A HREF="#NP" TITLE="NP - noun phrase (subject or object)">NP</A></TD>-<TD><I>forty-five men</I></TD>-</TR>-<TR>-<TD><CODE>mkNP</CODE></TD>-<TD><A HREF="#Pron" TITLE="Pron - personal pronoun">Pron</A> <CODE>-></CODE> <A HREF="#CN" TITLE="CN - common noun (without determiner)">CN</A> <CODE>-></CODE> <A HREF="#NP" TITLE="NP - noun phrase (subject or object)">NP</A></TD>-<TD><div class=reveal> <I>my old man</I> <div class=popup> <ul> <li>API: <CODE>mkUtt (mkNP i_Pron (mkCN old_A man_N))</CODE> <li>Afr: <I>my oud man</I> <li>Bul: <I>моят стар мъж</I> <li>Cat: <I>el meu home vell</I> <li>Dan: <I>min gamle mand</I> <li>Dut: <I>mijn oude man</I> <li>Eng: <I>my old man</I> <li>Fin: <I>minun vanha mieheni</I> <li>Fre: <I>mon vieux homme</I> <li>Ger: <I>mein alter Mann</I> <li>Ita: <I>il mio vecchio uomo</I> <li>Nep: <I>मेरो बुढो मान्छे</I> <li>Nor: <I>min gamle mann</I> <li>Pes: <I>مرد پیر من</I> <li>Pnb: <I>میرا بوڈا بندہ</I> <li>Pol: <I>mój stary mężczyzna</I> <li>Ron: <I>omul vechi meu</I> <li>Rus: <I>моего старый человек</I> <li>Spa: <I>mi viejo hombre</I> <li>Swe: <I>min gamla man</I> <li>Urd: <I>میرا بوڑھا آدمی</I> </ul> </div> </div></TD>-</TR>-<TR>-<TD><CODE>mkNP</CODE></TD>-<TD><A HREF="#Pron" TITLE="Pron - personal pronoun">Pron</A> <CODE>-></CODE> <A HREF="#N" TITLE="N - common noun">N</A> <CODE>-></CODE> <A HREF="#NP" TITLE="NP - noun phrase (subject or object)">NP</A></TD>-<TD><div class=reveal> <I>my man</I> <div class=popup> <ul> <li>API: <CODE>mkUtt (mkNP i_Pron man_N)</CODE> <li>Afr: <I>my man</I> <li>Bul: <I>моят мъж</I> <li>Cat: <I>el meu home</I> <li>Dan: <I>min mand</I> <li>Dut: <I>mijn man</I> <li>Eng: <I>my man</I> <li>Fin: <I>minun mieheni</I> <li>Fre: <I>mon homme</I> <li>Ger: <I>mein Mann</I> <li>Ita: <I>il mio uomo</I> <li>Nep: <I>मेरो मान्छे</I> <li>Nor: <I>min mann</I> <li>Pes: <I>مرد من</I> <li>Pnb: <I>میرا بندہ</I> <li>Pol: <I>mój mężczyzna</I> <li>Ron: <I>omul meu</I> <li>Rus: <I>моего человек</I> <li>Spa: <I>mi hombre</I> <li>Swe: <I>min man</I> <li>Urd: <I>میرا آدمی</I> </ul> </div> </div></TD>-</TR>-<TR>-<TD><CODE>mkNP</CODE></TD>-<TD><A HREF="#PN" TITLE="PN - proper name">PN</A> <CODE>-></CODE> <A HREF="#NP" TITLE="NP - noun phrase (subject or object)">NP</A></TD>-<TD><div class=reveal> <I>Paris</I> <div class=popup> <ul> <li>API: <CODE>mkUtt (mkNP paris_PN)</CODE> <li>Afr: <I>Parys</I> <li>Bul: <I>Париж</I> <li>Cat: <I>Paris</I> <li>Dan: <I>Paris</I> <li>Dut: <I>Parijs</I> <li>Eng: <I>Paris</I> <li>Fin: <I>Pariisi</I> <li>Fre: <I>Paris</I> <li>Ger: <I>Paris</I> <li>Ita: <I>Parigi</I> <li>Nep: <I>पेरिस</I> <li>Nor: <I>Paris</I> <li>Pes: <I>پاریس</I> <li>Pnb: <I>پیرس</I> <li>Pol: <I>Paryż</I> <li>Ron: <I>Paris</I> <li>Rus: <I>Париж</I> <li>Spa: <I>Paris</I> <li>Swe: <I>Paris</I> <li>Urd: <I>پیرس</I> </ul> </div> </div></TD>-</TR>-<TR>-<TD><CODE>mkNP</CODE></TD>-<TD><A HREF="#Pron" TITLE="Pron - personal pronoun">Pron</A> <CODE>-></CODE> <A HREF="#NP" TITLE="NP - noun phrase (subject or object)">NP</A></TD>-<TD><div class=reveal> <I>we</I> <div class=popup> <ul> <li>API: <CODE>mkUtt (mkNP we_Pron)</CODE> <li>Afr: <I>ons</I> <li>Bul: <I>ние</I> <li>Cat: <I>nosaltres</I> <li>Dan: <I>os</I> <li>Dut: <I>we</I> <li>Eng: <I>we</I> <li>Fin: <I>me</I> <li>Fre: <I>nous</I> <li>Ger: <I>wir</I> <li>Ita: <I>noi</I> <li>Nep: <I>हामीहरु</I> <li>Nor: <I>oss</I> <li>Pes: <I>ما</I> <li>Pnb: <I>اسی</I> <li>Pol: <I>my</I> <li>Ron: <I>noi</I> <li>Rus: <I>нас</I> <li>Spa: <I>nosotros</I> <li>Swe: <I>oss</I> <li>Urd: <I>ہم</I> </ul> </div> </div></TD>-</TR>-<TR>-<TD><CODE>mkNP</CODE></TD>-<TD><A 'HREF="#Quant" TITLE="Quant - quantifier ('nucleus' of Det)"'>Quant</A> <CODE>-></CODE> <A HREF="#NP" TITLE="NP - noun phrase (subject or object)">NP</A></TD>-<TD><div class=reveal> <I>this</I> <div class=popup> <ul> <li>API: <CODE>mkUtt (mkNP this_Quant)</CODE> <li>Afr: <I>hierdie</I> <li>Bul: <I>това</I> <li>Cat: <I>aquest</I> <li>Dan: <I>dette</I> <li>Dut: <I>dit</I> <li>Eng: <I>this</I> <li>Fin: <I>tämä</I> <li>Fre: <I>celui-ci</I> <li>Ger: <I>dieses</I> <li>Ita: <I>questo</I> <li>Nep: <I>यो</I> <li>Nor: <I>dette</I> <li>Pes: <I>این</I> <li>Pnb: <I>اے</I> <li>Pol: <I>ten</I> <li>Ron: <I>acesta</I> <li>Rus: <I>это</I> <li>Spa: <I>este</I> <li>Swe: <I>det här</I> <li>Urd: <I>یہ</I> </ul> </div> </div></TD>-</TR>-<TR>-<TD><CODE>mkNP</CODE></TD>-<TD><A 'HREF="#Quant" TITLE="Quant - quantifier ('nucleus' of Det)"'>Quant</A> <CODE>-></CODE> <A HREF="#Num" TITLE="Num - number determining element">Num</A> <CODE>-></CODE> <A HREF="#NP" TITLE="NP - noun phrase (subject or object)">NP</A></TD>-<TD><div class=reveal> <I>these five</I> <div class=popup> <ul> <li>API: <CODE>mkUtt (mkNP this_Quant (mkNum (mkNumeral n5_Unit)))</CODE> <li>Afr: <I>hierdie vyf</I> <li>Bul: <I>тези пет</I> <li>Cat: <I>aquests cinc</I> <li>Dan: <I>disse fem</I> <li>Dut: <I>deze vijf</I> <li>Eng: <I>these five</I> <li>Fin: <I>nämä viisi</I> <li>Fre: <I>ces cinq</I> <li>Ger: <I>diese fünf</I> <li>Ita: <I>questi cinque</I> <li>Nep: <I>यी पाँच</I> <li>Nor: <I>disse fem</I> <li>Pes: <I>این پنج</I> <li>Pnb: <I>اے پنج</I> <li>Pol: <I>tych pięciu</I> <li>Ron: <I>aceştia cinci</I> <li>Rus: <I>эти пять</I> <li>Spa: <I>estos cinco</I> <li>Swe: <I>de här fem</I> <li>Urd: <I>یہ پانچ</I> </ul> </div> </div></TD>-</TR>-<TR>-<TD><CODE>mkNP</CODE></TD>-<TD><A HREF="#Det" TITLE="Det - determiner phrase">Det</A> <CODE>-></CODE> <A HREF="#NP" TITLE="NP - noun phrase (subject or object)">NP</A></TD>-<TD><div class=reveal> <I>the five best</I> <div class=popup> <ul> <li>API: <CODE>mkUtt (mkNP (mkDet the_Quant (mkNum (mkNumeral n5_Unit)) (mkOrd good_A)))</CODE> <li>Afr: <I>hulle vyf beste</I> <li>Bul: <I>петте най - добри</I> <li>Cat: <I>els cinc millors</I> <li>Dan: <I>de fem bedste</I> <li>Dut: <I>die vijf beste</I> <li>Eng: <I>the five best</I> <li>Fin: <I>ne viisi parhaimmat</I> <li>Fre: <I>les cinq meilleurs</I> <li>Ger: <I>die fünf besten</I> <li>Ita: <I>i cinque migliori</I> <li>Nep: <I>सबभन्दा राम्रो पाँच</I> <li>Nor: <I>de fem beste</I> <li>Pes: <I>پنج خوب ترین</I> <li>Pnb: <I>پنج اچھا</I> <li>Pol: <I>pięciu najlepszych</I> <li>Ron: <I>cei mai buni cinci</I> <li>Rus: <I>пять хорошие</I> <li>Spa: <I>los cinco mejores</I> <li>Swe: <I>de fem bästa</I> <li>Urd: <I>پانچ سب سے اچھا</I> </ul> </div> </div></TD>-</TR>-<TR>-<TD><CODE>mkNP</CODE></TD>-<TD><A HREF="#CN" TITLE="CN - common noun (without determiner)">CN</A> <CODE>-></CODE> <A HREF="#NP" TITLE="NP - noun phrase (subject or object)">NP</A></TD>-<TD><div class=reveal> <I>old beer</I> <div class=popup> <ul> <li>API: <CODE>mkUtt (mkNP (mkCN old_A beer_N))</CODE> <li>Afr: <I>oud bier</I> <li>Bul: <I>стара бира</I> <li>Cat: <I>cervesa vell</I> <li>Dan: <I>gammelt øl</I> <li>Dut: <I>oud bier</I> <li>Eng: <I>old beer</I> <li>Fin: <I>vanha olut</I> <li>Fre: <I>de la vieille bière</I> <li>Ger: <I>altes Bier</I> <li>Ita: <I>della vecchia birra</I> <li>Nep: <I>बुढो बियर</I> <li>Nor: <I>gammelt øl</I> <li>Pes: <I>آبجوی پیر</I> <li>Pnb: <I>بوڈی شراب</I> <li>Pol: <I>stare piwo</I> <li>Ron: <I>bere veche</I> <li>Rus: <I>старое пиво</I> <li>Spa: <I>vieja cerveza</I> <li>Swe: <I>gammalt öl</I> <li>Urd: <I>بوڑھا بییر</I> </ul> </div> </div></TD>-</TR>-<TR>-<TD><CODE>mkNP</CODE></TD>-<TD><A HREF="#N" TITLE="N - common noun">N</A> <CODE>-></CODE> <A HREF="#NP" TITLE="NP - noun phrase (subject or object)">NP</A></TD>-<TD><div class=reveal> <I>beer</I> <div class=popup> <ul> <li>API: <CODE>mkUtt (mkNP beer_N)</CODE> <li>Afr: <I>bier</I> <li>Bul: <I>бира</I> <li>Cat: <I>cervesa</I> <li>Dan: <I>øl</I> <li>Dut: <I>bier</I> <li>Eng: <I>beer</I> <li>Fin: <I>olut</I> <li>Fre: <I>de la bière</I> <li>Ger: <I>Bier</I> <li>Ita: <I>della birra</I> <li>Nep: <I>बियर</I> <li>Nor: <I>øl</I> <li>Pes: <I>آبجو</I> <li>Pnb: <I>شراب</I> <li>Pol: <I>piwo</I> <li>Ron: <I>bere</I> <li>Rus: <I>пиво</I> <li>Spa: <I>cerveza</I> <li>Swe: <I>öl</I> <li>Urd: <I>بییر</I> </ul> </div> </div></TD>-</TR>-<TR>-<TD><CODE>mkNP</CODE></TD>-<TD><A HREF="#Predet" TITLE="Predet - predeterminer (prefixed Quant)">Predet</A> <CODE>-></CODE> <A HREF="#NP" TITLE="NP - noun phrase (subject or object)">NP</A> <CODE>-></CODE> <A HREF="#NP" TITLE="NP - noun phrase (subject or object)">NP</A></TD>-<TD><div class=reveal> <I>only this woman</I> <div class=popup> <ul> <li>API: <CODE>mkUtt (mkNP only_Predet (mkNP this_Det woman_N))</CODE> <li>Afr: <I>slegs hierdie vrou</I> <li>Bul: <I>само тази жена</I> <li>Cat: <I>nomÈs aquesta dona</I> <li>Dan: <I>kun denne kvinde</I> <li>Dut: <I>slechts deze vrouw</I> <li>Eng: <I>only this woman</I> <li>Fin: <I>vain tämä nainen</I> <li>Fre: <I>seulement cette femme</I> <li>Ger: <I>nur diese Frau</I> <li>Ita: <I>soltanto questa donna</I> <li>Nep: <I>मात्र यो आईमाई</I> <li>Nor: <I>kun denne kvinna</I> <li>Pes: <I>فقط این زن</I> <li>Pnb: <I>صرف اے زنانی</I> <li>Pol: <I>tylko tej kobiety</I> <li>Ron: <I>doar această femeie</I> <li>Rus: <I>единственную эту женщину</I> <li>Spa: <I>solamente esta mujer</I> <li>Swe: <I>bara den här kvinnan</I> <li>Urd: <I>صرف یہ عورت</I> </ul> </div> </div></TD>-</TR>-<TR>-<TD><CODE>mkNP</CODE></TD>-<TD><A HREF="#NP" TITLE="NP - noun phrase (subject or object)">NP</A> <CODE>-></CODE> <A HREF="#V2" TITLE="V2 - two-place verb">V2</A> <CODE>-></CODE> <A HREF="#NP" TITLE="NP - noun phrase (subject or object)">NP</A></TD>-<TD><div class=reveal> <I>the man seen</I> <div class=popup> <ul> <li>API: <CODE>mkUtt (mkNP (mkNP the_Det man_N) see_V2)</CODE> <li>Afr: <I>die man gesien</I> <li>Bul: <I>мъжът видян</I> <li>Cat: <I>l' home vist</I> <li>Dan: <I>manden set</I> <li>Dut: <I>de man gezien</I> <li>Eng: <I>the man seen</I> <li>Fin: <I>mies nähtynä</I> <li>Fre: <I>l' homme vu</I> <li>Ger: <I>der Mann gesehen</I> <li>Ita: <I>l' uomo visto</I> <li>Nep: <I>मान्छे हेर् एको</I> <li>Nor: <I>mannen sett</I> <li>Pes: <I>مرد دیده شده</I> <li>Pnb: <I>ویكھیا بندہ</I> <li>Pol: <I>mężczyzna zobaczony</I> <li>Ron: <I>omul văzut</I> <li>Rus: <I>человек видеть</I> <li>Spa: <I>el hombre visto</I> <li>Swe: <I>mannen sedd</I> <li>Urd: <I>دیكھا آدمی</I> </ul> </div> </div></TD>-</TR>-<TR>-<TD><CODE>mkNP</CODE></TD>-<TD><A HREF="#NP" TITLE="NP - noun phrase (subject or object)">NP</A> <CODE>-></CODE> <A HREF="#Adv" TITLE="Adv - verb-phrase-modifying adverb">Adv</A> <CODE>-></CODE> <A HREF="#NP" TITLE="NP - noun phrase (subject or object)">NP</A></TD>-<TD><div class=reveal> <I>Paris today</I> <div class=popup> <ul> <li>API: <CODE>mkUtt (mkNP (mkNP paris_PN) today_Adv)</CODE> <li>Afr: <I>Parys vandag</I> <li>Bul: <I>Париж днес</I> <li>Cat: <I>Paris avui</I> <li>Dan: <I>Paris idag</I> <li>Dut: <I>Parijs vandaag</I> <li>Eng: <I>Paris today</I> <li>Fin: <I>Pariisi tänään</I> <li>Fre: <I>Paris aujourd'hui</I> <li>Ger: <I>Paris heute</I> <li>Ita: <I>Parigi oggi</I> <li>Nep: <I>पेरिस आज</I> <li>Nor: <I>Paris idag</I> <li>Pes: <I>پاریس امروز</I> <li>Pnb: <I>پیرس اج</I> <li>Pol: <I>Paryż dziś</I> <li>Ron: <I>Paris astăzi</I> <li>Rus: <I>*</I> <li>Spa: <I>Paris hoy</I> <li>Swe: <I>Paris idag</I> <li>Urd: <I>آج پیرس</I> </ul> </div> </div></TD>-</TR>-<TR>-<TD><CODE>mkNP</CODE></TD>-<TD><A HREF="#NP" TITLE="NP - noun phrase (subject or object)">NP</A> <CODE>-></CODE> <A HREF="#RS" TITLE="RS - relative">RS</A> <CODE>-></CODE> <A HREF="#NP" TITLE="NP - noun phrase (subject or object)">NP</A></TD>-<TD><div class=reveal> <I>John , who walks</I> <div class=popup> <ul> <li>API: <CODE>mkUtt (mkNP (mkNP john_PN) (mkRS (mkRCl which_RP (mkVP walk_V))))</CODE> <li>Afr: <I>Jan , wat loop</I> <li>Bul: <I>Джон който ходи</I> <li>Cat: <I>Joan que camina</I> <li>Dan: <I>John , som går</I> <li>Dut: <I>Jan , dat loopt</I> <li>Eng: <I>John , who walks</I> <li>Fin: <I>Jussi , joka kävelee</I> <li>Fre: <I>Jean qui marche</I> <li>Ger: <I>Johann , das geht</I> <li>Ita: <I>Giovanni che cammina</I> <li>Nep: <I>जोन , जो हिड्छ</I> <li>Nor: <I>John , som går</I> <li>Pes: <I>جان که راه می رود</I> <li>Pnb: <I>جان جیڑا چلدا اے</I> <li>Pol: <I>Jan , który spaceruje</I> <li>Ron: <I>Ion care merge</I> <li>Rus: <I>Ивана , которого гуляет</I> <li>Spa: <I>Juan que camina</I> <li>Swe: <I>Johan , som går</I> <li>Urd: <I>جان , جو چلتا ہے</I> </ul> </div> </div></TD>-</TR>-<TR>-<TD><CODE>mkNP</CODE></TD>-<TD><A HREF="#Conj" TITLE="Conj - conjunction">Conj</A> <CODE>-></CODE> <A HREF="#NP" TITLE="NP - noun phrase (subject or object)">NP</A> <CODE>-></CODE> <A HREF="#NP" TITLE="NP - noun phrase (subject or object)">NP</A> <CODE>-></CODE> <A HREF="#NP" TITLE="NP - noun phrase (subject or object)">NP</A></TD>-<TD><div class=reveal> <I>this woman or John</I> <div class=popup> <ul> <li>API: <CODE>mkUtt (mkNP or_Conj (mkNP this_Det woman_N) (mkNP john_PN))</CODE> <li>Afr: <I>hierdie vrou of Jan</I> <li>Bul: <I>тази жена или Джон</I> <li>Cat: <I>aquesta dona o Joan</I> <li>Dan: <I>denne kvinde eller John</I> <li>Dut: <I>deze vrouw of Jan</I> <li>Eng: <I>this woman or John</I> <li>Fin: <I>tämä nainen tai Jussi</I> <li>Fre: <I>cette femme ou Jean</I> <li>Ger: <I>diese Frau oder Johann</I> <li>Ita: <I>questa donna o Giovanni</I> <li>Nep: <I>यो आईमाई अथवा जोन</I> <li>Nor: <I>denne kvinna eller John</I> <li>Pes: <I>این زن یا جان</I> <li>Pnb: <I>اے زنانی یا جان</I> <li>Pol: <I>ta kobieta lub Jan</I> <li>Ron: <I>această femeie sau Ion</I> <li>Rus: <I>эту женщину или Ивана</I> <li>Spa: <I>esta mujer o Juan</I> <li>Swe: <I>den här kvinnan eller Johan</I> <li>Urd: <I>یہ عورت یا جان</I> </ul> </div> </div></TD>-</TR>-<TR>-<TD><CODE>mkNP</CODE></TD>-<TD><A HREF="#Conj" TITLE="Conj - conjunction">Conj</A> <CODE>-></CODE> <A HREF="#ListNP">ListNP</A> <CODE>-></CODE> <A HREF="#NP" TITLE="NP - noun phrase (subject or object)">NP</A></TD>-<TD><div class=reveal> <I>this woman , John or I</I> <div class=popup> <ul> <li>API: <CODE>mkUtt (mkNP or_Conj (mkListNP (mkNP this_Det woman_N) (mkListNP (mkNP john_PN) i_NP)))</CODE> <li>Afr: <I>hierdie vrou , Jan of ek</I> <li>Bul: <I>тази жена , Джон или аз</I> <li>Cat: <I>aquesta dona , Joan o mi</I> <li>Dan: <I>denne kvinde , John eller mig</I> <li>Dut: <I>deze vrouw , Jan of ik</I> <li>Eng: <I>this woman , John or I</I> <li>Fin: <I>tämä nainen , Jussi tai minä</I> <li>Fre: <I>cette femme , Jean ou moi</I> <li>Ger: <I>diese Frau , Johann oder ich</I> <li>Ita: <I>questa donna , Giovanni o me</I> <li>Nep: <I>यो आईमाई , जोन अथवा म</I> <li>Nor: <I>denne kvinna , John eller meg</I> <li>Pes: <I>این زن , جان یا من</I> <li>Pnb: <I>اے زنانی , جان یا میں</I> <li>Pol: <I>ta kobieta , Jan lub ja</I> <li>Ron: <I>această femeie , Ion sau eu</I> <li>Rus: <I>Ивана , меня или эту женщину</I> <li>Spa: <I>esta mujer , Juan o mí</I> <li>Swe: <I>den här kvinnan , Johan eller mig</I> <li>Urd: <I>یہ عورت , جان یا میں</I> </ul> </div> </div></TD>-</TR>-<TR>-<TD><CODE>nobody_NP</CODE></TD>-<TD><A HREF="#NP" TITLE="NP - noun phrase (subject or object)">NP</A></TD>-<TD><div class=reveal> <I>nobody</I> <div class=popup> <ul> <li>API: <CODE>mkUtt nobody_NP</CODE> <li>Afr: <I>niemand</I> <li>Bul: <I>*</I> <li>Cat: <I>ningú</I> <li>Dan: <I>*</I> <li>Dut: <I>niemand</I> <li>Eng: <I>nobody</I> <li>Fin: <I>ei kukaan</I> <li>Fre: <I>personne</I> <li>Ger: <I>niemand</I> <li>Ita: <I>nessuno</I> <li>Nep: <I>केही पनी</I> <li>Nor: <I>*</I> <li>Pes: <I>*</I> <li>Pnb: <I>كوی نہیں</I> <li>Pol: <I>nikt</I> <li>Ron: <I>nimeni</I> <li>Rus: <I>*</I> <li>Spa: <I>*</I> <li>Swe: <I>ingen</I> <li>Urd: <I>كوی نہیں</I> </ul> </div> </div></TD>-</TR>-<TR>-<TD><CODE>nothing_NP</CODE></TD>-<TD><A HREF="#NP" TITLE="NP - noun phrase (subject or object)">NP</A></TD>-<TD><div class=reveal> <I>nothing</I> <div class=popup> <ul> <li>API: <CODE>mkUtt nothing_NP</CODE> <li>Afr: <I>niks</I> <li>Bul: <I>*</I> <li>Cat: <I>res</I> <li>Dan: <I>*</I> <li>Dut: <I>niets</I> <li>Eng: <I>nothing</I> <li>Fin: <I>ei mikään</I> <li>Fre: <I>rien</I> <li>Ger: <I>nichts</I> <li>Ita: <I>niente</I> <li>Nep: <I>केही पनी</I> <li>Nor: <I>*</I> <li>Pes: <I>*</I> <li>Pnb: <I>كچھ نیں</I> <li>Pol: <I>nic</I> <li>Ron: <I>nimic</I> <li>Rus: <I>*</I> <li>Spa: <I>*</I> <li>Swe: <I>inget</I> <li>Urd: <I>كوی چیز نہیں</I> </ul> </div> </div></TD>-</TR>-<TR>-<TD><CODE>she_NP</CODE></TD>-<TD><A HREF="#NP" TITLE="NP - noun phrase (subject or object)">NP</A></TD>-<TD><div class=reveal> <I>she</I> <div class=popup> <ul> <li>API: <CODE>mkUtt she_NP</CODE> <li>Afr: <I>sy</I> <li>Bul: <I>тя</I> <li>Cat: <I>ella</I> <li>Dan: <I>hende</I> <li>Dut: <I>ze</I> <li>Eng: <I>she</I> <li>Fin: <I>hän</I> <li>Fre: <I>elle</I> <li>Ger: <I>sie</I> <li>Ita: <I>lei</I> <li>Nep: <I>उनी</I> <li>Nor: <I>henne</I> <li>Pes: <I>او</I> <li>Pnb: <I>او</I> <li>Pol: <I>ona</I> <li>Ron: <I>ea</I> <li>Rus: <I>её</I> <li>Spa: <I>ella</I> <li>Swe: <I>henne</I> <li>Urd: <I>وہ</I> </ul> </div> </div></TD>-</TR>-<TR>-<TD><CODE>somebody_NP</CODE></TD>-<TD><A HREF="#NP" TITLE="NP - noun phrase (subject or object)">NP</A></TD>-<TD><div class=reveal> <I>somebody</I> <div class=popup> <ul> <li>API: <CODE>mkUtt somebody_NP</CODE> <li>Afr: <I>iemand</I> <li>Bul: <I>някой</I> <li>Cat: <I>alg˙</I> <li>Dan: <I>nogen</I> <li>Dut: <I>iemand</I> <li>Eng: <I>somebody</I> <li>Fin: <I>joku</I> <li>Fre: <I>quelqu'un</I> <li>Ger: <I>jemand</I> <li>Ita: <I>qualcuno</I> <li>Nep: <I>कोही</I> <li>Nor: <I>noen</I> <li>Pes: <I>*</I> <li>Pnb: <I>كوی</I> <li>Pol: <I>ktoś</I> <li>Ron: <I>cineva</I> <li>Rus: <I>кого-то</I> <li>Spa: <I>algún</I> <li>Swe: <I>någon</I> <li>Urd: <I>كوی</I> </ul> </div> </div></TD>-</TR>-<TR>-<TD><CODE>something_NP</CODE></TD>-<TD><A HREF="#NP" TITLE="NP - noun phrase (subject or object)">NP</A></TD>-<TD><div class=reveal> <I>something</I> <div class=popup> <ul> <li>API: <CODE>mkUtt something_NP</CODE> <li>Afr: <I>iets</I> <li>Bul: <I>нещо</I> <li>Cat: <I>quelcom</I> <li>Dan: <I>noget</I> <li>Dut: <I>iets</I> <li>Eng: <I>something</I> <li>Fin: <I>jokin</I> <li>Fre: <I>quelque chose</I> <li>Ger: <I>etwas</I> <li>Ita: <I>qualche cosa</I> <li>Nep: <I>केही कुरा</I> <li>Nor: <I>noe</I> <li>Pes: <I>*</I> <li>Pnb: <I>كوی شے</I> <li>Pol: <I>coś</I> <li>Ron: <I>ceva</I> <li>Rus: <I>что-то</I> <li>Spa: <I>algo</I> <li>Swe: <I>något</I> <li>Urd: <I>كوی چیز</I> </ul> </div> </div></TD>-</TR>-<TR>-<TD><CODE>that_NP</CODE></TD>-<TD><A HREF="#NP" TITLE="NP - noun phrase (subject or object)">NP</A></TD>-<TD><div class=reveal> <I>that</I> <div class=popup> <ul> <li>API: <CODE>mkUtt that_NP</CODE> <li>Afr: <I>daardie</I> <li>Bul: <I>онова</I> <li>Cat: <I>aquell</I> <li>Dan: <I>det der</I> <li>Dut: <I>dat</I> <li>Eng: <I>that</I> <li>Fin: <I>tuo</I> <li>Fre: <I>celui-là</I> <li>Ger: <I>jenes</I> <li>Ita: <I>quello</I> <li>Nep: <I>त्ये</I> <li>Nor: <I>det der</I> <li>Pes: <I>آن</I> <li>Pnb: <I>وہ</I> <li>Pol: <I>tamten</I> <li>Ron: <I>acela</I> <li>Rus: <I>то</I> <li>Spa: <I>ese</I> <li>Swe: <I>det där</I> <li>Urd: <I>وہ</I> </ul> </div> </div></TD>-</TR>-<TR>-<TD><CODE>these_NP</CODE></TD>-<TD><A HREF="#NP" TITLE="NP - noun phrase (subject or object)">NP</A></TD>-<TD><div class=reveal> <I>these</I> <div class=popup> <ul> <li>API: <CODE>mkUtt these_NP</CODE> <li>Afr: <I>hierdie</I> <li>Bul: <I>тези</I> <li>Cat: <I>aquests</I> <li>Dan: <I>disse</I> <li>Dut: <I>deze</I> <li>Eng: <I>these</I> <li>Fin: <I>nämä</I> <li>Fre: <I>ceux-ci</I> <li>Ger: <I>diese</I> <li>Ita: <I>questi</I> <li>Nep: <I>यी</I> <li>Nor: <I>disse</I> <li>Pes: <I>این</I> <li>Pnb: <I>اے</I> <li>Pol: <I>ci</I> <li>Ron: <I>aceştia</I> <li>Rus: <I>эти</I> <li>Spa: <I>estos</I> <li>Swe: <I>de här</I> <li>Urd: <I>یہ</I> </ul> </div> </div></TD>-</TR>-<TR>-<TD><CODE>they_NP</CODE></TD>-<TD><A HREF="#NP" TITLE="NP - noun phrase (subject or object)">NP</A></TD>-<TD><div class=reveal> <I>they</I> <div class=popup> <ul> <li>API: <CODE>mkUtt they_NP</CODE> <li>Afr: <I>hulle</I> <li>Bul: <I>те</I> <li>Cat: <I>elles</I> <li>Dan: <I>dem</I> <li>Dut: <I>ze</I> <li>Eng: <I>they</I> <li>Fin: <I>he</I> <li>Fre: <I>eux</I> <li>Ger: <I>sie</I> <li>Ita: <I>loro</I> <li>Nep: <I>उनीहरु</I> <li>Nor: <I>dem</I> <li>Pes: <I>آن ها</I> <li>Pnb: <I>او</I> <li>Pol: <I>oni</I> <li>Ron: <I>ei</I> <li>Rus: <I>их</I> <li>Spa: <I>ellos</I> <li>Swe: <I>dem</I> <li>Urd: <I>وہ</I> </ul> </div> </div></TD>-</TR>-<TR>-<TD><CODE>this_NP</CODE></TD>-<TD><A HREF="#NP" TITLE="NP - noun phrase (subject or object)">NP</A></TD>-<TD><div class=reveal> <I>this</I> <div class=popup> <ul> <li>API: <CODE>mkUtt this_NP</CODE> <li>Afr: <I>hierdie</I> <li>Bul: <I>това</I> <li>Cat: <I>aquest</I> <li>Dan: <I>dette</I> <li>Dut: <I>dit</I> <li>Eng: <I>this</I> <li>Fin: <I>tämä</I> <li>Fre: <I>celui-ci</I> <li>Ger: <I>dieses</I> <li>Ita: <I>questo</I> <li>Nep: <I>यो</I> <li>Nor: <I>dette</I> <li>Pes: <I>این</I> <li>Pnb: <I>اے</I> <li>Pol: <I>ten</I> <li>Ron: <I>acesta</I> <li>Rus: <I>это</I> <li>Spa: <I>este</I> <li>Swe: <I>det här</I> <li>Urd: <I>یہ</I> </ul> </div> </div></TD>-</TR>-<TR>-<TD><CODE>those_NP</CODE></TD>-<TD><A HREF="#NP" TITLE="NP - noun phrase (subject or object)">NP</A></TD>-<TD><div class=reveal> <I>those</I> <div class=popup> <ul> <li>API: <CODE>mkUtt those_NP</CODE> <li>Afr: <I>daardie</I> <li>Bul: <I>онези</I> <li>Cat: <I>aquells</I> <li>Dan: <I>de der</I> <li>Dut: <I>die</I> <li>Eng: <I>those</I> <li>Fin: <I>nuo</I> <li>Fre: <I>ceux-là</I> <li>Ger: <I>jene</I> <li>Ita: <I>quelli</I> <li>Nep: <I>यिनीहरु</I> <li>Nor: <I>de der</I> <li>Pes: <I>آن</I> <li>Pnb: <I>وہ</I> <li>Pol: <I>tamci</I> <li>Ron: <I>aceia</I> <li>Rus: <I>те</I> <li>Spa: <I>esos</I> <li>Swe: <I>de där</I> <li>Urd: <I>وہ</I> </ul> </div> </div></TD>-</TR>-<TR>-<TD><CODE>we_NP</CODE></TD>-<TD><A HREF="#NP" TITLE="NP - noun phrase (subject or object)">NP</A></TD>-<TD><div class=reveal> <I>we</I> <div class=popup> <ul> <li>API: <CODE>mkUtt we_NP</CODE> <li>Afr: <I>ons</I> <li>Bul: <I>ние</I> <li>Cat: <I>nosaltres</I> <li>Dan: <I>os</I> <li>Dut: <I>we</I> <li>Eng: <I>we</I> <li>Fin: <I>me</I> <li>Fre: <I>nous</I> <li>Ger: <I>wir</I> <li>Ita: <I>noi</I> <li>Nep: <I>हामीहरु</I> <li>Nor: <I>oss</I> <li>Pes: <I>ما</I> <li>Pnb: <I>اسی</I> <li>Pol: <I>my</I> <li>Ron: <I>noi</I> <li>Rus: <I>нас</I> <li>Spa: <I>nosotros</I> <li>Swe: <I>oss</I> <li>Urd: <I>ہم</I> </ul> </div> </div></TD>-</TR>-<TR>-<TD><CODE>youPl_NP</CODE></TD>-<TD><A HREF="#NP" TITLE="NP - noun phrase (subject or object)">NP</A></TD>-<TD><div class=reveal> <I>you</I> <div class=popup> <ul> <li>API: <CODE>mkUtt youPl_NP</CODE> <li>Afr: <I>julle</I> <li>Bul: <I>вие</I> <li>Cat: <I>vosaltres</I> <li>Dan: <I>jer</I> <li>Dut: <I>jullie</I> <li>Eng: <I>you</I> <li>Fin: <I>te</I> <li>Fre: <I>vous</I> <li>Ger: <I>ihr</I> <li>Ita: <I>voi</I> <li>Nep: <I>तिमीहरु</I> <li>Nor: <I>dere</I> <li>Pes: <I>شما</I> <li>Pnb: <I>تسی</I> <li>Pol: <I>wy</I> <li>Ron: <I>voi</I> <li>Rus: <I>вас</I> <li>Spa: <I>vosotros</I> <li>Swe: <I>er</I> <li>Urd: <I>تم</I> </ul> </div> </div></TD>-</TR>-<TR>-<TD><CODE>youPol_NP</CODE></TD>-<TD><A HREF="#NP" TITLE="NP - noun phrase (subject or object)">NP</A></TD>-<TD><div class=reveal> <I>you</I> <div class=popup> <ul> <li>API: <CODE>mkUtt youPol_NP</CODE> <li>Afr: <I>u</I> <li>Bul: <I>вие</I> <li>Cat: <I>vosté</I> <li>Dan: <I>Dem</I> <li>Dut: <I>u</I> <li>Eng: <I>you</I> <li>Fin: <I>te</I> <li>Fre: <I>vous</I> <li>Ger: <I>Sie</I> <li>Ita: <I>Lei</I> <li>Nep: <I>तपाई</I> <li>Nor: <I>Dere</I> <li>Pes: <I>شما</I> <li>Pnb: <I>تسی</I> <li>Pol: <I>ty</I> <li>Ron: <I>dumneavoastră</I> <li>Rus: <I>вас</I> <li>Spa: <I>usted</I> <li>Swe: <I>er</I> <li>Urd: <I>آپ</I> </ul> </div> </div></TD>-</TR>-<TR>-<TD><CODE>you_NP</CODE></TD>-<TD><A HREF="#NP" TITLE="NP - noun phrase (subject or object)">NP</A></TD>-<TD><div class=reveal> <I>you</I> <div class=popup> <ul> <li>API: <CODE>mkUtt you_NP</CODE> <li>Afr: <I>jy</I> <li>Bul: <I>ти</I> <li>Cat: <I>tu</I> <li>Dan: <I>dig</I> <li>Dut: <I>je</I> <li>Eng: <I>you</I> <li>Fin: <I>sinä</I> <li>Fre: <I>toi</I> <li>Ger: <I>du</I> <li>Ita: <I>te</I> <li>Nep: <I>तिमी</I> <li>Nor: <I>deg</I> <li>Pes: <I>تو</I> <li>Pnb: <I>توں</I> <li>Pol: <I>ty</I> <li>Ron: <I>tu</I> <li>Rus: <I>тебя</I> <li>Spa: <I>tí</I> <li>Swe: <I>dig</I> <li>Urd: <I>تو</I> </ul> </div> </div></TD>-</TR>-</TABLE>--<A NAME="Num"></A>-<H2>Num - number determining element</H2>--<TABLE BORDER="1" CELLPADDING="4">-<TR>-<TH>Function</TH>-<TH>Type</TH>-<TH COLSPAN="2">Example</TH>-</TR>-<TR>-<TD><CODE>mkNum</CODE></TD>-<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#Num" TITLE="Num - number determining element">Num</A></TD>-<TD><I>thirty-five (given by "35"; range 1-999)</I></TD>-</TR>-<TR>-<TD><CODE>mkNum</CODE></TD>-<TD><A HREF="#Numeral" TITLE="Numeral - cardinal or ordinal in words">Numeral</A> <CODE>-></CODE> <A HREF="#Num" TITLE="Num - number determining element">Num</A></TD>-<TD><div class=reveal> <I>twenty</I> <div class=popup> <ul> <li>API: <CODE>mkNum (mkNumeral (tenfoldSub100 n2_Unit))</CODE> <li>Afr: <I>twintig</I> <li>Bul: <I>двадесетима</I> <li>Cat: <I>vint</I> <li>Dan: <I>tyve</I> <li>Dut: <I>twintig</I> <li>Eng: <I>twenty</I> <li>Fin: <I>kaksikymmentä</I> <li>Fre: <I>vingt</I> <li>Ger: <I>zwanzig</I> <li>Ita: <I>venti</I> <li>Nep: <I>बीस</I> <li>Nor: <I>tjue</I> <li>Pes: <I>بیست</I> <li>Pnb: <I>وی</I> <li>Pol: <I>dwadzieścia</I> <li>Ron: <I>douăzeci</I> <li>Rus: <I>двадцать</I> <li>Spa: <I>veinte</I> <li>Swe: <I>tjugo</I> <li>Urd: <I>بیس</I> </ul> </div> </div></TD>-</TR>-<TR>-<TD><CODE>mkNum</CODE></TD>-<TD><A HREF="#Digits" TITLE="Digits - cardinal or ordinal in digits">Digits</A> <CODE>-></CODE> <A HREF="#Num" TITLE="Num - number determining element">Num</A></TD>-<TD><div class=reveal> <I>2 1</I> <div class=popup> <ul> <li>API: <CODE>mkNum (mkDigits n2_Dig (mkDigits n1_Dig))</CODE> <li>Afr: <I>2 1</I> <li>Bul: <I>2 1</I> <li>Cat: <I>2 1</I> <li>Dan: <I>2 1</I> <li>Dut: <I>2 1</I> <li>Eng: <I>2 1</I> <li>Fin: <I>2 1</I> <li>Fre: <I>2 1</I> <li>Ger: <I>2 1</I> <li>Ita: <I>2 1</I> <li>Nep: <I>२१</I> <li>Nor: <I>2 1</I> <li>Pes: <I>2 1</I> <li>Pnb: <I>۱۲</I> <li>Pol: <I>2 1</I> <li>Ron: <I>2 1</I> <li>Rus: <I>2 1</I> <li>Spa: <I>2 1</I> <li>Swe: <I>2 1</I> <li>Urd: <I>۱۲</I> </ul> </div> </div></TD>-</TR>-<TR>-<TD><CODE>mkNum</CODE></TD>-<TD><A HREF="#Digit">Digit</A> <CODE>-></CODE> <A HREF="#Num" TITLE="Num - number determining element">Num</A></TD>-<TD><I>five</I></TD>-</TR>-<TR>-<TD><CODE>mkNum</CODE></TD>-<TD><A HREF="#Card" TITLE="Card - cardinal number">Card</A> <CODE>-></CODE> <A HREF="#Num" TITLE="Num - number determining element">Num</A></TD>-<TD><div class=reveal> <I>almost five</I> <div class=popup> <ul> <li>API: <CODE>mkNum (mkCard almost_AdN (mkCard (mkNumeral n5_Unit)))</CODE> <li>Afr: <I>byna vyf</I> <li>Bul: <I>почти петима</I> <li>Cat: <I>{s = table CommonRomance.Gender {</I> <li>Dan: <I>næsten fem</I> <li>Dut: <I>bijna vijf</I> <li>Eng: <I>almost five</I> <li>Fin: <I>melkein viisi</I> <li>Fre: <I>presque cinq</I> <li>Ger: <I>fast fünf</I> <li>Ita: <I>quasi cinque</I> <li>Nep: <I>झण्डै पाँच</I> <li>Nor: <I>nesten fem</I> <li>Pes: <I>تقریباً پنج</I> <li>Pnb: <I>تقریبا پنج</I> <li>Pol: <I>prawie pięć</I> <li>Ron: <I>aproape cinci</I> <li>Rus: <I>почти пять</I> <li>Spa: <I>casi cinco</I> <li>Swe: <I>nästan fem</I> <li>Urd: <I>تقریبا پانچ</I> </ul> </div> </div></TD>-</TR>-<TR>-<TD><CODE>mkNum</CODE></TD>-<TD><A HREF="#AdN" TITLE="AdN - numeral-modifying adverb">AdN</A> <CODE>-></CODE> <A HREF="#Card" TITLE="Card - cardinal number">Card</A> <CODE>-></CODE> <A HREF="#Num" TITLE="Num - number determining element">Num</A></TD>-<TD><div class=reveal> <I>almost five</I> <div class=popup> <ul> <li>API: <CODE>mkNum (mkCard almost_AdN (mkCard (mkNumeral n5_Unit)))</CODE> <li>Afr: <I>byna vyf</I> <li>Bul: <I>почти петима</I> <li>Cat: <I>{s = table CommonRomance.Gender {</I> <li>Dan: <I>næsten fem</I> <li>Dut: <I>bijna vijf</I> <li>Eng: <I>almost five</I> <li>Fin: <I>melkein viisi</I> <li>Fre: <I>presque cinq</I> <li>Ger: <I>fast fünf</I> <li>Ita: <I>quasi cinque</I> <li>Nep: <I>झण्डै पाँच</I> <li>Nor: <I>nesten fem</I> <li>Pes: <I>تقریباً پنج</I> <li>Pnb: <I>تقریبا پنج</I> <li>Pol: <I>prawie pięć</I> <li>Ron: <I>aproape cinci</I> <li>Rus: <I>почти пять</I> <li>Spa: <I>casi cinco</I> <li>Swe: <I>nästan fem</I> <li>Urd: <I>تقریبا پانچ</I> </ul> </div> </div></TD>-</TR>-<TR>-<TD><CODE>pluralNum</CODE></TD>-<TD><A HREF="#Num" TITLE="Num - number determining element">Num</A></TD>-<TD><I>plural</I></TD>-</TR>-<TR>-<TD><CODE>singularNum</CODE></TD>-<TD><A HREF="#Num" TITLE="Num - number determining element">Num</A></TD>-<TD><I>singular</I></TD>-</TR>-</TABLE>--<A NAME="Numeral"></A>-<H2>Numeral - cardinal or ordinal in words</H2>--<TABLE BORDER="1" CELLPADDING="4">-<TR>-<TH>Function</TH>-<TH>Type</TH>-<TH COLSPAN="2">Example</TH>-</TR>-<TR>-<TD><CODE>mkNumeral</CODE></TD>-<TD><A HREF="#Unit">Unit</A> <CODE>-></CODE> <A HREF="#Numeral" TITLE="Numeral - cardinal or ordinal in words">Numeral</A></TD>-<TD><I>eight (coerce 1..9)</I></TD>-</TR>-<TR>-<TD><CODE>mkNumeral</CODE></TD>-<TD><A HREF="#Sub100">Sub100</A> <CODE>-></CODE> <A HREF="#Numeral" TITLE="Numeral - cardinal or ordinal in words">Numeral</A></TD>-<TD><I>twenty-five (coerce 1..99)</I></TD>-</TR>-<TR>-<TD><CODE>mkNumeral</CODE></TD>-<TD><A HREF="#Sub1000">Sub1000</A> <CODE>-></CODE> <A HREF="#Numeral" TITLE="Numeral - cardinal or ordinal in words">Numeral</A></TD>-<TD><div class=reveal> <I>nine hundred and ninety - nine</I> <div class=popup> <ul> <li>API: <CODE>mkNumeral (mkSub1000 n9_Unit (mkSub100 n9_Unit n9_Unit))</CODE> <li>Afr: <I>negehonderdnegeënnegentig</I> <li>Bul: <I>деветстотин деветдесет и деветима</I> <li>Cat: <I>nou -cents noranta- nou</I> <li>Dan: <I>ni hundrede og ni og halvfems</I> <li>Dut: <I>negenhonderdnegenennegentig</I> <li>Eng: <I>nine hundred and ninety - nine</I> <li>Fin: <I>yhdeksänsataayhdeksänkymmentäyhdeksän</I> <li>Fre: <I>neuf cent quatre-vingt - dix-neuf</I> <li>Ger: <I>neunhundertneunundneunzig</I> <li>Ita: <I>novecentonovantanove</I> <li>Nep: <I>नौ सय उनान्सय</I> <li>Nor: <I>ni hundre og nitti ni</I> <li>Pes: <I>نهصد و نود و نه</I> <li>Pnb: <I>نو سو نڑینوے</I> <li>Pol: <I>dziewięćset dziewięćdziesiąt dziewięć</I> <li>Ron: <I>nouă sute nouăzeci şi nouă</I> <li>Rus: <I>девятьсот девяносто девять</I> <li>Spa: <I>novecientos noventa y nueve</I> <li>Swe: <I>niohundra nittionio</I> <li>Urd: <I>نو سو ننانوے</I> </ul> </div> </div></TD>-</TR>-<TR>-<TD><CODE>mkNumeral</CODE></TD>-<TD><A HREF="#Sub1000">Sub1000</A> <CODE>-></CODE> <A HREF="#Sub1000">Sub1000</A> <CODE>-></CODE> <A HREF="#Numeral" TITLE="Numeral - cardinal or ordinal in words">Numeral</A></TD>-<TD><div class=reveal> <I>nine hundred and ninety - nine thousand nine hundred and ninety - nine</I> <div class=popup> <ul> <li>API: <CODE>mkNumeral (mkSub1000 n9_Unit (mkSub100 n9_Unit n9_Unit)) (mkSub1000 n9_Unit (mkSub100 n9_Unit n9_Unit))</CODE> <li>Afr: <I>negehonderdnegeënnegentigduisend negehonderdnegeënnegentig</I> <li>Bul: <I>деветстотин деветдесет и девет хиляди деветстотин деветдесет и деветима</I> <li>Cat: <I>nou -cents noranta- nou mil nou -cents noranta- nou</I> <li>Dan: <I>ni hundrede og ni og halvfems tusind og ni hundrede og ni og halvfems</I> <li>Dut: <I>negenhonderdnegenennegentigduizend negenhonderdnegenennegentig</I> <li>Eng: <I>nine hundred and ninety - nine thousand nine hundred and ninety - nine</I> <li>Fin: <I>yhdeksänsataayhdeksänkymmentäyhdeksäntuhatta yhdeksänsataayhdeksänkymmentäyhdeksän</I> <li>Fre: <I>neuf cent quatre-vingt - dix-neuf mille neuf cent quatre-vingt - dix-neuf</I> <li>Ger: <I>neunhundertneunundneunzigtausend neunhundertneunundneunzig</I> <li>Ita: <I>novecentonovantanovemila e novecentonovantanove</I> <li>Nep: <I>नौ लाख उनान्सय हजार नौ सय उनान्सय</I> <li>Nor: <I>ni hundre og nitti ni tusen og ni hundre og nitti ni</I> <li>Pes: <I>نهصد و نود و نه هزار و نهصد و نود و نه</I> <li>Pnb: <I>نو لكھ نڑینوے ہزار نو سو نڑینوے</I> <li>Pol: <I>dziewięćset dziewięćdziesiąt dziewięć tysięcy dziewięćset dziewięćdziesiąt dziewięć</I> <li>Ron: <I>nouă sute nouăzeci şi nouă de mii nouă sute nouăzeci şi nouă</I> <li>Rus: <I>девятьсот девяносто девять тысяч девятьсот девяносто девять</I> <li>Spa: <I>novecientos noventa y nueve mil novecientos noventa y nueve</I> <li>Swe: <I>niohundra nittioniotusen niohundra nittionio</I> <li>Urd: <I>نو لاكھ ننانوے ہزار نو سو ننانوے</I> </ul> </div> </div></TD>-</TR>-<TR>-<TD><CODE>mkNumeral</CODE></TD>-<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#Numeral" TITLE="Numeral - cardinal or ordinal in words">Numeral</A></TD>-<TD><I>thirty-five (given by "35"; range 1-999)</I></TD>-</TR>-<TR>-<TD><CODE>thousandfoldNumeral</CODE></TD>-<TD><A HREF="#Sub1000">Sub1000</A> <CODE>-></CODE> <A HREF="#Numeral" TITLE="Numeral - cardinal or ordinal in words">Numeral</A></TD>-<TD><div class=reveal> <I>nine hundred and ninety - nine thousand</I> <div class=popup> <ul> <li>API: <CODE>thousandfoldNumeral (mkSub1000 n9_Unit (mkSub100 n9_Unit n9_Unit))</CODE> <li>Afr: <I>negehonderdnegeënnegentigduisend</I> <li>Bul: <I>деветстотин деветдесет и девет хиляди</I> <li>Cat: <I>nou -cents noranta- nou mil</I> <li>Dan: <I>ni hundrede og ni og halvfems tusind</I> <li>Dut: <I>negenhonderdnegenennegentigduizend</I> <li>Eng: <I>nine hundred and ninety - nine thousand</I> <li>Fin: <I>yhdeksänsataayhdeksänkymmentäyhdeksäntuhatta</I> <li>Fre: <I>neuf cent quatre-vingt - dix-neuf mille</I> <li>Ger: <I>neunhundertneunundneunzigtausend</I> <li>Ita: <I>novecentonovantanovemila</I> <li>Nep: <I>नौ लाख उनान्सय हजार</I> <li>Nor: <I>ni hundre og nitti ni tusen</I> <li>Pes: <I>نهصد و نود و نه هزار</I> <li>Pnb: <I>نو لكھ نڑینوے ہزار</I> <li>Pol: <I>dziewięćset dziewięćdziesiąt dziewięć tysięcy</I> <li>Ron: <I>nouă sute nouăzeci şi nouă de mii</I> <li>Rus: <I>девятьсот девяносто девять тысяч</I> <li>Spa: <I>novecientos noventa y nueve mil</I> <li>Swe: <I>niohundra nittionio tusen</I> <li>Urd: <I>نو لاكھ ننانوے ہزار</I> </ul> </div> </div></TD>-</TR>-</TABLE>--<A NAME="Ord"></A>-<H2>Ord - ordinal number (used in Det)</H2>--<TABLE BORDER="1" CELLPADDING="4">-<TR>-<TH>Function</TH>-<TH>Type</TH>-<TH COLSPAN="2">Example</TH>-</TR>-<TR>-<TD><CODE>mkOrd</CODE></TD>-<TD><A HREF="#Numeral" TITLE="Numeral - cardinal or ordinal in words">Numeral</A> <CODE>-></CODE> <A HREF="#Ord" TITLE="Ord - ordinal number (used in Det)">Ord</A></TD>-<TD><I>twentieth</I></TD>-</TR>-<TR>-<TD><CODE>mkOrd</CODE></TD>-<TD><A HREF="#Digits" TITLE="Digits - cardinal or ordinal in digits">Digits</A> <CODE>-></CODE> <A HREF="#Ord" TITLE="Ord - ordinal number (used in Det)">Ord</A></TD>-<TD><I>51st</I></TD>-</TR>-<TR>-<TD><CODE>mkOrd</CODE></TD>-<TD><A HREF="#Digit">Digit</A> <CODE>-></CODE> <A HREF="#Ord" TITLE="Ord - ordinal number (used in Det)">Ord</A></TD>-<TD><I>fifth</I></TD>-</TR>-<TR>-<TD><CODE>mkOrd</CODE></TD>-<TD><A HREF="#A" TITLE="A - one-place adjective">A</A> <CODE>-></CODE> <A HREF="#Ord" TITLE="Ord - ordinal number (used in Det)">Ord</A></TD>-<TD><div class=reveal> <I>smallest</I> <div class=popup> <ul> <li>API: <CODE>mkOrd small_A</CODE> <li>Afr: <I>kleinste</I> <li>Bul: <I>най - малък</I> <li>Cat: <I>més petit</I> <li>Dan: <I>mindste</I> <li>Dut: <I>kleinst</I> <li>Eng: <I>smallest</I> <li>Fin: <I>pienin</I> <li>Fre: <I>plus petit</I> <li>Ger: <I>kleinst</I> <li>Ita: <I>più piccolo</I> <li>Nep: <I>सबभन्दा सानो</I> <li>Nor: <I>minste</I> <li>Pes: <I>کوچک ترین</I> <li>Pnb: <I>چھوٹا</I> <li>Pol: <I>najmniejszy</I> <li>Ron: <I>cel mai mic</I> <li>Rus: <I>маленький</I> <li>Spa: <I>más pequeño</I> <li>Swe: <I>minsta</I> <li>Urd: <I>سب سے چھوٹا</I> </ul> </div> </div></TD>-</TR>-</TABLE>--<A NAME="PConj"></A>-<H2>PConj - phrase-beginning conjunction</H2>--<TABLE BORDER="1" CELLPADDING="4">-<TR>-<TH>Function</TH>-<TH>Type</TH>-<TH COLSPAN="2">Example</TH>-</TR>-<TR>-<TD><CODE>but_PConj</CODE></TD>-<TD><A HREF="#PConj" TITLE="PConj - phrase-beginning conjunction">PConj</A></TD>-<TD><div class=reveal> <I>but</I> <div class=popup> <ul> <li>API: <CODE>but_PConj</CODE> <li>Afr: <I>maar</I> <li>Bul: <I>но</I> <li>Cat: <I>però</I> <li>Dan: <I>men</I> <li>Dut: <I>maar</I> <li>Eng: <I>but</I> <li>Fin: <I>mutta</I> <li>Fre: <I>mais</I> <li>Ger: <I>aber</I> <li>Ita: <I>ma</I> <li>Nep: <I>तर</I> <li>Nor: <I>men</I> <li>Pes: <I>اما</I> <li>Pnb: <I>مگر</I> <li>Pol: <I>ale</I> <li>Ron: <I>dar</I> <li>Rus: <I>но</I> <li>Spa: <I>pero</I> <li>Swe: <I>men</I> <li>Urd: <I>لیكن</I> </ul> </div> </div></TD>-</TR>-<TR>-<TD><CODE>mkPConj</CODE></TD>-<TD><A HREF="#Conj" TITLE="Conj - conjunction">Conj</A> <CODE>-></CODE> <A HREF="#PConj" TITLE="PConj - phrase-beginning conjunction">PConj</A></TD>-<TD><div class=reveal> <I>and now</I> <div class=popup> <ul> <li>API: <CODE>mkPhr (mkPConj and_Conj) (mkUtt now_Adv)</CODE> <li>Afr: <I>en nou</I> <li>Bul: <I>и сега</I> <li>Cat: <I>i ara</I> <li>Dan: <I>og nu</I> <li>Dut: <I>en nu</I> <li>Eng: <I>and now</I> <li>Fin: <I>ja nyt</I> <li>Fre: <I>et maintenant</I> <li>Ger: <I>und jetzt</I> <li>Ita: <I>e adesso</I> <li>Nep: <I>र अहीले</I> <li>Nor: <I>og nå</I> <li>Pes: <I>و حالا</I> <li>Pnb: <I>تے ہون</I> <li>Pol: <I>i teraz</I> <li>Ron: <I>şi acum</I> <li>Rus: <I>и сейчас</I> <li>Spa: <I>y ahora</I> <li>Swe: <I>och nu</I> <li>Urd: <I>اور اب</I> </ul> </div> </div></TD>-</TR>-<TR>-<TD><CODE>otherwise_PConj</CODE></TD>-<TD><A HREF="#PConj" TITLE="PConj - phrase-beginning conjunction">PConj</A></TD>-<TD><div class=reveal> <I>otherwise</I> <div class=popup> <ul> <li>API: <CODE>otherwise_PConj</CODE> <li>Afr: <I>anders</I> <li>Bul: <I>иначе</I> <li>Cat: <I>altrament</I> <li>Dan: <I>anderledes</I> <li>Dut: <I>anders</I> <li>Eng: <I>otherwise</I> <li>Fin: <I>muuten</I> <li>Fre: <I>autrement</I> <li>Ger: <I>sonst</I> <li>Ita: <I>altramente</I> <li>Nep: <I>अन्यथा</I> <li>Nor: <I>annarledes</I> <li>Pes: <I>درغیراین صورت</I> <li>Pnb: <I>یا فیر</I> <li>Pol: <I>inaczej</I> <li>Ron: <I>altfel</I> <li>Rus: <I>иначе</I> <li>Spa: <I>otramente</I> <li>Swe: <I>annars</I> <li>Urd: <I>یا پھر</I> </ul> </div> </div></TD>-</TR>-<TR>-<TD><CODE>therefore_PConj</CODE></TD>-<TD><A HREF="#PConj" TITLE="PConj - phrase-beginning conjunction">PConj</A></TD>-<TD><div class=reveal> <I>therefore</I> <div class=popup> <ul> <li>API: <CODE>therefore_PConj</CODE> <li>Afr: <I>daarom</I> <li>Bul: <I>така че</I> <li>Cat: <I>per tant</I> <li>Dan: <I>derfor</I> <li>Dut: <I>daarom</I> <li>Eng: <I>therefore</I> <li>Fin: <I>siksi</I> <li>Fre: <I>donc</I> <li>Ger: <I>deshalb</I> <li>Ita: <I>quindi</I> <li>Nep: <I>अतः</I> <li>Nor: <I>derfor</I> <li>Pes: <I>به همین دلیل</I> <li>Pnb: <I>اس لی</I> <li>Pol: <I>dlatego</I> <li>Ron: <I>astfel</I> <li>Rus: <I>следовательно</I> <li>Spa: <I>por eso</I> <li>Swe: <I>därför</I> <li>Urd: <I>اس لیے</I> </ul> </div> </div></TD>-</TR>-</TABLE>--<A NAME="PN"></A>-<H2>PN - proper name</H2>--<P>-Lexical category, constructors given in-<A HREF="#RParadigms">lexical paradigms</A>.-</P>--<A NAME="Phr"></A>-<H2>Phr - phrase in a text</H2>--<TABLE BORDER="1" CELLPADDING="4">-<TR>-<TH>Function</TH>-<TH>Type</TH>-<TH COLSPAN="2">Example</TH>-</TR>-<TR>-<TD><CODE>mkPhr</CODE></TD>-<TD>(<A HREF="#PConj" TITLE="PConj - phrase-beginning conjunction">PConj</A>) <CODE>-></CODE> <A HREF="#Utt" TITLE="Utt - sentence, question, word...">Utt</A> <CODE>-></CODE> (<A HREF="#Voc" TITLE="Voc - vocative or "please"">Voc</A>) <CODE>-></CODE> <A HREF="#Phr" TITLE="Phr - phrase in a text">Phr</A></TD>-<TD><div class=reveal> <I>but sleep , my friend</I> <div class=popup> <ul> <li>API: <CODE>mkPhr but_PConj (mkUtt (mkImp sleep_V)) (mkVoc (mkNP i_Pron friend_N))</CODE> <li>Afr: <I>maar slaap , my vriend</I> <li>Bul: <I>но спи , мой приятелю</I> <li>Cat: <I>però dorm , el meu amic</I> <li>Dan: <I>men sov , min ven</I> <li>Dut: <I>maar slaap , mijn vriend</I> <li>Eng: <I>but sleep , my friend</I> <li>Fin: <I>mutta nuku , minun ystäväni</I> <li>Fre: <I>mais dors , mon ami</I> <li>Ger: <I>aber schlaf , mein Freund</I> <li>Ita: <I>ma dormi , il mio amico</I> <li>Nep: <I>तर सुत् होउ मेरो साथी</I> <li>Nor: <I>men sov , min venn</I> <li>Pes: <I>اما بخواب دوست من</I> <li>Pnb: <I>مگر سونا میرا یار</I> <li>Pol: <I>ale śpij , mój przyjacielu</I> <li>Ron: <I>dar dormi , prietenul meu</I> <li>Rus: <I>но спи , мой друг</I> <li>Spa: <I>pero duerme , mi amigo</I> <li>Swe: <I>men sov , min vän</I> <li>Urd: <I>لیكن سونا میرا دوست</I> </ul> </div> </div></TD>-</TR>-<TR>-<TD><CODE>mkPhr</CODE></TD>-<TD><A HREF="#S" TITLE="S - declarative sentence">S</A> <CODE>-></CODE> <A HREF="#Phr" TITLE="Phr - phrase in a text">Phr</A></TD>-<TD><div class=reveal> <I>she won't sleep</I> <div class=popup> <ul> <li>API: <CODE>mkPhr (mkS futureTense negativePol (mkCl she_NP sleep_V))</CODE> <li>Afr: <I>sy sal nie nie geslaap het</I> <li>Bul: <I>тя няма да спи</I> <li>Cat: <I>ella no dormirà</I> <li>Dan: <I>hun vil ikke sove</I> <li>Dut: <I>ze zal niet geslapen hebben</I> <li>Eng: <I>she won't sleep</I> <li>Fin: <I>hän ei nuku</I> <li>Fre: <I>elle ne dormira pas</I> <li>Ger: <I>sie wird nicht schlafen</I> <li>Ita: <I>lei non dormirà</I> <li>Nep: <I>उनी सुत्नेछैनन्</I> <li>Nor: <I>hun vil ikke sove</I> <li>Pes: <I>او نخواهد خوابید</I> <li>Pnb: <I>او نیں سوئے گی</I> <li>Pol: <I>ona nie będzie spała</I> <li>Ron: <I>ea nu va dormi</I> <li>Rus: <I>она не будет спать</I> <li>Spa: <I>ella no dormirá</I> <li>Swe: <I>hon ska inte sova</I> <li>Urd: <I>وہ نہیں سوئے گی</I> </ul> </div> </div></TD>-</TR>-<TR>-<TD><CODE>mkPhr</CODE></TD>-<TD><A HREF="#Cl" TITLE="Cl - declarative clause, with all tenses">Cl</A> <CODE>-></CODE> <A HREF="#Phr" TITLE="Phr - phrase in a text">Phr</A></TD>-<TD><div class=reveal> <I>she sleeps</I> <div class=popup> <ul> <li>API: <CODE>mkPhr (mkCl she_NP sleep_V)</CODE> <li>Afr: <I>sy slaap</I> <li>Bul: <I>тя спи</I> <li>Cat: <I>ella dorm</I> <li>Dan: <I>hun sover</I> <li>Dut: <I>ze slaapt</I> <li>Eng: <I>she sleeps</I> <li>Fin: <I>hän nukkuu</I> <li>Fre: <I>elle dort</I> <li>Ger: <I>sie schläft</I> <li>Ita: <I>lei dorme</I> <li>Nep: <I>उनी सुत्छिन्</I> <li>Nor: <I>hun sover</I> <li>Pes: <I>او می خوابد</I> <li>Pnb: <I>او سوندی اے</I> <li>Pol: <I>ona śpi</I> <li>Ron: <I>ea doarme</I> <li>Rus: <I>она спдит</I> <li>Spa: <I>ella duerme</I> <li>Swe: <I>hon sover</I> <li>Urd: <I>وہ سوتی ہے</I> </ul> </div> </div></TD>-</TR>-<TR>-<TD><CODE>mkPhr</CODE></TD>-<TD><A HREF="#QS" TITLE="QS - question">QS</A> <CODE>-></CODE> <A HREF="#Phr" TITLE="Phr - phrase in a text">Phr</A></TD>-<TD><div class=reveal> <I>would she sleep</I> <div class=popup> <ul> <li>API: <CODE>mkPhr (mkQS conditionalTense (mkQCl (mkCl she_NP sleep_V)))</CODE> <li>Afr: <I>sou sy geslaap het</I> <li>Bul: <I>тя би ли спалa</I> <li>Cat: <I>ella dormiria</I> <li>Dan: <I>ville hun sove</I> <li>Dut: <I>zou ze geslapen hebben</I> <li>Eng: <I>would she sleep</I> <li>Fin: <I>nukkuisiko hän</I> <li>Fre: <I>elle dormirait</I> <li>Ger: <I>würde sie schlafen</I> <li>Ita: <I>lei dormirebbe</I> <li>Nep: <I>के उनी सुत्नेछिन्</I> <li>Nor: <I>ville hun sove</I> <li>Pes: <I>آیا او می خوابید</I> <li>Pnb: <I>كی او شاید سوئے</I> <li>Pol: <I>czy ona spałaby</I> <li>Ron: <I>ea ar dormi</I> <li>Rus: <I>она спала бы</I> <li>Spa: <I>ella dormiría</I> <li>Swe: <I>skulle hon sova</I> <li>Urd: <I>كیا وہ شاید سوئے</I> </ul> </div> </div></TD>-</TR>-<TR>-<TD><CODE>mkPhr</CODE></TD>-<TD><A HREF="#Imp" TITLE="Imp - imperative">Imp</A> <CODE>-></CODE> <A HREF="#Phr" TITLE="Phr - phrase in a text">Phr</A></TD>-<TD><div class=reveal> <I>sleep</I> <div class=popup> <ul> <li>API: <CODE>mkPhr (mkImp sleep_V)</CODE> <li>Afr: <I>slaap</I> <li>Bul: <I>спи</I> <li>Cat: <I>dorm</I> <li>Dan: <I>sov</I> <li>Dut: <I>slaap</I> <li>Eng: <I>sleep</I> <li>Fin: <I>nuku</I> <li>Fre: <I>dors</I> <li>Ger: <I>schlaf</I> <li>Ita: <I>dormi</I> <li>Nep: <I>सुत् होउ</I> <li>Nor: <I>sov</I> <li>Pes: <I>بخواب</I> <li>Pnb: <I>سونا</I> <li>Pol: <I>śpij</I> <li>Ron: <I>dormi</I> <li>Rus: <I>спи</I> <li>Spa: <I>duerme</I> <li>Swe: <I>sov</I> <li>Urd: <I>سونا</I> </ul> </div> </div></TD>-</TR>-</TABLE>--<A NAME="Pol"></A>-<H2>Pol - polarity</H2>--<TABLE BORDER="1" CELLPADDING="4">-<TR>-<TH>Function</TH>-<TH>Type</TH>-<TH COLSPAN="2">Example</TH>-</TR>-<TR>-<TD><CODE>negativePol</CODE></TD>-<TD><A HREF="#Pol" TITLE="Pol - polarity">Pol</A></TD>-<TD><div class=reveal> <I>she doesn't sleep</I> <div class=popup> <ul> <li>API: <CODE>mkS negativePol (mkCl she_NP sleep_V)</CODE> <li>Afr: <I>sy slaap nie nie</I> <li>Bul: <I>тя не спи</I> <li>Cat: <I>ella no dorm</I> <li>Dan: <I>hun sover ikke</I> <li>Dut: <I>ze slaapt niet</I> <li>Eng: <I>she doesn't sleep</I> <li>Fin: <I>hän ei nuku</I> <li>Fre: <I>elle ne dort pas</I> <li>Ger: <I>sie schläft nicht</I> <li>Ita: <I>lei non dorme</I> <li>Nep: <I>उनी सुत्दिन्न</I> <li>Nor: <I>hun sover ikke</I> <li>Pes: <I>او نمی خوابد</I> <li>Pnb: <I>او نیں سوندی اے</I> <li>Pol: <I>ona nie śpi</I> <li>Ron: <I>ea nu doarme</I> <li>Rus: <I>она не спдит</I> <li>Spa: <I>ella no duerme</I> <li>Swe: <I>hon sover inte</I> <li>Urd: <I>وہ نہیں سوتی ہے</I> </ul> </div> </div></TD>-</TR>-<TR>-<TD><CODE>positivePol</CODE></TD>-<TD><A HREF="#Pol" TITLE="Pol - polarity">Pol</A></TD>-<TD><div class=reveal> <I>she sleeps</I> <div class=popup> <ul> <li>API: <CODE>mkS positivePol (mkCl she_NP sleep_V)</CODE> <li>Afr: <I>sy slaap</I> <li>Bul: <I>тя спи</I> <li>Cat: <I>ella dorm</I> <li>Dan: <I>hun sover</I> <li>Dut: <I>ze slaapt</I> <li>Eng: <I>she sleeps</I> <li>Fin: <I>hän nukkuu</I> <li>Fre: <I>elle dort</I> <li>Ger: <I>sie schläft</I> <li>Ita: <I>lei dorme</I> <li>Nep: <I>उनी सुत्छिन्</I> <li>Nor: <I>hun sover</I> <li>Pes: <I>او می خوابد</I> <li>Pnb: <I>او سوندی اے</I> <li>Pol: <I>ona śpi</I> <li>Ron: <I>ea doarme</I> <li>Rus: <I>она спдит</I> <li>Spa: <I>ella duerme</I> <li>Swe: <I>hon sover</I> <li>Urd: <I>وہ سوتی ہے</I> </ul> </div> </div></TD>-</TR>-</TABLE>--<A NAME="Predet"></A>-<H2>Predet - predeterminer (prefixed Quant)</H2>--<TABLE BORDER="1" CELLPADDING="4">-<TR>-<TH>Function</TH>-<TH>Type</TH>-<TH COLSPAN="2">Example</TH>-</TR>-<TR>-<TD><CODE>all_Predet</CODE></TD>-<TD><A HREF="#Predet" TITLE="Predet - predeterminer (prefixed Quant)">Predet</A></TD>-<TD><div class=reveal> <I>all the men</I> <div class=popup> <ul> <li>API: <CODE>mkNP all_Predet (mkNP thePl_Det man_N)</CODE> <li>Afr: <I>alle die mans</I> <li>Bul: <I>всичките мъжете</I> <li>Cat: <I>// <li>Dan: //alle mændene// <li>Dut: //alle de mannen// <li>Eng: //all the men// <li>Fin: //kaikki miehet// <li>Fre: //</I> <li>Ger: <I>alle die Männer</I> <li>Ita: <I>// <li>Nep: //सबै मान्छेहरु// <li>Nor: //alle mennen// <li>Pes: //همه ی مرد// <li>Pnb: //سارے بندے// <li>Pol: //wszystkich mężczyzn// <li>Ron: //</I> <li>Rus: <I>все человеки</I> <li>Spa: <I>''</I> <li>Swe: <I>alla männen</I> <li>Urd: <I>تمام آدمی</I> </ul> </div> </div></TD>-</TR>-<TR>-<TD><CODE>most_Predet</CODE></TD>-<TD><A HREF="#Predet" TITLE="Predet - predeterminer (prefixed Quant)">Predet</A></TD>-<TD><div class=reveal> <I>most</I> <div class=popup> <ul> <li>API: <CODE>most_Predet</CODE> <li>Afr: <I>meeste</I> <li>Bul: <I>повечето</I> <li>Cat: <I>la majoria</I> <li>Dan: <I>den meste</I> <li>Dut: <I>meeste</I> <li>Eng: <I>most</I> <li>Fin: <I>useinta</I> <li>Fre: <I>la plupart</I> <li>Ger: <I>meister</I> <li>Ita: <I>la maggior parte</I> <li>Nep: <I>ज्यादै</I> <li>Nor: <I>den meste</I> <li>Pes: <I>اکثر</I> <li>Pnb: <I>زیادہ تر</I> <li>Pol: <I>wszystek</I> <li>Ron: <I>marea parte a</I> <li>Rus: <I>большинство</I> <li>Spa: <I>la mayor parte</I> <li>Swe: <I>den mesta</I> <li>Urd: <I>زیادہ تر</I> </ul> </div> </div></TD>-</TR>-<TR>-<TD><CODE>not_Predet</CODE></TD>-<TD><A HREF="#Predet" TITLE="Predet - predeterminer (prefixed Quant)">Predet</A></TD>-<TD><div class=reveal> <I>not everybody</I> <div class=popup> <ul> <li>API: <CODE>mkUtt (mkNP not_Predet everybody_NP)</CODE> <li>Afr: <I>nie almal</I> <li>Bul: <I>*</I> <li>Cat: <I>no pas tothom</I> <li>Dan: <I>*</I> <li>Dut: <I>niet alle</I> <li>Eng: <I>not everybody</I> <li>Fin: <I>ei jokainen</I> <li>Fre: <I>pas tout le monde</I> <li>Ger: <I>nicht jeder</I> <li>Ita: <I>non tutti</I> <li>Nep: <I>हैन सवौ जाना</I> <li>Nor: <I>*</I> <li>Pes: <I>*</I> <li>Pnb: <I>نہیں ہر كوی</I> <li>Pol: <I>żadni wszystkich</I> <li>Ron: <I>nu toţi</I> <li>Rus: <I>*</I> <li>Spa: <I>*</I> <li>Swe: <I>inte alla</I> <li>Urd: <I>نہیں ہر كوی</I> </ul> </div> </div></TD>-</TR>-<TR>-<TD><CODE>only_Predet</CODE></TD>-<TD><A HREF="#Predet" TITLE="Predet - predeterminer (prefixed Quant)">Predet</A></TD>-<TD><div class=reveal> <I>only</I> <div class=popup> <ul> <li>API: <CODE>only_Predet</CODE> <li>Afr: <I>slegs</I> <li>Bul: <I>само</I> <li>Cat: <I>nomÈs</I> <li>Dan: <I>kun</I> <li>Dut: <I>slechts</I> <li>Eng: <I>only</I> <li>Fin: <I>vain</I> <li>Fre: <I>seulement</I> <li>Ger: <I>nur</I> <li>Ita: <I>soltanto</I> <li>Nep: <I>मात्र</I> <li>Nor: <I>kun</I> <li>Pes: <I>فقط</I> <li>Pnb: <I>صرف</I> <li>Pol: <I>tylko</I> <li>Ron: <I>doar</I> <li>Rus: <I>единственный</I> <li>Spa: <I>solamente</I> <li>Swe: <I>bara</I> <li>Urd: <I>صرف</I> </ul> </div> </div></TD>-</TR>-</TABLE>--<A NAME="Prep"></A>-<H2>Prep - preposition, or just case</H2>--<TABLE BORDER="1" CELLPADDING="4">-<TR>-<TH>Function</TH>-<TH>Type</TH>-<TH COLSPAN="2">Example</TH>-</TR>-<TR>-<TD><CODE>above_Prep</CODE></TD>-<TD><A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A></TD>-<TD><div class=reveal> <I>above it</I> <div class=popup> <ul> <li>API: <CODE>mkAdv above_Prep it_NP</CODE> <li>Afr: <I>bo dit</I> <li>Bul: <I>над него</I> <li>Cat: <I>sobre ell</I> <li>Dan: <I>ovenfor det</I> <li>Dut: <I>boven het</I> <li>Eng: <I>above it</I> <li>Fin: <I>sen yläpuolella</I> <li>Fre: <I>au dessus de lui</I> <li>Ger: <I>über ihm</I> <li>Ita: <I>sopra di lui</I> <li>Nep: <I>यो माथि</I> <li>Nor: <I>ovenfor det</I> <li>Pes: <I>بالای آن</I> <li>Pnb: <I>اینوں اتے</I> <li>Pol: <I>nad nim</I> <li>Ron: <I>deasupra lui</I> <li>Rus: <I>над ним</I> <li>Spa: <I>sobre él</I> <li>Swe: <I>ovanför det</I> <li>Urd: <I>اس اوپر</I> </ul> </div> </div></TD>-</TR>-<TR>-<TD><CODE>after_Prep</CODE></TD>-<TD><A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A></TD>-<TD><div class=reveal> <I>after it</I> <div class=popup> <ul> <li>API: <CODE>mkAdv after_Prep it_NP</CODE> <li>Afr: <I>na dit</I> <li>Bul: <I>след него</I> <li>Cat: <I>després de ell</I> <li>Dan: <I>efter det</I> <li>Dut: <I>na het</I> <li>Eng: <I>after it</I> <li>Fin: <I>sen jälkeen</I> <li>Fre: <I>après lui</I> <li>Ger: <I>nach ihm</I> <li>Ita: <I>dopo lui</I> <li>Nep: <I>यो पछि</I> <li>Nor: <I>etter det</I> <li>Pes: <I>بعد از آن</I> <li>Pnb: <I>اینوں توں بعد</I> <li>Pol: <I>po nim</I> <li>Ron: <I>după el</I> <li>Rus: <I>после него</I> <li>Spa: <I>despues de él</I> <li>Swe: <I>efter det</I> <li>Urd: <I>اس كے بعد</I> </ul> </div> </div></TD>-</TR>-<TR>-<TD><CODE>before_Prep</CODE></TD>-<TD><A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A></TD>-<TD><div class=reveal> <I>before it</I> <div class=popup> <ul> <li>API: <CODE>mkAdv before_Prep it_NP</CODE> <li>Afr: <I>voor dit</I> <li>Bul: <I>преди него</I> <li>Cat: <I>abans de ell</I> <li>Dan: <I>før det</I> <li>Dut: <I>voor het</I> <li>Eng: <I>before it</I> <li>Fin: <I>ennen sitä</I> <li>Fre: <I>avant lui</I> <li>Ger: <I>vor ihm</I> <li>Ita: <I>prima lui</I> <li>Nep: <I>यो अघि</I> <li>Nor: <I>før det</I> <li>Pes: <I>قبل از آن</I> <li>Pnb: <I>اینوں پلے</I> <li>Pol: <I>przed nim</I> <li>Ron: <I>înaintea lui</I> <li>Rus: <I>перед ним</I> <li>Spa: <I>antes de él</I> <li>Swe: <I>före det</I> <li>Urd: <I>اس پہلے</I> </ul> </div> </div></TD>-</TR>-<TR>-<TD><CODE>behind_Prep</CODE></TD>-<TD><A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A></TD>-<TD><div class=reveal> <I>behind it</I> <div class=popup> <ul> <li>API: <CODE>mkAdv behind_Prep it_NP</CODE> <li>Afr: <I>agter dit</I> <li>Bul: <I>зад него</I> <li>Cat: <I>darrera de ell</I> <li>Dan: <I>bag det</I> <li>Dut: <I>achter het</I> <li>Eng: <I>behind it</I> <li>Fin: <I>sen takana</I> <li>Fre: <I>derrière lui</I> <li>Ger: <I>hinter ihm</I> <li>Ita: <I>dietro lui</I> <li>Nep: <I>यो पछि</I> <li>Nor: <I>bakom det</I> <li>Pes: <I>پشت آن</I> <li>Pnb: <I>اینوں پیچھے</I> <li>Pol: <I>za nim</I> <li>Ron: <I>înapoia lui</I> <li>Rus: <I>за ним</I> <li>Spa: <I>detrás de él</I> <li>Swe: <I>bakom det</I> <li>Urd: <I>اس پیچھے</I> </ul> </div> </div></TD>-</TR>-<TR>-<TD><CODE>between_Prep</CODE></TD>-<TD><A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A></TD>-<TD><div class=reveal> <I>between you and me</I> <div class=popup> <ul> <li>API: <CODE>mkAdv between_Prep (mkNP and_Conj you_NP i_NP)</CODE> <li>Afr: <I>tussen jou en my</I> <li>Bul: <I>между теб и мен</I> <li>Cat: <I>entre tu i mi</I> <li>Dan: <I>mellem dig og mig</I> <li>Dut: <I>tussen je en me</I> <li>Eng: <I>between you and me</I> <li>Fin: <I>sinun ja minun välissä</I> <li>Fre: <I>entre toi et moi</I> <li>Ger: <I>zwischen dir und mir</I> <li>Ita: <I>fra te e me</I> <li>Nep: <I>तिमी र म बिच</I> <li>Nor: <I>mellom deg og meg</I> <li>Pes: <I>بین تو و من</I> <li>Pnb: <I>تینوں تے مینوں وچكار</I> <li>Pol: <I>między tobą i mną</I> <li>Ron: <I>între</I> <li>Rus: <I>между тобой и мной</I> <li>Spa: <I>entre tí y mí</I> <li>Swe: <I>mellan dig och mig</I> <li>Urd: <I>تو اور مجھ درمیاں</I> </ul> </div> </div></TD>-</TR>-<TR>-<TD><CODE>by8agent_Prep</CODE></TD>-<TD><A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A></TD>-<TD><div class=reveal> <I>by it</I> <div class=popup> <ul> <li>API: <CODE>mkAdv by8agent_Prep it_NP</CODE> <li>Afr: <I>deur dit</I> <li>Bul: <I>чрез него</I> <li>Cat: <I>per ell</I> <li>Dan: <I>af det</I> <li>Dut: <I>door het</I> <li>Eng: <I>by it</I> <li>Fin: <I>sen toimesta</I> <li>Fre: <I>par lui</I> <li>Ger: <I>durch es</I> <li>Ita: <I>da lui</I> <li>Nep: <I>यो लाइ</I> <li>Nor: <I>av det</I> <li>Pes: <I>توسط آن</I> <li>Pnb: <I>اینوں</I> <li>Pol: <I>przez nie</I> <li>Ron: <I>de către el</I> <li>Rus: <I>с помощью него</I> <li>Spa: <I>por él</I> <li>Swe: <I>av det</I> <li>Urd: <I>اس سے</I> </ul> </div> </div></TD>-</TR>-<TR>-<TD><CODE>by8means_Prep</CODE></TD>-<TD><A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A></TD>-<TD><div class=reveal> <I>by it</I> <div class=popup> <ul> <li>API: <CODE>mkAdv by8means_Prep it_NP</CODE> <li>Afr: <I>met dit</I> <li>Bul: <I>чрез него</I> <li>Cat: <I>mitjançant ell</I> <li>Dan: <I>med det</I> <li>Dut: <I>met het</I> <li>Eng: <I>by it</I> <li>Fin: <I>sillä</I> <li>Fre: <I>par lui</I> <li>Ger: <I>mit ihm</I> <li>Ita: <I>per lui</I> <li>Nep: <I>यो ले</I> <li>Nor: <I>med det</I> <li>Pes: <I>با آن</I> <li>Pnb: <I>اینوں</I> <li>Pol: <I>przez nie</I> <li>Ron: <I>de el</I> <li>Rus: <I>с помощью него</I> <li>Spa: <I>por él</I> <li>Swe: <I>med det</I> <li>Urd: <I>اس پر</I> </ul> </div> </div></TD>-</TR>-<TR>-<TD><CODE>during_Prep</CODE></TD>-<TD><A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A></TD>-<TD><div class=reveal> <I>during it</I> <div class=popup> <ul> <li>API: <CODE>mkAdv during_Prep it_NP</CODE> <li>Afr: <I>tydens dit</I> <li>Bul: <I>по време на него</I> <li>Cat: <I>durant ell</I> <li>Dan: <I>under det</I> <li>Dut: <I>tijdens het</I> <li>Eng: <I>during it</I> <li>Fin: <I>sen aikana</I> <li>Fre: <I>pendant lui</I> <li>Ger: <I>während seiner</I> <li>Ita: <I>durante lui</I> <li>Nep: <I>यो पर्यान्त</I> <li>Nor: <I>under det</I> <li>Pes: <I>در طول آن</I> <li>Pnb: <I>اینوں دے وچ</I> <li>Pol: <I>podczas niego</I> <li>Ron: <I>în timpul lui</I> <li>Rus: <I>в течение него</I> <li>Spa: <I>durante él</I> <li>Swe: <I>under det</I> <li>Urd: <I>اس كے درمیاں</I> </ul> </div> </div></TD>-</TR>-<TR>-<TD><CODE>except_Prep</CODE></TD>-<TD><A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A></TD>-<TD><div class=reveal> <I>except it</I> <div class=popup> <ul> <li>API: <CODE>mkAdv except_Prep it_NP</CODE> <li>Afr: <I>behalwe dit</I> <li>Bul: <I>*</I> <li>Cat: <I>excepte ell</I> <li>Dan: <I>*</I> <li>Dut: <I>met uitzondering van het</I> <li>Eng: <I>except it</I> <li>Fin: <I>sitä lukuunottamatta</I> <li>Fre: <I>excepté lui</I> <li>Ger: <I>außer ihm</I> <li>Ita: <I>eccetto lui</I> <li>Nep: <I>यो बाहेक</I> <li>Nor: <I>*</I> <li>Pes: <I>به جز آن</I> <li>Pnb: <I>اینوں سواے</I> <li>Pol: <I>z wyjątkiem nie</I> <li>Ron: <I>cu excepţia lui</I> <li>Rus: <I>*</I> <li>Spa: <I>*</I> <li>Swe: <I>utom det</I> <li>Urd: <I>اس سواے</I> </ul> </div> </div></TD>-</TR>-<TR>-<TD><CODE>for_Prep</CODE></TD>-<TD><A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A></TD>-<TD><div class=reveal> <I>for it</I> <div class=popup> <ul> <li>API: <CODE>mkAdv for_Prep it_NP</CODE> <li>Afr: <I>voor dit</I> <li>Bul: <I>за него</I> <li>Cat: <I>per a ell</I> <li>Dan: <I>for det</I> <li>Dut: <I>voor het</I> <li>Eng: <I>for it</I> <li>Fin: <I>sille</I> <li>Fre: <I>pour lui</I> <li>Ger: <I>für es</I> <li>Ita: <I>per lui</I> <li>Nep: <I>यो लागि</I> <li>Nor: <I>for det</I> <li>Pes: <I>برای آن</I> <li>Pnb: <I>اینوں [دے واسطE]</I> <li>Pol: <I>dla niego</I> <li>Ron: <I>pentru el</I> <li>Rus: <I>для него</I> <li>Spa: <I>para él</I> <li>Swe: <I>för det</I> <li>Urd: <I>اس كیلیے</I> </ul> </div> </div></TD>-</TR>-<TR>-<TD><CODE>from_Prep</CODE></TD>-<TD><A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A></TD>-<TD><div class=reveal> <I>from it</I> <div class=popup> <ul> <li>API: <CODE>mkAdv from_Prep it_NP</CODE> <li>Afr: <I>uit dit</I> <li>Bul: <I>от него</I> <li>Cat: <I>de ell</I> <li>Dan: <I>fra det</I> <li>Dut: <I>uit het</I> <li>Eng: <I>from it</I> <li>Fin: <I>siitä</I> <li>Fre: <I>de lui</I> <li>Ger: <I>aus ihm</I> <li>Ita: <I>da lui</I> <li>Nep: <I>यो बाट</I> <li>Nor: <I>fra det</I> <li>Pes: <I>از آن</I> <li>Pnb: <I>اینوں توں</I> <li>Pol: <I>z niego</I> <li>Ron: <I>de la el</I> <li>Rus: <I>от него</I> <li>Spa: <I>de él</I> <li>Swe: <I>från det</I> <li>Urd: <I>اس سے</I> </ul> </div> </div></TD>-</TR>-<TR>-<TD><CODE>in8front_Prep</CODE></TD>-<TD><A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A></TD>-<TD><div class=reveal> <I>in front of it</I> <div class=popup> <ul> <li>API: <CODE>mkAdv in8front_Prep it_NP</CODE> <li>Afr: <I>voor dit</I> <li>Bul: <I>пред него</I> <li>Cat: <I>davant de ell</I> <li>Dan: <I>foran det</I> <li>Dut: <I>voor het</I> <li>Eng: <I>in front of it</I> <li>Fin: <I>sen edessä</I> <li>Fre: <I>devant lui</I> <li>Ger: <I>vor ihm</I> <li>Ita: <I>davanti lui</I> <li>Nep: <I>यो सामु</I> <li>Nor: <I>foran det</I> <li>Pes: <I>جلوی آن</I> <li>Pnb: <I>اینوں دے سامنے</I> <li>Pol: <I>przed nim</I> <li>Ron: <I>în faţa lui</I> <li>Rus: <I>перед ним</I> <li>Spa: <I>delante de él</I> <li>Swe: <I>framför det</I> <li>Urd: <I>اس كے سامنے</I> </ul> </div> </div></TD>-</TR>-<TR>-<TD><CODE>in_Prep</CODE></TD>-<TD><A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A></TD>-<TD><div class=reveal> <I>in it</I> <div class=popup> <ul> <li>API: <CODE>mkAdv in_Prep it_NP</CODE> <li>Afr: <I>in dit</I> <li>Bul: <I>в него</I> <li>Cat: <I>en ell</I> <li>Dan: <I>i det</I> <li>Dut: <I>in het</I> <li>Eng: <I>in it</I> <li>Fin: <I>siinä</I> <li>Fre: <I>dans lui</I> <li>Ger: <I>in ihm</I> <li>Ita: <I>in lui</I> <li>Nep: <I>यो मा</I> <li>Nor: <I>i det</I> <li>Pes: <I>در آن</I> <li>Pnb: <I>اینوں وچ</I> <li>Pol: <I>w nim</I> <li>Ron: <I>în el</I> <li>Rus: <I>в нём</I> <li>Spa: <I>en él</I> <li>Swe: <I>i det</I> <li>Urd: <I>اس میں</I> </ul> </div> </div></TD>-</TR>-<TR>-<TD><CODE>on_Prep</CODE></TD>-<TD><A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A></TD>-<TD><div class=reveal> <I>on it</I> <div class=popup> <ul> <li>API: <CODE>mkAdv on_Prep it_NP</CODE> <li>Afr: <I>op dit</I> <li>Bul: <I>на него</I> <li>Cat: <I>sobre ell</I> <li>Dan: <I>på det</I> <li>Dut: <I>op het</I> <li>Eng: <I>on it</I> <li>Fin: <I>sillä</I> <li>Fre: <I>sur lui</I> <li>Ger: <I>auf ihm</I> <li>Ita: <I>su lui</I> <li>Nep: <I>यो मा</I> <li>Nor: <I>på det</I> <li>Pes: <I>روی آن</I> <li>Pnb: <I>اینوں اتے</I> <li>Pol: <I>nа nim</I> <li>Ron: <I>pe el</I> <li>Rus: <I>на нём</I> <li>Spa: <I>sobre él</I> <li>Swe: <I>på det</I> <li>Urd: <I>اس پر</I> </ul> </div> </div></TD>-</TR>-<TR>-<TD><CODE>part_Prep</CODE></TD>-<TD><A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A></TD>-<TD><div class=reveal> <I>of it</I> <div class=popup> <ul> <li>API: <CODE>mkAdv part_Prep it_NP</CODE> <li>Afr: <I>van dit</I> <li>Bul: <I>от него</I> <li>Cat: <I>de ell</I> <li>Dan: <I>af det</I> <li>Dut: <I>van het</I> <li>Eng: <I>of it</I> <li>Fin: <I>sitä</I> <li>Fre: <I>de lui</I> <li>Ger: <I>von ihm</I> <li>Ita: <I>di lui</I> <li>Nep: <I>यो भाग</I> <li>Nor: <I>av det</I> <li>Pes: <I>از آن</I> <li>Pnb: <I>اینوں ہصہ</I> <li>Pol: <I>z niego</I> <li>Ron: <I>din el</I> <li>Rus: <I>оно</I> <li>Spa: <I>de él</I> <li>Swe: <I>av det</I> <li>Urd: <I>اس</I> </ul> </div> </div></TD>-</TR>-<TR>-<TD><CODE>possess_Prep</CODE></TD>-<TD><A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A></TD>-<TD><div class=reveal> <I>of it</I> <div class=popup> <ul> <li>API: <CODE>mkAdv possess_Prep it_NP</CODE> <li>Afr: <I>van dit</I> <li>Bul: <I>му</I> <li>Cat: <I>de ell</I> <li>Dan: <I>af det</I> <li>Dut: <I>van het</I> <li>Eng: <I>of it</I> <li>Fin: <I>sen</I> <li>Fre: <I>de lui</I> <li>Ger: <I>von ihm</I> <li>Ita: <I>di lui</I> <li>Nep: <I>यो धारणा गर्नु</I> <li>Nor: <I>av det</I> <li>Pes: <I>آن</I> <li>Pnb: <I>اینوں دا</I> <li>Pol: <I>jego</I> <li>Ron: <I>lui</I> <li>Rus: <I>него</I> <li>Spa: <I>de él</I> <li>Swe: <I>av det</I> <li>Urd: <I>اس كا</I> </ul> </div> </div></TD>-</TR>-<TR>-<TD><CODE>through_Prep</CODE></TD>-<TD><A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A></TD>-<TD><div class=reveal> <I>through it</I> <div class=popup> <ul> <li>API: <CODE>mkAdv through_Prep it_NP</CODE> <li>Afr: <I>deur dit</I> <li>Bul: <I>през него</I> <li>Cat: <I>mitjançant ell</I> <li>Dan: <I>gennem det</I> <li>Dut: <I>door het</I> <li>Eng: <I>through it</I> <li>Fin: <I>sen kautta</I> <li>Fre: <I>par lui</I> <li>Ger: <I>durch es</I> <li>Ita: <I>per lui</I> <li>Nep: <I>यो मार्फत</I> <li>Nor: <I>gjennom det</I> <li>Pes: <I>از طریق آن</I> <li>Pnb: <I>اینوں وچوں</I> <li>Pol: <I>przez nie</I> <li>Ron: <I>prin el</I> <li>Rus: <I>через него</I> <li>Spa: <I>por él</I> <li>Swe: <I>genom det</I> <li>Urd: <I>اس میں سے</I> </ul> </div> </div></TD>-</TR>-<TR>-<TD><CODE>to_Prep</CODE></TD>-<TD><A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A></TD>-<TD><div class=reveal> <I>to it</I> <div class=popup> <ul> <li>API: <CODE>mkAdv to_Prep it_NP</CODE> <li>Afr: <I>na dit</I> <li>Bul: <I>до него</I> <li>Cat: <I>a ell</I> <li>Dan: <I>til det</I> <li>Dut: <I>naar het</I> <li>Eng: <I>to it</I> <li>Fin: <I>siihen</I> <li>Fre: <I>à lui</I> <li>Ger: <I>nach ihm</I> <li>Ita: <I>a lui</I> <li>Nep: <I>यो सम्म</I> <li>Nor: <I>til det</I> <li>Pes: <I>به آن</I> <li>Pnb: <I>اینوں نوں</I> <li>Pol: <I>do niego</I> <li>Ron: <I>la el</I> <li>Rus: <I>к нему</I> <li>Spa: <I>a él</I> <li>Swe: <I>till det</I> <li>Urd: <I>اس كو</I> </ul> </div> </div></TD>-</TR>-<TR>-<TD><CODE>under_Prep</CODE></TD>-<TD><A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A></TD>-<TD><div class=reveal> <I>under it</I> <div class=popup> <ul> <li>API: <CODE>mkAdv under_Prep it_NP</CODE> <li>Afr: <I>onder dit</I> <li>Bul: <I>под него</I> <li>Cat: <I>sota ell</I> <li>Dan: <I>under det</I> <li>Dut: <I>onder het</I> <li>Eng: <I>under it</I> <li>Fin: <I>sen alla</I> <li>Fre: <I>sous lui</I> <li>Ger: <I>unter ihm</I> <li>Ita: <I>sotto lui</I> <li>Nep: <I>यो अन्तर्गत</I> <li>Nor: <I>under det</I> <li>Pes: <I>زیر آن</I> <li>Pnb: <I>اینوں تھلے</I> <li>Pol: <I>pod nim</I> <li>Ron: <I>sub el</I> <li>Rus: <I>под ним</I> <li>Spa: <I>bajo él</I> <li>Swe: <I>under det</I> <li>Urd: <I>اس نیچے</I> </ul> </div> </div></TD>-</TR>-<TR>-<TD><CODE>with_Prep</CODE></TD>-<TD><A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A></TD>-<TD><div class=reveal> <I>with it</I> <div class=popup> <ul> <li>API: <CODE>mkAdv with_Prep it_NP</CODE> <li>Afr: <I>met dit</I> <li>Bul: <I>с него</I> <li>Cat: <I>amb ell</I> <li>Dan: <I>med det</I> <li>Dut: <I>met het</I> <li>Eng: <I>with it</I> <li>Fin: <I>sen kanssa</I> <li>Fre: <I>avec lui</I> <li>Ger: <I>mit ihm</I> <li>Ita: <I>con lui</I> <li>Nep: <I>यो सँग</I> <li>Nor: <I>med det</I> <li>Pes: <I>با آن</I> <li>Pnb: <I>اینوں دے نال</I> <li>Pol: <I>z nim</I> <li>Ron: <I>cu el</I> <li>Rus: <I>с ним</I> <li>Spa: <I>con él</I> <li>Swe: <I>med det</I> <li>Urd: <I>اس كے ساتھ</I> </ul> </div> </div></TD>-</TR>-<TR>-<TD><CODE>without_Prep</CODE></TD>-<TD><A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A></TD>-<TD><div class=reveal> <I>without it</I> <div class=popup> <ul> <li>API: <CODE>mkAdv without_Prep it_NP</CODE> <li>Afr: <I>sonder dit</I> <li>Bul: <I>без него</I> <li>Cat: <I>sense ell</I> <li>Dan: <I>uden det</I> <li>Dut: <I>zonder het</I> <li>Eng: <I>without it</I> <li>Fin: <I>ilman sitä</I> <li>Fre: <I>sans lui</I> <li>Ger: <I>ohne es</I> <li>Ita: <I>senza lui</I> <li>Nep: <I>यो विना</I> <li>Nor: <I>uten det</I> <li>Pes: <I>بدون آن</I> <li>Pnb: <I>اینوں توں بغیر</I> <li>Pol: <I>bez niego</I> <li>Ron: <I>fără el</I> <li>Rus: <I>без него</I> <li>Spa: <I>sin él</I> <li>Swe: <I>utan det</I> <li>Urd: <I>اس كے بغیر</I> </ul> </div> </div></TD>-</TR>-</TABLE>--<A NAME="Pron"></A>-<H2>Pron - personal pronoun</H2>--<TABLE BORDER="1" CELLPADDING="4">-<TR>-<TH>Function</TH>-<TH>Type</TH>-<TH COLSPAN="2">Example</TH>-</TR>-<TR>-<TD><CODE>he_Pron</CODE></TD>-<TD><A HREF="#Pron" TITLE="Pron - personal pronoun">Pron</A></TD>-<TD><div class=reveal> <I>he</I> <div class=popup> <ul> <li>API: <CODE>mkUtt (mkNP he_Pron)</CODE> <li>Afr: <I>hy</I> <li>Bul: <I>той</I> <li>Cat: <I>ell</I> <li>Dan: <I>ham</I> <li>Dut: <I>hij</I> <li>Eng: <I>he</I> <li>Fin: <I>hän</I> <li>Fre: <I>lui</I> <li>Ger: <I>er</I> <li>Ita: <I>lui</I> <li>Nep: <I>उ</I> <li>Nor: <I>ham</I> <li>Pes: <I>او</I> <li>Pnb: <I>او</I> <li>Pol: <I>on</I> <li>Ron: <I>el</I> <li>Rus: <I>его</I> <li>Spa: <I>él</I> <li>Swe: <I>honom</I> <li>Urd: <I>وہ</I> </ul> </div> </div></TD>-</TR>-<TR>-<TD><CODE>i_Pron</CODE></TD>-<TD><A HREF="#Pron" TITLE="Pron - personal pronoun">Pron</A></TD>-<TD><div class=reveal> <I>I</I> <div class=popup> <ul> <li>API: <CODE>mkUtt (mkNP i_Pron)</CODE> <li>Afr: <I>ek</I> <li>Bul: <I>аз</I> <li>Cat: <I>mi</I> <li>Dan: <I>mig</I> <li>Dut: <I>ik</I> <li>Eng: <I>I</I> <li>Fin: <I>minä</I> <li>Fre: <I>moi</I> <li>Ger: <I>ich</I> <li>Ita: <I>me</I> <li>Nep: <I>म</I> <li>Nor: <I>meg</I> <li>Pes: <I>من</I> <li>Pnb: <I>میں</I> <li>Pol: <I>ja</I> <li>Ron: <I>eu</I> <li>Rus: <I>меня</I> <li>Spa: <I>mí</I> <li>Swe: <I>mig</I> <li>Urd: <I>میں</I> </ul> </div> </div></TD>-</TR>-<TR>-<TD><CODE>it_Pron</CODE></TD>-<TD><A HREF="#Pron" TITLE="Pron - personal pronoun">Pron</A></TD>-<TD><div class=reveal> <I>it</I> <div class=popup> <ul> <li>API: <CODE>mkUtt (mkNP it_Pron)</CODE> <li>Afr: <I>dit</I> <li>Bul: <I>то</I> <li>Cat: <I>ell</I> <li>Dan: <I>det</I> <li>Dut: <I>het</I> <li>Eng: <I>it</I> <li>Fin: <I>se</I> <li>Fre: <I>lui</I> <li>Ger: <I>es</I> <li>Ita: <I>lui</I> <li>Nep: <I>यो</I> <li>Nor: <I>det</I> <li>Pes: <I>آن</I> <li>Pnb: <I>اے</I> <li>Pol: <I>ono</I> <li>Ron: <I>''</I> <li>Rus: <I>его</I> <li>Spa: <I>él</I> <li>Swe: <I>det</I> <li>Urd: <I>یہ</I> </ul> </div> </div></TD>-</TR>-<TR>-<TD><CODE>she_Pron</CODE></TD>-<TD><A HREF="#Pron" TITLE="Pron - personal pronoun">Pron</A></TD>-<TD><div class=reveal> <I>she</I> <div class=popup> <ul> <li>API: <CODE>mkUtt (mkNP she_Pron)</CODE> <li>Afr: <I>sy</I> <li>Bul: <I>тя</I> <li>Cat: <I>ella</I> <li>Dan: <I>hende</I> <li>Dut: <I>ze</I> <li>Eng: <I>she</I> <li>Fin: <I>hän</I> <li>Fre: <I>elle</I> <li>Ger: <I>sie</I> <li>Ita: <I>lei</I> <li>Nep: <I>उनी</I> <li>Nor: <I>henne</I> <li>Pes: <I>او</I> <li>Pnb: <I>او</I> <li>Pol: <I>ona</I> <li>Ron: <I>ea</I> <li>Rus: <I>её</I> <li>Spa: <I>ella</I> <li>Swe: <I>henne</I> <li>Urd: <I>وہ</I> </ul> </div> </div></TD>-</TR>-<TR>-<TD><CODE>they_Pron</CODE></TD>-<TD><A HREF="#Pron" TITLE="Pron - personal pronoun">Pron</A></TD>-<TD><div class=reveal> <I>they</I> <div class=popup> <ul> <li>API: <CODE>mkUtt (mkNP they_Pron)</CODE> <li>Afr: <I>hulle</I> <li>Bul: <I>те</I> <li>Cat: <I>elles</I> <li>Dan: <I>dem</I> <li>Dut: <I>ze</I> <li>Eng: <I>they</I> <li>Fin: <I>he</I> <li>Fre: <I>eux</I> <li>Ger: <I>sie</I> <li>Ita: <I>loro</I> <li>Nep: <I>उनीहरु</I> <li>Nor: <I>dem</I> <li>Pes: <I>آن ها</I> <li>Pnb: <I>او</I> <li>Pol: <I>oni</I> <li>Ron: <I>ei</I> <li>Rus: <I>их</I> <li>Spa: <I>ellos</I> <li>Swe: <I>dem</I> <li>Urd: <I>وہ</I> </ul> </div> </div></TD>-</TR>-<TR>-<TD><CODE>we_Pron</CODE></TD>-<TD><A HREF="#Pron" TITLE="Pron - personal pronoun">Pron</A></TD>-<TD><div class=reveal> <I>we</I> <div class=popup> <ul> <li>API: <CODE>mkUtt (mkNP we_Pron)</CODE> <li>Afr: <I>ons</I> <li>Bul: <I>ние</I> <li>Cat: <I>nosaltres</I> <li>Dan: <I>os</I> <li>Dut: <I>we</I> <li>Eng: <I>we</I> <li>Fin: <I>me</I> <li>Fre: <I>nous</I> <li>Ger: <I>wir</I> <li>Ita: <I>noi</I> <li>Nep: <I>हामीहरु</I> <li>Nor: <I>oss</I> <li>Pes: <I>ما</I> <li>Pnb: <I>اسی</I> <li>Pol: <I>my</I> <li>Ron: <I>noi</I> <li>Rus: <I>нас</I> <li>Spa: <I>nosotros</I> <li>Swe: <I>oss</I> <li>Urd: <I>ہم</I> </ul> </div> </div></TD>-</TR>-<TR>-<TD><CODE>youPl_Pron</CODE></TD>-<TD><A HREF="#Pron" TITLE="Pron - personal pronoun">Pron</A></TD>-<TD><div class=reveal> <I>you</I> <div class=popup> <ul> <li>API: <CODE>mkUtt (mkNP youPl_Pron)</CODE> <li>Afr: <I>julle</I> <li>Bul: <I>вие</I> <li>Cat: <I>vosaltres</I> <li>Dan: <I>jer</I> <li>Dut: <I>jullie</I> <li>Eng: <I>you</I> <li>Fin: <I>te</I> <li>Fre: <I>vous</I> <li>Ger: <I>ihr</I> <li>Ita: <I>voi</I> <li>Nep: <I>तिमीहरु</I> <li>Nor: <I>dere</I> <li>Pes: <I>شما</I> <li>Pnb: <I>تسی</I> <li>Pol: <I>wy</I> <li>Ron: <I>voi</I> <li>Rus: <I>вас</I> <li>Spa: <I>vosotros</I> <li>Swe: <I>er</I> <li>Urd: <I>تم</I> </ul> </div> </div></TD>-</TR>-<TR>-<TD><CODE>youPol_Pron</CODE></TD>-<TD><A HREF="#Pron" TITLE="Pron - personal pronoun">Pron</A></TD>-<TD><div class=reveal> <I>you</I> <div class=popup> <ul> <li>API: <CODE>mkUtt (mkNP youPol_Pron)</CODE> <li>Afr: <I>u</I> <li>Bul: <I>вие</I> <li>Cat: <I>vosté</I> <li>Dan: <I>Dem</I> <li>Dut: <I>u</I> <li>Eng: <I>you</I> <li>Fin: <I>te</I> <li>Fre: <I>vous</I> <li>Ger: <I>Sie</I> <li>Ita: <I>Lei</I> <li>Nep: <I>तपाई</I> <li>Nor: <I>Dere</I> <li>Pes: <I>شما</I> <li>Pnb: <I>تسی</I> <li>Pol: <I>ty</I> <li>Ron: <I>dumneavoastră</I> <li>Rus: <I>вас</I> <li>Spa: <I>usted</I> <li>Swe: <I>er</I> <li>Urd: <I>آپ</I> </ul> </div> </div></TD>-</TR>-<TR>-<TD><CODE>youSg_Pron</CODE></TD>-<TD><A HREF="#Pron" TITLE="Pron - personal pronoun">Pron</A></TD>-<TD><div class=reveal> <I>you</I> <div class=popup> <ul> <li>API: <CODE>mkUtt (mkNP youSg_Pron)</CODE> <li>Afr: <I>jy</I> <li>Bul: <I>ти</I> <li>Cat: <I>tu</I> <li>Dan: <I>dig</I> <li>Dut: <I>je</I> <li>Eng: <I>you</I> <li>Fin: <I>sinä</I> <li>Fre: <I>toi</I> <li>Ger: <I>du</I> <li>Ita: <I>te</I> <li>Nep: <I>तिमी</I> <li>Nor: <I>deg</I> <li>Pes: <I>تو</I> <li>Pnb: <I>توں</I> <li>Pol: <I>ty</I> <li>Ron: <I>tu</I> <li>Rus: <I>тебя</I> <li>Spa: <I>tí</I> <li>Swe: <I>dig</I> <li>Urd: <I>تو</I> </ul> </div> </div></TD>-</TR>-</TABLE>--<A NAME="Punct"></A>-<H2>Punct</H2>--<TABLE BORDER="1" CELLPADDING="4">-<TR>-<TH>Function</TH>-<TH>Type</TH>-<TH COLSPAN="2">Example</TH>-</TR>-<TR>-<TD><CODE>exclMarkPunct</CODE></TD>-<TD><A HREF="#Punct">Punct</A></TD>-<TD><div class=reveal> <I>yes !</I> <div class=popup> <ul> <li>API: <CODE>mkText (mkPhr yes_Utt) exclMarkPunct</CODE> <li>Afr: <I>ja !</I> <li>Bul: <I>да !</I> <li>Cat: <I>sí !</I> <li>Dan: <I>ja !</I> <li>Dut: <I>ja !</I> <li>Eng: <I>yes !</I> <li>Fin: <I>kyllä !</I> <li>Fre: <I>oui !</I> <li>Ger: <I>ja !</I> <li>Ita: <I>sì !</I> <li>Nep: <I>हजुर !</I> <li>Nor: <I>ja !</I> <li>Pes: <I>بله</I> <li>Pnb: <I>ہاں !</I> <li>Pol: <I>tak !</I> <li>Ron: <I>da !</I> <li>Rus: <I>Да !</I> <li>Spa: <I>¡ sí !</I> <li>Swe: <I>ja !</I> <li>Urd: <I>ہاں</I> </ul> </div> </div></TD>-</TR>-<TR>-<TD><CODE>fullStopPunct</CODE></TD>-<TD><A HREF="#Punct">Punct</A></TD>-<TD><div class=reveal> <I>yes .</I> <div class=popup> <ul> <li>API: <CODE>mkText (mkPhr yes_Utt) fullStopPunct</CODE> <li>Afr: <I>ja .</I> <li>Bul: <I>да .</I> <li>Cat: <I>sí .</I> <li>Dan: <I>ja .</I> <li>Dut: <I>ja .</I> <li>Eng: <I>yes .</I> <li>Fin: <I>kyllä .</I> <li>Fre: <I>oui .</I> <li>Ger: <I>ja .</I> <li>Ita: <I>sì .</I> <li>Nep: <I>हजुर .</I> <li>Nor: <I>ja .</I> <li>Pes: <I>بله Û”</I> <li>Pnb: <I>ہاں .</I> <li>Pol: <I>tak .</I> <li>Ron: <I>da .</I> <li>Rus: <I>Да .</I> <li>Spa: <I>sí .</I> <li>Swe: <I>ja .</I> <li>Urd: <I>ہاں</I> </ul> </div> </div></TD>-</TR>-<TR>-<TD><CODE>questMarkPunct</CODE></TD>-<TD><A HREF="#Punct">Punct</A></TD>-<TD><div class=reveal> <I>yes ?</I> <div class=popup> <ul> <li>API: <CODE>mkText (mkPhr yes_Utt) questMarkPunct</CODE> <li>Afr: <I>ja ?</I> <li>Bul: <I>да ?</I> <li>Cat: <I>sí ?</I> <li>Dan: <I>ja ?</I> <li>Dut: <I>ja ?</I> <li>Eng: <I>yes ?</I> <li>Fin: <I>kyllä ?</I> <li>Fre: <I>oui ?</I> <li>Ger: <I>ja ?</I> <li>Ita: <I>sì ?</I> <li>Nep: <I>हजुर ?</I> <li>Nor: <I>ja ?</I> <li>Pes: <I>بله</I> <li>Pnb: <I>ہاں ?</I> <li>Pol: <I>tak ?</I> <li>Ron: <I>da ?</I> <li>Rus: <I>Да ?</I> <li>Spa: <I>¿ sí ?</I> <li>Swe: <I>ja ?</I> <li>Urd: <I>ہاں</I> </ul> </div> </div></TD>-</TR>-</TABLE>--<A NAME="QCl"></A>-<H2>QCl - question clause, with all tenses</H2>--<TABLE BORDER="1" CELLPADDING="4">-<TR>-<TH>Function</TH>-<TH>Type</TH>-<TH COLSPAN="2">Example</TH>-</TR>-<TR>-<TD><CODE>mkQCl</CODE></TD>-<TD><A HREF="#Cl" TITLE="Cl - declarative clause, with all tenses">Cl</A> <CODE>-></CODE> <A HREF="#QCl" TITLE="QCl - question clause, with all tenses">QCl</A></TD>-<TD><div class=reveal> <I>does she sleep</I> <div class=popup> <ul> <li>API: <CODE>mkQCl (mkCl she_NP sleep_V)</CODE> <li>Afr: <I>slaap sy</I> <li>Bul: <I>тя спи ли</I> <li>Cat: <I>ella dorm</I> <li>Dan: <I>sover hun</I> <li>Dut: <I>slaapt ze</I> <li>Eng: <I>does she sleep</I> <li>Fin: <I>nukkuuko hän</I> <li>Fre: <I>elle dort</I> <li>Ger: <I>schläft sie</I> <li>Ita: <I>lei dorme</I> <li>Nep: <I>के उनी सुत्छिन्</I> <li>Nor: <I>sover hun</I> <li>Pes: <I>آیا او می خوابد</I> <li>Pnb: <I>كی او سوندی اے</I> <li>Pol: <I>czy ona śpi</I> <li>Ron: <I>ea doarme</I> <li>Rus: <I>она спдит</I> <li>Spa: <I>ella duerme</I> <li>Swe: <I>sover hon</I> <li>Urd: <I>كیا وہ سوتی ہے</I> </ul> </div> </div></TD>-</TR>-<TR>-<TD><CODE>mkQCl</CODE></TD>-<TD><A HREF="#IP" TITLE="IP - interrogative pronoun">IP</A> <CODE>-></CODE> <A HREF="#VP" TITLE="VP - verb phrase">VP</A> <CODE>-></CODE> <A HREF="#QCl" TITLE="QCl - question clause, with all tenses">QCl</A></TD>-<TD><div class=reveal> <I>who always sleeps</I> <div class=popup> <ul> <li>API: <CODE>mkQCl who_IP (mkVP always_AdV (mkVP sleep_V))</CODE> <li>Afr: <I>wie slaap altyd altyd</I> <li>Bul: <I>кой винаги спи</I> <li>Cat: <I>qui dorm sempre</I> <li>Dan: <I>hvem sover altid</I> <li>Dut: <I>wie slaapt altijd</I> <li>Eng: <I>who always sleeps</I> <li>Fin: <I>kuka nukkuu aina</I> <li>Fre: <I>qui dort toujours</I> <li>Ger: <I>wer schläft immer</I> <li>Ita: <I>chi dorme sempre</I> <li>Nep: <I>को सधैँ सुत्छन्</I> <li>Nor: <I>hvem sover altid</I> <li>Pes: <I>چه کسی همیشه می خوابد</I> <li>Pnb: <I>كون ہمیشہ سوندا اے</I> <li>Pol: <I>kto zawsze śpi</I> <li>Ron: <I>cine doarme mereu</I> <li>Rus: <I>кто всегда спдит</I> <li>Spa: <I>quién duerme siempre</I> <li>Swe: <I>vem sover alltid</I> <li>Urd: <I>كون ہمیشہ سوتا ہے</I> </ul> </div> </div></TD>-</TR>-<TR>-<TD><CODE>mkQCl</CODE></TD>-<TD><A HREF="#IP" TITLE="IP - interrogative pronoun">IP</A> <CODE>-></CODE> <A HREF="#V" TITLE="V - one-place verb">V</A> <CODE>-></CODE> <A HREF="#QCl" TITLE="QCl - question clause, with all tenses">QCl</A></TD>-<TD><div class=reveal> <I>who sleeps</I> <div class=popup> <ul> <li>API: <CODE>mkQCl who_IP sleep_V</CODE> <li>Afr: <I>wie slaap</I> <li>Bul: <I>кой спи</I> <li>Cat: <I>qui dorm</I> <li>Dan: <I>hvem sover</I> <li>Dut: <I>wie slaapt</I> <li>Eng: <I>who sleeps</I> <li>Fin: <I>kuka nukkuu</I> <li>Fre: <I>qui dort</I> <li>Ger: <I>wer schläft</I> <li>Ita: <I>chi dorme</I> <li>Nep: <I>को सुत्छन्</I> <li>Nor: <I>hvem sover</I> <li>Pes: <I>چه کسی می خوابد</I> <li>Pnb: <I>كون سوندا اے</I> <li>Pol: <I>kto śpi</I> <li>Ron: <I>cine doarme</I> <li>Rus: <I>кто спдит</I> <li>Spa: <I>quién duerme</I> <li>Swe: <I>vem sover</I> <li>Urd: <I>كون سوتا ہے</I> </ul> </div> </div></TD>-</TR>-<TR>-<TD><CODE>mkQCl</CODE></TD>-<TD><A HREF="#IP" TITLE="IP - interrogative pronoun">IP</A> <CODE>-></CODE> <A HREF="#V2" TITLE="V2 - two-place verb">V2</A> <CODE>-></CODE> <A HREF="#NP" TITLE="NP - noun phrase (subject or object)">NP</A> <CODE>-></CODE> <A HREF="#QCl" TITLE="QCl - question clause, with all tenses">QCl</A></TD>-<TD><div class=reveal> <I>who loves her</I> <div class=popup> <ul> <li>API: <CODE>mkQCl who_IP love_V2 she_NP</CODE> <li>Afr: <I>wie het haar lief</I> <li>Bul: <I>кой обича нея</I> <li>Cat: <I>qui la estima</I> <li>Dan: <I>hvem elsker hende</I> <li>Dut: <I>wie heeft haar lief</I> <li>Eng: <I>who loves her</I> <li>Fin: <I>kuka rakastaa häntä</I> <li>Fre: <I>qui l' aime</I> <li>Ger: <I>wer liebt sie</I> <li>Ita: <I>chi la ama</I> <li>Nep: <I>को उनी लाई माया गर्छन्</I> <li>Nor: <I>hvem elsker henne</I> <li>Pes: <I>چه کسی او را دوست دارد</I> <li>Pnb: <I>كون اونوں پیار كردا اے</I> <li>Pol: <I>kto kocha ją</I> <li>Ron: <I>cine o iubeşte</I> <li>Rus: <I>кто любдит её</I> <li>Spa: <I>quién la ama</I> <li>Swe: <I>vem älskar henne</I> <li>Urd: <I>كون اس كو پیار كرتا ہے</I> </ul> </div> </div></TD>-</TR>-<TR>-<TD><CODE>mkQCl</CODE></TD>-<TD><A HREF="#IP" TITLE="IP - interrogative pronoun">IP</A> <CODE>-></CODE> <A HREF="#V3" TITLE="V3 - three-place verb">V3</A> <CODE>-></CODE> <A HREF="#NP" TITLE="NP - noun phrase (subject or object)">NP</A> <CODE>-></CODE> <A HREF="#NP" TITLE="NP - noun phrase (subject or object)">NP</A> <CODE>-></CODE> <A HREF="#QCl" TITLE="QCl - question clause, with all tenses">QCl</A></TD>-<TD><div class=reveal> <I>who sends it to her</I> <div class=popup> <ul> <li>API: <CODE>mkQCl who_IP send_V3 it_NP she_NP</CODE> <li>Afr: <I>wie stuur dit na haar</I> <li>Bul: <I>кой праща него до нея</I> <li>Cat: <I>qui ho li envia</I> <li>Dan: <I>hvem sender det til hende</I> <li>Dut: <I>wie stuurt het naar haar</I> <li>Eng: <I>who sends it to her</I> <li>Fin: <I>kuka lähettää sen hänelle</I> <li>Fre: <I>qui le lui envoie</I> <li>Ger: <I>wer schickt es ihr</I> <li>Ita: <I>chi lo le manda</I> <li>Nep: <I>को यो उन्लाई लाई पठाउँछन्</I> <li>Nor: <I>hvem sender det til henne</I> <li>Pes: <I>چه کسی آن را برای او می فرستد</I> <li>Pnb: <I>كون اینوں اونوں پیجدا اے</I> <li>Pol: <I>kto wysyła do niej je</I> <li>Ron: <I>cine i -l trimite</I> <li>Rus: <I>кто посылает ней его</I> <li>Spa: <I>quién lo le manda</I> <li>Swe: <I>vem skickar det till henne</I> <li>Urd: <I>كون اس كو اس كو بھیجتا ہے</I> </ul> </div> </div></TD>-</TR>-<TR>-<TD><CODE>mkQCl</CODE></TD>-<TD><A HREF="#IP" TITLE="IP - interrogative pronoun">IP</A> <CODE>-></CODE> <A HREF="#VV" TITLE="VV - verb-phrase-complement verb">VV</A> <CODE>-></CODE> <A HREF="#VP" TITLE="VP - verb phrase">VP</A> <CODE>-></CODE> <A HREF="#QCl" TITLE="QCl - question clause, with all tenses">QCl</A></TD>-<TD><div class=reveal> <I>who wants to sleep</I> <div class=popup> <ul> <li>API: <CODE>mkQCl who_IP want_VV (mkVP sleep_V)</CODE> <li>Afr: <I>wie wil slaap</I> <li>Bul: <I>кой иска да спи</I> <li>Cat: <I>qui vol dormir</I> <li>Dan: <I>hvem vil sove</I> <li>Dut: <I>wie wil slapen</I> <li>Eng: <I>who wants to sleep</I> <li>Fin: <I>kuka tahtoo nukkua</I> <li>Fre: <I>qui veut dormir</I> <li>Ger: <I>wer will schlafen</I> <li>Ita: <I>chi vuole dormire</I> <li>Nep: <I>को सुत्न चाहन्छन्</I> <li>Nor: <I>hvem vil sove</I> <li>Pes: <I>چه کسی می خواهد بخوابد</I> <li>Pnb: <I>كون سونا چاندا اے</I> <li>Pol: <I>kto chce spać</I> <li>Ron: <I>cine vrea sã doarmă</I> <li>Rus: <I>кто хочет спать</I> <li>Spa: <I>quién quiere dormir</I> <li>Swe: <I>vem vill sova</I> <li>Urd: <I>كون سونا چاہتا ہے</I> </ul> </div> </div></TD>-</TR>-<TR>-<TD><CODE>mkQCl</CODE></TD>-<TD><A HREF="#IP" TITLE="IP - interrogative pronoun">IP</A> <CODE>-></CODE> <A HREF="#VS" TITLE="VS - sentence-complement verb">VS</A> <CODE>-></CODE> <A HREF="#S" TITLE="S - declarative sentence">S</A> <CODE>-></CODE> <A HREF="#QCl" TITLE="QCl - question clause, with all tenses">QCl</A></TD>-<TD><div class=reveal> <I>who says that I sleep</I> <div class=popup> <ul> <li>API: <CODE>mkQCl who_IP say_VS (mkS (mkCl i_NP sleep_V))</CODE> <li>Afr: <I>wie sê dat ek slaap</I> <li>Bul: <I>кой казва , че аз спя</I> <li>Cat: <I>qui diu que jo dormo</I> <li>Dan: <I>hvem siger at jeg sover</I> <li>Dut: <I>wie zegt dat ik slaap</I> <li>Eng: <I>who says that I sleep</I> <li>Fin: <I>kuka sanoo että minä nukun</I> <li>Fre: <I>qui dit que je dors</I> <li>Ger: <I>wer sagt daß ich schlafe</I> <li>Ita: <I>chi dice che io dormo</I> <li>Nep: <I>को भन्छन्की म सुत्छु</I> <li>Nor: <I>hvem sier at jeg sover</I> <li>Pes: <I>چه کسی می گوید که من می خوابم</I> <li>Pnb: <I>كون كہدا اے كہ میں سوندا واں</I> <li>Pol: <I>kto mówi , że ja śpię</I> <li>Ron: <I>cine spune cã eu dorm</I> <li>Rus: <I>кто говордит , что я сплю</I> <li>Spa: <I>quién dice que yo duermo</I> <li>Swe: <I>vem säger att jag sover</I> <li>Urd: <I>كون كہتا ہے كہ میں سوتا ہوں</I> </ul> </div> </div></TD>-</TR>-<TR>-<TD><CODE>mkQCl</CODE></TD>-<TD><A HREF="#IP" TITLE="IP - interrogative pronoun">IP</A> <CODE>-></CODE> <A HREF="#VQ" TITLE="VQ - question-complement verb">VQ</A> <CODE>-></CODE> <A HREF="#QS" TITLE="QS - question">QS</A> <CODE>-></CODE> <A HREF="#QCl" TITLE="QCl - question clause, with all tenses">QCl</A></TD>-<TD><div class=reveal> <I>who wonders who sleeps</I> <div class=popup> <ul> <li>API: <CODE>mkQCl who_IP wonder_VQ (mkQS (mkQCl who_IP sleep_V))</CODE> <li>Afr: <I>wie vra hom af wie slaap</I> <li>Bul: <I>кой се учудва кой спи</I> <li>Cat: <I>qui se pregunta qui dorm</I> <li>Dan: <I>hvem undres hvem som sover</I> <li>Dut: <I>wie vraagt zich af wie slaapt</I> <li>Eng: <I>who wonders who sleeps</I> <li>Fin: <I>kuka ihmettelee kuka nukkuu</I> <li>Fre: <I>qui se demande qui dort</I> <li>Ger: <I>wer wundert sich wer schläft</I> <li>Ita: <I>chi si domanda chi dorme</I> <li>Nep: <I>को अचम्म हुन्छन्की को सुत्छन्</I> <li>Nor: <I>hvem undrer hvem som sover</I> <li>Pes: <I>*</I> <li>Pnb: <I>كون حیران ہوندا اے كہ كون سوندا اے</I> <li>Pol: <I>kto zastanawia się , kto śpi</I> <li>Ron: <I>cine se întreabă cine doarme</I> <li>Rus: <I>кто интересует кто спдит</I> <li>Spa: <I>quién se pregunta quién duerme</I> <li>Swe: <I>vem undrar vem som sover</I> <li>Urd: <I>كون حیران ہوتا ہے كہ كون سوتا ہے</I> </ul> </div> </div></TD>-</TR>-<TR>-<TD><CODE>mkQCl</CODE></TD>-<TD><A HREF="#IP" TITLE="IP - interrogative pronoun">IP</A> <CODE>-></CODE> <A HREF="#VA" TITLE="VA - adjective-complement verb">VA</A> <CODE>-></CODE> <A HREF="#A" TITLE="A - one-place adjective">A</A> <CODE>-></CODE> <A HREF="#QCl" TITLE="QCl - question clause, with all tenses">QCl</A></TD>-<TD><div class=reveal> <I>who becomes old</I> <div class=popup> <ul> <li>API: <CODE>mkQCl who_IP become_VA old_A</CODE> <li>Afr: <I>wie word oud</I> <li>Bul: <I>кой става стар</I> <li>Cat: <I>qui se torna vell</I> <li>Dan: <I>hvem bliver gammel</I> <li>Dut: <I>wie wordt oud</I> <li>Eng: <I>who becomes old</I> <li>Fin: <I>kuka tulee vanhaksi</I> <li>Fre: <I>qui devient vieux</I> <li>Ger: <I>wer wird alt</I> <li>Ita: <I>chi diventa vecchio</I> <li>Nep: <I>को बुढो हुन्छन्</I> <li>Nor: <I>hvem blir gammel</I> <li>Pes: <I>چه کسی پیر می شود</I> <li>Pnb: <I>كون بوڈا بندا اے</I> <li>Pol: <I>kto staje się stary</I> <li>Ron: <I>cine devine vechi</I> <li>Rus: <I>кто становдит старым</I> <li>Spa: <I>quién se converte viejo</I> <li>Swe: <I>vem blir gammal</I> <li>Urd: <I>كون بوڑھا بنتا ہے</I> </ul> </div> </div></TD>-</TR>-<TR>-<TD><CODE>mkQCl</CODE></TD>-<TD><A HREF="#IP" TITLE="IP - interrogative pronoun">IP</A> <CODE>-></CODE> <A HREF="#VA" TITLE="VA - adjective-complement verb">VA</A> <CODE>-></CODE> <A HREF="#AP" TITLE="AP - adjectival phrase">AP</A> <CODE>-></CODE> <A HREF="#QCl" TITLE="QCl - question clause, with all tenses">QCl</A></TD>-<TD><div class=reveal> <I>who becomes very old</I> <div class=popup> <ul> <li>API: <CODE>mkQCl who_IP become_VA (mkAP very_AdA old_A)</CODE> <li>Afr: <I>wie word baie oud</I> <li>Bul: <I>кой става много стар</I> <li>Cat: <I>qui se torna molt vell</I> <li>Dan: <I>hvem bliver meget gammel</I> <li>Dut: <I>wie wordt erg oud</I> <li>Eng: <I>who becomes very old</I> <li>Fin: <I>kuka tulee erittäin vanhaksi</I> <li>Fre: <I>qui devient très vieux</I> <li>Ger: <I>wer wird sehr alt</I> <li>Ita: <I>chi diventa molto vecchio</I> <li>Nep: <I>को धेरै बुढो हुन्छन्</I> <li>Nor: <I>hvem blir mye gammel</I> <li>Pes: <I>چه کسی خیلی پیر می شود</I> <li>Pnb: <I>كون بہت بوڈا بندا اے</I> <li>Pol: <I>kto staje się bardzo stary</I> <li>Ron: <I>cine devine foarte vechi</I> <li>Rus: <I>кто становдит очень старым</I> <li>Spa: <I>quién se converte muy viejo</I> <li>Swe: <I>vem blir mycket gammal</I> <li>Urd: <I>كون بہت بوڑھا بنتا ہے</I> </ul> </div> </div></TD>-</TR>-<TR>-<TD><CODE>mkQCl</CODE></TD>-<TD><A HREF="#IP" TITLE="IP - interrogative pronoun">IP</A> <CODE>-></CODE> <A HREF="#V2A" TITLE="V2A - verb with NP and AP complement">V2A</A> <CODE>-></CODE> <A HREF="#NP" TITLE="NP - noun phrase (subject or object)">NP</A> <CODE>-></CODE> <A HREF="#A" TITLE="A - one-place adjective">A</A> <CODE>-></CODE> <A HREF="#QCl" TITLE="QCl - question clause, with all tenses">QCl</A></TD>-<TD><div class=reveal> <I>who paints it red</I> <div class=popup> <ul> <li>API: <CODE>mkQCl who_IP paint_V2A it_NP red_A</CODE> <li>Afr: <I>wie skilder dit rooi</I> <li>Bul: <I>кой рисува него червено</I> <li>Cat: <I>qui ho pinta en vermell</I> <li>Dan: <I>hvem maler det rødt</I> <li>Dut: <I>wie schildeert het rood</I> <li>Eng: <I>who paints it red</I> <li>Fin: <I>kuka maalaa sen punaiseksi</I> <li>Fre: <I>qui le peint en rouge</I> <li>Ger: <I>wer malt es rot</I> <li>Ita: <I>chi lo dipinge rosso</I> <li>Nep: <I>को यो लाई रातो रँग लागाउँछन्</I> <li>Nor: <I>hvem maler det rødt</I> <li>Pes: <I>چه کسی آن را قرمز رنگ می کند</I> <li>Pnb: <I>كون اینوں لال رنگ كردا اے</I> <li>Pol: <I>kto maluje je na czerwono</I> <li>Ron: <I>cine îl pictează roşu</I> <li>Rus: <I>кто рисует красным его</I> <li>Spa: <I>quién lo pinta en rojo</I> <li>Swe: <I>vem målar det rött</I> <li>Urd: <I>كون اس كو لال رنگ كرتا ہے</I> </ul> </div> </div></TD>-</TR>-<TR>-<TD><CODE>mkQCl</CODE></TD>-<TD><A HREF="#IP" TITLE="IP - interrogative pronoun">IP</A> <CODE>-></CODE> <A HREF="#V2A" TITLE="V2A - verb with NP and AP complement">V2A</A> <CODE>-></CODE> <A HREF="#NP" TITLE="NP - noun phrase (subject or object)">NP</A> <CODE>-></CODE> <A HREF="#AP" TITLE="AP - adjectival phrase">AP</A> <CODE>-></CODE> <A HREF="#QCl" TITLE="QCl - question clause, with all tenses">QCl</A></TD>-<TD><div class=reveal> <I>who paints it very red</I> <div class=popup> <ul> <li>API: <CODE>mkQCl who_IP paint_V2A it_NP (mkAP very_AdA red_A)</CODE> <li>Afr: <I>wie skilder dit baie rooi</I> <li>Bul: <I>кой рисува него много червено</I> <li>Cat: <I>qui ho pinta en molt vermell</I> <li>Dan: <I>hvem maler det meget rødt</I> <li>Dut: <I>wie schildeert het erg rood</I> <li>Eng: <I>who paints it very red</I> <li>Fin: <I>kuka maalaa sen erittäin punaiseksi</I> <li>Fre: <I>qui le peint en très rouge</I> <li>Ger: <I>wer malt es sehr rot</I> <li>Ita: <I>chi lo dipinge molto rosso</I> <li>Nep: <I>को यो लाई धेरै रातो रँग लागाउँछन्</I> <li>Nor: <I>hvem maler det mye rødt</I> <li>Pes: <I>چه کسی آن را خیلی قرمز رنگ می کند</I> <li>Pnb: <I>كون اینوں بہت لال رنگ كردا اے</I> <li>Pol: <I>kto maluje je na bardzo czerwono</I> <li>Ron: <I>cine îl pictează foarte roşu</I> <li>Rus: <I>кто рисует очень красным его</I> <li>Spa: <I>quién lo pinta en muy rojo</I> <li>Swe: <I>vem målar det mycket rött</I> <li>Urd: <I>كون اس كو بہت لال رنگ كرتا ہے</I> </ul> </div> </div></TD>-</TR>-<TR>-<TD><CODE>mkQCl</CODE></TD>-<TD><A HREF="#IP" TITLE="IP - interrogative pronoun">IP</A> <CODE>-></CODE> <A HREF="#V2S" TITLE="V2S - verb with NP and S complement">V2S</A> <CODE>-></CODE> <A HREF="#NP" TITLE="NP - noun phrase (subject or object)">NP</A> <CODE>-></CODE> <A HREF="#S" TITLE="S - declarative sentence">S</A> <CODE>-></CODE> <A HREF="#QCl" TITLE="QCl - question clause, with all tenses">QCl</A></TD>-<TD><div class=reveal> <I>who answers to him that we sleep</I> <div class=popup> <ul> <li>API: <CODE>mkQCl who_IP answer_V2S he_NP (mkS (mkCl we_NP sleep_V))</CODE> <li>Afr: <I>wie antwoord hom dat ons slaap</I> <li>Bul: <I>кой отговаря му , че ние спим</I> <li>Cat: <I>qui li respon que nosaltres dormim</I> <li>Dan: <I>hvem svarer til ham at vi sover</I> <li>Dut: <I>wie antwoordt hem dat we slapen</I> <li>Eng: <I>who answers to him that we sleep</I> <li>Fin: <I>kuka vastaa hänelle että me nukumme</I> <li>Fre: <I>qui lui répond que nous dormons</I> <li>Ger: <I>wer antwortet ihm daß wir schlafen</I> <li>Ita: <I>chi gli risponde che noi dormiamo</I> <li>Nep: <I>को उ लाई उत्तर दिन्छन्की हामीहरु सुत्छौँ</I> <li>Nor: <I>hvem svarer til ham at vi sover</I> <li>Pes: <I>چه کسی به او جواب می دهد که ما می خوابیم</I> <li>Pnb: <I>كون اونوں جواب دیندا اے كہ اسی سوندے واں</I> <li>Pol: <I>kto odpowiada jemu , że my śpimy</I> <li>Ron: <I>cine îi răspunde cã noi dormim</I> <li>Rus: <I>кто отвечает , что мы спдим его</I> <li>Spa: <I>quién le responde que nosotros dormimos</I> <li>Swe: <I>vem svarar till honom att vi sover</I> <li>Urd: <I>كون اس كو جواب دیتا ہے كہ ہم سوتے ہیں</I> </ul> </div> </div></TD>-</TR>-<TR>-<TD><CODE>mkQCl</CODE></TD>-<TD><A HREF="#IP" TITLE="IP - interrogative pronoun">IP</A> <CODE>-></CODE> <A HREF="#V2Q" TITLE="V2Q - verb with NP and Q complement">V2Q</A> <CODE>-></CODE> <A HREF="#NP" TITLE="NP - noun phrase (subject or object)">NP</A> <CODE>-></CODE> <A HREF="#QS" TITLE="QS - question">QS</A> <CODE>-></CODE> <A HREF="#QCl" TITLE="QCl - question clause, with all tenses">QCl</A></TD>-<TD><div class=reveal> <I>who asks him who sleeps</I> <div class=popup> <ul> <li>API: <CODE>mkQCl who_IP ask_V2Q he_NP (mkQS (mkQCl who_IP sleep_V))</CODE> <li>Afr: <I>wie vra hom wie slaap</I> <li>Bul: <I>кой пита него кой спи</I> <li>Cat: <I>qui li pregunta qui dorm</I> <li>Dan: <I>hvem spørger ham hvem som sover</I> <li>Dut: <I>wie vraagt hem wie slaapt</I> <li>Eng: <I>who asks him who sleeps</I> <li>Fin: <I>kuka kysyy häneltä kuka nukkuu</I> <li>Fre: <I>qui lui demande qui dort</I> <li>Ger: <I>wer fragt ihn wer schläft</I> <li>Ita: <I>chi gli chiede chi dorme</I> <li>Nep: <I>को उ सँग सोध्छन्की को सुत्छन्</I> <li>Nor: <I>hvem spørr ham hvem som sover</I> <li>Pes: <I>چه کسی از او می پرسد چه کسی می خوابد</I> <li>Pnb: <I>كون اونوں پچھدا اے كہ كون سوندا اے</I> <li>Pol: <I>kto pyta jego , kto śpi</I> <li>Ron: <I>cine îl întreabă cine doarme</I> <li>Rus: <I>кто спрашивает кто спдит его</I> <li>Spa: <I>quién le pregunta quién duerme</I> <li>Swe: <I>vem frågar honom vem som sover</I> <li>Urd: <I>كون اس سے پوچھتا ہے كہ كون سوتا ہے</I> </ul> </div> </div></TD>-</TR>-<TR>-<TD><CODE>mkQCl</CODE></TD>-<TD><A HREF="#IP" TITLE="IP - interrogative pronoun">IP</A> <CODE>-></CODE> <A HREF="#V2V" TITLE="V2V - verb with NP and V complement">V2V</A> <CODE>-></CODE> <A HREF="#NP" TITLE="NP - noun phrase (subject or object)">NP</A> <CODE>-></CODE> <A HREF="#VP" TITLE="VP - verb phrase">VP</A> <CODE>-></CODE> <A HREF="#QCl" TITLE="QCl - question clause, with all tenses">QCl</A></TD>-<TD><div class=reveal> <I>who begs him to sleep</I> <div class=popup> <ul> <li>API: <CODE>mkQCl who_IP beg_V2V he_NP (mkVP sleep_V)</CODE> <li>Afr: <I>wie smeek hom te slaap</I> <li>Bul: <I>кой моли него да спи</I> <li>Cat: <I>qui el demana a dormir</I> <li>Dan: <I>hvem beder ham at sove</I> <li>Dut: <I>wie smeekt hem te slapen</I> <li>Eng: <I>who begs him to sleep</I> <li>Fin: <I>kuka pyytää häntä nukkumaan</I> <li>Fre: <I>qui le demande à dormir</I> <li>Ger: <I>wer bittet ihn zu schlafen</I> <li>Ita: <I>chi lo prega di dormire</I> <li>Nep: <I>को उ लाई सुत्न आग्रह गर्छन्</I> <li>Nor: <I>hvem ber ham att sove</I> <li>Pes: <I>چه کسی از او خواهش می کند بخوابد</I> <li>Pnb: <I>كون اونوں سونا دی مانگدا اے</I> <li>Pol: <I>*</I> <li>Ron: <I>cine îl roagă sã doarmă</I> <li>Rus: <I>кто просит спать его</I> <li>Spa: <I>quién lo roga a dormir</I> <li>Swe: <I>vem ber honom att sova</I> <li>Urd: <I>كون اس سے سونے كی التجا كرتا ہے</I> </ul> </div> </div></TD>-</TR>-<TR>-<TD><CODE>mkQCl</CODE></TD>-<TD><A HREF="#IP" TITLE="IP - interrogative pronoun">IP</A> <CODE>-></CODE> <A HREF="#A" TITLE="A - one-place adjective">A</A> <CODE>-></CODE> <A HREF="#QCl" TITLE="QCl - question clause, with all tenses">QCl</A></TD>-<TD><div class=reveal> <I>who is old</I> <div class=popup> <ul> <li>API: <CODE>mkQCl who_IP old_A</CODE> <li>Afr: <I>wie is oud</I> <li>Bul: <I>кой е стар</I> <li>Cat: <I>qui és vell</I> <li>Dan: <I>hvem er gammel</I> <li>Dut: <I>wie is oud</I> <li>Eng: <I>who is old</I> <li>Fin: <I>kuka on vanha</I> <li>Fre: <I>qui est vieux</I> <li>Ger: <I>wer ist alt</I> <li>Ita: <I>chi è vecchio</I> <li>Nep: <I>को बुढो छन्</I> <li>Nor: <I>hvem er gammel</I> <li>Pes: <I>چه کسی پیر است</I> <li>Pnb: <I>كون بوڈا اے</I> <li>Pol: <I>kto jest stary</I> <li>Ron: <I>cine este vechi</I> <li>Rus: <I>кто старый</I> <li>Spa: <I>quién es viejo</I> <li>Swe: <I>vem är gammal</I> <li>Urd: <I>كون بوڑھا ہے</I> </ul> </div> </div></TD>-</TR>-<TR>-<TD><CODE>mkQCl</CODE></TD>-<TD><A HREF="#IP" TITLE="IP - interrogative pronoun">IP</A> <CODE>-></CODE> <A HREF="#A" TITLE="A - one-place adjective">A</A> <CODE>-></CODE> <A HREF="#NP" TITLE="NP - noun phrase (subject or object)">NP</A> <CODE>-></CODE> <A HREF="#QCl" TITLE="QCl - question clause, with all tenses">QCl</A></TD>-<TD><div class=reveal> <I>who is older than he</I> <div class=popup> <ul> <li>API: <CODE>mkQCl who_IP old_A he_NP</CODE> <li>Afr: <I>wie is ouer as hy</I> <li>Bul: <I>кой е по - стар от него</I> <li>Cat: <I>qui és més vell que ell</I> <li>Dan: <I>hvem er ældre end han</I> <li>Dut: <I>wie is ouder dan hij</I> <li>Eng: <I>who is older than he</I> <li>Fin: <I>kuka on vanhempi kuin hän</I> <li>Fre: <I>qui est plus vieux que lui</I> <li>Ger: <I>wer ist älter als er</I> <li>Ita: <I>chi è più vecchio di lui</I> <li>Nep: <I>को उ भन्दा बुढो छन्</I> <li>Nor: <I>hvem er eldre enn han</I> <li>Pes: <I>چه کسی پیر تر از او است</I> <li>Pnb: <I>كون اورے توں بوڈا اے</I> <li>Pol: <I>kto jest starszy niż on</I> <li>Ron: <I>cine este mai vechi decât el</I> <li>Rus: <I>кто старше него</I> <li>Spa: <I>quién es más viejo que él</I> <li>Swe: <I>vem är äldre än han</I> <li>Urd: <I>كون اس سے بوڑھا ہے</I> </ul> </div> </div></TD>-</TR>-<TR>-<TD><CODE>mkQCl</CODE></TD>-<TD><A HREF="#IP" TITLE="IP - interrogative pronoun">IP</A> <CODE>-></CODE> <A HREF="#A2" TITLE="A2 - two-place adjective">A2</A> <CODE>-></CODE> <A HREF="#NP" TITLE="NP - noun phrase (subject or object)">NP</A> <CODE>-></CODE> <A HREF="#QCl" TITLE="QCl - question clause, with all tenses">QCl</A></TD>-<TD><div class=reveal> <I>who is married to him</I> <div class=popup> <ul> <li>API: <CODE>mkQCl who_IP married_A2 he_NP</CODE> <li>Afr: <I>wie is getroud met hom</I> <li>Bul: <I>кой е женен за него</I> <li>Cat: <I>qui és casata a ell</I> <li>Dan: <I>hvem er gift med ham</I> <li>Dut: <I>wie is getrouwd met hem</I> <li>Eng: <I>who is married to him</I> <li>Fin: <I>kuka on avioitunut hänen kanssa</I> <li>Fre: <I>qui est marié à lui</I> <li>Ger: <I>wer ist verheiratet mit ihm</I> <li>Ita: <I>chi è sposato con lui</I> <li>Nep: <I>को उ सँग विवाहित छन्</I> <li>Nor: <I>hvem er gift med ham</I> <li>Pes: <I>چه کسی او متأهل است</I> <li>Pnb: <I>*</I> <li>Pol: <I>kto jest zaślubiony jemu</I> <li>Ron: <I>cine este căsătorit cu el</I> <li>Rus: <I>кто замужем за им</I> <li>Spa: <I>quién es casado a él</I> <li>Swe: <I>vem är gift med honom</I> <li>Urd: <I>كون اس سے [شادی كرنa] ہے</I> </ul> </div> </div></TD>-</TR>-<TR>-<TD><CODE>mkQCl</CODE></TD>-<TD><A HREF="#IP" TITLE="IP - interrogative pronoun">IP</A> <CODE>-></CODE> <A HREF="#AP" TITLE="AP - adjectival phrase">AP</A> <CODE>-></CODE> <A HREF="#QCl" TITLE="QCl - question clause, with all tenses">QCl</A></TD>-<TD><div class=reveal> <I>who is very old</I> <div class=popup> <ul> <li>API: <CODE>mkQCl who_IP (mkAP very_AdA old_A)</CODE> <li>Afr: <I>wie is baie oud</I> <li>Bul: <I>кой е много стар</I> <li>Cat: <I>qui és molt vell</I> <li>Dan: <I>hvem er meget gammel</I> <li>Dut: <I>wie is erg oud</I> <li>Eng: <I>who is very old</I> <li>Fin: <I>kuka on erittäin vanha</I> <li>Fre: <I>qui est très vieux</I> <li>Ger: <I>wer ist sehr alt</I> <li>Ita: <I>chi è molto vecchio</I> <li>Nep: <I>को धेरै बुढो छन्</I> <li>Nor: <I>hvem er mye gammel</I> <li>Pes: <I>چه کسی خیلی پیر است</I> <li>Pnb: <I>كون بہت بوڈا اے</I> <li>Pol: <I>kto jest bardzo stary</I> <li>Ron: <I>cine este foarte vechi</I> <li>Rus: <I>кто очень старый</I> <li>Spa: <I>quién es muy viejo</I> <li>Swe: <I>vem är mycket gammal</I> <li>Urd: <I>كون بہت بوڑھا ہے</I> </ul> </div> </div></TD>-</TR>-<TR>-<TD><CODE>mkQCl</CODE></TD>-<TD><A HREF="#IP" TITLE="IP - interrogative pronoun">IP</A> <CODE>-></CODE> <A HREF="#NP" TITLE="NP - noun phrase (subject or object)">NP</A> <CODE>-></CODE> <A HREF="#QCl" TITLE="QCl - question clause, with all tenses">QCl</A></TD>-<TD><div class=reveal> <I>who is the woman</I> <div class=popup> <ul> <li>API: <CODE>mkQCl who_IP (mkNP the_Det woman_N)</CODE> <li>Afr: <I>wie is die vrou</I> <li>Bul: <I>кой е жената</I> <li>Cat: <I>qui és la dona</I> <li>Dan: <I>hvem er kvinden</I> <li>Dut: <I>wie is de vrouw</I> <li>Eng: <I>who is the woman</I> <li>Fin: <I>kuka on nainen</I> <li>Fre: <I>qui est la femme</I> <li>Ger: <I>wer ist die Frau</I> <li>Ita: <I>chi è la donna</I> <li>Nep: <I>को आईमाई हुन्</I> <li>Nor: <I>hvem er kvinna</I> <li>Pes: <I>چه کسی زن است</I> <li>Pnb: <I>كون زنانی اے</I> <li>Pol: <I>kto jest kobietą</I> <li>Ron: <I>cine este femeia</I> <li>Rus: <I>кто женщина</I> <li>Spa: <I>quién es la mujer</I> <li>Swe: <I>vem är kvinnan</I> <li>Urd: <I>كون عورت ہے</I> </ul> </div> </div></TD>-</TR>-<TR>-<TD><CODE>mkQCl</CODE></TD>-<TD><A HREF="#IP" TITLE="IP - interrogative pronoun">IP</A> <CODE>-></CODE> <A HREF="#N" TITLE="N - common noun">N</A> <CODE>-></CODE> <A HREF="#QCl" TITLE="QCl - question clause, with all tenses">QCl</A></TD>-<TD><div class=reveal> <I>who is a woman</I> <div class=popup> <ul> <li>API: <CODE>mkQCl who_IP woman_N</CODE> <li>Afr: <I>wie is 'n vrou</I> <li>Bul: <I>кой е жена</I> <li>Cat: <I>qui és una dona</I> <li>Dan: <I>hvem er en kvinde</I> <li>Dut: <I>wie is vrouw</I> <li>Eng: <I>who is a woman</I> <li>Fin: <I>kuka on nainen</I> <li>Fre: <I>qui est une femme</I> <li>Ger: <I>wer ist eine Frau</I> <li>Ita: <I>chi è una donna</I> <li>Nep: <I>को आईमाई हुन्</I> <li>Nor: <I>hvem er ei kvinne</I> <li>Pes: <I>چه کسی زن است</I> <li>Pnb: <I>كون زنانی اے</I> <li>Pol: <I>kto jest kobieta</I> <li>Ron: <I>cine este femeie</I> <li>Rus: <I>кто женщина</I> <li>Spa: <I>quién es una mujer</I> <li>Swe: <I>vem är en kvinna</I> <li>Urd: <I>كون عورت ہے</I> </ul> </div> </div></TD>-</TR>-<TR>-<TD><CODE>mkQCl</CODE></TD>-<TD><A HREF="#IP" TITLE="IP - interrogative pronoun">IP</A> <CODE>-></CODE> <A HREF="#CN" TITLE="CN - common noun (without determiner)">CN</A> <CODE>-></CODE> <A HREF="#QCl" TITLE="QCl - question clause, with all tenses">QCl</A></TD>-<TD><div class=reveal> <I>who is an old woman</I> <div class=popup> <ul> <li>API: <CODE>mkQCl who_IP (mkCN old_A woman_N)</CODE> <li>Afr: <I>wie is 'n oud vrou</I> <li>Bul: <I>кой е стара жена</I> <li>Cat: <I>qui és una dona vell</I> <li>Dan: <I>hvem er en gammel kvinde</I> <li>Dut: <I>wie is oude vrouw</I> <li>Eng: <I>who is an old woman</I> <li>Fin: <I>kuka on vanha nainen</I> <li>Fre: <I>qui est une vieille femme</I> <li>Ger: <I>wer ist eine alte Frau</I> <li>Ita: <I>chi è una vecchia donna</I> <li>Nep: <I>को बुढी आईमाई हुन्</I> <li>Nor: <I>hvem er ei gammel kvinne</I> <li>Pes: <I>چه کسی زن پیر است</I> <li>Pnb: <I>كون بوڈی زنانی اے</I> <li>Pol: <I>kto jest stara kobieta</I> <li>Ron: <I>cine este femeie veche</I> <li>Rus: <I>кто старая женщина</I> <li>Spa: <I>quién es una vieja mujer</I> <li>Swe: <I>vem är en gammal kvinna</I> <li>Urd: <I>كون بوڑھی عورت ہے</I> </ul> </div> </div></TD>-</TR>-<TR>-<TD><CODE>mkQCl</CODE></TD>-<TD><A HREF="#IP" TITLE="IP - interrogative pronoun">IP</A> <CODE>-></CODE> <A HREF="#Adv" TITLE="Adv - verb-phrase-modifying adverb">Adv</A> <CODE>-></CODE> <A HREF="#QCl" TITLE="QCl - question clause, with all tenses">QCl</A></TD>-<TD><div class=reveal> <I>who is here</I> <div class=popup> <ul> <li>API: <CODE>mkQCl who_IP here_Adv</CODE> <li>Afr: <I>wie is hier</I> <li>Bul: <I>кой е тук</I> <li>Cat: <I>qui és aquí</I> <li>Dan: <I>hvem er her</I> <li>Dut: <I>wie is hier</I> <li>Eng: <I>who is here</I> <li>Fin: <I>kuka on täällä</I> <li>Fre: <I>qui est ici</I> <li>Ger: <I>wer ist hier</I> <li>Ita: <I>chi è quà</I> <li>Nep: <I>को यहाँ छन्</I> <li>Nor: <I>hvem er her</I> <li>Pes: <I>چه کسی اینجا است</I> <li>Pnb: <I>كون ایتھے اے</I> <li>Pol: <I>kto jest tutaj</I> <li>Ron: <I>cine este aici</I> <li>Rus: <I>кто здесь</I> <li>Spa: <I>quién es aquí</I> <li>Swe: <I>vem är här</I> <li>Urd: <I>كون یہاں ہے</I> </ul> </div> </div></TD>-</TR>-<TR>-<TD><CODE>mkQCl</CODE></TD>-<TD><A HREF="#IP" TITLE="IP - interrogative pronoun">IP</A> <CODE>-></CODE> <A HREF="#NP" TITLE="NP - noun phrase (subject or object)">NP</A> <CODE>-></CODE> <A HREF="#V2" TITLE="V2 - two-place verb">V2</A> <CODE>-></CODE> <A HREF="#QCl" TITLE="QCl - question clause, with all tenses">QCl</A></TD>-<TD><div class=reveal> <I>who is her</I> <div class=popup> <ul> <li>API: <CODE>mkQCl who_IP she_NP</CODE> <li>Afr: <I>wie is sy</I> <li>Bul: <I>кой е нея</I> <li>Cat: <I>qui és ella</I> <li>Dan: <I>hvem er hende</I> <li>Dut: <I>wie is ze</I> <li>Eng: <I>who is her</I> <li>Fin: <I>kuka on hän</I> <li>Fre: <I>qui est elle</I> <li>Ger: <I>wer ist sie</I> <li>Ita: <I>chi è lei</I> <li>Nep: <I>को उनी हुन्</I> <li>Nor: <I>hvem er henne</I> <li>Pes: <I>چه کسی او است</I> <li>Pnb: <I>كون اونوں اے</I> <li>Pol: <I>kto jest nią</I> <li>Ron: <I>cine este ea</I> <li>Rus: <I>кто она</I> <li>Spa: <I>quién es ella</I> <li>Swe: <I>vem är henne</I> <li>Urd: <I>كون وہ ہے</I> </ul> </div> </div></TD>-</TR>-<TR>-<TD><CODE>mkQCl</CODE></TD>-<TD><A HREF="#IP" TITLE="IP - interrogative pronoun">IP</A> <CODE>-></CODE> <A HREF="#ClSlash">ClSlash</A> <CODE>-></CODE> <A HREF="#QCl" TITLE="QCl - question clause, with all tenses">QCl</A></TD>-<TD><div class=reveal> <I>whom does she love today</I> <div class=popup> <ul> <li>API: <CODE>mkQCl who_IP (mkClSlash (mkClSlash she_NP love_V2) today_Adv)</CODE> <li>Afr: <I>wie het sy lief vandag</I> <li>Bul: <I>кого обича тя днес</I> <li>Cat: <I>qui estima ella avui</I> <li>Dan: <I>hvem elsker hun idag</I> <li>Dut: <I>wie heeft ze lief vandaag</I> <li>Eng: <I>whom does she love today</I> <li>Fin: <I>ketä hän rakastaa tänään</I> <li>Fre: <I>qui aime elle aujourd'hui</I> <li>Ger: <I>wen liebt sie heute</I> <li>Ita: <I>chi ama lei oggi</I> <li>Nep: <I>कासलाई आज उनी माया गर्छिन्</I> <li>Nor: <I>hvem elsker hun idag</I> <li>Pes: <I>چه کسی را امروز او دوست دارد</I> <li>Pnb: <I>كون اج او پیار كردی اے</I> <li>Pol: <I>kogo dziś kocha ona</I> <li>Ron: <I>pe cine iubeşte ea astăzi</I> <li>Rus: <I>*</I> <li>Spa: <I>quién ama ella hoy</I> <li>Swe: <I>vem älskar hon idag</I> <li>Urd: <I>كون آج وہ پیار كرتی ہے</I> </ul> </div> </div></TD>-</TR>-<TR>-<TD><CODE>mkQCl</CODE></TD>-<TD><A HREF="#IAdv" TITLE="IAdv - interrogative adverb">IAdv</A> <CODE>-></CODE> <A HREF="#Cl" TITLE="Cl - declarative clause, with all tenses">Cl</A> <CODE>-></CODE> <A HREF="#QCl" TITLE="QCl - question clause, with all tenses">QCl</A></TD>-<TD><div class=reveal> <I>why does she sleep</I> <div class=popup> <ul> <li>API: <CODE>mkQCl why_IAdv (mkCl she_NP sleep_V)</CODE> <li>Afr: <I>waarom slaap sy</I> <li>Bul: <I>защо спи тя</I> <li>Cat: <I>per quË dorm ella</I> <li>Dan: <I>hvorfor sover hun</I> <li>Dut: <I>waarom slaapt ze</I> <li>Eng: <I>why does she sleep</I> <li>Fin: <I>miksi hän nukkuu</I> <li>Fre: <I>pourquoi dort elle</I> <li>Ger: <I>warum schläft sie</I> <li>Ita: <I>perché dorme lei</I> <li>Nep: <I>किन उनी सुत्छिन्</I> <li>Nor: <I>hvorfor sover hun</I> <li>Pes: <I>چرا او می خوابد</I> <li>Pnb: <I>كیوں او سوندی اے</I> <li>Pol: <I>dlaczego ona śpi</I> <li>Ron: <I>de ce doarme ea</I> <li>Rus: <I>почему она спдит</I> <li>Spa: <I>porqué duerme ella</I> <li>Swe: <I>varför sover hon</I> <li>Urd: <I>كیوں وہ سوتی ہے</I> </ul> </div> </div></TD>-</TR>-<TR>-<TD><CODE>mkQCl</CODE></TD>-<TD><A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A> <CODE>-></CODE> <A HREF="#IP" TITLE="IP - interrogative pronoun">IP</A> <CODE>-></CODE> <A HREF="#Cl" TITLE="Cl - declarative clause, with all tenses">Cl</A> <CODE>-></CODE> <A HREF="#QCl" TITLE="QCl - question clause, with all tenses">QCl</A></TD>-<TD><div class=reveal> <I>with whom does she sleep</I> <div class=popup> <ul> <li>API: <CODE>mkQCl with_Prep who_IP (mkCl she_NP sleep_V)</CODE> <li>Afr: <I>met wie slaap sy</I> <li>Bul: <I>с кой спи тя</I> <li>Cat: <I>amb qui dorm ella</I> <li>Dan: <I>med hvem sover hun</I> <li>Dut: <I>met wie slaapt ze</I> <li>Eng: <I>with whom does she sleep</I> <li>Fin: <I>kenen kanssa hän nukkuu</I> <li>Fre: <I>avec qui dort elle</I> <li>Ger: <I>mit wem schläft sie</I> <li>Ita: <I>con chi dorme lei</I> <li>Nep: <I>को सँग उनी सुत्छिन्</I> <li>Nor: <I>med hvem sover hun</I> <li>Pes: <I>با چه کسی او می خوابد</I> <li>Pnb: <I>كرا دے نال او سوندی اے</I> <li>Pol: <I>z kim ona śpi</I> <li>Ron: <I>cu cine doarme ea</I> <li>Rus: <I>с кто она спдит</I> <li>Spa: <I>con quién duerme ella</I> <li>Swe: <I>med vem sover hon</I> <li>Urd: <I>كس كے ساتھ وہ سوتی ہے</I> </ul> </div> </div></TD>-</TR>-<TR>-<TD><CODE>mkQCl</CODE></TD>-<TD><A HREF="#IAdv" TITLE="IAdv - interrogative adverb">IAdv</A> <CODE>-></CODE> <A HREF="#NP" TITLE="NP - noun phrase (subject or object)">NP</A> <CODE>-></CODE> <A HREF="#QCl" TITLE="QCl - question clause, with all tenses">QCl</A></TD>-<TD><div class=reveal> <I>where is she</I> <div class=popup> <ul> <li>API: <CODE>mkQCl where_IAdv she_NP</CODE> <li>Afr: <I>waar is sy</I> <li>Bul: <I>къде е тя</I> <li>Cat: <I>on és ella</I> <li>Dan: <I>hvor er hun</I> <li>Dut: <I>waar is ze</I> <li>Eng: <I>where is she</I> <li>Fin: <I>missä hän on</I> <li>Fre: <I>où est elle</I> <li>Ger: <I>wo ist sie</I> <li>Ita: <I>dove è lei</I> <li>Nep: <I>उनी कहाँ छिन्</I> <li>Nor: <I>hvor er hun</I> <li>Pes: <I>او کجا است</I> <li>Pnb: <I>او كتھے اے</I> <li>Pol: <I>gdzie jest ona</I> <li>Ron: <I>unde este ea</I> <li>Rus: <I>где она</I> <li>Spa: <I>donde es ella</I> <li>Swe: <I>var är hon</I> <li>Urd: <I>وہ كہاں ہے</I> </ul> </div> </div></TD>-</TR>-<TR>-<TD><CODE>mkQCl</CODE></TD>-<TD><A HREF="#IComp" TITLE="IComp - interrogative complement of copula">IComp</A> <CODE>-></CODE> <A HREF="#NP" TITLE="NP - noun phrase (subject or object)">NP</A> <CODE>-></CODE> <A HREF="#QCl" TITLE="QCl - question clause, with all tenses">QCl</A></TD>-<TD><div class=reveal> <I>who is this man</I> <div class=popup> <ul> <li>API: <CODE>mkQCl (mkIComp who_IP) (mkNP this_Det man_N)</CODE> <li>Afr: <I>wie is hierdie man</I> <li>Bul: <I>кой е този мъж</I> <li>Cat: <I>qui és aquest home</I> <li>Dan: <I>hvem er denne mand</I> <li>Dut: <I>wie is deze man</I> <li>Eng: <I>who is this man</I> <li>Fin: <I>kuka tämä mies on</I> <li>Fre: <I>qui est cet homme</I> <li>Ger: <I>wer ist dieser Mann</I> <li>Ita: <I>chi è questo uomo</I> <li>Nep: <I>यो मान्छे को छ</I> <li>Nor: <I>hvem er denne mannen</I> <li>Pes: <I>این مرد چه کسی است</I> <li>Pnb: <I>اے بندہ كون اے</I> <li>Pol: <I>kim jest ten mężczyzna</I> <li>Ron: <I>cine este acest om</I> <li>Rus: <I>кто этот человек</I> <li>Spa: <I>quién es este hombre</I> <li>Swe: <I>vem är den här mannen</I> <li>Urd: <I>یہ آدمی كون ہے</I> </ul> </div> </div></TD>-</TR>-<TR>-<TD><CODE>mkQCl</CODE></TD>-<TD><A HREF="#IP" TITLE="IP - interrogative pronoun">IP</A> <CODE>-></CODE> <A HREF="#QCl" TITLE="QCl - question clause, with all tenses">QCl</A></TD>-<TD><div class=reveal> <I>which city is there</I> <div class=popup> <ul> <li>API: <CODE>mkQCl (mkIP which_IQuant city_N)</CODE> <li>Afr: <I>watter stad is daar</I> <li>Bul: <I>кой град е тук</I> <li>Cat: <I>quin ciutat hi ha quin ciutat</I> <li>Dan: <I>hvilken by findes det</I> <li>Dut: <I>welke stad is er</I> <li>Eng: <I>which city is there</I> <li>Fin: <I>mikä kaupunki on olemassa</I> <li>Fre: <I>quelle ville il y a</I> <li>Ger: <I>welche Stadt gibt es</I> <li>Ita: <I>quale città c' è</I> <li>Nep: <I>त्यहाँ कुन शहर छ</I> <li>Nor: <I>hvilken by finnes det</I> <li>Pes: <I>کدام شهر است</I> <li>Pnb: <I>اوتھے كیڑا شہر اے</I> <li>Pol: <I>które miasto jest</I> <li>Ron: <I>care oraş este</I> <li>Rus: <I>который город существует</I> <li>Spa: <I>qué ciudad hay</I> <li>Swe: <I>vilken stad finns det</I> <li>Urd: <I>وہاں كون سا شہر ہے</I> </ul> </div> </div></TD>-</TR>-</TABLE>--<A NAME="QS"></A>-<H2>QS - question</H2>--<TABLE BORDER="1" CELLPADDING="4">-<TR>-<TH>Function</TH>-<TH>Type</TH>-<TH COLSPAN="2">Example</TH>-</TR>-<TR>-<TD><CODE>mkQS</CODE></TD>-<TD>(<A HREF="#Tense" TITLE="Tense - tense">Tense</A>) <CODE>-></CODE> (<A HREF="#Ant" TITLE="Ant - anteriority">Ant</A>) <CODE>-></CODE> (<A HREF="#Pol" TITLE="Pol - polarity">Pol</A>) <CODE>-></CODE> <A HREF="#QCl" TITLE="QCl - question clause, with all tenses">QCl</A> <CODE>-></CODE> <A HREF="#QS" TITLE="QS - question">QS</A></TD>-<TD><div class=reveal> <I>who wouldn't have slept</I> <div class=popup> <ul> <li>API: <CODE>mkQS conditionalTense anteriorAnt negativePol (mkQCl who_IP sleep_V)</CODE> <li>Afr: <I>wie sou nie nie geslaap het</I> <li>Bul: <I>кой не би спал</I> <li>Cat: <I>qui no hauria dormit</I> <li>Dan: <I>hvem ville ikke have sovet</I> <li>Dut: <I>wie zou niet geslapen hebben</I> <li>Eng: <I>who wouldn't have slept</I> <li>Fin: <I>kuka ei olisi nukkunut</I> <li>Fre: <I>qui n' aurait pas dormi</I> <li>Ger: <I>wer würde nicht geschlafen haben</I> <li>Ita: <I>chi non avrebbe dormito</I> <li>Nep: <I>को सुतेकाहुन्थे</I> <li>Nor: <I>hvem ville ikke ha sovet</I> <li>Pes: <I>چه کسی نمی خوابید</I> <li>Pnb: <I>كون نا ژاید سو ے</I> <li>Pol: <I>kto nie spałby</I> <li>Ron: <I>cine nu ar fi dormit</I> <li>Rus: <I>кто спал бы</I> <li>Spa: <I>quién no habría dormido</I> <li>Swe: <I>vem skulle inte ha sovit</I> <li>Urd: <I>كون نا شاید سو ے</I> </ul> </div> </div></TD>-</TR>-<TR>-<TD><CODE>mkQS</CODE></TD>-<TD><A HREF="#Cl" TITLE="Cl - declarative clause, with all tenses">Cl</A> <CODE>-></CODE> <A HREF="#QS" TITLE="QS - question">QS</A></TD>-<TD><div class=reveal> <I>does she sleep</I> <div class=popup> <ul> <li>API: <CODE>mkQS (mkCl she_NP sleep_V)</CODE> <li>Afr: <I>slaap sy</I> <li>Bul: <I>тя спи ли</I> <li>Cat: <I>ella dorm</I> <li>Dan: <I>sover hun</I> <li>Dut: <I>slaapt ze</I> <li>Eng: <I>does she sleep</I> <li>Fin: <I>nukkuuko hän</I> <li>Fre: <I>elle dort</I> <li>Ger: <I>schläft sie</I> <li>Ita: <I>lei dorme</I> <li>Nep: <I>के उनी सुत्छिन्</I> <li>Nor: <I>sover hun</I> <li>Pes: <I>آیا او می خوابد</I> <li>Pnb: <I>كی او سوندی اے</I> <li>Pol: <I>czy ona śpi</I> <li>Ron: <I>ea doarme</I> <li>Rus: <I>она спдит</I> <li>Spa: <I>ella duerme</I> <li>Swe: <I>sover hon</I> <li>Urd: <I>كیا وہ سوتی ہے</I> </ul> </div> </div></TD>-</TR>-</TABLE>--<A NAME="Quant"></A>-<H2>Quant - quantifier ('nucleus' of Det)</H2>--<TABLE BORDER="1" CELLPADDING="4">-<TR>-<TH>Function</TH>-<TH>Type</TH>-<TH COLSPAN="2">Example</TH>-</TR>-<TR>-<TD><CODE>a_Quant</CODE></TD>-<TD><A 'HREF="#Quant" TITLE="Quant - quantifier ('nucleus' of Det)"'>Quant</A></TD>-<TD><div class=reveal> <I>a house</I> <div class=popup> <ul> <li>API: <CODE>mkUtt (mkNP a_Quant house_N)</CODE> <li>Afr: <I>'n huis</I> <li>Bul: <I>къща</I> <li>Cat: <I>una casa</I> <li>Dan: <I>et hus</I> <li>Dut: <I>een huis</I> <li>Eng: <I>a house</I> <li>Fin: <I>talo</I> <li>Fre: <I>une maison</I> <li>Ger: <I>ein Haus</I> <li>Ita: <I>una casa</I> <li>Nep: <I>घर</I> <li>Nor: <I>et hus</I> <li>Pes: <I>یک خانه</I> <li>Pnb: <I>گھر</I> <li>Pol: <I>dom</I> <li>Ron: <I>o casă</I> <li>Rus: <I>дом</I> <li>Spa: <I>una casa</I> <li>Swe: <I>ett hus</I> <li>Urd: <I>ایك گھر</I> </ul> </div> </div></TD>-</TR>-<TR>-<TD><CODE>mkQuant</CODE></TD>-<TD><A HREF="#Pron" TITLE="Pron - personal pronoun">Pron</A> <CODE>-></CODE> <A 'HREF="#Quant" TITLE="Quant - quantifier ('nucleus' of Det)"'>Quant</A></TD>-<TD><div class=reveal> <I>my house</I> <div class=popup> <ul> <li>API: <CODE>mkUtt (mkNP (mkQuant i_Pron) house_N)</CODE> <li>Afr: <I>my huis</I> <li>Bul: <I>моята къща</I> <li>Cat: <I>la meva casa</I> <li>Dan: <I>mit hus</I> <li>Dut: <I>mijn huis</I> <li>Eng: <I>my house</I> <li>Fin: <I>minun taloni</I> <li>Fre: <I>ma maison</I> <li>Ger: <I>mein Haus</I> <li>Ita: <I>la mia casa</I> <li>Nep: <I>मेरो घर</I> <li>Nor: <I>mit hus</I> <li>Pes: <I>خانه ی من</I> <li>Pnb: <I>میرا گھر</I> <li>Pol: <I>mój dom</I> <li>Ron: <I>casa mea</I> <li>Rus: <I>моего дом</I> <li>Spa: <I>mi casa</I> <li>Swe: <I>mitt hus</I> <li>Urd: <I>میرا گھر</I> </ul> </div> </div></TD>-</TR>-<TR>-<TD><CODE>no_Quant</CODE></TD>-<TD><A 'HREF="#Quant" TITLE="Quant - quantifier ('nucleus' of Det)"'>Quant</A></TD>-<TD><div class=reveal> <I>no house</I> <div class=popup> <ul> <li>API: <CODE>mkUtt (mkNP no_Quant house_N)</CODE> <li>Afr: <I>geen huis</I> <li>Bul: <I>*</I> <li>Cat: <I>cap casa</I> <li>Dan: <I>*</I> <li>Dut: <I>geen huis</I> <li>Eng: <I>no house</I> <li>Fin: <I>ei mikään talo</I> <li>Fre: <I>aucune maison</I> <li>Ger: <I>kein Haus</I> <li>Ita: <I>nessuna casa</I> <li>Nep: <I>हैन घर</I> <li>Nor: <I>*</I> <li>Pes: <I>*</I> <li>Pnb: <I>كوی نہیں گھر</I> <li>Pol: <I>żaden dom</I> <li>Ron: <I>nicio casă</I> <li>Rus: <I>*</I> <li>Spa: <I>*</I> <li>Swe: <I>inget hus</I> <li>Urd: <I>كوی نہیں گھر</I> </ul> </div> </div></TD>-</TR>-<TR>-<TD><CODE>that_Quant</CODE></TD>-<TD><A 'HREF="#Quant" TITLE="Quant - quantifier ('nucleus' of Det)"'>Quant</A></TD>-<TD><div class=reveal> <I>that house</I> <div class=popup> <ul> <li>API: <CODE>mkNP that_Quant house_N</CODE> <li>Afr: <I>daardie huis</I> <li>Bul: <I>онази къща</I> <li>Cat: <I>// <li>Dan: //det der hus// <li>Dut: //dat huis// <li>Eng: //that house// <li>Fin: //tuo talo// <li>Fre: //</I> <li>Ger: <I>jenes Haus</I> <li>Ita: <I>// <li>Nep: //त्ये घर// <li>Nor: //det der huset// <li>Pes: //آن خانه// <li>Pnb: //{s : ResPnb.NPCase => Str// <li>Pol: //tamtego domu// <li>Ron: //</I> <li>Rus: <I>тот дом</I> <li>Spa: <I>''</I> <li>Swe: <I>det där huset</I> <li>Urd: <I>وہ گھر</I> </ul> </div> </div></TD>-</TR>-<TR>-<TD><CODE>the_Quant</CODE></TD>-<TD><A 'HREF="#Quant" TITLE="Quant - quantifier ('nucleus' of Det)"'>Quant</A></TD>-<TD><div class=reveal> <I>the house</I> <div class=popup> <ul> <li>API: <CODE>mkUtt (mkNP the_Quant house_N)</CODE> <li>Afr: <I>die huis</I> <li>Bul: <I>къщата</I> <li>Cat: <I>la casa</I> <li>Dan: <I>huset</I> <li>Dut: <I>het huis</I> <li>Eng: <I>the house</I> <li>Fin: <I>talo</I> <li>Fre: <I>la maison</I> <li>Ger: <I>das Haus</I> <li>Ita: <I>la casa</I> <li>Nep: <I>घर</I> <li>Nor: <I>huset</I> <li>Pes: <I>خانه</I> <li>Pnb: <I>گھر</I> <li>Pol: <I>dom</I> <li>Ron: <I>casa</I> <li>Rus: <I>дом</I> <li>Spa: <I>la casa</I> <li>Swe: <I>huset</I> <li>Urd: <I>گھر</I> </ul> </div> </div></TD>-</TR>-<TR>-<TD><CODE>this_Quant</CODE></TD>-<TD><A 'HREF="#Quant" TITLE="Quant - quantifier ('nucleus' of Det)"'>Quant</A></TD>-<TD><div class=reveal> <I>this house</I> <div class=popup> <ul> <li>API: <CODE>mkNP this_Quant house_N</CODE> <li>Afr: <I>hierdie huis</I> <li>Bul: <I>тази къща</I> <li>Cat: <I>// <li>Dan: //dette hus// <li>Dut: //dit huis// <li>Eng: //this house// <li>Fin: //tämä talo// <li>Fre: //</I> <li>Ger: <I>dieses Haus</I> <li>Ita: <I>// <li>Nep: //यो घर// <li>Nor: //dette huset// <li>Pes: //این خانه// <li>Pnb: //{s : ResPnb.NPCase => Str// <li>Pol: //tego domu// <li>Ron: //</I> <li>Rus: <I>этот дом</I> <li>Spa: <I>''</I> <li>Swe: <I>det här huset</I> <li>Urd: <I>یہ گھر</I> </ul> </div> </div></TD>-</TR>-</TABLE>--<A NAME="RCl"></A>-<H2>RCl - relative clause, with all tenses</H2>--<TABLE BORDER="1" CELLPADDING="4">-<TR>-<TH>Function</TH>-<TH>Type</TH>-<TH COLSPAN="2">Example</TH>-</TR>-<TR>-<TD><CODE>mkRCl</CODE></TD>-<TD><A HREF="#RP" TITLE="RP - relative pronoun">RP</A> <CODE>-></CODE> <A HREF="#VP" TITLE="VP - verb phrase">VP</A> <CODE>-></CODE> <A HREF="#RCl" TITLE="RCl - relative clause, with all tenses">RCl</A></TD>-<TD><div class=reveal> <I>woman who always sleeps</I> <div class=popup> <ul> <li>API: <CODE>mkCN woman_N (mkRS (mkRCl which_RP (mkVP always_AdV (mkVP sleep_V))))</CODE> <li>Afr: <I>vrou wat altyd altyd slaap</I> <li>Bul: <I>жена която винаги спи</I> <li>Cat: <I>dona que dorm sempre</I> <li>Dan: <I>kvinde som altid sover</I> <li>Dut: <I>vrouw die altijd slaapt</I> <li>Eng: <I>woman who always sleeps</I> <li>Fin: <I>nainen joka nukkuu aina</I> <li>Fre: <I>femme qui dort toujours</I> <li>Ger: <I>Frau die immer schläft</I> <li>Ita: <I>donna che dorme sempre</I> <li>Nep: <I>आईमाई जो सधैँ सुत्छे</I> <li>Nor: <I>kvinne som altid sover</I> <li>Pes: <I>زنی که همیشه می خوابد</I> <li>Pnb: <I>{s : ParamX.Number => ResPnb.Case => Str</I> <li>Pol: <I>kobieta , która zawsze śpi</I> <li>Ron: <I>femeie care doarme mereu</I> <li>Rus: <I>женщина , которая всегда спдит</I> <li>Spa: <I>mujer que duerme siempre</I> <li>Swe: <I>kvinna som alltid sover</I> <li>Urd: <I>عورت جو ہمیشہ سوتی ہے</I> </ul> </div> </div></TD>-</TR>-<TR>-<TD><CODE>mkRCl</CODE></TD>-<TD><A HREF="#RP" TITLE="RP - relative pronoun">RP</A> <CODE>-></CODE> <A HREF="#V" TITLE="V - one-place verb">V</A> <CODE>-></CODE> <A HREF="#RCl" TITLE="RCl - relative clause, with all tenses">RCl</A></TD>-<TD><div class=reveal> <I>woman who sleeps</I> <div class=popup> <ul> <li>API: <CODE>mkCN woman_N (mkRS (mkRCl which_RP sleep_V))</CODE> <li>Afr: <I>vrou wat slaap</I> <li>Bul: <I>жена която спи</I> <li>Cat: <I>dona que dorm</I> <li>Dan: <I>kvinde som sover</I> <li>Dut: <I>vrouw die slaapt</I> <li>Eng: <I>woman who sleeps</I> <li>Fin: <I>nainen joka nukkuu</I> <li>Fre: <I>femme qui dort</I> <li>Ger: <I>Frau die schläft</I> <li>Ita: <I>donna che dorme</I> <li>Nep: <I>आईमाई जो सुत्छे</I> <li>Nor: <I>kvinne som sover</I> <li>Pes: <I>زنی که می خوابد</I> <li>Pnb: <I>{s : ParamX.Number => ResPnb.Case => Str</I> <li>Pol: <I>kobieta , która śpi</I> <li>Ron: <I>femeie care doarme</I> <li>Rus: <I>женщина , которая спдит</I> <li>Spa: <I>mujer que duerme</I> <li>Swe: <I>kvinna som sover</I> <li>Urd: <I>عورت جو سوتی ہے</I> </ul> </div> </div></TD>-</TR>-<TR>-<TD><CODE>mkRCl</CODE></TD>-<TD><A HREF="#RP" TITLE="RP - relative pronoun">RP</A> <CODE>-></CODE> <A HREF="#V2" TITLE="V2 - two-place verb">V2</A> <CODE>-></CODE> <A HREF="#NP" TITLE="NP - noun phrase (subject or object)">NP</A> <CODE>-></CODE> <A HREF="#RCl" TITLE="RCl - relative clause, with all tenses">RCl</A></TD>-<TD><div class=reveal> <I>woman who loves him</I> <div class=popup> <ul> <li>API: <CODE>mkCN woman_N (mkRS (mkRCl which_RP love_V2 he_NP))</CODE> <li>Afr: <I>vrou wat hom lief het</I> <li>Bul: <I>жена която обича него</I> <li>Cat: <I>dona que el estima</I> <li>Dan: <I>kvinde som elsker ham</I> <li>Dut: <I>vrouw die hem lief heeft</I> <li>Eng: <I>woman who loves him</I> <li>Fin: <I>nainen joka rakastaa häntä</I> <li>Fre: <I>femme qui l' aime</I> <li>Ger: <I>Frau die ihn liebt</I> <li>Ita: <I>donna che lo ama</I> <li>Nep: <I>आईमाई जो उ लाई माया गर्छे</I> <li>Nor: <I>kvinne som elsker ham</I> <li>Pes: <I>زنی که او را دوست دارد</I> <li>Pnb: <I>{s : ParamX.Number => ResPnb.Case => Str</I> <li>Pol: <I>kobieta , która kocha jego</I> <li>Ron: <I>femeie care îl iubeşte</I> <li>Rus: <I>женщина , которая любдит его</I> <li>Spa: <I>mujer que lo ama</I> <li>Swe: <I>kvinna som älskar honom</I> <li>Urd: <I>عورت جو اس كو پیار كرتی ہے</I> </ul> </div> </div></TD>-</TR>-<TR>-<TD><CODE>mkRCl</CODE></TD>-<TD><A HREF="#RP" TITLE="RP - relative pronoun">RP</A> <CODE>-></CODE> <A HREF="#V3" TITLE="V3 - three-place verb">V3</A> <CODE>-></CODE> <A HREF="#NP" TITLE="NP - noun phrase (subject or object)">NP</A> <CODE>-></CODE> <A HREF="#NP" TITLE="NP - noun phrase (subject or object)">NP</A> <CODE>-></CODE> <A HREF="#RCl" TITLE="RCl - relative clause, with all tenses">RCl</A></TD>-<TD><div class=reveal> <I>woman who sends it to him</I> <div class=popup> <ul> <li>API: <CODE>mkCN woman_N (mkRS (mkRCl which_RP send_V3 it_NP he_NP))</CODE> <li>Afr: <I>vrou wat dit na hom stuur</I> <li>Bul: <I>жена която праща него до него</I> <li>Cat: <I>dona que ho li envia</I> <li>Dan: <I>kvinde som sender det til ham</I> <li>Dut: <I>vrouw die het naar hem stuurt</I> <li>Eng: <I>woman who sends it to him</I> <li>Fin: <I>nainen joka lähettää sen hänelle</I> <li>Fre: <I>femme qui le lui envoie</I> <li>Ger: <I>Frau die es ihm schickt</I> <li>Ita: <I>donna che lo gli manda</I> <li>Nep: <I>आईमाई जो यो उस्लाई लाई पठाउँछे</I> <li>Nor: <I>kvinne som sender det til ham</I> <li>Pes: <I>زنی که آن را برای او می فرستد</I> <li>Pnb: <I>{s : ParamX.Number => ResPnb.Case => Str</I> <li>Pol: <I>kobieta , która wysyła do niego je</I> <li>Ron: <I>femeie care i -l trimite</I> <li>Rus: <I>женщина , которая посылает нему его</I> <li>Spa: <I>mujer que lo le manda</I> <li>Swe: <I>kvinna som skickar det till honom</I> <li>Urd: <I>عورت جو اس كو اس كو بھیجتی ہے</I> </ul> </div> </div></TD>-</TR>-<TR>-<TD><CODE>mkRCl</CODE></TD>-<TD><A HREF="#RP" TITLE="RP - relative pronoun">RP</A> <CODE>-></CODE> <A HREF="#VV" TITLE="VV - verb-phrase-complement verb">VV</A> <CODE>-></CODE> <A HREF="#VP" TITLE="VP - verb phrase">VP</A> <CODE>-></CODE> <A HREF="#RCl" TITLE="RCl - relative clause, with all tenses">RCl</A></TD>-<TD><div class=reveal> <I>woman who wants to sleep</I> <div class=popup> <ul> <li>API: <CODE>mkCN woman_N (mkRS (mkRCl which_RP want_VV (mkVP sleep_V)))</CODE> <li>Afr: <I>vrou wat slaap wil</I> <li>Bul: <I>жена която иска да спи</I> <li>Cat: <I>dona que vol dormir</I> <li>Dan: <I>kvinde som vil sove</I> <li>Dut: <I>vrouw die slapen wil</I> <li>Eng: <I>woman who wants to sleep</I> <li>Fin: <I>nainen joka tahtoo nukkua</I> <li>Fre: <I>femme qui veut dormir</I> <li>Ger: <I>Frau die schlafen will</I> <li>Ita: <I>donna che vuole dormire</I> <li>Nep: <I>आईमाई जो सुत्न चाहन्छे</I> <li>Nor: <I>kvinne som vil sove</I> <li>Pes: <I>زنی که می خواهد بخوابد</I> <li>Pnb: <I>{s : ParamX.Number => ResPnb.Case => Str</I> <li>Pol: <I>kobieta , która chce spać</I> <li>Ron: <I>femeie care vrea sã doarmă</I> <li>Rus: <I>женщина , которая хочет спать</I> <li>Spa: <I>mujer que quiere dormir</I> <li>Swe: <I>kvinna som vill sova</I> <li>Urd: <I>عورت جو سونا چاہتی ہے</I> </ul> </div> </div></TD>-</TR>-<TR>-<TD><CODE>mkRCl</CODE></TD>-<TD><A HREF="#RP" TITLE="RP - relative pronoun">RP</A> <CODE>-></CODE> <A HREF="#VS" TITLE="VS - sentence-complement verb">VS</A> <CODE>-></CODE> <A HREF="#S" TITLE="S - declarative sentence">S</A> <CODE>-></CODE> <A HREF="#RCl" TITLE="RCl - relative clause, with all tenses">RCl</A></TD>-<TD><div class=reveal> <I>woman who says that I sleep</I> <div class=popup> <ul> <li>API: <CODE>mkCN woman_N (mkRS (mkRCl which_RP say_VS (mkS (mkCl i_NP sleep_V))))</CODE> <li>Afr: <I>vrou wat sê dat ek slaap</I> <li>Bul: <I>жена която казва , че аз спя</I> <li>Cat: <I>dona que diu que jo dormo</I> <li>Dan: <I>kvinde som siger at jeg sover</I> <li>Dut: <I>vrouw die zegt dat ik slaap</I> <li>Eng: <I>woman who says that I sleep</I> <li>Fin: <I>nainen joka sanoo että minä nukun</I> <li>Fre: <I>femme qui dit que je dors</I> <li>Ger: <I>Frau die sagt daß ich schlafe</I> <li>Ita: <I>donna che dice che io dormo</I> <li>Nep: <I>आईमाई जो भन्छेकी म सुत्छु</I> <li>Nor: <I>kvinne som sier at jeg sover</I> <li>Pes: <I>زنی که می گوید که من می خوابم</I> <li>Pnb: <I>{s : ParamX.Number => ResPnb.Case => Str</I> <li>Pol: <I>kobieta , która mówi , że ja śpię</I> <li>Ron: <I>femeie care spune cã eu dorm</I> <li>Rus: <I>женщина , которая говордит , что я сплю</I> <li>Spa: <I>mujer que dice que yo duermo</I> <li>Swe: <I>kvinna som säger att jag sover</I> <li>Urd: <I>عورت جو كہتی ہے كہ میں سوتا ہوں</I> </ul> </div> </div></TD>-</TR>-<TR>-<TD><CODE>mkRCl</CODE></TD>-<TD><A HREF="#RP" TITLE="RP - relative pronoun">RP</A> <CODE>-></CODE> <A HREF="#VQ" TITLE="VQ - question-complement verb">VQ</A> <CODE>-></CODE> <A HREF="#QS" TITLE="QS - question">QS</A> <CODE>-></CODE> <A HREF="#RCl" TITLE="RCl - relative clause, with all tenses">RCl</A></TD>-<TD><div class=reveal> <I>woman who wonders who sleeps</I> <div class=popup> <ul> <li>API: <CODE>mkCN woman_N (mkRS (mkRCl which_RP wonder_VQ (mkQS (mkQCl who_IP sleep_V))))</CODE> <li>Afr: <I>vrou wat hom af vra wie slaap</I> <li>Bul: <I>жена която се учудва кой спи</I> <li>Cat: <I>dona que se pregunta qui dorm</I> <li>Dan: <I>kvinde som undres hvem som sover</I> <li>Dut: <I>vrouw die zich af vraagt wie slaapt</I> <li>Eng: <I>woman who wonders who sleeps</I> <li>Fin: <I>nainen joka ihmettelee kuka nukkuu</I> <li>Fre: <I>femme qui se demande qui dort</I> <li>Ger: <I>Frau die sich wundert wer schläft</I> <li>Ita: <I>donna che si domanda chi dorme</I> <li>Nep: <I>आईमाई जो अचम्म हुन्छेकी को सुत्छन्</I> <li>Nor: <I>kvinne som undrer hvem som sover</I> <li>Pes: <I>*</I> <li>Pnb: <I>{s : ParamX.Number => ResPnb.Case => Str</I> <li>Pol: <I>kobieta , która zastanawia się , kto śpi</I> <li>Ron: <I>femeie care se întreabă cine doarme</I> <li>Rus: <I>женщина , которая интересует кто спдит</I> <li>Spa: <I>mujer que se pregunta quién duerme</I> <li>Swe: <I>kvinna som undrar vem som sover</I> <li>Urd: <I>عورت جو حیران ہوتی ہے كہ كون سوتا ہے</I> </ul> </div> </div></TD>-</TR>-<TR>-<TD><CODE>mkRCl</CODE></TD>-<TD><A HREF="#RP" TITLE="RP - relative pronoun">RP</A> <CODE>-></CODE> <A HREF="#VA" TITLE="VA - adjective-complement verb">VA</A> <CODE>-></CODE> <A HREF="#A" TITLE="A - one-place adjective">A</A> <CODE>-></CODE> <A HREF="#RCl" TITLE="RCl - relative clause, with all tenses">RCl</A></TD>-<TD><div class=reveal> <I>woman who becomes old</I> <div class=popup> <ul> <li>API: <CODE>mkCN woman_N (mkRS (mkRCl which_RP become_VA old_A))</CODE> <li>Afr: <I>vrou wat oud word</I> <li>Bul: <I>жена която става стара</I> <li>Cat: <I>dona que se torna vell</I> <li>Dan: <I>kvinde som bliver gammel</I> <li>Dut: <I>vrouw die oud wordt</I> <li>Eng: <I>woman who becomes old</I> <li>Fin: <I>nainen joka tulee vanhaksi</I> <li>Fre: <I>femme qui devient vieille</I> <li>Ger: <I>Frau die alt wird</I> <li>Ita: <I>donna che diventa vecchia</I> <li>Nep: <I>आईमाई जो बुढी हुन्छे</I> <li>Nor: <I>kvinne som blir gammel</I> <li>Pes: <I>زنی که پیر می شود</I> <li>Pnb: <I>{s : ParamX.Number => ResPnb.Case => Str</I> <li>Pol: <I>kobieta , która staje się stara</I> <li>Ron: <I>femeie care devine veche</I> <li>Rus: <I>женщина , которая становдит старой</I> <li>Spa: <I>mujer que se converte vieja</I> <li>Swe: <I>kvinna som blir gammal</I> <li>Urd: <I>عورت جو بوڑھی بنتی ہے</I> </ul> </div> </div></TD>-</TR>-<TR>-<TD><CODE>mkRCl</CODE></TD>-<TD><A HREF="#RP" TITLE="RP - relative pronoun">RP</A> <CODE>-></CODE> <A HREF="#VA" TITLE="VA - adjective-complement verb">VA</A> <CODE>-></CODE> <A HREF="#AP" TITLE="AP - adjectival phrase">AP</A> <CODE>-></CODE> <A HREF="#RCl" TITLE="RCl - relative clause, with all tenses">RCl</A></TD>-<TD><div class=reveal> <I>woman who becomes very old</I> <div class=popup> <ul> <li>API: <CODE>mkCN woman_N (mkRS (mkRCl which_RP become_VA (mkAP very_AdA old_A)))</CODE> <li>Afr: <I>vrou wat baie oud word</I> <li>Bul: <I>жена която става много стара</I> <li>Cat: <I>dona que se torna molt vell</I> <li>Dan: <I>kvinde som bliver meget gammel</I> <li>Dut: <I>vrouw die erg oud wordt</I> <li>Eng: <I>woman who becomes very old</I> <li>Fin: <I>nainen joka tulee erittäin vanhaksi</I> <li>Fre: <I>femme qui devient très vieille</I> <li>Ger: <I>Frau die sehr alt wird</I> <li>Ita: <I>donna che diventa molto vecchia</I> <li>Nep: <I>आईमाई जो धेरै बुढी हुन्छे</I> <li>Nor: <I>kvinne som blir mye gammel</I> <li>Pes: <I>زنی که خیلی پیر می شود</I> <li>Pnb: <I>{s : ParamX.Number => ResPnb.Case => Str</I> <li>Pol: <I>kobieta , która staje się bardzo stara</I> <li>Ron: <I>femeie care devine foarte veche</I> <li>Rus: <I>женщина , которая становдит очень старой</I> <li>Spa: <I>mujer que se converte muy vieja</I> <li>Swe: <I>kvinna som blir mycket gammal</I> <li>Urd: <I>عورت جو بہت بوڑھی بنتی ہے</I> </ul> </div> </div></TD>-</TR>-<TR>-<TD><CODE>mkRCl</CODE></TD>-<TD><A HREF="#RP" TITLE="RP - relative pronoun">RP</A> <CODE>-></CODE> <A HREF="#V2A" TITLE="V2A - verb with NP and AP complement">V2A</A> <CODE>-></CODE> <A HREF="#NP" TITLE="NP - noun phrase (subject or object)">NP</A> <CODE>-></CODE> <A HREF="#A" TITLE="A - one-place adjective">A</A> <CODE>-></CODE> <A HREF="#RCl" TITLE="RCl - relative clause, with all tenses">RCl</A></TD>-<TD><div class=reveal> <I>woman who paints it red</I> <div class=popup> <ul> <li>API: <CODE>mkCN woman_N (mkRS (mkRCl which_RP paint_V2A it_NP red_A))</CODE> <li>Afr: <I>vrou wat dit rooi skilder</I> <li>Bul: <I>жена която рисува него червено</I> <li>Cat: <I>dona que ho pinta en vermell</I> <li>Dan: <I>kvinde som maler det rødt</I> <li>Dut: <I>vrouw die het rood schildeert</I> <li>Eng: <I>woman who paints it red</I> <li>Fin: <I>nainen joka maalaa sen punaiseksi</I> <li>Fre: <I>femme qui le peint en rouge</I> <li>Ger: <I>Frau die es rot malt</I> <li>Ita: <I>donna che lo dipinge rosso</I> <li>Nep: <I>आईमाई जो यो लाई रातो रँग लागाउँछे</I> <li>Nor: <I>kvinne som maler det rødt</I> <li>Pes: <I>زنی که آن را قرمز رنگ می کند</I> <li>Pnb: <I>{s : ParamX.Number => ResPnb.Case => Str</I> <li>Pol: <I>kobieta , która maluje je na czerwono</I> <li>Ron: <I>femeie care îl pictează roşu</I> <li>Rus: <I>женщина , которая рисует красным его</I> <li>Spa: <I>mujer que lo pinta en rojo</I> <li>Swe: <I>kvinna som målar det rött</I> <li>Urd: <I>عورت جو اس كو لال رنگ كرتی ہے</I> </ul> </div> </div></TD>-</TR>-<TR>-<TD><CODE>mkRCl</CODE></TD>-<TD><A HREF="#RP" TITLE="RP - relative pronoun">RP</A> <CODE>-></CODE> <A HREF="#V2A" TITLE="V2A - verb with NP and AP complement">V2A</A> <CODE>-></CODE> <A HREF="#NP" TITLE="NP - noun phrase (subject or object)">NP</A> <CODE>-></CODE> <A HREF="#AP" TITLE="AP - adjectival phrase">AP</A> <CODE>-></CODE> <A HREF="#RCl" TITLE="RCl - relative clause, with all tenses">RCl</A></TD>-<TD><div class=reveal> <I>woman who paints it very red</I> <div class=popup> <ul> <li>API: <CODE>mkCN woman_N (mkRS (mkRCl which_RP paint_V2A it_NP (mkAP very_AdA red_A)))</CODE> <li>Afr: <I>vrou wat dit baie rooi skilder</I> <li>Bul: <I>жена която рисува него много червено</I> <li>Cat: <I>dona que ho pinta en molt vermell</I> <li>Dan: <I>kvinde som maler det meget rødt</I> <li>Dut: <I>vrouw die het erg rood schildeert</I> <li>Eng: <I>woman who paints it very red</I> <li>Fin: <I>nainen joka maalaa sen erittäin punaiseksi</I> <li>Fre: <I>femme qui le peint en très rouge</I> <li>Ger: <I>Frau die es sehr rot malt</I> <li>Ita: <I>donna che lo dipinge molto rosso</I> <li>Nep: <I>आईमाई जो यो लाई धेरै रातो रँग लागाउँछे</I> <li>Nor: <I>kvinne som maler det mye rødt</I> <li>Pes: <I>زنی که آن را خیلی قرمز رنگ می کند</I> <li>Pnb: <I>{s : ParamX.Number => ResPnb.Case => Str</I> <li>Pol: <I>kobieta , która maluje je na bardzo czerwono</I> <li>Ron: <I>femeie care îl pictează foarte roşu</I> <li>Rus: <I>женщина , которая рисует очень красным его</I> <li>Spa: <I>mujer que lo pinta en muy rojo</I> <li>Swe: <I>kvinna som målar det mycket rött</I> <li>Urd: <I>عورت جو اس كو بہت لال رنگ كرتی ہے</I> </ul> </div> </div></TD>-</TR>-<TR>-<TD><CODE>mkRCl</CODE></TD>-<TD><A HREF="#RP" TITLE="RP - relative pronoun">RP</A> <CODE>-></CODE> <A HREF="#V2S" TITLE="V2S - verb with NP and S complement">V2S</A> <CODE>-></CODE> <A HREF="#NP" TITLE="NP - noun phrase (subject or object)">NP</A> <CODE>-></CODE> <A HREF="#S" TITLE="S - declarative sentence">S</A> <CODE>-></CODE> <A HREF="#RCl" TITLE="RCl - relative clause, with all tenses">RCl</A></TD>-<TD><div class=reveal> <I>woman who answers to him that we sleep</I> <div class=popup> <ul> <li>API: <CODE>mkCN woman_N (mkRS (mkRCl which_RP answer_V2S he_NP (mkS (mkCl we_NP sleep_V))))</CODE> <li>Afr: <I>vrou wat hom antwoord dat ons slaap</I> <li>Bul: <I>жена която отговаря му , че ние спим</I> <li>Cat: <I>dona que li respon que nosaltres dormim</I> <li>Dan: <I>kvinde som svarer til ham at vi sover</I> <li>Dut: <I>vrouw die hem antwoordt dat we slapen</I> <li>Eng: <I>woman who answers to him that we sleep</I> <li>Fin: <I>nainen joka vastaa hänelle että me nukumme</I> <li>Fre: <I>femme qui lui répond que nous dormons</I> <li>Ger: <I>Frau die ihm antwortet daß wir schlafen</I> <li>Ita: <I>donna che gli risponde che noi dormiamo</I> <li>Nep: <I>आईमाई जो उ लाई उत्तर दिन्छेकी हामीहरु सुत्छौँ</I> <li>Nor: <I>kvinne som svarer til ham at vi sover</I> <li>Pes: <I>زنی که به او جواب می دهد که ما می خوابیم</I> <li>Pnb: <I>{s : ParamX.Number => ResPnb.Case => Str</I> <li>Pol: <I>kobieta , która odpowiada jemu , że my śpimy</I> <li>Ron: <I>femeie care îi răspunde cã noi dormim</I> <li>Rus: <I>женщина , которая отвечает , что мы спдим его</I> <li>Spa: <I>mujer que le responde que nosotros dormimos</I> <li>Swe: <I>kvinna som svarar till honom att vi sover</I> <li>Urd: <I>عورت جو اس كو جواب دیتی ہے كہ ہم سوتے ہیں</I> </ul> </div> </div></TD>-</TR>-<TR>-<TD><CODE>mkRCl</CODE></TD>-<TD><A HREF="#RP" TITLE="RP - relative pronoun">RP</A> <CODE>-></CODE> <A HREF="#V2Q" TITLE="V2Q - verb with NP and Q complement">V2Q</A> <CODE>-></CODE> <A HREF="#NP" TITLE="NP - noun phrase (subject or object)">NP</A> <CODE>-></CODE> <A HREF="#QS" TITLE="QS - question">QS</A> <CODE>-></CODE> <A HREF="#RCl" TITLE="RCl - relative clause, with all tenses">RCl</A></TD>-<TD><div class=reveal> <I>woman who asks him who sleeps</I> <div class=popup> <ul> <li>API: <CODE>mkCN woman_N (mkRS (mkRCl which_RP ask_V2Q he_NP (mkQS (mkQCl who_IP sleep_V))))</CODE> <li>Afr: <I>vrou wat hom vra wie slaap</I> <li>Bul: <I>жена която пита него кой спи</I> <li>Cat: <I>dona que li pregunta qui dorm</I> <li>Dan: <I>kvinde som spørger ham hvem som sover</I> <li>Dut: <I>vrouw die hem vraagt wie slaapt</I> <li>Eng: <I>woman who asks him who sleeps</I> <li>Fin: <I>nainen joka kysyy häneltä kuka nukkuu</I> <li>Fre: <I>femme qui lui demande qui dort</I> <li>Ger: <I>Frau die ihn fragt wer schläft</I> <li>Ita: <I>donna che gli chiede chi dorme</I> <li>Nep: <I>आईमाई जो उ सँग सोध्छेकी को सुत्छन्</I> <li>Nor: <I>kvinne som spørr ham hvem som sover</I> <li>Pes: <I>زنی که از او می پرسد چه کسی می خوابد</I> <li>Pnb: <I>{s : ParamX.Number => ResPnb.Case => Str</I> <li>Pol: <I>kobieta , która pyta jego , kto śpi</I> <li>Ron: <I>femeie care îl întreabă cine doarme</I> <li>Rus: <I>женщина , которая спрашивает кто спдит его</I> <li>Spa: <I>mujer que le pregunta quién duerme</I> <li>Swe: <I>kvinna som frågar honom vem som sover</I> <li>Urd: <I>عورت جو اس سے پوچھتی ہے كہ كون سوتا ہے</I> </ul> </div> </div></TD>-</TR>-<TR>-<TD><CODE>mkRCl</CODE></TD>-<TD><A HREF="#RP" TITLE="RP - relative pronoun">RP</A> <CODE>-></CODE> <A HREF="#V2V" TITLE="V2V - verb with NP and V complement">V2V</A> <CODE>-></CODE> <A HREF="#NP" TITLE="NP - noun phrase (subject or object)">NP</A> <CODE>-></CODE> <A HREF="#VP" TITLE="VP - verb phrase">VP</A> <CODE>-></CODE> <A HREF="#RCl" TITLE="RCl - relative clause, with all tenses">RCl</A></TD>-<TD><div class=reveal> <I>woman who begs him to sleep</I> <div class=popup> <ul> <li>API: <CODE>mkCN woman_N (mkRS (mkRCl which_RP beg_V2V he_NP (mkVP sleep_V)))</CODE> <li>Afr: <I>vrou wat hom te slaap smeek</I> <li>Bul: <I>жена която моли него да спи</I> <li>Cat: <I>dona que el demana a dormir</I> <li>Dan: <I>kvinde som beder ham at sove</I> <li>Dut: <I>vrouw die hem te slapen smeekt</I> <li>Eng: <I>woman who begs him to sleep</I> <li>Fin: <I>nainen joka pyytää häntä nukkumaan</I> <li>Fre: <I>femme qui le demande à dormir</I> <li>Ger: <I>Frau die ihn zu schlafen bittet</I> <li>Ita: <I>donna che lo prega di dormire</I> <li>Nep: <I>आईमाई जो उ लाई सुत्न आग्रह गर्छे</I> <li>Nor: <I>kvinne som ber ham att sove</I> <li>Pes: <I>زنی که از او خواهش می کند بخوابد</I> <li>Pnb: <I>{s : ParamX.Number => ResPnb.Case => Str</I> <li>Pol: <I>*</I> <li>Ron: <I>femeie care îl roagă sã doarmă</I> <li>Rus: <I>женщина , которая просит спать его</I> <li>Spa: <I>mujer que lo roga a dormir</I> <li>Swe: <I>kvinna som ber honom att sova</I> <li>Urd: <I>عورت جو اس سے سونے كی التجا كرتی ہے</I> </ul> </div> </div></TD>-</TR>-<TR>-<TD><CODE>mkRCl</CODE></TD>-<TD><A HREF="#RP" TITLE="RP - relative pronoun">RP</A> <CODE>-></CODE> <A HREF="#A" TITLE="A - one-place adjective">A</A> <CODE>-></CODE> <A HREF="#RCl" TITLE="RCl - relative clause, with all tenses">RCl</A></TD>-<TD><div class=reveal> <I>woman who is old</I> <div class=popup> <ul> <li>API: <CODE>mkCN woman_N (mkRS (mkRCl which_RP old_A))</CODE> <li>Afr: <I>vrou wat oud is</I> <li>Bul: <I>жена която е стара</I> <li>Cat: <I>dona que és vell</I> <li>Dan: <I>kvinde som er gammel</I> <li>Dut: <I>vrouw die oud is</I> <li>Eng: <I>woman who is old</I> <li>Fin: <I>nainen joka on vanha</I> <li>Fre: <I>femme qui est vieille</I> <li>Ger: <I>Frau die alt ist</I> <li>Ita: <I>donna che è vecchia</I> <li>Nep: <I>आईमाई जो बुढी छे</I> <li>Nor: <I>kvinne som er gammel</I> <li>Pes: <I>زنی که پیر است</I> <li>Pnb: <I>{s : ParamX.Number => ResPnb.Case => Str</I> <li>Pol: <I>kobieta , która jest stara</I> <li>Ron: <I>femeie care este veche</I> <li>Rus: <I>женщина , которая старая</I> <li>Spa: <I>mujer que es vieja</I> <li>Swe: <I>kvinna som är gammal</I> <li>Urd: <I>عورت جو بوڑھی ہے</I> </ul> </div> </div></TD>-</TR>-<TR>-<TD><CODE>mkRCl</CODE></TD>-<TD><A HREF="#RP" TITLE="RP - relative pronoun">RP</A> <CODE>-></CODE> <A HREF="#A" TITLE="A - one-place adjective">A</A> <CODE>-></CODE> <A HREF="#NP" TITLE="NP - noun phrase (subject or object)">NP</A> <CODE>-></CODE> <A HREF="#RCl" TITLE="RCl - relative clause, with all tenses">RCl</A></TD>-<TD><div class=reveal> <I>woman who is older than he</I> <div class=popup> <ul> <li>API: <CODE>mkCN woman_N (mkRS (mkRCl which_RP old_A he_NP))</CODE> <li>Afr: <I>vrou wat ouer as hy is</I> <li>Bul: <I>жена която е по - стара от него</I> <li>Cat: <I>dona que és més vell que ell</I> <li>Dan: <I>kvinde som er ældre end han</I> <li>Dut: <I>vrouw die ouder dan hij is</I> <li>Eng: <I>woman who is older than he</I> <li>Fin: <I>nainen joka on vanhempi kuin hän</I> <li>Fre: <I>femme qui est plus vieille que lui</I> <li>Ger: <I>Frau die älter als er ist</I> <li>Ita: <I>donna che è più vecchia di lui</I> <li>Nep: <I>आईमाई जो उ भन्दा बुढी छे</I> <li>Nor: <I>kvinne som er eldre enn han</I> <li>Pes: <I>زنی که پیر تر از او است</I> <li>Pnb: <I>{s : ParamX.Number => ResPnb.Case => Str</I> <li>Pol: <I>kobieta , która jest starsza niż on</I> <li>Ron: <I>femeie care este mai veche decât el</I> <li>Rus: <I>женщина , которая старше него</I> <li>Spa: <I>mujer que es más vieja que él</I> <li>Swe: <I>kvinna som är äldre än han</I> <li>Urd: <I>عورت جو اس سے بوڑھی ہے</I> </ul> </div> </div></TD>-</TR>-<TR>-<TD><CODE>mkRCl</CODE></TD>-<TD><A HREF="#RP" TITLE="RP - relative pronoun">RP</A> <CODE>-></CODE> <A HREF="#A2" TITLE="A2 - two-place adjective">A2</A> <CODE>-></CODE> <A HREF="#NP" TITLE="NP - noun phrase (subject or object)">NP</A> <CODE>-></CODE> <A HREF="#RCl" TITLE="RCl - relative clause, with all tenses">RCl</A></TD>-<TD><div class=reveal> <I>woman who is married to him</I> <div class=popup> <ul> <li>API: <CODE>mkCN woman_N (mkRS (mkRCl which_RP married_A2 he_NP))</CODE> <li>Afr: <I>vrou wat getroud met hom is</I> <li>Bul: <I>жена която е женена за него</I> <li>Cat: <I>dona que és casata a ell</I> <li>Dan: <I>kvinde som er gift med ham</I> <li>Dut: <I>vrouw die getrouwd met hem is</I> <li>Eng: <I>woman who is married to him</I> <li>Fin: <I>nainen joka on avioitunut hänen kanssa</I> <li>Fre: <I>femme qui est mariée à lui</I> <li>Ger: <I>Frau die verheiratet mit ihm ist</I> <li>Ita: <I>donna che è sposata con lui</I> <li>Nep: <I>आईमाई जो उ सँग विवाहित छे</I> <li>Nor: <I>kvinne som er gift med ham</I> <li>Pes: <I>زنی که او متأهل است</I> <li>Pnb: <I>*</I> <li>Pol: <I>kobieta , która jest zaślubiona jemu</I> <li>Ron: <I>femeie care este căsătorită cu el</I> <li>Rus: <I>женщина , которая замужем за им</I> <li>Spa: <I>mujer que es casada a él</I> <li>Swe: <I>kvinna som är gift med honom</I> <li>Urd: <I>عورت جو اس سے [شادی كرنa] ہے</I> </ul> </div> </div></TD>-</TR>-<TR>-<TD><CODE>mkRCl</CODE></TD>-<TD><A HREF="#RP" TITLE="RP - relative pronoun">RP</A> <CODE>-></CODE> <A HREF="#AP" TITLE="AP - adjectival phrase">AP</A> <CODE>-></CODE> <A HREF="#RCl" TITLE="RCl - relative clause, with all tenses">RCl</A></TD>-<TD><div class=reveal> <I>woman who is very old</I> <div class=popup> <ul> <li>API: <CODE>mkCN woman_N (mkRS (mkRCl which_RP (mkAP very_AdA old_A)))</CODE> <li>Afr: <I>vrou wat baie oud is</I> <li>Bul: <I>жена която е много стара</I> <li>Cat: <I>dona que és molt vell</I> <li>Dan: <I>kvinde som er meget gammel</I> <li>Dut: <I>vrouw die erg oud is</I> <li>Eng: <I>woman who is very old</I> <li>Fin: <I>nainen joka on erittäin vanha</I> <li>Fre: <I>femme qui est très vieille</I> <li>Ger: <I>Frau die sehr alt ist</I> <li>Ita: <I>donna che è molto vecchia</I> <li>Nep: <I>आईमाई जो धेरै बुढी छे</I> <li>Nor: <I>kvinne som er mye gammel</I> <li>Pes: <I>زنی که خیلی پیر است</I> <li>Pnb: <I>{s : ParamX.Number => ResPnb.Case => Str</I> <li>Pol: <I>kobieta , która jest bardzo stara</I> <li>Ron: <I>femeie care este foarte veche</I> <li>Rus: <I>женщина , которая очень старая</I> <li>Spa: <I>mujer que es muy vieja</I> <li>Swe: <I>kvinna som är mycket gammal</I> <li>Urd: <I>عورت جو بہت بوڑھی ہے</I> </ul> </div> </div></TD>-</TR>-<TR>-<TD><CODE>mkRCl</CODE></TD>-<TD><A HREF="#RP" TITLE="RP - relative pronoun">RP</A> <CODE>-></CODE> <A HREF="#NP" TITLE="NP - noun phrase (subject or object)">NP</A> <CODE>-></CODE> <A HREF="#RCl" TITLE="RCl - relative clause, with all tenses">RCl</A></TD>-<TD><div class=reveal> <I>woman who is the woman</I> <div class=popup> <ul> <li>API: <CODE>mkCN woman_N (mkRS (mkRCl which_RP (mkNP the_Det woman_N)))</CODE> <li>Afr: <I>vrou wat die vrou is</I> <li>Bul: <I>жена която е жената</I> <li>Cat: <I>dona que és la dona</I> <li>Dan: <I>kvinde som er kvinden</I> <li>Dut: <I>vrouw die de vrouw is</I> <li>Eng: <I>woman who is the woman</I> <li>Fin: <I>nainen joka on nainen</I> <li>Fre: <I>femme qui est la femme</I> <li>Ger: <I>Frau die die Frau ist</I> <li>Ita: <I>donna che è la donna</I> <li>Nep: <I>आईमाई जो आईमाई हुन्</I> <li>Nor: <I>kvinne som er kvinna</I> <li>Pes: <I>زنی که زن است</I> <li>Pnb: <I>{s : ParamX.Number => ResPnb.Case => Str</I> <li>Pol: <I>kobieta , która jest kobietą</I> <li>Ron: <I>femeie care este femeia</I> <li>Rus: <I>женщина , которая женщина</I> <li>Spa: <I>mujer que es la mujer</I> <li>Swe: <I>kvinna som är kvinnan</I> <li>Urd: <I>عورت جو عورت ہے</I> </ul> </div> </div></TD>-</TR>-<TR>-<TD><CODE>mkRCl</CODE></TD>-<TD><A HREF="#RP" TITLE="RP - relative pronoun">RP</A> <CODE>-></CODE> <A HREF="#N" TITLE="N - common noun">N</A> <CODE>-></CODE> <A HREF="#RCl" TITLE="RCl - relative clause, with all tenses">RCl</A></TD>-<TD><div class=reveal> <I>student who is a woman</I> <div class=popup> <ul> <li>API: <CODE>mkCN student_N (mkRS (mkRCl which_RP woman_N))</CODE> <li>Afr: <I>student wat 'n vrou is</I> <li>Bul: <I>студент който е жена</I> <li>Cat: <I>estudiant que és una dona</I> <li>Dan: <I>student som er en kvinde</I> <li>Dut: <I>student die vrouw is</I> <li>Eng: <I>student who is a woman</I> <li>Fin: <I>opiskelija joka on nainen</I> <li>Fre: <I>étudiant qui est une femme</I> <li>Ger: <I>Student der eine Frau ist</I> <li>Ita: <I>studente che è una donna</I> <li>Nep: <I>बिध्यार्थि जो आईमाई हो</I> <li>Nor: <I>student som er ei kvinne</I> <li>Pes: <I>دانش آموزی که زن است</I> <li>Pnb: <I>*</I> <li>Pol: <I>student , który jest kobieta</I> <li>Ron: <I>student care este femeie</I> <li>Rus: <I>студент , который женщина</I> <li>Spa: <I>estudiante que es una mujer</I> <li>Swe: <I>student som är en kvinna</I> <li>Urd: <I>طالب علم جو عورت ہے</I> </ul> </div> </div></TD>-</TR>-<TR>-<TD><CODE>mkRCl</CODE></TD>-<TD><A HREF="#RP" TITLE="RP - relative pronoun">RP</A> <CODE>-></CODE> <A HREF="#CN" TITLE="CN - common noun (without determiner)">CN</A> <CODE>-></CODE> <A HREF="#RCl" TITLE="RCl - relative clause, with all tenses">RCl</A></TD>-<TD><div class=reveal> <I>student who is an old woman</I> <div class=popup> <ul> <li>API: <CODE>mkCN student_N (mkRS (mkRCl which_RP (mkCN old_A woman_N)))</CODE> <li>Afr: <I>student wat 'n oud vrou is</I> <li>Bul: <I>студент който е стара жена</I> <li>Cat: <I>estudiant que és una dona vell</I> <li>Dan: <I>student som er en gammel kvinde</I> <li>Dut: <I>student die oude vrouw is</I> <li>Eng: <I>student who is an old woman</I> <li>Fin: <I>opiskelija joka on vanha nainen</I> <li>Fre: <I>étudiant qui est une vieille femme</I> <li>Ger: <I>Student der eine alte Frau ist</I> <li>Ita: <I>studente che è una vecchia donna</I> <li>Nep: <I>बिध्यार्थि जो बुढी आईमाई हो</I> <li>Nor: <I>student som er ei gammel kvinne</I> <li>Pes: <I>دانش آموزی که زن پیر است</I> <li>Pnb: <I>*</I> <li>Pol: <I>student , który jest stara kobieta</I> <li>Ron: <I>student care este femeie veche</I> <li>Rus: <I>студент , который старая женщина</I> <li>Spa: <I>estudiante que es una vieja mujer</I> <li>Swe: <I>student som är en gammal kvinna</I> <li>Urd: <I>طالب علم جو بوڑھی عورت ہے</I> </ul> </div> </div></TD>-</TR>-<TR>-<TD><CODE>mkRCl</CODE></TD>-<TD><A HREF="#RP" TITLE="RP - relative pronoun">RP</A> <CODE>-></CODE> <A HREF="#Adv" TITLE="Adv - verb-phrase-modifying adverb">Adv</A> <CODE>-></CODE> <A HREF="#RCl" TITLE="RCl - relative clause, with all tenses">RCl</A></TD>-<TD><div class=reveal> <I>woman who is here</I> <div class=popup> <ul> <li>API: <CODE>mkCN woman_N (mkRS (mkRCl which_RP here_Adv))</CODE> <li>Afr: <I>vrou wat hier is</I> <li>Bul: <I>жена която е тук</I> <li>Cat: <I>dona que és aquí</I> <li>Dan: <I>kvinde som er her</I> <li>Dut: <I>vrouw die hier is</I> <li>Eng: <I>woman who is here</I> <li>Fin: <I>nainen joka on täällä</I> <li>Fre: <I>femme qui est ici</I> <li>Ger: <I>Frau die hier ist</I> <li>Ita: <I>donna che è quà</I> <li>Nep: <I>आईमाई जो यहाँ छे</I> <li>Nor: <I>kvinne som er her</I> <li>Pes: <I>زنی که اینجا است</I> <li>Pnb: <I>{s : ParamX.Number => ResPnb.Case => Str</I> <li>Pol: <I>kobieta , która jest tutaj</I> <li>Ron: <I>femeie care este aici</I> <li>Rus: <I>женщина , которая здесь</I> <li>Spa: <I>mujer que es aquí</I> <li>Swe: <I>kvinna som är här</I> <li>Urd: <I>عورت جو یہاں ہے</I> </ul> </div> </div></TD>-</TR>-<TR>-<TD><CODE>mkRCl</CODE></TD>-<TD><A HREF="#RP" TITLE="RP - relative pronoun">RP</A> <CODE>-></CODE> <A HREF="#NP" TITLE="NP - noun phrase (subject or object)">NP</A> <CODE>-></CODE> <A HREF="#V2" TITLE="V2 - two-place verb">V2</A> <CODE>-></CODE> <A HREF="#RCl" TITLE="RCl - relative clause, with all tenses">RCl</A></TD>-<TD><div class=reveal> <I>woman whom we love</I> <div class=popup> <ul> <li>API: <CODE>mkCN woman_N (mkRS (mkRCl which_RP we_NP love_V2))</CODE> <li>Afr: <I>vrou wat ons lief het</I> <li>Bul: <I>жена която ние обичаме</I> <li>Cat: <I>dona que nosaltres estimem</I> <li>Dan: <I>kvinde som vi elsker</I> <li>Dut: <I>vrouw die we lief hebben</I> <li>Eng: <I>woman whom we love</I> <li>Fin: <I>nainen jota me rakastamme</I> <li>Fre: <I>femme que nous aimons</I> <li>Ger: <I>Frau die wir lieben</I> <li>Ita: <I>donna che noi amiamo</I> <li>Nep: <I>आईमाई जो लाई हामीहरु माया गर्छौँ</I> <li>Nor: <I>kvinne som vi elsker</I> <li>Pes: <I>زنی که ما دوست داریم</I> <li>Pnb: <I>{s : ParamX.Number => ResPnb.Case => Str</I> <li>Pol: <I>kobieta , którą kochamy my</I> <li>Ron: <I>femeie pe care o iubim noi</I> <li>Rus: <I>женщина , которую мы любдим</I> <li>Spa: <I>mujer que nosotros amamos</I> <li>Swe: <I>kvinna som vi älskar</I> <li>Urd: <I>عورت جس كو ہم پیار كرتے ہیں</I> </ul> </div> </div></TD>-</TR>-<TR>-<TD><CODE>mkRCl</CODE></TD>-<TD><A HREF="#RP" TITLE="RP - relative pronoun">RP</A> <CODE>-></CODE> <A HREF="#ClSlash">ClSlash</A> <CODE>-></CODE> <A HREF="#RCl" TITLE="RCl - relative clause, with all tenses">RCl</A></TD>-<TD><div class=reveal> <I>woman whom she loves today</I> <div class=popup> <ul> <li>API: <CODE>mkCN woman_N (mkRS (mkRCl which_RP (mkClSlash (mkClSlash she_NP love_V2) today_Adv)))</CODE> <li>Afr: <I>vrou wat sy lief het vandag</I> <li>Bul: <I>жена която тя обича днес</I> <li>Cat: <I>dona que ella estima avui</I> <li>Dan: <I>kvinde som hun elsker idag</I> <li>Dut: <I>vrouw die ze lief heeft vandaag</I> <li>Eng: <I>woman whom she loves today</I> <li>Fin: <I>nainen jota hän rakastaa tänään</I> <li>Fre: <I>femme qu' elle aime aujourd'hui</I> <li>Ger: <I>Frau die sie liebt heute</I> <li>Ita: <I>donna che lei ama oggi</I> <li>Nep: <I>आईमाई जो लाई आज उनी माया गर्छिन्</I> <li>Nor: <I>kvinne som hun elsker idag</I> <li>Pes: <I>زنی که امروز او دوست دارد</I> <li>Pnb: <I>{s : ParamX.Number => ResPnb.Case => Str</I> <li>Pol: <I>kobieta , którą dziś kocha ona</I> <li>Ron: <I>femeie pe care o iubeşte ea astăzi</I> <li>Rus: <I>*</I> <li>Spa: <I>mujer que ella ama hoy</I> <li>Swe: <I>kvinna som hon älskar idag</I> <li>Urd: <I>عورت جس كو آج وہ پیار كرتی ہے</I> </ul> </div> </div></TD>-</TR>-<TR>-<TD><CODE>mkRCl</CODE></TD>-<TD><A HREF="#Cl" TITLE="Cl - declarative clause, with all tenses">Cl</A> <CODE>-></CODE> <A HREF="#RCl" TITLE="RCl - relative clause, with all tenses">RCl</A></TD>-<TD><I>such that she loves him</I></TD>-</TR>-</TABLE>--<A NAME="RP"></A>-<H2>RP - relative pronoun</H2>--<TABLE BORDER="1" CELLPADDING="4">-<TR>-<TH>Function</TH>-<TH>Type</TH>-<TH COLSPAN="2">Example</TH>-</TR>-<TR>-<TD><CODE>mkRP</CODE></TD>-<TD><A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A> <CODE>-></CODE> <A HREF="#NP" TITLE="NP - noun phrase (subject or object)">NP</A> <CODE>-></CODE> <A HREF="#RP" TITLE="RP - relative pronoun">RP</A> <CODE>-></CODE> <A HREF="#RP" TITLE="RP - relative pronoun">RP</A></TD>-<TD><div class=reveal> <I>all the cities in whom</I> <div class=popup> <ul> <li>API: <CODE>mkRP in_Prep (mkNP all_Predet (mkNP the_Quant pluralNum city_N)) which_RP</CODE> <li>Afr: <I>alle die stede in wat</I> <li>Bul: <I>всичките градовете в който</I> <li>Cat: <I>totes les ciutats en que</I> <li>Dan: <I>alle byerne i hvilken</I> <li>Dut: <I>alle de stadden in die</I> <li>Eng: <I>all the cities in whom</I> <li>Fin: <I>jossa kaikki kaupungit</I> <li>Fre: <I>toutes les villes dans lequel</I> <li>Ger: <I>alle die Städte in dem</I> <li>Ita: <I>tutte le città in cui</I> <li>Nep: <I>जो सबै शहरहरु मा</I> <li>Nor: <I>alle byene i hvilken</I> <li>Pes: <I>همه ی شهر که در آن ها</I> <li>Pnb: <I>جیڑا سارے شہر وچ</I> <li>Pol: <I>w którym wszystkie miast</I> <li>Ron: <I>toate oraşele în care</I> <li>Rus: <I>все городы в котором</I> <li>Spa: <I>todas las ciudades en que</I> <li>Swe: <I>alla städerna i vilken</I> <li>Urd: <I>جو تمام شہر میں</I> </ul> </div> </div></TD>-</TR>-<TR>-<TD><CODE>which_RP</CODE></TD>-<TD><A HREF="#RP" TITLE="RP - relative pronoun">RP</A></TD>-<TD><I>which/who</I></TD>-</TR>-</TABLE>--<A NAME="RS"></A>-<H2>RS - relative</H2>--<TABLE BORDER="1" CELLPADDING="4">-<TR>-<TH>Function</TH>-<TH>Type</TH>-<TH COLSPAN="2">Example</TH>-</TR>-<TR>-<TD><CODE>mkRS</CODE></TD>-<TD>(<A HREF="#Tense" TITLE="Tense - tense">Tense</A>) <CODE>-></CODE> (<A HREF="#Ant" TITLE="Ant - anteriority">Ant</A>) <CODE>-></CODE> (<A HREF="#Pol" TITLE="Pol - polarity">Pol</A>) <CODE>-></CODE> <A HREF="#RCl" TITLE="RCl - relative clause, with all tenses">RCl</A> <CODE>-></CODE> <A HREF="#RS" TITLE="RS - relative">RS</A></TD>-<TD><div class=reveal> <I>woman who wouldn't have slept</I> <div class=popup> <ul> <li>API: <CODE>mkCN woman_N (mkRS conditionalTense anteriorAnt negativePol (mkRCl which_RP sleep_V))</CODE> <li>Afr: <I>vrou wat nie nie geslaap het sou</I> <li>Bul: <I>жена която не би спалa</I> <li>Cat: <I>dona que no hauria dormit</I> <li>Dan: <I>kvinde som ikke ville have sovet</I> <li>Dut: <I>vrouw die niet geslapen hebben zou</I> <li>Eng: <I>woman who wouldn't have slept</I> <li>Fin: <I>nainen joka ei olisi nukkunut</I> <li>Fre: <I>femme qui n' aurait pas dormi</I> <li>Ger: <I>Frau die nicht geschlafen haben würde</I> <li>Ita: <I>donna che non avrebbe dormito</I> <li>Nep: <I>आईमाई जो सुतेकिहुन्थी</I> <li>Nor: <I>kvinne som ikke ville ha sovet</I> <li>Pes: <I>زنی که نمی خوابید</I> <li>Pnb: <I>{s : ParamX.Number => ResPnb.Case => Str</I> <li>Pol: <I>kobieta , która nie spałaby</I> <li>Ron: <I>femeie care nu ar fi dormit</I> <li>Rus: <I>женщина , которая спала бы</I> <li>Spa: <I>mujer que no habría dormido</I> <li>Swe: <I>kvinna som inte skulle ha sovit</I> <li>Urd: <I>عورت جو نا شاید سو ے</I> </ul> </div> </div></TD>-</TR>-<TR>-<TD><CODE>mkRS</CODE></TD>-<TD><A HREF="#Temp" TITLE="Temp - temporal and aspectual features">Temp</A> <CODE>-></CODE> (<A HREF="#Pol" TITLE="Pol - polarity">Pol</A>) <CODE>-></CODE> <A HREF="#RCl" TITLE="RCl - relative clause, with all tenses">RCl</A> <CODE>-></CODE> <A HREF="#RS" TITLE="RS - relative">RS</A></TD>-<TD><I>that wouldn't have slept</I></TD>-</TR>-<TR>-<TD><CODE>mkRS</CODE></TD>-<TD><A HREF="#Conj" TITLE="Conj - conjunction">Conj</A> <CODE>-></CODE> <A HREF="#RS" TITLE="RS - relative">RS</A> <CODE>-></CODE> <A HREF="#RS" TITLE="RS - relative">RS</A> <CODE>-></CODE> <A HREF="#RS" TITLE="RS - relative">RS</A></TD>-<TD><div class=reveal> <I>woman who sleeps or whom we love</I> <div class=popup> <ul> <li>API: <CODE>mkCN woman_N (mkRS or_Conj (mkRS (mkRCl which_RP sleep_V)) (mkRS (mkRCl which_RP we_NP love_V2)))</CODE> <li>Afr: <I>vrou wat slaap of wat ons lief het</I> <li>Bul: <I>жена която спи или която ние обичаме</I> <li>Cat: <I>dona que dorm o que nosaltres estimem</I> <li>Dan: <I>kvinde som sover eller som vi elsker</I> <li>Dut: <I>vrouw die slaapt of die we lief hebben</I> <li>Eng: <I>woman who sleeps or whom we love</I> <li>Fin: <I>nainen joka nukkuu tai jota me rakastamme</I> <li>Fre: <I>femme qui dort ou que nous aimons</I> <li>Ger: <I>Frau die schläft oder die wir lieben</I> <li>Ita: <I>donna che dorme o che noi amiamo</I> <li>Nep: <I>आईमाई जो सुत्छे अथवा जो लाई हामीहरु माया गर्छौँ</I> <li>Nor: <I>kvinne som sover eller som vi elsker</I> <li>Pes: <I>زنی که می خوابد یا که ما دوست داریم</I> <li>Pnb: <I>{s : ParamX.Number => ResPnb.Case => Str</I> <li>Pol: <I>kobieta , która śpi lub , którą kochamy my</I> <li>Ron: <I>femeie care doarme sau pe care o iubim noi</I> <li>Rus: <I>женщина , которая спдит или , которую мы любдим</I> <li>Spa: <I>mujer que duerme o que nosotros amamos</I> <li>Swe: <I>kvinna som sover eller som vi älskar</I> <li>Urd: <I>عورت جو سوتی ہے یا جس كو ہم پیار كرتے ہیں</I> </ul> </div> </div></TD>-</TR>-<TR>-<TD><CODE>mkRS</CODE></TD>-<TD><A HREF="#Conj" TITLE="Conj - conjunction">Conj</A> <CODE>-></CODE> <A HREF="#ListRS">ListRS</A> <CODE>-></CODE> <A HREF="#RS" TITLE="RS - relative">RS</A></TD>-<TD><I>who sleeps, whom I see and who sleeps</I></TD>-</TR>-</TABLE>--<A NAME="S"></A>-<H2>S - declarative sentence</H2>--<TABLE BORDER="1" CELLPADDING="4">-<TR>-<TH>Function</TH>-<TH>Type</TH>-<TH COLSPAN="2">Example</TH>-</TR>-<TR>-<TD><CODE>mkS</CODE></TD>-<TD>(<A HREF="#Tense" TITLE="Tense - tense">Tense</A>) <CODE>-></CODE> (<A HREF="#Ant" TITLE="Ant - anteriority">Ant</A>) <CODE>-></CODE> (<A HREF="#Pol" TITLE="Pol - polarity">Pol</A>) <CODE>-></CODE> <A HREF="#Cl" TITLE="Cl - declarative clause, with all tenses">Cl</A> <CODE>-></CODE> <A HREF="#S" TITLE="S - declarative sentence">S</A></TD>-<TD><div class=reveal> <I>she wouldn't have slept</I> <div class=popup> <ul> <li>API: <CODE>mkS conditionalTense anteriorAnt negativePol (mkCl she_NP sleep_V)</CODE> <li>Afr: <I>sy sou nie nie geslaap het</I> <li>Bul: <I>тя не би спалa</I> <li>Cat: <I>ella no hauria dormit</I> <li>Dan: <I>hun ville ikke have sovet</I> <li>Dut: <I>ze zou niet geslapen hebben</I> <li>Eng: <I>she wouldn't have slept</I> <li>Fin: <I>hän ei olisi nukkunut</I> <li>Fre: <I>elle n' aurait pas dormi</I> <li>Ger: <I>sie würde nicht geschlafen haben</I> <li>Ita: <I>lei non avrebbe dormito</I> <li>Nep: <I>उनी सुतेकिहुन्थि</I> <li>Nor: <I>hun ville ikke ha sovet</I> <li>Pes: <I>او نمی خوابید</I> <li>Pnb: <I>او نا شاید سوئے</I> <li>Pol: <I>ona nie spałaby</I> <li>Ron: <I>ea nu ar fi dormit</I> <li>Rus: <I>она не спала бы</I> <li>Spa: <I>ella no habría dormido</I> <li>Swe: <I>hon skulle inte ha sovit</I> <li>Urd: <I>وہ نا شاید سوئے</I> </ul> </div> </div></TD>-</TR>-<TR>-<TD><CODE>mkS</CODE></TD>-<TD><A HREF="#Temp" TITLE="Temp - temporal and aspectual features">Temp</A> <CODE>-></CODE> <A HREF="#Pol" TITLE="Pol - polarity">Pol</A> <CODE>-></CODE> <A HREF="#Cl" TITLE="Cl - declarative clause, with all tenses">Cl</A> <CODE>-></CODE> <A HREF="#S" TITLE="S - declarative sentence">S</A></TD>-<TD><I>she wouldn't have slept</I></TD>-</TR>-<TR>-<TD><CODE>mkS</CODE></TD>-<TD><A HREF="#Conj" TITLE="Conj - conjunction">Conj</A> <CODE>-></CODE> <A HREF="#S" TITLE="S - declarative sentence">S</A> <CODE>-></CODE> <A HREF="#S" TITLE="S - declarative sentence">S</A> <CODE>-></CODE> <A HREF="#S" TITLE="S - declarative sentence">S</A></TD>-<TD><div class=reveal> <I>she sleeps and I run</I> <div class=popup> <ul> <li>API: <CODE>mkS and_Conj (mkS (mkCl she_NP sleep_V)) (mkS (mkCl i_NP run_V))</CODE> <li>Afr: <I>sy slaap en ek hardloop</I> <li>Bul: <I>тя спи и аз бягам</I> <li>Cat: <I>ella dorm i jo corro</I> <li>Dan: <I>hun sover og jeg løber</I> <li>Dut: <I>ze slaapt en ik ren</I> <li>Eng: <I>she sleeps and I run</I> <li>Fin: <I>hän nukkuu ja minä juoksen</I> <li>Fre: <I>elle dort et je cours</I> <li>Ger: <I>sie schläft und ich laufe</I> <li>Ita: <I>lei dorme e io corro</I> <li>Nep: <I>उनी सुत्छिन् र म कुद्छु</I> <li>Nor: <I>hun sover og jeg springer</I> <li>Pes: <I>او می خوابد و من می دوم</I> <li>Pnb: <I>او سوندی اے تے میں دوڑدا واں</I> <li>Pol: <I>ona śpi i ja biegnę</I> <li>Ron: <I>ea doarme şi eu fug</I> <li>Rus: <I>она спдит и я бегаю</I> <li>Spa: <I>ella duerme y yo corro</I> <li>Swe: <I>hon sover och jag springer</I> <li>Urd: <I>وہ سوتی ہے اور میں دوڑتا ہوں</I> </ul> </div> </div></TD>-</TR>-<TR>-<TD><CODE>mkS</CODE></TD>-<TD><A HREF="#Conj" TITLE="Conj - conjunction">Conj</A> <CODE>-></CODE> <A HREF="#ListS">ListS</A> <CODE>-></CODE> <A HREF="#S" TITLE="S - declarative sentence">S</A></TD>-<TD><div class=reveal> <I>she sleeps , I run and you walk</I> <div class=popup> <ul> <li>API: <CODE>mkS and_Conj (mkListS (mkS (mkCl she_NP sleep_V)) (mkListS (mkS (mkCl i_NP run_V)) (mkS (mkCl (mkNP youSg_Pron) walk_V))))</CODE> <li>Afr: <I>sy slaap , ek hardloop en jy loop</I> <li>Bul: <I>тя спи , аз бягам и ти ходиш</I> <li>Cat: <I>ella dorm , jo corro i tu camines</I> <li>Dan: <I>sover hun , jeg løber og du går</I> <li>Dut: <I>ze slaapt , ik ren en je loopt</I> <li>Eng: <I>she sleeps , I run and you walk</I> <li>Fin: <I>hän nukkuu , minä juoksen ja sinä kävelet</I> <li>Fre: <I>elle dort , je cours et tu marches</I> <li>Ger: <I>schläft sie , ich laufe und du gehst</I> <li>Ita: <I>lei dorme , io corro e tu cammini</I> <li>Nep: <I>उनी सुत्छिन् , म कुद्छु र तिमी हिड्छौ</I> <li>Nor: <I>sover hun , jeg springer og du går</I> <li>Pes: <I>او می خوابد , من می دوم و تو راه می روی</I> <li>Pnb: <I>او سوندی اے , میں دوڑدا واں تے توں چلدا ایں</I> <li>Pol: <I>ona śpi , ja biegnę i ty spacerujesz</I> <li>Ron: <I>ea doarme , eu fug şi tu mergi</I> <li>Rus: <I>она спдит , я бегаю и ты гуляешь</I> <li>Spa: <I>ella duerme , yo corro y tu caminas</I> <li>Swe: <I>sover hon , jag springer och du går</I> <li>Urd: <I>وہ سوتی ہے , میں دوڑتا ہوں اور تو چلتا ہے</I> </ul> </div> </div></TD>-</TR>-<TR>-<TD><CODE>mkS</CODE></TD>-<TD><A HREF="#Adv" TITLE="Adv - verb-phrase-modifying adverb">Adv</A> <CODE>-></CODE> <A HREF="#S" TITLE="S - declarative sentence">S</A> <CODE>-></CODE> <A HREF="#S" TITLE="S - declarative sentence">S</A></TD>-<TD><div class=reveal> <I>today she sleeps</I> <div class=popup> <ul> <li>API: <CODE>mkS today_Adv (mkS (mkCl she_NP sleep_V))</CODE> <li>Afr: <I>vandag slaap sy</I> <li>Bul: <I>днес тя спи</I> <li>Cat: <I>avui ella dorm</I> <li>Dan: <I>idag sover hun</I> <li>Dut: <I>vandaag slaapt ze</I> <li>Eng: <I>today she sleeps</I> <li>Fin: <I>tänään hän nukkuu</I> <li>Fre: <I>aujourd'hui elle dort</I> <li>Ger: <I>heute schläft sie</I> <li>Ita: <I>oggi lei dorme</I> <li>Nep: <I>आज उनी सुत्छिन्</I> <li>Nor: <I>idag sover hun</I> <li>Pes: <I>امروز او می خوابد</I> <li>Pnb: <I>اج او سوندی اے</I> <li>Pol: <I>dziś ona śpi</I> <li>Ron: <I>astăzi ea doarme</I> <li>Rus: <I>*</I> <li>Spa: <I>hoy ella duerme</I> <li>Swe: <I>idag sover hon</I> <li>Urd: <I>آج وہ سوتی ہے</I> </ul> </div> </div></TD>-</TR>-</TABLE>--<A NAME="SC"></A>-<H2>SC - embedded sentence or question</H2>--<TABLE BORDER="1" CELLPADDING="4">-<TR>-<TH>Function</TH>-<TH>Type</TH>-<TH COLSPAN="2">Example</TH>-</TR>-<TR>-<TD><CODE>mkSC</CODE></TD>-<TD><A HREF="#S" TITLE="S - declarative sentence">S</A> <CODE>-></CODE> <A HREF="#SC" TITLE="SC - embedded sentence or question">SC</A></TD>-<TD><div class=reveal> <I>that she sleeps</I> <div class=popup> <ul> <li>API: <CODE>mkSC (mkS (mkCl she_NP sleep_V))</CODE> <li>Afr: <I>dat sy slaap</I> <li>Bul: <I>, че тя спи</I> <li>Cat: <I>que ella dorm</I> <li>Dan: <I>at hun sover</I> <li>Dut: <I>dat ze slaapt</I> <li>Eng: <I>that she sleeps</I> <li>Fin: <I>että hän nukkuu</I> <li>Fre: <I>qu' elle dort</I> <li>Ger: <I>daß sie schläft</I> <li>Ita: <I>che lei dorme</I> <li>Nep: <I>की उनी सुत्छिन्</I> <li>Nor: <I>at hun sover</I> <li>Pes: <I>که او می خوابد</I> <li>Pnb: <I>كہ او سوندی اے</I> <li>Pol: <I>, że ona śpi</I> <li>Ron: <I>cã ea doarme</I> <li>Rus: <I>что она спдит</I> <li>Spa: <I>que ella duerme</I> <li>Swe: <I>att hon sover</I> <li>Urd: <I>كہ وہ سوتی ہے</I> </ul> </div> </div></TD>-</TR>-<TR>-<TD><CODE>mkSC</CODE></TD>-<TD><A HREF="#QS" TITLE="QS - question">QS</A> <CODE>-></CODE> <A HREF="#SC" TITLE="SC - embedded sentence or question">SC</A></TD>-<TD><div class=reveal> <I>who sleeps</I> <div class=popup> <ul> <li>API: <CODE>mkSC (mkQS (mkQCl who_IP sleep_V))</CODE> <li>Afr: <I>wie slaap</I> <li>Bul: <I>който спи</I> <li>Cat: <I>qui dorm</I> <li>Dan: <I>hvem som sover</I> <li>Dut: <I>wie slaapt</I> <li>Eng: <I>who sleeps</I> <li>Fin: <I>kuka nukkuu</I> <li>Fre: <I>qui dort</I> <li>Ger: <I>wer schläft</I> <li>Ita: <I>chi dorme</I> <li>Nep: <I>को सुत्छन्</I> <li>Nor: <I>hvem som sover</I> <li>Pes: <I>چه کسی می خوابد</I> <li>Pnb: <I>كون سوندا اے</I> <li>Pol: <I>, kto śpi</I> <li>Ron: <I>cine doarme</I> <li>Rus: <I>кто спдит</I> <li>Spa: <I>quién duerme</I> <li>Swe: <I>vem som sover</I> <li>Urd: <I>كون سوتا ہے</I> </ul> </div> </div></TD>-</TR>-<TR>-<TD><CODE>mkSC</CODE></TD>-<TD><A HREF="#VP" TITLE="VP - verb phrase">VP</A> <CODE>-></CODE> <A HREF="#SC" TITLE="SC - embedded sentence or question">SC</A></TD>-<TD><div class=reveal> <I>to sleep</I> <div class=popup> <ul> <li>API: <CODE>mkSC (mkVP sleep_V)</CODE> <li>Afr: <I>te slaap</I> <li>Bul: <I>да спя</I> <li>Cat: <I>dormir</I> <li>Dan: <I>at sove</I> <li>Dut: <I>te slapen</I> <li>Eng: <I>to sleep</I> <li>Fin: <I>nukkua</I> <li>Fre: <I>dormir</I> <li>Ger: <I>zu schlafen</I> <li>Ita: <I>dormire</I> <li>Nep: <I>सुत्न</I> <li>Nor: <I>å sove</I> <li>Pes: <I>خوابیدن</I> <li>Pnb: <I>سونا</I> <li>Pol: <I>spać</I> <li>Ron: <I>sã doarmă</I> <li>Rus: <I>спать</I> <li>Spa: <I>dormir</I> <li>Swe: <I>att sova</I> <li>Urd: <I>سونا</I> </ul> </div> </div></TD>-</TR>-</TABLE>--<A NAME="SSlash"></A>-<H2>SSlash</H2>--<TABLE BORDER="1" CELLPADDING="4">-<TR>-<TH>Function</TH>-<TH>Type</TH>-<TH COLSPAN="2">Example</TH>-</TR>-<TR>-<TD><CODE>mkSSlash</CODE></TD>-<TD><A HREF="#Temp" TITLE="Temp - temporal and aspectual features">Temp</A> <CODE>-></CODE> <A HREF="#Pol" TITLE="Pol - polarity">Pol</A> <CODE>-></CODE> <A HREF="#ClSlash">ClSlash</A> <CODE>-></CODE> <A HREF="#SSlash">SSlash</A></TD>-<TD><div class=reveal> <I>she hadn't seen</I> <div class=popup> <ul> <li>API: <CODE>mkSSlash (mkTemp pastTense anteriorAnt) negativePol (mkClSlash she_NP (mkVPSlash see_V2))</CODE> <li>Afr: <I>sy had nie nie gesien</I> <li>Bul: <I>тя не беше видялa</I> <li>Cat: <I>ella no havia vist</I> <li>Dan: <I>hun havde ikke set</I> <li>Dut: <I>ze had niet gezien</I> <li>Eng: <I>she hadn't seen</I> <li>Fin: <I>hän ei ollut nähnyt</I> <li>Fre: <I>elle n' avait pas vu</I> <li>Ger: <I>sie hatte nicht gesehen</I> <li>Ita: <I>lei non aveva visto</I> <li>Nep: <I>उनी हेरेकिथिइनन्</I> <li>Nor: <I>hun hadde ikke sett</I> <li>Pes: <I>او ندیده بود</I> <li>Pnb: <I>او نیں ویكھ گیی سی</I> <li>Pol: <I>nie zobaczyła ona</I> <li>Ron: <I>ea nu văzuse</I> <li>Rus: <I>она не видела</I> <li>Spa: <I>ella no había visto</I> <li>Swe: <I>hon hade inte sett</I> <li>Urd: <I>وہ نہیں دیكھ چكی تھی</I> </ul> </div> </div></TD>-</TR>-</TABLE>--<A NAME="Sub100"></A>-<H2>Sub100</H2>--<TABLE BORDER="1" CELLPADDING="4">-<TR>-<TH>Function</TH>-<TH>Type</TH>-<TH COLSPAN="2">Example</TH>-</TR>-<TR>-<TD><CODE>mkSub100</CODE></TD>-<TD><A HREF="#Unit">Unit</A> <CODE>-></CODE> <A HREF="#Sub100">Sub100</A></TD>-<TD><div class=reveal> <I>eight</I> <div class=popup> <ul> <li>API: <CODE>mkSub100 n8_Unit</CODE> <li>Afr: <I>agt</I> <li>Bul: <I>осмина</I> <li>Cat: <I>vuit</I> <li>Dan: <I>otte</I> <li>Dut: <I>acht</I> <li>Eng: <I>eight</I> <li>Fin: <I>kahdeksan</I> <li>Fre: <I>huit</I> <li>Ger: <I>acht</I> <li>Ita: <I>otto</I> <li>Nep: <I>आठ</I> <li>Nor: <I>åtte</I> <li>Pes: <I>هشت</I> <li>Pnb: <I>اٹھ</I> <li>Pol: <I>osiemm</I> <li>Ron: <I>opt</I> <li>Rus: <I>восемь</I> <li>Spa: <I>ocho</I> <li>Swe: <I>åtta</I> <li>Urd: <I>آٹھ</I> </ul> </div> </div></TD>-</TR>-<TR>-<TD><CODE>mkSub100</CODE></TD>-<TD><A HREF="#Unit">Unit</A> <CODE>-></CODE> <A HREF="#Unit">Unit</A> <CODE>-></CODE> <A HREF="#Sub100">Sub100</A></TD>-<TD><div class=reveal> <I>eighty - three</I> <div class=popup> <ul> <li>API: <CODE>mkSub100 n8_Unit n3_Unit</CODE> <li>Afr: <I>drieëntagtig</I> <li>Bul: <I>осемдесет и трима</I> <li>Cat: <I>vuitanta- tres</I> <li>Dan: <I>tre og firs</I> <li>Dut: <I>drieëntachtig</I> <li>Eng: <I>eighty - three</I> <li>Fin: <I>kahdeksankymmentäkolme</I> <li>Fre: <I>quatre-vingt - trois</I> <li>Ger: <I>dreiundachzig</I> <li>Ita: <I>ottantatre</I> <li>Nep: <I>त्रियासी</I> <li>Nor: <I>åtti tre</I> <li>Pes: <I>هشتاد و سه</I> <li>Pnb: <I>تیراسی</I> <li>Pol: <I>osiemdziesiąt trzy</I> <li>Ron: <I>optzeci şi trei</I> <li>Rus: <I>восемьдесят три</I> <li>Spa: <I>ochenta y tres</I> <li>Swe: <I>åttiotre</I> <li>Urd: <I>تراسی</I> </ul> </div> </div></TD>-</TR>-<TR>-<TD><CODE>tenfoldSub100</CODE></TD>-<TD><A HREF="#Unit">Unit</A> <CODE>-></CODE> <A HREF="#Sub100">Sub100</A></TD>-<TD><div class=reveal> <I>eight</I> <div class=popup> <ul> <li>API: <CODE>mkSub100 n8_Unit</CODE> <li>Afr: <I>agt</I> <li>Bul: <I>осмина</I> <li>Cat: <I>vuit</I> <li>Dan: <I>otte</I> <li>Dut: <I>acht</I> <li>Eng: <I>eight</I> <li>Fin: <I>kahdeksan</I> <li>Fre: <I>huit</I> <li>Ger: <I>acht</I> <li>Ita: <I>otto</I> <li>Nep: <I>आठ</I> <li>Nor: <I>åtte</I> <li>Pes: <I>هشت</I> <li>Pnb: <I>اٹھ</I> <li>Pol: <I>osiemm</I> <li>Ron: <I>opt</I> <li>Rus: <I>восемь</I> <li>Spa: <I>ocho</I> <li>Swe: <I>åtta</I> <li>Urd: <I>آٹھ</I> </ul> </div> </div></TD>-</TR>-</TABLE>--<A NAME="Sub1000"></A>-<H2>Sub1000</H2>--<TABLE BORDER="1" CELLPADDING="4">-<TR>-<TH>Function</TH>-<TH>Type</TH>-<TH COLSPAN="2">Example</TH>-</TR>-<TR>-<TD><CODE>mkSub1000</CODE></TD>-<TD><A HREF="#Sub100">Sub100</A> <CODE>-></CODE> <A HREF="#Sub1000">Sub1000</A></TD>-<TD><div class=reveal> <I>ninety - nine</I> <div class=popup> <ul> <li>API: <CODE>mkNumeral (mkSub1000 (mkSub100 n9_Unit n9_Unit))</CODE> <li>Afr: <I>negeënnegentig</I> <li>Bul: <I>деветдесет и деветима</I> <li>Cat: <I>noranta- nou</I> <li>Dan: <I>ni og halvfems</I> <li>Dut: <I>negenennegentig</I> <li>Eng: <I>ninety - nine</I> <li>Fin: <I>yhdeksänkymmentäyhdeksän</I> <li>Fre: <I>quatre-vingt - dix-neuf</I> <li>Ger: <I>neunundneunzig</I> <li>Ita: <I>novantanove</I> <li>Nep: <I>उनान्सय</I> <li>Nor: <I>nitti ni</I> <li>Pes: <I>نود و نه</I> <li>Pnb: <I>نڑینوے</I> <li>Pol: <I>dziewięćdziesiąt dziewięć</I> <li>Ron: <I>nouăzeci şi nouă</I> <li>Rus: <I>девяносто девять</I> <li>Spa: <I>noventa y nueve</I> <li>Swe: <I>nittionio</I> <li>Urd: <I>ننانوے</I> </ul> </div> </div></TD>-</TR>-<TR>-<TD><CODE>mkSub1000</CODE></TD>-<TD><A HREF="#Unit">Unit</A> <CODE>-></CODE> <A HREF="#Sub1000">Sub1000</A></TD>-<TD><div class=reveal> <I>nine hundred</I> <div class=popup> <ul> <li>API: <CODE>mkNumeral (mkSub1000 n9_Unit)</CODE> <li>Afr: <I>negehonderd</I> <li>Bul: <I>деветстотин</I> <li>Cat: <I>nou -cents</I> <li>Dan: <I>ni hundrede</I> <li>Dut: <I>negenhonderd</I> <li>Eng: <I>nine hundred</I> <li>Fin: <I>yhdeksänsataa</I> <li>Fre: <I>neuf cents</I> <li>Ger: <I>neunhundert</I> <li>Ita: <I>novecento</I> <li>Nep: <I>नौ सय</I> <li>Nor: <I>ni hundre</I> <li>Pes: <I>نهصد</I> <li>Pnb: <I>نو سو</I> <li>Pol: <I>dziewięćset</I> <li>Ron: <I>nouă sute</I> <li>Rus: <I>девятьсот</I> <li>Spa: <I>novecientos</I> <li>Swe: <I>niohundra</I> <li>Urd: <I>نو سو</I> </ul> </div> </div></TD>-</TR>-<TR>-<TD><CODE>mkSub1000</CODE></TD>-<TD><A HREF="#Unit">Unit</A> <CODE>-></CODE> <A HREF="#Sub100">Sub100</A> <CODE>-></CODE> <A HREF="#Sub1000">Sub1000</A></TD>-<TD><div class=reveal> <I>nine hundred and ninety - nine</I> <div class=popup> <ul> <li>API: <CODE>mkNumeral (mkSub1000 n9_Unit (mkSub100 n9_Unit n9_Unit))</CODE> <li>Afr: <I>negehonderdnegeënnegentig</I> <li>Bul: <I>деветстотин деветдесет и деветима</I> <li>Cat: <I>nou -cents noranta- nou</I> <li>Dan: <I>ni hundrede og ni og halvfems</I> <li>Dut: <I>negenhonderdnegenennegentig</I> <li>Eng: <I>nine hundred and ninety - nine</I> <li>Fin: <I>yhdeksänsataayhdeksänkymmentäyhdeksän</I> <li>Fre: <I>neuf cent quatre-vingt - dix-neuf</I> <li>Ger: <I>neunhundertneunundneunzig</I> <li>Ita: <I>novecentonovantanove</I> <li>Nep: <I>नौ सय उनान्सय</I> <li>Nor: <I>ni hundre og nitti ni</I> <li>Pes: <I>نهصد و نود و نه</I> <li>Pnb: <I>نو سو نڑینوے</I> <li>Pol: <I>dziewięćset dziewięćdziesiąt dziewięć</I> <li>Ron: <I>nouă sute nouăzeci şi nouă</I> <li>Rus: <I>девятьсот девяносто девять</I> <li>Spa: <I>novecientos noventa y nueve</I> <li>Swe: <I>niohundra nittionio</I> <li>Urd: <I>نو سو ننانوے</I> </ul> </div> </div></TD>-</TR>-</TABLE>--<A NAME="Subj"></A>-<H2>Subj - subjunction</H2>--<TABLE BORDER="1" CELLPADDING="4">-<TR>-<TH>Function</TH>-<TH>Type</TH>-<TH COLSPAN="2">Example</TH>-</TR>-<TR>-<TD><CODE>although_Subj</CODE></TD>-<TD><A HREF="#Subj" TITLE="Subj - subjunction">Subj</A></TD>-<TD><div class=reveal> <I>although she sleeps</I> <div class=popup> <ul> <li>API: <CODE>mkAdv although_Subj (mkS (mkCl she_NP sleep_V))</CODE> <li>Afr: <I>hoewel sy slaap</I> <li>Bul: <I>въпреки че тя спи</I> <li>Cat: <I>encara que ella dormi</I> <li>Dan: <I>selv om hun sover</I> <li>Dut: <I>hoewel ze slaapt</I> <li>Eng: <I>although she sleeps</I> <li>Fin: <I>vaikka hän nukkuu</I> <li>Fre: <I>bien que</I> <li>Ger: <I>obwohl sie schläft</I> <li>Ita: <I>benché lei dorma</I> <li>Nep: <I>तैपनि उनी सुत्छिन्</I> <li>Nor: <I>selv om hun sover</I> <li>Pes: <I>با وجود این که او می خوابد</I> <li>Pnb: <I>پاویں او سوندی اے</I> <li>Pol: <I>pomimo ona śpi</I> <li>Ron: <I>deşi ea doarme</I> <li>Rus: <I>хотя она спдит</I> <li>Spa: <I>benché ella duerma</I> <li>Swe: <I>fast hon sover</I> <li>Urd: <I>اگرچہ وہ سوتی ہے</I> </ul> </div> </div></TD>-</TR>-<TR>-<TD><CODE>because_Subj</CODE></TD>-<TD><A HREF="#Subj" TITLE="Subj - subjunction">Subj</A></TD>-<TD><div class=reveal> <I>because she sleeps</I> <div class=popup> <ul> <li>API: <CODE>mkAdv because_Subj (mkS (mkCl she_NP sleep_V))</CODE> <li>Afr: <I>omdat sy slaap</I> <li>Bul: <I>защото тя спи</I> <li>Cat: <I>perque ella dorm</I> <li>Dan: <I>fordi hun sover</I> <li>Dut: <I>omdat ze slaapt</I> <li>Eng: <I>because she sleeps</I> <li>Fin: <I>koska hän nukkuu</I> <li>Fre: <I>parce que</I> <li>Ger: <I>weil sie schläft</I> <li>Ita: <I>perché lei dorme</I> <li>Nep: <I>किनभने उनी सुत्छिन्</I> <li>Nor: <I>fordi hun sover</I> <li>Pes: <I>برای این که او می خوابد</I> <li>Pnb: <I>كیونكھ او سوندی اے</I> <li>Pol: <I>ponieważ ona śpi</I> <li>Ron: <I>deoarece ea doarme</I> <li>Rus: <I>потому что она спдит</I> <li>Spa: <I>porque ella duerme</I> <li>Swe: <I>eftersom hon sover</I> <li>Urd: <I>كیونكہ وہ سوتی ہے</I> </ul> </div> </div></TD>-</TR>-<TR>-<TD><CODE>if_Subj</CODE></TD>-<TD><A HREF="#Subj" TITLE="Subj - subjunction">Subj</A></TD>-<TD><div class=reveal> <I>if she sleeps</I> <div class=popup> <ul> <li>API: <CODE>mkAdv if_Subj (mkS (mkCl she_NP sleep_V))</CODE> <li>Afr: <I>as sy slaap</I> <li>Bul: <I>ако тя спи</I> <li>Cat: <I>si ella dorm</I> <li>Dan: <I>hvis hun sover</I> <li>Dut: <I>als ze slaapt</I> <li>Eng: <I>if she sleeps</I> <li>Fin: <I>jos hän nukkuu</I> <li>Fre: <I>si elle dort</I> <li>Ger: <I>wenn sie schläft</I> <li>Ita: <I>se lei dorme</I> <li>Nep: <I>यदि उनी सुत्छिन्</I> <li>Nor: <I>hvis hun sover</I> <li>Pes: <I>اگر که او می خوابد</I> <li>Pnb: <I>اگر او سوندی اے</I> <li>Pol: <I>jeśli ona śpi</I> <li>Ron: <I>dacă ea doarme</I> <li>Rus: <I>если она спдит</I> <li>Spa: <I>si ella duerme</I> <li>Swe: <I>om hon sover</I> <li>Urd: <I>اگر وہ سوتی ہے</I> </ul> </div> </div></TD>-</TR>-<TR>-<TD><CODE>that_Subj</CODE></TD>-<TD><A HREF="#Subj" TITLE="Subj - subjunction">Subj</A></TD>-<TD><div class=reveal> <I>that she sleeps</I> <div class=popup> <ul> <li>API: <CODE>mkAdv that_Subj (mkS (mkCl she_NP sleep_V))</CODE> <li>Afr: <I>dat sy slaap</I> <li>Bul: <I>че тя спи</I> <li>Cat: <I>que ella dormi</I> <li>Dan: <I>*</I> <li>Dut: <I>dat ze slaapt</I> <li>Eng: <I>that she sleeps</I> <li>Fin: <I>että hän nukkuu</I> <li>Fre: <I>qu' elle dorme</I> <li>Ger: <I>daß sie schläft</I> <li>Ita: <I>che lei dorma</I> <li>Nep: <I>त्यो उनी सुत्छिन्</I> <li>Nor: <I>*</I> <li>Pes: <I>آن که او می خوابد</I> <li>Pnb: <I>كہ او سوندی اے</I> <li>Pol: <I>*</I> <li>Ron: <I>că ea doarme</I> <li>Rus: <I>*</I> <li>Spa: <I>que ella duerma</I> <li>Swe: <I>att hon sover</I> <li>Urd: <I>كہ وہ سوتی ہے</I> </ul> </div> </div></TD>-</TR>-<TR>-<TD><CODE>when_Subj</CODE></TD>-<TD><A HREF="#Subj" TITLE="Subj - subjunction">Subj</A></TD>-<TD><div class=reveal> <I>when she sleeps</I> <div class=popup> <ul> <li>API: <CODE>mkAdv when_Subj (mkS (mkCl she_NP sleep_V))</CODE> <li>Afr: <I>as sy slaap</I> <li>Bul: <I>когато тя спи</I> <li>Cat: <I>quan ella dorm</I> <li>Dan: <I>når hun sover</I> <li>Dut: <I>als ze slaapt</I> <li>Eng: <I>when she sleeps</I> <li>Fin: <I>kun hän nukkuu</I> <li>Fre: <I>quand elle dort</I> <li>Ger: <I>wenn sie schläft</I> <li>Ita: <I>quando lei dorme</I> <li>Nep: <I>कहिले उनी सुत्छिन्</I> <li>Nor: <I>når hun sover</I> <li>Pes: <I>وقتی که او می خوابد</I> <li>Pnb: <I>كدوں او سوندی اے</I> <li>Pol: <I>jeśli ona śpi</I> <li>Ron: <I>când ea doarme</I> <li>Rus: <I>когда она спдит</I> <li>Spa: <I>cuando ella duerme</I> <li>Swe: <I>när hon sover</I> <li>Urd: <I>جب وہ سوتی ہے</I> </ul> </div> </div></TD>-</TR>-</TABLE>--<A NAME="Temp"></A>-<H2>Temp - temporal and aspectual features</H2>--<TABLE BORDER="1" CELLPADDING="4">-<TR>-<TH>Function</TH>-<TH>Type</TH>-<TH COLSPAN="2">Example</TH>-</TR>-<TR>-<TD><CODE>mkTemp</CODE></TD>-<TD><A HREF="#Tense" TITLE="Tense - tense">Tense</A> <CODE>-></CODE> <A HREF="#Ant" TITLE="Ant - anteriority">Ant</A> <CODE>-></CODE> <A HREF="#Temp" TITLE="Temp - temporal and aspectual features">Temp</A></TD>-<TD><I>e.g. past + anterior</I></TD>-</TR>-</TABLE>--<A NAME="Tense"></A>-<H2>Tense - tense</H2>--<TABLE BORDER="1" CELLPADDING="4">-<TR>-<TH>Function</TH>-<TH>Type</TH>-<TH COLSPAN="2">Example</TH>-</TR>-<TR>-<TD><CODE>conditionalTense</CODE></TD>-<TD><A HREF="#Tense" TITLE="Tense - tense">Tense</A></TD>-<TD><div class=reveal> <I>she would sleep</I> <div class=popup> <ul> <li>API: <CODE>mkS conditionalTense (mkCl she_NP sleep_V)</CODE> <li>Afr: <I>sy sou geslaap het</I> <li>Bul: <I>тя би спалa</I> <li>Cat: <I>ella dormiria</I> <li>Dan: <I>hun ville sove</I> <li>Dut: <I>ze zou geslapen hebben</I> <li>Eng: <I>she would sleep</I> <li>Fin: <I>hän nukkuisi</I> <li>Fre: <I>elle dormirait</I> <li>Ger: <I>sie würde schlafen</I> <li>Ita: <I>lei dormirebbe</I> <li>Nep: <I>उनी सुत्नेछिन्</I> <li>Nor: <I>hun ville sove</I> <li>Pes: <I>او می خوابید</I> <li>Pnb: <I>او شاید سوئے</I> <li>Pol: <I>ona spałaby</I> <li>Ron: <I>ea ar dormi</I> <li>Rus: <I>она спала бы</I> <li>Spa: <I>ella dormiría</I> <li>Swe: <I>hon skulle sova</I> <li>Urd: <I>وہ شاید سوئے</I> </ul> </div> </div></TD>-</TR>-<TR>-<TD><CODE>futureTense</CODE></TD>-<TD><A HREF="#Tense" TITLE="Tense - tense">Tense</A></TD>-<TD><div class=reveal> <I>she will sleep</I> <div class=popup> <ul> <li>API: <CODE>mkS futureTense (mkCl she_NP sleep_V)</CODE> <li>Afr: <I>sy sal geslaap het</I> <li>Bul: <I>тя ще спи</I> <li>Cat: <I>ella dormirà</I> <li>Dan: <I>hun vil sove</I> <li>Dut: <I>ze zal geslapen hebben</I> <li>Eng: <I>she will sleep</I> <li>Fin: <I>hän nukkuu</I> <li>Fre: <I>elle dormira</I> <li>Ger: <I>sie wird schlafen</I> <li>Ita: <I>lei dormirà</I> <li>Nep: <I>उनी सुत्नेछिन्</I> <li>Nor: <I>hun vil sove</I> <li>Pes: <I>او خواهد خوابید</I> <li>Pnb: <I>او سوئے گی</I> <li>Pol: <I>ona będzie spała</I> <li>Ron: <I>ea va dormi</I> <li>Rus: <I>она будет спать</I> <li>Spa: <I>ella dormirá</I> <li>Swe: <I>hon ska sova</I> <li>Urd: <I>وہ سوئے گی</I> </ul> </div> </div></TD>-</TR>-<TR>-<TD><CODE>pastTense</CODE></TD>-<TD><A HREF="#Tense" TITLE="Tense - tense">Tense</A></TD>-<TD><div class=reveal> <I>she slept</I> <div class=popup> <ul> <li>API: <CODE>mkS pastTense (mkCl she_NP sleep_V)</CODE> <li>Afr: <I>sy slaap</I> <li>Bul: <I>тя спа</I> <li>Cat: <I>ella dormia</I> <li>Dan: <I>hun sov</I> <li>Dut: <I>ze sliep</I> <li>Eng: <I>she slept</I> <li>Fin: <I>hän nukkui</I> <li>Fre: <I>elle dormait</I> <li>Ger: <I>sie schlief</I> <li>Ita: <I>lei dormiva</I> <li>Nep: <I>उनी सुतिन्</I> <li>Nor: <I>hun sov</I> <li>Pes: <I>او خوابید</I> <li>Pnb: <I>او سوئی</I> <li>Pol: <I>ona spała</I> <li>Ron: <I>ea a dormit</I> <li>Rus: <I>она спала</I> <li>Spa: <I>ella dormía</I> <li>Swe: <I>hon sov</I> <li>Urd: <I>وہ سوئی</I> </ul> </div> </div></TD>-</TR>-<TR>-<TD><CODE>presentTense</CODE></TD>-<TD><A HREF="#Tense" TITLE="Tense - tense">Tense</A></TD>-<TD><div class=reveal> <I>she sleeps</I> <div class=popup> <ul> <li>API: <CODE>mkS presentTense (mkCl she_NP sleep_V)</CODE> <li>Afr: <I>sy slaap</I> <li>Bul: <I>тя спи</I> <li>Cat: <I>ella dorm</I> <li>Dan: <I>hun sover</I> <li>Dut: <I>ze slaapt</I> <li>Eng: <I>she sleeps</I> <li>Fin: <I>hän nukkuu</I> <li>Fre: <I>elle dort</I> <li>Ger: <I>sie schläft</I> <li>Ita: <I>lei dorme</I> <li>Nep: <I>उनी सुत्छिन्</I> <li>Nor: <I>hun sover</I> <li>Pes: <I>او می خوابد</I> <li>Pnb: <I>او سوندی اے</I> <li>Pol: <I>ona śpi</I> <li>Ron: <I>ea doarme</I> <li>Rus: <I>она спдит</I> <li>Spa: <I>ella duerme</I> <li>Swe: <I>hon sover</I> <li>Urd: <I>وہ سوتی ہے</I> </ul> </div> </div></TD>-</TR>-</TABLE>--<A NAME="Text"></A>-<H2>Text - text consisting of several phrases</H2>--<TABLE BORDER="1" CELLPADDING="4">-<TR>-<TH>Function</TH>-<TH>Type</TH>-<TH COLSPAN="2">Example</TH>-</TR>-<TR>-<TD><CODE>emptyText</CODE></TD>-<TD><A HREF="#Text" TITLE="Text - text consisting of several phrases">Text</A></TD>-<TD><I>(empty text)</I></TD>-</TR>-<TR>-<TD><CODE>mkText</CODE></TD>-<TD><A HREF="#Phr" TITLE="Phr - phrase in a text">Phr</A> <CODE>-></CODE> (<A HREF="#Punct">Punct</A>) <CODE>-></CODE> (<A HREF="#Text" TITLE="Text - text consisting of several phrases">Text</A>) <CODE>-></CODE> <A HREF="#Text" TITLE="Text - text consisting of several phrases">Text</A></TD>-<TD><div class=reveal> <I>does she sleep ? yes .</I> <div class=popup> <ul> <li>API: <CODE>mkText (mkPhr (mkQS (mkCl she_NP sleep_V))) questMarkPunct (mkText (mkPhr yes_Utt) fullStopPunct)</CODE> <li>Afr: <I>slaap sy ? ja .</I> <li>Bul: <I>тя спи ли ? да .</I> <li>Cat: <I>ella dorm ? sí .</I> <li>Dan: <I>sover hun ? ja .</I> <li>Dut: <I>slaapt ze ? ja .</I> <li>Eng: <I>does she sleep ? yes .</I> <li>Fin: <I>nukkuuko hän ? kyllä .</I> <li>Fre: <I>elle dort ? oui .</I> <li>Ger: <I>schläft sie ? ja .</I> <li>Ita: <I>lei dorme ? sì .</I> <li>Nep: <I>के उनी सुत्छिन् ? हजुर .</I> <li>Nor: <I>sover hun ? ja .</I> <li>Pes: <I>آیا او می خوابد بله Û”</I> <li>Pnb: <I>كی او سوندی اے ? ہاں .</I> <li>Pol: <I>czy ona śpi ? tak .</I> <li>Ron: <I>ea doarme ? da .</I> <li>Rus: <I>она спдит ? Да .</I> <li>Spa: <I>¿ ella duerme ? sí .</I> <li>Swe: <I>sover hon ? ja .</I> <li>Urd: <I>كیا وہ سوتی ہے ہاں</I> </ul> </div> </div></TD>-</TR>-<TR>-<TD><CODE>mkText</CODE></TD>-<TD><A HREF="#Utt" TITLE="Utt - sentence, question, word...">Utt</A> <CODE>-></CODE> <A HREF="#Text" TITLE="Text - text consisting of several phrases">Text</A></TD>-<TD><div class=reveal> <I>yes .</I> <div class=popup> <ul> <li>API: <CODE>mkText yes_Utt</CODE> <li>Afr: <I>ja .</I> <li>Bul: <I>да .</I> <li>Cat: <I>sí .</I> <li>Dan: <I>ja .</I> <li>Dut: <I>ja .</I> <li>Eng: <I>yes .</I> <li>Fin: <I>kyllä .</I> <li>Fre: <I>oui .</I> <li>Ger: <I>ja .</I> <li>Ita: <I>sì .</I> <li>Nep: <I>हजुर .</I> <li>Nor: <I>ja .</I> <li>Pes: <I>بله Û”</I> <li>Pnb: <I>ہاں .</I> <li>Pol: <I>tak .</I> <li>Ron: <I>da .</I> <li>Rus: <I>Да .</I> <li>Spa: <I>sí .</I> <li>Swe: <I>ja .</I> <li>Urd: <I>ہاں</I> </ul> </div> </div></TD>-</TR>-<TR>-<TD><CODE>mkText</CODE></TD>-<TD><A HREF="#S" TITLE="S - declarative sentence">S</A> <CODE>-></CODE> <A HREF="#Text" TITLE="Text - text consisting of several phrases">Text</A></TD>-<TD><div class=reveal> <I>she slept .</I> <div class=popup> <ul> <li>API: <CODE>mkText (mkS pastTense (mkCl she_NP sleep_V))</CODE> <li>Afr: <I>sy slaap .</I> <li>Bul: <I>тя спа .</I> <li>Cat: <I>ella dormia .</I> <li>Dan: <I>hun sov .</I> <li>Dut: <I>ze sliep .</I> <li>Eng: <I>she slept .</I> <li>Fin: <I>hän nukkui .</I> <li>Fre: <I>elle dormait .</I> <li>Ger: <I>sie schlief .</I> <li>Ita: <I>lei dormiva .</I> <li>Nep: <I>उनी सुतिन् .</I> <li>Nor: <I>hun sov .</I> <li>Pes: <I>او خوابید Û”</I> <li>Pnb: <I>او سوئی .</I> <li>Pol: <I>ona spała .</I> <li>Ron: <I>ea a dormit .</I> <li>Rus: <I>она спала .</I> <li>Spa: <I>ella dormía .</I> <li>Swe: <I>hon sov .</I> <li>Urd: <I>وہ سوئی</I> </ul> </div> </div></TD>-</TR>-<TR>-<TD><CODE>mkText</CODE></TD>-<TD><A HREF="#Cl" TITLE="Cl - declarative clause, with all tenses">Cl</A> <CODE>-></CODE> <A HREF="#Text" TITLE="Text - text consisting of several phrases">Text</A></TD>-<TD><div class=reveal> <I>she sleeps .</I> <div class=popup> <ul> <li>API: <CODE>mkText (mkCl she_NP sleep_V)</CODE> <li>Afr: <I>sy slaap .</I> <li>Bul: <I>тя спи .</I> <li>Cat: <I>ella dorm .</I> <li>Dan: <I>hun sover .</I> <li>Dut: <I>ze slaapt .</I> <li>Eng: <I>she sleeps .</I> <li>Fin: <I>hän nukkuu .</I> <li>Fre: <I>elle dort .</I> <li>Ger: <I>sie schläft .</I> <li>Ita: <I>lei dorme .</I> <li>Nep: <I>उनी सुत्छिन् .</I> <li>Nor: <I>hun sover .</I> <li>Pes: <I>او می خوابد Û”</I> <li>Pnb: <I>او سوندی اے .</I> <li>Pol: <I>ona śpi .</I> <li>Ron: <I>ea doarme .</I> <li>Rus: <I>она спдит .</I> <li>Spa: <I>ella duerme .</I> <li>Swe: <I>hon sover .</I> <li>Urd: <I>وہ سوتی ہے</I> </ul> </div> </div></TD>-</TR>-<TR>-<TD><CODE>mkText</CODE></TD>-<TD><A HREF="#QS" TITLE="QS - question">QS</A> <CODE>-></CODE> <A HREF="#Text" TITLE="Text - text consisting of several phrases">Text</A></TD>-<TD><div class=reveal> <I>did she sleep ?</I> <div class=popup> <ul> <li>API: <CODE>mkText (mkQS pastTense (mkQCl (mkCl she_NP sleep_V)))</CODE> <li>Afr: <I>slaap sy ?</I> <li>Bul: <I>тя спа ли ?</I> <li>Cat: <I>ella dormia ?</I> <li>Dan: <I>sov hun ?</I> <li>Dut: <I>sliep ze ?</I> <li>Eng: <I>did she sleep ?</I> <li>Fin: <I>nukkuiko hän ?</I> <li>Fre: <I>elle dormait ?</I> <li>Ger: <I>schlief sie ?</I> <li>Ita: <I>lei dormiva ?</I> <li>Nep: <I>के उनी सुतिन् ?</I> <li>Nor: <I>sov hun ?</I> <li>Pes: <I>آیا او خوابید</I> <li>Pnb: <I>كی او سوئی ?</I> <li>Pol: <I>czy ona spała ?</I> <li>Ron: <I>ea a dormit ?</I> <li>Rus: <I>она спала ?</I> <li>Spa: <I>¿ ella dormía ?</I> <li>Swe: <I>sov hon ?</I> <li>Urd: <I>كیا وہ سوئی</I> </ul> </div> </div></TD>-</TR>-<TR>-<TD><CODE>mkText</CODE></TD>-<TD>(<A HREF="#Pol" TITLE="Pol - polarity">Pol</A>) <CODE>-></CODE> <A HREF="#Imp" TITLE="Imp - imperative">Imp</A> <CODE>-></CODE> <A HREF="#Text" TITLE="Text - text consisting of several phrases">Text</A></TD>-<TD><div class=reveal> <I>don't sleep !</I> <div class=popup> <ul> <li>API: <CODE>mkText negativePol (mkImp sleep_V)</CODE> <li>Afr: <I>slaap nie !</I> <li>Bul: <I>не спи !</I> <li>Cat: <I>no dorm !</I> <li>Dan: <I>sov ikke !</I> <li>Dut: <I>slaap niet !</I> <li>Eng: <I>don't sleep !</I> <li>Fin: <I>älä nuku !</I> <li>Fre: <I>ne dors pas !</I> <li>Ger: <I>schlaf nicht !</I> <li>Ita: <I>non dormire !</I> <li>Nep: <I>नगर सुत् होउ !</I> <li>Nor: <I>sov ikke !</I> <li>Pes: <I>نخواب</I> <li>Pnb: <I>مت سونا !</I> <li>Pol: <I>nie śpij !</I> <li>Ron: <I>nu dormi !</I> <li>Rus: <I>не спи !</I> <li>Spa: <I>¡ no duerme !</I> <li>Swe: <I>sov inte !</I> <li>Urd: <I>مت سونا</I> </ul> </div> </div></TD>-</TR>-<TR>-<TD><CODE>mkText</CODE></TD>-<TD><A HREF="#Text" TITLE="Text - text consisting of several phrases">Text</A> <CODE>-></CODE> <A HREF="#Text" TITLE="Text - text consisting of several phrases">Text</A> <CODE>-></CODE> <A HREF="#Text" TITLE="Text - text consisting of several phrases">Text</A></TD>-<TD><div class=reveal> <I>where ? here . when ? now !</I> <div class=popup> <ul> <li>API: <CODE>mkText (mkText (mkPhr (mkUtt where_IAdv)) questMarkPunct (mkText (mkPhr (mkUtt here_Adv)))) (mkText (mkPhr (mkUtt when_IAdv)) questMarkPunct (mkText (mkPhr (mkUtt now_Adv)) exclMarkPunct))</CODE> <li>Afr: <I>waar ? hier . wanneer ? nou !</I> <li>Bul: <I>къде ? тук . кога ? сега !</I> <li>Cat: <I>on ? aquí . quan ? ara !</I> <li>Dan: <I>hvor ? her . hvornår ? nu !</I> <li>Dut: <I>waar ? hier . wanneer ? nu !</I> <li>Eng: <I>where ? here . when ? now !</I> <li>Fin: <I>missä ? täällä . milloin ? nyt !</I> <li>Fre: <I>où ? ici . quand ? maintenant !</I> <li>Ger: <I>wo ? hier . wann ? jetzt !</I> <li>Ita: <I>dove ? quà . quando ? adesso !</I> <li>Nep: <I>कहाँ ? यहाँ . कहिले ? अहीले !</I> <li>Nor: <I>hvor ? her . når ? nå !</I> <li>Pes: <I>کجا اینجا Û” کی حالا</I> <li>Pnb: <I>كتھے ? ایتھے . كدوں ? ہون !</I> <li>Pol: <I>gdzie ? tutaj . kiedy ? teraz !</I> <li>Ron: <I>unde ? aici . când ? acum !</I> <li>Rus: <I>где ? здесь . когда ? сейчас !</I> <li>Spa: <I>¿ donde ? aquí . ¿ cuando ? ¡ ahora !</I> <li>Swe: <I>var ? här . när ? nu !</I> <li>Urd: <I>كہاں یہاں كب اب</I> </ul> </div> </div></TD>-</TR>-</TABLE>--<A NAME="Unit"></A>-<H2>Unit</H2>--<TABLE BORDER="1" CELLPADDING="4">-<TR>-<TH>Function</TH>-<TH>Type</TH>-<TH COLSPAN="2">Example</TH>-</TR>-<TR>-<TD><CODE>n1_Unit</CODE></TD>-<TD><A HREF="#Unit">Unit</A></TD>-<TD><div class=reveal> <I>one</I> <div class=popup> <ul> <li>API: <CODE>mkNumeral n1_Unit</CODE> <li>Afr: <I>een</I> <li>Bul: <I>един</I> <li>Cat: <I>un</I> <li>Dan: <I>en</I> <li>Dut: <I>een</I> <li>Eng: <I>one</I> <li>Fin: <I>yksi</I> <li>Fre: <I>un</I> <li>Ger: <I>ein</I> <li>Ita: <I>uno</I> <li>Nep: <I>एक</I> <li>Nor: <I>en</I> <li>Pes: <I>یک</I> <li>Pnb: <I>اك</I> <li>Pol: <I>jeden</I> <li>Ron: <I>un</I> <li>Rus: <I>один</I> <li>Spa: <I>uno</I> <li>Swe: <I>en</I> <li>Urd: <I>ایك</I> </ul> </div> </div></TD>-</TR>-<TR>-<TD><CODE>n2_Unit</CODE></TD>-<TD><A HREF="#Unit">Unit</A></TD>-<TD><div class=reveal> <I>two</I> <div class=popup> <ul> <li>API: <CODE>mkNumeral n2_Unit</CODE> <li>Afr: <I>twee</I> <li>Bul: <I>двама</I> <li>Cat: <I>dos</I> <li>Dan: <I>to</I> <li>Dut: <I>twee</I> <li>Eng: <I>two</I> <li>Fin: <I>kaksi</I> <li>Fre: <I>deux</I> <li>Ger: <I>zwei</I> <li>Ita: <I>due</I> <li>Nep: <I>दुई</I> <li>Nor: <I>to</I> <li>Pes: <I>دو</I> <li>Pnb: <I>دو</I> <li>Pol: <I>dwa</I> <li>Ron: <I>doi</I> <li>Rus: <I>два</I> <li>Spa: <I>dos</I> <li>Swe: <I>två</I> <li>Urd: <I>دو</I> </ul> </div> </div></TD>-</TR>-<TR>-<TD><CODE>n3_Unit</CODE></TD>-<TD><A HREF="#Unit">Unit</A></TD>-<TD><div class=reveal> <I>three</I> <div class=popup> <ul> <li>API: <CODE>mkNumeral n3_Unit</CODE> <li>Afr: <I>drie</I> <li>Bul: <I>трима</I> <li>Cat: <I>tres</I> <li>Dan: <I>tre</I> <li>Dut: <I>drie</I> <li>Eng: <I>three</I> <li>Fin: <I>kolme</I> <li>Fre: <I>trois</I> <li>Ger: <I>drei</I> <li>Ita: <I>tre</I> <li>Nep: <I>तीन</I> <li>Nor: <I>tre</I> <li>Pes: <I>سه</I> <li>Pnb: <I>تن</I> <li>Pol: <I>trzy</I> <li>Ron: <I>trei</I> <li>Rus: <I>три</I> <li>Spa: <I>tres</I> <li>Swe: <I>tre</I> <li>Urd: <I>تین</I> </ul> </div> </div></TD>-</TR>-<TR>-<TD><CODE>n4_Unit</CODE></TD>-<TD><A HREF="#Unit">Unit</A></TD>-<TD><div class=reveal> <I>four</I> <div class=popup> <ul> <li>API: <CODE>mkNumeral n4_Unit</CODE> <li>Afr: <I>vier</I> <li>Bul: <I>четирима</I> <li>Cat: <I>quatre</I> <li>Dan: <I>fire</I> <li>Dut: <I>vier</I> <li>Eng: <I>four</I> <li>Fin: <I>neljä</I> <li>Fre: <I>quatre</I> <li>Ger: <I>vier</I> <li>Ita: <I>quattro</I> <li>Nep: <I>चार</I> <li>Nor: <I>fire</I> <li>Pes: <I>چهار</I> <li>Pnb: <I>چار</I> <li>Pol: <I>cztery</I> <li>Ron: <I>patru</I> <li>Rus: <I>четыре</I> <li>Spa: <I>cuatro</I> <li>Swe: <I>fyra</I> <li>Urd: <I>چار</I> </ul> </div> </div></TD>-</TR>-<TR>-<TD><CODE>n5_Unit</CODE></TD>-<TD><A HREF="#Unit">Unit</A></TD>-<TD><div class=reveal> <I>five</I> <div class=popup> <ul> <li>API: <CODE>mkNumeral n5_Unit</CODE> <li>Afr: <I>vyf</I> <li>Bul: <I>петима</I> <li>Cat: <I>cinc</I> <li>Dan: <I>fem</I> <li>Dut: <I>vijf</I> <li>Eng: <I>five</I> <li>Fin: <I>viisi</I> <li>Fre: <I>cinq</I> <li>Ger: <I>fünf</I> <li>Ita: <I>cinque</I> <li>Nep: <I>पाँच</I> <li>Nor: <I>fem</I> <li>Pes: <I>پنج</I> <li>Pnb: <I>پنج</I> <li>Pol: <I>pięć</I> <li>Ron: <I>cinci</I> <li>Rus: <I>пять</I> <li>Spa: <I>cinco</I> <li>Swe: <I>fem</I> <li>Urd: <I>پانچ</I> </ul> </div> </div></TD>-</TR>-<TR>-<TD><CODE>n6_Unit</CODE></TD>-<TD><A HREF="#Unit">Unit</A></TD>-<TD><div class=reveal> <I>six</I> <div class=popup> <ul> <li>API: <CODE>mkNumeral n6_Unit</CODE> <li>Afr: <I>ses</I> <li>Bul: <I>шестима</I> <li>Cat: <I>sis</I> <li>Dan: <I>seks</I> <li>Dut: <I>zes</I> <li>Eng: <I>six</I> <li>Fin: <I>kuusi</I> <li>Fre: <I>six</I> <li>Ger: <I>sechs</I> <li>Ita: <I>sei</I> <li>Nep: <I>छ</I> <li>Nor: <I>seks</I> <li>Pes: <I>شش</I> <li>Pnb: <I>چھ</I> <li>Pol: <I>sześć</I> <li>Ron: <I>şase</I> <li>Rus: <I>шесть</I> <li>Spa: <I>seis</I> <li>Swe: <I>sex</I> <li>Urd: <I>چھ</I> </ul> </div> </div></TD>-</TR>-<TR>-<TD><CODE>n7_Unit</CODE></TD>-<TD><A HREF="#Unit">Unit</A></TD>-<TD><div class=reveal> <I>seven</I> <div class=popup> <ul> <li>API: <CODE>mkNumeral n7_Unit</CODE> <li>Afr: <I>seven</I> <li>Bul: <I>седмина</I> <li>Cat: <I>set</I> <li>Dan: <I>syv</I> <li>Dut: <I>zeven</I> <li>Eng: <I>seven</I> <li>Fin: <I>seitsemän</I> <li>Fre: <I>sept</I> <li>Ger: <I>sieben</I> <li>Ita: <I>sette</I> <li>Nep: <I>सात</I> <li>Nor: <I>sju</I> <li>Pes: <I>هفت</I> <li>Pnb: <I>ست</I> <li>Pol: <I>siedem</I> <li>Ron: <I>şapte</I> <li>Rus: <I>семь</I> <li>Spa: <I>siete</I> <li>Swe: <I>sju</I> <li>Urd: <I>سات</I> </ul> </div> </div></TD>-</TR>-<TR>-<TD><CODE>n8_Unit</CODE></TD>-<TD><A HREF="#Unit">Unit</A></TD>-<TD><div class=reveal> <I>eight</I> <div class=popup> <ul> <li>API: <CODE>mkNumeral n8_Unit</CODE> <li>Afr: <I>agt</I> <li>Bul: <I>осмина</I> <li>Cat: <I>vuit</I> <li>Dan: <I>otte</I> <li>Dut: <I>acht</I> <li>Eng: <I>eight</I> <li>Fin: <I>kahdeksan</I> <li>Fre: <I>huit</I> <li>Ger: <I>acht</I> <li>Ita: <I>otto</I> <li>Nep: <I>आठ</I> <li>Nor: <I>åtte</I> <li>Pes: <I>هشت</I> <li>Pnb: <I>اٹھ</I> <li>Pol: <I>osiemm</I> <li>Ron: <I>opt</I> <li>Rus: <I>восемь</I> <li>Spa: <I>ocho</I> <li>Swe: <I>åtta</I> <li>Urd: <I>آٹھ</I> </ul> </div> </div></TD>-</TR>-<TR>-<TD><CODE>n9_Unit</CODE></TD>-<TD><A HREF="#Unit">Unit</A></TD>-<TD><div class=reveal> <I>nine</I> <div class=popup> <ul> <li>API: <CODE>mkNumeral n9_Unit</CODE> <li>Afr: <I>nege</I> <li>Bul: <I>деветима</I> <li>Cat: <I>nou</I> <li>Dan: <I>ni</I> <li>Dut: <I>negen</I> <li>Eng: <I>nine</I> <li>Fin: <I>yhdeksän</I> <li>Fre: <I>neuf</I> <li>Ger: <I>neun</I> <li>Ita: <I>nove</I> <li>Nep: <I>नौ</I> <li>Nor: <I>ni</I> <li>Pes: <I>نه</I> <li>Pnb: <I>نو</I> <li>Pol: <I>dziewięć</I> <li>Ron: <I>nouă</I> <li>Rus: <I>девять</I> <li>Spa: <I>nueve</I> <li>Swe: <I>nio</I> <li>Urd: <I>نو</I> </ul> </div> </div></TD>-</TR>-</TABLE>--<A NAME="Utt"></A>-<H2>Utt - sentence, question, word...</H2>--<TABLE BORDER="1" CELLPADDING="4">-<TR>-<TH>Function</TH>-<TH>Type</TH>-<TH COLSPAN="2">Example</TH>-</TR>-<TR>-<TD><CODE>lets_Utt</CODE></TD>-<TD><A HREF="#VP" TITLE="VP - verb phrase">VP</A> <CODE>-></CODE> <A HREF="#Utt" TITLE="Utt - sentence, question, word...">Utt</A></TD>-<TD><div class=reveal> <I>let's sleep</I> <div class=popup> <ul> <li>API: <CODE>mkPhr (lets_Utt (mkVP sleep_V))</CODE> <li>Afr: <I>laat ons slaap</I> <li>Bul: <I>нека да спим</I> <li>Cat: <I>dormim</I> <li>Dan: <I>lad os sove</I> <li>Dut: <I>laten we slapen</I> <li>Eng: <I>let's sleep</I> <li>Fin: <I>nukutaan</I> <li>Fre: <I>dormons</I> <li>Ger: <I>schlafen wir</I> <li>Ita: <I>dormiamo</I> <li>Nep: <I>सुतौँ</I> <li>Nor: <I>lat oss sove</I> <li>Pes: <I>بیایید بخوابیم</I> <li>Pnb: <I>آو سون</I> <li>Pol: <I>śpijmy</I> <li>Ron: <I>sã dormim</I> <li>Rus: <I>давайте будем спать</I> <li>Spa: <I>durmamos</I> <li>Swe: <I>låt oss sova</I> <li>Urd: <I>آو سوئیں</I> </ul> </div> </div></TD>-</TR>-<TR>-<TD><CODE>mkUtt</CODE></TD>-<TD><A HREF="#S" TITLE="S - declarative sentence">S</A> <CODE>-></CODE> <A HREF="#Utt" TITLE="Utt - sentence, question, word...">Utt</A></TD>-<TD><div class=reveal> <I>she slept</I> <div class=popup> <ul> <li>API: <CODE>mkUtt (mkS pastTense (mkCl she_NP sleep_V))</CODE> <li>Afr: <I>sy slaap</I> <li>Bul: <I>тя спа</I> <li>Cat: <I>ella dormia</I> <li>Dan: <I>hun sov</I> <li>Dut: <I>ze sliep</I> <li>Eng: <I>she slept</I> <li>Fin: <I>hän nukkui</I> <li>Fre: <I>elle dormait</I> <li>Ger: <I>sie schlief</I> <li>Ita: <I>lei dormiva</I> <li>Nep: <I>उनी सुतिन्</I> <li>Nor: <I>hun sov</I> <li>Pes: <I>او خوابید</I> <li>Pnb: <I>او سوئی</I> <li>Pol: <I>ona spała</I> <li>Ron: <I>ea a dormit</I> <li>Rus: <I>она спала</I> <li>Spa: <I>ella dormía</I> <li>Swe: <I>hon sov</I> <li>Urd: <I>وہ سوئی</I> </ul> </div> </div></TD>-</TR>-<TR>-<TD><CODE>mkUtt</CODE></TD>-<TD><A HREF="#Cl" TITLE="Cl - declarative clause, with all tenses">Cl</A> <CODE>-></CODE> <A HREF="#Utt" TITLE="Utt - sentence, question, word...">Utt</A></TD>-<TD><div class=reveal> <I>she sleeps</I> <div class=popup> <ul> <li>API: <CODE>mkUtt (mkCl she_NP sleep_V)</CODE> <li>Afr: <I>sy slaap</I> <li>Bul: <I>тя спи</I> <li>Cat: <I>ella dorm</I> <li>Dan: <I>hun sover</I> <li>Dut: <I>ze slaapt</I> <li>Eng: <I>she sleeps</I> <li>Fin: <I>hän nukkuu</I> <li>Fre: <I>elle dort</I> <li>Ger: <I>sie schläft</I> <li>Ita: <I>lei dorme</I> <li>Nep: <I>उनी सुत्छिन्</I> <li>Nor: <I>hun sover</I> <li>Pes: <I>او می خوابد</I> <li>Pnb: <I>او سوندی اے</I> <li>Pol: <I>ona śpi</I> <li>Ron: <I>ea doarme</I> <li>Rus: <I>она спдит</I> <li>Spa: <I>ella duerme</I> <li>Swe: <I>hon sover</I> <li>Urd: <I>وہ سوتی ہے</I> </ul> </div> </div></TD>-</TR>-<TR>-<TD><CODE>mkUtt</CODE></TD>-<TD><A HREF="#QS" TITLE="QS - question">QS</A> <CODE>-></CODE> <A HREF="#Utt" TITLE="Utt - sentence, question, word...">Utt</A></TD>-<TD><div class=reveal> <I>who didn't sleep</I> <div class=popup> <ul> <li>API: <CODE>mkUtt (mkQS pastTense negativePol (mkQCl who_IP sleep_V))</CODE> <li>Afr: <I>wie slaap nie nie</I> <li>Bul: <I>кой не спа</I> <li>Cat: <I>qui no dormia</I> <li>Dan: <I>hvem sov ikke</I> <li>Dut: <I>wie sliep niet</I> <li>Eng: <I>who didn't sleep</I> <li>Fin: <I>kuka ei nukkunut</I> <li>Fre: <I>qui ne dormait pas</I> <li>Ger: <I>wer schlief nicht</I> <li>Ita: <I>chi non dormiva</I> <li>Nep: <I>को सुतेनन्</I> <li>Nor: <I>hvem sov ikke</I> <li>Pes: <I>چه کسی نخوابید</I> <li>Pnb: <I>كون نیں سویا</I> <li>Pol: <I>kto nie spał</I> <li>Ron: <I>cine nu a dormit</I> <li>Rus: <I>кто спал</I> <li>Spa: <I>quién no dormía</I> <li>Swe: <I>vem sov inte</I> <li>Urd: <I>كون نہیں سویا</I> </ul> </div> </div></TD>-</TR>-<TR>-<TD><CODE>mkUtt</CODE></TD>-<TD><A HREF="#QCl" TITLE="QCl - question clause, with all tenses">QCl</A> <CODE>-></CODE> <A HREF="#Utt" TITLE="Utt - sentence, question, word...">Utt</A></TD>-<TD><div class=reveal> <I>who sleeps</I> <div class=popup> <ul> <li>API: <CODE>mkUtt (mkQCl who_IP sleep_V)</CODE> <li>Afr: <I>wie slaap</I> <li>Bul: <I>кой спи</I> <li>Cat: <I>qui dorm</I> <li>Dan: <I>hvem sover</I> <li>Dut: <I>wie slaapt</I> <li>Eng: <I>who sleeps</I> <li>Fin: <I>kuka nukkuu</I> <li>Fre: <I>qui dort</I> <li>Ger: <I>wer schläft</I> <li>Ita: <I>chi dorme</I> <li>Nep: <I>को सुत्छन्</I> <li>Nor: <I>hvem sover</I> <li>Pes: <I>چه کسی می خوابد</I> <li>Pnb: <I>كون سوندا اے</I> <li>Pol: <I>kto śpi</I> <li>Ron: <I>cine doarme</I> <li>Rus: <I>кто спдит</I> <li>Spa: <I>quién duerme</I> <li>Swe: <I>vem sover</I> <li>Urd: <I>كون سوتا ہے</I> </ul> </div> </div></TD>-</TR>-<TR>-<TD><CODE>mkUtt</CODE></TD>-<TD>(<A HREF="#ImpForm">ImpForm</A>) <CODE>-></CODE> (<A HREF="#Pol" TITLE="Pol - polarity">Pol</A>) <CODE>-></CODE> <A HREF="#Imp" TITLE="Imp - imperative">Imp</A> <CODE>-></CODE> <A HREF="#Utt" TITLE="Utt - sentence, question, word...">Utt</A></TD>-<TD><div class=reveal> <I>don't be men</I> <div class=popup> <ul> <li>API: <CODE>mkUtt pluralImpForm negativePol (mkImp (mkVP man_N))</CODE> <li>Afr: <I>wees mans nie</I> <li>Bul: <I>не бъдете мъже</I> <li>Cat: <I>no sigueu homes</I> <li>Dan: <I>var ikke mænd</I> <li>Dut: <I>wezen mannen niet</I> <li>Eng: <I>don't be men</I> <li>Fin: <I>älkää olko miehiä</I> <li>Fre: <I>ne soyez pas des hommes</I> <li>Ger: <I>seid Männer nicht</I> <li>Ita: <I>non siate uomini</I> <li>Nep: <I>नगर मान्छेहरु हऔ</I> <li>Nor: <I>var ikke menn</I> <li>Pes: <I>مردان</I> <li>Pnb: <I>مت بندے</I> <li>Pol: <I>nie bądźcie mężczyzna</I> <li>Ron: <I>nu sunteţi oameni</I> <li>Rus: <I>не будьте человеками</I> <li>Spa: <I>no sed hombres</I> <li>Swe: <I>var inte män</I> <li>Urd: <I>مت آدمی</I> </ul> </div> </div></TD>-</TR>-<TR>-<TD><CODE>mkUtt</CODE></TD>-<TD><A HREF="#IP" TITLE="IP - interrogative pronoun">IP</A> <CODE>-></CODE> <A HREF="#Utt" TITLE="Utt - sentence, question, word...">Utt</A></TD>-<TD><div class=reveal> <I>who</I> <div class=popup> <ul> <li>API: <CODE>mkUtt who_IP</CODE> <li>Afr: <I>wie</I> <li>Bul: <I>кой</I> <li>Cat: <I>qui</I> <li>Dan: <I>hvem</I> <li>Dut: <I>wie</I> <li>Eng: <I>who</I> <li>Fin: <I>kuka</I> <li>Fre: <I>qui</I> <li>Ger: <I>wer</I> <li>Ita: <I>chi</I> <li>Nep: <I>को</I> <li>Nor: <I>hvem</I> <li>Pes: <I>چه کسی</I> <li>Pnb: <I>كون</I> <li>Pol: <I>kto</I> <li>Ron: <I>cine</I> <li>Rus: <I>кто</I> <li>Spa: <I>quién</I> <li>Swe: <I>vem</I> <li>Urd: <I>كون</I> </ul> </div> </div></TD>-</TR>-<TR>-<TD><CODE>mkUtt</CODE></TD>-<TD><A HREF="#IAdv" TITLE="IAdv - interrogative adverb">IAdv</A> <CODE>-></CODE> <A HREF="#Utt" TITLE="Utt - sentence, question, word...">Utt</A></TD>-<TD><div class=reveal> <I>why</I> <div class=popup> <ul> <li>API: <CODE>mkUtt why_IAdv</CODE> <li>Afr: <I>waarom</I> <li>Bul: <I>защо</I> <li>Cat: <I>per quË</I> <li>Dan: <I>hvorfor</I> <li>Dut: <I>waarom</I> <li>Eng: <I>why</I> <li>Fin: <I>miksi</I> <li>Fre: <I>pourquoi</I> <li>Ger: <I>warum</I> <li>Ita: <I>perché</I> <li>Nep: <I>किन</I> <li>Nor: <I>hvorfor</I> <li>Pes: <I>چرا</I> <li>Pnb: <I>كیوں</I> <li>Pol: <I>dlaczego</I> <li>Ron: <I>de ce</I> <li>Rus: <I>почему</I> <li>Spa: <I>porqué</I> <li>Swe: <I>varför</I> <li>Urd: <I>كیوں</I> </ul> </div> </div></TD>-</TR>-<TR>-<TD><CODE>mkUtt</CODE></TD>-<TD><A HREF="#NP" TITLE="NP - noun phrase (subject or object)">NP</A> <CODE>-></CODE> <A HREF="#Utt" TITLE="Utt - sentence, question, word...">Utt</A></TD>-<TD><div class=reveal> <I>this man</I> <div class=popup> <ul> <li>API: <CODE>mkUtt (mkNP this_Det man_N)</CODE> <li>Afr: <I>hierdie man</I> <li>Bul: <I>този мъж</I> <li>Cat: <I>aquest home</I> <li>Dan: <I>denne mand</I> <li>Dut: <I>deze man</I> <li>Eng: <I>this man</I> <li>Fin: <I>tämä mies</I> <li>Fre: <I>cet homme</I> <li>Ger: <I>dieser Mann</I> <li>Ita: <I>questo uomo</I> <li>Nep: <I>यो मान्छे</I> <li>Nor: <I>denne mannen</I> <li>Pes: <I>این مرد</I> <li>Pnb: <I>اے بندہ</I> <li>Pol: <I>ten mężczyzna</I> <li>Ron: <I>acest om</I> <li>Rus: <I>этот человек</I> <li>Spa: <I>este hombre</I> <li>Swe: <I>den här mannen</I> <li>Urd: <I>یہ آدمی</I> </ul> </div> </div></TD>-</TR>-<TR>-<TD><CODE>mkUtt</CODE></TD>-<TD><A HREF="#Adv" TITLE="Adv - verb-phrase-modifying adverb">Adv</A> <CODE>-></CODE> <A HREF="#Utt" TITLE="Utt - sentence, question, word...">Utt</A></TD>-<TD><div class=reveal> <I>here</I> <div class=popup> <ul> <li>API: <CODE>mkUtt here_Adv</CODE> <li>Afr: <I>hier</I> <li>Bul: <I>тук</I> <li>Cat: <I>aquí</I> <li>Dan: <I>her</I> <li>Dut: <I>hier</I> <li>Eng: <I>here</I> <li>Fin: <I>täällä</I> <li>Fre: <I>ici</I> <li>Ger: <I>hier</I> <li>Ita: <I>quà</I> <li>Nep: <I>यहाँ</I> <li>Nor: <I>her</I> <li>Pes: <I>اینجا</I> <li>Pnb: <I>ایتھے</I> <li>Pol: <I>tutaj</I> <li>Ron: <I>aici</I> <li>Rus: <I>здесь</I> <li>Spa: <I>aquí</I> <li>Swe: <I>här</I> <li>Urd: <I>یہاں</I> </ul> </div> </div></TD>-</TR>-<TR>-<TD><CODE>mkUtt</CODE></TD>-<TD><A HREF="#VP" TITLE="VP - verb phrase">VP</A> <CODE>-></CODE> <A HREF="#Utt" TITLE="Utt - sentence, question, word...">Utt</A></TD>-<TD><div class=reveal> <I>to sleep</I> <div class=popup> <ul> <li>API: <CODE>mkUtt (mkVP sleep_V)</CODE> <li>Afr: <I>slaap</I> <li>Bul: <I>да спи</I> <li>Cat: <I>dormir</I> <li>Dan: <I>at sove</I> <li>Dut: <I>slapen</I> <li>Eng: <I>to sleep</I> <li>Fin: <I>nukkua</I> <li>Fre: <I>dormir</I> <li>Ger: <I>schlafen</I> <li>Ita: <I>dormire</I> <li>Nep: <I>सुत्नु</I> <li>Nor: <I>å sove</I> <li>Pes: <I>خوابیدن</I> <li>Pnb: <I>سونا</I> <li>Pol: <I>spać</I> <li>Ron: <I>sã doarmă</I> <li>Rus: <I>спать</I> <li>Spa: <I>dormir</I> <li>Swe: <I>att sova</I> <li>Urd: <I>سونا</I> </ul> </div> </div></TD>-</TR>-<TR>-<TD><CODE>mkUtt</CODE></TD>-<TD><A HREF="#CN" TITLE="CN - common noun (without determiner)">CN</A> <CODE>-></CODE> <A HREF="#Utt" TITLE="Utt - sentence, question, word...">Utt</A></TD>-<TD><div class=reveal> <I>beer</I> <div class=popup> <ul> <li>API: <CODE>mkUtt (mkCN beer_N)</CODE> <li>Afr: <I>bier</I> <li>Bul: <I>бира</I> <li>Cat: <I>cervesa</I> <li>Dan: <I>øl</I> <li>Dut: <I>bier</I> <li>Eng: <I>beer</I> <li>Fin: <I>olut</I> <li>Fre: <I>bière</I> <li>Ger: <I>Bier</I> <li>Ita: <I>birra</I> <li>Nep: <I>बियर</I> <li>Nor: <I>øl</I> <li>Pes: <I>آبجو</I> <li>Pnb: <I>شراب</I> <li>Pol: <I>piwo</I> <li>Ron: <I>bere</I> <li>Rus: <I>пиво</I> <li>Spa: <I>cerveza</I> <li>Swe: <I>öl</I> <li>Urd: <I>بییر</I> </ul> </div> </div></TD>-</TR>-<TR>-<TD><CODE>mkUtt</CODE></TD>-<TD><A HREF="#AP" TITLE="AP - adjectival phrase">AP</A> <CODE>-></CODE> <A HREF="#Utt" TITLE="Utt - sentence, question, word...">Utt</A></TD>-<TD><div class=reveal> <I>good</I> <div class=popup> <ul> <li>API: <CODE>mkUtt (mkAP good_A)</CODE> <li>Afr: <I>goed</I> <li>Bul: <I>добър</I> <li>Cat: <I>bo</I> <li>Dan: <I>god</I> <li>Dut: <I>goed</I> <li>Eng: <I>good</I> <li>Fin: <I>hyvä</I> <li>Fre: <I>bon</I> <li>Ger: <I>gut</I> <li>Ita: <I>buono</I> <li>Nep: <I>राम्रो</I> <li>Nor: <I>god</I> <li>Pes: <I>خوب</I> <li>Pnb: <I>اچھا</I> <li>Pol: <I>dobry</I> <li>Ron: <I>bun</I> <li>Rus: <I>хорошее</I> <li>Spa: <I>bueno</I> <li>Swe: <I>god</I> <li>Urd: <I>اچھا</I> </ul> </div> </div></TD>-</TR>-<TR>-<TD><CODE>mkUtt</CODE></TD>-<TD><A HREF="#Card" TITLE="Card - cardinal number">Card</A> <CODE>-></CODE> <A HREF="#Utt" TITLE="Utt - sentence, question, word...">Utt</A></TD>-<TD><div class=reveal> <I>five</I> <div class=popup> <ul> <li>API: <CODE>mkUtt (mkCard (mkNumeral n5_Unit))</CODE> <li>Afr: <I>vyf</I> <li>Bul: <I>пет</I> <li>Cat: <I>cinc</I> <li>Dan: <I>fem</I> <li>Dut: <I>vijf</I> <li>Eng: <I>five</I> <li>Fin: <I>viisi</I> <li>Fre: <I>cinq</I> <li>Ger: <I>fünf</I> <li>Ita: <I>cinque</I> <li>Nep: <I>पाँच</I> <li>Nor: <I>fem</I> <li>Pes: <I>پنج</I> <li>Pnb: <I>پنج</I> <li>Pol: <I>pięć</I> <li>Ron: <I>cinci</I> <li>Rus: <I>пять</I> <li>Spa: <I>cinco</I> <li>Swe: <I>fem</I> <li>Urd: <I>پانچ</I> </ul> </div> </div></TD>-</TR>-<TR>-<TD><CODE>no_Utt</CODE></TD>-<TD><A HREF="#Utt" TITLE="Utt - sentence, question, word...">Utt</A></TD>-<TD><div class=reveal> <I>no</I> <div class=popup> <ul> <li>API: <CODE>no_Utt</CODE> <li>Afr: <I>neen</I> <li>Bul: <I>не</I> <li>Cat: <I>no</I> <li>Dan: <I>nej</I> <li>Dut: <I>neen</I> <li>Eng: <I>no</I> <li>Fin: <I>ei</I> <li>Fre: <I>non</I> <li>Ger: <I>nein</I> <li>Ita: <I>no</I> <li>Nep: <I>होईन</I> <li>Nor: <I>nei</I> <li>Pes: <I>نه</I> <li>Pnb: <I>نیں</I> <li>Pol: <I>nie</I> <li>Ron: <I>nu</I> <li>Rus: <I>Нет</I> <li>Spa: <I>no</I> <li>Swe: <I>nej</I> <li>Urd: <I>نہیں</I> </ul> </div> </div></TD>-</TR>-<TR>-<TD><CODE>yes_Utt</CODE></TD>-<TD><A HREF="#Utt" TITLE="Utt - sentence, question, word...">Utt</A></TD>-<TD><div class=reveal> <I>yes</I> <div class=popup> <ul> <li>API: <CODE>yes_Utt</CODE> <li>Afr: <I>ja</I> <li>Bul: <I>да</I> <li>Cat: <I>sí</I> <li>Dan: <I>ja</I> <li>Dut: <I>ja</I> <li>Eng: <I>yes</I> <li>Fin: <I>kyllä</I> <li>Fre: <I>oui</I> <li>Ger: <I>ja</I> <li>Ita: <I>sì</I> <li>Nep: <I>हजुर</I> <li>Nor: <I>ja</I> <li>Pes: <I>بله</I> <li>Pnb: <I>ہاں</I> <li>Pol: <I>tak</I> <li>Ron: <I>da</I> <li>Rus: <I>Да</I> <li>Spa: <I>sí</I> <li>Swe: <I>ja</I> <li>Urd: <I>ہاں</I> </ul> </div> </div></TD>-</TR>-</TABLE>--<A NAME="V"></A>-<H2>V - one-place verb</H2>--<P>-Lexical category, constructors given in-<A HREF="#RParadigms">lexical paradigms</A>.-</P>--<A NAME="V2"></A>-<H2>V2 - two-place verb</H2>--<TABLE BORDER="1" CELLPADDING="4">-<TR>-<TH>Function</TH>-<TH>Type</TH>-<TH COLSPAN="2">Example</TH>-</TR>-<TR>-<TD><CODE>have_V2</CODE></TD>-<TD><A HREF="#V2" TITLE="V2 - two-place verb">V2</A></TD>-<TD><div class=reveal> <I>to have it</I> <div class=popup> <ul> <li>API: <CODE>mkUtt (mkVP have_V2 it_NP)</CODE> <li>Afr: <I>dit het</I> <li>Bul: <I>да има него</I> <li>Cat: <I>tenir ho</I> <li>Dan: <I>at have det</I> <li>Dut: <I>het hebben</I> <li>Eng: <I>to have it</I> <li>Fin: <I>olla sen</I> <li>Fre: <I>l' avoir</I> <li>Ger: <I>es haben</I> <li>Ita: <I>avere lo</I> <li>Nep: <I>यो हुनु</I> <li>Nor: <I>å ha det</I> <li>Pes: <I>*</I> <li>Pnb: <I>اینوں راكھنا</I> <li>Pol: <I>mieć je</I> <li>Ron: <I>sã îl aibă</I> <li>Rus: <I>иметь его</I> <li>Spa: <I>tener lo</I> <li>Swe: <I>att ha det</I> <li>Urd: <I>اس ركھنا</I> </ul> </div> </div></TD>-</TR>-</TABLE>--<A NAME="V2A"></A>-<H2>V2A - verb with NP and AP complement</H2>--<P>-Lexical category, constructors given in-<A HREF="#RParadigms">lexical paradigms</A>.-</P>--<A NAME="V2Q"></A>-<H2>V2Q - verb with NP and Q complement</H2>--<P>-Lexical category, constructors given in-<A HREF="#RParadigms">lexical paradigms</A>.-</P>--<A NAME="V2S"></A>-<H2>V2S - verb with NP and S complement</H2>--<P>-Lexical category, constructors given in-<A HREF="#RParadigms">lexical paradigms</A>.-</P>--<A NAME="V2V"></A>-<H2>V2V - verb with NP and V complement</H2>--<P>-Lexical category, constructors given in-<A HREF="#RParadigms">lexical paradigms</A>.-</P>--<A NAME="V3"></A>-<H2>V3 - three-place verb</H2>--<P>-Lexical category, constructors given in-<A HREF="#RParadigms">lexical paradigms</A>.-</P>--<A NAME="VA"></A>-<H2>VA - adjective-complement verb</H2>--<P>-Lexical category, constructors given in-<A HREF="#RParadigms">lexical paradigms</A>.-</P>--<A NAME="VP"></A>-<H2>VP - verb phrase</H2>--<TABLE BORDER="1" CELLPADDING="4">-<TR>-<TH>Function</TH>-<TH>Type</TH>-<TH COLSPAN="2">Example</TH>-</TR>-<TR>-<TD><CODE>mkVP</CODE></TD>-<TD><A HREF="#V" TITLE="V - one-place verb">V</A> <CODE>-></CODE> <A HREF="#VP" TITLE="VP - verb phrase">VP</A></TD>-<TD><div class=reveal> <I>to sleep</I> <div class=popup> <ul> <li>API: <CODE>mkUtt (mkVP sleep_V)</CODE> <li>Afr: <I>slaap</I> <li>Bul: <I>да спи</I> <li>Cat: <I>dormir</I> <li>Dan: <I>at sove</I> <li>Dut: <I>slapen</I> <li>Eng: <I>to sleep</I> <li>Fin: <I>nukkua</I> <li>Fre: <I>dormir</I> <li>Ger: <I>schlafen</I> <li>Ita: <I>dormire</I> <li>Nep: <I>सुत्नु</I> <li>Nor: <I>å sove</I> <li>Pes: <I>خوابیدن</I> <li>Pnb: <I>سونا</I> <li>Pol: <I>spać</I> <li>Ron: <I>sã doarmă</I> <li>Rus: <I>спать</I> <li>Spa: <I>dormir</I> <li>Swe: <I>att sova</I> <li>Urd: <I>سونا</I> </ul> </div> </div></TD>-</TR>-<TR>-<TD><CODE>mkVP</CODE></TD>-<TD><A HREF="#V2" TITLE="V2 - two-place verb">V2</A> <CODE>-></CODE> <A HREF="#NP" TITLE="NP - noun phrase (subject or object)">NP</A> <CODE>-></CODE> <A HREF="#VP" TITLE="VP - verb phrase">VP</A></TD>-<TD><div class=reveal> <I>to love him</I> <div class=popup> <ul> <li>API: <CODE>mkUtt (mkVP love_V2 he_NP)</CODE> <li>Afr: <I>hom liefhet</I> <li>Bul: <I>да обича него</I> <li>Cat: <I>estimar el</I> <li>Dan: <I>at elske ham</I> <li>Dut: <I>hem liefhebben</I> <li>Eng: <I>to love him</I> <li>Fin: <I>rakastaa häntä</I> <li>Fre: <I>l' aimer</I> <li>Ger: <I>ihn lieben</I> <li>Ita: <I>amare lo</I> <li>Nep: <I>उ लाई माया गर्नु</I> <li>Nor: <I>å elske ham</I> <li>Pes: <I>او را دوست داشتن</I> <li>Pnb: <I>اونوں پیار كرنا</I> <li>Pol: <I>kochać jego</I> <li>Ron: <I>sã îl iubească</I> <li>Rus: <I>любить его</I> <li>Spa: <I>amar lo</I> <li>Swe: <I>att älska honom</I> <li>Urd: <I>اس كو پیار كرنا</I> </ul> </div> </div></TD>-</TR>-<TR>-<TD><CODE>mkVP</CODE></TD>-<TD><A HREF="#V3" TITLE="V3 - three-place verb">V3</A> <CODE>-></CODE> <A HREF="#NP" TITLE="NP - noun phrase (subject or object)">NP</A> <CODE>-></CODE> <A HREF="#NP" TITLE="NP - noun phrase (subject or object)">NP</A> <CODE>-></CODE> <A HREF="#VP" TITLE="VP - verb phrase">VP</A></TD>-<TD><div class=reveal> <I>to send it to him</I> <div class=popup> <ul> <li>API: <CODE>mkUtt (mkVP send_V3 it_NP he_NP)</CODE> <li>Afr: <I>dit na hom stuur</I> <li>Bul: <I>да прати него до него</I> <li>Cat: <I>enviar ho li</I> <li>Dan: <I>at sende det til ham</I> <li>Dut: <I>het naar hem sturen</I> <li>Eng: <I>to send it to him</I> <li>Fin: <I>lähettää sen hänelle</I> <li>Fre: <I>l' envoyer lui</I> <li>Ger: <I>es ihm schicken</I> <li>Ita: <I>mandare lo gli</I> <li>Nep: <I>यो उस्लाई लाई पठाउनु</I> <li>Nor: <I>å sende det til ham</I> <li>Pes: <I>آن را برای او فرستادن</I> <li>Pnb: <I>اینوں پیجنا اونوں</I> <li>Pol: <I>wysłać do niego je</I> <li>Ron: <I>sã i -l trimită</I> <li>Rus: <I>посылать нему его</I> <li>Spa: <I>mandar lo le</I> <li>Swe: <I>att skicka det till honom</I> <li>Urd: <I>اس كو بھیجنا اس كو</I> </ul> </div> </div></TD>-</TR>-<TR>-<TD><CODE>mkVP</CODE></TD>-<TD><A HREF="#VV" TITLE="VV - verb-phrase-complement verb">VV</A> <CODE>-></CODE> <A HREF="#VP" TITLE="VP - verb phrase">VP</A> <CODE>-></CODE> <A HREF="#VP" TITLE="VP - verb phrase">VP</A></TD>-<TD><div class=reveal> <I>to want to sleep</I> <div class=popup> <ul> <li>API: <CODE>mkUtt (mkVP want_VV (mkVP sleep_V))</CODE> <li>Afr: <I>slaap wil</I> <li>Bul: <I>да иска да спи</I> <li>Cat: <I>voler dormir</I> <li>Dan: <I>at ville sove</I> <li>Dut: <I>slapen willen</I> <li>Eng: <I>to want to sleep</I> <li>Fin: <I>tahtoa nukkua</I> <li>Fre: <I>vouloir dormir</I> <li>Ger: <I>schlafen wollen</I> <li>Ita: <I>volere dormire</I> <li>Nep: <I>सुत्न चाहनु</I> <li>Nor: <I>å ville sove</I> <li>Pes: <I>خواستن بخوابد</I> <li>Pnb: <I>چانا سونا</I> <li>Pol: <I>zechcieć spać</I> <li>Ron: <I>sã vrea sã doarmă</I> <li>Rus: <I>хотеть спать</I> <li>Spa: <I>querer dormir</I> <li>Swe: <I>att vilja sova</I> <li>Urd: <I>چاہنا سونا</I> </ul> </div> </div></TD>-</TR>-<TR>-<TD><CODE>mkVP</CODE></TD>-<TD><A HREF="#VS" TITLE="VS - sentence-complement verb">VS</A> <CODE>-></CODE> <A HREF="#S" TITLE="S - declarative sentence">S</A> <CODE>-></CODE> <A HREF="#VP" TITLE="VP - verb phrase">VP</A></TD>-<TD><div class=reveal> <I>to know that she sleeps</I> <div class=popup> <ul> <li>API: <CODE>mkUtt (mkVP know_VS (mkS (mkCl she_NP sleep_V)))</CODE> <li>Afr: <I>dat sy slaap weet</I> <li>Bul: <I>да знае , че тя спи</I> <li>Cat: <I>saber que ella dorm</I> <li>Dan: <I>at vide at hun sover</I> <li>Dut: <I>dat ze slaapt weten</I> <li>Eng: <I>to know that she sleeps</I> <li>Fin: <I>tietää että hän nukkuu</I> <li>Fre: <I>savoir qu' elle dort</I> <li>Ger: <I>daß sie schläft wissen</I> <li>Ita: <I>sapere che lei dorme</I> <li>Nep: <I>थाहा पाउनुकी उनी सुत्छिन्</I> <li>Nor: <I>å vite at hun sover</I> <li>Pes: <I>دانستن که او می خوابد</I> <li>Pnb: <I>جاننا</I> <li>Pol: <I>wiedzieć , że ona śpi</I> <li>Ron: <I>sã ştie cã ea doarme</I> <li>Rus: <I>знать , что она спдит</I> <li>Spa: <I>saber que ella duerme</I> <li>Swe: <I>att veta att hon sover</I> <li>Urd: <I>جاننا كہ وہ سوتی ہے</I> </ul> </div> </div></TD>-</TR>-<TR>-<TD><CODE>mkVP</CODE></TD>-<TD><A HREF="#VQ" TITLE="VQ - question-complement verb">VQ</A> <CODE>-></CODE> <A HREF="#QS" TITLE="QS - question">QS</A> <CODE>-></CODE> <A HREF="#VP" TITLE="VP - verb phrase">VP</A></TD>-<TD><div class=reveal> <I>to wonder who sleeps</I> <div class=popup> <ul> <li>API: <CODE>mkUtt (mkVP wonder_VQ (mkQS (mkQCl who_IP sleep_V)))</CODE> <li>Afr: <I>hom wie slaap afvra</I> <li>Bul: <I>да се чуди кой спи</I> <li>Cat: <I>preguntar qui dorm</I> <li>Dan: <I>at undres hvem som sover</I> <li>Dut: <I>zich wie slaapt afvragen</I> <li>Eng: <I>to wonder who sleeps</I> <li>Fin: <I>ihmetellä kuka nukkuu</I> <li>Fre: <I>demander qui dort</I> <li>Ger: <I>sich wer schläft wundern</I> <li>Ita: <I>domandare chi dorme</I> <li>Nep: <I>अचम्म हुनुकी को सुत्छन्</I> <li>Nor: <I>å undre hvem som sover</I> <li>Pes: <I>*</I> <li>Pnb: <I>حیران ہونا</I> <li>Pol: <I>zastanowić się , kto śpi</I> <li>Ron: <I>sã se întrebe cine doarme</I> <li>Rus: <I>интересовать кто спдит</I> <li>Spa: <I>preguntar quién duerme</I> <li>Swe: <I>att undra vem som sover</I> <li>Urd: <I>حیران ہونا كہ كون سوتا ہے</I> </ul> </div> </div></TD>-</TR>-<TR>-<TD><CODE>mkVP</CODE></TD>-<TD><A HREF="#VA" TITLE="VA - adjective-complement verb">VA</A> <CODE>-></CODE> <A HREF="#AP" TITLE="AP - adjectival phrase">AP</A> <CODE>-></CODE> <A HREF="#VP" TITLE="VP - verb phrase">VP</A></TD>-<TD><div class=reveal> <I>to become red</I> <div class=popup> <ul> <li>API: <CODE>mkUtt (mkVP become_VA (mkAP red_A))</CODE> <li>Afr: <I>rooi word</I> <li>Bul: <I>да стане червено</I> <li>Cat: <I>tornar vermell</I> <li>Dan: <I>at blive rød</I> <li>Dut: <I>rood worden</I> <li>Eng: <I>to become red</I> <li>Fin: <I>tulla punaiseksi</I> <li>Fre: <I>devenir rouge</I> <li>Ger: <I>rot werden</I> <li>Ita: <I>diventare rossa</I> <li>Nep: <I>रातो हुनु</I> <li>Nor: <I>å bli rød</I> <li>Pes: <I>قرمز شدن</I> <li>Pnb: <I>بننا لال</I> <li>Pol: <I>stać się czerwony</I> <li>Ron: <I>sã devină roşu</I> <li>Rus: <I>стать</I> <li>Spa: <I>convertir roja</I> <li>Swe: <I>att bli röd</I> <li>Urd: <I>بننا لال</I> </ul> </div> </div></TD>-</TR>-<TR>-<TD><CODE>mkVP</CODE></TD>-<TD><A HREF="#V2A" TITLE="V2A - verb with NP and AP complement">V2A</A> <CODE>-></CODE> <A HREF="#NP" TITLE="NP - noun phrase (subject or object)">NP</A> <CODE>-></CODE> <A HREF="#AP" TITLE="AP - adjectival phrase">AP</A> <CODE>-></CODE> <A HREF="#VP" TITLE="VP - verb phrase">VP</A></TD>-<TD><div class=reveal> <I>to paint it red</I> <div class=popup> <ul> <li>API: <CODE>mkUtt (mkVP paint_V2A it_NP (mkAP red_A))</CODE> <li>Afr: <I>dit rooi skilder</I> <li>Bul: <I>да нарисува него червено</I> <li>Cat: <I>pintar ho en vermell</I> <li>Dan: <I>at male det rødt</I> <li>Dut: <I>het rood schilderen</I> <li>Eng: <I>to paint it red</I> <li>Fin: <I>maalata sen punaiseksi</I> <li>Fre: <I>le peindre en rouge</I> <li>Ger: <I>es rot malen</I> <li>Ita: <I>dipingere lo rosso</I> <li>Nep: <I>यो लाई रातो रँग लागाउनु</I> <li>Nor: <I>å male det rødt</I> <li>Pes: <I>آن را قرمز رنگ کردن</I> <li>Pnb: <I>اینوں رنگ كرنا لال</I> <li>Pol: <I>pomalować je na czerwono</I> <li>Ron: <I>sã îl picteze roşu</I> <li>Rus: <I>рисовать красным его</I> <li>Spa: <I>pintar lo en rojo</I> <li>Swe: <I>att måla det rött</I> <li>Urd: <I>اس كو رنگ كرنا لال</I> </ul> </div> </div></TD>-</TR>-<TR>-<TD><CODE>mkVP</CODE></TD>-<TD><A HREF="#V2S" TITLE="V2S - verb with NP and S complement">V2S</A> <CODE>-></CODE> <A HREF="#NP" TITLE="NP - noun phrase (subject or object)">NP</A> <CODE>-></CODE> <A HREF="#S" TITLE="S - declarative sentence">S</A> <CODE>-></CODE> <A HREF="#VP" TITLE="VP - verb phrase">VP</A></TD>-<TD><div class=reveal> <I>to answer to him that she sleeps</I> <div class=popup> <ul> <li>API: <CODE>mkUtt (mkVP answer_V2S he_NP (mkS (mkCl she_NP sleep_V)))</CODE> <li>Afr: <I>hom dat sy slaap antwoord</I> <li>Bul: <I>да отговори му , че тя спи</I> <li>Cat: <I>respondre li que ella dorm</I> <li>Dan: <I>at svare til ham at hun sover</I> <li>Dut: <I>hem dat ze slaapt antwoorden</I> <li>Eng: <I>to answer to him that she sleeps</I> <li>Fin: <I>vastata hänelle että hän nukkuu</I> <li>Fre: <I>répondre lui qu' elle dort</I> <li>Ger: <I>ihm daß sie schläft antworten</I> <li>Ita: <I>rispondere gli che lei dorme</I> <li>Nep: <I>उ लाई उत्तर दिनुकी उनी सुत्छिन्</I> <li>Nor: <I>å svare til ham at hun sover</I> <li>Pes: <I>به او جواب دادن که او می خوابد</I> <li>Pnb: <I>اونوں جواب دینا</I> <li>Pol: <I>odpowiedzieć jemu , że ona śpi</I> <li>Ron: <I>sã îi răspundă cã ea doarme</I> <li>Rus: <I>отвечать , что она спдит его</I> <li>Spa: <I>responder le que ella duerme</I> <li>Swe: <I>att svara till honom att hon sover</I> <li>Urd: <I>اس كو جواب دینا كہ وہ سوتی ہے</I> </ul> </div> </div></TD>-</TR>-<TR>-<TD><CODE>mkVP</CODE></TD>-<TD><A HREF="#V2Q" TITLE="V2Q - verb with NP and Q complement">V2Q</A> <CODE>-></CODE> <A HREF="#NP" TITLE="NP - noun phrase (subject or object)">NP</A> <CODE>-></CODE> <A HREF="#QS" TITLE="QS - question">QS</A> <CODE>-></CODE> <A HREF="#VP" TITLE="VP - verb phrase">VP</A></TD>-<TD><div class=reveal> <I>to ask him who sleeps</I> <div class=popup> <ul> <li>API: <CODE>mkUtt (mkVP ask_V2Q he_NP (mkQS (mkQCl who_IP sleep_V)))</CODE> <li>Afr: <I>hom wie slaap vra</I> <li>Bul: <I>да пита него кой спи</I> <li>Cat: <I>preguntar li qui dorm</I> <li>Dan: <I>at spørge ham hvem som sover</I> <li>Dut: <I>hem wie slaapt vragen</I> <li>Eng: <I>to ask him who sleeps</I> <li>Fin: <I>kysyä häneltä kuka nukkuu</I> <li>Fre: <I>demander lui qui dort</I> <li>Ger: <I>ihn wer schläft fragen</I> <li>Ita: <I>chiedere gli chi dorme</I> <li>Nep: <I>उ सँग सोध्नुकी को सुत्छन्</I> <li>Nor: <I>å spørre ham hvem som sover</I> <li>Pes: <I>از او پرسیدن چه کسی می خوابد</I> <li>Pnb: <I>اونوں پچھنا</I> <li>Pol: <I>spytać jego , kto śpi</I> <li>Ron: <I>sã îl întrebe cine doarme</I> <li>Rus: <I>спрашивать кто спдит его</I> <li>Spa: <I>preguntar le quién duerme</I> <li>Swe: <I>att fråga honom vem som sover</I> <li>Urd: <I>اس سے پوچھنا كہ كون سوتا ہے</I> </ul> </div> </div></TD>-</TR>-<TR>-<TD><CODE>mkVP</CODE></TD>-<TD><A HREF="#V2V" TITLE="V2V - verb with NP and V complement">V2V</A> <CODE>-></CODE> <A HREF="#NP" TITLE="NP - noun phrase (subject or object)">NP</A> <CODE>-></CODE> <A HREF="#VP" TITLE="VP - verb phrase">VP</A> <CODE>-></CODE> <A HREF="#VP" TITLE="VP - verb phrase">VP</A></TD>-<TD><div class=reveal> <I>to beg him to sleep</I> <div class=popup> <ul> <li>API: <CODE>mkUtt (mkVP beg_V2V he_NP (mkVP sleep_V))</CODE> <li>Afr: <I>hom te slaap smeek</I> <li>Bul: <I>да моли него да спи</I> <li>Cat: <I>demanar el a dormir</I> <li>Dan: <I>at bede ham at sove</I> <li>Dut: <I>hem te slapen smeken</I> <li>Eng: <I>to beg him to sleep</I> <li>Fin: <I>pyytää häntä nukkumaan</I> <li>Fre: <I>le demander à dormir</I> <li>Ger: <I>ihn zu schlafen bitten</I> <li>Ita: <I>pregare lo di dormire</I> <li>Nep: <I>उ लाई सुत्न आग्रह गर्नु</I> <li>Nor: <I>å be ham att sove</I> <li>Pes: <I>از او خواهش کردن بخوابد</I> <li>Pnb: <I>اونوں مانگنا سونا دی</I> <li>Pol: <I>*</I> <li>Ron: <I>sã îl roage sã doarmă</I> <li>Rus: <I>просить спать его</I> <li>Spa: <I>rogar lo a dormir</I> <li>Swe: <I>att be honom att sova</I> <li>Urd: <I>اس سے التجا كرنا سونے كی</I> </ul> </div> </div></TD>-</TR>-<TR>-<TD><CODE>mkVP</CODE></TD>-<TD><A HREF="#A" TITLE="A - one-place adjective">A</A> <CODE>-></CODE> <A HREF="#VP" TITLE="VP - verb phrase">VP</A></TD>-<TD><div class=reveal> <I>to be old</I> <div class=popup> <ul> <li>API: <CODE>mkUtt (mkVP old_A)</CODE> <li>Afr: <I>oud wees</I> <li>Bul: <I>да е старо</I> <li>Cat: <I>ser vell</I> <li>Dan: <I>at være gammel</I> <li>Dut: <I>oud zijn</I> <li>Eng: <I>to be old</I> <li>Fin: <I>olla vanha</I> <li>Fre: <I>être vieille</I> <li>Ger: <I>alt sein</I> <li>Ita: <I>essere vecchia</I> <li>Nep: <I>बुढो</I> <li>Nor: <I>å være gammel</I> <li>Pes: <I>پیر بودن</I> <li>Pnb: <I>بوڈا</I> <li>Pol: <I>być stary</I> <li>Ron: <I>sã fie vechi</I> <li>Rus: <I>быть старым</I> <li>Spa: <I>ser vieja</I> <li>Swe: <I>att vara gammal</I> <li>Urd: <I>بوڑھا</I> </ul> </div> </div></TD>-</TR>-<TR>-<TD><CODE>mkVP</CODE></TD>-<TD><A HREF="#A" TITLE="A - one-place adjective">A</A> <CODE>-></CODE> <A HREF="#NP" TITLE="NP - noun phrase (subject or object)">NP</A> <CODE>-></CODE> <A HREF="#VP" TITLE="VP - verb phrase">VP</A></TD>-<TD><div class=reveal> <I>to be older than he</I> <div class=popup> <ul> <li>API: <CODE>mkUtt (mkVP old_A he_NP)</CODE> <li>Afr: <I>ouer as hy wees</I> <li>Bul: <I>да е по - старо от него</I> <li>Cat: <I>ser més vell que ell</I> <li>Dan: <I>at være ældre end han</I> <li>Dut: <I>ouder dan hij zijn</I> <li>Eng: <I>to be older than he</I> <li>Fin: <I>olla vanhempi kuin hän</I> <li>Fre: <I>être plus vieille que lui</I> <li>Ger: <I>älter als er sein</I> <li>Ita: <I>essere più vecchia di lui</I> <li>Nep: <I>उ भन्दा बुढो</I> <li>Nor: <I>å være eldre enn han</I> <li>Pes: <I>پیر تر از او بودن</I> <li>Pnb: <I>اورے توں بوڈا</I> <li>Pol: <I>być starszy niż on</I> <li>Ron: <I>sã fie mai vechi decât el</I> <li>Rus: <I>быть старше него</I> <li>Spa: <I>ser más vieja que él</I> <li>Swe: <I>att vara äldre än han</I> <li>Urd: <I>اس سے بوڑھا</I> </ul> </div> </div></TD>-</TR>-<TR>-<TD><CODE>mkVP</CODE></TD>-<TD><A HREF="#A2" TITLE="A2 - two-place adjective">A2</A> <CODE>-></CODE> <A HREF="#NP" TITLE="NP - noun phrase (subject or object)">NP</A> <CODE>-></CODE> <A HREF="#VP" TITLE="VP - verb phrase">VP</A></TD>-<TD><div class=reveal> <I>to be married to him</I> <div class=popup> <ul> <li>API: <CODE>mkUtt (mkVP married_A2 he_NP)</CODE> <li>Afr: <I>getroud met hom wees</I> <li>Bul: <I>да е женено за него</I> <li>Cat: <I>ser casata a ell</I> <li>Dan: <I>at være gift med ham</I> <li>Dut: <I>getrouwd met hem zijn</I> <li>Eng: <I>to be married to him</I> <li>Fin: <I>olla avioitunut hänen kanssa</I> <li>Fre: <I>être mariée à lui</I> <li>Ger: <I>verheiratet mit ihm sein</I> <li>Ita: <I>essere sposata con lui</I> <li>Nep: <I>उ सँग विवाहित</I> <li>Nor: <I>å være gift med ham</I> <li>Pes: <I>او متأهل بودن</I> <li>Pnb: <I>*</I> <li>Pol: <I>być zaślubiony jemu</I> <li>Ron: <I>sã fie căsătorit cu el</I> <li>Rus: <I>быть замужем за им</I> <li>Spa: <I>ser casada a él</I> <li>Swe: <I>att vara gift med honom</I> <li>Urd: <I>اس سے [شادی كرنa]</I> </ul> </div> </div></TD>-</TR>-<TR>-<TD><CODE>mkVP</CODE></TD>-<TD><A HREF="#AP" TITLE="AP - adjectival phrase">AP</A> <CODE>-></CODE> <A HREF="#VP" TITLE="VP - verb phrase">VP</A></TD>-<TD><div class=reveal> <I>to be very old</I> <div class=popup> <ul> <li>API: <CODE>mkUtt (mkVP (mkAP very_AdA old_A))</CODE> <li>Afr: <I>baie oud wees</I> <li>Bul: <I>да е много старо</I> <li>Cat: <I>ser molt vell</I> <li>Dan: <I>at være meget gammel</I> <li>Dut: <I>erg oud zijn</I> <li>Eng: <I>to be very old</I> <li>Fin: <I>olla erittäin vanha</I> <li>Fre: <I>être très vieille</I> <li>Ger: <I>sehr alt sein</I> <li>Ita: <I>essere molto vecchia</I> <li>Nep: <I>धेरै बुढो</I> <li>Nor: <I>å være mye gammel</I> <li>Pes: <I>خیلی پیر بودن</I> <li>Pnb: <I>بہت بوڈا</I> <li>Pol: <I>być bardzo stary</I> <li>Ron: <I>sã fie foarte vechi</I> <li>Rus: <I>быть очень старым</I> <li>Spa: <I>ser muy vieja</I> <li>Swe: <I>att vara mycket gammal</I> <li>Urd: <I>بہت بوڑھا</I> </ul> </div> </div></TD>-</TR>-<TR>-<TD><CODE>mkVP</CODE></TD>-<TD><A HREF="#N" TITLE="N - common noun">N</A> <CODE>-></CODE> <A HREF="#VP" TITLE="VP - verb phrase">VP</A></TD>-<TD><div class=reveal> <I>to be a woman</I> <div class=popup> <ul> <li>API: <CODE>mkUtt (mkVP woman_N)</CODE> <li>Afr: <I>'n vrou wees</I> <li>Bul: <I>да е жена</I> <li>Cat: <I>ser una dona</I> <li>Dan: <I>at være en kvinde</I> <li>Dut: <I>vrouw zijn</I> <li>Eng: <I>to be a woman</I> <li>Fin: <I>olla nainen</I> <li>Fre: <I>être une femme</I> <li>Ger: <I>eine Frau sein</I> <li>Ita: <I>essere una donna</I> <li>Nep: <I>आईमाई</I> <li>Nor: <I>å være ei kvinne</I> <li>Pes: <I>زن بودن</I> <li>Pnb: <I>زنانی</I> <li>Pol: <I>być kobieta</I> <li>Ron: <I>sã fie femeie</I> <li>Rus: <I>быть женщиной</I> <li>Spa: <I>ser una mujer</I> <li>Swe: <I>att vara en kvinna</I> <li>Urd: <I>عورت</I> </ul> </div> </div></TD>-</TR>-<TR>-<TD><CODE>mkVP</CODE></TD>-<TD><A HREF="#CN" TITLE="CN - common noun (without determiner)">CN</A> <CODE>-></CODE> <A HREF="#VP" TITLE="VP - verb phrase">VP</A></TD>-<TD><div class=reveal> <I>to be an old woman</I> <div class=popup> <ul> <li>API: <CODE>mkUtt (mkVP (mkCN old_A woman_N))</CODE> <li>Afr: <I>'n oud vrou wees</I> <li>Bul: <I>да е стара жена</I> <li>Cat: <I>ser una dona vell</I> <li>Dan: <I>at være en gammel kvinde</I> <li>Dut: <I>oude vrouw zijn</I> <li>Eng: <I>to be an old woman</I> <li>Fin: <I>olla vanha nainen</I> <li>Fre: <I>être une vieille femme</I> <li>Ger: <I>eine alte Frau sein</I> <li>Ita: <I>essere una vecchia donna</I> <li>Nep: <I>बुढी आईमाई</I> <li>Nor: <I>å være ei gammel kvinne</I> <li>Pes: <I>زن پیر بودن</I> <li>Pnb: <I>بوڈی زنانی</I> <li>Pol: <I>być stara kobieta</I> <li>Ron: <I>sã fie femeie veche</I> <li>Rus: <I>быть старой женщиной</I> <li>Spa: <I>ser una vieja mujer</I> <li>Swe: <I>att vara en gammal kvinna</I> <li>Urd: <I>بوڑھی عورت</I> </ul> </div> </div></TD>-</TR>-<TR>-<TD><CODE>mkVP</CODE></TD>-<TD><A HREF="#NP" TITLE="NP - noun phrase (subject or object)">NP</A> <CODE>-></CODE> <A HREF="#VP" TITLE="VP - verb phrase">VP</A></TD>-<TD><div class=reveal> <I>to be the woman</I> <div class=popup> <ul> <li>API: <CODE>mkUtt (mkVP (mkNP the_Det woman_N))</CODE> <li>Afr: <I>die vrou wees</I> <li>Bul: <I>да е жената</I> <li>Cat: <I>ser la dona</I> <li>Dan: <I>at være kvinden</I> <li>Dut: <I>de vrouw zijn</I> <li>Eng: <I>to be the woman</I> <li>Fin: <I>olla nainen</I> <li>Fre: <I>être la femme</I> <li>Ger: <I>die Frau sein</I> <li>Ita: <I>essere la donna</I> <li>Nep: <I>आईमाई</I> <li>Nor: <I>å være kvinna</I> <li>Pes: <I>زن بودن</I> <li>Pnb: <I>زنانی</I> <li>Pol: <I>być kobietą</I> <li>Ron: <I>sã fie femeia</I> <li>Rus: <I>быть женщиной</I> <li>Spa: <I>ser la mujer</I> <li>Swe: <I>att vara kvinnan</I> <li>Urd: <I>عورت</I> </ul> </div> </div></TD>-</TR>-<TR>-<TD><CODE>mkVP</CODE></TD>-<TD><A HREF="#Adv" TITLE="Adv - verb-phrase-modifying adverb">Adv</A> <CODE>-></CODE> <A HREF="#VP" TITLE="VP - verb phrase">VP</A></TD>-<TD><div class=reveal> <I>to be here</I> <div class=popup> <ul> <li>API: <CODE>mkUtt (mkVP here_Adv)</CODE> <li>Afr: <I>hier wees</I> <li>Bul: <I>да е тук</I> <li>Cat: <I>ser aquí</I> <li>Dan: <I>at være her</I> <li>Dut: <I>hier zijn</I> <li>Eng: <I>to be here</I> <li>Fin: <I>olla täällä</I> <li>Fre: <I>être ici</I> <li>Ger: <I>hier sein</I> <li>Ita: <I>essere quà</I> <li>Nep: <I>यहाँ</I> <li>Nor: <I>å være her</I> <li>Pes: <I>اینجا بودن</I> <li>Pnb: <I>ایتھے</I> <li>Pol: <I>być tutaj</I> <li>Ron: <I>sã fie aici</I> <li>Rus: <I>быть здесь</I> <li>Spa: <I>ser aquí</I> <li>Swe: <I>att vara här</I> <li>Urd: <I>یہاں</I> </ul> </div> </div></TD>-</TR>-<TR>-<TD><CODE>mkVP</CODE></TD>-<TD><A HREF="#VP" TITLE="VP - verb phrase">VP</A> <CODE>-></CODE> <A HREF="#Adv" TITLE="Adv - verb-phrase-modifying adverb">Adv</A> <CODE>-></CODE> <A HREF="#VP" TITLE="VP - verb phrase">VP</A></TD>-<TD><div class=reveal> <I>to sleep here</I> <div class=popup> <ul> <li>API: <CODE>mkUtt (mkVP (mkVP sleep_V) here_Adv)</CODE> <li>Afr: <I>hier slaap</I> <li>Bul: <I>да спи тук</I> <li>Cat: <I>dormir aquí</I> <li>Dan: <I>at sove her</I> <li>Dut: <I>hier slapen</I> <li>Eng: <I>to sleep here</I> <li>Fin: <I>nukkua</I> <li>Fre: <I>dormir ici</I> <li>Ger: <I>hier schlafen</I> <li>Ita: <I>dormire quà</I> <li>Nep: <I>यहाँ सुत्नु</I> <li>Nor: <I>å sove her</I> <li>Pes: <I>اینجا خوابیدن</I> <li>Pnb: <I>سونا ایتھے</I> <li>Pol: <I>tutaj spać</I> <li>Ron: <I>sã doarmă aici</I> <li>Rus: <I>спать</I> <li>Spa: <I>dormir aquí</I> <li>Swe: <I>att sova här</I> <li>Urd: <I>سونا یہاں</I> </ul> </div> </div></TD>-</TR>-<TR>-<TD><CODE>mkVP</CODE></TD>-<TD><A HREF="#AdV" TITLE="Adv - verb-phrase-modifying adverb">AdV</A> <CODE>-></CODE> <A HREF="#VP" TITLE="VP - verb phrase">VP</A> <CODE>-></CODE> <A HREF="#VP" TITLE="VP - verb phrase">VP</A></TD>-<TD><div class=reveal> <I>always to sleep</I> <div class=popup> <ul> <li>API: <CODE>mkUtt (mkVP always_AdV (mkVP sleep_V))</CODE> <li>Afr: <I>altyd slaap</I> <li>Bul: <I>винаги да спи</I> <li>Cat: <I>dormir sempre</I> <li>Dan: <I>at altid sove</I> <li>Dut: <I>altijd slapen</I> <li>Eng: <I>always to sleep</I> <li>Fin: <I>nukkua</I> <li>Fre: <I>dormir toujours</I> <li>Ger: <I>immer schlafen</I> <li>Ita: <I>dormire sempre</I> <li>Nep: <I>सधैँ सुत्नु</I> <li>Nor: <I>å altid sove</I> <li>Pes: <I>همیشه خوابیدن</I> <li>Pnb: <I>سونا</I> <li>Pol: <I>zawsze spać</I> <li>Ron: <I>sã doarmă mereu</I> <li>Rus: <I>спать</I> <li>Spa: <I>dormir siempre</I> <li>Swe: <I>att alltid sova</I> <li>Urd: <I>ہمیشہ سونا</I> </ul> </div> </div></TD>-</TR>-<TR>-<TD><CODE>mkVP</CODE></TD>-<TD><A HREF="#VPSlash" TITLE="VPSlash - verb phrase missing complement">VPSlash</A> <CODE>-></CODE> <A HREF="#NP" TITLE="NP - noun phrase (subject or object)">NP</A> <CODE>-></CODE> <A HREF="#VP" TITLE="VP - verb phrase">VP</A></TD>-<TD><div class=reveal> <I>to paint it black</I> <div class=popup> <ul> <li>API: <CODE>mkUtt (mkVP (mkVPSlash paint_V2A (mkAP black_A)) it_NP)</CODE> <li>Afr: <I>dit swart skilder</I> <li>Bul: <I>да нарисува него черно</I> <li>Cat: <I>pintar ho en negre</I> <li>Dan: <I>at male det sort</I> <li>Dut: <I>het zwart schilderen</I> <li>Eng: <I>to paint it black</I> <li>Fin: <I>maalata sen mustaksi</I> <li>Fre: <I>le peindre en noir</I> <li>Ger: <I>es schwarz malen</I> <li>Ita: <I>dipingere lo nero</I> <li>Nep: <I>यो लाई कालो रँग लागाउनु</I> <li>Nor: <I>å male det svart</I> <li>Pes: <I>آن را سیاه رنگ کردن</I> <li>Pnb: <I>اینوں رنگ كرنا كالا</I> <li>Pol: <I>pomalować je na czarno</I> <li>Ron: <I>sã îl picteze negru</I> <li>Rus: <I>рисовать чёрным его</I> <li>Spa: <I>pintar lo en negro</I> <li>Swe: <I>att måla det svart</I> <li>Urd: <I>اس كو رنگ كرنا كالا</I> </ul> </div> </div></TD>-</TR>-<TR>-<TD><CODE>mkVP</CODE></TD>-<TD><A HREF="#VPSlash" TITLE="VPSlash - verb phrase missing complement">VPSlash</A> <CODE>-></CODE> <A HREF="#VP" TITLE="VP - verb phrase">VP</A></TD>-<TD><div class=reveal> <I>to paint itself black</I> <div class=popup> <ul> <li>API: <CODE>mkUtt (reflexiveVP (mkVPSlash paint_V2A (mkAP black_A)))</CODE> <li>Afr: <I>hom swart skilder</I> <li>Bul: <I>да се нарисува черно</I> <li>Cat: <I>pintar en negre</I> <li>Dan: <I>at male sig sort</I> <li>Dut: <I>zich zwart schilderen</I> <li>Eng: <I>to paint itself black</I> <li>Fin: <I>maalata itsensä mustaksi</I> <li>Fre: <I>peindre en noir</I> <li>Ger: <I>sich schwarz malen</I> <li>Ita: <I>dipingere nero</I> <li>Nep: <I>आफैं लाई कालो रँग लागाउनु</I> <li>Nor: <I>å male seg svart</I> <li>Pes: <I>خودش را سیاه رنگ کردن</I> <li>Pnb: <I>رنگ كرنا خود نوں كالا</I> <li>Pol: <I>pomalować siebie na czarno</I> <li>Ron: <I>sã se picteze negru</I> <li>Rus: <I>рисовать чёрным себя</I> <li>Spa: <I>pintar en negro</I> <li>Swe: <I>att måla sig svart</I> <li>Urd: <I>رنگ كرنا خود كو كالا</I> </ul> </div> </div></TD>-</TR>-<TR>-<TD><CODE>mkVP</CODE></TD>-<TD><A HREF="#Comp" TITLE="Comp - complement of copula, such as AP">Comp</A> <CODE>-></CODE> <A HREF="#VP" TITLE="VP - verb phrase">VP</A></TD>-<TD><div class=reveal> <I>to be warm</I> <div class=popup> <ul> <li>API: <CODE>mkUtt (mkVP (mkComp (mkAP warm_A)))</CODE> <li>Afr: <I>warm wees</I> <li>Bul: <I>да е топло</I> <li>Cat: <I>ser tèbia</I> <li>Dan: <I>at være varm</I> <li>Dut: <I>warm zijn</I> <li>Eng: <I>to be warm</I> <li>Fin: <I>olla lämmin</I> <li>Fre: <I>être chaude</I> <li>Ger: <I>warm sein</I> <li>Ita: <I>essere calda</I> <li>Nep: <I>तातो</I> <li>Nor: <I>å være varm</I> <li>Pes: <I>گرم بودن</I> <li>Pnb: <I>تتا</I> <li>Pol: <I>być ciepły</I> <li>Ron: <I>sã fie călduţ</I> <li>Rus: <I>быть тёплым</I> <li>Spa: <I>ser tibia</I> <li>Swe: <I>att vara varm</I> <li>Urd: <I>گرم</I> </ul> </div> </div></TD>-</TR>-<TR>-<TD><CODE>passiveVP</CODE></TD>-<TD><A HREF="#V2" TITLE="V2 - two-place verb">V2</A> <CODE>-></CODE> <A HREF="#VP" TITLE="VP - verb phrase">VP</A></TD>-<TD><div class=reveal> <I>to be loved</I> <div class=popup> <ul> <li>API: <CODE>mkUtt (passiveVP love_V2)</CODE> <li>Afr: <I>liefgehad word</I> <li>Bul: <I>да е обичано</I> <li>Cat: <I>ser estimada</I> <li>Dan: <I>at blive elsket</I> <li>Dut: <I>liefgehad worden</I> <li>Eng: <I>to be loved</I> <li>Fin: <I>rakastetaan</I> <li>Fre: <I>être aimée</I> <li>Ger: <I>geliebt werden</I> <li>Ita: <I>venire amata</I> <li>Nep: <I>माया गर्नु</I> <li>Nor: <I>å bli elska</I> <li>Pes: <I>دوست داشتن</I> <li>Pnb: <I>پیار كرنا</I> <li>Pol: <I>być kochany</I> <li>Ron: <I>sã fie iubit</I> <li>Rus: <I>любиться</I> <li>Spa: <I>ser amada</I> <li>Swe: <I>att bli älskad</I> <li>Urd: <I>پیار كرنا</I> </ul> </div> </div></TD>-</TR>-<TR>-<TD><CODE>passiveVP</CODE></TD>-<TD><A HREF="#V2" TITLE="V2 - two-place verb">V2</A> <CODE>-></CODE> <A HREF="#NP" TITLE="NP - noun phrase (subject or object)">NP</A> <CODE>-></CODE> <A HREF="#VP" TITLE="VP - verb phrase">VP</A></TD>-<TD><div class=reveal> <I>to be loved by her</I> <div class=popup> <ul> <li>API: <CODE>mkUtt (passiveVP love_V2 she_NP)</CODE> <li>Afr: <I>deur haar liefgehad word</I> <li>Bul: <I>да е обичано чрез нея</I> <li>Cat: <I>ser estimada per ella</I> <li>Dan: <I>at blive elsket af hende</I> <li>Dut: <I>door haar liefgehad worden</I> <li>Eng: <I>to be loved by her</I> <li>Fin: <I>rakastetaan</I> <li>Fre: <I>être aimée par elle</I> <li>Ger: <I>durch sie geliebt werden</I> <li>Ita: <I>venire amata da lei</I> <li>Nep: <I>उनी लाइ माया गर्नु</I> <li>Nor: <I>å bli elska av henne</I> <li>Pes: <I>توسط او دوست داشتن</I> <li>Pnb: <I>پیار كرنا اونوں</I> <li>Pol: <I>przez nią być kochany</I> <li>Ron: <I>sã fie iubit de către ea</I> <li>Rus: <I>любиться</I> <li>Spa: <I>ser amada por ella</I> <li>Swe: <I>att bli älskad av henne</I> <li>Urd: <I>پیار كرنا اس سے</I> </ul> </div> </div></TD>-</TR>-<TR>-<TD><CODE>progressiveVP</CODE></TD>-<TD><A HREF="#VP" TITLE="VP - verb phrase">VP</A> <CODE>-></CODE> <A HREF="#VP" TITLE="VP - verb phrase">VP</A></TD>-<TD><div class=reveal> <I>to be sleeping</I> <div class=popup> <ul> <li>API: <CODE>mkUtt (progressiveVP (mkVP sleep_V))</CODE> <li>Afr: <I>aan die slaap wees</I> <li>Bul: <I>да спи</I> <li>Cat: <I>estar dormint</I> <li>Dan: <I>at være ved å sove</I> <li>Dut: <I>aan het slapen zijn</I> <li>Eng: <I>to be sleeping</I> <li>Fin: <I>olla nukkumassa</I> <li>Fre: <I>être en train de dormir</I> <li>Ger: <I>eben schlafen</I> <li>Ita: <I>stare dormendo</I> <li>Nep: <I>सुतदै</I> <li>Nor: <I>å være ved å sove</I> <li>Pes: <I>خوابیدن</I> <li>Pnb: <I>سونا</I> <li>Pol: <I>spać</I> <li>Ron: <I>sã doarmă</I> <li>Rus: <I>спать</I> <li>Spa: <I>estar durmiendo</I> <li>Swe: <I>att hålla på att sova</I> <li>Urd: <I>سونا</I> </ul> </div> </div></TD>-</TR>-<TR>-<TD><CODE>reflexiveVP</CODE></TD>-<TD><A HREF="#V2" TITLE="V2 - two-place verb">V2</A> <CODE>-></CODE> <A HREF="#VP" TITLE="VP - verb phrase">VP</A></TD>-<TD><div class=reveal> <I>to love itself</I> <div class=popup> <ul> <li>API: <CODE>mkUtt (reflexiveVP love_V2)</CODE> <li>Afr: <I>hom liefhet</I> <li>Bul: <I>да се обича</I> <li>Cat: <I>estimar</I> <li>Dan: <I>at elske sig</I> <li>Dut: <I>zich liefhebben</I> <li>Eng: <I>to love itself</I> <li>Fin: <I>rakastaa itseänsä</I> <li>Fre: <I>aimer</I> <li>Ger: <I>sich lieben</I> <li>Ita: <I>amare</I> <li>Nep: <I>आफैं लाई माया गर्नु</I> <li>Nor: <I>å elske seg</I> <li>Pes: <I>خودش را دوست داشتن</I> <li>Pnb: <I>پیار كرنا خود نوں</I> <li>Pol: <I>kochać siebie</I> <li>Ron: <I>sã se iubească</I> <li>Rus: <I>любить себя</I> <li>Spa: <I>amar</I> <li>Swe: <I>att älska sig</I> <li>Urd: <I>پیار كرنا خود كو</I> </ul> </div> </div></TD>-</TR>-<TR>-<TD><CODE>reflexiveVP</CODE></TD>-<TD><A HREF="#VPSlash" TITLE="VPSlash - verb phrase missing complement">VPSlash</A> <CODE>-></CODE> <A HREF="#VP" TITLE="VP - verb phrase">VP</A></TD>-<TD><I>paint itself black</I></TD>-</TR>-</TABLE>--<A NAME="VPSlash"></A>-<H2>VPSlash - verb phrase missing complement</H2>--<TABLE BORDER="1" CELLPADDING="4">-<TR>-<TH>Function</TH>-<TH>Type</TH>-<TH COLSPAN="2">Example</TH>-</TR>-<TR>-<TD><CODE>mkVPSlash</CODE></TD>-<TD><A HREF="#V2" TITLE="V2 - two-place verb">V2</A> <CODE>-></CODE> <A HREF="#VPSlash" TITLE="VPSlash - verb phrase missing complement">VPSlash</A></TD>-<TD><div class=reveal> <I>whom does she see</I> <div class=popup> <ul> <li>API: <CODE>mkQCl who_IP (mkClSlash she_NP (mkVPSlash see_V2))</CODE> <li>Afr: <I>wie sien sy</I> <li>Bul: <I>кого вижда тя</I> <li>Cat: <I>qui veu ella</I> <li>Dan: <I>hvem ser hun</I> <li>Dut: <I>wie zit ze</I> <li>Eng: <I>whom does she see</I> <li>Fin: <I>kenet hän näkee</I> <li>Fre: <I>qui voit elle</I> <li>Ger: <I>wen sieht sie</I> <li>Ita: <I>chi vede lei</I> <li>Nep: <I>कासलाई उनी हेर्छिन्</I> <li>Nor: <I>hvem ser hun</I> <li>Pes: <I>چه کسی را او می بیند</I> <li>Pnb: <I>كون او ویكھدی اے</I> <li>Pol: <I>kogo widzi ona</I> <li>Ron: <I>pe cine vede ea</I> <li>Rus: <I>кого она видит</I> <li>Spa: <I>quién ve ella</I> <li>Swe: <I>vem ser hon</I> <li>Urd: <I>كون وہ دیكھتی ہے</I> </ul> </div> </div></TD>-</TR>-<TR>-<TD><CODE>mkVPSlash</CODE></TD>-<TD><A HREF="#V3" TITLE="V3 - three-place verb">V3</A> <CODE>-></CODE> <A HREF="#NP" TITLE="NP - noun phrase (subject or object)">NP</A> <CODE>-></CODE> <A HREF="#VPSlash" TITLE="VPSlash - verb phrase missing complement">VPSlash</A></TD>-<TD><div class=reveal> <I>to whom does she send it</I> <div class=popup> <ul> <li>API: <CODE>mkQCl who_IP (mkClSlash she_NP (mkVPSlash send_V3 it_NP))</CODE> <li>Afr: <I>na wie stuur sy dit</I> <li>Bul: <I>до кого праща него тя</I> <li>Cat: <I>a qui ho envia ella</I> <li>Dan: <I>til hvem sender hun det</I> <li>Dut: <I>naar wie stuurt ze het</I> <li>Eng: <I>to whom does she send it</I> <li>Fin: <I>kenelle hän lähettää sen</I> <li>Fre: <I>à qui l' envoie elle</I> <li>Ger: <I>wem schickt sie es</I> <li>Ita: <I>a chi lo manda lei</I> <li>Nep: <I>कासलाई उनी यसलाई लाई पठाउँछिन्</I> <li>Nor: <I>til hvem sender hun det</I> <li>Pes: <I>چه کسی برای او آن را می فرستد</I> <li>Pnb: <I>كون او اینوں پیجدی اے</I> <li>Pol: <I>do kogo ona wysyła je</I> <li>Ron: <I>cui îl trimite ea</I> <li>Rus: <I>кому она посылает его</I> <li>Spa: <I>a quién lo manda ella</I> <li>Swe: <I>till vem skickar hon det</I> <li>Urd: <I>كون وہ اس كو بھیجتی ہے</I> </ul> </div> </div></TD>-</TR>-<TR>-<TD><CODE>mkVPSlash</CODE></TD>-<TD><A HREF="#V2A" TITLE="V2A - verb with NP and AP complement">V2A</A> <CODE>-></CODE> <A HREF="#AP" TITLE="AP - adjectival phrase">AP</A> <CODE>-></CODE> <A HREF="#VPSlash" TITLE="VPSlash - verb phrase missing complement">VPSlash</A></TD>-<TD><div class=reveal> <I>whom does she paint red</I> <div class=popup> <ul> <li>API: <CODE>mkQCl who_IP (mkClSlash she_NP (mkVPSlash paint_V2A (mkAP red_A)))</CODE> <li>Afr: <I>wie skilder sy rooi</I> <li>Bul: <I>кого рисува червен тя</I> <li>Cat: <I>qui pinta ella en vermell</I> <li>Dan: <I>hvem maler hun rød</I> <li>Dut: <I>wie schildeert ze rood</I> <li>Eng: <I>whom does she paint red</I> <li>Fin: <I>kenet hän maalaa punaiseksi</I> <li>Fre: <I>qui peint elle en rouge</I> <li>Ger: <I>wen malt sie rot</I> <li>Ita: <I>chi dipinge lei rosso</I> <li>Nep: <I>कासलाई उनी रातो रँग लागाउँछिन्</I> <li>Nor: <I>hvem maler hun rød</I> <li>Pes: <I>چه کسی را او قرمز رنگ می کند</I> <li>Pnb: <I>كون او لال رنگ كردی اے</I> <li>Pol: <I>kogo ona maluje na czerwono</I> <li>Ron: <I>pe cine pictează ea roşu</I> <li>Rus: <I>кого она рисует красным</I> <li>Spa: <I>quién pinta ella en rojo</I> <li>Swe: <I>vem målar hon röd</I> <li>Urd: <I>كون وہ لال رنگ كرتی ہے</I> </ul> </div> </div></TD>-</TR>-<TR>-<TD><CODE>mkVPSlash</CODE></TD>-<TD><A HREF="#V2Q" TITLE="V2Q - verb with NP and Q complement">V2Q</A> <CODE>-></CODE> <A HREF="#QS" TITLE="QS - question">QS</A> <CODE>-></CODE> <A HREF="#VPSlash" TITLE="VPSlash - verb phrase missing complement">VPSlash</A></TD>-<TD><div class=reveal> <I>whom does she ask where I sleep</I> <div class=popup> <ul> <li>API: <CODE>mkQCl who_IP (mkClSlash she_NP (mkVPSlash ask_V2Q (mkQS (mkQCl where_IAdv (mkCl i_NP sleep_V)))))</CODE> <li>Afr: <I>wie vra sy waar ek slaap</I> <li>Bul: <I>кого пита къде спя аз тя</I> <li>Cat: <I>a qui pregunta ella on dormo jo</I> <li>Dan: <I>hvem spørger hun hvor jeg sover</I> <li>Dut: <I>wie vraagt ze waar ik slaap</I> <li>Eng: <I>whom does she ask where I sleep</I> <li>Fin: <I>keneltä hän kysyy missä minä nukun</I> <li>Fre: <I>à qui demande elle où dors je</I> <li>Ger: <I>wen fragt sie wo ich schlafe</I> <li>Ita: <I>a chi chiede lei dove dormo io</I> <li>Nep: <I>कासलाई उनी सोध्छिन्की कहाँ म सुत्छु</I> <li>Nor: <I>hvem spørr hun hvor jeg sover</I> <li>Pes: <I>از چه کسی او می پرسد کجا من می خوابم</I> <li>Pnb: <I>كون او پچھدی اے كہ كتھے میں سوندا واں</I> <li>Pol: <I>kogo ona pyta , gdzie ja śpię</I> <li>Ron: <I>pe cine întreabă ea unde dorm eu</I> <li>Rus: <I>кого она спрашивает где я сплю</I> <li>Spa: <I>a quién pregunta ella donde duermo yo</I> <li>Swe: <I>vem frågar hon var jag sover</I> <li>Urd: <I>كون وہ پوچھتی ہے كہ كہاں میں سوتا ہوں</I> </ul> </div> </div></TD>-</TR>-<TR>-<TD><CODE>mkVPSlash</CODE></TD>-<TD><A HREF="#V2S" TITLE="V2S - verb with NP and S complement">V2S</A> <CODE>-></CODE> <A HREF="#S" TITLE="S - declarative sentence">S</A> <CODE>-></CODE> <A HREF="#VPSlash" TITLE="VPSlash - verb phrase missing complement">VPSlash</A></TD>-<TD><div class=reveal> <I>to whom does she answer that I sleep</I> <div class=popup> <ul> <li>API: <CODE>mkQCl who_IP (mkClSlash she_NP (mkVPSlash answer_V2S (mkS (mkCl i_NP sleep_V))))</CODE> <li>Afr: <I>wie antwoord sy dat ek slaap</I> <li>Bul: <I>на на кого отговаря , че аз спя тя</I> <li>Cat: <I>a qui respon ella que jo dormo</I> <li>Dan: <I>til hvem svarer hun at jeg sover</I> <li>Dut: <I>wie antwoordt ze dat ik slaap</I> <li>Eng: <I>to whom does she answer that I sleep</I> <li>Fin: <I>kenelle hän vastaa että minä nukun</I> <li>Fre: <I>à qui répond elle que je dors</I> <li>Ger: <I>wem antwortet sie daß ich schlafe</I> <li>Ita: <I>a chi risponde lei che io dormo</I> <li>Nep: <I>कासलाई उनी उत्तर दिन्छिन्की म सुत्छु</I> <li>Nor: <I>til hvem svarer hun at jeg sover</I> <li>Pes: <I>به چه کسی او جواب می دهد که من می خوابم</I> <li>Pnb: <I>كون او جواب دیندی اے كہ میں سوندا واں</I> <li>Pol: <I>komu ona odpowiada , że ja śpię</I> <li>Ron: <I>cui răspunde ea cã eu dorm</I> <li>Rus: <I>кого она отвечает , что я сплю</I> <li>Spa: <I>a quién responde ella que yo duermo</I> <li>Swe: <I>till vem svarar hon att jag sover</I> <li>Urd: <I>كون وہ جواب دیتی ہے كہ میں سوتا ہوں</I> </ul> </div> </div></TD>-</TR>-<TR>-<TD><CODE>mkVPSlash</CODE></TD>-<TD><A HREF="#V2V" TITLE="V2V - verb with NP and V complement">V2V</A> <CODE>-></CODE> <A HREF="#VP" TITLE="VP - verb phrase">VP</A> <CODE>-></CODE> <A HREF="#VPSlash" TITLE="VPSlash - verb phrase missing complement">VPSlash</A></TD>-<TD><div class=reveal> <I>whom does she beg to sleep</I> <div class=popup> <ul> <li>API: <CODE>mkQCl who_IP (mkClSlash she_NP (mkVPSlash beg_V2V (mkVP sleep_V)))</CODE> <li>Afr: <I>wie smeek sy te slaap</I> <li>Bul: <I>кого моли да спи тя</I> <li>Cat: <I>qui demana ella a dormir</I> <li>Dan: <I>hvem beder hun at sove</I> <li>Dut: <I>wie smeekt ze te slapen</I> <li>Eng: <I>whom does she beg to sleep</I> <li>Fin: <I>ketä hän pyytää nukkumaan</I> <li>Fre: <I>qui demande elle à dormir</I> <li>Ger: <I>wen bittet sie zu schlafen</I> <li>Ita: <I>chi prega lei di dormire</I> <li>Nep: <I>कासलाई उनी सुत्न आग्रह गर्छिन्</I> <li>Nor: <I>hvem ber hun att sove</I> <li>Pes: <I>از چه کسی او خواهش می کند بخوابد</I> <li>Pnb: <I>كون او سونا دی مانگدی اے</I> <li>Pol: <I>*</I> <li>Ron: <I>pe cine roagă ea sã doarmă</I> <li>Rus: <I>кого она просит спать</I> <li>Spa: <I>quién roga ella a dormir</I> <li>Swe: <I>vem ber hon att sova</I> <li>Urd: <I>كون وہ سونے كی التجا كرتی ہے</I> </ul> </div> </div></TD>-</TR>-<TR>-<TD><CODE>mkVPSlash</CODE></TD>-<TD><A HREF="#VV" TITLE="VV - verb-phrase-complement verb">VV</A> <CODE>-></CODE> <A HREF="#VPSlash" TITLE="VPSlash - verb phrase missing complement">VPSlash</A> <CODE>-></CODE> <A HREF="#VPSlash" TITLE="VPSlash - verb phrase missing complement">VPSlash</A></TD>-<TD><div class=reveal> <I>whom does she want to see</I> <div class=popup> <ul> <li>API: <CODE>mkQCl who_IP (mkClSlash she_NP (mkVPSlash want_VV (mkVPSlash see_V2)))</CODE> <li>Afr: <I>wie wil sy sien</I> <li>Bul: <I>кого иска да види тя</I> <li>Cat: <I>qui vol ella veure</I> <li>Dan: <I>hvem vil hun se</I> <li>Dut: <I>wie wil ze zien</I> <li>Eng: <I>whom does she want to see</I> <li>Fin: <I>kenet hän tahtoo nähdä</I> <li>Fre: <I>qui veut elle voir</I> <li>Ger: <I>wen will sie sehen</I> <li>Ita: <I>chi vuole lei vedere</I> <li>Nep: <I>कासलाई उनी हेर्न चाहन्छिन्</I> <li>Nor: <I>hvem vil hun se</I> <li>Pes: <I>چه کسی را او می خواهد ببیند</I> <li>Pnb: <I>كون او ویكھنا چاندی اے</I> <li>Pol: <I>kogo ona chce widzieć</I> <li>Ron: <I>pe cine vrea ea sã vadă</I> <li>Rus: <I>кого она хочет видеть</I> <li>Spa: <I>quién quiere ella ver</I> <li>Swe: <I>vem vill hon se</I> <li>Urd: <I>كون وہ دیكھنا چاہتی ہے</I> </ul> </div> </div></TD>-</TR>-<TR>-<TD><CODE>mkVPSlash</CODE></TD>-<TD><A HREF="#V2V" TITLE="V2V - verb with NP and V complement">V2V</A> <CODE>-></CODE> <A HREF="#NP" TITLE="NP - noun phrase (subject or object)">NP</A> <CODE>-></CODE> <A HREF="#VPSlash" TITLE="VPSlash - verb phrase missing complement">VPSlash</A> <CODE>-></CODE> <A HREF="#VPSlash" TITLE="VPSlash - verb phrase missing complement">VPSlash</A></TD>-<TD><div class=reveal> <I>whom does she beg me to see</I> <div class=popup> <ul> <li>API: <CODE>mkQCl who_IP (mkClSlash she_NP (mkVPSlash beg_V2V i_NP (mkVPSlash see_V2)))</CODE> <li>Afr: <I>wie smeek sy my te sien</I> <li>Bul: <I>кого моли мен да видя тя</I> <li>Cat: <I>qui em demana ella a veure</I> <li>Dan: <I>hvem beder hun mig at se</I> <li>Dut: <I>wie smeekt ze me te zien</I> <li>Eng: <I>whom does she beg me to see</I> <li>Fin: <I>kenet hän pyytää minua näkemään</I> <li>Fre: <I>qui me demande elle à voir</I> <li>Ger: <I>wen bittet sie mich zu sehen</I> <li>Ita: <I>chi mi prega lei di vedere</I> <li>Nep: <I>कासलाई उनी म लाई हेर्न आग्रह गर्छिन्</I> <li>Nor: <I>hvem ber hun meg att se</I> <li>Pes: <I>چه کسی را او از من خواهش می کند ببیند</I> <li>Pnb: <I>كون او مینوں سے ویكھنا مانگدی اے</I> <li>Pol: <I>*</I> <li>Ron: <I>pe cine mă roagă ea sã văd</I> <li>Rus: <I>кого она просит меня видеть</I> <li>Spa: <I>quién me roga ella a ver</I> <li>Swe: <I>vem ber hon mig att se</I> <li>Urd: <I>كون وہ مجھ سے دیكھنا التجا كرتی ہے</I> </ul> </div> </div></TD>-</TR>-</TABLE>--<A NAME="VQ"></A>-<H2>VQ - question-complement verb</H2>--<P>-Lexical category, constructors given in-<A HREF="#RParadigms">lexical paradigms</A>.-</P>--<A NAME="VS"></A>-<H2>VS - sentence-complement verb</H2>--<P>-Lexical category, constructors given in-<A HREF="#RParadigms">lexical paradigms</A>.-</P>--<A NAME="VV"></A>-<H2>VV - verb-phrase-complement verb</H2>--<TABLE BORDER="1" CELLPADDING="4">-<TR>-<TH>Function</TH>-<TH>Type</TH>-<TH COLSPAN="2">Example</TH>-</TR>-<TR>-<TD><CODE>can8know_VV</CODE></TD>-<TD><A HREF="#VV" TITLE="VV - verb-phrase-complement verb">VV</A></TD>-<TD><div class=reveal> <I>to be able to sleep</I> <div class=popup> <ul> <li>API: <CODE>mkUtt (mkVP can8know_VV (mkVP sleep_V))</CODE> <li>Afr: <I>slaap kan</I> <li>Bul: <I>да може да спи</I> <li>Cat: <I>saber dormir</I> <li>Dan: <I>at kunne sove</I> <li>Dut: <I>slapen kunnen</I> <li>Eng: <I>to be able to sleep</I> <li>Fin: <I>osata nukkua</I> <li>Fre: <I>savoir dormir</I> <li>Ger: <I>schlafen können</I> <li>Ita: <I>sapere dormire</I> <li>Nep: <I>सुत्न सक्नु</I> <li>Nor: <I>å kunne sove</I> <li>Pes: <I>*</I> <li>Pnb: <I>سكنا سون</I> <li>Pol: <I>umieć spać</I> <li>Ron: <I>sã poată sã doarmă</I> <li>Rus: <I>мочь спать</I> <li>Spa: <I>saber dormir</I> <li>Swe: <I>att kunna sova</I> <li>Urd: <I>سكنا سوئیں</I> </ul> </div> </div></TD>-</TR>-<TR>-<TD><CODE>can_VV</CODE></TD>-<TD><A HREF="#VV" TITLE="VV - verb-phrase-complement verb">VV</A></TD>-<TD><div class=reveal> <I>to be able to sleep</I> <div class=popup> <ul> <li>API: <CODE>mkUtt (mkVP can_VV (mkVP sleep_V))</CODE> <li>Afr: <I>slaap kan</I> <li>Bul: <I>да може да спи</I> <li>Cat: <I>poder dormir</I> <li>Dan: <I>at kunne sove</I> <li>Dut: <I>slapen kunnen</I> <li>Eng: <I>to be able to sleep</I> <li>Fin: <I>voida nukkua</I> <li>Fre: <I>pouvoir dormir</I> <li>Ger: <I>schlafen können</I> <li>Ita: <I>potere dormire</I> <li>Nep: <I>सुत्न सक्नु</I> <li>Nor: <I>å kunne sove</I> <li>Pes: <I>*</I> <li>Pnb: <I>سكنا سون</I> <li>Pol: <I>móc spać</I> <li>Ron: <I>sã poată sã doarmă</I> <li>Rus: <I>мочь спать</I> <li>Spa: <I>poder dormir</I> <li>Swe: <I>att kunna sova</I> <li>Urd: <I>سكنا سوئیں</I> </ul> </div> </div></TD>-</TR>-<TR>-<TD><CODE>must_VV</CODE></TD>-<TD><A HREF="#VV" TITLE="VV - verb-phrase-complement verb">VV</A></TD>-<TD><div class=reveal> <I>have to</I> <div class=popup> <ul> <li>API: <CODE>must_VV</CODE> <li>Afr: <I>moet</I> <li>Bul: <I>трябва</I> <li>Cat: <I>haver</I> <li>Dan: <I>må</I> <li>Dut: <I>moeten</I> <li>Eng: <I>have to</I> <li>Fin: <I>täytyä</I> <li>Fre: <I>devoir</I> <li>Ger: <I>zu müssen</I> <li>Ita: <I>dover</I> <li>Nep: <I>अवशएकोछु</I> <li>Nor: <I>må</I> <li>Pes: <I>*</I> <li>Pnb: <I>*</I> <li>Pol: <I>ResPol.Imperfective</I> <li>Ron: <I>trebui</I> <li>Rus: <I>должен</I> <li>Spa: <I>deber</I> <li>Swe: <I>måste</I> <li>Urd: <I>*</I> </ul> </div> </div></TD>-</TR>-<TR>-<TD><CODE>want_VV</CODE></TD>-<TD><A HREF="#VV" TITLE="VV - verb-phrase-complement verb">VV</A></TD>-<TD><div class=reveal> <I>want</I> <div class=popup> <ul> <li>API: <CODE>want_VV</CODE> <li>Afr: <I>wil</I> <li>Bul: <I>искам</I> <li>Cat: <I>voler</I> <li>Dan: <I>vil</I> <li>Dut: <I>willen</I> <li>Eng: <I>want</I> <li>Fin: <I>tahtoa</I> <li>Fre: <I>vouloir</I> <li>Ger: <I>zu wollen</I> <li>Ita: <I>voler</I> <li>Nep: <I>चाहन्एकोछु</I> <li>Nor: <I>vil</I> <li>Pes: <I>خواسته ام</I> <li>Pnb: <I>چاواں</I> <li>Pol: <I>ResPol.Dual</I> <li>Ron: <I>vrea</I> <li>Rus: <I>хочу</I> <li>Spa: <I>querer</I> <li>Swe: <I>vill</I> <li>Urd: <I>چاہوں</I> </ul> </div> </div></TD>-</TR>-</TABLE>--<A NAME="Voc"></A>-<H2>Voc - vocative or "please"</H2>--<TABLE BORDER="1" CELLPADDING="4">-<TR>-<TH>Function</TH>-<TH>Type</TH>-<TH COLSPAN="2">Example</TH>-</TR>-<TR>-<TD><CODE>mkVoc</CODE></TD>-<TD><A HREF="#NP" TITLE="NP - noun phrase (subject or object)">NP</A> <CODE>-></CODE> <A HREF="#Voc" TITLE="Voc - vocative or "please"">Voc</A></TD>-<TD><div class=reveal> <I>yes , my friend</I> <div class=popup> <ul> <li>API: <CODE>mkPhr yes_Utt (mkVoc (mkNP i_Pron friend_N))</CODE> <li>Afr: <I>ja , my vriend</I> <li>Bul: <I>да , мой приятелю</I> <li>Cat: <I>sí , el meu amic</I> <li>Dan: <I>ja , min ven</I> <li>Dut: <I>ja , mijn vriend</I> <li>Eng: <I>yes , my friend</I> <li>Fin: <I>kyllä , minun ystäväni</I> <li>Fre: <I>oui , mon ami</I> <li>Ger: <I>ja , mein Freund</I> <li>Ita: <I>sì , il mio amico</I> <li>Nep: <I>हजुर मेरो साथी</I> <li>Nor: <I>ja , min venn</I> <li>Pes: <I>بله دوست من</I> <li>Pnb: <I>ہاں میرا یار</I> <li>Pol: <I>tak , mój przyjacielu</I> <li>Ron: <I>da , prietenul meu</I> <li>Rus: <I>Да , мой друг</I> <li>Spa: <I>sí , mi amigo</I> <li>Swe: <I>ja , min vän</I> <li>Urd: <I>ہاں میرا دوست</I> </ul> </div> </div></TD>-</TR>-<TR>-<TD><CODE>please_Voc</CODE></TD>-<TD><A HREF="#Voc" TITLE="Voc - vocative or "please"">Voc</A></TD>-<TD><div class=reveal> <I>please</I> <div class=popup> <ul> <li>API: <CODE>please_Voc</CODE> <li>Afr: <I>asseblief</I> <li>Bul: <I>моля</I> <li>Cat: <I>sisplau</I> <li>Dan: <I>tak</I> <li>Dut: <I>alsjeblieft</I> <li>Eng: <I>please</I> <li>Fin: <I>ole hyvä</I> <li>Fre: <I>s'il vous plaît</I> <li>Ger: <I>bitte</I> <li>Ita: <I>per favore</I> <li>Nep: <I>कृपया</I> <li>Nor: <I>takk</I> <li>Pes: <I>لطفاً</I> <li>Pnb: <I>مہربانi</I> <li>Pol: <I>proszę</I> <li>Ron: <I>vă rog</I> <li>Rus: <I>пожалуйста</I> <li>Spa: <I>por favor</I> <li>Swe: <I>tack</I> <li>Urd: <I>مہربانی</I> </ul> </div> </div></TD>-</TR>-</TABLE>--<A NAME="toc83"></A>-<H1>Lexical Paradigms</H1>--<A NAME="toc84"></A>-<H2>Paradigms for Afrikaans</H2>--<P>-<a name="RParadigms"></a>-</P>-<P>-source <A HREF="http://www.grammaticalframework.org/lib/src/afrikaans/ParadigmsAfr.gf"><CODE>../src/afrikaans/ParadigmsAfr.gf</CODE></A>-</P>--<TABLE BORDER="1" CELLPADDING="4">-<TR>-<TH>Function</TH>-<TH>Type</TH>-<TH COLSPAN="2">Explanation</TH>-</TR>-<TR>-<TD><CODE>de</CODE></TD>-<TD><A HREF="#Gender">Gender</A></TD>-<TD><I>non-neutrum</I></TD>-</TR>-<TR>-<TD><CODE>het</CODE></TD>-<TD><A HREF="#Gender">Gender</A></TD>-<TD><I>neutrum</I></TD>-</TR>-<TR>-<TD><CODE>--die</CODE></TD>-<TD><A HREF="#Gender">Gender</A></TD>-<TD><I>-</I></TD>-</TR>-<TR>-<TD><CODE>mkN</CODE></TD>-<TD><CODE>(muis</CODE> <CODE>:</CODE> <CODE>Str)</CODE> <CODE>-></CODE> <A HREF="#N" TITLE="N - common noun">N</A></TD>-<TD><I>de muis-muisen, with some predictable exceptions</I></TD>-</TR>-<TR>-<TD><CODE>mkN</CODE></TD>-<TD><CODE>(bit</CODE> <CODE>:</CODE> <CODE>Str)</CODE> <CODE>-></CODE> <A HREF="#Gender">Gender</A> <CODE>-></CODE> <A HREF="#N" TITLE="N - common noun">N</A></TD>-<TD><I>if gender is not predictable</I></TD>-</TR>-<TR>-<TD><CODE>mkN</CODE></TD>-<TD><CODE>(gat,gaten</CODE> <CODE>:</CODE> <CODE>Str)</CODE> <CODE>-></CODE> <A HREF="#Gender">Gender</A> <CODE>-></CODE> <A HREF="#N" TITLE="N - common noun">N</A></TD>-<TD><I>worst-case for nouns</I></TD>-</TR>-<TR>-<TD><CODE>mkN2</CODE></TD>-<TD><A HREF="#N" TITLE="N - common noun">N</A> <CODE>-></CODE> <A HREF="#N2" TITLE="N2 - relational noun">N2</A></TD>-<TD><I>relational noun with preposition van</I></TD>-</TR>-<TR>-<TD><CODE>mkN2</CODE></TD>-<TD><A HREF="#N" TITLE="N - common noun">N</A> <CODE>-></CODE> <A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A> <CODE>-></CODE> <A HREF="#N2" TITLE="N2 - relational noun">N2</A></TD>-<TD><I>other preposition than van</I></TD>-</TR>-<TR>-<TD><CODE>mkN3</CODE></TD>-<TD><A HREF="#N" TITLE="N - common noun">N</A> <CODE>-></CODE> <A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A> <CODE>-></CODE> <A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A> <CODE>-></CODE> <A HREF="#N3" TITLE="N3 - three-place relational noun">N3</A></TD>-<TD><I>e.g. afstand + van + naar</I></TD>-</TR>-<TR>-<TD><CODE>mkPN</CODE></TD>-<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#PN" TITLE="PN - proper name">PN</A></TD>-<TD><I>proper name</I></TD>-</TR>-<TR>-<TD><CODE>mkA</CODE></TD>-<TD><CODE>(vers</CODE> <CODE>:</CODE> <CODE>Str)</CODE> <CODE>-></CODE> <A HREF="#A" TITLE="A - one-place adjective">A</A></TD>-<TD><I>regular adjective</I></TD>-</TR>-<TR>-<TD><CODE>mkA</CODE></TD>-<TD><CODE>(sag,</CODE> <CODE>sagte</CODE> <CODE>:</CODE> <CODE>Str)</CODE> <CODE>-></CODE> <A HREF="#A" TITLE="A - one-place adjective">A</A> <CODE>--"semi-irregular"</CODE></TD>-<TD><I>-</I></TD>-</TR>-<TR>-<TD><CODE>mkA</CODE></TD>-<TD><CODE>(goed,goede,goeds,beter,best</CODE> <CODE>:</CODE> <CODE>Str)</CODE> <CODE>-></CODE> <A HREF="#A" TITLE="A - one-place adjective">A</A></TD>-<TD><I>irregular adjective</I></TD>-</TR>-<TR>-<TD><CODE>invarA</CODE></TD>-<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#A" TITLE="A - one-place adjective">A</A></TD>-<TD><I>adjective with just one form</I></TD>-</TR>-<TR>-<TD><CODE>mkA2</CODE></TD>-<TD><A HREF="#A" TITLE="A - one-place adjective">A</A> <CODE>-></CODE> <A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A> <CODE>-></CODE> <A HREF="#A2" TITLE="A2 - two-place adjective">A2</A></TD>-<TD><I>e.g. getrouwd + met</I></TD>-</TR>-<TR>-<TD><CODE>mkAdv</CODE></TD>-<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#Adv" TITLE="Adv - verb-phrase-modifying adverb">Adv</A></TD>-<TD><I>-</I></TD>-</TR>-<TR>-<TD><CODE>mkPrep</CODE></TD>-<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A></TD>-<TD><I>-</I></TD>-</TR>-<TR>-<TD><CODE>van_Prep</CODE></TD>-<TD><A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A></TD>-<TD><I>-</I></TD>-</TR>-<TR>-<TD><CODE>te_Prep</CODE></TD>-<TD><A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A></TD>-<TD><I>-</I></TD>-</TR>-<TR>-<TD><CODE>mkV</CODE></TD>-<TD><CODE>(aaien</CODE> <CODE>:</CODE> <CODE>Str)</CODE> <CODE>-></CODE> <A HREF="#V" TITLE="V - one-place verb">V</A></TD>-<TD><I>regular verb</I></TD>-</TR>-<TR>-<TD><CODE>mkV</CODE></TD>-<TD><CODE>(breken,brak,gebroken</CODE> <CODE>:</CODE> <CODE>Str)</CODE> <CODE>-></CODE> <A HREF="#V" TITLE="V - one-place verb">V</A></TD>-<TD><I>theme of irregular verb</I></TD>-</TR>-<TR>-<TD><CODE>mkV</CODE></TD>-<TD><CODE>(breken,brak,braken,gebroken</CODE> <CODE>:</CODE> <CODE>Str)</CODE> <CODE>-></CODE> <A HREF="#V" TITLE="V - one-place verb">V</A></TD>-<TD><I>also past plural irregular</I></TD>-</TR>-<TR>-<TD><CODE>mkV</CODE></TD>-<TD><CODE>(aai,aait,aaien,aaide,aaide,aaiden,geaaid</CODE> <CODE>:</CODE> <CODE>Str)</CODE> <CODE>-></CODE> <A HREF="#V" TITLE="V - one-place verb">V</A></TD>-<TD><I>worst-case verb</I></TD>-</TR>-<TR>-<TD><CODE>mkV</CODE></TD>-<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#V" TITLE="V - one-place verb">V</A> <CODE>-></CODE> <A HREF="#V" TITLE="V - one-place verb">V</A></TD>-<TD><I>add movable suffix, e.g. af + stappen</I></TD>-</TR>-<TR>-<TD><CODE>zijnV</CODE></TD>-<TD><A HREF="#V" TITLE="V - one-place verb">V</A> <CODE>-></CODE> <A HREF="#V" TITLE="V - one-place verb">V</A></TD>-<TD><I>force zijn as auxiliary (default hebben)</I></TD>-</TR>-<TR>-<TD><CODE>reflV</CODE></TD>-<TD><A HREF="#V" TITLE="V - one-place verb">V</A> <CODE>-></CODE> <A HREF="#V" TITLE="V - one-place verb">V</A></TD>-<TD><I>reflexive verb e.g. zich afvragen</I></TD>-</TR>-<TR>-<TD><CODE>mkV3</CODE></TD>-<TD><A HREF="#V" TITLE="V - one-place verb">V</A> <CODE>-></CODE> <A HREF="#V3" TITLE="V3 - three-place verb">V3</A></TD>-<TD><I>geven,(accusative),(dative)</I></TD>-</TR>-<TR>-<TD><CODE>mkV3</CODE></TD>-<TD><A HREF="#V" TITLE="V - one-place verb">V</A> <CODE>-></CODE> <A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A> <CODE>-></CODE> <A HREF="#V3" TITLE="V3 - three-place verb">V3</A></TD>-<TD><I>sturen,(accusative),naar</I></TD>-</TR>-<TR>-<TD><CODE>mkV3</CODE></TD>-<TD><A HREF="#V" TITLE="V - one-place verb">V</A> <CODE>-></CODE> <A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A> <CODE>-></CODE> <A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A> <CODE>-></CODE> <A HREF="#V3" TITLE="V3 - three-place verb">V3</A></TD>-<TD><I>praten, met, over</I></TD>-</TR>-<TR>-<TD><CODE>mkVS</CODE></TD>-<TD><A HREF="#V" TITLE="V - one-place verb">V</A> <CODE>-></CODE> <A HREF="#VS" TITLE="VS - sentence-complement verb">VS</A></TD>-<TD><I>-</I></TD>-</TR>-<TR>-<TD><CODE>mkV2S</CODE></TD>-<TD><A HREF="#V" TITLE="V - one-place verb">V</A> <CODE>-></CODE> <A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A> <CODE>-></CODE> <A HREF="#V2S" TITLE="V2S - verb with NP and S complement">V2S</A></TD>-<TD><I>-</I></TD>-</TR>-<TR>-<TD><CODE>mkVV</CODE></TD>-<TD><A HREF="#V" TITLE="V - one-place verb">V</A> <CODE>-></CODE> <A HREF="#VV" TITLE="VV - verb-phrase-complement verb">VV</A></TD>-<TD><I>-</I></TD>-</TR>-<TR>-<TD><CODE>mkV2V</CODE></TD>-<TD><A HREF="#V" TITLE="V - one-place verb">V</A> <CODE>-></CODE> <A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A> <CODE>-></CODE> <A HREF="#V2V" TITLE="V2V - verb with NP and V complement">V2V</A></TD>-<TD><I>-</I></TD>-</TR>-<TR>-<TD><CODE>mkVA</CODE></TD>-<TD><A HREF="#V" TITLE="V - one-place verb">V</A> <CODE>-></CODE> <A HREF="#VA" TITLE="VA - adjective-complement verb">VA</A></TD>-<TD><I>-</I></TD>-</TR>-<TR>-<TD><CODE>mkV2A</CODE></TD>-<TD><A HREF="#V" TITLE="V - one-place verb">V</A> <CODE>-></CODE> <A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A> <CODE>-></CODE> <A HREF="#V2A" TITLE="V2A - verb with NP and AP complement">V2A</A></TD>-<TD><I>-</I></TD>-</TR>-<TR>-<TD><CODE>mkVQ</CODE></TD>-<TD><A HREF="#V" TITLE="V - one-place verb">V</A> <CODE>-></CODE> <A HREF="#VQ" TITLE="VQ - question-complement verb">VQ</A></TD>-<TD><I>-</I></TD>-</TR>-<TR>-<TD><CODE>mkV2Q</CODE></TD>-<TD><A HREF="#V" TITLE="V - one-place verb">V</A> <CODE>-></CODE> <A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A> <CODE>-></CODE> <A HREF="#V2Q" TITLE="V2Q - verb with NP and Q complement">V2Q</A></TD>-<TD><I>-</I></TD>-</TR>-</TABLE>--<A NAME="toc85"></A>-<H2>Paradigms for Bulgarian</H2>--<P>-<a name="RParadigms"></a>-</P>-<P>-source <A HREF="http://www.grammaticalframework.org/lib/src/bulgarian/ParadigmsBul.gf"><CODE>../src/bulgarian/ParadigmsBul.gf</CODE></A>-</P>--<TABLE BORDER="1" CELLPADDING="4">-<TR>-<TH>Function</TH>-<TH>Type</TH>-<TH COLSPAN="2">Explanation</TH>-</TR>-<TR>-<TD><CODE>mkN001</CODE></TD>-<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#N" TITLE="N - common noun">N</A></TD>-<TD><I>numbers refer to Krustev, Bulg. Morph. in 187 Tables</I></TD>-</TR>-<TR>-<TD><CODE>mkN002</CODE></TD>-<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#N" TITLE="N - common noun">N</A></TD>-<TD><I>-</I></TD>-</TR>-<TR>-<TD><CODE>mkN002a</CODE></TD>-<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#N" TITLE="N - common noun">N</A></TD>-<TD><I>-</I></TD>-</TR>-<TR>-<TD><CODE>mkN003</CODE></TD>-<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#N" TITLE="N - common noun">N</A></TD>-<TD><I>-</I></TD>-</TR>-<TR>-<TD><CODE>mkN004</CODE></TD>-<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#N" TITLE="N - common noun">N</A></TD>-<TD><I>-</I></TD>-</TR>-<TR>-<TD><CODE>mkN005</CODE></TD>-<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#N" TITLE="N - common noun">N</A></TD>-<TD><I>-</I></TD>-</TR>-<TR>-<TD><CODE>mkN006</CODE></TD>-<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#N" TITLE="N - common noun">N</A></TD>-<TD><I>-</I></TD>-</TR>-<TR>-<TD><CODE>mkN007</CODE></TD>-<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#N" TITLE="N - common noun">N</A></TD>-<TD><I>-</I></TD>-</TR>-<TR>-<TD><CODE>mkN007b</CODE></TD>-<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#N" TITLE="N - common noun">N</A></TD>-<TD><I>-</I></TD>-</TR>-<TR>-<TD><CODE>mkN007a</CODE></TD>-<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#N" TITLE="N - common noun">N</A></TD>-<TD><I>-</I></TD>-</TR>-<TR>-<TD><CODE>mkN008</CODE></TD>-<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#N" TITLE="N - common noun">N</A></TD>-<TD><I>-</I></TD>-</TR>-<TR>-<TD><CODE>mkN008b</CODE></TD>-<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#N" TITLE="N - common noun">N</A></TD>-<TD><I>-</I></TD>-</TR>-<TR>-<TD><CODE>mkN008c</CODE></TD>-<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#N" TITLE="N - common noun">N</A></TD>-<TD><I>-</I></TD>-</TR>-<TR>-<TD><CODE>mkN008a</CODE></TD>-<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#N" TITLE="N - common noun">N</A></TD>-<TD><I>-</I></TD>-</TR>-<TR>-<TD><CODE>mkN009</CODE></TD>-<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#N" TITLE="N - common noun">N</A></TD>-<TD><I>-</I></TD>-</TR>-<TR>-<TD><CODE>mkN009a</CODE></TD>-<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#N" TITLE="N - common noun">N</A></TD>-<TD><I>-</I></TD>-</TR>-<TR>-<TD><CODE>mkN010</CODE></TD>-<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#N" TITLE="N - common noun">N</A></TD>-<TD><I>-</I></TD>-</TR>-<TR>-<TD><CODE>mkN011</CODE></TD>-<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#N" TITLE="N - common noun">N</A></TD>-<TD><I>-</I></TD>-</TR>-<TR>-<TD><CODE>mkN012</CODE></TD>-<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#N" TITLE="N - common noun">N</A></TD>-<TD><I>-</I></TD>-</TR>-<TR>-<TD><CODE>mkN013</CODE></TD>-<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#N" TITLE="N - common noun">N</A></TD>-<TD><I>-</I></TD>-</TR>-<TR>-<TD><CODE>mkN014</CODE></TD>-<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#N" TITLE="N - common noun">N</A></TD>-<TD><I>-</I></TD>-</TR>-<TR>-<TD><CODE>mkN014a</CODE></TD>-<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#N" TITLE="N - common noun">N</A></TD>-<TD><I>-</I></TD>-</TR>-<TR>-<TD><CODE>mkN015</CODE></TD>-<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#N" TITLE="N - common noun">N</A></TD>-<TD><I>-</I></TD>-</TR>-<TR>-<TD><CODE>mkN015a</CODE></TD>-<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#N" TITLE="N - common noun">N</A></TD>-<TD><I>-</I></TD>-</TR>-<TR>-<TD><CODE>mkN016</CODE></TD>-<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#N" TITLE="N - common noun">N</A></TD>-<TD><I>-</I></TD>-</TR>-<TR>-<TD><CODE>mkN016a</CODE></TD>-<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#N" TITLE="N - common noun">N</A></TD>-<TD><I>-</I></TD>-</TR>-<TR>-<TD><CODE>mkN017</CODE></TD>-<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#N" TITLE="N - common noun">N</A></TD>-<TD><I>-</I></TD>-</TR>-<TR>-<TD><CODE>mkN018</CODE></TD>-<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#N" TITLE="N - common noun">N</A></TD>-<TD><I>-</I></TD>-</TR>-<TR>-<TD><CODE>mkN018a</CODE></TD>-<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#N" TITLE="N - common noun">N</A></TD>-<TD><I>-</I></TD>-</TR>-<TR>-<TD><CODE>mkN019</CODE></TD>-<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#N" TITLE="N - common noun">N</A></TD>-<TD><I>-</I></TD>-</TR>-<TR>-<TD><CODE>mkN019a</CODE></TD>-<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#N" TITLE="N - common noun">N</A></TD>-<TD><I>-</I></TD>-</TR>-<TR>-<TD><CODE>mkN020</CODE></TD>-<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#N" TITLE="N - common noun">N</A></TD>-<TD><I>-</I></TD>-</TR>-<TR>-<TD><CODE>mkN021</CODE></TD>-<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#N" TITLE="N - common noun">N</A></TD>-<TD><I>-</I></TD>-</TR>-<TR>-<TD><CODE>mkN022</CODE></TD>-<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#N" TITLE="N - common noun">N</A></TD>-<TD><I>-</I></TD>-</TR>-<TR>-<TD><CODE>mkN023</CODE></TD>-<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#N" TITLE="N - common noun">N</A></TD>-<TD><I>-</I></TD>-</TR>-<TR>-<TD><CODE>mkN024a</CODE></TD>-<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#N" TITLE="N - common noun">N</A></TD>-<TD><I>-</I></TD>-</TR>-<TR>-<TD><CODE>mkN024</CODE></TD>-<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#N" TITLE="N - common noun">N</A></TD>-<TD><I>-</I></TD>-</TR>-<TR>-<TD><CODE>mkN025</CODE></TD>-<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#N" TITLE="N - common noun">N</A></TD>-<TD><I>-</I></TD>-</TR>-<TR>-<TD><CODE>mkN026</CODE></TD>-<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#N" TITLE="N - common noun">N</A></TD>-<TD><I>-</I></TD>-</TR>-<TR>-<TD><CODE>mkN027</CODE></TD>-<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#N" TITLE="N - common noun">N</A></TD>-<TD><I>-</I></TD>-</TR>-<TR>-<TD><CODE>mkN028</CODE></TD>-<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#N" TITLE="N - common noun">N</A></TD>-<TD><I>-</I></TD>-</TR>-<TR>-<TD><CODE>mkN028a</CODE></TD>-<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#N" TITLE="N - common noun">N</A></TD>-<TD><I>-</I></TD>-</TR>-<TR>-<TD><CODE>mkN029</CODE></TD>-<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#N" TITLE="N - common noun">N</A></TD>-<TD><I>-</I></TD>-</TR>-<TR>-<TD><CODE>mkN030</CODE></TD>-<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#N" TITLE="N - common noun">N</A></TD>-<TD><I>-</I></TD>-</TR>-<TR>-<TD><CODE>mkN031</CODE></TD>-<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#N" TITLE="N - common noun">N</A></TD>-<TD><I>-</I></TD>-</TR>-<TR>-<TD><CODE>mkN031a</CODE></TD>-<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#N" TITLE="N - common noun">N</A></TD>-<TD><I>-</I></TD>-</TR>-<TR>-<TD><CODE>mkN032</CODE></TD>-<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#N" TITLE="N - common noun">N</A></TD>-<TD><I>-</I></TD>-</TR>-<TR>-<TD><CODE>mkN032a</CODE></TD>-<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#N" TITLE="N - common noun">N</A></TD>-<TD><I>-</I></TD>-</TR>-<TR>-<TD><CODE>mkN033</CODE></TD>-<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#N" TITLE="N - common noun">N</A></TD>-<TD><I>-</I></TD>-</TR>-<TR>-<TD><CODE>mkN034</CODE></TD>-<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#N" TITLE="N - common noun">N</A></TD>-<TD><I>-</I></TD>-</TR>-<TR>-<TD><CODE>mkN035</CODE></TD>-<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#N" TITLE="N - common noun">N</A></TD>-<TD><I>-</I></TD>-</TR>-<TR>-<TD><CODE>mkN035a</CODE></TD>-<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#N" TITLE="N - common noun">N</A></TD>-<TD><I>-</I></TD>-</TR>-<TR>-<TD><CODE>mkN036</CODE></TD>-<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#N" TITLE="N - common noun">N</A></TD>-<TD><I>-</I></TD>-</TR>-<TR>-<TD><CODE>mkN037</CODE></TD>-<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#N" TITLE="N - common noun">N</A></TD>-<TD><I>-</I></TD>-</TR>-<TR>-<TD><CODE>mkN038</CODE></TD>-<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#N" TITLE="N - common noun">N</A></TD>-<TD><I>-</I></TD>-</TR>-<TR>-<TD><CODE>mkN039</CODE></TD>-<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#N" TITLE="N - common noun">N</A></TD>-<TD><I>-</I></TD>-</TR>-<TR>-<TD><CODE>mkN040</CODE></TD>-<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#N" TITLE="N - common noun">N</A></TD>-<TD><I>-</I></TD>-</TR>-<TR>-<TD><CODE>mkN040a</CODE></TD>-<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#N" TITLE="N - common noun">N</A></TD>-<TD><I>-</I></TD>-</TR>-<TR>-<TD><CODE>mkN041</CODE></TD>-<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#N" TITLE="N - common noun">N</A></TD>-<TD><I>-</I></TD>-</TR>-<TR>-<TD><CODE>mkN041a</CODE></TD>-<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#N" TITLE="N - common noun">N</A></TD>-<TD><I>-</I></TD>-</TR>-<TR>-<TD><CODE>mkN041b</CODE></TD>-<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#N" TITLE="N - common noun">N</A></TD>-<TD><I>-</I></TD>-</TR>-<TR>-<TD><CODE>mkN042</CODE></TD>-<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#N" TITLE="N - common noun">N</A></TD>-<TD><I>-</I></TD>-</TR>-<TR>-<TD><CODE>mkN043</CODE></TD>-<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#N" TITLE="N - common noun">N</A></TD>-<TD><I>-</I></TD>-</TR>-<TR>-<TD><CODE>mkN043a</CODE></TD>-<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#N" TITLE="N - common noun">N</A></TD>-<TD><I>-</I></TD>-</TR>-<TR>-<TD><CODE>mkN044</CODE></TD>-<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#N" TITLE="N - common noun">N</A></TD>-<TD><I>-</I></TD>-</TR>-<TR>-<TD><CODE>mkN045</CODE></TD>-<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#N" TITLE="N - common noun">N</A></TD>-<TD><I>-</I></TD>-</TR>-<TR>-<TD><CODE>mkN046</CODE></TD>-<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#N" TITLE="N - common noun">N</A></TD>-<TD><I>-</I></TD>-</TR>-<TR>-<TD><CODE>mkN047</CODE></TD>-<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#N" TITLE="N - common noun">N</A></TD>-<TD><I>-</I></TD>-</TR>-<TR>-<TD><CODE>mkN048</CODE></TD>-<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#N" TITLE="N - common noun">N</A></TD>-<TD><I>-</I></TD>-</TR>-<TR>-<TD><CODE>mkN049</CODE></TD>-<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#N" TITLE="N - common noun">N</A></TD>-<TD><I>-</I></TD>-</TR>-<TR>-<TD><CODE>mkN050</CODE></TD>-<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#N" TITLE="N - common noun">N</A></TD>-<TD><I>-</I></TD>-</TR>-<TR>-<TD><CODE>mkN051</CODE></TD>-<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#N" TITLE="N - common noun">N</A></TD>-<TD><I>-</I></TD>-</TR>-<TR>-<TD><CODE>mkN052</CODE></TD>-<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#N" TITLE="N - common noun">N</A></TD>-<TD><I>-</I></TD>-</TR>-<TR>-<TD><CODE>mkN052a</CODE></TD>-<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#N" TITLE="N - common noun">N</A></TD>-<TD><I>-</I></TD>-</TR>-<TR>-<TD><CODE>mkN053</CODE></TD>-<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#N" TITLE="N - common noun">N</A></TD>-<TD><I>-</I></TD>-</TR>-<TR>-<TD><CODE>mkN054</CODE></TD>-<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#N" TITLE="N - common noun">N</A></TD>-<TD><I>-</I></TD>-</TR>-<TR>-<TD><CODE>mkN055</CODE></TD>-<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#N" TITLE="N - common noun">N</A></TD>-<TD><I>-</I></TD>-</TR>-<TR>-<TD><CODE>mkN056</CODE></TD>-<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#N" TITLE="N - common noun">N</A></TD>-<TD><I>-</I></TD>-</TR>-<TR>-<TD><CODE>mkN057</CODE></TD>-<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#N" TITLE="N - common noun">N</A></TD>-<TD><I>-</I></TD>-</TR>-<TR>-<TD><CODE>mkN057a</CODE></TD>-<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#N" TITLE="N - common noun">N</A></TD>-<TD><I>-</I></TD>-</TR>-<TR>-<TD><CODE>mkN058</CODE></TD>-<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#N" TITLE="N - common noun">N</A></TD>-<TD><I>-</I></TD>-</TR>-<TR>-<TD><CODE>mkN059</CODE></TD>-<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#N" TITLE="N - common noun">N</A></TD>-<TD><I>-</I></TD>-</TR>-<TR>-<TD><CODE>mkN060</CODE></TD>-<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#N" TITLE="N - common noun">N</A></TD>-<TD><I>-</I></TD>-</TR>-<TR>-<TD><CODE>mkN061</CODE></TD>-<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#N" TITLE="N - common noun">N</A></TD>-<TD><I>-</I></TD>-</TR>-<TR>-<TD><CODE>mkN062</CODE></TD>-<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#N" TITLE="N - common noun">N</A></TD>-<TD><I>-</I></TD>-</TR>-<TR>-<TD><CODE>mkN063</CODE></TD>-<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#N" TITLE="N - common noun">N</A></TD>-<TD><I>-</I></TD>-</TR>-<TR>-<TD><CODE>mkN064</CODE></TD>-<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#N" TITLE="N - common noun">N</A></TD>-<TD><I>-</I></TD>-</TR>-<TR>-<TD><CODE>mkN065</CODE></TD>-<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#N" TITLE="N - common noun">N</A></TD>-<TD><I>-</I></TD>-</TR>-<TR>-<TD><CODE>mkN066</CODE></TD>-<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#N" TITLE="N - common noun">N</A></TD>-<TD><I>-</I></TD>-</TR>-<TR>-<TD><CODE>mkN067</CODE></TD>-<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#N" TITLE="N - common noun">N</A></TD>-<TD><I>-</I></TD>-</TR>-<TR>-<TD><CODE>mkN068</CODE></TD>-<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#N" TITLE="N - common noun">N</A></TD>-<TD><I>-</I></TD>-</TR>-<TR>-<TD><CODE>mkN069</CODE></TD>-<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#N" TITLE="N - common noun">N</A></TD>-<TD><I>-</I></TD>-</TR>-<TR>-<TD><CODE>mkN070</CODE></TD>-<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#N" TITLE="N - common noun">N</A></TD>-<TD><I>-</I></TD>-</TR>-<TR>-<TD><CODE>mkN071</CODE></TD>-<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#N" TITLE="N - common noun">N</A></TD>-<TD><I>-</I></TD>-</TR>-<TR>-<TD><CODE>mkN072</CODE></TD>-<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#N" TITLE="N - common noun">N</A></TD>-<TD><I>-</I></TD>-</TR>-<TR>-<TD><CODE>mkN073</CODE></TD>-<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#N" TITLE="N - common noun">N</A></TD>-<TD><I>-</I></TD>-</TR>-<TR>-<TD><CODE>mkN074</CODE></TD>-<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#N" TITLE="N - common noun">N</A></TD>-<TD><I>-</I></TD>-</TR>-<TR>-<TD><CODE>mkN075</CODE></TD>-<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#N" TITLE="N - common noun">N</A></TD>-<TD><I>-</I></TD>-</TR>-<TR>-<TD><CODE>mkA076</CODE></TD>-<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#A" TITLE="A - one-place adjective">A</A></TD>-<TD><I>-</I></TD>-</TR>-<TR>-<TD><CODE>mkA077</CODE></TD>-<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#A" TITLE="A - one-place adjective">A</A></TD>-<TD><I>-</I></TD>-</TR>-<TR>-<TD><CODE>mkA078</CODE></TD>-<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#A" TITLE="A - one-place adjective">A</A></TD>-<TD><I>-</I></TD>-</TR>-<TR>-<TD><CODE>mkA079</CODE></TD>-<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#A" TITLE="A - one-place adjective">A</A></TD>-<TD><I>-</I></TD>-</TR>-<TR>-<TD><CODE>mkA080</CODE></TD>-<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#A" TITLE="A - one-place adjective">A</A></TD>-<TD><I>-</I></TD>-</TR>-<TR>-<TD><CODE>mkA081</CODE></TD>-<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#A" TITLE="A - one-place adjective">A</A></TD>-<TD><I>-</I></TD>-</TR>-<TR>-<TD><CODE>mkA082</CODE></TD>-<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#A" TITLE="A - one-place adjective">A</A></TD>-<TD><I>-</I></TD>-</TR>-<TR>-<TD><CODE>mkA082a</CODE></TD>-<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#A" TITLE="A - one-place adjective">A</A></TD>-<TD><I>-</I></TD>-</TR>-<TR>-<TD><CODE>mkA083</CODE></TD>-<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#A" TITLE="A - one-place adjective">A</A></TD>-<TD><I>-</I></TD>-</TR>-<TR>-<TD><CODE>mkA084</CODE></TD>-<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#A" TITLE="A - one-place adjective">A</A></TD>-<TD><I>-</I></TD>-</TR>-<TR>-<TD><CODE>mkA084a</CODE></TD>-<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#A" TITLE="A - one-place adjective">A</A></TD>-<TD><I>-</I></TD>-</TR>-<TR>-<TD><CODE>mkA085</CODE></TD>-<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#A" TITLE="A - one-place adjective">A</A></TD>-<TD><I>-</I></TD>-</TR>-<TR>-<TD><CODE>mkA086</CODE></TD>-<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#A" TITLE="A - one-place adjective">A</A></TD>-<TD><I>-</I></TD>-</TR>-<TR>-<TD><CODE>mkA087</CODE></TD>-<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#A" TITLE="A - one-place adjective">A</A></TD>-<TD><I>-</I></TD>-</TR>-<TR>-<TD><CODE>mkA088</CODE></TD>-<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#A" TITLE="A - one-place adjective">A</A></TD>-<TD><I>-</I></TD>-</TR>-<TR>-<TD><CODE>mkA089a</CODE></TD>-<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#A" TITLE="A - one-place adjective">A</A></TD>-<TD><I>-</I></TD>-</TR>-<TR>-<TD><CODE>mkV142</CODE></TD>-<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#VTable">VTable</A></TD>-<TD><I>-</I></TD>-</TR>-<TR>-<TD><CODE>mkV143</CODE></TD>-<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#VTable">VTable</A></TD>-<TD><I>-</I></TD>-</TR>-<TR>-<TD><CODE>mkV144</CODE></TD>-<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#VTable">VTable</A></TD>-<TD><I>-</I></TD>-</TR>-<TR>-<TD><CODE>mkV145</CODE></TD>-<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#VTable">VTable</A></TD>-<TD><I>-</I></TD>-</TR>-<TR>-<TD><CODE>mkV145a</CODE></TD>-<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#VTable">VTable</A></TD>-<TD><I>-</I></TD>-</TR>-<TR>-<TD><CODE>mkV145b</CODE></TD>-<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#VTable">VTable</A></TD>-<TD><I>-</I></TD>-</TR>-<TR>-<TD><CODE>mkV146</CODE></TD>-<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#VTable">VTable</A></TD>-<TD><I>-</I></TD>-</TR>-<TR>-<TD><CODE>mkV146a</CODE></TD>-<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#VTable">VTable</A></TD>-<TD><I>-</I></TD>-</TR>-<TR>-<TD><CODE>mkV147</CODE></TD>-<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#VTable">VTable</A></TD>-<TD><I>-</I></TD>-</TR>-<TR>-<TD><CODE>mkV148</CODE></TD>-<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#VTable">VTable</A></TD>-<TD><I>-</I></TD>-</TR>-<TR>-<TD><CODE>mkV149</CODE></TD>-<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#VTable">VTable</A></TD>-<TD><I>-</I></TD>-</TR>-<TR>-<TD><CODE>mkV150</CODE></TD>-<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#VTable">VTable</A></TD>-<TD><I>-</I></TD>-</TR>-<TR>-<TD><CODE>mkV150a</CODE></TD>-<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#VTable">VTable</A></TD>-<TD><I>-</I></TD>-</TR>-<TR>-<TD><CODE>mkV151</CODE></TD>-<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#VTable">VTable</A></TD>-<TD><I>-</I></TD>-</TR>-<TR>-<TD><CODE>mkV152</CODE></TD>-<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#VTable">VTable</A></TD>-<TD><I>-</I></TD>-</TR>-<TR>-<TD><CODE>mkV152a</CODE></TD>-<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#VTable">VTable</A></TD>-<TD><I>-</I></TD>-</TR>-<TR>-<TD><CODE>mkV153</CODE></TD>-<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#VTable">VTable</A></TD>-<TD><I>-</I></TD>-</TR>-<TR>-<TD><CODE>mkV154</CODE></TD>-<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#VTable">VTable</A></TD>-<TD><I>-</I></TD>-</TR>-<TR>-<TD><CODE>mkV155</CODE></TD>-<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#VTable">VTable</A></TD>-<TD><I>-</I></TD>-</TR>-<TR>-<TD><CODE>mkV156</CODE></TD>-<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#VTable">VTable</A></TD>-<TD><I>-</I></TD>-</TR>-<TR>-<TD><CODE>mkV157</CODE></TD>-<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#VTable">VTable</A></TD>-<TD><I>-</I></TD>-</TR>-<TR>-<TD><CODE>mkV158</CODE></TD>-<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#VTable">VTable</A></TD>-<TD><I>-</I></TD>-</TR>-<TR>-<TD><CODE>mkV159</CODE></TD>-<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#VTable">VTable</A></TD>-<TD><I>-</I></TD>-</TR>-<TR>-<TD><CODE>mkV160</CODE></TD>-<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#VTable">VTable</A></TD>-<TD><I>-</I></TD>-</TR>-<TR>-<TD><CODE>mkV160a</CODE></TD>-<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#VTable">VTable</A></TD>-<TD><I>-</I></TD>-</TR>-<TR>-<TD><CODE>mkV161</CODE></TD>-<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#VTable">VTable</A></TD>-<TD><I>-</I></TD>-</TR>-<TR>-<TD><CODE>mkV161a</CODE></TD>-<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#VTable">VTable</A></TD>-<TD><I>-</I></TD>-</TR>-<TR>-<TD><CODE>mkV162</CODE></TD>-<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#VTable">VTable</A></TD>-<TD><I>-</I></TD>-</TR>-<TR>-<TD><CODE>mkV163</CODE></TD>-<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#VTable">VTable</A></TD>-<TD><I>-</I></TD>-</TR>-<TR>-<TD><CODE>mkV164</CODE></TD>-<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#VTable">VTable</A></TD>-<TD><I>-</I></TD>-</TR>-<TR>-<TD><CODE>mkV165</CODE></TD>-<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#VTable">VTable</A></TD>-<TD><I>-</I></TD>-</TR>-<TR>-<TD><CODE>mkV166</CODE></TD>-<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#VTable">VTable</A></TD>-<TD><I>-</I></TD>-</TR>-<TR>-<TD><CODE>mkV167</CODE></TD>-<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#VTable">VTable</A></TD>-<TD><I>-</I></TD>-</TR>-<TR>-<TD><CODE>mkV168</CODE></TD>-<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#VTable">VTable</A></TD>-<TD><I>-</I></TD>-</TR>-<TR>-<TD><CODE>mkV169</CODE></TD>-<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#VTable">VTable</A></TD>-<TD><I>-</I></TD>-</TR>-<TR>-<TD><CODE>mkV170</CODE></TD>-<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#VTable">VTable</A></TD>-<TD><I>-</I></TD>-</TR>-<TR>-<TD><CODE>mkV171</CODE></TD>-<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#VTable">VTable</A></TD>-<TD><I>-</I></TD>-</TR>-<TR>-<TD><CODE>mkV172</CODE></TD>-<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#VTable">VTable</A></TD>-<TD><I>-</I></TD>-</TR>-<TR>-<TD><CODE>mkV173</CODE></TD>-<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#VTable">VTable</A></TD>-<TD><I>-</I></TD>-</TR>-<TR>-<TD><CODE>mkV174</CODE></TD>-<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#VTable">VTable</A></TD>-<TD><I>-</I></TD>-</TR>-<TR>-<TD><CODE>mkV175</CODE></TD>-<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#VTable">VTable</A></TD>-<TD><I>-</I></TD>-</TR>-<TR>-<TD><CODE>mkV176</CODE></TD>-<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#VTable">VTable</A></TD>-<TD><I>-</I></TD>-</TR>-<TR>-<TD><CODE>mkV177</CODE></TD>-<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#VTable">VTable</A></TD>-<TD><I>-</I></TD>-</TR>-<TR>-<TD><CODE>mkV178</CODE></TD>-<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#VTable">VTable</A></TD>-<TD><I>-</I></TD>-</TR>-<TR>-<TD><CODE>mkV179</CODE></TD>-<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#VTable">VTable</A></TD>-<TD><I>-</I></TD>-</TR>-<TR>-<TD><CODE>mkV180</CODE></TD>-<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#VTable">VTable</A></TD>-<TD><I>-</I></TD>-</TR>-<TR>-<TD><CODE>mkV181</CODE></TD>-<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#VTable">VTable</A></TD>-<TD><I>-</I></TD>-</TR>-<TR>-<TD><CODE>mkV182</CODE></TD>-<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#VTable">VTable</A></TD>-<TD><I>-</I></TD>-</TR>-<TR>-<TD><CODE>mkV183</CODE></TD>-<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#VTable">VTable</A></TD>-<TD><I>-</I></TD>-</TR>-<TR>-<TD><CODE>mkV184</CODE></TD>-<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#VTable">VTable</A></TD>-<TD><I>-</I></TD>-</TR>-<TR>-<TD><CODE>mkV185</CODE></TD>-<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#VTable">VTable</A></TD>-<TD><I>-</I></TD>-</TR>-<TR>-<TD><CODE>mkV186</CODE></TD>-<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#VTable">VTable</A></TD>-<TD><I>-</I></TD>-</TR>-<TR>-<TD><CODE>mkV187</CODE></TD>-<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#VTable">VTable</A></TD>-<TD><I>-</I></TD>-</TR>-<TR>-<TD><CODE>mkV188</CODE></TD>-<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#VTable">VTable</A></TD>-<TD><I>-</I></TD>-</TR>-<TR>-<TD><CODE>adjAdv</CODE></TD>-<TD><A HREF="#A" TITLE="A - one-place adjective">A</A> <CODE>-></CODE> <CODE>Str</CODE> <CODE>-></CODE> <A HREF="#A" TITLE="A - one-place adjective">A</A> <CODE>=</CODE></TD>-<TD><I>-</I></TD>-</TR>-</TABLE>--<A NAME="toc86"></A>-<H2>Paradigms for Catalan</H2>--<P>-<a name="RParadigms"></a>-</P>-<P>-source <A HREF="http://www.grammaticalframework.org/lib/src/catalan/ParadigmsCat.gf"><CODE>../src/catalan/ParadigmsCat.gf</CODE></A>-</P>--<TABLE BORDER="1" CELLPADDING="4">-<TR>-<TH>Function</TH>-<TH>Type</TH>-<TH COLSPAN="2">Explanation</TH>-</TR>-<TR>-<TD><CODE>Gender</CODE></TD>-<TD><A HREF="#Type">Type</A></TD>-<TD><I>-</I></TD>-</TR>-<TR>-<TD><CODE>masculine</CODE></TD>-<TD><A HREF="#Gender">Gender</A></TD>-<TD><I>-</I></TD>-</TR>-<TR>-<TD><CODE>feminine</CODE></TD>-<TD><A HREF="#Gender">Gender</A></TD>-<TD><I>-</I></TD>-</TR>-<TR>-<TD><CODE>Number</CODE></TD>-<TD><A HREF="#Type">Type</A></TD>-<TD><I>-</I></TD>-</TR>-<TR>-<TD><CODE>singular</CODE></TD>-<TD><A HREF="#Number">Number</A></TD>-<TD><I>-</I></TD>-</TR>-<TR>-<TD><CODE>plural</CODE></TD>-<TD><A HREF="#Number">Number</A></TD>-<TD><I>-</I></TD>-</TR>-<TR>-<TD><CODE>accusative</CODE></TD>-<TD><A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A></TD>-<TD><I>direct object</I></TD>-</TR>-<TR>-<TD><CODE>genitive</CODE></TD>-<TD><A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A></TD>-<TD><I>preposition "de"</I></TD>-</TR>-<TR>-<TD><CODE>dative</CODE></TD>-<TD><A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A></TD>-<TD><I>preposition "a"</I></TD>-</TR>-<TR>-<TD><CODE>mkPrep</CODE></TD>-<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A></TD>-<TD><I>other preposition</I></TD>-</TR>-<TR>-<TD><CODE>mkN</CODE></TD>-<TD><CODE>(llum</CODE> <CODE>:</CODE> <CODE>Str)</CODE> <CODE>-></CODE> <A HREF="#N" TITLE="N - common noun">N</A></TD>-<TD><I>regular, with heuristics for plural and gender</I></TD>-</TR>-<TR>-<TD><CODE>mkN</CODE></TD>-<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#Gender">Gender</A> <CODE>-></CODE> <A HREF="#N" TITLE="N - common noun">N</A></TD>-<TD><I>force gender</I></TD>-</TR>-<TR>-<TD><CODE>mkN</CODE></TD>-<TD><CODE>(disc,discos</CODE> <CODE>:</CODE> <CODE>Str)</CODE> <CODE>-></CODE> <A HREF="#Gender">Gender</A> <CODE>-></CODE> <A HREF="#N" TITLE="N - common noun">N</A></TD>-<TD><I>worst case</I></TD>-</TR>-<TR>-<TD><CODE>compN</CODE></TD>-<TD><A HREF="#N" TITLE="N - common noun">N</A> <CODE>-></CODE> <CODE>Str</CODE> <CODE>-></CODE> <A HREF="#N" TITLE="N - common noun">N</A></TD>-<TD><I>compound, e.g. "número" + "de telèfon"</I></TD>-</TR>-<TR>-<TD><CODE>mkN2</CODE></TD>-<TD><A HREF="#N" TITLE="N - common noun">N</A> <CODE>-></CODE> <A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A> <CODE>-></CODE> <A HREF="#N2" TITLE="N2 - relational noun">N2</A></TD>-<TD><I>e.g. filla + genitive</I></TD>-</TR>-<TR>-<TD><CODE>deN2</CODE></TD>-<TD><A HREF="#N" TITLE="N - common noun">N</A> <CODE>-></CODE> <A HREF="#N2" TITLE="N2 - relational noun">N2</A></TD>-<TD><I>relation with genitive</I></TD>-</TR>-<TR>-<TD><CODE>aN2</CODE></TD>-<TD><A HREF="#N" TITLE="N - common noun">N</A> <CODE>-></CODE> <A HREF="#N2" TITLE="N2 - relational noun">N2</A></TD>-<TD><I>relation with dative</I></TD>-</TR>-<TR>-<TD><CODE>mkN3</CODE></TD>-<TD><A HREF="#N" TITLE="N - common noun">N</A> <CODE>-></CODE> <A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A> <CODE>-></CODE> <A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A> <CODE>-></CODE> <A HREF="#N3" TITLE="N3 - three-place relational noun">N3</A></TD>-<TD><I>e.g. connexió + genitive + dative</I></TD>-</TR>-<TR>-<TD><CODE>mkPN</CODE></TD>-<TD><CODE>(Anna</CODE> <CODE>:</CODE> <CODE>Str)</CODE> <CODE>-></CODE> <A HREF="#PN" TITLE="PN - proper name">PN</A></TD>-<TD><I>feminine for "-a", otherwise masculine</I></TD>-</TR>-<TR>-<TD><CODE>mkPN</CODE></TD>-<TD><CODE>(Pilar</CODE> <CODE>:</CODE> <CODE>Str)</CODE> <CODE>-></CODE> <A HREF="#Gender">Gender</A> <CODE>-></CODE> <A HREF="#PN" TITLE="PN - proper name">PN</A></TD>-<TD><I>force gender</I></TD>-</TR>-<TR>-<TD><CODE>mkA</CODE></TD>-<TD><CODE>(sol</CODE> <CODE>:</CODE> <CODE>Str)</CODE> <CODE>-></CODE> <A HREF="#A" TITLE="A - one-place adjective">A</A></TD>-<TD><I>regular</I></TD>-</TR>-<TR>-<TD><CODE>mkA</CODE></TD>-<TD><CODE>(fort,forta,forts,fortes,fortament</CODE> <CODE>:</CODE> <CODE>Str)</CODE> <CODE>-></CODE> <A HREF="#A" TITLE="A - one-place adjective">A</A></TD>-<TD><I>worst case</I></TD>-</TR>-<TR>-<TD><CODE>mkA</CODE></TD>-<TD><CODE>(bo</CODE> <CODE>:</CODE> <CODE>A)</CODE> <CODE>-></CODE> <CODE>(millor</CODE> <CODE>:</CODE> <CODE>A)</CODE> <CODE>-></CODE> <A HREF="#A" TITLE="A - one-place adjective">A</A></TD>-<TD><I>special comparison (default with "mas")</I></TD>-</TR>-<TR>-<TD><CODE>prefixA</CODE></TD>-<TD><A HREF="#A" TITLE="A - one-place adjective">A</A> <CODE>-></CODE> <A HREF="#A" TITLE="A - one-place adjective">A</A></TD>-<TD><I>adjective before noun (default: after)</I></TD>-</TR>-<TR>-<TD><CODE>mkA2</CODE></TD>-<TD><A HREF="#A" TITLE="A - one-place adjective">A</A> <CODE>-></CODE> <A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A> <CODE>-></CODE> <A HREF="#A2" TITLE="A2 - two-place adjective">A2</A></TD>-<TD><I>e.g. "casat" + dative</I></TD>-</TR>-<TR>-<TD><CODE>mkAdv</CODE></TD>-<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#Adv" TITLE="Adv - verb-phrase-modifying adverb">Adv</A></TD>-<TD><I>-</I></TD>-</TR>-<TR>-<TD><CODE>mkAdV</CODE></TD>-<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#AdV" TITLE="Adv - verb-phrase-modifying adverb">AdV</A></TD>-<TD><I>-</I></TD>-</TR>-<TR>-<TD><CODE>mkAdA</CODE></TD>-<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#AdA" TITLE="AdA - adjective-modifying adverb">AdA</A></TD>-<TD><I>-</I></TD>-</TR>-<TR>-<TD><CODE>mkV</CODE></TD>-<TD><CODE>(cantar</CODE> <CODE>:</CODE> <CODE>Str)</CODE> <CODE>-></CODE> <A HREF="#V" TITLE="V - one-place verb">V</A></TD>-<TD><I>regular in models I, IIa, IIb</I></TD>-</TR>-<TR>-<TD><CODE>mkV</CODE></TD>-<TD><A HREF="#Verbum">Verbum</A> <CODE>-></CODE> <A HREF="#V" TITLE="V - one-place verb">V</A></TD>-<TD><I>use verb constructed in BeschCat</I></TD>-</TR>-<TR>-<TD><CODE>reflV</CODE></TD>-<TD><A HREF="#V" TITLE="V - one-place verb">V</A> <CODE>-></CODE> <A HREF="#V" TITLE="V - one-place verb">V</A></TD>-<TD><I>reflexive verb</I></TD>-</TR>-<TR>-<TD><CODE>mkV2</CODE></TD>-<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#V2" TITLE="V2 - two-place verb">V2</A></TD>-<TD><I>regular verb, direct object</I></TD>-</TR>-<TR>-<TD><CODE>mkV2</CODE></TD>-<TD><A HREF="#V" TITLE="V - one-place verb">V</A> <CODE>-></CODE> <A HREF="#V2" TITLE="V2 - two-place verb">V2</A></TD>-<TD><I>any verb, direct object</I></TD>-</TR>-<TR>-<TD><CODE>mkV2</CODE></TD>-<TD><A HREF="#V" TITLE="V - one-place verb">V</A> <CODE>-></CODE> <A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A> <CODE>-></CODE> <A HREF="#V2" TITLE="V2 - two-place verb">V2</A></TD>-<TD><I>preposition for complement</I></TD>-</TR>-<TR>-<TD><CODE>mkV3</CODE></TD>-<TD><A HREF="#V" TITLE="V - one-place verb">V</A> <CODE>-></CODE> <A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A> <CODE>-></CODE> <A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A> <CODE>-></CODE> <A HREF="#V3" TITLE="V3 - three-place verb">V3</A></TD>-<TD><I>parlar, a, de</I></TD>-</TR>-<TR>-<TD><CODE>dirV3</CODE></TD>-<TD><A HREF="#V" TITLE="V - one-place verb">V</A> <CODE>-></CODE> <A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A> <CODE>-></CODE> <A HREF="#V3" TITLE="V3 - three-place verb">V3</A></TD>-<TD><I>donar,(accusative),a</I></TD>-</TR>-<TR>-<TD><CODE>dirdirV3</CODE></TD>-<TD><A HREF="#V" TITLE="V - one-place verb">V</A> <CODE>-></CODE> <A HREF="#V3" TITLE="V3 - three-place verb">V3</A></TD>-<TD><I>donar,(dative),(accusative)</I></TD>-</TR>-<TR>-<TD><CODE>mkVS</CODE></TD>-<TD><A HREF="#V" TITLE="V - one-place verb">V</A> <CODE>-></CODE> <A HREF="#VS" TITLE="VS - sentence-complement verb">VS</A></TD>-<TD><I>-</I></TD>-</TR>-<TR>-<TD><CODE>mkV2S</CODE></TD>-<TD><A HREF="#V" TITLE="V - one-place verb">V</A> <CODE>-></CODE> <A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A> <CODE>-></CODE> <A HREF="#V2S" TITLE="V2S - verb with NP and S complement">V2S</A></TD>-<TD><I>-</I></TD>-</TR>-<TR>-<TD><CODE>mkVV</CODE></TD>-<TD><A HREF="#V" TITLE="V - one-place verb">V</A> <CODE>-></CODE> <A HREF="#VV" TITLE="VV - verb-phrase-complement verb">VV</A></TD>-<TD><I>plain infinitive: "vull parlar"</I></TD>-</TR>-<TR>-<TD><CODE>deVV</CODE></TD>-<TD><A HREF="#V" TITLE="V - one-place verb">V</A> <CODE>-></CODE> <A HREF="#VV" TITLE="VV - verb-phrase-complement verb">VV</A></TD>-<TD><I>"acabar de parlar"</I></TD>-</TR>-<TR>-<TD><CODE>aVV</CODE></TD>-<TD><A HREF="#V" TITLE="V - one-place verb">V</A> <CODE>-></CODE> <A HREF="#VV" TITLE="VV - verb-phrase-complement verb">VV</A></TD>-<TD><I>"aprendre a parlar"</I></TD>-</TR>-<TR>-<TD><CODE>mkV2V</CODE></TD>-<TD><A HREF="#V" TITLE="V - one-place verb">V</A> <CODE>-></CODE> <A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A> <CODE>-></CODE> <A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A> <CODE>-></CODE> <A HREF="#V2V" TITLE="V2V - verb with NP and V complement">V2V</A></TD>-<TD><I>-</I></TD>-</TR>-<TR>-<TD><CODE>mkVA</CODE></TD>-<TD><A HREF="#V" TITLE="V - one-place verb">V</A> <CODE>-></CODE> <A HREF="#VA" TITLE="VA - adjective-complement verb">VA</A></TD>-<TD><I>-</I></TD>-</TR>-<TR>-<TD><CODE>mkV2A</CODE></TD>-<TD><A HREF="#V" TITLE="V - one-place verb">V</A> <CODE>-></CODE> <A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A> <CODE>-></CODE> <A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A> <CODE>-></CODE> <A HREF="#V2A" TITLE="V2A - verb with NP and AP complement">V2A</A></TD>-<TD><I>-</I></TD>-</TR>-<TR>-<TD><CODE>mkVQ</CODE></TD>-<TD><A HREF="#V" TITLE="V - one-place verb">V</A> <CODE>-></CODE> <A HREF="#VQ" TITLE="VQ - question-complement verb">VQ</A></TD>-<TD><I>-</I></TD>-</TR>-<TR>-<TD><CODE>mkV2Q</CODE></TD>-<TD><A HREF="#V" TITLE="V - one-place verb">V</A> <CODE>-></CODE> <A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A> <CODE>-></CODE> <A HREF="#V2Q" TITLE="V2Q - verb with NP and Q complement">V2Q</A></TD>-<TD><I>-</I></TD>-</TR>-</TABLE>--<A NAME="toc87"></A>-<H2>Paradigms for Danish</H2>--<P>-<a name="RParadigms"></a>-</P>-<P>-source <A HREF="http://www.grammaticalframework.org/lib/src/danish/ParadigmsDan.gf"><CODE>../src/danish/ParadigmsDan.gf</CODE></A>-</P>--<TABLE BORDER="1" CELLPADDING="4">-<TR>-<TH>Function</TH>-<TH>Type</TH>-<TH COLSPAN="2">Explanation</TH>-</TR>-<TR>-<TD><CODE>Gender</CODE></TD>-<TD><A HREF="#Type">Type</A></TD>-<TD><I>-</I></TD>-</TR>-<TR>-<TD><CODE>utrum</CODE></TD>-<TD><A HREF="#Gender">Gender</A></TD>-<TD><I>"en" gender</I></TD>-</TR>-<TR>-<TD><CODE>neutrum</CODE></TD>-<TD><A HREF="#Gender">Gender</A></TD>-<TD><I>"et" gender</I></TD>-</TR>-<TR>-<TD><CODE>mkPrep</CODE></TD>-<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A></TD>-<TD><I>e.g. "til"</I></TD>-</TR>-<TR>-<TD><CODE>noPrep</CODE></TD>-<TD><A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A></TD>-<TD><I>empty string</I></TD>-</TR>-<TR>-<TD><CODE>mkN</CODE></TD>-<TD><CODE>(bil</CODE> <CODE>:</CODE> <CODE>Str)</CODE> <CODE>-></CODE> <A HREF="#N" TITLE="N - common noun">N</A></TD>-<TD><I>regular noun: "en" gender with plural "-er" or "-r"</I></TD>-</TR>-<TR>-<TD><CODE>mkN</CODE></TD>-<TD><CODE>(bil,bilen</CODE> <CODE>:</CODE> <CODE>Str)</CODE> <CODE>-></CODE> <A HREF="#N" TITLE="N - common noun">N</A></TD>-<TD><I>better prediction from both singular and plural</I></TD>-</TR>-<TR>-<TD><CODE>mkN</CODE></TD>-<TD><CODE>(dreng,drengen,drenge,drengene</CODE> <CODE>:</CODE> <CODE>Str)</CODE> <CODE>-></CODE> <A HREF="#N" TITLE="N - common noun">N</A></TD>-<TD><I>worst case</I></TD>-</TR>-<TR>-<TD><CODE>mkN2</CODE></TD>-<TD><A HREF="#N" TITLE="N - common noun">N</A> <CODE>-></CODE> <A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A> <CODE>-></CODE> <A HREF="#N2" TITLE="N2 - relational noun">N2</A></TD>-<TD><I>e.g. datter + til</I></TD>-</TR>-<TR>-<TD><CODE>mkN3</CODE></TD>-<TD><A HREF="#N" TITLE="N - common noun">N</A> <CODE>-></CODE> <A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A> <CODE>-></CODE> <A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A> <CODE>-></CODE> <A HREF="#N3" TITLE="N3 - three-place relational noun">N3</A></TD>-<TD><I>e.g. forbindelse + fra + til</I></TD>-</TR>-<TR>-<TD><CODE>mkPN</CODE></TD>-<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#PN" TITLE="PN - proper name">PN</A></TD>-<TD><I>utrum gender</I></TD>-</TR>-<TR>-<TD><CODE>mkPN</CODE></TD>-<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#Gender">Gender</A> <CODE>-></CODE> <A HREF="#PN" TITLE="PN - proper name">PN</A></TD>-<TD><I>other gender</I></TD>-</TR>-<TR>-<TD><CODE>mkA</CODE></TD>-<TD><CODE>(fin</CODE> <CODE>:</CODE> <CODE>Str)</CODE> <CODE>-></CODE> <A HREF="#A" TITLE="A - one-place adjective">A</A></TD>-<TD><I>regular adjective</I></TD>-</TR>-<TR>-<TD><CODE>mkA</CODE></TD>-<TD><CODE>(fin,fint</CODE> <CODE>:</CODE> <CODE>Str)</CODE> <CODE>-></CODE> <A HREF="#A" TITLE="A - one-place adjective">A</A></TD>-<TD><I>deviant neuter</I></TD>-</TR>-<TR>-<TD><CODE>mkA</CODE></TD>-<TD><CODE>(galen,galet,galne</CODE> <CODE>:</CODE> <CODE>Str)</CODE> <CODE>-></CODE> <A HREF="#A" TITLE="A - one-place adjective">A</A></TD>-<TD><I>also deviant plural</I></TD>-</TR>-<TR>-<TD><CODE>mkA</CODE></TD>-<TD><CODE>(stor,stort,store,storre,storst</CODE> <CODE>:</CODE> <CODE>Str)</CODE> <CODE>-></CODE> <A HREF="#A" TITLE="A - one-place adjective">A</A></TD>-<TD><I>worst case</I></TD>-</TR>-<TR>-<TD><CODE>mkA</CODE></TD>-<TD><A HREF="#A" TITLE="A - one-place adjective">A</A> <CODE>-></CODE> <A HREF="#A" TITLE="A - one-place adjective">A</A></TD>-<TD><I>force comparison with mer/mest</I></TD>-</TR>-<TR>-<TD><CODE>mkA2</CODE></TD>-<TD><A HREF="#A" TITLE="A - one-place adjective">A</A> <CODE>-></CODE> <A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A> <CODE>-></CODE> <A HREF="#A2" TITLE="A2 - two-place adjective">A2</A></TD>-<TD><I>e.g. gift + med</I></TD>-</TR>-<TR>-<TD><CODE>mkAdv</CODE></TD>-<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#Adv" TITLE="Adv - verb-phrase-modifying adverb">Adv</A></TD>-<TD><I>after verb, e.g. "idag"</I></TD>-</TR>-<TR>-<TD><CODE>mkAdV</CODE></TD>-<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#AdV" TITLE="Adv - verb-phrase-modifying adverb">AdV</A></TD>-<TD><I>close to verb, e.g. "altid"</I></TD>-</TR>-<TR>-<TD><CODE>mkAdA</CODE></TD>-<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#AdA" TITLE="AdA - adjective-modifying adverb">AdA</A></TD>-<TD><I>modify adjective, e.g. "meget"</I></TD>-</TR>-<TR>-<TD><CODE>mkV</CODE></TD>-<TD><CODE>(snakke</CODE> <CODE>:</CODE> <CODE>Str)</CODE> <CODE>-></CODE> <A HREF="#V" TITLE="V - one-place verb">V</A></TD>-<TD><I>regular verb</I></TD>-</TR>-<TR>-<TD><CODE>mkV</CODE></TD>-<TD><CODE>(leve,levde</CODE> <CODE>:</CODE> <CODE>Str)</CODE> <CODE>-></CODE> <A HREF="#V" TITLE="V - one-place verb">V</A></TD>-<TD><I>also give past tense</I></TD>-</TR>-<TR>-<TD><CODE>mkV</CODE></TD>-<TD><CODE>(drikke,</CODE> <CODE>drakk,</CODE> <CODE>drukket</CODE> <CODE>:</CODE> <CODE>Str)</CODE> <CODE>-></CODE> <A HREF="#V" TITLE="V - one-place verb">V</A></TD>-<TD><I>theme of irregular verb</I></TD>-</TR>-<TR>-<TD><CODE>mkV</CODE></TD>-<TD><CODE>(spise,spiser,spises,spiste,spist,spis</CODE> <CODE>:</CODE> <CODE>Str)</CODE> <CODE>-></CODE> <A HREF="#V" TITLE="V - one-place verb">V</A></TD>-<TD><I>worst case</I></TD>-</TR>-<TR>-<TD><CODE>mkV</CODE></TD>-<TD><A HREF="#V" TITLE="V - one-place verb">V</A> <CODE>-></CODE> <CODE>Str</CODE> <CODE>-></CODE> <A HREF="#V" TITLE="V - one-place verb">V</A></TD>-<TD><I>particle verb, e.g. lukke + op</I></TD>-</TR>-<TR>-<TD><CODE>vaereV</CODE></TD>-<TD><A HREF="#V" TITLE="V - one-place verb">V</A> <CODE>-></CODE> <A HREF="#V" TITLE="V - one-place verb">V</A></TD>-<TD><I>force auxiliary "være"</I></TD>-</TR>-<TR>-<TD><CODE>depV</CODE></TD>-<TD><A HREF="#V" TITLE="V - one-place verb">V</A> <CODE>-></CODE> <A HREF="#V" TITLE="V - one-place verb">V</A></TD>-<TD><I>deponent, e.g. "undres"</I></TD>-</TR>-<TR>-<TD><CODE>reflV</CODE></TD>-<TD><A HREF="#V" TITLE="V - one-place verb">V</A> <CODE>-></CODE> <A HREF="#V" TITLE="V - one-place verb">V</A></TD>-<TD><I>reflexive, e.g. "forestille sig"</I></TD>-</TR>-<TR>-<TD><CODE>mkV2</CODE></TD>-<TD><A HREF="#V" TITLE="V - one-place verb">V</A> <CODE>-></CODE> <A HREF="#V2" TITLE="V2 - two-place verb">V2</A></TD>-<TD><I>direct object</I></TD>-</TR>-<TR>-<TD><CODE>mkV2</CODE></TD>-<TD><A HREF="#V" TITLE="V - one-place verb">V</A> <CODE>-></CODE> <A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A> <CODE>-></CODE> <A HREF="#V2" TITLE="V2 - two-place verb">V2</A></TD>-<TD><I>prepositional object</I></TD>-</TR>-<TR>-<TD><CODE>mkV3</CODE></TD>-<TD><A HREF="#V" TITLE="V - one-place verb">V</A> <CODE>-></CODE> <A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A> <CODE>-></CODE> <A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A> <CODE>-></CODE> <A HREF="#V3" TITLE="V3 - three-place verb">V3</A></TD>-<TD><I>snakke, med, om</I></TD>-</TR>-<TR>-<TD><CODE>dirV3</CODE></TD>-<TD><A HREF="#V" TITLE="V - one-place verb">V</A> <CODE>-></CODE> <A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A> <CODE>-></CODE> <A HREF="#V3" TITLE="V3 - three-place verb">V3</A></TD>-<TD><I>give,_,til</I></TD>-</TR>-<TR>-<TD><CODE>dirdirV3</CODE></TD>-<TD><A HREF="#V" TITLE="V - one-place verb">V</A> <CODE>-></CODE> <A HREF="#V3" TITLE="V3 - three-place verb">V3</A></TD>-<TD><I>give,_,_</I></TD>-</TR>-<TR>-<TD><CODE>mkVS</CODE></TD>-<TD><A HREF="#V" TITLE="V - one-place verb">V</A> <CODE>-></CODE> <A HREF="#VS" TITLE="VS - sentence-complement verb">VS</A></TD>-<TD><I>-</I></TD>-</TR>-<TR>-<TD><CODE>mkV2S</CODE></TD>-<TD><A HREF="#V" TITLE="V - one-place verb">V</A> <CODE>-></CODE> <A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A> <CODE>-></CODE> <A HREF="#V2S" TITLE="V2S - verb with NP and S complement">V2S</A></TD>-<TD><I>-</I></TD>-</TR>-<TR>-<TD><CODE>mkVV</CODE></TD>-<TD><A HREF="#V" TITLE="V - one-place verb">V</A> <CODE>-></CODE> <A HREF="#VV" TITLE="VV - verb-phrase-complement verb">VV</A></TD>-<TD><I>-</I></TD>-</TR>-<TR>-<TD><CODE>mkV2V</CODE></TD>-<TD><A HREF="#V" TITLE="V - one-place verb">V</A> <CODE>-></CODE> <A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A> <CODE>-></CODE> <A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A> <CODE>-></CODE> <A HREF="#V2V" TITLE="V2V - verb with NP and V complement">V2V</A></TD>-<TD><I>-</I></TD>-</TR>-<TR>-<TD><CODE>mkVA</CODE></TD>-<TD><A HREF="#V" TITLE="V - one-place verb">V</A> <CODE>-></CODE> <A HREF="#VA" TITLE="VA - adjective-complement verb">VA</A></TD>-<TD><I>-</I></TD>-</TR>-<TR>-<TD><CODE>mkV2A</CODE></TD>-<TD><A HREF="#V" TITLE="V - one-place verb">V</A> <CODE>-></CODE> <A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A> <CODE>-></CODE> <A HREF="#V2A" TITLE="V2A - verb with NP and AP complement">V2A</A></TD>-<TD><I>-</I></TD>-</TR>-<TR>-<TD><CODE>mkVQ</CODE></TD>-<TD><A HREF="#V" TITLE="V - one-place verb">V</A> <CODE>-></CODE> <A HREF="#VQ" TITLE="VQ - question-complement verb">VQ</A></TD>-<TD><I>-</I></TD>-</TR>-<TR>-<TD><CODE>mkV2Q</CODE></TD>-<TD><A HREF="#V" TITLE="V - one-place verb">V</A> <CODE>-></CODE> <A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A> <CODE>-></CODE> <A HREF="#V2Q" TITLE="V2Q - verb with NP and Q complement">V2Q</A></TD>-<TD><I>-</I></TD>-</TR>-</TABLE>--<A NAME="toc88"></A>-<H2>Paradigms for Dutch</H2>--<P>-<a name="RParadigms"></a>-</P>-<P>-source <A HREF="http://www.grammaticalframework.org/lib/src/dutch/ParadigmsDut.gf"><CODE>../src/dutch/ParadigmsDut.gf</CODE></A>-</P>--<TABLE BORDER="1" CELLPADDING="4">-<TR>-<TH>Function</TH>-<TH>Type</TH>-<TH COLSPAN="2">Explanation</TH>-</TR>-<TR>-<TD><CODE>de</CODE></TD>-<TD><A HREF="#Gender">Gender</A></TD>-<TD><I>non-neutrum</I></TD>-</TR>-<TR>-<TD><CODE>het</CODE></TD>-<TD><A HREF="#Gender">Gender</A></TD>-<TD><I>neutrum</I></TD>-</TR>-<TR>-<TD><CODE>mkN</CODE></TD>-<TD><CODE>(muis</CODE> <CODE>:</CODE> <CODE>Str)</CODE> <CODE>-></CODE> <A HREF="#N" TITLE="N - common noun">N</A></TD>-<TD><I>de muis-muisen, with some predictable exceptions</I></TD>-</TR>-<TR>-<TD><CODE>mkN</CODE></TD>-<TD><CODE>(bit</CODE> <CODE>:</CODE> <CODE>Str)</CODE> <CODE>-></CODE> <A HREF="#Gender">Gender</A> <CODE>-></CODE> <A HREF="#N" TITLE="N - common noun">N</A></TD>-<TD><I>if gender is not predictable</I></TD>-</TR>-<TR>-<TD><CODE>mkN</CODE></TD>-<TD><CODE>(gat,gaten</CODE> <CODE>:</CODE> <CODE>Str)</CODE> <CODE>-></CODE> <A HREF="#Gender">Gender</A> <CODE>-></CODE> <A HREF="#N" TITLE="N - common noun">N</A></TD>-<TD><I>worst-case for nouns</I></TD>-</TR>-<TR>-<TD><CODE>mkN2</CODE></TD>-<TD><A HREF="#N" TITLE="N - common noun">N</A> <CODE>-></CODE> <A HREF="#N2" TITLE="N2 - relational noun">N2</A></TD>-<TD><I>relational noun with preposition van</I></TD>-</TR>-<TR>-<TD><CODE>mkN2</CODE></TD>-<TD><A HREF="#N" TITLE="N - common noun">N</A> <CODE>-></CODE> <A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A> <CODE>-></CODE> <A HREF="#N2" TITLE="N2 - relational noun">N2</A></TD>-<TD><I>other preposition than van</I></TD>-</TR>-<TR>-<TD><CODE>mkN3</CODE></TD>-<TD><A HREF="#N" TITLE="N - common noun">N</A> <CODE>-></CODE> <A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A> <CODE>-></CODE> <A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A> <CODE>-></CODE> <A HREF="#N3" TITLE="N3 - three-place relational noun">N3</A></TD>-<TD><I>e.g. afstand + van + naar</I></TD>-</TR>-<TR>-<TD><CODE>mkPN</CODE></TD>-<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#PN" TITLE="PN - proper name">PN</A></TD>-<TD><I>proper name</I></TD>-</TR>-<TR>-<TD><CODE>mkA</CODE></TD>-<TD><CODE>(vers</CODE> <CODE>:</CODE> <CODE>Str)</CODE> <CODE>-></CODE> <A HREF="#A" TITLE="A - one-place adjective">A</A></TD>-<TD><I>regular adjective</I></TD>-</TR>-<TR>-<TD><CODE>mkA</CODE></TD>-<TD><CODE>(goed,goede,goeds,beter,best</CODE> <CODE>:</CODE> <CODE>Str)</CODE> <CODE>-></CODE> <A HREF="#A" TITLE="A - one-place adjective">A</A></TD>-<TD><I>irregular adjective</I></TD>-</TR>-<TR>-<TD><CODE>invarA</CODE></TD>-<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#A" TITLE="A - one-place adjective">A</A></TD>-<TD><I>adjective with just one form</I></TD>-</TR>-<TR>-<TD><CODE>mkA2</CODE></TD>-<TD><A HREF="#A" TITLE="A - one-place adjective">A</A> <CODE>-></CODE> <A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A> <CODE>-></CODE> <A HREF="#A2" TITLE="A2 - two-place adjective">A2</A></TD>-<TD><I>e.g. getrouwd + met</I></TD>-</TR>-<TR>-<TD><CODE>mkAdv</CODE></TD>-<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#Adv" TITLE="Adv - verb-phrase-modifying adverb">Adv</A></TD>-<TD><I>-</I></TD>-</TR>-<TR>-<TD><CODE>mkPrep</CODE></TD>-<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A></TD>-<TD><I>-</I></TD>-</TR>-<TR>-<TD><CODE>van_Prep</CODE></TD>-<TD><A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A></TD>-<TD><I>-</I></TD>-</TR>-<TR>-<TD><CODE>te_Prep</CODE></TD>-<TD><A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A></TD>-<TD><I>-</I></TD>-</TR>-<TR>-<TD><CODE>mkV</CODE></TD>-<TD><CODE>(aaien</CODE> <CODE>:</CODE> <CODE>Str)</CODE> <CODE>-></CODE> <A HREF="#V" TITLE="V - one-place verb">V</A></TD>-<TD><I>regular verb</I></TD>-</TR>-<TR>-<TD><CODE>mkV</CODE></TD>-<TD><CODE>(breken,brak,gebroken</CODE> <CODE>:</CODE> <CODE>Str)</CODE> <CODE>-></CODE> <A HREF="#V" TITLE="V - one-place verb">V</A></TD>-<TD><I>theme of irregular verb</I></TD>-</TR>-<TR>-<TD><CODE>mkV</CODE></TD>-<TD><CODE>(breken,brak,braken,gebroken</CODE> <CODE>:</CODE> <CODE>Str)</CODE> <CODE>-></CODE> <A HREF="#V" TITLE="V - one-place verb">V</A></TD>-<TD><I>also past plural irregular</I></TD>-</TR>-<TR>-<TD><CODE>mkV</CODE></TD>-<TD><CODE>(aai,aait,aaien,aaide,aaide,aaiden,geaaid</CODE> <CODE>:</CODE> <CODE>Str)</CODE> <CODE>-></CODE> <A HREF="#V" TITLE="V - one-place verb">V</A></TD>-<TD><I>worst-case verb</I></TD>-</TR>-<TR>-<TD><CODE>mkV</CODE></TD>-<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#V" TITLE="V - one-place verb">V</A> <CODE>-></CODE> <A HREF="#V" TITLE="V - one-place verb">V</A></TD>-<TD><I>add movable suffix, e.g. af + stappen</I></TD>-</TR>-<TR>-<TD><CODE>zijnV</CODE></TD>-<TD><A HREF="#V" TITLE="V - one-place verb">V</A> <CODE>-></CODE> <A HREF="#V" TITLE="V - one-place verb">V</A></TD>-<TD><I>force zijn as auxiliary (default hebben)</I></TD>-</TR>-<TR>-<TD><CODE>reflV</CODE></TD>-<TD><A HREF="#V" TITLE="V - one-place verb">V</A> <CODE>-></CODE> <A HREF="#V" TITLE="V - one-place verb">V</A></TD>-<TD><I>reflexive verb e.g. zich afvragen</I></TD>-</TR>-<TR>-<TD><CODE>mkV3</CODE></TD>-<TD><A HREF="#V" TITLE="V - one-place verb">V</A> <CODE>-></CODE> <A HREF="#V3" TITLE="V3 - three-place verb">V3</A></TD>-<TD><I>geven,(accusative),(dative)</I></TD>-</TR>-<TR>-<TD><CODE>mkV3</CODE></TD>-<TD><A HREF="#V" TITLE="V - one-place verb">V</A> <CODE>-></CODE> <A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A> <CODE>-></CODE> <A HREF="#V3" TITLE="V3 - three-place verb">V3</A></TD>-<TD><I>sturen,(accusative),naar</I></TD>-</TR>-<TR>-<TD><CODE>mkV3</CODE></TD>-<TD><A HREF="#V" TITLE="V - one-place verb">V</A> <CODE>-></CODE> <A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A> <CODE>-></CODE> <A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A> <CODE>-></CODE> <A HREF="#V3" TITLE="V3 - three-place verb">V3</A></TD>-<TD><I>praten, met, over</I></TD>-</TR>-<TR>-<TD><CODE>mkVS</CODE></TD>-<TD><A HREF="#V" TITLE="V - one-place verb">V</A> <CODE>-></CODE> <A HREF="#VS" TITLE="VS - sentence-complement verb">VS</A></TD>-<TD><I>-</I></TD>-</TR>-<TR>-<TD><CODE>mkV2S</CODE></TD>-<TD><A HREF="#V" TITLE="V - one-place verb">V</A> <CODE>-></CODE> <A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A> <CODE>-></CODE> <A HREF="#V2S" TITLE="V2S - verb with NP and S complement">V2S</A></TD>-<TD><I>-</I></TD>-</TR>-<TR>-<TD><CODE>mkVV</CODE></TD>-<TD><A HREF="#V" TITLE="V - one-place verb">V</A> <CODE>-></CODE> <A HREF="#VV" TITLE="VV - verb-phrase-complement verb">VV</A></TD>-<TD><I>-</I></TD>-</TR>-<TR>-<TD><CODE>mkV2V</CODE></TD>-<TD><A HREF="#V" TITLE="V - one-place verb">V</A> <CODE>-></CODE> <A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A> <CODE>-></CODE> <A HREF="#V2V" TITLE="V2V - verb with NP and V complement">V2V</A></TD>-<TD><I>-</I></TD>-</TR>-<TR>-<TD><CODE>mkVA</CODE></TD>-<TD><A HREF="#V" TITLE="V - one-place verb">V</A> <CODE>-></CODE> <A HREF="#VA" TITLE="VA - adjective-complement verb">VA</A></TD>-<TD><I>-</I></TD>-</TR>-<TR>-<TD><CODE>mkV2A</CODE></TD>-<TD><A HREF="#V" TITLE="V - one-place verb">V</A> <CODE>-></CODE> <A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A> <CODE>-></CODE> <A HREF="#V2A" TITLE="V2A - verb with NP and AP complement">V2A</A></TD>-<TD><I>-</I></TD>-</TR>-<TR>-<TD><CODE>mkVQ</CODE></TD>-<TD><A HREF="#V" TITLE="V - one-place verb">V</A> <CODE>-></CODE> <A HREF="#VQ" TITLE="VQ - question-complement verb">VQ</A></TD>-<TD><I>-</I></TD>-</TR>-<TR>-<TD><CODE>mkV2Q</CODE></TD>-<TD><A HREF="#V" TITLE="V - one-place verb">V</A> <CODE>-></CODE> <A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A> <CODE>-></CODE> <A HREF="#V2Q" TITLE="V2Q - verb with NP and Q complement">V2Q</A></TD>-<TD><I>-</I></TD>-</TR>-</TABLE>--<A NAME="toc89"></A>-<H2>Paradigms for English</H2>--<P>-<a name="RParadigms"></a>-</P>-<P>-source <A HREF="http://www.grammaticalframework.org/lib/src/english/ParadigmsEng.gf"><CODE>../src/english/ParadigmsEng.gf</CODE></A>-</P>--<TABLE BORDER="1" CELLPADDING="4">-<TR>-<TH>Function</TH>-<TH>Type</TH>-<TH COLSPAN="2">Explanation</TH>-</TR>-<TR>-<TD><CODE>Gender</CODE></TD>-<TD><A HREF="#Type">Type</A></TD>-<TD><I>-</I></TD>-</TR>-<TR>-<TD><CODE>human</CODE></TD>-<TD><A HREF="#Gender">Gender</A></TD>-<TD><I>-</I></TD>-</TR>-<TR>-<TD><CODE>nonhuman</CODE></TD>-<TD><A HREF="#Gender">Gender</A></TD>-<TD><I>-</I></TD>-</TR>-<TR>-<TD><CODE>Number</CODE></TD>-<TD><A HREF="#Type">Type</A></TD>-<TD><I>-</I></TD>-</TR>-<TR>-<TD><CODE>singular</CODE></TD>-<TD><A HREF="#Number">Number</A></TD>-<TD><I>-</I></TD>-</TR>-<TR>-<TD><CODE>plural</CODE></TD>-<TD><A HREF="#Number">Number</A></TD>-<TD><I>-</I></TD>-</TR>-<TR>-<TD><CODE>npNumber</CODE></TD>-<TD><A HREF="#NP" TITLE="NP - noun phrase (subject or object)">NP</A> <CODE>-></CODE> <A HREF="#Number">Number</A></TD>-<TD><I>exctract the number of a noun phrase</I></TD>-</TR>-<TR>-<TD><CODE>mkN</CODE></TD>-<TD><CODE>(flash</CODE> <CODE>:</CODE> <CODE>Str)</CODE> <CODE>-></CODE> <A HREF="#N" TITLE="N - common noun">N</A></TD>-<TD><I>plural s, incl. flash-flashes, fly-flies</I></TD>-</TR>-<TR>-<TD><CODE>mkN</CODE></TD>-<TD><CODE>(man,men</CODE> <CODE>:</CODE> <CODE>Str)</CODE> <CODE>-></CODE> <A HREF="#N" TITLE="N - common noun">N</A></TD>-<TD><I>irregular plural</I></TD>-</TR>-<TR>-<TD><CODE>mkN</CODE></TD>-<TD><CODE>(man,men,man's,men's</CODE> <CODE>:</CODE> <CODE>Str)</CODE> <CODE>-></CODE> <A HREF="#N" TITLE="N - common noun">N</A></TD>-<TD><I>irregular genitives</I></TD>-</TR>-<TR>-<TD><CODE>mkN</CODE></TD>-<TD><A HREF="#Gender">Gender</A> <CODE>-></CODE> <A HREF="#N" TITLE="N - common noun">N</A> <CODE>-></CODE> <A HREF="#N" TITLE="N - common noun">N</A></TD>-<TD><I>default nonhuman</I></TD>-</TR>-<TR>-<TD><CODE>mkN</CODE></TD>-<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#N" TITLE="N - common noun">N</A> <CODE>-></CODE> <A HREF="#N" TITLE="N - common noun">N</A></TD>-<TD><I>e.g. baby + boom</I></TD>-</TR>-<TR>-<TD><CODE>mkN2</CODE></TD>-<TD><A HREF="#N" TITLE="N - common noun">N</A> <CODE>-></CODE> <A HREF="#N2" TITLE="N2 - relational noun">N2</A></TD>-<TD><I>e.g. wife of (default prep. to)</I></TD>-</TR>-<TR>-<TD><CODE>mkN2</CODE></TD>-<TD><A HREF="#N" TITLE="N - common noun">N</A> <CODE>-></CODE> <A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A> <CODE>-></CODE> <A HREF="#N2" TITLE="N2 - relational noun">N2</A></TD>-<TD><I>e.g. access to</I></TD>-</TR>-<TR>-<TD><CODE>mkN3</CODE></TD>-<TD><A HREF="#N" TITLE="N - common noun">N</A> <CODE>-></CODE> <A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A> <CODE>-></CODE> <A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A> <CODE>-></CODE> <A HREF="#N3" TITLE="N3 - three-place relational noun">N3</A></TD>-<TD><I>e.g. connection from x to y</I></TD>-</TR>-<TR>-<TD><CODE>mkPN</CODE></TD>-<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#PN" TITLE="PN - proper name">PN</A></TD>-<TD><I>-</I></TD>-</TR>-<TR>-<TD><CODE>mkA</CODE></TD>-<TD><CODE>(happy</CODE> <CODE>:</CODE> <CODE>Str)</CODE> <CODE>-></CODE> <A HREF="#A" TITLE="A - one-place adjective">A</A></TD>-<TD><I>regular adj, incl. happy-happier, rude-ruder</I></TD>-</TR>-<TR>-<TD><CODE>mkA</CODE></TD>-<TD><CODE>(fat,fatter</CODE> <CODE>:</CODE> <CODE>Str)</CODE> <CODE>-></CODE> <A HREF="#A" TITLE="A - one-place adjective">A</A></TD>-<TD><I>irreg. comparative</I></TD>-</TR>-<TR>-<TD><CODE>mkA</CODE></TD>-<TD><CODE>(good,better,best,well</CODE> <CODE>:</CODE> <CODE>Str)</CODE> <CODE>-></CODE> <A HREF="#A" TITLE="A - one-place adjective">A</A></TD>-<TD><I>completely irreg.</I></TD>-</TR>-<TR>-<TD><CODE>compoundA</CODE></TD>-<TD><A HREF="#A" TITLE="A - one-place adjective">A</A> <CODE>-></CODE> <A HREF="#A" TITLE="A - one-place adjective">A</A></TD>-<TD><I>force comparison with more/most</I></TD>-</TR>-<TR>-<TD><CODE>simpleA</CODE></TD>-<TD><A HREF="#A" TITLE="A - one-place adjective">A</A> <CODE>-></CODE> <A HREF="#A" TITLE="A - one-place adjective">A</A></TD>-<TD><I>force comparison with -er,-est</I></TD>-</TR>-<TR>-<TD><CODE>irregAdv</CODE></TD>-<TD><A HREF="#A" TITLE="A - one-place adjective">A</A> <CODE>-></CODE> <CODE>Str</CODE> <CODE>-></CODE> <A HREF="#A" TITLE="A - one-place adjective">A</A></TD>-<TD><I>adverb irreg, e.g. "fast"</I></TD>-</TR>-<TR>-<TD><CODE>mkA2</CODE></TD>-<TD><A HREF="#A" TITLE="A - one-place adjective">A</A> <CODE>-></CODE> <A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A> <CODE>-></CODE> <A HREF="#A2" TITLE="A2 - two-place adjective">A2</A></TD>-<TD><I>absent from</I></TD>-</TR>-<TR>-<TD><CODE>mkAdv</CODE></TD>-<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#Adv" TITLE="Adv - verb-phrase-modifying adverb">Adv</A></TD>-<TD><I>e.g. today</I></TD>-</TR>-<TR>-<TD><CODE>mkAdV</CODE></TD>-<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#AdV" TITLE="Adv - verb-phrase-modifying adverb">AdV</A></TD>-<TD><I>e.g. always</I></TD>-</TR>-<TR>-<TD><CODE>mkAdA</CODE></TD>-<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#AdA" TITLE="AdA - adjective-modifying adverb">AdA</A></TD>-<TD><I>e.g. quite</I></TD>-</TR>-<TR>-<TD><CODE>mkAdN</CODE></TD>-<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#AdN" TITLE="AdN - numeral-modifying adverb">AdN</A></TD>-<TD><I>e.g. approximately</I></TD>-</TR>-<TR>-<TD><CODE>mkPrep</CODE></TD>-<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A></TD>-<TD><I>e.g. "in front of"</I></TD>-</TR>-<TR>-<TD><CODE>noPrep</CODE></TD>-<TD><A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A></TD>-<TD><I>no preposition</I></TD>-</TR>-<TR>-<TD><CODE>mkV</CODE></TD>-<TD><CODE>(cry</CODE> <CODE>:</CODE> <CODE>Str)</CODE> <CODE>-></CODE> <A HREF="#V" TITLE="V - one-place verb">V</A></TD>-<TD><I>regular, incl. cry-cries, kiss-kisses etc</I></TD>-</TR>-<TR>-<TD><CODE>mkV</CODE></TD>-<TD><CODE>(stop,</CODE> <CODE>stopped</CODE> <CODE>:</CODE> <CODE>Str)</CODE> <CODE>-></CODE> <A HREF="#V" TITLE="V - one-place verb">V</A></TD>-<TD><I>reg. with consonant duplication</I></TD>-</TR>-<TR>-<TD><CODE>mkV</CODE></TD>-<TD><CODE>(drink,</CODE> <CODE>drank,</CODE> <CODE>drunk</CODE> <CODE>:</CODE> <CODE>Str)</CODE> <CODE>-></CODE> <A HREF="#V" TITLE="V - one-place verb">V</A></TD>-<TD><I>ordinary irregular</I></TD>-</TR>-<TR>-<TD><CODE>mkV</CODE></TD>-<TD><CODE>(go,</CODE> <CODE>goes,</CODE> <CODE>went,</CODE> <CODE>gone,</CODE> <CODE>going</CODE> <CODE>:</CODE> <CODE>Str)</CODE> <CODE>-></CODE> <A HREF="#V" TITLE="V - one-place verb">V</A></TD>-<TD><I>totally irregular</I></TD>-</TR>-<TR>-<TD><CODE>mkV</CODE></TD>-<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#V" TITLE="V - one-place verb">V</A> <CODE>-></CODE> <A HREF="#V" TITLE="V - one-place verb">V</A></TD>-<TD><I>fix compound, e.g. under+take</I></TD>-</TR>-<TR>-<TD><CODE>partV</CODE></TD>-<TD><A HREF="#V" TITLE="V - one-place verb">V</A> <CODE>-></CODE> <CODE>Str</CODE> <CODE>-></CODE> <A HREF="#V" TITLE="V - one-place verb">V</A></TD>-<TD><I>with particle, e.g. switch + on</I></TD>-</TR>-<TR>-<TD><CODE>reflV</CODE></TD>-<TD><A HREF="#V" TITLE="V - one-place verb">V</A> <CODE>-></CODE> <A HREF="#V" TITLE="V - one-place verb">V</A></TD>-<TD><I>reflexive e.g. behave oneself</I></TD>-</TR>-<TR>-<TD><CODE>mkV2</CODE></TD>-<TD><A HREF="#V" TITLE="V - one-place verb">V</A> <CODE>-></CODE> <A HREF="#V2" TITLE="V2 - two-place verb">V2</A></TD>-<TD><I>transitive, e.g. hit</I></TD>-</TR>-<TR>-<TD><CODE>mkV2</CODE></TD>-<TD><A HREF="#V" TITLE="V - one-place verb">V</A> <CODE>-></CODE> <A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A> <CODE>-></CODE> <A HREF="#V2" TITLE="V2 - two-place verb">V2</A></TD>-<TD><I>with preposiiton, e.g. believe in</I></TD>-</TR>-<TR>-<TD><CODE>mkV3</CODE></TD>-<TD><A HREF="#V" TITLE="V - one-place verb">V</A> <CODE>-></CODE> <A HREF="#V3" TITLE="V3 - three-place verb">V3</A></TD>-<TD><I>ditransitive, e.g. give,_,_</I></TD>-</TR>-<TR>-<TD><CODE>mkV3</CODE></TD>-<TD><A HREF="#V" TITLE="V - one-place verb">V</A> <CODE>-></CODE> <A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A> <CODE>-></CODE> <A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A> <CODE>-></CODE> <A HREF="#V3" TITLE="V3 - three-place verb">V3</A></TD>-<TD><I>two prepositions, e.g. speak, with, about</I></TD>-</TR>-<TR>-<TD><CODE>mkVS</CODE></TD>-<TD><A HREF="#V" TITLE="V - one-place verb">V</A> <CODE>-></CODE> <A HREF="#VS" TITLE="VS - sentence-complement verb">VS</A></TD>-<TD><I>sentence-compl e.g. say (that S)</I></TD>-</TR>-<TR>-<TD><CODE>mkV2S</CODE></TD>-<TD><A HREF="#V" TITLE="V - one-place verb">V</A> <CODE>-></CODE> <A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A> <CODE>-></CODE> <A HREF="#V2S" TITLE="V2S - verb with NP and S complement">V2S</A></TD>-<TD><I>e.g. tell (NP) (that S)</I></TD>-</TR>-<TR>-<TD><CODE>mkVV</CODE></TD>-<TD><A HREF="#V" TITLE="V - one-place verb">V</A> <CODE>-></CODE> <A HREF="#VV" TITLE="VV - verb-phrase-complement verb">VV</A></TD>-<TD><I>e.g. want (to VP)</I></TD>-</TR>-<TR>-<TD><CODE>ingVV</CODE></TD>-<TD><A HREF="#V" TITLE="V - one-place verb">V</A> <CODE>-></CODE> <A HREF="#VV" TITLE="VV - verb-phrase-complement verb">VV</A></TD>-<TD><I>e.g. start (VPing)</I></TD>-</TR>-<TR>-<TD><CODE>mkV2V</CODE></TD>-<TD><A HREF="#V" TITLE="V - one-place verb">V</A> <CODE>-></CODE> <A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A> <CODE>-></CODE> <A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A> <CODE>-></CODE> <A HREF="#V2V" TITLE="V2V - verb with NP and V complement">V2V</A></TD>-<TD><I>e.g. want (noPrep NP) (to VP)</I></TD>-</TR>-<TR>-<TD><CODE>ingV2V</CODE></TD>-<TD><A HREF="#V" TITLE="V - one-place verb">V</A> <CODE>-></CODE> <A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A> <CODE>-></CODE> <A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A> <CODE>-></CODE> <A HREF="#V2V" TITLE="V2V - verb with NP and V complement">V2V</A></TD>-<TD><I>e.g. prevent (noPrep NP) (from VP-ing)</I></TD>-</TR>-<TR>-<TD><CODE>mkVA</CODE></TD>-<TD><A HREF="#V" TITLE="V - one-place verb">V</A> <CODE>-></CODE> <A HREF="#VA" TITLE="VA - adjective-complement verb">VA</A></TD>-<TD><I>e.g. become (AP)</I></TD>-</TR>-<TR>-<TD><CODE>mkV2A</CODE></TD>-<TD><A HREF="#V" TITLE="V - one-place verb">V</A> <CODE>-></CODE> <A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A> <CODE>-></CODE> <A HREF="#V2A" TITLE="V2A - verb with NP and AP complement">V2A</A></TD>-<TD><I>e.g. paint (NP) (AP)</I></TD>-</TR>-<TR>-<TD><CODE>mkVQ</CODE></TD>-<TD><A HREF="#V" TITLE="V - one-place verb">V</A> <CODE>-></CODE> <A HREF="#VQ" TITLE="VQ - question-complement verb">VQ</A></TD>-<TD><I>e.g. wonder (QS)</I></TD>-</TR>-<TR>-<TD><CODE>mkV2Q</CODE></TD>-<TD><A HREF="#V" TITLE="V - one-place verb">V</A> <CODE>-></CODE> <A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A> <CODE>-></CODE> <A HREF="#V2Q" TITLE="V2Q - verb with NP and Q complement">V2Q</A></TD>-<TD><I>e.g. ask (NP) (QS)</I></TD>-</TR>-</TABLE>--<A NAME="toc90"></A>-<H2>Paradigms for Finnish</H2>--<P>-<a name="RParadigms"></a>-</P>-<P>-source <A HREF="http://www.grammaticalframework.org/lib/src/finnish/ParadigmsFin.gf"><CODE>../src/finnish/ParadigmsFin.gf</CODE></A>-</P>--<TABLE BORDER="1" CELLPADDING="4">-<TR>-<TH>Function</TH>-<TH>Type</TH>-<TH COLSPAN="2">Explanation</TH>-</TR>-<TR>-<TD><CODE>Number</CODE></TD>-<TD><A HREF="#Type">Type</A></TD>-<TD><I>-</I></TD>-</TR>-<TR>-<TD><CODE>singular</CODE></TD>-<TD><A HREF="#Number">Number</A></TD>-<TD><I>-</I></TD>-</TR>-<TR>-<TD><CODE>plural</CODE></TD>-<TD><A HREF="#Number">Number</A></TD>-<TD><I>-</I></TD>-</TR>-<TR>-<TD><CODE>Case</CODE></TD>-<TD><A HREF="#Type">Type</A></TD>-<TD><I>-</I></TD>-</TR>-<TR>-<TD><CODE>nominative</CODE></TD>-<TD><A HREF="#Case">Case</A></TD>-<TD><I>e.g. "talo"</I></TD>-</TR>-<TR>-<TD><CODE>genitive</CODE></TD>-<TD><A HREF="#Case">Case</A></TD>-<TD><I>e.g. "talon"</I></TD>-</TR>-<TR>-<TD><CODE>partitive</CODE></TD>-<TD><A HREF="#Case">Case</A></TD>-<TD><I>e.g. "taloa"</I></TD>-</TR>-<TR>-<TD><CODE>essive</CODE></TD>-<TD><A HREF="#Case">Case</A></TD>-<TD><I>e.g. "talona"</I></TD>-</TR>-<TR>-<TD><CODE>translative</CODE></TD>-<TD><A HREF="#Case">Case</A></TD>-<TD><I>e.g. "taloksi"</I></TD>-</TR>-<TR>-<TD><CODE>inessive</CODE></TD>-<TD><A HREF="#Case">Case</A></TD>-<TD><I>e.g. "talossa"</I></TD>-</TR>-<TR>-<TD><CODE>elative</CODE></TD>-<TD><A HREF="#Case">Case</A></TD>-<TD><I>e.g. "talosta"</I></TD>-</TR>-<TR>-<TD><CODE>illative</CODE></TD>-<TD><A HREF="#Case">Case</A></TD>-<TD><I>e.g. "taloon"</I></TD>-</TR>-<TR>-<TD><CODE>adessive</CODE></TD>-<TD><A HREF="#Case">Case</A></TD>-<TD><I>e.g. "talolla"</I></TD>-</TR>-<TR>-<TD><CODE>ablative</CODE></TD>-<TD><A HREF="#Case">Case</A></TD>-<TD><I>e.g. "talolta"</I></TD>-</TR>-<TR>-<TD><CODE>allative</CODE></TD>-<TD><A HREF="#Case">Case</A></TD>-<TD><I>e.g. "talolle"</I></TD>-</TR>-<TR>-<TD><CODE>infFirst</CODE></TD>-<TD><A HREF="#InfForm">InfForm</A></TD>-<TD><I>e.g. "tehdä"</I></TD>-</TR>-<TR>-<TD><CODE>infElat</CODE></TD>-<TD><A HREF="#InfForm">InfForm</A></TD>-<TD><I>e.g. "tekemästä"</I></TD>-</TR>-<TR>-<TD><CODE>infIllat</CODE></TD>-<TD><A HREF="#InfForm">InfForm</A></TD>-<TD><I>e.g. "tekemään"</I></TD>-</TR>-<TR>-<TD><CODE>prePrep</CODE></TD>-<TD><A HREF="#Case">Case</A> <CODE>-></CODE> <CODE>Str</CODE> <CODE>-></CODE> <A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A></TD>-<TD><I>preposition, e.g. partitive "ilman"</I></TD>-</TR>-<TR>-<TD><CODE>postPrep</CODE></TD>-<TD><A HREF="#Case">Case</A> <CODE>-></CODE> <CODE>Str</CODE> <CODE>-></CODE> <A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A></TD>-<TD><I>postposition, e.g. genitive "takana"</I></TD>-</TR>-<TR>-<TD><CODE>postGenPrep</CODE></TD>-<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A></TD>-<TD><I>genitive postposition, e.g. "takana"</I></TD>-</TR>-<TR>-<TD><CODE>casePrep</CODE></TD>-<TD><A HREF="#Case">Case</A> <CODE>-></CODE> <A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A></TD>-<TD><I>just case, e.g. adessive</I></TD>-</TR>-<TR>-<TD><CODE>NK</CODE></TD>-<TD><A HREF="#Type">Type</A></TD>-<TD><I>Noun from DictFin (Kotus)</I></TD>-</TR>-<TR>-<TD><CODE>AK</CODE></TD>-<TD><A HREF="#Type">Type</A></TD>-<TD><I>Adjective from DictFin (Kotus)</I></TD>-</TR>-<TR>-<TD><CODE>VK</CODE></TD>-<TD><A HREF="#Type">Type</A></TD>-<TD><I>Verb from DictFin (Kotus)</I></TD>-</TR>-<TR>-<TD><CODE>AdvK</CODE></TD>-<TD><A HREF="#Type">Type</A></TD>-<TD><I>Adverb from DictFin (Kotus)</I></TD>-</TR>-<TR>-<TD><CODE>mkN</CODE></TD>-<TD><CODE>(kukko</CODE> <CODE>:</CODE> <CODE>Str)</CODE> <CODE>-></CODE> <A HREF="#N" TITLE="N - common noun">N</A></TD>-<TD><I>predictable nouns, covers 82%</I></TD>-</TR>-<TR>-<TD><CODE>mkN</CODE></TD>-<TD><CODE>(savi,savia</CODE> <CODE>:</CODE> <CODE>Str)</CODE> <CODE>-></CODE> <A HREF="#N" TITLE="N - common noun">N</A></TD>-<TD><I>different pl.part</I></TD>-</TR>-<TR>-<TD><CODE>mkN</CODE></TD>-<TD><CODE>(vesi,veden,vesiä</CODE> <CODE>:</CODE> <CODE>Str)</CODE> <CODE>-></CODE> <A HREF="#N" TITLE="N - common noun">N</A></TD>-<TD><I>also different sg.gen</I></TD>-</TR>-<TR>-<TD><CODE>mkN</CODE></TD>-<TD><CODE>(vesi,veden,vesiä,vettä</CODE> <CODE>:</CODE> <CODE>Str)</CODE> <CODE>-></CODE> <A HREF="#N" TITLE="N - common noun">N</A></TD>-<TD><I>also different sg.part</I></TD>-</TR>-<TR>-<TD><CODE>mkN</CODE></TD>-<TD><CODE>(olo,n,a,na,oon,jen,ja,ina,issa,ihin</CODE> <CODE>:</CODE> <CODE>Str)</CODE> <CODE>-></CODE> <A HREF="#N" TITLE="N - common noun">N</A></TD>-<TD><I>worst case, 10 forms</I></TD>-</TR>-<TR>-<TD><CODE>mkN</CODE></TD>-<TD><CODE>(pika</CODE> <CODE>:</CODE> <CODE>Str)</CODE> <CODE>-></CODE> <CODE>(juna</CODE> <CODE>:</CODE> <CODE>N)</CODE> <CODE>-></CODE> <A HREF="#N" TITLE="N - common noun">N</A></TD>-<TD><I>compound with invariable prefix</I></TD>-</TR>-<TR>-<TD><CODE>mkN</CODE></TD>-<TD><CODE>(oma</CODE> <CODE>:</CODE> <CODE>N)</CODE> <CODE>-></CODE> <CODE>(tunto</CODE> <CODE>:</CODE> <CODE>N)</CODE> <CODE>-></CODE> <A HREF="#N" TITLE="N - common noun">N</A></TD>-<TD><I>compound with inflecting prefix</I></TD>-</TR>-<TR>-<TD><CODE>mkN</CODE></TD>-<TD><A HREF="#NK">NK</A> <CODE>-></CODE> <A HREF="#N" TITLE="N - common noun">N</A></TD>-<TD><I>noun from DictFin (Kotus)</I></TD>-</TR>-<TR>-<TD><CODE>exceptNomN</CODE></TD>-<TD><A HREF="#N" TITLE="N - common noun">N</A> <CODE>-></CODE> <CODE>Str</CODE> <CODE>-></CODE> <A HREF="#N" TITLE="N - common noun">N</A></TD>-<TD><I>-</I></TD>-</TR>-<TR>-<TD><CODE>mkN2</CODE></TD>-<TD><A HREF="#N" TITLE="N - common noun">N</A> <CODE>-></CODE> <A HREF="#N2" TITLE="N2 - relational noun">N2</A></TD>-<TD><I>relational noun with genitive</I></TD>-</TR>-<TR>-<TD><CODE>mkN2</CODE></TD>-<TD><A HREF="#N" TITLE="N - common noun">N</A> <CODE>-></CODE> <A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A> <CODE>-></CODE> <A HREF="#N2" TITLE="N2 - relational noun">N2</A></TD>-<TD><I>relational noun another prep.</I></TD>-</TR>-<TR>-<TD><CODE>mkN3</CODE></TD>-<TD><A HREF="#N" TITLE="N - common noun">N</A> <CODE>-></CODE> <A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A> <CODE>-></CODE> <A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A> <CODE>-></CODE> <A HREF="#N3" TITLE="N3 - three-place relational noun">N3</A></TD>-<TD><I>relation with two complements</I></TD>-</TR>-<TR>-<TD><CODE>mkPN</CODE></TD>-<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#PN" TITLE="PN - proper name">PN</A></TD>-<TD><I>predictable noun made into name</I></TD>-</TR>-<TR>-<TD><CODE>mkPN</CODE></TD>-<TD><A HREF="#N" TITLE="N - common noun">N</A> <CODE>-></CODE> <A HREF="#PN" TITLE="PN - proper name">PN</A></TD>-<TD><I>any noun made into name</I></TD>-</TR>-<TR>-<TD><CODE>mkA</CODE></TD>-<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#A" TITLE="A - one-place adjective">A</A></TD>-<TD><I>regular noun made into adjective</I></TD>-</TR>-<TR>-<TD><CODE>mkA</CODE></TD>-<TD><A HREF="#N" TITLE="N - common noun">N</A> <CODE>-></CODE> <A HREF="#A" TITLE="A - one-place adjective">A</A></TD>-<TD><I>any noun made into adjective</I></TD>-</TR>-<TR>-<TD><CODE>mkA</CODE></TD>-<TD><A HREF="#N" TITLE="N - common noun">N</A> <CODE>-></CODE> <CODE>(kivempi,kivin</CODE> <CODE>:</CODE> <CODE>Str)</CODE> <CODE>-></CODE> <A HREF="#A" TITLE="A - one-place adjective">A</A></TD>-<TD><I>deviating comparison forms</I></TD>-</TR>-<TR>-<TD><CODE>mkA</CODE></TD>-<TD><CODE>(hyva,prmpi,pras</CODE> <CODE>:</CODE> <CODE>N)</CODE> <CODE>-></CODE> <CODE>(hyvin,pmmin,prhten</CODE> <CODE>:</CODE> <CODE>Str)</CODE> <CODE>-></CODE> <A HREF="#A" TITLE="A - one-place adjective">A</A></TD>-<TD><I>worst case adj</I></TD>-</TR>-<TR>-<TD><CODE>mkA</CODE></TD>-<TD><A HREF="#AK">AK</A> <CODE>-></CODE> <A HREF="#A" TITLE="A - one-place adjective">A</A></TD>-<TD><I>adjective from DictFin (Kotus)</I></TD>-</TR>-<TR>-<TD><CODE>mkA2</CODE></TD>-<TD><A HREF="#A" TITLE="A - one-place adjective">A</A> <CODE>-></CODE> <A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A> <CODE>-></CODE> <A HREF="#A2" TITLE="A2 - two-place adjective">A2</A></TD>-<TD><I>e.g. "jaollinen" casePrep adessive</I></TD>-</TR>-<TR>-<TD><CODE>mkV</CODE></TD>-<TD><CODE>(huutaa</CODE> <CODE>:</CODE> <CODE>Str)</CODE> <CODE>-></CODE> <A HREF="#V" TITLE="V - one-place verb">V</A></TD>-<TD><I>predictable verbs, covers 90%</I></TD>-</TR>-<TR>-<TD><CODE>mkV</CODE></TD>-<TD><CODE>(huutaa,huusi</CODE> <CODE>:</CODE> <CODE>Str)</CODE> <CODE>-></CODE> <A HREF="#V" TITLE="V - one-place verb">V</A></TD>-<TD><I>deviating past 3sg</I></TD>-</TR>-<TR>-<TD><CODE>mkV</CODE></TD>-<TD><CODE>(huutaa,huudan,huusi</CODE> <CODE>:</CODE> <CODE>Str)</CODE> <CODE>-></CODE> <A HREF="#V" TITLE="V - one-place verb">V</A></TD>-<TD><I>also deviating pres. 1sg</I></TD>-</TR>-<TR>-<TD><CODE>mkV</CODE></TD>-<TD><CODE>(huutaa,dan,taa,tavat,takaa,detaan,sin,si,sisi,tanut,dettu,tanee</CODE> <CODE>:</CODE> <CODE>Str)</CODE> <CODE>-></CODE> <A HREF="#V" TITLE="V - one-place verb">V</A></TD>-<TD><I>worst-case verb</I></TD>-</TR>-<TR>-<TD><CODE>mkV</CODE></TD>-<TD><A HREF="#VK">VK</A> <CODE>-></CODE> <A HREF="#V" TITLE="V - one-place verb">V</A></TD>-<TD><I>verb from DictFin (Kotus)</I></TD>-</TR>-<TR>-<TD><CODE>caseV</CODE></TD>-<TD><A HREF="#Case">Case</A> <CODE>-></CODE> <A HREF="#V" TITLE="V - one-place verb">V</A> <CODE>-></CODE> <A HREF="#V" TITLE="V - one-place verb">V</A></TD>-<TD><I>deviating subj. case, e.g. genitive "täytyä"</I></TD>-</TR>-<TR>-<TD><CODE>vOlla</CODE></TD>-<TD><A HREF="#V" TITLE="V - one-place verb">V</A></TD>-<TD><I>the verb "be"</I></TD>-</TR>-<TR>-<TD><CODE>mkV2</CODE></TD>-<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#V2" TITLE="V2 - two-place verb">V2</A></TD>-<TD><I>predictable direct transitive</I></TD>-</TR>-<TR>-<TD><CODE>mkV2</CODE></TD>-<TD><A HREF="#V" TITLE="V - one-place verb">V</A> <CODE>-></CODE> <A HREF="#V2" TITLE="V2 - two-place verb">V2</A></TD>-<TD><I>direct transitive</I></TD>-</TR>-<TR>-<TD><CODE>mkV2</CODE></TD>-<TD><A HREF="#V" TITLE="V - one-place verb">V</A> <CODE>-></CODE> <A HREF="#Case">Case</A> <CODE>-></CODE> <A HREF="#V2" TITLE="V2 - two-place verb">V2</A></TD>-<TD><I>complement just case</I></TD>-</TR>-<TR>-<TD><CODE>mkV2</CODE></TD>-<TD><A HREF="#V" TITLE="V - one-place verb">V</A> <CODE>-></CODE> <A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A> <CODE>-></CODE> <A HREF="#V2" TITLE="V2 - two-place verb">V2</A></TD>-<TD><I>complement pre/postposition</I></TD>-</TR>-<TR>-<TD><CODE>mkV3</CODE></TD>-<TD><A HREF="#V" TITLE="V - one-place verb">V</A> <CODE>-></CODE> <A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A> <CODE>-></CODE> <A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A> <CODE>-></CODE> <A HREF="#V3" TITLE="V3 - three-place verb">V3</A></TD>-<TD><I>e.g. puhua, allative, elative</I></TD>-</TR>-<TR>-<TD><CODE>dirV3</CODE></TD>-<TD><A HREF="#V" TITLE="V - one-place verb">V</A> <CODE>-></CODE> <A HREF="#Case">Case</A> <CODE>-></CODE> <A HREF="#V3" TITLE="V3 - three-place verb">V3</A></TD>-<TD><I>siirtää, (accusative), illative</I></TD>-</TR>-<TR>-<TD><CODE>dirdirV3</CODE></TD>-<TD><A HREF="#V" TITLE="V - one-place verb">V</A> <CODE>-></CODE> <A HREF="#V3" TITLE="V3 - three-place verb">V3</A></TD>-<TD><I>antaa, (accusative), (allative)</I></TD>-</TR>-<TR>-<TD><CODE>mkVS</CODE></TD>-<TD><A HREF="#V" TITLE="V - one-place verb">V</A> <CODE>-></CODE> <A HREF="#VS" TITLE="VS - sentence-complement verb">VS</A></TD>-<TD><I>-</I></TD>-</TR>-<TR>-<TD><CODE>mkV2S</CODE></TD>-<TD><A HREF="#V" TITLE="V - one-place verb">V</A> <CODE>-></CODE> <A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A> <CODE>-></CODE> <A HREF="#V2S" TITLE="V2S - verb with NP and S complement">V2S</A></TD>-<TD><I>e.g. "sanoa" allative</I></TD>-</TR>-<TR>-<TD><CODE>mkVV</CODE></TD>-<TD><A HREF="#V" TITLE="V - one-place verb">V</A> <CODE>-></CODE> <A HREF="#VV" TITLE="VV - verb-phrase-complement verb">VV</A></TD>-<TD><I>e.g. "alkaa"</I></TD>-</TR>-<TR>-<TD><CODE>mkVVf</CODE></TD>-<TD><A HREF="#V" TITLE="V - one-place verb">V</A> <CODE>-></CODE> <A HREF="#InfForm">InfForm</A> <CODE>-></CODE> <A HREF="#VV" TITLE="VV - verb-phrase-complement verb">VV</A></TD>-<TD><I>e.g. "ruveta" infIllat</I></TD>-</TR>-<TR>-<TD><CODE>mkV2V</CODE></TD>-<TD><A HREF="#V" TITLE="V - one-place verb">V</A> <CODE>-></CODE> <A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A> <CODE>-></CODE> <A HREF="#V2V" TITLE="V2V - verb with NP and V complement">V2V</A></TD>-<TD><I>e.g. "käskeä" genitive</I></TD>-</TR>-<TR>-<TD><CODE>mkV2Vf</CODE></TD>-<TD><A HREF="#V" TITLE="V - one-place verb">V</A> <CODE>-></CODE> <A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A> <CODE>-></CODE> <A HREF="#InfForm">InfForm</A> <CODE>-></CODE> <A HREF="#V2V" TITLE="V2V - verb with NP and V complement">V2V</A></TD>-<TD><I>e.g. "kieltää" partitive infElat</I></TD>-</TR>-<TR>-<TD><CODE>mkVA</CODE></TD>-<TD><A HREF="#V" TITLE="V - one-place verb">V</A> <CODE>-></CODE> <A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A> <CODE>-></CODE> <A HREF="#VA" TITLE="VA - adjective-complement verb">VA</A></TD>-<TD><I>e.g. "maistua" ablative</I></TD>-</TR>-<TR>-<TD><CODE>mkV2A</CODE></TD>-<TD><A HREF="#V" TITLE="V - one-place verb">V</A> <CODE>-></CODE> <A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A> <CODE>-></CODE> <A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A> <CODE>-></CODE> <A HREF="#V2A" TITLE="V2A - verb with NP and AP complement">V2A</A></TD>-<TD><I>e.g. "maalata" accusative translative</I></TD>-</TR>-<TR>-<TD><CODE>mkVQ</CODE></TD>-<TD><A HREF="#V" TITLE="V - one-place verb">V</A> <CODE>-></CODE> <A HREF="#VQ" TITLE="VQ - question-complement verb">VQ</A></TD>-<TD><I>-</I></TD>-</TR>-<TR>-<TD><CODE>mkV2Q</CODE></TD>-<TD><A HREF="#V" TITLE="V - one-place verb">V</A> <CODE>-></CODE> <A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A> <CODE>-></CODE> <A HREF="#V2Q" TITLE="V2Q - verb with NP and Q complement">V2Q</A></TD>-<TD><I>e.g. "kysyä" ablative</I></TD>-</TR>-</TABLE>--<A NAME="toc91"></A>-<H2>Paradigms for French</H2>--<P>-<a name="RParadigms"></a>-</P>-<P>-source <A HREF="http://www.grammaticalframework.org/lib/src/french/ParadigmsFre.gf"><CODE>../src/french/ParadigmsFre.gf</CODE></A>-</P>--<TABLE BORDER="1" CELLPADDING="4">-<TR>-<TH>Function</TH>-<TH>Type</TH>-<TH COLSPAN="2">Explanation</TH>-</TR>-<TR>-<TD><CODE>Gender</CODE></TD>-<TD><A HREF="#Type">Type</A></TD>-<TD><I>-</I></TD>-</TR>-<TR>-<TD><CODE>masculine</CODE></TD>-<TD><A HREF="#Gender">Gender</A></TD>-<TD><I>-</I></TD>-</TR>-<TR>-<TD><CODE>feminine</CODE></TD>-<TD><A HREF="#Gender">Gender</A></TD>-<TD><I>-</I></TD>-</TR>-<TR>-<TD><CODE>accusative</CODE></TD>-<TD><A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A></TD>-<TD><I>direct object case</I></TD>-</TR>-<TR>-<TD><CODE>genitive</CODE></TD>-<TD><A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A></TD>-<TD><I>genitive, constructed with "de"</I></TD>-</TR>-<TR>-<TD><CODE>dative</CODE></TD>-<TD><A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A></TD>-<TD><I>dative, usually constructed with "à"</I></TD>-</TR>-<TR>-<TD><CODE>mkPrep</CODE></TD>-<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A></TD>-<TD><I>preposition (other than "de" and "à")</I></TD>-</TR>-<TR>-<TD><CODE>mkN</CODE></TD>-<TD><CODE>(cheval</CODE> <CODE>:</CODE> <CODE>Str)</CODE> <CODE>-></CODE> <A HREF="#N" TITLE="N - common noun">N</A></TD>-<TD><I>predictable, with variations like cheval-chevaux</I></TD>-</TR>-<TR>-<TD><CODE>mkN</CODE></TD>-<TD><CODE>(oeil,yeux</CODE> <CODE>:</CODE> <CODE>Str)</CODE> <CODE>-></CODE> <A HREF="#Gender">Gender</A> <CODE>-></CODE> <A HREF="#N" TITLE="N - common noun">N</A></TD>-<TD><I>worst-case noun</I></TD>-</TR>-<TR>-<TD><CODE>mkN</CODE></TD>-<TD><A HREF="#N" TITLE="N - common noun">N</A> <CODE>-></CODE> <CODE>Str</CODE> <CODE>-></CODE> <A HREF="#N" TITLE="N - common noun">N</A></TD>-<TD><I>compound noun, e.g. numéro + de téléphone</I></TD>-</TR>-<TR>-<TD><CODE>mkN2</CODE></TD>-<TD><A HREF="#N" TITLE="N - common noun">N</A> <CODE>-></CODE> <A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A> <CODE>-></CODE> <A HREF="#N2" TITLE="N2 - relational noun">N2</A></TD>-<TD><I>e.g. fille + genitive</I></TD>-</TR>-<TR>-<TD><CODE>mkN3</CODE></TD>-<TD><A HREF="#N" TITLE="N - common noun">N</A> <CODE>-></CODE> <A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A> <CODE>-></CODE> <A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A> <CODE>-></CODE> <A HREF="#N3" TITLE="N3 - three-place relational noun">N3</A></TD>-<TD><I>e.g. connection + genitive + dative</I></TD>-</TR>-<TR>-<TD><CODE>mkPN</CODE></TD>-<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#PN" TITLE="PN - proper name">PN</A></TD>-<TD><I>feminine if ends with "e", otherwise masculine</I></TD>-</TR>-<TR>-<TD><CODE>mkPN</CODE></TD>-<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#Gender">Gender</A> <CODE>-></CODE> <A HREF="#PN" TITLE="PN - proper name">PN</A></TD>-<TD><I>gender deviant from the simple rule</I></TD>-</TR>-<TR>-<TD><CODE>mkA</CODE></TD>-<TD><CODE>(cher</CODE> <CODE>:</CODE> <CODE>Str)</CODE> <CODE>-></CODE> <A HREF="#A" TITLE="A - one-place adjective">A</A></TD>-<TD><I>predictable, e.g. cher-chère</I></TD>-</TR>-<TR>-<TD><CODE>mkA</CODE></TD>-<TD><CODE>(sec,seche</CODE> <CODE>:</CODE> <CODE>Str)</CODE> <CODE>-></CODE> <A HREF="#A" TITLE="A - one-place adjective">A</A></TD>-<TD><I>unpredictable feminine</I></TD>-</TR>-<TR>-<TD><CODE>mkA</CODE></TD>-<TD><CODE>(banal,banale,banaux</CODE> <CODE>:</CODE> <CODE>Str)</CODE> <CODE>-></CODE> <A HREF="#A" TITLE="A - one-place adjective">A</A></TD>-<TD><I>-</I></TD>-</TR>-<TR>-<TD><CODE>mkA</CODE></TD>-<TD><CODE>(banal,banale,banaux,banalement</CODE> <CODE>:</CODE> <CODE>Str)</CODE> <CODE>-></CODE> <A HREF="#A" TITLE="A - one-place adjective">A</A></TD>-<TD><I>worst-case adjective</I></TD>-</TR>-<TR>-<TD><CODE>mkA</CODE></TD>-<TD><A HREF="#A" TITLE="A - one-place adjective">A</A> <CODE>-></CODE> <A HREF="#A" TITLE="A - one-place adjective">A</A> <CODE>-></CODE> <A HREF="#A" TITLE="A - one-place adjective">A</A></TD>-<TD><I>irregular comparison, e.g. bon-meilleur</I></TD>-</TR>-<TR>-<TD><CODE>prefixA</CODE></TD>-<TD><A HREF="#A" TITLE="A - one-place adjective">A</A> <CODE>-></CODE> <A HREF="#A" TITLE="A - one-place adjective">A</A></TD>-<TD><I>adjective that comes before noun, e.g. petit</I></TD>-</TR>-<TR>-<TD><CODE>mkA2</CODE></TD>-<TD><A HREF="#A" TITLE="A - one-place adjective">A</A> <CODE>-></CODE> <A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A> <CODE>-></CODE> <A HREF="#A2" TITLE="A2 - two-place adjective">A2</A></TD>-<TD><I>e.g. supérieur + dative</I></TD>-</TR>-<TR>-<TD><CODE>mkAdv</CODE></TD>-<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#Adv" TITLE="Adv - verb-phrase-modifying adverb">Adv</A></TD>-<TD><I>ordinary adverb</I></TD>-</TR>-<TR>-<TD><CODE>mkAdV</CODE></TD>-<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#AdV" TITLE="Adv - verb-phrase-modifying adverb">AdV</A></TD>-<TD><I>sentential adverb, e.g. toujours</I></TD>-</TR>-<TR>-<TD><CODE>mkAdA</CODE></TD>-<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#AdA" TITLE="AdA - adjective-modifying adverb">AdA</A></TD>-<TD><I>modify adjective, e.g. très</I></TD>-</TR>-<TR>-<TD><CODE>mkV</CODE></TD>-<TD><CODE>(finir</CODE> <CODE>:</CODE> <CODE>Str)</CODE> <CODE>-></CODE> <A HREF="#V" TITLE="V - one-place verb">V</A></TD>-<TD><I>regular 1/2/3 conjugation</I></TD>-</TR>-<TR>-<TD><CODE>mkV</CODE></TD>-<TD><CODE>(jeter,jette,jettera</CODE> <CODE>:</CODE> <CODE>Str)</CODE> <CODE>-></CODE> <A HREF="#V" TITLE="V - one-place verb">V</A></TD>-<TD><I>1st conjugation variations</I></TD>-</TR>-<TR>-<TD><CODE>mkV</CODE></TD>-<TD><CODE>(tenir,tiens,tenons,tiennent,tint,tiendra,tenu</CODE> <CODE>:</CODE> <CODE>Str)</CODE> <CODE>-></CODE> <A HREF="#V" TITLE="V - one-place verb">V</A></TD>-<TD><I>-</I></TD>-</TR>-<TR>-<TD><CODE>mkV</CODE></TD>-<TD><CODE>(tenir,tiens,tient,tenons,tenez,tiennent,tienne,tenions,tiensI,tint,tiendra,tenu</CODE> <CODE>:</CODE> <CODE>Str)</CODE> <CODE>-></CODE> <A HREF="#V" TITLE="V - one-place verb">V</A></TD>-<TD><I>-</I></TD>-</TR>-<TR>-<TD><CODE>mkV</CODE></TD>-<TD><A HREF="#V2" TITLE="V2 - two-place verb">V2</A> <CODE>-></CODE> <A HREF="#V" TITLE="V - one-place verb">V</A></TD>-<TD><I>make 2-place to 1-place (e.g. from IrregFre)</I></TD>-</TR>-<TR>-<TD><CODE>etreV</CODE></TD>-<TD><A HREF="#V" TITLE="V - one-place verb">V</A> <CODE>-></CODE> <A HREF="#V" TITLE="V - one-place verb">V</A></TD>-<TD><I>force auxiliary to be être (default avoir)</I></TD>-</TR>-<TR>-<TD><CODE>reflV</CODE></TD>-<TD><A HREF="#V" TITLE="V - one-place verb">V</A> <CODE>-></CODE> <A HREF="#V" TITLE="V - one-place verb">V</A></TD>-<TD><I>reflexive, implies auxiliary être, e.g. se demander</I></TD>-</TR>-<TR>-<TD><CODE>mkV2</CODE></TD>-<TD><A HREF="#V" TITLE="V - one-place verb">V</A> <CODE>-></CODE> <A HREF="#V2" TITLE="V2 - two-place verb">V2</A></TD>-<TD><I>direct transitive</I></TD>-</TR>-<TR>-<TD><CODE>mkV2</CODE></TD>-<TD><A HREF="#V" TITLE="V - one-place verb">V</A> <CODE>-></CODE> <A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A> <CODE>-></CODE> <A HREF="#V2" TITLE="V2 - two-place verb">V2</A></TD>-<TD><I>e.g. se fier + genitive</I></TD>-</TR>-<TR>-<TD><CODE>mkV3</CODE></TD>-<TD><A HREF="#V" TITLE="V - one-place verb">V</A> <CODE>-></CODE> <A HREF="#V3" TITLE="V3 - three-place verb">V3</A></TD>-<TD><I>donner (+ accusative + dative)</I></TD>-</TR>-<TR>-<TD><CODE>mkV3</CODE></TD>-<TD><A HREF="#V" TITLE="V - one-place verb">V</A> <CODE>-></CODE> <A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A> <CODE>-></CODE> <A HREF="#V3" TITLE="V3 - three-place verb">V3</A></TD>-<TD><I>placer (+ accusative) + dans</I></TD>-</TR>-<TR>-<TD><CODE>mkV3</CODE></TD>-<TD><A HREF="#V" TITLE="V - one-place verb">V</A> <CODE>-></CODE> <A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A> <CODE>-></CODE> <A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A> <CODE>-></CODE> <A HREF="#V3" TITLE="V3 - three-place verb">V3</A></TD>-<TD><I>parler + dative + genitive</I></TD>-</TR>-<TR>-<TD><CODE>mkVS</CODE></TD>-<TD><A HREF="#V" TITLE="V - one-place verb">V</A> <CODE>-></CODE> <A HREF="#VS" TITLE="VS - sentence-complement verb">VS</A></TD>-<TD><I>-</I></TD>-</TR>-<TR>-<TD><CODE>mkV2S</CODE></TD>-<TD><A HREF="#V" TITLE="V - one-place verb">V</A> <CODE>-></CODE> <A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A> <CODE>-></CODE> <A HREF="#V2S" TITLE="V2S - verb with NP and S complement">V2S</A></TD>-<TD><I>-</I></TD>-</TR>-<TR>-<TD><CODE>mkVV</CODE></TD>-<TD><A HREF="#V" TITLE="V - one-place verb">V</A> <CODE>-></CODE> <A HREF="#VV" TITLE="VV - verb-phrase-complement verb">VV</A></TD>-<TD><I>plain infinitive: "je veux parler"</I></TD>-</TR>-<TR>-<TD><CODE>deVV</CODE></TD>-<TD><A HREF="#V" TITLE="V - one-place verb">V</A> <CODE>-></CODE> <A HREF="#VV" TITLE="VV - verb-phrase-complement verb">VV</A></TD>-<TD><I>"j'essaie de parler"</I></TD>-</TR>-<TR>-<TD><CODE>aVV</CODE></TD>-<TD><A HREF="#V" TITLE="V - one-place verb">V</A> <CODE>-></CODE> <A HREF="#VV" TITLE="VV - verb-phrase-complement verb">VV</A></TD>-<TD><I>"j'arrive à parler"</I></TD>-</TR>-<TR>-<TD><CODE>mkV2V</CODE></TD>-<TD><A HREF="#V" TITLE="V - one-place verb">V</A> <CODE>-></CODE> <A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A> <CODE>-></CODE> <A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A> <CODE>-></CODE> <A HREF="#V2V" TITLE="V2V - verb with NP and V complement">V2V</A></TD>-<TD><I>-</I></TD>-</TR>-<TR>-<TD><CODE>mkVA</CODE></TD>-<TD><A HREF="#V" TITLE="V - one-place verb">V</A> <CODE>-></CODE> <A HREF="#VA" TITLE="VA - adjective-complement verb">VA</A></TD>-<TD><I>-</I></TD>-</TR>-<TR>-<TD><CODE>mkV2A</CODE></TD>-<TD><A HREF="#V" TITLE="V - one-place verb">V</A> <CODE>-></CODE> <A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A> <CODE>-></CODE> <A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A> <CODE>-></CODE> <A HREF="#V2A" TITLE="V2A - verb with NP and AP complement">V2A</A></TD>-<TD><I>-</I></TD>-</TR>-<TR>-<TD><CODE>mkVQ</CODE></TD>-<TD><A HREF="#V" TITLE="V - one-place verb">V</A> <CODE>-></CODE> <A HREF="#VQ" TITLE="VQ - question-complement verb">VQ</A></TD>-<TD><I>-</I></TD>-</TR>-<TR>-<TD><CODE>mkV2Q</CODE></TD>-<TD><A HREF="#V" TITLE="V - one-place verb">V</A> <CODE>-></CODE> <A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A> <CODE>-></CODE> <A HREF="#V2Q" TITLE="V2Q - verb with NP and Q complement">V2Q</A></TD>-<TD><I>-</I></TD>-</TR>-</TABLE>--<A NAME="toc92"></A>-<H2>Paradigms for German</H2>--<P>-<a name="RParadigms"></a>-</P>-<P>-source <A HREF="http://www.grammaticalframework.org/lib/src/german/ParadigmsGer.gf"><CODE>../src/german/ParadigmsGer.gf</CODE></A>-</P>--<TABLE BORDER="1" CELLPADDING="4">-<TR>-<TH>Function</TH>-<TH>Type</TH>-<TH COLSPAN="2">Explanation</TH>-</TR>-<TR>-<TD><CODE>Gender</CODE></TD>-<TD><A HREF="#Type">Type</A></TD>-<TD><I>-</I></TD>-</TR>-<TR>-<TD><CODE>masculine</CODE></TD>-<TD><A HREF="#Gender">Gender</A></TD>-<TD><I>-</I></TD>-</TR>-<TR>-<TD><CODE>feminine</CODE></TD>-<TD><A HREF="#Gender">Gender</A></TD>-<TD><I>-</I></TD>-</TR>-<TR>-<TD><CODE>neuter</CODE></TD>-<TD><A HREF="#Gender">Gender</A></TD>-<TD><I>-</I></TD>-</TR>-<TR>-<TD><CODE>Case</CODE></TD>-<TD><A HREF="#Type">Type</A></TD>-<TD><I>-</I></TD>-</TR>-<TR>-<TD><CODE>nominative</CODE></TD>-<TD><A HREF="#Case">Case</A></TD>-<TD><I>-</I></TD>-</TR>-<TR>-<TD><CODE>accusative</CODE></TD>-<TD><A HREF="#Case">Case</A></TD>-<TD><I>-</I></TD>-</TR>-<TR>-<TD><CODE>dative</CODE></TD>-<TD><A HREF="#Case">Case</A></TD>-<TD><I>-</I></TD>-</TR>-<TR>-<TD><CODE>genitive</CODE></TD>-<TD><A HREF="#Case">Case</A></TD>-<TD><I>-</I></TD>-</TR>-<TR>-<TD><CODE>Number</CODE></TD>-<TD><A HREF="#Type">Type</A></TD>-<TD><I>-</I></TD>-</TR>-<TR>-<TD><CODE>singular</CODE></TD>-<TD><A HREF="#Number">Number</A></TD>-<TD><I>-</I></TD>-</TR>-<TR>-<TD><CODE>plural</CODE></TD>-<TD><A HREF="#Number">Number</A></TD>-<TD><I>-</I></TD>-</TR>-<TR>-<TD><CODE>mkN</CODE></TD>-<TD><CODE>(Stufe</CODE> <CODE>:</CODE> <CODE>Str)</CODE> <CODE>-></CODE> <A HREF="#N" TITLE="N - common noun">N</A></TD>-<TD><I>die Stufe-Stufen, der Tisch-Tische</I></TD>-</TR>-<TR>-<TD><CODE>mkN</CODE></TD>-<TD><CODE>(Bild,Bilder</CODE> <CODE>:</CODE> <CODE>Str)</CODE> <CODE>-></CODE> <A HREF="#Gender">Gender</A> <CODE>-></CODE> <A HREF="#N" TITLE="N - common noun">N</A></TD>-<TD><I>sg and pl nom, and gender</I></TD>-</TR>-<TR>-<TD><CODE>mkN</CODE></TD>-<TD><CODE>(x1,_,_,_,_,x6</CODE> <CODE>:</CODE> <CODE>Str)</CODE> <CODE>-></CODE> <A HREF="#Gender">Gender</A> <CODE>-></CODE> <A HREF="#N" TITLE="N - common noun">N</A></TD>-<TD><I>worst case: mann, mann, manne, mannes, männer, männern</I></TD>-</TR>-<TR>-<TD><CODE>mkN2</CODE></TD>-<TD><A HREF="#N" TITLE="N - common noun">N</A> <CODE>-></CODE> <A HREF="#N2" TITLE="N2 - relational noun">N2</A></TD>-<TD><I>noun + von</I></TD>-</TR>-<TR>-<TD><CODE>mkN2</CODE></TD>-<TD><A HREF="#N" TITLE="N - common noun">N</A> <CODE>-></CODE> <A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A> <CODE>-></CODE> <A HREF="#N2" TITLE="N2 - relational noun">N2</A></TD>-<TD><I>noun + other preposition</I></TD>-</TR>-<TR>-<TD><CODE>mkN3</CODE></TD>-<TD><A HREF="#N" TITLE="N - common noun">N</A> <CODE>-></CODE> <A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A> <CODE>-></CODE> <A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A> <CODE>-></CODE> <A HREF="#N3" TITLE="N3 - three-place relational noun">N3</A></TD>-<TD><I>noun + two prepositions</I></TD>-</TR>-<TR>-<TD><CODE>mkPN</CODE></TD>-<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#PN" TITLE="PN - proper name">PN</A></TD>-<TD><I>regular name with genitive in "s"</I></TD>-</TR>-<TR>-<TD><CODE>mkPN</CODE></TD>-<TD><CODE>(nom,gen</CODE> <CODE>:</CODE> <CODE>Str)</CODE> <CODE>-></CODE> <A HREF="#PN" TITLE="PN - proper name">PN</A></TD>-<TD><I>name with other genitive</I></TD>-</TR>-<TR>-<TD><CODE>mkPN</CODE></TD>-<TD><CODE>(nom,acc,dat,gen</CODE> <CODE>:</CODE> <CODE>Str)</CODE> <CODE>-></CODE> <A HREF="#PN" TITLE="PN - proper name">PN</A></TD>-<TD><I>name with all case forms</I></TD>-</TR>-<TR>-<TD><CODE>mkA</CODE></TD>-<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#A" TITLE="A - one-place adjective">A</A></TD>-<TD><I>regular adjective, works for most cases</I></TD>-</TR>-<TR>-<TD><CODE>mkA</CODE></TD>-<TD><CODE>(gut,besser,beste</CODE> <CODE>:</CODE> <CODE>Str)</CODE> <CODE>-></CODE> <A HREF="#A" TITLE="A - one-place adjective">A</A></TD>-<TD><I>irregular comparison</I></TD>-</TR>-<TR>-<TD><CODE>mkA</CODE></TD>-<TD><CODE>(gut,gute,besser,beste</CODE> <CODE>:</CODE> <CODE>Str)</CODE> <CODE>-></CODE> <A HREF="#A" TITLE="A - one-place adjective">A</A></TD>-<TD><I>irregular positive if ending added</I></TD>-</TR>-<TR>-<TD><CODE>invarA</CODE></TD>-<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#A" TITLE="A - one-place adjective">A</A></TD>-<TD><I>invariable, e.g. prima</I></TD>-</TR>-<TR>-<TD><CODE>mkA2</CODE></TD>-<TD><A HREF="#A" TITLE="A - one-place adjective">A</A> <CODE>-></CODE> <A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A> <CODE>-></CODE> <A HREF="#A2" TITLE="A2 - two-place adjective">A2</A></TD>-<TD><I>e.g. teilbar + durch</I></TD>-</TR>-<TR>-<TD><CODE>mkAdv</CODE></TD>-<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#Adv" TITLE="Adv - verb-phrase-modifying adverb">Adv</A></TD>-<TD><I>adverbs have just one form anyway</I></TD>-</TR>-<TR>-<TD><CODE>mkPrep</CODE></TD>-<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#Case">Case</A> <CODE>-></CODE> <A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A></TD>-<TD><I>e.g. "durch" + accusative</I></TD>-</TR>-<TR>-<TD><CODE>accPrep</CODE></TD>-<TD><A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A></TD>-<TD><I>no string, just accusative case</I></TD>-</TR>-<TR>-<TD><CODE>datPrep</CODE></TD>-<TD><A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A></TD>-<TD><I>no string, just dative case</I></TD>-</TR>-<TR>-<TD><CODE>genPrep</CODE></TD>-<TD><A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A></TD>-<TD><I>no string, just genitive case</I></TD>-</TR>-<TR>-<TD><CODE>von_Prep</CODE></TD>-<TD><A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A></TD>-<TD><I>von + dative</I></TD>-</TR>-<TR>-<TD><CODE>zu_Prep</CODE></TD>-<TD><A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A></TD>-<TD><I>zu + dative, with contractions zum, zur</I></TD>-</TR>-<TR>-<TD><CODE>anDat_Prep</CODE></TD>-<TD><A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A></TD>-<TD><I>an + dative, with contraction am</I></TD>-</TR>-<TR>-<TD><CODE>inDat_Prep</CODE></TD>-<TD><A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A></TD>-<TD><I>in + dative, with contraction ins</I></TD>-</TR>-<TR>-<TD><CODE>inAcc_Prep</CODE></TD>-<TD><A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A></TD>-<TD><I>in + accusative, with contraction im</I></TD>-</TR>-<TR>-<TD><CODE>mkV</CODE></TD>-<TD><CODE>(führen</CODE> <CODE>:</CODE> <CODE>Str)</CODE> <CODE>-></CODE> <A HREF="#V" TITLE="V - one-place verb">V</A></TD>-<TD><I>regular verb</I></TD>-</TR>-<TR>-<TD><CODE>mkV</CODE></TD>-<TD><CODE>(sehen,sieht,sah,sähe,gesehen</CODE> <CODE>:</CODE> <CODE>Str)</CODE> <CODE>-></CODE> <A HREF="#V" TITLE="V - one-place verb">V</A></TD>-<TD><I>irregular verb theme</I></TD>-</TR>-<TR>-<TD><CODE>mkV</CODE></TD>-<TD><CODE>(geben,</CODE> <CODE>gibt,</CODE> <CODE>gib,</CODE> <CODE>gab,</CODE> <CODE>gäbe,</CODE> <CODE>gegeben</CODE> <CODE>:</CODE> <CODE>Str)</CODE> <CODE>-></CODE> <A HREF="#V" TITLE="V - one-place verb">V</A></TD>-<TD><I>worst-case verb</I></TD>-</TR>-<TR>-<TD><CODE>mkV</CODE></TD>-<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#V" TITLE="V - one-place verb">V</A> <CODE>-></CODE> <A HREF="#V" TITLE="V - one-place verb">V</A></TD>-<TD><I>movable prefix, e.g. auf+fassen</I></TD>-</TR>-<TR>-<TD><CODE>no_geV</CODE></TD>-<TD><A HREF="#V" TITLE="V - one-place verb">V</A> <CODE>-></CODE> <A HREF="#V" TITLE="V - one-place verb">V</A></TD>-<TD><I>no participle "ge", e.g. "bedeuten"</I></TD>-</TR>-<TR>-<TD><CODE>fixprefixV</CODE></TD>-<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#V" TITLE="V - one-place verb">V</A> <CODE>-></CODE> <A HREF="#V" TITLE="V - one-place verb">V</A></TD>-<TD><I>add prefix such as "be"; implies no_ge</I></TD>-</TR>-<TR>-<TD><CODE>seinV</CODE></TD>-<TD><A HREF="#V" TITLE="V - one-place verb">V</A> <CODE>-></CODE> <A HREF="#V" TITLE="V - one-place verb">V</A></TD>-<TD><I>force "sein" as auxiliary</I></TD>-</TR>-<TR>-<TD><CODE>habenV</CODE></TD>-<TD><A HREF="#V" TITLE="V - one-place verb">V</A> <CODE>-></CODE> <A HREF="#V" TITLE="V - one-place verb">V</A></TD>-<TD><I>force "haben" as auxiliary</I></TD>-</TR>-<TR>-<TD><CODE>reflV</CODE></TD>-<TD><A HREF="#V" TITLE="V - one-place verb">V</A> <CODE>-></CODE> <A HREF="#Case">Case</A> <CODE>-></CODE> <A HREF="#V" TITLE="V - one-place verb">V</A></TD>-<TD><I>reflexive, with case</I></TD>-</TR>-<TR>-<TD><CODE>mkV2</CODE></TD>-<TD><A HREF="#V" TITLE="V - one-place verb">V</A> <CODE>-></CODE> <A HREF="#V2" TITLE="V2 - two-place verb">V2</A></TD>-<TD><I>direct object</I></TD>-</TR>-<TR>-<TD><CODE>mkV2</CODE></TD>-<TD><A HREF="#V" TITLE="V - one-place verb">V</A> <CODE>-></CODE> <A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A> <CODE>-></CODE> <A HREF="#V2" TITLE="V2 - two-place verb">V2</A></TD>-<TD><I>preposition for complement</I></TD>-</TR>-<TR>-<TD><CODE>mkV2</CODE></TD>-<TD><A HREF="#V" TITLE="V - one-place verb">V</A> <CODE>-></CODE> <A HREF="#Case">Case</A> <CODE>-></CODE> <A HREF="#V2" TITLE="V2 - two-place verb">V2</A></TD>-<TD><I>just case for complement</I></TD>-</TR>-<TR>-<TD><CODE>accdatV3</CODE></TD>-<TD><A HREF="#V" TITLE="V - one-place verb">V</A> <CODE>-></CODE> <A HREF="#V3" TITLE="V3 - three-place verb">V3</A></TD>-<TD><I>geben + acc + dat</I></TD>-</TR>-<TR>-<TD><CODE>dirV3</CODE></TD>-<TD><A HREF="#V" TITLE="V - one-place verb">V</A> <CODE>-></CODE> <A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A> <CODE>-></CODE> <A HREF="#V3" TITLE="V3 - three-place verb">V3</A></TD>-<TD><I>senden + acc + nach</I></TD>-</TR>-<TR>-<TD><CODE>mkV3</CODE></TD>-<TD><A HREF="#V" TITLE="V - one-place verb">V</A> <CODE>-></CODE> <A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A> <CODE>-></CODE> <A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A> <CODE>-></CODE> <A HREF="#V3" TITLE="V3 - three-place verb">V3</A></TD>-<TD><I>sprechen + mit + über</I></TD>-</TR>-<TR>-<TD><CODE>mkVS</CODE></TD>-<TD><A HREF="#V" TITLE="V - one-place verb">V</A> <CODE>-></CODE> <A HREF="#VS" TITLE="VS - sentence-complement verb">VS</A></TD>-<TD><I>-</I></TD>-</TR>-<TR>-<TD><CODE>mkV2S</CODE></TD>-<TD><A HREF="#V" TITLE="V - one-place verb">V</A> <CODE>-></CODE> <A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A> <CODE>-></CODE> <A HREF="#V2S" TITLE="V2S - verb with NP and S complement">V2S</A></TD>-<TD><I>-</I></TD>-</TR>-<TR>-<TD><CODE>mkVV</CODE></TD>-<TD><A HREF="#V" TITLE="V - one-place verb">V</A> <CODE>-></CODE> <A HREF="#VV" TITLE="VV - verb-phrase-complement verb">VV</A></TD>-<TD><I>-</I></TD>-</TR>-<TR>-<TD><CODE>mkV2V</CODE></TD>-<TD><A HREF="#V" TITLE="V - one-place verb">V</A> <CODE>-></CODE> <A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A> <CODE>-></CODE> <A HREF="#V2V" TITLE="V2V - verb with NP and V complement">V2V</A></TD>-<TD><I>-</I></TD>-</TR>-<TR>-<TD><CODE>mkVA</CODE></TD>-<TD><A HREF="#V" TITLE="V - one-place verb">V</A> <CODE>-></CODE> <A HREF="#VA" TITLE="VA - adjective-complement verb">VA</A></TD>-<TD><I>-</I></TD>-</TR>-<TR>-<TD><CODE>mkV2A</CODE></TD>-<TD><A HREF="#V" TITLE="V - one-place verb">V</A> <CODE>-></CODE> <A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A> <CODE>-></CODE> <A HREF="#V2A" TITLE="V2A - verb with NP and AP complement">V2A</A></TD>-<TD><I>-</I></TD>-</TR>-<TR>-<TD><CODE>mkVQ</CODE></TD>-<TD><A HREF="#V" TITLE="V - one-place verb">V</A> <CODE>-></CODE> <A HREF="#VQ" TITLE="VQ - question-complement verb">VQ</A></TD>-<TD><I>-</I></TD>-</TR>-<TR>-<TD><CODE>mkV2Q</CODE></TD>-<TD><A HREF="#V" TITLE="V - one-place verb">V</A> <CODE>-></CODE> <A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A> <CODE>-></CODE> <A HREF="#V2Q" TITLE="V2Q - verb with NP and Q complement">V2Q</A></TD>-<TD><I>-</I></TD>-</TR>-</TABLE>--<A NAME="toc93"></A>-<H2>Paradigms for Italian</H2>--<P>-<a name="RParadigms"></a>-</P>-<P>-source <A HREF="http://www.grammaticalframework.org/lib/src/italian/ParadigmsIta.gf"><CODE>../src/italian/ParadigmsIta.gf</CODE></A>-</P>--<TABLE BORDER="1" CELLPADDING="4">-<TR>-<TH>Function</TH>-<TH>Type</TH>-<TH COLSPAN="2">Explanation</TH>-</TR>-<TR>-<TD><CODE>Gender</CODE></TD>-<TD><A HREF="#Type">Type</A></TD>-<TD><I>-</I></TD>-</TR>-<TR>-<TD><CODE>masculine</CODE></TD>-<TD><A HREF="#Gender">Gender</A></TD>-<TD><I>-</I></TD>-</TR>-<TR>-<TD><CODE>feminine</CODE></TD>-<TD><A HREF="#Gender">Gender</A></TD>-<TD><I>-</I></TD>-</TR>-<TR>-<TD><CODE>Number</CODE></TD>-<TD><A HREF="#Type">Type</A></TD>-<TD><I>-</I></TD>-</TR>-<TR>-<TD><CODE>singular</CODE></TD>-<TD><A HREF="#Number">Number</A></TD>-<TD><I>-</I></TD>-</TR>-<TR>-<TD><CODE>plural</CODE></TD>-<TD><A HREF="#Number">Number</A></TD>-<TD><I>-</I></TD>-</TR>-<TR>-<TD><CODE>--Prep</CODE></TD>-<TD><A HREF="#Type">Type</A></TD>-<TD><I>-</I></TD>-</TR>-<TR>-<TD><CODE>accusative</CODE></TD>-<TD><A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A></TD>-<TD><I>direct object</I></TD>-</TR>-<TR>-<TD><CODE>genitive</CODE></TD>-<TD><A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A></TD>-<TD><I>preposition "di" and its contractions</I></TD>-</TR>-<TR>-<TD><CODE>dative</CODE></TD>-<TD><A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A></TD>-<TD><I>preposition "a" and its contractions</I></TD>-</TR>-<TR>-<TD><CODE>con_Prep</CODE></TD>-<TD><A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A></TD>-<TD><I>preposition "con" and its contractions</I></TD>-</TR>-<TR>-<TD><CODE>da_Prep</CODE></TD>-<TD><A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A></TD>-<TD><I>preposition "da" and its contractions</I></TD>-</TR>-<TR>-<TD><CODE>in_Prep</CODE></TD>-<TD><A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A></TD>-<TD><I>preposition "in" and its contractions</I></TD>-</TR>-<TR>-<TD><CODE>su_Prep</CODE></TD>-<TD><A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A></TD>-<TD><I>preposition "su" and its contractions</I></TD>-</TR>-<TR>-<TD><CODE>mkPrep</CODE></TD>-<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A></TD>-<TD><I>other prepositions, e.g. "dopo"</I></TD>-</TR>-<TR>-<TD><CODE>mkN</CODE></TD>-<TD><CODE>(cane</CODE> <CODE>:</CODE> <CODE>Str)</CODE> <CODE>-></CODE> <A HREF="#N" TITLE="N - common noun">N</A></TD>-<TD><I>regular noun; fem for -"a", masc otherwise</I></TD>-</TR>-<TR>-<TD><CODE>mkN</CODE></TD>-<TD><CODE>(carne</CODE> <CODE>:</CODE> <CODE>Str)</CODE> <CODE>-></CODE> <A HREF="#Gender">Gender</A> <CODE>-></CODE> <A HREF="#N" TITLE="N - common noun">N</A></TD>-<TD><I>override default gender</I></TD>-</TR>-<TR>-<TD><CODE>mkN</CODE></TD>-<TD><CODE>(uomo,uomini</CODE> <CODE>:</CODE> <CODE>Str)</CODE> <CODE>-></CODE> <A HREF="#Gender">Gender</A> <CODE>-></CODE> <A HREF="#N" TITLE="N - common noun">N</A></TD>-<TD><I>worst case</I></TD>-</TR>-<TR>-<TD><CODE>mkN</CODE></TD>-<TD><A HREF="#N" TITLE="N - common noun">N</A> <CODE>-></CODE> <CODE>Str</CODE> <CODE>-></CODE> <A HREF="#N" TITLE="N - common noun">N</A></TD>-<TD><I>compound such as "numero" + "di telefono"</I></TD>-</TR>-<TR>-<TD><CODE>mkN2</CODE></TD>-<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#N2" TITLE="N2 - relational noun">N2</A></TD>-<TD><I>regular with genitive, e.g. "figlio" + "di"</I></TD>-</TR>-<TR>-<TD><CODE>mkN2</CODE></TD>-<TD><A HREF="#N" TITLE="N - common noun">N</A> <CODE>-></CODE> <A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A> <CODE>-></CODE> <A HREF="#N2" TITLE="N2 - relational noun">N2</A></TD>-<TD><I>arbitrary noun and preposition</I></TD>-</TR>-<TR>-<TD><CODE>mkN3</CODE></TD>-<TD><A HREF="#N" TITLE="N - common noun">N</A> <CODE>-></CODE> <A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A> <CODE>-></CODE> <A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A> <CODE>-></CODE> <A HREF="#N3" TITLE="N3 - three-place relational noun">N3</A></TD>-<TD><I>e.g. volo + da + per</I></TD>-</TR>-<TR>-<TD><CODE>mkPN</CODE></TD>-<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#PN" TITLE="PN - proper name">PN</A></TD>-<TD><I>femininne for "-a", otherwise masculine</I></TD>-</TR>-<TR>-<TD><CODE>mkPN</CODE></TD>-<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#Gender">Gender</A> <CODE>-></CODE> <A HREF="#PN" TITLE="PN - proper name">PN</A></TD>-<TD><I>set gender manually</I></TD>-</TR>-<TR>-<TD><CODE>mkA</CODE></TD>-<TD><CODE>(bianco</CODE> <CODE>:</CODE> <CODE>Str)</CODE> <CODE>-></CODE> <A HREF="#A" TITLE="A - one-place adjective">A</A></TD>-<TD><I>predictable adjective</I></TD>-</TR>-<TR>-<TD><CODE>mkA</CODE></TD>-<TD><CODE>(solo,sola,soli,sole,solamente</CODE> <CODE>:</CODE> <CODE>Str)</CODE> <CODE>-></CODE> <A HREF="#A" TITLE="A - one-place adjective">A</A></TD>-<TD><I>irregular adjective</I></TD>-</TR>-<TR>-<TD><CODE>mkA</CODE></TD>-<TD><A HREF="#A" TITLE="A - one-place adjective">A</A> <CODE>-></CODE> <A HREF="#A" TITLE="A - one-place adjective">A</A> <CODE>-></CODE> <A HREF="#A" TITLE="A - one-place adjective">A</A></TD>-<TD><I>special comparison, e.g. buono - migliore</I></TD>-</TR>-<TR>-<TD><CODE>prefixA</CODE></TD>-<TD><A HREF="#A" TITLE="A - one-place adjective">A</A> <CODE>-></CODE> <A HREF="#A" TITLE="A - one-place adjective">A</A></TD>-<TD><I>adjective that comes before noun (default: after)</I></TD>-</TR>-<TR>-<TD><CODE>mkA2</CODE></TD>-<TD><A HREF="#A" TITLE="A - one-place adjective">A</A> <CODE>-></CODE> <A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A> <CODE>-></CODE> <A HREF="#A2" TITLE="A2 - two-place adjective">A2</A></TD>-<TD><I>e.g. divisibile + per</I></TD>-</TR>-<TR>-<TD><CODE>mkAdv</CODE></TD>-<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#Adv" TITLE="Adv - verb-phrase-modifying adverb">Adv</A></TD>-<TD><I>-</I></TD>-</TR>-<TR>-<TD><CODE>mkAdV</CODE></TD>-<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#AdV" TITLE="Adv - verb-phrase-modifying adverb">AdV</A></TD>-<TD><I>-</I></TD>-</TR>-<TR>-<TD><CODE>mkAdA</CODE></TD>-<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#AdA" TITLE="AdA - adjective-modifying adverb">AdA</A></TD>-<TD><I>-</I></TD>-</TR>-<TR>-<TD><CODE>mkV</CODE></TD>-<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#V" TITLE="V - one-place verb">V</A></TD>-<TD><I>regular verbs in "-are"/"-ire"</I></TD>-</TR>-<TR>-<TD><CODE>mkV</CODE></TD>-<TD><A HREF="#Verbo">Verbo</A> <CODE>-></CODE> <A HREF="#V" TITLE="V - one-place verb">V</A></TD>-<TD><I>verbs formed by BeschIta</I></TD>-</TR>-<TR>-<TD><CODE>mkV</CODE></TD>-<TD><CODE>(udire,odo,ode,udiamo,udiro,udii,udisti,udi,udirono,odi,udito</CODE> <CODE>:</CODE> <CODE>Str)</CODE> <CODE>-></CODE> <A HREF="#V" TITLE="V - one-place verb">V</A></TD>-<TD><I>worst case</I></TD>-</TR>-<TR>-<TD><CODE>essereV</CODE></TD>-<TD><A HREF="#V" TITLE="V - one-place verb">V</A> <CODE>-></CODE> <A HREF="#V" TITLE="V - one-place verb">V</A></TD>-<TD><I>force "essere" as auxiliary (default avere)</I></TD>-</TR>-<TR>-<TD><CODE>reflV</CODE></TD>-<TD><A HREF="#V" TITLE="V - one-place verb">V</A> <CODE>-></CODE> <A HREF="#V" TITLE="V - one-place verb">V</A></TD>-<TD><I>reflexive verb (implies essere)</I></TD>-</TR>-<TR>-<TD><CODE>mkV2</CODE></TD>-<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#V2" TITLE="V2 - two-place verb">V2</A></TD>-<TD><I>regular verb, direct object</I></TD>-</TR>-<TR>-<TD><CODE>mkV2</CODE></TD>-<TD><A HREF="#V" TITLE="V - one-place verb">V</A> <CODE>-></CODE> <A HREF="#V2" TITLE="V2 - two-place verb">V2</A></TD>-<TD><I>direct object</I></TD>-</TR>-<TR>-<TD><CODE>mkV2</CODE></TD>-<TD><A HREF="#V" TITLE="V - one-place verb">V</A> <CODE>-></CODE> <A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A> <CODE>-></CODE> <A HREF="#V2" TITLE="V2 - two-place verb">V2</A></TD>-<TD><I>prepositional object</I></TD>-</TR>-<TR>-<TD><CODE>mkV3</CODE></TD>-<TD><A HREF="#V" TITLE="V - one-place verb">V</A> <CODE>-></CODE> <A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A> <CODE>-></CODE> <A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A> <CODE>-></CODE> <A HREF="#V3" TITLE="V3 - three-place verb">V3</A></TD>-<TD><I>parlare, a, di</I></TD>-</TR>-<TR>-<TD><CODE>dirV3</CODE></TD>-<TD><A HREF="#V" TITLE="V - one-place verb">V</A> <CODE>-></CODE> <A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A> <CODE>-></CODE> <A HREF="#V3" TITLE="V3 - three-place verb">V3</A></TD>-<TD><I>dare,_,a</I></TD>-</TR>-<TR>-<TD><CODE>dirdirV3</CODE></TD>-<TD><A HREF="#V" TITLE="V - one-place verb">V</A> <CODE>-></CODE> <A HREF="#V3" TITLE="V3 - three-place verb">V3</A></TD>-<TD><I>dare,_,_</I></TD>-</TR>-<TR>-<TD><CODE>mkVS</CODE></TD>-<TD><A HREF="#V" TITLE="V - one-place verb">V</A> <CODE>-></CODE> <A HREF="#VS" TITLE="VS - sentence-complement verb">VS</A></TD>-<TD><I>-</I></TD>-</TR>-<TR>-<TD><CODE>mkV2S</CODE></TD>-<TD><A HREF="#V" TITLE="V - one-place verb">V</A> <CODE>-></CODE> <A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A> <CODE>-></CODE> <A HREF="#V2S" TITLE="V2S - verb with NP and S complement">V2S</A></TD>-<TD><I>-</I></TD>-</TR>-<TR>-<TD><CODE>mkVV</CODE></TD>-<TD><A HREF="#V" TITLE="V - one-place verb">V</A> <CODE>-></CODE> <A HREF="#VV" TITLE="VV - verb-phrase-complement verb">VV</A></TD>-<TD><I>plain infinitive: "voglio parlare"</I></TD>-</TR>-<TR>-<TD><CODE>deVV</CODE></TD>-<TD><A HREF="#V" TITLE="V - one-place verb">V</A> <CODE>-></CODE> <A HREF="#VV" TITLE="VV - verb-phrase-complement verb">VV</A></TD>-<TD><I>"cerco di parlare"</I></TD>-</TR>-<TR>-<TD><CODE>aVV</CODE></TD>-<TD><A HREF="#V" TITLE="V - one-place verb">V</A> <CODE>-></CODE> <A HREF="#VV" TITLE="VV - verb-phrase-complement verb">VV</A></TD>-<TD><I>"arrivo a parlare"</I></TD>-</TR>-<TR>-<TD><CODE>mkV2V</CODE></TD>-<TD><A HREF="#V" TITLE="V - one-place verb">V</A> <CODE>-></CODE> <A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A> <CODE>-></CODE> <A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A> <CODE>-></CODE> <A HREF="#V2V" TITLE="V2V - verb with NP and V complement">V2V</A></TD>-<TD><I>-</I></TD>-</TR>-<TR>-<TD><CODE>mkVA</CODE></TD>-<TD><A HREF="#V" TITLE="V - one-place verb">V</A> <CODE>-></CODE> <A HREF="#VA" TITLE="VA - adjective-complement verb">VA</A></TD>-<TD><I>-</I></TD>-</TR>-<TR>-<TD><CODE>mkV2A</CODE></TD>-<TD><A HREF="#V" TITLE="V - one-place verb">V</A> <CODE>-></CODE> <A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A> <CODE>-></CODE> <A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A> <CODE>-></CODE> <A HREF="#V2A" TITLE="V2A - verb with NP and AP complement">V2A</A></TD>-<TD><I>-</I></TD>-</TR>-<TR>-<TD><CODE>mkVQ</CODE></TD>-<TD><A HREF="#V" TITLE="V - one-place verb">V</A> <CODE>-></CODE> <A HREF="#VQ" TITLE="VQ - question-complement verb">VQ</A></TD>-<TD><I>-</I></TD>-</TR>-<TR>-<TD><CODE>mkV2Q</CODE></TD>-<TD><A HREF="#V" TITLE="V - one-place verb">V</A> <CODE>-></CODE> <A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A> <CODE>-></CODE> <A HREF="#V2Q" TITLE="V2Q - verb with NP and Q complement">V2Q</A></TD>-<TD><I>-</I></TD>-</TR>-</TABLE>--<A NAME="toc94"></A>-<H2>Paradigms for Nepali</H2>--<P>-<a name="RParadigms"></a>-</P>-<P>-source <A HREF="http://www.grammaticalframework.org/lib/src/nepali/ParadigmsNep.gf"><CODE>../src/nepali/ParadigmsNep.gf</CODE></A>-</P>--<TABLE BORDER="1" CELLPADDING="4">-<TR>-<TH>Function</TH>-<TH>Type</TH>-<TH COLSPAN="2">Explanation</TH>-</TR>-<TR>-<TD><CODE>masculine</CODE></TD>-<TD><A HREF="#Gender">Gender</A></TD>-<TD><I>-</I></TD>-</TR>-<TR>-<TD><CODE>feminine</CODE></TD>-<TD><A HREF="#Gender">Gender</A></TD>-<TD><I>-</I></TD>-</TR>-<TR>-<TD><CODE>singular</CODE></TD>-<TD><A HREF="#Number">Number</A></TD>-<TD><I>-</I></TD>-</TR>-<TR>-<TD><CODE>plural</CODE></TD>-<TD><A HREF="#Number">Number</A></TD>-<TD><I>-</I></TD>-</TR>-<TR>-<TD><CODE>human</CODE></TD>-<TD><A HREF="#NType">NType</A></TD>-<TD><I>-</I></TD>-</TR>-<TR>-<TD><CODE>profession</CODE></TD>-<TD><A HREF="#NType">NType</A></TD>-<TD><I>-</I></TD>-</TR>-<TR>-<TD><CODE>living</CODE></TD>-<TD><A HREF="#NType">NType</A></TD>-<TD><I>-</I></TD>-</TR>-<TR>-<TD><CODE>regN</CODE></TD>-<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#N" TITLE="N - common noun">N</A> <CODE>=</CODE> <CODE>\s</CODE> <CODE>-></CODE> <CODE>mkNReg</CODE> <CODE>s</CODE> <A HREF="#NonLiving">NonLiving</A> <CODE>Pers3_L</CODE> <CODE>**</CODE> <CODE>{lock_N=</CODE> <CODE><>}</CODE></TD>-<TD><I>-</I></TD>-</TR>-<TR>-<TD><CODE>regN</CODE></TD>-<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#NPerson">NPerson</A> <CODE>-></CODE> <A HREF="#N" TITLE="N - common noun">N</A> <CODE>=</CODE> <CODE>\s,h</CODE> <CODE>-></CODE> <CODE>mkNReg</CODE> <CODE>s</CODE> <A HREF="#NonLiving">NonLiving</A> <CODE>h</CODE> <CODE>**</CODE> <CODE>{lock_N=</CODE> <CODE><>}</CODE></TD>-<TD><I>-</I></TD>-</TR>-<TR>-<TD><CODE>regN</CODE></TD>-<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#NType">NType</A> <CODE>-></CODE> <A HREF="#N" TITLE="N - common noun">N</A> <CODE>=</CODE> <CODE>\s,t</CODE> <CODE>-></CODE> <CODE>mkNReg</CODE> <CODE>s</CODE> <CODE>t</CODE> <CODE>Pers3_L</CODE> <CODE>**</CODE> <CODE>{lock_N=</CODE> <CODE><>}</CODE></TD>-<TD><I>-</I></TD>-</TR>-<TR>-<TD><CODE>regN</CODE></TD>-<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#NType">NType</A> <CODE>-></CODE> <A HREF="#NPerson">NPerson</A> <CODE>-></CODE> <A HREF="#N" TITLE="N - common noun">N</A> <CODE>=</CODE> <CODE>\s,t,h</CODE> <CODE>-></CODE> <CODE>mkNReg</CODE> <CODE>s</CODE> <CODE>t</CODE> <CODE>h</CODE> <CODE>**</CODE> <CODE>{lock_N=</CODE> <CODE><>}</CODE></TD>-<TD><I>-</I></TD>-</TR>-<TR>-<TD><CODE>mkNF</CODE></TD>-<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#N" TITLE="N - common noun">N</A> <CODE>=</CODE> <CODE>\s</CODE> <CODE>-></CODE> <CODE>mkNFem</CODE> <CODE>s</CODE> <A HREF="#NonLiving">NonLiving</A> <CODE>Pers3_L</CODE> <CODE>**</CODE> <CODE>{lock_N=</CODE> <CODE><>}</CODE></TD>-<TD><I>-</I></TD>-</TR>-<TR>-<TD><CODE>mkNF</CODE></TD>-<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#NPerson">NPerson</A> <CODE>-></CODE> <A HREF="#N" TITLE="N - common noun">N</A> <CODE>=</CODE> <CODE>\s,h</CODE> <CODE>-></CODE> <CODE>mkNFem</CODE> <CODE>s</CODE> <A HREF="#NonLiving">NonLiving</A> <CODE>h</CODE> <CODE>**</CODE> <CODE>{lock_N=</CODE> <CODE><>}</CODE></TD>-<TD><I>-</I></TD>-</TR>-<TR>-<TD><CODE>mkNF</CODE></TD>-<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#NType">NType</A> <CODE>-></CODE> <A HREF="#N" TITLE="N - common noun">N</A> <CODE>=</CODE> <CODE>\s,t</CODE> <CODE>-></CODE> <CODE>mkNFem</CODE> <CODE>s</CODE> <CODE>t</CODE> <CODE>Pers3_L</CODE> <CODE>**</CODE> <CODE>{lock_N=</CODE> <CODE><>}</CODE></TD>-<TD><I>-</I></TD>-</TR>-<TR>-<TD><CODE>mkNF</CODE></TD>-<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#NType">NType</A> <CODE>-></CODE> <A HREF="#NPerson">NPerson</A> <CODE>-></CODE> <A HREF="#N" TITLE="N - common noun">N</A> <CODE>=</CODE> <CODE>\s,t,h</CODE> <CODE>-></CODE> <CODE>mkNFem</CODE> <CODE>s</CODE> <CODE>t</CODE> <CODE>h</CODE> <CODE>**</CODE> <CODE>{lock_N=</CODE> <CODE><>}</CODE></TD>-<TD><I>-</I></TD>-</TR>-<TR>-<TD><CODE>mkNUC</CODE></TD>-<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#N" TITLE="N - common noun">N</A> <CODE>=</CODE></TD>-<TD><I>-</I></TD>-</TR>-<TR>-<TD><CODE>mkNUC</CODE></TD>-<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#Gender">Gender</A> <CODE>-></CODE> <A HREF="#N" TITLE="N - common noun">N</A> <CODE>=</CODE></TD>-<TD><I>-</I></TD>-</TR>-<TR>-<TD><CODE>mkNUC</CODE></TD>-<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#Gender">Gender</A> <CODE>-></CODE> <A HREF="#NType">NType</A> <CODE>-></CODE> <A HREF="#N" TITLE="N - common noun">N</A> <CODE>=</CODE></TD>-<TD><I>-</I></TD>-</TR>-<TR>-<TD><CODE>mkNUC</CODE></TD>-<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#Gender">Gender</A> <CODE>-></CODE> <A HREF="#NType">NType</A> <CODE>-></CODE> <A HREF="#NPerson">NPerson</A> <CODE>-></CODE> <A HREF="#N" TITLE="N - common noun">N</A> <CODE>=</CODE></TD>-<TD><I>-</I></TD>-</TR>-<TR>-<TD><CODE>--mkNUC</CODE></TD>-<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#NType">NType</A> <CODE>-></CODE> <A HREF="#Gender">Gender</A> <CODE>-></CODE> <A HREF="#N" TITLE="N - common noun">N</A> <CODE>=</CODE> <CODE>\s,t,g</CODE> <CODE>-></CODE> <CODE>mkNUnc</CODE> <CODE>s</CODE> <CODE>g</CODE> <CODE>t</CODE> <CODE>**</CODE> <CODE>{lock_N=</CODE> <CODE><>}</CODE></TD>-<TD><I>-</I></TD>-</TR>-<TR>-<TD><CODE>mkN2</CODE></TD>-<TD><A HREF="#N" TITLE="N - common noun">N</A> <CODE>-></CODE> <A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A> <CODE>-></CODE> <CODE>Str</CODE> <CODE>-></CODE> <A HREF="#N2" TITLE="N2 - relational noun">N2</A> <CODE>=</CODE></TD>-<TD><I>-</I></TD>-</TR>-<TR>-<TD><CODE>mkN2</CODE></TD>-<TD><A HREF="#N" TITLE="N - common noun">N</A> <CODE>-></CODE> <A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A> <CODE>-></CODE> <CODE>Str</CODE> <CODE>-></CODE> <A HREF="#NType">NType</A> <CODE>-></CODE> <A HREF="#N2" TITLE="N2 - relational noun">N2</A> <CODE>=</CODE></TD>-<TD><I>-</I></TD>-</TR>-<TR>-<TD><CODE>mkN2</CODE></TD>-<TD><A HREF="#N" TITLE="N - common noun">N</A> <CODE>-></CODE> <A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A> <CODE>-></CODE> <CODE>Str</CODE> <CODE>-></CODE> <A HREF="#NType">NType</A> <CODE>-></CODE> <A HREF="#NPerson">NPerson</A> <CODE>-></CODE> <A HREF="#N2" TITLE="N2 - relational noun">N2</A> <CODE>=</CODE></TD>-<TD><I>-</I></TD>-</TR>-<TR>-<TD><CODE>mkN2</CODE></TD>-<TD><A HREF="#N" TITLE="N - common noun">N</A> <CODE>-></CODE> <A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A> <CODE>-></CODE> <CODE>Str</CODE> <CODE>-></CODE> <CODE>N2;</CODE></TD>-<TD><I>-</I></TD>-</TR>-<TR>-<TD><CODE>mkN3</CODE></TD>-<TD><A HREF="#N" TITLE="N - common noun">N</A> <CODE>-></CODE> <A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A> <CODE>-></CODE> <A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A> <CODE>-></CODE> <CODE>Str-></CODE> <A HREF="#N3" TITLE="N3 - three-place relational noun">N3</A> <CODE>=</CODE></TD>-<TD><I>-</I></TD>-</TR>-<TR>-<TD><CODE>mkN3</CODE></TD>-<TD><A HREF="#N" TITLE="N - common noun">N</A> <CODE>-></CODE> <A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A> <CODE>-></CODE> <A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A> <CODE>-></CODE> <CODE>Str-></CODE> <A HREF="#NType">NType</A> <CODE>-></CODE> <A HREF="#N3" TITLE="N3 - three-place relational noun">N3</A> <CODE>=</CODE></TD>-<TD><I>-</I></TD>-</TR>-<TR>-<TD><CODE>mkN3</CODE></TD>-<TD><A HREF="#N" TITLE="N - common noun">N</A> <CODE>-></CODE> <A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A> <CODE>-></CODE> <A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A> <CODE>-></CODE> <CODE>Str-></CODE> <A HREF="#N3" TITLE="N3 - three-place relational noun">N3</A></TD>-<TD><I>-</I></TD>-</TR>-<TR>-<TD><CODE>mkCmpdNoun</CODE></TD>-<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#N" TITLE="N - common noun">N</A> <CODE>-></CODE> <A HREF="#N" TITLE="N - common noun">N</A></TD>-<TD><I>-</I></TD>-</TR>-<TR>-<TD><CODE>mkPN</CODE></TD>-<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#PN" TITLE="PN - proper name">PN</A> <CODE>=</CODE></TD>-<TD><I>-</I></TD>-</TR>-<TR>-<TD><CODE>mkPN</CODE></TD>-<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#Gender">Gender</A> <CODE>-></CODE> <A HREF="#NPerson">NPerson</A> <CODE>-></CODE> <A HREF="#PN" TITLE="PN - proper name">PN</A> <CODE>=</CODE></TD>-<TD><I>-</I></TD>-</TR>-<TR>-<TD><CODE>mkPN</CODE></TD>-<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#Gender">Gender</A> <CODE>-></CODE> <A HREF="#NType">NType</A> <CODE>-></CODE> <A HREF="#NPerson">NPerson</A> <CODE>-></CODE> <A HREF="#PN" TITLE="PN - proper name">PN</A> <CODE>=</CODE></TD>-<TD><I>-</I></TD>-</TR>-<TR>-<TD><CODE>mkPron</CODE></TD>-<TD><CODE>Str</CODE> <CODE>-></CODE> <CODE>Str</CODE> <CODE>-></CODE> <A HREF="#Number">Number</A> <CODE>-></CODE> <A HREF="#Gender">Gender</A> <CODE>-></CODE> <A HREF="#NPerson">NPerson</A> <CODE>-></CODE> <A HREF="#Pron" TITLE="Pron - personal pronoun">Pron</A> <CODE>=</CODE></TD>-<TD><I>-</I></TD>-</TR>-<TR>-<TD><CODE>mkPron</CODE></TD>-<TD><CODE>(x1,_,_,_,_,_,x7</CODE> <CODE>:</CODE> <CODE>Str)</CODE> <CODE>-></CODE> <A HREF="#Number">Number</A> <CODE>-></CODE> <A HREF="#Gender">Gender</A> <CODE>-></CODE> <A HREF="#NPerson">NPerson</A> <CODE>-></CODE> <A HREF="#Pron" TITLE="Pron - personal pronoun">Pron</A> <CODE>=</CODE></TD>-<TD><I>-</I></TD>-</TR>-<TR>-<TD><CODE>demoPN</CODE></TD>-<TD><CODE>Str</CODE> <CODE>-></CODE> <CODE>Str</CODE> <CODE>-></CODE> <CODE>Str</CODE> <CODE>-></CODE> <A 'HREF="#Quant" TITLE="Quant - quantifier ('nucleus' of Det)"'>Quant</A> <CODE>=</CODE></TD>-<TD><I>-</I></TD>-</TR>-<TR>-<TD><CODE>mkDet</CODE></TD>-<TD><CODE>(s1,s2:Str)</CODE> <CODE>-></CODE> <A HREF="#Number">Number</A> <CODE>-></CODE> <A HREF="#Det" TITLE="Det - determiner phrase">Det</A> <CODE>=</CODE></TD>-<TD><I>-</I></TD>-</TR>-<TR>-<TD><CODE>mkDet</CODE></TD>-<TD><CODE>(s1,s2,s3,s4:Str)</CODE> <CODE>-></CODE> <A HREF="#Number">Number</A> <CODE>-></CODE> <A HREF="#Det" TITLE="Det - determiner phrase">Det</A> <CODE>=</CODE></TD>-<TD><I>-</I></TD>-</TR>-<TR>-<TD><CODE>mkIDetn</CODE></TD>-<TD><CODE>(s1,s2:Str)</CODE> <CODE>-></CODE> <A HREF="#Number">Number</A> <CODE>-></CODE> <A HREF="#IDet" TITLE="IDet - interrogative determiner">IDet</A> <CODE>=</CODE></TD>-<TD><I>-</I></TD>-</TR>-<TR>-<TD><CODE>mkIP</CODE></TD>-<TD><CODE>(x1,x2,x3,x4:Str)</CODE> <CODE>-></CODE> <A HREF="#Number">Number</A> <CODE>-></CODE> <A HREF="#IP" TITLE="IP - interrogative pronoun">IP</A> <CODE>=</CODE></TD>-<TD><I>-</I></TD>-</TR>-<TR>-<TD><CODE>mkA</CODE></TD>-<TD><CODE>Str-></CODE> <A HREF="#A" TITLE="A - one-place adjective">A</A></TD>-<TD><I>-</I></TD>-</TR>-<TR>-<TD><CODE>mkA</CODE></TD>-<TD><CODE>Str</CODE> <CODE>-></CODE> <CODE>Str</CODE> <CODE>-></CODE> <A HREF="#A2" TITLE="A2 - two-place adjective">A2</A></TD>-<TD><I>-</I></TD>-</TR>-<TR>-<TD><CODE>mkV</CODE></TD>-<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#V" TITLE="V - one-place verb">V</A> <CODE>=</CODE></TD>-<TD><I>-</I></TD>-</TR>-<TR>-<TD><CODE>mkV2</CODE></TD>-<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#V2" TITLE="V2 - two-place verb">V2</A></TD>-<TD><I>-</I></TD>-</TR>-<TR>-<TD><CODE>mkV2</CODE></TD>-<TD><A HREF="#V" TITLE="V - one-place verb">V</A> <CODE>-></CODE> <A HREF="#V2" TITLE="V2 - two-place verb">V2</A></TD>-<TD><I>-</I></TD>-</TR>-<TR>-<TD><CODE>mkV2</CODE></TD>-<TD><A HREF="#V" TITLE="V - one-place verb">V</A> <CODE>-></CODE> <CODE>Str</CODE> <CODE>-></CODE> <A HREF="#V2" TITLE="V2 - two-place verb">V2</A></TD>-<TD><I>-</I></TD>-</TR>-<TR>-<TD><CODE>mkV3</CODE></TD>-<TD><A HREF="#V" TITLE="V - one-place verb">V</A> <CODE>-></CODE> <CODE>Str</CODE> <CODE>-></CODE> <CODE>Str</CODE> <CODE>-></CODE> <A HREF="#V3" TITLE="V3 - three-place verb">V3</A></TD>-<TD><I>-</I></TD>-</TR>-<TR>-<TD><CODE>mkV2V</CODE></TD>-<TD><A HREF="#V" TITLE="V - one-place verb">V</A> <CODE>-></CODE> <CODE>Str</CODE> <CODE>-></CODE> <CODE>Str</CODE> <CODE>-></CODE> <A HREF="#Bool">Bool</A> <CODE>-></CODE> <A HREF="#V2V" TITLE="V2V - verb with NP and V complement">V2V</A></TD>-<TD><I>-</I></TD>-</TR>-<TR>-<TD><CODE>compoundV</CODE></TD>-<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#V" TITLE="V - one-place verb">V</A> <CODE>-></CODE> <A HREF="#V" TITLE="V - one-place verb">V</A> <CODE>=</CODE> <CODE>\s,v</CODE> <CODE>-></CODE> <CODE>{s</CODE> <CODE>=</CODE> <CODE>\\vf</CODE> <CODE>=></CODE> <CODE>s</CODE> <CODE>++</CODE> <CODE>v.s</CODE> <CODE>!</CODE> <CODE>vf</CODE> <CODE>lock_V</CODE> <CODE>=</CODE> <CODE><>}</CODE></TD>-<TD><I>-</I></TD>-</TR>-<TR>-<TD><CODE>compoundV</CODE></TD>-<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#V2" TITLE="V2 - two-place verb">V2</A> <CODE>-></CODE> <A HREF="#V" TITLE="V - one-place verb">V</A> <CODE>=</CODE> <CODE>\s,v</CODE> <CODE>-></CODE> <CODE>{s</CODE> <CODE>=</CODE> <CODE>\\vf</CODE> <CODE>=></CODE> <CODE>s</CODE> <CODE>++</CODE> <CODE>v.s</CODE> <CODE>!</CODE> <CODE>vf</CODE> <CODE>lock_V</CODE> <CODE>=</CODE> <CODE><>}</CODE></TD>-<TD><I>-</I></TD>-</TR>-<TR>-<TD><CODE>mkAdv</CODE></TD>-<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#Adv" TITLE="Adv - verb-phrase-modifying adverb">Adv</A></TD>-<TD><I>e.g. today</I></TD>-</TR>-<TR>-<TD><CODE>mkAdV</CODE></TD>-<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#AdV" TITLE="Adv - verb-phrase-modifying adverb">AdV</A></TD>-<TD><I>e.g. always</I></TD>-</TR>-<TR>-<TD><CODE>mkAdA</CODE></TD>-<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#AdA" TITLE="AdA - adjective-modifying adverb">AdA</A></TD>-<TD><I>e.g. quite</I></TD>-</TR>-<TR>-<TD><CODE>mkAdN</CODE></TD>-<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#AdN" TITLE="AdN - numeral-modifying adverb">AdN</A></TD>-<TD><I>e.g. approximately</I></TD>-</TR>-<TR>-<TD><CODE>mkPrep</CODE></TD>-<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A></TD>-<TD><I>-</I></TD>-</TR>-<TR>-<TD><CODE>noPrep</CODE></TD>-<TD><A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A></TD>-<TD><I>-</I></TD>-</TR>-<TR>-<TD><CODE>--mkQuant</CODE></TD>-<TD><A HREF="#Pron" TITLE="Pron - personal pronoun">Pron</A> <CODE>-></CODE> <A 'HREF="#Quant" TITLE="Quant - quantifier ('nucleus' of Det)"'>Quant</A> <CODE>=</CODE> <CODE>\p</CODE> <CODE>-></CODE> <CODE>{s</CODE> <CODE>=</CODE> <CODE>\\_,_,c</CODE> <CODE>=></CODE> <CODE>p.s!c</CODE> <CODE>lock_Quant</CODE> <CODE>=</CODE> <CODE><>};</CODE></TD>-<TD><I>-</I></TD>-</TR>-<TR>-<TD><CODE>mkQuant</CODE></TD>-<TD><CODE>(s1,s2,s3,s4:Str)</CODE> <CODE>-></CODE> <A 'HREF="#Quant" TITLE="Quant - quantifier ('nucleus' of Det)"'>Quant</A> <CODE>=</CODE></TD>-<TD><I>-</I></TD>-</TR>-<TR>-<TD><CODE>mkQuant</CODE></TD>-<TD><CODE>(s1,s2:Str)</CODE> <CODE>-></CODE> <A 'HREF="#Quant" TITLE="Quant - quantifier ('nucleus' of Det)"'>Quant</A> <CODE>=</CODE></TD>-<TD><I>-</I></TD>-</TR>-<TR>-<TD><CODE>mkConj</CODE></TD>-<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#Conj" TITLE="Conj - conjunction">Conj</A></TD>-<TD><I>and (plural agreement)</I></TD>-</TR>-<TR>-<TD><CODE>mkConj</CODE></TD>-<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#Number">Number</A> <CODE>-></CODE> <A HREF="#Conj" TITLE="Conj - conjunction">Conj</A></TD>-<TD><I>or (agrement number given as argument)</I></TD>-</TR>-<TR>-<TD><CODE>mkConj</CODE></TD>-<TD><CODE>Str</CODE> <CODE>-></CODE> <CODE>Str</CODE> <CODE>-></CODE> <A HREF="#Conj" TITLE="Conj - conjunction">Conj</A></TD>-<TD><I>both ... and (plural)</I></TD>-</TR>-<TR>-<TD><CODE>mkConj</CODE></TD>-<TD><CODE>Str</CODE> <CODE>-></CODE> <CODE>Str</CODE> <CODE>-></CODE> <A HREF="#Number">Number</A> <CODE>-></CODE> <A HREF="#Conj" TITLE="Conj - conjunction">Conj</A></TD>-<TD><I>either ... or (agrement number given as argument)</I></TD>-</TR>-<TR>-<TD><CODE>mkConj</CODE></TD>-<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#Conj" TITLE="Conj - conjunction">Conj</A> <CODE>=</CODE> <CODE>\y</CODE> <CODE>-></CODE> <CODE>mk2Conj</CODE> <CODE>[]</CODE> <CODE>y</CODE> <CODE>plural</CODE></TD>-<TD><I>-</I></TD>-</TR>-<TR>-<TD><CODE>mkConj</CODE></TD>-<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#Number">Number</A> <CODE>-></CODE> <A HREF="#Conj" TITLE="Conj - conjunction">Conj</A> <CODE>=</CODE> <CODE>\y,n</CODE> <CODE>-></CODE> <CODE>mk2Conj</CODE> <CODE>[]</CODE> <CODE>y</CODE> <CODE>n</CODE></TD>-<TD><I>-</I></TD>-</TR>-<TR>-<TD><CODE>mkConj</CODE></TD>-<TD><CODE>Str</CODE> <CODE>-></CODE> <CODE>Str</CODE> <CODE>-></CODE> <A HREF="#Conj" TITLE="Conj - conjunction">Conj</A> <CODE>=</CODE> <CODE>\x,y</CODE> <CODE>-></CODE> <CODE>mk2Conj</CODE> <CODE>x</CODE> <CODE>y</CODE> <CODE>plural</CODE></TD>-<TD><I>-</I></TD>-</TR>-<TR>-<TD><CODE>mkConj</CODE></TD>-<TD><CODE>Str</CODE> <CODE>-></CODE> <CODE>Str</CODE> <CODE>-></CODE> <A HREF="#Number">Number</A> <CODE>-></CODE> <A HREF="#Conj" TITLE="Conj - conjunction">Conj</A> <CODE>=</CODE> <CODE>mk2Conj</CODE></TD>-<TD><I>-</I></TD>-</TR>-<TR>-<TD><CODE>mk2Conj</CODE></TD>-<TD><CODE>Str</CODE> <CODE>-></CODE> <CODE>Str</CODE> <CODE>-></CODE> <A HREF="#Number">Number</A> <CODE>-></CODE> <A HREF="#Conj" TITLE="Conj - conjunction">Conj</A> <CODE>=</CODE> <CODE>\x,y,n</CODE> <CODE>-></CODE></TD>-<TD><I>-</I></TD>-</TR>-</TABLE>--<A NAME="toc95"></A>-<H2>Paradigms for Norwegian</H2>--<P>-<a name="RParadigms"></a>-</P>-<P>-source <A HREF="http://www.grammaticalframework.org/lib/src/norwegian/ParadigmsNor.gf"><CODE>../src/norwegian/ParadigmsNor.gf</CODE></A>-</P>--<TABLE BORDER="1" CELLPADDING="4">-<TR>-<TH>Function</TH>-<TH>Type</TH>-<TH COLSPAN="2">Explanation</TH>-</TR>-<TR>-<TD><CODE>Gender</CODE></TD>-<TD><A HREF="#Type">Type</A></TD>-<TD><I>-</I></TD>-</TR>-<TR>-<TD><CODE>masculine</CODE></TD>-<TD><A HREF="#Gender">Gender</A></TD>-<TD><I>the "en" gender</I></TD>-</TR>-<TR>-<TD><CODE>feminine</CODE></TD>-<TD><A HREF="#Gender">Gender</A></TD>-<TD><I>the "ei" gender</I></TD>-</TR>-<TR>-<TD><CODE>neutrum</CODE></TD>-<TD><A HREF="#Gender">Gender</A></TD>-<TD><I>the "et" gender</I></TD>-</TR>-<TR>-<TD><CODE>Number</CODE></TD>-<TD><A HREF="#Type">Type</A></TD>-<TD><I>-</I></TD>-</TR>-<TR>-<TD><CODE>singular</CODE></TD>-<TD><A HREF="#Number">Number</A></TD>-<TD><I>-</I></TD>-</TR>-<TR>-<TD><CODE>plural</CODE></TD>-<TD><A HREF="#Number">Number</A></TD>-<TD><I>-</I></TD>-</TR>-<TR>-<TD><CODE>mkPrep</CODE></TD>-<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A></TD>-<TD><I>e.g. "etter"</I></TD>-</TR>-<TR>-<TD><CODE>noPrep</CODE></TD>-<TD><A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A></TD>-<TD><I>empty string</I></TD>-</TR>-<TR>-<TD><CODE>mkN</CODE></TD>-<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#N" TITLE="N - common noun">N</A></TD>-<TD><I>predictable noun, feminine for "-e" otherwise masculine</I></TD>-</TR>-<TR>-<TD><CODE>mkN</CODE></TD>-<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#Gender">Gender</A> <CODE>-></CODE> <A HREF="#N" TITLE="N - common noun">N</A></TD>-<TD><I>force gender</I></TD>-</TR>-<TR>-<TD><CODE>mkN</CODE></TD>-<TD><CODE>(dreng,drengen,drenger,drengene</CODE> <CODE>:</CODE> <CODE>Str)</CODE> <CODE>-></CODE> <A HREF="#N" TITLE="N - common noun">N</A></TD>-<TD><I>worst case</I></TD>-</TR>-<TR>-<TD><CODE>mkN2</CODE></TD>-<TD><A HREF="#N" TITLE="N - common noun">N</A> <CODE>-></CODE> <A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A> <CODE>-></CODE> <A HREF="#N2" TITLE="N2 - relational noun">N2</A></TD>-<TD><I>e.g. datter + til</I></TD>-</TR>-<TR>-<TD><CODE>mkN3</CODE></TD>-<TD><A HREF="#N" TITLE="N - common noun">N</A> <CODE>-></CODE> <A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A> <CODE>-></CODE> <A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A> <CODE>-></CODE> <A HREF="#N3" TITLE="N3 - three-place relational noun">N3</A></TD>-<TD><I>e.g forbindelse + fra + til</I></TD>-</TR>-<TR>-<TD><CODE>mkPN</CODE></TD>-<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#PN" TITLE="PN - proper name">PN</A></TD>-<TD><I>masculine</I></TD>-</TR>-<TR>-<TD><CODE>mkPN</CODE></TD>-<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#Gender">Gender</A> <CODE>-></CODE> <A HREF="#PN" TITLE="PN - proper name">PN</A></TD>-<TD><I>force gender</I></TD>-</TR>-<TR>-<TD><CODE>mkA</CODE></TD>-<TD><CODE>(fin</CODE> <CODE>:</CODE> <CODE>Str)</CODE> <CODE>-></CODE> <A HREF="#A" TITLE="A - one-place adjective">A</A></TD>-<TD><I>predictable adjective</I></TD>-</TR>-<TR>-<TD><CODE>mkA</CODE></TD>-<TD><CODE>(fin,fint</CODE> <CODE>:</CODE> <CODE>Str)</CODE> <CODE>-></CODE> <A HREF="#A" TITLE="A - one-place adjective">A</A></TD>-<TD><I>deviant neuter</I></TD>-</TR>-<TR>-<TD><CODE>mkA</CODE></TD>-<TD><CODE>(galen,galet,galne</CODE> <CODE>:</CODE> <CODE>Str)</CODE> <CODE>-></CODE> <A HREF="#A" TITLE="A - one-place adjective">A</A></TD>-<TD><I>also plural deviant</I></TD>-</TR>-<TR>-<TD><CODE>mkA</CODE></TD>-<TD><CODE>(stor,stort,store,storre,storst</CODE> <CODE>:</CODE> <CODE>Str)</CODE> <CODE>-></CODE> <A HREF="#A" TITLE="A - one-place adjective">A</A></TD>-<TD><I>worst case</I></TD>-</TR>-<TR>-<TD><CODE>mkA</CODE></TD>-<TD><A HREF="#A" TITLE="A - one-place adjective">A</A> <CODE>-></CODE> <A HREF="#A" TITLE="A - one-place adjective">A</A></TD>-<TD><I>comparison with mer/mest, e.g. "norsk"</I></TD>-</TR>-<TR>-<TD><CODE>mkA2</CODE></TD>-<TD><A HREF="#A" TITLE="A - one-place adjective">A</A> <CODE>-></CODE> <A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A> <CODE>-></CODE> <A HREF="#A2" TITLE="A2 - two-place adjective">A2</A></TD>-<TD><I>e.g. gift + med</I></TD>-</TR>-<TR>-<TD><CODE>mkAdv</CODE></TD>-<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#Adv" TITLE="Adv - verb-phrase-modifying adverb">Adv</A></TD>-<TD><I>e.g. her</I></TD>-</TR>-<TR>-<TD><CODE>mkAdV</CODE></TD>-<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#AdV" TITLE="Adv - verb-phrase-modifying adverb">AdV</A></TD>-<TD><I>e.g. altid</I></TD>-</TR>-<TR>-<TD><CODE>mkAdA</CODE></TD>-<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#AdA" TITLE="AdA - adjective-modifying adverb">AdA</A></TD>-<TD><I>e.g. mye</I></TD>-</TR>-<TR>-<TD><CODE>mkV</CODE></TD>-<TD><CODE>(snakke</CODE> <CODE>:</CODE> <CODE>Str)</CODE> <CODE>-></CODE> <A HREF="#V" TITLE="V - one-place verb">V</A></TD>-<TD><I>regular verb (first conjugation)</I></TD>-</TR>-<TR>-<TD><CODE>mkV</CODE></TD>-<TD><CODE>(leve,levde</CODE> <CODE>:</CODE> <CODE>Str)</CODE> <CODE>-></CODE> <A HREF="#V" TITLE="V - one-place verb">V</A></TD>-<TD><I>other past tense</I></TD>-</TR>-<TR>-<TD><CODE>mkV</CODE></TD>-<TD><CODE>(drikke,</CODE> <CODE>drakk,</CODE> <CODE>drukket</CODE> <CODE>:</CODE> <CODE>Str)</CODE> <CODE>-></CODE> <A HREF="#V" TITLE="V - one-place verb">V</A></TD>-<TD><I>theme of irregular verb</I></TD>-</TR>-<TR>-<TD><CODE>mkV</CODE></TD>-<TD><CODE>(spise,spiser,spises,spiste,spist,spis</CODE> <CODE>:</CODE> <CODE>Str)</CODE> <CODE>-></CODE> <A HREF="#V" TITLE="V - one-place verb">V</A></TD>-<TD><I>worst case</I></TD>-</TR>-<TR>-<TD><CODE>mkV</CODE></TD>-<TD><A HREF="#V" TITLE="V - one-place verb">V</A> <CODE>-></CODE> <CODE>Str</CODE> <CODE>-></CODE> <A HREF="#V" TITLE="V - one-place verb">V</A></TD>-<TD><I>verb with particle, e.g. lukke + opp</I></TD>-</TR>-<TR>-<TD><CODE>vaereV</CODE></TD>-<TD><A HREF="#V" TITLE="V - one-place verb">V</A> <CODE>-></CODE> <A HREF="#V" TITLE="V - one-place verb">V</A></TD>-<TD><I>force "være" as auxiliary (default "have")</I></TD>-</TR>-<TR>-<TD><CODE>depV</CODE></TD>-<TD><A HREF="#V" TITLE="V - one-place verb">V</A> <CODE>-></CODE> <A HREF="#V" TITLE="V - one-place verb">V</A></TD>-<TD><I>deponent, e.g "trives"</I></TD>-</TR>-<TR>-<TD><CODE>reflV</CODE></TD>-<TD><A HREF="#V" TITLE="V - one-place verb">V</A> <CODE>-></CODE> <A HREF="#V" TITLE="V - one-place verb">V</A></TD>-<TD><I>reflexive, e.g. "forestille seg"</I></TD>-</TR>-<TR>-<TD><CODE>mkV2</CODE></TD>-<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#V2" TITLE="V2 - two-place verb">V2</A></TD>-<TD><I>regular, direct object</I></TD>-</TR>-<TR>-<TD><CODE>mkV2</CODE></TD>-<TD><A HREF="#V" TITLE="V - one-place verb">V</A> <CODE>-></CODE> <A HREF="#V2" TITLE="V2 - two-place verb">V2</A></TD>-<TD><I>direct object</I></TD>-</TR>-<TR>-<TD><CODE>mkV2</CODE></TD>-<TD><A HREF="#V" TITLE="V - one-place verb">V</A> <CODE>-></CODE> <A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A> <CODE>-></CODE> <A HREF="#V2" TITLE="V2 - two-place verb">V2</A></TD>-<TD><I>preposition for complement</I></TD>-</TR>-<TR>-<TD><CODE>mkV3</CODE></TD>-<TD><A HREF="#V" TITLE="V - one-place verb">V</A> <CODE>-></CODE> <A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A> <CODE>-></CODE> <A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A> <CODE>-></CODE> <A HREF="#V3" TITLE="V3 - three-place verb">V3</A></TD>-<TD><I>snakke, med, om</I></TD>-</TR>-<TR>-<TD><CODE>dirV3</CODE></TD>-<TD><A HREF="#V" TITLE="V - one-place verb">V</A> <CODE>-></CODE> <A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A> <CODE>-></CODE> <A HREF="#V3" TITLE="V3 - three-place verb">V3</A></TD>-<TD><I>gi,_,til</I></TD>-</TR>-<TR>-<TD><CODE>dirdirV3</CODE></TD>-<TD><A HREF="#V" TITLE="V - one-place verb">V</A> <CODE>-></CODE> <A HREF="#V3" TITLE="V3 - three-place verb">V3</A></TD>-<TD><I>gi,_,_</I></TD>-</TR>-<TR>-<TD><CODE>mkVS</CODE></TD>-<TD><A HREF="#V" TITLE="V - one-place verb">V</A> <CODE>-></CODE> <A HREF="#VS" TITLE="VS - sentence-complement verb">VS</A></TD>-<TD><I>-</I></TD>-</TR>-<TR>-<TD><CODE>mkV2S</CODE></TD>-<TD><A HREF="#V" TITLE="V - one-place verb">V</A> <CODE>-></CODE> <A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A> <CODE>-></CODE> <A HREF="#V2S" TITLE="V2S - verb with NP and S complement">V2S</A></TD>-<TD><I>-</I></TD>-</TR>-<TR>-<TD><CODE>mkVV</CODE></TD>-<TD><A HREF="#V" TITLE="V - one-place verb">V</A> <CODE>-></CODE> <A HREF="#VV" TITLE="VV - verb-phrase-complement verb">VV</A></TD>-<TD><I>-</I></TD>-</TR>-<TR>-<TD><CODE>mkV2V</CODE></TD>-<TD><A HREF="#V" TITLE="V - one-place verb">V</A> <CODE>-></CODE> <A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A> <CODE>-></CODE> <A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A> <CODE>-></CODE> <A HREF="#V2V" TITLE="V2V - verb with NP and V complement">V2V</A></TD>-<TD><I>-</I></TD>-</TR>-<TR>-<TD><CODE>mkVA</CODE></TD>-<TD><A HREF="#V" TITLE="V - one-place verb">V</A> <CODE>-></CODE> <A HREF="#VA" TITLE="VA - adjective-complement verb">VA</A></TD>-<TD><I>-</I></TD>-</TR>-<TR>-<TD><CODE>mkV2A</CODE></TD>-<TD><A HREF="#V" TITLE="V - one-place verb">V</A> <CODE>-></CODE> <A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A> <CODE>-></CODE> <A HREF="#V2A" TITLE="V2A - verb with NP and AP complement">V2A</A></TD>-<TD><I>-</I></TD>-</TR>-<TR>-<TD><CODE>mkVQ</CODE></TD>-<TD><A HREF="#V" TITLE="V - one-place verb">V</A> <CODE>-></CODE> <A HREF="#VQ" TITLE="VQ - question-complement verb">VQ</A></TD>-<TD><I>-</I></TD>-</TR>-<TR>-<TD><CODE>mkV2Q</CODE></TD>-<TD><A HREF="#V" TITLE="V - one-place verb">V</A> <CODE>-></CODE> <A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A> <CODE>-></CODE> <A HREF="#V2Q" TITLE="V2Q - verb with NP and Q complement">V2Q</A></TD>-<TD><I>-</I></TD>-</TR>-</TABLE>--<A NAME="toc96"></A>-<H2>Paradigms for Polish</H2>--<P>-<a name="RParadigms"></a>-</P>-<P>-source <A HREF="http://www.grammaticalframework.org/lib/src/polish/ParadigmsPol.gf"><CODE>../src/polish/ParadigmsPol.gf</CODE></A>-</P>--<A NAME="toc97"></A>-<H2>Paradigms for Punjabi</H2>--<P>-<a name="RParadigms"></a>-</P>-<P>-source <A HREF="http://www.grammaticalframework.org/lib/src/punjabi/ParadigmsPnb.gf"><CODE>../src/punjabi/ParadigmsPnb.gf</CODE></A>-</P>--<TABLE BORDER="1" CELLPADDING="4">-<TR>-<TH>Function</TH>-<TH>Type</TH>-<TH COLSPAN="2">Explanation</TH>-</TR>-<TR>-<TD><CODE>masculine</CODE></TD>-<TD><A HREF="#Gender">Gender</A></TD>-<TD><I>-</I></TD>-</TR>-<TR>-<TD><CODE>feminine</CODE></TD>-<TD><A HREF="#Gender">Gender</A></TD>-<TD><I>-</I></TD>-</TR>-<TR>-<TD><CODE>singular</CODE></TD>-<TD><CODE>Number;</CODE></TD>-<TD><I>-</I></TD>-</TR>-<TR>-<TD><CODE>plural</CODE></TD>-<TD><CODE>Number;</CODE></TD>-<TD><I>-</I></TD>-</TR>-<TR>-<TD><CODE>mkN2</CODE></TD>-<TD><A HREF="#N" TITLE="N - common noun">N</A> <CODE>-></CODE> <A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A> <CODE>-></CODE> <CODE>Str</CODE> <CODE>-></CODE> <CODE>N2;</CODE></TD>-<TD><I>-</I></TD>-</TR>-<TR>-<TD><CODE>mkN3</CODE></TD>-<TD><A HREF="#N" TITLE="N - common noun">N</A> <CODE>-></CODE> <A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A> <CODE>-></CODE> <CODE>Str</CODE> <CODE>-></CODE> <CODE>Str-></CODE> <A HREF="#N3" TITLE="N3 - three-place relational noun">N3</A></TD>-<TD><I>-</I></TD>-</TR>-<TR>-<TD><CODE>mkCmpdNoun</CODE></TD>-<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#N" TITLE="N - common noun">N</A> <CODE>-></CODE> <A HREF="#N" TITLE="N - common noun">N</A></TD>-<TD><I>-</I></TD>-</TR>-<TR>-<TD><CODE>mkPN</CODE></TD>-<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#PN" TITLE="PN - proper name">PN</A> <CODE>=</CODE></TD>-<TD><I>-</I></TD>-</TR>-<TR>-<TD><CODE>mkPN</CODE></TD>-<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#Gender">Gender</A> <CODE>-></CODE> <A HREF="#PN" TITLE="PN - proper name">PN</A> <CODE>=</CODE></TD>-<TD><I>-</I></TD>-</TR>-<TR>-<TD><CODE>personalPN</CODE></TD>-<TD><CODE>Str</CODE> <CODE>-></CODE> <CODE>Str</CODE> <CODE>-></CODE> <CODE>Str</CODE> <CODE>-></CODE> <CODE>Str</CODE> <CODE>-></CODE> <CODE>Str</CODE> <CODE>-></CODE> <A HREF="#Number">Number</A> <CODE>-></CODE> <A HREF="#Gender">Gender</A> <CODE>-></CODE> <A HREF="#PPerson">PPerson</A> <CODE>-></CODE> <A HREF="#Pron" TITLE="Pron - personal pronoun">Pron</A> <CODE>=</CODE></TD>-<TD><I>-</I></TD>-</TR>-<TR>-<TD><CODE>demoPN</CODE></TD>-<TD><CODE>Str</CODE> <CODE>-></CODE> <CODE>Str</CODE> <CODE>-></CODE> <CODE>Str</CODE> <CODE>-></CODE> <A 'HREF="#Quant" TITLE="Quant - quantifier ('nucleus' of Det)"'>Quant</A> <CODE>=</CODE></TD>-<TD><I>-</I></TD>-</TR>-<TR>-<TD><CODE>mkDet</CODE></TD>-<TD><CODE>Str</CODE> <CODE>-></CODE> <CODE>Str</CODE> <CODE>-></CODE> <CODE>Str</CODE> <CODE>-></CODE> <CODE>Str</CODE> <CODE>-></CODE> <A HREF="#Number">Number</A> <CODE>-></CODE> <A HREF="#Det" TITLE="Det - determiner phrase">Det</A> <CODE>=</CODE></TD>-<TD><I>-</I></TD>-</TR>-<TR>-<TD><CODE>mkIP</CODE></TD>-<TD><CODE>(x1,x2,x3,x4:Str)</CODE> <CODE>-></CODE> <A HREF="#Number">Number</A> <CODE>-></CODE> <A HREF="#Gender">Gender</A> <CODE>-></CODE> <A HREF="#IP" TITLE="IP - interrogative pronoun">IP</A> <CODE>=</CODE></TD>-<TD><I>-</I></TD>-</TR>-<TR>-<TD><CODE>mkAdN</CODE></TD>-<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#AdN" TITLE="AdN - numeral-modifying adverb">AdN</A> <CODE>=</CODE> <CODE>\s</CODE> <CODE>-></CODE> <CODE>ss</CODE> <CODE>s</CODE></TD>-<TD><I>-</I></TD>-</TR>-<TR>-<TD><CODE>mkA</CODE></TD>-<TD><CODE>Str-></CODE> <A HREF="#A" TITLE="A - one-place adjective">A</A></TD>-<TD><I>-</I></TD>-</TR>-<TR>-<TD><CODE>mkA</CODE></TD>-<TD><CODE>Str</CODE> <CODE>-></CODE> <CODE>Str</CODE> <CODE>-></CODE> <A HREF="#A2" TITLE="A2 - two-place adjective">A2</A></TD>-<TD><I>-</I></TD>-</TR>-<TR>-<TD><CODE>mkV</CODE></TD>-<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#V" TITLE="V - one-place verb">V</A></TD>-<TD><I>-</I></TD>-</TR>-<TR>-<TD><CODE>mkV2</CODE></TD>-<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#V2" TITLE="V2 - two-place verb">V2</A></TD>-<TD><I>-</I></TD>-</TR>-<TR>-<TD><CODE>mkV2</CODE></TD>-<TD><A HREF="#V" TITLE="V - one-place verb">V</A> <CODE>-></CODE> <A HREF="#V2" TITLE="V2 - two-place verb">V2</A></TD>-<TD><I>-</I></TD>-</TR>-<TR>-<TD><CODE>mkV2</CODE></TD>-<TD><A HREF="#V" TITLE="V - one-place verb">V</A> <CODE>-></CODE> <CODE>Str</CODE> <CODE>-></CODE> <A HREF="#V2" TITLE="V2 - two-place verb">V2</A></TD>-<TD><I>-</I></TD>-</TR>-<TR>-<TD><CODE>mkV3</CODE></TD>-<TD><A HREF="#V" TITLE="V - one-place verb">V</A> <CODE>-></CODE> <CODE>Str</CODE> <CODE>-></CODE> <CODE>Str</CODE> <CODE>-></CODE> <CODE>V3;</CODE></TD>-<TD><I>-</I></TD>-</TR>-<TR>-<TD><CODE>mkV2V</CODE></TD>-<TD><A HREF="#V" TITLE="V - one-place verb">V</A> <CODE>-></CODE> <CODE>Str</CODE> <CODE>-></CODE> <CODE>Str</CODE> <CODE>-></CODE> <A HREF="#Bool">Bool</A> <CODE>-></CODE> <A HREF="#V2V" TITLE="V2V - verb with NP and V complement">V2V</A></TD>-<TD><I>-</I></TD>-</TR>-<TR>-<TD><CODE>compoundV</CODE></TD>-<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#V" TITLE="V - one-place verb">V</A> <CODE>-></CODE> <A HREF="#V" TITLE="V - one-place verb">V</A> <CODE>=</CODE> <CODE>\s,v</CODE> <CODE>-></CODE> <CODE>{s</CODE> <CODE>=</CODE> <CODE>\\vf</CODE> <CODE>=></CODE> <CODE>s</CODE> <CODE>++</CODE> <CODE>v.s</CODE> <CODE>!</CODE> <CODE>vf</CODE> <CODE>lock_V</CODE> <CODE>=</CODE> <CODE><>}</CODE></TD>-<TD><I>-</I></TD>-</TR>-<TR>-<TD><CODE>compoundV</CODE></TD>-<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#V2" TITLE="V2 - two-place verb">V2</A> <CODE>-></CODE> <A HREF="#V" TITLE="V - one-place verb">V</A> <CODE>=</CODE> <CODE>\s,v</CODE> <CODE>-></CODE> <CODE>{s</CODE> <CODE>=</CODE> <CODE>\\vf</CODE> <CODE>=></CODE> <CODE>s</CODE> <CODE>++</CODE> <CODE>v.s</CODE> <CODE>!</CODE> <CODE>vf</CODE> <CODE>lock_V</CODE> <CODE>=</CODE> <CODE><>}</CODE></TD>-<TD><I>-</I></TD>-</TR>-<TR>-<TD><CODE>mkAdv</CODE></TD>-<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#Adv" TITLE="Adv - verb-phrase-modifying adverb">Adv</A> <CODE>=</CODE> <CODE>\str</CODE> <CODE>-></CODE> <CODE>{s</CODE> <CODE>=\\</CODE> <CODE>_</CODE> <CODE>=></CODE> <CODE>str</CODE> <CODE>lock_Adv</CODE> <CODE>=</CODE> <CODE><>};</CODE></TD>-<TD><I>-</I></TD>-</TR>-<TR>-<TD><CODE>mkPrep</CODE></TD>-<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A></TD>-<TD><I>-</I></TD>-</TR>-<TR>-<TD><CODE>mkQuant1</CODE></TD>-<TD><A HREF="#Pron" TITLE="Pron - personal pronoun">Pron</A> <CODE>-></CODE> <A 'HREF="#Quant" TITLE="Quant - quantifier ('nucleus' of Det)"'>Quant</A></TD>-<TD><I>-</I></TD>-</TR>-<TR>-<TD><CODE>mkIQuant</CODE></TD>-<TD><CODE>Str</CODE> <CODE>-></CODE> <CODE>Str</CODE> <CODE>-></CODE> <CODE>Str</CODE> <CODE>-></CODE> <CODE>Str</CODE> <CODE>-></CODE> <A HREF="#IQuant">IQuant</A></TD>-<TD><I>-</I></TD>-</TR>-<TR>-<TD><CODE>mkQuant1</CODE></TD>-<TD><A HREF="#Pron" TITLE="Pron - personal pronoun">Pron</A> <CODE>-></CODE> <A 'HREF="#Quant" TITLE="Quant - quantifier ('nucleus' of Det)"'>Quant</A> <CODE>=</CODE> <CODE>\p</CODE> <CODE>-></CODE> <CODE>{s</CODE> <CODE>=</CODE> <CODE>\\_,_,c</CODE> <CODE>=></CODE> <CODE>p.s!c</CODE> <CODE>;a</CODE> <CODE>=</CODE> <CODE>p.a</CODE> <CODE>lock_Quant</CODE> <CODE>=</CODE> <CODE><>};</CODE></TD>-<TD><I>-</I></TD>-</TR>-<TR>-<TD><CODE>mkConj</CODE></TD>-<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#Conj" TITLE="Conj - conjunction">Conj</A></TD>-<TD><I>and (plural agreement)</I></TD>-</TR>-<TR>-<TD><CODE>mkConj</CODE></TD>-<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#Number">Number</A> <CODE>-></CODE> <A HREF="#Conj" TITLE="Conj - conjunction">Conj</A></TD>-<TD><I>or (agrement number given as argument)</I></TD>-</TR>-<TR>-<TD><CODE>mkConj</CODE></TD>-<TD><CODE>Str</CODE> <CODE>-></CODE> <CODE>Str</CODE> <CODE>-></CODE> <A HREF="#Conj" TITLE="Conj - conjunction">Conj</A></TD>-<TD><I>both ... and (plural)</I></TD>-</TR>-<TR>-<TD><CODE>mkConj</CODE></TD>-<TD><CODE>Str</CODE> <CODE>-></CODE> <CODE>Str</CODE> <CODE>-></CODE> <A HREF="#Number">Number</A> <CODE>-></CODE> <A HREF="#Conj" TITLE="Conj - conjunction">Conj</A></TD>-<TD><I>either ... or (agrement number given as argument)</I></TD>-</TR>-<TR>-<TD><CODE>mkConj</CODE></TD>-<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#Conj" TITLE="Conj - conjunction">Conj</A> <CODE>=</CODE> <CODE>\y</CODE> <CODE>-></CODE> <CODE>mk2Conj</CODE> <CODE>[]</CODE> <CODE>y</CODE> <CODE>plural</CODE></TD>-<TD><I>-</I></TD>-</TR>-<TR>-<TD><CODE>mkConj</CODE></TD>-<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#Number">Number</A> <CODE>-></CODE> <A HREF="#Conj" TITLE="Conj - conjunction">Conj</A> <CODE>=</CODE> <CODE>\y,n</CODE> <CODE>-></CODE> <CODE>mk2Conj</CODE> <CODE>[]</CODE> <CODE>y</CODE> <CODE>n</CODE></TD>-<TD><I>-</I></TD>-</TR>-<TR>-<TD><CODE>mkConj</CODE></TD>-<TD><CODE>Str</CODE> <CODE>-></CODE> <CODE>Str</CODE> <CODE>-></CODE> <A HREF="#Conj" TITLE="Conj - conjunction">Conj</A> <CODE>=</CODE> <CODE>\x,y</CODE> <CODE>-></CODE> <CODE>mk2Conj</CODE> <CODE>x</CODE> <CODE>y</CODE> <CODE>plural</CODE></TD>-<TD><I>-</I></TD>-</TR>-<TR>-<TD><CODE>mkConj</CODE></TD>-<TD><CODE>Str</CODE> <CODE>-></CODE> <CODE>Str</CODE> <CODE>-></CODE> <A HREF="#Number">Number</A> <CODE>-></CODE> <A HREF="#Conj" TITLE="Conj - conjunction">Conj</A> <CODE>=</CODE> <CODE>mk2Conj</CODE></TD>-<TD><I>-</I></TD>-</TR>-<TR>-<TD><CODE>mk2Conj</CODE></TD>-<TD><CODE>Str</CODE> <CODE>-></CODE> <CODE>Str</CODE> <CODE>-></CODE> <A HREF="#Number">Number</A> <CODE>-></CODE> <A HREF="#Conj" TITLE="Conj - conjunction">Conj</A> <CODE>=</CODE> <CODE>\x,y,n</CODE> <CODE>-></CODE></TD>-<TD><I>-</I></TD>-</TR>-<TR>-<TD><CODE>mkVV</CODE></TD>-<TD><A HREF="#V" TITLE="V - one-place verb">V</A> <CODE>-></CODE> <A HREF="#VV" TITLE="VV - verb-phrase-complement verb">VV</A> <CODE>=</CODE> <CODE>\v</CODE> <CODE>-></CODE> <CODE>lin</CODE> <A HREF="#VV" TITLE="VV - verb-phrase-complement verb">VV</A> <CODE>(v</CODE> <CODE>**</CODE> <CODE>{isAux</CODE> <CODE>=</CODE> <CODE>False});</CODE></TD>-<TD><I>-</I></TD>-</TR>-</TABLE>--<A NAME="toc98"></A>-<H2>Paradigms for Romanian</H2>--<P>-<a name="RParadigms"></a>-</P>-<P>-source <A HREF="http://www.grammaticalframework.org/lib/src/romanian/ParadigmsRon.gf"><CODE>../src/romanian/ParadigmsRon.gf</CODE></A>-</P>--<TABLE BORDER="1" CELLPADDING="4">-<TR>-<TH>Function</TH>-<TH>Type</TH>-<TH COLSPAN="2">Explanation</TH>-</TR>-<TR>-<TD><CODE>NGender</CODE></TD>-<TD><A HREF="#Type">Type</A></TD>-<TD><I>-</I></TD>-</TR>-<TR>-<TD><CODE>masculine</CODE></TD>-<TD><A HREF="#NGender">NGender</A></TD>-<TD><I>-</I></TD>-</TR>-<TR>-<TD><CODE>feminine</CODE></TD>-<TD><A HREF="#NGender">NGender</A></TD>-<TD><I>-</I></TD>-</TR>-<TR>-<TD><CODE>neuter</CODE></TD>-<TD><A HREF="#NGender">NGender</A></TD>-<TD><I>-</I></TD>-</TR>-<TR>-<TD><CODE>Gender</CODE></TD>-<TD><A HREF="#Type">Type</A></TD>-<TD><I>-</I></TD>-</TR>-<TR>-<TD><CODE>Masculine</CODE></TD>-<TD><A HREF="#Gender">Gender</A></TD>-<TD><I>-</I></TD>-</TR>-<TR>-<TD><CODE>Feminine</CODE></TD>-<TD><A HREF="#Gender">Gender</A></TD>-<TD><I>-</I></TD>-</TR>-<TR>-<TD><CODE>Anim</CODE></TD>-<TD><A HREF="#Type">Type</A></TD>-<TD><I>-</I></TD>-</TR>-<TR>-<TD><CODE>animate</CODE></TD>-<TD><A HREF="#Anim">Anim</A></TD>-<TD><I>-</I></TD>-</TR>-<TR>-<TD><CODE>inanimate</CODE></TD>-<TD><CODE>Anim;</CODE></TD>-<TD><I>-</I></TD>-</TR>-<TR>-<TD><CODE>Number</CODE></TD>-<TD><A HREF="#Type">Type</A></TD>-<TD><I>-</I></TD>-</TR>-<TR>-<TD><CODE>singular</CODE></TD>-<TD><A HREF="#Number">Number</A></TD>-<TD><I>-</I></TD>-</TR>-<TR>-<TD><CODE>plural</CODE></TD>-<TD><A HREF="#Number">Number</A></TD>-<TD><I>-</I></TD>-</TR>-<TR>-<TD><CODE>Preposition</CODE></TD>-<TD><A HREF="#Type">Type</A></TD>-<TD><I>-</I></TD>-</TR>-<TR>-<TD><CODE>NCase</CODE></TD>-<TD><A HREF="#Type">Type</A></TD>-<TD><I>-</I></TD>-</TR>-<TR>-<TD><CODE>Acc</CODE></TD>-<TD><A HREF="#NCase">NCase</A></TD>-<TD><I>-</I></TD>-</TR>-<TR>-<TD><CODE>Dat</CODE></TD>-<TD><A HREF="#NCase">NCase</A></TD>-<TD><I>-</I></TD>-</TR>-<TR>-<TD><CODE>Gen</CODE></TD>-<TD><A HREF="#NCase">NCase</A></TD>-<TD><I>-</I></TD>-</TR>-<TR>-<TD><CODE>Nom</CODE></TD>-<TD><A HREF="#NCase">NCase</A></TD>-<TD><I>-</I></TD>-</TR>-<TR>-<TD><CODE>mkPrep</CODE></TD>-<TD><CODE>Str</CODE> <CODE>-></CODE> <CODE>NCase-></CODE> <A HREF="#Bool">Bool</A> <CODE>-></CODE> <A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A></TD>-<TD><I>-</I></TD>-</TR>-<TR>-<TD><CODE>mkPrep</CODE></TD>-<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#NCase">NCase</A> <CODE>-></CODE> <CODE>Prep;</CODE></TD>-<TD><I>-</I></TD>-</TR>-<TR>-<TD><CODE>noPrep</CODE></TD>-<TD><A HREF="#NCase">NCase</A> <CODE>-></CODE> <A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A></TD>-<TD><I>-</I></TD>-</TR>-<TR>-<TD><CODE>mkN</CODE></TD>-<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#N" TITLE="N - common noun">N</A></TD>-<TD><I>Singular, infers gender and Plural</I></TD>-</TR>-<TR>-<TD><CODE>mkN</CODE></TD>-<TD><CODE>Str</CODE> <CODE>-></CODE> <CODE>Str</CODE> <CODE>-></CODE> <A HREF="#NGender">NGender</A> <CODE>-></CODE> <A HREF="#N" TITLE="N - common noun">N</A></TD>-<TD><I>worst case: Singular + Plural + gender</I></TD>-</TR>-<TR>-<TD><CODE>mkN</CODE></TD>-<TD><CODE>Str</CODE> <CODE>-></CODE> <CODE>Str</CODE> <CODE>-></CODE> <CODE>Str</CODE> <CODE>-></CODE> <A HREF="#N" TITLE="N - common noun">N</A></TD>-<TD><I>very irregular nouns - feminine</I></TD>-</TR>-<TR>-<TD><CODE>mkN</CODE></TD>-<TD><CODE>Str</CODE> <CODE>-></CODE> <CODE>Str</CODE> <CODE>-></CODE> <A HREF="#N" TITLE="N - common noun">N</A></TD>-<TD><I>Singular + Plural, infers gender</I></TD>-</TR>-<TR>-<TD><CODE>mkN</CODE></TD>-<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#NGender">NGender</A> <CODE>-></CODE> <A HREF="#N" TITLE="N - common noun">N</A></TD>-<TD><I>Singular + gender, infers Plural</I></TD>-</TR>-<TR>-<TD><CODE>mkNR</CODE></TD>-<TD><CODE>Str</CODE> <CODE>-></CODE> <CODE>N;</CODE></TD>-<TD><I>-</I></TD>-</TR>-<TR>-<TD><CODE>mkN2</CODE></TD>-<TD><A HREF="#N" TITLE="N - common noun">N</A> <CODE>-></CODE> <A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A> <CODE>-></CODE> <A HREF="#N2" TITLE="N2 - relational noun">N2</A></TD>-<TD><I>-</I></TD>-</TR>-<TR>-<TD><CODE>mkN3</CODE></TD>-<TD><A HREF="#N" TITLE="N - common noun">N</A> <CODE>-></CODE> <A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A> <CODE>-></CODE> <A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A> <CODE>-></CODE> <A HREF="#N3" TITLE="N3 - three-place relational noun">N3</A></TD>-<TD><I>-</I></TD>-</TR>-<TR>-<TD><CODE>mkPN</CODE></TD>-<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#PN" TITLE="PN - proper name">PN</A></TD>-<TD><I>-</I></TD>-</TR>-<TR>-<TD><CODE>mkPN</CODE></TD>-<TD><CODE>Str</CODE> <CODE>-></CODE> <CODE>Str</CODE> <CODE>-></CODE> <A HREF="#Gender">Gender</A> <CODE>-></CODE> <A HREF="#Number">Number</A> <CODE>-></CODE> <A HREF="#PN" TITLE="PN - proper name">PN</A></TD>-<TD><I>-</I></TD>-</TR>-<TR>-<TD><CODE>mkPN</CODE></TD>-<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#Gender">Gender</A> <CODE>-></CODE> <A HREF="#PN" TITLE="PN - proper name">PN</A></TD>-<TD><I>-</I></TD>-</TR>-<TR>-<TD><CODE>mkPN</CODE></TD>-<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#Gender">Gender</A> <CODE>-></CODE> <A HREF="#Number">Number</A> <CODE>-></CODE> <A HREF="#PN" TITLE="PN - proper name">PN</A></TD>-<TD><I>-</I></TD>-</TR>-<TR>-<TD><CODE>mkInAn</CODE></TD>-<TD><A HREF="#PN" TITLE="PN - proper name">PN</A> <CODE>-></CODE> <A HREF="#PN" TITLE="PN - proper name">PN</A></TD>-<TD><I>-</I></TD>-</TR>-<TR>-<TD><CODE>mkPropNoun</CODE></TD>-<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#Gender">Gender</A> <CODE>-></CODE> <A HREF="#PN" TITLE="PN - proper name">PN</A></TD>-<TD><I>-</I></TD>-</TR>-<TR>-<TD><CODE>mkA</CODE></TD>-<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#A" TITLE="A - one-place adjective">A</A></TD>-<TD><I>regular adjectives</I></TD>-</TR>-<TR>-<TD><CODE>mkA</CODE></TD>-<TD><CODE>Str</CODE> <CODE>-></CODE> <CODE>Str</CODE> <CODE>-></CODE> <CODE>Str</CODE> <CODE>-></CODE> <CODE>Str</CODE> <CODE>-></CODE> <CODE>Str</CODE> <CODE>-></CODE> <A HREF="#A" TITLE="A - one-place adjective">A</A> <CODE>--worst</CODE> <CODE>case</CODE></TD>-<TD><I>all 4 forms are needed + form for adverb</I></TD>-</TR>-<TR>-<TD><CODE>mkA</CODE></TD>-<TD><CODE>Str</CODE> <CODE>-></CODE> <CODE>Str</CODE> <CODE>-></CODE> <CODE>Str</CODE> <CODE>-></CODE> <CODE>Str</CODE> <CODE>-></CODE> <A HREF="#A" TITLE="A - one-place adjective">A</A></TD>-<TD><I>4 forms are needed</I></TD>-</TR>-<TR>-<TD><CODE>mkA2</CODE></TD>-<TD><A HREF="#A" TITLE="A - one-place adjective">A</A> <CODE>-></CODE> <A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A> <CODE>-></CODE> <A HREF="#A2" TITLE="A2 - two-place adjective">A2</A></TD>-<TD><I>-</I></TD>-</TR>-<TR>-<TD><CODE>mkV</CODE></TD>-<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#V" TITLE="V - one-place verb">V</A></TD>-<TD><I>-</I></TD>-</TR>-<TR>-<TD><CODE>mkV2S</CODE></TD>-<TD><A HREF="#V" TITLE="V - one-place verb">V</A> <CODE>-></CODE> <A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A> <CODE>-></CODE> <A HREF="#V2S" TITLE="V2S - verb with NP and S complement">V2S</A></TD>-<TD><I>-</I></TD>-</TR>-<TR>-<TD><CODE>mkV2V</CODE></TD>-<TD><A HREF="#V" TITLE="V - one-place verb">V</A> <CODE>-></CODE> <A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A> <CODE>-></CODE> <A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A> <CODE>-></CODE> <A HREF="#V2V" TITLE="V2V - verb with NP and V complement">V2V</A></TD>-<TD><I>-</I></TD>-</TR>-<TR>-<TD><CODE>mkVA</CODE></TD>-<TD><A HREF="#V" TITLE="V - one-place verb">V</A> <CODE>-></CODE> <A HREF="#VA" TITLE="VA - adjective-complement verb">VA</A></TD>-<TD><I>-</I></TD>-</TR>-<TR>-<TD><CODE>mkV2A</CODE></TD>-<TD><A HREF="#V" TITLE="V - one-place verb">V</A> <CODE>-></CODE> <A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A> <CODE>-></CODE> <A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A> <CODE>-></CODE> <A HREF="#V2A" TITLE="V2A - verb with NP and AP complement">V2A</A></TD>-<TD><I>-</I></TD>-</TR>-<TR>-<TD><CODE>mkVQ</CODE></TD>-<TD><A HREF="#V" TITLE="V - one-place verb">V</A> <CODE>-></CODE> <A HREF="#VQ" TITLE="VQ - question-complement verb">VQ</A></TD>-<TD><I>-</I></TD>-</TR>-<TR>-<TD><CODE>mkV2Q</CODE></TD>-<TD><A HREF="#V" TITLE="V - one-place verb">V</A> <CODE>-></CODE> <A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A> <CODE>-></CODE> <A HREF="#V2Q" TITLE="V2Q - verb with NP and Q complement">V2Q</A></TD>-<TD><I>-</I></TD>-</TR>-</TABLE>--<A NAME="toc99"></A>-<H2>Paradigms for Russian</H2>--<P>-<a name="RParadigms"></a>-</P>-<P>-source <A HREF="http://www.grammaticalframework.org/lib/src/russian/ParadigmsRus.gf"><CODE>../src/russian/ParadigmsRus.gf</CODE></A>-</P>--<TABLE BORDER="1" CELLPADDING="4">-<TR>-<TH>Function</TH>-<TH>Type</TH>-<TH COLSPAN="2">Explanation</TH>-</TR>-<TR>-<TD><CODE>Gender</CODE></TD>-<TD><A HREF="#Type">Type</A></TD>-<TD><I>-</I></TD>-</TR>-<TR>-<TD><CODE>masculine</CODE></TD>-<TD><A HREF="#Gender">Gender</A></TD>-<TD><I>-</I></TD>-</TR>-<TR>-<TD><CODE>feminine</CODE></TD>-<TD><A HREF="#Gender">Gender</A></TD>-<TD><I>-</I></TD>-</TR>-<TR>-<TD><CODE>neuter</CODE></TD>-<TD><A HREF="#Gender">Gender</A></TD>-<TD><I>-</I></TD>-</TR>-<TR>-<TD><CODE>Case</CODE></TD>-<TD><A HREF="#Type">Type</A></TD>-<TD><I>-</I></TD>-</TR>-<TR>-<TD><CODE>nominative</CODE></TD>-<TD><A HREF="#Case">Case</A></TD>-<TD><I>-</I></TD>-</TR>-<TR>-<TD><CODE>genitive</CODE></TD>-<TD><A HREF="#Case">Case</A></TD>-<TD><I>-</I></TD>-</TR>-<TR>-<TD><CODE>dative</CODE></TD>-<TD><A HREF="#Case">Case</A></TD>-<TD><I>-</I></TD>-</TR>-<TR>-<TD><CODE>accusative</CODE></TD>-<TD><A HREF="#Case">Case</A></TD>-<TD><I>-</I></TD>-</TR>-<TR>-<TD><CODE>instructive</CODE></TD>-<TD><A HREF="#Case">Case</A></TD>-<TD><I>-</I></TD>-</TR>-<TR>-<TD><CODE>prepositional</CODE></TD>-<TD><A HREF="#Case">Case</A></TD>-<TD><I>-</I></TD>-</TR>-<TR>-<TD><CODE>Number</CODE></TD>-<TD><A HREF="#Type">Type</A></TD>-<TD><I>-</I></TD>-</TR>-<TR>-<TD><CODE>singular</CODE></TD>-<TD><A HREF="#Number">Number</A></TD>-<TD><I>-</I></TD>-</TR>-<TR>-<TD><CODE>plural</CODE></TD>-<TD><A HREF="#Number">Number</A></TD>-<TD><I>-</I></TD>-</TR>-<TR>-<TD><CODE>mkN</CODE></TD>-<TD><CODE>(karta</CODE> <CODE>:</CODE> <CODE>Str)</CODE> <CODE>-></CODE> <A HREF="#N" TITLE="N - common noun">N</A></TD>-<TD><I>-</I></TD>-</TR>-<TR>-<TD><CODE>mkN</CODE></TD>-<TD><CODE>(tigr</CODE> <CODE>:</CODE> <CODE>Str)</CODE> <CODE>-></CODE> <A HREF="#Animacy">Animacy</A> <CODE>-></CODE> <A HREF="#N" TITLE="N - common noun">N</A></TD>-<TD><I>-</I></TD>-</TR>-<TR>-<TD><CODE>mkN</CODE></TD>-<TD><CODE>(nomSg,</CODE> <CODE>genSg,</CODE> <CODE>datSg,</CODE> <CODE>accSg,</CODE> <CODE>instSg,</CODE> <CODE>preposSg,</CODE> <CODE>prepos2Sg,</CODE> <CODE>nomPl,</CODE> <CODE>genPl,</CODE> <CODE>datPl,</CODE> <CODE>accPl,</CODE> <CODE>instPl,</CODE> <CODE>preposPl</CODE> <CODE>:</CODE> <CODE>Str)</CODE> <CODE>-></CODE> <A HREF="#Gender">Gender</A> <CODE>-></CODE> <A HREF="#Animacy">Animacy</A> <CODE>-></CODE> <A HREF="#N" TITLE="N - common noun">N</A></TD>-<TD><I>-</I></TD>-</TR>-<TR>-<TD><CODE>mkN2</CODE></TD>-<TD><A HREF="#N" TITLE="N - common noun">N</A> <CODE>-></CODE> <A HREF="#N2" TITLE="N2 - relational noun">N2</A></TD>-<TD><I>-</I></TD>-</TR>-<TR>-<TD><CODE>mkN2</CODE></TD>-<TD><A HREF="#N" TITLE="N - common noun">N</A> <CODE>-></CODE> <A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A> <CODE>-></CODE> <A HREF="#N2" TITLE="N2 - relational noun">N2</A></TD>-<TD><I>-</I></TD>-</TR>-<TR>-<TD><CODE>mkN3</CODE></TD>-<TD><A HREF="#N" TITLE="N - common noun">N</A> <CODE>-></CODE> <A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A> <CODE>-></CODE> <A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A> <CODE>-></CODE> <A HREF="#N3" TITLE="N3 - three-place relational noun">N3</A></TD>-<TD><I>-</I></TD>-</TR>-<TR>-<TD><CODE>mkPN</CODE></TD>-<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#Gender">Gender</A> <CODE>-></CODE> <A HREF="#Animacy">Animacy</A> <CODE>-></CODE> <A HREF="#PN" TITLE="PN - proper name">PN</A></TD>-<TD><I>"Иван", "Маша"</I></TD>-</TR>-<TR>-<TD><CODE>nounPN</CODE></TD>-<TD><A HREF="#N" TITLE="N - common noun">N</A> <CODE>-></CODE> <A HREF="#PN" TITLE="PN - proper name">PN</A></TD>-<TD><I>-</I></TD>-</TR>-<TR>-<TD><CODE>mkA</CODE></TD>-<TD><CODE>(positive</CODE> <CODE>:</CODE> <CODE>Str)</CODE> <CODE>-></CODE> <A HREF="#A" TITLE="A - one-place adjective">A</A></TD>-<TD><I>-</I></TD>-</TR>-<TR>-<TD><CODE>mkA</CODE></TD>-<TD><CODE>(positive,</CODE> <CODE>comparative</CODE> <CODE>:</CODE> <CODE>Str)</CODE> <CODE>-></CODE> <A HREF="#A" TITLE="A - one-place adjective">A</A></TD>-<TD><I>-</I></TD>-</TR>-<TR>-<TD><CODE>mkA2</CODE></TD>-<TD><A HREF="#A" TITLE="A - one-place adjective">A</A> <CODE>-></CODE> <CODE>Str</CODE> <CODE>-></CODE> <A HREF="#Case">Case</A> <CODE>-></CODE> <A HREF="#A2" TITLE="A2 - two-place adjective">A2</A></TD>-<TD><I>"делим на"</I></TD>-</TR>-<TR>-<TD><CODE>mkAdv</CODE></TD>-<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#Adv" TITLE="Adv - verb-phrase-modifying adverb">Adv</A></TD>-<TD><I>-</I></TD>-</TR>-<TR>-<TD><CODE>mkPrep</CODE></TD>-<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#Case">Case</A> <CODE>-></CODE> <A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A></TD>-<TD><I>as in German</I></TD>-</TR>-<TR>-<TD><CODE>mkV</CODE></TD>-<TD><A HREF="#Aspect">Aspect</A> <CODE>-></CODE> <CODE>(presSg1,presSg2,presSg3,presPl1,presPl2,presPl3,pastSgMasc,imp,inf:</CODE> <CODE>Str)</CODE> <CODE>-></CODE> <A HREF="#V" TITLE="V - one-place verb">V</A></TD>-<TD><I>-</I></TD>-</TR>-<TR>-<TD><CODE>mkV2</CODE></TD>-<TD><A HREF="#V" TITLE="V - one-place verb">V</A> <CODE>-></CODE> <CODE>Str</CODE> <CODE>-></CODE> <A HREF="#Case">Case</A> <CODE>-></CODE> <A HREF="#V2" TITLE="V2 - two-place verb">V2</A></TD>-<TD><I>"войти в дом"; "в", accusative</I></TD>-</TR>-<TR>-<TD><CODE>mkV3</CODE></TD>-<TD><A HREF="#V" TITLE="V - one-place verb">V</A> <CODE>-></CODE> <CODE>Str</CODE> <CODE>-></CODE> <CODE>Str</CODE> <CODE>-></CODE> <A HREF="#Case">Case</A> <CODE>-></CODE> <A HREF="#Case">Case</A> <CODE>-></CODE> <A HREF="#V3" TITLE="V3 - three-place verb">V3</A></TD>-<TD><I>"сложить письмо в конверт"</I></TD>-</TR>-<TR>-<TD><CODE>mkVS</CODE></TD>-<TD><A HREF="#V" TITLE="V - one-place verb">V</A> <CODE>-></CODE> <A HREF="#VS" TITLE="VS - sentence-complement verb">VS</A></TD>-<TD><I>-</I></TD>-</TR>-<TR>-<TD><CODE>mkVQ</CODE></TD>-<TD><A HREF="#V" TITLE="V - one-place verb">V</A> <CODE>-></CODE> <A HREF="#VQ" TITLE="VQ - question-complement verb">VQ</A></TD>-<TD><I>-</I></TD>-</TR>-<TR>-<TD><CODE>dirV2</CODE></TD>-<TD><A HREF="#V" TITLE="V - one-place verb">V</A> <CODE>-></CODE> <A HREF="#V2" TITLE="V2 - two-place verb">V2</A></TD>-<TD><I>"видеть", "любить"</I></TD>-</TR>-<TR>-<TD><CODE>tvDirDir</CODE></TD>-<TD><A HREF="#V" TITLE="V - one-place verb">V</A> <CODE>-></CODE> <A HREF="#V3" TITLE="V3 - three-place verb">V3</A></TD>-<TD><I>-</I></TD>-</TR>-</TABLE>--<A NAME="toc100"></A>-<H2>Paradigms for Spanish</H2>--<P>-<a name="RParadigms"></a>-</P>-<P>-source <A HREF="http://www.grammaticalframework.org/lib/src/spanish/ParadigmsSpa.gf"><CODE>../src/spanish/ParadigmsSpa.gf</CODE></A>-</P>--<TABLE BORDER="1" CELLPADDING="4">-<TR>-<TH>Function</TH>-<TH>Type</TH>-<TH COLSPAN="2">Explanation</TH>-</TR>-<TR>-<TD><CODE>Gender</CODE></TD>-<TD><A HREF="#Type">Type</A></TD>-<TD><I>-</I></TD>-</TR>-<TR>-<TD><CODE>masculine</CODE></TD>-<TD><A HREF="#Gender">Gender</A></TD>-<TD><I>-</I></TD>-</TR>-<TR>-<TD><CODE>feminine</CODE></TD>-<TD><A HREF="#Gender">Gender</A></TD>-<TD><I>-</I></TD>-</TR>-<TR>-<TD><CODE>Number</CODE></TD>-<TD><A HREF="#Type">Type</A></TD>-<TD><I>-</I></TD>-</TR>-<TR>-<TD><CODE>singular</CODE></TD>-<TD><A HREF="#Number">Number</A></TD>-<TD><I>-</I></TD>-</TR>-<TR>-<TD><CODE>plural</CODE></TD>-<TD><A HREF="#Number">Number</A></TD>-<TD><I>-</I></TD>-</TR>-<TR>-<TD><CODE>accusative</CODE></TD>-<TD><A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A></TD>-<TD><I>direct object</I></TD>-</TR>-<TR>-<TD><CODE>genitive</CODE></TD>-<TD><A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A></TD>-<TD><I>preposition "de" and its contractions</I></TD>-</TR>-<TR>-<TD><CODE>dative</CODE></TD>-<TD><A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A></TD>-<TD><I>preposition "a" and its contractions</I></TD>-</TR>-<TR>-<TD><CODE>mkPrep</CODE></TD>-<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A></TD>-<TD><I>other preposition</I></TD>-</TR>-<TR>-<TD><CODE>mkN</CODE></TD>-<TD><CODE>(luz</CODE> <CODE>:</CODE> <CODE>Str)</CODE> <CODE>-></CODE> <A HREF="#N" TITLE="N - common noun">N</A></TD>-<TD><I>predictable; feminine for "-a"/"-z", otherwise masculine</I></TD>-</TR>-<TR>-<TD><CODE>mkN</CODE></TD>-<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#Gender">Gender</A> <CODE>-></CODE> <A HREF="#N" TITLE="N - common noun">N</A></TD>-<TD><I>force gender</I></TD>-</TR>-<TR>-<TD><CODE>mkN</CODE></TD>-<TD><CODE>(baston,bastones</CODE> <CODE>:</CODE> <CODE>Str)</CODE> <CODE>-></CODE> <A HREF="#Gender">Gender</A> <CODE>-></CODE> <A HREF="#N" TITLE="N - common noun">N</A></TD>-<TD><I>worst case</I></TD>-</TR>-<TR>-<TD><CODE>compN</CODE></TD>-<TD><A HREF="#N" TITLE="N - common noun">N</A> <CODE>-></CODE> <CODE>Str</CODE> <CODE>-></CODE> <A HREF="#N" TITLE="N - common noun">N</A></TD>-<TD><I>compound, e.g. "número" + "de teléfono"</I></TD>-</TR>-<TR>-<TD><CODE>mkN2</CODE></TD>-<TD><A HREF="#N" TITLE="N - common noun">N</A> <CODE>-></CODE> <A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A> <CODE>-></CODE> <A HREF="#N2" TITLE="N2 - relational noun">N2</A></TD>-<TD><I>relational noun with preposition</I></TD>-</TR>-<TR>-<TD><CODE>deN2</CODE></TD>-<TD><A HREF="#N" TITLE="N - common noun">N</A> <CODE>-></CODE> <A HREF="#N2" TITLE="N2 - relational noun">N2</A></TD>-<TD><I>relational noun with preposition "de"</I></TD>-</TR>-<TR>-<TD><CODE>aN2</CODE></TD>-<TD><A HREF="#N" TITLE="N - common noun">N</A> <CODE>-></CODE> <A HREF="#N2" TITLE="N2 - relational noun">N2</A></TD>-<TD><I>relational noun with preposition "a"</I></TD>-</TR>-<TR>-<TD><CODE>mkN3</CODE></TD>-<TD><A HREF="#N" TITLE="N - common noun">N</A> <CODE>-></CODE> <A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A> <CODE>-></CODE> <A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A> <CODE>-></CODE> <A HREF="#N3" TITLE="N3 - three-place relational noun">N3</A></TD>-<TD><I>prepositions for two complements</I></TD>-</TR>-<TR>-<TD><CODE>mkPN</CODE></TD>-<TD><CODE>(Anna</CODE> <CODE>:</CODE> <CODE>Str)</CODE> <CODE>-></CODE> <A HREF="#PN" TITLE="PN - proper name">PN</A></TD>-<TD><I>feminine for "-a"</I></TD>-</TR>-<TR>-<TD><CODE>mkPN</CODE></TD>-<TD><CODE>(Pilar</CODE> <CODE>:</CODE> <CODE>Str)</CODE> <CODE>-></CODE> <A HREF="#Gender">Gender</A> <CODE>-></CODE> <A HREF="#PN" TITLE="PN - proper name">PN</A></TD>-<TD><I>force gender</I></TD>-</TR>-<TR>-<TD><CODE>mkA</CODE></TD>-<TD><CODE>(util</CODE> <CODE>:</CODE> <CODE>Str)</CODE> <CODE>-></CODE> <A HREF="#A" TITLE="A - one-place adjective">A</A></TD>-<TD><I>predictable adjective</I></TD>-</TR>-<TR>-<TD><CODE>mkA</CODE></TD>-<TD><CODE>(espanol,espanola</CODE> <CODE>:</CODE> <CODE>Str)</CODE> <CODE>-></CODE> <A HREF="#A" TITLE="A - one-place adjective">A</A></TD>-<TD><I>-</I></TD>-</TR>-<TR>-<TD><CODE>mkA</CODE></TD>-<TD><CODE>(solo,sola,solos,solas,solamente</CODE> <CODE>:</CODE> <CODE>Str)</CODE> <CODE>-></CODE> <A HREF="#A" TITLE="A - one-place adjective">A</A></TD>-<TD><I>worst-case</I></TD>-</TR>-<TR>-<TD><CODE>mkA</CODE></TD>-<TD><CODE>(bueno</CODE> <CODE>:</CODE> <CODE>A)</CODE> <CODE>-></CODE> <CODE>(mejor</CODE> <CODE>:</CODE> <CODE>A)</CODE> <CODE>-></CODE> <A HREF="#A" TITLE="A - one-place adjective">A</A></TD>-<TD><I>special comparison (default with "mas")</I></TD>-</TR>-<TR>-<TD><CODE>prefixA</CODE></TD>-<TD><A HREF="#A" TITLE="A - one-place adjective">A</A> <CODE>-></CODE> <A HREF="#A" TITLE="A - one-place adjective">A</A></TD>-<TD><I>adjective before noun (default after noun)</I></TD>-</TR>-<TR>-<TD><CODE>mkA2</CODE></TD>-<TD><A HREF="#A" TITLE="A - one-place adjective">A</A> <CODE>-></CODE> <A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A> <CODE>-></CODE> <A HREF="#A2" TITLE="A2 - two-place adjective">A2</A></TD>-<TD><I>e.g. "casado" + dative</I></TD>-</TR>-<TR>-<TD><CODE>mkQuant</CODE></TD>-<TD><CODE>(ese,esa,esos,esas</CODE> <CODE>:</CODE> <CODE>Str)</CODE> <CODE>-></CODE> <A 'HREF="#Quant" TITLE="Quant - quantifier ('nucleus' of Det)"'>Quant</A></TD>-<TD><I>-</I></TD>-</TR>-<TR>-<TD><CODE>mkDet</CODE></TD>-<TD><CODE>(mucho,mucha</CODE> <CODE>:</CODE> <CODE>Str)</CODE> <CODE>-></CODE> <A HREF="#Number">Number</A> <CODE>-></CODE> <A HREF="#Det" TITLE="Det - determiner phrase">Det</A></TD>-<TD><I>-</I></TD>-</TR>-<TR>-<TD><CODE>mkOrd</CODE></TD>-<TD><A HREF="#A" TITLE="A - one-place adjective">A</A> <CODE>-></CODE> <A HREF="#Ord" TITLE="Ord - ordinal number (used in Det)">Ord</A></TD>-<TD><I>-</I></TD>-</TR>-<TR>-<TD><CODE>mkAdv</CODE></TD>-<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#Adv" TITLE="Adv - verb-phrase-modifying adverb">Adv</A></TD>-<TD><I>-</I></TD>-</TR>-<TR>-<TD><CODE>mkAdV</CODE></TD>-<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#AdV" TITLE="Adv - verb-phrase-modifying adverb">AdV</A></TD>-<TD><I>-</I></TD>-</TR>-<TR>-<TD><CODE>mkAdA</CODE></TD>-<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#AdA" TITLE="AdA - adjective-modifying adverb">AdA</A></TD>-<TD><I>-</I></TD>-</TR>-<TR>-<TD><CODE>mkAdN</CODE></TD>-<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#AdN" TITLE="AdN - numeral-modifying adverb">AdN</A></TD>-<TD><I>-</I></TD>-</TR>-<TR>-<TD><CODE>mkV</CODE></TD>-<TD><CODE>(pagar</CODE> <CODE>:</CODE> <CODE>Str)</CODE> <CODE>-></CODE> <A HREF="#V" TITLE="V - one-place verb">V</A></TD>-<TD><I>regular in "-ar", "-er", ".ir"</I></TD>-</TR>-<TR>-<TD><CODE>mkV</CODE></TD>-<TD><CODE>(mostrar,muestro</CODE> <CODE>:</CODE> <CODE>Str)</CODE> <CODE>-></CODE> <A HREF="#V" TITLE="V - one-place verb">V</A></TD>-<TD><I>regular with vowel alternation</I></TD>-</TR>-<TR>-<TD><CODE>mkV</CODE></TD>-<TD><A HREF="#Verbum">Verbum</A> <CODE>-></CODE> <A HREF="#V" TITLE="V - one-place verb">V</A></TD>-<TD><I>import verb constructed with BeschSpa</I></TD>-</TR>-<TR>-<TD><CODE>reflV</CODE></TD>-<TD><A HREF="#V" TITLE="V - one-place verb">V</A> <CODE>-></CODE> <A HREF="#V" TITLE="V - one-place verb">V</A></TD>-<TD><I>reflexive verb</I></TD>-</TR>-<TR>-<TD><CODE>special_ppV</CODE></TD>-<TD><A HREF="#V" TITLE="V - one-place verb">V</A> <CODE>-></CODE> <CODE>Str</CODE> <CODE>-></CODE> <A HREF="#V" TITLE="V - one-place verb">V</A></TD>-<TD><I>deviant past participle, e.g. abrir - abierto</I></TD>-</TR>-<TR>-<TD><CODE>mkV2</CODE></TD>-<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#V2" TITLE="V2 - two-place verb">V2</A></TD>-<TD><I>regular, direct object</I></TD>-</TR>-<TR>-<TD><CODE>mkV2</CODE></TD>-<TD><A HREF="#V" TITLE="V - one-place verb">V</A> <CODE>-></CODE> <A HREF="#V2" TITLE="V2 - two-place verb">V2</A></TD>-<TD><I>direct object</I></TD>-</TR>-<TR>-<TD><CODE>mkV2</CODE></TD>-<TD><A HREF="#V" TITLE="V - one-place verb">V</A> <CODE>-></CODE> <A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A> <CODE>-></CODE> <A HREF="#V2" TITLE="V2 - two-place verb">V2</A></TD>-<TD><I>other object</I></TD>-</TR>-<TR>-<TD><CODE>mkV3</CODE></TD>-<TD><A HREF="#V" TITLE="V - one-place verb">V</A> <CODE>-></CODE> <A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A> <CODE>-></CODE> <A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A> <CODE>-></CODE> <A HREF="#V3" TITLE="V3 - three-place verb">V3</A></TD>-<TD><I>e.g. hablar, a, di</I></TD>-</TR>-<TR>-<TD><CODE>dirV3</CODE></TD>-<TD><A HREF="#V" TITLE="V - one-place verb">V</A> <CODE>-></CODE> <A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A> <CODE>-></CODE> <A HREF="#V3" TITLE="V3 - three-place verb">V3</A></TD>-<TD><I>e.g. dar,(accusative),a</I></TD>-</TR>-<TR>-<TD><CODE>dirdirV3</CODE></TD>-<TD><A HREF="#V" TITLE="V - one-place verb">V</A> <CODE>-></CODE> <A HREF="#V3" TITLE="V3 - three-place verb">V3</A></TD>-<TD><I>e.g. dar,(dative),(accusative)</I></TD>-</TR>-<TR>-<TD><CODE>mkVS</CODE></TD>-<TD><A HREF="#V" TITLE="V - one-place verb">V</A> <CODE>-></CODE> <A HREF="#VS" TITLE="VS - sentence-complement verb">VS</A></TD>-<TD><I>-</I></TD>-</TR>-<TR>-<TD><CODE>mkV2S</CODE></TD>-<TD><A HREF="#V" TITLE="V - one-place verb">V</A> <CODE>-></CODE> <A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A> <CODE>-></CODE> <A HREF="#V2S" TITLE="V2S - verb with NP and S complement">V2S</A></TD>-<TD><I>-</I></TD>-</TR>-<TR>-<TD><CODE>mkVV</CODE></TD>-<TD><A HREF="#V" TITLE="V - one-place verb">V</A> <CODE>-></CODE> <A HREF="#VV" TITLE="VV - verb-phrase-complement verb">VV</A></TD>-<TD><I>plain infinitive: "quiero hablar"</I></TD>-</TR>-<TR>-<TD><CODE>deVV</CODE></TD>-<TD><A HREF="#V" TITLE="V - one-place verb">V</A> <CODE>-></CODE> <A HREF="#VV" TITLE="VV - verb-phrase-complement verb">VV</A></TD>-<TD><I>"terminar de hablar"</I></TD>-</TR>-<TR>-<TD><CODE>aVV</CODE></TD>-<TD><A HREF="#V" TITLE="V - one-place verb">V</A> <CODE>-></CODE> <A HREF="#VV" TITLE="VV - verb-phrase-complement verb">VV</A></TD>-<TD><I>"aprender a hablar"</I></TD>-</TR>-<TR>-<TD><CODE>mkV2V</CODE></TD>-<TD><A HREF="#V" TITLE="V - one-place verb">V</A> <CODE>-></CODE> <A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A> <CODE>-></CODE> <A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A> <CODE>-></CODE> <A HREF="#V2V" TITLE="V2V - verb with NP and V complement">V2V</A></TD>-<TD><I>-</I></TD>-</TR>-<TR>-<TD><CODE>mkVA</CODE></TD>-<TD><A HREF="#V" TITLE="V - one-place verb">V</A> <CODE>-></CODE> <A HREF="#VA" TITLE="VA - adjective-complement verb">VA</A></TD>-<TD><I>-</I></TD>-</TR>-<TR>-<TD><CODE>mkV2A</CODE></TD>-<TD><A HREF="#V" TITLE="V - one-place verb">V</A> <CODE>-></CODE> <A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A> <CODE>-></CODE> <A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A> <CODE>-></CODE> <A HREF="#V2A" TITLE="V2A - verb with NP and AP complement">V2A</A></TD>-<TD><I>-</I></TD>-</TR>-<TR>-<TD><CODE>mkVQ</CODE></TD>-<TD><A HREF="#V" TITLE="V - one-place verb">V</A> <CODE>-></CODE> <A HREF="#VQ" TITLE="VQ - question-complement verb">VQ</A></TD>-<TD><I>-</I></TD>-</TR>-<TR>-<TD><CODE>mkV2Q</CODE></TD>-<TD><A HREF="#V" TITLE="V - one-place verb">V</A> <CODE>-></CODE> <A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A> <CODE>-></CODE> <A HREF="#V2Q" TITLE="V2Q - verb with NP and Q complement">V2Q</A></TD>-<TD><I>-</I></TD>-</TR>-</TABLE>--<A NAME="toc101"></A>-<H2>Paradigms for Swedish</H2>--<P>-<a name="RParadigms"></a>-</P>-<P>-source <A HREF="http://www.grammaticalframework.org/lib/src/swedish/ParadigmsSwe.gf"><CODE>../src/swedish/ParadigmsSwe.gf</CODE></A>-</P>--<TABLE BORDER="1" CELLPADDING="4">-<TR>-<TH>Function</TH>-<TH>Type</TH>-<TH COLSPAN="2">Explanation</TH>-</TR>-<TR>-<TD><CODE>Gender</CODE></TD>-<TD><A HREF="#Type">Type</A></TD>-<TD><I>-</I></TD>-</TR>-<TR>-<TD><CODE>utrum</CODE></TD>-<TD><A HREF="#Gender">Gender</A></TD>-<TD><I>the "en" gender</I></TD>-</TR>-<TR>-<TD><CODE>neutrum</CODE></TD>-<TD><A HREF="#Gender">Gender</A></TD>-<TD><I>the "ett" gender</I></TD>-</TR>-<TR>-<TD><CODE>Number</CODE></TD>-<TD><A HREF="#Type">Type</A></TD>-<TD><I>-</I></TD>-</TR>-<TR>-<TD><CODE>singular</CODE></TD>-<TD><A HREF="#Number">Number</A></TD>-<TD><I>-</I></TD>-</TR>-<TR>-<TD><CODE>plural</CODE></TD>-<TD><A HREF="#Number">Number</A></TD>-<TD><I>-</I></TD>-</TR>-<TR>-<TD><CODE>mkPrep</CODE></TD>-<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A></TD>-<TD><I>e.g. "till"</I></TD>-</TR>-<TR>-<TD><CODE>noPrep</CODE></TD>-<TD><A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A></TD>-<TD><I>empty string</I></TD>-</TR>-<TR>-<TD><CODE>mkN</CODE></TD>-<TD><CODE>(apa</CODE> <CODE>:</CODE> <CODE>Str)</CODE> <CODE>-></CODE> <A HREF="#N" TITLE="N - common noun">N</A></TD>-<TD><I>predictable nouns: apa-apor, rike-riken, or bil-bilar</I></TD>-</TR>-<TR>-<TD><CODE>mkN</CODE></TD>-<TD><CODE>(nyckel,nycklar</CODE> <CODE>:</CODE> <CODE>Str)</CODE> <CODE>-></CODE> <A HREF="#N" TITLE="N - common noun">N</A></TD>-<TD><I>singular and plural suffice for most nouns</I></TD>-</TR>-<TR>-<TD><CODE>mkN</CODE></TD>-<TD><CODE>(museum,museet,museer,museerna</CODE> <CODE>:</CODE> <CODE>Str)</CODE> <CODE>-></CODE> <A HREF="#N" TITLE="N - common noun">N</A></TD>-<TD><I>worst case for nouns</I></TD>-</TR>-<TR>-<TD><CODE>mkN2</CODE></TD>-<TD><A HREF="#N" TITLE="N - common noun">N</A> <CODE>-></CODE> <A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A> <CODE>-></CODE> <A HREF="#N2" TITLE="N2 - relational noun">N2</A></TD>-<TD><I>e.g. syster - till</I></TD>-</TR>-<TR>-<TD><CODE>mkN3</CODE></TD>-<TD><A HREF="#N" TITLE="N - common noun">N</A> <CODE>-></CODE> <A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A> <CODE>-></CODE> <A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A> <CODE>-></CODE> <A HREF="#N3" TITLE="N3 - three-place relational noun">N3</A></TD>-<TD><I>e.g. flyg - från - till</I></TD>-</TR>-<TR>-<TD><CODE>mkPN</CODE></TD>-<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#PN" TITLE="PN - proper name">PN</A></TD>-<TD><I>default gender utrum</I></TD>-</TR>-<TR>-<TD><CODE>mkPN</CODE></TD>-<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#Gender">Gender</A> <CODE>-></CODE> <A HREF="#PN" TITLE="PN - proper name">PN</A></TD>-<TD><I>set other gender</I></TD>-</TR>-<TR>-<TD><CODE>mkPN</CODE></TD>-<TD><CODE>(jesus,jesu</CODE> <CODE>:</CODE> <CODE>Str)</CODE> <CODE>-></CODE> <A HREF="#Gender">Gender</A> <CODE>-></CODE> <A HREF="#PN" TITLE="PN - proper name">PN</A></TD>-<TD><I>irregular genitive</I></TD>-</TR>-<TR>-<TD><CODE>mkA</CODE></TD>-<TD><CODE>(billig</CODE> <CODE>:</CODE> <CODE>Str)</CODE> <CODE>-></CODE> <A HREF="#A" TITLE="A - one-place adjective">A</A></TD>-<TD><I>-</I></TD>-</TR>-<TR>-<TD><CODE>mkA</CODE></TD>-<TD><CODE>(bred,brett</CODE> <CODE>:</CODE> <CODE>Str)</CODE> <CODE>-></CODE> <A HREF="#A" TITLE="A - one-place adjective">A</A></TD>-<TD><I>predictable adjective</I></TD>-</TR>-<TR>-<TD><CODE>mkA</CODE></TD>-<TD><CODE>(tung,tyngre,tyngst</CODE> <CODE>:</CODE> <CODE>Str)</CODE> <CODE>-></CODE> <A HREF="#A" TITLE="A - one-place adjective">A</A></TD>-<TD><I>irregular comparison</I></TD>-</TR>-<TR>-<TD><CODE>mkA</CODE></TD>-<TD><CODE>(god,gott,goda,battre,bast</CODE> <CODE>:</CODE> <CODE>Str)</CODE> <CODE>-></CODE> <A HREF="#A" TITLE="A - one-place adjective">A</A></TD>-<TD><I>very irregular</I></TD>-</TR>-<TR>-<TD><CODE>mkA</CODE></TD>-<TD><CODE>(liten,litet,lilla,sma,mindre,minst,minsta</CODE> <CODE>:</CODE> <CODE>Str)</CODE> <CODE>-></CODE> <A HREF="#A" TITLE="A - one-place adjective">A</A></TD>-<TD><I>worst case</I></TD>-</TR>-<TR>-<TD><CODE>compoundA</CODE></TD>-<TD><A HREF="#A" TITLE="A - one-place adjective">A</A> <CODE>-></CODE> <A HREF="#A" TITLE="A - one-place adjective">A</A></TD>-<TD><I>force comparison by mera - mest</I></TD>-</TR>-<TR>-<TD><CODE>mkA2</CODE></TD>-<TD><A HREF="#A" TITLE="A - one-place adjective">A</A> <CODE>-></CODE> <A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A> <CODE>-></CODE> <A HREF="#A2" TITLE="A2 - two-place adjective">A2</A></TD>-<TD><I>e.g. delbar - med</I></TD>-</TR>-<TR>-<TD><CODE>mkAdv</CODE></TD>-<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#Adv" TITLE="Adv - verb-phrase-modifying adverb">Adv</A></TD>-<TD><I>postverbal, e.g. här</I></TD>-</TR>-<TR>-<TD><CODE>mkAdV</CODE></TD>-<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#AdV" TITLE="Adv - verb-phrase-modifying adverb">AdV</A></TD>-<TD><I>preverbal, e.g. alltid</I></TD>-</TR>-<TR>-<TD><CODE>mkAdA</CODE></TD>-<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#AdA" TITLE="AdA - adjective-modifying adverb">AdA</A></TD>-<TD><I>modify adjective, e.g. tämligen</I></TD>-</TR>-<TR>-<TD><CODE>mkV</CODE></TD>-<TD><CODE>(stämmer</CODE> <CODE>:</CODE> <CODE>Str)</CODE> <CODE>-></CODE> <A HREF="#V" TITLE="V - one-place verb">V</A></TD>-<TD><I>predictable verb: use present indicative</I></TD>-</TR>-<TR>-<TD><CODE>mkV</CODE></TD>-<TD><CODE>(dricka,drack,druckit</CODE> <CODE>:</CODE> <CODE>Str)</CODE> <CODE>-></CODE> <A HREF="#V" TITLE="V - one-place verb">V</A></TD>-<TD><I>the theme of an irregular verb</I></TD>-</TR>-<TR>-<TD><CODE>mkV</CODE></TD>-<TD><CODE>(gå,går,gå,gick,gått,gången</CODE> <CODE>:</CODE> <CODE>Str)</CODE> <CODE>-></CODE> <A HREF="#V" TITLE="V - one-place verb">V</A></TD>-<TD><I>worst case</I></TD>-</TR>-<TR>-<TD><CODE>mkV</CODE></TD>-<TD><A HREF="#V" TITLE="V - one-place verb">V</A> <CODE>-></CODE> <CODE>Str</CODE> <CODE>-></CODE> <A HREF="#V" TITLE="V - one-place verb">V</A></TD>-<TD><I>particle verb, e.g. passa - på</I></TD>-</TR>-<TR>-<TD><CODE>depV</CODE></TD>-<TD><A HREF="#V" TITLE="V - one-place verb">V</A> <CODE>-></CODE> <A HREF="#V" TITLE="V - one-place verb">V</A></TD>-<TD><I>deponent verb, e.g. andas</I></TD>-</TR>-<TR>-<TD><CODE>reflV</CODE></TD>-<TD><A HREF="#V" TITLE="V - one-place verb">V</A> <CODE>-></CODE> <A HREF="#V" TITLE="V - one-place verb">V</A></TD>-<TD><I>reflexive verb, e.g. ångra sig</I></TD>-</TR>-<TR>-<TD><CODE>mkV2</CODE></TD>-<TD><A HREF="#V" TITLE="V - one-place verb">V</A> <CODE>-></CODE> <A HREF="#V2" TITLE="V2 - two-place verb">V2</A></TD>-<TD><I>direct transitive</I></TD>-</TR>-<TR>-<TD><CODE>mkV2</CODE></TD>-<TD><A HREF="#V" TITLE="V - one-place verb">V</A> <CODE>-></CODE> <A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A> <CODE>-></CODE> <A HREF="#V2" TITLE="V2 - two-place verb">V2</A></TD>-<TD><I>preposition for complement</I></TD>-</TR>-<TR>-<TD><CODE>mkV3</CODE></TD>-<TD><A HREF="#V" TITLE="V - one-place verb">V</A> <CODE>-></CODE> <A HREF="#V3" TITLE="V3 - three-place verb">V3</A></TD>-<TD><I>direct ditransitive</I></TD>-</TR>-<TR>-<TD><CODE>mkV3</CODE></TD>-<TD><A HREF="#V" TITLE="V - one-place verb">V</A> <CODE>-></CODE> <A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A> <CODE>-></CODE> <A HREF="#V3" TITLE="V3 - three-place verb">V3</A></TD>-<TD><I>preposition for last argument</I></TD>-</TR>-<TR>-<TD><CODE>mkV3</CODE></TD>-<TD><A HREF="#V" TITLE="V - one-place verb">V</A> <CODE>-></CODE> <A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A> <CODE>-></CODE> <A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A> <CODE>-></CODE> <A HREF="#V3" TITLE="V3 - three-place verb">V3</A></TD>-<TD><I>prepositions for both complements</I></TD>-</TR>-<TR>-<TD><CODE>mkVS</CODE></TD>-<TD><A HREF="#V" TITLE="V - one-place verb">V</A> <CODE>-></CODE> <A HREF="#VS" TITLE="VS - sentence-complement verb">VS</A></TD>-<TD><I>-</I></TD>-</TR>-<TR>-<TD><CODE>mkV2S</CODE></TD>-<TD><A HREF="#V" TITLE="V - one-place verb">V</A> <CODE>-></CODE> <A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A> <CODE>-></CODE> <A HREF="#V2S" TITLE="V2S - verb with NP and S complement">V2S</A></TD>-<TD><I>-</I></TD>-</TR>-<TR>-<TD><CODE>mkVV</CODE></TD>-<TD><A HREF="#V" TITLE="V - one-place verb">V</A> <CODE>-></CODE> <A HREF="#VV" TITLE="VV - verb-phrase-complement verb">VV</A></TD>-<TD><I>-</I></TD>-</TR>-<TR>-<TD><CODE>mkV2V</CODE></TD>-<TD><A HREF="#V" TITLE="V - one-place verb">V</A> <CODE>-></CODE> <A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A> <CODE>-></CODE> <A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A> <CODE>-></CODE> <A HREF="#V2V" TITLE="V2V - verb with NP and V complement">V2V</A></TD>-<TD><I>-</I></TD>-</TR>-<TR>-<TD><CODE>mkVA</CODE></TD>-<TD><A HREF="#V" TITLE="V - one-place verb">V</A> <CODE>-></CODE> <A HREF="#VA" TITLE="VA - adjective-complement verb">VA</A></TD>-<TD><I>-</I></TD>-</TR>-<TR>-<TD><CODE>mkV2A</CODE></TD>-<TD><A HREF="#V" TITLE="V - one-place verb">V</A> <CODE>-></CODE> <A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A> <CODE>-></CODE> <A HREF="#V2A" TITLE="V2A - verb with NP and AP complement">V2A</A></TD>-<TD><I>-</I></TD>-</TR>-<TR>-<TD><CODE>mkVQ</CODE></TD>-<TD><A HREF="#V" TITLE="V - one-place verb">V</A> <CODE>-></CODE> <A HREF="#VQ" TITLE="VQ - question-complement verb">VQ</A></TD>-<TD><I>-</I></TD>-</TR>-<TR>-<TD><CODE>mkV2Q</CODE></TD>-<TD><A HREF="#V" TITLE="V - one-place verb">V</A> <CODE>-></CODE> <A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A> <CODE>-></CODE> <A HREF="#V2Q" TITLE="V2Q - verb with NP and Q complement">V2Q</A></TD>-<TD><I>-</I></TD>-</TR>-</TABLE>--<A NAME="toc102"></A>-<H2>Paradigms for Urdu</H2>--<P>-<a name="RParadigms"></a>-</P>-<P>-source <A HREF="http://www.grammaticalframework.org/lib/src/urdu/ParadigmsUrd.gf"><CODE>../src/urdu/ParadigmsUrd.gf</CODE></A>-</P>--<TABLE BORDER="1" CELLPADDING="4">-<TR>-<TH>Function</TH>-<TH>Type</TH>-<TH COLSPAN="2">Explanation</TH>-</TR>-<TR>-<TD><CODE>masculine</CODE></TD>-<TD><A HREF="#Gender">Gender</A></TD>-<TD><I>-</I></TD>-</TR>-<TR>-<TD><CODE>feminine</CODE></TD>-<TD><A HREF="#Gender">Gender</A></TD>-<TD><I>-</I></TD>-</TR>-<TR>-<TD><CODE>singular</CODE></TD>-<TD><CODE>Number;</CODE></TD>-<TD><I>-</I></TD>-</TR>-<TR>-<TD><CODE>plural</CODE></TD>-<TD><CODE>Number;</CODE></TD>-<TD><I>-</I></TD>-</TR>-<TR>-<TD><CODE>mkN</CODE></TD>-<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#N" TITLE="N - common noun">N</A></TD>-<TD><I>Regular nouns like lRka, gender is judged from noun ending</I></TD>-</TR>-<TR>-<TD><CODE>mkN</CODE></TD>-<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#Gender">Gender</A> <CODE>-></CODE> <A HREF="#N" TITLE="N - common noun">N</A></TD>-<TD><I>nouns whose gender is irregular like Admy</I></TD>-</TR>-<TR>-<TD><CODE>mkN</CODE></TD>-<TD><CODE>(x1,_,_,_,_,x6</CODE> <CODE>:</CODE> <CODE>Str)</CODE> <CODE>-></CODE> <A HREF="#Gender">Gender</A> <CODE>-></CODE> <A HREF="#N" TITLE="N - common noun">N</A></TD>-<TD><I>worst case</I></TD>-</TR>-<TR>-<TD><CODE>mkN2</CODE></TD>-<TD><A HREF="#N" TITLE="N - common noun">N</A> <CODE>-></CODE> <A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A> <CODE>-></CODE> <CODE>Str</CODE> <CODE>-></CODE> <CODE>N2;</CODE></TD>-<TD><I>e.g maN ky</I></TD>-</TR>-<TR>-<TD><CODE>mkN3</CODE></TD>-<TD><A HREF="#N" TITLE="N - common noun">N</A> <CODE>-></CODE> <A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A> <CODE>-></CODE> <CODE>Str</CODE> <CODE>-></CODE> <CODE>Str-></CODE> <A HREF="#N3" TITLE="N3 - three-place relational noun">N3</A></TD>-<TD><I>e.g faSlh - sE - ka</I></TD>-</TR>-<TR>-<TD><CODE>mkCmpdNoun</CODE></TD>-<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#N" TITLE="N - common noun">N</A> <CODE>-></CODE> <A HREF="#N" TITLE="N - common noun">N</A></TD>-<TD><I>e.g t-alb elm</I></TD>-</TR>-<TR>-<TD><CODE>mkPN</CODE></TD>-<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#PN" TITLE="PN - proper name">PN</A> <CODE>=</CODE> <CODE>\s</CODE> <CODE>-></CODE> <CODE>let</CODE> <CODE>n</CODE> <CODE>=</CODE> <CODE>regNoun</CODE> <CODE>s</CODE> <CODE>in</CODE> <CODE>{s</CODE> <CODE>=</CODE> <CODE>n.s</CODE> <CODE>!</CODE> <A HREF="#Sg">Sg</A> <CODE>g</CODE> <CODE>=</CODE> <CODE>n.g</CODE> <CODE>lock_PN</CODE> <CODE>=</CODE> <CODE><>}</CODE></TD>-<TD><I>-</I></TD>-</TR>-<TR>-<TD><CODE>personalPN</CODE></TD>-<TD><CODE>Str</CODE> <CODE>-></CODE> <CODE>Str</CODE> <CODE>-></CODE> <CODE>Str</CODE> <CODE>-></CODE> <CODE>Str</CODE> <CODE>-></CODE> <CODE>Str</CODE> <CODE>-></CODE> <CODE>Str</CODE> <CODE>-></CODE> <CODE>Str</CODE> <CODE>-></CODE> <A HREF="#Number">Number</A> <CODE>-></CODE> <A HREF="#Gender">Gender</A> <CODE>-></CODE> <A HREF="#UPerson">UPerson</A> <CODE>-></CODE> <A HREF="#Pron" TITLE="Pron - personal pronoun">Pron</A> <CODE>=</CODE></TD>-<TD><I>-</I></TD>-</TR>-<TR>-<TD><CODE>demoPN</CODE></TD>-<TD><CODE>Str</CODE> <CODE>-></CODE> <CODE>Str</CODE> <CODE>-></CODE> <CODE>Str</CODE> <CODE>-></CODE> <A 'HREF="#Quant" TITLE="Quant - quantifier ('nucleus' of Det)"'>Quant</A> <CODE>=</CODE> <CODE>\s1,s2,s3</CODE> <CODE>-></CODE> <CODE>let</CODE> <CODE>n</CODE> <CODE>=</CODE> <CODE>makeDemonPronForm</CODE> <CODE>s1</CODE> <CODE>s2</CODE> <CODE>s3</CODE> <CODE>in</CODE> <CODE>{s</CODE> <CODE>=</CODE> <CODE>n.s</CODE> <CODE>a</CODE> <CODE>=</CODE> <CODE>defaultAgr</CODE> <CODE>lock_Quant</CODE> <CODE>=</CODE> <CODE><>};</CODE></TD>-<TD><I>-</I></TD>-</TR>-<TR>-<TD><CODE>mkDet</CODE></TD>-<TD><CODE>Str</CODE> <CODE>-></CODE> <CODE>Str</CODE> <CODE>-></CODE> <CODE>Str</CODE> <CODE>-></CODE> <CODE>Str</CODE> <CODE>-></CODE> <A HREF="#Number">Number</A> <CODE>-></CODE> <A HREF="#Det" TITLE="Det - determiner phrase">Det</A> <CODE>=</CODE> <CODE>\s1,s2,s3,s4,nb</CODE> <CODE>-></CODE> <CODE>let</CODE> <CODE>dt</CODE> <CODE>=</CODE> <CODE>makeDet</CODE> <CODE>s1</CODE> <CODE>s2</CODE> <CODE>s3</CODE> <CODE>s4</CODE> <CODE>nb</CODE> <CODE>in</CODE> <CODE>{s</CODE> <CODE>=</CODE> <CODE>dt.s</CODE> <CODE>n</CODE> <CODE>=</CODE> <CODE>nb</CODE> <CODE>lock_Det</CODE> <CODE>=</CODE> <CODE><>};</CODE></TD>-<TD><I>-</I></TD>-</TR>-<TR>-<TD><CODE>mkIP</CODE></TD>-<TD><CODE>(x1,x2,x3:Str)</CODE> <CODE>-></CODE> <A HREF="#Number">Number</A> <CODE>-></CODE> <A HREF="#Gender">Gender</A> <CODE>-></CODE> <A HREF="#IP" TITLE="IP - interrogative pronoun">IP</A> <CODE>=</CODE> <CODE>\s1,s2,s3,n,g</CODE> <CODE>-></CODE> <CODE>let</CODE> <CODE>p</CODE> <CODE>=</CODE> <CODE>mkIntPronForm</CODE> <CODE>s1</CODE> <CODE>s2</CODE> <CODE>s3</CODE> <CODE>in</CODE> <CODE>{</CODE> <CODE>s</CODE> <CODE>=</CODE> <CODE>p.s</CODE> <CODE>n</CODE> <CODE>=</CODE> <CODE>n</CODE> <CODE>g</CODE> <CODE>=</CODE> <CODE>g</CODE> <CODE>lock_IP</CODE> <CODE>=</CODE> <CODE><>};</CODE></TD>-<TD><I>-</I></TD>-</TR>-<TR>-<TD><CODE>mkAdN</CODE></TD>-<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#AdN" TITLE="AdN - numeral-modifying adverb">AdN</A> <CODE>=</CODE> <CODE>\s</CODE> <CODE>-></CODE> <CODE>{s</CODE> <CODE>=</CODE> <CODE>s</CODE> <CODE>p</CODE> <CODE>=</CODE> <A HREF="#False">False</A> <CODE>lock_AdN</CODE> <CODE>=</CODE> <CODE><>}</CODE></TD>-<TD><I>-</I></TD>-</TR>-<TR>-<TD><CODE>mkA</CODE></TD>-<TD><CODE>Str-></CODE> <A HREF="#A" TITLE="A - one-place adjective">A</A></TD>-<TD><I>e.g ach'a</I></TD>-</TR>-<TR>-<TD><CODE>mkA</CODE></TD>-<TD><CODE>Str</CODE> <CODE>-></CODE> <CODE>Str</CODE> <CODE>-></CODE> <A HREF="#A2" TITLE="A2 - two-place adjective">A2</A></TD>-<TD><I>e.g sE Xady krna</I></TD>-</TR>-<TR>-<TD><CODE>mkA2</CODE></TD>-<TD><A HREF="#A" TITLE="A - one-place adjective">A</A> <CODE>-></CODE> <CODE>Str</CODE> <CODE>-></CODE> <A HREF="#A2" TITLE="A2 - two-place adjective">A2</A></TD>-<TD><I>-</I></TD>-</TR>-<TR>-<TD><CODE>mkCompoundA</CODE></TD>-<TD><CODE>Str</CODE> <CODE>-></CODE> <CODE>Str</CODE> <CODE>-></CODE> <A HREF="#A" TITLE="A - one-place adjective">A</A></TD>-<TD><I>e.g dra hwa</I></TD>-</TR>-<TR>-<TD><CODE>mkV</CODE></TD>-<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#V" TITLE="V - one-place verb">V</A></TD>-<TD><I>regular verbs like swna</I></TD>-</TR>-<TR>-<TD><CODE>mkV2</CODE></TD>-<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#V2" TITLE="V2 - two-place verb">V2</A></TD>-<TD><I>e.g pyna</I></TD>-</TR>-<TR>-<TD><CODE>mkV2</CODE></TD>-<TD><A HREF="#V" TITLE="V - one-place verb">V</A> <CODE>-></CODE> <A HREF="#V2" TITLE="V2 - two-place verb">V2</A></TD>-<TD><I>e.g pyna</I></TD>-</TR>-<TR>-<TD><CODE>mkV2</CODE></TD>-<TD><A HREF="#V" TITLE="V - one-place verb">V</A> <CODE>-></CODE> <CODE>Str</CODE> <CODE>-></CODE> <A HREF="#V2" TITLE="V2 - two-place verb">V2</A></TD>-<TD><I>e.g bnd krna</I></TD>-</TR>-<TR>-<TD><CODE>dirV2</CODE></TD>-<TD><A HREF="#V" TITLE="V - one-place verb">V</A> <CODE>-></CODE> <A HREF="#V2" TITLE="V2 - two-place verb">V2</A> <CODE>=</CODE> <CODE>\v</CODE> <CODE>-></CODE> <CODE>v</CODE> <CODE>**</CODE> <CODE>{c2</CODE> <CODE>=</CODE> <CODE>{s</CODE> <CODE>=</CODE> <CODE>[]</CODE> <CODE>c</CODE> <CODE>=</CODE> <CODE>VTrans}</CODE> <CODE>lock_V2</CODE> <CODE>=</CODE> <CODE><>}</CODE></TD>-<TD><I>-</I></TD>-</TR>-<TR>-<TD><CODE>mkV3</CODE></TD>-<TD><A HREF="#V" TITLE="V - one-place verb">V</A> <CODE>-></CODE> <CODE>Str</CODE> <CODE>-></CODE> <CODE>Str</CODE> <CODE>-></CODE> <CODE>V3;</CODE></TD>-<TD><I>e.g bycna</I></TD>-</TR>-<TR>-<TD><CODE>mkV2V</CODE></TD>-<TD><A HREF="#V" TITLE="V - one-place verb">V</A> <CODE>-></CODE> <CODE>Str</CODE> <CODE>-></CODE> <CODE>Str</CODE> <CODE>-></CODE> <A HREF="#Bool">Bool</A> <CODE>-></CODE> <A HREF="#V2V" TITLE="V2V - verb with NP and V complement">V2V</A></TD>-<TD><I>e.g eltja krna - sE - kw</I></TD>-</TR>-<TR>-<TD><CODE>dirdirV3</CODE></TD>-<TD><A HREF="#V" TITLE="V - one-place verb">V</A> <CODE>-></CODE> <A HREF="#V3" TITLE="V3 - three-place verb">V3</A></TD>-<TD><I>-</I></TD>-</TR>-<TR>-<TD><CODE>compoundV</CODE></TD>-<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#V" TITLE="V - one-place verb">V</A> <CODE>-></CODE> <A HREF="#V" TITLE="V - one-place verb">V</A></TD>-<TD><I>e.g barX hwna</I></TD>-</TR>-<TR>-<TD><CODE>compoundV</CODE></TD>-<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#V2" TITLE="V2 - two-place verb">V2</A> <CODE>-></CODE> <A HREF="#V" TITLE="V - one-place verb">V</A></TD>-<TD><I>e.g bnd krna</I></TD>-</TR>-<TR>-<TD><CODE>mkAdv</CODE></TD>-<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#Adv" TITLE="Adv - verb-phrase-modifying adverb">Adv</A></TD>-<TD><I>e.g yhaN</I></TD>-</TR>-<TR>-<TD><CODE>mkAdv</CODE></TD>-<TD><CODE>Str</CODE> <CODE>-></CODE> <CODE>Str</CODE> <CODE>-></CODE> <A HREF="#Adv" TITLE="Adv - verb-phrase-modifying adverb">Adv</A></TD>-<TD><I>-</I></TD>-</TR>-<TR>-<TD><CODE>mkPrep</CODE></TD>-<TD><CODE>Str</CODE> <CODE>-></CODE> <CODE>Str</CODE> <CODE>-></CODE> <A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A></TD>-<TD><I>e.g ka - ky</I></TD>-</TR>-<TR>-<TD><CODE>mkIQuant</CODE></TD>-<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#IQuant">IQuant</A> <CODE>=</CODE> <CODE>\s</CODE> <CODE>-></CODE> <CODE>makeIQuant</CODE> <CODE>s</CODE></TD>-<TD><I>-</I></TD>-</TR>-<TR>-<TD><CODE>mkConj</CODE></TD>-<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#Conj" TITLE="Conj - conjunction">Conj</A></TD>-<TD><I>and (plural agreement)</I></TD>-</TR>-<TR>-<TD><CODE>mkConj</CODE></TD>-<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#Number">Number</A> <CODE>-></CODE> <A HREF="#Conj" TITLE="Conj - conjunction">Conj</A></TD>-<TD><I>or (agrement number given as argument)</I></TD>-</TR>-<TR>-<TD><CODE>mkConj</CODE></TD>-<TD><CODE>Str</CODE> <CODE>-></CODE> <CODE>Str</CODE> <CODE>-></CODE> <A HREF="#Conj" TITLE="Conj - conjunction">Conj</A></TD>-<TD><I>both ... and (plural)</I></TD>-</TR>-<TR>-<TD><CODE>mkConj</CODE></TD>-<TD><CODE>Str</CODE> <CODE>-></CODE> <CODE>Str</CODE> <CODE>-></CODE> <A HREF="#Number">Number</A> <CODE>-></CODE> <A HREF="#Conj" TITLE="Conj - conjunction">Conj</A></TD>-<TD><I>either ... or (agrement number given as argument)</I></TD>-</TR>-<TR>-<TD><CODE>mkConj</CODE></TD>-<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#Conj" TITLE="Conj - conjunction">Conj</A> <CODE>=</CODE> <CODE>\y</CODE> <CODE>-></CODE> <CODE>mk2Conj</CODE> <CODE>[]</CODE> <CODE>y</CODE> <CODE>plural</CODE></TD>-<TD><I>-</I></TD>-</TR>-<TR>-<TD><CODE>mkConj</CODE></TD>-<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#Number">Number</A> <CODE>-></CODE> <A HREF="#Conj" TITLE="Conj - conjunction">Conj</A> <CODE>=</CODE> <CODE>\y,n</CODE> <CODE>-></CODE> <CODE>mk2Conj</CODE> <CODE>[]</CODE> <CODE>y</CODE> <CODE>n</CODE></TD>-<TD><I>-</I></TD>-</TR>-<TR>-<TD><CODE>mkConj</CODE></TD>-<TD><CODE>Str</CODE> <CODE>-></CODE> <CODE>Str</CODE> <CODE>-></CODE> <A HREF="#Conj" TITLE="Conj - conjunction">Conj</A> <CODE>=</CODE> <CODE>\x,y</CODE> <CODE>-></CODE> <CODE>mk2Conj</CODE> <CODE>x</CODE> <CODE>y</CODE> <CODE>plural</CODE></TD>-<TD><I>-</I></TD>-</TR>-<TR>-<TD><CODE>mkConj</CODE></TD>-<TD><CODE>Str</CODE> <CODE>-></CODE> <CODE>Str</CODE> <CODE>-></CODE> <A HREF="#Number">Number</A> <CODE>-></CODE> <A HREF="#Conj" TITLE="Conj - conjunction">Conj</A> <CODE>=</CODE> <CODE>mk2Conj</CODE></TD>-<TD><I>-</I></TD>-</TR>-<TR>-<TD><CODE>mk2Conj</CODE></TD>-<TD><CODE>Str</CODE> <CODE>-></CODE> <CODE>Str</CODE> <CODE>-></CODE> <A HREF="#Number">Number</A> <CODE>-></CODE> <A HREF="#Conj" TITLE="Conj - conjunction">Conj</A> <CODE>=</CODE> <CODE>\x,y,n</CODE> <CODE>-></CODE></TD>-<TD><I>-</I></TD>-</TR>-<TR>-<TD><CODE>mkVS</CODE></TD>-<TD><A HREF="#V" TITLE="V - one-place verb">V</A> <CODE>-></CODE> <CODE>VS;</CODE></TD>-<TD><I>e.g drna</I></TD>-</TR>-<TR>-<TD><CODE>mkVV</CODE></TD>-<TD><A HREF="#V" TITLE="V - one-place verb">V</A> <CODE>-></CODE> <A HREF="#VV" TITLE="VV - verb-phrase-complement verb">VV</A> <CODE>=</CODE></TD>-<TD><I>e.g cahna</I></TD>-</TR>-<TR>-<TD><CODE>mkAdA</CODE></TD>-<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#AdA" TITLE="AdA - adjective-modifying adverb">AdA</A></TD>-<TD><I>-</I></TD>-</TR>-<TR>-<TD><CODE>mkVQ</CODE></TD>-<TD><A HREF="#V" TITLE="V - one-place verb">V</A> <CODE>-></CODE> <A HREF="#VQ" TITLE="VQ - question-complement verb">VQ</A></TD>-<TD><I>e.g janna</I></TD>-</TR>-</TABLE>--<A NAME="toc103"></A>-<H1>Additional Libraries</H1>--<A NAME="toc104"></A>-<H2>The Prelude module</H2>--<P>-The <CODE>Prelude</CODE> defines commonly used utility functions, in particular for-strings and booleans.-</P>--<TABLE BORDER="1" CELLPADDING="4">-<TR>-<TH>Oper</TH>-<TH>Type</TH>-<TH COLSPAN="2">Explanation</TH>-</TR>-<TR>-<TD><CODE>SS</CODE></TD>-<TD><CODE>Type</CODE></TD>-<TD>the type <CODE>{s : Str}</CODE></TD>-</TR>-<TR>-<TD><CODE>ss</CODE></TD>-<TD><CODE>Str -> SS</CODE></TD>-<TD>record from string</TD>-</TR>-<TR>-<TD><CODE>nonExist</CODE></TD>-<TD><CODE>Str</CODE></TD>-<TD>missing form</TD>-</TR>-<TR>-<TD><CODE>optStr</CODE></TD>-<TD><CODE>Str -> Str</CODE></TD>-<TD>optional string</TD>-</TR>-<TR>-<TD><CODE>bothWays</CODE></TD>-<TD><CODE>(x,y : Str) -> Str</CODE></TD>-<TD>either <CODE>x ++ y</CODE> or <CODE>y ++ x</CODE></TD>-</TR>-<TR>-<TD><CODE>Bool</CODE></TD>-<TD><CODE>PType</CODE></TD>-<TD>values <CODE>True</CODE> and <CODE>False</CODE></TD>-</TR>-<TR>-<TD><CODE>andB</CODE></TD>-<TD><CODE>(_,_ : Bool) -> Bool</CODE></TD>-<TD>conjunction</TD>-</TR>-<TR>-<TD><CODE>orB</CODE></TD>-<TD><CODE>(_,_ : Bool) -> Bool</CODE></TD>-<TD>disjunction</TD>-</TR>-<TR>-<TD><CODE>notB</CODE></TD>-<TD><CODE>Bool -> Bool</CODE></TD>-<TD>negation</TD>-</TR>-<TR>-<TD><CODE>if_then_else</CODE></TD>-<TD><CODE>(A:Type)->Bool->A->A->A</CODE></TD>-<TD>conditional</TD>-</TR>-<TR>-<TD><CODE>init</CODE></TD>-<TD><CODE>Str -> Str</CODE></TD>-<TD>drop last character</TD>-</TR>-<TR>-<TD><CODE>last</CODE></TD>-<TD><CODE>Str -> Str</CODE></TD>-<TD>return last character</TD>-</TR>-<TR>-<TD><CODE>glue</CODE></TD>-<TD><CODE>Str -> Str -> Str</CODE></TD>-<TD>glue tokens together</TD>-</TR>-</TABLE>--<A NAME="toc105"></A>-<H2>The Predefined module</H2>--<P>-These functions are hard-coded in GF. They are available without explicit opening, by the used of qualified names, e.g. <CODE>Predef.tk</CODE>.-</P>--<TABLE BORDER="1" CELLPADDING="4">-<TR>-<TH>operation</TH>-<TH>type</TH>-<TH COLSPAN="2">explanation</TH>-</TR>-<TR>-<TD><CODE>PBool</CODE></TD>-<TD><CODE>PType</CODE></TD>-<TD><CODE>PTrue | PFalse</CODE></TD>-</TR>-<TR>-<TD><CODE>Error</CODE></TD>-<TD><CODE>Type</CODE></TD>-<TD>the empty type</TD>-</TR>-<TR>-<TD><CODE>Integer</CODE></TD>-<TD><CODE>Type</CODE></TD>-<TD>the type of integers</TD>-</TR>-<TR>-<TD><CODE>Ints</CODE></TD>-<TD><CODE>Integer -> Type</CODE></TD>-<TD>integers from 0 to n</TD>-</TR>-<TR>-<TD><CODE>error</CODE></TD>-<TD><CODE>Str -> Error</CODE></TD>-<TD>forms error message</TD>-</TR>-<TR>-<TD><CODE>length</CODE></TD>-<TD><CODE>Str -> Int</CODE></TD>-<TD>length of string</TD>-</TR>-<TR>-<TD><CODE>drop</CODE></TD>-<TD><CODE>Integer -> Str -> Str</CODE></TD>-<TD>drop prefix of length</TD>-</TR>-<TR>-<TD><CODE>take</CODE></TD>-<TD><CODE>Integer -> Str -> Str</CODE></TD>-<TD>take prefix of length</TD>-</TR>-<TR>-<TD><CODE>tk</CODE></TD>-<TD><CODE>Integer -> Str -> Str</CODE></TD>-<TD>drop suffix of length</TD>-</TR>-<TR>-<TD><CODE>dp</CODE></TD>-<TD><CODE>Integer -> Str -> Str</CODE></TD>-<TD>take suffix of length</TD>-</TR>-<TR>-<TD><CODE>eqInt</CODE></TD>-<TD><CODE>Integer -> Integer -> PBool</CODE></TD>-<TD>test if equal integers</TD>-</TR>-<TR>-<TD><CODE>lessInt</CODE></TD>-<TD><CODE>Integer -> Integer -> PBool</CODE></TD>-<TD>test order of integers</TD>-</TR>-<TR>-<TD><CODE>plus</CODE></TD>-<TD><CODE>Integer -> Integer -> Integer</CODE></TD>-<TD>add integers</TD>-</TR>-<TR>-<TD><CODE>eqStr</CODE></TD>-<TD><CODE>Str -> Str -> PBool</CODE></TD>-<TD>test if equal strings</TD>-</TR>-<TR>-<TD><CODE>occur</CODE></TD>-<TD><CODE>Str -> Str -> PBool</CODE></TD>-<TD>test if occurs as substring</TD>-</TR>-<TR>-<TD><CODE>occurs</CODE></TD>-<TD><CODE>Str -> Str -> PBool</CODE></TD>-<TD>test if any char occurs</TD>-</TR>-<TR>-<TD><CODE>show</CODE></TD>-<TD><CODE>(P : Type) -> P -> Str</CODE></TD>-<TD>convert param to string</TD>-</TR>-<TR>-<TD><CODE>toStr</CODE></TD>-<TD><CODE>(L : Type) -> L -> Str</CODE></TD>-<TD>find the "first" string</TD>-</TR>-</TABLE>--<A NAME="toc106"></A>-<H2>The Formal module</H2>--<P>-This module is used for defining formal languages, in particular ones that-use precedence levels and parentheses for grouping subexpressions.-</P>--<TABLE BORDER="1" CELLPADDING="4">-<TR>-<TH>Oper</TH>-<TH>Type</TH>-<TH COLSPAN="2">Explanation</TH>-</TR>-<TR>-<TD><CODE>Prec</CODE></TD>-<TD><CODE>PType</CODE></TD>-<TD>precedence levels 0..4</TD>-</TR>-<TR>-<TD><CODE>TermPrec</CODE></TD>-<TD><CODE>Type</CODE></TD>-<TD>string with precedence</TD>-</TR>-<TR>-<TD><CODE>mkPrec</CODE></TD>-<TD><CODE>Prec -> Str -> TermPrec</CODE></TD>-<TD>construct a <CODE>TermPrec</CODE></TD>-</TR>-<TR>-<TD><CODE>top</CODE></TD>-<TD><CODE>TermPrec -> Str</CODE></TD>-<TD>top term (lowest prec.)</TD>-</TR>-<TR>-<TD><CODE>constant</CODE></TD>-<TD><CODE>Str -> TermPrec</CODE></TD>-<TD>atomic (highest prec.)</TD>-</TR>-<TR>-<TD><CODE>infixl</CODE></TD>-<TD><CODE>Prec->Str->(_,_:TermPrec)->TermPrec</CODE></TD>-<TD>left-assoc. infix</TD>-</TR>-<TR>-<TD><CODE>infixr</CODE></TD>-<TD><CODE>Prec->Str->(_,_:TermPrec)->TermPrec</CODE></TD>-<TD>right-assoc. infix</TD>-</TR>-<TR>-<TD><CODE>infixn</CODE></TD>-<TD><CODE>Prec->Str->(_,_:TermPrec)->TermPrec</CODE></TD>-<TD>non-assoc. infix</TD>-</TR>-<TR>-<TD><CODE>usePrec</CODE></TD>-<TD><CODE>Prec -> TermPrec -> Str</CODE></TD>-<TD>use term on given level</TD>-</TR>-</TABLE>--<A NAME="toc107"></A>-<H2>The Symbolic module</H2>--<P>-This module is used for embedding symbolic notation in natural-language-text constructed by the resource grammar API. It works for all resource-languages.-</P>--<TABLE BORDER="1" CELLPADDING="4">-<TR>-<TH>Function</TH>-<TH>Type</TH>-<TH COLSPAN="2">Example</TH>-</TR>-<TR>-<TD><CODE>symb</CODE></TD>-<TD><CODE>Str -> NP</CODE></TD>-<TD ALIGN="right"><I>x</I></TD>-</TR>-<TR>-<TD><CODE>symb</CODE></TD>-<TD><CODE>Int -> NP</CODE></TD>-<TD ALIGN="right"><I>23</I></TD>-</TR>-<TR>-<TD><CODE>symb</CODE></TD>-<TD><CODE>Float -> NP</CODE></TD>-<TD ALIGN="right"><I>0.99</I></TD>-</TR>-<TR>-<TD><CODE>symb</CODE></TD>-<TD><CODE>CN -> Numeral -> NP</CODE></TD>-<TD ALIGN="right"><I>level four</I></TD>-</TR>-<TR>-<TD><CODE>symb</CODE></TD>-<TD><CODE>Det -> N+ -> Numeral -> NP</CODE></TD>-<TD ALIGN="right"><I>the level four</I></TD>-</TR>-<TR>-<TD><CODE>symb</CODE></TD>-<TD><CODE>Det -> CN -> [Symb] -> NP</CODE></TD>-<TD ALIGN="right"><I>the levels i, j and k</I></TD>-</TR>-<TR>-<TD><CODE>symb</CODE></TD>-<TD><CODE>Symb -> S</CODE></TD>-<TD ALIGN="right"><I>A</I> (formula)</TD>-</TR>-<TR>-<TD><CODE>symb</CODE></TD>-<TD><CODE>Symb -> Card</CODE></TD>-<TD ALIGN="right"><I>n</I> (number)</TD>-</TR>-<TR>-<TD><CODE>mkSymb</CODE></TD>-<TD><CODE>Str -> Symb</CODE></TD>-<TD ALIGN="right"><I>x</I></TD>-</TR>-</TABLE>--<A NAME="toc108"></A>-<H2>The Combinators module</H2>--<P>-This module gives shortcuts for defining predicates (<CODE>pred</CODE>) and function -expressions (<CODE>app</CODE>). It works for all resource languages.-</P>--<TABLE BORDER="1" CELLPADDING="4">-<TR>-<TH>Function</TH>-<TH>Type</TH>-<TH COLSPAN="2">Example</TH>-</TR>-<TR>-<TD><CODE>pred</CODE></TD>-<TD><CODE>V -> NP -> Cl</CODE></TD>-<TD ALIGN="right"><I>x converges</I></TD>-</TR>-<TR>-<TD><CODE>pred</CODE></TD>-<TD><CODE>V2 -> NP -> NP -> Cl</CODE></TD>-<TD ALIGN="right"><I>x intersects y</I></TD>-</TR>-<TR>-<TD><CODE>pred</CODE></TD>-<TD><CODE>V -> NP -> NP -> Cl</CODE></TD>-<TD ALIGN="right"><I>x and y intersect</I></TD>-</TR>-<TR>-<TD><CODE>pred</CODE></TD>-<TD><CODE>A -> NP -> Cl</CODE></TD>-<TD ALIGN="right"><I>x is even</I></TD>-</TR>-<TR>-<TD><CODE>pred</CODE></TD>-<TD><CODE>A2 -> NP -> NP -> Cl</CODE></TD>-<TD ALIGN="right"><I>x is divisible by y</I></TD>-</TR>-<TR>-<TD><CODE>pred</CODE></TD>-<TD><CODE>A -> NP -> NP -> Cl</CODE></TD>-<TD ALIGN="right"><I>x and y are equal</I></TD>-</TR>-<TR>-<TD><CODE>pred</CODE></TD>-<TD><CODE>N -> NP -> Cl</CODE></TD>-<TD ALIGN="right"><I>x is a maximum</I></TD>-</TR>-<TR>-<TD><CODE>pred</CODE></TD>-<TD><CODE>N -> NP -> NP -> Cl</CODE></TD>-<TD ALIGN="center"><I>x and y are inverses</I></TD>-</TR>-<TR>-<TD><CODE>pred</CODE></TD>-<TD><CODE>Adv -> NP -> Cl</CODE></TD>-<TD ALIGN="right"><I>x is in scope</I></TD>-</TR>-<TR>-<TD><CODE>pred</CODE></TD>-<TD><CODE>Prep -> NP -> NP -> Cl</CODE></TD>-<TD ALIGN="right"><I>x is outside y</I></TD>-</TR>-<TR>-<TD><CODE>app</CODE></TD>-<TD><CODE>N -> NP</CODE></TD>-<TD ALIGN="right"><I>the bottom</I></TD>-</TR>-<TR>-<TD><CODE>app</CODE></TD>-<TD><CODE>N2 -> NP -> NP</CODE></TD>-<TD ALIGN="right"><I>the successor of x</I></TD>-</TR>-<TR>-<TD><CODE>app</CODE></TD>-<TD><CODE>N3 -> NP -> NP -> NP</CODE></TD>-<TD ALIGN="right"><I>the distance from x to y</I></TD>-</TR>-<TR>-<TD><CODE>app</CODE></TD>-<TD><CODE>N2 -> NP -> NP -> NP</CODE></TD>-<TD ALIGN="right"><I>the sum of x and y</I></TD>-</TR>-<TR>-<TD><CODE>app</CODE></TD>-<TD><CODE>N2 -> N -> CN</CODE></TD>-<TD ALIGN="right"><I>set of integers</I></TD>-</TR>-<TR>-<TD><CODE>app</CODE></TD>-<TD><CODE>N2 -> NP -> CN</CODE></TD>-<TD ALIGN="right"><I>divisor of x</I></TD>-</TR>-<TR>-<TD><CODE>app</CODE></TD>-<TD><CODE>N3 -> NP -> NP -> CN</CODE></TD>-<TD ALIGN="right"><I>path from x to y</I></TD>-</TR>-<TR>-<TD><CODE>app</CODE></TD>-<TD><CODE>N2 -> NP -> NP -> CN</CODE></TD>-<TD ALIGN="right"><I>path between x and y</I></TD>-</TR>-</TABLE>--<A NAME="toc109"></A>-<H1>Browsing the libraries with GF commands</H1>--<P>-<B>New</B>: Browsing by syntax editor -<A HREF="../../../demos/resource-api/editor.html">directly on the web</A>.-</P>-<P>-All of the following assume that-<CODE>GF_LIB_PATH</CODE> points to the directory <CODE>GF/lib</CODE> with compiled libraries.-</P>-<P>-To try out inflection paradigms:-</P>--<PRE>- > i -retain alltenses/ParadigmsGer.gfo- > cc mkN "Farbe"-</PRE>--<P>-To try out overloaded syntax, test lexicon, and inflection paradigms:-</P>--<PRE>- > i -retain alltenses/TryGer.gfo- > cc mkCl (mkNP this_Quant (mkN "Farbe")) (mkA "dunkel")-</PRE>--<A NAME="toc110"></A>-<H1>An Example of Usage</H1>--<P>-The standard way of building an application has the following modules.-</P>-<P>-An abstract syntax:-</P>--<PRE>- abstract Music = { - cat - Kind, - Property ;- fun - PropKind : Kind -> Property -> Kind ; - Song : Kind ;- American : Property ;- }-</PRE>--<P>-A domain lexicon interface:-</P>--<PRE>- interface LexMusic = open Cat in {- oper- song_N : N ;- american_A : A ;- }-</PRE>--<P>-A functor on <CODE>Syntax</CODE> and the domain lexicon interface:-</P>--<PRE>- 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 ;- }-</PRE>--<P>-For each language, an instance of the domain lexicon:-</P>--<PRE>- instance LexMusicGer of LexMusic = CatGer ** open ParadigmsGer in { - oper- song_N = mkN "Lied" "Lieder" neuter ;- american_A = mkA "amerikanisch" ;- }-</PRE>--<P>-For each language, an instantiation of the functor:-</P>--<PRE>- --# -path=.:present:prelude- - concrete MusicGer of Music = MusicI with- (Syntax = SyntaxGer),- (LexMusic = LexMusicGer) ;-</PRE>--<A NAME="toc111"></A>-<H1>Table of Contents</H1>--- <UL>- <LI><A HREF="#toc1">Introduction</A>- <LI><A HREF="#toc2">Categories</A>- <UL>- <LI><A HREF="#toc3">A hierarchic view</A>- <LI><A HREF="#toc4">Explanations</A>- </UL>- <LI><A HREF="#toc5">Syntax Rules and Structural Words</A>- <UL>- <LI><A HREF="#A" TITLE="A - one-place adjective">A - one-place adjective</A>- <LI><A HREF="#A2" TITLE="A2 - two-place adjective">A2 - two-place adjective</A>- <LI><A HREF="#AP" TITLE="AP - adjectival phrase">AP - adjectival phrase</A>- <LI><A HREF="#AdA" TITLE="AdA - adjective-modifying adverb">AdA - adjective-modifying adverb</A>- <LI><A HREF="#AdN" TITLE="AdN - numeral-modifying adverb">AdN - numeral-modifying adverb</A>- <LI><A HREF="#AdV" TITLE="Adv - verb-phrase-modifying adverb">AdV - adverb directly attached to verb</A>- <LI><A HREF="#Adv" TITLE="Adv - verb-phrase-modifying adverb">Adv - verb-phrase-modifying adverb</A>- <LI><A HREF="#Ant" TITLE="Ant - anteriority">Ant - anteriority</A>- <LI><A HREF="#CAdv" TITLE="CAdv - comparative adverb">CAdv - comparative adverb</A>- <LI><A HREF="#CN" TITLE="CN - common noun (without determiner)">CN - common noun (without determiner)</A>- <LI><A HREF="#Card" TITLE="Card - cardinal number">Card - cardinal number</A>- <LI><A HREF="#Cl" TITLE="Cl - declarative clause, with all tenses">Cl - declarative clause, with all tenses</A>- <LI><A HREF="#ClSlash">ClSlash</A>- <LI><A HREF="#Comp" TITLE="Comp - complement of copula, such as AP">Comp - complement of copula, such as AP</A>- <LI><A HREF="#Conj" TITLE="Conj - conjunction">Conj - conjunction</A>- <LI><A HREF="#Det" TITLE="Det - determiner phrase">Det - determiner phrase</A>- <LI><A HREF="#Dig">Dig</A>- <LI><A HREF="#Digits" TITLE="Digits - cardinal or ordinal in digits">Digits - cardinal or ordinal in digits</A>- <LI><A HREF="#IAdv" TITLE="IAdv - interrogative adverb">IAdv - interrogative adverb</A>- <LI><A HREF="#IComp" TITLE="IComp - interrogative complement of copula">IComp - interrogative complement of copula</A>- <LI><A HREF="#IDet" TITLE="IDet - interrogative determiner">IDet - interrogative determiner</A>- <LI><A HREF="#IP" TITLE="IP - interrogative pronoun">IP - interrogative pronoun</A>- <LI><A HREF="#IQuant">IQuant</A>- <LI><A HREF="#Imp" TITLE="Imp - imperative">Imp - imperative</A>- <LI><A HREF="#ImpForm">ImpForm</A>- <LI><A HREF="#Interj" TITLE="Interj - interjection">Interj - interjection</A>- <LI><A HREF="#ListAP">ListAP</A>- <LI><A HREF="#ListAdv">ListAdv</A>- <LI><A HREF="#ListNP">ListNP</A>- <LI><A HREF="#ListRS">ListRS</A>- <LI><A HREF="#ListS">ListS</A>- <LI><A HREF="#N" TITLE="N - common noun">N - common noun</A>- <LI><A HREF="#N2" TITLE="N2 - relational noun">N2 - relational noun</A>- <LI><A HREF="#N3" TITLE="N3 - three-place relational noun">N3 - three-place relational noun</A>- <LI><A HREF="#NP" TITLE="NP - noun phrase (subject or object)">NP - noun phrase (subject or object)</A>- <LI><A HREF="#Num" TITLE="Num - number determining element">Num - number determining element</A>- <LI><A HREF="#Numeral" TITLE="Numeral - cardinal or ordinal in words">Numeral - cardinal or ordinal in words</A>- <LI><A HREF="#Ord" TITLE="Ord - ordinal number (used in Det)">Ord - ordinal number (used in Det)</A>- <LI><A HREF="#PConj" TITLE="PConj - phrase-beginning conjunction">PConj - phrase-beginning conjunction</A>- <LI><A HREF="#PN" TITLE="PN - proper name">PN - proper name</A>- <LI><A HREF="#Phr" TITLE="Phr - phrase in a text">Phr - phrase in a text</A>- <LI><A HREF="#Pol" TITLE="Pol - polarity">Pol - polarity</A>- <LI><A HREF="#Predet" TITLE="Predet - predeterminer (prefixed Quant)">Predet - predeterminer (prefixed Quant)</A>- <LI><A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep - preposition, or just case</A>- <LI><A HREF="#Pron" TITLE="Pron - personal pronoun">Pron - personal pronoun</A>- <LI><A HREF="#Punct">Punct</A>- <LI><A HREF="#QCl" TITLE="QCl - question clause, with all tenses">QCl - question clause, with all tenses</A>- <LI><A HREF="#QS" TITLE="QS - question">QS - question</A>- <LI><A 'HREF="#Quant" TITLE="Quant - quantifier ('nucleus' of Det)"'>Quant - quantifier ('nucleus' of Det)</A>- <LI><A HREF="#RCl" TITLE="RCl - relative clause, with all tenses">RCl - relative clause, with all tenses</A>- <LI><A HREF="#RP" TITLE="RP - relative pronoun">RP - relative pronoun</A>- <LI><A HREF="#RS" TITLE="RS - relative">RS - relative</A>- <LI><A HREF="#S" TITLE="S - declarative sentence">S - declarative sentence</A>- <LI><A HREF="#SC" TITLE="SC - embedded sentence or question">SC - embedded sentence or question</A>- <LI><A HREF="#SSlash">SSlash</A>- <LI><A HREF="#Sub100">Sub100</A>- <LI><A HREF="#Sub1000">Sub1000</A>- <LI><A HREF="#Subj" TITLE="Subj - subjunction">Subj - subjunction</A>- <LI><A HREF="#Temp" TITLE="Temp - temporal and aspectual features">Temp - temporal and aspectual features</A>- <LI><A HREF="#Tense" TITLE="Tense - tense">Tense - tense</A>- <LI><A HREF="#Text" TITLE="Text - text consisting of several phrases">Text - text consisting of several phrases</A>- <LI><A HREF="#Unit">Unit</A>- <LI><A HREF="#Utt" TITLE="Utt - sentence, question, word...">Utt - sentence, question, word...</A>- <LI><A HREF="#V" TITLE="V - one-place verb">V - one-place verb</A>- <LI><A HREF="#V2" TITLE="V2 - two-place verb">V2 - two-place verb</A>- <LI><A HREF="#V2A" TITLE="V2A - verb with NP and AP complement">V2A - verb with NP and AP complement</A>- <LI><A HREF="#V2Q" TITLE="V2Q - verb with NP and Q complement">V2Q - verb with NP and Q complement</A>- <LI><A HREF="#V2S" TITLE="V2S - verb with NP and S complement">V2S - verb with NP and S complement</A>- <LI><A HREF="#V2V" TITLE="V2V - verb with NP and V complement">V2V - verb with NP and V complement</A>- <LI><A HREF="#V3" TITLE="V3 - three-place verb">V3 - three-place verb</A>- <LI><A HREF="#VA" TITLE="VA - adjective-complement verb">VA - adjective-complement verb</A>- <LI><A HREF="#VP" TITLE="VP - verb phrase">VP - verb phrase</A>- <LI><A HREF="#VPSlash" TITLE="VPSlash - verb phrase missing complement">VPSlash - verb phrase missing complement</A>- <LI><A HREF="#VQ" TITLE="VQ - question-complement verb">VQ - question-complement verb</A>- <LI><A HREF="#VS" TITLE="VS - sentence-complement verb">VS - sentence-complement verb</A>- <LI><A HREF="#VV" TITLE="VV - verb-phrase-complement verb">VV - verb-phrase-complement verb</A>- <LI><A HREF="#Voc" TITLE="Voc - vocative or "please"">Voc - vocative or "please"</A>- </UL>- <LI><A HREF="#toc83">Lexical Paradigms</A>- <UL>- <LI><A HREF="#toc84">Paradigms for Afrikaans</A>- <LI><A HREF="#toc85">Paradigms for Bulgarian</A>- <LI><A HREF="#toc86">Paradigms for Catalan</A>- <LI><A HREF="#toc87">Paradigms for Danish</A>- <LI><A HREF="#toc88">Paradigms for Dutch</A>- <LI><A HREF="#toc89">Paradigms for English</A>- <LI><A HREF="#toc90">Paradigms for Finnish</A>- <LI><A HREF="#toc91">Paradigms for French</A>- <LI><A HREF="#toc92">Paradigms for German</A>- <LI><A HREF="#toc93">Paradigms for Italian</A>- <LI><A HREF="#toc94">Paradigms for Nepali</A>- <LI><A HREF="#toc95">Paradigms for Norwegian</A>- <LI><A HREF="#toc96">Paradigms for Polish</A>- <LI><A HREF="#toc97">Paradigms for Punjabi</A>- <LI><A HREF="#toc98">Paradigms for Romanian</A>- <LI><A HREF="#toc99">Paradigms for Russian</A>- <LI><A HREF="#toc100">Paradigms for Spanish</A>- <LI><A HREF="#toc101">Paradigms for Swedish</A>- <LI><A HREF="#toc102">Paradigms for Urdu</A>- </UL>- <LI><A HREF="#toc103">Additional Libraries</A>- <UL>- <LI><A HREF="#toc104">The Prelude module</A>- <LI><A HREF="#toc105">The Predefined module</A>- <LI><A HREF="#toc106">The Formal module</A>- <LI><A HREF="#toc107">The Symbolic module</A>- <LI><A HREF="#toc108">The Combinators module</A>- </UL>- <LI><A HREF="#toc109">Browsing the libraries with GF commands</A>- <LI><A HREF="#toc110">An Example of Usage</A>- <LI><A HREF="#toc111">Table of Contents</A>+It covers the morphology and basic syntax of currently 24 languages.+</P>+<P>+This document contains the most important parts of the GF Resource Grammar API,+as needed by a GF application programmer.+It has been machine-generated from the source files; there are links+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 nicest+possible format.+</P>+<P>+The main contents are:+</P>++<UL>+<LI><A HREF="#toc2">Chapter 1</A>: categories, with links to the functions for+constructing trees in them.+<LI><A HREF="#toc5">Chapter 2</A>: syntactic construction functions, with cross-links and+examples. +<LI><A HREF="#toc83">Chapter 3</A>: morphological paradigms.+<LI><A HREF="#toc105">Chapter 4</A>: additional libraries.+<LI><A HREF="#toc111">Chapter 5</A>: how to "browse" the library by +loading the grammars into the <CODE>gf</CODE> command editor.+<LI><A HREF="#toc112">Chapter 6</A>: a brief example of how application grammars can+use the resource modules. +<LI><A HREF="#toc113">Detailed table of contents</A>.+</UL>++<P>+Other relevant documents:+</P>++<UL>+<LI><A HREF="gfdoc/sources.html">More modules</A>: extra modules, dictionaries, and+ the internals of the resource grammar+<LI><A HREF="./status.html">The RGL Status Document</A>: the current status of different languages+ and the authors of each grammar+<LI><A HREF="http://www.grammaticalframework.org/doc/gf-lrec-2010.pdf">Resource Grammar Tutorial</A>+ as presented in LREC-2010.+<LI>Paper "The GF Resource Grammar Library" by A. Ranta+ (<I>Linguistic Issues in Language Technology</I>, 2 (2), 2009). An overview of+ the library with linguistic motivations.+ <A HREF="http://elanguage.net/journals/index.php/lilt/article/viewFile/214/158">PDF</A>+<LI>Paper "Grammars as Software Libraries" by A. Ranta+ (In Y. Bertot, G. Huet, J-J. Lévy, and G. Plotkin (eds.),+ <I>From Semantics to Computer Science</I>, Cambridge University Press, + Cambridge, pp. 281--308, 2009).+ The library from a software engineering point of view.+ <A HREF="http://www.cse.chalmers.se/~aarne/old/articles/libraries-kahn.pdf">PDF</A>+</UL>++<P>+Many examples in <A HREF="#toc5">Chapter 2</A> can be seen in multiple languages by hovering the+mouse over the example, as shown in the following screenshot:+</P>+<P>+<IMG ALIGN="middle" SRC="hovering.png" BORDER="0" ALT="">+</P>++<A NAME="toc2"></A>+<H1>Categories</H1>++<P>+Source 1: <A HREF="http://www.grammaticalframework.org/lib/src/abstract/Common.gf"><CODE>../src/abstract/Common.gf</CODE></A>+</P>+<P>+Source 2: <A HREF="http://www.grammaticalframework.org/lib/src/abstract/Cat.gf"><CODE>../src/abstract/Cat.gf</CODE></A>+</P>++<A NAME="toc3"></A>+<H2>A hierarchic view</H2>++<P>+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 <I>C</I> to <I>D</I> is: there is a constructor+of <I>C</I> that takes <I>D</I> as an argument. What the constructors exactly are,+and what other arguments they take, is described by separate tables for+each category.+</P>++<TABLE ALIGN="center" BORDER="1" CELLPADDING="4">+<TR>+<TD ALIGN="right"><center><IMG ALIGN="middle" SRC="categories.png" USEMAP="#categories" BORDER="0" ALT=""></center></TD>+</TR>+</TABLE>++<map id="categories" name="categories">+<area shape="poly" href="#Text" TITLE="Text - text consisting of several phrases" alt="" coords="690,23 688,17 685,12 679,8 672,5 664,4 656,5 649,8 643,12 640,17 638,23 640,29 643,34 649,38 656,41 664,42 672,41 679,38 685,34 688,29"/>+<area shape="poly" href="#Punct" title="Punct" alt="" coords="657,95 656,89 652,84 646,80 638,77 629,76 620,77 612,80 606,84 602,89 600,95 602,101 606,106 612,110 620,113 629,114 638,113 646,110 652,106 656,101"/>+<area shape="poly" href="#Phr" TITLE="Phr - phrase in a text" alt="" coords="726,95 725,89 721,84 715,80 708,77 700,76 692,77 685,80 679,84 676,89 675,95 676,101 679,106 685,110 692,113 700,114 708,113 715,110 721,106 725,101"/>+<area shape="poly" href="#PConj" TITLE="PConj - phrase-beginning conjunction" alt="" coords="658,167 656,162 652,156 645,152 637,150 628,149 619,150 610,152 604,156 600,162 598,167 600,173 604,179 610,183 619,185 628,186 637,185 645,183 652,179 656,173"/>+<area shape="poly" href="#Utt" TITLE="Utt - sentence, question, word..." alt="" coords="726,167 725,162 721,156 715,152 708,150 700,149 692,150 685,152 679,156 676,162 675,167 676,173 679,179 685,183 692,185 700,186 708,185 715,183 721,179 725,173"/>+<area shape="poly" href="#Voc" TITLE="Voc - vocative or "please"" alt="" coords="794,167 793,162 789,156 784,152 777,150 769,149 761,150 754,152 748,156 744,162 743,167 744,173 748,179 754,183 761,185 769,186 777,185 784,183 789,179 793,173"/>+<area shape="poly" href="#Imp" TITLE="Imp - imperative" alt="" coords="657,240 656,234 652,229 647,225 640,222 632,221 624,222 617,225 611,229 607,234 606,240 607,246 611,251 617,255 624,258 632,259 640,258 647,255 652,251 656,246"/>+<area shape="poly" href="#S" TITLE="S - declarative sentence" alt="" coords="726,240 725,234 721,229 715,225 708,223 700,222 692,223 685,225 679,229 676,234 675,240 676,245 679,250 685,254 692,257 700,258 708,257 715,254 721,250 725,245"/>+<area shape="poly" href="#QS" TITLE="QS - question" alt="" coords="870,240 868,234 865,229 859,225 852,222 844,221 836,222 829,225 823,229 819,234 818,240 819,246 823,251 829,255 836,258 844,259 852,258 859,255 865,251 868,246"/>+<area shape="poly" href="#Tense" TITLE="Tense - tense" alt="" coords="521,312 519,306 515,301 509,297 501,294 492,293 483,294 475,297 469,301 464,306 463,312 464,318 469,323 475,327 483,330 492,331 501,330 509,327 515,323 519,318"/>+<area shape="poly" href="#Ant" TITLE="Ant - anteriority" alt="" coords="589,312 588,306 584,301 578,297 571,294 563,293 555,294 548,297 542,301 539,306 538,312 539,318 542,323 548,327 555,330 563,331 571,330 578,327 584,323 588,318"/>+<area shape="poly" href="#Pol" TITLE="Pol - polarity" alt="" coords="657,312 656,306 652,301 647,297 640,294 632,293 624,294 617,297 611,301 607,306 606,312 607,318 611,323 617,327 624,330 632,331 640,330 647,327 652,323 656,318"/>+<area shape="poly" href="#Cl" TITLE="Cl - declarative clause, with all tenses" alt="" coords="726,312 725,306 721,301 715,297 708,294 700,293 692,294 685,297 679,301 676,306 675,312 676,318 679,323 685,327 692,330 700,331 708,330 715,327 721,323 725,318"/>+<area shape="poly" href="#ListS" title="ListS" alt="" coords="798,312 797,306 793,301 787,297 779,294 771,293 762,294 754,297 748,301 745,306 743,312 745,318 748,323 754,327 762,330 771,331 779,330 787,327 793,323 797,318"/>+<area shape="poly" href="#Conj" TITLE="Conj - conjunction" alt="" coords="867,312 866,306 862,301 856,297 849,294 841,293 833,294 826,297 820,301 816,306 815,312 816,318 820,323 826,327 833,330 841,331 849,330 856,327 862,323 866,318"/>+<area shape="poly" href="#QCl" TITLE="QCl - question clause, with all tenses" alt="" coords="945,312 943,306 940,301 934,297 927,294 919,293 911,294 904,297 898,301 895,306 893,312 895,318 898,323 904,327 911,330 919,331 927,330 934,327 940,323 943,318"/>+<area shape="poly" href="#NP" TITLE="NP - noun phrase (subject or object)" alt="" coords="270,384 269,379 265,373 260,369 252,366 244,366 237,366 229,369 224,373 220,379 219,384 220,390 224,395 229,400 237,402 244,403 252,402 260,400 265,395 269,390"/>+<area shape="poly" href="#VP" TITLE="VP - verb phrase" alt="" coords="636,384 634,379 631,373 625,369 618,366 610,366 602,366 595,369 589,373 585,379 584,384 585,390 589,395 595,400 602,402 610,403 618,402 625,400 631,395 634,390"/>+<area shape="rect" href="#Adv" TITLE="Adv - verb-phrase-modifying adverb" alt="" coords="702,367,753,401"/>+<area shape="poly" href="#Predet" TITLE="Predet - predeterminer (prefixed Quant)" alt="" coords="65,457 63,451 59,446 52,441 44,439 34,438 25,439 16,441 10,446 5,451 4,457 5,462 10,468 16,472 25,475 34,475 44,475 52,472 59,468 63,462"/>+<area shape="poly" href="#Pron" TITLE="Pron - personal pronoun" alt="" coords="133,457 132,451 129,446 123,441 116,439 108,438 99,439 92,441 86,446 83,451 82,457 83,462 86,468 92,472 99,475 108,475 116,475 123,472 129,468 132,462"/>+<area shape="rect" href="#PN" TITLE="PN - proper name" alt="" coords="150,440,202,474"/>+<area shape="poly" href="#Det" TITLE="Det - determiner phrase" alt="" coords="270,457 269,451 265,446 260,441 252,439 244,438 237,439 229,441 224,446 220,451 219,457 220,462 224,468 229,472 237,475 244,475 252,475 260,472 265,468 269,462"/>+<area shape="poly" href="#CN" TITLE="CN - common noun (without determiner)" alt="" coords="339,457 337,451 334,446 328,441 321,439 313,438 305,439 298,441 292,446 289,451 287,457 289,462 292,468 298,472 305,475 313,475 321,475 328,472 334,468 337,462"/>+<area shape="poly" href="#ListNP" title="ListNP" alt="" coords="420,457 419,451 414,446 407,441 398,439 388,438 378,439 369,441 362,446 358,451 356,457 358,462 362,468 369,472 378,475 388,475 398,475 407,472 414,468 419,462"/>+<area shape="poly" href="#AdV" TITLE="Adv - verb-phrase-modifying adverb" alt="" coords="489,457 488,451 484,446 479,441 471,439 463,438 455,439 448,441 442,446 439,451 437,457 439,462 442,468 448,472 455,475 463,475 471,475 479,472 484,468 488,462"/>+<area shape="rect" href="#V" TITLE="V - one-place verb" alt="" coords="506,440,616,474"/>+<area shape="poly" href="#AP" TITLE="AP - adjectival phrase" alt="" coords="685,457 684,451 680,446 674,441 667,439 659,438 651,439 644,441 639,446 635,451 634,457 635,462 639,468 644,472 651,475 659,475 667,475 674,472 680,468 684,462"/>+<area shape="poly" href="#Subj" TITLE="Subj - subjunction" alt="" coords="753,457 752,451 749,446 743,441 736,439 728,438 720,439 713,441 707,446 703,451 702,457 703,462 707,468 713,472 720,475 728,475 736,475 743,472 749,468 752,462"/>+<area shape="poly" href="#ListAdj" title="ListAdj" alt="" coords="837,457 836,451 831,446 824,441 814,439 804,438 794,439 784,441 777,446 772,451 770,457 772,462 777,468 784,472 794,475 804,475 814,475 824,472 831,468 836,462"/>+<area shape="poly" href="#Art" title="Art" alt="" coords="90,529 89,523 85,518 80,514 73,511 65,510 57,511 50,514 44,518 40,523 39,529 40,535 44,540 50,544 57,547 65,548 73,547 80,544 85,540 89,535"/>+<area shape="poly" 'href="#Quant" TITLE="Quant - quantifier ('nucleus' of Det)"' alt="" coords="166,529 165,523 161,518 154,514 146,511 137,510 128,511 120,514 113,518 109,523 108,529 109,535 113,540 120,544 128,547 137,548 146,547 154,544 161,540 165,535"/>+<area shape="poly" href="#Num" TITLE="Num - number determining element" alt="" coords="237,529 235,523 232,518 226,514 218,511 210,510 202,511 195,514 189,518 185,523 184,529 185,535 189,540 195,544 202,547 210,548 218,547 226,544 232,540 235,535"/>+<area shape="poly" href="#Ord" TITLE="Ord - ordinal number (used in Det)" alt="" coords="305,529 304,523 300,518 295,514 288,511 280,510 272,511 265,514 259,518 255,523 254,529 255,535 259,540 265,544 272,547 280,548 288,547 295,544 300,540 304,535"/>+<area shape="rect" href="#N" TITLE="N - common noun" alt="" coords="323,512,387,546"/>+<area shape="poly" href="#RS" TITLE="RS - relative" alt="" coords="456,529 454,523 451,518 445,514 438,511 430,510 422,511 415,514 409,518 406,523 404,529 406,535 409,540 415,544 422,547 430,548 438,547 445,544 451,540 454,535"/>+<area shape="poly" href="#Card" TITLE="Card - cardinal number" alt="" coords="236,601 235,595 231,590 226,586 218,583 210,582 202,583 195,586 189,590 186,595 184,601 186,607 189,612 195,616 202,619 210,620 218,619 226,616 231,612 235,607"/>+<area shape="poly" href="#Numeral" TITLE="Numeral - cardinal or ordinal in words" alt="" coords="216,674 214,668 206,662 194,658 179,656 162,655 145,656 130,658 118,662 110,668 107,674 110,679 118,685 130,689 145,691 162,692 179,691 194,689 206,685 214,679"/>+<area shape="poly" href="#AdN" TITLE="AdN - numeral-modifying adverb" alt="" coords="285,674 283,668 280,662 274,658 267,656 259,655 251,656 244,658 238,662 234,668 233,674 234,679 238,685 244,689 251,691 259,692 267,691 274,689 280,685 283,679"/>+<area shape="poly" href="#CAdv" TITLE="CAdv - comparative adverb" alt="" coords="288,746 286,740 282,735 276,731 268,728 259,727 250,728 242,731 235,735 231,740 230,746 231,752 235,757 242,761 250,764 259,765 268,764 276,761 282,757 286,752"/>+<area shape="poly" href="#RCl" TITLE="RCl - relative clause, with all tenses" alt="" coords="456,601 454,595 451,590 445,586 438,583 430,582 422,583 415,586 409,590 406,595 404,601 406,607 409,612 415,616 422,619 430,620 438,619 445,616 451,612 454,607"/>+<area shape="poly" href="#AdA" TITLE="AdA - adjective-modifying adverb" alt="" coords="617,529 615,523 612,518 606,514 599,511 591,510 583,511 576,514 570,518 566,523 565,529 566,535 570,540 576,544 583,547 591,548 599,547 606,544 612,540 615,535"/>+<area shape="rect" href="#A" TITLE="A - one-place adjective" alt="" coords="634,512,685,546"/>+<area shape="poly" href="#ListAP" title="ListAP" alt="" coords="767,529 765,523 760,518 753,514 744,511 734,510 725,511 716,514 708,518 704,523 702,529 704,535 708,540 716,544 725,547 734,548 744,547 753,544 760,540 765,535"/>+<area shape="poly" href="#IP" TITLE="IP - interrogative pronoun" alt="" coords="895,384 894,379 890,373 885,369 877,366 870,366 862,366 854,369 849,373 845,379 844,384 845,390 849,395 854,400 862,402 870,403 877,402 885,400 890,395 894,390"/>+<area shape="poly" href="#IAdv" TITLE="IAdv - interrogative adverb" alt="" coords="966,384 965,379 961,373 955,369 947,366 939,366 931,366 923,369 917,373 913,379 912,384 913,390 917,395 923,400 931,402 939,403 947,402 955,400 961,395 965,390"/>+<area shape="poly" href="#ClSlash" title="ClSlash" alt="" coords="1050,384 1048,379 1043,373 1036,369 1026,366 1016,366 1006,366 996,369 989,373 984,379 982,384 984,390 989,395 996,400 1006,402 1016,403 1026,402 1036,400 1043,395 1048,390"/>+<area shape="poly" href="#IDet" TITLE="IDet - interrogative determiner" alt="" coords="906,457 904,451 901,446 895,441 888,439 880,438 872,439 865,441 859,446 856,451 854,457 856,462 859,468 865,472 872,475 880,475 888,475 895,472 901,468 904,462"/>+<area shape="poly" href="#VPSlash" TITLE="VPSlash - verb phrase missing complement" alt="" coords="1052,457 1050,451 1045,446 1037,441 1027,439 1016,438 1005,439 995,441 987,446 982,451 980,457 982,462 987,468 995,472 1005,475 1016,475 1027,475 1037,472 1045,468 1050,462"/>+<area shape="poly" href="#IQuant" title="IQuant" alt="" coords="912,529 910,523 906,518 899,514 890,511 880,510 870,511 861,514 854,518 850,523 848,529 850,535 854,540 861,544 870,547 880,548 890,547 899,544 906,540 910,535"/>+<area shape="poly" href="#RP" TITLE="RP - relative pronoun" alt="" coords="456,674 454,668 451,662 445,658 438,656 430,655 422,656 415,658 409,662 406,668 404,674 406,679 409,685 415,689 422,691 430,692 438,691 445,689 451,685 454,679"/>+</map>+<P>+The rectangular boxes mark open lexical categories, which have constructors+also in the <CODE>Paradigms</CODE> modules.+</P>++<A NAME="toc4"></A>+<H2>Explanations</H2>++<TABLE BORDER="1" CELLPADDING="4">+<TR>+<TH>Category</TH>+<TH>Explanation</TH>+<TH COLSPAN="2">Example</TH>+</TR>+<TR>+<TD><A HREF="#A" TITLE="A - one-place adjective">A</A></TD>+<TD>one-place adjective</TD>+<TD><I>warm</I></TD>+</TR>+<TR>+<TD><A HREF="#A2" TITLE="A2 - two-place adjective">A2</A></TD>+<TD>two-place adjective</TD>+<TD><I>divisible</I></TD>+</TR>+<TR>+<TD><A HREF="#AP" TITLE="AP - adjectival phrase">AP</A></TD>+<TD>adjectival phrase</TD>+<TD><I>very warm</I></TD>+</TR>+<TR>+<TD><A HREF="#AdA" TITLE="AdA - adjective-modifying adverb">AdA</A></TD>+<TD>adjective-modifying adverb</TD>+<TD><I>very</I></TD>+</TR>+<TR>+<TD><A HREF="#AdN" TITLE="AdN - numeral-modifying adverb">AdN</A></TD>+<TD>numeral-modifying adverb</TD>+<TD><I>more than</I></TD>+</TR>+<TR>+<TD><A HREF="#AdV" TITLE="Adv - verb-phrase-modifying adverb">AdV</A></TD>+<TD>adverb directly attached to verb</TD>+<TD><I>always</I></TD>+</TR>+<TR>+<TD><A HREF="#Adv" TITLE="Adv - verb-phrase-modifying adverb">Adv</A></TD>+<TD>verb-phrase-modifying adverb</TD>+<TD><I>in the house</I></TD>+</TR>+<TR>+<TD><A HREF="#Ant" TITLE="Ant - anteriority">Ant</A></TD>+<TD>anteriority</TD>+<TD>simultaneous, anterior</TD>+</TR>+<TR>+<TD><A HREF="#CAdv" TITLE="CAdv - comparative adverb">CAdv</A></TD>+<TD>comparative adverb</TD>+<TD><I>more</I></TD>+</TR>+<TR>+<TD><A HREF="#CN" TITLE="CN - common noun (without determiner)">CN</A></TD>+<TD>common noun (without determiner)</TD>+<TD><I>red house</I></TD>+</TR>+<TR>+<TD><A HREF="#Card" TITLE="Card - cardinal number">Card</A></TD>+<TD>cardinal number</TD>+<TD><I>seven</I></TD>+</TR>+<TR>+<TD><A HREF="#Cl" TITLE="Cl - declarative clause, with all tenses">Cl</A></TD>+<TD>declarative clause, with all tenses</TD>+<TD><I>she looks at this</I></TD>+</TR>+<TR>+<TD><A HREF="#Comp" TITLE="Comp - complement of copula, such as AP">Comp</A></TD>+<TD>complement of copula, such as AP</TD>+<TD><I>very warm</I></TD>+</TR>+<TR>+<TD><A HREF="#Conj" TITLE="Conj - conjunction">Conj</A></TD>+<TD>conjunction</TD>+<TD><I>and</I></TD>+</TR>+<TR>+<TD><A HREF="#Det" TITLE="Det - determiner phrase">Det</A></TD>+<TD>determiner phrase</TD>+<TD><I>those seven</I></TD>+</TR>+<TR>+<TD><A HREF="#Digits" TITLE="Digits - cardinal or ordinal in digits">Digits</A></TD>+<TD>cardinal or ordinal in digits</TD>+<TD><I>1,000/1,000th</I></TD>+</TR>+<TR>+<TD><A HREF="#IAdv" TITLE="IAdv - interrogative adverb">IAdv</A></TD>+<TD>interrogative adverb</TD>+<TD><I>why</I></TD>+</TR>+<TR>+<TD><A HREF="#IComp" TITLE="IComp - interrogative complement of copula">IComp</A></TD>+<TD>interrogative complement of copula</TD>+<TD><I>where</I></TD>+</TR>+<TR>+<TD><A HREF="#IDet" TITLE="IDet - interrogative determiner">IDet</A></TD>+<TD>interrogative determiner</TD>+<TD><I>how many</I></TD>+</TR>+<TR>+<TD><A HREF="#IP" TITLE="IP - interrogative pronoun">IP</A></TD>+<TD>interrogative pronoun</TD>+<TD><I>who</I></TD>+</TR>+<TR>+<TD><A HREF="#Imp" TITLE="Imp - imperative">Imp</A></TD>+<TD>imperative</TD>+<TD><I>look at this</I></TD>+</TR>+<TR>+<TD><A HREF="#Interj" TITLE="Interj - interjection">Interj</A></TD>+<TD>interjection</TD>+<TD><I>alas</I></TD>+</TR>+<TR>+<TD><A HREF="#N" TITLE="N - common noun">N</A></TD>+<TD>common noun</TD>+<TD><I>house</I></TD>+</TR>+<TR>+<TD><A HREF="#N2" TITLE="N2 - relational noun">N2</A></TD>+<TD>relational noun</TD>+<TD><I>son</I></TD>+</TR>+<TR>+<TD><A HREF="#N3" TITLE="N3 - three-place relational noun">N3</A></TD>+<TD>three-place relational noun</TD>+<TD><I>connection</I></TD>+</TR>+<TR>+<TD><A HREF="#NP" TITLE="NP - noun phrase (subject or object)">NP</A></TD>+<TD>noun phrase (subject or object)</TD>+<TD><I>the red house</I></TD>+</TR>+<TR>+<TD><A HREF="#Num" TITLE="Num - number determining element">Num</A></TD>+<TD>number determining element</TD>+<TD><I>seven</I></TD>+</TR>+<TR>+<TD><A HREF="#Numeral" TITLE="Numeral - cardinal or ordinal in words">Numeral</A></TD>+<TD>cardinal or ordinal in words</TD>+<TD><I>five/fifth</I></TD>+</TR>+<TR>+<TD><A HREF="#Ord" TITLE="Ord - ordinal number (used in Det)">Ord</A></TD>+<TD>ordinal number (used in Det)</TD>+<TD><I>seventh</I></TD>+</TR>+<TR>+<TD><A HREF="#PConj" TITLE="PConj - phrase-beginning conjunction">PConj</A></TD>+<TD>phrase-beginning conjunction</TD>+<TD><I>therefore</I></TD>+</TR>+<TR>+<TD><A HREF="#PN" TITLE="PN - proper name">PN</A></TD>+<TD>proper name</TD>+<TD><I>Paris</I></TD>+</TR>+<TR>+<TD><A HREF="#Phr" TITLE="Phr - phrase in a text">Phr</A></TD>+<TD>phrase in a text</TD>+<TD><I>but be quiet please</I></TD>+</TR>+<TR>+<TD><A HREF="#Pol" TITLE="Pol - polarity">Pol</A></TD>+<TD>polarity</TD>+<TD>positive, negative</TD>+</TR>+<TR>+<TD><A HREF="#Predet" TITLE="Predet - predeterminer (prefixed Quant)">Predet</A></TD>+<TD>predeterminer (prefixed Quant)</TD>+<TD><I>all</I></TD>+</TR>+<TR>+<TD><A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A></TD>+<TD>preposition, or just case</TD>+<TD><I>in</I></TD>+</TR>+<TR>+<TD><A HREF="#Pron" TITLE="Pron - personal pronoun">Pron</A></TD>+<TD>personal pronoun</TD>+<TD><I>she</I></TD>+</TR>+<TR>+<TD><A HREF="#QCl" TITLE="QCl - question clause, with all tenses">QCl</A></TD>+<TD>question clause, with all tenses</TD>+<TD><I>why does she walk</I></TD>+</TR>+<TR>+<TD><A HREF="#QS" TITLE="QS - question">QS</A></TD>+<TD>question</TD>+<TD><I>where did she live</I></TD>+</TR>+<TR>+<TD><A 'HREF="#Quant" TITLE="Quant - quantifier ('nucleus' of Det)"'>Quant</A></TD>+<TD>quantifier ('nucleus' of Det)</TD>+<TD><I>this/these</I></TD>+</TR>+<TR>+<TD><A HREF="#RCl" TITLE="RCl - relative clause, with all tenses">RCl</A></TD>+<TD>relative clause, with all tenses</TD>+<TD><I>in which she lives</I></TD>+</TR>+<TR>+<TD><A HREF="#RP" TITLE="RP - relative pronoun">RP</A></TD>+<TD>relative pronoun</TD>+<TD><I>in which</I></TD>+</TR>+<TR>+<TD><A HREF="#RS" TITLE="RS - relative">RS</A></TD>+<TD>relative</TD>+<TD><I>in which she lived</I></TD>+</TR>+<TR>+<TD><A HREF="#S" TITLE="S - declarative sentence">S</A></TD>+<TD>declarative sentence</TD>+<TD><I>she lived here</I></TD>+</TR>+<TR>+<TD><A HREF="#SC" TITLE="SC - embedded sentence or question">SC</A></TD>+<TD>embedded sentence or question</TD>+<TD><I>that it rains</I></TD>+</TR>+<TR>+<TD><A HREF="#Subj" TITLE="Subj - subjunction">Subj</A></TD>+<TD>subjunction</TD>+<TD><I>if</I></TD>+</TR>+<TR>+<TD><A HREF="#Temp" TITLE="Temp - temporal and aspectual features">Temp</A></TD>+<TD>temporal and aspectual features</TD>+<TD>past anterior</TD>+</TR>+<TR>+<TD><A HREF="#Tense" TITLE="Tense - tense">Tense</A></TD>+<TD>tense</TD>+<TD>present, past, future</TD>+</TR>+<TR>+<TD><A HREF="#Text" TITLE="Text - text consisting of several phrases">Text</A></TD>+<TD>text consisting of several phrases</TD>+<TD><I>He is here. Why?</I></TD>+</TR>+<TR>+<TD><A HREF="#Utt" TITLE="Utt - sentence, question, word...">Utt</A></TD>+<TD>sentence, question, word...</TD>+<TD><I>be quiet</I></TD>+</TR>+<TR>+<TD><A HREF="#V" TITLE="V - one-place verb">V</A></TD>+<TD>one-place verb</TD>+<TD><I>sleep</I></TD>+</TR>+<TR>+<TD><A HREF="#V2" TITLE="V2 - two-place verb">V2</A></TD>+<TD>two-place verb</TD>+<TD><I>love</I></TD>+</TR>+<TR>+<TD><A HREF="#V2A" TITLE="V2A - verb with NP and AP complement">V2A</A></TD>+<TD>verb with NP and AP complement</TD>+<TD><I>paint</I></TD>+</TR>+<TR>+<TD><A HREF="#V2Q" TITLE="V2Q - verb with NP and Q complement">V2Q</A></TD>+<TD>verb with NP and Q complement</TD>+<TD><I>ask</I></TD>+</TR>+<TR>+<TD><A HREF="#V2S" TITLE="V2S - verb with NP and S complement">V2S</A></TD>+<TD>verb with NP and S complement</TD>+<TD><I>tell</I></TD>+</TR>+<TR>+<TD><A HREF="#V2V" TITLE="V2V - verb with NP and V complement">V2V</A></TD>+<TD>verb with NP and V complement</TD>+<TD><I>cause</I></TD>+</TR>+<TR>+<TD><A HREF="#V3" TITLE="V3 - three-place verb">V3</A></TD>+<TD>three-place verb</TD>+<TD><I>show</I></TD>+</TR>+<TR>+<TD><A HREF="#VA" TITLE="VA - adjective-complement verb">VA</A></TD>+<TD>adjective-complement verb</TD>+<TD><I>look</I></TD>+</TR>+<TR>+<TD><A HREF="#VP" TITLE="VP - verb phrase">VP</A></TD>+<TD>verb phrase</TD>+<TD><I>is very warm</I></TD>+</TR>+<TR>+<TD><A HREF="#VPSlash" TITLE="VPSlash - verb phrase missing complement">VPSlash</A></TD>+<TD>verb phrase missing complement</TD>+<TD><I>give to John</I></TD>+</TR>+<TR>+<TD><A HREF="#VQ" TITLE="VQ - question-complement verb">VQ</A></TD>+<TD>question-complement verb</TD>+<TD><I>wonder</I></TD>+</TR>+<TR>+<TD><A HREF="#VS" TITLE="VS - sentence-complement verb">VS</A></TD>+<TD>sentence-complement verb</TD>+<TD><I>claim</I></TD>+</TR>+<TR>+<TD><A HREF="#VV" TITLE="VV - verb-phrase-complement verb">VV</A></TD>+<TD>verb-phrase-complement verb</TD>+<TD><I>want</I></TD>+</TR>+<TR>+<TD><A HREF="#Voc" TITLE="Voc - vocative or "please"">Voc</A></TD>+<TD>vocative or "please"</TD>+<TD><I>my darling</I></TD>+</TR>+</TABLE>++<A NAME="toc5"></A>+<H1>Syntax Rules and Structural Words</H1>++<P>+Source 1: <A HREF="http://www.grammaticalframework.org/lib/src/api/Constructors.gf"><CODE>../src/api/Constructors.gf</CODE></A>+</P>+<P>+Source 2: <A HREF="http://www.grammaticalframework.org/lib/src/abstract/Structural.gf"><CODE>../src/abstract/Structural.gf</CODE></A>+</P>++<A NAME="A"></A>+<H2>A - one-place adjective</H2>++<P>+Lexical category, constructors given in+<A HREF="#RParadigms">lexical paradigms</A>.+</P>++<A NAME="A2"></A>+<H2>A2 - two-place adjective</H2>++<P>+Lexical category, constructors given in+<A HREF="#RParadigms">lexical paradigms</A>.+</P>++<A NAME="AP"></A>+<H2>AP - adjectival phrase</H2>++<TABLE BORDER="1" CELLPADDING="4">+<TR>+<TH>Function</TH>+<TH>Type</TH>+<TH COLSPAN="2">Example</TH>+</TR>+<TR>+<TD><CODE>comparAP</CODE></TD>+<TD><A HREF="#A" TITLE="A - one-place adjective">A</A> <CODE>-></CODE> <A HREF="#AP" TITLE="AP - adjectival phrase">AP</A></TD>+<TD><div class=reveal> <I>warmer</I> <div class=popup> <ul> <li>API: <CODE>mkUtt (comparAP warm_A)</CODE> <li>Afr: <I>warmer</I> <li>Bul: <I>по - топъл</I> <li>Cat: <I>més tebi</I> <li>Dan: <I>varmere</I> <li>Dut: <I>warmer</I> <li>Eng: <I>warmer</I> <li>Fin: <I>lämpimämpi</I> <li>Fre: <I>plus chaud</I> <li>Ger: <I>wärmer</I> <li>Hin: <I>गरम</I> <li>Ita: <I>più caldo</I> <li>Lav: <I>siltāks</I> <li>Nep: <I>अली तातो</I> <li>Nor: <I>varmere</I> <li>Pes: <I>گرم</I> <li>Pnb: <I>تتا</I> <li>Pol: <I>cieplejszy</I> <li>Ron: <I>mai călduţ</I> <li>Rus: <I>тёплее</I> <li>Snd: <I>گرم</I> <li>Spa: <I>más tibio</I> <li>Swe: <I>varmare</I> <li>Tha: <I>อุ่นกว่า</I> <li>Urd: <I>گرم</I> </ul> </div> </div></TD>+</TR>+<TR>+<TD><CODE>mkAP</CODE></TD>+<TD><A HREF="#A" TITLE="A - one-place adjective">A</A> <CODE>-></CODE> <A HREF="#AP" TITLE="AP - adjectival phrase">AP</A></TD>+<TD><div class=reveal> <I>warm</I> <div class=popup> <ul> <li>API: <CODE>mkAP warm_A</CODE> <li>Afr: <I>warm</I> <li>Bul: <I>топъл</I> <li>Cat: <I>tebi</I> <li>Dan: <I>varm</I> <li>Dut: <I>warm</I> <li>Eng: <I>warm</I> <li>Fin: <I>lämmin</I> <li>Fre: <I>chaud</I> <li>Ger: <I>warm</I> <li>Hin: <I>गरम</I> <li>Ita: <I>caldo</I> <li>Lav: <I>silts</I> <li>Nep: <I>तातो</I> <li>Nor: <I>varm</I> <li>Pes: <I>گرم</I> <li>Pnb: <I>{s = variants {table ParamX.Number [table ResPnb.Gender [table ResPnb.Case ["تتا";</I> <li>Pol: <I>ciepły</I> <li>Ron: <I>călduţ</I> <li>Rus: <I>тёплый</I> <li>Snd: <I>گرم</I> <li>Spa: <I>tibio</I> <li>Swe: <I>varm</I> <li>Tha: <I>อุ่น</I> <li>Urd: <I>گرم</I> </ul> </div> </div></TD>+</TR>+<TR>+<TD><CODE>mkAP</CODE></TD>+<TD><A HREF="#A" TITLE="A - one-place adjective">A</A> <CODE>-></CODE> <A HREF="#NP" TITLE="NP - noun phrase (subject or object)">NP</A> <CODE>-></CODE> <A HREF="#AP" TITLE="AP - adjectival phrase">AP</A></TD>+<TD><div class=reveal> <I>warmer than Paris</I> <div class=popup> <ul> <li>API: <CODE>mkAP warm_A (mkNP paris_PN)</CODE> <li>Afr: <I>warmer as Parys</I> <li>Bul: <I>по - топъл от Париж</I> <li>Cat: <I>més tebi que Paris</I> <li>Dan: <I>varmere end Paris</I> <li>Dut: <I>warmer dan Parijs</I> <li>Eng: <I>warmer than Paris</I> <li>Fin: <I>Pariisia lämpimämpi</I> <li>Fre: <I>plus chaud que Paris</I> <li>Ger: <I>wärmer als Paris</I> <li>Hin: <I>पैरिस से गरम</I> <li>Ita: <I>più caldo di Parigi</I> <li>Lav: <I>{s = table ResLav.Definite {</I> <li>Nep: <I>पेरिस भन्दा तातो</I> <li>Nor: <I>varmere enn Paris</I> <li>Pes: <I>گرم تر از پاریس</I> <li>Pnb: <I>{s : ParamX.Number => ResPnb.Gender => ResPnb.Case => Str</I> <li>Pol: <I>cieplejszy niż Paryż</I> <li>Ron: <I>mai călduţ decât Paris</I> <li>Rus: <I>тёплее Парижа</I> <li>Snd: <I>constant not found: paris_PN</I> <li>Spa: <I>más tibio que Paris</I> <li>Swe: <I>varmare än Paris</I> <li>Tha: <I>อุ่นกว่าปารีส</I> <li>Urd: <I>پیرس سے گرم</I> </ul> </div> </div></TD>+</TR>+<TR>+<TD><CODE>mkAP</CODE></TD>+<TD><A HREF="#A2" TITLE="A2 - two-place adjective">A2</A> <CODE>-></CODE> <A HREF="#NP" TITLE="NP - noun phrase (subject or object)">NP</A> <CODE>-></CODE> <A HREF="#AP" TITLE="AP - adjectival phrase">AP</A></TD>+<TD><div class=reveal> <I>married to her</I> <div class=popup> <ul> <li>API: <CODE>mkAP married_A2 she_NP</CODE> <li>Afr: <I>getroud met haar</I> <li>Bul: <I>женен за нея</I> <li>Cat: <I>casat a ella</I> <li>Dan: <I>gift med hende</I> <li>Dut: <I>getrouwd met haar</I> <li>Eng: <I>married to her</I> <li>Fin: <I>hänen kanssa avioitunut</I> <li>Fre: <I>marié à elle</I> <li>Ger: <I>verheiratet mit ihr</I> <li>Hin: <I>उस से शादी शुदा</I> <li>Ita: <I>sposato con lei</I> <li>Lav: <I>precējies ar viņu</I> <li>Nep: <I>उनी सँग विवाहित</I> <li>Nor: <I>gift med henne</I> <li>Pes: <I>او متأهل</I> <li>Pnb: <I>constant not found: married_A2</I> <li>Pol: <I>zaślubiony jej</I> <li>Ron: <I>căsătorit cu ea</I> <li>Rus: <I>замужем за ей</I> <li>Snd: <I>constant not found: married_A2</I> <li>Spa: <I>casado a ella</I> <li>Swe: <I>gift med henne</I> <li>Tha: <I>แต่งงานแล้วกับหล่อน</I> <li>Urd: <I>اس سے شادی شدہ</I> </ul> </div> </div></TD>+</TR>+<TR>+<TD><CODE>mkAP</CODE></TD>+<TD><A HREF="#A2" TITLE="A2 - two-place adjective">A2</A> <CODE>-></CODE> <A HREF="#AP" TITLE="AP - adjectival phrase">AP</A></TD>+<TD><div class=reveal> <I>married</I> <div class=popup> <ul> <li>API: <CODE>mkAP married_A2</CODE> <li>Afr: <I>getroud</I> <li>Bul: <I>женен</I> <li>Cat: <I>casat</I> <li>Dan: <I>gift</I> <li>Dut: <I>getrouwd</I> <li>Eng: <I>married</I> <li>Fin: <I>avioitunut</I> <li>Fre: <I>marié</I> <li>Ger: <I>verheiratet</I> <li>Hin: <I>शादी शुदा</I> <li>Ita: <I>sposato</I> <li>Lav: <I>precējies</I> <li>Nep: <I>विवाहित</I> <li>Nor: <I>gift</I> <li>Pes: <I>متأهل</I> <li>Pnb: <I>constant not found: married_A2</I> <li>Pol: <I>zaślubiony</I> <li>Ron: <I>căsătorit</I> <li>Rus: <I>замужем</I> <li>Snd: <I>constant not found: married_A2</I> <li>Spa: <I>casado</I> <li>Swe: <I>gift</I> <li>Tha: <I>แต่งงานแล้ว</I> <li>Urd: <I>شادی شدہ</I> </ul> </div> </div></TD>+</TR>+<TR>+<TD><CODE>mkAP</CODE></TD>+<TD><A HREF="#AP" TITLE="AP - adjectival phrase">AP</A> <CODE>-></CODE> <A HREF="#S" TITLE="S - declarative sentence">S</A> <CODE>-></CODE> <A HREF="#AP" TITLE="AP - adjectival phrase">AP</A></TD>+<TD><div class=reveal> <I>it is good that she sleeps</I> <div class=popup> <ul> <li>API: <CODE>mkCl (mkVP (mkAP (mkAP good_A) (mkS (mkCl she_NP sleep_V))))</CODE> <li>Afr: <I>dit is goed dat sy slaap</I> <li>Bul: <I>е добро , че тя спи</I> <li>Cat: <I>és bo que ella dorm</I> <li>Dan: <I>det er godt at hun sover</I> <li>Dut: <I>'t is goed dat ze slaapt</I> <li>Eng: <I>it is good that she sleeps</I> <li>Fin: <I>on hyvä että hän nukkuu</I> <li>Fre: <I>il est bon qu' elle dort</I> <li>Ger: <I>es ist gut daß sie schläft</I> <li>Hin: <I>अच्छा कि वह सोती है है</I> <li>Ita: <I>è buono che lei dorme</I> <li>Lav: <I>ir labs , ka viņa guļ</I> <li>Nep: <I>की उनी सुत्छिन् राम्रो छ</I> <li>Nor: <I>det er godt at hun sover</I> <li>Pes: <I>خوب که او می خوابد است</I> <li>Pnb: <I>اچھا كہ او سوندی اے اے</I> <li>Pol: <I>jest dobrze , że ona śpi</I> <li>Ron: <I>este bun cã ea doarme</I> <li>Rus: <I>хороше , что она спдит</I> <li>Snd: <I>سٺو ت ھو۶ سمھی ٿی اھی</I> <li>Spa: <I>es bueno que ella duerme</I> <li>Swe: <I>det är gott att hon sover</I> <li>Tha: <I>ดีว่าหล่อนนอนหลับ</I> <li>Urd: <I>اچھا كہ وہ سوتی ہے ہے</I> </ul> </div> </div></TD>+</TR>+<TR>+<TD><CODE>mkAP</CODE></TD>+<TD><A HREF="#AP" TITLE="AP - adjectival phrase">AP</A> <CODE>-></CODE> <A HREF="#QS" TITLE="QS - question">QS</A> <CODE>-></CODE> <A HREF="#AP" TITLE="AP - adjectival phrase">AP</A></TD>+<TD><div class=reveal> <I>it is uncertain who sleeps</I> <div class=popup> <ul> <li>API: <CODE>mkCl (mkVP (mkAP (mkAP uncertain_A) (mkQS (mkQCl who_IP sleep_V))))</CODE> <li>Afr: <I>dit is onseker wie slaap</I> <li>Bul: <I>е неясно който спи</I> <li>Cat: <I>és incert qui dorm</I> <li>Dan: <I>constant not found: uncertain_A</I> <li>Dut: <I>'t is onzeker wie slaapt</I> <li>Eng: <I>it is uncertain who sleeps</I> <li>Fin: <I>on epävarma kuka nukkuu</I> <li>Fre: <I>il est incertain qui dort</I> <li>Ger: <I>es ist unsicher wer schläft</I> <li>Hin: <I>constant not found: uncertain_A</I> <li>Ita: <I>è insicuro chi dorme</I> <li>Lav: <I>ir nepārliecināts , kurš guļ</I> <li>Nep: <I>को सुत्छन् अनिश्चित छ</I> <li>Nor: <I>constant not found: uncertain_A</I> <li>Pes: <I>نامعلوم چه کسی می خوابد است</I> <li>Pnb: <I>constant not found: uncertain_A</I> <li>Pol: <I>jest niepewnie , kto śpi</I> <li>Ron: <I>este nesigur cine doarme</I> <li>Rus: <I>constant not found: uncertain_A</I> <li>Snd: <I>اچانڪ ڪیر سمھی ٿو اھی</I> <li>Spa: <I>constant not found: uncertain_A</I> <li>Swe: <I>det är osäkert vem som sover</I> <li>Tha: <I>ลังเลใจว่าใครนอนหลับ</I> <li>Urd: <I>غیریقینی كہ كون سوتا ہے ہے</I> </ul> </div> </div></TD>+</TR>+<TR>+<TD><CODE>mkAP</CODE></TD>+<TD><A HREF="#AP" TITLE="AP - adjectival phrase">AP</A> <CODE>-></CODE> <A HREF="#VP" TITLE="VP - verb phrase">VP</A> <CODE>-></CODE> <A HREF="#AP" TITLE="AP - adjectival phrase">AP</A></TD>+<TD><div class=reveal> <I>she is ready to sleep</I> <div class=popup> <ul> <li>API: <CODE>mkCl she_NP (mkAP (mkAP ready_A) (mkVP sleep_V))</CODE> <li>Afr: <I>sy is reg om te slaap</I> <li>Bul: <I>тя е готова да спя</I> <li>Cat: <I>ella és preparata a dormir</I> <li>Dan: <I>constant not found: ready_A</I> <li>Dut: <I>ze is klaar te slapen</I> <li>Eng: <I>she is ready to sleep</I> <li>Fin: <I>hän on valmis nukkua</I> <li>Fre: <I>elle est prête à dormir</I> <li>Ger: <I>sie ist fertig zu schlafen</I> <li>Hin: <I>वह सोने को तैयार है</I> <li>Ita: <I>lei è pronta a dormire</I> <li>Lav: <I>viņa ir gatava , gulēt</I> <li>Nep: <I>उनी सुत्न तयार छिन्</I> <li>Nor: <I>constant not found: ready_A</I> <li>Pes: <I>او آماده خوابیدن است</I> <li>Pnb: <I>constant not found: ready_A</I> <li>Pol: <I>ona jest <A HREF="exist"> gotowy : the adverb positive form does not</A> spać</I> <li>Ron: <I>ea este pregătită sã doarmă</I> <li>Rus: <I>constant not found: ready_A</I> <li>Snd: <I>constant not found: ready_A</I> <li>Spa: <I>constant not found: ready_A</I> <li>Swe: <I>hon är färdig att sova</I> <li>Tha: <I>หล่อนพร้อมนอนหลับ</I> <li>Urd: <I>وہ سونے كو تیار ہے</I> </ul> </div> </div></TD>+</TR>+<TR>+<TD><CODE>mkAP</CODE></TD>+<TD><A HREF="#AP" TITLE="AP - adjectival phrase">AP</A> <CODE>-></CODE> <A HREF="#SC" TITLE="SC - embedded sentence or question">SC</A> <CODE>-></CODE> <A HREF="#AP" TITLE="AP - adjectival phrase">AP</A></TD>+<TD><div class=reveal> <I>she is ready to sleep</I> <div class=popup> <ul> <li>API: <CODE>mkCl she_NP (mkAP (mkAP ready_A) (mkSC (mkVP sleep_V)))</CODE> <li>Afr: <I>sy is reg om te slaap</I> <li>Bul: <I>тя е готова да спя</I> <li>Cat: <I>ella és preparata a dormir</I> <li>Dan: <I>constant not found: ready_A</I> <li>Dut: <I>ze is klaar te slapen</I> <li>Eng: <I>she is ready to sleep</I> <li>Fin: <I>hän on valmis nukkua</I> <li>Fre: <I>elle est prête à dormir</I> <li>Ger: <I>sie ist fertig zu schlafen</I> <li>Hin: <I>वह सोने को तैयार है</I> <li>Ita: <I>lei è pronta a dormire</I> <li>Lav: <I>viņa ir gatava , gulēt</I> <li>Nep: <I>उनी सुत्न तयार छिन्</I> <li>Nor: <I>constant not found: ready_A</I> <li>Pes: <I>او آماده خوابیدن است</I> <li>Pnb: <I>constant not found: ready_A</I> <li>Pol: <I>ona jest <A HREF="exist"> gotowy : the adverb positive form does not</A> spać</I> <li>Ron: <I>ea este pregătită sã doarmă</I> <li>Rus: <I>constant not found: ready_A</I> <li>Snd: <I>constant not found: ready_A</I> <li>Spa: <I>constant not found: ready_A</I> <li>Swe: <I>hon är färdig att sova</I> <li>Tha: <I>หล่อนพร้อมนอนหลับ</I> <li>Urd: <I>وہ سونے كو تیار ہے</I> </ul> </div> </div></TD>+</TR>+<TR>+<TD><CODE>mkAP</CODE></TD>+<TD><A HREF="#AdA" TITLE="AdA - adjective-modifying adverb">AdA</A> <CODE>-></CODE> <A HREF="#A" TITLE="A - one-place adjective">A</A> <CODE>-></CODE> <A HREF="#AP" TITLE="AP - adjectival phrase">AP</A></TD>+<TD><div class=reveal> <I>very old</I> <div class=popup> <ul> <li>API: <CODE>mkAP very_AdA old_A</CODE> <li>Afr: <I>baie oud</I> <li>Bul: <I>много стар</I> <li>Cat: <I>molt vell</I> <li>Dan: <I>meget gammel</I> <li>Dut: <I>erg oud</I> <li>Eng: <I>very old</I> <li>Fin: <I>erittäin vanha</I> <li>Fre: <I>très vieux</I> <li>Ger: <I>sehr alt</I> <li>Hin: <I>बहुत बूढ़ा</I> <li>Ita: <I>molto vecchio</I> <li>Lav: <I>ļoti vecs</I> <li>Nep: <I>धेरै बुढो</I> <li>Nor: <I>mye gammel</I> <li>Pes: <I>خیلی پیر</I> <li>Pnb: <I>{s : ParamX.Number => ResPnb.Gender => ResPnb.Case => Str</I> <li>Pol: <I>bardzo stary</I> <li>Ron: <I>foarte vechi</I> <li>Rus: <I>очень старый</I> <li>Snd: <I>تمام پوڙھی</I> <li>Spa: <I>muy viejo</I> <li>Swe: <I>mycket gammal</I> <li>Tha: <I>แก่มาก</I> <li>Urd: <I>بہت بوڑھا</I> </ul> </div> </div></TD>+</TR>+<TR>+<TD><CODE>mkAP</CODE></TD>+<TD><A HREF="#AdA" TITLE="AdA - adjective-modifying adverb">AdA</A> <CODE>-></CODE> <A HREF="#AP" TITLE="AP - adjectival phrase">AP</A> <CODE>-></CODE> <A HREF="#AP" TITLE="AP - adjectival phrase">AP</A></TD>+<TD><div class=reveal> <I>very very old</I> <div class=popup> <ul> <li>API: <CODE>mkAP very_AdA (mkAP very_AdA old_A)</CODE> <li>Afr: <I>baie baie oud</I> <li>Bul: <I>много много стар</I> <li>Cat: <I>molt molt vell</I> <li>Dan: <I>meget meget gammel</I> <li>Dut: <I>erg erg oud</I> <li>Eng: <I>very very old</I> <li>Fin: <I>erittäin erittäin vanha</I> <li>Fre: <I>très très vieux</I> <li>Ger: <I>sehr sehr alt</I> <li>Hin: <I>बहुत बहुत बूढ़ा</I> <li>Ita: <I>molto molto vecchio</I> <li>Lav: <I>ļoti ļoti vecs</I> <li>Nep: <I>धेरै धेरै बुढो</I> <li>Nor: <I>mye mye gammel</I> <li>Pes: <I>خیلی خیلی پیر</I> <li>Pnb: <I>{s : ParamX.Number => ResPnb.Gender => ResPnb.Case => Str</I> <li>Pol: <I>bardzo bardzo stary</I> <li>Ron: <I>foarte foarte vechi</I> <li>Rus: <I>очень очень старый</I> <li>Snd: <I>تمام تمام پوڙھی</I> <li>Spa: <I>muy muy viejo</I> <li>Swe: <I>mycket mycket gammal</I> <li>Tha: <I>แก่มากมาก</I> <li>Urd: <I>بہت بہت بوڑھا</I> </ul> </div> </div></TD>+</TR>+<TR>+<TD><CODE>mkAP</CODE></TD>+<TD><A HREF="#Conj" TITLE="Conj - conjunction">Conj</A> <CODE>-></CODE> <A HREF="#AP" TITLE="AP - adjectival phrase">AP</A> <CODE>-></CODE> <A HREF="#AP" TITLE="AP - adjectival phrase">AP</A> <CODE>-></CODE> <A HREF="#AP" TITLE="AP - adjectival phrase">AP</A></TD>+<TD><div class=reveal> <I>old or young</I> <div class=popup> <ul> <li>API: <CODE>mkAP or_Conj (mkAP old_A) (mkAP young_A)</CODE> <li>Afr: <I>oud of jonk</I> <li>Bul: <I>стар или млад</I> <li>Cat: <I>vell o jove</I> <li>Dan: <I>gammel eller ung</I> <li>Dut: <I>oud of jong</I> <li>Eng: <I>old or young</I> <li>Fin: <I>vanha tai nuori</I> <li>Fre: <I>vieux ou jeune</I> <li>Ger: <I>alt oder jung</I> <li>Hin: <I>बूढ़ा या जवान</I> <li>Ita: <I>vecchio o giovane</I> <li>Lav: <I>vecs vai jauns</I> <li>Nep: <I>बुढो अथवा जवान</I> <li>Nor: <I>gammel eller ung</I> <li>Pes: <I>پیر یا جوان</I> <li>Pnb: <I>{s : ParamX.Number => ResPnb.Gender => ResPnb.Case => Str</I> <li>Pol: <I>stary lub młody</I> <li>Ron: <I>vechi sau tânăr</I> <li>Rus: <I>старый или молодой</I> <li>Snd: <I>پوڙھی یا جوان</I> <li>Spa: <I>viejo o joven</I> <li>Swe: <I>gammal eller ung</I> <li>Tha: <I>แก่หริอรุ่น</I> <li>Urd: <I>بوڑھا یا جوان</I> </ul> </div> </div></TD>+</TR>+<TR>+<TD><CODE>mkAP</CODE></TD>+<TD><A HREF="#Conj" TITLE="Conj - conjunction">Conj</A> <CODE>-></CODE> <A HREF="#ListAP">ListAP</A> <CODE>-></CODE> <A HREF="#AP" TITLE="AP - adjectival phrase">AP</A></TD>+<TD><div class=reveal> <I>old , big and warm</I> <div class=popup> <ul> <li>API: <CODE>mkAP and_Conj (mkListAP (mkAP old_A) (mkListAP (mkAP big_A) (mkAP warm_A)))</CODE> <li>Afr: <I>oud , groot en warm</I> <li>Bul: <I>стар , голям и топъл</I> <li>Cat: <I>vell , gros i tebi</I> <li>Dan: <I>gammel , stor og varm</I> <li>Dut: <I>oud , groot en warm</I> <li>Eng: <I>old , big and warm</I> <li>Fin: <I>vanha , suuri ja lämmin</I> <li>Fre: <I>vieux , grand et chaud</I> <li>Ger: <I>alt , groß und warm</I> <li>Hin: <I>बूढ़ा , बड़ा और गरम</I> <li>Ita: <I>vecchio , grande e caldo</I> <li>Lav: <I>vecs , liels un silts</I> <li>Nep: <I>बुढो , ठुलो र तातो</I> <li>Nor: <I>gammel , stor og varm</I> <li>Pes: <I>پیر , بزرگ و گرم</I> <li>Pnb: <I>{s : ParamX.Number => ResPnb.Gender => ResPnb.Case => Str</I> <li>Pol: <I>stary , duży i ciepły</I> <li>Ron: <I>vechi , mare şi călduţ</I> <li>Rus: <I>большой , тёплый и старый</I> <li>Snd: <I>پوڙھی , وڏو ۽ گرم</I> <li>Spa: <I>viejo , grande y tibio</I> <li>Swe: <I>gammal , stor och varm</I> <li>Tha: <I>แก่ใหญ่และอุ่น</I> <li>Urd: <I>بوڑھا , بڑا اور گرم</I> </ul> </div> </div></TD>+</TR>+<TR>+<TD><CODE>mkAP</CODE></TD>+<TD><A HREF="#Ord" TITLE="Ord - ordinal number (used in Det)">Ord</A> <CODE>-></CODE> <A HREF="#AP" TITLE="AP - adjectival phrase">AP</A></TD>+<TD><div class=reveal> <I>oldest</I> <div class=popup> <ul> <li>API: <CODE>mkAP (mkOrd old_A)</CODE> <li>Afr: <I>oudste</I> <li>Bul: <I>най - стар</I> <li>Cat: <I>més vell</I> <li>Dan: <I>ældste</I> <li>Dut: <I>oudst</I> <li>Eng: <I>oldest</I> <li>Fin: <I>vanhin</I> <li>Fre: <I>plus vieux</I> <li>Ger: <I>ältest</I> <li>Hin: <I>सब से बूढ़ा</I> <li>Ita: <I>più vecchio</I> <li>Lav: <I>visvecākais</I> <li>Nep: <I>सबभन्दा बुढो</I> <li>Nor: <I>eldste</I> <li>Pes: <I>پیر ترین</I> <li>Pnb: <I>بوڈا</I> <li>Pol: <I>najstarszy</I> <li>Ron: <I>cel mai vechi</I> <li>Rus: <I>старый</I> <li>Snd: <I>پوڙھی</I> <li>Spa: <I>más viejo</I> <li>Swe: <I>äldsta</I> <li>Tha: <I>แก่ที่สุด</I> <li>Urd: <I>سب سے بوڑھا</I> </ul> </div> </div></TD>+</TR>+<TR>+<TD><CODE>mkAP</CODE></TD>+<TD><A HREF="#CAdv" TITLE="CAdv - comparative adverb">CAdv</A> <CODE>-></CODE> <A HREF="#AP" TITLE="AP - adjectival phrase">AP</A> <CODE>-></CODE> <A HREF="#NP" TITLE="NP - noun phrase (subject or object)">NP</A> <CODE>-></CODE> <A HREF="#AP" TITLE="AP - adjectival phrase">AP</A></TD>+<TD><div class=reveal> <I>as old as she</I> <div class=popup> <ul> <li>API: <CODE>mkAP as_CAdv (mkAP old_A) she_NP</CODE> <li>Afr: <I>so oud soos sy</I> <li>Bul: <I>constant not found: as_CAdv</I> <li>Cat: <I>tan vell com ella</I> <li>Dan: <I>constant not found: as_CAdv</I> <li>Dut: <I>zo oud als ze</I> <li>Eng: <I>as old as she</I> <li>Fin: <I>yhtä vanha kuin hän</I> <li>Fre: <I>aussi vieux qu' elle</I> <li>Ger: <I>ebenso alt wie sie</I> <li>Hin: <I>ितना बूढ़ा जितना वह</I> <li>Ita: <I>così vecchio di lei</I> <li>Lav: <I>tikpat vecs kā viņa</I> <li>Nep: <I>उनी जत्तीकै बुढो</I> <li>Nor: <I>constant not found: as_CAdv</I> <li>Pes: <I>به اندازه ی او پیر</I> <li>Pnb: <I>{s : ParamX.Number => ResPnb.Gender => ResPnb.Case => Str</I> <li>Pol: <I>tak stary jak ona</I> <li>Ron: <I>cel la fel de vechi ca ea</I> <li>Rus: <I>constant not found: as_CAdv</I> <li>Snd: <I>جی۶ن پوڙھی جھڙو ھو۶</I> <li>Spa: <I>si viejo que ella</I> <li>Swe: <I>lika gammal som hon</I> <li>Tha: <I>แก่เท่ากับหล่อน</I> <li>Urd: <I>اتنا بوڑھا جتنا وہ</I> </ul> </div> </div></TD>+</TR>+<TR>+<TD><CODE>reflAP</CODE></TD>+<TD><A HREF="#A2" TITLE="A2 - two-place adjective">A2</A> <CODE>-></CODE> <A HREF="#AP" TITLE="AP - adjectival phrase">AP</A></TD>+<TD><div class=reveal> <I>married to itself</I> <div class=popup> <ul> <li>API: <CODE>mkUtt (reflAP married_A2)</CODE> <li>Afr: <I>getroud met hom</I> <li>Bul: <I>женен за себе си</I> <li>Cat: <I>casat a sÌ</I> <li>Dan: <I>gift med sig</I> <li>Dut: <I>getrouwd met zich</I> <li>Eng: <I>married to itself</I> <li>Fin: <I>avioitunut itsensä kanssa</I> <li>Fre: <I>marié à soi</I> <li>Ger: <I>verheiratet mit sich</I> <li>Hin: <I>शादी शुदा ख़ुद से</I> <li>Ita: <I>sposato con se</I> <li>Lav: <I>precējies ar sevi</I> <li>Nep: <I>आफै सँग विवाहित</I> <li>Nor: <I>gift med seg</I> <li>Pes: <I>متأهل</I> <li>Pnb: <I>constant not found: married_A2</I> <li>Pol: <I>zaślubiony sobie</I> <li>Ron: <I>căsătorit cu sine însuşi</I> <li>Rus: <I>замужем за собой</I> <li>Snd: <I>constant not found: married_A2</I> <li>Spa: <I>casado a sí</I> <li>Swe: <I>gift med sig</I> <li>Tha: <I>แต่งงานแล้วกับตัวเอง</I> <li>Urd: <I>شادی شدہ خود سے</I> </ul> </div> </div></TD>+</TR>+</TABLE>++<A NAME="AdA"></A>+<H2>AdA - adjective-modifying adverb</H2>++<TABLE BORDER="1" CELLPADDING="4">+<TR>+<TH>Function</TH>+<TH>Type</TH>+<TH COLSPAN="2">Example</TH>+</TR>+<TR>+<TD><CODE>almost_AdA</CODE></TD>+<TD><A HREF="#AdA" TITLE="AdA - adjective-modifying adverb">AdA</A></TD>+<TD><div class=reveal> <I>almost red</I> <div class=popup> <ul> <li>API: <CODE>mkAP almost_AdA red_A</CODE> <li>Afr: <I>byna rooi</I> <li>Bul: <I>почти червен</I> <li>Cat: <I>{s : CommonRomance.AForm => Str</I> <li>Dan: <I>næsten rød</I> <li>Dut: <I>bijna rood</I> <li>Eng: <I>almost red</I> <li>Fin: <I>melkein punainen</I> <li>Fre: <I>presque rouge</I> <li>Ger: <I>fast rot</I> <li>Hin: <I>तक़रीबन लाल</I> <li>Ita: <I>quasi rosso</I> <li>Lav: <I>gandrīz sarkans</I> <li>Nep: <I>झण्डै रातो</I> <li>Nor: <I>nesten rød</I> <li>Pes: <I>تقریباً قرمز</I> <li>Pnb: <I>تقریبا لال</I> <li>Pol: <I>prawie czerwony</I> <li>Ron: <I>aproape roşu</I> <li>Rus: <I>почти красный</I> <li>Snd: <I>گھڻو ڪری ڳاڙھو</I> <li>Spa: <I>casi rojo</I> <li>Swe: <I>nästan röd</I> <li>Tha: <I>แดงเกิอบ</I> <li>Urd: <I>تقریبا لال</I> </ul> </div> </div></TD>+</TR>+<TR>+<TD><CODE>quite_Adv</CODE></TD>+<TD><A HREF="#AdA" TITLE="AdA - adjective-modifying adverb">AdA</A></TD>+<TD><div class=reveal> <I>quite</I> <div class=popup> <ul> <li>API: <CODE>quite_Adv</CODE> <li>Afr: <I>heel</I> <li>Bul: <I>доста</I> <li>Cat: <I>bastant</I> <li>Dan: <I>temmelig</I> <li>Dut: <I>heel</I> <li>Eng: <I>quite</I> <li>Fin: <I>melko</I> <li>Fre: <I>assez</I> <li>Ger: <I>ziemlich</I> <li>Hin: <I>काफ़ी</I> <li>Ita: <I>assai</I> <li>Lav: <I>diezgan</I> <li>Nep: <I>एकदम</I> <li>Nor: <I>temmelig</I> <li>Pes: <I>کاملاً</I> <li>Pnb: <I>كہامoسہ</I> <li>Pol: <I>całkiem</I> <li>Ron: <I>chiar</I> <li>Rus: <I>довольно</I> <li>Snd: <I>ڇڏڻ</I> <li>Spa: <I>bastante</I> <li>Swe: <I>ganska</I> <li>Tha: <I>ค่อนข้าง</I> <li>Urd: <I>خاموش</I> </ul> </div> </div></TD>+</TR>+<TR>+<TD><CODE>so_AdA</CODE></TD>+<TD><A HREF="#AdA" TITLE="AdA - adjective-modifying adverb">AdA</A></TD>+<TD><div class=reveal> <I>so</I> <div class=popup> <ul> <li>API: <CODE>so_AdA</CODE> <li>Afr: <I>so</I> <li>Bul: <I>толкова</I> <li>Cat: <I>tan</I> <li>Dan: <I>så</I> <li>Dut: <I>zo</I> <li>Eng: <I>so</I> <li>Fin: <I>niin</I> <li>Fre: <I>si</I> <li>Ger: <I>so</I> <li>Hin: <I>तो</I> <li>Ita: <I>così</I> <li>Lav: <I>tik</I> <li>Nep: <I>यस कारण</I> <li>Nor: <I>så</I> <li>Pes: <I>بسیار</I> <li>Pnb: <I>سo</I> <li>Pol: <I>tak</I> <li>Ron: <I>aşa</I> <li>Rus: <I>так</I> <li>Snd: <I>ان ڪری</I> <li>Spa: <I>tanto</I> <li>Swe: <I>så</I> <li>Tha: <I>ดังนั้น</I> <li>Urd: <I>[اس لیE]</I> </ul> </div> </div></TD>+</TR>+<TR>+<TD><CODE>too_AdA</CODE></TD>+<TD><A HREF="#AdA" TITLE="AdA - adjective-modifying adverb">AdA</A></TD>+<TD><div class=reveal> <I>too</I> <div class=popup> <ul> <li>API: <CODE>too_AdA</CODE> <li>Afr: <I>te</I> <li>Bul: <I>прекалено</I> <li>Cat: <I>massa</I> <li>Dan: <I>for</I> <li>Dut: <I>te</I> <li>Eng: <I>too</I> <li>Fin: <I>liian</I> <li>Fre: <I>trop</I> <li>Ger: <I>zu</I> <li>Hin: <I>बहुत</I> <li>Ita: <I>troppo</I> <li>Lav: <I>pārāk</I> <li>Nep: <I>पनि</I> <li>Nor: <I>for</I> <li>Pes: <I>خیلی</I> <li>Pnb: <I>بہت</I> <li>Pol: <I>za</I> <li>Ron: <I>prea</I> <li>Rus: <I>слишком</I> <li>Snd: <I>بیحد</I> <li>Spa: <I>demasiado</I> <li>Swe: <I>för</I> <li>Tha: <I>เกินไป</I> <li>Urd: <I>بہت</I> </ul> </div> </div></TD>+</TR>+<TR>+<TD><CODE>very_AdA</CODE></TD>+<TD><A HREF="#AdA" TITLE="AdA - adjective-modifying adverb">AdA</A></TD>+<TD><div class=reveal> <I>very</I> <div class=popup> <ul> <li>API: <CODE>very_AdA</CODE> <li>Afr: <I>baie</I> <li>Bul: <I>много</I> <li>Cat: <I>molt</I> <li>Dan: <I>meget</I> <li>Dut: <I>erg</I> <li>Eng: <I>very</I> <li>Fin: <I>erittäin</I> <li>Fre: <I>très</I> <li>Ger: <I>sehr</I> <li>Hin: <I>बहुत</I> <li>Ita: <I>molto</I> <li>Lav: <I>ļoti</I> <li>Nep: <I>धेरै</I> <li>Nor: <I>mye</I> <li>Pes: <I>خیلی</I> <li>Pnb: <I>بہت</I> <li>Pol: <I>bardzo</I> <li>Ron: <I>foarte</I> <li>Rus: <I>очень</I> <li>Snd: <I>تمام</I> <li>Spa: <I>muy</I> <li>Swe: <I>mycket</I> <li>Tha: <I>มาก</I> <li>Urd: <I>بہت</I> </ul> </div> </div></TD>+</TR>+</TABLE>++<A NAME="AdN"></A>+<H2>AdN - numeral-modifying adverb</H2>++<TABLE BORDER="1" CELLPADDING="4">+<TR>+<TH>Function</TH>+<TH>Type</TH>+<TH COLSPAN="2">Example</TH>+</TR>+<TR>+<TD><CODE>almost_AdN</CODE></TD>+<TD><A HREF="#AdN" TITLE="AdN - numeral-modifying adverb">AdN</A></TD>+<TD><div class=reveal> <I>almost eight</I> <div class=popup> <ul> <li>API: <CODE>mkCard almost_AdN (mkCard (mkNumeral n8_Unit))</CODE> <li>Afr: <I>byna agt</I> <li>Bul: <I>почти осмина</I> <li>Cat: <I>{s : CommonRomance.Gender => Str</I> <li>Dan: <I>næsten otte</I> <li>Dut: <I>bijna acht</I> <li>Eng: <I>almost eight</I> <li>Fin: <I>melkein kahdeksan</I> <li>Fre: <I>presque huit</I> <li>Ger: <I>fast acht</I> <li>Hin: <I>तक़रीबन आठ</I> <li>Ita: <I>quasi otto</I> <li>Lav: <I>gandrīz astoņi</I> <li>Nep: <I>झण्डै आठ</I> <li>Nor: <I>nesten åtte</I> <li>Pes: <I>تقریباً هشت</I> <li>Pnb: <I>تقریبا اٹھ</I> <li>Pol: <I>prawie osiemm</I> <li>Ron: <I>aproape opt</I> <li>Rus: <I>почти восемь</I> <li>Snd: <I>گھڻو ڪری اٺ '</I> <li>Spa: <I>casi ocho</I> <li>Swe: <I>nästan åtta</I> <li>Tha: <I>เกิอบแปด</I> <li>Urd: <I>تقریبا آٹھ</I> </ul> </div> </div></TD>+</TR>+<TR>+<TD><CODE>at_least_AdN</CODE></TD>+<TD><A HREF="#AdN" TITLE="AdN - numeral-modifying adverb">AdN</A></TD>+<TD><div class=reveal> <I>at least eight</I> <div class=popup> <ul> <li>API: <CODE>mkCard at_least_AdN (mkCard (mkNumeral n8_Unit))</CODE> <li>Afr: <I>ten minste agt</I> <li>Bul: <I>constant not found: at_least_AdN</I> <li>Cat: <I>almenys vuit</I> <li>Dan: <I>constant not found: at_least_AdN</I> <li>Dut: <I>ten minste acht</I> <li>Eng: <I>at least eight</I> <li>Fin: <I>vähintään kahdeksan</I> <li>Fre: <I>au moins huit</I> <li>Ger: <I>wenigstens acht</I> <li>Hin: <I>कम से कम आठ</I> <li>Ita: <I>almeno otto</I> <li>Lav: <I>vismaz astoņi</I> <li>Nep: <I>कमसेकम आठ</I> <li>Nor: <I>constant not found: at_least_AdN</I> <li>Pes: <I>حداقل هشت</I> <li>Pnb: <I>كم توں كم اٹھ</I> <li>Pol: <I>co najmniej osiemm</I> <li>Ron: <I>cel puţin opt</I> <li>Rus: <I>constant not found: at_least_AdN</I> <li>Snd: <I>گھٽ می گھٽ اٺ '</I> <li>Spa: <I>constant not found: at_least_AdN</I> <li>Swe: <I>minst åtta</I> <li>Tha: <I>อย่างน้อยแปด</I> <li>Urd: <I>كم از كم آٹھ</I> </ul> </div> </div></TD>+</TR>+<TR>+<TD><CODE>at_most_AdN</CODE></TD>+<TD><A HREF="#AdN" TITLE="AdN - numeral-modifying adverb">AdN</A></TD>+<TD><div class=reveal> <I>at most eight</I> <div class=popup> <ul> <li>API: <CODE>mkCard at_most_AdN (mkCard (mkNumeral n8_Unit))</CODE> <li>Afr: <I>hoogstens agt</I> <li>Bul: <I>constant not found: at_most_AdN</I> <li>Cat: <I>com a màxim vuit</I> <li>Dan: <I>constant not found: at_most_AdN</I> <li>Dut: <I>hooguit acht</I> <li>Eng: <I>at most eight</I> <li>Fin: <I>enintään kahdeksan</I> <li>Fre: <I>au plus huit</I> <li>Ger: <I>höchstens acht</I> <li>Hin: <I>ज़्यादा से ज़्यादा आठ</I> <li>Ita: <I>al massimo otto</I> <li>Lav: <I>ne vairāk kā astoņi</I> <li>Nep: <I>बढीमा आठ</I> <li>Nor: <I>constant not found: at_most_AdN</I> <li>Pes: <I>حداکثر هشت</I> <li>Pnb: <I>زیادہ توں زیادہ اٹھ</I> <li>Pol: <I>co najwyżej osiemm</I> <li>Ron: <I>cel mult opt</I> <li>Rus: <I>constant not found: at_most_AdN</I> <li>Snd: <I>گھڻی کان گھڻو اٺ '</I> <li>Spa: <I>constant not found: at_most_AdN</I> <li>Swe: <I>högst åtta</I> <li>Tha: <I>อย่างมากแปด</I> <li>Urd: <I>زیادہ سے زیادہ آٹھ</I> </ul> </div> </div></TD>+</TR>+<TR>+<TD><CODE>mkAdN</CODE></TD>+<TD><A HREF="#CAdv" TITLE="CAdv - comparative adverb">CAdv</A> <CODE>-></CODE> <A HREF="#AdN" TITLE="AdN - numeral-modifying adverb">AdN</A></TD>+<TD><div class=reveal> <I>more than eight</I> <div class=popup> <ul> <li>API: <CODE>mkCard (mkAdN more_CAdv) (mkCard (mkNumeral n8_Unit))</CODE> <li>Afr: <I>meer as agt</I> <li>Bul: <I>повече от осмина</I> <li>Cat: <I>més que vuit</I> <li>Dan: <I>mer end otte</I> <li>Dut: <I>meer dan acht</I> <li>Eng: <I>more than eight</I> <li>Fin: <I>enemmän kuin kahdeksan</I> <li>Fre: <I>plus qu' huit</I> <li>Ger: <I>mehr als acht</I> <li>Hin: <I>आठ से ज़्यादा</I> <li>Ita: <I>più di otto</I> <li>Lav: <I>{s : ResLav.Gender => ResLav.Case => Str</I> <li>Nep: <I>भन्दा बढी आठ</I> <li>Nor: <I>mer enn åtte</I> <li>Pes: <I>بیشتر از هشت</I> <li>Pnb: <I>نالوں ہور اٹھ</I> <li>Pol: <I>więcej niż osiemm</I> <li>Ron: <I>mai mult decât opt</I> <li>Rus: <I>более чем восемь</I> <li>Snd: <I>سان گڏ وڌیڪ اٺ '</I> <li>Spa: <I>más que ocho</I> <li>Swe: <I>mer än åtta</I> <li>Tha: <I>มากว่าแปด</I> <li>Urd: <I>آٹھ سے زیادہ</I> </ul> </div> </div></TD>+</TR>+</TABLE>++<A NAME="AdV"></A>+<H2>AdV - adverb directly attached to verb</H2>++<TABLE BORDER="1" CELLPADDING="4">+<TR>+<TH>Function</TH>+<TH>Type</TH>+<TH COLSPAN="2">Example</TH>+</TR>+<TR>+<TD><CODE>always_AdV</CODE></TD>+<TD><A HREF="#AdV" TITLE="Adv - verb-phrase-modifying adverb">AdV</A></TD>+<TD><div class=reveal> <I>always</I> <div class=popup> <ul> <li>API: <CODE>always_AdV</CODE> <li>Afr: <I>altyd</I> <li>Bul: <I>винаги</I> <li>Cat: <I>sempre</I> <li>Dan: <I>altid</I> <li>Dut: <I>altijd</I> <li>Eng: <I>always</I> <li>Fin: <I>aina</I> <li>Fre: <I>toujours</I> <li>Ger: <I>immer</I> <li>Hin: <I>हमेशा</I> <li>Ita: <I>sempre</I> <li>Lav: <I>vienmēr</I> <li>Nep: <I>सधैँ</I> <li>Nor: <I>altid</I> <li>Pes: <I>همیشه</I> <li>Pnb: <I>ہمیشہ</I> <li>Pol: <I>zawsze</I> <li>Ron: <I>mereu</I> <li>Rus: <I>всегда</I> <li>Snd: <I>ھمیشھ</I> <li>Spa: <I>siempre</I> <li>Swe: <I>alltid</I> <li>Tha: <I>เสมอ</I> <li>Urd: <I>ہمیشہ</I> </ul> </div> </div></TD>+</TR>+</TABLE>++<A NAME="Adv"></A>+<H2>Adv - verb-phrase-modifying adverb</H2>++<TABLE BORDER="1" CELLPADDING="4">+<TR>+<TH>Function</TH>+<TH>Type</TH>+<TH COLSPAN="2">Example</TH>+</TR>+<TR>+<TD><CODE>everywhere_Adv</CODE></TD>+<TD><A HREF="#Adv" TITLE="Adv - verb-phrase-modifying adverb">Adv</A></TD>+<TD><div class=reveal> <I>everywhere</I> <div class=popup> <ul> <li>API: <CODE>everywhere_Adv</CODE> <li>Afr: <I>oral</I> <li>Bul: <I>навсякъде</I> <li>Cat: <I>a tot arreu</I> <li>Dan: <I>overalt</I> <li>Dut: <I>overal</I> <li>Eng: <I>everywhere</I> <li>Fin: <I>kaikkialla</I> <li>Fre: <I>partout</I> <li>Ger: <I>überall</I> <li>Hin: <I>हर जगह</I> <li>Ita: <I>dappertutto</I> <li>Lav: <I>visur</I> <li>Nep: <I>जाता ततै</I> <li>Nor: <I>overalt</I> <li>Pes: <I>هر جا</I> <li>Pnb: <I>ہر تھاں</I> <li>Pol: <I>wszędzie</I> <li>Ron: <I>pretutindeni</I> <li>Rus: <I>везде</I> <li>Snd: <I>ھر ھنڌ</I> <li>Spa: <I>en todas partes</I> <li>Swe: <I>överallt</I> <li>Tha: <I>ทุกที</I> <li>Urd: <I>ہر جگہ</I> </ul> </div> </div></TD>+</TR>+<TR>+<TD><CODE>here7from_Adv</CODE></TD>+<TD><A HREF="#Adv" TITLE="Adv - verb-phrase-modifying adverb">Adv</A></TD>+<TD><div class=reveal> <I>from here</I> <div class=popup> <ul> <li>API: <CODE>here7from_Adv</CODE> <li>Afr: <I>van hier</I> <li>Bul: <I>от тук</I> <li>Cat: <I>d'aquí</I> <li>Dan: <I>herfra</I> <li>Dut: <I>van hier</I> <li>Eng: <I>from here</I> <li>Fin: <I>täältä</I> <li>Fre: <I>d'ici</I> <li>Ger: <I>hieraus</I> <li>Hin: <I>यहाँ से</I> <li>Ita: <I>da quà</I> <li>Lav: <I>no šejienes</I> <li>Nep: <I>यहाँ बाट</I> <li>Nor: <I>herfra</I> <li>Pes: <I>اینجا</I> <li>Pnb: <I>ایتھوں</I> <li>Pol: <I>stąd</I> <li>Ron: <I>de aici</I> <li>Rus: <I>отсюда</I> <li>Snd: <I>ھیڏانھن</I> <li>Spa: <I>de acá</I> <li>Swe: <I>härifrån</I> <li>Tha: <I>จากนี่</I> <li>Urd: <I>یہاں سے</I> </ul> </div> </div></TD>+</TR>+<TR>+<TD><CODE>here7to_Adv</CODE></TD>+<TD><A HREF="#Adv" TITLE="Adv - verb-phrase-modifying adverb">Adv</A></TD>+<TD><div class=reveal> <I>to here</I> <div class=popup> <ul> <li>API: <CODE>here7to_Adv</CODE> <li>Afr: <I>hier</I> <li>Bul: <I>до тук</I> <li>Cat: <I>cap aquí</I> <li>Dan: <I>hit</I> <li>Dut: <I>hier</I> <li>Eng: <I>to here</I> <li>Fin: <I>tänne</I> <li>Fre: <I>ici</I> <li>Ger: <I>hierher</I> <li>Hin: <I>यहाँ पर</I> <li>Ita: <I>quà</I> <li>Lav: <I>uz šejieni</I> <li>Nep: <I>यहाँ सम्म</I> <li>Nor: <I>hit</I> <li>Pes: <I>اینجا</I> <li>Pnb: <I>ایتھے</I> <li>Pol: <I>tutaj</I> <li>Ron: <I>până aici</I> <li>Rus: <I>сюда</I> <li>Snd: <I>اجھو</I> <li>Spa: <I>para acá</I> <li>Swe: <I>hit</I> <li>Tha: <I>ที่นี่</I> <li>Urd: <I>یہاں پر</I> </ul> </div> </div></TD>+</TR>+<TR>+<TD><CODE>here_Adv</CODE></TD>+<TD><A HREF="#Adv" TITLE="Adv - verb-phrase-modifying adverb">Adv</A></TD>+<TD><div class=reveal> <I>here</I> <div class=popup> <ul> <li>API: <CODE>here_Adv</CODE> <li>Afr: <I>hier</I> <li>Bul: <I>тук</I> <li>Cat: <I>aquí</I> <li>Dan: <I>her</I> <li>Dut: <I>hier</I> <li>Eng: <I>here</I> <li>Fin: <I>täällä</I> <li>Fre: <I>ici</I> <li>Ger: <I>hier</I> <li>Hin: <I>यहाँ</I> <li>Ita: <I>quà</I> <li>Lav: <I>šeit</I> <li>Nep: <I>यहाँ</I> <li>Nor: <I>her</I> <li>Pes: <I>اینجا</I> <li>Pnb: <I>ایتھے</I> <li>Pol: <I>tutaj</I> <li>Ron: <I>aici</I> <li>Rus: <I>здесь</I> <li>Snd: <I>ھتی</I> <li>Spa: <I>aquí</I> <li>Swe: <I>här</I> <li>Tha: <I>ที่นี่</I> <li>Urd: <I>یہاں</I> </ul> </div> </div></TD>+</TR>+<TR>+<TD><CODE>mkAdv</CODE></TD>+<TD><A HREF="#A" TITLE="A - one-place adjective">A</A> <CODE>-></CODE> <A HREF="#Adv" TITLE="Adv - verb-phrase-modifying adverb">Adv</A></TD>+<TD><div class=reveal> <I>warmly</I> <div class=popup> <ul> <li>API: <CODE>mkAdv warm_A</CODE> <li>Afr: <I>warm</I> <li>Bul: <I>топло</I> <li>Cat: <I>tèbiament</I> <li>Dan: <I>varmt</I> <li>Dut: <I>warm</I> <li>Eng: <I>warmly</I> <li>Fin: <I>lämpimästi</I> <li>Fre: <I>chaudement</I> <li>Ger: <I>warm</I> <li>Hin: <I>गरम</I> <li>Ita: <I>caldamente</I> <li>Lav: <I>silti</I> <li>Nep: <I>तातो गरी</I> <li>Nor: <I>varmt</I> <li>Pes: <I>گرم</I> <li>Pnb: <I>تتے</I> <li>Pol: <I>ciepło</I> <li>Ron: <I>călduros</I> <li>Rus: <I>тёпло</I> <li>Snd: <I>گرم</I> <li>Spa: <I>tibiamente</I> <li>Swe: <I>varmt</I> <li>Tha: <I>อุ่น</I> <li>Urd: <I>گرم</I> </ul> </div> </div></TD>+</TR>+<TR>+<TD><CODE>mkAdv</CODE></TD>+<TD><A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A> <CODE>-></CODE> <A HREF="#NP" TITLE="NP - noun phrase (subject or object)">NP</A> <CODE>-></CODE> <A HREF="#Adv" TITLE="Adv - verb-phrase-modifying adverb">Adv</A></TD>+<TD><div class=reveal> <I>in the house</I> <div class=popup> <ul> <li>API: <CODE>mkAdv in_Prep (mkNP the_Det house_N)</CODE> <li>Afr: <I>in die huis</I> <li>Bul: <I>в къщата</I> <li>Cat: <I>en la casa</I> <li>Dan: <I>i huset</I> <li>Dut: <I>in het huis</I> <li>Eng: <I>in the house</I> <li>Fin: <I>talossa</I> <li>Fre: <I>dans la maison</I> <li>Ger: <I>im Haus / Hause</I> <li>Hin: <I>घर में</I> <li>Ita: <I>nella casa</I> <li>Lav: <I>mājā</I> <li>Nep: <I>घर मा</I> <li>Nor: <I>i huset</I> <li>Pes: <I>در خانه</I> <li>Pnb: <I>گھر وچ</I> <li>Pol: <I>w domu</I> <li>Ron: <I>în casă</I> <li>Rus: <I>в доме</I> <li>Snd: <I>گھر ۾</I> <li>Spa: <I>en la casa</I> <li>Swe: <I>i huset</I> <li>Tha: <I>ในบ้าน</I> <li>Urd: <I>گھر میں</I> </ul> </div> </div></TD>+</TR>+<TR>+<TD><CODE>mkAdv</CODE></TD>+<TD><A HREF="#Subj" TITLE="Subj - subjunction">Subj</A> <CODE>-></CODE> <A HREF="#S" TITLE="S - declarative sentence">S</A> <CODE>-></CODE> <A HREF="#Adv" TITLE="Adv - verb-phrase-modifying adverb">Adv</A></TD>+<TD><div class=reveal> <I>when she sleeps</I> <div class=popup> <ul> <li>API: <CODE>mkAdv when_Subj (mkS (mkCl she_NP sleep_V))</CODE> <li>Afr: <I>as sy slaap</I> <li>Bul: <I>когато тя спи</I> <li>Cat: <I>quan ella dorm</I> <li>Dan: <I>når hun sover</I> <li>Dut: <I>als ze slaapt</I> <li>Eng: <I>when she sleeps</I> <li>Fin: <I>kun hän nukkuu</I> <li>Fre: <I>quand elle dort</I> <li>Ger: <I>wenn sie schläft</I> <li>Hin: <I>कब वह सोती है</I> <li>Ita: <I>quando lei dorme</I> <li>Lav: <I>kad viņa guļ</I> <li>Nep: <I>कहिले उनी सुत्छिन्</I> <li>Nor: <I>når hun sover</I> <li>Pes: <I>وقتی که او می خوابد</I> <li>Pnb: <I>كدوں او سوندی اے</I> <li>Pol: <I>jeśli ona śpi</I> <li>Ron: <I>când ea doarme</I> <li>Rus: <I>когда она спдит</I> <li>Snd: <I>جڏھن ھو۶ سمھی ٿی</I> <li>Spa: <I>cuando ella duerme</I> <li>Swe: <I>när hon sover</I> <li>Tha: <I>ทีหล่อนนอนหลับ</I> <li>Urd: <I>جب وہ سوتی ہے</I> </ul> </div> </div></TD>+</TR>+<TR>+<TD><CODE>mkAdv</CODE></TD>+<TD><A HREF="#CAdv" TITLE="CAdv - comparative adverb">CAdv</A> <CODE>-></CODE> <A HREF="#A" TITLE="A - one-place adjective">A</A> <CODE>-></CODE> <A HREF="#NP" TITLE="NP - noun phrase (subject or object)">NP</A> <CODE>-></CODE> <A HREF="#Adv" TITLE="Adv - verb-phrase-modifying adverb">Adv</A></TD>+<TD><div class=reveal> <I>more warmly than he</I> <div class=popup> <ul> <li>API: <CODE>mkAdv more_CAdv warm_A he_NP</CODE> <li>Afr: <I>meer warm as hy</I> <li>Bul: <I>по - топло от него</I> <li>Cat: <I>més tèbiament que ell</I> <li>Dan: <I>mer varmt end han</I> <li>Dut: <I>meer warm dan hij</I> <li>Eng: <I>more warmly than he</I> <li>Fin: <I>enemmän lämpimästi kuin hän</I> <li>Fre: <I>plus chaudement que lui</I> <li>Ger: <I>mehr warm als er</I> <li>Hin: <I>उस से ज़्यादा गरम</I> <li>Ita: <I>più caldamente di lui</I> <li>Lav: <I>{s : Str = "siltāk" ++ "nekā" ++ "viņš";</I> <li>Nep: <I>उ भन्दा बढी तातो</I> <li>Nor: <I>mer varmt enn han</I> <li>Pes: <I>گرم بیشتر او</I> <li>Pnb: <I>اونوں ہور تتے</I> <li>Pol: <I>bardziej ciepło niż on</I> <li>Ron: <I>mai călduros decât el</I> <li>Rus: <I>более тёпло чем он</I> <li>Snd: <I>ھو گھڻا وڌیڪ گرم</I> <li>Spa: <I>más tibiamente que él</I> <li>Swe: <I>mer varmt än han</I> <li>Tha: <I>อุ่นมากกว่าเขา</I> <li>Urd: <I>اس سے زیادہ گرم</I> </ul> </div> </div></TD>+</TR>+<TR>+<TD><CODE>mkAdv</CODE></TD>+<TD><A HREF="#CAdv" TITLE="CAdv - comparative adverb">CAdv</A> <CODE>-></CODE> <A HREF="#A" TITLE="A - one-place adjective">A</A> <CODE>-></CODE> <A HREF="#S" TITLE="S - declarative sentence">S</A> <CODE>-></CODE> <A HREF="#Adv" TITLE="Adv - verb-phrase-modifying adverb">Adv</A></TD>+<TD><div class=reveal> <I>more warmly than he runs</I> <div class=popup> <ul> <li>API: <CODE>mkAdv more_CAdv warm_A (mkS (mkCl he_NP run_V))</CODE> <li>Afr: <I>meer warm as hy hardloop</I> <li>Bul: <I>по - топло от колкото той бяга</I> <li>Cat: <I>més tèbiament que ell corri</I> <li>Dan: <I>mer varmt end han løber</I> <li>Dut: <I>meer warm dan hij rent</I> <li>Eng: <I>more warmly than he runs</I> <li>Fin: <I>enemmän lämpimästi kuin hän juoksee</I> <li>Fre: <I>plus chaudement qu' il coure</I> <li>Ger: <I>mehr warm als er läuft</I> <li>Hin: <I>से ज़्यादा गरम वह दौड़ता है</I> <li>Ita: <I>più caldamente di lui corra</I> <li>Lav: <I>{s : Str = "siltāk" ++ "nekā" ++ "viņš" ++ "skrien";</I> <li>Nep: <I>भन्दा बढी तातो उ कुद्छ</I> <li>Nor: <I>mer varmt enn han springer</I> <li>Pes: <I>گرم بیشتر او می دود</I> <li>Pnb: <I>ہور تتے او دوڑدا اے</I> <li>Pol: <I>bardziej ciepło niż on biegnie</I> <li>Ron: <I>mai călduros decât el fuge</I> <li>Rus: <I>более тёпло чем он бегает</I> <li>Snd: <I>گھڻا وڌیڪ گرم ھو ڊوڙی ٿو</I> <li>Spa: <I>más tibiamente que el corra</I> <li>Swe: <I>mer varmt än han springer</I> <li>Tha: <I>อุ่นมากกว่าเขาวิ่ง</I> <li>Urd: <I>سے زیادہ گرم وہ دوڑتا ہے</I> </ul> </div> </div></TD>+</TR>+<TR>+<TD><CODE>mkAdv</CODE></TD>+<TD><A HREF="#AdA" TITLE="AdA - adjective-modifying adverb">AdA</A> <CODE>-></CODE> <A HREF="#Adv" TITLE="Adv - verb-phrase-modifying adverb">Adv</A> <CODE>-></CODE> <A HREF="#Adv" TITLE="Adv - verb-phrase-modifying adverb">Adv</A></TD>+<TD><div class=reveal> <I>very warmly</I> <div class=popup> <ul> <li>API: <CODE>mkAdv very_AdA (mkAdv warm_A)</CODE> <li>Afr: <I>baie warm</I> <li>Bul: <I>много топло</I> <li>Cat: <I>molt tèbiament</I> <li>Dan: <I>meget varmt</I> <li>Dut: <I>erg warm</I> <li>Eng: <I>very warmly</I> <li>Fin: <I>erittäin lämpimästi</I> <li>Fre: <I>très chaudement</I> <li>Ger: <I>sehr warm</I> <li>Hin: <I>बहुत गरम</I> <li>Ita: <I>molto caldamente</I> <li>Lav: <I>ļoti silti</I> <li>Nep: <I>धेरै तातो गरी</I> <li>Nor: <I>mye varmt</I> <li>Pes: <I>خیلی گرم</I> <li>Pnb: <I>بہت تتے</I> <li>Pol: <I>bardzo ciepło</I> <li>Ron: <I>foarte călduros</I> <li>Rus: <I>очень тёпло</I> <li>Snd: <I>تمام گرم</I> <li>Spa: <I>muy tibiamente</I> <li>Swe: <I>mycket varmt</I> <li>Tha: <I>อุ่นมาก</I> <li>Urd: <I>بہت گرم</I> </ul> </div> </div></TD>+</TR>+<TR>+<TD><CODE>mkAdv</CODE></TD>+<TD><A HREF="#Conj" TITLE="Conj - conjunction">Conj</A> <CODE>-></CODE> <A HREF="#Adv" TITLE="Adv - verb-phrase-modifying adverb">Adv</A> <CODE>-></CODE> <A HREF="#Adv" TITLE="Adv - verb-phrase-modifying adverb">Adv</A> <CODE>-></CODE> <A HREF="#Adv" TITLE="Adv - verb-phrase-modifying adverb">Adv</A></TD>+<TD><div class=reveal> <I>here and now</I> <div class=popup> <ul> <li>API: <CODE>mkAdv and_Conj here_Adv now_Adv</CODE> <li>Afr: <I>hier en nou</I> <li>Bul: <I>тук и сега</I> <li>Cat: <I>aquí i ara</I> <li>Dan: <I>her og nu</I> <li>Dut: <I>hier en nu</I> <li>Eng: <I>here and now</I> <li>Fin: <I>täällä ja nyt</I> <li>Fre: <I>ici et maintenant</I> <li>Ger: <I>hier und jetzt</I> <li>Hin: <I>यहाँ और अब</I> <li>Ita: <I>quà e adesso</I> <li>Lav: <I>šeit un tagad</I> <li>Nep: <I>यहाँ र अहीले</I> <li>Nor: <I>her og nå</I> <li>Pes: <I>اینجا و حالا</I> <li>Pnb: <I>ایتھے تے ہون</I> <li>Pol: <I>tutaj i teraz</I> <li>Ron: <I>aici şi acum</I> <li>Rus: <I>здесь и сейчас</I> <li>Snd: <I>ھتی ۽ ھاڻی</I> <li>Spa: <I>aquí y ahora</I> <li>Swe: <I>här och nu</I> <li>Tha: <I>ที่นี่และเดี๋ยวนี้</I> <li>Urd: <I>یہاں اور اب</I> </ul> </div> </div></TD>+</TR>+<TR>+<TD><CODE>mkAdv</CODE></TD>+<TD><A HREF="#Conj" TITLE="Conj - conjunction">Conj</A> <CODE>-></CODE> <A HREF="#ListAdv">ListAdv</A> <CODE>-></CODE> <A HREF="#Adv" TITLE="Adv - verb-phrase-modifying adverb">Adv</A></TD>+<TD><div class=reveal> <I>with her , here and now</I> <div class=popup> <ul> <li>API: <CODE>mkAdv and_Conj (mkListAdv (mkAdv with_Prep she_NP) (mkListAdv here_Adv now_Adv))</CODE> <li>Afr: <I>met haar , hier en nou</I> <li>Bul: <I>с нея , тук и сега</I> <li>Cat: <I>amb ella , aquí i ara</I> <li>Dan: <I>med hende , her og nu</I> <li>Dut: <I>met haar , hier en nu</I> <li>Eng: <I>with her , here and now</I> <li>Fin: <I>hänen kanssa , täällä ja nyt</I> <li>Fre: <I>avec elle , ici et maintenant</I> <li>Ger: <I>mit ihr , hier und jetzt</I> <li>Hin: <I>उस के साथ , यहाँ और अब</I> <li>Ita: <I>con lei , quà e adesso</I> <li>Lav: <I>ar viņu , šeit un tagad</I> <li>Nep: <I>उनी सँग , यहाँ र अहीले</I> <li>Nor: <I>med henne , her og nå</I> <li>Pes: <I>با او , اینجا و حالا</I> <li>Pnb: <I>اونوں دے نال , ایتھے تے ہون</I> <li>Pol: <I>z nią , tutaj i teraz</I> <li>Ron: <I>cu ea , aici şi acum</I> <li>Rus: <I>с ней , здесь и сейчас</I> <li>Snd: <I>ھو سان , ھتی ۽ ھاڻی</I> <li>Spa: <I>con ella , aquí y ahora</I> <li>Swe: <I>med henne , här och nu</I> <li>Tha: <I>กับหล่อนที่นี่และเดี๋ยวนี้</I> <li>Urd: <I>اس كے ساتھ , یہاں اور اب</I> </ul> </div> </div></TD>+</TR>+<TR>+<TD><CODE>somewhere_Adv</CODE></TD>+<TD><A HREF="#Adv" TITLE="Adv - verb-phrase-modifying adverb">Adv</A></TD>+<TD><div class=reveal> <I>somewhere</I> <div class=popup> <ul> <li>API: <CODE>somewhere_Adv</CODE> <li>Afr: <I>êrens</I> <li>Bul: <I>някъде</I> <li>Cat: <I>a algun lloc</I> <li>Dan: <I>et eller annet sted</I> <li>Dut: <I>ergens</I> <li>Eng: <I>somewhere</I> <li>Fin: <I>jossain</I> <li>Fre: <I>quelque part</I> <li>Ger: <I>irgendwo</I> <li>Hin: <I>कहीं</I> <li>Ita: <I>qualche parte</I> <li>Lav: <I>kaut kur</I> <li>Nep: <I>कहीं</I> <li>Nor: <I>et eller annet sted</I> <li>Pes: <I>جایی</I> <li>Pnb: <I>كتلے</I> <li>Pol: <I>gdzieś</I> <li>Ron: <I>undeva</I> <li>Rus: <I>где-нибудь</I> <li>Snd: <I>ڪٿی</I> <li>Spa: <I>en ninguna parte</I> <li>Swe: <I>någonstans</I> <li>Tha: <I>บางแห่ง</I> <li>Urd: <I>كہیں پر</I> </ul> </div> </div></TD>+</TR>+<TR>+<TD><CODE>there7from_Adv</CODE></TD>+<TD><A HREF="#Adv" TITLE="Adv - verb-phrase-modifying adverb">Adv</A></TD>+<TD><div class=reveal> <I>from there</I> <div class=popup> <ul> <li>API: <CODE>there7from_Adv</CODE> <li>Afr: <I>van daar</I> <li>Bul: <I>от там</I> <li>Cat: <I>d'allà</I> <li>Dan: <I>derfra</I> <li>Dut: <I>van daar</I> <li>Eng: <I>from there</I> <li>Fin: <I>sieltä</I> <li>Fre: <I>de là</I> <li>Ger: <I>daher</I> <li>Hin: <I>वहाँ से</I> <li>Ita: <I>di là</I> <li>Lav: <I>no turienes</I> <li>Nep: <I>त्यहाँ बाट</I> <li>Nor: <I>derfra</I> <li>Pes: <I>آنجا</I> <li>Pnb: <I>اوتھوں</I> <li>Pol: <I>stamtąd</I> <li>Ron: <I>de acolo</I> <li>Rus: <I>оттуда</I> <li>Snd: <I>ھتان</I> <li>Spa: <I>de allá</I> <li>Swe: <I>därifrån</I> <li>Tha: <I>จากนั่น</I> <li>Urd: <I>وہاں سے</I> </ul> </div> </div></TD>+</TR>+<TR>+<TD><CODE>there7to_Adv</CODE></TD>+<TD><A HREF="#Adv" TITLE="Adv - verb-phrase-modifying adverb">Adv</A></TD>+<TD><div class=reveal> <I>there</I> <div class=popup> <ul> <li>API: <CODE>there7to_Adv</CODE> <li>Afr: <I>daar</I> <li>Bul: <I>до там</I> <li>Cat: <I>cap a allà</I> <li>Dan: <I>dit</I> <li>Dut: <I>daar</I> <li>Eng: <I>there</I> <li>Fin: <I>sinne</I> <li>Fre: <I>là</I> <li>Ger: <I>dahin</I> <li>Hin: <I>वहाँ पर</I> <li>Ita: <I>là</I> <li>Lav: <I>uz turieni</I> <li>Nep: <I>त्यहाँ सम्म</I> <li>Nor: <I>dit</I> <li>Pes: <I>آنجا</I> <li>Pnb: <I>اوتھے</I> <li>Pol: <I>tam</I> <li>Ron: <I>până acolo</I> <li>Rus: <I>туда</I> <li>Snd: <I>ھتی</I> <li>Spa: <I>para allá</I> <li>Swe: <I>dit</I> <li>Tha: <I>ที่นั่น</I> <li>Urd: <I>وہاں پر</I> </ul> </div> </div></TD>+</TR>+<TR>+<TD><CODE>there_Adv</CODE></TD>+<TD><A HREF="#Adv" TITLE="Adv - verb-phrase-modifying adverb">Adv</A></TD>+<TD><div class=reveal> <I>there</I> <div class=popup> <ul> <li>API: <CODE>there_Adv</CODE> <li>Afr: <I>daar</I> <li>Bul: <I>там</I> <li>Cat: <I>allà</I> <li>Dan: <I>der</I> <li>Dut: <I>daar</I> <li>Eng: <I>there</I> <li>Fin: <I>siellä</I> <li>Fre: <I>là</I> <li>Ger: <I>da</I> <li>Hin: <I>वहाँ</I> <li>Ita: <I>là</I> <li>Lav: <I>tur</I> <li>Nep: <I>त्यहाँ</I> <li>Nor: <I>der</I> <li>Pes: <I>آنجا</I> <li>Pnb: <I>اوتھے</I> <li>Pol: <I>tam</I> <li>Ron: <I>acolo</I> <li>Rus: <I>там</I> <li>Snd: <I>اتی</I> <li>Spa: <I>allí</I> <li>Swe: <I>där</I> <li>Tha: <I>ที่นั่น</I> <li>Urd: <I>وہاں</I> </ul> </div> </div></TD>+</TR>+</TABLE>++<A NAME="Ant"></A>+<H2>Ant - anteriority</H2>++<TABLE BORDER="1" CELLPADDING="4">+<TR>+<TH>Function</TH>+<TH>Type</TH>+<TH COLSPAN="2">Example</TH>+</TR>+<TR>+<TD><CODE>anteriorAnt</CODE></TD>+<TD><A HREF="#Ant" TITLE="Ant - anteriority">Ant</A></TD>+<TD><div class=reveal> <I>she has slept</I> <div class=popup> <ul> <li>API: <CODE>mkS anteriorAnt (mkCl she_NP sleep_V)</CODE> <li>Afr: <I>sy het geslaap</I> <li>Bul: <I>тя е спалa</I> <li>Cat: <I>ella ha dormit</I> <li>Dan: <I>hun har sovet</I> <li>Dut: <I>ze heeft geslapen</I> <li>Eng: <I>she has slept</I> <li>Fin: <I>hän on nukkunut</I> <li>Fre: <I>elle a dormi</I> <li>Ger: <I>sie hat geschlafen</I> <li>Hin: <I>वह सो चुकी है</I> <li>Ita: <I>lei ha dormito</I> <li>Lav: <I>viņa ir gulējusi</I> <li>Nep: <I>उनी सुतेकिछिन्</I> <li>Nor: <I>hun har sovet</I> <li>Pes: <I>او خوابیده است</I> <li>Pnb: <I>او سو گیی اے</I> <li>Pol: <I>ona spała</I> <li>Ron: <I>ea a dormit</I> <li>Rus: <I>она спдит</I> <li>Snd: <I>ھو۶ سمھیل اھی</I> <li>Spa: <I>ella ha dormido</I> <li>Swe: <I>hon har sovit</I> <li>Tha: <I>หล่อนนอนหลับ</I> <li>Urd: <I>وہ سو چكی ہے</I> </ul> </div> </div></TD>+</TR>+<TR>+<TD><CODE>simultaneousAnt</CODE></TD>+<TD><A HREF="#Ant" TITLE="Ant - anteriority">Ant</A></TD>+<TD><div class=reveal> <I>she sleeps</I> <div class=popup> <ul> <li>API: <CODE>mkS simultaneousAnt (mkCl she_NP sleep_V)</CODE> <li>Afr: <I>sy slaap</I> <li>Bul: <I>тя спи</I> <li>Cat: <I>ella dorm</I> <li>Dan: <I>hun sover</I> <li>Dut: <I>ze slaapt</I> <li>Eng: <I>she sleeps</I> <li>Fin: <I>hän nukkuu</I> <li>Fre: <I>elle dort</I> <li>Ger: <I>sie schläft</I> <li>Hin: <I>वह सोती है</I> <li>Ita: <I>lei dorme</I> <li>Lav: <I>viņa guļ</I> <li>Nep: <I>उनी सुत्छिन्</I> <li>Nor: <I>hun sover</I> <li>Pes: <I>او می خوابد</I> <li>Pnb: <I>او سوندی اے</I> <li>Pol: <I>ona śpi</I> <li>Ron: <I>ea doarme</I> <li>Rus: <I>она спдит</I> <li>Snd: <I>ھو۶ سمھی ٿی</I> <li>Spa: <I>ella duerme</I> <li>Swe: <I>hon sover</I> <li>Tha: <I>หล่อนนอนหลับ</I> <li>Urd: <I>وہ سوتی ہے</I> </ul> </div> </div></TD>+</TR>+</TABLE>++<A NAME="CAdv"></A>+<H2>CAdv - comparative adverb</H2>++<TABLE BORDER="1" CELLPADDING="4">+<TR>+<TH>Function</TH>+<TH>Type</TH>+<TH COLSPAN="2">Example</TH>+</TR>+<TR>+<TD><CODE>as_CAdv</CODE></TD>+<TD><A HREF="#CAdv" TITLE="CAdv - comparative adverb">CAdv</A></TD>+<TD><div class=reveal> <I>as</I> <div class=popup> <ul> <li>API: <CODE>as_CAdv</CODE> <li>Afr: <I>so</I> <li>Bul: <I>constant not found: as_CAdv</I> <li>Cat: <I>tan</I> <li>Dan: <I>constant not found: as_CAdv</I> <li>Dut: <I>zo</I> <li>Eng: <I>as</I> <li>Fin: <I>yhtä</I> <li>Fre: <I>aussi</I> <li>Ger: <I>ebenso</I> <li>Hin: <I>ितना</I> <li>Ita: <I>così</I> <li>Lav: <I>tikpat</I> <li>Nep: <I>जत्तीकै</I> <li>Nor: <I>constant not found: as_CAdv</I> <li>Pes: <I>به اندازه ی</I> <li>Pnb: <I>ایناں</I> <li>Pol: <I>tak</I> <li>Ron: <I>la fel de</I> <li>Rus: <I>constant not found: as_CAdv</I> <li>Snd: <I>جی۶ن</I> <li>Spa: <I>si</I> <li>Swe: <I>lika</I> <li>Tha: <I>เท่า</I> <li>Urd: <I>اتنا</I> </ul> </div> </div></TD>+</TR>+<TR>+<TD><CODE>less_CAdv</CODE></TD>+<TD><A HREF="#CAdv" TITLE="CAdv - comparative adverb">CAdv</A></TD>+<TD><div class=reveal> <I>less</I> <div class=popup> <ul> <li>API: <CODE>less_CAdv</CODE> <li>Afr: <I>minder</I> <li>Bul: <I>не</I> <li>Cat: <I>menys</I> <li>Dan: <I>mindre</I> <li>Dut: <I>minder</I> <li>Eng: <I>less</I> <li>Fin: <I>vähemmän</I> <li>Fre: <I>moins</I> <li>Ger: <I>weniger</I> <li>Hin: <I>कम</I> <li>Ita: <I>meno</I> <li>Lav: <I>mazāk</I> <li>Nep: <I>कम</I> <li>Nor: <I>mindre</I> <li>Pes: <I>کمتر</I> <li>Pnb: <I>كٹ</I> <li>Pol: <I>mniej</I> <li>Ron: <I>mai puţin</I> <li>Rus: <I>менее</I> <li>Snd: <I>گھٽ</I> <li>Spa: <I>menos</I> <li>Swe: <I>mindre</I> <li>Tha: <I>น้อย</I> <li>Urd: <I>كم</I> </ul> </div> </div></TD>+</TR>+<TR>+<TD><CODE>more_CAdv</CODE></TD>+<TD><A HREF="#CAdv" TITLE="CAdv - comparative adverb">CAdv</A></TD>+<TD><div class=reveal> <I>more</I> <div class=popup> <ul> <li>API: <CODE>more_CAdv</CODE> <li>Afr: <I>meer</I> <li>Bul: <I>''</I> <li>Cat: <I>més</I> <li>Dan: <I>mer</I> <li>Dut: <I>meer</I> <li>Eng: <I>more</I> <li>Fin: <I>enemmän</I> <li>Fre: <I>plus</I> <li>Ger: <I>mehr</I> <li>Hin: <I>ज़्यादा</I> <li>Ita: <I>più</I> <li>Lav: <I>{s = []; d = ParamX.Compar; p = "nekā";</I> <li>Nep: <I>बढी</I> <li>Nor: <I>mer</I> <li>Pes: <I>بیشتر</I> <li>Pnb: <I>ہور</I> <li>Pol: <I>bardziej</I> <li>Ron: <I>mai</I> <li>Rus: <I>более</I> <li>Snd: <I>وڌیڪ</I> <li>Spa: <I>más</I> <li>Swe: <I>mer</I> <li>Tha: <I>มาก</I> <li>Urd: <I>زیادہ</I> </ul> </div> </div></TD>+</TR>+</TABLE>++<A NAME="CN"></A>+<H2>CN - common noun (without determiner)</H2>++<TABLE BORDER="1" CELLPADDING="4">+<TR>+<TH>Function</TH>+<TH>Type</TH>+<TH COLSPAN="2">Example</TH>+</TR>+<TR>+<TD><CODE>mkCN</CODE></TD>+<TD><A HREF="#N" TITLE="N - common noun">N</A> <CODE>-></CODE> <A HREF="#CN" TITLE="CN - common noun (without determiner)">CN</A></TD>+<TD><div class=reveal> <I>house</I> <div class=popup> <ul> <li>API: <CODE>mkCN house_N</CODE> <li>Afr: <I>huis</I> <li>Bul: <I>къща</I> <li>Cat: <I>casa</I> <li>Dan: <I>hus</I> <li>Dut: <I>huis</I> <li>Eng: <I>house</I> <li>Fin: <I>talo</I> <li>Fre: <I>maison</I> <li>Ger: <I>Haus</I> <li>Hin: <I>घर</I> <li>Ita: <I>casa</I> <li>Lav: <I>māja</I> <li>Nep: <I>घर</I> <li>Nor: <I>hus</I> <li>Pes: <I>خانه</I> <li>Pnb: <I>{s = table ParamX.Number [table ResPnb.Case ["گھر"; "گھر"; "گھر";</I> <li>Pol: <I>dom</I> <li>Ron: <I>casă</I> <li>Rus: <I>дом</I> <li>Snd: <I>گھر</I> <li>Spa: <I>casa</I> <li>Swe: <I>hus</I> <li>Tha: <I>บ้าน</I> <li>Urd: <I>گھر</I> </ul> </div> </div></TD>+</TR>+<TR>+<TD><CODE>mkCN</CODE></TD>+<TD><A HREF="#N2" TITLE="N2 - relational noun">N2</A> <CODE>-></CODE> <A HREF="#NP" TITLE="NP - noun phrase (subject or object)">NP</A> <CODE>-></CODE> <A HREF="#CN" TITLE="CN - common noun (without determiner)">CN</A></TD>+<TD><div class=reveal> <I>mother of the king</I> <div class=popup> <ul> <li>API: <CODE>mkCN mother_N2 (mkNP the_Det king_N)</CODE> <li>Afr: <I>ma van die koning</I> <li>Bul: <I>майка на царя</I> <li>Cat: <I>mare del rei</I> <li>Dan: <I>moder til kongen</I> <li>Dut: <I>moeder van de koning</I> <li>Eng: <I>mother of the king</I> <li>Fin: <I>kuninkaan äiti</I> <li>Fre: <I>mère du roi</I> <li>Ger: <I>Mutter von dem König</I> <li>Hin: <I>constant not found: mother_N2</I> <li>Ita: <I>madre del ré</I> <li>Lav: <I>karaļa māte</I> <li>Nep: <I>राजा को आमा</I> <li>Nor: <I>mor til kongen</I> <li>Pes: <I>مادر پادشاه</I> <li>Pnb: <I>{s : ParamX.Number => ResPnb.Case => Str</I> <li>Pol: <I>matka króla</I> <li>Ron: <I>mamă regelui</I> <li>Rus: <I>мать короля</I> <li>Snd: <I>constant not found: mother_N2</I> <li>Spa: <I>madre del rey</I> <li>Swe: <I>mor till kungen</I> <li>Tha: <I>แม่ของพระราชา</I> <li>Urd: <I>بادشاہ كی ماں</I> </ul> </div> </div></TD>+</TR>+<TR>+<TD><CODE>mkCN</CODE></TD>+<TD><A HREF="#N3" TITLE="N3 - three-place relational noun">N3</A> <CODE>-></CODE> <A HREF="#NP" TITLE="NP - noun phrase (subject or object)">NP</A> <CODE>-></CODE> <A HREF="#NP" TITLE="NP - noun phrase (subject or object)">NP</A> <CODE>-></CODE> <A HREF="#CN" TITLE="CN - common noun (without determiner)">CN</A></TD>+<TD><div class=reveal> <I>distance from this city to Paris</I> <div class=popup> <ul> <li>API: <CODE>mkCN distance_N3 (mkNP this_Det city_N) (mkNP paris_PN)</CODE> <li>Afr: <I>afstand van hierdie stad na Parys</I> <li>Bul: <I>разстояние от този град до Париж</I> <li>Cat: <I>distància de aquesta ciutat a Paris</I> <li>Dan: <I>afstand fra denne by til Paris</I> <li>Dut: <I>afstand van deze stad naar Parijs</I> <li>Eng: <I>distance from this city to Paris</I> <li>Fin: <I>etäisyys tästä kaupungista Pariisiin</I> <li>Fre: <I>distance de cette ville à Paris</I> <li>Ger: <I>Entfernung von dieser Stadt zu Paris</I> <li>Hin: <I>पैरिस का इस शहर से फ़ासला</I> <li>Ita: <I>distanza di questa città a Parigi</I> <li>Lav: <I>attālums no šīs pilsētas līdz Parīzei</I> <li>Nep: <I>पेरिस देखि यो शहर सम्म को दुरी</I> <li>Nor: <I>avstand fra denne byen til Paris</I> <li>Pes: <I>فاصله از این شهر تا پاریس</I> <li>Pnb: <I>constant not found: distance_N3</I> <li>Pol: <I>odległość z tego miasta do Paryża</I> <li>Ron: <I>distanţă de la acest oraş la Paris</I> <li>Rus: <I>расстояние от этого города к Парижу</I> <li>Snd: <I>constant not found: distance_N3</I> <li>Spa: <I>distancia de esta ciudad a Paris</I> <li>Swe: <I>avstånd från den här staden till Paris</I> <li>Tha: <I>ระยะทางจากเมืองเมืองนี้ถืงปารีส</I> <li>Urd: <I>پیرس كا اس شہر سے فاصلہ</I> </ul> </div> </div></TD>+</TR>+<TR>+<TD><CODE>mkCN</CODE></TD>+<TD><A HREF="#N2" TITLE="N2 - relational noun">N2</A> <CODE>-></CODE> <A HREF="#CN" TITLE="CN - common noun (without determiner)">CN</A></TD>+<TD><div class=reveal> <I>mother</I> <div class=popup> <ul> <li>API: <CODE>mkCN mother_N2</CODE> <li>Afr: <I>ma</I> <li>Bul: <I>майка</I> <li>Cat: <I>mare</I> <li>Dan: <I>moder</I> <li>Dut: <I>moeder</I> <li>Eng: <I>mother</I> <li>Fin: <I>äiti</I> <li>Fre: <I>mère</I> <li>Ger: <I>Mutter</I> <li>Hin: <I>constant not found: mother_N2</I> <li>Ita: <I>madre</I> <li>Lav: <I>māte</I> <li>Nep: <I>आमा</I> <li>Nor: <I>mor</I> <li>Pes: <I>مادر</I> <li>Pnb: <I>{s : ParamX.Number => ResPnb.Case => Str</I> <li>Pol: <I>matka</I> <li>Ron: <I>mamă</I> <li>Rus: <I>мать</I> <li>Snd: <I>constant not found: mother_N2</I> <li>Spa: <I>madre</I> <li>Swe: <I>mor</I> <li>Tha: <I>แม่</I> <li>Urd: <I>ماں</I> </ul> </div> </div></TD>+</TR>+<TR>+<TD><CODE>mkCN</CODE></TD>+<TD><A HREF="#N3" TITLE="N3 - three-place relational noun">N3</A> <CODE>-></CODE> <A HREF="#CN" TITLE="CN - common noun (without determiner)">CN</A></TD>+<TD><div class=reveal> <I>distance</I> <div class=popup> <ul> <li>API: <CODE>mkCN distance_N3</CODE> <li>Afr: <I>afstand</I> <li>Bul: <I>разстояние</I> <li>Cat: <I>distància</I> <li>Dan: <I>afstand</I> <li>Dut: <I>afstand</I> <li>Eng: <I>distance</I> <li>Fin: <I>etäisyys</I> <li>Fre: <I>distance</I> <li>Ger: <I>Entfernung</I> <li>Hin: <I>फ़ासला</I> <li>Ita: <I>distanza</I> <li>Lav: <I>attālums</I> <li>Nep: <I>दुरी</I> <li>Nor: <I>avstand</I> <li>Pes: <I>فاصله</I> <li>Pnb: <I>constant not found: distance_N3</I> <li>Pol: <I>odległość</I> <li>Ron: <I>distanţă</I> <li>Rus: <I>расстояние</I> <li>Snd: <I>constant not found: distance_N3</I> <li>Spa: <I>distancia</I> <li>Swe: <I>avstånd</I> <li>Tha: <I>ระยะทาง</I> <li>Urd: <I>فاصلہ</I> </ul> </div> </div></TD>+</TR>+<TR>+<TD><CODE>mkCN</CODE></TD>+<TD><A HREF="#A" TITLE="A - one-place adjective">A</A> <CODE>-></CODE> <A HREF="#N" TITLE="N - common noun">N</A> <CODE>-></CODE> <A HREF="#CN" TITLE="CN - common noun (without determiner)">CN</A></TD>+<TD><div class=reveal> <I>big house</I> <div class=popup> <ul> <li>API: <CODE>mkCN big_A house_N</CODE> <li>Afr: <I>groot huis</I> <li>Bul: <I>голяма къща</I> <li>Cat: <I>casa grosa</I> <li>Dan: <I>stort hus</I> <li>Dut: <I>groot huis</I> <li>Eng: <I>big house</I> <li>Fin: <I>suuri talo</I> <li>Fre: <I>grande maison</I> <li>Ger: <I>großes Haus</I> <li>Hin: <I>बड़ा घर</I> <li>Ita: <I>grande casa</I> <li>Lav: <I>liela māja</I> <li>Nep: <I>ठुलो घर</I> <li>Nor: <I>stort hus</I> <li>Pes: <I>خانه ی بزرگ</I> <li>Pnb: <I>{s : ParamX.Number => ResPnb.Case => Str</I> <li>Pol: <I>duży dom</I> <li>Ron: <I>casă mare</I> <li>Rus: <I>большой дом</I> <li>Snd: <I>وڏو گھر</I> <li>Spa: <I>grande casa</I> <li>Swe: <I>stort hus</I> <li>Tha: <I>บ้านใหญ่</I> <li>Urd: <I>بڑا گھر</I> </ul> </div> </div></TD>+</TR>+<TR>+<TD><CODE>mkCN</CODE></TD>+<TD><A HREF="#A" TITLE="A - one-place adjective">A</A> <CODE>-></CODE> <A HREF="#CN" TITLE="CN - common noun (without determiner)">CN</A> <CODE>-></CODE> <A HREF="#CN" TITLE="CN - common noun (without determiner)">CN</A></TD>+<TD><div class=reveal> <I>big blue house</I> <div class=popup> <ul> <li>API: <CODE>mkCN big_A (mkCN blue_A house_N)</CODE> <li>Afr: <I>groot blou huis</I> <li>Bul: <I>голяма синя къща</I> <li>Cat: <I>casa blava grosa</I> <li>Dan: <I>stort blått hus</I> <li>Dut: <I>groot blauw huis</I> <li>Eng: <I>big blue house</I> <li>Fin: <I>suuri sininen talo</I> <li>Fre: <I>grande maison bleue</I> <li>Ger: <I>großes blaues Haus</I> <li>Hin: <I>बड़ा नीला घर</I> <li>Ita: <I>grande casa blù</I> <li>Lav: <I>liela zila māja</I> <li>Nep: <I>ठुलो निलो घर</I> <li>Nor: <I>stort blått hus</I> <li>Pes: <I>خانه ی آبی بزرگ</I> <li>Pnb: <I>{s : ParamX.Number => ResPnb.Case => Str</I> <li>Pol: <I>duży niebieski dom</I> <li>Ron: <I>casă albastră mare</I> <li>Rus: <I>большой голубой дом</I> <li>Snd: <I>وڏو نیرو گھر</I> <li>Spa: <I>grande casa azul</I> <li>Swe: <I>stort blått hus</I> <li>Tha: <I>บ้านน้ำเงินใหญ่</I> <li>Urd: <I>بڑا نیلا گھر</I> </ul> </div> </div></TD>+</TR>+<TR>+<TD><CODE>mkCN</CODE></TD>+<TD><A HREF="#AP" TITLE="AP - adjectival phrase">AP</A> <CODE>-></CODE> <A HREF="#N" TITLE="N - common noun">N</A> <CODE>-></CODE> <A HREF="#CN" TITLE="CN - common noun (without determiner)">CN</A></TD>+<TD><div class=reveal> <I>very big house</I> <div class=popup> <ul> <li>API: <CODE>mkCN (mkAP very_AdA big_A) house_N</CODE> <li>Afr: <I>baie groot huis</I> <li>Bul: <I>много голяма къща</I> <li>Cat: <I>casa molt grosa</I> <li>Dan: <I>meget stort hus</I> <li>Dut: <I>erg groot huis</I> <li>Eng: <I>very big house</I> <li>Fin: <I>erittäin suuri talo</I> <li>Fre: <I>très grande maison</I> <li>Ger: <I>sehr großes Haus</I> <li>Hin: <I>बहुत बड़ा घर</I> <li>Ita: <I>molto grande casa</I> <li>Lav: <I>ļoti liela māja</I> <li>Nep: <I>धेरै ठुलो घर</I> <li>Nor: <I>mye stort hus</I> <li>Pes: <I>خانه ی خیلی بزرگ</I> <li>Pnb: <I>{s : ParamX.Number => ResPnb.Case => Str</I> <li>Pol: <I>bardzo duży dom</I> <li>Ron: <I>casă foarte mare</I> <li>Rus: <I>очень большой дом</I> <li>Snd: <I>تمام وڏو گھر</I> <li>Spa: <I>muy grande casa</I> <li>Swe: <I>mycket stort hus</I> <li>Tha: <I>บ้านใหญ่มาก</I> <li>Urd: <I>بہت بڑا گھر</I> </ul> </div> </div></TD>+</TR>+<TR>+<TD><CODE>mkCN</CODE></TD>+<TD><A HREF="#AP" TITLE="AP - adjectival phrase">AP</A> <CODE>-></CODE> <A HREF="#CN" TITLE="CN - common noun (without determiner)">CN</A> <CODE>-></CODE> <A HREF="#CN" TITLE="CN - common noun (without determiner)">CN</A></TD>+<TD><div class=reveal> <I>very big blue house</I> <div class=popup> <ul> <li>API: <CODE>mkCN (mkAP very_AdA big_A) (mkCN blue_A house_N)</CODE> <li>Afr: <I>baie groot blou huis</I> <li>Bul: <I>много голяма синя къща</I> <li>Cat: <I>casa blava molt grosa</I> <li>Dan: <I>meget stort blått hus</I> <li>Dut: <I>erg groot blauw huis</I> <li>Eng: <I>very big blue house</I> <li>Fin: <I>erittäin suuri sininen talo</I> <li>Fre: <I>très grande maison bleue</I> <li>Ger: <I>sehr großes blaues Haus</I> <li>Hin: <I>बहुत बड़ा नीला घर</I> <li>Ita: <I>molto grande casa blù</I> <li>Lav: <I>ļoti liela zila māja</I> <li>Nep: <I>धेरै ठुलो निलो घर</I> <li>Nor: <I>mye stort blått hus</I> <li>Pes: <I>خانه ی آبی خیلی بزرگ</I> <li>Pnb: <I>{s : ParamX.Number => ResPnb.Case => Str</I> <li>Pol: <I>bardzo duży niebieski dom</I> <li>Ron: <I>casă albastră foarte mare</I> <li>Rus: <I>очень большой голубой дом</I> <li>Snd: <I>تمام وڏو نیرو گھر</I> <li>Spa: <I>muy grande casa azul</I> <li>Swe: <I>mycket stort blått hus</I> <li>Tha: <I>บ้านน้ำเงินใหญ่มาก</I> <li>Urd: <I>بہت بڑا نیلا گھر</I> </ul> </div> </div></TD>+</TR>+<TR>+<TD><CODE>mkCN</CODE></TD>+<TD><A HREF="#N" TITLE="N - common noun">N</A> <CODE>-></CODE> <A HREF="#RS" TITLE="RS - relative">RS</A> <CODE>-></CODE> <A HREF="#CN" TITLE="CN - common noun (without determiner)">CN</A></TD>+<TD><div class=reveal> <I>man whom she loves</I> <div class=popup> <ul> <li>API: <CODE>mkCN man_N (mkRS (mkRCl which_RP she_NP love_V2))</CODE> <li>Afr: <I>man wat sy lief het</I> <li>Bul: <I>мъж който тя обича</I> <li>Cat: <I>home que ella estima</I> <li>Dan: <I>mand som hun elsker</I> <li>Dut: <I>man die ze lief heeft</I> <li>Eng: <I>man whom she loves</I> <li>Fin: <I>mies jota hän rakastaa</I> <li>Fre: <I>homme qu' elle aime</I> <li>Ger: <I>Mann den sie liebt</I> <li>Hin: <I>आदमी जिस को वह प्यार करती है</I> <li>Ita: <I>uomo che lei ama</I> <li>Lav: <I>{s : ResLav.Definite => ParamX.Number => ResLav.Case => Str</I> <li>Nep: <I>मान्छे जो लाई उनी माया गर्छिन्</I> <li>Nor: <I>mann som hun elsker</I> <li>Pes: <I>مردی که او دوست دارد</I> <li>Pnb: <I>بندہ جن نوں او پیار كردی اے</I> <li>Pol: <I>mężczyzna , którego kocha ona</I> <li>Ron: <I>om pe care îl iubeşte ea</I> <li>Rus: <I>человек , который она любдит</I> <li>Snd: <I>ماڻھو جنھن سان ھو۶ عشق ڪری ٿی</I> <li>Spa: <I>hombre que ella ama</I> <li>Swe: <I>man som hon älskar</I> <li>Tha: <I>ชายที่หล่อนรัก</I> <li>Urd: <I>آدمی جس كو وہ پیار كرتی ہے</I> </ul> </div> </div></TD>+</TR>+<TR>+<TD><CODE>mkCN</CODE></TD>+<TD><A HREF="#CN" TITLE="CN - common noun (without determiner)">CN</A> <CODE>-></CODE> <A HREF="#RS" TITLE="RS - relative">RS</A> <CODE>-></CODE> <A HREF="#CN" TITLE="CN - common noun (without determiner)">CN</A></TD>+<TD><div class=reveal> <I>old man whom she loves</I> <div class=popup> <ul> <li>API: <CODE>mkCN (mkCN old_A man_N) (mkRS (mkRCl which_RP she_NP love_V2))</CODE> <li>Afr: <I>oud man wat sy lief het</I> <li>Bul: <I>стар мъж който тя обича</I> <li>Cat: <I>home vell que ella estima</I> <li>Dan: <I>gammel mand som hun elsker</I> <li>Dut: <I>oude man die ze lief heeft</I> <li>Eng: <I>old man whom she loves</I> <li>Fin: <I>vanha mies jota hän rakastaa</I> <li>Fre: <I>vieux homme qu' elle aime</I> <li>Ger: <I>alter Mann den sie liebt</I> <li>Hin: <I>बूढ़ा आदमी जिस को वह प्यार करती है</I> <li>Ita: <I>vecchio uomo che lei ama</I> <li>Lav: <I>{s : ResLav.Definite => ParamX.Number => ResLav.Case => Str</I> <li>Nep: <I>बुढो मान्छे जो लाई उनी माया गर्छिन्</I> <li>Nor: <I>gammel mann som hun elsker</I> <li>Pes: <I>مرد پیری که او دوست دارد</I> <li>Pnb: <I>بوڈا بندہ جن نوں او پیار كردی اے</I> <li>Pol: <I>stary mężczyzna , którego kocha ona</I> <li>Ron: <I>om vechi pe care îl iubeşte ea</I> <li>Rus: <I>старый человек , который она любдит</I> <li>Snd: <I>پوڙھی ماڻھو جنھن سان ھو۶ عشق ڪری ٿی</I> <li>Spa: <I>viejo hombre que ella ama</I> <li>Swe: <I>gammal man som hon älskar</I> <li>Tha: <I>ชายแก่ที่หล่อนรัก</I> <li>Urd: <I>بوڑھا آدمی جس كو وہ پیار كرتی ہے</I> </ul> </div> </div></TD>+</TR>+<TR>+<TD><CODE>mkCN</CODE></TD>+<TD><A HREF="#N" TITLE="N - common noun">N</A> <CODE>-></CODE> <A HREF="#Adv" TITLE="Adv - verb-phrase-modifying adverb">Adv</A> <CODE>-></CODE> <A HREF="#CN" TITLE="CN - common noun (without determiner)">CN</A></TD>+<TD><div class=reveal> <I>house on the hill</I> <div class=popup> <ul> <li>API: <CODE>mkCN house_N (mkAdv on_Prep (mkNP the_Det hill_N))</CODE> <li>Afr: <I>huis op die heuwel</I> <li>Bul: <I>къща на хълма</I> <li>Cat: <I>casa sobre el turó</I> <li>Dan: <I>hus på højen</I> <li>Dut: <I>huis op de heuvel</I> <li>Eng: <I>house on the hill</I> <li>Fin: <I>talo kukkulalla</I> <li>Fre: <I>maison sur la colline</I> <li>Ger: <I>Haus auf dem Hügel</I> <li>Hin: <I>पहाड़ पर घर</I> <li>Ita: <I>casa sulla collina</I> <li>Lav: <I>māja uz kalna</I> <li>Nep: <I>घर पहाड मा</I> <li>Nor: <I>hus på haugen</I> <li>Pes: <I>خانه ی روی تپه</I> <li>Pnb: <I>{s : ParamX.Number => ResPnb.Case => Str</I> <li>Pol: <I>dom nа wzgórzu</I> <li>Ron: <I>casă pe deal</I> <li>Rus: <I>дом на холме</I> <li>Snd: <I>گھر ٽڪری مٿان</I> <li>Spa: <I>casa sobre la colina</I> <li>Swe: <I>hus på kullen</I> <li>Tha: <I>บ้านบนเนินเขา</I> <li>Urd: <I>پہاڑی پر گھر</I> </ul> </div> </div></TD>+</TR>+<TR>+<TD><CODE>mkCN</CODE></TD>+<TD><A HREF="#CN" TITLE="CN - common noun (without determiner)">CN</A> <CODE>-></CODE> <A HREF="#Adv" TITLE="Adv - verb-phrase-modifying adverb">Adv</A> <CODE>-></CODE> <A HREF="#CN" TITLE="CN - common noun (without determiner)">CN</A></TD>+<TD><div class=reveal> <I>big house on the hill</I> <div class=popup> <ul> <li>API: <CODE>mkCN (mkCN big_A house_N) (mkAdv on_Prep (mkNP the_Det hill_N))</CODE> <li>Afr: <I>groot huis op die heuwel</I> <li>Bul: <I>голяма къща на хълма</I> <li>Cat: <I>casa grosa sobre el turó</I> <li>Dan: <I>stort hus på højen</I> <li>Dut: <I>groot huis op de heuvel</I> <li>Eng: <I>big house on the hill</I> <li>Fin: <I>suuri talo kukkulalla</I> <li>Fre: <I>grande maison sur la colline</I> <li>Ger: <I>großes Haus auf dem Hügel</I> <li>Hin: <I>पहाड़ पर बड़ा घर</I> <li>Ita: <I>grande casa sulla collina</I> <li>Lav: <I>liela māja uz kalna</I> <li>Nep: <I>ठुलो घर पहाड मा</I> <li>Nor: <I>stort hus på haugen</I> <li>Pes: <I>خانه ی بزرگ روی تپه</I> <li>Pnb: <I>{s : ParamX.Number => ResPnb.Case => Str</I> <li>Pol: <I>duży dom nа wzgórzu</I> <li>Ron: <I>casă mare pe deal</I> <li>Rus: <I>большой дом на холме</I> <li>Snd: <I>وڏو گھر ٽڪری مٿان</I> <li>Spa: <I>grande casa sobre la colina</I> <li>Swe: <I>stort hus på kullen</I> <li>Tha: <I>บ้านใหญ่บนเนินเขา</I> <li>Urd: <I>پہاڑی پر بڑا گھر</I> </ul> </div> </div></TD>+</TR>+<TR>+<TD><CODE>mkCN</CODE></TD>+<TD><A HREF="#CN" TITLE="CN - common noun (without determiner)">CN</A> <CODE>-></CODE> <A HREF="#S" TITLE="S - declarative sentence">S</A> <CODE>-></CODE> <A HREF="#CN" TITLE="CN - common noun (without determiner)">CN</A></TD>+<TD><div class=reveal> <I>almost five</I> <div class=popup> <ul> <li>API: <CODE>mkNum (mkCard almost_AdN (mkCard (mkNumeral n5_Unit)))</CODE> <li>Afr: <I>byna vyf</I> <li>Bul: <I>почти петима</I> <li>Cat: <I>{s = table CommonRomance.Gender {</I> <li>Dan: <I>næsten fem</I> <li>Dut: <I>bijna vijf</I> <li>Eng: <I>almost five</I> <li>Fin: <I>melkein viisi</I> <li>Fre: <I>presque cinq</I> <li>Ger: <I>fast fünf</I> <li>Hin: <I>तक़रीबन पांच</I> <li>Ita: <I>quasi cinque</I> <li>Lav: <I>gandrīz pieci</I> <li>Nep: <I>झण्डै पाँच</I> <li>Nor: <I>nesten fem</I> <li>Pes: <I>تقریباً پنج</I> <li>Pnb: <I>تقریبا پنج</I> <li>Pol: <I>prawie pięć</I> <li>Ron: <I>aproape cinci</I> <li>Rus: <I>почти пять</I> <li>Snd: <I>گھڻو ڪری پنج</I> <li>Spa: <I>casi cinco</I> <li>Swe: <I>nästan fem</I> <li>Tha: <I>เกิอบห้า</I> <li>Urd: <I>تقریبا پانچ</I> </ul> </div> </div></TD>+</TR>+<TR>+<TD><CODE>mkCN</CODE></TD>+<TD><A HREF="#CN" TITLE="CN - common noun (without determiner)">CN</A> <CODE>-></CODE> <A HREF="#QS" TITLE="QS - question">QS</A> <CODE>-></CODE> <A HREF="#CN" TITLE="CN - common noun (without determiner)">CN</A></TD>+<TD><div class=reveal> <I>almost five</I> <div class=popup> <ul> <li>API: <CODE>mkNum (mkCard almost_AdN (mkCard (mkNumeral n5_Unit)))</CODE> <li>Afr: <I>byna vyf</I> <li>Bul: <I>почти петима</I> <li>Cat: <I>{s = table CommonRomance.Gender {</I> <li>Dan: <I>næsten fem</I> <li>Dut: <I>bijna vijf</I> <li>Eng: <I>almost five</I> <li>Fin: <I>melkein viisi</I> <li>Fre: <I>presque cinq</I> <li>Ger: <I>fast fünf</I> <li>Hin: <I>तक़रीबन पांच</I> <li>Ita: <I>quasi cinque</I> <li>Lav: <I>gandrīz pieci</I> <li>Nep: <I>झण्डै पाँच</I> <li>Nor: <I>nesten fem</I> <li>Pes: <I>تقریباً پنج</I> <li>Pnb: <I>تقریبا پنج</I> <li>Pol: <I>prawie pięć</I> <li>Ron: <I>aproape cinci</I> <li>Rus: <I>почти пять</I> <li>Snd: <I>گھڻو ڪری پنج</I> <li>Spa: <I>casi cinco</I> <li>Swe: <I>nästan fem</I> <li>Tha: <I>เกิอบห้า</I> <li>Urd: <I>تقریبا پانچ</I> </ul> </div> </div></TD>+</TR>+<TR>+<TD><CODE>mkCN</CODE></TD>+<TD><A HREF="#CN" TITLE="CN - common noun (without determiner)">CN</A> <CODE>-></CODE> <A HREF="#VP" TITLE="VP - verb phrase">VP</A> <CODE>-></CODE> <A HREF="#CN" TITLE="CN - common noun (without determiner)">CN</A></TD>+<TD><div class=reveal> <I>reason to sleep</I> <div class=popup> <ul> <li>API: <CODE>mkCN (mkCN reason_N) (mkVP sleep_V)</CODE> <li>Afr: <I>rede om te slaap</I> <li>Bul: <I>причина да спя</I> <li>Cat: <I>raó de dormir</I> <li>Dan: <I>constant not found: reason_N</I> <li>Dut: <I>reden te slapen</I> <li>Eng: <I>reason to sleep</I> <li>Fin: <I>syy nukkua</I> <li>Fre: <I>raison de dormir</I> <li>Ger: <I>Grund zu schlafen</I> <li>Hin: <I>सोने की वजह</I> <li>Ita: <I>ragione di dormire</I> <li>Lav: <I>iemesls , gulēt</I> <li>Nep: <I>सुत्न लाइ कारण</I> <li>Nor: <I>constant not found: reason_N</I> <li>Pes: <I>دلیل خوابیدن</I> <li>Pnb: <I>constant not found: reason_N</I> <li>Pol: <I>powód spać</I> <li>Ron: <I>motiv sã doarmă</I> <li>Rus: <I>причина спать</I> <li>Snd: <I>سبب سمھڻ</I> <li>Spa: <I>constant not found: reason_N</I> <li>Swe: <I>anledning att sova</I> <li>Tha: <I>เหตูนอนหลับ</I> <li>Urd: <I>سونے كی وجہ</I> </ul> </div> </div></TD>+</TR>+<TR>+<TD><CODE>mkCN</CODE></TD>+<TD><A HREF="#CN" TITLE="CN - common noun (without determiner)">CN</A> <CODE>-></CODE> <A HREF="#SC" TITLE="SC - embedded sentence or question">SC</A> <CODE>-></CODE> <A HREF="#CN" TITLE="CN - common noun (without determiner)">CN</A></TD>+<TD><div class=reveal> <I>reason to sleep</I> <div class=popup> <ul> <li>API: <CODE>mkCN (mkCN reason_N) (mkVP sleep_V)</CODE> <li>Afr: <I>rede om te slaap</I> <li>Bul: <I>причина да спя</I> <li>Cat: <I>raó de dormir</I> <li>Dan: <I>constant not found: reason_N</I> <li>Dut: <I>reden te slapen</I> <li>Eng: <I>reason to sleep</I> <li>Fin: <I>syy nukkua</I> <li>Fre: <I>raison de dormir</I> <li>Ger: <I>Grund zu schlafen</I> <li>Hin: <I>सोने की वजह</I> <li>Ita: <I>ragione di dormire</I> <li>Lav: <I>iemesls , gulēt</I> <li>Nep: <I>सुत्न लाइ कारण</I> <li>Nor: <I>constant not found: reason_N</I> <li>Pes: <I>دلیل خوابیدن</I> <li>Pnb: <I>constant not found: reason_N</I> <li>Pol: <I>powód spać</I> <li>Ron: <I>motiv sã doarmă</I> <li>Rus: <I>причина спать</I> <li>Snd: <I>سبب سمھڻ</I> <li>Spa: <I>constant not found: reason_N</I> <li>Swe: <I>anledning att sova</I> <li>Tha: <I>เหตูนอนหลับ</I> <li>Urd: <I>سونے كی وجہ</I> </ul> </div> </div></TD>+</TR>+<TR>+<TD><CODE>mkCN</CODE></TD>+<TD><A HREF="#N" TITLE="N - common noun">N</A> <CODE>-></CODE> <A HREF="#NP" TITLE="NP - noun phrase (subject or object)">NP</A> <CODE>-></CODE> <A HREF="#CN" TITLE="CN - common noun (without determiner)">CN</A></TD>+<TD><div class=reveal> <I>king John</I> <div class=popup> <ul> <li>API: <CODE>mkCN king_N (mkNP john_PN)</CODE> <li>Afr: <I>koning Jan</I> <li>Bul: <I>цар Джон</I> <li>Cat: <I>rei Joan</I> <li>Dan: <I>konge John</I> <li>Dut: <I>koning Jan</I> <li>Eng: <I>king John</I> <li>Fin: <I>kuningas Jussi</I> <li>Fre: <I>roi Jean</I> <li>Ger: <I>König Johann</I> <li>Hin: <I>राजा जान</I> <li>Ita: <I>ré Giovanni</I> <li>Lav: <I>karalis Jānis</I> <li>Nep: <I>राजा जोन</I> <li>Nor: <I>konge John</I> <li>Pes: <I>پادشاه جان</I> <li>Pnb: <I>بادشاہ جان</I> <li>Pol: <I>król Jan</I> <li>Ron: <I>rege Ion</I> <li>Rus: <I>король Иван</I> <li>Snd: <I>بادشاھ جان</I> <li>Spa: <I>rey Juan</I> <li>Swe: <I>kung Johan</I> <li>Tha: <I>พระราชาจอห์น</I> <li>Urd: <I>بادشاہ جان</I> </ul> </div> </div></TD>+</TR>+<TR>+<TD><CODE>mkCN</CODE></TD>+<TD><A HREF="#CN" TITLE="CN - common noun (without determiner)">CN</A> <CODE>-></CODE> <A HREF="#NP" TITLE="NP - noun phrase (subject or object)">NP</A> <CODE>-></CODE> <A HREF="#CN" TITLE="CN - common noun (without determiner)">CN</A></TD>+<TD><div class=reveal> <I>old king John</I> <div class=popup> <ul> <li>API: <CODE>mkCN (mkCN old_A king_N) (mkNP john_PN)</CODE> <li>Afr: <I>oud koning Jan</I> <li>Bul: <I>стар цар Джон</I> <li>Cat: <I>rei vell Joan</I> <li>Dan: <I>gammel konge John</I> <li>Dut: <I>oude koning Jan</I> <li>Eng: <I>old king John</I> <li>Fin: <I>vanha kuningas Jussi</I> <li>Fre: <I>vieux roi Jean</I> <li>Ger: <I>alter König Johann</I> <li>Hin: <I>बूढ़ा राजा जान</I> <li>Ita: <I>vecchio ré Giovanni</I> <li>Lav: <I>vecs karalis Jānis</I> <li>Nep: <I>बुढो राजा जोन</I> <li>Nor: <I>gammel konge John</I> <li>Pes: <I>پادشاه پیر جان</I> <li>Pnb: <I>بوڈا بادشاہ جان</I> <li>Pol: <I>stary król Jan</I> <li>Ron: <I>rege vechi Ion</I> <li>Rus: <I>старый король Иван</I> <li>Snd: <I>پوڙھی بادشاھ جان</I> <li>Spa: <I>viejo rey Juan</I> <li>Swe: <I>gammal kung Johan</I> <li>Tha: <I>พระราชาแก่จอห์น</I> <li>Urd: <I>بوڑھا بادشاہ جان</I> </ul> </div> </div></TD>+</TR>+</TABLE>++<A NAME="Card"></A>+<H2>Card - cardinal number</H2>++<TABLE BORDER="1" CELLPADDING="4">+<TR>+<TH>Function</TH>+<TH>Type</TH>+<TH COLSPAN="2">Example</TH>+</TR>+<TR>+<TD><CODE>mkCard</CODE></TD>+<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#Card" TITLE="Card - cardinal number">Card</A></TD>+<TD><I>thirty-five (given as "35"; range 1-999)</I></TD>+</TR>+<TR>+<TD><CODE>mkCard</CODE></TD>+<TD><A HREF="#Numeral" TITLE="Numeral - cardinal or ordinal in words">Numeral</A> <CODE>-></CODE> <A HREF="#Card" TITLE="Card - cardinal number">Card</A></TD>+<TD><div class=reveal> <I>seven</I> <div class=popup> <ul> <li>API: <CODE>mkCard (mkNumeral n7_Unit)</CODE> <li>Afr: <I>seven</I> <li>Bul: <I>седмина</I> <li>Cat: <I>set</I> <li>Dan: <I>syv</I> <li>Dut: <I>zeven</I> <li>Eng: <I>seven</I> <li>Fin: <I>seitsemän</I> <li>Fre: <I>sept</I> <li>Ger: <I>sieben</I> <li>Hin: <I>सात</I> <li>Ita: <I>sette</I> <li>Lav: <I>septiņi</I> <li>Nep: <I>सात</I> <li>Nor: <I>sju</I> <li>Pes: <I>هفت</I> <li>Pnb: <I>ست</I> <li>Pol: <I>siedem</I> <li>Ron: <I>şapte</I> <li>Rus: <I>семь</I> <li>Snd: <I>ست</I> <li>Spa: <I>siete</I> <li>Swe: <I>sju</I> <li>Tha: <I>เจ็ด</I> <li>Urd: <I>سات</I> </ul> </div> </div></TD>+</TR>+<TR>+<TD><CODE>mkCard</CODE></TD>+<TD><A HREF="#Digits" TITLE="Digits - cardinal or ordinal in digits">Digits</A> <CODE>-></CODE> <A HREF="#Card" TITLE="Card - cardinal number">Card</A></TD>+<TD><I>51</I></TD>+</TR>+<TR>+<TD><CODE>mkCard</CODE></TD>+<TD><A HREF="#AdN" TITLE="AdN - numeral-modifying adverb">AdN</A> <CODE>-></CODE> <A HREF="#Card" TITLE="Card - cardinal number">Card</A> <CODE>-></CODE> <A HREF="#Card" TITLE="Card - cardinal number">Card</A></TD>+<TD><I>almost fifty</I></TD>+</TR>+</TABLE>++<A NAME="Cl"></A>+<H2>Cl - declarative clause, with all tenses</H2>++<TABLE BORDER="1" CELLPADDING="4">+<TR>+<TH>Function</TH>+<TH>Type</TH>+<TH COLSPAN="2">Example</TH>+</TR>+<TR>+<TD><CODE>genericCl</CODE></TD>+<TD><A HREF="#VP" TITLE="VP - verb phrase">VP</A> <CODE>-></CODE> <A HREF="#Cl" TITLE="Cl - declarative clause, with all tenses">Cl</A></TD>+<TD><div class=reveal> <I>one sleeps</I> <div class=popup> <ul> <li>API: <CODE>mkS (genericCl (mkVP sleep_V))</CODE> <li>Afr: <I>mens slaap</I> <li>Bul: <I>някой спи</I> <li>Cat: <I>hom dorm</I> <li>Dan: <I>man sover</I> <li>Dut: <I>men slaapt</I> <li>Eng: <I>one sleeps</I> <li>Fin: <I>nukutaan</I> <li>Fre: <I>on dort</I> <li>Ger: <I>man schläft</I> <li>Hin: <I>कोई सोता है</I> <li>Ita: <I>si dorme</I> <li>Lav: <I>guļ</I> <li>Nep: <I>कोही सुत्छ</I> <li>Nor: <I>man sover</I> <li>Pes: <I>آدم می خوابد</I> <li>Pnb: <I>كوی سوندا اے</I> <li>Pol: <I>ktoś śpi</I> <li>Ron: <I>cineva doarme</I> <li>Rus: <I>ты спдишь</I> <li>Snd: <I>ڪو۶ی سمھی ٿو</I> <li>Spa: <I>se duerme</I> <li>Swe: <I>man sover</I> <li>Tha: <I>นอนหลับ</I> <li>Urd: <I>كوی سوتا ہے</I> </ul> </div> </div></TD>+</TR>+<TR>+<TD><CODE>mkCl</CODE></TD>+<TD><A HREF="#NP" TITLE="NP - noun phrase (subject or object)">NP</A> <CODE>-></CODE> <A HREF="#V" TITLE="V - one-place verb">V</A> <CODE>-></CODE> <A HREF="#Cl" TITLE="Cl - declarative clause, with all tenses">Cl</A></TD>+<TD><div class=reveal> <I>she sleeps</I> <div class=popup> <ul> <li>API: <CODE>mkCl she_NP sleep_V</CODE> <li>Afr: <I>sy slaap</I> <li>Bul: <I>тя спи</I> <li>Cat: <I>ella dorm</I> <li>Dan: <I>hun sover</I> <li>Dut: <I>ze slaapt</I> <li>Eng: <I>she sleeps</I> <li>Fin: <I>hän nukkuu</I> <li>Fre: <I>elle dort</I> <li>Ger: <I>sie schläft</I> <li>Hin: <I>वह सोती है</I> <li>Ita: <I>lei dorme</I> <li>Lav: <I>viņa guļ</I> <li>Nep: <I>उनी सुत्छिन्</I> <li>Nor: <I>hun sover</I> <li>Pes: <I>او می خوابد</I> <li>Pnb: <I>او سوندی اے</I> <li>Pol: <I>ona śpi</I> <li>Ron: <I>ea doarme</I> <li>Rus: <I>она спдит</I> <li>Snd: <I>ھو۶ سمھی ٿی</I> <li>Spa: <I>ella duerme</I> <li>Swe: <I>hon sover</I> <li>Tha: <I>หล่อนนอนหลับ</I> <li>Urd: <I>وہ سوتی ہے</I> </ul> </div> </div></TD>+</TR>+<TR>+<TD><CODE>mkCl</CODE></TD>+<TD><A HREF="#NP" TITLE="NP - noun phrase (subject or object)">NP</A> <CODE>-></CODE> <A HREF="#V2" TITLE="V2 - two-place verb">V2</A> <CODE>-></CODE> <A HREF="#NP" TITLE="NP - noun phrase (subject or object)">NP</A> <CODE>-></CODE> <A HREF="#Cl" TITLE="Cl - declarative clause, with all tenses">Cl</A></TD>+<TD><div class=reveal> <I>she loves him</I> <div class=popup> <ul> <li>API: <CODE>mkCl she_NP love_V2 he_NP</CODE> <li>Afr: <I>sy het hom lief</I> <li>Bul: <I>тя обича него</I> <li>Cat: <I>ella el estima</I> <li>Dan: <I>hun elsker ham</I> <li>Dut: <I>ze heeft hem lief</I> <li>Eng: <I>she loves him</I> <li>Fin: <I>hän rakastaa häntä</I> <li>Fre: <I>elle l' aime</I> <li>Ger: <I>sie liebt ihn</I> <li>Hin: <I>वह उस को प्यार करती है</I> <li>Ita: <I>lei lo ama</I> <li>Lav: <I>viņa mīl viņu</I> <li>Nep: <I>उनी उ लाई माया गर्छिन्</I> <li>Nor: <I>hun elsker ham</I> <li>Pes: <I>او او را دوست دارد</I> <li>Pnb: <I>او اونوں پیار كردی اے</I> <li>Pol: <I>ona kocha jego</I> <li>Ron: <I>ea îl iubeşte</I> <li>Rus: <I>она любдит его</I> <li>Snd: <I>ھو۶ ھو سان عشق ڪری ٿی</I> <li>Spa: <I>ella lo ama</I> <li>Swe: <I>hon älskar honom</I> <li>Tha: <I>หล่อนรักเขา</I> <li>Urd: <I>وہ اس كو پیار كرتی ہے</I> </ul> </div> </div></TD>+</TR>+<TR>+<TD><CODE>mkCl</CODE></TD>+<TD><A HREF="#NP" TITLE="NP - noun phrase (subject or object)">NP</A> <CODE>-></CODE> <A HREF="#V3" TITLE="V3 - three-place verb">V3</A> <CODE>-></CODE> <A HREF="#NP" TITLE="NP - noun phrase (subject or object)">NP</A> <CODE>-></CODE> <A HREF="#NP" TITLE="NP - noun phrase (subject or object)">NP</A> <CODE>-></CODE> <A HREF="#Cl" TITLE="Cl - declarative clause, with all tenses">Cl</A></TD>+<TD><div class=reveal> <I>she sends it to him</I> <div class=popup> <ul> <li>API: <CODE>mkCl she_NP send_V3 it_NP he_NP</CODE> <li>Afr: <I>sy stuur dit na hom</I> <li>Bul: <I>тя праща него до него</I> <li>Cat: <I>ella ho li envia</I> <li>Dan: <I>hun sender det til ham</I> <li>Dut: <I>ze stuurt het naar hem</I> <li>Eng: <I>she sends it to him</I> <li>Fin: <I>hän lähettää sen hänelle</I> <li>Fre: <I>elle le lui envoie</I> <li>Ger: <I>sie schickt es ihm</I> <li>Hin: <I>वह यह उस को भेजती है</I> <li>Ita: <I>lei lo gli manda</I> <li>Lav: <I>viņa sūta to viņam</I> <li>Nep: <I>उनी यो उस्लाई लाई पठाउँछिन्</I> <li>Nor: <I>hun sender det til ham</I> <li>Pes: <I>او آن را برای او می فرستد</I> <li>Pnb: <I>او اینوں اونوں پیجدی اے</I> <li>Pol: <I>ona wysyła do niego je</I> <li>Ron: <I>ea i -l trimite</I> <li>Rus: <I>она посылает нему его</I> <li>Snd: <I>constant not found: send_V3</I> <li>Spa: <I>ella lo le manda</I> <li>Swe: <I>hon skickar det till honom</I> <li>Tha: <I>หล่อนส่งมันให้กับเขา</I> <li>Urd: <I>وہ یہ اس كو بھیجتی ہے</I> </ul> </div> </div></TD>+</TR>+<TR>+<TD><CODE>mkCl</CODE></TD>+<TD><A HREF="#NP" TITLE="NP - noun phrase (subject or object)">NP</A> <CODE>-></CODE> <A HREF="#VV" TITLE="VV - verb-phrase-complement verb">VV</A> <CODE>-></CODE> <A HREF="#VP" TITLE="VP - verb phrase">VP</A> <CODE>-></CODE> <A HREF="#Cl" TITLE="Cl - declarative clause, with all tenses">Cl</A></TD>+<TD><div class=reveal> <I>she wants to sleep</I> <div class=popup> <ul> <li>API: <CODE>mkCl she_NP want_VV (mkVP sleep_V)</CODE> <li>Afr: <I>sy wil te slaap</I> <li>Bul: <I>тя иска да спи</I> <li>Cat: <I>ella vol dormir</I> <li>Dan: <I>hun vil sove</I> <li>Dut: <I>ze wil slapen</I> <li>Eng: <I>she wants to sleep</I> <li>Fin: <I>hän tahtoo nukkua</I> <li>Fre: <I>elle veut dormir</I> <li>Ger: <I>sie will schlafen</I> <li>Hin: <I>वह सोना चाहती है</I> <li>Ita: <I>lei vuole dormire</I> <li>Lav: <I>viņa grib gulēt</I> <li>Nep: <I>उनी सुत्न चाहन्छिन्</I> <li>Nor: <I>hun vil sove</I> <li>Pes: <I>او می خواهد بخوابد</I> <li>Pnb: <I>او سونا چاندی اے</I> <li>Pol: <I>ona chce spać</I> <li>Ron: <I>ea vrea sã doarmă</I> <li>Rus: <I>она хочет спать</I> <li>Snd: <I>ھو۶ سمھڻ چاھی ٿی</I> <li>Spa: <I>ella quiere dormir</I> <li>Swe: <I>hon vill sova</I> <li>Tha: <I>หล่อนอยากนอนหลับ</I> <li>Urd: <I>وہ سونا چاہتی ہے</I> </ul> </div> </div></TD>+</TR>+<TR>+<TD><CODE>mkCl</CODE></TD>+<TD><A HREF="#NP" TITLE="NP - noun phrase (subject or object)">NP</A> <CODE>-></CODE> <A HREF="#VS" TITLE="VS - sentence-complement verb">VS</A> <CODE>-></CODE> <A HREF="#S" TITLE="S - declarative sentence">S</A> <CODE>-></CODE> <A HREF="#Cl" TITLE="Cl - declarative clause, with all tenses">Cl</A></TD>+<TD><div class=reveal> <I>she says that I sleep</I> <div class=popup> <ul> <li>API: <CODE>mkCl she_NP say_VS (mkS (mkCl i_NP sleep_V))</CODE> <li>Afr: <I>sy sê dat ek slaap</I> <li>Bul: <I>тя казва , че аз спя</I> <li>Cat: <I>ella diu que jo dormo</I> <li>Dan: <I>hun siger at jeg sover</I> <li>Dut: <I>ze zegt dat ik slaap</I> <li>Eng: <I>she says that I sleep</I> <li>Fin: <I>hän sanoo että minä nukun</I> <li>Fre: <I>elle dit que je dors</I> <li>Ger: <I>sie sagt daß ich schlafe</I> <li>Hin: <I>वह कहती है कि मैं सोता हूँ</I> <li>Ita: <I>lei dice che io dormo</I> <li>Lav: <I>viņa saka , ka es guļu</I> <li>Nep: <I>उनी भन्छिन्की म सुत्छु</I> <li>Nor: <I>hun sier at jeg sover</I> <li>Pes: <I>او می گوید که من می خوابم</I> <li>Pnb: <I>او كہدی اے كہ میں سوندا واں</I> <li>Pol: <I>ona mówi , że ja śpię</I> <li>Ron: <I>ea spune cã eu dorm</I> <li>Rus: <I>она говордит , что я сплю</I> <li>Snd: <I>ھو۶ چوی ٿی ت مان سمھان ٿو</I> <li>Spa: <I>ella dice que yo duermo</I> <li>Swe: <I>hon säger att jag sover</I> <li>Tha: <I>หล่อนพูดว่าฉันนอนหลับ</I> <li>Urd: <I>وہ كہتی ہے كہ میں سوتا ہوں</I> </ul> </div> </div></TD>+</TR>+<TR>+<TD><CODE>mkCl</CODE></TD>+<TD><A HREF="#NP" TITLE="NP - noun phrase (subject or object)">NP</A> <CODE>-></CODE> <A HREF="#VQ" TITLE="VQ - question-complement verb">VQ</A> <CODE>-></CODE> <A HREF="#QS" TITLE="QS - question">QS</A> <CODE>-></CODE> <A HREF="#Cl" TITLE="Cl - declarative clause, with all tenses">Cl</A></TD>+<TD><div class=reveal> <I>she wonders who sleeps</I> <div class=popup> <ul> <li>API: <CODE>mkCl she_NP wonder_VQ (mkQS (mkQCl who_IP sleep_V))</CODE> <li>Afr: <I>sy vra hom af wie slaap</I> <li>Bul: <I>тя се учудва кой спи</I> <li>Cat: <I>ella se pregunta qui dorm</I> <li>Dan: <I>hun undres hvem som sover</I> <li>Dut: <I>ze vraagt zich af wie slaapt</I> <li>Eng: <I>she wonders who sleeps</I> <li>Fin: <I>hän ihmettelee kuka nukkuu</I> <li>Fre: <I>elle se demande qui dort</I> <li>Ger: <I>sie wundert sich wer schläft</I> <li>Hin: <I>वह हैरान होती है कि कौन सोता है</I> <li>Ita: <I>lei si domanda chi dorme</I> <li>Lav: <I>viņa brīnās , kurš guļ</I> <li>Nep: <I>उनी अचम्म हुन्छिन्की को सुत्छन्</I> <li>Nor: <I>hun undrer hvem som sover</I> <li>Pes: <I>constant not found: wonder_VQ</I> <li>Pnb: <I>او حیران ہوندی اے كہ كون سوندا اے</I> <li>Pol: <I>ona zastanawia się , kto śpi</I> <li>Ron: <I>ea se întreabă cine doarme</I> <li>Rus: <I>она интересует кто спдит</I> <li>Snd: <I>ھو۶ ھیران ٿیی ٿی ت ڪیر سمھی ٿو</I> <li>Spa: <I>ella se pregunta quién duerme</I> <li>Swe: <I>hon undrar vem som sover</I> <li>Tha: <I>หล่อนประหลาดใจว่าใครนอนหลับ</I> <li>Urd: <I>وہ حیران ہوتی ہے كہ كون سوتا ہے</I> </ul> </div> </div></TD>+</TR>+<TR>+<TD><CODE>mkCl</CODE></TD>+<TD><A HREF="#NP" TITLE="NP - noun phrase (subject or object)">NP</A> <CODE>-></CODE> <A HREF="#VA" TITLE="VA - adjective-complement verb">VA</A> <CODE>-></CODE> <A HREF="#A" TITLE="A - one-place adjective">A</A> <CODE>-></CODE> <A HREF="#Cl" TITLE="Cl - declarative clause, with all tenses">Cl</A></TD>+<TD><div class=reveal> <I>she becomes old</I> <div class=popup> <ul> <li>API: <CODE>mkCl she_NP become_VA old_A</CODE> <li>Afr: <I>sy word oud</I> <li>Bul: <I>тя става стара</I> <li>Cat: <I>ella se torna vell</I> <li>Dan: <I>hun bliver gammel</I> <li>Dut: <I>ze wordt oud</I> <li>Eng: <I>she becomes old</I> <li>Fin: <I>hän tulee vanhaksi</I> <li>Fre: <I>elle devient vieille</I> <li>Ger: <I>sie wird alt</I> <li>Hin: <I>वह बूढ़ी बनती है</I> <li>Ita: <I>lei diventa vecchia</I> <li>Lav: <I>viņa kļūst veca</I> <li>Nep: <I>उनी बुढी हुन्छिन्</I> <li>Nor: <I>hun blir gammel</I> <li>Pes: <I>او پیر می شود</I> <li>Pnb: <I>او بوڈی بندی اے</I> <li>Pol: <I>ona staje się stara</I> <li>Ron: <I>ea devine veche</I> <li>Rus: <I>она становдит старой</I> <li>Snd: <I>ھو۶ پوڙھی ٿیی ٿی</I> <li>Spa: <I>ella se converte vieja</I> <li>Swe: <I>hon blir gammal</I> <li>Tha: <I>หล่อนกลายเป็นแก่</I> <li>Urd: <I>وہ بوڑھی بنتی ہے</I> </ul> </div> </div></TD>+</TR>+<TR>+<TD><CODE>mkCl</CODE></TD>+<TD><A HREF="#NP" TITLE="NP - noun phrase (subject or object)">NP</A> <CODE>-></CODE> <A HREF="#VA" TITLE="VA - adjective-complement verb">VA</A> <CODE>-></CODE> <A HREF="#AP" TITLE="AP - adjectival phrase">AP</A> <CODE>-></CODE> <A HREF="#Cl" TITLE="Cl - declarative clause, with all tenses">Cl</A></TD>+<TD><div class=reveal> <I>she becomes very old</I> <div class=popup> <ul> <li>API: <CODE>mkCl she_NP become_VA (mkAP very_AdA old_A)</CODE> <li>Afr: <I>sy word baie oud</I> <li>Bul: <I>тя става много стара</I> <li>Cat: <I>ella se torna molt vell</I> <li>Dan: <I>hun bliver meget gammel</I> <li>Dut: <I>ze wordt erg oud</I> <li>Eng: <I>she becomes very old</I> <li>Fin: <I>hän tulee erittäin vanhaksi</I> <li>Fre: <I>elle devient très vieille</I> <li>Ger: <I>sie wird sehr alt</I> <li>Hin: <I>वह बहुत बूढ़ी बनती है</I> <li>Ita: <I>lei diventa molto vecchia</I> <li>Lav: <I>viņa kļūst ļoti veca</I> <li>Nep: <I>उनी धेरै बुढी हुन्छिन्</I> <li>Nor: <I>hun blir mye gammel</I> <li>Pes: <I>او خیلی پیر می شود</I> <li>Pnb: <I>او بہت بوڈی بندی اے</I> <li>Pol: <I>ona staje się bardzo stara</I> <li>Ron: <I>ea devine foarte veche</I> <li>Rus: <I>она становдит очень старой</I> <li>Snd: <I>ھو۶ تمام پوڙھی ٿیی ٿی</I> <li>Spa: <I>ella se converte muy vieja</I> <li>Swe: <I>hon blir mycket gammal</I> <li>Tha: <I>หล่อนกลายเป็นแก่มาก</I> <li>Urd: <I>وہ بہت بوڑھی بنتی ہے</I> </ul> </div> </div></TD>+</TR>+<TR>+<TD><CODE>mkCl</CODE></TD>+<TD><A HREF="#NP" TITLE="NP - noun phrase (subject or object)">NP</A> <CODE>-></CODE> <A HREF="#V2A" TITLE="V2A - verb with NP and AP complement">V2A</A> <CODE>-></CODE> <A HREF="#NP" TITLE="NP - noun phrase (subject or object)">NP</A> <CODE>-></CODE> <A HREF="#A" TITLE="A - one-place adjective">A</A> <CODE>-></CODE> <A HREF="#Cl" TITLE="Cl - declarative clause, with all tenses">Cl</A></TD>+<TD><div class=reveal> <I>she paints it red</I> <div class=popup> <ul> <li>API: <CODE>mkCl she_NP paint_V2A it_NP red_A</CODE> <li>Afr: <I>sy skilder dit rooi</I> <li>Bul: <I>тя рисува него червено</I> <li>Cat: <I>ella ho pinta en vermell</I> <li>Dan: <I>hun maler det rødt</I> <li>Dut: <I>ze schildert het rood</I> <li>Eng: <I>she paints it red</I> <li>Fin: <I>hän maalaa sen punaiseksi</I> <li>Fre: <I>elle le peint en rouge</I> <li>Ger: <I>sie malt es rot</I> <li>Hin: <I>वह इस को लाल रंग करती है</I> <li>Ita: <I>lei lo dipinge rosso</I> <li>Lav: <I>viņa krāso to sarkana</I> <li>Nep: <I>उनी यो लाई रातो रँग लागाउँछिन्</I> <li>Nor: <I>hun maler det rødt</I> <li>Pes: <I>او آن را قرمز رنگ می کند</I> <li>Pnb: <I>او اینوں لال رنگ كردی اے</I> <li>Pol: <I>ona maluje je na czerwono</I> <li>Ron: <I>ea îl pictează roşu</I> <li>Rus: <I>она рисует красным его</I> <li>Snd: <I>ھو۶ ھن کی ڳاڙھو رنگ ڪری ٿی</I> <li>Spa: <I>ella lo pinta en rojo</I> <li>Swe: <I>hon målar det rött</I> <li>Tha: <I>หล่อนทามันเป็นสีแดง</I> <li>Urd: <I>وہ اس كو لال رنگ كرتی ہے</I> </ul> </div> </div></TD>+</TR>+<TR>+<TD><CODE>mkCl</CODE></TD>+<TD><A HREF="#NP" TITLE="NP - noun phrase (subject or object)">NP</A> <CODE>-></CODE> <A HREF="#V2A" TITLE="V2A - verb with NP and AP complement">V2A</A> <CODE>-></CODE> <A HREF="#NP" TITLE="NP - noun phrase (subject or object)">NP</A> <CODE>-></CODE> <A HREF="#AP" TITLE="AP - adjectival phrase">AP</A> <CODE>-></CODE> <A HREF="#Cl" TITLE="Cl - declarative clause, with all tenses">Cl</A></TD>+<TD><div class=reveal> <I>she paints it red</I> <div class=popup> <ul> <li>API: <CODE>mkCl she_NP paint_V2A it_NP (mkAP red_A)</CODE> <li>Afr: <I>sy skilder dit rooi</I> <li>Bul: <I>тя рисува него червено</I> <li>Cat: <I>ella ho pinta en vermell</I> <li>Dan: <I>hun maler det rødt</I> <li>Dut: <I>ze schildert het rood</I> <li>Eng: <I>she paints it red</I> <li>Fin: <I>hän maalaa sen punaiseksi</I> <li>Fre: <I>elle le peint en rouge</I> <li>Ger: <I>sie malt es rot</I> <li>Hin: <I>वह इस को लाल रंग करती है</I> <li>Ita: <I>lei lo dipinge rosso</I> <li>Lav: <I>viņa krāso to sarkana</I> <li>Nep: <I>उनी यो लाई रातो रँग लागाउँछिन्</I> <li>Nor: <I>hun maler det rødt</I> <li>Pes: <I>او آن را قرمز رنگ می کند</I> <li>Pnb: <I>او اینوں لال رنگ كردی اے</I> <li>Pol: <I>ona maluje je na czerwono</I> <li>Ron: <I>ea îl pictează roşu</I> <li>Rus: <I>она рисует красным его</I> <li>Snd: <I>ھو۶ ھن کی ڳاڙھو رنگ ڪری ٿی</I> <li>Spa: <I>ella lo pinta en rojo</I> <li>Swe: <I>hon målar det rött</I> <li>Tha: <I>หล่อนทามันเป็นสีแดง</I> <li>Urd: <I>وہ اس كو لال رنگ كرتی ہے</I> </ul> </div> </div></TD>+</TR>+<TR>+<TD><CODE>mkCl</CODE></TD>+<TD><A HREF="#NP" TITLE="NP - noun phrase (subject or object)">NP</A> <CODE>-></CODE> <A HREF="#V2S" TITLE="V2S - verb with NP and S complement">V2S</A> <CODE>-></CODE> <A HREF="#NP" TITLE="NP - noun phrase (subject or object)">NP</A> <CODE>-></CODE> <A HREF="#S" TITLE="S - declarative sentence">S</A> <CODE>-></CODE> <A HREF="#Cl" TITLE="Cl - declarative clause, with all tenses">Cl</A></TD>+<TD><div class=reveal> <I>she answers to him that we sleep</I> <div class=popup> <ul> <li>API: <CODE>mkCl she_NP answer_V2S he_NP (mkS (mkCl we_NP sleep_V))</CODE> <li>Afr: <I>sy antwoord hom dat ons slaap</I> <li>Bul: <I>тя отговаря му , че ние спим</I> <li>Cat: <I>ella li respon que nosaltres dormim</I> <li>Dan: <I>hun svarer til ham at vi sover</I> <li>Dut: <I>ze antwoordt hem dat we slapen</I> <li>Eng: <I>she answers to him that we sleep</I> <li>Fin: <I>hän vastaa hänelle että me nukumme</I> <li>Fre: <I>elle lui répond que nous dormons</I> <li>Ger: <I>sie antwortet ihm daß wir schlafen</I> <li>Hin: <I>वह उस को जवाब देती है कि हम सोते हैँ</I> <li>Ita: <I>lei gli risponde che noi dormiamo</I> <li>Lav: <I>viņa atbild viņam , ka mēs guļam</I> <li>Nep: <I>उनी उ लाई उत्तर दिन्छिन्की हामीहरु सुत्छौँ</I> <li>Nor: <I>hun svarer til ham at vi sover</I> <li>Pes: <I>او به او جواب می دهد که ما می خوابیم</I> <li>Pnb: <I>او اونوں جواب دیندی اے كہ اسی سوندے واں</I> <li>Pol: <I>ona odpowiada jemu , że my śpimy</I> <li>Ron: <I>ea îi răspunde cã noi dormim</I> <li>Rus: <I>она отвечает , что мы спдим его</I> <li>Snd: <I>ھو۶ ھو کی جواب ڏیی ٿی ت اسان سمھون ٿا</I> <li>Spa: <I>ella le responde que nosotros dormimos</I> <li>Swe: <I>hon svarar till honom att vi sover</I> <li>Tha: <I>หล่อนตอบเขาว่าเรานอนหลับ</I> <li>Urd: <I>وہ اس كو جواب دیتی ہے كہ ہم سوتے ہیں</I> </ul> </div> </div></TD>+</TR>+<TR>+<TD><CODE>mkCl</CODE></TD>+<TD><A HREF="#NP" TITLE="NP - noun phrase (subject or object)">NP</A> <CODE>-></CODE> <A HREF="#V2Q" TITLE="V2Q - verb with NP and Q complement">V2Q</A> <CODE>-></CODE> <A HREF="#NP" TITLE="NP - noun phrase (subject or object)">NP</A> <CODE>-></CODE> <A HREF="#QS" TITLE="QS - question">QS</A> <CODE>-></CODE> <A HREF="#Cl" TITLE="Cl - declarative clause, with all tenses">Cl</A></TD>+<TD><div class=reveal> <I>she asks him who sleeps</I> <div class=popup> <ul> <li>API: <CODE>mkCl she_NP ask_V2Q he_NP (mkQS (mkQCl who_IP sleep_V))</CODE> <li>Afr: <I>sy vra hom wie slaap</I> <li>Bul: <I>тя пита него кой спи</I> <li>Cat: <I>ella li pregunta qui dorm</I> <li>Dan: <I>hun spørger ham hvem som sover</I> <li>Dut: <I>ze vraagt hem wie slaapt</I> <li>Eng: <I>she asks him who sleeps</I> <li>Fin: <I>hän kysyy häneltä kuka nukkuu</I> <li>Fre: <I>elle lui demande qui dort</I> <li>Ger: <I>sie fragt ihn wer schläft</I> <li>Hin: <I>वह उस से पूछती है कि कौन सोता है</I> <li>Ita: <I>lei gli chiede chi dorme</I> <li>Lav: <I>viņa vaicā viņam , kurš guļ</I> <li>Nep: <I>उनी उ सँग सोध्छिन्की को सुत्छन्</I> <li>Nor: <I>hun spørr ham hvem som sover</I> <li>Pes: <I>او از او می پرسد چه کسی می خوابد</I> <li>Pnb: <I>او اونوں پچھدی اے كہ كون سوندا اے</I> <li>Pol: <I>ona pyta jego , kto śpi</I> <li>Ron: <I>ea îl întreabă cine doarme</I> <li>Rus: <I>она спрашивает кто спдит его</I> <li>Snd: <I>ھو۶ ھو کان پڇی ٿی ت ڪیر سمھی ٿو</I> <li>Spa: <I>ella le pregunta quién duerme</I> <li>Swe: <I>hon frågar honom vem som sover</I> <li>Tha: <I>หล่อนถามเขาว่าใครนอนหลับ</I> <li>Urd: <I>وہ اس سے پوچھتی ہے كہ كون سوتا ہے</I> </ul> </div> </div></TD>+</TR>+<TR>+<TD><CODE>mkCl</CODE></TD>+<TD><A HREF="#NP" TITLE="NP - noun phrase (subject or object)">NP</A> <CODE>-></CODE> <A HREF="#V2V" TITLE="V2V - verb with NP and V complement">V2V</A> <CODE>-></CODE> <A HREF="#NP" TITLE="NP - noun phrase (subject or object)">NP</A> <CODE>-></CODE> <A HREF="#VP" TITLE="VP - verb phrase">VP</A> <CODE>-></CODE> <A HREF="#Cl" TITLE="Cl - declarative clause, with all tenses">Cl</A></TD>+<TD><div class=reveal> <I>she begs him to sleep</I> <div class=popup> <ul> <li>API: <CODE>mkCl she_NP beg_V2V he_NP (mkVP sleep_V)</CODE> <li>Afr: <I>sy smeek hom om te slaap</I> <li>Bul: <I>тя моли него да спи</I> <li>Cat: <I>ella el demana a dormir</I> <li>Dan: <I>hun beder ham at sove</I> <li>Dut: <I>ze smeekt hem te slapen</I> <li>Eng: <I>she begs him to sleep</I> <li>Fin: <I>hän pyytää häntä nukkumaan</I> <li>Fre: <I>elle le demande à dormir</I> <li>Ger: <I>sie bittet ihn zu schlafen</I> <li>Hin: <I>वह उस से सोने की भीख मांगती है</I> <li>Ita: <I>lei lo prega di dormire</I> <li>Lav: <I>viņa lūdz viņu gulēt</I> <li>Nep: <I>उनी उ लाई सुत्न आग्रह गर्छिन्</I> <li>Nor: <I>hun ber ham att sove</I> <li>Pes: <I>او از او خواهش می کند بخوابد</I> <li>Pnb: <I>او اونوں سونا دی مانگدی اے</I> <li>Pol: <I>constant not found: beg_V2V</I> <li>Ron: <I>ea îl roagă sã doarmă</I> <li>Rus: <I>она просит спать его</I> <li>Snd: <I>constant not found: beg_V2V</I> <li>Spa: <I>ella lo roga a dormir</I> <li>Swe: <I>hon ber honom att sova</I> <li>Tha: <I>หล่อนขอเขาให้นอนหลับ</I> <li>Urd: <I>وہ اس سے سونے كی التجا كرتی ہے</I> </ul> </div> </div></TD>+</TR>+<TR>+<TD><CODE>mkCl</CODE></TD>+<TD><A HREF="#NP" TITLE="NP - noun phrase (subject or object)">NP</A> <CODE>-></CODE> <A HREF="#A" TITLE="A - one-place adjective">A</A> <CODE>-></CODE> <A HREF="#Cl" TITLE="Cl - declarative clause, with all tenses">Cl</A></TD>+<TD><div class=reveal> <I>she is old</I> <div class=popup> <ul> <li>API: <CODE>mkCl she_NP old_A</CODE> <li>Afr: <I>sy is oud</I> <li>Bul: <I>тя е стара</I> <li>Cat: <I>ella és vell</I> <li>Dan: <I>hun er gammel</I> <li>Dut: <I>ze is oud</I> <li>Eng: <I>she is old</I> <li>Fin: <I>hän on vanha</I> <li>Fre: <I>elle est vieille</I> <li>Ger: <I>sie ist alt</I> <li>Hin: <I>वह बूढ़ी है</I> <li>Ita: <I>lei è vecchia</I> <li>Lav: <I>viņa ir veca</I> <li>Nep: <I>उनी बुढी छिन्</I> <li>Nor: <I>hun er gammel</I> <li>Pes: <I>او پیر است</I> <li>Pnb: <I>او بوڈی اے</I> <li>Pol: <I>ona jest stara</I> <li>Ron: <I>ea este veche</I> <li>Rus: <I>она стара</I> <li>Snd: <I>ھو۶ پوڙھی اھی</I> <li>Spa: <I>ella es vieja</I> <li>Swe: <I>hon är gammal</I> <li>Tha: <I>หล่อนแก่</I> <li>Urd: <I>وہ بوڑھی ہے</I> </ul> </div> </div></TD>+</TR>+<TR>+<TD><CODE>mkCl</CODE></TD>+<TD><A HREF="#NP" TITLE="NP - noun phrase (subject or object)">NP</A> <CODE>-></CODE> <A HREF="#A" TITLE="A - one-place adjective">A</A> <CODE>-></CODE> <A HREF="#NP" TITLE="NP - noun phrase (subject or object)">NP</A> <CODE>-></CODE> <A HREF="#Cl" TITLE="Cl - declarative clause, with all tenses">Cl</A></TD>+<TD><div class=reveal> <I>she is older than he</I> <div class=popup> <ul> <li>API: <CODE>mkCl she_NP old_A he_NP</CODE> <li>Afr: <I>sy is ouer as hy</I> <li>Bul: <I>тя е по - стара от него</I> <li>Cat: <I>ella és més vell que ell</I> <li>Dan: <I>hun er ældre end han</I> <li>Dut: <I>ze is ouder dan hij</I> <li>Eng: <I>she is older than he</I> <li>Fin: <I>hän on vanhempi kuin hän</I> <li>Fre: <I>elle est plus vieille que lui</I> <li>Ger: <I>sie ist älter als er</I> <li>Hin: <I>वह उस से बूढ़ी है</I> <li>Ita: <I>lei è più vecchia di lui</I> <li>Lav: <I>{s = table ResLav.VerbMood [table ParamX.Polarity {</I> <li>Nep: <I>उनी उ भन्दा बुढी छिन्</I> <li>Nor: <I>hun er eldre enn han</I> <li>Pes: <I>او پیر تر از او است</I> <li>Pnb: <I>او اورے توں بوڈی اے</I> <li>Pol: <I>ona jest starsza niż on</I> <li>Ron: <I>ea este mai veche decât el</I> <li>Rus: <I>она старше него</I> <li>Snd: <I>ھو۶ ھو کان پوڙھی اھی</I> <li>Spa: <I>ella es más vieja que él</I> <li>Swe: <I>hon är äldre än han</I> <li>Tha: <I>หล่อนแก่กว่าเขา</I> <li>Urd: <I>وہ اس سے بوڑھی ہے</I> </ul> </div> </div></TD>+</TR>+<TR>+<TD><CODE>mkCl</CODE></TD>+<TD><A HREF="#NP" TITLE="NP - noun phrase (subject or object)">NP</A> <CODE>-></CODE> <A HREF="#A2" TITLE="A2 - two-place adjective">A2</A> <CODE>-></CODE> <A HREF="#NP" TITLE="NP - noun phrase (subject or object)">NP</A> <CODE>-></CODE> <A HREF="#Cl" TITLE="Cl - declarative clause, with all tenses">Cl</A></TD>+<TD><div class=reveal> <I>she is married to him</I> <div class=popup> <ul> <li>API: <CODE>mkCl she_NP married_A2 he_NP</CODE> <li>Afr: <I>sy is getroud met hom</I> <li>Bul: <I>тя е женена за него</I> <li>Cat: <I>ella és casata a ell</I> <li>Dan: <I>hun er gift med ham</I> <li>Dut: <I>ze is getrouwd met hem</I> <li>Eng: <I>she is married to him</I> <li>Fin: <I>hän on avioitunut hänen kanssa</I> <li>Fre: <I>elle est mariée à lui</I> <li>Ger: <I>sie ist verheiratet mit ihm</I> <li>Hin: <I>वह उस से शादी शुदा है</I> <li>Ita: <I>lei è sposata con lui</I> <li>Lav: <I>viņa ir precējusies ar viņu</I> <li>Nep: <I>उनी उ सँग विवाहित छिन्</I> <li>Nor: <I>hun er gift med ham</I> <li>Pes: <I>او او متأهل است</I> <li>Pnb: <I>constant not found: married_A2</I> <li>Pol: <I>ona jest zaślubiona jemu</I> <li>Ron: <I>ea este căsătorită cu el</I> <li>Rus: <I>она замужем за им</I> <li>Snd: <I>constant not found: married_A2</I> <li>Spa: <I>ella es casada a él</I> <li>Swe: <I>hon är gift med honom</I> <li>Tha: <I>หล่อนแต่งงานแล้วกับเขา</I> <li>Urd: <I>وہ اس سے شادی شدہ ہے</I> </ul> </div> </div></TD>+</TR>+<TR>+<TD><CODE>mkCl</CODE></TD>+<TD><A HREF="#NP" TITLE="NP - noun phrase (subject or object)">NP</A> <CODE>-></CODE> <A HREF="#AP" TITLE="AP - adjectival phrase">AP</A> <CODE>-></CODE> <A HREF="#Cl" TITLE="Cl - declarative clause, with all tenses">Cl</A></TD>+<TD><div class=reveal> <I>she is very old</I> <div class=popup> <ul> <li>API: <CODE>mkCl she_NP (mkAP very_AdA old_A)</CODE> <li>Afr: <I>sy is baie oud</I> <li>Bul: <I>тя е много стара</I> <li>Cat: <I>ella és molt vell</I> <li>Dan: <I>hun er meget gammel</I> <li>Dut: <I>ze is erg oud</I> <li>Eng: <I>she is very old</I> <li>Fin: <I>hän on erittäin vanha</I> <li>Fre: <I>elle est très vieille</I> <li>Ger: <I>sie ist sehr alt</I> <li>Hin: <I>वह बहुत बूढ़ी है</I> <li>Ita: <I>lei è molto vecchia</I> <li>Lav: <I>viņa ir ļoti veca</I> <li>Nep: <I>उनी धेरै बुढी छिन्</I> <li>Nor: <I>hun er mye gammel</I> <li>Pes: <I>او خیلی پیر است</I> <li>Pnb: <I>او بہت بوڈی اے</I> <li>Pol: <I>ona jest bardzo stara</I> <li>Ron: <I>ea este foarte veche</I> <li>Rus: <I>она очень стара</I> <li>Snd: <I>ھو۶ تمام پوڙھی اھی</I> <li>Spa: <I>ella es muy vieja</I> <li>Swe: <I>hon är mycket gammal</I> <li>Tha: <I>หล่อนแก่มาก</I> <li>Urd: <I>وہ بہت بوڑھی ہے</I> </ul> </div> </div></TD>+</TR>+<TR>+<TD><CODE>mkCl</CODE></TD>+<TD><A HREF="#NP" TITLE="NP - noun phrase (subject or object)">NP</A> <CODE>-></CODE> <A HREF="#NP" TITLE="NP - noun phrase (subject or object)">NP</A> <CODE>-></CODE> <A HREF="#Cl" TITLE="Cl - declarative clause, with all tenses">Cl</A></TD>+<TD><div class=reveal> <I>she is the woman</I> <div class=popup> <ul> <li>API: <CODE>mkCl she_NP (mkNP the_Det woman_N)</CODE> <li>Afr: <I>sy is die vrou</I> <li>Bul: <I>тя е жената</I> <li>Cat: <I>ella és la dona</I> <li>Dan: <I>hun er kvinden</I> <li>Dut: <I>ze is de vrouw</I> <li>Eng: <I>she is the woman</I> <li>Fin: <I>hän on nainen</I> <li>Fre: <I>elle est la femme</I> <li>Ger: <I>sie ist die Frau</I> <li>Hin: <I>वह औरत है</I> <li>Ita: <I>lei è la donna</I> <li>Lav: <I>viņa ir sieviete</I> <li>Nep: <I>उनी आईमाई हुन्</I> <li>Nor: <I>hun er kvinna</I> <li>Pes: <I>او زن است</I> <li>Pnb: <I>او زنانی اے</I> <li>Pol: <I>ona jest kobietą</I> <li>Ron: <I>ea este femeia</I> <li>Rus: <I>она женщина</I> <li>Snd: <I>ھو۶ استری اھی</I> <li>Spa: <I>ella es la mujer</I> <li>Swe: <I>hon är kvinnan</I> <li>Tha: <I>หล่อนเป็นหญิง</I> <li>Urd: <I>وہ عورت ہے</I> </ul> </div> </div></TD>+</TR>+<TR>+<TD><CODE>mkCl</CODE></TD>+<TD><A HREF="#NP" TITLE="NP - noun phrase (subject or object)">NP</A> <CODE>-></CODE> <A HREF="#N" TITLE="N - common noun">N</A> <CODE>-></CODE> <A HREF="#Cl" TITLE="Cl - declarative clause, with all tenses">Cl</A></TD>+<TD><div class=reveal> <I>she is a woman</I> <div class=popup> <ul> <li>API: <CODE>mkCl she_NP woman_N</CODE> <li>Afr: <I>sy is 'n vrou</I> <li>Bul: <I>тя е жена</I> <li>Cat: <I>ella és una dona</I> <li>Dan: <I>hun er en kvinde</I> <li>Dut: <I>ze is vrouw</I> <li>Eng: <I>she is a woman</I> <li>Fin: <I>hän on nainen</I> <li>Fre: <I>elle est une femme</I> <li>Ger: <I>sie ist eine Frau</I> <li>Hin: <I>वह औरत है</I> <li>Ita: <I>lei è una donna</I> <li>Lav: <I>viņa ir sieviete</I> <li>Nep: <I>उनी आईमाई हुन्</I> <li>Nor: <I>hun er ei kvinne</I> <li>Pes: <I>او زن است</I> <li>Pnb: <I>او زنانی اے</I> <li>Pol: <I>ona jest kobieta</I> <li>Ron: <I>ea este femeie</I> <li>Rus: <I>она женщина</I> <li>Snd: <I>ھو۶ استری اھی</I> <li>Spa: <I>ella es una mujer</I> <li>Swe: <I>hon är en kvinna</I> <li>Tha: <I>หล่อนเป็นหญิง</I> <li>Urd: <I>وہ عورت ہے</I> </ul> </div> </div></TD>+</TR>+<TR>+<TD><CODE>mkCl</CODE></TD>+<TD><A HREF="#NP" TITLE="NP - noun phrase (subject or object)">NP</A> <CODE>-></CODE> <A HREF="#CN" TITLE="CN - common noun (without determiner)">CN</A> <CODE>-></CODE> <A HREF="#Cl" TITLE="Cl - declarative clause, with all tenses">Cl</A></TD>+<TD><div class=reveal> <I>she is an old woman</I> <div class=popup> <ul> <li>API: <CODE>mkCl she_NP (mkCN old_A woman_N)</CODE> <li>Afr: <I>sy is 'n oud vrou</I> <li>Bul: <I>тя е стара жена</I> <li>Cat: <I>ella és una dona vell</I> <li>Dan: <I>hun er en gammel kvinde</I> <li>Dut: <I>ze is oude vrouw</I> <li>Eng: <I>she is an old woman</I> <li>Fin: <I>hän on vanha nainen</I> <li>Fre: <I>elle est une vieille femme</I> <li>Ger: <I>sie ist eine alte Frau</I> <li>Hin: <I>वह बूढ़ी औरत है</I> <li>Ita: <I>lei è una vecchia donna</I> <li>Lav: <I>viņa ir veca sieviete</I> <li>Nep: <I>उनी बुढी आईमाई हुन्</I> <li>Nor: <I>hun er ei gammel kvinne</I> <li>Pes: <I>او زن پیر است</I> <li>Pnb: <I>او بوڈی زنانی اے</I> <li>Pol: <I>ona jest stara kobieta</I> <li>Ron: <I>ea este femeie veche</I> <li>Rus: <I>она старая женщина</I> <li>Snd: <I>ھو۶ پوڙھی استری اھی</I> <li>Spa: <I>ella es una vieja mujer</I> <li>Swe: <I>hon är en gammal kvinna</I> <li>Tha: <I>หล่อนเป็นหญิงแก่</I> <li>Urd: <I>وہ بوڑھی عورت ہے</I> </ul> </div> </div></TD>+</TR>+<TR>+<TD><CODE>mkCl</CODE></TD>+<TD><A HREF="#NP" TITLE="NP - noun phrase (subject or object)">NP</A> <CODE>-></CODE> <A HREF="#Adv" TITLE="Adv - verb-phrase-modifying adverb">Adv</A> <CODE>-></CODE> <A HREF="#Cl" TITLE="Cl - declarative clause, with all tenses">Cl</A></TD>+<TD><div class=reveal> <I>she is here</I> <div class=popup> <ul> <li>API: <CODE>mkCl she_NP here_Adv</CODE> <li>Afr: <I>sy is hier</I> <li>Bul: <I>тя е тук</I> <li>Cat: <I>ella és aquí</I> <li>Dan: <I>hun er her</I> <li>Dut: <I>ze is hier</I> <li>Eng: <I>she is here</I> <li>Fin: <I>hän on täällä</I> <li>Fre: <I>elle est ici</I> <li>Ger: <I>sie ist hier</I> <li>Hin: <I>वह यहाँ है</I> <li>Ita: <I>lei è quà</I> <li>Lav: <I>viņa ir šeit</I> <li>Nep: <I>उनी यहाँ छिन्</I> <li>Nor: <I>hun er her</I> <li>Pes: <I>او اینجا است</I> <li>Pnb: <I>او ایتھے اے</I> <li>Pol: <I>ona jest tutaj</I> <li>Ron: <I>ea este aici</I> <li>Rus: <I>она здесь</I> <li>Snd: <I>ھو۶ ھتی اھی</I> <li>Spa: <I>ella es aquí</I> <li>Swe: <I>hon är här</I> <li>Tha: <I>หล่อนอยู่ที่นี่</I> <li>Urd: <I>وہ یہاں ہے</I> </ul> </div> </div></TD>+</TR>+<TR>+<TD><CODE>mkCl</CODE></TD>+<TD><A HREF="#NP" TITLE="NP - noun phrase (subject or object)">NP</A> <CODE>-></CODE> <A HREF="#VP" TITLE="VP - verb phrase">VP</A> <CODE>-></CODE> <A HREF="#Cl" TITLE="Cl - declarative clause, with all tenses">Cl</A></TD>+<TD><div class=reveal> <I>she always sleeps</I> <div class=popup> <ul> <li>API: <CODE>mkCl she_NP (mkVP always_AdV (mkVP sleep_V))</CODE> <li>Afr: <I>sy slaap altyd altyd</I> <li>Bul: <I>тя винаги спи</I> <li>Cat: <I>ella dorm sempre</I> <li>Dan: <I>hun sover altid</I> <li>Dut: <I>ze slaapt altijd</I> <li>Eng: <I>she always sleeps</I> <li>Fin: <I>hän nukkuu aina</I> <li>Fre: <I>elle dort toujours</I> <li>Ger: <I>sie schläft immer</I> <li>Hin: <I>वह हमेशा सोती है</I> <li>Ita: <I>lei dorme sempre</I> <li>Lav: <I>viņa guļ vienmēr</I> <li>Nep: <I>उनी सधैँ सुत्छिन्</I> <li>Nor: <I>hun sover altid</I> <li>Pes: <I>او همیشه می خوابد</I> <li>Pnb: <I>او ہمیشہ سوندی اے</I> <li>Pol: <I>ona zawsze śpi</I> <li>Ron: <I>ea doarme mereu</I> <li>Rus: <I>она спдит всегда</I> <li>Snd: <I>ھو۶ ھمیشھ سمھی ٿی</I> <li>Spa: <I>ella duerme siempre</I> <li>Swe: <I>hon sover alltid</I> <li>Tha: <I>หล่อนนอนหลับเสมอ</I> <li>Urd: <I>وہ ہمیشہ سوتی ہے</I> </ul> </div> </div></TD>+</TR>+<TR>+<TD><CODE>mkCl</CODE></TD>+<TD><A HREF="#N" TITLE="N - common noun">N</A> <CODE>-></CODE> <A HREF="#Cl" TITLE="Cl - declarative clause, with all tenses">Cl</A></TD>+<TD><div class=reveal> <I>there is a house</I> <div class=popup> <ul> <li>API: <CODE>mkCl house_N</CODE> <li>Afr: <I>daar is 'n huis</I> <li>Bul: <I>има къща</I> <li>Cat: <I>hi ha una casa</I> <li>Dan: <I>det findes et hus</I> <li>Dut: <I>er is een huis</I> <li>Eng: <I>there is a house</I> <li>Fin: <I>on olemassa talo</I> <li>Fre: <I>il y a une maison</I> <li>Ger: <I>es gibt ein Haus</I> <li>Hin: <I>वहाँ एक घर है</I> <li>Ita: <I>c' è una casa</I> <li>Lav: <I>ir māja</I> <li>Nep: <I>त्यहाँ घर छ</I> <li>Nor: <I>det finnes et hus</I> <li>Pes: <I>یک خانه است</I> <li>Pnb: <I>اوتھے گھر اے</I> <li>Pol: <I>jest dom</I> <li>Ron: <I>există o casă</I> <li>Rus: <I>существует дом</I> <li>Snd: <I>ھتی گھر اھی</I> <li>Spa: <I>hay una casa</I> <li>Swe: <I>det finns ett hus</I> <li>Tha: <I>มีบ้าน</I> <li>Urd: <I>وہاں اك گھر ہے</I> </ul> </div> </div></TD>+</TR>+<TR>+<TD><CODE>mkCl</CODE></TD>+<TD><A HREF="#CN" TITLE="CN - common noun (without determiner)">CN</A> <CODE>-></CODE> <A HREF="#Cl" TITLE="Cl - declarative clause, with all tenses">Cl</A></TD>+<TD><I>there is an old house</I></TD>+</TR>+<TR>+<TD><CODE>mkCl</CODE></TD>+<TD><A HREF="#NP" TITLE="NP - noun phrase (subject or object)">NP</A> <CODE>-></CODE> <A HREF="#Cl" TITLE="Cl - declarative clause, with all tenses">Cl</A></TD>+<TD><div class=reveal> <I>there are many houses</I> <div class=popup> <ul> <li>API: <CODE>mkCl (mkNP many_Det house_N)</CODE> <li>Afr: <I>daar is baie huise</I> <li>Bul: <I>има много къщи</I> <li>Cat: <I>hi ha moltes cases</I> <li>Dan: <I>det findes mange huse</I> <li>Dut: <I>er zijn veel huizen</I> <li>Eng: <I>there are many houses</I> <li>Fin: <I>on olemassa moni talo</I> <li>Fre: <I>il y a plusieurs maisons</I> <li>Ger: <I>es gibt viele Häuser</I> <li>Hin: <I>वहाँ बहुत घर हैं</I> <li>Ita: <I>ci sono molte case</I> <li>Lav: <I>ir daudzas mājas</I> <li>Nep: <I>त्यहाँ थुप्रै घरहरु छन्</I> <li>Nor: <I>det finnes mange hus</I> <li>Pes: <I>تعداد زیادی خانه هستند</I> <li>Pnb: <I>اوتھے بہت زیادہ گھر نے</I> <li>Pol: <I>jest wiele domów</I> <li>Ron: <I>există multe case</I> <li>Rus: <I>существует много домов</I> <li>Snd: <I>ھتی گھڻا گھر اھن</I> <li>Spa: <I>hay muchas casas</I> <li>Swe: <I>det finns många hus</I> <li>Tha: <I>มีบ้านหลายหลัง</I> <li>Urd: <I>وہاں بہت زیادہ گھر ہیں</I> </ul> </div> </div></TD>+</TR>+<TR>+<TD><CODE>mkCl</CODE></TD>+<TD><A HREF="#NP" TITLE="NP - noun phrase (subject or object)">NP</A> <CODE>-></CODE> <A HREF="#RS" TITLE="RS - relative">RS</A> <CODE>-></CODE> <A HREF="#Cl" TITLE="Cl - declarative clause, with all tenses">Cl</A></TD>+<TD><div class=reveal> <I>it is she who sleeps</I> <div class=popup> <ul> <li>API: <CODE>mkCl she_NP (mkRS (mkRCl which_RP (mkVP sleep_V)))</CODE> <li>Afr: <I>dit is sy wat slaap</I> <li>Bul: <I>тя е тaзи която спи</I> <li>Cat: <I>és ella que dorm</I> <li>Dan: <I>det er hun som sover</I> <li>Dut: <I>'t is ze die slaapt</I> <li>Eng: <I>it is she who sleeps</I> <li>Fin: <I>se on hän joka nukkuu</I> <li>Fre: <I>c' est elle qui dort</I> <li>Ger: <I>es ist sie die schläft</I> <li>Hin: <I>वह है जो सोती है</I> <li>Ita: <I>è lei che dorme</I> <li>Lav: <I>NON_EXISTENT</I> <li>Nep: <I>उनी हुन् जो सुत्छिन्</I> <li>Nor: <I>det er hun som sover</I> <li>Pes: <I>او است که می خوابد</I> <li>Pnb: <I>او اے جیڑی سوندی اے</I> <li>Pol: <I>to ona , która śpi</I> <li>Ron: <I>este ea care doarme</I> <li>Rus: <I>это она , которая спдит</I> <li>Snd: <I>ھو۶ اھی جھڙی سمھی ٿی</I> <li>Spa: <I>es ella que duerme</I> <li>Swe: <I>det är hon som sover</I> <li>Tha: <I>หล่อนเป็นที่นอนหลับ</I> <li>Urd: <I>وہ ہے جو سوتی ہے</I> </ul> </div> </div></TD>+</TR>+<TR>+<TD><CODE>mkCl</CODE></TD>+<TD><A HREF="#Adv" TITLE="Adv - verb-phrase-modifying adverb">Adv</A> <CODE>-></CODE> <A HREF="#S" TITLE="S - declarative sentence">S</A> <CODE>-></CODE> <A HREF="#Cl" TITLE="Cl - declarative clause, with all tenses">Cl</A></TD>+<TD><div class=reveal> <I>it is here that she sleeps</I> <div class=popup> <ul> <li>API: <CODE>mkCl here_Adv (mkS (mkCl she_NP sleep_V))</CODE> <li>Afr: <I>dit is hier dat sy slaap</I> <li>Bul: <I>тук тя спи</I> <li>Cat: <I>és aquí que ella dorm</I> <li>Dan: <I>det er her hun sover</I> <li>Dut: <I>'t is hier dat ze slaapt</I> <li>Eng: <I>it is here that she sleeps</I> <li>Fin: <I>se on täällä kun hän nukkuu</I> <li>Fre: <I>c' est ici qu' elle dort</I> <li>Ger: <I>es ist hier daß sie schläft</I> <li>Hin: <I>यहाँ वह सोती है</I> <li>Ita: <I>è quà che lei dorme</I> <li>Lav: <I>NON_EXISTENT</I> <li>Nep: <I>यहाँ उनी सुत्छिन्</I> <li>Nor: <I>det er her hun sover</I> <li>Pes: <I>اینجا او می خوابد</I> <li>Pnb: <I>ایتھے او سوندی اے</I> <li>Pol: <I>tutaj ona śpi</I> <li>Ron: <I>este aici cã ea doarme</I> <li>Rus: <I>это здесь , она спдит</I> <li>Snd: <I>ھتی ھو۶ سمھی ٿی</I> <li>Spa: <I>es aquí que ella duerme</I> <li>Swe: <I>det är här hon sover</I> <li>Tha: <I>ที่นี่หล่อนนอนหลับ</I> <li>Urd: <I>یہاں وہ سوتی ہے</I> </ul> </div> </div></TD>+</TR>+<TR>+<TD><CODE>mkCl</CODE></TD>+<TD><A HREF="#V" TITLE="V - one-place verb">V</A> <CODE>-></CODE> <A HREF="#Cl" TITLE="Cl - declarative clause, with all tenses">Cl</A></TD>+<TD><div class=reveal> <I>it rains</I> <div class=popup> <ul> <li>API: <CODE>mkCl rain_V0</CODE> <li>Afr: <I>dit reën</I> <li>Bul: <I>вали</I> <li>Cat: <I>plou</I> <li>Dan: <I>det regner</I> <li>Dut: <I>'t regeent</I> <li>Eng: <I>it rains</I> <li>Fin: <I>sataa</I> <li>Fre: <I>il pleut</I> <li>Ger: <I>es regnet</I> <li>Hin: <I>बारिश होता है</I> <li>Ita: <I>piove</I> <li>Lav: <I>constant not found: rain_V0</I> <li>Nep: <I>बर्षा हुन्छ</I> <li>Nor: <I>det regner</I> <li>Pes: <I>باران می آید</I> <li>Pnb: <I>بارش ہوندا اے</I> <li>Pol: <I>pada</I> <li>Ron: <I>plouă</I> <li>Rus: <I>идет дождь</I> <li>Snd: <I>constant not found: rain_V0</I> <li>Spa: <I>llueve</I> <li>Swe: <I>det regnar</I> <li>Tha: <I>มีฝน</I> <li>Urd: <I>بارش ہوتا ہے</I> </ul> </div> </div></TD>+</TR>+<TR>+<TD><CODE>mkCl</CODE></TD>+<TD><A HREF="#VP" TITLE="VP - verb phrase">VP</A> <CODE>-></CODE> <A HREF="#Cl" TITLE="Cl - declarative clause, with all tenses">Cl</A></TD>+<TD><div class=reveal> <I>it is raining</I> <div class=popup> <ul> <li>API: <CODE>mkCl (progressiveVP (mkVP rain_V0))</CODE> <li>Afr: <I>dit is aan die te reën</I> <li>Bul: <I>вали</I> <li>Cat: <I>està plovent</I> <li>Dan: <I>det er ved å regne</I> <li>Dut: <I>'t is aan het regenen</I> <li>Eng: <I>it is raining</I> <li>Fin: <I>on satamassa</I> <li>Fre: <I>il est en train de pleuvoir</I> <li>Ger: <I>es regnet eben</I> <li>Hin: <I>बारिश हो रहा है</I> <li>Ita: <I>sta piovendo</I> <li>Lav: <I>constant not found: rain_V0</I> <li>Nep: <I>बर्षा भदै छ</I> <li>Nor: <I>det er ved å regne</I> <li>Pes: <I>دارد باران می آید</I> <li>Pnb: <I>بارش ہوندا پیا اے</I> <li>Pol: <I>pada</I> <li>Ron: <I>plouă</I> <li>Rus: <I>идет дождь</I> <li>Snd: <I>constant not found: rain_V0</I> <li>Spa: <I>está lloviendo</I> <li>Swe: <I>det håller på att regna</I> <li>Tha: <I>กำลังมีฝน</I> <li>Urd: <I>بارش ہو رہا ہے</I> </ul> </div> </div></TD>+</TR>+<TR>+<TD><CODE>mkCl</CODE></TD>+<TD><A HREF="#SC" TITLE="SC - embedded sentence or question">SC</A> <CODE>-></CODE> <A HREF="#VP" TITLE="VP - verb phrase">VP</A> <CODE>-></CODE> <A HREF="#Cl" TITLE="Cl - declarative clause, with all tenses">Cl</A></TD>+<TD><div class=reveal> <I>that she sleeps is good</I> <div class=popup> <ul> <li>API: <CODE>mkCl (mkSC (mkS (mkCl she_NP sleep_V))) (mkVP good_A)</CODE> <li>Afr: <I>dat sy slaap is goed</I> <li>Bul: <I>, че тя спи е добър</I> <li>Cat: <I>que ella dorm és bo</I> <li>Dan: <I>at hun sover er godt</I> <li>Dut: <I>dat ze slaapt is goed</I> <li>Eng: <I>that she sleeps is good</I> <li>Fin: <I>että hän nukkuu on hyvä</I> <li>Fre: <I>qu' elle dort est bon</I> <li>Ger: <I>daß sie schläft ist gut</I> <li>Hin: <I>कि वह सोती है अच्छा है</I> <li>Ita: <I>che lei dorme è buono</I> <li>Lav: <I>ka viņa guļ ir labs</I> <li>Nep: <I>की उनी सुत्छिन् राम्रो छ</I> <li>Nor: <I>at hun sover er godt</I> <li>Pes: <I>این که او می خوابد خوب است</I> <li>Pnb: <I>كہ او سوندی اے اچھا اے</I> <li>Pol: <I>, że ona śpi jest dobre</I> <li>Ron: <I>cã ea doarme este bun</I> <li>Rus: <I>что она спдит хороше</I> <li>Snd: <I>ت ھو۶ سمھی ٿی سٺو اھی</I> <li>Spa: <I>que ella duerme es bueno</I> <li>Swe: <I>att hon sover är gott</I> <li>Tha: <I>ว่าหล่อนนอนหลับดี</I> <li>Urd: <I>كہ وہ سوتی ہے اچھا ہے</I> </ul> </div> </div></TD>+</TR>+</TABLE>++<A NAME="ClSlash"></A>+<H2>ClSlash</H2>++<TABLE BORDER="1" CELLPADDING="4">+<TR>+<TH>Function</TH>+<TH>Type</TH>+<TH COLSPAN="2">Example</TH>+</TR>+<TR>+<TD><CODE>mkClSlash</CODE></TD>+<TD><A HREF="#NP" TITLE="NP - noun phrase (subject or object)">NP</A> <CODE>-></CODE> <A HREF="#VPSlash" TITLE="VPSlash - verb phrase missing complement">VPSlash</A> <CODE>-></CODE> <A HREF="#ClSlash">ClSlash</A></TD>+<TD><div class=reveal> <I>whom does she see</I> <div class=popup> <ul> <li>API: <CODE>mkQCl who_IP (mkClSlash she_NP (mkVPSlash see_V2))</CODE> <li>Afr: <I>wie sien sy</I> <li>Bul: <I>кого вижда тя</I> <li>Cat: <I>qui veu ella</I> <li>Dan: <I>hvem ser hun</I> <li>Dut: <I>wie zit ze</I> <li>Eng: <I>whom does she see</I> <li>Fin: <I>kenet hän näkee</I> <li>Fre: <I>qui voit elle</I> <li>Ger: <I>wen sieht sie</I> <li>Hin: <I>किस को वह देखती है</I> <li>Ita: <I>chi vede lei</I> <li>Lav: <I>kuru viņa redz</I> <li>Nep: <I>कासलाई उनी हेर्छिन्</I> <li>Nor: <I>hvem ser hun</I> <li>Pes: <I>چه کسی را او می بیند</I> <li>Pnb: <I>كون او ویكھدی اے</I> <li>Pol: <I>kogo widzi ona</I> <li>Ron: <I>pe cine vede ea</I> <li>Rus: <I>кого она видит</I> <li>Snd: <I>ڪیر ھو۶ ڏسی ٿی</I> <li>Spa: <I>quién ve ella</I> <li>Swe: <I>vem ser hon</I> <li>Tha: <I>หล่อนเห็นใคร</I> <li>Urd: <I>كس كو وہ دیكھتی ہے</I> </ul> </div> </div></TD>+</TR>+<TR>+<TD><CODE>mkClSlash</CODE></TD>+<TD><A HREF="#NP" TITLE="NP - noun phrase (subject or object)">NP</A> <CODE>-></CODE> <A HREF="#V2" TITLE="V2 - two-place verb">V2</A> <CODE>-></CODE> <A HREF="#ClSlash">ClSlash</A></TD>+<TD><div class=reveal> <I>whom does she see</I> <div class=popup> <ul> <li>API: <CODE>mkQCl who_IP (mkClSlash she_NP see_V2)</CODE> <li>Afr: <I>wie sien sy</I> <li>Bul: <I>кого вижда тя</I> <li>Cat: <I>qui veu ella</I> <li>Dan: <I>hvem ser hun</I> <li>Dut: <I>wie zit ze</I> <li>Eng: <I>whom does she see</I> <li>Fin: <I>kenet hän näkee</I> <li>Fre: <I>qui voit elle</I> <li>Ger: <I>wen sieht sie</I> <li>Hin: <I>किस को वह देखती है</I> <li>Ita: <I>chi vede lei</I> <li>Lav: <I>kuru viņa redz</I> <li>Nep: <I>कासलाई उनी हेर्छिन्</I> <li>Nor: <I>hvem ser hun</I> <li>Pes: <I>چه کسی را او می بیند</I> <li>Pnb: <I>كون او ویكھدی اے</I> <li>Pol: <I>kogo widzi ona</I> <li>Ron: <I>pe cine vede ea</I> <li>Rus: <I>кого она видит</I> <li>Snd: <I>ڪیر ھو۶ ڏسی ٿی</I> <li>Spa: <I>quién ve ella</I> <li>Swe: <I>vem ser hon</I> <li>Tha: <I>หล่อนเห็นใคร</I> <li>Urd: <I>كس كو وہ دیكھتی ہے</I> </ul> </div> </div></TD>+</TR>+<TR>+<TD><CODE>mkClSlash</CODE></TD>+<TD><A HREF="#NP" TITLE="NP - noun phrase (subject or object)">NP</A> <CODE>-></CODE> <A HREF="#VV" TITLE="VV - verb-phrase-complement verb">VV</A> <CODE>-></CODE> <A HREF="#V2" TITLE="V2 - two-place verb">V2</A> <CODE>-></CODE> <A HREF="#ClSlash">ClSlash</A></TD>+<TD><div class=reveal> <I>whom does she want to see</I> <div class=popup> <ul> <li>API: <CODE>mkQCl who_IP (mkClSlash she_NP want_VV see_V2)</CODE> <li>Afr: <I>wie wil sy te sien</I> <li>Bul: <I>кого иска да види тя</I> <li>Cat: <I>qui vol ella veure</I> <li>Dan: <I>hvem vil hun se</I> <li>Dut: <I>wie wil ze zien</I> <li>Eng: <I>whom does she want to see</I> <li>Fin: <I>kenet hän tahtoo nähdä</I> <li>Fre: <I>qui veut elle voir</I> <li>Ger: <I>wen will sie sehen</I> <li>Hin: <I>किस को वह देखना चाहती है</I> <li>Ita: <I>chi vuole lei vedere</I> <li>Lav: <I>kuru viņa grib redzēt</I> <li>Nep: <I>कासलाई उनी हेर्न चाहन्छिन्</I> <li>Nor: <I>hvem vil hun se</I> <li>Pes: <I>چه کسی را او می خواهد ببیند</I> <li>Pnb: <I>كون او ویكھنا چاندی اے</I> <li>Pol: <I>kogo ona chce widzieć</I> <li>Ron: <I>pe cine vrea ea sã vadă</I> <li>Rus: <I>кого она хочет видеть</I> <li>Snd: <I>ڪیر ھو۶ ڏسڻ چاھی ٿی</I> <li>Spa: <I>quién quiere ella ver</I> <li>Swe: <I>vem vill hon se</I> <li>Tha: <I>หล่อนอยากเห็นใคร</I> <li>Urd: <I>كس كو وہ دیكھنا چاہتی ہے</I> </ul> </div> </div></TD>+</TR>+<TR>+<TD><CODE>mkClSlash</CODE></TD>+<TD><A HREF="#Cl" TITLE="Cl - declarative clause, with all tenses">Cl</A> <CODE>-></CODE> <A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A> <CODE>-></CODE> <A HREF="#ClSlash">ClSlash</A></TD>+<TD><div class=reveal> <I>with whom does she sleep</I> <div class=popup> <ul> <li>API: <CODE>mkQCl who_IP (mkClSlash (mkCl she_NP sleep_V) with_Prep)</CODE> <li>Afr: <I>met wie slaap sy</I> <li>Bul: <I>с кого спи тя</I> <li>Cat: <I>amb qui dorm ella</I> <li>Dan: <I>med hvem sover hun</I> <li>Dut: <I>met wie slaapt ze</I> <li>Eng: <I>with whom does she sleep</I> <li>Fin: <I>kenen kanssa hän nukkuu</I> <li>Fre: <I>avec qui dort elle</I> <li>Ger: <I>mit wem schläft sie</I> <li>Hin: <I>किस को वह सोती है</I> <li>Ita: <I>con chi dorme lei</I> <li>Lav: <I>ar kuru viņa guļ</I> <li>Nep: <I>कासलाई उनी सुत्छिन्</I> <li>Nor: <I>med hvem sover hun</I> <li>Pes: <I>با چه کسی او می خوابد</I> <li>Pnb: <I>كون او سوندی اے</I> <li>Pol: <I>z kim ona śpi</I> <li>Ron: <I>cu cine doarme ea</I> <li>Rus: <I>с кем она спдит</I> <li>Snd: <I>ڪیر ھو۶ سمھی ٿی</I> <li>Spa: <I>con quién duerme ella</I> <li>Swe: <I>med vem sover hon</I> <li>Tha: <I>หล่อนนอนหลับกับใคร</I> <li>Urd: <I>كس كو وہ سوتی ہے</I> </ul> </div> </div></TD>+</TR>+<TR>+<TD><CODE>mkClSlash</CODE></TD>+<TD><A HREF="#ClSlash">ClSlash</A> <CODE>-></CODE> <A HREF="#Adv" TITLE="Adv - verb-phrase-modifying adverb">Adv</A> <CODE>-></CODE> <A HREF="#ClSlash">ClSlash</A></TD>+<TD><div class=reveal> <I>whom does she see today</I> <div class=popup> <ul> <li>API: <CODE>mkQCl who_IP (mkClSlash (mkClSlash she_NP see_V2) today_Adv)</CODE> <li>Afr: <I>wie sien sy vandag</I> <li>Bul: <I>кого вижда тя днес</I> <li>Cat: <I>qui veu ella avui</I> <li>Dan: <I>hvem ser hun idag</I> <li>Dut: <I>wie zit ze vandaag</I> <li>Eng: <I>whom does she see today</I> <li>Fin: <I>kenet hän näkee tänään</I> <li>Fre: <I>qui voit elle aujourd'hui</I> <li>Ger: <I>wen sieht sie heute</I> <li>Hin: <I>किस को आज वह देखती है</I> <li>Ita: <I>chi vede lei oggi</I> <li>Lav: <I>kuru viņa redz šodien</I> <li>Nep: <I>कासलाई आज उनी हेर्छिन्</I> <li>Nor: <I>hvem ser hun idag</I> <li>Pes: <I>چه کسی را امروز او می بیند</I> <li>Pnb: <I>كون اج او ویكھدی اے</I> <li>Pol: <I>kogo dziś widzi ona</I> <li>Ron: <I>pe cine vede ea astăzi</I> <li>Rus: <I>кого она видит сегодня</I> <li>Snd: <I>ڪیر اڄ ھو۶ ڏسی ٿی</I> <li>Spa: <I>quién ve ella hoy</I> <li>Swe: <I>vem ser hon idag</I> <li>Tha: <I>หล่อนเห็นวันนี้ใคร</I> <li>Urd: <I>كس كو آج وہ دیكھتی ہے</I> </ul> </div> </div></TD>+</TR>+<TR>+<TD><CODE>mkClSlash</CODE></TD>+<TD><A HREF="#NP" TITLE="NP - noun phrase (subject or object)">NP</A> <CODE>-></CODE> <A HREF="#VS" TITLE="VS - sentence-complement verb">VS</A> <CODE>-></CODE> <A HREF="#SSlash">SSlash</A> <CODE>-></CODE> <A HREF="#ClSlash">ClSlash</A></TD>+<TD><div class=reveal> <I>whom does she know that we hadn't seen</I> <div class=popup> <ul> <li>API: <CODE>mkQCl who_IP (mkClSlash she_NP know_VS (mkSSlash (mkTemp pastTense anteriorAnt) negativePol (mkClSlash we_NP (mkVPSlash see_V2))))</CODE> <li>Afr: <I>wie weet sy dat ons nie gesien nie het</I> <li>Bul: <I>кого знае че ние не бяхме видeли тя</I> <li>Cat: <I>qui sap ella que nosaltres no havíem vist</I> <li>Dan: <I>hvem ved hun at vi ikke havde set</I> <li>Dut: <I>wie weet ze dat we niet gezien hadden</I> <li>Eng: <I>whom does she know that we hadn't seen</I> <li>Fin: <I>kenet hän tietää että me emme olleet nähneet</I> <li>Fre: <I>qui sait elle que nous n' avions pas vu</I> <li>Ger: <I>wen weiß sie daß wir nicht gesehen hatten</I> <li>Hin: <I>किस को वह जानती है कि हम नहीं देख चुके थे</I> <li>Ita: <I>chi sa lei che noi non avevamo visto</I> <li>Lav: <I>kuru viņa zina , ka mēs nebijām redzējuši</I> <li>Nep: <I>कासलाई उनी थाहा पाउँछिन्की हामीहरु हेरेकाथिएनैँ</I> <li>Nor: <I>hvem vet hun at vi ikke hadde sett</I> <li>Pes: <I>چه کسی را او می داند که ما ندیده بودیم</I> <li>Pnb: <I>كون او جاندی اے كہ اسی نیں ویكھ گیے ساں</I> <li>Pol: <I>kogo ona wie , że nie zobaczyliśmy my</I> <li>Ron: <I>pe cine ştie ea cã noi nu văzuserăm</I> <li>Rus: <I>кого она знает , что мы не видели</I> <li>Snd: <I>ڪیر ھو۶ ڄاڻی ٿی ت اسان ڏسون ن ھ۶اسین</I> <li>Spa: <I>quién sabe ella que nosotros no habíamos visto</I> <li>Swe: <I>vem vet hon att vi inte hade sett</I> <li>Tha: <I>หล่อนรู้ว่าเราไม่เห็นใคร</I> <li>Urd: <I>كس كو وہ جانتی ہے كہ ہم نہیں دیكھ چكے تھے</I> </ul> </div> </div></TD>+</TR>+</TABLE>++<A NAME="Comp"></A>+<H2>Comp - complement of copula, such as AP</H2>++<TABLE BORDER="1" CELLPADDING="4">+<TR>+<TH>Function</TH>+<TH>Type</TH>+<TH COLSPAN="2">Example</TH>+</TR>+<TR>+<TD><CODE>mkComp</CODE></TD>+<TD><A HREF="#AP" TITLE="AP - adjectival phrase">AP</A> <CODE>-></CODE> <A HREF="#Comp" TITLE="Comp - complement of copula, such as AP">Comp</A></TD>+<TD><div class=reveal> <I>old</I> <div class=popup> <ul> <li>API: <CODE>mkComp (mkAP old_A)</CODE> <li>Afr: <I>oud</I> <li>Bul: <I>стар</I> <li>Cat: <I>vell</I> <li>Dan: <I>gammel</I> <li>Dut: <I>oud</I> <li>Eng: <I>old</I> <li>Fin: <I>vanha</I> <li>Fre: <I>vieux</I> <li>Ger: <I>alt</I> <li>Hin: <I>बूढ़ा</I> <li>Ita: <I>vecchio</I> <li>Lav: <I>vecs</I> <li>Nep: <I>बुढो</I> <li>Nor: <I>gammel</I> <li>Pes: <I>پیر</I> <li>Pnb: <I>بوڈا</I> <li>Pol: <I>stary</I> <li>Ron: <I>vechi</I> <li>Rus: <I>стар</I> <li>Snd: <I>پوڙھی</I> <li>Spa: <I>viejo</I> <li>Swe: <I>gammal</I> <li>Tha: <I>แก่</I> <li>Urd: <I>بوڑھا</I> </ul> </div> </div></TD>+</TR>+<TR>+<TD><CODE>mkComp</CODE></TD>+<TD><A HREF="#NP" TITLE="NP - noun phrase (subject or object)">NP</A> <CODE>-></CODE> <A HREF="#Comp" TITLE="Comp - complement of copula, such as AP">Comp</A></TD>+<TD><div class=reveal> <I>this man</I> <div class=popup> <ul> <li>API: <CODE>mkComp (mkNP this_Det man_N)</CODE> <li>Afr: <I>hierdie man</I> <li>Bul: <I>този мъж</I> <li>Cat: <I>aquest home</I> <li>Dan: <I>denne mand</I> <li>Dut: <I>deze man</I> <li>Eng: <I>this man</I> <li>Fin: <I>tämä mies</I> <li>Fre: <I>cet homme</I> <li>Ger: <I>dieser Mann</I> <li>Hin: <I>यह आदमी</I> <li>Ita: <I>questo uomo</I> <li>Lav: <I>šis vīrietis</I> <li>Nep: <I>यो मान्छे</I> <li>Nor: <I>denne mannen</I> <li>Pes: <I>این مرد</I> <li>Pnb: <I>اے بندہ</I> <li>Pol: <I>tym mężczyzną</I> <li>Ron: <I>acest om</I> <li>Rus: <I>этот человек</I> <li>Snd: <I>ھی ماڻھو</I> <li>Spa: <I>este hombre</I> <li>Swe: <I>den här mannen</I> <li>Tha: <I>เป็นชายคนนี้</I> <li>Urd: <I>یہ آدمی</I> </ul> </div> </div></TD>+</TR>+<TR>+<TD><CODE>mkComp</CODE></TD>+<TD><A HREF="#Adv" TITLE="Adv - verb-phrase-modifying adverb">Adv</A> <CODE>-></CODE> <A HREF="#Comp" TITLE="Comp - complement of copula, such as AP">Comp</A></TD>+<TD><div class=reveal> <I>here</I> <div class=popup> <ul> <li>API: <CODE>mkComp here_Adv</CODE> <li>Afr: <I>hier</I> <li>Bul: <I>тук</I> <li>Cat: <I>aquí</I> <li>Dan: <I>her</I> <li>Dut: <I>hier</I> <li>Eng: <I>here</I> <li>Fin: <I>täällä</I> <li>Fre: <I>ici</I> <li>Ger: <I>hier</I> <li>Hin: <I>यहाँ</I> <li>Ita: <I>quà</I> <li>Lav: <I>šeit</I> <li>Nep: <I>यहाँ</I> <li>Nor: <I>her</I> <li>Pes: <I>اینجا</I> <li>Pnb: <I>ایتھے</I> <li>Pol: <I>tutaj</I> <li>Ron: <I>aici</I> <li>Rus: <I>здесь</I> <li>Snd: <I>ھتی</I> <li>Spa: <I>aquí</I> <li>Swe: <I>här</I> <li>Tha: <I>อยู่ที่นี่</I> <li>Urd: <I>یہاں</I> </ul> </div> </div></TD>+</TR>+</TABLE>++<A NAME="Conj"></A>+<H2>Conj - conjunction</H2>++<TABLE BORDER="1" CELLPADDING="4">+<TR>+<TH>Function</TH>+<TH>Type</TH>+<TH COLSPAN="2">Example</TH>+</TR>+<TR>+<TD><CODE>and_Conj</CODE></TD>+<TD><A HREF="#Conj" TITLE="Conj - conjunction">Conj</A></TD>+<TD><div class=reveal> <I>here and now</I> <div class=popup> <ul> <li>API: <CODE>mkAdv and_Conj here_Adv now_Adv</CODE> <li>Afr: <I>hier en nou</I> <li>Bul: <I>тук и сега</I> <li>Cat: <I>aquí i ara</I> <li>Dan: <I>her og nu</I> <li>Dut: <I>hier en nu</I> <li>Eng: <I>here and now</I> <li>Fin: <I>täällä ja nyt</I> <li>Fre: <I>ici et maintenant</I> <li>Ger: <I>hier und jetzt</I> <li>Hin: <I>यहाँ और अब</I> <li>Ita: <I>quà e adesso</I> <li>Lav: <I>šeit un tagad</I> <li>Nep: <I>यहाँ र अहीले</I> <li>Nor: <I>her og nå</I> <li>Pes: <I>اینجا و حالا</I> <li>Pnb: <I>ایتھے تے ہون</I> <li>Pol: <I>tutaj i teraz</I> <li>Ron: <I>aici şi acum</I> <li>Rus: <I>здесь и сейчас</I> <li>Snd: <I>ھتی ۽ ھاڻی</I> <li>Spa: <I>aquí y ahora</I> <li>Swe: <I>här och nu</I> <li>Tha: <I>ที่นี่และเดี๋ยวนี้</I> <li>Urd: <I>یہاں اور اب</I> </ul> </div> </div></TD>+</TR>+<TR>+<TD><CODE>both7and_DConj</CODE></TD>+<TD><A HREF="#Conj" TITLE="Conj - conjunction">Conj</A></TD>+<TD><div class=reveal> <I>both here and there</I> <div class=popup> <ul> <li>API: <CODE>mkAdv both7and_DConj here_Adv there_Adv</CODE> <li>Afr: <I>sowel hier as daar</I> <li>Bul: <I>и тук и там</I> <li>Cat: <I>i aquí i allà</I> <li>Dan: <I>både her og der</I> <li>Dut: <I>zowel hier als daar</I> <li>Eng: <I>both here and there</I> <li>Fin: <I>sekä täällä että siellä</I> <li>Fre: <I>et ici et là</I> <li>Ger: <I>sowohl hier als auch da</I> <li>Hin: <I>दोनों यहाँ और वहाँ</I> <li>Ita: <I>e quà e là</I> <li>Lav: <I>gan šeit , gan tur</I> <li>Nep: <I>दुबै यहाँ र त्यहाँ</I> <li>Nor: <I>både her og der</I> <li>Pes: <I>هم اینجا و هم آنجا</I> <li>Pnb: <I>دوویں ایتھے تے اوتھے</I> <li>Pol: <I>zarówno tutaj jak i tam</I> <li>Ron: <I>şi aici şi acolo</I> <li>Rus: <I>как здесь , так и там</I> <li>Snd: <I>ٻ۶ی ھتی ۽ اتی</I> <li>Spa: <I>y aquí y allí</I> <li>Swe: <I>både här och där</I> <li>Tha: <I>ทั้งที่นี่และที่นั่น</I> <li>Urd: <I>دونوں یہاں اور وہاں</I> </ul> </div> </div></TD>+</TR>+<TR>+<TD><CODE>either7or_DConj</CODE></TD>+<TD><A HREF="#Conj" TITLE="Conj - conjunction">Conj</A></TD>+<TD><div class=reveal> <I>either here or there</I> <div class=popup> <ul> <li>API: <CODE>mkAdv either7or_DConj here_Adv there_Adv</CODE> <li>Afr: <I>òf hier òf daar</I> <li>Bul: <I>или тук или там</I> <li>Cat: <I>o aquí o allà</I> <li>Dan: <I>enten her eller der</I> <li>Dut: <I>ofwel hier of daar</I> <li>Eng: <I>either here or there</I> <li>Fin: <I>joko täällä tai siellä</I> <li>Fre: <I>ou ici ou là</I> <li>Ger: <I>entweder hier oder da</I> <li>Hin: <I>कोई एक यहाँ या वहाँ</I> <li>Ita: <I>o quà o là</I> <li>Lav: <I>vai nu šeit , vai tur</I> <li>Nep: <I>की यहाँ अथवा त्यहाँ</I> <li>Nor: <I>enten her eller der</I> <li>Pes: <I>یا اینجا یا آنجا</I> <li>Pnb: <I>كوی اك ایتھے یا اوتھے</I> <li>Pol: <I>albo tutaj albo tam</I> <li>Ron: <I>sau aici sau acolo</I> <li>Rus: <I>либо здесь , либо там</I> <li>Snd: <I>ڪو۶ی ٻیو ھتی یا اتی</I> <li>Spa: <I>o aquí o allí</I> <li>Swe: <I>antingen här eller där</I> <li>Tha: <I>ที่นี่หริอที่นั่น</I> <li>Urd: <I>كوی ایك یہاں یا وہاں</I> </ul> </div> </div></TD>+</TR>+<TR>+<TD><CODE>if_then_Conj</CODE></TD>+<TD><A HREF="#Conj" TITLE="Conj - conjunction">Conj</A></TD>+<TD><div class=reveal> <I>if here then there</I> <div class=popup> <ul> <li>API: <CODE>mkAdv if_then_Conj here_Adv there_Adv</CODE> <li>Afr: <I>as hier dan daar</I> <li>Bul: <I>constant not found: if_then_Conj</I> <li>Cat: <I>si aquí llavors allà</I> <li>Dan: <I>constant not found: if_then_Conj</I> <li>Dut: <I>als hier dan daar</I> <li>Eng: <I>if here then there</I> <li>Fin: <I>jos täällä niin siellä</I> <li>Fre: <I>si ici alors là</I> <li>Ger: <I>wenn hier dann da</I> <li>Hin: <I>constant not found: if_then_Conj</I> <li>Ita: <I>si quà allora là</I> <li>Lav: <I>ja šeit tad tur</I> <li>Nep: <I>यदि यहाँ भने त्यहाँ</I> <li>Nor: <I>constant not found: if_then_Conj</I> <li>Pes: <I>اگر اینجا آنگاه آنجا</I> <li>Pnb: <I>اگر ایتھے تے اوتھے</I> <li>Pol: <I>jeżeli tutaj , to tam</I> <li>Ron: <I>dacă aici atunci acolo</I> <li>Rus: <I>constant not found: if_then_Conj</I> <li>Snd: <I>جیڪڏھن ھتی ت اتی</I> <li>Spa: <I>constant not found: if_then_Conj</I> <li>Swe: <I>om här så där</I> <li>Tha: <I>ถ้าที่นี่ก็ที่นั่น</I> <li>Urd: <I>اگر یہاں تو وہاں</I> </ul> </div> </div></TD>+</TR>+<TR>+<TD><CODE>or_Conj</CODE></TD>+<TD><A HREF="#Conj" TITLE="Conj - conjunction">Conj</A></TD>+<TD><div class=reveal> <I>here or there</I> <div class=popup> <ul> <li>API: <CODE>mkAdv or_Conj here_Adv there_Adv</CODE> <li>Afr: <I>hier of daar</I> <li>Bul: <I>тук или там</I> <li>Cat: <I>aquí o allà</I> <li>Dan: <I>her eller der</I> <li>Dut: <I>hier of daar</I> <li>Eng: <I>here or there</I> <li>Fin: <I>täällä tai siellä</I> <li>Fre: <I>ici ou là</I> <li>Ger: <I>hier oder da</I> <li>Hin: <I>यहाँ या वहाँ</I> <li>Ita: <I>quà o là</I> <li>Lav: <I>šeit vai tur</I> <li>Nep: <I>यहाँ अथवा त्यहाँ</I> <li>Nor: <I>her eller der</I> <li>Pes: <I>اینجا یا آنجا</I> <li>Pnb: <I>ایتھے یا اوتھے</I> <li>Pol: <I>tutaj lub tam</I> <li>Ron: <I>aici sau acolo</I> <li>Rus: <I>здесь или там</I> <li>Snd: <I>ھتی یا اتی</I> <li>Spa: <I>aquí o allí</I> <li>Swe: <I>här eller där</I> <li>Tha: <I>ที่นี่หริอที่นั่น</I> <li>Urd: <I>یہاں یا وہاں</I> </ul> </div> </div></TD>+</TR>+</TABLE>++<A NAME="Det"></A>+<H2>Det - determiner phrase</H2>++<TABLE BORDER="1" CELLPADDING="4">+<TR>+<TH>Function</TH>+<TH>Type</TH>+<TH COLSPAN="2">Example</TH>+</TR>+<TR>+<TD><CODE>aPl_Det</CODE></TD>+<TD><A HREF="#Det" TITLE="Det - determiner phrase">Det</A></TD>+<TD><div class=reveal> <I>women</I> <div class=popup> <ul> <li>API: <CODE>mkUtt (mkNP aPl_Det woman_N)</CODE> <li>Afr: <I>vroue</I> <li>Bul: <I>жени</I> <li>Cat: <I>dones</I> <li>Dan: <I>kvinder</I> <li>Dut: <I>vrouwen</I> <li>Eng: <I>women</I> <li>Fin: <I>naisia</I> <li>Fre: <I>des femmes</I> <li>Ger: <I>Frauen</I> <li>Hin: <I>औरतें</I> <li>Ita: <I>donne</I> <li>Lav: <I>sievietes</I> <li>Nep: <I>आईमाईहरु</I> <li>Nor: <I>kvinner</I> <li>Pes: <I>یک زن</I> <li>Pnb: <I>زنانیاں</I> <li>Pol: <I>kobiety</I> <li>Ron: <I>nişte femei</I> <li>Rus: <I>женщин</I> <li>Snd: <I>استریون</I> <li>Spa: <I>mujeres</I> <li>Swe: <I>kvinnor</I> <li>Tha: <I>หญิง</I> <li>Urd: <I>عورتیں</I> </ul> </div> </div></TD>+</TR>+<TR>+<TD><CODE>aSg_Det</CODE></TD>+<TD><A HREF="#Det" TITLE="Det - determiner phrase">Det</A></TD>+<TD><div class=reveal> <I>a woman</I> <div class=popup> <ul> <li>API: <CODE>mkUtt (mkNP aSg_Det woman_N)</CODE> <li>Afr: <I>'n vrou</I> <li>Bul: <I>жена</I> <li>Cat: <I>una dona</I> <li>Dan: <I>en kvinde</I> <li>Dut: <I>een vrouw</I> <li>Eng: <I>a woman</I> <li>Fin: <I>nainen</I> <li>Fre: <I>une femme</I> <li>Ger: <I>eine Frau</I> <li>Hin: <I>एक औरत</I> <li>Ita: <I>una donna</I> <li>Lav: <I>sieviete</I> <li>Nep: <I>आईमाई</I> <li>Nor: <I>ei kvinne</I> <li>Pes: <I>یک زن</I> <li>Pnb: <I>زنانی</I> <li>Pol: <I>kobieta</I> <li>Ron: <I>o femeie</I> <li>Rus: <I>женщину</I> <li>Snd: <I>استری</I> <li>Spa: <I>una mujer</I> <li>Swe: <I>en kvinna</I> <li>Tha: <I>หญิง</I> <li>Urd: <I>اك عورت</I> </ul> </div> </div></TD>+</TR>+<TR>+<TD><CODE>a_Det</CODE></TD>+<TD><A HREF="#Det" TITLE="Det - determiner phrase">Det</A></TD>+<TD><div class=reveal> <I>a house</I> <div class=popup> <ul> <li>API: <CODE>mkUtt (mkNP a_Det house_N)</CODE> <li>Afr: <I>'n huis</I> <li>Bul: <I>къща</I> <li>Cat: <I>una casa</I> <li>Dan: <I>et hus</I> <li>Dut: <I>een huis</I> <li>Eng: <I>a house</I> <li>Fin: <I>talo</I> <li>Fre: <I>une maison</I> <li>Ger: <I>ein Haus</I> <li>Hin: <I>एक घर</I> <li>Ita: <I>una casa</I> <li>Lav: <I>māja</I> <li>Nep: <I>घर</I> <li>Nor: <I>et hus</I> <li>Pes: <I>یک خانه</I> <li>Pnb: <I>گھر</I> <li>Pol: <I>dom</I> <li>Ron: <I>o casă</I> <li>Rus: <I>дом</I> <li>Snd: <I>گھر</I> <li>Spa: <I>una casa</I> <li>Swe: <I>ett hus</I> <li>Tha: <I>บ้าน</I> <li>Urd: <I>اك گھر</I> </ul> </div> </div></TD>+</TR>+<TR>+<TD><CODE>every_Det</CODE></TD>+<TD><A HREF="#Det" TITLE="Det - determiner phrase">Det</A></TD>+<TD><div class=reveal> <I>every woman</I> <div class=popup> <ul> <li>API: <CODE>mkUtt (mkNP every_Det woman_N)</CODE> <li>Afr: <I>elk vrou</I> <li>Bul: <I>всяка жена</I> <li>Cat: <I>cada dona</I> <li>Dan: <I>hver kvinde</I> <li>Dut: <I>elke vrouw</I> <li>Eng: <I>every woman</I> <li>Fin: <I>jokainen nainen</I> <li>Fre: <I>chaque femme</I> <li>Ger: <I>jede Frau</I> <li>Hin: <I>हर औरत</I> <li>Ita: <I>ogni donna</I> <li>Lav: <I>ikviena sieviete</I> <li>Nep: <I>सबै आईमाई</I> <li>Nor: <I>hver kvinne</I> <li>Pes: <I>هر زن</I> <li>Pnb: <I>ہر زنانی</I> <li>Pol: <I>każda kobieta</I> <li>Ron: <I>orice femeie</I> <li>Rus: <I>каждую женщину</I> <li>Snd: <I>ھر ھڪ استری</I> <li>Spa: <I>cada mujer</I> <li>Swe: <I>varje kvinna</I> <li>Tha: <I>หญิงทุกคน</I> <li>Urd: <I>ہر عورت</I> </ul> </div> </div></TD>+</TR>+<TR>+<TD><CODE>few_Det</CODE></TD>+<TD><A HREF="#Det" TITLE="Det - determiner phrase">Det</A></TD>+<TD><div class=reveal> <I>few women</I> <div class=popup> <ul> <li>API: <CODE>mkUtt (mkNP few_Det woman_N)</CODE> <li>Afr: <I>min vroue</I> <li>Bul: <I>няколко жени</I> <li>Cat: <I>poques dones</I> <li>Dan: <I>få kvinder</I> <li>Dut: <I>weinig vrouwen</I> <li>Eng: <I>few women</I> <li>Fin: <I>harva nainen</I> <li>Fre: <I>peu de femmes</I> <li>Ger: <I>wenige Frauen</I> <li>Hin: <I>चंद औरतें</I> <li>Ita: <I>poche donne</I> <li>Lav: <I>dažas sievietes</I> <li>Nep: <I>अलिकती आईमाईहरु</I> <li>Nor: <I>få kvinner</I> <li>Pes: <I>تعداد کمی زن</I> <li>Pnb: <I>كچھ زنانیاں</I> <li>Pol: <I>parę kobiet</I> <li>Ron: <I>câteva femei</I> <li>Rus: <I>немного женщин</I> <li>Snd: <I>ڪجھ استریون</I> <li>Spa: <I>pocas mujeres</I> <li>Swe: <I>få kvinnor</I> <li>Tha: <I>หญิงสองสามคน</I> <li>Urd: <I>چند عورتیں</I> </ul> </div> </div></TD>+</TR>+<TR>+<TD><CODE>many_Det</CODE></TD>+<TD><A HREF="#Det" TITLE="Det - determiner phrase">Det</A></TD>+<TD><div class=reveal> <I>many houses</I> <div class=popup> <ul> <li>API: <CODE>mkUtt (mkNP many_Det house_N)</CODE> <li>Afr: <I>baie huise</I> <li>Bul: <I>много къщи</I> <li>Cat: <I>moltes cases</I> <li>Dan: <I>mange huse</I> <li>Dut: <I>veel huizen</I> <li>Eng: <I>many houses</I> <li>Fin: <I>moni talo</I> <li>Fre: <I>plusieurs maisons</I> <li>Ger: <I>viele Häuser</I> <li>Hin: <I>बहुत घर</I> <li>Ita: <I>molte case</I> <li>Lav: <I>daudzas mājas</I> <li>Nep: <I>थुप्रै घरहरु</I> <li>Nor: <I>mange hus</I> <li>Pes: <I>تعداد زیادی خانه</I> <li>Pnb: <I>بہت زیادہ گھر</I> <li>Pol: <I>wiele domów</I> <li>Ron: <I>multe case</I> <li>Rus: <I>много домов</I> <li>Snd: <I>گھڻا گھر</I> <li>Spa: <I>muchas casas</I> <li>Swe: <I>många hus</I> <li>Tha: <I>บ้านหลายหลัง</I> <li>Urd: <I>بہت زیادہ گھر</I> </ul> </div> </div></TD>+</TR>+<TR>+<TD><CODE>mkDet</CODE></TD>+<TD><A 'HREF="#Quant" TITLE="Quant - quantifier ('nucleus' of Det)"'>Quant</A> <CODE>-></CODE> <A HREF="#Det" TITLE="Det - determiner phrase">Det</A></TD>+<TD><div class=reveal> <I>this</I> <div class=popup> <ul> <li>API: <CODE>mkDet this_Quant</CODE> <li>Afr: <I>hierdie</I> <li>Bul: <I>този</I> <li>Cat: <I>aquest</I> <li>Dan: <I>denne</I> <li>Dut: <I>deze</I> <li>Eng: <I>this</I> <li>Fin: <I>Prelude.True</I> <li>Fre: <I>ce</I> <li>Ger: <I>dieser</I> <li>Hin: <I>यह</I> <li>Ita: <I>questo</I> <li>Lav: <I>šis</I> <li>Nep: <I>यो</I> <li>Nor: <I>denne</I> <li>Pes: <I>این</I> <li>Pnb: <I>اے</I> <li>Pol: <I>ten</I> <li>Ron: <I>acest</I> <li>Rus: <I>этот</I> <li>Snd: <I>ھی</I> <li>Spa: <I>este</I> <li>Swe: <I>den här</I> <li>Tha: <I>Prelude.True</I> <li>Urd: <I>یہ</I> </ul> </div> </div></TD>+</TR>+<TR>+<TD><CODE>mkDet</CODE></TD>+<TD><A 'HREF="#Quant" TITLE="Quant - quantifier ('nucleus' of Det)"'>Quant</A> <CODE>-></CODE> <A HREF="#Card" TITLE="Card - cardinal number">Card</A> <CODE>-></CODE> <A HREF="#Det" TITLE="Det - determiner phrase">Det</A></TD>+<TD><div class=reveal> <I>these five</I> <div class=popup> <ul> <li>API: <CODE>mkDet this_Quant (mkCard (mkNumeral n5_Unit))</CODE> <li>Afr: <I>hierdie vyf</I> <li>Bul: <I>тези петима</I> <li>Cat: <I>aquests cinc</I> <li>Dan: <I>disse fem</I> <li>Dut: <I>deze vijf</I> <li>Eng: <I>these five</I> <li>Fin: <I>Prelude.True</I> <li>Fre: <I>ces cinq</I> <li>Ger: <I>diese fünf</I> <li>Hin: <I>यह पांच</I> <li>Ita: <I>questi cinque</I> <li>Lav: <I>šie pieci</I> <li>Nep: <I>यी पाँच</I> <li>Nor: <I>disse fem</I> <li>Pes: <I>این پنج</I> <li>Pnb: <I>اے پنج</I> <li>Pol: <I>tych pięć</I> <li>Ron: <I>aceşti cinci</I> <li>Rus: <I>этот пять</I> <li>Snd: <I>ھی پنج</I> <li>Spa: <I>estos cinco</I> <li>Swe: <I>de här fem</I> <li>Tha: <I>Prelude.True</I> <li>Urd: <I>یہ پانچ</I> </ul> </div> </div></TD>+</TR>+<TR>+<TD><CODE>mkDet</CODE></TD>+<TD><A 'HREF="#Quant" TITLE="Quant - quantifier ('nucleus' of Det)"'>Quant</A> <CODE>-></CODE> <A HREF="#Ord" TITLE="Ord - ordinal number (used in Det)">Ord</A> <CODE>-></CODE> <A HREF="#Det" TITLE="Det - determiner phrase">Det</A></TD>+<TD><div class=reveal> <I>the fifth</I> <div class=popup> <ul> <li>API: <CODE>mkDet the_Quant (mkOrd (mkNumeral n5_Unit))</CODE> <li>Afr: <I>die vyfde</I> <li>Bul: <I>петият</I> <li>Cat: <I>el quint</I> <li>Dan: <I>den femte</I> <li>Dut: <I>de vijfde</I> <li>Eng: <I>the fifth</I> <li>Fin: <I>Prelude.True</I> <li>Fre: <I>le cinquième</I> <li>Ger: <I>der fünfte</I> <li>Hin: <I>पांचवाँ</I> <li>Ita: <I>il quinto</I> <li>Lav: <I>piektais</I> <li>Nep: <I>पाँचौँ</I> <li>Nor: <I>den femte</I> <li>Pes: <I>پنجمین / پنجم</I> <li>Pnb: <I>پنج واں</I> <li>Pol: <I>piąty</I> <li>Ron: <I>al cincilea</I> <li>Rus: <I>// <li>Snd: //پنجون</I> <li>Spa: <I>el quinto</I> <li>Swe: <I>den femte</I> <li>Tha: <I>Prelude.True</I> <li>Urd: <I>پانچ واں</I> </ul> </div> </div></TD>+</TR>+<TR>+<TD><CODE>mkDet</CODE></TD>+<TD><A 'HREF="#Quant" TITLE="Quant - quantifier ('nucleus' of Det)"'>Quant</A> <CODE>-></CODE> <A HREF="#Num" TITLE="Num - number determining element">Num</A> <CODE>-></CODE> <A HREF="#Ord" TITLE="Ord - ordinal number (used in Det)">Ord</A> <CODE>-></CODE> <A HREF="#Det" TITLE="Det - determiner phrase">Det</A></TD>+<TD><div class=reveal> <I>the five best</I> <div class=popup> <ul> <li>API: <CODE>mkDet the_Quant (mkNum (mkNumeral n5_Unit)) (mkOrd good_A)</CODE> <li>Afr: <I>die vyf beste</I> <li>Bul: <I>петимата най - добри</I> <li>Cat: <I>els cinc millors</I> <li>Dan: <I>de fem bedste</I> <li>Dut: <I>de vijf beste</I> <li>Eng: <I>the five best</I> <li>Fin: <I>Prelude.True</I> <li>Fre: <I>les cinq meilleurs</I> <li>Ger: <I>die fünf besten</I> <li>Hin: <I>पांच सब से अच्छा</I> <li>Ita: <I>i cinque migliori</I> <li>Lav: <I>pieci vislabākais</I> <li>Nep: <I>सबभन्दा राम्रो पाँच</I> <li>Nor: <I>de fem beste</I> <li>Pes: <I>پنج خوب ترین</I> <li>Pnb: <I>پنج اچھا</I> <li>Pol: <I>pięć najlepszych</I> <li>Ron: <I>cei mai buni cinci</I> <li>Rus: <I>пять хороший</I> <li>Snd: <I>پنج سٺو</I> <li>Spa: <I>los cinco mejores</I> <li>Swe: <I>de fem bästa</I> <li>Tha: <I>Prelude.True</I> <li>Urd: <I>پانچ سب سے اچھا</I> </ul> </div> </div></TD>+</TR>+<TR>+<TD><CODE>mkDet</CODE></TD>+<TD><A 'HREF="#Quant" TITLE="Quant - quantifier ('nucleus' of Det)"'>Quant</A> <CODE>-></CODE> <A HREF="#Num" TITLE="Num - number determining element">Num</A> <CODE>-></CODE> <A HREF="#Det" TITLE="Det - determiner phrase">Det</A></TD>+<TD><div class=reveal> <I>these</I> <div class=popup> <ul> <li>API: <CODE>mkDet this_Quant pluralNum</CODE> <li>Afr: <I>hierdie</I> <li>Bul: <I>тези</I> <li>Cat: <I>aquests</I> <li>Dan: <I>disse</I> <li>Dut: <I>deze</I> <li>Eng: <I>these</I> <li>Fin: <I>Prelude.True</I> <li>Fre: <I>ces</I> <li>Ger: <I>diese</I> <li>Hin: <I>यह</I> <li>Ita: <I>questi</I> <li>Lav: <I>šie</I> <li>Nep: <I>यी</I> <li>Nor: <I>disse</I> <li>Pes: <I>این</I> <li>Pnb: <I>اے</I> <li>Pol: <I>te</I> <li>Ron: <I>aceşti</I> <li>Rus: <I>этот</I> <li>Snd: <I>ھی</I> <li>Spa: <I>estos</I> <li>Swe: <I>de här</I> <li>Tha: <I>Prelude.True</I> <li>Urd: <I>یہ</I> </ul> </div> </div></TD>+</TR>+<TR>+<TD><CODE>mkDet</CODE></TD>+<TD><A HREF="#Card" TITLE="Card - cardinal number">Card</A> <CODE>-></CODE> <A HREF="#Det" TITLE="Det - determiner phrase">Det</A></TD>+<TD><div class=reveal> <I>five</I> <div class=popup> <ul> <li>API: <CODE>mkDet (mkCard (mkNumeral n5_Unit))</CODE> <li>Afr: <I>vyf</I> <li>Bul: <I>петима</I> <li>Cat: <I>cinc</I> <li>Dan: <I>fem</I> <li>Dut: <I>vijf</I> <li>Eng: <I>five</I> <li>Fin: <I>Prelude.False</I> <li>Fre: <I>cinq</I> <li>Ger: <I>fünf</I> <li>Hin: <I>एक पांच</I> <li>Ita: <I>cinque</I> <li>Lav: <I>pieci</I> <li>Nep: <I>पाँच</I> <li>Nor: <I>fem</I> <li>Pes: <I>یک پنج</I> <li>Pnb: <I>پنج</I> <li>Pol: <I>pięć</I> <li>Ron: <I>cinci</I> <li>Rus: <I>пять</I> <li>Snd: <I>پنج</I> <li>Spa: <I>cinco</I> <li>Swe: <I>fem</I> <li>Tha: <I>Prelude.True</I> <li>Urd: <I>اك پانچ</I> </ul> </div> </div></TD>+</TR>+<TR>+<TD><CODE>mkDet</CODE></TD>+<TD><A HREF="#Digits" TITLE="Digits - cardinal or ordinal in digits">Digits</A> <CODE>-></CODE> <A HREF="#Det" TITLE="Det - determiner phrase">Det</A></TD>+<TD><I>51</I></TD>+</TR>+<TR>+<TD><CODE>mkDet</CODE></TD>+<TD><A HREF="#Numeral" TITLE="Numeral - cardinal or ordinal in words">Numeral</A> <CODE>-></CODE> <A HREF="#Det" TITLE="Det - determiner phrase">Det</A></TD>+<TD><I>five</I></TD>+</TR>+<TR>+<TD><CODE>mkDet</CODE></TD>+<TD><A HREF="#Pron" TITLE="Pron - personal pronoun">Pron</A> <CODE>-></CODE> <A HREF="#Det" TITLE="Det - determiner phrase">Det</A></TD>+<TD><I>my</I></TD>+</TR>+<TR>+<TD><CODE>mkDet</CODE></TD>+<TD><A HREF="#Pron" TITLE="Pron - personal pronoun">Pron</A> <CODE>-></CODE> <A HREF="#Num" TITLE="Num - number determining element">Num</A> <CODE>-></CODE> <A HREF="#Det" TITLE="Det - determiner phrase">Det</A></TD>+<TD><div class=reveal> <I>my five</I> <div class=popup> <ul> <li>API: <CODE>mkDet i_Pron (mkNum (mkNumeral n5_Unit))</CODE> <li>Afr: <I>my vyf</I> <li>Bul: <I>моите петима</I> <li>Cat: <I>els meus cinc</I> <li>Dan: <I>mine fem</I> <li>Dut: <I>mijn vijf</I> <li>Eng: <I>my five</I> <li>Fin: <I>Prelude.True</I> <li>Fre: <I>mes cinq</I> <li>Ger: <I>meine fünf</I> <li>Hin: <I>मेरा पांच</I> <li>Ita: <I>i miei cinque</I> <li>Lav: <I>mani pieci</I> <li>Nep: <I>मेरो पाँच</I> <li>Nor: <I>mine fem</I> <li>Pes: <I>من پنج</I> <li>Pnb: <I>میرا پنج</I> <li>Pol: <I>moich pięć</I> <li>Ron: <I>cei cinci</I> <li>Rus: <I>мой пять</I> <li>Snd: <I>پنج</I> <li>Spa: <I>mis cinco</I> <li>Swe: <I>mina fem</I> <li>Tha: <I>Prelude.True</I> <li>Urd: <I>میرا پانچ</I> </ul> </div> </div></TD>+</TR>+<TR>+<TD><CODE>much_Det</CODE></TD>+<TD><A HREF="#Det" TITLE="Det - determiner phrase">Det</A></TD>+<TD><div class=reveal> <I>much wine</I> <div class=popup> <ul> <li>API: <CODE>mkUtt (mkNP much_Det wine_N)</CODE> <li>Afr: <I>baie wyn</I> <li>Bul: <I>много вино</I> <li>Cat: <I>molt vi</I> <li>Dan: <I>meget viner</I> <li>Dut: <I>veel wijn</I> <li>Eng: <I>much wine</I> <li>Fin: <I>paljon viini</I> <li>Fre: <I>beaucoup de vins</I> <li>Ger: <I>vieler Wein</I> <li>Hin: <I>बहुत शराब</I> <li>Ita: <I>molto vino</I> <li>Lav: <I>daudz vīns</I> <li>Nep: <I>निक्कै वाईन</I> <li>Nor: <I>mye viner</I> <li>Pes: <I>مقدار زیادی شراب ها</I> <li>Pnb: <I>بہت شراب</I> <li>Pol: <I>dużo win</I> <li>Ron: <I>// <li>Rus: //много вин</I> <li>Snd: <I>گھڻو شراب</I> <li>Spa: <I>mucho vino</I> <li>Swe: <I>mycket viner</I> <li>Tha: <I>เหล้าองุ่นหลายขวด</I> <li>Urd: <I>بہت شراب</I> </ul> </div> </div></TD>+</TR>+<TR>+<TD><CODE>somePl_Det</CODE></TD>+<TD><A HREF="#Det" TITLE="Det - determiner phrase">Det</A></TD>+<TD><div class=reveal> <I>some women</I> <div class=popup> <ul> <li>API: <CODE>mkUtt (mkNP somePl_Det woman_N)</CODE> <li>Afr: <I>sommige vroue</I> <li>Bul: <I>някои жени</I> <li>Cat: <I>algunes dones</I> <li>Dan: <I>nogle kvinder</I> <li>Dut: <I>sommige vrouwen</I> <li>Eng: <I>some women</I> <li>Fin: <I>jotkut naiset</I> <li>Fre: <I>quelques femmes</I> <li>Ger: <I>einige Frauen</I> <li>Hin: <I>कुछ औरतें</I> <li>Ita: <I>qualche donne</I> <li>Lav: <I>kādas sievietes</I> <li>Nep: <I>केही आईमाईहरु</I> <li>Nor: <I>noen kvinner</I> <li>Pes: <I>چند زن</I> <li>Pnb: <I>كچھ زنانیاں</I> <li>Pol: <I>pewne kobiety</I> <li>Ron: <I>unele femei</I> <li>Rus: <I>некоторые женщины</I> <li>Snd: <I>ڪجھ استریون</I> <li>Spa: <I>algunas mujeres</I> <li>Swe: <I>några kvinnor</I> <li>Tha: <I>หญิงบางคน</I> <li>Urd: <I>كچھ عورتیں</I> </ul> </div> </div></TD>+</TR>+<TR>+<TD><CODE>someSg_Det</CODE></TD>+<TD><A HREF="#Det" TITLE="Det - determiner phrase">Det</A></TD>+<TD><div class=reveal> <I>some wine</I> <div class=popup> <ul> <li>API: <CODE>mkUtt (mkNP someSg_Det wine_N)</CODE> <li>Afr: <I>sommige wyn</I> <li>Bul: <I>някое вино</I> <li>Cat: <I>algun vi</I> <li>Dan: <I>nogen vin</I> <li>Dut: <I>sommige wijn</I> <li>Eng: <I>some wine</I> <li>Fin: <I>joku viini</I> <li>Fre: <I>quelque vin</I> <li>Ger: <I>ein Wein</I> <li>Hin: <I>कुछ शराब</I> <li>Ita: <I>qualche vino</I> <li>Lav: <I>kāds vīns</I> <li>Nep: <I>कोही वाईन</I> <li>Nor: <I>noen vin</I> <li>Pes: <I>مقداری شراب</I> <li>Pnb: <I>كچھ شراب</I> <li>Pol: <I>pewne wino</I> <li>Ron: <I>nişte vin</I> <li>Rus: <I>некоторое вино</I> <li>Snd: <I>ڪجھ شراب</I> <li>Spa: <I>algun vino</I> <li>Swe: <I>något vin</I> <li>Tha: <I>เหล้าองุ่นบางขวด</I> <li>Urd: <I>كچھ شراب</I> </ul> </div> </div></TD>+</TR>+<TR>+<TD><CODE>that_Det</CODE></TD>+<TD><A HREF="#Det" TITLE="Det - determiner phrase">Det</A></TD>+<TD><div class=reveal> <I>that woman</I> <div class=popup> <ul> <li>API: <CODE>mkUtt (mkNP that_Det woman_N)</CODE> <li>Afr: <I>daardie vrou</I> <li>Bul: <I>онази жена</I> <li>Cat: <I>aquella dona</I> <li>Dan: <I>den der kvinde</I> <li>Dut: <I>die vrouw</I> <li>Eng: <I>that woman</I> <li>Fin: <I>tuo nainen</I> <li>Fre: <I>cette femme</I> <li>Ger: <I>jene Frau</I> <li>Hin: <I>वह औरत</I> <li>Ita: <I>quella donna</I> <li>Lav: <I>tā sieviete</I> <li>Nep: <I>त्ये आईमाई</I> <li>Nor: <I>den der kvinna</I> <li>Pes: <I>آن زن</I> <li>Pnb: <I>وہ زنانی</I> <li>Pol: <I>tamta kobieta</I> <li>Ron: <I>acea femeie</I> <li>Rus: <I>ту женщину</I> <li>Snd: <I>جیڪو استری</I> <li>Spa: <I>esa mujer</I> <li>Swe: <I>den där kvinnan</I> <li>Tha: <I>หญิงคนนั้น</I> <li>Urd: <I>وہ عورت</I> </ul> </div> </div></TD>+</TR>+<TR>+<TD><CODE>thePl_Det</CODE></TD>+<TD><A HREF="#Det" TITLE="Det - determiner phrase">Det</A></TD>+<TD><div class=reveal> <I>the houses</I> <div class=popup> <ul> <li>API: <CODE>mkUtt (mkNP thePl_Det house_N)</CODE> <li>Afr: <I>die huise</I> <li>Bul: <I>къщите</I> <li>Cat: <I>les cases</I> <li>Dan: <I>husene</I> <li>Dut: <I>de huizen</I> <li>Eng: <I>the houses</I> <li>Fin: <I>talot</I> <li>Fre: <I>les maisons</I> <li>Ger: <I>die Häuser</I> <li>Hin: <I>घर</I> <li>Ita: <I>le case</I> <li>Lav: <I>mājas</I> <li>Nep: <I>घरहरु</I> <li>Nor: <I>husa</I> <li>Pes: <I>خانه</I> <li>Pnb: <I>گھر</I> <li>Pol: <I>domy</I> <li>Ron: <I>casele</I> <li>Rus: <I>домов</I> <li>Snd: <I>گھر</I> <li>Spa: <I>las casas</I> <li>Swe: <I>husen</I> <li>Tha: <I>บ้าน</I> <li>Urd: <I>گھر</I> </ul> </div> </div></TD>+</TR>+<TR>+<TD><CODE>theSg_Det</CODE></TD>+<TD><A HREF="#Det" TITLE="Det - determiner phrase">Det</A></TD>+<TD><div class=reveal> <I>the house</I> <div class=popup> <ul> <li>API: <CODE>mkUtt (mkNP theSg_Det house_N)</CODE> <li>Afr: <I>die huis</I> <li>Bul: <I>къщата</I> <li>Cat: <I>la casa</I> <li>Dan: <I>huset</I> <li>Dut: <I>het huis</I> <li>Eng: <I>the house</I> <li>Fin: <I>talo</I> <li>Fre: <I>la maison</I> <li>Ger: <I>das Haus</I> <li>Hin: <I>घर</I> <li>Ita: <I>la casa</I> <li>Lav: <I>māja</I> <li>Nep: <I>घर</I> <li>Nor: <I>huset</I> <li>Pes: <I>خانه</I> <li>Pnb: <I>گھر</I> <li>Pol: <I>dom</I> <li>Ron: <I>casa</I> <li>Rus: <I>дом</I> <li>Snd: <I>گھر</I> <li>Spa: <I>la casa</I> <li>Swe: <I>huset</I> <li>Tha: <I>บ้าน</I> <li>Urd: <I>گھر</I> </ul> </div> </div></TD>+</TR>+<TR>+<TD><CODE>the_Det</CODE></TD>+<TD><A HREF="#Det" TITLE="Det - determiner phrase">Det</A></TD>+<TD><div class=reveal> <I>the house</I> <div class=popup> <ul> <li>API: <CODE>mkUtt (mkNP the_Det house_N)</CODE> <li>Afr: <I>die huis</I> <li>Bul: <I>къщата</I> <li>Cat: <I>la casa</I> <li>Dan: <I>huset</I> <li>Dut: <I>het huis</I> <li>Eng: <I>the house</I> <li>Fin: <I>talo</I> <li>Fre: <I>la maison</I> <li>Ger: <I>das Haus</I> <li>Hin: <I>घर</I> <li>Ita: <I>la casa</I> <li>Lav: <I>māja</I> <li>Nep: <I>घर</I> <li>Nor: <I>huset</I> <li>Pes: <I>خانه</I> <li>Pnb: <I>گھر</I> <li>Pol: <I>dom</I> <li>Ron: <I>casa</I> <li>Rus: <I>дом</I> <li>Snd: <I>گھر</I> <li>Spa: <I>la casa</I> <li>Swe: <I>huset</I> <li>Tha: <I>บ้าน</I> <li>Urd: <I>گھر</I> </ul> </div> </div></TD>+</TR>+<TR>+<TD><CODE>these_Det</CODE></TD>+<TD><A HREF="#Det" TITLE="Det - determiner phrase">Det</A></TD>+<TD><div class=reveal> <I>these women</I> <div class=popup> <ul> <li>API: <CODE>mkUtt (mkNP these_Det woman_N)</CODE> <li>Afr: <I>hierdie vroue</I> <li>Bul: <I>тези жени</I> <li>Cat: <I>aquestes dones</I> <li>Dan: <I>disse kvinder</I> <li>Dut: <I>deze vrouwen</I> <li>Eng: <I>these women</I> <li>Fin: <I>nämä naiset</I> <li>Fre: <I>ces femmes</I> <li>Ger: <I>diese Frauen</I> <li>Hin: <I>यह औरतें</I> <li>Ita: <I>queste donne</I> <li>Lav: <I>šīs sievietes</I> <li>Nep: <I>यी आईमाईहरु</I> <li>Nor: <I>disse kvinnene</I> <li>Pes: <I>این زن</I> <li>Pnb: <I>اے زنانیاں</I> <li>Pol: <I>te kobiety</I> <li>Ron: <I>aceste femei</I> <li>Rus: <I>эти женщин</I> <li>Snd: <I>ھی استریون</I> <li>Spa: <I>estas mujeres</I> <li>Swe: <I>de här kvinnorna</I> <li>Tha: <I>หญิงคนนี้</I> <li>Urd: <I>یہ عورتیں</I> </ul> </div> </div></TD>+</TR>+<TR>+<TD><CODE>this_Det</CODE></TD>+<TD><A HREF="#Det" TITLE="Det - determiner phrase">Det</A></TD>+<TD><div class=reveal> <I>this woman</I> <div class=popup> <ul> <li>API: <CODE>mkUtt (mkNP this_Det woman_N)</CODE> <li>Afr: <I>hierdie vrou</I> <li>Bul: <I>тази жена</I> <li>Cat: <I>aquesta dona</I> <li>Dan: <I>denne kvinde</I> <li>Dut: <I>deze vrouw</I> <li>Eng: <I>this woman</I> <li>Fin: <I>tämä nainen</I> <li>Fre: <I>cette femme</I> <li>Ger: <I>diese Frau</I> <li>Hin: <I>यह औरत</I> <li>Ita: <I>questa donna</I> <li>Lav: <I>šī sieviete</I> <li>Nep: <I>यो आईमाई</I> <li>Nor: <I>denne kvinna</I> <li>Pes: <I>این زن</I> <li>Pnb: <I>اے زنانی</I> <li>Pol: <I>ta kobieta</I> <li>Ron: <I>această femeie</I> <li>Rus: <I>эту женщину</I> <li>Snd: <I>ھی استری</I> <li>Spa: <I>esta mujer</I> <li>Swe: <I>den här kvinnan</I> <li>Tha: <I>หญิงคนนี้</I> <li>Urd: <I>یہ عورت</I> </ul> </div> </div></TD>+</TR>+<TR>+<TD><CODE>those_Det</CODE></TD>+<TD><A HREF="#Det" TITLE="Det - determiner phrase">Det</A></TD>+<TD><div class=reveal> <I>those women</I> <div class=popup> <ul> <li>API: <CODE>mkUtt (mkNP those_Det woman_N)</CODE> <li>Afr: <I>daardie vroue</I> <li>Bul: <I>онези жени</I> <li>Cat: <I>aquelles dones</I> <li>Dan: <I>de der kvinder</I> <li>Dut: <I>die vrouwen</I> <li>Eng: <I>those women</I> <li>Fin: <I>nuo naiset</I> <li>Fre: <I>ces femmes</I> <li>Ger: <I>jene Frauen</I> <li>Hin: <I>वह औरतें</I> <li>Ita: <I>quelle donne</I> <li>Lav: <I>tās sievietes</I> <li>Nep: <I>यिनीहरु आईमाईहरु</I> <li>Nor: <I>de der kvinnene</I> <li>Pes: <I>آن زن</I> <li>Pnb: <I>وہ زنانیاں</I> <li>Pol: <I>tamte kobiety</I> <li>Ron: <I>acele femei</I> <li>Rus: <I>те женщин</I> <li>Snd: <I>جیڪو استریون</I> <li>Spa: <I>esas mujeres</I> <li>Swe: <I>de där kvinnorna</I> <li>Tha: <I>หญิงคนนั้น</I> <li>Urd: <I>وہ عورتیں</I> </ul> </div> </div></TD>+</TR>+</TABLE>++<A NAME="Dig"></A>+<H2>Dig</H2>++<TABLE BORDER="1" CELLPADDING="4">+<TR>+<TH>Function</TH>+<TH>Type</TH>+<TH COLSPAN="2">Example</TH>+</TR>+<TR>+<TD><CODE>n0_Dig</CODE></TD>+<TD><A HREF="#Dig">Dig</A></TD>+<TD><I>0</I></TD>+</TR>+<TR>+<TD><CODE>n1_Dig</CODE></TD>+<TD><A HREF="#Dig">Dig</A></TD>+<TD><I>1</I></TD>+</TR>+<TR>+<TD><CODE>n2_Dig</CODE></TD>+<TD><A HREF="#Dig">Dig</A></TD>+<TD><I>2</I></TD>+</TR>+<TR>+<TD><CODE>n3_Dig</CODE></TD>+<TD><A HREF="#Dig">Dig</A></TD>+<TD><I>3</I></TD>+</TR>+<TR>+<TD><CODE>n4_Dig</CODE></TD>+<TD><A HREF="#Dig">Dig</A></TD>+<TD><I>4</I></TD>+</TR>+<TR>+<TD><CODE>n5_Dig</CODE></TD>+<TD><A HREF="#Dig">Dig</A></TD>+<TD><I>5</I></TD>+</TR>+<TR>+<TD><CODE>n6_Dig</CODE></TD>+<TD><A HREF="#Dig">Dig</A></TD>+<TD><I>6</I></TD>+</TR>+<TR>+<TD><CODE>n7_Dig</CODE></TD>+<TD><A HREF="#Dig">Dig</A></TD>+<TD><I>7</I></TD>+</TR>+<TR>+<TD><CODE>n8_Dig</CODE></TD>+<TD><A HREF="#Dig">Dig</A></TD>+<TD><I>8</I></TD>+</TR>+<TR>+<TD><CODE>n9_Dig</CODE></TD>+<TD><A HREF="#Dig">Dig</A></TD>+<TD><I>9</I></TD>+</TR>+</TABLE>++<A NAME="Digits"></A>+<H2>Digits - cardinal or ordinal in digits</H2>++<TABLE BORDER="1" CELLPADDING="4">+<TR>+<TH>Function</TH>+<TH>Type</TH>+<TH COLSPAN="2">Example</TH>+</TR>+<TR>+<TD><CODE>mkDigits</CODE></TD>+<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#Digits" TITLE="Digits - cardinal or ordinal in digits">Digits</A></TD>+<TD><I>35 (from string "35"; ; range 1-9999999)</I></TD>+</TR>+<TR>+<TD><CODE>mkDigits</CODE></TD>+<TD><A HREF="#Dig">Dig</A> <CODE>-></CODE> <A HREF="#Digits" TITLE="Digits - cardinal or ordinal in digits">Digits</A></TD>+<TD><div class=reveal> <I>4</I> <div class=popup> <ul> <li>API: <CODE>mkDigits n4_Dig</CODE> <li>Afr: <I>4</I> <li>Bul: <I>4</I> <li>Cat: <I>4</I> <li>Dan: <I>4</I> <li>Dut: <I>4</I> <li>Eng: <I>4</I> <li>Fin: <I>4</I> <li>Fre: <I>4</I> <li>Ger: <I>4</I> <li>Hin: <I>४</I> <li>Ita: <I>4</I> <li>Lav: <I>4</I> <li>Nep: <I>४</I> <li>Nor: <I>4</I> <li>Pes: <I>4</I> <li>Pnb: <I>۴</I> <li>Pol: <I>4</I> <li>Ron: <I>4</I> <li>Rus: <I>4</I> <li>Snd: <I>۴</I> <li>Spa: <I>4</I> <li>Swe: <I>4</I> <li>Tha: <I>๔</I> <li>Urd: <I>۴</I> </ul> </div> </div></TD>+</TR>+<TR>+<TD><CODE>mkDigits</CODE></TD>+<TD><A HREF="#Dig">Dig</A> <CODE>-></CODE> <A HREF="#Digits" TITLE="Digits - cardinal or ordinal in digits">Digits</A> <CODE>-></CODE> <A HREF="#Digits" TITLE="Digits - cardinal or ordinal in digits">Digits</A></TD>+<TD><div class=reveal> <I>1 , 2 3 3 , 4 8 6</I> <div class=popup> <ul> <li>API: <CODE>mkDigits n1_Dig (mkDigits n2_Dig (mkDigits n3_Dig (mkDigits n3_Dig (mkDigits n4_Dig (mkDigits n8_Dig (mkDigits n6_Dig))))))</CODE> <li>Afr: <I>1 2 3 3 4 8 6</I> <li>Bul: <I>1 , 2 3 3 , 4 8 6</I> <li>Cat: <I>1 2 3 3 4 8 6</I> <li>Dan: <I>1 2 3 3 4 8 6</I> <li>Dut: <I>1 2 3 3 4 8 6</I> <li>Eng: <I>1 , 2 3 3 , 4 8 6</I> <li>Fin: <I>1 2 3 3 4 8 6</I> <li>Fre: <I>1 2 3 3 4 8 6</I> <li>Ger: <I>1 2 3 3 4 8 6</I> <li>Hin: <I>६८४३३२१</I> <li>Ita: <I>1 2 3 3 4 8 6</I> <li>Lav: <I>1 2 3 3 4 8 6</I> <li>Nep: <I>१२३३४८६</I> <li>Nor: <I>1 2 3 3 4 8 6</I> <li>Pes: <I>1 2 3 3 4 8 6</I> <li>Pnb: <I>۶۸۴۳۳۲۱</I> <li>Pol: <I>1 2 3 3 4 8 6</I> <li>Ron: <I>1 2 3 3 4 8 6</I> <li>Rus: <I>1 2 3 3 4 8 6</I> <li>Snd: <I>۶۸۴۳۳۲۱</I> <li>Spa: <I>1 2 3 3 4 8 6</I> <li>Swe: <I>1 2 3 3 4 8 6</I> <li>Tha: <I>๑๒๓๓๔๘๖</I> <li>Urd: <I>۶۸۴۳۳۲۱</I> </ul> </div> </div></TD>+</TR>+</TABLE>++<A NAME="IAdv"></A>+<H2>IAdv - interrogative adverb</H2>++<TABLE BORDER="1" CELLPADDING="4">+<TR>+<TH>Function</TH>+<TH>Type</TH>+<TH COLSPAN="2">Example</TH>+</TR>+<TR>+<TD><CODE>how8much_IAdv</CODE></TD>+<TD><A HREF="#IAdv" TITLE="IAdv - interrogative adverb">IAdv</A></TD>+<TD><div class=reveal> <I>how much</I> <div class=popup> <ul> <li>API: <CODE>mkUtt how8much_IAdv</CODE> <li>Afr: <I>hoeveel</I> <li>Bul: <I>колко</I> <li>Cat: <I>quant</I> <li>Dan: <I>constant not found: how8much_IAdv</I> <li>Dut: <I>hoeveel</I> <li>Eng: <I>how much</I> <li>Fin: <I>kuinka paljon</I> <li>Fre: <I>combien</I> <li>Ger: <I>wieviel</I> <li>Hin: <I>कितना</I> <li>Ita: <I>quanto</I> <li>Lav: <I>cik daudz</I> <li>Nep: <I>कती</I> <li>Nor: <I>constant not found: how8much_IAdv</I> <li>Pes: <I>چقدر</I> <li>Pnb: <I>كینا</I> <li>Pol: <I>constant not found: how8much_IAdv</I> <li>Ron: <I>cât</I> <li>Rus: <I>сколько</I> <li>Snd: <I>ڪیترا</I> <li>Spa: <I>constant not found: how8much_IAdv</I> <li>Swe: <I>hur mycket</I> <li>Tha: <I>เท่าไร</I> <li>Urd: <I>كتنا</I> </ul> </div> </div></TD>+</TR>+<TR>+<TD><CODE>how_IAdv</CODE></TD>+<TD><A HREF="#IAdv" TITLE="IAdv - interrogative adverb">IAdv</A></TD>+<TD><div class=reveal> <I>how</I> <div class=popup> <ul> <li>API: <CODE>mkUtt how_IAdv</CODE> <li>Afr: <I>hoe</I> <li>Bul: <I>как</I> <li>Cat: <I>com</I> <li>Dan: <I>hvor</I> <li>Dut: <I>hoe</I> <li>Eng: <I>how</I> <li>Fin: <I>miten</I> <li>Fre: <I>comment</I> <li>Ger: <I>wie</I> <li>Hin: <I>कैसे</I> <li>Ita: <I>come</I> <li>Lav: <I>kā</I> <li>Nep: <I>कसरी</I> <li>Nor: <I>hvor</I> <li>Pes: <I>چطور</I> <li>Pnb: <I>كسراں</I> <li>Pol: <I>jak</I> <li>Ron: <I>cum</I> <li>Rus: <I>как</I> <li>Snd: <I>ڪ۶ین</I> <li>Spa: <I>como</I> <li>Swe: <I>hur</I> <li>Tha: <I>อย่างไร</I> <li>Urd: <I>كیسے</I> </ul> </div> </div></TD>+</TR>+<TR>+<TD><CODE>mkIAdv</CODE></TD>+<TD><A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A> <CODE>-></CODE> <A HREF="#IP" TITLE="IP - interrogative pronoun">IP</A> <CODE>-></CODE> <A HREF="#IAdv" TITLE="IAdv - interrogative adverb">IAdv</A></TD>+<TD><div class=reveal> <I>in which city</I> <div class=popup> <ul> <li>API: <CODE>mkIAdv in_Prep (mkIP which_IQuant city_N)</CODE> <li>Afr: <I>in watter stad</I> <li>Bul: <I>в кой град</I> <li>Cat: <I>en quin ciutat</I> <li>Dan: <I>i hvilken by</I> <li>Dut: <I>in welke stad</I> <li>Eng: <I>in which city</I> <li>Fin: <I>missä kaupungissa</I> <li>Fre: <I>dans quelle ville</I> <li>Ger: <I>in welcher Stadt</I> <li>Hin: <I>कौन से शहर में</I> <li>Ita: <I>in quale città</I> <li>Lav: <I>kura pilsētā</I> <li>Nep: <I>कुन शहर मा</I> <li>Nor: <I>i hvilken by</I> <li>Pes: <I>در کدام شهر</I> <li>Pnb: <I>{s : Str = "كیڑا" ++ "شہر" ++ "وچ"; lock_IAdv : {} = <>} / {s : Str</I> <li>Pol: <I>w którym mieście</I> <li>Ron: <I>în care oraş</I> <li>Rus: <I>в который город</I> <li>Snd: <I>constant not found: city_N</I> <li>Spa: <I>en qué ciudad</I> <li>Swe: <I>i vilken stad</I> <li>Tha: <I>ในเมืองเมืองไหน</I> <li>Urd: <I>كون سے شہر میں</I> </ul> </div> </div></TD>+</TR>+<TR>+<TD><CODE>mkIAdv</CODE></TD>+<TD><A HREF="#IAdv" TITLE="IAdv - interrogative adverb">IAdv</A> <CODE>-></CODE> <A HREF="#Adv" TITLE="Adv - verb-phrase-modifying adverb">Adv</A> <CODE>-></CODE> <A HREF="#IAdv" TITLE="IAdv - interrogative adverb">IAdv</A></TD>+<TD><div class=reveal> <I>where in Paris</I> <div class=popup> <ul> <li>API: <CODE>mkIAdv where_IAdv (mkAdv in_Prep (mkNP paris_PN))</CODE> <li>Afr: <I>waar in Parys</I> <li>Bul: <I>къде в Париж</I> <li>Cat: <I>on en Paris</I> <li>Dan: <I>hvor i Paris</I> <li>Dut: <I>waar in Parijs</I> <li>Eng: <I>where in Paris</I> <li>Fin: <I>missä Pariisissa</I> <li>Fre: <I>où dans Paris</I> <li>Ger: <I>wo in Paris</I> <li>Hin: <I>कहाँ पैरिस में</I> <li>Ita: <I>dove in Parigi</I> <li>Lav: <I>kur Parīzē</I> <li>Nep: <I>कहाँ पेरिस मा</I> <li>Nor: <I>hvor i Paris</I> <li>Pes: <I>در پاریس کجا</I> <li>Pnb: <I>كتھے پیرس وچ</I> <li>Pol: <I>gdzie w Paryżu</I> <li>Ron: <I>unde în Paris</I> <li>Rus: <I>где в Париже</I> <li>Snd: <I>constant not found: paris_PN</I> <li>Spa: <I>donde en Paris</I> <li>Swe: <I>var i Paris</I> <li>Tha: <I>ที่ไหนในปารีส</I> <li>Urd: <I>كہاں پیرس میں</I> </ul> </div> </div></TD>+</TR>+<TR>+<TD><CODE>when_IAdv</CODE></TD>+<TD><A HREF="#IAdv" TITLE="IAdv - interrogative adverb">IAdv</A></TD>+<TD><div class=reveal> <I>when</I> <div class=popup> <ul> <li>API: <CODE>mkUtt when_IAdv</CODE> <li>Afr: <I>wanneer</I> <li>Bul: <I>кога</I> <li>Cat: <I>quan</I> <li>Dan: <I>hvornår</I> <li>Dut: <I>wanneer</I> <li>Eng: <I>when</I> <li>Fin: <I>milloin</I> <li>Fre: <I>quand</I> <li>Ger: <I>wann</I> <li>Hin: <I>कब</I> <li>Ita: <I>quando</I> <li>Lav: <I>kad</I> <li>Nep: <I>कहिले</I> <li>Nor: <I>når</I> <li>Pes: <I>کی</I> <li>Pnb: <I>كدوں</I> <li>Pol: <I>kiedy</I> <li>Ron: <I>când</I> <li>Rus: <I>когда</I> <li>Snd: <I>ڪڏھن</I> <li>Spa: <I>cuando</I> <li>Swe: <I>när</I> <li>Tha: <I>เมื่อไร</I> <li>Urd: <I>كب</I> </ul> </div> </div></TD>+</TR>+<TR>+<TD><CODE>where_IAdv</CODE></TD>+<TD><A HREF="#IAdv" TITLE="IAdv - interrogative adverb">IAdv</A></TD>+<TD><div class=reveal> <I>where</I> <div class=popup> <ul> <li>API: <CODE>mkUtt where_IAdv</CODE> <li>Afr: <I>waar</I> <li>Bul: <I>къде</I> <li>Cat: <I>on</I> <li>Dan: <I>hvor</I> <li>Dut: <I>waar</I> <li>Eng: <I>where</I> <li>Fin: <I>missä</I> <li>Fre: <I>où</I> <li>Ger: <I>wo</I> <li>Hin: <I>कहाँ</I> <li>Ita: <I>dove</I> <li>Lav: <I>kur</I> <li>Nep: <I>कहाँ</I> <li>Nor: <I>hvor</I> <li>Pes: <I>کجا</I> <li>Pnb: <I>كتھے</I> <li>Pol: <I>gdzie</I> <li>Ron: <I>unde</I> <li>Rus: <I>где</I> <li>Snd: <I>ڪٿی</I> <li>Spa: <I>donde</I> <li>Swe: <I>var</I> <li>Tha: <I>ที่ไหน</I> <li>Urd: <I>كہاں</I> </ul> </div> </div></TD>+</TR>+<TR>+<TD><CODE>why_IAdv</CODE></TD>+<TD><A HREF="#IAdv" TITLE="IAdv - interrogative adverb">IAdv</A></TD>+<TD><div class=reveal> <I>why</I> <div class=popup> <ul> <li>API: <CODE>mkUtt why_IAdv</CODE> <li>Afr: <I>waarom</I> <li>Bul: <I>защо</I> <li>Cat: <I>per quË</I> <li>Dan: <I>hvorfor</I> <li>Dut: <I>waarom</I> <li>Eng: <I>why</I> <li>Fin: <I>miksi</I> <li>Fre: <I>pourquoi</I> <li>Ger: <I>warum</I> <li>Hin: <I>क्यों</I> <li>Ita: <I>perché</I> <li>Lav: <I>kāpēc</I> <li>Nep: <I>किन</I> <li>Nor: <I>hvorfor</I> <li>Pes: <I>چرا</I> <li>Pnb: <I>كیوں</I> <li>Pol: <I>dlaczego</I> <li>Ron: <I>de ce</I> <li>Rus: <I>почему</I> <li>Snd: <I>ڇو</I> <li>Spa: <I>porqué</I> <li>Swe: <I>varför</I> <li>Tha: <I>ทำไม</I> <li>Urd: <I>كیوں</I> </ul> </div> </div></TD>+</TR>+</TABLE>++<A NAME="IComp"></A>+<H2>IComp - interrogative complement of copula</H2>++<TABLE BORDER="1" CELLPADDING="4">+<TR>+<TH>Function</TH>+<TH>Type</TH>+<TH COLSPAN="2">Example</TH>+</TR>+<TR>+<TD><CODE>mkIComp</CODE></TD>+<TD><A HREF="#IAdv" TITLE="IAdv - interrogative adverb">IAdv</A> <CODE>-></CODE> <A HREF="#IComp" TITLE="IComp - interrogative complement of copula">IComp</A></TD>+<TD><I>where (is it)</I></TD>+</TR>+<TR>+<TD><CODE>mkIComp</CODE></TD>+<TD><A HREF="#IP" TITLE="IP - interrogative pronoun">IP</A> <CODE>-></CODE> <A HREF="#IComp" TITLE="IComp - interrogative complement of copula">IComp</A></TD>+<TD><I>who (is it)</I></TD>+</TR>+</TABLE>++<A NAME="IDet"></A>+<H2>IDet - interrogative determiner</H2>++<TABLE BORDER="1" CELLPADDING="4">+<TR>+<TH>Function</TH>+<TH>Type</TH>+<TH COLSPAN="2">Example</TH>+</TR>+<TR>+<TD><CODE>how8many_IDet</CODE></TD>+<TD><A HREF="#IDet" TITLE="IDet - interrogative determiner">IDet</A></TD>+<TD><div class=reveal> <I>how many houses</I> <div class=popup> <ul> <li>API: <CODE>mkUtt (mkIP how8many_IDet house_N)</CODE> <li>Afr: <I>hoeveel huise</I> <li>Bul: <I>колко къщи</I> <li>Cat: <I>quantes cases</I> <li>Dan: <I>hur mange huse</I> <li>Dut: <I>hoeveel huizen</I> <li>Eng: <I>how many houses</I> <li>Fin: <I>kuinka moni talo</I> <li>Fre: <I>combien de maisons</I> <li>Ger: <I>wieviele Häuser</I> <li>Hin: <I>कितने घर</I> <li>Ita: <I>quante case</I> <li>Lav: <I>cik daudz māja</I> <li>Nep: <I>कती वटा घरहरु</I> <li>Nor: <I>hur mange hus</I> <li>Pes: <I>چند خانه</I> <li>Pnb: <I>كینے گھر</I> <li>Pol: <I>ile domów</I> <li>Ron: <I>câte case</I> <li>Rus: <I>скольки домов</I> <li>Snd: <I>ڪیترا گھر</I> <li>Spa: <I>cuantas casas</I> <li>Swe: <I>hur många hus</I> <li>Tha: <I>บ้านกี่หลัง</I> <li>Urd: <I>كتنے گھر</I> </ul> </div> </div></TD>+</TR>+<TR>+<TD><CODE>mkIDet</CODE></TD>+<TD><A HREF="#IQuant">IQuant</A> <CODE>-></CODE> <A HREF="#Num" TITLE="Num - number determining element">Num</A> <CODE>-></CODE> <A HREF="#IDet" TITLE="IDet - interrogative determiner">IDet</A></TD>+<TD><div class=reveal> <I>which houses</I> <div class=popup> <ul> <li>API: <CODE>mkIP (mkIDet which_IQuant pluralNum) house_N</CODE> <li>Afr: <I>watter huise</I> <li>Bul: <I>кои къщи</I> <li>Cat: <I>quins cases</I> <li>Dan: <I>hvilke huse</I> <li>Dut: <I>welke huizen</I> <li>Eng: <I>which houses</I> <li>Fin: <I>mitkä talot</I> <li>Fre: <I>quelles maisons</I> <li>Ger: <I>welche Häuser</I> <li>Hin: <I>कौन से घर</I> <li>Ita: <I>quali case</I> <li>Lav: <I>kuras mājas</I> <li>Nep: <I>कुन घरहरु</I> <li>Nor: <I>hvilke hus</I> <li>Pes: <I>کدام خانه</I> <li>Pnb: <I>كیڑے گھر</I> <li>Pol: <I>których domów</I> <li>Ron: <I>care case</I> <li>Rus: <I>которые домы</I> <li>Snd: <I>جیڪا گھر</I> <li>Spa: <I>qué casas</I> <li>Swe: <I>vilka hus</I> <li>Tha: <I>บ้านหลังไหน</I> <li>Urd: <I>كون سے گھر</I> </ul> </div> </div></TD>+</TR>+<TR>+<TD><CODE>mkIDet</CODE></TD>+<TD><A HREF="#IQuant">IQuant</A> <CODE>-></CODE> <A HREF="#IDet" TITLE="IDet - interrogative determiner">IDet</A></TD>+<TD><div class=reveal> <I>which house</I> <div class=popup> <ul> <li>API: <CODE>mkIP (mkIDet which_IQuant) house_N</CODE> <li>Afr: <I>watter huis</I> <li>Bul: <I>коя къща</I> <li>Cat: <I>quin casa</I> <li>Dan: <I>hvilket hus</I> <li>Dut: <I>welk huis</I> <li>Eng: <I>which house</I> <li>Fin: <I>mikä talo</I> <li>Fre: <I>quelle maison</I> <li>Ger: <I>welches Haus</I> <li>Hin: <I>कौन सा घर</I> <li>Ita: <I>quale casa</I> <li>Lav: <I>kura māja</I> <li>Nep: <I>कुन घर</I> <li>Nor: <I>hvilket hus</I> <li>Pes: <I>کدام خانه</I> <li>Pnb: <I>{s : ResPnb.Case => Str</I> <li>Pol: <I>którego domu</I> <li>Ron: <I>care casă</I> <li>Rus: <I>который дом</I> <li>Snd: <I>جیڪو گھر</I> <li>Spa: <I>qué casa</I> <li>Swe: <I>vilket hus</I> <li>Tha: <I>บ้านหลังไหน</I> <li>Urd: <I>كون سا گھر</I> </ul> </div> </div></TD>+</TR>+<TR>+<TD><CODE>whichPl_IDet</CODE></TD>+<TD><A HREF="#IDet" TITLE="IDet - interrogative determiner">IDet</A></TD>+<TD><div class=reveal> <I>which houses</I> <div class=popup> <ul> <li>API: <CODE>mkIP whichPl_IDet house_N</CODE> <li>Afr: <I>watter huise</I> <li>Bul: <I>кои къщи</I> <li>Cat: <I>quins cases</I> <li>Dan: <I>hvilke huse</I> <li>Dut: <I>welke huizen</I> <li>Eng: <I>which houses</I> <li>Fin: <I>mitkä talot</I> <li>Fre: <I>quelles maisons</I> <li>Ger: <I>welche Häuser</I> <li>Hin: <I>कौन से घर</I> <li>Ita: <I>quali case</I> <li>Lav: <I>kuras mājas</I> <li>Nep: <I>कुन घरहरु</I> <li>Nor: <I>hvilke hus</I> <li>Pes: <I>کدام خانه</I> <li>Pnb: <I>كیڑے گھر</I> <li>Pol: <I>których domów</I> <li>Ron: <I>care case</I> <li>Rus: <I>которые домы</I> <li>Snd: <I>جیڪا گھر</I> <li>Spa: <I>qué casas</I> <li>Swe: <I>vilka hus</I> <li>Tha: <I>บ้านหลังไหน</I> <li>Urd: <I>كون سے گھر</I> </ul> </div> </div></TD>+</TR>+<TR>+<TD><CODE>which_IDet</CODE></TD>+<TD><A HREF="#IDet" TITLE="IDet - interrogative determiner">IDet</A></TD>+<TD><div class=reveal> <I>which house</I> <div class=popup> <ul> <li>API: <CODE>mkIP which_IDet house_N</CODE> <li>Afr: <I>watter huis</I> <li>Bul: <I>коя къща</I> <li>Cat: <I>quin casa</I> <li>Dan: <I>hvilket hus</I> <li>Dut: <I>welk huis</I> <li>Eng: <I>which house</I> <li>Fin: <I>mikä talo</I> <li>Fre: <I>quelle maison</I> <li>Ger: <I>welches Haus</I> <li>Hin: <I>कौन सा घर</I> <li>Ita: <I>quale casa</I> <li>Lav: <I>kura māja</I> <li>Nep: <I>कुन घर</I> <li>Nor: <I>hvilket hus</I> <li>Pes: <I>کدام خانه</I> <li>Pnb: <I>{s : ResPnb.Case => Str</I> <li>Pol: <I>którego domu</I> <li>Ron: <I>care casă</I> <li>Rus: <I>который дом</I> <li>Snd: <I>جیڪو گھر</I> <li>Spa: <I>qué casa</I> <li>Swe: <I>vilket hus</I> <li>Tha: <I>บ้านหลังไหน</I> <li>Urd: <I>كون سا گھر</I> </ul> </div> </div></TD>+</TR>+</TABLE>++<A NAME="IP"></A>+<H2>IP - interrogative pronoun</H2>++<TABLE BORDER="1" CELLPADDING="4">+<TR>+<TH>Function</TH>+<TH>Type</TH>+<TH COLSPAN="2">Example</TH>+</TR>+<TR>+<TD><CODE>mkIP</CODE></TD>+<TD><A HREF="#IDet" TITLE="IDet - interrogative determiner">IDet</A> <CODE>-></CODE> <A HREF="#CN" TITLE="CN - common noun (without determiner)">CN</A> <CODE>-></CODE> <A HREF="#IP" TITLE="IP - interrogative pronoun">IP</A></TD>+<TD><div class=reveal> <I>which five big cities</I> <div class=popup> <ul> <li>API: <CODE>mkIP (mkIDet which_IQuant (mkNum (mkNumeral n5_Unit))) (mkCN big_A city_N)</CODE> <li>Afr: <I>watter vyf groot stede</I> <li>Bul: <I>кои пет големи града</I> <li>Cat: <I>quins cinc ciutats groses</I> <li>Dan: <I>hvilke fem store byer</I> <li>Dut: <I>welke vijf grote stadden</I> <li>Eng: <I>which five big cities</I> <li>Fin: <I>mitkä viisi suurta kaupunkia</I> <li>Fre: <I>quelles cinq grandes villes</I> <li>Ger: <I>welche fünf großen Städte</I> <li>Hin: <I>कौन से पांच बड़े शहर</I> <li>Ita: <I>quali cinque grandi città</I> <li>Lav: <I>kuras piecas lielās pilsētas</I> <li>Nep: <I>कुन पाँच ठुला शहरहरु</I> <li>Nor: <I>hvilke fem store byer</I> <li>Pes: <I>کدام پنج شهر بزرگ</I> <li>Pnb: <I>كیڑے پنج وڈے شہر</I> <li>Pol: <I>których pięciu dużych miast</I> <li>Ron: <I>care cinci oraşe mari</I> <li>Rus: <I>которые пять большие городы</I> <li>Snd: <I>constant not found: city_N</I> <li>Spa: <I>qué cinco grandes ciudades</I> <li>Swe: <I>vilka fem stora städer</I> <li>Tha: <I>เมืองใหญ่ห้าเมืองไหน</I> <li>Urd: <I>كون سے پانچ بڑے شہر</I> </ul> </div> </div></TD>+</TR>+<TR>+<TD><CODE>mkIP</CODE></TD>+<TD><A HREF="#IDet" TITLE="IDet - interrogative determiner">IDet</A> <CODE>-></CODE> <A HREF="#N" TITLE="N - common noun">N</A> <CODE>-></CODE> <A HREF="#IP" TITLE="IP - interrogative pronoun">IP</A></TD>+<TD><div class=reveal> <I>which five cities</I> <div class=popup> <ul> <li>API: <CODE>mkIP (mkIDet which_IQuant (mkNum (mkNumeral n5_Unit))) city_N</CODE> <li>Afr: <I>watter vyf stede</I> <li>Bul: <I>кои пет града</I> <li>Cat: <I>quins cinc ciutats</I> <li>Dan: <I>hvilke fem byer</I> <li>Dut: <I>welke vijf stadden</I> <li>Eng: <I>which five cities</I> <li>Fin: <I>mitkä viisi kaupunkia</I> <li>Fre: <I>quelles cinq villes</I> <li>Ger: <I>welche fünf Städte</I> <li>Hin: <I>कौन से पांच शहर</I> <li>Ita: <I>quali cinque città</I> <li>Lav: <I>kuras piecas pilsētas</I> <li>Nep: <I>कुन पाँच शहरहरु</I> <li>Nor: <I>hvilke fem byer</I> <li>Pes: <I>کدام پنج شهر</I> <li>Pnb: <I>كیڑے پنج شہر</I> <li>Pol: <I>których pięciu miast</I> <li>Ron: <I>care cinci oraşe</I> <li>Rus: <I>которые пять городы</I> <li>Snd: <I>constant not found: city_N</I> <li>Spa: <I>qué cinco ciudades</I> <li>Swe: <I>vilka fem städer</I> <li>Tha: <I>เมืองห้าเมืองไหน</I> <li>Urd: <I>كون سے پانچ شہر</I> </ul> </div> </div></TD>+</TR>+<TR>+<TD><CODE>mkIP</CODE></TD>+<TD><A HREF="#IDet" TITLE="IDet - interrogative determiner">IDet</A> <CODE>-></CODE> <A HREF="#IP" TITLE="IP - interrogative pronoun">IP</A></TD>+<TD><div class=reveal> <I>which five</I> <div class=popup> <ul> <li>API: <CODE>mkIP (mkIDet which_IQuant (mkNum (mkNumeral n5_Unit)))</CODE> <li>Afr: <I>watter vyf</I> <li>Bul: <I>кои пет</I> <li>Cat: <I>quins cinc</I> <li>Dan: <I>hvilke fem</I> <li>Dut: <I>welke vijf</I> <li>Eng: <I>which five</I> <li>Fin: <I>mitkä viisi</I> <li>Fre: <I>quels cinq</I> <li>Ger: <I>welche fünf</I> <li>Hin: <I>कौन से पांच</I> <li>Ita: <I>quali cinque</I> <li>Lav: <I>kuri pieci / kuras piecas</I> <li>Nep: <I>कुन पाँच</I> <li>Nor: <I>hvilke fem</I> <li>Pes: <I>کدام پنج</I> <li>Pnb: <I>كیڑے پنج</I> <li>Pol: <I>których pięciu</I> <li>Ron: <I>care cinci</I> <li>Rus: <I>которые пять</I> <li>Snd: <I>جیڪا پنج</I> <li>Spa: <I>qué cinco</I> <li>Swe: <I>vilka fem</I> <li>Tha: <I>ห้าไหน</I> <li>Urd: <I>كون سے پانچ</I> </ul> </div> </div></TD>+</TR>+<TR>+<TD><CODE>mkIP</CODE></TD>+<TD><A HREF="#IQuant">IQuant</A> <CODE>-></CODE> <A HREF="#CN" TITLE="CN - common noun (without determiner)">CN</A> <CODE>-></CODE> <A HREF="#IP" TITLE="IP - interrogative pronoun">IP</A></TD>+<TD><div class=reveal> <I>which big city</I> <div class=popup> <ul> <li>API: <CODE>mkIP which_IQuant (mkCN big_A city_N)</CODE> <li>Afr: <I>watter groot stad</I> <li>Bul: <I>кой голям град</I> <li>Cat: <I>quin ciutat grosa</I> <li>Dan: <I>hvilken stor by</I> <li>Dut: <I>welke grote stad</I> <li>Eng: <I>which big city</I> <li>Fin: <I>mikä suuri kaupunki</I> <li>Fre: <I>quelle grande ville</I> <li>Ger: <I>welche große Stadt</I> <li>Hin: <I>कौन सा बड़ा शहर</I> <li>Ita: <I>quale grande città</I> <li>Lav: <I>kura lielā pilsēta</I> <li>Nep: <I>कुन ठुलो शहर</I> <li>Nor: <I>hvilken stor by</I> <li>Pes: <I>کدام شهر بزرگ</I> <li>Pnb: <I>{s : ResPnb.Case => Str</I> <li>Pol: <I>którego dużego miasta</I> <li>Ron: <I>care oraş mare</I> <li>Rus: <I>который большой город</I> <li>Snd: <I>constant not found: city_N</I> <li>Spa: <I>qué grande ciudad</I> <li>Swe: <I>vilken stor stad</I> <li>Tha: <I>เมืองใหญ่เมืองไหน</I> <li>Urd: <I>كون سا بڑا شہر</I> </ul> </div> </div></TD>+</TR>+<TR>+<TD><CODE>mkIP</CODE></TD>+<TD><A HREF="#IQuant">IQuant</A> <CODE>-></CODE> <A HREF="#Num" TITLE="Num - number determining element">Num</A> <CODE>-></CODE> <A HREF="#CN" TITLE="CN - common noun (without determiner)">CN</A> <CODE>-></CODE> <A HREF="#IP" TITLE="IP - interrogative pronoun">IP</A></TD>+<TD><div class=reveal> <I>which five big cities</I> <div class=popup> <ul> <li>API: <CODE>mkIP which_IQuant (mkNum (mkNumeral n5_Unit)) (mkCN big_A city_N)</CODE> <li>Afr: <I>watter vyf groot stede</I> <li>Bul: <I>кои пет големи града</I> <li>Cat: <I>quins cinc ciutats groses</I> <li>Dan: <I>hvilke fem store byer</I> <li>Dut: <I>welke vijf grote stadden</I> <li>Eng: <I>which five big cities</I> <li>Fin: <I>mitkä viisi suurta kaupunkia</I> <li>Fre: <I>quelles cinq grandes villes</I> <li>Ger: <I>welche fünf großen Städte</I> <li>Hin: <I>कौन से पांच बड़े शहर</I> <li>Ita: <I>quali cinque grandi città</I> <li>Lav: <I>kuras piecas lielās pilsētas</I> <li>Nep: <I>कुन पाँच ठुला शहरहरु</I> <li>Nor: <I>hvilke fem store byer</I> <li>Pes: <I>کدام پنج شهر بزرگ</I> <li>Pnb: <I>كیڑے پنج وڈے شہر</I> <li>Pol: <I>których pięciu dużych miast</I> <li>Ron: <I>care cinci oraşe mari</I> <li>Rus: <I>которые пять большие городы</I> <li>Snd: <I>constant not found: city_N</I> <li>Spa: <I>qué cinco grandes ciudades</I> <li>Swe: <I>vilka fem stora städer</I> <li>Tha: <I>เมืองใหญ่ห้าเมืองไหน</I> <li>Urd: <I>كون سے پانچ بڑے شہر</I> </ul> </div> </div></TD>+</TR>+<TR>+<TD><CODE>mkIP</CODE></TD>+<TD><A HREF="#IQuant">IQuant</A> <CODE>-></CODE> <A HREF="#N" TITLE="N - common noun">N</A> <CODE>-></CODE> <A HREF="#IP" TITLE="IP - interrogative pronoun">IP</A></TD>+<TD><div class=reveal> <I>which city</I> <div class=popup> <ul> <li>API: <CODE>mkIP which_IQuant city_N</CODE> <li>Afr: <I>watter stad</I> <li>Bul: <I>кой град</I> <li>Cat: <I>quin ciutat</I> <li>Dan: <I>hvilken by</I> <li>Dut: <I>welke stad</I> <li>Eng: <I>which city</I> <li>Fin: <I>mikä kaupunki</I> <li>Fre: <I>quelle ville</I> <li>Ger: <I>welche Stadt</I> <li>Hin: <I>कौन सा शहर</I> <li>Ita: <I>quale città</I> <li>Lav: <I>kura pilsēta</I> <li>Nep: <I>कुन शहर</I> <li>Nor: <I>hvilken by</I> <li>Pes: <I>کدام شهر</I> <li>Pnb: <I>{s : ResPnb.Case => Str</I> <li>Pol: <I>którego miasta</I> <li>Ron: <I>care oraş</I> <li>Rus: <I>который город</I> <li>Snd: <I>constant not found: city_N</I> <li>Spa: <I>qué ciudad</I> <li>Swe: <I>vilken stad</I> <li>Tha: <I>เมืองเมืองไหน</I> <li>Urd: <I>كون سا شہر</I> </ul> </div> </div></TD>+</TR>+<TR>+<TD><CODE>mkIP</CODE></TD>+<TD><A HREF="#IP" TITLE="IP - interrogative pronoun">IP</A> <CODE>-></CODE> <A HREF="#Adv" TITLE="Adv - verb-phrase-modifying adverb">Adv</A> <CODE>-></CODE> <A HREF="#IP" TITLE="IP - interrogative pronoun">IP</A></TD>+<TD><div class=reveal> <I>who in Paris</I> <div class=popup> <ul> <li>API: <CODE>mkIP who_IP (mkAdv in_Prep (mkNP paris_PN))</CODE> <li>Afr: <I>wie in Parys</I> <li>Bul: <I>кой в Париж</I> <li>Cat: <I>qui en Paris</I> <li>Dan: <I>hvem i Paris</I> <li>Dut: <I>wie in Parijs</I> <li>Eng: <I>who in Paris</I> <li>Fin: <I>kuka Pariisissa</I> <li>Fre: <I>qui dans Paris</I> <li>Ger: <I>wer in Paris</I> <li>Hin: <I>पैरिस में कौन</I> <li>Ita: <I>chi in Parigi</I> <li>Lav: <I>kurš Parīzē</I> <li>Nep: <I>पेरिस मा को</I> <li>Nor: <I>hvem i Paris</I> <li>Pes: <I>چه کسی در پاریس</I> <li>Pnb: <I>پیرس وچ كون</I> <li>Pol: <I>kogo w Paryżu</I> <li>Ron: <I>cine în Paris</I> <li>Rus: <I>кто в Париже</I> <li>Snd: <I>constant not found: paris_PN</I> <li>Spa: <I>quién en Paris</I> <li>Swe: <I>vem i Paris</I> <li>Tha: <I>ใครในปารีส</I> <li>Urd: <I>پیرس میں كون</I> </ul> </div> </div></TD>+</TR>+<TR>+<TD><CODE>whatPl_IP</CODE></TD>+<TD><A HREF="#IP" TITLE="IP - interrogative pronoun">IP</A></TD>+<TD><div class=reveal> <I>what</I> <div class=popup> <ul> <li>API: <CODE>whatPl_IP</CODE> <li>Afr: <I>wat</I> <li>Bul: <I>какви</I> <li>Cat: <I>què</I> <li>Dan: <I>hvilke</I> <li>Dut: <I>wat</I> <li>Eng: <I>what</I> <li>Fin: <I>mitkä</I> <li>Fre: <I>que</I> <li>Ger: <I>was</I> <li>Hin: <I>क्या</I> <li>Ita: <I>che</I> <li>Lav: <I>kas</I> <li>Nep: <I>के</I> <li>Nor: <I>hva</I> <li>Pes: <I>چه چیزهایی</I> <li>Pnb: <I>constant not found: whatPl_IP</I> <li>Pol: <I>czego</I> <li>Ron: <I>ce</I> <li>Rus: <I>что</I> <li>Snd: <I>ڇا</I> <li>Spa: <I>qué</I> <li>Swe: <I>vad</I> <li>Tha: <I>อะไร</I> <li>Urd: <I>كیا</I> </ul> </div> </div></TD>+</TR>+<TR>+<TD><CODE>whatSg_IP</CODE></TD>+<TD><A HREF="#IP" TITLE="IP - interrogative pronoun">IP</A></TD>+<TD><div class=reveal> <I>what</I> <div class=popup> <ul> <li>API: <CODE>whatSg_IP</CODE> <li>Afr: <I>wat</I> <li>Bul: <I>какъв</I> <li>Cat: <I>què</I> <li>Dan: <I>hvad</I> <li>Dut: <I>wat</I> <li>Eng: <I>what</I> <li>Fin: <I>mikä</I> <li>Fre: <I>que</I> <li>Ger: <I>was</I> <li>Hin: <I>क्या</I> <li>Ita: <I>che</I> <li>Lav: <I>kas</I> <li>Nep: <I>के</I> <li>Nor: <I>hva</I> <li>Pes: <I>چه چیزی</I> <li>Pnb: <I>كیا</I> <li>Pol: <I>czego</I> <li>Ron: <I>ce</I> <li>Rus: <I>что</I> <li>Snd: <I>ڇا</I> <li>Spa: <I>qué</I> <li>Swe: <I>vad</I> <li>Tha: <I>อะไร</I> <li>Urd: <I>كیا</I> </ul> </div> </div></TD>+</TR>+<TR>+<TD><CODE>what_IP</CODE></TD>+<TD><A HREF="#IP" TITLE="IP - interrogative pronoun">IP</A></TD>+<TD><div class=reveal> <I>what</I> <div class=popup> <ul> <li>API: <CODE>mkUtt what_IP</CODE> <li>Afr: <I>wat</I> <li>Bul: <I>какъв</I> <li>Cat: <I>què</I> <li>Dan: <I>hvad</I> <li>Dut: <I>wat</I> <li>Eng: <I>what</I> <li>Fin: <I>mikä</I> <li>Fre: <I>que</I> <li>Ger: <I>was</I> <li>Hin: <I>क्या</I> <li>Ita: <I>che</I> <li>Lav: <I>kas</I> <li>Nep: <I>के</I> <li>Nor: <I>hva</I> <li>Pes: <I>چه چیزی</I> <li>Pnb: <I>كیا</I> <li>Pol: <I>co</I> <li>Ron: <I>ce</I> <li>Rus: <I>что</I> <li>Snd: <I>ڇا</I> <li>Spa: <I>qué</I> <li>Swe: <I>vad</I> <li>Tha: <I>อะไร</I> <li>Urd: <I>كیا</I> </ul> </div> </div></TD>+</TR>+<TR>+<TD><CODE>whoPl_IP</CODE></TD>+<TD><A HREF="#IP" TITLE="IP - interrogative pronoun">IP</A></TD>+<TD><div class=reveal> <I>who</I> <div class=popup> <ul> <li>API: <CODE>whoPl_IP</CODE> <li>Afr: <I>wie</I> <li>Bul: <I>кои</I> <li>Cat: <I>qui</I> <li>Dan: <I>hvilke</I> <li>Dut: <I>wie</I> <li>Eng: <I>who</I> <li>Fin: <I>ketkä</I> <li>Fre: <I>qui</I> <li>Ger: <I>wer</I> <li>Hin: <I>कौन</I> <li>Ita: <I>chi</I> <li>Lav: <I>kuri</I> <li>Nep: <I>को</I> <li>Nor: <I>hvilke</I> <li>Pes: <I>چه کسانی</I> <li>Pnb: <I>constant not found: whoPl_IP</I> <li>Pol: <I>kogo</I> <li>Ron: <I>cine</I> <li>Rus: <I>кто</I> <li>Snd: <I>ڪیر</I> <li>Spa: <I>quién</I> <li>Swe: <I>vilka</I> <li>Tha: <I>ใคร</I> <li>Urd: <I>كون</I> </ul> </div> </div></TD>+</TR>+<TR>+<TD><CODE>whoSg_IP</CODE></TD>+<TD><A HREF="#IP" TITLE="IP - interrogative pronoun">IP</A></TD>+<TD><div class=reveal> <I>who</I> <div class=popup> <ul> <li>API: <CODE>whoSg_IP</CODE> <li>Afr: <I>wie</I> <li>Bul: <I>кой</I> <li>Cat: <I>qui</I> <li>Dan: <I>hvem</I> <li>Dut: <I>wie</I> <li>Eng: <I>who</I> <li>Fin: <I>kuka</I> <li>Fre: <I>qui</I> <li>Ger: <I>wer</I> <li>Hin: <I>कौन</I> <li>Ita: <I>chi</I> <li>Lav: <I>kurš</I> <li>Nep: <I>को</I> <li>Nor: <I>hvem</I> <li>Pes: <I>چه کسی</I> <li>Pnb: <I>كون</I> <li>Pol: <I>kogo</I> <li>Ron: <I>cine</I> <li>Rus: <I>кто</I> <li>Snd: <I>ڪیر</I> <li>Spa: <I>quién</I> <li>Swe: <I>vem</I> <li>Tha: <I>ใคร</I> <li>Urd: <I>كون</I> </ul> </div> </div></TD>+</TR>+<TR>+<TD><CODE>who_IP</CODE></TD>+<TD><A HREF="#IP" TITLE="IP - interrogative pronoun">IP</A></TD>+<TD><div class=reveal> <I>who</I> <div class=popup> <ul> <li>API: <CODE>mkUtt who_IP</CODE> <li>Afr: <I>wie</I> <li>Bul: <I>кой</I> <li>Cat: <I>qui</I> <li>Dan: <I>hvem</I> <li>Dut: <I>wie</I> <li>Eng: <I>who</I> <li>Fin: <I>kuka</I> <li>Fre: <I>qui</I> <li>Ger: <I>wer</I> <li>Hin: <I>कौन</I> <li>Ita: <I>chi</I> <li>Lav: <I>kurš</I> <li>Nep: <I>को</I> <li>Nor: <I>hvem</I> <li>Pes: <I>چه کسی</I> <li>Pnb: <I>كون</I> <li>Pol: <I>kto</I> <li>Ron: <I>cine</I> <li>Rus: <I>кто</I> <li>Snd: <I>ڪیر</I> <li>Spa: <I>quién</I> <li>Swe: <I>vem</I> <li>Tha: <I>ใคร</I> <li>Urd: <I>كون</I> </ul> </div> </div></TD>+</TR>+</TABLE>++<A NAME="IQuant"></A>+<H2>IQuant</H2>++<TABLE BORDER="1" CELLPADDING="4">+<TR>+<TH>Function</TH>+<TH>Type</TH>+<TH COLSPAN="2">Example</TH>+</TR>+<TR>+<TD><CODE>which_IQuant</CODE></TD>+<TD><A HREF="#IQuant">IQuant</A></TD>+<TD><div class=reveal> <I>which house</I> <div class=popup> <ul> <li>API: <CODE>mkIP which_IQuant house_N</CODE> <li>Afr: <I>watter huis</I> <li>Bul: <I>коя къща</I> <li>Cat: <I>quin casa</I> <li>Dan: <I>hvilket hus</I> <li>Dut: <I>welk huis</I> <li>Eng: <I>which house</I> <li>Fin: <I>mikä talo</I> <li>Fre: <I>quelle maison</I> <li>Ger: <I>welches Haus</I> <li>Hin: <I>कौन सा घर</I> <li>Ita: <I>quale casa</I> <li>Lav: <I>kura māja</I> <li>Nep: <I>कुन घर</I> <li>Nor: <I>hvilket hus</I> <li>Pes: <I>کدام خانه</I> <li>Pnb: <I>{s : ResPnb.Case => Str</I> <li>Pol: <I>którego domu</I> <li>Ron: <I>care casă</I> <li>Rus: <I>который дом</I> <li>Snd: <I>جیڪو گھر</I> <li>Spa: <I>qué casa</I> <li>Swe: <I>vilket hus</I> <li>Tha: <I>บ้านหลังไหน</I> <li>Urd: <I>كون سا گھر</I> </ul> </div> </div></TD>+</TR>+</TABLE>++<A NAME="Imp"></A>+<H2>Imp - imperative</H2>++<TABLE BORDER="1" CELLPADDING="4">+<TR>+<TH>Function</TH>+<TH>Type</TH>+<TH COLSPAN="2">Example</TH>+</TR>+<TR>+<TD><CODE>mkImp</CODE></TD>+<TD><A HREF="#VP" TITLE="VP - verb phrase">VP</A> <CODE>-></CODE> <A HREF="#Imp" TITLE="Imp - imperative">Imp</A></TD>+<TD><div class=reveal> <I>come to my house</I> <div class=popup> <ul> <li>API: <CODE>mkImp (mkVP (mkVP come_V) (mkAdv to_Prep (mkNP i_Pron house_N)))</CODE> <li>Afr: <I>kom na my huis</I> <li>Bul: <I>ела до моята къща</I> <li>Cat: <I>venir a la meva casa</I> <li>Dan: <I>kom til mit hus</I> <li>Dut: <I>komt u naar mijn huis</I> <li>Eng: <I>come to my house</I> <li>Fin: <I>tule</I> <li>Fre: <I>venez à ma maison</I> <li>Ger: <I>kommen Sie nach meinem Haus / Hause</I> <li>Hin: <I>मेरे घर को आना</I> <li>Ita: <I>venire alla mia casa</I> <li>Lav: <I>nāc līdz manai mājai</I> <li>Nep: <I>आउ मेरो घर सम्म</I> <li>Nor: <I>komm til mit hus</I> <li>Pes: <I>به خانه ی من بیا</I> <li>Pnb: <I>آنا میرا گھر نوں</I> <li>Pol: <I>do mojego domu przychodź</I> <li>Ron: <I>sã vii la casa mea</I> <li>Rus: <I>приходи к моему дому</I> <li>Snd: <I>constant not found: come_V</I> <li>Spa: <I>venir a mi casa</I> <li>Swe: <I>kom till mitt hus</I> <li>Tha: <I>มาถืงบ้านของฉันซิ</I> <li>Urd: <I>میرے گھر كو آنا</I> </ul> </div> </div></TD>+</TR>+<TR>+<TD><CODE>mkImp</CODE></TD>+<TD><A HREF="#V" TITLE="V - one-place verb">V</A> <CODE>-></CODE> <A HREF="#Imp" TITLE="Imp - imperative">Imp</A></TD>+<TD><div class=reveal> <I>come</I> <div class=popup> <ul> <li>API: <CODE>mkImp come_V</CODE> <li>Afr: <I>kom</I> <li>Bul: <I>ела</I> <li>Cat: <I>venir</I> <li>Dan: <I>kom</I> <li>Dut: <I>komt u</I> <li>Eng: <I>come</I> <li>Fin: <I>tule</I> <li>Fre: <I>venez</I> <li>Ger: <I>kommen Sie</I> <li>Hin: <I>आना</I> <li>Ita: <I>venire</I> <li>Lav: <I>nāc</I> <li>Nep: <I>आउ</I> <li>Nor: <I>komm</I> <li>Pes: <I>بیا</I> <li>Pnb: <I>آنا</I> <li>Pol: <I>przychodź</I> <li>Ron: <I>sã vii</I> <li>Rus: <I>приходи</I> <li>Snd: <I>constant not found: come_V</I> <li>Spa: <I>venir</I> <li>Swe: <I>kom</I> <li>Tha: <I>มาซิ</I> <li>Urd: <I>آنا</I> </ul> </div> </div></TD>+</TR>+<TR>+<TD><CODE>mkImp</CODE></TD>+<TD><A HREF="#V2" TITLE="V2 - two-place verb">V2</A> <CODE>-></CODE> <A HREF="#NP" TITLE="NP - noun phrase (subject or object)">NP</A> <CODE>-></CODE> <A HREF="#Imp" TITLE="Imp - imperative">Imp</A></TD>+<TD><div class=reveal> <I>buy it</I> <div class=popup> <ul> <li>API: <CODE>mkImp buy_V2 it_NP</CODE> <li>Afr: <I>koop</I> <li>Bul: <I>купи него</I> <li>Cat: <I>comprar ho</I> <li>Dan: <I>køb det</I> <li>Dut: <I>koopt u</I> <li>Eng: <I>buy it</I> <li>Fin: <I>osta sen</I> <li>Fre: <I>achetez le</I> <li>Ger: <I>kaufen Sie es</I> <li>Hin: <I>इस को ख़रीदना</I> <li>Ita: <I>comprare lo lo</I> <li>Lav: <I>pirk to</I> <li>Nep: <I>यो किन्</I> <li>Nor: <I>kjøp det</I> <li>Pes: <I>آن را بخر</I> <li>Pnb: <I>اینوں خریدنا</I> <li>Pol: <I>kupuj je</I> <li>Ron: <I>sã îl cumperi</I> <li>Rus: <I>покупай его</I> <li>Snd: <I>ئرید ڪر</I> <li>Spa: <I>comprar lo</I> <li>Swe: <I>köp det</I> <li>Tha: <I>ซื้อมันซิ</I> <li>Urd: <I>اس كو خریدنا</I> </ul> </div> </div></TD>+</TR>+</TABLE>++<A NAME="ImpForm"></A>+<H2>ImpForm</H2>++<TABLE BORDER="1" CELLPADDING="4">+<TR>+<TH>Function</TH>+<TH>Type</TH>+<TH COLSPAN="2">Example</TH>+</TR>+<TR>+<TD><CODE>pluralImpForm</CODE></TD>+<TD><A HREF="#ImpForm">ImpForm</A></TD>+<TD><div class=reveal> <I>be men</I> <div class=popup> <ul> <li>API: <CODE>mkUtt pluralImpForm (mkImp (mkVP man_N))</CODE> <li>Afr: <I>wees mans</I> <li>Bul: <I>бъдете мъже</I> <li>Cat: <I>sigueu homes</I> <li>Dan: <I>var mænd</I> <li>Dut: <I>wezen mannen</I> <li>Eng: <I>be men</I> <li>Fin: <I>olkaa miehiä</I> <li>Fre: <I>soyez des hommes</I> <li>Ger: <I>seid Männer</I> <li>Hin: <I>आदमी</I> <li>Ita: <I>siate uomini</I> <li>Lav: <I>bijiet vīrieši</I> <li>Nep: <I>मान्छेहरु हऔ</I> <li>Nor: <I>var menn</I> <li>Pes: <I>مردان</I> <li>Pnb: <I>بندے</I> <li>Pol: <I>bądźcie mężczyzna</I> <li>Ron: <I>fiţi oameni</I> <li>Rus: <I>будьте человеками</I> <li>Snd: <I>ماڻھو</I> <li>Spa: <I>sed hombres</I> <li>Swe: <I>var män</I> <li>Tha: <I>เป็นชายซิ</I> <li>Urd: <I>آدمی</I> </ul> </div> </div></TD>+</TR>+<TR>+<TD><CODE>politeImpForm</CODE></TD>+<TD><A HREF="#ImpForm">ImpForm</A></TD>+<TD><div class=reveal> <I>be a man</I> <div class=popup> <ul> <li>API: <CODE>mkUtt politeImpForm (mkImp (mkVP man_N))</CODE> <li>Afr: <I>wees 'n man</I> <li>Bul: <I>бъдете мъже</I> <li>Cat: <I>ser un home</I> <li>Dan: <I>var en mand</I> <li>Dut: <I>weest u man</I> <li>Eng: <I>be a man</I> <li>Fin: <I>olkaa mies</I> <li>Fre: <I>soyez un homme</I> <li>Ger: <I>seien Sie ein Mann</I> <li>Hin: <I>आदमी</I> <li>Ita: <I>essere un uomo</I> <li>Lav: <I>lūdzu bijiet vīrieši</I> <li>Nep: <I>मान्छे होउ</I> <li>Nor: <I>var en mann</I> <li>Pes: <I>مرد</I> <li>Pnb: <I>بندہ</I> <li>Pol: <I>bądź mężczyzna</I> <li>Ron: <I>sã fii om</I> <li>Rus: <I>будь человеком</I> <li>Snd: <I>ماڻھو</I> <li>Spa: <I>ser un hombre</I> <li>Swe: <I>var en man</I> <li>Tha: <I>เป็นชายซิ</I> <li>Urd: <I>آدمی</I> </ul> </div> </div></TD>+</TR>+<TR>+<TD><CODE>singularImpForm</CODE></TD>+<TD><A HREF="#ImpForm">ImpForm</A></TD>+<TD><div class=reveal> <I>be a man</I> <div class=popup> <ul> <li>API: <CODE>mkUtt singularImpForm (mkImp (mkVP man_N))</CODE> <li>Afr: <I>wees 'n man</I> <li>Bul: <I>бъди мъж</I> <li>Cat: <I>sigues un home</I> <li>Dan: <I>var en mand</I> <li>Dut: <I>wees man</I> <li>Eng: <I>be a man</I> <li>Fin: <I>ole mies</I> <li>Fre: <I>sois un homme</I> <li>Ger: <I>sei ein Mann</I> <li>Hin: <I>आदमी</I> <li>Ita: <I>sii un uomo</I> <li>Lav: <I>bij vīrietis</I> <li>Nep: <I>मान्छे होउ</I> <li>Nor: <I>var en mann</I> <li>Pes: <I>مرد</I> <li>Pnb: <I>بندہ</I> <li>Pol: <I>bądź mężczyzna</I> <li>Ron: <I>fii om</I> <li>Rus: <I>будь человеком</I> <li>Snd: <I>ماڻھو</I> <li>Spa: <I>sé un hombre</I> <li>Swe: <I>var en man</I> <li>Tha: <I>เป็นชายซิ</I> <li>Urd: <I>آدمی</I> </ul> </div> </div></TD>+</TR>+</TABLE>++<A NAME="Interj"></A>+<H2>Interj - interjection</H2>++<P>+Lexical category, constructors given in+<A HREF="#RParadigms">lexical paradigms</A>.+</P>++<A NAME="ListAP"></A>+<H2>ListAP</H2>++<TABLE BORDER="1" CELLPADDING="4">+<TR>+<TH>Function</TH>+<TH>Type</TH>+<TH COLSPAN="2">Example</TH>+</TR>+<TR>+<TD><CODE>mkListAP</CODE></TD>+<TD><A HREF="#AP" TITLE="AP - adjectival phrase">AP</A> <CODE>-></CODE> <A HREF="#AP" TITLE="AP - adjectival phrase">AP</A> <CODE>-></CODE> <A HREF="#ListAP">ListAP</A></TD>+<TD><I>list of two</I></TD>+</TR>+<TR>+<TD><CODE>mkListAP</CODE></TD>+<TD><A HREF="#AP" TITLE="AP - adjectival phrase">AP</A> <CODE>-></CODE> <A HREF="#ListAP">ListAP</A> <CODE>-></CODE> <A HREF="#ListAP">ListAP</A></TD>+<TD><I>list of more</I></TD>+</TR>+</TABLE>++<A NAME="ListAdv"></A>+<H2>ListAdv</H2>++<TABLE BORDER="1" CELLPADDING="4">+<TR>+<TH>Function</TH>+<TH>Type</TH>+<TH COLSPAN="2">Example</TH>+</TR>+<TR>+<TD><CODE>mkListAdv</CODE></TD>+<TD><A HREF="#Adv" TITLE="Adv - verb-phrase-modifying adverb">Adv</A> <CODE>-></CODE> <A HREF="#Adv" TITLE="Adv - verb-phrase-modifying adverb">Adv</A> <CODE>-></CODE> <A HREF="#ListAdv">ListAdv</A></TD>+<TD><I>list of two</I></TD>+</TR>+<TR>+<TD><CODE>mkListAdv</CODE></TD>+<TD><A HREF="#Adv" TITLE="Adv - verb-phrase-modifying adverb">Adv</A> <CODE>-></CODE> <A HREF="#ListAdv">ListAdv</A> <CODE>-></CODE> <A HREF="#ListAdv">ListAdv</A></TD>+<TD><I>list of more</I></TD>+</TR>+</TABLE>++<A NAME="ListNP"></A>+<H2>ListNP</H2>++<TABLE BORDER="1" CELLPADDING="4">+<TR>+<TH>Function</TH>+<TH>Type</TH>+<TH COLSPAN="2">Example</TH>+</TR>+<TR>+<TD><CODE>mkListNP</CODE></TD>+<TD><A HREF="#NP" TITLE="NP - noun phrase (subject or object)">NP</A> <CODE>-></CODE> <A HREF="#NP" TITLE="NP - noun phrase (subject or object)">NP</A> <CODE>-></CODE> <A HREF="#ListNP">ListNP</A></TD>+<TD><I>list of two</I></TD>+</TR>+<TR>+<TD><CODE>mkListNP</CODE></TD>+<TD><A HREF="#NP" TITLE="NP - noun phrase (subject or object)">NP</A> <CODE>-></CODE> <A HREF="#ListNP">ListNP</A> <CODE>-></CODE> <A HREF="#ListNP">ListNP</A></TD>+<TD><I>list of more</I></TD>+</TR>+</TABLE>++<A NAME="ListRS"></A>+<H2>ListRS</H2>++<TABLE BORDER="1" CELLPADDING="4">+<TR>+<TH>Function</TH>+<TH>Type</TH>+<TH COLSPAN="2">Example</TH>+</TR>+<TR>+<TD><CODE>mkListRS</CODE></TD>+<TD><A HREF="#RS" TITLE="RS - relative">RS</A> <CODE>-></CODE> <A HREF="#RS" TITLE="RS - relative">RS</A> <CODE>-></CODE> <A HREF="#ListRS">ListRS</A></TD>+<TD><I>list of two</I></TD>+</TR>+<TR>+<TD><CODE>mkListRS</CODE></TD>+<TD><A HREF="#RS" TITLE="RS - relative">RS</A> <CODE>-></CODE> <A HREF="#ListRS">ListRS</A> <CODE>-></CODE> <A HREF="#ListRS">ListRS</A></TD>+<TD><I>list of more</I></TD>+</TR>+</TABLE>++<A NAME="ListS"></A>+<H2>ListS</H2>++<TABLE BORDER="1" CELLPADDING="4">+<TR>+<TH>Function</TH>+<TH>Type</TH>+<TH COLSPAN="2">Example</TH>+</TR>+<TR>+<TD><CODE>mkListS</CODE></TD>+<TD><A HREF="#S" TITLE="S - declarative sentence">S</A> <CODE>-></CODE> <A HREF="#S" TITLE="S - declarative sentence">S</A> <CODE>-></CODE> <A HREF="#ListS">ListS</A></TD>+<TD><I>list of two</I></TD>+</TR>+<TR>+<TD><CODE>mkListS</CODE></TD>+<TD><A HREF="#S" TITLE="S - declarative sentence">S</A> <CODE>-></CODE> <A HREF="#ListS">ListS</A> <CODE>-></CODE> <A HREF="#ListS">ListS</A></TD>+<TD><I>list of more</I></TD>+</TR>+</TABLE>++<A NAME="N"></A>+<H2>N - common noun</H2>++<P>+Lexical category, constructors given in+<A HREF="#RParadigms">lexical paradigms</A>.+</P>++<A NAME="N2"></A>+<H2>N2 - relational noun</H2>++<P>+Lexical category, constructors given in+<A HREF="#RParadigms">lexical paradigms</A>.+</P>++<A NAME="N3"></A>+<H2>N3 - three-place relational noun</H2>++<P>+Lexical category, constructors given in+<A HREF="#RParadigms">lexical paradigms</A>.+</P>++<A NAME="NP"></A>+<H2>NP - noun phrase (subject or object)</H2>++<TABLE BORDER="1" CELLPADDING="4">+<TR>+<TH>Function</TH>+<TH>Type</TH>+<TH COLSPAN="2">Example</TH>+</TR>+<TR>+<TD><CODE>everybody_NP</CODE></TD>+<TD><A HREF="#NP" TITLE="NP - noun phrase (subject or object)">NP</A></TD>+<TD><div class=reveal> <I>everybody</I> <div class=popup> <ul> <li>API: <CODE>mkUtt everybody_NP</CODE> <li>Afr: <I>almal</I> <li>Bul: <I>всеки</I> <li>Cat: <I>tothom</I> <li>Dan: <I>alle</I> <li>Dut: <I>alle</I> <li>Eng: <I>everybody</I> <li>Fin: <I>jokainen</I> <li>Fre: <I>tout le monde</I> <li>Ger: <I>jeder</I> <li>Hin: <I>हर कोई</I> <li>Ita: <I>tutti</I> <li>Lav: <I>visi</I> <li>Nep: <I>सवौ जाना</I> <li>Nor: <I>alle</I> <li>Pes: <I>constant not found: everybody_NP</I> <li>Pnb: <I>ہر كوی</I> <li>Pol: <I>wszyscy</I> <li>Ron: <I>toţi</I> <li>Rus: <I>всех</I> <li>Snd: <I>constant not found: everybody_NP</I> <li>Spa: <I>todos</I> <li>Swe: <I>alla</I> <li>Tha: <I>ทุกคน</I> <li>Urd: <I>ہر كوی</I> </ul> </div> </div></TD>+</TR>+<TR>+<TD><CODE>everything_NP</CODE></TD>+<TD><A HREF="#NP" TITLE="NP - noun phrase (subject or object)">NP</A></TD>+<TD><div class=reveal> <I>everything</I> <div class=popup> <ul> <li>API: <CODE>mkUtt everything_NP</CODE> <li>Afr: <I>alles</I> <li>Bul: <I>всичко</I> <li>Cat: <I>tot</I> <li>Dan: <I>alt</I> <li>Dut: <I>alles</I> <li>Eng: <I>everything</I> <li>Fin: <I>kaikki</I> <li>Fre: <I>tout</I> <li>Ger: <I>alles</I> <li>Hin: <I>हर चीज़</I> <li>Ita: <I>tutto</I> <li>Lav: <I>viss</I> <li>Nep: <I>हारेक कुरा</I> <li>Nor: <I>alt</I> <li>Pes: <I>constant not found: everything_NP</I> <li>Pnb: <I>ہر شے</I> <li>Pol: <I>wszystko</I> <li>Ron: <I>// <li>Rus: //всё</I> <li>Snd: <I>constant not found: everything_NP</I> <li>Spa: <I>todo</I> <li>Swe: <I>allting</I> <li>Tha: <I>ทุกสิ่ง</I> <li>Urd: <I>ہر چیز</I> </ul> </div> </div></TD>+</TR>+<TR>+<TD><CODE>he_NP</CODE></TD>+<TD><A HREF="#NP" TITLE="NP - noun phrase (subject or object)">NP</A></TD>+<TD><div class=reveal> <I>he</I> <div class=popup> <ul> <li>API: <CODE>mkUtt he_NP</CODE> <li>Afr: <I>hy</I> <li>Bul: <I>той</I> <li>Cat: <I>ell</I> <li>Dan: <I>ham</I> <li>Dut: <I>hij</I> <li>Eng: <I>he</I> <li>Fin: <I>hän</I> <li>Fre: <I>lui</I> <li>Ger: <I>er</I> <li>Hin: <I>वह</I> <li>Ita: <I>lui</I> <li>Lav: <I>viņš</I> <li>Nep: <I>उ</I> <li>Nor: <I>ham</I> <li>Pes: <I>او</I> <li>Pnb: <I>او</I> <li>Pol: <I>on</I> <li>Ron: <I>el</I> <li>Rus: <I>его</I> <li>Snd: <I>ھو</I> <li>Spa: <I>él</I> <li>Swe: <I>honom</I> <li>Tha: <I>เขา</I> <li>Urd: <I>وہ</I> </ul> </div> </div></TD>+</TR>+<TR>+<TD><CODE>i_NP</CODE></TD>+<TD><A HREF="#NP" TITLE="NP - noun phrase (subject or object)">NP</A></TD>+<TD><div class=reveal> <I>I</I> <div class=popup> <ul> <li>API: <CODE>mkUtt i_NP</CODE> <li>Afr: <I>ek</I> <li>Bul: <I>аз</I> <li>Cat: <I>mi</I> <li>Dan: <I>mig</I> <li>Dut: <I>ik</I> <li>Eng: <I>I</I> <li>Fin: <I>minä</I> <li>Fre: <I>moi</I> <li>Ger: <I>ich</I> <li>Hin: <I>मैं</I> <li>Ita: <I>me</I> <li>Lav: <I>es</I> <li>Nep: <I>म</I> <li>Nor: <I>meg</I> <li>Pes: <I>من</I> <li>Pnb: <I>میں</I> <li>Pol: <I>ja</I> <li>Ron: <I>eu</I> <li>Rus: <I>меня</I> <li>Snd: <I>مان</I> <li>Spa: <I>mí</I> <li>Swe: <I>mig</I> <li>Tha: <I>ฉัน</I> <li>Urd: <I>میں</I> </ul> </div> </div></TD>+</TR>+<TR>+<TD><CODE>it_NP</CODE></TD>+<TD><A HREF="#NP" TITLE="NP - noun phrase (subject or object)">NP</A></TD>+<TD><div class=reveal> <I>it</I> <div class=popup> <ul> <li>API: <CODE>mkUtt it_NP</CODE> <li>Afr: <I>dit</I> <li>Bul: <I>то</I> <li>Cat: <I>ell</I> <li>Dan: <I>det</I> <li>Dut: <I>het</I> <li>Eng: <I>it</I> <li>Fin: <I>se</I> <li>Fre: <I>lui</I> <li>Ger: <I>es</I> <li>Hin: <I>यह</I> <li>Ita: <I>lui</I> <li>Lav: <I>tas / tā</I> <li>Nep: <I>यो</I> <li>Nor: <I>det</I> <li>Pes: <I>آن</I> <li>Pnb: <I>اے</I> <li>Pol: <I>ono</I> <li>Ron: <I>''</I> <li>Rus: <I>его</I> <li>Snd: <I>اھا</I> <li>Spa: <I>él</I> <li>Swe: <I>det</I> <li>Tha: <I>มัน</I> <li>Urd: <I>یہ</I> </ul> </div> </div></TD>+</TR>+<TR>+<TD><CODE>mkNP</CODE></TD>+<TD><A 'HREF="#Quant" TITLE="Quant - quantifier ('nucleus' of Det)"'>Quant</A> <CODE>-></CODE> <A HREF="#N" TITLE="N - common noun">N</A> <CODE>-></CODE> <A HREF="#NP" TITLE="NP - noun phrase (subject or object)">NP</A></TD>+<TD><div class=reveal> <I>this man</I> <div class=popup> <ul> <li>API: <CODE>mkUtt (mkNP this_Quant man_N)</CODE> <li>Afr: <I>hierdie man</I> <li>Bul: <I>този мъж</I> <li>Cat: <I>aquest home</I> <li>Dan: <I>denne mand</I> <li>Dut: <I>deze man</I> <li>Eng: <I>this man</I> <li>Fin: <I>tämä mies</I> <li>Fre: <I>cet homme</I> <li>Ger: <I>dieser Mann</I> <li>Hin: <I>यह आदमी</I> <li>Ita: <I>questo uomo</I> <li>Lav: <I>šis vīrietis</I> <li>Nep: <I>यो मान्छे</I> <li>Nor: <I>denne mannen</I> <li>Pes: <I>این مرد</I> <li>Pnb: <I>اے بندہ</I> <li>Pol: <I>ten mężczyzna</I> <li>Ron: <I>acest om</I> <li>Rus: <I>этот человек</I> <li>Snd: <I>ھی ماڻھو</I> <li>Spa: <I>este hombre</I> <li>Swe: <I>den här mannen</I> <li>Tha: <I>ชายคนนี้</I> <li>Urd: <I>یہ آدمی</I> </ul> </div> </div></TD>+</TR>+<TR>+<TD><CODE>mkNP</CODE></TD>+<TD><A 'HREF="#Quant" TITLE="Quant - quantifier ('nucleus' of Det)"'>Quant</A> <CODE>-></CODE> <A HREF="#CN" TITLE="CN - common noun (without determiner)">CN</A> <CODE>-></CODE> <A HREF="#NP" TITLE="NP - noun phrase (subject or object)">NP</A></TD>+<TD><div class=reveal> <I>this old man</I> <div class=popup> <ul> <li>API: <CODE>mkUtt (mkNP this_Quant (mkCN old_A man_N))</CODE> <li>Afr: <I>hierdie ou man</I> <li>Bul: <I>този стар мъж</I> <li>Cat: <I>aquest home vell</I> <li>Dan: <I>denne gamle mand</I> <li>Dut: <I>deze oude man</I> <li>Eng: <I>this old man</I> <li>Fin: <I>tämä vanha mies</I> <li>Fre: <I>ce vieux homme</I> <li>Ger: <I>dieser alte Mann</I> <li>Hin: <I>यह बूढ़ा आदमी</I> <li>Ita: <I>questo vecchio uomo</I> <li>Lav: <I>šis vecais vīrietis</I> <li>Nep: <I>यो बुढो मान्छे</I> <li>Nor: <I>denne gamle mannen</I> <li>Pes: <I>این مرد پیر</I> <li>Pnb: <I>اے بوڈا بندہ</I> <li>Pol: <I>ten stary mężczyzna</I> <li>Ron: <I>acest om vechi</I> <li>Rus: <I>этот старый человек</I> <li>Snd: <I>ھی پوڙھی ماڻھو</I> <li>Spa: <I>este viejo hombre</I> <li>Swe: <I>den här gamla mannen</I> <li>Tha: <I>ชายแก่คนนี้</I> <li>Urd: <I>یہ بوڑھا آدمی</I> </ul> </div> </div></TD>+</TR>+<TR>+<TD><CODE>mkNP</CODE></TD>+<TD><A 'HREF="#Quant" TITLE="Quant - quantifier ('nucleus' of Det)"'>Quant</A> <CODE>-></CODE> <A HREF="#Num" TITLE="Num - number determining element">Num</A> <CODE>-></CODE> <A HREF="#CN" TITLE="CN - common noun (without determiner)">CN</A> <CODE>-></CODE> <A HREF="#NP" TITLE="NP - noun phrase (subject or object)">NP</A></TD>+<TD><div class=reveal> <I>these five old men</I> <div class=popup> <ul> <li>API: <CODE>mkUtt (mkNP this_Quant (mkNum (mkNumeral n5_Unit)) (mkCN old_A man_N))</CODE> <li>Afr: <I>hierdie vyf ou mans</I> <li>Bul: <I>тези петима стари мъже</I> <li>Cat: <I>aquests cinc homes vells</I> <li>Dan: <I>disse fem gamle mænd</I> <li>Dut: <I>deze vijf oude mannen</I> <li>Eng: <I>these five old men</I> <li>Fin: <I>nämä viisi vanhaa miestä</I> <li>Fre: <I>ces cinq vieux hommes</I> <li>Ger: <I>diese fünf alten Männer</I> <li>Hin: <I>यह पांच बूढ़े आदमी</I> <li>Ita: <I>questi cinque vecchi uomini</I> <li>Lav: <I>šie pieci vecie vīrieši</I> <li>Nep: <I>यी पाँच बुढा मान्छेहरु</I> <li>Nor: <I>disse fem gamle mennen</I> <li>Pes: <I>این پنج مرد پیر</I> <li>Pnb: <I>اے پنج بوڈے بندے</I> <li>Pol: <I>tych pięciu starych mężczyzn</I> <li>Ron: <I>aceşti cinci oameni vechi</I> <li>Rus: <I>эти пять старых человеков</I> <li>Snd: <I>ھی پنج پوڙھا ماڻھو</I> <li>Spa: <I>estos cinco viejos hombres</I> <li>Swe: <I>de här fem gamla männen</I> <li>Tha: <I>ชายแก่ห้าคนนี้</I> <li>Urd: <I>یہ پانچ بوڑھے آدمی</I> </ul> </div> </div></TD>+</TR>+<TR>+<TD><CODE>mkNP</CODE></TD>+<TD><A 'HREF="#Quant" TITLE="Quant - quantifier ('nucleus' of Det)"'>Quant</A> <CODE>-></CODE> <A HREF="#Num" TITLE="Num - number determining element">Num</A> <CODE>-></CODE> <A HREF="#N" TITLE="N - common noun">N</A> <CODE>-></CODE> <A HREF="#NP" TITLE="NP - noun phrase (subject or object)">NP</A></TD>+<TD><div class=reveal> <I>these five men</I> <div class=popup> <ul> <li>API: <CODE>mkUtt (mkNP this_Quant (mkNum (mkNumeral n5_Unit)) man_N)</CODE> <li>Afr: <I>hierdie vyf mans</I> <li>Bul: <I>тези петима мъже</I> <li>Cat: <I>aquests cinc homes</I> <li>Dan: <I>disse fem mænd</I> <li>Dut: <I>deze vijf mannen</I> <li>Eng: <I>these five men</I> <li>Fin: <I>nämä viisi miestä</I> <li>Fre: <I>ces cinq hommes</I> <li>Ger: <I>diese fünf Männer</I> <li>Hin: <I>यह पांच आदमी</I> <li>Ita: <I>questi cinque uomini</I> <li>Lav: <I>šie pieci vīrieši</I> <li>Nep: <I>यी पाँच मान्छेहरु</I> <li>Nor: <I>disse fem mennen</I> <li>Pes: <I>این پنج مرد</I> <li>Pnb: <I>اے پنج بندے</I> <li>Pol: <I>tych pięciu mężczyzn</I> <li>Ron: <I>aceşti cinci oameni</I> <li>Rus: <I>эти пять человеков</I> <li>Snd: <I>ھی پنج ماڻھو</I> <li>Spa: <I>estos cinco hombres</I> <li>Swe: <I>de här fem männen</I> <li>Tha: <I>ชายห้าคนนี้</I> <li>Urd: <I>یہ پانچ آدمی</I> </ul> </div> </div></TD>+</TR>+<TR>+<TD><CODE>mkNP</CODE></TD>+<TD><A HREF="#Det" TITLE="Det - determiner phrase">Det</A> <CODE>-></CODE> <A HREF="#CN" TITLE="CN - common noun (without determiner)">CN</A> <CODE>-></CODE> <A HREF="#NP" TITLE="NP - noun phrase (subject or object)">NP</A></TD>+<TD><div class=reveal> <I>the five old men</I> <div class=popup> <ul> <li>API: <CODE>mkUtt (mkNP (mkDet the_Quant (mkNum (mkNumeral n5_Unit))) (mkCN old_A man_N))</CODE> <li>Afr: <I>die vyf ou mans</I> <li>Bul: <I>петимата стари мъже</I> <li>Cat: <I>els cinc homes vells</I> <li>Dan: <I>de fem gamle mænd</I> <li>Dut: <I>de vijf oude mannen</I> <li>Eng: <I>the five old men</I> <li>Fin: <I>viisi vanhaa miestä</I> <li>Fre: <I>les cinq vieux hommes</I> <li>Ger: <I>die fünf alten Männer</I> <li>Hin: <I>पांच बूढ़े आदमी</I> <li>Ita: <I>i cinque vecchi uomini</I> <li>Lav: <I>pieci vecie vīrieši</I> <li>Nep: <I>पाँच बुढा मान्छेहरु</I> <li>Nor: <I>de fem gamle mennen</I> <li>Pes: <I>پنج مرد پیر</I> <li>Pnb: <I>پنج بوڈے بندے</I> <li>Pol: <I>pięciu starych mężczyzn</I> <li>Ron: <I>cei cinci oameni vechi</I> <li>Rus: <I>пять старых человеков</I> <li>Snd: <I>پنج پوڙھا ماڻھو</I> <li>Spa: <I>los cinco viejos hombres</I> <li>Swe: <I>de fem gamla männen</I> <li>Tha: <I>ชายแก่ห้าคน</I> <li>Urd: <I>پانچ بوڑھے آدمی</I> </ul> </div> </div></TD>+</TR>+<TR>+<TD><CODE>mkNP</CODE></TD>+<TD><A HREF="#Det" TITLE="Det - determiner phrase">Det</A> <CODE>-></CODE> <A HREF="#N" TITLE="N - common noun">N</A> <CODE>-></CODE> <A HREF="#NP" TITLE="NP - noun phrase (subject or object)">NP</A></TD>+<TD><div class=reveal> <I>the five men</I> <div class=popup> <ul> <li>API: <CODE>mkUtt (mkNP (mkDet the_Quant (mkNum (mkNumeral n5_Unit))) man_N)</CODE> <li>Afr: <I>die vyf mans</I> <li>Bul: <I>петимата мъже</I> <li>Cat: <I>els cinc homes</I> <li>Dan: <I>de fem mændene</I> <li>Dut: <I>de vijf mannen</I> <li>Eng: <I>the five men</I> <li>Fin: <I>viisi miestä</I> <li>Fre: <I>les cinq hommes</I> <li>Ger: <I>die fünf Männer</I> <li>Hin: <I>पांच आदमी</I> <li>Ita: <I>i cinque uomini</I> <li>Lav: <I>pieci vīrieši</I> <li>Nep: <I>पाँच मान्छेहरु</I> <li>Nor: <I>de fem mennen</I> <li>Pes: <I>پنج مرد</I> <li>Pnb: <I>پنج بندے</I> <li>Pol: <I>pięciu mężczyzn</I> <li>Ron: <I>cei cinci oameni</I> <li>Rus: <I>пять человеков</I> <li>Snd: <I>پنج ماڻھو</I> <li>Spa: <I>los cinco hombres</I> <li>Swe: <I>de fem männen</I> <li>Tha: <I>ชายห้าคน</I> <li>Urd: <I>پانچ آدمی</I> </ul> </div> </div></TD>+</TR>+<TR>+<TD><CODE>mkNP</CODE></TD>+<TD><A HREF="#Numeral" TITLE="Numeral - cardinal or ordinal in words">Numeral</A> <CODE>-></CODE> <A HREF="#CN" TITLE="CN - common noun (without determiner)">CN</A> <CODE>-></CODE> <A HREF="#NP" TITLE="NP - noun phrase (subject or object)">NP</A></TD>+<TD><div class=reveal> <I>fifty old men</I> <div class=popup> <ul> <li>API: <CODE>mkUtt (mkNP (mkNumeral (tenfoldSub100 n5_Unit)) (mkCN old_A man_N))</CODE> <li>Afr: <I>vyftig ou mans</I> <li>Bul: <I>петдесетима стари мъже</I> <li>Cat: <I>cinquanta homes vells</I> <li>Dan: <I>halvtreds gamle mænd</I> <li>Dut: <I>vijftig oude mannen</I> <li>Eng: <I>fifty old men</I> <li>Fin: <I>viisikymmentä vanhaa miestä</I> <li>Fre: <I>cinquante vieux hommes</I> <li>Ger: <I>fünfzig alte Männer</I> <li>Hin: <I>पचास बूढ़े आदमी</I> <li>Ita: <I>cinquanta vecchi uomini</I> <li>Lav: <I>piecdesmit veci vīrieši</I> <li>Nep: <I>पचास बुढा मान्छेहरु</I> <li>Nor: <I>femti gamle menn</I> <li>Pes: <I>یک پنجاه مرد پیر</I> <li>Pnb: <I>پنجاہ بوڈے بندے</I> <li>Pol: <I>pięćdziesięciu starych mężczyzn</I> <li>Ron: <I>cincizeci de oameni vechi</I> <li>Rus: <I>пятьдесят старых человеков</I> <li>Snd: <I>پنجاھ پوڙھا ماڻھو</I> <li>Spa: <I>cinquenta viejos hombres</I> <li>Swe: <I>femtio gamla män</I> <li>Tha: <I>ชายแก่ห้าสิบคน</I> <li>Urd: <I>پچاس بوڑھے آدمی</I> </ul> </div> </div></TD>+</TR>+<TR>+<TD><CODE>mkNP</CODE></TD>+<TD><A HREF="#Numeral" TITLE="Numeral - cardinal or ordinal in words">Numeral</A> <CODE>-></CODE> <A HREF="#N" TITLE="N - common noun">N</A> <CODE>-></CODE> <A HREF="#NP" TITLE="NP - noun phrase (subject or object)">NP</A></TD>+<TD><div class=reveal> <I>fifty men</I> <div class=popup> <ul> <li>API: <CODE>mkUtt (mkNP (mkNumeral (tenfoldSub100 n5_Unit)) man_N)</CODE> <li>Afr: <I>vyftig mans</I> <li>Bul: <I>петдесетима мъже</I> <li>Cat: <I>cinquanta homes</I> <li>Dan: <I>halvtreds mænd</I> <li>Dut: <I>vijftig mannen</I> <li>Eng: <I>fifty men</I> <li>Fin: <I>viisikymmentä miestä</I> <li>Fre: <I>cinquante hommes</I> <li>Ger: <I>fünfzig Männer</I> <li>Hin: <I>पचास आदमी</I> <li>Ita: <I>cinquanta uomini</I> <li>Lav: <I>piecdesmit vīrieši</I> <li>Nep: <I>पचास मान्छेहरु</I> <li>Nor: <I>femti menn</I> <li>Pes: <I>یک پنجاه مرد</I> <li>Pnb: <I>پنجاہ بندے</I> <li>Pol: <I>pięćdziesięciu mężczyzn</I> <li>Ron: <I>cincizeci de oameni</I> <li>Rus: <I>пятьдесят человеков</I> <li>Snd: <I>پنجاھ ماڻھو</I> <li>Spa: <I>cinquenta hombres</I> <li>Swe: <I>femtio män</I> <li>Tha: <I>ชายห้าสิบคน</I> <li>Urd: <I>پچاس آدمی</I> </ul> </div> </div></TD>+</TR>+<TR>+<TD><CODE>mkNP</CODE></TD>+<TD><A HREF="#Digits" TITLE="Digits - cardinal or ordinal in digits">Digits</A> <CODE>-></CODE> <A HREF="#CN" TITLE="CN - common noun (without determiner)">CN</A> <CODE>-></CODE> <A HREF="#NP" TITLE="NP - noun phrase (subject or object)">NP</A></TD>+<TD><div class=reveal> <I>5 1 old men</I> <div class=popup> <ul> <li>API: <CODE>mkUtt (mkNP (mkDigits n5_Dig (mkDigits n1_Dig)) (mkCN old_A man_N))</CODE> <li>Afr: <I>5 1 ou mans</I> <li>Bul: <I>5 1 стари мъже</I> <li>Cat: <I>5 1 homes vells</I> <li>Dan: <I>5 1 gamle mænd</I> <li>Dut: <I>5 1 oude mannen</I> <li>Eng: <I>5 1 old men</I> <li>Fin: <I>5 1 vanhaa miestä</I> <li>Fre: <I>5 1 vieux hommes</I> <li>Ger: <I>5 1 alte Männer</I> <li>Hin: <I>१५ बूढ़े आदमी</I> <li>Ita: <I>5 1 vecchi uomini</I> <li>Lav: <I>5 1 veci vīrieši</I> <li>Nep: <I>५१ बुढा मान्छेहरु</I> <li>Nor: <I>5 1 gamle menn</I> <li>Pes: <I>یک 5 1 مرد پیر</I> <li>Pnb: <I>۱۵ بوڈے بندے</I> <li>Pol: <I>5 1 starzy mężczyźni</I> <li>Ron: <I>5 1 de oameni vechi</I> <li>Rus: <I>5 1 старые человеки</I> <li>Snd: <I>۱۵ پوڙھا ماڻھو</I> <li>Spa: <I>5 1 viejos hombres</I> <li>Swe: <I>5 1 gamla män</I> <li>Tha: <I>ชายแก่๕๑คน</I> <li>Urd: <I>۱۵ بوڑھے آدمی</I> </ul> </div> </div></TD>+</TR>+<TR>+<TD><CODE>mkNP</CODE></TD>+<TD><A HREF="#Digits" TITLE="Digits - cardinal or ordinal in digits">Digits</A> <CODE>-></CODE> <A HREF="#N" TITLE="N - common noun">N</A> <CODE>-></CODE> <A HREF="#NP" TITLE="NP - noun phrase (subject or object)">NP</A></TD>+<TD><div class=reveal> <I>5 1 men</I> <div class=popup> <ul> <li>API: <CODE>mkUtt (mkNP (mkDigits n5_Dig (mkDigits n1_Dig)) man_N)</CODE> <li>Afr: <I>5 1 mans</I> <li>Bul: <I>5 1 мъже</I> <li>Cat: <I>5 1 homes</I> <li>Dan: <I>5 1 mænd</I> <li>Dut: <I>5 1 mannen</I> <li>Eng: <I>5 1 men</I> <li>Fin: <I>5 1 miestä</I> <li>Fre: <I>5 1 hommes</I> <li>Ger: <I>5 1 Männer</I> <li>Hin: <I>१५ आदमी</I> <li>Ita: <I>5 1 uomini</I> <li>Lav: <I>5 1 vīrieši</I> <li>Nep: <I>५१ मान्छेहरु</I> <li>Nor: <I>5 1 menn</I> <li>Pes: <I>یک 5 1 مرد</I> <li>Pnb: <I>۱۵ بندے</I> <li>Pol: <I>5 1 mężczyźni</I> <li>Ron: <I>5 1 de oameni</I> <li>Rus: <I>5 1 человеки</I> <li>Snd: <I>۱۵ ماڻھو</I> <li>Spa: <I>5 1 hombres</I> <li>Swe: <I>5 1 män</I> <li>Tha: <I>ชาย๕๑คน</I> <li>Urd: <I>۱۵ آدمی</I> </ul> </div> </div></TD>+</TR>+<TR>+<TD><CODE>mkNP</CODE></TD>+<TD><A HREF="#Card" TITLE="Card - cardinal number">Card</A> <CODE>-></CODE> <A HREF="#CN" TITLE="CN - common noun (without determiner)">CN</A> <CODE>-></CODE> <A HREF="#NP" TITLE="NP - noun phrase (subject or object)">NP</A></TD>+<TD><I>forty-five old men</I></TD>+</TR>+<TR>+<TD><CODE>mkNP</CODE></TD>+<TD><A HREF="#Card" TITLE="Card - cardinal number">Card</A> <CODE>-></CODE> <A HREF="#N" TITLE="N - common noun">N</A> <CODE>-></CODE> <A HREF="#NP" TITLE="NP - noun phrase (subject or object)">NP</A></TD>+<TD><I>forty-five men</I></TD>+</TR>+<TR>+<TD><CODE>mkNP</CODE></TD>+<TD><A HREF="#Pron" TITLE="Pron - personal pronoun">Pron</A> <CODE>-></CODE> <A HREF="#CN" TITLE="CN - common noun (without determiner)">CN</A> <CODE>-></CODE> <A HREF="#NP" TITLE="NP - noun phrase (subject or object)">NP</A></TD>+<TD><div class=reveal> <I>my old man</I> <div class=popup> <ul> <li>API: <CODE>mkUtt (mkNP i_Pron (mkCN old_A man_N))</CODE> <li>Afr: <I>my oud man</I> <li>Bul: <I>моят стар мъж</I> <li>Cat: <I>el meu home vell</I> <li>Dan: <I>min gamle mand</I> <li>Dut: <I>mijn oude man</I> <li>Eng: <I>my old man</I> <li>Fin: <I>minun vanha mieheni</I> <li>Fre: <I>mon vieux homme</I> <li>Ger: <I>mein alter Mann</I> <li>Hin: <I>मेरा बूढ़ा आदमी</I> <li>Ita: <I>il mio vecchio uomo</I> <li>Lav: <I>mans vecais vīrietis</I> <li>Nep: <I>मेरो बुढो मान्छे</I> <li>Nor: <I>min gamle mann</I> <li>Pes: <I>مرد پیر من</I> <li>Pnb: <I>میرا بوڈا بندہ</I> <li>Pol: <I>mój stary mężczyzna</I> <li>Ron: <I>omul vechi meu</I> <li>Rus: <I>моего старый человек</I> <li>Snd: <I>پوڙھی ماڻھو</I> <li>Spa: <I>mi viejo hombre</I> <li>Swe: <I>min gamla man</I> <li>Tha: <I>ชายแก่ของฉัน</I> <li>Urd: <I>میرا بوڑھا آدمی</I> </ul> </div> </div></TD>+</TR>+<TR>+<TD><CODE>mkNP</CODE></TD>+<TD><A HREF="#Pron" TITLE="Pron - personal pronoun">Pron</A> <CODE>-></CODE> <A HREF="#N" TITLE="N - common noun">N</A> <CODE>-></CODE> <A HREF="#NP" TITLE="NP - noun phrase (subject or object)">NP</A></TD>+<TD><div class=reveal> <I>my man</I> <div class=popup> <ul> <li>API: <CODE>mkUtt (mkNP i_Pron man_N)</CODE> <li>Afr: <I>my man</I> <li>Bul: <I>моят мъж</I> <li>Cat: <I>el meu home</I> <li>Dan: <I>min mand</I> <li>Dut: <I>mijn man</I> <li>Eng: <I>my man</I> <li>Fin: <I>minun mieheni</I> <li>Fre: <I>mon homme</I> <li>Ger: <I>mein Mann</I> <li>Hin: <I>मेरा आदमी</I> <li>Ita: <I>il mio uomo</I> <li>Lav: <I>mans vīrietis</I> <li>Nep: <I>मेरो मान्छे</I> <li>Nor: <I>min mann</I> <li>Pes: <I>مرد من</I> <li>Pnb: <I>میرا بندہ</I> <li>Pol: <I>mój mężczyzna</I> <li>Ron: <I>omul meu</I> <li>Rus: <I>моего человек</I> <li>Snd: <I>ماڻھو</I> <li>Spa: <I>mi hombre</I> <li>Swe: <I>min man</I> <li>Tha: <I>ชายของฉัน</I> <li>Urd: <I>میرا آدمی</I> </ul> </div> </div></TD>+</TR>+<TR>+<TD><CODE>mkNP</CODE></TD>+<TD><A HREF="#PN" TITLE="PN - proper name">PN</A> <CODE>-></CODE> <A HREF="#NP" TITLE="NP - noun phrase (subject or object)">NP</A></TD>+<TD><div class=reveal> <I>Paris</I> <div class=popup> <ul> <li>API: <CODE>mkUtt (mkNP paris_PN)</CODE> <li>Afr: <I>Parys</I> <li>Bul: <I>Париж</I> <li>Cat: <I>Paris</I> <li>Dan: <I>Paris</I> <li>Dut: <I>Parijs</I> <li>Eng: <I>Paris</I> <li>Fin: <I>Pariisi</I> <li>Fre: <I>Paris</I> <li>Ger: <I>Paris</I> <li>Hin: <I>पैरिस</I> <li>Ita: <I>Parigi</I> <li>Lav: <I>Parīze</I> <li>Nep: <I>पेरिस</I> <li>Nor: <I>Paris</I> <li>Pes: <I>پاریس</I> <li>Pnb: <I>پیرس</I> <li>Pol: <I>Paryż</I> <li>Ron: <I>Paris</I> <li>Rus: <I>Париж</I> <li>Snd: <I>constant not found: paris_PN</I> <li>Spa: <I>Paris</I> <li>Swe: <I>Paris</I> <li>Tha: <I>ปารีส</I> <li>Urd: <I>پیرس</I> </ul> </div> </div></TD>+</TR>+<TR>+<TD><CODE>mkNP</CODE></TD>+<TD><A HREF="#Pron" TITLE="Pron - personal pronoun">Pron</A> <CODE>-></CODE> <A HREF="#NP" TITLE="NP - noun phrase (subject or object)">NP</A></TD>+<TD><div class=reveal> <I>we</I> <div class=popup> <ul> <li>API: <CODE>mkUtt (mkNP we_Pron)</CODE> <li>Afr: <I>ons</I> <li>Bul: <I>ние</I> <li>Cat: <I>nosaltres</I> <li>Dan: <I>os</I> <li>Dut: <I>we</I> <li>Eng: <I>we</I> <li>Fin: <I>me</I> <li>Fre: <I>nous</I> <li>Ger: <I>wir</I> <li>Hin: <I>हम</I> <li>Ita: <I>noi</I> <li>Lav: <I>mēs</I> <li>Nep: <I>हामीहरु</I> <li>Nor: <I>oss</I> <li>Pes: <I>ما</I> <li>Pnb: <I>اسی</I> <li>Pol: <I>my</I> <li>Ron: <I>noi</I> <li>Rus: <I>нас</I> <li>Snd: <I>اسان</I> <li>Spa: <I>nosotros</I> <li>Swe: <I>oss</I> <li>Tha: <I>เรา</I> <li>Urd: <I>ہم</I> </ul> </div> </div></TD>+</TR>+<TR>+<TD><CODE>mkNP</CODE></TD>+<TD><A 'HREF="#Quant" TITLE="Quant - quantifier ('nucleus' of Det)"'>Quant</A> <CODE>-></CODE> <A HREF="#NP" TITLE="NP - noun phrase (subject or object)">NP</A></TD>+<TD><div class=reveal> <I>this</I> <div class=popup> <ul> <li>API: <CODE>mkUtt (mkNP this_Quant)</CODE> <li>Afr: <I>hierdie</I> <li>Bul: <I>това</I> <li>Cat: <I>aquest</I> <li>Dan: <I>dette</I> <li>Dut: <I>dit</I> <li>Eng: <I>this</I> <li>Fin: <I>tämä</I> <li>Fre: <I>celui-ci</I> <li>Ger: <I>dieses</I> <li>Hin: <I>यह</I> <li>Ita: <I>questo</I> <li>Lav: <I>{s : Str = "šis"; lock_Utt : {} = <>} / {s : Str = "šī";</I> <li>Nep: <I>यो</I> <li>Nor: <I>dette</I> <li>Pes: <I>این</I> <li>Pnb: <I>اے</I> <li>Pol: <I>ten</I> <li>Ron: <I>acesta</I> <li>Rus: <I>это</I> <li>Snd: <I>ھی</I> <li>Spa: <I>este</I> <li>Swe: <I>det här</I> <li>Tha: <I>นี้</I> <li>Urd: <I>یہ</I> </ul> </div> </div></TD>+</TR>+<TR>+<TD><CODE>mkNP</CODE></TD>+<TD><A 'HREF="#Quant" TITLE="Quant - quantifier ('nucleus' of Det)"'>Quant</A> <CODE>-></CODE> <A HREF="#Num" TITLE="Num - number determining element">Num</A> <CODE>-></CODE> <A HREF="#NP" TITLE="NP - noun phrase (subject or object)">NP</A></TD>+<TD><div class=reveal> <I>these five</I> <div class=popup> <ul> <li>API: <CODE>mkUtt (mkNP this_Quant (mkNum (mkNumeral n5_Unit)))</CODE> <li>Afr: <I>hierdie vyf</I> <li>Bul: <I>тези пет</I> <li>Cat: <I>aquests cinc</I> <li>Dan: <I>disse fem</I> <li>Dut: <I>deze vijf</I> <li>Eng: <I>these five</I> <li>Fin: <I>nämä viisi</I> <li>Fre: <I>ces cinq</I> <li>Ger: <I>diese fünf</I> <li>Hin: <I>यह पांच</I> <li>Ita: <I>questi cinque</I> <li>Lav: <I>{s : Str = "šie" ++ "pieci"; lock_Utt : {} = <>} / {s : Str</I> <li>Nep: <I>यी पाँच</I> <li>Nor: <I>disse fem</I> <li>Pes: <I>این پنج</I> <li>Pnb: <I>اے پنج</I> <li>Pol: <I>tych pięciu</I> <li>Ron: <I>aceştia cinci</I> <li>Rus: <I>эти пять</I> <li>Snd: <I>ھی پنج</I> <li>Spa: <I>estos cinco</I> <li>Swe: <I>de här fem</I> <li>Tha: <I>ห้านี้</I> <li>Urd: <I>یہ پانچ</I> </ul> </div> </div></TD>+</TR>+<TR>+<TD><CODE>mkNP</CODE></TD>+<TD><A HREF="#Det" TITLE="Det - determiner phrase">Det</A> <CODE>-></CODE> <A HREF="#NP" TITLE="NP - noun phrase (subject or object)">NP</A></TD>+<TD><div class=reveal> <I>the five best</I> <div class=popup> <ul> <li>API: <CODE>mkUtt (mkNP (mkDet the_Quant (mkNum (mkNumeral n5_Unit)) (mkOrd good_A)))</CODE> <li>Afr: <I>hulle vyf beste</I> <li>Bul: <I>петте най - добри</I> <li>Cat: <I>els cinc millors</I> <li>Dan: <I>de fem bedste</I> <li>Dut: <I>die vijf beste</I> <li>Eng: <I>the five best</I> <li>Fin: <I>ne viisi parhaimmat</I> <li>Fre: <I>les cinq meilleurs</I> <li>Ger: <I>die fünf besten</I> <li>Hin: <I>पांच सब से अच्छा</I> <li>Ita: <I>i cinque migliori</I> <li>Lav: <I>{s : Str = "pieci" ++ "vislabākais"; lock_Utt : {} = <>} / {s : Str</I> <li>Nep: <I>सबभन्दा राम्रो पाँच</I> <li>Nor: <I>de fem beste</I> <li>Pes: <I>پنج خوب ترین</I> <li>Pnb: <I>پنج اچھا</I> <li>Pol: <I>pięciu najlepszych</I> <li>Ron: <I>cei mai buni cinci</I> <li>Rus: <I>пять хорошие</I> <li>Snd: <I>پنج سٺو</I> <li>Spa: <I>los cinco mejores</I> <li>Swe: <I>de fem bästa</I> <li>Tha: <I>ห้าดีที่สุด</I> <li>Urd: <I>پانچ سب سے اچھا</I> </ul> </div> </div></TD>+</TR>+<TR>+<TD><CODE>mkNP</CODE></TD>+<TD><A HREF="#CN" TITLE="CN - common noun (without determiner)">CN</A> <CODE>-></CODE> <A HREF="#NP" TITLE="NP - noun phrase (subject or object)">NP</A></TD>+<TD><div class=reveal> <I>old beer</I> <div class=popup> <ul> <li>API: <CODE>mkUtt (mkNP (mkCN old_A beer_N))</CODE> <li>Afr: <I>oud bier</I> <li>Bul: <I>стара бира</I> <li>Cat: <I>cervesa vell</I> <li>Dan: <I>gammelt øl</I> <li>Dut: <I>oud bier</I> <li>Eng: <I>old beer</I> <li>Fin: <I>vanha olut</I> <li>Fre: <I>de la vieille bière</I> <li>Ger: <I>altes Bier</I> <li>Hin: <I>बूढ़ा बियर</I> <li>Ita: <I>della vecchia birra</I> <li>Lav: <I>vecs alus</I> <li>Nep: <I>बुढो बियर</I> <li>Nor: <I>gammelt øl</I> <li>Pes: <I>آبجوی پیر</I> <li>Pnb: <I>بوڈی شراب</I> <li>Pol: <I>stare piwo</I> <li>Ron: <I>bere veche</I> <li>Rus: <I>старое пиво</I> <li>Snd: <I>پوڙھی شراب</I> <li>Spa: <I>vieja cerveza</I> <li>Swe: <I>gammalt öl</I> <li>Tha: <I>เบียร์แก่</I> <li>Urd: <I>بوڑھا بییر</I> </ul> </div> </div></TD>+</TR>+<TR>+<TD><CODE>mkNP</CODE></TD>+<TD><A HREF="#N" TITLE="N - common noun">N</A> <CODE>-></CODE> <A HREF="#NP" TITLE="NP - noun phrase (subject or object)">NP</A></TD>+<TD><div class=reveal> <I>beer</I> <div class=popup> <ul> <li>API: <CODE>mkUtt (mkNP beer_N)</CODE> <li>Afr: <I>bier</I> <li>Bul: <I>бира</I> <li>Cat: <I>cervesa</I> <li>Dan: <I>øl</I> <li>Dut: <I>bier</I> <li>Eng: <I>beer</I> <li>Fin: <I>olut</I> <li>Fre: <I>de la bière</I> <li>Ger: <I>Bier</I> <li>Hin: <I>बियर</I> <li>Ita: <I>della birra</I> <li>Lav: <I>alus</I> <li>Nep: <I>बियर</I> <li>Nor: <I>øl</I> <li>Pes: <I>آبجو</I> <li>Pnb: <I>شراب</I> <li>Pol: <I>piwo</I> <li>Ron: <I>bere</I> <li>Rus: <I>пиво</I> <li>Snd: <I>شراب</I> <li>Spa: <I>cerveza</I> <li>Swe: <I>öl</I> <li>Tha: <I>เบียร์</I> <li>Urd: <I>بییر</I> </ul> </div> </div></TD>+</TR>+<TR>+<TD><CODE>mkNP</CODE></TD>+<TD><A HREF="#Predet" TITLE="Predet - predeterminer (prefixed Quant)">Predet</A> <CODE>-></CODE> <A HREF="#NP" TITLE="NP - noun phrase (subject or object)">NP</A> <CODE>-></CODE> <A HREF="#NP" TITLE="NP - noun phrase (subject or object)">NP</A></TD>+<TD><div class=reveal> <I>only this woman</I> <div class=popup> <ul> <li>API: <CODE>mkUtt (mkNP only_Predet (mkNP this_Det woman_N))</CODE> <li>Afr: <I>slegs hierdie vrou</I> <li>Bul: <I>само тази жена</I> <li>Cat: <I>nomÈs aquesta dona</I> <li>Dan: <I>kun denne kvinde</I> <li>Dut: <I>slechts deze vrouw</I> <li>Eng: <I>only this woman</I> <li>Fin: <I>vain tämä nainen</I> <li>Fre: <I>seulement cette femme</I> <li>Ger: <I>nur diese Frau</I> <li>Hin: <I>सिर्फ़ यह औरत</I> <li>Ita: <I>soltanto questa donna</I> <li>Lav: <I>tikai šī sieviete</I> <li>Nep: <I>मात्र यो आईमाई</I> <li>Nor: <I>kun denne kvinna</I> <li>Pes: <I>فقط این زن</I> <li>Pnb: <I>صرف اے زنانی</I> <li>Pol: <I>tylko tej kobiety</I> <li>Ron: <I>doar această femeie</I> <li>Rus: <I>единственную эту женщину</I> <li>Snd: <I>صرف ھی استری</I> <li>Spa: <I>solamente esta mujer</I> <li>Swe: <I>bara den här kvinnan</I> <li>Tha: <I>หญิงคนนี้เท่านั้น</I> <li>Urd: <I>صرف یہ عورت</I> </ul> </div> </div></TD>+</TR>+<TR>+<TD><CODE>mkNP</CODE></TD>+<TD><A HREF="#NP" TITLE="NP - noun phrase (subject or object)">NP</A> <CODE>-></CODE> <A HREF="#V2" TITLE="V2 - two-place verb">V2</A> <CODE>-></CODE> <A HREF="#NP" TITLE="NP - noun phrase (subject or object)">NP</A></TD>+<TD><div class=reveal> <I>the man seen</I> <div class=popup> <ul> <li>API: <CODE>mkUtt (mkNP (mkNP the_Det man_N) see_V2)</CODE> <li>Afr: <I>die man gesien</I> <li>Bul: <I>мъжът видян</I> <li>Cat: <I>l' home vist</I> <li>Dan: <I>manden set</I> <li>Dut: <I>de man gezien</I> <li>Eng: <I>the man seen</I> <li>Fin: <I>mies nähtynä</I> <li>Fre: <I>l' homme vu</I> <li>Ger: <I>der Mann gesehen</I> <li>Hin: <I>देखा हुआ आदमी</I> <li>Ita: <I>l' uomo visto</I> <li>Lav: <I>redzējis vīrietis</I> <li>Nep: <I>मान्छे हेर् एको</I> <li>Nor: <I>mannen sett</I> <li>Pes: <I>مرد دیده شده</I> <li>Pnb: <I>ویكھیا بندہ</I> <li>Pol: <I>mężczyzna zobaczony</I> <li>Ron: <I>omul văzut</I> <li>Rus: <I>человек видеть</I> <li>Snd: <I>ڏسیل ماڻھو</I> <li>Spa: <I>el hombre visto</I> <li>Swe: <I>mannen sedd</I> <li>Tha: <I>ชายเห็น</I> <li>Urd: <I>دیكھا ہوا آدمی</I> </ul> </div> </div></TD>+</TR>+<TR>+<TD><CODE>mkNP</CODE></TD>+<TD><A HREF="#NP" TITLE="NP - noun phrase (subject or object)">NP</A> <CODE>-></CODE> <A HREF="#Adv" TITLE="Adv - verb-phrase-modifying adverb">Adv</A> <CODE>-></CODE> <A HREF="#NP" TITLE="NP - noun phrase (subject or object)">NP</A></TD>+<TD><div class=reveal> <I>Paris today</I> <div class=popup> <ul> <li>API: <CODE>mkUtt (mkNP (mkNP paris_PN) today_Adv)</CODE> <li>Afr: <I>Parys vandag</I> <li>Bul: <I>Париж днес</I> <li>Cat: <I>Paris avui</I> <li>Dan: <I>Paris idag</I> <li>Dut: <I>Parijs vandaag</I> <li>Eng: <I>Paris today</I> <li>Fin: <I>Pariisi tänään</I> <li>Fre: <I>Paris aujourd'hui</I> <li>Ger: <I>Paris heute</I> <li>Hin: <I>आज पैरिस</I> <li>Ita: <I>Parigi oggi</I> <li>Lav: <I>Parīze šodien</I> <li>Nep: <I>पेरिस आज</I> <li>Nor: <I>Paris idag</I> <li>Pes: <I>پاریس امروز</I> <li>Pnb: <I>پیرس اج</I> <li>Pol: <I>Paryż dziś</I> <li>Ron: <I>Paris astăzi</I> <li>Rus: <I>Париж сегодня</I> <li>Snd: <I>constant not found: paris_PN</I> <li>Spa: <I>Paris hoy</I> <li>Swe: <I>Paris idag</I> <li>Tha: <I>ปารีสวันนี้</I> <li>Urd: <I>آج پیرس</I> </ul> </div> </div></TD>+</TR>+<TR>+<TD><CODE>mkNP</CODE></TD>+<TD><A HREF="#NP" TITLE="NP - noun phrase (subject or object)">NP</A> <CODE>-></CODE> <A HREF="#RS" TITLE="RS - relative">RS</A> <CODE>-></CODE> <A HREF="#NP" TITLE="NP - noun phrase (subject or object)">NP</A></TD>+<TD><div class=reveal> <I>John , who walks</I> <div class=popup> <ul> <li>API: <CODE>mkUtt (mkNP (mkNP john_PN) (mkRS (mkRCl which_RP (mkVP walk_V))))</CODE> <li>Afr: <I>Jan , wat loop</I> <li>Bul: <I>Джон който ходи</I> <li>Cat: <I>Joan que camina</I> <li>Dan: <I>John , som går</I> <li>Dut: <I>Jan , dat loopt</I> <li>Eng: <I>John , who walks</I> <li>Fin: <I>Jussi , joka kävelee</I> <li>Fre: <I>Jean qui marche</I> <li>Ger: <I>Johann , das geht</I> <li>Hin: <I>जान , जो चलता है</I> <li>Ita: <I>Giovanni che cammina</I> <li>Lav: <I>{s : Str = "Jānis" ++ "," ++ "kurš" ++ "staigā";</I> <li>Nep: <I>जोन , जो हिड्छ</I> <li>Nor: <I>John , som går</I> <li>Pes: <I>جان که راه می رود</I> <li>Pnb: <I>جان جیڑا چلدا اے</I> <li>Pol: <I>Jan , który spaceruje</I> <li>Ron: <I>Ion care merge</I> <li>Rus: <I>Ивана , которого гуляет</I> <li>Snd: <I>جان جھڙا ھلی ٿو</I> <li>Spa: <I>Juan que camina</I> <li>Swe: <I>Johan , som går</I> <li>Tha: <I>จอห์นที่เดิน</I> <li>Urd: <I>جان , جو چلتا ہے</I> </ul> </div> </div></TD>+</TR>+<TR>+<TD><CODE>mkNP</CODE></TD>+<TD><A HREF="#Conj" TITLE="Conj - conjunction">Conj</A> <CODE>-></CODE> <A HREF="#NP" TITLE="NP - noun phrase (subject or object)">NP</A> <CODE>-></CODE> <A HREF="#NP" TITLE="NP - noun phrase (subject or object)">NP</A> <CODE>-></CODE> <A HREF="#NP" TITLE="NP - noun phrase (subject or object)">NP</A></TD>+<TD><div class=reveal> <I>this woman or John</I> <div class=popup> <ul> <li>API: <CODE>mkUtt (mkNP or_Conj (mkNP this_Det woman_N) (mkNP john_PN))</CODE> <li>Afr: <I>hierdie vrou of Jan</I> <li>Bul: <I>тази жена или Джон</I> <li>Cat: <I>aquesta dona o Joan</I> <li>Dan: <I>denne kvinde eller John</I> <li>Dut: <I>deze vrouw of Jan</I> <li>Eng: <I>this woman or John</I> <li>Fin: <I>tämä nainen tai Jussi</I> <li>Fre: <I>cette femme ou Jean</I> <li>Ger: <I>diese Frau oder Johann</I> <li>Hin: <I>यह औरत या जान</I> <li>Ita: <I>questa donna o Giovanni</I> <li>Lav: <I>šī sieviete vai Jānis</I> <li>Nep: <I>यो आईमाई अथवा जोन</I> <li>Nor: <I>denne kvinna eller John</I> <li>Pes: <I>این زن یا جان</I> <li>Pnb: <I>اے زنانی یا جان</I> <li>Pol: <I>ta kobieta lub Jan</I> <li>Ron: <I>această femeie sau Ion</I> <li>Rus: <I>эту женщину или Ивана</I> <li>Snd: <I>ھی استری یا جان</I> <li>Spa: <I>esta mujer o Juan</I> <li>Swe: <I>den här kvinnan eller Johan</I> <li>Tha: <I>หญิงคนนี้หริอจอห์น</I> <li>Urd: <I>یہ عورت یا جان</I> </ul> </div> </div></TD>+</TR>+<TR>+<TD><CODE>mkNP</CODE></TD>+<TD><A HREF="#Conj" TITLE="Conj - conjunction">Conj</A> <CODE>-></CODE> <A HREF="#ListNP">ListNP</A> <CODE>-></CODE> <A HREF="#NP" TITLE="NP - noun phrase (subject or object)">NP</A></TD>+<TD><div class=reveal> <I>this woman , John or I</I> <div class=popup> <ul> <li>API: <CODE>mkUtt (mkNP or_Conj (mkListNP (mkNP this_Det woman_N) (mkListNP (mkNP john_PN) i_NP)))</CODE> <li>Afr: <I>hierdie vrou , Jan of ek</I> <li>Bul: <I>тази жена , Джон или аз</I> <li>Cat: <I>aquesta dona , Joan o mi</I> <li>Dan: <I>denne kvinde , John eller mig</I> <li>Dut: <I>deze vrouw , Jan of ik</I> <li>Eng: <I>this woman , John or I</I> <li>Fin: <I>tämä nainen , Jussi tai minä</I> <li>Fre: <I>cette femme , Jean ou moi</I> <li>Ger: <I>diese Frau , Johann oder ich</I> <li>Hin: <I>यह औरत , जान या मैं</I> <li>Ita: <I>questa donna , Giovanni o me</I> <li>Lav: <I>šī sieviete , Jānis vai es</I> <li>Nep: <I>यो आईमाई , जोन अथवा म</I> <li>Nor: <I>denne kvinna , John eller meg</I> <li>Pes: <I>این زن , جان یا من</I> <li>Pnb: <I>اے زنانی , جان یا میں</I> <li>Pol: <I>ta kobieta , Jan lub ja</I> <li>Ron: <I>această femeie , Ion sau eu</I> <li>Rus: <I>Ивана , меня или эту женщину</I> <li>Snd: <I>ھی استری , جان یا مان</I> <li>Spa: <I>esta mujer , Juan o mí</I> <li>Swe: <I>den här kvinnan , Johan eller mig</I> <li>Tha: <I>หญิงคนนี้จอห์นหริอฉัน</I> <li>Urd: <I>یہ عورت , جان یا میں</I> </ul> </div> </div></TD>+</TR>+<TR>+<TD><CODE>nobody_NP</CODE></TD>+<TD><A HREF="#NP" TITLE="NP - noun phrase (subject or object)">NP</A></TD>+<TD><div class=reveal> <I>nobody</I> <div class=popup> <ul> <li>API: <CODE>mkUtt nobody_NP</CODE> <li>Afr: <I>niemand</I> <li>Bul: <I>constant not found: nobody_NP</I> <li>Cat: <I>ningú</I> <li>Dan: <I>constant not found: nobody_NP</I> <li>Dut: <I>niemand</I> <li>Eng: <I>nobody</I> <li>Fin: <I>ei kukaan</I> <li>Fre: <I>personne</I> <li>Ger: <I>niemand</I> <li>Hin: <I>constant not found: nobody_NP</I> <li>Ita: <I>nessuno</I> <li>Lav: <I>neviens</I> <li>Nep: <I>केही पनी</I> <li>Nor: <I>constant not found: nobody_NP</I> <li>Pes: <I>constant not found: nobody_NP</I> <li>Pnb: <I>كوی نہیں</I> <li>Pol: <I>nikt</I> <li>Ron: <I>nimeni</I> <li>Rus: <I>constant not found: nobody_NP</I> <li>Snd: <I>constant not found: nobody_NP</I> <li>Spa: <I>constant not found: nobody_NP</I> <li>Swe: <I>ingen</I> <li>Tha: <I>ไม่มีใคร</I> <li>Urd: <I>كوی نہیں</I> </ul> </div> </div></TD>+</TR>+<TR>+<TD><CODE>nothing_NP</CODE></TD>+<TD><A HREF="#NP" TITLE="NP - noun phrase (subject or object)">NP</A></TD>+<TD><div class=reveal> <I>nothing</I> <div class=popup> <ul> <li>API: <CODE>mkUtt nothing_NP</CODE> <li>Afr: <I>niks</I> <li>Bul: <I>constant not found: nothing_NP</I> <li>Cat: <I>res</I> <li>Dan: <I>constant not found: nothing_NP</I> <li>Dut: <I>niets</I> <li>Eng: <I>nothing</I> <li>Fin: <I>ei mikään</I> <li>Fre: <I>rien</I> <li>Ger: <I>nichts</I> <li>Hin: <I>constant not found: nothing_NP</I> <li>Ita: <I>niente</I> <li>Lav: <I>neka</I> <li>Nep: <I>केही पनी</I> <li>Nor: <I>constant not found: nothing_NP</I> <li>Pes: <I>constant not found: nothing_NP</I> <li>Pnb: <I>كچھ نیں</I> <li>Pol: <I>nic</I> <li>Ron: <I>nimic</I> <li>Rus: <I>constant not found: nothing_NP</I> <li>Snd: <I>constant not found: nothing_NP</I> <li>Spa: <I>constant not found: nothing_NP</I> <li>Swe: <I>inget</I> <li>Tha: <I>เปล่า</I> <li>Urd: <I>كوی چیز نہیں</I> </ul> </div> </div></TD>+</TR>+<TR>+<TD><CODE>she_NP</CODE></TD>+<TD><A HREF="#NP" TITLE="NP - noun phrase (subject or object)">NP</A></TD>+<TD><div class=reveal> <I>she</I> <div class=popup> <ul> <li>API: <CODE>mkUtt she_NP</CODE> <li>Afr: <I>sy</I> <li>Bul: <I>тя</I> <li>Cat: <I>ella</I> <li>Dan: <I>hende</I> <li>Dut: <I>ze</I> <li>Eng: <I>she</I> <li>Fin: <I>hän</I> <li>Fre: <I>elle</I> <li>Ger: <I>sie</I> <li>Hin: <I>वह</I> <li>Ita: <I>lei</I> <li>Lav: <I>viņa</I> <li>Nep: <I>उनी</I> <li>Nor: <I>henne</I> <li>Pes: <I>او</I> <li>Pnb: <I>او</I> <li>Pol: <I>ona</I> <li>Ron: <I>ea</I> <li>Rus: <I>её</I> <li>Snd: <I>ھو۶</I> <li>Spa: <I>ella</I> <li>Swe: <I>henne</I> <li>Tha: <I>หล่อน</I> <li>Urd: <I>وہ</I> </ul> </div> </div></TD>+</TR>+<TR>+<TD><CODE>somebody_NP</CODE></TD>+<TD><A HREF="#NP" TITLE="NP - noun phrase (subject or object)">NP</A></TD>+<TD><div class=reveal> <I>somebody</I> <div class=popup> <ul> <li>API: <CODE>mkUtt somebody_NP</CODE> <li>Afr: <I>iemand</I> <li>Bul: <I>някой</I> <li>Cat: <I>alg˙</I> <li>Dan: <I>nogen</I> <li>Dut: <I>iemand</I> <li>Eng: <I>somebody</I> <li>Fin: <I>joku</I> <li>Fre: <I>quelqu'un</I> <li>Ger: <I>jemand</I> <li>Hin: <I>कोई</I> <li>Ita: <I>qualcuno</I> <li>Lav: <I>kāds</I> <li>Nep: <I>कोही</I> <li>Nor: <I>noen</I> <li>Pes: <I>constant not found: somebody_NP</I> <li>Pnb: <I>كوی</I> <li>Pol: <I>ktoś</I> <li>Ron: <I>cineva</I> <li>Rus: <I>кого-то</I> <li>Snd: <I>constant not found: somebody_NP</I> <li>Spa: <I>algún</I> <li>Swe: <I>någon</I> <li>Tha: <I>บางคน</I> <li>Urd: <I>كوی</I> </ul> </div> </div></TD>+</TR>+<TR>+<TD><CODE>something_NP</CODE></TD>+<TD><A HREF="#NP" TITLE="NP - noun phrase (subject or object)">NP</A></TD>+<TD><div class=reveal> <I>something</I> <div class=popup> <ul> <li>API: <CODE>mkUtt something_NP</CODE> <li>Afr: <I>iets</I> <li>Bul: <I>нещо</I> <li>Cat: <I>quelcom</I> <li>Dan: <I>noget</I> <li>Dut: <I>iets</I> <li>Eng: <I>something</I> <li>Fin: <I>jokin</I> <li>Fre: <I>quelque chose</I> <li>Ger: <I>etwas</I> <li>Hin: <I>कोई चीज़</I> <li>Ita: <I>qualche cosa</I> <li>Lav: <I>kaut ka</I> <li>Nep: <I>केही कुरा</I> <li>Nor: <I>noe</I> <li>Pes: <I>constant not found: something_NP</I> <li>Pnb: <I>كوی شے</I> <li>Pol: <I>coś</I> <li>Ron: <I>ceva</I> <li>Rus: <I>что-то</I> <li>Snd: <I>constant not found: something_NP</I> <li>Spa: <I>algo</I> <li>Swe: <I>något</I> <li>Tha: <I>บางสิ่ง</I> <li>Urd: <I>كوی چیز</I> </ul> </div> </div></TD>+</TR>+<TR>+<TD><CODE>that_NP</CODE></TD>+<TD><A HREF="#NP" TITLE="NP - noun phrase (subject or object)">NP</A></TD>+<TD><div class=reveal> <I>that</I> <div class=popup> <ul> <li>API: <CODE>mkUtt that_NP</CODE> <li>Afr: <I>daardie</I> <li>Bul: <I>онова</I> <li>Cat: <I>aquell</I> <li>Dan: <I>det der</I> <li>Dut: <I>dat</I> <li>Eng: <I>that</I> <li>Fin: <I>tuo</I> <li>Fre: <I>celui-là</I> <li>Ger: <I>jenes</I> <li>Hin: <I>वह</I> <li>Ita: <I>quello</I> <li>Lav: <I>tas / tā</I> <li>Nep: <I>त्ये</I> <li>Nor: <I>det der</I> <li>Pes: <I>آن</I> <li>Pnb: <I>وہ</I> <li>Pol: <I>tamten</I> <li>Ron: <I>acela</I> <li>Rus: <I>то</I> <li>Snd: <I>جیڪو</I> <li>Spa: <I>ese</I> <li>Swe: <I>det där</I> <li>Tha: <I>นั้น</I> <li>Urd: <I>وہ</I> </ul> </div> </div></TD>+</TR>+<TR>+<TD><CODE>these_NP</CODE></TD>+<TD><A HREF="#NP" TITLE="NP - noun phrase (subject or object)">NP</A></TD>+<TD><div class=reveal> <I>these</I> <div class=popup> <ul> <li>API: <CODE>mkUtt these_NP</CODE> <li>Afr: <I>hierdie</I> <li>Bul: <I>тези</I> <li>Cat: <I>aquests</I> <li>Dan: <I>disse</I> <li>Dut: <I>deze</I> <li>Eng: <I>these</I> <li>Fin: <I>nämä</I> <li>Fre: <I>ceux-ci</I> <li>Ger: <I>diese</I> <li>Hin: <I>यह</I> <li>Ita: <I>questi</I> <li>Lav: <I>šie / šīs</I> <li>Nep: <I>यी</I> <li>Nor: <I>disse</I> <li>Pes: <I>این</I> <li>Pnb: <I>اے</I> <li>Pol: <I>ci</I> <li>Ron: <I>aceştia</I> <li>Rus: <I>эти</I> <li>Snd: <I>ھی</I> <li>Spa: <I>estos</I> <li>Swe: <I>de här</I> <li>Tha: <I>นี้</I> <li>Urd: <I>یہ</I> </ul> </div> </div></TD>+</TR>+<TR>+<TD><CODE>they_NP</CODE></TD>+<TD><A HREF="#NP" TITLE="NP - noun phrase (subject or object)">NP</A></TD>+<TD><div class=reveal> <I>they</I> <div class=popup> <ul> <li>API: <CODE>mkUtt they_NP</CODE> <li>Afr: <I>hulle</I> <li>Bul: <I>те</I> <li>Cat: <I>elles</I> <li>Dan: <I>dem</I> <li>Dut: <I>ze</I> <li>Eng: <I>they</I> <li>Fin: <I>he</I> <li>Fre: <I>eux</I> <li>Ger: <I>sie</I> <li>Hin: <I>वह</I> <li>Ita: <I>loro</I> <li>Lav: <I>viņi / viņas</I> <li>Nep: <I>उनीहरु</I> <li>Nor: <I>dem</I> <li>Pes: <I>آن ها</I> <li>Pnb: <I>او</I> <li>Pol: <I>oni</I> <li>Ron: <I>ei</I> <li>Rus: <I>их</I> <li>Snd: <I>اھی</I> <li>Spa: <I>ellos</I> <li>Swe: <I>dem</I> <li>Tha: <I>พวกเขา</I> <li>Urd: <I>وہ</I> </ul> </div> </div></TD>+</TR>+<TR>+<TD><CODE>this_NP</CODE></TD>+<TD><A HREF="#NP" TITLE="NP - noun phrase (subject or object)">NP</A></TD>+<TD><div class=reveal> <I>this</I> <div class=popup> <ul> <li>API: <CODE>mkUtt this_NP</CODE> <li>Afr: <I>hierdie</I> <li>Bul: <I>това</I> <li>Cat: <I>aquest</I> <li>Dan: <I>dette</I> <li>Dut: <I>dit</I> <li>Eng: <I>this</I> <li>Fin: <I>tämä</I> <li>Fre: <I>celui-ci</I> <li>Ger: <I>dieses</I> <li>Hin: <I>यह</I> <li>Ita: <I>questo</I> <li>Lav: <I>šis / šī</I> <li>Nep: <I>यो</I> <li>Nor: <I>dette</I> <li>Pes: <I>این</I> <li>Pnb: <I>اے</I> <li>Pol: <I>ten</I> <li>Ron: <I>acesta</I> <li>Rus: <I>это</I> <li>Snd: <I>ھی</I> <li>Spa: <I>este</I> <li>Swe: <I>det här</I> <li>Tha: <I>นี้</I> <li>Urd: <I>یہ</I> </ul> </div> </div></TD>+</TR>+<TR>+<TD><CODE>those_NP</CODE></TD>+<TD><A HREF="#NP" TITLE="NP - noun phrase (subject or object)">NP</A></TD>+<TD><div class=reveal> <I>those</I> <div class=popup> <ul> <li>API: <CODE>mkUtt those_NP</CODE> <li>Afr: <I>daardie</I> <li>Bul: <I>онези</I> <li>Cat: <I>aquells</I> <li>Dan: <I>de der</I> <li>Dut: <I>die</I> <li>Eng: <I>those</I> <li>Fin: <I>nuo</I> <li>Fre: <I>ceux-là</I> <li>Ger: <I>jene</I> <li>Hin: <I>वह</I> <li>Ita: <I>quelli</I> <li>Lav: <I>tie / tās</I> <li>Nep: <I>यिनीहरु</I> <li>Nor: <I>de der</I> <li>Pes: <I>آن</I> <li>Pnb: <I>وہ</I> <li>Pol: <I>tamci</I> <li>Ron: <I>aceia</I> <li>Rus: <I>те</I> <li>Snd: <I>جیڪو</I> <li>Spa: <I>esos</I> <li>Swe: <I>de där</I> <li>Tha: <I>นั้น</I> <li>Urd: <I>وہ</I> </ul> </div> </div></TD>+</TR>+<TR>+<TD><CODE>we_NP</CODE></TD>+<TD><A HREF="#NP" TITLE="NP - noun phrase (subject or object)">NP</A></TD>+<TD><div class=reveal> <I>we</I> <div class=popup> <ul> <li>API: <CODE>mkUtt we_NP</CODE> <li>Afr: <I>ons</I> <li>Bul: <I>ние</I> <li>Cat: <I>nosaltres</I> <li>Dan: <I>os</I> <li>Dut: <I>we</I> <li>Eng: <I>we</I> <li>Fin: <I>me</I> <li>Fre: <I>nous</I> <li>Ger: <I>wir</I> <li>Hin: <I>हम</I> <li>Ita: <I>noi</I> <li>Lav: <I>mēs</I> <li>Nep: <I>हामीहरु</I> <li>Nor: <I>oss</I> <li>Pes: <I>ما</I> <li>Pnb: <I>اسی</I> <li>Pol: <I>my</I> <li>Ron: <I>noi</I> <li>Rus: <I>нас</I> <li>Snd: <I>اسان</I> <li>Spa: <I>nosotros</I> <li>Swe: <I>oss</I> <li>Tha: <I>เรา</I> <li>Urd: <I>ہم</I> </ul> </div> </div></TD>+</TR>+<TR>+<TD><CODE>youPl_NP</CODE></TD>+<TD><A HREF="#NP" TITLE="NP - noun phrase (subject or object)">NP</A></TD>+<TD><div class=reveal> <I>you</I> <div class=popup> <ul> <li>API: <CODE>mkUtt youPl_NP</CODE> <li>Afr: <I>julle</I> <li>Bul: <I>вие</I> <li>Cat: <I>vosaltres</I> <li>Dan: <I>jer</I> <li>Dut: <I>jullie</I> <li>Eng: <I>you</I> <li>Fin: <I>te</I> <li>Fre: <I>vous</I> <li>Ger: <I>ihr</I> <li>Hin: <I>तुम</I> <li>Ita: <I>voi</I> <li>Lav: <I>jūs</I> <li>Nep: <I>तिमीहरु</I> <li>Nor: <I>dere</I> <li>Pes: <I>شما</I> <li>Pnb: <I>تسی</I> <li>Pol: <I>wy</I> <li>Ron: <I>voi</I> <li>Rus: <I>вас</I> <li>Snd: <I>توھان</I> <li>Spa: <I>vosotros</I> <li>Swe: <I>er</I> <li>Tha: <I>พวกคุณ</I> <li>Urd: <I>تم</I> </ul> </div> </div></TD>+</TR>+<TR>+<TD><CODE>youPol_NP</CODE></TD>+<TD><A HREF="#NP" TITLE="NP - noun phrase (subject or object)">NP</A></TD>+<TD><div class=reveal> <I>you</I> <div class=popup> <ul> <li>API: <CODE>mkUtt youPol_NP</CODE> <li>Afr: <I>u</I> <li>Bul: <I>вие</I> <li>Cat: <I>vosté</I> <li>Dan: <I>Dem</I> <li>Dut: <I>u</I> <li>Eng: <I>you</I> <li>Fin: <I>te</I> <li>Fre: <I>vous</I> <li>Ger: <I>Sie</I> <li>Hin: <I>आप</I> <li>Ita: <I>Lei</I> <li>Lav: <I>jūs</I> <li>Nep: <I>तपाई</I> <li>Nor: <I>Dere</I> <li>Pes: <I>شما</I> <li>Pnb: <I>تسی</I> <li>Pol: <I>ty</I> <li>Ron: <I>dumneavoastră</I> <li>Rus: <I>вас</I> <li>Snd: <I>توھان</I> <li>Spa: <I>usted</I> <li>Swe: <I>er</I> <li>Tha: <I>คุณ</I> <li>Urd: <I>آپ</I> </ul> </div> </div></TD>+</TR>+<TR>+<TD><CODE>you_NP</CODE></TD>+<TD><A HREF="#NP" TITLE="NP - noun phrase (subject or object)">NP</A></TD>+<TD><div class=reveal> <I>you</I> <div class=popup> <ul> <li>API: <CODE>mkUtt you_NP</CODE> <li>Afr: <I>jy</I> <li>Bul: <I>ти</I> <li>Cat: <I>tu</I> <li>Dan: <I>dig</I> <li>Dut: <I>je</I> <li>Eng: <I>you</I> <li>Fin: <I>sinä</I> <li>Fre: <I>toi</I> <li>Ger: <I>du</I> <li>Hin: <I>तू</I> <li>Ita: <I>te</I> <li>Lav: <I>tu</I> <li>Nep: <I>तिमी</I> <li>Nor: <I>deg</I> <li>Pes: <I>تو</I> <li>Pnb: <I>توں</I> <li>Pol: <I>ty</I> <li>Ron: <I>tu</I> <li>Rus: <I>тебя</I> <li>Snd: <I>تون</I> <li>Spa: <I>tí</I> <li>Swe: <I>dig</I> <li>Tha: <I>คุณ</I> <li>Urd: <I>تو</I> </ul> </div> </div></TD>+</TR>+</TABLE>++<A NAME="Num"></A>+<H2>Num - number determining element</H2>++<TABLE BORDER="1" CELLPADDING="4">+<TR>+<TH>Function</TH>+<TH>Type</TH>+<TH COLSPAN="2">Example</TH>+</TR>+<TR>+<TD><CODE>mkNum</CODE></TD>+<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#Num" TITLE="Num - number determining element">Num</A></TD>+<TD><I>thirty-five (given by "35"; range 1-999)</I></TD>+</TR>+<TR>+<TD><CODE>mkNum</CODE></TD>+<TD><A HREF="#Numeral" TITLE="Numeral - cardinal or ordinal in words">Numeral</A> <CODE>-></CODE> <A HREF="#Num" TITLE="Num - number determining element">Num</A></TD>+<TD><div class=reveal> <I>twenty</I> <div class=popup> <ul> <li>API: <CODE>mkNum (mkNumeral (tenfoldSub100 n2_Unit))</CODE> <li>Afr: <I>twintig</I> <li>Bul: <I>двадесетима</I> <li>Cat: <I>vint</I> <li>Dan: <I>tyve</I> <li>Dut: <I>twintig</I> <li>Eng: <I>twenty</I> <li>Fin: <I>kaksikymmentä</I> <li>Fre: <I>vingt</I> <li>Ger: <I>zwanzig</I> <li>Hin: <I>बीस</I> <li>Ita: <I>venti</I> <li>Lav: <I>divdesmit</I> <li>Nep: <I>बीस</I> <li>Nor: <I>tjue</I> <li>Pes: <I>بیست</I> <li>Pnb: <I>وی</I> <li>Pol: <I>dwadzieścia</I> <li>Ron: <I>douăzeci</I> <li>Rus: <I>двадцать</I> <li>Snd: <I>ویھ</I> <li>Spa: <I>veinte</I> <li>Swe: <I>tjugo</I> <li>Tha: <I>ยี่สิบ</I> <li>Urd: <I>بیس</I> </ul> </div> </div></TD>+</TR>+<TR>+<TD><CODE>mkNum</CODE></TD>+<TD><A HREF="#Digits" TITLE="Digits - cardinal or ordinal in digits">Digits</A> <CODE>-></CODE> <A HREF="#Num" TITLE="Num - number determining element">Num</A></TD>+<TD><div class=reveal> <I>2 1</I> <div class=popup> <ul> <li>API: <CODE>mkNum (mkDigits n2_Dig (mkDigits n1_Dig))</CODE> <li>Afr: <I>2 1</I> <li>Bul: <I>2 1</I> <li>Cat: <I>2 1</I> <li>Dan: <I>2 1</I> <li>Dut: <I>2 1</I> <li>Eng: <I>2 1</I> <li>Fin: <I>2 1</I> <li>Fre: <I>2 1</I> <li>Ger: <I>2 1</I> <li>Hin: <I>१२</I> <li>Ita: <I>2 1</I> <li>Lav: <I>2 1</I> <li>Nep: <I>२१</I> <li>Nor: <I>2 1</I> <li>Pes: <I>2 1</I> <li>Pnb: <I>۱۲</I> <li>Pol: <I>2 1</I> <li>Ron: <I>2 1</I> <li>Rus: <I>2 1</I> <li>Snd: <I>۱۲</I> <li>Spa: <I>2 1</I> <li>Swe: <I>2 1</I> <li>Tha: <I>๒๑</I> <li>Urd: <I>۱۲</I> </ul> </div> </div></TD>+</TR>+<TR>+<TD><CODE>mkNum</CODE></TD>+<TD><A HREF="#Digit">Digit</A> <CODE>-></CODE> <A HREF="#Num" TITLE="Num - number determining element">Num</A></TD>+<TD><I>five</I></TD>+</TR>+<TR>+<TD><CODE>mkNum</CODE></TD>+<TD><A HREF="#Card" TITLE="Card - cardinal number">Card</A> <CODE>-></CODE> <A HREF="#Num" TITLE="Num - number determining element">Num</A></TD>+<TD><div class=reveal> <I>almost five</I> <div class=popup> <ul> <li>API: <CODE>mkNum (mkCard almost_AdN (mkCard (mkNumeral n5_Unit)))</CODE> <li>Afr: <I>byna vyf</I> <li>Bul: <I>почти петима</I> <li>Cat: <I>{s = table CommonRomance.Gender {</I> <li>Dan: <I>næsten fem</I> <li>Dut: <I>bijna vijf</I> <li>Eng: <I>almost five</I> <li>Fin: <I>melkein viisi</I> <li>Fre: <I>presque cinq</I> <li>Ger: <I>fast fünf</I> <li>Hin: <I>तक़रीबन पांच</I> <li>Ita: <I>quasi cinque</I> <li>Lav: <I>gandrīz pieci</I> <li>Nep: <I>झण्डै पाँच</I> <li>Nor: <I>nesten fem</I> <li>Pes: <I>تقریباً پنج</I> <li>Pnb: <I>تقریبا پنج</I> <li>Pol: <I>prawie pięć</I> <li>Ron: <I>aproape cinci</I> <li>Rus: <I>почти пять</I> <li>Snd: <I>گھڻو ڪری پنج</I> <li>Spa: <I>casi cinco</I> <li>Swe: <I>nästan fem</I> <li>Tha: <I>เกิอบห้า</I> <li>Urd: <I>تقریبا پانچ</I> </ul> </div> </div></TD>+</TR>+<TR>+<TD><CODE>mkNum</CODE></TD>+<TD><A HREF="#AdN" TITLE="AdN - numeral-modifying adverb">AdN</A> <CODE>-></CODE> <A HREF="#Card" TITLE="Card - cardinal number">Card</A> <CODE>-></CODE> <A HREF="#Num" TITLE="Num - number determining element">Num</A></TD>+<TD><div class=reveal> <I>almost five</I> <div class=popup> <ul> <li>API: <CODE>mkNum (mkCard almost_AdN (mkCard (mkNumeral n5_Unit)))</CODE> <li>Afr: <I>byna vyf</I> <li>Bul: <I>почти петима</I> <li>Cat: <I>{s = table CommonRomance.Gender {</I> <li>Dan: <I>næsten fem</I> <li>Dut: <I>bijna vijf</I> <li>Eng: <I>almost five</I> <li>Fin: <I>melkein viisi</I> <li>Fre: <I>presque cinq</I> <li>Ger: <I>fast fünf</I> <li>Hin: <I>तक़रीबन पांच</I> <li>Ita: <I>quasi cinque</I> <li>Lav: <I>gandrīz pieci</I> <li>Nep: <I>झण्डै पाँच</I> <li>Nor: <I>nesten fem</I> <li>Pes: <I>تقریباً پنج</I> <li>Pnb: <I>تقریبا پنج</I> <li>Pol: <I>prawie pięć</I> <li>Ron: <I>aproape cinci</I> <li>Rus: <I>почти пять</I> <li>Snd: <I>گھڻو ڪری پنج</I> <li>Spa: <I>casi cinco</I> <li>Swe: <I>nästan fem</I> <li>Tha: <I>เกิอบห้า</I> <li>Urd: <I>تقریبا پانچ</I> </ul> </div> </div></TD>+</TR>+<TR>+<TD><CODE>pluralNum</CODE></TD>+<TD><A HREF="#Num" TITLE="Num - number determining element">Num</A></TD>+<TD><I>plural</I></TD>+</TR>+<TR>+<TD><CODE>singularNum</CODE></TD>+<TD><A HREF="#Num" TITLE="Num - number determining element">Num</A></TD>+<TD><I>singular</I></TD>+</TR>+</TABLE>++<A NAME="Numeral"></A>+<H2>Numeral - cardinal or ordinal in words</H2>++<TABLE BORDER="1" CELLPADDING="4">+<TR>+<TH>Function</TH>+<TH>Type</TH>+<TH COLSPAN="2">Example</TH>+</TR>+<TR>+<TD><CODE>mkNumeral</CODE></TD>+<TD><A HREF="#Unit">Unit</A> <CODE>-></CODE> <A HREF="#Numeral" TITLE="Numeral - cardinal or ordinal in words">Numeral</A></TD>+<TD><I>eight (coerce 1..9)</I></TD>+</TR>+<TR>+<TD><CODE>mkNumeral</CODE></TD>+<TD><A HREF="#Sub100">Sub100</A> <CODE>-></CODE> <A HREF="#Numeral" TITLE="Numeral - cardinal or ordinal in words">Numeral</A></TD>+<TD><I>twenty-five (coerce 1..99)</I></TD>+</TR>+<TR>+<TD><CODE>mkNumeral</CODE></TD>+<TD><A HREF="#Sub1000">Sub1000</A> <CODE>-></CODE> <A HREF="#Numeral" TITLE="Numeral - cardinal or ordinal in words">Numeral</A></TD>+<TD><div class=reveal> <I>nine hundred and ninety - nine</I> <div class=popup> <ul> <li>API: <CODE>mkNumeral (mkSub1000 n9_Unit (mkSub100 n9_Unit n9_Unit))</CODE> <li>Afr: <I>negehonderdnegeënnegentig</I> <li>Bul: <I>деветстотин деветдесет и деветима</I> <li>Cat: <I>nou -cents noranta- nou</I> <li>Dan: <I>ni hundrede og ni og halvfems</I> <li>Dut: <I>negenhonderdnegenennegentig</I> <li>Eng: <I>nine hundred and ninety - nine</I> <li>Fin: <I>yhdeksänsataayhdeksänkymmentäyhdeksän</I> <li>Fre: <I>neuf cent quatre-vingt - dix-neuf</I> <li>Ger: <I>neunhundertneunundneunzig</I> <li>Hin: <I>नौ सौ निन्यानवे</I> <li>Ita: <I>novecentonovantanove</I> <li>Lav: <I>deviņi simti deviņdesmit deviņi</I> <li>Nep: <I>नौ सय उनान्सय</I> <li>Nor: <I>ni hundre og nitti ni</I> <li>Pes: <I>نهصد و نود و نه</I> <li>Pnb: <I>نو سو نڑینوے</I> <li>Pol: <I>dziewięćset dziewięćdziesiąt dziewięć</I> <li>Ron: <I>nouă sute nouăzeci şi nouă</I> <li>Rus: <I>девятьсот девяносто девять</I> <li>Snd: <I>نو سو نوانوی</I> <li>Spa: <I>novecientos noventa y nueve</I> <li>Swe: <I>niohundra nittionio</I> <li>Tha: <I>เก้าร้อยเก้าสิบเก้า</I> <li>Urd: <I>نو سو ننانوے</I> </ul> </div> </div></TD>+</TR>+<TR>+<TD><CODE>mkNumeral</CODE></TD>+<TD><A HREF="#Sub1000">Sub1000</A> <CODE>-></CODE> <A HREF="#Sub1000">Sub1000</A> <CODE>-></CODE> <A HREF="#Numeral" TITLE="Numeral - cardinal or ordinal in words">Numeral</A></TD>+<TD><div class=reveal> <I>nine hundred and ninety - nine thousand nine hundred and ninety - nine</I> <div class=popup> <ul> <li>API: <CODE>mkNumeral (mkSub1000 n9_Unit (mkSub100 n9_Unit n9_Unit)) (mkSub1000 n9_Unit (mkSub100 n9_Unit n9_Unit))</CODE> <li>Afr: <I>negehonderdnegeënnegentigduisend negehonderdnegeënnegentig</I> <li>Bul: <I>деветстотин деветдесет и девет хиляди деветстотин деветдесет и деветима</I> <li>Cat: <I>nou -cents noranta- nou mil nou -cents noranta- nou</I> <li>Dan: <I>ni hundrede og ni og halvfems tusind og ni hundrede og ni og halvfems</I> <li>Dut: <I>negenhonderdnegenennegentigduizend negenhonderdnegenennegentig</I> <li>Eng: <I>nine hundred and ninety - nine thousand nine hundred and ninety - nine</I> <li>Fin: <I>yhdeksänsataayhdeksänkymmentäyhdeksäntuhatta yhdeksänsataayhdeksänkymmentäyhdeksän</I> <li>Fre: <I>neuf cent quatre-vingt - dix-neuf mille neuf cent quatre-vingt - dix-neuf</I> <li>Ger: <I>neunhundertneunundneunzigtausend neunhundertneunundneunzig</I> <li>Hin: <I>नौ लाख निन्यानवे हज़ार नौ सौ निन्यानवे</I> <li>Ita: <I>novecentonovantanovemila e novecentonovantanove</I> <li>Lav: <I>deviņi simti deviņdesmit deviņi tūkstoši deviņi simti deviņdesmit deviņi</I> <li>Nep: <I>नौ लाख उनान्सय हजार नौ सय उनान्सय</I> <li>Nor: <I>ni hundre og nitti ni tusen og ni hundre og nitti ni</I> <li>Pes: <I>نهصد و نود و نه هزار و نهصد و نود و نه</I> <li>Pnb: <I>نو لكھ نڑینوے ہزار نو سو نڑینوے</I> <li>Pol: <I>dziewięćset dziewięćdziesiąt dziewięć tysięcy dziewięćset dziewięćdziesiąt dziewięć</I> <li>Ron: <I>nouă sute nouăzeci şi nouă de mii nouă sute nouăzeci şi nouă</I> <li>Rus: <I>девятьсот девяносто девять тысяч девятьсот девяносто девять</I> <li>Snd: <I>نو lک نوانوی ھزار نو سو نوانوی</I> <li>Spa: <I>novecientos noventa y nueve mil novecientos noventa y nueve</I> <li>Swe: <I>niohundra nittioniotusen niohundra nittionio</I> <li>Tha: <I>เก้าแสนเก้าหมื่นเก้าพันเก้าร้อยเก้าสิบเก้า</I> <li>Urd: <I>نو لاكھ ننانوے ہزار نو سو ننانوے</I> </ul> </div> </div></TD>+</TR>+<TR>+<TD><CODE>mkNumeral</CODE></TD>+<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#Numeral" TITLE="Numeral - cardinal or ordinal in words">Numeral</A></TD>+<TD><I>thirty-five (given by "35"; range 1-999)</I></TD>+</TR>+<TR>+<TD><CODE>thousandfoldNumeral</CODE></TD>+<TD><A HREF="#Sub1000">Sub1000</A> <CODE>-></CODE> <A HREF="#Numeral" TITLE="Numeral - cardinal or ordinal in words">Numeral</A></TD>+<TD><div class=reveal> <I>nine hundred and ninety - nine thousand</I> <div class=popup> <ul> <li>API: <CODE>thousandfoldNumeral (mkSub1000 n9_Unit (mkSub100 n9_Unit n9_Unit))</CODE> <li>Afr: <I>negehonderdnegeënnegentigduisend</I> <li>Bul: <I>деветстотин деветдесет и девет хиляди</I> <li>Cat: <I>nou -cents noranta- nou mil</I> <li>Dan: <I>ni hundrede og ni og halvfems tusind</I> <li>Dut: <I>negenhonderdnegenennegentigduizend</I> <li>Eng: <I>nine hundred and ninety - nine thousand</I> <li>Fin: <I>yhdeksänsataayhdeksänkymmentäyhdeksäntuhatta</I> <li>Fre: <I>neuf cent quatre-vingt - dix-neuf mille</I> <li>Ger: <I>neunhundertneunundneunzigtausend</I> <li>Hin: <I>नौ लाख निन्यानवे हज़ार</I> <li>Ita: <I>novecentonovantanovemila</I> <li>Lav: <I>deviņi simti deviņdesmit deviņi tūkstoši</I> <li>Nep: <I>नौ लाख उनान्सय हजार</I> <li>Nor: <I>ni hundre og nitti ni tusen</I> <li>Pes: <I>نهصد و نود و نه هزار</I> <li>Pnb: <I>نو لكھ نڑینوے ہزار</I> <li>Pol: <I>dziewięćset dziewięćdziesiąt dziewięć tysięcy</I> <li>Ron: <I>nouă sute nouăzeci şi nouă de mii</I> <li>Rus: <I>девятьсот девяносто девять тысяч</I> <li>Snd: <I>نو lک نوانوی ھزار</I> <li>Spa: <I>novecientos noventa y nueve mil</I> <li>Swe: <I>niohundra nittionio tusen</I> <li>Tha: <I>เก้าแสนเก้าหมื่นเก้าพัน</I> <li>Urd: <I>نو لاكھ ننانوے ہزار</I> </ul> </div> </div></TD>+</TR>+</TABLE>++<A NAME="Ord"></A>+<H2>Ord - ordinal number (used in Det)</H2>++<TABLE BORDER="1" CELLPADDING="4">+<TR>+<TH>Function</TH>+<TH>Type</TH>+<TH COLSPAN="2">Example</TH>+</TR>+<TR>+<TD><CODE>mkOrd</CODE></TD>+<TD><A HREF="#Numeral" TITLE="Numeral - cardinal or ordinal in words">Numeral</A> <CODE>-></CODE> <A HREF="#Ord" TITLE="Ord - ordinal number (used in Det)">Ord</A></TD>+<TD><I>twentieth</I></TD>+</TR>+<TR>+<TD><CODE>mkOrd</CODE></TD>+<TD><A HREF="#Digits" TITLE="Digits - cardinal or ordinal in digits">Digits</A> <CODE>-></CODE> <A HREF="#Ord" TITLE="Ord - ordinal number (used in Det)">Ord</A></TD>+<TD><I>51st</I></TD>+</TR>+<TR>+<TD><CODE>mkOrd</CODE></TD>+<TD><A HREF="#Digit">Digit</A> <CODE>-></CODE> <A HREF="#Ord" TITLE="Ord - ordinal number (used in Det)">Ord</A></TD>+<TD><I>fifth</I></TD>+</TR>+<TR>+<TD><CODE>mkOrd</CODE></TD>+<TD><A HREF="#A" TITLE="A - one-place adjective">A</A> <CODE>-></CODE> <A HREF="#Ord" TITLE="Ord - ordinal number (used in Det)">Ord</A></TD>+<TD><div class=reveal> <I>smallest</I> <div class=popup> <ul> <li>API: <CODE>mkOrd small_A</CODE> <li>Afr: <I>kleinste</I> <li>Bul: <I>най - малък</I> <li>Cat: <I>més petit</I> <li>Dan: <I>mindste</I> <li>Dut: <I>kleinst</I> <li>Eng: <I>smallest</I> <li>Fin: <I>pienin</I> <li>Fre: <I>plus petit</I> <li>Ger: <I>kleinst</I> <li>Hin: <I>सब से छोटा</I> <li>Ita: <I>più piccolo</I> <li>Lav: <I>vismazākais</I> <li>Nep: <I>सबभन्दा सानो</I> <li>Nor: <I>minste</I> <li>Pes: <I>کوچک ترین</I> <li>Pnb: <I>چھوٹا</I> <li>Pol: <I>najmniejszy</I> <li>Ron: <I>cel mai mic</I> <li>Rus: <I>маленький</I> <li>Snd: <I>ننڍو</I> <li>Spa: <I>más pequeño</I> <li>Swe: <I>minsta</I> <li>Tha: <I>เล็กที่สุด</I> <li>Urd: <I>سب سے چھوٹا</I> </ul> </div> </div></TD>+</TR>+</TABLE>++<A NAME="PConj"></A>+<H2>PConj - phrase-beginning conjunction</H2>++<TABLE BORDER="1" CELLPADDING="4">+<TR>+<TH>Function</TH>+<TH>Type</TH>+<TH COLSPAN="2">Example</TH>+</TR>+<TR>+<TD><CODE>but_PConj</CODE></TD>+<TD><A HREF="#PConj" TITLE="PConj - phrase-beginning conjunction">PConj</A></TD>+<TD><div class=reveal> <I>but</I> <div class=popup> <ul> <li>API: <CODE>but_PConj</CODE> <li>Afr: <I>maar</I> <li>Bul: <I>но</I> <li>Cat: <I>però</I> <li>Dan: <I>men</I> <li>Dut: <I>maar</I> <li>Eng: <I>but</I> <li>Fin: <I>mutta</I> <li>Fre: <I>mais</I> <li>Ger: <I>aber</I> <li>Hin: <I>लेकिन</I> <li>Ita: <I>ma</I> <li>Lav: <I>bet</I> <li>Nep: <I>तर</I> <li>Nor: <I>men</I> <li>Pes: <I>اما</I> <li>Pnb: <I>مگر</I> <li>Pol: <I>ale</I> <li>Ron: <I>dar</I> <li>Rus: <I>но</I> <li>Snd: <I>پر</I> <li>Spa: <I>pero</I> <li>Swe: <I>men</I> <li>Tha: <I>แต่</I> <li>Urd: <I>لیكن</I> </ul> </div> </div></TD>+</TR>+<TR>+<TD><CODE>mkPConj</CODE></TD>+<TD><A HREF="#Conj" TITLE="Conj - conjunction">Conj</A> <CODE>-></CODE> <A HREF="#PConj" TITLE="PConj - phrase-beginning conjunction">PConj</A></TD>+<TD><div class=reveal> <I>and now</I> <div class=popup> <ul> <li>API: <CODE>mkPhr (mkPConj and_Conj) (mkUtt now_Adv)</CODE> <li>Afr: <I>en nou</I> <li>Bul: <I>и сега</I> <li>Cat: <I>i ara</I> <li>Dan: <I>og nu</I> <li>Dut: <I>en nu</I> <li>Eng: <I>and now</I> <li>Fin: <I>ja nyt</I> <li>Fre: <I>et maintenant</I> <li>Ger: <I>und jetzt</I> <li>Hin: <I>और अब</I> <li>Ita: <I>e adesso</I> <li>Lav: <I>un tagad</I> <li>Nep: <I>र अहीले</I> <li>Nor: <I>og nå</I> <li>Pes: <I>و حالا</I> <li>Pnb: <I>تے ہون</I> <li>Pol: <I>i teraz</I> <li>Ron: <I>şi acum</I> <li>Rus: <I>и сейчас</I> <li>Snd: <I>۽ ھاڻی</I> <li>Spa: <I>y ahora</I> <li>Swe: <I>och nu</I> <li>Tha: <I>และเดี๋ยวนี้</I> <li>Urd: <I>اور اب</I> </ul> </div> </div></TD>+</TR>+<TR>+<TD><CODE>otherwise_PConj</CODE></TD>+<TD><A HREF="#PConj" TITLE="PConj - phrase-beginning conjunction">PConj</A></TD>+<TD><div class=reveal> <I>otherwise</I> <div class=popup> <ul> <li>API: <CODE>otherwise_PConj</CODE> <li>Afr: <I>anders</I> <li>Bul: <I>иначе</I> <li>Cat: <I>altrament</I> <li>Dan: <I>anderledes</I> <li>Dut: <I>anders</I> <li>Eng: <I>otherwise</I> <li>Fin: <I>muuten</I> <li>Fre: <I>autrement</I> <li>Ger: <I>sonst</I> <li>Hin: <I>नहीं तो</I> <li>Ita: <I>altramente</I> <li>Lav: <I>tomēr</I> <li>Nep: <I>अन्यथा</I> <li>Nor: <I>annarledes</I> <li>Pes: <I>درغیراین صورت</I> <li>Pnb: <I>یا فیر</I> <li>Pol: <I>inaczej</I> <li>Ron: <I>altfel</I> <li>Rus: <I>иначе</I> <li>Snd: <I>ن ت پو۶ی</I> <li>Spa: <I>otramente</I> <li>Swe: <I>annars</I> <li>Tha: <I>ไม่อย่างนั้น</I> <li>Urd: <I>یا پھر</I> </ul> </div> </div></TD>+</TR>+<TR>+<TD><CODE>therefore_PConj</CODE></TD>+<TD><A HREF="#PConj" TITLE="PConj - phrase-beginning conjunction">PConj</A></TD>+<TD><div class=reveal> <I>therefore</I> <div class=popup> <ul> <li>API: <CODE>therefore_PConj</CODE> <li>Afr: <I>daarom</I> <li>Bul: <I>така че</I> <li>Cat: <I>per tant</I> <li>Dan: <I>derfor</I> <li>Dut: <I>daarom</I> <li>Eng: <I>therefore</I> <li>Fin: <I>siksi</I> <li>Fre: <I>donc</I> <li>Ger: <I>deshalb</I> <li>Hin: <I>इस लिये</I> <li>Ita: <I>quindi</I> <li>Lav: <I>tātad</I> <li>Nep: <I>अतः</I> <li>Nor: <I>derfor</I> <li>Pes: <I>به همین دلیل</I> <li>Pnb: <I>اس لی</I> <li>Pol: <I>dlatego</I> <li>Ron: <I>astfel</I> <li>Rus: <I>следовательно</I> <li>Snd: <I>ان ڪری</I> <li>Spa: <I>por eso</I> <li>Swe: <I>därför</I> <li>Tha: <I>เพราะฉะนั้น</I> <li>Urd: <I>اس لیے</I> </ul> </div> </div></TD>+</TR>+</TABLE>++<A NAME="PN"></A>+<H2>PN - proper name</H2>++<P>+Lexical category, constructors given in+<A HREF="#RParadigms">lexical paradigms</A>.+</P>++<A NAME="Phr"></A>+<H2>Phr - phrase in a text</H2>++<TABLE BORDER="1" CELLPADDING="4">+<TR>+<TH>Function</TH>+<TH>Type</TH>+<TH COLSPAN="2">Example</TH>+</TR>+<TR>+<TD><CODE>mkPhr</CODE></TD>+<TD>(<A HREF="#PConj" TITLE="PConj - phrase-beginning conjunction">PConj</A>) <CODE>-></CODE> <A HREF="#Utt" TITLE="Utt - sentence, question, word...">Utt</A> <CODE>-></CODE> (<A HREF="#Voc" TITLE="Voc - vocative or "please"">Voc</A>) <CODE>-></CODE> <A HREF="#Phr" TITLE="Phr - phrase in a text">Phr</A></TD>+<TD><div class=reveal> <I>but sleep , my friend</I> <div class=popup> <ul> <li>API: <CODE>mkPhr but_PConj (mkUtt (mkImp sleep_V)) (mkVoc (mkNP i_Pron friend_N))</CODE> <li>Afr: <I>maar slaap , my vriend</I> <li>Bul: <I>но спи , мой приятелю</I> <li>Cat: <I>però dorm , el meu amic</I> <li>Dan: <I>men sov , min ven</I> <li>Dut: <I>maar slaap , mijn vriend</I> <li>Eng: <I>but sleep , my friend</I> <li>Fin: <I>mutta nuku , minun ystäväni</I> <li>Fre: <I>mais dors , mon ami</I> <li>Ger: <I>aber schlaf , mein Freund</I> <li>Hin: <I>लेकिन सोना मेरा दोस्त</I> <li>Ita: <I>ma dormi , il mio amico</I> <li>Lav: <I>bet guli , mans draug</I> <li>Nep: <I>तर सुत् होउ मेरो साथी</I> <li>Nor: <I>men sov , min venn</I> <li>Pes: <I>اما بخواب دوست من</I> <li>Pnb: <I>مگر سونا میرا یار</I> <li>Pol: <I>ale śpij , mój przyjacielu</I> <li>Ron: <I>dar dormi , prietenul meu</I> <li>Rus: <I>но спи , мой друг</I> <li>Snd: <I>پر سمھ دوست</I> <li>Spa: <I>pero duerme , mi amigo</I> <li>Swe: <I>men sov , min vän</I> <li>Tha: <I>แต่นอนหลับซิเพี่อนของฉัน</I> <li>Urd: <I>لیكن سونا میرا دوست</I> </ul> </div> </div></TD>+</TR>+<TR>+<TD><CODE>mkPhr</CODE></TD>+<TD><A HREF="#S" TITLE="S - declarative sentence">S</A> <CODE>-></CODE> <A HREF="#Phr" TITLE="Phr - phrase in a text">Phr</A></TD>+<TD><div class=reveal> <I>she won't sleep</I> <div class=popup> <ul> <li>API: <CODE>mkPhr (mkS futureTense negativePol (mkCl she_NP sleep_V))</CODE> <li>Afr: <I>sy sal nie geslaap het nie</I> <li>Bul: <I>тя няма да спи</I> <li>Cat: <I>ella no dormirà</I> <li>Dan: <I>hun vil ikke sove</I> <li>Dut: <I>ze zal niet geslapen hebben</I> <li>Eng: <I>she won't sleep</I> <li>Fin: <I>hän ei nuku</I> <li>Fre: <I>elle ne dormira pas</I> <li>Ger: <I>sie wird nicht schlafen</I> <li>Hin: <I>वह नहीं सोएगी</I> <li>Ita: <I>lei non dormirà</I> <li>Lav: <I>viņa negulēs</I> <li>Nep: <I>उनी सुत्नेछैनन्</I> <li>Nor: <I>hun vil ikke sove</I> <li>Pes: <I>او نخواهد خوابید</I> <li>Pnb: <I>او نیں سوئے گی</I> <li>Pol: <I>ona nie będzie spała</I> <li>Ron: <I>ea nu va dormi</I> <li>Rus: <I>она не будет спать</I> <li>Snd: <I>ھو۶ سمھندی ن ھوندی</I> <li>Spa: <I>ella no dormirá</I> <li>Swe: <I>hon ska inte sova</I> <li>Tha: <I>หล่อนนอนไม่หลับ</I> <li>Urd: <I>وہ نہیں سوئے گی</I> </ul> </div> </div></TD>+</TR>+<TR>+<TD><CODE>mkPhr</CODE></TD>+<TD><A HREF="#Cl" TITLE="Cl - declarative clause, with all tenses">Cl</A> <CODE>-></CODE> <A HREF="#Phr" TITLE="Phr - phrase in a text">Phr</A></TD>+<TD><div class=reveal> <I>she sleeps</I> <div class=popup> <ul> <li>API: <CODE>mkPhr (mkCl she_NP sleep_V)</CODE> <li>Afr: <I>sy slaap</I> <li>Bul: <I>тя спи</I> <li>Cat: <I>ella dorm</I> <li>Dan: <I>hun sover</I> <li>Dut: <I>ze slaapt</I> <li>Eng: <I>she sleeps</I> <li>Fin: <I>hän nukkuu</I> <li>Fre: <I>elle dort</I> <li>Ger: <I>sie schläft</I> <li>Hin: <I>वह सोती है</I> <li>Ita: <I>lei dorme</I> <li>Lav: <I>viņa guļ</I> <li>Nep: <I>उनी सुत्छिन्</I> <li>Nor: <I>hun sover</I> <li>Pes: <I>او می خوابد</I> <li>Pnb: <I>او سوندی اے</I> <li>Pol: <I>ona śpi</I> <li>Ron: <I>ea doarme</I> <li>Rus: <I>она спдит</I> <li>Snd: <I>ھو۶ سمھی ٿی</I> <li>Spa: <I>ella duerme</I> <li>Swe: <I>hon sover</I> <li>Tha: <I>หล่อนนอนหลับ</I> <li>Urd: <I>وہ سوتی ہے</I> </ul> </div> </div></TD>+</TR>+<TR>+<TD><CODE>mkPhr</CODE></TD>+<TD><A HREF="#QS" TITLE="QS - question">QS</A> <CODE>-></CODE> <A HREF="#Phr" TITLE="Phr - phrase in a text">Phr</A></TD>+<TD><div class=reveal> <I>would she sleep</I> <div class=popup> <ul> <li>API: <CODE>mkPhr (mkQS conditionalTense (mkQCl (mkCl she_NP sleep_V)))</CODE> <li>Afr: <I>sou sy geslaap het</I> <li>Bul: <I>тя би ли спалa</I> <li>Cat: <I>ella dormiria</I> <li>Dan: <I>ville hun sove</I> <li>Dut: <I>zou ze geslapen hebben</I> <li>Eng: <I>would she sleep</I> <li>Fin: <I>nukkuisiko hän</I> <li>Fre: <I>elle dormirait</I> <li>Ger: <I>würde sie schlafen</I> <li>Hin: <I>कया वह शायद सोए</I> <li>Ita: <I>lei dormirebbe</I> <li>Lav: <I>vai viņa gulētu</I> <li>Nep: <I>के उनी सुत्नेछिन्</I> <li>Nor: <I>ville hun sove</I> <li>Pes: <I>آیا او می خوابید</I> <li>Pnb: <I>كی او شاید سوئے</I> <li>Pol: <I>czy ona spałaby</I> <li>Ron: <I>ea ar dormi</I> <li>Rus: <I>она спала бы</I> <li>Snd: <I>ڇا ھو۶ شاید سمھندی</I> <li>Spa: <I>ella dormiría</I> <li>Swe: <I>skulle hon sova</I> <li>Tha: <I>หล่อนนอนหลับไหม</I> <li>Urd: <I>كیا وہ شاید سوئے</I> </ul> </div> </div></TD>+</TR>+<TR>+<TD><CODE>mkPhr</CODE></TD>+<TD><A HREF="#Imp" TITLE="Imp - imperative">Imp</A> <CODE>-></CODE> <A HREF="#Phr" TITLE="Phr - phrase in a text">Phr</A></TD>+<TD><div class=reveal> <I>sleep</I> <div class=popup> <ul> <li>API: <CODE>mkPhr (mkImp sleep_V)</CODE> <li>Afr: <I>slaap</I> <li>Bul: <I>спи</I> <li>Cat: <I>dorm</I> <li>Dan: <I>sov</I> <li>Dut: <I>slaap</I> <li>Eng: <I>sleep</I> <li>Fin: <I>nuku</I> <li>Fre: <I>dors</I> <li>Ger: <I>schlaf</I> <li>Hin: <I>सोना</I> <li>Ita: <I>dormi</I> <li>Lav: <I>guli</I> <li>Nep: <I>सुत् होउ</I> <li>Nor: <I>sov</I> <li>Pes: <I>بخواب</I> <li>Pnb: <I>سونا</I> <li>Pol: <I>śpij</I> <li>Ron: <I>dormi</I> <li>Rus: <I>спи</I> <li>Snd: <I>سمھ</I> <li>Spa: <I>duerme</I> <li>Swe: <I>sov</I> <li>Tha: <I>นอนหลับซิ</I> <li>Urd: <I>سونا</I> </ul> </div> </div></TD>+</TR>+</TABLE>++<A NAME="Pol"></A>+<H2>Pol - polarity</H2>++<TABLE BORDER="1" CELLPADDING="4">+<TR>+<TH>Function</TH>+<TH>Type</TH>+<TH COLSPAN="2">Example</TH>+</TR>+<TR>+<TD><CODE>negativePol</CODE></TD>+<TD><A HREF="#Pol" TITLE="Pol - polarity">Pol</A></TD>+<TD><div class=reveal> <I>she doesn't sleep</I> <div class=popup> <ul> <li>API: <CODE>mkS negativePol (mkCl she_NP sleep_V)</CODE> <li>Afr: <I>sy slaap nie nie</I> <li>Bul: <I>тя не спи</I> <li>Cat: <I>ella no dorm</I> <li>Dan: <I>hun sover ikke</I> <li>Dut: <I>ze slaapt niet</I> <li>Eng: <I>she doesn't sleep</I> <li>Fin: <I>hän ei nuku</I> <li>Fre: <I>elle ne dort pas</I> <li>Ger: <I>sie schläft nicht</I> <li>Hin: <I>वह नहीं सोती है</I> <li>Ita: <I>lei non dorme</I> <li>Lav: <I>viņa neguļ</I> <li>Nep: <I>उनी सुत्दिन्न</I> <li>Nor: <I>hun sover ikke</I> <li>Pes: <I>او نمی خوابد</I> <li>Pnb: <I>او نیں سوندی اے</I> <li>Pol: <I>ona nie śpi</I> <li>Ron: <I>ea nu doarme</I> <li>Rus: <I>она не спдит</I> <li>Snd: <I>ھو۶ سمھی ن ٿی</I> <li>Spa: <I>ella no duerme</I> <li>Swe: <I>hon sover inte</I> <li>Tha: <I>หล่อนนอนไม่หลับ</I> <li>Urd: <I>وہ نہیں سوتی ہے</I> </ul> </div> </div></TD>+</TR>+<TR>+<TD><CODE>positivePol</CODE></TD>+<TD><A HREF="#Pol" TITLE="Pol - polarity">Pol</A></TD>+<TD><div class=reveal> <I>she sleeps</I> <div class=popup> <ul> <li>API: <CODE>mkS positivePol (mkCl she_NP sleep_V)</CODE> <li>Afr: <I>sy slaap</I> <li>Bul: <I>тя спи</I> <li>Cat: <I>ella dorm</I> <li>Dan: <I>hun sover</I> <li>Dut: <I>ze slaapt</I> <li>Eng: <I>she sleeps</I> <li>Fin: <I>hän nukkuu</I> <li>Fre: <I>elle dort</I> <li>Ger: <I>sie schläft</I> <li>Hin: <I>वह सोती है</I> <li>Ita: <I>lei dorme</I> <li>Lav: <I>viņa guļ</I> <li>Nep: <I>उनी सुत्छिन्</I> <li>Nor: <I>hun sover</I> <li>Pes: <I>او می خوابد</I> <li>Pnb: <I>او سوندی اے</I> <li>Pol: <I>ona śpi</I> <li>Ron: <I>ea doarme</I> <li>Rus: <I>она спдит</I> <li>Snd: <I>ھو۶ سمھی ٿی</I> <li>Spa: <I>ella duerme</I> <li>Swe: <I>hon sover</I> <li>Tha: <I>หล่อนนอนหลับ</I> <li>Urd: <I>وہ سوتی ہے</I> </ul> </div> </div></TD>+</TR>+</TABLE>++<A NAME="Predet"></A>+<H2>Predet - predeterminer (prefixed Quant)</H2>++<TABLE BORDER="1" CELLPADDING="4">+<TR>+<TH>Function</TH>+<TH>Type</TH>+<TH COLSPAN="2">Example</TH>+</TR>+<TR>+<TD><CODE>all_Predet</CODE></TD>+<TD><A HREF="#Predet" TITLE="Predet - predeterminer (prefixed Quant)">Predet</A></TD>+<TD><div class=reveal> <I>all the men</I> <div class=popup> <ul> <li>API: <CODE>mkUtt (mkNP all_Predet (mkNP thePl_Det man_N))</CODE> <li>Afr: <I>alle die mans</I> <li>Bul: <I>всичките мъжете</I> <li>Cat: <I>tots els homes</I> <li>Dan: <I>alle mændene</I> <li>Dut: <I>alle de mannen</I> <li>Eng: <I>all the men</I> <li>Fin: <I>kaikki miehet</I> <li>Fre: <I>tous les hommes</I> <li>Ger: <I>alle die Männer</I> <li>Hin: <I>तमाम आदमी</I> <li>Ita: <I>tutti gli uomini</I> <li>Lav: <I>visi vīrieši</I> <li>Nep: <I>सबै मान्छेहरु</I> <li>Nor: <I>alle mennen</I> <li>Pes: <I>همه ی مرد</I> <li>Pnb: <I>سارے بندے</I> <li>Pol: <I>wszyscy mężczyzn</I> <li>Ron: <I>toţi oamenii</I> <li>Rus: <I>всех человеков</I> <li>Snd: <I>سڀ ماڻھو</I> <li>Spa: <I>todos los hombres</I> <li>Swe: <I>alla männen</I> <li>Tha: <I>ทั้งหมดชาย</I> <li>Urd: <I>تمام آدمی</I> </ul> </div> </div></TD>+</TR>+<TR>+<TD><CODE>most_Predet</CODE></TD>+<TD><A HREF="#Predet" TITLE="Predet - predeterminer (prefixed Quant)">Predet</A></TD>+<TD><div class=reveal> <I>most</I> <div class=popup> <ul> <li>API: <CODE>most_Predet</CODE> <li>Afr: <I>meeste</I> <li>Bul: <I>повечето</I> <li>Cat: <I>la majoria</I> <li>Dan: <I>den meste</I> <li>Dut: <I>meeste</I> <li>Eng: <I>most</I> <li>Fin: <I>useinta</I> <li>Fre: <I>la plupart</I> <li>Ger: <I>meister</I> <li>Hin: <I>सब से ज़्यादा</I> <li>Ita: <I>la maggior parte</I> <li>Lav: <I>vairums</I> <li>Nep: <I>ज्यादै</I> <li>Nor: <I>den meste</I> <li>Pes: <I>اکثر</I> <li>Pnb: <I>زیادہ تر</I> <li>Pol: <I>wszystek</I> <li>Ron: <I>marea parte a</I> <li>Rus: <I>большинство</I> <li>Snd: <I>سڀ کان گھڻو</I> <li>Spa: <I>la mayor parte</I> <li>Swe: <I>den mesta</I> <li>Tha: <I>มากที่สุด</I> <li>Urd: <I>زیادہ تر</I> </ul> </div> </div></TD>+</TR>+<TR>+<TD><CODE>not_Predet</CODE></TD>+<TD><A HREF="#Predet" TITLE="Predet - predeterminer (prefixed Quant)">Predet</A></TD>+<TD><div class=reveal> <I>not everybody</I> <div class=popup> <ul> <li>API: <CODE>mkUtt (mkNP not_Predet everybody_NP)</CODE> <li>Afr: <I>nie almal</I> <li>Bul: <I>constant not found: not_Predet</I> <li>Cat: <I>no pas tothom</I> <li>Dan: <I>constant not found: not_Predet</I> <li>Dut: <I>niet alle</I> <li>Eng: <I>not everybody</I> <li>Fin: <I>ei jokainen</I> <li>Fre: <I>pas tout le monde</I> <li>Ger: <I>nicht jeder</I> <li>Hin: <I>नहीं हर कोई</I> <li>Ita: <I>non tutti</I> <li>Lav: <I>constant not found: not_Predet</I> <li>Nep: <I>हैन सवौ जाना</I> <li>Nor: <I>constant not found: not_Predet</I> <li>Pes: <I>constant not found: everybody_NP</I> <li>Pnb: <I>نہیں ہر كوی</I> <li>Pol: <I>żadni wszystkich</I> <li>Ron: <I>nu toţi</I> <li>Rus: <I>constant not found: not_Predet</I> <li>Snd: <I>constant not found: everybody_NP</I> <li>Spa: <I>constant not found: not_Predet</I> <li>Swe: <I>inte alla</I> <li>Tha: <I>ไม่ทุกคน</I> <li>Urd: <I>نہیں ہر كوی</I> </ul> </div> </div></TD>+</TR>+<TR>+<TD><CODE>only_Predet</CODE></TD>+<TD><A HREF="#Predet" TITLE="Predet - predeterminer (prefixed Quant)">Predet</A></TD>+<TD><div class=reveal> <I>only</I> <div class=popup> <ul> <li>API: <CODE>only_Predet</CODE> <li>Afr: <I>slegs</I> <li>Bul: <I>само</I> <li>Cat: <I>nomÈs</I> <li>Dan: <I>kun</I> <li>Dut: <I>slechts</I> <li>Eng: <I>only</I> <li>Fin: <I>vain</I> <li>Fre: <I>seulement</I> <li>Ger: <I>nur</I> <li>Hin: <I>सिर्फ़</I> <li>Ita: <I>soltanto</I> <li>Lav: <I>tikai</I> <li>Nep: <I>मात्र</I> <li>Nor: <I>kun</I> <li>Pes: <I>فقط</I> <li>Pnb: <I>صرف</I> <li>Pol: <I>tylko</I> <li>Ron: <I>doar</I> <li>Rus: <I>единственный</I> <li>Snd: <I>صرف</I> <li>Spa: <I>solamente</I> <li>Swe: <I>bara</I> <li>Tha: <I>''</I> <li>Urd: <I>صرف</I> </ul> </div> </div></TD>+</TR>+</TABLE>++<A NAME="Prep"></A>+<H2>Prep - preposition, or just case</H2>++<TABLE BORDER="1" CELLPADDING="4">+<TR>+<TH>Function</TH>+<TH>Type</TH>+<TH COLSPAN="2">Example</TH>+</TR>+<TR>+<TD><CODE>above_Prep</CODE></TD>+<TD><A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A></TD>+<TD><div class=reveal> <I>above it</I> <div class=popup> <ul> <li>API: <CODE>mkAdv above_Prep it_NP</CODE> <li>Afr: <I>bo dit</I> <li>Bul: <I>над него</I> <li>Cat: <I>sobre ell</I> <li>Dan: <I>ovenfor det</I> <li>Dut: <I>boven het</I> <li>Eng: <I>above it</I> <li>Fin: <I>sen yläpuolella</I> <li>Fre: <I>au dessus de lui</I> <li>Ger: <I>über ihm</I> <li>Hin: <I>इस के ऊपर</I> <li>Ita: <I>sopra di lui</I> <li>Lav: <I>virs tā / tās</I> <li>Nep: <I>यो माथि</I> <li>Nor: <I>ovenfor det</I> <li>Pes: <I>بالای آن</I> <li>Pnb: <I>اینوں اتے</I> <li>Pol: <I>nad nim</I> <li>Ron: <I>deasupra lui</I> <li>Rus: <I>над ним</I> <li>Snd: <I>ھن مٿی</I> <li>Spa: <I>sobre él</I> <li>Swe: <I>ovanför det</I> <li>Tha: <I>ข้างบนมัน</I> <li>Urd: <I>اس كے اوپر</I> </ul> </div> </div></TD>+</TR>+<TR>+<TD><CODE>after_Prep</CODE></TD>+<TD><A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A></TD>+<TD><div class=reveal> <I>after it</I> <div class=popup> <ul> <li>API: <CODE>mkAdv after_Prep it_NP</CODE> <li>Afr: <I>na dit</I> <li>Bul: <I>след него</I> <li>Cat: <I>després de ell</I> <li>Dan: <I>efter det</I> <li>Dut: <I>na het</I> <li>Eng: <I>after it</I> <li>Fin: <I>sen jälkeen</I> <li>Fre: <I>après lui</I> <li>Ger: <I>nach ihm</I> <li>Hin: <I>इस के बाद</I> <li>Ita: <I>dopo lui</I> <li>Lav: <I>pēc tā / tās</I> <li>Nep: <I>यो पछि</I> <li>Nor: <I>etter det</I> <li>Pes: <I>بعد از آن</I> <li>Pnb: <I>اینوں توں بعد</I> <li>Pol: <I>po nim</I> <li>Ron: <I>după el</I> <li>Rus: <I>после него</I> <li>Snd: <I>ھن کان پو۶</I> <li>Spa: <I>despues de él</I> <li>Swe: <I>efter det</I> <li>Tha: <I>หลังจากมัน</I> <li>Urd: <I>اس كے بعد</I> </ul> </div> </div></TD>+</TR>+<TR>+<TD><CODE>before_Prep</CODE></TD>+<TD><A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A></TD>+<TD><div class=reveal> <I>before it</I> <div class=popup> <ul> <li>API: <CODE>mkAdv before_Prep it_NP</CODE> <li>Afr: <I>voor dit</I> <li>Bul: <I>преди него</I> <li>Cat: <I>abans de ell</I> <li>Dan: <I>før det</I> <li>Dut: <I>voor het</I> <li>Eng: <I>before it</I> <li>Fin: <I>ennen sitä</I> <li>Fre: <I>avant lui</I> <li>Ger: <I>vor ihm</I> <li>Hin: <I>इस से पहले</I> <li>Ita: <I>prima lui</I> <li>Lav: <I>pirms tā / tās</I> <li>Nep: <I>यो अघि</I> <li>Nor: <I>før det</I> <li>Pes: <I>قبل از آن</I> <li>Pnb: <I>اینوں پلے</I> <li>Pol: <I>przed nim</I> <li>Ron: <I>înaintea lui</I> <li>Rus: <I>перед ним</I> <li>Snd: <I>ھن پیھرین</I> <li>Spa: <I>antes de él</I> <li>Swe: <I>före det</I> <li>Tha: <I>ก่อนมัน</I> <li>Urd: <I>اس سے پہلے</I> </ul> </div> </div></TD>+</TR>+<TR>+<TD><CODE>behind_Prep</CODE></TD>+<TD><A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A></TD>+<TD><div class=reveal> <I>behind it</I> <div class=popup> <ul> <li>API: <CODE>mkAdv behind_Prep it_NP</CODE> <li>Afr: <I>agter dit</I> <li>Bul: <I>зад него</I> <li>Cat: <I>darrera de ell</I> <li>Dan: <I>bag det</I> <li>Dut: <I>achter het</I> <li>Eng: <I>behind it</I> <li>Fin: <I>sen takana</I> <li>Fre: <I>derrière lui</I> <li>Ger: <I>hinter ihm</I> <li>Hin: <I>इस के पीछे</I> <li>Ita: <I>dietro lui</I> <li>Lav: <I>aiz tā / tās</I> <li>Nep: <I>यो पछि</I> <li>Nor: <I>bakom det</I> <li>Pes: <I>پشت آن</I> <li>Pnb: <I>اینوں پیچھے</I> <li>Pol: <I>za nim</I> <li>Ron: <I>înapoia lui</I> <li>Rus: <I>за ним</I> <li>Snd: <I>ھن پٺتی</I> <li>Spa: <I>detrás de él</I> <li>Swe: <I>bakom det</I> <li>Tha: <I>หลังมัน</I> <li>Urd: <I>اس كے پیچھے</I> </ul> </div> </div></TD>+</TR>+<TR>+<TD><CODE>between_Prep</CODE></TD>+<TD><A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A></TD>+<TD><div class=reveal> <I>between you and me</I> <div class=popup> <ul> <li>API: <CODE>mkAdv between_Prep (mkNP and_Conj you_NP i_NP)</CODE> <li>Afr: <I>tussen jou en my</I> <li>Bul: <I>между теб и мен</I> <li>Cat: <I>entre tu i mi</I> <li>Dan: <I>mellem dig og mig</I> <li>Dut: <I>tussen je en me</I> <li>Eng: <I>between you and me</I> <li>Fin: <I>sinun ja minun välissä</I> <li>Fre: <I>entre toi et moi</I> <li>Ger: <I>zwischen dir und mir</I> <li>Hin: <I>तुम और मुझ के दरमियान</I> <li>Ita: <I>fra te e me</I> <li>Lav: <I>starp tev un man</I> <li>Nep: <I>तिमी र म बिच</I> <li>Nor: <I>mellom deg og meg</I> <li>Pes: <I>بین تو و من</I> <li>Pnb: <I>تینوں تے مینوں وچكار</I> <li>Pol: <I>między tobą i mną</I> <li>Ron: <I>între</I> <li>Rus: <I>между тобой и мной</I> <li>Snd: <I>تون ۽ مھنجا جی وچ می</I> <li>Spa: <I>entre tí y mí</I> <li>Swe: <I>mellan dig och mig</I> <li>Tha: <I>ระหว่างคุณและฉัน</I> <li>Urd: <I>تو اور مجھ درمیاں</I> </ul> </div> </div></TD>+</TR>+<TR>+<TD><CODE>by8agent_Prep</CODE></TD>+<TD><A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A></TD>+<TD><div class=reveal> <I>by it</I> <div class=popup> <ul> <li>API: <CODE>mkAdv by8agent_Prep it_NP</CODE> <li>Afr: <I>deur dit</I> <li>Bul: <I>чрез него</I> <li>Cat: <I>per ell</I> <li>Dan: <I>af det</I> <li>Dut: <I>door het</I> <li>Eng: <I>by it</I> <li>Fin: <I>sen toimesta</I> <li>Fre: <I>par lui</I> <li>Ger: <I>durch es</I> <li>Hin: <I>इस</I> <li>Ita: <I>da lui</I> <li>Lav: <I>tas / tā</I> <li>Nep: <I>यो लाइ</I> <li>Nor: <I>av det</I> <li>Pes: <I>توسط آن</I> <li>Pnb: <I>اینوں</I> <li>Pol: <I>przez nie</I> <li>Ron: <I>de către el</I> <li>Rus: <I>с помощью него</I> <li>Snd: <I>ھن ھٿان</I> <li>Spa: <I>por él</I> <li>Swe: <I>av det</I> <li>Tha: <I>มัน</I> <li>Urd: <I>اس سے</I> </ul> </div> </div></TD>+</TR>+<TR>+<TD><CODE>by8means_Prep</CODE></TD>+<TD><A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A></TD>+<TD><div class=reveal> <I>by it</I> <div class=popup> <ul> <li>API: <CODE>mkAdv by8means_Prep it_NP</CODE> <li>Afr: <I>met dit</I> <li>Bul: <I>чрез него</I> <li>Cat: <I>mitjançant ell</I> <li>Dan: <I>med det</I> <li>Dut: <I>met het</I> <li>Eng: <I>by it</I> <li>Fin: <I>sillä</I> <li>Fre: <I>par lui</I> <li>Ger: <I>mit ihm</I> <li>Hin: <I>इस</I> <li>Ita: <I>per lui</I> <li>Lav: <I>ar to</I> <li>Nep: <I>यो ले</I> <li>Nor: <I>med det</I> <li>Pes: <I>با آن</I> <li>Pnb: <I>اینوں</I> <li>Pol: <I>przez nie</I> <li>Ron: <I>de el</I> <li>Rus: <I>с помощью него</I> <li>Snd: <I>ھن ڪان</I> <li>Spa: <I>por él</I> <li>Swe: <I>med det</I> <li>Tha: <I>ผ่านมัน</I> <li>Urd: <I>اس پر</I> </ul> </div> </div></TD>+</TR>+<TR>+<TD><CODE>during_Prep</CODE></TD>+<TD><A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A></TD>+<TD><div class=reveal> <I>during it</I> <div class=popup> <ul> <li>API: <CODE>mkAdv during_Prep it_NP</CODE> <li>Afr: <I>tydens dit</I> <li>Bul: <I>по време на него</I> <li>Cat: <I>durant ell</I> <li>Dan: <I>under det</I> <li>Dut: <I>tijdens het</I> <li>Eng: <I>during it</I> <li>Fin: <I>sen aikana</I> <li>Fre: <I>pendant lui</I> <li>Ger: <I>während seiner</I> <li>Hin: <I>इस के दरमियान</I> <li>Ita: <I>durante lui</I> <li>Lav: <I>laikā tā / tās</I> <li>Nep: <I>यो पर्यान्त</I> <li>Nor: <I>under det</I> <li>Pes: <I>در طول آن</I> <li>Pnb: <I>اینوں دے وچ</I> <li>Pol: <I>podczas niego</I> <li>Ron: <I>în timpul lui</I> <li>Rus: <I>в течение него</I> <li>Snd: <I>ھن وچ ۾</I> <li>Spa: <I>durante él</I> <li>Swe: <I>under det</I> <li>Tha: <I>ระหว่างมัน</I> <li>Urd: <I>اس كے درمیاں</I> </ul> </div> </div></TD>+</TR>+<TR>+<TD><CODE>except_Prep</CODE></TD>+<TD><A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A></TD>+<TD><div class=reveal> <I>except it</I> <div class=popup> <ul> <li>API: <CODE>mkAdv except_Prep it_NP</CODE> <li>Afr: <I>behalwe dit</I> <li>Bul: <I>constant not found: except_Prep</I> <li>Cat: <I>excepte ell</I> <li>Dan: <I>constant not found: except_Prep</I> <li>Dut: <I>met uitzondering van het</I> <li>Eng: <I>except it</I> <li>Fin: <I>sitä lukuunottamatta</I> <li>Fre: <I>excepté lui</I> <li>Ger: <I>außer ihm</I> <li>Hin: <I>इस के सिवाय</I> <li>Ita: <I>eccetto lui</I> <li>Lav: <I>izņemot to</I> <li>Nep: <I>यो बाहेक</I> <li>Nor: <I>constant not found: except_Prep</I> <li>Pes: <I>به جز آن</I> <li>Pnb: <I>اینوں سواے</I> <li>Pol: <I>z wyjątkiem nie</I> <li>Ron: <I>cu excepţia lui</I> <li>Rus: <I>constant not found: except_Prep</I> <li>Snd: <I>ھن سوا۶</I> <li>Spa: <I>constant not found: except_Prep</I> <li>Swe: <I>utom det</I> <li>Tha: <I>นอกจากมัน</I> <li>Urd: <I>اس سواے</I> </ul> </div> </div></TD>+</TR>+<TR>+<TD><CODE>for_Prep</CODE></TD>+<TD><A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A></TD>+<TD><div class=reveal> <I>for it</I> <div class=popup> <ul> <li>API: <CODE>mkAdv for_Prep it_NP</CODE> <li>Afr: <I>voor dit</I> <li>Bul: <I>за него</I> <li>Cat: <I>per a ell</I> <li>Dan: <I>for det</I> <li>Dut: <I>voor het</I> <li>Eng: <I>for it</I> <li>Fin: <I>sille</I> <li>Fre: <I>pour lui</I> <li>Ger: <I>für es</I> <li>Hin: <I>इस के लिये</I> <li>Ita: <I>per lui</I> <li>Lav: <I>priekš tā / tās</I> <li>Nep: <I>यो लागि</I> <li>Nor: <I>for det</I> <li>Pes: <I>برای آن</I> <li>Pnb: <I>اینوں [دے واسطE]</I> <li>Pol: <I>dla niego</I> <li>Ron: <I>pentru el</I> <li>Rus: <I>для него</I> <li>Snd: <I>ھن لا۶ی</I> <li>Spa: <I>para él</I> <li>Swe: <I>för det</I> <li>Tha: <I>ให้มัน</I> <li>Urd: <I>اس كیلیے</I> </ul> </div> </div></TD>+</TR>+<TR>+<TD><CODE>from_Prep</CODE></TD>+<TD><A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A></TD>+<TD><div class=reveal> <I>from it</I> <div class=popup> <ul> <li>API: <CODE>mkAdv from_Prep it_NP</CODE> <li>Afr: <I>uit dit</I> <li>Bul: <I>от него</I> <li>Cat: <I>de ell</I> <li>Dan: <I>fra det</I> <li>Dut: <I>uit het</I> <li>Eng: <I>from it</I> <li>Fin: <I>siitä</I> <li>Fre: <I>de lui</I> <li>Ger: <I>aus ihm</I> <li>Hin: <I>इस से</I> <li>Ita: <I>da lui</I> <li>Lav: <I>no tā / tās</I> <li>Nep: <I>यो बाट</I> <li>Nor: <I>fra det</I> <li>Pes: <I>از آن</I> <li>Pnb: <I>اینوں توں</I> <li>Pol: <I>z niego</I> <li>Ron: <I>de la el</I> <li>Rus: <I>от него</I> <li>Snd: <I>ھن وٽان</I> <li>Spa: <I>de él</I> <li>Swe: <I>från det</I> <li>Tha: <I>จากมัน</I> <li>Urd: <I>اس سے</I> </ul> </div> </div></TD>+</TR>+<TR>+<TD><CODE>in8front_Prep</CODE></TD>+<TD><A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A></TD>+<TD><div class=reveal> <I>in front of it</I> <div class=popup> <ul> <li>API: <CODE>mkAdv in8front_Prep it_NP</CODE> <li>Afr: <I>voor dit</I> <li>Bul: <I>пред него</I> <li>Cat: <I>davant de ell</I> <li>Dan: <I>foran det</I> <li>Dut: <I>voor het</I> <li>Eng: <I>in front of it</I> <li>Fin: <I>sen edessä</I> <li>Fre: <I>devant lui</I> <li>Ger: <I>vor ihm</I> <li>Hin: <I>इस के सामने</I> <li>Ita: <I>davanti lui</I> <li>Lav: <I>priekšā tam / tai</I> <li>Nep: <I>यो सामु</I> <li>Nor: <I>foran det</I> <li>Pes: <I>جلوی آن</I> <li>Pnb: <I>اینوں دے سامنے</I> <li>Pol: <I>przed nim</I> <li>Ron: <I>în faţa lui</I> <li>Rus: <I>перед ним</I> <li>Snd: <I>ھن جی سامھون</I> <li>Spa: <I>delante de él</I> <li>Swe: <I>framför det</I> <li>Tha: <I>หน้ามัน</I> <li>Urd: <I>اس كے سامنے</I> </ul> </div> </div></TD>+</TR>+<TR>+<TD><CODE>in_Prep</CODE></TD>+<TD><A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A></TD>+<TD><div class=reveal> <I>in it</I> <div class=popup> <ul> <li>API: <CODE>mkAdv in_Prep it_NP</CODE> <li>Afr: <I>in dit</I> <li>Bul: <I>в него</I> <li>Cat: <I>en ell</I> <li>Dan: <I>i det</I> <li>Dut: <I>in het</I> <li>Eng: <I>in it</I> <li>Fin: <I>siinä</I> <li>Fre: <I>dans lui</I> <li>Ger: <I>in ihm</I> <li>Hin: <I>इस में</I> <li>Ita: <I>in lui</I> <li>Lav: <I>tajā</I> <li>Nep: <I>यो मा</I> <li>Nor: <I>i det</I> <li>Pes: <I>در آن</I> <li>Pnb: <I>اینوں وچ</I> <li>Pol: <I>w nim</I> <li>Ron: <I>în el</I> <li>Rus: <I>в нём</I> <li>Snd: <I>ھن ۾</I> <li>Spa: <I>en él</I> <li>Swe: <I>i det</I> <li>Tha: <I>ในมัน</I> <li>Urd: <I>اس میں</I> </ul> </div> </div></TD>+</TR>+<TR>+<TD><CODE>on_Prep</CODE></TD>+<TD><A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A></TD>+<TD><div class=reveal> <I>on it</I> <div class=popup> <ul> <li>API: <CODE>mkAdv on_Prep it_NP</CODE> <li>Afr: <I>op dit</I> <li>Bul: <I>на него</I> <li>Cat: <I>sobre ell</I> <li>Dan: <I>på det</I> <li>Dut: <I>op het</I> <li>Eng: <I>on it</I> <li>Fin: <I>sillä</I> <li>Fre: <I>sur lui</I> <li>Ger: <I>auf ihm</I> <li>Hin: <I>इस पर</I> <li>Ita: <I>su lui</I> <li>Lav: <I>uz tā / tās</I> <li>Nep: <I>यो मा</I> <li>Nor: <I>på det</I> <li>Pes: <I>روی آن</I> <li>Pnb: <I>اینوں اتے</I> <li>Pol: <I>nа nim</I> <li>Ron: <I>pe el</I> <li>Rus: <I>на нём</I> <li>Snd: <I>ھن مٿان</I> <li>Spa: <I>sobre él</I> <li>Swe: <I>på det</I> <li>Tha: <I>บนมัน</I> <li>Urd: <I>اس پر</I> </ul> </div> </div></TD>+</TR>+<TR>+<TD><CODE>part_Prep</CODE></TD>+<TD><A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A></TD>+<TD><div class=reveal> <I>of it</I> <div class=popup> <ul> <li>API: <CODE>mkAdv part_Prep it_NP</CODE> <li>Afr: <I>van dit</I> <li>Bul: <I>от него</I> <li>Cat: <I>de ell</I> <li>Dan: <I>af det</I> <li>Dut: <I>van het</I> <li>Eng: <I>of it</I> <li>Fin: <I>sitä</I> <li>Fre: <I>de lui</I> <li>Ger: <I>von ihm</I> <li>Hin: <I>इस</I> <li>Ita: <I>di lui</I> <li>Lav: <I>tā / tās</I> <li>Nep: <I>यो भाग</I> <li>Nor: <I>av det</I> <li>Pes: <I>از آن</I> <li>Pnb: <I>اینوں ہصہ</I> <li>Pol: <I>z niego</I> <li>Ron: <I>din el</I> <li>Rus: <I>оно</I> <li>Snd: <I>ھن حسو</I> <li>Spa: <I>de él</I> <li>Swe: <I>av det</I> <li>Tha: <I>มัน</I> <li>Urd: <I>اس</I> </ul> </div> </div></TD>+</TR>+<TR>+<TD><CODE>possess_Prep</CODE></TD>+<TD><A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A></TD>+<TD><div class=reveal> <I>of it</I> <div class=popup> <ul> <li>API: <CODE>mkAdv possess_Prep it_NP</CODE> <li>Afr: <I>van dit</I> <li>Bul: <I>му</I> <li>Cat: <I>de ell</I> <li>Dan: <I>af det</I> <li>Dut: <I>van het</I> <li>Eng: <I>of it</I> <li>Fin: <I>sen</I> <li>Fre: <I>de lui</I> <li>Ger: <I>von ihm</I> <li>Hin: <I>इस का</I> <li>Ita: <I>di lui</I> <li>Lav: <I>tā / tās</I> <li>Nep: <I>यो धारणा गर्नु</I> <li>Nor: <I>av det</I> <li>Pes: <I>آن</I> <li>Pnb: <I>اینوں دا</I> <li>Pol: <I>jego</I> <li>Ron: <I>lui</I> <li>Rus: <I>него</I> <li>Snd: <I>ھن جو یا جی</I> <li>Spa: <I>de él</I> <li>Swe: <I>av det</I> <li>Tha: <I>ของมัน</I> <li>Urd: <I>اس كا</I> </ul> </div> </div></TD>+</TR>+<TR>+<TD><CODE>through_Prep</CODE></TD>+<TD><A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A></TD>+<TD><div class=reveal> <I>through it</I> <div class=popup> <ul> <li>API: <CODE>mkAdv through_Prep it_NP</CODE> <li>Afr: <I>deur dit</I> <li>Bul: <I>през него</I> <li>Cat: <I>mitjançant ell</I> <li>Dan: <I>gennem det</I> <li>Dut: <I>door het</I> <li>Eng: <I>through it</I> <li>Fin: <I>sen kautta</I> <li>Fre: <I>par lui</I> <li>Ger: <I>durch es</I> <li>Hin: <I>इस में से</I> <li>Ita: <I>per lui</I> <li>Lav: <I>cauri tam / tai</I> <li>Nep: <I>यो मार्फत</I> <li>Nor: <I>gjennom det</I> <li>Pes: <I>از طریق آن</I> <li>Pnb: <I>اینوں وچوں</I> <li>Pol: <I>przez nie</I> <li>Ron: <I>prin el</I> <li>Rus: <I>через него</I> <li>Snd: <I>ھن منجھان</I> <li>Spa: <I>por él</I> <li>Swe: <I>genom det</I> <li>Tha: <I>ผ่านมัน</I> <li>Urd: <I>اس میں سے</I> </ul> </div> </div></TD>+</TR>+<TR>+<TD><CODE>to_Prep</CODE></TD>+<TD><A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A></TD>+<TD><div class=reveal> <I>to it</I> <div class=popup> <ul> <li>API: <CODE>mkAdv to_Prep it_NP</CODE> <li>Afr: <I>na dit</I> <li>Bul: <I>до него</I> <li>Cat: <I>a ell</I> <li>Dan: <I>til det</I> <li>Dut: <I>naar het</I> <li>Eng: <I>to it</I> <li>Fin: <I>siihen</I> <li>Fre: <I>à lui</I> <li>Ger: <I>nach ihm</I> <li>Hin: <I>इस को</I> <li>Ita: <I>a lui</I> <li>Lav: <I>līdz tam / tai</I> <li>Nep: <I>यो सम्म</I> <li>Nor: <I>til det</I> <li>Pes: <I>به آن</I> <li>Pnb: <I>اینوں نوں</I> <li>Pol: <I>do niego</I> <li>Ron: <I>la el</I> <li>Rus: <I>к нему</I> <li>Snd: <I>ھن ڏانھن</I> <li>Spa: <I>a él</I> <li>Swe: <I>till det</I> <li>Tha: <I>ถืงมัน</I> <li>Urd: <I>اس كو</I> </ul> </div> </div></TD>+</TR>+<TR>+<TD><CODE>under_Prep</CODE></TD>+<TD><A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A></TD>+<TD><div class=reveal> <I>under it</I> <div class=popup> <ul> <li>API: <CODE>mkAdv under_Prep it_NP</CODE> <li>Afr: <I>onder dit</I> <li>Bul: <I>под него</I> <li>Cat: <I>sota ell</I> <li>Dan: <I>under det</I> <li>Dut: <I>onder het</I> <li>Eng: <I>under it</I> <li>Fin: <I>sen alla</I> <li>Fre: <I>sous lui</I> <li>Ger: <I>unter ihm</I> <li>Hin: <I>इस के नीचे</I> <li>Ita: <I>sotto lui</I> <li>Lav: <I>zem tā / tās</I> <li>Nep: <I>यो अन्तर्गत</I> <li>Nor: <I>under det</I> <li>Pes: <I>زیر آن</I> <li>Pnb: <I>اینوں تھلے</I> <li>Pol: <I>pod nim</I> <li>Ron: <I>sub el</I> <li>Rus: <I>под ним</I> <li>Snd: <I>ھن ھیٺان</I> <li>Spa: <I>bajo él</I> <li>Swe: <I>under det</I> <li>Tha: <I>ใต้มัน</I> <li>Urd: <I>اس نیچے</I> </ul> </div> </div></TD>+</TR>+<TR>+<TD><CODE>with_Prep</CODE></TD>+<TD><A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A></TD>+<TD><div class=reveal> <I>with it</I> <div class=popup> <ul> <li>API: <CODE>mkAdv with_Prep it_NP</CODE> <li>Afr: <I>met dit</I> <li>Bul: <I>с него</I> <li>Cat: <I>amb ell</I> <li>Dan: <I>med det</I> <li>Dut: <I>met het</I> <li>Eng: <I>with it</I> <li>Fin: <I>sen kanssa</I> <li>Fre: <I>avec lui</I> <li>Ger: <I>mit ihm</I> <li>Hin: <I>इस के साथ</I> <li>Ita: <I>con lui</I> <li>Lav: <I>ar to</I> <li>Nep: <I>यो सँग</I> <li>Nor: <I>med det</I> <li>Pes: <I>با آن</I> <li>Pnb: <I>اینوں دے نال</I> <li>Pol: <I>z nim</I> <li>Ron: <I>cu el</I> <li>Rus: <I>с ним</I> <li>Snd: <I>ھن سان</I> <li>Spa: <I>con él</I> <li>Swe: <I>med det</I> <li>Tha: <I>กับมัน</I> <li>Urd: <I>اس كے ساتھ</I> </ul> </div> </div></TD>+</TR>+<TR>+<TD><CODE>without_Prep</CODE></TD>+<TD><A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A></TD>+<TD><div class=reveal> <I>without it</I> <div class=popup> <ul> <li>API: <CODE>mkAdv without_Prep it_NP</CODE> <li>Afr: <I>sonder dit</I> <li>Bul: <I>без него</I> <li>Cat: <I>sense ell</I> <li>Dan: <I>uden det</I> <li>Dut: <I>zonder het</I> <li>Eng: <I>without it</I> <li>Fin: <I>ilman sitä</I> <li>Fre: <I>sans lui</I> <li>Ger: <I>ohne es</I> <li>Hin: <I>constant not found: without_Prep</I> <li>Ita: <I>senza lui</I> <li>Lav: <I>bez tā / tās</I> <li>Nep: <I>यो विना</I> <li>Nor: <I>uten det</I> <li>Pes: <I>بدون آن</I> <li>Pnb: <I>اینوں توں بغیر</I> <li>Pol: <I>bez niego</I> <li>Ron: <I>fără el</I> <li>Rus: <I>без него</I> <li>Snd: <I>ھن کان سوا۶</I> <li>Spa: <I>sin él</I> <li>Swe: <I>utan det</I> <li>Tha: <I>ไม่มีมัน</I> <li>Urd: <I>اس كے بغیر</I> </ul> </div> </div></TD>+</TR>+</TABLE>++<A NAME="Pron"></A>+<H2>Pron - personal pronoun</H2>++<TABLE BORDER="1" CELLPADDING="4">+<TR>+<TH>Function</TH>+<TH>Type</TH>+<TH COLSPAN="2">Example</TH>+</TR>+<TR>+<TD><CODE>he_Pron</CODE></TD>+<TD><A HREF="#Pron" TITLE="Pron - personal pronoun">Pron</A></TD>+<TD><div class=reveal> <I>he</I> <div class=popup> <ul> <li>API: <CODE>mkUtt (mkNP he_Pron)</CODE> <li>Afr: <I>hy</I> <li>Bul: <I>той</I> <li>Cat: <I>ell</I> <li>Dan: <I>ham</I> <li>Dut: <I>hij</I> <li>Eng: <I>he</I> <li>Fin: <I>hän</I> <li>Fre: <I>lui</I> <li>Ger: <I>er</I> <li>Hin: <I>वह</I> <li>Ita: <I>lui</I> <li>Lav: <I>viņš</I> <li>Nep: <I>उ</I> <li>Nor: <I>ham</I> <li>Pes: <I>او</I> <li>Pnb: <I>او</I> <li>Pol: <I>on</I> <li>Ron: <I>el</I> <li>Rus: <I>его</I> <li>Snd: <I>ھو</I> <li>Spa: <I>él</I> <li>Swe: <I>honom</I> <li>Tha: <I>เขา</I> <li>Urd: <I>وہ</I> </ul> </div> </div></TD>+</TR>+<TR>+<TD><CODE>i_Pron</CODE></TD>+<TD><A HREF="#Pron" TITLE="Pron - personal pronoun">Pron</A></TD>+<TD><div class=reveal> <I>I</I> <div class=popup> <ul> <li>API: <CODE>mkUtt (mkNP i_Pron)</CODE> <li>Afr: <I>ek</I> <li>Bul: <I>аз</I> <li>Cat: <I>mi</I> <li>Dan: <I>mig</I> <li>Dut: <I>ik</I> <li>Eng: <I>I</I> <li>Fin: <I>minä</I> <li>Fre: <I>moi</I> <li>Ger: <I>ich</I> <li>Hin: <I>मैं</I> <li>Ita: <I>me</I> <li>Lav: <I>es</I> <li>Nep: <I>म</I> <li>Nor: <I>meg</I> <li>Pes: <I>من</I> <li>Pnb: <I>میں</I> <li>Pol: <I>ja</I> <li>Ron: <I>eu</I> <li>Rus: <I>меня</I> <li>Snd: <I>مان</I> <li>Spa: <I>mí</I> <li>Swe: <I>mig</I> <li>Tha: <I>ฉัน</I> <li>Urd: <I>میں</I> </ul> </div> </div></TD>+</TR>+<TR>+<TD><CODE>it_Pron</CODE></TD>+<TD><A HREF="#Pron" TITLE="Pron - personal pronoun">Pron</A></TD>+<TD><div class=reveal> <I>it</I> <div class=popup> <ul> <li>API: <CODE>mkUtt (mkNP it_Pron)</CODE> <li>Afr: <I>dit</I> <li>Bul: <I>то</I> <li>Cat: <I>ell</I> <li>Dan: <I>det</I> <li>Dut: <I>het</I> <li>Eng: <I>it</I> <li>Fin: <I>se</I> <li>Fre: <I>lui</I> <li>Ger: <I>es</I> <li>Hin: <I>यह</I> <li>Ita: <I>lui</I> <li>Lav: <I>{s : Str = "tas"; lock_Utt : {} = <>} / {s : Str = "tā";</I> <li>Nep: <I>यो</I> <li>Nor: <I>det</I> <li>Pes: <I>آن</I> <li>Pnb: <I>اے</I> <li>Pol: <I>ono</I> <li>Ron: <I>''</I> <li>Rus: <I>его</I> <li>Snd: <I>اھا</I> <li>Spa: <I>él</I> <li>Swe: <I>det</I> <li>Tha: <I>มัน</I> <li>Urd: <I>یہ</I> </ul> </div> </div></TD>+</TR>+<TR>+<TD><CODE>she_Pron</CODE></TD>+<TD><A HREF="#Pron" TITLE="Pron - personal pronoun">Pron</A></TD>+<TD><div class=reveal> <I>she</I> <div class=popup> <ul> <li>API: <CODE>mkUtt (mkNP she_Pron)</CODE> <li>Afr: <I>sy</I> <li>Bul: <I>тя</I> <li>Cat: <I>ella</I> <li>Dan: <I>hende</I> <li>Dut: <I>ze</I> <li>Eng: <I>she</I> <li>Fin: <I>hän</I> <li>Fre: <I>elle</I> <li>Ger: <I>sie</I> <li>Hin: <I>वह</I> <li>Ita: <I>lei</I> <li>Lav: <I>viņa</I> <li>Nep: <I>उनी</I> <li>Nor: <I>henne</I> <li>Pes: <I>او</I> <li>Pnb: <I>او</I> <li>Pol: <I>ona</I> <li>Ron: <I>ea</I> <li>Rus: <I>её</I> <li>Snd: <I>ھو۶</I> <li>Spa: <I>ella</I> <li>Swe: <I>henne</I> <li>Tha: <I>หล่อน</I> <li>Urd: <I>وہ</I> </ul> </div> </div></TD>+</TR>+<TR>+<TD><CODE>they_Pron</CODE></TD>+<TD><A HREF="#Pron" TITLE="Pron - personal pronoun">Pron</A></TD>+<TD><div class=reveal> <I>they</I> <div class=popup> <ul> <li>API: <CODE>mkUtt (mkNP they_Pron)</CODE> <li>Afr: <I>hulle</I> <li>Bul: <I>те</I> <li>Cat: <I>elles</I> <li>Dan: <I>dem</I> <li>Dut: <I>ze</I> <li>Eng: <I>they</I> <li>Fin: <I>he</I> <li>Fre: <I>eux</I> <li>Ger: <I>sie</I> <li>Hin: <I>वह</I> <li>Ita: <I>loro</I> <li>Lav: <I>{s : Str = "viņi"; lock_Utt : {} = <>} / {s : Str = "viņas";</I> <li>Nep: <I>उनीहरु</I> <li>Nor: <I>dem</I> <li>Pes: <I>آن ها</I> <li>Pnb: <I>او</I> <li>Pol: <I>oni</I> <li>Ron: <I>ei</I> <li>Rus: <I>их</I> <li>Snd: <I>اھی</I> <li>Spa: <I>ellos</I> <li>Swe: <I>dem</I> <li>Tha: <I>พวกเขา</I> <li>Urd: <I>وہ</I> </ul> </div> </div></TD>+</TR>+<TR>+<TD><CODE>we_Pron</CODE></TD>+<TD><A HREF="#Pron" TITLE="Pron - personal pronoun">Pron</A></TD>+<TD><div class=reveal> <I>we</I> <div class=popup> <ul> <li>API: <CODE>mkUtt (mkNP we_Pron)</CODE> <li>Afr: <I>ons</I> <li>Bul: <I>ние</I> <li>Cat: <I>nosaltres</I> <li>Dan: <I>os</I> <li>Dut: <I>we</I> <li>Eng: <I>we</I> <li>Fin: <I>me</I> <li>Fre: <I>nous</I> <li>Ger: <I>wir</I> <li>Hin: <I>हम</I> <li>Ita: <I>noi</I> <li>Lav: <I>mēs</I> <li>Nep: <I>हामीहरु</I> <li>Nor: <I>oss</I> <li>Pes: <I>ما</I> <li>Pnb: <I>اسی</I> <li>Pol: <I>my</I> <li>Ron: <I>noi</I> <li>Rus: <I>нас</I> <li>Snd: <I>اسان</I> <li>Spa: <I>nosotros</I> <li>Swe: <I>oss</I> <li>Tha: <I>เรา</I> <li>Urd: <I>ہم</I> </ul> </div> </div></TD>+</TR>+<TR>+<TD><CODE>youPl_Pron</CODE></TD>+<TD><A HREF="#Pron" TITLE="Pron - personal pronoun">Pron</A></TD>+<TD><div class=reveal> <I>you</I> <div class=popup> <ul> <li>API: <CODE>mkUtt (mkNP youPl_Pron)</CODE> <li>Afr: <I>julle</I> <li>Bul: <I>вие</I> <li>Cat: <I>vosaltres</I> <li>Dan: <I>jer</I> <li>Dut: <I>jullie</I> <li>Eng: <I>you</I> <li>Fin: <I>te</I> <li>Fre: <I>vous</I> <li>Ger: <I>ihr</I> <li>Hin: <I>तुम</I> <li>Ita: <I>voi</I> <li>Lav: <I>jūs</I> <li>Nep: <I>तिमीहरु</I> <li>Nor: <I>dere</I> <li>Pes: <I>شما</I> <li>Pnb: <I>تسی</I> <li>Pol: <I>wy</I> <li>Ron: <I>voi</I> <li>Rus: <I>вас</I> <li>Snd: <I>توھان</I> <li>Spa: <I>vosotros</I> <li>Swe: <I>er</I> <li>Tha: <I>พวกคุณ</I> <li>Urd: <I>تم</I> </ul> </div> </div></TD>+</TR>+<TR>+<TD><CODE>youPol_Pron</CODE></TD>+<TD><A HREF="#Pron" TITLE="Pron - personal pronoun">Pron</A></TD>+<TD><div class=reveal> <I>you</I> <div class=popup> <ul> <li>API: <CODE>mkUtt (mkNP youPol_Pron)</CODE> <li>Afr: <I>u</I> <li>Bul: <I>вие</I> <li>Cat: <I>vosté</I> <li>Dan: <I>Dem</I> <li>Dut: <I>u</I> <li>Eng: <I>you</I> <li>Fin: <I>te</I> <li>Fre: <I>vous</I> <li>Ger: <I>Sie</I> <li>Hin: <I>आप</I> <li>Ita: <I>Lei</I> <li>Lav: <I>jūs</I> <li>Nep: <I>तपाई</I> <li>Nor: <I>Dere</I> <li>Pes: <I>شما</I> <li>Pnb: <I>تسی</I> <li>Pol: <I>ty</I> <li>Ron: <I>dumneavoastră</I> <li>Rus: <I>вас</I> <li>Snd: <I>توھان</I> <li>Spa: <I>usted</I> <li>Swe: <I>er</I> <li>Tha: <I>คุณ</I> <li>Urd: <I>آپ</I> </ul> </div> </div></TD>+</TR>+<TR>+<TD><CODE>youSg_Pron</CODE></TD>+<TD><A HREF="#Pron" TITLE="Pron - personal pronoun">Pron</A></TD>+<TD><div class=reveal> <I>you</I> <div class=popup> <ul> <li>API: <CODE>mkUtt (mkNP youSg_Pron)</CODE> <li>Afr: <I>jy</I> <li>Bul: <I>ти</I> <li>Cat: <I>tu</I> <li>Dan: <I>dig</I> <li>Dut: <I>je</I> <li>Eng: <I>you</I> <li>Fin: <I>sinä</I> <li>Fre: <I>toi</I> <li>Ger: <I>du</I> <li>Hin: <I>तू</I> <li>Ita: <I>te</I> <li>Lav: <I>tu</I> <li>Nep: <I>तिमी</I> <li>Nor: <I>deg</I> <li>Pes: <I>تو</I> <li>Pnb: <I>توں</I> <li>Pol: <I>ty</I> <li>Ron: <I>tu</I> <li>Rus: <I>тебя</I> <li>Snd: <I>تون</I> <li>Spa: <I>tí</I> <li>Swe: <I>dig</I> <li>Tha: <I>คุณ</I> <li>Urd: <I>تو</I> </ul> </div> </div></TD>+</TR>+</TABLE>++<A NAME="Punct"></A>+<H2>Punct</H2>++<TABLE BORDER="1" CELLPADDING="4">+<TR>+<TH>Function</TH>+<TH>Type</TH>+<TH COLSPAN="2">Example</TH>+</TR>+<TR>+<TD><CODE>exclMarkPunct</CODE></TD>+<TD><A HREF="#Punct">Punct</A></TD>+<TD><div class=reveal> <I>yes !</I> <div class=popup> <ul> <li>API: <CODE>mkText (mkPhr yes_Utt) exclMarkPunct</CODE> <li>Afr: <I>ja !</I> <li>Bul: <I>да !</I> <li>Cat: <I>sí !</I> <li>Dan: <I>ja !</I> <li>Dut: <I>ja !</I> <li>Eng: <I>yes !</I> <li>Fin: <I>kyllä !</I> <li>Fre: <I>oui !</I> <li>Ger: <I>ja !</I> <li>Hin: <I>हाँ !</I> <li>Ita: <I>sì !</I> <li>Lav: <I>jā !</I> <li>Nep: <I>हजुर !</I> <li>Nor: <I>ja !</I> <li>Pes: <I>بله</I> <li>Pnb: <I>ہاں !</I> <li>Pol: <I>tak !</I> <li>Ron: <I>da !</I> <li>Rus: <I>Да !</I> <li>Snd: <I>ھا !</I> <li>Spa: <I>¡ sí !</I> <li>Swe: <I>ja !</I> <li>Tha: <I>ใช่</I> <li>Urd: <I>ہاں</I> </ul> </div> </div></TD>+</TR>+<TR>+<TD><CODE>fullStopPunct</CODE></TD>+<TD><A HREF="#Punct">Punct</A></TD>+<TD><div class=reveal> <I>yes .</I> <div class=popup> <ul> <li>API: <CODE>mkText (mkPhr yes_Utt) fullStopPunct</CODE> <li>Afr: <I>ja .</I> <li>Bul: <I>да .</I> <li>Cat: <I>sí .</I> <li>Dan: <I>ja .</I> <li>Dut: <I>ja .</I> <li>Eng: <I>yes .</I> <li>Fin: <I>kyllä .</I> <li>Fre: <I>oui .</I> <li>Ger: <I>ja .</I> <li>Hin: <I>हाँ .</I> <li>Ita: <I>sì .</I> <li>Lav: <I>jā .</I> <li>Nep: <I>हजुर .</I> <li>Nor: <I>ja .</I> <li>Pes: <I>بله Û”</I> <li>Pnb: <I>ہاں .</I> <li>Pol: <I>tak .</I> <li>Ron: <I>da .</I> <li>Rus: <I>Да .</I> <li>Snd: <I>ھا .</I> <li>Spa: <I>sí .</I> <li>Swe: <I>ja .</I> <li>Tha: <I>ใช่</I> <li>Urd: <I>ہاں</I> </ul> </div> </div></TD>+</TR>+<TR>+<TD><CODE>questMarkPunct</CODE></TD>+<TD><A HREF="#Punct">Punct</A></TD>+<TD><div class=reveal> <I>yes ?</I> <div class=popup> <ul> <li>API: <CODE>mkText (mkPhr yes_Utt) questMarkPunct</CODE> <li>Afr: <I>ja ?</I> <li>Bul: <I>да ?</I> <li>Cat: <I>sí ?</I> <li>Dan: <I>ja ?</I> <li>Dut: <I>ja ?</I> <li>Eng: <I>yes ?</I> <li>Fin: <I>kyllä ?</I> <li>Fre: <I>oui ?</I> <li>Ger: <I>ja ?</I> <li>Hin: <I>हाँ ?</I> <li>Ita: <I>sì ?</I> <li>Lav: <I>jā ?</I> <li>Nep: <I>हजुर ?</I> <li>Nor: <I>ja ?</I> <li>Pes: <I>بله</I> <li>Pnb: <I>ہاں ?</I> <li>Pol: <I>tak ?</I> <li>Ron: <I>da ?</I> <li>Rus: <I>Да ?</I> <li>Snd: <I>ھا ?</I> <li>Spa: <I>¿ sí ?</I> <li>Swe: <I>ja ?</I> <li>Tha: <I>ใช่</I> <li>Urd: <I>ہاں</I> </ul> </div> </div></TD>+</TR>+</TABLE>++<A NAME="QCl"></A>+<H2>QCl - question clause, with all tenses</H2>++<TABLE BORDER="1" CELLPADDING="4">+<TR>+<TH>Function</TH>+<TH>Type</TH>+<TH COLSPAN="2">Example</TH>+</TR>+<TR>+<TD><CODE>mkQCl</CODE></TD>+<TD><A HREF="#Cl" TITLE="Cl - declarative clause, with all tenses">Cl</A> <CODE>-></CODE> <A HREF="#QCl" TITLE="QCl - question clause, with all tenses">QCl</A></TD>+<TD><div class=reveal> <I>does she sleep</I> <div class=popup> <ul> <li>API: <CODE>mkQCl (mkCl she_NP sleep_V)</CODE> <li>Afr: <I>slaap sy</I> <li>Bul: <I>тя спи ли</I> <li>Cat: <I>ella dorm</I> <li>Dan: <I>sover hun</I> <li>Dut: <I>slaapt ze</I> <li>Eng: <I>does she sleep</I> <li>Fin: <I>nukkuuko hän</I> <li>Fre: <I>elle dort</I> <li>Ger: <I>schläft sie</I> <li>Hin: <I>कया वह सोती है</I> <li>Ita: <I>lei dorme</I> <li>Lav: <I>vai viņa guļ</I> <li>Nep: <I>के उनी सुत्छिन्</I> <li>Nor: <I>sover hun</I> <li>Pes: <I>آیا او می خوابد</I> <li>Pnb: <I>كی او سوندی اے</I> <li>Pol: <I>czy ona śpi</I> <li>Ron: <I>ea doarme</I> <li>Rus: <I>она спдит</I> <li>Snd: <I>ڇا ھو۶ سمھی ٿی</I> <li>Spa: <I>ella duerme</I> <li>Swe: <I>sover hon</I> <li>Tha: <I>หล่อนนอนหลับไหม</I> <li>Urd: <I>كیا وہ سوتی ہے</I> </ul> </div> </div></TD>+</TR>+<TR>+<TD><CODE>mkQCl</CODE></TD>+<TD><A HREF="#IP" TITLE="IP - interrogative pronoun">IP</A> <CODE>-></CODE> <A HREF="#VP" TITLE="VP - verb phrase">VP</A> <CODE>-></CODE> <A HREF="#QCl" TITLE="QCl - question clause, with all tenses">QCl</A></TD>+<TD><div class=reveal> <I>who always sleeps</I> <div class=popup> <ul> <li>API: <CODE>mkQCl who_IP (mkVP always_AdV (mkVP sleep_V))</CODE> <li>Afr: <I>wie slaap altyd altyd</I> <li>Bul: <I>кой винаги спи</I> <li>Cat: <I>qui dorm sempre</I> <li>Dan: <I>hvem sover altid</I> <li>Dut: <I>wie slaapt altijd</I> <li>Eng: <I>who always sleeps</I> <li>Fin: <I>kuka nukkuu aina</I> <li>Fre: <I>qui dort toujours</I> <li>Ger: <I>wer schläft immer</I> <li>Hin: <I>कौन हमेशा सोता है</I> <li>Ita: <I>chi dorme sempre</I> <li>Lav: <I>kurš guļ</I> <li>Nep: <I>को सधैँ सुत्छन्</I> <li>Nor: <I>hvem sover altid</I> <li>Pes: <I>چه کسی همیشه می خوابد</I> <li>Pnb: <I>كون ہمیشہ سوندا اے</I> <li>Pol: <I>kto zawsze śpi</I> <li>Ron: <I>cine doarme mereu</I> <li>Rus: <I>кто всегда спдит</I> <li>Snd: <I>ڪیر ھمیشھ سمھی ٿو</I> <li>Spa: <I>quién duerme siempre</I> <li>Swe: <I>vem sover alltid</I> <li>Tha: <I>ใครนอนหลับเสมอ</I> <li>Urd: <I>كون ہمیشہ سوتا ہے</I> </ul> </div> </div></TD>+</TR>+<TR>+<TD><CODE>mkQCl</CODE></TD>+<TD><A HREF="#IP" TITLE="IP - interrogative pronoun">IP</A> <CODE>-></CODE> <A HREF="#V" TITLE="V - one-place verb">V</A> <CODE>-></CODE> <A HREF="#QCl" TITLE="QCl - question clause, with all tenses">QCl</A></TD>+<TD><div class=reveal> <I>who sleeps</I> <div class=popup> <ul> <li>API: <CODE>mkQCl who_IP sleep_V</CODE> <li>Afr: <I>wie slaap</I> <li>Bul: <I>кой спи</I> <li>Cat: <I>qui dorm</I> <li>Dan: <I>hvem sover</I> <li>Dut: <I>wie slaapt</I> <li>Eng: <I>who sleeps</I> <li>Fin: <I>kuka nukkuu</I> <li>Fre: <I>qui dort</I> <li>Ger: <I>wer schläft</I> <li>Hin: <I>कौन सोता है</I> <li>Ita: <I>chi dorme</I> <li>Lav: <I>kurš guļ</I> <li>Nep: <I>को सुत्छन्</I> <li>Nor: <I>hvem sover</I> <li>Pes: <I>چه کسی می خوابد</I> <li>Pnb: <I>كون سوندا اے</I> <li>Pol: <I>kto śpi</I> <li>Ron: <I>cine doarme</I> <li>Rus: <I>кто спдит</I> <li>Snd: <I>ڪیر سمھی ٿو</I> <li>Spa: <I>quién duerme</I> <li>Swe: <I>vem sover</I> <li>Tha: <I>ใครนอนหลับ</I> <li>Urd: <I>كون سوتا ہے</I> </ul> </div> </div></TD>+</TR>+<TR>+<TD><CODE>mkQCl</CODE></TD>+<TD><A HREF="#IP" TITLE="IP - interrogative pronoun">IP</A> <CODE>-></CODE> <A HREF="#V2" TITLE="V2 - two-place verb">V2</A> <CODE>-></CODE> <A HREF="#NP" TITLE="NP - noun phrase (subject or object)">NP</A> <CODE>-></CODE> <A HREF="#QCl" TITLE="QCl - question clause, with all tenses">QCl</A></TD>+<TD><div class=reveal> <I>who loves her</I> <div class=popup> <ul> <li>API: <CODE>mkQCl who_IP love_V2 she_NP</CODE> <li>Afr: <I>wie het haar lief</I> <li>Bul: <I>кой обича нея</I> <li>Cat: <I>qui la estima</I> <li>Dan: <I>hvem elsker hende</I> <li>Dut: <I>wie heeft haar lief</I> <li>Eng: <I>who loves her</I> <li>Fin: <I>kuka rakastaa häntä</I> <li>Fre: <I>qui l' aime</I> <li>Ger: <I>wer liebt sie</I> <li>Hin: <I>कौन उस को प्यार करता है</I> <li>Ita: <I>chi la ama</I> <li>Lav: <I>kurš mīl</I> <li>Nep: <I>को उनी लाई माया गर्छन्</I> <li>Nor: <I>hvem elsker henne</I> <li>Pes: <I>چه کسی او را دوست دارد</I> <li>Pnb: <I>كون اونوں پیار كردا اے</I> <li>Pol: <I>kto kocha ją</I> <li>Ron: <I>cine o iubeşte</I> <li>Rus: <I>кто любдит её</I> <li>Snd: <I>ڪیر ھو سان عشق ڪری ٿو</I> <li>Spa: <I>quién la ama</I> <li>Swe: <I>vem älskar henne</I> <li>Tha: <I>ใครรักหล่อน</I> <li>Urd: <I>كون اس كو پیار كرتا ہے</I> </ul> </div> </div></TD>+</TR>+<TR>+<TD><CODE>mkQCl</CODE></TD>+<TD><A HREF="#IP" TITLE="IP - interrogative pronoun">IP</A> <CODE>-></CODE> <A HREF="#V3" TITLE="V3 - three-place verb">V3</A> <CODE>-></CODE> <A HREF="#NP" TITLE="NP - noun phrase (subject or object)">NP</A> <CODE>-></CODE> <A HREF="#NP" TITLE="NP - noun phrase (subject or object)">NP</A> <CODE>-></CODE> <A HREF="#QCl" TITLE="QCl - question clause, with all tenses">QCl</A></TD>+<TD><div class=reveal> <I>who sends it to her</I> <div class=popup> <ul> <li>API: <CODE>mkQCl who_IP send_V3 it_NP she_NP</CODE> <li>Afr: <I>wie stuur dit na haar</I> <li>Bul: <I>кой праща него до нея</I> <li>Cat: <I>qui ho li envia</I> <li>Dan: <I>hvem sender det til hende</I> <li>Dut: <I>wie stuurt het naar haar</I> <li>Eng: <I>who sends it to her</I> <li>Fin: <I>kuka lähettää sen hänelle</I> <li>Fre: <I>qui le lui envoie</I> <li>Ger: <I>wer schickt es ihr</I> <li>Hin: <I>कौन यह उस को भेजता है</I> <li>Ita: <I>chi lo le manda</I> <li>Lav: <I>kurš sūta</I> <li>Nep: <I>को यो उन्लाई लाई पठाउँछन्</I> <li>Nor: <I>hvem sender det til henne</I> <li>Pes: <I>چه کسی آن را برای او می فرستد</I> <li>Pnb: <I>كون اینوں اونوں پیجدا اے</I> <li>Pol: <I>kto wysyła do niej je</I> <li>Ron: <I>cine i -l trimite</I> <li>Rus: <I>кто посылает ней его</I> <li>Snd: <I>constant not found: send_V3</I> <li>Spa: <I>quién lo le manda</I> <li>Swe: <I>vem skickar det till henne</I> <li>Tha: <I>ใครส่งมันให้กับหล่อน</I> <li>Urd: <I>كون یہ اس كو بھیجتا ہے</I> </ul> </div> </div></TD>+</TR>+<TR>+<TD><CODE>mkQCl</CODE></TD>+<TD><A HREF="#IP" TITLE="IP - interrogative pronoun">IP</A> <CODE>-></CODE> <A HREF="#VV" TITLE="VV - verb-phrase-complement verb">VV</A> <CODE>-></CODE> <A HREF="#VP" TITLE="VP - verb phrase">VP</A> <CODE>-></CODE> <A HREF="#QCl" TITLE="QCl - question clause, with all tenses">QCl</A></TD>+<TD><div class=reveal> <I>who wants to sleep</I> <div class=popup> <ul> <li>API: <CODE>mkQCl who_IP want_VV (mkVP sleep_V)</CODE> <li>Afr: <I>wie wil te slaap</I> <li>Bul: <I>кой иска да спи</I> <li>Cat: <I>qui vol dormir</I> <li>Dan: <I>hvem vil sove</I> <li>Dut: <I>wie wil slapen</I> <li>Eng: <I>who wants to sleep</I> <li>Fin: <I>kuka tahtoo nukkua</I> <li>Fre: <I>qui veut dormir</I> <li>Ger: <I>wer will schlafen</I> <li>Hin: <I>कौन सोना चाहता है</I> <li>Ita: <I>chi vuole dormire</I> <li>Lav: <I>kurš grib</I> <li>Nep: <I>को सुत्न चाहन्छन्</I> <li>Nor: <I>hvem vil sove</I> <li>Pes: <I>چه کسی می خواهد بخوابد</I> <li>Pnb: <I>كون سونا چاندا اے</I> <li>Pol: <I>kto chce spać</I> <li>Ron: <I>cine vrea sã doarmă</I> <li>Rus: <I>кто хочет спать</I> <li>Snd: <I>ڪیر سمھڻ چاھی ٿو</I> <li>Spa: <I>quién quiere dormir</I> <li>Swe: <I>vem vill sova</I> <li>Tha: <I>ใครอยากนอนหลับ</I> <li>Urd: <I>كون سونا چاہتا ہے</I> </ul> </div> </div></TD>+</TR>+<TR>+<TD><CODE>mkQCl</CODE></TD>+<TD><A HREF="#IP" TITLE="IP - interrogative pronoun">IP</A> <CODE>-></CODE> <A HREF="#VS" TITLE="VS - sentence-complement verb">VS</A> <CODE>-></CODE> <A HREF="#S" TITLE="S - declarative sentence">S</A> <CODE>-></CODE> <A HREF="#QCl" TITLE="QCl - question clause, with all tenses">QCl</A></TD>+<TD><div class=reveal> <I>who says that I sleep</I> <div class=popup> <ul> <li>API: <CODE>mkQCl who_IP say_VS (mkS (mkCl i_NP sleep_V))</CODE> <li>Afr: <I>wie sê dat ek slaap</I> <li>Bul: <I>кой казва , че аз спя</I> <li>Cat: <I>qui diu que jo dormo</I> <li>Dan: <I>hvem siger at jeg sover</I> <li>Dut: <I>wie zegt dat ik slaap</I> <li>Eng: <I>who says that I sleep</I> <li>Fin: <I>kuka sanoo että minä nukun</I> <li>Fre: <I>qui dit que je dors</I> <li>Ger: <I>wer sagt daß ich schlafe</I> <li>Hin: <I>कौन कहता है कि मैं सोता हूँ</I> <li>Ita: <I>chi dice che io dormo</I> <li>Lav: <I>kurš saka</I> <li>Nep: <I>को भन्छन्की म सुत्छु</I> <li>Nor: <I>hvem sier at jeg sover</I> <li>Pes: <I>چه کسی می گوید که من می خوابم</I> <li>Pnb: <I>كون كہدا اے كہ میں سوندا واں</I> <li>Pol: <I>kto mówi , że ja śpię</I> <li>Ron: <I>cine spune cã eu dorm</I> <li>Rus: <I>кто говордит , что я сплю</I> <li>Snd: <I>ڪیر چوی ٿو ت مان سمھان ٿو</I> <li>Spa: <I>quién dice que yo duermo</I> <li>Swe: <I>vem säger att jag sover</I> <li>Tha: <I>ใครพูดว่าฉันนอนหลับ</I> <li>Urd: <I>كون كہتا ہے كہ میں سوتا ہوں</I> </ul> </div> </div></TD>+</TR>+<TR>+<TD><CODE>mkQCl</CODE></TD>+<TD><A HREF="#IP" TITLE="IP - interrogative pronoun">IP</A> <CODE>-></CODE> <A HREF="#VQ" TITLE="VQ - question-complement verb">VQ</A> <CODE>-></CODE> <A HREF="#QS" TITLE="QS - question">QS</A> <CODE>-></CODE> <A HREF="#QCl" TITLE="QCl - question clause, with all tenses">QCl</A></TD>+<TD><div class=reveal> <I>who wonders who sleeps</I> <div class=popup> <ul> <li>API: <CODE>mkQCl who_IP wonder_VQ (mkQS (mkQCl who_IP sleep_V))</CODE> <li>Afr: <I>wie vra hom af wie slaap</I> <li>Bul: <I>кой се учудва кой спи</I> <li>Cat: <I>qui se pregunta qui dorm</I> <li>Dan: <I>hvem undres hvem som sover</I> <li>Dut: <I>wie vraagt zich af wie slaapt</I> <li>Eng: <I>who wonders who sleeps</I> <li>Fin: <I>kuka ihmettelee kuka nukkuu</I> <li>Fre: <I>qui se demande qui dort</I> <li>Ger: <I>wer wundert sich wer schläft</I> <li>Hin: <I>कौन हैरान होता है कि कौन सोता है</I> <li>Ita: <I>chi si domanda chi dorme</I> <li>Lav: <I>kurš brīnās</I> <li>Nep: <I>को अचम्म हुन्छन्की को सुत्छन्</I> <li>Nor: <I>hvem undrer hvem som sover</I> <li>Pes: <I>constant not found: wonder_VQ</I> <li>Pnb: <I>كون حیران ہوندا اے كہ كون سوندا اے</I> <li>Pol: <I>kto zastanawia się , kto śpi</I> <li>Ron: <I>cine se întreabă cine doarme</I> <li>Rus: <I>кто интересует кто спдит</I> <li>Snd: <I>ڪیر ھیران ٿیی ٿو ت ڪیر سمھی ٿو</I> <li>Spa: <I>quién se pregunta quién duerme</I> <li>Swe: <I>vem undrar vem som sover</I> <li>Tha: <I>ใครประหลาดใจว่าใครนอนหลับ</I> <li>Urd: <I>كون حیران ہوتا ہے كہ كون سوتا ہے</I> </ul> </div> </div></TD>+</TR>+<TR>+<TD><CODE>mkQCl</CODE></TD>+<TD><A HREF="#IP" TITLE="IP - interrogative pronoun">IP</A> <CODE>-></CODE> <A HREF="#VA" TITLE="VA - adjective-complement verb">VA</A> <CODE>-></CODE> <A HREF="#A" TITLE="A - one-place adjective">A</A> <CODE>-></CODE> <A HREF="#QCl" TITLE="QCl - question clause, with all tenses">QCl</A></TD>+<TD><div class=reveal> <I>who becomes old</I> <div class=popup> <ul> <li>API: <CODE>mkQCl who_IP become_VA old_A</CODE> <li>Afr: <I>wie word oud</I> <li>Bul: <I>кой става стар</I> <li>Cat: <I>qui se torna vell</I> <li>Dan: <I>hvem bliver gammel</I> <li>Dut: <I>wie wordt oud</I> <li>Eng: <I>who becomes old</I> <li>Fin: <I>kuka tulee vanhaksi</I> <li>Fre: <I>qui devient vieux</I> <li>Ger: <I>wer wird alt</I> <li>Hin: <I>कौन बूढ़ा बनता है</I> <li>Ita: <I>chi diventa vecchio</I> <li>Lav: <I>kurš kļūst</I> <li>Nep: <I>को बुढो हुन्छन्</I> <li>Nor: <I>hvem blir gammel</I> <li>Pes: <I>چه کسی پیر می شود</I> <li>Pnb: <I>كون بوڈا بندا اے</I> <li>Pol: <I>kto staje się stary</I> <li>Ron: <I>cine devine vechi</I> <li>Rus: <I>кто становдит старым</I> <li>Snd: <I>ڪیر پوڙھی ٿیی ٿو</I> <li>Spa: <I>quién se converte viejo</I> <li>Swe: <I>vem blir gammal</I> <li>Tha: <I>ใครกลายเป็นแก่</I> <li>Urd: <I>كون بوڑھا بنتا ہے</I> </ul> </div> </div></TD>+</TR>+<TR>+<TD><CODE>mkQCl</CODE></TD>+<TD><A HREF="#IP" TITLE="IP - interrogative pronoun">IP</A> <CODE>-></CODE> <A HREF="#VA" TITLE="VA - adjective-complement verb">VA</A> <CODE>-></CODE> <A HREF="#AP" TITLE="AP - adjectival phrase">AP</A> <CODE>-></CODE> <A HREF="#QCl" TITLE="QCl - question clause, with all tenses">QCl</A></TD>+<TD><div class=reveal> <I>who becomes very old</I> <div class=popup> <ul> <li>API: <CODE>mkQCl who_IP become_VA (mkAP very_AdA old_A)</CODE> <li>Afr: <I>wie word baie oud</I> <li>Bul: <I>кой става много стар</I> <li>Cat: <I>qui se torna molt vell</I> <li>Dan: <I>hvem bliver meget gammel</I> <li>Dut: <I>wie wordt erg oud</I> <li>Eng: <I>who becomes very old</I> <li>Fin: <I>kuka tulee erittäin vanhaksi</I> <li>Fre: <I>qui devient très vieux</I> <li>Ger: <I>wer wird sehr alt</I> <li>Hin: <I>कौन बहुत बूढ़ा बनता है</I> <li>Ita: <I>chi diventa molto vecchio</I> <li>Lav: <I>kurš kļūst</I> <li>Nep: <I>को धेरै बुढो हुन्छन्</I> <li>Nor: <I>hvem blir mye gammel</I> <li>Pes: <I>چه کسی خیلی پیر می شود</I> <li>Pnb: <I>كون بہت بوڈا بندا اے</I> <li>Pol: <I>kto staje się bardzo stary</I> <li>Ron: <I>cine devine foarte vechi</I> <li>Rus: <I>кто становдит очень старым</I> <li>Snd: <I>ڪیر تمام پوڙھی ٿیی ٿو</I> <li>Spa: <I>quién se converte muy viejo</I> <li>Swe: <I>vem blir mycket gammal</I> <li>Tha: <I>ใครกลายเป็นแก่มาก</I> <li>Urd: <I>كون بہت بوڑھا بنتا ہے</I> </ul> </div> </div></TD>+</TR>+<TR>+<TD><CODE>mkQCl</CODE></TD>+<TD><A HREF="#IP" TITLE="IP - interrogative pronoun">IP</A> <CODE>-></CODE> <A HREF="#V2A" TITLE="V2A - verb with NP and AP complement">V2A</A> <CODE>-></CODE> <A HREF="#NP" TITLE="NP - noun phrase (subject or object)">NP</A> <CODE>-></CODE> <A HREF="#A" TITLE="A - one-place adjective">A</A> <CODE>-></CODE> <A HREF="#QCl" TITLE="QCl - question clause, with all tenses">QCl</A></TD>+<TD><div class=reveal> <I>who paints it red</I> <div class=popup> <ul> <li>API: <CODE>mkQCl who_IP paint_V2A it_NP red_A</CODE> <li>Afr: <I>wie skilder dit rooi</I> <li>Bul: <I>кой рисува него червено</I> <li>Cat: <I>qui ho pinta en vermell</I> <li>Dan: <I>hvem maler det rødt</I> <li>Dut: <I>wie schildert het rood</I> <li>Eng: <I>who paints it red</I> <li>Fin: <I>kuka maalaa sen punaiseksi</I> <li>Fre: <I>qui le peint en rouge</I> <li>Ger: <I>wer malt es rot</I> <li>Hin: <I>कौन इस को लाल रंग करता है</I> <li>Ita: <I>chi lo dipinge rosso</I> <li>Lav: <I>kurš krāso</I> <li>Nep: <I>को यो लाई रातो रँग लागाउँछन्</I> <li>Nor: <I>hvem maler det rødt</I> <li>Pes: <I>چه کسی آن را قرمز رنگ می کند</I> <li>Pnb: <I>كون اینوں لال رنگ كردا اے</I> <li>Pol: <I>kto maluje je na czerwono</I> <li>Ron: <I>cine îl pictează roşu</I> <li>Rus: <I>кто рисует красным его</I> <li>Snd: <I>ڪیر ھن کی ڳاڙھو رنگ ڪری ٿو</I> <li>Spa: <I>quién lo pinta en rojo</I> <li>Swe: <I>vem målar det rött</I> <li>Tha: <I>ใครทามันเป็นสีแดง</I> <li>Urd: <I>كون اس كو لال رنگ كرتا ہے</I> </ul> </div> </div></TD>+</TR>+<TR>+<TD><CODE>mkQCl</CODE></TD>+<TD><A HREF="#IP" TITLE="IP - interrogative pronoun">IP</A> <CODE>-></CODE> <A HREF="#V2A" TITLE="V2A - verb with NP and AP complement">V2A</A> <CODE>-></CODE> <A HREF="#NP" TITLE="NP - noun phrase (subject or object)">NP</A> <CODE>-></CODE> <A HREF="#AP" TITLE="AP - adjectival phrase">AP</A> <CODE>-></CODE> <A HREF="#QCl" TITLE="QCl - question clause, with all tenses">QCl</A></TD>+<TD><div class=reveal> <I>who paints it very red</I> <div class=popup> <ul> <li>API: <CODE>mkQCl who_IP paint_V2A it_NP (mkAP very_AdA red_A)</CODE> <li>Afr: <I>wie skilder dit baie rooi</I> <li>Bul: <I>кой рисува него много червено</I> <li>Cat: <I>qui ho pinta en molt vermell</I> <li>Dan: <I>hvem maler det meget rødt</I> <li>Dut: <I>wie schildert het erg rood</I> <li>Eng: <I>who paints it very red</I> <li>Fin: <I>kuka maalaa sen erittäin punaiseksi</I> <li>Fre: <I>qui le peint en très rouge</I> <li>Ger: <I>wer malt es sehr rot</I> <li>Hin: <I>कौन इस को बहुत लाल रंग करता है</I> <li>Ita: <I>chi lo dipinge molto rosso</I> <li>Lav: <I>kurš krāso</I> <li>Nep: <I>को यो लाई धेरै रातो रँग लागाउँछन्</I> <li>Nor: <I>hvem maler det mye rødt</I> <li>Pes: <I>چه کسی آن را خیلی قرمز رنگ می کند</I> <li>Pnb: <I>كون اینوں بہت لال رنگ كردا اے</I> <li>Pol: <I>kto maluje je na bardzo czerwono</I> <li>Ron: <I>cine îl pictează foarte roşu</I> <li>Rus: <I>кто рисует очень красным его</I> <li>Snd: <I>ڪیر ھن کی تمام ڳاڙھو رنگ ڪری ٿو</I> <li>Spa: <I>quién lo pinta en muy rojo</I> <li>Swe: <I>vem målar det mycket rött</I> <li>Tha: <I>ใครทามันเป็นสีแดงมาก</I> <li>Urd: <I>كون اس كو بہت لال رنگ كرتا ہے</I> </ul> </div> </div></TD>+</TR>+<TR>+<TD><CODE>mkQCl</CODE></TD>+<TD><A HREF="#IP" TITLE="IP - interrogative pronoun">IP</A> <CODE>-></CODE> <A HREF="#V2S" TITLE="V2S - verb with NP and S complement">V2S</A> <CODE>-></CODE> <A HREF="#NP" TITLE="NP - noun phrase (subject or object)">NP</A> <CODE>-></CODE> <A HREF="#S" TITLE="S - declarative sentence">S</A> <CODE>-></CODE> <A HREF="#QCl" TITLE="QCl - question clause, with all tenses">QCl</A></TD>+<TD><div class=reveal> <I>who answers to him that we sleep</I> <div class=popup> <ul> <li>API: <CODE>mkQCl who_IP answer_V2S he_NP (mkS (mkCl we_NP sleep_V))</CODE> <li>Afr: <I>wie antwoord hom dat ons slaap</I> <li>Bul: <I>кой отговаря му , че ние спим</I> <li>Cat: <I>qui li respon que nosaltres dormim</I> <li>Dan: <I>hvem svarer til ham at vi sover</I> <li>Dut: <I>wie antwoordt hem dat we slapen</I> <li>Eng: <I>who answers to him that we sleep</I> <li>Fin: <I>kuka vastaa hänelle että me nukumme</I> <li>Fre: <I>qui lui répond que nous dormons</I> <li>Ger: <I>wer antwortet ihm daß wir schlafen</I> <li>Hin: <I>कौन उस को जवाब देता है कि हम सोते हैँ</I> <li>Ita: <I>chi gli risponde che noi dormiamo</I> <li>Lav: <I>kurš atbild</I> <li>Nep: <I>को उ लाई उत्तर दिन्छन्की हामीहरु सुत्छौँ</I> <li>Nor: <I>hvem svarer til ham at vi sover</I> <li>Pes: <I>چه کسی به او جواب می دهد که ما می خوابیم</I> <li>Pnb: <I>كون اونوں جواب دیندا اے كہ اسی سوندے واں</I> <li>Pol: <I>kto odpowiada jemu , że my śpimy</I> <li>Ron: <I>cine îi răspunde cã noi dormim</I> <li>Rus: <I>кто отвечает , что мы спдим его</I> <li>Snd: <I>ڪیر ھو کی جواب ڏیی ٿو ت اسان سمھون ٿا</I> <li>Spa: <I>quién le responde que nosotros dormimos</I> <li>Swe: <I>vem svarar till honom att vi sover</I> <li>Tha: <I>ใครตอบเขาว่าเรานอนหลับ</I> <li>Urd: <I>كون اس كو جواب دیتا ہے كہ ہم سوتے ہیں</I> </ul> </div> </div></TD>+</TR>+<TR>+<TD><CODE>mkQCl</CODE></TD>+<TD><A HREF="#IP" TITLE="IP - interrogative pronoun">IP</A> <CODE>-></CODE> <A HREF="#V2Q" TITLE="V2Q - verb with NP and Q complement">V2Q</A> <CODE>-></CODE> <A HREF="#NP" TITLE="NP - noun phrase (subject or object)">NP</A> <CODE>-></CODE> <A HREF="#QS" TITLE="QS - question">QS</A> <CODE>-></CODE> <A HREF="#QCl" TITLE="QCl - question clause, with all tenses">QCl</A></TD>+<TD><div class=reveal> <I>who asks him who sleeps</I> <div class=popup> <ul> <li>API: <CODE>mkQCl who_IP ask_V2Q he_NP (mkQS (mkQCl who_IP sleep_V))</CODE> <li>Afr: <I>wie vra hom wie slaap</I> <li>Bul: <I>кой пита него кой спи</I> <li>Cat: <I>qui li pregunta qui dorm</I> <li>Dan: <I>hvem spørger ham hvem som sover</I> <li>Dut: <I>wie vraagt hem wie slaapt</I> <li>Eng: <I>who asks him who sleeps</I> <li>Fin: <I>kuka kysyy häneltä kuka nukkuu</I> <li>Fre: <I>qui lui demande qui dort</I> <li>Ger: <I>wer fragt ihn wer schläft</I> <li>Hin: <I>कौन उस से पूछता है कि कौन सोता है</I> <li>Ita: <I>chi gli chiede chi dorme</I> <li>Lav: <I>kurš vaicā</I> <li>Nep: <I>को उ सँग सोध्छन्की को सुत्छन्</I> <li>Nor: <I>hvem spørr ham hvem som sover</I> <li>Pes: <I>چه کسی از او می پرسد چه کسی می خوابد</I> <li>Pnb: <I>كون اونوں پچھدا اے كہ كون سوندا اے</I> <li>Pol: <I>kto pyta jego , kto śpi</I> <li>Ron: <I>cine îl întreabă cine doarme</I> <li>Rus: <I>кто спрашивает кто спдит его</I> <li>Snd: <I>ڪیر ھو کان پڇی ٿو ت ڪیر سمھی ٿو</I> <li>Spa: <I>quién le pregunta quién duerme</I> <li>Swe: <I>vem frågar honom vem som sover</I> <li>Tha: <I>ใครถามเขาว่าใครนอนหลับ</I> <li>Urd: <I>كون اس سے پوچھتا ہے كہ كون سوتا ہے</I> </ul> </div> </div></TD>+</TR>+<TR>+<TD><CODE>mkQCl</CODE></TD>+<TD><A HREF="#IP" TITLE="IP - interrogative pronoun">IP</A> <CODE>-></CODE> <A HREF="#V2V" TITLE="V2V - verb with NP and V complement">V2V</A> <CODE>-></CODE> <A HREF="#NP" TITLE="NP - noun phrase (subject or object)">NP</A> <CODE>-></CODE> <A HREF="#VP" TITLE="VP - verb phrase">VP</A> <CODE>-></CODE> <A HREF="#QCl" TITLE="QCl - question clause, with all tenses">QCl</A></TD>+<TD><div class=reveal> <I>who begs him to sleep</I> <div class=popup> <ul> <li>API: <CODE>mkQCl who_IP beg_V2V he_NP (mkVP sleep_V)</CODE> <li>Afr: <I>wie smeek hom om te slaap</I> <li>Bul: <I>кой моли него да спи</I> <li>Cat: <I>qui el demana a dormir</I> <li>Dan: <I>hvem beder ham at sove</I> <li>Dut: <I>wie smeekt hem te slapen</I> <li>Eng: <I>who begs him to sleep</I> <li>Fin: <I>kuka pyytää häntä nukkumaan</I> <li>Fre: <I>qui le demande à dormir</I> <li>Ger: <I>wer bittet ihn zu schlafen</I> <li>Hin: <I>कौन उस से सोने की भीख मांगता है</I> <li>Ita: <I>chi lo prega di dormire</I> <li>Lav: <I>kurš lūdz</I> <li>Nep: <I>को उ लाई सुत्न आग्रह गर्छन्</I> <li>Nor: <I>hvem ber ham att sove</I> <li>Pes: <I>چه کسی از او خواهش می کند بخوابد</I> <li>Pnb: <I>كون اونوں سونا دی مانگدا اے</I> <li>Pol: <I>constant not found: beg_V2V</I> <li>Ron: <I>cine îl roagă sã doarmă</I> <li>Rus: <I>кто просит спать его</I> <li>Snd: <I>constant not found: beg_V2V</I> <li>Spa: <I>quién lo roga a dormir</I> <li>Swe: <I>vem ber honom att sova</I> <li>Tha: <I>ใครขอเขาให้นอนหลับ</I> <li>Urd: <I>كون اس سے سونے كی التجا كرتا ہے</I> </ul> </div> </div></TD>+</TR>+<TR>+<TD><CODE>mkQCl</CODE></TD>+<TD><A HREF="#IP" TITLE="IP - interrogative pronoun">IP</A> <CODE>-></CODE> <A HREF="#A" TITLE="A - one-place adjective">A</A> <CODE>-></CODE> <A HREF="#QCl" TITLE="QCl - question clause, with all tenses">QCl</A></TD>+<TD><div class=reveal> <I>who is old</I> <div class=popup> <ul> <li>API: <CODE>mkQCl who_IP old_A</CODE> <li>Afr: <I>wie is oud</I> <li>Bul: <I>кой е стар</I> <li>Cat: <I>qui és vell</I> <li>Dan: <I>hvem er gammel</I> <li>Dut: <I>wie is oud</I> <li>Eng: <I>who is old</I> <li>Fin: <I>kuka on vanha</I> <li>Fre: <I>qui est vieux</I> <li>Ger: <I>wer ist alt</I> <li>Hin: <I>कौन बूढ़ा है</I> <li>Ita: <I>chi è vecchio</I> <li>Lav: <I>kurš ir</I> <li>Nep: <I>को बुढो छन्</I> <li>Nor: <I>hvem er gammel</I> <li>Pes: <I>چه کسی پیر است</I> <li>Pnb: <I>كون بوڈا اے</I> <li>Pol: <I>kto jest stary</I> <li>Ron: <I>cine este vechi</I> <li>Rus: <I>кто стар</I> <li>Snd: <I>ڪیر پوڙھی اھی</I> <li>Spa: <I>quién es viejo</I> <li>Swe: <I>vem är gammal</I> <li>Tha: <I>ใครแก่</I> <li>Urd: <I>كون بوڑھا ہے</I> </ul> </div> </div></TD>+</TR>+<TR>+<TD><CODE>mkQCl</CODE></TD>+<TD><A HREF="#IP" TITLE="IP - interrogative pronoun">IP</A> <CODE>-></CODE> <A HREF="#A" TITLE="A - one-place adjective">A</A> <CODE>-></CODE> <A HREF="#NP" TITLE="NP - noun phrase (subject or object)">NP</A> <CODE>-></CODE> <A HREF="#QCl" TITLE="QCl - question clause, with all tenses">QCl</A></TD>+<TD><div class=reveal> <I>who is older than he</I> <div class=popup> <ul> <li>API: <CODE>mkQCl who_IP old_A he_NP</CODE> <li>Afr: <I>wie is ouer as hy</I> <li>Bul: <I>кой е по - стар от него</I> <li>Cat: <I>qui és més vell que ell</I> <li>Dan: <I>hvem er ældre end han</I> <li>Dut: <I>wie is ouder dan hij</I> <li>Eng: <I>who is older than he</I> <li>Fin: <I>kuka on vanhempi kuin hän</I> <li>Fre: <I>qui est plus vieux que lui</I> <li>Ger: <I>wer ist älter als er</I> <li>Hin: <I>कौन उस से बूढ़ा है</I> <li>Ita: <I>chi è più vecchio di lui</I> <li>Lav: <I>kurš ir</I> <li>Nep: <I>को उ भन्दा बुढो छन्</I> <li>Nor: <I>hvem er eldre enn han</I> <li>Pes: <I>چه کسی پیر تر از او است</I> <li>Pnb: <I>كون اورے توں بوڈا اے</I> <li>Pol: <I>kto jest starszy niż on</I> <li>Ron: <I>cine este mai vechi decât el</I> <li>Rus: <I>кто старше него</I> <li>Snd: <I>ڪیر ھو کان پوڙھی اھی</I> <li>Spa: <I>quién es más viejo que él</I> <li>Swe: <I>vem är äldre än han</I> <li>Tha: <I>ใครแก่กว่าเขา</I> <li>Urd: <I>كون اس سے بوڑھا ہے</I> </ul> </div> </div></TD>+</TR>+<TR>+<TD><CODE>mkQCl</CODE></TD>+<TD><A HREF="#IP" TITLE="IP - interrogative pronoun">IP</A> <CODE>-></CODE> <A HREF="#A2" TITLE="A2 - two-place adjective">A2</A> <CODE>-></CODE> <A HREF="#NP" TITLE="NP - noun phrase (subject or object)">NP</A> <CODE>-></CODE> <A HREF="#QCl" TITLE="QCl - question clause, with all tenses">QCl</A></TD>+<TD><div class=reveal> <I>who is married to him</I> <div class=popup> <ul> <li>API: <CODE>mkQCl who_IP married_A2 he_NP</CODE> <li>Afr: <I>wie is getroud met hom</I> <li>Bul: <I>кой е женен за него</I> <li>Cat: <I>qui és casata a ell</I> <li>Dan: <I>hvem er gift med ham</I> <li>Dut: <I>wie is getrouwd met hem</I> <li>Eng: <I>who is married to him</I> <li>Fin: <I>kuka on avioitunut hänen kanssa</I> <li>Fre: <I>qui est marié à lui</I> <li>Ger: <I>wer ist verheiratet mit ihm</I> <li>Hin: <I>कौन उस से शादी शुदा है</I> <li>Ita: <I>chi è sposato con lui</I> <li>Lav: <I>kurš ir</I> <li>Nep: <I>को उ सँग विवाहित छन्</I> <li>Nor: <I>hvem er gift med ham</I> <li>Pes: <I>چه کسی او متأهل است</I> <li>Pnb: <I>constant not found: married_A2</I> <li>Pol: <I>kto jest zaślubiony jemu</I> <li>Ron: <I>cine este căsătorit cu el</I> <li>Rus: <I>кто замужем за им</I> <li>Snd: <I>constant not found: married_A2</I> <li>Spa: <I>quién es casado a él</I> <li>Swe: <I>vem är gift med honom</I> <li>Tha: <I>ใครแต่งงานแล้วกับเขา</I> <li>Urd: <I>كون اس سے شادی شدہ ہے</I> </ul> </div> </div></TD>+</TR>+<TR>+<TD><CODE>mkQCl</CODE></TD>+<TD><A HREF="#IP" TITLE="IP - interrogative pronoun">IP</A> <CODE>-></CODE> <A HREF="#AP" TITLE="AP - adjectival phrase">AP</A> <CODE>-></CODE> <A HREF="#QCl" TITLE="QCl - question clause, with all tenses">QCl</A></TD>+<TD><div class=reveal> <I>who is very old</I> <div class=popup> <ul> <li>API: <CODE>mkQCl who_IP (mkAP very_AdA old_A)</CODE> <li>Afr: <I>wie is baie oud</I> <li>Bul: <I>кой е много стар</I> <li>Cat: <I>qui és molt vell</I> <li>Dan: <I>hvem er meget gammel</I> <li>Dut: <I>wie is erg oud</I> <li>Eng: <I>who is very old</I> <li>Fin: <I>kuka on erittäin vanha</I> <li>Fre: <I>qui est très vieux</I> <li>Ger: <I>wer ist sehr alt</I> <li>Hin: <I>कौन बहुत बूढ़ा है</I> <li>Ita: <I>chi è molto vecchio</I> <li>Lav: <I>kurš ir</I> <li>Nep: <I>को धेरै बुढो छन्</I> <li>Nor: <I>hvem er mye gammel</I> <li>Pes: <I>چه کسی خیلی پیر است</I> <li>Pnb: <I>كون بہت بوڈا اے</I> <li>Pol: <I>kto jest bardzo stary</I> <li>Ron: <I>cine este foarte vechi</I> <li>Rus: <I>кто очень стар</I> <li>Snd: <I>ڪیر تمام پوڙھی اھی</I> <li>Spa: <I>quién es muy viejo</I> <li>Swe: <I>vem är mycket gammal</I> <li>Tha: <I>ใครแก่มาก</I> <li>Urd: <I>كون بہت بوڑھا ہے</I> </ul> </div> </div></TD>+</TR>+<TR>+<TD><CODE>mkQCl</CODE></TD>+<TD><A HREF="#IP" TITLE="IP - interrogative pronoun">IP</A> <CODE>-></CODE> <A HREF="#NP" TITLE="NP - noun phrase (subject or object)">NP</A> <CODE>-></CODE> <A HREF="#QCl" TITLE="QCl - question clause, with all tenses">QCl</A></TD>+<TD><div class=reveal> <I>who is the woman</I> <div class=popup> <ul> <li>API: <CODE>mkQCl who_IP (mkNP the_Det woman_N)</CODE> <li>Afr: <I>wie is die vrou</I> <li>Bul: <I>кой е жената</I> <li>Cat: <I>qui és la dona</I> <li>Dan: <I>hvem er kvinden</I> <li>Dut: <I>wie is de vrouw</I> <li>Eng: <I>who is the woman</I> <li>Fin: <I>kuka on nainen</I> <li>Fre: <I>qui est la femme</I> <li>Ger: <I>wer ist die Frau</I> <li>Hin: <I>कौन औरत है</I> <li>Ita: <I>chi è la donna</I> <li>Lav: <I>kurš ir</I> <li>Nep: <I>को आईमाई हुन्</I> <li>Nor: <I>hvem er kvinna</I> <li>Pes: <I>چه کسی زن است</I> <li>Pnb: <I>كون زنانی اے</I> <li>Pol: <I>kto jest kobietą</I> <li>Ron: <I>cine este femeia</I> <li>Rus: <I>кто женщина</I> <li>Snd: <I>ڪیر استری اھی</I> <li>Spa: <I>quién es la mujer</I> <li>Swe: <I>vem är kvinnan</I> <li>Tha: <I>ใครเป็นหญิง</I> <li>Urd: <I>كون عورت ہے</I> </ul> </div> </div></TD>+</TR>+<TR>+<TD><CODE>mkQCl</CODE></TD>+<TD><A HREF="#IP" TITLE="IP - interrogative pronoun">IP</A> <CODE>-></CODE> <A HREF="#N" TITLE="N - common noun">N</A> <CODE>-></CODE> <A HREF="#QCl" TITLE="QCl - question clause, with all tenses">QCl</A></TD>+<TD><div class=reveal> <I>who is a woman</I> <div class=popup> <ul> <li>API: <CODE>mkQCl who_IP woman_N</CODE> <li>Afr: <I>wie is 'n vrou</I> <li>Bul: <I>кой е жена</I> <li>Cat: <I>qui és una dona</I> <li>Dan: <I>hvem er en kvinde</I> <li>Dut: <I>wie is vrouw</I> <li>Eng: <I>who is a woman</I> <li>Fin: <I>kuka on nainen</I> <li>Fre: <I>qui est une femme</I> <li>Ger: <I>wer ist eine Frau</I> <li>Hin: <I>कौन औरत है</I> <li>Ita: <I>chi è una donna</I> <li>Lav: <I>kurš ir</I> <li>Nep: <I>को आईमाई हुन्</I> <li>Nor: <I>hvem er ei kvinne</I> <li>Pes: <I>چه کسی زن است</I> <li>Pnb: <I>كون زنانی اے</I> <li>Pol: <I>kto jest kobieta</I> <li>Ron: <I>cine este femeie</I> <li>Rus: <I>кто женщина</I> <li>Snd: <I>ڪیر استری اھی</I> <li>Spa: <I>quién es una mujer</I> <li>Swe: <I>vem är en kvinna</I> <li>Tha: <I>ใครเป็นหญิง</I> <li>Urd: <I>كون عورت ہے</I> </ul> </div> </div></TD>+</TR>+<TR>+<TD><CODE>mkQCl</CODE></TD>+<TD><A HREF="#IP" TITLE="IP - interrogative pronoun">IP</A> <CODE>-></CODE> <A HREF="#CN" TITLE="CN - common noun (without determiner)">CN</A> <CODE>-></CODE> <A HREF="#QCl" TITLE="QCl - question clause, with all tenses">QCl</A></TD>+<TD><div class=reveal> <I>who is an old woman</I> <div class=popup> <ul> <li>API: <CODE>mkQCl who_IP (mkCN old_A woman_N)</CODE> <li>Afr: <I>wie is 'n oud vrou</I> <li>Bul: <I>кой е стара жена</I> <li>Cat: <I>qui és una dona vell</I> <li>Dan: <I>hvem er en gammel kvinde</I> <li>Dut: <I>wie is oude vrouw</I> <li>Eng: <I>who is an old woman</I> <li>Fin: <I>kuka on vanha nainen</I> <li>Fre: <I>qui est une vieille femme</I> <li>Ger: <I>wer ist eine alte Frau</I> <li>Hin: <I>कौन बूढ़ी औरत है</I> <li>Ita: <I>chi è una vecchia donna</I> <li>Lav: <I>kurš ir</I> <li>Nep: <I>को बुढी आईमाई हुन्</I> <li>Nor: <I>hvem er ei gammel kvinne</I> <li>Pes: <I>چه کسی زن پیر است</I> <li>Pnb: <I>كون بوڈی زنانی اے</I> <li>Pol: <I>kto jest stara kobieta</I> <li>Ron: <I>cine este femeie veche</I> <li>Rus: <I>кто старая женщина</I> <li>Snd: <I>ڪیر پوڙھی استری اھی</I> <li>Spa: <I>quién es una vieja mujer</I> <li>Swe: <I>vem är en gammal kvinna</I> <li>Tha: <I>ใครเป็นหญิงแก่</I> <li>Urd: <I>كون بوڑھی عورت ہے</I> </ul> </div> </div></TD>+</TR>+<TR>+<TD><CODE>mkQCl</CODE></TD>+<TD><A HREF="#IP" TITLE="IP - interrogative pronoun">IP</A> <CODE>-></CODE> <A HREF="#Adv" TITLE="Adv - verb-phrase-modifying adverb">Adv</A> <CODE>-></CODE> <A HREF="#QCl" TITLE="QCl - question clause, with all tenses">QCl</A></TD>+<TD><div class=reveal> <I>who is here</I> <div class=popup> <ul> <li>API: <CODE>mkQCl who_IP here_Adv</CODE> <li>Afr: <I>wie is hier</I> <li>Bul: <I>кой е тук</I> <li>Cat: <I>qui és aquí</I> <li>Dan: <I>hvem er her</I> <li>Dut: <I>wie is hier</I> <li>Eng: <I>who is here</I> <li>Fin: <I>kuka on täällä</I> <li>Fre: <I>qui est ici</I> <li>Ger: <I>wer ist hier</I> <li>Hin: <I>कौन यहाँ है</I> <li>Ita: <I>chi è quà</I> <li>Lav: <I>kurš ir</I> <li>Nep: <I>को यहाँ छन्</I> <li>Nor: <I>hvem er her</I> <li>Pes: <I>چه کسی اینجا است</I> <li>Pnb: <I>كون ایتھے اے</I> <li>Pol: <I>kto jest tutaj</I> <li>Ron: <I>cine este aici</I> <li>Rus: <I>кто здесь</I> <li>Snd: <I>ڪیر ھتی اھی</I> <li>Spa: <I>quién es aquí</I> <li>Swe: <I>vem är här</I> <li>Tha: <I>ใครอยู่ที่นี่</I> <li>Urd: <I>كون یہاں ہے</I> </ul> </div> </div></TD>+</TR>+<TR>+<TD><CODE>mkQCl</CODE></TD>+<TD><A HREF="#IP" TITLE="IP - interrogative pronoun">IP</A> <CODE>-></CODE> <A HREF="#NP" TITLE="NP - noun phrase (subject or object)">NP</A> <CODE>-></CODE> <A HREF="#V2" TITLE="V2 - two-place verb">V2</A> <CODE>-></CODE> <A HREF="#QCl" TITLE="QCl - question clause, with all tenses">QCl</A></TD>+<TD><div class=reveal> <I>who is her</I> <div class=popup> <ul> <li>API: <CODE>mkQCl who_IP she_NP</CODE> <li>Afr: <I>wie is sy</I> <li>Bul: <I>кой е нея</I> <li>Cat: <I>qui és ella</I> <li>Dan: <I>hvem er hende</I> <li>Dut: <I>wie is ze</I> <li>Eng: <I>who is her</I> <li>Fin: <I>kuka on hän</I> <li>Fre: <I>qui est elle</I> <li>Ger: <I>wer ist sie</I> <li>Hin: <I>कौन वह है</I> <li>Ita: <I>chi è lei</I> <li>Lav: <I>kurš ir</I> <li>Nep: <I>को उनी हुन्</I> <li>Nor: <I>hvem er henne</I> <li>Pes: <I>چه کسی او است</I> <li>Pnb: <I>كون اونوں اے</I> <li>Pol: <I>kto jest nią</I> <li>Ron: <I>cine este ea</I> <li>Rus: <I>кто она</I> <li>Snd: <I>ڪیر ھو اھی</I> <li>Spa: <I>quién es ella</I> <li>Swe: <I>vem är henne</I> <li>Tha: <I>ใครเป็นหล่อน</I> <li>Urd: <I>كون وہ ہے</I> </ul> </div> </div></TD>+</TR>+<TR>+<TD><CODE>mkQCl</CODE></TD>+<TD><A HREF="#IP" TITLE="IP - interrogative pronoun">IP</A> <CODE>-></CODE> <A HREF="#ClSlash">ClSlash</A> <CODE>-></CODE> <A HREF="#QCl" TITLE="QCl - question clause, with all tenses">QCl</A></TD>+<TD><div class=reveal> <I>whom does she love today</I> <div class=popup> <ul> <li>API: <CODE>mkQCl who_IP (mkClSlash (mkClSlash she_NP love_V2) today_Adv)</CODE> <li>Afr: <I>wie het sy lief vandag</I> <li>Bul: <I>кого обича тя днес</I> <li>Cat: <I>qui estima ella avui</I> <li>Dan: <I>hvem elsker hun idag</I> <li>Dut: <I>wie heeft ze lief vandaag</I> <li>Eng: <I>whom does she love today</I> <li>Fin: <I>ketä hän rakastaa tänään</I> <li>Fre: <I>qui aime elle aujourd'hui</I> <li>Ger: <I>wen liebt sie heute</I> <li>Hin: <I>किस को आज वह प्यार करती है</I> <li>Ita: <I>chi ama lei oggi</I> <li>Lav: <I>kuru viņa mīl šodien</I> <li>Nep: <I>कासलाई आज उनी माया गर्छिन्</I> <li>Nor: <I>hvem elsker hun idag</I> <li>Pes: <I>چه کسی را امروز او دوست دارد</I> <li>Pnb: <I>كون اج او پیار كردی اے</I> <li>Pol: <I>kogo dziś kocha ona</I> <li>Ron: <I>pe cine iubeşte ea astăzi</I> <li>Rus: <I>кого она любдит сегодня</I> <li>Snd: <I>ڪیر اڄ ھو۶ عشق ڪری ٿی</I> <li>Spa: <I>quién ama ella hoy</I> <li>Swe: <I>vem älskar hon idag</I> <li>Tha: <I>หล่อนรักวันนี้ใคร</I> <li>Urd: <I>كس كو آج وہ پیار كرتی ہے</I> </ul> </div> </div></TD>+</TR>+<TR>+<TD><CODE>mkQCl</CODE></TD>+<TD><A HREF="#IAdv" TITLE="IAdv - interrogative adverb">IAdv</A> <CODE>-></CODE> <A HREF="#Cl" TITLE="Cl - declarative clause, with all tenses">Cl</A> <CODE>-></CODE> <A HREF="#QCl" TITLE="QCl - question clause, with all tenses">QCl</A></TD>+<TD><div class=reveal> <I>why does she sleep</I> <div class=popup> <ul> <li>API: <CODE>mkQCl why_IAdv (mkCl she_NP sleep_V)</CODE> <li>Afr: <I>waarom slaap sy</I> <li>Bul: <I>защо спи тя</I> <li>Cat: <I>per quË dorm ella</I> <li>Dan: <I>hvorfor sover hun</I> <li>Dut: <I>waarom slaapt ze</I> <li>Eng: <I>why does she sleep</I> <li>Fin: <I>miksi hän nukkuu</I> <li>Fre: <I>pourquoi dort elle</I> <li>Ger: <I>warum schläft sie</I> <li>Hin: <I>क्यों वह सोती है</I> <li>Ita: <I>perché dorme lei</I> <li>Lav: <I>kāpēc viņa guļ</I> <li>Nep: <I>किन उनी सुत्छिन्</I> <li>Nor: <I>hvorfor sover hun</I> <li>Pes: <I>چرا او می خوابد</I> <li>Pnb: <I>كیوں او سوندی اے</I> <li>Pol: <I>dlaczego ona śpi</I> <li>Ron: <I>de ce doarme ea</I> <li>Rus: <I>почему она спдит</I> <li>Snd: <I>ڇو ھو۶ سمھی ٿی</I> <li>Spa: <I>porqué duerme ella</I> <li>Swe: <I>varför sover hon</I> <li>Tha: <I>หล่อนนอนหลับทำไม</I> <li>Urd: <I>كیوں وہ سوتی ہے</I> </ul> </div> </div></TD>+</TR>+<TR>+<TD><CODE>mkQCl</CODE></TD>+<TD><A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A> <CODE>-></CODE> <A HREF="#IP" TITLE="IP - interrogative pronoun">IP</A> <CODE>-></CODE> <A HREF="#Cl" TITLE="Cl - declarative clause, with all tenses">Cl</A> <CODE>-></CODE> <A HREF="#QCl" TITLE="QCl - question clause, with all tenses">QCl</A></TD>+<TD><div class=reveal> <I>with whom does she sleep</I> <div class=popup> <ul> <li>API: <CODE>mkQCl with_Prep who_IP (mkCl she_NP sleep_V)</CODE> <li>Afr: <I>met wie slaap sy</I> <li>Bul: <I>с кой спи тя</I> <li>Cat: <I>amb qui dorm ella</I> <li>Dan: <I>med hvem sover hun</I> <li>Dut: <I>met wie slaapt ze</I> <li>Eng: <I>with whom does she sleep</I> <li>Fin: <I>kenen kanssa hän nukkuu</I> <li>Fre: <I>avec qui dort elle</I> <li>Ger: <I>mit wem schläft sie</I> <li>Hin: <I>किस के साथ वह सोती है</I> <li>Ita: <I>con chi dorme lei</I> <li>Lav: <I>ar kuru viņa guļ</I> <li>Nep: <I>को सँग उनी सुत्छिन्</I> <li>Nor: <I>med hvem sover hun</I> <li>Pes: <I>با چه کسی او می خوابد</I> <li>Pnb: <I>كرا دے نال او سوندی اے</I> <li>Pol: <I>z kim ona śpi</I> <li>Ron: <I>cu cine doarme ea</I> <li>Rus: <I>с кто она спдит</I> <li>Snd: <I>ڪھنجo سان ھو۶ سمھی ٿی</I> <li>Spa: <I>con quién duerme ella</I> <li>Swe: <I>med vem sover hon</I> <li>Tha: <I>หล่อนนอนหลับกับใคร</I> <li>Urd: <I>كس كے ساتھ وہ سوتی ہے</I> </ul> </div> </div></TD>+</TR>+<TR>+<TD><CODE>mkQCl</CODE></TD>+<TD><A HREF="#IAdv" TITLE="IAdv - interrogative adverb">IAdv</A> <CODE>-></CODE> <A HREF="#NP" TITLE="NP - noun phrase (subject or object)">NP</A> <CODE>-></CODE> <A HREF="#QCl" TITLE="QCl - question clause, with all tenses">QCl</A></TD>+<TD><div class=reveal> <I>where is she</I> <div class=popup> <ul> <li>API: <CODE>mkQCl where_IAdv she_NP</CODE> <li>Afr: <I>waar is sy</I> <li>Bul: <I>къде е тя</I> <li>Cat: <I>on és ella</I> <li>Dan: <I>hvor er hun</I> <li>Dut: <I>waar is ze</I> <li>Eng: <I>where is she</I> <li>Fin: <I>missä hän on</I> <li>Fre: <I>où est elle</I> <li>Ger: <I>wo ist sie</I> <li>Hin: <I>वह कहाँ है</I> <li>Ita: <I>dove è lei</I> <li>Lav: <I>kur ir viņa</I> <li>Nep: <I>उनी कहाँ छिन्</I> <li>Nor: <I>hvor er hun</I> <li>Pes: <I>او کجا است</I> <li>Pnb: <I>او كتھے اے</I> <li>Pol: <I>gdzie jest ona</I> <li>Ron: <I>unde este ea</I> <li>Rus: <I>где она</I> <li>Snd: <I>ھو۶ ڪٿی اھی</I> <li>Spa: <I>donde es ella</I> <li>Swe: <I>var är hon</I> <li>Tha: <I>หล่อนอยู่ที่ไหน</I> <li>Urd: <I>وہ كہاں ہے</I> </ul> </div> </div></TD>+</TR>+<TR>+<TD><CODE>mkQCl</CODE></TD>+<TD><A HREF="#IComp" TITLE="IComp - interrogative complement of copula">IComp</A> <CODE>-></CODE> <A HREF="#NP" TITLE="NP - noun phrase (subject or object)">NP</A> <CODE>-></CODE> <A HREF="#QCl" TITLE="QCl - question clause, with all tenses">QCl</A></TD>+<TD><div class=reveal> <I>who is this man</I> <div class=popup> <ul> <li>API: <CODE>mkQCl (mkIComp who_IP) (mkNP this_Det man_N)</CODE> <li>Afr: <I>wie is hierdie man</I> <li>Bul: <I>кой е този мъж</I> <li>Cat: <I>qui és aquest home</I> <li>Dan: <I>hvem er denne mand</I> <li>Dut: <I>wie is deze man</I> <li>Eng: <I>who is this man</I> <li>Fin: <I>kuka tämä mies on</I> <li>Fre: <I>qui est cet homme</I> <li>Ger: <I>wer ist dieser Mann</I> <li>Hin: <I>यह आदमी कौन है</I> <li>Ita: <I>chi è questo uomo</I> <li>Lav: <I>kurš ir šis vīrietis</I> <li>Nep: <I>यो मान्छे को छ</I> <li>Nor: <I>hvem er denne mannen</I> <li>Pes: <I>این مرد چه کسی است</I> <li>Pnb: <I>اے بندہ كون اے</I> <li>Pol: <I>kim jest ten mężczyzna</I> <li>Ron: <I>cine este acest om</I> <li>Rus: <I>кто этот человек</I> <li>Snd: <I>ھی ماڻھو ڪیر اھی</I> <li>Spa: <I>quién es este hombre</I> <li>Swe: <I>vem är den här mannen</I> <li>Tha: <I>ชายคนนี้เป็นใคร</I> <li>Urd: <I>یہ آدمی كون ہے</I> </ul> </div> </div></TD>+</TR>+<TR>+<TD><CODE>mkQCl</CODE></TD>+<TD><A HREF="#IP" TITLE="IP - interrogative pronoun">IP</A> <CODE>-></CODE> <A HREF="#QCl" TITLE="QCl - question clause, with all tenses">QCl</A></TD>+<TD><div class=reveal> <I>which city is there</I> <div class=popup> <ul> <li>API: <CODE>mkQCl (mkIP which_IQuant city_N)</CODE> <li>Afr: <I>watter stad is daar</I> <li>Bul: <I>кой град е тук</I> <li>Cat: <I>quin ciutat hi ha quin ciutat</I> <li>Dan: <I>hvilken by findes det</I> <li>Dut: <I>welke stad is er</I> <li>Eng: <I>which city is there</I> <li>Fin: <I>mikä kaupunki on olemassa</I> <li>Fre: <I>quelle ville il y a</I> <li>Ger: <I>welche Stadt gibt es</I> <li>Hin: <I>वहाँ कौन सा शहर है</I> <li>Ita: <I>quale città c' è</I> <li>Lav: <I>kura pilsēta ir</I> <li>Nep: <I>त्यहाँ कुन शहर छ</I> <li>Nor: <I>hvilken by finnes det</I> <li>Pes: <I>کدام شهر است</I> <li>Pnb: <I>اوتھے كیڑا شہر اے</I> <li>Pol: <I>które miasto jest</I> <li>Ron: <I>care oraş este</I> <li>Rus: <I>который город существует</I> <li>Snd: <I>constant not found: city_N</I> <li>Spa: <I>qué ciudad hay</I> <li>Swe: <I>vilken stad finns det</I> <li>Tha: <I>เมืองเมืองไหน</I> <li>Urd: <I>وہاں كون سا شہر ہے</I> </ul> </div> </div></TD>+</TR>+</TABLE>++<A NAME="QS"></A>+<H2>QS - question</H2>++<TABLE BORDER="1" CELLPADDING="4">+<TR>+<TH>Function</TH>+<TH>Type</TH>+<TH COLSPAN="2">Example</TH>+</TR>+<TR>+<TD><CODE>mkQS</CODE></TD>+<TD>(<A HREF="#Tense" TITLE="Tense - tense">Tense</A>) <CODE>-></CODE> (<A HREF="#Ant" TITLE="Ant - anteriority">Ant</A>) <CODE>-></CODE> (<A HREF="#Pol" TITLE="Pol - polarity">Pol</A>) <CODE>-></CODE> <A HREF="#QCl" TITLE="QCl - question clause, with all tenses">QCl</A> <CODE>-></CODE> <A HREF="#QS" TITLE="QS - question">QS</A></TD>+<TD><div class=reveal> <I>who wouldn't have slept</I> <div class=popup> <ul> <li>API: <CODE>mkQS conditionalTense anteriorAnt negativePol (mkQCl who_IP sleep_V)</CODE> <li>Afr: <I>wie sou nie geslaap het nie</I> <li>Bul: <I>кой не би спал</I> <li>Cat: <I>qui no hauria dormit</I> <li>Dan: <I>hvem ville ikke have sovet</I> <li>Dut: <I>wie zou niet geslapen hebben</I> <li>Eng: <I>who wouldn't have slept</I> <li>Fin: <I>kuka ei olisi nukkunut</I> <li>Fre: <I>qui n' aurait pas dormi</I> <li>Ger: <I>wer würde nicht geschlafen haben</I> <li>Hin: <I>कौन न शायद सोए</I> <li>Ita: <I>chi non avrebbe dormito</I> <li>Lav: <I>kurš nebūtu gulējis</I> <li>Nep: <I>को सुतेकाहुन्थे</I> <li>Nor: <I>hvem ville ikke ha sovet</I> <li>Pes: <I>چه کسی نمی خوابید</I> <li>Pnb: <I>كون نا ژاید سو ے</I> <li>Pol: <I>kto nie spałby</I> <li>Ron: <I>cine nu ar fi dormit</I> <li>Rus: <I>кто спал бы</I> <li>Snd: <I>ڪیر شاید ن سمھی</I> <li>Spa: <I>quién no habría dormido</I> <li>Swe: <I>vem skulle inte ha sovit</I> <li>Tha: <I>ใครนอนไม่หลับ</I> <li>Urd: <I>كون نا شاید سو ے</I> </ul> </div> </div></TD>+</TR>+<TR>+<TD><CODE>mkQS</CODE></TD>+<TD><A HREF="#Cl" TITLE="Cl - declarative clause, with all tenses">Cl</A> <CODE>-></CODE> <A HREF="#QS" TITLE="QS - question">QS</A></TD>+<TD><div class=reveal> <I>does she sleep</I> <div class=popup> <ul> <li>API: <CODE>mkQS (mkCl she_NP sleep_V)</CODE> <li>Afr: <I>slaap sy</I> <li>Bul: <I>тя спи ли</I> <li>Cat: <I>ella dorm</I> <li>Dan: <I>sover hun</I> <li>Dut: <I>slaapt ze</I> <li>Eng: <I>does she sleep</I> <li>Fin: <I>nukkuuko hän</I> <li>Fre: <I>elle dort</I> <li>Ger: <I>schläft sie</I> <li>Hin: <I>कया वह सोती है</I> <li>Ita: <I>lei dorme</I> <li>Lav: <I>vai viņa guļ</I> <li>Nep: <I>के उनी सुत्छिन्</I> <li>Nor: <I>sover hun</I> <li>Pes: <I>آیا او می خوابد</I> <li>Pnb: <I>كی او سوندی اے</I> <li>Pol: <I>czy ona śpi</I> <li>Ron: <I>ea doarme</I> <li>Rus: <I>она спдит</I> <li>Snd: <I>ڇا ھو۶ سمھی ٿی</I> <li>Spa: <I>ella duerme</I> <li>Swe: <I>sover hon</I> <li>Tha: <I>หล่อนนอนหลับไหม</I> <li>Urd: <I>كیا وہ سوتی ہے</I> </ul> </div> </div></TD>+</TR>+</TABLE>++<A NAME="Quant"></A>+<H2>Quant - quantifier ('nucleus' of Det)</H2>++<TABLE BORDER="1" CELLPADDING="4">+<TR>+<TH>Function</TH>+<TH>Type</TH>+<TH COLSPAN="2">Example</TH>+</TR>+<TR>+<TD><CODE>a_Quant</CODE></TD>+<TD><A 'HREF="#Quant" TITLE="Quant - quantifier ('nucleus' of Det)"'>Quant</A></TD>+<TD><div class=reveal> <I>a house</I> <div class=popup> <ul> <li>API: <CODE>mkUtt (mkNP a_Quant house_N)</CODE> <li>Afr: <I>'n huis</I> <li>Bul: <I>къща</I> <li>Cat: <I>una casa</I> <li>Dan: <I>et hus</I> <li>Dut: <I>een huis</I> <li>Eng: <I>a house</I> <li>Fin: <I>talo</I> <li>Fre: <I>une maison</I> <li>Ger: <I>ein Haus</I> <li>Hin: <I>एक घर</I> <li>Ita: <I>una casa</I> <li>Lav: <I>māja</I> <li>Nep: <I>घर</I> <li>Nor: <I>et hus</I> <li>Pes: <I>یک خانه</I> <li>Pnb: <I>گھر</I> <li>Pol: <I>dom</I> <li>Ron: <I>o casă</I> <li>Rus: <I>дом</I> <li>Snd: <I>گھر</I> <li>Spa: <I>una casa</I> <li>Swe: <I>ett hus</I> <li>Tha: <I>บ้าน</I> <li>Urd: <I>اك گھر</I> </ul> </div> </div></TD>+</TR>+<TR>+<TD><CODE>mkQuant</CODE></TD>+<TD><A HREF="#Pron" TITLE="Pron - personal pronoun">Pron</A> <CODE>-></CODE> <A 'HREF="#Quant" TITLE="Quant - quantifier ('nucleus' of Det)"'>Quant</A></TD>+<TD><div class=reveal> <I>my house</I> <div class=popup> <ul> <li>API: <CODE>mkUtt (mkNP (mkQuant i_Pron) house_N)</CODE> <li>Afr: <I>my huis</I> <li>Bul: <I>моята къща</I> <li>Cat: <I>la meva casa</I> <li>Dan: <I>mit hus</I> <li>Dut: <I>mijn huis</I> <li>Eng: <I>my house</I> <li>Fin: <I>minun taloni</I> <li>Fre: <I>ma maison</I> <li>Ger: <I>mein Haus</I> <li>Hin: <I>मेरा घर</I> <li>Ita: <I>la mia casa</I> <li>Lav: <I>mana māja</I> <li>Nep: <I>मेरो घर</I> <li>Nor: <I>mit hus</I> <li>Pes: <I>خانه ی من</I> <li>Pnb: <I>میرا گھر</I> <li>Pol: <I>mój dom</I> <li>Ron: <I>casa mea</I> <li>Rus: <I>моего дом</I> <li>Snd: <I>گھر</I> <li>Spa: <I>mi casa</I> <li>Swe: <I>mitt hus</I> <li>Tha: <I>บ้านของฉัน</I> <li>Urd: <I>میرا گھر</I> </ul> </div> </div></TD>+</TR>+<TR>+<TD><CODE>no_Quant</CODE></TD>+<TD><A 'HREF="#Quant" TITLE="Quant - quantifier ('nucleus' of Det)"'>Quant</A></TD>+<TD><div class=reveal> <I>no house</I> <div class=popup> <ul> <li>API: <CODE>mkUtt (mkNP no_Quant house_N)</CODE> <li>Afr: <I>geen huis</I> <li>Bul: <I>constant not found: no_Quant</I> <li>Cat: <I>cap casa</I> <li>Dan: <I>constant not found: no_Quant</I> <li>Dut: <I>geen huis</I> <li>Eng: <I>no house</I> <li>Fin: <I>ei mikään talo</I> <li>Fre: <I>aucune maison</I> <li>Ger: <I>kein Haus</I> <li>Hin: <I>constant not found: no_Quant</I> <li>Ita: <I>nessuna casa</I> <li>Lav: <I>constant not found: no_Quant</I> <li>Nep: <I>हैन घर</I> <li>Nor: <I>constant not found: no_Quant</I> <li>Pes: <I>constant not found: no_Quant</I> <li>Pnb: <I>كوی نہیں گھر</I> <li>Pol: <I>żaden dom</I> <li>Ron: <I>nicio casă</I> <li>Rus: <I>constant not found: no_Quant</I> <li>Snd: <I>ڇو ن گھر</I> <li>Spa: <I>constant not found: no_Quant</I> <li>Swe: <I>inget hus</I> <li>Tha: <I>บ้านไม่มีหลัง</I> <li>Urd: <I>كوی نہیں گھر</I> </ul> </div> </div></TD>+</TR>+<TR>+<TD><CODE>that_Quant</CODE></TD>+<TD><A 'HREF="#Quant" TITLE="Quant - quantifier ('nucleus' of Det)"'>Quant</A></TD>+<TD><div class=reveal> <I>that house</I> <div class=popup> <ul> <li>API: <CODE>mkUtt (mkNP that_Quant house_N)</CODE> <li>Afr: <I>daardie huis</I> <li>Bul: <I>онази къща</I> <li>Cat: <I>aquella casa</I> <li>Dan: <I>det der hus</I> <li>Dut: <I>dat huis</I> <li>Eng: <I>that house</I> <li>Fin: <I>tuo talo</I> <li>Fre: <I>cette maison</I> <li>Ger: <I>jenes Haus</I> <li>Hin: <I>वह घर</I> <li>Ita: <I>quella casa</I> <li>Lav: <I>tā māja</I> <li>Nep: <I>त्ये घर</I> <li>Nor: <I>det der huset</I> <li>Pes: <I>آن خانه</I> <li>Pnb: <I>وہ گھر</I> <li>Pol: <I>tamten dom</I> <li>Ron: <I>acea casă</I> <li>Rus: <I>тот дом</I> <li>Snd: <I>جیڪو گھر</I> <li>Spa: <I>esa casa</I> <li>Swe: <I>det där huset</I> <li>Tha: <I>บ้านหลังนั้น</I> <li>Urd: <I>وہ گھر</I> </ul> </div> </div></TD>+</TR>+<TR>+<TD><CODE>the_Quant</CODE></TD>+<TD><A 'HREF="#Quant" TITLE="Quant - quantifier ('nucleus' of Det)"'>Quant</A></TD>+<TD><div class=reveal> <I>the house</I> <div class=popup> <ul> <li>API: <CODE>mkUtt (mkNP the_Quant house_N)</CODE> <li>Afr: <I>die huis</I> <li>Bul: <I>къщата</I> <li>Cat: <I>la casa</I> <li>Dan: <I>huset</I> <li>Dut: <I>het huis</I> <li>Eng: <I>the house</I> <li>Fin: <I>talo</I> <li>Fre: <I>la maison</I> <li>Ger: <I>das Haus</I> <li>Hin: <I>घर</I> <li>Ita: <I>la casa</I> <li>Lav: <I>māja</I> <li>Nep: <I>घर</I> <li>Nor: <I>huset</I> <li>Pes: <I>خانه</I> <li>Pnb: <I>گھر</I> <li>Pol: <I>dom</I> <li>Ron: <I>casa</I> <li>Rus: <I>дом</I> <li>Snd: <I>گھر</I> <li>Spa: <I>la casa</I> <li>Swe: <I>huset</I> <li>Tha: <I>บ้าน</I> <li>Urd: <I>گھر</I> </ul> </div> </div></TD>+</TR>+<TR>+<TD><CODE>this_Quant</CODE></TD>+<TD><A 'HREF="#Quant" TITLE="Quant - quantifier ('nucleus' of Det)"'>Quant</A></TD>+<TD><div class=reveal> <I>this house</I> <div class=popup> <ul> <li>API: <CODE>mkUtt (mkNP this_Quant house_N)</CODE> <li>Afr: <I>hierdie huis</I> <li>Bul: <I>тази къща</I> <li>Cat: <I>aquesta casa</I> <li>Dan: <I>dette hus</I> <li>Dut: <I>dit huis</I> <li>Eng: <I>this house</I> <li>Fin: <I>tämä talo</I> <li>Fre: <I>cette maison</I> <li>Ger: <I>dieses Haus</I> <li>Hin: <I>यह घर</I> <li>Ita: <I>questa casa</I> <li>Lav: <I>šī māja</I> <li>Nep: <I>यो घर</I> <li>Nor: <I>dette huset</I> <li>Pes: <I>این خانه</I> <li>Pnb: <I>اے گھر</I> <li>Pol: <I>ten dom</I> <li>Ron: <I>această casă</I> <li>Rus: <I>этот дом</I> <li>Snd: <I>ھی گھر</I> <li>Spa: <I>esta casa</I> <li>Swe: <I>det här huset</I> <li>Tha: <I>บ้านหลังนี้</I> <li>Urd: <I>یہ گھر</I> </ul> </div> </div></TD>+</TR>+</TABLE>++<A NAME="RCl"></A>+<H2>RCl - relative clause, with all tenses</H2>++<TABLE BORDER="1" CELLPADDING="4">+<TR>+<TH>Function</TH>+<TH>Type</TH>+<TH COLSPAN="2">Example</TH>+</TR>+<TR>+<TD><CODE>mkRCl</CODE></TD>+<TD><A HREF="#RP" TITLE="RP - relative pronoun">RP</A> <CODE>-></CODE> <A HREF="#VP" TITLE="VP - verb phrase">VP</A> <CODE>-></CODE> <A HREF="#RCl" TITLE="RCl - relative clause, with all tenses">RCl</A></TD>+<TD><div class=reveal> <I>woman who always sleeps</I> <div class=popup> <ul> <li>API: <CODE>mkCN woman_N (mkRS (mkRCl which_RP (mkVP always_AdV (mkVP sleep_V))))</CODE> <li>Afr: <I>vrou wat altyd altyd slaap</I> <li>Bul: <I>жена която винаги спи</I> <li>Cat: <I>dona que dorm sempre</I> <li>Dan: <I>kvinde som altid sover</I> <li>Dut: <I>vrouw die altijd slaapt</I> <li>Eng: <I>woman who always sleeps</I> <li>Fin: <I>nainen joka nukkuu aina</I> <li>Fre: <I>femme qui dort toujours</I> <li>Ger: <I>Frau die immer schläft</I> <li>Hin: <I>औरत जो हमेशा सोती है</I> <li>Ita: <I>donna che dorme sempre</I> <li>Lav: <I>{s : ResLav.Definite => ParamX.Number => ResLav.Case => Str</I> <li>Nep: <I>आईमाई जो सधैँ सुत्छे</I> <li>Nor: <I>kvinne som altid sover</I> <li>Pes: <I>زنی که همیشه می خوابد</I> <li>Pnb: <I>{s : ParamX.Number => ResPnb.Case => Str</I> <li>Pol: <I>kobieta , która zawsze śpi</I> <li>Ron: <I>femeie care doarme mereu</I> <li>Rus: <I>женщина , которая всегда спдит</I> <li>Snd: <I>استری جھڙی ھمیشھ سمھی ٿی</I> <li>Spa: <I>mujer que duerme siempre</I> <li>Swe: <I>kvinna som alltid sover</I> <li>Tha: <I>หญิงที่นอนหลับเสมอ</I> <li>Urd: <I>عورت جو ہمیشہ سوتی ہے</I> </ul> </div> </div></TD>+</TR>+<TR>+<TD><CODE>mkRCl</CODE></TD>+<TD><A HREF="#RP" TITLE="RP - relative pronoun">RP</A> <CODE>-></CODE> <A HREF="#V" TITLE="V - one-place verb">V</A> <CODE>-></CODE> <A HREF="#RCl" TITLE="RCl - relative clause, with all tenses">RCl</A></TD>+<TD><div class=reveal> <I>woman who sleeps</I> <div class=popup> <ul> <li>API: <CODE>mkCN woman_N (mkRS (mkRCl which_RP sleep_V))</CODE> <li>Afr: <I>vrou wat slaap</I> <li>Bul: <I>жена която спи</I> <li>Cat: <I>dona que dorm</I> <li>Dan: <I>kvinde som sover</I> <li>Dut: <I>vrouw die slaapt</I> <li>Eng: <I>woman who sleeps</I> <li>Fin: <I>nainen joka nukkuu</I> <li>Fre: <I>femme qui dort</I> <li>Ger: <I>Frau die schläft</I> <li>Hin: <I>औरत जो सोती है</I> <li>Ita: <I>donna che dorme</I> <li>Lav: <I>{s : ResLav.Definite => ParamX.Number => ResLav.Case => Str</I> <li>Nep: <I>आईमाई जो सुत्छे</I> <li>Nor: <I>kvinne som sover</I> <li>Pes: <I>زنی که می خوابد</I> <li>Pnb: <I>{s : ParamX.Number => ResPnb.Case => Str</I> <li>Pol: <I>kobieta , która śpi</I> <li>Ron: <I>femeie care doarme</I> <li>Rus: <I>женщина , которая спдит</I> <li>Snd: <I>استری جھڙی سمھی ٿی</I> <li>Spa: <I>mujer que duerme</I> <li>Swe: <I>kvinna som sover</I> <li>Tha: <I>หญิงที่นอนหลับ</I> <li>Urd: <I>عورت جو سوتی ہے</I> </ul> </div> </div></TD>+</TR>+<TR>+<TD><CODE>mkRCl</CODE></TD>+<TD><A HREF="#RP" TITLE="RP - relative pronoun">RP</A> <CODE>-></CODE> <A HREF="#V2" TITLE="V2 - two-place verb">V2</A> <CODE>-></CODE> <A HREF="#NP" TITLE="NP - noun phrase (subject or object)">NP</A> <CODE>-></CODE> <A HREF="#RCl" TITLE="RCl - relative clause, with all tenses">RCl</A></TD>+<TD><div class=reveal> <I>woman who loves him</I> <div class=popup> <ul> <li>API: <CODE>mkCN woman_N (mkRS (mkRCl which_RP love_V2 he_NP))</CODE> <li>Afr: <I>vrou wat hom lief het</I> <li>Bul: <I>жена която обича него</I> <li>Cat: <I>dona que el estima</I> <li>Dan: <I>kvinde som elsker ham</I> <li>Dut: <I>vrouw die hem lief heeft</I> <li>Eng: <I>woman who loves him</I> <li>Fin: <I>nainen joka rakastaa häntä</I> <li>Fre: <I>femme qui l' aime</I> <li>Ger: <I>Frau die ihn liebt</I> <li>Hin: <I>औरत जो उस को प्यार करती है</I> <li>Ita: <I>donna che lo ama</I> <li>Lav: <I>{s : ResLav.Definite => ParamX.Number => ResLav.Case => Str</I> <li>Nep: <I>आईमाई जो उ लाई माया गर्छे</I> <li>Nor: <I>kvinne som elsker ham</I> <li>Pes: <I>زنی که او را دوست دارد</I> <li>Pnb: <I>{s : ParamX.Number => ResPnb.Case => Str</I> <li>Pol: <I>kobieta , która kocha jego</I> <li>Ron: <I>femeie care îl iubeşte</I> <li>Rus: <I>женщина , которая любдит его</I> <li>Snd: <I>استری جھڙی ھو سان عشق ڪری ٿی</I> <li>Spa: <I>mujer que lo ama</I> <li>Swe: <I>kvinna som älskar honom</I> <li>Tha: <I>หญิงที่รักเขา</I> <li>Urd: <I>عورت جو اس كو پیار كرتی ہے</I> </ul> </div> </div></TD>+</TR>+<TR>+<TD><CODE>mkRCl</CODE></TD>+<TD><A HREF="#RP" TITLE="RP - relative pronoun">RP</A> <CODE>-></CODE> <A HREF="#V3" TITLE="V3 - three-place verb">V3</A> <CODE>-></CODE> <A HREF="#NP" TITLE="NP - noun phrase (subject or object)">NP</A> <CODE>-></CODE> <A HREF="#NP" TITLE="NP - noun phrase (subject or object)">NP</A> <CODE>-></CODE> <A HREF="#RCl" TITLE="RCl - relative clause, with all tenses">RCl</A></TD>+<TD><div class=reveal> <I>woman who sends it to him</I> <div class=popup> <ul> <li>API: <CODE>mkCN woman_N (mkRS (mkRCl which_RP send_V3 it_NP he_NP))</CODE> <li>Afr: <I>vrou wat dit na hom stuur</I> <li>Bul: <I>жена която праща него до него</I> <li>Cat: <I>dona que ho li envia</I> <li>Dan: <I>kvinde som sender det til ham</I> <li>Dut: <I>vrouw die het naar hem stuurt</I> <li>Eng: <I>woman who sends it to him</I> <li>Fin: <I>nainen joka lähettää sen hänelle</I> <li>Fre: <I>femme qui le lui envoie</I> <li>Ger: <I>Frau die es ihm schickt</I> <li>Hin: <I>औरत जो यह उस को भेजती है</I> <li>Ita: <I>donna che lo gli manda</I> <li>Lav: <I>{s : ResLav.Definite => ParamX.Number => ResLav.Case => Str</I> <li>Nep: <I>आईमाई जो यो उस्लाई लाई पठाउँछे</I> <li>Nor: <I>kvinne som sender det til ham</I> <li>Pes: <I>زنی که آن را برای او می فرستد</I> <li>Pnb: <I>{s : ParamX.Number => ResPnb.Case => Str</I> <li>Pol: <I>kobieta , która wysyła do niego je</I> <li>Ron: <I>femeie care i -l trimite</I> <li>Rus: <I>женщина , которая посылает нему его</I> <li>Snd: <I>constant not found: send_V3</I> <li>Spa: <I>mujer que lo le manda</I> <li>Swe: <I>kvinna som skickar det till honom</I> <li>Tha: <I>หญิงที่ส่งมันให้กับเขา</I> <li>Urd: <I>عورت جو یہ اس كو بھیجتی ہے</I> </ul> </div> </div></TD>+</TR>+<TR>+<TD><CODE>mkRCl</CODE></TD>+<TD><A HREF="#RP" TITLE="RP - relative pronoun">RP</A> <CODE>-></CODE> <A HREF="#VV" TITLE="VV - verb-phrase-complement verb">VV</A> <CODE>-></CODE> <A HREF="#VP" TITLE="VP - verb phrase">VP</A> <CODE>-></CODE> <A HREF="#RCl" TITLE="RCl - relative clause, with all tenses">RCl</A></TD>+<TD><div class=reveal> <I>woman who wants to sleep</I> <div class=popup> <ul> <li>API: <CODE>mkCN woman_N (mkRS (mkRCl which_RP want_VV (mkVP sleep_V)))</CODE> <li>Afr: <I>vrou wat te slaap wil</I> <li>Bul: <I>жена която иска да спи</I> <li>Cat: <I>dona que vol dormir</I> <li>Dan: <I>kvinde som vil sove</I> <li>Dut: <I>vrouw die slapen wil</I> <li>Eng: <I>woman who wants to sleep</I> <li>Fin: <I>nainen joka tahtoo nukkua</I> <li>Fre: <I>femme qui veut dormir</I> <li>Ger: <I>Frau die schlafen will</I> <li>Hin: <I>औरत जो सोना चाहती है</I> <li>Ita: <I>donna che vuole dormire</I> <li>Lav: <I>{s : ResLav.Definite => ParamX.Number => ResLav.Case => Str</I> <li>Nep: <I>आईमाई जो सुत्न चाहन्छे</I> <li>Nor: <I>kvinne som vil sove</I> <li>Pes: <I>زنی که می خواهد بخوابد</I> <li>Pnb: <I>{s : ParamX.Number => ResPnb.Case => Str</I> <li>Pol: <I>kobieta , która chce spać</I> <li>Ron: <I>femeie care vrea sã doarmă</I> <li>Rus: <I>женщина , которая хочет спать</I> <li>Snd: <I>استری جھڙی سمھڻ چاھی ٿی</I> <li>Spa: <I>mujer que quiere dormir</I> <li>Swe: <I>kvinna som vill sova</I> <li>Tha: <I>หญิงที่อยากนอนหลับ</I> <li>Urd: <I>عورت جو سونا چاہتی ہے</I> </ul> </div> </div></TD>+</TR>+<TR>+<TD><CODE>mkRCl</CODE></TD>+<TD><A HREF="#RP" TITLE="RP - relative pronoun">RP</A> <CODE>-></CODE> <A HREF="#VS" TITLE="VS - sentence-complement verb">VS</A> <CODE>-></CODE> <A HREF="#S" TITLE="S - declarative sentence">S</A> <CODE>-></CODE> <A HREF="#RCl" TITLE="RCl - relative clause, with all tenses">RCl</A></TD>+<TD><div class=reveal> <I>woman who says that I sleep</I> <div class=popup> <ul> <li>API: <CODE>mkCN woman_N (mkRS (mkRCl which_RP say_VS (mkS (mkCl i_NP sleep_V))))</CODE> <li>Afr: <I>vrou wat sê dat ek slaap</I> <li>Bul: <I>жена която казва , че аз спя</I> <li>Cat: <I>dona que diu que jo dormo</I> <li>Dan: <I>kvinde som siger at jeg sover</I> <li>Dut: <I>vrouw die zegt dat ik slaap</I> <li>Eng: <I>woman who says that I sleep</I> <li>Fin: <I>nainen joka sanoo että minä nukun</I> <li>Fre: <I>femme qui dit que je dors</I> <li>Ger: <I>Frau die sagt daß ich schlafe</I> <li>Hin: <I>औरत जो कहती है कि मैं सोता हूँ</I> <li>Ita: <I>donna che dice che io dormo</I> <li>Lav: <I>{s : ResLav.Definite => ParamX.Number => ResLav.Case => Str</I> <li>Nep: <I>आईमाई जो भन्छेकी म सुत्छु</I> <li>Nor: <I>kvinne som sier at jeg sover</I> <li>Pes: <I>زنی که می گوید که من می خوابم</I> <li>Pnb: <I>{s : ParamX.Number => ResPnb.Case => Str</I> <li>Pol: <I>kobieta , która mówi , że ja śpię</I> <li>Ron: <I>femeie care spune cã eu dorm</I> <li>Rus: <I>женщина , которая говордит , что я сплю</I> <li>Snd: <I>استری جھڙی چوی ٿی ت مان سمھان ٿو</I> <li>Spa: <I>mujer que dice que yo duermo</I> <li>Swe: <I>kvinna som säger att jag sover</I> <li>Tha: <I>หญิงที่พูดว่าฉันนอนหลับ</I> <li>Urd: <I>عورت جو كہتی ہے كہ میں سوتا ہوں</I> </ul> </div> </div></TD>+</TR>+<TR>+<TD><CODE>mkRCl</CODE></TD>+<TD><A HREF="#RP" TITLE="RP - relative pronoun">RP</A> <CODE>-></CODE> <A HREF="#VQ" TITLE="VQ - question-complement verb">VQ</A> <CODE>-></CODE> <A HREF="#QS" TITLE="QS - question">QS</A> <CODE>-></CODE> <A HREF="#RCl" TITLE="RCl - relative clause, with all tenses">RCl</A></TD>+<TD><div class=reveal> <I>woman who wonders who sleeps</I> <div class=popup> <ul> <li>API: <CODE>mkCN woman_N (mkRS (mkRCl which_RP wonder_VQ (mkQS (mkQCl who_IP sleep_V))))</CODE> <li>Afr: <I>vrou wat hom af vra wie slaap</I> <li>Bul: <I>жена която се учудва кой спи</I> <li>Cat: <I>dona que se pregunta qui dorm</I> <li>Dan: <I>kvinde som undres hvem som sover</I> <li>Dut: <I>vrouw die zich af vraagt wie slaapt</I> <li>Eng: <I>woman who wonders who sleeps</I> <li>Fin: <I>nainen joka ihmettelee kuka nukkuu</I> <li>Fre: <I>femme qui se demande qui dort</I> <li>Ger: <I>Frau die sich wundert wer schläft</I> <li>Hin: <I>औरत जो हैरान होती है कि कौन सोता है</I> <li>Ita: <I>donna che si domanda chi dorme</I> <li>Lav: <I>{s : ResLav.Definite => ParamX.Number => ResLav.Case => Str</I> <li>Nep: <I>आईमाई जो अचम्म हुन्छेकी को सुत्छन्</I> <li>Nor: <I>kvinne som undrer hvem som sover</I> <li>Pes: <I>constant not found: wonder_VQ</I> <li>Pnb: <I>{s : ParamX.Number => ResPnb.Case => Str</I> <li>Pol: <I>kobieta , która zastanawia się , kto śpi</I> <li>Ron: <I>femeie care se întreabă cine doarme</I> <li>Rus: <I>женщина , которая интересует кто спдит</I> <li>Snd: <I>استری جھڙی ھیران ٿیی ٿی ت ڪیر سمھی ٿو</I> <li>Spa: <I>mujer que se pregunta quién duerme</I> <li>Swe: <I>kvinna som undrar vem som sover</I> <li>Tha: <I>หญิงที่ประหลาดใจว่าใครนอนหลับ</I> <li>Urd: <I>عورت جو حیران ہوتی ہے كہ كون سوتا ہے</I> </ul> </div> </div></TD>+</TR>+<TR>+<TD><CODE>mkRCl</CODE></TD>+<TD><A HREF="#RP" TITLE="RP - relative pronoun">RP</A> <CODE>-></CODE> <A HREF="#VA" TITLE="VA - adjective-complement verb">VA</A> <CODE>-></CODE> <A HREF="#A" TITLE="A - one-place adjective">A</A> <CODE>-></CODE> <A HREF="#RCl" TITLE="RCl - relative clause, with all tenses">RCl</A></TD>+<TD><div class=reveal> <I>woman who becomes old</I> <div class=popup> <ul> <li>API: <CODE>mkCN woman_N (mkRS (mkRCl which_RP become_VA old_A))</CODE> <li>Afr: <I>vrou wat oud word</I> <li>Bul: <I>жена която става стара</I> <li>Cat: <I>dona que se torna vell</I> <li>Dan: <I>kvinde som bliver gammel</I> <li>Dut: <I>vrouw die oud wordt</I> <li>Eng: <I>woman who becomes old</I> <li>Fin: <I>nainen joka tulee vanhaksi</I> <li>Fre: <I>femme qui devient vieille</I> <li>Ger: <I>Frau die alt wird</I> <li>Hin: <I>औरत जो बूढ़ी बनती है</I> <li>Ita: <I>donna che diventa vecchia</I> <li>Lav: <I>{s : ResLav.Definite => ParamX.Number => ResLav.Case => Str</I> <li>Nep: <I>आईमाई जो बुढी हुन्छे</I> <li>Nor: <I>kvinne som blir gammel</I> <li>Pes: <I>زنی که پیر می شود</I> <li>Pnb: <I>{s : ParamX.Number => ResPnb.Case => Str</I> <li>Pol: <I>kobieta , która staje się stara</I> <li>Ron: <I>femeie care devine veche</I> <li>Rus: <I>женщина , которая становдит старой</I> <li>Snd: <I>استری جھڙی پوڙھی ٿیی ٿی</I> <li>Spa: <I>mujer que se converte vieja</I> <li>Swe: <I>kvinna som blir gammal</I> <li>Tha: <I>หญิงที่กลายเป็นแก่</I> <li>Urd: <I>عورت جو بوڑھی بنتی ہے</I> </ul> </div> </div></TD>+</TR>+<TR>+<TD><CODE>mkRCl</CODE></TD>+<TD><A HREF="#RP" TITLE="RP - relative pronoun">RP</A> <CODE>-></CODE> <A HREF="#VA" TITLE="VA - adjective-complement verb">VA</A> <CODE>-></CODE> <A HREF="#AP" TITLE="AP - adjectival phrase">AP</A> <CODE>-></CODE> <A HREF="#RCl" TITLE="RCl - relative clause, with all tenses">RCl</A></TD>+<TD><div class=reveal> <I>woman who becomes very old</I> <div class=popup> <ul> <li>API: <CODE>mkCN woman_N (mkRS (mkRCl which_RP become_VA (mkAP very_AdA old_A)))</CODE> <li>Afr: <I>vrou wat baie oud word</I> <li>Bul: <I>жена която става много стара</I> <li>Cat: <I>dona que se torna molt vell</I> <li>Dan: <I>kvinde som bliver meget gammel</I> <li>Dut: <I>vrouw die erg oud wordt</I> <li>Eng: <I>woman who becomes very old</I> <li>Fin: <I>nainen joka tulee erittäin vanhaksi</I> <li>Fre: <I>femme qui devient très vieille</I> <li>Ger: <I>Frau die sehr alt wird</I> <li>Hin: <I>औरत जो बहुत बूढ़ी बनती है</I> <li>Ita: <I>donna che diventa molto vecchia</I> <li>Lav: <I>{s : ResLav.Definite => ParamX.Number => ResLav.Case => Str</I> <li>Nep: <I>आईमाई जो धेरै बुढी हुन्छे</I> <li>Nor: <I>kvinne som blir mye gammel</I> <li>Pes: <I>زنی که خیلی پیر می شود</I> <li>Pnb: <I>{s : ParamX.Number => ResPnb.Case => Str</I> <li>Pol: <I>kobieta , która staje się bardzo stara</I> <li>Ron: <I>femeie care devine foarte veche</I> <li>Rus: <I>женщина , которая становдит очень старой</I> <li>Snd: <I>استری جھڙی تمام پوڙھی ٿیی ٿی</I> <li>Spa: <I>mujer que se converte muy vieja</I> <li>Swe: <I>kvinna som blir mycket gammal</I> <li>Tha: <I>หญิงที่กลายเป็นแก่มาก</I> <li>Urd: <I>عورت جو بہت بوڑھی بنتی ہے</I> </ul> </div> </div></TD>+</TR>+<TR>+<TD><CODE>mkRCl</CODE></TD>+<TD><A HREF="#RP" TITLE="RP - relative pronoun">RP</A> <CODE>-></CODE> <A HREF="#V2A" TITLE="V2A - verb with NP and AP complement">V2A</A> <CODE>-></CODE> <A HREF="#NP" TITLE="NP - noun phrase (subject or object)">NP</A> <CODE>-></CODE> <A HREF="#A" TITLE="A - one-place adjective">A</A> <CODE>-></CODE> <A HREF="#RCl" TITLE="RCl - relative clause, with all tenses">RCl</A></TD>+<TD><div class=reveal> <I>woman who paints it red</I> <div class=popup> <ul> <li>API: <CODE>mkCN woman_N (mkRS (mkRCl which_RP paint_V2A it_NP red_A))</CODE> <li>Afr: <I>vrou wat dit rooi skilder</I> <li>Bul: <I>жена която рисува него червено</I> <li>Cat: <I>dona que ho pinta en vermell</I> <li>Dan: <I>kvinde som maler det rødt</I> <li>Dut: <I>vrouw die het rood schildert</I> <li>Eng: <I>woman who paints it red</I> <li>Fin: <I>nainen joka maalaa sen punaiseksi</I> <li>Fre: <I>femme qui le peint en rouge</I> <li>Ger: <I>Frau die es rot malt</I> <li>Hin: <I>औरत जो इस को लाल रंग करती है</I> <li>Ita: <I>donna che lo dipinge rosso</I> <li>Lav: <I>{s : ResLav.Definite => ParamX.Number => ResLav.Case => Str</I> <li>Nep: <I>आईमाई जो यो लाई रातो रँग लागाउँछे</I> <li>Nor: <I>kvinne som maler det rødt</I> <li>Pes: <I>زنی که آن را قرمز رنگ می کند</I> <li>Pnb: <I>{s : ParamX.Number => ResPnb.Case => Str</I> <li>Pol: <I>kobieta , która maluje je na czerwono</I> <li>Ron: <I>femeie care îl pictează roşu</I> <li>Rus: <I>женщина , которая рисует красным его</I> <li>Snd: <I>استری جھڙی ھن کی ڳاڙھو رنگ ڪری ٿی</I> <li>Spa: <I>mujer que lo pinta en rojo</I> <li>Swe: <I>kvinna som målar det rött</I> <li>Tha: <I>หญิงที่ทามันเป็นสีแดง</I> <li>Urd: <I>عورت جو اس كو لال رنگ كرتی ہے</I> </ul> </div> </div></TD>+</TR>+<TR>+<TD><CODE>mkRCl</CODE></TD>+<TD><A HREF="#RP" TITLE="RP - relative pronoun">RP</A> <CODE>-></CODE> <A HREF="#V2A" TITLE="V2A - verb with NP and AP complement">V2A</A> <CODE>-></CODE> <A HREF="#NP" TITLE="NP - noun phrase (subject or object)">NP</A> <CODE>-></CODE> <A HREF="#AP" TITLE="AP - adjectival phrase">AP</A> <CODE>-></CODE> <A HREF="#RCl" TITLE="RCl - relative clause, with all tenses">RCl</A></TD>+<TD><div class=reveal> <I>woman who paints it very red</I> <div class=popup> <ul> <li>API: <CODE>mkCN woman_N (mkRS (mkRCl which_RP paint_V2A it_NP (mkAP very_AdA red_A)))</CODE> <li>Afr: <I>vrou wat dit baie rooi skilder</I> <li>Bul: <I>жена която рисува него много червено</I> <li>Cat: <I>dona que ho pinta en molt vermell</I> <li>Dan: <I>kvinde som maler det meget rødt</I> <li>Dut: <I>vrouw die het erg rood schildert</I> <li>Eng: <I>woman who paints it very red</I> <li>Fin: <I>nainen joka maalaa sen erittäin punaiseksi</I> <li>Fre: <I>femme qui le peint en très rouge</I> <li>Ger: <I>Frau die es sehr rot malt</I> <li>Hin: <I>औरत जो इस को बहुत लाल रंग करती है</I> <li>Ita: <I>donna che lo dipinge molto rosso</I> <li>Lav: <I>{s : ResLav.Definite => ParamX.Number => ResLav.Case => Str</I> <li>Nep: <I>आईमाई जो यो लाई धेरै रातो रँग लागाउँछे</I> <li>Nor: <I>kvinne som maler det mye rødt</I> <li>Pes: <I>زنی که آن را خیلی قرمز رنگ می کند</I> <li>Pnb: <I>{s : ParamX.Number => ResPnb.Case => Str</I> <li>Pol: <I>kobieta , która maluje je na bardzo czerwono</I> <li>Ron: <I>femeie care îl pictează foarte roşu</I> <li>Rus: <I>женщина , которая рисует очень красным его</I> <li>Snd: <I>استری جھڙی ھن کی تمام ڳاڙھو رنگ ڪری ٿی</I> <li>Spa: <I>mujer que lo pinta en muy rojo</I> <li>Swe: <I>kvinna som målar det mycket rött</I> <li>Tha: <I>หญิงที่ทามันเป็นสีแดงมาก</I> <li>Urd: <I>عورت جو اس كو بہت لال رنگ كرتی ہے</I> </ul> </div> </div></TD>+</TR>+<TR>+<TD><CODE>mkRCl</CODE></TD>+<TD><A HREF="#RP" TITLE="RP - relative pronoun">RP</A> <CODE>-></CODE> <A HREF="#V2S" TITLE="V2S - verb with NP and S complement">V2S</A> <CODE>-></CODE> <A HREF="#NP" TITLE="NP - noun phrase (subject or object)">NP</A> <CODE>-></CODE> <A HREF="#S" TITLE="S - declarative sentence">S</A> <CODE>-></CODE> <A HREF="#RCl" TITLE="RCl - relative clause, with all tenses">RCl</A></TD>+<TD><div class=reveal> <I>woman who answers to him that we sleep</I> <div class=popup> <ul> <li>API: <CODE>mkCN woman_N (mkRS (mkRCl which_RP answer_V2S he_NP (mkS (mkCl we_NP sleep_V))))</CODE> <li>Afr: <I>vrou wat hom antwoord dat ons slaap</I> <li>Bul: <I>жена която отговаря му , че ние спим</I> <li>Cat: <I>dona que li respon que nosaltres dormim</I> <li>Dan: <I>kvinde som svarer til ham at vi sover</I> <li>Dut: <I>vrouw die hem antwoordt dat we slapen</I> <li>Eng: <I>woman who answers to him that we sleep</I> <li>Fin: <I>nainen joka vastaa hänelle että me nukumme</I> <li>Fre: <I>femme qui lui répond que nous dormons</I> <li>Ger: <I>Frau die ihm antwortet daß wir schlafen</I> <li>Hin: <I>औरत जो उस को जवाब देती है कि हम सोते हैँ</I> <li>Ita: <I>donna che gli risponde che noi dormiamo</I> <li>Lav: <I>{s : ResLav.Definite => ParamX.Number => ResLav.Case => Str</I> <li>Nep: <I>आईमाई जो उ लाई उत्तर दिन्छेकी हामीहरु सुत्छौँ</I> <li>Nor: <I>kvinne som svarer til ham at vi sover</I> <li>Pes: <I>زنی که به او جواب می دهد که ما می خوابیم</I> <li>Pnb: <I>{s : ParamX.Number => ResPnb.Case => Str</I> <li>Pol: <I>kobieta , która odpowiada jemu , że my śpimy</I> <li>Ron: <I>femeie care îi răspunde cã noi dormim</I> <li>Rus: <I>женщина , которая отвечает , что мы спдим его</I> <li>Snd: <I>استری جھڙی ھو کی جواب ڏیی ٿی ت اسان سمھون ٿا</I> <li>Spa: <I>mujer que le responde que nosotros dormimos</I> <li>Swe: <I>kvinna som svarar till honom att vi sover</I> <li>Tha: <I>หญิงที่ตอบเขาว่าเรานอนหลับ</I> <li>Urd: <I>عورت جو اس كو جواب دیتی ہے كہ ہم سوتے ہیں</I> </ul> </div> </div></TD>+</TR>+<TR>+<TD><CODE>mkRCl</CODE></TD>+<TD><A HREF="#RP" TITLE="RP - relative pronoun">RP</A> <CODE>-></CODE> <A HREF="#V2Q" TITLE="V2Q - verb with NP and Q complement">V2Q</A> <CODE>-></CODE> <A HREF="#NP" TITLE="NP - noun phrase (subject or object)">NP</A> <CODE>-></CODE> <A HREF="#QS" TITLE="QS - question">QS</A> <CODE>-></CODE> <A HREF="#RCl" TITLE="RCl - relative clause, with all tenses">RCl</A></TD>+<TD><div class=reveal> <I>woman who asks him who sleeps</I> <div class=popup> <ul> <li>API: <CODE>mkCN woman_N (mkRS (mkRCl which_RP ask_V2Q he_NP (mkQS (mkQCl who_IP sleep_V))))</CODE> <li>Afr: <I>vrou wat hom vra wie slaap</I> <li>Bul: <I>жена която пита него кой спи</I> <li>Cat: <I>dona que li pregunta qui dorm</I> <li>Dan: <I>kvinde som spørger ham hvem som sover</I> <li>Dut: <I>vrouw die hem vraagt wie slaapt</I> <li>Eng: <I>woman who asks him who sleeps</I> <li>Fin: <I>nainen joka kysyy häneltä kuka nukkuu</I> <li>Fre: <I>femme qui lui demande qui dort</I> <li>Ger: <I>Frau die ihn fragt wer schläft</I> <li>Hin: <I>औरत जो उस से पूछती है कि कौन सोता है</I> <li>Ita: <I>donna che gli chiede chi dorme</I> <li>Lav: <I>{s : ResLav.Definite => ParamX.Number => ResLav.Case => Str</I> <li>Nep: <I>आईमाई जो उ सँग सोध्छेकी को सुत्छन्</I> <li>Nor: <I>kvinne som spørr ham hvem som sover</I> <li>Pes: <I>زنی که از او می پرسد چه کسی می خوابد</I> <li>Pnb: <I>{s : ParamX.Number => ResPnb.Case => Str</I> <li>Pol: <I>kobieta , która pyta jego , kto śpi</I> <li>Ron: <I>femeie care îl întreabă cine doarme</I> <li>Rus: <I>женщина , которая спрашивает кто спдит его</I> <li>Snd: <I>استری جھڙی ھو کان پڇی ٿی ت ڪیر سمھی ٿو</I> <li>Spa: <I>mujer que le pregunta quién duerme</I> <li>Swe: <I>kvinna som frågar honom vem som sover</I> <li>Tha: <I>หญิงที่ถามเขาว่าใครนอนหลับ</I> <li>Urd: <I>عورت جو اس سے پوچھتی ہے كہ كون سوتا ہے</I> </ul> </div> </div></TD>+</TR>+<TR>+<TD><CODE>mkRCl</CODE></TD>+<TD><A HREF="#RP" TITLE="RP - relative pronoun">RP</A> <CODE>-></CODE> <A HREF="#V2V" TITLE="V2V - verb with NP and V complement">V2V</A> <CODE>-></CODE> <A HREF="#NP" TITLE="NP - noun phrase (subject or object)">NP</A> <CODE>-></CODE> <A HREF="#VP" TITLE="VP - verb phrase">VP</A> <CODE>-></CODE> <A HREF="#RCl" TITLE="RCl - relative clause, with all tenses">RCl</A></TD>+<TD><div class=reveal> <I>woman who begs him to sleep</I> <div class=popup> <ul> <li>API: <CODE>mkCN woman_N (mkRS (mkRCl which_RP beg_V2V he_NP (mkVP sleep_V)))</CODE> <li>Afr: <I>vrou wat hom om te slaap smeek</I> <li>Bul: <I>жена която моли него да спи</I> <li>Cat: <I>dona que el demana a dormir</I> <li>Dan: <I>kvinde som beder ham at sove</I> <li>Dut: <I>vrouw die hem te slapen smeekt</I> <li>Eng: <I>woman who begs him to sleep</I> <li>Fin: <I>nainen joka pyytää häntä nukkumaan</I> <li>Fre: <I>femme qui le demande à dormir</I> <li>Ger: <I>Frau die ihn zu schlafen bittet</I> <li>Hin: <I>औरत जो उस से सोने की भीख मांगती है</I> <li>Ita: <I>donna che lo prega di dormire</I> <li>Lav: <I>{s : ResLav.Definite => ParamX.Number => ResLav.Case => Str</I> <li>Nep: <I>आईमाई जो उ लाई सुत्न आग्रह गर्छे</I> <li>Nor: <I>kvinne som ber ham att sove</I> <li>Pes: <I>زنی که از او خواهش می کند بخوابد</I> <li>Pnb: <I>{s : ParamX.Number => ResPnb.Case => Str</I> <li>Pol: <I>constant not found: beg_V2V</I> <li>Ron: <I>femeie care îl roagă sã doarmă</I> <li>Rus: <I>женщина , которая просит спать его</I> <li>Snd: <I>constant not found: beg_V2V</I> <li>Spa: <I>mujer que lo roga a dormir</I> <li>Swe: <I>kvinna som ber honom att sova</I> <li>Tha: <I>หญิงที่ขอเขาให้นอนหลับ</I> <li>Urd: <I>عورت جو اس سے سونے كی التجا كرتی ہے</I> </ul> </div> </div></TD>+</TR>+<TR>+<TD><CODE>mkRCl</CODE></TD>+<TD><A HREF="#RP" TITLE="RP - relative pronoun">RP</A> <CODE>-></CODE> <A HREF="#A" TITLE="A - one-place adjective">A</A> <CODE>-></CODE> <A HREF="#RCl" TITLE="RCl - relative clause, with all tenses">RCl</A></TD>+<TD><div class=reveal> <I>woman who is old</I> <div class=popup> <ul> <li>API: <CODE>mkCN woman_N (mkRS (mkRCl which_RP old_A))</CODE> <li>Afr: <I>vrou wat oud is</I> <li>Bul: <I>жена която е стара</I> <li>Cat: <I>dona que és vell</I> <li>Dan: <I>kvinde som er gammel</I> <li>Dut: <I>vrouw die oud is</I> <li>Eng: <I>woman who is old</I> <li>Fin: <I>nainen joka on vanha</I> <li>Fre: <I>femme qui est vieille</I> <li>Ger: <I>Frau die alt ist</I> <li>Hin: <I>औरत जो बूढ़ी है</I> <li>Ita: <I>donna che è vecchia</I> <li>Lav: <I>{s : ResLav.Definite => ParamX.Number => ResLav.Case => Str</I> <li>Nep: <I>आईमाई जो बुढी छे</I> <li>Nor: <I>kvinne som er gammel</I> <li>Pes: <I>زنی که پیر است</I> <li>Pnb: <I>{s : ParamX.Number => ResPnb.Case => Str</I> <li>Pol: <I>kobieta , która jest stara</I> <li>Ron: <I>femeie care este veche</I> <li>Rus: <I>женщина , которая стара</I> <li>Snd: <I>استری جھڙی پوڙھی اھی</I> <li>Spa: <I>mujer que es vieja</I> <li>Swe: <I>kvinna som är gammal</I> <li>Tha: <I>หญิงที่แก่</I> <li>Urd: <I>عورت جو بوڑھی ہے</I> </ul> </div> </div></TD>+</TR>+<TR>+<TD><CODE>mkRCl</CODE></TD>+<TD><A HREF="#RP" TITLE="RP - relative pronoun">RP</A> <CODE>-></CODE> <A HREF="#A" TITLE="A - one-place adjective">A</A> <CODE>-></CODE> <A HREF="#NP" TITLE="NP - noun phrase (subject or object)">NP</A> <CODE>-></CODE> <A HREF="#RCl" TITLE="RCl - relative clause, with all tenses">RCl</A></TD>+<TD><div class=reveal> <I>woman who is older than he</I> <div class=popup> <ul> <li>API: <CODE>mkCN woman_N (mkRS (mkRCl which_RP old_A he_NP))</CODE> <li>Afr: <I>vrou wat ouer as hy is</I> <li>Bul: <I>жена която е по - стара от него</I> <li>Cat: <I>dona que és més vell que ell</I> <li>Dan: <I>kvinde som er ældre end han</I> <li>Dut: <I>vrouw die ouder dan hij is</I> <li>Eng: <I>woman who is older than he</I> <li>Fin: <I>nainen joka on vanhempi kuin hän</I> <li>Fre: <I>femme qui est plus vieille que lui</I> <li>Ger: <I>Frau die älter als er ist</I> <li>Hin: <I>औरत जो उस से बूढ़ी है</I> <li>Ita: <I>donna che è più vecchia di lui</I> <li>Lav: <I>{s : ResLav.Definite => ParamX.Number => ResLav.Case => Str</I> <li>Nep: <I>आईमाई जो उ भन्दा बुढी छे</I> <li>Nor: <I>kvinne som er eldre enn han</I> <li>Pes: <I>زنی که پیر تر از او است</I> <li>Pnb: <I>{s : ParamX.Number => ResPnb.Case => Str</I> <li>Pol: <I>kobieta , która jest starsza niż on</I> <li>Ron: <I>femeie care este mai veche decât el</I> <li>Rus: <I>женщина , которая старше него</I> <li>Snd: <I>استری جھڙی ھو کان پوڙھی اھی</I> <li>Spa: <I>mujer que es más vieja que él</I> <li>Swe: <I>kvinna som är äldre än han</I> <li>Tha: <I>หญิงที่แก่กว่าเขา</I> <li>Urd: <I>عورت جو اس سے بوڑھی ہے</I> </ul> </div> </div></TD>+</TR>+<TR>+<TD><CODE>mkRCl</CODE></TD>+<TD><A HREF="#RP" TITLE="RP - relative pronoun">RP</A> <CODE>-></CODE> <A HREF="#A2" TITLE="A2 - two-place adjective">A2</A> <CODE>-></CODE> <A HREF="#NP" TITLE="NP - noun phrase (subject or object)">NP</A> <CODE>-></CODE> <A HREF="#RCl" TITLE="RCl - relative clause, with all tenses">RCl</A></TD>+<TD><div class=reveal> <I>woman who is married to him</I> <div class=popup> <ul> <li>API: <CODE>mkCN woman_N (mkRS (mkRCl which_RP married_A2 he_NP))</CODE> <li>Afr: <I>vrou wat getroud met hom is</I> <li>Bul: <I>жена която е женена за него</I> <li>Cat: <I>dona que és casata a ell</I> <li>Dan: <I>kvinde som er gift med ham</I> <li>Dut: <I>vrouw die getrouwd met hem is</I> <li>Eng: <I>woman who is married to him</I> <li>Fin: <I>nainen joka on avioitunut hänen kanssa</I> <li>Fre: <I>femme qui est mariée à lui</I> <li>Ger: <I>Frau die verheiratet mit ihm ist</I> <li>Hin: <I>औरत जो उस से शादी शुदा है</I> <li>Ita: <I>donna che è sposata con lui</I> <li>Lav: <I>{s : ResLav.Definite => ParamX.Number => ResLav.Case => Str</I> <li>Nep: <I>आईमाई जो उ सँग विवाहित छे</I> <li>Nor: <I>kvinne som er gift med ham</I> <li>Pes: <I>زنی که او متأهل است</I> <li>Pnb: <I>constant not found: married_A2</I> <li>Pol: <I>kobieta , która jest zaślubiona jemu</I> <li>Ron: <I>femeie care este căsătorită cu el</I> <li>Rus: <I>женщина , которая замужем за им</I> <li>Snd: <I>constant not found: married_A2</I> <li>Spa: <I>mujer que es casada a él</I> <li>Swe: <I>kvinna som är gift med honom</I> <li>Tha: <I>หญิงที่แต่งงานแล้วกับเขา</I> <li>Urd: <I>عورت جو اس سے شادی شدہ ہے</I> </ul> </div> </div></TD>+</TR>+<TR>+<TD><CODE>mkRCl</CODE></TD>+<TD><A HREF="#RP" TITLE="RP - relative pronoun">RP</A> <CODE>-></CODE> <A HREF="#AP" TITLE="AP - adjectival phrase">AP</A> <CODE>-></CODE> <A HREF="#RCl" TITLE="RCl - relative clause, with all tenses">RCl</A></TD>+<TD><div class=reveal> <I>woman who is very old</I> <div class=popup> <ul> <li>API: <CODE>mkCN woman_N (mkRS (mkRCl which_RP (mkAP very_AdA old_A)))</CODE> <li>Afr: <I>vrou wat baie oud is</I> <li>Bul: <I>жена която е много стара</I> <li>Cat: <I>dona que és molt vell</I> <li>Dan: <I>kvinde som er meget gammel</I> <li>Dut: <I>vrouw die erg oud is</I> <li>Eng: <I>woman who is very old</I> <li>Fin: <I>nainen joka on erittäin vanha</I> <li>Fre: <I>femme qui est très vieille</I> <li>Ger: <I>Frau die sehr alt ist</I> <li>Hin: <I>औरत जो बहुत बूढ़ी है</I> <li>Ita: <I>donna che è molto vecchia</I> <li>Lav: <I>{s : ResLav.Definite => ParamX.Number => ResLav.Case => Str</I> <li>Nep: <I>आईमाई जो धेरै बुढी छे</I> <li>Nor: <I>kvinne som er mye gammel</I> <li>Pes: <I>زنی که خیلی پیر است</I> <li>Pnb: <I>{s : ParamX.Number => ResPnb.Case => Str</I> <li>Pol: <I>kobieta , która jest bardzo stara</I> <li>Ron: <I>femeie care este foarte veche</I> <li>Rus: <I>женщина , которая очень стара</I> <li>Snd: <I>استری جھڙی تمام پوڙھی اھی</I> <li>Spa: <I>mujer que es muy vieja</I> <li>Swe: <I>kvinna som är mycket gammal</I> <li>Tha: <I>หญิงที่แก่มาก</I> <li>Urd: <I>عورت جو بہت بوڑھی ہے</I> </ul> </div> </div></TD>+</TR>+<TR>+<TD><CODE>mkRCl</CODE></TD>+<TD><A HREF="#RP" TITLE="RP - relative pronoun">RP</A> <CODE>-></CODE> <A HREF="#NP" TITLE="NP - noun phrase (subject or object)">NP</A> <CODE>-></CODE> <A HREF="#RCl" TITLE="RCl - relative clause, with all tenses">RCl</A></TD>+<TD><div class=reveal> <I>woman who is the woman</I> <div class=popup> <ul> <li>API: <CODE>mkCN woman_N (mkRS (mkRCl which_RP (mkNP the_Det woman_N)))</CODE> <li>Afr: <I>vrou wat die vrou is</I> <li>Bul: <I>жена която е жената</I> <li>Cat: <I>dona que és la dona</I> <li>Dan: <I>kvinde som er kvinden</I> <li>Dut: <I>vrouw die de vrouw is</I> <li>Eng: <I>woman who is the woman</I> <li>Fin: <I>nainen joka on nainen</I> <li>Fre: <I>femme qui est la femme</I> <li>Ger: <I>Frau die die Frau ist</I> <li>Hin: <I>औरत जो औरत है</I> <li>Ita: <I>donna che è la donna</I> <li>Lav: <I>{s : ResLav.Definite => ParamX.Number => ResLav.Case => Str</I> <li>Nep: <I>आईमाई जो आईमाई हुन्</I> <li>Nor: <I>kvinne som er kvinna</I> <li>Pes: <I>زنی که زن است</I> <li>Pnb: <I>{s : ParamX.Number => ResPnb.Case => Str</I> <li>Pol: <I>kobieta , która jest kobietą</I> <li>Ron: <I>femeie care este femeia</I> <li>Rus: <I>женщина , которая женщина</I> <li>Snd: <I>استری جھڙی استری اھی</I> <li>Spa: <I>mujer que es la mujer</I> <li>Swe: <I>kvinna som är kvinnan</I> <li>Tha: <I>หญิงที่เป็นหญิง</I> <li>Urd: <I>عورت جو عورت ہے</I> </ul> </div> </div></TD>+</TR>+<TR>+<TD><CODE>mkRCl</CODE></TD>+<TD><A HREF="#RP" TITLE="RP - relative pronoun">RP</A> <CODE>-></CODE> <A HREF="#N" TITLE="N - common noun">N</A> <CODE>-></CODE> <A HREF="#RCl" TITLE="RCl - relative clause, with all tenses">RCl</A></TD>+<TD><div class=reveal> <I>student who is a woman</I> <div class=popup> <ul> <li>API: <CODE>mkCN student_N (mkRS (mkRCl which_RP woman_N))</CODE> <li>Afr: <I>student wat 'n vrou is</I> <li>Bul: <I>студент който е жена</I> <li>Cat: <I>estudiant que és una dona</I> <li>Dan: <I>student som er en kvinde</I> <li>Dut: <I>student die vrouw is</I> <li>Eng: <I>student who is a woman</I> <li>Fin: <I>opiskelija joka on nainen</I> <li>Fre: <I>étudiant qui est une femme</I> <li>Ger: <I>Student der eine Frau ist</I> <li>Hin: <I>constant not found: student_N</I> <li>Ita: <I>studente che è una donna</I> <li>Lav: <I>{s : ResLav.Definite => ParamX.Number => ResLav.Case => Str</I> <li>Nep: <I>बिध्यार्थि जो आईमाई हो</I> <li>Nor: <I>student som er ei kvinne</I> <li>Pes: <I>دانش آموزی که زن است</I> <li>Pnb: <I>constant not found: student_N</I> <li>Pol: <I>student , który jest kobieta</I> <li>Ron: <I>student care este femeie</I> <li>Rus: <I>студент , который женщина</I> <li>Snd: <I>شاگرد جھڙا استری اھی</I> <li>Spa: <I>estudiante que es una mujer</I> <li>Swe: <I>student som är en kvinna</I> <li>Tha: <I>นักศึกษาที่เป็นหญิง</I> <li>Urd: <I>طالب علم جو عورت ہے</I> </ul> </div> </div></TD>+</TR>+<TR>+<TD><CODE>mkRCl</CODE></TD>+<TD><A HREF="#RP" TITLE="RP - relative pronoun">RP</A> <CODE>-></CODE> <A HREF="#CN" TITLE="CN - common noun (without determiner)">CN</A> <CODE>-></CODE> <A HREF="#RCl" TITLE="RCl - relative clause, with all tenses">RCl</A></TD>+<TD><div class=reveal> <I>student who is an old woman</I> <div class=popup> <ul> <li>API: <CODE>mkCN student_N (mkRS (mkRCl which_RP (mkCN old_A woman_N)))</CODE> <li>Afr: <I>student wat 'n oud vrou is</I> <li>Bul: <I>студент който е стара жена</I> <li>Cat: <I>estudiant que és una dona vell</I> <li>Dan: <I>student som er en gammel kvinde</I> <li>Dut: <I>student die oude vrouw is</I> <li>Eng: <I>student who is an old woman</I> <li>Fin: <I>opiskelija joka on vanha nainen</I> <li>Fre: <I>étudiant qui est une vieille femme</I> <li>Ger: <I>Student der eine alte Frau ist</I> <li>Hin: <I>constant not found: student_N</I> <li>Ita: <I>studente che è una vecchia donna</I> <li>Lav: <I>{s : ResLav.Definite => ParamX.Number => ResLav.Case => Str</I> <li>Nep: <I>बिध्यार्थि जो बुढी आईमाई हो</I> <li>Nor: <I>student som er ei gammel kvinne</I> <li>Pes: <I>دانش آموزی که زن پیر است</I> <li>Pnb: <I>constant not found: student_N</I> <li>Pol: <I>student , który jest stara kobieta</I> <li>Ron: <I>student care este femeie veche</I> <li>Rus: <I>студент , который старая женщина</I> <li>Snd: <I>شاگرد جھڙا پوڙھی استری اھی</I> <li>Spa: <I>estudiante que es una vieja mujer</I> <li>Swe: <I>student som är en gammal kvinna</I> <li>Tha: <I>นักศึกษาที่เป็นหญิงแก่</I> <li>Urd: <I>طالب علم جو بوڑھی عورت ہے</I> </ul> </div> </div></TD>+</TR>+<TR>+<TD><CODE>mkRCl</CODE></TD>+<TD><A HREF="#RP" TITLE="RP - relative pronoun">RP</A> <CODE>-></CODE> <A HREF="#Adv" TITLE="Adv - verb-phrase-modifying adverb">Adv</A> <CODE>-></CODE> <A HREF="#RCl" TITLE="RCl - relative clause, with all tenses">RCl</A></TD>+<TD><div class=reveal> <I>woman who is here</I> <div class=popup> <ul> <li>API: <CODE>mkCN woman_N (mkRS (mkRCl which_RP here_Adv))</CODE> <li>Afr: <I>vrou wat hier is</I> <li>Bul: <I>жена която е тук</I> <li>Cat: <I>dona que és aquí</I> <li>Dan: <I>kvinde som er her</I> <li>Dut: <I>vrouw die hier is</I> <li>Eng: <I>woman who is here</I> <li>Fin: <I>nainen joka on täällä</I> <li>Fre: <I>femme qui est ici</I> <li>Ger: <I>Frau die hier ist</I> <li>Hin: <I>औरत जो यहाँ है</I> <li>Ita: <I>donna che è quà</I> <li>Lav: <I>{s : ResLav.Definite => ParamX.Number => ResLav.Case => Str</I> <li>Nep: <I>आईमाई जो यहाँ छे</I> <li>Nor: <I>kvinne som er her</I> <li>Pes: <I>زنی که اینجا است</I> <li>Pnb: <I>{s : ParamX.Number => ResPnb.Case => Str</I> <li>Pol: <I>kobieta , która jest tutaj</I> <li>Ron: <I>femeie care este aici</I> <li>Rus: <I>женщина , которая здесь</I> <li>Snd: <I>استری جھڙی ھتی اھی</I> <li>Spa: <I>mujer que es aquí</I> <li>Swe: <I>kvinna som är här</I> <li>Tha: <I>หญิงที่อยู่ที่นี่</I> <li>Urd: <I>عورت جو یہاں ہے</I> </ul> </div> </div></TD>+</TR>+<TR>+<TD><CODE>mkRCl</CODE></TD>+<TD><A HREF="#RP" TITLE="RP - relative pronoun">RP</A> <CODE>-></CODE> <A HREF="#NP" TITLE="NP - noun phrase (subject or object)">NP</A> <CODE>-></CODE> <A HREF="#V2" TITLE="V2 - two-place verb">V2</A> <CODE>-></CODE> <A HREF="#RCl" TITLE="RCl - relative clause, with all tenses">RCl</A></TD>+<TD><div class=reveal> <I>woman whom we love</I> <div class=popup> <ul> <li>API: <CODE>mkCN woman_N (mkRS (mkRCl which_RP we_NP love_V2))</CODE> <li>Afr: <I>vrou wat ons lief het</I> <li>Bul: <I>жена която ние обичаме</I> <li>Cat: <I>dona que nosaltres estimem</I> <li>Dan: <I>kvinde som vi elsker</I> <li>Dut: <I>vrouw die we lief hebben</I> <li>Eng: <I>woman whom we love</I> <li>Fin: <I>nainen jota me rakastamme</I> <li>Fre: <I>femme que nous aimons</I> <li>Ger: <I>Frau die wir lieben</I> <li>Hin: <I>औरत जिस को हम प्यार करते हैँ</I> <li>Ita: <I>donna che noi amiamo</I> <li>Lav: <I>{s : ResLav.Definite => ParamX.Number => ResLav.Case => Str</I> <li>Nep: <I>आईमाई जो लाई हामीहरु माया गर्छौँ</I> <li>Nor: <I>kvinne som vi elsker</I> <li>Pes: <I>زنی که ما دوست داریم</I> <li>Pnb: <I>{s : ParamX.Number => ResPnb.Case => Str</I> <li>Pol: <I>kobieta , którą kochamy my</I> <li>Ron: <I>femeie pe care o iubim noi</I> <li>Rus: <I>женщина , которую мы любдим</I> <li>Snd: <I>استری جنھن سان اسان عشق ڪرون ٿا</I> <li>Spa: <I>mujer que nosotros amamos</I> <li>Swe: <I>kvinna som vi älskar</I> <li>Tha: <I>หญิงที่เรารัก</I> <li>Urd: <I>عورت جس كو ہم پیار كرتے ہیں</I> </ul> </div> </div></TD>+</TR>+<TR>+<TD><CODE>mkRCl</CODE></TD>+<TD><A HREF="#RP" TITLE="RP - relative pronoun">RP</A> <CODE>-></CODE> <A HREF="#ClSlash">ClSlash</A> <CODE>-></CODE> <A HREF="#RCl" TITLE="RCl - relative clause, with all tenses">RCl</A></TD>+<TD><div class=reveal> <I>woman whom she loves today</I> <div class=popup> <ul> <li>API: <CODE>mkCN woman_N (mkRS (mkRCl which_RP (mkClSlash (mkClSlash she_NP love_V2) today_Adv)))</CODE> <li>Afr: <I>vrou wat sy lief het vandag</I> <li>Bul: <I>жена която тя обича днес</I> <li>Cat: <I>dona que ella estima avui</I> <li>Dan: <I>kvinde som hun elsker idag</I> <li>Dut: <I>vrouw die ze lief heeft vandaag</I> <li>Eng: <I>woman whom she loves today</I> <li>Fin: <I>nainen jota hän rakastaa tänään</I> <li>Fre: <I>femme qu' elle aime aujourd'hui</I> <li>Ger: <I>Frau die sie liebt heute</I> <li>Hin: <I>औरत जिस को आज वह प्यार करती है</I> <li>Ita: <I>donna che lei ama oggi</I> <li>Lav: <I>{s : ResLav.Definite => ParamX.Number => ResLav.Case => Str</I> <li>Nep: <I>आईमाई जो लाई आज उनी माया गर्छिन्</I> <li>Nor: <I>kvinne som hun elsker idag</I> <li>Pes: <I>زنی که امروز او دوست دارد</I> <li>Pnb: <I>{s : ParamX.Number => ResPnb.Case => Str</I> <li>Pol: <I>kobieta , którą dziś kocha ona</I> <li>Ron: <I>femeie pe care o iubeşte ea astăzi</I> <li>Rus: <I>женщина , которую она любдит сегодня</I> <li>Snd: <I>استری جنھن سان اڄ ھو۶ عشق ڪری ٿی</I> <li>Spa: <I>mujer que ella ama hoy</I> <li>Swe: <I>kvinna som hon älskar idag</I> <li>Tha: <I>หญิงที่หล่อนรักวันนี้</I> <li>Urd: <I>عورت جس كو آج وہ پیار كرتی ہے</I> </ul> </div> </div></TD>+</TR>+<TR>+<TD><CODE>mkRCl</CODE></TD>+<TD><A HREF="#Cl" TITLE="Cl - declarative clause, with all tenses">Cl</A> <CODE>-></CODE> <A HREF="#RCl" TITLE="RCl - relative clause, with all tenses">RCl</A></TD>+<TD><I>such that she loves him</I></TD>+</TR>+</TABLE>++<A NAME="RP"></A>+<H2>RP - relative pronoun</H2>++<TABLE BORDER="1" CELLPADDING="4">+<TR>+<TH>Function</TH>+<TH>Type</TH>+<TH COLSPAN="2">Example</TH>+</TR>+<TR>+<TD><CODE>mkRP</CODE></TD>+<TD><A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A> <CODE>-></CODE> <A HREF="#NP" TITLE="NP - noun phrase (subject or object)">NP</A> <CODE>-></CODE> <A HREF="#RP" TITLE="RP - relative pronoun">RP</A> <CODE>-></CODE> <A HREF="#RP" TITLE="RP - relative pronoun">RP</A></TD>+<TD><div class=reveal> <I>all the cities in whom</I> <div class=popup> <ul> <li>API: <CODE>mkRP in_Prep (mkNP all_Predet (mkNP the_Quant pluralNum city_N)) which_RP</CODE> <li>Afr: <I>alle die stede in wat</I> <li>Bul: <I>всичките градовете в който</I> <li>Cat: <I>totes les ciutats en que</I> <li>Dan: <I>alle byerne i hvilken</I> <li>Dut: <I>alle de stadden in die</I> <li>Eng: <I>all the cities in whom</I> <li>Fin: <I>jossa kaikki kaupungit</I> <li>Fre: <I>toutes les villes dans lequel</I> <li>Ger: <I>alle die Städte in dem</I> <li>Hin: <I>जो तमाम शहर में</I> <li>Ita: <I>tutte le città in cui</I> <li>Lav: <I>kurš visas pilsētās</I> <li>Nep: <I>जो सबै शहरहरु मा</I> <li>Nor: <I>alle byene i hvilken</I> <li>Pes: <I>همه ی شهر که در آن ها</I> <li>Pnb: <I>جیڑا سارے شہر وچ</I> <li>Pol: <I>w którym wszystkie miast</I> <li>Ron: <I>toate oraşele în care</I> <li>Rus: <I>все городов в котором</I> <li>Snd: <I>constant not found: city_N</I> <li>Spa: <I>todas las ciudades en que</I> <li>Swe: <I>alla städerna i vilken</I> <li>Tha: <I>ทั้งหมดเมืองในที่</I> <li>Urd: <I>جو تمام شہر میں</I> </ul> </div> </div></TD>+</TR>+<TR>+<TD><CODE>which_RP</CODE></TD>+<TD><A HREF="#RP" TITLE="RP - relative pronoun">RP</A></TD>+<TD><I>which/who</I></TD>+</TR>+</TABLE>++<A NAME="RS"></A>+<H2>RS - relative</H2>++<TABLE BORDER="1" CELLPADDING="4">+<TR>+<TH>Function</TH>+<TH>Type</TH>+<TH COLSPAN="2">Example</TH>+</TR>+<TR>+<TD><CODE>mkRS</CODE></TD>+<TD>(<A HREF="#Tense" TITLE="Tense - tense">Tense</A>) <CODE>-></CODE> (<A HREF="#Ant" TITLE="Ant - anteriority">Ant</A>) <CODE>-></CODE> (<A HREF="#Pol" TITLE="Pol - polarity">Pol</A>) <CODE>-></CODE> <A HREF="#RCl" TITLE="RCl - relative clause, with all tenses">RCl</A> <CODE>-></CODE> <A HREF="#RS" TITLE="RS - relative">RS</A></TD>+<TD><div class=reveal> <I>woman who wouldn't have slept</I> <div class=popup> <ul> <li>API: <CODE>mkCN woman_N (mkRS conditionalTense anteriorAnt negativePol (mkRCl which_RP sleep_V))</CODE> <li>Afr: <I>vrou wat nie geslaap het nie sou</I> <li>Bul: <I>жена която не би спалa</I> <li>Cat: <I>dona que no hauria dormit</I> <li>Dan: <I>kvinde som ikke ville have sovet</I> <li>Dut: <I>vrouw die niet geslapen hebben zou</I> <li>Eng: <I>woman who wouldn't have slept</I> <li>Fin: <I>nainen joka ei olisi nukkunut</I> <li>Fre: <I>femme qui n' aurait pas dormi</I> <li>Ger: <I>Frau die nicht geschlafen haben würde</I> <li>Hin: <I>औरत जो न शायद सोए</I> <li>Ita: <I>donna che non avrebbe dormito</I> <li>Lav: <I>{s : ResLav.Definite => ParamX.Number => ResLav.Case => Str</I> <li>Nep: <I>आईमाई जो सुतेकिहुन्थी</I> <li>Nor: <I>kvinne som ikke ville ha sovet</I> <li>Pes: <I>زنی که نمی خوابید</I> <li>Pnb: <I>{s : ParamX.Number => ResPnb.Case => Str</I> <li>Pol: <I>kobieta , która nie spałaby</I> <li>Ron: <I>femeie care nu ar fi dormit</I> <li>Rus: <I>женщина , которая спала бы</I> <li>Snd: <I>استری جھڙی شاید ن سمھی</I> <li>Spa: <I>mujer que no habría dormido</I> <li>Swe: <I>kvinna som inte skulle ha sovit</I> <li>Tha: <I>หญิงที่นอนไม่หลับ</I> <li>Urd: <I>عورت جو نا شاید سو ے</I> </ul> </div> </div></TD>+</TR>+<TR>+<TD><CODE>mkRS</CODE></TD>+<TD><A HREF="#Temp" TITLE="Temp - temporal and aspectual features">Temp</A> <CODE>-></CODE> (<A HREF="#Pol" TITLE="Pol - polarity">Pol</A>) <CODE>-></CODE> <A HREF="#RCl" TITLE="RCl - relative clause, with all tenses">RCl</A> <CODE>-></CODE> <A HREF="#RS" TITLE="RS - relative">RS</A></TD>+<TD><I>that wouldn't have slept</I></TD>+</TR>+<TR>+<TD><CODE>mkRS</CODE></TD>+<TD><A HREF="#Conj" TITLE="Conj - conjunction">Conj</A> <CODE>-></CODE> <A HREF="#RS" TITLE="RS - relative">RS</A> <CODE>-></CODE> <A HREF="#RS" TITLE="RS - relative">RS</A> <CODE>-></CODE> <A HREF="#RS" TITLE="RS - relative">RS</A></TD>+<TD><div class=reveal> <I>woman who sleeps or whom we love</I> <div class=popup> <ul> <li>API: <CODE>mkCN woman_N (mkRS or_Conj (mkRS (mkRCl which_RP sleep_V)) (mkRS (mkRCl which_RP we_NP love_V2)))</CODE> <li>Afr: <I>vrou wat slaap of wat ons lief het</I> <li>Bul: <I>жена която спи или която ние обичаме</I> <li>Cat: <I>dona que dorm o que nosaltres estimem</I> <li>Dan: <I>kvinde som sover eller som vi elsker</I> <li>Dut: <I>vrouw die slaapt of die we lief hebben</I> <li>Eng: <I>woman who sleeps or whom we love</I> <li>Fin: <I>nainen joka nukkuu tai jota me rakastamme</I> <li>Fre: <I>femme qui dort ou que nous aimons</I> <li>Ger: <I>Frau die schläft oder die wir lieben</I> <li>Hin: <I>औरत जो सोती है या जिस को हम प्यार करते हैँ</I> <li>Ita: <I>donna che dorme o che noi amiamo</I> <li>Lav: <I>{s : ResLav.Definite => ParamX.Number => ResLav.Case => Str</I> <li>Nep: <I>आईमाई जो सुत्छे अथवा जो लाई हामीहरु माया गर्छौँ</I> <li>Nor: <I>kvinne som sover eller som vi elsker</I> <li>Pes: <I>زنی که می خوابد یا که ما دوست داریم</I> <li>Pnb: <I>{s : ParamX.Number => ResPnb.Case => Str</I> <li>Pol: <I>kobieta , która śpi lub , którą kochamy my</I> <li>Ron: <I>femeie care doarme sau pe care o iubim noi</I> <li>Rus: <I>женщина , которая спдит или , которую мы любдим</I> <li>Snd: <I>استری جھڙی سمھی ٿی یا جنھن سان اسان عشق ڪرون ٿا</I> <li>Spa: <I>mujer que duerme o que nosotros amamos</I> <li>Swe: <I>kvinna som sover eller som vi älskar</I> <li>Tha: <I>หญิงที่นอนหลับหริอที่เรารัก</I> <li>Urd: <I>عورت جو سوتی ہے یا جس كو ہم پیار كرتے ہیں</I> </ul> </div> </div></TD>+</TR>+<TR>+<TD><CODE>mkRS</CODE></TD>+<TD><A HREF="#Conj" TITLE="Conj - conjunction">Conj</A> <CODE>-></CODE> <A HREF="#ListRS">ListRS</A> <CODE>-></CODE> <A HREF="#RS" TITLE="RS - relative">RS</A></TD>+<TD><I>who sleeps, whom I see and who sleeps</I></TD>+</TR>+</TABLE>++<A NAME="S"></A>+<H2>S - declarative sentence</H2>++<TABLE BORDER="1" CELLPADDING="4">+<TR>+<TH>Function</TH>+<TH>Type</TH>+<TH COLSPAN="2">Example</TH>+</TR>+<TR>+<TD><CODE>mkS</CODE></TD>+<TD>(<A HREF="#Tense" TITLE="Tense - tense">Tense</A>) <CODE>-></CODE> (<A HREF="#Ant" TITLE="Ant - anteriority">Ant</A>) <CODE>-></CODE> (<A HREF="#Pol" TITLE="Pol - polarity">Pol</A>) <CODE>-></CODE> <A HREF="#Cl" TITLE="Cl - declarative clause, with all tenses">Cl</A> <CODE>-></CODE> <A HREF="#S" TITLE="S - declarative sentence">S</A></TD>+<TD><div class=reveal> <I>she wouldn't have slept</I> <div class=popup> <ul> <li>API: <CODE>mkS conditionalTense anteriorAnt negativePol (mkCl she_NP sleep_V)</CODE> <li>Afr: <I>sy sou nie geslaap het nie</I> <li>Bul: <I>тя не би спалa</I> <li>Cat: <I>ella no hauria dormit</I> <li>Dan: <I>hun ville ikke have sovet</I> <li>Dut: <I>ze zou niet geslapen hebben</I> <li>Eng: <I>she wouldn't have slept</I> <li>Fin: <I>hän ei olisi nukkunut</I> <li>Fre: <I>elle n' aurait pas dormi</I> <li>Ger: <I>sie würde nicht geschlafen haben</I> <li>Hin: <I>वह न शायद सोए</I> <li>Ita: <I>lei non avrebbe dormito</I> <li>Lav: <I>viņa nebūtu gulējusi</I> <li>Nep: <I>उनी सुतेकिहुन्थि</I> <li>Nor: <I>hun ville ikke ha sovet</I> <li>Pes: <I>او نمی خوابید</I> <li>Pnb: <I>او نا شاید سوئے</I> <li>Pol: <I>ona nie spałaby</I> <li>Ron: <I>ea nu ar fi dormit</I> <li>Rus: <I>она не спала бы</I> <li>Snd: <I>ھو۶ شاید ن سمھندی</I> <li>Spa: <I>ella no habría dormido</I> <li>Swe: <I>hon skulle inte ha sovit</I> <li>Tha: <I>หล่อนนอนไม่หลับ</I> <li>Urd: <I>وہ نا شاید سوئے</I> </ul> </div> </div></TD>+</TR>+<TR>+<TD><CODE>mkS</CODE></TD>+<TD><A HREF="#Temp" TITLE="Temp - temporal and aspectual features">Temp</A> <CODE>-></CODE> <A HREF="#Pol" TITLE="Pol - polarity">Pol</A> <CODE>-></CODE> <A HREF="#Cl" TITLE="Cl - declarative clause, with all tenses">Cl</A> <CODE>-></CODE> <A HREF="#S" TITLE="S - declarative sentence">S</A></TD>+<TD><I>she wouldn't have slept</I></TD>+</TR>+<TR>+<TD><CODE>mkS</CODE></TD>+<TD><A HREF="#Conj" TITLE="Conj - conjunction">Conj</A> <CODE>-></CODE> <A HREF="#S" TITLE="S - declarative sentence">S</A> <CODE>-></CODE> <A HREF="#S" TITLE="S - declarative sentence">S</A> <CODE>-></CODE> <A HREF="#S" TITLE="S - declarative sentence">S</A></TD>+<TD><div class=reveal> <I>she sleeps and I run</I> <div class=popup> <ul> <li>API: <CODE>mkS and_Conj (mkS (mkCl she_NP sleep_V)) (mkS (mkCl i_NP run_V))</CODE> <li>Afr: <I>sy slaap en ek hardloop</I> <li>Bul: <I>тя спи и аз бягам</I> <li>Cat: <I>ella dorm i jo corro</I> <li>Dan: <I>hun sover og jeg løber</I> <li>Dut: <I>ze slaapt en ik ren</I> <li>Eng: <I>she sleeps and I run</I> <li>Fin: <I>hän nukkuu ja minä juoksen</I> <li>Fre: <I>elle dort et je cours</I> <li>Ger: <I>sie schläft und ich laufe</I> <li>Hin: <I>वह सोती है और मैं दौड़ता हूँ</I> <li>Ita: <I>lei dorme e io corro</I> <li>Lav: <I>viņa guļ un es skrienu</I> <li>Nep: <I>उनी सुत्छिन् र म कुद्छु</I> <li>Nor: <I>hun sover og jeg springer</I> <li>Pes: <I>او می خوابد و من می دوم</I> <li>Pnb: <I>او سوندی اے تے میں دوڑدا واں</I> <li>Pol: <I>ona śpi i ja biegnę</I> <li>Ron: <I>ea doarme şi eu fug</I> <li>Rus: <I>она спдит и я бегаю</I> <li>Snd: <I>ھو۶ سمھی ٿی ۽ مان ڊوڙان ٿو</I> <li>Spa: <I>ella duerme y yo corro</I> <li>Swe: <I>hon sover och jag springer</I> <li>Tha: <I>หล่อนนอนหลับและฉันวิ่ง</I> <li>Urd: <I>وہ سوتی ہے اور میں دوڑتا ہوں</I> </ul> </div> </div></TD>+</TR>+<TR>+<TD><CODE>mkS</CODE></TD>+<TD><A HREF="#Conj" TITLE="Conj - conjunction">Conj</A> <CODE>-></CODE> <A HREF="#ListS">ListS</A> <CODE>-></CODE> <A HREF="#S" TITLE="S - declarative sentence">S</A></TD>+<TD><div class=reveal> <I>she sleeps , I run and you walk</I> <div class=popup> <ul> <li>API: <CODE>mkS and_Conj (mkListS (mkS (mkCl she_NP sleep_V)) (mkListS (mkS (mkCl i_NP run_V)) (mkS (mkCl (mkNP youSg_Pron) walk_V))))</CODE> <li>Afr: <I>sy slaap , ek hardloop en jy loop</I> <li>Bul: <I>тя спи , аз бягам и ти ходиш</I> <li>Cat: <I>ella dorm , jo corro i tu camines</I> <li>Dan: <I>sover hun , jeg løber og du går</I> <li>Dut: <I>ze slaapt , ik ren en je loopt</I> <li>Eng: <I>she sleeps , I run and you walk</I> <li>Fin: <I>hän nukkuu , minä juoksen ja sinä kävelet</I> <li>Fre: <I>elle dort , je cours et tu marches</I> <li>Ger: <I>schläft sie , ich laufe und du gehst</I> <li>Hin: <I>वह सोती है , मैं दौड़ता हूँ और तू चलता है</I> <li>Ita: <I>lei dorme , io corro e tu cammini</I> <li>Lav: <I>viņa guļ , es skrienu un tu staigā</I> <li>Nep: <I>उनी सुत्छिन् , म कुद्छु र तिमी हिड्छौ</I> <li>Nor: <I>sover hun , jeg springer og du går</I> <li>Pes: <I>او می خوابد , من می دوم و تو راه می روی</I> <li>Pnb: <I>او سوندی اے , میں دوڑدا واں تے توں چلدا ایں</I> <li>Pol: <I>ona śpi , ja biegnę i ty spacerujesz</I> <li>Ron: <I>ea doarme , eu fug şi tu mergi</I> <li>Rus: <I>она спдит , я бегаю и ты гуляешь</I> <li>Snd: <I>ھو۶ سمھی ٿی , مان ڊوڙان ٿو ۽ تون ھلین ٿو</I> <li>Spa: <I>ella duerme , yo corro y tu caminas</I> <li>Swe: <I>sover hon , jag springer och du går</I> <li>Tha: <I>หล่อนนอนหลับฉันวิ่งและคุณเดิน</I> <li>Urd: <I>وہ سوتی ہے , میں دوڑتا ہوں اور تو چلتا ہے</I> </ul> </div> </div></TD>+</TR>+<TR>+<TD><CODE>mkS</CODE></TD>+<TD><A HREF="#Adv" TITLE="Adv - verb-phrase-modifying adverb">Adv</A> <CODE>-></CODE> <A HREF="#S" TITLE="S - declarative sentence">S</A> <CODE>-></CODE> <A HREF="#S" TITLE="S - declarative sentence">S</A></TD>+<TD><div class=reveal> <I>today she sleeps</I> <div class=popup> <ul> <li>API: <CODE>mkS today_Adv (mkS (mkCl she_NP sleep_V))</CODE> <li>Afr: <I>vandag slaap sy</I> <li>Bul: <I>днес тя спи</I> <li>Cat: <I>avui ella dorm</I> <li>Dan: <I>idag sover hun</I> <li>Dut: <I>vandaag slaapt ze</I> <li>Eng: <I>today she sleeps</I> <li>Fin: <I>tänään hän nukkuu</I> <li>Fre: <I>aujourd'hui elle dort</I> <li>Ger: <I>heute schläft sie</I> <li>Hin: <I>आज वह सोती है</I> <li>Ita: <I>oggi lei dorme</I> <li>Lav: <I>NON_EXISTENT</I> <li>Nep: <I>आज उनी सुत्छिन्</I> <li>Nor: <I>idag sover hun</I> <li>Pes: <I>امروز او می خوابد</I> <li>Pnb: <I>اج او سوندی اے</I> <li>Pol: <I>dziś ona śpi</I> <li>Ron: <I>astăzi ea doarme</I> <li>Rus: <I>сегодня она спдит</I> <li>Snd: <I>اڄ ھو۶ سمھی ٿی</I> <li>Spa: <I>hoy ella duerme</I> <li>Swe: <I>idag sover hon</I> <li>Tha: <I>วันนี้หล่อนนอนหลับ</I> <li>Urd: <I>آج وہ سوتی ہے</I> </ul> </div> </div></TD>+</TR>+</TABLE>++<A NAME="SC"></A>+<H2>SC - embedded sentence or question</H2>++<TABLE BORDER="1" CELLPADDING="4">+<TR>+<TH>Function</TH>+<TH>Type</TH>+<TH COLSPAN="2">Example</TH>+</TR>+<TR>+<TD><CODE>mkSC</CODE></TD>+<TD><A HREF="#S" TITLE="S - declarative sentence">S</A> <CODE>-></CODE> <A HREF="#SC" TITLE="SC - embedded sentence or question">SC</A></TD>+<TD><div class=reveal> <I>that she sleeps</I> <div class=popup> <ul> <li>API: <CODE>mkSC (mkS (mkCl she_NP sleep_V))</CODE> <li>Afr: <I>dat sy slaap</I> <li>Bul: <I>, че тя спи</I> <li>Cat: <I>que ella dorm</I> <li>Dan: <I>at hun sover</I> <li>Dut: <I>dat ze slaapt</I> <li>Eng: <I>that she sleeps</I> <li>Fin: <I>että hän nukkuu</I> <li>Fre: <I>qu' elle dort</I> <li>Ger: <I>daß sie schläft</I> <li>Hin: <I>कि वह सोती है</I> <li>Ita: <I>che lei dorme</I> <li>Lav: <I>ka viņa guļ</I> <li>Nep: <I>की उनी सुत्छिन्</I> <li>Nor: <I>at hun sover</I> <li>Pes: <I>که او می خوابد</I> <li>Pnb: <I>كہ او سوندی اے</I> <li>Pol: <I>, że ona śpi</I> <li>Ron: <I>cã ea doarme</I> <li>Rus: <I>что она спдит</I> <li>Snd: <I>ت ھو۶ سمھی ٿی</I> <li>Spa: <I>que ella duerme</I> <li>Swe: <I>att hon sover</I> <li>Tha: <I>ว่าหล่อนนอนหลับ</I> <li>Urd: <I>كہ وہ سوتی ہے</I> </ul> </div> </div></TD>+</TR>+<TR>+<TD><CODE>mkSC</CODE></TD>+<TD><A HREF="#QS" TITLE="QS - question">QS</A> <CODE>-></CODE> <A HREF="#SC" TITLE="SC - embedded sentence or question">SC</A></TD>+<TD><div class=reveal> <I>who sleeps</I> <div class=popup> <ul> <li>API: <CODE>mkSC (mkQS (mkQCl who_IP sleep_V))</CODE> <li>Afr: <I>wie slaap</I> <li>Bul: <I>който спи</I> <li>Cat: <I>qui dorm</I> <li>Dan: <I>hvem som sover</I> <li>Dut: <I>wie slaapt</I> <li>Eng: <I>who sleeps</I> <li>Fin: <I>kuka nukkuu</I> <li>Fre: <I>qui dort</I> <li>Ger: <I>wer schläft</I> <li>Hin: <I>कि कौन सोता है</I> <li>Ita: <I>chi dorme</I> <li>Lav: <I>kurš guļ</I> <li>Nep: <I>को सुत्छन्</I> <li>Nor: <I>hvem som sover</I> <li>Pes: <I>چه کسی می خوابد</I> <li>Pnb: <I>كون سوندا اے</I> <li>Pol: <I>, kto śpi</I> <li>Ron: <I>cine doarme</I> <li>Rus: <I>кто спдит</I> <li>Snd: <I>ڪیر سمھی ٿو</I> <li>Spa: <I>quién duerme</I> <li>Swe: <I>vem som sover</I> <li>Tha: <I>ว่าใครนอนหลับ</I> <li>Urd: <I>كہ كون سوتا ہے</I> </ul> </div> </div></TD>+</TR>+<TR>+<TD><CODE>mkSC</CODE></TD>+<TD><A HREF="#VP" TITLE="VP - verb phrase">VP</A> <CODE>-></CODE> <A HREF="#SC" TITLE="SC - embedded sentence or question">SC</A></TD>+<TD><div class=reveal> <I>to sleep</I> <div class=popup> <ul> <li>API: <CODE>mkSC (mkVP sleep_V)</CODE> <li>Afr: <I>om te slaap</I> <li>Bul: <I>да спя</I> <li>Cat: <I>dormir</I> <li>Dan: <I>at sove</I> <li>Dut: <I>te slapen</I> <li>Eng: <I>to sleep</I> <li>Fin: <I>nukkua</I> <li>Fre: <I>dormir</I> <li>Ger: <I>zu schlafen</I> <li>Hin: <I>सोने</I> <li>Ita: <I>dormire</I> <li>Lav: <I>gulēt</I> <li>Nep: <I>सुत्न</I> <li>Nor: <I>å sove</I> <li>Pes: <I>خوابیدن</I> <li>Pnb: <I>سونا</I> <li>Pol: <I>spać</I> <li>Ron: <I>sã doarmă</I> <li>Rus: <I>спать</I> <li>Snd: <I>سمھڻ</I> <li>Spa: <I>dormir</I> <li>Swe: <I>att sova</I> <li>Tha: <I>นอนหลับ</I> <li>Urd: <I>سونے</I> </ul> </div> </div></TD>+</TR>+</TABLE>++<A NAME="SSlash"></A>+<H2>SSlash</H2>++<TABLE BORDER="1" CELLPADDING="4">+<TR>+<TH>Function</TH>+<TH>Type</TH>+<TH COLSPAN="2">Example</TH>+</TR>+<TR>+<TD><CODE>mkSSlash</CODE></TD>+<TD><A HREF="#Temp" TITLE="Temp - temporal and aspectual features">Temp</A> <CODE>-></CODE> <A HREF="#Pol" TITLE="Pol - polarity">Pol</A> <CODE>-></CODE> <A HREF="#ClSlash">ClSlash</A> <CODE>-></CODE> <A HREF="#SSlash">SSlash</A></TD>+<TD><div class=reveal> <I>she hadn't seen</I> <div class=popup> <ul> <li>API: <CODE>mkSSlash (mkTemp pastTense anteriorAnt) negativePol (mkClSlash she_NP (mkVPSlash see_V2))</CODE> <li>Afr: <I>sy het nie gesien nie</I> <li>Bul: <I>тя не беше видялa</I> <li>Cat: <I>ella no havia vist</I> <li>Dan: <I>hun havde ikke set</I> <li>Dut: <I>ze had niet gezien</I> <li>Eng: <I>she hadn't seen</I> <li>Fin: <I>hän ei ollut nähnyt</I> <li>Fre: <I>elle n' avait pas vu</I> <li>Ger: <I>sie hatte nicht gesehen</I> <li>Hin: <I>वह नहीं देख चुकी थी</I> <li>Ita: <I>lei non aveva visto</I> <li>Lav: <I>viņa nebija redzējusi</I> <li>Nep: <I>उनी हेरेकिथिइनन्</I> <li>Nor: <I>hun hadde ikke sett</I> <li>Pes: <I>او ندیده بود</I> <li>Pnb: <I>او نیں ویكھ گیی سی</I> <li>Pol: <I>nie zobaczyła ona</I> <li>Ron: <I>ea nu văzuse</I> <li>Rus: <I>она не видела</I> <li>Snd: <I>ھو۶ ڏسیل ن ھ۶ی</I> <li>Spa: <I>ella no había visto</I> <li>Swe: <I>hon hade inte sett</I> <li>Tha: <I>หล่อนไม่เห็น</I> <li>Urd: <I>وہ نہیں دیكھ چكی تھی</I> </ul> </div> </div></TD>+</TR>+</TABLE>++<A NAME="Sub100"></A>+<H2>Sub100</H2>++<TABLE BORDER="1" CELLPADDING="4">+<TR>+<TH>Function</TH>+<TH>Type</TH>+<TH COLSPAN="2">Example</TH>+</TR>+<TR>+<TD><CODE>mkSub100</CODE></TD>+<TD><A HREF="#Unit">Unit</A> <CODE>-></CODE> <A HREF="#Sub100">Sub100</A></TD>+<TD><div class=reveal> <I>eight</I> <div class=popup> <ul> <li>API: <CODE>mkSub100 n8_Unit</CODE> <li>Afr: <I>agt</I> <li>Bul: <I>осмина</I> <li>Cat: <I>vuit</I> <li>Dan: <I>otte</I> <li>Dut: <I>acht</I> <li>Eng: <I>eight</I> <li>Fin: <I>kahdeksan</I> <li>Fre: <I>huit</I> <li>Ger: <I>acht</I> <li>Hin: <I>आठ</I> <li>Ita: <I>otto</I> <li>Lav: <I>astoņi</I> <li>Nep: <I>आठ</I> <li>Nor: <I>åtte</I> <li>Pes: <I>هشت</I> <li>Pnb: <I>اٹھ</I> <li>Pol: <I>osiemm</I> <li>Ron: <I>opt</I> <li>Rus: <I>восемь</I> <li>Snd: <I>اٺ '</I> <li>Spa: <I>ocho</I> <li>Swe: <I>åtta</I> <li>Tha: <I>แปด</I> <li>Urd: <I>آٹھ</I> </ul> </div> </div></TD>+</TR>+<TR>+<TD><CODE>mkSub100</CODE></TD>+<TD><A HREF="#Unit">Unit</A> <CODE>-></CODE> <A HREF="#Unit">Unit</A> <CODE>-></CODE> <A HREF="#Sub100">Sub100</A></TD>+<TD><div class=reveal> <I>eighty - three</I> <div class=popup> <ul> <li>API: <CODE>mkSub100 n8_Unit n3_Unit</CODE> <li>Afr: <I>drieëntagtig</I> <li>Bul: <I>осемдесет и трима</I> <li>Cat: <I>vuitanta- tres</I> <li>Dan: <I>tre og firs</I> <li>Dut: <I>drieëntachtig</I> <li>Eng: <I>eighty - three</I> <li>Fin: <I>kahdeksankymmentäkolme</I> <li>Fre: <I>quatre-vingt - trois</I> <li>Ger: <I>dreiundachzig</I> <li>Hin: <I>तिरासी</I> <li>Ita: <I>ottantatre</I> <li>Lav: <I>{s : ResLav.CardOrd => ResLav.Gender => ResLav.Case => Str</I> <li>Nep: <I>त्रियासी</I> <li>Nor: <I>åtti tre</I> <li>Pes: <I>هشتاد و سه</I> <li>Pnb: <I>تیراسی</I> <li>Pol: <I>osiemdziesiąt trzy</I> <li>Ron: <I>optzeci şi trei</I> <li>Rus: <I>восемьдесят три</I> <li>Snd: <I>ٽیاسی</I> <li>Spa: <I>ochenta y tres</I> <li>Swe: <I>åttiotre</I> <li>Tha: <I>แปดสิบสาม</I> <li>Urd: <I>تراسی</I> </ul> </div> </div></TD>+</TR>+<TR>+<TD><CODE>tenfoldSub100</CODE></TD>+<TD><A HREF="#Unit">Unit</A> <CODE>-></CODE> <A HREF="#Sub100">Sub100</A></TD>+<TD><div class=reveal> <I>eight</I> <div class=popup> <ul> <li>API: <CODE>mkSub100 n8_Unit</CODE> <li>Afr: <I>agt</I> <li>Bul: <I>осмина</I> <li>Cat: <I>vuit</I> <li>Dan: <I>otte</I> <li>Dut: <I>acht</I> <li>Eng: <I>eight</I> <li>Fin: <I>kahdeksan</I> <li>Fre: <I>huit</I> <li>Ger: <I>acht</I> <li>Hin: <I>आठ</I> <li>Ita: <I>otto</I> <li>Lav: <I>astoņi</I> <li>Nep: <I>आठ</I> <li>Nor: <I>åtte</I> <li>Pes: <I>هشت</I> <li>Pnb: <I>اٹھ</I> <li>Pol: <I>osiemm</I> <li>Ron: <I>opt</I> <li>Rus: <I>восемь</I> <li>Snd: <I>اٺ '</I> <li>Spa: <I>ocho</I> <li>Swe: <I>åtta</I> <li>Tha: <I>แปด</I> <li>Urd: <I>آٹھ</I> </ul> </div> </div></TD>+</TR>+</TABLE>++<A NAME="Sub1000"></A>+<H2>Sub1000</H2>++<TABLE BORDER="1" CELLPADDING="4">+<TR>+<TH>Function</TH>+<TH>Type</TH>+<TH COLSPAN="2">Example</TH>+</TR>+<TR>+<TD><CODE>mkSub1000</CODE></TD>+<TD><A HREF="#Sub100">Sub100</A> <CODE>-></CODE> <A HREF="#Sub1000">Sub1000</A></TD>+<TD><div class=reveal> <I>ninety - nine</I> <div class=popup> <ul> <li>API: <CODE>mkNumeral (mkSub1000 (mkSub100 n9_Unit n9_Unit))</CODE> <li>Afr: <I>negeënnegentig</I> <li>Bul: <I>деветдесет и деветима</I> <li>Cat: <I>noranta- nou</I> <li>Dan: <I>ni og halvfems</I> <li>Dut: <I>negenennegentig</I> <li>Eng: <I>ninety - nine</I> <li>Fin: <I>yhdeksänkymmentäyhdeksän</I> <li>Fre: <I>quatre-vingt - dix-neuf</I> <li>Ger: <I>neunundneunzig</I> <li>Hin: <I>निन्यानवे</I> <li>Ita: <I>novantanove</I> <li>Lav: <I>deviņdesmit deviņi</I> <li>Nep: <I>उनान्सय</I> <li>Nor: <I>nitti ni</I> <li>Pes: <I>نود و نه</I> <li>Pnb: <I>نڑینوے</I> <li>Pol: <I>dziewięćdziesiąt dziewięć</I> <li>Ron: <I>nouăzeci şi nouă</I> <li>Rus: <I>девяносто девять</I> <li>Snd: <I>نوانوی</I> <li>Spa: <I>noventa y nueve</I> <li>Swe: <I>nittionio</I> <li>Tha: <I>เก้าสิบเก้า</I> <li>Urd: <I>ننانوے</I> </ul> </div> </div></TD>+</TR>+<TR>+<TD><CODE>mkSub1000</CODE></TD>+<TD><A HREF="#Unit">Unit</A> <CODE>-></CODE> <A HREF="#Sub1000">Sub1000</A></TD>+<TD><div class=reveal> <I>nine hundred</I> <div class=popup> <ul> <li>API: <CODE>mkNumeral (mkSub1000 n9_Unit)</CODE> <li>Afr: <I>negehonderd</I> <li>Bul: <I>деветстотин</I> <li>Cat: <I>nou -cents</I> <li>Dan: <I>ni hundrede</I> <li>Dut: <I>negenhonderd</I> <li>Eng: <I>nine hundred</I> <li>Fin: <I>yhdeksänsataa</I> <li>Fre: <I>neuf cents</I> <li>Ger: <I>neunhundert</I> <li>Hin: <I>नौ सौ</I> <li>Ita: <I>novecento</I> <li>Lav: <I>deviņi simti</I> <li>Nep: <I>नौ सय</I> <li>Nor: <I>ni hundre</I> <li>Pes: <I>نهصد</I> <li>Pnb: <I>نو سو</I> <li>Pol: <I>dziewięćset</I> <li>Ron: <I>nouă sute</I> <li>Rus: <I>девятьсот</I> <li>Snd: <I>نو سو</I> <li>Spa: <I>novecientos</I> <li>Swe: <I>niohundra</I> <li>Tha: <I>เก้าร้อย</I> <li>Urd: <I>نو سو</I> </ul> </div> </div></TD>+</TR>+<TR>+<TD><CODE>mkSub1000</CODE></TD>+<TD><A HREF="#Unit">Unit</A> <CODE>-></CODE> <A HREF="#Sub100">Sub100</A> <CODE>-></CODE> <A HREF="#Sub1000">Sub1000</A></TD>+<TD><div class=reveal> <I>nine hundred and ninety - nine</I> <div class=popup> <ul> <li>API: <CODE>mkNumeral (mkSub1000 n9_Unit (mkSub100 n9_Unit n9_Unit))</CODE> <li>Afr: <I>negehonderdnegeënnegentig</I> <li>Bul: <I>деветстотин деветдесет и деветима</I> <li>Cat: <I>nou -cents noranta- nou</I> <li>Dan: <I>ni hundrede og ni og halvfems</I> <li>Dut: <I>negenhonderdnegenennegentig</I> <li>Eng: <I>nine hundred and ninety - nine</I> <li>Fin: <I>yhdeksänsataayhdeksänkymmentäyhdeksän</I> <li>Fre: <I>neuf cent quatre-vingt - dix-neuf</I> <li>Ger: <I>neunhundertneunundneunzig</I> <li>Hin: <I>नौ सौ निन्यानवे</I> <li>Ita: <I>novecentonovantanove</I> <li>Lav: <I>deviņi simti deviņdesmit deviņi</I> <li>Nep: <I>नौ सय उनान्सय</I> <li>Nor: <I>ni hundre og nitti ni</I> <li>Pes: <I>نهصد و نود و نه</I> <li>Pnb: <I>نو سو نڑینوے</I> <li>Pol: <I>dziewięćset dziewięćdziesiąt dziewięć</I> <li>Ron: <I>nouă sute nouăzeci şi nouă</I> <li>Rus: <I>девятьсот девяносто девять</I> <li>Snd: <I>نو سو نوانوی</I> <li>Spa: <I>novecientos noventa y nueve</I> <li>Swe: <I>niohundra nittionio</I> <li>Tha: <I>เก้าร้อยเก้าสิบเก้า</I> <li>Urd: <I>نو سو ننانوے</I> </ul> </div> </div></TD>+</TR>+</TABLE>++<A NAME="Subj"></A>+<H2>Subj - subjunction</H2>++<TABLE BORDER="1" CELLPADDING="4">+<TR>+<TH>Function</TH>+<TH>Type</TH>+<TH COLSPAN="2">Example</TH>+</TR>+<TR>+<TD><CODE>although_Subj</CODE></TD>+<TD><A HREF="#Subj" TITLE="Subj - subjunction">Subj</A></TD>+<TD><div class=reveal> <I>although she sleeps</I> <div class=popup> <ul> <li>API: <CODE>mkAdv although_Subj (mkS (mkCl she_NP sleep_V))</CODE> <li>Afr: <I>hoewel sy slaap</I> <li>Bul: <I>въпреки че тя спи</I> <li>Cat: <I>encara que ella dormi</I> <li>Dan: <I>selv om hun sover</I> <li>Dut: <I>hoewel ze slaapt</I> <li>Eng: <I>although she sleeps</I> <li>Fin: <I>vaikka hän nukkuu</I> <li>Fre: <I>bien que</I> <li>Ger: <I>obwohl sie schläft</I> <li>Hin: <I>अगरचि वह सोती है</I> <li>Ita: <I>benché lei dorma</I> <li>Lav: <I>kaut arī viņa guļ</I> <li>Nep: <I>तैपनि उनी सुत्छिन्</I> <li>Nor: <I>selv om hun sover</I> <li>Pes: <I>با وجود این که او می خوابد</I> <li>Pnb: <I>پاویں او سوندی اے</I> <li>Pol: <I>pomimo ona śpi</I> <li>Ron: <I>deşi ea doarme</I> <li>Rus: <I>хотя она спдит</I> <li>Snd: <I>جیتوڻیڪ ھو۶ سمھی ٿی</I> <li>Spa: <I>benché ella duerma</I> <li>Swe: <I>fast hon sover</I> <li>Tha: <I>ถืงหล่อนนอนหลับ</I> <li>Urd: <I>اگرچہ وہ سوتی ہے</I> </ul> </div> </div></TD>+</TR>+<TR>+<TD><CODE>because_Subj</CODE></TD>+<TD><A HREF="#Subj" TITLE="Subj - subjunction">Subj</A></TD>+<TD><div class=reveal> <I>because she sleeps</I> <div class=popup> <ul> <li>API: <CODE>mkAdv because_Subj (mkS (mkCl she_NP sleep_V))</CODE> <li>Afr: <I>omdat sy slaap</I> <li>Bul: <I>защото тя спи</I> <li>Cat: <I>perque ella dorm</I> <li>Dan: <I>fordi hun sover</I> <li>Dut: <I>omdat ze slaapt</I> <li>Eng: <I>because she sleeps</I> <li>Fin: <I>koska hän nukkuu</I> <li>Fre: <I>parce que</I> <li>Ger: <I>weil sie schläft</I> <li>Hin: <I>क्योँकि वह सोती है</I> <li>Ita: <I>perché lei dorme</I> <li>Lav: <I>jo viņa guļ</I> <li>Nep: <I>किनभने उनी सुत्छिन्</I> <li>Nor: <I>fordi hun sover</I> <li>Pes: <I>برای این که او می خوابد</I> <li>Pnb: <I>كیونكھ او سوندی اے</I> <li>Pol: <I>ponieważ ona śpi</I> <li>Ron: <I>deoarece ea doarme</I> <li>Rus: <I>потому что она спдит</I> <li>Snd: <I>ڇاڪاڻ تی ھو۶ سمھی ٿی</I> <li>Spa: <I>porque ella duerme</I> <li>Swe: <I>eftersom hon sover</I> <li>Tha: <I>เพราะหล่อนนอนหลับ</I> <li>Urd: <I>كیونكہ وہ سوتی ہے</I> </ul> </div> </div></TD>+</TR>+<TR>+<TD><CODE>if_Subj</CODE></TD>+<TD><A HREF="#Subj" TITLE="Subj - subjunction">Subj</A></TD>+<TD><div class=reveal> <I>if she sleeps</I> <div class=popup> <ul> <li>API: <CODE>mkAdv if_Subj (mkS (mkCl she_NP sleep_V))</CODE> <li>Afr: <I>as sy slaap</I> <li>Bul: <I>ако тя спи</I> <li>Cat: <I>si ella dorm</I> <li>Dan: <I>hvis hun sover</I> <li>Dut: <I>als ze slaapt</I> <li>Eng: <I>if she sleeps</I> <li>Fin: <I>jos hän nukkuu</I> <li>Fre: <I>si elle dort</I> <li>Ger: <I>wenn sie schläft</I> <li>Hin: <I>अगर वह सोती है</I> <li>Ita: <I>se lei dorme</I> <li>Lav: <I>ja viņa guļ</I> <li>Nep: <I>यदि उनी सुत्छिन्</I> <li>Nor: <I>hvis hun sover</I> <li>Pes: <I>اگر که او می خوابد</I> <li>Pnb: <I>اگر او سوندی اے</I> <li>Pol: <I>jeśli ona śpi</I> <li>Ron: <I>dacă ea doarme</I> <li>Rus: <I>если она спдит</I> <li>Snd: <I>جیڪڏھن ھو۶ سمھی ٿی</I> <li>Spa: <I>si ella duerme</I> <li>Swe: <I>om hon sover</I> <li>Tha: <I>ถ้าหล่อนนอนหลับ</I> <li>Urd: <I>اگر وہ سوتی ہے</I> </ul> </div> </div></TD>+</TR>+<TR>+<TD><CODE>that_Subj</CODE></TD>+<TD><A HREF="#Subj" TITLE="Subj - subjunction">Subj</A></TD>+<TD><div class=reveal> <I>that she sleeps</I> <div class=popup> <ul> <li>API: <CODE>mkAdv that_Subj (mkS (mkCl she_NP sleep_V))</CODE> <li>Afr: <I>dat sy slaap</I> <li>Bul: <I>че тя спи</I> <li>Cat: <I>que ella dormi</I> <li>Dan: <I>constant not found: that_Subj</I> <li>Dut: <I>dat ze slaapt</I> <li>Eng: <I>that she sleeps</I> <li>Fin: <I>että hän nukkuu</I> <li>Fre: <I>qu' elle dorme</I> <li>Ger: <I>daß sie schläft</I> <li>Hin: <I>कि वह सोती है</I> <li>Ita: <I>che lei dorma</I> <li>Lav: <I>ka viņa guļ</I> <li>Nep: <I>त्यो उनी सुत्छिन्</I> <li>Nor: <I>constant not found: that_Subj</I> <li>Pes: <I>آن که او می خوابد</I> <li>Pnb: <I>كہ او سوندی اے</I> <li>Pol: <I>constant not found: that_Subj</I> <li>Ron: <I>că ea doarme</I> <li>Rus: <I>constant not found: that_Subj</I> <li>Snd: <I>اھا ھو۶ سمھی ٿی</I> <li>Spa: <I>que ella duerma</I> <li>Swe: <I>att hon sover</I> <li>Tha: <I>ว่าหล่อนนอนหลับ</I> <li>Urd: <I>كہ وہ سوتی ہے</I> </ul> </div> </div></TD>+</TR>+<TR>+<TD><CODE>when_Subj</CODE></TD>+<TD><A HREF="#Subj" TITLE="Subj - subjunction">Subj</A></TD>+<TD><div class=reveal> <I>when she sleeps</I> <div class=popup> <ul> <li>API: <CODE>mkAdv when_Subj (mkS (mkCl she_NP sleep_V))</CODE> <li>Afr: <I>as sy slaap</I> <li>Bul: <I>когато тя спи</I> <li>Cat: <I>quan ella dorm</I> <li>Dan: <I>når hun sover</I> <li>Dut: <I>als ze slaapt</I> <li>Eng: <I>when she sleeps</I> <li>Fin: <I>kun hän nukkuu</I> <li>Fre: <I>quand elle dort</I> <li>Ger: <I>wenn sie schläft</I> <li>Hin: <I>कब वह सोती है</I> <li>Ita: <I>quando lei dorme</I> <li>Lav: <I>kad viņa guļ</I> <li>Nep: <I>कहिले उनी सुत्छिन्</I> <li>Nor: <I>når hun sover</I> <li>Pes: <I>وقتی که او می خوابد</I> <li>Pnb: <I>كدوں او سوندی اے</I> <li>Pol: <I>jeśli ona śpi</I> <li>Ron: <I>când ea doarme</I> <li>Rus: <I>когда она спдит</I> <li>Snd: <I>جڏھن ھو۶ سمھی ٿی</I> <li>Spa: <I>cuando ella duerme</I> <li>Swe: <I>när hon sover</I> <li>Tha: <I>ทีหล่อนนอนหลับ</I> <li>Urd: <I>جب وہ سوتی ہے</I> </ul> </div> </div></TD>+</TR>+</TABLE>++<A NAME="Temp"></A>+<H2>Temp - temporal and aspectual features</H2>++<TABLE BORDER="1" CELLPADDING="4">+<TR>+<TH>Function</TH>+<TH>Type</TH>+<TH COLSPAN="2">Example</TH>+</TR>+<TR>+<TD><CODE>mkTemp</CODE></TD>+<TD><A HREF="#Tense" TITLE="Tense - tense">Tense</A> <CODE>-></CODE> <A HREF="#Ant" TITLE="Ant - anteriority">Ant</A> <CODE>-></CODE> <A HREF="#Temp" TITLE="Temp - temporal and aspectual features">Temp</A></TD>+<TD><I>e.g. past + anterior</I></TD>+</TR>+</TABLE>++<A NAME="Tense"></A>+<H2>Tense - tense</H2>++<TABLE BORDER="1" CELLPADDING="4">+<TR>+<TH>Function</TH>+<TH>Type</TH>+<TH COLSPAN="2">Example</TH>+</TR>+<TR>+<TD><CODE>conditionalTense</CODE></TD>+<TD><A HREF="#Tense" TITLE="Tense - tense">Tense</A></TD>+<TD><div class=reveal> <I>she would sleep</I> <div class=popup> <ul> <li>API: <CODE>mkS conditionalTense (mkCl she_NP sleep_V)</CODE> <li>Afr: <I>sy sou geslaap het</I> <li>Bul: <I>тя би спалa</I> <li>Cat: <I>ella dormiria</I> <li>Dan: <I>hun ville sove</I> <li>Dut: <I>ze zou geslapen hebben</I> <li>Eng: <I>she would sleep</I> <li>Fin: <I>hän nukkuisi</I> <li>Fre: <I>elle dormirait</I> <li>Ger: <I>sie würde schlafen</I> <li>Hin: <I>वह शायद सोए</I> <li>Ita: <I>lei dormirebbe</I> <li>Lav: <I>viņa gulētu</I> <li>Nep: <I>उनी सुत्नेछिन्</I> <li>Nor: <I>hun ville sove</I> <li>Pes: <I>او می خوابید</I> <li>Pnb: <I>او شاید سوئے</I> <li>Pol: <I>ona spałaby</I> <li>Ron: <I>ea ar dormi</I> <li>Rus: <I>она спала бы</I> <li>Snd: <I>ھو۶ شاید سمھندی</I> <li>Spa: <I>ella dormiría</I> <li>Swe: <I>hon skulle sova</I> <li>Tha: <I>หล่อนนอนหลับ</I> <li>Urd: <I>وہ شاید سوئے</I> </ul> </div> </div></TD>+</TR>+<TR>+<TD><CODE>futureTense</CODE></TD>+<TD><A HREF="#Tense" TITLE="Tense - tense">Tense</A></TD>+<TD><div class=reveal> <I>she will sleep</I> <div class=popup> <ul> <li>API: <CODE>mkS futureTense (mkCl she_NP sleep_V)</CODE> <li>Afr: <I>sy sal geslaap het</I> <li>Bul: <I>тя ще спи</I> <li>Cat: <I>ella dormirà</I> <li>Dan: <I>hun vil sove</I> <li>Dut: <I>ze zal geslapen hebben</I> <li>Eng: <I>she will sleep</I> <li>Fin: <I>hän nukkuu</I> <li>Fre: <I>elle dormira</I> <li>Ger: <I>sie wird schlafen</I> <li>Hin: <I>वह सोएगी</I> <li>Ita: <I>lei dormirà</I> <li>Lav: <I>viņa gulēs</I> <li>Nep: <I>उनी सुत्नेछिन्</I> <li>Nor: <I>hun vil sove</I> <li>Pes: <I>او خواهد خوابید</I> <li>Pnb: <I>او سوئے گی</I> <li>Pol: <I>ona będzie spała</I> <li>Ron: <I>ea va dormi</I> <li>Rus: <I>она будет спать</I> <li>Snd: <I>ھو۶ سمھندی ھوندی</I> <li>Spa: <I>ella dormirá</I> <li>Swe: <I>hon ska sova</I> <li>Tha: <I>หล่อนนอนหลับ</I> <li>Urd: <I>وہ سوئے گی</I> </ul> </div> </div></TD>+</TR>+<TR>+<TD><CODE>pastTense</CODE></TD>+<TD><A HREF="#Tense" TITLE="Tense - tense">Tense</A></TD>+<TD><div class=reveal> <I>she slept</I> <div class=popup> <ul> <li>API: <CODE>mkS pastTense (mkCl she_NP sleep_V)</CODE> <li>Afr: <I>sy slaap</I> <li>Bul: <I>тя спа</I> <li>Cat: <I>ella dormia</I> <li>Dan: <I>hun sov</I> <li>Dut: <I>ze sliep</I> <li>Eng: <I>she slept</I> <li>Fin: <I>hän nukkui</I> <li>Fre: <I>elle dormait</I> <li>Ger: <I>sie schlief</I> <li>Hin: <I>वह सोयी</I> <li>Ita: <I>lei dormiva</I> <li>Lav: <I>viņa gulēja</I> <li>Nep: <I>उनी सुतिन्</I> <li>Nor: <I>hun sov</I> <li>Pes: <I>او خوابید</I> <li>Pnb: <I>او سوئی</I> <li>Pol: <I>ona spała</I> <li>Ron: <I>ea a dormit</I> <li>Rus: <I>она спала</I> <li>Snd: <I>ھو۶ سمھیل ھ۶ی</I> <li>Spa: <I>ella dormía</I> <li>Swe: <I>hon sov</I> <li>Tha: <I>หล่อนนอนหลับ</I> <li>Urd: <I>وہ سوئی</I> </ul> </div> </div></TD>+</TR>+<TR>+<TD><CODE>presentTense</CODE></TD>+<TD><A HREF="#Tense" TITLE="Tense - tense">Tense</A></TD>+<TD><div class=reveal> <I>she sleeps</I> <div class=popup> <ul> <li>API: <CODE>mkS presentTense (mkCl she_NP sleep_V)</CODE> <li>Afr: <I>sy slaap</I> <li>Bul: <I>тя спи</I> <li>Cat: <I>ella dorm</I> <li>Dan: <I>hun sover</I> <li>Dut: <I>ze slaapt</I> <li>Eng: <I>she sleeps</I> <li>Fin: <I>hän nukkuu</I> <li>Fre: <I>elle dort</I> <li>Ger: <I>sie schläft</I> <li>Hin: <I>वह सोती है</I> <li>Ita: <I>lei dorme</I> <li>Lav: <I>viņa guļ</I> <li>Nep: <I>उनी सुत्छिन्</I> <li>Nor: <I>hun sover</I> <li>Pes: <I>او می خوابد</I> <li>Pnb: <I>او سوندی اے</I> <li>Pol: <I>ona śpi</I> <li>Ron: <I>ea doarme</I> <li>Rus: <I>она спдит</I> <li>Snd: <I>ھو۶ سمھی ٿی</I> <li>Spa: <I>ella duerme</I> <li>Swe: <I>hon sover</I> <li>Tha: <I>หล่อนนอนหลับ</I> <li>Urd: <I>وہ سوتی ہے</I> </ul> </div> </div></TD>+</TR>+</TABLE>++<A NAME="Text"></A>+<H2>Text - text consisting of several phrases</H2>++<TABLE BORDER="1" CELLPADDING="4">+<TR>+<TH>Function</TH>+<TH>Type</TH>+<TH COLSPAN="2">Example</TH>+</TR>+<TR>+<TD><CODE>emptyText</CODE></TD>+<TD><A HREF="#Text" TITLE="Text - text consisting of several phrases">Text</A></TD>+<TD><I>(empty text)</I></TD>+</TR>+<TR>+<TD><CODE>mkText</CODE></TD>+<TD><A HREF="#Phr" TITLE="Phr - phrase in a text">Phr</A> <CODE>-></CODE> (<A HREF="#Punct">Punct</A>) <CODE>-></CODE> (<A HREF="#Text" TITLE="Text - text consisting of several phrases">Text</A>) <CODE>-></CODE> <A HREF="#Text" TITLE="Text - text consisting of several phrases">Text</A></TD>+<TD><div class=reveal> <I>does she sleep ? yes .</I> <div class=popup> <ul> <li>API: <CODE>mkText (mkPhr (mkQS (mkCl she_NP sleep_V))) questMarkPunct (mkText (mkPhr yes_Utt) fullStopPunct)</CODE> <li>Afr: <I>slaap sy ? ja .</I> <li>Bul: <I>тя спи ли ? да .</I> <li>Cat: <I>ella dorm ? sí .</I> <li>Dan: <I>sover hun ? ja .</I> <li>Dut: <I>slaapt ze ? ja .</I> <li>Eng: <I>does she sleep ? yes .</I> <li>Fin: <I>nukkuuko hän ? kyllä .</I> <li>Fre: <I>elle dort ? oui .</I> <li>Ger: <I>schläft sie ? ja .</I> <li>Hin: <I>कया वह सोती है ? हाँ .</I> <li>Ita: <I>lei dorme ? sì .</I> <li>Lav: <I>vai viņa guļ ? jā .</I> <li>Nep: <I>के उनी सुत्छिन् ? हजुर .</I> <li>Nor: <I>sover hun ? ja .</I> <li>Pes: <I>آیا او می خوابد بله Û”</I> <li>Pnb: <I>كی او سوندی اے ? ہاں .</I> <li>Pol: <I>czy ona śpi ? tak .</I> <li>Ron: <I>ea doarme ? da .</I> <li>Rus: <I>она спдит ? Да .</I> <li>Snd: <I>ڇا ھو۶ سمھی ٿی ? ھا .</I> <li>Spa: <I>¿ ella duerme ? sí .</I> <li>Swe: <I>sover hon ? ja .</I> <li>Tha: <I>หล่อนนอนหลับไหมใช่</I> <li>Urd: <I>كیا وہ سوتی ہے ہاں</I> </ul> </div> </div></TD>+</TR>+<TR>+<TD><CODE>mkText</CODE></TD>+<TD><A HREF="#Utt" TITLE="Utt - sentence, question, word...">Utt</A> <CODE>-></CODE> <A HREF="#Text" TITLE="Text - text consisting of several phrases">Text</A></TD>+<TD><div class=reveal> <I>yes .</I> <div class=popup> <ul> <li>API: <CODE>mkText yes_Utt</CODE> <li>Afr: <I>ja .</I> <li>Bul: <I>да .</I> <li>Cat: <I>sí .</I> <li>Dan: <I>ja .</I> <li>Dut: <I>ja .</I> <li>Eng: <I>yes .</I> <li>Fin: <I>kyllä .</I> <li>Fre: <I>oui .</I> <li>Ger: <I>ja .</I> <li>Hin: <I>हाँ .</I> <li>Ita: <I>sì .</I> <li>Lav: <I>jā .</I> <li>Nep: <I>हजुर .</I> <li>Nor: <I>ja .</I> <li>Pes: <I>بله Û”</I> <li>Pnb: <I>ہاں .</I> <li>Pol: <I>tak .</I> <li>Ron: <I>da .</I> <li>Rus: <I>Да .</I> <li>Snd: <I>ھا .</I> <li>Spa: <I>sí .</I> <li>Swe: <I>ja .</I> <li>Tha: <I>ใช่</I> <li>Urd: <I>ہاں</I> </ul> </div> </div></TD>+</TR>+<TR>+<TD><CODE>mkText</CODE></TD>+<TD><A HREF="#S" TITLE="S - declarative sentence">S</A> <CODE>-></CODE> <A HREF="#Text" TITLE="Text - text consisting of several phrases">Text</A></TD>+<TD><div class=reveal> <I>she slept .</I> <div class=popup> <ul> <li>API: <CODE>mkText (mkS pastTense (mkCl she_NP sleep_V))</CODE> <li>Afr: <I>sy slaap .</I> <li>Bul: <I>тя спа .</I> <li>Cat: <I>ella dormia .</I> <li>Dan: <I>hun sov .</I> <li>Dut: <I>ze sliep .</I> <li>Eng: <I>she slept .</I> <li>Fin: <I>hän nukkui .</I> <li>Fre: <I>elle dormait .</I> <li>Ger: <I>sie schlief .</I> <li>Hin: <I>वह सोयी .</I> <li>Ita: <I>lei dormiva .</I> <li>Lav: <I>viņa gulēja .</I> <li>Nep: <I>उनी सुतिन् .</I> <li>Nor: <I>hun sov .</I> <li>Pes: <I>او خوابید Û”</I> <li>Pnb: <I>او سوئی .</I> <li>Pol: <I>ona spała .</I> <li>Ron: <I>ea a dormit .</I> <li>Rus: <I>она спала .</I> <li>Snd: <I>ھو۶ سمھیل ھ۶ی .</I> <li>Spa: <I>ella dormía .</I> <li>Swe: <I>hon sov .</I> <li>Tha: <I>หล่อนนอนหลับ</I> <li>Urd: <I>وہ سوئی</I> </ul> </div> </div></TD>+</TR>+<TR>+<TD><CODE>mkText</CODE></TD>+<TD><A HREF="#Cl" TITLE="Cl - declarative clause, with all tenses">Cl</A> <CODE>-></CODE> <A HREF="#Text" TITLE="Text - text consisting of several phrases">Text</A></TD>+<TD><div class=reveal> <I>she sleeps .</I> <div class=popup> <ul> <li>API: <CODE>mkText (mkCl she_NP sleep_V)</CODE> <li>Afr: <I>sy slaap .</I> <li>Bul: <I>тя спи .</I> <li>Cat: <I>ella dorm .</I> <li>Dan: <I>hun sover .</I> <li>Dut: <I>ze slaapt .</I> <li>Eng: <I>she sleeps .</I> <li>Fin: <I>hän nukkuu .</I> <li>Fre: <I>elle dort .</I> <li>Ger: <I>sie schläft .</I> <li>Hin: <I>वह सोती है .</I> <li>Ita: <I>lei dorme .</I> <li>Lav: <I>viņa guļ .</I> <li>Nep: <I>उनी सुत्छिन् .</I> <li>Nor: <I>hun sover .</I> <li>Pes: <I>او می خوابد Û”</I> <li>Pnb: <I>او سوندی اے .</I> <li>Pol: <I>ona śpi .</I> <li>Ron: <I>ea doarme .</I> <li>Rus: <I>она спдит .</I> <li>Snd: <I>ھو۶ سمھی ٿی .</I> <li>Spa: <I>ella duerme .</I> <li>Swe: <I>hon sover .</I> <li>Tha: <I>หล่อนนอนหลับ</I> <li>Urd: <I>وہ سوتی ہے</I> </ul> </div> </div></TD>+</TR>+<TR>+<TD><CODE>mkText</CODE></TD>+<TD><A HREF="#QS" TITLE="QS - question">QS</A> <CODE>-></CODE> <A HREF="#Text" TITLE="Text - text consisting of several phrases">Text</A></TD>+<TD><div class=reveal> <I>did she sleep ?</I> <div class=popup> <ul> <li>API: <CODE>mkText (mkQS pastTense (mkQCl (mkCl she_NP sleep_V)))</CODE> <li>Afr: <I>slaap sy ?</I> <li>Bul: <I>тя спа ли ?</I> <li>Cat: <I>ella dormia ?</I> <li>Dan: <I>sov hun ?</I> <li>Dut: <I>sliep ze ?</I> <li>Eng: <I>did she sleep ?</I> <li>Fin: <I>nukkuiko hän ?</I> <li>Fre: <I>elle dormait ?</I> <li>Ger: <I>schlief sie ?</I> <li>Hin: <I>कया वह सोयी ?</I> <li>Ita: <I>lei dormiva ?</I> <li>Lav: <I>vai viņa gulēja ?</I> <li>Nep: <I>के उनी सुतिन् ?</I> <li>Nor: <I>sov hun ?</I> <li>Pes: <I>آیا او خوابید</I> <li>Pnb: <I>كی او سوئی ?</I> <li>Pol: <I>czy ona spała ?</I> <li>Ron: <I>ea a dormit ?</I> <li>Rus: <I>она спала ?</I> <li>Snd: <I>ڇا ھو۶ سمھیل ھ۶ی ?</I> <li>Spa: <I>¿ ella dormía ?</I> <li>Swe: <I>sov hon ?</I> <li>Tha: <I>หล่อนนอนหลับไหม</I> <li>Urd: <I>كیا وہ سوئی</I> </ul> </div> </div></TD>+</TR>+<TR>+<TD><CODE>mkText</CODE></TD>+<TD>(<A HREF="#Pol" TITLE="Pol - polarity">Pol</A>) <CODE>-></CODE> <A HREF="#Imp" TITLE="Imp - imperative">Imp</A> <CODE>-></CODE> <A HREF="#Text" TITLE="Text - text consisting of several phrases">Text</A></TD>+<TD><div class=reveal> <I>don't sleep !</I> <div class=popup> <ul> <li>API: <CODE>mkText negativePol (mkImp sleep_V)</CODE> <li>Afr: <I>slaap nie !</I> <li>Bul: <I>не спи !</I> <li>Cat: <I>no dorm !</I> <li>Dan: <I>sov ikke !</I> <li>Dut: <I>slaap niet !</I> <li>Eng: <I>don't sleep !</I> <li>Fin: <I>älä nuku !</I> <li>Fre: <I>ne dors pas !</I> <li>Ger: <I>schlaf nicht !</I> <li>Hin: <I>मत सोना !</I> <li>Ita: <I>non dormire !</I> <li>Lav: <I>neguli !</I> <li>Nep: <I>नगर सुत् होउ !</I> <li>Nor: <I>sov ikke !</I> <li>Pes: <I>نخواب</I> <li>Pnb: <I>مت سونا !</I> <li>Pol: <I>nie śpij !</I> <li>Ron: <I>nu dormi !</I> <li>Rus: <I>не спи !</I> <li>Snd: <I>ن سمھ !</I> <li>Spa: <I>¡ no duerme !</I> <li>Swe: <I>sov inte !</I> <li>Tha: <I>อย่านอนหลับ</I> <li>Urd: <I>مت سونا</I> </ul> </div> </div></TD>+</TR>+<TR>+<TD><CODE>mkText</CODE></TD>+<TD><A HREF="#Text" TITLE="Text - text consisting of several phrases">Text</A> <CODE>-></CODE> <A HREF="#Text" TITLE="Text - text consisting of several phrases">Text</A> <CODE>-></CODE> <A HREF="#Text" TITLE="Text - text consisting of several phrases">Text</A></TD>+<TD><div class=reveal> <I>where ? here . when ? now !</I> <div class=popup> <ul> <li>API: <CODE>mkText (mkText (mkPhr (mkUtt where_IAdv)) questMarkPunct (mkText (mkPhr (mkUtt here_Adv)))) (mkText (mkPhr (mkUtt when_IAdv)) questMarkPunct (mkText (mkPhr (mkUtt now_Adv)) exclMarkPunct))</CODE> <li>Afr: <I>waar ? hier . wanneer ? nou !</I> <li>Bul: <I>къде ? тук . кога ? сега !</I> <li>Cat: <I>on ? aquí . quan ? ara !</I> <li>Dan: <I>hvor ? her . hvornår ? nu !</I> <li>Dut: <I>waar ? hier . wanneer ? nu !</I> <li>Eng: <I>where ? here . when ? now !</I> <li>Fin: <I>missä ? täällä . milloin ? nyt !</I> <li>Fre: <I>où ? ici . quand ? maintenant !</I> <li>Ger: <I>wo ? hier . wann ? jetzt !</I> <li>Hin: <I>कहाँ ? यहाँ . कब ? अब !</I> <li>Ita: <I>dove ? quà . quando ? adesso !</I> <li>Lav: <I>kur ? šeit . kad ? tagad !</I> <li>Nep: <I>कहाँ ? यहाँ . कहिले ? अहीले !</I> <li>Nor: <I>hvor ? her . når ? nå !</I> <li>Pes: <I>کجا اینجا Û” کی حالا</I> <li>Pnb: <I>كتھے ? ایتھے . كدوں ? ہون !</I> <li>Pol: <I>gdzie ? tutaj . kiedy ? teraz !</I> <li>Ron: <I>unde ? aici . când ? acum !</I> <li>Rus: <I>где ? здесь . когда ? сейчас !</I> <li>Snd: <I>ڪٿی ? ھتی . ڪڏھن ? ھاڻی !</I> <li>Spa: <I>¿ donde ? aquí . ¿ cuando ? ¡ ahora !</I> <li>Swe: <I>var ? här . när ? nu !</I> <li>Tha: <I>ที่ไหนที่นี่เมื่อไรเดี๋ยวนี้</I> <li>Urd: <I>كہاں یہاں كب اب</I> </ul> </div> </div></TD>+</TR>+</TABLE>++<A NAME="Unit"></A>+<H2>Unit</H2>++<TABLE BORDER="1" CELLPADDING="4">+<TR>+<TH>Function</TH>+<TH>Type</TH>+<TH COLSPAN="2">Example</TH>+</TR>+<TR>+<TD><CODE>n1_Unit</CODE></TD>+<TD><A HREF="#Unit">Unit</A></TD>+<TD><div class=reveal> <I>one</I> <div class=popup> <ul> <li>API: <CODE>mkNumeral n1_Unit</CODE> <li>Afr: <I>een</I> <li>Bul: <I>един</I> <li>Cat: <I>un</I> <li>Dan: <I>en</I> <li>Dut: <I>een</I> <li>Eng: <I>one</I> <li>Fin: <I>yksi</I> <li>Fre: <I>un</I> <li>Ger: <I>ein</I> <li>Hin: <I>एक</I> <li>Ita: <I>uno</I> <li>Lav: <I>viens</I> <li>Nep: <I>एक</I> <li>Nor: <I>en</I> <li>Pes: <I>یک</I> <li>Pnb: <I>اك</I> <li>Pol: <I>jeden</I> <li>Ron: <I>un</I> <li>Rus: <I>один</I> <li>Snd: <I>ھڪ</I> <li>Spa: <I>uno</I> <li>Swe: <I>en</I> <li>Tha: <I>หนึง</I> <li>Urd: <I>ایك</I> </ul> </div> </div></TD>+</TR>+<TR>+<TD><CODE>n2_Unit</CODE></TD>+<TD><A HREF="#Unit">Unit</A></TD>+<TD><div class=reveal> <I>two</I> <div class=popup> <ul> <li>API: <CODE>mkNumeral n2_Unit</CODE> <li>Afr: <I>twee</I> <li>Bul: <I>двама</I> <li>Cat: <I>dos</I> <li>Dan: <I>to</I> <li>Dut: <I>twee</I> <li>Eng: <I>two</I> <li>Fin: <I>kaksi</I> <li>Fre: <I>deux</I> <li>Ger: <I>zwei</I> <li>Hin: <I>दो</I> <li>Ita: <I>due</I> <li>Lav: <I>divi</I> <li>Nep: <I>दुई</I> <li>Nor: <I>to</I> <li>Pes: <I>دو</I> <li>Pnb: <I>دو</I> <li>Pol: <I>dwa</I> <li>Ron: <I>doi</I> <li>Rus: <I>двух</I> <li>Snd: <I>ٻ</I> <li>Spa: <I>dos</I> <li>Swe: <I>två</I> <li>Tha: <I>สอง</I> <li>Urd: <I>دو</I> </ul> </div> </div></TD>+</TR>+<TR>+<TD><CODE>n3_Unit</CODE></TD>+<TD><A HREF="#Unit">Unit</A></TD>+<TD><div class=reveal> <I>three</I> <div class=popup> <ul> <li>API: <CODE>mkNumeral n3_Unit</CODE> <li>Afr: <I>drie</I> <li>Bul: <I>трима</I> <li>Cat: <I>tres</I> <li>Dan: <I>tre</I> <li>Dut: <I>drie</I> <li>Eng: <I>three</I> <li>Fin: <I>kolme</I> <li>Fre: <I>trois</I> <li>Ger: <I>drei</I> <li>Hin: <I>तीन</I> <li>Ita: <I>tre</I> <li>Lav: <I>{s = table ResLav.CardOrd [table ResLav.Gender [table ResLav.Case ["trīs";</I> <li>Nep: <I>तीन</I> <li>Nor: <I>tre</I> <li>Pes: <I>سه</I> <li>Pnb: <I>تن</I> <li>Pol: <I>trzy</I> <li>Ron: <I>trei</I> <li>Rus: <I>три</I> <li>Snd: <I>ٽی</I> <li>Spa: <I>tres</I> <li>Swe: <I>tre</I> <li>Tha: <I>สาม</I> <li>Urd: <I>تین</I> </ul> </div> </div></TD>+</TR>+<TR>+<TD><CODE>n4_Unit</CODE></TD>+<TD><A HREF="#Unit">Unit</A></TD>+<TD><div class=reveal> <I>four</I> <div class=popup> <ul> <li>API: <CODE>mkNumeral n4_Unit</CODE> <li>Afr: <I>vier</I> <li>Bul: <I>четирима</I> <li>Cat: <I>quatre</I> <li>Dan: <I>fire</I> <li>Dut: <I>vier</I> <li>Eng: <I>four</I> <li>Fin: <I>neljä</I> <li>Fre: <I>quatre</I> <li>Ger: <I>vier</I> <li>Hin: <I>चार</I> <li>Ita: <I>quattro</I> <li>Lav: <I>četri</I> <li>Nep: <I>चार</I> <li>Nor: <I>fire</I> <li>Pes: <I>چهار</I> <li>Pnb: <I>چار</I> <li>Pol: <I>cztery</I> <li>Ron: <I>patru</I> <li>Rus: <I>четыре</I> <li>Snd: <I>چار</I> <li>Spa: <I>cuatro</I> <li>Swe: <I>fyra</I> <li>Tha: <I>สี่</I> <li>Urd: <I>چار</I> </ul> </div> </div></TD>+</TR>+<TR>+<TD><CODE>n5_Unit</CODE></TD>+<TD><A HREF="#Unit">Unit</A></TD>+<TD><div class=reveal> <I>five</I> <div class=popup> <ul> <li>API: <CODE>mkNumeral n5_Unit</CODE> <li>Afr: <I>vyf</I> <li>Bul: <I>петима</I> <li>Cat: <I>cinc</I> <li>Dan: <I>fem</I> <li>Dut: <I>vijf</I> <li>Eng: <I>five</I> <li>Fin: <I>viisi</I> <li>Fre: <I>cinq</I> <li>Ger: <I>fünf</I> <li>Hin: <I>पांच</I> <li>Ita: <I>cinque</I> <li>Lav: <I>pieci</I> <li>Nep: <I>पाँच</I> <li>Nor: <I>fem</I> <li>Pes: <I>پنج</I> <li>Pnb: <I>پنج</I> <li>Pol: <I>pięć</I> <li>Ron: <I>cinci</I> <li>Rus: <I>пять</I> <li>Snd: <I>پنج</I> <li>Spa: <I>cinco</I> <li>Swe: <I>fem</I> <li>Tha: <I>ห้า</I> <li>Urd: <I>پانچ</I> </ul> </div> </div></TD>+</TR>+<TR>+<TD><CODE>n6_Unit</CODE></TD>+<TD><A HREF="#Unit">Unit</A></TD>+<TD><div class=reveal> <I>six</I> <div class=popup> <ul> <li>API: <CODE>mkNumeral n6_Unit</CODE> <li>Afr: <I>ses</I> <li>Bul: <I>шестима</I> <li>Cat: <I>sis</I> <li>Dan: <I>seks</I> <li>Dut: <I>zes</I> <li>Eng: <I>six</I> <li>Fin: <I>kuusi</I> <li>Fre: <I>six</I> <li>Ger: <I>sechs</I> <li>Hin: <I>छे</I> <li>Ita: <I>sei</I> <li>Lav: <I>seši</I> <li>Nep: <I>छ</I> <li>Nor: <I>seks</I> <li>Pes: <I>شش</I> <li>Pnb: <I>چھ</I> <li>Pol: <I>sześć</I> <li>Ron: <I>şase</I> <li>Rus: <I>шесть</I> <li>Snd: <I>ڇھ</I> <li>Spa: <I>seis</I> <li>Swe: <I>sex</I> <li>Tha: <I>หก</I> <li>Urd: <I>چھ</I> </ul> </div> </div></TD>+</TR>+<TR>+<TD><CODE>n7_Unit</CODE></TD>+<TD><A HREF="#Unit">Unit</A></TD>+<TD><div class=reveal> <I>seven</I> <div class=popup> <ul> <li>API: <CODE>mkNumeral n7_Unit</CODE> <li>Afr: <I>seven</I> <li>Bul: <I>седмина</I> <li>Cat: <I>set</I> <li>Dan: <I>syv</I> <li>Dut: <I>zeven</I> <li>Eng: <I>seven</I> <li>Fin: <I>seitsemän</I> <li>Fre: <I>sept</I> <li>Ger: <I>sieben</I> <li>Hin: <I>सात</I> <li>Ita: <I>sette</I> <li>Lav: <I>septiņi</I> <li>Nep: <I>सात</I> <li>Nor: <I>sju</I> <li>Pes: <I>هفت</I> <li>Pnb: <I>ست</I> <li>Pol: <I>siedem</I> <li>Ron: <I>şapte</I> <li>Rus: <I>семь</I> <li>Snd: <I>ست</I> <li>Spa: <I>siete</I> <li>Swe: <I>sju</I> <li>Tha: <I>เจ็ด</I> <li>Urd: <I>سات</I> </ul> </div> </div></TD>+</TR>+<TR>+<TD><CODE>n8_Unit</CODE></TD>+<TD><A HREF="#Unit">Unit</A></TD>+<TD><div class=reveal> <I>eight</I> <div class=popup> <ul> <li>API: <CODE>mkNumeral n8_Unit</CODE> <li>Afr: <I>agt</I> <li>Bul: <I>осмина</I> <li>Cat: <I>vuit</I> <li>Dan: <I>otte</I> <li>Dut: <I>acht</I> <li>Eng: <I>eight</I> <li>Fin: <I>kahdeksan</I> <li>Fre: <I>huit</I> <li>Ger: <I>acht</I> <li>Hin: <I>आठ</I> <li>Ita: <I>otto</I> <li>Lav: <I>astoņi</I> <li>Nep: <I>आठ</I> <li>Nor: <I>åtte</I> <li>Pes: <I>هشت</I> <li>Pnb: <I>اٹھ</I> <li>Pol: <I>osiemm</I> <li>Ron: <I>opt</I> <li>Rus: <I>восемь</I> <li>Snd: <I>اٺ '</I> <li>Spa: <I>ocho</I> <li>Swe: <I>åtta</I> <li>Tha: <I>แปด</I> <li>Urd: <I>آٹھ</I> </ul> </div> </div></TD>+</TR>+<TR>+<TD><CODE>n9_Unit</CODE></TD>+<TD><A HREF="#Unit">Unit</A></TD>+<TD><div class=reveal> <I>nine</I> <div class=popup> <ul> <li>API: <CODE>mkNumeral n9_Unit</CODE> <li>Afr: <I>nege</I> <li>Bul: <I>деветима</I> <li>Cat: <I>nou</I> <li>Dan: <I>ni</I> <li>Dut: <I>negen</I> <li>Eng: <I>nine</I> <li>Fin: <I>yhdeksän</I> <li>Fre: <I>neuf</I> <li>Ger: <I>neun</I> <li>Hin: <I>नौ</I> <li>Ita: <I>nove</I> <li>Lav: <I>deviņi</I> <li>Nep: <I>नौ</I> <li>Nor: <I>ni</I> <li>Pes: <I>نه</I> <li>Pnb: <I>نو</I> <li>Pol: <I>dziewięć</I> <li>Ron: <I>nouă</I> <li>Rus: <I>девять</I> <li>Snd: <I>نو</I> <li>Spa: <I>nueve</I> <li>Swe: <I>nio</I> <li>Tha: <I>เก้า</I> <li>Urd: <I>نو</I> </ul> </div> </div></TD>+</TR>+</TABLE>++<A NAME="Utt"></A>+<H2>Utt - sentence, question, word...</H2>++<TABLE BORDER="1" CELLPADDING="4">+<TR>+<TH>Function</TH>+<TH>Type</TH>+<TH COLSPAN="2">Example</TH>+</TR>+<TR>+<TD><CODE>lets_Utt</CODE></TD>+<TD><A HREF="#VP" TITLE="VP - verb phrase">VP</A> <CODE>-></CODE> <A HREF="#Utt" TITLE="Utt - sentence, question, word...">Utt</A></TD>+<TD><div class=reveal> <I>let's sleep</I> <div class=popup> <ul> <li>API: <CODE>mkPhr (lets_Utt (mkVP sleep_V))</CODE> <li>Afr: <I>laat ons te slaap</I> <li>Bul: <I>нека да спим</I> <li>Cat: <I>dormim</I> <li>Dan: <I>lad os sove</I> <li>Dut: <I>laten we slapen</I> <li>Eng: <I>let's sleep</I> <li>Fin: <I>nukutaan</I> <li>Fre: <I>dormons</I> <li>Ger: <I>schlafen wir</I> <li>Hin: <I>आओ सोएँ</I> <li>Ita: <I>dormiamo</I> <li>Lav: <I>{s : Str = "guļam"; lock_Phr : {} = <>} / {s : Str = "gulēsim";</I> <li>Nep: <I>सुतौँ</I> <li>Nor: <I>lat oss sove</I> <li>Pes: <I>بیایید بخوابیم</I> <li>Pnb: <I>آو سون</I> <li>Pol: <I>śpijmy</I> <li>Ron: <I>sã dormim</I> <li>Rus: <I>давайте будем спать</I> <li>Snd: <I>اچ سمھون</I> <li>Spa: <I>durmamos</I> <li>Swe: <I>låt oss sova</I> <li>Tha: <I>นอนหลับ</I> <li>Urd: <I>آو سوئیں</I> </ul> </div> </div></TD>+</TR>+<TR>+<TD><CODE>mkUtt</CODE></TD>+<TD><A HREF="#S" TITLE="S - declarative sentence">S</A> <CODE>-></CODE> <A HREF="#Utt" TITLE="Utt - sentence, question, word...">Utt</A></TD>+<TD><div class=reveal> <I>she slept</I> <div class=popup> <ul> <li>API: <CODE>mkUtt (mkS pastTense (mkCl she_NP sleep_V))</CODE> <li>Afr: <I>sy slaap</I> <li>Bul: <I>тя спа</I> <li>Cat: <I>ella dormia</I> <li>Dan: <I>hun sov</I> <li>Dut: <I>ze sliep</I> <li>Eng: <I>she slept</I> <li>Fin: <I>hän nukkui</I> <li>Fre: <I>elle dormait</I> <li>Ger: <I>sie schlief</I> <li>Hin: <I>वह सोयी</I> <li>Ita: <I>lei dormiva</I> <li>Lav: <I>viņa gulēja</I> <li>Nep: <I>उनी सुतिन्</I> <li>Nor: <I>hun sov</I> <li>Pes: <I>او خوابید</I> <li>Pnb: <I>او سوئی</I> <li>Pol: <I>ona spała</I> <li>Ron: <I>ea a dormit</I> <li>Rus: <I>она спала</I> <li>Snd: <I>ھو۶ سمھیل ھ۶ی</I> <li>Spa: <I>ella dormía</I> <li>Swe: <I>hon sov</I> <li>Tha: <I>หล่อนนอนหลับ</I> <li>Urd: <I>وہ سوئی</I> </ul> </div> </div></TD>+</TR>+<TR>+<TD><CODE>mkUtt</CODE></TD>+<TD><A HREF="#Cl" TITLE="Cl - declarative clause, with all tenses">Cl</A> <CODE>-></CODE> <A HREF="#Utt" TITLE="Utt - sentence, question, word...">Utt</A></TD>+<TD><div class=reveal> <I>she sleeps</I> <div class=popup> <ul> <li>API: <CODE>mkUtt (mkCl she_NP sleep_V)</CODE> <li>Afr: <I>sy slaap</I> <li>Bul: <I>тя спи</I> <li>Cat: <I>ella dorm</I> <li>Dan: <I>hun sover</I> <li>Dut: <I>ze slaapt</I> <li>Eng: <I>she sleeps</I> <li>Fin: <I>hän nukkuu</I> <li>Fre: <I>elle dort</I> <li>Ger: <I>sie schläft</I> <li>Hin: <I>वह सोती है</I> <li>Ita: <I>lei dorme</I> <li>Lav: <I>viņa guļ</I> <li>Nep: <I>उनी सुत्छिन्</I> <li>Nor: <I>hun sover</I> <li>Pes: <I>او می خوابد</I> <li>Pnb: <I>او سوندی اے</I> <li>Pol: <I>ona śpi</I> <li>Ron: <I>ea doarme</I> <li>Rus: <I>она спдит</I> <li>Snd: <I>ھو۶ سمھی ٿی</I> <li>Spa: <I>ella duerme</I> <li>Swe: <I>hon sover</I> <li>Tha: <I>หล่อนนอนหลับ</I> <li>Urd: <I>وہ سوتی ہے</I> </ul> </div> </div></TD>+</TR>+<TR>+<TD><CODE>mkUtt</CODE></TD>+<TD><A HREF="#QS" TITLE="QS - question">QS</A> <CODE>-></CODE> <A HREF="#Utt" TITLE="Utt - sentence, question, word...">Utt</A></TD>+<TD><div class=reveal> <I>who didn't sleep</I> <div class=popup> <ul> <li>API: <CODE>mkUtt (mkQS pastTense negativePol (mkQCl who_IP sleep_V))</CODE> <li>Afr: <I>wie slaap nie nie</I> <li>Bul: <I>кой не спа</I> <li>Cat: <I>qui no dormia</I> <li>Dan: <I>hvem sov ikke</I> <li>Dut: <I>wie sliep niet</I> <li>Eng: <I>who didn't sleep</I> <li>Fin: <I>kuka ei nukkunut</I> <li>Fre: <I>qui ne dormait pas</I> <li>Ger: <I>wer schlief nicht</I> <li>Hin: <I>कौन नहीं सोया</I> <li>Ita: <I>chi non dormiva</I> <li>Lav: <I>kurš negulēja</I> <li>Nep: <I>को सुतेनन्</I> <li>Nor: <I>hvem sov ikke</I> <li>Pes: <I>چه کسی نخوابید</I> <li>Pnb: <I>كون نیں سویا</I> <li>Pol: <I>kto nie spał</I> <li>Ron: <I>cine nu a dormit</I> <li>Rus: <I>кто спал</I> <li>Snd: <I>ڪیر سمھیل ن اھی</I> <li>Spa: <I>quién no dormía</I> <li>Swe: <I>vem sov inte</I> <li>Tha: <I>ใครนอนไม่หลับ</I> <li>Urd: <I>كون نہیں سویا</I> </ul> </div> </div></TD>+</TR>+<TR>+<TD><CODE>mkUtt</CODE></TD>+<TD><A HREF="#QCl" TITLE="QCl - question clause, with all tenses">QCl</A> <CODE>-></CODE> <A HREF="#Utt" TITLE="Utt - sentence, question, word...">Utt</A></TD>+<TD><div class=reveal> <I>who sleeps</I> <div class=popup> <ul> <li>API: <CODE>mkUtt (mkQCl who_IP sleep_V)</CODE> <li>Afr: <I>wie slaap</I> <li>Bul: <I>кой спи</I> <li>Cat: <I>qui dorm</I> <li>Dan: <I>hvem sover</I> <li>Dut: <I>wie slaapt</I> <li>Eng: <I>who sleeps</I> <li>Fin: <I>kuka nukkuu</I> <li>Fre: <I>qui dort</I> <li>Ger: <I>wer schläft</I> <li>Hin: <I>कौन सोता है</I> <li>Ita: <I>chi dorme</I> <li>Lav: <I>kurš guļ</I> <li>Nep: <I>को सुत्छन्</I> <li>Nor: <I>hvem sover</I> <li>Pes: <I>چه کسی می خوابد</I> <li>Pnb: <I>كون سوندا اے</I> <li>Pol: <I>kto śpi</I> <li>Ron: <I>cine doarme</I> <li>Rus: <I>кто спдит</I> <li>Snd: <I>ڪیر سمھی ٿو</I> <li>Spa: <I>quién duerme</I> <li>Swe: <I>vem sover</I> <li>Tha: <I>ใครนอนหลับ</I> <li>Urd: <I>كون سوتا ہے</I> </ul> </div> </div></TD>+</TR>+<TR>+<TD><CODE>mkUtt</CODE></TD>+<TD>(<A HREF="#ImpForm">ImpForm</A>) <CODE>-></CODE> (<A HREF="#Pol" TITLE="Pol - polarity">Pol</A>) <CODE>-></CODE> <A HREF="#Imp" TITLE="Imp - imperative">Imp</A> <CODE>-></CODE> <A HREF="#Utt" TITLE="Utt - sentence, question, word...">Utt</A></TD>+<TD><div class=reveal> <I>don't be men</I> <div class=popup> <ul> <li>API: <CODE>mkUtt pluralImpForm negativePol (mkImp (mkVP man_N))</CODE> <li>Afr: <I>wees mans nie</I> <li>Bul: <I>не бъдете мъже</I> <li>Cat: <I>no sigueu homes</I> <li>Dan: <I>var ikke mænd</I> <li>Dut: <I>wezen niet mannen</I> <li>Eng: <I>don't be men</I> <li>Fin: <I>älkää olko miehiä</I> <li>Fre: <I>ne soyez pas des hommes</I> <li>Ger: <I>seid nicht Männer</I> <li>Hin: <I>मत आदमी</I> <li>Ita: <I>non siate uomini</I> <li>Lav: <I>nebijiet vīrieši</I> <li>Nep: <I>नगर मान्छेहरु हऔ</I> <li>Nor: <I>var ikke menn</I> <li>Pes: <I>مردان</I> <li>Pnb: <I>مت بندے</I> <li>Pol: <I>nie bądźcie mężczyzna</I> <li>Ron: <I>nu sunteţi oameni</I> <li>Rus: <I>не будьте человеками</I> <li>Snd: <I>ن ماڻھو</I> <li>Spa: <I>no sed hombres</I> <li>Swe: <I>var inte män</I> <li>Tha: <I>อย่าเป็นชาย</I> <li>Urd: <I>مت آدمی</I> </ul> </div> </div></TD>+</TR>+<TR>+<TD><CODE>mkUtt</CODE></TD>+<TD><A HREF="#IP" TITLE="IP - interrogative pronoun">IP</A> <CODE>-></CODE> <A HREF="#Utt" TITLE="Utt - sentence, question, word...">Utt</A></TD>+<TD><div class=reveal> <I>who</I> <div class=popup> <ul> <li>API: <CODE>mkUtt who_IP</CODE> <li>Afr: <I>wie</I> <li>Bul: <I>кой</I> <li>Cat: <I>qui</I> <li>Dan: <I>hvem</I> <li>Dut: <I>wie</I> <li>Eng: <I>who</I> <li>Fin: <I>kuka</I> <li>Fre: <I>qui</I> <li>Ger: <I>wer</I> <li>Hin: <I>कौन</I> <li>Ita: <I>chi</I> <li>Lav: <I>kurš</I> <li>Nep: <I>को</I> <li>Nor: <I>hvem</I> <li>Pes: <I>چه کسی</I> <li>Pnb: <I>كون</I> <li>Pol: <I>kto</I> <li>Ron: <I>cine</I> <li>Rus: <I>кто</I> <li>Snd: <I>ڪیر</I> <li>Spa: <I>quién</I> <li>Swe: <I>vem</I> <li>Tha: <I>ใคร</I> <li>Urd: <I>كون</I> </ul> </div> </div></TD>+</TR>+<TR>+<TD><CODE>mkUtt</CODE></TD>+<TD><A HREF="#IAdv" TITLE="IAdv - interrogative adverb">IAdv</A> <CODE>-></CODE> <A HREF="#Utt" TITLE="Utt - sentence, question, word...">Utt</A></TD>+<TD><div class=reveal> <I>why</I> <div class=popup> <ul> <li>API: <CODE>mkUtt why_IAdv</CODE> <li>Afr: <I>waarom</I> <li>Bul: <I>защо</I> <li>Cat: <I>per quË</I> <li>Dan: <I>hvorfor</I> <li>Dut: <I>waarom</I> <li>Eng: <I>why</I> <li>Fin: <I>miksi</I> <li>Fre: <I>pourquoi</I> <li>Ger: <I>warum</I> <li>Hin: <I>क्यों</I> <li>Ita: <I>perché</I> <li>Lav: <I>kāpēc</I> <li>Nep: <I>किन</I> <li>Nor: <I>hvorfor</I> <li>Pes: <I>چرا</I> <li>Pnb: <I>كیوں</I> <li>Pol: <I>dlaczego</I> <li>Ron: <I>de ce</I> <li>Rus: <I>почему</I> <li>Snd: <I>ڇو</I> <li>Spa: <I>porqué</I> <li>Swe: <I>varför</I> <li>Tha: <I>ทำไม</I> <li>Urd: <I>كیوں</I> </ul> </div> </div></TD>+</TR>+<TR>+<TD><CODE>mkUtt</CODE></TD>+<TD><A HREF="#NP" TITLE="NP - noun phrase (subject or object)">NP</A> <CODE>-></CODE> <A HREF="#Utt" TITLE="Utt - sentence, question, word...">Utt</A></TD>+<TD><div class=reveal> <I>this man</I> <div class=popup> <ul> <li>API: <CODE>mkUtt (mkNP this_Det man_N)</CODE> <li>Afr: <I>hierdie man</I> <li>Bul: <I>този мъж</I> <li>Cat: <I>aquest home</I> <li>Dan: <I>denne mand</I> <li>Dut: <I>deze man</I> <li>Eng: <I>this man</I> <li>Fin: <I>tämä mies</I> <li>Fre: <I>cet homme</I> <li>Ger: <I>dieser Mann</I> <li>Hin: <I>यह आदमी</I> <li>Ita: <I>questo uomo</I> <li>Lav: <I>šis vīrietis</I> <li>Nep: <I>यो मान्छे</I> <li>Nor: <I>denne mannen</I> <li>Pes: <I>این مرد</I> <li>Pnb: <I>اے بندہ</I> <li>Pol: <I>ten mężczyzna</I> <li>Ron: <I>acest om</I> <li>Rus: <I>этот человек</I> <li>Snd: <I>ھی ماڻھو</I> <li>Spa: <I>este hombre</I> <li>Swe: <I>den här mannen</I> <li>Tha: <I>ชายคนนี้</I> <li>Urd: <I>یہ آدمی</I> </ul> </div> </div></TD>+</TR>+<TR>+<TD><CODE>mkUtt</CODE></TD>+<TD><A HREF="#Adv" TITLE="Adv - verb-phrase-modifying adverb">Adv</A> <CODE>-></CODE> <A HREF="#Utt" TITLE="Utt - sentence, question, word...">Utt</A></TD>+<TD><div class=reveal> <I>here</I> <div class=popup> <ul> <li>API: <CODE>mkUtt here_Adv</CODE> <li>Afr: <I>hier</I> <li>Bul: <I>тук</I> <li>Cat: <I>aquí</I> <li>Dan: <I>her</I> <li>Dut: <I>hier</I> <li>Eng: <I>here</I> <li>Fin: <I>täällä</I> <li>Fre: <I>ici</I> <li>Ger: <I>hier</I> <li>Hin: <I>यहाँ</I> <li>Ita: <I>quà</I> <li>Lav: <I>šeit</I> <li>Nep: <I>यहाँ</I> <li>Nor: <I>her</I> <li>Pes: <I>اینجا</I> <li>Pnb: <I>ایتھے</I> <li>Pol: <I>tutaj</I> <li>Ron: <I>aici</I> <li>Rus: <I>здесь</I> <li>Snd: <I>ھتی</I> <li>Spa: <I>aquí</I> <li>Swe: <I>här</I> <li>Tha: <I>ที่นี่</I> <li>Urd: <I>یہاں</I> </ul> </div> </div></TD>+</TR>+<TR>+<TD><CODE>mkUtt</CODE></TD>+<TD><A HREF="#VP" TITLE="VP - verb phrase">VP</A> <CODE>-></CODE> <A HREF="#Utt" TITLE="Utt - sentence, question, word...">Utt</A></TD>+<TD><div class=reveal> <I>to sleep</I> <div class=popup> <ul> <li>API: <CODE>mkUtt (mkVP sleep_V)</CODE> <li>Afr: <I>te slaap</I> <li>Bul: <I>да спи</I> <li>Cat: <I>dormir</I> <li>Dan: <I>at sove</I> <li>Dut: <I>slapen</I> <li>Eng: <I>to sleep</I> <li>Fin: <I>nukkua</I> <li>Fre: <I>dormir</I> <li>Ger: <I>schlafen</I> <li>Hin: <I>सोना</I> <li>Ita: <I>dormire</I> <li>Lav: <I>gulēt</I> <li>Nep: <I>सुत्नु</I> <li>Nor: <I>å sove</I> <li>Pes: <I>خوابیدن</I> <li>Pnb: <I>سونا</I> <li>Pol: <I>spać</I> <li>Ron: <I>sã doarmă</I> <li>Rus: <I>спать</I> <li>Snd: <I>سمھڻ</I> <li>Spa: <I>dormir</I> <li>Swe: <I>att sova</I> <li>Tha: <I>นอนหลับ</I> <li>Urd: <I>سونا</I> </ul> </div> </div></TD>+</TR>+<TR>+<TD><CODE>mkUtt</CODE></TD>+<TD><A HREF="#CN" TITLE="CN - common noun (without determiner)">CN</A> <CODE>-></CODE> <A HREF="#Utt" TITLE="Utt - sentence, question, word...">Utt</A></TD>+<TD><div class=reveal> <I>beer</I> <div class=popup> <ul> <li>API: <CODE>mkUtt (mkCN beer_N)</CODE> <li>Afr: <I>bier</I> <li>Bul: <I>бира</I> <li>Cat: <I>cervesa</I> <li>Dan: <I>øl</I> <li>Dut: <I>bier</I> <li>Eng: <I>beer</I> <li>Fin: <I>olut</I> <li>Fre: <I>bière</I> <li>Ger: <I>Bier</I> <li>Hin: <I>बियर</I> <li>Ita: <I>birra</I> <li>Lav: <I>alus</I> <li>Nep: <I>बियर</I> <li>Nor: <I>øl</I> <li>Pes: <I>آبجو</I> <li>Pnb: <I>شراب</I> <li>Pol: <I>piwo</I> <li>Ron: <I>bere</I> <li>Rus: <I>пиво</I> <li>Snd: <I>شراب</I> <li>Spa: <I>cerveza</I> <li>Swe: <I>öl</I> <li>Tha: <I>เบียร์</I> <li>Urd: <I>بییر</I> </ul> </div> </div></TD>+</TR>+<TR>+<TD><CODE>mkUtt</CODE></TD>+<TD><A HREF="#AP" TITLE="AP - adjectival phrase">AP</A> <CODE>-></CODE> <A HREF="#Utt" TITLE="Utt - sentence, question, word...">Utt</A></TD>+<TD><div class=reveal> <I>good</I> <div class=popup> <ul> <li>API: <CODE>mkUtt (mkAP good_A)</CODE> <li>Afr: <I>goed</I> <li>Bul: <I>добър</I> <li>Cat: <I>bo</I> <li>Dan: <I>god</I> <li>Dut: <I>goed</I> <li>Eng: <I>good</I> <li>Fin: <I>hyvä</I> <li>Fre: <I>bon</I> <li>Ger: <I>gut</I> <li>Hin: <I>अच्छा</I> <li>Ita: <I>buono</I> <li>Lav: <I>labs</I> <li>Nep: <I>राम्रो</I> <li>Nor: <I>god</I> <li>Pes: <I>خوب</I> <li>Pnb: <I>اچھا</I> <li>Pol: <I>dobry</I> <li>Ron: <I>bun</I> <li>Rus: <I>хорошее</I> <li>Snd: <I>سٺو</I> <li>Spa: <I>bueno</I> <li>Swe: <I>god</I> <li>Tha: <I>ดี</I> <li>Urd: <I>اچھا</I> </ul> </div> </div></TD>+</TR>+<TR>+<TD><CODE>mkUtt</CODE></TD>+<TD><A HREF="#Card" TITLE="Card - cardinal number">Card</A> <CODE>-></CODE> <A HREF="#Utt" TITLE="Utt - sentence, question, word...">Utt</A></TD>+<TD><div class=reveal> <I>five</I> <div class=popup> <ul> <li>API: <CODE>mkUtt (mkCard (mkNumeral n5_Unit))</CODE> <li>Afr: <I>vyf</I> <li>Bul: <I>пет</I> <li>Cat: <I>cinc</I> <li>Dan: <I>fem</I> <li>Dut: <I>vijf</I> <li>Eng: <I>five</I> <li>Fin: <I>viisi</I> <li>Fre: <I>cinq</I> <li>Ger: <I>fünf</I> <li>Hin: <I>पांच</I> <li>Ita: <I>cinque</I> <li>Lav: <I>pieci</I> <li>Nep: <I>पाँच</I> <li>Nor: <I>fem</I> <li>Pes: <I>پنج</I> <li>Pnb: <I>پنج</I> <li>Pol: <I>pięć</I> <li>Ron: <I>cinci</I> <li>Rus: <I>пять</I> <li>Snd: <I>پنج</I> <li>Spa: <I>cinco</I> <li>Swe: <I>fem</I> <li>Tha: <I>ห้า</I> <li>Urd: <I>پانچ</I> </ul> </div> </div></TD>+</TR>+<TR>+<TD><CODE>no_Utt</CODE></TD>+<TD><A HREF="#Utt" TITLE="Utt - sentence, question, word...">Utt</A></TD>+<TD><div class=reveal> <I>no</I> <div class=popup> <ul> <li>API: <CODE>no_Utt</CODE> <li>Afr: <I>neen</I> <li>Bul: <I>не</I> <li>Cat: <I>no</I> <li>Dan: <I>nej</I> <li>Dut: <I>neen</I> <li>Eng: <I>no</I> <li>Fin: <I>ei</I> <li>Fre: <I>non</I> <li>Ger: <I>nein</I> <li>Hin: <I>नहीं</I> <li>Ita: <I>no</I> <li>Lav: <I>nē</I> <li>Nep: <I>होईन</I> <li>Nor: <I>nei</I> <li>Pes: <I>نه</I> <li>Pnb: <I>نیں</I> <li>Pol: <I>nie</I> <li>Ron: <I>nu</I> <li>Rus: <I>Нет</I> <li>Snd: <I>نا</I> <li>Spa: <I>no</I> <li>Swe: <I>nej</I> <li>Tha: <I>ไม่</I> <li>Urd: <I>نہیں</I> </ul> </div> </div></TD>+</TR>+<TR>+<TD><CODE>yes_Utt</CODE></TD>+<TD><A HREF="#Utt" TITLE="Utt - sentence, question, word...">Utt</A></TD>+<TD><div class=reveal> <I>yes</I> <div class=popup> <ul> <li>API: <CODE>yes_Utt</CODE> <li>Afr: <I>ja</I> <li>Bul: <I>да</I> <li>Cat: <I>sí</I> <li>Dan: <I>ja</I> <li>Dut: <I>ja</I> <li>Eng: <I>yes</I> <li>Fin: <I>kyllä</I> <li>Fre: <I>oui</I> <li>Ger: <I>ja</I> <li>Hin: <I>हाँ</I> <li>Ita: <I>sì</I> <li>Lav: <I>jā</I> <li>Nep: <I>हजुर</I> <li>Nor: <I>ja</I> <li>Pes: <I>بله</I> <li>Pnb: <I>ہاں</I> <li>Pol: <I>tak</I> <li>Ron: <I>da</I> <li>Rus: <I>Да</I> <li>Snd: <I>ھا</I> <li>Spa: <I>sí</I> <li>Swe: <I>ja</I> <li>Tha: <I>ใช่</I> <li>Urd: <I>ہاں</I> </ul> </div> </div></TD>+</TR>+</TABLE>++<A NAME="V"></A>+<H2>V - one-place verb</H2>++<P>+Lexical category, constructors given in+<A HREF="#RParadigms">lexical paradigms</A>.+</P>++<A NAME="V2"></A>+<H2>V2 - two-place verb</H2>++<TABLE BORDER="1" CELLPADDING="4">+<TR>+<TH>Function</TH>+<TH>Type</TH>+<TH COLSPAN="2">Example</TH>+</TR>+<TR>+<TD><CODE>have_V2</CODE></TD>+<TD><A HREF="#V2" TITLE="V2 - two-place verb">V2</A></TD>+<TD><div class=reveal> <I>to have it</I> <div class=popup> <ul> <li>API: <CODE>mkUtt (mkVP have_V2 it_NP)</CODE> <li>Afr: <I>dit te het</I> <li>Bul: <I>да има него</I> <li>Cat: <I>tenir ho</I> <li>Dan: <I>at have det</I> <li>Dut: <I>het hebben</I> <li>Eng: <I>to have it</I> <li>Fin: <I>olla sen</I> <li>Fre: <I>l' avoir</I> <li>Ger: <I>es haben</I> <li>Hin: <I>constant not found: have_V2</I> <li>Ita: <I>avere lo</I> <li>Lav: <I>constant not found: have_V2</I> <li>Nep: <I>यो हुनु</I> <li>Nor: <I>å ha det</I> <li>Pes: <I>constant not found: have_V2</I> <li>Pnb: <I>اینوں راكھنا</I> <li>Pol: <I>mieć je</I> <li>Ron: <I>sã îl aibă</I> <li>Rus: <I>иметь его</I> <li>Snd: <I>ھن رکڻ</I> <li>Spa: <I>tener lo</I> <li>Swe: <I>att ha det</I> <li>Tha: <I>มีมัน</I> <li>Urd: <I>اس ركھنا</I> </ul> </div> </div></TD>+</TR>+</TABLE>++<A NAME="V2A"></A>+<H2>V2A - verb with NP and AP complement</H2>++<P>+Lexical category, constructors given in+<A HREF="#RParadigms">lexical paradigms</A>.+</P>++<A NAME="V2Q"></A>+<H2>V2Q - verb with NP and Q complement</H2>++<P>+Lexical category, constructors given in+<A HREF="#RParadigms">lexical paradigms</A>.+</P>++<A NAME="V2S"></A>+<H2>V2S - verb with NP and S complement</H2>++<P>+Lexical category, constructors given in+<A HREF="#RParadigms">lexical paradigms</A>.+</P>++<A NAME="V2V"></A>+<H2>V2V - verb with NP and V complement</H2>++<P>+Lexical category, constructors given in+<A HREF="#RParadigms">lexical paradigms</A>.+</P>++<A NAME="V3"></A>+<H2>V3 - three-place verb</H2>++<TABLE BORDER="1" CELLPADDING="4">+<TR>+<TH>Function</TH>+<TH>Type</TH>+<TH COLSPAN="2">Example</TH>+</TR>+<TR>+<TD><CODE>have_V3</CODE></TD>+<TD><A HREF="#V3" TITLE="V3 - three-place verb">V3</A></TD>+<TD><I>//have//</I></TD>+</TR>+</TABLE>++<P>+==V3;==[V3;]+</P>++<TABLE BORDER="1" CELLPADDING="4">+<TR>+<TH>Function</TH>+<TH>Type</TH>+<TH COLSPAN="2">Example</TH>+</TR>+<TR>+<TD><CODE>have_not_V3</CODE></TD>+<TD><CODE>V3;</CODE></TD>+<TD><I>//have//</I></TD>+</TR>+</TABLE>++<A NAME="VA"></A>+<H2>VA - adjective-complement verb</H2>++<P>+Lexical category, constructors given in+<A HREF="#RParadigms">lexical paradigms</A>.+</P>++<A NAME="VP"></A>+<H2>VP - verb phrase</H2>++<TABLE BORDER="1" CELLPADDING="4">+<TR>+<TH>Function</TH>+<TH>Type</TH>+<TH COLSPAN="2">Example</TH>+</TR>+<TR>+<TD><CODE>mkVP</CODE></TD>+<TD><A HREF="#V" TITLE="V - one-place verb">V</A> <CODE>-></CODE> <A HREF="#VP" TITLE="VP - verb phrase">VP</A></TD>+<TD><div class=reveal> <I>to sleep</I> <div class=popup> <ul> <li>API: <CODE>mkUtt (mkVP sleep_V)</CODE> <li>Afr: <I>te slaap</I> <li>Bul: <I>да спи</I> <li>Cat: <I>dormir</I> <li>Dan: <I>at sove</I> <li>Dut: <I>slapen</I> <li>Eng: <I>to sleep</I> <li>Fin: <I>nukkua</I> <li>Fre: <I>dormir</I> <li>Ger: <I>schlafen</I> <li>Hin: <I>सोना</I> <li>Ita: <I>dormire</I> <li>Lav: <I>gulēt</I> <li>Nep: <I>सुत्नु</I> <li>Nor: <I>å sove</I> <li>Pes: <I>خوابیدن</I> <li>Pnb: <I>سونا</I> <li>Pol: <I>spać</I> <li>Ron: <I>sã doarmă</I> <li>Rus: <I>спать</I> <li>Snd: <I>سمھڻ</I> <li>Spa: <I>dormir</I> <li>Swe: <I>att sova</I> <li>Tha: <I>นอนหลับ</I> <li>Urd: <I>سونا</I> </ul> </div> </div></TD>+</TR>+<TR>+<TD><CODE>mkVP</CODE></TD>+<TD><A HREF="#V2" TITLE="V2 - two-place verb">V2</A> <CODE>-></CODE> <A HREF="#NP" TITLE="NP - noun phrase (subject or object)">NP</A> <CODE>-></CODE> <A HREF="#VP" TITLE="VP - verb phrase">VP</A></TD>+<TD><div class=reveal> <I>to love him</I> <div class=popup> <ul> <li>API: <CODE>mkUtt (mkVP love_V2 he_NP)</CODE> <li>Afr: <I>hom te liefhet</I> <li>Bul: <I>да обича него</I> <li>Cat: <I>estimar el</I> <li>Dan: <I>at elske ham</I> <li>Dut: <I>hem liefhebben</I> <li>Eng: <I>to love him</I> <li>Fin: <I>rakastaa häntä</I> <li>Fre: <I>l' aimer</I> <li>Ger: <I>ihn lieben</I> <li>Hin: <I>उस को प्यार करना</I> <li>Ita: <I>amare lo</I> <li>Lav: <I>mīlēt viņu</I> <li>Nep: <I>उ लाई माया गर्नु</I> <li>Nor: <I>å elske ham</I> <li>Pes: <I>او را دوست داشتن</I> <li>Pnb: <I>اونوں پیار كرنا</I> <li>Pol: <I>kochać jego</I> <li>Ron: <I>sã îl iubească</I> <li>Rus: <I>любить его</I> <li>Snd: <I>ھو سان عشق ڪرڻ</I> <li>Spa: <I>amar lo</I> <li>Swe: <I>att älska honom</I> <li>Tha: <I>รักเขา</I> <li>Urd: <I>اس كو پیار كرنا</I> </ul> </div> </div></TD>+</TR>+<TR>+<TD><CODE>mkVP</CODE></TD>+<TD><A HREF="#V3" TITLE="V3 - three-place verb">V3</A> <CODE>-></CODE> <A HREF="#NP" TITLE="NP - noun phrase (subject or object)">NP</A> <CODE>-></CODE> <A HREF="#NP" TITLE="NP - noun phrase (subject or object)">NP</A> <CODE>-></CODE> <A HREF="#VP" TITLE="VP - verb phrase">VP</A></TD>+<TD><div class=reveal> <I>to send it to him</I> <div class=popup> <ul> <li>API: <CODE>mkUtt (mkVP send_V3 it_NP he_NP)</CODE> <li>Afr: <I>dit na hom te stuur</I> <li>Bul: <I>да прати него до него</I> <li>Cat: <I>enviar ho li</I> <li>Dan: <I>at sende det til ham</I> <li>Dut: <I>het naar hem sturen</I> <li>Eng: <I>to send it to him</I> <li>Fin: <I>lähettää sen hänelle</I> <li>Fre: <I>le lui envoyer</I> <li>Ger: <I>es ihm schicken</I> <li>Hin: <I>यह उस को भेजना</I> <li>Ita: <I>mandare lo gli</I> <li>Lav: <I>sūtīt to viņam</I> <li>Nep: <I>यो उस्लाई लाई पठाउनु</I> <li>Nor: <I>å sende det til ham</I> <li>Pes: <I>آن را برای او فرستادن</I> <li>Pnb: <I>اینوں پیجنا اونوں</I> <li>Pol: <I>wysłać do niego je</I> <li>Ron: <I>sã i -l trimită</I> <li>Rus: <I>посылать нему его</I> <li>Snd: <I>constant not found: send_V3</I> <li>Spa: <I>mandar lo le</I> <li>Swe: <I>att skicka det till honom</I> <li>Tha: <I>ส่งมันให้กับเขา</I> <li>Urd: <I>یہ اس كو بھیجنا</I> </ul> </div> </div></TD>+</TR>+<TR>+<TD><CODE>mkVP</CODE></TD>+<TD><A HREF="#VV" TITLE="VV - verb-phrase-complement verb">VV</A> <CODE>-></CODE> <A HREF="#VP" TITLE="VP - verb phrase">VP</A> <CODE>-></CODE> <A HREF="#VP" TITLE="VP - verb phrase">VP</A></TD>+<TD><div class=reveal> <I>to want to sleep</I> <div class=popup> <ul> <li>API: <CODE>mkUtt (mkVP want_VV (mkVP sleep_V))</CODE> <li>Afr: <I>te slaap te wil</I> <li>Bul: <I>да иска да спи</I> <li>Cat: <I>voler dormir</I> <li>Dan: <I>at ville sove</I> <li>Dut: <I>slapen willen</I> <li>Eng: <I>to want to sleep</I> <li>Fin: <I>tahtoa nukkua</I> <li>Fre: <I>vouloir dormir</I> <li>Ger: <I>schlafen wollen</I> <li>Hin: <I>सोना चाहना</I> <li>Ita: <I>volere dormire</I> <li>Lav: <I>gribēt gulēt</I> <li>Nep: <I>सुत्न चाहनु</I> <li>Nor: <I>å ville sove</I> <li>Pes: <I>خواستن بخوابد</I> <li>Pnb: <I>چانا سونا</I> <li>Pol: <I>zechcieć spać</I> <li>Ron: <I>sã vrea sã doarmă</I> <li>Rus: <I>хотеть спать</I> <li>Snd: <I>چاھڻ سمھڻ</I> <li>Spa: <I>querer dormir</I> <li>Swe: <I>att vilja sova</I> <li>Tha: <I>อยากนอนหลับ</I> <li>Urd: <I>سونا چاہنا</I> </ul> </div> </div></TD>+</TR>+<TR>+<TD><CODE>mkVP</CODE></TD>+<TD><A HREF="#VS" TITLE="VS - sentence-complement verb">VS</A> <CODE>-></CODE> <A HREF="#S" TITLE="S - declarative sentence">S</A> <CODE>-></CODE> <A HREF="#VP" TITLE="VP - verb phrase">VP</A></TD>+<TD><div class=reveal> <I>to know that she sleeps</I> <div class=popup> <ul> <li>API: <CODE>mkUtt (mkVP know_VS (mkS (mkCl she_NP sleep_V)))</CODE> <li>Afr: <I>dat sy slaap te weet</I> <li>Bul: <I>да знае , че тя спи</I> <li>Cat: <I>saber que ella dorm</I> <li>Dan: <I>at vide at hun sover</I> <li>Dut: <I>dat ze slaapt weten</I> <li>Eng: <I>to know that she sleeps</I> <li>Fin: <I>tietää että hän nukkuu</I> <li>Fre: <I>savoir qu' elle dort</I> <li>Ger: <I>daß sie schläft wissen</I> <li>Hin: <I>जानना कि वह सोती है</I> <li>Ita: <I>sapere che lei dorme</I> <li>Lav: <I>zināt , ka viņa guļ</I> <li>Nep: <I>थाहा पाउनुकी उनी सुत्छिन्</I> <li>Nor: <I>å vite at hun sover</I> <li>Pes: <I>دانستن که او می خوابد</I> <li>Pnb: <I>جاننا</I> <li>Pol: <I>wiedzieć , że ona śpi</I> <li>Ron: <I>sã ştie cã ea doarme</I> <li>Rus: <I>знать , что она спдит</I> <li>Snd: <I>ڄاڻڻ ت ھو۶ سمھی ٿی</I> <li>Spa: <I>saber que ella duerme</I> <li>Swe: <I>att veta att hon sover</I> <li>Tha: <I>รู้ว่าหล่อนนอนหลับ</I> <li>Urd: <I>جاننا كہ وہ سوتی ہے</I> </ul> </div> </div></TD>+</TR>+<TR>+<TD><CODE>mkVP</CODE></TD>+<TD><A HREF="#VQ" TITLE="VQ - question-complement verb">VQ</A> <CODE>-></CODE> <A HREF="#QS" TITLE="QS - question">QS</A> <CODE>-></CODE> <A HREF="#VP" TITLE="VP - verb phrase">VP</A></TD>+<TD><div class=reveal> <I>to wonder who sleeps</I> <div class=popup> <ul> <li>API: <CODE>mkUtt (mkVP wonder_VQ (mkQS (mkQCl who_IP sleep_V)))</CODE> <li>Afr: <I>hom wie slaap te afvra</I> <li>Bul: <I>да се чуди кой спи</I> <li>Cat: <I>preguntar se qui dorm</I> <li>Dan: <I>at undres hvem som sover</I> <li>Dut: <I>zich wie slaapt afvragen</I> <li>Eng: <I>to wonder who sleeps</I> <li>Fin: <I>ihmetellä kuka nukkuu</I> <li>Fre: <I>se demander qui dort</I> <li>Ger: <I>sich wer schläft wundern</I> <li>Hin: <I>हैरान होना कि कौन सोता है</I> <li>Ita: <I>domandare si chi dorme</I> <li>Lav: <I>brīnīties , kurš guļ</I> <li>Nep: <I>अचम्म हुनुकी को सुत्छन्</I> <li>Nor: <I>å undre hvem som sover</I> <li>Pes: <I>constant not found: wonder_VQ</I> <li>Pnb: <I>حیران ہونا</I> <li>Pol: <I>zastanowić się , kto śpi</I> <li>Ron: <I>sã se întrebe cine doarme</I> <li>Rus: <I>интересовать кто спдит</I> <li>Snd: <I>ھیران ٿیڻ ت ڪیر سمھی ٿو</I> <li>Spa: <I>preguntar se quién duerme</I> <li>Swe: <I>att undra vem som sover</I> <li>Tha: <I>ประหลาดใจว่าใครนอนหลับ</I> <li>Urd: <I>حیران ہونا كہ كون سوتا ہے</I> </ul> </div> </div></TD>+</TR>+<TR>+<TD><CODE>mkVP</CODE></TD>+<TD><A HREF="#VA" TITLE="VA - adjective-complement verb">VA</A> <CODE>-></CODE> <A HREF="#AP" TITLE="AP - adjectival phrase">AP</A> <CODE>-></CODE> <A HREF="#VP" TITLE="VP - verb phrase">VP</A></TD>+<TD><div class=reveal> <I>to become red</I> <div class=popup> <ul> <li>API: <CODE>mkUtt (mkVP become_VA (mkAP red_A))</CODE> <li>Afr: <I>rooi te word</I> <li>Bul: <I>да стане червено</I> <li>Cat: <I>tornar se vermell</I> <li>Dan: <I>at blive rød</I> <li>Dut: <I>rood worden</I> <li>Eng: <I>to become red</I> <li>Fin: <I>tulla punaiseksi</I> <li>Fre: <I>devenir rouge</I> <li>Ger: <I>rot werden</I> <li>Hin: <I>लाल बनना</I> <li>Ita: <I>diventare rossa</I> <li>Lav: <I>kļūt sarkani</I> <li>Nep: <I>रातो हुनु</I> <li>Nor: <I>å bli rød</I> <li>Pes: <I>قرمز شدن</I> <li>Pnb: <I>بننا لال</I> <li>Pol: <I>stać się czerwony</I> <li>Ron: <I>sã devină roşu</I> <li>Rus: <I>стать</I> <li>Snd: <I>ٿیڻ ڳاڙھو</I> <li>Spa: <I>convertir se roja</I> <li>Swe: <I>att bli röd</I> <li>Tha: <I>กลายเป็นแดง</I> <li>Urd: <I>لال بننا</I> </ul> </div> </div></TD>+</TR>+<TR>+<TD><CODE>mkVP</CODE></TD>+<TD><A HREF="#V2A" TITLE="V2A - verb with NP and AP complement">V2A</A> <CODE>-></CODE> <A HREF="#NP" TITLE="NP - noun phrase (subject or object)">NP</A> <CODE>-></CODE> <A HREF="#AP" TITLE="AP - adjectival phrase">AP</A> <CODE>-></CODE> <A HREF="#VP" TITLE="VP - verb phrase">VP</A></TD>+<TD><div class=reveal> <I>to paint it red</I> <div class=popup> <ul> <li>API: <CODE>mkUtt (mkVP paint_V2A it_NP (mkAP red_A))</CODE> <li>Afr: <I>dit rooi te skilder</I> <li>Bul: <I>да нарисува него червено</I> <li>Cat: <I>pintar ho en vermell</I> <li>Dan: <I>at male det rødt</I> <li>Dut: <I>het rood schilderen</I> <li>Eng: <I>to paint it red</I> <li>Fin: <I>maalata sen punaiseksi</I> <li>Fre: <I>le peindre en rouge</I> <li>Ger: <I>es rot malen</I> <li>Hin: <I>इस को लाल रंग करना</I> <li>Ita: <I>dipingere lo rosso</I> <li>Lav: <I>krāsot to sarkani</I> <li>Nep: <I>यो लाई रातो रँग लागाउनु</I> <li>Nor: <I>å male det rødt</I> <li>Pes: <I>آن را قرمز رنگ کردن</I> <li>Pnb: <I>اینوں رنگ كرنا لال</I> <li>Pol: <I>pomalować je na czerwono</I> <li>Ron: <I>sã îl picteze roşu</I> <li>Rus: <I>рисовать красным его</I> <li>Snd: <I>ھن کی رنگ ڪرڻ ڳاڙھو</I> <li>Spa: <I>pintar lo en rojo</I> <li>Swe: <I>att måla det rött</I> <li>Tha: <I>ทามันเป็นสีแดง</I> <li>Urd: <I>اس كو لال رنگ كرنا</I> </ul> </div> </div></TD>+</TR>+<TR>+<TD><CODE>mkVP</CODE></TD>+<TD><A HREF="#V2S" TITLE="V2S - verb with NP and S complement">V2S</A> <CODE>-></CODE> <A HREF="#NP" TITLE="NP - noun phrase (subject or object)">NP</A> <CODE>-></CODE> <A HREF="#S" TITLE="S - declarative sentence">S</A> <CODE>-></CODE> <A HREF="#VP" TITLE="VP - verb phrase">VP</A></TD>+<TD><div class=reveal> <I>to answer to him that she sleeps</I> <div class=popup> <ul> <li>API: <CODE>mkUtt (mkVP answer_V2S he_NP (mkS (mkCl she_NP sleep_V)))</CODE> <li>Afr: <I>hom dat sy slaap te antwoord</I> <li>Bul: <I>да отговори му , че тя спи</I> <li>Cat: <I>respondre li que ella dorm</I> <li>Dan: <I>at svare til ham at hun sover</I> <li>Dut: <I>hem dat ze slaapt antwoorden</I> <li>Eng: <I>to answer to him that she sleeps</I> <li>Fin: <I>vastata hänelle että hän nukkuu</I> <li>Fre: <I>lui répondre qu' elle dort</I> <li>Ger: <I>ihm daß sie schläft antworten</I> <li>Hin: <I>उस को जवाब देना कि वह सोती है</I> <li>Ita: <I>rispondere gli che lei dorme</I> <li>Lav: <I>atbildēt viņam , ka viņa guļ</I> <li>Nep: <I>उ लाई उत्तर दिनुकी उनी सुत्छिन्</I> <li>Nor: <I>å svare til ham at hun sover</I> <li>Pes: <I>به او جواب دادن که او می خوابد</I> <li>Pnb: <I>اونوں جواب دینا</I> <li>Pol: <I>odpowiedzieć jemu , że ona śpi</I> <li>Ron: <I>sã îi răspundă cã ea doarme</I> <li>Rus: <I>отвечать , что она спдит его</I> <li>Snd: <I>ھو کی جواب ڏیڻ ت ھو۶ سمھی ٿی</I> <li>Spa: <I>responder le que ella duerme</I> <li>Swe: <I>att svara till honom att hon sover</I> <li>Tha: <I>ตอบเขาว่าหล่อนนอนหลับ</I> <li>Urd: <I>اس كو جواب دینا كہ وہ سوتی ہے</I> </ul> </div> </div></TD>+</TR>+<TR>+<TD><CODE>mkVP</CODE></TD>+<TD><A HREF="#V2Q" TITLE="V2Q - verb with NP and Q complement">V2Q</A> <CODE>-></CODE> <A HREF="#NP" TITLE="NP - noun phrase (subject or object)">NP</A> <CODE>-></CODE> <A HREF="#QS" TITLE="QS - question">QS</A> <CODE>-></CODE> <A HREF="#VP" TITLE="VP - verb phrase">VP</A></TD>+<TD><div class=reveal> <I>to ask him who sleeps</I> <div class=popup> <ul> <li>API: <CODE>mkUtt (mkVP ask_V2Q he_NP (mkQS (mkQCl who_IP sleep_V)))</CODE> <li>Afr: <I>hom wie slaap te vra</I> <li>Bul: <I>да пита него кой спи</I> <li>Cat: <I>preguntar li qui dorm</I> <li>Dan: <I>at spørge ham hvem som sover</I> <li>Dut: <I>hem wie slaapt vragen</I> <li>Eng: <I>to ask him who sleeps</I> <li>Fin: <I>kysyä häneltä kuka nukkuu</I> <li>Fre: <I>lui demander qui dort</I> <li>Ger: <I>ihn wer schläft fragen</I> <li>Hin: <I>उस से पूछना कि कौन सोता है</I> <li>Ita: <I>chiedere gli chi dorme</I> <li>Lav: <I>vaicāt viņam , kurš guļ</I> <li>Nep: <I>उ सँग सोध्नुकी को सुत्छन्</I> <li>Nor: <I>å spørre ham hvem som sover</I> <li>Pes: <I>از او پرسیدن چه کسی می خوابد</I> <li>Pnb: <I>اونوں پچھنا</I> <li>Pol: <I>spytać jego , kto śpi</I> <li>Ron: <I>sã îl întrebe cine doarme</I> <li>Rus: <I>спрашивать кто спдит его</I> <li>Snd: <I>ھو کان پڇڻ ت ڪیر سمھی ٿو</I> <li>Spa: <I>preguntar le quién duerme</I> <li>Swe: <I>att fråga honom vem som sover</I> <li>Tha: <I>ถามเขาว่าใครนอนหลับ</I> <li>Urd: <I>اس سے پوچھنا كہ كون سوتا ہے</I> </ul> </div> </div></TD>+</TR>+<TR>+<TD><CODE>mkVP</CODE></TD>+<TD><A HREF="#V2V" TITLE="V2V - verb with NP and V complement">V2V</A> <CODE>-></CODE> <A HREF="#NP" TITLE="NP - noun phrase (subject or object)">NP</A> <CODE>-></CODE> <A HREF="#VP" TITLE="VP - verb phrase">VP</A> <CODE>-></CODE> <A HREF="#VP" TITLE="VP - verb phrase">VP</A></TD>+<TD><div class=reveal> <I>to beg him to sleep</I> <div class=popup> <ul> <li>API: <CODE>mkUtt (mkVP beg_V2V he_NP (mkVP sleep_V))</CODE> <li>Afr: <I>hom om te slaap te smeek</I> <li>Bul: <I>да моли него да спи</I> <li>Cat: <I>demanar el a dormir</I> <li>Dan: <I>at bede ham at sove</I> <li>Dut: <I>hem te slapen smeken</I> <li>Eng: <I>to beg him to sleep</I> <li>Fin: <I>pyytää häntä nukkumaan</I> <li>Fre: <I>le demander à dormir</I> <li>Ger: <I>ihn zu schlafen bitten</I> <li>Hin: <I>उस से सोने की भीख मांगना</I> <li>Ita: <I>pregare lo di dormire</I> <li>Lav: <I>lūgt viņu gulēt</I> <li>Nep: <I>उ लाई सुत्न आग्रह गर्नु</I> <li>Nor: <I>å be ham att sove</I> <li>Pes: <I>از او خواهش کردن بخوابد</I> <li>Pnb: <I>اونوں مانگنا سونا دی</I> <li>Pol: <I>constant not found: beg_V2V</I> <li>Ron: <I>sã îl roage sã doarmă</I> <li>Rus: <I>просить спать его</I> <li>Snd: <I>constant not found: beg_V2V</I> <li>Spa: <I>rogar lo a dormir</I> <li>Swe: <I>att be honom att sova</I> <li>Tha: <I>ขอเขาให้นอนหลับ</I> <li>Urd: <I>اس سے سونے كی التجا كرنا</I> </ul> </div> </div></TD>+</TR>+<TR>+<TD><CODE>mkVP</CODE></TD>+<TD><A HREF="#A" TITLE="A - one-place adjective">A</A> <CODE>-></CODE> <A HREF="#VP" TITLE="VP - verb phrase">VP</A></TD>+<TD><div class=reveal> <I>to be old</I> <div class=popup> <ul> <li>API: <CODE>mkUtt (mkVP old_A)</CODE> <li>Afr: <I>oud te wees</I> <li>Bul: <I>да е старо</I> <li>Cat: <I>ser vell</I> <li>Dan: <I>at være gammel</I> <li>Dut: <I>oud zijn</I> <li>Eng: <I>to be old</I> <li>Fin: <I>olla vanha</I> <li>Fre: <I>être vieille</I> <li>Ger: <I>alt sein</I> <li>Hin: <I>बूढ़ा</I> <li>Ita: <I>essere vecchia</I> <li>Lav: <I>būt veci</I> <li>Nep: <I>बुढो</I> <li>Nor: <I>å være gammel</I> <li>Pes: <I>پیر بودن</I> <li>Pnb: <I>بوڈا</I> <li>Pol: <I>być stary</I> <li>Ron: <I>sã fie vechi</I> <li>Rus: <I>быть старым</I> <li>Snd: <I>پوڙھی</I> <li>Spa: <I>ser vieja</I> <li>Swe: <I>att vara gammal</I> <li>Tha: <I>แก่</I> <li>Urd: <I>بوڑھا</I> </ul> </div> </div></TD>+</TR>+<TR>+<TD><CODE>mkVP</CODE></TD>+<TD><A HREF="#A" TITLE="A - one-place adjective">A</A> <CODE>-></CODE> <A HREF="#NP" TITLE="NP - noun phrase (subject or object)">NP</A> <CODE>-></CODE> <A HREF="#VP" TITLE="VP - verb phrase">VP</A></TD>+<TD><div class=reveal> <I>to be older than he</I> <div class=popup> <ul> <li>API: <CODE>mkUtt (mkVP old_A he_NP)</CODE> <li>Afr: <I>ouer as hy te wees</I> <li>Bul: <I>да е по - старо от него</I> <li>Cat: <I>ser més vell que ell</I> <li>Dan: <I>at være ældre end han</I> <li>Dut: <I>ouder dan hij zijn</I> <li>Eng: <I>to be older than he</I> <li>Fin: <I>olla vanhempi kuin hän</I> <li>Fre: <I>être plus vieille que lui</I> <li>Ger: <I>älter als er sein</I> <li>Hin: <I>उस से बूढ़ा</I> <li>Ita: <I>essere più vecchia di lui</I> <li>Lav: <I>{s : Str = "būt" ++ "vecāki" ++ "par" ++ "viņu";</I> <li>Nep: <I>उ भन्दा बुढो</I> <li>Nor: <I>å være eldre enn han</I> <li>Pes: <I>پیر تر از او بودن</I> <li>Pnb: <I>اورے توں بوڈا</I> <li>Pol: <I>być starszy niż on</I> <li>Ron: <I>sã fie mai vechi decât el</I> <li>Rus: <I>быть старше него</I> <li>Snd: <I>ھو کان پوڙھی</I> <li>Spa: <I>ser más vieja que él</I> <li>Swe: <I>att vara äldre än han</I> <li>Tha: <I>แก่กว่าเขา</I> <li>Urd: <I>اس سے بوڑھا</I> </ul> </div> </div></TD>+</TR>+<TR>+<TD><CODE>mkVP</CODE></TD>+<TD><A HREF="#A2" TITLE="A2 - two-place adjective">A2</A> <CODE>-></CODE> <A HREF="#NP" TITLE="NP - noun phrase (subject or object)">NP</A> <CODE>-></CODE> <A HREF="#VP" TITLE="VP - verb phrase">VP</A></TD>+<TD><div class=reveal> <I>to be married to him</I> <div class=popup> <ul> <li>API: <CODE>mkUtt (mkVP married_A2 he_NP)</CODE> <li>Afr: <I>getroud met hom te wees</I> <li>Bul: <I>да е женено за него</I> <li>Cat: <I>ser casata a ell</I> <li>Dan: <I>at være gift med ham</I> <li>Dut: <I>getrouwd met hem zijn</I> <li>Eng: <I>to be married to him</I> <li>Fin: <I>olla avioitunut hänen kanssa</I> <li>Fre: <I>être mariée à lui</I> <li>Ger: <I>verheiratet mit ihm sein</I> <li>Hin: <I>उस से शादी शुदा</I> <li>Ita: <I>essere sposata con lui</I> <li>Lav: <I>būt precējušies ar viņu</I> <li>Nep: <I>उ सँग विवाहित</I> <li>Nor: <I>å være gift med ham</I> <li>Pes: <I>او متأهل بودن</I> <li>Pnb: <I>constant not found: married_A2</I> <li>Pol: <I>być zaślubiony jemu</I> <li>Ron: <I>sã fie căsătorit cu el</I> <li>Rus: <I>быть замужем за им</I> <li>Snd: <I>constant not found: married_A2</I> <li>Spa: <I>ser casada a él</I> <li>Swe: <I>att vara gift med honom</I> <li>Tha: <I>แต่งงานแล้วกับเขา</I> <li>Urd: <I>اس سے شادی شدہ</I> </ul> </div> </div></TD>+</TR>+<TR>+<TD><CODE>mkVP</CODE></TD>+<TD><A HREF="#AP" TITLE="AP - adjectival phrase">AP</A> <CODE>-></CODE> <A HREF="#VP" TITLE="VP - verb phrase">VP</A></TD>+<TD><div class=reveal> <I>to be very old</I> <div class=popup> <ul> <li>API: <CODE>mkUtt (mkVP (mkAP very_AdA old_A))</CODE> <li>Afr: <I>baie oud te wees</I> <li>Bul: <I>да е много старо</I> <li>Cat: <I>ser molt vell</I> <li>Dan: <I>at være meget gammel</I> <li>Dut: <I>erg oud zijn</I> <li>Eng: <I>to be very old</I> <li>Fin: <I>olla erittäin vanha</I> <li>Fre: <I>être très vieille</I> <li>Ger: <I>sehr alt sein</I> <li>Hin: <I>बहुत बूढ़ा</I> <li>Ita: <I>essere molto vecchia</I> <li>Lav: <I>būt ļoti veci</I> <li>Nep: <I>धेरै बुढो</I> <li>Nor: <I>å være mye gammel</I> <li>Pes: <I>خیلی پیر بودن</I> <li>Pnb: <I>بہت بوڈا</I> <li>Pol: <I>być bardzo stary</I> <li>Ron: <I>sã fie foarte vechi</I> <li>Rus: <I>быть очень старым</I> <li>Snd: <I>تمام پوڙھی</I> <li>Spa: <I>ser muy vieja</I> <li>Swe: <I>att vara mycket gammal</I> <li>Tha: <I>แก่มาก</I> <li>Urd: <I>بہت بوڑھا</I> </ul> </div> </div></TD>+</TR>+<TR>+<TD><CODE>mkVP</CODE></TD>+<TD><A HREF="#N" TITLE="N - common noun">N</A> <CODE>-></CODE> <A HREF="#VP" TITLE="VP - verb phrase">VP</A></TD>+<TD><div class=reveal> <I>to be a woman</I> <div class=popup> <ul> <li>API: <CODE>mkUtt (mkVP woman_N)</CODE> <li>Afr: <I>'n vrou te wees</I> <li>Bul: <I>да е жена</I> <li>Cat: <I>ser una dona</I> <li>Dan: <I>at være en kvinde</I> <li>Dut: <I>vrouw zijn</I> <li>Eng: <I>to be a woman</I> <li>Fin: <I>olla nainen</I> <li>Fre: <I>être une femme</I> <li>Ger: <I>eine Frau sein</I> <li>Hin: <I>औरत</I> <li>Ita: <I>essere una donna</I> <li>Lav: <I>būt sievietes</I> <li>Nep: <I>आईमाई</I> <li>Nor: <I>å være ei kvinne</I> <li>Pes: <I>زن بودن</I> <li>Pnb: <I>زنانی</I> <li>Pol: <I>być kobieta</I> <li>Ron: <I>sã fie femeie</I> <li>Rus: <I>быть женщиной</I> <li>Snd: <I>استری</I> <li>Spa: <I>ser una mujer</I> <li>Swe: <I>att vara en kvinna</I> <li>Tha: <I>เป็นหญิง</I> <li>Urd: <I>عورت</I> </ul> </div> </div></TD>+</TR>+<TR>+<TD><CODE>mkVP</CODE></TD>+<TD><A HREF="#CN" TITLE="CN - common noun (without determiner)">CN</A> <CODE>-></CODE> <A HREF="#VP" TITLE="VP - verb phrase">VP</A></TD>+<TD><div class=reveal> <I>to be an old woman</I> <div class=popup> <ul> <li>API: <CODE>mkUtt (mkVP (mkCN old_A woman_N))</CODE> <li>Afr: <I>'n oud vrou te wees</I> <li>Bul: <I>да е стара жена</I> <li>Cat: <I>ser una dona vell</I> <li>Dan: <I>at være en gammel kvinde</I> <li>Dut: <I>oude vrouw zijn</I> <li>Eng: <I>to be an old woman</I> <li>Fin: <I>olla vanha nainen</I> <li>Fre: <I>être une vieille femme</I> <li>Ger: <I>eine alte Frau sein</I> <li>Hin: <I>बूढ़ी औरत</I> <li>Ita: <I>essere una vecchia donna</I> <li>Lav: <I>būt vecas sievietes</I> <li>Nep: <I>बुढी आईमाई</I> <li>Nor: <I>å være ei gammel kvinne</I> <li>Pes: <I>زن پیر بودن</I> <li>Pnb: <I>بوڈی زنانی</I> <li>Pol: <I>być stara kobieta</I> <li>Ron: <I>sã fie femeie veche</I> <li>Rus: <I>быть старой женщиной</I> <li>Snd: <I>پوڙھی استری</I> <li>Spa: <I>ser una vieja mujer</I> <li>Swe: <I>att vara en gammal kvinna</I> <li>Tha: <I>เป็นหญิงแก่</I> <li>Urd: <I>بوڑھی عورت</I> </ul> </div> </div></TD>+</TR>+<TR>+<TD><CODE>mkVP</CODE></TD>+<TD><A HREF="#NP" TITLE="NP - noun phrase (subject or object)">NP</A> <CODE>-></CODE> <A HREF="#VP" TITLE="VP - verb phrase">VP</A></TD>+<TD><div class=reveal> <I>to be the woman</I> <div class=popup> <ul> <li>API: <CODE>mkUtt (mkVP (mkNP the_Det woman_N))</CODE> <li>Afr: <I>die vrou te wees</I> <li>Bul: <I>да е жената</I> <li>Cat: <I>ser la dona</I> <li>Dan: <I>at være kvinden</I> <li>Dut: <I>de vrouw zijn</I> <li>Eng: <I>to be the woman</I> <li>Fin: <I>olla nainen</I> <li>Fre: <I>être la femme</I> <li>Ger: <I>die Frau sein</I> <li>Hin: <I>औरत</I> <li>Ita: <I>essere la donna</I> <li>Lav: <I>būt sieviete</I> <li>Nep: <I>आईमाई</I> <li>Nor: <I>å være kvinna</I> <li>Pes: <I>زن بودن</I> <li>Pnb: <I>زنانی</I> <li>Pol: <I>być kobietą</I> <li>Ron: <I>sã fie femeia</I> <li>Rus: <I>быть женщиной</I> <li>Snd: <I>استری</I> <li>Spa: <I>ser la mujer</I> <li>Swe: <I>att vara kvinnan</I> <li>Tha: <I>เป็นหญิง</I> <li>Urd: <I>عورت</I> </ul> </div> </div></TD>+</TR>+<TR>+<TD><CODE>mkVP</CODE></TD>+<TD><A HREF="#Adv" TITLE="Adv - verb-phrase-modifying adverb">Adv</A> <CODE>-></CODE> <A HREF="#VP" TITLE="VP - verb phrase">VP</A></TD>+<TD><div class=reveal> <I>to be here</I> <div class=popup> <ul> <li>API: <CODE>mkUtt (mkVP here_Adv)</CODE> <li>Afr: <I>hier te wees</I> <li>Bul: <I>да е тук</I> <li>Cat: <I>ser aquí</I> <li>Dan: <I>at være her</I> <li>Dut: <I>hier zijn</I> <li>Eng: <I>to be here</I> <li>Fin: <I>olla täällä</I> <li>Fre: <I>être ici</I> <li>Ger: <I>hier sein</I> <li>Hin: <I>यहाँ</I> <li>Ita: <I>essere quà</I> <li>Lav: <I>būt šeit</I> <li>Nep: <I>यहाँ</I> <li>Nor: <I>å være her</I> <li>Pes: <I>اینجا بودن</I> <li>Pnb: <I>ایتھے</I> <li>Pol: <I>być tutaj</I> <li>Ron: <I>sã fie aici</I> <li>Rus: <I>быть здесь</I> <li>Snd: <I>ھتی</I> <li>Spa: <I>ser aquí</I> <li>Swe: <I>att vara här</I> <li>Tha: <I>อยู่ที่นี่</I> <li>Urd: <I>یہاں</I> </ul> </div> </div></TD>+</TR>+<TR>+<TD><CODE>mkVP</CODE></TD>+<TD><A HREF="#VP" TITLE="VP - verb phrase">VP</A> <CODE>-></CODE> <A HREF="#Adv" TITLE="Adv - verb-phrase-modifying adverb">Adv</A> <CODE>-></CODE> <A HREF="#VP" TITLE="VP - verb phrase">VP</A></TD>+<TD><div class=reveal> <I>to sleep here</I> <div class=popup> <ul> <li>API: <CODE>mkUtt (mkVP (mkVP sleep_V) here_Adv)</CODE> <li>Afr: <I>hier te slaap</I> <li>Bul: <I>да спи тук</I> <li>Cat: <I>dormir aquí</I> <li>Dan: <I>at sove her</I> <li>Dut: <I>hier slapen</I> <li>Eng: <I>to sleep here</I> <li>Fin: <I>nukkua</I> <li>Fre: <I>dormir ici</I> <li>Ger: <I>hier schlafen</I> <li>Hin: <I>यहाँ सोना</I> <li>Ita: <I>dormire quà</I> <li>Lav: <I>gulēt šeit</I> <li>Nep: <I>यहाँ सुत्नु</I> <li>Nor: <I>å sove her</I> <li>Pes: <I>اینجا خوابیدن</I> <li>Pnb: <I>سونا ایتھے</I> <li>Pol: <I>tutaj spać</I> <li>Ron: <I>sã doarmă aici</I> <li>Rus: <I>спать</I> <li>Snd: <I>سمھڻ ھتی</I> <li>Spa: <I>dormir aquí</I> <li>Swe: <I>att sova här</I> <li>Tha: <I>นอนหลับที่นี่</I> <li>Urd: <I>یہاں سونا</I> </ul> </div> </div></TD>+</TR>+<TR>+<TD><CODE>mkVP</CODE></TD>+<TD><A HREF="#AdV" TITLE="Adv - verb-phrase-modifying adverb">AdV</A> <CODE>-></CODE> <A HREF="#VP" TITLE="VP - verb phrase">VP</A> <CODE>-></CODE> <A HREF="#VP" TITLE="VP - verb phrase">VP</A></TD>+<TD><div class=reveal> <I>always to sleep</I> <div class=popup> <ul> <li>API: <CODE>mkUtt (mkVP always_AdV (mkVP sleep_V))</CODE> <li>Afr: <I>altyd te slaap</I> <li>Bul: <I>винаги да спи</I> <li>Cat: <I>dormir sempre</I> <li>Dan: <I>at altid sove</I> <li>Dut: <I>altijd slapen</I> <li>Eng: <I>always to sleep</I> <li>Fin: <I>nukkua</I> <li>Fre: <I>dormir toujours</I> <li>Ger: <I>immer schlafen</I> <li>Hin: <I>हमेशा सोना</I> <li>Ita: <I>dormire sempre</I> <li>Lav: <I>gulēt vienmēr</I> <li>Nep: <I>सधैँ सुत्नु</I> <li>Nor: <I>å altid sove</I> <li>Pes: <I>همیشه خوابیدن</I> <li>Pnb: <I>سونا</I> <li>Pol: <I>zawsze spać</I> <li>Ron: <I>sã doarmă mereu</I> <li>Rus: <I>спать</I> <li>Snd: <I>سمھڻ</I> <li>Spa: <I>dormir siempre</I> <li>Swe: <I>att alltid sova</I> <li>Tha: <I>นอนหลับเสมอ</I> <li>Urd: <I>ہمیشہ سونا</I> </ul> </div> </div></TD>+</TR>+<TR>+<TD><CODE>mkVP</CODE></TD>+<TD><A HREF="#VPSlash" TITLE="VPSlash - verb phrase missing complement">VPSlash</A> <CODE>-></CODE> <A HREF="#NP" TITLE="NP - noun phrase (subject or object)">NP</A> <CODE>-></CODE> <A HREF="#VP" TITLE="VP - verb phrase">VP</A></TD>+<TD><div class=reveal> <I>to paint it black</I> <div class=popup> <ul> <li>API: <CODE>mkUtt (mkVP (mkVPSlash paint_V2A (mkAP black_A)) it_NP)</CODE> <li>Afr: <I>dit swart te skilder</I> <li>Bul: <I>да нарисува него черно</I> <li>Cat: <I>pintar ho en negre</I> <li>Dan: <I>at male det sort</I> <li>Dut: <I>het zwart schilderen</I> <li>Eng: <I>to paint it black</I> <li>Fin: <I>maalata sen mustaksi</I> <li>Fre: <I>le peindre en noir</I> <li>Ger: <I>es schwarz malen</I> <li>Hin: <I>इस को काला रंग करना</I> <li>Ita: <I>dipingere lo nero</I> <li>Lav: <I>krāsot to melni</I> <li>Nep: <I>यो लाई कालो रँग लागाउनु</I> <li>Nor: <I>å male det svart</I> <li>Pes: <I>آن را سیاه رنگ کردن</I> <li>Pnb: <I>اینوں رنگ كرنا كالا</I> <li>Pol: <I>pomalować je na czarno</I> <li>Ron: <I>sã îl picteze negru</I> <li>Rus: <I>рисовать чёрным его</I> <li>Snd: <I>ھن کی رنگ ڪرڻ ڪارو</I> <li>Spa: <I>pintar lo en negro</I> <li>Swe: <I>att måla det svart</I> <li>Tha: <I>ทามันเป็นสีดำ</I> <li>Urd: <I>اس كو كالا رنگ كرنا</I> </ul> </div> </div></TD>+</TR>+<TR>+<TD><CODE>mkVP</CODE></TD>+<TD><A HREF="#VPSlash" TITLE="VPSlash - verb phrase missing complement">VPSlash</A> <CODE>-></CODE> <A HREF="#VP" TITLE="VP - verb phrase">VP</A></TD>+<TD><div class=reveal> <I>to paint itself black</I> <div class=popup> <ul> <li>API: <CODE>mkUtt (reflexiveVP (mkVPSlash paint_V2A (mkAP black_A)))</CODE> <li>Afr: <I>hom swart te skilder</I> <li>Bul: <I>да се нарисува черно</I> <li>Cat: <I>pintar se en negre</I> <li>Dan: <I>at male sig sort</I> <li>Dut: <I>zich zwart schilderen</I> <li>Eng: <I>to paint itself black</I> <li>Fin: <I>maalata itsensä mustaksi</I> <li>Fre: <I>se peindre en noir</I> <li>Ger: <I>sich schwarz malen</I> <li>Hin: <I>ख़ुद को काला रंग करना</I> <li>Ita: <I>dipingere si nero</I> <li>Lav: <I>krāsot sevi melni</I> <li>Nep: <I>आफैं लाई कालो रँग लागाउनु</I> <li>Nor: <I>å male seg svart</I> <li>Pes: <I>خودش را سیاه رنگ کردن</I> <li>Pnb: <I>رنگ كرنا خود نوں كالا</I> <li>Pol: <I>pomalować siebie na czarno</I> <li>Ron: <I>sã se picteze negru</I> <li>Rus: <I>рисовать чёрным себя</I> <li>Snd: <I>رنگ ڪرڻ پاڻ کی ڪارو</I> <li>Spa: <I>pintar se en negro</I> <li>Swe: <I>att måla sig svart</I> <li>Tha: <I>ทาตัวเองเป็นสีดำ</I> <li>Urd: <I>خود كو كالا رنگ كرنا</I> </ul> </div> </div></TD>+</TR>+<TR>+<TD><CODE>mkVP</CODE></TD>+<TD><A HREF="#Comp" TITLE="Comp - complement of copula, such as AP">Comp</A> <CODE>-></CODE> <A HREF="#VP" TITLE="VP - verb phrase">VP</A></TD>+<TD><div class=reveal> <I>to be warm</I> <div class=popup> <ul> <li>API: <CODE>mkUtt (mkVP (mkComp (mkAP warm_A)))</CODE> <li>Afr: <I>warm te wees</I> <li>Bul: <I>да е топло</I> <li>Cat: <I>ser tèbia</I> <li>Dan: <I>at være varm</I> <li>Dut: <I>warm zijn</I> <li>Eng: <I>to be warm</I> <li>Fin: <I>olla lämmin</I> <li>Fre: <I>être chaude</I> <li>Ger: <I>warm sein</I> <li>Hin: <I>गरम</I> <li>Ita: <I>essere calda</I> <li>Lav: <I>būt silti</I> <li>Nep: <I>तातो</I> <li>Nor: <I>å være varm</I> <li>Pes: <I>گرم بودن</I> <li>Pnb: <I>تتا</I> <li>Pol: <I>być ciepły</I> <li>Ron: <I>sã fie călduţ</I> <li>Rus: <I>быть тёплым</I> <li>Snd: <I>گرم</I> <li>Spa: <I>ser tibia</I> <li>Swe: <I>att vara varm</I> <li>Tha: <I>อุ่น</I> <li>Urd: <I>گرم</I> </ul> </div> </div></TD>+</TR>+<TR>+<TD><CODE>passiveVP</CODE></TD>+<TD><A HREF="#V2" TITLE="V2 - two-place verb">V2</A> <CODE>-></CODE> <A HREF="#VP" TITLE="VP - verb phrase">VP</A></TD>+<TD><div class=reveal> <I>to be loved</I> <div class=popup> <ul> <li>API: <CODE>mkUtt (passiveVP love_V2)</CODE> <li>Afr: <I>liefgehad te word</I> <li>Bul: <I>да е обичано</I> <li>Cat: <I>ser estimada</I> <li>Dan: <I>at blive elsket</I> <li>Dut: <I>liefgehad worden</I> <li>Eng: <I>to be loved</I> <li>Fin: <I>rakastetaan</I> <li>Fre: <I>être aimée</I> <li>Ger: <I>geliebt werden</I> <li>Hin: <I>प्यार करना</I> <li>Ita: <I>venire amata</I> <li>Lav: <I>mīlēt NON_EXISTENT</I> <li>Nep: <I>माया गर्नु</I> <li>Nor: <I>å bli elska</I> <li>Pes: <I>دوست داشتن</I> <li>Pnb: <I>پیار كرنا</I> <li>Pol: <I>być kochany</I> <li>Ron: <I>sã fie iubit</I> <li>Rus: <I>любиться</I> <li>Snd: <I>عشق ڪرڻ</I> <li>Spa: <I>ser amada</I> <li>Swe: <I>att bli älskad</I> <li>Tha: <I>ถูกรัก</I> <li>Urd: <I>پیار كرنا</I> </ul> </div> </div></TD>+</TR>+<TR>+<TD><CODE>passiveVP</CODE></TD>+<TD><A HREF="#V2" TITLE="V2 - two-place verb">V2</A> <CODE>-></CODE> <A HREF="#NP" TITLE="NP - noun phrase (subject or object)">NP</A> <CODE>-></CODE> <A HREF="#VP" TITLE="VP - verb phrase">VP</A></TD>+<TD><div class=reveal> <I>to be loved by her</I> <div class=popup> <ul> <li>API: <CODE>mkUtt (passiveVP love_V2 she_NP)</CODE> <li>Afr: <I>deur haar liefgehad te word</I> <li>Bul: <I>да е обичано чрез нея</I> <li>Cat: <I>ser estimada per ella</I> <li>Dan: <I>at blive elsket af hende</I> <li>Dut: <I>door haar liefgehad worden</I> <li>Eng: <I>to be loved by her</I> <li>Fin: <I>rakastetaan</I> <li>Fre: <I>être aimée par elle</I> <li>Ger: <I>durch sie geliebt werden</I> <li>Hin: <I>उस प्यार करना</I> <li>Ita: <I>venire amata da lei</I> <li>Lav: <I>mīlēt NON_EXISTENT viņa</I> <li>Nep: <I>उनी लाइ माया गर्नु</I> <li>Nor: <I>å bli elska av henne</I> <li>Pes: <I>توسط او دوست داشتن</I> <li>Pnb: <I>پیار كرنا اونوں</I> <li>Pol: <I>przez nią być kochany</I> <li>Ron: <I>sã fie iubit de către ea</I> <li>Rus: <I>любиться</I> <li>Snd: <I>عشق ڪرڻ ھو ھٿان</I> <li>Spa: <I>ser amada por ella</I> <li>Swe: <I>att bli älskad av henne</I> <li>Tha: <I>ถูกหล่อนรัก</I> <li>Urd: <I>اس سے پیار كرنا</I> </ul> </div> </div></TD>+</TR>+<TR>+<TD><CODE>progressiveVP</CODE></TD>+<TD><A HREF="#VP" TITLE="VP - verb phrase">VP</A> <CODE>-></CODE> <A HREF="#VP" TITLE="VP - verb phrase">VP</A></TD>+<TD><div class=reveal> <I>to be sleeping</I> <div class=popup> <ul> <li>API: <CODE>mkUtt (progressiveVP (mkVP sleep_V))</CODE> <li>Afr: <I>aan die te slaap te wees</I> <li>Bul: <I>да спи</I> <li>Cat: <I>estar dormint</I> <li>Dan: <I>at være ved å sove</I> <li>Dut: <I>aan het slapen zijn</I> <li>Eng: <I>to be sleeping</I> <li>Fin: <I>olla nukkumassa</I> <li>Fre: <I>être en train de dormir</I> <li>Ger: <I>eben schlafen</I> <li>Hin: <I>सोना</I> <li>Ita: <I>stare dormendo</I> <li>Lav: <I>gulēt</I> <li>Nep: <I>सुतदै</I> <li>Nor: <I>å være ved å sove</I> <li>Pes: <I>خوابیدن</I> <li>Pnb: <I>سونا</I> <li>Pol: <I>spać</I> <li>Ron: <I>sã doarmă</I> <li>Rus: <I>спать</I> <li>Snd: <I>سمھڻ</I> <li>Spa: <I>estar durmiendo</I> <li>Swe: <I>att hålla på att sova</I> <li>Tha: <I>กำลังนอนหลับ</I> <li>Urd: <I>سونا</I> </ul> </div> </div></TD>+</TR>+<TR>+<TD><CODE>reflexiveVP</CODE></TD>+<TD><A HREF="#V2" TITLE="V2 - two-place verb">V2</A> <CODE>-></CODE> <A HREF="#VP" TITLE="VP - verb phrase">VP</A></TD>+<TD><div class=reveal> <I>to love itself</I> <div class=popup> <ul> <li>API: <CODE>mkUtt (reflexiveVP love_V2)</CODE> <li>Afr: <I>hom te liefhet</I> <li>Bul: <I>да се обича</I> <li>Cat: <I>estimar se</I> <li>Dan: <I>at elske sig</I> <li>Dut: <I>zich liefhebben</I> <li>Eng: <I>to love itself</I> <li>Fin: <I>rakastaa itseänsä</I> <li>Fre: <I>s' aimer</I> <li>Ger: <I>sich lieben</I> <li>Hin: <I>ख़ुद को प्यार करना</I> <li>Ita: <I>amare si</I> <li>Lav: <I>mīlēt sevi</I> <li>Nep: <I>आफैं लाई माया गर्नु</I> <li>Nor: <I>å elske seg</I> <li>Pes: <I>خودش را دوست داشتن</I> <li>Pnb: <I>پیار كرنا خود نوں</I> <li>Pol: <I>kochać siebie</I> <li>Ron: <I>sã se iubească</I> <li>Rus: <I>любить себя</I> <li>Snd: <I>عشق ڪرڻ پاڻ سان</I> <li>Spa: <I>amar se</I> <li>Swe: <I>att älska sig</I> <li>Tha: <I>รักตัวเอง</I> <li>Urd: <I>خود كو پیار كرنا</I> </ul> </div> </div></TD>+</TR>+<TR>+<TD><CODE>reflexiveVP</CODE></TD>+<TD><A HREF="#VPSlash" TITLE="VPSlash - verb phrase missing complement">VPSlash</A> <CODE>-></CODE> <A HREF="#VP" TITLE="VP - verb phrase">VP</A></TD>+<TD><I>paint itself black</I></TD>+</TR>+</TABLE>++<A NAME="VPSlash"></A>+<H2>VPSlash - verb phrase missing complement</H2>++<TABLE BORDER="1" CELLPADDING="4">+<TR>+<TH>Function</TH>+<TH>Type</TH>+<TH COLSPAN="2">Example</TH>+</TR>+<TR>+<TD><CODE>mkVPSlash</CODE></TD>+<TD><A HREF="#V2" TITLE="V2 - two-place verb">V2</A> <CODE>-></CODE> <A HREF="#VPSlash" TITLE="VPSlash - verb phrase missing complement">VPSlash</A></TD>+<TD><div class=reveal> <I>whom does she see</I> <div class=popup> <ul> <li>API: <CODE>mkQCl who_IP (mkClSlash she_NP (mkVPSlash see_V2))</CODE> <li>Afr: <I>wie sien sy</I> <li>Bul: <I>кого вижда тя</I> <li>Cat: <I>qui veu ella</I> <li>Dan: <I>hvem ser hun</I> <li>Dut: <I>wie zit ze</I> <li>Eng: <I>whom does she see</I> <li>Fin: <I>kenet hän näkee</I> <li>Fre: <I>qui voit elle</I> <li>Ger: <I>wen sieht sie</I> <li>Hin: <I>किस को वह देखती है</I> <li>Ita: <I>chi vede lei</I> <li>Lav: <I>kuru viņa redz</I> <li>Nep: <I>कासलाई उनी हेर्छिन्</I> <li>Nor: <I>hvem ser hun</I> <li>Pes: <I>چه کسی را او می بیند</I> <li>Pnb: <I>كون او ویكھدی اے</I> <li>Pol: <I>kogo widzi ona</I> <li>Ron: <I>pe cine vede ea</I> <li>Rus: <I>кого она видит</I> <li>Snd: <I>ڪیر ھو۶ ڏسی ٿی</I> <li>Spa: <I>quién ve ella</I> <li>Swe: <I>vem ser hon</I> <li>Tha: <I>หล่อนเห็นใคร</I> <li>Urd: <I>كس كو وہ دیكھتی ہے</I> </ul> </div> </div></TD>+</TR>+<TR>+<TD><CODE>mkVPSlash</CODE></TD>+<TD><A HREF="#V3" TITLE="V3 - three-place verb">V3</A> <CODE>-></CODE> <A HREF="#NP" TITLE="NP - noun phrase (subject or object)">NP</A> <CODE>-></CODE> <A HREF="#VPSlash" TITLE="VPSlash - verb phrase missing complement">VPSlash</A></TD>+<TD><div class=reveal> <I>to whom does she send it</I> <div class=popup> <ul> <li>API: <CODE>mkQCl who_IP (mkClSlash she_NP (mkVPSlash send_V3 it_NP))</CODE> <li>Afr: <I>na wie stuur sy dit</I> <li>Bul: <I>до кого праща него тя</I> <li>Cat: <I>a qui ho envia ella</I> <li>Dan: <I>til hvem sender hun det</I> <li>Dut: <I>naar wie stuurt ze het</I> <li>Eng: <I>to whom does she send it</I> <li>Fin: <I>kenelle hän lähettää sen</I> <li>Fre: <I>à qui l' envoie elle</I> <li>Ger: <I>wem schickt sie es</I> <li>Hin: <I>किस को वह यह भेजती है</I> <li>Ita: <I>a chi lo manda lei</I> <li>Lav: <I>kuram viņa sūta to</I> <li>Nep: <I>कासलाई उनी यसलाई लाई पठाउँछिन्</I> <li>Nor: <I>til hvem sender hun det</I> <li>Pes: <I>چه کسی برای او آن را می فرستد</I> <li>Pnb: <I>كون او اینوں پیجدی اے</I> <li>Pol: <I>do kogo ona wysyła je</I> <li>Ron: <I>cui îl trimite ea</I> <li>Rus: <I>кому она посылает его</I> <li>Snd: <I>constant not found: send_V3</I> <li>Spa: <I>a quién lo manda ella</I> <li>Swe: <I>till vem skickar hon det</I> <li>Tha: <I>หล่อนส่งมันให้กับใคร</I> <li>Urd: <I>كس كو وہ یہ بھیجتی ہے</I> </ul> </div> </div></TD>+</TR>+<TR>+<TD><CODE>mkVPSlash</CODE></TD>+<TD><A HREF="#V2A" TITLE="V2A - verb with NP and AP complement">V2A</A> <CODE>-></CODE> <A HREF="#AP" TITLE="AP - adjectival phrase">AP</A> <CODE>-></CODE> <A HREF="#VPSlash" TITLE="VPSlash - verb phrase missing complement">VPSlash</A></TD>+<TD><div class=reveal> <I>whom does she paint red</I> <div class=popup> <ul> <li>API: <CODE>mkQCl who_IP (mkClSlash she_NP (mkVPSlash paint_V2A (mkAP red_A)))</CODE> <li>Afr: <I>wie skilder sy rooi</I> <li>Bul: <I>кого рисува червен тя</I> <li>Cat: <I>qui pinta ella en vermell</I> <li>Dan: <I>hvem maler hun rød</I> <li>Dut: <I>wie schildert ze rood</I> <li>Eng: <I>whom does she paint red</I> <li>Fin: <I>kenet hän maalaa punaiseksi</I> <li>Fre: <I>qui peint elle en rouge</I> <li>Ger: <I>wen malt sie rot</I> <li>Hin: <I>किस को वह लाल रंग करती है</I> <li>Ita: <I>chi dipinge lei rosso</I> <li>Lav: <I>kuru viņa krāso sarkana</I> <li>Nep: <I>कासलाई उनी रातो रँग लागाउँछिन्</I> <li>Nor: <I>hvem maler hun rød</I> <li>Pes: <I>چه کسی را او قرمز رنگ می کند</I> <li>Pnb: <I>كون او لال رنگ كردی اے</I> <li>Pol: <I>kogo ona maluje na czerwono</I> <li>Ron: <I>pe cine pictează ea roşu</I> <li>Rus: <I>кого она рисует красным</I> <li>Snd: <I>ڪیر ھو۶ ڳاڙھو رنگ ڪری ٿی</I> <li>Spa: <I>quién pinta ella en rojo</I> <li>Swe: <I>vem målar hon röd</I> <li>Tha: <I>หล่อนทาเป็นสีแดงใคร</I> <li>Urd: <I>كس كو وہ لال رنگ كرتی ہے</I> </ul> </div> </div></TD>+</TR>+<TR>+<TD><CODE>mkVPSlash</CODE></TD>+<TD><A HREF="#V2Q" TITLE="V2Q - verb with NP and Q complement">V2Q</A> <CODE>-></CODE> <A HREF="#QS" TITLE="QS - question">QS</A> <CODE>-></CODE> <A HREF="#VPSlash" TITLE="VPSlash - verb phrase missing complement">VPSlash</A></TD>+<TD><div class=reveal> <I>whom does she ask where I sleep</I> <div class=popup> <ul> <li>API: <CODE>mkQCl who_IP (mkClSlash she_NP (mkVPSlash ask_V2Q (mkQS (mkQCl where_IAdv (mkCl i_NP sleep_V)))))</CODE> <li>Afr: <I>wie vra sy waar ek slaap</I> <li>Bul: <I>кого пита къде спя аз тя</I> <li>Cat: <I>a qui pregunta ella on dormo jo</I> <li>Dan: <I>hvem spørger hun hvor jeg sover</I> <li>Dut: <I>wie vraagt ze waar ik slaap</I> <li>Eng: <I>whom does she ask where I sleep</I> <li>Fin: <I>keneltä hän kysyy missä minä nukun</I> <li>Fre: <I>à qui demande elle où dors je</I> <li>Ger: <I>wen fragt sie wo ich schlafe</I> <li>Hin: <I>किस को वह पूछती है कि कहाँ मैं सोता हूँ</I> <li>Ita: <I>a chi chiede lei dove dormo io</I> <li>Lav: <I>kuram viņa vaicā , kur es guļu</I> <li>Nep: <I>कासलाई उनी सोध्छिन्की कहाँ म सुत्छु</I> <li>Nor: <I>hvem spørr hun hvor jeg sover</I> <li>Pes: <I>از چه کسی او می پرسد کجا من می خوابم</I> <li>Pnb: <I>كون او پچھدی اے كہ كتھے میں سوندا واں</I> <li>Pol: <I>kogo ona pyta , gdzie ja śpię</I> <li>Ron: <I>pe cine întreabă ea unde dorm eu</I> <li>Rus: <I>кого она спрашивает где я сплю</I> <li>Snd: <I>ڪیر ھو۶ پڇی ٿی ت ڪٿی مان سمھان ٿو</I> <li>Spa: <I>a quién pregunta ella donde duermo yo</I> <li>Swe: <I>vem frågar hon var jag sover</I> <li>Tha: <I>หล่อนถามว่าฉันนอนหลับที่ไหนใคร</I> <li>Urd: <I>كس كو وہ پوچھتی ہے كہ كہاں میں سوتا ہوں</I> </ul> </div> </div></TD>+</TR>+<TR>+<TD><CODE>mkVPSlash</CODE></TD>+<TD><A HREF="#V2S" TITLE="V2S - verb with NP and S complement">V2S</A> <CODE>-></CODE> <A HREF="#S" TITLE="S - declarative sentence">S</A> <CODE>-></CODE> <A HREF="#VPSlash" TITLE="VPSlash - verb phrase missing complement">VPSlash</A></TD>+<TD><div class=reveal> <I>to whom does she answer that I sleep</I> <div class=popup> <ul> <li>API: <CODE>mkQCl who_IP (mkClSlash she_NP (mkVPSlash answer_V2S (mkS (mkCl i_NP sleep_V))))</CODE> <li>Afr: <I>wie antwoord sy dat ek slaap</I> <li>Bul: <I>на на кого отговаря , че аз спя тя</I> <li>Cat: <I>a qui respon ella que jo dormo</I> <li>Dan: <I>til hvem svarer hun at jeg sover</I> <li>Dut: <I>wie antwoordt ze dat ik slaap</I> <li>Eng: <I>to whom does she answer that I sleep</I> <li>Fin: <I>kenelle hän vastaa että minä nukun</I> <li>Fre: <I>à qui répond elle que je dors</I> <li>Ger: <I>wem antwortet sie daß ich schlafe</I> <li>Hin: <I>किस को वह जवाब देती है कि मैं सोता हूँ</I> <li>Ita: <I>a chi risponde lei che io dormo</I> <li>Lav: <I>kuram viņa atbild , ka es guļu</I> <li>Nep: <I>कासलाई उनी उत्तर दिन्छिन्की म सुत्छु</I> <li>Nor: <I>til hvem svarer hun at jeg sover</I> <li>Pes: <I>به چه کسی او جواب می دهد که من می خوابم</I> <li>Pnb: <I>كون او جواب دیندی اے كہ میں سوندا واں</I> <li>Pol: <I>komu ona odpowiada , że ja śpię</I> <li>Ron: <I>cui răspunde ea cã eu dorm</I> <li>Rus: <I>кого она отвечает , что я сплю</I> <li>Snd: <I>ڪیر ھو۶ جواب ڏیی ٿی ت مان سمھان ٿو</I> <li>Spa: <I>a quién responde ella que yo duermo</I> <li>Swe: <I>till vem svarar hon att jag sover</I> <li>Tha: <I>หล่อนตอบว่าฉันนอนหลับใคร</I> <li>Urd: <I>كس كو وہ جواب دیتی ہے كہ میں سوتا ہوں</I> </ul> </div> </div></TD>+</TR>+<TR>+<TD><CODE>mkVPSlash</CODE></TD>+<TD><A HREF="#V2V" TITLE="V2V - verb with NP and V complement">V2V</A> <CODE>-></CODE> <A HREF="#VP" TITLE="VP - verb phrase">VP</A> <CODE>-></CODE> <A HREF="#VPSlash" TITLE="VPSlash - verb phrase missing complement">VPSlash</A></TD>+<TD><div class=reveal> <I>whom does she beg to sleep</I> <div class=popup> <ul> <li>API: <CODE>mkQCl who_IP (mkClSlash she_NP (mkVPSlash beg_V2V (mkVP sleep_V)))</CODE> <li>Afr: <I>wie smeek sy om te slaap</I> <li>Bul: <I>кого моли да спи тя</I> <li>Cat: <I>qui demana ella a dormir</I> <li>Dan: <I>hvem beder hun at sove</I> <li>Dut: <I>wie smeekt ze te slapen</I> <li>Eng: <I>whom does she beg to sleep</I> <li>Fin: <I>ketä hän pyytää nukkumaan</I> <li>Fre: <I>qui demande elle à dormir</I> <li>Ger: <I>wen bittet sie zu schlafen</I> <li>Hin: <I>किस को वह सोने की भीख मांगती है</I> <li>Ita: <I>chi prega lei di dormire</I> <li>Lav: <I>kuru viņa lūdz gulēt</I> <li>Nep: <I>कासलाई उनी सुत्न आग्रह गर्छिन्</I> <li>Nor: <I>hvem ber hun att sove</I> <li>Pes: <I>از چه کسی او خواهش می کند بخوابد</I> <li>Pnb: <I>كون او سونا دی مانگدی اے</I> <li>Pol: <I>constant not found: beg_V2V</I> <li>Ron: <I>pe cine roagă ea sã doarmă</I> <li>Rus: <I>кого она просит спать</I> <li>Snd: <I>constant not found: beg_V2V</I> <li>Spa: <I>quién roga ella a dormir</I> <li>Swe: <I>vem ber hon att sova</I> <li>Tha: <I>หล่อนขอให้นอนหลับใคร</I> <li>Urd: <I>كس كو وہ سونے كی التجا كرتی ہے</I> </ul> </div> </div></TD>+</TR>+<TR>+<TD><CODE>mkVPSlash</CODE></TD>+<TD><A HREF="#VV" TITLE="VV - verb-phrase-complement verb">VV</A> <CODE>-></CODE> <A HREF="#VPSlash" TITLE="VPSlash - verb phrase missing complement">VPSlash</A> <CODE>-></CODE> <A HREF="#VPSlash" TITLE="VPSlash - verb phrase missing complement">VPSlash</A></TD>+<TD><div class=reveal> <I>whom does she want to see</I> <div class=popup> <ul> <li>API: <CODE>mkQCl who_IP (mkClSlash she_NP (mkVPSlash want_VV (mkVPSlash see_V2)))</CODE> <li>Afr: <I>wie wil sy te sien</I> <li>Bul: <I>кого иска да види тя</I> <li>Cat: <I>qui vol ella veure</I> <li>Dan: <I>hvem vil hun se</I> <li>Dut: <I>wie wil ze zien</I> <li>Eng: <I>whom does she want to see</I> <li>Fin: <I>kenet hän tahtoo nähdä</I> <li>Fre: <I>qui veut elle voir</I> <li>Ger: <I>wen will sie sehen</I> <li>Hin: <I>किस को वह देखना चाहती है</I> <li>Ita: <I>chi vuole lei vedere</I> <li>Lav: <I>kuru viņa grib redzēt</I> <li>Nep: <I>कासलाई उनी हेर्न चाहन्छिन्</I> <li>Nor: <I>hvem vil hun se</I> <li>Pes: <I>چه کسی را او می خواهد ببیند</I> <li>Pnb: <I>كون او ویكھنا چاندی اے</I> <li>Pol: <I>kogo ona chce widzieć</I> <li>Ron: <I>pe cine vrea ea sã vadă</I> <li>Rus: <I>кого она хочет видеть</I> <li>Snd: <I>ڪیر ھو۶ ڏسڻ چاھی ٿی</I> <li>Spa: <I>quién quiere ella ver</I> <li>Swe: <I>vem vill hon se</I> <li>Tha: <I>หล่อนอยากเห็นใคร</I> <li>Urd: <I>كس كو وہ دیكھنا چاہتی ہے</I> </ul> </div> </div></TD>+</TR>+<TR>+<TD><CODE>mkVPSlash</CODE></TD>+<TD><A HREF="#V2V" TITLE="V2V - verb with NP and V complement">V2V</A> <CODE>-></CODE> <A HREF="#NP" TITLE="NP - noun phrase (subject or object)">NP</A> <CODE>-></CODE> <A HREF="#VPSlash" TITLE="VPSlash - verb phrase missing complement">VPSlash</A> <CODE>-></CODE> <A HREF="#VPSlash" TITLE="VPSlash - verb phrase missing complement">VPSlash</A></TD>+<TD><div class=reveal> <I>whom does she beg me to see</I> <div class=popup> <ul> <li>API: <CODE>mkQCl who_IP (mkClSlash she_NP (mkVPSlash beg_V2V i_NP (mkVPSlash see_V2)))</CODE> <li>Afr: <I>wie smeek sy my om te sien</I> <li>Bul: <I>кого моли мен да видя тя</I> <li>Cat: <I>qui em demana ella a veure</I> <li>Dan: <I>hvem beder hun mig at se</I> <li>Dut: <I>wie smeekt ze me te zien</I> <li>Eng: <I>whom does she beg me to see</I> <li>Fin: <I>kenet hän pyytää minua näkemään</I> <li>Fre: <I>qui me demande elle à voir</I> <li>Ger: <I>wen bittet sie mich zu sehen</I> <li>Hin: <I>किस को वह मुझ से देखना भीख मांगती है</I> <li>Ita: <I>chi mi prega lei di vedere</I> <li>Lav: <I>kuru viņa lūdz redzēt mani</I> <li>Nep: <I>कासलाई उनी म लाई हेर्न आग्रह गर्छिन्</I> <li>Nor: <I>hvem ber hun meg att se</I> <li>Pes: <I>چه کسی را او از من خواهش می کند ببیند</I> <li>Pnb: <I>كون او مینوں سے ویكھنا مانگدی اے</I> <li>Pol: <I>constant not found: beg_V2V</I> <li>Ron: <I>pe cine mă roagă ea sã văd</I> <li>Rus: <I>кого она просит меня видеть</I> <li>Snd: <I>constant not found: beg_V2V</I> <li>Spa: <I>quién me roga ella a ver</I> <li>Swe: <I>vem ber hon mig att se</I> <li>Tha: <I>หล่อนขอเห็นฉันใคร</I> <li>Urd: <I>كس كو وہ مجھ سے دیكھنا التجا كرتی ہے</I> </ul> </div> </div></TD>+</TR>+</TABLE>++<A NAME="VQ"></A>+<H2>VQ - question-complement verb</H2>++<P>+Lexical category, constructors given in+<A HREF="#RParadigms">lexical paradigms</A>.+</P>++<A NAME="VS"></A>+<H2>VS - sentence-complement verb</H2>++<P>+Lexical category, constructors given in+<A HREF="#RParadigms">lexical paradigms</A>.+</P>++<A NAME="VV"></A>+<H2>VV - verb-phrase-complement verb</H2>++<TABLE BORDER="1" CELLPADDING="4">+<TR>+<TH>Function</TH>+<TH>Type</TH>+<TH COLSPAN="2">Example</TH>+</TR>+<TR>+<TD><CODE>can8know_VV</CODE></TD>+<TD><A HREF="#VV" TITLE="VV - verb-phrase-complement verb">VV</A></TD>+<TD><div class=reveal> <I>to be able to sleep</I> <div class=popup> <ul> <li>API: <CODE>mkUtt (mkVP can8know_VV (mkVP sleep_V))</CODE> <li>Afr: <I>te slaap te kan</I> <li>Bul: <I>да може да спи</I> <li>Cat: <I>saber dormir</I> <li>Dan: <I>at kunne sove</I> <li>Dut: <I>slapen kunnen</I> <li>Eng: <I>to be able to sleep</I> <li>Fin: <I>osata nukkua</I> <li>Fre: <I>savoir dormir</I> <li>Ger: <I>schlafen können</I> <li>Hin: <I>सो सकना</I> <li>Ita: <I>sapere dormire</I> <li>Lav: <I>constant not found: can8know_VV</I> <li>Nep: <I>सुत्न सक्नु</I> <li>Nor: <I>å kunne sove</I> <li>Pes: <I>constant not found: can8know_VV</I> <li>Pnb: <I>سكنا سون</I> <li>Pol: <I>umieć spać</I> <li>Ron: <I>sã poată sã doarmă</I> <li>Rus: <I>мочь спать</I> <li>Snd: <I>سگھڻ سمھن</I> <li>Spa: <I>saber dormir</I> <li>Swe: <I>att kunna sova</I> <li>Tha: <I>นอนหลับเป็น</I> <li>Urd: <I>سو سكنا</I> </ul> </div> </div></TD>+</TR>+<TR>+<TD><CODE>can_VV</CODE></TD>+<TD><A HREF="#VV" TITLE="VV - verb-phrase-complement verb">VV</A></TD>+<TD><div class=reveal> <I>to be able to sleep</I> <div class=popup> <ul> <li>API: <CODE>mkUtt (mkVP can_VV (mkVP sleep_V))</CODE> <li>Afr: <I>te slaap te kan</I> <li>Bul: <I>да може да спи</I> <li>Cat: <I>poder dormir</I> <li>Dan: <I>at kunne sove</I> <li>Dut: <I>slapen kunnen</I> <li>Eng: <I>to be able to sleep</I> <li>Fin: <I>voida nukkua</I> <li>Fre: <I>pouvoir dormir</I> <li>Ger: <I>schlafen können</I> <li>Hin: <I>सो सकना</I> <li>Ita: <I>potere dormire</I> <li>Lav: <I>constant not found: can_VV</I> <li>Nep: <I>सुत्न सक्नु</I> <li>Nor: <I>å kunne sove</I> <li>Pes: <I>constant not found: can_VV</I> <li>Pnb: <I>سكنا سون</I> <li>Pol: <I>móc spać</I> <li>Ron: <I>sã poată sã doarmă</I> <li>Rus: <I>мочь спать</I> <li>Snd: <I>سگھڻ سمھن</I> <li>Spa: <I>poder dormir</I> <li>Swe: <I>att kunna sova</I> <li>Tha: <I>นอนหลับได้</I> <li>Urd: <I>سو سكنا</I> </ul> </div> </div></TD>+</TR>+<TR>+<TD><CODE>must_VV</CODE></TD>+<TD><A HREF="#VV" TITLE="VV - verb-phrase-complement verb">VV</A></TD>+<TD><div class=reveal> <I>have to</I> <div class=popup> <ul> <li>API: <CODE>must_VV</CODE> <li>Afr: <I>moet</I> <li>Bul: <I>трябва</I> <li>Cat: <I>haver</I> <li>Dan: <I>må</I> <li>Dut: <I>moeten</I> <li>Eng: <I>have to</I> <li>Fin: <I>täytyä</I> <li>Fre: <I>devoir</I> <li>Ger: <I>zu müssen</I> <li>Hin: <I>constant not found: must_VV</I> <li>Ita: <I>dover</I> <li>Lav: <I>constant not found: must_VV</I> <li>Nep: <I>अवशएकोछु</I> <li>Nor: <I>må</I> <li>Pes: <I>constant not found: must_VV</I> <li>Pnb: <I>constant not found: must_VV</I> <li>Pol: <I>ResPol.Imperfective</I> <li>Ron: <I>trebui</I> <li>Rus: <I>должен</I> <li>Snd: <I>constant not found: must_VV</I> <li>Spa: <I>deber</I> <li>Swe: <I>måste</I> <li>Tha: <I>ต้อง</I> <li>Urd: <I>constant not found: must_VV</I> </ul> </div> </div></TD>+</TR>+<TR>+<TD><CODE>want_VV</CODE></TD>+<TD><A HREF="#VV" TITLE="VV - verb-phrase-complement verb">VV</A></TD>+<TD><div class=reveal> <I>want</I> <div class=popup> <ul> <li>API: <CODE>want_VV</CODE> <li>Afr: <I>wil</I> <li>Bul: <I>искам</I> <li>Cat: <I>voler</I> <li>Dan: <I>vil</I> <li>Dut: <I>willen</I> <li>Eng: <I>want</I> <li>Fin: <I>tahtoa</I> <li>Fre: <I>vouloir</I> <li>Ger: <I>zu wollen</I> <li>Hin: <I>चाहूँ</I> <li>Ita: <I>voler</I> <li>Lav: <I>gribēt</I> <li>Nep: <I>चाहन्एकोछु</I> <li>Nor: <I>vil</I> <li>Pes: <I>خواسته ام</I> <li>Pnb: <I>چاواں</I> <li>Pol: <I>ResPol.Dual</I> <li>Ron: <I>vrea</I> <li>Rus: <I>хочу</I> <li>Snd: <I>چاھان</I> <li>Spa: <I>querer</I> <li>Swe: <I>vill</I> <li>Tha: <I>อยาก</I> <li>Urd: <I>چاہوں</I> </ul> </div> </div></TD>+</TR>+</TABLE>++<A NAME="Voc"></A>+<H2>Voc - vocative or "please"</H2>++<TABLE BORDER="1" CELLPADDING="4">+<TR>+<TH>Function</TH>+<TH>Type</TH>+<TH COLSPAN="2">Example</TH>+</TR>+<TR>+<TD><CODE>mkVoc</CODE></TD>+<TD><A HREF="#NP" TITLE="NP - noun phrase (subject or object)">NP</A> <CODE>-></CODE> <A HREF="#Voc" TITLE="Voc - vocative or "please"">Voc</A></TD>+<TD><div class=reveal> <I>yes , my friend</I> <div class=popup> <ul> <li>API: <CODE>mkPhr yes_Utt (mkVoc (mkNP i_Pron friend_N))</CODE> <li>Afr: <I>ja , my vriend</I> <li>Bul: <I>да , мой приятелю</I> <li>Cat: <I>sí , el meu amic</I> <li>Dan: <I>ja , min ven</I> <li>Dut: <I>ja , mijn vriend</I> <li>Eng: <I>yes , my friend</I> <li>Fin: <I>kyllä , minun ystäväni</I> <li>Fre: <I>oui , mon ami</I> <li>Ger: <I>ja , mein Freund</I> <li>Hin: <I>हाँ मेरा दोस्त</I> <li>Ita: <I>sì , il mio amico</I> <li>Lav: <I>jā , mans draug</I> <li>Nep: <I>हजुर मेरो साथी</I> <li>Nor: <I>ja , min venn</I> <li>Pes: <I>بله دوست من</I> <li>Pnb: <I>ہاں میرا یار</I> <li>Pol: <I>tak , mój przyjacielu</I> <li>Ron: <I>da , prietenul meu</I> <li>Rus: <I>Да , мой друг</I> <li>Snd: <I>ھا دوست</I> <li>Spa: <I>sí , mi amigo</I> <li>Swe: <I>ja , min vän</I> <li>Tha: <I>ใช่เพี่อนของฉัน</I> <li>Urd: <I>ہاں میرا دوست</I> </ul> </div> </div></TD>+</TR>+<TR>+<TD><CODE>please_Voc</CODE></TD>+<TD><A HREF="#Voc" TITLE="Voc - vocative or "please"">Voc</A></TD>+<TD><div class=reveal> <I>please</I> <div class=popup> <ul> <li>API: <CODE>please_Voc</CODE> <li>Afr: <I>asseblief</I> <li>Bul: <I>моля</I> <li>Cat: <I>sisplau</I> <li>Dan: <I>tak</I> <li>Dut: <I>alsjeblieft</I> <li>Eng: <I>please</I> <li>Fin: <I>ole hyvä</I> <li>Fre: <I>s'il vous plaît</I> <li>Ger: <I>bitte</I> <li>Hin: <I>constant not found: please_Voc</I> <li>Ita: <I>per favore</I> <li>Lav: <I>lūdzu</I> <li>Nep: <I>कृपया</I> <li>Nor: <I>takk</I> <li>Pes: <I>لطفاً</I> <li>Pnb: <I>مہربانi</I> <li>Pol: <I>proszę</I> <li>Ron: <I>vă rog</I> <li>Rus: <I>пожалуйста</I> <li>Snd: <I>مھربانی</I> <li>Spa: <I>por favor</I> <li>Swe: <I>tack</I> <li>Tha: <I>ขอ</I> <li>Urd: <I>مہربانی</I> </ul> </div> </div></TD>+</TR>+</TABLE>++<A NAME="toc83"></A>+<H1>Lexical Paradigms</H1>++<A NAME="toc84"></A>+<H2>Paradigms for Afrikaans</H2>++<P>+<a name="RParadigms"></a>+</P>+<P>+source <A HREF="http://www.grammaticalframework.org/lib/src/afrikaans/ParadigmsAfr.gf"><CODE>../src/afrikaans/ParadigmsAfr.gf</CODE></A>+</P>++<TABLE BORDER="1" CELLPADDING="4">+<TR>+<TH>Function</TH>+<TH>Type</TH>+<TH COLSPAN="2">Explanation</TH>+</TR>+<TR>+<TD><CODE>de</CODE></TD>+<TD><A HREF="#Gender">Gender</A></TD>+<TD><I>non-neutrum</I></TD>+</TR>+<TR>+<TD><CODE>het</CODE></TD>+<TD><A HREF="#Gender">Gender</A></TD>+<TD><I>neutrum</I></TD>+</TR>+<TR>+<TD><CODE>--die</CODE></TD>+<TD><A HREF="#Gender">Gender</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>mkN</CODE></TD>+<TD><CODE>(muis</CODE> <CODE>:</CODE> <CODE>Str)</CODE> <CODE>-></CODE> <A HREF="#N" TITLE="N - common noun">N</A></TD>+<TD><I>de muis-muisen, with some predictable exceptions</I></TD>+</TR>+<TR>+<TD><CODE>mkN</CODE></TD>+<TD><CODE>(bit</CODE> <CODE>:</CODE> <CODE>Str)</CODE> <CODE>-></CODE> <A HREF="#Gender">Gender</A> <CODE>-></CODE> <A HREF="#N" TITLE="N - common noun">N</A></TD>+<TD><I>if gender is not predictable</I></TD>+</TR>+<TR>+<TD><CODE>mkN</CODE></TD>+<TD><CODE>(gat,gaten</CODE> <CODE>:</CODE> <CODE>Str)</CODE> <CODE>-></CODE> <A HREF="#Gender">Gender</A> <CODE>-></CODE> <A HREF="#N" TITLE="N - common noun">N</A></TD>+<TD><I>worst-case for nouns</I></TD>+</TR>+<TR>+<TD><CODE>mkN2</CODE></TD>+<TD><A HREF="#N" TITLE="N - common noun">N</A> <CODE>-></CODE> <A HREF="#N2" TITLE="N2 - relational noun">N2</A></TD>+<TD><I>relational noun with preposition van</I></TD>+</TR>+<TR>+<TD><CODE>mkN2</CODE></TD>+<TD><A HREF="#N" TITLE="N - common noun">N</A> <CODE>-></CODE> <A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A> <CODE>-></CODE> <A HREF="#N2" TITLE="N2 - relational noun">N2</A></TD>+<TD><I>other preposition than van</I></TD>+</TR>+<TR>+<TD><CODE>mkN3</CODE></TD>+<TD><A HREF="#N" TITLE="N - common noun">N</A> <CODE>-></CODE> <A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A> <CODE>-></CODE> <A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A> <CODE>-></CODE> <A HREF="#N3" TITLE="N3 - three-place relational noun">N3</A></TD>+<TD><I>e.g. afstand + van + naar</I></TD>+</TR>+<TR>+<TD><CODE>mkPN</CODE></TD>+<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#PN" TITLE="PN - proper name">PN</A></TD>+<TD><I>proper name</I></TD>+</TR>+<TR>+<TD><CODE>mkA</CODE></TD>+<TD><CODE>(vers</CODE> <CODE>:</CODE> <CODE>Str)</CODE> <CODE>-></CODE> <A HREF="#A" TITLE="A - one-place adjective">A</A></TD>+<TD><I>regular adjective</I></TD>+</TR>+<TR>+<TD><CODE>mkA</CODE></TD>+<TD><CODE>(sag,</CODE> <CODE>sagte</CODE> <CODE>:</CODE> <CODE>Str)</CODE> <CODE>-></CODE> <A HREF="#A" TITLE="A - one-place adjective">A</A> <CODE>--"semi-irregular"</CODE></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>mkA</CODE></TD>+<TD><CODE>(goed,goede,goeds,beter,best</CODE> <CODE>:</CODE> <CODE>Str)</CODE> <CODE>-></CODE> <A HREF="#A" TITLE="A - one-place adjective">A</A></TD>+<TD><I>irregular adjective</I></TD>+</TR>+<TR>+<TD><CODE>invarA</CODE></TD>+<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#A" TITLE="A - one-place adjective">A</A></TD>+<TD><I>adjective with just one form</I></TD>+</TR>+<TR>+<TD><CODE>mkA2</CODE></TD>+<TD><A HREF="#A" TITLE="A - one-place adjective">A</A> <CODE>-></CODE> <A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A> <CODE>-></CODE> <A HREF="#A2" TITLE="A2 - two-place adjective">A2</A></TD>+<TD><I>e.g. getrouwd + met</I></TD>+</TR>+<TR>+<TD><CODE>mkAdv</CODE></TD>+<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#Adv" TITLE="Adv - verb-phrase-modifying adverb">Adv</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>mkPrep</CODE></TD>+<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>van_Prep</CODE></TD>+<TD><A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>te_Prep</CODE></TD>+<TD><A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>mkV</CODE></TD>+<TD><CODE>(aaien</CODE> <CODE>:</CODE> <CODE>Str)</CODE> <CODE>-></CODE> <A HREF="#V" TITLE="V - one-place verb">V</A></TD>+<TD><I>regular verb</I></TD>+</TR>+<TR>+<TD><CODE>mkV</CODE></TD>+<TD><CODE>(breken,brak,gebroken</CODE> <CODE>:</CODE> <CODE>Str)</CODE> <CODE>-></CODE> <A HREF="#V" TITLE="V - one-place verb">V</A></TD>+<TD><I>theme of irregular verb</I></TD>+</TR>+<TR>+<TD><CODE>mkV</CODE></TD>+<TD><CODE>(breken,brak,braken,gebroken</CODE> <CODE>:</CODE> <CODE>Str)</CODE> <CODE>-></CODE> <A HREF="#V" TITLE="V - one-place verb">V</A></TD>+<TD><I>also past plural irregular</I></TD>+</TR>+<TR>+<TD><CODE>mkV</CODE></TD>+<TD><CODE>(aai,aait,aaien,aaide,aaide,aaiden,geaaid</CODE> <CODE>:</CODE> <CODE>Str)</CODE> <CODE>-></CODE> <A HREF="#V" TITLE="V - one-place verb">V</A></TD>+<TD><I>worst-case verb</I></TD>+</TR>+<TR>+<TD><CODE>mkV</CODE></TD>+<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#V" TITLE="V - one-place verb">V</A> <CODE>-></CODE> <A HREF="#V" TITLE="V - one-place verb">V</A></TD>+<TD><I>add movable suffix, e.g. af + stappen</I></TD>+</TR>+<TR>+<TD><CODE>zijnV</CODE></TD>+<TD><A HREF="#V" TITLE="V - one-place verb">V</A> <CODE>-></CODE> <A HREF="#V" TITLE="V - one-place verb">V</A></TD>+<TD><I>force zijn as auxiliary (default hebben)</I></TD>+</TR>+<TR>+<TD><CODE>reflV</CODE></TD>+<TD><A HREF="#V" TITLE="V - one-place verb">V</A> <CODE>-></CODE> <A HREF="#V" TITLE="V - one-place verb">V</A></TD>+<TD><I>reflexive verb e.g. zich afvragen</I></TD>+</TR>+<TR>+<TD><CODE>mkV3</CODE></TD>+<TD><A HREF="#V" TITLE="V - one-place verb">V</A> <CODE>-></CODE> <A HREF="#V3" TITLE="V3 - three-place verb">V3</A></TD>+<TD><I>geven,(accusative),(dative)</I></TD>+</TR>+<TR>+<TD><CODE>mkV3</CODE></TD>+<TD><A HREF="#V" TITLE="V - one-place verb">V</A> <CODE>-></CODE> <A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A> <CODE>-></CODE> <A HREF="#V3" TITLE="V3 - three-place verb">V3</A></TD>+<TD><I>sturen,(accusative),naar</I></TD>+</TR>+<TR>+<TD><CODE>mkV3</CODE></TD>+<TD><A HREF="#V" TITLE="V - one-place verb">V</A> <CODE>-></CODE> <A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A> <CODE>-></CODE> <A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A> <CODE>-></CODE> <A HREF="#V3" TITLE="V3 - three-place verb">V3</A></TD>+<TD><I>praten, met, over</I></TD>+</TR>+<TR>+<TD><CODE>mkVS</CODE></TD>+<TD><A HREF="#V" TITLE="V - one-place verb">V</A> <CODE>-></CODE> <A HREF="#VS" TITLE="VS - sentence-complement verb">VS</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>mkV2S</CODE></TD>+<TD><A HREF="#V" TITLE="V - one-place verb">V</A> <CODE>-></CODE> <A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A> <CODE>-></CODE> <A HREF="#V2S" TITLE="V2S - verb with NP and S complement">V2S</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>mkVV</CODE></TD>+<TD><A HREF="#V" TITLE="V - one-place verb">V</A> <CODE>-></CODE> <A HREF="#VV" TITLE="VV - verb-phrase-complement verb">VV</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>mkV2V</CODE></TD>+<TD><A HREF="#V" TITLE="V - one-place verb">V</A> <CODE>-></CODE> <A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A> <CODE>-></CODE> <A HREF="#V2V" TITLE="V2V - verb with NP and V complement">V2V</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>mkVA</CODE></TD>+<TD><A HREF="#V" TITLE="V - one-place verb">V</A> <CODE>-></CODE> <A HREF="#VA" TITLE="VA - adjective-complement verb">VA</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>mkV2A</CODE></TD>+<TD><A HREF="#V" TITLE="V - one-place verb">V</A> <CODE>-></CODE> <A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A> <CODE>-></CODE> <A HREF="#V2A" TITLE="V2A - verb with NP and AP complement">V2A</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>mkVQ</CODE></TD>+<TD><A HREF="#V" TITLE="V - one-place verb">V</A> <CODE>-></CODE> <A HREF="#VQ" TITLE="VQ - question-complement verb">VQ</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>mkV2Q</CODE></TD>+<TD><A HREF="#V" TITLE="V - one-place verb">V</A> <CODE>-></CODE> <A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A> <CODE>-></CODE> <A HREF="#V2Q" TITLE="V2Q - verb with NP and Q complement">V2Q</A></TD>+<TD><I>-</I></TD>+</TR>+</TABLE>++<A NAME="toc85"></A>+<H2>Paradigms for Bulgarian</H2>++<P>+<a name="RParadigms"></a>+</P>+<P>+source <A HREF="http://www.grammaticalframework.org/lib/src/bulgarian/ParadigmsBul.gf"><CODE>../src/bulgarian/ParadigmsBul.gf</CODE></A>+</P>++<TABLE BORDER="1" CELLPADDING="4">+<TR>+<TH>Function</TH>+<TH>Type</TH>+<TH COLSPAN="2">Explanation</TH>+</TR>+<TR>+<TD><CODE>mkN001</CODE></TD>+<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#N" TITLE="N - common noun">N</A></TD>+<TD><I>numbers refer to Krustev, Bulg. Morph. in 187 Tables</I></TD>+</TR>+<TR>+<TD><CODE>mkN002</CODE></TD>+<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#N" TITLE="N - common noun">N</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>mkN002a</CODE></TD>+<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#N" TITLE="N - common noun">N</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>mkN003</CODE></TD>+<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#N" TITLE="N - common noun">N</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>mkN004</CODE></TD>+<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#N" TITLE="N - common noun">N</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>mkN005</CODE></TD>+<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#N" TITLE="N - common noun">N</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>mkN006</CODE></TD>+<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#N" TITLE="N - common noun">N</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>mkN007</CODE></TD>+<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#N" TITLE="N - common noun">N</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>mkN007b</CODE></TD>+<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#N" TITLE="N - common noun">N</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>mkN007a</CODE></TD>+<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#N" TITLE="N - common noun">N</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>mkN008</CODE></TD>+<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#N" TITLE="N - common noun">N</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>mkN008b</CODE></TD>+<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#N" TITLE="N - common noun">N</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>mkN008c</CODE></TD>+<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#N" TITLE="N - common noun">N</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>mkN008a</CODE></TD>+<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#N" TITLE="N - common noun">N</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>mkN009</CODE></TD>+<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#N" TITLE="N - common noun">N</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>mkN009a</CODE></TD>+<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#N" TITLE="N - common noun">N</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>mkN010</CODE></TD>+<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#N" TITLE="N - common noun">N</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>mkN011</CODE></TD>+<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#N" TITLE="N - common noun">N</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>mkN012</CODE></TD>+<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#N" TITLE="N - common noun">N</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>mkN013</CODE></TD>+<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#N" TITLE="N - common noun">N</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>mkN014</CODE></TD>+<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#N" TITLE="N - common noun">N</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>mkN014a</CODE></TD>+<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#N" TITLE="N - common noun">N</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>mkN015</CODE></TD>+<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#N" TITLE="N - common noun">N</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>mkN015a</CODE></TD>+<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#N" TITLE="N - common noun">N</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>mkN016</CODE></TD>+<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#N" TITLE="N - common noun">N</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>mkN016a</CODE></TD>+<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#N" TITLE="N - common noun">N</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>mkN017</CODE></TD>+<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#N" TITLE="N - common noun">N</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>mkN018</CODE></TD>+<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#N" TITLE="N - common noun">N</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>mkN018a</CODE></TD>+<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#N" TITLE="N - common noun">N</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>mkN019</CODE></TD>+<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#N" TITLE="N - common noun">N</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>mkN019a</CODE></TD>+<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#N" TITLE="N - common noun">N</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>mkN020</CODE></TD>+<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#N" TITLE="N - common noun">N</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>mkN021</CODE></TD>+<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#N" TITLE="N - common noun">N</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>mkN022</CODE></TD>+<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#N" TITLE="N - common noun">N</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>mkN023</CODE></TD>+<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#N" TITLE="N - common noun">N</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>mkN024a</CODE></TD>+<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#N" TITLE="N - common noun">N</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>mkN024</CODE></TD>+<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#N" TITLE="N - common noun">N</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>mkN025</CODE></TD>+<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#N" TITLE="N - common noun">N</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>mkN026</CODE></TD>+<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#N" TITLE="N - common noun">N</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>mkN027</CODE></TD>+<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#N" TITLE="N - common noun">N</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>mkN028</CODE></TD>+<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#N" TITLE="N - common noun">N</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>mkN028a</CODE></TD>+<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#N" TITLE="N - common noun">N</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>mkN029</CODE></TD>+<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#N" TITLE="N - common noun">N</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>mkN030</CODE></TD>+<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#N" TITLE="N - common noun">N</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>mkN031</CODE></TD>+<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#N" TITLE="N - common noun">N</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>mkN031a</CODE></TD>+<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#N" TITLE="N - common noun">N</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>mkN032</CODE></TD>+<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#N" TITLE="N - common noun">N</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>mkN032a</CODE></TD>+<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#N" TITLE="N - common noun">N</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>mkN033</CODE></TD>+<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#N" TITLE="N - common noun">N</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>mkN034</CODE></TD>+<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#N" TITLE="N - common noun">N</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>mkN035</CODE></TD>+<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#N" TITLE="N - common noun">N</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>mkN035a</CODE></TD>+<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#N" TITLE="N - common noun">N</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>mkN036</CODE></TD>+<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#N" TITLE="N - common noun">N</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>mkN037</CODE></TD>+<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#N" TITLE="N - common noun">N</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>mkN038</CODE></TD>+<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#N" TITLE="N - common noun">N</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>mkN039</CODE></TD>+<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#N" TITLE="N - common noun">N</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>mkN040</CODE></TD>+<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#N" TITLE="N - common noun">N</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>mkN040a</CODE></TD>+<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#N" TITLE="N - common noun">N</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>mkN041</CODE></TD>+<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#N" TITLE="N - common noun">N</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>mkN041a</CODE></TD>+<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#N" TITLE="N - common noun">N</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>mkN041b</CODE></TD>+<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#N" TITLE="N - common noun">N</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>mkN042</CODE></TD>+<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#N" TITLE="N - common noun">N</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>mkN043</CODE></TD>+<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#N" TITLE="N - common noun">N</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>mkN043a</CODE></TD>+<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#N" TITLE="N - common noun">N</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>mkN044</CODE></TD>+<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#N" TITLE="N - common noun">N</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>mkN045</CODE></TD>+<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#N" TITLE="N - common noun">N</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>mkN046</CODE></TD>+<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#N" TITLE="N - common noun">N</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>mkN047</CODE></TD>+<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#N" TITLE="N - common noun">N</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>mkN048</CODE></TD>+<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#N" TITLE="N - common noun">N</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>mkN049</CODE></TD>+<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#N" TITLE="N - common noun">N</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>mkN050</CODE></TD>+<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#N" TITLE="N - common noun">N</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>mkN051</CODE></TD>+<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#N" TITLE="N - common noun">N</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>mkN052</CODE></TD>+<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#N" TITLE="N - common noun">N</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>mkN052a</CODE></TD>+<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#N" TITLE="N - common noun">N</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>mkN053</CODE></TD>+<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#N" TITLE="N - common noun">N</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>mkN054</CODE></TD>+<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#N" TITLE="N - common noun">N</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>mkN055</CODE></TD>+<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#N" TITLE="N - common noun">N</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>mkN056</CODE></TD>+<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#N" TITLE="N - common noun">N</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>mkN057</CODE></TD>+<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#N" TITLE="N - common noun">N</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>mkN057a</CODE></TD>+<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#N" TITLE="N - common noun">N</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>mkN058</CODE></TD>+<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#N" TITLE="N - common noun">N</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>mkN059</CODE></TD>+<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#N" TITLE="N - common noun">N</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>mkN060</CODE></TD>+<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#N" TITLE="N - common noun">N</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>mkN061</CODE></TD>+<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#N" TITLE="N - common noun">N</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>mkN062</CODE></TD>+<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#N" TITLE="N - common noun">N</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>mkN063</CODE></TD>+<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#N" TITLE="N - common noun">N</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>mkN064</CODE></TD>+<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#N" TITLE="N - common noun">N</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>mkN065</CODE></TD>+<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#N" TITLE="N - common noun">N</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>mkN066</CODE></TD>+<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#N" TITLE="N - common noun">N</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>mkN067</CODE></TD>+<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#N" TITLE="N - common noun">N</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>mkN068</CODE></TD>+<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#N" TITLE="N - common noun">N</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>mkN069</CODE></TD>+<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#N" TITLE="N - common noun">N</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>mkN070</CODE></TD>+<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#N" TITLE="N - common noun">N</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>mkN071</CODE></TD>+<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#N" TITLE="N - common noun">N</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>mkN072</CODE></TD>+<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#N" TITLE="N - common noun">N</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>mkN073</CODE></TD>+<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#N" TITLE="N - common noun">N</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>mkN074</CODE></TD>+<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#N" TITLE="N - common noun">N</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>mkN075</CODE></TD>+<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#N" TITLE="N - common noun">N</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>mkA076</CODE></TD>+<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#A" TITLE="A - one-place adjective">A</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>mkA077</CODE></TD>+<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#A" TITLE="A - one-place adjective">A</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>mkA078</CODE></TD>+<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#A" TITLE="A - one-place adjective">A</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>mkA079</CODE></TD>+<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#A" TITLE="A - one-place adjective">A</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>mkA080</CODE></TD>+<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#A" TITLE="A - one-place adjective">A</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>mkA081</CODE></TD>+<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#A" TITLE="A - one-place adjective">A</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>mkA082</CODE></TD>+<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#A" TITLE="A - one-place adjective">A</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>mkA082a</CODE></TD>+<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#A" TITLE="A - one-place adjective">A</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>mkA083</CODE></TD>+<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#A" TITLE="A - one-place adjective">A</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>mkA084</CODE></TD>+<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#A" TITLE="A - one-place adjective">A</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>mkA084a</CODE></TD>+<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#A" TITLE="A - one-place adjective">A</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>mkA085</CODE></TD>+<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#A" TITLE="A - one-place adjective">A</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>mkA086</CODE></TD>+<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#A" TITLE="A - one-place adjective">A</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>mkA087</CODE></TD>+<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#A" TITLE="A - one-place adjective">A</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>mkA088</CODE></TD>+<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#A" TITLE="A - one-place adjective">A</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>mkA089a</CODE></TD>+<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#A" TITLE="A - one-place adjective">A</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>mkV142</CODE></TD>+<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#VTable">VTable</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>mkV143</CODE></TD>+<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#VTable">VTable</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>mkV144</CODE></TD>+<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#VTable">VTable</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>mkV145</CODE></TD>+<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#VTable">VTable</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>mkV145a</CODE></TD>+<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#VTable">VTable</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>mkV145b</CODE></TD>+<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#VTable">VTable</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>mkV146</CODE></TD>+<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#VTable">VTable</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>mkV146a</CODE></TD>+<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#VTable">VTable</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>mkV147</CODE></TD>+<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#VTable">VTable</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>mkV148</CODE></TD>+<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#VTable">VTable</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>mkV149</CODE></TD>+<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#VTable">VTable</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>mkV150</CODE></TD>+<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#VTable">VTable</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>mkV150a</CODE></TD>+<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#VTable">VTable</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>mkV151</CODE></TD>+<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#VTable">VTable</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>mkV152</CODE></TD>+<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#VTable">VTable</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>mkV152a</CODE></TD>+<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#VTable">VTable</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>mkV153</CODE></TD>+<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#VTable">VTable</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>mkV154</CODE></TD>+<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#VTable">VTable</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>mkV155</CODE></TD>+<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#VTable">VTable</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>mkV156</CODE></TD>+<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#VTable">VTable</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>mkV157</CODE></TD>+<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#VTable">VTable</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>mkV158</CODE></TD>+<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#VTable">VTable</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>mkV159</CODE></TD>+<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#VTable">VTable</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>mkV160</CODE></TD>+<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#VTable">VTable</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>mkV160a</CODE></TD>+<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#VTable">VTable</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>mkV161</CODE></TD>+<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#VTable">VTable</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>mkV161a</CODE></TD>+<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#VTable">VTable</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>mkV162</CODE></TD>+<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#VTable">VTable</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>mkV163</CODE></TD>+<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#VTable">VTable</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>mkV164</CODE></TD>+<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#VTable">VTable</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>mkV165</CODE></TD>+<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#VTable">VTable</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>mkV166</CODE></TD>+<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#VTable">VTable</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>mkV167</CODE></TD>+<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#VTable">VTable</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>mkV168</CODE></TD>+<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#VTable">VTable</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>mkV169</CODE></TD>+<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#VTable">VTable</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>mkV170</CODE></TD>+<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#VTable">VTable</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>mkV171</CODE></TD>+<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#VTable">VTable</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>mkV172</CODE></TD>+<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#VTable">VTable</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>mkV173</CODE></TD>+<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#VTable">VTable</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>mkV174</CODE></TD>+<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#VTable">VTable</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>mkV175</CODE></TD>+<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#VTable">VTable</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>mkV176</CODE></TD>+<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#VTable">VTable</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>mkV177</CODE></TD>+<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#VTable">VTable</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>mkV178</CODE></TD>+<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#VTable">VTable</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>mkV179</CODE></TD>+<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#VTable">VTable</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>mkV180</CODE></TD>+<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#VTable">VTable</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>mkV181</CODE></TD>+<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#VTable">VTable</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>mkV182</CODE></TD>+<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#VTable">VTable</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>mkV183</CODE></TD>+<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#VTable">VTable</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>mkV184</CODE></TD>+<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#VTable">VTable</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>mkV185</CODE></TD>+<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#VTable">VTable</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>mkV186</CODE></TD>+<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#VTable">VTable</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>mkV187</CODE></TD>+<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#VTable">VTable</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>mkV188</CODE></TD>+<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#VTable">VTable</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>adjAdv</CODE></TD>+<TD><A HREF="#A" TITLE="A - one-place adjective">A</A> <CODE>-></CODE> <CODE>Str</CODE> <CODE>-></CODE> <A HREF="#A" TITLE="A - one-place adjective">A</A></TD>+<TD><I>-</I></TD>+</TR>+</TABLE>++<A NAME="toc86"></A>+<H2>Paradigms for Catalan</H2>++<P>+<a name="RParadigms"></a>+</P>+<P>+source <A HREF="http://www.grammaticalframework.org/lib/src/catalan/ParadigmsCat.gf"><CODE>../src/catalan/ParadigmsCat.gf</CODE></A>+</P>++<TABLE BORDER="1" CELLPADDING="4">+<TR>+<TH>Function</TH>+<TH>Type</TH>+<TH COLSPAN="2">Explanation</TH>+</TR>+<TR>+<TD><CODE>Gender</CODE></TD>+<TD><A HREF="#Type">Type</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>masculine</CODE></TD>+<TD><A HREF="#Gender">Gender</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>feminine</CODE></TD>+<TD><A HREF="#Gender">Gender</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>Number</CODE></TD>+<TD><A HREF="#Type">Type</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>singular</CODE></TD>+<TD><A HREF="#Number">Number</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>plural</CODE></TD>+<TD><A HREF="#Number">Number</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>accusative</CODE></TD>+<TD><A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A></TD>+<TD><I>direct object</I></TD>+</TR>+<TR>+<TD><CODE>genitive</CODE></TD>+<TD><A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A></TD>+<TD><I>preposition "de"</I></TD>+</TR>+<TR>+<TD><CODE>dative</CODE></TD>+<TD><A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A></TD>+<TD><I>preposition "a"</I></TD>+</TR>+<TR>+<TD><CODE>mkPrep</CODE></TD>+<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A></TD>+<TD><I>other preposition</I></TD>+</TR>+<TR>+<TD><CODE>mkN</CODE></TD>+<TD><CODE>(llum</CODE> <CODE>:</CODE> <CODE>Str)</CODE> <CODE>-></CODE> <A HREF="#N" TITLE="N - common noun">N</A></TD>+<TD><I>regular, with heuristics for plural and gender</I></TD>+</TR>+<TR>+<TD><CODE>mkN</CODE></TD>+<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#Gender">Gender</A> <CODE>-></CODE> <A HREF="#N" TITLE="N - common noun">N</A></TD>+<TD><I>force gender</I></TD>+</TR>+<TR>+<TD><CODE>mkN</CODE></TD>+<TD><CODE>(disc,discos</CODE> <CODE>:</CODE> <CODE>Str)</CODE> <CODE>-></CODE> <A HREF="#Gender">Gender</A> <CODE>-></CODE> <A HREF="#N" TITLE="N - common noun">N</A></TD>+<TD><I>worst case</I></TD>+</TR>+<TR>+<TD><CODE>compN</CODE></TD>+<TD><A HREF="#N" TITLE="N - common noun">N</A> <CODE>-></CODE> <CODE>Str</CODE> <CODE>-></CODE> <A HREF="#N" TITLE="N - common noun">N</A></TD>+<TD><I>compound, e.g. "número" + "de telèfon"</I></TD>+</TR>+<TR>+<TD><CODE>mkN2</CODE></TD>+<TD><A HREF="#N" TITLE="N - common noun">N</A> <CODE>-></CODE> <A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A> <CODE>-></CODE> <A HREF="#N2" TITLE="N2 - relational noun">N2</A></TD>+<TD><I>e.g. filla + genitive</I></TD>+</TR>+<TR>+<TD><CODE>deN2</CODE></TD>+<TD><A HREF="#N" TITLE="N - common noun">N</A> <CODE>-></CODE> <A HREF="#N2" TITLE="N2 - relational noun">N2</A></TD>+<TD><I>relation with genitive</I></TD>+</TR>+<TR>+<TD><CODE>aN2</CODE></TD>+<TD><A HREF="#N" TITLE="N - common noun">N</A> <CODE>-></CODE> <A HREF="#N2" TITLE="N2 - relational noun">N2</A></TD>+<TD><I>relation with dative</I></TD>+</TR>+<TR>+<TD><CODE>mkN3</CODE></TD>+<TD><A HREF="#N" TITLE="N - common noun">N</A> <CODE>-></CODE> <A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A> <CODE>-></CODE> <A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A> <CODE>-></CODE> <A HREF="#N3" TITLE="N3 - three-place relational noun">N3</A></TD>+<TD><I>e.g. connexió + genitive + dative</I></TD>+</TR>+<TR>+<TD><CODE>mkPN</CODE></TD>+<TD><CODE>(Anna</CODE> <CODE>:</CODE> <CODE>Str)</CODE> <CODE>-></CODE> <A HREF="#PN" TITLE="PN - proper name">PN</A></TD>+<TD><I>feminine for "-a", otherwise masculine</I></TD>+</TR>+<TR>+<TD><CODE>mkPN</CODE></TD>+<TD><CODE>(Pilar</CODE> <CODE>:</CODE> <CODE>Str)</CODE> <CODE>-></CODE> <A HREF="#Gender">Gender</A> <CODE>-></CODE> <A HREF="#PN" TITLE="PN - proper name">PN</A></TD>+<TD><I>force gender</I></TD>+</TR>+<TR>+<TD><CODE>mkA</CODE></TD>+<TD><CODE>(sol</CODE> <CODE>:</CODE> <CODE>Str)</CODE> <CODE>-></CODE> <A HREF="#A" TITLE="A - one-place adjective">A</A></TD>+<TD><I>regular</I></TD>+</TR>+<TR>+<TD><CODE>mkA</CODE></TD>+<TD><CODE>(fort,forta,forts,fortes,fortament</CODE> <CODE>:</CODE> <CODE>Str)</CODE> <CODE>-></CODE> <A HREF="#A" TITLE="A - one-place adjective">A</A></TD>+<TD><I>worst case</I></TD>+</TR>+<TR>+<TD><CODE>mkA</CODE></TD>+<TD><CODE>(bo</CODE> <CODE>:</CODE> <CODE>A)</CODE> <CODE>-></CODE> <CODE>(millor</CODE> <CODE>:</CODE> <CODE>A)</CODE> <CODE>-></CODE> <A HREF="#A" TITLE="A - one-place adjective">A</A></TD>+<TD><I>special comparison (default with "mas")</I></TD>+</TR>+<TR>+<TD><CODE>prefixA</CODE></TD>+<TD><A HREF="#A" TITLE="A - one-place adjective">A</A> <CODE>-></CODE> <A HREF="#A" TITLE="A - one-place adjective">A</A></TD>+<TD><I>adjective before noun (default: after)</I></TD>+</TR>+<TR>+<TD><CODE>mkA2</CODE></TD>+<TD><A HREF="#A" TITLE="A - one-place adjective">A</A> <CODE>-></CODE> <A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A> <CODE>-></CODE> <A HREF="#A2" TITLE="A2 - two-place adjective">A2</A></TD>+<TD><I>e.g. "casat" + dative</I></TD>+</TR>+<TR>+<TD><CODE>mkAdv</CODE></TD>+<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#Adv" TITLE="Adv - verb-phrase-modifying adverb">Adv</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>mkAdV</CODE></TD>+<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#AdV" TITLE="Adv - verb-phrase-modifying adverb">AdV</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>mkAdA</CODE></TD>+<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#AdA" TITLE="AdA - adjective-modifying adverb">AdA</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>mkV</CODE></TD>+<TD><CODE>(cantar</CODE> <CODE>:</CODE> <CODE>Str)</CODE> <CODE>-></CODE> <A HREF="#V" TITLE="V - one-place verb">V</A></TD>+<TD><I>regular in models I, IIa, IIb</I></TD>+</TR>+<TR>+<TD><CODE>mkV</CODE></TD>+<TD><A HREF="#Verbum">Verbum</A> <CODE>-></CODE> <A HREF="#V" TITLE="V - one-place verb">V</A></TD>+<TD><I>use verb constructed in BeschCat</I></TD>+</TR>+<TR>+<TD><CODE>reflV</CODE></TD>+<TD><A HREF="#V" TITLE="V - one-place verb">V</A> <CODE>-></CODE> <A HREF="#V" TITLE="V - one-place verb">V</A></TD>+<TD><I>reflexive verb</I></TD>+</TR>+<TR>+<TD><CODE>mkV2</CODE></TD>+<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#V2" TITLE="V2 - two-place verb">V2</A></TD>+<TD><I>regular verb, direct object</I></TD>+</TR>+<TR>+<TD><CODE>mkV2</CODE></TD>+<TD><A HREF="#V" TITLE="V - one-place verb">V</A> <CODE>-></CODE> <A HREF="#V2" TITLE="V2 - two-place verb">V2</A></TD>+<TD><I>any verb, direct object</I></TD>+</TR>+<TR>+<TD><CODE>mkV2</CODE></TD>+<TD><A HREF="#V" TITLE="V - one-place verb">V</A> <CODE>-></CODE> <A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A> <CODE>-></CODE> <A HREF="#V2" TITLE="V2 - two-place verb">V2</A></TD>+<TD><I>preposition for complement</I></TD>+</TR>+<TR>+<TD><CODE>mkV3</CODE></TD>+<TD><A HREF="#V" TITLE="V - one-place verb">V</A> <CODE>-></CODE> <A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A> <CODE>-></CODE> <A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A> <CODE>-></CODE> <A HREF="#V3" TITLE="V3 - three-place verb">V3</A></TD>+<TD><I>parlar, a, de</I></TD>+</TR>+<TR>+<TD><CODE>dirV3</CODE></TD>+<TD><A HREF="#V" TITLE="V - one-place verb">V</A> <CODE>-></CODE> <A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A> <CODE>-></CODE> <A HREF="#V3" TITLE="V3 - three-place verb">V3</A></TD>+<TD><I>donar,(accusative),a</I></TD>+</TR>+<TR>+<TD><CODE>dirdirV3</CODE></TD>+<TD><A HREF="#V" TITLE="V - one-place verb">V</A> <CODE>-></CODE> <A HREF="#V3" TITLE="V3 - three-place verb">V3</A></TD>+<TD><I>donar,(dative),(accusative)</I></TD>+</TR>+<TR>+<TD><CODE>mkVS</CODE></TD>+<TD><A HREF="#V" TITLE="V - one-place verb">V</A> <CODE>-></CODE> <A HREF="#VS" TITLE="VS - sentence-complement verb">VS</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>mkV2S</CODE></TD>+<TD><A HREF="#V" TITLE="V - one-place verb">V</A> <CODE>-></CODE> <A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A> <CODE>-></CODE> <A HREF="#V2S" TITLE="V2S - verb with NP and S complement">V2S</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>mkVV</CODE></TD>+<TD><A HREF="#V" TITLE="V - one-place verb">V</A> <CODE>-></CODE> <A HREF="#VV" TITLE="VV - verb-phrase-complement verb">VV</A></TD>+<TD><I>plain infinitive: "vull parlar"</I></TD>+</TR>+<TR>+<TD><CODE>deVV</CODE></TD>+<TD><A HREF="#V" TITLE="V - one-place verb">V</A> <CODE>-></CODE> <A HREF="#VV" TITLE="VV - verb-phrase-complement verb">VV</A></TD>+<TD><I>"acabar de parlar"</I></TD>+</TR>+<TR>+<TD><CODE>aVV</CODE></TD>+<TD><A HREF="#V" TITLE="V - one-place verb">V</A> <CODE>-></CODE> <A HREF="#VV" TITLE="VV - verb-phrase-complement verb">VV</A></TD>+<TD><I>"aprendre a parlar"</I></TD>+</TR>+<TR>+<TD><CODE>mkV2V</CODE></TD>+<TD><A HREF="#V" TITLE="V - one-place verb">V</A> <CODE>-></CODE> <A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A> <CODE>-></CODE> <A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A> <CODE>-></CODE> <A HREF="#V2V" TITLE="V2V - verb with NP and V complement">V2V</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>mkVA</CODE></TD>+<TD><A HREF="#V" TITLE="V - one-place verb">V</A> <CODE>-></CODE> <A HREF="#VA" TITLE="VA - adjective-complement verb">VA</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>mkV2A</CODE></TD>+<TD><A HREF="#V" TITLE="V - one-place verb">V</A> <CODE>-></CODE> <A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A> <CODE>-></CODE> <A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A> <CODE>-></CODE> <A HREF="#V2A" TITLE="V2A - verb with NP and AP complement">V2A</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>mkVQ</CODE></TD>+<TD><A HREF="#V" TITLE="V - one-place verb">V</A> <CODE>-></CODE> <A HREF="#VQ" TITLE="VQ - question-complement verb">VQ</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>mkV2Q</CODE></TD>+<TD><A HREF="#V" TITLE="V - one-place verb">V</A> <CODE>-></CODE> <A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A> <CODE>-></CODE> <A HREF="#V2Q" TITLE="V2Q - verb with NP and Q complement">V2Q</A></TD>+<TD><I>-</I></TD>+</TR>+</TABLE>++<A NAME="toc87"></A>+<H2>Paradigms for Danish</H2>++<P>+<a name="RParadigms"></a>+</P>+<P>+source <A HREF="http://www.grammaticalframework.org/lib/src/danish/ParadigmsDan.gf"><CODE>../src/danish/ParadigmsDan.gf</CODE></A>+</P>++<TABLE BORDER="1" CELLPADDING="4">+<TR>+<TH>Function</TH>+<TH>Type</TH>+<TH COLSPAN="2">Explanation</TH>+</TR>+<TR>+<TD><CODE>Gender</CODE></TD>+<TD><A HREF="#Type">Type</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>utrum</CODE></TD>+<TD><A HREF="#Gender">Gender</A></TD>+<TD><I>"en" gender</I></TD>+</TR>+<TR>+<TD><CODE>neutrum</CODE></TD>+<TD><A HREF="#Gender">Gender</A></TD>+<TD><I>"et" gender</I></TD>+</TR>+<TR>+<TD><CODE>mkPrep</CODE></TD>+<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A></TD>+<TD><I>e.g. "til"</I></TD>+</TR>+<TR>+<TD><CODE>noPrep</CODE></TD>+<TD><A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A></TD>+<TD><I>empty string</I></TD>+</TR>+<TR>+<TD><CODE>mkN</CODE></TD>+<TD><CODE>(bil</CODE> <CODE>:</CODE> <CODE>Str)</CODE> <CODE>-></CODE> <A HREF="#N" TITLE="N - common noun">N</A></TD>+<TD><I>regular noun: "en" gender with plural "-er" or "-r"</I></TD>+</TR>+<TR>+<TD><CODE>mkN</CODE></TD>+<TD><CODE>(bil,bilen</CODE> <CODE>:</CODE> <CODE>Str)</CODE> <CODE>-></CODE> <A HREF="#N" TITLE="N - common noun">N</A></TD>+<TD><I>better prediction from both singular and plural</I></TD>+</TR>+<TR>+<TD><CODE>mkN</CODE></TD>+<TD><CODE>(dreng,drengen,drenge,drengene</CODE> <CODE>:</CODE> <CODE>Str)</CODE> <CODE>-></CODE> <A HREF="#N" TITLE="N - common noun">N</A></TD>+<TD><I>worst case</I></TD>+</TR>+<TR>+<TD><CODE>mkN2</CODE></TD>+<TD><A HREF="#N" TITLE="N - common noun">N</A> <CODE>-></CODE> <A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A> <CODE>-></CODE> <A HREF="#N2" TITLE="N2 - relational noun">N2</A></TD>+<TD><I>e.g. datter + til</I></TD>+</TR>+<TR>+<TD><CODE>mkN3</CODE></TD>+<TD><A HREF="#N" TITLE="N - common noun">N</A> <CODE>-></CODE> <A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A> <CODE>-></CODE> <A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A> <CODE>-></CODE> <A HREF="#N3" TITLE="N3 - three-place relational noun">N3</A></TD>+<TD><I>e.g. forbindelse + fra + til</I></TD>+</TR>+<TR>+<TD><CODE>mkPN</CODE></TD>+<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#PN" TITLE="PN - proper name">PN</A></TD>+<TD><I>utrum gender</I></TD>+</TR>+<TR>+<TD><CODE>mkPN</CODE></TD>+<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#Gender">Gender</A> <CODE>-></CODE> <A HREF="#PN" TITLE="PN - proper name">PN</A></TD>+<TD><I>other gender</I></TD>+</TR>+<TR>+<TD><CODE>mkA</CODE></TD>+<TD><CODE>(fin</CODE> <CODE>:</CODE> <CODE>Str)</CODE> <CODE>-></CODE> <A HREF="#A" TITLE="A - one-place adjective">A</A></TD>+<TD><I>regular adjective</I></TD>+</TR>+<TR>+<TD><CODE>mkA</CODE></TD>+<TD><CODE>(fin,fint</CODE> <CODE>:</CODE> <CODE>Str)</CODE> <CODE>-></CODE> <A HREF="#A" TITLE="A - one-place adjective">A</A></TD>+<TD><I>deviant neuter</I></TD>+</TR>+<TR>+<TD><CODE>mkA</CODE></TD>+<TD><CODE>(galen,galet,galne</CODE> <CODE>:</CODE> <CODE>Str)</CODE> <CODE>-></CODE> <A HREF="#A" TITLE="A - one-place adjective">A</A></TD>+<TD><I>also deviant plural</I></TD>+</TR>+<TR>+<TD><CODE>mkA</CODE></TD>+<TD><CODE>(stor,stort,store,storre,storst</CODE> <CODE>:</CODE> <CODE>Str)</CODE> <CODE>-></CODE> <A HREF="#A" TITLE="A - one-place adjective">A</A></TD>+<TD><I>worst case</I></TD>+</TR>+<TR>+<TD><CODE>mkA</CODE></TD>+<TD><A HREF="#A" TITLE="A - one-place adjective">A</A> <CODE>-></CODE> <A HREF="#A" TITLE="A - one-place adjective">A</A></TD>+<TD><I>force comparison with mer/mest</I></TD>+</TR>+<TR>+<TD><CODE>mkA2</CODE></TD>+<TD><A HREF="#A" TITLE="A - one-place adjective">A</A> <CODE>-></CODE> <A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A> <CODE>-></CODE> <A HREF="#A2" TITLE="A2 - two-place adjective">A2</A></TD>+<TD><I>e.g. gift + med</I></TD>+</TR>+<TR>+<TD><CODE>mkAdv</CODE></TD>+<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#Adv" TITLE="Adv - verb-phrase-modifying adverb">Adv</A></TD>+<TD><I>after verb, e.g. "idag"</I></TD>+</TR>+<TR>+<TD><CODE>mkAdV</CODE></TD>+<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#AdV" TITLE="Adv - verb-phrase-modifying adverb">AdV</A></TD>+<TD><I>close to verb, e.g. "altid"</I></TD>+</TR>+<TR>+<TD><CODE>mkAdA</CODE></TD>+<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#AdA" TITLE="AdA - adjective-modifying adverb">AdA</A></TD>+<TD><I>modify adjective, e.g. "meget"</I></TD>+</TR>+<TR>+<TD><CODE>mkV</CODE></TD>+<TD><CODE>(snakke</CODE> <CODE>:</CODE> <CODE>Str)</CODE> <CODE>-></CODE> <A HREF="#V" TITLE="V - one-place verb">V</A></TD>+<TD><I>regular verb</I></TD>+</TR>+<TR>+<TD><CODE>mkV</CODE></TD>+<TD><CODE>(leve,levde</CODE> <CODE>:</CODE> <CODE>Str)</CODE> <CODE>-></CODE> <A HREF="#V" TITLE="V - one-place verb">V</A></TD>+<TD><I>also give past tense</I></TD>+</TR>+<TR>+<TD><CODE>mkV</CODE></TD>+<TD><CODE>(drikke,</CODE> <CODE>drakk,</CODE> <CODE>drukket</CODE> <CODE>:</CODE> <CODE>Str)</CODE> <CODE>-></CODE> <A HREF="#V" TITLE="V - one-place verb">V</A></TD>+<TD><I>theme of irregular verb</I></TD>+</TR>+<TR>+<TD><CODE>mkV</CODE></TD>+<TD><CODE>(spise,spiser,spises,spiste,spist,spis</CODE> <CODE>:</CODE> <CODE>Str)</CODE> <CODE>-></CODE> <A HREF="#V" TITLE="V - one-place verb">V</A></TD>+<TD><I>worst case</I></TD>+</TR>+<TR>+<TD><CODE>mkV</CODE></TD>+<TD><A HREF="#V" TITLE="V - one-place verb">V</A> <CODE>-></CODE> <CODE>Str</CODE> <CODE>-></CODE> <A HREF="#V" TITLE="V - one-place verb">V</A></TD>+<TD><I>particle verb, e.g. lukke + op</I></TD>+</TR>+<TR>+<TD><CODE>vaereV</CODE></TD>+<TD><A HREF="#V" TITLE="V - one-place verb">V</A> <CODE>-></CODE> <A HREF="#V" TITLE="V - one-place verb">V</A></TD>+<TD><I>force auxiliary "være"</I></TD>+</TR>+<TR>+<TD><CODE>depV</CODE></TD>+<TD><A HREF="#V" TITLE="V - one-place verb">V</A> <CODE>-></CODE> <A HREF="#V" TITLE="V - one-place verb">V</A></TD>+<TD><I>deponent, e.g. "undres"</I></TD>+</TR>+<TR>+<TD><CODE>reflV</CODE></TD>+<TD><A HREF="#V" TITLE="V - one-place verb">V</A> <CODE>-></CODE> <A HREF="#V" TITLE="V - one-place verb">V</A></TD>+<TD><I>reflexive, e.g. "forestille sig"</I></TD>+</TR>+<TR>+<TD><CODE>mkV2</CODE></TD>+<TD><A HREF="#V" TITLE="V - one-place verb">V</A> <CODE>-></CODE> <A HREF="#V2" TITLE="V2 - two-place verb">V2</A></TD>+<TD><I>direct object</I></TD>+</TR>+<TR>+<TD><CODE>mkV2</CODE></TD>+<TD><A HREF="#V" TITLE="V - one-place verb">V</A> <CODE>-></CODE> <A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A> <CODE>-></CODE> <A HREF="#V2" TITLE="V2 - two-place verb">V2</A></TD>+<TD><I>prepositional object</I></TD>+</TR>+<TR>+<TD><CODE>mkV3</CODE></TD>+<TD><A HREF="#V" TITLE="V - one-place verb">V</A> <CODE>-></CODE> <A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A> <CODE>-></CODE> <A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A> <CODE>-></CODE> <A HREF="#V3" TITLE="V3 - three-place verb">V3</A></TD>+<TD><I>snakke, med, om</I></TD>+</TR>+<TR>+<TD><CODE>dirV3</CODE></TD>+<TD><A HREF="#V" TITLE="V - one-place verb">V</A> <CODE>-></CODE> <A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A> <CODE>-></CODE> <A HREF="#V3" TITLE="V3 - three-place verb">V3</A></TD>+<TD><I>give,_,til</I></TD>+</TR>+<TR>+<TD><CODE>dirdirV3</CODE></TD>+<TD><A HREF="#V" TITLE="V - one-place verb">V</A> <CODE>-></CODE> <A HREF="#V3" TITLE="V3 - three-place verb">V3</A></TD>+<TD><I>give,_,_</I></TD>+</TR>+<TR>+<TD><CODE>mkVS</CODE></TD>+<TD><A HREF="#V" TITLE="V - one-place verb">V</A> <CODE>-></CODE> <A HREF="#VS" TITLE="VS - sentence-complement verb">VS</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>mkV2S</CODE></TD>+<TD><A HREF="#V" TITLE="V - one-place verb">V</A> <CODE>-></CODE> <A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A> <CODE>-></CODE> <A HREF="#V2S" TITLE="V2S - verb with NP and S complement">V2S</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>mkVV</CODE></TD>+<TD><A HREF="#V" TITLE="V - one-place verb">V</A> <CODE>-></CODE> <A HREF="#VV" TITLE="VV - verb-phrase-complement verb">VV</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>mkV2V</CODE></TD>+<TD><A HREF="#V" TITLE="V - one-place verb">V</A> <CODE>-></CODE> <A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A> <CODE>-></CODE> <A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A> <CODE>-></CODE> <A HREF="#V2V" TITLE="V2V - verb with NP and V complement">V2V</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>mkVA</CODE></TD>+<TD><A HREF="#V" TITLE="V - one-place verb">V</A> <CODE>-></CODE> <A HREF="#VA" TITLE="VA - adjective-complement verb">VA</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>mkV2A</CODE></TD>+<TD><A HREF="#V" TITLE="V - one-place verb">V</A> <CODE>-></CODE> <A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A> <CODE>-></CODE> <A HREF="#V2A" TITLE="V2A - verb with NP and AP complement">V2A</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>mkVQ</CODE></TD>+<TD><A HREF="#V" TITLE="V - one-place verb">V</A> <CODE>-></CODE> <A HREF="#VQ" TITLE="VQ - question-complement verb">VQ</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>mkV2Q</CODE></TD>+<TD><A HREF="#V" TITLE="V - one-place verb">V</A> <CODE>-></CODE> <A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A> <CODE>-></CODE> <A HREF="#V2Q" TITLE="V2Q - verb with NP and Q complement">V2Q</A></TD>+<TD><I>-</I></TD>+</TR>+</TABLE>++<A NAME="toc88"></A>+<H2>Paradigms for Dutch</H2>++<P>+<a name="RParadigms"></a>+</P>+<P>+source <A HREF="http://www.grammaticalframework.org/lib/src/dutch/ParadigmsDut.gf"><CODE>../src/dutch/ParadigmsDut.gf</CODE></A>+</P>++<TABLE BORDER="1" CELLPADDING="4">+<TR>+<TH>Function</TH>+<TH>Type</TH>+<TH COLSPAN="2">Explanation</TH>+</TR>+<TR>+<TD><CODE>de</CODE></TD>+<TD><A HREF="#Gender">Gender</A></TD>+<TD><I>non-neutrum</I></TD>+</TR>+<TR>+<TD><CODE>het</CODE></TD>+<TD><A HREF="#Gender">Gender</A></TD>+<TD><I>neutrum</I></TD>+</TR>+<TR>+<TD><CODE>mkN</CODE></TD>+<TD><CODE>(muis</CODE> <CODE>:</CODE> <CODE>Str)</CODE> <CODE>-></CODE> <A HREF="#N" TITLE="N - common noun">N</A></TD>+<TD><I>de muis-muisen, with some predictable exceptions</I></TD>+</TR>+<TR>+<TD><CODE>mkN</CODE></TD>+<TD><CODE>(bit</CODE> <CODE>:</CODE> <CODE>Str)</CODE> <CODE>-></CODE> <A HREF="#Gender">Gender</A> <CODE>-></CODE> <A HREF="#N" TITLE="N - common noun">N</A></TD>+<TD><I>if gender is not predictable</I></TD>+</TR>+<TR>+<TD><CODE>mkN</CODE></TD>+<TD><CODE>(gat,gaten</CODE> <CODE>:</CODE> <CODE>Str)</CODE> <CODE>-></CODE> <A HREF="#Gender">Gender</A> <CODE>-></CODE> <A HREF="#N" TITLE="N - common noun">N</A></TD>+<TD><I>worst-case for nouns</I></TD>+</TR>+<TR>+<TD><CODE>mkN2</CODE></TD>+<TD><A HREF="#N" TITLE="N - common noun">N</A> <CODE>-></CODE> <A HREF="#N2" TITLE="N2 - relational noun">N2</A></TD>+<TD><I>relational noun with preposition van</I></TD>+</TR>+<TR>+<TD><CODE>mkN2</CODE></TD>+<TD><A HREF="#N" TITLE="N - common noun">N</A> <CODE>-></CODE> <A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A> <CODE>-></CODE> <A HREF="#N2" TITLE="N2 - relational noun">N2</A></TD>+<TD><I>other preposition than van</I></TD>+</TR>+<TR>+<TD><CODE>mkN3</CODE></TD>+<TD><A HREF="#N" TITLE="N - common noun">N</A> <CODE>-></CODE> <A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A> <CODE>-></CODE> <A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A> <CODE>-></CODE> <A HREF="#N3" TITLE="N3 - three-place relational noun">N3</A></TD>+<TD><I>e.g. afstand + van + naar</I></TD>+</TR>+<TR>+<TD><CODE>mkPN</CODE></TD>+<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#PN" TITLE="PN - proper name">PN</A></TD>+<TD><I>proper name</I></TD>+</TR>+<TR>+<TD><CODE>mkA</CODE></TD>+<TD><CODE>(vers</CODE> <CODE>:</CODE> <CODE>Str)</CODE> <CODE>-></CODE> <A HREF="#A" TITLE="A - one-place adjective">A</A></TD>+<TD><I>regular adjective</I></TD>+</TR>+<TR>+<TD><CODE>mkA</CODE></TD>+<TD><CODE>(goed,goede,goeds,beter,best</CODE> <CODE>:</CODE> <CODE>Str)</CODE> <CODE>-></CODE> <A HREF="#A" TITLE="A - one-place adjective">A</A></TD>+<TD><I>irregular adjective</I></TD>+</TR>+<TR>+<TD><CODE>invarA</CODE></TD>+<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#A" TITLE="A - one-place adjective">A</A></TD>+<TD><I>adjective with just one form</I></TD>+</TR>+<TR>+<TD><CODE>mkA2</CODE></TD>+<TD><A HREF="#A" TITLE="A - one-place adjective">A</A> <CODE>-></CODE> <A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A> <CODE>-></CODE> <A HREF="#A2" TITLE="A2 - two-place adjective">A2</A></TD>+<TD><I>e.g. getrouwd + met</I></TD>+</TR>+<TR>+<TD><CODE>mkAdv</CODE></TD>+<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#Adv" TITLE="Adv - verb-phrase-modifying adverb">Adv</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>mkPrep</CODE></TD>+<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>van_Prep</CODE></TD>+<TD><A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>te_Prep</CODE></TD>+<TD><A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>mkV</CODE></TD>+<TD><CODE>(aaien</CODE> <CODE>:</CODE> <CODE>Str)</CODE> <CODE>-></CODE> <A HREF="#V" TITLE="V - one-place verb">V</A></TD>+<TD><I>regular verb</I></TD>+</TR>+<TR>+<TD><CODE>mkV</CODE></TD>+<TD><CODE>(aaien,aait</CODE> <CODE>:</CODE> <CODE>Str)</CODE> <CODE>-></CODE> <A HREF="#V" TITLE="V - one-place verb">V</A></TD>+<TD><I>regular verb with third person sg pres (giving stem)</I></TD>+</TR>+<TR>+<TD><CODE>mkV</CODE></TD>+<TD><CODE>(breken,brak,gebroken</CODE> <CODE>:</CODE> <CODE>Str)</CODE> <CODE>-></CODE> <A HREF="#V" TITLE="V - one-place verb">V</A></TD>+<TD><I>theme of irregular verb</I></TD>+</TR>+<TR>+<TD><CODE>mkV</CODE></TD>+<TD><CODE>(breken,brak,braken,gebroken</CODE> <CODE>:</CODE> <CODE>Str)</CODE> <CODE>-></CODE> <A HREF="#V" TITLE="V - one-place verb">V</A></TD>+<TD><I>also past plural irregular</I></TD>+</TR>+<TR>+<TD><CODE>mkV</CODE></TD>+<TD><CODE>(aai,aait,aaien,aaide,aaide,aaiden,geaaid</CODE> <CODE>:</CODE> <CODE>Str)</CODE> <CODE>-></CODE> <A HREF="#V" TITLE="V - one-place verb">V</A></TD>+<TD><I>worst-case verb</I></TD>+</TR>+<TR>+<TD><CODE>mkV</CODE></TD>+<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#V" TITLE="V - one-place verb">V</A> <CODE>-></CODE> <A HREF="#V" TITLE="V - one-place verb">V</A></TD>+<TD><I>add movable suffix, e.g. af + stappen</I></TD>+</TR>+<TR>+<TD><CODE>zijnV</CODE></TD>+<TD><A HREF="#V" TITLE="V - one-place verb">V</A> <CODE>-></CODE> <A HREF="#V" TITLE="V - one-place verb">V</A></TD>+<TD><I>force zijn as auxiliary (default hebben)</I></TD>+</TR>+<TR>+<TD><CODE>reflV</CODE></TD>+<TD><A HREF="#V" TITLE="V - one-place verb">V</A> <CODE>-></CODE> <A HREF="#V" TITLE="V - one-place verb">V</A></TD>+<TD><I>reflexive verb e.g. zich afvragen</I></TD>+</TR>+<TR>+<TD><CODE>mkV3</CODE></TD>+<TD><A HREF="#V" TITLE="V - one-place verb">V</A> <CODE>-></CODE> <A HREF="#V3" TITLE="V3 - three-place verb">V3</A></TD>+<TD><I>geven,(accusative),(dative)</I></TD>+</TR>+<TR>+<TD><CODE>mkV3</CODE></TD>+<TD><A HREF="#V" TITLE="V - one-place verb">V</A> <CODE>-></CODE> <A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A> <CODE>-></CODE> <A HREF="#V3" TITLE="V3 - three-place verb">V3</A></TD>+<TD><I>sturen,(accusative),naar</I></TD>+</TR>+<TR>+<TD><CODE>mkV3</CODE></TD>+<TD><A HREF="#V" TITLE="V - one-place verb">V</A> <CODE>-></CODE> <A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A> <CODE>-></CODE> <A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A> <CODE>-></CODE> <A HREF="#V3" TITLE="V3 - three-place verb">V3</A></TD>+<TD><I>praten, met, over</I></TD>+</TR>+<TR>+<TD><CODE>mkVS</CODE></TD>+<TD><A HREF="#V" TITLE="V - one-place verb">V</A> <CODE>-></CODE> <A HREF="#VS" TITLE="VS - sentence-complement verb">VS</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>mkV2S</CODE></TD>+<TD><A HREF="#V" TITLE="V - one-place verb">V</A> <CODE>-></CODE> <A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A> <CODE>-></CODE> <A HREF="#V2S" TITLE="V2S - verb with NP and S complement">V2S</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>mkVV</CODE></TD>+<TD><A HREF="#V" TITLE="V - one-place verb">V</A> <CODE>-></CODE> <A HREF="#VV" TITLE="VV - verb-phrase-complement verb">VV</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>mkV2V</CODE></TD>+<TD><A HREF="#V" TITLE="V - one-place verb">V</A> <CODE>-></CODE> <A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A> <CODE>-></CODE> <A HREF="#V2V" TITLE="V2V - verb with NP and V complement">V2V</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>mkVA</CODE></TD>+<TD><A HREF="#V" TITLE="V - one-place verb">V</A> <CODE>-></CODE> <A HREF="#VA" TITLE="VA - adjective-complement verb">VA</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>mkV2A</CODE></TD>+<TD><A HREF="#V" TITLE="V - one-place verb">V</A> <CODE>-></CODE> <A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A> <CODE>-></CODE> <A HREF="#V2A" TITLE="V2A - verb with NP and AP complement">V2A</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>mkVQ</CODE></TD>+<TD><A HREF="#V" TITLE="V - one-place verb">V</A> <CODE>-></CODE> <A HREF="#VQ" TITLE="VQ - question-complement verb">VQ</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>mkV2Q</CODE></TD>+<TD><A HREF="#V" TITLE="V - one-place verb">V</A> <CODE>-></CODE> <A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A> <CODE>-></CODE> <A HREF="#V2Q" TITLE="V2Q - verb with NP and Q complement">V2Q</A></TD>+<TD><I>-</I></TD>+</TR>+</TABLE>++<A NAME="toc89"></A>+<H2>Paradigms for English</H2>++<P>+<a name="RParadigms"></a>+</P>+<P>+source <A HREF="http://www.grammaticalframework.org/lib/src/english/ParadigmsEng.gf"><CODE>../src/english/ParadigmsEng.gf</CODE></A>+</P>++<TABLE BORDER="1" CELLPADDING="4">+<TR>+<TH>Function</TH>+<TH>Type</TH>+<TH COLSPAN="2">Explanation</TH>+</TR>+<TR>+<TD><CODE>Gender</CODE></TD>+<TD><A HREF="#Type">Type</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>human</CODE></TD>+<TD><A HREF="#Gender">Gender</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>nonhuman</CODE></TD>+<TD><A HREF="#Gender">Gender</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>Number</CODE></TD>+<TD><A HREF="#Type">Type</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>singular</CODE></TD>+<TD><A HREF="#Number">Number</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>plural</CODE></TD>+<TD><A HREF="#Number">Number</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>npNumber</CODE></TD>+<TD><A HREF="#NP" TITLE="NP - noun phrase (subject or object)">NP</A> <CODE>-></CODE> <A HREF="#Number">Number</A></TD>+<TD><I>exctract the number of a noun phrase</I></TD>+</TR>+<TR>+<TD><CODE>mkN</CODE></TD>+<TD><CODE>(flash</CODE> <CODE>:</CODE> <CODE>Str)</CODE> <CODE>-></CODE> <A HREF="#N" TITLE="N - common noun">N</A></TD>+<TD><I>plural s, incl. flash-flashes, fly-flies</I></TD>+</TR>+<TR>+<TD><CODE>mkN</CODE></TD>+<TD><CODE>(man,men</CODE> <CODE>:</CODE> <CODE>Str)</CODE> <CODE>-></CODE> <A HREF="#N" TITLE="N - common noun">N</A></TD>+<TD><I>irregular plural</I></TD>+</TR>+<TR>+<TD><CODE>mkN</CODE></TD>+<TD><CODE>(man,men,man's,men's</CODE> <CODE>:</CODE> <CODE>Str)</CODE> <CODE>-></CODE> <A HREF="#N" TITLE="N - common noun">N</A></TD>+<TD><I>irregular genitives</I></TD>+</TR>+<TR>+<TD><CODE>mkN</CODE></TD>+<TD><A HREF="#Gender">Gender</A> <CODE>-></CODE> <A HREF="#N" TITLE="N - common noun">N</A> <CODE>-></CODE> <A HREF="#N" TITLE="N - common noun">N</A></TD>+<TD><I>default nonhuman</I></TD>+</TR>+<TR>+<TD><CODE>mkN</CODE></TD>+<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#N" TITLE="N - common noun">N</A> <CODE>-></CODE> <A HREF="#N" TITLE="N - common noun">N</A></TD>+<TD><I>e.g. baby + boom</I></TD>+</TR>+<TR>+<TD><CODE>mkN2</CODE></TD>+<TD><A HREF="#N" TITLE="N - common noun">N</A> <CODE>-></CODE> <A HREF="#N2" TITLE="N2 - relational noun">N2</A></TD>+<TD><I>e.g. wife of (default prep. to)</I></TD>+</TR>+<TR>+<TD><CODE>mkN2</CODE></TD>+<TD><A HREF="#N" TITLE="N - common noun">N</A> <CODE>-></CODE> <A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A> <CODE>-></CODE> <A HREF="#N2" TITLE="N2 - relational noun">N2</A></TD>+<TD><I>e.g. access to</I></TD>+</TR>+<TR>+<TD><CODE>mkN3</CODE></TD>+<TD><A HREF="#N" TITLE="N - common noun">N</A> <CODE>-></CODE> <A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A> <CODE>-></CODE> <A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A> <CODE>-></CODE> <A HREF="#N3" TITLE="N3 - three-place relational noun">N3</A></TD>+<TD><I>e.g. connection from x to y</I></TD>+</TR>+<TR>+<TD><CODE>mkPN</CODE></TD>+<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#PN" TITLE="PN - proper name">PN</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>mkA</CODE></TD>+<TD><CODE>(happy</CODE> <CODE>:</CODE> <CODE>Str)</CODE> <CODE>-></CODE> <A HREF="#A" TITLE="A - one-place adjective">A</A></TD>+<TD><I>regular adj, incl. happy-happier, rude-ruder</I></TD>+</TR>+<TR>+<TD><CODE>mkA</CODE></TD>+<TD><CODE>(fat,fatter</CODE> <CODE>:</CODE> <CODE>Str)</CODE> <CODE>-></CODE> <A HREF="#A" TITLE="A - one-place adjective">A</A></TD>+<TD><I>irreg. comparative</I></TD>+</TR>+<TR>+<TD><CODE>mkA</CODE></TD>+<TD><CODE>(good,better,best,well</CODE> <CODE>:</CODE> <CODE>Str)</CODE> <CODE>-></CODE> <A HREF="#A" TITLE="A - one-place adjective">A</A></TD>+<TD><I>completely irreg.</I></TD>+</TR>+<TR>+<TD><CODE>compoundA</CODE></TD>+<TD><A HREF="#A" TITLE="A - one-place adjective">A</A> <CODE>-></CODE> <A HREF="#A" TITLE="A - one-place adjective">A</A></TD>+<TD><I>force comparison with more/most</I></TD>+</TR>+<TR>+<TD><CODE>simpleA</CODE></TD>+<TD><A HREF="#A" TITLE="A - one-place adjective">A</A> <CODE>-></CODE> <A HREF="#A" TITLE="A - one-place adjective">A</A></TD>+<TD><I>force comparison with -er,-est</I></TD>+</TR>+<TR>+<TD><CODE>irregAdv</CODE></TD>+<TD><A HREF="#A" TITLE="A - one-place adjective">A</A> <CODE>-></CODE> <CODE>Str</CODE> <CODE>-></CODE> <A HREF="#A" TITLE="A - one-place adjective">A</A></TD>+<TD><I>adverb irreg, e.g. "fast"</I></TD>+</TR>+<TR>+<TD><CODE>mkA2</CODE></TD>+<TD><A HREF="#A" TITLE="A - one-place adjective">A</A> <CODE>-></CODE> <A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A> <CODE>-></CODE> <A HREF="#A2" TITLE="A2 - two-place adjective">A2</A></TD>+<TD><I>absent from</I></TD>+</TR>+<TR>+<TD><CODE>mkAdv</CODE></TD>+<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#Adv" TITLE="Adv - verb-phrase-modifying adverb">Adv</A></TD>+<TD><I>e.g. today</I></TD>+</TR>+<TR>+<TD><CODE>mkAdV</CODE></TD>+<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#AdV" TITLE="Adv - verb-phrase-modifying adverb">AdV</A></TD>+<TD><I>e.g. always</I></TD>+</TR>+<TR>+<TD><CODE>mkAdA</CODE></TD>+<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#AdA" TITLE="AdA - adjective-modifying adverb">AdA</A></TD>+<TD><I>e.g. quite</I></TD>+</TR>+<TR>+<TD><CODE>mkAdN</CODE></TD>+<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#AdN" TITLE="AdN - numeral-modifying adverb">AdN</A></TD>+<TD><I>e.g. approximately</I></TD>+</TR>+<TR>+<TD><CODE>mkPrep</CODE></TD>+<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A></TD>+<TD><I>e.g. "in front of"</I></TD>+</TR>+<TR>+<TD><CODE>noPrep</CODE></TD>+<TD><A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A></TD>+<TD><I>no preposition</I></TD>+</TR>+<TR>+<TD><CODE>mkV</CODE></TD>+<TD><CODE>(cry</CODE> <CODE>:</CODE> <CODE>Str)</CODE> <CODE>-></CODE> <A HREF="#V" TITLE="V - one-place verb">V</A></TD>+<TD><I>regular, incl. cry-cries, kiss-kisses etc</I></TD>+</TR>+<TR>+<TD><CODE>mkV</CODE></TD>+<TD><CODE>(stop,</CODE> <CODE>stopped</CODE> <CODE>:</CODE> <CODE>Str)</CODE> <CODE>-></CODE> <A HREF="#V" TITLE="V - one-place verb">V</A></TD>+<TD><I>reg. with consonant duplication</I></TD>+</TR>+<TR>+<TD><CODE>mkV</CODE></TD>+<TD><CODE>(drink,</CODE> <CODE>drank,</CODE> <CODE>drunk</CODE> <CODE>:</CODE> <CODE>Str)</CODE> <CODE>-></CODE> <A HREF="#V" TITLE="V - one-place verb">V</A></TD>+<TD><I>ordinary irregular</I></TD>+</TR>+<TR>+<TD><CODE>mkV</CODE></TD>+<TD><CODE>(go,</CODE> <CODE>goes,</CODE> <CODE>went,</CODE> <CODE>gone,</CODE> <CODE>going</CODE> <CODE>:</CODE> <CODE>Str)</CODE> <CODE>-></CODE> <A HREF="#V" TITLE="V - one-place verb">V</A></TD>+<TD><I>totally irregular</I></TD>+</TR>+<TR>+<TD><CODE>mkV</CODE></TD>+<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#V" TITLE="V - one-place verb">V</A> <CODE>-></CODE> <A HREF="#V" TITLE="V - one-place verb">V</A></TD>+<TD><I>fix compound, e.g. under+take</I></TD>+</TR>+<TR>+<TD><CODE>partV</CODE></TD>+<TD><A HREF="#V" TITLE="V - one-place verb">V</A> <CODE>-></CODE> <CODE>Str</CODE> <CODE>-></CODE> <A HREF="#V" TITLE="V - one-place verb">V</A></TD>+<TD><I>with particle, e.g. switch + on</I></TD>+</TR>+<TR>+<TD><CODE>reflV</CODE></TD>+<TD><A HREF="#V" TITLE="V - one-place verb">V</A> <CODE>-></CODE> <A HREF="#V" TITLE="V - one-place verb">V</A></TD>+<TD><I>reflexive e.g. behave oneself</I></TD>+</TR>+<TR>+<TD><CODE>mkV2</CODE></TD>+<TD><A HREF="#V" TITLE="V - one-place verb">V</A> <CODE>-></CODE> <A HREF="#V2" TITLE="V2 - two-place verb">V2</A></TD>+<TD><I>transitive, e.g. hit</I></TD>+</TR>+<TR>+<TD><CODE>mkV2</CODE></TD>+<TD><A HREF="#V" TITLE="V - one-place verb">V</A> <CODE>-></CODE> <A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A> <CODE>-></CODE> <A HREF="#V2" TITLE="V2 - two-place verb">V2</A></TD>+<TD><I>with preposiiton, e.g. believe in</I></TD>+</TR>+<TR>+<TD><CODE>mkV3</CODE></TD>+<TD><A HREF="#V" TITLE="V - one-place verb">V</A> <CODE>-></CODE> <A HREF="#V3" TITLE="V3 - three-place verb">V3</A></TD>+<TD><I>ditransitive, e.g. give,_,_</I></TD>+</TR>+<TR>+<TD><CODE>mkV3</CODE></TD>+<TD><A HREF="#V" TITLE="V - one-place verb">V</A> <CODE>-></CODE> <A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A> <CODE>-></CODE> <A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A> <CODE>-></CODE> <A HREF="#V3" TITLE="V3 - three-place verb">V3</A></TD>+<TD><I>two prepositions, e.g. speak, with, about</I></TD>+</TR>+<TR>+<TD><CODE>mkVS</CODE></TD>+<TD><A HREF="#V" TITLE="V - one-place verb">V</A> <CODE>-></CODE> <A HREF="#VS" TITLE="VS - sentence-complement verb">VS</A></TD>+<TD><I>sentence-compl e.g. say (that S)</I></TD>+</TR>+<TR>+<TD><CODE>mkV2S</CODE></TD>+<TD><A HREF="#V" TITLE="V - one-place verb">V</A> <CODE>-></CODE> <A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A> <CODE>-></CODE> <A HREF="#V2S" TITLE="V2S - verb with NP and S complement">V2S</A></TD>+<TD><I>e.g. tell (NP) (that S)</I></TD>+</TR>+<TR>+<TD><CODE>mkVV</CODE></TD>+<TD><A HREF="#V" TITLE="V - one-place verb">V</A> <CODE>-></CODE> <A HREF="#VV" TITLE="VV - verb-phrase-complement verb">VV</A></TD>+<TD><I>e.g. want (to VP)</I></TD>+</TR>+<TR>+<TD><CODE>ingVV</CODE></TD>+<TD><A HREF="#V" TITLE="V - one-place verb">V</A> <CODE>-></CODE> <A HREF="#VV" TITLE="VV - verb-phrase-complement verb">VV</A></TD>+<TD><I>e.g. start (VPing)</I></TD>+</TR>+<TR>+<TD><CODE>mkV2V</CODE></TD>+<TD><A HREF="#V" TITLE="V - one-place verb">V</A> <CODE>-></CODE> <A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A> <CODE>-></CODE> <A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A> <CODE>-></CODE> <A HREF="#V2V" TITLE="V2V - verb with NP and V complement">V2V</A></TD>+<TD><I>e.g. want (noPrep NP) (to VP)</I></TD>+</TR>+<TR>+<TD><CODE>ingV2V</CODE></TD>+<TD><A HREF="#V" TITLE="V - one-place verb">V</A> <CODE>-></CODE> <A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A> <CODE>-></CODE> <A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A> <CODE>-></CODE> <A HREF="#V2V" TITLE="V2V - verb with NP and V complement">V2V</A></TD>+<TD><I>e.g. prevent (noPrep NP) (from VP-ing)</I></TD>+</TR>+<TR>+<TD><CODE>mkVA</CODE></TD>+<TD><A HREF="#V" TITLE="V - one-place verb">V</A> <CODE>-></CODE> <A HREF="#VA" TITLE="VA - adjective-complement verb">VA</A></TD>+<TD><I>e.g. become (AP)</I></TD>+</TR>+<TR>+<TD><CODE>mkV2A</CODE></TD>+<TD><A HREF="#V" TITLE="V - one-place verb">V</A> <CODE>-></CODE> <A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A> <CODE>-></CODE> <A HREF="#V2A" TITLE="V2A - verb with NP and AP complement">V2A</A></TD>+<TD><I>e.g. paint (NP) (AP)</I></TD>+</TR>+<TR>+<TD><CODE>mkVQ</CODE></TD>+<TD><A HREF="#V" TITLE="V - one-place verb">V</A> <CODE>-></CODE> <A HREF="#VQ" TITLE="VQ - question-complement verb">VQ</A></TD>+<TD><I>e.g. wonder (QS)</I></TD>+</TR>+<TR>+<TD><CODE>mkV2Q</CODE></TD>+<TD><A HREF="#V" TITLE="V - one-place verb">V</A> <CODE>-></CODE> <A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A> <CODE>-></CODE> <A HREF="#V2Q" TITLE="V2Q - verb with NP and Q complement">V2Q</A></TD>+<TD><I>e.g. ask (NP) (QS)</I></TD>+</TR>+</TABLE>++<A NAME="toc90"></A>+<H2>Paradigms for Finnish</H2>++<P>+<a name="RParadigms"></a>+</P>+<P>+source <A HREF="http://www.grammaticalframework.org/lib/src/finnish/ParadigmsFin.gf"><CODE>../src/finnish/ParadigmsFin.gf</CODE></A>+</P>++<TABLE BORDER="1" CELLPADDING="4">+<TR>+<TH>Function</TH>+<TH>Type</TH>+<TH COLSPAN="2">Explanation</TH>+</TR>+<TR>+<TD><CODE>Number</CODE></TD>+<TD><A HREF="#Type">Type</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>singular</CODE></TD>+<TD><A HREF="#Number">Number</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>plural</CODE></TD>+<TD><A HREF="#Number">Number</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>Case</CODE></TD>+<TD><A HREF="#Type">Type</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>nominative</CODE></TD>+<TD><A HREF="#Case">Case</A></TD>+<TD><I>e.g. "talo"</I></TD>+</TR>+<TR>+<TD><CODE>genitive</CODE></TD>+<TD><A HREF="#Case">Case</A></TD>+<TD><I>e.g. "talon"</I></TD>+</TR>+<TR>+<TD><CODE>partitive</CODE></TD>+<TD><A HREF="#Case">Case</A></TD>+<TD><I>e.g. "taloa"</I></TD>+</TR>+<TR>+<TD><CODE>essive</CODE></TD>+<TD><A HREF="#Case">Case</A></TD>+<TD><I>e.g. "talona"</I></TD>+</TR>+<TR>+<TD><CODE>translative</CODE></TD>+<TD><A HREF="#Case">Case</A></TD>+<TD><I>e.g. "taloksi"</I></TD>+</TR>+<TR>+<TD><CODE>inessive</CODE></TD>+<TD><A HREF="#Case">Case</A></TD>+<TD><I>e.g. "talossa"</I></TD>+</TR>+<TR>+<TD><CODE>elative</CODE></TD>+<TD><A HREF="#Case">Case</A></TD>+<TD><I>e.g. "talosta"</I></TD>+</TR>+<TR>+<TD><CODE>illative</CODE></TD>+<TD><A HREF="#Case">Case</A></TD>+<TD><I>e.g. "taloon"</I></TD>+</TR>+<TR>+<TD><CODE>adessive</CODE></TD>+<TD><A HREF="#Case">Case</A></TD>+<TD><I>e.g. "talolla"</I></TD>+</TR>+<TR>+<TD><CODE>ablative</CODE></TD>+<TD><A HREF="#Case">Case</A></TD>+<TD><I>e.g. "talolta"</I></TD>+</TR>+<TR>+<TD><CODE>allative</CODE></TD>+<TD><A HREF="#Case">Case</A></TD>+<TD><I>e.g. "talolle"</I></TD>+</TR>+<TR>+<TD><CODE>infFirst</CODE></TD>+<TD><A HREF="#InfForm">InfForm</A></TD>+<TD><I>e.g. "tehdä"</I></TD>+</TR>+<TR>+<TD><CODE>infElat</CODE></TD>+<TD><A HREF="#InfForm">InfForm</A></TD>+<TD><I>e.g. "tekemästä"</I></TD>+</TR>+<TR>+<TD><CODE>infIllat</CODE></TD>+<TD><A HREF="#InfForm">InfForm</A></TD>+<TD><I>e.g. "tekemään"</I></TD>+</TR>+<TR>+<TD><CODE>prePrep</CODE></TD>+<TD><A HREF="#Case">Case</A> <CODE>-></CODE> <CODE>Str</CODE> <CODE>-></CODE> <A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A></TD>+<TD><I>preposition, e.g. partitive "ilman"</I></TD>+</TR>+<TR>+<TD><CODE>postPrep</CODE></TD>+<TD><A HREF="#Case">Case</A> <CODE>-></CODE> <CODE>Str</CODE> <CODE>-></CODE> <A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A></TD>+<TD><I>postposition, e.g. genitive "takana"</I></TD>+</TR>+<TR>+<TD><CODE>postGenPrep</CODE></TD>+<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A></TD>+<TD><I>genitive postposition, e.g. "takana"</I></TD>+</TR>+<TR>+<TD><CODE>casePrep</CODE></TD>+<TD><A HREF="#Case">Case</A> <CODE>-></CODE> <A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A></TD>+<TD><I>just case, e.g. adessive</I></TD>+</TR>+<TR>+<TD><CODE>NK</CODE></TD>+<TD><A HREF="#Type">Type</A></TD>+<TD><I>Noun from DictFin (Kotus)</I></TD>+</TR>+<TR>+<TD><CODE>AK</CODE></TD>+<TD><A HREF="#Type">Type</A></TD>+<TD><I>Adjective from DictFin (Kotus)</I></TD>+</TR>+<TR>+<TD><CODE>VK</CODE></TD>+<TD><A HREF="#Type">Type</A></TD>+<TD><I>Verb from DictFin (Kotus)</I></TD>+</TR>+<TR>+<TD><CODE>AdvK</CODE></TD>+<TD><A HREF="#Type">Type</A></TD>+<TD><I>Adverb from DictFin (Kotus)</I></TD>+</TR>+<TR>+<TD><CODE>mkN</CODE></TD>+<TD><CODE>(kukko</CODE> <CODE>:</CODE> <CODE>Str)</CODE> <CODE>-></CODE> <A HREF="#N" TITLE="N - common noun">N</A></TD>+<TD><I>predictable nouns, covers 82%</I></TD>+</TR>+<TR>+<TD><CODE>mkN</CODE></TD>+<TD><CODE>(savi,savia</CODE> <CODE>:</CODE> <CODE>Str)</CODE> <CODE>-></CODE> <A HREF="#N" TITLE="N - common noun">N</A></TD>+<TD><I>different pl.part</I></TD>+</TR>+<TR>+<TD><CODE>mkN</CODE></TD>+<TD><CODE>(vesi,veden,vesiä</CODE> <CODE>:</CODE> <CODE>Str)</CODE> <CODE>-></CODE> <A HREF="#N" TITLE="N - common noun">N</A></TD>+<TD><I>also different sg.gen</I></TD>+</TR>+<TR>+<TD><CODE>mkN</CODE></TD>+<TD><CODE>(vesi,veden,vesiä,vettä</CODE> <CODE>:</CODE> <CODE>Str)</CODE> <CODE>-></CODE> <A HREF="#N" TITLE="N - common noun">N</A></TD>+<TD><I>also different sg.part</I></TD>+</TR>+<TR>+<TD><CODE>mkN</CODE></TD>+<TD><CODE>(olo,n,a,na,oon,jen,ja,ina,issa,ihin</CODE> <CODE>:</CODE> <CODE>Str)</CODE> <CODE>-></CODE> <A HREF="#N" TITLE="N - common noun">N</A></TD>+<TD><I>worst case, 10 forms</I></TD>+</TR>+<TR>+<TD><CODE>mkN</CODE></TD>+<TD><CODE>(pika</CODE> <CODE>:</CODE> <CODE>Str)</CODE> <CODE>-></CODE> <CODE>(juna</CODE> <CODE>:</CODE> <CODE>N)</CODE> <CODE>-></CODE> <A HREF="#N" TITLE="N - common noun">N</A></TD>+<TD><I>compound with invariable prefix</I></TD>+</TR>+<TR>+<TD><CODE>mkN</CODE></TD>+<TD><CODE>(oma</CODE> <CODE>:</CODE> <CODE>N)</CODE> <CODE>-></CODE> <CODE>(tunto</CODE> <CODE>:</CODE> <CODE>N)</CODE> <CODE>-></CODE> <A HREF="#N" TITLE="N - common noun">N</A></TD>+<TD><I>compound with inflecting prefix</I></TD>+</TR>+<TR>+<TD><CODE>mkN</CODE></TD>+<TD><A HREF="#NK">NK</A> <CODE>-></CODE> <A HREF="#N" TITLE="N - common noun">N</A></TD>+<TD><I>noun from DictFin (Kotus)</I></TD>+</TR>+<TR>+<TD><CODE>exceptNomN</CODE></TD>+<TD><A HREF="#N" TITLE="N - common noun">N</A> <CODE>-></CODE> <CODE>Str</CODE> <CODE>-></CODE> <A HREF="#N" TITLE="N - common noun">N</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>mkN2</CODE></TD>+<TD><A HREF="#N" TITLE="N - common noun">N</A> <CODE>-></CODE> <A HREF="#N2" TITLE="N2 - relational noun">N2</A></TD>+<TD><I>relational noun with genitive</I></TD>+</TR>+<TR>+<TD><CODE>mkN2</CODE></TD>+<TD><A HREF="#N" TITLE="N - common noun">N</A> <CODE>-></CODE> <A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A> <CODE>-></CODE> <A HREF="#N2" TITLE="N2 - relational noun">N2</A></TD>+<TD><I>relational noun another prep.</I></TD>+</TR>+<TR>+<TD><CODE>mkN3</CODE></TD>+<TD><A HREF="#N" TITLE="N - common noun">N</A> <CODE>-></CODE> <A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A> <CODE>-></CODE> <A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A> <CODE>-></CODE> <A HREF="#N3" TITLE="N3 - three-place relational noun">N3</A></TD>+<TD><I>relation with two complements</I></TD>+</TR>+<TR>+<TD><CODE>mkPN</CODE></TD>+<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#PN" TITLE="PN - proper name">PN</A></TD>+<TD><I>predictable noun made into name</I></TD>+</TR>+<TR>+<TD><CODE>mkPN</CODE></TD>+<TD><A HREF="#N" TITLE="N - common noun">N</A> <CODE>-></CODE> <A HREF="#PN" TITLE="PN - proper name">PN</A></TD>+<TD><I>any noun made into name</I></TD>+</TR>+<TR>+<TD><CODE>mkA</CODE></TD>+<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#A" TITLE="A - one-place adjective">A</A></TD>+<TD><I>regular noun made into adjective</I></TD>+</TR>+<TR>+<TD><CODE>mkA</CODE></TD>+<TD><A HREF="#N" TITLE="N - common noun">N</A> <CODE>-></CODE> <A HREF="#A" TITLE="A - one-place adjective">A</A></TD>+<TD><I>any noun made into adjective</I></TD>+</TR>+<TR>+<TD><CODE>mkA</CODE></TD>+<TD><A HREF="#N" TITLE="N - common noun">N</A> <CODE>-></CODE> <CODE>(kivempi,kivin</CODE> <CODE>:</CODE> <CODE>Str)</CODE> <CODE>-></CODE> <A HREF="#A" TITLE="A - one-place adjective">A</A></TD>+<TD><I>deviating comparison forms</I></TD>+</TR>+<TR>+<TD><CODE>mkA</CODE></TD>+<TD><CODE>(hyva,prmpi,pras</CODE> <CODE>:</CODE> <CODE>N)</CODE> <CODE>-></CODE> <CODE>(hyvin,pmmin,prhten</CODE> <CODE>:</CODE> <CODE>Str)</CODE> <CODE>-></CODE> <A HREF="#A" TITLE="A - one-place adjective">A</A></TD>+<TD><I>worst case adj</I></TD>+</TR>+<TR>+<TD><CODE>mkA</CODE></TD>+<TD><A HREF="#AK">AK</A> <CODE>-></CODE> <A HREF="#A" TITLE="A - one-place adjective">A</A></TD>+<TD><I>adjective from DictFin (Kotus)</I></TD>+</TR>+<TR>+<TD><CODE>mkA2</CODE></TD>+<TD><A HREF="#A" TITLE="A - one-place adjective">A</A> <CODE>-></CODE> <A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A> <CODE>-></CODE> <A HREF="#A2" TITLE="A2 - two-place adjective">A2</A></TD>+<TD><I>e.g. "jaollinen" casePrep adessive</I></TD>+</TR>+<TR>+<TD><CODE>mkV</CODE></TD>+<TD><CODE>(huutaa</CODE> <CODE>:</CODE> <CODE>Str)</CODE> <CODE>-></CODE> <A HREF="#V" TITLE="V - one-place verb">V</A></TD>+<TD><I>predictable verbs, covers 90%</I></TD>+</TR>+<TR>+<TD><CODE>mkV</CODE></TD>+<TD><CODE>(huutaa,huusi</CODE> <CODE>:</CODE> <CODE>Str)</CODE> <CODE>-></CODE> <A HREF="#V" TITLE="V - one-place verb">V</A></TD>+<TD><I>deviating past 3sg</I></TD>+</TR>+<TR>+<TD><CODE>mkV</CODE></TD>+<TD><CODE>(huutaa,huudan,huusi</CODE> <CODE>:</CODE> <CODE>Str)</CODE> <CODE>-></CODE> <A HREF="#V" TITLE="V - one-place verb">V</A></TD>+<TD><I>also deviating pres. 1sg</I></TD>+</TR>+<TR>+<TD><CODE>mkV</CODE></TD>+<TD><CODE>(huutaa,dan,taa,tavat,takaa,detaan,sin,si,sisi,tanut,dettu,tanee</CODE> <CODE>:</CODE> <CODE>Str)</CODE> <CODE>-></CODE> <A HREF="#V" TITLE="V - one-place verb">V</A></TD>+<TD><I>worst-case verb</I></TD>+</TR>+<TR>+<TD><CODE>mkV</CODE></TD>+<TD><A HREF="#VK">VK</A> <CODE>-></CODE> <A HREF="#V" TITLE="V - one-place verb">V</A></TD>+<TD><I>verb from DictFin (Kotus)</I></TD>+</TR>+<TR>+<TD><CODE>caseV</CODE></TD>+<TD><A HREF="#Case">Case</A> <CODE>-></CODE> <A HREF="#V" TITLE="V - one-place verb">V</A> <CODE>-></CODE> <A HREF="#V" TITLE="V - one-place verb">V</A></TD>+<TD><I>deviating subj. case, e.g. genitive "täytyä"</I></TD>+</TR>+<TR>+<TD><CODE>vOlla</CODE></TD>+<TD><A HREF="#V" TITLE="V - one-place verb">V</A></TD>+<TD><I>the verb "be"</I></TD>+</TR>+<TR>+<TD><CODE>mkV2</CODE></TD>+<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#V2" TITLE="V2 - two-place verb">V2</A></TD>+<TD><I>predictable direct transitive</I></TD>+</TR>+<TR>+<TD><CODE>mkV2</CODE></TD>+<TD><A HREF="#V" TITLE="V - one-place verb">V</A> <CODE>-></CODE> <A HREF="#V2" TITLE="V2 - two-place verb">V2</A></TD>+<TD><I>direct transitive</I></TD>+</TR>+<TR>+<TD><CODE>mkV2</CODE></TD>+<TD><A HREF="#V" TITLE="V - one-place verb">V</A> <CODE>-></CODE> <A HREF="#Case">Case</A> <CODE>-></CODE> <A HREF="#V2" TITLE="V2 - two-place verb">V2</A></TD>+<TD><I>complement just case</I></TD>+</TR>+<TR>+<TD><CODE>mkV2</CODE></TD>+<TD><A HREF="#V" TITLE="V - one-place verb">V</A> <CODE>-></CODE> <A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A> <CODE>-></CODE> <A HREF="#V2" TITLE="V2 - two-place verb">V2</A></TD>+<TD><I>complement pre/postposition</I></TD>+</TR>+<TR>+<TD><CODE>mkV3</CODE></TD>+<TD><A HREF="#V" TITLE="V - one-place verb">V</A> <CODE>-></CODE> <A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A> <CODE>-></CODE> <A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A> <CODE>-></CODE> <A HREF="#V3" TITLE="V3 - three-place verb">V3</A></TD>+<TD><I>e.g. puhua, allative, elative</I></TD>+</TR>+<TR>+<TD><CODE>dirV3</CODE></TD>+<TD><A HREF="#V" TITLE="V - one-place verb">V</A> <CODE>-></CODE> <A HREF="#Case">Case</A> <CODE>-></CODE> <A HREF="#V3" TITLE="V3 - three-place verb">V3</A></TD>+<TD><I>siirtää, (accusative), illative</I></TD>+</TR>+<TR>+<TD><CODE>dirdirV3</CODE></TD>+<TD><A HREF="#V" TITLE="V - one-place verb">V</A> <CODE>-></CODE> <A HREF="#V3" TITLE="V3 - three-place verb">V3</A></TD>+<TD><I>antaa, (accusative), (allative)</I></TD>+</TR>+<TR>+<TD><CODE>mkVS</CODE></TD>+<TD><A HREF="#V" TITLE="V - one-place verb">V</A> <CODE>-></CODE> <A HREF="#VS" TITLE="VS - sentence-complement verb">VS</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>mkV2S</CODE></TD>+<TD><A HREF="#V" TITLE="V - one-place verb">V</A> <CODE>-></CODE> <A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A> <CODE>-></CODE> <A HREF="#V2S" TITLE="V2S - verb with NP and S complement">V2S</A></TD>+<TD><I>e.g. "sanoa" allative</I></TD>+</TR>+<TR>+<TD><CODE>mkVV</CODE></TD>+<TD><A HREF="#V" TITLE="V - one-place verb">V</A> <CODE>-></CODE> <A HREF="#VV" TITLE="VV - verb-phrase-complement verb">VV</A></TD>+<TD><I>e.g. "alkaa"</I></TD>+</TR>+<TR>+<TD><CODE>mkVVf</CODE></TD>+<TD><A HREF="#V" TITLE="V - one-place verb">V</A> <CODE>-></CODE> <A HREF="#InfForm">InfForm</A> <CODE>-></CODE> <A HREF="#VV" TITLE="VV - verb-phrase-complement verb">VV</A></TD>+<TD><I>e.g. "ruveta" infIllat</I></TD>+</TR>+<TR>+<TD><CODE>mkV2V</CODE></TD>+<TD><A HREF="#V" TITLE="V - one-place verb">V</A> <CODE>-></CODE> <A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A> <CODE>-></CODE> <A HREF="#V2V" TITLE="V2V - verb with NP and V complement">V2V</A></TD>+<TD><I>e.g. "käskeä" genitive</I></TD>+</TR>+<TR>+<TD><CODE>mkV2Vf</CODE></TD>+<TD><A HREF="#V" TITLE="V - one-place verb">V</A> <CODE>-></CODE> <A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A> <CODE>-></CODE> <A HREF="#InfForm">InfForm</A> <CODE>-></CODE> <A HREF="#V2V" TITLE="V2V - verb with NP and V complement">V2V</A></TD>+<TD><I>e.g. "kieltää" partitive infElat</I></TD>+</TR>+<TR>+<TD><CODE>mkVA</CODE></TD>+<TD><A HREF="#V" TITLE="V - one-place verb">V</A> <CODE>-></CODE> <A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A> <CODE>-></CODE> <A HREF="#VA" TITLE="VA - adjective-complement verb">VA</A></TD>+<TD><I>e.g. "maistua" ablative</I></TD>+</TR>+<TR>+<TD><CODE>mkV2A</CODE></TD>+<TD><A HREF="#V" TITLE="V - one-place verb">V</A> <CODE>-></CODE> <A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A> <CODE>-></CODE> <A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A> <CODE>-></CODE> <A HREF="#V2A" TITLE="V2A - verb with NP and AP complement">V2A</A></TD>+<TD><I>e.g. "maalata" accusative translative</I></TD>+</TR>+<TR>+<TD><CODE>mkVQ</CODE></TD>+<TD><A HREF="#V" TITLE="V - one-place verb">V</A> <CODE>-></CODE> <A HREF="#VQ" TITLE="VQ - question-complement verb">VQ</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>mkV2Q</CODE></TD>+<TD><A HREF="#V" TITLE="V - one-place verb">V</A> <CODE>-></CODE> <A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A> <CODE>-></CODE> <A HREF="#V2Q" TITLE="V2Q - verb with NP and Q complement">V2Q</A></TD>+<TD><I>e.g. "kysyä" ablative</I></TD>+</TR>+</TABLE>++<A NAME="toc91"></A>+<H2>Paradigms for French</H2>++<P>+<a name="RParadigms"></a>+</P>+<P>+source <A HREF="http://www.grammaticalframework.org/lib/src/french/ParadigmsFre.gf"><CODE>../src/french/ParadigmsFre.gf</CODE></A>+</P>++<TABLE BORDER="1" CELLPADDING="4">+<TR>+<TH>Function</TH>+<TH>Type</TH>+<TH COLSPAN="2">Explanation</TH>+</TR>+<TR>+<TD><CODE>Gender</CODE></TD>+<TD><A HREF="#Type">Type</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>masculine</CODE></TD>+<TD><A HREF="#Gender">Gender</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>feminine</CODE></TD>+<TD><A HREF="#Gender">Gender</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>accusative</CODE></TD>+<TD><A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A></TD>+<TD><I>direct object case</I></TD>+</TR>+<TR>+<TD><CODE>genitive</CODE></TD>+<TD><A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A></TD>+<TD><I>genitive, constructed with "de"</I></TD>+</TR>+<TR>+<TD><CODE>dative</CODE></TD>+<TD><A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A></TD>+<TD><I>dative, usually constructed with "à"</I></TD>+</TR>+<TR>+<TD><CODE>mkPrep</CODE></TD>+<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A></TD>+<TD><I>preposition (other than "de" and "à")</I></TD>+</TR>+<TR>+<TD><CODE>mkN</CODE></TD>+<TD><CODE>(cheval</CODE> <CODE>:</CODE> <CODE>Str)</CODE> <CODE>-></CODE> <A HREF="#N" TITLE="N - common noun">N</A></TD>+<TD><I>predictable, with variations like cheval-chevaux</I></TD>+</TR>+<TR>+<TD><CODE>mkN</CODE></TD>+<TD><CODE>(oeil,yeux</CODE> <CODE>:</CODE> <CODE>Str)</CODE> <CODE>-></CODE> <A HREF="#Gender">Gender</A> <CODE>-></CODE> <A HREF="#N" TITLE="N - common noun">N</A></TD>+<TD><I>worst-case noun</I></TD>+</TR>+<TR>+<TD><CODE>mkN</CODE></TD>+<TD><A HREF="#N" TITLE="N - common noun">N</A> <CODE>-></CODE> <CODE>Str</CODE> <CODE>-></CODE> <A HREF="#N" TITLE="N - common noun">N</A></TD>+<TD><I>compound noun, e.g. numéro + de téléphone</I></TD>+</TR>+<TR>+<TD><CODE>mkN2</CODE></TD>+<TD><A HREF="#N" TITLE="N - common noun">N</A> <CODE>-></CODE> <A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A> <CODE>-></CODE> <A HREF="#N2" TITLE="N2 - relational noun">N2</A></TD>+<TD><I>e.g. fille + genitive</I></TD>+</TR>+<TR>+<TD><CODE>mkN3</CODE></TD>+<TD><A HREF="#N" TITLE="N - common noun">N</A> <CODE>-></CODE> <A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A> <CODE>-></CODE> <A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A> <CODE>-></CODE> <A HREF="#N3" TITLE="N3 - three-place relational noun">N3</A></TD>+<TD><I>e.g. connection + genitive + dative</I></TD>+</TR>+<TR>+<TD><CODE>mkPN</CODE></TD>+<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#PN" TITLE="PN - proper name">PN</A></TD>+<TD><I>feminine if ends with "e", otherwise masculine</I></TD>+</TR>+<TR>+<TD><CODE>mkPN</CODE></TD>+<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#Gender">Gender</A> <CODE>-></CODE> <A HREF="#PN" TITLE="PN - proper name">PN</A></TD>+<TD><I>gender deviant from the simple rule</I></TD>+</TR>+<TR>+<TD><CODE>mkA</CODE></TD>+<TD><CODE>(cher</CODE> <CODE>:</CODE> <CODE>Str)</CODE> <CODE>-></CODE> <A HREF="#A" TITLE="A - one-place adjective">A</A></TD>+<TD><I>predictable, e.g. cher-chère</I></TD>+</TR>+<TR>+<TD><CODE>mkA</CODE></TD>+<TD><CODE>(sec,seche</CODE> <CODE>:</CODE> <CODE>Str)</CODE> <CODE>-></CODE> <A HREF="#A" TITLE="A - one-place adjective">A</A></TD>+<TD><I>unpredictable feminine</I></TD>+</TR>+<TR>+<TD><CODE>mkA</CODE></TD>+<TD><CODE>(banal,banale,banaux</CODE> <CODE>:</CODE> <CODE>Str)</CODE> <CODE>-></CODE> <A HREF="#A" TITLE="A - one-place adjective">A</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>mkA</CODE></TD>+<TD><CODE>(banal,banale,banaux,banalement</CODE> <CODE>:</CODE> <CODE>Str)</CODE> <CODE>-></CODE> <A HREF="#A" TITLE="A - one-place adjective">A</A></TD>+<TD><I>worst-case adjective</I></TD>+</TR>+<TR>+<TD><CODE>mkA</CODE></TD>+<TD><A HREF="#A" TITLE="A - one-place adjective">A</A> <CODE>-></CODE> <A HREF="#A" TITLE="A - one-place adjective">A</A> <CODE>-></CODE> <A HREF="#A" TITLE="A - one-place adjective">A</A></TD>+<TD><I>irregular comparison, e.g. bon-meilleur</I></TD>+</TR>+<TR>+<TD><CODE>prefixA</CODE></TD>+<TD><A HREF="#A" TITLE="A - one-place adjective">A</A> <CODE>-></CODE> <A HREF="#A" TITLE="A - one-place adjective">A</A></TD>+<TD><I>adjective that comes before noun, e.g. petit</I></TD>+</TR>+<TR>+<TD><CODE>mkA2</CODE></TD>+<TD><A HREF="#A" TITLE="A - one-place adjective">A</A> <CODE>-></CODE> <A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A> <CODE>-></CODE> <A HREF="#A2" TITLE="A2 - two-place adjective">A2</A></TD>+<TD><I>e.g. supérieur + dative</I></TD>+</TR>+<TR>+<TD><CODE>mkAdv</CODE></TD>+<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#Adv" TITLE="Adv - verb-phrase-modifying adverb">Adv</A></TD>+<TD><I>ordinary adverb</I></TD>+</TR>+<TR>+<TD><CODE>mkAdV</CODE></TD>+<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#AdV" TITLE="Adv - verb-phrase-modifying adverb">AdV</A></TD>+<TD><I>sentential adverb, e.g. toujours</I></TD>+</TR>+<TR>+<TD><CODE>mkAdA</CODE></TD>+<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#AdA" TITLE="AdA - adjective-modifying adverb">AdA</A></TD>+<TD><I>modify adjective, e.g. très</I></TD>+</TR>+<TR>+<TD><CODE>mkV</CODE></TD>+<TD><CODE>(finir</CODE> <CODE>:</CODE> <CODE>Str)</CODE> <CODE>-></CODE> <A HREF="#V" TITLE="V - one-place verb">V</A></TD>+<TD><I>regular 1/2/3 conjugation</I></TD>+</TR>+<TR>+<TD><CODE>mkV</CODE></TD>+<TD><CODE>(jeter,jette,jettera</CODE> <CODE>:</CODE> <CODE>Str)</CODE> <CODE>-></CODE> <A HREF="#V" TITLE="V - one-place verb">V</A></TD>+<TD><I>1st conjugation variations</I></TD>+</TR>+<TR>+<TD><CODE>mkV</CODE></TD>+<TD><CODE>(tenir,tiens,tenons,tiennent,tint,tiendra,tenu</CODE> <CODE>:</CODE> <CODE>Str)</CODE> <CODE>-></CODE> <A HREF="#V" TITLE="V - one-place verb">V</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>mkV</CODE></TD>+<TD><CODE>(tenir,tiens,tient,tenons,tenez,tiennent,tienne,tenions,tiensI,tint,tiendra,tenu</CODE> <CODE>:</CODE> <CODE>Str)</CODE> <CODE>-></CODE> <A HREF="#V" TITLE="V - one-place verb">V</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>mkV</CODE></TD>+<TD><A HREF="#V2" TITLE="V2 - two-place verb">V2</A> <CODE>-></CODE> <A HREF="#V" TITLE="V - one-place verb">V</A></TD>+<TD><I>make 2-place to 1-place (e.g. from IrregFre)</I></TD>+</TR>+<TR>+<TD><CODE>etreV</CODE></TD>+<TD><A HREF="#V" TITLE="V - one-place verb">V</A> <CODE>-></CODE> <A HREF="#V" TITLE="V - one-place verb">V</A></TD>+<TD><I>force auxiliary to be être (default avoir)</I></TD>+</TR>+<TR>+<TD><CODE>reflV</CODE></TD>+<TD><A HREF="#V" TITLE="V - one-place verb">V</A> <CODE>-></CODE> <A HREF="#V" TITLE="V - one-place verb">V</A></TD>+<TD><I>reflexive, implies auxiliary être, e.g. se demander</I></TD>+</TR>+<TR>+<TD><CODE>mkV2</CODE></TD>+<TD><A HREF="#V" TITLE="V - one-place verb">V</A> <CODE>-></CODE> <A HREF="#V2" TITLE="V2 - two-place verb">V2</A></TD>+<TD><I>direct transitive</I></TD>+</TR>+<TR>+<TD><CODE>mkV2</CODE></TD>+<TD><A HREF="#V" TITLE="V - one-place verb">V</A> <CODE>-></CODE> <A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A> <CODE>-></CODE> <A HREF="#V2" TITLE="V2 - two-place verb">V2</A></TD>+<TD><I>e.g. se fier + genitive</I></TD>+</TR>+<TR>+<TD><CODE>mkV3</CODE></TD>+<TD><A HREF="#V" TITLE="V - one-place verb">V</A> <CODE>-></CODE> <A HREF="#V3" TITLE="V3 - three-place verb">V3</A></TD>+<TD><I>donner (+ accusative + dative)</I></TD>+</TR>+<TR>+<TD><CODE>mkV3</CODE></TD>+<TD><A HREF="#V" TITLE="V - one-place verb">V</A> <CODE>-></CODE> <A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A> <CODE>-></CODE> <A HREF="#V3" TITLE="V3 - three-place verb">V3</A></TD>+<TD><I>placer (+ accusative) + dans</I></TD>+</TR>+<TR>+<TD><CODE>mkV3</CODE></TD>+<TD><A HREF="#V" TITLE="V - one-place verb">V</A> <CODE>-></CODE> <A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A> <CODE>-></CODE> <A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A> <CODE>-></CODE> <A HREF="#V3" TITLE="V3 - three-place verb">V3</A></TD>+<TD><I>parler + dative + genitive</I></TD>+</TR>+<TR>+<TD><CODE>mkVS</CODE></TD>+<TD><A HREF="#V" TITLE="V - one-place verb">V</A> <CODE>-></CODE> <A HREF="#VS" TITLE="VS - sentence-complement verb">VS</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>mkV2S</CODE></TD>+<TD><A HREF="#V" TITLE="V - one-place verb">V</A> <CODE>-></CODE> <A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A> <CODE>-></CODE> <A HREF="#V2S" TITLE="V2S - verb with NP and S complement">V2S</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>mkVV</CODE></TD>+<TD><A HREF="#V" TITLE="V - one-place verb">V</A> <CODE>-></CODE> <A HREF="#VV" TITLE="VV - verb-phrase-complement verb">VV</A></TD>+<TD><I>plain infinitive: "je veux parler"</I></TD>+</TR>+<TR>+<TD><CODE>deVV</CODE></TD>+<TD><A HREF="#V" TITLE="V - one-place verb">V</A> <CODE>-></CODE> <A HREF="#VV" TITLE="VV - verb-phrase-complement verb">VV</A></TD>+<TD><I>"j'essaie de parler"</I></TD>+</TR>+<TR>+<TD><CODE>aVV</CODE></TD>+<TD><A HREF="#V" TITLE="V - one-place verb">V</A> <CODE>-></CODE> <A HREF="#VV" TITLE="VV - verb-phrase-complement verb">VV</A></TD>+<TD><I>"j'arrive à parler"</I></TD>+</TR>+<TR>+<TD><CODE>mkV2V</CODE></TD>+<TD><A HREF="#V" TITLE="V - one-place verb">V</A> <CODE>-></CODE> <A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A> <CODE>-></CODE> <A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A> <CODE>-></CODE> <A HREF="#V2V" TITLE="V2V - verb with NP and V complement">V2V</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>mkVA</CODE></TD>+<TD><A HREF="#V" TITLE="V - one-place verb">V</A> <CODE>-></CODE> <A HREF="#VA" TITLE="VA - adjective-complement verb">VA</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>mkV2A</CODE></TD>+<TD><A HREF="#V" TITLE="V - one-place verb">V</A> <CODE>-></CODE> <A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A> <CODE>-></CODE> <A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A> <CODE>-></CODE> <A HREF="#V2A" TITLE="V2A - verb with NP and AP complement">V2A</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>mkVQ</CODE></TD>+<TD><A HREF="#V" TITLE="V - one-place verb">V</A> <CODE>-></CODE> <A HREF="#VQ" TITLE="VQ - question-complement verb">VQ</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>mkV2Q</CODE></TD>+<TD><A HREF="#V" TITLE="V - one-place verb">V</A> <CODE>-></CODE> <A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A> <CODE>-></CODE> <A HREF="#V2Q" TITLE="V2Q - verb with NP and Q complement">V2Q</A></TD>+<TD><I>-</I></TD>+</TR>+</TABLE>++<A NAME="toc92"></A>+<H2>Paradigms for German</H2>++<P>+<a name="RParadigms"></a>+</P>+<P>+source <A HREF="http://www.grammaticalframework.org/lib/src/german/ParadigmsGer.gf"><CODE>../src/german/ParadigmsGer.gf</CODE></A>+</P>++<TABLE BORDER="1" CELLPADDING="4">+<TR>+<TH>Function</TH>+<TH>Type</TH>+<TH COLSPAN="2">Explanation</TH>+</TR>+<TR>+<TD><CODE>Gender</CODE></TD>+<TD><A HREF="#Type">Type</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>masculine</CODE></TD>+<TD><A HREF="#Gender">Gender</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>feminine</CODE></TD>+<TD><A HREF="#Gender">Gender</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>neuter</CODE></TD>+<TD><A HREF="#Gender">Gender</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>Case</CODE></TD>+<TD><A HREF="#Type">Type</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>nominative</CODE></TD>+<TD><A HREF="#Case">Case</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>accusative</CODE></TD>+<TD><A HREF="#Case">Case</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>dative</CODE></TD>+<TD><A HREF="#Case">Case</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>genitive</CODE></TD>+<TD><A HREF="#Case">Case</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>Number</CODE></TD>+<TD><A HREF="#Type">Type</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>singular</CODE></TD>+<TD><A HREF="#Number">Number</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>plural</CODE></TD>+<TD><A HREF="#Number">Number</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>mkN</CODE></TD>+<TD><CODE>(Stufe</CODE> <CODE>:</CODE> <CODE>Str)</CODE> <CODE>-></CODE> <A HREF="#N" TITLE="N - common noun">N</A></TD>+<TD><I>die Stufe-Stufen, der Tisch-Tische</I></TD>+</TR>+<TR>+<TD><CODE>mkN</CODE></TD>+<TD><CODE>(Bild,Bilder</CODE> <CODE>:</CODE> <CODE>Str)</CODE> <CODE>-></CODE> <A HREF="#Gender">Gender</A> <CODE>-></CODE> <A HREF="#N" TITLE="N - common noun">N</A></TD>+<TD><I>sg and pl nom, and gender</I></TD>+</TR>+<TR>+<TD><CODE>mkN</CODE></TD>+<TD><CODE>(x1,_,_,_,_,x6</CODE> <CODE>:</CODE> <CODE>Str)</CODE> <CODE>-></CODE> <A HREF="#Gender">Gender</A> <CODE>-></CODE> <A HREF="#N" TITLE="N - common noun">N</A></TD>+<TD><I>worst case: mann, mann, manne, mannes, männer, männern</I></TD>+</TR>+<TR>+<TD><CODE>mkN2</CODE></TD>+<TD><A HREF="#N" TITLE="N - common noun">N</A> <CODE>-></CODE> <A HREF="#N2" TITLE="N2 - relational noun">N2</A></TD>+<TD><I>noun + von</I></TD>+</TR>+<TR>+<TD><CODE>mkN2</CODE></TD>+<TD><A HREF="#N" TITLE="N - common noun">N</A> <CODE>-></CODE> <A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A> <CODE>-></CODE> <A HREF="#N2" TITLE="N2 - relational noun">N2</A></TD>+<TD><I>noun + other preposition</I></TD>+</TR>+<TR>+<TD><CODE>mkN3</CODE></TD>+<TD><A HREF="#N" TITLE="N - common noun">N</A> <CODE>-></CODE> <A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A> <CODE>-></CODE> <A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A> <CODE>-></CODE> <A HREF="#N3" TITLE="N3 - three-place relational noun">N3</A></TD>+<TD><I>noun + two prepositions</I></TD>+</TR>+<TR>+<TD><CODE>mkPN</CODE></TD>+<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#PN" TITLE="PN - proper name">PN</A></TD>+<TD><I>regular name with genitive in "s"</I></TD>+</TR>+<TR>+<TD><CODE>mkPN</CODE></TD>+<TD><CODE>(nom,gen</CODE> <CODE>:</CODE> <CODE>Str)</CODE> <CODE>-></CODE> <A HREF="#PN" TITLE="PN - proper name">PN</A></TD>+<TD><I>name with other genitive</I></TD>+</TR>+<TR>+<TD><CODE>mkPN</CODE></TD>+<TD><CODE>(nom,acc,dat,gen</CODE> <CODE>:</CODE> <CODE>Str)</CODE> <CODE>-></CODE> <A HREF="#PN" TITLE="PN - proper name">PN</A></TD>+<TD><I>name with all case forms</I></TD>+</TR>+<TR>+<TD><CODE>mkA</CODE></TD>+<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#A" TITLE="A - one-place adjective">A</A></TD>+<TD><I>regular adjective, works for most cases</I></TD>+</TR>+<TR>+<TD><CODE>mkA</CODE></TD>+<TD><CODE>(gut,besser,beste</CODE> <CODE>:</CODE> <CODE>Str)</CODE> <CODE>-></CODE> <A HREF="#A" TITLE="A - one-place adjective">A</A></TD>+<TD><I>irregular comparison</I></TD>+</TR>+<TR>+<TD><CODE>mkA</CODE></TD>+<TD><CODE>(gut,gute,besser,beste</CODE> <CODE>:</CODE> <CODE>Str)</CODE> <CODE>-></CODE> <A HREF="#A" TITLE="A - one-place adjective">A</A></TD>+<TD><I>irregular positive if ending added</I></TD>+</TR>+<TR>+<TD><CODE>invarA</CODE></TD>+<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#A" TITLE="A - one-place adjective">A</A></TD>+<TD><I>invariable, e.g. prima</I></TD>+</TR>+<TR>+<TD><CODE>mkA2</CODE></TD>+<TD><A HREF="#A" TITLE="A - one-place adjective">A</A> <CODE>-></CODE> <A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A> <CODE>-></CODE> <A HREF="#A2" TITLE="A2 - two-place adjective">A2</A></TD>+<TD><I>e.g. teilbar + durch</I></TD>+</TR>+<TR>+<TD><CODE>mkAdv</CODE></TD>+<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#Adv" TITLE="Adv - verb-phrase-modifying adverb">Adv</A></TD>+<TD><I>adverbs have just one form anyway</I></TD>+</TR>+<TR>+<TD><CODE>mkPrep</CODE></TD>+<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#Case">Case</A> <CODE>-></CODE> <A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A></TD>+<TD><I>e.g. "durch" + accusative</I></TD>+</TR>+<TR>+<TD><CODE>accPrep</CODE></TD>+<TD><A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A></TD>+<TD><I>no string, just accusative case</I></TD>+</TR>+<TR>+<TD><CODE>datPrep</CODE></TD>+<TD><A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A></TD>+<TD><I>no string, just dative case</I></TD>+</TR>+<TR>+<TD><CODE>genPrep</CODE></TD>+<TD><A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A></TD>+<TD><I>no string, just genitive case</I></TD>+</TR>+<TR>+<TD><CODE>von_Prep</CODE></TD>+<TD><A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A></TD>+<TD><I>von + dative</I></TD>+</TR>+<TR>+<TD><CODE>zu_Prep</CODE></TD>+<TD><A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A></TD>+<TD><I>zu + dative, with contractions zum, zur</I></TD>+</TR>+<TR>+<TD><CODE>anDat_Prep</CODE></TD>+<TD><A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A></TD>+<TD><I>an + dative, with contraction am</I></TD>+</TR>+<TR>+<TD><CODE>inDat_Prep</CODE></TD>+<TD><A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A></TD>+<TD><I>in + dative, with contraction ins</I></TD>+</TR>+<TR>+<TD><CODE>inAcc_Prep</CODE></TD>+<TD><A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A></TD>+<TD><I>in + accusative, with contraction im</I></TD>+</TR>+<TR>+<TD><CODE>mkV</CODE></TD>+<TD><CODE>(führen</CODE> <CODE>:</CODE> <CODE>Str)</CODE> <CODE>-></CODE> <A HREF="#V" TITLE="V - one-place verb">V</A></TD>+<TD><I>regular verb</I></TD>+</TR>+<TR>+<TD><CODE>mkV</CODE></TD>+<TD><CODE>(sehen,sieht,sah,sähe,gesehen</CODE> <CODE>:</CODE> <CODE>Str)</CODE> <CODE>-></CODE> <A HREF="#V" TITLE="V - one-place verb">V</A></TD>+<TD><I>irregular verb theme</I></TD>+</TR>+<TR>+<TD><CODE>mkV</CODE></TD>+<TD><CODE>(geben,</CODE> <CODE>gibt,</CODE> <CODE>gib,</CODE> <CODE>gab,</CODE> <CODE>gäbe,</CODE> <CODE>gegeben</CODE> <CODE>:</CODE> <CODE>Str)</CODE> <CODE>-></CODE> <A HREF="#V" TITLE="V - one-place verb">V</A></TD>+<TD><I>worst-case verb</I></TD>+</TR>+<TR>+<TD><CODE>mkV</CODE></TD>+<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#V" TITLE="V - one-place verb">V</A> <CODE>-></CODE> <A HREF="#V" TITLE="V - one-place verb">V</A></TD>+<TD><I>movable prefix, e.g. auf+fassen</I></TD>+</TR>+<TR>+<TD><CODE>no_geV</CODE></TD>+<TD><A HREF="#V" TITLE="V - one-place verb">V</A> <CODE>-></CODE> <A HREF="#V" TITLE="V - one-place verb">V</A></TD>+<TD><I>no participle "ge", e.g. "bedeuten"</I></TD>+</TR>+<TR>+<TD><CODE>fixprefixV</CODE></TD>+<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#V" TITLE="V - one-place verb">V</A> <CODE>-></CODE> <A HREF="#V" TITLE="V - one-place verb">V</A></TD>+<TD><I>add prefix such as "be"; implies no_ge</I></TD>+</TR>+<TR>+<TD><CODE>seinV</CODE></TD>+<TD><A HREF="#V" TITLE="V - one-place verb">V</A> <CODE>-></CODE> <A HREF="#V" TITLE="V - one-place verb">V</A></TD>+<TD><I>force "sein" as auxiliary</I></TD>+</TR>+<TR>+<TD><CODE>habenV</CODE></TD>+<TD><A HREF="#V" TITLE="V - one-place verb">V</A> <CODE>-></CODE> <A HREF="#V" TITLE="V - one-place verb">V</A></TD>+<TD><I>force "haben" as auxiliary</I></TD>+</TR>+<TR>+<TD><CODE>reflV</CODE></TD>+<TD><A HREF="#V" TITLE="V - one-place verb">V</A> <CODE>-></CODE> <A HREF="#Case">Case</A> <CODE>-></CODE> <A HREF="#V" TITLE="V - one-place verb">V</A></TD>+<TD><I>reflexive, with case</I></TD>+</TR>+<TR>+<TD><CODE>mkV2</CODE></TD>+<TD><A HREF="#V" TITLE="V - one-place verb">V</A> <CODE>-></CODE> <A HREF="#V2" TITLE="V2 - two-place verb">V2</A></TD>+<TD><I>direct object</I></TD>+</TR>+<TR>+<TD><CODE>mkV2</CODE></TD>+<TD><A HREF="#V" TITLE="V - one-place verb">V</A> <CODE>-></CODE> <A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A> <CODE>-></CODE> <A HREF="#V2" TITLE="V2 - two-place verb">V2</A></TD>+<TD><I>preposition for complement</I></TD>+</TR>+<TR>+<TD><CODE>mkV2</CODE></TD>+<TD><A HREF="#V" TITLE="V - one-place verb">V</A> <CODE>-></CODE> <A HREF="#Case">Case</A> <CODE>-></CODE> <A HREF="#V2" TITLE="V2 - two-place verb">V2</A></TD>+<TD><I>just case for complement</I></TD>+</TR>+<TR>+<TD><CODE>accdatV3</CODE></TD>+<TD><A HREF="#V" TITLE="V - one-place verb">V</A> <CODE>-></CODE> <A HREF="#V3" TITLE="V3 - three-place verb">V3</A></TD>+<TD><I>geben + acc + dat</I></TD>+</TR>+<TR>+<TD><CODE>dirV3</CODE></TD>+<TD><A HREF="#V" TITLE="V - one-place verb">V</A> <CODE>-></CODE> <A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A> <CODE>-></CODE> <A HREF="#V3" TITLE="V3 - three-place verb">V3</A></TD>+<TD><I>senden + acc + nach</I></TD>+</TR>+<TR>+<TD><CODE>mkV3</CODE></TD>+<TD><A HREF="#V" TITLE="V - one-place verb">V</A> <CODE>-></CODE> <A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A> <CODE>-></CODE> <A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A> <CODE>-></CODE> <A HREF="#V3" TITLE="V3 - three-place verb">V3</A></TD>+<TD><I>sprechen + mit + über</I></TD>+</TR>+<TR>+<TD><CODE>mkVS</CODE></TD>+<TD><A HREF="#V" TITLE="V - one-place verb">V</A> <CODE>-></CODE> <A HREF="#VS" TITLE="VS - sentence-complement verb">VS</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>mkV2S</CODE></TD>+<TD><A HREF="#V" TITLE="V - one-place verb">V</A> <CODE>-></CODE> <A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A> <CODE>-></CODE> <A HREF="#V2S" TITLE="V2S - verb with NP and S complement">V2S</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>mkVV</CODE></TD>+<TD><A HREF="#V" TITLE="V - one-place verb">V</A> <CODE>-></CODE> <A HREF="#VV" TITLE="VV - verb-phrase-complement verb">VV</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>mkV2V</CODE></TD>+<TD><A HREF="#V" TITLE="V - one-place verb">V</A> <CODE>-></CODE> <A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A> <CODE>-></CODE> <A HREF="#V2V" TITLE="V2V - verb with NP and V complement">V2V</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>mkVA</CODE></TD>+<TD><A HREF="#V" TITLE="V - one-place verb">V</A> <CODE>-></CODE> <A HREF="#VA" TITLE="VA - adjective-complement verb">VA</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>mkV2A</CODE></TD>+<TD><A HREF="#V" TITLE="V - one-place verb">V</A> <CODE>-></CODE> <A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A> <CODE>-></CODE> <A HREF="#V2A" TITLE="V2A - verb with NP and AP complement">V2A</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>mkVQ</CODE></TD>+<TD><A HREF="#V" TITLE="V - one-place verb">V</A> <CODE>-></CODE> <A HREF="#VQ" TITLE="VQ - question-complement verb">VQ</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>mkV2Q</CODE></TD>+<TD><A HREF="#V" TITLE="V - one-place verb">V</A> <CODE>-></CODE> <A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A> <CODE>-></CODE> <A HREF="#V2Q" TITLE="V2Q - verb with NP and Q complement">V2Q</A></TD>+<TD><I>-</I></TD>+</TR>+</TABLE>++<A NAME="toc93"></A>+<H2>Paradigms for Hindi</H2>++<P>+<a name="RParadigms"></a>+</P>+<P>+source <A HREF="http://www.grammaticalframework.org/lib/src/hindi/ParadigmsHin.gf"><CODE>../src/hindi/ParadigmsHin.gf</CODE></A>+</P>++<TABLE BORDER="1" CELLPADDING="4">+<TR>+<TH>Function</TH>+<TH>Type</TH>+<TH COLSPAN="2">Explanation</TH>+</TR>+<TR>+<TD><CODE>masculine</CODE></TD>+<TD><A HREF="#Gender">Gender</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>feminine</CODE></TD>+<TD><A HREF="#Gender">Gender</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>singular</CODE></TD>+<TD><CODE>Number;</CODE></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>plural</CODE></TD>+<TD><CODE>Number;</CODE></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>mkN</CODE></TD>+<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#N" TITLE="N - common noun">N</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>mkN</CODE></TD>+<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#Gender">Gender</A> <CODE>-></CODE> <A HREF="#N" TITLE="N - common noun">N</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>mkN</CODE></TD>+<TD><CODE>(x1,_,_,_,_,x6</CODE> <CODE>:</CODE> <CODE>Str)</CODE> <CODE>-></CODE> <A HREF="#Gender">Gender</A> <CODE>-></CODE> <A HREF="#N" TITLE="N - common noun">N</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>mkN2</CODE></TD>+<TD><A HREF="#N" TITLE="N - common noun">N</A> <CODE>-></CODE> <A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A> <CODE>-></CODE> <CODE>Str</CODE> <CODE>-></CODE> <CODE>N2;</CODE></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>mkN3</CODE></TD>+<TD><A HREF="#N" TITLE="N - common noun">N</A> <CODE>-></CODE> <A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A> <CODE>-></CODE> <CODE>Str</CODE> <CODE>-></CODE> <CODE>Str-></CODE> <A HREF="#N3" TITLE="N3 - three-place relational noun">N3</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>mkCmpdNoun</CODE></TD>+<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#N" TITLE="N - common noun">N</A> <CODE>-></CODE> <A HREF="#N" TITLE="N - common noun">N</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>mkPN</CODE></TD>+<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#PN" TITLE="PN - proper name">PN</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>personalPN</CODE></TD>+<TD><CODE>Str</CODE> <CODE>-></CODE> <CODE>Str</CODE> <CODE>-></CODE> <CODE>Str</CODE> <CODE>-></CODE> <CODE>Str</CODE> <CODE>-></CODE> <CODE>Str</CODE> <CODE>-></CODE> <CODE>Str</CODE> <CODE>-></CODE> <CODE>Str</CODE> <CODE>-></CODE> <A HREF="#Number">Number</A> <CODE>-></CODE> <A HREF="#Gender">Gender</A> <CODE>-></CODE> <A HREF="#UPerson">UPerson</A> <CODE>-></CODE> <A HREF="#Pron" TITLE="Pron - personal pronoun">Pron</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>demoPN</CODE></TD>+<TD><CODE>Str</CODE> <CODE>-></CODE> <CODE>Str</CODE> <CODE>-></CODE> <CODE>Str</CODE> <CODE>-></CODE> <A 'HREF="#Quant" TITLE="Quant - quantifier ('nucleus' of Det)"'>Quant</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>mkDet</CODE></TD>+<TD><CODE>Str</CODE> <CODE>-></CODE> <CODE>Str</CODE> <CODE>-></CODE> <CODE>Str</CODE> <CODE>-></CODE> <CODE>Str</CODE> <CODE>-></CODE> <A HREF="#Number">Number</A> <CODE>-></CODE> <A HREF="#Det" TITLE="Det - determiner phrase">Det</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>mkIP</CODE></TD>+<TD><CODE>(x1,x2,x3:Str)</CODE> <CODE>-></CODE> <A HREF="#Number">Number</A> <CODE>-></CODE> <A HREF="#Gender">Gender</A> <CODE>-></CODE> <A HREF="#IP" TITLE="IP - interrogative pronoun">IP</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>mkAdN</CODE></TD>+<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#AdN" TITLE="AdN - numeral-modifying adverb">AdN</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>mkA</CODE></TD>+<TD><CODE>Str-></CODE> <A HREF="#A" TITLE="A - one-place adjective">A</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>mkA</CODE></TD>+<TD><CODE>Str</CODE> <CODE>-></CODE> <CODE>Str</CODE> <CODE>-></CODE> <A HREF="#A2" TITLE="A2 - two-place adjective">A2</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>mkIrregA</CODE></TD>+<TD><CODE>Str</CODE> <CODE>-></CODE> <CODE>Str</CODE> <CODE>-></CODE> <A HREF="#A2" TITLE="A2 - two-place adjective">A2</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>mkV</CODE></TD>+<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#V" TITLE="V - one-place verb">V</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>mkV2</CODE></TD>+<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#V2" TITLE="V2 - two-place verb">V2</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>mkV2</CODE></TD>+<TD><A HREF="#V" TITLE="V - one-place verb">V</A> <CODE>-></CODE> <A HREF="#V2" TITLE="V2 - two-place verb">V2</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>mkV2</CODE></TD>+<TD><A HREF="#V" TITLE="V - one-place verb">V</A> <CODE>-></CODE> <CODE>Str</CODE> <CODE>-></CODE> <A HREF="#V2" TITLE="V2 - two-place verb">V2</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>mkV3</CODE></TD>+<TD><A HREF="#V" TITLE="V - one-place verb">V</A> <CODE>-></CODE> <CODE>Str</CODE> <CODE>-></CODE> <CODE>Str</CODE> <CODE>-></CODE> <CODE>V3;</CODE></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>mkV2V</CODE></TD>+<TD><A HREF="#V" TITLE="V - one-place verb">V</A> <CODE>-></CODE> <CODE>Str</CODE> <CODE>-></CODE> <CODE>Str</CODE> <CODE>-></CODE> <A HREF="#Bool">Bool</A> <CODE>-></CODE> <A HREF="#V2V" TITLE="V2V - verb with NP and V complement">V2V</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>compoundV</CODE></TD>+<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#V" TITLE="V - one-place verb">V</A> <CODE>-></CODE> <A HREF="#V" TITLE="V - one-place verb">V</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>compoundV</CODE></TD>+<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#V2" TITLE="V2 - two-place verb">V2</A> <CODE>-></CODE> <A HREF="#V" TITLE="V - one-place verb">V</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>mkAdv</CODE></TD>+<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#Adv" TITLE="Adv - verb-phrase-modifying adverb">Adv</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>mkPrep</CODE></TD>+<TD><CODE>Str</CODE> <CODE>-></CODE> <CODE>Str</CODE> <CODE>-></CODE> <A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>mkIQuant</CODE></TD>+<TD><CODE>(s1,_,_,_,_,_,_,_,_,_,_,s12:Str)</CODE> <CODE>-></CODE> <A HREF="#IQuant">IQuant</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>mkQuant</CODE></TD>+<TD><A HREF="#Pron" TITLE="Pron - personal pronoun">Pron</A> <CODE>-></CODE> <A 'HREF="#Quant" TITLE="Quant - quantifier ('nucleus' of Det)"'>Quant</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>mkQuant</CODE></TD>+<TD><A HREF="#Pron" TITLE="Pron - personal pronoun">Pron</A> <CODE>-></CODE> <A 'HREF="#Quant" TITLE="Quant - quantifier ('nucleus' of Det)"'>Quant</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>mkConj</CODE></TD>+<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#Conj" TITLE="Conj - conjunction">Conj</A></TD>+<TD><I>and (plural agreement)</I></TD>+</TR>+<TR>+<TD><CODE>mkConj</CODE></TD>+<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#Number">Number</A> <CODE>-></CODE> <A HREF="#Conj" TITLE="Conj - conjunction">Conj</A></TD>+<TD><I>or (agrement number given as argument)</I></TD>+</TR>+<TR>+<TD><CODE>mkConj</CODE></TD>+<TD><CODE>Str</CODE> <CODE>-></CODE> <CODE>Str</CODE> <CODE>-></CODE> <A HREF="#Conj" TITLE="Conj - conjunction">Conj</A></TD>+<TD><I>both ... and (plural)</I></TD>+</TR>+<TR>+<TD><CODE>mkConj</CODE></TD>+<TD><CODE>Str</CODE> <CODE>-></CODE> <CODE>Str</CODE> <CODE>-></CODE> <A HREF="#Number">Number</A> <CODE>-></CODE> <A HREF="#Conj" TITLE="Conj - conjunction">Conj</A></TD>+<TD><I>either ... or (agrement number given as argument)</I></TD>+</TR>+<TR>+<TD><CODE>mkConj</CODE></TD>+<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#Conj" TITLE="Conj - conjunction">Conj</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>mkConj</CODE></TD>+<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#Number">Number</A> <CODE>-></CODE> <A HREF="#Conj" TITLE="Conj - conjunction">Conj</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>mkConj</CODE></TD>+<TD><CODE>Str</CODE> <CODE>-></CODE> <CODE>Str</CODE> <CODE>-></CODE> <A HREF="#Conj" TITLE="Conj - conjunction">Conj</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>mkConj</CODE></TD>+<TD><CODE>Str</CODE> <CODE>-></CODE> <CODE>Str</CODE> <CODE>-></CODE> <A HREF="#Number">Number</A> <CODE>-></CODE> <A HREF="#Conj" TITLE="Conj - conjunction">Conj</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>mk2Conj</CODE></TD>+<TD><CODE>Str</CODE> <CODE>-></CODE> <CODE>Str</CODE> <CODE>-></CODE> <A HREF="#Number">Number</A> <CODE>-></CODE> <A HREF="#Conj" TITLE="Conj - conjunction">Conj</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>mkVV</CODE></TD>+<TD><A HREF="#V" TITLE="V - one-place verb">V</A> <CODE>-></CODE> <A HREF="#VV" TITLE="VV - verb-phrase-complement verb">VV</A></TD>+<TD><I>-</I></TD>+</TR>+</TABLE>++<A NAME="toc94"></A>+<H2>Paradigms for Italian</H2>++<P>+<a name="RParadigms"></a>+</P>+<P>+source <A HREF="http://www.grammaticalframework.org/lib/src/italian/ParadigmsIta.gf"><CODE>../src/italian/ParadigmsIta.gf</CODE></A>+</P>++<TABLE BORDER="1" CELLPADDING="4">+<TR>+<TH>Function</TH>+<TH>Type</TH>+<TH COLSPAN="2">Explanation</TH>+</TR>+<TR>+<TD><CODE>Gender</CODE></TD>+<TD><A HREF="#Type">Type</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>masculine</CODE></TD>+<TD><A HREF="#Gender">Gender</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>feminine</CODE></TD>+<TD><A HREF="#Gender">Gender</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>Number</CODE></TD>+<TD><A HREF="#Type">Type</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>singular</CODE></TD>+<TD><A HREF="#Number">Number</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>plural</CODE></TD>+<TD><A HREF="#Number">Number</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>--Prep</CODE></TD>+<TD><A HREF="#Type">Type</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>accusative</CODE></TD>+<TD><A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A></TD>+<TD><I>direct object</I></TD>+</TR>+<TR>+<TD><CODE>genitive</CODE></TD>+<TD><A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A></TD>+<TD><I>preposition "di" and its contractions</I></TD>+</TR>+<TR>+<TD><CODE>dative</CODE></TD>+<TD><A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A></TD>+<TD><I>preposition "a" and its contractions</I></TD>+</TR>+<TR>+<TD><CODE>con_Prep</CODE></TD>+<TD><A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A></TD>+<TD><I>preposition "con" and its contractions</I></TD>+</TR>+<TR>+<TD><CODE>da_Prep</CODE></TD>+<TD><A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A></TD>+<TD><I>preposition "da" and its contractions</I></TD>+</TR>+<TR>+<TD><CODE>in_Prep</CODE></TD>+<TD><A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A></TD>+<TD><I>preposition "in" and its contractions</I></TD>+</TR>+<TR>+<TD><CODE>su_Prep</CODE></TD>+<TD><A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A></TD>+<TD><I>preposition "su" and its contractions</I></TD>+</TR>+<TR>+<TD><CODE>mkPrep</CODE></TD>+<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A></TD>+<TD><I>other prepositions, e.g. "dopo"</I></TD>+</TR>+<TR>+<TD><CODE>mkN</CODE></TD>+<TD><CODE>(cane</CODE> <CODE>:</CODE> <CODE>Str)</CODE> <CODE>-></CODE> <A HREF="#N" TITLE="N - common noun">N</A></TD>+<TD><I>regular noun; fem for -"a", masc otherwise</I></TD>+</TR>+<TR>+<TD><CODE>mkN</CODE></TD>+<TD><CODE>(carne</CODE> <CODE>:</CODE> <CODE>Str)</CODE> <CODE>-></CODE> <A HREF="#Gender">Gender</A> <CODE>-></CODE> <A HREF="#N" TITLE="N - common noun">N</A></TD>+<TD><I>override default gender</I></TD>+</TR>+<TR>+<TD><CODE>mkN</CODE></TD>+<TD><CODE>(uomo,uomini</CODE> <CODE>:</CODE> <CODE>Str)</CODE> <CODE>-></CODE> <A HREF="#Gender">Gender</A> <CODE>-></CODE> <A HREF="#N" TITLE="N - common noun">N</A></TD>+<TD><I>worst case</I></TD>+</TR>+<TR>+<TD><CODE>mkN</CODE></TD>+<TD><A HREF="#N" TITLE="N - common noun">N</A> <CODE>-></CODE> <CODE>Str</CODE> <CODE>-></CODE> <A HREF="#N" TITLE="N - common noun">N</A></TD>+<TD><I>compound such as "numero" + "di telefono"</I></TD>+</TR>+<TR>+<TD><CODE>mkN2</CODE></TD>+<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#N2" TITLE="N2 - relational noun">N2</A></TD>+<TD><I>regular with genitive, e.g. "figlio" + "di"</I></TD>+</TR>+<TR>+<TD><CODE>mkN2</CODE></TD>+<TD><A HREF="#N" TITLE="N - common noun">N</A> <CODE>-></CODE> <A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A> <CODE>-></CODE> <A HREF="#N2" TITLE="N2 - relational noun">N2</A></TD>+<TD><I>arbitrary noun and preposition</I></TD>+</TR>+<TR>+<TD><CODE>mkN3</CODE></TD>+<TD><A HREF="#N" TITLE="N - common noun">N</A> <CODE>-></CODE> <A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A> <CODE>-></CODE> <A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A> <CODE>-></CODE> <A HREF="#N3" TITLE="N3 - three-place relational noun">N3</A></TD>+<TD><I>e.g. volo + da + per</I></TD>+</TR>+<TR>+<TD><CODE>mkPN</CODE></TD>+<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#PN" TITLE="PN - proper name">PN</A></TD>+<TD><I>femininne for "-a", otherwise masculine</I></TD>+</TR>+<TR>+<TD><CODE>mkPN</CODE></TD>+<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#Gender">Gender</A> <CODE>-></CODE> <A HREF="#PN" TITLE="PN - proper name">PN</A></TD>+<TD><I>set gender manually</I></TD>+</TR>+<TR>+<TD><CODE>mkA</CODE></TD>+<TD><CODE>(bianco</CODE> <CODE>:</CODE> <CODE>Str)</CODE> <CODE>-></CODE> <A HREF="#A" TITLE="A - one-place adjective">A</A></TD>+<TD><I>predictable adjective</I></TD>+</TR>+<TR>+<TD><CODE>mkA</CODE></TD>+<TD><CODE>(solo,sola,soli,sole,solamente</CODE> <CODE>:</CODE> <CODE>Str)</CODE> <CODE>-></CODE> <A HREF="#A" TITLE="A - one-place adjective">A</A></TD>+<TD><I>irregular adjective</I></TD>+</TR>+<TR>+<TD><CODE>mkA</CODE></TD>+<TD><A HREF="#A" TITLE="A - one-place adjective">A</A> <CODE>-></CODE> <A HREF="#A" TITLE="A - one-place adjective">A</A> <CODE>-></CODE> <A HREF="#A" TITLE="A - one-place adjective">A</A></TD>+<TD><I>special comparison, e.g. buono - migliore</I></TD>+</TR>+<TR>+<TD><CODE>prefixA</CODE></TD>+<TD><A HREF="#A" TITLE="A - one-place adjective">A</A> <CODE>-></CODE> <A HREF="#A" TITLE="A - one-place adjective">A</A></TD>+<TD><I>adjective that comes before noun (default: after)</I></TD>+</TR>+<TR>+<TD><CODE>mkA2</CODE></TD>+<TD><A HREF="#A" TITLE="A - one-place adjective">A</A> <CODE>-></CODE> <A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A> <CODE>-></CODE> <A HREF="#A2" TITLE="A2 - two-place adjective">A2</A></TD>+<TD><I>e.g. divisibile + per</I></TD>+</TR>+<TR>+<TD><CODE>mkAdv</CODE></TD>+<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#Adv" TITLE="Adv - verb-phrase-modifying adverb">Adv</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>mkAdV</CODE></TD>+<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#AdV" TITLE="Adv - verb-phrase-modifying adverb">AdV</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>mkAdA</CODE></TD>+<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#AdA" TITLE="AdA - adjective-modifying adverb">AdA</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>mkV</CODE></TD>+<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#V" TITLE="V - one-place verb">V</A></TD>+<TD><I>regular verbs in "-are"/"-ire"</I></TD>+</TR>+<TR>+<TD><CODE>mkV</CODE></TD>+<TD><A HREF="#Verbo">Verbo</A> <CODE>-></CODE> <A HREF="#V" TITLE="V - one-place verb">V</A></TD>+<TD><I>verbs formed by BeschIta</I></TD>+</TR>+<TR>+<TD><CODE>mkV</CODE></TD>+<TD><CODE>(udire,odo,ode,udiamo,udiro,udii,udisti,udi,udirono,odi,udito</CODE> <CODE>:</CODE> <CODE>Str)</CODE> <CODE>-></CODE> <A HREF="#V" TITLE="V - one-place verb">V</A></TD>+<TD><I>worst case</I></TD>+</TR>+<TR>+<TD><CODE>essereV</CODE></TD>+<TD><A HREF="#V" TITLE="V - one-place verb">V</A> <CODE>-></CODE> <A HREF="#V" TITLE="V - one-place verb">V</A></TD>+<TD><I>force "essere" as auxiliary (default avere)</I></TD>+</TR>+<TR>+<TD><CODE>reflV</CODE></TD>+<TD><A HREF="#V" TITLE="V - one-place verb">V</A> <CODE>-></CODE> <A HREF="#V" TITLE="V - one-place verb">V</A></TD>+<TD><I>reflexive verb (implies essere)</I></TD>+</TR>+<TR>+<TD><CODE>mkV2</CODE></TD>+<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#V2" TITLE="V2 - two-place verb">V2</A></TD>+<TD><I>regular verb, direct object</I></TD>+</TR>+<TR>+<TD><CODE>mkV2</CODE></TD>+<TD><A HREF="#V" TITLE="V - one-place verb">V</A> <CODE>-></CODE> <A HREF="#V2" TITLE="V2 - two-place verb">V2</A></TD>+<TD><I>direct object</I></TD>+</TR>+<TR>+<TD><CODE>mkV2</CODE></TD>+<TD><A HREF="#V" TITLE="V - one-place verb">V</A> <CODE>-></CODE> <A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A> <CODE>-></CODE> <A HREF="#V2" TITLE="V2 - two-place verb">V2</A></TD>+<TD><I>prepositional object</I></TD>+</TR>+<TR>+<TD><CODE>mkV3</CODE></TD>+<TD><A HREF="#V" TITLE="V - one-place verb">V</A> <CODE>-></CODE> <A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A> <CODE>-></CODE> <A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A> <CODE>-></CODE> <A HREF="#V3" TITLE="V3 - three-place verb">V3</A></TD>+<TD><I>parlare, a, di</I></TD>+</TR>+<TR>+<TD><CODE>dirV3</CODE></TD>+<TD><A HREF="#V" TITLE="V - one-place verb">V</A> <CODE>-></CODE> <A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A> <CODE>-></CODE> <A HREF="#V3" TITLE="V3 - three-place verb">V3</A></TD>+<TD><I>dare,_,a</I></TD>+</TR>+<TR>+<TD><CODE>dirdirV3</CODE></TD>+<TD><A HREF="#V" TITLE="V - one-place verb">V</A> <CODE>-></CODE> <A HREF="#V3" TITLE="V3 - three-place verb">V3</A></TD>+<TD><I>dare,_,_</I></TD>+</TR>+<TR>+<TD><CODE>mkVS</CODE></TD>+<TD><A HREF="#V" TITLE="V - one-place verb">V</A> <CODE>-></CODE> <A HREF="#VS" TITLE="VS - sentence-complement verb">VS</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>mkV2S</CODE></TD>+<TD><A HREF="#V" TITLE="V - one-place verb">V</A> <CODE>-></CODE> <A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A> <CODE>-></CODE> <A HREF="#V2S" TITLE="V2S - verb with NP and S complement">V2S</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>mkVV</CODE></TD>+<TD><A HREF="#V" TITLE="V - one-place verb">V</A> <CODE>-></CODE> <A HREF="#VV" TITLE="VV - verb-phrase-complement verb">VV</A></TD>+<TD><I>plain infinitive: "voglio parlare"</I></TD>+</TR>+<TR>+<TD><CODE>deVV</CODE></TD>+<TD><A HREF="#V" TITLE="V - one-place verb">V</A> <CODE>-></CODE> <A HREF="#VV" TITLE="VV - verb-phrase-complement verb">VV</A></TD>+<TD><I>"cerco di parlare"</I></TD>+</TR>+<TR>+<TD><CODE>aVV</CODE></TD>+<TD><A HREF="#V" TITLE="V - one-place verb">V</A> <CODE>-></CODE> <A HREF="#VV" TITLE="VV - verb-phrase-complement verb">VV</A></TD>+<TD><I>"arrivo a parlare"</I></TD>+</TR>+<TR>+<TD><CODE>mkV2V</CODE></TD>+<TD><A HREF="#V" TITLE="V - one-place verb">V</A> <CODE>-></CODE> <A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A> <CODE>-></CODE> <A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A> <CODE>-></CODE> <A HREF="#V2V" TITLE="V2V - verb with NP and V complement">V2V</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>mkVA</CODE></TD>+<TD><A HREF="#V" TITLE="V - one-place verb">V</A> <CODE>-></CODE> <A HREF="#VA" TITLE="VA - adjective-complement verb">VA</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>mkV2A</CODE></TD>+<TD><A HREF="#V" TITLE="V - one-place verb">V</A> <CODE>-></CODE> <A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A> <CODE>-></CODE> <A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A> <CODE>-></CODE> <A HREF="#V2A" TITLE="V2A - verb with NP and AP complement">V2A</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>mkVQ</CODE></TD>+<TD><A HREF="#V" TITLE="V - one-place verb">V</A> <CODE>-></CODE> <A HREF="#VQ" TITLE="VQ - question-complement verb">VQ</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>mkV2Q</CODE></TD>+<TD><A HREF="#V" TITLE="V - one-place verb">V</A> <CODE>-></CODE> <A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A> <CODE>-></CODE> <A HREF="#V2Q" TITLE="V2Q - verb with NP and Q complement">V2Q</A></TD>+<TD><I>-</I></TD>+</TR>+</TABLE>++<A NAME="toc95"></A>+<H2>Paradigms for Latvian</H2>++<P>+<a name="RParadigms"></a>+</P>+<P>+source <A HREF="http://www.grammaticalframework.org/lib/src/latvian/ParadigmsLav.gf"><CODE>../src/latvian/ParadigmsLav.gf</CODE></A>+</P>++<TABLE BORDER="1" CELLPADDING="4">+<TR>+<TH>Function</TH>+<TH>Type</TH>+<TH COLSPAN="2">Explanation</TH>+</TR>+<TR>+<TD><CODE>Number</CODE></TD>+<TD><A HREF="#Type">Type</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>singular</CODE></TD>+<TD><A HREF="#Number">Number</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>plural</CODE></TD>+<TD><A HREF="#Number">Number</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>second_conjugation</CODE></TD>+<TD><A HREF="#VerbConj">VerbConj</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>third_conjugation</CODE></TD>+<TD><A HREF="#VerbConj">VerbConj</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>nominative</CODE></TD>+<TD><A HREF="#Case">Case</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>genitive</CODE></TD>+<TD><A HREF="#Case">Case</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>dative</CODE></TD>+<TD><A HREF="#Case">Case</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>accusative</CODE></TD>+<TD><A HREF="#Case">Case</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>locative</CODE></TD>+<TD><A HREF="#Case">Case</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>mkN</CODE></TD>+<TD><CODE>(lemma</CODE> <CODE>:</CODE> <CODE>Str)</CODE> <CODE>-></CODE> <A HREF="#N" TITLE="N - common noun">N</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>mkN</CODE></TD>+<TD><CODE>(lemma</CODE> <CODE>:</CODE> <CODE>Str)</CODE> <CODE>-></CODE> <A HREF="#Bool">Bool</A> <CODE>-></CODE> <A HREF="#N" TITLE="N - common noun">N</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>mkN</CODE></TD>+<TD><CODE>(lemma</CODE> <CODE>:</CODE> <CODE>Str)</CODE> <CODE>-></CODE> <A HREF="#Gender">Gender</A> <CODE>-></CODE> <A HREF="#N" TITLE="N - common noun">N</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>mkN</CODE></TD>+<TD><CODE>(lemma</CODE> <CODE>:</CODE> <CODE>Str)</CODE> <CODE>-></CODE> <A HREF="#NounDecl">NounDecl</A> <CODE>-></CODE> <A HREF="#N" TITLE="N - common noun">N</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>mkN</CODE></TD>+<TD><CODE>(lemma</CODE> <CODE>:</CODE> <CODE>Str)</CODE> <CODE>-></CODE> <A HREF="#Gender">Gender</A> <CODE>-></CODE> <A HREF="#Bool">Bool</A> <CODE>-></CODE> <A HREF="#N" TITLE="N - common noun">N</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>mkN</CODE></TD>+<TD><CODE>(lemma</CODE> <CODE>:</CODE> <CODE>Str)</CODE> <CODE>-></CODE> <A HREF="#NounDecl">NounDecl</A> <CODE>-></CODE> <A HREF="#Bool">Bool</A> <CODE>-></CODE> <A HREF="#N" TITLE="N - common noun">N</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>mkN</CODE></TD>+<TD><CODE>(lemma</CODE> <CODE>:</CODE> <CODE>Str)</CODE> <CODE>-></CODE> <A HREF="#Gender">Gender</A> <CODE>-></CODE> <A HREF="#NounDecl">NounDecl</A> <CODE>-></CODE> <A HREF="#N" TITLE="N - common noun">N</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>mkN</CODE></TD>+<TD><CODE>(lemma</CODE> <CODE>:</CODE> <CODE>Str)</CODE> <CODE>-></CODE> <A HREF="#Gender">Gender</A> <CODE>-></CODE> <A HREF="#NounDecl">NounDecl</A> <CODE>-></CODE> <A HREF="#Bool">Bool</A> <CODE>-></CODE> <A HREF="#N" TITLE="N - common noun">N</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>mkN</CODE></TD>+<TD><CODE>(lemma</CODE> <CODE>:</CODE> <CODE>Str)</CODE> <CODE>-></CODE> <A HREF="#PN" TITLE="PN - proper name">PN</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>mkN</CODE></TD>+<TD><CODE>(lemma</CODE> <CODE>:</CODE> <CODE>Str)</CODE> <CODE>-></CODE> <A HREF="#Number">Number</A> <CODE>-></CODE> <A HREF="#PN" TITLE="PN - proper name">PN</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>mkN2</CODE></TD>+<TD><A HREF="#N" TITLE="N - common noun">N</A> <CODE>-></CODE> <A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A> <CODE>-></CODE> <A HREF="#N2" TITLE="N2 - relational noun">N2</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>mkN2</CODE></TD>+<TD><A HREF="#N" TITLE="N - common noun">N</A> <CODE>-></CODE> <A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A> <CODE>-></CODE> <A HREF="#Bool">Bool</A> <CODE>-></CODE> <A HREF="#N2" TITLE="N2 - relational noun">N2</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>mkN3</CODE></TD>+<TD><A HREF="#N" TITLE="N - common noun">N</A> <CODE>-></CODE> <A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A> <CODE>-></CODE> <A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A> <CODE>-></CODE> <A HREF="#N3" TITLE="N3 - three-place relational noun">N3</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>mkA</CODE></TD>+<TD><CODE>(lemma</CODE> <CODE>:</CODE> <CODE>Str)</CODE> <CODE>-></CODE> <A HREF="#A" TITLE="A - one-place adjective">A</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>mkA</CODE></TD>+<TD><CODE>(lemma</CODE> <CODE>:</CODE> <CODE>Str)</CODE> <CODE>-></CODE> <A HREF="#AdjType">AdjType</A> <CODE>-></CODE> <A HREF="#A" TITLE="A - one-place adjective">A</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>mkA</CODE></TD>+<TD><CODE>(v</CODE> <CODE>:</CODE> <CODE>Verb)</CODE> <CODE>-></CODE> <A HREF="#A" TITLE="A - one-place adjective">A</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>mkA2</CODE></TD>+<TD><A HREF="#A" TITLE="A - one-place adjective">A</A> <CODE>-></CODE> <A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A> <CODE>-></CODE> <A HREF="#A2" TITLE="A2 - two-place adjective">A2</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>mkAS</CODE></TD>+<TD><A HREF="#A" TITLE="A - one-place adjective">A</A> <CODE>-></CODE> <A HREF="#AS">AS</A> <CODE>=\a</CODE> <CODE>-></CODE> <CODE>lin</CODE> <A HREF="#A" TITLE="A - one-place adjective">A</A> <CODE>a</CODE></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>mkA2S</CODE></TD>+<TD><A HREF="#A" TITLE="A - one-place adjective">A</A> <CODE>-></CODE> <A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A> <CODE>-></CODE> <A HREF="#A2S">A2S</A> <CODE>=\a,p</CODE> <CODE>-></CODE> <CODE>lin</CODE> <A HREF="#A2" TITLE="A2 - two-place adjective">A2</A> <CODE>(a</CODE> <CODE>**</CODE> <CODE>{</CODE> <CODE>p</CODE></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>mkAV</CODE></TD>+<TD><A HREF="#A" TITLE="A - one-place adjective">A</A> <CODE>-></CODE> <A HREF="#AV">AV</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>mkA2V</CODE></TD>+<TD><A HREF="#A" TITLE="A - one-place adjective">A</A> <CODE>-></CODE> <A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A> <CODE>-></CODE> <A HREF="#A2V">A2V</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>mkV</CODE></TD>+<TD><CODE>(lemma</CODE> <CODE>:</CODE> <CODE>Str)</CODE> <CODE>-></CODE> <A HREF="#V" TITLE="V - one-place verb">V</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>mkV</CODE></TD>+<TD><CODE>(lemma</CODE> <CODE>:</CODE> <CODE>Str)</CODE> <CODE>-></CODE> <A HREF="#VerbConj">VerbConj</A> <CODE>-></CODE> <A HREF="#V" TITLE="V - one-place verb">V</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>mkV</CODE></TD>+<TD><CODE>(lemma</CODE> <CODE>:</CODE> <CODE>Str)</CODE> <CODE>-></CODE> <CODE>Str</CODE> <CODE>-></CODE> <CODE>Str</CODE> <CODE>-></CODE> <A HREF="#V" TITLE="V - one-place verb">V</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>mkV2</CODE></TD>+<TD><A HREF="#V" TITLE="V - one-place verb">V</A> <CODE>-></CODE> <A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A> <CODE>-></CODE> <A HREF="#V2" TITLE="V2 - two-place verb">V2</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>mkVS</CODE></TD>+<TD><A HREF="#V" TITLE="V - one-place verb">V</A> <CODE>-></CODE> <A HREF="#Subj" TITLE="Subj - subjunction">Subj</A> <CODE>-></CODE> <A HREF="#VS" TITLE="VS - sentence-complement verb">VS</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>mkV2S</CODE></TD>+<TD><A HREF="#V" TITLE="V - one-place verb">V</A> <CODE>-></CODE> <A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A> <CODE>-></CODE> <A HREF="#Subj" TITLE="Subj - subjunction">Subj</A> <CODE>-></CODE> <A HREF="#V2S" TITLE="V2S - verb with NP and S complement">V2S</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>mkVA</CODE></TD>+<TD><A HREF="#V" TITLE="V - one-place verb">V</A> <CODE>-></CODE> <A HREF="#VA" TITLE="VA - adjective-complement verb">VA</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>mkV2A</CODE></TD>+<TD><A HREF="#V" TITLE="V - one-place verb">V</A> <CODE>-></CODE> <A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A> <CODE>-></CODE> <A HREF="#V2A" TITLE="V2A - verb with NP and AP complement">V2A</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>mkVQ</CODE></TD>+<TD><A HREF="#V" TITLE="V - one-place verb">V</A> <CODE>-></CODE> <A HREF="#VQ" TITLE="VQ - question-complement verb">VQ</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>mkV2Q</CODE></TD>+<TD><A HREF="#V" TITLE="V - one-place verb">V</A> <CODE>-></CODE> <A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A> <CODE>-></CODE> <A HREF="#V2Q" TITLE="V2Q - verb with NP and Q complement">V2Q</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>mkVV</CODE></TD>+<TD><A HREF="#V" TITLE="V - one-place verb">V</A> <CODE>-></CODE> <A HREF="#VV" TITLE="VV - verb-phrase-complement verb">VV</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>mkV2V</CODE></TD>+<TD><A HREF="#V" TITLE="V - one-place verb">V</A> <CODE>-></CODE> <A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A> <CODE>-></CODE> <A HREF="#V2V" TITLE="V2V - verb with NP and V complement">V2V</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>mkV3</CODE></TD>+<TD><A HREF="#V" TITLE="V - one-place verb">V</A> <CODE>-></CODE> <A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A> <CODE>-></CODE> <A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A> <CODE>-></CODE> <A HREF="#V3" TITLE="V3 - three-place verb">V3</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>mkCAdv</CODE></TD>+<TD><CODE>Str</CODE> <CODE>-></CODE> <CODE>Str</CODE> <CODE>-></CODE> <A HREF="#Degree">Degree</A> <CODE>-></CODE> <A HREF="#CAdv" TITLE="CAdv - comparative adverb">CAdv</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>mkPrep</CODE></TD>+<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#Case">Case</A> <CODE>-></CODE> <A HREF="#Case">Case</A> <CODE>-></CODE> <A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>mkPrep</CODE></TD>+<TD><A HREF="#Case">Case</A> <CODE>-></CODE> <A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>mkAdv</CODE></TD>+<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#Adv" TITLE="Adv - verb-phrase-modifying adverb">Adv</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>mkAdV</CODE></TD>+<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#AdV" TITLE="Adv - verb-phrase-modifying adverb">AdV</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>mkAdA</CODE></TD>+<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#AdA" TITLE="AdA - adjective-modifying adverb">AdA</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>mkAdN</CODE></TD>+<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#AdN" TITLE="AdN - numeral-modifying adverb">AdN</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>mkConj</CODE></TD>+<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#Conj" TITLE="Conj - conjunction">Conj</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>mkConj</CODE></TD>+<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#Number">Number</A> <CODE>-></CODE> <A HREF="#Conj" TITLE="Conj - conjunction">Conj</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>mkConj</CODE></TD>+<TD><CODE>Str</CODE> <CODE>-></CODE> <CODE>Str</CODE> <CODE>-></CODE> <A HREF="#Conj" TITLE="Conj - conjunction">Conj</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>mkConj</CODE></TD>+<TD><CODE>Str</CODE> <CODE>-></CODE> <CODE>Str</CODE> <CODE>-></CODE> <A HREF="#Number">Number</A> <CODE>-></CODE> <A HREF="#Conj" TITLE="Conj - conjunction">Conj</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>mk2Conj</CODE></TD>+<TD><CODE>Str</CODE> <CODE>-></CODE> <CODE>Str</CODE> <CODE>-></CODE> <A HREF="#Number">Number</A> <CODE>-></CODE> <A HREF="#Conj" TITLE="Conj - conjunction">Conj</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>mkNumReg</CODE></TD>+<TD><CODE>Str</CODE> <CODE>-></CODE> <CODE>Str</CODE> <CODE>-></CODE> <A HREF="#Number">Number</A> <CODE>-></CODE> <CODE>{</CODE> <CODE>s</CODE> <CODE>:</CODE> <A HREF="#DForm">DForm</A> <CODE>=></CODE> <A HREF="#CardOrd">CardOrd</A> <CODE>=></CODE> <A HREF="#Gender">Gender</A> <CODE>=></CODE> <A HREF="#Case">Case</A> <CODE>=></CODE> <CODE>Str</CODE> <CODE>}</CODE></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>mkNumSpec</CODE></TD>+<TD><CODE>Str</CODE> <CODE>-></CODE> <CODE>Str</CODE> <CODE>-></CODE> <CODE>Str</CODE> <CODE>-></CODE> <CODE>Str</CODE> <CODE>-></CODE> <A HREF="#Number">Number</A> <CODE>-></CODE> <CODE>{</CODE> <CODE>s</CODE> <CODE>:</CODE> <A HREF="#DForm">DForm</A> <CODE>=></CODE> <A HREF="#CardOrd">CardOrd</A> <CODE>=></CODE> <A HREF="#Gender">Gender</A> <CODE>=></CODE> <A HREF="#Case">Case</A> <CODE>=></CODE> <CODE>Str</CODE> <CODE>}</CODE></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>simts</CODE></TD>+<TD><A HREF="#CardOrd">CardOrd</A> <CODE>=></CODE> <A HREF="#Gender">Gender</A> <CODE>=></CODE> <A HREF="#Number">Number</A> <CODE>=></CODE> <A HREF="#Case">Case</A> <CODE>=></CODE> <CODE>Str</CODE></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>tuukstotis</CODE></TD>+<TD><A HREF="#CardOrd">CardOrd</A> <CODE>=></CODE> <A HREF="#Gender">Gender</A> <CODE>=></CODE> <A HREF="#Number">Number</A> <CODE>=></CODE> <A HREF="#Case">Case</A> <CODE>=></CODE> <CODE>Str</CODE></TD>+<TD><I>-</I></TD>+</TR>+</TABLE>++<A NAME="toc96"></A>+<H2>Paradigms for Nepali</H2>++<P>+<a name="RParadigms"></a>+</P>+<P>+source <A HREF="http://www.grammaticalframework.org/lib/src/nepali/ParadigmsNep.gf"><CODE>../src/nepali/ParadigmsNep.gf</CODE></A>+</P>++<TABLE BORDER="1" CELLPADDING="4">+<TR>+<TH>Function</TH>+<TH>Type</TH>+<TH COLSPAN="2">Explanation</TH>+</TR>+<TR>+<TD><CODE>masculine</CODE></TD>+<TD><A HREF="#Gender">Gender</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>feminine</CODE></TD>+<TD><A HREF="#Gender">Gender</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>singular</CODE></TD>+<TD><A HREF="#Number">Number</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>plural</CODE></TD>+<TD><A HREF="#Number">Number</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>human</CODE></TD>+<TD><A HREF="#NType">NType</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>profession</CODE></TD>+<TD><A HREF="#NType">NType</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>living</CODE></TD>+<TD><A HREF="#NType">NType</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>regN</CODE></TD>+<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#N" TITLE="N - common noun">N</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>regN</CODE></TD>+<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#NPerson">NPerson</A> <CODE>-></CODE> <A HREF="#N" TITLE="N - common noun">N</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>regN</CODE></TD>+<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#NType">NType</A> <CODE>-></CODE> <A HREF="#N" TITLE="N - common noun">N</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>regN</CODE></TD>+<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#NType">NType</A> <CODE>-></CODE> <A HREF="#NPerson">NPerson</A> <CODE>-></CODE> <A HREF="#N" TITLE="N - common noun">N</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>mkNF</CODE></TD>+<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#N" TITLE="N - common noun">N</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>mkNF</CODE></TD>+<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#NPerson">NPerson</A> <CODE>-></CODE> <A HREF="#N" TITLE="N - common noun">N</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>mkNF</CODE></TD>+<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#NType">NType</A> <CODE>-></CODE> <A HREF="#N" TITLE="N - common noun">N</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>mkNF</CODE></TD>+<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#NType">NType</A> <CODE>-></CODE> <A HREF="#NPerson">NPerson</A> <CODE>-></CODE> <A HREF="#N" TITLE="N - common noun">N</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>mkNUC</CODE></TD>+<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#N" TITLE="N - common noun">N</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>mkNUC</CODE></TD>+<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#Gender">Gender</A> <CODE>-></CODE> <A HREF="#N" TITLE="N - common noun">N</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>mkNUC</CODE></TD>+<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#Gender">Gender</A> <CODE>-></CODE> <A HREF="#NType">NType</A> <CODE>-></CODE> <A HREF="#N" TITLE="N - common noun">N</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>mkNUC</CODE></TD>+<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#Gender">Gender</A> <CODE>-></CODE> <A HREF="#NType">NType</A> <CODE>-></CODE> <A HREF="#NPerson">NPerson</A> <CODE>-></CODE> <A HREF="#N" TITLE="N - common noun">N</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>--mkNUC</CODE></TD>+<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#NType">NType</A> <CODE>-></CODE> <A HREF="#Gender">Gender</A> <CODE>-></CODE> <A HREF="#N" TITLE="N - common noun">N</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>mkN2</CODE></TD>+<TD><A HREF="#N" TITLE="N - common noun">N</A> <CODE>-></CODE> <A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A> <CODE>-></CODE> <CODE>Str</CODE> <CODE>-></CODE> <A HREF="#N2" TITLE="N2 - relational noun">N2</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>mkN2</CODE></TD>+<TD><A HREF="#N" TITLE="N - common noun">N</A> <CODE>-></CODE> <A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A> <CODE>-></CODE> <CODE>Str</CODE> <CODE>-></CODE> <A HREF="#NType">NType</A> <CODE>-></CODE> <A HREF="#N2" TITLE="N2 - relational noun">N2</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>mkN2</CODE></TD>+<TD><A HREF="#N" TITLE="N - common noun">N</A> <CODE>-></CODE> <A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A> <CODE>-></CODE> <CODE>Str</CODE> <CODE>-></CODE> <A HREF="#NType">NType</A> <CODE>-></CODE> <A HREF="#NPerson">NPerson</A> <CODE>-></CODE> <A HREF="#N2" TITLE="N2 - relational noun">N2</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>mkN2</CODE></TD>+<TD><A HREF="#N" TITLE="N - common noun">N</A> <CODE>-></CODE> <A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A> <CODE>-></CODE> <CODE>Str</CODE> <CODE>-></CODE> <CODE>N2;</CODE></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>mkN3</CODE></TD>+<TD><A HREF="#N" TITLE="N - common noun">N</A> <CODE>-></CODE> <A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A> <CODE>-></CODE> <A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A> <CODE>-></CODE> <CODE>Str-></CODE> <A HREF="#N3" TITLE="N3 - three-place relational noun">N3</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>mkN3</CODE></TD>+<TD><A HREF="#N" TITLE="N - common noun">N</A> <CODE>-></CODE> <A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A> <CODE>-></CODE> <A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A> <CODE>-></CODE> <CODE>Str-></CODE> <A HREF="#NType">NType</A> <CODE>-></CODE> <A HREF="#N3" TITLE="N3 - three-place relational noun">N3</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>mkN3</CODE></TD>+<TD><A HREF="#N" TITLE="N - common noun">N</A> <CODE>-></CODE> <A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A> <CODE>-></CODE> <A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A> <CODE>-></CODE> <CODE>Str-></CODE> <A HREF="#N3" TITLE="N3 - three-place relational noun">N3</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>mkCmpdNoun</CODE></TD>+<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#N" TITLE="N - common noun">N</A> <CODE>-></CODE> <A HREF="#N" TITLE="N - common noun">N</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>mkPN</CODE></TD>+<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#PN" TITLE="PN - proper name">PN</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>mkPN</CODE></TD>+<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#Gender">Gender</A> <CODE>-></CODE> <A HREF="#NPerson">NPerson</A> <CODE>-></CODE> <A HREF="#PN" TITLE="PN - proper name">PN</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>mkPN</CODE></TD>+<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#Gender">Gender</A> <CODE>-></CODE> <A HREF="#NType">NType</A> <CODE>-></CODE> <A HREF="#NPerson">NPerson</A> <CODE>-></CODE> <A HREF="#PN" TITLE="PN - proper name">PN</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>mkPron</CODE></TD>+<TD><CODE>Str</CODE> <CODE>-></CODE> <CODE>Str</CODE> <CODE>-></CODE> <A HREF="#Number">Number</A> <CODE>-></CODE> <A HREF="#Gender">Gender</A> <CODE>-></CODE> <A HREF="#NPerson">NPerson</A> <CODE>-></CODE> <A HREF="#Pron" TITLE="Pron - personal pronoun">Pron</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>mkPron</CODE></TD>+<TD><CODE>(x1,_,_,_,_,_,x7</CODE> <CODE>:</CODE> <CODE>Str)</CODE> <CODE>-></CODE> <A HREF="#Number">Number</A> <CODE>-></CODE> <A HREF="#Gender">Gender</A> <CODE>-></CODE> <A HREF="#NPerson">NPerson</A> <CODE>-></CODE> <A HREF="#Pron" TITLE="Pron - personal pronoun">Pron</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>demoPN</CODE></TD>+<TD><CODE>Str</CODE> <CODE>-></CODE> <CODE>Str</CODE> <CODE>-></CODE> <CODE>Str</CODE> <CODE>-></CODE> <A 'HREF="#Quant" TITLE="Quant - quantifier ('nucleus' of Det)"'>Quant</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>mkDet</CODE></TD>+<TD><CODE>(s1,s2:Str)</CODE> <CODE>-></CODE> <A HREF="#Number">Number</A> <CODE>-></CODE> <A HREF="#Det" TITLE="Det - determiner phrase">Det</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>mkDet</CODE></TD>+<TD><CODE>(s1,s2,s3,s4:Str)</CODE> <CODE>-></CODE> <A HREF="#Number">Number</A> <CODE>-></CODE> <A HREF="#Det" TITLE="Det - determiner phrase">Det</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>mkIDetn</CODE></TD>+<TD><CODE>(s1,s2:Str)</CODE> <CODE>-></CODE> <A HREF="#Number">Number</A> <CODE>-></CODE> <A HREF="#IDet" TITLE="IDet - interrogative determiner">IDet</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>mkIP</CODE></TD>+<TD><CODE>(x1,x2,x3,x4:Str)</CODE> <CODE>-></CODE> <A HREF="#Number">Number</A> <CODE>-></CODE> <A HREF="#IP" TITLE="IP - interrogative pronoun">IP</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>mkA</CODE></TD>+<TD><CODE>Str-></CODE> <A HREF="#A" TITLE="A - one-place adjective">A</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>mkA</CODE></TD>+<TD><CODE>Str</CODE> <CODE>-></CODE> <CODE>Str</CODE> <CODE>-></CODE> <A HREF="#A2" TITLE="A2 - two-place adjective">A2</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>mkV</CODE></TD>+<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#V" TITLE="V - one-place verb">V</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>mkV2</CODE></TD>+<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#V2" TITLE="V2 - two-place verb">V2</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>mkV2</CODE></TD>+<TD><A HREF="#V" TITLE="V - one-place verb">V</A> <CODE>-></CODE> <A HREF="#V2" TITLE="V2 - two-place verb">V2</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>mkV2</CODE></TD>+<TD><A HREF="#V" TITLE="V - one-place verb">V</A> <CODE>-></CODE> <CODE>Str</CODE> <CODE>-></CODE> <A HREF="#V2" TITLE="V2 - two-place verb">V2</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>mkV3</CODE></TD>+<TD><A HREF="#V" TITLE="V - one-place verb">V</A> <CODE>-></CODE> <CODE>Str</CODE> <CODE>-></CODE> <CODE>Str</CODE> <CODE>-></CODE> <A HREF="#V3" TITLE="V3 - three-place verb">V3</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>mkV2V</CODE></TD>+<TD><A HREF="#V" TITLE="V - one-place verb">V</A> <CODE>-></CODE> <CODE>Str</CODE> <CODE>-></CODE> <CODE>Str</CODE> <CODE>-></CODE> <A HREF="#Bool">Bool</A> <CODE>-></CODE> <A HREF="#V2V" TITLE="V2V - verb with NP and V complement">V2V</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>compoundV</CODE></TD>+<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#V" TITLE="V - one-place verb">V</A> <CODE>-></CODE> <A HREF="#V" TITLE="V - one-place verb">V</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>compoundV</CODE></TD>+<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#V2" TITLE="V2 - two-place verb">V2</A> <CODE>-></CODE> <A HREF="#V" TITLE="V - one-place verb">V</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>mkAdv</CODE></TD>+<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#Adv" TITLE="Adv - verb-phrase-modifying adverb">Adv</A></TD>+<TD><I>e.g. today</I></TD>+</TR>+<TR>+<TD><CODE>mkAdV</CODE></TD>+<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#AdV" TITLE="Adv - verb-phrase-modifying adverb">AdV</A></TD>+<TD><I>e.g. always</I></TD>+</TR>+<TR>+<TD><CODE>mkAdA</CODE></TD>+<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#AdA" TITLE="AdA - adjective-modifying adverb">AdA</A></TD>+<TD><I>e.g. quite</I></TD>+</TR>+<TR>+<TD><CODE>mkAdN</CODE></TD>+<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#AdN" TITLE="AdN - numeral-modifying adverb">AdN</A></TD>+<TD><I>e.g. approximately</I></TD>+</TR>+<TR>+<TD><CODE>mkPrep</CODE></TD>+<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>noPrep</CODE></TD>+<TD><A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>--mkQuant</CODE></TD>+<TD><A HREF="#Pron" TITLE="Pron - personal pronoun">Pron</A> <CODE>-></CODE> <A 'HREF="#Quant" TITLE="Quant - quantifier ('nucleus' of Det)"'>Quant</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>mkQuant</CODE></TD>+<TD><CODE>(s1,s2,s3,s4:Str)</CODE> <CODE>-></CODE> <A 'HREF="#Quant" TITLE="Quant - quantifier ('nucleus' of Det)"'>Quant</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>mkQuant</CODE></TD>+<TD><CODE>(s1,s2:Str)</CODE> <CODE>-></CODE> <A 'HREF="#Quant" TITLE="Quant - quantifier ('nucleus' of Det)"'>Quant</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>mkConj</CODE></TD>+<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#Conj" TITLE="Conj - conjunction">Conj</A></TD>+<TD><I>and (plural agreement)</I></TD>+</TR>+<TR>+<TD><CODE>mkConj</CODE></TD>+<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#Number">Number</A> <CODE>-></CODE> <A HREF="#Conj" TITLE="Conj - conjunction">Conj</A></TD>+<TD><I>or (agrement number given as argument)</I></TD>+</TR>+<TR>+<TD><CODE>mkConj</CODE></TD>+<TD><CODE>Str</CODE> <CODE>-></CODE> <CODE>Str</CODE> <CODE>-></CODE> <A HREF="#Conj" TITLE="Conj - conjunction">Conj</A></TD>+<TD><I>both ... and (plural)</I></TD>+</TR>+<TR>+<TD><CODE>mkConj</CODE></TD>+<TD><CODE>Str</CODE> <CODE>-></CODE> <CODE>Str</CODE> <CODE>-></CODE> <A HREF="#Number">Number</A> <CODE>-></CODE> <A HREF="#Conj" TITLE="Conj - conjunction">Conj</A></TD>+<TD><I>either ... or (agrement number given as argument)</I></TD>+</TR>+<TR>+<TD><CODE>mkConj</CODE></TD>+<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#Conj" TITLE="Conj - conjunction">Conj</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>mkConj</CODE></TD>+<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#Number">Number</A> <CODE>-></CODE> <A HREF="#Conj" TITLE="Conj - conjunction">Conj</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>mkConj</CODE></TD>+<TD><CODE>Str</CODE> <CODE>-></CODE> <CODE>Str</CODE> <CODE>-></CODE> <A HREF="#Conj" TITLE="Conj - conjunction">Conj</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>mkConj</CODE></TD>+<TD><CODE>Str</CODE> <CODE>-></CODE> <CODE>Str</CODE> <CODE>-></CODE> <A HREF="#Number">Number</A> <CODE>-></CODE> <A HREF="#Conj" TITLE="Conj - conjunction">Conj</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>mk2Conj</CODE></TD>+<TD><CODE>Str</CODE> <CODE>-></CODE> <CODE>Str</CODE> <CODE>-></CODE> <A HREF="#Number">Number</A> <CODE>-></CODE> <A HREF="#Conj" TITLE="Conj - conjunction">Conj</A></TD>+<TD><I>-</I></TD>+</TR>+</TABLE>++<A NAME="toc97"></A>+<H2>Paradigms for Norwegian</H2>++<P>+<a name="RParadigms"></a>+</P>+<P>+source <A HREF="http://www.grammaticalframework.org/lib/src/norwegian/ParadigmsNor.gf"><CODE>../src/norwegian/ParadigmsNor.gf</CODE></A>+</P>++<TABLE BORDER="1" CELLPADDING="4">+<TR>+<TH>Function</TH>+<TH>Type</TH>+<TH COLSPAN="2">Explanation</TH>+</TR>+<TR>+<TD><CODE>Gender</CODE></TD>+<TD><A HREF="#Type">Type</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>masculine</CODE></TD>+<TD><A HREF="#Gender">Gender</A></TD>+<TD><I>the "en" gender</I></TD>+</TR>+<TR>+<TD><CODE>feminine</CODE></TD>+<TD><A HREF="#Gender">Gender</A></TD>+<TD><I>the "ei" gender</I></TD>+</TR>+<TR>+<TD><CODE>neutrum</CODE></TD>+<TD><A HREF="#Gender">Gender</A></TD>+<TD><I>the "et" gender</I></TD>+</TR>+<TR>+<TD><CODE>Number</CODE></TD>+<TD><A HREF="#Type">Type</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>singular</CODE></TD>+<TD><A HREF="#Number">Number</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>plural</CODE></TD>+<TD><A HREF="#Number">Number</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>mkPrep</CODE></TD>+<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A></TD>+<TD><I>e.g. "etter"</I></TD>+</TR>+<TR>+<TD><CODE>noPrep</CODE></TD>+<TD><A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A></TD>+<TD><I>empty string</I></TD>+</TR>+<TR>+<TD><CODE>mkN</CODE></TD>+<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#N" TITLE="N - common noun">N</A></TD>+<TD><I>predictable noun, feminine for "-e" otherwise masculine</I></TD>+</TR>+<TR>+<TD><CODE>mkN</CODE></TD>+<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#Gender">Gender</A> <CODE>-></CODE> <A HREF="#N" TITLE="N - common noun">N</A></TD>+<TD><I>force gender</I></TD>+</TR>+<TR>+<TD><CODE>mkN</CODE></TD>+<TD><CODE>(dreng,drengen,drenger,drengene</CODE> <CODE>:</CODE> <CODE>Str)</CODE> <CODE>-></CODE> <A HREF="#N" TITLE="N - common noun">N</A></TD>+<TD><I>worst case</I></TD>+</TR>+<TR>+<TD><CODE>mkN2</CODE></TD>+<TD><A HREF="#N" TITLE="N - common noun">N</A> <CODE>-></CODE> <A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A> <CODE>-></CODE> <A HREF="#N2" TITLE="N2 - relational noun">N2</A></TD>+<TD><I>e.g. datter + til</I></TD>+</TR>+<TR>+<TD><CODE>mkN3</CODE></TD>+<TD><A HREF="#N" TITLE="N - common noun">N</A> <CODE>-></CODE> <A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A> <CODE>-></CODE> <A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A> <CODE>-></CODE> <A HREF="#N3" TITLE="N3 - three-place relational noun">N3</A></TD>+<TD><I>e.g forbindelse + fra + til</I></TD>+</TR>+<TR>+<TD><CODE>mkPN</CODE></TD>+<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#PN" TITLE="PN - proper name">PN</A></TD>+<TD><I>masculine</I></TD>+</TR>+<TR>+<TD><CODE>mkPN</CODE></TD>+<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#Gender">Gender</A> <CODE>-></CODE> <A HREF="#PN" TITLE="PN - proper name">PN</A></TD>+<TD><I>force gender</I></TD>+</TR>+<TR>+<TD><CODE>mkA</CODE></TD>+<TD><CODE>(fin</CODE> <CODE>:</CODE> <CODE>Str)</CODE> <CODE>-></CODE> <A HREF="#A" TITLE="A - one-place adjective">A</A></TD>+<TD><I>predictable adjective</I></TD>+</TR>+<TR>+<TD><CODE>mkA</CODE></TD>+<TD><CODE>(fin,fint</CODE> <CODE>:</CODE> <CODE>Str)</CODE> <CODE>-></CODE> <A HREF="#A" TITLE="A - one-place adjective">A</A></TD>+<TD><I>deviant neuter</I></TD>+</TR>+<TR>+<TD><CODE>mkA</CODE></TD>+<TD><CODE>(galen,galet,galne</CODE> <CODE>:</CODE> <CODE>Str)</CODE> <CODE>-></CODE> <A HREF="#A" TITLE="A - one-place adjective">A</A></TD>+<TD><I>also plural deviant</I></TD>+</TR>+<TR>+<TD><CODE>mkA</CODE></TD>+<TD><CODE>(stor,stort,store,storre,storst</CODE> <CODE>:</CODE> <CODE>Str)</CODE> <CODE>-></CODE> <A HREF="#A" TITLE="A - one-place adjective">A</A></TD>+<TD><I>worst case</I></TD>+</TR>+<TR>+<TD><CODE>mkA</CODE></TD>+<TD><A HREF="#A" TITLE="A - one-place adjective">A</A> <CODE>-></CODE> <A HREF="#A" TITLE="A - one-place adjective">A</A></TD>+<TD><I>comparison with mer/mest, e.g. "norsk"</I></TD>+</TR>+<TR>+<TD><CODE>mkA2</CODE></TD>+<TD><A HREF="#A" TITLE="A - one-place adjective">A</A> <CODE>-></CODE> <A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A> <CODE>-></CODE> <A HREF="#A2" TITLE="A2 - two-place adjective">A2</A></TD>+<TD><I>e.g. gift + med</I></TD>+</TR>+<TR>+<TD><CODE>mkAdv</CODE></TD>+<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#Adv" TITLE="Adv - verb-phrase-modifying adverb">Adv</A></TD>+<TD><I>e.g. her</I></TD>+</TR>+<TR>+<TD><CODE>mkAdV</CODE></TD>+<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#AdV" TITLE="Adv - verb-phrase-modifying adverb">AdV</A></TD>+<TD><I>e.g. altid</I></TD>+</TR>+<TR>+<TD><CODE>mkAdA</CODE></TD>+<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#AdA" TITLE="AdA - adjective-modifying adverb">AdA</A></TD>+<TD><I>e.g. mye</I></TD>+</TR>+<TR>+<TD><CODE>mkV</CODE></TD>+<TD><CODE>(snakke</CODE> <CODE>:</CODE> <CODE>Str)</CODE> <CODE>-></CODE> <A HREF="#V" TITLE="V - one-place verb">V</A></TD>+<TD><I>regular verb (first conjugation)</I></TD>+</TR>+<TR>+<TD><CODE>mkV</CODE></TD>+<TD><CODE>(leve,levde</CODE> <CODE>:</CODE> <CODE>Str)</CODE> <CODE>-></CODE> <A HREF="#V" TITLE="V - one-place verb">V</A></TD>+<TD><I>other past tense</I></TD>+</TR>+<TR>+<TD><CODE>mkV</CODE></TD>+<TD><CODE>(drikke,</CODE> <CODE>drakk,</CODE> <CODE>drukket</CODE> <CODE>:</CODE> <CODE>Str)</CODE> <CODE>-></CODE> <A HREF="#V" TITLE="V - one-place verb">V</A></TD>+<TD><I>theme of irregular verb</I></TD>+</TR>+<TR>+<TD><CODE>mkV</CODE></TD>+<TD><CODE>(spise,spiser,spises,spiste,spist,spis</CODE> <CODE>:</CODE> <CODE>Str)</CODE> <CODE>-></CODE> <A HREF="#V" TITLE="V - one-place verb">V</A></TD>+<TD><I>worst case</I></TD>+</TR>+<TR>+<TD><CODE>mkV</CODE></TD>+<TD><A HREF="#V" TITLE="V - one-place verb">V</A> <CODE>-></CODE> <CODE>Str</CODE> <CODE>-></CODE> <A HREF="#V" TITLE="V - one-place verb">V</A></TD>+<TD><I>verb with particle, e.g. lukke + opp</I></TD>+</TR>+<TR>+<TD><CODE>vaereV</CODE></TD>+<TD><A HREF="#V" TITLE="V - one-place verb">V</A> <CODE>-></CODE> <A HREF="#V" TITLE="V - one-place verb">V</A></TD>+<TD><I>force "være" as auxiliary (default "have")</I></TD>+</TR>+<TR>+<TD><CODE>depV</CODE></TD>+<TD><A HREF="#V" TITLE="V - one-place verb">V</A> <CODE>-></CODE> <A HREF="#V" TITLE="V - one-place verb">V</A></TD>+<TD><I>deponent, e.g "trives"</I></TD>+</TR>+<TR>+<TD><CODE>reflV</CODE></TD>+<TD><A HREF="#V" TITLE="V - one-place verb">V</A> <CODE>-></CODE> <A HREF="#V" TITLE="V - one-place verb">V</A></TD>+<TD><I>reflexive, e.g. "forestille seg"</I></TD>+</TR>+<TR>+<TD><CODE>mkV2</CODE></TD>+<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#V2" TITLE="V2 - two-place verb">V2</A></TD>+<TD><I>regular, direct object</I></TD>+</TR>+<TR>+<TD><CODE>mkV2</CODE></TD>+<TD><A HREF="#V" TITLE="V - one-place verb">V</A> <CODE>-></CODE> <A HREF="#V2" TITLE="V2 - two-place verb">V2</A></TD>+<TD><I>direct object</I></TD>+</TR>+<TR>+<TD><CODE>mkV2</CODE></TD>+<TD><A HREF="#V" TITLE="V - one-place verb">V</A> <CODE>-></CODE> <A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A> <CODE>-></CODE> <A HREF="#V2" TITLE="V2 - two-place verb">V2</A></TD>+<TD><I>preposition for complement</I></TD>+</TR>+<TR>+<TD><CODE>mkV3</CODE></TD>+<TD><A HREF="#V" TITLE="V - one-place verb">V</A> <CODE>-></CODE> <A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A> <CODE>-></CODE> <A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A> <CODE>-></CODE> <A HREF="#V3" TITLE="V3 - three-place verb">V3</A></TD>+<TD><I>snakke, med, om</I></TD>+</TR>+<TR>+<TD><CODE>dirV3</CODE></TD>+<TD><A HREF="#V" TITLE="V - one-place verb">V</A> <CODE>-></CODE> <A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A> <CODE>-></CODE> <A HREF="#V3" TITLE="V3 - three-place verb">V3</A></TD>+<TD><I>gi,_,til</I></TD>+</TR>+<TR>+<TD><CODE>dirdirV3</CODE></TD>+<TD><A HREF="#V" TITLE="V - one-place verb">V</A> <CODE>-></CODE> <A HREF="#V3" TITLE="V3 - three-place verb">V3</A></TD>+<TD><I>gi,_,_</I></TD>+</TR>+<TR>+<TD><CODE>mkVS</CODE></TD>+<TD><A HREF="#V" TITLE="V - one-place verb">V</A> <CODE>-></CODE> <A HREF="#VS" TITLE="VS - sentence-complement verb">VS</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>mkV2S</CODE></TD>+<TD><A HREF="#V" TITLE="V - one-place verb">V</A> <CODE>-></CODE> <A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A> <CODE>-></CODE> <A HREF="#V2S" TITLE="V2S - verb with NP and S complement">V2S</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>mkVV</CODE></TD>+<TD><A HREF="#V" TITLE="V - one-place verb">V</A> <CODE>-></CODE> <A HREF="#VV" TITLE="VV - verb-phrase-complement verb">VV</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>mkV2V</CODE></TD>+<TD><A HREF="#V" TITLE="V - one-place verb">V</A> <CODE>-></CODE> <A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A> <CODE>-></CODE> <A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A> <CODE>-></CODE> <A HREF="#V2V" TITLE="V2V - verb with NP and V complement">V2V</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>mkVA</CODE></TD>+<TD><A HREF="#V" TITLE="V - one-place verb">V</A> <CODE>-></CODE> <A HREF="#VA" TITLE="VA - adjective-complement verb">VA</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>mkV2A</CODE></TD>+<TD><A HREF="#V" TITLE="V - one-place verb">V</A> <CODE>-></CODE> <A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A> <CODE>-></CODE> <A HREF="#V2A" TITLE="V2A - verb with NP and AP complement">V2A</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>mkVQ</CODE></TD>+<TD><A HREF="#V" TITLE="V - one-place verb">V</A> <CODE>-></CODE> <A HREF="#VQ" TITLE="VQ - question-complement verb">VQ</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>mkV2Q</CODE></TD>+<TD><A HREF="#V" TITLE="V - one-place verb">V</A> <CODE>-></CODE> <A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A> <CODE>-></CODE> <A HREF="#V2Q" TITLE="V2Q - verb with NP and Q complement">V2Q</A></TD>+<TD><I>-</I></TD>+</TR>+</TABLE>++<A NAME="toc98"></A>+<H2>Paradigms for Polish</H2>++<P>+<a name="RParadigms"></a>+</P>+<P>+source <A HREF="http://www.grammaticalframework.org/lib/src/polish/ParadigmsPol.gf"><CODE>../src/polish/ParadigmsPol.gf</CODE></A>+</P>++<A NAME="toc99"></A>+<H2>Paradigms for Punjabi</H2>++<P>+<a name="RParadigms"></a>+</P>+<P>+source <A HREF="http://www.grammaticalframework.org/lib/src/punjabi/ParadigmsPnb.gf"><CODE>../src/punjabi/ParadigmsPnb.gf</CODE></A>+</P>++<TABLE BORDER="1" CELLPADDING="4">+<TR>+<TH>Function</TH>+<TH>Type</TH>+<TH COLSPAN="2">Explanation</TH>+</TR>+<TR>+<TD><CODE>masculine</CODE></TD>+<TD><A HREF="#Gender">Gender</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>feminine</CODE></TD>+<TD><A HREF="#Gender">Gender</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>singular</CODE></TD>+<TD><CODE>Number;</CODE></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>plural</CODE></TD>+<TD><CODE>Number;</CODE></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>mkN2</CODE></TD>+<TD><A HREF="#N" TITLE="N - common noun">N</A> <CODE>-></CODE> <A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A> <CODE>-></CODE> <CODE>Str</CODE> <CODE>-></CODE> <CODE>N2;</CODE></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>mkN3</CODE></TD>+<TD><A HREF="#N" TITLE="N - common noun">N</A> <CODE>-></CODE> <A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A> <CODE>-></CODE> <CODE>Str</CODE> <CODE>-></CODE> <CODE>Str-></CODE> <A HREF="#N3" TITLE="N3 - three-place relational noun">N3</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>mkCmpdNoun</CODE></TD>+<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#N" TITLE="N - common noun">N</A> <CODE>-></CODE> <A HREF="#N" TITLE="N - common noun">N</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>mkPN</CODE></TD>+<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#PN" TITLE="PN - proper name">PN</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>mkPN</CODE></TD>+<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#Gender">Gender</A> <CODE>-></CODE> <A HREF="#PN" TITLE="PN - proper name">PN</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>personalPN</CODE></TD>+<TD><CODE>Str</CODE> <CODE>-></CODE> <CODE>Str</CODE> <CODE>-></CODE> <CODE>Str</CODE> <CODE>-></CODE> <CODE>Str</CODE> <CODE>-></CODE> <CODE>Str</CODE> <CODE>-></CODE> <A HREF="#Number">Number</A> <CODE>-></CODE> <A HREF="#Gender">Gender</A> <CODE>-></CODE> <A HREF="#PPerson">PPerson</A> <CODE>-></CODE> <A HREF="#Pron" TITLE="Pron - personal pronoun">Pron</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>demoPN</CODE></TD>+<TD><CODE>Str</CODE> <CODE>-></CODE> <CODE>Str</CODE> <CODE>-></CODE> <CODE>Str</CODE> <CODE>-></CODE> <A 'HREF="#Quant" TITLE="Quant - quantifier ('nucleus' of Det)"'>Quant</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>mkDet</CODE></TD>+<TD><CODE>Str</CODE> <CODE>-></CODE> <CODE>Str</CODE> <CODE>-></CODE> <CODE>Str</CODE> <CODE>-></CODE> <CODE>Str</CODE> <CODE>-></CODE> <A HREF="#Number">Number</A> <CODE>-></CODE> <A HREF="#Det" TITLE="Det - determiner phrase">Det</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>mkIP</CODE></TD>+<TD><CODE>(x1,x2,x3,x4:Str)</CODE> <CODE>-></CODE> <A HREF="#Number">Number</A> <CODE>-></CODE> <A HREF="#Gender">Gender</A> <CODE>-></CODE> <A HREF="#IP" TITLE="IP - interrogative pronoun">IP</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>mkAdN</CODE></TD>+<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#AdN" TITLE="AdN - numeral-modifying adverb">AdN</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>mkA</CODE></TD>+<TD><CODE>Str-></CODE> <A HREF="#A" TITLE="A - one-place adjective">A</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>mkA</CODE></TD>+<TD><CODE>Str</CODE> <CODE>-></CODE> <CODE>Str</CODE> <CODE>-></CODE> <A HREF="#A2" TITLE="A2 - two-place adjective">A2</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>mkV</CODE></TD>+<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#V" TITLE="V - one-place verb">V</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>mkV2</CODE></TD>+<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#V2" TITLE="V2 - two-place verb">V2</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>mkV2</CODE></TD>+<TD><A HREF="#V" TITLE="V - one-place verb">V</A> <CODE>-></CODE> <A HREF="#V2" TITLE="V2 - two-place verb">V2</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>mkV2</CODE></TD>+<TD><A HREF="#V" TITLE="V - one-place verb">V</A> <CODE>-></CODE> <CODE>Str</CODE> <CODE>-></CODE> <A HREF="#V2" TITLE="V2 - two-place verb">V2</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>mkV3</CODE></TD>+<TD><A HREF="#V" TITLE="V - one-place verb">V</A> <CODE>-></CODE> <CODE>Str</CODE> <CODE>-></CODE> <CODE>Str</CODE> <CODE>-></CODE> <CODE>V3;</CODE></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>mkV2V</CODE></TD>+<TD><A HREF="#V" TITLE="V - one-place verb">V</A> <CODE>-></CODE> <CODE>Str</CODE> <CODE>-></CODE> <CODE>Str</CODE> <CODE>-></CODE> <A HREF="#Bool">Bool</A> <CODE>-></CODE> <A HREF="#V2V" TITLE="V2V - verb with NP and V complement">V2V</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>compoundV</CODE></TD>+<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#V" TITLE="V - one-place verb">V</A> <CODE>-></CODE> <A HREF="#V" TITLE="V - one-place verb">V</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>compoundV</CODE></TD>+<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#V2" TITLE="V2 - two-place verb">V2</A> <CODE>-></CODE> <A HREF="#V" TITLE="V - one-place verb">V</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>mkAdv</CODE></TD>+<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#Adv" TITLE="Adv - verb-phrase-modifying adverb">Adv</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>mkPrep</CODE></TD>+<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>mkQuant1</CODE></TD>+<TD><A HREF="#Pron" TITLE="Pron - personal pronoun">Pron</A> <CODE>-></CODE> <A 'HREF="#Quant" TITLE="Quant - quantifier ('nucleus' of Det)"'>Quant</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>mkIQuant</CODE></TD>+<TD><CODE>Str</CODE> <CODE>-></CODE> <CODE>Str</CODE> <CODE>-></CODE> <CODE>Str</CODE> <CODE>-></CODE> <CODE>Str</CODE> <CODE>-></CODE> <A HREF="#IQuant">IQuant</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>mkQuant1</CODE></TD>+<TD><A HREF="#Pron" TITLE="Pron - personal pronoun">Pron</A> <CODE>-></CODE> <A 'HREF="#Quant" TITLE="Quant - quantifier ('nucleus' of Det)"'>Quant</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>mkConj</CODE></TD>+<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#Conj" TITLE="Conj - conjunction">Conj</A></TD>+<TD><I>and (plural agreement)</I></TD>+</TR>+<TR>+<TD><CODE>mkConj</CODE></TD>+<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#Number">Number</A> <CODE>-></CODE> <A HREF="#Conj" TITLE="Conj - conjunction">Conj</A></TD>+<TD><I>or (agrement number given as argument)</I></TD>+</TR>+<TR>+<TD><CODE>mkConj</CODE></TD>+<TD><CODE>Str</CODE> <CODE>-></CODE> <CODE>Str</CODE> <CODE>-></CODE> <A HREF="#Conj" TITLE="Conj - conjunction">Conj</A></TD>+<TD><I>both ... and (plural)</I></TD>+</TR>+<TR>+<TD><CODE>mkConj</CODE></TD>+<TD><CODE>Str</CODE> <CODE>-></CODE> <CODE>Str</CODE> <CODE>-></CODE> <A HREF="#Number">Number</A> <CODE>-></CODE> <A HREF="#Conj" TITLE="Conj - conjunction">Conj</A></TD>+<TD><I>either ... or (agrement number given as argument)</I></TD>+</TR>+<TR>+<TD><CODE>mkConj</CODE></TD>+<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#Conj" TITLE="Conj - conjunction">Conj</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>mkConj</CODE></TD>+<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#Number">Number</A> <CODE>-></CODE> <A HREF="#Conj" TITLE="Conj - conjunction">Conj</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>mkConj</CODE></TD>+<TD><CODE>Str</CODE> <CODE>-></CODE> <CODE>Str</CODE> <CODE>-></CODE> <A HREF="#Conj" TITLE="Conj - conjunction">Conj</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>mkConj</CODE></TD>+<TD><CODE>Str</CODE> <CODE>-></CODE> <CODE>Str</CODE> <CODE>-></CODE> <A HREF="#Number">Number</A> <CODE>-></CODE> <A HREF="#Conj" TITLE="Conj - conjunction">Conj</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>mk2Conj</CODE></TD>+<TD><CODE>Str</CODE> <CODE>-></CODE> <CODE>Str</CODE> <CODE>-></CODE> <A HREF="#Number">Number</A> <CODE>-></CODE> <A HREF="#Conj" TITLE="Conj - conjunction">Conj</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>mkVV</CODE></TD>+<TD><A HREF="#V" TITLE="V - one-place verb">V</A> <CODE>-></CODE> <A HREF="#VV" TITLE="VV - verb-phrase-complement verb">VV</A></TD>+<TD><I>-</I></TD>+</TR>+</TABLE>++<A NAME="toc100"></A>+<H2>Paradigms for Romanian</H2>++<P>+<a name="RParadigms"></a>+</P>+<P>+source <A HREF="http://www.grammaticalframework.org/lib/src/romanian/ParadigmsRon.gf"><CODE>../src/romanian/ParadigmsRon.gf</CODE></A>+</P>++<TABLE BORDER="1" CELLPADDING="4">+<TR>+<TH>Function</TH>+<TH>Type</TH>+<TH COLSPAN="2">Explanation</TH>+</TR>+<TR>+<TD><CODE>NGender</CODE></TD>+<TD><A HREF="#Type">Type</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>masculine</CODE></TD>+<TD><A HREF="#NGender">NGender</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>feminine</CODE></TD>+<TD><A HREF="#NGender">NGender</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>neuter</CODE></TD>+<TD><A HREF="#NGender">NGender</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>Gender</CODE></TD>+<TD><A HREF="#Type">Type</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>Masculine</CODE></TD>+<TD><A HREF="#Gender">Gender</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>Feminine</CODE></TD>+<TD><A HREF="#Gender">Gender</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>Anim</CODE></TD>+<TD><A HREF="#Type">Type</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>animate</CODE></TD>+<TD><A HREF="#Anim">Anim</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>inanimate</CODE></TD>+<TD><CODE>Anim;</CODE></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>Number</CODE></TD>+<TD><A HREF="#Type">Type</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>singular</CODE></TD>+<TD><A HREF="#Number">Number</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>plural</CODE></TD>+<TD><A HREF="#Number">Number</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>Preposition</CODE></TD>+<TD><A HREF="#Type">Type</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>NCase</CODE></TD>+<TD><A HREF="#Type">Type</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>Acc</CODE></TD>+<TD><A HREF="#NCase">NCase</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>Dat</CODE></TD>+<TD><A HREF="#NCase">NCase</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>Gen</CODE></TD>+<TD><A HREF="#NCase">NCase</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>Nom</CODE></TD>+<TD><A HREF="#NCase">NCase</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>mkPrep</CODE></TD>+<TD><CODE>Str</CODE> <CODE>-></CODE> <CODE>NCase-></CODE> <A HREF="#Bool">Bool</A> <CODE>-></CODE> <A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>mkPrep</CODE></TD>+<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#NCase">NCase</A> <CODE>-></CODE> <CODE>Prep;</CODE></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>noPrep</CODE></TD>+<TD><A HREF="#NCase">NCase</A> <CODE>-></CODE> <A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>mkN</CODE></TD>+<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#N" TITLE="N - common noun">N</A></TD>+<TD><I>Singular, infers gender and Plural</I></TD>+</TR>+<TR>+<TD><CODE>mkN</CODE></TD>+<TD><CODE>Str</CODE> <CODE>-></CODE> <CODE>Str</CODE> <CODE>-></CODE> <A HREF="#NGender">NGender</A> <CODE>-></CODE> <A HREF="#N" TITLE="N - common noun">N</A></TD>+<TD><I>worst case: Singular + Plural + gender</I></TD>+</TR>+<TR>+<TD><CODE>mkN</CODE></TD>+<TD><CODE>Str</CODE> <CODE>-></CODE> <CODE>Str</CODE> <CODE>-></CODE> <CODE>Str</CODE> <CODE>-></CODE> <A HREF="#N" TITLE="N - common noun">N</A></TD>+<TD><I>very irregular nouns - feminine</I></TD>+</TR>+<TR>+<TD><CODE>mkN</CODE></TD>+<TD><CODE>Str</CODE> <CODE>-></CODE> <CODE>Str</CODE> <CODE>-></CODE> <A HREF="#N" TITLE="N - common noun">N</A></TD>+<TD><I>Singular + Plural, infers gender</I></TD>+</TR>+<TR>+<TD><CODE>mkN</CODE></TD>+<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#NGender">NGender</A> <CODE>-></CODE> <A HREF="#N" TITLE="N - common noun">N</A></TD>+<TD><I>Singular + gender, infers Plural</I></TD>+</TR>+<TR>+<TD><CODE>mkNR</CODE></TD>+<TD><CODE>Str</CODE> <CODE>-></CODE> <CODE>N;</CODE></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>mkN2</CODE></TD>+<TD><A HREF="#N" TITLE="N - common noun">N</A> <CODE>-></CODE> <A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A> <CODE>-></CODE> <A HREF="#N2" TITLE="N2 - relational noun">N2</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>mkN3</CODE></TD>+<TD><A HREF="#N" TITLE="N - common noun">N</A> <CODE>-></CODE> <A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A> <CODE>-></CODE> <A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A> <CODE>-></CODE> <A HREF="#N3" TITLE="N3 - three-place relational noun">N3</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>mkPN</CODE></TD>+<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#PN" TITLE="PN - proper name">PN</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>mkPN</CODE></TD>+<TD><CODE>Str</CODE> <CODE>-></CODE> <CODE>Str</CODE> <CODE>-></CODE> <A HREF="#Gender">Gender</A> <CODE>-></CODE> <A HREF="#Number">Number</A> <CODE>-></CODE> <A HREF="#PN" TITLE="PN - proper name">PN</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>mkPN</CODE></TD>+<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#Gender">Gender</A> <CODE>-></CODE> <A HREF="#PN" TITLE="PN - proper name">PN</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>mkPN</CODE></TD>+<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#Gender">Gender</A> <CODE>-></CODE> <A HREF="#Number">Number</A> <CODE>-></CODE> <A HREF="#PN" TITLE="PN - proper name">PN</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>mkInAn</CODE></TD>+<TD><A HREF="#PN" TITLE="PN - proper name">PN</A> <CODE>-></CODE> <A HREF="#PN" TITLE="PN - proper name">PN</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>mkPropNoun</CODE></TD>+<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#Gender">Gender</A> <CODE>-></CODE> <A HREF="#PN" TITLE="PN - proper name">PN</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>mkA</CODE></TD>+<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#A" TITLE="A - one-place adjective">A</A></TD>+<TD><I>regular adjectives</I></TD>+</TR>+<TR>+<TD><CODE>mkA</CODE></TD>+<TD><CODE>Str</CODE> <CODE>-></CODE> <CODE>Str</CODE> <CODE>-></CODE> <CODE>Str</CODE> <CODE>-></CODE> <CODE>Str</CODE> <CODE>-></CODE> <CODE>Str</CODE> <CODE>-></CODE> <A HREF="#A" TITLE="A - one-place adjective">A</A> <CODE>--worst</CODE> <CODE>case</CODE></TD>+<TD><I>all 4 forms are needed + form for adverb</I></TD>+</TR>+<TR>+<TD><CODE>mkA</CODE></TD>+<TD><CODE>Str</CODE> <CODE>-></CODE> <CODE>Str</CODE> <CODE>-></CODE> <CODE>Str</CODE> <CODE>-></CODE> <CODE>Str</CODE> <CODE>-></CODE> <A HREF="#A" TITLE="A - one-place adjective">A</A></TD>+<TD><I>4 forms are needed</I></TD>+</TR>+<TR>+<TD><CODE>mkA2</CODE></TD>+<TD><A HREF="#A" TITLE="A - one-place adjective">A</A> <CODE>-></CODE> <A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A> <CODE>-></CODE> <A HREF="#A2" TITLE="A2 - two-place adjective">A2</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>mkV</CODE></TD>+<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#V" TITLE="V - one-place verb">V</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>mkV2S</CODE></TD>+<TD><A HREF="#V" TITLE="V - one-place verb">V</A> <CODE>-></CODE> <A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A> <CODE>-></CODE> <A HREF="#V2S" TITLE="V2S - verb with NP and S complement">V2S</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>mkV2V</CODE></TD>+<TD><A HREF="#V" TITLE="V - one-place verb">V</A> <CODE>-></CODE> <A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A> <CODE>-></CODE> <A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A> <CODE>-></CODE> <A HREF="#V2V" TITLE="V2V - verb with NP and V complement">V2V</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>mkVA</CODE></TD>+<TD><A HREF="#V" TITLE="V - one-place verb">V</A> <CODE>-></CODE> <A HREF="#VA" TITLE="VA - adjective-complement verb">VA</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>mkV2A</CODE></TD>+<TD><A HREF="#V" TITLE="V - one-place verb">V</A> <CODE>-></CODE> <A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A> <CODE>-></CODE> <A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A> <CODE>-></CODE> <A HREF="#V2A" TITLE="V2A - verb with NP and AP complement">V2A</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>mkVQ</CODE></TD>+<TD><A HREF="#V" TITLE="V - one-place verb">V</A> <CODE>-></CODE> <A HREF="#VQ" TITLE="VQ - question-complement verb">VQ</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>mkV2Q</CODE></TD>+<TD><A HREF="#V" TITLE="V - one-place verb">V</A> <CODE>-></CODE> <A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A> <CODE>-></CODE> <A HREF="#V2Q" TITLE="V2Q - verb with NP and Q complement">V2Q</A></TD>+<TD><I>-</I></TD>+</TR>+</TABLE>++<A NAME="toc101"></A>+<H2>Paradigms for Russian</H2>++<P>+<a name="RParadigms"></a>+</P>+<P>+source <A HREF="http://www.grammaticalframework.org/lib/src/russian/ParadigmsRus.gf"><CODE>../src/russian/ParadigmsRus.gf</CODE></A>+</P>++<TABLE BORDER="1" CELLPADDING="4">+<TR>+<TH>Function</TH>+<TH>Type</TH>+<TH COLSPAN="2">Explanation</TH>+</TR>+<TR>+<TD><CODE>Gender</CODE></TD>+<TD><A HREF="#Type">Type</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>masculine</CODE></TD>+<TD><A HREF="#Gender">Gender</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>feminine</CODE></TD>+<TD><A HREF="#Gender">Gender</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>neuter</CODE></TD>+<TD><A HREF="#Gender">Gender</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>Case</CODE></TD>+<TD><A HREF="#Type">Type</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>nominative</CODE></TD>+<TD><A HREF="#Case">Case</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>genitive</CODE></TD>+<TD><A HREF="#Case">Case</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>dative</CODE></TD>+<TD><A HREF="#Case">Case</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>accusative</CODE></TD>+<TD><A HREF="#Case">Case</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>instructive</CODE></TD>+<TD><A HREF="#Case">Case</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>prepositional</CODE></TD>+<TD><A HREF="#Case">Case</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>Number</CODE></TD>+<TD><A HREF="#Type">Type</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>singular</CODE></TD>+<TD><A HREF="#Number">Number</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>plural</CODE></TD>+<TD><A HREF="#Number">Number</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>mkN</CODE></TD>+<TD><CODE>(karta</CODE> <CODE>:</CODE> <CODE>Str)</CODE> <CODE>-></CODE> <A HREF="#N" TITLE="N - common noun">N</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>mkN</CODE></TD>+<TD><CODE>(tigr</CODE> <CODE>:</CODE> <CODE>Str)</CODE> <CODE>-></CODE> <A HREF="#Animacy">Animacy</A> <CODE>-></CODE> <A HREF="#N" TITLE="N - common noun">N</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>mkN</CODE></TD>+<TD><CODE>(nomSg,</CODE> <CODE>genSg,</CODE> <CODE>datSg,</CODE> <CODE>accSg,</CODE> <CODE>instSg,</CODE> <CODE>preposSg,</CODE> <CODE>prepos2Sg,</CODE> <CODE>nomPl,</CODE> <CODE>genPl,</CODE> <CODE>datPl,</CODE> <CODE>accPl,</CODE> <CODE>instPl,</CODE> <CODE>preposPl</CODE> <CODE>:</CODE> <CODE>Str)</CODE> <CODE>-></CODE> <A HREF="#Gender">Gender</A> <CODE>-></CODE> <A HREF="#Animacy">Animacy</A> <CODE>-></CODE> <A HREF="#N" TITLE="N - common noun">N</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>mkN2</CODE></TD>+<TD><A HREF="#N" TITLE="N - common noun">N</A> <CODE>-></CODE> <A HREF="#N2" TITLE="N2 - relational noun">N2</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>mkN2</CODE></TD>+<TD><A HREF="#N" TITLE="N - common noun">N</A> <CODE>-></CODE> <A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A> <CODE>-></CODE> <A HREF="#N2" TITLE="N2 - relational noun">N2</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>mkN3</CODE></TD>+<TD><A HREF="#N" TITLE="N - common noun">N</A> <CODE>-></CODE> <A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A> <CODE>-></CODE> <A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A> <CODE>-></CODE> <A HREF="#N3" TITLE="N3 - three-place relational noun">N3</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>mkPN</CODE></TD>+<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#Gender">Gender</A> <CODE>-></CODE> <A HREF="#Number">Number</A> <CODE>-></CODE> <A HREF="#Animacy">Animacy</A> <CODE>-></CODE> <A HREF="#PN" TITLE="PN - proper name">PN</A></TD>+<TD><I>"Иван", "Маша"</I></TD>+</TR>+<TR>+<TD><CODE>nounPN</CODE></TD>+<TD><A HREF="#N" TITLE="N - common noun">N</A> <CODE>-></CODE> <A HREF="#PN" TITLE="PN - proper name">PN</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>mkA</CODE></TD>+<TD><CODE>(positive</CODE> <CODE>:</CODE> <CODE>Str)</CODE> <CODE>-></CODE> <A HREF="#A" TITLE="A - one-place adjective">A</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>mkA</CODE></TD>+<TD><CODE>(positive,</CODE> <CODE>comparative</CODE> <CODE>:</CODE> <CODE>Str)</CODE> <CODE>-></CODE> <A HREF="#A" TITLE="A - one-place adjective">A</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>mkA2</CODE></TD>+<TD><A HREF="#A" TITLE="A - one-place adjective">A</A> <CODE>-></CODE> <CODE>Str</CODE> <CODE>-></CODE> <A HREF="#Case">Case</A> <CODE>-></CODE> <A HREF="#A2" TITLE="A2 - two-place adjective">A2</A></TD>+<TD><I>"делим на"</I></TD>+</TR>+<TR>+<TD><CODE>mkAdv</CODE></TD>+<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#Adv" TITLE="Adv - verb-phrase-modifying adverb">Adv</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>mkPrep</CODE></TD>+<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#Case">Case</A> <CODE>-></CODE> <A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A></TD>+<TD><I>as in German</I></TD>+</TR>+<TR>+<TD><CODE>mkV</CODE></TD>+<TD><A HREF="#Aspect">Aspect</A> <CODE>-></CODE> <CODE>(presSg1,presSg2,presSg3,presPl1,presPl2,presPl3,pastSgMasc,imp,inf:</CODE> <CODE>Str)</CODE> <CODE>-></CODE> <A HREF="#V" TITLE="V - one-place verb">V</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>mkV2</CODE></TD>+<TD><A HREF="#V" TITLE="V - one-place verb">V</A> <CODE>-></CODE> <CODE>Str</CODE> <CODE>-></CODE> <A HREF="#Case">Case</A> <CODE>-></CODE> <A HREF="#V2" TITLE="V2 - two-place verb">V2</A></TD>+<TD><I>"войти в дом"; "в", accusative</I></TD>+</TR>+<TR>+<TD><CODE>mkV3</CODE></TD>+<TD><A HREF="#V" TITLE="V - one-place verb">V</A> <CODE>-></CODE> <CODE>Str</CODE> <CODE>-></CODE> <CODE>Str</CODE> <CODE>-></CODE> <A HREF="#Case">Case</A> <CODE>-></CODE> <A HREF="#Case">Case</A> <CODE>-></CODE> <A HREF="#V3" TITLE="V3 - three-place verb">V3</A></TD>+<TD><I>"сложить письмо в конверт"</I></TD>+</TR>+<TR>+<TD><CODE>mkVS</CODE></TD>+<TD><A HREF="#V" TITLE="V - one-place verb">V</A> <CODE>-></CODE> <A HREF="#VS" TITLE="VS - sentence-complement verb">VS</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>mkVQ</CODE></TD>+<TD><A HREF="#V" TITLE="V - one-place verb">V</A> <CODE>-></CODE> <A HREF="#VQ" TITLE="VQ - question-complement verb">VQ</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>dirV2</CODE></TD>+<TD><A HREF="#V" TITLE="V - one-place verb">V</A> <CODE>-></CODE> <A HREF="#V2" TITLE="V2 - two-place verb">V2</A></TD>+<TD><I>"видеть", "любить"</I></TD>+</TR>+<TR>+<TD><CODE>tvDirDir</CODE></TD>+<TD><A HREF="#V" TITLE="V - one-place verb">V</A> <CODE>-></CODE> <A HREF="#V3" TITLE="V3 - three-place verb">V3</A></TD>+<TD><I>-</I></TD>+</TR>+</TABLE>++<A NAME="toc102"></A>+<H2>Paradigms for Sindhi</H2>++<P>+<a name="RParadigms"></a>+</P>+<P>+source <A HREF="http://www.grammaticalframework.org/lib/src/sindhi/ParadigmsSnd.gf"><CODE>../src/sindhi/ParadigmsSnd.gf</CODE></A>+</P>++<TABLE BORDER="1" CELLPADDING="4">+<TR>+<TH>Function</TH>+<TH>Type</TH>+<TH COLSPAN="2">Explanation</TH>+</TR>+<TR>+<TD><CODE>masculine</CODE></TD>+<TD><A HREF="#Gender">Gender</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>feminine</CODE></TD>+<TD><A HREF="#Gender">Gender</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>singular</CODE></TD>+<TD><CODE>Number;</CODE></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>plural</CODE></TD>+<TD><CODE>Number;</CODE></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>mkN2</CODE></TD>+<TD><A HREF="#N" TITLE="N - common noun">N</A> <CODE>-></CODE> <A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A> <CODE>-></CODE> <CODE>Str</CODE> <CODE>-></CODE> <CODE>N2;</CODE></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>mkN3</CODE></TD>+<TD><A HREF="#N" TITLE="N - common noun">N</A> <CODE>-></CODE> <A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A> <CODE>-></CODE> <CODE>Str</CODE> <CODE>-></CODE> <CODE>Str-></CODE> <A HREF="#N3" TITLE="N3 - three-place relational noun">N3</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>mkCmpdNoun</CODE></TD>+<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#N" TITLE="N - common noun">N</A> <CODE>-></CODE> <A HREF="#N" TITLE="N - common noun">N</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>mkPN</CODE></TD>+<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#PN" TITLE="PN - proper name">PN</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>mkPN</CODE></TD>+<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#Gender">Gender</A> <CODE>-></CODE> <A HREF="#PN" TITLE="PN - proper name">PN</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>personalPN</CODE></TD>+<TD><CODE>Str</CODE> <CODE>-></CODE> <CODE>Str</CODE> <CODE>-></CODE> <CODE>Str</CODE> <CODE>-></CODE> <CODE>Str</CODE> <CODE>-></CODE> <CODE>Str</CODE> <CODE>-></CODE> <A HREF="#Number">Number</A> <CODE>-></CODE> <A HREF="#Gender">Gender</A> <CODE>-></CODE> <A HREF="#PPerson">PPerson</A> <CODE>-></CODE> <A HREF="#Pron" TITLE="Pron - personal pronoun">Pron</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>demoPN</CODE></TD>+<TD><CODE>Str</CODE> <CODE>-></CODE> <CODE>Str</CODE> <CODE>-></CODE> <CODE>Str</CODE> <CODE>-></CODE> <A 'HREF="#Quant" TITLE="Quant - quantifier ('nucleus' of Det)"'>Quant</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>mkDet</CODE></TD>+<TD><CODE>Str</CODE> <CODE>-></CODE> <CODE>Str</CODE> <CODE>-></CODE> <CODE>Str</CODE> <CODE>-></CODE> <CODE>Str</CODE> <CODE>-></CODE> <A HREF="#Number">Number</A> <CODE>-></CODE> <A HREF="#Det" TITLE="Det - determiner phrase">Det</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>mkIP</CODE></TD>+<TD><CODE>(x1,x2,x3,x4:Str)</CODE> <CODE>-></CODE> <A HREF="#Number">Number</A> <CODE>-></CODE> <A HREF="#Gender">Gender</A> <CODE>-></CODE> <A HREF="#IP" TITLE="IP - interrogative pronoun">IP</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>mkAdN</CODE></TD>+<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#AdN" TITLE="AdN - numeral-modifying adverb">AdN</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>mkA</CODE></TD>+<TD><CODE>Str-></CODE> <A HREF="#A" TITLE="A - one-place adjective">A</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>mkA</CODE></TD>+<TD><CODE>Str</CODE> <CODE>-></CODE> <CODE>Str</CODE> <CODE>-></CODE> <A HREF="#A2" TITLE="A2 - two-place adjective">A2</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>mkV</CODE></TD>+<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#V" TITLE="V - one-place verb">V</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>mkV2</CODE></TD>+<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#V2" TITLE="V2 - two-place verb">V2</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>mkV2</CODE></TD>+<TD><A HREF="#V" TITLE="V - one-place verb">V</A> <CODE>-></CODE> <A HREF="#V2" TITLE="V2 - two-place verb">V2</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>mkV2</CODE></TD>+<TD><A HREF="#V" TITLE="V - one-place verb">V</A> <CODE>-></CODE> <CODE>Str</CODE> <CODE>-></CODE> <A HREF="#V2" TITLE="V2 - two-place verb">V2</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>mkV3</CODE></TD>+<TD><A HREF="#V" TITLE="V - one-place verb">V</A> <CODE>-></CODE> <CODE>Str</CODE> <CODE>-></CODE> <CODE>Str</CODE> <CODE>-></CODE> <CODE>V3;</CODE></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>mkV2V</CODE></TD>+<TD><A HREF="#V" TITLE="V - one-place verb">V</A> <CODE>-></CODE> <CODE>Str</CODE> <CODE>-></CODE> <CODE>Str</CODE> <CODE>-></CODE> <A HREF="#Bool">Bool</A> <CODE>-></CODE> <A HREF="#V2V" TITLE="V2V - verb with NP and V complement">V2V</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>compoundV</CODE></TD>+<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#V" TITLE="V - one-place verb">V</A> <CODE>-></CODE> <A HREF="#V" TITLE="V - one-place verb">V</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>compoundV</CODE></TD>+<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#V2" TITLE="V2 - two-place verb">V2</A> <CODE>-></CODE> <A HREF="#V" TITLE="V - one-place verb">V</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>mkAdv</CODE></TD>+<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#Adv" TITLE="Adv - verb-phrase-modifying adverb">Adv</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>mkPrep</CODE></TD>+<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>mkQuant1</CODE></TD>+<TD><A HREF="#Pron" TITLE="Pron - personal pronoun">Pron</A> <CODE>-></CODE> <A 'HREF="#Quant" TITLE="Quant - quantifier ('nucleus' of Det)"'>Quant</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>mkIQuant</CODE></TD>+<TD><CODE>Str</CODE> <CODE>-></CODE> <CODE>Str</CODE> <CODE>-></CODE> <CODE>Str</CODE> <CODE>-></CODE> <CODE>Str</CODE> <CODE>-></CODE> <A HREF="#IQuant">IQuant</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>mkQuant1</CODE></TD>+<TD><A HREF="#Pron" TITLE="Pron - personal pronoun">Pron</A> <CODE>-></CODE> <A 'HREF="#Quant" TITLE="Quant - quantifier ('nucleus' of Det)"'>Quant</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>mkConj</CODE></TD>+<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#Conj" TITLE="Conj - conjunction">Conj</A></TD>+<TD><I>and (plural agreement)</I></TD>+</TR>+<TR>+<TD><CODE>mkConj</CODE></TD>+<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#Number">Number</A> <CODE>-></CODE> <A HREF="#Conj" TITLE="Conj - conjunction">Conj</A></TD>+<TD><I>or (agrement number given as argument)</I></TD>+</TR>+<TR>+<TD><CODE>mkConj</CODE></TD>+<TD><CODE>Str</CODE> <CODE>-></CODE> <CODE>Str</CODE> <CODE>-></CODE> <A HREF="#Conj" TITLE="Conj - conjunction">Conj</A></TD>+<TD><I>both ... and (plural)</I></TD>+</TR>+<TR>+<TD><CODE>mkConj</CODE></TD>+<TD><CODE>Str</CODE> <CODE>-></CODE> <CODE>Str</CODE> <CODE>-></CODE> <A HREF="#Number">Number</A> <CODE>-></CODE> <A HREF="#Conj" TITLE="Conj - conjunction">Conj</A></TD>+<TD><I>either ... or (agrement number given as argument)</I></TD>+</TR>+<TR>+<TD><CODE>mkConj</CODE></TD>+<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#Conj" TITLE="Conj - conjunction">Conj</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>mkConj</CODE></TD>+<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#Number">Number</A> <CODE>-></CODE> <A HREF="#Conj" TITLE="Conj - conjunction">Conj</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>mkConj</CODE></TD>+<TD><CODE>Str</CODE> <CODE>-></CODE> <CODE>Str</CODE> <CODE>-></CODE> <A HREF="#Conj" TITLE="Conj - conjunction">Conj</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>mkConj</CODE></TD>+<TD><CODE>Str</CODE> <CODE>-></CODE> <CODE>Str</CODE> <CODE>-></CODE> <A HREF="#Number">Number</A> <CODE>-></CODE> <A HREF="#Conj" TITLE="Conj - conjunction">Conj</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>mk2Conj</CODE></TD>+<TD><CODE>Str</CODE> <CODE>-></CODE> <CODE>Str</CODE> <CODE>-></CODE> <A HREF="#Number">Number</A> <CODE>-></CODE> <A HREF="#Conj" TITLE="Conj - conjunction">Conj</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>mkVV</CODE></TD>+<TD><A HREF="#V" TITLE="V - one-place verb">V</A> <CODE>-></CODE> <A HREF="#VV" TITLE="VV - verb-phrase-complement verb">VV</A></TD>+<TD><I>-</I></TD>+</TR>+</TABLE>++<A NAME="toc103"></A>+<H2>Paradigms for Spanish</H2>++<P>+<a name="RParadigms"></a>+</P>+<P>+source <A HREF="http://www.grammaticalframework.org/lib/src/spanish/ParadigmsSpa.gf"><CODE>../src/spanish/ParadigmsSpa.gf</CODE></A>+</P>++<TABLE BORDER="1" CELLPADDING="4">+<TR>+<TH>Function</TH>+<TH>Type</TH>+<TH COLSPAN="2">Explanation</TH>+</TR>+<TR>+<TD><CODE>Gender</CODE></TD>+<TD><A HREF="#Type">Type</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>masculine</CODE></TD>+<TD><A HREF="#Gender">Gender</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>feminine</CODE></TD>+<TD><A HREF="#Gender">Gender</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>Number</CODE></TD>+<TD><A HREF="#Type">Type</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>singular</CODE></TD>+<TD><A HREF="#Number">Number</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>plural</CODE></TD>+<TD><A HREF="#Number">Number</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>accusative</CODE></TD>+<TD><A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A></TD>+<TD><I>direct object</I></TD>+</TR>+<TR>+<TD><CODE>genitive</CODE></TD>+<TD><A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A></TD>+<TD><I>preposition "de" and its contractions</I></TD>+</TR>+<TR>+<TD><CODE>dative</CODE></TD>+<TD><A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A></TD>+<TD><I>preposition "a" and its contractions</I></TD>+</TR>+<TR>+<TD><CODE>mkPrep</CODE></TD>+<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A></TD>+<TD><I>other preposition</I></TD>+</TR>+<TR>+<TD><CODE>mkN</CODE></TD>+<TD><CODE>(luz</CODE> <CODE>:</CODE> <CODE>Str)</CODE> <CODE>-></CODE> <A HREF="#N" TITLE="N - common noun">N</A></TD>+<TD><I>predictable; feminine for "-a"/"-z", otherwise masculine</I></TD>+</TR>+<TR>+<TD><CODE>mkN</CODE></TD>+<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#Gender">Gender</A> <CODE>-></CODE> <A HREF="#N" TITLE="N - common noun">N</A></TD>+<TD><I>force gender</I></TD>+</TR>+<TR>+<TD><CODE>mkN</CODE></TD>+<TD><CODE>(baston,bastones</CODE> <CODE>:</CODE> <CODE>Str)</CODE> <CODE>-></CODE> <A HREF="#Gender">Gender</A> <CODE>-></CODE> <A HREF="#N" TITLE="N - common noun">N</A></TD>+<TD><I>worst case</I></TD>+</TR>+<TR>+<TD><CODE>compN</CODE></TD>+<TD><A HREF="#N" TITLE="N - common noun">N</A> <CODE>-></CODE> <CODE>Str</CODE> <CODE>-></CODE> <A HREF="#N" TITLE="N - common noun">N</A></TD>+<TD><I>compound, e.g. "número" + "de teléfono"</I></TD>+</TR>+<TR>+<TD><CODE>mkN2</CODE></TD>+<TD><A HREF="#N" TITLE="N - common noun">N</A> <CODE>-></CODE> <A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A> <CODE>-></CODE> <A HREF="#N2" TITLE="N2 - relational noun">N2</A></TD>+<TD><I>relational noun with preposition</I></TD>+</TR>+<TR>+<TD><CODE>deN2</CODE></TD>+<TD><A HREF="#N" TITLE="N - common noun">N</A> <CODE>-></CODE> <A HREF="#N2" TITLE="N2 - relational noun">N2</A></TD>+<TD><I>relational noun with preposition "de"</I></TD>+</TR>+<TR>+<TD><CODE>aN2</CODE></TD>+<TD><A HREF="#N" TITLE="N - common noun">N</A> <CODE>-></CODE> <A HREF="#N2" TITLE="N2 - relational noun">N2</A></TD>+<TD><I>relational noun with preposition "a"</I></TD>+</TR>+<TR>+<TD><CODE>mkN3</CODE></TD>+<TD><A HREF="#N" TITLE="N - common noun">N</A> <CODE>-></CODE> <A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A> <CODE>-></CODE> <A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A> <CODE>-></CODE> <A HREF="#N3" TITLE="N3 - three-place relational noun">N3</A></TD>+<TD><I>prepositions for two complements</I></TD>+</TR>+<TR>+<TD><CODE>mkPN</CODE></TD>+<TD><CODE>(Anna</CODE> <CODE>:</CODE> <CODE>Str)</CODE> <CODE>-></CODE> <A HREF="#PN" TITLE="PN - proper name">PN</A></TD>+<TD><I>feminine for "-a"</I></TD>+</TR>+<TR>+<TD><CODE>mkPN</CODE></TD>+<TD><CODE>(Pilar</CODE> <CODE>:</CODE> <CODE>Str)</CODE> <CODE>-></CODE> <A HREF="#Gender">Gender</A> <CODE>-></CODE> <A HREF="#PN" TITLE="PN - proper name">PN</A></TD>+<TD><I>force gender</I></TD>+</TR>+<TR>+<TD><CODE>mkA</CODE></TD>+<TD><CODE>(util</CODE> <CODE>:</CODE> <CODE>Str)</CODE> <CODE>-></CODE> <A HREF="#A" TITLE="A - one-place adjective">A</A></TD>+<TD><I>predictable adjective</I></TD>+</TR>+<TR>+<TD><CODE>mkA</CODE></TD>+<TD><CODE>(espanol,espanola</CODE> <CODE>:</CODE> <CODE>Str)</CODE> <CODE>-></CODE> <A HREF="#A" TITLE="A - one-place adjective">A</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>mkA</CODE></TD>+<TD><CODE>(solo,sola,solos,solas,solamente</CODE> <CODE>:</CODE> <CODE>Str)</CODE> <CODE>-></CODE> <A HREF="#A" TITLE="A - one-place adjective">A</A></TD>+<TD><I>worst-case</I></TD>+</TR>+<TR>+<TD><CODE>mkA</CODE></TD>+<TD><CODE>(bueno</CODE> <CODE>:</CODE> <CODE>A)</CODE> <CODE>-></CODE> <CODE>(mejor</CODE> <CODE>:</CODE> <CODE>A)</CODE> <CODE>-></CODE> <A HREF="#A" TITLE="A - one-place adjective">A</A></TD>+<TD><I>special comparison (default with "mas")</I></TD>+</TR>+<TR>+<TD><CODE>prefixA</CODE></TD>+<TD><A HREF="#A" TITLE="A - one-place adjective">A</A> <CODE>-></CODE> <A HREF="#A" TITLE="A - one-place adjective">A</A></TD>+<TD><I>adjective before noun (default after noun)</I></TD>+</TR>+<TR>+<TD><CODE>mkA2</CODE></TD>+<TD><A HREF="#A" TITLE="A - one-place adjective">A</A> <CODE>-></CODE> <A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A> <CODE>-></CODE> <A HREF="#A2" TITLE="A2 - two-place adjective">A2</A></TD>+<TD><I>e.g. "casado" + dative</I></TD>+</TR>+<TR>+<TD><CODE>mkQuant</CODE></TD>+<TD><CODE>(ese,esa,esos,esas</CODE> <CODE>:</CODE> <CODE>Str)</CODE> <CODE>-></CODE> <A 'HREF="#Quant" TITLE="Quant - quantifier ('nucleus' of Det)"'>Quant</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>mkDet</CODE></TD>+<TD><CODE>(mucho,mucha</CODE> <CODE>:</CODE> <CODE>Str)</CODE> <CODE>-></CODE> <A HREF="#Number">Number</A> <CODE>-></CODE> <A HREF="#Det" TITLE="Det - determiner phrase">Det</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>mkOrd</CODE></TD>+<TD><A HREF="#A" TITLE="A - one-place adjective">A</A> <CODE>-></CODE> <A HREF="#Ord" TITLE="Ord - ordinal number (used in Det)">Ord</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>mkAdv</CODE></TD>+<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#Adv" TITLE="Adv - verb-phrase-modifying adverb">Adv</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>mkAdV</CODE></TD>+<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#AdV" TITLE="Adv - verb-phrase-modifying adverb">AdV</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>mkAdA</CODE></TD>+<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#AdA" TITLE="AdA - adjective-modifying adverb">AdA</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>mkAdN</CODE></TD>+<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#AdN" TITLE="AdN - numeral-modifying adverb">AdN</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>mkV</CODE></TD>+<TD><CODE>(pagar</CODE> <CODE>:</CODE> <CODE>Str)</CODE> <CODE>-></CODE> <A HREF="#V" TITLE="V - one-place verb">V</A></TD>+<TD><I>regular in "-ar", "-er", ".ir"</I></TD>+</TR>+<TR>+<TD><CODE>mkV</CODE></TD>+<TD><CODE>(mostrar,muestro</CODE> <CODE>:</CODE> <CODE>Str)</CODE> <CODE>-></CODE> <A HREF="#V" TITLE="V - one-place verb">V</A></TD>+<TD><I>regular with vowel alternation</I></TD>+</TR>+<TR>+<TD><CODE>mkV</CODE></TD>+<TD><A HREF="#Verbum">Verbum</A> <CODE>-></CODE> <A HREF="#V" TITLE="V - one-place verb">V</A></TD>+<TD><I>import verb constructed with BeschSpa</I></TD>+</TR>+<TR>+<TD><CODE>reflV</CODE></TD>+<TD><A HREF="#V" TITLE="V - one-place verb">V</A> <CODE>-></CODE> <A HREF="#V" TITLE="V - one-place verb">V</A></TD>+<TD><I>reflexive verb</I></TD>+</TR>+<TR>+<TD><CODE>special_ppV</CODE></TD>+<TD><A HREF="#V" TITLE="V - one-place verb">V</A> <CODE>-></CODE> <CODE>Str</CODE> <CODE>-></CODE> <A HREF="#V" TITLE="V - one-place verb">V</A></TD>+<TD><I>deviant past participle, e.g. abrir - abierto</I></TD>+</TR>+<TR>+<TD><CODE>mkV2</CODE></TD>+<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#V2" TITLE="V2 - two-place verb">V2</A></TD>+<TD><I>regular, direct object</I></TD>+</TR>+<TR>+<TD><CODE>mkV2</CODE></TD>+<TD><A HREF="#V" TITLE="V - one-place verb">V</A> <CODE>-></CODE> <A HREF="#V2" TITLE="V2 - two-place verb">V2</A></TD>+<TD><I>direct object</I></TD>+</TR>+<TR>+<TD><CODE>mkV2</CODE></TD>+<TD><A HREF="#V" TITLE="V - one-place verb">V</A> <CODE>-></CODE> <A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A> <CODE>-></CODE> <A HREF="#V2" TITLE="V2 - two-place verb">V2</A></TD>+<TD><I>other object</I></TD>+</TR>+<TR>+<TD><CODE>mkV3</CODE></TD>+<TD><A HREF="#V" TITLE="V - one-place verb">V</A> <CODE>-></CODE> <A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A> <CODE>-></CODE> <A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A> <CODE>-></CODE> <A HREF="#V3" TITLE="V3 - three-place verb">V3</A></TD>+<TD><I>e.g. hablar, a, di</I></TD>+</TR>+<TR>+<TD><CODE>dirV3</CODE></TD>+<TD><A HREF="#V" TITLE="V - one-place verb">V</A> <CODE>-></CODE> <A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A> <CODE>-></CODE> <A HREF="#V3" TITLE="V3 - three-place verb">V3</A></TD>+<TD><I>e.g. dar,(accusative),a</I></TD>+</TR>+<TR>+<TD><CODE>dirdirV3</CODE></TD>+<TD><A HREF="#V" TITLE="V - one-place verb">V</A> <CODE>-></CODE> <A HREF="#V3" TITLE="V3 - three-place verb">V3</A></TD>+<TD><I>e.g. dar,(dative),(accusative)</I></TD>+</TR>+<TR>+<TD><CODE>mkVS</CODE></TD>+<TD><A HREF="#V" TITLE="V - one-place verb">V</A> <CODE>-></CODE> <A HREF="#VS" TITLE="VS - sentence-complement verb">VS</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>mkV2S</CODE></TD>+<TD><A HREF="#V" TITLE="V - one-place verb">V</A> <CODE>-></CODE> <A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A> <CODE>-></CODE> <A HREF="#V2S" TITLE="V2S - verb with NP and S complement">V2S</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>mkVV</CODE></TD>+<TD><A HREF="#V" TITLE="V - one-place verb">V</A> <CODE>-></CODE> <A HREF="#VV" TITLE="VV - verb-phrase-complement verb">VV</A></TD>+<TD><I>plain infinitive: "quiero hablar"</I></TD>+</TR>+<TR>+<TD><CODE>deVV</CODE></TD>+<TD><A HREF="#V" TITLE="V - one-place verb">V</A> <CODE>-></CODE> <A HREF="#VV" TITLE="VV - verb-phrase-complement verb">VV</A></TD>+<TD><I>"terminar de hablar"</I></TD>+</TR>+<TR>+<TD><CODE>aVV</CODE></TD>+<TD><A HREF="#V" TITLE="V - one-place verb">V</A> <CODE>-></CODE> <A HREF="#VV" TITLE="VV - verb-phrase-complement verb">VV</A></TD>+<TD><I>"aprender a hablar"</I></TD>+</TR>+<TR>+<TD><CODE>mkV2V</CODE></TD>+<TD><A HREF="#V" TITLE="V - one-place verb">V</A> <CODE>-></CODE> <A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A> <CODE>-></CODE> <A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A> <CODE>-></CODE> <A HREF="#V2V" TITLE="V2V - verb with NP and V complement">V2V</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>mkVA</CODE></TD>+<TD><A HREF="#V" TITLE="V - one-place verb">V</A> <CODE>-></CODE> <A HREF="#VA" TITLE="VA - adjective-complement verb">VA</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>mkV2A</CODE></TD>+<TD><A HREF="#V" TITLE="V - one-place verb">V</A> <CODE>-></CODE> <A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A> <CODE>-></CODE> <A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A> <CODE>-></CODE> <A HREF="#V2A" TITLE="V2A - verb with NP and AP complement">V2A</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>mkVQ</CODE></TD>+<TD><A HREF="#V" TITLE="V - one-place verb">V</A> <CODE>-></CODE> <A HREF="#VQ" TITLE="VQ - question-complement verb">VQ</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>mkV2Q</CODE></TD>+<TD><A HREF="#V" TITLE="V - one-place verb">V</A> <CODE>-></CODE> <A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A> <CODE>-></CODE> <A HREF="#V2Q" TITLE="V2Q - verb with NP and Q complement">V2Q</A></TD>+<TD><I>-</I></TD>+</TR>+</TABLE>++<A NAME="toc104"></A>+<H2>Paradigms for Swedish</H2>++<P>+<a name="RParadigms"></a>+</P>+<P>+source <A HREF="http://www.grammaticalframework.org/lib/src/swedish/ParadigmsSwe.gf"><CODE>../src/swedish/ParadigmsSwe.gf</CODE></A>+</P>++<TABLE BORDER="1" CELLPADDING="4">+<TR>+<TH>Function</TH>+<TH>Type</TH>+<TH COLSPAN="2">Explanation</TH>+</TR>+<TR>+<TD><CODE>Gender</CODE></TD>+<TD><A HREF="#Type">Type</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>utrum</CODE></TD>+<TD><A HREF="#Gender">Gender</A></TD>+<TD><I>the "en" gender</I></TD>+</TR>+<TR>+<TD><CODE>neutrum</CODE></TD>+<TD><A HREF="#Gender">Gender</A></TD>+<TD><I>the "ett" gender</I></TD>+</TR>+<TR>+<TD><CODE>Number</CODE></TD>+<TD><A HREF="#Type">Type</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>singular</CODE></TD>+<TD><A HREF="#Number">Number</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>plural</CODE></TD>+<TD><A HREF="#Number">Number</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>mkPrep</CODE></TD>+<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A></TD>+<TD><I>e.g. "till"</I></TD>+</TR>+<TR>+<TD><CODE>noPrep</CODE></TD>+<TD><A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A></TD>+<TD><I>empty string</I></TD>+</TR>+<TR>+<TD><CODE>mkN</CODE></TD>+<TD><CODE>(apa</CODE> <CODE>:</CODE> <CODE>Str)</CODE> <CODE>-></CODE> <A HREF="#N" TITLE="N - common noun">N</A></TD>+<TD><I>predictable nouns: apa-apor, rike-riken, or bil-bilar</I></TD>+</TR>+<TR>+<TD><CODE>mkN</CODE></TD>+<TD><CODE>(nyckel,nycklar</CODE> <CODE>:</CODE> <CODE>Str)</CODE> <CODE>-></CODE> <A HREF="#N" TITLE="N - common noun">N</A></TD>+<TD><I>singular and plural suffice for most nouns</I></TD>+</TR>+<TR>+<TD><CODE>mkN</CODE></TD>+<TD><CODE>(museum,museet,museer,museerna</CODE> <CODE>:</CODE> <CODE>Str)</CODE> <CODE>-></CODE> <A HREF="#N" TITLE="N - common noun">N</A></TD>+<TD><I>worst case for nouns</I></TD>+</TR>+<TR>+<TD><CODE>mkN</CODE></TD>+<TD><CODE>(museum,museet,museer,museerna</CODE> <CODE>:</CODE> <CODE>Str)</CODE> <CODE>-></CODE> <A HREF="#Gender">Gender</A> <CODE>-></CODE> <A HREF="#N" TITLE="N - common noun">N</A></TD>+<TD><I>even worse case for nouns</I></TD>+</TR>+<TR>+<TD><CODE>mkN2</CODE></TD>+<TD><A HREF="#N" TITLE="N - common noun">N</A> <CODE>-></CODE> <A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A> <CODE>-></CODE> <A HREF="#N2" TITLE="N2 - relational noun">N2</A></TD>+<TD><I>e.g. syster - till</I></TD>+</TR>+<TR>+<TD><CODE>mkN3</CODE></TD>+<TD><A HREF="#N" TITLE="N - common noun">N</A> <CODE>-></CODE> <A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A> <CODE>-></CODE> <A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A> <CODE>-></CODE> <A HREF="#N3" TITLE="N3 - three-place relational noun">N3</A></TD>+<TD><I>e.g. flyg - från - till</I></TD>+</TR>+<TR>+<TD><CODE>mkPN</CODE></TD>+<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#PN" TITLE="PN - proper name">PN</A></TD>+<TD><I>default gender utrum</I></TD>+</TR>+<TR>+<TD><CODE>mkPN</CODE></TD>+<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#Gender">Gender</A> <CODE>-></CODE> <A HREF="#PN" TITLE="PN - proper name">PN</A></TD>+<TD><I>set other gender</I></TD>+</TR>+<TR>+<TD><CODE>mkPN</CODE></TD>+<TD><CODE>(jesus,jesu</CODE> <CODE>:</CODE> <CODE>Str)</CODE> <CODE>-></CODE> <A HREF="#Gender">Gender</A> <CODE>-></CODE> <A HREF="#PN" TITLE="PN - proper name">PN</A></TD>+<TD><I>irregular genitive</I></TD>+</TR>+<TR>+<TD><CODE>mkA</CODE></TD>+<TD><CODE>(billig</CODE> <CODE>:</CODE> <CODE>Str)</CODE> <CODE>-></CODE> <A HREF="#A" TITLE="A - one-place adjective">A</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>mkA</CODE></TD>+<TD><CODE>(bred,brett</CODE> <CODE>:</CODE> <CODE>Str)</CODE> <CODE>-></CODE> <A HREF="#A" TITLE="A - one-place adjective">A</A></TD>+<TD><I>predictable adjective</I></TD>+</TR>+<TR>+<TD><CODE>mkA</CODE></TD>+<TD><CODE>(tung,tyngre,tyngst</CODE> <CODE>:</CODE> <CODE>Str)</CODE> <CODE>-></CODE> <A HREF="#A" TITLE="A - one-place adjective">A</A></TD>+<TD><I>irregular comparison</I></TD>+</TR>+<TR>+<TD><CODE>mkA</CODE></TD>+<TD><CODE>(god,gott,goda,battre,bast</CODE> <CODE>:</CODE> <CODE>Str)</CODE> <CODE>-></CODE> <A HREF="#A" TITLE="A - one-place adjective">A</A></TD>+<TD><I>very irregular</I></TD>+</TR>+<TR>+<TD><CODE>mkA</CODE></TD>+<TD><CODE>(liten,litet,lilla,sma,mindre,minst,minsta</CODE> <CODE>:</CODE> <CODE>Str)</CODE> <CODE>-></CODE> <A HREF="#A" TITLE="A - one-place adjective">A</A></TD>+<TD><I>worst case</I></TD>+</TR>+<TR>+<TD><CODE>compoundA</CODE></TD>+<TD><A HREF="#A" TITLE="A - one-place adjective">A</A> <CODE>-></CODE> <A HREF="#A" TITLE="A - one-place adjective">A</A></TD>+<TD><I>force comparison by mera - mest</I></TD>+</TR>+<TR>+<TD><CODE>mkA2</CODE></TD>+<TD><A HREF="#A" TITLE="A - one-place adjective">A</A> <CODE>-></CODE> <A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A> <CODE>-></CODE> <A HREF="#A2" TITLE="A2 - two-place adjective">A2</A></TD>+<TD><I>e.g. delbar - med</I></TD>+</TR>+<TR>+<TD><CODE>mkAdv</CODE></TD>+<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#Adv" TITLE="Adv - verb-phrase-modifying adverb">Adv</A></TD>+<TD><I>postverbal, e.g. här</I></TD>+</TR>+<TR>+<TD><CODE>mkAdV</CODE></TD>+<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#AdV" TITLE="Adv - verb-phrase-modifying adverb">AdV</A></TD>+<TD><I>preverbal, e.g. alltid</I></TD>+</TR>+<TR>+<TD><CODE>mkAdA</CODE></TD>+<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#AdA" TITLE="AdA - adjective-modifying adverb">AdA</A></TD>+<TD><I>modify adjective, e.g. tämligen</I></TD>+</TR>+<TR>+<TD><CODE>mkV</CODE></TD>+<TD><CODE>(stämmer</CODE> <CODE>:</CODE> <CODE>Str)</CODE> <CODE>-></CODE> <A HREF="#V" TITLE="V - one-place verb">V</A></TD>+<TD><I>predictable verb: use present indicative</I></TD>+</TR>+<TR>+<TD><CODE>mkV</CODE></TD>+<TD><CODE>(dricka,drack,druckit</CODE> <CODE>:</CODE> <CODE>Str)</CODE> <CODE>-></CODE> <A HREF="#V" TITLE="V - one-place verb">V</A></TD>+<TD><I>the theme of an irregular verb</I></TD>+</TR>+<TR>+<TD><CODE>mkV</CODE></TD>+<TD><CODE>(gå,går,gå,gick,gått,gången</CODE> <CODE>:</CODE> <CODE>Str)</CODE> <CODE>-></CODE> <A HREF="#V" TITLE="V - one-place verb">V</A></TD>+<TD><I>worst case</I></TD>+</TR>+<TR>+<TD><CODE>mkV</CODE></TD>+<TD><A HREF="#V" TITLE="V - one-place verb">V</A> <CODE>-></CODE> <CODE>Str</CODE> <CODE>-></CODE> <A HREF="#V" TITLE="V - one-place verb">V</A></TD>+<TD><I>particle verb, e.g. passa - på</I></TD>+</TR>+<TR>+<TD><CODE>depV</CODE></TD>+<TD><A HREF="#V" TITLE="V - one-place verb">V</A> <CODE>-></CODE> <A HREF="#V" TITLE="V - one-place verb">V</A></TD>+<TD><I>deponent verb, e.g. andas</I></TD>+</TR>+<TR>+<TD><CODE>reflV</CODE></TD>+<TD><A HREF="#V" TITLE="V - one-place verb">V</A> <CODE>-></CODE> <A HREF="#V" TITLE="V - one-place verb">V</A></TD>+<TD><I>reflexive verb, e.g. ångra sig</I></TD>+</TR>+<TR>+<TD><CODE>mkV2</CODE></TD>+<TD><A HREF="#V" TITLE="V - one-place verb">V</A> <CODE>-></CODE> <A HREF="#V2" TITLE="V2 - two-place verb">V2</A></TD>+<TD><I>direct transitive</I></TD>+</TR>+<TR>+<TD><CODE>mkV2</CODE></TD>+<TD><A HREF="#V" TITLE="V - one-place verb">V</A> <CODE>-></CODE> <A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A> <CODE>-></CODE> <A HREF="#V2" TITLE="V2 - two-place verb">V2</A></TD>+<TD><I>preposition for complement</I></TD>+</TR>+<TR>+<TD><CODE>mkV3</CODE></TD>+<TD><A HREF="#V" TITLE="V - one-place verb">V</A> <CODE>-></CODE> <A HREF="#V3" TITLE="V3 - three-place verb">V3</A></TD>+<TD><I>direct ditransitive</I></TD>+</TR>+<TR>+<TD><CODE>mkV3</CODE></TD>+<TD><A HREF="#V" TITLE="V - one-place verb">V</A> <CODE>-></CODE> <A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A> <CODE>-></CODE> <A HREF="#V3" TITLE="V3 - three-place verb">V3</A></TD>+<TD><I>preposition for last argument</I></TD>+</TR>+<TR>+<TD><CODE>mkV3</CODE></TD>+<TD><A HREF="#V" TITLE="V - one-place verb">V</A> <CODE>-></CODE> <A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A> <CODE>-></CODE> <A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A> <CODE>-></CODE> <A HREF="#V3" TITLE="V3 - three-place verb">V3</A></TD>+<TD><I>prepositions for both complements</I></TD>+</TR>+<TR>+<TD><CODE>mkVS</CODE></TD>+<TD><A HREF="#V" TITLE="V - one-place verb">V</A> <CODE>-></CODE> <A HREF="#VS" TITLE="VS - sentence-complement verb">VS</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>mkV2S</CODE></TD>+<TD><A HREF="#V" TITLE="V - one-place verb">V</A> <CODE>-></CODE> <A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A> <CODE>-></CODE> <A HREF="#V2S" TITLE="V2S - verb with NP and S complement">V2S</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>mkVV</CODE></TD>+<TD><A HREF="#V" TITLE="V - one-place verb">V</A> <CODE>-></CODE> <A HREF="#VV" TITLE="VV - verb-phrase-complement verb">VV</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>mkV2V</CODE></TD>+<TD><A HREF="#V" TITLE="V - one-place verb">V</A> <CODE>-></CODE> <A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A> <CODE>-></CODE> <A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A> <CODE>-></CODE> <A HREF="#V2V" TITLE="V2V - verb with NP and V complement">V2V</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>mkVA</CODE></TD>+<TD><A HREF="#V" TITLE="V - one-place verb">V</A> <CODE>-></CODE> <A HREF="#VA" TITLE="VA - adjective-complement verb">VA</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>mkV2A</CODE></TD>+<TD><A HREF="#V" TITLE="V - one-place verb">V</A> <CODE>-></CODE> <A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A> <CODE>-></CODE> <A HREF="#V2A" TITLE="V2A - verb with NP and AP complement">V2A</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>mkVQ</CODE></TD>+<TD><A HREF="#V" TITLE="V - one-place verb">V</A> <CODE>-></CODE> <A HREF="#VQ" TITLE="VQ - question-complement verb">VQ</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>mkV2Q</CODE></TD>+<TD><A HREF="#V" TITLE="V - one-place verb">V</A> <CODE>-></CODE> <A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A> <CODE>-></CODE> <A HREF="#V2Q" TITLE="V2Q - verb with NP and Q complement">V2Q</A></TD>+<TD><I>-</I></TD>+</TR>+</TABLE>++<A NAME="toc105"></A>+<H2>Paradigms for Thai</H2>++<P>+<a name="RParadigms"></a>+</P>+<P>+source <A HREF="http://www.grammaticalframework.org/lib/src/thai/ParadigmsTha.gf"><CODE>../src/thai/ParadigmsTha.gf</CODE></A>+</P>++<TABLE BORDER="1" CELLPADDING="4">+<TR>+<TH>Function</TH>+<TH>Type</TH>+<TH COLSPAN="2">Explanation</TH>+</TR>+<TR>+<TD><CODE>mkN</CODE></TD>+<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#N" TITLE="N - common noun">N</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>mkN</CODE></TD>+<TD><CODE>Str</CODE> <CODE>-></CODE> <CODE>Str</CODE> <CODE>-></CODE> <A HREF="#N" TITLE="N - common noun">N</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>personN</CODE></TD>+<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#N" TITLE="N - common noun">N</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>fooddishN</CODE></TD>+<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#N" TITLE="N - common noun">N</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>vehicleN</CODE></TD>+<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#N" TITLE="N - common noun">N</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>houseN</CODE></TD>+<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#N" TITLE="N - common noun">N</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>animalN</CODE></TD>+<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#N" TITLE="N - common noun">N</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>placeN</CODE></TD>+<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#N" TITLE="N - common noun">N</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>verbalN</CODE></TD>+<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#N" TITLE="N - common noun">N</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>mkN2</CODE></TD>+<TD><A HREF="#N" TITLE="N - common noun">N</A> <CODE>-></CODE> <CODE>Str</CODE> <CODE>-></CODE> <A HREF="#N2" TITLE="N2 - relational noun">N2</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>mkN3</CODE></TD>+<TD><A HREF="#N" TITLE="N - common noun">N</A> <CODE>-></CODE> <CODE>Str</CODE> <CODE>-></CODE> <CODE>Str</CODE> <CODE>-></CODE> <A HREF="#N3" TITLE="N3 - three-place relational noun">N3</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>mkA</CODE></TD>+<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#A" TITLE="A - one-place adjective">A</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>mkPN</CODE></TD>+<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#PN" TITLE="PN - proper name">PN</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>mkA2</CODE></TD>+<TD><A HREF="#A" TITLE="A - one-place adjective">A</A> <CODE>-></CODE> <CODE>Str</CODE> <CODE>-></CODE> <A HREF="#A2" TITLE="A2 - two-place adjective">A2</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>mkV</CODE></TD>+<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#Verb">Verb</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>mkV</CODE></TD>+<TD><CODE>Str</CODE> <CODE>-></CODE> <CODE>Str</CODE> <CODE>-></CODE> <A HREF="#Verb">Verb</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>mkV2</CODE></TD>+<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#V2" TITLE="V2 - two-place verb">V2</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>mkV2</CODE></TD>+<TD><A HREF="#V" TITLE="V - one-place verb">V</A> <CODE>-></CODE> <A HREF="#V2" TITLE="V2 - two-place verb">V2</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>mkV2</CODE></TD>+<TD><A HREF="#V" TITLE="V - one-place verb">V</A> <CODE>-></CODE> <CODE>Str</CODE> <CODE>-></CODE> <A HREF="#V2" TITLE="V2 - two-place verb">V2</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>mkV3</CODE></TD>+<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#V3" TITLE="V3 - three-place verb">V3</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>mkV3</CODE></TD>+<TD><A HREF="#V" TITLE="V - one-place verb">V</A> <CODE>-></CODE> <A HREF="#V3" TITLE="V3 - three-place verb">V3</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>mkV3</CODE></TD>+<TD><A HREF="#V" TITLE="V - one-place verb">V</A> <CODE>-></CODE> <CODE>Str</CODE> <CODE>-></CODE> <CODE>Str</CODE> <CODE>-></CODE> <A HREF="#V3" TITLE="V3 - three-place verb">V3</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>mkVQ</CODE></TD>+<TD><A HREF="#V" TITLE="V - one-place verb">V</A> <CODE>-></CODE> <A HREF="#VQ" TITLE="VQ - question-complement verb">VQ</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>mkVS</CODE></TD>+<TD><A HREF="#V" TITLE="V - one-place verb">V</A> <CODE>-></CODE> <A HREF="#VS" TITLE="VS - sentence-complement verb">VS</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>mkVA</CODE></TD>+<TD><A HREF="#V" TITLE="V - one-place verb">V</A> <CODE>-></CODE> <A HREF="#VA" TITLE="VA - adjective-complement verb">VA</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>mkV2Q</CODE></TD>+<TD><A HREF="#V" TITLE="V - one-place verb">V</A> <CODE>-></CODE> <CODE>Str</CODE> <CODE>-></CODE> <A HREF="#V2Q" TITLE="V2Q - verb with NP and Q complement">V2Q</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>mkV2V</CODE></TD>+<TD><A HREF="#V" TITLE="V - one-place verb">V</A> <CODE>-></CODE> <CODE>Str</CODE> <CODE>-></CODE> <CODE>Str</CODE> <CODE>-></CODE> <A HREF="#V2V" TITLE="V2V - verb with NP and V complement">V2V</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>mkV2S</CODE></TD>+<TD><A HREF="#V" TITLE="V - one-place verb">V</A> <CODE>-></CODE> <CODE>Str</CODE> <CODE>-></CODE> <A HREF="#V2S" TITLE="V2S - verb with NP and S complement">V2S</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>mkV2A</CODE></TD>+<TD><A HREF="#V" TITLE="V - one-place verb">V</A> <CODE>-></CODE> <CODE>Str</CODE> <CODE>-></CODE> <CODE>Str</CODE> <CODE>-></CODE> <A HREF="#V2A" TITLE="V2A - verb with NP and AP complement">V2A</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>mkAdv</CODE></TD>+<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#Adv" TITLE="Adv - verb-phrase-modifying adverb">Adv</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>mkPrep</CODE></TD>+<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A></TD>+<TD><I>-</I></TD>+</TR>+</TABLE>++<A NAME="toc106"></A>+<H2>Paradigms for Urdu</H2>++<P>+<a name="RParadigms"></a>+</P>+<P>+source <A HREF="http://www.grammaticalframework.org/lib/src/urdu/ParadigmsUrd.gf"><CODE>../src/urdu/ParadigmsUrd.gf</CODE></A>+</P>++<TABLE BORDER="1" CELLPADDING="4">+<TR>+<TH>Function</TH>+<TH>Type</TH>+<TH COLSPAN="2">Explanation</TH>+</TR>+<TR>+<TD><CODE>masculine</CODE></TD>+<TD><A HREF="#Gender">Gender</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>feminine</CODE></TD>+<TD><A HREF="#Gender">Gender</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>singular</CODE></TD>+<TD><CODE>Number;</CODE></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>plural</CODE></TD>+<TD><CODE>Number;</CODE></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>mkN</CODE></TD>+<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#N" TITLE="N - common noun">N</A></TD>+<TD><I>Regular nouns like lRka, gender is judged from noun ending</I></TD>+</TR>+<TR>+<TD><CODE>mkN</CODE></TD>+<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#Gender">Gender</A> <CODE>-></CODE> <A HREF="#N" TITLE="N - common noun">N</A></TD>+<TD><I>nouns whose gender is irregular like Admy</I></TD>+</TR>+<TR>+<TD><CODE>mkN</CODE></TD>+<TD><CODE>(x1,_,_,_,_,x6</CODE> <CODE>:</CODE> <CODE>Str)</CODE> <CODE>-></CODE> <A HREF="#Gender">Gender</A> <CODE>-></CODE> <A HREF="#N" TITLE="N - common noun">N</A></TD>+<TD><I>worst case</I></TD>+</TR>+<TR>+<TD><CODE>mkN2</CODE></TD>+<TD><A HREF="#N" TITLE="N - common noun">N</A> <CODE>-></CODE> <A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A> <CODE>-></CODE> <CODE>Str</CODE> <CODE>-></CODE> <CODE>N2;</CODE></TD>+<TD><I>e.g maN ky</I></TD>+</TR>+<TR>+<TD><CODE>mkN3</CODE></TD>+<TD><A HREF="#N" TITLE="N - common noun">N</A> <CODE>-></CODE> <A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A> <CODE>-></CODE> <CODE>Str</CODE> <CODE>-></CODE> <CODE>Str-></CODE> <A HREF="#N3" TITLE="N3 - three-place relational noun">N3</A></TD>+<TD><I>e.g faSlh - sE - ka</I></TD>+</TR>+<TR>+<TD><CODE>mkCmpdNoun</CODE></TD>+<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#N" TITLE="N - common noun">N</A> <CODE>-></CODE> <A HREF="#N" TITLE="N - common noun">N</A></TD>+<TD><I>e.g t-alb elm</I></TD>+</TR>+<TR>+<TD><CODE>mkPN</CODE></TD>+<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#PN" TITLE="PN - proper name">PN</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>personalPN</CODE></TD>+<TD><CODE>Str</CODE> <CODE>-></CODE> <CODE>Str</CODE> <CODE>-></CODE> <CODE>Str</CODE> <CODE>-></CODE> <CODE>Str</CODE> <CODE>-></CODE> <CODE>Str</CODE> <CODE>-></CODE> <CODE>Str</CODE> <CODE>-></CODE> <CODE>Str</CODE> <CODE>-></CODE> <A HREF="#Number">Number</A> <CODE>-></CODE> <A HREF="#Gender">Gender</A> <CODE>-></CODE> <A HREF="#UPerson">UPerson</A> <CODE>-></CODE> <A HREF="#Pron" TITLE="Pron - personal pronoun">Pron</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>demoPN</CODE></TD>+<TD><CODE>Str</CODE> <CODE>-></CODE> <CODE>Str</CODE> <CODE>-></CODE> <CODE>Str</CODE> <CODE>-></CODE> <A 'HREF="#Quant" TITLE="Quant - quantifier ('nucleus' of Det)"'>Quant</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>mkDet</CODE></TD>+<TD><CODE>Str</CODE> <CODE>-></CODE> <CODE>Str</CODE> <CODE>-></CODE> <CODE>Str</CODE> <CODE>-></CODE> <CODE>Str</CODE> <CODE>-></CODE> <A HREF="#Number">Number</A> <CODE>-></CODE> <A HREF="#Det" TITLE="Det - determiner phrase">Det</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>mkIP</CODE></TD>+<TD><CODE>(x1,x2,x3:Str)</CODE> <CODE>-></CODE> <A HREF="#Number">Number</A> <CODE>-></CODE> <A HREF="#Gender">Gender</A> <CODE>-></CODE> <A HREF="#IP" TITLE="IP - interrogative pronoun">IP</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>mkAdN</CODE></TD>+<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#AdN" TITLE="AdN - numeral-modifying adverb">AdN</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>mkA</CODE></TD>+<TD><CODE>Str-></CODE> <A HREF="#A" TITLE="A - one-place adjective">A</A></TD>+<TD><I>e.g ach'a</I></TD>+</TR>+<TR>+<TD><CODE>mkA</CODE></TD>+<TD><CODE>Str</CODE> <CODE>-></CODE> <CODE>Str</CODE> <CODE>-></CODE> <A HREF="#A2" TITLE="A2 - two-place adjective">A2</A></TD>+<TD><I>e.g sE Xady krna</I></TD>+</TR>+<TR>+<TD><CODE>mkA2</CODE></TD>+<TD><A HREF="#A" TITLE="A - one-place adjective">A</A> <CODE>-></CODE> <CODE>Str</CODE> <CODE>-></CODE> <A HREF="#A2" TITLE="A2 - two-place adjective">A2</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>mkCompoundA</CODE></TD>+<TD><CODE>Str</CODE> <CODE>-></CODE> <CODE>Str</CODE> <CODE>-></CODE> <A HREF="#A" TITLE="A - one-place adjective">A</A></TD>+<TD><I>e.g dra hwa</I></TD>+</TR>+<TR>+<TD><CODE>mkV</CODE></TD>+<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#V" TITLE="V - one-place verb">V</A></TD>+<TD><I>regular verbs like swna</I></TD>+</TR>+<TR>+<TD><CODE>mkV2</CODE></TD>+<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#V2" TITLE="V2 - two-place verb">V2</A></TD>+<TD><I>e.g pyna</I></TD>+</TR>+<TR>+<TD><CODE>mkV2</CODE></TD>+<TD><A HREF="#V" TITLE="V - one-place verb">V</A> <CODE>-></CODE> <A HREF="#V2" TITLE="V2 - two-place verb">V2</A></TD>+<TD><I>e.g pyna</I></TD>+</TR>+<TR>+<TD><CODE>mkV2</CODE></TD>+<TD><A HREF="#V" TITLE="V - one-place verb">V</A> <CODE>-></CODE> <CODE>Str</CODE> <CODE>-></CODE> <A HREF="#V2" TITLE="V2 - two-place verb">V2</A></TD>+<TD><I>e.g bnd krna</I></TD>+</TR>+<TR>+<TD><CODE>dirV2</CODE></TD>+<TD><A HREF="#V" TITLE="V - one-place verb">V</A> <CODE>-></CODE> <A HREF="#V2" TITLE="V2 - two-place verb">V2</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>mkV3</CODE></TD>+<TD><A HREF="#V" TITLE="V - one-place verb">V</A> <CODE>-></CODE> <CODE>Str</CODE> <CODE>-></CODE> <CODE>Str</CODE> <CODE>-></CODE> <CODE>V3;</CODE></TD>+<TD><I>e.g bycna</I></TD>+</TR>+<TR>+<TD><CODE>mkV2V</CODE></TD>+<TD><A HREF="#V" TITLE="V - one-place verb">V</A> <CODE>-></CODE> <CODE>Str</CODE> <CODE>-></CODE> <CODE>Str</CODE> <CODE>-></CODE> <A HREF="#Bool">Bool</A> <CODE>-></CODE> <A HREF="#V2V" TITLE="V2V - verb with NP and V complement">V2V</A></TD>+<TD><I>e.g eltja krna - sE - kw</I></TD>+</TR>+<TR>+<TD><CODE>dirdirV3</CODE></TD>+<TD><A HREF="#V" TITLE="V - one-place verb">V</A> <CODE>-></CODE> <A HREF="#V3" TITLE="V3 - three-place verb">V3</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>compoundV</CODE></TD>+<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#V" TITLE="V - one-place verb">V</A> <CODE>-></CODE> <A HREF="#V" TITLE="V - one-place verb">V</A></TD>+<TD><I>e.g barX hwna</I></TD>+</TR>+<TR>+<TD><CODE>compoundV</CODE></TD>+<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#V2" TITLE="V2 - two-place verb">V2</A> <CODE>-></CODE> <A HREF="#V" TITLE="V - one-place verb">V</A></TD>+<TD><I>e.g bnd krna</I></TD>+</TR>+<TR>+<TD><CODE>mkAdv</CODE></TD>+<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#Adv" TITLE="Adv - verb-phrase-modifying adverb">Adv</A></TD>+<TD><I>e.g yhaN</I></TD>+</TR>+<TR>+<TD><CODE>mkAdv</CODE></TD>+<TD><CODE>Str</CODE> <CODE>-></CODE> <CODE>Str</CODE> <CODE>-></CODE> <A HREF="#Adv" TITLE="Adv - verb-phrase-modifying adverb">Adv</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>mkPrep</CODE></TD>+<TD><CODE>Str</CODE> <CODE>-></CODE> <CODE>Str</CODE> <CODE>-></CODE> <A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep</A></TD>+<TD><I>e.g ka - ky</I></TD>+</TR>+<TR>+<TD><CODE>mkIQuant</CODE></TD>+<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#IQuant">IQuant</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>mkConj</CODE></TD>+<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#Conj" TITLE="Conj - conjunction">Conj</A></TD>+<TD><I>and (plural agreement)</I></TD>+</TR>+<TR>+<TD><CODE>mkConj</CODE></TD>+<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#Number">Number</A> <CODE>-></CODE> <A HREF="#Conj" TITLE="Conj - conjunction">Conj</A></TD>+<TD><I>or (agrement number given as argument)</I></TD>+</TR>+<TR>+<TD><CODE>mkConj</CODE></TD>+<TD><CODE>Str</CODE> <CODE>-></CODE> <CODE>Str</CODE> <CODE>-></CODE> <A HREF="#Conj" TITLE="Conj - conjunction">Conj</A></TD>+<TD><I>both ... and (plural)</I></TD>+</TR>+<TR>+<TD><CODE>mkConj</CODE></TD>+<TD><CODE>Str</CODE> <CODE>-></CODE> <CODE>Str</CODE> <CODE>-></CODE> <A HREF="#Number">Number</A> <CODE>-></CODE> <A HREF="#Conj" TITLE="Conj - conjunction">Conj</A></TD>+<TD><I>either ... or (agrement number given as argument)</I></TD>+</TR>+<TR>+<TD><CODE>mkConj</CODE></TD>+<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#Conj" TITLE="Conj - conjunction">Conj</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>mkConj</CODE></TD>+<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#Number">Number</A> <CODE>-></CODE> <A HREF="#Conj" TITLE="Conj - conjunction">Conj</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>mkConj</CODE></TD>+<TD><CODE>Str</CODE> <CODE>-></CODE> <CODE>Str</CODE> <CODE>-></CODE> <A HREF="#Conj" TITLE="Conj - conjunction">Conj</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>mkConj</CODE></TD>+<TD><CODE>Str</CODE> <CODE>-></CODE> <CODE>Str</CODE> <CODE>-></CODE> <A HREF="#Number">Number</A> <CODE>-></CODE> <A HREF="#Conj" TITLE="Conj - conjunction">Conj</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>mk2Conj</CODE></TD>+<TD><CODE>Str</CODE> <CODE>-></CODE> <CODE>Str</CODE> <CODE>-></CODE> <A HREF="#Number">Number</A> <CODE>-></CODE> <A HREF="#Conj" TITLE="Conj - conjunction">Conj</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>mkVS</CODE></TD>+<TD><A HREF="#V" TITLE="V - one-place verb">V</A> <CODE>-></CODE> <CODE>VS;</CODE></TD>+<TD><I>e.g drna</I></TD>+</TR>+<TR>+<TD><CODE>mkVV</CODE></TD>+<TD><A HREF="#V" TITLE="V - one-place verb">V</A> <CODE>-></CODE> <A HREF="#VV" TITLE="VV - verb-phrase-complement verb">VV</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>mkAdA</CODE></TD>+<TD><CODE>Str</CODE> <CODE>-></CODE> <A HREF="#AdA" TITLE="AdA - adjective-modifying adverb">AdA</A></TD>+<TD><I>-</I></TD>+</TR>+<TR>+<TD><CODE>mkVQ</CODE></TD>+<TD><A HREF="#V" TITLE="V - one-place verb">V</A> <CODE>-></CODE> <A HREF="#VQ" TITLE="VQ - question-complement verb">VQ</A></TD>+<TD><I>e.g janna</I></TD>+</TR>+</TABLE>++<A NAME="toc107"></A>+<H1>Additional Libraries</H1>++<A NAME="toc108"></A>+<H2>The Prelude module</H2>++<P>+The <CODE>Prelude</CODE> defines commonly used utility functions, in particular for+strings and booleans.+</P>++<TABLE BORDER="1" CELLPADDING="4">+<TR>+<TH>Oper</TH>+<TH>Type</TH>+<TH COLSPAN="2">Explanation</TH>+</TR>+<TR>+<TD><CODE>SS</CODE></TD>+<TD><CODE>Type</CODE></TD>+<TD>the type <CODE>{s : Str}</CODE></TD>+</TR>+<TR>+<TD><CODE>ss</CODE></TD>+<TD><CODE>Str -> SS</CODE></TD>+<TD>record from string</TD>+</TR>+<TR>+<TD><CODE>nonExist</CODE></TD>+<TD><CODE>Str</CODE></TD>+<TD>missing form</TD>+</TR>+<TR>+<TD><CODE>optStr</CODE></TD>+<TD><CODE>Str -> Str</CODE></TD>+<TD>optional string</TD>+</TR>+<TR>+<TD><CODE>bothWays</CODE></TD>+<TD><CODE>(x,y : Str) -> Str</CODE></TD>+<TD>either <CODE>x ++ y</CODE> or <CODE>y ++ x</CODE></TD>+</TR>+<TR>+<TD><CODE>Bool</CODE></TD>+<TD><CODE>PType</CODE></TD>+<TD>values <CODE>True</CODE> and <CODE>False</CODE></TD>+</TR>+<TR>+<TD><CODE>andB</CODE></TD>+<TD><CODE>(_,_ : Bool) -> Bool</CODE></TD>+<TD>conjunction</TD>+</TR>+<TR>+<TD><CODE>orB</CODE></TD>+<TD><CODE>(_,_ : Bool) -> Bool</CODE></TD>+<TD>disjunction</TD>+</TR>+<TR>+<TD><CODE>notB</CODE></TD>+<TD><CODE>Bool -> Bool</CODE></TD>+<TD>negation</TD>+</TR>+<TR>+<TD><CODE>if_then_else</CODE></TD>+<TD><CODE>(A:Type)->Bool->A->A->A</CODE></TD>+<TD>conditional</TD>+</TR>+<TR>+<TD><CODE>init</CODE></TD>+<TD><CODE>Str -> Str</CODE></TD>+<TD>drop last character</TD>+</TR>+<TR>+<TD><CODE>last</CODE></TD>+<TD><CODE>Str -> Str</CODE></TD>+<TD>return last character</TD>+</TR>+<TR>+<TD><CODE>glue</CODE></TD>+<TD><CODE>Str -> Str -> Str</CODE></TD>+<TD>glue tokens together</TD>+</TR>+</TABLE>++<A NAME="toc109"></A>+<H2>The Predefined module</H2>++<P>+These functions are hard-coded in GF. They are available without explicit opening, by the used of qualified names, e.g. <CODE>Predef.tk</CODE>.+</P>++<TABLE BORDER="1" CELLPADDING="4">+<TR>+<TH>operation</TH>+<TH>type</TH>+<TH COLSPAN="2">explanation</TH>+</TR>+<TR>+<TD><CODE>PBool</CODE></TD>+<TD><CODE>PType</CODE></TD>+<TD><CODE>PTrue | PFalse</CODE></TD>+</TR>+<TR>+<TD><CODE>Error</CODE></TD>+<TD><CODE>Type</CODE></TD>+<TD>the empty type</TD>+</TR>+<TR>+<TD><CODE>Integer</CODE></TD>+<TD><CODE>Type</CODE></TD>+<TD>the type of integers</TD>+</TR>+<TR>+<TD><CODE>Ints</CODE></TD>+<TD><CODE>Integer -> Type</CODE></TD>+<TD>integers from 0 to n</TD>+</TR>+<TR>+<TD><CODE>error</CODE></TD>+<TD><CODE>Str -> Error</CODE></TD>+<TD>forms error message</TD>+</TR>+<TR>+<TD><CODE>length</CODE></TD>+<TD><CODE>Str -> Int</CODE></TD>+<TD>length of string</TD>+</TR>+<TR>+<TD><CODE>drop</CODE></TD>+<TD><CODE>Integer -> Str -> Str</CODE></TD>+<TD>drop prefix of length</TD>+</TR>+<TR>+<TD><CODE>take</CODE></TD>+<TD><CODE>Integer -> Str -> Str</CODE></TD>+<TD>take prefix of length</TD>+</TR>+<TR>+<TD><CODE>tk</CODE></TD>+<TD><CODE>Integer -> Str -> Str</CODE></TD>+<TD>drop suffix of length</TD>+</TR>+<TR>+<TD><CODE>dp</CODE></TD>+<TD><CODE>Integer -> Str -> Str</CODE></TD>+<TD>take suffix of length</TD>+</TR>+<TR>+<TD><CODE>eqInt</CODE></TD>+<TD><CODE>Integer -> Integer -> PBool</CODE></TD>+<TD>test if equal integers</TD>+</TR>+<TR>+<TD><CODE>lessInt</CODE></TD>+<TD><CODE>Integer -> Integer -> PBool</CODE></TD>+<TD>test order of integers</TD>+</TR>+<TR>+<TD><CODE>plus</CODE></TD>+<TD><CODE>Integer -> Integer -> Integer</CODE></TD>+<TD>add integers</TD>+</TR>+<TR>+<TD><CODE>eqStr</CODE></TD>+<TD><CODE>Str -> Str -> PBool</CODE></TD>+<TD>test if equal strings</TD>+</TR>+<TR>+<TD><CODE>occur</CODE></TD>+<TD><CODE>Str -> Str -> PBool</CODE></TD>+<TD>test if occurs as substring</TD>+</TR>+<TR>+<TD><CODE>occurs</CODE></TD>+<TD><CODE>Str -> Str -> PBool</CODE></TD>+<TD>test if any char occurs</TD>+</TR>+<TR>+<TD><CODE>show</CODE></TD>+<TD><CODE>(P : Type) -> P -> Str</CODE></TD>+<TD>convert param to string</TD>+</TR>+<TR>+<TD><CODE>toStr</CODE></TD>+<TD><CODE>(L : Type) -> L -> Str</CODE></TD>+<TD>find the "first" string</TD>+</TR>+</TABLE>++<A NAME="toc110"></A>+<H2>The Formal module</H2>++<P>+This module is used for defining formal languages, in particular ones that+use precedence levels and parentheses for grouping subexpressions.+</P>++<TABLE BORDER="1" CELLPADDING="4">+<TR>+<TH>Oper</TH>+<TH>Type</TH>+<TH COLSPAN="2">Explanation</TH>+</TR>+<TR>+<TD><CODE>Prec</CODE></TD>+<TD><CODE>PType</CODE></TD>+<TD>precedence levels 0..4</TD>+</TR>+<TR>+<TD><CODE>TermPrec</CODE></TD>+<TD><CODE>Type</CODE></TD>+<TD>string with precedence</TD>+</TR>+<TR>+<TD><CODE>mkPrec</CODE></TD>+<TD><CODE>Prec -> Str -> TermPrec</CODE></TD>+<TD>construct a <CODE>TermPrec</CODE></TD>+</TR>+<TR>+<TD><CODE>top</CODE></TD>+<TD><CODE>TermPrec -> Str</CODE></TD>+<TD>top term (lowest prec.)</TD>+</TR>+<TR>+<TD><CODE>constant</CODE></TD>+<TD><CODE>Str -> TermPrec</CODE></TD>+<TD>atomic (highest prec.)</TD>+</TR>+<TR>+<TD><CODE>infixl</CODE></TD>+<TD><CODE>Prec->Str->(_,_:TermPrec)->TermPrec</CODE></TD>+<TD>left-assoc. infix</TD>+</TR>+<TR>+<TD><CODE>infixr</CODE></TD>+<TD><CODE>Prec->Str->(_,_:TermPrec)->TermPrec</CODE></TD>+<TD>right-assoc. infix</TD>+</TR>+<TR>+<TD><CODE>infixn</CODE></TD>+<TD><CODE>Prec->Str->(_,_:TermPrec)->TermPrec</CODE></TD>+<TD>non-assoc. infix</TD>+</TR>+<TR>+<TD><CODE>usePrec</CODE></TD>+<TD><CODE>Prec -> TermPrec -> Str</CODE></TD>+<TD>use term on given level</TD>+</TR>+</TABLE>++<A NAME="toc111"></A>+<H2>The Symbolic module</H2>++<P>+This module is used for embedding symbolic notation in natural-language+text constructed by the resource grammar API. It works for all resource+languages.+</P>++<TABLE BORDER="1" CELLPADDING="4">+<TR>+<TH>Function</TH>+<TH>Type</TH>+<TH COLSPAN="2">Example</TH>+</TR>+<TR>+<TD><CODE>symb</CODE></TD>+<TD><CODE>Str -> NP</CODE></TD>+<TD ALIGN="right"><I>x</I></TD>+</TR>+<TR>+<TD><CODE>symb</CODE></TD>+<TD><CODE>Int -> NP</CODE></TD>+<TD ALIGN="right"><I>23</I></TD>+</TR>+<TR>+<TD><CODE>symb</CODE></TD>+<TD><CODE>Float -> NP</CODE></TD>+<TD ALIGN="right"><I>0.99</I></TD>+</TR>+<TR>+<TD><CODE>symb</CODE></TD>+<TD><CODE>CN -> Numeral -> NP</CODE></TD>+<TD ALIGN="right"><I>level four</I></TD>+</TR>+<TR>+<TD><CODE>symb</CODE></TD>+<TD><CODE>Det -> N+ -> Numeral -> NP</CODE></TD>+<TD ALIGN="right"><I>the level four</I></TD>+</TR>+<TR>+<TD><CODE>symb</CODE></TD>+<TD><CODE>Det -> CN -> [Symb] -> NP</CODE></TD>+<TD ALIGN="right"><I>the levels i, j and k</I></TD>+</TR>+<TR>+<TD><CODE>symb</CODE></TD>+<TD><CODE>Symb -> S</CODE></TD>+<TD ALIGN="right"><I>A</I> (formula)</TD>+</TR>+<TR>+<TD><CODE>symb</CODE></TD>+<TD><CODE>Symb -> Card</CODE></TD>+<TD ALIGN="right"><I>n</I> (number)</TD>+</TR>+<TR>+<TD><CODE>mkSymb</CODE></TD>+<TD><CODE>Str -> Symb</CODE></TD>+<TD ALIGN="right"><I>x</I></TD>+</TR>+</TABLE>++<A NAME="toc112"></A>+<H2>The Combinators module</H2>++<P>+This module gives shortcuts for defining predicates (<CODE>pred</CODE>) and function +expressions (<CODE>app</CODE>). It works for all resource languages.+</P>++<TABLE BORDER="1" CELLPADDING="4">+<TR>+<TH>Function</TH>+<TH>Type</TH>+<TH COLSPAN="2">Example</TH>+</TR>+<TR>+<TD><CODE>pred</CODE></TD>+<TD><CODE>V -> NP -> Cl</CODE></TD>+<TD ALIGN="right"><I>x converges</I></TD>+</TR>+<TR>+<TD><CODE>pred</CODE></TD>+<TD><CODE>V2 -> NP -> NP -> Cl</CODE></TD>+<TD ALIGN="right"><I>x intersects y</I></TD>+</TR>+<TR>+<TD><CODE>pred</CODE></TD>+<TD><CODE>V -> NP -> NP -> Cl</CODE></TD>+<TD ALIGN="right"><I>x and y intersect</I></TD>+</TR>+<TR>+<TD><CODE>pred</CODE></TD>+<TD><CODE>A -> NP -> Cl</CODE></TD>+<TD ALIGN="right"><I>x is even</I></TD>+</TR>+<TR>+<TD><CODE>pred</CODE></TD>+<TD><CODE>A2 -> NP -> NP -> Cl</CODE></TD>+<TD ALIGN="right"><I>x is divisible by y</I></TD>+</TR>+<TR>+<TD><CODE>pred</CODE></TD>+<TD><CODE>A -> NP -> NP -> Cl</CODE></TD>+<TD ALIGN="right"><I>x and y are equal</I></TD>+</TR>+<TR>+<TD><CODE>pred</CODE></TD>+<TD><CODE>N -> NP -> Cl</CODE></TD>+<TD ALIGN="right"><I>x is a maximum</I></TD>+</TR>+<TR>+<TD><CODE>pred</CODE></TD>+<TD><CODE>N -> NP -> NP -> Cl</CODE></TD>+<TD ALIGN="center"><I>x and y are inverses</I></TD>+</TR>+<TR>+<TD><CODE>pred</CODE></TD>+<TD><CODE>Adv -> NP -> Cl</CODE></TD>+<TD ALIGN="right"><I>x is in scope</I></TD>+</TR>+<TR>+<TD><CODE>pred</CODE></TD>+<TD><CODE>Prep -> NP -> NP -> Cl</CODE></TD>+<TD ALIGN="right"><I>x is outside y</I></TD>+</TR>+<TR>+<TD><CODE>app</CODE></TD>+<TD><CODE>N -> NP</CODE></TD>+<TD ALIGN="right"><I>the bottom</I></TD>+</TR>+<TR>+<TD><CODE>app</CODE></TD>+<TD><CODE>N2 -> NP -> NP</CODE></TD>+<TD ALIGN="right"><I>the successor of x</I></TD>+</TR>+<TR>+<TD><CODE>app</CODE></TD>+<TD><CODE>N3 -> NP -> NP -> NP</CODE></TD>+<TD ALIGN="right"><I>the distance from x to y</I></TD>+</TR>+<TR>+<TD><CODE>app</CODE></TD>+<TD><CODE>N2 -> NP -> NP -> NP</CODE></TD>+<TD ALIGN="right"><I>the sum of x and y</I></TD>+</TR>+<TR>+<TD><CODE>app</CODE></TD>+<TD><CODE>N2 -> N -> CN</CODE></TD>+<TD ALIGN="right"><I>set of integers</I></TD>+</TR>+<TR>+<TD><CODE>app</CODE></TD>+<TD><CODE>N2 -> NP -> CN</CODE></TD>+<TD ALIGN="right"><I>divisor of x</I></TD>+</TR>+<TR>+<TD><CODE>app</CODE></TD>+<TD><CODE>N3 -> NP -> NP -> CN</CODE></TD>+<TD ALIGN="right"><I>path from x to y</I></TD>+</TR>+<TR>+<TD><CODE>app</CODE></TD>+<TD><CODE>N2 -> NP -> NP -> CN</CODE></TD>+<TD ALIGN="right"><I>path between x and y</I></TD>+</TR>+</TABLE>++<A NAME="toc113"></A>+<H1>Browsing the libraries with GF commands</H1>++<P>+<B>New</B>: Browsing by syntax editor +<A HREF="../../../demos/resource-api/editor.html">directly on the web</A>.+</P>+<P>+All of the following assume that+<CODE>GF_LIB_PATH</CODE> points to the directory <CODE>GF/lib</CODE> with compiled libraries.+</P>+<P>+To try out inflection paradigms:+</P>++<PRE>+ > i -retain alltenses/ParadigmsGer.gfo+ > cc mkN "Farbe"+</PRE>++<P>+To try out overloaded syntax, test lexicon, and inflection paradigms:+</P>++<PRE>+ > i -retain alltenses/TryGer.gfo+ > cc mkCl (mkNP this_Quant (mkN "Farbe")) (mkA "dunkel")+</PRE>++<A NAME="toc114"></A>+<H1>An Example of Usage</H1>++<P>+The standard way of building an application has the following modules.+</P>+<P>+An abstract syntax:+</P>++<PRE>+ abstract Music = { + cat + Kind, + Property ;+ fun + PropKind : Kind -> Property -> Kind ; + Song : Kind ;+ American : Property ;+ }+</PRE>++<P>+A domain lexicon interface:+</P>++<PRE>+ interface LexMusic = open Cat in {+ oper+ song_N : N ;+ american_A : A ;+ }+</PRE>++<P>+A functor on <CODE>Syntax</CODE> and the domain lexicon interface:+</P>++<PRE>+ 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 ;+ }+</PRE>++<P>+For each language, an instance of the domain lexicon:+</P>++<PRE>+ instance LexMusicGer of LexMusic = CatGer ** open ParadigmsGer in { + oper+ song_N = mkN "Lied" "Lieder" neuter ;+ american_A = mkA "amerikanisch" ;+ }+</PRE>++<P>+For each language, an instantiation of the functor:+</P>++<PRE>+ --# -path=.:present:prelude+ + concrete MusicGer of Music = MusicI with+ (Syntax = SyntaxGer),+ (LexMusic = LexMusicGer) ;+</PRE>++<A NAME="toc115"></A>+<H1>Table of Contents</H1>+++ <UL>+ <LI><A HREF="#toc1">Introduction</A>+ <LI><A HREF="#toc2">Categories</A>+ <UL>+ <LI><A HREF="#toc3">A hierarchic view</A>+ <LI><A HREF="#toc4">Explanations</A>+ </UL>+ <LI><A HREF="#toc5">Syntax Rules and Structural Words</A>+ <UL>+ <LI><A HREF="#A" TITLE="A - one-place adjective">A - one-place adjective</A>+ <LI><A HREF="#A2" TITLE="A2 - two-place adjective">A2 - two-place adjective</A>+ <LI><A HREF="#AP" TITLE="AP - adjectival phrase">AP - adjectival phrase</A>+ <LI><A HREF="#AdA" TITLE="AdA - adjective-modifying adverb">AdA - adjective-modifying adverb</A>+ <LI><A HREF="#AdN" TITLE="AdN - numeral-modifying adverb">AdN - numeral-modifying adverb</A>+ <LI><A HREF="#AdV" TITLE="Adv - verb-phrase-modifying adverb">AdV - adverb directly attached to verb</A>+ <LI><A HREF="#Adv" TITLE="Adv - verb-phrase-modifying adverb">Adv - verb-phrase-modifying adverb</A>+ <LI><A HREF="#Ant" TITLE="Ant - anteriority">Ant - anteriority</A>+ <LI><A HREF="#CAdv" TITLE="CAdv - comparative adverb">CAdv - comparative adverb</A>+ <LI><A HREF="#CN" TITLE="CN - common noun (without determiner)">CN - common noun (without determiner)</A>+ <LI><A HREF="#Card" TITLE="Card - cardinal number">Card - cardinal number</A>+ <LI><A HREF="#Cl" TITLE="Cl - declarative clause, with all tenses">Cl - declarative clause, with all tenses</A>+ <LI><A HREF="#ClSlash">ClSlash</A>+ <LI><A HREF="#Comp" TITLE="Comp - complement of copula, such as AP">Comp - complement of copula, such as AP</A>+ <LI><A HREF="#Conj" TITLE="Conj - conjunction">Conj - conjunction</A>+ <LI><A HREF="#Det" TITLE="Det - determiner phrase">Det - determiner phrase</A>+ <LI><A HREF="#Dig">Dig</A>+ <LI><A HREF="#Digits" TITLE="Digits - cardinal or ordinal in digits">Digits - cardinal or ordinal in digits</A>+ <LI><A HREF="#IAdv" TITLE="IAdv - interrogative adverb">IAdv - interrogative adverb</A>+ <LI><A HREF="#IComp" TITLE="IComp - interrogative complement of copula">IComp - interrogative complement of copula</A>+ <LI><A HREF="#IDet" TITLE="IDet - interrogative determiner">IDet - interrogative determiner</A>+ <LI><A HREF="#IP" TITLE="IP - interrogative pronoun">IP - interrogative pronoun</A>+ <LI><A HREF="#IQuant">IQuant</A>+ <LI><A HREF="#Imp" TITLE="Imp - imperative">Imp - imperative</A>+ <LI><A HREF="#ImpForm">ImpForm</A>+ <LI><A HREF="#Interj" TITLE="Interj - interjection">Interj - interjection</A>+ <LI><A HREF="#ListAP">ListAP</A>+ <LI><A HREF="#ListAdv">ListAdv</A>+ <LI><A HREF="#ListNP">ListNP</A>+ <LI><A HREF="#ListRS">ListRS</A>+ <LI><A HREF="#ListS">ListS</A>+ <LI><A HREF="#N" TITLE="N - common noun">N - common noun</A>+ <LI><A HREF="#N2" TITLE="N2 - relational noun">N2 - relational noun</A>+ <LI><A HREF="#N3" TITLE="N3 - three-place relational noun">N3 - three-place relational noun</A>+ <LI><A HREF="#NP" TITLE="NP - noun phrase (subject or object)">NP - noun phrase (subject or object)</A>+ <LI><A HREF="#Num" TITLE="Num - number determining element">Num - number determining element</A>+ <LI><A HREF="#Numeral" TITLE="Numeral - cardinal or ordinal in words">Numeral - cardinal or ordinal in words</A>+ <LI><A HREF="#Ord" TITLE="Ord - ordinal number (used in Det)">Ord - ordinal number (used in Det)</A>+ <LI><A HREF="#PConj" TITLE="PConj - phrase-beginning conjunction">PConj - phrase-beginning conjunction</A>+ <LI><A HREF="#PN" TITLE="PN - proper name">PN - proper name</A>+ <LI><A HREF="#Phr" TITLE="Phr - phrase in a text">Phr - phrase in a text</A>+ <LI><A HREF="#Pol" TITLE="Pol - polarity">Pol - polarity</A>+ <LI><A HREF="#Predet" TITLE="Predet - predeterminer (prefixed Quant)">Predet - predeterminer (prefixed Quant)</A>+ <LI><A HREF="#Prep" TITLE="Prep - preposition, or just case">Prep - preposition, or just case</A>+ <LI><A HREF="#Pron" TITLE="Pron - personal pronoun">Pron - personal pronoun</A>+ <LI><A HREF="#Punct">Punct</A>+ <LI><A HREF="#QCl" TITLE="QCl - question clause, with all tenses">QCl - question clause, with all tenses</A>+ <LI><A HREF="#QS" TITLE="QS - question">QS - question</A>+ <LI><A 'HREF="#Quant" TITLE="Quant - quantifier ('nucleus' of Det)"'>Quant - quantifier ('nucleus' of Det)</A>+ <LI><A HREF="#RCl" TITLE="RCl - relative clause, with all tenses">RCl - relative clause, with all tenses</A>+ <LI><A HREF="#RP" TITLE="RP - relative pronoun">RP - relative pronoun</A>+ <LI><A HREF="#RS" TITLE="RS - relative">RS - relative</A>+ <LI><A HREF="#S" TITLE="S - declarative sentence">S - declarative sentence</A>+ <LI><A HREF="#SC" TITLE="SC - embedded sentence or question">SC - embedded sentence or question</A>+ <LI><A HREF="#SSlash">SSlash</A>+ <LI><A HREF="#Sub100">Sub100</A>+ <LI><A HREF="#Sub1000">Sub1000</A>+ <LI><A HREF="#Subj" TITLE="Subj - subjunction">Subj - subjunction</A>+ <LI><A HREF="#Temp" TITLE="Temp - temporal and aspectual features">Temp - temporal and aspectual features</A>+ <LI><A HREF="#Tense" TITLE="Tense - tense">Tense - tense</A>+ <LI><A HREF="#Text" TITLE="Text - text consisting of several phrases">Text - text consisting of several phrases</A>+ <LI><A HREF="#Unit">Unit</A>+ <LI><A HREF="#Utt" TITLE="Utt - sentence, question, word...">Utt - sentence, question, word...</A>+ <LI><A HREF="#V" TITLE="V - one-place verb">V - one-place verb</A>+ <LI><A HREF="#V2" TITLE="V2 - two-place verb">V2 - two-place verb</A>+ <LI><A HREF="#V2A" TITLE="V2A - verb with NP and AP complement">V2A - verb with NP and AP complement</A>+ <LI><A HREF="#V2Q" TITLE="V2Q - verb with NP and Q complement">V2Q - verb with NP and Q complement</A>+ <LI><A HREF="#V2S" TITLE="V2S - verb with NP and S complement">V2S - verb with NP and S complement</A>+ <LI><A HREF="#V2V" TITLE="V2V - verb with NP and V complement">V2V - verb with NP and V complement</A>+ <LI><A HREF="#V3" TITLE="V3 - three-place verb">V3 - three-place verb</A>+ <LI><A HREF="#VA" TITLE="VA - adjective-complement verb">VA - adjective-complement verb</A>+ <LI><A HREF="#VP" TITLE="VP - verb phrase">VP - verb phrase</A>+ <LI><A HREF="#VPSlash" TITLE="VPSlash - verb phrase missing complement">VPSlash - verb phrase missing complement</A>+ <LI><A HREF="#VQ" TITLE="VQ - question-complement verb">VQ - question-complement verb</A>+ <LI><A HREF="#VS" TITLE="VS - sentence-complement verb">VS - sentence-complement verb</A>+ <LI><A HREF="#VV" TITLE="VV - verb-phrase-complement verb">VV - verb-phrase-complement verb</A>+ <LI><A HREF="#Voc" TITLE="Voc - vocative or "please"">Voc - vocative or "please"</A>+ </UL>+ <LI><A HREF="#toc83">Lexical Paradigms</A>+ <UL>+ <LI><A HREF="#toc84">Paradigms for Afrikaans</A>+ <LI><A HREF="#toc85">Paradigms for Bulgarian</A>+ <LI><A HREF="#toc86">Paradigms for Catalan</A>+ <LI><A HREF="#toc87">Paradigms for Danish</A>+ <LI><A HREF="#toc88">Paradigms for Dutch</A>+ <LI><A HREF="#toc89">Paradigms for English</A>+ <LI><A HREF="#toc90">Paradigms for Finnish</A>+ <LI><A HREF="#toc91">Paradigms for French</A>+ <LI><A HREF="#toc92">Paradigms for German</A>+ <LI><A HREF="#toc93">Paradigms for Hindi</A>+ <LI><A HREF="#toc94">Paradigms for Italian</A>+ <LI><A HREF="#toc95">Paradigms for Latvian</A>+ <LI><A HREF="#toc96">Paradigms for Nepali</A>+ <LI><A HREF="#toc97">Paradigms for Norwegian</A>+ <LI><A HREF="#toc98">Paradigms for Polish</A>+ <LI><A HREF="#toc99">Paradigms for Punjabi</A>+ <LI><A HREF="#toc100">Paradigms for Romanian</A>+ <LI><A HREF="#toc101">Paradigms for Russian</A>+ <LI><A HREF="#toc102">Paradigms for Sindhi</A>+ <LI><A HREF="#toc103">Paradigms for Spanish</A>+ <LI><A HREF="#toc104">Paradigms for Swedish</A>+ <LI><A HREF="#toc105">Paradigms for Thai</A>+ <LI><A HREF="#toc106">Paradigms for Urdu</A>+ </UL>+ <LI><A HREF="#toc107">Additional Libraries</A>+ <UL>+ <LI><A HREF="#toc108">The Prelude module</A>+ <LI><A HREF="#toc109">The Predefined module</A>+ <LI><A HREF="#toc110">The Formal module</A>+ <LI><A HREF="#toc111">The Symbolic module</A>+ <LI><A HREF="#toc112">The Combinators module</A>+ </UL>+ <LI><A HREF="#toc113">Browsing the libraries with GF commands</A>+ <LI><A HREF="#toc114">An Example of Usage</A>+ <LI><A HREF="#toc115">Table of Contents</A> </UL> <!-- html code generated by txt2tags 2.6 (http://txt2tags.org) -->
@@ -8,12 +8,12 @@ import System.Exit -- Make commands for compiling and testing resource grammars.--- usage: runghc Make ((present? OPT?) | (clone FILE))? LANGS? --- where +-- usage: runghc Make (((present|alltenses)? OPT?) | (clone FILE))? LANGS?+-- where -- - OPT = (lang | api | pgf | test | parse | clean | clone) -- - LANGS has the form e.g. langs=Eng,Fin,Rus -- - clone with a flag file=FILENAME clones the file to the specified languages,--- by replacing the 3-letter language name of the original in both +-- by replacing the 3-letter language name of the original in both -- the filename and the body -- with each name in the list (default: all languages) -- With no argument, lang and api are done, in this order.@@ -21,12 +21,12 @@ default_gf = "../../dist/build/gf/gf" -presApiPath = "-path=api:present"+presApiPath = "-path=api:present:../present" presSymbolPath = "" -- "-path=.:abstract:present:common:romance:scandinavian" ---- -- the languages have long directory names and short ISO codes (3 letters) -- we also give the functors implied- + langsCoding = [ (("afrikaans","Afr"),""), (("amharic", "Amh"),""),@@ -43,6 +43,7 @@ (("interlingua","Ina"),""), (("italian", "Ita"),"Romance"), (("latin", "Lat"),""),+ (("latvian", "Lav"),""), (("nepali", "Nep"),""), (("norwegian","Nor"),"Scand"), (("persian", "Pes"),""),@@ -50,9 +51,11 @@ (("punjabi", "Pnb"),""), (("romanian", "Ron"),""), (("russian", "Rus"),""),+ (("sindhi", "Snd"),""), (("spanish", "Spa"),"Romance"),- (("swedish", "Swe"),"Scand"), + (("swedish", "Swe"),"Scand"), (("thai", "Tha"),""),+ (("thai", "Thb"),""), -- Thai pronunciation (("turkish", "Tur"),""), (("urdu", "Urd"),"Hindustani") ]@@ -65,28 +68,28 @@ langsLangAll = langs -- languagues that are almost complete and for which Lang is normally compiled-langsLang = langs `except` langsIncomplete ---- []+langsLang = langs `except` langsIncomplete -- languagues that have notpresent marked-langsPresent = langsLang `except` ["Nep","Pes"]+langsPresent = langsLang `except` ["Nep","Pes","Snd","Tha"] -- languages for which Lang can be compiled but which are incomplete-langsIncomplete = ["Amh","Ara","Hin","Lat","Tha","Tur"]+langsIncomplete = ["Amh","Ara","Lat","Tur"] --- languages for which to compile Try +-- languages for which to compile Try langsAPI = langsLang `except` langsIncomplete -- languages for which to compile Symbolic-langsSymbolic = langsLang `except` (langsIncomplete ++ ["Afr","Ina","Nep","Pes","Pnb","Rus"])+langsSymbolic = langsLang `except` (langsIncomplete ++ ["Afr","Ina","Nep","Pes","Pnb","Rus", "Snd"]) -- languages for which to compile minimal Syntax langsMinimal = langs `only` ["Ara","Eng","Bul","Rus"] -- languages for which to run treebank test-langsTest = langsLang `except` ["Ara","Bul","Cat","Hin","Rus","Spa","Tha"]+langsTest = langsLang `except` ["Ara","Bul","Cat","Hin","Lav","Rus","Spa","Tha"] -- languages for which to run demo test-langsDemo = langsLang `except` ["Ara","Hin","Ina","Lat","Tha"]+langsDemo = langsLang `except` ["Ara","Hin","Ina","Lat","Lav","Tha"] -- languages for which to compile parsing grammars langsParse = langs `only` ["Eng"]@@ -95,7 +98,7 @@ langsPGF = langsTest `only` ["Eng","Fre","Swe"] -- languages for which Compatibility exists (to be extended)-langsCompat = langsLang `only` ["Cat","Eng","Fin","Fre","Ita","Spa","Swe"]+langsCompat = langsLang `only` ["Cat","Eng","Fin","Fre","Ita","Lav","Spa","Swe"] treebankExx = "exx-resource.gft" treebankResults = "exx-resource.gftb"@@ -106,15 +109,21 @@ make :: [String] -> IO () make xx = do- let ifx opt act = if null xx || elem opt xx then act >> return () else return () - let ifxx opt act = if elem opt xx then act >> return () else return () - let pres = elem "present" xx- let dir = if pres then "../present" else "../alltenses"- + let ifx opt act = if null xx || elem opt xx then act >> return () else return ()+ let ifxx opt act = if elem opt xx then act >> return () else return ()+ let pres+ | elem "present" xx = 1+ | elem "alltenses" xx = 2+ | otherwise = 0+ let dir = case pres of+ 1 -> "../present"+ 2 -> "../alltenses"+ _ -> "../full"+ let optl ls = maybe ls id $ getOptLangs xx ifx "lang" $ do- let lans = optl $ if pres then langsPresent else langsLang+ let lans = optl $ if (pres == 1) then langsPresent else langsLang mapM_ (gfc pres [] . lang) lans mapM_ (gfc pres presSymbolPath . symbol) lans ---- (optl langsAPI) copyl lans "*.gfo" dir@@ -142,12 +151,12 @@ ++ [dir ++ "/Lang" ++ la ++ ".gfo" | (_,la) <- optl langsPGF] ifxx "test" $ do let ls = optl langsTest- gf (treeb "Lang" ls) $ unwords [dir ++ "/Lang" ++ la ++ ".gfo" | (_,la) <- ls] + gf (treeb "Lang" ls) $ unwords [dir ++ "/Lang" ++ la ++ ".gfo" | (_,la) <- ls] ifxx "parse" $ do mapM_ (gfc pres [] . parse) (optl langsParse) copy "parse/*.gfo parse/oald/*.gfo" dir ifxx "clean" $ do- system "rm -f */*.gfo ../alltenses/*.gfo ../present/*.gfo"+ system "rm -f */*.gfo ../alltenses/*.gfo ../present/*.gfo ../prelude/*.gfo ../full/*.gfo" ifxx "clone" $ do let (pref,lang) = case getLangName xx of Just pl -> pl@@ -156,12 +165,16 @@ mapM_ (\la -> writeFile (pref ++ la ++ ".gf") (replaceLang lang la s)) (map snd (optl langs)) return () +-- pres = 0 (full), 1 (present), 2 (alltenses) gfc pres ppath file = do- let preproc = if pres then "-preproc=mkPresent" else ""- let path = if pres then ppath else ""+ let preproc = if (pres==1) then "-preproc=mkPresent" else ""+ let path = if (pres==1) then ppath else "" putStrLn $ "Compiling " ++ file- run_gfc ["-s","-src",preproc, path, file]+ if pres == 0+ then run_gfc ["-s","-src",preproc, path, file]+ else run_gfc ["-s","-src","-no-pmcfg",preproc, path, file] + gfcmin path file = do let preproc = "-preproc=mkMinimal" putStrLn $ "Compiling minimal " ++ file@@ -173,10 +186,10 @@ putStrLn cmd system cmd -treeb abstr ls = "rf -lines -tree -file=" ++ treebankExx ++ +treeb abstr ls = "rf -lines -tree -file=" ++ treebankExx ++ " | l -treebank " ++ unlexer abstr ls ++ " | wf -file=" ++ treebankResults -demos abstr ls = "gr -number=100 | l -treebank " ++ unlexer abstr ls ++ +demos abstr ls = "gr -number=100 | l -treebank " ++ unlexer abstr ls ++ " | ps -to_html | wf -file=resdemo.html" lang (lla,la) = lla ++ "/All" ++ la ++ ".gf"@@ -202,7 +215,7 @@ -- the file name has the form p....pLLL.gf, i.e. 3-letter lang name, suffix .gf getLangName args = case [ls | a <- args, let (f,ls) = splitAt 5 a, f=="file="] of- fi:_ -> let (nal,ferp) = splitAt 3 (drop 3 (reverse fi)) in return (reverse ferp,reverse nal) + fi:_ -> let (nal,ferp) = splitAt 3 (drop 3 (reverse fi)) in return (reverse ferp,reverse nal) _ -> Nothing replaceLang s1 s2 = repl where@@ -213,19 +226,19 @@ _ -> s lgs = 3 -- length s1 -unlexer abstr ls = - "-unlexer=\\\"" ++ unwords - [abstr ++ la ++ "=" ++ unl | - lla@(_,la) <- ls, let unl = unlex lla, not (null unl)] ++ +unlexer abstr ls =+ "-unlexer=\\\"" ++ unwords+ [abstr ++ la ++ "=" ++ unl |+ lla@(_,la) <- ls, let unl = unlex lla, not (null unl)] ++ "\\\"" where unlex lla = maybe "" id $ lookup lla langsCoding -- | Runs the gf executable in compile mode with the given arguments. run_gfc :: [String] -> IO ()-run_gfc args = +run_gfc args = do let args' = ["-batch"] ++ filter (not . null) args ++ ["+RTS"] ++ rts_flags ++ ["-RTS"]---- do let args' = ["-batch","-gf-lib-path=."] ++ filter (not . null) args ++ ["+RTS"] ++ rts_flags ++ ["-RTS"] --- why path? AR +--- do let args' = ["-batch","-gf-lib-path=."] ++ filter (not . null) args ++ ["+RTS"] ++ rts_flags ++ ["-RTS"] --- why path? AR putStrLn $ "Running: " ++ default_gf ++ " " ++ unwords (map showArg args') e <- rawSystem default_gf args' case e of@@ -235,24 +248,24 @@ showArg arg = "'" ++ arg ++ "'" copy :: String -> String -> IO ()-copy from to = +copy from to = do system $ "cp " ++ from ++ " " ++ to return () copyl :: [(String,String)] -> String -> String -> IO ()-copyl lans from to = do +copyl lans from to = do echosystem $ "cp abstract/" ++ from ++ " " ++ to echosystem $ "cp common/" ++ from ++ " " ++ to- mapM_ (\lan -> echosystem $ "cp */*" ++ lan ++ from ++ " " ++ to) + mapM_ (\lan -> echosystem $ "cp */*" ++ lan ++ from ++ " " ++ to) (map snd lans ++ concatMap implied lans) return () copyld :: [(String,String)] -> String -> String -> String -> IO ()-copyld lans dir from to = do - mapM_ (\lan -> echosystem $ "cp " ++ dir ++ lan ++ from ++ " " ++ to) +copyld lans dir from to = do+ mapM_ (\lan -> echosystem $ "cp " ++ dir ++ lan ++ from ++ " " ++ to) (map snd lans ++ if (take 3 dir == "api") then [] else concatMap implied lans) return () echosystem c = do- putStrLn c + putStrLn c system c
@@ -3,9 +3,10 @@ GF_LIB_PATH=.. -.PHONY: all present alltenses lang api math prelude test demo parse synopsis link compiled constructX clean+.PHONY: all present alltenses full lang api math prelude test demo parse synopsis link compiled constructX clean -all: link prelude constructX present alltenses+all: link prelude constructX present alltenses +#full present: $(RUNMAKE) present lang@@ -13,15 +14,22 @@ $(RUNMAKE) present symbolic alltenses: + $(RUNMAKE) alltenses lang+ $(RUNMAKE) alltenses api+ $(RUNMAKE) alltenses symbolic++full: $(RUNMAKE) lang- $(RUNMAKE) api- $(RUNMAKE) symbolic lang:- $(RUNMAKE) lang+ $(RUNMAKE) alltenses lang api:- $(RUNMAKE) api+ $(RUNMAKE) alltenses api++# thai with pronunciation+thp:+ cd thai ; runghc ThaiScript.hs ; cd .. compatibility: $(RUNMAKE) present compat
@@ -11,6 +11,7 @@ GenIP : IP -> IQuant ; -- whose GenRP : Num -> CN -> RP ; -- whose car ComplBareVS : VS -> S -> VP ; -- know you go+ CompBareCN : CN -> Comp ; -- (est) professeur StrandRelSlash : RP -> ClSlash -> RCl ; -- that he lives in EmptyRelSlash : ClSlash -> RCl ; -- he lives in
@@ -122,6 +122,8 @@ as_CAdv : CAdv ; have_V2 : V2 ;+ have_V3 : V3 ;+ have_not_V3 : V3; fun language_title_Utt : Utt ;
@@ -5,7 +5,7 @@ -- forms of sentences. Together they give 4 x 2 x 2 = 16 sentence forms. -- These tenses are defined for all languages in the library. More tenses--- can be defined in the language extensions, e.g. the "passé simple" of+-- can be defined in the language extensions, e.g. the "passe simple" of -- Romance languages in [``ExtraRomance`` ../romance/ExtraRomance.gf]. abstract Tense = Common ** {
@@ -2,6 +2,8 @@ abstract Verb = Cat ** { + flags coding = utf8 ;+ --2 Complementization rules -- Verb phrases are constructed from verbs by providing their
@@ -217,7 +217,7 @@ s = table { VInf => "het" ; VPres => "het" ; - VPast => "had" ; --# notpresent+ VPast => "het" ; --# notpresent VPerf => "gehad" } ; aux = VHebben ;@@ -297,7 +297,7 @@ oper vForm : Tense -> VForm = \t -> case t of { Pres => VPres - ; Fut => VPres --# notpresent+ ; Fut => VPres --# notpresent ; Past | Cond => VPast -- Fut and Cond affect zullen --# notpresent } ; @@ -448,12 +448,12 @@ neg = vp.a1 ! b ; obj0 = vp.n0 ! agr ; obj = vp.n2 ! agr ;- compl = obj0 ++ neg ++ obj ++ vp.a2 ++ vp.s.prefix ++ neg;+ compl = obj0 ++ neg ++ obj ++ vp.a2 ++ vp.s.prefix ; inf = case <vp.isAux, vp.inf.p2, a> of { --# notpresent <True,True,Anter> => vp.s.s ! VInf ++ vp.inf.p1 ; --# notpresent _ => --# notpresent- vp.inf.p1 ++ verb.p2+ vp.inf.p1 ++ verb.p2 ++ neg } --# notpresent ; extra = vp.ext ;@@ -480,7 +480,7 @@ < \\agr => vp.n0 ! agr ++ vp.n2 ! agr ++ vp.a2, vp.a1 ! Pos ++ - if_then_Str isAux [] "te" ++ vp.s.s ! VInf,+ if_then_Str isAux [] "om" ++ "te" ++ vp.s.s ! VInf, vp.inf.p1 ++ vp.ext > ;
@@ -0,0 +1,6 @@+--# -path=.:alltenses:prelude:../latvian++resource CombinatorsLav = Combinators with+ (Cat = CatLav),+ (Structural = StructuralLav),+ (Constructors = ConstructorsLav) ;
@@ -0,0 +1,6 @@+--# -path=.:alltenses:prelude + +resource CombinatorsSnd = Combinators with + (Cat = CatSnd), + (Structural = StructuralSnd), + (Constructors = ConstructorsSnd) ;
@@ -0,0 +1,3 @@+--# -path=.:alltenses:prelude + +resource ConstructorsHin = Constructors with (Grammar = GrammarHin) ;
@@ -0,0 +1,3 @@+--# -path=.:alltenses:prelude:../latvian++resource ConstructorsLav = Constructors with (Grammar = GrammarLav) ;
@@ -0,0 +1,3 @@+--# -path=.:alltenses:prelude + +resource ConstructorsSnd = Constructors with (Grammar = GrammarSnd) ;
@@ -0,0 +1,3 @@+--# -path=.:alltenses:prelude + +resource ConstructorsTha = Constructors with (Grammar = GrammarTha) ;
@@ -0,0 +1,5 @@+--# -path=.:present:mathematical:prelude + +resource SymbolicHin = Symbolic with + (Symbol = SymbolHin), + (Grammar = GrammarHin) ;
@@ -0,0 +1,5 @@+--# -path=.:present:mathematical:prelude:../latvian++resource SymbolicLav = Symbolic with+ (Symbol = SymbolLav),+ (Grammar = GrammarLav) ;
@@ -0,0 +1,5 @@+--# -path=.:present:mathematical:prelude + +resource SymbolicSnd = Symbolic with + (Symbol = SymbolSnd), + (Grammar = GrammarSnd) ;
@@ -0,0 +1,5 @@+--# -path=.:alltenses + +resource SymbolicTha = Symbolic with + (Symbol = SymbolTha), + (Grammar = GrammarTha) ;
@@ -0,0 +1,5 @@+--# -path=.:./alltenses:../prelude + +instance SyntaxHin of Syntax = + ConstructorsHin, CatHin, StructuralHin, CombinatorsHin ; +
@@ -0,0 +1,5 @@+--# -path=.:alltenses:prelude:../latvian++instance SyntaxLav of Syntax =+ ConstructorsLav, CatLav, StructuralLav, CombinatorsLav ;+
@@ -0,0 +1,5 @@+--# -path=.:./alltenses:../prelude + +instance SyntaxSnd of Syntax = + ConstructorsSnd, CatSnd, StructuralSnd, CombinatorsSnd ; +
@@ -0,0 +1,5 @@+--# -path=.:./alltenses:../prelude + +instance SyntaxTha of Syntax = + ConstructorsTha, CatTha, StructuralTha, CombinatorsTha ; +
@@ -0,0 +1,22 @@+--# -path=.:alltenses:prelude:/users/shafqat/www.grammaticalframework.org_4/lib/src/hindi:/users/shafqat/www.grammaticalframework.org_4/lib/src/hindustani++resource TryHin = SyntaxHin - [mkAdN] , LexiconHin, ParadigmsHin - [mkAdv,mkDet,mkIP,mkAdN,mkQuant] ** + open (P = ParadigmsHin) in {++oper++ mkAdv = overload SyntaxHin {+ mkAdv : Str -> Adv = P.mkAdv ;+ } ;++ mkAdN = overload {+ mkAdN : CAdv -> AdN = SyntaxHin.mkAdN ;+--- mkAdN : Str -> AdN = P.mkAdN ;+ } ;++-- mkOrd = overload SyntaxHin {+-- mkOrd : A -> Ord = SyntaxHin.OrdSuperl ;+-- } ;+++}
@@ -0,0 +1,22 @@+--# -path=.:alltenses:prelude:../latvian++resource TryLav = SyntaxLav-[mkAdN], LexiconLav, ParadigmsLav-[mkAdv,mkAdN,mkOrd,mkQuant] **+ open (P = ParadigmsLav) in {++oper++ mkAdv = overload SyntaxLav {+ mkAdv : Str -> Adv = P.mkAdv ;+ } ;++ mkAdN = overload {+ mkAdN : CAdv -> AdN = SyntaxLav.mkAdN ;+ mkAdN : Str -> AdN = P.mkAdN ;+ } ;++ --mkOrd = overload SyntaxLav {+ -- mkOrd : Str -> Ord = P.mkOrd ;+ --} ;+++}
@@ -0,0 +1,22 @@+--# -path=.:alltenses:prelude:/users/shafqat/www.grammaticalframework.org_4/lib/src/sindhi++resource TrySnd = SyntaxSnd - [mkAdN] , LexiconSnd, ParadigmsSnd - [mkAdv,mkDet,mkIP,mkAdN] ** + open (P = ParadigmsSnd) in {++oper++ mkAdv = overload SyntaxSnd {+ mkAdv : Str -> Adv = P.mkAdv ;+ } ;++ mkAdN = overload {+ mkAdN : CAdv -> AdN = SyntaxSnd.mkAdN ;+--- mkAdN : Str -> AdN = P.mkAdN ;+ } ;++-- mkOrd = overload SyntaxSnd {+-- mkOrd : A -> Ord = SyntaxSnd.OrdSuperl ;+-- } ;+++}
@@ -0,0 +1,12 @@+--# -path=.:alltenses++resource TryTha = SyntaxTha, LexiconTha, ParadigmsTha -[mkAdv, mkDet,mkQuant]** + open (P = ParadigmsTha) in {++-- oper++-- mkAdv = overload SyntaxTha {+-- mkAdv : Str -> Adv = P.mkAdv ;+-- } ;++}
@@ -1,6 +1,6 @@ --# -path=.:../romance:../abstract:../common:prelude concrete CatCat of Cat = - CommonX - [Temp,TTAnt,Tense,TPres,TPast,TFut,TCond] ** + CommonX - [SC,Temp,TTAnt,Tense,TPres,TPast,TFut,TCond] ** CatRomance with -- JS restore TPast for notpresent (ResRomance = ResCat) ;
@@ -92,7 +92,8 @@ let pe = case b of {True => P3 ; _ => p} ; agr = {g = g ; n = n ; p = pe} ;- clpr = <[],[],False> ; ----e pronArg agr.n agr.p vp.clAcc vp.clDat ;+ clpr = <vp.clit1 ++ vp.clit2, [],False> ; ---- TODO: True if clit+---- clpr = <[],[],False> ; ----e pronArg agr.n agr.p vp.clAcc vp.clDat ; ----e verb = case <aag.n, pol,pe> of { ----e <Sg,Neg,P2> => (vp.s ! VPInfinit Simul clpr.p3).inf ! aag ; ----e _ => (vp.s ! VPImperat).fin ! agr
@@ -11,7 +11,7 @@ RelativeCat, ConjunctionCat, PhraseCat,- TextX - [Temp,Tense],+ TextX - [SC,Temp,Tense], IdiomCat, StructuralCat, TenseCat
@@ -112,7 +112,7 @@ they_Pron = mkPronoun "elles" "les" "les" "elles" "llur" "llur" "llurs" "llurs"- Fem Pl P3 ;+ Masc Pl P3 ; this_Quant = let aquest : ParadigmsCat.Number => ParadigmsCat.Gender => Case => Str = table {@@ -134,7 +134,7 @@ mkPronoun "nosaltres" "ens" "ens" "nosaltres" ["el nostre"] ["la nostra"] ["els nostres"] ["les nostres"]- Fem Pl P1 ;+ Masc Pl P1 ; whatSg_IP = {s = \\c => prepCase c ++ ["què"] ; a = aagr Masc Sg} ; whatPl_IP = {s = \\c => prepCase c ++ ["què"] ; a = aagr Masc Pl} ; --- when_IAdv = ss "quan" ;@@ -163,7 +163,7 @@ youPol_Pron = mkPronoun "vosté" "el" "li" "vosté" ["el seu"] ["la seva"] ["els seus"] ["les seves"]- Masc Pl P2 ;+ Masc Sg P3 ; not_Predet = {s = \\a,c => prepCase c ++ "no pas" ; c = Nom ; a = PNoAg} ; have_V2 = dirV2 (verbV (tenir_108 "tenir")) ;
@@ -1,2 +1,2 @@-concrete CatDan of Cat = CommonX ** CatScand with+concrete CatDan of Cat = CommonX -[Tense, Temp] ** CatScand with (ResScand = ResDan) ;
@@ -47,6 +47,8 @@ {part = [] ; isVaere = True} ; auxFut = "vil" ; -- "skal" in ExtDan+ auxFutKommer = "vil" ;+ auxFutPart = "" ; auxCond = "ville" ; negation : Polarity => Str = table {
@@ -11,10 +11,10 @@ RelativeDan, ConjunctionDan, PhraseDan,- TextX,+ TextX - [Tense,Temp] , IdiomDan, StructuralDan,- TenseX+ TenseDan ** { flags startcat = Phr ; unlexer = text ; lexer = text ;
@@ -8,7 +8,7 @@ GenericCl vp = mkClause "man" (agrP3 MorphoDan.utrum Sg) vp ; CleftNP np rs = mkClause "det" (agrP3 MorphoDan.neutrum Sg) - (insertObj (\\_ => np.s ! rs.c ++ rs.s ! np.a) (predV verbBe)) ;+ (insertObj (\\_ => np.s ! rs.c ++ rs.s ! np.a ! RNom) (predV verbBe)) ; CleftAdv ad s = mkClause "det" (agrP3 MorphoDan.neutrum Sg) (insertObj (\\_ => ad.s ++ s.s ! Sub) (predV verbBe)) ;
@@ -0,0 +1,3 @@+concrete TenseDan of Tense = CatDan, TenseX [Ant,Pol,AAnter,ASimul,PNeg,PPos] ** + TenseScand with + (ResScand = ResDan) ;
@@ -44,7 +44,7 @@ married_A2 = mkA2 (mkA "getrouwd") (mkPrep "met") ; mother_N2 = mkN2 (mkN "moeder") ; now_Adv = mkAdv "nu" ;- paint_V2A = mkV2A (mkV "schilderen") noPrep ;+ paint_V2A = mkV2A (mkV "schilderen" "schildert") noPrep ; paris_PN = mkPN "Parijs" ; red_A = mkA "rood" ; say_VS = mkVS zeggen_V ;@@ -196,7 +196,7 @@ leaf_N = mkN "blad" neuter ; learn_V2 = mkV2 "leren" ; leather_N = mkN "leer" neuter ;-leave_V2 = mkV2 laten_V ;+leave_V2 = mkV2 (mkV "verlaten" "verliet" "verlieten" "verlaten") ; leg_N = mkN "been" neuter ; lie_V = liggen_V ; like_V2 = mkV2 houden_V van_Prep ;
@@ -116,6 +116,7 @@ mkV : overload { mkV : (aaien : Str) -> V ; -- regular verb+ mkV : (aaien,aait : Str) -> V ; -- regular verb with third person sg pres (giving stem) mkV : (breken,brak,gebroken : Str) -> V ; -- theme of irregular verb mkV : (breken,brak,braken,gebroken : Str) -> V ; -- also past plural irregular mkV : (aai,aait,aaien,aaide,aaide,aaiden,geaaid : Str) -> V ; -- worst-case verb@@ -216,6 +217,8 @@ mkV = overload { mkV : (aaien : Str) -> V = \s -> lin V (v2vv (regVerb s)) ;+ mkV : (aaien, aait : Str) -> V = + \s,t -> lin V (v2vv (smartVerb s (init t))) ; mkV : (breken,brak,gebroken : Str) -> V = \a,b,c -> lin V (v2vv (irregVerb a b c)) ; mkV : (breken,brak,braken,gebroken : Str) -> V =
@@ -224,7 +224,7 @@ -- For regular verbs with past tense 'd' d_regVerb : (_,_ :Str) -> Verb = \geeuwen,geeuw ->- let stem = mkStem geeuwen+ let stem = geeuw --- mkStem geeuwen in mkVerb stem (stem + "t") geeuwen (stem + "de") (stem + "de") (stem + "den")
@@ -21,7 +21,7 @@ inf = vp.inf.p1 ; in verb ++ ps.p2 ++ - vp.n2 ! agr ++ vp.a1 ! pol ++ vp.a2 ++ inf ++ vp.ext+ vp.a1 ! pol ++ vp.n2 ! agr ++ vp.a2 ++ inf ++ vp.ext } ; SlashVP np vp =
file too large to diff
@@ -1574,6 +1574,7 @@ fun apply_V : V; fun apply_V2 : V2; fun apply_V2V : V2V;+fun apply_VV : VV; fun appoint_V2 : V2; fun appoint_V2V : V2V; fun appoint_VS : VS;@@ -6108,6 +6109,7 @@ fun choose_V2 : V2; fun choose_V2V : V2V; fun choose_VS : VS;+fun choose_VV : VV; fun choosey_A : A; fun choosy_A : A; fun chop_N : N;@@ -6936,6 +6938,7 @@ fun combine_V : V; fun combine_V2 : V2; fun combine_V2V : V2V;+fun combine_VV : VV; fun combustible_A : A; fun combustible_N : N; fun combustion_N : N;@@ -9828,6 +9831,7 @@ fun determine_V : V; fun determine_V2 : V2; fun determine_V2V : V2V;+fun determine_VV : VV; fun determine_VS : VS; fun determinedly_Adv : Adv; fun determiner_N : N;@@ -12536,6 +12540,7 @@ fun example_N : N; fun exasperate_V2 : V2; fun exasperation_N : N;+fun excavate_V : V; fun excavate_V2 : V2; fun excavation_N : N; fun excavator_N : N;@@ -16827,6 +16832,7 @@ fun herd_V : V; fun herd_V2 : V2; fun herdsman_N : N;+fun here_Adv : Adv; fun hereabouts_Adv : Adv; fun hereafter_Adv : Adv; fun hereafter_N : N;@@ -18212,6 +18218,7 @@ fun include_V : V; fun include_V2 : V2; fun include_VS : VS;+fun include_VV : VV; fun inclusion_N : N; fun inclusive_A : A; fun incognito_A : A;@@ -19697,6 +19704,7 @@ fun jump_V : V; fun jump_V2 : V2; fun jump_V2V : V2V;+fun jump_VV : VV; fun jumped_up_A : A; fun jumper_N : N; fun jumpiness_N : N;@@ -21125,6 +21133,7 @@ fun live_Adv : Adv; fun live_V : V; fun live_V2 : V2;+fun live_VV : VV; fun live_birth_N : N; fun liveable_A : A; fun livelihood_N : N;@@ -23262,6 +23271,8 @@ fun molar_A : A; fun molar_N : N; fun molasses_N : N;+fun mold_V : V;+fun mold_V2 : V2; fun mold_PN : PN; fun moldy_A : A; fun mole_N : N;@@ -23519,6 +23530,7 @@ fun moss_grown_A : A; fun mossley_PN : PN; fun mossy_A : A;+fun most_Det : Det; fun mostly_Adv : Adv; fun mote_N : N; fun motel_N : N;@@ -23614,6 +23626,7 @@ fun move_V : V; fun move_V2 : V2; fun move_V2V : V2V;+fun move_VV : VV; fun movement_N : N; fun mover_N : N; fun movie_N : N;@@ -28447,6 +28460,7 @@ fun presume_V : V; fun presume_V2 : V2; fun presume_VS : VS;+fun presume_VV : VV; fun presuming_A : A; fun presumption_N : N; fun presumptive_A : A;@@ -29457,6 +29471,7 @@ fun querulous_A : A; fun querulousness_N : N; fun query_N : N;+fun query_V : V; fun query_V2 : V2; fun quest_N : N; fun quest_V : V;@@ -29589,6 +29604,7 @@ fun race_V : V; fun race_V2 : V2; fun race_V2V : V2V;+fun race_VV : VV; fun race_meeting_N : N; fun racecard_N : N; fun racecourse_N : N;@@ -30851,6 +30867,7 @@ fun resemblance_N : N; fun resemble_V2 : V2; fun resent_V2 : V2;+fun resent_VS : VS; fun resentful_A : A; fun resentment_N : N; fun reservation_N : N;@@ -30880,6 +30897,7 @@ fun resign_V : V; fun resign_V2 : V2; fun resign_V2V : V2V;+fun resign_VV : VV; fun resign_VS : VS; fun resignation_N : N; fun resigned_A : A;@@ -32613,6 +32631,7 @@ fun scramble_V : V; fun scramble_V2 : V2; fun scramble_V2V : V2V;+fun scramble_VV : VV; fun scrambler_N : N; fun scrap_N : N; fun scrap_V : V;@@ -37104,6 +37123,8 @@ fun swaziland_PN : PN; fun swear_V : V; fun swear_V2 : V2;+fun swear_V2V : V2V;+fun swear_VV : VV; fun swearer_N : N; fun swearing_N : N; fun swearword_N : N;@@ -37226,8 +37247,6 @@ fun swordsman_N : N; fun swordsmanship_N : N; fun swordstick_N : N;-fun swore_V2V : V2V;-fun sworn_A : A; fun swot_N : N; fun swot_V : V; fun swot_V2 : V2;@@ -38069,6 +38088,7 @@ fun therapeutics_N : N; fun therapist_N : N; fun therapy_N : N;+fun there_Adv : Adv; fun thereabout_Adv : Adv; fun thereabouts_Adv : Adv; fun thereafter_Adv : Adv;@@ -38578,6 +38598,7 @@ fun toil_N : N; fun toil_V : V; fun toil_V2V : V2V;+fun toil_VV : VV; fun toiler_N : N; fun toilet_N : N; fun toilet_paper_N : N;
@@ -1,5 +1,5 @@ --# -path=.:../romance:../common:../abstract:../common:prelude -concrete CatFre of Cat = CommonX - [Temp,TTAnt,Tense,TPres,TPast,TFut,TCond] +concrete CatFre of Cat = CommonX - [SC,Temp,TTAnt,Tense,TPres,TPast,TFut,TCond] ** CatRomance with (ResRomance = ResFre) ;
@@ -40,7 +40,10 @@ youSg8fem_Pron = mkPronoun "tu" (elision "t") (elision "t") "toi" "ton" (elisPoss "t") "tes" Fem Sg P2 ;- youPl8fem_Pron,+ youPl8fem_Pron =+ let vous = mkPronoun "vous" "vous" "vous" "vous" "votre" "votre" "vos" Fem Pl P2+ in + {s = vous.s ; hasClit = vous.hasClit ; poss = vous.poss ; a = vous.a ; isPol = False} ; youPol8fem_Pron = let vous = mkPronoun "vous" "vous" "vous" "vous" "votre" "votre" "vos" Fem Pl P2 in
@@ -11,7 +11,7 @@ RelativeFre, ConjunctionFre, PhraseFre,- TextX - [Temp,Tense],+ TextX - [SC,Temp,Tense], IdiomFre, StructuralFre, TenseFre
@@ -20,7 +20,7 @@ inf = vp.inf ++ verb.inf ; in verb.fin ++ ps.p2 ++ - vp.n0 ! agr ++ vp.n2 ! agr ++ vp.a1 ! pol ++ vp.a2 ++ inf ++ vp.ext+ vp.n0 ! agr ++ vp.a1 ! pol ++ vp.n2 ! agr ++ vp.a2 ++ inf ++ vp.ext } ; SlashVP np vp =
@@ -1,2 +1,2 @@ concrete AdjectiveHin of Adjective = CatHin ** AdjectiveHindustani with - (ResHindustani = ResHin) ; + (ResHindustani = ResHin);
@@ -1,2 +1,2 @@ concrete AdverbHin of Adverb = CatHin ** AdverbHindustani with - (ResHindustani = ResHin) ; + (ResHindustani = ResHin);
@@ -1,6 +1,6 @@ --# -path=.:../abstract:../common:../prelude:../hindustani concrete AllHin of AllHinAbs =- LangHin,- ExtraHin+ LangHin+-- ExtraHin ** {} ;
@@ -1,4 +1,4 @@ abstract AllHinAbs =- Lang,- ExtraHinAbs+ Lang+-- ExtraHinAbs ** {} ;
@@ -1,2 +1,3 @@-concrete CatHin of Cat = CommonX - [Adv,AdN] ** CatHindustani with - (ResHindustani = ResHin) ; +concrete CatHin of Cat = CommonX - [Adv,AdN,SC] ** CatHindustani with + (ResHindustani = ResHin); +
@@ -1,4 +1,6 @@-instance DiffHin of DiffHindustani = open CommonHindustani, Prelude in {+instance DiffHin of DiffHindustani = open CommonHindustani, ResHindustani,Prelude in {+--instance DiffHin of DiffHindustani = CommonHindustani ** open Prelude in {+flags coding = utf8; oper Clause : Type = {s : VPHTense => Polarity => Order => Str} ; mkClause : NP -> VPH -> Clause = \np,vp -> {@@ -31,9 +33,9 @@ VPPerfFut => {fin = [] ; inf = Prelude.glue ((vp.s ! VPTense VPPerf agr).inf ++ hw p n) (copula CFuture n p g) } ; VPPerfPresCont => {fin = copula CPresent n p g ; inf = (vp.s ! VPTense VPPres agr).inf ++ raha g n } ; VPPerfPastCont => {fin = copula CPast n p g ; inf = (vp.s ! VPTense VPPres agr).inf ++ raha g n } ; - VPPerfFutCont => {fin = [] ; inf = Prelude.glue ((vp.s ! VPTense VPPres agr).inf ++ raha g n ++ hw p n) (copula CFuture n p g )} ; - VPSubj => case vp.prog of { True => {fin = (vp.s ! VPTense VPFutr agr).inf ++ hw p n ; inf = "Xयद" } ;- _ => {fin = (vp.s ! VPTense VPFutr agr).inf ; inf = "Xयद" } } + VPPerfFutCont => {fin = [] ; inf = Prelude.glue ((vp.s ! VPTense VPPres agr).inf ++ raha g n ++ hw p n) (copula CFuture n p g) } ; + VPSubj => case vp.prog of { True => {fin = (vp.s ! VPTense VPFutr agr).inf ++ hw p n ; inf = "शायद" } ;+ _ => {fin = (vp.s ! VPTense VPFutr agr).inf ; inf = "शायद" } } }; @@ -41,7 +43,7 @@ quest = case ord of { ODir => [];- OQuest => "कय" }; + OQuest => "कया" }; na = case b of { Pos => [];@@ -49,7 +51,7 @@ nahim = case b of { Pos => [];- Neg => "नहयं" };+ Neg => "नहीं" }; in case vt of { VPSubj => quest ++ np.s ! subj ++ vp.obj.s ++ vp.ad ++ vp.comp ! np.a ++ na ++ vps.inf ++ vps.fin ++ vp.embComp ;@@ -76,15 +78,15 @@ VPPerfFut => {fin = [] ; inf = Prelude.glue ((vp.s ! VPStem).inf ++ cka g n ++ hw p n) (copula CFuture n p g) } ; VPPerfPresCont => {fin = copula CPresent n p g ; inf = (vp.s ! VPStem).inf ++ raha g n } ; VPPerfPastCont => {fin = copula CPast n p g ; inf = (vp.s ! VPStem).inf ++ raha g n } ; - VPPerfFutCont => {fin = [] ; inf = Prelude.glue ((vp.s ! VPStem).inf ++ raha g n ++ hw p n) (copula CFuture n p g ) } ;- VPSubj => {fin = insertSubj p (vp.s ! VPStem).inf ; inf = "xयद" }+ VPPerfFutCont => {fin = [] ; inf = Prelude.glue ((vp.s ! VPStem).inf ++ raha g n ++ hw p n) (copula CFuture n p g) } ;+ VPSubj => {fin = insertSubj p (vp.s ! VPStem).inf ; inf = "शायद" } }; quest = case ord of { ODir => [];- OQuest => "कय" }; + OQuest => "कया" }; na = case b of { Pos => [];@@ -92,42 +94,159 @@ nahim = case b of { Pos => [];- Neg => "नहयं" }; + Neg => "नहीं" }; in case t of { VPSubj => quest ++ subj ++ vp.obj.s ++ vp.ad ++ vp.comp ! agr ++ na ++ vps.inf ++ vps.fin ++ vp.embComp; _ => quest ++ subj ++ vp.obj.s ++ vp.ad ++ vp.comp ! agr ++ nahim ++ vps.inf ++ vps.fin ++ vp.embComp}; } ; -{- Verb : Type = {s : VerbForm => Str} ;-- - predV v = {- s = \\vh => - case vh of {- VPTense VPPres (Ag g n p) => {fin = copula CPresent n p g ; inf = v.s ! VF Imperf p n g } ;- VPTense VPPast (Ag g n p) => {fin = [] ; inf =v.s ! VF Perf p n g} ;- VPTense VPFutr (Ag g n p) => {fin = [] ; inf = Prelude.glue (v.s ! VF Subj p n g) (copula CFuture n p g)} ;- VPTense VPPerf (Ag g n p) => { fin = [] ; inf = v.s ! Root ++ cka g n } ; - VPStem => {fin = [] ; inf = v.s ! Root};- _ => {fin = [] ; inf = v.s ! Root} - };- obj = {s = [] ; a = defaultAgr} ;- subj = VIntrans ;- inf = v.s ! Inf;- ad = [];- embComp = [];- prog = False ;- comp = \\_ => []- } ;--} np2pronCase ppf npc a = case npc of { NPC c => ppf ! c; NPObj => ppf ! Obl ; NPErg =>case (fromAgr a).p of {- (Pers3_Near|Pers3_Distant) => Prelude.glue (ppf ! Obl) "नै" ; -- in hindi in case of pronouns nE is tagged to pron rather than a separate word- _ => Prelude.glue (ppf ! Dir) "नै"+ (Pers3_Near|Pers3_Distant) => Prelude.glue (ppf ! Obl) "ने" ; -- in hindi in case of pronouns nE is tagged to pron rather than a separate word+ _ => Prelude.glue (ppf ! Dir) "ने" } } ;+ conjThat = "कि" ;+ insertSubj : UPerson -> Str -> Str = \p,s -> + case p of { Pers1 => s ++ "वाँ" ; _ => Prelude.glue s "ए"}; -- check with prasad for vn~+ + agr = "a-गर" ;+ awr = "और" ;+ ky = "की" ;+ jn = "जिन" ;+ js = "जिस" ;+ jw = "जो" ;+ kw = "को" ;+ mt = "मत" ;+ nE = "ने" ;+ nh = "न" ;+ sE = "से" ;+ waN = "वाँ" ; -- check with prasad+ hE = "हे" ;+ comma = "," ;+ indfArt = "एक" ; -- check with prasad+ kwd = "ख़ुद" ; -- check with prasad++ oper + copula : CTense -> Number -> UPerson -> Gender -> Str = \t,n,p,g ->+ case <t,n,p,g> of {+ <CPresent,Sg,Pers1,_ > => "हूँ" ;+ <CPresent,Sg,Pers2_Casual,_ > => "है" ;+ <CPresent,Sg,Pers2_Familiar,_ > => "हो" ;+ <CPresent,Sg,Pers2_Respect,_ > => "हैं" ;+ <CPresent,Sg,Pers3_Near,_ > => "है" ;+ <CPresent,Sg,Pers3_Distant,_ > => "है" ;+ <CPresent,Pl,Pers1,_ > => "हैँ" ;+ <CPresent,Pl,Pers2_Casual,_ > => "हौ" ;+ <CPresent,Pl,Pers2_Familiar,_ > => "हौ" ;+ <CPresent,Pl,Pers2_Respect,_ > => "हैं" ;+ <CPresent,Pl,Pers3_Near,_ > => "हैं" ;+ <CPresent,Pl,Pers3_Distant,_ > => "हैं" ;+ <CPast,Sg,Pers1,Masc > => "था" ;+ <CPast,Sg,Pers1,Fem > => "थी" ;+ <CPast,Sg,Pers2_Casual,Masc > => "था" ;+ <CPast,Sg,Pers2_Casual,Fem > => "थी" ;+ <CPast,Sg,Pers2_Familiar,Masc > => "था" ;+ <CPast,Sg,Pers2_Familiar,Fem > => "थी" ;+ <CPast,Sg,Pers2_Respect,Masc > => "थे" ;+ <CPast,Sg,Pers2_Respect,Fem > => "थीं" ;+ <CPast,Sg,Pers3_Near,Masc > => "था" ;+ <CPast,Sg,Pers3_Near,Fem > => "थी" ;+ <CPast,Sg,Pers3_Distant,Masc > => "था" ;+ <CPast,Sg,Pers3_Distant,Fem > => "थी" ;+ <CPast,Pl,Pers1,Masc > => "थे" ;+ <CPast,Pl,Pers1,Fem > => "थीं" ;+ <CPast,Pl,Pers2_Casual,Masc > => "थे" ;+ <CPast,Pl,Pers2_Casual,Fem > => "थीं" ;+ <CPast,Pl,Pers2_Familiar,Masc > => "थे" ;+ <CPast,Pl,Pers2_Familiar,Fem > => "थीं" ;+ <CPast,Pl,Pers2_Respect,Masc > => "थे" ;+ <CPast,Pl,Pers2_Respect,Fem > => "थीं" ;+ <CPast,Pl,Pers3_Near,Masc > => "थे" ;+ <CPast,Pl,Pers3_Near,Fem > => "थीं" ;+ <CPast,Pl,Pers3_Distant,Masc > => "थे" ;+ <CPast,Pl,Pers3_Distant,Fem > => "थीं" ;+ <CFuture,Sg,Pers1,Masc > => "गा" ;+ <CFuture,Sg,Pers1,Fem > => "गी" ;+ <CFuture,Sg,Pers2_Casual,Masc > => "गा" ;+ <CFuture,Sg,Pers2_Casual,Fem > => "गी" ;+ <CFuture,Sg,Pers2_Familiar,Masc > => "गे" ;+ <CFuture,Sg,Pers2_Familiar,Fem > => "गी" ;+ <CFuture,Sg,Pers2_Respect,Masc > => "गे" ;+ <CFuture,Sg,Pers2_Respect,Fem > => "गी" ;+ <CFuture,Sg,Pers3_Near,Masc > => "गा" ;+ <CFuture,Sg,Pers3_Near,Fem > => "गी" ;+ <CFuture,Sg,Pers3_Distant,Masc > => "गा" ;+ <CFuture,Sg,Pers3_Distant,Fem > => "गी" ;+ <CFuture,Pl,Pers1,Masc > => "गे" ;+ <CFuture,Pl,Pers1,Fem > => "गी" ;+ <CFuture,Pl,Pers2_Casual,Masc > => "गे" ;+ <CFuture,Pl,Pers2_Casual,Fem > => "गी" ;+ <CFuture,Pl,Pers2_Familiar,Masc > => "गे" ;+ <CFuture,Pl,Pers2_Familiar,Fem > => "गी" ;+ <CFuture,Pl,Pers2_Respect,Masc > => "गे" ;+ <CFuture,Pl,Pers2_Respect,Fem > => "गी" ;+ <CFuture,Pl,Pers3_Near,Masc > => "गे" ;+ <CFuture,Pl,Pers3_Near,Fem > => "गी" ;+ <CFuture,Pl,Pers3_Distant,Masc > => "गे" ;+ <CFuture,Pl,Pers3_Distant,Fem > => "गी"++ } ; ++ raha : Gender -> Number -> Str = \g,n -> + (regAdjective "रहा").s ! n ! g ! Dir ! Posit ;++ cka : Gender -> Number -> Str = \g,n -> + (regAdjective "चुका").s ! n ! g ! Dir ! Posit ;+ + hw : UPerson -> Number -> Str = \pp,n -> + case <pp,n> of {+ <Pers1,_> => "हूँ";+ <_,Pl> => "होँ";+ <_,_> => "हो"+ };+ hwa : Agr -> Str = \agr ->+ let n = (fromAgr agr).n;+ p = (fromAgr agr).p;+ g = (fromAgr agr).g;+ in+ case <n,g> of {+ <Sg,Masc> => "हुआ";+ <Sg,Fem> => "हुई";+ <Pl,Masc> => "हुए" ;+ <Pl,Fem> => "हुई"+ }; + -----------------------------------------------+ -- Hindustani Adjectives+ -----------------------------------------------+ + + regAdjective : Str -> Adjective; + regAdjective x = case x of {+ acch + ("ा"|"न") => mkAdjective x ("बहुत" ++ x) ("सब से" ++ x) (acch + "े") ("बहुत" ++ acch + "े") ("सब से" ++ acch + "E") (acch + "े") ("बहुत" ++ acch + "े") ("सब से" ++ acch + "े")+ (acch + "ी") ("बहुत" ++ acch + "ी") ("सब से" ++ acch + "ी") (acch + "ी") ("बहुत" ++ acch + "ी") ("सब से" ++ acch + "ी") (acch + "ी") ("बहुत" ++ acch + "ी") ("सब से" ++ acch + "ी")+ (acch +"े") ("बहुत" ++ acch + "े") ("सब से" ++ acch + "े") (acch + "े") ("बहुत" ++ acch + "े") ("सब से" ++ acch + "े") (acch + "े") ("बहुत" ++ acch + "े") ("सब से" ++ acch + "े")+ (acch + "ी") ("बहुत" ++ acch + "ी") ("सब से" ++ acch + "ी") (acch + "ी") ("बहुत" ++ acch + "ी") ("सब से" ++ acch + "ी") (acch + "ी") ("बहुत" ++ acch + "ी") ("सब से" ++ acch + "ी");+ + _ => mkAdjective x ("बहुत" ++ x) ("सब से" ++ x) x ("बहुत" ++ x) ("सब से" ++ x) x ("बहुत" ++ x) ("सब से" ++ x)+ x ("बहुत" ++ x) ("सब से" ++ x) x ("बहुत" ++ x) ("सब से" ++ x) x ("बहुत" ++ x) ("सब से" ++ x)+ x ("बहुत" ++ x) ("सब से" ++ x) x ("बहुत" ++ x) ("सब से" ++ x) x ("बहुत" ++ x) ("सब से" ++ x)+ x ("बहुत" ++ x) ("सब से" ++ x) x ("बहुत" ++ x) ("सब से" ++ x) x ("बहुत" ++ x) ("सब से" ++ x)+ + }; +IrregAdjective : Str -> Adjective;+IrregAdjective x = mkAdjective x ("बहुत" ++ x) ("सब से" ++ x) x ("बहुत" ++ x) ("सब से" ++ x) x ("बहुत" ++ x) ("सब से" ++ x)+ x ("बहुत" ++ x) ("सब से" ++ x) x ("बहुत" ++ x) ("सब से" ++ x) x ("बहुत" ++ x) ("सब से" ++ x)+ x ("बहुत" ++ x) ("सब से" ++ x) x ("बहुत" ++ x) ("सब से" ++ x) x ("बहुत" ++ x) ("सब से" ++ x)+ x ("बहुत" ++ x) ("सब से" ++ x) x ("बहुत" ++ x) ("सब से" ++ x) x ("बहुत" ++ x) ("सब से" ++ x) ;+ + +++ + }
@@ -1,4 +1,4 @@---# -path=.:../abstract:../common:../prelude:c:/gf_unicoded/hindustani +--# -path=.:../abstract:../common:../prelude: concrete GrammarHin of Grammar = NounHin, @@ -11,9 +11,9 @@ RelativeHin, ConjunctionHin, PhraseHin, - TextX - [Adv,AdN], + TextX - [Adv,AdN,SC], StructuralHin, - TenseX - [Adv,AdN], + TenseX - [Adv,AdN,SC], IdiomHin ** {
@@ -5,21 +5,21 @@ lin ImpersCl vp = mkSClause " " (agrP3 Masc Sg) vp ; - GenericCl vp = mkSClause "कwय" (agrP3 Masc Sg) vp ; + GenericCl vp = mkSClause "कोई" (agrP3 Masc Sg) vp ; CleftNP np rs = let cl = mkSClause (np.s ! NPC rs.c) (np.a) (predAux auxBe); in {s = \\t,p,o => cl.s ! t ! p ! o ++ rs.s ! np.a }; --- CleftAdv ad ss = { s = \\t,b,o => ad.s ! Masc ++ ss.s}; + CleftAdv ad ss = { s = \\t,b,o => ad.s ! Masc ++ ss.s}; --- ExistNP np = --- mkSClause "wहं" (agrP3 (fromAgr np.a).g (fromAgr np.a).n) --- (insertObj (\\_ => np.s ! NPC Obl) (predAux auxBe)) ; + ExistNP np = + mkSClause "वहाँ" (agrP3 (fromAgr np.a).g (fromAgr np.a).n) + (insertObj (\\_ => np.s ! NPC Dir) (predAux auxBe)) ; ExistIP ip = - let cl = mkSClause ("wहं" ++ ip.s ! Dir) (agrP3 ip.g ip.n) (predAux auxBe); + let cl = mkSClause ("वहाँ" ++ ip.s ! Dir) (agrP3 ip.g ip.n) (predAux auxBe); in { s = \\t,p,qf => case qf of { QDir => cl.s ! t ! p ! ODir; @@ -31,8 +31,9 @@ ProgrVP vp = (predProg vp) ; - ImpPl1 vp = {s = "ाw" ++ infVP True vp (agrP1 Masc Pl)} ; - ImpP3 np vp = {s = np.s!NPC Dir ++ "कw" ++ (vp.s ! VPImp ).inf ++ "दw"}; +-- ImpPl1 vp = {s = "आओ" ++ infVP True vp (agrP1 Masc Pl)} ; + ImpPl1 vp = {s = "आओ" ++ vp.obj.s ++ (vp.s ! VPTense VPFutr (agrP1 Masc Pl)).inf ++ vp.comp ! (agrP1 Masc Pl)} ; + ImpP3 np vp = {s = np.s!NPC Dir ++ "को" ++ (vp.s ! VPImp ).inf ++ "दो"}; }
@@ -1,369 +1,373 @@---# -path=.:prelude - -concrete LexiconHin of Lexicon = CatHin ** ---open ResHin, Prelude in { - open ParadigmsHin, Prelude in { - - flags - optimize=values ; - coding = utf8; - - lin - airplane_N = mkN "जHज" ; --- answer_V2S = mkV2 (compoundV "जwब" (mkV "दयन")) ; --- apartment_N = mkN "कमरह" ; - apple_N = mkN "सयब" ; --- art_N = mkN "fन" ; - ask_V2Q = mkV2 (mkV "पwचHन") ; --- baby_N = mkN "बचH" ; - bad_A = mkA "बर" ; - bank_N = mkN "बयनक" ; - beautiful_A = mkA "सनदर" ; - become_VA = mkV "बनन"; - beer_N = mkN "बेेर" ; --- beg_V2V = mkV2V (compoundV "लतज" (mkV "करन")) "सै" "कह" False; - big_A = mkA "बृ" ; --- bike_N = mkN "सयचल" feminine ; --- bird_N = mkN "परनदह" ; - black_A = mkA "कल" ; - blue_A = mkA "नयल" ; - boat_N = mkN "नw" ; - book_N = mkN "कतब" feminine ; --- boot_N = mkN "जwत" ; - boss_N = mkN "मलक" ; - boy_N = mkN "लृक" ; - bread_N = mkN "रwतय" ; - break_V2 = mkV2 (mkV "तwृन") ; - broad_A = mkA "चwृ" ; - brother_N2 = mkN2 (mkN "बHय") (mkPrep "क" "क") "कै" ; --not correct - brown_A = mkA "बHwर" ; --- butter_N = mkN "मकh-न" ; - buy_V2 = mkV2 (mkV "खरयदन"); - camera_N = mkN "कयमरH" ; - cap_N = mkN "तwपय" ; - car_N = mkN "कर" ; --- carpet_N = mkN "तपy^य" ; - cat_N = mkN "बलय" feminine; --- ceiling_N = mkN "चh-त" feminine ; - chair_N = mkN "करसय" ; --- cheese_N = mkN "पनयर" feminine ; - child_N = mkN "बचH" ; - church_N = mkN "गरज" ; - city_N = mkN "XHर" ; - clean_A = mkA "सf" ; - clever_A = mkA "चतर" ; - close_V2 = mkV2 (compoundV "बनद" do_V2); - coat_N = mkN "कwथ" ; - cold_A = mkA "सरद" ; - come_V = mkV "ान" ; - computer_N = mkN "कमपयwथर" ; - country_N = mkN "दयX" ; --- cousin_N = mkCmpdNoun "चच" (mkN "ज़द") ; -- a compund noun made of two nouns - cow_N = mkN "गै" feminine ; - die_V = mkV "मरन" ; - dirty_A = mkA "गनद" ; --- distance_N3 = mkN3 (mkN "fशलह") (mkPrep "क") "कै" "सै" ; - doctor_N = mkN "दकतर" ; - dog_N = mkN "कत" ; - door_N = mkN "दरwज़" ; - drink_V2 = mkV2 (mkV "पयन"); - easy_A2V = mkA "ासन" "" ; -- chek for A or a - eat_V2 = mkV2 (mkV "कHन") "" ; - empty_A = mkA "खलय" ; - enemy_N = mkN "दXमन" ; - factory_N = mkN "करखन" ; --- father_N2 = mkN2 (mkN "पत" irregular) (mkPrep "क") "कै" ; - fear_VS = mkV "दृन"; - find_V2 = mkV2 (mkV "दHwनद") ; - fish_N = mkN "मचHलय" ; - floor_N = mkN "fरX" ; - forget_V2 = mkV2 (mkV "बHwलन") ; --- fridge_N = mkN "fरयग" ; - friend_N = mkN "दwसत" masculine ; - fruit_N = mkN "पHल" ; --- fun_AV = mkAV (regA "fुन") ; - garden_N = mkN "बघ" ; -- chek for G - girl_N = mkN "लृकय" ; - glove_N = mkN "दसतन" ; - gold_N = mkN "सwन" ; - good_A = mkA "चH" ; - go_V = mkV "जन" ; - green_A = mkA "Hर" ; --- harbour_N = mkCmpdNoun "बनदर" (mkN "गह") ; - hate_V2 = mkV2 (compoundV "नfरत" do_V2) ; - hat_N = mkN "थwपय" ; --- have_V2 = dirV2 (mk5V "हवे" "हस" "हद" "हद" "हविनग") ; - hear_V2 = mkV2 (mkV "सनन") ; --- hill_N = mkN "पहृय" ; --- hope_VS = (compoundV "मयद" do_V2); - horse_N = mkN "गHwृ" ; - hot_A = mkA "गरम" ; - house_N = mkN "गHर" ; - important_A = mkA "ज़रwरय" ; -- check about z --- industry_N = mkN "शनेत" feminine ; - iron_N = mkN "लwH" ; - king_N = mkN "रज" ; - know_V2 = mkV2 (mkV "जनन") ; - know_VS = mkV "जनन"; --- lake_N = mkN "जh-यल" feminine ; - lamp_N = mkN "दय" ; - learn_V2 = mkV2 (mkV "सयकHन") ; --- leather_N = mkN "चमृ" ; - leave_V2 = mkV2 (mkV "चलन") ; - like_V2 = mkV2 (compoundV "पसनद" do_V2); - listen_V2 = mkV2 (mkV "सनन") ; - live_V = mkV "रहन" ; ---- touch - long_A = mkA "लमब" ; - lose_V2 = mkV2 (compoundV "कHw" do_V2) ; - love_N = mkN "परयम" ; - love_V2 = mkV2 (compoundV "पयर" do_V2) "कw"; - man_N = mkN "ादमय" ; --- married_A2 = mkA "Xदय " "सै" ; - meat_N = mkN "मस" ; - milk_N = mkN "दwदH" ; - moon_N = mkN "चनद" ; - mother_N2 = mkN2 (mkN "मत" feminine) (mkPrep "कय" "कय") "कै"; -- not covered need to be discussed --- mountain_N = mkN "पहृय" ; - music_N = mkN "सनगयत" ; --- narrow_A = mkA "बरयक" ; - new_A = mkA "नय" ; - newspaper_N = mkN "खबर" ; - oil_N = mkN "तयल" ; - old_A = mkA "बwृH" ; - open_V2 = mkV2 (mkV "कHwलन") ; --- paint_V2A = mkV2 (compoundV "रनग" do_V2) ; - paper_N = mkN "कघज़" ; - paris_PN = mkPN "पयरस" ; - peace_N = mkN "मन" ; - pen_N = mkN "qलम" ; --- planet_N = mkN "सयरह" ; --- plastic_N = mkN "पलसथक" ; - play_V2 = mkV2 (mkV "कHयलन") ; --- policeman_N = mkCmpdNoun "पwलयस" (mkN "wल") ; --- priest_N = (mkN "पयघमबर") ; --- probable_AS = mkAS (regA "परॉबबले") ; --- queen_N = mkN "Xहज़दय" ; --- radio_N = mkN "रयधयw" ; - rain_V0 = compoundV "बरX" (mkV "Hwन" ) ; - read_V2 = mkV2 (mkV "पृHन"); - red_A = mkA "लल" ; - religion_N = mkN "दHरम" ; --- restaurant_N = mkN "हwथल" ; - river_N = mkN "दरय" masculine ; - rock_N = mkN "चथन" ; - roof_N = mkN "चh-त" masculine ; --- rubber_N = mkN "रबृ" ; - run_V = mkV "दwृन" ; - say_VS = mkV "कHन" ; - school_N = mkN "मकतब" ; --- science_N = mkN "सनस" ; -- vgyan - sea_N = mkN "समनदर" ; --- seek_V2 = mkV2 (compoundV "तलX" do_V2) ; - see_V2 = mkV2 (mkV "दयकHन") ; - sell_V3 = mkV3 (mkV "बयचन") "कw" ""; - send_V3 = mkV3 (mkV "बHयजन") "कw" ""; - sheep_N = mkN "बHयृ" feminine ; - ship_N = mkN "जHज़" ; - shirt_N = mkN "करत" feminine; - shoe_N = mkN "जwत" ; - shop_N = mkN "दwकन" feminine ; - short_A = mkA "चHwथ" ; - silver_N = mkN "चनदय" ; - sister_N = mkN "बHन" feminine ; - sleep_V = mkV "सwन" ; - small_A = mkA "चHwथ" ; - snake_N = mkN "सनप" ; --- sock_N = mkN "जरब" feminine ; - speak_V2 = mkV2 (mkV "बwलन") ; - star_N = mkN "तर" ; --- steel_N = mkN "सतयल" ; -- something like ispat - stone_N = mkN "पतHर" ; --- stove_N = mkN "चwलह" ; --- student_N = mkCmpdNoun "t-लब" (mkN "ेलम") ; -- something vidrati - stupid_A = mkA "बैwqwf" ; --- sun_N = mkN "सwरज" ; -- swrya - switch8off_V2 = mkV2 (compoundV "बनद" do_V2) ; - switch8on_V2 = mkV2 (mkV "चलन") ; - table_N = mkN "मयज़" feminine ; - talk_V3 = mkV3 (mkV "बwलन") "सै" "कै बरै में"; --- teacher_N = mkN "िसतद" ; -- adyapak - teach_V2 = mkV2 (mkV "पृHन") ; - television_N = mkN "तयwय" ; - thick_A = mkA "मwथ" ; - thin_A = mkA "पतल" ; - train_N = mkN "रयल गृय" ; - travel_V = (compoundV "सfर" do_V2) ; --- tree_N = mkN "पयृ" masculine ; --- ---- trousers_N = mkN "तरॉुसेरस" ; - ugly_A = mkA "बदसwरत" ; - understand_V2 = mkV2 (mkV "समजHन") ; --- university_N = mkN "यwनयwरसथय" ; - village_N = mkN "गwं" ; -- check for n or N --- wait_V2 = mkV2 (compoundV "नतz-र" do_V2) "क" ; -- something prtkXa - walk_V = mkV "चलन" ; --- warm_A = mkA "गरम" ; something gngna --- war_N = mkN "जनग" ; - watch_V2 = mkV2 (mkV "दयकHन") ; --- water_N = mkN "पनय" masculine ; -- not covered masculine ending with y - white_A = mkA "सfयद" ; - window_N = mkN "रwXनदन" ; --- wine_N = mkN "Xरब" feminine ; - win_V2 = mkV2 (mkV "जयतन") ; - woman_N = mkN "ेwरत" feminine ; --- wonder_VQ = compoundV "Hेरन" (mkV "हwन") ; - wood_N = mkN "लकृय" ; - write_V2 = mkV2 (mkV "लकh-न") ; - yellow_A = mkA "पयल" ; - young_A = mkA "जwन" ; - do_V2 = mkV2 (mkV "करन") ; --- now_Adv = mkAdv "ब" ; --- already_Adv = mkAdv "पहलै हय" ; - song_N = mkN "गयत" ; - add_V3 = mkV3 (compoundV "जमे" do_V2) "" "" ; --- number_N = mkN "हनदसह" ; --- put_V2 = mkV2 (mkV "धलन") ; - stop_V = mkV "रकन" ; --- jump_V = compoundV "चHलनग" (mkV "लगन") feminine ; - --- left_Ord = {s = "बयं" ; n = singular}; --- right_Ord = {s= "दयं" ; n = singular}; --- far_Adv = mkAdv "दwर" ; - correct_A = mkA "सयH" ; - dry_A = mkA "सwकH" ; --- dull_A = mkA "नलिक" ; --- full_A = mkA "मकमल" ; - heavy_A = mkA "बHरय" ; - near_A = mkA "पस" ; --- rotten_A = mkA "खरब" ; - round_A = mkA "गwल" ; - sharp_A = mkA "तयज़" ; - smooth_A = mkA "चकन" ; - straight_A = mkA "सयदH" ; - wet_A = mkA "गयल" ; ---- - wide_A = mkA "चwृ" ; - animal_N = mkN "जनwर" ; - ashes_N = mkN "रकh-" feminine; -- FIXME: plural only? --- back_N = mkN "qमर" feminine ; --- bark_N = mkN "बरक" ; --- belly_N = mkN "दh-नय" ; --- blood_N = mkN "खwन" ; - bone_N = mkN "Hधय" feminine ; --- breast_N = mkN "चh-तय" ; --stan - cloud_N = mkN "बदल" ; - day_N = mkN "दन" ; - dust_N = mkN "दHwल" ; - ear_N = mkN "कन" ; --- earth_N = mkN "ज़मयन" feminine ; - egg_N = mkN "नधH" ; - eye_N = mkN "ानकH" feminine ; - fat_N = mkN "मwत" ; - feather_N = mkN "पनकH" ; --- fingernail_N = mkN "नखन" ; - fire_N = mkN "ाग" feminine ; - flower_N = mkN "पHwल" ; - fog_N = mkN "दHनद" feminine ; - foot_N = mkN "पwं" ; -- not properly covered need to be discussed - forest_N = mkN "जनगल" ; - grass_N = mkN "गHस" feminine ; --- guts_N = mkN "गुत" ; -- FIXME: no singular - hair_N = mkN "बल" ; - hand_N = mkN "HतH" ; - head_N = mkN "सर" ; - heart_N = mkN "दल" ; --- horn_N = mkN "गh-नतय" ; - husband_N = mkN "पतय" ; - ice_N = mkN "बरf" feminine ; - knee_N = mkN "गHतनH" ; - leaf_N = mkN "पतH" ; - leg_N = mkN "तनग" feminine ; - liver_N = mkN "कलयजH" ; --- louse_N = mkN "" ; -- jwN - mouth_N = mkN "मनH" ; - name_N = mkN "नम" ; - neck_N = mkN "गरदन" feminine ; - night_N = mkN "रत" feminine ; - nose_N = mkN "नक" ; --- person_N = mkN "Xखश" ; - rain_N = mkN "बरX" feminine ; - road_N = mkN "सृक" ; - root_N = mkN "गृ" feminine ; - rope_N = mkN "रसय" ; - salt_N = mkN "नमक" feminine ; - sand_N = mkN "रयत" feminine ; - seed_N = mkN "बयज" ; --- skin_N = mkN "जलद" feminine ; -- crm - sky_N = mkN "मबर" ; - smoke_N = mkN "दHwं"; -- singular masc nouns ending with aN,wN yet to be implemented - snow_N = mkN "बरf" feminine ; - stick_N = mkN "सॉथय" ; - tail_N = mkN "दम" ; --- tongue_N = mkN "ज़बन" feminine ; --- tooth_N = mkN "दनत" masculine; - wife_N = mkN "पतनय" ; - wind_N = mkN "Hw" ; --- wing_N = mkN "पर" ; - worm_N = mkN "कयृ" ; - year_N = mkN "सल" ; --- blow_V = mkV "चलन" ; - breathe_V = compoundV "सनस" (mkV "लयन" ) ; - burn_V = mkV "जलन" ; - dig_V = mkV "कHwदन" ; - fall_V = mkV "गरन" ; --- float_V = mkV "तयरन" ; - flow_V = mkV "चलन" ; - fly_V = mkV "ृन" ; --- freeze_V = mkV "जमन"; - give_V3 = mkV3 (mkV "दयन") "कw" ""; - laugh_V = mkV "हनसन" ; --- lie_N = mkN "जh-wत" masculine ; - lie_V = compoundV "जHwत" (mkV "बwलन" ); - play_V = mkV "कHयलन" ; - sew_V = mkV "सयन" ; - sing_V = mkV "गन" ; - sit_V = mkV "बयथHन" ; - smell_V = mkV "सwनगन" ; - spit_V = mkV "तHwकन" ; - stand_V = compoundV "कHृै" (mkV "हwन" ); -- a type of compound verb made of two verbs i.e 'kHRa' also inflects, rather than a string and verb should be fixed --- swell_V = mkV "सwजh-न" ; - swim_V = mkV "तयरन" ; - think_V = mkV "सwचन" ; - turn_V = mkV "मृन"; --- vomit_V = compoundV "लतय" (mkV "करन") feminine ; - bite_V2 = mkV2 (mkV "कतन") ; - count_V2 = mkV2 (mkV "गनन") ; - cut_V2 = mkV2 (mkV "कतन") ; - fear_V2 = mkV2 (mkV "धरन") ; - fight_V2 = mkV2 (mkV "लृन") ; --- hit_V2 = mkV2 (compoundV "तh-wकर" (mkV "मरन" )); - hold_V2 = mkV2 (mkV "पकृन") ; --- hunt_V2 = mkV2 (compoundV "Xकर" do_V2); - kill_V2 = mkV2 (compoundV "मर" (mkV "धलन" )) ; - pull_V2 = mkV2 (mkV "कHनचन"); --- push_V2 = mkV2 (mkV "दh-कयलन") "कw" ; --- rub_V2 = mkV2 (mkV "रगृन") ; --- scratch_V2 = mkV2 (mkV "कh-रचन") "कw" ; --- split_V2 = mkV2 (mkV "बनत") "कw" ; --- squeeze_V2 = dirV2 (regV "सqुेेज़े") ; --- stab_V2 = dirV2 (regDuplV "सतब") ; --- suck_V2 = mkV2 (mkV "चwसन") ; - throw_V2 = mkV2 (mkV "पHयनकन") ; - tie_V2 = mkV2 (mkV "बनदHन") ; - wash_V2 = mkV2 (mkV "दHwन") ; - wipe_V2 = mkV2 (compoundV "शf" (mkV "करन" )); - ----- other_A = regA "ॉतहेर" ; - --- grammar_N = mkN "गरदन" ; --- language_N = mkN "ज़बन" feminine ; --- rule_N = mkN "शwल" ; - ----- added 4/6/2007 - john_PN = mkPN "जॉन" ; --- question_N = mkN "सwल" ; --- ready_A = regA "रेदय" ; --- reason_N = mkN "wजह" feminine ; --- today_Adv = mkAdv "ाज" ; --- uncertain_A = mkA ["घयर यqयनय"] ; - - -} +--# -path=.:prelude++concrete LexiconHin of Lexicon = CatHin ** +--open ResHin, Prelude in {+ open ParadigmsHin, Prelude in {++ flags + optimize=values ;+ coding = utf8;++lin+ airplane_N = mkCmpdNoun "हवाई" (mkN "जहाज़") ;+ answer_V2S = mkV2 (compoundV "जवाब" (mkV "देना")) ;+ apartment_N = mkN "कमरा" ;+ apple_N = mkN "सेब" ;+-- art_N = mkN "" ;+ ask_V2Q = mkV2 (mkV "पूछना") ;+ baby_N = mkN "बच्छा" ;+ bad_A = mkA "बुरा" ;+ bank_N = mkN "बैंक" ;+ beautiful_A = mkA "ख़ूबसूरत" ;+ become_VA = mkV "बनना";+ beer_N = mkN "बियर" ;+ beg_V2V = mkV2V (compoundV "भीख" (mkV "मांगना")) "से" "कह" False;+ big_A = mkA "बड़ा" ;+ bike_N = mkN "सायकल" feminine ;+ bird_N = mkN "चिड़िया" ;+ black_A = mkA "काला" ;+ blue_A = mkA "नीला" ;+ boat_N = mkN "नाव" ;+ book_N = mkN "किताब" feminine ;+ boot_N = mkN "जूता" ;+ boss_N = mkN "मालिक" ;+ boy_N = mkN "लड़का" ;+ bread_N = mkN "रोटी" ;+ break_V2 = mkV2 (mkV "तोड़ना") ;+ broad_A = mkA "चौड़ा" ;+ brother_N2 = mkN2 (mkN "भाई") (mkPrep "क" "की") "के" ; --not correct+ brown_A = mkA "भूरा" ;+ butter_N = mkN "मक्खन" ;+ buy_V2 = mkV2 (mkV "ख़रीदना") "को"; -- add ko: here for es ko khredna, but this will create sentences like kitab ko kharedna+ camera_N = mkN "कैमरा" ;+ cap_N = mkN "टोपी" ;+ car_N = mkN "कार" ;+ carpet_N = mkN "क़ालीन" ;+ cat_N = mkN "बिलली" feminine;+ ceiling_N = mkN "छत" feminine ;+ chair_N = mkN "कुर्सी" ;+ cheese_N = mkN "पनीर" feminine ;+ child_N = mkN "बच्छा" ;+ church_N = mkN "गिरिजा" ;+ city_N = mkN "शहर" ;+ clean_A = mkA "साफ़" ;+ clever_A = mkA "चालाक" ; + close_V2 = mkV2 (compoundV "बनद" do_V2); + coat_N = mkN "कोट" ;+ cold_A = mkA "सरद" ;+ come_V = mkV "आना" ;+ computer_N = mkN "कंपयूटर" ;+ country_N = mkN "देश" ;+ cousin_N = mkCmpdNoun "चच" (mkN "ज़द") ; -- a compund noun made of two nouns+ cow_N = mkN "गाय" feminine ;+ die_V = mkV "मरना" ;+ dirty_A = mkA "गंदा" ;+ distance_N3 = mkN3 (mkN "फ़ासला") (mkPrep "का" "की") "के" "से" ;+ doctor_N = mkN "डाकटर" ;+ dog_N = mkN "कुतता" ;+ door_N = mkN "दरवाज़ा" ;+ drink_V2 = mkV2 (mkV "पीना");+ easy_A2V = mkA "आसान" "" ; -- chek for A or a+ eat_V2 = mkV2 (mkV "खाना") "" ;+ empty_A = mkA "ख़ाली" ;+ enemy_N = mkN "दुश्मन" ;+ factory_N = mkN "कारख़ाना" ;+ father_N2 = mkN2 (mkN "बाप") (mkPrep "क" "की") "के" ;+ fear_N = mkN "डर";+ fear_VS = mkV "डरना";+ find_V2 = mkV2 (mkV "पाना") ;+ fish_N = mkN "मछली" ;+ floor_N = mkN "फ़रश" ;+ forget_V2 = mkV2 (mkV "भूलना") ;+ fridge_N = mkN "फ़रिज" ;+ friend_N = mkN "दोस्त" masculine ;+ fruit_N = mkN "फल" ;+-- fun_AV = mkAV (regA "फ़ुन") ;+ garden_N = mkN "बाग़" ; -- chek for g.+ girl_N = mkN "लड़की" ;+ glove_N = mkN "दसताना" ;+ gold_N = mkN "सोना" ;+ good_A = mkA "अच्छा" ;+ go_V = mkV "जाना" ;+ green_A = mkA "हरा" ;+ harbour_N = mkCmpdNoun "बंदर" (mkN "गाह") ;+ hate_N = mkN "नफ़रत" ;+ hate_V2 = mkV2 (compoundV "नफ़रत" do_V2) ;+ hat_N = mkN "टोपी" ;+-- have_V2 = dirV2 (mk5V "हवe" "हस" "हद" "हद" "हविनग") ;+ hear_V2 = mkV2 (mkV "सुनना") ;+ hill_N = mkN "पहाड़" ;+ hope_N = mkN "उममीद" ;+ hope_VS = (compoundV "उममीद" do_V2);+ horse_N = mkN "घोड़ा" ;+ hot_A = mkA "गरम" ;+ house_N = mkN "घर" ;+ important_A = mkA "ज़रूरी" ; -- check about z+ industry_N = mkN "सनत" feminine ;+ iron_N = mkN "लोहा" ;+ king_N = mkN "राजा" ;+ know_V2 = mkV2 (mkV "जानना") ;+ know_VS = mkV "जानना";+ lake_N = mkN "झील" feminine ;+ lamp_N = mkN "चिराग" ;+ learn_V2 = mkV2 (mkV "सीखना") ;+ leather_N = mkN "चमड़ा" ;+ leave_V2 = mkV2 (mkV "चलना") ;+ like_V2 = mkV2 (compoundV "पसंद" do_V2);+ listen_V2 = mkV2 (mkV "सुनना") ;+ live_V = mkV "रहना" ; ---- touch+ long_A = mkA "लंबा" ;+ lose_V2 = mkV2 (compoundV "खो" do_V2) ;+ love_N = mkN "प्यार" ;+ love_V2 = mkV2 (compoundV "प्यार" do_V2) "को";+ man_N = mkN "आदमी" masculine;+ married_A2 = mkIrregA "शादी शुदा" "से" ;+ marriage = mkN "शादी " ;+ meat_N = mkN "मांस" ;+ milk_N = mkN "दूध" ;+ moon_N = mkN "चांद" ;+ mother_N = mkN "माँ" feminine; -- not covered need to be discussed+ mountain_N = mkN "पहाड़" ;+ music_N = mkN "संगीत" ;+ narrow_A = mkA "तंग" ;+ new_A = mkA "नया" ;+ newspaper_N = mkN "अख़बार" ;+ oil_N = mkN "तेल" ;+ old_A = mkA "बूढ़ा" ;+ open_V2 = mkV2 (mkV "खोलना") ;+ paint_V2A = mkV2 (compoundV "रंग" do_V2) ;+ paper_N = mkN "काग़ज़" ;+ paris_PN = mkPN "पैरिस" ;+ peace_N = mkN "अमन" ;+ pen_N = mkN "क़लम" ;+ planet_N = mkN "सितारा" ;+ plastic_N = mkN "पलासटिक" ;+ play_V2 = mkV2 (mkV "खेलना") ;+ policeman_N = mkCmpdNoun "पुलिस" (mkN "wाला") ; + priest_N = mkN "पुजारी" ;+-- probable_AS = mkAS (regA "परoबबलe") ;+ queen_N = mkN "रानी" ;+ radio_N = mkN "रेडिो" ;+ rain_N = mkN "बारिश" ;+ rain_V0 = compoundV "बारिश" (mkV "होना" ) ;+ read_V2 = mkV2 (mkV "पढ़ना");+ red_A = mkA "लाल" ;+ religion_N = mkN "मज़हब" ;+ restaurant_N = mkN "रेसटोरांट" ;+-- river_N = mkN "दरिया" masculine ;+ rock_N = mkN "चटटान" ;+ roof_N = mkN "छत" masculine ;+ rubber_N = mkN "रबर" ;+ run_V = mkV "दौड़ना" ;+ say_VS = mkV "कहना" ;+ school_N = mkN "सकूल" ;+ science_N = mkN "सािनस" ; -- vgyan+ sea_N = mkN "समंदर" ;+ seek_V2 = mkV2 (compoundV "तलाश" do_V2) ;+ see_V2 = mkV2 (mkV "देखना") ;+ sell_V3 = mkV3 (mkV "बेचना") "को" "";+ send_V3 = mkV3 (mkV "भेजना") "को" "";+ sheep_N = mkN "भीड़" feminine ;+ ship_N = mkN "जहाज़" ;+ shirt_N = mkN "कुर्ता" feminine;+ shoe_N = mkN "जूता" ;+ shop_N = mkN "दूकान" feminine ;+ short_A = mkA "छोटा" ;+ silver_N = mkN "चांदी" ;+ sister_N = mkN "बहन" feminine ;+ sleep_V = mkV "सोना" ;+ small_A = mkA "छोटा" ;+ snake_N = mkN "सांप" ;+ sock_N = mkN "जुरराब" feminine ;+ speak_V2 = mkV2 (mkV "बोलना") ;+ star_N = mkN "तारा" ;+ steel_N = mkN "इसपात" ; -- something like ispat+ stone_N = mkN "पत्थर" ;+ stove_N = mkN "चूल्हा" ;+-- student_N = mkCmpdNoun "t-लब" (mkN "eलम") ; -- something vidrati+ stupid_A = mkA "बेवक़ूफ़" ;+ sun_N = mkN "सूरज" ; -- swrya+ switch8off_V2 = mkV2 (compoundV "बंद" do_V2) ;+ switch8on_V2 = mkV2 (mkV "चलाना") ;+ table_N = mkN "मेज़" feminine ;+ talk_V3 = mkV3 (mkV "बोलना") "से" "के बारे मे";+ teacher_N = mkN "उस्ताद" ; -- adyapak+ teach_V2 = mkV2 (mkV "सिखाना") ;+ television_N = mkN "टीवी" ;+ thick_A = mkA "मोटा" ;+ thin_A = mkA "पतला" ;+ train_N = mkN "रेल गाड़ी" ;+ travel_V = (compoundV "सफ़र" do_V2) ;+-- tree_N = mkN "पेड़" masculine ;+ trousers_N = mkN "पतलून" ;+ ugly_A = mkA "बदसूरत" ;+ understand_V2 = mkV2 (mkV "समझना") ;+ university_N = mkN "यूनिवरसिटी" ;+ village_N = mkN "गाँव" ; -- check for n or N+ wait_V2 = mkV2 (compoundV "इंतज़ार" do_V2) "का" ; -- something prtkXa+ walk_V = mkV "चलना" ;+ warm_A = mkA "गरम" ; something gngna+ war_N = mkN "लड़ाई" ;+ watch_V2 = mkV2 (mkV "देखना") ;+ water_N = mkN "पानी" masculine ; -- not covered masculine ending with y+ white_A = mkA "सफ़ेद" ;+ window_N = mkN "खिड़की" ;+ wine_N = mkN "शराब" feminine ;+ win_V2 = mkV2 (mkV "जीतना") ;+ woman_N = mkN "औरत" feminine ;+ wonder_VQ = compoundV "हैरान" (mkV "होना") ;+ wood_N = mkN "लकड़ी" ;+ write_V2 = mkV2 (mkV "लिखना") ;+ yellow_A = mkA "पीला" ;+ young_A = mkA "जवान" ;+ do_V2 = mkV2 (mkV "करना") ;+ now_Adv = mkAdv "अब" ;+ already_Adv = mkAdv "पहले ही" ;+ song_N = mkN "गीत" ;+ add_V3 = mkV3 (mkV "जोड़ना") "को" "मीं"; -- confirm+ number_N = mkN "हनदसह" ;+ put_V2 = mkV2 (mkV "डालना") ;+ stop_V = mkV "रुकना" ;+ jump_V = compoundV "छलांग" (mkV "लगाना") ;++ left_Ord = {s = "बायाँ" ; n = singular};+ right_Ord = {s= "दायाँ" ; n = singular};+ far_Adv = mkAdv "दूर" ;+ correct_A = mkA "सहीह" ;+ dry_A = mkA "सूखा" ;+ dull_A = mkA "नलिक" ;+ full_A = mkA "भरा" ;+ heavy_A = mkA "भारी" ;+ near_A = mkA "पास" ;+ rotten_A = mkA "सड़ा" ;+ round_A = mkA "गोल" ;+ sharp_A = mkA "तेज़" ;+ smooth_A = mkA "चिकना" ;+ straight_A = mkA "सीधा" ;+ wet_A = mkA "गीला" ; ----+ wide_A = mkA "चौड़ा" ;+ animal_N = mkN "जानवर" ;+ ashes_N = mkN "राख" feminine; -- FIXME: plural only?+ back_N = mkN "पीठ" feminine ;+-- bark_N = mkN "बरक" ;+-- belly_N = mkN "दh-नय" ;+ blood_N = mkN "ख़ून" ;+ bone_N = mkN "हडडी" feminine ;+ breast_N = mkN "छाती" ; --stan+ cloud_N = mkN "बादल" ;+ day_N = mkN "दिन" ;+ dust_N = mkN "धूल" ;+ ear_N = mkN "कान" ;+ earth_N = mkN "ज़मीन" feminine ;+ egg_N = mkN "अंडा" ;+ eye_N = mkN "आंख" feminine ;+ fat_N = mkN "मोटा" ;+ feather_N = mkN "पंख" ;+ fingernail_N = mkN "नाखून" ;+ fire_N = mkN "आग" feminine ;+ flower_N = mkN "फूल" ;+ fog_N = mkN "धुंध" feminine ;+ foot_N = mkN "पांव" ; -- not properly covered need to be discussed+ forest_N = mkN "जंगल" ;+ grass_N = mkN "घास" feminine ;+-- guts_N = mkN "गुत" ; -- FIXME: no singular+ hair_N = mkN "बाल" ;+ hand_N = mkN "हाथ" ;+ head_N = mkN "सिर" ;+ heart_N = mkN "दिल" ;+ horn_N = mkN "सींग" ;+ husband_N = mkN "पति" ;+ ice_N = mkN "बर्फ़" feminine ;+ knee_N = mkN "घुटना" ;+ leaf_N = mkN "पतता" ;+ leg_N = mkN "टांग" feminine ;+ liver_N = mkN "कलेजा" ;+ louse_N = mkN "जू" ;+ mouth_N = mkN "मुह" ; + name_N = mkN "नाम" ;+ neck_N = mkN "गर्दन" feminine ;+ night_N = mkN "रात" feminine ;+ nose_N = mkN "नाक" ;+-- person_N = mkN "XKष" ;+ road_N = mkN "सड़क" ;+ root_N = mkN "जड़" feminine ;+ rope_N = mkN "रससी" ;+ salt_N = mkN "नमक" feminine ;+ sand_N = mkN "रेत" feminine ;+ seed_N = mkN "बीज" ;+ skin_N = mkN "जलद" feminine ; -- crm+ sky_N = mkN "आसमान" ;+ smoke_N = mkN "धुाँ"; -- singular masc nouns ending with aN,wN yet to be implemented+ snow_N = mkN "बर्फ़" feminine ;+ stick_N = mkN "लकड़ी" ;+ tail_N = mkN "दुम" ;+ tongue_N = mkN "ज़बान" feminine ;+ tooth_N = mkN "दांत" masculine;+ wife_N = mkN "बीवी" ;+ wind_N = mkN "हवा" ;+-- wing_N = mkN "पर" ;+ worm_N = mkN "कीड़" ;+ year_N = mkN "साल" ;+-- blow_V = mkV "चलन" ;+ breathe_V = compoundV "साँस" (mkV "लेना" ) ;+ burn_V = mkV "जलाना" ;+ dig_V = mkV "खोदना" ;+ fall_V = mkV "गिरना" ;+ float_V = mkV "तैरना" ;+ flow_V = mkV "बहना" ;+ fly_V = mkV "ुड़ना" ;+-- freeze_V = mkV "जमन";+ give_V3 = mkV3 (mkV "देना") "को" "";+ laugh_V = mkV "हंसना" ;+ lie_N = mkN "झूट" masculine ;+ lie_V = compoundV "झूट" (mkV "बोलना" );+ play_V = mkV "खेलना" ;+ sew_V = mkV "सीना" ;+ sing_V = mkV "गाना" ;+ sit_V = mkV "बैठना" ;+ smell_V = mkV "सूंगना" ;+ spit_V = mkV "थूकना" ;+ stand_V = compoundV "खड़ा" (mkV "होना" ); -- a type of compound verb made of two verbs i.e 'kHRa' also inflects, rather than a string and verb should be fixed+ swell_V = mkV "सूजना" ;+ swim_V = mkV "तैरना" ;+ think_V = mkV "सोचना" ;+ turn_V = mkV "मुड़ना";+-- vomit_V = compoundV "अलय" (mkV "करन") feminine ;+ bite_V2 = mkV2 (mkV "काटना") ;+ count_V2 = mkV2 (mkV "गिनना") ;+ cut_V2 = mkV2 (mkV "काटना") ;+ fear_V2 = mkV2 (mkV "डरना") ;+ fight_V2 = mkV2 (mkV "लड़ना") ;+-- hit_V2 = mkV2 (compoundV "तh-wकर" (mkV "मरन" ));+ hold_V2 = mkV2 (mkV "पकड़ना") ;+-- hunt_V2 = mkV2 (compoundV "Xकर" do_V2);+ kill_V2 = mkV2 (compoundV "मार" (mkV "डालना" )) ;+ pull_V2 = mkV2 (mkV "खींचना");+ push_V2 = mkV2 (mkV "धकेलना") "को" ;+ rub_V2 = mkV2 (mkV "रगड़ना") ;+ scratch_V2 = mkV2 (mkV "खरोंचना") "को" ;+-- split_V2 = mkV2 (mkV "बनत") "कo::" ;+-- squeeze_V2 = dirV2 (regV "सक़ुeeज़e") ;+-- stab_V2 = dirV2 (regDuplV "सतब") ;+ suck_V2 = mkV2 (mkV "चूसना") ;+ throw_V2 = mkV2 (mkV "फेंकना") ;+ tie_V2 = mkV2 (mkV "बांधना") ;+ wash_V2 = mkV2 (mkV "धोना") ;+-- wash_V2 = mkV2 (mkV "पोंछना") ;++---- other_A = regA "oतहeर" ;++-- grammar_N = mkN "गरदन" ;+-- language_N = mkN "ज़बन" feminine ;+-- rule_N = mkN "अषwल" ;++---- added 4/6/2007+ john_PN = mkPN "जान" ;+ question_N = mkN "सवाल" ;+ ready_A = mkA "तैयार" ;+ reason_N = mkN "वजह" feminine ;+ today_Adv = mkAdv "आज" ;+-- uncertain_A = mkA ["ग़यर यक़यनय"] ;+ + +}
@@ -36,29 +36,31 @@ regNoun : Str -> Noun ; regNoun s = case s of { - _ + "य" => mkN05 (s); - _ + (""|"े"|"ह") => mkN01 (s); - _ + "य" => mkN03 (s); - _ + ("ं"|"wं") => mkN04 (s); + _ + "या" => mkN05 (s); + _ + ("ा") => mkN01 (s); + _ + "ी" => mkN03 (s); + _ + ("ाँ"|"ा") => mkN04 (s); + _ + "ाँव" => mkN12 s; _ + "w^" => mkN12 (s); _ => regNoun2 (s) }; regNoun2 : Str -> Noun; - regNoun2 s = let c = if_then_else Bool (eq (last s) "" ) True (if_then_else Bool (eq (last s) "ह") True (if_then_else Bool (eq (last s) "े") True False)) + regNoun2 s = let c = if_then_else Bool (eq (last s) "" ) True (if_then_else Bool (eq (last s) "ह") True (if_then_else Bool (eq (last s) "e") True False)) in case c of { False => mkN02 (s); True => mkN01 (s) }; reggNoun : Str -> Gender -> Noun ; - reggNoun s g = let c = if_then_else Bool (eq (last s) "" ) True (if_then_else Bool (eq (dp 2 s) "ं") True (if_then_else Bool (eq (dp 2 s) "wं") True False)) + reggNoun s g = let c = if_then_else Bool (eq (last s) "" ) True (if_then_else Bool (eq (dp 2 s) "ण") True (if_then_else Bool (eq (dp 2 s) "wण") True False)) in case <s,g,c> of { <_ + "त",Fem,_> => mkN10 (s); <_ + "त",Masc,_> => mkN02 (s); - <_ + "w",Masc,_> => mkN11 (s); + <_ + "ू",Masc,_> => mkN11 (s); <_ + "w",Fem,_> => mkN07 (s); <_ + "य",Fem,_> => mkN05 (s); <_ + "य",Masc,_> => mkN02 (s); + <_ + "ी",Masc,_> => mkN13 (s); <_,Fem,False> => mkN08 (s); <_,Fem,_> => mkN09 (s) @@ -69,15 +71,15 @@ mkN01 : Str -> Noun ; mkN01 lRka = let end = last (lRka) ; - lRk = if_then_else Str (eq end "े") lRka (tk 1 lRka) - in mkNoun (lRka) (lRk+"ै") (lRk+"ै") - (lRk+"ै") (lRk+"wं") (lRk+"w") + lRk = if_then_else Str (eq end "e") lRka (tk 1 lRka) + in mkNoun (lRka) (lRk+"े") (lRk+"े") + (lRk+"े") (lRk+"ोँ") (lRk+"ो") Masc ; -- masculine nouns does not end with a, h, e, an mkN02 : Str -> Noun ; - mkN02 mrd = let mrdwN = mrd+"wं" ; + mkN02 mrd = let mrdwN = mrd+"ोँ" ; mrdw = tk 1 mrdwN in mkNoun mrd mrd mrd mrd mrdwN mrdw @@ -86,24 +88,32 @@ -- feminine Nouns end with y mkN03 : Str -> Noun ; - mkN03 krsy = let krsyaN = krsy+"ं" ; - krsywN = krsy+"wं" ; + mkN03 krsy = let krsyaN = krsy+"ँ" ; + krsywN = krsy+"योँ" ; krsyw = tk 1 krsywN in mkNoun krsy krsy krsy krsyaN krsywN krsyw Fem ; +-- masculine nouns ending at i: e.g Admi: + mkN13 : Str -> Noun ; + mkN13 krsy = let + krsywN = krsy+"योँ" ; + krsyw = tk 1 krsywN + in mkNoun krsy krsy krsy + krsy krsywN krsyw + Masc ; + -- feminine nouns end with a, aN, wN mkN04 : Str -> Noun ; mkN04 n = case last n of { - "" => let bla = n - in mkNoun bla bla bla - (bla+"y^यं") (bla+"w^ं") (bla+"w^") + "ा" => mkNoun n n n + (n+"ाेँ") (n+"ाोँ") (n+"ाो") Fem ; _ => let maN = n ; -- ends with aN and wN ma = tk 1 maN in mkNoun maN maN maN - (ma+"y^यं") (ma+"w^ं") (ma+"w^ं") + (maN+"ाँेँ") (maN+"ाँोँ") (maN+"ाँो") Fem }; @@ -112,14 +122,14 @@ mkN05 : Str -> Noun ; mkN05 gRya = let gRy = (tk 1 gRya) in mkNoun gRya gRya gRya - (gRya+"ं") (gRy+"wं") (gRy+"w") + (gRya+"ँ") (gRy+"ोँ") (gRy+"ो") Fem ; -- feminine nouns end with w mkN07 : Str -> Noun ; mkN07 khshbw = mkNoun khshbw khshbw khshbw - (khshbw + "y^यं") (khshbw + "w^ं") (khshbw + "w^") + (khshbw + "ेँ") (khshbw + "ोँ") (khshbw + "ो") Fem ; -- Loan arabic feminine nouns end with t @@ -127,7 +137,7 @@ mkN10 : Str -> Noun ; mkN10 ndamt = mkNoun ndamt ndamt ndamt - (ndamt+"यं") (ndamt+"wं") (ndamt+"w") + (ndamt+"ें") (ndamt+"w:ं") (ndamt+"ो") Fem ; -- Worst case function mkN : (_,_,_,_,_,_ : Str) -> Gender -> Noun ; @@ -136,28 +146,28 @@ mkN06 : Str -> Noun ; mkN06 rya = mkNoun rya rya rya - (rya+"y^यं") (rya+"w^ं") rya + (rya+"y^यण") (rya+"w^ण") rya Fem ; -- feminine nouns that do not end with a, N, w, wN mkN08 : Str -> Noun ; mkN08 ktab = mkNoun ktab ktab ktab - (ktab+"यं") (ktab+"wं") (ktab+"w") + (ktab+"ेँ") (ktab+"ोँ") (ktab+"ो") Fem ; -- Loan arabic feminine nouns mkN09 : Str -> Noun ; mkN09 ahsan = mkNoun ahsan ahsan ahsan - (ahsan+"त") (ahsan+"त") (ahsan+"w") + (ahsan+"ात") (ahsan+"ात") (ahsan+"ो") Fem ; --- (variants{ahsan+"त";ahsan+"wं"}) +-- (variants{ahsan+"त";ahsan+"wण"}) -- Loan persian maculine nouns end with w mkN11 : Str -> Noun ; mkN11 alw = mkNoun alw alw alw - alw (alw+"w^ं") (alw+"w^") + alw (alw+"ोँ") (alw+"ो") Masc ; @@ -167,17 +177,19 @@ mkN12 bhao = mkNoun (bhao) (bhao) (bhao) (bhao) (bhao) (bhao) Masc ; + + ----2 Determiners - IDeterminer = {s:Gender => Str ; n : Number}; + IDeterminer = {s:Gender => Case => Str ; n : Number}; makeDet : Str -> Str -> Str -> Str -> Number -> Determiner = \s1,s2,s3,s4,n -> { s = table { - Sg => table { - Masc => s1 ; - Fem => s2 + Sg => table { + Masc => table {_ => s1} ; + Fem => table {_ => s2} } ; Pl => table { - Masc => s3 ; - Fem => s4 + Masc => table { _ => s3} ; + Fem => table {_ => s4} } } ; @@ -186,11 +198,11 @@ makeIDet : Str -> Str -> Number -> IDeterminer = \s1,s2,n -> { s = table { - Masc => s1; - Fem => s2 + Masc => table {_ =>s1}; + Fem => table {_ =>s2} }; n = n - }; + }; -- Proposition @@ -290,8 +302,8 @@ }; makePersPron : PersPron; - makePersPron = mkPersPron "m(a)यं" "m(o)j'|ह" "" "t(o)w " "t(o)j|ह" "t(o)w " "t(o)म" "t(o)म" "t(o)म" "ाप" "ाप" "ाप" "y(i)ह" "a(i)स" "" "w(o)ह" "a(o)स" "" - "h(a)म" "h(a)म" "" "t(o)म" "t(o)म" "t(o)म" "t(o)म" "t(o)म" "t(o)म" "ाप" "ाप" "ाप" "y(i)ह" "a(i)न" "" "w(o)ह" "a(o)न" "" ; + makePersPron = mkPersPron "m(a)यण" "m(o)j'|ह" "" "t(o)w " "t(o)j|ह" "t(o)w " "t(o)म" "t(o)म" "t(o)म" "अप" "अप" "अप" "y(i)ह" "a(i)स" "" "w(o)ह" "a(o)स" "" + "h(a)म" "h(a)म" "" "t(o)म" "t(o)म" "t(o)म" "t(o)म" "t(o)म" "t(o)म" "अप" "अप" "अप" "y(i)ह" "a(i)न" "" "w(o)ह" "a(o)न" "" ; mkPron : (x1,x2,x3:Str) -> {s:Case => Str} = \y1,y2,y3 -> { s = @@ -317,13 +329,14 @@ }; ----2 Adjectives --- defined in ResUrd + makeIrregA : Str -> Adjective = \str -> {s = \\_,_,_,_ => str} ; + ----3 Verbs CommonVF = {s : VTense => UPerson => Number => Gender => Str} ; mkVerb : (x1: Str) -> Verb = \inf -> - let root = (tk 2 inf); inf_obl = ((tk 1 inf) + "ै"); inf_fem = ((tk 1 inf) + "य") + let root = (tk 2 inf); inf_obl = ((tk 1 inf) + "े"); inf_fem = ((tk 2 inf) + "यी") in { s = table { VF tense person number gender => (mkCmnVF root tense person number gender).s ; @@ -343,38 +356,43 @@ mkCmnVF : Str -> VTense -> UPerson -> Number -> Gender -> {s:Str} = \root,t,p,n,g -> {s = - let form1 = case (last root) of { - ""|"ा"|"w" => root + "w^ं" ; - _ => root + "wं" - }; - form2 = case (last root) of { - ""|"ा"|"w" => root + "y^ं" ; - _ => root + "यं" - }; + let form1 = case (last root) of + { + "ा"|"ो"|"ी" => root + "ऊँ"; + "े" => (tk 1 root)+ "ूँ"; + _ => root + "ूँ" + }; + form2 = case (last root) of + { + "ा"|"ो" => root + "एँ"; + "ी" => root + "येँ"; + "े" => (tk 1 root)+ "ेँ"; + _ => root + "ेँ" + } in case <t,p,n,g> of { <Subj,Pers1,Sg,_> => form1 ; <Subj,Pers1,Pl,_> => form2 ; <Subj,_,_,_> => (mkImpert root p n g).s ; <Perf,_,_,_> => case root of { - "हw" => (mkPastInd root p n g).s ; - "ज" => (mkPastInd "गय" p n g).s ; - "कर" => (mkPastInd "क" p n g).s ; - "दै" => (mkPastInd "द" p n g).s ; - "लै" => (mkPastInd "ल" p n g).s ; - _ => (mkPastInd root p n g).s }; - <Imperf,Pers2_Familiar,Sg,Masc> => root + "तै"; - <Imperf,Pers2_Familiar,Sg,Fem> => root + "तय"; --variants{root+"तय" ; root+"तयं"}; - <Imperf,Pers2_Familiar,Pl,Masc> => root + "तै"; - <Imperf,Pers2_Familiar,Pl,Fem> => root+"तयं"; - <Imperf,Pers2_Respect,Sg,Masc> => root + "तै"; - <Imperf,Pers2_Respect,Sg,Fem> => root + "तय"; --variants{root+"तय" ; root+"तयं"}; - <Imperf,Pers2_Respect,Pl,Masc> => root + "तै"; - <Imperf,Pers2_Respect,Pl,Fem> => root+"तयं"; - <Imperf,_,Sg,Masc> => root+"त"; - <Imperf,_,Sg,Fem> => root+"तय"; + "हो" => (mkPastInd root p n g).s ; + "जा" => (mkPastInd "गय" p n g).s ; + "कर" => (mkPastInd "किय" p n g).s ; + -- "दE" => (mkPastInd "द" p n g).s ; + -- "लE" => (mkPastInd "ल" p n g).s ; + _ => (mkPastInd root p n g).s }; + <Imperf,Pers2_Familiar,Sg,Masc> => root + "ते"; + <Imperf,Pers2_Familiar,Sg,Fem> => root + "ती"; --variants{root+"तय" ; root+"तयण"}; + <Imperf,Pers2_Familiar,Pl,Masc> => root + "ते"; + <Imperf,Pers2_Familiar,Pl,Fem> => root+"ती"; + <Imperf,Pers2_Respect,Sg,Masc> => root + "ते"; + <Imperf,Pers2_Respect,Sg,Fem> => root + "ती"; --variants{root+"तय" ; root+"तयण"}; + <Imperf,Pers2_Respect,Pl,Masc> => root + "ते"; + <Imperf,Pers2_Respect,Pl,Fem> => root+"ती"; + <Imperf,_,Sg,Masc> => root+"ता"; + <Imperf,_,Sg,Fem> => root+"ती"; <Imperf,_,Pl,Masc> => root+"ते"; - <Imperf,_,Pl,Fem> => root+"तयं" + <Imperf,_,Pl,Fem> => root+"ती" } } ; @@ -382,20 +400,27 @@ mkPastInd : Str -> UPerson -> Number -> Gender -> {s:Str} = \root,p,n,g -> {s = let roo = root ; a = case (last root) of { - ""|"ा"|"w"|"क" => "य" ; - _ => "" + "ा"|"ो"|"ी" => "या" ; + "े" => (tk 1 roo) + "िया" ; + _ => "ा" } ; y = case (last root) of { - ""|"ा"|"w" => "y^य" ; - _ => "य" + "ा"|"ो" => "यी" ; + "ी" => "" ; + "े" => (tk 1 roo) + "ी" ; + "िय" => (tk 2 roo) + "ी" ; + _ => "ी" } ; e = case (last root) of { - ""|"ा"|"w"|"क" => "y^ै" ; - _ => "ै" + "ा"|"ो"|"ी"|"क" => "ये" ; + "े" => (tk 1 roo) + "ी" ; + _ => "े" } ; yN = case (last root) of { - ""|"ा"|"w" => "y^यं" ; - _ => "यं" + "ा"|"ो"|"ी" => "यीँ" ; + "िय" => (tk 2 roo) + "ी" ; + "े" => (tk 1 roo) + "ीँ" ; + _ => "यँ" } ; in @@ -430,20 +455,19 @@ mkImpert : Str -> UPerson -> Number -> Gender -> {s:Str} = \root,p,n,g -> {s = let roo = root ; w = case (last root) of { - ""|"ा"|"w" => "w^" ; - _ => "w" + "ा" => "ओ" ; + "ो" => "ओ" ; + _ => "ो" } ; yN = case (last root) of { - ""|"ा"|"w" => "y^यं" ; - _ => "यं" - } ; - yE = case (last root) of { - ""|"ा"|"w" => "y^यै" ; - _ => "यै" + "ा"|"ो" => "एँ" ; + _ => "एँ" } ; e = case (last root) of { - ""|"ा"|"w" => "y^ै" ; - _ => "ै" + "ा"|"ो" => "ए" ; + "े" => "" ; + "ी" => "ये" ; + _ => "ए" } in case <p,n,g> of { <Pers1,_,_> => ""; --nonExist ;
@@ -1,2 +1,2 @@ concrete NounHin of Noun = CatHin ** NounHindustani with- (ResHindustani = ResHin) ;+ (ResHindustani = ResHin);
@@ -1,127 +1,117 @@-concrete NumeralHin of Numeral = CatHin ** open ResHin,Prelude,ParamX in { --- By Harald Hammarström --- Modification for Hinu Shafqat Virk - flags coding=utf8 ; ---- still old Devanagari coding - - -param DForm = unit | ten ; -param DSize = sg | r2 | r3 | r4 | r5 | r6 | r7 | r8 | r9 ; -param Size = singl | less100 | more100 ; - -oper LinDigit = {s : DForm => Str ; size : DSize ; n : Number} ; - - -lincat Dig = { s:Str ; n : Number}; -lincat Digit = LinDigit ; -lincat Sub10 = {s : DForm => Str ; size : DSize ; n : Number} ; -lincat Sub100 = {s : Str ; size : Size ; n : Number} ; -lincat Sub1000 = {s : Str ; s2 : Str ; size : Size ; n : Number } ; -lincat Sub1000000 = { s : Str ; n : Number } ; - -lin num x0 = - {s = table { - NCard => x0.s ; - NOrd => x0.s ++ "واں" -- need to use mkOrd which will make irregular ordinals but it gives path error - }; - n = x0.n - } ; -oper mkOrd : Str -> Str = - \s -> case s of { - "عك" => "پہلا"; - "دo" => "دوسرا"; - "تi:ن" => "تعسرا"; - "چa:ر" => "چوتh-ا"; - ("چحاہ"|"چحا"|"چحاi") => "چh-ٹا"; - _ => s ++ "واں" - }; --- {s = \\_ => x0.s ; n = x0.n} ; - - -oper mkNum : Str -> Str -> DSize -> LinDigit = - \do -> \bis -> \sz -> - {s = table {unit => do ; ten => bis } ; - size = sz ; n = Pl} ; - -lin n2 = mkNum "دو" "بیس" r2 ; -lin n3 = mkNum "تین" "تیس" r3 ; -lin n4 = mkNum "چار" "چالیس" r4 ; -lin n5 = mkNum "پانچ" "پچاس" r5 ; -lin n6 = mkNum "چh-" "ساتh-" r6 ; -lin n7 = mkNum "سات" "ستر" r7; -lin n8 = mkNum "آتh-" "اسی" r8; -lin n9 = mkNum "نو" "نوے" r9 ; - -oper mkR : Str -> Str -> Str -> Str -> Str -> Str -> Str -> Str -> Str -> DSize => Str = \a1 -> \a2 -> \a3 -> \a4 -> \a5 -> \a6 -> \a7 -> \a8 -> \a9 -> table { - sg => a1 + "اہ" ; - r2 => a2 + "i:س" ; - r3 => a3 + "تi:س" ; - r4 => a4 + "a:لi:س" ; - r5 => a5 + "ان" ; - r6 => a6 + "ساٹح" ; - r7 => a7 + "ہاتتار" ; - r8 => a8 + "a:سi:" ; - r9 => a9 + "a:ناvع" -} ; - -oper rows : DSize => DSize => Str = table { - sg => mkR "گیارہ" "iكك" "iكات" "عكت" "iكیاو" "iك" "iك" "iكی" "iكی" ; - r2 => mkR "بارہ" "بای" "بات" "بای" "باو" "با" "با" "بای" "ب" ; - r3 => mkR "تیر" "تی" "تین" "تنت" "ترپ" "تری" "ت" "تر" "تر" ; - r4 => mkR "چود" "چوب" "چون" "چوا" "چوو" "چون" "چوہ" "چور" "چور" ; - r5 => mkR "پند" "پچی" "پین" "پنتا" "پچپ" "پین" "پہ" "پچ" "پچ" ; - r6 => mkR "سول" "چh-ب" "چh-ت" "چh-ی" "چh-پ" "چh-یا" "چh-" "چh-ی" "چh-ی" ; - r7 => mkR "ستر" "ستا" "سین" "سنت" "ستاو" "ستا" "سر" "ست" "ستا" ; - r8 => mkR "اتh-ار" "اتh-ای" "اڑ" "اڑت" "اتh-او" "اڑ" "اتh-" "اتh-" "اتh-" ; - r9 => table {sg => "انیس" ; r2 => "انتیس" ; r3 => "انتالیس" ; - r4 => "انچاس" ; r5 => "انستh-" ; r6 => "انہتر" ; - r7 => "اناسی" ; - r8 => "انانوے" ; r9 => "ننانوے" } -} ; - -oper ss : Str -> {s : Str} = \s -> {s = s} ; - -lin pot01 = {s = table {unit => "ایك" ; _ => "دuممی" } ; size = sg ; n = Sg} ; -lin pot0 d = d ; -lin pot110 = {s = "داس" ; size = less100 ; n = Pl} ; -lin pot111 = {s = rows ! sg ! sg ; size = less100 ; n = Pl} ; -lin pot1to19 d = {s = rows ! d.size ! sg ; size = less100 ; n = d.n} ; -lin pot0as1 n = {s = n.s ! unit ; size = table {sg => singl ; _ => less100} ! n.size ; n = n.n } ; - -lin pot1 d = {s = d.s ! ten ; size = less100 ; n = d.n} ; -lin pot1plus d e = {s = rows ! e.size ! d.size ; size = less100 ; n = d.n} ; - -lin pot1as2 n = {s = n.s ; s2 = "دuممی" ; size = n.size ; n = n.n} ; -lin pot2 d = {s = (mksau (d.s ! unit) d.size) ; - s2 = d.s ! unit ++ "لاكh-" ; size = more100 ; n = d.n} ; -lin pot2plus d e = - {s = (mksau (d.s ! unit) d.size) ++ e.s ; - s2 = (d.s ! unit) ++ "لاكh-" ++ (mkhazar e.s e.size) ; - size = more100 ; n = d.n} ; - -lin pot2as3 n = {s = n.s ; n = n.n} ; -lin pot3 n = {s = table { singl => ekhazar ; - less100 => n.s ++ "ہزار" ; - more100 => n.s2 } ! n.size ; n = n.n} ; -lin pot3plus n m = - {s = table {singl => ekhazar ; - less100 => n.s ++ "ہزار" ; - more100 => n.s2 } ! n.size ++ m.s ; n = n.n} ; - -lin D_0 = { s = "0" ; n = Sg}; -lin D_1 = { s = "1" ; n = Sg}; -lin D_2 = { s = "2" ; n = Pl}; -lin D_3 = { s = "3" ; n = Pl}; -lin D_4 = { s = "4" ; n = Pl}; -lin D_5 = { s = "5" ; n = Pl}; -lin D_6 = { s = "6" ; n = Pl}; -lin D_7 = { s = "7" ; n = Pl}; -lin D_8 = { s = "8" ; n = Pl}; -lin D_9 = { s = "9" ; n = Pl}; -lin IDig d = { s = \\_ => d.s ; n = d.n} ; -lin IIDig d dg = { s = \\df => Prelude.glue (dg.s ! df) d.s ; n = Pl }; - -oper ekhazar : Str = variants {"ہزار" ; "ایك" ++ "ہزار"} ; -oper mkhazar : Str -> Size -> Str = \s -> \sz -> table {singl => ekhazar ; _ => s ++ "ہزار"} ! sz ; -oper mksau : Str -> DSize -> Str = \s -> \sz -> table {sg => "سو" ; _ => s ++ "سو"} ! sz ; -} +-- By Harald Hammarstr+-- Modification for Urdu Shafqat Virk+++concrete NumeralHin of Numeral = CatHin ** open ResHin,CommonHindustani,ParamX, Prelude in {+flags coding=utf8 ;++param DForm = unit | ten ;+param DSize = sg | r2 | r3 | r4 | r5 | r6 | r7 | r8 | r9 ;+param Size = singl | less100 | more100 ; ++oper LinDigit = {s : DForm => Str ; size : DSize ; n : Number} ;+++lincat Dig = { s:Str ; n : Number};+lincat Digit = LinDigit ;+lincat Sub10 = {s : DForm => Str ; size : DSize ; n : Number} ;+lincat Sub100 = {s : Str ; size : Size ; n : Number} ;+lincat Sub1000 = {s : Str ; s2 : Str ; size : Size ; n : Number } ; +lincat Sub1000000 = { s : Str ; n : Number } ;++lin num x0 = + {s = table {+ NCard => x0.s ; + NOrd => Prelude.glue x0.s "वाँ" -- need to use mkOrd x0.s but it gives linking error + };+ n = x0.n+ } ;+++oper mkNum : Str -> Str -> DSize -> LinDigit = + \do -> \bis -> \sz -> + {s = table {unit => do ; ten => bis } ; + size = sz ; n = Pl} ;++lin n2 = mkNum "दो" "बीस" r2 ;+lin n3 = mkNum "तीन" "तीस" r3 ;+lin n4 = mkNum "चार" "चालीस" r4 ;+lin n5 = mkNum "पांच" "पचास" r5 ;+lin n6 = mkNum "छे" "साटh'" r6 ; +lin n7 = mkNum "सात" "सततर" r7; +lin n8 = mkNum "आठ" "अससी" r8;+lin n9 = mkNum "नौ" "नववे" r9 ;++oper mkR : Str -> Str -> Str -> Str -> Str -> Str -> Str -> Str -> Str -> DSize => Str = \a1 -> \a2 -> \a3 -> \a4 -> \a5 -> \a6 -> \a7 -> \a8 -> \a9 -> table {+ sg => a1 + "ह" ;+ r2 => a2 + "स" ;+ r3 => a3 + "तीस" ;+ r4 => a4 + "ालीस" ;+ r5 => a5 + "न" ;+ r6 => a6 + "सठ" ;+ r7 => a7 + "ततर" ;+ r8 => a8 + "ासी" ;+ r9 => a9 + "ानwवे"+} ;++oper rows : DSize => DSize => Str = table {+ sg => mkR "गयार" "इककी" "इकत" "इकत" "इकयाव" "इक" "इकह" "इकय" "इकय" ; + r2 => mkR "बार" "बाई" "बत" "बैत" "बाव" "बा" "बह" "बय" "ब" ;+ r3 => mkR "तेर" "तेई" "तैं" "तैंत" "तिरप" "तिर" "तिह" "तिर" "तिर" ;+ r4 => mkR "चौद" "चौबी" "चौं" "चौव" "चww" "चौँ" "चौह" "चw+र" "चौर" ;+ r5 => mkR "पंदर" "पचची" "पैं" "पैंत" "पचप" "पैँ" "पिछ" "पच" "पिच" ;+ r6 => mkR "सोल" "चa'बबी" "छात" "छिय" "छपप" "छिया" "चिह" "छिय" "छिय" ;+ r7 => mkR "सतर" "सतताई" "सैं" "सैंत" "सताव" "सढ़" "सतह" "सत" "सत" ;+ r8 => mkR "अठार" "टh'ाई" "अढ़" "अढ़त" "अठाव" "अढ़" "अटह" "अठ" "अठ" ; + r9 => table {sg => "उननीस" ; r2 => "उनततीस" ; r3 => "उंतालीस" ; + r4 => "उंचास" ; r5 => "उनसठ" ; r6 => "उनहततर" ; + r7 => "उनससी" ; + r8 => "उनननवे" ; r9 => "निन्यानवे" } +} ;++oper ss : Str -> {s : Str} = \s -> {s = s} ;++lin pot01 = {s = table {unit => "एक" ; _ => "दमी" } ; size = sg ; n = Sg} ;+lin pot0 d = d ; +lin pot110 = {s = "दस" ; size = less100 ; n = Pl} ; +lin pot111 = {s = rows ! sg ! sg ; size = less100 ; n = Pl} ;+lin pot1to19 d = {s = rows ! d.size ! sg ; size = less100 ; n = d.n} ;+lin pot0as1 n = {s = n.s ! unit ; size = table {sg => singl ; _ => less100} ! n.size ; n = n.n } ;++lin pot1 d = {s = d.s ! ten ; size = less100 ; n = d.n} ;+lin pot1plus d e = {s = rows ! e.size ! d.size ; size = less100 ; n = d.n} ;++lin pot1as2 n = {s = n.s ; s2 = "दमी" ; size = n.size ; n = n.n} ;+lin pot2 d = {s = (mksau (d.s ! unit) d.size) ; + s2 = d.s ! unit ++ "लाख" ; size = more100 ; n = d.n} ;+lin pot2plus d e = + {s = (mksau (d.s ! unit) d.size) ++ e.s ; + s2 = (d.s ! unit) ++ "लाख" ++ (mkhazar e.s e.size) ; + size = more100 ; n = d.n} ;++lin pot2as3 n = {s = n.s ; n = n.n} ;+lin pot3 n = {s = table { singl => ekhazar ;+ less100 => n.s ++ "हज़ार" ; + more100 => n.s2 } ! n.size ; n = n.n} ;+lin pot3plus n m = + {s = table {singl => ekhazar ;+ less100 => n.s ++ "हज़ार" ; + more100 => n.s2 } ! n.size ++ m.s ; n = n.n} ;++lin D_0 = { s = "०" ; n = Sg};+lin D_1 = { s = "१" ; n = Sg};+lin D_2 = { s = "२" ; n = Pl};+lin D_3 = { s = "३" ; n = Pl};+lin D_4 = { s = "४" ; n = Pl};+lin D_5 = { s = "५" ; n = Pl};+lin D_6 = { s = "६" ; n = Pl};+lin D_7 = { s = "७" ; n = Pl};+lin D_8 = { s = "८" ; n = Pl};+lin D_9 = { s = "९" ; n = Pl};+lin IDig d = { s = \\_ => d.s ; n = d.n} ;+lin IIDig d dg = { s = \\df => Prelude.glue (dg.s ! df) d.s ; n = Pl }; ++oper ekhazar : Str = variants {"हज़ार" ; "एक" ++ "हज़ार"} ; +oper mkhazar : Str -> Size -> Str = \s -> \sz -> table {singl => ekhazar ; _ => s ++ "हज़ार"} ! sz ;+oper mksau : Str -> DSize -> Str = \s -> \sz -> table {sg => "एक" ++ "सौ" ; _ => s ++ "सौ"} ! sz ;+}
@@ -47,7 +47,16 @@ -- Proper names mkPN : Str -> PN = \s -> let n = regNoun s in {s = n.s ! Sg ; g = n.g ; lock_PN = <>} ; - personalPN : Str -> Str -> Str -> Str -> Number -> Gender -> UPerson -> Pron = \s1,s2,s3,sp,nn,g,p -> let n = mkPron s1 s2 s3 in {s = n.s ; a = toAgr nn p g ; ps = sp ; lock_Pron = <>}; + personalPN : Str -> Str -> Str -> Str -> Str -> Str -> Str -> Number -> Gender -> UPerson -> Pron = + \s1,s2,s3,smp,sfp,pmp,pfp,nn,g,p -> let n = mkPron s1 s2 s3 in + {s = n.s ; + a = toAgr nn p g ; + ps = \\n,g => case <n,g> of { + <Sg,Masc> =>smp ; + <Sg,Fem> => sfp ; + <Pl,Masc> => pmp ; + <Pl,Fem> => pfp } ; lock_Pron = <>}; + demoPN : Str -> Str -> Str -> Quant = \s1,s2,s3 -> let n = makeDemonPronForm s1 s2 s3 in {s = n.s ; a = defaultAgr ; lock_Quant = <>}; mkDet : Str -> Str -> Str -> Str -> Number -> Det = \s1,s2,s3,s4,nb -> let dt = makeDet s1 s2 s3 s4 nb in {s = dt.s ; n = nb ; lock_Det = <>}; mkIP : (x1,x2,x3:Str) -> Number -> Gender -> IP = \s1,s2,s3,n,g -> let p = mkIntPronForm s1 s2 s3 in { s = p.s ; n = n ; g = g ; lock_IP = <>}; @@ -62,6 +71,8 @@ mkA : Str -> Str -> A2 = \a,c -> let n = regAdjective a in {s = n.s; c2 = c} ** {lock_A2 = <>} ; } ; + + mkIrregA : Str -> Str -> A2 = \str,c -> makeIrregA str ** {c2 = c ; lock_A2 = <>} ; --2 Verbs @@ -99,6 +110,22 @@ --3 Determiners and quantifiers + mkIQuant : (s1,_,_,_,_,_,_,_,_,_,_,s12:Str) -> IQuant = + \smd,smo,smv,sfd,sfo,sfv,pmd,pmo,pmv,pfd,pfo,pfv -> + {s = \\n,g,c => case <n,g,c> of { + <Sg,Masc,Dir> =>smd ; + <Sg,Masc,Obl> =>smo; + <Sg,Masc,Voc> =>smv ; + <Sg,Fem,Dir> =>sfd ; + <Sg,Fem,Obl> =>sfo; + <Sg,Fem,Voc> =>sfv ; + <Pl,Masc,Dir> =>pmd ; + <Pl,Masc,Obl> =>pmo; + <Pl,Masc,Voc> =>pmv ; + <Pl,Fem,Dir> =>pfd ; + <Pl,Fem,Obl> =>pfo; + <Pl,Fem,Voc> =>pfv} ; + lock_IQuant = <>}; -- mkQuant : overload { mkQuant : Pron -> Quant ; -- mkQuant : (no_sg, no_pl, none_sg, non_pl : Str) -> Quant ;
@@ -1,2 +1,2 @@ concrete RelativeHin of Relative = CatHin ** RelativeHindustani with - (ResHindustani = ResHin) ; + (ResHindustani = ResHin);
@@ -1,2 +1,2 @@-instance ResHin of ResHindustani = DiffHin ** open CommonHindustani, Prelude, Predef in { +instance ResHin of ResHindustani = DiffHin ** open CommonHindustani, Prelude, Predef in { } ;
@@ -1,2 +1,2 @@ concrete SentenceHin of Sentence = CatHin ** SentenceHindustani with - (ResHindustani = ResHin) ; + (ResHindustani = ResHin);
@@ -1,129 +1,130 @@-concrete StructuralHin of Structural = CatHin ** - open MorphoHin, ParadigmsHin, Prelude, NounHin,ParamX,CommonHindustani in { - - flags optimize=all ; - coding = utf8; - - lin - above_Prep = mkPrep "wपर" "wपर" ; - after_Prep = mkPrep ["कै बेद"] ["कै बेद"] ; - all_Predet = ss "तमम" ; - almost_AdA, almost_AdN = mkAdN "तqरयब" ; - although_Subj = ss "गरचh-" ; - always_AdV = ss "हमयXह" ; - and_Conj = sd2 [] "wर" ** {n = Pl} ; - because_Subj = ss "कयwनकh-" ; - before_Prep = mkPrep "पहलै" "पहलै" ; - behind_Prep = mkPrep "पयचh-ै" "पयचh-ै" ; - between_Prep = mkPrep "दरमयं" "दरमयं" ; - both7and_DConj = sd2 "दwनwं" "wर" ** {n = Pl} ; - but_PConj = ss "लयकन" ; - by8agent_Prep = mkPrep "" "" ; - by8means_Prep = mkPrep "" "" ; --- can8know_VV,can_VV = mkV "सकन" ** { isAux = True} ; - during_Prep = mkPrep ["कै दरमयं"] ["कै दरमयं"] ; - either7or_DConj = sd2 "कwय यक" "य" ** {n = Sg} ; - everybody_NP = MassNP (UseN (ParadigmsHin.mkN "हर कwय" "हर कwय" "हर कwय" "हर कwय" "हर कwय" "हर कwय" Masc )); -- not a good way coz need to include NounHin --- every_Det = mkDet "हर" Sg; - everything_NP = MassNP (UseN (ParadigmsHin.mkN "हर चयज़" "हर चयज़" "हर चयज़w" "सब चयज़यं" "सब चयज़wं" "सब चयज़w" Masc )); - everywhere_Adv = mkAdv "हर जगह" ; --- few_Det = mkDet "चनद" Pl ; - first_Ord = {s = "पेहल" ; n = Sg} ; --DEPRECATED - for_Prep = mkPrep "कयलयै" "कयलयै" ; - from_Prep = mkPrep "सै" "सै" ; - he_Pron = personalPN "wह" "स" "" "स क" Sg Masc Pers3_Distant ; - here_Adv = mkAdv "यहं" ; - here7to_Adv = mkAdv "यहं पर" ; - here7from_Adv = mkAdv "यहं सै" ; - how_IAdv = ss "कयसै" ; - how8many_IDet = makeIDet "कतनै" "कतनय" Pl ; - if_Subj = ss "गर" ; - in8front_Prep = mkPrep ["कै समनै"] ["कै समनै"] ; - i_Pron = personalPN "मयं" "मजh-" "" "मयर" Sg Masc Pers1; - in_Prep = mkPrep "में" "में" ; - it_Pron = personalPN "यह" "यह" "यह" "स क" Sg Masc Pers3_Near; - less_CAdv = {s = "कम" ; p = ""} ; --- many_Det = mkDet "बहत ज़यदह" Pl ; - more_CAdv = {s = "ज़यदh-" ; p = "" } ; - most_Predet = ss "ज़यदह तर" ; - --much_Det = mkDet "बहत" Pl ; --- must_VV = { --- s = table { --- VVF VInf => ["हवे तॉ"] ; --- VVF VPres => "मुसत" ; --- VVF VPPart => ["हद तॉ"] ; --- VVF VPresPart => ["हविनग तॉ"] ; --- VVF VPast => ["हद तॉ"] ; --# notpresent --- VVPastNeg => ["हदn'त तॉ"] ; --# notpresent --- VVPresNeg => "मुसतn'त" --- } ; --- isAux = True --- } ; ------b no_Phr = ss "नॉ" ; - no_Utt = ss "नहयं" ; - on_Prep = mkPrep "पर" "पर" ; --- one_Quant = demoPN "यक" "यक" "यक" ; -- DEPRECATED - only_Predet = ss "सरf" ; - or_Conj = sd2 [] "य" ** {n = Sg} ; - otherwise_PConj = ss "य पh-र" ; - part_Prep = mkPrep "" "" ; - please_Voc = ss "महरबनि" ; - possess_Prep = mkPrep "क" "कय" ; - quite_Adv = ss "कहमॉसह" ; - she_Pron = personalPN "wह" "स" "wह" "स कय" Sg Fem Pers3_Distant ; - so_AdA = ss "सॉ" ; - somebody_NP = MassNP (UseN (ParadigmsHin.mkN "कwय" "कwय" "कwय" "कwय" "कwय" "कwय" Masc )); - --someSg_Det = mkDet "कचh-" Sg ; - --somePl_Det = mkDet "कचh-" Pl ; - something_NP = MassNP (UseN (ParadigmsHin.mkN "कwय चयज़" "कwय चयज़" "कwय चयज़" "कh- चयज़यं" "कh- चयज़wं" "कh- चयज़w" Masc )); - somewhere_Adv = mkAdv "कहिन पर" ; - that_Quant = demoPN "wह" "स" "न" ; - that_Subj = ss "कह"; - there_Adv = mkAdv "wहं" ; - there7to_Adv = mkAdv "wहं पर" ; - there7from_Adv = mkAdv ["wहं सै"] ; - therefore_PConj = ss "स लयै" ; - they_Pron = personalPN "wह" "wह" "wह" "न क" Pl Masc Pers3_Distant ; ---- - this_Quant = demoPN "यह" "स" "न"; - through_Prep = mkPrep ["मयं सै"] ["मयं सै"] ; - too_AdA = ss "बहत" ; - to_Prep = mkPrep "कw" "कw" ; - under_Prep = mkPrep "नयचै" "नयचै" ; - very_AdA = ss "बहत" ; --- want_VV = mkV "चहन" ** { isAux = False} ; - we_Pron = personalPN "हम" "हम" "हम" "हमर" Pl Masc Pers1 ; - whatSg_IP = mkIP "कय" "किस" "किस" Sg Masc ; - whatPl_IP = mkIP "कय" "किन" "किन" Pl Masc ; - when_IAdv = ss "कब" ; - when_Subj = ss "कब" ; - where_IAdv = ss "कहं" ; - which_IQuant = {s = \\_ => "कwन सय"} ; --- whichPl_IDet = makeDet "कwन स" "कwन सय" "कwन सै" "कwन सय" ; --- whichSg_IDet = makeDet "कwन स" "कwन सय" "कwन सै" "कwन सय" ; - whoSg_IP = mkIP "कwन" "किस" "किस" Sg Masc ; - whoPl_IP = mkIP "कwन" "कन" "कनहwं" Pl Masc ; - why_IAdv = ss "कयwं" ; - without_Prep = mkPrep ["कै बघयर"] ["कै बघयर"] ; - with_Prep = mkPrep ["कै सतh-"] ["कै सतh-"] ; --- yes_Phr = ss "हं" ; - yes_Utt = ss "हं" ; - youSg_Pron = personalPN "तम" "तम" "तम" "तमh-र" Sg Masc Pers2_Casual ; - youPl_Pron = personalPN "तम" "तम" "तम" "तमh-र" Pl Masc Pers2_Casual ; - youPol_Pron = personalPN "ाप" "ाफ" "ाफ" "ाप क" Sg Masc Pers2_Respect ; - no_Quant = demoPN " कwय नहयं" "कwय नहयं" "कwय नहयं" ; - not_Predet = {s="नहयं"} ; - if_then_Conj = sd2 "गर" "तw" ** {n = Sg} ; - at_least_AdN = mkAdN ["कम ज़ कम"] ; - at_most_AdN = mkAdN ["ज़यदह सै ज़यदह"]; - nothing_NP = MassNP (UseN (ParadigmsHin.mkN "कwय चयज़ नहयं" "कwय चयज़ नहयं" "कwय चयज़ नहयं" "कwय चयज़ नहयं" "कwय चयज़ नहयं" "कwय चयज़ नहयं" Masc )); - except_Prep = mkPrep "सwै" "सwै" ; - nobody_NP = MassNP (UseN (ParadigmsHin.mkN "कwय नहयं" "कwय नहयं" "कwय नहयं" "कwय नहयं" "कwय नहयं" "कwय नहयं" Masc )); - - as_CAdv = {s = "ेतन" ; p = "जतन"} ; - - have_V2 = mkV2 (mkV "रकh-न") "" ; - - language_title_Utt = ss "रदw" ; - -} - +concrete StructuralHin of Structural = CatHin ** + open MorphoHin, ParadigmsHin, Prelude, NounHin,ParamX,CommonHindustani in {++ flags optimize=all ;+ coding = utf8;+ + lin+ above_Prep = mkPrep ["के ऊपर"] ["के ऊपर"] ;+ after_Prep = mkPrep ["के बाद"] ["के बाद"] ;+ all_Predet = ss "तमाम" ;+ almost_AdA, almost_AdN = mkAdN "तक़रीबन" ;+ although_Subj = ss "अगरचि" ;+ always_AdV = ss "हमेशा" ;+ and_Conj = sd2 [] "और" ** {n = Pl} ;+ because_Subj = ss "क्योँकि" ;+ before_Prep = mkPrep ["से पहले"] ["से पहले"] ; + behind_Prep = mkPrep ["के पीछे"] ["के पीछे"] ;+ between_Prep = mkPrep ["के दरमियान"] ["के दरमियान"] ;+ both7and_DConj = sd2 "दोनों" "और" ** {n = Pl} ;+ but_PConj = ss "लेकिन" ;+ by8agent_Prep = mkPrep "" "" ;+ by8means_Prep = mkPrep "" "" ;+ can8know_VV,can_VV = mkV "सकना" ** { isAux = True} ;+ during_Prep = mkPrep ["के दरमियान"] ["के दरमियान"] ;+ either7or_DConj = sd2 "कोई एक" "या" ** {n = Sg} ;+ everybody_NP = MassNP (UseN (ParadigmsHin.mkN "हर कोई" "हर कोई" "हर कोई" "हर कोई" "हर कोई" "हर कोई" Masc )); + every_Det = mkDet "हर" "हर" "हर" "हर" Sg;+ everything_NP = MassNP (UseN (ParadigmsHin.mkN "हर चीज़" "हर चीज़" "हर चीज़ोँ" "सब चीज़ेँ" "सब चीज़ोँ" "सब चीज़ोँ" Masc ));+ everywhere_Adv = mkAdv "हर जगह" ;+ few_Det = mkDet "चंद" "चंद" "चंद" "चंद" Pl ;+ first_Ord = {s = "" ; n = Sg} ; --De:PRe:CATe:D+ for_Prep = mkPrep ["के लिये"] ["के लिये"] ;+ from_Prep = mkPrep "से" "से" ;+ he_Pron = personalPN "वह" "उस" "" "उस का" "उस की" "उस के" "उस की" Sg Masc Pers3_Distant ;+ here_Adv = mkAdv "यहाँ" ;+ here7to_Adv = mkAdv ["यहाँ पर"] ;+ here7from_Adv = mkAdv ["यहाँ से"] ;+ how_IAdv = ss "कैसे" ;+ how8many_IDet = makeIDet "कितने" "कितनी" Pl ;+ how8much_IAdv = ss "कितना" ;+ if_Subj = ss "अगर" ;+ in8front_Prep = mkPrep ["के सामने"] ["के सामने"] ;+ i_Pron = personalPN "मैं" "मुझ" "" "मेरा" "मेरी" "मेरे" "मेरी" Sg Masc Pers1;+ in_Prep = mkPrep "में" "में" ;+ it_Pron = personalPN "यह" "इस" "यह" "इस का" "इस की" "उस के" "उस की" Sg Masc Pers3_Near;+ less_CAdv = {s = "कम" ; p = ""} ;+ many_Det = mkDet "बहुत" "बहुत" "बहुत" "बहुत" Pl ;+ more_CAdv = {s = "ज़्यादा" ; p = "से" } ;+ most_Predet = ss "सब से ज़्यादा" ;+ much_Det = mkDet "बहुत" "बहुत" "बहुत" "बहुत" Sg ;+-- must_VV = {+-- s = table {+-- VVF VInf => ["हवe तo"] ;+-- VVF VPres => "मुसत" ;+-- VVF VPPart => ["हद तo"] ;+-- VVF VPresPart => ["हविनग तo"] ;+-- VVF VPast => ["हद तo"] ; --# notpresent+-- VVPastNeg => ["हदn'त तo"] ; --# notpresent+-- VVPresNeg => "मुसतn'त"+-- } ;+-- isAux = True+-- } ;+ no_Utt = ss "नहीं" ;+ on_Prep = mkPrep "पर" "पर" ;+-- one_Quant = demoPN "" ; -- De:PRe:CATe:D+ only_Predet = ss "सिर्फ़" ;+ or_Conj = sd2 [] "या" ** {n = Sg} ;+ otherwise_PConj = ss "नहीं तो" ;+ part_Prep = mkPrep "" "" ;+-- please_Voc = ss "" ;+ possess_Prep = mkPrep "का" "की" ;+ quite_Adv = ss "काफ़ी" ;+ she_Pron = personalPN "वह" "उस" "उस" "उस का" "उस की" "उस के" "उस की" Sg Fem Pers3_Distant ; -- chek with prasad about 'Us'+ so_AdA = ss "तो" ;+ somebody_NP = MassNP (UseN (ParadigmsHin.mkN "कोई" "कोई" "कोई" "कोई" "कोई" "कोई" Masc ));+ someSg_Det = mkDet "कुछ" "कुछ" "कुछ" "कुछ" Sg ;+ somePl_Det = mkDet "कुछ" "कुछ" "कुछ" "कुछ" Pl ;+ something_NP = MassNP (UseN (ParadigmsHin.mkN ["कोई चीज़"] ["कोई चीज़"] ["कोई चीज़"] ["कोई चीज़"] ["कोई चीज़"] ["कोई चीज़"] Masc ));+ somewhere_Adv = mkAdv ["कहीं"] ;+ that_Quant = demoPN "वह" "उस" "उन" ;+ that_Subj = ss "कि";+ there_Adv = mkAdv "वहाँ" ;+ there7to_Adv = mkAdv ["वहाँ पर"] ;+ there7from_Adv = mkAdv ["वहाँ से"] ;+ therefore_PConj = ss "इस लिये" ;+ they_Pron = personalPN "वह" "वह" "वह" "उन का" "उन की" "उन के" "उन की" Pl Masc Pers3_Distant ; ---- + this_Quant = demoPN "यह" "इस" "इन"; + through_Prep = mkPrep ["में से"] ["में से"] ;+ too_AdA = ss "बहुत" ;+ to_Prep = mkPrep "को" "को" ; -- ** {lock_Prep = <>};+ under_Prep = mkPrep ["के नीचे"] ["के नीचे"] ; -- ** {lock_Prep = <>};+ very_AdA = ss "बहुत" ;+ want_VV = mkV "चाहना" ** { isAux = False} ;+ we_Pron = personalPN "हम" "हम" "हम" "हमारा" "हमारी" "हमारे" "हमारी" Pl Masc Pers1 ;+ whatSg_IP = mkIP "क्या" "क्या" "क्या" Sg Masc ; -- confirm+ whatPl_IP = mkIP "क्या" "क्या" "क्या" Pl Masc ;+ when_IAdv = ss "कब" ;+ when_Subj = ss "कब" ;+ where_IAdv = ss "कहाँ" ;+ which_IQuant = mkIQuant ["कौन सा"] ["कौन से"] "" ["कौन सी"] ["कौन सी"] ""+ ["कौन से"] ["कौन से"] "" ["कौन सी"] ["कौन सी"] "" ; -- need to put right forms Prasad+-- whichPl_IDet = makeDet "" ;+-- whichSg_IDet = makeDet "";+ whoSg_IP = mkIP "कौन" "किस" "किस" Sg Masc ;+ whoPl_IP = mkIP "कौन" "किन" "किनहों" Pl Masc ;+ why_IAdv = ss "क्यों" ;+-- without_Prep = mkPrep ;+ with_Prep = mkPrep ["के साथ"] ["के साथ"] ;+-- yes_Phr = ss "???" ;+ yes_Utt = ss "हाँ" ;+ youSg_Pron = personalPN "तू" "तुम" "तुम" "तुमहारा" "तुमहारी" "तुमहारे" "तुमहारी" Sg Masc Pers2_Casual ;+ youPl_Pron = personalPN "तुम" "तुम" "तुम" "तुमहारा" "तुमहारी" "तुमहारे" "तुमहारी" Pl Masc Pers2_Casual ;+ youPol_Pron = personalPN "आप" "आप" "आप" "आप का" "आप की" "आप के" "आप की" Sg Masc Pers2_Respect ;+-- no_Quant = demoPN "कोई नहीं" ; + not_Predet = {s="नहीं"} ;+-- if_then_Conj = sd2 "गर तो" ** {n = Sg} ; + at_least_AdN = mkAdN ["कम से कम"] ;+ at_most_AdN = mkAdN ["ज़्यादा से ज़्यादा"];+-- nothing_NP = MassNP (UseN (ParadigmsHin.mkN "कुछ नहीं" Masc )); + except_Prep = mkPrep "के सिवाय" "के सिवाय";+-- nobody_NP = MassNP (UseN (ParadigmsHin.mkN "कोई नहीं" Masc )); ++ as_CAdv = {s = "ितना" ; p = "जितना"} ;++-- have_V2 = mkV2 "";++ language_title_Utt = ss "हिन्दी" ;++}+
@@ -2,3 +2,4 @@ concrete SymbolHin of Symbol = CatHin ** SymbolHindustani with (ResHindustani = ResHin) ; +
@@ -1,2 +1,3 @@ concrete VerbHin of Verb = CatHin ** VerbHindustani with- (ResHindustani = ResHin) ;+ (ResHindustani = ResHin);+
@@ -1,4 +1,6 @@-instance DiffHin of DiffHindustani = open CommonHindustani, Prelude in {+instance DiffHin of DiffHindustani = open CommonHindustani, ResHindustani,Prelude in {+--instance DiffHin of DiffHindustani = CommonHindustani ** open Prelude in {+flags coding = utf8; oper Clause : Type = {s : VPHTense => Polarity => Order => Str} ; mkClause : NP -> VPH -> Clause = \np,vp -> {@@ -31,9 +33,9 @@ VPPerfFut => {fin = [] ; inf = Prelude.glue ((vp.s ! VPTense VPPerf agr).inf ++ hw p n) (copula CFuture n p g) } ; VPPerfPresCont => {fin = copula CPresent n p g ; inf = (vp.s ! VPTense VPPres agr).inf ++ raha g n } ; VPPerfPastCont => {fin = copula CPast n p g ; inf = (vp.s ! VPTense VPPres agr).inf ++ raha g n } ; - VPPerfFutCont => {fin = [] ; inf = Prelude.glue ((vp.s ! VPTense VPPres agr).inf ++ raha g n ++ hw p n) (copula CFuture n p g )} ; - VPSubj => case vp.prog of { True => {fin = (vp.s ! VPTense VPFutr agr).inf ++ hw p n ; inf = "Xayd" } ;- _ => {fin = (vp.s ! VPTense VPFutr agr).inf ; inf = "Xayd" } } + VPPerfFutCont => {fin = [] ; inf = Prelude.glue ((vp.s ! VPTense VPPres agr).inf ++ raha g n ++ hw p n) (copula CFuture n p g) } ; + VPSubj => case vp.prog of { True => {fin = (vp.s ! VPTense VPFutr agr).inf ++ hw p n ; inf = "s*a:yd" } ;+ _ => {fin = (vp.s ! VPTense VPFutr agr).inf ; inf = "s*a:yd" } } }; @@ -41,7 +43,7 @@ quest = case ord of { ODir => [];- OQuest => "kya" }; + OQuest => "kya:" }; na = case b of { Pos => [];@@ -49,7 +51,7 @@ nahim = case b of { Pos => [];- Neg => "nhyN" };+ Neg => "nahi:m." }; in case vt of { VPSubj => quest ++ np.s ! subj ++ vp.obj.s ++ vp.ad ++ vp.comp ! np.a ++ na ++ vps.inf ++ vps.fin ++ vp.embComp ;@@ -76,15 +78,15 @@ VPPerfFut => {fin = [] ; inf = Prelude.glue ((vp.s ! VPStem).inf ++ cka g n ++ hw p n) (copula CFuture n p g) } ; VPPerfPresCont => {fin = copula CPresent n p g ; inf = (vp.s ! VPStem).inf ++ raha g n } ; VPPerfPastCont => {fin = copula CPast n p g ; inf = (vp.s ! VPStem).inf ++ raha g n } ; - VPPerfFutCont => {fin = [] ; inf = Prelude.glue ((vp.s ! VPStem).inf ++ raha g n ++ hw p n) (copula CFuture n p g ) } ;- VPSubj => {fin = insertSubj p (vp.s ! VPStem).inf ; inf = "xayd" }+ VPPerfFutCont => {fin = [] ; inf = Prelude.glue ((vp.s ! VPStem).inf ++ raha g n ++ hw p n) (copula CFuture n p g) } ;+ VPSubj => {fin = insertSubj p (vp.s ! VPStem).inf ; inf = "s*a:yd" } }; quest = case ord of { ODir => [];- OQuest => "kya" }; + OQuest => "kya:" }; na = case b of { Pos => [];@@ -92,42 +94,149 @@ nahim = case b of { Pos => [];- Neg => "nhyN" }; + Neg => "nahi:m." }; in case t of { VPSubj => quest ++ subj ++ vp.obj.s ++ vp.ad ++ vp.comp ! agr ++ na ++ vps.inf ++ vps.fin ++ vp.embComp; _ => quest ++ subj ++ vp.obj.s ++ vp.ad ++ vp.comp ! agr ++ nahim ++ vps.inf ++ vps.fin ++ vp.embComp}; } ; -{- Verb : Type = {s : VerbForm => Str} ;-- - predV v = {- s = \\vh => - case vh of {- VPTense VPPres (Ag g n p) => {fin = copula CPresent n p g ; inf = v.s ! VF Imperf p n g } ;- VPTense VPPast (Ag g n p) => {fin = [] ; inf =v.s ! VF Perf p n g} ;- VPTense VPFutr (Ag g n p) => {fin = [] ; inf = Prelude.glue (v.s ! VF Subj p n g) (copula CFuture n p g)} ;- VPTense VPPerf (Ag g n p) => { fin = [] ; inf = v.s ! Root ++ cka g n } ; - VPStem => {fin = [] ; inf = v.s ! Root};- _ => {fin = [] ; inf = v.s ! Root} - };- obj = {s = [] ; a = defaultAgr} ;- subj = VIntrans ;- inf = v.s ! Inf;- ad = [];- embComp = [];- prog = False ;- comp = \\_ => []- } ;--} np2pronCase ppf npc a = case npc of { NPC c => ppf ! c; NPObj => ppf ! Obl ; NPErg =>case (fromAgr a).p of {- (Pers3_Near|Pers3_Distant) => Prelude.glue (ppf ! Obl) "nE" ; -- in hindi in case of pronouns nE is tagged to pron rather than a separate word- _ => Prelude.glue (ppf ! Dir) "nE"+ (Pers3_Near|Pers3_Distant) => Prelude.glue (ppf ! Obl) "ne:" ; -- in hindi in case of pronouns nE is tagged to pron rather than a separate word+ _ => Prelude.glue (ppf ! Dir) "ne:" } } ;+ conjThat = "ki" ;+ insertSubj : UPerson -> Str -> Str = \p,s -> + case p of { Pers1 => s ++ "va:n~" ; _ => Prelude.glue s "E:"}; -- check with prasad for vn~+ + agr = "a-gar" ;+ awr = "O+r" ;+ ky = "ki:" ;+ jn = "jin" ;+ js = "jis" ;+ jw = "jo:" ;+ kw = "ko:" ;+ mt = "mat" ;+ nE = "ne:" ;+ nh = "na" ;+ sE = "se:" ;+ waN = "va:n~" ; -- check with prasad+ hE = "he:" ;+ comma = "," ;+ indfArt = "E:k" ; -- check with prasad+ kwd = "xud" ; -- check with prasad++ oper + copula : CTense -> Number -> UPerson -> Gender -> Str = \t,n,p,g ->+ case <t,n,p,g> of {+ <CPresent,Sg,Pers1,_ > => "hu:n~" ;+ <CPresent,Sg,Pers2_Casual,_ > => "he+" ;+ <CPresent,Sg,Pers2_Familiar,_ > => "ho:" ;+ <CPresent,Sg,Pers2_Respect,_ > => "he+m." ;+ <CPresent,Sg,Pers3_Near,_ > => "he+" ;+ <CPresent,Sg,Pers3_Distant,_ > => "he+" ;+ <CPresent,Pl,Pers1,_ > => "he+n~" ;+ <CPresent,Pl,Pers2_Casual,_ > => "ho+" ;+ <CPresent,Pl,Pers2_Familiar,_ > => "ho+" ;+ <CPresent,Pl,Pers2_Respect,_ > => "he+m." ;+ <CPresent,Pl,Pers3_Near,_ > => "he+m." ;+ <CPresent,Pl,Pers3_Distant,_ > => "he+m." ;+ <CPast,Sg,Pers1,Masc > => "t'a:" ;+ <CPast,Sg,Pers1,Fem > => "t'i:" ;+ <CPast,Sg,Pers2_Casual,Masc > => "t'a:" ;+ <CPast,Sg,Pers2_Casual,Fem > => "t'i:" ;+ <CPast,Sg,Pers2_Familiar,Masc > => "t'a:" ;+ <CPast,Sg,Pers2_Familiar,Fem > => "t'i:" ;+ <CPast,Sg,Pers2_Respect,Masc > => "t'e:" ;+ <CPast,Sg,Pers2_Respect,Fem > => "t'i:m." ;+ <CPast,Sg,Pers3_Near,Masc > => "t'a:" ;+ <CPast,Sg,Pers3_Near,Fem > => "t'i:" ;+ <CPast,Sg,Pers3_Distant,Masc > => "t'a:" ;+ <CPast,Sg,Pers3_Distant,Fem > => "t'i:" ;+ <CPast,Pl,Pers1,Masc > => "t'e:" ;+ <CPast,Pl,Pers1,Fem > => "t'i:m." ;+ <CPast,Pl,Pers2_Casual,Masc > => "t'e:" ;+ <CPast,Pl,Pers2_Casual,Fem > => "t'i:m." ;+ <CPast,Pl,Pers2_Familiar,Masc > => "t'e:" ;+ <CPast,Pl,Pers2_Familiar,Fem > => "t'i:m." ;+ <CPast,Pl,Pers2_Respect,Masc > => "t'e:" ;+ <CPast,Pl,Pers2_Respect,Fem > => "t'i:m." ;+ <CPast,Pl,Pers3_Near,Masc > => "t'e:" ;+ <CPast,Pl,Pers3_Near,Fem > => "t'i:m." ;+ <CPast,Pl,Pers3_Distant,Masc > => "t'e:" ;+ <CPast,Pl,Pers3_Distant,Fem > => "t'i:m." ;+ <CFuture,Sg,Pers1,Masc > => "ga:" ;+ <CFuture,Sg,Pers1,Fem > => "gi:" ;+ <CFuture,Sg,Pers2_Casual,Masc > => "ga:" ;+ <CFuture,Sg,Pers2_Casual,Fem > => "gi:" ;+ <CFuture,Sg,Pers2_Familiar,Masc > => "ge:" ;+ <CFuture,Sg,Pers2_Familiar,Fem > => "gi:" ;+ <CFuture,Sg,Pers2_Respect,Masc > => "ge:" ;+ <CFuture,Sg,Pers2_Respect,Fem > => "gi:" ;+ <CFuture,Sg,Pers3_Near,Masc > => "ga:" ;+ <CFuture,Sg,Pers3_Near,Fem > => "gi:" ;+ <CFuture,Sg,Pers3_Distant,Masc > => "ga:" ;+ <CFuture,Sg,Pers3_Distant,Fem > => "gi:" ;+ <CFuture,Pl,Pers1,Masc > => "ge:" ;+ <CFuture,Pl,Pers1,Fem > => "gi:" ;+ <CFuture,Pl,Pers2_Casual,Masc > => "ge:" ;+ <CFuture,Pl,Pers2_Casual,Fem > => "gi:" ;+ <CFuture,Pl,Pers2_Familiar,Masc > => "ge:" ;+ <CFuture,Pl,Pers2_Familiar,Fem > => "gi:" ;+ <CFuture,Pl,Pers2_Respect,Masc > => "ge:" ;+ <CFuture,Pl,Pers2_Respect,Fem > => "gi:" ;+ <CFuture,Pl,Pers3_Near,Masc > => "ge:" ;+ <CFuture,Pl,Pers3_Near,Fem > => "gi:" ;+ <CFuture,Pl,Pers3_Distant,Masc > => "ge:" ;+ <CFuture,Pl,Pers3_Distant,Fem > => "gi:"++ } ; ++ raha : Gender -> Number -> Str = \g,n -> + (regAdjective "raha:").s ! n ! g ! Dir ! Posit ;++ cka : Gender -> Number -> Str = \g,n -> + (regAdjective "cuka:").s ! n ! g ! Dir ! Posit ;+ + hw : UPerson -> Number -> Str = \pp,n -> + case <pp,n> of {+ <Pers1,_> => "hu:n~";+ <_,Pl> => "ho:n~";+ <_,_> => "ho:"+ };+ hwa : Agr -> Str = \agr ->+ let n = (fromAgr agr).n;+ p = (fromAgr agr).p;+ g = (fromAgr agr).g;+ in+ case <n,g> of {+ <Sg,Masc> => "huA:";+ <Sg,Fem> => "huI:";+ <Pl,Masc> => "huE:" ;+ <Pl,Fem> => "huI:"+ }; + -----------------------------------------------+ -- Hindustani Adjectives+ -----------------------------------------------+ + + regAdjective : Str -> Adjective; + regAdjective x = case x of {+ acch + ("a:"|"an") => mkAdjective x ("bahut" ++ x) ("sab se:" ++ x) (acch + "e:") ("bahut" ++ acch + "e:") ("sab se:" ++ acch + "E") (acch + "e:") ("bahut" ++ acch + "e:") ("sab se:" ++ acch + "e:")+ (acch + "i:") ("bahut" ++ acch + "i:") ("sab se:" ++ acch + "i:") (acch + "i:") ("bahut" ++ acch + "i:") ("sab se:" ++ acch + "i:") (acch + "i:") ("bahut" ++ acch + "i:") ("sab se:" ++ acch + "i:")+ (acch +"e:") ("bahut" ++ acch + "e:") ("sab se:" ++ acch + "e:") (acch + "e:") ("bahut" ++ acch + "e:") ("sab se:" ++ acch + "e:") (acch + "e:") ("bahut" ++ acch + "e:") ("sab se:" ++ acch + "e:")+ (acch + "i:") ("bahut" ++ acch + "i:") ("sab se:" ++ acch + "i:") (acch + "i:") ("bahut" ++ acch + "i:") ("sab se:" ++ acch + "i:") (acch + "i:") ("bahut" ++ acch + "i:") ("sab se:" ++ acch + "i:");+ + _ => mkAdjective x ("bahut" ++ x) ("sab se:" ++ x) x ("bahut" ++ x) ("sab se:" ++ x) x ("bahut" ++ x) ("sab se:" ++ x)+ x ("bahut" ++ x) ("sab se:" ++ x) x ("bahut" ++ x) ("sab se:" ++ x) x ("bahut" ++ x) ("sab se:" ++ x)+ x ("bahut" ++ x) ("sab se:" ++ x) x ("bahut" ++ x) ("sab se:" ++ x) x ("bahut" ++ x) ("sab se:" ++ x)+ x ("bahut" ++ x) ("sab se:" ++ x) x ("bahut" ++ x) ("sab se:" ++ x) x ("bahut" ++ x) ("sab se:" ++ x)+ + }; + }
@@ -1,8 +1,9 @@ --# -path=.:../abstract:../common:../prelude:/Users/virk/gf_1/lib/src/hindustani concrete ExtraHin of ExtraHinAbs = CatHin ** open ResHin, Coordination, Prelude, MorphoHin, ParadigmsHin in {-+ flags coding = utf8; lin+ -- GenNP np = {s = \\_,_,_ => np.s ! NPC Obl ++ "ka" ; a = np.a} ; -- each_Det = mkDet "hr kwy" "hr kwy" "hr kwy" "hr kwy" Sg ;
@@ -5,21 +5,21 @@ lin ImpersCl vp = mkSClause " " (agrP3 Masc Sg) vp ; - GenericCl vp = mkSClause "kwy" (agrP3 Masc Sg) vp ; + GenericCl vp = mkSClause "ko:I:" (agrP3 Masc Sg) vp ; CleftNP np rs = let cl = mkSClause (np.s ! NPC rs.c) (np.a) (predAux auxBe); in {s = \\t,p,o => cl.s ! t ! p ! o ++ rs.s ! np.a }; --- CleftAdv ad ss = { s = \\t,b,o => ad.s ! Masc ++ ss.s}; + CleftAdv ad ss = { s = \\t,b,o => ad.s ! Masc ++ ss.s}; --- ExistNP np = --- mkSClause "whaN" (agrP3 (fromAgr np.a).g (fromAgr np.a).n) --- (insertObj (\\_ => np.s ! NPC Obl) (predAux auxBe)) ; + ExistNP np = + mkSClause "vaha:n~" (agrP3 (fromAgr np.a).g (fromAgr np.a).n) + (insertObj (\\_ => np.s ! NPC Dir) (predAux auxBe)) ; ExistIP ip = - let cl = mkSClause ("whaN" ++ ip.s ! Dir) (agrP3 ip.g ip.n) (predAux auxBe); + let cl = mkSClause ("vaha:n~" ++ ip.s ! Dir) (agrP3 ip.g ip.n) (predAux auxBe); in { s = \\t,p,qf => case qf of { QDir => cl.s ! t ! p ! ODir; @@ -31,8 +31,9 @@ ProgrVP vp = (predProg vp) ; - ImpPl1 vp = {s = "Aw" ++ infVP True vp (agrP1 Masc Pl)} ; - ImpP3 np vp = {s = np.s!NPC Dir ++ "kw" ++ (vp.s ! VPImp ).inf ++ "dw"}; +-- ImpPl1 vp = {s = "A:O:" ++ infVP True vp (agrP1 Masc Pl)} ; + ImpPl1 vp = {s = "A:O:" ++ vp.obj.s ++ (vp.s ! VPTense VPFutr (agrP1 Masc Pl)).inf ++ vp.comp ! (agrP1 Masc Pl)} ; + ImpP3 np vp = {s = np.s!NPC Dir ++ "ko:" ++ (vp.s ! VPImp ).inf ++ "do:"}; }
@@ -1,369 +1,373 @@---# -path=.:prelude - -concrete LexiconHin of Lexicon = CatHin ** ---open ResHin, Prelude in { - open ParadigmsHin, Prelude in { - - flags - optimize=values ; - coding = utf8; - - lin - airplane_N = mkN "jHaj" ; --- answer_V2S = mkV2 (compoundV "jwab" (mkV "dyna")) ; --- apartment_N = mkN "kmrh" ; - apple_N = mkN "syb" ; --- art_N = mkN "fn" ; - ask_V2Q = mkV2 (mkV "pwcHna") ; --- baby_N = mkN "bcH" ; - bad_A = mkA "bra" ; - bank_N = mkN "bynk" ; - beautiful_A = mkA "sndr" ; - become_VA = mkV "bnna"; - beer_N = mkN "beer" ; --- beg_V2V = mkV2V (compoundV "altja" (mkV "krna")) "sE" "kh" False; - big_A = mkA "bRa" ; --- bike_N = mkN "saycl" feminine ; --- bird_N = mkN "prndh" ; - black_A = mkA "kala" ; - blue_A = mkA "nyla" ; - boat_N = mkN "naw" ; - book_N = mkN "ktab" feminine ; --- boot_N = mkN "jwta" ; - boss_N = mkN "malk" ; - boy_N = mkN "lRka" ; - bread_N = mkN "rwty" ; - break_V2 = mkV2 (mkV "twRna") ; - broad_A = mkA "cwRa" ; - brother_N2 = mkN2 (mkN "bHay") (mkPrep "ka" "ka") "kE" ; --not correct - brown_A = mkA "bHwra" ; --- butter_N = mkN "mkh-n" ; - buy_V2 = mkV2 (mkV "Krydna"); - camera_N = mkN "kymrH" ; - cap_N = mkN "twpy" ; - car_N = mkN "kar" ; --- carpet_N = mkN "tpay^y" ; - cat_N = mkN "bly" feminine; --- ceiling_N = mkN "ch-t" feminine ; - chair_N = mkN "krsy" ; --- cheese_N = mkN "pnyr" feminine ; - child_N = mkN "bcH" ; - church_N = mkN "grja" ; - city_N = mkN "XHr" ; - clean_A = mkA "saf" ; - clever_A = mkA "catr" ; - close_V2 = mkV2 (compoundV "bnd" do_V2); - coat_N = mkN "kwT" ; - cold_A = mkA "srd" ; - come_V = mkV "Ana" ; - computer_N = mkN "kmpywTr" ; - country_N = mkN "dyX" ; --- cousin_N = mkCmpdNoun "cca" (mkN "zad") ; -- a compund noun made of two nouns - cow_N = mkN "gaE" feminine ; - die_V = mkV "mrna" ; - dirty_A = mkA "gnda" ; --- distance_N3 = mkN3 (mkN "faSlh") (mkPrep "ka") "kE" "sE" ; - doctor_N = mkN "daktr" ; - dog_N = mkN "kta" ; - door_N = mkN "drwza" ; - drink_V2 = mkV2 (mkV "pyna"); - easy_A2V = mkA "Asan" "" ; -- chek for A or a - eat_V2 = mkV2 (mkV "kHana") "" ; - empty_A = mkA "Kaly" ; - enemy_N = mkN "dXmn" ; - factory_N = mkN "karKana" ; --- father_N2 = mkN2 (mkN "pta" irregular) (mkPrep "ka") "kE" ; - fear_VS = mkV "dRna"; - find_V2 = mkV2 (mkV "dHwnda") ; - fish_N = mkN "mcHly" ; - floor_N = mkN "frX" ; - forget_V2 = mkV2 (mkV "bHwlna") ; --- fridge_N = mkN "fryg" ; - friend_N = mkN "dwst" masculine ; - fruit_N = mkN "pHl" ; --- fun_AV = mkAV (regA "fun") ; - garden_N = mkN "baG" ; -- chek for G - girl_N = mkN "lRky" ; - glove_N = mkN "dstana" ; - gold_N = mkN "swna" ; - good_A = mkA "acHa" ; - go_V = mkV "jana" ; - green_A = mkA "Hra" ; --- harbour_N = mkCmpdNoun "bndr" (mkN "gah") ; - hate_V2 = mkV2 (compoundV "nfrt" do_V2) ; - hat_N = mkN "Twpy" ; --- have_V2 = dirV2 (mk5V "have" "has" "had" "had" "having") ; - hear_V2 = mkV2 (mkV "snna") ; --- hill_N = mkN "phaRy" ; --- hope_VS = (compoundV "amyd" do_V2); - horse_N = mkN "gHwRa" ; - hot_A = mkA "grm" ; - house_N = mkN "gHr" ; - important_A = mkA "zrwry" ; -- check about z --- industry_N = mkN "Snet" feminine ; - iron_N = mkN "lwHa" ; - king_N = mkN "raja" ; - know_V2 = mkV2 (mkV "janna") ; - know_VS = mkV "janna"; --- lake_N = mkN "jh-yl" feminine ; - lamp_N = mkN "dya" ; - learn_V2 = mkV2 (mkV "sykHna") ; --- leather_N = mkN "cmRa" ; - leave_V2 = mkV2 (mkV "clna") ; - like_V2 = mkV2 (compoundV "psnd" do_V2); - listen_V2 = mkV2 (mkV "snna") ; - live_V = mkV "rhna" ; ---- touch - long_A = mkA "lmba" ; - lose_V2 = mkV2 (compoundV "kHw" do_V2) ; - love_N = mkN "prym" ; - love_V2 = mkV2 (compoundV "pyar" do_V2) "kw"; - man_N = mkN "Admy" ; --- married_A2 = mkA "Xady " "sE" ; - meat_N = mkN "mas" ; - milk_N = mkN "dwdH" ; - moon_N = mkN "cand" ; - mother_N2 = mkN2 (mkN "mata" feminine) (mkPrep "ky" "ky") "kE"; -- not covered need to be discussed --- mountain_N = mkN "phaRy" ; - music_N = mkN "sngyt" ; --- narrow_A = mkA "baryk" ; - new_A = mkA "nya" ; - newspaper_N = mkN "aKbar" ; - oil_N = mkN "tyl" ; - old_A = mkA "bwRHa" ; - open_V2 = mkV2 (mkV "kHwlna") ; --- paint_V2A = mkV2 (compoundV "rng" do_V2) ; - paper_N = mkN "kaGz" ; - paris_PN = mkPN "pyrs" ; - peace_N = mkN "amn" ; - pen_N = mkN "qlm" ; --- planet_N = mkN "syarh" ; --- plastic_N = mkN "plasTk" ; - play_V2 = mkV2 (mkV "kHylna") ; --- policeman_N = mkCmpdNoun "pwlys" (mkN "wala") ; --- priest_N = (mkN "pyGmbr") ; --- probable_AS = mkAS (regA "probable") ; --- queen_N = mkN "Xhzady" ; --- radio_N = mkN "ryDyw" ; - rain_V0 = compoundV "barX" (mkV "Hwna" ) ; - read_V2 = mkV2 (mkV "pRHna"); - red_A = mkA "lal" ; - religion_N = mkN "dHrm" ; --- restaurant_N = mkN "hwTl" ; - river_N = mkN "drya" masculine ; - rock_N = mkN "cTan" ; - roof_N = mkN "ch-t" masculine ; --- rubber_N = mkN "rbR" ; - run_V = mkV "dwRna" ; - say_VS = mkV "kHna" ; - school_N = mkN "mktb" ; --- science_N = mkN "sans" ; -- vgyan - sea_N = mkN "smndr" ; --- seek_V2 = mkV2 (compoundV "tlaX" do_V2) ; - see_V2 = mkV2 (mkV "dykHna") ; - sell_V3 = mkV3 (mkV "bycna") "kw" ""; - send_V3 = mkV3 (mkV "bHyjna") "kw" ""; - sheep_N = mkN "bHyR" feminine ; - ship_N = mkN "jHaz" ; - shirt_N = mkN "krta" feminine; - shoe_N = mkN "jwta" ; - shop_N = mkN "dwkan" feminine ; - short_A = mkA "cHwTa" ; - silver_N = mkN "candy" ; - sister_N = mkN "bHn" feminine ; - sleep_V = mkV "swna" ; - small_A = mkA "cHwTa" ; - snake_N = mkN "sanp" ; --- sock_N = mkN "jrab" feminine ; - speak_V2 = mkV2 (mkV "bwlna") ; - star_N = mkN "tara" ; --- steel_N = mkN "styl" ; -- something like ispat - stone_N = mkN "ptHr" ; --- stove_N = mkN "cwlha" ; --- student_N = mkCmpdNoun "t-alb" (mkN "elm") ; -- something vidrati - stupid_A = mkA "bEwqwf" ; --- sun_N = mkN "swrj" ; -- swrya - switch8off_V2 = mkV2 (compoundV "bnd" do_V2) ; - switch8on_V2 = mkV2 (mkV "clana") ; - table_N = mkN "myz" feminine ; - talk_V3 = mkV3 (mkV "bwlna") "sE" "kE barE meN"; --- teacher_N = mkN "istad" ; -- adyapak - teach_V2 = mkV2 (mkV "pRHna") ; - television_N = mkN "tywy" ; - thick_A = mkA "mwTa" ; - thin_A = mkA "ptla" ; - train_N = mkN "ryl gaRy" ; - travel_V = (compoundV "sfr" do_V2) ; --- tree_N = mkN "pyR" masculine ; --- ---- trousers_N = mkN "trousers" ; - ugly_A = mkA "bdswrt" ; - understand_V2 = mkV2 (mkV "smjHna") ; --- university_N = mkN "ywnywrsTy" ; - village_N = mkN "gawN" ; -- check for n or N --- wait_V2 = mkV2 (compoundV "antz-ar" do_V2) "ka" ; -- something prtkXa - walk_V = mkV "clna" ; --- warm_A = mkA "grm" ; something gngna --- war_N = mkN "jng" ; - watch_V2 = mkV2 (mkV "dykHna") ; --- water_N = mkN "pany" masculine ; -- not covered masculine ending with y - white_A = mkA "sfyd" ; - window_N = mkN "rwXndan" ; --- wine_N = mkN "Xrab" feminine ; - win_V2 = mkV2 (mkV "jytna") ; - woman_N = mkN "ewrt" feminine ; --- wonder_VQ = compoundV "Heran" (mkV "hwna") ; - wood_N = mkN "lkRy" ; - write_V2 = mkV2 (mkV "lkh-na") ; - yellow_A = mkA "pyla" ; - young_A = mkA "jwan" ; - do_V2 = mkV2 (mkV "krna") ; --- now_Adv = mkAdv "ab" ; --- already_Adv = mkAdv "phlE hy" ; - song_N = mkN "gyt" ; - add_V3 = mkV3 (compoundV "jme" do_V2) "" "" ; --- number_N = mkN "hndsh" ; --- put_V2 = mkV2 (mkV "Dalna") ; - stop_V = mkV "rkna" ; --- jump_V = compoundV "cHlang" (mkV "lgana") feminine ; - --- left_Ord = {s = "bayaN" ; n = singular}; --- right_Ord = {s= "dayaN" ; n = singular}; --- far_Adv = mkAdv "dwr" ; - correct_A = mkA "syH" ; - dry_A = mkA "swkHa" ; --- dull_A = mkA "nalik" ; --- full_A = mkA "mkml" ; - heavy_A = mkA "bHary" ; - near_A = mkA "pas" ; --- rotten_A = mkA "Krab" ; - round_A = mkA "gwl" ; - sharp_A = mkA "tyz" ; - smooth_A = mkA "ckna" ; - straight_A = mkA "sydHa" ; - wet_A = mkA "gyla" ; ---- - wide_A = mkA "cwRa" ; - animal_N = mkN "janwr" ; - ashes_N = mkN "rakh-" feminine; -- FIXME: plural only? --- back_N = mkN "qmr" feminine ; --- bark_N = mkN "bark" ; --- belly_N = mkN "dh-ny" ; --- blood_N = mkN "Kwn" ; - bone_N = mkN "HDy" feminine ; --- breast_N = mkN "ch-aty" ; --stan - cloud_N = mkN "badl" ; - day_N = mkN "dn" ; - dust_N = mkN "dHwl" ; - ear_N = mkN "kan" ; --- earth_N = mkN "zmyn" feminine ; - egg_N = mkN "anDH" ; - eye_N = mkN "AnkH" feminine ; - fat_N = mkN "mwta" ; - feather_N = mkN "pnkH" ; --- fingernail_N = mkN "naKn" ; - fire_N = mkN "Ag" feminine ; - flower_N = mkN "pHwl" ; - fog_N = mkN "dHnd" feminine ; - foot_N = mkN "pawN" ; -- not properly covered need to be discussed - forest_N = mkN "jngl" ; - grass_N = mkN "gHs" feminine ; --- guts_N = mkN "gut" ; -- FIXME: no singular - hair_N = mkN "bal" ; - hand_N = mkN "HatH" ; - head_N = mkN "sr" ; - heart_N = mkN "dl" ; --- horn_N = mkN "gh-nty" ; - husband_N = mkN "pty" ; - ice_N = mkN "brf" feminine ; - knee_N = mkN "gHtnH" ; - leaf_N = mkN "ptH" ; - leg_N = mkN "tang" feminine ; - liver_N = mkN "klyjH" ; --- louse_N = mkN "" ; -- jwN - mouth_N = mkN "mnH" ; - name_N = mkN "nam" ; - neck_N = mkN "grdn" feminine ; - night_N = mkN "rat" feminine ; - nose_N = mkN "nak" ; --- person_N = mkN "XKS" ; - rain_N = mkN "barX" feminine ; - road_N = mkN "sRk" ; - root_N = mkN "gR" feminine ; - rope_N = mkN "rsy" ; - salt_N = mkN "nmk" feminine ; - sand_N = mkN "ryt" feminine ; - seed_N = mkN "byj" ; --- skin_N = mkN "jld" feminine ; -- crm - sky_N = mkN "ambr" ; - smoke_N = mkN "dHwaN"; -- singular masc nouns ending with aN,wN yet to be implemented - snow_N = mkN "brf" feminine ; - stick_N = mkN "soTy" ; - tail_N = mkN "dm" ; --- tongue_N = mkN "zban" feminine ; --- tooth_N = mkN "dant" masculine; - wife_N = mkN "ptny" ; - wind_N = mkN "Hwa" ; --- wing_N = mkN "pr" ; - worm_N = mkN "kyRa" ; - year_N = mkN "sal" ; --- blow_V = mkV "clna" ; - breathe_V = compoundV "sans" (mkV "lyna" ) ; - burn_V = mkV "jlana" ; - dig_V = mkV "kHwdna" ; - fall_V = mkV "grna" ; --- float_V = mkV "tyrna" ; - flow_V = mkV "clna" ; - fly_V = mkV "aRna" ; --- freeze_V = mkV "jmna"; - give_V3 = mkV3 (mkV "dyna") "kw" ""; - laugh_V = mkV "hnsna" ; --- lie_N = mkN "jh-wt" masculine ; - lie_V = compoundV "jHwt" (mkV "bwlna" ); - play_V = mkV "kHylna" ; - sew_V = mkV "syna" ; - sing_V = mkV "gana" ; - sit_V = mkV "byTHna" ; - smell_V = mkV "swngna" ; - spit_V = mkV "tHwkna" ; - stand_V = compoundV "kHRE" (mkV "hwna" ); -- a type of compound verb made of two verbs i.e 'kHRa' also inflects, rather than a string and verb should be fixed --- swell_V = mkV "swjh-na" ; - swim_V = mkV "tyrna" ; - think_V = mkV "swcna" ; - turn_V = mkV "mRna"; --- vomit_V = compoundV "alty" (mkV "krna") feminine ; - bite_V2 = mkV2 (mkV "katna") ; - count_V2 = mkV2 (mkV "gnna") ; - cut_V2 = mkV2 (mkV "katna") ; - fear_V2 = mkV2 (mkV "Drna") ; - fight_V2 = mkV2 (mkV "lRna") ; --- hit_V2 = mkV2 (compoundV "th-wkr" (mkV "marna" )); - hold_V2 = mkV2 (mkV "pkRna") ; --- hunt_V2 = mkV2 (compoundV "Xkar" do_V2); - kill_V2 = mkV2 (compoundV "mar" (mkV "Dalna" )) ; - pull_V2 = mkV2 (mkV "kHncna"); --- push_V2 = mkV2 (mkV "dh-kylna") "kw" ; --- rub_V2 = mkV2 (mkV "rgRna") ; --- scratch_V2 = mkV2 (mkV "kh-rcna") "kw" ; --- split_V2 = mkV2 (mkV "banta") "kw" ; --- squeeze_V2 = dirV2 (regV "squeeze") ; --- stab_V2 = dirV2 (regDuplV "stab") ; --- suck_V2 = mkV2 (mkV "cwsna") ; - throw_V2 = mkV2 (mkV "pHynkna") ; - tie_V2 = mkV2 (mkV "bandHna") ; - wash_V2 = mkV2 (mkV "dHwna") ; - wipe_V2 = mkV2 (compoundV "Saf" (mkV "krna" )); - ----- other_A = regA "other" ; - --- grammar_N = mkN "grdan" ; --- language_N = mkN "zban" feminine ; --- rule_N = mkN "aSwl" ; - ----- added 4/6/2007 - john_PN = mkPN "jon" ; --- question_N = mkN "swal" ; --- ready_A = regA "ready" ; --- reason_N = mkN "wjh" feminine ; --- today_Adv = mkAdv "Aj" ; --- uncertain_A = mkA ["Gyr yqyny"] ; - - -} +--# -path=.:prelude++concrete LexiconHin of Lexicon = CatHin ** +--open ResHin, Prelude in {+ open ParadigmsHin, Prelude in {++ flags + optimize=values ;+ coding = utf8;++lin+ airplane_N = mkCmpdNoun "hava:I:" (mkN "jaha:z") ;+ answer_V2S = mkV2 (compoundV "java:b" (mkV "de:na:")) ;+ apartment_N = mkN "kamra:" ;+ apple_N = mkN "se:b" ;+-- art_N = mkN "" ;+ ask_V2Q = mkV2 (mkV "pu:c'ana:") ;+ baby_N = mkN "bacX,c'a:" ;+ bad_A = mkA "bura:" ;+ bank_N = mkN "be+m.k" ;+ beautiful_A = mkA "xu:bsu:rat" ;+ become_VA = mkV "banana:";+ beer_N = mkN "biyar" ;+ beg_V2V = mkV2V (compoundV "b'i:k'" (mkV "ma:m.gna:")) "se:" "kh" False;+ big_A = mkA "baRa:" ;+ bike_N = mkN "sa:ykal" feminine ;+ bird_N = mkN "ciRiya:" ;+ black_A = mkA "ka:la:" ;+ blue_A = mkA "ni:la:" ;+ boat_N = mkN "na:v" ;+ book_N = mkN "kita:b" feminine ;+ boot_N = mkN "ju:ta:" ;+ boss_N = mkN "ma:lik" ;+ boy_N = mkN "laRka:" ;+ bread_N = mkN "ro:Ti:" ;+ break_V2 = mkV2 (mkV "to:Rna:") ;+ broad_A = mkA "co+Ra:" ;+ brother_N2 = mkN2 (mkN "b'a:I:") (mkPrep "ka" "ki:") "ke:" ; --not correct+ brown_A = mkA "b'u:ra:" ;+ butter_N = mkN "makX,k'an" ;+ buy_V2 = mkV2 (mkV "xari:dna:") "ko:"; -- add ko: here for es ko khredna, but this will create sentences like kitab ko kharedna+ camera_N = mkN "ke+mara:" ;+ cap_N = mkN "To:pi:" ;+ car_N = mkN "ka:r" ;+ carpet_N = mkN "qa:li:n" ;+ cat_N = mkN "billi:" feminine;+ ceiling_N = mkN "c'at" feminine ;+ chair_N = mkN "kurX,si:" ;+ cheese_N = mkN "pani:r" feminine ;+ child_N = mkN "bacX,c'a:" ;+ church_N = mkN "girija:" ;+ city_N = mkN "s*ahar" ;+ clean_A = mkA "sa:f" ;+ clever_A = mkA "ca:la:k" ; + close_V2 = mkV2 (compoundV "band" do_V2); + coat_N = mkN "ko:T" ;+ cold_A = mkA "sard" ;+ come_V = mkV "A:na:" ;+ computer_N = mkN "kam.pyu:Tar" ;+ country_N = mkN "de:s*" ;+ cousin_N = mkCmpdNoun "cca" (mkN "zad") ; -- a compund noun made of two nouns+ cow_N = mkN "ga:y" feminine ;+ die_V = mkV "marna:" ;+ dirty_A = mkA "gam.da:" ;+ distance_N3 = mkN3 (mkN "fa:sla:") (mkPrep "ka:" "ki:") "ke:" "se:" ;+ doctor_N = mkN "Da:kTar" ;+ dog_N = mkN "kutta:" ;+ door_N = mkN "darva:za:" ;+ drink_V2 = mkV2 (mkV "pi:na:");+ easy_A2V = mkA "A:sa:n" "" ; -- chek for A or a+ eat_V2 = mkV2 (mkV "k'a:na:") "" ;+ empty_A = mkA "xa:li:" ;+ enemy_N = mkN "dus*X,man" ;+ factory_N = mkN "ka:rxa:na:" ;+ father_N2 = mkN2 (mkN "ba:p") (mkPrep "ka" "ki:") "ke:" ;+ fear_N = mkN "Dar";+ fear_VS = mkV "Darna:";+ find_V2 = mkV2 (mkV "pa:na:") ;+ fish_N = mkN "mac'li:" ;+ floor_N = mkN "fars*" ;+ forget_V2 = mkV2 (mkV "b'u:lna:") ;+ fridge_N = mkN "frij" ;+ friend_N = mkN "do:sX,t" masculine ;+ fruit_N = mkN "p'al" ;+-- fun_AV = mkAV (regA "fun") ;+ garden_N = mkN "ba:g." ; -- chek for g.+ girl_N = mkN "laRki:" ;+ glove_N = mkN "dasta:na:" ;+ gold_N = mkN "so:na:" ;+ good_A = mkA "AcX,c'a:" ;+ go_V = mkV "ja:na:" ;+ green_A = mkA "hara:" ;+ harbour_N = mkCmpdNoun "bam.dar" (mkN "ga:h") ;+ hate_N = mkN "nafrat" ;+ hate_V2 = mkV2 (compoundV "nafrat" do_V2) ;+ hat_N = mkN "To:pi:" ;+-- have_V2 = dirV2 (mk5V "have" "has" "had" "had" "having") ;+ hear_V2 = mkV2 (mkV "sunna:") ;+ hill_N = mkN "paha:R" ;+ hope_N = mkN "Ummi:d" ;+ hope_VS = (compoundV "Ummi:d" do_V2);+ horse_N = mkN "g'o:Ra:" ;+ hot_A = mkA "garm" ;+ house_N = mkN "g'ar" ;+ important_A = mkA "zaru:ri:" ; -- check about z+ industry_N = mkN "sant" feminine ;+ iron_N = mkN "lo:ha:" ;+ king_N = mkN "ra:ja:" ;+ know_V2 = mkV2 (mkV "ja:nna:") ;+ know_VS = mkV "ja:nna:";+ lake_N = mkN "j'i:l" feminine ;+ lamp_N = mkN "cira:g" ;+ learn_V2 = mkV2 (mkV "si:k'na:") ;+ leather_N = mkN "camRa:" ;+ leave_V2 = mkV2 (mkV "calna:") ;+ like_V2 = mkV2 (compoundV "pasam.d" do_V2);+ listen_V2 = mkV2 (mkV "sunna:") ;+ live_V = mkV "rahna:" ; ---- touch+ long_A = mkA "lam.ba:" ;+ lose_V2 = mkV2 (compoundV "k'o:" do_V2) ;+ love_N = mkN "pX,ya:r" ;+ love_V2 = mkV2 (compoundV "pX,ya:r" do_V2) "ko:";+ man_N = mkN "A:dmi:" masculine;+ married_A2 = mkIrregA "s*a:di: s*uda:" "se:" ;+ marriage = mkN "s*a:di: " ;+ meat_N = mkN "ma:m.s" ;+ milk_N = mkN "du:d'" ;+ moon_N = mkN "ca:m.d" ;+ mother_N = mkN "ma:n~" feminine; -- not covered need to be discussed+ mountain_N = mkN "paha:R" ;+ music_N = mkN "sam.gi:t" ;+ narrow_A = mkA "tam.g" ;+ new_A = mkA "naya:" ;+ newspaper_N = mkN "Axba:r" ;+ oil_N = mkN "te:l" ;+ old_A = mkA "bu:R'a:" ;+ open_V2 = mkV2 (mkV "k'o:lna:") ;+ paint_V2A = mkV2 (compoundV "ram.g" do_V2) ;+ paper_N = mkN "ka:g.az" ;+ paris_PN = mkPN "pe+ris" ;+ peace_N = mkN "Aman" ;+ pen_N = mkN "qalam" ;+ planet_N = mkN "sita:ra:" ;+ plastic_N = mkN "pla:sTik" ;+ play_V2 = mkV2 (mkV "k'e:lna:") ;+ policeman_N = mkCmpdNoun "pulis" (mkN "wa:la:") ; + priest_N = mkN "puja:ri:" ;+-- probable_AS = mkAS (regA "probable") ;+ queen_N = mkN "ra:ni:" ;+ radio_N = mkN "re:Dio:" ;+ rain_N = mkN "ba:ris*" ;+ rain_V0 = compoundV "ba:ris*" (mkV "ho:na:" ) ;+ read_V2 = mkV2 (mkV "paR'na:");+ red_A = mkA "la:l" ;+ religion_N = mkN "mazhab" ;+ restaurant_N = mkN "re:sTo:ra:m.T" ;+-- river_N = mkN "dariya:" masculine ;+ rock_N = mkN "caTTa:n" ;+ roof_N = mkN "c'at" masculine ;+ rubber_N = mkN "rabar" ;+ run_V = mkV "do+Rna:" ;+ say_VS = mkV "kahna:" ;+ school_N = mkN "sku:l" ;+ science_N = mkN "sa:ians" ; -- vgyan+ sea_N = mkN "samam.dar" ;+ seek_V2 = mkV2 (compoundV "tala:s*" do_V2) ;+ see_V2 = mkV2 (mkV "de:k'na:") ;+ sell_V3 = mkV3 (mkV "be:cna:") "ko:" "";+ send_V3 = mkV3 (mkV "b'e:jna:") "ko:" "";+ sheep_N = mkN "b'i:R" feminine ;+ ship_N = mkN "jaha:z" ;+ shirt_N = mkN "kurX,ta:" feminine;+ shoe_N = mkN "ju:ta:" ;+ shop_N = mkN "du:ka:n" feminine ;+ short_A = mkA "c'o:Ta:" ;+ silver_N = mkN "ca:m.di:" ;+ sister_N = mkN "bahan" feminine ;+ sleep_V = mkV "so:na:" ;+ small_A = mkA "c'o:Ta:" ;+ snake_N = mkN "sa:m.p" ;+ sock_N = mkN "jurra:b" feminine ;+ speak_V2 = mkV2 (mkV "bo:lna:") ;+ star_N = mkN "ta:ra:" ;+ steel_N = mkN "Ispa:t" ; -- something like ispat+ stone_N = mkN "patX,t'ar" ;+ stove_N = mkN "cu:lX,ha:" ;+-- student_N = mkCmpdNoun "t-alb" (mkN "elm") ; -- something vidrati+ stupid_A = mkA "be:vaqu:f" ;+ sun_N = mkN "su:raj" ; -- swrya+ switch8off_V2 = mkV2 (compoundV "bam.d" do_V2) ;+ switch8on_V2 = mkV2 (mkV "cala:na:") ;+ table_N = mkN "me:z" feminine ;+ talk_V3 = mkV3 (mkV "bo:lna:") "se:" "ke: ba:re: me:";+ teacher_N = mkN "UsX,ta:d" ; -- adyapak+ teach_V2 = mkV2 (mkV "sik'a:na:") ;+ television_N = mkN "Ti:vi:" ;+ thick_A = mkA "mo:Ta:" ;+ thin_A = mkA "patla:" ;+ train_N = mkN "re:l ga:Ri:" ;+ travel_V = (compoundV "safar" do_V2) ;+-- tree_N = mkN "pe:R" masculine ;+ trousers_N = mkN "patlu:n" ;+ ugly_A = mkA "badsu:rat" ;+ understand_V2 = mkV2 (mkV "samaj'na:") ;+ university_N = mkN "yu:nivarsiTi:" ;+ village_N = mkN "ga:n~v" ; -- check for n or N+ wait_V2 = mkV2 (compoundV "Im.taza:r" do_V2) "ka:" ; -- something prtkXa+ walk_V = mkV "calna:" ;+ warm_A = mkA "garm" ; something gngna+ war_N = mkN "laRa:I:" ;+ watch_V2 = mkV2 (mkV "de:k'na:") ;+ water_N = mkN "pa:ni:" masculine ; -- not covered masculine ending with y+ white_A = mkA "safe:d" ;+ window_N = mkN "k'iRki:" ;+ wine_N = mkN "s*ara:b" feminine ;+ win_V2 = mkV2 (mkV "ji:tna:") ;+ woman_N = mkN "O+rat" feminine ;+ wonder_VQ = compoundV "he+ra:n" (mkV "ho:na:") ;+ wood_N = mkN "lakRi:" ;+ write_V2 = mkV2 (mkV "lik'na:") ;+ yellow_A = mkA "pi:la:" ;+ young_A = mkA "java:n" ;+ do_V2 = mkV2 (mkV "karna:") ;+ now_Adv = mkAdv "Ab" ;+ already_Adv = mkAdv "pahle: hi:" ;+ song_N = mkN "gi:t" ;+ add_V3 = mkV3 (mkV "jo:Rana:") "ko:" "mi:m."; -- confirm+ number_N = mkN "hndsh" ;+ put_V2 = mkV2 (mkV "Da:lna:") ;+ stop_V = mkV "rukna:" ;+ jump_V = compoundV "c'ala:m.g" (mkV "laga:na:") ;++ left_Ord = {s = "ba:ya:n~" ; n = singular};+ right_Ord = {s= "da:ya:n~" ; n = singular};+ far_Adv = mkAdv "du:r" ;+ correct_A = mkA "sahi:h" ;+ dry_A = mkA "su:k'a:" ;+ dull_A = mkA "nalik" ;+ full_A = mkA "b'ara:" ;+ heavy_A = mkA "b'a:ri:" ;+ near_A = mkA "pa:s" ;+ rotten_A = mkA "saRa:" ;+ round_A = mkA "go:l" ;+ sharp_A = mkA "te:z" ;+ smooth_A = mkA "cikna:" ;+ straight_A = mkA "si:d'a:" ;+ wet_A = mkA "gi:la:" ; ----+ wide_A = mkA "co+Ra:" ;+ animal_N = mkN "ja:nvar" ;+ ashes_N = mkN "ra:k'" feminine; -- FIXME: plural only?+ back_N = mkN "pi:T'" feminine ;+-- bark_N = mkN "bark" ;+-- belly_N = mkN "dh-ny" ;+ blood_N = mkN "xu:n" ;+ bone_N = mkN "haDDi:" feminine ;+ breast_N = mkN "c'a:ti:" ; --stan+ cloud_N = mkN "ba:dal" ;+ day_N = mkN "din" ;+ dust_N = mkN "d'u:l" ;+ ear_N = mkN "ka:n" ;+ earth_N = mkN "zami:n" feminine ;+ egg_N = mkN "Am.Da:" ;+ eye_N = mkN "A:m.k'" feminine ;+ fat_N = mkN "mo:Ta:" ;+ feather_N = mkN "pam.k'" ;+ fingernail_N = mkN "na:k'u:n" ;+ fire_N = mkN "A:g" feminine ;+ flower_N = mkN "p'u:l" ;+ fog_N = mkN "d'um.d'" feminine ;+ foot_N = mkN "pa:m.v" ; -- not properly covered need to be discussed+ forest_N = mkN "jam.gal" ;+ grass_N = mkN "g'a:s" feminine ;+-- guts_N = mkN "gut" ; -- FIXME: no singular+ hair_N = mkN "ba:l" ;+ hand_N = mkN "ha:t'" ;+ head_N = mkN "sir" ;+ heart_N = mkN "dil" ;+ horn_N = mkN "si:m.g" ;+ husband_N = mkN "pati" ;+ ice_N = mkN "barX,f" feminine ;+ knee_N = mkN "g'uTna:" ;+ leaf_N = mkN "patta:" ;+ leg_N = mkN "Ta:m.g" feminine ;+ liver_N = mkN "kale:ja:" ;+ louse_N = mkN "ju:" ;+ mouth_N = mkN "muh" ; + name_N = mkN "na:m" ;+ neck_N = mkN "garX,dan" feminine ;+ night_N = mkN "ra:t" feminine ;+ nose_N = mkN "na:k" ;+-- person_N = mkN "XKS" ;+ road_N = mkN "saRak" ;+ root_N = mkN "jaR" feminine ;+ rope_N = mkN "rassi:" ;+ salt_N = mkN "namak" feminine ;+ sand_N = mkN "re:t" feminine ;+ seed_N = mkN "bi:j" ;+ skin_N = mkN "jld" feminine ; -- crm+ sky_N = mkN "A:sma:n" ;+ smoke_N = mkN "d'ua:n~"; -- singular masc nouns ending with aN,wN yet to be implemented+ snow_N = mkN "barX,f" feminine ;+ stick_N = mkN "lakRi:" ;+ tail_N = mkN "dum" ;+ tongue_N = mkN "zaba:n" feminine ;+ tooth_N = mkN "da:m.t" masculine;+ wife_N = mkN "bi:vi:" ;+ wind_N = mkN "hava:" ;+-- wing_N = mkN "pr" ;+ worm_N = mkN "ki:Ra" ;+ year_N = mkN "sa:l" ;+-- blow_V = mkV "clna" ;+ breathe_V = compoundV "sa:n~s" (mkV "le:na:" ) ;+ burn_V = mkV "jala:na:" ;+ dig_V = mkV "k'o:dna:" ;+ fall_V = mkV "girna:" ;+ float_V = mkV "te+rna:" ;+ flow_V = mkV "bahna:" ;+ fly_V = mkV "uRna:" ;+-- freeze_V = mkV "jmna";+ give_V3 = mkV3 (mkV "de:na:") "ko:" "";+ laugh_V = mkV "ham.sna:" ;+ lie_N = mkN "j'u:T" masculine ;+ lie_V = compoundV "j'u:T" (mkV "bo:lna:" );+ play_V = mkV "k'e:lna:" ;+ sew_V = mkV "si:na:" ;+ sing_V = mkV "ga:na:" ;+ sit_V = mkV "be+T'na:" ;+ smell_V = mkV "su:m.gna:" ;+ spit_V = mkV "t'u:kna:" ;+ stand_V = compoundV "k'aRa:" (mkV "ho:na:" ); -- a type of compound verb made of two verbs i.e 'kHRa' also inflects, rather than a string and verb should be fixed+ swell_V = mkV "su:jna:" ;+ swim_V = mkV "te+rna:" ;+ think_V = mkV "so:cna:" ;+ turn_V = mkV "muRna:";+-- vomit_V = compoundV "Aly" (mkV "krna") feminine ;+ bite_V2 = mkV2 (mkV "ka:Tana:") ;+ count_V2 = mkV2 (mkV "ginna:") ;+ cut_V2 = mkV2 (mkV "ka:Tna:") ;+ fear_V2 = mkV2 (mkV "Darna:") ;+ fight_V2 = mkV2 (mkV "laRna:") ;+-- hit_V2 = mkV2 (compoundV "th-wkr" (mkV "marna" ));+ hold_V2 = mkV2 (mkV "pakaRna:") ;+-- hunt_V2 = mkV2 (compoundV "Xkar" do_V2);+ kill_V2 = mkV2 (compoundV "ma:r" (mkV "Da:lna:" )) ;+ pull_V2 = mkV2 (mkV "k'i:m.cna:");+ push_V2 = mkV2 (mkV "d'ake:lna:") "ko:" ;+ rub_V2 = mkV2 (mkV "ragaRna:") ;+ scratch_V2 = mkV2 (mkV "k'aro:m.cna:") "ko:" ;+-- split_V2 = mkV2 (mkV "banta") "ko::" ;+-- squeeze_V2 = dirV2 (regV "squeeze") ;+-- stab_V2 = dirV2 (regDuplV "stab") ;+ suck_V2 = mkV2 (mkV "cu:sna:") ;+ throw_V2 = mkV2 (mkV "p'e:m.kna:") ;+ tie_V2 = mkV2 (mkV "ba:m.d'na:") ;+ wash_V2 = mkV2 (mkV "d'o:na:") ;+-- wash_V2 = mkV2 (mkV "po:m.c'ana:") ;++---- other_A = regA "other" ;++-- grammar_N = mkN "grdan" ;+-- language_N = mkN "zban" feminine ;+-- rule_N = mkN "ASwl" ;++---- added 4/6/2007+ john_PN = mkPN "ja:n" ;+ question_N = mkN "sava:l" ;+ ready_A = mkA "te+ya:r" ;+ reason_N = mkN "vajah" feminine ;+ today_Adv = mkAdv "A:j" ;+-- uncertain_A = mkA ["g.yr yqyny"] ;+ + +}
@@ -36,10 +36,11 @@ regNoun : Str -> Noun ; regNoun s = case s of { - _ + "ya" => mkN05 (s); - _ + ("a"|"e"|"h") => mkN01 (s); - _ + "y" => mkN03 (s); - _ + ("aN"|"wN") => mkN04 (s); + _ + "ya:" => mkN05 (s); + _ + ("a:") => mkN01 (s); + _ + "i:" => mkN03 (s); + _ + ("a:n~"|"a:") => mkN04 (s); + _ + "a:n~v" => mkN12 s; _ + "w^" => mkN12 (s); _ => regNoun2 (s) }; @@ -55,10 +56,11 @@ in case <s,g,c> of { <_ + "t",Fem,_> => mkN10 (s); <_ + "t",Masc,_> => mkN02 (s); - <_ + "w",Masc,_> => mkN11 (s); + <_ + "u:",Masc,_> => mkN11 (s); <_ + "w",Fem,_> => mkN07 (s); <_ + "ya",Fem,_> => mkN05 (s); <_ + "ya",Masc,_> => mkN02 (s); + <_ + "i:",Masc,_> => mkN13 (s); <_,Fem,False> => mkN08 (s); <_,Fem,_> => mkN09 (s) @@ -70,14 +72,14 @@ mkN01 : Str -> Noun ; mkN01 lRka = let end = last (lRka) ; lRk = if_then_else Str (eq end "e") lRka (tk 1 lRka) - in mkNoun (lRka) (lRk+"E") (lRk+"E") - (lRk+"E") (lRk+"wN") (lRk+"w") + in mkNoun (lRka) (lRk+"e:") (lRk+"e:") + (lRk+"e:") (lRk+"o:n~") (lRk+"o:") Masc ; -- masculine nouns does not end with a, h, e, an mkN02 : Str -> Noun ; - mkN02 mrd = let mrdwN = mrd+"wN" ; + mkN02 mrd = let mrdwN = mrd+"o:n~" ; mrdw = tk 1 mrdwN in mkNoun mrd mrd mrd mrd mrdwN mrdw @@ -86,24 +88,32 @@ -- feminine Nouns end with y mkN03 : Str -> Noun ; - mkN03 krsy = let krsyaN = krsy+"aN" ; - krsywN = krsy+"wN" ; + mkN03 krsy = let krsyaN = krsy+"an~" ; + krsywN = krsy+"yo:n~" ; krsyw = tk 1 krsywN in mkNoun krsy krsy krsy krsyaN krsywN krsyw Fem ; +-- masculine nouns ending at i: e.g Admi: + mkN13 : Str -> Noun ; + mkN13 krsy = let + krsywN = krsy+"yo:n~" ; + krsyw = tk 1 krsywN + in mkNoun krsy krsy krsy + krsy krsywN krsyw + Masc ; + -- feminine nouns end with a, aN, wN mkN04 : Str -> Noun ; mkN04 n = case last n of { - "a" => let bla = n - in mkNoun bla bla bla - (bla+"y^yN") (bla+"w^N") (bla+"w^") + "a:" => mkNoun n n n + (n+"a:e:n~") (n+"a:o:n~") (n+"a:o:") Fem ; _ => let maN = n ; -- ends with aN and wN ma = tk 1 maN in mkNoun maN maN maN - (ma+"y^yN") (ma+"w^N") (ma+"w^N") + (maN+"a:n~e:n~") (maN+"a:n~o:n~") (maN+"a:n~o:") Fem }; @@ -112,14 +122,14 @@ mkN05 : Str -> Noun ; mkN05 gRya = let gRy = (tk 1 gRya) in mkNoun gRya gRya gRya - (gRya+"N") (gRy+"wN") (gRy+"w") + (gRya+"n~") (gRy+"o:n~") (gRy+"o:") Fem ; -- feminine nouns end with w mkN07 : Str -> Noun ; mkN07 khshbw = mkNoun khshbw khshbw khshbw - (khshbw + "y^yN") (khshbw + "w^N") (khshbw + "w^") + (khshbw + "e:n~") (khshbw + "o:n~") (khshbw + "o:") Fem ; -- Loan arabic feminine nouns end with t @@ -127,7 +137,7 @@ mkN10 : Str -> Noun ; mkN10 ndamt = mkNoun ndamt ndamt ndamt - (ndamt+"yN") (ndamt+"wN") (ndamt+"w") + (ndamt+"e:m.") (ndamt+"w:m.") (ndamt+"o:") Fem ; -- Worst case function mkN : (_,_,_,_,_,_ : Str) -> Gender -> Noun ; @@ -143,21 +153,21 @@ mkN08 : Str -> Noun ; mkN08 ktab = mkNoun ktab ktab ktab - (ktab+"yN") (ktab+"wN") (ktab+"w") + (ktab+"e:n~") (ktab+"o:n~") (ktab+"o:") Fem ; -- Loan arabic feminine nouns mkN09 : Str -> Noun ; mkN09 ahsan = mkNoun ahsan ahsan ahsan - (ahsan+"at") (ahsan+"at") (ahsan+"w") + (ahsan+"a:t") (ahsan+"a:t") (ahsan+"o:") Fem ; -- (variants{ahsan+"at";ahsan+"wN"}) -- Loan persian maculine nouns end with w mkN11 : Str -> Noun ; mkN11 alw = mkNoun alw alw alw - alw (alw+"w^N") (alw+"w^") + alw (alw+"o:n~") (alw+"o:") Masc ; @@ -167,17 +177,19 @@ mkN12 bhao = mkNoun (bhao) (bhao) (bhao) (bhao) (bhao) (bhao) Masc ; + + ----2 Determiners - IDeterminer = {s:Gender => Str ; n : Number}; + IDeterminer = {s:Gender => Case => Str ; n : Number}; makeDet : Str -> Str -> Str -> Str -> Number -> Determiner = \s1,s2,s3,s4,n -> { s = table { - Sg => table { - Masc => s1 ; - Fem => s2 + Sg => table { + Masc => table {_ => s1} ; + Fem => table {_ => s2} } ; Pl => table { - Masc => s3 ; - Fem => s4 + Masc => table { _ => s3} ; + Fem => table {_ => s4} } } ; @@ -186,11 +198,11 @@ makeIDet : Str -> Str -> Number -> IDeterminer = \s1,s2,n -> { s = table { - Masc => s1; - Fem => s2 + Masc => table {_ =>s1}; + Fem => table {_ =>s2} }; n = n - }; + }; -- Proposition @@ -317,13 +329,14 @@ }; ----2 Adjectives --- defined in ResUrd + makeIrregA : Str -> Adjective = \str -> {s = \\_,_,_,_ => str} ; + ----3 Verbs CommonVF = {s : VTense => UPerson => Number => Gender => Str} ; mkVerb : (x1: Str) -> Verb = \inf -> - let root = (tk 2 inf); inf_obl = ((tk 1 inf) + "E"); inf_fem = ((tk 1 inf) + "y") + let root = (tk 2 inf); inf_obl = ((tk 1 inf) + "e:"); inf_fem = ((tk 2 inf) + "yi:") in { s = table { VF tense person number gender => (mkCmnVF root tense person number gender).s ; @@ -343,38 +356,43 @@ mkCmnVF : Str -> VTense -> UPerson -> Number -> Gender -> {s:Str} = \root,t,p,n,g -> {s = - let form1 = case (last root) of { - "a"|"A"|"w" => root + "w^N" ; - _ => root + "wN" - }; - form2 = case (last root) of { - "a"|"A"|"w" => root + "y^N" ; - _ => root + "yN" - }; + let form1 = case (last root) of + { + "a:"|"o:"|"i:" => root + "U:n~"; + "e:" => (tk 1 root)+ "u:n~"; + _ => root + "u:n~" + }; + form2 = case (last root) of + { + "a:"|"o:" => root + "E:n~"; + "i:" => root + "ye:n~"; + "e:" => (tk 1 root)+ "e:n~"; + _ => root + "e:n~" + } in case <t,p,n,g> of { <Subj,Pers1,Sg,_> => form1 ; <Subj,Pers1,Pl,_> => form2 ; <Subj,_,_,_> => (mkImpert root p n g).s ; <Perf,_,_,_> => case root of { - "hw" => (mkPastInd root p n g).s ; - "ja" => (mkPastInd "gy" p n g).s ; - "kr" => (mkPastInd "k" p n g).s ; - "dE" => (mkPastInd "d" p n g).s ; - "lE" => (mkPastInd "l" p n g).s ; - _ => (mkPastInd root p n g).s }; - <Imperf,Pers2_Familiar,Sg,Masc> => root + "tE"; - <Imperf,Pers2_Familiar,Sg,Fem> => root + "ty"; --variants{root+"ty" ; root+"tyN"}; - <Imperf,Pers2_Familiar,Pl,Masc> => root + "tE"; - <Imperf,Pers2_Familiar,Pl,Fem> => root+"tyN"; - <Imperf,Pers2_Respect,Sg,Masc> => root + "tE"; - <Imperf,Pers2_Respect,Sg,Fem> => root + "ty"; --variants{root+"ty" ; root+"tyN"}; - <Imperf,Pers2_Respect,Pl,Masc> => root + "tE"; - <Imperf,Pers2_Respect,Pl,Fem> => root+"tyN"; - <Imperf,_,Sg,Masc> => root+"ta"; - <Imperf,_,Sg,Fem> => root+"ty"; - <Imperf,_,Pl,Masc> => root+"te"; - <Imperf,_,Pl,Fem> => root+"tyN" + "ho:" => (mkPastInd root p n g).s ; + "ja:" => (mkPastInd "gay" p n g).s ; + "kr" => (mkPastInd "kiy" p n g).s ; + -- "dE" => (mkPastInd "d" p n g).s ; + -- "lE" => (mkPastInd "l" p n g).s ; + _ => (mkPastInd root p n g).s }; + <Imperf,Pers2_Familiar,Sg,Masc> => root + "te:"; + <Imperf,Pers2_Familiar,Sg,Fem> => root + "ti:"; --variants{root+"ty" ; root+"tyN"}; + <Imperf,Pers2_Familiar,Pl,Masc> => root + "te:"; + <Imperf,Pers2_Familiar,Pl,Fem> => root+"ti:"; + <Imperf,Pers2_Respect,Sg,Masc> => root + "te:"; + <Imperf,Pers2_Respect,Sg,Fem> => root + "ti:"; --variants{root+"ty" ; root+"tyN"}; + <Imperf,Pers2_Respect,Pl,Masc> => root + "te:"; + <Imperf,Pers2_Respect,Pl,Fem> => root+"ti:"; + <Imperf,_,Sg,Masc> => root+"ta:"; + <Imperf,_,Sg,Fem> => root+"ti:"; + <Imperf,_,Pl,Masc> => root+"te:"; + <Imperf,_,Pl,Fem> => root+"ti:" } } ; @@ -382,20 +400,27 @@ mkPastInd : Str -> UPerson -> Number -> Gender -> {s:Str} = \root,p,n,g -> {s = let roo = root ; a = case (last root) of { - "a"|"A"|"w"|"k" => "ya" ; - _ => "a" + "a:"|"o:"|"i:" => "ya:" ; + "e:" => (tk 1 roo) + "iya:" ; + _ => "a:" } ; y = case (last root) of { - "a"|"A"|"w" => "y^y" ; - _ => "y" + "a:"|"o:" => "yi:" ; + "i:" => "" ; + "e:" => (tk 1 roo) + "i:" ; + "iy" => (tk 2 roo) + "i:" ; + _ => "i:" } ; e = case (last root) of { - "a"|"A"|"w"|"k" => "y^E" ; - _ => "E" + "a:"|"o:"|"i:"|"k" => "ye:" ; + "e:" => (tk 1 roo) + "i:" ; + _ => "e:" } ; yN = case (last root) of { - "a"|"A"|"w" => "y^yN" ; - _ => "yN" + "a:"|"o:"|"i:" => "yi:n~" ; + "iy" => (tk 2 roo) + "i:" ; + "e:" => (tk 1 roo) + "i:n~" ; + _ => "yn~" } ; in @@ -430,20 +455,19 @@ mkImpert : Str -> UPerson -> Number -> Gender -> {s:Str} = \root,p,n,g -> {s = let roo = root ; w = case (last root) of { - "a"|"A"|"w" => "w^" ; - _ => "w" + "a:" => "O:" ; + "o:" => "O:" ; + _ => "o:" } ; yN = case (last root) of { - "a"|"A"|"w" => "y^yN" ; - _ => "yN" - } ; - yE = case (last root) of { - "a"|"A"|"w" => "y^yE" ; - _ => "yE" + "a:"|"o:" => "E:n~" ; + _ => "E:n~" } ; e = case (last root) of { - "a"|"A"|"w" => "y^E" ; - _ => "E" + "a:"|"o:" => "E:" ; + "e:" => "" ; + "i:" => "ye:" ; + _ => "E:" } in case <p,n,g> of { <Pers1,_,_> => ""; --nonExist ;
@@ -0,0 +1,117 @@+-- By Harald Hammarstr+-- Modification for Urdu Shafqat Virk+++concrete NumeralHin of Numeral = CatHin ** open ResHin,CommonHindustani,ParamX, Prelude in {+flags coding=utf8 ;++param DForm = unit | ten ;+param DSize = sg | r2 | r3 | r4 | r5 | r6 | r7 | r8 | r9 ;+param Size = singl | less100 | more100 ; ++oper LinDigit = {s : DForm => Str ; size : DSize ; n : Number} ;+++lincat Dig = { s:Str ; n : Number};+lincat Digit = LinDigit ;+lincat Sub10 = {s : DForm => Str ; size : DSize ; n : Number} ;+lincat Sub100 = {s : Str ; size : Size ; n : Number} ;+lincat Sub1000 = {s : Str ; s2 : Str ; size : Size ; n : Number } ; +lincat Sub1000000 = { s : Str ; n : Number } ;++lin num x0 = + {s = table {+ NCard => x0.s ; + NOrd => Prelude.glue x0.s "va:n~" -- need to use mkOrd x0.s but it gives linking error + };+ n = x0.n+ } ;+++oper mkNum : Str -> Str -> DSize -> LinDigit = + \do -> \bis -> \sz -> + {s = table {unit => do ; ten => bis } ; + size = sz ; n = Pl} ;++lin n2 = mkNum "do:" "bi:s" r2 ;+lin n3 = mkNum "ti:n" "ti:s" r3 ;+lin n4 = mkNum "ca:r" "ca:li:s" r4 ;+lin n5 = mkNum "pa:m.c" "pca:s" r5 ;+lin n6 = mkNum "c'e:" "sa:Th'" r6 ; +lin n7 = mkNum "sa:t" "sattar" r7; +lin n8 = mkNum "A:T'" "Assi:" r8;+lin n9 = mkNum "no+" "navve:" r9 ;++oper mkR : Str -> Str -> Str -> Str -> Str -> Str -> Str -> Str -> Str -> DSize => Str = \a1 -> \a2 -> \a3 -> \a4 -> \a5 -> \a6 -> \a7 -> \a8 -> \a9 -> table {+ sg => a1 + "ah" ;+ r2 => a2 + "s" ;+ r3 => a3 + "ti:s" ;+ r4 => a4 + "a:li:s" ;+ r5 => a5 + "n" ;+ r6 => a6 + "saT'" ;+ r7 => a7 + "attar" ;+ r8 => a8 + "a:si:" ;+ r9 => a9 + "a:nawve:"+} ;++oper rows : DSize => DSize => Str = table {+ sg => mkR "gya:r" "Ikki:" "Ikat" "Ikt" "Ikya:va" "Ik" "Ikh" "Iky" "Iky" ; + r2 => mkR "ba:r" "ba:I:" "bat" "be+t" "ba:va" "ba:" "bah" "bay" "b" ;+ r3 => mkR "te:r" "te:I:" "te+m." "te+m.t" "tirpa" "tir" "tih" "tir" "tir" ;+ r4 => mkR "co+d" "co+bi:" "co+m." "co+va" "cww" "co+n~" "co+h" "cw+r" "co+r" ;+ r5 => mkR "pam.dr" "pacci:" "pe+m." "pe+m.t" "pacpa" "pe+n~" "pic'" "pac" "pic" ;+ r6 => mkR "so:l" "ca'bbi:" "c'a:t" "c'iy" "c'ppa" "c'iya:" "cih" "c'iy" "c'iy" ;+ r7 => mkR "satr" "satta:I:" "se+m." "se+m.t" "sata:va" "saR'" "sath" "sat" "sat" ;+ r8 => mkR "AT'a:r" "aTh'a:I:" "AR'" "AR't" "AT'a:v" "AR'" "ATh" "AT'" "AT'" ; + r9 => table {sg => "Unni:s" ; r2 => "Unatti:s" ; r3 => "Um.ta:li:s" ; + r4 => "Um.ca:s" ; r5 => "UnsaT'" ; r6 => "Unhattar" ; + r7 => "Unassi:" ; + r8 => "Unannave:" ; r9 => "ninX,ya:nave:" } +} ;++oper ss : Str -> {s : Str} = \s -> {s = s} ;++lin pot01 = {s = table {unit => "E:k" ; _ => "dmi:" } ; size = sg ; n = Sg} ;+lin pot0 d = d ; +lin pot110 = {s = "ds" ; size = less100 ; n = Pl} ; +lin pot111 = {s = rows ! sg ! sg ; size = less100 ; n = Pl} ;+lin pot1to19 d = {s = rows ! d.size ! sg ; size = less100 ; n = d.n} ;+lin pot0as1 n = {s = n.s ! unit ; size = table {sg => singl ; _ => less100} ! n.size ; n = n.n } ;++lin pot1 d = {s = d.s ! ten ; size = less100 ; n = d.n} ;+lin pot1plus d e = {s = rows ! e.size ! d.size ; size = less100 ; n = d.n} ;++lin pot1as2 n = {s = n.s ; s2 = "dmi:" ; size = n.size ; n = n.n} ;+lin pot2 d = {s = (mksau (d.s ! unit) d.size) ; + s2 = d.s ! unit ++ "la:k'" ; size = more100 ; n = d.n} ;+lin pot2plus d e = + {s = (mksau (d.s ! unit) d.size) ++ e.s ; + s2 = (d.s ! unit) ++ "la:k'" ++ (mkhazar e.s e.size) ; + size = more100 ; n = d.n} ;++lin pot2as3 n = {s = n.s ; n = n.n} ;+lin pot3 n = {s = table { singl => ekhazar ;+ less100 => n.s ++ "haza:r" ; + more100 => n.s2 } ! n.size ; n = n.n} ;+lin pot3plus n m = + {s = table {singl => ekhazar ;+ less100 => n.s ++ "haza:r" ; + more100 => n.s2 } ! n.size ++ m.s ; n = n.n} ;++lin D_0 = { s = "N0" ; n = Sg};+lin D_1 = { s = "N1" ; n = Sg};+lin D_2 = { s = "N2" ; n = Pl};+lin D_3 = { s = "N3" ; n = Pl};+lin D_4 = { s = "N4" ; n = Pl};+lin D_5 = { s = "N5" ; n = Pl};+lin D_6 = { s = "N6" ; n = Pl};+lin D_7 = { s = "N7" ; n = Pl};+lin D_8 = { s = "N8" ; n = Pl};+lin D_9 = { s = "N9" ; n = Pl};+lin IDig d = { s = \\_ => d.s ; n = d.n} ;+lin IIDig d dg = { s = \\df => Prelude.glue (dg.s ! df) d.s ; n = Pl }; ++oper ekhazar : Str = variants {"haza:r" ; "E:k" ++ "haza:r"} ; +oper mkhazar : Str -> Size -> Str = \s -> \sz -> table {singl => ekhazar ; _ => s ++ "haza:r"} ! sz ;+oper mksau : Str -> DSize -> Str = \s -> \sz -> table {sg => "E:k" ++ "so+" ; _ => s ++ "so+"} ! sz ;+}
@@ -1,129 +1,130 @@-concrete StructuralHin of Structural = CatHin ** - open MorphoHin, ParadigmsHin, Prelude, NounHin,ParamX,CommonHindustani in { - - flags optimize=all ; - coding = utf8; - - lin - above_Prep = mkPrep "awpr" "awpr" ; - after_Prep = mkPrep ["kE bed"] ["kE bed"] ; - all_Predet = ss "tmam" ; - almost_AdA, almost_AdN = mkAdN "tqryba" ; - although_Subj = ss "agrch-" ; - always_AdV = ss "hmyXh" ; - and_Conj = sd2 [] "awr" ** {n = Pl} ; - because_Subj = ss "kywnkh-" ; - before_Prep = mkPrep "phlE" "phlE" ; - behind_Prep = mkPrep "pych-E" "pych-E" ; - between_Prep = mkPrep "drmyaN" "drmyaN" ; - both7and_DConj = sd2 "dwnwN" "awr" ** {n = Pl} ; - but_PConj = ss "lykn" ; - by8agent_Prep = mkPrep "" "" ; - by8means_Prep = mkPrep "" "" ; --- can8know_VV,can_VV = mkV "skna" ** { isAux = True} ; - during_Prep = mkPrep ["kE drmyaN"] ["kE drmyaN"] ; - either7or_DConj = sd2 "kwy ayk" "ya" ** {n = Sg} ; - everybody_NP = MassNP (UseN (ParadigmsHin.mkN "hr kwy" "hr kwy" "hr kwy" "hr kwy" "hr kwy" "hr kwy" Masc )); -- not a good way coz need to include NounHin --- every_Det = mkDet "hr" Sg; - everything_NP = MassNP (UseN (ParadigmsHin.mkN "hr cyz" "hr cyz" "hr cyzw" "sb cyzyN" "sb cyzwN" "sb cyzw" Masc )); - everywhere_Adv = mkAdv "hr jgh" ; --- few_Det = mkDet "cnd" Pl ; - first_Ord = {s = "pehla" ; n = Sg} ; --DEPRECATED - for_Prep = mkPrep "kylyE" "kylyE" ; - from_Prep = mkPrep "sE" "sE" ; - he_Pron = personalPN "wh" "as" "" "as ka" Sg Masc Pers3_Distant ; - here_Adv = mkAdv "yhaN" ; - here7to_Adv = mkAdv "yhaN pr" ; - here7from_Adv = mkAdv "yhaN sE" ; - how_IAdv = ss "kysE" ; - how8many_IDet = makeIDet "ktnE" "ktny" Pl ; - if_Subj = ss "agr" ; - in8front_Prep = mkPrep ["kE samnE"] ["kE samnE"] ; - i_Pron = personalPN "myN" "mjh-" "" "myra" Sg Masc Pers1; - in_Prep = mkPrep "meN" "meN" ; - it_Pron = personalPN "yh" "yh" "yh" "as ka" Sg Masc Pers3_Near; - less_CAdv = {s = "km" ; p = ""} ; --- many_Det = mkDet "bht zyadh" Pl ; - more_CAdv = {s = "zyadh-" ; p = "" } ; - most_Predet = ss "zyadh tr" ; - --much_Det = mkDet "bht" Pl ; --- must_VV = { --- s = table { --- VVF VInf => ["have to"] ; --- VVF VPres => "must" ; --- VVF VPPart => ["had to"] ; --- VVF VPresPart => ["having to"] ; --- VVF VPast => ["had to"] ; --# notpresent --- VVPastNeg => ["hadn't to"] ; --# notpresent --- VVPresNeg => "mustn't" --- } ; --- isAux = True --- } ; ------b no_Phr = ss "no" ; - no_Utt = ss "nhyN" ; - on_Prep = mkPrep "pr" "pr" ; --- one_Quant = demoPN "ayk" "ayk" "ayk" ; -- DEPRECATED - only_Predet = ss "srf" ; - or_Conj = sd2 [] "ya" ** {n = Sg} ; - otherwise_PConj = ss "ya ph-r" ; - part_Prep = mkPrep "" "" ; - please_Voc = ss "mhrbani" ; - possess_Prep = mkPrep "ka" "ky" ; - quite_Adv = ss "khamosh" ; - she_Pron = personalPN "wh" "as" "wh" "as ky" Sg Fem Pers3_Distant ; - so_AdA = ss "so" ; - somebody_NP = MassNP (UseN (ParadigmsHin.mkN "kwy" "kwy" "kwy" "kwy" "kwy" "kwy" Masc )); - --someSg_Det = mkDet "kch-" Sg ; - --somePl_Det = mkDet "kch-" Pl ; - something_NP = MassNP (UseN (ParadigmsHin.mkN "kwy cyz" "kwy cyz" "kwy cyz" "kh- cyzyN" "kh- cyzwN" "kh- cyzw" Masc )); - somewhere_Adv = mkAdv "khin pr" ; - that_Quant = demoPN "wh" "as" "an" ; - that_Subj = ss "kh"; - there_Adv = mkAdv "whaN" ; - there7to_Adv = mkAdv "whaN pr" ; - there7from_Adv = mkAdv ["whaN sE"] ; - therefore_PConj = ss "as lyE" ; - they_Pron = personalPN "wh" "wh" "wh" "an ka" Pl Masc Pers3_Distant ; ---- - this_Quant = demoPN "yh" "as" "an"; - through_Prep = mkPrep ["myN sE"] ["myN sE"] ; - too_AdA = ss "bht" ; - to_Prep = mkPrep "kw" "kw" ; - under_Prep = mkPrep "nycE" "nycE" ; - very_AdA = ss "bht" ; --- want_VV = mkV "cahna" ** { isAux = False} ; - we_Pron = personalPN "hm" "hm" "hm" "hmara" Pl Masc Pers1 ; - whatSg_IP = mkIP "kya" "kis" "kis" Sg Masc ; - whatPl_IP = mkIP "kya" "kin" "kin" Pl Masc ; - when_IAdv = ss "kb" ; - when_Subj = ss "kb" ; - where_IAdv = ss "khaN" ; - which_IQuant = {s = \\_ => "kwn sy"} ; --- whichPl_IDet = makeDet "kwn sa" "kwn sy" "kwn sE" "kwn sy" ; --- whichSg_IDet = makeDet "kwn sa" "kwn sy" "kwn sE" "kwn sy" ; - whoSg_IP = mkIP "kwn" "kis" "kis" Sg Masc ; - whoPl_IP = mkIP "kwn" "kn" "knhwN" Pl Masc ; - why_IAdv = ss "kywN" ; - without_Prep = mkPrep ["kE bGyr"] ["kE bGyr"] ; - with_Prep = mkPrep ["kE sath-"] ["kE sath-"] ; --- yes_Phr = ss "haN" ; - yes_Utt = ss "haN" ; - youSg_Pron = personalPN "tm" "tm" "tm" "tmh-ara" Sg Masc Pers2_Casual ; - youPl_Pron = personalPN "tm" "tm" "tm" "tmh-ara" Pl Masc Pers2_Casual ; - youPol_Pron = personalPN "Ap" "AP" "AP" "Ap ka" Sg Masc Pers2_Respect ; - no_Quant = demoPN " kwy nhyN" "kwy nhyN" "kwy nhyN" ; - not_Predet = {s="nhyN"} ; - if_then_Conj = sd2 "agr" "tw" ** {n = Sg} ; - at_least_AdN = mkAdN ["km az km"] ; - at_most_AdN = mkAdN ["zyadh sE zyadh"]; - nothing_NP = MassNP (UseN (ParadigmsHin.mkN "kwy cyz nhyN" "kwy cyz nhyN" "kwy cyz nhyN" "kwy cyz nhyN" "kwy cyz nhyN" "kwy cyz nhyN" Masc )); - except_Prep = mkPrep "swaE" "swaE" ; - nobody_NP = MassNP (UseN (ParadigmsHin.mkN "kwy nhyN" "kwy nhyN" "kwy nhyN" "kwy nhyN" "kwy nhyN" "kwy nhyN" Masc )); - - as_CAdv = {s = "etna" ; p = "jtna"} ; - - have_V2 = mkV2 (mkV "rakh-na") "" ; - - language_title_Utt = ss "ardw" ; - -} - +concrete StructuralHin of Structural = CatHin ** + open MorphoHin, ParadigmsHin, Prelude, NounHin,ParamX,CommonHindustani in {++ flags optimize=all ;+ coding = utf8;+ + lin+ above_Prep = mkPrep ["ke: U:par"] ["ke: U:par"] ;+ after_Prep = mkPrep ["ke: ba:d"] ["ke: ba:d"] ;+ all_Predet = ss "tama:m" ;+ almost_AdA, almost_AdN = mkAdN "taqari:ban" ;+ although_Subj = ss "Agarci" ;+ always_AdV = ss "hame:s*a:" ;+ and_Conj = sd2 [] "O+r" ** {n = Pl} ;+ because_Subj = ss "kX,yo:n~ki" ;+ before_Prep = mkPrep ["se: pahale:"] ["se: pahale:"] ; + behind_Prep = mkPrep ["ke: pi:c'e:"] ["ke: pi:c'e:"] ;+ between_Prep = mkPrep ["ke: darmiya:n"] ["ke: darmiya:n"] ;+ both7and_DConj = sd2 "do:no:m." "O+r" ** {n = Pl} ;+ but_PConj = ss "le:kin" ;+ by8agent_Prep = mkPrep "" "" ;+ by8means_Prep = mkPrep "" "" ;+ can8know_VV,can_VV = mkV "sakana:" ** { isAux = True} ;+ during_Prep = mkPrep ["ke: darmiya:n"] ["ke: darmiya:n"] ;+ either7or_DConj = sd2 "ko:I: E:k" "ya:" ** {n = Sg} ;+ everybody_NP = MassNP (UseN (ParadigmsHin.mkN "har ko:I:" "har ko:I:" "har ko:I:" "har ko:I:" "har ko:I:" "har ko:I:" Masc )); + every_Det = mkDet "har" "har" "har" "har" Sg;+ everything_NP = MassNP (UseN (ParadigmsHin.mkN "har ci:z" "har ci:z" "har ci:zo:n~" "sab ci:ze:n~" "sab ci:zo:n~" "sab ci:zo:n~" Masc ));+ everywhere_Adv = mkAdv "har jagah" ;+ few_Det = mkDet "cam.d" "cam.d" "cam.d" "cam.d" Pl ;+ first_Ord = {s = "" ; n = Sg} ; --De:PRe:CATe:D+ for_Prep = mkPrep ["ke: liye:"] ["ke: liye:"] ;+ from_Prep = mkPrep "se:" "se:" ;+ he_Pron = personalPN "vah" "Us" "" "Us ka:" "Us ki:" "Us ke:" "Us ki:" Sg Masc Pers3_Distant ;+ here_Adv = mkAdv "yaha:n~" ;+ here7to_Adv = mkAdv ["yaha:n~ par"] ;+ here7from_Adv = mkAdv ["yaha:n~ se:"] ;+ how_IAdv = ss "ke+se:" ;+ how8many_IDet = makeIDet "kitane:" "kitani:" Pl ;+ how8much_IAdv = ss "kitana:" ;+ if_Subj = ss "Agar" ;+ in8front_Prep = mkPrep ["ke: sa:mane:"] ["ke: sa:mane:"] ;+ i_Pron = personalPN "me+m." "muj'" "" "me:ra:" "me:ri:" "me:re:" "me:ri:" Sg Masc Pers1;+ in_Prep = mkPrep "me:m." "me:m." ;+ it_Pron = personalPN "yah" "Is" "yah" "Is ka:" "Is ki:" "Us ke:" "Us ki:" Sg Masc Pers3_Near;+ less_CAdv = {s = "kam" ; p = ""} ;+ many_Det = mkDet "bahut" "bahut" "bahut" "bahut" Pl ;+ more_CAdv = {s = "zX,ya:da:" ; p = "se:" } ;+ most_Predet = ss "sab se: zX,ya:da:" ;+ much_Det = mkDet "bahut" "bahut" "bahut" "bahut" Sg ;+-- must_VV = {+-- s = table {+-- VVF VInf => ["have to"] ;+-- VVF VPres => "must" ;+-- VVF VPPart => ["had to"] ;+-- VVF VPresPart => ["having to"] ;+-- VVF VPast => ["had to"] ; --# notpresent+-- VVPastNeg => ["hadn't to"] ; --# notpresent+-- VVPresNeg => "mustn't"+-- } ;+-- isAux = True+-- } ;+ no_Utt = ss "nahi:m." ;+ on_Prep = mkPrep "par" "par" ;+-- one_Quant = demoPN "" ; -- De:PRe:CATe:D+ only_Predet = ss "sirX,f" ;+ or_Conj = sd2 [] "ya:" ** {n = Sg} ;+ otherwise_PConj = ss "nahi:m. to:" ;+ part_Prep = mkPrep "" "" ;+-- please_Voc = ss "" ;+ possess_Prep = mkPrep "ka:" "ki:" ;+ quite_Adv = ss "ka:fi:" ;+ she_Pron = personalPN "vah" "Us" "Us" "Us ka:" "Us ki:" "Us ke:" "Us ki:" Sg Fem Pers3_Distant ; -- chek with prasad about 'Us'+ so_AdA = ss "to:" ;+ somebody_NP = MassNP (UseN (ParadigmsHin.mkN "ko:I:" "ko:I:" "ko:I:" "ko:I:" "ko:I:" "ko:I:" Masc ));+ someSg_Det = mkDet "kuc'" "kuc'" "kuc'" "kuc'" Sg ;+ somePl_Det = mkDet "kuc'" "kuc'" "kuc'" "kuc'" Pl ;+ something_NP = MassNP (UseN (ParadigmsHin.mkN ["ko:I: ci:z"] ["ko:I: ci:z"] ["ko:I: ci:z"] ["ko:I: ci:z"] ["ko:I: ci:z"] ["ko:I: ci:z"] Masc ));+ somewhere_Adv = mkAdv ["kahi:m."] ;+ that_Quant = demoPN "vah" "Us" "Un" ;+ that_Subj = ss "ki";+ there_Adv = mkAdv "vaha:n~" ;+ there7to_Adv = mkAdv ["vaha:n~ par"] ;+ there7from_Adv = mkAdv ["vaha:n~ se:"] ;+ therefore_PConj = ss "Is liye:" ;+ they_Pron = personalPN "vah" "vah" "vah" "Un ka:" "Un ki:" "Un ke:" "Un ki:" Pl Masc Pers3_Distant ; ---- + this_Quant = demoPN "yah" "Is" "In"; + through_Prep = mkPrep ["me:m. se:"] ["me:m. se:"] ;+ too_AdA = ss "bahut" ;+ to_Prep = mkPrep "ko:" "ko:" ; -- ** {lock_Prep = <>};+ under_Prep = mkPrep ["ke: ni:ce:"] ["ke: ni:ce:"] ; -- ** {lock_Prep = <>};+ very_AdA = ss "bahut" ;+ want_VV = mkV "ca:hna:" ** { isAux = False} ;+ we_Pron = personalPN "ham" "ham" "ham" "hama:ra:" "hama:ri:" "hama:re:" "hama:ri:" Pl Masc Pers1 ;+ whatSg_IP = mkIP "kX,ya:" "kX,ya:" "kX,ya:" Sg Masc ; -- confirm+ whatPl_IP = mkIP "kX,ya:" "kX,ya:" "kX,ya:" Pl Masc ;+ when_IAdv = ss "kab" ;+ when_Subj = ss "kab" ;+ where_IAdv = ss "kaha:n~" ;+ which_IQuant = mkIQuant ["ko+n sa:"] ["ko+n se:"] "" ["ko+n si:"] ["ko+n si:"] ""+ ["ko+n se:"] ["ko+n se:"] "" ["ko+n si:"] ["ko+n si:"] "" ; -- need to put right forms Prasad+-- whichPl_IDet = makeDet "" ;+-- whichSg_IDet = makeDet "";+ whoSg_IP = mkIP "ko+n" "kis" "kis" Sg Masc ;+ whoPl_IP = mkIP "ko+n" "kin" "kinho:m." Pl Masc ;+ why_IAdv = ss "kX,yo:m." ;+-- without_Prep = mkPrep ;+ with_Prep = mkPrep ["ke: sa:t'"] ["ke: sa:t'"] ;+-- yes_Phr = ss "???" ;+ yes_Utt = ss "ha:n~" ;+ youSg_Pron = personalPN "tu:" "tum" "tum" "tumha:ra:" "tumha:ri:" "tumha:re:" "tumha:ri:" Sg Masc Pers2_Casual ;+ youPl_Pron = personalPN "tum" "tum" "tum" "tumha:ra:" "tumha:ri:" "tumha:re:" "tumha:ri:" Pl Masc Pers2_Casual ;+ youPol_Pron = personalPN "A:p" "A:p" "A:p" "A:p ka:" "A:p ki:" "A:p ke:" "A:p ki:" Sg Masc Pers2_Respect ;+-- no_Quant = demoPN "ko:I: nahi:m." ; + not_Predet = {s="nahi:m."} ;+-- if_then_Conj = sd2 "agar to:" ** {n = Sg} ; + at_least_AdN = mkAdN ["kam se: kam"] ;+ at_most_AdN = mkAdN ["zX,ya:da: se: zX,ya:da:"];+-- nothing_NP = MassNP (UseN (ParadigmsHin.mkN "kuc' nahi:m." Masc )); + except_Prep = mkPrep "ke: siva:y" "ke: siva:y";+-- nobody_NP = MassNP (UseN (ParadigmsHin.mkN "ko:I: nahi:m." Masc )); ++ as_CAdv = {s = "itna:" ; p = "jitna:"} ;++-- have_V2 = mkV2 "";++ language_title_Utt = ss "hinX,di:" ;++}+
@@ -8,4 +8,5 @@ rf -file=src/LexiconHin.gf | ps -env=quotes -to_devanagari | wf -file=LexiconHin.gf rf -file=src/MorphoHin.gf | ps -env=quotes -to_devanagari | wf -file=MorphoHin.gf rf -file=src/StructuralHin.gf | ps -env=quotes -to_devanagari | wf -file=StructuralHin.gf+rf -file=src/NumeralHin.gf | ps -env=quotes -to_devanagari | wf -file=NumeralHin.gf
@@ -1,4 +1,4 @@-incomplete concrete AdjectiveHindustani of Adjective = CatHindustani ** open CommonHindustani,ResHindustani, StringsHindustani, Prelude in { +incomplete concrete AdjectiveHindustani of Adjective = CatHindustani ** open CommonHindustani,ResHindustani, Prelude in { lin @@ -19,8 +19,10 @@ s = \\n,g,c,d => a.s ! n ! g ! c ! d ++ RefPron ++ sE ; } ; - SentAP ap sc = { - s = \\n,g,c,d => ap.s ! n ! g ! c ! d ++ sc.s ; + SentAP ap sc = { + s = \\n,g,c,d => case sc.fromVP of { + True => sc.s ++ kw ++ ap.s ! n ! g ! c ! d ; + False => ap.s ! n ! g ! c ! d ++ sc.s } ; } ; AdAP ada ap = {
@@ -1,4 +1,4 @@-incomplete concrete AdverbHindustani of Adverb = CatHindustani ** open CommonHindustani, ResHindustani, StringsHindustani, Prelude in { +incomplete concrete AdverbHindustani of Adverb = CatHindustani ** open CommonHindustani, ResHindustani, Prelude in { lin PositAdvAdj a = {s = \\g => a.s ! Sg ! g ! Obl ! Posit} ;
@@ -1,6 +1,6 @@ --concrete CatUrd of Cat = CommonX - [Adv,AdN] ** open ResUrd, Prelude in { incomplete concrete CatHindustani of Cat = - CommonX - [Adv,AdN]** open ResHindustani, Prelude, CommonHindustani, (R = ParamX) in { + CommonX - [Adv,AdN,SC]** open ResHindustani, Prelude, CommonHindustani, (R = ParamX) in { flags optimize=all_subs ; @@ -11,6 +11,7 @@ QS = {s : QForm => Str} ; RS = {s : Agr => Str ; c : Case} ; -- c for it clefts SSlash = {s : Str ; c2 : ResHindustani.Compl} ; + SC = {s : Str ; fromVP : Bool} ; ---- Sentence
@@ -4,8 +4,8 @@ -- -- This module contains operations that are needed to make the -- resource syntax work. -resource CommonHindustani = ParamX ** open Prelude,Predef in {-+resource CommonHindustani = ParamX ** open Prelude, Predef in {+--interface CommonHindustani = ParamX ** open Prelude,Predef,StringsHindustani1 in { flags coding = utf8 ; oper@@ -71,105 +71,8 @@ NPCase = NPC Case | NPObj | NPErg ; Order = ODir | OQuest ; - - oper - copula : CTense -> Number -> UPerson -> Gender -> Str = \t,n,p,g -> - case <t,n,p,g> of {- <CPresent,Sg,Pers1,_ > => "hwN" ;- <CPresent,Sg,Pers2_Casual,_ > => "hE" ;- <CPresent,Sg,Pers2_Familiar,_ > => "hw" ;- <CPresent,Sg,Pers2_Respect,_ > => "hyN" ;- <CPresent,Sg,Pers3_Near,_ > => "hE" ;- <CPresent,Sg,Pers3_Distant,_ > => "hE" ;- <CPresent,Pl,Pers1,_ > => "hyN" ;- <CPresent,Pl,Pers2_Casual,_ > => "hw" ;- <CPresent,Pl,Pers2_Familiar,_ > => "hw" ;- <CPresent,Pl,Pers2_Respect,_ > => "hyN" ;- <CPresent,Pl,Pers3_Near,_ > => "hyN" ;- <CPresent,Pl,Pers3_Distant,_ > => "hyN" ;- <CPast,Sg,Pers1,Masc > => "th'a" ;- <CPast,Sg,Pers1,Fem > => "th'y" ;- <CPast,Sg,Pers2_Casual,Masc > => "th'a" ;- <CPast,Sg,Pers2_Casual,Fem > => "th'y" ;- <CPast,Sg,Pers2_Familiar,Masc > => "th-a" ;- <CPast,Sg,Pers2_Familiar,Fem > => "th'y" ;- <CPast,Sg,Pers2_Respect,Masc > => "th'E" ;- <CPast,Sg,Pers2_Respect,Fem > => "th'yN" ;- <CPast,Sg,Pers3_Near,Masc > => "th-a" ;- <CPast,Sg,Pers3_Near,Fem > => "th'y" ;- <CPast,Sg,Pers3_Distant,Masc > => "th-a" ;- <CPast,Sg,Pers3_Distant,Fem > => "th'y" ;- <CPast,Pl,Pers1,Masc > => "th'E" ;- <CPast,Pl,Pers1,Fem > => "th'yN" ;- <CPast,Pl,Pers2_Casual,Masc > => "th'E" ;- <CPast,Pl,Pers2_Casual,Fem > => "th'yN" ;- <CPast,Pl,Pers2_Familiar,Masc > => "th'E" ;- <CPast,Pl,Pers2_Familiar,Fem > => "th'yN" ;- <CPast,Pl,Pers2_Respect,Masc > => "th'E" ;- <CPast,Pl,Pers2_Respect,Fem > => "th'yN" ;- <CPast,Pl,Pers3_Near,Masc > => "th'E" ;- <CPast,Pl,Pers3_Near,Fem > => "th'yN" ;- <CPast,Pl,Pers3_Distant,Masc > => "th'E" ;- <CPast,Pl,Pers3_Distant,Fem > => "th'yN" ;- <CFuture,Sg,Pers1,Masc > => "ga" ;- <CFuture,Sg,Pers1,Fem > => "gy" ;- <CFuture,Sg,Pers2_Casual,Masc > => "ga" ;- <CFuture,Sg,Pers2_Casual,Fem > => "gy" ;- <CFuture,Sg,Pers2_Familiar,Masc > => "gE" ;- <CFuture,Sg,Pers2_Familiar,Fem > => "gy" ;- <CFuture,Sg,Pers2_Respect,Masc > => "gE" ;- <CFuture,Sg,Pers2_Respect,Fem > => "gy" ;- <CFuture,Sg,Pers3_Near,Masc > => "ga" ;- <CFuture,Sg,Pers3_Near,Fem > => "gy" ;- <CFuture,Sg,Pers3_Distant,Masc > => "ga" ;- <CFuture,Sg,Pers3_Distant,Fem > => "gy" ;- <CFuture,Pl,Pers1,Masc > => "gE" ;- <CFuture,Pl,Pers1,Fem > => "gy" ;- <CFuture,Pl,Pers2_Casual,Masc > => "gE" ;- <CFuture,Pl,Pers2_Casual,Fem > => "gy" ;- <CFuture,Pl,Pers2_Familiar,Masc > => "gE" ;- <CFuture,Pl,Pers2_Familiar,Fem > => "gy" ;- <CFuture,Pl,Pers2_Respect,Masc > => "gE" ;- <CFuture,Pl,Pers2_Respect,Fem > => "gy" ;- <CFuture,Pl,Pers3_Near,Masc > => "gE" ;- <CFuture,Pl,Pers3_Near,Fem > => "gE" ;- <CFuture,Pl,Pers3_Distant,Masc > => "gE" ;- <CFuture,Pl,Pers3_Distant,Fem > => "gy" - - - } ;- raha : Gender -> Number -> Str = \g,n -> - (regAdjective "rha").s ! n ! g ! Dir ! Posit ;-- cka : Gender -> Number -> Str = \g,n -> - (regAdjective "cka").s ! n ! g ! Dir ! Posit ;- - hw : UPerson -> Number -> Str = \pp,n -> - case <pp,n> of {- <Pers1,_> => "hwN";- <_,Pl> => "hwN";- <_,_> => "hw"- };- - ------------------------------------------------ -- Hindustani Adjectives- ------------------------------------------------ - Adjective = { s: Number => Gender => Case => Degree => Str };- regAdjective : Str -> Adjective; - regAdjective x = case x of {- acch + ("a"|"aN") => mkAdjective x ("bht" ++ x) ("sb sE" ++ x) (acch + "E") ("bht" ++ acch + "E") ("sb sE" ++ acch + "E") (acch + "E") ("bht" ++ acch + "E") ("sb sE" ++ acch + "E")- (acch + "y") ("bht" ++ acch + "y") ("sb sE" ++ acch + "y") (acch + "y") ("bht" ++ acch + "y") ("sb sE" ++ acch + "y") (acch + "y") ("bht" ++ acch + "y") ("sb sE" ++ acch + "y")- (acch +"E") ("bht" ++ acch + "E") ("sb sE" ++ acch + "E") (acch + "E") ("bht" ++ acch + "E") ("sb sE" ++ acch + "E") (acch + "E") ("bht" ++ acch + "E") ("sb sE" ++ acch + "E")- (acch + "y") ("bht" ++ acch + "y") ("sb sE" ++ acch + "y") (acch + "y") ("bht" ++ acch + "y") ("sb sE" ++ acch + "y") (acch + "y") ("bht" ++ acch + "y") ("sb sE" ++ acch + "y");- - _ => mkAdjective x ("bht" ++ x) ("sb sE" ++ x) x ("bht" ++ x) ("sb sE" ++ x) x ("bht" ++ x) ("sb sE" ++ x)- x ("bht" ++ x) ("sb sE" ++ x) x ("bht" ++ x) ("sb sE" ++ x) x ("bht" ++ x) ("sb sE" ++ x)- x ("bht" ++ x) ("sb sE" ++ x) x ("bht" ++ x) ("sb sE" ++ x) x ("bht" ++ x) ("sb sE" ++ x)- x ("bht" ++ x) ("sb sE" ++ x) x ("bht" ++ x) ("sb sE" ++ x) x ("bht" ++ x) ("sb sE" ++ x)- - }; - + + oper mkAdjective : (x1,x2,x3,x4,x5,x6,x7,x8,x9,x10,x11,x12,x13,x14,x15,x16,x17,x18,x19,x20,x21,x22,x23,x24,x25,x26,x27,x28,x29,x30,x31,x32,x33,x34,x35,x36:Str) -> Adjective = \y1,y2,y3,y4,y5,y6,y7,y8,y9,y10,y11,y12,y13,y14,y15,y16,y17,y18,y19,y20,y21,y22,y23,y24,y25,y26,y27,y28,y29,y30,y31,y32,y33,y34,y35,y36 -> {@@ -249,34 +152,10 @@ } }; - compoundAdj : Str -> Str -> Adjective = \s1,s2 -> mkCompoundAdj (regAdjective s1) (regAdjective s2) ;- mkCompoundAdj : Adjective -> Adjective -> Adjective ;- mkCompoundAdj adj1 adj2 = {s = \\n,g,c,d => adj1.s ! n ! g ! c ! d ++ adj2.s ! n ! g ! c ! d} ;+ Adjective = { s: Number => Gender => Case => Degree => Str };+ Verb : Type = {s : VerbForm => Str} ;-- predV : Verb -> VPH ;- predV v = {- s = \\vh => - case vh of {- VPTense VPPres (Ag g n p) => {fin = copula CPresent n p g ; inf = v.s ! VF Imperf p n g } ;- VPTense VPPast (Ag g n p) => {fin = [] ; inf =v.s ! VF Perf p n g} ;- VPTense VPFutr (Ag g n p) => {fin = copula CFuture n p g ; inf = v.s ! VF Subj p n g } ;- VPTense VPPerf (Ag g n p) => { fin = [] ; inf = v.s ! Root ++ cka g n } ; - VPStem => {fin = [] ; inf = v.s ! Root};- VPInf => {fin = v.s ! Inf_Obl ; inf = v.s ! Root}; -- for V2V like sonE ky altja krna , check if it is being used anywhere else- VPImp => {fin = v.s ! VF Subj Pers3_Near Pl Masc ; inf = v.s ! Root};- _ => {fin = [] ; inf = v.s ! Root} - };- obj = {s = [] ; a = defaultAgr} ;- subj = VIntrans ;- inf = v.s ! Inf;- ad = [];- embComp = [];- prog = False ;- comp = \\_ => []- } ; - defaultAgr : Agr = agrP3 Masc Sg ; agrP3 : Gender -> Number -> Agr = \g,n -> Ag g n Pers3_Distant ; toAgr : Number -> UPerson -> Gender -> Agr = \n,p,g -> @@ -300,8 +179,9 @@ giveGender : Agr -> Gender =\a -> case a of { Ag g _ _ => g };- insertSubj : UPerson -> Str -> Str = \p,s -> - case p of { Pers1 => s ++ "wN" ; _ => s ++ "E"};+ +-- insertSubj : UPerson -> Str -> Str = \p,s -> +-- case p of { Pers1 => s ++ "wN" ; _ => s ++ "E"}; mkOrd : Str -> Str = \s -> case s of {@@ -311,6 +191,7 @@ "car" => "cwth'a"; "ch'" => "ch'Ta"; _ => s ++ "waN"- }; + };+ }
@@ -1,8 +1,35 @@-interface DiffHindustani = open CommonHindustani, Prelude in {+interface DiffHindustani = open Prelude in { oper mkClause : NP -> VPH -> Clause ; mkSClause : Str -> Agr -> VPH -> Clause ; np2pronCase : (Case => Str) -> NPCase -> Agr -> Str ;+ conjThat : Str ; -- = "kh" ;+ insertSubj : UPerson -> Str -> Str ;++ kwd : Str ;+ ky : Str ;+ agr : Str ; + awr : Str ; + jn : Str ; + js : Str ; + jw : Str ; + kw : Str ; + mt : Str ; + nE : Str ; + nh : Str ; + sE : Str ; + waN : Str ; + comma : Str ; + indfArt : Str ;+ nE : Str ;+ hE : Str ;++ copula : CTense -> Number -> UPerson -> Gender -> Str ;+ raha : Gender -> Number -> Str ;+ cka : Gender -> Number -> Str ;+ hw : UPerson -> Number -> Str ;+ hwa : Agr -> Str ;+ regAdjective : Str -> Adjective ; }
@@ -1,6 +1,6 @@ --concrete NounUrd of Noun = CatUrd ** open ResUrd, Prelude in { incomplete concrete NounHindustani of Noun =- CatHindustani ** open CommonHindustani, ResHindustani, StringsHindustani, Prelude in {+ CatHindustani ** open CommonHindustani, ResHindustani, Prelude in { flags optimize=all_subs ; @@ -19,7 +19,7 @@ } ; PPartNP np v2 = {- s = \\c => v2.s ! VF Perf (fromAgr np.a).p (fromAgr np.a).n (fromAgr np.a).g ++ np.s ! c ;+ s = \\c => v2.s ! VF Perf (fromAgr np.a).p (fromAgr np.a).n (fromAgr np.a).g ++ hwa np.a ++ np.s ! c ; a = np.a } ; @@ -133,7 +133,11 @@ -- AdvCN cn ad = {s = \\n,c => cn.s ! n ! c ++ ad.s ; g = cn.g} ; -- changed during WebAlt adver comes before noun like phaRy pr gh-r (house on the hill) AdvCN cn ad = {s = \\n,c => ad.s ! cn.g ++ cn.s ! n ! c ; g = cn.g} ; - SentCN cn sc = {s = \\n,c => cn.s ! n ! c ++ sc.s ; g = cn.g} ;+ SentCN cn sc = {s = \\n,c => case sc.fromVP of {+ True => sc.s ++ ky ++ cn.s ! n ! c ;+ False => cn.s ! n ! c ++ sc.s } ;+ g = cn.g ;+ } ; ApposCN cn np = {s = \\n,c => cn.s ! n ! Dir ++ np.s ! NPC c ; g = cn.g} ;
@@ -1,6 +1,6 @@ --concrete QuestionUrd of Question = CatUrd ** open ResUrd, StringsHindustani, Prelude in { incomplete concrete QuestionHindustani of Question = - CatHindustani ** open CommonHindustani, ResHindustani, StringsHindustani, Prelude in { + CatHindustani ** open CommonHindustani, ResHindustani, Prelude in { flags optimize=all_subs ; coding = utf8; @@ -24,8 +24,11 @@ } }; QuestSlash ip slash = - let ip1 = ip.s ! Dir; - ip2 = ip.s ! Obl ++ nE + let + -- ip1 = ip.s ! Dir; + -- ip2 = ip.s ! Obl ++ nE + ip1 = ip.s ! Obl ++ kw; + ip2 = ip.s ! Obl ++ kw in { s = \\t,p,o => case t of { VPImpPast => ip2 ++ slash.s ! t ! p ! ODir;
@@ -1,6 +1,6 @@ --concrete RelativeUrd of Relative = CatUrd ** open ResUrd, StringsHindustani in { incomplete concrete RelativeHindustani of Relative = - CatHindustani ** open CommonHindustani, ResHindustani, StringsHindustani, Prelude in { + CatHindustani ** open CommonHindustani, ResHindustani, Prelude in { flags optimize=all_subs ; coding = utf8; @@ -11,7 +11,7 @@ s = \\t,p,o,agr => case <t,giveNumber agr> of { <VPImpPast,Sg> => js ++ cl.s ! t ! p ! o ; <VPImpPast,Pl> => jn ++ cl.s ! t ! p ! o ; - <_,_> => "jw" ++ cl.s ! t ! p ! o + <_,_> => jw ++ cl.s ! t ! p ! o }; c = Dir } ;
@@ -50,7 +50,7 @@ eq : Str -> Str -> Bool = \s1,s2-> (pbool2bool (eqStr s1 s2)) ; RefPron : Str; - RefPron = "Kwd"; + RefPron = kwd ; ---------------------------------------------------------- -- Grammar part @@ -60,47 +60,23 @@ toNP : ( Case => Str) -> NPCase -> Str = \pn, npc -> case npc of { NPC c => pn ! c ; NPObj => pn ! Dir ; - NPErg => pn ! Obl ++ "nE" + NPErg => pn ! Obl ++ nE } ; detcn2NP : (Determiner) -> Noun -> NPCase -> Number -> Str = \dt,cn,npc,nn -> case npc of { -- NPC c => dt.s ! Sg ! Masc ++ cn.s ! nn ! c ; --changed while phrasebook e.g tyry beti where gender of determiner 'tyry' should be dependent on gender of common noum e.g 'beti' NPC c => dt.s ! nn ! cn.g ! c ++ cn.s ! nn ! c ; NPObj => dt.s ! nn ! cn.g ! Obl ++ cn.s ! nn ! Dir ; - NPErg => dt.s ! nn ! cn.g ! Obl ++ cn.s ! nn ! Obl ++ "nE" + NPErg => dt.s ! nn ! cn.g ! Obl ++ cn.s ! nn ! Obl ++ nE } ; det2NP : (Determiner) -> NPCase -> Str = \dt,npc -> case npc of { NPC c => dt.s ! Sg ! Masc ! c ; NPObj => dt.s ! Sg ! Masc ! Dir ; - NPErg => dt.s ! Sg ! Masc ! Obl ++ "nE" + NPErg => dt.s ! Sg ! Masc ! Obl ++ nE } ; ------------------------------------------ -- Agreement transformations ----------------------------------------- -{- toAgr : Number -> UPerson -> Gender -> Agr = \n,p,g -> - Ag g n p; - - - fromAgr : Agr -> {n : Number ; p : UPerson ; g : Gender} = \a -> case a of { - Ag g n p => {n = n ; p = p ; g = g} - } ; - - conjAgr : Agr -> Agr -> Agr = \a0,b0 -> - let a = fromAgr a0 ; b = fromAgr b0 - in - toAgr - (conjNumber a.n b.n) - b.p a.g; - - giveNumber : Agr -> Number =\a -> case a of { - Ag _ n _ => n - }; - giveGender : Agr -> Gender =\a -> case a of { - Ag g _ _ => g - }; --} --- defaultAgr : Agr = agrP3 Masc Sg ; --- agrP3 : Gender -> Number -> Agr = \g,n -> Ag g n Pers3_Distant ; personalAgr : Agr = agrP1 Masc Sg ; agrP1 : Gender -> Number -> Agr = \g,n -> Ag g n Pers1 ; @@ -121,6 +97,7 @@ objVType : VType -> NPCase = \vt -> case vt of { VTrans => NPObj ; + VTransPost => NPC Dir ; _ => NPC Obl } ; @@ -131,14 +108,28 @@ predVc : (Verb ** {c2,c1 : Str}) -> VPHSlash = \verb -> predV verb ** {c2 = {s = verb.c1 ; c = VTrans} } ; -{- -------------------------- --- added for cauitives - predVcc : (Verb **{c2:Compl}) -> VPHSlash = \verb -> - predV verb ** {c2 = {s = "" ; c = VTrans} } ; ------------------------- --} - predAux : Aux -> VPH = \verb -> { + predV : Verb -> VPH ; + predV v = { + s = \\vh => + case vh of { + VPTense VPPres (Ag g n p) => {fin = copula CPresent n p g ; inf = v.s ! VF Imperf p n g } ; + VPTense VPPast (Ag g n p) => {fin = [] ; inf =v.s ! VF Perf p n g} ; + VPTense VPFutr (Ag g n p) => {fin = copula CFuture n p g ; inf = v.s ! VF Subj p n g } ; + VPTense VPPerf (Ag g n p) => { fin = [] ; inf = v.s ! Root ++ cka g n } ; + VPStem => {fin = [] ; inf = v.s ! Root}; + VPInf => {fin = v.s ! Inf_Obl ; inf = v.s ! Root}; -- for V2V like sonE ky altja krna , check if it is being used anywhere else + VPImp => {fin = v.s ! VF Subj Pers3_Near Pl Masc ; inf = v.s ! Root}; + _ => {fin = [] ; inf = v.s ! Root} + }; + obj = {s = [] ; a = defaultAgr} ; + subj = VIntrans ; + inf = v.s ! Inf; + ad = []; + embComp = []; + prog = False ; + comp = \\_ => [] + } ; + predAux : Aux -> VPH = \verb -> { s = \\vh => let @@ -191,107 +182,6 @@ comp = verb.comp } ; -{- Clause : Type = {s : VPHTense => Polarity => Order => Str} ; - mkClause : NP -> VPH -> Clause = \np,vp -> { - s = \\vt,b,ord => - let - subjagr : NPCase * Agr = case vt of { - VPImpPast => case vp.subj of { - VTrans => <NPErg, vp.obj.a> ; - VTransPost => <NPErg, defaultAgr> ; - _ => <NPC Dir, np.a> - } ; - _ => <NPC Dir, np.a> - } ; - subj = subjagr.p1 ; - agr = subjagr.p2 ; - n = (fromAgr agr).n; - p = (fromAgr agr).p; - g = (fromAgr agr).g; - vps = case vt of { - - VPGenPres => vp.s ! VPTense VPPres agr ; - VPImpPast => vp.s ! VPTense VPPast agr ; - VPFut => case vp.prog of { True => {fin = (vp.s ! VPTense VPFutr agr).fin ; inf = (vp.s ! VPTense VPFutr agr).inf ++ hw p n} ; - _ => vp.s ! VPTense VPFutr agr } ; - VPContPres => {fin = copula CPresent n p g ; inf = (vp.s ! VPStem).inf ++ raha g n } ; - VPContPast => {fin = copula CPast n p g ; inf = (vp.s ! VPStem).inf ++ raha g n } ; - VPContFut => {fin = copula CFuture n p g ; inf = (vp.s ! VPStem).inf ++ raha g n ++ hw p n} ; - VPPerfPres => {fin = copula CPresent n p g ; inf = (vp.s ! VPTense VPPerf agr).inf } ; - VPPerfPast => {fin = copula CPast n p g ; inf = (vp.s ! VPTense VPPerf agr).inf } ; - VPPerfFut => {fin = copula CFuture n p g ; inf = (vp.s ! VPTense VPPerf agr).inf ++ hw p n } ; - VPPerfPresCont => {fin = copula CPresent n p g ; inf = (vp.s ! VPTense VPPres agr).inf ++ raha g n } ; - VPPerfPastCont => {fin = copula CPast n p g ; inf = (vp.s ! VPTense VPPres agr).inf ++ raha g n } ; - VPPerfFutCont => {fin = copula CFuture n p g ; inf = (vp.s ! VPTense VPPres agr).inf ++ raha g n ++ hw p n } ; - VPSubj => case vp.prog of { True => {fin = (vp.s ! VPTense VPFutr agr).inf ++ hw p n ; inf = "Xayd" } ; - _ => {fin = (vp.s ! VPTense VPFutr agr).inf ; inf = "Xayd" } } - - }; - - - quest = - case ord of - { ODir => []; - OQuest => "kya" }; - na = - case b of - { Pos => []; - Neg => "na" }; - nahim = - case b of - { Pos => []; - Neg => "nhyN" }; - in - case vt of { - VPSubj => quest ++ np.s ! subj ++ vp.obj.s ++ vp.ad ++ vp.comp ! np.a ++ na ++ vps.inf ++ vps.fin ++ vp.embComp ; - _ => quest ++ np.s ! subj ++ vp.obj.s ++ vp.ad ++ vp.comp ! np.a ++ nahim ++ vps.inf ++ vps.fin ++ vp.embComp}; - - } ; - - mkSClause : Str -> Agr -> VPH -> Clause = - \subj,agr,vp -> { - s = \\t,b,ord => - let - n = (fromAgr agr).n; - p = (fromAgr agr).p; - g = (fromAgr agr).g; - vps = case t of { - VPGenPres => vp.s ! VPTense VPPres agr ; - VPImpPast => vp.s ! VPTense VPPast agr ; - VPFut => vp.s ! VPTense VPFutr agr ; - VPContPres => {fin = copula CPresent n p g ; inf = (vp.s ! VPStem).inf ++ raha g n } ; - VPContPast => {fin = copula CPast n p g ; inf = (vp.s ! VPStem).inf ++ raha g n } ; - VPContFut => {fin = copula CFuture n p g ; inf = (vp.s ! VPStem).inf ++ raha g n ++ hw p n } ; - VPPerfPres => {fin = copula CPresent n p g ; inf = (vp.s ! VPStem).inf ++ cka g n } ; - VPPerfPast => {fin = copula CPast n p g ; inf = (vp.s ! VPStem).inf ++ cka g n } ; - VPPerfFut => {fin = copula CFuture n p g ; inf = (vp.s ! VPStem).inf ++ cka g n ++ hw p n } ; - VPPerfPresCont => {fin = copula CPresent n p g ; inf = (vp.s ! VPStem).inf ++ raha g n } ; - VPPerfPastCont => {fin = copula CPast n p g ; inf = (vp.s ! VPStem).inf ++ raha g n } ; - VPPerfFutCont => {fin = copula CFuture n p g ; inf = (vp.s ! VPStem).inf ++ raha g n ++ hw p n } ; - VPSubj => {fin = insertSubj p (vp.s ! VPStem).inf ; inf = "Xayd" } - - }; - - quest = - case ord of - { ODir => []; - OQuest => "kya" }; - na = - case b of - { Pos => []; - Neg => "na" }; - nahim = - case b of - { Pos => []; - Neg => "nhyN" }; - in - case t of { - VPSubj => quest ++ subj ++ vp.obj.s ++ vp.ad ++ vp.comp ! agr ++ na ++ vps.inf ++ vps.fin ++ vp.embComp; - _ => quest ++ subj ++ vp.obj.s ++ vp.ad ++ vp.comp ! agr ++ nahim ++ vps.inf ++ vps.fin ++ vp.embComp}; - } ; --} --- insertSubj : UPerson -> Str -> Str = \p,s -> --- case p of { Pers1 => s ++ "wN" ; _ => s ++ "E"}; insertObj : (Agr => Str) -> VPH -> VPH = \obj1,vp -> { s = vp.s ; @@ -326,19 +216,18 @@ } ; - insertObjc : (Agr => Str) -> VPHSlash -> VPHSlash = \obj,vp -> + insertObjc : (Agr => Str) -> VPHSlash -> VPHSlash = \obj,vp -> insertObj obj vp ** {c2 = vp.c2} ; insertObjc2 : Str -> VPHSlash -> VPHSlash = \obj,vp -> insertObj2 obj vp ** {c2 = vp.c2} ; infVP : Bool -> VPH -> Agr -> Str = \isAux,vp,a -> - vp.obj.s ++ vp.inf ++ vp.comp ! a ; --- infVV : Bool -> VPH -> Str = \isAux,vp -> --- case isAux of {False => vp.obj.s ++ vp.inf ; True => vp.obj.s ++ (vp.s ! VPImp).fin }; + vp.obj.s ++ vp.comp ! a ++ vp.inf ; + infVV : Bool -> VPH -> Str = \isAux,vp -> - case isAux of {False => vp.obj.s ++ (vp.comp ! (toAgr Sg Pers1 Masc)) ++ vp.inf ; True => vp.obj.s ++ (vp.comp ! (toAgr Sg Pers1 Masc)) ++ (vp.s ! VPImp).fin } ; + case isAux of {False => vp.obj.s ++ (vp.comp ! (toAgr Sg Pers1 Masc)) ++ vp.inf ; True => (vp.s ! VPImp).inf ++ vp.obj.s ++ (vp.comp ! (toAgr Sg Pers1 Masc)) } ; infV2V : Bool -> VPH -> Str = \isAux,vp -> - case isAux of {False => vp.obj.s ++ (vp.comp ! (toAgr Sg Pers1 Masc)) ++ (vp.s ! VPInf).fin ++ "ky" ; True => vp.obj.s ++ (vp.comp ! (toAgr Sg Pers1 Masc)) ++ (vp.s ! VPImp).fin ++ "ky"}; + case isAux of {False => vp.obj.s ++ (vp.comp ! (toAgr Sg Pers1 Masc)) ++ (vp.s ! VPInf).fin ++ ky ; True => vp.obj.s ++ (vp.comp ! (toAgr Sg Pers1 Masc)) ++ (vp.s ! VPImp).fin ++ ky}; insertObject : NP -> VPHSlash -> VPH = \np,vps -> { @@ -374,7 +263,7 @@ comp = vp.comp } ; - conjThat : Str = "kh" ; +-- conjThat : Str = "kh" ; insertEmbCompl : VPH -> Str -> VPH = \vp,emb -> { s = vp.s ; @@ -395,7 +284,12 @@ embComp = vp.embComp ; prog = vp.prog ; comp = vp.comp - } ; + } ; + + compoundAdj : Str -> Str -> Adjective = \s1,s2 -> mkCompoundAdj (regAdjective s1) (regAdjective s2) ; + mkCompoundAdj : Adjective -> Adjective -> Adjective ; + mkCompoundAdj adj1 adj2 = {s = \\n,g,c,d => adj1.s ! n ! g ! c ! d ++ adj2.s ! n ! g ! c ! d} ; + }
@@ -1,6 +1,6 @@ --concrete SentenceUrd of Sentence = CatUrd ** open Prelude, StringsHindustani, ResUrd in { incomplete concrete SentenceHindustani of Sentence = - CatHindustani ** open CommonHindustani, ResHindustani, Prelude, StringsHindustani in { + CatHindustani ** open CommonHindustani, ResHindustani, Prelude in { flags optimize=all_subs ; coding = utf8; @@ -40,9 +40,10 @@ (insertObj2 (conjThat ++ slash.s) (predV vs)) ** {c2 = slash.c2} ; - EmbedS s = {s = conjThat ++ s.s} ; - EmbedQS qs = {s = qs.s ! QIndir} ; - EmbedVP vp = {s = infVP False vp defaultAgr} ; --- agr + EmbedS s = {s = conjThat ++ s.s ; fromVP = False} ; + EmbedQS qs = {s = conjThat ++ qs.s ! QIndir ; fromVP = False} ; +-- EmbedVP vp = {s = infVP False vp defaultAgr ; fromVP = True} ; --- agr + EmbedVP vp = {s = (vp.s ! VPInf).fin ; fromVP = True} ; UseCl temp p cl = { s = case <temp.t,temp.a> of { @@ -98,7 +99,6 @@ } ; AdvS a s = {s = a.s ! Masc ++ s.s} ; - ExtAdvS a s = {s = a.s ! Masc ++ "," ++ s.s} ; RelS s r = {s = s.s ++ r.s ! agrP3 Masc Sg} ; SSubjS s sj s = { s = s.s ++ sj.s ++ s.s};
@@ -10,7 +10,7 @@ jw = "jw" ; kw = "kw" ; mt = "mt" ;- nE = "nE" ;+-- nE = "nE" ; nh = "nh" ; sE = "sE" ; waN = "waN" ;
@@ -2,7 +2,7 @@ --concrete SymbolUrd of Symbol = CatUrd ** open Prelude, ResUrd, StringsHindustani in { incomplete concrete SymbolHindustani of Symbol = - CatHindustani ** open Prelude, ResHindustani, StringsHindustani, CommonHindustani in { + CatHindustani ** open Prelude, ResHindustani, CommonHindustani in { lin -- SymbPN i = {s = \\_ => i.s ; g = Masc} ;
@@ -1,23 +1,23 @@ --concrete VerbUrd of Verb = CatUrd ** open ResUrd in {-incomplete concrete VerbHindustani of Verb = CatHindustani ** open CommonHindustani, ResHindustani, StringsHindustani in {+incomplete concrete VerbHindustani of Verb = CatHindustani ** open CommonHindustani, ResHindustani in { flags optimize=all_subs ; lin UseV v = predV v ;- SlashV2a v = predV v ** {c2 = {s = v.c2.s ; c = VTrans}} ;+ SlashV2a v = predV v ** {c2 = {s = v.c2.s ; c = VTrans}} ; Slash2V3 v np = - insertObjc (\\_ => np.s ! NPObj ++ v.c3 ) (predV v ** {c2 = {s = v.c2 ; c = VTrans}}) ;+ insertObjc (\\_ => np.s ! NPC Dir ++ v.c3 ) (predV v ** {c2 = {s = v.c2 ; c = VTransPost}}) ; -- changed form NPObj Slash3V3 v np = - insertObjc (\\_ => np.s ! NPC Obl ++ v.c2) (predV v ** {c2 = {s = v.c3 ; c = VTrans}}) ; - ComplVV v vp = insertTrans (insertVV (infVV v.isAux vp) (predV v) vp.embComp ) VTransPost;- ComplVS v s = insertTrans (insertObj2 (conjThat ++ s.s) (predV v)) VTransPost ;+ insertObjc (\\_ => np.s ! NPC Obl ++ v.c2) (predV v ** {c2 = {s = v.c3 ; c = VTransPost}}) ; + ComplVV v vp = insertTrans (insertVV (infVV v.isAux vp) (predV v) vp.embComp ) VTrans; -- changed from VTransPost+ ComplVS v s = insertTrans (insertObj2 (conjThat ++ s.s) (predV v)) VTrans ; -- changed from VTransPost ComplVQ v q = insertObj2 (conjThat ++ q.s ! QIndir) (predV v) ; ComplVA v ap = insertObj (\\a => ap.s ! giveNumber a ! giveGender a ! Dir ! Posit) (predV v) ;- SlashV2V v vp = insertVV (infV2V v.isAux vp) (predV v) vp.embComp **{c2 = {s = sE ; c = VTransPost}} ;- SlashV2S v s = insertObjc2 (conjThat ++ s.s) (predV v ** {c2 = {s = kw ; c = VTransPost}}) ;- SlashV2Q v q = insertObjc2 (conjThat ++ q.s ! QIndir) (predV v ** {c2 = {s = sE ; c = VTransPost}}) ;- SlashV2A v ap = insertObjc (\\a => ap.s ! giveNumber a ! giveGender a ! Dir ! Posit) (predV v ** {c2 = {s = kw ; c = VTransPost}}) ; ----+ SlashV2V v vp = insertVV (infV2V v.isAux vp) (predV v) vp.embComp **{c2 = {s = sE ; c = VTrans}} ; -- changed from VTransPost+ SlashV2S v s = insertObjc2 (conjThat ++ s.s) (predV v ** {c2 = {s = kw ; c = VTrans}}) ; -- changed from VTransPost+ SlashV2Q v q = insertObjc2 (conjThat ++ q.s ! QIndir) (predV v ** {c2 = {s = sE ; c = VTrans}}) ; -- changed from VTransPost+ SlashV2A v ap = insertObjc (\\a => ap.s ! giveNumber a ! giveGender a ! Dir ! Posit) (predV v ** {c2 = {s = kw ; c = VTrans}}) ; ---- ComplSlash vp np = insertObject np vp ; SlashVV vv vp = insertEmbCompl (insertObj (\\a => infVP vv.isAux vp a) (predV vv)) vp.embComp **
@@ -1,4 +1,4 @@ --# -path=.:../romance:../abstract:../common:prelude -concrete CatIta of Cat = CommonX - [Temp,TTAnt,Tense,TPres,TPast,TFut,TCond] ** CatRomance with+concrete CatIta of Cat = CommonX - [SC,Temp,TTAnt,Tense,TPres,TPast,TFut,TCond] ** CatRomance with (ResRomance = ResIta) ;
@@ -119,7 +119,7 @@ _ => vp.s.s ! vImper n pe } ; neg = vp.neg ! pol ;- compl = clpr.p2 ++ vp.comp ! agr ++ vp.ext ! pol+ compl = clpr.p1 ++ vp.comp ! agr ++ vp.ext ! pol in neg.p1 ++ verb ++ bindIf clpr.p3 ++ clpr.p1 ++ compl ; ---- TODO non mi mangi
@@ -7,7 +7,7 @@ Fem Sg P1 ; these8fem_NP = makeNP ["queste"] Fem Pl ; they8fem_Pron = mkPronoun- "loro" "loro" "li" "glie" "loro" "loro" "loro" "loro" "loro" + "loro" "li" "li" "glie" "loro" "loro" "loro" "loro" "loro" Fem Pl P3 ; this8fem_NP = pn2np (mkPN ["questa"] Fem) ; those8fem_NP = makeNP ["quelle"] Fem Pl ;@@ -30,10 +30,10 @@ Fem Sg P3 ; youPolPl_Pron = mkPronoun- "Loro" "Loro" "Li" "Glie" "Loro" "Loro" "Loro" "Loro" "Loro" + "Loro" "Li" "Li" "Glie" "Loro" "Loro" "Loro" "Loro" "Loro" Masc Pl P3 ; youPolPl8fem_Pron = mkPronoun- "Loro" "Loro" "Li" "Glie" "Loro" "Loro" "Loro" "Loro" "Loro" + "Loro" "Li" "Li" "Glie" "Loro" "Loro" "Loro" "Loro" "Loro" Fem Pl P3 ; PossFamQuant p = {
@@ -11,7 +11,7 @@ RelativeIta, ConjunctionIta, PhraseIta,- TextX - [Temp,Tense],+ TextX - [SC,Temp,Tense], IdiomIta, StructuralIta, TenseIta
@@ -106,7 +106,7 @@ there_Adv = ss "là" ; therefore_PConj = ss "quindi" ; they_Pron = mkPronoun- "loro" "loro" "li" "glie" "loro" "loro" "loro" "loro" "loro" + "loro" "li" "li" "glie" "loro" "loro" "loro" "loro" "loro" Masc Pl P3 ; this_Quant = let
@@ -1,53 +1,39 @@-concrete AdjectiveLav of Adjective = CatLav ** open ResLav, Prelude in {-{-- lin+--# -path=.:../abstract:../common:../prelude - PositA a = {- s = \\_ => a.s ! AAdj Posit Nom ;- isPre = True- } ;- ComparA a np = {- s = \\_ => a.s ! AAdj Compar Nom ++ "than" ++ np.s ! Nom ; - isPre = False- } ;- UseComparA a = {- s = \\_ => a.s ! AAdj Compar Nom ; - isPre = True- } ;+concrete AdjectiveLav of Adjective = CatLav ** open+ ResLav,+ StructuralLav,+ Prelude+ in { - AdjOrd ord = {- s = \\_ => ord.s ! Nom ;- isPre = True- } ;+flags+ coding = utf8 ; - CAdvAP ad ap np = {- s = \\a => ad.s ++ ap.s ! a ++ ad.p ++ np.s ! Nom ; - isPre = False- } ;+lin+ PositA a = { s = \\d,g,n,c => a.s ! (AAdj Posit d g n c) } ; - ComplA2 a np = {- s = \\_ => a.s ! AAdj Posit Nom ++ a.c2 ++ np.s ! Acc ; - isPre = False- } ;+ ComparA a np = { s = \\d,g,n,c => a.s ! (AAdj Compar d g n c) ++ "par" ++ np.s ! Acc } |+ { s = \\d,g,n,c => a.s ! (AAdj Compar d g n c) ++ "nekā" ++ np.s ! Nom } ; - ReflA2 a = {- s = \\ag => a.s ! AAdj Posit Nom ++ a.c2 ++ reflPron ! ag ; - isPre = False- } ;+ UseComparA a = { s = \\d,g,n,c => a.s ! (AAdj Compar d g n c) } ; - SentAP ap sc = {- s = \\a => ap.s ! a ++ sc.s ; - isPre = False- } ;+ ComplA2 a np = {+ s = \\d,g,n,c => a.s ! (AAdj Posit d g n c) ++ a.p.s ++ np.s ! (a.p.c ! (fromAgr np.a).n)+ } ; - AdAP ada ap = {- s = \\a => ada.s ++ ap.s ! a ;- isPre = ap.isPre- } ;+ ReflA2 a = { s = \\d,g,n,c => a.s ! (AAdj Posit d g n c) ++ a.p.s ++ reflPron ! (a.p.c ! n) } ; - UseA2 a = {- s = \\_ => a.s ! AAdj Posit Nom ;- isPre = True- } ;--}+ AdAP ada ap = { s = \\d,g,n,c => ada.s ++ ap.s ! d ! g ! n ! c } ;++ -- FIXME: te vajag apstākļa vārdu nevis īpašības vārdu! bet apst.v. nevar normāli no AP dabūt+ SentAP ap sc = { s = \\d,g,n,c => ap.s ! d ! g ! n ! c ++ "," ++ sc.s } ;++ -- FIXME: skaitļa agreement? noteiktība?+ AdjOrd ord = { s = \\d,g,n,c => ord.s ! g ! c } ;++ --TODO: nominatīvs var ne vienmēr būt, pie CAdv jāliek parametrs par locījumu+ CAdvAP cadv ap np = { s = \\d,g,n,c => cadv.s ++ ap.s ! d ! g ! n ! c ++ cadv.p ++ np.s ! Nom } ;++ UseA2 a = { s = \\d,g,n,c => a.s ! (AAdj Posit d g n c) } ;+ }
@@ -1,20 +1,34 @@-concrete AdverbLav of Adverb = CatLav ** open ResLav, Prelude in {-{-- lin- PositAdvAdj a = {s = a.s ! AAdv} ;- ComparAdvAdj cadv a np = {- s = cadv.s ++ a.s ! AAdv ++ cadv.p ++ np.s ! Nom- } ;- ComparAdvAdjS cadv a s = {- s = cadv.s ++ a.s ! AAdv ++ cadv.p ++ s.s- } ;+--# -path=.:../abstract:../common:../prelude - PrepNP prep np = {s = prep.s ++ np.s ! Acc} ;+concrete AdverbLav of Adverb = CatLav ** open+ ResLav,+ Prelude+ in { - AdAdv = cc2 ;+flags+ coding = utf8 ; - SubjS = cc2 ;+lin+ PositAdvAdj a = { s = a.s ! (AAdv Posit) } ; - AdnCAdv cadv = {s = cadv.s ++ cadv.p} ;--}+ -- TODO: vajag arī 'ātrāks par Jāni' un 'ātrāks nekā Jānis' pie more_CAdv+ -- TODO: vai te tiešām veido 'ātrāk par Jāni'? kurš ir pareizais adverbs? nevis 'ātrāks par Jāni'?+ ComparAdvAdj cadv a np = { s = cadv.s ++ a.s ! (AAdv cadv.d) ++ cadv.p ++ np.s ! Nom } ;++ ComparAdvAdjS cadv a s = { s = cadv.s ++ a.s ! (AAdv cadv.d) ++ cadv.p ++ s.s } ;++ -- FIXME: postpozīcijas prievārdi+ PrepNP prep np = { s = prep.s ++ np.s ! (prep.c ! (fromAgr np.a).n) } ;++ AdAdv = cc2 ;++ SubjS = cc2 ;++ AdnCAdv cadv = {+ s = case cadv.d of {+ Posit => cadv.s ++ cadv.p ;+ _ => NON_EXISTENT+ }+ } ;+ }
@@ -1,9 +1,11 @@---# -path=.:../abstract:../common:prelude+--# -path=.:../abstract:../common:../prelude -concrete AllLav of AllLavAbs = +concrete AllLav of AllLavAbs = LangLav,-{- IrregLav-[- blow_V,burn_V,come_V,dig_V,fall_V,fly_V,freeze_V,go_V,lie_V,run_V,- sew_V,sing_V,sit_V,sleep_V,spit_V,stand_V,swell_V,swim_V,think_V], -} ExtraLav- ** {} ;+ ** {++flags+ coding = utf8 ;++}
@@ -1,9 +1,6 @@---# -path=.:../abstract:../common:prelude+--# -path=.:../abstract:../common:../prelude -abstract AllLavAbs = +abstract AllLavAbs = Lang,-{- IrregLavAbs-[- blow_V,burn_V,come_V,dig_V,fall_V,fly_V,freeze_V,go_V,lie_V,run_V,- sew_V,sing_V,sit_V,sleep_V,spit_V,stand_V,swell_V,swim_V,think_V], -} ExtraLavAbs- ** {} ;+ ** {}
@@ -1,104 +1,84 @@-concrete CatLav of Cat = CommonX ** open ResLav, Prelude in {-- flags optimize=all_subs ;-- lincat- N = {s : Number => Case => Str ; g : Gender} ;- A = {s : Degree => Definite => Gender => Number => Case => Str} ;- V = {s : Polarity => VerbForm => Str} ;- V2 = V ; -- ** {c : ResLav.Case} - valence- - - Cl = {s : VerbMood => Polarity => Str} ;- - CN = {s : Definite => Number => Case => Str ; g : Gender} ;- Det = {s : Gender => Case => Str ; n : Number ; d: Definite} ; - NP = {s : Case => Str ; g : Gender ; n : Number; p : Person} ;- VP = {v : V ; obj : ResLav.Agr => Str} ;---TODO - arî Quant jâpieliek - -{- --- Tensed/Untensed-- S = {s : Str} ;- QS = {s : QForm => Str} ;- RS = {s : Agr => Str ; c : Case} ; -- c for it clefts- SSlash = {s : Str ; c2 : Str} ;---- Sentence-- Cl = {s : ResEng.Tense => Anteriority => CPolarity => Order => Str} ;- ClSlash = {- s : ResEng.Tense => Anteriority => CPolarity => Order => Str ;- c2 : Str- } ;- Imp = {s : CPolarity => ImpForm => Str} ;---- Question-- QCl = {s : ResEng.Tense => Anteriority => CPolarity => QForm => Str} ;- IP = {s : Case => Str ; n : Number} ;- IComp = {s : Str} ; - IDet = {s : Str ; n : Number} ;- IQuant = {s : Number => Str} ;+--# -path=.:../abstract:../common:../prelude --- Relative+concrete CatLav of Cat = CommonX - [CAdv, Voc] ** open+ ResLav,+ Prelude+ in { - RCl = {- s : ResEng.Tense => Anteriority => CPolarity => Agr => Str ; - c : Case- } ;- RP = {s : RCase => Str ; a : RAgr} ;+flags+ coding = utf8 ;+ optimize = all_subs ; --- Verb+lincat+ -- Tensed/Untensed+ S = { s : Str } ;+ QS = { s : Str } ;+ RS = { s : Agr => Str } ; -- Eng: c : Case -- c for it clefts+ SSlash = { s : Str ; p : Prep } ; - VP = ResEng.VP ;- VPSlash = ResEng.VP ** {c2 : Str} ;- Comp = {s : Agr => Str} ; + -- Sentence+ Cl = { s : VerbMood => Polarity => Str } ;+ ClSlash = { s : VerbMood => Polarity => Str ; p : Prep } ;+ Imp = { s : Polarity => Number => Str } ; --- Adjective+ -- Question+ QCl = { s : VerbMood => Polarity => Str } ;+ IP = { s : Case => Str ; n: Number } ;+ --IComp = { s : Str } ;+ IDet = { s : Gender => Str ; n : Number } ;+ IQuant = { s : Gender => Number => Str } ; - AP = {s : Agr => Str ; isPre : Bool} ; + -- Relative+ RCl = { s : VerbMood => Polarity => Agr => Str } ;+ RP = { s : Gender => Case => Str } ; --- Noun+ -- Verb+ VP = ResLav.VP ;+ VPSlash = ResLav.VP ** { p : Prep } ;+ Comp = { s : ResLav.Agr => Str } ; - CN = {s : Number => Case => Str ; g : Gender} ;- NP = {s : Case => Str ; a : Agr} ;- Pron = {s : Case => Str ; sp : Case => Str ; a : Agr} ;- Det = {s : Str ; sp : Case => Str ; n : Number} ;- Predet = {s : Str} ;- Ord = { s : Case => Str } ;- Num = {s : Case => Str ; n : Number ; hasCard : Bool} ;- Card = {s : Case => Str ; n : Number} ;- Quant = {s : Bool => Number => Str ; sp : Bool => Number => Case => Str} ;+ -- Adjective+ AP = { s : Definite => Gender => Number => Case => Str } ; --- Numeral+ -- Noun+ CN = { s : Definite => Number => Case => Str ; g : Gender } ;+ NP = { s : Case => Str ; a : ResLav.Agr } ;+ Pron = { s : Case => Str ; a : ResLav.Agr ; possessive : Gender => Number => Case => Str } ;+ Det = { s : Gender => Case => Str ; n : Number ; d : Definite } ;+ Predet = { s : Gender => Str } ;+ Ord = { s : Gender => Case => Str } ;+ Num = { s : Gender => Case => Str ; n : Number ; hasCard : Bool } ;+ Card = { s : Gender => Case => Str ; n : Number } ;+ Quant = { s : Gender => Number => Case => Str ; d : Definite } ; - Numeral = {s : CardOrd => Case => Str ; n : Number} ;- Digits = {s : CardOrd => Case => Str ; n : Number ; tail : DTail} ;+ -- Numeral+ Numeral = { s : CardOrd => Gender => Case => Str ; n : Number } ;+ Digits = { s : CardOrd => Str ; n : Number } ; --- Structural+ -- Structural+ Conj = { s1, s2 : Str ; n : Number } ;+ Subj = { s : Str } ;+ Prep = { s : Str ; c : Number => Case } ;+ -- e.g. 'ar' + Sg-Acc or Pl-Dat; preposition may be empty ([]) for case-based valences+ -- TODO: pozīcija (pre/post) nav noteikta - Conj = {s1,s2 : Str ; n : Number} ;----b Conj = {s : Str ; n : Number} ;----b DConj = {s1,s2 : Str ; n : Number} ;- Subj = {s : Str} ;- Prep = {s : Str} ;+ -- Open lexical classes, e.g. Lexicon+ N = { s : Number => Case => Str ; g : Gender } ;+ N2 = { s : Number => Case => Str ; g : Gender } ** { p : Prep ; isPre : Bool } ;+ -- case/preposition used; if isPre, then located before the noun+ N3 = { s : Number => Case => Str ; g : Gender } ** { p1, p2 : Prep ; isPre1, isPre2 : Bool } ;+ PN = { s : Case => Str ; g : Gender ; n : Number } ; --- Open lexical classes, e.g. Lexicon+ A = { s : AForm => Str } ;+ A2 = A ** { p : Prep } ; - V, VS, VQ, VA = Verb ; -- = {s : VForm => Str} ;- V2, V2A, V2Q, V2S = Verb ** {c2 : Str} ;- V3 = Verb ** {c2, c3 : Str} ;- VV = {s : VVForm => Str ; isAux : Bool} ;- V2V = Verb ** {c2 : Str ; isAux : Bool} ;+ V, VQ, VA, VV = Verb ;+ VS = Verb ** { subj : Subj } ;+ V2, V2A, V2Q, V2V = Verb ** { p : Prep } ;+ V2S = Verb ** { p : Prep ; subj : Subj } ;+ V3 = Verb ** { p1, p2 : Prep } ;+ -- TODO: pieņemam ka viena valence; būtu jānorāda semantika - integrēt ar FrameNet - A = {s : AForm => Str} ;- A2 = {s : AForm => Str ; c2 : Str} ;+ CAdv = { s, p : Str ; d : Degree } ; - N = {s : Number => Case => Str ; g : Gender} ;- N2 = {s : Number => Case => Str ; g : Gender} ** {c2 : Str} ;- N3 = {s : Number => Case => Str ; g : Gender} ** {c2,c3 : Str} ;- PN = {s : Case => Str ; g : Gender} ;--} }
@@ -0,0 +1,16 @@+--# -path=.:../abstract:../common:../prelude++concrete CompatibilityLav of Compatibility = CatLav ** open+ Prelude,+ ResLav+ in {++flags+ coding = utf8 ;++lin+ -- TODO: kāpēc citās valodās (piem., Eng, Bul) kategorijai Num (NumInt) ir lauks isNum (= True)?+ NumInt n = { s = \\_,_ => n.s ; n = Pl ; hasCard = False } ;+ OrdInt n = { s = \\_,_ => n.s ++ "." } ;++}
@@ -1,44 +1,47 @@-concrete ConjunctionLav of Conjunction = - CatLav ** open ResLav, Coordination, Prelude in {-{-- flags optimize=all_subs ;+--# -path=.:../abstract:../common:../prelude - lin+concrete ConjunctionLav of Conjunction = CatLav ** open+ Coordination,+ ResLav+ in { - ConjS = conjunctDistrSS ;+flags+ optimize = all_subs ;+ coding = utf8 ; - ConjAdv = conjunctDistrSS ;+lin+ ConjS = conjunctDistrSS ; - ConjNP conj ss = conjunctDistrTable Case conj ss ** {- a = conjAgr (agrP3 conj.n) ss.a- } ;+ ConjAdv = conjunctDistrSS ; - ConjAP conj ss = conjunctDistrTable Agr conj ss ** {- isPre = ss.isPre- } ;+ ConjNP conj ss = conjunctDistrTable Case conj ss ** {+ a = toAgr (conjNumber (fromAgr ss.a).n conj.n) (fromAgr ss.a).p (fromAgr ss.a).g+ } ; - ConjRS conj ss = conjunctDistrTable Agr conj ss ** {- c = ss.c- } ;+ ConjAP conj ss = conjunctDistrTable4 Definite Gender Number Case conj ss ; --- These fun's are generated from the list cat's.+ ConjRS conj ss = conjunctDistrTable Agr conj ss ; - BaseS = twoSS ;- ConsS = consrSS comma ;- BaseAdv = twoSS ;- ConsAdv = consrSS comma ;- BaseNP x y = twoTable Case x y ** {a = conjAgr x.a y.a} ;- ConsNP xs x = consrTable Case comma xs x ** {a = conjAgr xs.a x.a} ;- BaseAP x y = twoTable Agr x y ** {isPre = andB x.isPre y.isPre} ;- ConsAP xs x = consrTable Agr comma xs x ** {isPre = andB xs.isPre x.isPre} ;- BaseRS x y = twoTable Agr x y ** {c = y.c} ;- ConsRS xs x = consrTable Agr comma xs x ** {c = xs.c} ;+ -- These fun's are generated from the list cat's:+ BaseS = twoSS ;+ ConsS = consrSS comma ;+ BaseAdv = twoSS ;+ ConsAdv = consrSS comma ; - lincat- [S] = {s1,s2 : Str} ;- [Adv] = {s1,s2 : Str} ;- [NP] = {s1,s2 : Case => Str ; a : Agr} ;- [AP] = {s1,s2 : Agr => Str ; isPre : Bool} ;- [RS] = {s1,s2 : Agr => Str ; c : Case} ;--}+ BaseNP x y = twoTable Case x y ** { a = conjAgr x.a y.a } ;+ ConsNP xs x = consrTable Case comma xs x ** { a = conjAgr xs.a x.a } ;++ BaseAP x y = twoTable4 Definite Gender Number Case x y ;+ ConsAP xs x = consrTable4 Definite Gender Number Case comma xs x ;++ BaseRS x y = twoTable Agr x y ;+ ConsRS xs x = consrTable Agr comma xs x ;++lincat+ [S] = { s1, s2 : Str } ;+ [Adv] = { s1, s2 : Str } ;+ [NP] = { s1, s2 : Case => Str ; a : Agr } ;+ [AP] = { s1, s2 : Definite => Gender => Number => Case => Str } ;+ [RS] = { s1, s2 : Agr => Str } ;+ }
@@ -1,43786 +0,0 @@--- English lexicon for GF, produced from:--- Oxford advanced learner's dictionary of current English:--- expanded 'computer usable' version compiled by Roger Mitton--- The computer usable version is transcribed from:--- Oxford advanced learner's dictionary of current English--- A.S. Hornby ; with the assistance of A.P. Cowie [and] J. Windsor Lewis.--- 3rd. ed., London : Oxford University Press, 1974.--- Distributed as 'dict0710' by:--- Oxford Text Archive--- Oxford University Computing Services--- 13 Banbury Road--- Oxford--- OX2 6NN--- Under these conditions:--- Freely available for non-commercial use provided that this header is--- included in its entirety with any copy distributed.------ GF version generated by asc2gf, Bjorn Bringert Nov 2008--- based on asc2lex, Matthew Purver Nov 2001--- http://www.stanford.edu/~mpurver/software.html--abstract DictLavAbs = Cat ** {-{--fun a_bomb_N : N;-fun a_fortiori_Adv : Adv;-fun a_level_N : N;-fun a_posteriori_A : A;-fun a_posteriori_Adv : Adv;-fun a_priori_A : A;-fun a_priori_Adv : Adv;-fun aa_N : N;-fun aachen_PN : PN;-fun aarhus_PN : PN;-fun ab_initio_Adv : Adv;-fun aback_Adv : Adv;-fun abacus_N : N;-fun abaft_Adv : Adv;-fun abandon_N : N;-fun abandon_V2 : V2;-fun abandoned_A : A;-fun abandonment_N : N;-fun abase_V2 : V2;-fun abasement_N : N;-fun abash_V2 : V2;-fun abate_V : V;-fun abate_V2 : V2;-fun abatement_N : N;-fun abattoir_N : N;-fun abbess_N : N;-fun abbey_N : N;-fun abbot_N : N;-fun abbreviate_V2 : V2;-fun abbreviation_N : N;-fun abbe_N : N;-fun abc_N : N;-fun abcs_N : N;-fun abdicate_V : V;-fun abdicate_V2 : V2;-fun abdication_N : N;-fun abdomen_N : N;-fun abdominal_A : A;-fun abduct_V2 : V2;-fun abduction_N : N;-fun abe_PN : PN;-fun abeam_Adv : Adv;-fun abed_Adv : Adv;-fun abercarn_PN : PN;-fun aberdare_PN : PN;-fun aberdeen_PN : PN;-fun abergavenny_PN : PN;-fun abergele_PN : PN;-fun aberrant_A : A;-fun aberration_N : N;-fun abertillery_PN : PN;-fun aberystwyth_PN : PN;-fun abet_V2 : V2;-fun abeyance_N : N;-fun abhor_V2 : V2;-fun abhorrence_N : N;-fun abhorrent_A : A;-fun abide_V : V;-fun abide_V2 : V2;-fun abiding_A : A;-fun ability_N : N;-fun abingdon_PN : PN;-fun abject_A : A;-fun abjection_N : N;-fun abjectly_Adv : Adv;-fun abjuration_N : N;-fun abjure_V2 : V2;-fun ablative_A : A;-fun ablative_N : N;-fun ablaut_N : N;-fun ablaze_A : A;-fun ablaze_Adv : Adv;-fun able_A : A;-fun able_bodied_A : A;-fun ablution_N : N;-fun ably_Adv : Adv;-fun abnegation_N : N;-fun abnormal_A : A;-fun abnormality_N : N;-fun abnormally_Adv : Adv;-fun abo_N : N;-fun aboard_Adv : Adv;-fun abode_N : N;-fun abolish_V2 : V2;-fun abolition_N : N;-fun abolitionist_N : N;-fun abominable_A : A;-fun abominably_Adv : Adv;-fun abominate_V2 : V2;-fun abomination_N : N;-fun aboriginal_A : A;-fun aboriginal_N : N;-fun aborigine_N : N;-fun abort_V : V;-fun abort_V2 : V2;-fun abortion_N : N;-fun abortionist_N : N;-fun abortive_A : A;-fun abortively_Adv : Adv;-fun abound_V : V;-fun about_Adv : Adv;-fun about_face_N : N;-fun about_face_V : V;-fun above_Adv : Adv;-fun above_board_A : A;-fun above_board_Adv : Adv;-fun above_mentioned_A : A;-fun above_named_A : A;-fun abracadabra_N : N;-fun abrade_V2 : V2;-fun abraham_PN : PN;-fun abrasion_N : N;-fun abrasive_A : A;-fun abrasive_N : N;-fun abreast_Adv : Adv;-fun abridge_V2 : V2;-fun abridgement_N : N;-fun abridgment_N : N;-fun abroad_Adv : Adv;-fun abrogate_V2 : V2;-fun abrogation_N : N;-fun abrupt_A : A;-fun abruptly_Adv : Adv;-fun abruptness_N : N;-fun abscess_N : N;-fun abscond_V : V;-fun absence_N : N;-fun absent_A : A;-fun absent_V2 : V2;-fun absent_minded_A : A;-fun absent_mindedly_Adv : Adv;-fun absent_mindedness_N : N;-fun absentee_N : N;-fun absenteeism_N : N;-fun absently_Adv : Adv;-fun absinth_N : N;-fun absinthe_N : N;-fun absolute_A : A;-fun absolutely_Adv : Adv;-fun absolution_N : N;-fun absolutism_N : N;-fun absolve_V2 : V2;-fun absorb_V2 : V2;-fun absorbent_A : A;-fun absorbent_N : N;-fun absorption_N : N;-fun abstain_V : V;-fun abstainer_N : N;-fun abstemious_A : A;-fun abstemiously_Adv : Adv;-fun abstemiousness_N : N;-fun abstention_N : N;-fun abstinence_N : N;-fun abstract_A : A;-fun abstract_N : N;-fun abstract_V2 : V2;-fun abstracted_A : A;-fun abstractedly_Adv : Adv;-fun abstraction_N : N;-fun abstruse_A : A;-fun abstrusely_Adv : Adv;-fun abstruseness_N : N;-fun absurd_A : A;-fun absurdity_N : N;-fun absurdly_Adv : Adv;-fun abundance_N : N;-fun abundant_A : A;-fun abundantly_Adv : Adv;-fun abuse_N : N;-fun abuse_V2 : V2;-fun abusive_A : A;-fun abusively_Adv : Adv;-fun abut_V : V;-fun abutment_N : N;-fun abysm_N : N;-fun abysmal_A : A;-fun abysmally_Adv : Adv;-fun abyss_N : N;-fun acacia_N : N;-fun academic_A : A;-fun academic_N : N;-fun academically_Adv : Adv;-fun academician_N : N;-fun academy_N : N;-fun accede_V : V;-fun accelerando_A : A;-fun accelerando_Adv : Adv;-fun accelerando_N : N;-fun accelerate_V : V;-fun accelerate_V2 : V2;-fun acceleration_N : N;-fun accelerator_N : N;-fun accent_N : N;-fun accent_V2 : V2;-fun accentuate_V2 : V2;-fun accentuation_N : N;-fun accept_V : V;-fun accept_V2 : V2;-fun acceptability_N : N;-fun acceptable_A : A;-fun acceptably_Adv : Adv;-fun acceptance_N : N;-fun acceptation_N : N;-fun access_N : N;-fun accessary_N : N;-fun accessibility_N : N;-fun accessible_A : A;-fun accession_N : N;-fun accessory_N : N;-fun accidence_N : N;-fun accident_N : N;-fun accident_prone_A : A;-fun accidental_A : A;-fun accidentally_Adv : Adv;-fun acclaim_N : N;-fun acclaim_V2 : V2;-fun acclamation_N : N;-fun acclimate_V : V;-fun acclimate_V2 : V2;-fun acclimation_N : N;-fun acclimatization_N : N;-fun acclimatize_V : V;-fun acclimatize_V2 : V2;-fun acclivity_N : N;-fun accolade_N : N;-fun accommodate_V2 : V2;-fun accommodating_A : A;-fun accommodation_N : N;-fun accompaniment_N : N;-fun accompanist_N : N;-fun accompany_V2 : V2;-fun accomplice_N : N;-fun accomplish_V2 : V2;-fun accomplished_A : A;-fun accomplishment_N : N;-fun accord_N : N;-fun accord_V : V;-fun accord_V2 : V2;-fun accordance_N : N;-fun accordingly_Adv : Adv;-fun accordion_N : N;-fun accost_V2 : V2;-fun accouchement_N : N;-fun account_N : N;-fun account_V : V;-fun account_V2 : V2;-fun accountable_A : A;-fun accountancy_N : N;-fun accountant_N : N;-fun accra_PN : PN;-fun accredit_V2 : V2;-fun accredited_A : A;-fun accretion_N : N;-fun accrington_PN : PN;-fun accrue_V : V;-fun accumulate_V : V;-fun accumulate_V2 : V2;-fun accumulation_N : N;-fun accumulative_A : A;-fun accumulator_N : N;-fun accuracy_N : N;-fun accurate_A : A;-fun accurately_Adv : Adv;-fun accursed_A : A;-fun accurst_A : A;-fun accusation_N : N;-fun accusative_A : A;-fun accusative_N : N;-fun accuse_V2 : V2;-fun accuser_N : N;-fun accusingly_Adv : Adv;-fun accustom_V2 : V2;-fun accustomed_A : A;-fun ace_N : N;-fun acerbity_N : N;-fun acetate_N : N;-fun acetic_A : A;-fun acetylene_N : N;-fun ache_N : N;-fun ache_V : V;-fun achievable_A : A;-fun achieve_V2 : V2;-fun achievement_N : N;-fun achilles_PN : PN;-fun acid_A : A;-fun acid_N : N;-fun acidic_A : A;-fun acidify_V : V;-fun acidify_V2 : V2;-fun acidity_N : N;-fun acidulated_A : A;-fun acidulous_A : A;-fun ack_ack_N : N;-fun acknowledge_V2 : V2;-fun acknowledgement_N : N;-fun acme_N : N;-fun acne_N : N;-fun acolyte_N : N;-fun aconite_N : N;-fun acorn_N : N;-fun acorn_cup_N : N;-fun acoustic_A : A;-fun acoustic_N : N;-fun acoustics_N : N;-fun acquaint_V2 : V2;-fun acquaintance_N : N;-fun acquaintanceship_N : N;-fun acquiesce_V : V;-fun acquiescence_N : N;-fun acquiescent_A : A;-fun acquire_V2 : V2;-fun acquirement_N : N;-fun acquisition_N : N;-fun acquisitive_A : A;-fun acquit_V2 : V2;-fun acquittal_N : N;-fun acre_N : N;-fun acreage_N : N;-fun acrid_A : A;-fun acrimonious_A : A;-fun acrimony_N : N;-fun acrobat_N : N;-fun acrobatic_A : A;-fun acrobatics_N : N;-fun acronym_N : N;-fun acropolis_N : N;-fun across_Adv : Adv;-fun acrostic_N : N;-fun acrylic_N : N;-fun act_N : N;-fun act_V : V;-fun act_V2 : V2;-fun acting_A : A;-fun acting_N : N;-fun actinic_A : A;-fun actinism_N : N;-fun action_N : N;-fun actionable_A : A;-fun activate_V2 : V2;-fun activation_N : N;-fun active_A : A;-fun actively_Adv : Adv;-fun activist_N : N;-fun activity_N : N;-fun actor_N : N;-fun actress_N : N;-fun actual_A : A;-fun actuality_N : N;-fun actually_Adv : Adv;-fun actuarial_A : A;-fun actuary_N : N;-fun actuate_V2 : V2;-fun acuity_N : N;-fun acumen_N : N;-fun acupuncture_N : N;-fun acute_A : A;-fun acutely_Adv : Adv;-fun acuteness_N : N;-fun ad_N : N;-fun ad_PN : PN;-fun ad_hoc_A : A;-fun ad_hoc_Adv : Adv;-fun ad_infinitum_Adv : Adv;-fun ad_interim_Adv : Adv;-fun ad_lib_A : A;-fun ad_lib_Adv : Adv;-fun ad_lib_V : V;-fun ad_libitum_Adv : Adv;-fun ad_man_N : N;-fun ad_nauseam_Adv : Adv;-fun ad_valorem_Adv : Adv;-fun ada_PN : PN;-fun adage_N : N;-fun adagio_A : A;-fun adagio_Adv : Adv;-fun adagio_N : N;-fun adam_PN : PN;-fun adamant_A : A;-fun adamant_N : N;-fun adamantine_A : A;-fun adapt_V2 : V2;-fun adaptability_N : N;-fun adaptable_A : A;-fun adaptation_N : N;-fun adapter_N : N;-fun adaptor_N : N;-fun add_V : V;-fun add_V2 : V2;-fun addendum_N : N;-fun adder_N : N;-fun addict_N : N;-fun addict_V2 : V2;-fun addiction_N : N;-fun addictive_A : A;-fun adding_machine_N : N;-fun addis_ababa_PN : PN;-fun addition_N : N;-fun additional_A : A;-fun additionally_Adv : Adv;-fun additive_N : N;-fun addle_A : A;-fun addle_V : V;-fun addle_V2 : V2;-fun addle_brained_A : A;-fun addle_head_N : N;-fun addle_pated_A : A;-fun address_N : N;-fun address_V2 : V2;-fun addressee_N : N;-fun addressograph_N : N;-fun adduce_V2 : V2;-fun adelaide_PN : PN;-fun adenoidal_A : A;-fun adept_A : A;-fun adept_N : N;-fun adequacy_N : N;-fun adequate_A : A;-fun adequately_Adv : Adv;-fun adhere_V : V;-fun adherence_N : N;-fun adherent_N : N;-fun adhesion_N : N;-fun adhesive_A : A;-fun adhesive_N : N;-fun adieu_N : N;-fun adipose_A : A;-fun adjacent_A : A;-fun adjectival_A : A;-fun adjective_N : N;-fun adjoin_V : V;-fun adjoin_V2 : V2;-fun adjoining_A : A;-fun adjourn_V : V;-fun adjourn_V2 : V2;-fun adjournment_N : N;-fun adjudge_V2 : V2;-fun adjudicate_V : V;-fun adjudicate_V2 : V2;-fun adjudication_N : N;-fun adjudicator_N : N;-fun adjunct_N : N;-fun adjuration_N : N;-fun adjure_V2 : V2;-fun adjust_V2 : V2;-fun adjustable_A : A;-fun adjuster_N : N;-fun adjustment_N : N;-fun adjutant_N : N;-fun admass_N : N;-fun administer_V : V;-fun administer_V2 : V2;-fun administration_N : N;-fun administrative_A : A;-fun administratively_Adv : Adv;-fun administrator_N : N;-fun admirable_A : A;-fun admirably_Adv : Adv;-fun admiral_N : N;-fun admiralty_N : N;-fun admiration_N : N;-fun admire_V2 : V2;-fun admirer_N : N;-fun admiring_A : A;-fun admiringly_Adv : Adv;-fun admissibility_N : N;-fun admissible_A : A;-fun admission_N : N;-fun admit_V : V;-fun admit_V2 : V2;-fun admittance_N : N;-fun admittedly_Adv : Adv;-fun admix_V : V;-fun admix_V2 : V2;-fun admixture_N : N;-fun admonish_V2 : V2;-fun admonition_N : N;-fun admonitory_A : A;-fun ado_N : N;-fun adobe_N : N;-fun adolescence_N : N;-fun adolescent_A : A;-fun adolescent_N : N;-fun adopt_V2 : V2;-fun adoption_N : N;-fun adoptive_A : A;-fun adorable_A : A;-fun adorably_Adv : Adv;-fun adoration_N : N;-fun adore_V2 : V2;-fun adorer_N : N;-fun adoring_A : A;-fun adoringly_Adv : Adv;-fun adorn_V2 : V2;-fun adornment_N : N;-fun adrenal_A : A;-fun adrenalin_N : N;-fun adrian_PN : PN;-fun adrift_A : A;-fun adrift_Adv : Adv;-fun adroit_A : A;-fun adroitly_Adv : Adv;-fun adroitness_N : N;-fun adulation_N : N;-fun adult_A : A;-fun adult_N : N;-fun adulterant_N : N;-fun adulterate_V2 : V2;-fun adulteration_N : N;-fun adulterer_N : N;-fun adulteress_N : N;-fun adulterous_A : A;-fun adultery_N : N;-fun adulthood_N : N;-fun adumbrate_V2 : V2;-fun advance_N : N;-fun advance_V : V;-fun advance_V2 : V2;-fun advanced_A : A;-fun advancement_N : N;-fun advantage_N : N;-fun advantage_V2 : V2;-fun advantageous_A : A;-fun advantageously_Adv : Adv;-fun advent_N : N;-fun adventist_N : N;-fun adventitious_A : A;-fun adventure_N : N;-fun adventure_V2 : V2;-fun adventurer_N : N;-fun adventuresome_A : A;-fun adventuress_N : N;-fun adventurous_A : A;-fun adverb_N : N;-fun adverbial_A : A;-fun adverbially_Adv : Adv;-fun adversary_N : N;-fun adverse_A : A;-fun adversely_Adv : Adv;-fun adversity_N : N;-fun advert_N : N;-fun advert_V : V;-fun advertise_V : V;-fun advertise_V2 : V2;-fun advertisement_N : N;-fun advertiser_N : N;-fun advice_N : N;-fun advisability_N : N;-fun advisable_A : A;-fun advise_V : V;-fun advise_V2 : V2;-fun advised_A : A;-fun advisedly_Adv : Adv;-fun adviser_N : N;-fun advisory_A : A;-fun advocacy_N : N;-fun advocate_N : N;-fun advocate_V2 : V2;-fun advowson_N : N;-fun adz_N : N;-fun adze_N : N;-fun aegis_N : N;-fun aeon_N : N;-fun aerate_V2 : V2;-fun aeration_N : N;-fun aerial_A : A;-fun aerial_N : N;-fun aerie_N : N;-fun aerobatics_N : N;-fun aerodrome_N : N;-fun aerodynamic_A : A;-fun aerodynamics_N : N;-fun aeronaut_N : N;-fun aeronautics_N : N;-fun aeroplane_N : N;-fun aerosol_N : N;-fun aerospace_N : N;-fun aertex_N : N;-fun aery_N : N;-fun aesthete_N : N;-fun aesthetic_A : A;-fun aesthetic_N : N;-fun aesthetical_A : A;-fun aesthetically_Adv : Adv;-fun aesthetics_N : N;-fun aether_N : N;-fun aetiology_N : N;-fun afar_Adv : Adv;-fun affability_N : N;-fun affable_A : A;-fun affably_Adv : Adv;-fun affair_N : N;-fun affect_V2 : V2;-fun affectation_N : N;-fun affected_A : A;-fun affecting_A : A;-fun affectingly_Adv : Adv;-fun affection_N : N;-fun affectionate_A : A;-fun affectionately_Adv : Adv;-fun affiance_V2 : V2;-fun affidavit_N : N;-fun affiliate_V : V;-fun affiliate_V2 : V2;-fun affiliation_N : N;-fun affinity_N : N;-fun affirm_V : V;-fun affirm_V2 : V2;-fun affirmation_N : N;-fun affirmative_A : A;-fun affirmative_N : N;-fun affix_N : N;-fun affix_V2 : V2;-fun afflatus_N : N;-fun afflict_V2 : V2;-fun affliction_N : N;-fun affluence_N : N;-fun affluent_A : A;-fun affluent_N : N;-fun afford_V2 : V2;-fun afforest_V2 : V2;-fun afforestation_N : N;-fun affranchise_V2 : V2;-fun affray_N : N;-fun affront_N : N;-fun affront_V2 : V2;-fun afghan_A : A;-fun afghan_N : N;-fun afghanistan_PN : PN;-fun afghanistani_A : A;-fun afghanistani_N : N;-fun afield_Adv : Adv;-fun afire_A : A;-fun aflame_A : A;-fun afloat_A : A;-fun afoot_A : A;-fun afore_Adv : Adv;-fun aforesaid_A : A;-fun aforethought_Adv : Adv;-fun afoul_Adv : Adv;-fun afraid_A : A;-fun afresh_Adv : Adv;-fun africa_PN : PN;-fun african_A : A;-fun african_N : N;-fun afrikaans_N : N;-fun afrikaner_A : A;-fun afrikaner_N : N;-fun afro_american_N : N;-fun afro_asian_A : A;-fun afro_wig_N : N;-fun aft_Adv : Adv;-fun after_A : A;-fun after_Adv : Adv;-fun aftercare_N : N;-fun afterdamp_N : N;-fun aftereffect_N : N;-fun afterglow_N : N;-fun aftermath_N : N;-fun afternoon_N : N;-fun afterthought_N : N;-fun afterwards_Adv : Adv;-fun again_Adv : Adv;-fun agape_A : A;-fun agar_agar_N : N;-fun agate_N : N;-fun agatha_PN : PN;-fun agave_N : N;-fun age_N : N;-fun age_V : V;-fun age_V2 : V2;-fun age_bracket_N : N;-fun age_group_N : N;-fun age_long_A : A;-fun age_old_A : A;-fun aged_A : A;-fun ageing_N : N;-fun ageless_A : A;-fun agency_N : N;-fun agenda_N : N;-fun agent_N : N;-fun agent_provocateur_N : N;-fun aggie_PN : PN;-fun agglomerate_A : A;-fun agglomerate_V : V;-fun agglomerate_V2 : V2;-fun agglomeration_N : N;-fun agglutinate_V2 : V2;-fun agglutinative_A : A;-fun aggrandize_V2 : V2;-fun aggrandizement_N : N;-fun aggravate_V2 : V2;-fun aggravation_N : N;-fun aggregate_N : N;-fun aggregate_V : V;-fun aggregate_V2 : V2;-fun aggregation_N : N;-fun aggression_N : N;-fun aggressive_A : A;-fun aggressively_Adv : Adv;-fun aggressiveness_N : N;-fun aggressor_N : N;-fun aggrieve_V2 : V2;-fun aggro_N : N;-fun aghast_A : A;-fun agile_A : A;-fun agilely_Adv : Adv;-fun agility_N : N;-fun aging_N : N;-fun agitate_V : V;-fun agitate_V2 : V2;-fun agitated_A : A;-fun agitating_A : A;-fun agitation_N : N;-fun agitator_N : N;-fun aglow_A : A;-fun agm_N : N;-fun agnail_N : N;-fun agnes_PN : PN;-fun agnostic_A : A;-fun agnostic_N : N;-fun agnosticism_N : N;-fun ago_Adv : Adv;-fun agog_A : A;-fun agonized_A : A;-fun agonizing_A : A;-fun agonizingly_Adv : Adv;-fun agony_N : N;-fun agora_N : N;-fun agoraphobia_N : N;-fun agra_PN : PN;-fun agrarian_A : A;-fun agree_V : V;-fun agree_V2 : V2;-fun agreeable_A : A;-fun agreeably_Adv : Adv;-fun agreement_N : N;-fun agricultural_A : A;-fun agriculture_N : N;-fun aground_A : A;-fun aground_Adv : Adv;-fun ague_N : N;-fun ahead_Adv : Adv;-fun ahmedabad_PN : PN;-fun aid_N : N;-fun aid_V2 : V2;-fun aide_de_camp_N : N;-fun aide_memoire_N : N;-fun aids_N : N;-fun aigret_N : N;-fun aigrette_N : N;-fun ail_V : V;-fun ail_V2 : V2;-fun aileron_N : N;-fun ailment_N : N;-fun aim_N : N;-fun aim_V : V;-fun aim_V2 : V2;-fun aimless_A : A;-fun aimlessly_Adv : Adv;-fun air_N : N;-fun air_V2 : V2;-fun air_bladder_N : N;-fun air_conditioned_A : A;-fun air_conditioning_N : N;-fun air_cooled_A : A;-fun air_minded_A : A;-fun air_pump_N : N;-fun air_raid_N : N;-fun air_shaft_N : N;-fun air_sick_A : A;-fun air_sickness_N : N;-fun air_to_air_A : A;-fun air_to_ground_A : A;-fun airbed_N : N;-fun airborne_A : A;-fun airbrake_N : N;-fun aircraft_N : N;-fun aircraftman_N : N;-fun aircrew_N : N;-fun airdrie_PN : PN;-fun airdrome_N : N;-fun aireborough_PN : PN;-fun airedale_N : N;-fun airfield_N : N;-fun airflow_N : N;-fun airframe_N : N;-fun airily_Adv : Adv;-fun airing_N : N;-fun airing_cupboard_N : N;-fun airless_A : A;-fun airline_N : N;-fun airliner_N : N;-fun airmail_N : N;-fun airman_N : N;-fun airplane_N : N;-fun airport_N : N;-fun airscrew_N : N;-fun airship_N : N;-fun airstrip_N : N;-fun airtight_A : A;-fun airway_N : N;-fun airwoman_N : N;-fun airworthiness_N : N;-fun airworthy_A : A;-fun airy_A : A;-fun aisle_N : N;-fun aitch_N : N;-fun aitch_bone_N : N;-fun ajar_A : A;-fun akimbo_Adv : Adv;-fun akin_A : A;-fun akron_PN : PN;-fun al_PN : PN;-fun alabama_PN : PN;-fun alabaster_A : A;-fun alabaster_N : N;-fun alacrity_N : N;-fun alan_PN : PN;-fun alarm_N : N;-fun alarm_V2 : V2;-fun alarm_clock_N : N;-fun alarming_A : A;-fun alarmingly_Adv : Adv;-fun alarmist_N : N;-fun alaska_PN : PN;-fun alb_N : N;-fun albania_PN : PN;-fun albanian_A : A;-fun albanian_N : N;-fun albatross_N : N;-fun albert_PN : PN;-fun alberta_PN : PN;-fun albino_N : N;-fun album_N : N;-fun albumen_N : N;-fun alchemist_N : N;-fun alchemy_N : N;-fun alcohol_N : N;-fun alcoholic_A : A;-fun alcoholic_N : N;-fun alcoholism_N : N;-fun alcove_N : N;-fun alder_N : N;-fun alderman_N : N;-fun aldermanic_A : A;-fun aldershot_PN : PN;-fun ale_N : N;-fun ale_house_N : N;-fun alee_A : A;-fun alee_Adv : Adv;-fun aleppo_PN : PN;-fun alert_A : A;-fun alert_N : N;-fun alert_V2 : V2;-fun alertly_Adv : Adv;-fun alertness_N : N;-fun alessandria_PN : PN;-fun alex_PN : PN;-fun alexander_PN : PN;-fun alexandra_PN : PN;-fun alexandria_PN : PN;-fun alexandrine_N : N;-fun alexia_N : N;-fun alexic_A : A;-fun alexic_N : N;-fun alf_PN : PN;-fun alfalfa_N : N;-fun alfred_PN : PN;-fun alfresco_A : A;-fun alfresco_Adv : Adv;-fun alfreton_PN : PN;-fun alga_N : N;-fun algebra_N : N;-fun algebraic_A : A;-fun algebraical_A : A;-fun algebraically_Adv : Adv;-fun alger_PN : PN;-fun algeria_PN : PN;-fun algerian_A : A;-fun algerian_N : N;-fun ali_PN : PN;-fun alias_Adv : Adv;-fun alias_N : N;-fun alibi_N : N;-fun alicante_PN : PN;-fun alice_PN : PN;-fun alien_A : A;-fun alien_N : N;-fun alienate_V2 : V2;-fun alienation_N : N;-fun alienist_N : N;-fun alight_A : A;-fun alight_V : V;-fun align_V : V;-fun align_V2 : V2;-fun alignment_N : N;-fun alike_A : A;-fun alike_Adv : Adv;-fun alimentary_A : A;-fun alimony_N : N;-fun alison_PN : PN;-fun alive_A : A;-fun alkali_N : N;-fun alkaline_A : A;-fun all_mains_A : A;-fun all_round_A : A;-fun all_rounder_N : N;-fun allah_PN : PN;-fun allahabad_PN : PN;-fun allan_PN : PN;-fun allay_V2 : V2;-fun allegation_N : N;-fun allege_V2 : V2;-fun allegedly_Adv : Adv;-fun allegiance_N : N;-fun allegoric_A : A;-fun allegorical_A : A;-fun allegory_N : N;-fun allegretto_A : A;-fun allegretto_Adv : Adv;-fun allegretto_N : N;-fun allegro_A : A;-fun allegro_Adv : Adv;-fun allegro_N : N;-fun allen_PN : PN;-fun allergen_N : N;-fun allergic_A : A;-fun allergy_N : N;-fun alleviate_V2 : V2;-fun alleviation_N : N;-fun alley_N : N;-fun alleyway_N : N;-fun alliance_N : N;-fun alligator_N : N;-fun alliteration_N : N;-fun alliterative_A : A;-fun alliteratively_Adv : Adv;-fun alloa_PN : PN;-fun allocate_V2 : V2;-fun allocation_N : N;-fun allot_V2 : V2;-fun allotment_N : N;-fun allow_V : V;-fun allow_V2 : V2;-fun allowable_A : A;-fun allowance_N : N;-fun alloy_N : N;-fun alloy_V2 : V2;-fun allspice_N : N;-fun allude_V : V;-fun allure_N : N;-fun allure_V2 : V2;-fun allurement_N : N;-fun alluring_A : A;-fun allusion_N : N;-fun allusive_A : A;-fun alluvial_A : A;-fun ally_N : N;-fun ally_V2 : V2;-fun alma_ata_PN : PN;-fun alma_mater_N : N;-fun almanac_N : N;-fun almeria_PN : PN;-fun almighty_A : A;-fun almighty_N : N;-fun almond_N : N;-fun almond_eyed_A : A;-fun almoner_N : N;-fun almost_Adv : Adv;-fun alms_box_N : N;-fun alms_giving_N : N;-fun alms_house_N : N;-fun alnwick_PN : PN;-fun aloe_N : N;-fun aloft_Adv : Adv;-fun alone_A : A;-fun alone_Adv : Adv;-fun along_Adv : Adv;-fun alongside_Adv : Adv;-fun aloof_A : A;-fun aloof_Adv : Adv;-fun aloofness_N : N;-fun aloud_Adv : Adv;-fun alp_N : N;-fun alpaca_N : N;-fun alpenstock_N : N;-fun alpha_N : N;-fun alphabet_N : N;-fun alphabetical_A : A;-fun alphabetically_Adv : Adv;-fun alpine_A : A;-fun alpinist_N : N;-fun already_Adv : Adv;-fun alright_A : A;-fun alright_Adv : Adv;-fun alsatian_N : N;-fun also_Adv : Adv;-fun also_ran_N : N;-fun altar_N : N;-fun altar_piece_N : N;-fun alter_V : V;-fun alter_V2 : V2;-fun alter_ego_N : N;-fun alterable_A : A;-fun alteration_N : N;-fun altercation_N : N;-fun alternate_A : A;-fun alternate_V : V;-fun alternate_V2 : V2;-fun alternately_Adv : Adv;-fun alternation_N : N;-fun alternative_A : A;-fun alternative_N : N;-fun alternatively_Adv : Adv;-fun altimeter_N : N;-fun altitude_N : N;-fun alto_N : N;-fun altogether_Adv : Adv;-fun alton_PN : PN;-fun altrincham_PN : PN;-fun altruism_N : N;-fun altruist_N : N;-fun altruistic_A : A;-fun altruistically_Adv : Adv;-fun alum_N : N;-fun aluminium_N : N;-fun alumna_N : N;-fun alumnus_N : N;-fun alvechurch_PN : PN;-fun alveolar_A : A;-fun alveolar_N : N;-fun always_Adv : Adv;-fun amah_N : N;-fun amain_Adv : Adv;-fun amalgam_N : N;-fun amalgamate_V : V;-fun amalgamate_V2 : V2;-fun amalgamation_N : N;-fun amanda_PN : PN;-fun amanuensis_N : N;-fun amaryllis_N : N;-fun amass_V2 : V2;-fun amateur_N : N;-fun amateurish_A : A;-fun amateurism_N : N;-fun amatory_A : A;-fun amaze_V2 : V2;-fun amazement_N : N;-fun amazing_A : A;-fun amazingly_Adv : Adv;-fun amazon_N : N;-fun ambassador_N : N;-fun ambassadorial_A : A;-fun ambassadress_N : N;-fun amber_N : N;-fun ambergris_N : N;-fun ambidextrous_A : A;-fun ambience_N : N;-fun ambient_A : A;-fun ambiguity_N : N;-fun ambiguous_A : A;-fun ambiguously_Adv : Adv;-fun ambit_N : N;-fun ambition_N : N;-fun ambitious_A : A;-fun ambitiously_Adv : Adv;-fun ambivalence_N : N;-fun ambivalent_A : A;-fun amble_N : N;-fun amble_V : V;-fun ambrosia_N : N;-fun ambulance_N : N;-fun ambuscade_N : N;-fun ambuscade_V2 : V2;-fun ambush_N : N;-fun ambush_V2 : V2;-fun ameba_N : N;-fun ameer_N : N;-fun ameliorate_V : V;-fun ameliorate_V2 : V2;-fun amelioration_N : N;-fun amenable_A : A;-fun amend_V : V;-fun amend_V2 : V2;-fun amendable_A : A;-fun amendment_N : N;-fun amenity_N : N;-fun america_PN : PN;-fun american_A : A;-fun american_N : N;-fun americanism_N : N;-fun amesbury_PN : PN;-fun amethyst_N : N;-fun amharic_N : N;-fun amiability_N : N;-fun amiable_A : A;-fun amiably_Adv : Adv;-fun amicability_N : N;-fun amicable_A : A;-fun amicably_Adv : Adv;-fun amidships_Adv : Adv;-fun amiens_PN : PN;-fun amir_N : N;-fun amiss_A : A;-fun amiss_Adv : Adv;-fun amity_N : N;-fun ammanford_PN : PN;-fun ammeter_N : N;-fun ammonia_N : N;-fun ammoniated_A : A;-fun ammonite_N : N;-fun ammunition_N : N;-fun amnesia_N : N;-fun amnesty_N : N;-fun amoeba_N : N;-fun amoebic_A : A;-fun amok_Adv : Adv;-fun amoral_A : A;-fun amorous_A : A;-fun amorously_Adv : Adv;-fun amorphous_A : A;-fun amortization_N : N;-fun amortize_V2 : V2;-fun amount_N : N;-fun amount_V : V;-fun amour_N : N;-fun amour_propre_N : N;-fun amp_N : N;-fun ampere_N : N;-fun amphetamine_N : N;-fun amphibian_N : N;-fun amphibious_A : A;-fun amphitheatre_N : N;-fun amphora_N : N;-fun ample_A : A;-fun amplification_N : N;-fun amplifier_N : N;-fun amplify_V2 : V2;-fun amplitude_N : N;-fun amply_Adv : Adv;-fun ampoule_N : N;-fun amputate_V2 : V2;-fun amputation_N : N;-fun amsterdam_PN : PN;-fun amuck_Adv : Adv;-fun amulet_N : N;-fun amuse_V2 : V2;-fun amusement_N : N;-fun amusing_A : A;-fun amusingly_Adv : Adv;-fun amy_PN : PN;-fun anachronism_N : N;-fun anachronistic_A : A;-fun anaconda_N : N;-fun anaemia_N : N;-fun anaemic_A : A;-fun anaesthesia_N : N;-fun anaesthetic_A : A;-fun anaesthetic_N : N;-fun anaesthetist_N : N;-fun anaesthetize_V2 : V2;-fun anagram_N : N;-fun anal_A : A;-fun analgesia_N : N;-fun analgesic_N : N;-fun analog_N : N;-fun analogous_A : A;-fun analogously_Adv : Adv;-fun analogue_N : N;-fun analogy_N : N;-fun analyse_V2 : V2;-fun analysis_N : N;-fun analyst_N : N;-fun analytic_A : A;-fun analytical_A : A;-fun analytically_Adv : Adv;-fun analyze_V2 : V2;-fun anapaest_N : N;-fun anapaestic_A : A;-fun anarchic_A : A;-fun anarchically_Adv : Adv;-fun anarchism_N : N;-fun anarchist_N : N;-fun anarchy_N : N;-fun anathema_N : N;-fun anathematize_V : V;-fun anathematize_V2 : V2;-fun anatomical_A : A;-fun anatomically_Adv : Adv;-fun anatomist_N : N;-fun anatomy_N : N;-fun ancestor_N : N;-fun ancestral_A : A;-fun ancestress_N : N;-fun ancestry_N : N;-fun anchor_N : N;-fun anchor_V : V;-fun anchor_V2 : V2;-fun anchorage_N : N;-fun anchorite_N : N;-fun anchorman_N : N;-fun anchovy_N : N;-fun ancient_A : A;-fun ancillary_A : A;-fun ancona_PN : PN;-fun andante_A : A;-fun andante_Adv : Adv;-fun andante_N : N;-fun andiron_N : N;-fun andorra_PN : PN;-fun andorran_A : A;-fun andorran_N : N;-fun andover_PN : PN;-fun andrew_PN : PN;-fun andy_PN : PN;-fun anecdotal_A : A;-fun anecdote_N : N;-fun anemometer_N : N;-fun anemone_N : N;-fun aneroid_A : A;-fun aneroid_N : N;-fun anesthetic_A : A;-fun anesthetic_N : N;-fun anesthetist_N : N;-fun anesthetize_V2 : V2;-fun anew_Adv : Adv;-fun angel_N : N;-fun angela_PN : PN;-fun angelic_A : A;-fun angelica_N : N;-fun angelically_Adv : Adv;-fun angelus_N : N;-fun anger_N : N;-fun anger_V2 : V2;-fun angers_PN : PN;-fun angie_PN : PN;-fun angina_N : N;-fun angle_N : N;-fun angle_V : V;-fun angle_V2 : V2;-fun angle_dozer_N : N;-fun angle_iron_N : N;-fun angle_park_V : V;-fun angle_park_V2 : V2;-fun angler_N : N;-fun anglican_A : A;-fun anglican_N : N;-fun anglicism_N : N;-fun anglicize_V2 : V2;-fun angling_N : N;-fun anglo_catholic_A : A;-fun anglo_catholic_N : N;-fun anglo_indian_A : A;-fun anglo_indian_N : N;-fun anglo_saxon_A : A;-fun anglo_saxon_N : N;-fun anglomania_N : N;-fun anglophil_N : N;-fun anglophile_N : N;-fun anglophobe_N : N;-fun anglophobia_N : N;-fun angola_PN : PN;-fun angolan_A : A;-fun angolan_N : N;-fun angora_N : N;-fun angostura_N : N;-fun angrily_Adv : Adv;-fun angry_A : A;-fun angst_N : N;-fun anguilla_PN : PN;-fun anguillan_A : A;-fun anguillan_N : N;-fun anguish_N : N;-fun anguished_A : A;-fun angular_A : A;-fun angularity_N : N;-fun angus_PN : PN;-fun aniline_N : N;-fun animadversion_N : N;-fun animadvert_V : V;-fun animal_N : N;-fun animalcule_N : N;-fun animate_A : A;-fun animate_V2 : V2;-fun animatedly_A : A;-fun animation_N : N;-fun animism_N : N;-fun animosity_N : N;-fun animus_N : N;-fun anise_N : N;-fun aniseed_N : N;-fun anita_PN : PN;-fun ankara_PN : PN;-fun ankle_N : N;-fun anklet_N : N;-fun ann_PN : PN;-fun anna_N : N;-fun annabel_PN : PN;-fun annalist_N : N;-fun annan_PN : PN;-fun anne_PN : PN;-fun anneal_V2 : V2;-fun annex_N : N;-fun annex_V2 : V2;-fun annexation_N : N;-fun annexe_N : N;-fun annfield_PN : PN;-fun annfield_plain_PN : PN;-fun annie_PN : PN;-fun annihilate_V2 : V2;-fun annihilation_N : N;-fun anniversary_N : N;-fun annotate_V2 : V2;-fun annotation_N : N;-fun announce_V2 : V2;-fun announcement_N : N;-fun announcer_N : N;-fun annoy_V2 : V2;-fun annoyance_N : N;-fun annoying_A : A;-fun annual_A : A;-fun annual_N : N;-fun annually_Adv : Adv;-fun annuitant_N : N;-fun annuity_N : N;-fun annul_V2 : V2;-fun annular_A : A;-fun annulment_N : N;-fun annunciate_V2 : V2;-fun annunciation_N : N;-fun anode_N : N;-fun anodyne_A : A;-fun anodyne_N : N;-fun anoint_V2 : V2;-fun anointment_N : N;-fun anomalous_A : A;-fun anomalously_Adv : Adv;-fun anomaly_N : N;-fun anon_Adv : Adv;-fun anon_PN : PN;-fun anonymity_N : N;-fun anonymous_A : A;-fun anonymously_Adv : Adv;-fun anopheles_N : N;-fun anorak_N : N;-fun another_A : A;-fun anshan_PN : PN;-fun answer_N : N;-fun answer_V : V;-fun answer_V2 : V2;-fun answerable_A : A;-fun ant_N : N;-fun ant_eater_N : N;-fun ant_hill_N : N;-fun antagonism_N : N;-fun antagonist_N : N;-fun antagonistic_A : A;-fun antagonistically_Adv : Adv;-fun antagonize_V2 : V2;-fun antarctic_A : A;-fun ante_N : N;-fun ante_meridiem_Adv : Adv;-fun antecedence_N : N;-fun antecedent_A : A;-fun antecedent_N : N;-fun antechamber_N : N;-fun antedate_V2 : V2;-fun antediluvian_A : A;-fun antediluvian_N : N;-fun antelope_N : N;-fun antenatal_A : A;-fun antenna_N : N;-fun antenuptial_A : A;-fun antepenultimate_A : A;-fun anterior_A : A;-fun anteroom_N : N;-fun anthea_PN : PN;-fun anthem_N : N;-fun anther_N : N;-fun anthology_N : N;-fun anthony_PN : PN;-fun anthracite_N : N;-fun anthrax_N : N;-fun anthropoid_A : A;-fun anthropoid_N : N;-fun anthropological_A : A;-fun anthropologist_N : N;-fun anthropology_N : N;-fun anti_aircraft_A : A;-fun anti_hero_N : N;-fun anti_personnel_A : A;-fun anti_semite_A : A;-fun anti_semite_N : N;-fun anti_semitic_A : A;-fun anti_semitism_N : N;-fun antibiotic_A : A;-fun antibiotic_N : N;-fun antibody_N : N;-fun antic_N : N;-fun anticipate_V2 : V2;-fun anticipation_N : N;-fun anticipatory_A : A;-fun anticlimax_N : N;-fun anticlockwise_Adv : Adv;-fun anticyclone_N : N;-fun antidote_N : N;-fun antifreeze_N : N;-fun antigua_PN : PN;-fun antiguan_A : A;-fun antiguan_N : N;-fun antiknock_N : N;-fun antilogarithm_N : N;-fun antimacassar_N : N;-fun antimony_N : N;-fun antipathetic_A : A;-fun antipathy_N : N;-fun antiquarian_A : A;-fun antiquarian_N : N;-fun antiquary_N : N;-fun antiquated_A : A;-fun antique_A : A;-fun antique_N : N;-fun antiquity_N : N;-fun antirrhinum_N : N;-fun antiseptic_A : A;-fun antiseptic_N : N;-fun antisocial_A : A;-fun antitank_A : A;-fun antithesis_N : N;-fun antithetic_A : A;-fun antithetical_A : A;-fun antithetically_Adv : Adv;-fun antitoxin_N : N;-fun antitrade_A : A;-fun antitrade_N : N;-fun antler_N : N;-fun antony_PN : PN;-fun antonym_N : N;-fun antrim_PN : PN;-fun antwerp_PN : PN;-fun anus_N : N;-fun anvil_N : N;-fun anxiety_N : N;-fun anxious_A : A;-fun anxiously_Adv : Adv;-fun any_A : A;-fun any_Adv : Adv;-fun anybody_N : N;-fun anyhow_Adv : Adv;-fun anyone_N : N;-fun anyplace_Adv : Adv;-fun anything_N : N;-fun anyway_Adv : Adv;-fun anywhere_Adv : Adv;-fun aorta_N : N;-fun apace_Adv : Adv;-fun apache_N : N;-fun apanage_N : N;-fun apart_Adv : Adv;-fun apartheid_N : N;-fun apartment_N : N;-fun apathetic_A : A;-fun apathetically_Adv : Adv;-fun apathy_N : N;-fun ape_N : N;-fun ape_V2 : V2;-fun apeldoorn_PN : PN;-fun aperient_A : A;-fun aperient_N : N;-fun aperitif_N : N;-fun aperture_N : N;-fun apex_N : N;-fun aphasia_N : N;-fun aphid_N : N;-fun aphis_N : N;-fun aphorism_N : N;-fun aphrodisiac_A : A;-fun aphrodisiac_N : N;-fun apiarist_N : N;-fun apiary_N : N;-fun apiculture_N : N;-fun apiece_Adv : Adv;-fun apish_A : A;-fun aplomb_N : N;-fun apocalypse_N : N;-fun apocalyptic_A : A;-fun apocrypha_N : N;-fun apocryphal_A : A;-fun apogee_N : N;-fun apologetic_A : A;-fun apologetically_Adv : Adv;-fun apologetics_N : N;-fun apologist_N : N;-fun apologize_V : V;-fun apology_N : N;-fun apophthegm_N : N;-fun apoplectic_A : A;-fun apoplexy_N : N;-fun apostasy_N : N;-fun apostate_A : A;-fun apostate_N : N;-fun apostle_N : N;-fun apostolic_A : A;-fun apostrophe_N : N;-fun apostrophize_V2 : V2;-fun apothecary_N : N;-fun apothegm_N : N;-fun apotheosis_N : N;-fun appal_V2 : V2;-fun appalling_A : A;-fun appallingly_Adv : Adv;-fun appanage_N : N;-fun apparatus_N : N;-fun apparel_N : N;-fun apparel_V2 : V2;-fun apparent_A : A;-fun apparently_Adv : Adv;-fun apparition_N : N;-fun appeal_N : N;-fun appeal_V : V;-fun appealing_A : A;-fun appealingly_Adv : Adv;-fun appear_V : V;-fun appearance_N : N;-fun appease_V2 : V2;-fun appeasement_N : N;-fun appellant_A : A;-fun appellant_N : N;-fun appellation_N : N;-fun append_V2 : V2;-fun appendage_N : N;-fun appendectomy_N : N;-fun appendicitis_N : N;-fun appendix_N : N;-fun appertain_V : V;-fun appetite_N : N;-fun appetizer_N : N;-fun appetizing_A : A;-fun applaud_V : V;-fun applaud_V2 : V2;-fun applause_N : N;-fun apple_N : N;-fun applejack_N : N;-fun appliance_N : N;-fun applicability_N : N;-fun applicable_A : A;-fun applicant_N : N;-fun application_N : N;-fun applied_A : A;-fun applique_N : N;-fun applique_V2 : V2;-fun apply_V : V;-fun apply_V2 : V2;-fun appoint_V2 : V2;-fun appointee_N : N;-fun appointment_N : N;-fun apportion_V2 : V2;-fun apportionment_N : N;-fun apposite_A : A;-fun appositely_Adv : Adv;-fun apposition_N : N;-fun appraisal_N : N;-fun appraise_V2 : V2;-fun appreciable_A : A;-fun appreciably_Adv : Adv;-fun appreciate_V : V;-fun appreciate_V2 : V2;-fun appreciation_N : N;-fun appreciative_A : A;-fun appreciatively_Adv : Adv;-fun apprehend_V2 : V2;-fun apprehensible_A : A;-fun apprehension_N : N;-fun apprehensive_A : A;-fun apprentice_N : N;-fun apprentice_V2 : V2;-fun apprenticeship_N : N;-fun apprise_V2 : V2;-fun appro_N : N;-fun approach_N : N;-fun approach_V : V;-fun approach_V2 : V2;-fun approachable_A : A;-fun approbation_N : N;-fun appropriate_A : A;-fun appropriate_V2 : V2;-fun appropriately_Adv : Adv;-fun appropriation_N : N;-fun approval_N : N;-fun approve_V : V;-fun approve_V2 : V2;-fun approvingly_Adv : Adv;-fun approx_PN : PN;-fun approximate_A : A;-fun approximate_V : V;-fun approximate_V2 : V2;-fun approximately_Adv : Adv;-fun approximation_N : N;-fun appurtenance_N : N;-fun apr_PN : PN;-fun apricot_N : N;-fun april_N : N;-fun april_PN : PN;-fun apron_N : N;-fun apropos_A : A;-fun apropos_Adv : Adv;-fun apres_ski_A : A;-fun apse_N : N;-fun apt_A : A;-fun aptitude_N : N;-fun aptly_Adv : Adv;-fun aptness_N : N;-fun aqualung_N : N;-fun aquamarine_N : N;-fun aquanaut_N : N;-fun aquaplane_N : N;-fun aquaplane_V : V;-fun aquarium_N : N;-fun aquarius_PN : PN;-fun aquatic_A : A;-fun aquatint_N : N;-fun aquavit_N : N;-fun aqueduct_N : N;-fun aqueous_A : A;-fun aquiline_A : A;-fun arab_N : N;-fun arabesque_N : N;-fun arabian_A : A;-fun arabian_N : N;-fun arabic_A : A;-fun arabic_N : N;-fun arabist_N : N;-fun arable_A : A;-fun arachnid_N : N;-fun arbiter_N : N;-fun arbitrament_N : N;-fun arbitrarily_Adv : Adv;-fun arbitrary_A : A;-fun arbitrate_V : V;-fun arbitrate_V2 : V2;-fun arbitration_N : N;-fun arbitrator_N : N;-fun arboreal_A : A;-fun arbour_N : N;-fun arbroath_PN : PN;-fun arc_N : N;-fun arc_lamp_N : N;-fun arc_light_N : N;-fun arcade_N : N;-fun arcadian_A : A;-fun arcadian_N : N;-fun arcane_A : A;-fun arch_A : A;-fun arch_N : N;-fun arch_V : V;-fun arch_V2 : V2;-fun archaeological_A : A;-fun archaeologist_N : N;-fun archaeology_N : N;-fun archaic_A : A;-fun archaism_N : N;-fun archangel_N : N;-fun archbishop_N : N;-fun archbishopric_N : N;-fun archdeacon_N : N;-fun archdeaconry_N : N;-fun archdiocese_N : N;-fun archduke_N : N;-fun archeology_N : N;-fun archer_N : N;-fun archery_N : N;-fun archetypal_A : A;-fun archetype_N : N;-fun archimandrite_N : N;-fun archipelago_N : N;-fun architect_N : N;-fun architectural_A : A;-fun architecturally_Adv : Adv;-fun architecture_N : N;-fun archivist_N : N;-fun archly_Adv : Adv;-fun archway_N : N;-fun arctic_A : A;-fun ardent_A : A;-fun ardently_Adv : Adv;-fun ardour_N : N;-fun ardrossan_PN : PN;-fun arduous_A : A;-fun arduously_Adv : Adv;-fun are_N : N;-fun area_N : N;-fun areca_N : N;-fun arena_N : N;-fun argent_A : A;-fun argent_N : N;-fun argentina_PN : PN;-fun argentine_PN : PN;-fun argentinian_A : A;-fun argentinian_N : N;-fun argon_N : N;-fun argonaut_N : N;-fun argosy_N : N;-fun argot_N : N;-fun arguable_A : A;-fun arguably_Adv : Adv;-fun argue_V : V;-fun argue_V2 : V2;-fun argument_N : N;-fun argumentation_N : N;-fun argumentative_A : A;-fun argus_N : N;-fun argus_eyed_A : A;-fun aria_N : N;-fun arid_A : A;-fun aridity_N : N;-fun aries_PN : PN;-fun aright_Adv : Adv;-fun arise_V : V;-fun aristocracy_N : N;-fun aristocrat_N : N;-fun aristocratic_A : A;-fun aristocratically_Adv : Adv;-fun arithmetic_N : N;-fun arithmetical_A : A;-fun arithmetically_Adv : Adv;-fun arithmetician_N : N;-fun arizona_PN : PN;-fun ark_N : N;-fun arkansas_PN : PN;-fun arm_N : N;-fun arm_V : V;-fun arm_V2 : V2;-fun arm_hole_N : N;-fun armada_N : N;-fun armadale_PN : PN;-fun armadillo_N : N;-fun armageddon_PN : PN;-fun armagh_PN : PN;-fun armament_N : N;-fun armature_N : N;-fun armband_N : N;-fun armchair_N : N;-fun armful_N : N;-fun armistice_N : N;-fun armlet_N : N;-fun armoire_N : N;-fun armorial_A : A;-fun armour_N : N;-fun armour_plate_N : N;-fun armoured_A : A;-fun armourer_N : N;-fun armoury_N : N;-fun armpit_N : N;-fun arms_race_N : N;-fun arms_runner_N : N;-fun army_N : N;-fun arnhem_PN : PN;-fun arnica_N : N;-fun arnold_PN : PN;-fun aroma_N : N;-fun aromatic_A : A;-fun around_Adv : Adv;-fun arouse_V2 : V2;-fun arpeggio_N : N;-fun arquebus_N : N;-fun arr_PN : PN;-fun arrack_N : N;-fun arraign_V2 : V2;-fun arraignment_N : N;-fun arrange_V : V;-fun arrange_V2 : V2;-fun arrangement_N : N;-fun arrant_A : A;-fun arras_N : N;-fun array_N : N;-fun array_V2 : V2;-fun arrest_N : N;-fun arrest_V2 : V2;-fun arrester_N : N;-fun arresting_A : A;-fun arrival_N : N;-fun arrive_V : V;-fun arriere_pensee_N : N;-fun arrogance_N : N;-fun arrogant_A : A;-fun arrogantly_Adv : Adv;-fun arrogate_V2 : V2;-fun arrow_N : N;-fun arrowhead_N : N;-fun arrowroot_N : N;-fun arse_N : N;-fun arsehole_N : N;-fun arsenal_N : N;-fun arsenic_N : N;-fun arson_N : N;-fun art_N : N;-fun art_PN : PN;-fun artefact_N : N;-fun arterial_A : A;-fun arteriosclerosis_N : N;-fun artery_N : N;-fun artesian_A : A;-fun artful_A : A;-fun artfully_Adv : Adv;-fun artfulness_N : N;-fun arthritic_A : A;-fun arthritis_N : N;-fun arthur_PN : PN;-fun artichoke_N : N;-fun article_N : N;-fun article_V2 : V2;-fun articulate_A : A;-fun articulate_V : V;-fun articulate_V2 : V2;-fun articulately_Adv : Adv;-fun articulation_N : N;-fun artie_PN : PN;-fun artifact_N : N;-fun artifice_N : N;-fun artificer_N : N;-fun artificial_A : A;-fun artificially_Adv : Adv;-fun artillery_N : N;-fun artisan_N : N;-fun artist_N : N;-fun artiste_N : N;-fun artistic_A : A;-fun artistically_Adv : Adv;-fun artistry_N : N;-fun artless_A : A;-fun artlessly_Adv : Adv;-fun artlessness_N : N;-fun arty_A : A;-fun arty_crafty_A : A;-fun arum_N : N;-fun aryan_A : A;-fun aryan_N : N;-fun arete_N : N;-fun asap_PN : PN;-fun asbestos_N : N;-fun ascend_V : V;-fun ascend_V2 : V2;-fun ascendancy_N : N;-fun ascendant_N : N;-fun ascendency_N : N;-fun ascendent_N : N;-fun ascension_N : N;-fun ascent_N : N;-fun ascertain_V2 : V2;-fun ascertainable_A : A;-fun ascetic_A : A;-fun ascetic_N : N;-fun ascetically_Adv : Adv;-fun asceticism_N : N;-fun ascorbic_A : A;-fun ascot_PN : PN;-fun ascribable_A : A;-fun ascribe_V2 : V2;-fun ascription_N : N;-fun asdic_N : N;-fun asepsis_N : N;-fun aseptic_A : A;-fun asexual_A : A;-fun asexuality_N : N;-fun ash_N : N;-fun ash_bin_N : N;-fun ash_can_N : N;-fun ash_key_N : N;-fun ash_pan_N : N;-fun ashamed_A : A;-fun ashamedly_Adv : Adv;-fun ashbourne_PN : PN;-fun ashby_PN : PN;-fun ashby_de_la_zouch_PN : PN;-fun ashby_woulds_PN : PN;-fun ashen_A : A;-fun ashford_PN : PN;-fun ashington_PN : PN;-fun ashore_Adv : Adv;-fun ashton_in_makerfield_PN : PN;-fun ashton_under_lyne_PN : PN;-fun ashtray_N : N;-fun ashy_A : A;-fun asian_A : A;-fun asian_N : N;-fun asiatic_A : A;-fun asiatic_N : N;-fun aside_Adv : Adv;-fun aside_N : N;-fun asinine_A : A;-fun ask_V : V;-fun ask_V2 : V2;-fun askance_Adv : Adv;-fun askern_PN : PN;-fun askew_A : A;-fun askew_Adv : Adv;-fun asking_N : N;-fun aslant_Adv : Adv;-fun asleep_A : A;-fun asleep_Adv : Adv;-fun asp_N : N;-fun asparagus_N : N;-fun aspect_N : N;-fun aspectual_A : A;-fun aspen_N : N;-fun asperity_N : N;-fun asperse_V2 : V2;-fun aspersion_N : N;-fun asphalt_N : N;-fun asphalt_V2 : V2;-fun asphodel_N : N;-fun asphyxia_N : N;-fun asphyxiate_V2 : V2;-fun asphyxiation_N : N;-fun aspic_N : N;-fun aspidistra_N : N;-fun aspirant_N : N;-fun aspirate_N : N;-fun aspirate_V2 : V2;-fun aspiration_N : N;-fun aspire_V : V;-fun aspirin_N : N;-fun aspull_PN : PN;-fun ass_N : N;-fun assagai_N : N;-fun assail_V2 : V2;-fun assailable_A : A;-fun assailant_N : N;-fun assassin_N : N;-fun assassinate_V2 : V2;-fun assassination_N : N;-fun assault_N : N;-fun assault_V2 : V2;-fun assay_N : N;-fun assay_V2 : V2;-fun assegai_N : N;-fun assemblage_N : N;-fun assemble_V : V;-fun assemble_V2 : V2;-fun assembly_N : N;-fun assent_N : N;-fun assent_V : V;-fun assert_V2 : V2;-fun assertion_N : N;-fun assertive_A : A;-fun assertively_Adv : Adv;-fun assess_V2 : V2;-fun assessment_N : N;-fun assessor_N : N;-fun asset_N : N;-fun asseverate_V2 : V2;-fun asseveration_N : N;-fun asshole_N : N;-fun assiduity_N : N;-fun assiduous_A : A;-fun assiduously_Adv : Adv;-fun assign_V2 : V2;-fun assignable_A : A;-fun assignation_N : N;-fun assignment_N : N;-fun assimilate_V : V;-fun assimilate_V2 : V2;-fun assimilation_N : N;-fun assist_V : V;-fun assist_V2 : V2;-fun assistance_N : N;-fun assistant_N : N;-fun assize_N : N;-fun assoc_N : N;-fun associate_A : A;-fun associate_N : N;-fun associate_V : V;-fun associate_V2 : V2;-fun association_N : N;-fun assonance_N : N;-fun assorted_A : A;-fun assortment_N : N;-fun asst_N : N;-fun assuage_V2 : V2;-fun assume_V2 : V2;-fun assumption_N : N;-fun assurance_N : N;-fun assure_V2 : V2;-fun assured_A : A;-fun assuredly_Adv : Adv;-fun assuredness_N : N;-fun aster_N : N;-fun asterisk_N : N;-fun astern_Adv : Adv;-fun asteroid_N : N;-fun asthma_N : N;-fun asthmatic_A : A;-fun astigmatic_A : A;-fun astigmatism_N : N;-fun astir_A : A;-fun astir_Adv : Adv;-fun aston_PN : PN;-fun astonish_V2 : V2;-fun astonishing_A : A;-fun astonishingly_Adv : Adv;-fun astonishment_N : N;-fun astound_V2 : V2;-fun astrakhan_N : N;-fun astral_A : A;-fun astray_A : A;-fun astray_Adv : Adv;-fun astride_A : A;-fun astride_Adv : Adv;-fun astringency_N : N;-fun astringent_A : A;-fun astringent_N : N;-fun astrodome_N : N;-fun astrolabe_N : N;-fun astrologer_N : N;-fun astrological_A : A;-fun astrology_N : N;-fun astronaut_N : N;-fun astronautics_N : N;-fun astronomer_N : N;-fun astronomical_A : A;-fun astronomically_Adv : Adv;-fun astronomy_N : N;-fun astrophysics_N : N;-fun astute_A : A;-fun astutely_Adv : Adv;-fun astuteness_N : N;-fun asunder_Adv : Adv;-fun asylum_N : N;-fun asymmetric_A : A;-fun asymmetrical_A : A;-fun asymmetrically_Adv : Adv;-fun asymmetry_N : N;-fun asymptote_N : N;-fun asymptotic_A : A;-fun asymptotically_Adv : Adv;-fun at_home_N : N;-fun atabrine_N : N;-fun atavism_N : N;-fun atavistic_A : A;-fun atelier_N : N;-fun atheism_N : N;-fun atheist_N : N;-fun atheistic_A : A;-fun athenian_A : A;-fun athenian_N : N;-fun athens_PN : PN;-fun atherstone_PN : PN;-fun athirst_A : A;-fun athlete_N : N;-fun athletic_A : A;-fun athletics_N : N;-fun athlone_PN : PN;-fun athwart_Adv : Adv;-fun atlanta_PN : PN;-fun atlantic_PN : PN;-fun atlas_N : N;-fun atmosphere_N : N;-fun atmospheric_A : A;-fun atmospherics_N : N;-fun atoll_N : N;-fun atom_N : N;-fun atomic_A : A;-fun atomize_V2 : V2;-fun atomizer_N : N;-fun atonal_A : A;-fun atonality_N : N;-fun atone_V : V;-fun atonement_N : N;-fun atop_Adv : Adv;-fun atrabilious_A : A;-fun atrocious_A : A;-fun atrociously_Adv : Adv;-fun atrocity_N : N;-fun atrophy_N : N;-fun atrophy_V : V;-fun atrophy_V2 : V2;-fun attach_V : V;-fun attach_V2 : V2;-fun attachment_N : N;-fun attache_N : N;-fun attack_N : N;-fun attack_V2 : V2;-fun attacker_N : N;-fun attain_V : V;-fun attain_V2 : V2;-fun attainable_A : A;-fun attainder_N : N;-fun attainment_N : N;-fun attar_N : N;-fun attempt_N : N;-fun attempt_V2 : V2;-fun attend_V : V;-fun attend_V2 : V2;-fun attendance_N : N;-fun attendant_A : A;-fun attendant_N : N;-fun attention_N : N;-fun attentive_A : A;-fun attentively_Adv : Adv;-fun attentiveness_N : N;-fun attenuate_V2 : V2;-fun attenuation_N : N;-fun attest_V : V;-fun attest_V2 : V2;-fun attic_A : A;-fun attic_N : N;-fun attire_N : N;-fun attire_V2 : V2;-fun attitude_N : N;-fun attitudinize_V : V;-fun attorney_N : N;-fun attract_V2 : V2;-fun attraction_N : N;-fun attractive_A : A;-fun attractively_Adv : Adv;-fun attributable_A : A;-fun attribute_N : N;-fun attribute_V2 : V2;-fun attribution_N : N;-fun attributive_A : A;-fun attributively_Adv : Adv;-fun attrition_N : N;-fun attune_V2 : V2;-fun atypical_A : A;-fun atypically_Adv : Adv;-fun au_fait_A : A;-fun au_fond_Adv : Adv;-fun au_pair_N : N;-fun aubergine_N : N;-fun aubrietia_N : N;-fun auburn_A : A;-fun auckland_PN : PN;-fun auction_N : N;-fun auction_V2 : V2;-fun auctioneer_N : N;-fun audacious_A : A;-fun audaciously_Adv : Adv;-fun audacity_N : N;-fun audibility_N : N;-fun audible_A : A;-fun audibly_Adv : Adv;-fun audience_N : N;-fun audio_lingual_A : A;-fun audit_N : N;-fun audit_V2 : V2;-fun audition_N : N;-fun audition_V2 : V2;-fun auditor_N : N;-fun auditorium_N : N;-fun auditory_A : A;-fun audley_PN : PN;-fun audrey_PN : PN;-fun aug_PN : PN;-fun auger_N : N;-fun aught_N : N;-fun augment_V : V;-fun augment_V2 : V2;-fun augmentation_N : N;-fun augsburg_PN : PN;-fun augur_N : N;-fun augur_V : V;-fun augur_V2 : V2;-fun augury_N : N;-fun august_A : A;-fun august_N : N;-fun august_PN : PN;-fun augustan_A : A;-fun auk_N : N;-fun auld_lang_syne_N : N;-fun aunt_N : N;-fun auntie_N : N;-fun aunty_N : N;-fun aura_N : N;-fun aural_A : A;-fun aureole_N : N;-fun auricle_N : N;-fun auricular_A : A;-fun auriferous_A : A;-fun aurora_N : N;-fun auspicious_A : A;-fun auspiciously_Adv : Adv;-fun aussie_N : N;-fun austere_A : A;-fun austerely_Adv : Adv;-fun austerity_N : N;-fun australia_PN : PN;-fun australian_A : A;-fun australian_N : N;-fun austria_PN : PN;-fun austrian_A : A;-fun austrian_N : N;-fun autarchy_N : N;-fun autarky_N : N;-fun authentic_A : A;-fun authentically_Adv : Adv;-fun authenticate_V2 : V2;-fun authentication_N : N;-fun authenticity_N : N;-fun author_N : N;-fun authoress_N : N;-fun authoritarian_A : A;-fun authoritarian_N : N;-fun authoritarianism_N : N;-fun authoritative_A : A;-fun authoritatively_Adv : Adv;-fun authority_N : N;-fun authorization_N : N;-fun authorize_V2 : V2;-fun authorship_N : N;-fun autism_N : N;-fun autistic_A : A;-fun auto_N : N;-fun auto_changer_N : N;-fun auto_da_fe_N : N;-fun autobahn_N : N;-fun autobiographic_A : A;-fun autobiographical_A : A;-fun autobiography_N : N;-fun autocracy_N : N;-fun autocrat_N : N;-fun autocratic_A : A;-fun autocratically_Adv : Adv;-fun autogiro_N : N;-fun autograph_N : N;-fun autograph_V2 : V2;-fun autogyro_N : N;-fun automat_N : N;-fun automate_V2 : V2;-fun automatic_A : A;-fun automatic_N : N;-fun automatically_Adv : Adv;-fun automation_N : N;-fun automaton_N : N;-fun automobile_N : N;-fun autonomous_A : A;-fun autonomy_N : N;-fun autopsy_N : N;-fun autostrada_N : N;-fun autumn_N : N;-fun autumnal_A : A;-fun auxiliary_A : A;-fun auxiliary_N : N;-fun avail_N : N;-fun avail_V : V;-fun avail_V2 : V2;-fun availability_N : N;-fun available_A : A;-fun avalanche_N : N;-fun avant_garde_N : N;-fun avarice_N : N;-fun avaricious_A : A;-fun avariciously_Adv : Adv;-fun avatar_N : N;-fun ave_PN : PN;-fun aveley_PN : PN;-fun avenge_V2 : V2;-fun avenger_N : N;-fun avenue_N : N;-fun aver_V2 : V2;-fun average_A : A;-fun average_N : N;-fun average_V : V;-fun average_V2 : V2;-fun averse_A : A;-fun aversion_N : N;-fun avert_V2 : V2;-fun aviary_N : N;-fun aviation_N : N;-fun aviator_N : N;-fun avid_A : A;-fun avidity_N : N;-fun avidly_Adv : Adv;-fun avignon_PN : PN;-fun avocado_N : N;-fun avocation_N : N;-fun avoid_V2 : V2;-fun avoidable_A : A;-fun avoidance_N : N;-fun avoirdupois_N : N;-fun avon_PN : PN;-fun avouch_V : V;-fun avouch_V2 : V2;-fun avow_V2 : V2;-fun avowal_N : N;-fun avowedly_Adv : Adv;-fun avuncular_A : A;-fun await_V2 : V2;-fun awake_A : A;-fun awake_V : V;-fun awaken_V2 : V2;-fun awakening_N : N;-fun award_N : N;-fun award_V2 : V2;-fun aware_A : A;-fun awareness_N : N;-fun awash_A : A;-fun away_A : A;-fun away_Adv : Adv;-fun awe_N : N;-fun awe_V2 : V2;-fun awe_inspiring_A : A;-fun awe_stricken_A : A;-fun awe_struck_A : A;-fun aweigh_Adv : Adv;-fun awesome_A : A;-fun awful_A : A;-fun awfully_Adv : Adv;-fun awhile_Adv : Adv;-fun awkward_A : A;-fun awkwardly_Adv : Adv;-fun awkwardness_N : N;-fun awl_N : N;-fun awning_N : N;-fun awol_PN : PN;-fun awry_A : A;-fun awry_Adv : Adv;-fun ax_N : N;-fun ax_V2 : V2;-fun axe_N : N;-fun axe_V2 : V2;-fun axiom_N : N;-fun axiomatic_A : A;-fun axiomatically_Adv : Adv;-fun axis_N : N;-fun axle_N : N;-fun ay_Adv : Adv;-fun ayah_N : N;-fun aycliffe_PN : PN;-fun aye_Adv : Adv;-fun aylesbury_PN : PN;-fun aylesford_PN : PN;-fun ayr_PN : PN;-fun azalea_N : N;-fun azimuth_N : N;-fun azure_A : A;-fun azure_N : N;-fun b_ed_N : N;-fun ba_N : N;-fun baa_N : N;-fun baa_V : V;-fun baa_lamb_N : N;-fun baas_N : N;-fun babble_N : N;-fun babble_V : V;-fun babble_V2 : V2;-fun babbler_N : N;-fun babe_N : N;-fun babel_N : N;-fun baboo_N : N;-fun baboon_N : N;-fun babs_PN : PN;-fun babu_N : N;-fun baby_N : N;-fun baby_V2 : V2;-fun baby_faced_A : A;-fun baby_farmer_N : N;-fun baby_minder_N : N;-fun baby_talk_N : N;-fun babyhood_N : N;-fun babyish_A : A;-fun babysit_V : V;-fun babysitter_N : N;-fun babysitting_N : N;-fun baccalaureate_N : N;-fun baccarat_N : N;-fun bacchanal_A : A;-fun bacchanal_N : N;-fun bacchanalian_A : A;-fun baccy_N : N;-fun bachelor_N : N;-fun bacillus_N : N;-fun back_Adv : Adv;-fun back_N : N;-fun back_V : V;-fun back_V2 : V2;-fun back_breaking_A : A;-fun back_down_N : N;-fun back_formation_N : N;-fun back_up_N : N;-fun backache_N : N;-fun backband_N : N;-fun backbench_N : N;-fun backbencher_N : N;-fun backbite_V : V;-fun backbite_V2 : V2;-fun backbiter_N : N;-fun backboard_N : N;-fun backbone_N : N;-fun backchat_N : N;-fun backcloth_N : N;-fun backdate_V2 : V2;-fun backdoor_N : N;-fun backdrop_N : N;-fun backer_N : N;-fun backfire_N : N;-fun backfire_V : V;-fun backgammon_N : N;-fun background_N : N;-fun backhand_A : A;-fun backhanded_A : A;-fun backing_N : N;-fun backlash_N : N;-fun backless_A : A;-fun backlog_N : N;-fun backmost_A : A;-fun backpedal_V : V;-fun backroom_N : N;-fun backscratcher_N : N;-fun backseat_N : N;-fun backsheesh_N : N;-fun backside_N : N;-fun backslide_V : V;-fun backspace_V : V;-fun backstage_Adv : Adv;-fun backstair_A : A;-fun backstroke_N : N;-fun backsword_N : N;-fun backtalk_N : N;-fun backward_A : A;-fun backward_Adv : Adv;-fun backwards_A : A;-fun backwards_Adv : Adv;-fun backwash_N : N;-fun backwater_N : N;-fun backwoodsman_N : N;-fun backworth_PN : PN;-fun bacon_N : N;-fun bacterial_A : A;-fun bacteriologist_N : N;-fun bacteriology_N : N;-fun bacterium_N : N;-fun bacup_PN : PN;-fun bad_A : A;-fun bad_N : N;-fun badajoz_PN : PN;-fun badalona_PN : PN;-fun badge_N : N;-fun badger_N : N;-fun badger_V2 : V2;-fun badinage_N : N;-fun badly_Adv : Adv;-fun badly_behaved_A : A;-fun badminton_N : N;-fun badness_N : N;-fun baffle_N : N;-fun baffle_V2 : V2;-fun bag_N : N;-fun bag_V : V;-fun bag_V2 : V2;-fun bagatelle_N : N;-fun baggage_N : N;-fun baggy_A : A;-fun baghdad_PN : PN;-fun bagnio_N : N;-fun bagpipe_N : N;-fun bahamas_PN : PN;-fun bahamian_A : A;-fun bahamian_N : N;-fun bahasa_N : N;-fun bahrain_PN : PN;-fun bahraini_A : A;-fun bahraini_N : N;-fun bail_N : N;-fun bail_V : V;-fun bail_V2 : V2;-fun bailee_N : N;-fun bailey_N : N;-fun bailey_PN : PN;-fun bailiff_N : N;-fun bailment_N : N;-fun bailor_N : N;-fun bairn_N : N;-fun bait_N : N;-fun bait_V : V;-fun bait_V2 : V2;-fun baize_N : N;-fun bake_V : V;-fun bake_V2 : V2;-fun bakelite_N : N;-fun baker_N : N;-fun bakery_N : N;-fun baking_hot_A : A;-fun baking_powder_N : N;-fun baksheesh_N : N;-fun baku_PN : PN;-fun balaclava_N : N;-fun balalaika_N : N;-fun balance_N : N;-fun balance_V : V;-fun balance_V2 : V2;-fun balance_sheet_N : N;-fun balance_wheel_N : N;-fun balconied_A : A;-fun balcony_N : N;-fun bald_A : A;-fun bald_head_N : N;-fun bald_pate_N : N;-fun balderdash_N : N;-fun baldly_Adv : Adv;-fun baldness_N : N;-fun baldock_PN : PN;-fun baldric_N : N;-fun bale_N : N;-fun bale_V2 : V2;-fun baleful_A : A;-fun balefully_Adv : Adv;-fun balk_N : N;-fun balk_V : V;-fun balk_V2 : V2;-fun ball_N : N;-fun ball_V : V;-fun ball_V2 : V2;-fun ball_cartridge_N : N;-fun ball_dress_N : N;-fun ballad_N : N;-fun ballade_N : N;-fun ballast_N : N;-fun ballast_V2 : V2;-fun ballbearing_N : N;-fun ballcock_N : N;-fun ballerina_N : N;-fun ballet_N : N;-fun ballet_dancer_N : N;-fun ballet_skirt_N : N;-fun ballistic_A : A;-fun ballistics_N : N;-fun ballock_N : N;-fun balloon_N : N;-fun balloon_V : V;-fun balloonist_N : N;-fun ballot_N : N;-fun ballot_V : V;-fun ballot_box_N : N;-fun ballpen_N : N;-fun ballpoint_N : N;-fun ballpoint_pen_N : N;-fun ballroom_N : N;-fun balls_up_N : N;-fun bally_A : A;-fun bally_Adv : Adv;-fun ballyhoo_N : N;-fun balm_N : N;-fun balmy_A : A;-fun baloney_N : N;-fun balsa_N : N;-fun balsam_N : N;-fun baltimore_PN : PN;-fun baluster_N : N;-fun balustrade_N : N;-fun bambino_N : N;-fun bamboo_N : N;-fun bamboozle_V2 : V2;-fun ban_N : N;-fun ban_V2 : V2;-fun banal_A : A;-fun banality_N : N;-fun banana_N : N;-fun banbury_PN : PN;-fun band_N : N;-fun band_V : V;-fun band_V2 : V2;-fun band_saw_N : N;-fun bandage_N : N;-fun bandage_V2 : V2;-fun bandanna_N : N;-fun bandbox_N : N;-fun bandeau_N : N;-fun bandit_N : N;-fun banditry_N : N;-fun bandleader_N : N;-fun bandmaster_N : N;-fun bandoleer_N : N;-fun bandolier_N : N;-fun bandsman_N : N;-fun bandstand_N : N;-fun bandung_PN : PN;-fun bandwagon_N : N;-fun bandy_A : A;-fun bandy_V2 : V2;-fun bandy_legged_A : A;-fun bane_N : N;-fun baneful_A : A;-fun banefully_Adv : Adv;-fun bang_Adv : Adv;-fun bang_N : N;-fun bang_V : V;-fun bang_V2 : V2;-fun bangalore_PN : PN;-fun banger_N : N;-fun bangkok_PN : PN;-fun bangladesh_PN : PN;-fun bangladeshi_A : A;-fun bangladeshi_N : N;-fun bangle_N : N;-fun bangor_PN : PN;-fun banian_N : N;-fun banian_tree_N : N;-fun banish_V2 : V2;-fun banishment_N : N;-fun banister_N : N;-fun banjo_N : N;-fun bank_N : N;-fun bank_V : V;-fun bank_V2 : V2;-fun bank_bill_N : N;-fun bank_book_N : N;-fun bank_draft_N : N;-fun bank_rate_N : N;-fun banker_N : N;-fun banking_N : N;-fun banknote_N : N;-fun bankroll_N : N;-fun bankrupt_A : A;-fun bankrupt_N : N;-fun bankrupt_V2 : V2;-fun bankruptcy_N : N;-fun banner_N : N;-fun banning_order_N : N;-fun bannister_N : N;-fun bannock_N : N;-fun bannockburn_PN : PN;-fun banquet_N : N;-fun banquet_V : V;-fun banquet_V2 : V2;-fun banshee_N : N;-fun bant_V : V;-fun bantam_N : N;-fun banter_N : N;-fun banter_V : V;-fun banter_V2 : V2;-fun bantering_A : A;-fun banteringly_Adv : Adv;-fun banting_N : N;-fun bantry_PN : PN;-fun bantu_A : A;-fun bantu_N : N;-fun banyan_N : N;-fun baobab_N : N;-fun baptism_N : N;-fun baptismal_A : A;-fun baptist_A : A;-fun baptist_N : N;-fun baptize_V2 : V2;-fun bar_N : N;-fun bar_V2 : V2;-fun baracaldo_PN : PN;-fun barb_N : N;-fun barbadian_A : A;-fun barbadian_N : N;-fun barbados_PN : PN;-fun barbara_PN : PN;-fun barbarian_A : A;-fun barbarian_N : N;-fun barbaric_A : A;-fun barbarism_N : N;-fun barbarity_N : N;-fun barbarize_V2 : V2;-fun barbarous_A : A;-fun barbarously_Adv : Adv;-fun barbecue_N : N;-fun barbecue_V2 : V2;-fun barbed_A : A;-fun barbel_N : N;-fun barber_N : N;-fun barbican_N : N;-fun barbitone_N : N;-fun barbiturate_N : N;-fun barcarole_N : N;-fun barcarolle_N : N;-fun barcelona_PN : PN;-fun bard_N : N;-fun bardic_A : A;-fun bardolatry_N : N;-fun bare_A : A;-fun bare_V2 : V2;-fun bareback_Adv : Adv;-fun barebacked_A : A;-fun barebacked_Adv : Adv;-fun barefaced_A : A;-fun barefacedly_Adv : Adv;-fun barefoot_Adv : Adv;-fun barefooted_A : A;-fun barefooted_Adv : Adv;-fun bareheaded_A : A;-fun barelegged_A : A;-fun barely_Adv : Adv;-fun bareness_N : N;-fun bargain_N : N;-fun bargain_V : V;-fun bargain_V2 : V2;-fun barge_N : N;-fun barge_V : V;-fun bargee_N : N;-fun bargepole_N : N;-fun bargoed_PN : PN;-fun bari_PN : PN;-fun baritone_N : N;-fun barium_N : N;-fun bark_N : N;-fun bark_V : V;-fun bark_V2 : V2;-fun barker_N : N;-fun barking_PN : PN;-fun barley_N : N;-fun barley_sugar_N : N;-fun barley_water_N : N;-fun barleycorn_N : N;-fun barm_N : N;-fun barmaid_N : N;-fun barman_N : N;-fun barmy_A : A;-fun barn_N : N;-fun barn_door_N : N;-fun barnacle_N : N;-fun barnard_castle_PN : PN;-fun barnet_PN : PN;-fun barnoldswick_PN : PN;-fun barnsley_PN : PN;-fun barnstaple_PN : PN;-fun barnstorm_V : V;-fun barnstormer_N : N;-fun barnyard_N : N;-fun barometer_N : N;-fun barometric_A : A;-fun baron_N : N;-fun baronage_N : N;-fun baroness_N : N;-fun baronet_N : N;-fun baronetcy_N : N;-fun baronial_A : A;-fun barony_N : N;-fun baroque_A : A;-fun baroque_N : N;-fun barouche_N : N;-fun barque_N : N;-fun barrack_N : N;-fun barrack_V : V;-fun barrack_V2 : V2;-fun barracking_N : N;-fun barracuda_N : N;-fun barrage_N : N;-fun barranquilla_PN : PN;-fun barrel_N : N;-fun barrel_V2 : V2;-fun barrelled_A : A;-fun barren_A : A;-fun barrenness_N : N;-fun barrhead_PN : PN;-fun barricade_N : N;-fun barricade_V2 : V2;-fun barrier_N : N;-fun barrister_N : N;-fun barrow_N : N;-fun barrow_boy_N : N;-fun barrow_in_furness_PN : PN;-fun barrow_man_N : N;-fun barry_PN : PN;-fun bart_PN : PN;-fun bartender_N : N;-fun barter_N : N;-fun barter_V : V;-fun barter_V2 : V2;-fun barterer_N : N;-fun bartholomew_PN : PN;-fun barton_upon_humber_PN : PN;-fun bas_relief_N : N;-fun basal_A : A;-fun basalt_N : N;-fun bascule_N : N;-fun base_A : A;-fun base_N : N;-fun base_V2 : V2;-fun baseball_N : N;-fun baseboard_N : N;-fun basel_PN : PN;-fun baseless_A : A;-fun basement_N : N;-fun bash_N : N;-fun bash_V2 : V2;-fun bashful_A : A;-fun bashfully_Adv : Adv;-fun basic_A : A;-fun basically_Adv : Adv;-fun basil_N : N;-fun basil_PN : PN;-fun basildon_PN : PN;-fun basilica_N : N;-fun basilisk_N : N;-fun basin_N : N;-fun basingstoke_PN : PN;-fun basis_N : N;-fun bask_V : V;-fun basket_N : N;-fun basketball_N : N;-fun basketry_N : N;-fun bass_A : A;-fun bass_N : N;-fun bassinet_N : N;-fun bassoon_N : N;-fun bast_N : N;-fun bastard_N : N;-fun bastardize_V2 : V2;-fun bastardy_N : N;-fun baste_V2 : V2;-fun bastinado_N : N;-fun bastinado_V2 : V2;-fun bastion_N : N;-fun bat_N : N;-fun bat_V : V;-fun bat_V2 : V2;-fun batch_N : N;-fun bate_V2 : V2;-fun bath_N : N;-fun bath_PN : PN;-fun bath_V : V;-fun bath_V2 : V2;-fun bath_chair_N : N;-fun bathe_N : N;-fun bathe_V : V;-fun bathe_V2 : V2;-fun bather_N : N;-fun bathgate_PN : PN;-fun bathing_N : N;-fun bathing_cap_N : N;-fun bathing_costume_N : N;-fun bathing_machine_N : N;-fun bathing_suit_N : N;-fun bathos_N : N;-fun bathrobe_N : N;-fun bathroom_N : N;-fun bathtub_N : N;-fun bathysphere_N : N;-fun batik_N : N;-fun batiste_N : N;-fun batley_PN : PN;-fun batman_N : N;-fun baton_N : N;-fun bats_A : A;-fun batsman_N : N;-fun battalion_N : N;-fun batten_N : N;-fun batten_V : V;-fun batten_V2 : V2;-fun batter_N : N;-fun batter_V : V;-fun batter_V2 : V2;-fun battery_N : N;-fun batting_N : N;-fun battle_N : N;-fun battle_V : V;-fun battle_axe_N : N;-fun battle_cruiser_N : N;-fun battledore_N : N;-fun battledress_N : N;-fun battlefield_N : N;-fun battleground_N : N;-fun battleship_N : N;-fun battue_N : N;-fun batty_A : A;-fun bauble_N : N;-fun baulk_N : N;-fun baulk_V : V;-fun baulk_V2 : V2;-fun bauxite_N : N;-fun bawbee_N : N;-fun bawd_N : N;-fun bawdily_Adv : Adv;-fun bawdy_A : A;-fun bawdy_N : N;-fun bawl_V : V;-fun bawl_V2 : V2;-fun bay_A : A;-fun bay_N : N;-fun bay_V : V;-fun bay_wreath_N : N;-fun bayonet_N : N;-fun bayonet_V2 : V2;-fun bayou_N : N;-fun bazaar_N : N;-fun bazooka_N : N;-fun bbc_PN : PN;-fun beach_N : N;-fun beach_V2 : V2;-fun beachcomber_N : N;-fun beachhead_N : N;-fun beachwear_N : N;-fun beacon_N : N;-fun beacon_fire_N : N;-fun beacon_light_N : N;-fun beaconsfield_PN : PN;-fun bead_N : N;-fun beading_N : N;-fun beadle_N : N;-fun beady_A : A;-fun beagle_N : N;-fun beagling_N : N;-fun beak_N : N;-fun beaker_N : N;-fun beam_N : N;-fun beam_V : V;-fun beam_V2 : V2;-fun bean_N : N;-fun beanfeast_N : N;-fun beano_N : N;-fun beanstalk_N : N;-fun bear_N : N;-fun bear_V : V;-fun bear_V2 : V2;-fun bearable_A : A;-fun beard_N : N;-fun beard_V2 : V2;-fun bearded_A : A;-fun beardless_A : A;-fun bearer_N : N;-fun bearing_N : N;-fun bearish_A : A;-fun bearsden_PN : PN;-fun bearskin_N : N;-fun beast_N : N;-fun beastliness_N : N;-fun beastly_A : A;-fun beastly_Adv : Adv;-fun beat_A : A;-fun beat_N : N;-fun beat_V : V;-fun beat_V2 : V2;-fun beaten_A : A;-fun beater_N : N;-fun beatific_A : A;-fun beatification_N : N;-fun beatify_V2 : V2;-fun beating_N : N;-fun beatitude_N : N;-fun beatnik_N : N;-fun beatrice_PN : PN;-fun beau_N : N;-fun beaujolais_N : N;-fun beaumaris_PN : PN;-fun beauteous_A : A;-fun beautician_N : N;-fun beautiful_A : A;-fun beautifully_Adv : Adv;-fun beautify_V2 : V2;-fun beauty_N : N;-fun beauty_parlour_N : N;-fun beauty_salon_N : N;-fun beauty_sleep_N : N;-fun beauty_spot_N : N;-fun beaver_N : N;-fun beaver_V : V;-fun bebington_PN : PN;-fun becalmed_A : A;-fun beccles_PN : PN;-fun beck_N : N;-fun beckon_V : V;-fun beckon_V2 : V2;-fun become_V : V;-fun become_V2 : V2;-fun becoming_A : A;-fun becomingly_Adv : Adv;-fun bed_N : N;-fun bed_V2 : V2;-fun bedaubed_A : A;-fun bedbug_N : N;-fun beddau_PN : PN;-fun bedded_A : A;-fun bedding_N : N;-fun bedecked_A : A;-fun bedevil_V2 : V2;-fun bedevilment_N : N;-fun bedewed_A : A;-fun bedfellow_N : N;-fun bedford_PN : PN;-fun bedfordshire_PN : PN;-fun bedimmed_A : A;-fun bedlam_N : N;-fun bedlington_PN : PN;-fun bedouin_N : N;-fun bedpan_N : N;-fun bedpost_N : N;-fun bedraggled_A : A;-fun bedridden_A : A;-fun bedrock_N : N;-fun bedroll_N : N;-fun bedroom_N : N;-fun bedroomed_A : A;-fun bedside_N : N;-fun bedsit_N : N;-fun bedsitter_N : N;-fun bedsitting_room_N : N;-fun bedsore_N : N;-fun bedspread_N : N;-fun bedstead_N : N;-fun bedtime_N : N;-fun beduin_N : N;-fun bedwas_PN : PN;-fun bee_N : N;-fun beech_N : N;-fun beef_N : N;-fun beef_V : V;-fun beefeater_N : N;-fun beefsteak_N : N;-fun beefy_A : A;-fun beehive_N : N;-fun beep_N : N;-fun beer_N : N;-fun beery_A : A;-fun beeswax_N : N;-fun beeswax_V2 : V2;-fun beet_N : N;-fun beetle_N : N;-fun beetle_V : V;-fun beetle_browed_A : A;-fun beetroot_N : N;-fun befall_V : V;-fun befall_V2 : V2;-fun befit_V2 : V2;-fun befitting_A : A;-fun befittingly_Adv : Adv;-fun befogged_A : A;-fun before_Adv : Adv;-fun beforehand_A : A;-fun beforehand_Adv : Adv;-fun befoul_V2 : V2;-fun befriend_V2 : V2;-fun beg_V : V;-fun beg_V2 : V2;-fun beget_V2 : V2;-fun begetter_N : N;-fun beggar_N : N;-fun beggar_V2 : V2;-fun beggarly_A : A;-fun beggarman_N : N;-fun beggarwoman_N : N;-fun beggary_N : N;-fun begin_V : V;-fun begin_V2 : V2;-fun beginner_N : N;-fun beginning_N : N;-fun begonia_N : N;-fun begrimed_A : A;-fun begrudge_V2 : V2;-fun beguile_V2 : V2;-fun begum_N : N;-fun behalf_N : N;-fun behave_V : V;-fun behaved_A : A;-fun behaviour_N : N;-fun behaviourism_N : N;-fun behaviourist_N : N;-fun behead_V2 : V2;-fun behest_N : N;-fun behind_Adv : Adv;-fun behind_N : N;-fun behindhand_A : A;-fun behold_V2 : V2;-fun beholden_A : A;-fun beholder_N : N;-fun behove_V2 : V2;-fun beige_N : N;-fun being_N : N;-fun beirut_PN : PN;-fun beith_PN : PN;-fun bejewelled_A : A;-fun belabour_V2 : V2;-fun belated_A : A;-fun belatedly_Adv : Adv;-fun belay_N : N;-fun belay_V2 : V2;-fun belaying_pin_N : N;-fun belch_N : N;-fun belch_V : V;-fun belch_V2 : V2;-fun beldam_N : N;-fun beldame_N : N;-fun beleaguer_V2 : V2;-fun belem_PN : PN;-fun belfast_PN : PN;-fun belfry_N : N;-fun belgian_A : A;-fun belgian_N : N;-fun belgium_PN : PN;-fun belgrade_PN : PN;-fun belie_V2 : V2;-fun belief_N : N;-fun believable_A : A;-fun believe_V : V;-fun believe_V2 : V2;-fun believer_N : N;-fun believing_N : N;-fun belike_Adv : Adv;-fun belinda_PN : PN;-fun belittle_V2 : V2;-fun bell_N : N;-fun bell_V2 : V2;-fun bell_bottomed_A : A;-fun bell_buoy_N : N;-fun bell_flower_N : N;-fun bell_founder_N : N;-fun bell_foundry_N : N;-fun bell_metal_N : N;-fun bell_push_N : N;-fun bell_ringer_N : N;-fun bell_tent_N : N;-fun bella_PN : PN;-fun belladonna_N : N;-fun bellboy_N : N;-fun belle_N : N;-fun belle_PN : PN;-fun bellhop_N : N;-fun bellicose_A : A;-fun bellied_A : A;-fun belligerency_N : N;-fun belligerent_A : A;-fun belligerent_N : N;-fun belligerently_Adv : Adv;-fun bellow_V : V;-fun bellow_V2 : V2;-fun bellshill_PN : PN;-fun bellwether_N : N;-fun belly_N : N;-fun belly_V : V;-fun belly_V2 : V2;-fun bellyache_N : N;-fun bellyache_V : V;-fun bellyflop_N : N;-fun bellyful_N : N;-fun bellyland_V : V;-fun bellylaugh_N : N;-fun bellylaugh_V : V;-fun belo_horizonte_PN : PN;-fun belong_V : V;-fun beloved_A : A;-fun beloved_N : N;-fun below_Adv : Adv;-fun belper_PN : PN;-fun belt_N : N;-fun belt_V2 : V2;-fun belting_N : N;-fun bemoan_V2 : V2;-fun bemused_A : A;-fun ben_N : N;-fun ben_PN : PN;-fun bench_N : N;-fun bend_N : N;-fun bend_V : V;-fun bend_V2 : V2;-fun beneath_Adv : Adv;-fun benedick_N : N;-fun benedictine_A : A;-fun benedictine_N : N;-fun benediction_N : N;-fun benefaction_N : N;-fun benefactor_N : N;-fun benefactress_N : N;-fun benefice_N : N;-fun beneficed_A : A;-fun beneficence_N : N;-fun beneficent_A : A;-fun beneficial_A : A;-fun beneficially_Adv : Adv;-fun beneficiary_N : N;-fun benefit_N : N;-fun benefit_V : V;-fun benefit_V2 : V2;-fun benevolence_N : N;-fun benevolent_A : A;-fun benevolently_Adv : Adv;-fun bengali_A : A;-fun bengali_N : N;-fun benighted_A : A;-fun benign_A : A;-fun benignant_A : A;-fun benignantly_Adv : Adv;-fun benignity_N : N;-fun benignly_Adv : Adv;-fun benin_PN : PN;-fun beninese_A : A;-fun beninese_N : N;-fun benison_N : N;-fun benjamin_PN : PN;-fun benny_PN : PN;-fun bent_A : A;-fun bent_N : N;-fun benumbed_A : A;-fun benzedrine_N : N;-fun benzene_N : N;-fun benzine_N : N;-fun benzol_N : N;-fun beograd_PN : PN;-fun bequeath_V2 : V2;-fun bequest_N : N;-fun berate_V2 : V2;-fun bereave_V2 : V2;-fun bereavement_N : N;-fun beret_N : N;-fun berg_N : N;-fun bergamo_PN : PN;-fun bergen_PN : PN;-fun beri_beri_N : N;-fun berkhamsted_PN : PN;-fun berkshire_PN : PN;-fun berlin_PN : PN;-fun bermuda_PN : PN;-fun bermudan_A : A;-fun bermudan_N : N;-fun bern_PN : PN;-fun bernard_PN : PN;-fun bernie_PN : PN;-fun berry_N : N;-fun berserk_A : A;-fun bert_PN : PN;-fun berth_N : N;-fun berth_V : V;-fun berth_V2 : V2;-fun bertha_PN : PN;-fun bertie_PN : PN;-fun berwick_upon_tweed_PN : PN;-fun beryl_N : N;-fun beryl_PN : PN;-fun beseech_V2 : V2;-fun beseeching_A : A;-fun beseechingly_Adv : Adv;-fun beseem_V2 : V2;-fun beset_V2 : V2;-fun beshrew_V2 : V2;-fun besides_Adv : Adv;-fun besiege_V2 : V2;-fun besieger_N : N;-fun besmear_V2 : V2;-fun besmirch_V2 : V2;-fun besom_N : N;-fun besotted_A : A;-fun bespangled_A : A;-fun bespattered_A : A;-fun bespeak_V2 : V2;-fun bespectacled_A : A;-fun bess_PN : PN;-fun bessie_PN : PN;-fun best_Adv : Adv;-fun best_V2 : V2;-fun best_seller_N : N;-fun bestial_A : A;-fun bestiality_N : N;-fun bestially_Adv : Adv;-fun bestiary_N : N;-fun bestir_V2 : V2;-fun bestow_V2 : V2;-fun bestowal_N : N;-fun bestrew_V2 : V2;-fun bestride_V2 : V2;-fun bet_N : N;-fun bet_V : V;-fun bet_V2 : V2;-fun beta_N : N;-fun betake_V2 : V2;-fun betel_N : N;-fun betel_nut_N : N;-fun bethel_N : N;-fun bethink_V2 : V2;-fun bethune_PN : PN;-fun betide_V2 : V2;-fun betimes_Adv : Adv;-fun betoken_V2 : V2;-fun betray_V2 : V2;-fun betrayal_N : N;-fun betrayer_N : N;-fun betroth_V2 : V2;-fun betrothal_N : N;-fun betrothed_N : N;-fun betsy_PN : PN;-fun better_Adv : Adv;-fun better_N : N;-fun better_V2 : V2;-fun betterment_N : N;-fun bettor_N : N;-fun betty_PN : PN;-fun between_Adv : Adv;-fun betwixt_Adv : Adv;-fun bevel_N : N;-fun bevel_V2 : V2;-fun beverage_N : N;-fun beverley_PN : PN;-fun bevy_N : N;-fun bewail_V2 : V2;-fun beware_V : V;-fun beware_V2 : V2;-fun bewdley_PN : PN;-fun bewilder_V2 : V2;-fun bewildering_A : A;-fun bewilderment_N : N;-fun bewitch_V2 : V2;-fun bewitching_A : A;-fun bewitchingly_Adv : Adv;-fun bexhill_PN : PN;-fun bexley_PN : PN;-fun bey_N : N;-fun beyond_Adv : Adv;-fun bezique_N : N;-fun bhang_N : N;-fun bhutan_PN : PN;-fun bhutani_A : A;-fun bhutani_N : N;-fun bias_N : N;-fun bias_V2 : V2;-fun bib_N : N;-fun bib_V : V;-fun bible_N : N;-fun biblical_A : A;-fun bibliographer_N : N;-fun bibliography_N : N;-fun bibliophile_N : N;-fun bibulous_A : A;-fun bicameral_A : A;-fun bicarbonate_N : N;-fun bicentenary_N : N;-fun bicentennial_A : A;-fun bicentennial_N : N;-fun biceps_N : N;-fun bicester_PN : PN;-fun bicker_V : V;-fun bicycle_N : N;-fun bicycle_V : V;-fun bid_N : N;-fun bid_V : V;-fun bid_V2 : V2;-fun biddable_A : A;-fun bidder_N : N;-fun bidding_N : N;-fun biddulph_PN : PN;-fun bide_V2 : V2;-fun bideford_PN : PN;-fun bidet_N : N;-fun bielefeld_PN : PN;-fun biennial_A : A;-fun biennial_N : N;-fun biennially_Adv : Adv;-fun bier_N : N;-fun biff_N : N;-fun biff_V2 : V2;-fun bifocal_A : A;-fun bifurcate_A : A;-fun bifurcate_V : V;-fun bifurcate_V2 : V2;-fun bifurcated_A : A;-fun bifurcation_N : N;-fun big_A : A;-fun big_boned_A : A;-fun bigamist_N : N;-fun bigamous_A : A;-fun bigamy_N : N;-fun biggleswade_PN : PN;-fun bight_N : N;-fun bigot_N : N;-fun bigoted_A : A;-fun bigotry_N : N;-fun bigwig_N : N;-fun bijou_A : A;-fun bijou_N : N;-fun bike_N : N;-fun bike_V : V;-fun bikini_N : N;-fun bilabial_A : A;-fun bilabial_N : N;-fun bilateral_A : A;-fun bilateralism_N : N;-fun bilaterally_Adv : Adv;-fun bilbao_PN : PN;-fun bilberry_N : N;-fun bile_N : N;-fun bile_duct_N : N;-fun bilge_N : N;-fun bilge_water_N : N;-fun bilharzia_N : N;-fun bilingual_A : A;-fun bilingual_N : N;-fun bilious_A : A;-fun biliousness_N : N;-fun bilk_V2 : V2;-fun bill_N : N;-fun bill_PN : PN;-fun bill_V : V;-fun bill_V2 : V2;-fun bill_poster_N : N;-fun bill_sticker_N : N;-fun billboard_N : N;-fun billericay_PN : PN;-fun billet_N : N;-fun billet_V2 : V2;-fun billet_doux_N : N;-fun billfold_N : N;-fun billhook_N : N;-fun billiard_marker_N : N;-fun billiard_player_N : N;-fun billiard_room_N : N;-fun billiard_table_N : N;-fun billiards_N : N;-fun billingsgate_N : N;-fun billington_PN : PN;-fun billion_A : A;-fun billion_N : N;-fun billionth_A : A;-fun billionth_N : N;-fun billow_N : N;-fun billow_V : V;-fun billowy_A : A;-fun billy_N : N;-fun billy_PN : PN;-fun billy_goat_N : N;-fun billy_ho_N : N;-fun billy_o_N : N;-fun biltong_N : N;-fun bimetallic_A : A;-fun bimetallism_N : N;-fun bin_N : N;-fun binary_A : A;-fun bind_N : N;-fun bind_V : V;-fun bind_V2 : V2;-fun binder_N : N;-fun bindery_N : N;-fun binding_A : A;-fun bindweed_N : N;-fun bine_N : N;-fun binge_N : N;-fun bingley_PN : PN;-fun bingo_N : N;-fun binnacle_N : N;-fun binomial_A : A;-fun biochemistry_N : N;-fun biodegradable_A : A;-fun biograph_N : N;-fun biographer_N : N;-fun biographic_A : A;-fun biographical_A : A;-fun biography_N : N;-fun biological_A : A;-fun biologically_Adv : Adv;-fun biologist_N : N;-fun biology_N : N;-fun bioscope_N : N;-fun bipartisan_A : A;-fun biped_N : N;-fun biplane_N : N;-fun birch_N : N;-fun birch_V2 : V2;-fun birch_rod_N : N;-fun bird's_eye_A : A;-fun bird_N : N;-fun bird_fancier_N : N;-fun birdcage_N : N;-fun birdlime_N : N;-fun birdnesting_N : N;-fun birdwatcher_N : N;-fun biretta_N : N;-fun birkenhead_PN : PN;-fun biro_N : N;-fun birstall_PN : PN;-fun birth_N : N;-fun birth_control_N : N;-fun birthday_N : N;-fun birthmark_N : N;-fun birthplace_N : N;-fun birthrate_N : N;-fun birthright_N : N;-fun birtley_PN : PN;-fun biscuit_N : N;-fun bisect_V2 : V2;-fun bisection_N : N;-fun bisexual_A : A;-fun bisexual_N : N;-fun bisexuality_N : N;-fun bishop's_cleeve_PN : PN;-fun bishop's_stortford_PN : PN;-fun bishop_N : N;-fun bishop_auckland_PN : PN;-fun bishopbriggs_PN : PN;-fun bishopric_N : N;-fun bismuth_N : N;-fun bison_N : N;-fun bistro_N : N;-fun bit_N : N;-fun bitch_N : N;-fun bitch_V : V;-fun bitchy_A : A;-fun bite_N : N;-fun bite_V : V;-fun bite_V2 : V2;-fun biting_A : A;-fun bitingly_Adv : Adv;-fun bitter_A : A;-fun bitter_N : N;-fun bitter_sweet_A : A;-fun bitterly_Adv : Adv;-fun bittern_N : N;-fun bitterness_N : N;-fun bitumen_N : N;-fun bituminous_A : A;-fun bivalve_N : N;-fun bivouac_N : N;-fun bivouac_V : V;-fun biz_N : N;-fun bizarre_A : A;-fun bizonal_A : A;-fun blab_V : V;-fun blab_V2 : V2;-fun blabber_V : V;-fun blabber_V2 : V2;-fun blabbermouth_N : N;-fun black_A : A;-fun black_N : N;-fun black_V2 : V2;-fun black_beetle_N : N;-fun black_lead_N : N;-fun black_lead_V2 : V2;-fun blackamoor_N : N;-fun blackball_V2 : V2;-fun blackberry_N : N;-fun blackbird_N : N;-fun blackboard_N : N;-fun blackburn_PN : PN;-fun blackcurrant_N : N;-fun blacken_V : V;-fun blacken_V2 : V2;-fun blackguard_N : N;-fun blackguard_V2 : V2;-fun blackguardly_A : A;-fun blackhall_PN : PN;-fun blackhead_N : N;-fun blacking_N : N;-fun blackish_A : A;-fun blackleg_N : N;-fun blackleg_V : V;-fun blackleg_V2 : V2;-fun blacklist_N : N;-fun blacklist_V2 : V2;-fun blackmail_N : N;-fun blackmail_V2 : V2;-fun blackmailer_N : N;-fun blackness_N : N;-fun blackout_N : N;-fun blackpool_PN : PN;-fun blackshirt_N : N;-fun blacksmith_N : N;-fun blackthorn_N : N;-fun blackwater_A : A;-fun blackwood_PN : PN;-fun bladder_N : N;-fun blade_N : N;-fun blaeberry_N : N;-fun blaenau_ffestiniog_PN : PN;-fun blaenavon_PN : PN;-fun blaengwrach_PN : PN;-fun blah_N : N;-fun blaina_PN : PN;-fun blairgowrie_PN : PN;-fun blame_N : N;-fun blame_V2 : V2;-fun blameless_A : A;-fun blamelessly_Adv : Adv;-fun blameworthy_A : A;-fun blanch_V : V;-fun blanch_V2 : V2;-fun blancmange_N : N;-fun bland_A : A;-fun blandishment_N : N;-fun blandly_Adv : Adv;-fun blandness_N : N;-fun blank_A : A;-fun blank_N : N;-fun blanket_N : N;-fun blanket_V2 : V2;-fun blankly_Adv : Adv;-fun blantyre_PN : PN;-fun blare_N : N;-fun blare_V : V;-fun blare_V2 : V2;-fun blarney_N : N;-fun blaspheme_V : V;-fun blaspheme_V2 : V2;-fun blasphemer_N : N;-fun blasphemous_A : A;-fun blasphemously_Adv : Adv;-fun blasphemy_N : N;-fun blast_N : N;-fun blast_V2 : V2;-fun blast_furnace_N : N;-fun blast_off_N : N;-fun blasted_A : A;-fun blase_A : A;-fun blatant_A : A;-fun blatantly_Adv : Adv;-fun blather_N : N;-fun blather_V : V;-fun blaze_N : N;-fun blaze_V : V;-fun blaze_V2 : V2;-fun blazer_N : N;-fun blazing_A : A;-fun blazon_N : N;-fun blazon_V2 : V2;-fun blazonry_N : N;-fun bldg_PN : PN;-fun bldgs_PN : PN;-fun bleach_N : N;-fun bleach_V : V;-fun bleach_V2 : V2;-fun bleaching_powder_N : N;-fun bleak_A : A;-fun bleakly_Adv : Adv;-fun bleary_A : A;-fun bleary_eyed_A : A;-fun bleat_N : N;-fun bleat_V : V;-fun bleat_V2 : V2;-fun bleed_V : V;-fun bleed_V2 : V2;-fun bleep_N : N;-fun bleep_V : V;-fun blemish_N : N;-fun blemish_V2 : V2;-fun blench_V : V;-fun blend_N : N;-fun blend_V : V;-fun blend_V2 : V2;-fun bless_V2 : V2;-fun blessed_A : A;-fun blessedness_N : N;-fun blessing_N : N;-fun bletchley_PN : PN;-fun blether_N : N;-fun blether_V : V;-fun blidworth_PN : PN;-fun blight_N : N;-fun blight_V2 : V2;-fun blighter_N : N;-fun blighty_N : N;-fun blimp_N : N;-fun blind_A : A;-fun blind_N : N;-fun blind_V2 : V2;-fun blindfold_A : A;-fun blindfold_N : N;-fun blindfold_V2 : V2;-fun blindly_Adv : Adv;-fun blindman's_buff_N : N;-fun blindness_N : N;-fun blink_N : N;-fun blink_V : V;-fun blink_V2 : V2;-fun blinking_A : A;-fun blip_N : N;-fun bliss_N : N;-fun blissful_A : A;-fun blissfully_Adv : Adv;-fun blister_N : N;-fun blister_V : V;-fun blister_V2 : V2;-fun blithe_A : A;-fun blithely_Adv : Adv;-fun blithering_A : A;-fun blithesome_A : A;-fun blitz_N : N;-fun blitz_V2 : V2;-fun blizzard_N : N;-fun bloated_A : A;-fun bloater_N : N;-fun blob_N : N;-fun bloc_N : N;-fun block_N : N;-fun block_V2 : V2;-fun blockade_N : N;-fun blockade_V2 : V2;-fun blockade_runner_N : N;-fun blockage_N : N;-fun blockbuster_N : N;-fun blockhead_N : N;-fun blockhouse_N : N;-fun bloke_N : N;-fun blond_A : A;-fun blond_N : N;-fun blonde_A : A;-fun blonde_N : N;-fun blood_N : N;-fun blood_V2 : V2;-fun blood_bath_N : N;-fun blood_donor_N : N;-fun blood_group_N : N;-fun blood_heat_N : N;-fun blood_letting_N : N;-fun blood_money_N : N;-fun blood_poisoning_N : N;-fun blood_pressure_N : N;-fun blood_relation_N : N;-fun blood_transfusion_N : N;-fun blood_type_N : N;-fun blood_vessel_N : N;-fun bloodcurdling_A : A;-fun bloodhound_N : N;-fun bloodless_A : A;-fun bloodlessly_Adv : Adv;-fun bloodlust_N : N;-fun bloodshed_N : N;-fun bloodshot_A : A;-fun bloodstain_N : N;-fun bloodstained_A : A;-fun bloodstock_N : N;-fun bloodsucker_N : N;-fun bloodthirstiness_N : N;-fun bloodthirsty_A : A;-fun bloody_A : A;-fun bloody_Adv : Adv;-fun bloody_minded_A : A;-fun bloom_N : N;-fun bloom_V : V;-fun bloomer_N : N;-fun blooming_A : A;-fun blossom_N : N;-fun blossom_V : V;-fun blot_N : N;-fun blot_V2 : V2;-fun blotch_N : N;-fun blotter_N : N;-fun blotting_paper_N : N;-fun blotto_A : A;-fun blouse_N : N;-fun blow_N : N;-fun blow_V : V;-fun blow_V2 : V2;-fun blow_dry_V2 : V2;-fun blow_up_N : N;-fun blowback_N : N;-fun blower_N : N;-fun blowfly_N : N;-fun blowhole_N : N;-fun blowing_up_N : N;-fun blowlamp_N : N;-fun blowout_N : N;-fun blowpipe_N : N;-fun blowtorch_N : N;-fun blowzy_A : A;-fun blubber_N : N;-fun blubber_V : V;-fun blubber_V2 : V2;-fun bludgeon_N : N;-fun bludgeon_V2 : V2;-fun blue_A : A;-fun blue_N : N;-fun blue_V2 : V2;-fun blue_collar_A : A;-fun blue_jacket_N : N;-fun blue_pencil_V2 : V2;-fun bluebell_N : N;-fun bluebottle_N : N;-fun blueprint_N : N;-fun bluestocking_N : N;-fun bluff_A : A;-fun bluff_N : N;-fun bluff_V : V;-fun bluff_V2 : V2;-fun bluffer_N : N;-fun bluffly_Adv : Adv;-fun bluffness_N : N;-fun bluish_A : A;-fun blunder_N : N;-fun blunder_V : V;-fun blunder_V2 : V2;-fun blunderbuss_N : N;-fun blunderer_N : N;-fun blunt_A : A;-fun blunt_V2 : V2;-fun bluntly_Adv : Adv;-fun bluntness_N : N;-fun blur_N : N;-fun blur_V : V;-fun blur_V2 : V2;-fun blurb_N : N;-fun blurt_V2 : V2;-fun blush_N : N;-fun blush_V : V;-fun blushing_A : A;-fun blushingly_Adv : Adv;-fun bluster_N : N;-fun bluster_V : V;-fun bluster_V2 : V2;-fun blustery_A : A;-fun blvd_N : N;-fun blyth_PN : PN;-fun bma_N : N;-fun bmus_N : N;-fun bo'ness_PN : PN;-fun bo'sn_N : N;-fun bo'sun_N : N;-fun boa_N : N;-fun boa_constrictor_N : N;-fun boar_N : N;-fun board_N : N;-fun board_V : V;-fun board_V2 : V2;-fun boarder_N : N;-fun boarding_N : N;-fun boarding_card_N : N;-fun boarding_house_N : N;-fun boarding_school_N : N;-fun boardroom_N : N;-fun boardwalk_N : N;-fun boast_N : N;-fun boast_V : V;-fun boast_V2 : V2;-fun boaster_N : N;-fun boastful_A : A;-fun boastfully_Adv : Adv;-fun boat_N : N;-fun boat_V : V;-fun boat_hook_N : N;-fun boat_house_N : N;-fun boat_race_N : N;-fun boat_train_N : N;-fun boater_N : N;-fun boatman_N : N;-fun boatswain_N : N;-fun bob_N : N;-fun bob_PN : PN;-fun bob_V : V;-fun bob_V2 : V2;-fun bobbin_N : N;-fun bobby_N : N;-fun bobby_PN : PN;-fun bobby_soxer_N : N;-fun bobolink_N : N;-fun bobsled_N : N;-fun bobsleigh_N : N;-fun bobtail_N : N;-fun boche_A : A;-fun bochum_PN : PN;-fun bode_V : V;-fun bode_V2 : V2;-fun bodice_N : N;-fun bodied_A : A;-fun bodily_A : A;-fun bodily_Adv : Adv;-fun boding_N : N;-fun bodkin_N : N;-fun bodmin_PN : PN;-fun body_N : N;-fun body_servant_N : N;-fun body_snatcher_N : N;-fun bodyguard_N : N;-fun bodywork_N : N;-fun boer_A : A;-fun boer_N : N;-fun boffin_N : N;-fun bog_N : N;-fun bog_V : V;-fun bog_V2 : V2;-fun bogey_N : N;-fun bogeyman_N : N;-fun boggle_V : V;-fun boggy_A : A;-fun bogie_N : N;-fun bognor_PN : PN;-fun bognor_regis_PN : PN;-fun bogota_PN : PN;-fun bogus_A : A;-fun bogy_N : N;-fun bohemian_A : A;-fun bohemian_N : N;-fun boil_N : N;-fun boil_V : V;-fun boil_V2 : V2;-fun boiler_N : N;-fun boilersuit_N : N;-fun boiling_point_N : N;-fun boisterous_A : A;-fun boisterously_Adv : Adv;-fun boisterousness_N : N;-fun bold_A : A;-fun boldly_Adv : Adv;-fun boldness_N : N;-fun boldon_PN : PN;-fun bole_N : N;-fun bolero_N : N;-fun bolivia_PN : PN;-fun bolivian_A : A;-fun bolivian_N : N;-fun boll_N : N;-fun bollard_N : N;-fun bollington_PN : PN;-fun bollock_N : N;-fun bologna_PN : PN;-fun boloney_N : N;-fun bolshevik_N : N;-fun bolshy_A : A;-fun bolsover_PN : PN;-fun bolster_N : N;-fun bolster_V2 : V2;-fun bolt_Adv : Adv;-fun bolt_N : N;-fun bolt_V : V;-fun bolt_V2 : V2;-fun bolt_hole_N : N;-fun bolton_PN : PN;-fun bolton_le_sands_PN : PN;-fun bolzano_PN : PN;-fun bomb_N : N;-fun bomb_V : V;-fun bomb_V2 : V2;-fun bomb_proof_A : A;-fun bomb_sight_N : N;-fun bomb_site_N : N;-fun bombard_V2 : V2;-fun bombardier_N : N;-fun bombardment_N : N;-fun bombast_N : N;-fun bombastic_A : A;-fun bombastically_Adv : Adv;-fun bombay_PN : PN;-fun bomber_N : N;-fun bombshell_N : N;-fun bon_mot_N : N;-fun bona_fide_A : A;-fun bona_fide_Adv : Adv;-fun bonanza_N : N;-fun bonbon_N : N;-fun bond_N : N;-fun bond_V2 : V2;-fun bond_holder_N : N;-fun bondage_N : N;-fun bone_N : N;-fun bone_V2 : V2;-fun bone_dry_A : A;-fun bone_head_N : N;-fun bone_idle_A : A;-fun bone_lazy_A : A;-fun bone_setter_N : N;-fun boneless_A : A;-fun bonemeal_N : N;-fun boner_N : N;-fun boneshaker_N : N;-fun bonfire_N : N;-fun bongo_N : N;-fun bonhomie_N : N;-fun bonito_N : N;-fun bonkers_A : A;-fun bonn_PN : PN;-fun bonnet_N : N;-fun bonnily_Adv : Adv;-fun bonny_A : A;-fun bonnybridge_PN : PN;-fun bonnyrigg_PN : PN;-fun bonus_N : N;-fun bony_A : A;-fun boo_N : N;-fun boo_V : V;-fun boo_V2 : V2;-fun boob_N : N;-fun boob_V : V;-fun booby_N : N;-fun booby_trap_N : N;-fun boogie_N : N;-fun boogie_woogie_N : N;-fun book_N : N;-fun book_V2 : V2;-fun book_end_N : N;-fun book_keeper_N : N;-fun bookable_A : A;-fun bookcase_N : N;-fun bookclub_N : N;-fun bookie_N : N;-fun booking_N : N;-fun bookish_A : A;-fun bookishness_N : N;-fun bookkeeper_N : N;-fun bookkeeping_N : N;-fun booklet_N : N;-fun bookmaker_N : N;-fun bookmark_N : N;-fun bookmarker_N : N;-fun bookmobile_N : N;-fun bookseller_N : N;-fun bookshop_N : N;-fun bookstall_N : N;-fun bookworm_N : N;-fun boom_N : N;-fun boom_V : V;-fun boom_V2 : V2;-fun boomerang_N : N;-fun boon_A : A;-fun boon_N : N;-fun boor_N : N;-fun boorish_A : A;-fun boorishly_Adv : Adv;-fun boorishness_N : N;-fun boost_N : N;-fun boost_V2 : V2;-fun booster_N : N;-fun boot_N : N;-fun boot_V2 : V2;-fun booted_A : A;-fun bootee_N : N;-fun booth_N : N;-fun bootlace_N : N;-fun bootle_PN : PN;-fun bootleg_V2 : V2;-fun bootlegger_N : N;-fun bootless_A : A;-fun booty_N : N;-fun booze_N : N;-fun booze_V : V;-fun booze_up_N : N;-fun boozer_N : N;-fun boozy_A : A;-fun bopeep_N : N;-fun boracic_A : A;-fun borage_N : N;-fun borax_N : N;-fun bordeaux_N : N;-fun bordeaux_PN : PN;-fun border_N : N;-fun border_V : V;-fun border_V2 : V2;-fun borderer_N : N;-fun borderland_N : N;-fun borderline_N : N;-fun borders_PN : PN;-fun bordon_PN : PN;-fun bore_N : N;-fun bore_V : V;-fun bore_V2 : V2;-fun bore_hole_N : N;-fun boredom_N : N;-fun borer_N : N;-fun boric_A : A;-fun boring_A : A;-fun boris_PN : PN;-fun boron_N : N;-fun borough_N : N;-fun borrow_V2 : V2;-fun borrower_N : N;-fun borsch_N : N;-fun borstal_N : N;-fun bortsch_N : N;-fun borzoi_N : N;-fun bosh_N : N;-fun bosky_A : A;-fun bosom_N : N;-fun boss_N : N;-fun boss_V2 : V2;-fun boss_eyed_A : A;-fun bossy_A : A;-fun boston_PN : PN;-fun botanical_A : A;-fun botanist_N : N;-fun botanize_V : V;-fun botany_N : N;-fun botch_N : N;-fun botch_V2 : V2;-fun botcher_N : N;-fun both_A : A;-fun both_Adv : Adv;-fun bother_N : N;-fun bother_V : V;-fun bother_V2 : V2;-fun bothersome_A : A;-fun botswana_PN : PN;-fun bottle_N : N;-fun bottle_V2 : V2;-fun bottle_fed_A : A;-fun bottle_green_A : A;-fun bottleneck_N : N;-fun bottom_N : N;-fun bottom_V : V;-fun bottomless_A : A;-fun bottrop_PN : PN;-fun botulism_N : N;-fun boudoir_N : N;-fun bougainvillea_N : N;-fun bough_N : N;-fun bouillon_N : N;-fun boulder_N : N;-fun boulevard_N : N;-fun bounce_N : N;-fun bounce_V : V;-fun bounce_V2 : V2;-fun bouncing_A : A;-fun bouncy_A : A;-fun bound_A : A;-fun bound_N : N;-fun bound_V : V;-fun bound_V2 : V2;-fun boundary_N : N;-fun bounden_A : A;-fun bounder_N : N;-fun boundless_A : A;-fun boundlessly_Adv : Adv;-fun bounteous_A : A;-fun bounteously_Adv : Adv;-fun bountiful_A : A;-fun bountifully_Adv : Adv;-fun bounty_N : N;-fun bouquet_N : N;-fun bourbon_N : N;-fun bourgeois_A : A;-fun bourgeois_N : N;-fun bourgeoisie_N : N;-fun bourn_N : N;-fun bourne_N : N;-fun bourne_PN : PN;-fun bournemouth_PN : PN;-fun bourse_N : N;-fun bout_N : N;-fun boutique_N : N;-fun bovine_A : A;-fun bovril_N : N;-fun bow_N : N;-fun bow_V : V;-fun bow_V2 : V2;-fun bow_wow_N : N;-fun bowburn_PN : PN;-fun bowdlerize_V2 : V2;-fun bowel_N : N;-fun bower_N : N;-fun bowie_knife_N : N;-fun bowing_N : N;-fun bowl_N : N;-fun bowl_V : V;-fun bowl_V2 : V2;-fun bowler_N : N;-fun bowline_N : N;-fun bowling_green_N : N;-fun bowls_N : N;-fun bowman_N : N;-fun bowsprit_N : N;-fun box_N : N;-fun box_V : V;-fun box_V2 : V2;-fun box_kite_N : N;-fun box_number_N : N;-fun box_office_N : N;-fun boxer_N : N;-fun boxful_N : N;-fun boxing_N : N;-fun boxing_day_N : N;-fun boxing_day_PN : PN;-fun boxing_glove_N : N;-fun boxing_match_N : N;-fun boxwood_N : N;-fun boy_N : N;-fun boycott_N : N;-fun boycott_V2 : V2;-fun boyfriend_N : N;-fun boyhood_N : N;-fun boyish_A : A;-fun boyishly_Adv : Adv;-fun bra_N : N;-fun brace_N : N;-fun brace_V : V;-fun brace_V2 : V2;-fun bracelet_N : N;-fun bracken_N : N;-fun bracket_N : N;-fun bracket_V2 : V2;-fun brackish_A : A;-fun bracknell_PN : PN;-fun bract_N : N;-fun brad_N : N;-fun bradawl_N : N;-fun bradford_PN : PN;-fun bradford_on_avon_PN : PN;-fun brae_N : N;-fun brag_V : V;-fun braggart_N : N;-fun bragging_N : N;-fun brahmin_N : N;-fun braid_N : N;-fun braid_V2 : V2;-fun braille_N : N;-fun brain_N : N;-fun brain_V2 : V2;-fun brain_fag_N : N;-fun brain_teaser_N : N;-fun brainchild_N : N;-fun brainless_A : A;-fun brainstorm_N : N;-fun braintree_PN : PN;-fun brainwash_V2 : V2;-fun brainwashed_A : A;-fun brainwashing_N : N;-fun brainwave_N : N;-fun brainy_A : A;-fun braise_V2 : V2;-fun brake_N : N;-fun brake_V : V;-fun brake_V2 : V2;-fun brakeman_N : N;-fun bramble_N : N;-fun bran_N : N;-fun bran_new_A : A;-fun branch_N : N;-fun branch_V : V;-fun branchy_A : A;-fun brand_N : N;-fun brand_V2 : V2;-fun brand_new_A : A;-fun branderburgh_PN : PN;-fun branding_iron_N : N;-fun brandish_V2 : V2;-fun brandy_N : N;-fun brandy_ball_N : N;-fun brandy_snap_N : N;-fun brash_A : A;-fun brasilia_PN : PN;-fun brass_N : N;-fun brassard_N : N;-fun brasserie_N : N;-fun brassiere_1_N : N;-fun brassiere_2_N : N;-fun brassy_A : A;-fun brat_N : N;-fun bratislava_PN : PN;-fun braunschweig_PN : PN;-fun braunton_PN : PN;-fun bravado_N : N;-fun brave_A : A;-fun brave_N : N;-fun brave_V2 : V2;-fun bravely_Adv : Adv;-fun bravery_N : N;-fun bravo_N : N;-fun brawl_N : N;-fun brawl_V : V;-fun brawler_N : N;-fun brawn_N : N;-fun brawny_A : A;-fun bray_N : N;-fun bray_V2 : V2;-fun braze_V2 : V2;-fun brazen_A : A;-fun brazen_V2 : V2;-fun brazen_faced_A : A;-fun brazier_N : N;-fun brazil_PN : PN;-fun brazilian_A : A;-fun brazilian_N : N;-fun breach_N : N;-fun breach_V2 : V2;-fun bread_N : N;-fun breadcrumb_N : N;-fun breadfruit_N : N;-fun breadline_N : N;-fun breadth_N : N;-fun breadthways_Adv : Adv;-fun breadthwise_Adv : Adv;-fun breadwinner_N : N;-fun break_N : N;-fun break_V : V;-fun break_V2 : V2;-fun break_in_N : N;-fun break_up_N : N;-fun breakable_A : A;-fun breakage_N : N;-fun breakaway_N : N;-fun breakaways_N : N;-fun breakdown_N : N;-fun breaker_N : N;-fun breakfast_N : N;-fun breakfast_V : V;-fun breakneck_A : A;-fun breakthrough_N : N;-fun breakwater_N : N;-fun bream_N : N;-fun breast_N : N;-fun breast_V2 : V2;-fun breast_deep_Adv : Adv;-fun breast_fed_A : A;-fun breast_high_Adv : Adv;-fun breast_plate_N : N;-fun breastfeed_V : V;-fun breastfeed_V2 : V2;-fun breaston_PN : PN;-fun breaststroke_N : N;-fun breastwork_N : N;-fun breath_N : N;-fun breathalyser_N : N;-fun breathe_V : V;-fun breathe_V2 : V2;-fun breather_N : N;-fun breathing_N : N;-fun breathing_space_N : N;-fun breathless_A : A;-fun breathlessly_Adv : Adv;-fun breathtaking_A : A;-fun brecknock_PN : PN;-fun breda_PN : PN;-fun breech_N : N;-fun breech_block_N : N;-fun breeches_buoy_N : N;-fun breed_N : N;-fun breed_V : V;-fun breed_V2 : V2;-fun breeder_N : N;-fun breeding_N : N;-fun breedsall_PN : PN;-fun breeze_N : N;-fun breeze_V : V;-fun breezily_Adv : Adv;-fun breeziness_N : N;-fun breezy_A : A;-fun bremen_PN : PN;-fun bremerhaven_PN : PN;-fun bren_N : N;-fun bren_gun_N : N;-fun brenda_PN : PN;-fun brent_PN : PN;-fun brentwood_PN : PN;-fun brescia_PN : PN;-fun brest_PN : PN;-fun breve_N : N;-fun brevet_N : N;-fun breviary_N : N;-fun brevity_N : N;-fun brew_N : N;-fun brew_V : V;-fun brew_V2 : V2;-fun brewer_N : N;-fun brewery_N : N;-fun brian_PN : PN;-fun briar_N : N;-fun bribable_A : A;-fun bribe_N : N;-fun bribe_V2 : V2;-fun bribery_N : N;-fun bric_a_brac_N : N;-fun brick_N : N;-fun brick_V2 : V2;-fun brick_field_N : N;-fun brickbat_N : N;-fun bricket_wood_PN : PN;-fun brickkiln_N : N;-fun bricklayer_N : N;-fun brickwork_N : N;-fun bridal_A : A;-fun bridal_N : N;-fun bride_N : N;-fun bridecake_N : N;-fun bridegroom_N : N;-fun bridesmaid_N : N;-fun bridge_N : N;-fun bridge_V2 : V2;-fun bridgehead_N : N;-fun bridgend_PN : PN;-fun bridget_PN : PN;-fun bridgnorth_PN : PN;-fun bridgwater_PN : PN;-fun bridle_N : N;-fun bridle_V : V;-fun bridle_V2 : V2;-fun bridle_path_N : N;-fun bridle_road_N : N;-fun bridlington_PN : PN;-fun bridport_PN : PN;-fun brief_A : A;-fun brief_N : N;-fun brief_V2 : V2;-fun briefcase_N : N;-fun briefing_N : N;-fun briefly_Adv : Adv;-fun brier_N : N;-fun brig_N : N;-fun brig_PN : PN;-fun brigade_N : N;-fun brigadier_N : N;-fun brigand_N : N;-fun brigantine_N : N;-fun brighouse_PN : PN;-fun bright_A : A;-fun bright_Adv : Adv;-fun brighten_V : V;-fun brighten_V2 : V2;-fun brightlingsea_PN : PN;-fun brightly_Adv : Adv;-fun brightness_N : N;-fun brighton_PN : PN;-fun brill_N : N;-fun brilliance_N : N;-fun brilliancy_N : N;-fun brilliant_A : A;-fun brilliantine_N : N;-fun brilliantly_Adv : Adv;-fun brim_N : N;-fun brim_V : V;-fun brimful_A : A;-fun brimfull_A : A;-fun brimstone_N : N;-fun brindled_A : A;-fun brine_N : N;-fun bring_V2 : V2;-fun brink_N : N;-fun brinkmanship_N : N;-fun briny_A : A;-fun brioche_N : N;-fun briquet_N : N;-fun briquette_N : N;-fun brisbane_PN : PN;-fun brisk_A : A;-fun brisket_N : N;-fun briskly_Adv : Adv;-fun bristle_N : N;-fun bristle_V : V;-fun bristly_A : A;-fun bristol_PN : PN;-fun brit_N : N;-fun britain_PN : PN;-fun britannic_A : A;-fun british_A : A;-fun britisher_N : N;-fun briton_A : A;-fun briton_N : N;-fun brittle_A : A;-fun brixham_PN : PN;-fun brno_PN : PN;-fun broach_V : V;-fun broach_V2 : V2;-fun broad_A : A;-fun broad_N : N;-fun broad_minded_A : A;-fun broad_mindedness_N : N;-fun broadcast_Adv : Adv;-fun broadcast_N : N;-fun broadcast_V : V;-fun broadcast_V2 : V2;-fun broadcasting_A : A;-fun broadcasting_N : N;-fun broadcloth_N : N;-fun broaden_V : V;-fun broaden_V2 : V2;-fun broadly_Adv : Adv;-fun broadness_N : N;-fun broadsheet_N : N;-fun broadside_N : N;-fun broadways_Adv : Adv;-fun broadwise_Adv : Adv;-fun brocade_N : N;-fun brocade_V2 : V2;-fun broccoli_N : N;-fun brochure_N : N;-fun brogue_N : N;-fun broil_V : V;-fun broil_V2 : V2;-fun broiler_N : N;-fun broke_A : A;-fun broken_hearted_A : A;-fun broker_N : N;-fun brokerage_N : N;-fun brolly_N : N;-fun bromide_N : N;-fun bromine_N : N;-fun bromley_PN : PN;-fun bromsgrove_PN : PN;-fun bronchial_A : A;-fun bronchitic_A : A;-fun bronchitis_N : N;-fun bronchus_N : N;-fun bronco_N : N;-fun bronze_N : N;-fun bronze_V : V;-fun bronze_V2 : V2;-fun brooch_N : N;-fun brood_N : N;-fun brood_V : V;-fun brood_hen_N : N;-fun brood_mare_N : N;-fun broody_A : A;-fun brook_N : N;-fun brook_V2 : V2;-fun broom_N : N;-fun broomstick_N : N;-fun bros_PN : PN;-fun broth_N : N;-fun brothel_N : N;-fun brother_N : N;-fun brother_in_law_N : N;-fun brotherhood_N : N;-fun brotherly_A : A;-fun brougham_N : N;-fun broughton_PN : PN;-fun brouhaha_N : N;-fun brow_N : N;-fun browbeat_V2 : V2;-fun brown_A : A;-fun brown_V : V;-fun brown_V2 : V2;-fun brownie_N : N;-fun brownish_A : A;-fun brownstone_N : N;-fun browse_N : N;-fun browse_V : V;-fun broxburn_PN : PN;-fun bruce_PN : PN;-fun bruges_PN : PN;-fun bruin_N : N;-fun bruise_N : N;-fun bruise_V : V;-fun bruise_V2 : V2;-fun bruiser_N : N;-fun bruit_V2 : V2;-fun brunch_N : N;-fun brunei_PN : PN;-fun bruneian_A : A;-fun bruneian_N : N;-fun brunette_N : N;-fun brunswick_PN : PN;-fun brunt_N : N;-fun brush_N : N;-fun brush_V : V;-fun brush_V2 : V2;-fun brush_off_N : N;-fun brush_up_N : N;-fun brushwood_N : N;-fun brushwork_N : N;-fun brusque_A : A;-fun brusquely_Adv : Adv;-fun brusqueness_N : N;-fun brussels_PN : PN;-fun brutal_A : A;-fun brutality_N : N;-fun brutalize_V2 : V2;-fun brutally_Adv : Adv;-fun brute_N : N;-fun brutish_A : A;-fun brutishly_Adv : Adv;-fun bryan_PN : PN;-fun bsc_N : N;-fun bst_PN : PN;-fun bt_PN : PN;-fun bubble_N : N;-fun bubble_V : V;-fun bubbly_A : A;-fun bubbly_N : N;-fun bubonic_A : A;-fun bucarest_PN : PN;-fun buccaneer_N : N;-fun buck_N : N;-fun buck_V : V;-fun buck_V2 : V2;-fun bucket_N : N;-fun bucket_V : V;-fun bucketful_N : N;-fun buckhaven_PN : PN;-fun buckie_PN : PN;-fun buckingham_PN : PN;-fun buckinghamshire_PN : PN;-fun buckle_N : N;-fun buckle_V : V;-fun buckle_V2 : V2;-fun buckler_N : N;-fun buckley_PN : PN;-fun buckram_N : N;-fun bucksburn_PN : PN;-fun buckshot_N : N;-fun buckskin_N : N;-fun bucktooth_N : N;-fun buckwheat_N : N;-fun bucolic_A : A;-fun bucolics_N : N;-fun bud_N : N;-fun bud_V : V;-fun budapest_PN : PN;-fun buddhism_N : N;-fun buddhist_N : N;-fun budding_A : A;-fun buddy_N : N;-fun budge_V : V;-fun budge_V2 : V2;-fun budgerigar_N : N;-fun budget_N : N;-fun budget_V : V;-fun budgetary_A : A;-fun budgie_N : N;-fun buenos_aires_PN : PN;-fun buff_N : N;-fun buff_V2 : V2;-fun buffalo_N : N;-fun buffalo_PN : PN;-fun buffer_N : N;-fun buffet_N : N;-fun buffet_V : V;-fun buffet_V2 : V2;-fun buffoon_N : N;-fun buffoonery_N : N;-fun bug_N : N;-fun bug_V2 : V2;-fun bug_hunter_N : N;-fun bugaboo_N : N;-fun bugbear_N : N;-fun bugger_N : N;-fun bugger_V : V;-fun bugger_V2 : V2;-fun bugger_all_N : N;-fun buggery_N : N;-fun buggy_N : N;-fun bugle_N : N;-fun bugler_N : N;-fun buhl_N : N;-fun build_N : N;-fun build_V : V;-fun build_V2 : V2;-fun build_up_N : N;-fun builder_N : N;-fun building_N : N;-fun building_society_N : N;-fun built_in_A : A;-fun built_up_A : A;-fun bulb_N : N;-fun bulbous_A : A;-fun bulbul_N : N;-fun bulgaria_PN : PN;-fun bulgarian_A : A;-fun bulgarian_N : N;-fun bulge_N : N;-fun bulge_V : V;-fun bulge_V2 : V2;-fun bulk_N : N;-fun bulk_V : V;-fun bulkhead_N : N;-fun bulkington_PN : PN;-fun bulky_A : A;-fun bull's_eye_N : N;-fun bull_N : N;-fun bull_headed_A : A;-fun bull_neck_N : N;-fun bull_terrier_N : N;-fun bulldog_N : N;-fun bulldoze_V2 : V2;-fun bulldozer_N : N;-fun bullet_N : N;-fun bullet_headed_A : A;-fun bulletin_N : N;-fun bulletproof_A : A;-fun bullfight_N : N;-fun bullfighter_N : N;-fun bullfinch_N : N;-fun bullfrog_N : N;-fun bullion_N : N;-fun bullock_N : N;-fun bullring_N : N;-fun bullshit_N : N;-fun bullshit_V : V;-fun bully_A : A;-fun bully_N : N;-fun bully_V : V;-fun bully_V2 : V2;-fun bulrush_N : N;-fun bulwark_N : N;-fun bum_A : A;-fun bum_N : N;-fun bum_V : V;-fun bum_V2 : V2;-fun bumblebee_N : N;-fun bumboat_N : N;-fun bump_Adv : Adv;-fun bump_N : N;-fun bump_V : V;-fun bump_V2 : V2;-fun bumper_N : N;-fun bumpkin_N : N;-fun bumptious_A : A;-fun bumptiously_Adv : Adv;-fun bumptiousness_N : N;-fun bumpy_A : A;-fun bun_N : N;-fun buna_N : N;-fun bunch_N : N;-fun bunch_V : V;-fun bunch_V2 : V2;-fun bundle_N : N;-fun bundle_V : V;-fun bundle_V2 : V2;-fun bung_N : N;-fun bung_V2 : V2;-fun bung_hole_N : N;-fun bungaloid_A : A;-fun bungalow_N : N;-fun bungle_N : N;-fun bungle_V : V;-fun bungle_V2 : V2;-fun bungler_N : N;-fun bunion_N : N;-fun bunk_N : N;-fun bunk_V : V;-fun bunker_N : N;-fun bunker_V : V;-fun bunker_V2 : V2;-fun bunkum_N : N;-fun bunny_N : N;-fun bunsen_N : N;-fun bunting_N : N;-fun buoy_N : N;-fun buoy_V : V;-fun buoyancy_N : N;-fun buoyant_A : A;-fun buoyantly_Adv : Adv;-fun bur_N : N;-fun burberry_N : N;-fun burble_V : V;-fun burden_N : N;-fun burden_V2 : V2;-fun burdensome_A : A;-fun burdock_N : N;-fun bureau_N : N;-fun bureaucracy_N : N;-fun bureaucrat_N : N;-fun bureaucratic_A : A;-fun bureaucratically_Adv : Adv;-fun burette_N : N;-fun burg_N : N;-fun burgeon_V : V;-fun burgess_N : N;-fun burgess_PN : PN;-fun burgh_N : N;-fun burgher_N : N;-fun burglar_N : N;-fun burglar_alarm_N : N;-fun burglar_proof_A : A;-fun burglarious_A : A;-fun burglary_N : N;-fun burgle_V : V;-fun burgle_V2 : V2;-fun burgomaster_N : N;-fun burgos_PN : PN;-fun burgundy_N : N;-fun burial_N : N;-fun burial_ground_N : N;-fun burke_V2 : V2;-fun burlap_N : N;-fun burlesque_N : N;-fun burlesque_V2 : V2;-fun burley_PN : PN;-fun burly_A : A;-fun burma_PN : PN;-fun burmese_A : A;-fun burmese_N : N;-fun burn_N : N;-fun burn_V : V;-fun burn_V2 : V2;-fun burn_up_N : N;-fun burner_N : N;-fun burnham_on_sea_PN : PN;-fun burning_A : A;-fun burnish_V : V;-fun burnish_V2 : V2;-fun burnley_PN : PN;-fun burnouse_N : N;-fun burntisland_PN : PN;-fun burntwood_PN : PN;-fun burp_N : N;-fun burp_V : V;-fun burp_V2 : V2;-fun burr_N : N;-fun burr_drill_N : N;-fun burrow_N : N;-fun burrow_V : V;-fun burrow_V2 : V2;-fun burry_port_PN : PN;-fun bursar_N : N;-fun bursary_N : N;-fun burscough_PN : PN;-fun burst_N : N;-fun burst_V : V;-fun burst_V2 : V2;-fun burthen_N : N;-fun burthen_V2 : V2;-fun burton_N : N;-fun burton_upon_trent_PN : PN;-fun burundi_PN : PN;-fun burundian_A : A;-fun burundian_N : N;-fun bury_PN : PN;-fun bury_V2 : V2;-fun bury_st__edmunds_PN : PN;-fun burying_ground_N : N;-fun bus_N : N;-fun bus_V : V;-fun bus_V2 : V2;-fun busby_N : N;-fun bush_N : N;-fun bushel_N : N;-fun bushman_N : N;-fun bushy_A : A;-fun busily_Adv : Adv;-fun business_N : N;-fun businesslike_A : A;-fun businessman_N : N;-fun busker_N : N;-fun busman_N : N;-fun bust_N : N;-fun bust_V : V;-fun bust_V2 : V2;-fun bust_up_N : N;-fun bustard_N : N;-fun buster_N : N;-fun bustle_N : N;-fun bustle_V : V;-fun bustle_V2 : V2;-fun busy_A : A;-fun busy_V2 : V2;-fun busybody_N : N;-fun but_Adv : Adv;-fun butane_N : N;-fun butch_A : A;-fun butcher_N : N;-fun butcher_V2 : V2;-fun butchery_N : N;-fun butler_N : N;-fun butt_N : N;-fun butt_V : V;-fun butt_V2 : V2;-fun butter_N : N;-fun butter_V2 : V2;-fun butterbean_N : N;-fun buttercup_N : N;-fun butterfingers_N : N;-fun butterfly_N : N;-fun buttermilk_N : N;-fun butterscotch_N : N;-fun buttery_N : N;-fun buttock_N : N;-fun button_N : N;-fun button_V : V;-fun button_V2 : V2;-fun buttoned_up_A : A;-fun buttonhole_N : N;-fun buttonhole_V2 : V2;-fun buttonhook_N : N;-fun buttonwood_N : N;-fun buttress_N : N;-fun buttress_V2 : V2;-fun buxom_A : A;-fun buxton_PN : PN;-fun buy_N : N;-fun buy_V : V;-fun buy_V2 : V2;-fun buyer_N : N;-fun buzz_N : N;-fun buzz_V : V;-fun buzz_V2 : V2;-fun buzzard_N : N;-fun buzzer_N : N;-fun bvm_N : N;-fun by_Adv : Adv;-fun by_election_N : N;-fun bye_N : N;-fun bye_bye_N : N;-fun bye_law_N : N;-fun bygone_A : A;-fun bylaw_N : N;-fun bypass_N : N;-fun bypass_V2 : V2;-fun bypath_N : N;-fun byplay_N : N;-fun byproduct_N : N;-fun byroad_N : N;-fun bystander_N : N;-fun byway_N : N;-fun byword_N : N;-fun bete_noire_N : N;-fun c_in_c_PN : PN;-fun c_of_e_N : N;-fun ca'canny_N : N;-fun cab_N : N;-fun cab_rank_N : N;-fun cabal_N : N;-fun cabaret_N : N;-fun cabbage_N : N;-fun cabby_N : N;-fun caber_N : N;-fun cabin_N : N;-fun cabinet_N : N;-fun cabinet_maker_N : N;-fun cable's_length_N : N;-fun cable_N : N;-fun cable_V : V;-fun cable_V2 : V2;-fun cable_car_N : N;-fun cable_length_N : N;-fun cable_railway_N : N;-fun cablegram_N : N;-fun cabman_N : N;-fun caboodle_N : N;-fun caboose_N : N;-fun cabstand_N : N;-fun cacao_N : N;-fun cacao_bean_N : N;-fun cacao_tree_N : N;-fun cache_N : N;-fun cache_V2 : V2;-fun cachet_N : N;-fun cachou_N : N;-fun cackle_N : N;-fun cackle_V : V;-fun cackler_N : N;-fun cacophonous_A : A;-fun cacophony_N : N;-fun cactus_N : N;-fun cad_N : N;-fun cadaver_N : N;-fun cadaverous_A : A;-fun caddie_N : N;-fun caddish_A : A;-fun caddy_N : N;-fun cadence_N : N;-fun cadenza_N : N;-fun cadet_N : N;-fun cadge_V : V;-fun cadge_V2 : V2;-fun cadger_N : N;-fun cadiz_PN : PN;-fun cadmium_N : N;-fun cadre_N : N;-fun caen_PN : PN;-fun caerleon_PN : PN;-fun caernarfon_PN : PN;-fun caerphilly_PN : PN;-fun caesar_N : N;-fun caesarian_A : A;-fun caesura_N : N;-fun cafe_au_lait_N : N;-fun cafeteria_N : N;-fun caff_N : N;-fun caffeine_N : N;-fun caftan_N : N;-fun cafe_N : N;-fun cage_N : N;-fun cage_V2 : V2;-fun cagey_A : A;-fun cagily_Adv : Adv;-fun cagliari_PN : PN;-fun cagoule_N : N;-fun caiman_N : N;-fun cairn_N : N;-fun cairo_PN : PN;-fun caisson_N : N;-fun caitiff_N : N;-fun cajole_V2 : V2;-fun cajolery_N : N;-fun cake_N : N;-fun cake_V : V;-fun cake_V2 : V2;-fun calabash_N : N;-fun calamitous_A : A;-fun calamity_N : N;-fun calcify_V : V;-fun calcify_V2 : V2;-fun calcination_N : N;-fun calcine_V : V;-fun calcine_V2 : V2;-fun calcium_N : N;-fun calculable_A : A;-fun calculate_V : V;-fun calculate_V2 : V2;-fun calculating_A : A;-fun calculation_N : N;-fun calculator_N : N;-fun calculus_N : N;-fun calcutta_PN : PN;-fun caldicot_PN : PN;-fun caldron_N : N;-fun calendar_N : N;-fun calender_N : N;-fun calender_V2 : V2;-fun calf_N : N;-fun calf_love_N : N;-fun cali_PN : PN;-fun calibrate_V2 : V2;-fun calibration_N : N;-fun calibre_N : N;-fun calico_N : N;-fun calif_N : N;-fun california_PN : PN;-fun californian_A : A;-fun californian_N : N;-fun caliph_N : N;-fun caliphate_N : N;-fun calisthenics_N : N;-fun calk_N : N;-fun calk_V2 : V2;-fun call_N : N;-fun call_V : V;-fun call_V2 : V2;-fun call_box_N : N;-fun call_girl_N : N;-fun call_over_N : N;-fun call_up_N : N;-fun caller_N : N;-fun calligraphy_N : N;-fun calling_N : N;-fun calliope_N : N;-fun callisthenics_N : N;-fun callosity_N : N;-fun callous_A : A;-fun callousness_N : N;-fun callow_A : A;-fun callowness_N : N;-fun callus_N : N;-fun calm_A : A;-fun calm_N : N;-fun calm_V : V;-fun calm_V2 : V2;-fun calmly_Adv : Adv;-fun calmness_N : N;-fun calne_PN : PN;-fun calomel_N : N;-fun calor_PN : PN;-fun calorie_N : N;-fun calorific_A : A;-fun calumniate_V2 : V2;-fun calumny_N : N;-fun calvary_N : N;-fun calve_V : V;-fun calverton_PN : PN;-fun calvinism_N : N;-fun calvinist_N : N;-fun calypso_N : N;-fun calyx_N : N;-fun cam_N : N;-fun camaraderie_N : N;-fun camber_N : N;-fun camber_V : V;-fun camber_V2 : V2;-fun cambodia_PN : PN;-fun cambodian_A : A;-fun cambodian_N : N;-fun cambourne_PN : PN;-fun cambric_N : N;-fun cambridge_PN : PN;-fun cambridgeshire_PN : PN;-fun cambuslang_PN : PN;-fun camden_PN : PN;-fun camel_N : N;-fun camel_hair_N : N;-fun camellia_N : N;-fun camembert_N : N;-fun cameo_N : N;-fun camera_N : N;-fun cameraman_N : N;-fun cameroon_PN : PN;-fun cameroonian_A : A;-fun cameroonian_N : N;-fun camion_N : N;-fun camomile_N : N;-fun camouflage_N : N;-fun camouflage_V2 : V2;-fun camp_A : A;-fun camp_N : N;-fun camp_V : V;-fun camp_V2 : V2;-fun camp_bed_N : N;-fun camp_chair_N : N;-fun camp_fire_N : N;-fun camp_follower_N : N;-fun camp_stool_N : N;-fun campaign_N : N;-fun campaign_V : V;-fun campaigner_N : N;-fun campanile_N : N;-fun campanula_N : N;-fun campbeltown_PN : PN;-fun camper_N : N;-fun camphor_N : N;-fun camphorated_A : A;-fun camping_N : N;-fun campion_N : N;-fun campus_N : N;-fun camshaft_N : N;-fun can_N : N;-fun can_V2 : V2;-fun canada_PN : PN;-fun canadian_A : A;-fun canadian_N : N;-fun canal_N : N;-fun canalization_N : N;-fun canalize_V2 : V2;-fun canape_N : N;-fun canard_N : N;-fun canary_N : N;-fun canary_bird_N : N;-fun canary_wine_N : N;-fun canasta_N : N;-fun canberra_PN : PN;-fun cancan_N : N;-fun cancel_V : V;-fun cancel_V2 : V2;-fun cancellation_N : N;-fun cancer_N : N;-fun cancer_PN : PN;-fun cancerous_A : A;-fun candelabrum_N : N;-fun candid_A : A;-fun candidate_N : N;-fun candidature_N : N;-fun candidly_Adv : Adv;-fun candied_A : A;-fun candle_N : N;-fun candle_power_N : N;-fun candlelight_N : N;-fun candlestick_N : N;-fun candlewick_N : N;-fun candour_N : N;-fun candy_N : N;-fun candy_V : V;-fun candy_V2 : V2;-fun candy_floss_N : N;-fun candytuft_N : N;-fun cane_N : N;-fun cane_V2 : V2;-fun canine_A : A;-fun canister_N : N;-fun canker_N : N;-fun canker_V2 : V2;-fun cankerous_A : A;-fun canna_N : N;-fun cannabis_N : N;-fun canned_A : A;-fun cannery_N : N;-fun cannes_PN : PN;-fun cannibal_N : N;-fun cannibalism_N : N;-fun cannibalistic_A : A;-fun cannibalize_V2 : V2;-fun cannily_Adv : Adv;-fun cannock_PN : PN;-fun cannon_N : N;-fun cannon_fodder_N : N;-fun cannonade_N : N;-fun canny_A : A;-fun canoe_N : N;-fun canoe_V2 : V2;-fun canoeist_N : N;-fun canon_1_N : N;-fun canonical_A : A;-fun canonization_N : N;-fun canonize_V2 : V2;-fun canopied_A : A;-fun canopy_N : N;-fun cant_N : N;-fun cant_V : V;-fun cant_V2 : V2;-fun cantab_PN : PN;-fun cantaloup_N : N;-fun cantaloupe_N : N;-fun cantankerous_A : A;-fun cantankerously_Adv : Adv;-fun cantata_N : N;-fun canteen_N : N;-fun canter_N : N;-fun canter_V : V;-fun canter_V2 : V2;-fun canterbury_PN : PN;-fun canticle_N : N;-fun cantilever_N : N;-fun canto_N : N;-fun canton_N : N;-fun canton_PN : PN;-fun cantonment_N : N;-fun cantor_N : N;-fun canuck_N : N;-fun canvas_N : N;-fun canvass_N : N;-fun canvass_V : V;-fun canvass_V2 : V2;-fun canvey_PN : PN;-fun canvey_island_PN : PN;-fun canyon_N : N;-fun cap_N : N;-fun cap_V2 : V2;-fun cap_a_pie_Adv : Adv;-fun capability_N : N;-fun capable_A : A;-fun capably_Adv : Adv;-fun capacious_A : A;-fun capacity_N : N;-fun caparison_N : N;-fun caparison_V2 : V2;-fun cape_N : N;-fun cape_town_PN : PN;-fun caper_N : N;-fun caper_V : V;-fun capillary_N : N;-fun capital_A : A;-fun capital_N : N;-fun capitalism_A : A;-fun capitalism_N : N;-fun capitalist_N : N;-fun capitalistic_A : A;-fun capitalization_N : N;-fun capitalize_V : V;-fun capitalize_V2 : V2;-fun capitation_N : N;-fun capitol_N : N;-fun capitulate_V2 : V2;-fun capitulation_N : N;-fun capon_N : N;-fun caprice_N : N;-fun capricious_A : A;-fun capriciously_Adv : Adv;-fun capriciousness_N : N;-fun capricorn_PN : PN;-fun capsicum_N : N;-fun capsize_V : V;-fun capsize_V2 : V2;-fun capstan_N : N;-fun capsule_N : N;-fun capt_PN : PN;-fun captain_N : N;-fun captain_V2 : V2;-fun caption_N : N;-fun captious_A : A;-fun captiously_Adv : Adv;-fun captivate_V2 : V2;-fun captive_A : A;-fun captive_N : N;-fun captivity_N : N;-fun captor_N : N;-fun capture_N : N;-fun capture_V2 : V2;-fun car_N : N;-fun car_ferry_N : N;-fun caracas_PN : PN;-fun carafe_N : N;-fun caramel_N : N;-fun carapace_N : N;-fun carat_N : N;-fun caravan_N : N;-fun caravanning_N : N;-fun caravansary_N : N;-fun caravanserai_N : N;-fun caraway_N : N;-fun carbide_N : N;-fun carbine_N : N;-fun carbohydrate_N : N;-fun carbolic_A : A;-fun carbon_N : N;-fun carbon_paper_N : N;-fun carbonated_A : A;-fun carbonic_A : A;-fun carboniferous_A : A;-fun carbonization_N : N;-fun carbonize_V2 : V2;-fun carborundum_N : N;-fun carboy_N : N;-fun carbuncle_N : N;-fun carburettor_N : N;-fun carcase_N : N;-fun carcass_N : N;-fun card_N : N;-fun card_V2 : V2;-fun card_sharper_N : N;-fun cardamom_N : N;-fun cardboard_N : N;-fun cardenden_PN : PN;-fun cardiac_A : A;-fun cardiff_PN : PN;-fun cardigan_N : N;-fun cardigan_PN : PN;-fun cardinal_A : A;-fun cardinal_N : N;-fun care_N : N;-fun care_V : V;-fun careen_V : V;-fun careen_V2 : V2;-fun career_N : N;-fun career_V : V;-fun careerist_N : N;-fun carefree_A : A;-fun careful_A : A;-fun carefully_Adv : Adv;-fun carefulness_N : N;-fun careladen_A : A;-fun careless_A : A;-fun carelessly_Adv : Adv;-fun carelessness_N : N;-fun caress_N : N;-fun caress_V2 : V2;-fun caressing_A : A;-fun caressingly_Adv : Adv;-fun caret_N : N;-fun caretaker_N : N;-fun careworn_A : A;-fun cargo_N : N;-fun caribou_N : N;-fun caricature_N : N;-fun caricature_V2 : V2;-fun caricaturist_N : N;-fun caries_N : N;-fun carillon_N : N;-fun carious_A : A;-fun carl_PN : PN;-fun carlisle_PN : PN;-fun carlow_PN : PN;-fun carluke_PN : PN;-fun carmarthen_PN : PN;-fun carmelite_A : A;-fun carmelite_N : N;-fun carmine_A : A;-fun carmine_N : N;-fun carnage_N : N;-fun carnal_A : A;-fun carnally_Adv : Adv;-fun carnation_N : N;-fun carnforth_PN : PN;-fun carnival_N : N;-fun carnivore_N : N;-fun carnivorous_A : A;-fun carnoustie_PN : PN;-fun carol_N : N;-fun carol_PN : PN;-fun carol_V2 : V2;-fun carole_PN : PN;-fun carolina_PN : PN;-fun caroline_PN : PN;-fun caroller_N : N;-fun carolyn_PN : PN;-fun carousal_N : N;-fun carouse_V2 : V2;-fun carousel_N : N;-fun carp_N : N;-fun carp_V2 : V2;-fun carpal_A : A;-fun carpal_N : N;-fun carpenter_N : N;-fun carpentry_N : N;-fun carpet_N : N;-fun carpet_V2 : V2;-fun carpet_beater_N : N;-fun carpet_knight_N : N;-fun carpet_sweeper_N : N;-fun carpetbag_N : N;-fun carpetbagger_N : N;-fun carport_N : N;-fun carriage_N : N;-fun carriageway_N : N;-fun carrie_PN : PN;-fun carrier_N : N;-fun carrier_bag_N : N;-fun carrier_pigeon_N : N;-fun carrion_N : N;-fun carrion_crow_N : N;-fun carron_PN : PN;-fun carrot_N : N;-fun carroty_A : A;-fun carry_N : N;-fun carry_V : V;-fun carry_V2 : V2;-fun carrycot_N : N;-fun carsick_A : A;-fun carsickness_N : N;-fun cart_N : N;-fun cart_V2 : V2;-fun cart_track_N : N;-fun cartage_N : N;-fun cartagena_PN : PN;-fun carte_blanche_N : N;-fun cartel_N : N;-fun carter_N : N;-fun carthorse_N : N;-fun cartilage_N : N;-fun cartilaginous_A : A;-fun cartload_N : N;-fun cartographer_N : N;-fun cartography_N : N;-fun carton_N : N;-fun cartoon_N : N;-fun cartoon_V2 : V2;-fun cartoonist_N : N;-fun cartridge_N : N;-fun cartridge_belt_N : N;-fun cartridge_paper_N : N;-fun cartroad_N : N;-fun cartwheel_N : N;-fun carve_V : V;-fun carve_V2 : V2;-fun carver_N : N;-fun carving_N : N;-fun carving_fork_N : N;-fun carving_knife_N : N;-fun caryatid_N : N;-fun casablanca_PN : PN;-fun cascade_N : N;-fun cascade_V : V;-fun case_N : N;-fun case_V2 : V2;-fun case_hardened_A : A;-fun case_history_N : N;-fun case_law_N : N;-fun casebook_N : N;-fun casein_N : N;-fun casement_N : N;-fun casework_N : N;-fun cash_N : N;-fun cash_V : V;-fun cash_V2 : V2;-fun cashable_A : A;-fun cashew_N : N;-fun cashier_N : N;-fun cashier_V2 : V2;-fun cashmere_N : N;-fun casing_N : N;-fun casino_N : N;-fun cask_N : N;-fun casket_N : N;-fun cassava_N : N;-fun casserole_N : N;-fun cassette_N : N;-fun cassock_N : N;-fun cassowary_N : N;-fun cast_N : N;-fun cast_V : V;-fun cast_V2 : V2;-fun cast_iron_A : A;-fun cast_off_A : A;-fun castaway_N : N;-fun caste_N : N;-fun castellated_A : A;-fun caster_N : N;-fun castigate_V2 : V2;-fun castigation_N : N;-fun casting_N : N;-fun castle_N : N;-fun castle_V : V;-fun castleford_PN : PN;-fun castor_N : N;-fun castor_oil_N : N;-fun castrate_V2 : V2;-fun castration_N : N;-fun casual_A : A;-fun casually_Adv : Adv;-fun casualty_N : N;-fun casuist_N : N;-fun casuistic_A : A;-fun casuistical_A : A;-fun casuistry_N : N;-fun casus_belli_N : N;-fun cat_N : N;-fun cat_nap_N : N;-fun cat_o'_nine_tails_N : N;-fun cat_sleep_N : N;-fun cataclysm_N : N;-fun cataclysmic_A : A;-fun catafalque_N : N;-fun catalan_A : A;-fun catalan_N : N;-fun catalepsy_N : N;-fun cataleptic_A : A;-fun cataleptic_N : N;-fun catalogue_N : N;-fun catalogue_V2 : V2;-fun catalpa_N : N;-fun catalysis_N : N;-fun catalyst_N : N;-fun catalytic_A : A;-fun catamaran_N : N;-fun catania_PN : PN;-fun catapult_N : N;-fun catapult_V2 : V2;-fun cataract_N : N;-fun catarrh_N : N;-fun catastrophe_N : N;-fun catastrophic_A : A;-fun catastrophically_Adv : Adv;-fun catcall_N : N;-fun catcall_V : V;-fun catch_N : N;-fun catch_V : V;-fun catch_V2 : V2;-fun catch_crop_N : N;-fun catcher_N : N;-fun catching_A : A;-fun catchment_N : N;-fun catchment_area_N : N;-fun catchment_basin_N : N;-fun catchpenny_A : A;-fun catchup_N : N;-fun catchword_N : N;-fun catchy_A : A;-fun catechism_N : N;-fun catechize_V2 : V2;-fun categorical_A : A;-fun categorically_Adv : Adv;-fun categorize_V2 : V2;-fun category_N : N;-fun cater_V : V;-fun caterer_N : N;-fun caterpillar_N : N;-fun caterwaul_N : N;-fun caterwaul_V : V;-fun catfish_N : N;-fun catgut_N : N;-fun cath_PN : PN;-fun catharsis_N : N;-fun cathartic_N : N;-fun cathedral_N : N;-fun catherine_PN : PN;-fun cathode_N : N;-fun catholic_A : A;-fun catholic_N : N;-fun catholicism_N : N;-fun catholicity_N : N;-fun cathy_PN : PN;-fun catkin_N : N;-fun catsup_N : N;-fun cattiness_N : N;-fun cattish_A : A;-fun cattle_cake_N : N;-fun cattleman_N : N;-fun catty_A : A;-fun catwalk_N : N;-fun caucasian_A : A;-fun caucasian_N : N;-fun caucus_N : N;-fun caul_N : N;-fun cauldron_N : N;-fun cauliflower_N : N;-fun caulk_V2 : V2;-fun causal_A : A;-fun causality_N : N;-fun causation_N : N;-fun causative_A : A;-fun cause_N : N;-fun cause_V2 : V2;-fun causeless_A : A;-fun causerie_N : N;-fun causeway_N : N;-fun caustic_A : A;-fun caustically_Adv : Adv;-fun cauterize_V2 : V2;-fun caution_N : N;-fun caution_V2 : V2;-fun cautionary_A : A;-fun cautious_A : A;-fun cautiously_Adv : Adv;-fun cavalcade_N : N;-fun cavalier_A : A;-fun cavalier_N : N;-fun cavalierly_Adv : Adv;-fun cavalry_N : N;-fun cavalryman_N : N;-fun cavan_PN : PN;-fun cave_N : N;-fun cave_V : V;-fun cave_V2 : V2;-fun cave_dweller_N : N;-fun cave_in_N : N;-fun caveat_N : N;-fun caveman_N : N;-fun cavern_N : N;-fun cavernous_A : A;-fun caviar_N : N;-fun caviare_N : N;-fun cavil_V : V;-fun cavity_N : N;-fun cavort_V : V;-fun caw_N : N;-fun caw_V : V;-fun caw_V2 : V2;-fun cayenne_N : N;-fun cayenne_pepper_N : N;-fun cayman_N : N;-fun canon_2_N : N;-fun cbi_N : N;-fun cc_N : N;-fun cd_N : N;-fun cdr_PN : PN;-fun cdre_PN : PN;-fun cease_N : N;-fun cease_V : V;-fun cease_V2 : V2;-fun cease_fire_N : N;-fun ceaseless_A : A;-fun ceaselessly_Adv : Adv;-fun cecil_PN : PN;-fun cecilia_PN : PN;-fun cecily_PN : PN;-fun cedar_N : N;-fun cede_V2 : V2;-fun cedilla_N : N;-fun cedric_PN : PN;-fun cefn_mawr_PN : PN;-fun ceiling_N : N;-fun celandine_N : N;-fun celebrant_N : N;-fun celebrate_V2 : V2;-fun celebrated_A : A;-fun celebration_N : N;-fun celebrity_N : N;-fun celerity_N : N;-fun celery_N : N;-fun celestial_A : A;-fun celia_PN : PN;-fun celibacy_N : N;-fun celibate_N : N;-fun cell_N : N;-fun cellar_N : N;-fun cellarage_N : N;-fun cellist_N : N;-fun cello_N : N;-fun cellophane_N : N;-fun cellular_A : A;-fun celluloid_N : N;-fun cellulose_N : N;-fun celt_N : N;-fun celtic_A : A;-fun celtic_N : N;-fun cement_N : N;-fun cement_V2 : V2;-fun cement_mixer_N : N;-fun cemetery_N : N;-fun cenotaph_N : N;-fun censer_N : N;-fun censor_N : N;-fun censor_V2 : V2;-fun censorious_A : A;-fun censorship_N : N;-fun censure_N : N;-fun censure_V2 : V2;-fun census_N : N;-fun cent_N : N;-fun centaur_N : N;-fun centenarian_A : A;-fun centenarian_N : N;-fun centenary_A : A;-fun centenary_N : N;-fun centennial_A : A;-fun centennial_N : N;-fun centennially_Adv : Adv;-fun centigrade_A : A;-fun centime_N : N;-fun centimetre_N : N;-fun centipede_N : N;-fun central_A : A;-fun central_N : N;-fun centralization_N : N;-fun centralize_V : V;-fun centralize_V2 : V2;-fun centrally_Adv : Adv;-fun centre_N : N;-fun centre_V : V;-fun centre_V2 : V2;-fun centre_bit_N : N;-fun centre_board_N : N;-fun centrepiece_N : N;-fun centrifugal_A : A;-fun centrifuge_N : N;-fun centripetal_A : A;-fun centurion_N : N;-fun century_N : N;-fun ceramic_A : A;-fun ceramics_N : N;-fun cereal_N : N;-fun cerebral_A : A;-fun cerebration_N : N;-fun ceremonial_A : A;-fun ceremonial_N : N;-fun ceremonially_Adv : Adv;-fun ceremonious_A : A;-fun ceremoniously_Adv : Adv;-fun ceremony_N : N;-fun cerise_A : A;-fun cerise_N : N;-fun cert_N : N;-fun certain_A : A;-fun certainly_Adv : Adv;-fun certainty_N : N;-fun certifiable_A : A;-fun certificate_N : N;-fun certificate_V2 : V2;-fun certificated_A : A;-fun certification_N : N;-fun certify_V : V;-fun certify_V2 : V2;-fun certitude_N : N;-fun cerulean_A : A;-fun cervical_A : A;-fun cervix_N : N;-fun cesarean_A : A;-fun cessation_N : N;-fun cession_N : N;-fun cesspit_N : N;-fun cesspool_N : N;-fun ceylon_PN : PN;-fun cf_PN : PN;-fun chad_PN : PN;-fun chadian_A : A;-fun chadian_N : N;-fun chafe_N : N;-fun chafe_V : V;-fun chafe_V2 : V2;-fun chaff_N : N;-fun chaff_V2 : V2;-fun chaffinch_N : N;-fun chafing_dish_N : N;-fun chagrin_N : N;-fun chagrin_V2 : V2;-fun chain_N : N;-fun chain_V2 : V2;-fun chain_armour_N : N;-fun chain_gang_N : N;-fun chain_letter_N : N;-fun chain_mail_N : N;-fun chain_smoker_N : N;-fun chain_stitch_N : N;-fun chain_store_N : N;-fun chair_N : N;-fun chair_V2 : V2;-fun chair_lift_N : N;-fun chairman_N : N;-fun chairmanship_N : N;-fun chaise_N : N;-fun chaise_longue_N : N;-fun chalet_N : N;-fun chalfont_PN : PN;-fun chalfont_st_giles_PN : PN;-fun chalfont_st_peter_PN : PN;-fun chalice_N : N;-fun chalk_N : N;-fun chalk_V2 : V2;-fun chalkpit_N : N;-fun chalky_A : A;-fun challenge_N : N;-fun challenge_V2 : V2;-fun challenger_N : N;-fun chamber_N : N;-fun chamberlain_N : N;-fun chambermaid_N : N;-fun chamberpot_N : N;-fun chameleon_N : N;-fun chammy_leather_N : N;-fun chamois_N : N;-fun chamois_leather_N : N;-fun champ_N : N;-fun champ_V : V;-fun champ_V2 : V2;-fun champagne_N : N;-fun champion_A : A;-fun champion_Adv : Adv;-fun champion_N : N;-fun champion_V2 : V2;-fun championship_N : N;-fun chance_N : N;-fun chance_V : V;-fun chance_V2 : V2;-fun chancel_N : N;-fun chancellery_N : N;-fun chancellor_N : N;-fun chancery_N : N;-fun chancy_A : A;-fun chandelier_N : N;-fun chandler_N : N;-fun changchun_PN : PN;-fun change_N : N;-fun change_V : V;-fun change_V2 : V2;-fun changeable_A : A;-fun changeableness_N : N;-fun changeful_A : A;-fun changeless_A : A;-fun changeling_N : N;-fun changeover_N : N;-fun changsha_PN : PN;-fun channel_N : N;-fun channel_V2 : V2;-fun chant_N : N;-fun chant_V : V;-fun chant_V2 : V2;-fun chaos_N : N;-fun chaotic_A : A;-fun chaotically_Adv : Adv;-fun chap_N : N;-fun chap_V : V;-fun chap_V2 : V2;-fun chapel_N : N;-fun chapelgoer_N : N;-fun chaperon_N : N;-fun chaperon_V2 : V2;-fun chapfallen_A : A;-fun chaplain_N : N;-fun chaplaincy_N : N;-fun chaplet_N : N;-fun chapman_N : N;-fun chapter_N : N;-fun chapterhouse_N : N;-fun char_N : N;-fun char_V : V;-fun char_V2 : V2;-fun charabanc_1_N : N;-fun character_N : N;-fun characteristic_A : A;-fun characteristic_N : N;-fun characteristically_Adv : Adv;-fun characterization_N : N;-fun characterize_V2 : V2;-fun characterless_A : A;-fun charade_N : N;-fun charcoal_N : N;-fun charcoal_burner_N : N;-fun chard_N : N;-fun chard_PN : PN;-fun charge_N : N;-fun charge_V : V;-fun charge_V2 : V2;-fun charge_account_N : N;-fun charge_sheet_N : N;-fun chargeable_A : A;-fun charger_N : N;-fun charge_d'affaires_N : N;-fun charily_Adv : Adv;-fun chariot_N : N;-fun charioteer_N : N;-fun charisma_N : N;-fun charismatic_A : A;-fun charitable_A : A;-fun charitably_Adv : Adv;-fun charity_N : N;-fun charivari_N : N;-fun charlady_N : N;-fun charlatan_N : N;-fun charles_PN : PN;-fun charleston_N : N;-fun charlie_PN : PN;-fun charlock_N : N;-fun charlotte_PN : PN;-fun charm_N : N;-fun charm_V : V;-fun charm_V2 : V2;-fun charmer_N : N;-fun charming_A : A;-fun charmingly_Adv : Adv;-fun charnel_house_N : N;-fun chart_N : N;-fun chart_V2 : V2;-fun charter_N : N;-fun charter_V2 : V2;-fun charter_party_N : N;-fun chartism_N : N;-fun chartist_N : N;-fun chartreuse_N : N;-fun charwoman_N : N;-fun chary_A : A;-fun charybdis_PN : PN;-fun charabanc_2_N : N;-fun chas_PN : PN;-fun chase_N : N;-fun chase_V : V;-fun chase_V2 : V2;-fun chaser_N : N;-fun chasm_N : N;-fun chassis_N : N;-fun chaste_A : A;-fun chastely_Adv : Adv;-fun chasten_V2 : V2;-fun chastise_V2 : V2;-fun chastisement_N : N;-fun chastity_N : N;-fun chasuble_N : N;-fun chat_N : N;-fun chat_V : V;-fun chat_V2 : V2;-fun chatelaine_N : N;-fun chatham_PN : PN;-fun chattel_N : N;-fun chatter_N : N;-fun chatter_V : V;-fun chatterbox_N : N;-fun chattily_Adv : Adv;-fun chatty_A : A;-fun chauffeur_N : N;-fun chauffeuse_N : N;-fun chauvinism_N : N;-fun chauvinist_N : N;-fun chauvinistic_A : A;-fun chaw_N : N;-fun chaw_V2 : V2;-fun chaw_bacon_N : N;-fun cheadle_PN : PN;-fun cheap_A : A;-fun cheapen_V : V;-fun cheapen_V2 : V2;-fun cheapjack_A : A;-fun cheaply_Adv : Adv;-fun cheapness_N : N;-fun cheat_N : N;-fun cheat_V : V;-fun cheat_V2 : V2;-fun check_N : N;-fun check_V : V;-fun check_V2 : V2;-fun checkbook_N : N;-fun checked_A : A;-fun checker_N : N;-fun checker_V2 : V2;-fun checkers_N : N;-fun checklist_N : N;-fun checkmate_N : N;-fun checkmate_V2 : V2;-fun checkout_N : N;-fun checkpoint_N : N;-fun checkroom_N : N;-fun checkup_N : N;-fun cheddar_N : N;-fun cheek_N : N;-fun cheek_V2 : V2;-fun cheekbone_N : N;-fun cheeked_A : A;-fun cheekily_Adv : Adv;-fun cheeky_A : A;-fun cheep_N : N;-fun cheep_V : V;-fun cheer_N : N;-fun cheer_V : V;-fun cheer_V2 : V2;-fun cheerful_A : A;-fun cheerfully_Adv : Adv;-fun cheerfulness_N : N;-fun cheerily_Adv : Adv;-fun cheering_A : A;-fun cheering_N : N;-fun cheerleader_N : N;-fun cheerless_A : A;-fun cheerlessly_Adv : Adv;-fun cheerlessness_N : N;-fun cheery_A : A;-fun cheese_N : N;-fun cheesecake_N : N;-fun cheesecloth_N : N;-fun cheeseparing_A : A;-fun cheetah_N : N;-fun chef_N : N;-fun chef_d'oeuvre_N : N;-fun chelmsford_PN : PN;-fun chelsea_PN : PN;-fun cheltenham_PN : PN;-fun chelyabinsk_PN : PN;-fun chemical_A : A;-fun chemical_N : N;-fun chemically_Adv : Adv;-fun chemise_N : N;-fun chemist_N : N;-fun chemistry_N : N;-fun chemotherapy_N : N;-fun chengchow_PN : PN;-fun chengtu_PN : PN;-fun chenille_N : N;-fun chepstow_PN : PN;-fun cheque_N : N;-fun chequebook_N : N;-fun chequer_V2 : V2;-fun cherish_V2 : V2;-fun cheroot_N : N;-fun cherry_A : A;-fun cherry_N : N;-fun cherub_N : N;-fun cherubic_A : A;-fun chervil_N : N;-fun chesham_PN : PN;-fun cheshire_PN : PN;-fun chess_N : N;-fun chessboard_N : N;-fun chessman_N : N;-fun chest_N : N;-fun chester_PN : PN;-fun chester_le_street_PN : PN;-fun chesterfield_N : N;-fun chesterfield_PN : PN;-fun chestnut_N : N;-fun cheval_glass_N : N;-fun chevron_N : N;-fun chew_N : N;-fun chew_V : V;-fun chew_V2 : V2;-fun chewing_gum_N : N;-fun chianti_N : N;-fun chiaroscuro_N : N;-fun chic_A : A;-fun chic_N : N;-fun chicago_PN : PN;-fun chicanery_N : N;-fun chichester_PN : PN;-fun chichi_A : A;-fun chick_N : N;-fun chicken_N : N;-fun chicken_hearted_A : A;-fun chicken_run_N : N;-fun chickenfeed_N : N;-fun chickenpox_N : N;-fun chickpea_N : N;-fun chickweed_N : N;-fun chicle_N : N;-fun chicory_N : N;-fun chide_V : V;-fun chide_V2 : V2;-fun chief_A : A;-fun chief_N : N;-fun chiefly_Adv : Adv;-fun chieftain_N : N;-fun chieftaincy_N : N;-fun chiffon_N : N;-fun chiffonier_N : N;-fun chignon_N : N;-fun chilblain_N : N;-fun chilblained_A : A;-fun child's_play_N : N;-fun child_N : N;-fun child_bearing_N : N;-fun childbirth_N : N;-fun childhood_N : N;-fun childish_A : A;-fun childishly_Adv : Adv;-fun childless_A : A;-fun childlike_A : A;-fun chile_PN : PN;-fun chilean_A : A;-fun chilean_N : N;-fun chill_A : A;-fun chill_N : N;-fun chill_V : V;-fun chill_V2 : V2;-fun chilli_N : N;-fun chilly_A : A;-fun chilly_N : N;-fun chimaera_N : N;-fun chime_N : N;-fun chime_V : V;-fun chime_V2 : V2;-fun chimera_N : N;-fun chimerical_A : A;-fun chimney_N : N;-fun chimney_sweep_N : N;-fun chimneybreast_N : N;-fun chimneypiece_N : N;-fun chimneypot_N : N;-fun chimneystack_N : N;-fun chimneysweep_N : N;-fun chimneysweeper_N : N;-fun chimp_N : N;-fun chimpanzee_N : N;-fun chin_N : N;-fun chin_strap_N : N;-fun chin_wagging_N : N;-fun china_N : N;-fun china_PN : PN;-fun china_closet_N : N;-fun chinaware_N : N;-fun chinchilla_N : N;-fun chinchow_PN : PN;-fun chine_N : N;-fun chinese_A : A;-fun chinese_N : N;-fun chink_N : N;-fun chink_V : V;-fun chink_V2 : V2;-fun chintz_N : N;-fun chip_N : N;-fun chip_V : V;-fun chip_V2 : V2;-fun chipboard_N : N;-fun chipmunk_N : N;-fun chippendale_N : N;-fun chippenham_PN : PN;-fun chiropodist_N : N;-fun chiropody_N : N;-fun chiropractor_N : N;-fun chirp_N : N;-fun chirp_V : V;-fun chirp_V2 : V2;-fun chirpily_Adv : Adv;-fun chirpiness_N : N;-fun chirpy_A : A;-fun chirrup_N : N;-fun chirrup_V : V;-fun chirrup_V2 : V2;-fun chisel_N : N;-fun chisel_V2 : V2;-fun chiseller_N : N;-fun chit_N : N;-fun chit_chat_N : N;-fun chivalrous_A : A;-fun chivalrously_Adv : Adv;-fun chivalry_N : N;-fun chive_N : N;-fun chivvy_V2 : V2;-fun chivy_V2 : V2;-fun chloe_PN : PN;-fun chloride_N : N;-fun chlorinate_V2 : V2;-fun chlorination_N : N;-fun chlorine_N : N;-fun chloroform_N : N;-fun chlorophyll_N : N;-fun choc_N : N;-fun choc_ice_N : N;-fun chock_N : N;-fun chock_V2 : V2;-fun chock_a_block_A : A;-fun chock_a_block_Adv : Adv;-fun chock_full_A : A;-fun chocolate_N : N;-fun choice_A : A;-fun choice_N : N;-fun choir_N : N;-fun choir_school_N : N;-fun choirboy_N : N;-fun choke_N : N;-fun choke_V : V;-fun choke_V2 : V2;-fun choke_damp_N : N;-fun choker_N : N;-fun chokey_N : N;-fun choky_N : N;-fun choler_N : N;-fun cholera_N : N;-fun choleric_A : A;-fun choose_V : V;-fun choose_V2 : V2;-fun choosey_A : A;-fun choosy_A : A;-fun chop_N : N;-fun chop_V : V;-fun chop_V2 : V2;-fun chop_chop_Adv : Adv;-fun chop_house_N : N;-fun chop_suey_N : N;-fun chopper_N : N;-fun choppy_A : A;-fun chopwell_PN : PN;-fun choral_A : A;-fun chorale_N : N;-fun chord_N : N;-fun chore_N : N;-fun choreographer_N : N;-fun choreography_N : N;-fun chorister_N : N;-fun chorley_PN : PN;-fun chortle_N : N;-fun chortle_V : V;-fun chorus_N : N;-fun chorus_V2 : V2;-fun chorus_girl_N : N;-fun chow_N : N;-fun chowder_N : N;-fun chris_PN : PN;-fun chrissie_PN : PN;-fun chrissy_PN : PN;-fun christ_PN : PN;-fun christchurch_PN : PN;-fun christen_V2 : V2;-fun christendom_N : N;-fun christening_N : N;-fun christian_A : A;-fun christian_N : N;-fun christian_PN : PN;-fun christianity_N : N;-fun christina_PN : PN;-fun christine_PN : PN;-fun christlike_A : A;-fun christmas_N : N;-fun christmas_PN : PN;-fun christmas_box_N : N;-fun christmas_tree_N : N;-fun christmastide_N : N;-fun christmastime_N : N;-fun christopher_PN : PN;-fun chromatic_A : A;-fun chrome_N : N;-fun chromium_N : N;-fun chromosome_N : N;-fun chronic_A : A;-fun chronically_Adv : Adv;-fun chronicle_N : N;-fun chronicle_V2 : V2;-fun chronicler_N : N;-fun chronological_A : A;-fun chronologically_Adv : Adv;-fun chronology_N : N;-fun chronometer_N : N;-fun chrysalis_N : N;-fun chrysanthemum_N : N;-fun chubby_A : A;-fun chuck_N : N;-fun chuck_V2 : V2;-fun chucker_out_N : N;-fun chuckle_N : N;-fun chuckle_V : V;-fun chug_N : N;-fun chug_V : V;-fun chukker_N : N;-fun chum_N : N;-fun chum_V : V;-fun chummy_A : A;-fun chump_N : N;-fun chungking_PN : PN;-fun chunk_N : N;-fun chunky_A : A;-fun church_N : N;-fun churchgoer_N : N;-fun churchman_N : N;-fun churchwarden_N : N;-fun churchyard_N : N;-fun churl_N : N;-fun churlish_A : A;-fun churlishly_Adv : Adv;-fun churn_N : N;-fun churn_V : V;-fun churn_V2 : V2;-fun chute_N : N;-fun chutney_N : N;-fun chateau_N : N;-fun cia_N : N;-fun cicada_N : N;-fun cicala_N : N;-fun cicatrice_N : N;-fun cicatrix_N : N;-fun cicerone_N : N;-fun cid_N : N;-fun cider_N : N;-fun ciderpress_N : N;-fun cif_PN : PN;-fun cigar_N : N;-fun cigar_shaped_A : A;-fun cigarette_N : N;-fun cigarette_case_N : N;-fun cigarette_holder_N : N;-fun cigarette_paper_N : N;-fun cinch_N : N;-fun cinchona_N : N;-fun cincinnati_PN : PN;-fun cincture_N : N;-fun cinder_N : N;-fun cinder_track_N : N;-fun cinderella_N : N;-fun cinderford_PN : PN;-fun cine_camera_N : N;-fun cine_film_N : N;-fun cine_projector_N : N;-fun cinema_N : N;-fun cinematic_A : A;-fun cinematography_N : N;-fun cinnamon_N : N;-fun cinquefoil_N : N;-fun cipher_N : N;-fun cipher_V : V;-fun cipher_V2 : V2;-fun circle_N : N;-fun circle_V : V;-fun circle_V2 : V2;-fun circlet_N : N;-fun circuit_N : N;-fun circuitous_A : A;-fun circular_A : A;-fun circular_N : N;-fun circularity_N : N;-fun circularize_V2 : V2;-fun circulate_V : V;-fun circulate_V2 : V2;-fun circulation_N : N;-fun circumcise_V2 : V2;-fun circumcision_N : N;-fun circumference_N : N;-fun circumflex_N : N;-fun circumlocution_N : N;-fun circumnavigate_V2 : V2;-fun circumnavigation_N : N;-fun circumscribe_V2 : V2;-fun circumscription_N : N;-fun circumspect_A : A;-fun circumspection_N : N;-fun circumspectly_Adv : Adv;-fun circumstance_N : N;-fun circumstantial_A : A;-fun circumstantially_Adv : Adv;-fun circumvent_V2 : V2;-fun circumvention_N : N;-fun circus_N : N;-fun cirencester_PN : PN;-fun cirrhosis_N : N;-fun cirrus_N : N;-fun cissy_A : A;-fun cissy_N : N;-fun cistern_N : N;-fun citadel_N : N;-fun citation_N : N;-fun cite_V2 : V2;-fun citizen_N : N;-fun citizenship_N : N;-fun citric_A : A;-fun citron_N : N;-fun citrous_A : A;-fun citrus_N : N;-fun city_N : N;-fun civet_N : N;-fun civet_cat_N : N;-fun civic_A : A;-fun civics_N : N;-fun civil_A : A;-fun civilian_A : A;-fun civilian_N : N;-fun civility_N : N;-fun civilization_N : N;-fun civilize_V2 : V2;-fun civilly_Adv : Adv;-fun civvy_street_PN : PN;-fun clack_N : N;-fun clack_V : V;-fun clackmannon_PN : PN;-fun clacton_PN : PN;-fun claim_N : N;-fun claim_V : V;-fun claim_V2 : V2;-fun claimant_N : N;-fun clairvoyance_N : N;-fun clairvoyant_N : N;-fun clam_N : N;-fun clam_V : V;-fun clambake_N : N;-fun clamber_N : N;-fun clamber_V : V;-fun clammily_Adv : Adv;-fun clammy_A : A;-fun clamorous_A : A;-fun clamour_N : N;-fun clamour_V : V;-fun clamour_V2 : V2;-fun clamp_N : N;-fun clamp_V : V;-fun clamp_V2 : V2;-fun clamp_down_N : N;-fun clan_N : N;-fun clandestine_A : A;-fun clang_N : N;-fun clang_V : V;-fun clang_V2 : V2;-fun clanger_N : N;-fun clangorous_A : A;-fun clangour_N : N;-fun clank_N : N;-fun clank_V : V;-fun clank_V2 : V2;-fun clannish_A : A;-fun clannishly_Adv : Adv;-fun clansman_N : N;-fun clap_N : N;-fun clap_V : V;-fun clap_V2 : V2;-fun clapboard_N : N;-fun clapper_N : N;-fun clapperboard_N : N;-fun claptrap_N : N;-fun claque_N : N;-fun clare_PN : PN;-fun claret_N : N;-fun clarification_N : N;-fun clarify_V : V;-fun clarify_V2 : V2;-fun clarinet_N : N;-fun clarinetist_N : N;-fun clarinettist_N : N;-fun clarion_N : N;-fun clarity_N : N;-fun clarkston_PN : PN;-fun clarrie_PN : PN;-fun clash_N : N;-fun clash_V : V;-fun clash_V2 : V2;-fun clasp_N : N;-fun clasp_V : V;-fun clasp_V2 : V2;-fun clasp_knife_N : N;-fun class_N : N;-fun class_V2 : V2;-fun class_conscious_A : A;-fun class_feeling_N : N;-fun class_fellow_N : N;-fun class_list_N : N;-fun class_warfare_N : N;-fun classic_A : A;-fun classic_N : N;-fun classical_A : A;-fun classically_Adv : Adv;-fun classicism_N : N;-fun classicist_N : N;-fun classics_N : N;-fun classifiable_A : A;-fun classification_N : N;-fun classified_A : A;-fun classify_V2 : V2;-fun classless_A : A;-fun classmate_N : N;-fun classroom_N : N;-fun classy_A : A;-fun clatter_N : N;-fun clatter_V : V;-fun clatter_V2 : V2;-fun claud_PN : PN;-fun claude_PN : PN;-fun clause_N : N;-fun claustrophobia_N : N;-fun claustrophobic_A : A;-fun clavichord_N : N;-fun clavicle_N : N;-fun claw_N : N;-fun claw_V2 : V2;-fun clawback_N : N;-fun clawhammer_N : N;-fun clay_N : N;-fun clay_cross_PN : PN;-fun clayey_A : A;-fun clean_A : A;-fun clean_Adv : Adv;-fun clean_N : N;-fun clean_V : V;-fun clean_V2 : V2;-fun clean_bowled_A : A;-fun clean_cut_A : A;-fun clean_limbed_A : A;-fun clean_living_A : A;-fun clean_shaven_A : A;-fun clean_up_N : N;-fun cleaner_N : N;-fun cleanliness_N : N;-fun cleanly_A : A;-fun cleanly_Adv : Adv;-fun cleanse_V2 : V2;-fun cleanser_N : N;-fun clear_A : A;-fun clear_Adv : Adv;-fun clear_N : N;-fun clear_V : V;-fun clear_V2 : V2;-fun clear_cut_Adv : Adv;-fun clear_headed_A : A;-fun clear_sighted_A : A;-fun clearance_N : N;-fun clearing_N : N;-fun clearing_house_N : N;-fun clearly_Adv : Adv;-fun clearness_N : N;-fun clearway_N : N;-fun cleat_N : N;-fun cleator_moor_PN : PN;-fun cleavage_N : N;-fun cleave_V : V;-fun cleave_V2 : V2;-fun cleaver_N : N;-fun cleethorpes_PN : PN;-fun clef_N : N;-fun cleft_N : N;-fun clem_PN : PN;-fun clematis_N : N;-fun clemency_N : N;-fun clement_A : A;-fun clement_PN : PN;-fun clench_V2 : V2;-fun clerestory_N : N;-fun clergy_N : N;-fun clergyman_N : N;-fun cleric_N : N;-fun clerical_A : A;-fun clerihew_N : N;-fun clerk_N : N;-fun clerk_V : V;-fun clermont_ferrand_PN : PN;-fun clevedon_PN : PN;-fun cleveland_PN : PN;-fun clever_A : A;-fun cleverly_Adv : Adv;-fun cleverness_N : N;-fun clew_N : N;-fun clew_V2 : V2;-fun cliche_N : N;-fun click_N : N;-fun click_V : V;-fun client_N : N;-fun clientele_N : N;-fun cliff_N : N;-fun cliff_PN : PN;-fun cliff_hanger_N : N;-fun clifford_PN : PN;-fun climacteric_N : N;-fun climactic_A : A;-fun climate_N : N;-fun climatic_A : A;-fun climatically_Adv : Adv;-fun climatology_N : N;-fun climax_N : N;-fun climax_V : V;-fun climax_V2 : V2;-fun climb_N : N;-fun climb_V : V;-fun climb_V2 : V2;-fun climb_down_N : N;-fun climber_N : N;-fun clime_N : N;-fun clinch_N : N;-fun clinch_V : V;-fun clinch_V2 : V2;-fun clincher_N : N;-fun cling_V : V;-fun clinic_N : N;-fun clinical_A : A;-fun clinically_Adv : Adv;-fun clink_N : N;-fun clink_V : V;-fun clink_V2 : V2;-fun clinker_N : N;-fun clinker_built_A : A;-fun clip_N : N;-fun clip_V2 : V2;-fun clip_joint_N : N;-fun clip_on_A : A;-fun clipper_N : N;-fun clipping_N : N;-fun clique_N : N;-fun cliquish_A : A;-fun clitheroe_PN : PN;-fun clitoris_N : N;-fun clive_PN : PN;-fun cloak_N : N;-fun cloak_V2 : V2;-fun cloakroom_N : N;-fun clobber_N : N;-fun clobber_V2 : V2;-fun cloche_N : N;-fun clock_N : N;-fun clock_V : V;-fun clock_V2 : V2;-fun clock_dial_N : N;-fun clock_face_N : N;-fun clock_golf_N : N;-fun clock_tower_N : N;-fun clock_watching_N : N;-fun clockwise_Adv : Adv;-fun clockwork_N : N;-fun clod_N : N;-fun clodhopper_N : N;-fun clog_N : N;-fun clog_V : V;-fun clog_V2 : V2;-fun clog_dance_N : N;-fun cloggy_A : A;-fun cloisonne_N : N;-fun cloister_N : N;-fun cloister_V2 : V2;-fun clone_N : N;-fun close_A : A;-fun close_Adv : Adv;-fun close_N : N;-fun close_V : V;-fun close_V2 : V2;-fun close_cropped_A : A;-fun close_cut_A : A;-fun close_down_N : N;-fun close_fisted_A : A;-fun close_fitting_A : A;-fun close_grained_A : A;-fun close_hauled_A : A;-fun close_set_A : A;-fun close_up_N : N;-fun closely_Adv : Adv;-fun closeness_N : N;-fun closet_A : A;-fun closet_N : N;-fun closet_V2 : V2;-fun closure_N : N;-fun clot_N : N;-fun clot_V : V;-fun clot_V2 : V2;-fun cloth_N : N;-fun clothe_V2 : V2;-fun clothes_basket_N : N;-fun clothes_hanger_N : N;-fun clothes_moth_N : N;-fun clothes_peg_N : N;-fun clothes_pin_N : N;-fun clotheshorse_N : N;-fun clothesline_N : N;-fun clothier_N : N;-fun clothing_N : N;-fun cloud_N : N;-fun cloud_V : V;-fun cloud_V2 : V2;-fun cloud_bank_N : N;-fun cloud_capped_A : A;-fun cloud_cuckoo_land_N : N;-fun cloudburst_N : N;-fun cloudless_A : A;-fun cloudy_A : A;-fun clout_N : N;-fun clout_V2 : V2;-fun clove_N : N;-fun clove_hitch_N : N;-fun clover_N : N;-fun cloverleaf_N : N;-fun clown_N : N;-fun clown_V : V;-fun clowne_PN : PN;-fun clownish_A : A;-fun cloy_V : V;-fun cloy_V2 : V2;-fun club_N : N;-fun club_V : V;-fun club_V2 : V2;-fun club_footed_A : A;-fun clubbable_A : A;-fun clubfoot_N : N;-fun clubhouse_N : N;-fun cluck_N : N;-fun cluck_V : V;-fun clue_N : N;-fun clump_N : N;-fun clump_V : V;-fun clump_V2 : V2;-fun clumsily_Adv : Adv;-fun clumsiness_N : N;-fun clumsy_A : A;-fun clunk_N : N;-fun clunk_V : V;-fun cluster_N : N;-fun cluster_V : V;-fun clutch_N : N;-fun clutch_V : V;-fun clutch_V2 : V2;-fun clutter_N : N;-fun clutter_V2 : V2;-fun clwyd_PN : PN;-fun clydach_PN : PN;-fun clydebank_PN : PN;-fun cm_N : N;-fun co_N : N;-fun co_ed_N : N;-fun co_op_N : N;-fun co_opt_V2 : V2;-fun co_respondent_N : N;-fun co_star_N : N;-fun co_star_V : V;-fun co_star_V2 : V2;-fun coach_N : N;-fun coach_V : V;-fun coach_V2 : V2;-fun coach_builder_N : N;-fun coachman_N : N;-fun coagulate_V : V;-fun coagulate_V2 : V2;-fun coagulation_N : N;-fun coal_N : N;-fun coal_V : V;-fun coal_V2 : V2;-fun coal_gas_N : N;-fun coal_hole_N : N;-fun coal_house_N : N;-fun coal_scuttle_N : N;-fun coal_seam_N : N;-fun coal_tar_N : N;-fun coalesce_V : V;-fun coalescence_N : N;-fun coalface_N : N;-fun coalfield_N : N;-fun coaling_station_N : N;-fun coalition_N : N;-fun coalman_N : N;-fun coalmine_N : N;-fun coalpit_N : N;-fun coalville_PN : PN;-fun coaming_N : N;-fun coarse_A : A;-fun coarsely_Adv : Adv;-fun coarsen_V : V;-fun coarsen_V2 : V2;-fun coarseness_N : N;-fun coast_N : N;-fun coast_V : V;-fun coast_V2 : V2;-fun coastal_A : A;-fun coaster_N : N;-fun coastguard_N : N;-fun coastline_N : N;-fun coastwise_A : A;-fun coastwise_Adv : Adv;-fun coat_N : N;-fun coat_V2 : V2;-fun coat_hanger_N : N;-fun coatbridge_PN : PN;-fun coatee_N : N;-fun coating_N : N;-fun coax_V : V;-fun coax_V2 : V2;-fun coaxing_N : N;-fun coaxingly_Adv : Adv;-fun cob_N : N;-fun cob_nut_N : N;-fun cobalt_N : N;-fun cobber_N : N;-fun cobble_N : N;-fun cobble_V2 : V2;-fun cobbler_N : N;-fun cobblestone_N : N;-fun cobham_PN : PN;-fun cobra_N : N;-fun cobweb_N : N;-fun coca_cola_N : N;-fun cocaine_N : N;-fun cochineal_N : N;-fun cochlea_N : N;-fun cock_N : N;-fun cock_V2 : V2;-fun cock_a_doodle_doo_N : N;-fun cock_a_hoop_A : A;-fun cock_a_hoop_Adv : Adv;-fun cock_crow_N : N;-fun cockade_N : N;-fun cockatoo_N : N;-fun cockchafer_N : N;-fun cocker_N : N;-fun cockerel_N : N;-fun cockermouth_PN : PN;-fun cockeyed_A : A;-fun cockfighting_N : N;-fun cockhorse_N : N;-fun cockle_N : N;-fun cockleshell_N : N;-fun cockney_A : A;-fun cockney_N : N;-fun cockpit_N : N;-fun cockroach_N : N;-fun cockscomb_N : N;-fun cocksure_A : A;-fun cocktail_N : N;-fun cockup_N : N;-fun cocky_A : A;-fun coco_N : N;-fun cocoa_N : N;-fun coconut_N : N;-fun cocoon_N : N;-fun cocoon_V2 : V2;-fun cocotte_N : N;-fun cod_N : N;-fun cod_PN : PN;-fun cod_V : V;-fun cod_V2 : V2;-fun cod_liver_oil_N : N;-fun coda_N : N;-fun coddle_V2 : V2;-fun code_N : N;-fun code_V2 : V2;-fun codeine_N : N;-fun codex_N : N;-fun codfish_N : N;-fun codger_N : N;-fun codicil_N : N;-fun codification_N : N;-fun codify_V2 : V2;-fun codling_N : N;-fun codpiece_N : N;-fun codsall_PN : PN;-fun coeducation_N : N;-fun coeducational_A : A;-fun coefficient_N : N;-fun coerce_V2 : V2;-fun coercion_N : N;-fun coercive_A : A;-fun coeval_A : A;-fun coeval_N : N;-fun coexist_V : V;-fun coexistence_N : N;-fun coffee_N : N;-fun coffee_house_N : N;-fun coffee_mill_N : N;-fun coffee_stall_N : N;-fun coffer_N : N;-fun coffer_dam_N : N;-fun coffin_N : N;-fun cog_N : N;-fun cogency_N : N;-fun cogent_A : A;-fun cogitate_V : V;-fun cogitate_V2 : V2;-fun cogitation_N : N;-fun cognac_N : N;-fun cognate_A : A;-fun cognate_N : N;-fun cognition_N : N;-fun cognizance_N : N;-fun cognizant_A : A;-fun cognomen_N : N;-fun cogwheel_N : N;-fun cohabit_V : V;-fun cohabitation_N : N;-fun cohere_V : V;-fun coherence_N : N;-fun coherency_N : N;-fun coherent_A : A;-fun coherently_Adv : Adv;-fun cohesion_N : N;-fun cohesive_A : A;-fun cohort_N : N;-fun coif_N : N;-fun coiffeur_N : N;-fun coiffure_N : N;-fun coign_N : N;-fun coil_N : N;-fun coil_V : V;-fun coil_V2 : V2;-fun coimbatore_PN : PN;-fun coin_N : N;-fun coin_V2 : V2;-fun coinage_N : N;-fun coincide_V : V;-fun coincidence_N : N;-fun coincident_A : A;-fun coincidental_A : A;-fun coiner_N : N;-fun coir_N : N;-fun coition_N : N;-fun coitus_N : N;-fun coke_N : N;-fun coke_V2 : V2;-fun col_N : N;-fun col_PN : PN;-fun cola_N : N;-fun colander_N : N;-fun colchester_PN : PN;-fun cold_A : A;-fun cold_N : N;-fun cold_blooded_A : A;-fun cold_hearted_A : A;-fun cold_shoulder_V2 : V2;-fun coldly_Adv : Adv;-fun coldness_N : N;-fun coleshill_PN : PN;-fun coleslaw_N : N;-fun colic_N : N;-fun colin_PN : PN;-fun colitis_N : N;-fun coll_PN : PN;-fun collaborate_V : V;-fun collaboration_N : N;-fun collaborationist_N : N;-fun collaborator_N : N;-fun collage_N : N;-fun collapsable_A : A;-fun collapse_N : N;-fun collapse_V : V;-fun collapsible_A : A;-fun collar_N : N;-fun collar_V2 : V2;-fun collarbone_N : N;-fun collate_V2 : V2;-fun collateral_A : A;-fun collateral_N : N;-fun collation_N : N;-fun colleague_N : N;-fun collect_A : A;-fun collect_Adv : Adv;-fun collect_N : N;-fun collect_V : V;-fun collect_V2 : V2;-fun collected_A : A;-fun collectedly_Adv : Adv;-fun collection_N : N;-fun collective_A : A;-fun collectivization_N : N;-fun collectivize_V2 : V2;-fun collector_N : N;-fun colleen_N : N;-fun college_N : N;-fun collegiate_A : A;-fun collide_V : V;-fun collie_N : N;-fun collier_N : N;-fun colliery_N : N;-fun collision_N : N;-fun collocate_V : V;-fun collocation_N : N;-fun colloquial_A : A;-fun colloquialism_N : N;-fun colloquially_Adv : Adv;-fun colloquy_N : N;-fun collusion_N : N;-fun collusive_A : A;-fun colne_PN : PN;-fun cologne_PN : PN;-fun colombia_PN : PN;-fun colombian_A : A;-fun colombian_N : N;-fun colombo_PN : PN;-fun colon_N : N;-fun colonel_N : N;-fun colonial_A : A;-fun colonial_N : N;-fun colonialism_N : N;-fun colonialist_N : N;-fun colonist_N : N;-fun colonization_N : N;-fun colonize_V2 : V2;-fun colonizer_N : N;-fun colonnade_N : N;-fun colonnaded_A : A;-fun colony_N : N;-fun colorado_PN : PN;-fun coloratura_N : N;-fun colossal_A : A;-fun colossus_N : N;-fun colour_N : N;-fun colour_V : V;-fun colour_V2 : V2;-fun colour_bar_N : N;-fun colour_blind_A : A;-fun colour_wash_N : N;-fun coloured_A : A;-fun colourful_A : A;-fun colouring_N : N;-fun colourless_A : A;-fun colt_N : N;-fun coltish_A : A;-fun columbia_PN : PN;-fun columbine_N : N;-fun columbus_PN : PN;-fun column_N : N;-fun columnist_N : N;-fun colwyn_bay_PN : PN;-fun coma_N : N;-fun comatose_A : A;-fun comb_N : N;-fun comb_V : V;-fun comb_V2 : V2;-fun comb_out_N : N;-fun combat_N : N;-fun combat_V : V;-fun combat_V2 : V2;-fun combatant_A : A;-fun combatant_N : N;-fun combative_A : A;-fun combatively_Adv : Adv;-fun combination_N : N;-fun combination_lock_N : N;-fun combine_N : N;-fun combine_V : V;-fun combine_V2 : V2;-fun combustible_A : A;-fun combustible_N : N;-fun combustion_N : N;-fun come_V : V;-fun come_at_able_A : A;-fun come_on_N : N;-fun comeback_N : N;-fun comedian_N : N;-fun comedienne_N : N;-fun comedown_N : N;-fun comedy_N : N;-fun comeliness_N : N;-fun comely_A : A;-fun comer_N : N;-fun comestible_N : N;-fun comet_N : N;-fun comfit_N : N;-fun comfort_N : N;-fun comfort_V2 : V2;-fun comfortable_A : A;-fun comfortably_Adv : Adv;-fun comforter_N : N;-fun comfortingly_Adv : Adv;-fun comfortless_A : A;-fun comfrey_N : N;-fun comfy_A : A;-fun comic_A : A;-fun comic_N : N;-fun comical_A : A;-fun comically_Adv : Adv;-fun coming_A : A;-fun coming_N : N;-fun comity_N : N;-fun comma_N : N;-fun command_N : N;-fun command_V : V;-fun command_V2 : V2;-fun commandant_N : N;-fun commandeer_V2 : V2;-fun commander_N : N;-fun commanding_A : A;-fun commandment_N : N;-fun commando_N : N;-fun commemorate_V2 : V2;-fun commemoration_N : N;-fun commemorative_A : A;-fun commence_V : V;-fun commence_V2 : V2;-fun commencement_N : N;-fun commend_V2 : V2;-fun commendable_A : A;-fun commendation_N : N;-fun commensurable_A : A;-fun commensurate_A : A;-fun comment_N : N;-fun comment_V : V;-fun commentary_N : N;-fun commentate_V : V;-fun commentator_N : N;-fun commerce_N : N;-fun commercial_A : A;-fun commercial_N : N;-fun commercialism_N : N;-fun commercialize_V2 : V2;-fun commercially_Adv : Adv;-fun commination_N : N;-fun comminatory_A : A;-fun commingle_V : V;-fun commingle_V2 : V2;-fun commiserate_V : V;-fun commiseration_N : N;-fun commissar_N : N;-fun commissariat_N : N;-fun commissary_N : N;-fun commission_N : N;-fun commission_V2 : V2;-fun commissionaire_N : N;-fun commissioned_A : A;-fun commissioner_N : N;-fun commit_V2 : V2;-fun commital_N : N;-fun commitment_N : N;-fun committee_N : N;-fun commode_N : N;-fun commodious_A : A;-fun commodity_N : N;-fun commodore_N : N;-fun common_A : A;-fun common_N : N;-fun common_room_N : N;-fun commonalty_N : N;-fun commoner_N : N;-fun commonly_Adv : Adv;-fun commonplace_A : A;-fun commonplace_N : N;-fun commonwealth_N : N;-fun commotion_N : N;-fun communal_A : A;-fun communally_Adv : Adv;-fun commune_N : N;-fun commune_V : V;-fun communicable_A : A;-fun communicant_N : N;-fun communicate_V : V;-fun communicate_V2 : V2;-fun communication_N : N;-fun communicative_A : A;-fun communion_N : N;-fun communique_N : N;-fun communism_N : N;-fun communist_A : A;-fun communist_N : N;-fun community_N : N;-fun commutable_A : A;-fun commutation_N : N;-fun commutator_N : N;-fun commute_V : V;-fun commute_V2 : V2;-fun commuter_N : N;-fun compact_A : A;-fun compact_N : N;-fun compact_V2 : V2;-fun compactly_Adv : Adv;-fun compactness_N : N;-fun companion_N : N;-fun companionable_A : A;-fun companionship_N : N;-fun companionway_N : N;-fun company_N : N;-fun comparability_N : N;-fun comparable_A : A;-fun comparative_A : A;-fun comparative_N : N;-fun comparatively_Adv : Adv;-fun compare_N : N;-fun compare_V : V;-fun compare_V2 : V2;-fun comparison_N : N;-fun compartment_N : N;-fun compartmentalize_V2 : V2;-fun compass_N : N;-fun compass_V2 : V2;-fun compassion_N : N;-fun compassionate_A : A;-fun compassionately_Adv : Adv;-fun compatibility_N : N;-fun compatible_A : A;-fun compatibly_Adv : Adv;-fun compatriot_N : N;-fun compeer_N : N;-fun compel_V2 : V2;-fun compendious_A : A;-fun compendium_N : N;-fun compensate_V : V;-fun compensate_V2 : V2;-fun compensation_N : N;-fun compensatory_A : A;-fun compete_V : V;-fun competence_N : N;-fun competent_A : A;-fun competently_Adv : Adv;-fun competition_N : N;-fun competitive_A : A;-fun competitiveness_N : N;-fun competitor_N : N;-fun compilation_N : N;-fun compile_V2 : V2;-fun compiler_N : N;-fun complacence_N : N;-fun complacency_N : N;-fun complacent_A : A;-fun complacently_Adv : Adv;-fun complain_V : V;-fun complainant_N : N;-fun complainingly_Adv : Adv;-fun complaint_N : N;-fun complaisance_N : N;-fun complaisant_A : A;-fun complement_N : N;-fun complement_V2 : V2;-fun complementary_A : A;-fun complete_A : A;-fun complete_V2 : V2;-fun completely_Adv : Adv;-fun completeness_N : N;-fun completion_N : N;-fun complex_A : A;-fun complex_N : N;-fun complexion_N : N;-fun complexity_N : N;-fun compliance_N : N;-fun compliant_A : A;-fun complicate_V2 : V2;-fun complicated_A : A;-fun complication_N : N;-fun complicity_N : N;-fun compliment_N : N;-fun compliment_V2 : V2;-fun complimentary_A : A;-fun complin_N : N;-fun compline_N : N;-fun comply_V2 : V2;-fun component_A : A;-fun component_N : N;-fun comport_V : V;-fun comport_V2 : V2;-fun comportment_N : N;-fun compos_mentis_A : A;-fun compose_V : V;-fun compose_V2 : V2;-fun composed_A : A;-fun composedly_Adv : Adv;-fun composer_N : N;-fun composite_A : A;-fun composition_N : N;-fun compositor_N : N;-fun compost_N : N;-fun compost_V2 : V2;-fun composure_N : N;-fun compote_N : N;-fun compound_A : A;-fun compound_N : N;-fun compound_V : V;-fun compound_V2 : V2;-fun comprehend_V2 : V2;-fun comprehensibility_N : N;-fun comprehensible_A : A;-fun comprehension_N : N;-fun comprehensive_A : A;-fun comprehensively_Adv : Adv;-fun comprehensiveness_N : N;-fun compress_N : N;-fun compress_V2 : V2;-fun compression_N : N;-fun compressor_N : N;-fun comprise_V2 : V2;-fun compromise_N : N;-fun compromise_V : V;-fun compromise_V2 : V2;-fun comptroller_N : N;-fun compulsion_N : N;-fun compulsive_A : A;-fun compulsively_Adv : Adv;-fun compulsorily_Adv : Adv;-fun compulsory_A : A;-fun compunction_N : N;-fun computation_N : N;-fun computational_A : A;-fun computationally_Adv : Adv;-fun compute_V : V;-fun compute_V2 : V2;-fun computer_N : N;-fun computerize_V2 : V2;-fun compere_N : N;-fun compere_V2 : V2;-fun comrade_N : N;-fun comradely_Adv : Adv;-fun comradeship_N : N;-fun con_Adv : Adv;-fun con_N : N;-fun con_V2 : V2;-fun con_man_N : N;-fun concatenation_N : N;-fun concave_A : A;-fun concavity_N : N;-fun conceal_V2 : V2;-fun concealment_N : N;-fun concede_V2 : V2;-fun conceit_N : N;-fun conceited_A : A;-fun conceitedly_Adv : Adv;-fun conceivable_A : A;-fun conceivably_Adv : Adv;-fun conceive_V : V;-fun conceive_V2 : V2;-fun concentrate_N : N;-fun concentrate_V : V;-fun concentrate_V2 : V2;-fun concentrated_A : A;-fun concentration_N : N;-fun concentric_A : A;-fun concept_N : N;-fun conception_N : N;-fun conceptual_A : A;-fun conceptually_Adv : Adv;-fun concern_N : N;-fun concern_V2 : V2;-fun concerned_A : A;-fun concernedly_Adv : Adv;-fun concert_N : N;-fun concert_V2 : V2;-fun concert_hall_N : N;-fun concerted_A : A;-fun concertina_N : N;-fun concerto_N : N;-fun concession_N : N;-fun concessionaire_N : N;-fun concessive_A : A;-fun conch_N : N;-fun conchology_N : N;-fun concierge_N : N;-fun conciliate_V2 : V2;-fun conciliation_N : N;-fun conciliatory_A : A;-fun concise_A : A;-fun concisely_Adv : Adv;-fun conciseness_N : N;-fun conclave_N : N;-fun conclude_V : V;-fun conclude_V2 : V2;-fun conclusion_N : N;-fun conclusive_A : A;-fun conclusively_Adv : Adv;-fun concoct_V2 : V2;-fun concoction_N : N;-fun concomitant_A : A;-fun concomitant_N : N;-fun concord_N : N;-fun concordance_N : N;-fun concordant_A : A;-fun concordat_N : N;-fun concourse_N : N;-fun concrete_A : A;-fun concrete_N : N;-fun concrete_V : V;-fun concrete_V2 : V2;-fun concretely_Adv : Adv;-fun concretion_N : N;-fun concubine_N : N;-fun concupiscence_N : N;-fun concur_V : V;-fun concurrence_N : N;-fun concurrent_A : A;-fun concurrently_Adv : Adv;-fun concuss_V2 : V2;-fun concussion_N : N;-fun condemn_V2 : V2;-fun condemnation_N : N;-fun condensation_N : N;-fun condense_V : V;-fun condense_V2 : V2;-fun condenser_N : N;-fun condescend_V : V;-fun condescending_A : A;-fun condescendingly_Adv : Adv;-fun condescension_N : N;-fun condign_A : A;-fun condiment_N : N;-fun condition_N : N;-fun condition_V2 : V2;-fun conditional_A : A;-fun conditionally_Adv : Adv;-fun conditioned_A : A;-fun conditioner_N : N;-fun condole_V : V;-fun condolence_N : N;-fun condominium_N : N;-fun condonation_N : N;-fun condone_V2 : V2;-fun condor_N : N;-fun conduce_V : V;-fun conducive_A : A;-fun conduct_N : N;-fun conduct_V : V;-fun conduct_V2 : V2;-fun conduction_N : N;-fun conductive_A : A;-fun conductivity_N : N;-fun conductor_N : N;-fun conductress_N : N;-fun conduit_N : N;-fun cone_N : N;-fun cone_V2 : V2;-fun coney_N : N;-fun confab_N : N;-fun confab_V : V;-fun confabulate_V : V;-fun confabulation_N : N;-fun confection_N : N;-fun confectioner_N : N;-fun confectionery_N : N;-fun confederacy_N : N;-fun confederate_A : A;-fun confederate_N : N;-fun confederate_V : V;-fun confederate_V2 : V2;-fun confederation_N : N;-fun confer_V : V;-fun confer_V2 : V2;-fun conference_N : N;-fun conferment_N : N;-fun confess_V : V;-fun confess_V2 : V2;-fun confessedly_Adv : Adv;-fun confession_N : N;-fun confessional_N : N;-fun confessor_N : N;-fun confetti_N : N;-fun confidant_N : N;-fun confide_V : V;-fun confide_V2 : V2;-fun confidence_N : N;-fun confident_A : A;-fun confidential_A : A;-fun confidentiality_N : N;-fun confidentially_Adv : Adv;-fun confidently_Adv : Adv;-fun confiding_A : A;-fun confidingly_Adv : Adv;-fun configuration_N : N;-fun configure_V2 : V2;-fun configured_A : A;-fun confine_V2 : V2;-fun confined_A : A;-fun confinement_N : N;-fun confirm_V2 : V2;-fun confirmation_N : N;-fun confirmed_A : A;-fun confiscate_V2 : V2;-fun confiscation_N : N;-fun conflagration_N : N;-fun conflict_N : N;-fun conflict_V : V;-fun conflicting_A : A;-fun confluence_N : N;-fun confluent_A : A;-fun conform_V : V;-fun conform_V2 : V2;-fun conformable_A : A;-fun conformation_N : N;-fun conformist_N : N;-fun conformity_N : N;-fun confound_V2 : V2;-fun confounded_A : A;-fun confoundedly_Adv : Adv;-fun confront_V2 : V2;-fun confrontation_N : N;-fun confrere_N : N;-fun confucian_A : A;-fun confucian_N : N;-fun confuse_V2 : V2;-fun confusedly_Adv : Adv;-fun confusion_N : N;-fun confutation_N : N;-fun confute_V2 : V2;-fun congeal_V : V;-fun congeal_V2 : V2;-fun congenial_A : A;-fun congenially_Adv : Adv;-fun congenital_A : A;-fun conger_N : N;-fun conger_eel_N : N;-fun congested_A : A;-fun congestion_N : N;-fun congleton_PN : PN;-fun conglomerate_A : A;-fun conglomerate_N : N;-fun conglomerate_V : V;-fun conglomerate_V2 : V2;-fun conglomeration_N : N;-fun congo_PN : PN;-fun congolese_A : A;-fun congolese_N : N;-fun congratulate_V2 : V2;-fun congratulation_N : N;-fun congratulatory_A : A;-fun congregate_V : V;-fun congregate_V2 : V2;-fun congregation_N : N;-fun congregational_A : A;-fun congress_N : N;-fun congressional_A : A;-fun congressman_N : N;-fun congresswoman_N : N;-fun congruent_A : A;-fun congruous_A : A;-fun conge_N : N;-fun conic_A : A;-fun conical_A : A;-fun conifer_N : N;-fun coniferous_A : A;-fun conjectural_A : A;-fun conjecture_N : N;-fun conjecture_V : V;-fun conjecture_V2 : V2;-fun conjoin_V : V;-fun conjoin_V2 : V2;-fun conjoint_A : A;-fun conjointly_Adv : Adv;-fun conjugal_A : A;-fun conjugally_Adv : Adv;-fun conjugate_V : V;-fun conjugate_V2 : V2;-fun conjugation_N : N;-fun conjunction_N : N;-fun conjunctive_A : A;-fun conjunctive_N : N;-fun conjuncture_N : N;-fun conjuration_N : N;-fun conjure_V : V;-fun conjure_V2 : V2;-fun conjurer_N : N;-fun conjuror_N : N;-fun conk_N : N;-fun conk_V : V;-fun conker_N : N;-fun connah's_quay_PN : PN;-fun connaught_PN : PN;-fun connect_V : V;-fun connect_V2 : V2;-fun connecticut_PN : PN;-fun connection_N : N;-fun connective_A : A;-fun connective_N : N;-fun connexion_N : N;-fun connie_PN : PN;-fun conning_A : A;-fun connivance_N : N;-fun connive_V : V;-fun connoisseur_N : N;-fun connotation_N : N;-fun connote_V2 : V2;-fun connubial_A : A;-fun conquer_V2 : V2;-fun conqueror_N : N;-fun conquest_N : N;-fun conquistador_N : N;-fun cons_PN : PN;-fun consanguinity_N : N;-fun conscience_N : N;-fun conscience_smitten_A : A;-fun conscientious_A : A;-fun conscientiously_Adv : Adv;-fun conscientiousness_N : N;-fun conscious_A : A;-fun consciously_Adv : Adv;-fun consciousness_N : N;-fun conscript_N : N;-fun conscript_V2 : V2;-fun conscription_N : N;-fun consecrate_V2 : V2;-fun consecration_N : N;-fun consecutive_A : A;-fun consecutively_Adv : Adv;-fun consensus_N : N;-fun consent_N : N;-fun consent_V : V;-fun consequence_N : N;-fun consequent_A : A;-fun consequential_A : A;-fun consequentially_Adv : Adv;-fun consequently_Adv : Adv;-fun conservancy_N : N;-fun conservation_N : N;-fun conservatism_N : N;-fun conservative_A : A;-fun conservative_N : N;-fun conservatively_Adv : Adv;-fun conservatoire_N : N;-fun conservatory_N : N;-fun conserve_N : N;-fun conserve_V2 : V2;-fun consett_PN : PN;-fun consider_V2 : V2;-fun considerable_A : A;-fun considerably_Adv : Adv;-fun considerate_A : A;-fun considerately_Adv : Adv;-fun considerateness_N : N;-fun consideration_N : N;-fun consign_V2 : V2;-fun consignee_N : N;-fun consigner_N : N;-fun consignment_N : N;-fun consignor_N : N;-fun consist_V : V;-fun consistence_N : N;-fun consistency_N : N;-fun consistent_A : A;-fun consistently_Adv : Adv;-fun consistory_N : N;-fun consolable_A : A;-fun consolation_N : N;-fun consolatory_A : A;-fun console_N : N;-fun console_V2 : V2;-fun consolidate_V : V;-fun consolidate_V2 : V2;-fun consolidation_N : N;-fun consomme_N : N;-fun consonance_N : N;-fun consonant_A : A;-fun consonant_N : N;-fun consort_N : N;-fun consort_V : V;-fun consortium_N : N;-fun conspectus_N : N;-fun conspicuous_A : A;-fun conspicuously_Adv : Adv;-fun conspicuousness_N : N;-fun conspiracy_N : N;-fun conspirator_N : N;-fun conspiratorial_A : A;-fun conspire_V : V;-fun conspire_V2 : V2;-fun constable_N : N;-fun constabulary_N : N;-fun constance_PN : PN;-fun constancy_N : N;-fun constant_A : A;-fun constant_N : N;-fun constantly_Adv : Adv;-fun constellation_N : N;-fun consternation_N : N;-fun constipate_V2 : V2;-fun constipated_A : A;-fun constipation_N : N;-fun constituency_N : N;-fun constituent_A : A;-fun constituent_N : N;-fun constitute_V2 : V2;-fun constitution_N : N;-fun constitutional_A : A;-fun constitutional_N : N;-fun constitutionalism_N : N;-fun constitutionalist_N : N;-fun constitutionalize_V2 : V2;-fun constitutionally_Adv : Adv;-fun constitutive_A : A;-fun constrain_V2 : V2;-fun constrained_A : A;-fun constrainedly_Adv : Adv;-fun constraint_N : N;-fun constrict_V2 : V2;-fun constriction_N : N;-fun construct_V2 : V2;-fun construction_N : N;-fun constructional_A : A;-fun constructive_A : A;-fun constructively_Adv : Adv;-fun constructor_N : N;-fun construe_V : V;-fun construe_V2 : V2;-fun consubstantiation_N : N;-fun consul_N : N;-fun consular_A : A;-fun consulate_N : N;-fun consulship_N : N;-fun consult_V : V;-fun consult_V2 : V2;-fun consultant_N : N;-fun consultation_N : N;-fun consultative_A : A;-fun consume_V : V;-fun consume_V2 : V2;-fun consumer_N : N;-fun consuming_A : A;-fun consummate_A : A;-fun consummate_V2 : V2;-fun consummation_N : N;-fun consumption_N : N;-fun consumptive_A : A;-fun consumptive_N : N;-fun cont_PN : PN;-fun contact_N : N;-fun contact_V2 : V2;-fun contagion_N : N;-fun contagious_A : A;-fun contagiously_Adv : Adv;-fun contain_V2 : V2;-fun container_N : N;-fun containment_N : N;-fun contaminant_N : N;-fun contaminate_V2 : V2;-fun contamination_N : N;-fun contemn_V2 : V2;-fun contemplate_V : V;-fun contemplate_V2 : V2;-fun contemplation_N : N;-fun contemplative_A : A;-fun contemporaneous_A : A;-fun contemporaneously_Adv : Adv;-fun contemporary_A : A;-fun contemporary_N : N;-fun contempt_N : N;-fun contemptible_A : A;-fun contemptuous_A : A;-fun contemptuously_Adv : Adv;-fun contend_V : V;-fun contend_V2 : V2;-fun contender_N : N;-fun content_A : A;-fun content_N : N;-fun content_V2 : V2;-fun contented_A : A;-fun contentedly_Adv : Adv;-fun contention_N : N;-fun contentious_A : A;-fun contentment_N : N;-fun conterminous_A : A;-fun contest_N : N;-fun contest_V : V;-fun contest_V2 : V2;-fun contestant_N : N;-fun context_N : N;-fun contextual_A : A;-fun contiguity_N : N;-fun contiguous_A : A;-fun contiguously_Adv : Adv;-fun continence_N : N;-fun continent_A : A;-fun continent_N : N;-fun continental_A : A;-fun contingency_N : N;-fun contingent_A : A;-fun contingent_N : N;-fun continual_A : A;-fun continually_Adv : Adv;-fun continuance_N : N;-fun continuation_N : N;-fun continue_V : V;-fun continue_V2 : V2;-fun continuity_N : N;-fun continuous_A : A;-fun continuously_Adv : Adv;-fun contort_V2 : V2;-fun contortion_N : N;-fun contortionist_N : N;-fun contour_N : N;-fun contour_V2 : V2;-fun contraband_N : N;-fun contrabass_N : N;-fun contraception_N : N;-fun contraceptive_A : A;-fun contraceptive_N : N;-fun contract_N : N;-fun contract_V : V;-fun contract_V2 : V2;-fun contractible_A : A;-fun contractile_A : A;-fun contraction_N : N;-fun contractor_N : N;-fun contractual_A : A;-fun contradict_V2 : V2;-fun contradiction_N : N;-fun contradictory_A : A;-fun contradistinction_N : N;-fun contradistinguish_V2 : V2;-fun contralto_N : N;-fun contraption_N : N;-fun contrapuntal_A : A;-fun contrariety_N : N;-fun contrarily_Adv : Adv;-fun contrariness_N : N;-fun contrariwise_Adv : Adv;-fun contrary_A : A;-fun contrary_N : N;-fun contrast_N : N;-fun contrast_V : V;-fun contrast_V2 : V2;-fun contrastingly_Adv : Adv;-fun contravene_V2 : V2;-fun contravention_N : N;-fun contretemps_N : N;-fun contribute_V : V;-fun contribute_V2 : V2;-fun contribution_N : N;-fun contributor_N : N;-fun contributory_A : A;-fun contrite_A : A;-fun contritely_Adv : Adv;-fun contrition_N : N;-fun contrivance_N : N;-fun contrive_V : V;-fun contrive_V2 : V2;-fun contriver_N : N;-fun control_N : N;-fun control_V2 : V2;-fun controllable_A : A;-fun controller_N : N;-fun controversial_A : A;-fun controversialist_N : N;-fun controversially_Adv : Adv;-fun controversy_N : N;-fun controvert_V2 : V2;-fun contumacious_A : A;-fun contumaciously_Adv : Adv;-fun contumacy_N : N;-fun contumelious_A : A;-fun contumeliously_Adv : Adv;-fun contumely_N : N;-fun contuse_V2 : V2;-fun contusion_N : N;-fun conundrum_N : N;-fun conurbation_N : N;-fun convalesce_V : V;-fun convalescence_N : N;-fun convalescent_A : A;-fun convalescent_N : N;-fun convection_N : N;-fun convector_N : N;-fun convene_V : V;-fun convene_V2 : V2;-fun convener_N : N;-fun convenience_N : N;-fun convenient_A : A;-fun conveniently_Adv : Adv;-fun convent_N : N;-fun conventicle_N : N;-fun convention_N : N;-fun conventional_A : A;-fun conventionality_N : N;-fun conventionally_Adv : Adv;-fun converge_V : V;-fun convergence_N : N;-fun convergent_A : A;-fun conversant_A : A;-fun conversation_N : N;-fun conversational_A : A;-fun conversationalist_N : N;-fun conversationally_Adv : Adv;-fun converse_A : A;-fun converse_N : N;-fun converse_V : V;-fun conversely_Adv : Adv;-fun conversion_N : N;-fun convert_N : N;-fun convert_V2 : V2;-fun converted_A : A;-fun converter_N : N;-fun convertibility_N : N;-fun convertible_A : A;-fun convertible_N : N;-fun convex_A : A;-fun convexity_N : N;-fun convexly_Adv : Adv;-fun convey_V2 : V2;-fun conveyance_N : N;-fun conveyancer_N : N;-fun conveyer_N : N;-fun conveyer_belt_N : N;-fun conveyor_N : N;-fun convict_N : N;-fun convict_V2 : V2;-fun conviction_N : N;-fun convince_V2 : V2;-fun convincible_A : A;-fun convincing_A : A;-fun convincingly_Adv : Adv;-fun convivial_A : A;-fun conviviality_N : N;-fun convivially_Adv : Adv;-fun convocation_N : N;-fun convoke_V2 : V2;-fun convoluted_A : A;-fun convolution_N : N;-fun convolvulus_N : N;-fun convoy_N : N;-fun convoy_V2 : V2;-fun convulse_V2 : V2;-fun convulsion_N : N;-fun convulsive_A : A;-fun convulsively_Adv : Adv;-fun conwy_PN : PN;-fun cony_N : N;-fun coo_N : N;-fun coo_V : V;-fun coo_V2 : V2;-fun cook_N : N;-fun cook_V : V;-fun cook_V2 : V2;-fun cookbook_N : N;-fun cooker_N : N;-fun cookery_N : N;-fun cookery_book_N : N;-fun cookham_PN : PN;-fun cookhouse_N : N;-fun cookie_N : N;-fun cooking_N : N;-fun cooky_N : N;-fun cool_A : A;-fun cool_N : N;-fun cool_V : V;-fun cool_V2 : V2;-fun cool_headed_A : A;-fun coolant_N : N;-fun cooler_N : N;-fun coolie_N : N;-fun cooling_tower_N : N;-fun coolly_Adv : Adv;-fun coolness_N : N;-fun coon_N : N;-fun coop_N : N;-fun coop_V2 : V2;-fun cooper_N : N;-fun cooperate_V : V;-fun cooperation_N : N;-fun cooperative_A : A;-fun cooperative_N : N;-fun cooperator_N : N;-fun coordinate_A : A;-fun coordinate_N : N;-fun coordinate_V2 : V2;-fun coordinately_Adv : Adv;-fun coordination_N : N;-fun coordinator_N : N;-fun coot_N : N;-fun cop_N : N;-fun cop_V : V;-fun cop_V2 : V2;-fun cop_out_N : N;-fun copartner_N : N;-fun copartnership_N : N;-fun cope_N : N;-fun cope_V : V;-fun copeck_N : N;-fun copenhagen_PN : PN;-fun copernican_A : A;-fun coping_N : N;-fun coping_stone_N : N;-fun copious_A : A;-fun copiously_Adv : Adv;-fun copper_N : N;-fun copper_V2 : V2;-fun copper_bottom_V2 : V2;-fun copper_bottomed_A : A;-fun copperhead_N : N;-fun copperplate_N : N;-fun coppersmith_N : N;-fun coppice_N : N;-fun coppull_PN : PN;-fun copra_N : N;-fun copse_N : N;-fun copt_A : A;-fun copt_N : N;-fun coptic_N : N;-fun copula_N : N;-fun copulate_V : V;-fun copulation_N : N;-fun copulative_A : A;-fun copulative_N : N;-fun copy_N : N;-fun copy_V : V;-fun copy_V2 : V2;-fun copybook_N : N;-fun copycat_N : N;-fun copyhold_N : N;-fun copyholder_N : N;-fun copyist_N : N;-fun copyright_N : N;-fun copyright_V2 : V2;-fun copywriter_N : N;-fun coquetry_N : N;-fun coquette_N : N;-fun coquettish_A : A;-fun coquettishly_Adv : Adv;-fun cor_anglais_N : N;-fun coracle_N : N;-fun coral_A : A;-fun coral_N : N;-fun coral_reef_N : N;-fun corbel_N : N;-fun corby_PN : PN;-fun cord_N : N;-fun cord_V2 : V2;-fun cordage_N : N;-fun cordial_A : A;-fun cordial_N : N;-fun cordiality_N : N;-fun cordially_Adv : Adv;-fun cordite_N : N;-fun cordoba_PN : PN;-fun cordon_N : N;-fun cordon_V2 : V2;-fun cordon_bleu_A : A;-fun corduroy_N : N;-fun core_N : N;-fun core_V2 : V2;-fun coreligionist_N : N;-fun corgi_N : N;-fun corinthian_A : A;-fun corinthian_N : N;-fun cork_N : N;-fun cork_PN : PN;-fun cork_V2 : V2;-fun corkage_N : N;-fun corked_A : A;-fun corker_N : N;-fun corkscrew_N : N;-fun corm_N : N;-fun cormorant_N : N;-fun corn_N : N;-fun corn_V2 : V2;-fun corn_exchange_N : N;-fun corncob_N : N;-fun corncrake_N : N;-fun cornea_N : N;-fun cornelian_N : N;-fun corner_N : N;-fun corner_V : V;-fun corner_V2 : V2;-fun corner_kick_N : N;-fun cornered_A : A;-fun cornerstone_N : N;-fun cornet_N : N;-fun cornflake_N : N;-fun cornflour_N : N;-fun cornflower_N : N;-fun cornice_N : N;-fun cornpone_N : N;-fun cornstarch_N : N;-fun cornucopia_N : N;-fun cornwall_PN : PN;-fun corny_A : A;-fun corolla_N : N;-fun corollary_N : N;-fun corona_N : N;-fun coronary_A : A;-fun coronary_N : N;-fun coronation_N : N;-fun coroner_N : N;-fun coronet_N : N;-fun corp_PN : PN;-fun corporal_A : A;-fun corporal_N : N;-fun corporate_A : A;-fun corporation_N : N;-fun corporeal_A : A;-fun corps_N : N;-fun corps_de_ballet_N : N;-fun corps_diplomatique_N : N;-fun corpse_N : N;-fun corpulence_N : N;-fun corpulent_A : A;-fun corpus_N : N;-fun corpuscle_N : N;-fun corral_N : N;-fun corral_V2 : V2;-fun correct_A : A;-fun correct_V2 : V2;-fun correction_N : N;-fun correctitude_N : N;-fun corrective_A : A;-fun corrective_N : N;-fun correctly_Adv : Adv;-fun correctness_N : N;-fun correlate_V : V;-fun correlate_V2 : V2;-fun correlation_N : N;-fun correlative_A : A;-fun correlative_N : N;-fun correspond_V : V;-fun correspondence_N : N;-fun correspondent_N : N;-fun corresponding_A : A;-fun correspondingly_Adv : Adv;-fun corridor_N : N;-fun corrie_N : N;-fun corrigendum_N : N;-fun corrigible_A : A;-fun corroborate_V2 : V2;-fun corroboration_N : N;-fun corroborative_A : A;-fun corrode_V : V;-fun corrode_V2 : V2;-fun corrosion_N : N;-fun corrosive_A : A;-fun corrosive_N : N;-fun corrugate_V : V;-fun corrugate_V2 : V2;-fun corrugation_N : N;-fun corrupt_A : A;-fun corrupt_V : V;-fun corrupt_V2 : V2;-fun corruptibility_N : N;-fun corruptible_A : A;-fun corruption_N : N;-fun corruptly_Adv : Adv;-fun corruptness_N : N;-fun corsage_N : N;-fun corsair_N : N;-fun corse_N : N;-fun corselet_N : N;-fun corset_N : N;-fun corsham_PN : PN;-fun corslet_N : N;-fun cortege_1_N : N;-fun cortex_N : N;-fun cortical_A : A;-fun cortisone_N : N;-fun cortege_2_N : N;-fun corundum_N : N;-fun corunna_PN : PN;-fun coruscate_V : V;-fun coruscation_N : N;-fun corvette_N : N;-fun corvee_N : N;-fun cos_N : N;-fun cosenza_PN : PN;-fun cosh_N : N;-fun cosh_V2 : V2;-fun cosher_A : A;-fun cosignatory_A : A;-fun cosignatory_N : N;-fun cosily_Adv : Adv;-fun cosine_N : N;-fun cosiness_N : N;-fun cosmetic_A : A;-fun cosmetic_N : N;-fun cosmetician_N : N;-fun cosmic_A : A;-fun cosmogony_N : N;-fun cosmonaut_N : N;-fun cosmopolitan_A : A;-fun cosmopolitan_N : N;-fun cosmos_N : N;-fun cosset_V2 : V2;-fun cost_N : N;-fun cost_V : V;-fun cost_V2 : V2;-fun costa_rica_PN : PN;-fun costa_rican_A : A;-fun costa_rican_N : N;-fun costermonger_N : N;-fun costing_N : N;-fun costive_A : A;-fun costliness_N : N;-fun costly_A : A;-fun costume_N : N;-fun costumier_N : N;-fun cosy_A : A;-fun cosy_N : N;-fun cot_N : N;-fun cote_N : N;-fun cotenant_N : N;-fun coterie_N : N;-fun coterminous_A : A;-fun cotilion_N : N;-fun cotillion_N : N;-fun cottage_N : N;-fun cottar_N : N;-fun cotter_N : N;-fun cotton_N : N;-fun cotton_V : V;-fun cotton_cake_N : N;-fun cotton_plant_N : N;-fun cotton_wool_N : N;-fun cottontail_N : N;-fun cotyledon_N : N;-fun couch_N : N;-fun couch_V : V;-fun couch_V2 : V2;-fun couch_grass_N : N;-fun couchant_A : A;-fun couchette_N : N;-fun cougar_N : N;-fun cough_N : N;-fun cough_V : V;-fun cough_V2 : V2;-fun coulter_N : N;-fun council_N : N;-fun council_board_N : N;-fun council_chamber_N : N;-fun councillor_N : N;-fun counsel_N : N;-fun counsel_V2 : V2;-fun counsellor_N : N;-fun count_N : N;-fun count_V : V;-fun count_V2 : V2;-fun countable_A : A;-fun countdown_N : N;-fun countenance_N : N;-fun countenance_V2 : V2;-fun counter_Adv : Adv;-fun counter_N : N;-fun counter_V : V;-fun counter_V2 : V2;-fun counter_example_N : N;-fun counter_revolution_N : N;-fun counter_revolutionary_A : A;-fun counter_revolutionary_N : N;-fun counteract_V2 : V2;-fun counteraction_N : N;-fun counterattack_N : N;-fun counterattack_V : V;-fun counterattack_V2 : V2;-fun counterattraction_N : N;-fun counterbalance_N : N;-fun counterbalance_V2 : V2;-fun counterblast_N : N;-fun counterclaim_N : N;-fun counterclockwise_Adv : Adv;-fun counterespionage_N : N;-fun counterfeit_A : A;-fun counterfeit_N : N;-fun counterfeit_V2 : V2;-fun counterfeiter_N : N;-fun counterfoil_N : N;-fun counterintelligence_N : N;-fun counterirritant_N : N;-fun countermand_V2 : V2;-fun countermine_N : N;-fun countermine_V : V;-fun countermine_V2 : V2;-fun counteroffer_N : N;-fun counterpane_N : N;-fun counterpart_N : N;-fun counterplot_N : N;-fun counterplot_V : V;-fun counterplot_V2 : V2;-fun counterpoint_N : N;-fun counterpoise_N : N;-fun counterpoise_V2 : V2;-fun countersign_N : N;-fun countersign_V2 : V2;-fun countersink_V2 : V2;-fun countertenor_N : N;-fun countervail_V : V;-fun countervail_V2 : V2;-fun countess_N : N;-fun counting_house_N : N;-fun countless_A : A;-fun countrified_A : A;-fun country_N : N;-fun country_house_N : N;-fun country_seat_N : N;-fun countryman_N : N;-fun countryside_N : N;-fun countrywoman_N : N;-fun county_N : N;-fun coup_N : N;-fun coup_d'etat_N : N;-fun coup_de_grace_N : N;-fun couple_N : N;-fun couple_V : V;-fun couple_V2 : V2;-fun couplet_N : N;-fun coupling_N : N;-fun coupon_N : N;-fun coupe_N : N;-fun courage_N : N;-fun courageous_A : A;-fun courageously_Adv : Adv;-fun courgette_N : N;-fun courier_N : N;-fun course_N : N;-fun course_V : V;-fun course_V2 : V2;-fun courser_N : N;-fun coursing_N : N;-fun court_N : N;-fun court_V : V;-fun court_V2 : V2;-fun court_card_N : N;-fun court_martial_N : N;-fun court_martial_V2 : V2;-fun courteous_A : A;-fun courteously_Adv : Adv;-fun courtesan_N : N;-fun courtesy_N : N;-fun courtier_N : N;-fun courtliness_N : N;-fun courtly_A : A;-fun courtroom_N : N;-fun courtship_N : N;-fun courtyard_N : N;-fun cousin_N : N;-fun cousinly_A : A;-fun cove_N : N;-fun coven_N : N;-fun covenant_N : N;-fun covenant_V : V;-fun covenant_V2 : V2;-fun coventry_PN : PN;-fun cover_N : N;-fun cover_V2 : V2;-fun cover_up_N : N;-fun coverage_N : N;-fun covering_A : A;-fun covering_N : N;-fun coverlet_N : N;-fun covert_A : A;-fun covert_N : N;-fun covertly_Adv : Adv;-fun covet_V2 : V2;-fun covetous_A : A;-fun covetously_Adv : Adv;-fun covetousness_N : N;-fun covey_N : N;-fun cow_N : N;-fun cow_V2 : V2;-fun coward_N : N;-fun cowardice_N : N;-fun cowardly_A : A;-fun cowbell_N : N;-fun cowboy_N : N;-fun cowcatcher_N : N;-fun cowdenbeath_PN : PN;-fun cower_V : V;-fun cowes_PN : PN;-fun cowhand_N : N;-fun cowherd_N : N;-fun cowhide_N : N;-fun cowhouse_N : N;-fun cowl_N : N;-fun cowling_N : N;-fun cowman_N : N;-fun cowpox_N : N;-fun cowrie_N : N;-fun cowshed_N : N;-fun cowskin_N : N;-fun cowslip_N : N;-fun cox_N : N;-fun cox_V : V;-fun cox_V2 : V2;-fun coxcomb_N : N;-fun coxswain_N : N;-fun coy_A : A;-fun coyly_Adv : Adv;-fun coyness_N : N;-fun coyote_N : N;-fun coypu_N : N;-fun cozen_V2 : V2;-fun cozy_A : A;-fun cp_PN : PN;-fun cpl_PN : PN;-fun crab_N : N;-fun crab_V : V;-fun crab_V2 : V2;-fun crab_apple_N : N;-fun crabbed_A : A;-fun crack_N : N;-fun crack_V : V;-fun crack_V2 : V2;-fun crack_down_N : N;-fun crack_up_N : N;-fun cracker_N : N;-fun crackers_A : A;-fun crackle_N : N;-fun crackle_V : V;-fun crackle_china_N : N;-fun crackleware_N : N;-fun crackling_N : N;-fun crackpot_N : N;-fun cracksman_N : N;-fun cradle_N : N;-fun cradle_V2 : V2;-fun craft_N : N;-fun craftily_Adv : Adv;-fun craftiness_N : N;-fun craftsman_N : N;-fun craftsmanship_N : N;-fun crafty_A : A;-fun crag_N : N;-fun cragged_A : A;-fun craggy_A : A;-fun cragsman_N : N;-fun crake_N : N;-fun cram_V : V;-fun cram_V2 : V2;-fun cram_full_A : A;-fun cram_full_Adv : Adv;-fun cramlington_PN : PN;-fun crammer_N : N;-fun cramp_N : N;-fun cramp_V2 : V2;-fun cramp_iron_N : N;-fun cramped_A : A;-fun crampon_N : N;-fun cranberry_N : N;-fun crane_N : N;-fun crane_V : V;-fun crane_V2 : V2;-fun crane_fly_N : N;-fun cranial_A : A;-fun cranium_N : N;-fun crank_N : N;-fun crank_V2 : V2;-fun crankshaft_N : N;-fun cranky_A : A;-fun crannied_A : A;-fun cranny_N : N;-fun crap_N : N;-fun crap_V : V;-fun crap_shooting_N : N;-fun crape_N : N;-fun craps_N : N;-fun crash_Adv : Adv;-fun crash_N : N;-fun crash_V : V;-fun crash_V2 : V2;-fun crash_dive_N : N;-fun crash_dive_V : V;-fun crash_helmet_N : N;-fun crash_land_V : V;-fun crash_land_V2 : V2;-fun crash_landing_N : N;-fun crass_A : A;-fun crate_N : N;-fun crate_V2 : V2;-fun crater_N : N;-fun cravat_N : N;-fun crave_V : V;-fun crave_V2 : V2;-fun craven_A : A;-fun craven_N : N;-fun craving_N : N;-fun crawfish_N : N;-fun crawl_N : N;-fun crawl_V : V;-fun crawler_N : N;-fun crawley_PN : PN;-fun crayfish_N : N;-fun crayon_N : N;-fun crayon_V2 : V2;-fun craze_N : N;-fun crazed_A : A;-fun crazily_Adv : Adv;-fun craziness_N : N;-fun crazy_A : A;-fun creak_N : N;-fun creak_V : V;-fun creakily_Adv : Adv;-fun creaky_A : A;-fun cream_N : N;-fun cream_V2 : V2;-fun creamery_N : N;-fun creamy_A : A;-fun crease_N : N;-fun crease_V : V;-fun crease_V2 : V2;-fun create_V2 : V2;-fun creation_N : N;-fun creative_A : A;-fun creatively_Adv : Adv;-fun creativeness_N : N;-fun creator_N : N;-fun creature_N : N;-fun credence_N : N;-fun credibility_N : N;-fun credible_A : A;-fun credibly_Adv : Adv;-fun credit_N : N;-fun credit_V2 : V2;-fun credit_side_N : N;-fun credit_worthiness_N : N;-fun credit_worthy_A : A;-fun creditable_A : A;-fun creditably_Adv : Adv;-fun creditor_N : N;-fun credo_N : N;-fun credulity_N : N;-fun credulous_A : A;-fun credulously_Adv : Adv;-fun creed_N : N;-fun creek_N : N;-fun creel_N : N;-fun creep_N : N;-fun creep_V : V;-fun creeper_N : N;-fun creepy_A : A;-fun cremate_V2 : V2;-fun cremation_N : N;-fun crematorium_N : N;-fun crematory_N : N;-fun crenellated_A : A;-fun creole_A : A;-fun creole_N : N;-fun creosote_N : N;-fun crepe_1_N : N;-fun crepitate_V : V;-fun crepitation_N : N;-fun crepuscular_A : A;-fun cres_PN : PN;-fun crescendo_N : N;-fun crescent_N : N;-fun cress_N : N;-fun crest_N : N;-fun crest_V : V;-fun crest_V2 : V2;-fun crested_A : A;-fun crestfallen_A : A;-fun creswell_PN : PN;-fun cretaceous_A : A;-fun cretin_N : N;-fun cretinous_A : A;-fun cretonne_N : N;-fun crevasse_N : N;-fun crevice_N : N;-fun crew_N : N;-fun crew_V : V;-fun crew_cut_N : N;-fun crew_neck_N : N;-fun crewe_PN : PN;-fun crib_N : N;-fun crib_V : V;-fun crib_V2 : V2;-fun cribbage_N : N;-fun cribbage_board_N : N;-fun crick_N : N;-fun crick_V2 : V2;-fun cricket_N : N;-fun cricketer_N : N;-fun crieff_PN : PN;-fun crier_N : N;-fun crime_N : N;-fun crime_V2 : V2;-fun criminal_A : A;-fun criminal_N : N;-fun criminally_Adv : Adv;-fun criminology_N : N;-fun crimp_V2 : V2;-fun crimson_A : A;-fun crimson_N : N;-fun crimson_V : V;-fun crimson_V2 : V2;-fun cringe_V : V;-fun crinkle_N : N;-fun crinkle_V : V;-fun crinkle_V2 : V2;-fun crinkly_A : A;-fun crinoline_N : N;-fun cripple_N : N;-fun cripple_V2 : V2;-fun crisis_N : N;-fun crisp_A : A;-fun crisp_N : N;-fun crisp_V : V;-fun crisp_V2 : V2;-fun crisply_Adv : Adv;-fun crispness_N : N;-fun crisscross_A : A;-fun crisscross_Adv : Adv;-fun crisscross_V : V;-fun crisscross_V2 : V2;-fun criterion_N : N;-fun critic_N : N;-fun critical_A : A;-fun critically_Adv : Adv;-fun criticism_N : N;-fun criticize_V : V;-fun criticize_V2 : V2;-fun critique_N : N;-fun croak_N : N;-fun croak_V : V;-fun croak_V2 : V2;-fun crochet_N : N;-fun crochet_V : V;-fun crochet_V2 : V2;-fun crochet_hook_N : N;-fun crock_N : N;-fun crock_V : V;-fun crock_V2 : V2;-fun crockery_N : N;-fun crocodile_N : N;-fun crocus_N : N;-fun croesus_PN : PN;-fun croft_N : N;-fun crofter_N : N;-fun cromer_PN : PN;-fun cromlech_N : N;-fun crone_N : N;-fun crony_N : N;-fun crook_N : N;-fun crook_PN : PN;-fun crook_V : V;-fun crook_V2 : V2;-fun crook_back_A : A;-fun crook_backed_A : A;-fun crooked_A : A;-fun crookedly_Adv : Adv;-fun crookedness_N : N;-fun croon_V : V;-fun croon_V2 : V2;-fun crooner_N : N;-fun crop_N : N;-fun crop_V : V;-fun crop_V2 : V2;-fun crop_dusting_N : N;-fun cropper_N : N;-fun croquet_N : N;-fun croquette_N : N;-fun crore_N : N;-fun crosby_PN : PN;-fun crosier_N : N;-fun cross_A : A;-fun cross_N : N;-fun cross_V : V;-fun cross_V2 : V2;-fun cross_bench_N : N;-fun cross_bencher_N : N;-fun cross_division_N : N;-fun cross_examination_N : N;-fun cross_examine_V2 : V2;-fun cross_examiner_N : N;-fun cross_fertilization_N : N;-fun cross_fertilize_V2 : V2;-fun cross_grained_A : A;-fun cross_heading_N : N;-fun cross_index_N : N;-fun cross_index_V2 : V2;-fun cross_legged_Adv : Adv;-fun cross_question_V2 : V2;-fun cross_reference_N : N;-fun cross_section_N : N;-fun cross_stitch_N : N;-fun crossbar_N : N;-fun crossbeam_N : N;-fun crossbow_N : N;-fun crossbred_A : A;-fun crossbreed_N : N;-fun crossbreed_V2 : V2;-fun crosscheck_N : N;-fun crosscheck_V : V;-fun crosscheck_V2 : V2;-fun crosscountry_A : A;-fun crosscountry_Adv : Adv;-fun crosscurrent_N : N;-fun crosscut_A : A;-fun crosscut_N : N;-fun crosse_N : N;-fun crosseyed_A : A;-fun crossfire_N : N;-fun crossing_N : N;-fun crossly_Adv : Adv;-fun crossness_N : N;-fun crosspatch_N : N;-fun crosspiece_N : N;-fun crossroad_N : N;-fun crosstalk_N : N;-fun crosswalk_N : N;-fun crosswind_N : N;-fun crosswise_Adv : Adv;-fun crossword_N : N;-fun crotch_N : N;-fun crotchet_N : N;-fun crotchety_A : A;-fun crouch_N : N;-fun crouch_V : V;-fun croup_N : N;-fun croupier_N : N;-fun crow's_nest_N : N;-fun crow_N : N;-fun crow_V : V;-fun crowbar_N : N;-fun crowborough_PN : PN;-fun crowd_N : N;-fun crowd_V : V;-fun crowd_V2 : V2;-fun crowded_A : A;-fun crown_N : N;-fun crown_V2 : V2;-fun crown_land_N : N;-fun crowning_A : A;-fun crowthorne_PN : PN;-fun croydon_PN : PN;-fun crozier_N : N;-fun crucial_A : A;-fun crucially_Adv : Adv;-fun crucible_N : N;-fun crucifix_N : N;-fun crucifixion_N : N;-fun cruciform_A : A;-fun crucify_V2 : V2;-fun crude_A : A;-fun crudely_Adv : Adv;-fun crudeness_N : N;-fun crudity_N : N;-fun cruel_A : A;-fun cruelly_Adv : Adv;-fun cruelty_N : N;-fun cruet_N : N;-fun cruet_stand_N : N;-fun cruise_N : N;-fun cruise_V : V;-fun cruiser_N : N;-fun crumb_N : N;-fun crumble_V : V;-fun crumble_V2 : V2;-fun crumbly_A : A;-fun crumpet_N : N;-fun crumple_V : V;-fun crumple_V2 : V2;-fun crunch_N : N;-fun crunch_V : V;-fun crunch_V2 : V2;-fun crupper_N : N;-fun crusade_N : N;-fun crusade_V : V;-fun crusader_N : N;-fun cruse_N : N;-fun crush_N : N;-fun crush_V : V;-fun crush_V2 : V2;-fun crushing_A : A;-fun crushingly_Adv : Adv;-fun crust_N : N;-fun crust_V : V;-fun crust_V2 : V2;-fun crustacean_N : N;-fun crusted_A : A;-fun crusty_A : A;-fun crutch_N : N;-fun crux_N : N;-fun cruzeiro_N : N;-fun cry_N : N;-fun cry_V : V;-fun cry_V2 : V2;-fun crybaby_N : N;-fun crying_A : A;-fun crypt_N : N;-fun cryptic_A : A;-fun cryptically_Adv : Adv;-fun cryptogram_N : N;-fun crystal_N : N;-fun crystal_gazing_N : N;-fun crystalline_A : A;-fun crystallization_N : N;-fun crystallize_V : V;-fun crystallize_V2 : V2;-fun crystallography_N : N;-fun creche_N : N;-fun creme_de_menthe_N : N;-fun crepe_2_N : N;-fun cub_N : N;-fun cuba_PN : PN;-fun cuban_A : A;-fun cuban_N : N;-fun cubbyhole_N : N;-fun cube_N : N;-fun cube_V2 : V2;-fun cubic_A : A;-fun cubical_A : A;-fun cubicle_N : N;-fun cubism_N : N;-fun cubist_N : N;-fun cubit_N : N;-fun cuckold_N : N;-fun cuckold_V2 : V2;-fun cuckoo_N : N;-fun cuckoo_clock_N : N;-fun cucumber_N : N;-fun cud_N : N;-fun cuddle_N : N;-fun cuddle_V : V;-fun cuddle_V2 : V2;-fun cuddlesome_A : A;-fun cuddly_A : A;-fun cudgel_N : N;-fun cudgel_V2 : V2;-fun cudworth_PN : PN;-fun cue_N : N;-fun cuff_N : N;-fun cuff_V2 : V2;-fun cuffley_PN : PN;-fun cuirass_N : N;-fun cuirassier_N : N;-fun cuisine_N : N;-fun cul_de_sac_N : N;-fun culcheth_PN : PN;-fun culinary_A : A;-fun cull_N : N;-fun cull_V2 : V2;-fun cullender_N : N;-fun culminate_V2 : V2;-fun culmination_N : N;-fun culpability_N : N;-fun culpable_A : A;-fun culpably_Adv : Adv;-fun culprit_N : N;-fun cult_N : N;-fun cultivable_A : A;-fun cultivate_V2 : V2;-fun cultivated_A : A;-fun cultivation_N : N;-fun cultivator_N : N;-fun cultural_A : A;-fun culture_N : N;-fun cultured_A : A;-fun culvert_N : N;-fun cumber_V2 : V2;-fun cumberland_PN : PN;-fun cumbernauld_PN : PN;-fun cumbersome_A : A;-fun cumbria_PN : PN;-fun cumbrous_A : A;-fun cummerbund_N : N;-fun cumnock_PN : PN;-fun cumulative_A : A;-fun cumulatively_Adv : Adv;-fun cumulus_N : N;-fun cuneiform_A : A;-fun cunning_A : A;-fun cunning_N : N;-fun cunningly_Adv : Adv;-fun cunt_N : N;-fun cup_N : N;-fun cup_V2 : V2;-fun cup_bearer_N : N;-fun cup_final_N : N;-fun cup_tie_N : N;-fun cupar_PN : PN;-fun cupboard_N : N;-fun cupboard_love_N : N;-fun cupful_N : N;-fun cupid_PN : PN;-fun cupidity_N : N;-fun cupola_N : N;-fun cuppa_N : N;-fun cupping_N : N;-fun cupric_A : A;-fun cupro_nickel_N : N;-fun cur_N : N;-fun curability_N : N;-fun curable_A : A;-fun curacy_N : N;-fun curate_N : N;-fun curative_A : A;-fun curator_N : N;-fun curacao_N : N;-fun curacoa_N : N;-fun curb_N : N;-fun curb_V2 : V2;-fun curd_N : N;-fun curdle_V : V;-fun curdle_V2 : V2;-fun cure_1_N : N;-fun cure_V : V;-fun cure_V2 : V2;-fun cure_all_N : N;-fun curfew_N : N;-fun curio_N : N;-fun curiosity_N : N;-fun curious_A : A;-fun curiously_Adv : Adv;-fun curitiba_PN : PN;-fun curl_N : N;-fun curl_V : V;-fun curl_V2 : V2;-fun curler_N : N;-fun curlew_N : N;-fun curling_N : N;-fun curly_A : A;-fun curmudgeon_N : N;-fun currant_N : N;-fun currency_N : N;-fun current_A : A;-fun current_N : N;-fun currently_Adv : Adv;-fun curriculum_N : N;-fun curriculum_vitae_N : N;-fun currie_PN : PN;-fun currish_A : A;-fun currishly_Adv : Adv;-fun curry_N : N;-fun curry_V2 : V2;-fun curry_powder_N : N;-fun curse_N : N;-fun curse_V : V;-fun curse_V2 : V2;-fun cursed_A : A;-fun cursedly_Adv : Adv;-fun cursive_A : A;-fun cursorily_Adv : Adv;-fun cursory_A : A;-fun curst_A : A;-fun curt_A : A;-fun curtail_V2 : V2;-fun curtailment_N : N;-fun curtain_N : N;-fun curtain_V2 : V2;-fun curtain_call_N : N;-fun curtain_lecture_N : N;-fun curtain_raiser_N : N;-fun curtly_Adv : Adv;-fun curtness_N : N;-fun curtsey_N : N;-fun curtsey_V : V;-fun curtsy_N : N;-fun curtsy_V : V;-fun curvature_N : N;-fun curve_N : N;-fun curve_V : V;-fun curve_V2 : V2;-fun cure_2_N : N;-fun cushion_N : N;-fun cushion_V2 : V2;-fun cushy_A : A;-fun cusp_N : N;-fun cuspidor_N : N;-fun cuss_N : N;-fun cussed_A : A;-fun cussedly_Adv : Adv;-fun cussedness_N : N;-fun custard_N : N;-fun custodial_A : A;-fun custodian_N : N;-fun custody_N : N;-fun custom_N : N;-fun custom_built_A : A;-fun custom_made_A : A;-fun customarily_Adv : Adv;-fun customary_A : A;-fun customer_N : N;-fun cut_N : N;-fun cut_V : V;-fun cut_V2 : V2;-fun cut_out_N : N;-fun cut_price_A : A;-fun cut_rate_A : A;-fun cut_throat_A : A;-fun cut_throat_N : N;-fun cutback_N : N;-fun cute_A : A;-fun cutely_Adv : Adv;-fun cuteness_N : N;-fun cuticle_N : N;-fun cutlass_N : N;-fun cutler_N : N;-fun cutlery_N : N;-fun cutlet_N : N;-fun cutpurse_N : N;-fun cutter_N : N;-fun cutting_A : A;-fun cutting_N : N;-fun cutting_room_N : N;-fun cuttlefish_N : N;-fun cutworm_N : N;-fun cwmbran_PN : PN;-fun cwt_N : N;-fun cyanide_N : N;-fun cybernetic_A : A;-fun cybernetics_N : N;-fun cyclamen_N : N;-fun cycle_N : N;-fun cycle_V : V;-fun cyclic_A : A;-fun cyclical_A : A;-fun cyclist_N : N;-fun cyclone_N : N;-fun cyclonic_A : A;-fun cyclopaedia_N : N;-fun cyclopean_A : A;-fun cyclostyle_N : N;-fun cyclostyle_V2 : V2;-fun cyclotron_N : N;-fun cyder_N : N;-fun cygnet_N : N;-fun cylinder_N : N;-fun cylindrical_A : A;-fun cymbal_N : N;-fun cynic_N : N;-fun cynical_A : A;-fun cynically_Adv : Adv;-fun cynicism_N : N;-fun cynosure_N : N;-fun cynthia_PN : PN;-fun cypher_N : N;-fun cypher_V : V;-fun cypher_V2 : V2;-fun cypress_N : N;-fun cyprian_A : A;-fun cypriot_A : A;-fun cypriot_N : N;-fun cyprus_PN : PN;-fun cyril_PN : PN;-fun cyrillic_A : A;-fun cyst_N : N;-fun czar_N : N;-fun czarina_N : N;-fun czech_A : A;-fun czech_N : N;-fun czechoslovak_A : A;-fun czechoslovak_N : N;-fun czechoslovakia_PN : PN;-fun czechoslovakian_A : A;-fun czechoslovakian_N : N;-fun d_day_PN : PN;-fun dab_N : N;-fun dab_V : V;-fun dab_V2 : V2;-fun dabble_V : V;-fun dabble_V2 : V2;-fun dabbler_N : N;-fun dacca_PN : PN;-fun dace_N : N;-fun dacha_N : N;-fun dachshund_N : N;-fun dacoit_N : N;-fun dacoity_N : N;-fun dactyl_N : N;-fun dactylic_A : A;-fun dad_N : N;-fun daddy_N : N;-fun daddy_longlegs_N : N;-fun dado_N : N;-fun daemon_N : N;-fun daffodil_N : N;-fun daft_A : A;-fun daftly_Adv : Adv;-fun dagger_N : N;-fun dago_N : N;-fun daguerreotype_N : N;-fun dahlia_N : N;-fun dail_eireann_N : N;-fun daily_A : A;-fun daily_Adv : Adv;-fun daily_N : N;-fun daintily_Adv : Adv;-fun daintiness_N : N;-fun dainty_A : A;-fun dainty_N : N;-fun dairy_N : N;-fun dairy_farm_N : N;-fun dairy_farming_N : N;-fun dairying_N : N;-fun dairymaid_N : N;-fun dairyman_N : N;-fun dais_N : N;-fun daisy_N : N;-fun daisy_PN : PN;-fun dakar_PN : PN;-fun dakota_PN : PN;-fun dale_N : N;-fun dalesman_N : N;-fun dalkeith_PN : PN;-fun dallas_PN : PN;-fun dalliance_N : N;-fun dally_V : V;-fun dalmatian_N : N;-fun dalry_PN : PN;-fun dalton_PN : PN;-fun dam_N : N;-fun dam_V2 : V2;-fun damage_N : N;-fun damage_V2 : V2;-fun damascene_A : A;-fun damascene_V2 : V2;-fun damascus_PN : PN;-fun damask_N : N;-fun dame_N : N;-fun damn_A : A;-fun damn_Adv : Adv;-fun damn_N : N;-fun damn_V2 : V2;-fun damnable_A : A;-fun damnably_Adv : Adv;-fun damnation_N : N;-fun damned_A : A;-fun damned_Adv : Adv;-fun damocles_PN : PN;-fun damp_A : A;-fun damp_N : N;-fun damp_V : V;-fun damp_V2 : V2;-fun dampen_V : V;-fun dampen_V2 : V2;-fun damper_N : N;-fun dampish_A : A;-fun damply_Adv : Adv;-fun dampness_N : N;-fun damsel_N : N;-fun damson_N : N;-fun dan_PN : PN;-fun dance_N : N;-fun dance_V : V;-fun dance_V2 : V2;-fun dance_band_N : N;-fun dance_hall_N : N;-fun dance_orchestra_N : N;-fun dancer_N : N;-fun dancing_A : A;-fun dancing_N : N;-fun dandelion_N : N;-fun dander_N : N;-fun dandified_A : A;-fun dandle_V2 : V2;-fun dandruff_N : N;-fun dandy_A : A;-fun dandy_N : N;-fun dane_N : N;-fun danger_N : N;-fun dangerous_A : A;-fun dangerously_Adv : Adv;-fun dangle_V : V;-fun dangle_V2 : V2;-fun daniel_N : N;-fun daniel_PN : PN;-fun danish_A : A;-fun danish_N : N;-fun dank_A : A;-fun danny_PN : PN;-fun danse_macabre_N : N;-fun daphne_N : N;-fun daphne_PN : PN;-fun dapper_A : A;-fun dapple_V2 : V2;-fun dapple_grey_A : A;-fun dapple_grey_N : N;-fun darby_PN : PN;-fun dare_N : N;-fun dare_V : V;-fun dare_V2 : V2;-fun daredevil_N : N;-fun darenth_PN : PN;-fun darfield_PN : PN;-fun daring_A : A;-fun daring_N : N;-fun daringly_Adv : Adv;-fun dark_A : A;-fun dark_N : N;-fun darken_V : V;-fun darken_V2 : V2;-fun darkey_N : N;-fun darkie_N : N;-fun darkly_Adv : Adv;-fun darkness_N : N;-fun darkroom_N : N;-fun darky_N : N;-fun darling_N : N;-fun darlington_PN : PN;-fun darmstadt_PN : PN;-fun darn_N : N;-fun darn_V : V;-fun darn_V2 : V2;-fun darning_N : N;-fun darning_needle_N : N;-fun dart_N : N;-fun dart_V : V;-fun dart_V2 : V2;-fun dartford_PN : PN;-fun dartmouth_PN : PN;-fun darwen_PN : PN;-fun dash_N : N;-fun dash_V : V;-fun dash_V2 : V2;-fun dashboard_N : N;-fun dashing_A : A;-fun dashingly_Adv : Adv;-fun dastard_N : N;-fun dastardly_A : A;-fun data_N : N;-fun datable_A : A;-fun date_N : N;-fun date_V : V;-fun date_V2 : V2;-fun dated_A : A;-fun dateless_A : A;-fun dateline_N : N;-fun dative_A : A;-fun dative_N : N;-fun datum_N : N;-fun daub_N : N;-fun daub_V : V;-fun daub_V2 : V2;-fun dauber_N : N;-fun daughter_N : N;-fun daughter_in_law_N : N;-fun daughterly_A : A;-fun daunt_V2 : V2;-fun dauntless_A : A;-fun dauntlessly_Adv : Adv;-fun dauphin_N : N;-fun dave_PN : PN;-fun davenport_N : N;-fun daventry_PN : PN;-fun davey_PN : PN;-fun david_PN : PN;-fun davit_N : N;-fun daw_N : N;-fun dawdle_V : V;-fun dawdle_V2 : V2;-fun dawdler_N : N;-fun dawley_PN : PN;-fun dawlish_PN : PN;-fun dawn_N : N;-fun dawn_PN : PN;-fun dawn_V : V;-fun day_N : N;-fun day_boarder_N : N;-fun day_labourer_N : N;-fun day_return_N : N;-fun day_school_N : N;-fun daybook_N : N;-fun dayboy_N : N;-fun daybreak_N : N;-fun daydream_N : N;-fun daydream_V : V;-fun daygirl_N : N;-fun daylight_N : N;-fun daylight_saving_A : A;-fun daylight_saving_N : N;-fun daylong_A : A;-fun daylong_Adv : Adv;-fun dayspring_N : N;-fun daytime_N : N;-fun dayton_PN : PN;-fun daze_N : N;-fun daze_V2 : V2;-fun dazedly_Adv : Adv;-fun dazzle_N : N;-fun dazzle_V2 : V2;-fun ddt_N : N;-fun de_escalate_V2 : V2;-fun de_escalation_N : N;-fun de_facto_A : A;-fun de_facto_Adv : Adv;-fun de_ice_V2 : V2;-fun de_jure_A : A;-fun de_jure_Adv : Adv;-fun de_luxe_A : A;-fun de_rigeur_A : A;-fun de_trop_A : A;-fun deacon_N : N;-fun deaconess_N : N;-fun dead_A : A;-fun dead_Adv : Adv;-fun deaden_V2 : V2;-fun deadline_N : N;-fun deadlock_N : N;-fun deadlocked_A : A;-fun deadly_A : A;-fun deadly_Adv : Adv;-fun deadpan_A : A;-fun deaf_A : A;-fun deaf_aid_N : N;-fun deaf_mute_N : N;-fun deafen_V2 : V2;-fun deafness_N : N;-fun deal_Adv : Adv;-fun deal_N : N;-fun deal_PN : PN;-fun deal_V : V;-fun deal_V2 : V2;-fun dealer_N : N;-fun dealing_N : N;-fun dean_N : N;-fun dean_PN : PN;-fun deanery_N : N;-fun dear_A : A;-fun dear_Adv : Adv;-fun dear_N : N;-fun dearest_N : N;-fun dearie_N : N;-fun dearly_Adv : Adv;-fun dearness_N : N;-fun dearth_N : N;-fun deary_N : N;-fun death_N : N;-fun death_mask_N : N;-fun death_rate_N : N;-fun death_roll_N : N;-fun death_warrant_N : N;-fun deathbed_N : N;-fun deathblow_N : N;-fun deathless_A : A;-fun deathlike_A : A;-fun deathly_A : A;-fun deathly_Adv : Adv;-fun deathtrap_N : N;-fun deb_N : N;-fun debag_V2 : V2;-fun debar_V2 : V2;-fun debark_V : V;-fun debark_V2 : V2;-fun debarkation_N : N;-fun debase_V2 : V2;-fun debasement_N : N;-fun debatable_A : A;-fun debate_N : N;-fun debate_V : V;-fun debate_V2 : V2;-fun debater_N : N;-fun debauch_N : N;-fun debauch_V2 : V2;-fun debauchee_N : N;-fun debauchery_N : N;-fun debbie_PN : PN;-fun debby_PN : PN;-fun debenture_N : N;-fun debilitate_V2 : V2;-fun debility_N : N;-fun debit_N : N;-fun debit_V2 : V2;-fun debit_side_N : N;-fun debonair_A : A;-fun deborah_PN : PN;-fun debouch_V : V;-fun debouch_V2 : V2;-fun debrief_V2 : V2;-fun debris_1_N : N;-fun debt_N : N;-fun debtor_N : N;-fun debug_V2 : V2;-fun debunk_V2 : V2;-fun debut_1_N : N;-fun debutante_1_N : N;-fun dec_PN : PN;-fun decade_N : N;-fun decadence_N : N;-fun decadent_A : A;-fun decadent_N : N;-fun decalogue_N : N;-fun decamp_V : V;-fun decant_V2 : V2;-fun decanter_N : N;-fun decapitate_V2 : V2;-fun decapitation_N : N;-fun decarbonize_V2 : V2;-fun decasyllabic_A : A;-fun decasyllable_N : N;-fun decay_N : N;-fun decay_V : V;-fun decease_N : N;-fun decease_V : V;-fun deceit_N : N;-fun deceitful_A : A;-fun deceitfully_Adv : Adv;-fun deceitfulness_N : N;-fun deceive_V2 : V2;-fun deceiver_N : N;-fun deceivingly_Adv : Adv;-fun decelerate_V : V;-fun decelerate_V2 : V2;-fun december_N : N;-fun december_PN : PN;-fun decency_N : N;-fun decent_A : A;-fun decently_Adv : Adv;-fun decentralization_N : N;-fun decentralize_V2 : V2;-fun deception_N : N;-fun deceptive_A : A;-fun deceptively_Adv : Adv;-fun decibel_N : N;-fun decide_V : V;-fun decide_V2 : V2;-fun decided_A : A;-fun decidedly_Adv : Adv;-fun deciduous_A : A;-fun decimal_A : A;-fun decimalization_N : N;-fun decimalize_V2 : V2;-fun decimate_V2 : V2;-fun decipher_V2 : V2;-fun decipherable_A : A;-fun decision_N : N;-fun decisive_A : A;-fun decisively_Adv : Adv;-fun deck_N : N;-fun deck_V2 : V2;-fun decker_N : N;-fun deckle_edged_A : A;-fun declaim_V : V;-fun declaim_V2 : V2;-fun declamation_N : N;-fun declamatory_A : A;-fun declarable_A : A;-fun declaration_N : N;-fun declare_V : V;-fun declare_V2 : V2;-fun declassification_N : N;-fun declassify_V2 : V2;-fun declension_N : N;-fun declination_N : N;-fun decline_N : N;-fun decline_V : V;-fun decline_V2 : V2;-fun declivity_N : N;-fun declutch_V : V;-fun decode_V2 : V2;-fun decoder_N : N;-fun decoke_V2 : V2;-fun decolonization_N : N;-fun decolonize_V2 : V2;-fun decompose_V : V;-fun decompose_V2 : V2;-fun decomposition_N : N;-fun decompress_V2 : V2;-fun decompression_N : N;-fun decontaminate_V2 : V2;-fun decontamination_N : N;-fun decontrol_V2 : V2;-fun decorate_V2 : V2;-fun decoration_N : N;-fun decorative_A : A;-fun decorator_N : N;-fun decorous_A : A;-fun decorously_Adv : Adv;-fun decorum_N : N;-fun decoy_N : N;-fun decoy_V2 : V2;-fun decrease_N : N;-fun decrease_V : V;-fun decrease_V2 : V2;-fun decree_N : N;-fun decree_V2 : V2;-fun decree_nisi_N : N;-fun decrepit_A : A;-fun decrepitude_N : N;-fun decry_V2 : V2;-fun dedicate_V2 : V2;-fun dedication_N : N;-fun deduce_V2 : V2;-fun deduct_V2 : V2;-fun deductible_A : A;-fun deduction_N : N;-fun deductive_A : A;-fun deed_N : N;-fun deed_box_N : N;-fun deedpoll_N : N;-fun deem_V2 : V2;-fun deep_A : A;-fun deep_Adv : Adv;-fun deep_N : N;-fun deep_freeze_N : N;-fun deep_freeze_V2 : V2;-fun deep_laid_A : A;-fun deep_mined_A : A;-fun deep_rooted_A : A;-fun deep_sea_A : A;-fun deep_seated_A : A;-fun deep_water_A : A;-fun deepen_V : V;-fun deepen_V2 : V2;-fun deeply_Adv : Adv;-fun deepness_N : N;-fun deer_N : N;-fun deerskin_N : N;-fun deerstalker_N : N;-fun deerstalking_N : N;-fun deface_V2 : V2;-fun defacement_N : N;-fun defalcation_N : N;-fun defamation_N : N;-fun defamatory_A : A;-fun defame_V2 : V2;-fun default_N : N;-fun default_V : V;-fun defaulter_N : N;-fun defeat_N : N;-fun defeat_V2 : V2;-fun defeatism_N : N;-fun defeatist_N : N;-fun defecate_V : V;-fun defecation_N : N;-fun defect_N : N;-fun defect_V : V;-fun defection_N : N;-fun defective_A : A;-fun defectively_Adv : Adv;-fun defectiveness_N : N;-fun defector_N : N;-fun defence_N : N;-fun defenceless_A : A;-fun defencelessly_Adv : Adv;-fun defencelessness_N : N;-fun defend_V2 : V2;-fun defendant_N : N;-fun defender_N : N;-fun defensible_A : A;-fun defensive_A : A;-fun defensive_N : N;-fun defensively_Adv : Adv;-fun defer_V : V;-fun defer_V2 : V2;-fun deference_N : N;-fun deferential_A : A;-fun deferentially_Adv : Adv;-fun deferment_N : N;-fun defiance_N : N;-fun defiant_A : A;-fun defiantly_Adv : Adv;-fun deficiency_N : N;-fun deficient_A : A;-fun deficit_N : N;-fun defile_N : N;-fun defile_V : V;-fun defile_V2 : V2;-fun defilement_N : N;-fun definable_A : A;-fun define_V2 : V2;-fun definite_A : A;-fun definitely_Adv : Adv;-fun definition_N : N;-fun definitive_A : A;-fun deflate_V2 : V2;-fun deflation_N : N;-fun deflationary_A : A;-fun deflect_V : V;-fun deflect_V2 : V2;-fun deflection_N : N;-fun deflower_V2 : V2;-fun defoliant_N : N;-fun defoliate_V2 : V2;-fun defoliation_N : N;-fun deforest_V2 : V2;-fun deform_V2 : V2;-fun deformed_A : A;-fun deformity_N : N;-fun defraud_V2 : V2;-fun defray_V2 : V2;-fun defrayal_N : N;-fun defrayment_N : N;-fun defrock_V2 : V2;-fun defrost_V2 : V2;-fun defroster_N : N;-fun deft_A : A;-fun deftly_Adv : Adv;-fun deftness_N : N;-fun defunct_A : A;-fun defuse_V2 : V2;-fun defy_V2 : V2;-fun degauss_V2 : V2;-fun degeneracy_N : N;-fun degenerate_A : A;-fun degenerate_N : N;-fun degenerate_V : V;-fun degeneration_N : N;-fun degradation_N : N;-fun degrade_V2 : V2;-fun degree_N : N;-fun dehorn_V2 : V2;-fun dehumanize_V2 : V2;-fun dehydrate_V2 : V2;-fun deification_N : N;-fun deify_V2 : V2;-fun deign_V : V;-fun deirdre_PN : PN;-fun deism_N : N;-fun deist_N : N;-fun deity_N : N;-fun deject_V2 : V2;-fun dejectedly_Adv : Adv;-fun dejection_N : N;-fun dekko_N : N;-fun delaware_PN : PN;-fun delay_N : N;-fun delay_V : V;-fun delay_V2 : V2;-fun delayed_action_A : A;-fun delayed_action_N : N;-fun delectable_A : A;-fun delectation_N : N;-fun delegacy_N : N;-fun delegate_N : N;-fun delegate_V2 : V2;-fun delegation_N : N;-fun delete_V2 : V2;-fun deleterious_A : A;-fun deletion_N : N;-fun delf_N : N;-fun delft_N : N;-fun delhi_PN : PN;-fun deliberate_A : A;-fun deliberate_V : V;-fun deliberate_V2 : V2;-fun deliberately_Adv : Adv;-fun deliberation_N : N;-fun deliberative_A : A;-fun delicacy_N : N;-fun delicate_A : A;-fun delicately_Adv : Adv;-fun delicatessen_N : N;-fun delicious_A : A;-fun deliciously_Adv : Adv;-fun delight_N : N;-fun delight_V : V;-fun delight_V2 : V2;-fun delightedly_Adv : Adv;-fun delightful_A : A;-fun delightfully_Adv : Adv;-fun delimit_V2 : V2;-fun delimitate_V2 : V2;-fun delimitation_N : N;-fun delineate_V2 : V2;-fun delineation_N : N;-fun delinquency_N : N;-fun delinquent_A : A;-fun delinquent_N : N;-fun deliquescent_A : A;-fun delirious_A : A;-fun deliriously_Adv : Adv;-fun delirium_N : N;-fun delirium_tremens_N : N;-fun deliver_V2 : V2;-fun deliverance_N : N;-fun deliverer_N : N;-fun delivery_N : N;-fun dell_N : N;-fun delouse_V2 : V2;-fun delphic_A : A;-fun delphinium_N : N;-fun delta_N : N;-fun delude_V2 : V2;-fun deluge_N : N;-fun deluge_V2 : V2;-fun delusion_N : N;-fun delusive_A : A;-fun delusively_Adv : Adv;-fun delve_V : V;-fun delve_V2 : V2;-fun demagnetization_N : N;-fun demagnetize_V2 : V2;-fun demagogic_A : A;-fun demagogue_N : N;-fun demagogy_N : N;-fun demand_N : N;-fun demand_V2 : V2;-fun demarcate_V2 : V2;-fun demarcation_N : N;-fun demean_V2 : V2;-fun demeanour_N : N;-fun demented_A : A;-fun dementedly_Adv : Adv;-fun demerara_N : N;-fun demerit_N : N;-fun demesne_N : N;-fun demigod_N : N;-fun demijohn_N : N;-fun demilitarize_V2 : V2;-fun demimondaine_N : N;-fun demimonde_N : N;-fun demise_N : N;-fun demist_V2 : V2;-fun demister_N : N;-fun demo_N : N;-fun demob_V2 : V2;-fun demobilization_N : N;-fun demobilize_V2 : V2;-fun democracy_N : N;-fun democrat_N : N;-fun democratic_A : A;-fun democratically_Adv : Adv;-fun democratization_N : N;-fun democratize_V2 : V2;-fun demographic_A : A;-fun demography_N : N;-fun demolish_V2 : V2;-fun demolition_N : N;-fun demon_N : N;-fun demonetization_N : N;-fun demonetize_V2 : V2;-fun demoniac_A : A;-fun demoniac_N : N;-fun demoniacal_A : A;-fun demoniacally_Adv : Adv;-fun demonic_A : A;-fun demonstrability_N : N;-fun demonstrable_A : A;-fun demonstrably_Adv : Adv;-fun demonstrate_V : V;-fun demonstrate_V2 : V2;-fun demonstration_N : N;-fun demonstrative_A : A;-fun demonstratively_Adv : Adv;-fun demonstrator_N : N;-fun demoralization_N : N;-fun demoralize_V2 : V2;-fun demote_V2 : V2;-fun demotic_A : A;-fun demotion_N : N;-fun demur_N : N;-fun demur_V : V;-fun demure_A : A;-fun demurely_Adv : Adv;-fun demureness_N : N;-fun den_N : N;-fun denain_PN : PN;-fun denary_A : A;-fun denationalization_N : N;-fun denationalize_V2 : V2;-fun denatured_A : A;-fun denbigh_PN : PN;-fun deniable_A : A;-fun denial_N : N;-fun denier_N : N;-fun denigrate_V2 : V2;-fun denigration_N : N;-fun denim_N : N;-fun denis_PN : PN;-fun denise_PN : PN;-fun denizen_N : N;-fun denmark_PN : PN;-fun dennis_PN : PN;-fun denny_PN : PN;-fun denominate_V2 : V2;-fun denomination_N : N;-fun denominational_A : A;-fun denominator_N : N;-fun denote_V2 : V2;-fun denounce_V2 : V2;-fun dense_A : A;-fun densely_Adv : Adv;-fun denseness_N : N;-fun density_N : N;-fun dent_N : N;-fun dent_V : V;-fun dent_V2 : V2;-fun dental_A : A;-fun dentifrice_N : N;-fun dentist_N : N;-fun dentistry_N : N;-fun denture_N : N;-fun denudation_N : N;-fun denude_V2 : V2;-fun denunciation_N : N;-fun denver_PN : PN;-fun deny_V2 : V2;-fun deodar_N : N;-fun deodorant_N : N;-fun deodorize_V2 : V2;-fun dep_PN : PN;-fun depart_V : V;-fun departed_A : A;-fun departed_N : N;-fun department_N : N;-fun departmental_A : A;-fun departure_N : N;-fun depend_V : V;-fun dependable_A : A;-fun dependant_N : N;-fun dependence_N : N;-fun dependency_N : N;-fun dependent_A : A;-fun dependent_N : N;-fun depict_V2 : V2;-fun depiction_N : N;-fun depilatory_A : A;-fun depilatory_N : N;-fun deplane_V : V;-fun deplete_V2 : V2;-fun depletion_N : N;-fun deplorable_A : A;-fun deplorably_Adv : Adv;-fun deplore_V2 : V2;-fun deploy_V : V;-fun deploy_V2 : V2;-fun deployment_N : N;-fun deponent_N : N;-fun depopulate_V2 : V2;-fun depopulation_N : N;-fun deport_V2 : V2;-fun deportation_N : N;-fun deportee_N : N;-fun deportment_N : N;-fun depose_V : V;-fun depose_V2 : V2;-fun deposit_N : N;-fun deposit_V2 : V2;-fun deposition_N : N;-fun depositor_N : N;-fun depository_N : N;-fun depot_N : N;-fun deprave_V2 : V2;-fun depravity_N : N;-fun deprecate_V2 : V2;-fun deprecation_N : N;-fun depreciate_V : V;-fun depreciate_V2 : V2;-fun depreciation_N : N;-fun depreciatory_A : A;-fun depredation_N : N;-fun depress_V2 : V2;-fun depression_N : N;-fun depressive_A : A;-fun depressive_N : N;-fun deprivation_N : N;-fun deprive_V2 : V2;-fun deprived_A : A;-fun dept_PN : PN;-fun depth_N : N;-fun depth_bomb_N : N;-fun depth_charge_N : N;-fun deputation_N : N;-fun depute_V2 : V2;-fun deputize_V : V;-fun deputy_N : N;-fun derail_V2 : V2;-fun derailment_N : N;-fun derange_V2 : V2;-fun derangement_N : N;-fun derate_V2 : V2;-fun derby_N : N;-fun derby_PN : PN;-fun derbyshire_PN : PN;-fun dereham_PN : PN;-fun derek_PN : PN;-fun derelict_A : A;-fun dereliction_N : N;-fun derequisition_V2 : V2;-fun derestrict_V2 : V2;-fun deride_V2 : V2;-fun derision_N : N;-fun derisive_A : A;-fun derisively_Adv : Adv;-fun derisory_A : A;-fun derivation_N : N;-fun derivative_A : A;-fun derivative_N : N;-fun derive_V : V;-fun derive_V2 : V2;-fun dermatitis_N : N;-fun dermatologist_N : N;-fun dermatology_N : N;-fun derogate_V : V;-fun derogation_N : N;-fun derogatory_A : A;-fun derrick_N : N;-fun derring_do_N : N;-fun derv_N : N;-fun dervish_N : N;-fun des_N : N;-fun des_PN : PN;-fun desalinate_V2 : V2;-fun desalination_N : N;-fun desalinization_N : N;-fun desalinize_V2 : V2;-fun desalt_V2 : V2;-fun descale_V2 : V2;-fun descant_N : N;-fun descant_V : V;-fun descend_V : V;-fun descend_V2 : V2;-fun descendant_N : N;-fun descent_N : N;-fun describe_V2 : V2;-fun description_N : N;-fun descriptive_A : A;-fun descriptively_Adv : Adv;-fun descry_V2 : V2;-fun desecrate_V2 : V2;-fun desecration_N : N;-fun desegregate_V2 : V2;-fun desegregation_N : N;-fun desensitization_N : N;-fun desensitize_V2 : V2;-fun desert_A : A;-fun desert_N : N;-fun desert_V : V;-fun desert_V2 : V2;-fun deserter_N : N;-fun desertion_N : N;-fun deserve_V : V;-fun deserve_V2 : V2;-fun deserved_A : A;-fun deservedly_Adv : Adv;-fun deserving_A : A;-fun desiccant_N : N;-fun desiccate_V2 : V2;-fun desideratum_N : N;-fun design_N : N;-fun design_V : V;-fun design_V2 : V2;-fun designate_A : A;-fun designate_V2 : V2;-fun designation_N : N;-fun designedly_Adv : Adv;-fun designer_N : N;-fun designing_A : A;-fun designing_N : N;-fun desirability_N : N;-fun desirable_A : A;-fun desire_N : N;-fun desire_V2 : V2;-fun desirous_A : A;-fun desist_V : V;-fun desk_N : N;-fun desmond_PN : PN;-fun desolate_A : A;-fun desolate_V2 : V2;-fun desolately_Adv : Adv;-fun desolation_N : N;-fun despair_N : N;-fun despair_V : V;-fun despairingly_Adv : Adv;-fun despatch_N : N;-fun despatch_V2 : V2;-fun desperado_N : N;-fun desperate_A : A;-fun desperately_Adv : Adv;-fun desperation_N : N;-fun despicable_A : A;-fun despicably_Adv : Adv;-fun despise_V2 : V2;-fun despite_N : N;-fun despiteful_A : A;-fun despitefully_Adv : Adv;-fun despoil_V2 : V2;-fun despondency_N : N;-fun despondent_A : A;-fun despondently_Adv : Adv;-fun despot_N : N;-fun despotic_A : A;-fun despotism_N : N;-fun dessau_PN : PN;-fun dessert_N : N;-fun dessertspoon_N : N;-fun dessertspoonful_N : N;-fun destination_N : N;-fun destine_V2 : V2;-fun destiny_N : N;-fun destitute_A : A;-fun destitution_N : N;-fun destroy_V2 : V2;-fun destroyer_N : N;-fun destructibility_N : N;-fun destructible_A : A;-fun destruction_N : N;-fun destructive_A : A;-fun destructively_Adv : Adv;-fun destructiveness_N : N;-fun desuetude_N : N;-fun desultory_A : A;-fun detach_V2 : V2;-fun detachable_A : A;-fun detached_A : A;-fun detachment_N : N;-fun detail_N : N;-fun detail_V2 : V2;-fun detain_V2 : V2;-fun detainee_N : N;-fun detect_V2 : V2;-fun detectable_A : A;-fun detection_N : N;-fun detective_N : N;-fun detector_N : N;-fun detention_N : N;-fun deter_V2 : V2;-fun detergent_A : A;-fun detergent_N : N;-fun deteriorate_V : V;-fun deteriorate_V2 : V2;-fun deterioration_N : N;-fun determinable_A : A;-fun determinant_A : A;-fun determinant_N : N;-fun determinate_A : A;-fun determination_N : N;-fun determinative_A : A;-fun determinative_N : N;-fun determine_V : V;-fun determine_V2 : V2;-fun determinedly_Adv : Adv;-fun determiner_N : N;-fun deterrent_A : A;-fun deterrent_N : N;-fun detest_V2 : V2;-fun detestable_A : A;-fun detestably_Adv : Adv;-fun detestation_N : N;-fun dethrone_V2 : V2;-fun dethronement_N : N;-fun detonate_V : V;-fun detonate_V2 : V2;-fun detonation_N : N;-fun detonator_N : N;-fun detour_N : N;-fun detour_V2 : V2;-fun detract_V : V;-fun detraction_N : N;-fun detractor_N : N;-fun detrain_V : V;-fun detrain_V2 : V2;-fun detribalization_N : N;-fun detribalize_V2 : V2;-fun detriment_N : N;-fun detrimental_A : A;-fun detrimentally_Adv : Adv;-fun detritus_N : N;-fun detroit_PN : PN;-fun deuce_N : N;-fun deuced_A : A;-fun deucedly_Adv : Adv;-fun deutschmark_N : N;-fun devaluate_V2 : V2;-fun devaluation_N : N;-fun devalue_V2 : V2;-fun devastate_V2 : V2;-fun devastation_N : N;-fun develop_V : V;-fun develop_V2 : V2;-fun developer_N : N;-fun development_N : N;-fun deviant_A : A;-fun deviant_N : N;-fun deviate_V : V;-fun deviation_N : N;-fun deviationism_N : N;-fun deviationist_N : N;-fun device_N : N;-fun devil_N : N;-fun devil_V : V;-fun devil_V2 : V2;-fun devil_may_care_A : A;-fun devilish_A : A;-fun devilish_Adv : Adv;-fun devilishly_Adv : Adv;-fun devilment_N : N;-fun devilry_N : N;-fun devious_A : A;-fun deviously_Adv : Adv;-fun deviousness_N : N;-fun devise_V2 : V2;-fun devitalization_N : N;-fun devitalize_V2 : V2;-fun devizes_PN : PN;-fun devoid_A : A;-fun devolution_N : N;-fun devolve_V : V;-fun devolve_V2 : V2;-fun devon_PN : PN;-fun devote_V2 : V2;-fun devoted_A : A;-fun devotedly_Adv : Adv;-fun devotee_N : N;-fun devotion_N : N;-fun devotional_A : A;-fun devour_V2 : V2;-fun devout_A : A;-fun devoutly_Adv : Adv;-fun devoutness_N : N;-fun dew_N : N;-fun dewlap_N : N;-fun dewsbury_PN : PN;-fun dewy_A : A;-fun dexterity_N : N;-fun dexterous_A : A;-fun dexterously_Adv : Adv;-fun dextrose_N : N;-fun dextrous_A : A;-fun dg_PN : PN;-fun dhoti_N : N;-fun dhow_N : N;-fun di_PN : PN;-fun diabetes_N : N;-fun diabetic_A : A;-fun diabetic_N : N;-fun diabolic_A : A;-fun diabolical_A : A;-fun diabolically_Adv : Adv;-fun diacritic_A : A;-fun diacritic_N : N;-fun diacritical_A : A;-fun diadem_N : N;-fun diaeresis_N : N;-fun diagnose_V2 : V2;-fun diagnosis_N : N;-fun diagnostic_A : A;-fun diagonal_A : A;-fun diagonal_N : N;-fun diagonally_Adv : Adv;-fun diagram_N : N;-fun diagrammatic_A : A;-fun diagrammatical_A : A;-fun diagrammatically_Adv : Adv;-fun dial_N : N;-fun dial_V2 : V2;-fun dialect_N : N;-fun dialectal_A : A;-fun dialectic_N : N;-fun dialectical_A : A;-fun dialectician_N : N;-fun dialogue_N : N;-fun diameter_N : N;-fun diametrically_Adv : Adv;-fun diamond_N : N;-fun diana_PN : PN;-fun diaper_N : N;-fun diaphanous_A : A;-fun diaphragm_N : N;-fun diarchy_N : N;-fun diarist_N : N;-fun diarrhea_N : N;-fun diarrhoea_N : N;-fun diary_N : N;-fun diaspora_N : N;-fun diatonic_A : A;-fun diatribe_N : N;-fun dibber_N : N;-fun dibble_N : N;-fun dibble_V2 : V2;-fun dice_N : N;-fun dice_V : V;-fun dice_V2 : V2;-fun dice_box_N : N;-fun dicey_A : A;-fun dichotomy_N : N;-fun dick_PN : PN;-fun dickens_N : N;-fun dicker_V : V;-fun dickey_N : N;-fun dicky_A : A;-fun dicky_N : N;-fun dicky_PN : PN;-fun dicky_seat_N : N;-fun dickybird_N : N;-fun dictaphone_N : N;-fun dictate_N : N;-fun dictate_V : V;-fun dictate_V2 : V2;-fun dictation_N : N;-fun dictator_N : N;-fun dictatorial_A : A;-fun dictatorially_Adv : Adv;-fun dictatorship_N : N;-fun diction_N : N;-fun dictionary_N : N;-fun dictum_N : N;-fun didactic_A : A;-fun didactically_Adv : Adv;-fun didcot_PN : PN;-fun diddle_V2 : V2;-fun die_N : N;-fun die_V : V;-fun die_cast_A : A;-fun die_hard_N : N;-fun dieresis_N : N;-fun diesel_N : N;-fun diet_N : N;-fun diet_V : V;-fun diet_V2 : V2;-fun dietary_A : A;-fun dietetics_N : N;-fun dietician_N : N;-fun dietitian_N : N;-fun differ_V : V;-fun difference_N : N;-fun different_A : A;-fun differential_A : A;-fun differential_N : N;-fun differentially_Adv : Adv;-fun differentiate_V2 : V2;-fun differentiation_N : N;-fun differently_Adv : Adv;-fun difficult_A : A;-fun difficulty_N : N;-fun diffidence_N : N;-fun diffident_A : A;-fun diffidently_Adv : Adv;-fun diffract_V2 : V2;-fun diffraction_N : N;-fun diffuse_A : A;-fun diffuse_V : V;-fun diffuse_V2 : V2;-fun diffusely_Adv : Adv;-fun diffuseness_N : N;-fun diffusion_N : N;-fun dig_N : N;-fun dig_V : V;-fun dig_V2 : V2;-fun digest_N : N;-fun digest_V : V;-fun digest_V2 : V2;-fun digestibility_N : N;-fun digestible_A : A;-fun digestion_N : N;-fun digestive_A : A;-fun digger_N : N;-fun digging_N : N;-fun digit_N : N;-fun digital_A : A;-fun digitally_Adv : Adv;-fun dignified_A : A;-fun dignify_V2 : V2;-fun dignitary_N : N;-fun dignity_N : N;-fun digraph_N : N;-fun digress_V : V;-fun digression_N : N;-fun dijon_PN : PN;-fun dike_N : N;-fun dike_V : V;-fun dike_V2 : V2;-fun dilapidated_A : A;-fun dilapidation_N : N;-fun dilate_V : V;-fun dilate_V2 : V2;-fun dilation_N : N;-fun dilatory_A : A;-fun dilemma_N : N;-fun dilettante_N : N;-fun diligence_N : N;-fun diligent_A : A;-fun diligently_Adv : Adv;-fun dill_N : N;-fun dilly_dally_V : V;-fun dilute_A : A;-fun dilute_V2 : V2;-fun dilution_N : N;-fun dim_A : A;-fun dim_V : V;-fun dim_V2 : V2;-fun dime_N : N;-fun dimension_N : N;-fun dimensional_A : A;-fun diminish_V : V;-fun diminish_V2 : V2;-fun diminuendo_N : N;-fun diminution_N : N;-fun diminutive_A : A;-fun diminutive_N : N;-fun dimity_N : N;-fun dimly_Adv : Adv;-fun dimness_N : N;-fun dimple_N : N;-fun dimple_V : V;-fun dimple_V2 : V2;-fun din_N : N;-fun din_V : V;-fun din_V2 : V2;-fun dinar_N : N;-fun dine_V : V;-fun dine_V2 : V2;-fun diner_N : N;-fun ding_dong_Adv : Adv;-fun ding_dong_N : N;-fun dinghy_N : N;-fun dingily_Adv : Adv;-fun dinginess_N : N;-fun dingle_N : N;-fun dingle_PN : PN;-fun dingy_A : A;-fun dining_car_N : N;-fun dining_room_N : N;-fun dining_table_N : N;-fun dinky_A : A;-fun dinner_N : N;-fun dinner_jacket_N : N;-fun dinner_party_N : N;-fun dinner_service_N : N;-fun dinner_set_N : N;-fun dinnington_PN : PN;-fun dinosaur_N : N;-fun dint_N : N;-fun diocesan_A : A;-fun diocesan_N : N;-fun diocese_N : N;-fun dioxide_N : N;-fun dip_N : N;-fun dip_V : V;-fun dip_V2 : V2;-fun dip_ed_N : N;-fun diphtheria_N : N;-fun diphthong_N : N;-fun diploma_N : N;-fun diplomacy_N : N;-fun diplomat_N : N;-fun diplomatic_A : A;-fun diplomatically_Adv : Adv;-fun diplomatist_N : N;-fun dipper_N : N;-fun dipsomania_N : N;-fun dipsomaniac_N : N;-fun dipstick_N : N;-fun diptych_N : N;-fun dir_N : N;-fun dire_A : A;-fun direct_A : A;-fun direct_Adv : Adv;-fun direct_V : V;-fun direct_V2 : V2;-fun direction_N : N;-fun direction_finder_N : N;-fun directional_A : A;-fun directive_N : N;-fun directly_Adv : Adv;-fun directness_N : N;-fun director_N : N;-fun directorate_N : N;-fun directorship_N : N;-fun directory_N : N;-fun direful_A : A;-fun direfully_Adv : Adv;-fun dirge_N : N;-fun dirigible_N : N;-fun dirk_N : N;-fun dirndl_N : N;-fun dirt_N : N;-fun dirt_cheap_A : A;-fun dirt_track_N : N;-fun dirtily_Adv : Adv;-fun dirty_A : A;-fun dirty_V : V;-fun dirty_V2 : V2;-fun disability_N : N;-fun disable_V2 : V2;-fun disablement_N : N;-fun disabuse_V2 : V2;-fun disadvantage_N : N;-fun disadvantageous_A : A;-fun disadvantageously_Adv : Adv;-fun disaffected_A : A;-fun disaffection_N : N;-fun disafforest_V2 : V2;-fun disagree_V2 : V2;-fun disagreeable_A : A;-fun disagreeableness_N : N;-fun disagreeably_Adv : Adv;-fun disagreement_N : N;-fun disallow_V2 : V2;-fun disappear_V : V;-fun disappearance_N : N;-fun disappoint_V2 : V2;-fun disappointed_A : A;-fun disappointedly_Adv : Adv;-fun disappointing_A : A;-fun disappointingly_Adv : Adv;-fun disappointment_N : N;-fun disapprobation_N : N;-fun disapproval_N : N;-fun disapprove_V : V;-fun disapprove_V2 : V2;-fun disapprovingly_Adv : Adv;-fun disarm_V : V;-fun disarm_V2 : V2;-fun disarmament_N : N;-fun disarrange_V2 : V2;-fun disarrangement_N : N;-fun disarray_N : N;-fun disarray_V2 : V2;-fun disassociate_V2 : V2;-fun disaster_N : N;-fun disastrous_A : A;-fun disastrously_Adv : Adv;-fun disavow_V2 : V2;-fun disavowal_N : N;-fun disband_V : V;-fun disband_V2 : V2;-fun disbandment_N : N;-fun disbelief_N : N;-fun disbelieve_V : V;-fun disbelieve_V2 : V2;-fun disbelievingly_Adv : Adv;-fun disbud_V2 : V2;-fun disburden_V2 : V2;-fun disburse_V : V;-fun disburse_V2 : V2;-fun disbursement_N : N;-fun disc_N : N;-fun discard_N : N;-fun discard_V2 : V2;-fun discern_V2 : V2;-fun discernible_A : A;-fun discerning_A : A;-fun discernment_N : N;-fun discharge_N : N;-fun discharge_V : V;-fun discharge_V2 : V2;-fun disciple_N : N;-fun disciplinarian_N : N;-fun disciplinary_A : A;-fun discipline_N : N;-fun discipline_V2 : V2;-fun disclaim_V2 : V2;-fun disclaimer_N : N;-fun disclose_V2 : V2;-fun disclosure_N : N;-fun disco_N : N;-fun discolour_V : V;-fun discolour_V2 : V2;-fun discolouration_N : N;-fun discomfit_V2 : V2;-fun discomfiture_N : N;-fun discomfort_N : N;-fun discommode_V2 : V2;-fun discompose_V2 : V2;-fun discomposure_N : N;-fun disconcert_V2 : V2;-fun disconcertingly_Adv : Adv;-fun disconnect_V2 : V2;-fun disconnected_A : A;-fun disconsolate_A : A;-fun disconsolately_Adv : Adv;-fun discontent_N : N;-fun discontent_V2 : V2;-fun discontentedly_Adv : Adv;-fun discontinuance_N : N;-fun discontinue_V : V;-fun discontinue_V2 : V2;-fun discontinuity_N : N;-fun discontinuous_A : A;-fun discord_N : N;-fun discordance_N : N;-fun discordant_A : A;-fun discordantly_Adv : Adv;-fun discotheque_N : N;-fun discount_N : N;-fun discount_V2 : V2;-fun discountenance_V2 : V2;-fun discourage_V2 : V2;-fun discouragement_N : N;-fun discourse_N : N;-fun discourse_V : V;-fun discourteous_A : A;-fun discourteously_Adv : Adv;-fun discourtesy_N : N;-fun discover_V2 : V2;-fun discoverer_N : N;-fun discovery_N : N;-fun discredit_N : N;-fun discredit_V2 : V2;-fun discreditable_A : A;-fun discreditably_Adv : Adv;-fun discreet_A : A;-fun discreetly_Adv : Adv;-fun discrepancy_N : N;-fun discrete_A : A;-fun discreteness_N : N;-fun discretion_N : N;-fun discretionary_A : A;-fun discriminate_V : V;-fun discriminate_V2 : V2;-fun discriminating_A : A;-fun discrimination_N : N;-fun discriminatory_A : A;-fun discursive_A : A;-fun discursively_Adv : Adv;-fun discursiveness_N : N;-fun discus_N : N;-fun discuss_V2 : V2;-fun discussion_N : N;-fun disdain_N : N;-fun disdain_V2 : V2;-fun disdainful_A : A;-fun disdainfully_Adv : Adv;-fun disease_N : N;-fun diseased_A : A;-fun disembark_V : V;-fun disembark_V2 : V2;-fun disembarkation_N : N;-fun disembarrass_V2 : V2;-fun disembarrassment_N : N;-fun disembody_V2 : V2;-fun disembowel_V2 : V2;-fun disenchant_V2 : V2;-fun disenchantment_N : N;-fun disencumber_V2 : V2;-fun disenfranchise_V2 : V2;-fun disengage_V : V;-fun disengage_V2 : V2;-fun disengagement_N : N;-fun disentangle_V : V;-fun disentangle_V2 : V2;-fun disentanglement_N : N;-fun disequilibrium_N : N;-fun disestablish_V2 : V2;-fun disestablishment_N : N;-fun disfavour_N : N;-fun disfavour_V2 : V2;-fun disfigure_V2 : V2;-fun disfigurement_N : N;-fun disforest_V2 : V2;-fun disfranchise_V2 : V2;-fun disfranchisement_N : N;-fun disgorge_V2 : V2;-fun disgrace_N : N;-fun disgrace_V2 : V2;-fun disgraceful_A : A;-fun disgracefully_Adv : Adv;-fun disgruntled_A : A;-fun disguise_N : N;-fun disguise_V2 : V2;-fun disgust_N : N;-fun disgust_V2 : V2;-fun disgustedly_Adv : Adv;-fun disgusting_A : A;-fun disgustingly_Adv : Adv;-fun dish_N : N;-fun dish_V2 : V2;-fun dishabille_N : N;-fun disharmonious_A : A;-fun disharmony_N : N;-fun dishcloth_N : N;-fun dishearten_V2 : V2;-fun dishevelled_A : A;-fun dishful_N : N;-fun dishonest_A : A;-fun dishonestly_Adv : Adv;-fun dishonesty_N : N;-fun dishonour_N : N;-fun dishonour_V2 : V2;-fun dishonourable_A : A;-fun dishonourably_Adv : Adv;-fun dishwasher_N : N;-fun dishwater_N : N;-fun dishy_A : A;-fun disillusion_N : N;-fun disillusion_V2 : V2;-fun disillusionment_N : N;-fun disincentive_N : N;-fun disinclination_N : N;-fun disincline_V2 : V2;-fun disinfect_V2 : V2;-fun disinfectant_A : A;-fun disinfectant_N : N;-fun disinfection_N : N;-fun disinfest_V2 : V2;-fun disinfestation_N : N;-fun disinflation_N : N;-fun disingenuous_A : A;-fun disingenuously_Adv : Adv;-fun disingenuousness_N : N;-fun disinherit_V2 : V2;-fun disinheritance_N : N;-fun disintegrate_V : V;-fun disintegrate_V2 : V2;-fun disintegration_N : N;-fun disinter_V2 : V2;-fun disinterested_A : A;-fun disinterestedly_Adv : Adv;-fun disinterestedness_N : N;-fun disinterment_N : N;-fun disjoint_V2 : V2;-fun disjointed_A : A;-fun disjointedly_Adv : Adv;-fun disjointedness_N : N;-fun disjunctive_A : A;-fun disk_N : N;-fun dislike_N : N;-fun dislike_V2 : V2;-fun dislocate_V2 : V2;-fun dislocation_N : N;-fun dislodge_V2 : V2;-fun dislodgement_N : N;-fun disloyal_A : A;-fun disloyally_Adv : Adv;-fun disloyalty_N : N;-fun dismal_A : A;-fun dismally_Adv : Adv;-fun dismantle_V2 : V2;-fun dismantlement_N : N;-fun dismay_N : N;-fun dismay_V2 : V2;-fun dismember_V2 : V2;-fun dismemberment_N : N;-fun dismiss_V2 : V2;-fun dismissal_N : N;-fun dismount_V : V;-fun dismount_V2 : V2;-fun dismounted_A : A;-fun disobedience_N : N;-fun disobedient_A : A;-fun disobediently_Adv : Adv;-fun disobey_V2 : V2;-fun disoblige_V2 : V2;-fun disorder_N : N;-fun disorder_V2 : V2;-fun disorderly_A : A;-fun disorganization_N : N;-fun disorganize_V2 : V2;-fun disorient_V2 : V2;-fun disorientate_V2 : V2;-fun disown_V2 : V2;-fun disparage_V2 : V2;-fun disparagement_N : N;-fun disparagingly_Adv : Adv;-fun disparate_A : A;-fun disparity_N : N;-fun dispassionate_A : A;-fun dispassionately_Adv : Adv;-fun dispassionateness_N : N;-fun dispatch_N : N;-fun dispatch_V2 : V2;-fun dispatch_box_N : N;-fun dispatch_rider_N : N;-fun dispel_V2 : V2;-fun dispensable_A : A;-fun dispensary_N : N;-fun dispensation_N : N;-fun dispense_V : V;-fun dispense_V2 : V2;-fun dispenser_N : N;-fun dispersal_N : N;-fun disperse_V : V;-fun disperse_V2 : V2;-fun dispersion_N : N;-fun dispirit_V2 : V2;-fun dispiritedly_Adv : Adv;-fun displace_V2 : V2;-fun displacement_N : N;-fun display_N : N;-fun display_V2 : V2;-fun displease_V2 : V2;-fun displeasing_A : A;-fun displeasingly_Adv : Adv;-fun displeasure_N : N;-fun disport_V2 : V2;-fun disposable_A : A;-fun disposal_N : N;-fun dispose_V : V;-fun dispose_V2 : V2;-fun disposition_N : N;-fun dispossess_V2 : V2;-fun dispossession_N : N;-fun disproof_N : N;-fun disproportion_N : N;-fun disproportionate_A : A;-fun disproportionately_Adv : Adv;-fun disprove_V2 : V2;-fun disputable_A : A;-fun disputant_N : N;-fun disputation_N : N;-fun disputatious_A : A;-fun disputatiously_Adv : Adv;-fun dispute_N : N;-fun dispute_V : V;-fun dispute_V2 : V2;-fun disqualification_N : N;-fun disqualify_V2 : V2;-fun disquiet_N : N;-fun disquiet_V2 : V2;-fun disquieting_A : A;-fun disquietingly_Adv : Adv;-fun disquietude_N : N;-fun disquisition_N : N;-fun disregard_N : N;-fun disregard_V2 : V2;-fun disrepair_N : N;-fun disreputable_A : A;-fun disreputably_Adv : Adv;-fun disrepute_N : N;-fun disrespect_N : N;-fun disrespectful_A : A;-fun disrespectfully_Adv : Adv;-fun disrobe_V : V;-fun disrobe_V2 : V2;-fun disrupt_V2 : V2;-fun disruption_N : N;-fun disruptive_A : A;-fun dissatisfaction_N : N;-fun dissatisfy_V2 : V2;-fun dissect_V2 : V2;-fun dissection_N : N;-fun dissemble_V : V;-fun dissemble_V2 : V2;-fun dissembler_N : N;-fun disseminate_V2 : V2;-fun dissemination_N : N;-fun dissension_N : N;-fun dissent_N : N;-fun dissent_V : V;-fun dissenter_N : N;-fun dissertation_N : N;-fun disservice_N : N;-fun dissever_V2 : V2;-fun dissidence_N : N;-fun dissident_A : A;-fun dissident_N : N;-fun dissimilar_A : A;-fun dissimilarity_N : N;-fun dissimilitude_N : N;-fun dissimulate_V : V;-fun dissimulate_V2 : V2;-fun dissimulation_N : N;-fun dissipate_V : V;-fun dissipate_V2 : V2;-fun dissipated_A : A;-fun dissipation_N : N;-fun dissociate_V2 : V2;-fun dissociation_N : N;-fun dissolubility_N : N;-fun dissoluble_A : A;-fun dissolute_A : A;-fun dissolutely_Adv : Adv;-fun dissolution_N : N;-fun dissolve_V : V;-fun dissolve_V2 : V2;-fun dissonance_N : N;-fun dissonant_A : A;-fun dissuade_V2 : V2;-fun dissuasion_N : N;-fun dissyllable_N : N;-fun distaff_N : N;-fun distance_N : N;-fun distance_V2 : V2;-fun distant_A : A;-fun distantly_Adv : Adv;-fun distaste_N : N;-fun distasteful_A : A;-fun distastefully_Adv : Adv;-fun distastefulness_N : N;-fun distemper_N : N;-fun distemper_V2 : V2;-fun distend_V : V;-fun distend_V2 : V2;-fun distension_N : N;-fun distil_V : V;-fun distil_V2 : V2;-fun distillation_N : N;-fun distiller_N : N;-fun distillery_N : N;-fun distinct_A : A;-fun distinction_N : N;-fun distinctive_A : A;-fun distinctively_Adv : Adv;-fun distinctiveness_N : N;-fun distinctly_Adv : Adv;-fun distinctness_N : N;-fun distinguish_V : V;-fun distinguish_V2 : V2;-fun distinguishable_A : A;-fun distinguished_A : A;-fun distort_V2 : V2;-fun distortion_N : N;-fun distract_V2 : V2;-fun distracted_A : A;-fun distractedly_Adv : Adv;-fun distraction_N : N;-fun distrain_V : V;-fun distraint_N : N;-fun distrait_A : A;-fun distraught_A : A;-fun distress_N : N;-fun distress_V2 : V2;-fun distressful_A : A;-fun distressfully_Adv : Adv;-fun distressing_A : A;-fun distressingly_Adv : Adv;-fun distribute_V2 : V2;-fun distribution_N : N;-fun distributive_A : A;-fun distributively_Adv : Adv;-fun distributor_N : N;-fun district_N : N;-fun distrust_N : N;-fun distrust_V2 : V2;-fun distrustful_A : A;-fun distrustfully_Adv : Adv;-fun distrustfulness_N : N;-fun disturb_V2 : V2;-fun disturbance_N : N;-fun disturbingly_Adv : Adv;-fun disunion_N : N;-fun disunite_V : V;-fun disunite_V2 : V2;-fun disunity_N : N;-fun disuse_N : N;-fun disused_A : A;-fun disyllabic_A : A;-fun disyllable_N : N;-fun ditch_N : N;-fun ditch_V : V;-fun ditch_V2 : V2;-fun dither_N : N;-fun dither_V : V;-fun ditto_N : N;-fun ditty_N : N;-fun diurnal_A : A;-fun divagate_V : V;-fun divagation_N : N;-fun divan_N : N;-fun divan_bed_N : N;-fun dive_N : N;-fun dive_V : V;-fun dive_bomb_V : V;-fun dive_bomb_V2 : V2;-fun dive_bomber_N : N;-fun diver_N : N;-fun diverge_V : V;-fun divergence_N : N;-fun divergency_N : N;-fun divergent_A : A;-fun divers_A : A;-fun diverse_A : A;-fun diversely_Adv : Adv;-fun diversification_N : N;-fun diversify_V2 : V2;-fun diversion_N : N;-fun diversionary_A : A;-fun diversionist_N : N;-fun diversity_N : N;-fun divert_V2 : V2;-fun diverting_A : A;-fun divertingly_Adv : Adv;-fun dives_PN : PN;-fun divest_V2 : V2;-fun divide_N : N;-fun divide_V : V;-fun divide_V2 : V2;-fun dividend_N : N;-fun dividend_warrant_N : N;-fun divination_N : N;-fun divine_A : A;-fun divine_N : N;-fun divine_V : V;-fun divine_V2 : V2;-fun divinely_Adv : Adv;-fun diviner_N : N;-fun diving_bell_N : N;-fun diving_board_N : N;-fun diving_dress_N : N;-fun diving_suit_N : N;-fun divinity_N : N;-fun divisible_A : A;-fun division_N : N;-fun divisional_A : A;-fun divisor_N : N;-fun divorce_N : N;-fun divorce_V2 : V2;-fun divorcee_N : N;-fun divot_N : N;-fun divulge_V2 : V2;-fun divulgence_N : N;-fun divvy_N : N;-fun dixie_N : N;-fun diy_N : N;-fun dizzily_Adv : Adv;-fun dizziness_N : N;-fun dizzy_A : A;-fun dizzy_V2 : V2;-fun dj_N : N;-fun djibouti_PN : PN;-fun djiboutian_A : A;-fun djiboutian_N : N;-fun djinn_N : N;-fun djs_N : N;-fun dlitt_N : N;-fun dm_N : N;-fun dna_N : N;-fun dnepropetrovsk_PN : PN;-fun do_N : N;-fun do_V : V;-fun do_V2 : V2;-fun do_gooder_N : N;-fun dobbin_N : N;-fun docile_A : A;-fun docility_N : N;-fun dock_N : N;-fun dock_V : V;-fun dock_V2 : V2;-fun docker_N : N;-fun docket_N : N;-fun docket_V2 : V2;-fun dockyard_N : N;-fun doctor_N : N;-fun doctor_V2 : V2;-fun doctorate_N : N;-fun doctrinaire_A : A;-fun doctrinaire_N : N;-fun doctrinal_A : A;-fun doctrine_N : N;-fun document_N : N;-fun document_V2 : V2;-fun documentary_A : A;-fun documentation_N : N;-fun dodder_V : V;-fun dodderer_N : N;-fun doddering_A : A;-fun doddery_A : A;-fun dodge_N : N;-fun dodge_V : V;-fun dodge_V2 : V2;-fun dodgem_N : N;-fun dodger_N : N;-fun dodgy_A : A;-fun dodo_N : N;-fun doe_N : N;-fun doer_N : N;-fun doff_V2 : V2;-fun dog's_tooth_N : N;-fun dog_N : N;-fun dog_V2 : V2;-fun dog_biscuit_N : N;-fun dog_cart_N : N;-fun dog_collar_N : N;-fun dog_eared_A : A;-fun dog_like_A : A;-fun doge_N : N;-fun dogfish_N : N;-fun dogged_A : A;-fun doggedly_Adv : Adv;-fun doggedness_N : N;-fun doggerel_N : N;-fun doggie_N : N;-fun doggo_Adv : Adv;-fun doggy_N : N;-fun doghouse_N : N;-fun dogma_N : N;-fun dogmatic_A : A;-fun dogmatically_Adv : Adv;-fun dogmatism_N : N;-fun dogmatize_V : V;-fun dogmatize_V2 : V2;-fun dogsbody_N : N;-fun dogtooth_N : N;-fun dogtrot_N : N;-fun dogwatch_N : N;-fun dogwood_N : N;-fun doh_N : N;-fun doily_N : N;-fun dole_N : N;-fun dole_V2 : V2;-fun doleful_A : A;-fun dolefully_Adv : Adv;-fun doll_N : N;-fun doll_V : V;-fun doll_V2 : V2;-fun dollar_N : N;-fun dollop_N : N;-fun dolly_N : N;-fun dolly_PN : PN;-fun dolmen_N : N;-fun dolour_N : N;-fun dolourous_A : A;-fun dolphin_N : N;-fun dolt_N : N;-fun doltish_A : A;-fun domain_N : N;-fun dome_N : N;-fun domed_A : A;-fun domesday_PN : PN;-fun domestic_A : A;-fun domestically_Adv : Adv;-fun domesticate_V2 : V2;-fun domestication_N : N;-fun domesticity_N : N;-fun domicile_N : N;-fun domiciliary_A : A;-fun dominance_N : N;-fun dominant_A : A;-fun dominantly_Adv : Adv;-fun dominate_V : V;-fun dominate_V2 : V2;-fun domination_N : N;-fun domineer_V : V;-fun domineering_A : A;-fun domineeringly_Adv : Adv;-fun dominic_PN : PN;-fun dominica_PN : PN;-fun dominican_A : A;-fun dominican_N : N;-fun dominie_N : N;-fun dominion_N : N;-fun domino_N : N;-fun don't_know_N : N;-fun don_N : N;-fun don_PN : PN;-fun don_V2 : V2;-fun donald_PN : PN;-fun donate_V2 : V2;-fun donation_N : N;-fun doncaster_PN : PN;-fun donegal_PN : PN;-fun donetsk_PN : PN;-fun donjon_N : N;-fun donkey_N : N;-fun donkey_jacket_N : N;-fun donkey_work_N : N;-fun donnish_A : A;-fun donor_N : N;-fun doodle_V : V;-fun doodlebug_N : N;-fun doom_N : N;-fun doom_V2 : V2;-fun doomsday_PN : PN;-fun door_N : N;-fun door_to_door_A : A;-fun doorbell_N : N;-fun doorcase_N : N;-fun doorframe_N : N;-fun doorhandle_N : N;-fun doorkeeper_N : N;-fun doorknob_N : N;-fun doorknocker_N : N;-fun doorman_N : N;-fun doormat_N : N;-fun doornail_N : N;-fun doorplate_N : N;-fun doorpost_N : N;-fun doorstep_N : N;-fun doorstopper_N : N;-fun doorway_N : N;-fun dope_N : N;-fun dope_V2 : V2;-fun dopey_A : A;-fun dora_PN : PN;-fun dorchester_PN : PN;-fun dordrecht_PN : PN;-fun doreen_PN : PN;-fun doric_A : A;-fun doris_PN : PN;-fun dorking_PN : PN;-fun dormant_A : A;-fun dormer_N : N;-fun dormer_window_N : N;-fun dormitory_N : N;-fun dormouse_N : N;-fun dorothy_PN : PN;-fun dorsal_A : A;-fun dorset_PN : PN;-fun dortmund_PN : PN;-fun dory_N : N;-fun dosage_N : N;-fun dose_N : N;-fun dose_V2 : V2;-fun doss_V : V;-fun doss_house_N : N;-fun dosser_N : N;-fun dossier_N : N;-fun dot_N : N;-fun dot_V2 : V2;-fun dotage_N : N;-fun dotard_N : N;-fun dote_V : V;-fun dottle_N : N;-fun dotty_A : A;-fun douai_PN : PN;-fun double_A : A;-fun double_Adv : Adv;-fun double_N : N;-fun double_V : V;-fun double_V2 : V2;-fun double_barrelled_A : A;-fun double_bass_N : N;-fun double_bedded_A : A;-fun double_breasted_A : A;-fun double_check_V2 : V2;-fun double_cross_N : N;-fun double_cross_V2 : V2;-fun double_dealer_N : N;-fun double_dealing_A : A;-fun double_dealing_N : N;-fun double_decker_N : N;-fun double_dutch_N : N;-fun double_dyed_A : A;-fun double_edged_A : A;-fun double_entry_N : N;-fun double_faced_A : A;-fun double_first_N : N;-fun double_jointed_A : A;-fun double_park_V : V;-fun double_park_V2 : V2;-fun double_quick_A : A;-fun double_quick_Adv : Adv;-fun double_spacing_N : N;-fun double_talk_N : N;-fun double_think_N : N;-fun doublet_N : N;-fun doubloon_N : N;-fun doubly_Adv : Adv;-fun doubt_N : N;-fun doubt_V2 : V2;-fun doubtful_A : A;-fun doubtfully_Adv : Adv;-fun doubtless_Adv : Adv;-fun douche_N : N;-fun doug_PN : PN;-fun dough_N : N;-fun doughnut_N : N;-fun doughty_A : A;-fun doughy_A : A;-fun douglas_PN : PN;-fun dour_A : A;-fun dourly_Adv : Adv;-fun douse_V2 : V2;-fun dove_N : N;-fun dovecote_N : N;-fun dover_PN : PN;-fun dovetail_N : N;-fun dovetail_V : V;-fun dovetail_V2 : V2;-fun dowager_N : N;-fun dowdily_Adv : Adv;-fun dowdiness_N : N;-fun dowdy_A : A;-fun dowel_N : N;-fun dower_N : N;-fun dower_V2 : V2;-fun down_Adv : Adv;-fun down_N : N;-fun down_PN : PN;-fun down_V2 : V2;-fun down_and_out_N : N;-fun down_market_A : A;-fun down_to_earth_A : A;-fun downbeat_N : N;-fun downcast_A : A;-fun downfall_N : N;-fun downgrade_V2 : V2;-fun downhearted_A : A;-fun downhill_Adv : Adv;-fun downing_street_PN : PN;-fun downpour_N : N;-fun downright_A : A;-fun downright_Adv : Adv;-fun downrightness_N : N;-fun downstair_A : A;-fun downstairs_A : A;-fun downstairs_Adv : Adv;-fun downstream_A : A;-fun downstream_Adv : Adv;-fun downtown_Adv : Adv;-fun downtrodden_A : A;-fun downward_A : A;-fun downward_Adv : Adv;-fun downwards_Adv : Adv;-fun downy_A : A;-fun dowry_N : N;-fun dowse_V2 : V2;-fun dowser_N : N;-fun dowsing_N : N;-fun doxology_N : N;-fun doyen_N : N;-fun doyley_N : N;-fun doyly_N : N;-fun doz_N : N;-fun doze_N : N;-fun doze_V : V;-fun dozen_N : N;-fun dphil_N : N;-fun dr_PN : PN;-fun drab_A : A;-fun drably_Adv : Adv;-fun drabness_N : N;-fun drachm_N : N;-fun drachma_N : N;-fun draconian_A : A;-fun draft_N : N;-fun draft_V2 : V2;-fun draftee_N : N;-fun drafting_N : N;-fun draftsman_N : N;-fun drag_N : N;-fun drag_V : V;-fun drag_V2 : V2;-fun draggled_A : A;-fun dragnet_N : N;-fun dragoman_N : N;-fun dragon_N : N;-fun dragonfly_N : N;-fun dragoon_N : N;-fun dragoon_V2 : V2;-fun drain_N : N;-fun drain_V : V;-fun drain_V2 : V2;-fun drainage_N : N;-fun drainage_basin_N : N;-fun draining_board_N : N;-fun drainpipe_N : N;-fun drake_N : N;-fun dram_N : N;-fun drama_N : N;-fun dramatic_A : A;-fun dramatically_Adv : Adv;-fun dramatics_N : N;-fun dramatist_N : N;-fun dramatization_N : N;-fun dramatize_V2 : V2;-fun drape_N : N;-fun drape_V2 : V2;-fun draper_N : N;-fun drapery_N : N;-fun drastic_A : A;-fun drastically_Adv : Adv;-fun drat_V2 : V2;-fun draught_N : N;-fun draught_V2 : V2;-fun draught_horse_N : N;-fun draughts_N : N;-fun draughtsman_N : N;-fun draughty_A : A;-fun draw_N : N;-fun draw_V : V;-fun draw_V2 : V2;-fun drawback_N : N;-fun drawbridge_N : N;-fun drawer_N : N;-fun drawing_N : N;-fun drawing_board_N : N;-fun drawing_pin_N : N;-fun drawing_room_N : N;-fun drawl_N : N;-fun drawl_V : V;-fun drawl_V2 : V2;-fun dray_N : N;-fun drayton_PN : PN;-fun dread_N : N;-fun dread_V : V;-fun dread_V2 : V2;-fun dreaded_A : A;-fun dreadful_A : A;-fun dreadfully_Adv : Adv;-fun dreadfulness_N : N;-fun dreadnought_N : N;-fun dream_N : N;-fun dream_V : V;-fun dream_V2 : V2;-fun dreamer_N : N;-fun dreamily_Adv : Adv;-fun dreamland_N : N;-fun dreamless_A : A;-fun dreamlike_A : A;-fun dreamworld_N : N;-fun dreamy_A : A;-fun drear_A : A;-fun drearily_Adv : Adv;-fun dreariness_N : N;-fun dreary_A : A;-fun dredge_N : N;-fun dredge_V : V;-fun dredge_V2 : V2;-fun dredger_N : N;-fun drench_V2 : V2;-fun drenching_N : N;-fun dresden_PN : PN;-fun dress_N : N;-fun dress_V : V;-fun dress_V2 : V2;-fun dress_hanger_N : N;-fun dressage_N : N;-fun dresser_N : N;-fun dressing_N : N;-fun dressing_case_N : N;-fun dressing_down_N : N;-fun dressing_gown_N : N;-fun dressing_table_N : N;-fun dressmaker_N : N;-fun dressmaking_N : N;-fun dressy_A : A;-fun dribble_V : V;-fun dribble_V2 : V2;-fun dribbler_N : N;-fun driblet_N : N;-fun drier_N : N;-fun driffield_PN : PN;-fun drift_N : N;-fun drift_V : V;-fun drift_V2 : V2;-fun drift_ice_N : N;-fun drift_net_N : N;-fun drift_wood_N : N;-fun driftage_N : N;-fun drifter_N : N;-fun drill_N : N;-fun drill_V : V;-fun drill_V2 : V2;-fun drily_Adv : Adv;-fun drink_N : N;-fun drink_V : V;-fun drink_V2 : V2;-fun drinkable_A : A;-fun drinker_N : N;-fun drinking_N : N;-fun drinking_bout_N : N;-fun drinking_fountain_N : N;-fun drinking_song_N : N;-fun drinking_water_N : N;-fun drip_N : N;-fun drip_V : V;-fun drip_V2 : V2;-fun drip_dry_A : A;-fun drip_dry_V2 : V2;-fun dripping_N : N;-fun dripping_pan_N : N;-fun drive_N : N;-fun drive_V : V;-fun drive_V2 : V2;-fun drive_in_N : N;-fun drivel_N : N;-fun drivel_V : V;-fun driveller_N : N;-fun driver_N : N;-fun driveway_N : N;-fun driving_belt_N : N;-fun driving_wheel_N : N;-fun drizzle_N : N;-fun drizzle_V : V;-fun drizzly_A : A;-fun drogheda_PN : PN;-fun drogue_N : N;-fun droitwich_PN : PN;-fun droll_A : A;-fun drollery_N : N;-fun dromedary_N : N;-fun drone_N : N;-fun drone_V : V;-fun drone_V2 : V2;-fun dronfield_PN : PN;-fun drool_V : V;-fun droop_N : N;-fun droop_V : V;-fun droop_V2 : V2;-fun droopingly_Adv : Adv;-fun drop_N : N;-fun drop_V : V;-fun drop_V2 : V2;-fun drop_curtain_N : N;-fun drop_kick_N : N;-fun dropout_N : N;-fun dropping_zone_N : N;-fun dropsical_A : A;-fun dropsy_N : N;-fun droshky_N : N;-fun dross_N : N;-fun drought_N : N;-fun drove_N : N;-fun drover_N : N;-fun drown_V : V;-fun drown_V2 : V2;-fun drowse_N : N;-fun drowse_V : V;-fun drowse_V2 : V2;-fun drowsily_Adv : Adv;-fun drowsiness_N : N;-fun drowsy_A : A;-fun drub_V2 : V2;-fun drubbing_N : N;-fun drudge_N : N;-fun drudge_V : V;-fun drudgery_N : N;-fun drug_N : N;-fun drug_V2 : V2;-fun drugget_N : N;-fun druggist_N : N;-fun drugstore_N : N;-fun druid_N : N;-fun drum_N : N;-fun drum_V : V;-fun drum_V2 : V2;-fun drum_major_N : N;-fun drum_majorette_N : N;-fun drumfire_N : N;-fun drumhead_A : A;-fun drummer_N : N;-fun drumstick_N : N;-fun drunk_A : A;-fun drunk_N : N;-fun drunkard_N : N;-fun drunken_A : A;-fun drunkenly_Adv : Adv;-fun drunkenness_N : N;-fun drupe_N : N;-fun dry_A : A;-fun dry_V : V;-fun dry_V2 : V2;-fun dry_clean_V2 : V2;-fun dry_cleaner_N : N;-fun dry_cleaning_N : N;-fun dry_shod_A : A;-fun dry_walling_N : N;-fun dryad_N : N;-fun dryer_N : N;-fun dryness_N : N;-fun dsc_N : N;-fun dss_N : N;-fun dti_N : N;-fun dts_N : N;-fun dual_A : A;-fun dub_V2 : V2;-fun dubbin_N : N;-fun dubiety_N : N;-fun dubious_A : A;-fun dubiously_Adv : Adv;-fun dubiousness_N : N;-fun dublin_PN : PN;-fun dubliner_N : N;-fun ducal_A : A;-fun ducat_N : N;-fun duce_N : N;-fun duchess_N : N;-fun duchy_N : N;-fun duck_N : N;-fun duck_V : V;-fun duck_V2 : V2;-fun duckbilled_A : A;-fun ducking_N : N;-fun ducking_stool_N : N;-fun duckling_N : N;-fun duckweed_N : N;-fun ducky_N : N;-fun duct_N : N;-fun ductile_A : A;-fun ductility_N : N;-fun dud_A : A;-fun dud_N : N;-fun dude_N : N;-fun dudgeon_N : N;-fun dudley_PN : PN;-fun due_A : A;-fun due_Adv : Adv;-fun due_N : N;-fun duel_N : N;-fun duel_V : V;-fun duelist_N : N;-fun duellist_N : N;-fun duenna_N : N;-fun duet_N : N;-fun duffel_N : N;-fun duffer_N : N;-fun duffle_N : N;-fun dug_N : N;-fun dugong_N : N;-fun dugout_N : N;-fun duisburg_PN : PN;-fun duke_N : N;-fun dukedom_N : N;-fun dukinfield_PN : PN;-fun dulcet_A : A;-fun dulcimer_N : N;-fun dull_A : A;-fun dull_V : V;-fun dull_V2 : V2;-fun dullard_N : N;-fun dullness_N : N;-fun dully_Adv : Adv;-fun duly_Adv : Adv;-fun dumb_A : A;-fun dumbarton_PN : PN;-fun dumbbell_N : N;-fun dumbfound_V2 : V2;-fun dumbly_Adv : Adv;-fun dumbness_N : N;-fun dumbwaiter_N : N;-fun dumdum_N : N;-fun dumfries_PN : PN;-fun dummy_N : N;-fun dump_N : N;-fun dump_V2 : V2;-fun dumper_N : N;-fun dumpling_N : N;-fun dumpy_A : A;-fun dun_A : A;-fun dun_N : N;-fun dun_V2 : V2;-fun dun_laoghaire_PN : PN;-fun duncan_PN : PN;-fun dunce_N : N;-fun dundalk_PN : PN;-fun dundee_PN : PN;-fun dunderhead_N : N;-fun dune_N : N;-fun dunfermline_PN : PN;-fun dung_N : N;-fun dungeon_N : N;-fun dunghill_N : N;-fun dunk_V2 : V2;-fun dunkirk_PN : PN;-fun dunoon_PN : PN;-fun dunstable_PN : PN;-fun duodecimal_A : A;-fun duodenal_A : A;-fun duodenum_N : N;-fun duologue_N : N;-fun dupe_N : N;-fun dupe_V2 : V2;-fun dupl_PN : PN;-fun duplex_A : A;-fun duplicate_A : A;-fun duplicate_N : N;-fun duplicate_V2 : V2;-fun duplication_N : N;-fun duplicator_N : N;-fun duplicity_N : N;-fun durability_N : N;-fun durable_A : A;-fun durable_N : N;-fun durance_N : N;-fun duration_N : N;-fun durban_PN : PN;-fun durbar_N : N;-fun duress_N : N;-fun durham_PN : PN;-fun durrington_PN : PN;-fun dursley_PN : PN;-fun dusk_N : N;-fun dusky_A : A;-fun dusseldorf_PN : PN;-fun dust_N : N;-fun dust_V2 : V2;-fun dust_bowl_N : N;-fun dust_coat_N : N;-fun dust_jacket_N : N;-fun dust_sheet_N : N;-fun dust_up_N : N;-fun dust_wrapper_N : N;-fun dustbin_N : N;-fun dustcart_N : N;-fun duster_N : N;-fun dustman_N : N;-fun dustpan_N : N;-fun dusty_A : A;-fun dutch_A : A;-fun dutch_N : N;-fun dutchman_N : N;-fun duteous_A : A;-fun dutiable_A : A;-fun dutiful_A : A;-fun dutifully_Adv : Adv;-fun duty_N : N;-fun duty_free_A : A;-fun duvet_N : N;-fun dwarf_N : N;-fun dwarf_V2 : V2;-fun dwarfish_A : A;-fun dwell_V : V;-fun dweller_N : N;-fun dwelling_N : N;-fun dwelling_house_N : N;-fun dwindle_V : V;-fun dyarchy_N : N;-fun dye_N : N;-fun dye_V : V;-fun dye_V2 : V2;-fun dye_works_N : N;-fun dyed_in_the_wool_A : A;-fun dyer_N : N;-fun dyestuff_N : N;-fun dyfed_PN : PN;-fun dyke_N : N;-fun dyke_V : V;-fun dyke_V2 : V2;-fun dynamic_A : A;-fun dynamic_N : N;-fun dynamically_Adv : Adv;-fun dynamism_N : N;-fun dynamite_N : N;-fun dynamite_V2 : V2;-fun dynamo_N : N;-fun dynast_N : N;-fun dynastic_A : A;-fun dynasty_N : N;-fun dyne_N : N;-fun dysentery_N : N;-fun dyslexia_N : N;-fun dyslexic_A : A;-fun dyspepsia_N : N;-fun dyspeptic_A : A;-fun dyspeptic_N : N;-fun debris_2_N : N;-fun debut_2_N : N;-fun debutante_2_N : N;-fun debacle_N : N;-fun decollete_A : A;-fun decor_N : N;-fun demarche_N : N;-fun demode_A : A;-fun denouement_N : N;-fun deshabille_N : N;-fun detente_N : N;-fun e'en_Adv : Adv;-fun e'er_Adv : Adv;-fun each_A : A;-fun eager_A : A;-fun eagerly_Adv : Adv;-fun eagerness_N : N;-fun eagle_N : N;-fun eagle_eyed_A : A;-fun eaglescliffe_PN : PN;-fun eaglet_N : N;-fun ealing_PN : PN;-fun ear_N : N;-fun ear_trumpet_N : N;-fun earache_N : N;-fun eardrop_N : N;-fun eardrum_N : N;-fun earful_N : N;-fun earl_N : N;-fun earl_shilton_PN : PN;-fun earldom_N : N;-fun early_A : A;-fun early_Adv : Adv;-fun early_warning_A : A;-fun earmark_N : N;-fun earmark_V2 : V2;-fun earn_V2 : V2;-fun earnest_A : A;-fun earnest_N : N;-fun earnest_money_N : N;-fun earnestly_Adv : Adv;-fun earnestness_N : N;-fun earphone_N : N;-fun earpiece_N : N;-fun earring_N : N;-fun earshot_N : N;-fun earth_N : N;-fun earth_V2 : V2;-fun earth_closet_N : N;-fun earthen_A : A;-fun earthenware_N : N;-fun earthly_A : A;-fun earthnut_N : N;-fun earthquake_N : N;-fun earthwork_N : N;-fun earthworm_N : N;-fun earthy_A : A;-fun earwax_N : N;-fun earwig_N : N;-fun ease_N : N;-fun ease_V : V;-fun ease_V2 : V2;-fun easel_N : N;-fun easily_Adv : Adv;-fun easington_PN : PN;-fun east_Adv : Adv;-fun east_N : N;-fun east_dereham_PN : PN;-fun east_grinstead_PN : PN;-fun east_kilbride_PN : PN;-fun east_retford_PN : PN;-fun eastbourne_PN : PN;-fun easter_N : N;-fun easter_PN : PN;-fun easterly_A : A;-fun easterly_Adv : Adv;-fun eastern_A : A;-fun easternmost_A : A;-fun eastleigh_PN : PN;-fun eastward_A : A;-fun eastward_Adv : Adv;-fun eastwards_Adv : Adv;-fun easy_A : A;-fun easy_Adv : Adv;-fun easygoing_A : A;-fun eat_V : V;-fun eat_V2 : V2;-fun eatable_A : A;-fun eatable_N : N;-fun eater_N : N;-fun eating_apple_N : N;-fun eating_house_N : N;-fun eau_de_cologne_N : N;-fun eau_de_vie_N : N;-fun eavesdrop_V : V;-fun eavesdropper_N : N;-fun ebb_N : N;-fun ebb_V : V;-fun ebbtide_N : N;-fun ebbw_vale_PN : PN;-fun ebonite_N : N;-fun ebony_A : A;-fun ebony_N : N;-fun ebullience_N : N;-fun ebullient_A : A;-fun ebulliently_Adv : Adv;-fun ec_N : N;-fun eccentric_A : A;-fun eccentric_N : N;-fun eccentricity_N : N;-fun eccles_PN : PN;-fun ecclesiastic_N : N;-fun ecclesiastical_A : A;-fun ecclesiastically_Adv : Adv;-fun echelon_N : N;-fun echo_N : N;-fun echo_V : V;-fun echo_V2 : V2;-fun echo_sounder_N : N;-fun echo_sounding_N : N;-fun eclectic_A : A;-fun eclecticism_N : N;-fun eclipse_N : N;-fun eclipse_V2 : V2;-fun ecliptic_N : N;-fun ecological_A : A;-fun ecologically_Adv : Adv;-fun ecologist_N : N;-fun ecology_N : N;-fun economic_A : A;-fun economical_A : A;-fun economically_Adv : Adv;-fun economics_N : N;-fun economist_N : N;-fun economize_V : V;-fun economize_V2 : V2;-fun economy_N : N;-fun ecosystem_N : N;-fun ecstasy_N : N;-fun ecstatic_A : A;-fun ecstatically_Adv : Adv;-fun ectoplasm_N : N;-fun ecuador_PN : PN;-fun ecuadorian_A : A;-fun ecuadorian_N : N;-fun ecumenical_A : A;-fun eczema_N : N;-fun ed_PN : PN;-fun eddie_PN : PN;-fun eddy_N : N;-fun eddy_PN : PN;-fun eddy_V : V;-fun edelweiss_N : N;-fun eden_PN : PN;-fun edenbridge_PN : PN;-fun edgar_PN : PN;-fun edge_N : N;-fun edge_V : V;-fun edge_V2 : V2;-fun edgeways_Adv : Adv;-fun edgewise_Adv : Adv;-fun edging_N : N;-fun edgy_A : A;-fun edibility_N : N;-fun edible_A : A;-fun edible_N : N;-fun edict_N : N;-fun edification_N : N;-fun edifice_N : N;-fun edify_V2 : V2;-fun edinburgh_PN : PN;-fun edit_V2 : V2;-fun edith_PN : PN;-fun edition_N : N;-fun editor_N : N;-fun editorial_A : A;-fun editorial_N : N;-fun edmund_PN : PN;-fun edp_N : N;-fun educate_V2 : V2;-fun education_N : N;-fun educational_A : A;-fun educationalist_N : N;-fun educationally_Adv : Adv;-fun educationist_N : N;-fun educator_N : N;-fun educe_V2 : V2;-fun edward_PN : PN;-fun edwardian_A : A;-fun edwardian_N : N;-fun eec_N : N;-fun eeg_N : N;-fun eel_N : N;-fun eerie_A : A;-fun eerily_Adv : Adv;-fun eeriness_N : N;-fun eery_A : A;-fun eff_V : V;-fun efface_V2 : V2;-fun effacement_N : N;-fun effect_N : N;-fun effect_V2 : V2;-fun effective_A : A;-fun effectively_Adv : Adv;-fun effectiveness_N : N;-fun effectual_A : A;-fun effectuality_N : N;-fun effectually_Adv : Adv;-fun effectualness_N : N;-fun effeminacy_N : N;-fun effeminate_A : A;-fun effendi_N : N;-fun effervesce_V : V;-fun effervescence_N : N;-fun effervescent_A : A;-fun effete_A : A;-fun effeteness_N : N;-fun efficacious_A : A;-fun efficaciously_Adv : Adv;-fun efficacy_N : N;-fun efficiency_N : N;-fun efficient_A : A;-fun efficiently_Adv : Adv;-fun effigy_N : N;-fun efflorescence_N : N;-fun efflorescent_A : A;-fun effluent_N : N;-fun efflux_N : N;-fun effort_N : N;-fun effortless_A : A;-fun effortlessly_Adv : Adv;-fun effrontery_N : N;-fun effulgence_N : N;-fun effulgent_A : A;-fun effusion_N : N;-fun effusive_A : A;-fun effusively_Adv : Adv;-fun effusiveness_N : N;-fun eft_N : N;-fun efta_N : N;-fun eg_PN : PN;-fun egalitarian_A : A;-fun egalitarian_N : N;-fun egalitarianism_N : N;-fun egg_N : N;-fun egg_V2 : V2;-fun egg_beater_N : N;-fun egg_cup_N : N;-fun egg_whisk_N : N;-fun egghead_N : N;-fun eggplant_N : N;-fun eggshake_N : N;-fun eggshell_N : N;-fun eglantine_N : N;-fun ego_N : N;-fun egocentric_A : A;-fun egoism_N : N;-fun egoist_N : N;-fun egoistic_A : A;-fun egoistical_A : A;-fun egotism_N : N;-fun egotist_N : N;-fun egotistic_A : A;-fun egotistically_Adv : Adv;-fun egotrip_N : N;-fun egotrip_V : V;-fun egregious_A : A;-fun egremont_PN : PN;-fun egress_N : N;-fun egret_N : N;-fun egypt_PN : PN;-fun egyptian_A : A;-fun egyptian_N : N;-fun eiche_PN : PN;-fun eiderdown_N : N;-fun eightpence_N : N;-fun eightpenny_A : A;-fun eightsome_N : N;-fun eileen_PN : PN;-fun eindhoven_PN : PN;-fun eisteddfod_N : N;-fun either_A : A;-fun either_Adv : Adv;-fun ejaculate_V2 : V2;-fun ejaculation_N : N;-fun eject_V : V;-fun eject_V2 : V2;-fun ejection_N : N;-fun ejector_N : N;-fun ejector_seat_N : N;-fun eke_V2 : V2;-fun el_dorado_N : N;-fun el_salvador_PN : PN;-fun elaborate_A : A;-fun elaborate_V2 : V2;-fun elaborately_Adv : Adv;-fun elaborateness_N : N;-fun elaboration_N : N;-fun elaine_PN : PN;-fun eland_N : N;-fun elapse_V : V;-fun elastic_A : A;-fun elastic_N : N;-fun elasticity_N : N;-fun elasticized_A : A;-fun elastoplast_N : N;-fun elate_V2 : V2;-fun elation_N : N;-fun elbow_N : N;-fun elbow_V2 : V2;-fun elder_N : N;-fun elderly_A : A;-fun elderslie_PN : PN;-fun eleanor_PN : PN;-fun elect_A : A;-fun elect_V2 : V2;-fun election_N : N;-fun electioneering_N : N;-fun elective_A : A;-fun elector_N : N;-fun electoral_A : A;-fun electorate_N : N;-fun electric_A : A;-fun electrical_A : A;-fun electrically_Adv : Adv;-fun electrician_N : N;-fun electricity_N : N;-fun electrification_N : N;-fun electrify_V2 : V2;-fun electrocardiogram_N : N;-fun electrocardiograph_N : N;-fun electrochemistry_N : N;-fun electrocute_V2 : V2;-fun electrocution_N : N;-fun electrode_N : N;-fun electrolysis_N : N;-fun electrolyte_N : N;-fun electromagnet_N : N;-fun electromagnetic_A : A;-fun electromagnetism_N : N;-fun electron_N : N;-fun electronic_A : A;-fun electronically_Adv : Adv;-fun electronics_N : N;-fun electroplate_N : N;-fun electroplate_V2 : V2;-fun electrostatic_A : A;-fun eleemosynary_A : A;-fun elegance_N : N;-fun elegant_A : A;-fun elegantly_Adv : Adv;-fun elegiac_A : A;-fun elegy_N : N;-fun element_N : N;-fun elemental_A : A;-fun elementarily_Adv : Adv;-fun elementary_A : A;-fun elephant_N : N;-fun elephantiasis_N : N;-fun elephantine_A : A;-fun elevate_V2 : V2;-fun elevation_N : N;-fun elevator_N : N;-fun elf_N : N;-fun elfin_A : A;-fun elfish_A : A;-fun elgin_PN : PN;-fun elicit_V2 : V2;-fun elicitation_N : N;-fun elide_V2 : V2;-fun eligibility_N : N;-fun eligible_A : A;-fun eliminate_V2 : V2;-fun elimination_N : N;-fun elision_N : N;-fun elitism_N : N;-fun elitist_N : N;-fun elixir_N : N;-fun eliza_PN : PN;-fun elizabeth_PN : PN;-fun elizabethan_A : A;-fun elizabethan_N : N;-fun elk_N : N;-fun elland_PN : PN;-fun ellen_PN : PN;-fun ellesmere_PN : PN;-fun ellesmere_port_PN : PN;-fun ellie_PN : PN;-fun ellipse_N : N;-fun ellipsis_N : N;-fun elliptic_A : A;-fun elliptical_A : A;-fun elloughton_PN : PN;-fun elm_N : N;-fun elocution_N : N;-fun elocutionary_A : A;-fun elocutionist_N : N;-fun elongate_V : V;-fun elongate_V2 : V2;-fun elongation_N : N;-fun elope_V : V;-fun elopement_N : N;-fun eloquence_N : N;-fun eloquent_A : A;-fun eloquently_Adv : Adv;-fun else_Adv : Adv;-fun elsewhere_Adv : Adv;-fun elsie_PN : PN;-fun elstree_PN : PN;-fun elucidate_V2 : V2;-fun elucidation_N : N;-fun elude_V2 : V2;-fun elusive_A : A;-fun elver_N : N;-fun elvish_A : A;-fun ely_PN : PN;-fun elysian_A : A;-fun elysium_PN : PN;-fun emaciate_V2 : V2;-fun emaciation_N : N;-fun emanate_V : V;-fun emanation_N : N;-fun emancipate_V2 : V2;-fun emancipation_N : N;-fun emasculate_V2 : V2;-fun emasculation_N : N;-fun embalm_V2 : V2;-fun embalmment_N : N;-fun embankment_N : N;-fun embargo_N : N;-fun embargo_V2 : V2;-fun embark_V : V;-fun embark_V2 : V2;-fun embarkation_N : N;-fun embarrass_V2 : V2;-fun embarrassing_A : A;-fun embarrassingly_Adv : Adv;-fun embarrassment_N : N;-fun embassy_N : N;-fun embattled_A : A;-fun embed_V2 : V2;-fun embellish_V2 : V2;-fun embellishment_N : N;-fun ember_N : N;-fun embezzle_V2 : V2;-fun embezzlement_N : N;-fun embitter_V2 : V2;-fun embitterment_N : N;-fun emblazon_V2 : V2;-fun emblem_N : N;-fun emblematic_A : A;-fun embodiment_N : N;-fun embody_V2 : V2;-fun embolden_V2 : V2;-fun embonpoint_A : A;-fun embonpoint_N : N;-fun emboss_V2 : V2;-fun embrace_N : N;-fun embrace_V : V;-fun embrace_V2 : V2;-fun embrasure_N : N;-fun embrocation_N : N;-fun embroider_V : V;-fun embroider_V2 : V2;-fun embroidery_N : N;-fun embroil_V2 : V2;-fun embryo_N : N;-fun embryonic_A : A;-fun emeer_N : N;-fun emend_V2 : V2;-fun emendation_N : N;-fun emerald_N : N;-fun emerge_V : V;-fun emergence_N : N;-fun emergency_N : N;-fun emergent_A : A;-fun emeritus_A : A;-fun emery_N : N;-fun emetic_N : N;-fun emigrant_N : N;-fun emigrate_V : V;-fun emigration_N : N;-fun emily_PN : PN;-fun eminence_N : N;-fun eminent_A : A;-fun eminently_Adv : Adv;-fun emir_N : N;-fun emirate_N : N;-fun emissary_N : N;-fun emission_N : N;-fun emit_V2 : V2;-fun emma_PN : PN;-fun emolument_N : N;-fun emotion_N : N;-fun emotional_A : A;-fun emotionally_Adv : Adv;-fun emotionless_A : A;-fun emotive_A : A;-fun empale_V2 : V2;-fun empanel_V2 : V2;-fun empathy_N : N;-fun emperor_N : N;-fun emphasis_N : N;-fun emphasize_V2 : V2;-fun emphatic_A : A;-fun emphatically_Adv : Adv;-fun empire_N : N;-fun empiric_A : A;-fun empirical_A : A;-fun empirically_Adv : Adv;-fun empiricism_N : N;-fun empiricist_N : N;-fun emplacement_N : N;-fun emplane_V : V;-fun emplane_V2 : V2;-fun employ_N : N;-fun employ_V2 : V2;-fun employable_A : A;-fun employee_N : N;-fun employer_N : N;-fun employment_N : N;-fun emporium_N : N;-fun empower_V2 : V2;-fun empress_N : N;-fun emptiness_N : N;-fun empty_A : A;-fun empty_N : N;-fun empty_V : V;-fun empty_V2 : V2;-fun empty_handed_A : A;-fun empty_headed_A : A;-fun empurpled_A : A;-fun empyrean_A : A;-fun empyrean_N : N;-fun emsworth_PN : PN;-fun emu_N : N;-fun emulate_V2 : V2;-fun emulation_N : N;-fun emulous_A : A;-fun emulously_Adv : Adv;-fun emulsify_V2 : V2;-fun emulsion_N : N;-fun en_clair_Adv : Adv;-fun en_famille_Adv : Adv;-fun en_masse_Adv : Adv;-fun en_route_Adv : Adv;-fun enable_V2 : V2;-fun enabling_A : A;-fun enact_V2 : V2;-fun enactment_N : N;-fun enamel_N : N;-fun enamel_V2 : V2;-fun enamour_V2 : V2;-fun enc_PN : PN;-fun encamp_V : V;-fun encamp_V2 : V2;-fun encampment_N : N;-fun encase_V2 : V2;-fun encaustic_A : A;-fun encephalitis_N : N;-fun enchain_V2 : V2;-fun enchant_V2 : V2;-fun enchanter_N : N;-fun enchantingly_Adv : Adv;-fun enchantment_N : N;-fun enchantress_N : N;-fun encircle_V2 : V2;-fun encirclement_N : N;-fun enclave_N : N;-fun enclose_V2 : V2;-fun enclosure_N : N;-fun encode_V2 : V2;-fun encomium_N : N;-fun encompass_V2 : V2;-fun encore_N : N;-fun encore_V2 : V2;-fun encounter_N : N;-fun encounter_V2 : V2;-fun encourage_V2 : V2;-fun encouragement_N : N;-fun encouragingly_Adv : Adv;-fun encroach_V : V;-fun encroachment_N : N;-fun encrust_V : V;-fun encrust_V2 : V2;-fun encumber_V2 : V2;-fun encumbrance_N : N;-fun encyclical_A : A;-fun encyclical_N : N;-fun encyclopaedia_N : N;-fun encyclopaedic_A : A;-fun encyclopedia_N : N;-fun encyclopedic_A : A;-fun end_N : N;-fun end_V : V;-fun end_V2 : V2;-fun end_all_N : N;-fun endanger_V2 : V2;-fun endear_V2 : V2;-fun endearingly_Adv : Adv;-fun endearment_N : N;-fun endeavour_N : N;-fun endeavour_V : V;-fun endemic_A : A;-fun endemic_N : N;-fun ending_N : N;-fun endive_N : N;-fun endless_A : A;-fun endlessly_Adv : Adv;-fun endorse_V2 : V2;-fun endorsement_N : N;-fun endow_V2 : V2;-fun endowment_N : N;-fun endue_V2 : V2;-fun endurable_A : A;-fun endurance_N : N;-fun endure_V : V;-fun endure_V2 : V2;-fun enduring_A : A;-fun enduringly_Adv : Adv;-fun endways_Adv : Adv;-fun endwise_Adv : Adv;-fun enema_N : N;-fun enemy_N : N;-fun energetic_A : A;-fun energetically_Adv : Adv;-fun energy_N : N;-fun enervate_V2 : V2;-fun enfant_terrible_N : N;-fun enfeeble_V2 : V2;-fun enfield_PN : PN;-fun enfold_V2 : V2;-fun enforce_V2 : V2;-fun enforceable_A : A;-fun enforcement_N : N;-fun enfranchise_V2 : V2;-fun enfranchisement_N : N;-fun engage_V : V;-fun engage_V2 : V2;-fun engagement_N : N;-fun engaging_A : A;-fun engagingly_Adv : Adv;-fun engender_V2 : V2;-fun engine_N : N;-fun engine_driver_N : N;-fun engineer_N : N;-fun engineer_V : V;-fun engineer_V2 : V2;-fun engineering_N : N;-fun england_PN : PN;-fun english_A : A;-fun english_N : N;-fun englishman_N : N;-fun englishwoman_N : N;-fun engraft_V2 : V2;-fun engrave_V2 : V2;-fun engraver_N : N;-fun engraving_N : N;-fun engross_V2 : V2;-fun engulf_V2 : V2;-fun enhance_V2 : V2;-fun enhancement_N : N;-fun enigma_N : N;-fun enigmatic_A : A;-fun enigmatically_Adv : Adv;-fun enjoin_V2 : V2;-fun enjoy_V2 : V2;-fun enjoyable_A : A;-fun enjoyably_Adv : Adv;-fun enjoyment_N : N;-fun enkindle_V2 : V2;-fun enlarge_V : V;-fun enlarge_V2 : V2;-fun enlargement_N : N;-fun enlighten_V2 : V2;-fun enlightened_A : A;-fun enlightenment_N : N;-fun enlist_V : V;-fun enlist_V2 : V2;-fun enlistment_N : N;-fun enliven_V2 : V2;-fun enmesh_V2 : V2;-fun enmity_N : N;-fun ennoble_V2 : V2;-fun ennoblement_N : N;-fun ennui_N : N;-fun enoch_PN : PN;-fun enormity_N : N;-fun enormous_A : A;-fun enormously_Adv : Adv;-fun enormousness_N : N;-fun enough_A : A;-fun enough_Adv : Adv;-fun enough_N : N;-fun enplane_V : V;-fun enplane_V2 : V2;-fun enquire_V : V;-fun enquire_V2 : V2;-fun enquirer_N : N;-fun enquiringly_Adv : Adv;-fun enquiry_N : N;-fun enrage_V2 : V2;-fun enrapture_V2 : V2;-fun enrich_V2 : V2;-fun enrichment_N : N;-fun enrol_V : V;-fun enrol_V2 : V2;-fun enroll_V : V;-fun enroll_V2 : V2;-fun enrolment_N : N;-fun enschede_PN : PN;-fun ensconce_V2 : V2;-fun ensemble_N : N;-fun enshrine_V2 : V2;-fun enshroud_V2 : V2;-fun ensign_N : N;-fun ensilage_N : N;-fun enslave_V2 : V2;-fun enslavement_N : N;-fun ensnare_V2 : V2;-fun ensue_V : V;-fun ensure_V : V;-fun ensure_V2 : V2;-fun entail_N : N;-fun entail_V2 : V2;-fun entangle_V2 : V2;-fun entanglement_N : N;-fun entente_N : N;-fun entente_cordiale_N : N;-fun enter_V : V;-fun enter_V2 : V2;-fun enteric_A : A;-fun enteritis_N : N;-fun enterprise_N : N;-fun enterprising_A : A;-fun enterprisingly_Adv : Adv;-fun entertain_V2 : V2;-fun entertainer_N : N;-fun entertaining_A : A;-fun entertainingly_Adv : Adv;-fun entertainment_N : N;-fun enthral_V2 : V2;-fun enthrall_V2 : V2;-fun enthrone_V2 : V2;-fun enthronement_N : N;-fun enthuse_V : V;-fun enthusiasm_N : N;-fun enthusiast_N : N;-fun enthusiastic_A : A;-fun enthusiastically_Adv : Adv;-fun entice_V2 : V2;-fun enticement_N : N;-fun entire_A : A;-fun entirely_Adv : Adv;-fun entirety_N : N;-fun entitle_V2 : V2;-fun entitlement_N : N;-fun entity_N : N;-fun entomb_V2 : V2;-fun entomological_A : A;-fun entomologist_N : N;-fun entomology_N : N;-fun entourage_N : N;-fun entr'acte_N : N;-fun entrain_V : V;-fun entrain_V2 : V2;-fun entrance_N : N;-fun entrance_V2 : V2;-fun entrance_fee_N : N;-fun entrance_money_N : N;-fun entrant_N : N;-fun entrap_V2 : V2;-fun entreat_V2 : V2;-fun entreatingly_Adv : Adv;-fun entreaty_N : N;-fun entrench_V2 : V2;-fun entrenchment_N : N;-fun entrepot_N : N;-fun entrepreneur_N : N;-fun entrepreneurial_A : A;-fun entrust_V2 : V2;-fun entry_N : N;-fun entree_N : N;-fun entwine_V2 : V2;-fun enumerate_V2 : V2;-fun enumeration_N : N;-fun enunciate_V : V;-fun enunciate_V2 : V2;-fun enunciation_N : N;-fun envelop_V2 : V2;-fun envelope_N : N;-fun envelopment_N : N;-fun envenom_V2 : V2;-fun enviable_A : A;-fun envious_A : A;-fun enviously_Adv : Adv;-fun environ_V2 : V2;-fun environment_N : N;-fun environmental_A : A;-fun environmentally_Adv : Adv;-fun envisage_V2 : V2;-fun envoi_N : N;-fun envoy_N : N;-fun envy_N : N;-fun envy_V2 : V2;-fun enwrap_V2 : V2;-fun enzyme_N : N;-fun eon_N : N;-fun epaulet_N : N;-fun epaulette_N : N;-fun ephemeral_A : A;-fun epic_A : A;-fun epic_N : N;-fun epicentre_N : N;-fun epicure_N : N;-fun epicurean_A : A;-fun epicurean_N : N;-fun epidemic_A : A;-fun epidemic_N : N;-fun epidemiologist_N : N;-fun epidemiology_N : N;-fun epidermis_N : N;-fun epidiascope_N : N;-fun epiglottis_N : N;-fun epigram_N : N;-fun epigrammatic_A : A;-fun epilepsy_N : N;-fun epileptic_A : A;-fun epileptic_N : N;-fun epilogue_N : N;-fun epiphany_PN : PN;-fun episcopal_A : A;-fun episcopalian_A : A;-fun episcopalian_N : N;-fun episode_N : N;-fun episodic_A : A;-fun epistle_N : N;-fun epistolary_A : A;-fun epitaph_N : N;-fun epithet_N : N;-fun epitome_N : N;-fun epitomize_V2 : V2;-fun epoch_N : N;-fun epoch_making_A : A;-fun epping_PN : PN;-fun epsom_PN : PN;-fun equable_A : A;-fun equably_Adv : Adv;-fun equal_A : A;-fun equal_N : N;-fun equal_V2 : V2;-fun equalitarian_N : N;-fun equality_N : N;-fun equalization_N : N;-fun equalize_V2 : V2;-fun equalizer_N : N;-fun equally_Adv : Adv;-fun equanimity_N : N;-fun equate_V2 : V2;-fun equation_N : N;-fun equator_N : N;-fun equatorial_A : A;-fun equerry_N : N;-fun equestrian_A : A;-fun equestrian_N : N;-fun equidistant_A : A;-fun equilateral_A : A;-fun equilibrium_N : N;-fun equine_A : A;-fun equinoctial_A : A;-fun equinox_N : N;-fun equip_V2 : V2;-fun equipage_N : N;-fun equipment_N : N;-fun equipoise_N : N;-fun equitable_A : A;-fun equitably_Adv : Adv;-fun equity_N : N;-fun equivalence_N : N;-fun equivalent_A : A;-fun equivalent_N : N;-fun equivocal_A : A;-fun equivocation_N : N;-fun era_N : N;-fun eradicate_V2 : V2;-fun eradication_N : N;-fun erase_V2 : V2;-fun eraser_N : N;-fun erasure_N : N;-fun ere_Adv : Adv;-fun erect_A : A;-fun erect_V2 : V2;-fun erectile_A : A;-fun erection_N : N;-fun erectly_Adv : Adv;-fun erectness_N : N;-fun eremite_N : N;-fun erfurt_PN : PN;-fun erg_N : N;-fun ergo_Adv : Adv;-fun ergonomics_N : N;-fun eric_PN : PN;-fun erica_PN : PN;-fun erin_PN : PN;-fun eritrea_PN : PN;-fun eritrean_A : A;-fun eritrean_N : N;-fun erlangen_PN : PN;-fun ermine_N : N;-fun ernest_PN : PN;-fun ernie_PN : PN;-fun erode_V2 : V2;-fun erogenous_A : A;-fun erosion_N : N;-fun erosive_A : A;-fun erotic_A : A;-fun eroticism_N : N;-fun err_V : V;-fun errand_N : N;-fun errant_A : A;-fun erratic_A : A;-fun erratically_Adv : Adv;-fun erratum_N : N;-fun erroneous_A : A;-fun erroneously_Adv : Adv;-fun error_N : N;-fun erse_N : N;-fun eructation_N : N;-fun erudite_A : A;-fun eruditely_Adv : Adv;-fun erudition_N : N;-fun erupt_V : V;-fun eruption_N : N;-fun erysipelas_N : N;-fun escalate_V : V;-fun escalate_V2 : V2;-fun escalation_N : N;-fun escalator_N : N;-fun escalope_N : N;-fun escapade_N : N;-fun escape_N : N;-fun escape_V : V;-fun escape_V2 : V2;-fun escapee_N : N;-fun escapement_N : N;-fun escapism_N : N;-fun escapist_N : N;-fun escapologist_N : N;-fun escarpment_N : N;-fun eschatology_N : N;-fun eschew_V2 : V2;-fun escort_N : N;-fun escort_V2 : V2;-fun escritoire_N : N;-fun escudo_N : N;-fun escutcheon_N : N;-fun esfahan_PN : PN;-fun eskimo_N : N;-fun esophagus_N : N;-fun esoteric_A : A;-fun esp_N : N;-fun espalier_N : N;-fun especial_A : A;-fun especially_Adv : Adv;-fun esperanto_N : N;-fun espionage_N : N;-fun esplanade_N : N;-fun espousal_N : N;-fun espouse_V2 : V2;-fun espresso_N : N;-fun esprit_N : N;-fun esprit_de_corps_N : N;-fun espy_V2 : V2;-fun esq_PN : PN;-fun esquire_N : N;-fun essay_N : N;-fun essay_V : V;-fun essay_V2 : V2;-fun essayist_N : N;-fun essen_PN : PN;-fun essence_N : N;-fun essential_A : A;-fun essential_N : N;-fun essentially_Adv : Adv;-fun essex_PN : PN;-fun establish_V2 : V2;-fun establishment_N : N;-fun estaminet_N : N;-fun estate_N : N;-fun esteem_N : N;-fun esteem_V2 : V2;-fun esther_PN : PN;-fun esthete_N : N;-fun esthetic_A : A;-fun esthetic_N : N;-fun esthetical_A : A;-fun esthetics_N : N;-fun estimable_A : A;-fun estimate_N : N;-fun estimate_V : V;-fun estimate_V2 : V2;-fun estimation_N : N;-fun estrange_V2 : V2;-fun estrangement_N : N;-fun estuary_N : N;-fun et_al_PN : PN;-fun et_seq_PN : PN;-fun eta_N : N;-fun etc_PN : PN;-fun etch_V : V;-fun etch_V2 : V2;-fun etcher_N : N;-fun etching_N : N;-fun etd_N : N;-fun eternal_A : A;-fun eternally_Adv : Adv;-fun eternity_N : N;-fun ethel_PN : PN;-fun ether_N : N;-fun ethereal_A : A;-fun ethic_N : N;-fun ethical_A : A;-fun ethically_Adv : Adv;-fun ethics_N : N;-fun ethiopia_PN : PN;-fun ethiopian_A : A;-fun ethiopian_N : N;-fun ethnic_A : A;-fun ethnically_Adv : Adv;-fun ethnographer_N : N;-fun ethnographic_A : A;-fun ethnography_N : N;-fun ethnological_A : A;-fun ethnologist_N : N;-fun ethnology_N : N;-fun ethos_N : N;-fun ethyl_N : N;-fun etiology_N : N;-fun etiquette_N : N;-fun etymological_A : A;-fun etymologist_N : N;-fun etymology_N : N;-fun eucalyptus_N : N;-fun eucharist_N : N;-fun euclidean_A : A;-fun eugene_PN : PN;-fun eugenics_N : N;-fun eulogist_N : N;-fun eulogistic_A : A;-fun eulogize_V2 : V2;-fun eulogy_N : N;-fun eunice_PN : PN;-fun eunuch_N : N;-fun euphemism_N : N;-fun euphemistic_A : A;-fun euphemistically_Adv : Adv;-fun euphonium_N : N;-fun euphony_N : N;-fun euphoria_N : N;-fun euphoric_A : A;-fun euphuism_N : N;-fun eurasia_PN : PN;-fun eurasian_A : A;-fun eurasian_N : N;-fun eurhythmics_N : N;-fun eurodollar_N : N;-fun europe_PN : PN;-fun european_A : A;-fun european_N : N;-fun eurovision_PN : PN;-fun eurythmics_N : N;-fun eustachian_A : A;-fun euthanasia_N : N;-fun eva_PN : PN;-fun evacuate_V2 : V2;-fun evacuation_N : N;-fun evacuee_N : N;-fun evade_V2 : V2;-fun evaluate_V2 : V2;-fun evaluation_N : N;-fun evaluative_A : A;-fun evanescence_N : N;-fun evanescent_A : A;-fun evangelical_A : A;-fun evangelicalism_N : N;-fun evangelism_N : N;-fun evangelist_N : N;-fun evangelistic_A : A;-fun evaporate_V : V;-fun evaporate_V2 : V2;-fun evaporation_N : N;-fun evasion_N : N;-fun evasive_A : A;-fun evasively_Adv : Adv;-fun evasiveness_N : N;-fun eve_N : N;-fun eve_PN : PN;-fun evelyn_PN : PN;-fun even_A : A;-fun even_Adv : Adv;-fun even_N : N;-fun even_V2 : V2;-fun even_handed_A : A;-fun evening_N : N;-fun evenly_Adv : Adv;-fun evenness_N : N;-fun evensong_N : N;-fun event_N : N;-fun eventful_A : A;-fun eventide_N : N;-fun eventual_A : A;-fun eventuality_N : N;-fun eventually_Adv : Adv;-fun ever_Adv : Adv;-fun evergreen_A : A;-fun evergreen_N : N;-fun everlasting_A : A;-fun evermore_Adv : Adv;-fun everyday_A : A;-fun everyplace_Adv : Adv;-fun evesham_PN : PN;-fun evict_V2 : V2;-fun eviction_N : N;-fun evidence_N : N;-fun evidence_V2 : V2;-fun evident_A : A;-fun evidently_Adv : Adv;-fun evil_A : A;-fun evil_N : N;-fun evil_doer_N : N;-fun evil_minded_A : A;-fun evilly_Adv : Adv;-fun evince_V2 : V2;-fun eviscerate_V2 : V2;-fun evocation_N : N;-fun evocative_A : A;-fun evoke_V2 : V2;-fun evolution_N : N;-fun evolutionary_A : A;-fun evolve_V : V;-fun evolve_V2 : V2;-fun ewe_N : N;-fun ewell_PN : PN;-fun ewer_N : N;-fun ex_directory_A : A;-fun ex_gratia_A : A;-fun ex_officio_A : A;-fun ex_officio_Adv : Adv;-fun ex_service_A : A;-fun ex_serviceman_N : N;-fun exacerbate_V2 : V2;-fun exacerbation_N : N;-fun exact_A : A;-fun exact_V2 : V2;-fun exacting_A : A;-fun exaction_N : N;-fun exactitude_N : N;-fun exactly_Adv : Adv;-fun exactness_N : N;-fun exaggerate_V : V;-fun exaggerate_V2 : V2;-fun exaggeration_N : N;-fun exalt_V2 : V2;-fun exaltation_N : N;-fun exalted_A : A;-fun exam_N : N;-fun examination_N : N;-fun examine_V2 : V2;-fun examiner_N : N;-fun example_N : N;-fun exasperate_V2 : V2;-fun exasperation_N : N;-fun excavate_V2 : V2;-fun excavation_N : N;-fun excavator_N : N;-fun exceed_V2 : V2;-fun exceedingly_Adv : Adv;-fun excel_V : V;-fun excel_V2 : V2;-fun excellence_N : N;-fun excellency_N : N;-fun excellent_A : A;-fun excellently_Adv : Adv;-fun excelsior_N : N;-fun except_V2 : V2;-fun exception_N : N;-fun exceptionable_A : A;-fun exceptional_A : A;-fun exceptionally_Adv : Adv;-fun excerpt_N : N;-fun excess_A : A;-fun excess_N : N;-fun excessive_A : A;-fun excessively_Adv : Adv;-fun exchange_N : N;-fun exchange_V2 : V2;-fun exchangeable_A : A;-fun exchanger_N : N;-fun exchequer_N : N;-fun excise_N : N;-fun excise_V2 : V2;-fun exciseman_N : N;-fun excision_N : N;-fun excitability_N : N;-fun excitable_A : A;-fun excite_V2 : V2;-fun excitedly_Adv : Adv;-fun excitement_N : N;-fun excitingly_Adv : Adv;-fun excl_PN : PN;-fun exclaim_V : V;-fun exclaim_V2 : V2;-fun exclamation_N : N;-fun exclamatory_A : A;-fun exclude_V2 : V2;-fun exclusion_N : N;-fun exclusive_A : A;-fun exclusively_Adv : Adv;-fun excogitate_V2 : V2;-fun excogitation_N : N;-fun excommunicate_V2 : V2;-fun excommunication_N : N;-fun excoriate_V2 : V2;-fun excoriation_N : N;-fun excrement_N : N;-fun excrescence_N : N;-fun excrete_V2 : V2;-fun excretion_N : N;-fun excruciating_A : A;-fun excruciatingly_Adv : Adv;-fun exculpate_V2 : V2;-fun excursion_N : N;-fun excursionist_N : N;-fun excusable_A : A;-fun excusably_Adv : Adv;-fun excuse_N : N;-fun excuse_V2 : V2;-fun execrable_A : A;-fun execrate_V2 : V2;-fun execration_N : N;-fun executant_N : N;-fun execute_V2 : V2;-fun execution_N : N;-fun executioner_N : N;-fun executive_A : A;-fun executive_N : N;-fun executor_N : N;-fun executrix_N : N;-fun exegesis_N : N;-fun exemplary_A : A;-fun exemplification_N : N;-fun exemplify_V2 : V2;-fun exempt_A : A;-fun exempt_V2 : V2;-fun exemption_N : N;-fun exercise_N : N;-fun exercise_V : V;-fun exercise_V2 : V2;-fun exert_V2 : V2;-fun exertion_N : N;-fun exeter_PN : PN;-fun exhalation_N : N;-fun exhale_V : V;-fun exhale_V2 : V2;-fun exhaust_N : N;-fun exhaust_V2 : V2;-fun exhaust_pipe_N : N;-fun exhaustion_N : N;-fun exhaustive_A : A;-fun exhaustively_Adv : Adv;-fun exhibit_N : N;-fun exhibit_V2 : V2;-fun exhibition_N : N;-fun exhibitioner_N : N;-fun exhibitionism_N : N;-fun exhibitionist_N : N;-fun exhibitor_N : N;-fun exhilarate_V2 : V2;-fun exhilaration_N : N;-fun exhort_V2 : V2;-fun exhortation_N : N;-fun exhumation_N : N;-fun exhume_V2 : V2;-fun exigency_N : N;-fun exigent_A : A;-fun exiguous_A : A;-fun exile_N : N;-fun exile_V2 : V2;-fun exist_V : V;-fun existence_N : N;-fun existent_A : A;-fun existentialism_N : N;-fun existentialist_N : N;-fun exit_N : N;-fun exit_V : V;-fun exmouth_PN : PN;-fun exodus_N : N;-fun exonerate_V2 : V2;-fun exoneration_N : N;-fun exorbitance_N : N;-fun exorbitant_A : A;-fun exorbitantly_Adv : Adv;-fun exorcize_V2 : V2;-fun exotic_A : A;-fun expand_V : V;-fun expand_V2 : V2;-fun expanse_N : N;-fun expansion_N : N;-fun expansive_A : A;-fun expansively_Adv : Adv;-fun expansiveness_N : N;-fun expatiate_V : V;-fun expatriate_N : N;-fun expatriate_V2 : V2;-fun expect_V2 : V2;-fun expectancy_N : N;-fun expectant_A : A;-fun expectantly_Adv : Adv;-fun expectation_N : N;-fun expected_A : A;-fun expectorant_N : N;-fun expectorate_V : V;-fun expectorate_V2 : V2;-fun expedience_N : N;-fun expediency_N : N;-fun expedient_A : A;-fun expedient_N : N;-fun expediently_Adv : Adv;-fun expedite_V2 : V2;-fun expedition_N : N;-fun expeditionary_A : A;-fun expeditious_A : A;-fun expeditiously_Adv : Adv;-fun expel_V2 : V2;-fun expend_V2 : V2;-fun expendable_A : A;-fun expenditure_N : N;-fun expense_N : N;-fun expensive_A : A;-fun expensively_Adv : Adv;-fun experience_N : N;-fun experience_V2 : V2;-fun experienced_A : A;-fun experiment_N : N;-fun experiment_V : V;-fun experimental_A : A;-fun experimentally_Adv : Adv;-fun experimentation_N : N;-fun experimenter_N : N;-fun expert_A : A;-fun expert_N : N;-fun expertise_N : N;-fun expertly_Adv : Adv;-fun expertness_N : N;-fun expiate_V2 : V2;-fun expiation_N : N;-fun expiration_N : N;-fun expire_V : V;-fun expiry_N : N;-fun explain_V2 : V2;-fun explanation_N : N;-fun explanatory_A : A;-fun expletive_N : N;-fun explicable_A : A;-fun explicate_V2 : V2;-fun explicit_A : A;-fun explicitly_Adv : Adv;-fun explicitness_N : N;-fun explode_V : V;-fun explode_V2 : V2;-fun exploit_N : N;-fun exploit_V2 : V2;-fun exploitation_N : N;-fun exploration_N : N;-fun exploratory_A : A;-fun explore_V2 : V2;-fun explorer_N : N;-fun explosion_N : N;-fun explosive_A : A;-fun explosive_N : N;-fun explosively_Adv : Adv;-fun expo_N : N;-fun exponent_N : N;-fun exponential_A : A;-fun exponential_N : N;-fun exponentially_Adv : Adv;-fun export_N : N;-fun export_V2 : V2;-fun exportable_A : A;-fun exportation_N : N;-fun exporter_N : N;-fun expose_V2 : V2;-fun exposition_N : N;-fun expostulate_V : V;-fun expostulation_N : N;-fun exposure_N : N;-fun expose_N : N;-fun expound_V2 : V2;-fun express_A : A;-fun express_Adv : Adv;-fun express_N : N;-fun express_V2 : V2;-fun expression_N : N;-fun expressionism_N : N;-fun expressionist_N : N;-fun expressionless_A : A;-fun expressive_A : A;-fun expressively_Adv : Adv;-fun expressly_Adv : Adv;-fun expressway_N : N;-fun expropriate_V2 : V2;-fun expropriation_N : N;-fun expulsion_N : N;-fun expunge_V2 : V2;-fun expurgate_V2 : V2;-fun expurgation_N : N;-fun exquisite_A : A;-fun exquisitely_Adv : Adv;-fun exquisiteness_N : N;-fun extant_A : A;-fun extemporaneous_A : A;-fun extemporaneously_Adv : Adv;-fun extemporarily_Adv : Adv;-fun extemporary_A : A;-fun extempore_A : A;-fun extempore_Adv : Adv;-fun extemporize_V : V;-fun extemporize_V2 : V2;-fun extend_V : V;-fun extend_V2 : V2;-fun extension_N : N;-fun extensive_A : A;-fun extensively_Adv : Adv;-fun extent_N : N;-fun extenuate_V2 : V2;-fun extenuation_N : N;-fun exterior_A : A;-fun exterior_N : N;-fun exteriorize_V2 : V2;-fun exterminate_V2 : V2;-fun extermination_N : N;-fun external_A : A;-fun external_N : N;-fun externalize_V2 : V2;-fun externally_Adv : Adv;-fun exterritorial_A : A;-fun extinct_A : A;-fun extinction_N : N;-fun extinguish_V2 : V2;-fun extinguisher_N : N;-fun extirpate_V2 : V2;-fun extirpation_N : N;-fun extol_V2 : V2;-fun extort_V2 : V2;-fun extortion_N : N;-fun extortionate_A : A;-fun extortionately_Adv : Adv;-fun extra_A : A;-fun extra_Adv : Adv;-fun extra_N : N;-fun extract_N : N;-fun extract_V2 : V2;-fun extraction_N : N;-fun extracurricular_A : A;-fun extradite_V2 : V2;-fun extradition_N : N;-fun extrajudicial_A : A;-fun extramarital_A : A;-fun extramural_A : A;-fun extraneous_A : A;-fun extraordinarily_Adv : Adv;-fun extraordinary_A : A;-fun extrapolate_V : V;-fun extrapolate_V2 : V2;-fun extrapolation_N : N;-fun extrasensory_A : A;-fun extraterritorial_A : A;-fun extravagance_N : N;-fun extravagant_A : A;-fun extravagantly_Adv : Adv;-fun extravaganza_N : N;-fun extreme_A : A;-fun extreme_N : N;-fun extremely_Adv : Adv;-fun extremist_N : N;-fun extremity_N : N;-fun extricable_A : A;-fun extricate_V2 : V2;-fun extrication_N : N;-fun extrinsic_A : A;-fun extroversion_N : N;-fun extrovert_N : N;-fun extrude_V2 : V2;-fun extrusion_N : N;-fun exuberance_N : N;-fun exuberant_A : A;-fun exuberantly_Adv : Adv;-fun exude_V : V;-fun exude_V2 : V2;-fun exult_V : V;-fun exultant_A : A;-fun exultantly_Adv : Adv;-fun exultation_N : N;-fun eye_N : N;-fun eye_V2 : V2;-fun eye_catching_A : A;-fun eye_opener_N : N;-fun eye_shadow_N : N;-fun eyeball_N : N;-fun eyebath_N : N;-fun eyebrow_N : N;-fun eyecatching_A : A;-fun eyecup_N : N;-fun eyed_A : A;-fun eyeful_N : N;-fun eyeglass_N : N;-fun eyelash_N : N;-fun eyeless_A : A;-fun eyelet_N : N;-fun eyelid_N : N;-fun eyepiece_N : N;-fun eyeshot_N : N;-fun eyesight_N : N;-fun eyesore_N : N;-fun eyestrain_N : N;-fun eyetooth_N : N;-fun eyewash_N : N;-fun eyewitness_N : N;-fun eyrie_N : N;-fun eyry_N : N;-fun fa_N : N;-fun fab_A : A;-fun fabian_A : A;-fun fabian_N : N;-fun fable_N : N;-fun fabled_A : A;-fun fabric_N : N;-fun fabricate_V2 : V2;-fun fabrication_N : N;-fun fabulous_A : A;-fun fabulously_Adv : Adv;-fun face_N : N;-fun face_V : V;-fun face_V2 : V2;-fun face_ache_N : N;-fun face_card_N : N;-fun face_cloth_N : N;-fun face_cream_N : N;-fun face_lift_N : N;-fun face_lifting_N : N;-fun face_pack_N : N;-fun face_powder_N : N;-fun face_saver_N : N;-fun face_saving_A : A;-fun face_saving_N : N;-fun faceless_A : A;-fun facer_N : N;-fun facet_N : N;-fun facetious_A : A;-fun facetiously_Adv : Adv;-fun facetiousness_N : N;-fun facia_N : N;-fun facial_A : A;-fun facial_N : N;-fun facile_A : A;-fun facilitate_V2 : V2;-fun facility_N : N;-fun facing_N : N;-fun facsimile_N : N;-fun fact_N : N;-fun fact_finding_A : A;-fun faction_N : N;-fun factious_A : A;-fun factitious_A : A;-fun factor_N : N;-fun factorize_V2 : V2;-fun factory_N : N;-fun factotum_N : N;-fun factual_A : A;-fun factually_Adv : Adv;-fun faculty_N : N;-fun fad_N : N;-fun faddily_Adv : Adv;-fun faddy_A : A;-fun fade_V : V;-fun fade_V2 : V2;-fun faerie_N : N;-fun faery_N : N;-fun fag_N : N;-fun fag_V : V;-fun fag_V2 : V2;-fun fag_end_N : N;-fun faggot_N : N;-fun faience_N : N;-fun fail_N : N;-fun fail_V : V;-fun fail_V2 : V2;-fun fail_safe_A : A;-fun failing_N : N;-fun failure_N : N;-fun fain_Adv : Adv;-fun faint_A : A;-fun faint_N : N;-fun faint_V : V;-fun faint_hearted_A : A;-fun faintly_Adv : Adv;-fun faintness_N : N;-fun fair_A : A;-fun fair_Adv : Adv;-fun fair_N : N;-fun fair_minded_A : A;-fun fairground_N : N;-fun fairish_A : A;-fun fairly_Adv : Adv;-fun fairness_N : N;-fun fairway_N : N;-fun fairy_N : N;-fun fairyland_N : N;-fun fairytale_N : N;-fun fait_accompli_N : N;-fun faith_N : N;-fun faith_healing_N : N;-fun faithful_A : A;-fun faithfully_Adv : Adv;-fun faithfulness_N : N;-fun faithless_A : A;-fun faithlessly_Adv : Adv;-fun faithlessness_N : N;-fun fake_N : N;-fun fake_V2 : V2;-fun fakir_N : N;-fun falcon_N : N;-fun falconry_N : N;-fun falkirk_PN : PN;-fun fall_N : N;-fun fall_V : V;-fun fallacious_A : A;-fun fallacy_N : N;-fun fallibility_N : N;-fun fallible_A : A;-fun fallopian_A : A;-fun fallout_N : N;-fun fallow_A : A;-fun fallow_N : N;-fun fallow_deer_N : N;-fun falmouth_PN : PN;-fun false_A : A;-fun false_Adv : Adv;-fun falsehood_N : N;-fun falsely_Adv : Adv;-fun falseness_N : N;-fun falsetto_A : A;-fun falsetto_N : N;-fun falsification_N : N;-fun falsify_V2 : V2;-fun falsity_N : N;-fun falter_V : V;-fun falter_V2 : V2;-fun falteringly_Adv : Adv;-fun fame_N : N;-fun famed_A : A;-fun familiar_A : A;-fun familiar_N : N;-fun familiarity_N : N;-fun familiarize_V2 : V2;-fun familiarly_Adv : Adv;-fun family_N : N;-fun famine_N : N;-fun famish_V : V;-fun famish_V2 : V2;-fun famous_A : A;-fun famously_Adv : Adv;-fun fan_N : N;-fun fan_V : V;-fun fan_V2 : V2;-fun fan_belt_N : N;-fun fanatic_A : A;-fun fanatic_N : N;-fun fanatical_A : A;-fun fanatically_Adv : Adv;-fun fanaticism_N : N;-fun fancier_N : N;-fun fanciful_A : A;-fun fancifully_Adv : Adv;-fun fancy_A : A;-fun fancy_N : N;-fun fancy_V2 : V2;-fun fancy_free_A : A;-fun fandango_N : N;-fun fanfare_N : N;-fun fang_N : N;-fun fanlight_N : N;-fun fanny_N : N;-fun fanny_PN : PN;-fun fantan_N : N;-fun fantasia_N : N;-fun fantastic_A : A;-fun fantastically_Adv : Adv;-fun fantasy_N : N;-fun fao_N : N;-fun far_A : A;-fun far_Adv : Adv;-fun far_famed_A : A;-fun far_fetched_A : A;-fun far_flung_A : A;-fun far_off_A : A;-fun far_reaching_A : A;-fun far_seeing_A : A;-fun far_sighted_A : A;-fun faraway_A : A;-fun farce_N : N;-fun farcical_A : A;-fun farcically_Adv : Adv;-fun fare_N : N;-fun fare_V : V;-fun fare_stage_N : N;-fun farewell_N : N;-fun farinaceous_A : A;-fun farm_N : N;-fun farm_V : V;-fun farm_V2 : V2;-fun farmer_N : N;-fun farmhand_N : N;-fun farmhouse_N : N;-fun farmstead_N : N;-fun farmyard_N : N;-fun farnham_PN : PN;-fun farnworth_PN : PN;-fun farrago_N : N;-fun farrier_N : N;-fun farrow_N : N;-fun farrow_V : V;-fun farsi_N : N;-fun fart_N : N;-fun fart_V : V;-fun farther_Adv : Adv;-fun farthest_Adv : Adv;-fun farthing_N : N;-fun fascia_N : N;-fun fascinate_V2 : V2;-fun fascinating_A : A;-fun fascinatingly_Adv : Adv;-fun fascination_N : N;-fun fascism_N : N;-fun fascist_A : A;-fun fascist_N : N;-fun fashion_N : N;-fun fashion_V2 : V2;-fun fashionable_A : A;-fun fashionably_Adv : Adv;-fun fast_A : A;-fun fast_Adv : Adv;-fun fast_N : N;-fun fast_V : V;-fun fasten_V : V;-fun fasten_V2 : V2;-fun fastener_N : N;-fun fastening_N : N;-fun fastidious_A : A;-fun fastidiously_Adv : Adv;-fun fastidiousness_N : N;-fun fastness_N : N;-fun fat_A : A;-fun fat_N : N;-fun fat_V2 : V2;-fun fatal_A : A;-fun fatalism_N : N;-fun fatalist_N : N;-fun fatalistic_A : A;-fun fatality_N : N;-fun fate_N : N;-fun fate_V2 : V2;-fun fateful_A : A;-fun fatefully_Adv : Adv;-fun fathead_N : N;-fun father_N : N;-fun father_V2 : V2;-fun father_in_law_N : N;-fun fatherhood_N : N;-fun fatherland_N : N;-fun fatherless_A : A;-fun fatherly_A : A;-fun fathom_N : N;-fun fathom_V2 : V2;-fun fathomless_A : A;-fun fatigue_N : N;-fun fatigue_V2 : V2;-fun fatigue_party_N : N;-fun fatless_A : A;-fun fatness_N : N;-fun fatten_V : V;-fun fatten_V2 : V2;-fun fattish_A : A;-fun fatty_A : A;-fun fatuity_N : N;-fun fatuous_A : A;-fun fatuously_Adv : Adv;-fun fatuousness_N : N;-fun faucet_N : N;-fun fauldhouse_PN : PN;-fun fault_N : N;-fun fault_V2 : V2;-fun fault_finder_N : N;-fun fault_finding_N : N;-fun faultily_Adv : Adv;-fun faultless_A : A;-fun faultlessly_Adv : Adv;-fun faulty_A : A;-fun faun_N : N;-fun faux_pas_N : N;-fun faversham_PN : PN;-fun favour_N : N;-fun favour_V2 : V2;-fun favourable_A : A;-fun favourably_Adv : Adv;-fun favourite_A : A;-fun favourite_N : N;-fun favouritism_N : N;-fun fawley_PN : PN;-fun fawn_N : N;-fun fawn_V : V;-fun facade_N : N;-fun fbi_PN : PN;-fun fealty_N : N;-fun fear_N : N;-fun fear_V : V;-fun fear_V2 : V2;-fun fearful_A : A;-fun fearfully_Adv : Adv;-fun fearfulness_N : N;-fun fearless_A : A;-fun fearlessly_Adv : Adv;-fun fearlessness_N : N;-fun fearsome_A : A;-fun fearsomely_Adv : Adv;-fun feasibility_N : N;-fun feasible_A : A;-fun feast_N : N;-fun feast_V : V;-fun feast_V2 : V2;-fun feast_day_N : N;-fun feat_N : N;-fun feather_N : N;-fun feather_V2 : V2;-fun feather_boa_N : N;-fun featherbed_N : N;-fun featherbed_V2 : V2;-fun featherbrained_A : A;-fun featherstone_PN : PN;-fun featherweight_N : N;-fun feathery_A : A;-fun feature_N : N;-fun feature_V2 : V2;-fun featureless_A : A;-fun feb_PN : PN;-fun febrile_A : A;-fun february_N : N;-fun february_PN : PN;-fun feckless_A : A;-fun fecklessly_Adv : Adv;-fun fecklessness_N : N;-fun fecund_A : A;-fun fecundity_N : N;-fun fed_N : N;-fun federal_A : A;-fun federalism_N : N;-fun federalist_N : N;-fun federate_V : V;-fun federate_V2 : V2;-fun federation_N : N;-fun fee_N : N;-fun fee_V2 : V2;-fun feeble_A : A;-fun feeble_minded_A : A;-fun feebleness_N : N;-fun feebly_Adv : Adv;-fun feed_N : N;-fun feed_V : V;-fun feed_V2 : V2;-fun feedback_N : N;-fun feeder_N : N;-fun feeding_bottle_N : N;-fun feel_N : N;-fun feel_V : V;-fun feel_V2 : V2;-fun feeler_N : N;-fun feeling_A : A;-fun feeling_N : N;-fun feelingly_Adv : Adv;-fun feign_V2 : V2;-fun feint_N : N;-fun feint_V : V;-fun feldspar_N : N;-fun felicitate_V2 : V2;-fun felicitation_N : N;-fun felicitous_A : A;-fun felicitously_Adv : Adv;-fun felicity_N : N;-fun felicity_PN : PN;-fun feline_A : A;-fun felix_PN : PN;-fun felixstowe_PN : PN;-fun fell_A : A;-fun fell_V2 : V2;-fun fellah_N : N;-fun fellow_N : N;-fun fellow_feeling_N : N;-fun fellow_traveller_N : N;-fun fellowship_N : N;-fun felon_N : N;-fun felonious_A : A;-fun felony_N : N;-fun felspar_N : N;-fun felt_N : N;-fun felucca_N : N;-fun fem_PN : PN;-fun female_A : A;-fun female_N : N;-fun feminine_A : A;-fun femininity_N : N;-fun feminism_N : N;-fun feminist_N : N;-fun femur_N : N;-fun fen_N : N;-fun fence_N : N;-fun fence_V2 : V2;-fun fencer_N : N;-fun fencing_N : N;-fun fend_V : V;-fun fend_V2 : V2;-fun fender_N : N;-fun fennel_N : N;-fun feoff_N : N;-fun feral_A : A;-fun fermanagh_PN : PN;-fun ferment_N : N;-fun ferment_V : V;-fun ferment_V2 : V2;-fun fermentation_N : N;-fun fern_N : N;-fun ferny_A : A;-fun ferocious_A : A;-fun ferociously_Adv : Adv;-fun ferocity_N : N;-fun ferrara_PN : PN;-fun ferret_N : N;-fun ferret_V : V;-fun ferret_V2 : V2;-fun ferroconcrete_N : N;-fun ferrous_A : A;-fun ferrule_N : N;-fun ferry_N : N;-fun ferry_V : V;-fun ferry_V2 : V2;-fun ferryboat_N : N;-fun ferryhill_PN : PN;-fun ferryman_N : N;-fun fertile_A : A;-fun fertility_N : N;-fun fertilization_N : N;-fun fertilize_V2 : V2;-fun fertilizer_N : N;-fun ferule_N : N;-fun fervency_N : N;-fun fervent_A : A;-fun fervently_Adv : Adv;-fun fervid_A : A;-fun fervidly_Adv : Adv;-fun fervour_N : N;-fun festal_A : A;-fun fester_V : V;-fun festival_N : N;-fun festive_A : A;-fun festivity_N : N;-fun festoon_N : N;-fun festoon_V2 : V2;-fun fetal_A : A;-fun fetch_V : V;-fun fetch_V2 : V2;-fun fetching_A : A;-fun fete_day_N : N;-fun fetid_A : A;-fun fetish_N : N;-fun fetlock_N : N;-fun fetter_N : N;-fun fetter_V2 : V2;-fun fettle_N : N;-fun feud_N : N;-fun feudal_A : A;-fun feudalism_N : N;-fun feudatory_A : A;-fun feudatory_N : N;-fun fever_N : N;-fun fevered_A : A;-fun feverish_A : A;-fun feverishly_Adv : Adv;-fun fewness_N : N;-fun fey_A : A;-fun fez_N : N;-fun fiance_N : N;-fun fiancee_N : N;-fun fiasco_N : N;-fun fiat_N : N;-fun fib_N : N;-fun fib_V : V;-fun fibber_N : N;-fun fibbing_N : N;-fun fibre_N : N;-fun fibreboard_N : N;-fun fibreglass_N : N;-fun fibrositis_N : N;-fun fibrous_A : A;-fun fibula_N : N;-fun fickle_A : A;-fun fickleness_N : N;-fun fiction_N : N;-fun fictional_A : A;-fun fictitious_A : A;-fun fiddle_N : N;-fun fiddle_V2 : V2;-fun fiddler_N : N;-fun fiddlestick_N : N;-fun fiddling_A : A;-fun fidelity_N : N;-fun fidget_N : N;-fun fidget_V : V;-fun fidget_V2 : V2;-fun fidgety_A : A;-fun fief_N : N;-fun field_N : N;-fun field_V : V;-fun field_V2 : V2;-fun field_hospital_N : N;-fun field_officer_N : N;-fun fielder_N : N;-fun fieldsman_N : N;-fun fieldwork_N : N;-fun fiend_N : N;-fun fiendish_A : A;-fun fiendishly_Adv : Adv;-fun fierce_A : A;-fun fiercely_Adv : Adv;-fun fierceness_N : N;-fun fierily_Adv : Adv;-fun fieriness_N : N;-fun fiery_A : A;-fun fiesta_N : N;-fun fife_N : N;-fun fife_PN : PN;-fun fig_N : N;-fun fig_leaf_N : N;-fun fight_N : N;-fun fight_V : V;-fun fight_V2 : V2;-fun fighter_N : N;-fun fighting_N : N;-fun figment_N : N;-fun figurative_A : A;-fun figuratively_Adv : Adv;-fun figure_N : N;-fun figure_V : V;-fun figure_V2 : V2;-fun figured_A : A;-fun figurehead_N : N;-fun fiji_PN : PN;-fun fijian_A : A;-fun fijian_N : N;-fun filament_N : N;-fun filature_N : N;-fun filbert_N : N;-fun filch_V2 : V2;-fun file_N : N;-fun file_V : V;-fun file_V2 : V2;-fun filial_A : A;-fun filibuster_N : N;-fun filibuster_V : V;-fun filigree_N : N;-fun filipino_A : A;-fun filipino_N : N;-fun fill_N : N;-fun fill_V : V;-fun fill_V2 : V2;-fun fillet_N : N;-fun fillet_V2 : V2;-fun filling_N : N;-fun fillip_N : N;-fun filly_N : N;-fun film_N : N;-fun film_V : V;-fun film_V2 : V2;-fun film_star_N : N;-fun filmable_A : A;-fun filmy_A : A;-fun filter_N : N;-fun filter_V : V;-fun filter_V2 : V2;-fun filtertipped_A : A;-fun filth_N : N;-fun filthily_Adv : Adv;-fun filthiness_N : N;-fun filthy_A : A;-fun filtrate_N : N;-fun filtrate_V : V;-fun filtrate_V2 : V2;-fun filtration_N : N;-fun fin_N : N;-fun finable_A : A;-fun final_A : A;-fun final_N : N;-fun finale_N : N;-fun finalist_N : N;-fun finality_N : N;-fun finalize_V2 : V2;-fun finally_Adv : Adv;-fun finance_N : N;-fun finance_V2 : V2;-fun financial_A : A;-fun financially_Adv : Adv;-fun financier_N : N;-fun finch_N : N;-fun find_N : N;-fun find_V2 : V2;-fun finder_N : N;-fun finding_N : N;-fun fine_A : A;-fun fine_Adv : Adv;-fun fine_N : N;-fun fine_V2 : V2;-fun fine_tooth_A : A;-fun fineable_A : A;-fun finely_Adv : Adv;-fun fineness_N : N;-fun finery_N : N;-fun finesse_N : N;-fun finger_N : N;-fun finger_V2 : V2;-fun finger_alphabet_N : N;-fun finger_bowl_N : N;-fun finger_plate_N : N;-fun finger_post_N : N;-fun fingerboard_N : N;-fun fingermark_N : N;-fun fingernail_N : N;-fun fingerprint_N : N;-fun fingerstall_N : N;-fun fingertip_N : N;-fun finical_A : A;-fun finicky_A : A;-fun finis_N : N;-fun finish_N : N;-fun finish_V : V;-fun finish_V2 : V2;-fun finite_A : A;-fun finland_PN : PN;-fun finn_N : N;-fun finnan_N : N;-fun finnan_haddie_N : N;-fun finnan_haddock_N : N;-fun finnish_A : A;-fun finnish_N : N;-fun fiona_PN : PN;-fun fiord_N : N;-fun fir_N : N;-fun fir_cone_N : N;-fun fire_N : N;-fun fire_V : V;-fun fire_V2 : V2;-fun fire_alarm_N : N;-fun fire_brigade_N : N;-fun fire_control_N : N;-fun fire_eater_N : N;-fun fire_engine_N : N;-fun fire_escape_N : N;-fun fire_extinguisher_N : N;-fun fire_fighter_N : N;-fun fire_hose_N : N;-fun fire_power_N : N;-fun fire_raising_N : N;-fun fire_walker_N : N;-fun fire_walking_N : N;-fun fire_watcher_N : N;-fun fire_watching_N : N;-fun firearm_N : N;-fun fireball_N : N;-fun firebird_N : N;-fun firebomb_N : N;-fun firebox_N : N;-fun firebrand_N : N;-fun firebreak_N : N;-fun firebrick_N : N;-fun firebug_N : N;-fun fireclay_N : N;-fun firecracker_N : N;-fun firedamp_N : N;-fun firedog_N : N;-fun firefly_N : N;-fun fireguard_N : N;-fun firelight_N : N;-fun firelighter_N : N;-fun fireman_N : N;-fun firenze_PN : PN;-fun fireplace_N : N;-fun fireproof_A : A;-fun fireside_N : N;-fun firestone_N : N;-fun firewater_N : N;-fun firewood_N : N;-fun firework_N : N;-fun firing_line_N : N;-fun firing_party_N : N;-fun firing_squad_N : N;-fun firkin_N : N;-fun firm_A : A;-fun firm_Adv : Adv;-fun firm_N : N;-fun firm_V : V;-fun firm_V2 : V2;-fun firmament_N : N;-fun firmly_Adv : Adv;-fun firmness_N : N;-fun first_class_A : A;-fun first_class_Adv : Adv;-fun first_hand_A : A;-fun first_hand_Adv : Adv;-fun first_nighter_N : N;-fun first_rate_A : A;-fun first_rate_Adv : Adv;-fun firstborn_A : A;-fun firstborn_N : N;-fun firstly_Adv : Adv;-fun firth_N : N;-fun fiscal_A : A;-fun fish_N : N;-fun fish_V : V;-fun fish_V2 : V2;-fun fish_hook_N : N;-fun fish_knife_N : N;-fun fish_slice_N : N;-fun fishball_N : N;-fun fishbone_N : N;-fun fishcake_N : N;-fun fisher_N : N;-fun fisherman_N : N;-fun fishery_N : N;-fun fishing_N : N;-fun fishing_line_N : N;-fun fishing_rod_N : N;-fun fishing_tackle_N : N;-fun fishmonger_N : N;-fun fishpaste_N : N;-fun fishplate_N : N;-fun fishwife_N : N;-fun fishy_A : A;-fun fissile_A : A;-fun fission_N : N;-fun fissionable_A : A;-fun fissiparous_A : A;-fun fissure_N : N;-fun fist_N : N;-fun fistula_N : N;-fun fit_A : A;-fun fit_N : N;-fun fit_V : V;-fun fit_V2 : V2;-fun fitful_A : A;-fun fitfully_Adv : Adv;-fun fitly_Adv : Adv;-fun fitment_N : N;-fun fitness_N : N;-fun fitter_N : N;-fun fitting_A : A;-fun fitting_N : N;-fun fivefold_A : A;-fun fivepence_N : N;-fun fivepenny_A : A;-fun fiver_N : N;-fun fives_N : N;-fun fix_N : N;-fun fix_V : V;-fun fix_V2 : V2;-fun fixate_V2 : V2;-fun fixation_N : N;-fun fixative_N : N;-fun fixed_A : A;-fun fixedly_Adv : Adv;-fun fixture_N : N;-fun fizz_N : N;-fun fizz_V : V;-fun fizzle_V : V;-fun fizzy_A : A;-fun fjord_N : N;-fun flabbergast_V2 : V2;-fun flabbily_Adv : Adv;-fun flabbiness_N : N;-fun flabby_A : A;-fun flaccid_A : A;-fun flaccidity_N : N;-fun flag_N : N;-fun flag_V : V;-fun flag_V2 : V2;-fun flag_captain_N : N;-fun flag_day_N : N;-fun flagellant_N : N;-fun flagellate_V2 : V2;-fun flagellation_N : N;-fun flageolet_N : N;-fun flagon_N : N;-fun flagpole_N : N;-fun flagrant_A : A;-fun flagrantly_Adv : Adv;-fun flagship_N : N;-fun flagstaff_N : N;-fun flagstone_N : N;-fun flail_N : N;-fun flail_V2 : V2;-fun flair_N : N;-fun flak_N : N;-fun flake_N : N;-fun flake_V : V;-fun flakiness_N : N;-fun flaky_A : A;-fun flambeau_N : N;-fun flamboyance_N : N;-fun flamboyant_A : A;-fun flamboyantly_Adv : Adv;-fun flame_N : N;-fun flame_V : V;-fun flamethrower_N : N;-fun flaming_A : A;-fun flamingo_N : N;-fun flammable_A : A;-fun flan_N : N;-fun flange_N : N;-fun flank_N : N;-fun flank_V2 : V2;-fun flannel_N : N;-fun flannelette_N : N;-fun flap_N : N;-fun flap_V : V;-fun flap_V2 : V2;-fun flapjack_N : N;-fun flapper_N : N;-fun flare_N : N;-fun flare_V : V;-fun flare_V2 : V2;-fun flare_path_N : N;-fun flare_up_N : N;-fun flash_N : N;-fun flash_V : V;-fun flash_V2 : V2;-fun flashback_N : N;-fun flashbulb_N : N;-fun flashgun_N : N;-fun flashily_Adv : Adv;-fun flashlight_N : N;-fun flashpoint_N : N;-fun flashy_A : A;-fun flask_N : N;-fun flat_A : A;-fun flat_Adv : Adv;-fun flat_N : N;-fun flat_bottomed_A : A;-fun flat_car_N : N;-fun flat_footed_A : A;-fun flat_iron_N : N;-fun flatfish_N : N;-fun flatlet_N : N;-fun flatly_Adv : Adv;-fun flatness_N : N;-fun flatten_V : V;-fun flatten_V2 : V2;-fun flatter_V2 : V2;-fun flatterer_N : N;-fun flattery_N : N;-fun flattop_N : N;-fun flatulence_N : N;-fun flaunt_V : V;-fun flaunt_V2 : V2;-fun flautist_N : N;-fun flavour_N : N;-fun flavour_V2 : V2;-fun flavouring_N : N;-fun flavourless_A : A;-fun flaw_N : N;-fun flawed_A : A;-fun flawless_A : A;-fun flawlessly_Adv : Adv;-fun flax_N : N;-fun flaxen_A : A;-fun flay_V2 : V2;-fun flea_N : N;-fun flea_bite_N : N;-fun flea_bitten_A : A;-fun fleapit_N : N;-fun fleck_N : N;-fun fleck_V2 : V2;-fun fledged_A : A;-fun fledgeling_N : N;-fun fledgling_N : N;-fun flee_V : V;-fun flee_V2 : V2;-fun fleece_N : N;-fun fleece_V2 : V2;-fun fleecy_A : A;-fun fleet_A : A;-fun fleet_N : N;-fun fleet_PN : PN;-fun fleet_street_PN : PN;-fun fleeting_A : A;-fun fleetly_Adv : Adv;-fun fleetness_N : N;-fun fleetwood_PN : PN;-fun flemish_A : A;-fun flemish_N : N;-fun flesh_N : N;-fun flesh_wound_N : N;-fun fleshly_A : A;-fun fleshy_A : A;-fun fleur_de_lis_N : N;-fun fleur_de_lys_N : N;-fun flex_N : N;-fun flex_V2 : V2;-fun flexibility_N : N;-fun flexible_A : A;-fun flexibly_Adv : Adv;-fun flibbertigibbet_N : N;-fun flick_N : N;-fun flick_V2 : V2;-fun flick_knife_N : N;-fun flicker_N : N;-fun flicker_V : V;-fun flier_N : N;-fun flight_N : N;-fun flight_V2 : V2;-fun flightless_A : A;-fun flighty_A : A;-fun flimsily_Adv : Adv;-fun flimsiness_N : N;-fun flimsy_A : A;-fun flimsy_N : N;-fun flinch_V : V;-fun fling_N : N;-fun fling_V : V;-fun fling_V2 : V2;-fun flint_N : N;-fun flint_PN : PN;-fun flintstone_N : N;-fun flinty_A : A;-fun flip_A : A;-fun flip_N : N;-fun flip_V : V;-fun flip_V2 : V2;-fun flippancy_N : N;-fun flippant_A : A;-fun flippantly_Adv : Adv;-fun flipper_N : N;-fun flirt_N : N;-fun flirt_V : V;-fun flirtation_N : N;-fun flirtatious_A : A;-fun flit_N : N;-fun flit_V : V;-fun float_N : N;-fun float_V : V;-fun float_V2 : V2;-fun floatation_N : N;-fun floating_A : A;-fun flock_N : N;-fun flock_V : V;-fun floe_N : N;-fun flog_V2 : V2;-fun flogging_N : N;-fun flood_N : N;-fun flood_V : V;-fun flood_V2 : V2;-fun flood_tide_N : N;-fun floodgate_N : N;-fun floodlight_V2 : V2;-fun floor_N : N;-fun floor_V2 : V2;-fun floor_walker_N : N;-fun floorboard_N : N;-fun flooring_N : N;-fun floozie_N : N;-fun floozy_N : N;-fun flop_Adv : Adv;-fun flop_N : N;-fun flop_V : V;-fun flop_V2 : V2;-fun floppy_A : A;-fun flora_PN : PN;-fun floral_A : A;-fun florence_PN : PN;-fun floriculture_N : N;-fun florid_A : A;-fun florida_PN : PN;-fun floridly_Adv : Adv;-fun florin_N : N;-fun florist_N : N;-fun florrie_PN : PN;-fun floss_N : N;-fun flotation_N : N;-fun flotilla_N : N;-fun flotsam_N : N;-fun flounce_N : N;-fun flounce_V : V;-fun flounce_V2 : V2;-fun flounder_N : N;-fun flounder_V : V;-fun flour_N : N;-fun flour_V2 : V2;-fun flourish_N : N;-fun flourish_V : V;-fun flourish_V2 : V2;-fun floury_A : A;-fun flout_V2 : V2;-fun flow_N : N;-fun flow_V : V;-fun flower_N : N;-fun flower_V : V;-fun flower_girl_N : N;-fun flowerbed_N : N;-fun flowered_A : A;-fun flowerless_A : A;-fun flowerpot_N : N;-fun flowery_A : A;-fun flu_N : N;-fun fluctuate_V : V;-fun fluctuation_N : N;-fun flue_N : N;-fun fluency_N : N;-fun fluent_A : A;-fun fluently_Adv : Adv;-fun fluff_N : N;-fun fluff_V2 : V2;-fun fluffy_A : A;-fun fluid_A : A;-fun fluid_N : N;-fun fluidity_N : N;-fun fluke_N : N;-fun flume_N : N;-fun flummox_V2 : V2;-fun flunk_V : V;-fun flunk_V2 : V2;-fun flunkey_N : N;-fun flunky_N : N;-fun fluorescence_N : N;-fun fluorescent_A : A;-fun fluoridate_V2 : V2;-fun fluoridation_N : N;-fun fluoride_N : N;-fun fluoridization_N : N;-fun fluoridize_V2 : V2;-fun fluorine_N : N;-fun flurry_N : N;-fun flurry_V2 : V2;-fun flush_A : A;-fun flush_N : N;-fun flush_V : V;-fun flush_V2 : V2;-fun fluster_N : N;-fun fluster_V2 : V2;-fun flute_N : N;-fun flute_V : V;-fun flute_V2 : V2;-fun fluting_N : N;-fun flutist_N : N;-fun flutter_N : N;-fun flutter_V : V;-fun flutter_V2 : V2;-fun fluvial_A : A;-fun flux_N : N;-fun fly_A : A;-fun fly_N : N;-fun fly_V : V;-fun fly_V2 : V2;-fun fly_fish_V : V;-fun fly_fishing_N : N;-fun fly_swat_N : N;-fun fly_swatter_N : N;-fun flyblown_A : A;-fun flycatcher_N : N;-fun flyer_N : N;-fun flying_A : A;-fun flying_bomb_N : N;-fun flying_fish_N : N;-fun flying_fox_N : N;-fun flying_squad_N : N;-fun flyleaf_N : N;-fun flyover_N : N;-fun flypaper_N : N;-fun flypast_N : N;-fun flytrap_N : N;-fun flyweight_N : N;-fun flywheel_N : N;-fun fm_N : N;-fun fo'c'sle_N : N;-fun fo_N : N;-fun foal_N : N;-fun foal_V : V;-fun foam_N : N;-fun foam_V : V;-fun foam_rubber_N : N;-fun foamy_A : A;-fun fob_V2 : V2;-fun focal_A : A;-fun focus_N : N;-fun focus_V : V;-fun focus_V2 : V2;-fun fodder_N : N;-fun foe_N : N;-fun foetal_A : A;-fun foetus_N : N;-fun fog_N : N;-fun fog_V2 : V2;-fun fogbank_N : N;-fun fogbound_A : A;-fun fogey_N : N;-fun foggia_PN : PN;-fun foggy_A : A;-fun foghorn_N : N;-fun foglamp_N : N;-fun fogsignal_N : N;-fun foible_N : N;-fun foil_N : N;-fun foil_V2 : V2;-fun foist_V2 : V2;-fun fold_N : N;-fun fold_V : V;-fun fold_V2 : V2;-fun folder_N : N;-fun foliage_N : N;-fun folio_N : N;-fun folk_N : N;-fun folk_dance_N : N;-fun folkestone_PN : PN;-fun folklore_N : N;-fun folksong_N : N;-fun folksy_A : A;-fun folktale_N : N;-fun follow_V : V;-fun follow_V2 : V2;-fun follow_on_N : N;-fun follow_through_N : N;-fun follow_up_N : N;-fun follower_N : N;-fun following_A : A;-fun following_N : N;-fun folly_N : N;-fun foment_V2 : V2;-fun fomentation_N : N;-fun fond_A : A;-fun fondant_N : N;-fun fondle_V2 : V2;-fun fondly_Adv : Adv;-fun fondness_N : N;-fun font_N : N;-fun foochow_PN : PN;-fun food_N : N;-fun foodless_A : A;-fun foodstuff_N : N;-fun fool_N : N;-fun fool_V : V;-fun fool_V2 : V2;-fun foolery_N : N;-fun foolhardiness_N : N;-fun foolhardy_A : A;-fun foolish_A : A;-fun foolishly_Adv : Adv;-fun foolishness_N : N;-fun foolproof_A : A;-fun foolscap_N : N;-fun foot_N : N;-fun foot_V : V;-fun foot_V2 : V2;-fun foot_and_mouth_A : A;-fun foot_and_mouth_N : N;-fun foot_bath_N : N;-fun foot_pound_N : N;-fun foot_race_N : N;-fun foot_rot_N : N;-fun footage_N : N;-fun football_N : N;-fun footballer_N : N;-fun footboard_N : N;-fun footbridge_N : N;-fun footed_A : A;-fun footer_N : N;-fun footfall_N : N;-fun footfault_N : N;-fun foothold_N : N;-fun footing_N : N;-fun footle_V : V;-fun footle_V2 : V2;-fun footling_A : A;-fun footloose_A : A;-fun footman_N : N;-fun footmark_N : N;-fun footnote_N : N;-fun footpath_N : N;-fun footplate_N : N;-fun footprint_N : N;-fun footslog_V : V;-fun footslogger_N : N;-fun footsore_A : A;-fun footstep_N : N;-fun footstool_N : N;-fun footsure_A : A;-fun footwear_N : N;-fun footwork_N : N;-fun fop_N : N;-fun foppish_A : A;-fun forage_N : N;-fun forage_V : V;-fun foray_N : N;-fun foray_V : V;-fun forbear_N : N;-fun forbear_V : V;-fun forbear_V2 : V2;-fun forbearance_N : N;-fun forbid_V2 : V2;-fun forbidding_A : A;-fun forbiddingly_Adv : Adv;-fun force_N : N;-fun force_V2 : V2;-fun force_feed_V2 : V2;-fun force_land_V : V;-fun force_land_V2 : V2;-fun force_majeure_N : N;-fun forceful_A : A;-fun forcefully_Adv : Adv;-fun forcefulness_N : N;-fun forcemeat_N : N;-fun forcible_A : A;-fun forcibly_Adv : Adv;-fun ford_N : N;-fun ford_V2 : V2;-fun fordable_A : A;-fun fore_A : A;-fun fore_Adv : Adv;-fun fore_N : N;-fun forearm_N : N;-fun forearm_V2 : V2;-fun forebode_V2 : V2;-fun foreboding_N : N;-fun forecast_N : N;-fun forecast_V2 : V2;-fun forecaster_N : N;-fun forecastle_N : N;-fun foreclose_V : V;-fun foreclose_V2 : V2;-fun foreclosure_N : N;-fun forecourt_N : N;-fun foredoom_V2 : V2;-fun forefather_N : N;-fun forefinger_N : N;-fun forefoot_N : N;-fun forefront_N : N;-fun foregather_V : V;-fun forego_V : V;-fun forego_V2 : V2;-fun foregoing_A : A;-fun foregone_A : A;-fun foreground_N : N;-fun forehand_A : A;-fun forehead_N : N;-fun foreign_A : A;-fun foreigner_N : N;-fun foreknow_V : V;-fun foreknow_V2 : V2;-fun foreknowledge_N : N;-fun foreland_N : N;-fun foreleg_N : N;-fun forelock_N : N;-fun foreman_N : N;-fun foremast_N : N;-fun foremost_A : A;-fun foremost_Adv : Adv;-fun forename_N : N;-fun forenoon_N : N;-fun forensic_A : A;-fun foreordain_V2 : V2;-fun forerunner_N : N;-fun foresail_N : N;-fun foresee_V2 : V2;-fun foreseeable_A : A;-fun foreshadow_V2 : V2;-fun foreshore_N : N;-fun foreshorten_V2 : V2;-fun foresight_N : N;-fun foreskin_N : N;-fun forest_N : N;-fun forestall_V2 : V2;-fun forester_N : N;-fun forestry_N : N;-fun foreswear_V2 : V2;-fun foretaste_N : N;-fun foretell_V2 : V2;-fun forethought_N : N;-fun foretop_N : N;-fun forever_Adv : Adv;-fun forewarn_V2 : V2;-fun forewoman_N : N;-fun foreword_N : N;-fun forfar_PN : PN;-fun forfeit_N : N;-fun forfeit_V2 : V2;-fun forfeiture_N : N;-fun forgather_V : V;-fun forge_N : N;-fun forge_V : V;-fun forge_V2 : V2;-fun forger_N : N;-fun forgery_N : N;-fun forget_V : V;-fun forget_V2 : V2;-fun forget_me_not_N : N;-fun forgetful_A : A;-fun forgetfully_Adv : Adv;-fun forgetfulness_N : N;-fun forging_N : N;-fun forgivable_A : A;-fun forgivably_Adv : Adv;-fun forgive_V : V;-fun forgive_V2 : V2;-fun forgiveness_N : N;-fun forgiving_A : A;-fun forgivingly_Adv : Adv;-fun forgo_V2 : V2;-fun fork_N : N;-fun fork_V : V;-fun fork_V2 : V2;-fun forked_A : A;-fun forli_PN : PN;-fun forlorn_A : A;-fun forlornly_Adv : Adv;-fun forlornness_N : N;-fun form_N : N;-fun form_V : V;-fun form_V2 : V2;-fun formal_A : A;-fun formaldehyde_N : N;-fun formalin_N : N;-fun formalism_N : N;-fun formality_N : N;-fun formalize_V2 : V2;-fun formally_Adv : Adv;-fun format_N : N;-fun formation_N : N;-fun formative_A : A;-fun formby_PN : PN;-fun former_A : A;-fun formerly_Adv : Adv;-fun formic_A : A;-fun formica_N : N;-fun formidable_A : A;-fun formidably_Adv : Adv;-fun formless_A : A;-fun formlessly_Adv : Adv;-fun formosa_PN : PN;-fun formula_N : N;-fun formulate_V2 : V2;-fun formulation_N : N;-fun fornicate_V : V;-fun fornication_N : N;-fun forrader_Adv : Adv;-fun forsake_V2 : V2;-fun forsooth_Adv : Adv;-fun forswear_V2 : V2;-fun forsythia_N : N;-fun fort_N : N;-fun fort_lauderdale_PN : PN;-fun fort_william_PN : PN;-fun fort_worth_PN : PN;-fun fortaleza_PN : PN;-fun forte_A : A;-fun forte_Adv : Adv;-fun forte_N : N;-fun forth_Adv : Adv;-fun forthcoming_A : A;-fun forthright_A : A;-fun forthwith_Adv : Adv;-fun fortieth_A : A;-fun fortieth_N : N;-fun fortification_N : N;-fun fortify_V2 : V2;-fun fortissimo_A : A;-fun fortissimo_Adv : Adv;-fun fortitude_N : N;-fun fortnight_N : N;-fun fortnightly_A : A;-fun fortnightly_Adv : Adv;-fun fortress_N : N;-fun fortuitous_A : A;-fun fortuitously_Adv : Adv;-fun fortunate_A : A;-fun fortunately_Adv : Adv;-fun fortune_N : N;-fun forty_A : A;-fun forty_N : N;-fun fortyish_A : A;-fun forum_N : N;-fun forward_A : A;-fun forward_Adv : Adv;-fun forward_N : N;-fun forward_V2 : V2;-fun forwardness_N : N;-fun forwards_Adv : Adv;-fun fosse_N : N;-fun fossil_N : N;-fun fossilization_N : N;-fun fossilize_V : V;-fun fossilize_V2 : V2;-fun foster_V2 : V2;-fun foster_brother_N : N;-fun foster_child_N : N;-fun foster_father_N : N;-fun foster_mother_N : N;-fun foster_parent_N : N;-fun foster_sister_N : N;-fun foul_A : A;-fun foul_N : N;-fun foul_V : V;-fun foul_V2 : V2;-fun foul_mouthed_A : A;-fun foul_spoken_A : A;-fun foully_Adv : Adv;-fun foulness_N : N;-fun found_V2 : V2;-fun foundation_N : N;-fun foundation_stone_N : N;-fun founder_N : N;-fun founder_V : V;-fun founder_V2 : V2;-fun foundling_N : N;-fun foundress_N : N;-fun foundry_N : N;-fun fount_N : N;-fun fountain_N : N;-fun fountain_head_N : N;-fun fountain_pen_N : N;-fun four_in_hand_N : N;-fun four_part_A : A;-fun four_ply_A : A;-fun four_poster_N : N;-fun four_pounder_N : N;-fun four_wheeler_N : N;-fun fourfold_A : A;-fun fourfold_Adv : Adv;-fun fourpence_N : N;-fun fourpenny_A : A;-fun fourscore_A : A;-fun fourscore_N : N;-fun foursome_N : N;-fun foursquare_A : A;-fun fowey_PN : PN;-fun fowl_N : N;-fun fowl_V : V;-fun fowl_run_N : N;-fun fowler_N : N;-fun fowlingpiece_N : N;-fun fowlpest_N : N;-fun fox_N : N;-fun fox_V2 : V2;-fun fox_terrier_N : N;-fun foxglove_N : N;-fun foxhole_N : N;-fun foxhound_N : N;-fun foxhunt_N : N;-fun foxhunt_V : V;-fun foxhunter_N : N;-fun foxtrot_N : N;-fun foxy_A : A;-fun foyer_N : N;-fun fr_PN : PN;-fun fracas_N : N;-fun fraction_N : N;-fun fractional_A : A;-fun fractious_A : A;-fun fractiously_Adv : Adv;-fun fractiousness_N : N;-fun fracture_N : N;-fun fracture_V : V;-fun fracture_V2 : V2;-fun fragile_A : A;-fun fragility_N : N;-fun fragment_N : N;-fun fragment_V : V;-fun fragmentary_A : A;-fun fragmentation_N : N;-fun fragrance_N : N;-fun fragrant_A : A;-fun frail_A : A;-fun frailty_N : N;-fun frame_N : N;-fun frame_V : V;-fun frame_V2 : V2;-fun frame_up_N : N;-fun framework_N : N;-fun frampton_cotterell_PN : PN;-fun fran_PN : PN;-fun franc_N : N;-fun france_PN : PN;-fun frances_PN : PN;-fun franchise_N : N;-fun francis_PN : PN;-fun franciscan_A : A;-fun franciscan_N : N;-fun frank_A : A;-fun frank_N : N;-fun frank_PN : PN;-fun frank_V2 : V2;-fun frankfurt_PN : PN;-fun frankfurter_N : N;-fun frankie_PN : PN;-fun frankincense_N : N;-fun franking_machine_N : N;-fun franklin_N : N;-fun frankly_Adv : Adv;-fun frankness_N : N;-fun frantic_A : A;-fun frantically_Adv : Adv;-fun fraserburgh_PN : PN;-fun fraternal_A : A;-fun fraternally_Adv : Adv;-fun fraternity_N : N;-fun fraternization_N : N;-fun fraternize_V : V;-fun fratricide_N : N;-fun frau_N : N;-fun fraud_N : N;-fun fraudulent_A : A;-fun fraudulently_Adv : Adv;-fun fraught_A : A;-fun fray_N : N;-fun fray_V : V;-fun fray_V2 : V2;-fun frazzle_N : N;-fun freak_N : N;-fun freak_V : V;-fun freak_V2 : V2;-fun freak_out_N : N;-fun freakish_A : A;-fun freakishly_Adv : Adv;-fun freakishness_N : N;-fun freaky_A : A;-fun freckle_N : N;-fun freckle_V : V;-fun freckle_V2 : V2;-fun freckleton_PN : PN;-fun fred_PN : PN;-fun freda_PN : PN;-fun freddie_PN : PN;-fun freddy_PN : PN;-fun frederick_PN : PN;-fun frederiksberg_PN : PN;-fun free_A : A;-fun free_V2 : V2;-fun free_and_easy_A : A;-fun free_for_all_N : N;-fun free_handed_A : A;-fun free_list_N : N;-fun free_liver_N : N;-fun free_living_N : N;-fun free_range_A : A;-fun free_spoken_A : A;-fun free_standing_A : A;-fun free_thinker_N : N;-fun free_thinking_A : A;-fun free_thought_N : N;-fun free_trader_N : N;-fun freebooter_N : N;-fun freeborn_A : A;-fun freedman_N : N;-fun freedom_N : N;-fun freehand_A : A;-fun freehold_N : N;-fun freeholder_N : N;-fun freelance_N : N;-fun freelance_V : V;-fun freely_Adv : Adv;-fun freeman_N : N;-fun freemason_N : N;-fun freemasonry_N : N;-fun freesia_N : N;-fun freestone_N : N;-fun freestyle_N : N;-fun freeway_N : N;-fun freewheel_V : V;-fun freewill_A : A;-fun freeze_N : N;-fun freeze_V : V;-fun freeze_V2 : V2;-fun freezer_N : N;-fun freezing_mixture_N : N;-fun freezing_point_N : N;-fun freiburg_PN : PN;-fun freight_N : N;-fun freight_V2 : V2;-fun freight_train_N : N;-fun freighter_N : N;-fun freightliner_N : N;-fun french_A : A;-fun french_N : N;-fun frenchman_N : N;-fun frenchwoman_N : N;-fun frenetic_A : A;-fun frenzied_A : A;-fun frenziedly_Adv : Adv;-fun frenzy_N : N;-fun frequency_N : N;-fun frequent_A : A;-fun frequent_V2 : V2;-fun frequently_Adv : Adv;-fun fresco_N : N;-fun fresco_V2 : V2;-fun fresh_A : A;-fun fresh_Adv : Adv;-fun freshen_V : V;-fun freshen_V2 : V2;-fun fresher_N : N;-fun freshly_Adv : Adv;-fun freshman_N : N;-fun freshness_N : N;-fun freshwater_A : A;-fun freshwater_PN : PN;-fun fret_N : N;-fun fret_V : V;-fun fret_V2 : V2;-fun fretful_A : A;-fun fretfully_Adv : Adv;-fun fretsaw_N : N;-fun fretwork_N : N;-fun freudian_A : A;-fun fri_PN : PN;-fun friability_N : N;-fun friable_A : A;-fun friar_N : N;-fun fricassee_N : N;-fun fricassee_V2 : V2;-fun fricative_A : A;-fun fricative_N : N;-fun friction_N : N;-fun friday_N : N;-fun friday_PN : PN;-fun fridge_N : N;-fun friend_N : N;-fun friendless_A : A;-fun friendlessness_N : N;-fun friendliness_N : N;-fun friendly_A : A;-fun friendship_N : N;-fun frier_N : N;-fun frieze_N : N;-fun frigate_N : N;-fun fright_N : N;-fun fright_V2 : V2;-fun frighten_V2 : V2;-fun frightened_A : A;-fun frightening_A : A;-fun frighteningly_Adv : Adv;-fun frightful_A : A;-fun frightfully_Adv : Adv;-fun frightfulness_N : N;-fun frigid_A : A;-fun frigidity_N : N;-fun frigidly_Adv : Adv;-fun frill_N : N;-fun frilled_A : A;-fun frilly_A : A;-fun fringe_N : N;-fun fringe_V2 : V2;-fun frinton_PN : PN;-fun frippery_N : N;-fun frisk_V : V;-fun frisk_V2 : V2;-fun friskily_Adv : Adv;-fun frisky_A : A;-fun frisson_N : N;-fun fritter_N : N;-fun fritter_V2 : V2;-fun frivol_V : V;-fun frivol_V2 : V2;-fun frivolity_N : N;-fun frivolous_A : A;-fun frivolously_Adv : Adv;-fun frizz_V2 : V2;-fun frizzle_V : V;-fun frizzle_V2 : V2;-fun frizzy_A : A;-fun fro_Adv : Adv;-fun frock_N : N;-fun frock_coat_N : N;-fun frodsham_PN : PN;-fun frog_N : N;-fun frogman_N : N;-fun frogmarch_V2 : V2;-fun frolic_N : N;-fun frolic_V : V;-fun frolicsome_A : A;-fun frome_PN : PN;-fun frond_N : N;-fun front_N : N;-fun front_V : V;-fun front_V2 : V2;-fun front_bench_N : N;-fun front_bencher_N : N;-fun frontage_N : N;-fun frontal_A : A;-fun frontier_N : N;-fun frontiersman_N : N;-fun frontispiece_N : N;-fun frost_N : N;-fun frost_V : V;-fun frost_V2 : V2;-fun frost_bound_A : A;-fun frostbite_N : N;-fun frostbitten_A : A;-fun frostily_Adv : Adv;-fun frostiness_N : N;-fun frosting_N : N;-fun frosty_A : A;-fun froth_N : N;-fun froth_V : V;-fun frothily_Adv : Adv;-fun frothiness_N : N;-fun frothy_A : A;-fun froward_A : A;-fun frown_N : N;-fun frown_V : V;-fun frowningly_Adv : Adv;-fun frowsty_A : A;-fun frowzy_A : A;-fun frs_N : N;-fun fructification_N : N;-fun fructify_V : V;-fun fructify_V2 : V2;-fun frugal_A : A;-fun frugality_N : N;-fun frugally_Adv : Adv;-fun fruit_N : N;-fun fruit_V : V;-fun fruit_fly_N : N;-fun fruitcake_N : N;-fun fruiterer_N : N;-fun fruitful_A : A;-fun fruitfully_Adv : Adv;-fun fruitfulness_N : N;-fun fruition_N : N;-fun fruitless_A : A;-fun fruitlessly_Adv : Adv;-fun fruitlessness_N : N;-fun fruity_A : A;-fun frump_N : N;-fun frumpish_A : A;-fun frumpy_A : A;-fun frustrate_V2 : V2;-fun frustration_N : N;-fun fry_N : N;-fun fry_V : V;-fun fry_V2 : V2;-fun fry_pan_N : N;-fun fryer_N : N;-fun frying_pan_N : N;-fun fraulein_N : N;-fun ft_PN : PN;-fun fuchsia_N : N;-fun fuck_V : V;-fun fuck_V2 : V2;-fun fuck_all_N : N;-fun fucker_N : N;-fun fucking_A : A;-fun fuddle_V2 : V2;-fun fuddy_duddy_N : N;-fun fudge_N : N;-fun fuel_N : N;-fun fuel_V : V;-fun fuel_V2 : V2;-fun fug_N : N;-fun fuggy_A : A;-fun fugitive_A : A;-fun fugitive_N : N;-fun fugue_N : N;-fun fulcrum_N : N;-fun fulfil_V2 : V2;-fun fulfilment_N : N;-fun full_A : A;-fun full_blooded_A : A;-fun full_blown_A : A;-fun full_dress_A : A;-fun full_fashioned_A : A;-fun full_fledged_A : A;-fun full_grown_A : A;-fun full_length_A : A;-fun full_page_A : A;-fun full_scale_A : A;-fun full_time_A : A;-fun full_time_Adv : Adv;-fun fullback_N : N;-fun fuller_N : N;-fun fullness_N : N;-fun fully_Adv : Adv;-fun fully_fashioned_A : A;-fun fully_fledged_A : A;-fun fully_grown_A : A;-fun fulmar_N : N;-fun fulminate_V : V;-fun fulmination_N : N;-fun fulsome_A : A;-fun fulsomely_Adv : Adv;-fun fulsomeness_N : N;-fun fumble_V : V;-fun fumble_V2 : V2;-fun fumbler_N : N;-fun fume_N : N;-fun fume_V : V;-fun fume_V2 : V2;-fun fumigate_V2 : V2;-fun fumigation_N : N;-fun fun_N : N;-fun function_N : N;-fun function_V : V;-fun functional_A : A;-fun functionalism_N : N;-fun functionalist_N : N;-fun functionally_Adv : Adv;-fun functionary_N : N;-fun fund_N : N;-fun fund_V2 : V2;-fun fundamental_A : A;-fun fundamental_N : N;-fun fundamentalism_N : N;-fun fundamentalist_N : N;-fun fundamentally_Adv : Adv;-fun funeral_N : N;-fun funereal_A : A;-fun funfair_N : N;-fun fungicide_N : N;-fun fungoid_A : A;-fun fungous_A : A;-fun fungus_N : N;-fun funicular_N : N;-fun funk_N : N;-fun funk_V : V;-fun funk_V2 : V2;-fun funky_A : A;-fun funnel_N : N;-fun funnel_V : V;-fun funnel_V2 : V2;-fun funnily_Adv : Adv;-fun funniness_N : N;-fun funny_A : A;-fun funny_bone_N : N;-fun fur_N : N;-fun furbelow_N : N;-fun furbish_V2 : V2;-fun furious_A : A;-fun furiously_Adv : Adv;-fun furl_V : V;-fun furl_V2 : V2;-fun furlong_N : N;-fun furlough_N : N;-fun furnace_N : N;-fun furnish_V2 : V2;-fun furniture_N : N;-fun furore_N : N;-fun furrier_N : N;-fun furrow_N : N;-fun furrow_V2 : V2;-fun furry_A : A;-fun furth_PN : PN;-fun further_Adv : Adv;-fun further_V2 : V2;-fun furtherance_N : N;-fun furthermore_Adv : Adv;-fun furthermost_A : A;-fun furthest_A : A;-fun furthest_Adv : Adv;-fun furtive_A : A;-fun furtively_Adv : Adv;-fun furtiveness_N : N;-fun fury_N : N;-fun furze_N : N;-fun fuse_N : N;-fun fuse_V : V;-fun fuse_V2 : V2;-fun fuselage_N : N;-fun fushun_PN : PN;-fun fusilier_N : N;-fun fusillade_N : N;-fun fusion_N : N;-fun fuss_N : N;-fun fuss_V : V;-fun fuss_V2 : V2;-fun fussily_Adv : Adv;-fun fussiness_N : N;-fun fusspot_N : N;-fun fussy_A : A;-fun fustian_N : N;-fun fusty_A : A;-fun futile_A : A;-fun futility_N : N;-fun future_A : A;-fun future_N : N;-fun futureless_A : A;-fun futurism_N : N;-fun futurist_N : N;-fun futurity_N : N;-fun fuze_N : N;-fun fuzz_N : N;-fun fuzzy_A : A;-fun fwd_PN : PN;-fun fete_N : N;-fun fete_V2 : V2;-fun fuhrer_N : N;-fun g_man_N : N;-fun gab_N : N;-fun gabardine_N : N;-fun gabble_N : N;-fun gabble_V : V;-fun gabble_V2 : V2;-fun gaberdine_N : N;-fun gable_N : N;-fun gabled_A : A;-fun gabon_PN : PN;-fun gabonese_A : A;-fun gabonese_N : N;-fun gad_V : V;-fun gadabout_N : N;-fun gadfly_N : N;-fun gadget_N : N;-fun gadgetry_N : N;-fun gael_N : N;-fun gaelic_A : A;-fun gaelic_N : N;-fun gaff_N : N;-fun gaffe_N : N;-fun gaffer_N : N;-fun gag_N : N;-fun gag_V : V;-fun gag_V2 : V2;-fun gaga_A : A;-fun gage_N : N;-fun gage_V2 : V2;-fun gaggle_N : N;-fun gaiety_N : N;-fun gaily_Adv : Adv;-fun gain_N : N;-fun gain_V : V;-fun gain_V2 : V2;-fun gainful_A : A;-fun gainfully_Adv : Adv;-fun gainsay_V2 : V2;-fun gainsborough_N : N;-fun gainsborough_PN : PN;-fun gait_N : N;-fun gaiter_N : N;-fun gal_N : N;-fun gala_N : N;-fun galactic_A : A;-fun galantine_N : N;-fun galashiels_PN : PN;-fun galaxy_N : N;-fun gale_N : N;-fun gall_N : N;-fun gall_V2 : V2;-fun gallant_A : A;-fun gallant_N : N;-fun gallantly_Adv : Adv;-fun gallantry_N : N;-fun galleon_N : N;-fun gallery_N : N;-fun galley_N : N;-fun galley_proof_N : N;-fun galley_slave_N : N;-fun gallic_A : A;-fun gallicism_N : N;-fun gallivant_V : V;-fun gallon_N : N;-fun gallop_N : N;-fun gallop_V : V;-fun gallop_V2 : V2;-fun galloway_PN : PN;-fun gallows_bird_N : N;-fun gallstone_N : N;-fun gallup_PN : PN;-fun galore_Adv : Adv;-fun galosh_N : N;-fun galumph_V : V;-fun galvanic_A : A;-fun galvanism_N : N;-fun galvanize_V2 : V2;-fun galway_PN : PN;-fun gambia_PN : PN;-fun gambian_A : A;-fun gambian_N : N;-fun gambit_N : N;-fun gamble_N : N;-fun gamble_V : V;-fun gamble_V2 : V2;-fun gambler_N : N;-fun gambling_N : N;-fun gambling_den_N : N;-fun gamboge_N : N;-fun gambol_N : N;-fun gambol_V : V;-fun game_A : A;-fun game_N : N;-fun game_V : V;-fun game_V2 : V2;-fun game_bag_N : N;-fun game_bird_N : N;-fun game_licence_N : N;-fun gamecock_N : N;-fun gamekeeper_N : N;-fun gamely_Adv : Adv;-fun games_master_N : N;-fun games_mistress_N : N;-fun gamesmanship_N : N;-fun gaming_house_N : N;-fun gaming_table_N : N;-fun gamma_N : N;-fun gammon_N : N;-fun gammy_A : A;-fun gamp_N : N;-fun gamut_N : N;-fun gamy_A : A;-fun gander_N : N;-fun gang_N : N;-fun gang_V : V;-fun ganger_N : N;-fun gangling_A : A;-fun ganglion_N : N;-fun gangplank_N : N;-fun gangrene_N : N;-fun gangrene_V : V;-fun gangrene_V2 : V2;-fun gangrenous_A : A;-fun gangster_N : N;-fun gangway_N : N;-fun gannet_N : N;-fun gantry_N : N;-fun gaol_N : N;-fun gaol_V2 : V2;-fun gaolbird_N : N;-fun gaolbreak_N : N;-fun gaoler_N : N;-fun gap_N : N;-fun gap_toothed_A : A;-fun gape_N : N;-fun gape_V : V;-fun garage_N : N;-fun garage_V2 : V2;-fun garb_N : N;-fun garb_V2 : V2;-fun garbage_N : N;-fun garbage_can_N : N;-fun garble_V2 : V2;-fun garden_N : N;-fun garden_V : V;-fun garden_truck_N : N;-fun gardener_N : N;-fun gardenia_N : N;-fun gardening_N : N;-fun gareth_PN : PN;-fun garforth_PN : PN;-fun gargantuan_A : A;-fun gargle_N : N;-fun gargle_V : V;-fun gargle_V2 : V2;-fun gargoyle_N : N;-fun garish_A : A;-fun garishly_Adv : Adv;-fun garland_N : N;-fun garland_V2 : V2;-fun garlic_N : N;-fun garment_N : N;-fun garner_N : N;-fun garner_V2 : V2;-fun garnet_N : N;-fun garnish_N : N;-fun garnish_V2 : V2;-fun garotte_N : N;-fun garotte_V2 : V2;-fun garret_N : N;-fun garrison_N : N;-fun garrison_V2 : V2;-fun garrotte_N : N;-fun garrotte_V2 : V2;-fun garrowhill_PN : PN;-fun garrulity_N : N;-fun garrulous_A : A;-fun garter_N : N;-fun gary_PN : PN;-fun gas_N : N;-fun gas_V : V;-fun gas_V2 : V2;-fun gas_bracket_N : N;-fun gas_cooker_N : N;-fun gas_engine_N : N;-fun gas_fitter_N : N;-fun gas_helmet_N : N;-fun gas_holder_N : N;-fun gas_mask_N : N;-fun gas_meter_N : N;-fun gas_oven_N : N;-fun gas_ring_N : N;-fun gas_station_N : N;-fun gas_stove_N : N;-fun gasbag_N : N;-fun gaseous_A : A;-fun gash_N : N;-fun gash_V2 : V2;-fun gasification_N : N;-fun gasify_V : V;-fun gasify_V2 : V2;-fun gasket_N : N;-fun gaslight_N : N;-fun gasmask_N : N;-fun gasolene_N : N;-fun gasoline_N : N;-fun gasometer_N : N;-fun gasp_N : N;-fun gasp_V : V;-fun gasp_V2 : V2;-fun gassy_A : A;-fun gastric_A : A;-fun gastritis_N : N;-fun gastronomic_A : A;-fun gastronomy_N : N;-fun gasworks_N : N;-fun gate_N : N;-fun gate_V2 : V2;-fun gatecrash_V2 : V2;-fun gatecrasher_N : N;-fun gatehouse_N : N;-fun gatepost_N : N;-fun gateshead_PN : PN;-fun gateway_N : N;-fun gather_V : V;-fun gather_V2 : V2;-fun gatherer_N : N;-fun gathering_N : N;-fun gatt_N : N;-fun gauche_A : A;-fun gaucherie_N : N;-fun gaucho_N : N;-fun gaud_N : N;-fun gaudily_Adv : Adv;-fun gaudy_A : A;-fun gaudy_N : N;-fun gauge_N : N;-fun gauge_V2 : V2;-fun gaul_N : N;-fun gaunt_A : A;-fun gauntlet_N : N;-fun gauntness_N : N;-fun gauze_N : N;-fun gauzy_A : A;-fun gavel_N : N;-fun gavin_PN : PN;-fun gavotte_N : N;-fun gawk_N : N;-fun gawkiness_N : N;-fun gawky_A : A;-fun gawp_V : V;-fun gay_A : A;-fun gay_N : N;-fun gayness_N : N;-fun gaze_N : N;-fun gaze_V : V;-fun gazelle_N : N;-fun gazette_N : N;-fun gazette_V2 : V2;-fun gazetteer_N : N;-fun gazump_V : V;-fun gazump_V2 : V2;-fun gb_PN : PN;-fun gcse_N : N;-fun gcses_N : N;-fun gdansk_PN : PN;-fun gdn_PN : PN;-fun gdns_PN : PN;-fun gear_N : N;-fun gear_V : V;-fun gear_V2 : V2;-fun gear_case_N : N;-fun gearbox_N : N;-fun gearshift_N : N;-fun gecko_N : N;-fun gee_gee_N : N;-fun geezer_N : N;-fun geiger_N : N;-fun geisha_N : N;-fun gel_N : N;-fun gel_V : V;-fun gelatin_N : N;-fun gelatine_N : N;-fun gelatinous_A : A;-fun geld_V2 : V2;-fun gelding_N : N;-fun gelignite_N : N;-fun gelligaer_PN : PN;-fun gelsenkirchen_PN : PN;-fun gem_N : N;-fun gemini_PN : PN;-fun gemmed_A : A;-fun gen_N : N;-fun gen_PN : PN;-fun gen_V2 : V2;-fun gendarme_N : N;-fun gendarmerie_N : N;-fun gender_N : N;-fun gene_N : N;-fun gene_PN : PN;-fun genealogical_A : A;-fun genealogically_Adv : Adv;-fun genealogist_N : N;-fun genealogy_N : N;-fun general_A : A;-fun general_N : N;-fun generalissimo_N : N;-fun generality_N : N;-fun generalization_N : N;-fun generalize_V : V;-fun generalize_V2 : V2;-fun generally_Adv : Adv;-fun generate_V2 : V2;-fun generation_N : N;-fun generative_A : A;-fun generator_N : N;-fun generic_A : A;-fun generically_Adv : Adv;-fun generosity_N : N;-fun generous_A : A;-fun generously_Adv : Adv;-fun genesis_N : N;-fun genetic_A : A;-fun genetically_Adv : Adv;-fun geneticist_N : N;-fun genetics_N : N;-fun geneva_PN : PN;-fun genial_A : A;-fun geniality_N : N;-fun genially_Adv : Adv;-fun genie_N : N;-fun genital_A : A;-fun genitive_A : A;-fun genius_N : N;-fun genius_loci_N : N;-fun genoa_PN : PN;-fun genocide_N : N;-fun genova_PN : PN;-fun genre_N : N;-fun genre_painting_N : N;-fun gent_N : N;-fun genteel_A : A;-fun genteelly_Adv : Adv;-fun gentian_N : N;-fun gentile_A : A;-fun gentile_N : N;-fun gentility_N : N;-fun gentle_A : A;-fun gentleman_N : N;-fun gentleman_at_arms_N : N;-fun gentlemanly_A : A;-fun gentleness_N : N;-fun gentlewoman_N : N;-fun gently_Adv : Adv;-fun gentry_N : N;-fun genuflect_V : V;-fun genuflection_N : N;-fun genuflexion_N : N;-fun genuine_A : A;-fun genuinely_Adv : Adv;-fun genuineness_N : N;-fun genus_N : N;-fun geocentric_A : A;-fun geoff_PN : PN;-fun geoffrey_PN : PN;-fun geographer_N : N;-fun geographical_A : A;-fun geographically_Adv : Adv;-fun geography_N : N;-fun geological_A : A;-fun geologically_Adv : Adv;-fun geologist_N : N;-fun geology_N : N;-fun geometric_A : A;-fun geometrical_A : A;-fun geometrically_Adv : Adv;-fun geometry_N : N;-fun geophysical_A : A;-fun geophysics_N : N;-fun geopolitics_N : N;-fun george_PN : PN;-fun georgette_N : N;-fun georgia_PN : PN;-fun georgian_A : A;-fun georgian_N : N;-fun georgie_PN : PN;-fun gerald_PN : PN;-fun geraldine_PN : PN;-fun geranium_N : N;-fun gerard_PN : PN;-fun geriatric_A : A;-fun geriatrician_N : N;-fun geriatrics_N : N;-fun germ_N : N;-fun german_A : A;-fun german_N : N;-fun germane_A : A;-fun germanic_A : A;-fun germany_PN : PN;-fun germicide_N : N;-fun germinate_V : V;-fun germinate_V2 : V2;-fun germination_N : N;-fun gerontology_N : N;-fun gerry_PN : PN;-fun gerrymander_N : N;-fun gerrymander_V2 : V2;-fun gertie_PN : PN;-fun gertrude_PN : PN;-fun gerund_N : N;-fun gestapo_N : N;-fun gestation_N : N;-fun gesticulate_V : V;-fun gesticulation_N : N;-fun gesture_N : N;-fun gesture_V : V;-fun get_V : V;-fun get_V2 : V2;-fun get_at_able_A : A;-fun get_together_N : N;-fun get_up_N : N;-fun getaway_N : N;-fun geum_N : N;-fun geyser_N : N;-fun ghana_PN : PN;-fun ghanaian_A : A;-fun ghanaian_N : N;-fun gharry_N : N;-fun ghastly_A : A;-fun ghat_N : N;-fun ghee_N : N;-fun ghent_PN : PN;-fun gherkin_N : N;-fun ghetto_N : N;-fun ghost_N : N;-fun ghost_V : V;-fun ghost_V2 : V2;-fun ghost_writer_N : N;-fun ghostliness_N : N;-fun ghostly_A : A;-fun ghoul_N : N;-fun ghoulish_A : A;-fun ghq_PN : PN;-fun gi_N : N;-fun giant_N : N;-fun giantess_N : N;-fun gibber_V : V;-fun gibberish_N : N;-fun gibbet_N : N;-fun gibbet_V2 : V2;-fun gibbon_N : N;-fun gibbous_A : A;-fun gibe_N : N;-fun gibe_V : V;-fun gibingly_Adv : Adv;-fun gibraltar_PN : PN;-fun gibraltarian_A : A;-fun gibraltarian_N : N;-fun giddily_Adv : Adv;-fun giddiness_N : N;-fun giddy_A : A;-fun giffnock_PN : PN;-fun gift_N : N;-fun gift_V2 : V2;-fun gifted_A : A;-fun gig_N : N;-fun gigantic_A : A;-fun giggle_N : N;-fun giggle_V : V;-fun gigolo_N : N;-fun gilbert_PN : PN;-fun gilbertian_A : A;-fun gild_N : N;-fun gild_V2 : V2;-fun gilder_N : N;-fun gilding_N : N;-fun giles_PN : PN;-fun gilfach_goch_PN : PN;-fun gill_N : N;-fun gill_PN : PN;-fun gillian_PN : PN;-fun gillie_N : N;-fun gillingham_PN : PN;-fun gilt_N : N;-fun gilt_edged_A : A;-fun gimcrack_A : A;-fun gimlet_N : N;-fun gimmick_N : N;-fun gin_N : N;-fun gin_V2 : V2;-fun gina_PN : PN;-fun ginger_N : N;-fun ginger_V2 : V2;-fun gingerbread_N : N;-fun gingerly_A : A;-fun gingerly_Adv : Adv;-fun gingham_N : N;-fun gingko_N : N;-fun ginseng_N : N;-fun gipsy_N : N;-fun giraffe_N : N;-fun gird_V2 : V2;-fun girder_N : N;-fun girdle_N : N;-fun girdle_V2 : V2;-fun girl_N : N;-fun girlfriend_N : N;-fun girlhood_N : N;-fun girlish_A : A;-fun girlishly_Adv : Adv;-fun girlishness_N : N;-fun giro_N : N;-fun girth_N : N;-fun girvan_PN : PN;-fun gis_N : N;-fun gist_N : N;-fun give_N : N;-fun give_V : V;-fun give_V2 : V2;-fun giveaway_N : N;-fun giver_N : N;-fun gizzard_N : N;-fun glacial_A : A;-fun glacier_N : N;-fun glace_A : A;-fun glad_A : A;-fun gladden_V2 : V2;-fun glade_N : N;-fun gladiator_N : N;-fun gladiatorial_A : A;-fun gladiolus_N : N;-fun gladly_Adv : Adv;-fun gladness_N : N;-fun gladsome_A : A;-fun gladys_PN : PN;-fun glamorgan_PN : PN;-fun glamorization_N : N;-fun glamorize_V2 : V2;-fun glamorous_A : A;-fun glamour_N : N;-fun glance_N : N;-fun glance_V : V;-fun glance_V2 : V2;-fun gland_N : N;-fun glanders_N : N;-fun glandular_A : A;-fun glare_N : N;-fun glare_V : V;-fun glare_V2 : V2;-fun glaring_A : A;-fun glasgow_PN : PN;-fun glass_N : N;-fun glass_V2 : V2;-fun glass_blower_N : N;-fun glass_cutter_N : N;-fun glass_wool_N : N;-fun glassful_N : N;-fun glasshouse_N : N;-fun glassware_N : N;-fun glassworks_N : N;-fun glassy_A : A;-fun glastonbury_PN : PN;-fun glaswegian_A : A;-fun glaswegian_N : N;-fun glaucoma_N : N;-fun glaucous_A : A;-fun glaze_N : N;-fun glaze_V : V;-fun glaze_V2 : V2;-fun glazier_N : N;-fun gleam_N : N;-fun gleam_V : V;-fun glean_V : V;-fun glean_V2 : V2;-fun gleaner_N : N;-fun glebe_N : N;-fun glee_N : N;-fun gleeful_A : A;-fun gleefully_Adv : Adv;-fun glen_N : N;-fun glen_PN : PN;-fun glengarry_N : N;-fun glenrothes_PN : PN;-fun glib_A : A;-fun glibly_Adv : Adv;-fun glibness_N : N;-fun glide_N : N;-fun glide_V : V;-fun glider_N : N;-fun gliding_N : N;-fun glimmer_N : N;-fun glimmer_V : V;-fun glimpse_N : N;-fun glimpse_V2 : V2;-fun glint_N : N;-fun glint_V : V;-fun glissade_N : N;-fun glissade_V : V;-fun glissando_A : A;-fun glissando_Adv : Adv;-fun glisten_V : V;-fun glister_N : N;-fun glister_V : V;-fun glitter_N : N;-fun glitter_V : V;-fun glittering_A : A;-fun gloaming_N : N;-fun gloat_V : V;-fun gloatingly_Adv : Adv;-fun global_A : A;-fun globe_N : N;-fun globetrot_V : V;-fun globetrotter_N : N;-fun globular_A : A;-fun globule_N : N;-fun glockenspiel_N : N;-fun gloom_N : N;-fun gloomily_Adv : Adv;-fun gloomy_A : A;-fun gloria_PN : PN;-fun glorification_N : N;-fun glorify_V2 : V2;-fun glorious_A : A;-fun gloriously_Adv : Adv;-fun glory_N : N;-fun glory_V : V;-fun glory_hole_N : N;-fun gloss_N : N;-fun gloss_V2 : V2;-fun glossary_N : N;-fun glossily_Adv : Adv;-fun glossiness_N : N;-fun glossop_PN : PN;-fun glossy_A : A;-fun glottal_A : A;-fun glottis_N : N;-fun gloucester_PN : PN;-fun gloucestershire_PN : PN;-fun glove_N : N;-fun glove_compartment_N : N;-fun gloved_A : A;-fun glow_N : N;-fun glow_V : V;-fun glow_worm_N : N;-fun glower_V : V;-fun gloweringly_Adv : Adv;-fun glowing_A : A;-fun glowingly_Adv : Adv;-fun glucose_N : N;-fun glue_N : N;-fun glue_V2 : V2;-fun gluey_A : A;-fun glum_A : A;-fun glumly_Adv : Adv;-fun glumness_N : N;-fun glusburn_PN : PN;-fun glut_N : N;-fun glut_V2 : V2;-fun gluten_N : N;-fun glutinous_A : A;-fun glutton_N : N;-fun gluttonous_A : A;-fun gluttonously_Adv : Adv;-fun gluttony_N : N;-fun glycerine_N : N;-fun gmt_PN : PN;-fun gnarled_A : A;-fun gnash_V : V;-fun gnash_V2 : V2;-fun gnat_N : N;-fun gnaw_V : V;-fun gnaw_V2 : V2;-fun gnome_N : N;-fun gnp_N : N;-fun gnu_N : N;-fun go_N : N;-fun go_V : V;-fun go_ahead_N : N;-fun go_as_you_please_A : A;-fun go_between_N : N;-fun go_by_N : N;-fun go_cart_N : N;-fun go_getter_N : N;-fun go_kart_N : N;-fun go_slow_N : N;-fun go_to_meeting_A : A;-fun goad_N : N;-fun goad_V2 : V2;-fun goal_N : N;-fun goal_kick_N : N;-fun goal_line_N : N;-fun goalie_N : N;-fun goalkeeper_N : N;-fun goalless_A : A;-fun goalmouth_N : N;-fun goat_N : N;-fun goatee_N : N;-fun goatherd_N : N;-fun goatskin_N : N;-fun gob_N : N;-fun gobbet_N : N;-fun gobble_N : N;-fun gobble_V : V;-fun gobble_V2 : V2;-fun gobbledygook_N : N;-fun gobbler_N : N;-fun goblet_N : N;-fun goblin_N : N;-fun god_N : N;-fun god_PN : PN;-fun god_damn_A : A;-fun god_damned_A : A;-fun godalming_PN : PN;-fun godchild_N : N;-fun goddam_A : A;-fun goddam_Adv : Adv;-fun goddaughter_N : N;-fun goddess_N : N;-fun godfather_N : N;-fun godfearing_A : A;-fun godforsaken_A : A;-fun godfrey_PN : PN;-fun godhead_N : N;-fun godless_A : A;-fun godlessness_N : N;-fun godlike_A : A;-fun godliness_N : N;-fun godly_A : A;-fun godmanchester_PN : PN;-fun godmother_N : N;-fun godown_N : N;-fun godparent_N : N;-fun godsend_N : N;-fun godson_N : N;-fun godspeed_N : N;-fun goffs_oak_PN : PN;-fun goggle_V : V;-fun goggle_box_N : N;-fun goggle_eyed_A : A;-fun going_A : A;-fun going_N : N;-fun going_over_N : N;-fun goitre_N : N;-fun golbourne_PN : PN;-fun gold_N : N;-fun gold_beater_N : N;-fun gold_digger_N : N;-fun gold_dust_N : N;-fun gold_foil_N : N;-fun gold_leaf_N : N;-fun gold_plate_N : N;-fun gold_rush_N : N;-fun golden_A : A;-fun goldfield_N : N;-fun goldfinch_N : N;-fun goldfish_N : N;-fun goldmine_N : N;-fun goldsmith_N : N;-fun golf_N : N;-fun golf_V : V;-fun golf_ball_N : N;-fun golf_club_N : N;-fun golf_course_N : N;-fun golf_links_N : N;-fun golfer_N : N;-fun goliath_N : N;-fun golliwog_N : N;-fun golosh_N : N;-fun gondola_N : N;-fun gondolier_N : N;-fun goner_N : N;-fun gong_N : N;-fun gong_V2 : V2;-fun gonorrhea_N : N;-fun gonorrhoea_N : N;-fun goo_N : N;-fun good_A : A;-fun good_N : N;-fun good_fellowship_N : N;-fun good_for_naught_A : A;-fun good_for_naught_N : N;-fun good_for_nothing_A : A;-fun good_for_nothing_N : N;-fun good_humoured_A : A;-fun good_looking_A : A;-fun good_natured_A : A;-fun good_neighbourliness_N : N;-fun good_tempered_A : A;-fun good_time_A : A;-fun goodbye_N : N;-fun goodish_A : A;-fun goodly_A : A;-fun goodness_N : N;-fun goodwill_N : N;-fun goody_N : N;-fun goody_goody_A : A;-fun goody_goody_N : N;-fun gooey_A : A;-fun goof_N : N;-fun goof_V : V;-fun goof_V2 : V2;-fun goofy_A : A;-fun googly_N : N;-fun goole_PN : PN;-fun goon_N : N;-fun goose_N : N;-fun goose_flesh_N : N;-fun goose_step_N : N;-fun gooseberry_N : N;-fun gopher_N : N;-fun gordian_A : A;-fun gordon_PN : PN;-fun gore_N : N;-fun gore_V2 : V2;-fun gorge_N : N;-fun gorge_V : V;-fun gorge_V2 : V2;-fun gorgeous_A : A;-fun gorgeously_Adv : Adv;-fun gorgon_N : N;-fun gorgonzola_N : N;-fun gorilla_N : N;-fun gorky_PN : PN;-fun gormandize_V : V;-fun gormless_A : A;-fun gorse_N : N;-fun gorseinon_PN : PN;-fun gory_A : A;-fun gosling_N : N;-fun gospel_N : N;-fun gosport_PN : PN;-fun gossamer_N : N;-fun gossip_N : N;-fun gossip_V : V;-fun goteborg_PN : PN;-fun goth_N : N;-fun gothenburg_PN : PN;-fun gothic_A : A;-fun gothic_N : N;-fun gottingen_PN : PN;-fun gouache_N : N;-fun gouge_N : N;-fun gouge_V2 : V2;-fun goulash_N : N;-fun gourd_N : N;-fun gourmand_N : N;-fun gourmet_N : N;-fun gourock_PN : PN;-fun gout_N : N;-fun gouty_A : A;-fun gov_PN : PN;-fun govern_V : V;-fun govern_V2 : V2;-fun governance_N : N;-fun governess_N : N;-fun governing_A : A;-fun government_N : N;-fun governmental_A : A;-fun governor_N : N;-fun governor_general_N : N;-fun govt_N : N;-fun gown_N : N;-fun gown_V2 : V2;-fun gp's_N : N;-fun gp_N : N;-fun grab_N : N;-fun grab_V : V;-fun grab_V2 : V2;-fun grabber_N : N;-fun grace_N : N;-fun grace_V2 : V2;-fun graceful_A : A;-fun gracefully_Adv : Adv;-fun graceless_A : A;-fun gracelessly_Adv : Adv;-fun gracious_A : A;-fun graciously_Adv : Adv;-fun graciousness_N : N;-fun gradation_N : N;-fun grade_N : N;-fun grade_V2 : V2;-fun gradient_N : N;-fun gradual_A : A;-fun gradually_Adv : Adv;-fun gradualness_N : N;-fun graduate_N : N;-fun graduate_V : V;-fun graduate_V2 : V2;-fun graduation_N : N;-fun graffito_N : N;-fun graft_N : N;-fun graft_V : V;-fun graft_V2 : V2;-fun grail_N : N;-fun grain_N : N;-fun grained_A : A;-fun gram_N : N;-fun grammar_N : N;-fun grammarian_N : N;-fun grammatical_A : A;-fun grammatically_Adv : Adv;-fun gramme_N : N;-fun gramophone_N : N;-fun grampian_PN : PN;-fun grampus_N : N;-fun granada_PN : PN;-fun granary_N : N;-fun grand_A : A;-fun grand_prix_N : N;-fun grandad_N : N;-fun grandaunt_N : N;-fun grandchild_N : N;-fun granddad_N : N;-fun granddaughter_N : N;-fun grandee_N : N;-fun grandeur_N : N;-fun grandfather_N : N;-fun grandiloquence_N : N;-fun grandiloquent_A : A;-fun grandiose_A : A;-fun grandly_Adv : Adv;-fun grandma_N : N;-fun grandmother_N : N;-fun grandnephew_N : N;-fun grandniece_N : N;-fun grandpa_N : N;-fun grandparent_N : N;-fun grandson_N : N;-fun grandstand_N : N;-fun granduncle_N : N;-fun grange_N : N;-fun grangemouth_PN : PN;-fun granite_N : N;-fun grannie_N : N;-fun granny_N : N;-fun grant_N : N;-fun grant_V2 : V2;-fun grantham_PN : PN;-fun granular_A : A;-fun granularity_N : N;-fun granulate_V : V;-fun granulate_V2 : V2;-fun granule_N : N;-fun grape_N : N;-fun grape_sugar_N : N;-fun grapefruit_N : N;-fun grapeshot_N : N;-fun grapevine_N : N;-fun graph_N : N;-fun graphic_A : A;-fun graphical_A : A;-fun graphically_Adv : Adv;-fun graphics_N : N;-fun graphite_N : N;-fun grapnel_N : N;-fun grapple_V : V;-fun grappling_iron_N : N;-fun grasp_N : N;-fun grasp_V : V;-fun grasp_V2 : V2;-fun grasping_A : A;-fun grass_N : N;-fun grass_V : V;-fun grass_V2 : V2;-fun grasshopper_N : N;-fun grassland_N : N;-fun grassy_A : A;-fun grate_N : N;-fun grate_V : V;-fun grate_V2 : V2;-fun grateful_A : A;-fun gratefully_Adv : Adv;-fun gratefulness_N : N;-fun grater_N : N;-fun gratification_N : N;-fun gratify_V2 : V2;-fun gratifying_A : A;-fun grating_N : N;-fun gratingly_Adv : Adv;-fun gratis_A : A;-fun gratis_Adv : Adv;-fun gratitude_N : N;-fun gratuitous_A : A;-fun gratuitously_Adv : Adv;-fun gratuity_N : N;-fun grave_A : A;-fun grave_N : N;-fun grave_V2 : V2;-fun gravel_N : N;-fun gravel_V2 : V2;-fun gravelly_A : A;-fun gravely_Adv : Adv;-fun graven_A : A;-fun gravenhage_PN : PN;-fun gravesend_PN : PN;-fun gravestone_N : N;-fun graveyard_N : N;-fun graving_dock_N : N;-fun gravitate_V : V;-fun gravitation_N : N;-fun gravity_N : N;-fun gravure_N : N;-fun gravy_N : N;-fun gravy_boat_N : N;-fun gray_A : A;-fun gray_N : N;-fun gray_V : V;-fun gray_V2 : V2;-fun graz_PN : PN;-fun graze_N : N;-fun graze_V : V;-fun graze_V2 : V2;-fun grazier_N : N;-fun grazing_land_N : N;-fun grease_N : N;-fun grease_V2 : V2;-fun grease_gun_N : N;-fun greasepaint_N : N;-fun greaseproof_A : A;-fun greaser_N : N;-fun greasily_Adv : Adv;-fun greasiness_N : N;-fun greasy_A : A;-fun great_A : A;-fun great_harwood_PN : PN;-fun great_malvern_PN : PN;-fun great_shelford_PN : PN;-fun great_yarmouth_PN : PN;-fun greatcoat_N : N;-fun greatly_Adv : Adv;-fun greatness_N : N;-fun grebe_N : N;-fun grecian_A : A;-fun greece_PN : PN;-fun greed_N : N;-fun greedily_Adv : Adv;-fun greediness_N : N;-fun greedy_A : A;-fun greek_A : A;-fun greek_N : N;-fun green_A : A;-fun green_N : N;-fun greenback_N : N;-fun greenery_N : N;-fun greeneyed_A : A;-fun greenfly_N : N;-fun greengage_N : N;-fun greengrocer_N : N;-fun greengrocery_N : N;-fun greenhorn_N : N;-fun greenhouse_N : N;-fun greenish_A : A;-fun greenishness_N : N;-fun greenock_PN : PN;-fun greensward_N : N;-fun greenwich_PN : PN;-fun greenwood_N : N;-fun greet_V2 : V2;-fun greeting_N : N;-fun greg_PN : PN;-fun gregarious_A : A;-fun gregariously_Adv : Adv;-fun gregariousness_N : N;-fun gregorian_A : A;-fun gregory_PN : PN;-fun gremlin_N : N;-fun grenada_PN : PN;-fun grenade_N : N;-fun grenadian_A : A;-fun grenadian_N : N;-fun grenadier_N : N;-fun grey_A : A;-fun grey_N : N;-fun grey_V : V;-fun grey_V2 : V2;-fun grey_headed_A : A;-fun greybeard_N : N;-fun greyhound_N : N;-fun greyish_A : A;-fun greyly_Adv : Adv;-fun grid_N : N;-fun griddle_N : N;-fun gridiron_N : N;-fun grief_N : N;-fun grievance_N : N;-fun grieve_V : V;-fun grieve_V2 : V2;-fun grievous_A : A;-fun grievously_Adv : Adv;-fun griffin_N : N;-fun griffon_N : N;-fun grill_N : N;-fun grill_V : V;-fun grill_V2 : V2;-fun grille_N : N;-fun grillroom_N : N;-fun grim_A : A;-fun grimace_N : N;-fun grimace_V : V;-fun grime_N : N;-fun grime_V2 : V2;-fun grimethorpe_PN : PN;-fun grimly_Adv : Adv;-fun grimness_N : N;-fun grimsby_PN : PN;-fun grimy_A : A;-fun grin_N : N;-fun grin_V : V;-fun grin_V2 : V2;-fun grind_N : N;-fun grind_V : V;-fun grind_V2 : V2;-fun grinder_N : N;-fun grindstone_N : N;-fun grinstead_PN : PN;-fun grip_N : N;-fun grip_V : V;-fun grip_V2 : V2;-fun grippe_N : N;-fun gripsack_N : N;-fun grisly_A : A;-fun grist_N : N;-fun gristle_N : N;-fun grit_N : N;-fun grit_V2 : V2;-fun grits_N : N;-fun gritty_A : A;-fun grizzle_V : V;-fun grizzled_A : A;-fun grizzly_N : N;-fun groan_N : N;-fun groan_V : V;-fun groan_V2 : V2;-fun groat_N : N;-fun grocer_N : N;-fun grocery_N : N;-fun grog_N : N;-fun groggy_A : A;-fun groin_N : N;-fun groin_V2 : V2;-fun groningen_PN : PN;-fun groom_N : N;-fun groom_V2 : V2;-fun groove_N : N;-fun groove_V2 : V2;-fun groover_N : N;-fun groovy_A : A;-fun grope_V : V;-fun grope_V2 : V2;-fun gropingly_Adv : Adv;-fun gross_A : A;-fun gross_N : N;-fun gross_V2 : V2;-fun grossly_Adv : Adv;-fun grossness_N : N;-fun grot_N : N;-fun grotesque_A : A;-fun grotesque_N : N;-fun grotesquely_Adv : Adv;-fun grotesqueness_N : N;-fun grotto_N : N;-fun grotty_A : A;-fun grouch_N : N;-fun grouch_V : V;-fun grouchy_A : A;-fun ground_N : N;-fun ground_V : V;-fun ground_V2 : V2;-fun ground_bait_N : N;-fun ground_fish_N : N;-fun ground_plan_N : N;-fun ground_rent_N : N;-fun grounding_N : N;-fun groundless_A : A;-fun groundnut_N : N;-fun groundsel_N : N;-fun groundsheet_N : N;-fun groundsman_N : N;-fun groundwork_N : N;-fun group_N : N;-fun group_V : V;-fun group_V2 : V2;-fun grouping_N : N;-fun grouse_N : N;-fun grouse_V : V;-fun grove_N : N;-fun grovel_V : V;-fun groveller_N : N;-fun grow_V : V;-fun grow_V2 : V2;-fun grower_N : N;-fun growl_N : N;-fun growl_V : V;-fun growl_V2 : V2;-fun growler_N : N;-fun growlingly_Adv : Adv;-fun grown_up_A : A;-fun grown_up_N : N;-fun growth_N : N;-fun groyne_N : N;-fun grub_N : N;-fun grub_V : V;-fun grub_V2 : V2;-fun grubbiness_N : N;-fun grubby_A : A;-fun grudge_N : N;-fun grudge_V2 : V2;-fun grudgingly_Adv : Adv;-fun gruel_N : N;-fun gruelling_A : A;-fun gruesome_A : A;-fun gruesomely_Adv : Adv;-fun gruesomeness_N : N;-fun gruff_A : A;-fun gruffly_Adv : Adv;-fun gruffness_N : N;-fun grumble_N : N;-fun grumble_V : V;-fun grumble_V2 : V2;-fun grumbler_N : N;-fun grumpily_Adv : Adv;-fun grumpiness_N : N;-fun grumpy_A : A;-fun grundyism_N : N;-fun grunt_N : N;-fun grunt_V : V;-fun grunt_V2 : V2;-fun gryphon_N : N;-fun guadalajara_PN : PN;-fun guano_N : N;-fun guarantee_N : N;-fun guarantee_V2 : V2;-fun guarantor_N : N;-fun guaranty_N : N;-fun guard_N : N;-fun guard_V : V;-fun guard_V2 : V2;-fun guard_boat_N : N;-fun guarded_A : A;-fun guardedly_Adv : Adv;-fun guardhouse_N : N;-fun guardian_N : N;-fun guardianship_N : N;-fun guardrail_N : N;-fun guardroom_N : N;-fun guardship_N : N;-fun guardsman_N : N;-fun guatemala_PN : PN;-fun guatemala_city_PN : PN;-fun guatemalan_A : A;-fun guatemalan_N : N;-fun guava_N : N;-fun guayaquil_PN : PN;-fun gudgeon_N : N;-fun guelder_rose_N : N;-fun guerilla_N : N;-fun guerrilla_N : N;-fun guess_N : N;-fun guess_V : V;-fun guess_V2 : V2;-fun guesstimate_N : N;-fun guesswork_N : N;-fun guest_N : N;-fun guest_night_N : N;-fun guesthouse_N : N;-fun guestroom_N : N;-fun guffaw_N : N;-fun guffaw_V : V;-fun guidance_N : N;-fun guide_N : N;-fun guide_V2 : V2;-fun guidebook_N : N;-fun guideline_N : N;-fun guild_N : N;-fun guild_hall_N : N;-fun guilder_N : N;-fun guildford_PN : PN;-fun guildhall_N : N;-fun guile_N : N;-fun guileful_A : A;-fun guileless_A : A;-fun guillemot_N : N;-fun guillotine_N : N;-fun guillotine_V2 : V2;-fun guilt_N : N;-fun guiltily_Adv : Adv;-fun guiltiness_N : N;-fun guiltless_A : A;-fun guilty_A : A;-fun guinea_N : N;-fun guinea_PN : PN;-fun guinea_fowl_N : N;-fun guinea_pig_N : N;-fun guinean_A : A;-fun guinean_N : N;-fun guinness_N : N;-fun guisborough_PN : PN;-fun guise_N : N;-fun guitar_N : N;-fun guitarist_N : N;-fun gulch_N : N;-fun gulden_N : N;-fun gulf_N : N;-fun gull_N : N;-fun gull_V2 : V2;-fun gullet_N : N;-fun gullibility_N : N;-fun gullible_A : A;-fun gully_N : N;-fun gulp_N : N;-fun gulp_V : V;-fun gulp_V2 : V2;-fun gum_N : N;-fun gum_V2 : V2;-fun gumbo_N : N;-fun gumboil_N : N;-fun gumboot_N : N;-fun gummy_A : A;-fun gumption_N : N;-fun gumshoe_N : N;-fun gun_N : N;-fun gun_V2 : V2;-fun gun_carriage_N : N;-fun gunboat_N : N;-fun guncotton_N : N;-fun gundog_N : N;-fun gunfire_N : N;-fun gunman_N : N;-fun gunmetal_N : N;-fun gunner_N : N;-fun gunnery_N : N;-fun gunny_N : N;-fun gunplay_N : N;-fun gunpoint_N : N;-fun gunpowder_N : N;-fun gunroom_N : N;-fun gunrunner_N : N;-fun gunrunning_N : N;-fun gunshot_N : N;-fun gunsmith_N : N;-fun gunwale_N : N;-fun gurgle_N : N;-fun gurgle_V : V;-fun gurkha_N : N;-fun guru_N : N;-fun gush_N : N;-fun gush_V : V;-fun gusher_N : N;-fun gushing_A : A;-fun gushingly_Adv : Adv;-fun gusset_N : N;-fun gusseted_A : A;-fun gust_N : N;-fun gustation_N : N;-fun gusto_N : N;-fun gusty_A : A;-fun gut_N : N;-fun gut_V2 : V2;-fun gutless_A : A;-fun gutta_percha_N : N;-fun gutter_N : N;-fun gutter_V : V;-fun guttersnipe_N : N;-fun guttural_A : A;-fun guttural_N : N;-fun gutturally_Adv : Adv;-fun guvnor_N : N;-fun guy's_PN : PN;-fun guy_N : N;-fun guy_PN : PN;-fun guy_V2 : V2;-fun guyana_PN : PN;-fun guyanese_A : A;-fun guyanese_N : N;-fun guzzle_V : V;-fun guzzle_V2 : V2;-fun guzzler_N : N;-fun gwen_PN : PN;-fun gwendoline_PN : PN;-fun gwent_PN : PN;-fun gwersyllt_PN : PN;-fun gwynedd_PN : PN;-fun gybe_V : V;-fun gybe_V2 : V2;-fun gym_N : N;-fun gymkhana_N : N;-fun gymnasium_N : N;-fun gymnast_N : N;-fun gymnastic_A : A;-fun gymnastics_N : N;-fun gymslip_N : N;-fun gynaecological_A : A;-fun gynaecologist_N : N;-fun gynaecology_N : N;-fun gynecological_A : A;-fun gynecologist_N : N;-fun gyp_N : N;-fun gyp_V2 : V2;-fun gypsum_N : N;-fun gypsy_N : N;-fun gyrate_V : V;-fun gyration_N : N;-fun gyro_N : N;-fun gyroscope_N : N;-fun gyroscopic_A : A;-fun gateau_N : N;-fun h'm_V : V;-fun h_bomb_N : N;-fun ha'p'orth_N : N;-fun ha'penny_N : N;-fun haarlem_PN : PN;-fun habeas_corpus_N : N;-fun haberdasher_N : N;-fun haberdashery_N : N;-fun habit_N : N;-fun habitable_A : A;-fun habitat_N : N;-fun habitation_N : N;-fun habitual_A : A;-fun habitually_Adv : Adv;-fun habituate_V2 : V2;-fun habituation_N : N;-fun habitude_N : N;-fun habitue_N : N;-fun hacienda_N : N;-fun hack_N : N;-fun hack_V : V;-fun hack_V2 : V2;-fun hackney_N : N;-fun hackney_PN : PN;-fun hackneyed_A : A;-fun hacksaw_N : N;-fun haddington_PN : PN;-fun haddock_N : N;-fun hades_PN : PN;-fun hadji_N : N;-fun haematite_N : N;-fun haemoglobin_N : N;-fun haemophilia_N : N;-fun haemophiliac_N : N;-fun haemorrhage_N : N;-fun haft_N : N;-fun hag_N : N;-fun hag_ridden_A : A;-fun hagen_PN : PN;-fun haggard_A : A;-fun haggis_N : N;-fun haggle_V : V;-fun hagiology_N : N;-fun hagley_PN : PN;-fun haha_N : N;-fun hail_N : N;-fun hail_V : V;-fun hail_V2 : V2;-fun hailsham_PN : PN;-fun hailstone_N : N;-fun hailstorm_N : N;-fun haiphong_PN : PN;-fun hair's_breadth_N : N;-fun hair_N : N;-fun hair_breadth_N : N;-fun hair_dye_N : N;-fun hair_oil_N : N;-fun hair_raising_A : A;-fun hair_shirt_N : N;-fun hair_slide_N : N;-fun hair_trigger_N : N;-fun hairbrush_N : N;-fun haircloth_N : N;-fun haircut_N : N;-fun hairdo_N : N;-fun hairdresser_N : N;-fun hairdressing_N : N;-fun hairiness_N : N;-fun hairless_A : A;-fun hairlike_A : A;-fun hairline_N : N;-fun hairnet_N : N;-fun hairpiece_N : N;-fun hairpin_N : N;-fun hairsplitting_A : A;-fun hairsplitting_N : N;-fun hairspring_N : N;-fun hairstyle_N : N;-fun hairstylist_N : N;-fun hairy_A : A;-fun haiti_PN : PN;-fun haitian_A : A;-fun haitian_N : N;-fun hake_N : N;-fun hal_PN : PN;-fun halberd_N : N;-fun halberdier_N : N;-fun halcyon_A : A;-fun hale_A : A;-fun halesowen_PN : PN;-fun half_N : N;-fun half_baked_A : A;-fun half_blood_N : N;-fun half_breed_N : N;-fun half_brother_N : N;-fun half_caste_N : N;-fun half_crazed_A : A;-fun half_crown_N : N;-fun half_hardy_A : A;-fun half_hearted_A : A;-fun half_heartedly_Adv : Adv;-fun half_holiday_N : N;-fun half_hour_N : N;-fun half_hourly_A : A;-fun half_hourly_Adv : Adv;-fun half_length_A : A;-fun half_pay_N : N;-fun half_price_Adv : Adv;-fun half_seas_over_A : A;-fun half_sister_N : N;-fun half_size_A : A;-fun half_timbered_A : A;-fun half_time_N : N;-fun half_track_N : N;-fun half_tracked_A : A;-fun half_truth_N : N;-fun half_volley_N : N;-fun half_yearly_A : A;-fun half_yearly_Adv : Adv;-fun halfback_N : N;-fun halfpenny_N : N;-fun halfpennyworth_N : N;-fun halftone_N : N;-fun halfway_A : A;-fun halfway_Adv : Adv;-fun halfwit_N : N;-fun halfwitted_A : A;-fun halibut_N : N;-fun halifax_PN : PN;-fun halitosis_N : N;-fun hall_N : N;-fun hall_stand_N : N;-fun halle_PN : PN;-fun hallelujah_N : N;-fun halliard_N : N;-fun hallmark_N : N;-fun halloo_N : N;-fun halloo_V : V;-fun hallow_N : N;-fun hallow_V2 : V2;-fun hallowe'en_N : N;-fun hallowe'en_PN : PN;-fun hallucination_N : N;-fun hallucinatory_A : A;-fun hallucinogenic_A : A;-fun halma_N : N;-fun halo_N : N;-fun halstead_PN : PN;-fun halt_A : A;-fun halt_N : N;-fun halt_V : V;-fun halt_V2 : V2;-fun halter_N : N;-fun haltingly_Adv : Adv;-fun halve_V2 : V2;-fun halyard_N : N;-fun ham_N : N;-fun ham_V : V;-fun ham_V2 : V2;-fun ham_fisted_A : A;-fun ham_handed_A : A;-fun hamadryad_N : N;-fun hamburg_PN : PN;-fun hamburger_N : N;-fun hamhung_PN : PN;-fun hamilton_PN : PN;-fun hamlet_N : N;-fun hammer_N : N;-fun hammer_V : V;-fun hammer_V2 : V2;-fun hammersmith_PN : PN;-fun hammock_N : N;-fun hamper_N : N;-fun hamper_V2 : V2;-fun hampreston_PN : PN;-fun hampshire_PN : PN;-fun hamster_N : N;-fun hamstring_N : N;-fun hamstring_V2 : V2;-fun hand_N : N;-fun hand_V2 : V2;-fun hand_barrow_N : N;-fun hand_grenade_N : N;-fun hand_luggage_N : N;-fun hand_me_down_N : N;-fun hand_organ_N : N;-fun hand_out_N : N;-fun hand_picked_A : A;-fun handbag_N : N;-fun handbill_N : N;-fun handbook_N : N;-fun handbrake_N : N;-fun handcart_N : N;-fun handclap_N : N;-fun handcuff_N : N;-fun handcuff_V2 : V2;-fun handful_N : N;-fun handhold_N : N;-fun handicap_N : N;-fun handicap_V2 : V2;-fun handicraft_N : N;-fun handily_Adv : Adv;-fun handiness_N : N;-fun handiwork_N : N;-fun handkerchief_N : N;-fun handle_N : N;-fun handle_V2 : V2;-fun handlebar_N : N;-fun handler_N : N;-fun handmade_A : A;-fun handmaid_N : N;-fun handover_N : N;-fun handrail_N : N;-fun handsaw_N : N;-fun handshake_N : N;-fun handshaking_N : N;-fun handsome_A : A;-fun handsomely_Adv : Adv;-fun handstand_N : N;-fun handwork_N : N;-fun handwriting_N : N;-fun handy_A : A;-fun handyman_N : N;-fun hang_N : N;-fun hang_V : V;-fun hang_V2 : V2;-fun hang_up_N : N;-fun hangar_N : N;-fun hangchon_PN : PN;-fun hangdog_A : A;-fun hanger_N : N;-fun hanger_on_N : N;-fun hanging_N : N;-fun hangman_N : N;-fun hangnail_N : N;-fun hangover_N : N;-fun hank_N : N;-fun hanker_V : V;-fun hankering_N : N;-fun hanky_N : N;-fun hanky_panky_N : N;-fun hanoi_PN : PN;-fun hanover_PN : PN;-fun hansard_N : N;-fun hansom_N : N;-fun hap_N : N;-fun hap_V : V;-fun haphazard_A : A;-fun haphazard_Adv : Adv;-fun haphazardly_Adv : Adv;-fun hapless_A : A;-fun haply_Adv : Adv;-fun happen_V : V;-fun happening_N : N;-fun happily_Adv : Adv;-fun happiness_N : N;-fun happy_A : A;-fun happy_go_lucky_A : A;-fun hara_kiri_N : N;-fun harangue_N : N;-fun harangue_V : V;-fun harangue_V2 : V2;-fun harass_V2 : V2;-fun harassment_N : N;-fun harbin_PN : PN;-fun harbinger_N : N;-fun harbour_N : N;-fun harbour_V : V;-fun harbour_V2 : V2;-fun harbourage_N : N;-fun hard_A : A;-fun hard_Adv : Adv;-fun hard_baked_A : A;-fun hard_bitten_A : A;-fun hard_boiled_A : A;-fun hard_headed_A : A;-fun hardback_N : N;-fun hardbacked_A : A;-fun hardboard_N : N;-fun hardbound_A : A;-fun hardcover_N : N;-fun hardcovered_A : A;-fun harden_V : V;-fun harden_V2 : V2;-fun hardhearted_A : A;-fun hardhitting_A : A;-fun hardihood_N : N;-fun hardiness_N : N;-fun hardliner_N : N;-fun hardly_Adv : Adv;-fun hardness_N : N;-fun hardship_N : N;-fun hardtop_N : N;-fun hardware_N : N;-fun hardwood_N : N;-fun hardworking_A : A;-fun hardy_A : A;-fun hare_N : N;-fun hare_V : V;-fun harebell_N : N;-fun harebrained_A : A;-fun harelip_N : N;-fun harem_N : N;-fun haricot_N : N;-fun haringey_PN : PN;-fun hark_V : V;-fun harlequin_N : N;-fun harlequinade_N : N;-fun harley_street_PN : PN;-fun harlot_N : N;-fun harlow_PN : PN;-fun harm_N : N;-fun harm_V2 : V2;-fun harmattan_N : N;-fun harmful_A : A;-fun harmfully_Adv : Adv;-fun harmless_A : A;-fun harmlessly_Adv : Adv;-fun harmonic_N : N;-fun harmonica_N : N;-fun harmonious_A : A;-fun harmoniously_Adv : Adv;-fun harmonium_N : N;-fun harmonization_N : N;-fun harmonize_V : V;-fun harmonize_V2 : V2;-fun harmony_N : N;-fun harness_N : N;-fun harness_V2 : V2;-fun harold_PN : PN;-fun harp_N : N;-fun harp_V : V;-fun harpenden_PN : PN;-fun harper_N : N;-fun harpist_N : N;-fun harpoon_N : N;-fun harpoon_V2 : V2;-fun harpsichord_N : N;-fun harpsichordist_N : N;-fun harpy_N : N;-fun harridan_N : N;-fun harrier_N : N;-fun harriet_PN : PN;-fun harrogate_PN : PN;-fun harrow_N : N;-fun harrow_PN : PN;-fun harrow_V2 : V2;-fun harry_PN : PN;-fun harry_V2 : V2;-fun harsh_A : A;-fun harshly_Adv : Adv;-fun harshness_N : N;-fun hart_N : N;-fun hartlepool_PN : PN;-fun hartley_PN : PN;-fun harum_scarum_A : A;-fun harum_scarum_N : N;-fun harvest_N : N;-fun harvest_V2 : V2;-fun harvester_N : N;-fun harvey_PN : PN;-fun harwich_PN : PN;-fun harwood_PN : PN;-fun harworth_PN : PN;-fun has_been_N : N;-fun hash_N : N;-fun hash_V2 : V2;-fun hashish_N : N;-fun haslemere_PN : PN;-fun haslingden_PN : PN;-fun hasp_N : N;-fun hassle_N : N;-fun hassle_V : V;-fun hassle_V2 : V2;-fun hassock_N : N;-fun haste_N : N;-fun hasten_V : V;-fun hasten_V2 : V2;-fun hastily_Adv : Adv;-fun hastiness_N : N;-fun hastings_PN : PN;-fun hasty_A : A;-fun hat_N : N;-fun hatband_N : N;-fun hatch_N : N;-fun hatch_V : V;-fun hatch_V2 : V2;-fun hatchery_N : N;-fun hatchet_N : N;-fun hatching_N : N;-fun hatchway_N : N;-fun hate_N : N;-fun hate_V2 : V2;-fun hateful_A : A;-fun hatefully_Adv : Adv;-fun hatfield_PN : PN;-fun hatful_N : N;-fun hatless_A : A;-fun hatpin_N : N;-fun hatred_N : N;-fun hatter_N : N;-fun hauberk_N : N;-fun haughtily_Adv : Adv;-fun haughtiness_N : N;-fun haughty_A : A;-fun haul_N : N;-fun haul_V : V;-fun haul_V2 : V2;-fun haulage_N : N;-fun haulier_N : N;-fun haulm_N : N;-fun haunch_N : N;-fun haunt_N : N;-fun haunt_V2 : V2;-fun hautboy_N : N;-fun hauteur_N : N;-fun havana_N : N;-fun havana_PN : PN;-fun haven_N : N;-fun haverfordwest_PN : PN;-fun haverhill_PN : PN;-fun havering_PN : PN;-fun haversack_N : N;-fun havoc_N : N;-fun haw_N : N;-fun haw_V : V;-fun haw_haw_N : N;-fun hawaii_PN : PN;-fun hawick_PN : PN;-fun hawk_N : N;-fun hawk_V2 : V2;-fun hawk_eyed_A : A;-fun hawke's_bay_PN : PN;-fun hawker_N : N;-fun hawser_N : N;-fun hawthorn_N : N;-fun hay_N : N;-fun haycock_N : N;-fun hayfork_N : N;-fun hayling_PN : PN;-fun haymaker_N : N;-fun haymaking_N : N;-fun hayrick_N : N;-fun haystack_N : N;-fun haywards_heath_PN : PN;-fun haywire_A : A;-fun haywire_N : N;-fun hazard_N : N;-fun hazard_V2 : V2;-fun hazardous_A : A;-fun haze_N : N;-fun haze_V2 : V2;-fun hazel_N : N;-fun hazel_PN : PN;-fun hazily_Adv : Adv;-fun haziness_N : N;-fun hazy_A : A;-fun he_goat_N : N;-fun he_man_N : N;-fun head_N : N;-fun head_V : V;-fun head_V2 : V2;-fun head_hunter_N : N;-fun head_on_A : A;-fun head_on_Adv : Adv;-fun headache_N : N;-fun headband_N : N;-fun headdress_N : N;-fun headed_A : A;-fun header_N : N;-fun headgear_N : N;-fun heading_N : N;-fun headlamp_N : N;-fun headland_N : N;-fun headless_A : A;-fun headlight_N : N;-fun headline_N : N;-fun headlong_A : A;-fun headlong_Adv : Adv;-fun headman_N : N;-fun headmaster_N : N;-fun headmistress_N : N;-fun headpiece_N : N;-fun headrest_N : N;-fun headroom_N : N;-fun headset_N : N;-fun headship_N : N;-fun headstall_N : N;-fun headstone_N : N;-fun headstrong_A : A;-fun headway_N : N;-fun headwind_N : N;-fun headword_N : N;-fun heady_A : A;-fun heal_V : V;-fun heal_V2 : V2;-fun healer_N : N;-fun healing_A : A;-fun health_N : N;-fun healthful_A : A;-fun healthily_Adv : Adv;-fun healthy_A : A;-fun heanor_PN : PN;-fun heap_N : N;-fun heap_V2 : V2;-fun heaps_Adv : Adv;-fun hear_V : V;-fun hear_V2 : V2;-fun hearer_N : N;-fun hearing_N : N;-fun hearing_aid_N : N;-fun hearken_V : V;-fun hearsay_N : N;-fun hearse_N : N;-fun heart's_ease_N : N;-fun heart_N : N;-fun heart_disease_N : N;-fun heart_failure_N : N;-fun heart_rending_A : A;-fun heartache_N : N;-fun heartbeat_N : N;-fun heartbreak_N : N;-fun heartbreaking_A : A;-fun heartbroken_A : A;-fun heartburn_N : N;-fun heartburning_N : N;-fun hearted_A : A;-fun hearten_V2 : V2;-fun heartfelt_A : A;-fun hearth_N : N;-fun hearthrug_N : N;-fun heartily_Adv : Adv;-fun heartless_A : A;-fun heartlessly_Adv : Adv;-fun heartlessness_N : N;-fun heartsick_A : A;-fun hearty_A : A;-fun heat_N : N;-fun heat_V : V;-fun heat_V2 : V2;-fun heat_flash_N : N;-fun heated_A : A;-fun heatedly_Adv : Adv;-fun heater_N : N;-fun heath_N : N;-fun heathen_N : N;-fun heathenish_A : A;-fun heather_N : N;-fun heather_PN : PN;-fun heather_mixture_N : N;-fun heating_N : N;-fun heatspot_N : N;-fun heatstroke_N : N;-fun heatwave_N : N;-fun heave_N : N;-fun heave_V : V;-fun heave_V2 : V2;-fun heaven_N : N;-fun heavenly_A : A;-fun heavensent_A : A;-fun heavenward_A : A;-fun heavenward_Adv : Adv;-fun heavenwards_A : A;-fun heavenwards_Adv : Adv;-fun heavily_Adv : Adv;-fun heaviness_N : N;-fun heaviside_PN : PN;-fun heavy_A : A;-fun heavy_Adv : Adv;-fun heavy_handed_A : A;-fun heavy_hearted_A : A;-fun heavy_laden_A : A;-fun heavyweight_N : N;-fun hebden_royal_PN : PN;-fun hebdomadal_A : A;-fun hebraic_A : A;-fun hebrew_A : A;-fun hebrew_N : N;-fun hecatomb_N : N;-fun heck_N : N;-fun heckle_V2 : V2;-fun heckler_N : N;-fun hectare_N : N;-fun hectic_A : A;-fun hector_V : V;-fun hector_V2 : V2;-fun hedge_N : N;-fun hedge_V : V;-fun hedge_V2 : V2;-fun hedge_end_PN : PN;-fun hedge_sparrow_N : N;-fun hedgehog_N : N;-fun hedgehop_V : V;-fun hedgerow_N : N;-fun hedonism_N : N;-fun hedonist_N : N;-fun hedonistic_A : A;-fun heed_N : N;-fun heed_V2 : V2;-fun heedful_A : A;-fun heedless_A : A;-fun heehaw_N : N;-fun heel_N : N;-fun heel_V : V;-fun heel_V2 : V2;-fun hefty_A : A;-fun hegemony_N : N;-fun hegira_N : N;-fun heidelburg_PN : PN;-fun heifer_N : N;-fun height_N : N;-fun heighten_V : V;-fun heighten_V2 : V2;-fun heinous_A : A;-fun heinously_Adv : Adv;-fun heinousness_N : N;-fun heir_N : N;-fun heiress_N : N;-fun heirloom_N : N;-fun hejira_N : N;-fun helen_PN : PN;-fun helensburgh_PN : PN;-fun helicopter_N : N;-fun heliograph_N : N;-fun heliograph_V2 : V2;-fun heliotrope_N : N;-fun heliport_N : N;-fun helium_N : N;-fun hell_N : N;-fun hellcat_N : N;-fun hellene_N : N;-fun hellenic_A : A;-fun hellish_A : A;-fun helm_N : N;-fun helmet_N : N;-fun helmeted_A : A;-fun helmsman_N : N;-fun helot_N : N;-fun help_N : N;-fun help_V : V;-fun help_V2 : V2;-fun helper_N : N;-fun helpful_A : A;-fun helpfully_Adv : Adv;-fun helpfulness_N : N;-fun helping_N : N;-fun helpless_A : A;-fun helplessly_Adv : Adv;-fun helplessness_N : N;-fun helpmate_N : N;-fun helpmeet_N : N;-fun helsinki_PN : PN;-fun helston_PN : PN;-fun helter_skelter_Adv : Adv;-fun helter_skelter_N : N;-fun helve_N : N;-fun hem_N : N;-fun hem_V : V;-fun hem_V2 : V2;-fun hematite_N : N;-fun hemel_hempstead_PN : PN;-fun hemisphere_N : N;-fun hemline_N : N;-fun hemlock_N : N;-fun hemming_stitch_N : N;-fun hemoglobin_N : N;-fun hemophilia_N : N;-fun hemophiliac_N : N;-fun hemorrhage_N : N;-fun hemp_N : N;-fun hempen_A : A;-fun hemstitch_N : N;-fun hemstitch_V2 : V2;-fun hemsworth_PN : PN;-fun hen_N : N;-fun hen_party_N : N;-fun henbane_N : N;-fun hence_Adv : Adv;-fun henceforth_Adv : Adv;-fun henceforward_Adv : Adv;-fun henchman_N : N;-fun hencoop_N : N;-fun henhouse_N : N;-fun henley_on_thames_PN : PN;-fun henna_N : N;-fun hennaed_A : A;-fun henpecked_A : A;-fun henroost_N : N;-fun henry_PN : PN;-fun hep_A : A;-fun hepatitis_N : N;-fun heptagon_N : N;-fun herald_N : N;-fun herald_V2 : V2;-fun heraldic_A : A;-fun heraldry_N : N;-fun herb_N : N;-fun herb_PN : PN;-fun herbaceous_A : A;-fun herbage_N : N;-fun herbal_A : A;-fun herbalist_N : N;-fun herbert_PN : PN;-fun herbivorous_A : A;-fun herculean_A : A;-fun herd_N : N;-fun herd_V : V;-fun herd_V2 : V2;-fun herdsman_N : N;-fun hereabouts_Adv : Adv;-fun hereafter_Adv : Adv;-fun hereafter_N : N;-fun hereby_Adv : Adv;-fun hereditament_N : N;-fun hereditary_A : A;-fun heredity_N : N;-fun hereford_PN : PN;-fun herein_Adv : Adv;-fun hereinafter_Adv : Adv;-fun hereinbefore_Adv : Adv;-fun hereof_Adv : Adv;-fun heresy_N : N;-fun heretic_N : N;-fun heretical_A : A;-fun hereto_Adv : Adv;-fun heretofore_Adv : Adv;-fun hereupon_Adv : Adv;-fun herewith_Adv : Adv;-fun heritable_A : A;-fun heritage_N : N;-fun hermaphrodite_N : N;-fun hermetic_A : A;-fun hermetically_Adv : Adv;-fun hermit_N : N;-fun hermitage_N : N;-fun herne_PN : PN;-fun herne_bay_PN : PN;-fun hernia_N : N;-fun hero_N : N;-fun heroic_A : A;-fun heroically_Adv : Adv;-fun heroics_N : N;-fun heroin_N : N;-fun heroine_N : N;-fun heroism_N : N;-fun heron_N : N;-fun heronry_N : N;-fun herr_N : N;-fun herring_N : N;-fun herringbone_N : N;-fun hertford_PN : PN;-fun hertfordshire_PN : PN;-fun hertz_N : N;-fun hertzian_A : A;-fun hesitance_N : N;-fun hesitancy_N : N;-fun hesitant_A : A;-fun hesitantly_Adv : Adv;-fun hesitate_V : V;-fun hesitatingly_Adv : Adv;-fun hesitation_N : N;-fun hessian_N : N;-fun het_up_A : A;-fun heterodox_A : A;-fun heterodoxy_N : N;-fun heterogeneous_A : A;-fun heterosexual_A : A;-fun heterosexual_N : N;-fun heterosexuality_N : N;-fun hetton_PN : PN;-fun heuristic_A : A;-fun heuristics_N : N;-fun hew_V : V;-fun hew_V2 : V2;-fun hewer_N : N;-fun hexagon_N : N;-fun hexagonal_A : A;-fun hexameter_N : N;-fun hexham_PN : PN;-fun heyday_N : N;-fun heysham_PN : PN;-fun heywood_PN : PN;-fun hi_fi_A : A;-fun hi_fi_N : N;-fun hiatus_N : N;-fun hibernate_V : V;-fun hibernation_N : N;-fun hibiscus_N : N;-fun hiccough_N : N;-fun hiccough_V : V;-fun hiccup_N : N;-fun hiccup_V : V;-fun hick_A : A;-fun hick_N : N;-fun hickory_N : N;-fun hide_N : N;-fun hide_V : V;-fun hide_V2 : V2;-fun hide_and_seek_N : N;-fun hide_out_N : N;-fun hideaway_N : N;-fun hidebound_A : A;-fun hideous_A : A;-fun hideously_Adv : Adv;-fun hiding_N : N;-fun hiding_place_N : N;-fun hie_V : V;-fun hierarchic_A : A;-fun hierarchical_A : A;-fun hierarchy_N : N;-fun hieroglyph_N : N;-fun hieroglyphic_A : A;-fun hieroglyphics_N : N;-fun higgledy_piggledy_A : A;-fun higgledy_piggledy_Adv : Adv;-fun high_A : A;-fun high_Adv : Adv;-fun high_class_A : A;-fun high_falutin_A : A;-fun high_fidelity_A : A;-fun high_fidelity_N : N;-fun high_frequency_N : N;-fun high_grade_A : A;-fun high_handed_A : A;-fun high_handedly_Adv : Adv;-fun high_keyed_A : A;-fun high_level_A : A;-fun high_minded_A : A;-fun high_mindedly_Adv : Adv;-fun high_mindedness_N : N;-fun high_necked_A : A;-fun high_octane_A : A;-fun high_pitched_A : A;-fun high_powered_A : A;-fun high_pressure_N : N;-fun high_priced_A : A;-fun high_principled_A : A;-fun high_ranking_A : A;-fun high_rise_A : A;-fun high_sounding_A : A;-fun high_speed_A : A;-fun high_spen_PN : PN;-fun high_spirited_A : A;-fun high_tension_A : A;-fun high_toned_A : A;-fun high_up_N : N;-fun high_wycombe_PN : PN;-fun highball_N : N;-fun highborn_A : A;-fun highboy_N : N;-fun highbrow_A : A;-fun highbrow_N : N;-fun highflier_N : N;-fun highflown_A : A;-fun highflyer_N : N;-fun highflying_A : A;-fun highjack_N : N;-fun highjack_V2 : V2;-fun highland_N : N;-fun highland_PN : PN;-fun highlander_N : N;-fun highlight_N : N;-fun highlight_V2 : V2;-fun highly_Adv : Adv;-fun highness_N : N;-fun highroad_N : N;-fun highway_N : N;-fun highwayman_N : N;-fun hijack_N : N;-fun hijack_V2 : V2;-fun hijacker_N : N;-fun hike_N : N;-fun hike_V : V;-fun hiker_N : N;-fun hilarious_A : A;-fun hilariously_Adv : Adv;-fun hilarity_N : N;-fun hilary_PN : PN;-fun hilda_PN : PN;-fun hill_N : N;-fun hill_billy_N : N;-fun hillingdon_PN : PN;-fun hillock_N : N;-fun hillside_N : N;-fun hilly_A : A;-fun hilt_N : N;-fun hinckley_PN : PN;-fun hind_A : A;-fun hind_N : N;-fun hinder_V2 : V2;-fun hindi_A : A;-fun hindi_N : N;-fun hindmost_A : A;-fun hindrance_N : N;-fun hindsight_N : N;-fun hindu_A : A;-fun hindu_N : N;-fun hinduism_N : N;-fun hindustani_A : A;-fun hindustani_N : N;-fun hinge_N : N;-fun hinge_V : V;-fun hinge_V2 : V2;-fun hint_N : N;-fun hint_V : V;-fun hint_V2 : V2;-fun hinterland_N : N;-fun hip_A : A;-fun hip_N : N;-fun hip_bath_N : N;-fun hip_flask_N : N;-fun hip_pocket_N : N;-fun hippie_N : N;-fun hippo_N : N;-fun hippocratic_A : A;-fun hippodrome_N : N;-fun hippopotamus_N : N;-fun hippy_N : N;-fun hire_N : N;-fun hire_V2 : V2;-fun hireling_N : N;-fun hiroshima_PN : PN;-fun hirsute_A : A;-fun hiss_N : N;-fun hiss_V : V;-fun hiss_V2 : V2;-fun histogram_N : N;-fun historian_N : N;-fun historic_A : A;-fun historical_A : A;-fun historically_Adv : Adv;-fun history_N : N;-fun histrionic_A : A;-fun histrionics_N : N;-fun hit_N : N;-fun hit_V : V;-fun hit_V2 : V2;-fun hit_and_run_A : A;-fun hitch_N : N;-fun hitch_V : V;-fun hitch_V2 : V2;-fun hitchhike_V : V;-fun hitchhiker_N : N;-fun hitchin_PN : PN;-fun hither_Adv : Adv;-fun hitherto_Adv : Adv;-fun hive_N : N;-fun hive_V : V;-fun hive_V2 : V2;-fun hm_PN : PN;-fun hmso_PN : PN;-fun hoar_A : A;-fun hoard_N : N;-fun hoard_V : V;-fun hoard_V2 : V2;-fun hoarder_N : N;-fun hoarding_N : N;-fun hoarfrost_N : N;-fun hoariness_N : N;-fun hoarse_A : A;-fun hoarsely_Adv : Adv;-fun hoarseness_N : N;-fun hoary_A : A;-fun hoax_N : N;-fun hoax_V2 : V2;-fun hoaxer_N : N;-fun hob_N : N;-fun hobble_N : N;-fun hobble_V : V;-fun hobble_V2 : V2;-fun hobble_skirt_N : N;-fun hobbledehoy_N : N;-fun hobby_N : N;-fun hobbyhorse_N : N;-fun hobgoblin_N : N;-fun hobnail_N : N;-fun hobnailed_A : A;-fun hobnob_V : V;-fun hobo_N : N;-fun hobson_PN : PN;-fun hock_N : N;-fun hock_V2 : V2;-fun hockey_N : N;-fun hockley_PN : PN;-fun hocus_pocus_N : N;-fun hod_N : N;-fun hoddesdon_PN : PN;-fun hodgepodge_N : N;-fun hoe_N : N;-fun hoe_V : V;-fun hoe_V2 : V2;-fun hofei_PN : PN;-fun hog_N : N;-fun hog_V2 : V2;-fun hoggish_A : A;-fun hogmanay_N : N;-fun hogmanay_PN : PN;-fun hogshead_N : N;-fun hogwash_N : N;-fun hoist_N : N;-fun hoist_V2 : V2;-fun hoity_toity_A : A;-fun hold_N : N;-fun hold_V : V;-fun hold_V2 : V2;-fun hold_up_N : N;-fun holdall_N : N;-fun holder_N : N;-fun holding_N : N;-fun holdup_N : N;-fun hole_N : N;-fun hole_V : V;-fun hole_V2 : V2;-fun hole_and_corner_A : A;-fun holiday_N : N;-fun holiday_V : V;-fun holiday_maker_N : N;-fun holiness_N : N;-fun holland_PN : PN;-fun hollander_A : A;-fun hollander_N : N;-fun holler_V : V;-fun holler_V2 : V2;-fun holloa_N : N;-fun hollow_A : A;-fun hollow_N : N;-fun hollow_V2 : V2;-fun holly_N : N;-fun hollyhock_N : N;-fun hollywood_PN : PN;-fun holm_oak_N : N;-fun holmfirth_PN : PN;-fun holocaust_N : N;-fun holograph_N : N;-fun holster_N : N;-fun holy_A : A;-fun holy_N : N;-fun holyhead_PN : PN;-fun holystone_N : N;-fun holystone_V2 : V2;-fun homage_N : N;-fun home_Adv : Adv;-fun home_N : N;-fun home_baked_A : A;-fun home_brewed_A : A;-fun home_cured_A : A;-fun home_farm_N : N;-fun home_grown_A : A;-fun home_made_A : A;-fun homecoming_N : N;-fun homeland_N : N;-fun homeless_A : A;-fun homelike_A : A;-fun homeliness_N : N;-fun homely_A : A;-fun homeopath_N : N;-fun homeopathic_A : A;-fun homeric_A : A;-fun homesick_A : A;-fun homesickness_N : N;-fun homespun_A : A;-fun homespun_N : N;-fun homestead_N : N;-fun homeward_A : A;-fun homeward_Adv : Adv;-fun homewards_Adv : Adv;-fun homework_N : N;-fun homey_A : A;-fun homicidal_A : A;-fun homicide_N : N;-fun homiletic_A : A;-fun homiletics_N : N;-fun homily_N : N;-fun homing_A : A;-fun hominy_N : N;-fun homo_N : N;-fun homo_sapiens_N : N;-fun homoeopath_N : N;-fun homoeopathy_N : N;-fun homogeneity_N : N;-fun homogeneous_A : A;-fun homogenize_V2 : V2;-fun homograph_N : N;-fun homonym_N : N;-fun homophone_N : N;-fun homosexual_A : A;-fun homosexual_N : N;-fun homosexuality_N : N;-fun hon_PN : PN;-fun honduran_A : A;-fun honduran_N : N;-fun honduras_PN : PN;-fun hone_N : N;-fun hone_V2 : V2;-fun honest_A : A;-fun honestly_Adv : Adv;-fun honesty_N : N;-fun honey_N : N;-fun honeybee_N : N;-fun honeycomb_N : N;-fun honeycomb_V2 : V2;-fun honeydew_N : N;-fun honeyed_A : A;-fun honeymoon_N : N;-fun honeymoon_V : V;-fun honeysuckle_N : N;-fun hong_kong_PN : PN;-fun honiton_PN : PN;-fun honk_N : N;-fun honk_V : V;-fun honorarium_N : N;-fun honorary_A : A;-fun honorific_A : A;-fun honorific_N : N;-fun honour_N : N;-fun honour_V2 : V2;-fun honourable_A : A;-fun honourably_Adv : Adv;-fun hoo_PN : PN;-fun hooch_N : N;-fun hood_N : N;-fun hood_V2 : V2;-fun hoodlum_N : N;-fun hoodoo_N : N;-fun hoodoo_V2 : V2;-fun hoodwink_V2 : V2;-fun hooey_N : N;-fun hoof_N : N;-fun hook_N : N;-fun hook_V : V;-fun hook_V2 : V2;-fun hook_nosed_A : A;-fun hook_up_N : N;-fun hookah_N : N;-fun hooked_A : A;-fun hooker_N : N;-fun hookworm_N : N;-fun hooky_N : N;-fun hooligan_N : N;-fun hooliganism_N : N;-fun hoop_N : N;-fun hoop_V2 : V2;-fun hoop_la_N : N;-fun hoot_N : N;-fun hoot_V : V;-fun hoot_V2 : V2;-fun hooter_N : N;-fun hoover_N : N;-fun hoover_V2 : V2;-fun hop_N : N;-fun hop_V : V;-fun hop_V2 : V2;-fun hop_field_N : N;-fun hop_garden_N : N;-fun hop_picker_N : N;-fun hop_pole_N : N;-fun hope_N : N;-fun hope_PN : PN;-fun hope_V : V;-fun hope_V2 : V2;-fun hopeful_A : A;-fun hopefully_Adv : Adv;-fun hopefulness_N : N;-fun hopeless_A : A;-fun hopelessly_Adv : Adv;-fun hopelessness_N : N;-fun hopped_up_A : A;-fun hopper_N : N;-fun hopscotch_N : N;-fun horace_PN : PN;-fun horde_N : N;-fun horizon_N : N;-fun horizontal_A : A;-fun horizontally_Adv : Adv;-fun horley_PN : PN;-fun hormone_N : N;-fun horn_N : N;-fun horn_V : V;-fun horn_rimmed_A : A;-fun hornbeam_N : N;-fun hornbill_N : N;-fun horned_A : A;-fun hornet_N : N;-fun hornless_A : A;-fun hornlike_A : A;-fun hornpipe_N : N;-fun hornsea_PN : PN;-fun horny_A : A;-fun horology_N : N;-fun horoscope_N : N;-fun horrible_A : A;-fun horribly_Adv : Adv;-fun horrid_A : A;-fun horridly_Adv : Adv;-fun horridness_N : N;-fun horrific_A : A;-fun horrify_V2 : V2;-fun horrifyingly_Adv : Adv;-fun horror_N : N;-fun horror_stricken_A : A;-fun horror_struck_A : A;-fun hors_de_combat_A : A;-fun horse_N : N;-fun horse_chestnut_N : N;-fun horse_laugh_N : N;-fun horse_pond_N : N;-fun horse_sense_N : N;-fun horseback_N : N;-fun horsebox_N : N;-fun horseflesh_N : N;-fun horsefly_N : N;-fun horsehair_N : N;-fun horseman_N : N;-fun horsemanship_N : N;-fun horsemeat_N : N;-fun horseplay_N : N;-fun horsepower_N : N;-fun horserace_N : N;-fun horseracing_N : N;-fun horseradish_N : N;-fun horseshoe_N : N;-fun horsewhip_N : N;-fun horsewhip_V2 : V2;-fun horsewoman_N : N;-fun horsham_PN : PN;-fun horsley_PN : PN;-fun horsy_A : A;-fun hortative_A : A;-fun horticultural_A : A;-fun horticulture_N : N;-fun horticulturist_N : N;-fun horwich_PN : PN;-fun hosanna_N : N;-fun hose_N : N;-fun hose_V2 : V2;-fun hosepipe_N : N;-fun hosier_N : N;-fun hosiery_N : N;-fun hosp_PN : PN;-fun hospice_N : N;-fun hospitable_A : A;-fun hospitably_Adv : Adv;-fun hospital_N : N;-fun hospitality_N : N;-fun hospitalization_N : N;-fun hospitalize_V2 : V2;-fun host_N : N;-fun host_V2 : V2;-fun hostage_N : N;-fun hostel_N : N;-fun hosteller_N : N;-fun hostelry_N : N;-fun hostess_N : N;-fun hostile_A : A;-fun hostilely_Adv : Adv;-fun hostility_N : N;-fun hot_A : A;-fun hot_V : V;-fun hot_V2 : V2;-fun hot_blooded_A : A;-fun hot_headed_A : A;-fun hot_tempered_A : A;-fun hot_water_bottle_N : N;-fun hotbed_N : N;-fun hotchpotch_N : N;-fun hotel_N : N;-fun hotelier_N : N;-fun hotfoot_Adv : Adv;-fun hotfoot_V : V;-fun hothead_N : N;-fun hothouse_N : N;-fun hotly_Adv : Adv;-fun hotplate_N : N;-fun houghton_PN : PN;-fun hound_N : N;-fun hound_V2 : V2;-fun hounslow_PN : PN;-fun hour_N : N;-fun hourglass_N : N;-fun houri_N : N;-fun hourly_A : A;-fun hourly_Adv : Adv;-fun house_N : N;-fun house_V2 : V2;-fun house_party_N : N;-fun house_warming_N : N;-fun houseboat_N : N;-fun housebound_A : A;-fun housebreaker_N : N;-fun housecoat_N : N;-fun housecraft_N : N;-fun housedog_N : N;-fun housefather_N : N;-fun housefly_N : N;-fun houseful_N : N;-fun household_N : N;-fun householder_N : N;-fun housekeeper_N : N;-fun housemaid_N : N;-fun houseman_N : N;-fun housemaster_N : N;-fun housemother_N : N;-fun houseproud_A : A;-fun houseroom_N : N;-fun housetop_N : N;-fun housetrained_A : A;-fun housewife_N : N;-fun housewifely_A : A;-fun housewifery_N : N;-fun housework_N : N;-fun housewrecker_N : N;-fun housing_N : N;-fun houston_PN : PN;-fun hove_PN : PN;-fun hovel_N : N;-fun hover_V : V;-fun hovercraft_N : N;-fun how_Adv : Adv;-fun how_d'ye_do_N : N;-fun howard_PN : PN;-fun howdah_N : N;-fun however_Adv : Adv;-fun howitzer_N : N;-fun howl_N : N;-fun howl_V : V;-fun howl_V2 : V2;-fun howler_N : N;-fun howling_A : A;-fun hoyden_N : N;-fun hoydenish_A : A;-fun hoylake_PN : PN;-fun hoyland_nether_PN : PN;-fun hp_N : N;-fun hq_PN : PN;-fun hrh_PN : PN;-fun hub_N : N;-fun hubble_bubble_N : N;-fun hubbub_N : N;-fun hubby_N : N;-fun hubert_PN : PN;-fun hubris_N : N;-fun huckaback_N : N;-fun huckleberry_N : N;-fun hucknall_PN : PN;-fun huckster_N : N;-fun huddersfield_PN : PN;-fun huddle_N : N;-fun huddle_V : V;-fun huddle_V2 : V2;-fun hue_N : N;-fun hued_A : A;-fun huff_N : N;-fun huff_V : V;-fun huffily_Adv : Adv;-fun huffish_A : A;-fun huffy_A : A;-fun hug_N : N;-fun hug_V2 : V2;-fun huge_A : A;-fun hugely_Adv : Adv;-fun hugger_mugger_A : A;-fun hugger_mugger_Adv : Adv;-fun hugger_mugger_N : N;-fun hugh_PN : PN;-fun hughie_PN : PN;-fun huguenot_N : N;-fun huhehot_PN : PN;-fun hula_N : N;-fun hulk_N : N;-fun hulking_A : A;-fun hull_N : N;-fun hull_V2 : V2;-fun hullabaloo_N : N;-fun hum_N : N;-fun hum_V : V;-fun hum_V2 : V2;-fun human_A : A;-fun human_N : N;-fun humane_A : A;-fun humanely_Adv : Adv;-fun humanism_N : N;-fun humanist_N : N;-fun humanitarian_A : A;-fun humanitarian_N : N;-fun humanitarianism_N : N;-fun humanity_N : N;-fun humanize_V : V;-fun humanize_V2 : V2;-fun humankind_N : N;-fun humanly_Adv : Adv;-fun humberside_PN : PN;-fun humberston_PN : PN;-fun humble_A : A;-fun humble_V2 : V2;-fun humbly_Adv : Adv;-fun humbug_N : N;-fun humbug_V2 : V2;-fun humdinger_N : N;-fun humdrum_A : A;-fun humerus_N : N;-fun humid_A : A;-fun humidify_V2 : V2;-fun humidity_N : N;-fun humiliate_V2 : V2;-fun humiliation_N : N;-fun humility_N : N;-fun humming_top_N : N;-fun hummingbird_N : N;-fun hummock_N : N;-fun humorist_N : N;-fun humorous_A : A;-fun humorously_Adv : Adv;-fun humour_N : N;-fun humour_V2 : V2;-fun humourist_N : N;-fun humourless_A : A;-fun hump_N : N;-fun hump_V2 : V2;-fun humpback_N : N;-fun humpbacked_A : A;-fun humphrey_PN : PN;-fun humus_N : N;-fun hun_N : N;-fun hunch_N : N;-fun hunch_V2 : V2;-fun hunchback_A : A;-fun hunchback_N : N;-fun hunchbacked_A : A;-fun hundredfold_Adv : Adv;-fun hundredweight_N : N;-fun hungarian_A : A;-fun hungarian_N : N;-fun hungary_PN : PN;-fun hunger_N : N;-fun hunger_V : V;-fun hunger_march_N : N;-fun hunger_marcher_N : N;-fun hungrily_Adv : Adv;-fun hungry_A : A;-fun hunk_N : N;-fun hunt_N : N;-fun hunt_V : V;-fun hunt_V2 : V2;-fun hunter_N : N;-fun hunting_N : N;-fun hunting_crop_N : N;-fun huntingdon_PN : PN;-fun huntress_N : N;-fun huntsman_N : N;-fun hurdle_N : N;-fun hurdle_V : V;-fun hurdle_V2 : V2;-fun hurdler_N : N;-fun hurdy_gurdy_N : N;-fun hurl_N : N;-fun hurl_V2 : V2;-fun hurling_N : N;-fun hurly_burly_N : N;-fun hurrah_V : V;-fun hurricane_N : N;-fun hurried_A : A;-fun hurriedly_Adv : Adv;-fun hurry_N : N;-fun hurry_V : V;-fun hurry_V2 : V2;-fun hurstpierpoint_PN : PN;-fun hurt_N : N;-fun hurt_V : V;-fun hurt_V2 : V2;-fun hurtful_A : A;-fun hurtle_V : V;-fun husband_N : N;-fun husband_V2 : V2;-fun husbandman_N : N;-fun husbandry_N : N;-fun hush_N : N;-fun hush_V : V;-fun hush_V2 : V2;-fun hush_hush_A : A;-fun hush_money_N : N;-fun husk_N : N;-fun husk_V2 : V2;-fun huskily_Adv : Adv;-fun huskiness_N : N;-fun husky_A : A;-fun husky_N : N;-fun hussar_N : N;-fun hussy_N : N;-fun hustle_N : N;-fun hustle_V : V;-fun hustle_V2 : V2;-fun hustler_N : N;-fun hut_N : N;-fun hutch_N : N;-fun hutment_N : N;-fun hutted_A : A;-fun hwainan_PN : PN;-fun hyacinth_N : N;-fun hyaena_N : N;-fun hybrid_A : A;-fun hybrid_N : N;-fun hybridize_V : V;-fun hybridize_V2 : V2;-fun hyde_PN : PN;-fun hyderabad_PN : PN;-fun hydra_N : N;-fun hydrangea_N : N;-fun hydrant_N : N;-fun hydrate_N : N;-fun hydrate_V : V;-fun hydrate_V2 : V2;-fun hydraulic_A : A;-fun hydraulicly_Adv : Adv;-fun hydraulics_N : N;-fun hydrocarbon_N : N;-fun hydrochloric_A : A;-fun hydroelectric_A : A;-fun hydrofoil_N : N;-fun hydrogen_N : N;-fun hydropathic_A : A;-fun hydropathy_N : N;-fun hydrophobia_N : N;-fun hydroplane_N : N;-fun hydroponics_N : N;-fun hyena_N : N;-fun hygiene_N : N;-fun hygienic_A : A;-fun hygienically_Adv : Adv;-fun hymen_N : N;-fun hymn_N : N;-fun hymn_V2 : V2;-fun hymnal_N : N;-fun hyperbola_N : N;-fun hyperbole_N : N;-fun hyperbolic_A : A;-fun hypercritical_A : A;-fun hypermarket_N : N;-fun hypersensitive_A : A;-fun hyphen_N : N;-fun hyphen_V2 : V2;-fun hyphenate_V2 : V2;-fun hypnosis_N : N;-fun hypnotic_A : A;-fun hypnotism_N : N;-fun hypnotist_N : N;-fun hypnotize_V2 : V2;-fun hypo_N : N;-fun hypochondria_N : N;-fun hypochondriac_A : A;-fun hypochondriac_N : N;-fun hypochondriacal_A : A;-fun hypocrisy_N : N;-fun hypocrite_N : N;-fun hypocritical_A : A;-fun hypocritically_Adv : Adv;-fun hypodermic_A : A;-fun hypodermic_N : N;-fun hypotenuse_N : N;-fun hypothecate_V2 : V2;-fun hypothesis_N : N;-fun hypothetical_A : A;-fun hyssop_N : N;-fun hysteria_N : N;-fun hysterical_A : A;-fun hysterically_Adv : Adv;-fun hysterics_N : N;-fun hythe_PN : PN;-fun iamb_N : N;-fun iambic_A : A;-fun iambics_N : N;-fun iambus_N : N;-fun ian_PN : PN;-fun iba_N : N;-fun ibadan_PN : PN;-fun ibex_N : N;-fun ibid_PN : PN;-fun ibidem_Adv : Adv;-fun ibis_N : N;-fun icbm_N : N;-fun ice_N : N;-fun ice_V : V;-fun ice_V2 : V2;-fun ice_axe_N : N;-fun ice_cream_N : N;-fun ice_lolly_N : N;-fun ice_show_N : N;-fun ice_skate_N : N;-fun ice_skate_V : V;-fun ice_skating_N : N;-fun ice_tray_N : N;-fun iceberg_N : N;-fun iceboat_N : N;-fun icebound_A : A;-fun icebox_N : N;-fun icebreaker_N : N;-fun icecap_N : N;-fun icecube_N : N;-fun icefall_N : N;-fun icefield_N : N;-fun icefloe_N : N;-fun icefree_A : A;-fun icehouse_N : N;-fun iceland_PN : PN;-fun icelander_A : A;-fun icelander_N : N;-fun icelandic_A : A;-fun icelandic_N : N;-fun iceman_N : N;-fun icepack_N : N;-fun icepick_N : N;-fun icerink_N : N;-fun ichneumon_N : N;-fun ichneumon_fly_N : N;-fun icicle_N : N;-fun icily_Adv : Adv;-fun icing_N : N;-fun icon_N : N;-fun iconoclast_N : N;-fun icy_A : A;-fun id_N : N;-fun ida_PN : PN;-fun idaho_PN : PN;-fun idea_N : N;-fun ideal_A : A;-fun ideal_N : N;-fun idealism_N : N;-fun idealist_N : N;-fun idealistic_A : A;-fun idealization_N : N;-fun idealize_V2 : V2;-fun ideally_Adv : Adv;-fun idem_PN : PN;-fun identical_A : A;-fun identically_Adv : Adv;-fun identifiable_A : A;-fun identifiably_Adv : Adv;-fun identification_N : N;-fun identify_V2 : V2;-fun identikit_N : N;-fun identity_N : N;-fun ideogram_N : N;-fun ideograph_N : N;-fun ideographic_A : A;-fun ideological_A : A;-fun ideologically_Adv : Adv;-fun ideology_N : N;-fun idiocy_N : N;-fun idiolect_N : N;-fun idiom_N : N;-fun idiomatic_A : A;-fun idiomatically_Adv : Adv;-fun idiosyncrasy_N : N;-fun idiosyncratic_A : A;-fun idiot_N : N;-fun idiotic_A : A;-fun idiotically_Adv : Adv;-fun idle_A : A;-fun idle_V : V;-fun idle_V2 : V2;-fun idleness_N : N;-fun idler_N : N;-fun idly_Adv : Adv;-fun idol_N : N;-fun idolater_N : N;-fun idolatress_N : N;-fun idolatrous_A : A;-fun idolatrously_Adv : Adv;-fun idolatry_N : N;-fun idolization_N : N;-fun idolize_V2 : V2;-fun idyll_N : N;-fun idyllic_A : A;-fun ie_PN : PN;-fun igloo_N : N;-fun igneous_A : A;-fun ignis_fatuus_N : N;-fun ignite_V : V;-fun ignite_V2 : V2;-fun ignition_N : N;-fun ignoble_A : A;-fun ignobly_Adv : Adv;-fun ignominious_A : A;-fun ignominiously_Adv : Adv;-fun ignominy_N : N;-fun ignoramus_N : N;-fun ignorance_N : N;-fun ignorant_A : A;-fun ignorantly_Adv : Adv;-fun ignore_V2 : V2;-fun iguana_N : N;-fun ikon_N : N;-fun ilex_N : N;-fun ilfracombe_PN : PN;-fun ilk_N : N;-fun ilkeston_PN : PN;-fun ilkley_PN : PN;-fun ill_A : A;-fun ill_Adv : Adv;-fun ill_N : N;-fun ill_advised_A : A;-fun ill_affected_A : A;-fun ill_bred_A : A;-fun ill_breeding_N : N;-fun ill_disposed_A : A;-fun ill_fated_A : A;-fun ill_favoured_A : A;-fun ill_gotten_A : A;-fun ill_judged_A : A;-fun ill_mannered_A : A;-fun ill_natured_A : A;-fun ill_omened_A : A;-fun ill_starred_A : A;-fun ill_timed_A : A;-fun ill_treat_V2 : V2;-fun ill_treatment_N : N;-fun ill_usage_N : N;-fun ill_use_V2 : V2;-fun illegal_A : A;-fun illegality_N : N;-fun illegally_Adv : Adv;-fun illegibility_N : N;-fun illegible_A : A;-fun illegibly_Adv : Adv;-fun illegitimacy_N : N;-fun illegitimate_A : A;-fun illegitimate_N : N;-fun illegitimately_Adv : Adv;-fun illiberal_A : A;-fun illiberality_N : N;-fun illiberally_Adv : Adv;-fun illicit_A : A;-fun illicitly_Adv : Adv;-fun illimitable_A : A;-fun illinois_PN : PN;-fun illiteracy_N : N;-fun illiterate_A : A;-fun illiterate_N : N;-fun illness_N : N;-fun illogical_A : A;-fun illogicality_N : N;-fun illogically_Adv : Adv;-fun illogicalness_N : N;-fun illume_V2 : V2;-fun illuminate_V2 : V2;-fun illumination_N : N;-fun illumine_V2 : V2;-fun illusion_N : N;-fun illusionist_N : N;-fun illusive_A : A;-fun illusory_A : A;-fun illustrate_V2 : V2;-fun illustration_N : N;-fun illustrative_A : A;-fun illustrator_N : N;-fun illustrious_A : A;-fun illustriously_Adv : Adv;-fun ilo_N : N;-fun image_N : N;-fun image_V2 : V2;-fun imagery_N : N;-fun imaginable_A : A;-fun imaginary_A : A;-fun imagination_N : N;-fun imaginative_A : A;-fun imaginatively_Adv : Adv;-fun imagine_V2 : V2;-fun imam_N : N;-fun imbalance_N : N;-fun imbecile_A : A;-fun imbecile_N : N;-fun imbecility_N : N;-fun imbed_V2 : V2;-fun imbibe_V2 : V2;-fun imbroglio_N : N;-fun imbue_V2 : V2;-fun imf_N : N;-fun imitate_V2 : V2;-fun imitation_N : N;-fun imitative_A : A;-fun imitator_N : N;-fun immaculate_A : A;-fun immaculately_Adv : Adv;-fun immanence_N : N;-fun immanent_A : A;-fun immaterial_A : A;-fun immature_A : A;-fun immaturity_N : N;-fun immeasurable_A : A;-fun immeasurably_Adv : Adv;-fun immediacy_N : N;-fun immediate_A : A;-fun immediately_Adv : Adv;-fun immemorial_A : A;-fun immense_A : A;-fun immensely_Adv : Adv;-fun immensity_N : N;-fun immerse_V2 : V2;-fun immersion_N : N;-fun immigrant_N : N;-fun immigrate_V : V;-fun immigration_N : N;-fun imminence_N : N;-fun imminent_A : A;-fun imminently_Adv : Adv;-fun immingham_PN : PN;-fun immobile_A : A;-fun immobility_N : N;-fun immobilization_N : N;-fun immobilize_V2 : V2;-fun immoderate_A : A;-fun immoderately_Adv : Adv;-fun immodest_A : A;-fun immodestly_Adv : Adv;-fun immodesty_N : N;-fun immolate_V2 : V2;-fun immolation_N : N;-fun immoral_A : A;-fun immorality_N : N;-fun immorally_Adv : Adv;-fun immortal_A : A;-fun immortal_N : N;-fun immortality_N : N;-fun immortalize_V2 : V2;-fun immovable_A : A;-fun immovably_Adv : Adv;-fun immune_A : A;-fun immunity_N : N;-fun immunization_N : N;-fun immunize_V2 : V2;-fun immunology_N : N;-fun immure_V2 : V2;-fun immutability_N : N;-fun immutable_A : A;-fun immutably_Adv : Adv;-fun imp_N : N;-fun impact_N : N;-fun impact_V2 : V2;-fun impair_V2 : V2;-fun impairment_N : N;-fun impala_N : N;-fun impale_V2 : V2;-fun impalement_N : N;-fun impalpable_A : A;-fun impanel_V2 : V2;-fun impart_V2 : V2;-fun impartial_A : A;-fun impartiality_N : N;-fun impartially_Adv : Adv;-fun impassable_A : A;-fun impasse_N : N;-fun impassioned_A : A;-fun impassive_A : A;-fun impassively_Adv : Adv;-fun impassiveness_N : N;-fun impassivity_N : N;-fun impatience_N : N;-fun impatient_A : A;-fun impatiently_Adv : Adv;-fun impeach_V2 : V2;-fun impeachment_N : N;-fun impeccable_A : A;-fun impeccably_Adv : Adv;-fun impecunious_A : A;-fun impede_V2 : V2;-fun impediment_N : N;-fun impel_V2 : V2;-fun impeller_N : N;-fun impend_V : V;-fun impenetrable_A : A;-fun impenitence_N : N;-fun impenitent_A : A;-fun impenitently_Adv : Adv;-fun imperative_A : A;-fun imperatively_Adv : Adv;-fun imperceptible_A : A;-fun imperceptibly_Adv : Adv;-fun imperfect_A : A;-fun imperfect_N : N;-fun imperfection_N : N;-fun imperfectly_Adv : Adv;-fun imperial_A : A;-fun imperial_N : N;-fun imperialism_N : N;-fun imperialist_N : N;-fun imperialistic_A : A;-fun imperially_Adv : Adv;-fun imperil_V2 : V2;-fun imperious_A : A;-fun imperiously_Adv : Adv;-fun imperiousness_N : N;-fun imperishable_A : A;-fun impermanence_N : N;-fun impermanent_A : A;-fun impermeable_A : A;-fun impersonal_A : A;-fun impersonally_Adv : Adv;-fun impersonate_V2 : V2;-fun impersonation_N : N;-fun impersonator_N : N;-fun impertinence_N : N;-fun impertinent_A : A;-fun impertinently_Adv : Adv;-fun imperturbability_N : N;-fun imperturbable_A : A;-fun impervious_A : A;-fun impetigo_N : N;-fun impetuosity_N : N;-fun impetuous_A : A;-fun impetuously_Adv : Adv;-fun impetus_N : N;-fun impiety_N : N;-fun impinge_V : V;-fun impingement_N : N;-fun impious_A : A;-fun impiously_Adv : Adv;-fun impish_A : A;-fun impishly_Adv : Adv;-fun impishness_N : N;-fun implacable_A : A;-fun implant_V2 : V2;-fun implausibility_N : N;-fun implausible_A : A;-fun implausibly_Adv : Adv;-fun implement_N : N;-fun implement_V2 : V2;-fun implementation_N : N;-fun implicate_V2 : V2;-fun implication_N : N;-fun implicit_A : A;-fun implicitly_Adv : Adv;-fun implore_V2 : V2;-fun imploringly_Adv : Adv;-fun implosion_N : N;-fun imply_V2 : V2;-fun impolite_A : A;-fun impolitely_Adv : Adv;-fun impoliteness_N : N;-fun impolitic_A : A;-fun imponderable_A : A;-fun imponderable_N : N;-fun import_N : N;-fun import_V2 : V2;-fun importance_N : N;-fun important_A : A;-fun importantly_Adv : Adv;-fun importation_N : N;-fun importer_N : N;-fun importunate_A : A;-fun importunately_Adv : Adv;-fun importune_V2 : V2;-fun importunity_N : N;-fun impose_V : V;-fun impose_V2 : V2;-fun imposing_A : A;-fun imposingly_Adv : Adv;-fun imposition_N : N;-fun impossibility_N : N;-fun impossible_A : A;-fun impossibly_Adv : Adv;-fun impostor_N : N;-fun imposture_N : N;-fun impotence_N : N;-fun impotent_A : A;-fun impotently_Adv : Adv;-fun impound_V2 : V2;-fun impoverish_V2 : V2;-fun impoverishment_N : N;-fun impracticability_N : N;-fun impracticable_A : A;-fun impracticableness_N : N;-fun impracticably_Adv : Adv;-fun impractical_A : A;-fun imprecate_V2 : V2;-fun imprecation_N : N;-fun imprecise_A : A;-fun imprecisely_Adv : Adv;-fun imprecision_N : N;-fun impregnability_N : N;-fun impregnable_A : A;-fun impregnably_Adv : Adv;-fun impregnate_V2 : V2;-fun impresario_N : N;-fun impress_N : N;-fun impress_V2 : V2;-fun impression_N : N;-fun impressionable_A : A;-fun impressionism_N : N;-fun impressionist_N : N;-fun impressionistic_A : A;-fun impressive_A : A;-fun impressively_Adv : Adv;-fun impressiveness_N : N;-fun imprimatur_N : N;-fun imprint_N : N;-fun imprint_V2 : V2;-fun imprison_V2 : V2;-fun imprisonment_N : N;-fun improbability_N : N;-fun improbable_A : A;-fun improbably_Adv : Adv;-fun impromptu_A : A;-fun impromptu_Adv : Adv;-fun impromptu_N : N;-fun improper_A : A;-fun improperly_Adv : Adv;-fun impropriety_N : N;-fun improve_V : V;-fun improve_V2 : V2;-fun improvement_N : N;-fun improver_N : N;-fun improvidence_N : N;-fun improvident_A : A;-fun improvidently_Adv : Adv;-fun improvisation_N : N;-fun improvise_V : V;-fun improvise_V2 : V2;-fun imprudence_N : N;-fun imprudent_A : A;-fun imprudently_Adv : Adv;-fun impudence_N : N;-fun impudent_A : A;-fun impudently_Adv : Adv;-fun impugn_V2 : V2;-fun impulse_N : N;-fun impulse_buy_V : V;-fun impulse_buy_V2 : V2;-fun impulsion_N : N;-fun impulsive_A : A;-fun impulsively_Adv : Adv;-fun impulsiveness_N : N;-fun impunity_N : N;-fun impure_A : A;-fun impurity_N : N;-fun imputation_N : N;-fun impute_V2 : V2;-fun in_Adv : Adv;-fun in_N : N;-fun in_chief_A : A;-fun in_fighting_N : N;-fun in_loco_parentis_Adv : Adv;-fun in_patient_N : N;-fun in_service_A : A;-fun in_situ_Adv : Adv;-fun in_toto_Adv : Adv;-fun in_tray_N : N;-fun inability_N : N;-fun inaccessibility_N : N;-fun inaccessible_A : A;-fun inaccuracy_N : N;-fun inaccurate_A : A;-fun inaccurately_Adv : Adv;-fun inaction_N : N;-fun inactivate_V2 : V2;-fun inactive_A : A;-fun inactivity_N : N;-fun inadequacy_N : N;-fun inadequate_A : A;-fun inadequately_Adv : Adv;-fun inadmissible_A : A;-fun inadvertence_N : N;-fun inadvertent_A : A;-fun inadvertently_Adv : Adv;-fun inadvisability_N : N;-fun inadvisable_A : A;-fun inadvisably_Adv : Adv;-fun inalienable_A : A;-fun inane_A : A;-fun inanely_Adv : Adv;-fun inanimate_A : A;-fun inanition_N : N;-fun inanity_N : N;-fun inapplicable_A : A;-fun inappreciable_A : A;-fun inappropriate_A : A;-fun inappropriately_Adv : Adv;-fun inappropriateness_N : N;-fun inapt_A : A;-fun inaptitude_N : N;-fun inarticulate_A : A;-fun inasmuch_as_Adv : Adv;-fun inattention_N : N;-fun inattentive_A : A;-fun inaudibility_N : N;-fun inaudible_A : A;-fun inaugural_A : A;-fun inaugural_N : N;-fun inaugurate_V2 : V2;-fun inauguration_N : N;-fun inauspicious_A : A;-fun inauspiciously_Adv : Adv;-fun inboard_A : A;-fun inborn_A : A;-fun inbound_A : A;-fun inbred_A : A;-fun inbreeding_N : N;-fun inbuilt_A : A;-fun inc_PN : PN;-fun incalculable_A : A;-fun incandescence_N : N;-fun incandescent_A : A;-fun incantation_N : N;-fun incapability_N : N;-fun incapable_A : A;-fun incapacitate_V2 : V2;-fun incapacity_N : N;-fun incarcerate_V2 : V2;-fun incarceration_N : N;-fun incarnate_A : A;-fun incarnate_V2 : V2;-fun incarnation_N : N;-fun incautious_A : A;-fun incautiously_Adv : Adv;-fun incendiarism_N : N;-fun incendiary_N : N;-fun incense_N : N;-fun incense_V2 : V2;-fun incentive_N : N;-fun inception_N : N;-fun incertitude_N : N;-fun incessant_A : A;-fun incessantly_Adv : Adv;-fun incest_N : N;-fun incestuous_A : A;-fun inch_N : N;-fun inch_V : V;-fun inch_V2 : V2;-fun inchoate_A : A;-fun inchoative_A : A;-fun inchon_PN : PN;-fun incidence_N : N;-fun incident_A : A;-fun incident_N : N;-fun incidental_A : A;-fun incidentally_Adv : Adv;-fun incinerate_V2 : V2;-fun incineration_N : N;-fun incinerator_N : N;-fun incipient_A : A;-fun incise_V2 : V2;-fun incision_N : N;-fun incisive_A : A;-fun incisively_Adv : Adv;-fun incisor_N : N;-fun incite_V2 : V2;-fun incitement_N : N;-fun incivility_N : N;-fun incl_PN : PN;-fun inclemency_N : N;-fun inclement_A : A;-fun inclination_N : N;-fun incline_N : N;-fun incline_V : V;-fun incline_V2 : V2;-fun inclose_V2 : V2;-fun inclosure_N : N;-fun include_V2 : V2;-fun inclusion_N : N;-fun inclusive_A : A;-fun inclusively_Adv : Adv;-fun incognito_A : A;-fun incognito_Adv : Adv;-fun incoherence_N : N;-fun incoherent_A : A;-fun incoherently_Adv : Adv;-fun incombustible_A : A;-fun income_N : N;-fun income_tax_N : N;-fun incoming_A : A;-fun incommensurable_A : A;-fun incommensurate_A : A;-fun incommode_V2 : V2;-fun incommunicado_A : A;-fun incomparable_A : A;-fun incomparably_Adv : Adv;-fun incompatibility_N : N;-fun incompatible_A : A;-fun incompetence_N : N;-fun incompetency_N : N;-fun incompetent_A : A;-fun incompetently_Adv : Adv;-fun incomplete_A : A;-fun incompletely_Adv : Adv;-fun incomprehensibility_N : N;-fun incomprehensible_A : A;-fun incomprehension_N : N;-fun incompressible_A : A;-fun inconceivable_A : A;-fun inconclusive_A : A;-fun inconclusively_Adv : Adv;-fun incongruity_N : N;-fun incongruous_A : A;-fun incongruously_Adv : Adv;-fun inconsequent_A : A;-fun inconsequential_A : A;-fun inconsequentially_Adv : Adv;-fun inconsequently_Adv : Adv;-fun inconsiderable_A : A;-fun inconsiderate_A : A;-fun inconsiderately_Adv : Adv;-fun inconsistency_N : N;-fun inconsistent_A : A;-fun inconsistently_Adv : Adv;-fun inconsolable_A : A;-fun inconspicuous_A : A;-fun inconspicuously_Adv : Adv;-fun inconstancy_N : N;-fun inconstant_A : A;-fun incontestable_A : A;-fun incontinence_N : N;-fun incontinent_A : A;-fun incontrovertible_A : A;-fun inconvenience_N : N;-fun inconvenience_V2 : V2;-fun inconvenient_A : A;-fun inconveniently_Adv : Adv;-fun inconvertibility_N : N;-fun inconvertible_A : A;-fun incorporate_A : A;-fun incorporate_V : V;-fun incorporate_V2 : V2;-fun incorporation_N : N;-fun incorporeal_A : A;-fun incorrect_A : A;-fun incorrectly_Adv : Adv;-fun incorrectness_N : N;-fun incorrigible_A : A;-fun incorruptibility_N : N;-fun incorruptible_A : A;-fun increase_N : N;-fun increase_V : V;-fun increase_V2 : V2;-fun increasingly_Adv : Adv;-fun incredibility_N : N;-fun incredible_A : A;-fun incredibly_Adv : Adv;-fun incredulity_N : N;-fun incredulous_A : A;-fun incredulously_Adv : Adv;-fun increment_N : N;-fun incremental_A : A;-fun incriminate_V2 : V2;-fun incrustation_N : N;-fun incubate_V : V;-fun incubate_V2 : V2;-fun incubation_N : N;-fun incubator_N : N;-fun incubus_N : N;-fun inculcate_V2 : V2;-fun inculpate_V2 : V2;-fun incumbency_N : N;-fun incumbent_A : A;-fun incumbent_N : N;-fun incur_V2 : V2;-fun incurable_A : A;-fun incurable_N : N;-fun incurably_Adv : Adv;-fun incurious_A : A;-fun incursion_N : N;-fun incurved_A : A;-fun indebted_A : A;-fun indebtedness_N : N;-fun indecency_N : N;-fun indecent_A : A;-fun indecently_Adv : Adv;-fun indecipherable_A : A;-fun indecision_N : N;-fun indecisive_A : A;-fun indecisively_Adv : Adv;-fun indecorous_A : A;-fun indecorously_Adv : Adv;-fun indecorum_N : N;-fun indeed_Adv : Adv;-fun indefatigable_A : A;-fun indefeasible_A : A;-fun indefensible_A : A;-fun indefinable_A : A;-fun indefinite_A : A;-fun indefinitely_Adv : Adv;-fun indelible_A : A;-fun indelibly_Adv : Adv;-fun indelicacy_N : N;-fun indelicate_A : A;-fun indemnification_N : N;-fun indemnify_V2 : V2;-fun indemnity_N : N;-fun indent_N : N;-fun indent_V : V;-fun indent_V2 : V2;-fun indentation_N : N;-fun indenture_N : N;-fun indenture_V2 : V2;-fun independence_N : N;-fun independent_A : A;-fun independent_N : N;-fun independently_Adv : Adv;-fun indescribable_A : A;-fun indescribably_Adv : Adv;-fun indestructibility_N : N;-fun indestructible_A : A;-fun indeterminable_A : A;-fun indeterminably_Adv : Adv;-fun indeterminacy_N : N;-fun indeterminate_A : A;-fun index_N : N;-fun index_V2 : V2;-fun indexer_N : N;-fun india_PN : PN;-fun india_rubber_N : N;-fun indiaman_N : N;-fun indian_A : A;-fun indian_N : N;-fun indiana_PN : PN;-fun indianapolis_PN : PN;-fun indicate_V2 : V2;-fun indication_N : N;-fun indicative_A : A;-fun indicator_N : N;-fun indict_V2 : V2;-fun indictable_A : A;-fun indictment_N : N;-fun indies_PN : PN;-fun indifference_N : N;-fun indifferent_A : A;-fun indifferently_Adv : Adv;-fun indigence_N : N;-fun indigenous_A : A;-fun indigent_A : A;-fun indigestible_A : A;-fun indigestion_N : N;-fun indignant_A : A;-fun indignantly_Adv : Adv;-fun indignation_N : N;-fun indignity_N : N;-fun indigo_N : N;-fun indirect_A : A;-fun indirectly_Adv : Adv;-fun indirectness_N : N;-fun indiscernible_A : A;-fun indiscipline_N : N;-fun indiscreet_A : A;-fun indiscreetly_Adv : Adv;-fun indiscrete_A : A;-fun indiscretion_N : N;-fun indiscriminate_A : A;-fun indiscriminately_Adv : Adv;-fun indispensability_N : N;-fun indispensable_A : A;-fun indisposed_A : A;-fun indisposition_N : N;-fun indisputable_A : A;-fun indissoluble_A : A;-fun indistinct_A : A;-fun indistinctly_Adv : Adv;-fun indistinctness_N : N;-fun indistinguishable_A : A;-fun indite_V2 : V2;-fun individual_A : A;-fun individual_N : N;-fun individualism_N : N;-fun individualist_N : N;-fun individualistic_A : A;-fun individuality_N : N;-fun individualize_V2 : V2;-fun individually_Adv : Adv;-fun indivisible_A : A;-fun indo_european_A : A;-fun indoctrinate_V2 : V2;-fun indoctrination_N : N;-fun indolence_N : N;-fun indolent_A : A;-fun indolently_Adv : Adv;-fun indomitable_A : A;-fun indonesia_PN : PN;-fun indonesian_A : A;-fun indonesian_N : N;-fun indoor_A : A;-fun indoors_Adv : Adv;-fun indore_PN : PN;-fun indorse_V2 : V2;-fun indrawn_A : A;-fun indubitable_A : A;-fun indubitably_Adv : Adv;-fun induce_V2 : V2;-fun inducement_N : N;-fun induct_V2 : V2;-fun induction_N : N;-fun inductive_A : A;-fun indue_V2 : V2;-fun indulge_V : V;-fun indulge_V2 : V2;-fun indulgence_N : N;-fun indulgent_A : A;-fun indulgently_Adv : Adv;-fun industrial_A : A;-fun industrialism_N : N;-fun industrialist_N : N;-fun industrialization_N : N;-fun industrialized_A : A;-fun industrious_A : A;-fun industriously_Adv : Adv;-fun industry_N : N;-fun indwelling_A : A;-fun inebriate_A : A;-fun inebriate_N : N;-fun inebriate_V2 : V2;-fun inebriation_N : N;-fun inebriety_N : N;-fun inedible_A : A;-fun ineffable_A : A;-fun ineffably_Adv : Adv;-fun ineffective_A : A;-fun ineffectively_Adv : Adv;-fun ineffectiveness_N : N;-fun ineffectual_A : A;-fun ineffectuality_N : N;-fun ineffectually_Adv : Adv;-fun inefficiency_N : N;-fun inefficient_A : A;-fun inefficiently_Adv : Adv;-fun inelastic_A : A;-fun inelegance_N : N;-fun inelegant_A : A;-fun inelegantly_Adv : Adv;-fun ineligibility_N : N;-fun ineligible_A : A;-fun ineluctable_A : A;-fun inept_A : A;-fun ineptitude_N : N;-fun ineptly_Adv : Adv;-fun inequality_N : N;-fun inequitable_A : A;-fun inequity_N : N;-fun ineradicable_A : A;-fun inert_A : A;-fun inertia_N : N;-fun inescapable_A : A;-fun inescapably_Adv : Adv;-fun inessential_A : A;-fun inessential_N : N;-fun inestimable_A : A;-fun inevitability_N : N;-fun inevitable_A : A;-fun inevitably_Adv : Adv;-fun inexact_A : A;-fun inexactitude_N : N;-fun inexcusable_A : A;-fun inexhaustible_A : A;-fun inexorable_A : A;-fun inexorably_Adv : Adv;-fun inexpediency_N : N;-fun inexpedient_A : A;-fun inexpensive_A : A;-fun inexpensively_Adv : Adv;-fun inexperience_N : N;-fun inexperienced_A : A;-fun inexpert_A : A;-fun inexpertly_Adv : Adv;-fun inexpiable_A : A;-fun inexplicable_A : A;-fun inexpressible_A : A;-fun inextinguishable_A : A;-fun inextricable_A : A;-fun inextricably_Adv : Adv;-fun infallibility_N : N;-fun infallible_A : A;-fun infamous_A : A;-fun infamy_N : N;-fun infancy_N : N;-fun infant_N : N;-fun infanticide_N : N;-fun infantile_A : A;-fun infantilism_N : N;-fun infantry_N : N;-fun infantryman_N : N;-fun infatuate_V2 : V2;-fun infatuation_N : N;-fun infect_V2 : V2;-fun infection_N : N;-fun infectious_A : A;-fun infer_V2 : V2;-fun inference_N : N;-fun inferential_A : A;-fun inferior_A : A;-fun inferior_N : N;-fun inferiority_N : N;-fun infernal_A : A;-fun infernally_Adv : Adv;-fun inferno_N : N;-fun infertile_A : A;-fun infertility_N : N;-fun infest_V2 : V2;-fun infestation_N : N;-fun infidel_N : N;-fun infidelity_N : N;-fun infield_N : N;-fun infiltrate_V : V;-fun infiltrate_V2 : V2;-fun infiltration_N : N;-fun infinite_A : A;-fun infinitely_Adv : Adv;-fun infinitesimal_A : A;-fun infinitive_A : A;-fun infinitive_N : N;-fun infinitude_N : N;-fun infinity_N : N;-fun infirm_A : A;-fun infirmary_N : N;-fun infirmity_N : N;-fun inflame_V : V;-fun inflame_V2 : V2;-fun inflammable_A : A;-fun inflammation_N : N;-fun inflammatory_A : A;-fun inflatable_A : A;-fun inflate_V2 : V2;-fun inflation_N : N;-fun inflationary_A : A;-fun inflect_V2 : V2;-fun inflection_N : N;-fun inflectional_A : A;-fun inflexibility_N : N;-fun inflexible_A : A;-fun inflexibly_Adv : Adv;-fun inflexion_N : N;-fun inflict_V2 : V2;-fun infliction_N : N;-fun inflorescence_N : N;-fun inflow_N : N;-fun influence_N : N;-fun influence_V2 : V2;-fun influential_A : A;-fun influentially_Adv : Adv;-fun influenza_N : N;-fun influx_N : N;-fun info_N : N;-fun inform_V : V;-fun inform_V2 : V2;-fun informal_A : A;-fun informality_N : N;-fun informally_Adv : Adv;-fun informant_N : N;-fun information_N : N;-fun informative_A : A;-fun informatively_Adv : Adv;-fun informer_N : N;-fun infra_Adv : Adv;-fun infra_dig_A : A;-fun infra_red_A : A;-fun infraction_N : N;-fun infrastructure_N : N;-fun infrequency_N : N;-fun infrequent_A : A;-fun infrequently_Adv : Adv;-fun infringe_V : V;-fun infringe_V2 : V2;-fun infringement_N : N;-fun infuriate_V2 : V2;-fun infuse_V : V;-fun infuse_V2 : V2;-fun infusion_N : N;-fun ingatestone_PN : PN;-fun ingathering_N : N;-fun ingenious_A : A;-fun ingeniously_Adv : Adv;-fun ingenuity_N : N;-fun ingenuous_A : A;-fun ingenuously_Adv : Adv;-fun ingenuousness_N : N;-fun ingest_V2 : V2;-fun ingle_nook_N : N;-fun inglorious_A : A;-fun ingloriously_Adv : Adv;-fun ingoing_A : A;-fun ingot_N : N;-fun ingraft_V2 : V2;-fun ingrained_A : A;-fun ingratiate_V2 : V2;-fun ingratiatingly_Adv : Adv;-fun ingratitude_N : N;-fun ingredient_N : N;-fun ingress_N : N;-fun ingrid_PN : PN;-fun ingrowing_A : A;-fun ingenue_N : N;-fun inhabit_V2 : V2;-fun inhabitable_A : A;-fun inhabitant_N : N;-fun inhalation_N : N;-fun inhale_V : V;-fun inhale_V2 : V2;-fun inhaler_N : N;-fun inharmonious_A : A;-fun inherent_A : A;-fun inherently_Adv : Adv;-fun inherit_V : V;-fun inherit_V2 : V2;-fun inheritance_N : N;-fun inheritor_N : N;-fun inhibit_V2 : V2;-fun inhibition_N : N;-fun inhibitor_N : N;-fun inhibitory_A : A;-fun inhospitable_A : A;-fun inhuman_A : A;-fun inhumane_A : A;-fun inhumanely_Adv : Adv;-fun inhumanity_N : N;-fun inimical_A : A;-fun inimitable_A : A;-fun inimitably_Adv : Adv;-fun iniquitous_A : A;-fun iniquitously_Adv : Adv;-fun iniquity_N : N;-fun initial_A : A;-fun initial_N : N;-fun initial_V2 : V2;-fun initially_Adv : Adv;-fun initiate_A : A;-fun initiate_N : N;-fun initiate_V2 : V2;-fun initiation_N : N;-fun initiative_N : N;-fun inject_V2 : V2;-fun injection_N : N;-fun injudicious_A : A;-fun injudiciously_Adv : Adv;-fun injunction_N : N;-fun injure_V2 : V2;-fun injured_A : A;-fun injurious_A : A;-fun injury_N : N;-fun injustice_N : N;-fun ink_N : N;-fun ink_V2 : V2;-fun ink_bottle_N : N;-fun ink_pad_N : N;-fun ink_pot_N : N;-fun inkling_N : N;-fun inkstand_N : N;-fun inkwell_N : N;-fun inky_A : A;-fun inland_A : A;-fun inland_Adv : Adv;-fun inlay_N : N;-fun inlay_V2 : V2;-fun inlet_N : N;-fun inmate_N : N;-fun inmost_A : A;-fun inn_N : N;-fun innate_A : A;-fun innately_Adv : Adv;-fun inner_A : A;-fun innermost_A : A;-fun inning_N : N;-fun innings_N : N;-fun innkeeper_N : N;-fun innocence_N : N;-fun innocent_A : A;-fun innocent_N : N;-fun innocently_Adv : Adv;-fun innocuous_A : A;-fun innovate_V : V;-fun innovation_N : N;-fun innovator_N : N;-fun innsbruck_PN : PN;-fun innuendo_N : N;-fun innumerable_A : A;-fun inoculate_V2 : V2;-fun inoculation_N : N;-fun inoffensive_A : A;-fun inoffensively_Adv : Adv;-fun inoperable_A : A;-fun inoperative_A : A;-fun inopportune_A : A;-fun inopportunely_Adv : Adv;-fun inordinate_A : A;-fun inordinately_Adv : Adv;-fun inorganic_A : A;-fun inorganically_Adv : Adv;-fun inpouring_A : A;-fun inpouring_N : N;-fun input_N : N;-fun inquest_N : N;-fun inquietude_N : N;-fun inquire_V : V;-fun inquire_V2 : V2;-fun inquirer_N : N;-fun inquiring_A : A;-fun inquiringly_Adv : Adv;-fun inquiry_N : N;-fun inquisition_N : N;-fun inquisitive_A : A;-fun inquisitively_Adv : Adv;-fun inquisitiveness_N : N;-fun inquisitor_N : N;-fun inquisitorial_A : A;-fun inroad_N : N;-fun inrush_N : N;-fun ins_N : N;-fun insane_A : A;-fun insanely_Adv : Adv;-fun insanitary_A : A;-fun insanity_N : N;-fun insatiable_A : A;-fun insatiably_Adv : Adv;-fun insatiate_A : A;-fun inscribe_V2 : V2;-fun inscription_N : N;-fun inscrutable_A : A;-fun insect_N : N;-fun insect_powder_N : N;-fun insecticide_N : N;-fun insectivorous_A : A;-fun insecure_A : A;-fun insecurely_Adv : Adv;-fun insecurity_N : N;-fun inseminate_V2 : V2;-fun insemination_N : N;-fun insensate_A : A;-fun insensibility_N : N;-fun insensible_A : A;-fun insensibly_Adv : Adv;-fun insensitive_A : A;-fun insensitively_Adv : Adv;-fun insensitivity_N : N;-fun insentient_A : A;-fun inseparable_A : A;-fun insert_N : N;-fun insert_V2 : V2;-fun insertion_N : N;-fun inset_N : N;-fun inset_V2 : V2;-fun inshore_A : A;-fun inshore_Adv : Adv;-fun inside_A : A;-fun inside_Adv : Adv;-fun inside_N : N;-fun insider_N : N;-fun insidious_A : A;-fun insidiously_Adv : Adv;-fun insidiousness_N : N;-fun insight_N : N;-fun insignificance_N : N;-fun insignificant_A : A;-fun insignificantly_Adv : Adv;-fun insincere_A : A;-fun insincerely_Adv : Adv;-fun insincerity_N : N;-fun insinuate_V2 : V2;-fun insinuatingly_Adv : Adv;-fun insinuation_N : N;-fun insipid_A : A;-fun insipidity_N : N;-fun insipidly_Adv : Adv;-fun insipidness_N : N;-fun insist_V : V;-fun insist_V2 : V2;-fun insistence_N : N;-fun insistent_A : A;-fun insofar_Adv : Adv;-fun insole_N : N;-fun insolence_N : N;-fun insolent_A : A;-fun insolently_Adv : Adv;-fun insoluble_A : A;-fun insolvency_N : N;-fun insolvent_A : A;-fun insolvent_N : N;-fun insomnia_N : N;-fun insomniac_N : N;-fun insomuch_Adv : Adv;-fun insouciance_N : N;-fun insouciant_A : A;-fun inspan_V2 : V2;-fun inspect_V2 : V2;-fun inspection_N : N;-fun inspector_N : N;-fun inspectorate_N : N;-fun inspiration_N : N;-fun inspirational_A : A;-fun inspirationally_Adv : Adv;-fun inspire_V2 : V2;-fun inspired_A : A;-fun inst_PN : PN;-fun instability_N : N;-fun install_V2 : V2;-fun installation_N : N;-fun instalment_N : N;-fun instance_N : N;-fun instance_V2 : V2;-fun instant_A : A;-fun instant_N : N;-fun instantaneous_A : A;-fun instantaneously_Adv : Adv;-fun instantly_Adv : Adv;-fun instead_Adv : Adv;-fun instep_N : N;-fun instigate_V2 : V2;-fun instigation_N : N;-fun instigator_N : N;-fun instil_V2 : V2;-fun instillation_N : N;-fun instinct_A : A;-fun instinct_N : N;-fun instinctive_A : A;-fun instinctively_Adv : Adv;-fun institute_N : N;-fun institute_V2 : V2;-fun institution_N : N;-fun institutional_A : A;-fun institutionalize_V2 : V2;-fun institutionally_Adv : Adv;-fun instruct_V2 : V2;-fun instruction_N : N;-fun instructional_A : A;-fun instructive_A : A;-fun instructively_Adv : Adv;-fun instructor_N : N;-fun instructress_N : N;-fun instrument_N : N;-fun instrumental_A : A;-fun instrumentalist_N : N;-fun instrumentality_N : N;-fun instrumentation_N : N;-fun insubordinate_A : A;-fun insubordination_N : N;-fun insubstantial_A : A;-fun insubstantially_Adv : Adv;-fun insufferable_A : A;-fun insufficiency_N : N;-fun insufficient_A : A;-fun insufficiently_Adv : Adv;-fun insular_A : A;-fun insularism_N : N;-fun insularity_N : N;-fun insulate_V2 : V2;-fun insulation_N : N;-fun insulator_N : N;-fun insulin_N : N;-fun insult_N : N;-fun insult_V2 : V2;-fun insulting_A : A;-fun insultingly_Adv : Adv;-fun insuperable_A : A;-fun insuperably_Adv : Adv;-fun insupportable_A : A;-fun insurance_N : N;-fun insure_V2 : V2;-fun insurgent_A : A;-fun insurgent_N : N;-fun insurmountable_A : A;-fun insurrection_N : N;-fun intact_A : A;-fun intaglio_N : N;-fun intake_N : N;-fun intangibility_N : N;-fun intangible_A : A;-fun intangibles_N : N;-fun integer_N : N;-fun integral_A : A;-fun integrally_Adv : Adv;-fun integrate_V2 : V2;-fun integration_N : N;-fun integrity_N : N;-fun integument_N : N;-fun intellect_N : N;-fun intellectual_A : A;-fun intellectual_N : N;-fun intellectually_Adv : Adv;-fun intelligence_N : N;-fun intelligent_A : A;-fun intelligently_Adv : Adv;-fun intelligentsia_N : N;-fun intelligibility_N : N;-fun intelligible_A : A;-fun intelligibly_Adv : Adv;-fun intemperance_N : N;-fun intemperate_A : A;-fun intemperately_Adv : Adv;-fun intend_V2 : V2;-fun intense_A : A;-fun intensely_Adv : Adv;-fun intensification_N : N;-fun intensify_V : V;-fun intensify_V2 : V2;-fun intensity_N : N;-fun intensive_A : A;-fun intensively_Adv : Adv;-fun intent_A : A;-fun intent_N : N;-fun intention_N : N;-fun intentional_A : A;-fun intentionally_Adv : Adv;-fun intently_Adv : Adv;-fun intentness_N : N;-fun inter_V2 : V2;-fun inter_alia_Adv : Adv;-fun interact_V : V;-fun interaction_N : N;-fun interactive_A : A;-fun interbreed_V : V;-fun interbreed_V2 : V2;-fun intercalary_A : A;-fun intercede_V : V;-fun intercept_V2 : V2;-fun interception_N : N;-fun interceptor_N : N;-fun intercession_N : N;-fun interchange_N : N;-fun interchange_V2 : V2;-fun interchangeable_A : A;-fun interchangeably_Adv : Adv;-fun intercollegiate_A : A;-fun intercom_N : N;-fun intercommunicate_V : V;-fun intercommunication_N : N;-fun intercommunion_N : N;-fun interconnect_V : V;-fun interconnect_V2 : V2;-fun interconnectedness_N : N;-fun interconnection_N : N;-fun intercontinental_A : A;-fun intercourse_N : N;-fun interdenominational_A : A;-fun interdepartmental_A : A;-fun interdepartmentally_Adv : Adv;-fun interdependence_N : N;-fun interdependent_A : A;-fun interdict_N : N;-fun interdict_V2 : V2;-fun interdiction_N : N;-fun interdisciplinary_A : A;-fun interest_N : N;-fun interest_V2 : V2;-fun interested_A : A;-fun interesting_A : A;-fun interestingly_Adv : Adv;-fun interface_N : N;-fun interfere_V : V;-fun interference_N : N;-fun interim_N : N;-fun interior_A : A;-fun interior_N : N;-fun interject_V2 : V2;-fun interjection_N : N;-fun interlace_V : V;-fun interlace_V2 : V2;-fun interlard_V2 : V2;-fun interleave_V2 : V2;-fun interlink_V : V;-fun interlink_V2 : V2;-fun interlock_V : V;-fun interlock_V2 : V2;-fun interlocutor_N : N;-fun interloper_N : N;-fun interlude_N : N;-fun intermarriage_N : N;-fun intermarry_V : V;-fun intermediary_N : N;-fun intermediate_A : A;-fun intermediate_N : N;-fun intermediately_Adv : Adv;-fun interment_N : N;-fun intermezzo_N : N;-fun interminable_A : A;-fun interminably_Adv : Adv;-fun intermingle_V : V;-fun intermingle_V2 : V2;-fun intermission_N : N;-fun intermittent_A : A;-fun intermittently_Adv : Adv;-fun intermix_V : V;-fun intermix_V2 : V2;-fun intermixture_N : N;-fun intern_N : N;-fun intern_V2 : V2;-fun internal_A : A;-fun internalize_V2 : V2;-fun internally_Adv : Adv;-fun international_A : A;-fun international_N : N;-fun internationale_N : N;-fun internationalism_N : N;-fun internationalist_N : N;-fun internationalization_N : N;-fun internationalize_V2 : V2;-fun internationally_Adv : Adv;-fun interne_N : N;-fun internecine_A : A;-fun internee_N : N;-fun internment_N : N;-fun interpellate_V2 : V2;-fun interpellation_N : N;-fun interphone_N : N;-fun interplanetary_A : A;-fun interplay_N : N;-fun interpol_PN : PN;-fun interpolate_V2 : V2;-fun interpolation_N : N;-fun interpose_V : V;-fun interpose_V2 : V2;-fun interposition_N : N;-fun interpret_V : V;-fun interpret_V2 : V2;-fun interpretation_N : N;-fun interpretative_A : A;-fun interpreter_N : N;-fun interracial_A : A;-fun interregnum_N : N;-fun interrelate_V : V;-fun interrelate_V2 : V2;-fun interrelation_N : N;-fun interrelationship_N : N;-fun interrogate_V2 : V2;-fun interrogation_N : N;-fun interrogative_A : A;-fun interrogative_N : N;-fun interrogatively_Adv : Adv;-fun interrogator_N : N;-fun interrogatory_A : A;-fun interrupt_V : V;-fun interrupt_V2 : V2;-fun interrupter_N : N;-fun interruption_N : N;-fun intersect_V : V;-fun intersect_V2 : V2;-fun intersection_N : N;-fun intersperse_V2 : V2;-fun interstate_A : A;-fun interstellar_A : A;-fun interstice_N : N;-fun intertribal_A : A;-fun intertwine_V : V;-fun intertwine_V2 : V2;-fun interval_N : N;-fun intervene_V : V;-fun intervention_N : N;-fun interview_N : N;-fun interview_V2 : V2;-fun interviewer_N : N;-fun interweave_V2 : V2;-fun intestate_A : A;-fun intestinal_A : A;-fun intestine_N : N;-fun intimacy_N : N;-fun intimate_A : A;-fun intimate_N : N;-fun intimate_V2 : V2;-fun intimately_Adv : Adv;-fun intimation_N : N;-fun intimidate_V2 : V2;-fun intimidation_N : N;-fun intolerable_A : A;-fun intolerably_Adv : Adv;-fun intolerance_N : N;-fun intolerant_A : A;-fun intolerantly_Adv : Adv;-fun intonation_N : N;-fun intone_V : V;-fun intone_V2 : V2;-fun intoxicant_A : A;-fun intoxicant_N : N;-fun intoxicate_V2 : V2;-fun intoxication_N : N;-fun intra_uterine_A : A;-fun intractability_N : N;-fun intractable_A : A;-fun intramural_A : A;-fun intransigence_N : N;-fun intransigent_A : A;-fun intransitive_A : A;-fun intransitively_Adv : Adv;-fun intravenous_A : A;-fun intravenously_Adv : Adv;-fun intrench_V2 : V2;-fun intrepid_A : A;-fun intrepidity_N : N;-fun intrepidly_Adv : Adv;-fun intricacy_N : N;-fun intricate_A : A;-fun intricately_Adv : Adv;-fun intrigue_N : N;-fun intrigue_V : V;-fun intrigue_V2 : V2;-fun intrinsic_A : A;-fun intrinsically_Adv : Adv;-fun intro_N : N;-fun introduce_V2 : V2;-fun introduction_N : N;-fun introductory_A : A;-fun introspect_V : V;-fun introspection_N : N;-fun introspective_A : A;-fun introversion_N : N;-fun introvert_N : N;-fun introvert_V2 : V2;-fun intrude_V : V;-fun intrude_V2 : V2;-fun intruder_N : N;-fun intrusion_N : N;-fun intrusive_A : A;-fun intrust_V2 : V2;-fun intuit_V : V;-fun intuit_V2 : V2;-fun intuition_N : N;-fun intuitive_A : A;-fun intuitively_Adv : Adv;-fun intumescence_N : N;-fun inundate_V2 : V2;-fun inundation_N : N;-fun inure_V2 : V2;-fun invade_V2 : V2;-fun invader_N : N;-fun invalid_A : A;-fun invalid_N : N;-fun invalid_V2 : V2;-fun invalidate_V2 : V2;-fun invalidation_N : N;-fun invalidism_N : N;-fun invalidity_N : N;-fun invaluable_A : A;-fun invariable_A : A;-fun invariably_Adv : Adv;-fun invasion_N : N;-fun invasive_A : A;-fun invective_N : N;-fun inveigh_V : V;-fun inveigle_V2 : V2;-fun invent_V2 : V2;-fun invention_N : N;-fun inventive_A : A;-fun inventively_Adv : Adv;-fun inventor_N : N;-fun inventory_N : N;-fun inverkeithing_PN : PN;-fun inverness_PN : PN;-fun inverse_A : A;-fun inverse_N : N;-fun inversely_Adv : Adv;-fun inversion_N : N;-fun invert_V2 : V2;-fun invertebrate_A : A;-fun invertebrate_N : N;-fun inverurie_PN : PN;-fun invest_V : V;-fun invest_V2 : V2;-fun investigate_V2 : V2;-fun investigation_N : N;-fun investigator_N : N;-fun investiture_N : N;-fun investment_N : N;-fun investor_N : N;-fun inveterate_A : A;-fun invidious_A : A;-fun invidiously_Adv : Adv;-fun invigilate_V : V;-fun invigilation_N : N;-fun invigilator_N : N;-fun invigorate_V2 : V2;-fun invincibility_N : N;-fun invincible_A : A;-fun invincibly_Adv : Adv;-fun inviolable_A : A;-fun inviolate_A : A;-fun invisibility_N : N;-fun invisible_A : A;-fun invisibly_Adv : Adv;-fun invitation_N : N;-fun invite_N : N;-fun invite_V2 : V2;-fun inviting_A : A;-fun invitingly_Adv : Adv;-fun invocation_N : N;-fun invoice_N : N;-fun invoice_V2 : V2;-fun invoke_V2 : V2;-fun involuntarily_Adv : Adv;-fun involuntary_A : A;-fun involute_A : A;-fun involution_N : N;-fun involve_V2 : V2;-fun involved_A : A;-fun involvement_N : N;-fun invulnerable_A : A;-fun inward_A : A;-fun inward_Adv : Adv;-fun inwardly_Adv : Adv;-fun inwardness_N : N;-fun inwards_Adv : Adv;-fun inwrought_A : A;-fun iodine_N : N;-fun ion_N : N;-fun ionic_A : A;-fun ionization_N : N;-fun ionize_V : V;-fun ionize_V2 : V2;-fun ionosphere_N : N;-fun iota_N : N;-fun iou_N : N;-fun ious_N : N;-fun iowa_PN : PN;-fun ipse_dixit_N : N;-fun ipso_facto_Adv : Adv;-fun ipswich_PN : PN;-fun iq_N : N;-fun ira_N : N;-fun iran_PN : PN;-fun iranian_A : A;-fun iranian_N : N;-fun iraq_PN : PN;-fun iraqi_A : A;-fun iraqi_N : N;-fun irascibility_N : N;-fun irascible_A : A;-fun irate_A : A;-fun irately_Adv : Adv;-fun ire_N : N;-fun ireful_A : A;-fun ireland_PN : PN;-fun irene_PN : PN;-fun iridescence_N : N;-fun iridescent_A : A;-fun iridium_N : N;-fun iris_N : N;-fun iris_PN : PN;-fun irish_A : A;-fun irish_N : N;-fun irishman_N : N;-fun irishwoman_N : N;-fun irk_V2 : V2;-fun irksome_A : A;-fun iron_N : N;-fun iron_V : V;-fun iron_V2 : V2;-fun iron_foundry_N : N;-fun iron_grey_A : A;-fun iron_grey_N : N;-fun ironclad_A : A;-fun ironic_A : A;-fun ironical_A : A;-fun ironically_Adv : Adv;-fun ironing_board_N : N;-fun ironmonger_N : N;-fun ironmongery_N : N;-fun ironmould_N : N;-fun ironside_N : N;-fun ironware_N : N;-fun ironwork_N : N;-fun ironworks_N : N;-fun irony_N : N;-fun irradiate_V2 : V2;-fun irrational_A : A;-fun irrationally_Adv : Adv;-fun irreconcilable_A : A;-fun irrecoverable_A : A;-fun irredeemable_A : A;-fun irredentist_N : N;-fun irreducible_A : A;-fun irrefutable_A : A;-fun irregular_A : A;-fun irregular_N : N;-fun irregularity_N : N;-fun irregularly_Adv : Adv;-fun irrelevance_N : N;-fun irrelevancy_N : N;-fun irrelevant_A : A;-fun irrelevantly_Adv : Adv;-fun irreligious_A : A;-fun irremediable_A : A;-fun irremovable_A : A;-fun irreparable_A : A;-fun irreplaceable_A : A;-fun irrepressible_A : A;-fun irreproachable_A : A;-fun irresistible_A : A;-fun irresolute_A : A;-fun irresolution_N : N;-fun irrespective_A : A;-fun irresponsibility_N : N;-fun irresponsible_A : A;-fun irretrievable_A : A;-fun irretrievably_Adv : Adv;-fun irreverence_N : N;-fun irreverent_A : A;-fun irreverently_Adv : Adv;-fun irreversibility_N : N;-fun irreversible_A : A;-fun irreversibly_Adv : Adv;-fun irrevocable_A : A;-fun irridentism_N : N;-fun irrigate_V2 : V2;-fun irrigation_N : N;-fun irritability_N : N;-fun irritable_A : A;-fun irritably_Adv : Adv;-fun irritant_A : A;-fun irritant_N : N;-fun irritate_V2 : V2;-fun irritation_N : N;-fun irruption_N : N;-fun irthlingborough_PN : PN;-fun irvine_PN : PN;-fun isaac_PN : PN;-fun isabel_PN : PN;-fun isabella_PN : PN;-fun isinglass_N : N;-fun islam_N : N;-fun islamic_A : A;-fun island_N : N;-fun islander_N : N;-fun isle_N : N;-fun islet_N : N;-fun islington_PN : PN;-fun ism_N : N;-fun isobar_N : N;-fun isobel_PN : PN;-fun isolate_V2 : V2;-fun isolation_N : N;-fun isolationism_N : N;-fun isolationist_N : N;-fun isosceles_A : A;-fun isotherm_N : N;-fun isotope_N : N;-fun israel_PN : PN;-fun israeli_A : A;-fun israeli_N : N;-fun issue_N : N;-fun issue_V : V;-fun issue_V2 : V2;-fun istanbul_PN : PN;-fun isthmus_N : N;-fun italian_A : A;-fun italian_N : N;-fun italic_A : A;-fun italicize_V2 : V2;-fun italy_PN : PN;-fun itch_N : N;-fun itch_V : V;-fun itchy_A : A;-fun item_Adv : Adv;-fun item_N : N;-fun itemize_V2 : V2;-fun iterate_V2 : V2;-fun iteration_N : N;-fun itinerant_A : A;-fun itinerary_N : N;-fun itv_N : N;-fun iud_N : N;-fun ivan_PN : PN;-fun iver_PN : PN;-fun ivied_A : A;-fun ivor_PN : PN;-fun ivory_N : N;-fun ivy_N : N;-fun ivy_PN : PN;-fun izmir_PN : PN;-fun jab_N : N;-fun jab_V : V;-fun jab_V2 : V2;-fun jabalpur_PN : PN;-fun jabber_N : N;-fun jabber_V : V;-fun jabber_V2 : V2;-fun jabberer_N : N;-fun jabot_N : N;-fun jack_N : N;-fun jack_PN : PN;-fun jack_V2 : V2;-fun jack_in_the_box_N : N;-fun jack_knife_N : N;-fun jack_knife_V : V;-fun jack_o'_lantern_N : N;-fun jack_plane_N : N;-fun jackal_N : N;-fun jackanapes_N : N;-fun jackass_N : N;-fun jackboot_N : N;-fun jackdaw_N : N;-fun jacket_N : N;-fun jackie_PN : PN;-fun jackpot_N : N;-fun jacksonville_PN : PN;-fun jacob_PN : PN;-fun jacobean_A : A;-fun jacobin_A : A;-fun jacobin_N : N;-fun jacobinism_N : N;-fun jacobite_N : N;-fun jacqueline_PN : PN;-fun jade_N : N;-fun jaded_A : A;-fun jag_N : N;-fun jag_V2 : V2;-fun jagged_A : A;-fun jaggy_A : A;-fun jaguar_N : N;-fun jail_N : N;-fun jail_V2 : V2;-fun jailer_N : N;-fun jailor_N : N;-fun jaipur_PN : PN;-fun jakarta_PN : PN;-fun jake_PN : PN;-fun jakes_N : N;-fun jalopy_N : N;-fun jam_N : N;-fun jam_V : V;-fun jam_V2 : V2;-fun jamaica_PN : PN;-fun jamaican_A : A;-fun jamaican_N : N;-fun jamb_N : N;-fun jamboree_N : N;-fun james_PN : PN;-fun jamjar_N : N;-fun jampack_V2 : V2;-fun jampot_N : N;-fun jan_PN : PN;-fun jane_PN : PN;-fun janet_PN : PN;-fun jangle_N : N;-fun jangle_V : V;-fun jangle_V2 : V2;-fun janice_PN : PN;-fun janie_PN : PN;-fun janitor_N : N;-fun january_N : N;-fun january_PN : PN;-fun janus_PN : PN;-fun japan_PN : PN;-fun japan_V2 : V2;-fun japanese_A : A;-fun japanese_N : N;-fun jape_N : N;-fun japonica_N : N;-fun jar_N : N;-fun jar_V : V;-fun jar_V2 : V2;-fun jarful_N : N;-fun jargon_N : N;-fun jarring_A : A;-fun jarringly_Adv : Adv;-fun jarrow_PN : PN;-fun jasmine_N : N;-fun jason_PN : PN;-fun jasper_N : N;-fun jaundice_N : N;-fun jaundice_V2 : V2;-fun jaunt_N : N;-fun jaunt_V : V;-fun jauntily_Adv : Adv;-fun jauntiness_N : N;-fun jaunting_car_N : N;-fun jaunty_A : A;-fun java_PN : PN;-fun javanese_A : A;-fun javanese_N : N;-fun javelin_N : N;-fun jaw_N : N;-fun jaw_V : V;-fun jawbone_N : N;-fun jawbreaker_N : N;-fun jay_N : N;-fun jaywalk_V : V;-fun jaywalker_N : N;-fun jazz_N : N;-fun jazz_V2 : V2;-fun jazzy_A : A;-fun jc_PN : PN;-fun jealous_A : A;-fun jealously_Adv : Adv;-fun jealousy_N : N;-fun jean_N : N;-fun jean_PN : PN;-fun jeanie_PN : PN;-fun jedburgh_PN : PN;-fun jeep_N : N;-fun jeer_N : N;-fun jeer_V : V;-fun jeer_V2 : V2;-fun jeeringly_Adv : Adv;-fun jeff_PN : PN;-fun jeffrey_PN : PN;-fun jehovah_PN : PN;-fun jejune_A : A;-fun jejunely_Adv : Adv;-fun jejuneness_N : N;-fun jekyll_and_hyde_PN : PN;-fun jell_V : V;-fun jell_V2 : V2;-fun jellaba_N : N;-fun jellied_A : A;-fun jelly_N : N;-fun jelly_V : V;-fun jelly_V2 : V2;-fun jellyfish_N : N;-fun jemmy_N : N;-fun jennifer_PN : PN;-fun jenny_N : N;-fun jenny_PN : PN;-fun jeopardize_V2 : V2;-fun jeopardy_N : N;-fun jerboa_N : N;-fun jeremiad_N : N;-fun jeremy_PN : PN;-fun jerk_N : N;-fun jerk_V : V;-fun jerk_V2 : V2;-fun jerkily_Adv : Adv;-fun jerkin_N : N;-fun jerkiness_N : N;-fun jerky_A : A;-fun jerome_PN : PN;-fun jerry_N : N;-fun jerry_PN : PN;-fun jerry_builder_N : N;-fun jerry_building_N : N;-fun jerry_built_A : A;-fun jersey_N : N;-fun jersey_PN : PN;-fun jess_PN : PN;-fun jessica_PN : PN;-fun jessie_PN : PN;-fun jest_N : N;-fun jest_V : V;-fun jester_N : N;-fun jesting_A : A;-fun jestingly_Adv : Adv;-fun jesuit_N : N;-fun jesuitical_A : A;-fun jesus_PN : PN;-fun jet_N : N;-fun jet_V : V;-fun jet_V2 : V2;-fun jet_black_A : A;-fun jet_propelled_A : A;-fun jetsam_N : N;-fun jettison_V2 : V2;-fun jetty_N : N;-fun jew_N : N;-fun jewel_N : N;-fun jewel_V2 : V2;-fun jeweller_N : N;-fun jewellery_N : N;-fun jewelry_N : N;-fun jewess_N : N;-fun jewish_A : A;-fun jezebel_N : N;-fun jib_N : N;-fun jib_V : V;-fun jib_boom_N : N;-fun jibe_N : N;-fun jibe_V : V;-fun jiffy_N : N;-fun jig_N : N;-fun jig_V : V;-fun jig_V2 : V2;-fun jigger_N : N;-fun jiggered_A : A;-fun jiggery_pokery_N : N;-fun jiggle_N : N;-fun jiggle_V : V;-fun jiggle_V2 : V2;-fun jigsaw_N : N;-fun jihad_N : N;-fun jill_PN : PN;-fun jilt_N : N;-fun jilt_V2 : V2;-fun jim_PN : PN;-fun jim_crow_N : N;-fun jimmy_N : N;-fun jimmy_PN : PN;-fun jingle_N : N;-fun jingle_V : V;-fun jingle_V2 : V2;-fun jingo_N : N;-fun jingoism_N : N;-fun jingoist_N : N;-fun jingoistic_A : A;-fun jinks_N : N;-fun jinn_N : N;-fun jinx_N : N;-fun jitney_N : N;-fun jitterbug_N : N;-fun jittery_A : A;-fun jive_N : N;-fun jive_V : V;-fun jnr_PN : PN;-fun jo_PN : PN;-fun joan_PN : PN;-fun joanie_PN : PN;-fun joann_PN : PN;-fun joanna_PN : PN;-fun joanne_PN : PN;-fun job_N : N;-fun job_PN : PN;-fun job_V : V;-fun job_V2 : V2;-fun jobber_N : N;-fun jobbery_N : N;-fun jocelyn_PN : PN;-fun jockey_N : N;-fun jockey_V : V;-fun jockey_V2 : V2;-fun jocose_A : A;-fun jocosely_Adv : Adv;-fun jocoseness_N : N;-fun jocosity_N : N;-fun jocular_A : A;-fun jocularity_N : N;-fun jocularly_Adv : Adv;-fun jocund_A : A;-fun jocundity_N : N;-fun joe_PN : PN;-fun joey_PN : PN;-fun jog_N : N;-fun jog_V : V;-fun jog_V2 : V2;-fun jog_trot_N : N;-fun jogger_N : N;-fun jogging_N : N;-fun joggle_N : N;-fun joggle_V : V;-fun joggle_V2 : V2;-fun johannesburg_PN : PN;-fun john_N : N;-fun john_PN : PN;-fun john_bull_N : N;-fun johnny_PN : PN;-fun johnstone_PN : PN;-fun joie_de_vivre_N : N;-fun join_N : N;-fun join_V : V;-fun join_V2 : V2;-fun joiner_N : N;-fun joinery_N : N;-fun joint_A : A;-fun joint_N : N;-fun joint_V2 : V2;-fun jointly_Adv : Adv;-fun jointure_N : N;-fun joist_N : N;-fun joke_N : N;-fun joke_V : V;-fun joker_N : N;-fun jokingly_Adv : Adv;-fun jollification_N : N;-fun jollity_N : N;-fun jolly_A : A;-fun jolly_Adv : Adv;-fun jolly_V2 : V2;-fun jollyboat_N : N;-fun jolt_N : N;-fun jolt_V : V;-fun jolt_V2 : V2;-fun jolty_A : A;-fun jonah_PN : PN;-fun jonathan_PN : PN;-fun jonquil_N : N;-fun jordan_PN : PN;-fun jordanian_A : A;-fun jordanian_N : N;-fun joseph_PN : PN;-fun josephine_PN : PN;-fun josh_PN : PN;-fun joshua_PN : PN;-fun joss_N : N;-fun joss_house_N : N;-fun joss_stick_N : N;-fun jostle_V : V;-fun jostle_V2 : V2;-fun jot_N : N;-fun jot_V2 : V2;-fun jotter_N : N;-fun joule_N : N;-fun journal_N : N;-fun journalese_N : N;-fun journalism_N : N;-fun journalist_N : N;-fun journalistic_A : A;-fun journalistically_Adv : Adv;-fun journey_N : N;-fun journey_V : V;-fun journeyman_N : N;-fun joust_N : N;-fun joust_V : V;-fun jove_PN : PN;-fun jovial_A : A;-fun joviality_N : N;-fun jovially_Adv : Adv;-fun jowl_N : N;-fun jowly_A : A;-fun joy_N : N;-fun joy_PN : PN;-fun joy_V : V;-fun joy_ride_N : N;-fun joy_stick_N : N;-fun joyce_PN : PN;-fun joyful_A : A;-fun joyfully_Adv : Adv;-fun joyfulness_N : N;-fun joyless_A : A;-fun joylessly_Adv : Adv;-fun joylessness_N : N;-fun joyous_A : A;-fun joyously_Adv : Adv;-fun joyousness_N : N;-fun jp_N : N;-fun ju_jitsu_N : N;-fun jubilant_A : A;-fun jubilantly_Adv : Adv;-fun jubilation_N : N;-fun jubilee_N : N;-fun judaic_A : A;-fun judaism_N : N;-fun judas_N : N;-fun judas_PN : PN;-fun judder_V : V;-fun judge_N : N;-fun judge_V : V;-fun judge_V2 : V2;-fun judgement_N : N;-fun judicature_N : N;-fun judicial_A : A;-fun judiciary_N : N;-fun judicious_A : A;-fun judiciously_Adv : Adv;-fun judiciousness_N : N;-fun judith_PN : PN;-fun judo_N : N;-fun judy_PN : PN;-fun jug_N : N;-fun jug_V2 : V2;-fun jugful_N : N;-fun juggernaut_N : N;-fun juggle_V : V;-fun juggle_V2 : V2;-fun juggler_N : N;-fun jugular_A : A;-fun juice_N : N;-fun juiciness_N : N;-fun juicy_A : A;-fun juju_N : N;-fun jujube_N : N;-fun jukebox_N : N;-fun jul_PN : PN;-fun julep_N : N;-fun julia_PN : PN;-fun julian_A : A;-fun julian_PN : PN;-fun julie_PN : PN;-fun juliet_PN : PN;-fun july_N : N;-fun jumble_N : N;-fun jumble_V : V;-fun jumble_V2 : V2;-fun jumble_sale_N : N;-fun jumbo_A : A;-fun jump_N : N;-fun jump_V : V;-fun jump_V2 : V2;-fun jumped_up_A : A;-fun jumper_N : N;-fun jumpiness_N : N;-fun jumpy_A : A;-fun jun_PN : PN;-fun junction_N : N;-fun juncture_N : N;-fun june_N : N;-fun june_PN : PN;-fun jungle_N : N;-fun jungly_A : A;-fun junior_A : A;-fun junior_N : N;-fun juniper_N : N;-fun junk_N : N;-fun junk_shop_N : N;-fun junket_N : N;-fun junket_V : V;-fun junketing_N : N;-fun junkie_N : N;-fun junky_N : N;-fun junoesque_A : A;-fun junta_N : N;-fun jupiter_PN : PN;-fun juridical_A : A;-fun jurisdiction_N : N;-fun jurisprudence_N : N;-fun jurist_N : N;-fun juror_N : N;-fun jury_N : N;-fun jury_box_N : N;-fun jury_mast_N : N;-fun juryman_N : N;-fun just_A : A;-fun just_Adv : Adv;-fun justice_N : N;-fun justiciary_N : N;-fun justifiable_A : A;-fun justifiably_Adv : Adv;-fun justification_N : N;-fun justify_V2 : V2;-fun justin_PN : PN;-fun justly_Adv : Adv;-fun justness_N : N;-fun jut_V : V;-fun jute_N : N;-fun juvenile_A : A;-fun juvenile_N : N;-fun juxtapose_V2 : V2;-fun juxtaposition_N : N;-fun kaffir_N : N;-fun kail_N : N;-fun kaiser_N : N;-fun kakemono_N : N;-fun kale_N : N;-fun kaleidoscope_N : N;-fun kaleidoscopic_A : A;-fun kalgan_PN : PN;-fun kampong_N : N;-fun kampuchea_PN : PN;-fun kampuchean_A : A;-fun kampuchean_N : N;-fun kangaroo_N : N;-fun kanpur_PN : PN;-fun kansas_PN : PN;-fun kansas_city_PN : PN;-fun kaohsiung_PN : PN;-fun kaolin_N : N;-fun kapok_N : N;-fun kaput_A : A;-fun karachi_PN : PN;-fun karaganda_PN : PN;-fun karat_N : N;-fun karate_N : N;-fun karen_PN : PN;-fun karlsruhe_PN : PN;-fun karma_N : N;-fun kashmir_PN : PN;-fun kashmiri_A : A;-fun kashmiri_N : N;-fun kassel_PN : PN;-fun kate_PN : PN;-fun kath_PN : PN;-fun katherine_PN : PN;-fun kathy_PN : PN;-fun katie_PN : PN;-fun katowice_PN : PN;-fun kava_N : N;-fun kay_PN : PN;-fun kayak_N : N;-fun kazan_PN : PN;-fun kebab_N : N;-fun kedgeree_N : N;-fun keel_N : N;-fun keel_V : V;-fun keel_V2 : V2;-fun keen_A : A;-fun keen_N : N;-fun keen_V : V;-fun keen_V2 : V2;-fun keenly_Adv : Adv;-fun keenness_N : N;-fun keep_N : N;-fun keep_V : V;-fun keep_V2 : V2;-fun keeper_N : N;-fun keeping_N : N;-fun keepsake_N : N;-fun keg_N : N;-fun keighley_PN : PN;-fun keith_PN : PN;-fun kelp_N : N;-fun kelso_PN : PN;-fun kelt_N : N;-fun kelty_PN : PN;-fun kemsing_PN : PN;-fun ken_N : N;-fun ken_PN : PN;-fun ken_V2 : V2;-fun kendal_PN : PN;-fun kenilworth_PN : PN;-fun kennel_N : N;-fun kennel_V : V;-fun kennel_V2 : V2;-fun kenneth_PN : PN;-fun kenny_PN : PN;-fun kensington_PN : PN;-fun kent_PN : PN;-fun kentucky_PN : PN;-fun kenya_PN : PN;-fun kenyan_A : A;-fun kenyan_N : N;-fun kepi_N : N;-fun kerb_N : N;-fun kerbstone_N : N;-fun kerchief_N : N;-fun kernel_N : N;-fun kerosene_N : N;-fun kerry_PN : PN;-fun kestrel_N : N;-fun ketch_N : N;-fun ketchup_N : N;-fun kettering_PN : PN;-fun kettle_N : N;-fun kettledrum_N : N;-fun kevin_PN : PN;-fun key_N : N;-fun key_V2 : V2;-fun keyboard_N : N;-fun keyhole_N : N;-fun keyless_A : A;-fun keynote_N : N;-fun keynsham_PN : PN;-fun keyring_N : N;-fun keystone_N : N;-fun keyword_N : N;-fun keyworth_PN : PN;-fun kg_N : N;-fun kgb_N : N;-fun khaki_A : A;-fun khaki_N : N;-fun khalka_N : N;-fun khan_N : N;-fun kharkov_PN : PN;-fun khartoum_PN : PN;-fun khmer_N : N;-fun kibbutz_N : N;-fun kibbutznik_N : N;-fun kick_N : N;-fun kick_V : V;-fun kick_V2 : V2;-fun kick_start_N : N;-fun kick_starter_N : N;-fun kickback_N : N;-fun kickoff_N : N;-fun kid_N : N;-fun kid_V : V;-fun kid_V2 : V2;-fun kidderminster_PN : PN;-fun kiddy_N : N;-fun kidlington_PN : PN;-fun kidnap_V2 : V2;-fun kidnapper_N : N;-fun kidney_N : N;-fun kidney_bean_N : N;-fun kidsgrove_PN : PN;-fun kiev_PN : PN;-fun kilbirnie_PN : PN;-fun kildare_PN : PN;-fun kilkenny_PN : PN;-fun kill_N : N;-fun kill_V : V;-fun kill_V2 : V2;-fun killarney_PN : PN;-fun killer_N : N;-fun killing_A : A;-fun killing_N : N;-fun killingly_Adv : Adv;-fun killjoy_N : N;-fun kilmarnock_PN : PN;-fun kiln_N : N;-fun kilo_N : N;-fun kilocycle_N : N;-fun kilogram_N : N;-fun kilolitre_N : N;-fun kilometre_N : N;-fun kilowatt_N : N;-fun kilsyth_PN : PN;-fun kilt_N : N;-fun kilwinning_PN : PN;-fun kimberley_PN : PN;-fun kimono_N : N;-fun kind_A : A;-fun kind_N : N;-fun kind_hearted_A : A;-fun kinda_Adv : Adv;-fun kindergarten_N : N;-fun kindle_V : V;-fun kindle_V2 : V2;-fun kindling_N : N;-fun kindly_A : A;-fun kindly_Adv : Adv;-fun kindness_N : N;-fun kindred_A : A;-fun kindred_N : N;-fun kinetic_A : A;-fun kinetics_N : N;-fun king's_lynn_PN : PN;-fun king_N : N;-fun king_size_A : A;-fun king_sized_A : A;-fun kingcup_N : N;-fun kingdom_N : N;-fun kingfisher_N : N;-fun kinglike_A : A;-fun kingly_A : A;-fun kingpin_N : N;-fun kingsbury_PN : PN;-fun kingship_N : N;-fun kingsteignton_PN : PN;-fun kingston_PN : PN;-fun kingston_upon_hull_PN : PN;-fun kingston_upon_thames_PN : PN;-fun kink_N : N;-fun kink_V : V;-fun kink_V2 : V2;-fun kinky_A : A;-fun kinshasa_PN : PN;-fun kinship_N : N;-fun kinsman_N : N;-fun kinswoman_N : N;-fun kiosk_N : N;-fun kip_N : N;-fun kip_V : V;-fun kippax_PN : PN;-fun kipper_N : N;-fun kirin_PN : PN;-fun kirk_N : N;-fun kirkby_PN : PN;-fun kirkby_in_ashfield_PN : PN;-fun kirkcaldy_PN : PN;-fun kirkham_PN : PN;-fun kirkintilloch_PN : PN;-fun kirkwall_PN : PN;-fun kirsch_N : N;-fun kirtle_N : N;-fun kismet_N : N;-fun kiss_N : N;-fun kiss_V : V;-fun kiss_V2 : V2;-fun kisser_N : N;-fun kit_N : N;-fun kit_V2 : V2;-fun kitakyushu_PN : PN;-fun kitbag_N : N;-fun kitchen_N : N;-fun kitchenette_N : N;-fun kite_N : N;-fun kite_balloon_N : N;-fun kitsch_A : A;-fun kitten_N : N;-fun kittenish_A : A;-fun kitty_N : N;-fun kitty_PN : PN;-fun kiwi_N : N;-fun klaxon_N : N;-fun kleenex_N : N;-fun kleptomania_N : N;-fun kleptomaniac_N : N;-fun km_N : N;-fun knack_N : N;-fun knacker_N : N;-fun knap_V2 : V2;-fun knapsack_N : N;-fun knaresborough_PN : PN;-fun knave_N : N;-fun knavery_N : N;-fun knavish_A : A;-fun knavishly_Adv : Adv;-fun knead_V2 : V2;-fun knee_N : N;-fun knee_deep_A : A;-fun knee_deep_Adv : Adv;-fun knee_high_A : A;-fun knee_high_Adv : Adv;-fun kneecap_N : N;-fun kneel_V : V;-fun knell_N : N;-fun knesset_N : N;-fun knick_knack_N : N;-fun knife_N : N;-fun knife_V2 : V2;-fun knife_edge_N : N;-fun knight_N : N;-fun knight_V2 : V2;-fun knight_errant_N : N;-fun knighthood_N : N;-fun knightly_A : A;-fun knit_V : V;-fun knit_V2 : V2;-fun knitter_N : N;-fun knitting_N : N;-fun knitting_machine_N : N;-fun knitting_needle_N : N;-fun knitwear_N : N;-fun knob_N : N;-fun knobble_N : N;-fun knobbly_A : A;-fun knobkerrie_N : N;-fun knock_N : N;-fun knock_V : V;-fun knock_V2 : V2;-fun knock_kneed_A : A;-fun knock_on_N : N;-fun knockabout_A : A;-fun knockdown_A : A;-fun knocker_N : N;-fun knockout_A : A;-fun knockout_N : N;-fun knoll_N : N;-fun knot_N : N;-fun knot_V : V;-fun knot_V2 : V2;-fun knothole_N : N;-fun knottingley_PN : PN;-fun knotty_A : A;-fun knout_N : N;-fun know_N : N;-fun know_V : V;-fun know_V2 : V2;-fun know_all_N : N;-fun know_how_N : N;-fun knowing_A : A;-fun knowingly_Adv : Adv;-fun knowledge_N : N;-fun knowledgeable_A : A;-fun knuckle_N : N;-fun knuckle_V : V;-fun knutsford_PN : PN;-fun ko_N : N;-fun koala_N : N;-fun kobe_PN : PN;-fun koblenz_PN : PN;-fun kobo_N : N;-fun kohl_N : N;-fun kohlrabi_N : N;-fun kola_N : N;-fun kola_nut_N : N;-fun koln_PN : PN;-fun kookaburra_N : N;-fun kopeck_N : N;-fun kopje_N : N;-fun koppie_N : N;-fun koran_N : N;-fun koranic_A : A;-fun korea_PN : PN;-fun korean_A : A;-fun korean_N : N;-fun kosher_A : A;-fun kosher_N : N;-fun kotow_N : N;-fun kotow_V : V;-fun koumiss_N : N;-fun kowtow_N : N;-fun kowtow_V : V;-fun kraal_N : N;-fun krakow_PN : PN;-fun krasnoyarsk_PN : PN;-fun krefeld_PN : PN;-fun kremlin_N : N;-fun krivoi_rog_PN : PN;-fun krona_N : N;-fun krone_N : N;-fun kudos_N : N;-fun kumis_N : N;-fun kung_fu_N : N;-fun kunming_PN : PN;-fun kuwait_PN : PN;-fun kuwait_city_PN : PN;-fun kuwaiti_A : A;-fun kuwaiti_N : N;-fun kuybyshev_PN : PN;-fun kvass_N : N;-fun kw_N : N;-fun kwacha_N : N;-fun kweiyang_PN : PN;-fun kwela_N : N;-fun kyoto_PN : PN;-fun kummel_N : N;-fun l_plate_N : N;-fun la_N : N;-fun la_PN : PN;-fun la_di_da_A : A;-fun la_habana_PN : PN;-fun la_paz_PN : PN;-fun la_plata_PN : PN;-fun la_spezia_PN : PN;-fun laager_N : N;-fun lab_N : N;-fun lab_PN : PN;-fun label_N : N;-fun label_V2 : V2;-fun labial_A : A;-fun laboratory_N : N;-fun laborious_A : A;-fun laboriously_Adv : Adv;-fun labour_N : N;-fun labour_V : V;-fun labour_V2 : V2;-fun labour_saving_A : A;-fun laboured_A : A;-fun labourer_N : N;-fun labourite_N : N;-fun labrador_PN : PN;-fun laburnum_N : N;-fun labyrinth_N : N;-fun labyrinthine_A : A;-fun lace_N : N;-fun lace_V : V;-fun lace_V2 : V2;-fun lacerate_V2 : V2;-fun laceration_N : N;-fun lachrymal_A : A;-fun lachrymose_A : A;-fun lack_N : N;-fun lack_V : V;-fun lack_V2 : V2;-fun lack_lustre_A : A;-fun lackadaisical_A : A;-fun lackadaisically_Adv : Adv;-fun lackey_N : N;-fun laconic_A : A;-fun laconically_Adv : Adv;-fun laconicism_N : N;-fun laconism_N : N;-fun lacquer_N : N;-fun lacquer_V2 : V2;-fun lacrosse_N : N;-fun lactic_A : A;-fun lacuna_N : N;-fun lacy_A : A;-fun lad_N : N;-fun ladder_N : N;-fun ladder_V : V;-fun ladder_proof_A : A;-fun laddie_N : N;-fun lade_V2 : V2;-fun laden_A : A;-fun lading_N : N;-fun ladle_N : N;-fun ladle_V2 : V2;-fun lady's_maid_N : N;-fun lady_N : N;-fun lady_chapel_N : N;-fun lady_in_waiting_N : N;-fun lady_killer_N : N;-fun ladybird_N : N;-fun ladylike_A : A;-fun ladyship_N : N;-fun lag_N : N;-fun lag_V : V;-fun lag_V2 : V2;-fun lager_N : N;-fun laggard_N : N;-fun lagging_N : N;-fun lagoon_N : N;-fun lagos_PN : PN;-fun lahore_PN : PN;-fun laic_A : A;-fun laicize_V2 : V2;-fun lair_N : N;-fun laird_N : N;-fun laissez_faire_N : N;-fun laity_N : N;-fun lake_N : N;-fun lakenheath_PN : PN;-fun lakh_N : N;-fun lam_V : V;-fun lam_V2 : V2;-fun lama_N : N;-fun lamasery_N : N;-fun lamb_N : N;-fun lamb_V : V;-fun lambaste_V2 : V2;-fun lambency_N : N;-fun lambent_A : A;-fun lambeth_PN : PN;-fun lambkin_N : N;-fun lambskin_N : N;-fun lame_A : A;-fun lame_V2 : V2;-fun lamely_Adv : Adv;-fun lameness_N : N;-fun lament_N : N;-fun lament_V : V;-fun lament_V2 : V2;-fun lamentable_A : A;-fun lamentably_Adv : Adv;-fun lamentation_N : N;-fun laminate_V : V;-fun laminate_V2 : V2;-fun lammas_N : N;-fun lammas_PN : PN;-fun lamp_N : N;-fun lamp_black_N : N;-fun lamplight_N : N;-fun lamplighter_N : N;-fun lamplit_A : A;-fun lampoon_N : N;-fun lampoon_V2 : V2;-fun lamppost_N : N;-fun lamprey_N : N;-fun lampshade_N : N;-fun lame_N : N;-fun lanark_PN : PN;-fun lancashire_PN : PN;-fun lancaster_PN : PN;-fun lancastrian_A : A;-fun lancastrian_N : N;-fun lance_N : N;-fun lance_V2 : V2;-fun lance_corporal_N : N;-fun lancer_N : N;-fun lancet_N : N;-fun lanchow_PN : PN;-fun lancing_PN : PN;-fun land_N : N;-fun land_V : V;-fun land_V2 : V2;-fun land_agent_N : N;-fun landau_N : N;-fun landed_A : A;-fun landfall_N : N;-fun landgrave_N : N;-fun landholder_N : N;-fun landing_N : N;-fun landing_craft_N : N;-fun landing_field_N : N;-fun landing_gear_N : N;-fun landing_net_N : N;-fun landing_party_N : N;-fun landing_place_N : N;-fun landing_stage_N : N;-fun landing_strip_N : N;-fun landlady_N : N;-fun landless_A : A;-fun landlocked_A : A;-fun landlord_N : N;-fun landlubber_N : N;-fun landmark_N : N;-fun landmine_N : N;-fun landowner_N : N;-fun landrover_N : N;-fun landscape_N : N;-fun landscape_V2 : V2;-fun landslide_N : N;-fun landslip_N : N;-fun landsman_N : N;-fun landward_Adv : Adv;-fun lane_N : N;-fun langsyne_Adv : Adv;-fun langsyne_N : N;-fun language_N : N;-fun languid_A : A;-fun languidly_Adv : Adv;-fun languish_V : V;-fun languor_N : N;-fun languorous_A : A;-fun languorously_Adv : Adv;-fun langur_N : N;-fun lank_A : A;-fun lanky_A : A;-fun lanolin_N : N;-fun lantern_N : N;-fun lantern_jawed_A : A;-fun lanyard_N : N;-fun lao_N : N;-fun laos_PN : PN;-fun laotian_A : A;-fun laotian_N : N;-fun lap_N : N;-fun lap_V : V;-fun lap_V2 : V2;-fun lap_dog_N : N;-fun lapel_N : N;-fun lapidary_A : A;-fun lapidary_N : N;-fun lapis_lazuli_N : N;-fun lapse_N : N;-fun lapse_V : V;-fun lapwing_N : N;-fun larboard_A : A;-fun larboard_N : N;-fun larceny_N : N;-fun larch_N : N;-fun lard_N : N;-fun lard_V2 : V2;-fun larder_N : N;-fun large_A : A;-fun large_Adv : Adv;-fun large_N : N;-fun large_scale_A : A;-fun largely_Adv : Adv;-fun largeness_N : N;-fun largesse_N : N;-fun largish_A : A;-fun largo_N : N;-fun largs_PN : PN;-fun lariat_N : N;-fun lark_N : N;-fun lark_V : V;-fun larkhall_PN : PN;-fun larkspur_N : N;-fun larn_V : V;-fun larn_V2 : V2;-fun larne_PN : PN;-fun larry_PN : PN;-fun larva_N : N;-fun larval_A : A;-fun laryngitis_N : N;-fun larynx_N : N;-fun las_palmas_PN : PN;-fun lascar_N : N;-fun lascivious_A : A;-fun lasciviously_Adv : Adv;-fun lasciviousness_N : N;-fun laser_N : N;-fun lash_N : N;-fun lash_V : V;-fun lash_V2 : V2;-fun lash_up_N : N;-fun lashing_N : N;-fun lass_N : N;-fun lassie_N : N;-fun lassitude_N : N;-fun lasso_N : N;-fun lasso_V2 : V2;-fun last_A : A;-fun last_Adv : Adv;-fun last_N : N;-fun last_V : V;-fun lasting_A : A;-fun lastly_Adv : Adv;-fun lat_N : N;-fun latch_N : N;-fun latch_V : V;-fun latch_V2 : V2;-fun latchkey_N : N;-fun late_A : A;-fun late_Adv : Adv;-fun lateen_A : A;-fun lately_Adv : Adv;-fun latent_A : A;-fun lateral_A : A;-fun laterally_Adv : Adv;-fun laterite_N : N;-fun latex_N : N;-fun lath_N : N;-fun lathe_N : N;-fun lather_N : N;-fun lather_V : V;-fun lather_V2 : V2;-fun lathi_N : N;-fun latin_A : A;-fun latin_N : N;-fun latinist_N : N;-fun latinize_V2 : V2;-fun latish_A : A;-fun latitude_N : N;-fun latitudes_N : N;-fun latitudinal_A : A;-fun latitudinarian_A : A;-fun latitudinarian_N : N;-fun latrine_N : N;-fun latter_A : A;-fun latter_day_A : A;-fun latterly_Adv : Adv;-fun lattice_N : N;-fun latticed_A : A;-fun laud_V2 : V2;-fun laudable_A : A;-fun laudably_Adv : Adv;-fun laudanum_N : N;-fun laudatory_A : A;-fun laugh_N : N;-fun laugh_V : V;-fun laugh_V2 : V2;-fun laughable_A : A;-fun laughably_Adv : Adv;-fun laughing_A : A;-fun laughing_gas_N : N;-fun laughing_stock_N : N;-fun laughingly_Adv : Adv;-fun laughter_N : N;-fun launch_N : N;-fun launch_V : V;-fun launch_V2 : V2;-fun launcher_N : N;-fun launching_pad_N : N;-fun launching_site_N : N;-fun launder_V : V;-fun launder_V2 : V2;-fun launderette_N : N;-fun laundress_N : N;-fun laundry_N : N;-fun laundryman_N : N;-fun laundrywoman_N : N;-fun laura_PN : PN;-fun laureate_A : A;-fun laureate_N : N;-fun laurel_N : N;-fun laurelled_A : A;-fun laurence_PN : PN;-fun lausanne_PN : PN;-fun lav_N : N;-fun lava_N : N;-fun lavatory_N : N;-fun lave_V2 : V2;-fun lavender_N : N;-fun lavish_A : A;-fun lavish_V2 : V2;-fun lavishly_Adv : Adv;-fun law_N : N;-fun law_abiding_A : A;-fun law_officer_N : N;-fun lawbreaker_N : N;-fun lawful_A : A;-fun lawfully_Adv : Adv;-fun lawgiver_N : N;-fun lawless_A : A;-fun lawlessly_Adv : Adv;-fun lawlessness_N : N;-fun lawmaker_N : N;-fun lawmaking_N : N;-fun lawn_N : N;-fun lawn_mower_N : N;-fun lawrence_PN : PN;-fun lawyer_N : N;-fun lax_A : A;-fun laxative_A : A;-fun laxative_N : N;-fun laxity_N : N;-fun laxly_Adv : Adv;-fun lay_A : A;-fun lay_N : N;-fun lay_V : V;-fun lay_V2 : V2;-fun lay_figure_N : N;-fun lay_off_N : N;-fun lay_out_N : N;-fun layabout_N : N;-fun layby_N : N;-fun layer_N : N;-fun layer_V2 : V2;-fun layer_cake_N : N;-fun layette_N : N;-fun layman_N : N;-fun layover_N : N;-fun lazar_N : N;-fun lazaret_N : N;-fun lazarette_N : N;-fun lazaretto_N : N;-fun lazarus_N : N;-fun lazarus_PN : PN;-fun laze_V : V;-fun laze_V2 : V2;-fun lazily_Adv : Adv;-fun laziness_N : N;-fun lazy_A : A;-fun lazybones_N : N;-fun lb_N : N;-fun lbs_N : N;-fun lbw_PN : PN;-fun le_havre_PN : PN;-fun le_mans_PN : PN;-fun lea_N : N;-fun leach_V2 : V2;-fun lead_N : N;-fun lead_V : V;-fun lead_V2 : V2;-fun lead_in_N : N;-fun lead_ore_N : N;-fun leaded_A : A;-fun leaden_A : A;-fun leader_N : N;-fun leaderless_A : A;-fun leadership_N : N;-fun leading_A : A;-fun leading_N : N;-fun leading_rein_N : N;-fun leaf_N : N;-fun leaf_V : V;-fun leaf_bud_N : N;-fun leaf_mould_N : N;-fun leafless_A : A;-fun leaflet_N : N;-fun leafy_A : A;-fun league_N : N;-fun league_V : V;-fun league_V2 : V2;-fun leak_N : N;-fun leak_V : V;-fun leak_V2 : V2;-fun leakage_N : N;-fun leaky_A : A;-fun leal_A : A;-fun leamington_spa_PN : PN;-fun lean_A : A;-fun lean_N : N;-fun lean_V : V;-fun lean_V2 : V2;-fun lean_to_N : N;-fun leaning_N : N;-fun leanness_N : N;-fun leap_N : N;-fun leap_V : V;-fun leap_V2 : V2;-fun leap_year_N : N;-fun leapfrog_N : N;-fun leapfrog_V2 : V2;-fun learn_V : V;-fun learn_V2 : V2;-fun learned_A : A;-fun learnedly_Adv : Adv;-fun learner_N : N;-fun learning_N : N;-fun lease_N : N;-fun lease_V2 : V2;-fun lease_lend_N : N;-fun leasehold_A : A;-fun leasehold_N : N;-fun leaseholder_N : N;-fun leash_N : N;-fun least_A : A;-fun least_Adv : Adv;-fun least_N : N;-fun leastways_Adv : Adv;-fun leastwise_Adv : Adv;-fun leather_N : N;-fun leather_jacket_N : N;-fun leatherette_N : N;-fun leatherhead_PN : PN;-fun leatherneck_N : N;-fun leatherwork_N : N;-fun leathery_A : A;-fun leave_N : N;-fun leave_V : V;-fun leave_V2 : V2;-fun leave_taking_N : N;-fun leaven_N : N;-fun leaven_V2 : V2;-fun lebanese_A : A;-fun lebanese_N : N;-fun lebanon_PN : PN;-fun lecher_N : N;-fun lecherous_A : A;-fun lechery_N : N;-fun lectern_N : N;-fun lecture_N : N;-fun lecture_V : V;-fun lecture_V2 : V2;-fun lecturer_N : N;-fun lectureship_N : N;-fun ledge_N : N;-fun ledger_N : N;-fun lee_N : N;-fun leech_N : N;-fun leeds_PN : PN;-fun leek_N : N;-fun leek_PN : PN;-fun leer_N : N;-fun leer_V : V;-fun leeward_A : A;-fun leeward_Adv : Adv;-fun leeway_N : N;-fun left_A : A;-fun left_Adv : Adv;-fun left_N : N;-fun left_hand_A : A;-fun left_handed_A : A;-fun left_wing_N : N;-fun left_winger_N : N;-fun leftist_N : N;-fun leg_N : N;-fun leg_pull_N : N;-fun leg_pulling_N : N;-fun legacy_N : N;-fun legal_A : A;-fun legalism_N : N;-fun legalistic_A : A;-fun legality_N : N;-fun legalization_N : N;-fun legalize_V2 : V2;-fun legally_Adv : Adv;-fun legate_N : N;-fun legatee_N : N;-fun legation_N : N;-fun legato_A : A;-fun legato_Adv : Adv;-fun legend_N : N;-fun legendary_A : A;-fun leger_line_N : N;-fun legerdemain_N : N;-fun legged_A : A;-fun legging_N : N;-fun leggy_A : A;-fun leghorn_N : N;-fun legibility_N : N;-fun legible_A : A;-fun legibly_Adv : Adv;-fun legion_N : N;-fun legionary_N : N;-fun legislate_V : V;-fun legislation_N : N;-fun legislative_A : A;-fun legislator_N : N;-fun legislature_N : N;-fun legitimacy_N : N;-fun legitimate_A : A;-fun legitimately_Adv : Adv;-fun legitimatize_V2 : V2;-fun legless_A : A;-fun leguminous_A : A;-fun lei_N : N;-fun leicester_PN : PN;-fun leicestershire_PN : PN;-fun leiden_PN : PN;-fun leigh_PN : PN;-fun leighton_linslade_PN : PN;-fun leinster_PN : PN;-fun leipzig_PN : PN;-fun leisure_N : N;-fun leisured_A : A;-fun leisurely_A : A;-fun leisurely_Adv : Adv;-fun leitrim_PN : PN;-fun leix_PN : PN;-fun lemming_N : N;-fun lemon_N : N;-fun lemonade_N : N;-fun lemur_N : N;-fun len_PN : PN;-fun lend_V2 : V2;-fun lender_N : N;-fun lending_library_N : N;-fun length_N : N;-fun lengthen_V : V;-fun lengthen_V2 : V2;-fun lengthily_Adv : Adv;-fun lengthways_A : A;-fun lengthways_Adv : Adv;-fun lengthwise_Adv : Adv;-fun lengthy_A : A;-fun lenience_N : N;-fun leniency_N : N;-fun lenient_A : A;-fun leniently_Adv : Adv;-fun leningrad_PN : PN;-fun lenity_N : N;-fun lenny_PN : PN;-fun lens_N : N;-fun lens_PN : PN;-fun lent_N : N;-fun lent_PN : PN;-fun lenten_A : A;-fun lentil_N : N;-fun lento_A : A;-fun lento_Adv : Adv;-fun leo_PN : PN;-fun leominster_PN : PN;-fun leon_PN : PN;-fun leonard_PN : PN;-fun leonine_A : A;-fun leopard_N : N;-fun leopardess_N : N;-fun leper_N : N;-fun leprechaun_N : N;-fun leprosy_N : N;-fun leprous_A : A;-fun lerwick_PN : PN;-fun les_PN : PN;-fun lesbian_N : N;-fun lesbianism_N : N;-fun lese_majesty_N : N;-fun lesion_N : N;-fun lesley_PN : PN;-fun leslie_PN : PN;-fun lesotho_PN : PN;-fun less_A : A;-fun less_Adv : Adv;-fun less_N : N;-fun lessee_N : N;-fun lessen_V : V;-fun lessen_V2 : V2;-fun lesser_A : A;-fun lesson_N : N;-fun lessor_N : N;-fun let_N : N;-fun let_V : V;-fun let_V2 : V2;-fun let_down_N : N;-fun let_up_N : N;-fun letchworth_PN : PN;-fun lethal_A : A;-fun lethargic_A : A;-fun lethargically_Adv : Adv;-fun lethargy_N : N;-fun lethe_PN : PN;-fun letter_N : N;-fun letter_box_N : N;-fun letter_card_N : N;-fun letter_case_N : N;-fun lettered_A : A;-fun letterhead_N : N;-fun lettering_N : N;-fun letterpress_N : N;-fun letting_N : N;-fun lettuce_N : N;-fun leucocyte_N : N;-fun leukaemia_N : N;-fun levant_PN : PN;-fun levant_V : V;-fun levantine_A : A;-fun levantine_N : N;-fun levee_N : N;-fun level_A : A;-fun level_N : N;-fun level_V : V;-fun level_V2 : V2;-fun level_headed_A : A;-fun leveller_N : N;-fun leven_PN : PN;-fun lever_N : N;-fun lever_V2 : V2;-fun leverage_N : N;-fun leveret_N : N;-fun leverkusen_PN : PN;-fun leviathan_N : N;-fun levitate_V : V;-fun levitate_V2 : V2;-fun levitation_N : N;-fun levity_N : N;-fun levy_N : N;-fun levy_V : V;-fun levy_V2 : V2;-fun lewd_A : A;-fun lewdly_Adv : Adv;-fun lewdness_N : N;-fun lewes_PN : PN;-fun lewis_PN : PN;-fun lewisham_PN : PN;-fun lexical_A : A;-fun lexically_Adv : Adv;-fun lexicographer_N : N;-fun lexicography_N : N;-fun lexicon_N : N;-fun lexis_N : N;-fun ley_N : N;-fun leyland_PN : PN;-fun liability_N : N;-fun liable_A : A;-fun liaise_V : V;-fun liaison_N : N;-fun liana_N : N;-fun liar_N : N;-fun lib_N : N;-fun lib_PN : PN;-fun libation_N : N;-fun libel_N : N;-fun libel_V2 : V2;-fun libellous_A : A;-fun liberal_A : A;-fun liberal_N : N;-fun liberalism_N : N;-fun liberality_N : N;-fun liberalization_N : N;-fun liberalize_V2 : V2;-fun liberally_Adv : Adv;-fun liberate_V2 : V2;-fun liberation_N : N;-fun liberator_N : N;-fun liberia_PN : PN;-fun liberian_A : A;-fun liberian_N : N;-fun libertine_N : N;-fun liberty_N : N;-fun libidinous_A : A;-fun libido_N : N;-fun libra_PN : PN;-fun librarian_N : N;-fun librarianship_N : N;-fun library_N : N;-fun librettist_N : N;-fun libretto_N : N;-fun libya_PN : PN;-fun libyan_A : A;-fun libyan_N : N;-fun licence_N : N;-fun licence_V2 : V2;-fun license_V2 : V2;-fun licensee_N : N;-fun licentiate_N : N;-fun licentious_A : A;-fun licentiously_Adv : Adv;-fun licentiousness_N : N;-fun lichee_N : N;-fun lichen_N : N;-fun lichfield_PN : PN;-fun lichgate_N : N;-fun lichi_N : N;-fun licit_A : A;-fun lick_N : N;-fun lick_V : V;-fun lick_V2 : V2;-fun licking_N : N;-fun lid_N : N;-fun lidless_A : A;-fun lido_N : N;-fun lie_N : N;-fun lie_V : V;-fun lie_abed_N : N;-fun lie_detector_N : N;-fun lie_in_N : N;-fun liechtenstein_PN : PN;-fun liechtensteiner_A : A;-fun liechtensteiner_N : N;-fun lied_N : N;-fun lieder_singer_N : N;-fun lief_Adv : Adv;-fun liege_A : A;-fun liege_N : N;-fun liege_PN : PN;-fun liegeman_N : N;-fun lien_N : N;-fun lieu_N : N;-fun lieutenancy_N : N;-fun lieutenant_N : N;-fun life_N : N;-fun life_buoy_N : N;-fun life_giving_A : A;-fun life_jacket_N : N;-fun life_office_N : N;-fun life_preserver_N : N;-fun life_raft_N : N;-fun life_saver_N : N;-fun life_size_A : A;-fun life_sized_A : A;-fun life_span_N : N;-fun life_work_N : N;-fun lifebelt_N : N;-fun lifeblood_N : N;-fun lifeboat_N : N;-fun lifebuoy_N : N;-fun lifeguard_N : N;-fun lifeless_A : A;-fun lifelessly_Adv : Adv;-fun lifelike_A : A;-fun lifeline_N : N;-fun lifelong_A : A;-fun lifer_N : N;-fun lifetime_N : N;-fun lift_N : N;-fun lift_V : V;-fun lift_V2 : V2;-fun lift_off_N : N;-fun liftman_N : N;-fun ligament_N : N;-fun ligature_N : N;-fun light_A : A;-fun light_Adv : Adv;-fun light_N : N;-fun light_V : V;-fun light_V2 : V2;-fun light_armed_A : A;-fun light_coloured_A : A;-fun light_fingered_A : A;-fun light_handed_A : A;-fun light_handedly_Adv : Adv;-fun light_headed_A : A;-fun light_headedly_Adv : Adv;-fun light_headedness_N : N;-fun light_hearted_A : A;-fun light_heartedly_Adv : Adv;-fun light_heartedness_N : N;-fun light_heavyweight_N : N;-fun light_minded_A : A;-fun light_mindedness_N : N;-fun light_o'_love_N : N;-fun lighten_V : V;-fun lighten_V2 : V2;-fun lighter_N : N;-fun lighter_V2 : V2;-fun lighterage_N : N;-fun lighthouse_N : N;-fun lighting_up_A : A;-fun lightly_Adv : Adv;-fun lightness_N : N;-fun lightning_N : N;-fun lightning_conductor_N : N;-fun lightning_rod_N : N;-fun lightship_N : N;-fun lightsome_A : A;-fun lightsomely_Adv : Adv;-fun lightsomeness_N : N;-fun lightweight_A : A;-fun lightweight_N : N;-fun ligneous_A : A;-fun lignite_N : N;-fun likable_A : A;-fun like_A : A;-fun like_Adv : Adv;-fun like_N : N;-fun like_V2 : V2;-fun like_minded_A : A;-fun likeable_A : A;-fun likelihood_N : N;-fun likely_A : A;-fun likely_Adv : Adv;-fun liken_V2 : V2;-fun likeness_N : N;-fun likewise_Adv : Adv;-fun liking_N : N;-fun lilac_N : N;-fun lilian_PN : PN;-fun lille_PN : PN;-fun lilliputian_A : A;-fun lilliputian_N : N;-fun lilt_N : N;-fun lilt_V : V;-fun lilt_V2 : V2;-fun lily_N : N;-fun lily_PN : PN;-fun lily_livered_A : A;-fun lily_white_A : A;-fun lima_PN : PN;-fun limb_N : N;-fun limbed_A : A;-fun limber_A : A;-fun limber_V : V;-fun limber_V2 : V2;-fun limbless_A : A;-fun limbo_N : N;-fun lime_N : N;-fun lime_V2 : V2;-fun lime_tree_N : N;-fun limejuice_N : N;-fun limekiln_N : N;-fun limelight_N : N;-fun limerick_N : N;-fun limerick_PN : PN;-fun limestone_N : N;-fun limey_N : N;-fun limit_N : N;-fun limit_V2 : V2;-fun limitation_N : N;-fun limitless_A : A;-fun limn_V2 : V2;-fun limoges_PN : PN;-fun limousine_N : N;-fun limp_A : A;-fun limp_N : N;-fun limp_V : V;-fun limpet_N : N;-fun limpid_A : A;-fun limpidity_N : N;-fun limpidly_Adv : Adv;-fun limply_Adv : Adv;-fun limpness_N : N;-fun linchpin_N : N;-fun lincoln_PN : PN;-fun lincolnshire_PN : PN;-fun linda_PN : PN;-fun linden_N : N;-fun linden_tree_N : N;-fun line_N : N;-fun line_V : V;-fun line_V2 : V2;-fun line_shooter_N : N;-fun line_shooting_N : N;-fun line_up_N : N;-fun lineage_N : N;-fun lineal_A : A;-fun lineally_Adv : Adv;-fun lineament_N : N;-fun linear_A : A;-fun linearly_Adv : Adv;-fun lineman_N : N;-fun linen_N : N;-fun linen_draper_N : N;-fun liner_N : N;-fun liner_train_N : N;-fun linesman_N : N;-fun ling_N : N;-fun lingam_N : N;-fun linger_V : V;-fun lingerer_N : N;-fun lingerie_N : N;-fun lingering_A : A;-fun lingeringly_Adv : Adv;-fun lingo_N : N;-fun lingua_franca_N : N;-fun lingual_A : A;-fun linguist_N : N;-fun linguistic_A : A;-fun linguistically_Adv : Adv;-fun linguistics_N : N;-fun liniment_N : N;-fun lining_N : N;-fun link_N : N;-fun link_V : V;-fun link_V2 : V2;-fun link_up_N : N;-fun linkage_N : N;-fun linkboy_N : N;-fun linkman_N : N;-fun links_N : N;-fun linlithgow_PN : PN;-fun linnet_N : N;-fun lino_N : N;-fun linocut_N : N;-fun linoleum_N : N;-fun linotype_N : N;-fun linseed_N : N;-fun linsey_woolsey_N : N;-fun lint_N : N;-fun lintel_N : N;-fun linwood_PN : PN;-fun linz_PN : PN;-fun lion_N : N;-fun lion_hearted_A : A;-fun lion_hunter_N : N;-fun lionel_PN : PN;-fun lioness_N : N;-fun lionize_V2 : V2;-fun lip_N : N;-fun lip_read_V2 : V2;-fun lip_reading_N : N;-fun lipped_A : A;-fun lipstick_N : N;-fun liquefaction_N : N;-fun liquefy_V : V;-fun liquefy_V2 : V2;-fun liquescent_A : A;-fun liqueur_N : N;-fun liquid_A : A;-fun liquid_N : N;-fun liquidate_V : V;-fun liquidate_V2 : V2;-fun liquidation_N : N;-fun liquidator_N : N;-fun liquidity_N : N;-fun liquidize_V2 : V2;-fun liquidizer_N : N;-fun liquor_N : N;-fun liquorice_N : N;-fun lira_N : N;-fun lisa_PN : PN;-fun lisbon_PN : PN;-fun liskeard_PN : PN;-fun lisle_N : N;-fun lisp_N : N;-fun lisp_V : V;-fun lisp_V2 : V2;-fun lispingly_Adv : Adv;-fun lissom_A : A;-fun lissome_A : A;-fun lissomness_N : N;-fun list_N : N;-fun list_V : V;-fun list_V2 : V2;-fun list_price_N : N;-fun listen_V : V;-fun listener_N : N;-fun listing_N : N;-fun listless_A : A;-fun listlessly_Adv : Adv;-fun listlessness_N : N;-fun litany_N : N;-fun litchee_N : N;-fun litchi_N : N;-fun literacy_N : N;-fun literal_A : A;-fun literal_N : N;-fun literally_Adv : Adv;-fun literary_A : A;-fun literate_A : A;-fun literate_N : N;-fun literature_N : N;-fun lithe_A : A;-fun lithograph_N : N;-fun lithograph_V : V;-fun lithograph_V2 : V2;-fun lithographic_A : A;-fun lithography_N : N;-fun litigant_N : N;-fun litigate_V : V;-fun litigate_V2 : V2;-fun litigation_N : N;-fun litigious_A : A;-fun litmus_N : N;-fun litmus_paper_N : N;-fun litotes_N : N;-fun litre_N : N;-fun litter_N : N;-fun litter_V : V;-fun litter_V2 : V2;-fun litter_basket_N : N;-fun litter_lout_N : N;-fun litterbin_N : N;-fun little_A : A;-fun little_Adv : Adv;-fun little_N : N;-fun littlehampton_PN : PN;-fun littleness_N : N;-fun littoral_A : A;-fun littoral_N : N;-fun liturgical_A : A;-fun liturgy_N : N;-fun livable_A : A;-fun live_A : A;-fun live_Adv : Adv;-fun live_V : V;-fun live_V2 : V2;-fun live_birth_N : N;-fun liveable_A : A;-fun livelihood_N : N;-fun liveliness_N : N;-fun livelong_A : A;-fun lively_A : A;-fun liven_V : V;-fun liven_V2 : V2;-fun liver_N : N;-fun liveried_A : A;-fun liverish_A : A;-fun liverpool_PN : PN;-fun liverpudlian_A : A;-fun liverpudlian_N : N;-fun liverwurst_N : N;-fun livery_A : A;-fun livery_N : N;-fun liveryman_N : N;-fun livestock_N : N;-fun livid_A : A;-fun lividly_Adv : Adv;-fun living_A : A;-fun living_N : N;-fun living_room_N : N;-fun living_space_N : N;-fun livingston_PN : PN;-fun livorno_PN : PN;-fun liz_PN : PN;-fun liza_PN : PN;-fun lizard_N : N;-fun lizzy_PN : PN;-fun ljubljana_PN : PN;-fun ll_N : N;-fun llama_N : N;-fun llandudno_PN : PN;-fun llanelli_PN : PN;-fun llangollen_PN : PN;-fun llantrisant_PN : PN;-fun llantwit_major_PN : PN;-fun llb_N : N;-fun lloyd's_PN : PN;-fun load_N : N;-fun load_V : V;-fun load_V2 : V2;-fun load_line_N : N;-fun load_shedding_N : N;-fun loaded_A : A;-fun loader_N : N;-fun loading_N : N;-fun loadstar_N : N;-fun loadstone_N : N;-fun loaf_N : N;-fun loaf_V : V;-fun loaf_V2 : V2;-fun loaf_sugar_N : N;-fun loafer_N : N;-fun loam_N : N;-fun loamy_A : A;-fun loan_N : N;-fun loan_V2 : V2;-fun loan_collection_N : N;-fun loan_office_N : N;-fun loanhead_PN : PN;-fun loanword_N : N;-fun loath_A : A;-fun loathe_V2 : V2;-fun loathing_N : N;-fun loathly_A : A;-fun loathsome_A : A;-fun lob_N : N;-fun lob_V : V;-fun lob_V2 : V2;-fun lobby_N : N;-fun lobby_V : V;-fun lobby_V2 : V2;-fun lobbyist_N : N;-fun lobe_N : N;-fun lobed_A : A;-fun lobster_N : N;-fun lobster_pot_N : N;-fun loc_cit_PN : PN;-fun local_A : A;-fun local_N : N;-fun locale_N : N;-fun localism_N : N;-fun locality_N : N;-fun localization_N : N;-fun localize_V2 : V2;-fun locally_Adv : Adv;-fun locate_V2 : V2;-fun location_N : N;-fun loch_N : N;-fun lochgelly_PN : PN;-fun lock_N : N;-fun lock_V : V;-fun lock_V2 : V2;-fun lock_gate_N : N;-fun lock_keeper_N : N;-fun locker_N : N;-fun locket_N : N;-fun lockjaw_N : N;-fun locknut_N : N;-fun lockout_N : N;-fun locksmith_N : N;-fun lockstitch_N : N;-fun lockup_A : A;-fun lockup_N : N;-fun loco_A : A;-fun locomotion_N : N;-fun locomotive_A : A;-fun locomotive_N : N;-fun locum_N : N;-fun locum_tenens_N : N;-fun locus_N : N;-fun locus_classicus_N : N;-fun locust_N : N;-fun locust_tree_N : N;-fun locution_N : N;-fun lode_N : N;-fun lodestar_N : N;-fun lodestone_N : N;-fun lodge_N : N;-fun lodge_V : V;-fun lodge_V2 : V2;-fun lodgement_N : N;-fun lodger_N : N;-fun lodging_N : N;-fun lodging_house_N : N;-fun lodgment_N : N;-fun lodz_PN : PN;-fun loess_N : N;-fun loft_N : N;-fun loft_V2 : V2;-fun loftily_Adv : Adv;-fun loftiness_N : N;-fun loftus_PN : PN;-fun lofty_A : A;-fun log_N : N;-fun log_V2 : V2;-fun log_cabin_N : N;-fun log_jam_N : N;-fun log_rolling_N : N;-fun loganberry_N : N;-fun logarithm_N : N;-fun logarithmic_A : A;-fun logarithmically_Adv : Adv;-fun logbook_N : N;-fun loggerheads_N : N;-fun loggia_N : N;-fun logging_N : N;-fun logic_N : N;-fun logical_A : A;-fun logicality_N : N;-fun logically_Adv : Adv;-fun logician_N : N;-fun logistics_N : N;-fun loin_N : N;-fun loincloth_N : N;-fun lois_PN : PN;-fun loiter_V : V;-fun loiter_V2 : V2;-fun loiterer_N : N;-fun loll_V : V;-fun loll_V2 : V2;-fun lollipop_N : N;-fun lolly_N : N;-fun london_PN : PN;-fun londonderry_PN : PN;-fun londoner_N : N;-fun lone_A : A;-fun loneliness_N : N;-fun lonely_A : A;-fun lonesome_A : A;-fun long_A : A;-fun long_Adv : Adv;-fun long_N : N;-fun long_V : V;-fun long_distance_A : A;-fun long_drawn_out_A : A;-fun long_eaton_PN : PN;-fun long_haired_A : A;-fun long_headed_A : A;-fun long_lived_A : A;-fun long_play_A : A;-fun long_playing_A : A;-fun long_range_A : A;-fun long_sighted_A : A;-fun long_standing_A : A;-fun long_suffering_A : A;-fun long_term_A : A;-fun long_time_A : A;-fun long_winded_A : A;-fun long_windedness_N : N;-fun longboat_N : N;-fun longbow_N : N;-fun longer_Adv : Adv;-fun longest_Adv : Adv;-fun longevity_N : N;-fun longhand_N : N;-fun longing_A : A;-fun longing_N : N;-fun longingly_Adv : Adv;-fun longish_A : A;-fun longitude_N : N;-fun longitudinal_A : A;-fun longitudinally_Adv : Adv;-fun longridge_PN : PN;-fun longshoreman_N : N;-fun longton_PN : PN;-fun longways_Adv : Adv;-fun longwise_Adv : Adv;-fun loo_N : N;-fun loofa_N : N;-fun loofah_N : N;-fun look_N : N;-fun look_V : V;-fun look_V2 : V2;-fun look_over_N : N;-fun looker_N : N;-fun looker_on_N : N;-fun looking_glass_N : N;-fun lookout_N : N;-fun loom_N : N;-fun loom_V : V;-fun loon_N : N;-fun loony_A : A;-fun loony_N : N;-fun loonybin_N : N;-fun loop_N : N;-fun loop_V : V;-fun loop_V2 : V2;-fun loop_line_N : N;-fun loophole_N : N;-fun loopy_A : A;-fun loose_A : A;-fun loose_V2 : V2;-fun loose_leaf_A : A;-fun loosely_Adv : Adv;-fun loosen_V : V;-fun loosen_V2 : V2;-fun loot_N : N;-fun loot_V : V;-fun loot_V2 : V2;-fun looter_N : N;-fun lop_V : V;-fun lop_V2 : V2;-fun lop_eared_A : A;-fun lope_N : N;-fun lope_V : V;-fun lopsided_A : A;-fun loquacious_A : A;-fun loquaciously_Adv : Adv;-fun loquaciousness_N : N;-fun loquacity_N : N;-fun loquat_N : N;-fun lord_N : N;-fun lord_V2 : V2;-fun lordless_A : A;-fun lordliness_N : N;-fun lordly_A : A;-fun lordship_N : N;-fun lore_N : N;-fun lorgnette_N : N;-fun lorn_A : A;-fun lorna_PN : PN;-fun lorry_N : N;-fun los_angeles_PN : PN;-fun lose_V : V;-fun lose_V2 : V2;-fun loser_N : N;-fun loss_N : N;-fun loss_leader_N : N;-fun lossiemouth_PN : PN;-fun lot_N : N;-fun loth_A : A;-fun lothian_PN : PN;-fun lotion_N : N;-fun lottery_N : N;-fun lotto_N : N;-fun lotus_N : N;-fun lotus_eater_N : N;-fun loud_A : A;-fun loud_Adv : Adv;-fun loud_hailer_N : N;-fun loudly_Adv : Adv;-fun loudness_N : N;-fun loudspeaker_N : N;-fun lough_N : N;-fun loughborough_PN : PN;-fun louis_PN : PN;-fun louise_PN : PN;-fun louisiana_PN : PN;-fun louisville_PN : PN;-fun lounge_N : N;-fun lounge_V : V;-fun lounge_chair_N : N;-fun lounge_lizard_N : N;-fun lounge_suit_N : N;-fun lounger_N : N;-fun lour_V : V;-fun louringly_Adv : Adv;-fun louse_N : N;-fun lousy_A : A;-fun lout_N : N;-fun louth_PN : PN;-fun loutish_A : A;-fun louvered_A : A;-fun louvre_N : N;-fun lovable_A : A;-fun love_N : N;-fun love_V2 : V2;-fun love_affair_N : N;-fun love_child_N : N;-fun love_feast_N : N;-fun love_knot_N : N;-fun love_letter_N : N;-fun love_match_N : N;-fun love_philtre_N : N;-fun love_potion_N : N;-fun love_seat_N : N;-fun love_song_N : N;-fun love_story_N : N;-fun love_token_N : N;-fun lovebird_N : N;-fun loveless_A : A;-fun loveliness_N : N;-fun lovelorn_A : A;-fun lovely_A : A;-fun lovemaking_N : N;-fun lover_N : N;-fun loverlike_A : A;-fun lovesick_A : A;-fun loving_A : A;-fun loving_cup_N : N;-fun loving_kindness_N : N;-fun lovingly_Adv : Adv;-fun low_A : A;-fun low_Adv : Adv;-fun low_N : N;-fun low_V : V;-fun low_down_A : A;-fun low_keyed_A : A;-fun low_pitched_A : A;-fun low_relief_N : N;-fun low_spirited_A : A;-fun lowborn_A : A;-fun lowbred_A : A;-fun lowbrow_A : A;-fun lowbrow_N : N;-fun lower_Adv : Adv;-fun lower_V : V;-fun lower_V2 : V2;-fun lowermost_A : A;-fun lowest_Adv : Adv;-fun lowestoft_PN : PN;-fun lowlander_N : N;-fun lowliness_N : N;-fun lowly_A : A;-fun lowness_N : N;-fun loyal_A : A;-fun loyalist_N : N;-fun loyally_Adv : Adv;-fun loyalty_N : N;-fun loyang_PN : PN;-fun lozenge_N : N;-fun lp_N : N;-fun lps_N : N;-fun lsd_N : N;-fun lt_PN : PN;-fun ltd_PN : PN;-fun lubber_N : N;-fun lubberly_A : A;-fun lubeck_PN : PN;-fun lubricant_N : N;-fun lubricate_V2 : V2;-fun lubrication_N : N;-fun lucent_A : A;-fun lucerne_N : N;-fun lucid_A : A;-fun lucidity_N : N;-fun lucidly_Adv : Adv;-fun lucifer_N : N;-fun luck_N : N;-fun luckily_Adv : Adv;-fun luckless_A : A;-fun lucknow_PN : PN;-fun lucky_A : A;-fun lucrative_A : A;-fun lucre_N : N;-fun lucy_PN : PN;-fun luddite_N : N;-fun ludicrous_A : A;-fun ludicrously_Adv : Adv;-fun ludlow_PN : PN;-fun ludo_N : N;-fun ludwigshafen_PN : PN;-fun luff_V : V;-fun luff_V2 : V2;-fun lug_N : N;-fun lug_V2 : V2;-fun luge_N : N;-fun luggage_N : N;-fun luggage_carrier_N : N;-fun luggage_rack_N : N;-fun luggage_van_N : N;-fun lugger_N : N;-fun lugsail_N : N;-fun lugubrious_A : A;-fun lugubriously_Adv : Adv;-fun lugubriousness_N : N;-fun luke_PN : PN;-fun lukewarm_A : A;-fun lukewarmly_Adv : Adv;-fun lukewarmness_N : N;-fun lull_N : N;-fun lull_V : V;-fun lull_V2 : V2;-fun lullaby_N : N;-fun lumbago_N : N;-fun lumbar_A : A;-fun lumber_N : N;-fun lumber_V : V;-fun lumber_V2 : V2;-fun lumber_mill_N : N;-fun lumberjack_N : N;-fun lumberman_N : N;-fun lumberroom_N : N;-fun lumberyard_N : N;-fun luminary_N : N;-fun luminosity_N : N;-fun luminous_A : A;-fun lump_N : N;-fun lump_V2 : V2;-fun lumpish_A : A;-fun lumpy_A : A;-fun lunacy_N : N;-fun lunar_A : A;-fun lunatic_N : N;-fun lunch_N : N;-fun lunch_V : V;-fun lunch_V2 : V2;-fun luncheon_N : N;-fun lunchtime_N : N;-fun lung_N : N;-fun lung_power_N : N;-fun lunge_N : N;-fun lunge_V : V;-fun lupin_N : N;-fun lurch_N : N;-fun lurch_V : V;-fun lurcher_N : N;-fun lure_N : N;-fun lure_V2 : V2;-fun lurid_A : A;-fun luridly_Adv : Adv;-fun luridness_N : N;-fun lurk_V : V;-fun lurking_place_N : N;-fun luscious_A : A;-fun lusciously_Adv : Adv;-fun lusciousness_N : N;-fun lush_A : A;-fun lush_N : N;-fun lust_N : N;-fun lust_V : V;-fun lustful_A : A;-fun lustfully_Adv : Adv;-fun lustily_Adv : Adv;-fun lustre_N : N;-fun lustrous_A : A;-fun lusty_A : A;-fun luta_PN : PN;-fun lutanist_N : N;-fun lute_N : N;-fun lutenist_N : N;-fun lutheran_A : A;-fun lutheran_N : N;-fun luton_PN : PN;-fun luxe_A : A;-fun luxembourg_PN : PN;-fun luxemburg_PN : PN;-fun luxemburger_A : A;-fun luxemburger_N : N;-fun luxuriance_N : N;-fun luxuriant_A : A;-fun luxuriantly_Adv : Adv;-fun luxuriate_V : V;-fun luxurious_A : A;-fun luxuriously_Adv : Adv;-fun luxury_N : N;-fun lvov_PN : PN;-fun lyallpur_PN : PN;-fun lyceum_N : N;-fun lychee_N : N;-fun lychgate_N : N;-fun lycee_N : N;-fun lydia_PN : PN;-fun lydney_PN : PN;-fun lye_N : N;-fun lying_in_A : A;-fun lymington_PN : PN;-fun lymm_PN : PN;-fun lymph_N : N;-fun lymphatic_A : A;-fun lynch_N : N;-fun lynch_V2 : V2;-fun lynchpin_N : N;-fun lynn_PN : PN;-fun lynne_PN : PN;-fun lynx_N : N;-fun lynx_eyed_A : A;-fun lyons_PN : PN;-fun lyre_N : N;-fun lyre_bird_N : N;-fun lyric_A : A;-fun lyric_N : N;-fun lyrical_A : A;-fun lyrically_Adv : Adv;-fun lyricism_N : N;-fun lyricist_N : N;-fun lysol_N : N;-fun lytham_PN : PN;-fun lytham_st_annes_PN : PN;-fun ma'am_N : N;-fun ma_N : N;-fun maastricht_PN : PN;-fun mabel_PN : PN;-fun mac_N : N;-fun macabre_A : A;-fun macadam_N : N;-fun macadamize_V2 : V2;-fun macaroni_N : N;-fun macaroon_N : N;-fun macaw_N : N;-fun macclesfield_PN : PN;-fun mace_N : N;-fun mace_bearer_N : N;-fun macedonian_A : A;-fun macedonian_N : N;-fun macerate_V : V;-fun macerate_V2 : V2;-fun mach_PN : PN;-fun machete_N : N;-fun machiavellian_A : A;-fun machination_N : N;-fun machine_N : N;-fun machine_V2 : V2;-fun machine_gun_N : N;-fun machine_made_A : A;-fun machinery_N : N;-fun machinist_N : N;-fun machismo_N : N;-fun mackerel_N : N;-fun mackintosh_N : N;-fun macrobiotic_A : A;-fun macrocosm_N : N;-fun mad_A : A;-fun madagascan_A : A;-fun madagascan_N : N;-fun madagascar_PN : PN;-fun madam_N : N;-fun madame_N : N;-fun madcap_N : N;-fun madden_V2 : V2;-fun madder_N : N;-fun maddy_PN : PN;-fun madeira_N : N;-fun madeleine_PN : PN;-fun mademoiselle_N : N;-fun madge_PN : PN;-fun madhouse_N : N;-fun madly_Adv : Adv;-fun madman_N : N;-fun madness_N : N;-fun madonna_N : N;-fun madras_PN : PN;-fun madrid_PN : PN;-fun madrigal_N : N;-fun madurai_PN : PN;-fun madwoman_N : N;-fun maecenas_PN : PN;-fun maelstrom_N : N;-fun maenad_N : N;-fun maesteg_PN : PN;-fun maestro_N : N;-fun maffick_V : V;-fun mafia_N : N;-fun mag_N : N;-fun magazine_N : N;-fun magdeburg_PN : PN;-fun magenta_A : A;-fun magenta_N : N;-fun maggie_PN : PN;-fun maggot_N : N;-fun maggoty_A : A;-fun maghull_PN : PN;-fun magic_A : A;-fun magic_N : N;-fun magical_A : A;-fun magically_Adv : Adv;-fun magician_N : N;-fun magisterial_A : A;-fun magisterially_Adv : Adv;-fun magistracy_N : N;-fun magistrate_N : N;-fun magnanimity_N : N;-fun magnanimous_A : A;-fun magnanimously_Adv : Adv;-fun magnate_N : N;-fun magnesia_N : N;-fun magnesium_N : N;-fun magnet_N : N;-fun magnetic_A : A;-fun magnetically_Adv : Adv;-fun magnetism_N : N;-fun magnetization_N : N;-fun magnetize_V2 : V2;-fun magneto_N : N;-fun magnificat_N : N;-fun magnification_N : N;-fun magnificence_N : N;-fun magnificent_A : A;-fun magnificently_Adv : Adv;-fun magnifier_N : N;-fun magnify_V2 : V2;-fun magniloquence_N : N;-fun magniloquent_A : A;-fun magniloquently_Adv : Adv;-fun magnitude_N : N;-fun magnolia_N : N;-fun magnum_N : N;-fun magnum_opus_N : N;-fun magpie_N : N;-fun magyar_A : A;-fun magyar_N : N;-fun maharaja_N : N;-fun maharajah_N : N;-fun maharanee_N : N;-fun mahatma_N : N;-fun mahjong_N : N;-fun mahogany_N : N;-fun mahout_N : N;-fun maid_N : N;-fun maiden_A : A;-fun maiden_N : N;-fun maidenhair_N : N;-fun maidenhead_N : N;-fun maidenhead_PN : PN;-fun maidenhood_N : N;-fun maidenlike_A : A;-fun maidenly_A : A;-fun maidservant_N : N;-fun maidstone_PN : PN;-fun mail_N : N;-fun mail_V2 : V2;-fun mail_train_N : N;-fun mailbag_N : N;-fun mailboat_N : N;-fun mailbox_N : N;-fun mailed_A : A;-fun mailing_card_N : N;-fun mailing_list_N : N;-fun mailman_N : N;-fun maim_V2 : V2;-fun main_A : A;-fun main_N : N;-fun maine_PN : PN;-fun mainland_N : N;-fun mainly_Adv : Adv;-fun mainmast_N : N;-fun mainspring_N : N;-fun mainstay_N : N;-fun mainstream_N : N;-fun maintain_V2 : V2;-fun maintainable_A : A;-fun maintenance_N : N;-fun mainz_PN : PN;-fun maisonnette_N : N;-fun maize_N : N;-fun maj_PN : PN;-fun majestic_A : A;-fun majestically_Adv : Adv;-fun majesty_N : N;-fun majolica_N : N;-fun major_A : A;-fun major_N : N;-fun major_V : V;-fun major_domo_N : N;-fun major_general_N : N;-fun majority_N : N;-fun make_N : N;-fun make_V : V;-fun make_V2 : V2;-fun make_believe_N : N;-fun make_up_N : N;-fun maker_N : N;-fun makeshift_N : N;-fun makeweight_N : N;-fun making_N : N;-fun malacca_N : N;-fun malachite_N : N;-fun maladjusted_A : A;-fun maladjustment_N : N;-fun maladroit_A : A;-fun maladroitly_Adv : Adv;-fun maladroitness_N : N;-fun malady_N : N;-fun malaga_PN : PN;-fun malaise_N : N;-fun malapropism_N : N;-fun malapropos_A : A;-fun malapropos_Adv : Adv;-fun malaria_N : N;-fun malarial_A : A;-fun malawi_PN : PN;-fun malawian_A : A;-fun malawian_N : N;-fun malay_A : A;-fun malay_N : N;-fun malaya_PN : PN;-fun malayan_A : A;-fun malayan_N : N;-fun malaysia_PN : PN;-fun malaysian_A : A;-fun malaysian_N : N;-fun malcolm_PN : PN;-fun malcontent_A : A;-fun malcontent_N : N;-fun maldon_PN : PN;-fun male_A : A;-fun male_N : N;-fun malediction_N : N;-fun malefactor_N : N;-fun maleficent_A : A;-fun malevolence_N : N;-fun malevolent_A : A;-fun malevolently_Adv : Adv;-fun malfeasance_N : N;-fun malformation_N : N;-fun malformed_A : A;-fun malfunction_N : N;-fun malfunction_V : V;-fun mali_PN : PN;-fun malian_A : A;-fun malian_N : N;-fun malice_N : N;-fun malicious_A : A;-fun maliciously_Adv : Adv;-fun malign_A : A;-fun malign_V2 : V2;-fun malignancy_N : N;-fun malignant_A : A;-fun malignantly_Adv : Adv;-fun malignity_N : N;-fun malinger_V : V;-fun malingerer_N : N;-fun mallard_N : N;-fun malleability_N : N;-fun malleable_A : A;-fun mallet_N : N;-fun mallow_N : N;-fun mallow_PN : PN;-fun malmo_PN : PN;-fun malmsey_N : N;-fun malnutrition_N : N;-fun malodorous_A : A;-fun malpractice_N : N;-fun malt_N : N;-fun malt_V : V;-fun malt_V2 : V2;-fun malta_PN : PN;-fun maltby_PN : PN;-fun maltese_A : A;-fun maltese_N : N;-fun malthusian_A : A;-fun maltreat_V2 : V2;-fun maltreatment_N : N;-fun maltster_N : N;-fun malvern_PN : PN;-fun malversation_N : N;-fun mama_N : N;-fun mamba_N : N;-fun mamie_PN : PN;-fun mamma_N : N;-fun mammal_N : N;-fun mammon_N : N;-fun mammoth_N : N;-fun mammy_N : N;-fun man_N : N;-fun man_V2 : V2;-fun man_at_arms_N : N;-fun man_eater_N : N;-fun man_hour_N : N;-fun man_of_war_N : N;-fun man_sized_A : A;-fun manacle_N : N;-fun manacle_V2 : V2;-fun manage_V : V;-fun manage_V2 : V2;-fun manageability_N : N;-fun manageable_A : A;-fun manageably_Adv : Adv;-fun management_N : N;-fun manager_N : N;-fun manageress_N : N;-fun managerial_A : A;-fun manatee_N : N;-fun manchester_PN : PN;-fun mancunian_A : A;-fun mancunian_N : N;-fun mandarin_N : N;-fun mandatary_N : N;-fun mandate_N : N;-fun mandate_V2 : V2;-fun mandatory_A : A;-fun mandatory_N : N;-fun mandible_N : N;-fun mandolin_N : N;-fun mandragora_N : N;-fun mandrake_N : N;-fun mandrill_N : N;-fun mandy_PN : PN;-fun mane_N : N;-fun manful_A : A;-fun manfully_Adv : Adv;-fun manganese_N : N;-fun mange_N : N;-fun mangel_wurzel_N : N;-fun manger_N : N;-fun mangily_Adv : Adv;-fun mangle_N : N;-fun mangle_V2 : V2;-fun mango_N : N;-fun mangosteen_N : N;-fun mangrove_N : N;-fun mangy_A : A;-fun manhandle_V2 : V2;-fun manhattan_N : N;-fun manhole_N : N;-fun manhood_N : N;-fun mania_N : N;-fun maniac_N : N;-fun maniacal_A : A;-fun maniacally_Adv : Adv;-fun manic_depressive_A : A;-fun manic_depressive_N : N;-fun manicure_N : N;-fun manicure_V2 : V2;-fun manicurist_N : N;-fun manifest_A : A;-fun manifest_N : N;-fun manifest_V2 : V2;-fun manifestation_N : N;-fun manifestly_Adv : Adv;-fun manifesto_N : N;-fun manifold_A : A;-fun manifold_N : N;-fun manifold_V2 : V2;-fun manikin_N : N;-fun manila_PN : PN;-fun manilla_N : N;-fun manipulate_V2 : V2;-fun manipulation_N : N;-fun manipulative_A : A;-fun manitoba_PN : PN;-fun mankind_N : N;-fun manlike_A : A;-fun manliness_N : N;-fun manly_A : A;-fun manna_N : N;-fun mannequin_N : N;-fun manner_N : N;-fun mannered_A : A;-fun mannerism_N : N;-fun mannerly_A : A;-fun mannheim_PN : PN;-fun mannish_A : A;-fun manoeuvrability_N : N;-fun manoeuvrable_A : A;-fun manoeuvre_N : N;-fun manoeuvre_V : V;-fun manoeuvre_V2 : V2;-fun manoeuvrer_N : N;-fun manor_N : N;-fun manor_house_N : N;-fun manorial_A : A;-fun manpower_N : N;-fun mansard_N : N;-fun manse_N : N;-fun manservant_N : N;-fun mansfield_PN : PN;-fun mansion_N : N;-fun manslaughter_N : N;-fun mantel_N : N;-fun mantelpiece_N : N;-fun mantilla_N : N;-fun mantis_N : N;-fun mantle_N : N;-fun mantle_V : V;-fun mantle_V2 : V2;-fun mantrap_N : N;-fun manual_A : A;-fun manual_N : N;-fun manually_Adv : Adv;-fun manufacture_N : N;-fun manufacture_V2 : V2;-fun manufacturer_N : N;-fun manumission_N : N;-fun manumit_V2 : V2;-fun manure_N : N;-fun manure_V2 : V2;-fun manuscript_N : N;-fun manx_A : A;-fun manx_N : N;-fun many_sided_A : A;-fun maoism_N : N;-fun maoist_N : N;-fun maori_N : N;-fun map_N : N;-fun map_V2 : V2;-fun map_reader_N : N;-fun maple_N : N;-fun maple_leaf_N : N;-fun maquis_N : N;-fun mar_PN : PN;-fun mar_V2 : V2;-fun marabou_N : N;-fun maracaibo_PN : PN;-fun maraschino_N : N;-fun marathon_N : N;-fun maraud_V : V;-fun marauder_N : N;-fun marble_N : N;-fun marbled_A : A;-fun marbling_N : N;-fun march_N : N;-fun march_PN : PN;-fun march_V : V;-fun march_V2 : V2;-fun marcher_N : N;-fun marchioness_N : N;-fun mardi_gras_N : N;-fun mare_N : N;-fun margaret_PN : PN;-fun margarine_N : N;-fun margate_PN : PN;-fun marge_N : N;-fun marge_PN : PN;-fun margery_PN : PN;-fun margie_PN : PN;-fun margin_N : N;-fun marginal_A : A;-fun marginally_Adv : Adv;-fun margrave_N : N;-fun marguerite_N : N;-fun maria_PN : PN;-fun marian_PN : PN;-fun marie_PN : PN;-fun marigold_N : N;-fun marihuana_N : N;-fun marijuana_N : N;-fun marilyn_PN : PN;-fun marimba_N : N;-fun marina_N : N;-fun marinade_N : N;-fun marinade_V2 : V2;-fun marinate_V2 : V2;-fun marine_A : A;-fun marine_N : N;-fun mariner_N : N;-fun marion_PN : PN;-fun marionette_N : N;-fun marital_A : A;-fun maritime_A : A;-fun marjoram_N : N;-fun marjorie_PN : PN;-fun mark_N : N;-fun mark_PN : PN;-fun mark_V2 : V2;-fun mark_up_N : N;-fun marked_A : A;-fun markedly_Adv : Adv;-fun marker_N : N;-fun market_N : N;-fun market_V : V;-fun market_V2 : V2;-fun market_cross_N : N;-fun market_day_N : N;-fun market_drayton_PN : PN;-fun market_garden_N : N;-fun market_gardening_N : N;-fun market_harborough_PN : PN;-fun market_square_N : N;-fun market_town_N : N;-fun marketable_A : A;-fun marketing_N : N;-fun marketplace_N : N;-fun marking_N : N;-fun marking_ink_N : N;-fun marking_inks_N : N;-fun marksman_N : N;-fun marksmanship_N : N;-fun marl_N : N;-fun marlborough_PN : PN;-fun marlene_PN : PN;-fun marlinespike_N : N;-fun marlow_PN : PN;-fun marmalade_N : N;-fun marmoreal_A : A;-fun marmoset_N : N;-fun marmot_N : N;-fun marocain_N : N;-fun maroon_A : A;-fun maroon_N : N;-fun maroon_V2 : V2;-fun marple_PN : PN;-fun marque_N : N;-fun marquee_N : N;-fun marquess_N : N;-fun marquetry_N : N;-fun marquis_N : N;-fun marriage_N : N;-fun marriageability_N : N;-fun marriageable_A : A;-fun married_A : A;-fun marrow_N : N;-fun marrowbone_N : N;-fun marry_V : V;-fun marry_V2 : V2;-fun mars_PN : PN;-fun marsala_N : N;-fun marseillaise_N : N;-fun marseilles_PN : PN;-fun marsh_N : N;-fun marshal_N : N;-fun marshal_V2 : V2;-fun marshalling_yard_N : N;-fun marshmallow_N : N;-fun marshy_A : A;-fun marske_PN : PN;-fun marsupial_A : A;-fun marsupial_N : N;-fun mart_N : N;-fun marten_N : N;-fun martha_PN : PN;-fun martial_A : A;-fun martially_Adv : Adv;-fun martian_A : A;-fun martian_N : N;-fun martin_N : N;-fun martin_PN : PN;-fun martinet_N : N;-fun martini_N : N;-fun martyr_N : N;-fun martyr_V2 : V2;-fun martyrdom_N : N;-fun marvel_N : N;-fun marvel_V : V;-fun marvellous_A : A;-fun marvellously_Adv : Adv;-fun marvelous_A : A;-fun marvelously_Adv : Adv;-fun marxism_N : N;-fun marxist_N : N;-fun mary_PN : PN;-fun maryland_PN : PN;-fun maryport_PN : PN;-fun marzipan_N : N;-fun masc_PN : PN;-fun mascara_N : N;-fun mascot_N : N;-fun masculine_A : A;-fun masculinity_N : N;-fun maser_N : N;-fun mash_N : N;-fun mash_V2 : V2;-fun masher_N : N;-fun mask_N : N;-fun mask_V2 : V2;-fun masochism_N : N;-fun masochist_N : N;-fun masochistic_A : A;-fun masochistically_Adv : Adv;-fun mason_N : N;-fun mason_dixon_PN : PN;-fun masonic_A : A;-fun masonry_N : N;-fun masque_N : N;-fun masquerade_N : N;-fun masquerade_V : V;-fun mass_N : N;-fun mass_V : V;-fun mass_V2 : V2;-fun mass_produce_V2 : V2;-fun massachusetts_PN : PN;-fun massacre_N : N;-fun massacre_V2 : V2;-fun massage_N : N;-fun massage_V2 : V2;-fun masseur_N : N;-fun masseuse_N : N;-fun massif_N : N;-fun massive_A : A;-fun massively_Adv : Adv;-fun massiveness_N : N;-fun massy_A : A;-fun mast_N : N;-fun master_N : N;-fun master_V2 : V2;-fun master_at_arms_N : N;-fun master_key_N : N;-fun masterful_A : A;-fun masterfully_Adv : Adv;-fun masterless_A : A;-fun masterly_A : A;-fun mastermind_N : N;-fun mastermind_V2 : V2;-fun masterpiece_N : N;-fun mastership_N : N;-fun masterstroke_N : N;-fun mastery_N : N;-fun masthead_N : N;-fun masticate_V2 : V2;-fun mastication_N : N;-fun mastiff_N : N;-fun mastodon_N : N;-fun mastoid_N : N;-fun mastoiditis_N : N;-fun masturbate_V : V;-fun masturbate_V2 : V2;-fun masturbation_N : N;-fun mat_A : A;-fun mat_N : N;-fun mat_V : V;-fun mat_V2 : V2;-fun matador_N : N;-fun match_N : N;-fun match_V : V;-fun match_V2 : V2;-fun match_point_N : N;-fun matchbox_N : N;-fun matchet_N : N;-fun matchless_A : A;-fun matchlock_N : N;-fun matchmaker_N : N;-fun matchwood_N : N;-fun mate_1_N : N;-fun mate_V : V;-fun mate_V2 : V2;-fun material_A : A;-fun material_N : N;-fun materialism_N : N;-fun materialist_N : N;-fun materialistic_A : A;-fun materialistically_Adv : Adv;-fun materialization_N : N;-fun materialize_V : V;-fun materially_Adv : Adv;-fun maternal_A : A;-fun maternally_Adv : Adv;-fun maternity_N : N;-fun matey_A : A;-fun mathematical_A : A;-fun mathematically_Adv : Adv;-fun mathematician_N : N;-fun mathematics_N : N;-fun maths_N : N;-fun matinee_N : N;-fun matlock_PN : PN;-fun matriarch_N : N;-fun matriarchal_A : A;-fun matriarchy_N : N;-fun matric_N : N;-fun matricide_N : N;-fun matriculate_V : V;-fun matriculate_V2 : V2;-fun matriculation_N : N;-fun matrimonial_A : A;-fun matrimony_N : N;-fun matrix_N : N;-fun matron_N : N;-fun matronly_A : A;-fun matt_A : A;-fun matt_PN : PN;-fun matted_A : A;-fun matter_N : N;-fun matter_V : V;-fun matter_of_course_A : A;-fun matter_of_fact_A : A;-fun matthew_PN : PN;-fun matting_N : N;-fun mattock_N : N;-fun mattress_N : N;-fun maturate_V : V;-fun maturation_N : N;-fun mature_A : A;-fun mature_V : V;-fun mature_V2 : V2;-fun maturely_Adv : Adv;-fun maturity_N : N;-fun matutinal_A : A;-fun mate_2_N : N;-fun maud_PN : PN;-fun maudie_PN : PN;-fun maudlin_A : A;-fun maul_V2 : V2;-fun maulstick_N : N;-fun maunder_V : V;-fun maundy_thursday_N : N;-fun maundy_thursday_PN : PN;-fun maureen_PN : PN;-fun maurice_PN : PN;-fun mauritania_PN : PN;-fun mauritanian_A : A;-fun mauritanian_N : N;-fun mauritian_A : A;-fun mauritian_N : N;-fun mauritius_PN : PN;-fun mausoleum_N : N;-fun mauve_A : A;-fun mauve_N : N;-fun maverick_N : N;-fun mavis_N : N;-fun mavis_PN : PN;-fun maw_N : N;-fun mawkish_A : A;-fun mawkishly_Adv : Adv;-fun mawkishness_N : N;-fun max_N : N;-fun max_PN : PN;-fun maxim_N : N;-fun maximal_A : A;-fun maximally_Adv : Adv;-fun maximization_N : N;-fun maximize_V2 : V2;-fun maximum_A : A;-fun maximum_N : N;-fun maxine_PN : PN;-fun may_N : N;-fun may_PN : PN;-fun may_beetle_N : N;-fun may_bug_N : N;-fun maybe_Adv : Adv;-fun mayday_N : N;-fun mayfair_PN : PN;-fun mayfield_PN : PN;-fun mayfly_N : N;-fun mayhem_N : N;-fun mayo_PN : PN;-fun mayonnaise_N : N;-fun mayor_N : N;-fun mayoral_A : A;-fun mayoralty_N : N;-fun mayoress_N : N;-fun maypole_N : N;-fun maze_N : N;-fun mazed_A : A;-fun mazurka_N : N;-fun mb_N : N;-fun mc_N : N;-fun mcc_N : N;-fun mccarthyism_N : N;-fun md_N : N;-fun mead_N : N;-fun meadow_N : N;-fun meagre_A : A;-fun meagrely_Adv : Adv;-fun meagreness_N : N;-fun meal_N : N;-fun mealie_N : N;-fun mealtime_N : N;-fun mealy_A : A;-fun mealy_bug_N : N;-fun mealy_mouthed_A : A;-fun mean_A : A;-fun mean_N : N;-fun mean_V2 : V2;-fun meander_V : V;-fun meanderingly_Adv : Adv;-fun meanie_N : N;-fun meaning_A : A;-fun meaning_N : N;-fun meaningful_A : A;-fun meaningfully_Adv : Adv;-fun meaningless_A : A;-fun meaningly_Adv : Adv;-fun meanly_Adv : Adv;-fun meanness_N : N;-fun meantime_Adv : Adv;-fun meantime_N : N;-fun meanwhile_Adv : Adv;-fun meany_N : N;-fun measles_N : N;-fun measly_A : A;-fun measurable_A : A;-fun measurably_Adv : Adv;-fun measure_N : N;-fun measure_V : V;-fun measure_V2 : V2;-fun measured_A : A;-fun measureless_A : A;-fun measurement_N : N;-fun meat_N : N;-fun meat_safe_N : N;-fun meatball_N : N;-fun meath_PN : PN;-fun meatless_A : A;-fun meaty_A : A;-fun mecca_PN : PN;-fun mechanic_N : N;-fun mechanical_A : A;-fun mechanically_Adv : Adv;-fun mechanics_N : N;-fun mechanism_N : N;-fun mechanistic_A : A;-fun mechanistically_Adv : Adv;-fun mechanization_N : N;-fun mechanize_V2 : V2;-fun med_N : N;-fun medal_N : N;-fun medalist_N : N;-fun medallion_N : N;-fun medallist_N : N;-fun medan_PN : PN;-fun meddle_V : V;-fun meddler_N : N;-fun meddlesome_A : A;-fun medellin_PN : PN;-fun mediaeval_A : A;-fun medial_A : A;-fun medially_Adv : Adv;-fun median_A : A;-fun median_N : N;-fun mediate_V : V;-fun mediate_V2 : V2;-fun mediation_N : N;-fun mediator_N : N;-fun medic_N : N;-fun medical_A : A;-fun medical_N : N;-fun medically_Adv : Adv;-fun medicament_N : N;-fun medicare_N : N;-fun medicate_V2 : V2;-fun medication_N : N;-fun medicinal_A : A;-fun medicine_N : N;-fun medicine_ball_N : N;-fun medicine_chest_N : N;-fun medicine_man_N : N;-fun medico_N : N;-fun medieval_A : A;-fun mediocre_A : A;-fun mediocrity_N : N;-fun meditate_V : V;-fun meditate_V2 : V2;-fun meditation_N : N;-fun meditative_A : A;-fun meditatively_Adv : Adv;-fun mediterranean_A : A;-fun medium_A : A;-fun medium_N : N;-fun medlar_N : N;-fun medley_N : N;-fun meed_N : N;-fun meek_A : A;-fun meekly_Adv : Adv;-fun meekness_N : N;-fun meerschaum_N : N;-fun meet_A : A;-fun meet_N : N;-fun meet_V : V;-fun meet_V2 : V2;-fun meeting_N : N;-fun meeting_house_N : N;-fun meeting_place_N : N;-fun meg_PN : PN;-fun megacycle_N : N;-fun megadeath_N : N;-fun megalith_N : N;-fun megalithic_A : A;-fun megalomania_N : N;-fun megalomaniac_N : N;-fun megaphone_N : N;-fun megaton_N : N;-fun megrim_N : N;-fun meiosis_N : N;-fun melancholia_N : N;-fun melancholic_A : A;-fun melancholy_A : A;-fun melancholy_N : N;-fun melbourne_PN : PN;-fun melcombe_PN : PN;-fun melcombe_regis_PN : PN;-fun meliorate_V : V;-fun meliorate_V2 : V2;-fun melioration_N : N;-fun meliorism_N : N;-fun melksham_PN : PN;-fun mellifluous_A : A;-fun mellow_A : A;-fun mellow_V : V;-fun mellow_V2 : V2;-fun mellowly_Adv : Adv;-fun mellowness_N : N;-fun melodic_A : A;-fun melodious_A : A;-fun melodiously_Adv : Adv;-fun melodiousness_N : N;-fun melodrama_N : N;-fun melodramatic_A : A;-fun melodramatically_Adv : Adv;-fun melody_N : N;-fun melon_N : N;-fun melt_V : V;-fun melt_V2 : V2;-fun meltham_PN : PN;-fun melting_A : A;-fun melting_point_N : N;-fun melting_pot_N : N;-fun melton_mowbray_PN : PN;-fun member_N : N;-fun membership_N : N;-fun membrane_N : N;-fun membranous_A : A;-fun memento_N : N;-fun memo_N : N;-fun memoir_N : N;-fun memorable_A : A;-fun memorably_Adv : Adv;-fun memorandum_N : N;-fun memorial_N : N;-fun memorialize_V2 : V2;-fun memorize_V2 : V2;-fun memory_N : N;-fun memphis_PN : PN;-fun memsahib_N : N;-fun menace_N : N;-fun menace_V2 : V2;-fun menacingly_Adv : Adv;-fun menagerie_N : N;-fun mend_N : N;-fun mend_V : V;-fun mend_V2 : V2;-fun mendacious_A : A;-fun mendaciously_Adv : Adv;-fun mendacity_N : N;-fun mendelian_A : A;-fun mender_N : N;-fun mendicant_A : A;-fun mendicant_N : N;-fun mending_N : N;-fun menial_A : A;-fun menial_N : N;-fun menially_Adv : Adv;-fun meningitis_N : N;-fun menopause_N : N;-fun menstrual_A : A;-fun menstruate_V : V;-fun menstruation_N : N;-fun mensurable_A : A;-fun mensuration_N : N;-fun mental_A : A;-fun mentality_N : N;-fun mentally_Adv : Adv;-fun menthol_N : N;-fun mentholated_A : A;-fun mention_N : N;-fun mention_V2 : V2;-fun mentioned_A : A;-fun mentor_N : N;-fun menu_N : N;-fun meopham_PN : PN;-fun mephistophelian_A : A;-fun mercantile_A : A;-fun mercator_PN : PN;-fun mercenary_A : A;-fun mercenary_N : N;-fun mercer_N : N;-fun mercerize_V2 : V2;-fun merchandise_N : N;-fun merchant_N : N;-fun merchantman_N : N;-fun merciful_A : A;-fun mercifully_Adv : Adv;-fun merciless_A : A;-fun mercilessly_Adv : Adv;-fun mercurial_A : A;-fun mercury_N : N;-fun mercury_PN : PN;-fun mercy_N : N;-fun mere_A : A;-fun mere_N : N;-fun merely_Adv : Adv;-fun meretricious_A : A;-fun meretriciously_Adv : Adv;-fun meretriciousness_N : N;-fun merge_V : V;-fun merge_V2 : V2;-fun merger_N : N;-fun meridian_N : N;-fun meridional_A : A;-fun meringue_N : N;-fun merino_N : N;-fun merino_sheep_N : N;-fun merit_N : N;-fun merit_V2 : V2;-fun meritocracy_N : N;-fun meritocratic_A : A;-fun meritorious_A : A;-fun meritoriously_Adv : Adv;-fun mermaid_N : N;-fun merman_N : N;-fun merrily_Adv : Adv;-fun merriment_N : N;-fun merry_A : A;-fun merry_go_round_N : N;-fun merrymaker_N : N;-fun merrymaking_N : N;-fun merthyr_tydfil_PN : PN;-fun merton_PN : PN;-fun mescal_N : N;-fun mescaline_N : N;-fun meseems_Adv : Adv;-fun mesh_N : N;-fun mesh_V : V;-fun mesh_V2 : V2;-fun mesmeric_A : A;-fun mesmerism_N : N;-fun mesmerist_N : N;-fun mesmerize_V2 : V2;-fun meson_N : N;-fun mess_N : N;-fun mess_V : V;-fun mess_V2 : V2;-fun mess_jacket_N : N;-fun mess_up_N : N;-fun message_N : N;-fun messenger_N : N;-fun messiah_N : N;-fun messianic_A : A;-fun messily_Adv : Adv;-fun messina_PN : PN;-fun messiness_N : N;-fun messmate_N : N;-fun messuage_N : N;-fun messy_A : A;-fun met_PN : PN;-fun metabolic_A : A;-fun metabolism_N : N;-fun metacarpal_A : A;-fun metacarpal_N : N;-fun metal_N : N;-fun metal_V2 : V2;-fun metallic_A : A;-fun metallurgical_A : A;-fun metallurgist_N : N;-fun metallurgy_N : N;-fun metalwork_N : N;-fun metalworker_N : N;-fun metamorphose_V : V;-fun metamorphose_V2 : V2;-fun metamorphosis_N : N;-fun metaphor_N : N;-fun metaphorical_A : A;-fun metaphorically_Adv : Adv;-fun metaphysical_A : A;-fun metaphysically_Adv : Adv;-fun metaphysics_N : N;-fun metatarsal_A : A;-fun metatarsal_N : N;-fun mete_V2 : V2;-fun meteor_N : N;-fun meteoric_A : A;-fun meteorite_N : N;-fun meteorological_A : A;-fun meteorologist_N : N;-fun meteorology_N : N;-fun meter_N : N;-fun methane_N : N;-fun methinks_Adv : Adv;-fun method_N : N;-fun methodical_A : A;-fun methodically_Adv : Adv;-fun methodism_N : N;-fun methodist_A : A;-fun methodist_N : N;-fun methodological_A : A;-fun methodologically_Adv : Adv;-fun methodology_N : N;-fun methought_Adv : Adv;-fun methuselah_PN : PN;-fun methyl_N : N;-fun methylated_A : A;-fun meticulous_A : A;-fun meticulously_Adv : Adv;-fun meticulousness_N : N;-fun metre_N : N;-fun metric_A : A;-fun metrical_A : A;-fun metrically_Adv : Adv;-fun metrication_N : N;-fun metricize_V2 : V2;-fun metro_N : N;-fun metronome_N : N;-fun metropolis_N : N;-fun metropolitan_A : A;-fun metropolitan_N : N;-fun mettle_N : N;-fun mettlesome_A : A;-fun metz_PN : PN;-fun mew_N : N;-fun mew_V : V;-fun mews_N : N;-fun mexican_A : A;-fun mexican_N : N;-fun mexico_PN : PN;-fun mexico_city_PN : PN;-fun mezzanine_A : A;-fun mezzanine_N : N;-fun mezzo_Adv : Adv;-fun mezzo_soprano_N : N;-fun mezzotint_N : N;-fun mg_N : N;-fun mgr_PN : PN;-fun mi5_PN : PN;-fun mi6_PN : PN;-fun mi_N : N;-fun miami_PN : PN;-fun miaou_N : N;-fun miaou_V : V;-fun miaow_N : N;-fun miaow_V : V;-fun miasma_N : N;-fun mica_N : N;-fun michael_PN : PN;-fun michaelmas_N : N;-fun michaelmas_PN : PN;-fun michelle_PN : PN;-fun michigan_PN : PN;-fun mick_PN : PN;-fun mickey_N : N;-fun mickey_PN : PN;-fun mickle_N : N;-fun micro_organism_N : N;-fun microbe_N : N;-fun microbiology_N : N;-fun microcosm_N : N;-fun microdot_N : N;-fun microelectronics_N : N;-fun microfiche_N : N;-fun microfilm_N : N;-fun microfilm_V2 : V2;-fun micrometer_N : N;-fun micron_N : N;-fun microphone_N : N;-fun microscope_N : N;-fun microscopic_A : A;-fun microscopical_A : A;-fun microscopically_Adv : Adv;-fun microscopy_N : N;-fun microwave_N : N;-fun mid_A : A;-fun mid_off_N : N;-fun mid_on_N : N;-fun midday_N : N;-fun midden_N : N;-fun middle_N : N;-fun middle_aged_A : A;-fun middle_class_A : A;-fun middle_distance_A : A;-fun middle_of_the_road_A : A;-fun middleman_N : N;-fun middlesex_PN : PN;-fun middleton_PN : PN;-fun middleweight_A : A;-fun middleweight_N : N;-fun middlewich_PN : PN;-fun middling_A : A;-fun middling_Adv : Adv;-fun middling_N : N;-fun middy_N : N;-fun midfield_N : N;-fun midge_N : N;-fun midget_N : N;-fun midinette_N : N;-fun midland_N : N;-fun midlands_PN : PN;-fun midmost_A : A;-fun midmost_Adv : Adv;-fun midnight_N : N;-fun midriff_N : N;-fun midshipman_N : N;-fun midships_Adv : Adv;-fun midst_N : N;-fun midstream_N : N;-fun midsummer_N : N;-fun midway_A : A;-fun midway_Adv : Adv;-fun midweek_A : A;-fun midweek_Adv : Adv;-fun midwest_PN : PN;-fun midwestern_A : A;-fun midwife_N : N;-fun midwifery_N : N;-fun mien_N : N;-fun might_N : N;-fun might_have_been_N : N;-fun mightily_Adv : Adv;-fun mighty_A : A;-fun mighty_Adv : Adv;-fun mignonette_N : N;-fun migraine_N : N;-fun migrant_N : N;-fun migrate_V : V;-fun migration_N : N;-fun migratory_A : A;-fun mikado_N : N;-fun mike_N : N;-fun mike_PN : PN;-fun milady_N : N;-fun milage_N : N;-fun milan_PN : PN;-fun milano_PN : PN;-fun milch_A : A;-fun mild_A : A;-fun mildenhall_PN : PN;-fun mildew_N : N;-fun mildew_V : V;-fun mildew_V2 : V2;-fun mildly_Adv : Adv;-fun mildness_N : N;-fun mildred_PN : PN;-fun mile_N : N;-fun mileage_N : N;-fun mileometer_N : N;-fun miler_N : N;-fun miles_PN : PN;-fun milestone_N : N;-fun milford_PN : PN;-fun milford_haven_PN : PN;-fun milieu_N : N;-fun militancy_N : N;-fun militant_A : A;-fun militant_N : N;-fun militarily_Adv : Adv;-fun militarism_N : N;-fun militarist_N : N;-fun militaristic_A : A;-fun military_A : A;-fun military_N : N;-fun militate_V : V;-fun militia_N : N;-fun militiaman_N : N;-fun milk_N : N;-fun milk_V : V;-fun milk_V2 : V2;-fun milk_churn_N : N;-fun milk_powder_N : N;-fun milk_shake_N : N;-fun milk_tooth_N : N;-fun milk_white_A : A;-fun milkbar_N : N;-fun milking_machine_N : N;-fun milkmaid_N : N;-fun milkman_N : N;-fun milkshake_N : N;-fun milksop_N : N;-fun milkweed_N : N;-fun milky_A : A;-fun mill_N : N;-fun mill_V : V;-fun mill_V2 : V2;-fun mill_dam_N : N;-fun mill_girl_N : N;-fun mill_hand_N : N;-fun millboard_N : N;-fun millenarian_N : N;-fun millennial_A : A;-fun millennium_N : N;-fun millepede_N : N;-fun miller_N : N;-fun millet_N : N;-fun milliard_N : N;-fun millibar_N : N;-fun millicent_PN : PN;-fun millie_PN : PN;-fun milligram_N : N;-fun millimetre_N : N;-fun milliner_N : N;-fun millinery_N : N;-fun millionaire_N : N;-fun millionairess_N : N;-fun millionfold_Adv : Adv;-fun millionth_A : A;-fun millionth_N : N;-fun millipede_N : N;-fun millom_PN : PN;-fun millpond_N : N;-fun millrace_N : N;-fun millstone_N : N;-fun millwheel_N : N;-fun millwright_N : N;-fun milly_PN : PN;-fun milngavie_PN : PN;-fun milnrow_PN : PN;-fun milometer_N : N;-fun milord_N : N;-fun milt_N : N;-fun milton_keynes_PN : PN;-fun milwaukee_PN : PN;-fun mime_N : N;-fun mime_V : V;-fun mime_V2 : V2;-fun mimeograph_N : N;-fun mimeograph_V2 : V2;-fun mimetic_A : A;-fun mimic_A : A;-fun mimic_N : N;-fun mimic_V2 : V2;-fun mimicry_N : N;-fun mimosa_N : N;-fun min_N : N;-fun minaret_N : N;-fun minatory_A : A;-fun mince_N : N;-fun mince_V : V;-fun mince_V2 : V2;-fun mince_pie_N : N;-fun mincemeat_N : N;-fun mincer_N : N;-fun mincing_A : A;-fun mincingly_Adv : Adv;-fun mind_N : N;-fun mind_V : V;-fun mind_V2 : V2;-fun mind_bending_A : A;-fun mind_blowing_A : A;-fun mind_boggling_A : A;-fun mind_reader_N : N;-fun minded_A : A;-fun minder_N : N;-fun mindful_A : A;-fun mindfully_Adv : Adv;-fun mindfulness_N : N;-fun mindless_A : A;-fun mindlessly_Adv : Adv;-fun mindlessness_N : N;-fun mine_A : A;-fun mine_N : N;-fun mine_V : V;-fun mine_V2 : V2;-fun mine_detector_N : N;-fun mine_disposal_N : N;-fun minefield_N : N;-fun minehead_PN : PN;-fun minelayer_N : N;-fun minelaying_N : N;-fun miner_N : N;-fun mineral_A : A;-fun mineral_N : N;-fun mineralogist_N : N;-fun mineralogy_N : N;-fun minestrone_N : N;-fun minesweeper_N : N;-fun minesweeping_N : N;-fun mineworker_N : N;-fun mingle_V : V;-fun mingle_V2 : V2;-fun mingy_A : A;-fun miniature_N : N;-fun miniaturist_N : N;-fun miniaturization_N : N;-fun miniaturize_V2 : V2;-fun minim_N : N;-fun minimal_A : A;-fun minimally_Adv : Adv;-fun minimize_V2 : V2;-fun minimum_A : A;-fun minimum_N : N;-fun mining_N : N;-fun minion_N : N;-fun minister_N : N;-fun minister_V : V;-fun ministerial_A : A;-fun ministerially_Adv : Adv;-fun ministrant_A : A;-fun ministrant_N : N;-fun ministration_N : N;-fun ministry_N : N;-fun miniver_N : N;-fun mink_N : N;-fun minneapolis_PN : PN;-fun minnesota_PN : PN;-fun minnow_N : N;-fun minor_A : A;-fun minor_N : N;-fun minority_N : N;-fun minotaur_N : N;-fun minsk_PN : PN;-fun minster_N : N;-fun minster_in_sheppey_PN : PN;-fun minstrel_N : N;-fun minstrelsy_N : N;-fun mint_N : N;-fun mint_V2 : V2;-fun minuet_N : N;-fun minus_A : A;-fun minus_N : N;-fun minuscule_A : A;-fun minute_A : A;-fun minute_N : N;-fun minute_V2 : V2;-fun minute_book_N : N;-fun minute_gun_N : N;-fun minute_hand_N : N;-fun minutely_Adv : Adv;-fun minuteman_N : N;-fun minuteness_N : N;-fun minx_N : N;-fun miracle_N : N;-fun miraculous_A : A;-fun miraculously_Adv : Adv;-fun mirage_N : N;-fun miranda_PN : PN;-fun mire_N : N;-fun mire_V : V;-fun mire_V2 : V2;-fun miriam_PN : PN;-fun mirror_N : N;-fun mirror_V2 : V2;-fun mirth_N : N;-fun mirthful_A : A;-fun mirthfully_Adv : Adv;-fun mirthless_A : A;-fun miry_A : A;-fun misadventure_N : N;-fun misadvise_V2 : V2;-fun misalliance_N : N;-fun misanthrope_N : N;-fun misanthropic_A : A;-fun misanthropy_N : N;-fun misapplication_N : N;-fun misapply_V2 : V2;-fun misapprehend_V2 : V2;-fun misapprehension_N : N;-fun misappropriate_V2 : V2;-fun misappropriation_N : N;-fun misbegotten_A : A;-fun misbehave_V : V;-fun misbehave_V2 : V2;-fun misbehaviour_N : N;-fun misc_PN : PN;-fun miscalculate_V : V;-fun miscalculate_V2 : V2;-fun miscalculation_N : N;-fun miscall_V2 : V2;-fun miscarriage_N : N;-fun miscarry_V2 : V2;-fun miscast_V2 : V2;-fun miscegenation_N : N;-fun miscellaneous_A : A;-fun miscellany_N : N;-fun mischance_N : N;-fun mischief_N : N;-fun mischief_maker_N : N;-fun mischief_making_N : N;-fun mischievous_A : A;-fun mischievously_Adv : Adv;-fun mischievousness_N : N;-fun misconceive_V : V;-fun misconceive_V2 : V2;-fun misconception_N : N;-fun misconduct_N : N;-fun misconduct_V2 : V2;-fun misconstruction_N : N;-fun misconstrue_V2 : V2;-fun miscount_N : N;-fun miscount_V : V;-fun miscount_V2 : V2;-fun miscreant_N : N;-fun misdate_V2 : V2;-fun misdeal_N : N;-fun misdeal_V : V;-fun misdeal_V2 : V2;-fun misdeed_N : N;-fun misdemeanour_N : N;-fun misdirect_V2 : V2;-fun misdirection_N : N;-fun misdoing_N : N;-fun mise_en_scene_N : N;-fun miser_N : N;-fun miserable_A : A;-fun miserably_Adv : Adv;-fun miserliness_N : N;-fun miserly_A : A;-fun misery_N : N;-fun misfire_N : N;-fun misfire_V : V;-fun misfit_N : N;-fun misfortune_N : N;-fun misgive_V2 : V2;-fun misgiving_N : N;-fun misgovern_V2 : V2;-fun misgovernment_N : N;-fun misguide_V2 : V2;-fun misguided_A : A;-fun mishandle_V2 : V2;-fun mishap_N : N;-fun mishmash_N : N;-fun misinform_V2 : V2;-fun misinformation_N : N;-fun misinterpret_V2 : V2;-fun misinterpretation_N : N;-fun misjudge_V : V;-fun misjudge_V2 : V2;-fun mislay_V2 : V2;-fun mislead_V2 : V2;-fun mismanage_V2 : V2;-fun mismanagement_N : N;-fun misname_V2 : V2;-fun misnomer_N : N;-fun misogynist_N : N;-fun misplace_V2 : V2;-fun misprint_N : N;-fun misprint_V2 : V2;-fun mispronounce_V2 : V2;-fun mispronunciation_N : N;-fun misquotation_N : N;-fun misquote_V2 : V2;-fun misread_V2 : V2;-fun misrepresent_V2 : V2;-fun misrepresentation_N : N;-fun misrule_N : N;-fun miss_N : N;-fun miss_V : V;-fun miss_V2 : V2;-fun missal_N : N;-fun misshapen_A : A;-fun missile_N : N;-fun missing_A : A;-fun mission_N : N;-fun missionary_N : N;-fun missis_N : N;-fun mississippi_PN : PN;-fun missive_N : N;-fun missouri_PN : PN;-fun misspell_V2 : V2;-fun misspelling_N : N;-fun misspend_V2 : V2;-fun misstate_V2 : V2;-fun misstatement_N : N;-fun missus_N : N;-fun missy_N : N;-fun mist_N : N;-fun mist_V : V;-fun mist_V2 : V2;-fun mistake_N : N;-fun mistake_V : V;-fun mistake_V2 : V2;-fun mistaken_A : A;-fun mistakenly_Adv : Adv;-fun mister_N : N;-fun mistily_Adv : Adv;-fun mistime_V2 : V2;-fun mistiness_N : N;-fun mistletoe_N : N;-fun mistral_N : N;-fun mistranslate_V2 : V2;-fun mistranslation_N : N;-fun mistress_N : N;-fun mistrial_N : N;-fun mistrust_N : N;-fun mistrust_V2 : V2;-fun mistrustful_A : A;-fun mistrustfully_Adv : Adv;-fun misty_A : A;-fun misunderstand_V2 : V2;-fun misunderstanding_N : N;-fun misuse_N : N;-fun misuse_V2 : V2;-fun mite_N : N;-fun mitigate_V2 : V2;-fun mitigation_N : N;-fun mitre_N : N;-fun mitre_joint_N : N;-fun mitt_N : N;-fun mitten_N : N;-fun mix_N : N;-fun mix_V : V;-fun mix_V2 : V2;-fun mix_up_N : N;-fun mixed_A : A;-fun mixed_up_A : A;-fun mixer_N : N;-fun mixture_N : N;-fun mizen_N : N;-fun mizzen_N : N;-fun mizzen_mast_N : N;-fun mizzle_V : V;-fun ml_N : N;-fun mlle_PN : PN;-fun mm_N : N;-fun mme_PN : PN;-fun mnemonic_A : A;-fun mnemonics_N : N;-fun mo_N : N;-fun mo_PN : PN;-fun moan_N : N;-fun moan_V : V;-fun moan_V2 : V2;-fun moat_N : N;-fun moated_A : A;-fun mob_N : N;-fun mob_V2 : V2;-fun mobcap_N : N;-fun mobile_A : A;-fun mobile_N : N;-fun mobility_N : N;-fun mobilization_N : N;-fun mobilize_V : V;-fun mobilize_V2 : V2;-fun mobster_N : N;-fun moccasin_N : N;-fun mocha_N : N;-fun mock_A : A;-fun mock_N : N;-fun mock_V : V;-fun mock_V2 : V2;-fun mock_up_N : N;-fun mocker_N : N;-fun mockery_N : N;-fun mockingly_Adv : Adv;-fun mod_A : A;-fun mod_N : N;-fun mod_cons_N : N;-fun modal_A : A;-fun modality_N : N;-fun mode_N : N;-fun model_N : N;-fun model_V : V;-fun model_V2 : V2;-fun modeler_N : N;-fun modeller_N : N;-fun modelling_N : N;-fun modena_PN : PN;-fun moderate_A : A;-fun moderate_N : N;-fun moderate_V : V;-fun moderate_V2 : V2;-fun moderately_Adv : Adv;-fun moderation_N : N;-fun moderator_N : N;-fun modern_A : A;-fun modern_N : N;-fun modernism_N : N;-fun modernist_N : N;-fun modernistic_A : A;-fun modernity_N : N;-fun modernization_N : N;-fun modernize_V2 : V2;-fun modest_A : A;-fun modestly_Adv : Adv;-fun modesty_N : N;-fun modicum_N : N;-fun modification_N : N;-fun modifier_N : N;-fun modify_V2 : V2;-fun modish_A : A;-fun modishly_Adv : Adv;-fun modiste_N : N;-fun modular_A : A;-fun modulate_V : V;-fun modulate_V2 : V2;-fun modulation_N : N;-fun module_N : N;-fun modus_operandi_N : N;-fun modus_vivendi_N : N;-fun mogul_N : N;-fun mohair_N : N;-fun mohammedan_N : N;-fun moiety_N : N;-fun moil_V : V;-fun moira_PN : PN;-fun moist_A : A;-fun moisten_V : V;-fun moisten_V2 : V2;-fun moistly_Adv : Adv;-fun moisture_N : N;-fun moke_N : N;-fun molar_A : A;-fun molar_N : N;-fun molasses_N : N;-fun mold_PN : PN;-fun moldy_A : A;-fun mole_N : N;-fun molecular_A : A;-fun molecule_N : N;-fun molehill_N : N;-fun moleskin_N : N;-fun molest_V2 : V2;-fun molestation_N : N;-fun moll_N : N;-fun mollification_N : N;-fun mollify_V2 : V2;-fun mollusc_N : N;-fun molly_PN : PN;-fun mollycoddle_N : N;-fun mollycoddle_V2 : V2;-fun moloch_PN : PN;-fun molto_Adv : Adv;-fun molybdenum_N : N;-fun moment_N : N;-fun momentarily_Adv : Adv;-fun momentary_A : A;-fun momentous_A : A;-fun momentously_Adv : Adv;-fun momentousness_N : N;-fun momentum_N : N;-fun mon_PN : PN;-fun monaco_PN : PN;-fun monaghan_PN : PN;-fun monarch_N : N;-fun monarchic_A : A;-fun monarchism_N : N;-fun monarchist_N : N;-fun monarchy_N : N;-fun monastery_N : N;-fun monastic_A : A;-fun monasticism_N : N;-fun monaural_A : A;-fun monchengladbach_PN : PN;-fun monday_N : N;-fun monday_PN : PN;-fun monegasque_A : A;-fun monegasque_N : N;-fun monetary_A : A;-fun monetize_V2 : V2;-fun money_N : N;-fun money_grubber_N : N;-fun money_order_N : N;-fun money_spinner_N : N;-fun moneybox_N : N;-fun moneychanger_N : N;-fun moneyed_A : A;-fun moneylender_N : N;-fun moneyless_A : A;-fun monger_N : N;-fun mongol_A : A;-fun mongol_N : N;-fun mongolia_PN : PN;-fun mongolian_A : A;-fun mongolian_N : N;-fun mongolism_N : N;-fun mongoose_N : N;-fun mongrel_A : A;-fun mongrel_N : N;-fun monica_PN : PN;-fun monifieth_PN : PN;-fun monitor_N : N;-fun monitor_V : V;-fun monitor_V2 : V2;-fun monk_N : N;-fun monkey_N : N;-fun monkey_V : V;-fun monkey_jacket_N : N;-fun monkey_nut_N : N;-fun monkey_puzzle_N : N;-fun monkey_wrench_N : N;-fun monkish_A : A;-fun monmouth_PN : PN;-fun mono_A : A;-fun monochrome_A : A;-fun monochrome_N : N;-fun monocle_N : N;-fun monocled_A : A;-fun monogamist_N : N;-fun monogamous_A : A;-fun monogamy_N : N;-fun monogram_N : N;-fun monograph_N : N;-fun monolith_N : N;-fun monolithic_A : A;-fun monologue_N : N;-fun monomania_N : N;-fun monomaniac_N : N;-fun monoplane_N : N;-fun monopolist_N : N;-fun monopolistic_A : A;-fun monopolization_N : N;-fun monopolize_V2 : V2;-fun monopoly_N : N;-fun monorail_N : N;-fun monosyllabic_A : A;-fun monosyllable_N : N;-fun monotheism_N : N;-fun monotheist_N : N;-fun monotheistic_A : A;-fun monotone_N : N;-fun monotonous_A : A;-fun monotonously_Adv : Adv;-fun monotony_N : N;-fun monotype_N : N;-fun monoxide_N : N;-fun monsieur_N : N;-fun monsignor_N : N;-fun monsoon_N : N;-fun monster_N : N;-fun monstrance_N : N;-fun monstrosity_N : N;-fun monstrous_A : A;-fun monstrously_Adv : Adv;-fun montage_N : N;-fun montana_PN : PN;-fun monterrey_PN : PN;-fun montevideo_PN : PN;-fun month_N : N;-fun monthly_A : A;-fun monthly_Adv : Adv;-fun monthly_N : N;-fun montreal_PN : PN;-fun montrose_PN : PN;-fun montserrat_PN : PN;-fun montserratian_A : A;-fun montserratian_N : N;-fun monument_N : N;-fun monumental_A : A;-fun monza_PN : PN;-fun moo_N : N;-fun moo_V : V;-fun moo_cow_N : N;-fun mooch_V : V;-fun mood_N : N;-fun moodily_Adv : Adv;-fun moodiness_N : N;-fun moody_A : A;-fun moon_N : N;-fun moon_V : V;-fun moon_V2 : V2;-fun moonbeam_N : N;-fun moonflower_N : N;-fun moonless_A : A;-fun moonlight_N : N;-fun moonlit_A : A;-fun moonshine_N : N;-fun moonstone_N : N;-fun moonstruck_A : A;-fun moony_A : A;-fun moor_N : N;-fun moor_V2 : V2;-fun moorcock_N : N;-fun moorfowl_N : N;-fun moorgame_N : N;-fun moorhen_N : N;-fun mooring_mast_N : N;-fun moorish_A : A;-fun moorland_N : N;-fun moose_N : N;-fun moot_A : A;-fun moot_V2 : V2;-fun mop_N : N;-fun mop_V : V;-fun mop_V2 : V2;-fun mope_N : N;-fun mope_V : V;-fun moped_N : N;-fun moquette_N : N;-fun moraine_N : N;-fun moral_A : A;-fun moral_N : N;-fun morale_N : N;-fun moralist_N : N;-fun moralistic_A : A;-fun morality_N : N;-fun moralize_V : V;-fun moralize_V2 : V2;-fun morally_Adv : Adv;-fun morass_N : N;-fun moratorium_N : N;-fun morbid_A : A;-fun morbidity_N : N;-fun morbidly_Adv : Adv;-fun morbidness_N : N;-fun mordant_A : A;-fun more_Adv : Adv;-fun more_N : N;-fun morecambe_PN : PN;-fun morello_N : N;-fun moreover_Adv : Adv;-fun moresque_A : A;-fun morganatic_A : A;-fun morgue_N : N;-fun moribund_A : A;-fun morley_PN : PN;-fun mormon_A : A;-fun mormon_N : N;-fun mormonism_N : N;-fun morn_N : N;-fun morning_N : N;-fun morning_glory_N : N;-fun morning_room_N : N;-fun moroccan_A : A;-fun moroccan_N : N;-fun morocco_N : N;-fun morocco_PN : PN;-fun moron_N : N;-fun moronic_A : A;-fun morose_A : A;-fun morosely_Adv : Adv;-fun moroseness_N : N;-fun morpeth_PN : PN;-fun morpheme_N : N;-fun morphemic_A : A;-fun morpheus_PN : PN;-fun morphia_N : N;-fun morphine_N : N;-fun morphological_A : A;-fun morphologically_Adv : Adv;-fun morphology_N : N;-fun morris_dance_N : N;-fun morrow_N : N;-fun morse_N : N;-fun morsel_N : N;-fun mortal_A : A;-fun mortal_N : N;-fun mortality_N : N;-fun mortally_Adv : Adv;-fun mortar_N : N;-fun mortar_V2 : V2;-fun mortarboard_N : N;-fun mortgage_N : N;-fun mortgage_V2 : V2;-fun mortgagee_N : N;-fun mortgagor_N : N;-fun mortice_N : N;-fun mortice_V2 : V2;-fun mortician_N : N;-fun mortification_N : N;-fun mortify_V : V;-fun mortify_V2 : V2;-fun mortise_N : N;-fun mortise_V2 : V2;-fun mortuary_N : N;-fun mosaic_A : A;-fun mosaic_N : N;-fun moscow_PN : PN;-fun moselle_N : N;-fun mosey_V : V;-fun moslem_A : A;-fun moslem_N : N;-fun mosque_N : N;-fun mosquito_N : N;-fun mosquito_craft_N : N;-fun mosquito_net_N : N;-fun moss_N : N;-fun moss_grown_A : A;-fun mossley_PN : PN;-fun mossy_A : A;-fun mostly_Adv : Adv;-fun mote_N : N;-fun motel_N : N;-fun moth_N : N;-fun moth_eaten_A : A;-fun mothball_N : N;-fun mother_N : N;-fun mother_V2 : V2;-fun mother_in_law_N : N;-fun mother_of_pearl_N : N;-fun motherhood_N : N;-fun motherland_N : N;-fun motherless_A : A;-fun motherlike_A : A;-fun motherliness_N : N;-fun motherly_A : A;-fun motherwell_PN : PN;-fun mothproof_A : A;-fun mothproof_V2 : V2;-fun motif_N : N;-fun motion_N : N;-fun motion_V : V;-fun motion_V2 : V2;-fun motionless_A : A;-fun motionlessly_Adv : Adv;-fun motivate_V2 : V2;-fun motivation_N : N;-fun motive_A : A;-fun motive_N : N;-fun motiveless_A : A;-fun motley_A : A;-fun motley_N : N;-fun motor_N : N;-fun motor_V : V;-fun motor_assisted_A : A;-fun motorbike_N : N;-fun motorboat_N : N;-fun motorcade_N : N;-fun motorcar_N : N;-fun motorcoach_N : N;-fun motorcycle_N : N;-fun motorist_N : N;-fun motorize_V2 : V2;-fun motorman_N : N;-fun motorway_N : N;-fun mottle_V2 : V2;-fun motto_N : N;-fun moujik_N : N;-fun mould_N : N;-fun mould_V : V;-fun mould_V2 : V2;-fun moulder_V : V;-fun moulding_N : N;-fun mouldy_A : A;-fun moult_N : N;-fun moult_V : V;-fun moult_V2 : V2;-fun mound_N : N;-fun mount_N : N;-fun mount_V : V;-fun mount_V2 : V2;-fun mountain_N : N;-fun mountain_ash_PN : PN;-fun mountaineer_N : N;-fun mountaineering_N : N;-fun mountainous_A : A;-fun mountebank_N : N;-fun mountie_N : N;-fun mourn_V : V;-fun mourn_V2 : V2;-fun mourner_N : N;-fun mournful_A : A;-fun mournfully_Adv : Adv;-fun mourning_N : N;-fun mourning_band_N : N;-fun mourning_ring_N : N;-fun mouse_N : N;-fun mouse_V : V;-fun mouser_N : N;-fun mousetrap_N : N;-fun mousse_N : N;-fun moustache_N : N;-fun mousy_A : A;-fun mouth_N : N;-fun mouth_V : V;-fun mouth_V2 : V2;-fun mouth_organ_N : N;-fun mouth_watering_A : A;-fun mouthful_N : N;-fun mouthpiece_N : N;-fun movable_A : A;-fun move_N : N;-fun move_V : V;-fun move_V2 : V2;-fun movement_N : N;-fun mover_N : N;-fun movie_N : N;-fun mow_N : N;-fun mow_V : V;-fun mow_V2 : V2;-fun mower_N : N;-fun mozambican_A : A;-fun mozambican_N : N;-fun mozambique_PN : PN;-fun mp's_N : N;-fun mp_N : N;-fun mpg_N : N;-fun mph_N : N;-fun mr_PN : PN;-fun mrs_PN : PN;-fun ms_N : N;-fun ms_PN : PN;-fun msc_N : N;-fun mt_PN : PN;-fun much_A : A;-fun much_Adv : Adv;-fun much_N : N;-fun muchness_N : N;-fun mucilage_N : N;-fun muck_N : N;-fun muck_V : V;-fun muck_V2 : V2;-fun muck_heap_N : N;-fun muckle_N : N;-fun muckraker_N : N;-fun muckraking_N : N;-fun mucky_A : A;-fun mucous_A : A;-fun mucus_N : N;-fun mud_N : N;-fun mud_V2 : V2;-fun mud_bath_N : N;-fun muddle_N : N;-fun muddle_V : V;-fun muddle_V2 : V2;-fun muddle_headed_A : A;-fun muddy_A : A;-fun muddy_V2 : V2;-fun mudguard_N : N;-fun mudslinger_N : N;-fun muesli_N : N;-fun muezzin_N : N;-fun muff_N : N;-fun muff_V2 : V2;-fun muffin_N : N;-fun muffin_man_N : N;-fun muffle_V2 : V2;-fun muffler_N : N;-fun mufti_N : N;-fun mug_N : N;-fun mug_V2 : V2;-fun mugger_N : N;-fun mugginess_N : N;-fun mugging_N : N;-fun muggins_N : N;-fun muggy_A : A;-fun mugwump_N : N;-fun muhammad_PN : PN;-fun muhammadan_A : A;-fun muhammadan_N : N;-fun muhammadanism_N : N;-fun mukden_PN : PN;-fun mulatto_N : N;-fun mulberry_N : N;-fun mulch_N : N;-fun mulch_V2 : V2;-fun mulct_V2 : V2;-fun mule_N : N;-fun muleteer_N : N;-fun mulheim_PN : PN;-fun mulhouse_PN : PN;-fun mulish_A : A;-fun mulishly_Adv : Adv;-fun mulishness_N : N;-fun mull_N : N;-fun mull_V2 : V2;-fun mullah_N : N;-fun mullein_N : N;-fun mullet_N : N;-fun mulligatawny_N : N;-fun mullion_N : N;-fun mullioned_A : A;-fun multan_PN : PN;-fun multi_lingual_A : A;-fun multifarious_A : A;-fun multifariously_Adv : Adv;-fun multiform_A : A;-fun multilateral_A : A;-fun multiple_A : A;-fun multiple_N : N;-fun multiplex_A : A;-fun multiplication_N : N;-fun multiplicity_N : N;-fun multiply_V : V;-fun multiply_V2 : V2;-fun multitude_N : N;-fun multitudinous_A : A;-fun multum_in_parvo_N : N;-fun mum_A : A;-fun mum_N : N;-fun mumble_V : V;-fun mumble_V2 : V2;-fun mumbo_jumbo_N : N;-fun mummer_N : N;-fun mummery_N : N;-fun mummification_N : N;-fun mummify_V2 : V2;-fun mummy_N : N;-fun mumps_N : N;-fun munch_V : V;-fun munch_V2 : V2;-fun mundane_A : A;-fun mundanely_Adv : Adv;-fun munich_PN : PN;-fun municipal_A : A;-fun municipality_N : N;-fun municipally_Adv : Adv;-fun munificence_N : N;-fun munificent_A : A;-fun munificently_Adv : Adv;-fun munition_N : N;-fun munition_V2 : V2;-fun munster_PN : PN;-fun mural_A : A;-fun mural_N : N;-fun murder_N : N;-fun murder_V2 : V2;-fun murderer_N : N;-fun murderess_N : N;-fun murderous_A : A;-fun murderously_Adv : Adv;-fun muriel_PN : PN;-fun murk_N : N;-fun murkily_Adv : Adv;-fun murky_A : A;-fun murmur_N : N;-fun murmur_V : V;-fun murmur_V2 : V2;-fun murphy_N : N;-fun murrain_N : N;-fun murton_PN : PN;-fun muscatel_N : N;-fun muscle_N : N;-fun muscle_V : V;-fun muscle_bound_A : A;-fun muscleman_N : N;-fun muscovite_A : A;-fun muscovite_N : N;-fun muscovy_N : N;-fun muscular_A : A;-fun muse_N : N;-fun muse_V : V;-fun museum_N : N;-fun mush_N : N;-fun mushroom_N : N;-fun mushroom_V : V;-fun mushy_A : A;-fun music_N : N;-fun music_box_N : N;-fun music_hall_N : N;-fun music_stand_N : N;-fun music_stool_N : N;-fun musical_A : A;-fun musical_N : N;-fun musical_box_N : N;-fun musically_Adv : Adv;-fun musician_N : N;-fun musicianship_N : N;-fun musingly_Adv : Adv;-fun musk_N : N;-fun musk_deer_N : N;-fun musk_rose_N : N;-fun musket_N : N;-fun musketeer_N : N;-fun musketry_N : N;-fun muskrat_N : N;-fun musky_A : A;-fun muslim_N : N;-fun muslin_N : N;-fun musquash_N : N;-fun muss_N : N;-fun muss_V2 : V2;-fun mussel_N : N;-fun musselburgh_PN : PN;-fun must_N : N;-fun mustachio_N : N;-fun mustang_N : N;-fun mustard_N : N;-fun muster_N : N;-fun muster_V : V;-fun muster_V2 : V2;-fun mustiness_N : N;-fun musty_A : A;-fun mutability_N : N;-fun mutable_A : A;-fun mutation_N : N;-fun mutatis_mutandis_Adv : Adv;-fun mute_A : A;-fun mute_N : N;-fun mute_V2 : V2;-fun mutely_Adv : Adv;-fun mutilate_V2 : V2;-fun mutilation_N : N;-fun mutineer_N : N;-fun mutinous_A : A;-fun mutiny_N : N;-fun mutiny_V : V;-fun mutt_N : N;-fun mutter_N : N;-fun mutter_V : V;-fun mutter_V2 : V2;-fun mutterer_N : N;-fun mutton_N : N;-fun mutton_head_N : N;-fun mutual_A : A;-fun mutually_Adv : Adv;-fun muzzle_N : N;-fun muzzle_V2 : V2;-fun muzzle_velocity_N : N;-fun muzzy_A : A;-fun mycology_N : N;-fun myelitis_N : N;-fun myna_N : N;-fun mynah_N : N;-fun myopia_N : N;-fun myopic_A : A;-fun myra_PN : PN;-fun myriad_A : A;-fun myriad_N : N;-fun myrmidon_N : N;-fun myrrh_N : N;-fun myrtle_N : N;-fun mysterious_A : A;-fun mysteriously_Adv : Adv;-fun mystery_N : N;-fun mystic_A : A;-fun mystic_N : N;-fun mystical_A : A;-fun mysticism_N : N;-fun mystification_N : N;-fun mystify_V2 : V2;-fun mystique_N : N;-fun myth_N : N;-fun mythical_A : A;-fun mythological_A : A;-fun mythologist_N : N;-fun mythology_N : N;-fun myxomatosis_N : N;-fun melange_N : N;-fun menage_N : N;-fun mesalliance_N : N;-fun metier_N : N;-fun melee_N : N;-fun naafi_N : N;-fun nab_V2 : V2;-fun nabob_N : N;-fun nacelle_N : N;-fun nacre_N : N;-fun nadir_N : N;-fun nag_N : N;-fun nag_V : V;-fun nag_V2 : V2;-fun nagger_N : N;-fun nagoya_PN : PN;-fun nagpur_PN : PN;-fun naiad_N : N;-fun nail_N : N;-fun nail_V2 : V2;-fun nail_polish_N : N;-fun nail_varnish_N : N;-fun nailbrush_N : N;-fun nailfile_N : N;-fun nailsea_PN : PN;-fun nainsook_N : N;-fun naira_N : N;-fun nairn_PN : PN;-fun nairobi_PN : PN;-fun naive_1_A : A;-fun naively_Adv : Adv;-fun naivety_N : N;-fun naivete_N : N;-fun naked_A : A;-fun nakedly_Adv : Adv;-fun nakedness_N : N;-fun namby_pamby_A : A;-fun namby_pamby_N : N;-fun name_N : N;-fun name_V2 : V2;-fun name_day_N : N;-fun name_drop_V : V;-fun name_dropping_N : N;-fun name_part_N : N;-fun nameless_A : A;-fun namely_Adv : Adv;-fun nameplate_N : N;-fun namesake_N : N;-fun namibia_PN : PN;-fun namibian_A : A;-fun namibian_N : N;-fun nanchang_PN : PN;-fun nancy_PN : PN;-fun nankeen_N : N;-fun nanking_PN : PN;-fun nanning_PN : PN;-fun nanny_N : N;-fun nanny_goat_N : N;-fun nantwich_PN : PN;-fun naomi_PN : PN;-fun nap_N : N;-fun nap_V : V;-fun napalm_N : N;-fun nape_N : N;-fun napery_N : N;-fun naphtha_N : N;-fun naphthalene_N : N;-fun napkin_N : N;-fun napkin_ring_N : N;-fun naples_PN : PN;-fun napoleonic_A : A;-fun napoli_PN : PN;-fun nappy_N : N;-fun narborough_PN : PN;-fun narcissism_N : N;-fun narcissus_N : N;-fun narcotic_A : A;-fun narcotic_N : N;-fun nark_N : N;-fun nark_V2 : V2;-fun narrate_V2 : V2;-fun narration_N : N;-fun narrative_N : N;-fun narrator_N : N;-fun narrow_A : A;-fun narrow_N : N;-fun narrow_V : V;-fun narrow_V2 : V2;-fun narrow_minded_A : A;-fun narrow_mindedly_Adv : Adv;-fun narrow_mindedness_N : N;-fun narrowly_Adv : Adv;-fun narrowness_N : N;-fun narwhal_N : N;-fun nasa_PN : PN;-fun nasal_A : A;-fun nasal_N : N;-fun nasalize_V2 : V2;-fun nascent_A : A;-fun nastily_Adv : Adv;-fun nastiness_N : N;-fun nasturtium_N : N;-fun nasty_A : A;-fun nat_PN : PN;-fun natal_A : A;-fun natalie_PN : PN;-fun nathaniel_PN : PN;-fun nation_N : N;-fun national_A : A;-fun national_N : N;-fun nationalism_N : N;-fun nationalist_A : A;-fun nationalist_N : N;-fun nationalistic_A : A;-fun nationality_N : N;-fun nationalization_N : N;-fun nationalize_V2 : V2;-fun nationally_Adv : Adv;-fun nationwide_A : A;-fun nationwide_Adv : Adv;-fun native_A : A;-fun native_N : N;-fun nativity_N : N;-fun nato_PN : PN;-fun natter_V : V;-fun nattily_Adv : Adv;-fun natty_A : A;-fun natural_A : A;-fun natural_N : N;-fun naturalism_N : N;-fun naturalist_N : N;-fun naturalistic_A : A;-fun naturalization_N : N;-fun naturalize_V : V;-fun naturalize_V2 : V2;-fun naturally_Adv : Adv;-fun naturalness_N : N;-fun nature_N : N;-fun naturism_N : N;-fun naturist_N : N;-fun naught_N : N;-fun naughtily_Adv : Adv;-fun naughtiness_N : N;-fun naughty_A : A;-fun nauru_PN : PN;-fun nauruan_A : A;-fun nauruan_N : N;-fun nausea_N : N;-fun nauseate_V2 : V2;-fun nauseous_A : A;-fun nautch_N : N;-fun nautch_girl_N : N;-fun nautical_A : A;-fun nautilus_N : N;-fun naval_A : A;-fun nave_N : N;-fun navel_N : N;-fun navigability_N : N;-fun navigable_A : A;-fun navigate_V : V;-fun navigate_V2 : V2;-fun navigation_N : N;-fun navigator_N : N;-fun navvy_N : N;-fun navy_N : N;-fun nay_Adv : Adv;-fun nazi_A : A;-fun nazi_N : N;-fun nazism_N : N;-fun naive_2_A : A;-fun nb_PN : PN;-fun nco_N : N;-fun ne'er_Adv : Adv;-fun ne'er_do_well_N : N;-fun ne_plus_ultra_N : N;-fun neanderthal_A : A;-fun neap_N : N;-fun neap_tide_N : N;-fun neapolitan_A : A;-fun neapolitan_N : N;-fun near_A : A;-fun near_Adv : Adv;-fun near_V : V;-fun near_V2 : V2;-fun near_sighted_A : A;-fun nearby_A : A;-fun nearer_Adv : Adv;-fun nearest_Adv : Adv;-fun nearly_Adv : Adv;-fun nearness_N : N;-fun nearside_N : N;-fun neat_A : A;-fun neath_PN : PN;-fun neatly_Adv : Adv;-fun neatness_N : N;-fun nebraska_PN : PN;-fun nebula_N : N;-fun nebular_A : A;-fun nebulous_A : A;-fun necessarily_Adv : Adv;-fun necessary_A : A;-fun necessary_N : N;-fun necessitate_V2 : V2;-fun necessitous_A : A;-fun necessity_N : N;-fun neck_N : N;-fun neck_V : V;-fun neckband_N : N;-fun neckcloth_N : N;-fun neckerchief_N : N;-fun necklace_N : N;-fun necklet_N : N;-fun neckline_N : N;-fun necktie_N : N;-fun neckwear_N : N;-fun necromancer_N : N;-fun necromancy_N : N;-fun necropolis_N : N;-fun nectar_N : N;-fun nectarine_N : N;-fun ned_PN : PN;-fun neddy_PN : PN;-fun need_N : N;-fun need_V2 : V2;-fun needful_A : A;-fun needfully_Adv : Adv;-fun needle_N : N;-fun needle_V2 : V2;-fun needlecraft_N : N;-fun needless_A : A;-fun needlessly_Adv : Adv;-fun needlewoman_N : N;-fun needlework_N : N;-fun needs_Adv : Adv;-fun needy_A : A;-fun nefarious_A : A;-fun nefariously_Adv : Adv;-fun nefariousness_N : N;-fun negate_V2 : V2;-fun negation_N : N;-fun negative_A : A;-fun negative_N : N;-fun negative_V2 : V2;-fun negatively_Adv : Adv;-fun neglect_N : N;-fun neglect_V2 : V2;-fun neglectful_A : A;-fun neglectfully_Adv : Adv;-fun neglectfulness_N : N;-fun negligee_N : N;-fun negligence_N : N;-fun negligent_A : A;-fun negligently_Adv : Adv;-fun negligible_A : A;-fun negotiable_A : A;-fun negotiate_V : V;-fun negotiate_V2 : V2;-fun negotiation_N : N;-fun negotiator_N : N;-fun negress_N : N;-fun negro_N : N;-fun negroid_A : A;-fun negroid_N : N;-fun negus_N : N;-fun neigh_N : N;-fun neigh_V : V;-fun neighbour_N : N;-fun neighbour_V : V;-fun neighbour_V2 : V2;-fun neighbourhood_N : N;-fun neighbourliness_N : N;-fun neighbourly_A : A;-fun neil_PN : PN;-fun neither_A : A;-fun neither_Adv : Adv;-fun nell_PN : PN;-fun nelly_N : N;-fun nelly_PN : PN;-fun nelson_PN : PN;-fun nem_con_Adv : Adv;-fun nemesis_N : N;-fun neocolonialism_N : N;-fun neolithic_A : A;-fun neologism_N : N;-fun neon_N : N;-fun neophyte_N : N;-fun neoplasm_N : N;-fun nepal_PN : PN;-fun nepalese_A : A;-fun nepalese_N : N;-fun nepali_A : A;-fun nepali_N : N;-fun nephew_N : N;-fun nephritis_N : N;-fun nepotism_N : N;-fun neptune_PN : PN;-fun nereid_N : N;-fun nerve_N : N;-fun nerve_V2 : V2;-fun nerve_cell_N : N;-fun nerve_centre_N : N;-fun nerve_racking_A : A;-fun nerveless_A : A;-fun nervelessly_Adv : Adv;-fun nervous_A : A;-fun nervously_Adv : Adv;-fun nervousness_N : N;-fun nervy_A : A;-fun nescience_N : N;-fun nescient_A : A;-fun ness_N : N;-fun nest_N : N;-fun nest_V : V;-fun nest_egg_N : N;-fun nestle_V : V;-fun nestle_V2 : V2;-fun nestling_N : N;-fun neston_PN : PN;-fun nestor_PN : PN;-fun net_A : A;-fun net_N : N;-fun net_V2 : V2;-fun netball_N : N;-fun nether_A : A;-fun netherlander_N : N;-fun netherlands_PN : PN;-fun nethermost_A : A;-fun netley_PN : PN;-fun nett_A : A;-fun nett_V2 : V2;-fun netting_N : N;-fun nettle_N : N;-fun nettle_V2 : V2;-fun nettlerash_N : N;-fun network_N : N;-fun neural_A : A;-fun neuralgia_N : N;-fun neuralgic_A : A;-fun neurasthenia_N : N;-fun neurasthenic_A : A;-fun neurasthenic_N : N;-fun neuritis_N : N;-fun neurologist_N : N;-fun neurology_N : N;-fun neurosis_N : N;-fun neurotic_A : A;-fun neurotic_N : N;-fun neurotically_Adv : Adv;-fun neuss_PN : PN;-fun neuter_A : A;-fun neuter_N : N;-fun neuter_V2 : V2;-fun neutral_A : A;-fun neutral_N : N;-fun neutrality_N : N;-fun neutralization_N : N;-fun neutralize_V2 : V2;-fun neutron_N : N;-fun nevada_PN : PN;-fun never_Adv : Adv;-fun nevermore_Adv : Adv;-fun nevertheless_Adv : Adv;-fun neville_PN : PN;-fun new_A : A;-fun new_Adv : Adv;-fun new_cumnock_PN : PN;-fun new_mills_PN : PN;-fun new_orleans_PN : PN;-fun new_tredegar_PN : PN;-fun new_windsor_PN : PN;-fun new_york_PN : PN;-fun newark_PN : PN;-fun newarthill_PN : PN;-fun newbiggin_PN : PN;-fun newbury_PN : PN;-fun newcastle_PN : PN;-fun newcastle_under_lyme_PN : PN;-fun newcastle_upon_tyne_PN : PN;-fun newcomer_N : N;-fun newel_N : N;-fun newfangled_A : A;-fun newfoundland_PN : PN;-fun newham_PN : PN;-fun newhaven_PN : PN;-fun newly_Adv : Adv;-fun newlywed_N : N;-fun newmains_PN : PN;-fun newmarket_N : N;-fun newmarket_PN : PN;-fun newness_N : N;-fun newport_PN : PN;-fun newport_pagnell_PN : PN;-fun newquay_PN : PN;-fun newry_PN : PN;-fun news_N : N;-fun newsagent_N : N;-fun newsboy_N : N;-fun newscast_N : N;-fun newscaster_N : N;-fun newsdealer_N : N;-fun newsflash_N : N;-fun newsless_A : A;-fun newsletter_N : N;-fun newsmonger_N : N;-fun newspaper_N : N;-fun newspaperman_N : N;-fun newsprint_N : N;-fun newsreel_N : N;-fun newsroom_N : N;-fun newssheet_N : N;-fun newsstand_N : N;-fun newsvendor_N : N;-fun newsworthy_A : A;-fun newsy_A : A;-fun newt_N : N;-fun newton_abbot_PN : PN;-fun newton_aycliffe_PN : PN;-fun newton_le_willows_PN : PN;-fun newton_mearns_PN : PN;-fun newtonian_A : A;-fun newtonian_N : N;-fun newtown_PN : PN;-fun next_A : A;-fun next_Adv : Adv;-fun next_N : N;-fun nexus_N : N;-fun nhs_N : N;-fun nib_N : N;-fun nibble_N : N;-fun nibble_V : V;-fun nibble_V2 : V2;-fun nicaragua_PN : PN;-fun nicaraguan_A : A;-fun nicaraguan_N : N;-fun nice_A : A;-fun nice_PN : PN;-fun nicely_Adv : Adv;-fun niceness_N : N;-fun nicety_N : N;-fun niche_N : N;-fun nicholas_PN : PN;-fun nick_N : N;-fun nick_PN : PN;-fun nick_V2 : V2;-fun nickel_N : N;-fun nickel_V2 : V2;-fun nicknack_N : N;-fun nickname_N : N;-fun nickname_V2 : V2;-fun nicola_PN : PN;-fun nicole_PN : PN;-fun nicotine_N : N;-fun niece_N : N;-fun niff_N : N;-fun niffy_A : A;-fun nifty_A : A;-fun nigel_PN : PN;-fun niger_PN : PN;-fun nigeria_PN : PN;-fun nigerian_A : A;-fun nigerian_N : N;-fun nigerien_A : A;-fun nigerien_N : N;-fun niggard_N : N;-fun niggardliness_N : N;-fun niggardly_A : A;-fun nigger_N : N;-fun niggle_V : V;-fun niggling_A : A;-fun nigh_Adv : Adv;-fun nigher_Adv : Adv;-fun nighest_Adv : Adv;-fun night_N : N;-fun night_bell_N : N;-fun night_bird_N : N;-fun night_light_N : N;-fun night_line_N : N;-fun night_porter_N : N;-fun night_soil_N : N;-fun night_stop_N : N;-fun night_time_N : N;-fun night_watch_N : N;-fun night_watchman_N : N;-fun nightcap_N : N;-fun nightclub_N : N;-fun nightdress_N : N;-fun nightfall_N : N;-fun nightgown_N : N;-fun nightie_N : N;-fun nightingale_N : N;-fun nightjar_N : N;-fun nightlong_A : A;-fun nightly_A : A;-fun nightly_Adv : Adv;-fun nightmare_N : N;-fun nightmarish_A : A;-fun nightshade_N : N;-fun nightshirt_N : N;-fun nightwork_N : N;-fun nihilism_N : N;-fun nihilist_N : N;-fun nihilistic_A : A;-fun nijmegen_PN : PN;-fun nil_N : N;-fun nilotic_A : A;-fun nimble_A : A;-fun nimbleness_N : N;-fun nimbly_Adv : Adv;-fun nimbus_N : N;-fun niminy_piminy_A : A;-fun nimrod_PN : PN;-fun nincompoop_N : N;-fun ninefold_A : A;-fun ninefold_Adv : Adv;-fun ninepence_N : N;-fun ninepenny_A : A;-fun ninepins_N : N;-fun ninny_N : N;-fun ninth_A : A;-fun ninth_N : N;-fun niobe_PN : PN;-fun nip_N : N;-fun nip_V : V;-fun nip_V2 : V2;-fun nipper_N : N;-fun nipping_A : A;-fun nipple_N : N;-fun nipponese_A : A;-fun nippy_A : A;-fun nirvana_N : N;-fun nisi_A : A;-fun nissen_PN : PN;-fun nit_N : N;-fun nitrate_N : N;-fun nitre_N : N;-fun nitric_A : A;-fun nitrochalk_N : N;-fun nitrogen_N : N;-fun nitroglycerin_N : N;-fun nitroglycerine_N : N;-fun nitrous_A : A;-fun nitty_gritty_N : N;-fun nitwit_N : N;-fun nitwitted_A : A;-fun nix_N : N;-fun no_ball_N : N;-fun no_go_A : A;-fun no_man's_land_N : N;-fun noah_PN : PN;-fun nob_N : N;-fun nobble_V2 : V2;-fun nobel_PN : PN;-fun nobility_N : N;-fun noble_A : A;-fun noble_N : N;-fun noble_mindedness_N : N;-fun nobleman_N : N;-fun noblesse_N : N;-fun noblesse_oblige_N : N;-fun nobly_Adv : Adv;-fun noctambulist_N : N;-fun nocturnal_A : A;-fun nocturne_N : N;-fun nod_N : N;-fun nod_V : V;-fun nod_V2 : V2;-fun noddle_N : N;-fun node_N : N;-fun nodular_A : A;-fun nodulated_A : A;-fun nodule_N : N;-fun noel_N : N;-fun noel_PN : PN;-fun noggin_N : N;-fun nohow_Adv : Adv;-fun noise_N : N;-fun noise_V2 : V2;-fun noiseless_A : A;-fun noiselessly_Adv : Adv;-fun noiselessness_N : N;-fun noisily_Adv : Adv;-fun noisiness_N : N;-fun noisome_A : A;-fun noisy_A : A;-fun nom_de_plume_N : N;-fun nomad_N : N;-fun nomadic_A : A;-fun nomenclature_N : N;-fun nominal_A : A;-fun nominally_Adv : Adv;-fun nominate_V2 : V2;-fun nomination_N : N;-fun nominative_A : A;-fun nominative_N : N;-fun nominee_N : N;-fun non_compliance_N : N;-fun non_compos_mentis_A : A;-fun non_contentious_A : A;-fun non_interference_N : N;-fun non_sequitur_N : N;-fun non_skid_A : A;-fun non_u_A : A;-fun nonage_N : N;-fun nonagenarian_A : A;-fun nonagenarian_N : N;-fun nonaggression_N : N;-fun nonalignment_N : N;-fun nonce_N : N;-fun nonce_word_N : N;-fun nonchalance_N : N;-fun nonchalant_A : A;-fun nonchalantly_Adv : Adv;-fun noncombatant_N : N;-fun noncommissioned_A : A;-fun noncommittal_A : A;-fun nonconductor_N : N;-fun nonconformist_N : N;-fun nonconformity_N : N;-fun nondescript_A : A;-fun nondescript_N : N;-fun none_Adv : Adv;-fun nonentity_N : N;-fun nonesuch_N : N;-fun nonevent_N : N;-fun nonfiction_N : N;-fun nonflammable_A : A;-fun nonintervention_N : N;-fun nonmoral_A : A;-fun nonobservance_N : N;-fun nonpareil_A : A;-fun nonpareil_N : N;-fun nonpayment_N : N;-fun nonplus_V2 : V2;-fun nonresident_A : A;-fun nonsense_N : N;-fun nonsensical_A : A;-fun nonsmoker_N : N;-fun nonstarter_N : N;-fun nonstick_A : A;-fun nonstop_A : A;-fun nonstop_Adv : Adv;-fun nonsuch_N : N;-fun nonunion_A : A;-fun nonviolence_N : N;-fun noodle_N : N;-fun nook_N : N;-fun noon_N : N;-fun noonday_A : A;-fun noontide_N : N;-fun noose_N : N;-fun noose_V2 : V2;-fun nor'_east_Adv : Adv;-fun nor'_east_N : N;-fun nor'_nor'_east_Adv : Adv;-fun nor'_nor'_east_N : N;-fun nor'_nor'_west_Adv : Adv;-fun nor'_nor'_west_N : N;-fun nor'_west_Adv : Adv;-fun nor'_west_N : N;-fun nora_PN : PN;-fun nordic_A : A;-fun nordic_N : N;-fun norfolk_PN : PN;-fun norm_N : N;-fun normal_A : A;-fun normal_N : N;-fun normalcy_N : N;-fun normality_N : N;-fun normalization_N : N;-fun normalize_V2 : V2;-fun normally_Adv : Adv;-fun norman_A : A;-fun norman_N : N;-fun norman_PN : PN;-fun normanton_PN : PN;-fun normantown_PN : PN;-fun normative_A : A;-fun norse_A : A;-fun norse_N : N;-fun north_Adv : Adv;-fun north_N : N;-fun north_northeast_Adv : Adv;-fun north_northeast_N : N;-fun north_northwest_Adv : Adv;-fun north_northwest_N : N;-fun north_walsham_PN : PN;-fun northallerton_PN : PN;-fun northam_PN : PN;-fun northampton_PN : PN;-fun northamptonshire_PN : PN;-fun northeast_Adv : Adv;-fun northeast_N : N;-fun northeaster_N : N;-fun northeasterly_A : A;-fun northeastern_A : A;-fun northerly_A : A;-fun northerly_Adv : Adv;-fun northern_A : A;-fun northerner_N : N;-fun northernmost_A : A;-fun northman_N : N;-fun northumberland_PN : PN;-fun northwards_Adv : Adv;-fun northwest_Adv : Adv;-fun northwest_N : N;-fun northwester_N : N;-fun northwesterly_A : A;-fun northwestern_A : A;-fun northwich_PN : PN;-fun norton_PN : PN;-fun norway_PN : PN;-fun norwegian_A : A;-fun norwegian_N : N;-fun norwich_PN : PN;-fun nos_N : N;-fun nose_N : N;-fun nose_V : V;-fun nose_V2 : V2;-fun nose_flute_N : N;-fun nose_wheel_N : N;-fun nosebag_N : N;-fun nosebleed_N : N;-fun nosecone_N : N;-fun nosed_A : A;-fun nosedive_N : N;-fun nosedive_V : V;-fun nosegay_N : N;-fun nosering_N : N;-fun nosey_A : A;-fun nosh_N : N;-fun nosh_V : V;-fun nosh_up_N : N;-fun nostalgia_N : N;-fun nostalgic_A : A;-fun nostalgically_Adv : Adv;-fun nostril_N : N;-fun nostrum_N : N;-fun nosy_A : A;-fun not_Adv : Adv;-fun notability_N : N;-fun notable_A : A;-fun notable_N : N;-fun notably_Adv : Adv;-fun notary_N : N;-fun notation_N : N;-fun notch_N : N;-fun notch_V2 : V2;-fun note_N : N;-fun note_V2 : V2;-fun notebook_N : N;-fun notecase_N : N;-fun noted_A : A;-fun notepaper_N : N;-fun noteworthy_A : A;-fun nothing_Adv : Adv;-fun nothingness_N : N;-fun notice_N : N;-fun notice_V : V;-fun notice_V2 : V2;-fun notice_board_N : N;-fun noticeable_A : A;-fun noticeably_Adv : Adv;-fun notifiable_A : A;-fun notification_N : N;-fun notify_V2 : V2;-fun notion_N : N;-fun notional_A : A;-fun notoriety_N : N;-fun notorious_A : A;-fun notoriously_Adv : Adv;-fun nottingham_PN : PN;-fun nottinghamshire_PN : PN;-fun notwithstanding_Adv : Adv;-fun nougat_N : N;-fun nought_N : N;-fun noun_N : N;-fun nourish_V2 : V2;-fun nourishment_N : N;-fun nous_N : N;-fun nouveau_riche_N : N;-fun nov_PN : PN;-fun nova_N : N;-fun nova_scotia_PN : PN;-fun novara_PN : PN;-fun novel_A : A;-fun novel_N : N;-fun novelette_N : N;-fun novelist_N : N;-fun novelty_N : N;-fun november_N : N;-fun november_PN : PN;-fun novice_N : N;-fun noviciate_N : N;-fun novitiate_N : N;-fun novokuznetsk_PN : PN;-fun novosibirsk_PN : PN;-fun now_Adv : Adv;-fun nowadays_Adv : Adv;-fun nowhere_Adv : Adv;-fun nowise_Adv : Adv;-fun noxious_A : A;-fun noxiously_Adv : Adv;-fun noxiousness_N : N;-fun nozzle_N : N;-fun nr_PN : PN;-fun nspcc_N : N;-fun nt_N : N;-fun nuance_N : N;-fun nub_N : N;-fun nubile_A : A;-fun nuclear_A : A;-fun nucleic_A : A;-fun nucleus_N : N;-fun nude_A : A;-fun nude_N : N;-fun nudge_N : N;-fun nudge_V2 : V2;-fun nudism_N : N;-fun nudist_N : N;-fun nudity_N : N;-fun nugatory_A : A;-fun nugget_N : N;-fun nuisance_N : N;-fun null_A : A;-fun nullification_N : N;-fun nullify_V2 : V2;-fun nullity_N : N;-fun numb_A : A;-fun numb_V2 : V2;-fun number_N : N;-fun number_V2 : V2;-fun numberless_A : A;-fun numberplate_N : N;-fun numbly_Adv : Adv;-fun numbness_N : N;-fun numerable_A : A;-fun numeracy_N : N;-fun numeral_A : A;-fun numeral_N : N;-fun numerate_A : A;-fun numeration_N : N;-fun numerator_N : N;-fun numeric_A : A;-fun numerical_A : A;-fun numerically_Adv : Adv;-fun numerous_A : A;-fun numinous_A : A;-fun numismatics_N : N;-fun numismatist_N : N;-fun numskull_N : N;-fun nun_N : N;-fun nuncio_N : N;-fun nuneaton_PN : PN;-fun nunnery_N : N;-fun nuptial_A : A;-fun nurenburg_PN : PN;-fun nurse_N : N;-fun nurse_V2 : V2;-fun nurseling_N : N;-fun nursemaid_N : N;-fun nursery_N : N;-fun nurseryman_N : N;-fun nursing_home_N : N;-fun nursling_N : N;-fun nurture_N : N;-fun nurture_V2 : V2;-fun nut_N : N;-fun nut_V : V;-fun nut_brown_A : A;-fun nut_butter_N : N;-fun nuthouse_N : N;-fun nutmeg_N : N;-fun nutria_N : N;-fun nutrient_A : A;-fun nutrient_N : N;-fun nutriment_N : N;-fun nutrition_N : N;-fun nutritional_A : A;-fun nutritionally_Adv : Adv;-fun nutritious_A : A;-fun nutritive_A : A;-fun nuts_A : A;-fun nutshell_N : N;-fun nutty_A : A;-fun nuzzle_V : V;-fun nuzzle_V2 : V2;-fun nylon_N : N;-fun nymph_N : N;-fun nymphet_N : N;-fun nympho_N : N;-fun nymphomania_N : N;-fun nymphomaniac_A : A;-fun nymphomaniac_N : N;-fun nee_A : A;-fun neglige_N : N;-fun o'er_Adv : Adv;-fun o_level_N : N;-fun oaf_N : N;-fun oafish_A : A;-fun oak_N : N;-fun oak_apple_N : N;-fun oaken_A : A;-fun oakengates_PN : PN;-fun oakum_N : N;-fun oap's_N : N;-fun oap_N : N;-fun oar_N : N;-fun oarsman_N : N;-fun oarsmanship_N : N;-fun oarswoman_N : N;-fun oasis_N : N;-fun oast_N : N;-fun oasthouse_N : N;-fun oat_N : N;-fun oatcake_N : N;-fun oath_N : N;-fun oatmeal_N : N;-fun oau_N : N;-fun ob_PN : PN;-fun oban_PN : PN;-fun obbligato_N : N;-fun obduracy_N : N;-fun obdurate_A : A;-fun obdurately_Adv : Adv;-fun obedience_N : N;-fun obedient_A : A;-fun obediently_Adv : Adv;-fun obeisance_N : N;-fun obelisk_N : N;-fun oberhausen_PN : PN;-fun obese_A : A;-fun obesity_N : N;-fun obey_V : V;-fun obey_V2 : V2;-fun obfuscate_V2 : V2;-fun obi_N : N;-fun obiter_dictum_N : N;-fun obituary_N : N;-fun object_N : N;-fun object_V : V;-fun object_V2 : V2;-fun objection_N : N;-fun objectionable_A : A;-fun objectionably_Adv : Adv;-fun objective_A : A;-fun objective_N : N;-fun objectively_Adv : Adv;-fun objectivity_N : N;-fun objector_N : N;-fun objurgate_V2 : V2;-fun objurgation_N : N;-fun oblate_A : A;-fun oblation_N : N;-fun obligate_V2 : V2;-fun obligation_N : N;-fun obligatory_A : A;-fun oblige_V2 : V2;-fun obliging_A : A;-fun obligingly_Adv : Adv;-fun oblique_A : A;-fun obliquely_Adv : Adv;-fun obliquity_N : N;-fun obliterate_V2 : V2;-fun obliteration_N : N;-fun oblivion_N : N;-fun oblivious_A : A;-fun oblong_A : A;-fun oblong_N : N;-fun obloquy_N : N;-fun obnoxious_A : A;-fun obnoxiously_Adv : Adv;-fun obnoxiousness_N : N;-fun oboe_N : N;-fun oboist_N : N;-fun obscene_A : A;-fun obscenely_Adv : Adv;-fun obscenity_N : N;-fun obscurantism_N : N;-fun obscurantist_N : N;-fun obscure_A : A;-fun obscure_V2 : V2;-fun obscurely_Adv : Adv;-fun obscurity_N : N;-fun obsequious_A : A;-fun obsequiously_Adv : Adv;-fun obsequiousness_N : N;-fun observable_A : A;-fun observably_Adv : Adv;-fun observance_N : N;-fun observant_A : A;-fun observantly_Adv : Adv;-fun observation_N : N;-fun observatory_N : N;-fun observe_V : V;-fun observe_V2 : V2;-fun observer_N : N;-fun observing_A : A;-fun observingly_Adv : Adv;-fun obsess_V2 : V2;-fun obsession_N : N;-fun obsessional_A : A;-fun obsessionally_Adv : Adv;-fun obsessive_A : A;-fun obsessively_Adv : Adv;-fun obsidian_N : N;-fun obsolescence_N : N;-fun obsolescent_A : A;-fun obsolete_A : A;-fun obstacle_N : N;-fun obstetric_A : A;-fun obstetrical_A : A;-fun obstetrician_N : N;-fun obstetrics_N : N;-fun obstinacy_N : N;-fun obstinate_A : A;-fun obstinately_Adv : Adv;-fun obstreperous_A : A;-fun obstreperously_Adv : Adv;-fun obstreperousness_N : N;-fun obstruct_V2 : V2;-fun obstruction_N : N;-fun obstructionism_N : N;-fun obstructionist_N : N;-fun obstructive_A : A;-fun obstructively_Adv : Adv;-fun obtain_V : V;-fun obtain_V2 : V2;-fun obtainable_A : A;-fun obtrude_V : V;-fun obtrude_V2 : V2;-fun obtrusive_A : A;-fun obtrusively_Adv : Adv;-fun obtuse_A : A;-fun obtusely_Adv : Adv;-fun obtuseness_N : N;-fun obverse_N : N;-fun obviate_V2 : V2;-fun obvious_A : A;-fun obviously_Adv : Adv;-fun obviousness_N : N;-fun ocarina_N : N;-fun occasion_N : N;-fun occasion_V2 : V2;-fun occasional_A : A;-fun occasionally_Adv : Adv;-fun occident_PN : PN;-fun occidental_A : A;-fun occidental_N : N;-fun occult_A : A;-fun occult_N : N;-fun occupancy_N : N;-fun occupant_N : N;-fun occupation_N : N;-fun occupational_A : A;-fun occupier_N : N;-fun occupy_V2 : V2;-fun occur_V : V;-fun occurrence_N : N;-fun ocean_N : N;-fun oceanic_A : A;-fun ochre_N : N;-fun ockbrook_PN : PN;-fun ockendon_PN : PN;-fun oct_PN : PN;-fun octagon_N : N;-fun octagonal_A : A;-fun octane_N : N;-fun octave_N : N;-fun octavo_N : N;-fun octet_N : N;-fun octette_N : N;-fun october_N : N;-fun october_PN : PN;-fun octogenarian_A : A;-fun octogenarian_N : N;-fun octopus_N : N;-fun octroi_N : N;-fun ocular_A : A;-fun oculist_N : N;-fun odalisque_N : N;-fun odd_A : A;-fun odd_job_A : A;-fun oddity_N : N;-fun oddly_Adv : Adv;-fun oddment_N : N;-fun odds_on_A : A;-fun odds_on_Adv : Adv;-fun ode_N : N;-fun odessa_PN : PN;-fun odious_A : A;-fun odiously_Adv : Adv;-fun odium_N : N;-fun odoriferous_A : A;-fun odorous_A : A;-fun odour_N : N;-fun odourless_A : A;-fun odyssey_N : N;-fun oecd_N : N;-fun oecumenical_A : A;-fun oed_N : N;-fun oedipus_PN : PN;-fun oesophagus_N : N;-fun off_A : A;-fun off_Adv : Adv;-fun off_day_N : N;-fun off_licence_N : N;-fun off_peak_A : A;-fun off_putting_A : A;-fun off_street_A : A;-fun off_white_A : A;-fun offal_N : N;-fun offaly_PN : PN;-fun offbeat_A : A;-fun offenbach_PN : PN;-fun offence_N : N;-fun offenceless_A : A;-fun offend_V : V;-fun offend_V2 : V2;-fun offender_N : N;-fun offensive_A : A;-fun offensive_N : N;-fun offensively_Adv : Adv;-fun offensiveness_N : N;-fun offer_N : N;-fun offer_V : V;-fun offer_V2 : V2;-fun offering_N : N;-fun offertory_N : N;-fun offhand_A : A;-fun offhand_Adv : Adv;-fun offhanded_A : A;-fun offhanded_Adv : Adv;-fun offhandedly_A : A;-fun offhandedly_Adv : Adv;-fun office_N : N;-fun office_bearer_N : N;-fun office_block_N : N;-fun office_boy_N : N;-fun office_holder_N : N;-fun officer_N : N;-fun official_A : A;-fun official_N : N;-fun officialdom_N : N;-fun officialese_N : N;-fun officially_Adv : Adv;-fun officiate_V : V;-fun officious_A : A;-fun officiously_Adv : Adv;-fun officiousness_N : N;-fun offing_N : N;-fun offish_A : A;-fun offprint_N : N;-fun offset_N : N;-fun offset_V2 : V2;-fun offshoot_N : N;-fun offshore_A : A;-fun offside_A : A;-fun offside_Adv : Adv;-fun offspring_N : N;-fun offstage_A : A;-fun offstage_Adv : Adv;-fun oft_Adv : Adv;-fun oft_times_Adv : Adv;-fun often_Adv : Adv;-fun oftener_Adv : Adv;-fun ogle_V : V;-fun ogle_V2 : V2;-fun ogmore_valley_PN : PN;-fun ogre_N : N;-fun ogreish_A : A;-fun ogress_N : N;-fun ohio_PN : PN;-fun ohm_N : N;-fun oil_N : N;-fun oil_V2 : V2;-fun oil_bearing_A : A;-fun oil_burner_N : N;-fun oil_cake_N : N;-fun oil_painting_N : N;-fun oil_palm_N : N;-fun oil_paper_N : N;-fun oil_rig_N : N;-fun oil_silk_N : N;-fun oil_slick_N : N;-fun oil_tanker_N : N;-fun oil_well_N : N;-fun oilcan_N : N;-fun oilcloth_N : N;-fun oiled_A : A;-fun oiler_N : N;-fun oilfield_N : N;-fun oilfired_A : A;-fun oiliness_N : N;-fun oilskin_N : N;-fun oily_A : A;-fun ointment_N : N;-fun okapi_N : N;-fun okay_A : A;-fun okay_Adv : Adv;-fun okay_N : N;-fun okay_V2 : V2;-fun oklahoma_PN : PN;-fun oklahoma_city_PN : PN;-fun okra_N : N;-fun old_A : A;-fun old_N : N;-fun old_fashioned_A : A;-fun old_maidish_A : A;-fun old_time_A : A;-fun old_timer_N : N;-fun old_windsor_PN : PN;-fun old_womanish_A : A;-fun old_world_A : A;-fun olden_A : A;-fun oldenburg_PN : PN;-fun oldham_PN : PN;-fun oldish_A : A;-fun oldland_PN : PN;-fun oldster_N : N;-fun oleaginous_A : A;-fun oleander_N : N;-fun olfactory_A : A;-fun oligarch_N : N;-fun oligarchy_N : N;-fun olive_A : A;-fun olive_N : N;-fun olive_PN : PN;-fun olive_tree_N : N;-fun oliver_PN : PN;-fun olivia_PN : PN;-fun ollerton_PN : PN;-fun ollie_PN : PN;-fun olympiad_N : N;-fun olympian_A : A;-fun olympian_N : N;-fun olympic_A : A;-fun olympics_PN : PN;-fun oman_PN : PN;-fun omani_A : A;-fun omani_N : N;-fun ombudsman_N : N;-fun omega_N : N;-fun omelet_N : N;-fun omelette_N : N;-fun omen_N : N;-fun omen_V2 : V2;-fun ominous_A : A;-fun ominously_Adv : Adv;-fun omission_N : N;-fun omit_V2 : V2;-fun omnibus_N : N;-fun omnipotence_N : N;-fun omnipotent_A : A;-fun omniscience_N : N;-fun omniscient_A : A;-fun omnivorous_A : A;-fun omsk_PN : PN;-fun on_Adv : Adv;-fun on_licence_N : N;-fun once_Adv : Adv;-fun oncoming_A : A;-fun oncoming_N : N;-fun one_armed_A : A;-fun one_eyed_A : A;-fun one_horse_A : A;-fun one_idea'd_A : A;-fun one_sided_A : A;-fun one_step_N : N;-fun one_time_A : A;-fun one_upmanship_N : N;-fun oneness_N : N;-fun onerous_A : A;-fun onerously_Adv : Adv;-fun ongar_PN : PN;-fun ongoing_A : A;-fun onion_N : N;-fun onlooker_N : N;-fun only_A : A;-fun only_Adv : Adv;-fun onomatopoeia_N : N;-fun onrush_N : N;-fun onset_N : N;-fun onshore_A : A;-fun onshore_Adv : Adv;-fun onslaught_N : N;-fun ontario_PN : PN;-fun ontology_N : N;-fun onus_N : N;-fun onward_A : A;-fun onward_Adv : Adv;-fun onwards_Adv : Adv;-fun onyx_N : N;-fun oomph_N : N;-fun ooze_N : N;-fun ooze_V : V;-fun ooze_V2 : V2;-fun oozy_A : A;-fun op_PN : PN;-fun op_art_N : N;-fun op_cit_PN : PN;-fun opacity_N : N;-fun opal_N : N;-fun opalescent_A : A;-fun opaque_A : A;-fun opaquely_Adv : Adv;-fun opaqueness_N : N;-fun opec_PN : PN;-fun open_A : A;-fun open_N : N;-fun open_V : V;-fun open_V2 : V2;-fun open_air_A : A;-fun open_ended_A : A;-fun open_eyed_A : A;-fun open_handed_A : A;-fun open_hearted_A : A;-fun open_minded_A : A;-fun open_mouthed_A : A;-fun opencast_A : A;-fun opener_N : N;-fun opening_A : A;-fun opening_N : N;-fun openly_Adv : Adv;-fun openness_N : N;-fun openwork_N : N;-fun opera_N : N;-fun opera_cloak_N : N;-fun opera_hat_N : N;-fun opera_house_N : N;-fun operable_A : A;-fun operate_V : V;-fun operate_V2 : V2;-fun operatic_A : A;-fun operating_table_N : N;-fun operating_theatre_N : N;-fun operation_N : N;-fun operational_A : A;-fun operative_A : A;-fun operative_N : N;-fun operator_N : N;-fun operetta_N : N;-fun ophthalmia_N : N;-fun ophthalmic_A : A;-fun ophthalmoscope_N : N;-fun opiate_N : N;-fun opine_V2 : V2;-fun opinion_N : N;-fun opinionated_A : A;-fun opinionative_A : A;-fun opium_N : N;-fun opium_den_N : N;-fun opossum_N : N;-fun opp_PN : PN;-fun opponent_N : N;-fun opportune_A : A;-fun opportunely_Adv : Adv;-fun opportunism_N : N;-fun opportunist_N : N;-fun opportunity_N : N;-fun oppose_V2 : V2;-fun opposite_A : A;-fun opposite_N : N;-fun opposition_N : N;-fun oppress_V2 : V2;-fun oppression_N : N;-fun oppressive_A : A;-fun oppressively_Adv : Adv;-fun oppressor_N : N;-fun opprobrious_A : A;-fun opprobriously_Adv : Adv;-fun opprobrium_N : N;-fun oppugn_V2 : V2;-fun opt_V : V;-fun optative_A : A;-fun optative_N : N;-fun optic_A : A;-fun optical_A : A;-fun optically_Adv : Adv;-fun optician_N : N;-fun optics_N : N;-fun optimal_A : A;-fun optimally_Adv : Adv;-fun optimism_N : N;-fun optimist_N : N;-fun optimistic_A : A;-fun optimistically_Adv : Adv;-fun optimum_N : N;-fun option_N : N;-fun optional_A : A;-fun optionally_Adv : Adv;-fun opulence_N : N;-fun opulent_A : A;-fun opulently_Adv : Adv;-fun opus_N : N;-fun oracle_N : N;-fun oracular_A : A;-fun oral_A : A;-fun oral_N : N;-fun orally_Adv : Adv;-fun orang_outan_N : N;-fun orang_outang_N : N;-fun orang_utan_N : N;-fun orange_A : A;-fun orange_N : N;-fun orangeade_N : N;-fun orangeman_N : N;-fun orate_V : V;-fun oration_N : N;-fun orator_N : N;-fun oratorical_A : A;-fun oratorio_N : N;-fun oratory_N : N;-fun orb_N : N;-fun orbit_N : N;-fun orbit_V : V;-fun orbit_V2 : V2;-fun orbital_A : A;-fun orchard_N : N;-fun orchestra_N : N;-fun orchestral_A : A;-fun orchestrate_V2 : V2;-fun orchestration_N : N;-fun orchid_N : N;-fun orchis_N : N;-fun ordain_V2 : V2;-fun ordeal_N : N;-fun order_N : N;-fun order_V2 : V2;-fun order_book_N : N;-fun order_form_N : N;-fun order_paper_N : N;-fun ordering_N : N;-fun orderliness_N : N;-fun orderly_A : A;-fun orderly_N : N;-fun ordinal_A : A;-fun ordinal_N : N;-fun ordinance_N : N;-fun ordinand_N : N;-fun ordinarily_Adv : Adv;-fun ordinary_A : A;-fun ordination_N : N;-fun ordnance_N : N;-fun ordure_N : N;-fun ore_N : N;-fun oregon_PN : PN;-fun organ_N : N;-fun organ_blower_N : N;-fun organ_grinder_N : N;-fun organ_loft_N : N;-fun organdie_N : N;-fun organic_A : A;-fun organically_Adv : Adv;-fun organism_N : N;-fun organist_N : N;-fun organization_N : N;-fun organizational_A : A;-fun organizationally_Adv : Adv;-fun organize_V2 : V2;-fun organized_A : A;-fun organizer_N : N;-fun orgasm_N : N;-fun orgiastic_A : A;-fun orgy_N : N;-fun oriel_N : N;-fun orient_A : A;-fun orient_N : N;-fun orient_V2 : V2;-fun oriental_A : A;-fun oriental_N : N;-fun orientalist_N : N;-fun orientate_V2 : V2;-fun orientation_N : N;-fun orifice_N : N;-fun origin_N : N;-fun original_A : A;-fun original_N : N;-fun originality_N : N;-fun originally_Adv : Adv;-fun originate_V : V;-fun originate_V2 : V2;-fun originator_N : N;-fun oriole_N : N;-fun orison_N : N;-fun orkney_PN : PN;-fun orleans_PN : PN;-fun orlop_N : N;-fun ormolu_N : N;-fun ormskirk_PN : PN;-fun ornament_N : N;-fun ornament_V2 : V2;-fun ornamental_A : A;-fun ornamentation_N : N;-fun ornate_A : A;-fun ornately_Adv : Adv;-fun ornateness_N : N;-fun ornery_A : A;-fun ornithological_A : A;-fun ornithologist_N : N;-fun ornithology_N : N;-fun orotund_A : A;-fun orphan_N : N;-fun orphan_V2 : V2;-fun orphanage_N : N;-fun orrisroot_N : N;-fun orthodontic_A : A;-fun orthodontics_N : N;-fun orthodontist_N : N;-fun orthodox_A : A;-fun orthodoxy_N : N;-fun orthogonal_A : A;-fun orthogonally_Adv : Adv;-fun orthographic_A : A;-fun orthography_N : N;-fun orthopaedic_A : A;-fun orthopaedics_N : N;-fun orthopedic_A : A;-fun orthopedics_N : N;-fun ortolan_N : N;-fun oryx_N : N;-fun osaka_PN : PN;-fun oscar_N : N;-fun oscar_PN : PN;-fun oscillate_V : V;-fun oscillate_V2 : V2;-fun oscillation_N : N;-fun oscillator_N : N;-fun oscillograph_N : N;-fun oscilloscope_N : N;-fun osier_N : N;-fun oslo_PN : PN;-fun osnabruck_PN : PN;-fun osprey_N : N;-fun osseous_A : A;-fun ossett_PN : PN;-fun ossification_N : N;-fun ossify_V : V;-fun ossify_V2 : V2;-fun ostensible_A : A;-fun ostensibly_Adv : Adv;-fun ostentation_N : N;-fun ostentatious_A : A;-fun ostentatiously_Adv : Adv;-fun osteopath_N : N;-fun osteopathy_N : N;-fun ostler_N : N;-fun ostracism_N : N;-fun ostracize_V2 : V2;-fun ostrich_N : N;-fun oswald_PN : PN;-fun oswestry_PN : PN;-fun ot_N : N;-fun otago_PN : PN;-fun other_A : A;-fun other_Adv : Adv;-fun other_N : N;-fun otherwise_Adv : Adv;-fun otherworldly_A : A;-fun otiose_A : A;-fun otley_PN : PN;-fun ottawa_PN : PN;-fun otter_N : N;-fun ottoman_N : N;-fun oubliette_N : N;-fun ouija_N : N;-fun ouija_board_N : N;-fun ounce_N : N;-fun oust_V2 : V2;-fun out_Adv : Adv;-fun out_V2 : V2;-fun out_herod_V2 : V2;-fun out_of_date_A : A;-fun out_of_door_A : A;-fun out_of_doors_Adv : Adv;-fun out_of_the_way_A : A;-fun out_of_the_way_Adv : Adv;-fun out_of_work_A : A;-fun out_tray_N : N;-fun outback_A : A;-fun outback_N : N;-fun outbalance_V2 : V2;-fun outbid_V2 : V2;-fun outboard_A : A;-fun outbound_A : A;-fun outbrave_V2 : V2;-fun outbreak_N : N;-fun outbuilding_N : N;-fun outburst_N : N;-fun outcast_A : A;-fun outcast_N : N;-fun outcaste_A : A;-fun outcaste_N : N;-fun outclass_V2 : V2;-fun outcome_N : N;-fun outcrop_N : N;-fun outcry_N : N;-fun outdated_A : A;-fun outdistance_V2 : V2;-fun outdo_V2 : V2;-fun outdoor_A : A;-fun outdoors_Adv : Adv;-fun outer_A : A;-fun outermost_A : A;-fun outface_V2 : V2;-fun outfall_N : N;-fun outfield_N : N;-fun outfielder_N : N;-fun outfight_V2 : V2;-fun outfit_N : N;-fun outfit_V2 : V2;-fun outfitter_N : N;-fun outflank_V2 : V2;-fun outflow_N : N;-fun outfox_V2 : V2;-fun outgo_N : N;-fun outgo_V : V;-fun outgoing_A : A;-fun outgrow_V2 : V2;-fun outgrowth_N : N;-fun outhouse_N : N;-fun outing_N : N;-fun outlandish_A : A;-fun outlandishly_Adv : Adv;-fun outlandishness_N : N;-fun outlast_V2 : V2;-fun outlaw_N : N;-fun outlaw_V2 : V2;-fun outlawry_N : N;-fun outlay_N : N;-fun outlet_N : N;-fun outlier_N : N;-fun outline_N : N;-fun outline_V2 : V2;-fun outlive_V2 : V2;-fun outlook_N : N;-fun outlying_A : A;-fun outmanoeuvre_V2 : V2;-fun outmarch_V2 : V2;-fun outmatch_V2 : V2;-fun outmoded_A : A;-fun outmost_A : A;-fun outnumber_V2 : V2;-fun outpatient_N : N;-fun outplay_V2 : V2;-fun outpoint_V2 : V2;-fun outport_N : N;-fun outpost_N : N;-fun outpouring_N : N;-fun output_N : N;-fun outrage_N : N;-fun outrage_V2 : V2;-fun outrageous_A : A;-fun outrageously_Adv : Adv;-fun outrange_V2 : V2;-fun outrank_V2 : V2;-fun outride_V2 : V2;-fun outrider_N : N;-fun outrigged_A : A;-fun outrigger_N : N;-fun outright_A : A;-fun outright_Adv : Adv;-fun outrival_V2 : V2;-fun outrun_V2 : V2;-fun outre_A : A;-fun outsail_V2 : V2;-fun outset_N : N;-fun outshine_V2 : V2;-fun outside_A : A;-fun outside_Adv : Adv;-fun outside_N : N;-fun outsider_N : N;-fun outsize_A : A;-fun outsmart_V2 : V2;-fun outspan_V : V;-fun outspan_V2 : V2;-fun outspoken_A : A;-fun outspokenly_Adv : Adv;-fun outspokenness_N : N;-fun outspread_A : A;-fun outstanding_A : A;-fun outstandingly_Adv : Adv;-fun outstation_N : N;-fun outstay_V2 : V2;-fun outstretched_A : A;-fun outstrip_V2 : V2;-fun outvie_V2 : V2;-fun outvote_V2 : V2;-fun outward_A : A;-fun outward_Adv : Adv;-fun outwardly_Adv : Adv;-fun outwards_Adv : Adv;-fun outwear_V2 : V2;-fun outweigh_V2 : V2;-fun outwit_V2 : V2;-fun outwork_N : N;-fun ouzel_N : N;-fun ouzo_N : N;-fun oval_A : A;-fun oval_N : N;-fun ovary_N : N;-fun ovation_N : N;-fun oven_N : N;-fun ovenware_N : N;-fun over_Adv : Adv;-fun over_N : N;-fun over_abundance_N : N;-fun over_ripe_A : A;-fun overabundant_A : A;-fun overact_V : V;-fun overact_V2 : V2;-fun overactive_A : A;-fun overall_A : A;-fun overall_N : N;-fun overambitious_A : A;-fun overanxiety_N : N;-fun overanxious_A : A;-fun overarch_V : V;-fun overarch_V2 : V2;-fun overarm_A : A;-fun overarm_Adv : Adv;-fun overawe_V2 : V2;-fun overbalance_V : V;-fun overbalance_V2 : V2;-fun overbear_V2 : V2;-fun overbearing_A : A;-fun overbearingly_Adv : Adv;-fun overbid_N : N;-fun overbid_V : V;-fun overbid_V2 : V2;-fun overblown_A : A;-fun overboard_Adv : Adv;-fun overbold_A : A;-fun overburden_N : N;-fun overburden_V2 : V2;-fun overbusy_A : A;-fun overcall_V : V;-fun overcall_V2 : V2;-fun overcapitalization_N : N;-fun overcapitalize_V2 : V2;-fun overcareful_A : A;-fun overcast_A : A;-fun overcast_N : N;-fun overcautious_A : A;-fun overcharge_N : N;-fun overcharge_V : V;-fun overcharge_V2 : V2;-fun overclothe_V2 : V2;-fun overcloud_V : V;-fun overcloud_V2 : V2;-fun overcoat_N : N;-fun overcome_V2 : V2;-fun overconfidence_N : N;-fun overconfident_A : A;-fun overcook_V2 : V2;-fun overcredulity_N : N;-fun overcredulous_A : A;-fun overcritical_A : A;-fun overcrop_V2 : V2;-fun overcrowd_V2 : V2;-fun overcurious_A : A;-fun overdelicate_A : A;-fun overdo_V2 : V2;-fun overdraft_N : N;-fun overdraw_V : V;-fun overdraw_V2 : V2;-fun overdress_V : V;-fun overdress_V2 : V2;-fun overdrive_N : N;-fun overdue_A : A;-fun overeager_A : A;-fun overeat_V : V;-fun overemotional_A : A;-fun overemphasis_N : N;-fun overemphasize_V2 : V2;-fun overenthusiastic_A : A;-fun overestimate_V2 : V2;-fun overexcited_A : A;-fun overexert_V2 : V2;-fun overexertion_N : N;-fun overexpose_V2 : V2;-fun overexposure_N : N;-fun overfamiliar_A : A;-fun overfeed_V : V;-fun overfeed_V2 : V2;-fun overfeeding_N : N;-fun overflow_N : N;-fun overflow_V : V;-fun overflow_V2 : V2;-fun overfly_V2 : V2;-fun overfond_A : A;-fun overfull_A : A;-fun overgenerous_A : A;-fun overgreedy_A : A;-fun overgrown_A : A;-fun overgrowth_N : N;-fun overhand_A : A;-fun overhang_N : N;-fun overhang_V : V;-fun overhang_V2 : V2;-fun overhasty_A : A;-fun overhaul_N : N;-fun overhaul_V2 : V2;-fun overhead_A : A;-fun overhead_Adv : Adv;-fun overhear_V2 : V2;-fun overheat_V2 : V2;-fun overindulge_V : V;-fun overindulge_V2 : V2;-fun overindulgence_N : N;-fun overjealous_A : A;-fun overjoyed_A : A;-fun overkill_N : N;-fun overladen_A : A;-fun overland_A : A;-fun overlap_N : N;-fun overlap_V : V;-fun overlap_V2 : V2;-fun overlarge_A : A;-fun overlay_N : N;-fun overlay_V2 : V2;-fun overleaf_Adv : Adv;-fun overleap_V2 : V2;-fun overlie_V : V;-fun overload_V2 : V2;-fun overlook_V2 : V2;-fun overlord_N : N;-fun overly_Adv : Adv;-fun overmantel_N : N;-fun overmaster_V2 : V2;-fun overmodest_A : A;-fun overmuch_A : A;-fun overmuch_Adv : Adv;-fun overnervous_A : A;-fun overnight_A : A;-fun overnight_Adv : Adv;-fun overpass_N : N;-fun overpay_V2 : V2;-fun overpayment_N : N;-fun overplay_V2 : V2;-fun overplus_N : N;-fun overpopulation_N : N;-fun overpower_V2 : V2;-fun overpowering_A : A;-fun overpraise_V2 : V2;-fun overprint_N : N;-fun overprint_V2 : V2;-fun overproduce_V : V;-fun overproduce_V2 : V2;-fun overproduction_N : N;-fun overproud_A : A;-fun overrate_V2 : V2;-fun overreach_V2 : V2;-fun override_V2 : V2;-fun overripe_A : A;-fun overrule_V2 : V2;-fun overrun_V2 : V2;-fun oversea_A : A;-fun oversea_Adv : Adv;-fun overseas_A : A;-fun overseas_Adv : Adv;-fun oversee_V2 : V2;-fun overseer_N : N;-fun oversensitive_A : A;-fun overserious_A : A;-fun oversew_V2 : V2;-fun oversewn_A : A;-fun oversexed_A : A;-fun overshadow_V2 : V2;-fun overshoe_N : N;-fun overshoot_V2 : V2;-fun overshot_A : A;-fun overside_Adv : Adv;-fun oversight_N : N;-fun oversimplify_V2 : V2;-fun oversize_A : A;-fun overskirt_N : N;-fun oversleep_V : V;-fun overspend_V : V;-fun overspend_V2 : V2;-fun overspill_N : N;-fun overstate_V2 : V2;-fun overstatement_N : N;-fun overstay_V2 : V2;-fun overstep_V2 : V2;-fun overstock_V2 : V2;-fun overstrain_N : N;-fun overstrain_V2 : V2;-fun overstrung_A : A;-fun overstuffed_A : A;-fun oversubscribed_A : A;-fun oversuspicious_A : A;-fun overt_A : A;-fun overtake_V2 : V2;-fun overtax_V2 : V2;-fun overthrow_N : N;-fun overthrow_V2 : V2;-fun overtime_Adv : Adv;-fun overtime_N : N;-fun overtly_Adv : Adv;-fun overtolerance_N : N;-fun overtone_N : N;-fun overtop_V2 : V2;-fun overtrump_V2 : V2;-fun overture_N : N;-fun overturn_V : V;-fun overturn_V2 : V2;-fun overvalue_V2 : V2;-fun overweening_A : A;-fun overweight_A : A;-fun overweight_N : N;-fun overweighted_A : A;-fun overwhelm_V2 : V2;-fun overwhelmingly_Adv : Adv;-fun overwork_N : N;-fun overwork_V : V;-fun overwork_V2 : V2;-fun overwrought_A : A;-fun overzealous_A : A;-fun oviduct_N : N;-fun oviedo_PN : PN;-fun oviparous_A : A;-fun ovoid_A : A;-fun ovoid_N : N;-fun ovum_N : N;-fun owe_V : V;-fun owe_V2 : V2;-fun owing_A : A;-fun owl_N : N;-fun owlet_N : N;-fun owlish_A : A;-fun owlishly_Adv : Adv;-fun own_A : A;-fun own_V : V;-fun own_V2 : V2;-fun owner_N : N;-fun owner_driven_A : A;-fun owner_driver_N : N;-fun owner_occupied_A : A;-fun owner_occupier_N : N;-fun ownerless_A : A;-fun ownership_N : N;-fun ox_N : N;-fun oxbridge_PN : PN;-fun oxeye_N : N;-fun oxeyed_A : A;-fun oxford_PN : PN;-fun oxfordshire_PN : PN;-fun oxidation_N : N;-fun oxide_N : N;-fun oxidization_N : N;-fun oxidize_V : V;-fun oxidize_V2 : V2;-fun oxon_PN : PN;-fun oxonian_A : A;-fun oxonian_N : N;-fun oxtail_N : N;-fun oxted_PN : PN;-fun oxyacetylene_A : A;-fun oxyacetylene_N : N;-fun oxygen_N : N;-fun oxygenate_V2 : V2;-fun oxygenize_V2 : V2;-fun oyster_N : N;-fun oyster_bank_N : N;-fun oyster_bar_N : N;-fun oyster_bed_N : N;-fun oyster_catcher_N : N;-fun oz_N : N;-fun ozone_N : N;-fun ozzie_PN : PN;-fun pa_N : N;-fun pabulum_N : N;-fun pace_N : N;-fun pace_V : V;-fun pace_V2 : V2;-fun pacemaker_N : N;-fun pacesetter_N : N;-fun pachyderm_N : N;-fun pacific_A : A;-fun pacific_PN : PN;-fun pacifically_Adv : Adv;-fun pacification_N : N;-fun pacifism_N : N;-fun pacifist_N : N;-fun pacify_V2 : V2;-fun pack_N : N;-fun pack_V : V;-fun pack_V2 : V2;-fun pack_animal_N : N;-fun pack_saddle_N : N;-fun pack_thread_N : N;-fun package_N : N;-fun package_V2 : V2;-fun packer_N : N;-fun packet_N : N;-fun packet_boat_N : N;-fun packhorse_N : N;-fun packing_N : N;-fun packing_case_N : N;-fun packing_needle_N : N;-fun pact_N : N;-fun pad_N : N;-fun pad_V : V;-fun pad_V2 : V2;-fun padding_N : N;-fun paddle_N : N;-fun paddle_V : V;-fun paddle_V2 : V2;-fun paddle_box_N : N;-fun paddle_steamer_N : N;-fun paddle_wheel_N : N;-fun paddock_N : N;-fun paddy_N : N;-fun paddy_PN : PN;-fun paddy_field_N : N;-fun paddy_wagon_N : N;-fun padlock_N : N;-fun padlock_V2 : V2;-fun padova_PN : PN;-fun padre_N : N;-fun padua_PN : PN;-fun paean_N : N;-fun paederasty_N : N;-fun paediatrics_N : N;-fun paeony_N : N;-fun pagan_A : A;-fun pagan_N : N;-fun paganism_N : N;-fun page_N : N;-fun page_V2 : V2;-fun pageant_N : N;-fun pageantry_N : N;-fun pagination_N : N;-fun pagoda_N : N;-fun pail_N : N;-fun pailful_N : N;-fun paillasse_N : N;-fun pailliasse_N : N;-fun pain_N : N;-fun pain_V2 : V2;-fun pained_A : A;-fun painful_A : A;-fun painfully_Adv : Adv;-fun painkiller_N : N;-fun painless_A : A;-fun painlessly_Adv : Adv;-fun painstaking_A : A;-fun painstakingly_Adv : Adv;-fun paint_N : N;-fun paint_V : V;-fun paint_V2 : V2;-fun paintbox_N : N;-fun paintbrush_N : N;-fun painter_N : N;-fun painting_N : N;-fun pair_N : N;-fun pair_V : V;-fun pair_V2 : V2;-fun paisley_N : N;-fun paisley_PN : PN;-fun pakistan_PN : PN;-fun pakistani_A : A;-fun pakistani_N : N;-fun pal_N : N;-fun pal_V : V;-fun palace_N : N;-fun paladin_N : N;-fun palaeolithic_A : A;-fun palaeontologist_N : N;-fun palaeontology_N : N;-fun palankeen_N : N;-fun palanquin_N : N;-fun palatable_A : A;-fun palatably_Adv : Adv;-fun palatal_A : A;-fun palatal_N : N;-fun palate_N : N;-fun palatial_A : A;-fun palatinate_N : N;-fun palaver_N : N;-fun palaver_V : V;-fun pale_A : A;-fun pale_N : N;-fun pale_V : V;-fun paleface_N : N;-fun palely_Adv : Adv;-fun palembang_PN : PN;-fun paleness_N : N;-fun paleolithic_A : A;-fun paleontologist_N : N;-fun paleontology_N : N;-fun palermo_PN : PN;-fun palestine_PN : PN;-fun palestinian_A : A;-fun palestinian_N : N;-fun palette_N : N;-fun palette_knife_N : N;-fun palfrey_N : N;-fun palimpsest_N : N;-fun palindrome_N : N;-fun paling_N : N;-fun palisade_N : N;-fun palisade_V2 : V2;-fun palish_A : A;-fun pall_N : N;-fun pall_V : V;-fun pallbearer_N : N;-fun pallet_N : N;-fun palliasse_N : N;-fun palliate_V2 : V2;-fun palliation_N : N;-fun palliative_A : A;-fun palliative_N : N;-fun pallid_A : A;-fun pallidly_Adv : Adv;-fun pallidness_N : N;-fun pallor_N : N;-fun pally_A : A;-fun palm_N : N;-fun palm_V2 : V2;-fun palm_oil_N : N;-fun palmer_N : N;-fun palmetto_N : N;-fun palmist_N : N;-fun palmistry_N : N;-fun palmy_A : A;-fun palpable_A : A;-fun palpably_Adv : Adv;-fun palpitate_V : V;-fun palpitation_N : N;-fun palsy_N : N;-fun palsy_V2 : V2;-fun palter_V : V;-fun paltry_A : A;-fun pam_PN : PN;-fun pamela_PN : PN;-fun pampas_grass_N : N;-fun pamper_V2 : V2;-fun pamphlet_N : N;-fun pamphleteer_N : N;-fun pamplona_PN : PN;-fun pan_N : N;-fun pan_V : V;-fun pan_V2 : V2;-fun panacea_N : N;-fun panache_N : N;-fun panama_N : N;-fun panama_PN : PN;-fun panamanian_A : A;-fun panamanian_N : N;-fun panatella_N : N;-fun pancake_N : N;-fun panchromatic_A : A;-fun pancreas_N : N;-fun pancreatic_A : A;-fun panda_N : N;-fun pandemic_A : A;-fun pandemic_N : N;-fun pandemonium_N : N;-fun pander_N : N;-fun pander_V : V;-fun pane_N : N;-fun panegyric_N : N;-fun panel_N : N;-fun panel_V2 : V2;-fun panelling_N : N;-fun pang_N : N;-fun panga_N : N;-fun panhandle_N : N;-fun panhandle_V : V;-fun panic_N : N;-fun panic_V : V;-fun panic_stricken_A : A;-fun panicky_A : A;-fun panjandrum_N : N;-fun pannier_N : N;-fun pannikin_N : N;-fun panoplied_A : A;-fun panoply_N : N;-fun panoptic_A : A;-fun panorama_N : N;-fun panoramic_A : A;-fun pansy_N : N;-fun pant_N : N;-fun pant_V : V;-fun pant_V2 : V2;-fun pantaloon_N : N;-fun pantechnicon_N : N;-fun pantheism_N : N;-fun pantheist_N : N;-fun pantheistic_A : A;-fun pantheon_N : N;-fun panther_N : N;-fun pantile_N : N;-fun pantingly_Adv : Adv;-fun panto_N : N;-fun pantograph_N : N;-fun pantomime_N : N;-fun pantry_N : N;-fun pantryman_N : N;-fun panty_hose_N : N;-fun panzer_A : A;-fun paotow_PN : PN;-fun pap_N : N;-fun papa_N : N;-fun papacy_N : N;-fun papal_A : A;-fun papaw_N : N;-fun papaya_N : N;-fun paper_N : N;-fun paper_V2 : V2;-fun paper_chase_N : N;-fun paperback_N : N;-fun paperbacked_A : A;-fun paperclip_N : N;-fun paperhanger_N : N;-fun paperknife_N : N;-fun paperless_A : A;-fun papermill_N : N;-fun paperweight_N : N;-fun paperwork_N : N;-fun papier_mache_N : N;-fun papist_A : A;-fun papist_N : N;-fun papoose_N : N;-fun paprika_N : N;-fun papua_PN : PN;-fun papuan_A : A;-fun papuan_N : N;-fun papyrus_N : N;-fun par_N : N;-fun par_excellence_Adv : Adv;-fun para_N : N;-fun parable_N : N;-fun parabola_N : N;-fun parabolic_A : A;-fun parabolical_A : A;-fun parachute_N : N;-fun parachute_V : V;-fun parachute_V2 : V2;-fun parachutist_N : N;-fun parade_N : N;-fun parade_V : V;-fun parade_V2 : V2;-fun parade_ground_N : N;-fun paradigm_N : N;-fun paradise_N : N;-fun paradisiac_A : A;-fun paradisiacal_A : A;-fun paradox_N : N;-fun paradoxical_A : A;-fun paradoxically_Adv : Adv;-fun paraffin_N : N;-fun paragon_N : N;-fun paragraph_N : N;-fun paragraph_V2 : V2;-fun paraguay_PN : PN;-fun paraguayan_A : A;-fun paraguayan_N : N;-fun parakeet_N : N;-fun parallel_A : A;-fun parallel_N : N;-fun parallel_V2 : V2;-fun parallelism_N : N;-fun parallelogram_N : N;-fun paralyse_V2 : V2;-fun paralysis_N : N;-fun paralytic_A : A;-fun paralytic_N : N;-fun paralyze_V2 : V2;-fun parameter_N : N;-fun paramilitary_A : A;-fun paramount_A : A;-fun paramountcy_N : N;-fun paramour_N : N;-fun paranoia_N : N;-fun paranoiac_N : N;-fun paranoid_A : A;-fun paranoid_N : N;-fun parapet_N : N;-fun paraphernalia_N : N;-fun paraphrase_V2 : V2;-fun paraplegia_N : N;-fun paraplegic_A : A;-fun paraplegic_N : N;-fun parasite_N : N;-fun parasitic_A : A;-fun parasitical_A : A;-fun parasol_N : N;-fun paratrooper_N : N;-fun paratyphoid_N : N;-fun parboil_V2 : V2;-fun parcel_N : N;-fun parcel_V2 : V2;-fun parch_V2 : V2;-fun parchment_N : N;-fun pardon_N : N;-fun pardon_V2 : V2;-fun pardonable_A : A;-fun pardonably_Adv : Adv;-fun pardoner_N : N;-fun pare_V2 : V2;-fun paregoric_N : N;-fun parent_N : N;-fun parentage_N : N;-fun parental_A : A;-fun parentally_Adv : Adv;-fun parenthesis_N : N;-fun parenthetic_A : A;-fun parenthetical_A : A;-fun parenthetically_Adv : Adv;-fun pari_mutuel_N : N;-fun pari_passu_Adv : Adv;-fun pariah_N : N;-fun pariah_dog_N : N;-fun paris_PN : PN;-fun parish_N : N;-fun parishioner_N : N;-fun parisian_A : A;-fun parisian_N : N;-fun parity_N : N;-fun park_N : N;-fun park_V : V;-fun park_V2 : V2;-fun parka_N : N;-fun parking_N : N;-fun parkinson's_A : A;-fun parky_A : A;-fun parlance_N : N;-fun parley_N : N;-fun parley_V : V;-fun parliament_N : N;-fun parliamentarian_N : N;-fun parliamentary_A : A;-fun parlour_N : N;-fun parlour_car_N : N;-fun parlous_A : A;-fun parma_PN : PN;-fun parmesan_N : N;-fun parochial_A : A;-fun parochialism_N : N;-fun parochially_Adv : Adv;-fun parodist_N : N;-fun parody_N : N;-fun parody_V2 : V2;-fun parole_N : N;-fun parole_V2 : V2;-fun paroquet_N : N;-fun paroxysm_N : N;-fun parquet_N : N;-fun parr_N : N;-fun parricide_N : N;-fun parrot_N : N;-fun parry_N : N;-fun parry_V2 : V2;-fun parse_V2 : V2;-fun parsee_N : N;-fun parsimonious_A : A;-fun parsimony_N : N;-fun parsley_N : N;-fun parsnip_N : N;-fun parson_N : N;-fun parsonage_N : N;-fun part_Adv : Adv;-fun part_N : N;-fun part_V : V;-fun part_V2 : V2;-fun part_owner_N : N;-fun part_singing_N : N;-fun part_song_N : N;-fun part_time_A : A;-fun part_time_Adv : Adv;-fun part_timer_N : N;-fun partake_V : V;-fun partake_V2 : V2;-fun parterre_N : N;-fun parthenogenesis_N : N;-fun parthian_A : A;-fun parti_coloured_A : A;-fun partial_A : A;-fun partiality_N : N;-fun partially_Adv : Adv;-fun participant_N : N;-fun participate_V : V;-fun participation_N : N;-fun participial_A : A;-fun participle_N : N;-fun particle_N : N;-fun particular_A : A;-fun particular_N : N;-fun particularity_N : N;-fun particularize_V : V;-fun particularize_V2 : V2;-fun particularly_Adv : Adv;-fun parting_N : N;-fun partisan_A : A;-fun partisan_N : N;-fun partisanship_N : N;-fun partition_N : N;-fun partition_V2 : V2;-fun partitive_A : A;-fun partitive_N : N;-fun partly_Adv : Adv;-fun partner_N : N;-fun partner_V2 : V2;-fun partnership_N : N;-fun partridge_N : N;-fun parturition_N : N;-fun party_N : N;-fun party_spirit_N : N;-fun party_spirited_A : A;-fun party_wall_N : N;-fun parvenu_N : N;-fun paschal_A : A;-fun pasha_N : N;-fun pashto_N : N;-fun pass_N : N;-fun pass_V : V;-fun pass_V2 : V2;-fun passable_A : A;-fun passably_Adv : Adv;-fun passage_N : N;-fun passageway_N : N;-fun passbook_N : N;-fun passenger_N : N;-fun passepartout_N : N;-fun passer_by_N : N;-fun passim_Adv : Adv;-fun passing_A : A;-fun passing_Adv : Adv;-fun passing_N : N;-fun passing_out_A : A;-fun passion_N : N;-fun passion_flower_N : N;-fun passionate_A : A;-fun passionately_Adv : Adv;-fun passionless_A : A;-fun passive_A : A;-fun passive_N : N;-fun passively_Adv : Adv;-fun passiveness_N : N;-fun passivity_N : N;-fun passkey_N : N;-fun passover_N : N;-fun passport_N : N;-fun password_N : N;-fun passe_A : A;-fun passee_A : A;-fun past_A : A;-fun past_Adv : Adv;-fun past_N : N;-fun pasta_N : N;-fun paste_N : N;-fun paste_V2 : V2;-fun paste_up_N : N;-fun pasteboard_N : N;-fun pastel_N : N;-fun pastern_N : N;-fun pasteurization_N : N;-fun pasteurize_V2 : V2;-fun pastiche_N : N;-fun pastille_N : N;-fun pastime_N : N;-fun pasting_N : N;-fun pastor_N : N;-fun pastoral_A : A;-fun pastoral_N : N;-fun pastorate_N : N;-fun pastry_N : N;-fun pastry_cook_N : N;-fun pasturage_N : N;-fun pasture_N : N;-fun pasture_V : V;-fun pasture_V2 : V2;-fun pasty_A : A;-fun pasty_N : N;-fun pat_Adv : Adv;-fun pat_N : N;-fun pat_PN : PN;-fun pat_V : V;-fun pat_V2 : V2;-fun patch_N : N;-fun patch_V2 : V2;-fun patch_pocket_N : N;-fun patchily_Adv : Adv;-fun patchiness_N : N;-fun patchouli_N : N;-fun patchwork_N : N;-fun patchy_A : A;-fun pate_1_N : N;-fun pate_de_foie_gras_N : N;-fun patella_N : N;-fun patent_A : A;-fun patent_N : N;-fun patent_V2 : V2;-fun patentee_N : N;-fun patently_Adv : Adv;-fun paterfamilias_N : N;-fun paternal_A : A;-fun paternalism_N : N;-fun paternally_Adv : Adv;-fun paternity_N : N;-fun paternoster_N : N;-fun path_N : N;-fun path_finder_N : N;-fun pathetic_A : A;-fun pathetically_Adv : Adv;-fun pathless_A : A;-fun pathogen_N : N;-fun pathological_A : A;-fun pathologically_Adv : Adv;-fun pathologist_N : N;-fun pathology_N : N;-fun pathos_N : N;-fun pathway_N : N;-fun patience_N : N;-fun patience_PN : PN;-fun patient_A : A;-fun patient_N : N;-fun patiently_Adv : Adv;-fun patina_N : N;-fun patio_N : N;-fun patisserie_N : N;-fun patois_N : N;-fun patrai_PN : PN;-fun patrial_N : N;-fun patriarch_N : N;-fun patriarchal_A : A;-fun patriarchate_N : N;-fun patriarchy_N : N;-fun patricia_PN : PN;-fun patrician_A : A;-fun patrician_N : N;-fun patricide_N : N;-fun patrick_PN : PN;-fun patrimonial_A : A;-fun patrimony_N : N;-fun patriot_N : N;-fun patriotic_A : A;-fun patriotically_Adv : Adv;-fun patriotism_N : N;-fun patrol_N : N;-fun patrol_V : V;-fun patrol_V2 : V2;-fun patrolman_N : N;-fun patron_N : N;-fun patronage_N : N;-fun patroness_N : N;-fun patronize_V2 : V2;-fun patronizing_A : A;-fun patronizingly_Adv : Adv;-fun patronymic_A : A;-fun patronymic_N : N;-fun patten_N : N;-fun patter_N : N;-fun patter_V : V;-fun patter_V2 : V2;-fun pattern_N : N;-fun pattern_V2 : V2;-fun patty_N : N;-fun patty_PN : PN;-fun patty_pan_N : N;-fun paucity_N : N;-fun paul_PN : PN;-fun paula_PN : PN;-fun pauline_PN : PN;-fun paunch_N : N;-fun paunchiness_N : N;-fun paunchy_A : A;-fun pauper_N : N;-fun pauperism_N : N;-fun pauperization_N : N;-fun pauperize_V2 : V2;-fun pause_N : N;-fun pause_V : V;-fun pave_V2 : V2;-fun pavement_N : N;-fun pavilion_N : N;-fun paving_stone_N : N;-fun paw_N : N;-fun paw_V2 : V2;-fun pawkily_Adv : Adv;-fun pawky_A : A;-fun pawl_N : N;-fun pawn_N : N;-fun pawn_V2 : V2;-fun pawn_ticket_N : N;-fun pawnbroker_N : N;-fun pawnshop_N : N;-fun pawpaw_N : N;-fun pax_N : N;-fun pax_romana_N : N;-fun pay_N : N;-fun pay_V : V;-fun pay_V2 : V2;-fun pay_as_you_earn_N : N;-fun pay_claim_N : N;-fun pay_packet_N : N;-fun pay_station_N : N;-fun payable_A : A;-fun payday_N : N;-fun paydirt_N : N;-fun paye_PN : PN;-fun payee_N : N;-fun payer_N : N;-fun payload_N : N;-fun paymaster_N : N;-fun payment_N : N;-fun paynim_N : N;-fun payoff_N : N;-fun payphone_N : N;-fun payroll_N : N;-fun paysheet_N : N;-fun payslip_N : N;-fun pc_PN : PN;-fun pdsa_N : N;-fun pe_N : N;-fun pea_N : N;-fun pea_chick_N : N;-fun pea_flour_N : N;-fun pea_green_A : A;-fun pea_green_N : N;-fun pea_jacket_N : N;-fun pea_soup_N : N;-fun peace_N : N;-fun peace_offering_N : N;-fun peaceable_A : A;-fun peaceably_Adv : Adv;-fun peaceful_A : A;-fun peacefully_Adv : Adv;-fun peacefulness_N : N;-fun peacehaven_PN : PN;-fun peacemaker_N : N;-fun peacetime_N : N;-fun peach_N : N;-fun peach_V : V;-fun peach_V2 : V2;-fun peacock_N : N;-fun peacock_blue_A : A;-fun peacock_blue_N : N;-fun peafowl_N : N;-fun peahen_N : N;-fun peak_N : N;-fun peak_V : V;-fun peaked_A : A;-fun peaky_A : A;-fun peal_N : N;-fun peal_V : V;-fun peal_V2 : V2;-fun peanut_N : N;-fun pear_N : N;-fun pearl_N : N;-fun pearl_PN : PN;-fun pearl_V : V;-fun pearl_barley_N : N;-fun pearl_diver_N : N;-fun pearl_fishery_N : N;-fun pearl_oyster_N : N;-fun pearl_sago_N : N;-fun pearly_A : A;-fun pearmain_N : N;-fun peasant_N : N;-fun peasantry_N : N;-fun pease_N : N;-fun pease_pudding_N : N;-fun peashooter_N : N;-fun peasouper_N : N;-fun peat_N : N;-fun peaty_A : A;-fun pebble_N : N;-fun pebbly_A : A;-fun pecan_N : N;-fun peccable_A : A;-fun peccadillo_N : N;-fun peccary_N : N;-fun peck_N : N;-fun peck_V : V;-fun peck_V2 : V2;-fun pecker_N : N;-fun peckish_A : A;-fun pectic_A : A;-fun pectin_N : N;-fun pectoral_A : A;-fun peculate_V : V;-fun peculate_V2 : V2;-fun peculation_N : N;-fun peculiar_A : A;-fun peculiarity_N : N;-fun peculiarly_Adv : Adv;-fun pecuniary_A : A;-fun pedagogic_A : A;-fun pedagogical_A : A;-fun pedagogue_N : N;-fun pedagogy_N : N;-fun pedal_A : A;-fun pedal_N : N;-fun pedal_V : V;-fun pedal_V2 : V2;-fun pedant_N : N;-fun pedantic_A : A;-fun pedantically_Adv : Adv;-fun pedantry_N : N;-fun peddle_V : V;-fun peddle_V2 : V2;-fun peddler_N : N;-fun peddling_A : A;-fun pederast_N : N;-fun pederasty_N : N;-fun pedestal_N : N;-fun pedestrian_A : A;-fun pedestrian_N : N;-fun pediatrician_N : N;-fun pediatrics_N : N;-fun pedicab_N : N;-fun pedicure_N : N;-fun pedigree_N : N;-fun pediment_N : N;-fun pedlar_N : N;-fun pedometer_N : N;-fun pee_N : N;-fun pee_V : V;-fun peebles_PN : PN;-fun peek_N : N;-fun peek_V : V;-fun peek_a_boo_N : N;-fun peel_N : N;-fun peel_V : V;-fun peel_V2 : V2;-fun peeler_N : N;-fun peep_N : N;-fun peep_V : V;-fun peeper_N : N;-fun peephole_N : N;-fun peepshow_N : N;-fun peepul_N : N;-fun peer_N : N;-fun peer_V : V;-fun peerage_N : N;-fun peeress_N : N;-fun peerless_A : A;-fun peeve_V2 : V2;-fun peeved_A : A;-fun peevish_A : A;-fun peevishly_Adv : Adv;-fun peevishness_N : N;-fun peewit_N : N;-fun peg_N : N;-fun peg_PN : PN;-fun peg_V : V;-fun peg_V2 : V2;-fun peggy_PN : PN;-fun peignoir_N : N;-fun pejorative_A : A;-fun pejoratively_Adv : Adv;-fun peke_N : N;-fun pekinese_N : N;-fun peking_PN : PN;-fun pekoe_N : N;-fun pelf_N : N;-fun pelican_N : N;-fun pelisse_N : N;-fun pell_mell_Adv : Adv;-fun pellet_N : N;-fun pellucid_A : A;-fun pellucidly_Adv : Adv;-fun pelmet_N : N;-fun pelota_N : N;-fun pelt_N : N;-fun pelt_V : V;-fun pelt_V2 : V2;-fun pelton_PN : PN;-fun pelvic_A : A;-fun pelvis_N : N;-fun pembroke_PN : PN;-fun pemmican_N : N;-fun pen_N : N;-fun pen_V2 : V2;-fun pen_and_ink_N : N;-fun pen_friend_N : N;-fun pen_name_N : N;-fun pen_pusher_N : N;-fun penal_A : A;-fun penalization_N : N;-fun penalize_V2 : V2;-fun penally_Adv : Adv;-fun penalty_N : N;-fun penance_N : N;-fun penarth_PN : PN;-fun penchant_N : N;-fun pencil_N : N;-fun pencil_V2 : V2;-fun pendant_N : N;-fun pendent_A : A;-fun pending_A : A;-fun pendlebury_PN : PN;-fun pendulous_A : A;-fun pendulum_N : N;-fun penelope_PN : PN;-fun penetrability_N : N;-fun penetrable_A : A;-fun penetrate_V : V;-fun penetrate_V2 : V2;-fun penetrating_A : A;-fun penetratingly_Adv : Adv;-fun penetration_N : N;-fun penetrative_A : A;-fun penguin_N : N;-fun penicillin_N : N;-fun penicuik_PN : PN;-fun peninsula_N : N;-fun peninsular_A : A;-fun penis_N : N;-fun penitence_N : N;-fun penitent_A : A;-fun penitent_N : N;-fun penitential_A : A;-fun penitentially_Adv : Adv;-fun penitentiary_A : A;-fun penitentiary_N : N;-fun penitently_Adv : Adv;-fun penki_PN : PN;-fun penknife_N : N;-fun penmanship_N : N;-fun penn'orth_N : N;-fun pennant_N : N;-fun penniless_A : A;-fun pennon_N : N;-fun pennsylvania_PN : PN;-fun penny_N : N;-fun penny_PN : PN;-fun pennyweight_N : N;-fun pennyworth_N : N;-fun penology_N : N;-fun penrhyn_PN : PN;-fun penrith_PN : PN;-fun penryn_PN : PN;-fun pension_N : N;-fun pension_V2 : V2;-fun pensionable_A : A;-fun pensioner_N : N;-fun pensive_A : A;-fun pensively_Adv : Adv;-fun pensiveness_N : N;-fun penstock_N : N;-fun pent_up_A : A;-fun pentagon_N : N;-fun pentagonal_A : A;-fun pentameter_N : N;-fun pentateuch_N : N;-fun pentathlon_N : N;-fun pentecost_N : N;-fun pentecostal_A : A;-fun penthouse_N : N;-fun penultimate_A : A;-fun penultimate_N : N;-fun penumbra_N : N;-fun penurious_A : A;-fun penuriously_Adv : Adv;-fun penuriousness_N : N;-fun penury_N : N;-fun penzance_PN : PN;-fun peon_N : N;-fun peonage_N : N;-fun peony_N : N;-fun people_N : N;-fun people_V2 : V2;-fun pep_N : N;-fun pep_V2 : V2;-fun pepper_N : N;-fun pepper_V2 : V2;-fun pepper_and_salt_N : N;-fun pepper_mill_N : N;-fun pepper_pot_N : N;-fun peppercorn_N : N;-fun peppermint_N : N;-fun peppery_A : A;-fun pepsin_N : N;-fun peptic_A : A;-fun peradventure_Adv : Adv;-fun perambulate_V : V;-fun perambulate_V2 : V2;-fun perambulation_N : N;-fun perambulator_N : N;-fun perceivable_A : A;-fun perceive_V2 : V2;-fun perceiver_N : N;-fun percent_N : N;-fun percentage_N : N;-fun perceptibility_N : N;-fun perceptible_A : A;-fun perceptibly_Adv : Adv;-fun perception_N : N;-fun perceptive_A : A;-fun perceptively_Adv : Adv;-fun perceptual_A : A;-fun perceptually_Adv : Adv;-fun perch_N : N;-fun perch_V : V;-fun perch_V2 : V2;-fun perchance_Adv : Adv;-fun percipient_A : A;-fun percolate_V : V;-fun percolate_V2 : V2;-fun percolator_N : N;-fun percussion_N : N;-fun percussionist_N : N;-fun percy_PN : PN;-fun perdition_N : N;-fun peregrination_N : N;-fun peremptorily_Adv : Adv;-fun peremptory_A : A;-fun perennial_A : A;-fun perennial_N : N;-fun perennially_Adv : Adv;-fun perfect_A : A;-fun perfect_V2 : V2;-fun perfectibility_N : N;-fun perfectible_A : A;-fun perfection_N : N;-fun perfectionist_N : N;-fun perfectly_Adv : Adv;-fun perfervid_A : A;-fun perfidious_A : A;-fun perfidiously_Adv : Adv;-fun perfidiousness_N : N;-fun perfidy_N : N;-fun perforate_V2 : V2;-fun perforation_N : N;-fun perforce_Adv : Adv;-fun perform_V : V;-fun perform_V2 : V2;-fun performance_N : N;-fun performer_N : N;-fun perfume_N : N;-fun perfume_V2 : V2;-fun perfumer_N : N;-fun perfunctorily_Adv : Adv;-fun perfunctory_A : A;-fun pergola_N : N;-fun perhaps_Adv : Adv;-fun peri_N : N;-fun perigee_N : N;-fun perihelion_N : N;-fun peril_N : N;-fun peril_V2 : V2;-fun perilous_A : A;-fun perilously_Adv : Adv;-fun perimeter_N : N;-fun period_N : N;-fun periodic_A : A;-fun periodical_A : A;-fun periodical_N : N;-fun periodically_Adv : Adv;-fun peripatetic_A : A;-fun peripheral_A : A;-fun periphery_N : N;-fun periphrasis_N : N;-fun periphrastic_A : A;-fun periscope_N : N;-fun perish_V : V;-fun perish_V2 : V2;-fun perishable_A : A;-fun perisher_N : N;-fun peristyle_N : N;-fun peritonitis_N : N;-fun periwig_N : N;-fun periwinkle_N : N;-fun perjure_V2 : V2;-fun perjurer_N : N;-fun perjury_N : N;-fun perk_N : N;-fun perk_V : V;-fun perk_V2 : V2;-fun perkily_Adv : Adv;-fun perkiness_N : N;-fun perky_A : A;-fun perm_N : N;-fun perm_PN : PN;-fun perm_V2 : V2;-fun permafrost_N : N;-fun permanence_N : N;-fun permanency_N : N;-fun permanent_A : A;-fun permanently_Adv : Adv;-fun permanganate_N : N;-fun permeability_N : N;-fun permeable_A : A;-fun permeate_V : V;-fun permeate_V2 : V2;-fun permeation_N : N;-fun permissible_A : A;-fun permissibly_Adv : Adv;-fun permission_N : N;-fun permissive_A : A;-fun permissiveness_N : N;-fun permit_N : N;-fun permit_V : V;-fun permit_V2 : V2;-fun permutation_N : N;-fun permute_V2 : V2;-fun pernicious_A : A;-fun perniciously_Adv : Adv;-fun perniciousness_N : N;-fun pernickety_A : A;-fun peroration_N : N;-fun peroxide_N : N;-fun perpendicular_A : A;-fun perpendicular_N : N;-fun perpendicularly_Adv : Adv;-fun perpetrate_V2 : V2;-fun perpetration_N : N;-fun perpetrator_N : N;-fun perpetual_A : A;-fun perpetually_Adv : Adv;-fun perpetuate_V2 : V2;-fun perpetuation_N : N;-fun perpetuity_N : N;-fun perplex_V2 : V2;-fun perplexed_A : A;-fun perplexedly_Adv : Adv;-fun perplexity_N : N;-fun perquisite_N : N;-fun perry_N : N;-fun persecute_V2 : V2;-fun persecution_N : N;-fun persecutor_N : N;-fun perseverance_N : N;-fun persevere_V : V;-fun persevering_A : A;-fun perseveringly_Adv : Adv;-fun pershore_PN : PN;-fun persia_PN : PN;-fun persian_A : A;-fun persian_N : N;-fun persiflage_N : N;-fun persimmon_N : N;-fun persist_V : V;-fun persistence_N : N;-fun persistent_A : A;-fun persistently_Adv : Adv;-fun person_N : N;-fun persona_N : N;-fun persona_grata_N : N;-fun persona_non_grata_N : N;-fun personable_A : A;-fun personage_N : N;-fun personal_A : A;-fun personal_N : N;-fun personality_N : N;-fun personalize_V2 : V2;-fun personally_Adv : Adv;-fun personalty_N : N;-fun personate_V2 : V2;-fun personation_N : N;-fun personification_N : N;-fun personify_V2 : V2;-fun perspective_N : N;-fun perspex_N : N;-fun perspicacious_A : A;-fun perspicacity_N : N;-fun perspicuity_N : N;-fun perspicuous_A : A;-fun perspicuously_Adv : Adv;-fun perspicuousness_N : N;-fun perspiration_N : N;-fun perspire_V : V;-fun persuadable_A : A;-fun persuade_V2 : V2;-fun persuasion_N : N;-fun persuasive_A : A;-fun persuasively_Adv : Adv;-fun persuasiveness_N : N;-fun pert_A : A;-fun pertain_V : V;-fun perth_PN : PN;-fun pertinacious_A : A;-fun pertinaciously_Adv : Adv;-fun pertinacity_N : N;-fun pertinence_N : N;-fun pertinent_A : A;-fun pertinently_Adv : Adv;-fun pertly_Adv : Adv;-fun pertness_N : N;-fun perturb_V2 : V2;-fun perturbation_N : N;-fun peru_PN : PN;-fun perugia_PN : PN;-fun peruke_N : N;-fun perusal_N : N;-fun peruse_V2 : V2;-fun peruvian_A : A;-fun peruvian_N : N;-fun pervade_V2 : V2;-fun pervasion_N : N;-fun pervasive_A : A;-fun pervasively_Adv : Adv;-fun pervasiveness_N : N;-fun perverse_A : A;-fun perversely_Adv : Adv;-fun perverseness_N : N;-fun perversion_N : N;-fun perversity_N : N;-fun pervert_N : N;-fun pervert_V2 : V2;-fun pescara_PN : PN;-fun peseta_N : N;-fun pesky_A : A;-fun peso_N : N;-fun pessary_N : N;-fun pessimism_N : N;-fun pessimist_N : N;-fun pessimistic_A : A;-fun pessimistically_Adv : Adv;-fun pest_N : N;-fun pester_V2 : V2;-fun pesticide_N : N;-fun pestiferous_A : A;-fun pestilence_N : N;-fun pestilent_A : A;-fun pestilential_A : A;-fun pestle_N : N;-fun pestle_V2 : V2;-fun pet_N : N;-fun pet_V2 : V2;-fun petal_N : N;-fun petaled_A : A;-fun petalled_A : A;-fun petard_N : N;-fun pete_PN : PN;-fun peter_PN : PN;-fun peter_V : V;-fun peterborough_PN : PN;-fun peterhead_PN : PN;-fun peterlee_PN : PN;-fun petersfield_PN : PN;-fun petit_bourgeois_N : N;-fun petite_A : A;-fun petition_N : N;-fun petition_V : V;-fun petition_V2 : V2;-fun petitioner_N : N;-fun petrel_N : N;-fun petrifaction_N : N;-fun petrify_V : V;-fun petrify_V2 : V2;-fun petro_chemical_N : N;-fun petrol_N : N;-fun petroleum_N : N;-fun petrology_N : N;-fun petticoat_N : N;-fun pettifogging_A : A;-fun pettily_Adv : Adv;-fun pettiness_N : N;-fun pettish_A : A;-fun pettishly_Adv : Adv;-fun pettishness_N : N;-fun petty_A : A;-fun petulance_N : N;-fun petulant_A : A;-fun petulantly_Adv : Adv;-fun petunia_N : N;-fun pew_N : N;-fun pew_opener_N : N;-fun pewit_N : N;-fun pewter_N : N;-fun peyote_N : N;-fun pfennig_N : N;-fun phaeton_N : N;-fun phagocyte_N : N;-fun phalanx_N : N;-fun phallic_A : A;-fun phallus_N : N;-fun phantasm_N : N;-fun phantasmagoria_N : N;-fun phantasmal_A : A;-fun phantasy_N : N;-fun phantom_N : N;-fun pharaoh_N : N;-fun pharisaic_A : A;-fun pharisaical_A : A;-fun pharisee_N : N;-fun pharmaceutical_A : A;-fun pharmacist_N : N;-fun pharmacological_A : A;-fun pharmacologically_Adv : Adv;-fun pharmacologist_N : N;-fun pharmacology_N : N;-fun pharmacopoeia_N : N;-fun pharmacy_N : N;-fun pharos_N : N;-fun pharyngitis_N : N;-fun pharynx_N : N;-fun phase_N : N;-fun phase_V2 : V2;-fun phd_N : N;-fun pheasant_N : N;-fun phenobarbitone_N : N;-fun phenol_N : N;-fun phenomenal_A : A;-fun phenomenally_Adv : Adv;-fun phenomenon_N : N;-fun phial_N : N;-fun phil_PN : PN;-fun philadelphia_PN : PN;-fun philander_V : V;-fun philanderer_N : N;-fun philanthropic_A : A;-fun philanthropically_Adv : Adv;-fun philanthropist_N : N;-fun philanthropy_N : N;-fun philatelic_A : A;-fun philatelist_N : N;-fun philately_N : N;-fun philharmonic_A : A;-fun philhellene_A : A;-fun philhellene_N : N;-fun philhellenic_A : A;-fun philip_PN : PN;-fun philippa_PN : PN;-fun philippine_A : A;-fun philippine_N : N;-fun philippines_PN : PN;-fun philistine_N : N;-fun philistinism_N : N;-fun philological_A : A;-fun philologist_N : N;-fun philology_N : N;-fun philosopher_N : N;-fun philosophic_A : A;-fun philosophical_A : A;-fun philosophically_Adv : Adv;-fun philosophize_V : V;-fun philosophy_N : N;-fun philtre_N : N;-fun phlebitis_N : N;-fun phlegm_N : N;-fun phlegmatic_A : A;-fun phlegmatically_Adv : Adv;-fun phlox_N : N;-fun phnom_penh_PN : PN;-fun phobia_N : N;-fun phoebe_PN : PN;-fun phoenix_N : N;-fun phoenix_PN : PN;-fun phone_N : N;-fun phone_V : V;-fun phone_V2 : V2;-fun phone_in_N : N;-fun phonebooth_N : N;-fun phonecall_N : N;-fun phoneme_N : N;-fun phonemic_A : A;-fun phonemics_N : N;-fun phonetic_A : A;-fun phonetically_Adv : Adv;-fun phonetician_N : N;-fun phonetics_N : N;-fun phoney_A : A;-fun phoney_N : N;-fun phonic_A : A;-fun phonics_N : N;-fun phonograph_N : N;-fun phonological_A : A;-fun phonology_N : N;-fun phony_A : A;-fun phony_N : N;-fun phosgene_N : N;-fun phosphate_N : N;-fun phosphorescence_N : N;-fun phosphorescent_A : A;-fun phosphoric_A : A;-fun phosphorous_A : A;-fun phosphorus_N : N;-fun photo_N : N;-fun photocopier_N : N;-fun photocopy_N : N;-fun photocopy_V2 : V2;-fun photoelectric_A : A;-fun photoflash_N : N;-fun photogenic_A : A;-fun photograph_N : N;-fun photograph_V2 : V2;-fun photographer_N : N;-fun photographic_A : A;-fun photographically_Adv : Adv;-fun photography_N : N;-fun photogravure_N : N;-fun photolithography_N : N;-fun photometer_N : N;-fun photon_N : N;-fun photosensitize_V2 : V2;-fun photostat_N : N;-fun photostat_V2 : V2;-fun photosynthesis_N : N;-fun phrasal_A : A;-fun phrase_N : N;-fun phrase_V2 : V2;-fun phrase_book_N : N;-fun phraseology_N : N;-fun phrenetic_A : A;-fun phrenologist_N : N;-fun phrenology_N : N;-fun phthisis_N : N;-fun phut_Adv : Adv;-fun phyllis_PN : PN;-fun phylum_N : N;-fun physic_N : N;-fun physical_A : A;-fun physically_Adv : Adv;-fun physician_N : N;-fun physicist_N : N;-fun physics_N : N;-fun physiognomy_N : N;-fun physiological_A : A;-fun physiologist_N : N;-fun physiology_N : N;-fun physiotherapist_N : N;-fun physiotherapy_N : N;-fun physique_N : N;-fun pi_N : N;-fun piacenza_PN : PN;-fun pianissimo_A : A;-fun pianissimo_Adv : Adv;-fun pianist_N : N;-fun piano_A : A;-fun piano_Adv : Adv;-fun piano_N : N;-fun pianoforte_N : N;-fun pianola_N : N;-fun piastre_N : N;-fun piazza_N : N;-fun pibroch_N : N;-fun pica_N : N;-fun picador_N : N;-fun picaresque_A : A;-fun piccalilli_N : N;-fun piccaninny_N : N;-fun piccolo_N : N;-fun pick_N : N;-fun pick_V : V;-fun pick_V2 : V2;-fun pick_me_up_N : N;-fun pick_up_N : N;-fun pickaback_Adv : Adv;-fun pickaxe_N : N;-fun picker_N : N;-fun pickerel_N : N;-fun picket_N : N;-fun picket_V : V;-fun picket_V2 : V2;-fun picking_N : N;-fun pickle_N : N;-fun pickle_V2 : V2;-fun pickpocket_N : N;-fun picnic_N : N;-fun picnic_V : V;-fun picnicker_N : N;-fun picric_A : A;-fun pictorial_A : A;-fun pictorial_N : N;-fun picture_N : N;-fun picture_V2 : V2;-fun picture_book_N : N;-fun picture_card_N : N;-fun picture_gallery_N : N;-fun picturesque_A : A;-fun picturesquely_Adv : Adv;-fun picturesqueness_N : N;-fun piddle_N : N;-fun piddle_V : V;-fun piddling_A : A;-fun pidgin_N : N;-fun pie_N : N;-fun pie_crust_N : N;-fun piebald_A : A;-fun piece_N : N;-fun piece_V2 : V2;-fun piecemeal_A : A;-fun piecemeal_Adv : Adv;-fun piecework_N : N;-fun pied_A : A;-fun pied_a_terre_N : N;-fun pier_N : N;-fun pier_glass_N : N;-fun pierce_V : V;-fun pierce_V2 : V2;-fun piercing_A : A;-fun piercingly_Adv : Adv;-fun pierrot_N : N;-fun piety_N : N;-fun pieta_N : N;-fun piffle_N : N;-fun piffle_V : V;-fun piffling_A : A;-fun pig_N : N;-fun pig_V : V;-fun pig_headed_A : A;-fun pig_headedly_Adv : Adv;-fun pig_headedness_N : N;-fun pig_iron_N : N;-fun pig_sticking_N : N;-fun pigboat_N : N;-fun pigeon_N : N;-fun pigeon_breasted_A : A;-fun pigeon_toed_A : A;-fun pigeonhole_N : N;-fun pigeonhole_V2 : V2;-fun piggery_N : N;-fun piggish_A : A;-fun piggishly_Adv : Adv;-fun piggishness_N : N;-fun piggy_A : A;-fun piggy_N : N;-fun piggyback_N : N;-fun piglet_N : N;-fun pigment_N : N;-fun pigmentation_N : N;-fun pigmy_N : N;-fun pigskin_N : N;-fun pigsty_N : N;-fun pigswill_N : N;-fun pigtail_N : N;-fun pigwash_N : N;-fun pike_N : N;-fun pikestaff_N : N;-fun pilaf_N : N;-fun pilaff_N : N;-fun pilaster_N : N;-fun pilau_N : N;-fun pilchard_N : N;-fun pile_N : N;-fun pile_V : V;-fun pile_V2 : V2;-fun pile_driver_N : N;-fun pile_dwelling_N : N;-fun pile_up_N : N;-fun piles_N : N;-fun pilfer_V : V;-fun pilfer_V2 : V2;-fun pilferage_N : N;-fun pilferer_N : N;-fun pilgrim_N : N;-fun pilgrimage_N : N;-fun pill_N : N;-fun pill_PN : PN;-fun pillage_N : N;-fun pillage_V2 : V2;-fun pillager_N : N;-fun pillar_N : N;-fun pillar_box_N : N;-fun pillared_A : A;-fun pillbox_N : N;-fun pillion_N : N;-fun pillory_N : N;-fun pillow_N : N;-fun pillow_V2 : V2;-fun pillow_fight_N : N;-fun pillowcase_N : N;-fun pillowslip_N : N;-fun pilot_N : N;-fun pilot_V2 : V2;-fun pilot_boat_N : N;-fun pilot_burner_N : N;-fun pilot_cloth_N : N;-fun pilot_engine_N : N;-fun pilot_fish_N : N;-fun pilot_light_N : N;-fun pimento_N : N;-fun pimp_N : N;-fun pimp_V : V;-fun pimpernel_N : N;-fun pimple_N : N;-fun pimpled_A : A;-fun pimply_A : A;-fun pin_N : N;-fun pin_V2 : V2;-fun pin_money_N : N;-fun pin_table_N : N;-fun pin_up_N : N;-fun pinafore_N : N;-fun pinball_N : N;-fun pince_nez_N : N;-fun pincer_N : N;-fun pinch_N : N;-fun pinch_V : V;-fun pinch_V2 : V2;-fun pinchbeck_A : A;-fun pinchbeck_N : N;-fun pincushion_N : N;-fun pine_N : N;-fun pine_V : V;-fun pineal_A : A;-fun pineapple_N : N;-fun ping_N : N;-fun ping_V : V;-fun pingpong_N : N;-fun pinhead_N : N;-fun pinion_N : N;-fun pinion_V2 : V2;-fun pink_A : A;-fun pink_N : N;-fun pink_V : V;-fun pink_V2 : V2;-fun pinkish_A : A;-fun pinnace_N : N;-fun pinnacle_N : N;-fun pinnacle_V2 : V2;-fun pinnate_A : A;-fun pinny_N : N;-fun pinpoint_N : N;-fun pinpoint_V2 : V2;-fun pinprick_N : N;-fun pinstripe_A : A;-fun pint_N : N;-fun pioneer_N : N;-fun pioneer_V : V;-fun pioneer_V2 : V2;-fun pious_A : A;-fun piously_Adv : Adv;-fun pip_N : N;-fun pip_V2 : V2;-fun pipal_N : N;-fun pipe_N : N;-fun pipe_V : V;-fun pipe_V2 : V2;-fun pipe_organ_N : N;-fun pipe_rack_N : N;-fun pipeclay_N : N;-fun pipedream_N : N;-fun pipeful_N : N;-fun pipeline_N : N;-fun piper_N : N;-fun pipette_N : N;-fun pipework_N : N;-fun piping_A : A;-fun piping_Adv : Adv;-fun piping_N : N;-fun pippin_N : N;-fun pipsqueak_N : N;-fun piquancy_N : N;-fun piquant_A : A;-fun piquantly_Adv : Adv;-fun pique_N : N;-fun pique_V2 : V2;-fun piquet_N : N;-fun piracy_N : N;-fun piraeus_PN : PN;-fun piranha_N : N;-fun pirate_N : N;-fun pirate_V2 : V2;-fun piratical_A : A;-fun piratically_Adv : Adv;-fun pirouette_N : N;-fun pirouette_V : V;-fun pis_aller_N : N;-fun pisa_PN : PN;-fun piscatorial_A : A;-fun pisces_PN : PN;-fun piss_N : N;-fun piss_V : V;-fun piss_V2 : V2;-fun pissed_A : A;-fun pistachio_N : N;-fun pistil_N : N;-fun pistol_N : N;-fun piston_N : N;-fun pit_N : N;-fun pit_V2 : V2;-fun pit_a_pat_Adv : Adv;-fun pit_prop_N : N;-fun pitch_N : N;-fun pitch_V : V;-fun pitch_V2 : V2;-fun pitch_black_A : A;-fun pitch_dark_A : A;-fun pitchblende_N : N;-fun pitcher_N : N;-fun pitchfork_N : N;-fun pitchfork_V2 : V2;-fun piteous_A : A;-fun piteously_Adv : Adv;-fun pitfall_N : N;-fun pith_N : N;-fun pithead_N : N;-fun pithily_Adv : Adv;-fun pithy_A : A;-fun pitiable_A : A;-fun pitiably_Adv : Adv;-fun pitiful_A : A;-fun pitifully_Adv : Adv;-fun pitiless_A : A;-fun pitilessly_Adv : Adv;-fun pitman_N : N;-fun piton_N : N;-fun pitsaw_N : N;-fun pittance_N : N;-fun pitter_patter_N : N;-fun pittsburgh_PN : PN;-fun pituitary_A : A;-fun pituitary_N : N;-fun pity_N : N;-fun pity_V2 : V2;-fun pitying_A : A;-fun pityingly_Adv : Adv;-fun pivot_N : N;-fun pivot_V : V;-fun pivot_V2 : V2;-fun pivotal_A : A;-fun pixie_N : N;-fun pixilated_A : A;-fun pixy_N : N;-fun pizza_N : N;-fun pizzicato_A : A;-fun pizzicato_Adv : Adv;-fun placard_N : N;-fun placard_V2 : V2;-fun placate_V2 : V2;-fun placatingly_Adv : Adv;-fun place_N : N;-fun place_V2 : V2;-fun place_bet_N : N;-fun place_name_N : N;-fun placebo_N : N;-fun placeman_N : N;-fun placement_N : N;-fun placenta_N : N;-fun placeseeker_N : N;-fun placid_A : A;-fun placidity_N : N;-fun placidly_Adv : Adv;-fun placing_N : N;-fun placket_N : N;-fun plage_N : N;-fun plagiarism_N : N;-fun plagiarist_N : N;-fun plagiarize_V2 : V2;-fun plague_N : N;-fun plague_V2 : V2;-fun plague_spot_N : N;-fun plaguily_Adv : Adv;-fun plaguy_A : A;-fun plaice_N : N;-fun plaid_N : N;-fun plain_A : A;-fun plain_Adv : Adv;-fun plain_N : N;-fun plain_V : V;-fun plain_V2 : V2;-fun plain_spoken_A : A;-fun plainly_Adv : Adv;-fun plainness_N : N;-fun plainsman_N : N;-fun plaint_N : N;-fun plaintiff_N : N;-fun plaintive_A : A;-fun plaintively_Adv : Adv;-fun plaintiveness_N : N;-fun plait_N : N;-fun plait_V2 : V2;-fun plan_N : N;-fun plan_V2 : V2;-fun planchette_N : N;-fun plane_N : N;-fun plane_V : V;-fun plane_V2 : V2;-fun plane_tree_N : N;-fun planet_N : N;-fun planetarium_N : N;-fun planetary_A : A;-fun plangent_A : A;-fun plank_N : N;-fun plank_V2 : V2;-fun plank_bed_N : N;-fun planking_N : N;-fun plankton_N : N;-fun planless_A : A;-fun planner_N : N;-fun plant_N : N;-fun plant_V2 : V2;-fun plant_louse_N : N;-fun plantain_N : N;-fun plantation_N : N;-fun planter_N : N;-fun plaque_N : N;-fun plash_N : N;-fun plash_V : V;-fun plash_V2 : V2;-fun plasm_N : N;-fun plasma_N : N;-fun plaster_N : N;-fun plaster_V2 : V2;-fun plasterboard_N : N;-fun plastered_A : A;-fun plasterer_N : N;-fun plastic_A : A;-fun plastic_N : N;-fun plastic_bomb_N : N;-fun plasticine_N : N;-fun plasticity_N : N;-fun plastics_N : N;-fun plate_N : N;-fun plate_V2 : V2;-fun plate_glass_N : N;-fun plate_powder_N : N;-fun plate_rack_N : N;-fun plateau_N : N;-fun plateful_N : N;-fun platelayer_N : N;-fun platform_N : N;-fun plating_N : N;-fun platinum_N : N;-fun platitude_N : N;-fun platitudinous_A : A;-fun platonic_A : A;-fun platoon_N : N;-fun platter_N : N;-fun platypus_N : N;-fun plaudit_N : N;-fun plausibility_N : N;-fun plausible_A : A;-fun plausibly_Adv : Adv;-fun play_N : N;-fun play_V : V;-fun play_V2 : V2;-fun play_acting_N : N;-fun play_actor_N : N;-fun play_box_N : N;-fun play_off_N : N;-fun play_reading_N : N;-fun playback_N : N;-fun playbill_N : N;-fun playboy_N : N;-fun player_N : N;-fun player_piano_N : N;-fun playfellow_N : N;-fun playful_A : A;-fun playfully_Adv : Adv;-fun playfulness_N : N;-fun playgoer_N : N;-fun playground_N : N;-fun playgroup_N : N;-fun playhouse_N : N;-fun playing_N : N;-fun playing_card_N : N;-fun playing_field_N : N;-fun playlet_N : N;-fun playmate_N : N;-fun playpen_N : N;-fun playroom_N : N;-fun playschool_N : N;-fun playsuit_N : N;-fun plaything_N : N;-fun playtime_N : N;-fun playwright_N : N;-fun plaza_N : N;-fun plc_PN : PN;-fun plea_N : N;-fun pleach_V2 : V2;-fun plead_V : V;-fun plead_V2 : V2;-fun pleadingly_Adv : Adv;-fun pleasance_N : N;-fun pleasant_A : A;-fun pleasantly_Adv : Adv;-fun pleasantness_N : N;-fun pleasantry_N : N;-fun please_V : V;-fun please_V2 : V2;-fun pleased_A : A;-fun pleasing_A : A;-fun pleasingly_Adv : Adv;-fun pleasurable_A : A;-fun pleasurably_Adv : Adv;-fun pleasure_N : N;-fun pleasure_boat_N : N;-fun pleasure_craft_N : N;-fun pleasure_ground_N : N;-fun pleat_N : N;-fun pleat_V2 : V2;-fun pleb_N : N;-fun plebeian_A : A;-fun plebeian_N : N;-fun plebiscite_N : N;-fun plectrum_N : N;-fun pledge_N : N;-fun pledge_V2 : V2;-fun plenarily_Adv : Adv;-fun plenary_A : A;-fun plenipotentiary_N : N;-fun plenitude_N : N;-fun plenteous_A : A;-fun plenteously_Adv : Adv;-fun plentiful_A : A;-fun plentifully_Adv : Adv;-fun plenty_Adv : Adv;-fun plenty_N : N;-fun pleonasm_N : N;-fun plethora_N : N;-fun pleurisy_N : N;-fun plexus_N : N;-fun pliability_N : N;-fun pliable_A : A;-fun pliancy_N : N;-fun pliant_A : A;-fun pliantly_Adv : Adv;-fun plight_N : N;-fun plight_V2 : V2;-fun plimsoll_N : N;-fun plinth_N : N;-fun plod_V : V;-fun plod_V2 : V2;-fun plodder_N : N;-fun plodding_A : A;-fun ploddingly_Adv : Adv;-fun plonk_Adv : Adv;-fun plonk_N : N;-fun plonk_V : V;-fun plop_Adv : Adv;-fun plop_N : N;-fun plop_V : V;-fun plosive_A : A;-fun plosive_N : N;-fun plot_N : N;-fun plot_V : V;-fun plot_V2 : V2;-fun plotter_N : N;-fun plough_N : N;-fun plough_V : V;-fun plough_V2 : V2;-fun ploughboy_N : N;-fun ploughman_N : N;-fun ploughshare_N : N;-fun plover_N : N;-fun ploy_N : N;-fun pluck_N : N;-fun pluck_V : V;-fun pluck_V2 : V2;-fun pluckily_Adv : Adv;-fun plucky_A : A;-fun plug_N : N;-fun plug_V : V;-fun plug_V2 : V2;-fun plughole_N : N;-fun plum_N : N;-fun plum_pudding_N : N;-fun plumage_N : N;-fun plumb_Adv : Adv;-fun plumb_N : N;-fun plumb_V2 : V2;-fun plumbago_N : N;-fun plumber_N : N;-fun plumbing_N : N;-fun plume_N : N;-fun plume_V2 : V2;-fun plummet_N : N;-fun plummet_V : V;-fun plummy_A : A;-fun plump_A : A;-fun plump_Adv : Adv;-fun plump_N : N;-fun plump_V : V;-fun plump_V2 : V2;-fun plunder_N : N;-fun plunder_V : V;-fun plunder_V2 : V2;-fun plunderer_N : N;-fun plunge_N : N;-fun plunge_V : V;-fun plunge_V2 : V2;-fun plunger_N : N;-fun plunk_N : N;-fun pluperfect_A : A;-fun pluperfect_N : N;-fun plural_A : A;-fun plural_N : N;-fun pluralism_N : N;-fun pluralist_N : N;-fun plurality_N : N;-fun plus_A : A;-fun plus_N : N;-fun plush_A : A;-fun plush_N : N;-fun plushy_A : A;-fun pluto_PN : PN;-fun plutocracy_N : N;-fun plutocrat_N : N;-fun plutocratic_A : A;-fun plutonium_N : N;-fun ply_N : N;-fun ply_V : V;-fun ply_V2 : V2;-fun plymouth_PN : PN;-fun plywood_N : N;-fun pneumatic_A : A;-fun pneumatically_Adv : Adv;-fun pneumonia_N : N;-fun po_N : N;-fun poach_V : V;-fun poach_V2 : V2;-fun poacher_N : N;-fun pock_N : N;-fun pocked_A : A;-fun pocket_N : N;-fun pocket_V2 : V2;-fun pocket_book_N : N;-fun pocket_handkerchief_N : N;-fun pocket_knife_N : N;-fun pocket_money_N : N;-fun pocketful_N : N;-fun pockmarked_A : A;-fun pod_N : N;-fun pod_V : V;-fun pod_V2 : V2;-fun podgy_A : A;-fun podiatry_N : N;-fun podium_N : N;-fun poem_N : N;-fun poesy_N : N;-fun poet_N : N;-fun poetess_N : N;-fun poetic_A : A;-fun poetical_A : A;-fun poetically_Adv : Adv;-fun poetry_N : N;-fun pogrom_N : N;-fun poignancy_N : N;-fun poignant_A : A;-fun poignantly_Adv : Adv;-fun poinsettia_N : N;-fun point_N : N;-fun point_V : V;-fun point_V2 : V2;-fun point_blank_A : A;-fun point_blank_Adv : Adv;-fun point_duty_N : N;-fun pointed_A : A;-fun pointedly_Adv : Adv;-fun pointer_N : N;-fun pointless_A : A;-fun pointlessly_Adv : Adv;-fun pointsman_N : N;-fun poise_N : N;-fun poise_V : V;-fun poise_V2 : V2;-fun poison_N : N;-fun poison_V2 : V2;-fun poison_gas_N : N;-fun poison_ivy_N : N;-fun poisoner_N : N;-fun poisonous_A : A;-fun poisonously_Adv : Adv;-fun poke_N : N;-fun poke_V : V;-fun poke_V2 : V2;-fun poke_bonnet_N : N;-fun poker_N : N;-fun poker_face_N : N;-fun poky_A : A;-fun poland_PN : PN;-fun polar_A : A;-fun polaris_N : N;-fun polarity_N : N;-fun polarization_N : N;-fun polarize_V2 : V2;-fun polaroid_N : N;-fun pole_N : N;-fun pole_jumping_N : N;-fun pole_star_N : N;-fun pole_vault_N : N;-fun poleax_N : N;-fun poleax_V2 : V2;-fun poleaxe_N : N;-fun poleaxe_V2 : V2;-fun polecat_N : N;-fun polemic_A : A;-fun polemic_N : N;-fun polemically_Adv : Adv;-fun police_V2 : V2;-fun police_office_N : N;-fun police_officer_N : N;-fun police_station_N : N;-fun policeman_N : N;-fun policewoman_N : N;-fun policy_N : N;-fun polio_N : N;-fun poliomyelitis_N : N;-fun polish_A : A;-fun polish_N : N;-fun polish_V : V;-fun polish_V2 : V2;-fun polisher_N : N;-fun politburo_N : N;-fun polite_A : A;-fun politely_Adv : Adv;-fun politeness_N : N;-fun politic_A : A;-fun political_A : A;-fun politically_Adv : Adv;-fun politician_N : N;-fun politicize_V : V;-fun politicize_V2 : V2;-fun politick_V : V;-fun politics_N : N;-fun polity_N : N;-fun polka_N : N;-fun poll_N : N;-fun poll_V : V;-fun poll_V2 : V2;-fun poll_tax_N : N;-fun pollard_N : N;-fun pollard_V2 : V2;-fun pollen_N : N;-fun pollinate_V2 : V2;-fun pollination_N : N;-fun polling_booth_N : N;-fun polling_day_N : N;-fun polling_station_N : N;-fun pollster_N : N;-fun pollutant_N : N;-fun pollute_V2 : V2;-fun pollution_N : N;-fun polly_PN : PN;-fun polo_N : N;-fun polo_neck_A : A;-fun polonaise_N : N;-fun polony_N : N;-fun poltergeist_N : N;-fun poltroon_N : N;-fun poltroonery_N : N;-fun poly_N : N;-fun polyandrous_A : A;-fun polyandry_N : N;-fun polyanthus_N : N;-fun polygamist_N : N;-fun polygamous_A : A;-fun polygamy_N : N;-fun polyglot_A : A;-fun polyglot_N : N;-fun polygon_N : N;-fun polygonal_A : A;-fun polymorphic_A : A;-fun polymorphous_A : A;-fun polynomial_A : A;-fun polynomial_N : N;-fun polyp_N : N;-fun polyphonic_A : A;-fun polyphony_N : N;-fun polypus_N : N;-fun polysyllabic_A : A;-fun polysyllable_N : N;-fun polytechnic_N : N;-fun polytheism_N : N;-fun polytheistic_A : A;-fun polythene_N : N;-fun pom_N : N;-fun pomade_N : N;-fun pomade_V2 : V2;-fun pomegranate_N : N;-fun pomelo_N : N;-fun pommel_N : N;-fun pommel_V2 : V2;-fun pommy_N : N;-fun pomp_N : N;-fun pompon_N : N;-fun pomposity_N : N;-fun pompous_A : A;-fun pompously_Adv : Adv;-fun ponce_N : N;-fun poncho_N : N;-fun pond_N : N;-fun ponder_V : V;-fun ponder_V2 : V2;-fun ponderable_A : A;-fun ponderous_A : A;-fun ponderously_Adv : Adv;-fun pone_N : N;-fun pongee_N : N;-fun poniard_N : N;-fun poniard_V2 : V2;-fun pont_llan_fraith_PN : PN;-fun pontardawe_PN : PN;-fun pontardulais_PN : PN;-fun pontefract_PN : PN;-fun pontiff_N : N;-fun pontifical_A : A;-fun pontificate_N : N;-fun pontificate_V : V;-fun pontoon_N : N;-fun pontycymmer_PN : PN;-fun pontypool_PN : PN;-fun pony_N : N;-fun pony_trekking_N : N;-fun ponytail_N : N;-fun poodle_N : N;-fun poof_N : N;-fun pooh_pooh_V2 : V2;-fun pool_N : N;-fun pool_V2 : V2;-fun poole_PN : PN;-fun poolroom_N : N;-fun poona_PN : PN;-fun poop_N : N;-fun poor_A : A;-fun poor_box_N : N;-fun poor_rate_N : N;-fun poor_spirited_A : A;-fun poorhouse_N : N;-fun poorly_A : A;-fun poorly_Adv : Adv;-fun poorness_N : N;-fun pop_A : A;-fun pop_Adv : Adv;-fun pop_N : N;-fun pop_V : V;-fun pop_V2 : V2;-fun popcorn_N : N;-fun pope_N : N;-fun popery_N : N;-fun popeyed_A : A;-fun popgun_N : N;-fun popinjay_N : N;-fun popish_A : A;-fun popishly_Adv : Adv;-fun poplar_N : N;-fun poplin_N : N;-fun poppa_N : N;-fun poppet_N : N;-fun poppy_N : N;-fun poppycock_N : N;-fun populace_N : N;-fun popular_A : A;-fun popularity_N : N;-fun popularization_N : N;-fun popularize_V2 : V2;-fun popularly_Adv : Adv;-fun populate_V2 : V2;-fun population_N : N;-fun populism_N : N;-fun populist_N : N;-fun populous_A : A;-fun porcelain_N : N;-fun porch_N : N;-fun porcine_A : A;-fun porcupine_N : N;-fun pore_N : N;-fun pore_V : V;-fun pork_N : N;-fun pork_barrel_N : N;-fun pork_butcher_N : N;-fun porker_N : N;-fun porn_N : N;-fun pornographer_N : N;-fun pornographic_A : A;-fun pornography_N : N;-fun porosity_N : N;-fun porous_A : A;-fun porousness_N : N;-fun porphyry_N : N;-fun porpoise_N : N;-fun porridge_N : N;-fun porringer_N : N;-fun port_N : N;-fun port_V2 : V2;-fun port_glasgow_PN : PN;-fun port_talbot_PN : PN;-fun portability_N : N;-fun portable_A : A;-fun portage_N : N;-fun portal_N : N;-fun portcullis_N : N;-fun porte_cochere_N : N;-fun portend_V2 : V2;-fun portent_N : N;-fun portentous_A : A;-fun portentously_Adv : Adv;-fun porter_N : N;-fun porterage_N : N;-fun porterhouse_N : N;-fun portfolio_N : N;-fun porthcawl_PN : PN;-fun porthmadog_PN : PN;-fun porthole_N : N;-fun portico_N : N;-fun portion_N : N;-fun portion_V2 : V2;-fun portishead_PN : PN;-fun portiere_N : N;-fun portland_PN : PN;-fun portly_A : A;-fun portmanteau_N : N;-fun porto_alegre_PN : PN;-fun portrait_N : N;-fun portraitist_N : N;-fun portraiture_N : N;-fun portray_V2 : V2;-fun portrayal_N : N;-fun portsmouth_PN : PN;-fun portugal_PN : PN;-fun portuguese_A : A;-fun portuguese_N : N;-fun pose_N : N;-fun pose_V : V;-fun pose_V2 : V2;-fun poser_N : N;-fun poseur_N : N;-fun poseuse_N : N;-fun posh_A : A;-fun posh_V2 : V2;-fun posit_V2 : V2;-fun position_N : N;-fun position_V2 : V2;-fun positive_A : A;-fun positive_N : N;-fun positively_Adv : Adv;-fun positiveness_N : N;-fun positivism_N : N;-fun positivist_N : N;-fun posse_N : N;-fun possess_V2 : V2;-fun possession_N : N;-fun possessive_A : A;-fun possessively_Adv : Adv;-fun possessiveness_N : N;-fun possessor_N : N;-fun posset_N : N;-fun possibility_N : N;-fun possible_A : A;-fun possible_N : N;-fun possibly_Adv : Adv;-fun possum_N : N;-fun post_N : N;-fun post_V : V;-fun post_V2 : V2;-fun post_chaise_N : N;-fun post_free_A : A;-fun post_free_Adv : Adv;-fun post_haste_Adv : Adv;-fun post_horse_N : N;-fun post_meridiem_Adv : Adv;-fun post_mortem_A : A;-fun post_mortem_N : N;-fun post_paid_A : A;-fun post_paid_Adv : Adv;-fun postage_N : N;-fun postage_stamp_N : N;-fun postal_A : A;-fun postbag_N : N;-fun postbox_N : N;-fun postcard_N : N;-fun postcode_N : N;-fun postdate_V2 : V2;-fun poste_restante_N : N;-fun poster_N : N;-fun posterior_A : A;-fun posterior_N : N;-fun posterity_N : N;-fun postern_N : N;-fun postgraduate_A : A;-fun postgraduate_N : N;-fun posthumous_A : A;-fun posthumously_Adv : Adv;-fun postilion_N : N;-fun postillion_N : N;-fun postman_N : N;-fun postmark_N : N;-fun postmark_V2 : V2;-fun postmaster_N : N;-fun postmistress_N : N;-fun postpone_V2 : V2;-fun postponement_N : N;-fun postprandial_A : A;-fun postscript_N : N;-fun postulant_N : N;-fun postulate_N : N;-fun postulate_V2 : V2;-fun postural_A : A;-fun posture_N : N;-fun posture_V : V;-fun posture_V2 : V2;-fun posturing_N : N;-fun posy_N : N;-fun pot_N : N;-fun pot_V : V;-fun pot_V2 : V2;-fun pot_shot_N : N;-fun pot_trained_A : A;-fun potable_A : A;-fun potash_N : N;-fun potassium_N : N;-fun potation_N : N;-fun potato_N : N;-fun potbellied_A : A;-fun potbelly_N : N;-fun potboiler_N : N;-fun potbound_A : A;-fun potboy_N : N;-fun poteen_N : N;-fun potency_N : N;-fun potent_A : A;-fun potentate_N : N;-fun potential_A : A;-fun potential_N : N;-fun potentiality_N : N;-fun potentially_Adv : Adv;-fun potently_Adv : Adv;-fun pothead_N : N;-fun pother_N : N;-fun potherb_N : N;-fun pothole_N : N;-fun potholer_N : N;-fun pothook_N : N;-fun pothouse_N : N;-fun pothunter_N : N;-fun potion_N : N;-fun potman_N : N;-fun potpourri_N : N;-fun potsdam_PN : PN;-fun potsherd_N : N;-fun pottage_N : N;-fun potted_A : A;-fun potter_N : N;-fun potter_V : V;-fun potterer_N : N;-fun potters_bar_PN : PN;-fun pottery_N : N;-fun potty_A : A;-fun potty_N : N;-fun pouch_N : N;-fun pouch_V2 : V2;-fun pouf_N : N;-fun pouffe_N : N;-fun poulterer_N : N;-fun poultice_N : N;-fun poultice_V2 : V2;-fun pounce_N : N;-fun pounce_V : V;-fun pound_N : N;-fun pound_V : V;-fun pound_V2 : V2;-fun poundage_N : N;-fun pounder_N : N;-fun pour_V : V;-fun pour_V2 : V2;-fun pout_N : N;-fun pout_V : V;-fun pout_V2 : V2;-fun poutingly_Adv : Adv;-fun poverty_N : N;-fun poverty_stricken_A : A;-fun pow_N : N;-fun powder_N : N;-fun powder_V : V;-fun powder_V2 : V2;-fun powder_flask_N : N;-fun powder_horn_N : N;-fun powder_magazine_N : N;-fun powder_puff_N : N;-fun powder_room_N : N;-fun powdered_A : A;-fun powdery_A : A;-fun power_N : N;-fun power_V2 : V2;-fun power_dive_N : N;-fun power_dive_V2 : V2;-fun power_point_N : N;-fun power_station_N : N;-fun powerboat_N : N;-fun powered_A : A;-fun powerful_A : A;-fun powerfully_Adv : Adv;-fun powerhouse_N : N;-fun powerless_A : A;-fun powerlessly_Adv : Adv;-fun powwow_N : N;-fun powwow_V : V;-fun powys_PN : PN;-fun pox_N : N;-fun poynton_PN : PN;-fun poznan_PN : PN;-fun pp_N : N;-fun pr_N : N;-fun practicability_N : N;-fun practicable_A : A;-fun practicably_Adv : Adv;-fun practical_A : A;-fun practicality_N : N;-fun practically_Adv : Adv;-fun practice_N : N;-fun practician_N : N;-fun practise_V : V;-fun practise_V2 : V2;-fun practised_A : A;-fun practitioner_N : N;-fun praesidium_N : N;-fun praetor_N : N;-fun praetorian_A : A;-fun pragmatic_A : A;-fun pragmatically_Adv : Adv;-fun pragmatism_N : N;-fun pragmatist_N : N;-fun prague_PN : PN;-fun prairie_N : N;-fun praise_N : N;-fun praise_V2 : V2;-fun praiseworthily_Adv : Adv;-fun praiseworthiness_N : N;-fun praiseworthy_A : A;-fun pram_N : N;-fun prance_N : N;-fun prance_V : V;-fun prank_N : N;-fun prate_V : V;-fun prato_PN : PN;-fun prattle_N : N;-fun prattle_V : V;-fun prattler_N : N;-fun prawn_N : N;-fun prawn_V : V;-fun pray_V : V;-fun pray_V2 : V2;-fun prayer_N : N;-fun prayer_book_N : N;-fun prayer_mat_N : N;-fun prayer_meeting_N : N;-fun prayer_rug_N : N;-fun prayer_wheel_N : N;-fun pre_eminence_N : N;-fun pre_eminent_A : A;-fun pre_eminently_Adv : Adv;-fun pre_empt_V2 : V2;-fun pre_emption_N : N;-fun pre_emptive_A : A;-fun pre_exist_V : V;-fun pre_existence_N : N;-fun pre_existent_A : A;-fun pre_packaged_A : A;-fun pre_raphaelite_A : A;-fun pre_raphaelite_N : N;-fun preach_V : V;-fun preach_V2 : V2;-fun preacher_N : N;-fun preachify_V : V;-fun preamble_N : N;-fun prearrange_V2 : V2;-fun prearrangement_N : N;-fun prebend_N : N;-fun prebendary_N : N;-fun precarious_A : A;-fun precariously_Adv : Adv;-fun precariousness_N : N;-fun precast_A : A;-fun precaution_N : N;-fun precautionary_A : A;-fun precede_V : V;-fun precede_V2 : V2;-fun precedence_N : N;-fun precedent_N : N;-fun precedented_A : A;-fun preceding_A : A;-fun precentor_N : N;-fun precept_N : N;-fun preceptor_N : N;-fun precession_N : N;-fun precinct_N : N;-fun preciosity_N : N;-fun precious_A : A;-fun precious_Adv : Adv;-fun preciously_Adv : Adv;-fun preciousness_N : N;-fun precipice_N : N;-fun precipitate_A : A;-fun precipitate_N : N;-fun precipitate_V2 : V2;-fun precipitately_Adv : Adv;-fun precipitation_N : N;-fun precipitous_A : A;-fun precipitously_Adv : Adv;-fun precise_A : A;-fun precisely_Adv : Adv;-fun preciseness_N : N;-fun precision_N : N;-fun preclude_V2 : V2;-fun preclusion_N : N;-fun precocious_A : A;-fun precociously_Adv : Adv;-fun precociousness_N : N;-fun precocity_N : N;-fun precognition_N : N;-fun preconceive_V2 : V2;-fun preconception_N : N;-fun preconcerted_A : A;-fun precondition_N : N;-fun preconditioned_A : A;-fun precursor_N : N;-fun precursory_A : A;-fun predator_N : N;-fun predatory_A : A;-fun predecease_V2 : V2;-fun predecessor_N : N;-fun predestinate_A : A;-fun predestinate_V2 : V2;-fun predestination_N : N;-fun predestine_V2 : V2;-fun predetermination_N : N;-fun predetermine_V2 : V2;-fun predicament_N : N;-fun predicate_N : N;-fun predicate_V2 : V2;-fun predicative_A : A;-fun predict_V2 : V2;-fun predictability_N : N;-fun predictable_A : A;-fun predictably_Adv : Adv;-fun prediction_N : N;-fun predictor_N : N;-fun predigest_V2 : V2;-fun predilection_N : N;-fun predispose_V2 : V2;-fun predisposition_N : N;-fun predominance_N : N;-fun predominant_A : A;-fun predominantly_Adv : Adv;-fun predominate_V : V;-fun preen_V2 : V2;-fun prefab_N : N;-fun prefabricate_V2 : V2;-fun prefabrication_N : N;-fun preface_N : N;-fun preface_V2 : V2;-fun prefatory_A : A;-fun prefect_N : N;-fun prefectural_A : A;-fun prefecture_N : N;-fun prefer_V2 : V2;-fun preferable_A : A;-fun preferably_Adv : Adv;-fun preference_N : N;-fun preferential_A : A;-fun preferment_N : N;-fun prefigure_V2 : V2;-fun prefix_N : N;-fun prefix_V2 : V2;-fun pregnancy_N : N;-fun pregnant_A : A;-fun preheat_V2 : V2;-fun prehensile_A : A;-fun prehistoric_A : A;-fun prehistorical_A : A;-fun prehistory_N : N;-fun prejudge_V2 : V2;-fun prejudgement_N : N;-fun prejudice_N : N;-fun prejudice_V2 : V2;-fun prejudicial_A : A;-fun prelacy_N : N;-fun prelate_N : N;-fun prelim_N : N;-fun preliminary_A : A;-fun preliminary_N : N;-fun prelude_N : N;-fun prelude_V2 : V2;-fun premarital_A : A;-fun premature_A : A;-fun prematurely_Adv : Adv;-fun premeditate_V2 : V2;-fun premeditation_N : N;-fun premier_A : A;-fun premier_N : N;-fun premiership_N : N;-fun premise_N : N;-fun premise_V2 : V2;-fun premiss_N : N;-fun premiss_V2 : V2;-fun premium_N : N;-fun premiere_N : N;-fun premonition_N : N;-fun premonitory_A : A;-fun prenatal_A : A;-fun prentice_N : N;-fun preoccupation_N : N;-fun preoccupy_V2 : V2;-fun preordain_V2 : V2;-fun prep_N : N;-fun prepacked_A : A;-fun preparation_N : N;-fun preparatory_A : A;-fun prepare_V : V;-fun prepare_V2 : V2;-fun preparedness_N : N;-fun prepay_V2 : V2;-fun preponderance_N : N;-fun preponderant_A : A;-fun preponderantly_Adv : Adv;-fun preponderate_V : V;-fun preposition_N : N;-fun prepositional_A : A;-fun prepossess_V2 : V2;-fun prepossessing_A : A;-fun prepossession_N : N;-fun preposterous_A : A;-fun preposterously_Adv : Adv;-fun prepuce_N : N;-fun prerecord_V2 : V2;-fun prerequisite_A : A;-fun prerequisite_N : N;-fun prerogative_N : N;-fun pres_N : N;-fun presage_N : N;-fun presage_V2 : V2;-fun presbyter_N : N;-fun presbyterian_A : A;-fun presbyterian_N : N;-fun presbyterianism_N : N;-fun presbytery_N : N;-fun prescience_N : N;-fun prescient_A : A;-fun presciently_Adv : Adv;-fun prescot_PN : PN;-fun prescribe_V : V;-fun prescribe_V2 : V2;-fun prescript_N : N;-fun prescription_N : N;-fun prescriptive_A : A;-fun presence_N : N;-fun present_A : A;-fun present_N : N;-fun present_V2 : V2;-fun present_day_A : A;-fun presentable_A : A;-fun presentably_Adv : Adv;-fun presentation_N : N;-fun presentiment_N : N;-fun presently_Adv : Adv;-fun preservable_A : A;-fun preservation_N : N;-fun preservative_A : A;-fun preservative_N : N;-fun preserve_N : N;-fun preserve_V2 : V2;-fun preserver_N : N;-fun preside_V : V;-fun presidency_N : N;-fun president_N : N;-fun presidential_A : A;-fun presidium_N : N;-fun press_N : N;-fun press_V : V;-fun press_V2 : V2;-fun press_agency_N : N;-fun press_agent_N : N;-fun press_box_N : N;-fun press_clipping_N : N;-fun press_cutting_N : N;-fun press_gallery_N : N;-fun press_gang_N : N;-fun press_lord_N : N;-fun press_photographer_N : N;-fun press_stud_N : N;-fun press_up_N : N;-fun pressing_A : A;-fun pressing_N : N;-fun pressingly_Adv : Adv;-fun pressman_N : N;-fun pressmark_N : N;-fun pressure_N : N;-fun pressure_cooker_N : N;-fun pressure_gauge_N : N;-fun pressurized_A : A;-fun prestatyn_PN : PN;-fun prestidigitation_N : N;-fun prestidigitator_N : N;-fun prestige_N : N;-fun prestigious_A : A;-fun prestissimo_A : A;-fun prestissimo_Adv : Adv;-fun presto_A : A;-fun presto_Adv : Adv;-fun preston_PN : PN;-fun prestonpans_PN : PN;-fun prestressed_A : A;-fun prestwich_PN : PN;-fun prestwick_PN : PN;-fun presumable_A : A;-fun presumably_Adv : Adv;-fun presume_V : V;-fun presume_V2 : V2;-fun presuming_A : A;-fun presumption_N : N;-fun presumptive_A : A;-fun presumptively_Adv : Adv;-fun presumptuous_A : A;-fun presumptuously_Adv : Adv;-fun presuppose_V2 : V2;-fun presupposition_N : N;-fun pretence_N : N;-fun pretend_V : V;-fun pretend_V2 : V2;-fun pretendedly_Adv : Adv;-fun pretender_N : N;-fun pretension_N : N;-fun pretentious_A : A;-fun pretentiously_Adv : Adv;-fun pretentiousness_N : N;-fun preterit_A : A;-fun preterit_N : N;-fun preterite_A : A;-fun preterite_N : N;-fun preternatural_A : A;-fun preternaturally_Adv : Adv;-fun pretext_N : N;-fun pretor_N : N;-fun pretoria_PN : PN;-fun prettify_V2 : V2;-fun prettily_Adv : Adv;-fun prettiness_N : N;-fun pretty_A : A;-fun pretty_Adv : Adv;-fun pretty_N : N;-fun pretty_pretty_A : A;-fun pretzel_N : N;-fun prevail_V : V;-fun prevailing_A : A;-fun prevalence_N : N;-fun prevalent_A : A;-fun prevaricate_V : V;-fun prevarication_N : N;-fun prevent_V2 : V2;-fun preventable_A : A;-fun preventative_N : N;-fun prevention_N : N;-fun preventive_A : A;-fun preview_N : N;-fun preview_V2 : V2;-fun previous_A : A;-fun previously_Adv : Adv;-fun prevision_N : N;-fun prey_N : N;-fun prey_V : V;-fun price_N : N;-fun price_V2 : V2;-fun price_control_N : N;-fun price_controlled_A : A;-fun priceless_A : A;-fun pricelist_N : N;-fun pricey_A : A;-fun prick_N : N;-fun prick_V : V;-fun prick_V2 : V2;-fun pricker_N : N;-fun pricking_N : N;-fun prickle_N : N;-fun prickle_V : V;-fun prickle_V2 : V2;-fun prickly_A : A;-fun pride_N : N;-fun pride_V2 : V2;-fun prie_dieu_N : N;-fun priest_N : N;-fun priest_ridden_A : A;-fun priestcraft_N : N;-fun priestess_N : N;-fun priesthood_N : N;-fun priestlike_A : A;-fun priestly_A : A;-fun prig_N : N;-fun priggish_A : A;-fun priggishly_Adv : Adv;-fun priggishness_N : N;-fun prim_A : A;-fun prim_V2 : V2;-fun prima_A : A;-fun prima_ballerina_N : N;-fun prima_donna_N : N;-fun prima_facie_A : A;-fun prima_facie_Adv : Adv;-fun primacy_N : N;-fun primaeval_A : A;-fun primal_A : A;-fun primarily_Adv : Adv;-fun primary_A : A;-fun primary_N : N;-fun primate_N : N;-fun prime_A : A;-fun prime_N : N;-fun prime_V2 : V2;-fun primer_N : N;-fun primeval_A : A;-fun priming_N : N;-fun primitive_A : A;-fun primitive_N : N;-fun primitively_Adv : Adv;-fun primitiveness_N : N;-fun primly_Adv : Adv;-fun primness_N : N;-fun primogeniture_N : N;-fun primordial_A : A;-fun primp_V2 : V2;-fun primrose_N : N;-fun primula_N : N;-fun primus_N : N;-fun prince_N : N;-fun princedom_N : N;-fun princely_A : A;-fun princes_risborough_PN : PN;-fun princess_N : N;-fun principal_A : A;-fun principal_N : N;-fun principality_N : N;-fun principally_Adv : Adv;-fun principle_N : N;-fun principled_A : A;-fun prink_V2 : V2;-fun print_N : N;-fun print_V : V;-fun print_V2 : V2;-fun print_seller_N : N;-fun print_shop_N : N;-fun printable_A : A;-fun printer_N : N;-fun printing_N : N;-fun printing_ink_N : N;-fun printing_press_N : N;-fun printout_N : N;-fun prior_A : A;-fun prior_N : N;-fun prioress_N : N;-fun priority_N : N;-fun priory_N : N;-fun priscilla_PN : PN;-fun prise_V2 : V2;-fun prism_N : N;-fun prismatic_A : A;-fun prison_N : N;-fun prison_breaking_N : N;-fun prisoner_N : N;-fun pristine_A : A;-fun privacy_N : N;-fun private_A : A;-fun private_N : N;-fun privateer_N : N;-fun privately_Adv : Adv;-fun privation_N : N;-fun privet_N : N;-fun privilege_N : N;-fun privileged_A : A;-fun privily_Adv : Adv;-fun privy_A : A;-fun privy_N : N;-fun prize_N : N;-fun prize_V2 : V2;-fun prize_fight_N : N;-fun prize_money_N : N;-fun prize_ring_N : N;-fun pro_Adv : Adv;-fun pro_N : N;-fun pro_forma_A : A;-fun pro_forma_Adv : Adv;-fun pro_rata_Adv : Adv;-fun pro_tem_Adv : Adv;-fun pro_tempore_Adv : Adv;-fun probabilistic_A : A;-fun probabilistically_Adv : Adv;-fun probability_N : N;-fun probable_A : A;-fun probable_N : N;-fun probably_Adv : Adv;-fun probate_N : N;-fun probate_V2 : V2;-fun probation_N : N;-fun probationary_A : A;-fun probationer_N : N;-fun probe_N : N;-fun probe_V2 : V2;-fun probity_N : N;-fun problem_N : N;-fun problematic_A : A;-fun problematically_Adv : Adv;-fun proboscis_N : N;-fun procedural_A : A;-fun procedure_N : N;-fun proceed_V : V;-fun proceeding_N : N;-fun process_N : N;-fun process_V : V;-fun process_V2 : V2;-fun process_server_N : N;-fun procession_N : N;-fun processional_A : A;-fun processor_N : N;-fun proclaim_V2 : V2;-fun proclamation_N : N;-fun proclivity_N : N;-fun proconsul_N : N;-fun proconsular_A : A;-fun proconsulate_N : N;-fun procrastinate_V : V;-fun procrastination_N : N;-fun procreate_V2 : V2;-fun procreation_N : N;-fun proctor_N : N;-fun procurable_A : A;-fun procurator_N : N;-fun procure_V2 : V2;-fun procurement_N : N;-fun procurer_N : N;-fun procuress_N : N;-fun prod_N : N;-fun prod_V : V;-fun prod_V2 : V2;-fun prodigal_A : A;-fun prodigal_N : N;-fun prodigality_N : N;-fun prodigally_Adv : Adv;-fun prodigious_A : A;-fun prodigiously_Adv : Adv;-fun prodigy_N : N;-fun produce_N : N;-fun produce_V : V;-fun produce_V2 : V2;-fun producer_N : N;-fun product_N : N;-fun production_N : N;-fun productive_A : A;-fun productively_Adv : Adv;-fun productivity_N : N;-fun prof_PN : PN;-fun profanation_N : N;-fun profane_A : A;-fun profane_V2 : V2;-fun profanely_Adv : Adv;-fun profaneness_N : N;-fun profanity_N : N;-fun profess_V : V;-fun profess_V2 : V2;-fun professed_A : A;-fun professedly_Adv : Adv;-fun profession_N : N;-fun professional_A : A;-fun professional_N : N;-fun professionalism_N : N;-fun professionally_Adv : Adv;-fun professor_N : N;-fun professorial_A : A;-fun professorship_N : N;-fun proffer_N : N;-fun proffer_V2 : V2;-fun proficiency_N : N;-fun proficient_A : A;-fun proficiently_Adv : Adv;-fun profile_N : N;-fun profile_V2 : V2;-fun profit_N : N;-fun profit_V : V;-fun profit_V2 : V2;-fun profit_margin_N : N;-fun profit_sharing_N : N;-fun profitable_A : A;-fun profitably_Adv : Adv;-fun profiteer_N : N;-fun profiteer_V : V;-fun profitless_A : A;-fun profitlessly_Adv : Adv;-fun profligacy_N : N;-fun profligate_A : A;-fun profligate_N : N;-fun profound_A : A;-fun profoundly_Adv : Adv;-fun profundity_N : N;-fun profuse_A : A;-fun profusely_Adv : Adv;-fun profuseness_N : N;-fun profusion_N : N;-fun progenitor_N : N;-fun prognosis_N : N;-fun prognostic_A : A;-fun prognostic_N : N;-fun prognosticate_V2 : V2;-fun prognostication_N : N;-fun program_N : N;-fun program_V2 : V2;-fun programme_N : N;-fun programme_V2 : V2;-fun programmer_N : N;-fun progress_N : N;-fun progress_V : V;-fun progression_N : N;-fun progressive_A : A;-fun progressive_N : N;-fun progressively_Adv : Adv;-fun progressiveness_N : N;-fun prohibit_V2 : V2;-fun prohibition_N : N;-fun prohibitionist_N : N;-fun prohibitive_A : A;-fun prohibitively_Adv : Adv;-fun prohibitory_A : A;-fun project_N : N;-fun project_V : V;-fun project_V2 : V2;-fun projectile_A : A;-fun projectile_N : N;-fun projection_N : N;-fun projectionist_N : N;-fun projector_N : N;-fun prolapse_N : N;-fun prolapse_V : V;-fun prole_N : N;-fun proletarian_A : A;-fun proletarian_N : N;-fun proletariat_N : N;-fun proliferate_V : V;-fun proliferate_V2 : V2;-fun proliferation_N : N;-fun prolific_A : A;-fun prolix_A : A;-fun prolixity_N : N;-fun prologue_N : N;-fun prolong_V2 : V2;-fun prolongation_N : N;-fun prolonged_A : A;-fun prom_N : N;-fun promenade_N : N;-fun promenade_V : V;-fun promenade_V2 : V2;-fun prominence_N : N;-fun prominent_A : A;-fun prominently_Adv : Adv;-fun promiscuity_N : N;-fun promiscuous_A : A;-fun promiscuously_Adv : Adv;-fun promise_N : N;-fun promise_V : V;-fun promise_V2 : V2;-fun promising_A : A;-fun promisingly_Adv : Adv;-fun promissory_A : A;-fun promontory_N : N;-fun promote_V2 : V2;-fun promoter_N : N;-fun promotion_N : N;-fun promotional_A : A;-fun prompt_A : A;-fun prompt_N : N;-fun prompt_V2 : V2;-fun prompt_box_N : N;-fun prompt_copy_N : N;-fun prompter_N : N;-fun prompting_N : N;-fun promptitude_N : N;-fun promptly_Adv : Adv;-fun promptness_N : N;-fun promulgate_V2 : V2;-fun promulgation_N : N;-fun prone_A : A;-fun proneness_N : N;-fun prong_N : N;-fun pronged_A : A;-fun pronominal_A : A;-fun pronoun_N : N;-fun pronounce_V : V;-fun pronounce_V2 : V2;-fun pronounceable_A : A;-fun pronounced_A : A;-fun pronouncement_N : N;-fun pronto_Adv : Adv;-fun pronunciamento_N : N;-fun pronunciation_N : N;-fun proof_A : A;-fun proof_N : N;-fun proof_V2 : V2;-fun proofread_V : V;-fun proofread_V2 : V2;-fun proofreader_N : N;-fun prop_N : N;-fun prop_V2 : V2;-fun propaganda_N : N;-fun propagandist_N : N;-fun propagandize_V : V;-fun propagate_V : V;-fun propagate_V2 : V2;-fun propagation_N : N;-fun propagator_N : N;-fun propane_N : N;-fun propel_V2 : V2;-fun propellant_A : A;-fun propellant_N : N;-fun propellent_A : A;-fun propellent_N : N;-fun propeller_N : N;-fun propensity_N : N;-fun proper_A : A;-fun properly_Adv : Adv;-fun propertied_A : A;-fun property_N : N;-fun property_man_N : N;-fun property_master_N : N;-fun prophecy_N : N;-fun prophesy_V : V;-fun prophesy_V2 : V2;-fun prophet_N : N;-fun prophetess_N : N;-fun prophetic_A : A;-fun prophetical_A : A;-fun prophetically_Adv : Adv;-fun prophylactic_A : A;-fun prophylactic_N : N;-fun prophylaxis_N : N;-fun propinquity_N : N;-fun propitiate_V2 : V2;-fun propitiation_N : N;-fun propitiatory_A : A;-fun propitious_A : A;-fun propitiously_Adv : Adv;-fun proponent_N : N;-fun proportion_N : N;-fun proportion_V2 : V2;-fun proportionable_A : A;-fun proportional_A : A;-fun proportionality_N : N;-fun proportionally_Adv : Adv;-fun proportionate_A : A;-fun proportionately_Adv : Adv;-fun proposal_N : N;-fun propose_V : V;-fun propose_V2 : V2;-fun proposer_N : N;-fun proposition_N : N;-fun proposition_V2 : V2;-fun propound_V2 : V2;-fun proprietary_A : A;-fun proprietor_N : N;-fun proprietress_N : N;-fun propriety_N : N;-fun propulsion_N : N;-fun propulsive_A : A;-fun prorogation_N : N;-fun prorogue_V2 : V2;-fun prosaic_A : A;-fun prosaically_Adv : Adv;-fun proscenium_N : N;-fun proscribe_V2 : V2;-fun proscription_N : N;-fun prose_N : N;-fun prosecute_V2 : V2;-fun prosecution_N : N;-fun prosecutor_N : N;-fun proselyte_N : N;-fun proselytize_V : V;-fun proselytize_V2 : V2;-fun prosily_Adv : Adv;-fun prosiness_N : N;-fun prosody_N : N;-fun prospect_N : N;-fun prospect_V : V;-fun prospective_A : A;-fun prospector_N : N;-fun prospectus_N : N;-fun prosper_V : V;-fun prosper_V2 : V2;-fun prosperity_N : N;-fun prosperous_A : A;-fun prosperously_Adv : Adv;-fun prostate_N : N;-fun prostitute_N : N;-fun prostitute_V2 : V2;-fun prostitution_N : N;-fun prostrate_A : A;-fun prostrate_V2 : V2;-fun prostration_N : N;-fun prosy_A : A;-fun protagonist_N : N;-fun protean_A : A;-fun protect_V2 : V2;-fun protection_N : N;-fun protectionism_N : N;-fun protectionist_N : N;-fun protective_A : A;-fun protectively_Adv : Adv;-fun protector_N : N;-fun protectorate_N : N;-fun protein_N : N;-fun protest_N : N;-fun protest_V : V;-fun protest_V2 : V2;-fun protestant_A : A;-fun protestant_N : N;-fun protestantism_N : N;-fun protestation_N : N;-fun protester_N : N;-fun protestingly_Adv : Adv;-fun protocol_N : N;-fun proton_N : N;-fun protoplasm_N : N;-fun prototype_N : N;-fun protract_V2 : V2;-fun protraction_N : N;-fun protractor_N : N;-fun protrude_V : V;-fun protrude_V2 : V2;-fun protrusion_N : N;-fun protrusive_A : A;-fun protuberance_N : N;-fun protuberant_A : A;-fun protege_N : N;-fun protegee_N : N;-fun proud_A : A;-fun proudly_Adv : Adv;-fun provable_A : A;-fun prove_V : V;-fun prove_V2 : V2;-fun provenance_N : N;-fun provender_N : N;-fun proverb_N : N;-fun proverbial_A : A;-fun proverbially_Adv : Adv;-fun provide_V : V;-fun provide_V2 : V2;-fun providence_N : N;-fun providence_PN : PN;-fun provident_A : A;-fun providential_A : A;-fun providentially_Adv : Adv;-fun providently_Adv : Adv;-fun provider_N : N;-fun province_N : N;-fun provincial_A : A;-fun provincial_N : N;-fun provincialism_N : N;-fun provincially_Adv : Adv;-fun provision_N : N;-fun provision_V2 : V2;-fun provisional_A : A;-fun provisionally_Adv : Adv;-fun proviso_N : N;-fun provisory_A : A;-fun provocation_N : N;-fun provocative_A : A;-fun provocatively_Adv : Adv;-fun provoke_V2 : V2;-fun provoking_A : A;-fun provokingly_Adv : Adv;-fun provost_N : N;-fun prow_N : N;-fun prowess_N : N;-fun prowl_N : N;-fun prowl_V : V;-fun prowl_V2 : V2;-fun prowler_N : N;-fun prox_Adv : Adv;-fun proximate_A : A;-fun proximity_N : N;-fun proximo_A : A;-fun proxy_N : N;-fun pru_PN : PN;-fun prude_N : N;-fun prudence_N : N;-fun prudence_PN : PN;-fun prudent_A : A;-fun prudential_A : A;-fun prudently_Adv : Adv;-fun prudery_N : N;-fun prudhoe_PN : PN;-fun prudish_A : A;-fun prudishly_Adv : Adv;-fun prune_N : N;-fun prune_V2 : V2;-fun pruning_N : N;-fun pruning_hook_N : N;-fun pruning_knife_N : N;-fun pruning_saw_N : N;-fun prurience_N : N;-fun pruriency_N : N;-fun prurient_A : A;-fun pruriently_Adv : Adv;-fun prussian_A : A;-fun prussian_N : N;-fun prussic_A : A;-fun pry_V : V;-fun pry_V2 : V2;-fun pryingly_Adv : Adv;-fun precis_N : N;-fun precis_V2 : V2;-fun psalm_N : N;-fun psalmist_N : N;-fun psalmody_N : N;-fun psalter_N : N;-fun psaltery_N : N;-fun psephologist_N : N;-fun psephology_N : N;-fun pseud_N : N;-fun pseudo_A : A;-fun pseudo_N : N;-fun pseudonym_N : N;-fun pseudonymous_A : A;-fun psittacosis_N : N;-fun psyche_N : N;-fun psychedelic_A : A;-fun psychiatric_A : A;-fun psychiatrist_N : N;-fun psychiatry_N : N;-fun psychic_A : A;-fun psychic_N : N;-fun psychical_A : A;-fun psychoanalyse_V2 : V2;-fun psychoanalysis_N : N;-fun psychoanalyst_N : N;-fun psychoanalytic_A : A;-fun psychoanalytical_A : A;-fun psychoanalyze_V2 : V2;-fun psychological_A : A;-fun psychologically_Adv : Adv;-fun psychologist_N : N;-fun psychology_N : N;-fun psychopath_N : N;-fun psychopathic_A : A;-fun psychosis_N : N;-fun psychosomatic_A : A;-fun psychotherapy_N : N;-fun psychotic_N : N;-fun pt_N : N;-fun pta_N : N;-fun ptarmigan_N : N;-fun pte_PN : PN;-fun pterodactyl_N : N;-fun pto_PN : PN;-fun ptomaine_N : N;-fun pty_PN : PN;-fun pub_N : N;-fun pub_crawl_N : N;-fun pub_crawl_V : V;-fun puberty_N : N;-fun pubic_A : A;-fun public_A : A;-fun public_N : N;-fun public_spirited_A : A;-fun publican_N : N;-fun publication_N : N;-fun publicist_N : N;-fun publicity_N : N;-fun publicize_V2 : V2;-fun publicly_Adv : Adv;-fun publish_V2 : V2;-fun publisher_N : N;-fun puce_N : N;-fun puck_N : N;-fun pucker_N : N;-fun pucker_V : V;-fun pucker_V2 : V2;-fun puckish_A : A;-fun puckishly_Adv : Adv;-fun pud_N : N;-fun pudden_N : N;-fun pudden_head_N : N;-fun pudding_N : N;-fun pudding_face_N : N;-fun puddle_N : N;-fun puddle_V2 : V2;-fun puddler_N : N;-fun pudgy_A : A;-fun pudsey_PN : PN;-fun pueblo_N : N;-fun puerile_A : A;-fun puerility_N : N;-fun puerperal_A : A;-fun puff_N : N;-fun puff_V : V;-fun puff_V2 : V2;-fun puffball_N : N;-fun puffin_N : N;-fun puffiness_N : N;-fun puffy_A : A;-fun pug_N : N;-fun pug_dog_N : N;-fun pug_nose_A : A;-fun pug_nose_N : N;-fun pug_nosed_A : A;-fun pugilism_N : N;-fun pugilist_N : N;-fun pugilistic_A : A;-fun pugnacious_A : A;-fun pugnaciously_Adv : Adv;-fun pugnacity_N : N;-fun puissance_N : N;-fun puissant_A : A;-fun puke_N : N;-fun puke_V : V;-fun puke_V2 : V2;-fun pukka_A : A;-fun pulchritude_N : N;-fun pulchritudinous_A : A;-fun pule_V : V;-fun pull_N : N;-fun pull_V : V;-fun pull_V2 : V2;-fun pull_in_N : N;-fun pull_off_N : N;-fun pull_out_N : N;-fun pull_through_N : N;-fun pull_up_N : N;-fun pullet_N : N;-fun pulley_N : N;-fun pulley_block_N : N;-fun pullman_N : N;-fun pullover_N : N;-fun pullulate_V : V;-fun pulmonary_A : A;-fun pulp_N : N;-fun pulp_V : V;-fun pulp_V2 : V2;-fun pulpit_N : N;-fun pulpy_A : A;-fun pulque_N : N;-fun pulsar_N : N;-fun pulsate_V : V;-fun pulsate_V2 : V2;-fun pulsation_N : N;-fun pulse_N : N;-fun pulse_V : V;-fun pulverize_V : V;-fun pulverize_V2 : V2;-fun puma_N : N;-fun pumice_N : N;-fun pumice_stone_N : N;-fun pummel_V2 : V2;-fun pump_N : N;-fun pump_V : V;-fun pump_V2 : V2;-fun pump_room_N : N;-fun pumpernickel_N : N;-fun pumpkin_N : N;-fun pun_N : N;-fun pun_V : V;-fun punch_N : N;-fun punch_V2 : V2;-fun punch_drunk_A : A;-fun punch_up_N : N;-fun punchball_N : N;-fun punchbowl_N : N;-fun punching_ball_N : N;-fun punctilio_N : N;-fun punctilious_A : A;-fun punctiliously_Adv : Adv;-fun punctiliousness_N : N;-fun punctual_A : A;-fun punctuality_N : N;-fun punctually_Adv : Adv;-fun punctuate_V2 : V2;-fun punctuation_N : N;-fun puncture_N : N;-fun puncture_V : V;-fun puncture_V2 : V2;-fun pundit_N : N;-fun pungency_N : N;-fun pungent_A : A;-fun pungently_Adv : Adv;-fun punic_A : A;-fun punily_Adv : Adv;-fun punish_V2 : V2;-fun punishable_A : A;-fun punishment_N : N;-fun punitive_A : A;-fun punk_N : N;-fun punkah_N : N;-fun punnet_N : N;-fun punster_N : N;-fun punt_N : N;-fun punt_V : V;-fun punt_V2 : V2;-fun punter_N : N;-fun puny_A : A;-fun pup_N : N;-fun pupa_N : N;-fun pupil_N : N;-fun puppet_N : N;-fun puppeteer_N : N;-fun puppy_N : N;-fun purblind_A : A;-fun purchasable_A : A;-fun purchase_N : N;-fun purchase_V2 : V2;-fun purchaser_N : N;-fun purdah_N : N;-fun pure_A : A;-fun purely_Adv : Adv;-fun pureness_N : N;-fun purgation_N : N;-fun purgative_A : A;-fun purgative_N : N;-fun purgatorial_A : A;-fun purgatory_N : N;-fun purge_N : N;-fun purge_V2 : V2;-fun purification_N : N;-fun purifier_N : N;-fun purify_V2 : V2;-fun purist_N : N;-fun puritan_A : A;-fun puritan_N : N;-fun puritanical_A : A;-fun puritanically_Adv : Adv;-fun puritanism_N : N;-fun purity_N : N;-fun purl_N : N;-fun purl_V : V;-fun purl_V2 : V2;-fun purloin_V2 : V2;-fun purple_A : A;-fun purple_N : N;-fun purplish_A : A;-fun purport_N : N;-fun purport_V2 : V2;-fun purpose_N : N;-fun purpose_V2 : V2;-fun purpose_built_A : A;-fun purposeful_A : A;-fun purposefully_Adv : Adv;-fun purposeless_A : A;-fun purposelessly_Adv : Adv;-fun purposely_Adv : Adv;-fun purposive_A : A;-fun purr_N : N;-fun purr_V : V;-fun purr_V2 : V2;-fun purse_N : N;-fun purse_V2 : V2;-fun purse_proud_A : A;-fun purser_N : N;-fun pursuance_N : N;-fun pursuant_A : A;-fun pursue_V2 : V2;-fun pursuer_N : N;-fun pursuit_N : N;-fun pursy_A : A;-fun purulence_N : N;-fun purulent_A : A;-fun purvey_V : V;-fun purvey_V2 : V2;-fun purveyance_N : N;-fun purveyor_N : N;-fun purview_N : N;-fun puree_N : N;-fun pus_N : N;-fun pusan_PN : PN;-fun push_N : N;-fun push_V : V;-fun push_V2 : V2;-fun push_bike_N : N;-fun pushcart_N : N;-fun pushchair_N : N;-fun pusher_N : N;-fun pushful_A : A;-fun pushing_A : A;-fun pushover_N : N;-fun pusillanimity_N : N;-fun pusillanimous_A : A;-fun puss_N : N;-fun pussy_N : N;-fun pussycat_N : N;-fun pussyfoot_V : V;-fun pustule_N : N;-fun put_N : N;-fun put_V : V;-fun put_V2 : V2;-fun put_down_N : N;-fun put_on_N : N;-fun putative_A : A;-fun putrefaction_N : N;-fun putrefy_V : V;-fun putrefy_V2 : V2;-fun putrescence_N : N;-fun putrescent_A : A;-fun putrid_A : A;-fun putridity_N : N;-fun putsch_N : N;-fun putt_N : N;-fun putt_V : V;-fun putt_V2 : V2;-fun puttee_N : N;-fun putter_V : V;-fun putter_V2 : V2;-fun putting_green_N : N;-fun putting_iron_N : N;-fun putty_N : N;-fun putty_V2 : V2;-fun puzzle_N : N;-fun puzzle_V : V;-fun puzzle_V2 : V2;-fun puzzlement_N : N;-fun puzzler_N : N;-fun pwllheli_PN : PN;-fun pygmy_N : N;-fun pyjama_A : A;-fun pyle_PN : PN;-fun pylon_N : N;-fun pyongyang_PN : PN;-fun pyorrhoea_N : N;-fun pyramid_N : N;-fun pyre_N : N;-fun pyrites_N : N;-fun pyrotechnic_A : A;-fun pyrrhic_A : A;-fun python_N : N;-fun pyx_N : N;-fun pate_2_N : N;-fun qatar_PN : PN;-fun qatari_A : A;-fun qatari_N : N;-fun qc_N : N;-fun qed_PN : PN;-fun qt_N : N;-fun quack_N : N;-fun quack_V : V;-fun quack_quack_N : N;-fun quackery_N : N;-fun quad_N : N;-fun quadrangle_N : N;-fun quadrangular_A : A;-fun quadrant_N : N;-fun quadratic_A : A;-fun quadrilateral_A : A;-fun quadrilateral_N : N;-fun quadrille_N : N;-fun quadrillion_N : N;-fun quadrophonic_A : A;-fun quadrophony_N : N;-fun quadruped_N : N;-fun quadruple_A : A;-fun quadruple_N : N;-fun quadruple_V : V;-fun quadruple_V2 : V2;-fun quadruplet_N : N;-fun quadruplicate_A : A;-fun quadruplicate_N : N;-fun quadruplicate_V2 : V2;-fun quaff_V : V;-fun quaff_V2 : V2;-fun quagga_N : N;-fun quagmire_N : N;-fun quai_d'orsay_N : N;-fun quail_N : N;-fun quail_V : V;-fun quaint_A : A;-fun quaintly_Adv : Adv;-fun quaintness_N : N;-fun quake_N : N;-fun quake_V : V;-fun quaker_N : N;-fun qualification_N : N;-fun qualified_A : A;-fun qualifier_N : N;-fun qualify_V : V;-fun qualify_V2 : V2;-fun qualitative_A : A;-fun qualitatively_Adv : Adv;-fun quality_N : N;-fun qualm_N : N;-fun quandary_N : N;-fun quango_N : N;-fun quantify_V2 : V2;-fun quantitative_A : A;-fun quantitatively_Adv : Adv;-fun quantity_N : N;-fun quantum_N : N;-fun quarantine_N : N;-fun quarantine_V2 : V2;-fun quark_N : N;-fun quarrel_N : N;-fun quarrel_V : V;-fun quarrelsome_A : A;-fun quarry_N : N;-fun quarry_V : V;-fun quarry_V2 : V2;-fun quarryman_N : N;-fun quart_N : N;-fun quarter_N : N;-fun quarter_V2 : V2;-fun quarter_day_N : N;-fun quarter_deck_N : N;-fun quarter_plate_N : N;-fun quarterfinal_N : N;-fun quartering_N : N;-fun quarterlight_N : N;-fun quarterly_A : A;-fun quarterly_Adv : Adv;-fun quarterly_N : N;-fun quartermaster_N : N;-fun quartermaster_general_N : N;-fun quarterstaff_N : N;-fun quartet_N : N;-fun quarto_N : N;-fun quartz_N : N;-fun quasar_N : N;-fun quash_V2 : V2;-fun quassia_N : N;-fun quatercentenary_N : N;-fun quatrain_N : N;-fun quattrocento_N : N;-fun quaver_N : N;-fun quaver_V : V;-fun quaver_V2 : V2;-fun quay_N : N;-fun queasily_Adv : Adv;-fun queasiness_N : N;-fun queasy_A : A;-fun quebec_PN : PN;-fun queen_N : N;-fun queen_V2 : V2;-fun queenborough_in_sheppey_PN : PN;-fun queenly_A : A;-fun queensbury_PN : PN;-fun queensferry_PN : PN;-fun queensland_PN : PN;-fun queer_A : A;-fun queer_N : N;-fun queer_V2 : V2;-fun queerly_Adv : Adv;-fun queerness_N : N;-fun quell_V2 : V2;-fun quench_V2 : V2;-fun quenchless_A : A;-fun quentin_PN : PN;-fun quern_N : N;-fun querulous_A : A;-fun querulously_Adv : Adv;-fun querulousness_N : N;-fun query_N : N;-fun query_V2 : V2;-fun quest_N : N;-fun quest_V : V;-fun question_N : N;-fun question_V2 : V2;-fun question_mark_N : N;-fun question_master_N : N;-fun questionable_A : A;-fun questionably_Adv : Adv;-fun questioner_N : N;-fun questioningly_Adv : Adv;-fun questionnaire_N : N;-fun quetzal_N : N;-fun queue_N : N;-fun queue_V : V;-fun qui_vive_N : N;-fun quibble_N : N;-fun quibble_V : V;-fun quibbler_N : N;-fun quibbling_A : A;-fun quiche_N : N;-fun quick_A : A;-fun quick_Adv : Adv;-fun quick_N : N;-fun quick_change_A : A;-fun quick_eared_A : A;-fun quick_eyed_A : A;-fun quick_freeze_V2 : V2;-fun quick_sighted_A : A;-fun quick_tempered_A : A;-fun quick_witted_A : A;-fun quicken_V : V;-fun quicken_V2 : V2;-fun quicker_Adv : Adv;-fun quickest_Adv : Adv;-fun quickie_N : N;-fun quicklime_N : N;-fun quickly_Adv : Adv;-fun quickness_N : N;-fun quicksand_N : N;-fun quickset_A : A;-fun quicksilver_N : N;-fun quickstep_N : N;-fun quid_N : N;-fun quid_pro_quo_N : N;-fun quiescence_N : N;-fun quiescent_A : A;-fun quiescently_Adv : Adv;-fun quiet_A : A;-fun quiet_N : N;-fun quiet_V : V;-fun quiet_V2 : V2;-fun quieten_V : V;-fun quieten_V2 : V2;-fun quietism_N : N;-fun quietist_N : N;-fun quietly_Adv : Adv;-fun quietness_N : N;-fun quietude_N : N;-fun quietus_N : N;-fun quiff_N : N;-fun quill_N : N;-fun quill_feather_N : N;-fun quilt_N : N;-fun quilt_V2 : V2;-fun quin_N : N;-fun quince_N : N;-fun quincentenary_A : A;-fun quincentenary_N : N;-fun quinine_N : N;-fun quinquagesima_N : N;-fun quinquagesima_PN : PN;-fun quinsy_N : N;-fun quintal_N : N;-fun quintessence_N : N;-fun quintet_N : N;-fun quintuplet_N : N;-fun quip_N : N;-fun quip_V : V;-fun quire_N : N;-fun quirk_N : N;-fun quisling_N : N;-fun quit_A : A;-fun quit_V2 : V2;-fun quito_PN : PN;-fun quits_A : A;-fun quittance_N : N;-fun quitter_N : N;-fun quiver_N : N;-fun quiver_V : V;-fun quiver_V2 : V2;-fun quixotic_A : A;-fun quixotically_Adv : Adv;-fun quiz_N : N;-fun quiz_V2 : V2;-fun quizmaster_N : N;-fun quizzical_A : A;-fun quizzically_Adv : Adv;-fun quoin_N : N;-fun quoit_N : N;-fun quonset_N : N;-fun quorum_N : N;-fun quota_N : N;-fun quotability_N : N;-fun quotable_A : A;-fun quotation_N : N;-fun quote_N : N;-fun quote_V2 : V2;-fun quotidian_A : A;-fun quotient_N : N;-fun qv_PN : PN;-fun ra_N : N;-fun rabbi_N : N;-fun rabbinical_A : A;-fun rabbit_N : N;-fun rabbit_V : V;-fun rabbit_burrow_N : N;-fun rabbit_hole_N : N;-fun rabbit_hutch_N : N;-fun rabbit_punch_N : N;-fun rabbit_warren_N : N;-fun rabble_N : N;-fun rabble_rousing_A : A;-fun rabelaisian_A : A;-fun rabid_A : A;-fun rabies_N : N;-fun raccoon_N : N;-fun race_N : N;-fun race_V : V;-fun race_V2 : V2;-fun race_meeting_N : N;-fun racecard_N : N;-fun racecourse_N : N;-fun racehorse_N : N;-fun raceme_N : N;-fun racer_N : N;-fun rachel_PN : PN;-fun racial_A : A;-fun racialism_N : N;-fun racialist_N : N;-fun racially_Adv : Adv;-fun racily_Adv : Adv;-fun raciness_N : N;-fun racing_N : N;-fun racism_N : N;-fun racist_N : N;-fun rack_N : N;-fun rack_V2 : V2;-fun rack_railway_N : N;-fun rack_rent_N : N;-fun racket_N : N;-fun racket_V : V;-fun racketeer_N : N;-fun racketeering_N : N;-fun raconteur_N : N;-fun racoon_N : N;-fun racquet_N : N;-fun racy_A : A;-fun rada_PN : PN;-fun radar_N : N;-fun radcliffe_PN : PN;-fun radcliffe_on_trent_PN : PN;-fun raddled_A : A;-fun radial_A : A;-fun radial_N : N;-fun radially_Adv : Adv;-fun radiance_N : N;-fun radiant_A : A;-fun radiantly_Adv : Adv;-fun radiate_V : V;-fun radiate_V2 : V2;-fun radiation_N : N;-fun radiator_N : N;-fun radical_A : A;-fun radical_N : N;-fun radicalism_N : N;-fun radically_Adv : Adv;-fun radicle_N : N;-fun radio_N : N;-fun radio_gramophone_N : N;-fun radio_location_N : N;-fun radio_set_N : N;-fun radio_telescope_N : N;-fun radioactive_A : A;-fun radioactivity_N : N;-fun radiogram_N : N;-fun radiograph_N : N;-fun radiographer_N : N;-fun radiography_N : N;-fun radioisotope_N : N;-fun radiologist_N : N;-fun radiology_N : N;-fun radiotherapist_N : N;-fun radiotherapy_N : N;-fun radish_N : N;-fun radium_N : N;-fun radius_N : N;-fun radlett_PN : PN;-fun radstock_PN : PN;-fun raf_N : N;-fun raffia_N : N;-fun raffish_A : A;-fun raffishly_Adv : Adv;-fun raffle_N : N;-fun raffle_V2 : V2;-fun raft_N : N;-fun raft_V : V;-fun raft_V2 : V2;-fun rafter_N : N;-fun raftered_A : A;-fun raftsman_N : N;-fun rag_N : N;-fun rag_V2 : V2;-fun rag_day_N : N;-fun ragamuffin_N : N;-fun ragbag_N : N;-fun rage_N : N;-fun rage_V : V;-fun ragged_A : A;-fun raggedly_Adv : Adv;-fun raggedness_N : N;-fun raglan_N : N;-fun ragout_N : N;-fun ragtag_N : N;-fun ragtime_N : N;-fun raid_N : N;-fun raid_V : V;-fun raid_V2 : V2;-fun raider_N : N;-fun rail_N : N;-fun rail_V : V;-fun rail_V2 : V2;-fun railcar_N : N;-fun railhead_N : N;-fun railing_N : N;-fun raillery_N : N;-fun railroad_N : N;-fun railroad_V2 : V2;-fun railway_N : N;-fun railwayman_N : N;-fun raiment_N : N;-fun rain_N : N;-fun rain_V : V;-fun rain_V2 : V2;-fun rain_gauge_N : N;-fun rainbow_N : N;-fun raincoat_N : N;-fun raindrop_N : N;-fun rainfall_N : N;-fun rainford_PN : PN;-fun rainproof_A : A;-fun rainwater_N : N;-fun rainy_A : A;-fun raise_N : N;-fun raise_V2 : V2;-fun raiser_N : N;-fun raisin_N : N;-fun raison_d'etre_N : N;-fun raj_N : N;-fun rajah_N : N;-fun rake_N : N;-fun rake_V : V;-fun rake_V2 : V2;-fun rake_off_N : N;-fun rakish_A : A;-fun rakishly_Adv : Adv;-fun rakishness_N : N;-fun rallentando_A : A;-fun rallentando_Adv : Adv;-fun rally_N : N;-fun rally_V : V;-fun rally_V2 : V2;-fun ralph_PN : PN;-fun ram_N : N;-fun ram_V2 : V2;-fun ramadan_N : N;-fun ramadan_PN : PN;-fun ramble_N : N;-fun ramble_V : V;-fun rambler_N : N;-fun rambling_A : A;-fun rambunctious_A : A;-fun ramification_N : N;-fun ramify_V : V;-fun ramify_V2 : V2;-fun ramjet_N : N;-fun ramp_N : N;-fun ramp_V2 : V2;-fun rampage_N : N;-fun rampage_V : V;-fun rampageous_A : A;-fun rampant_A : A;-fun rampantly_Adv : Adv;-fun rampart_N : N;-fun ramrod_N : N;-fun ramsbottom_PN : PN;-fun ramsgate_PN : PN;-fun ramshackle_A : A;-fun ranch_N : N;-fun rancher_N : N;-fun rancid_A : A;-fun rancorous_A : A;-fun rancour_N : N;-fun rand_N : N;-fun randolph_PN : PN;-fun random_N : N;-fun randomly_Adv : Adv;-fun randomness_N : N;-fun randy_A : A;-fun ranee_N : N;-fun range_N : N;-fun range_V : V;-fun range_V2 : V2;-fun rangefinder_N : N;-fun ranger_N : N;-fun rangoon_PN : PN;-fun rani_N : N;-fun rank_A : A;-fun rank_N : N;-fun rank_V : V;-fun rank_V2 : V2;-fun ranker_N : N;-fun ranking_N : N;-fun rankle_V : V;-fun rankly_Adv : Adv;-fun rankness_N : N;-fun ransack_V2 : V2;-fun ransom_N : N;-fun ransom_V2 : V2;-fun rant_N : N;-fun rant_V : V;-fun rant_V2 : V2;-fun ranter_N : N;-fun rap_N : N;-fun rap_V : V;-fun rap_V2 : V2;-fun rapacious_A : A;-fun rapaciously_Adv : Adv;-fun rapacity_N : N;-fun rape_N : N;-fun rape_V2 : V2;-fun rapid_A : A;-fun rapid_N : N;-fun rapidity_N : N;-fun rapidly_Adv : Adv;-fun rapier_N : N;-fun rapier_thrust_N : N;-fun rapine_N : N;-fun rapist_N : N;-fun rapport_N : N;-fun rapprochement_N : N;-fun rapscallion_N : N;-fun rapt_A : A;-fun rapture_N : N;-fun rapturous_A : A;-fun rapturously_Adv : Adv;-fun rare_A : A;-fun rarebit_N : N;-fun rarefaction_N : N;-fun rarefy_V : V;-fun rarefy_V2 : V2;-fun rarely_Adv : Adv;-fun rareness_N : N;-fun raring_A : A;-fun rarity_N : N;-fun rascal_N : N;-fun rascally_A : A;-fun rase_V2 : V2;-fun rash_A : A;-fun rash_N : N;-fun rasher_N : N;-fun rashly_Adv : Adv;-fun rashness_N : N;-fun rasp_N : N;-fun rasp_V : V;-fun rasp_V2 : V2;-fun raspberry_N : N;-fun raspingly_Adv : Adv;-fun rat_N : N;-fun rat_V2 : V2;-fun rat_a_tat_tat_N : N;-fun rat_tat_N : N;-fun ratability_N : N;-fun ratable_A : A;-fun ratan_N : N;-fun ratch_N : N;-fun ratchet_N : N;-fun rate_N : N;-fun rate_V : V;-fun rate_V2 : V2;-fun rateability_N : N;-fun rateable_A : A;-fun ratepayer_N : N;-fun rather_Adv : Adv;-fun ratification_N : N;-fun ratify_V2 : V2;-fun rating_N : N;-fun ratio_N : N;-fun ratiocination_N : N;-fun ration_N : N;-fun ration_V2 : V2;-fun rational_A : A;-fun rationale_N : N;-fun rationalism_N : N;-fun rationalist_N : N;-fun rationalistic_A : A;-fun rationality_N : N;-fun rationalization_N : N;-fun rationalize_V2 : V2;-fun rationally_Adv : Adv;-fun ratlin_N : N;-fun ratline_N : N;-fun rattan_N : N;-fun ratter_N : N;-fun rattle_N : N;-fun rattle_V : V;-fun rattle_V2 : V2;-fun rattlebrained_A : A;-fun rattlepated_A : A;-fun rattler_N : N;-fun rattlesnake_N : N;-fun rattling_A : A;-fun rattling_Adv : Adv;-fun ratty_A : A;-fun raucous_A : A;-fun raucously_Adv : Adv;-fun ravage_N : N;-fun ravage_V : V;-fun ravage_V2 : V2;-fun rave_N : N;-fun rave_V : V;-fun rave_up_N : N;-fun ravel_V : V;-fun ravel_V2 : V2;-fun raven_N : N;-fun ravening_A : A;-fun ravenna_PN : PN;-fun ravenous_A : A;-fun ravenously_Adv : Adv;-fun raver_N : N;-fun ravine_N : N;-fun raving_A : A;-fun raving_Adv : Adv;-fun ravioli_N : N;-fun ravish_V2 : V2;-fun ravishingly_Adv : Adv;-fun ravishment_N : N;-fun raw_A : A;-fun raw_N : N;-fun rawboned_A : A;-fun rawhide_A : A;-fun rawtenstall_PN : PN;-fun ray_N : N;-fun ray_PN : PN;-fun ray_V : V;-fun ray_V2 : V2;-fun raymond_PN : PN;-fun rayon_N : N;-fun raze_V2 : V2;-fun razor_N : N;-fun razor_V2 : V2;-fun razor_edge_N : N;-fun razorback_N : N;-fun razorbacked_A : A;-fun razorblade_N : N;-fun razzle_N : N;-fun razzle_dazzle_N : N;-fun rc_PN : PN;-fun rd_PN : PN;-fun re_N : N;-fun re_address_V2 : V2;-fun re_afforest_V2 : V2;-fun re_afforestation_N : N;-fun re_count_N : N;-fun re_count_V2 : V2;-fun re_cover_V2 : V2;-fun re_echo_N : N;-fun re_echo_V : V;-fun re_entry_N : N;-fun re_form_V : V;-fun re_form_V2 : V2;-fun re_formation_N : N;-fun re_join_V2 : V2;-fun reach_N : N;-fun reach_V : V;-fun reach_V2 : V2;-fun react_V : V;-fun reaction_N : N;-fun reactionary_N : N;-fun reactor_N : N;-fun read_N : N;-fun read_V : V;-fun read_V2 : V2;-fun readability_N : N;-fun readable_A : A;-fun reader_N : N;-fun readership_N : N;-fun readily_Adv : Adv;-fun readiness_N : N;-fun reading_N : N;-fun reading_PN : PN;-fun reading_lamp_N : N;-fun reading_room_N : N;-fun readjust_V2 : V2;-fun readjustment_N : N;-fun readmission_N : N;-fun readmit_V2 : V2;-fun ready_A : A;-fun ready_N : N;-fun ready_made_A : A;-fun reaffiliation_N : N;-fun reaffirm_V2 : V2;-fun reagent_N : N;-fun real_A : A;-fun real_N : N;-fun realism_N : N;-fun realist_N : N;-fun realistic_A : A;-fun realistically_Adv : Adv;-fun reality_N : N;-fun realizable_A : A;-fun realization_N : N;-fun realize_V2 : V2;-fun reallocation_N : N;-fun really_Adv : Adv;-fun realm_N : N;-fun realtor_N : N;-fun realty_N : N;-fun ream_N : N;-fun reanimate_V2 : V2;-fun reap_V : V;-fun reap_V2 : V2;-fun reaper_N : N;-fun reaping_hook_N : N;-fun reappear_V : V;-fun reappearance_N : N;-fun reappraisal_N : N;-fun rear_N : N;-fun rear_V : V;-fun rear_V2 : V2;-fun rear_admiral_N : N;-fun rearguard_N : N;-fun rearm_V : V;-fun rearm_V2 : V2;-fun rearmament_N : N;-fun rearmost_A : A;-fun rearrange_V2 : V2;-fun rearrangement_N : N;-fun rearward_N : N;-fun rearwards_Adv : Adv;-fun reason_N : N;-fun reason_V : V;-fun reason_V2 : V2;-fun reasonable_A : A;-fun reasonableness_N : N;-fun reasonably_Adv : Adv;-fun reasoning_N : N;-fun reasonless_A : A;-fun reassemble_V : V;-fun reassemble_V2 : V2;-fun reassess_V2 : V2;-fun reassessment_N : N;-fun reassurance_N : N;-fun reassure_V2 : V2;-fun reassuring_A : A;-fun reassuringly_Adv : Adv;-fun reattribute_V2 : V2;-fun rebarbative_A : A;-fun rebate_N : N;-fun rebecca_PN : PN;-fun rebel_N : N;-fun rebel_V : V;-fun rebellion_N : N;-fun rebellious_A : A;-fun rebelliously_Adv : Adv;-fun rebelliousness_N : N;-fun rebind_V2 : V2;-fun rebirth_N : N;-fun reborn_A : A;-fun rebound_N : N;-fun rebound_V : V;-fun rebuff_N : N;-fun rebuff_V2 : V2;-fun rebuild_V2 : V2;-fun rebuke_N : N;-fun rebuke_V2 : V2;-fun rebukingly_Adv : Adv;-fun rebus_N : N;-fun rebut_V2 : V2;-fun rebuttal_N : N;-fun rec_PN : PN;-fun recalcitrance_N : N;-fun recalcitrancy_N : N;-fun recalcitrant_A : A;-fun recall_N : N;-fun recall_V2 : V2;-fun recant_V : V;-fun recant_V2 : V2;-fun recantation_N : N;-fun recap_N : N;-fun recap_V : V;-fun recap_V2 : V2;-fun recapitulate_V : V;-fun recapitulate_V2 : V2;-fun recapitulation_N : N;-fun recapture_V2 : V2;-fun recast_V2 : V2;-fun recce_N : N;-fun recd_PN : PN;-fun recede_V : V;-fun receipt_N : N;-fun receipt_V2 : V2;-fun receivable_A : A;-fun receive_V : V;-fun receive_V2 : V2;-fun received_A : A;-fun receiver_N : N;-fun receivership_N : N;-fun receiving_set_N : N;-fun recent_A : A;-fun recently_Adv : Adv;-fun receptacle_N : N;-fun reception_N : N;-fun reception_desk_N : N;-fun receptionist_N : N;-fun receptive_A : A;-fun receptively_Adv : Adv;-fun receptiveness_N : N;-fun receptivity_N : N;-fun recess_N : N;-fun recess_V2 : V2;-fun recession_N : N;-fun recessional_A : A;-fun recessional_N : N;-fun recessive_A : A;-fun recherche_A : A;-fun recidivism_N : N;-fun recidivist_N : N;-fun recife_PN : PN;-fun recipe_N : N;-fun recipient_N : N;-fun reciprocal_A : A;-fun reciprocal_N : N;-fun reciprocally_Adv : Adv;-fun reciprocate_V : V;-fun reciprocate_V2 : V2;-fun reciprocation_N : N;-fun reciprocity_N : N;-fun recital_N : N;-fun recitalist_N : N;-fun recitation_N : N;-fun recitative_N : N;-fun recite_V : V;-fun recite_V2 : V2;-fun reckless_A : A;-fun recklessly_Adv : Adv;-fun recklessness_N : N;-fun recklinghausen_PN : PN;-fun reckon_V : V;-fun reckon_V2 : V2;-fun reckoner_N : N;-fun reckoning_N : N;-fun reclaim_V2 : V2;-fun reclamation_N : N;-fun recline_V : V;-fun recline_V2 : V2;-fun recluse_N : N;-fun recognition_N : N;-fun recognizable_A : A;-fun recognizably_Adv : Adv;-fun recognizance_N : N;-fun recognize_V2 : V2;-fun recoil_N : N;-fun recoil_V : V;-fun recollect_V : V;-fun recollect_V2 : V2;-fun recollection_N : N;-fun recommend_V2 : V2;-fun recommendation_N : N;-fun recommit_V2 : V2;-fun recompense_N : N;-fun recompense_V2 : V2;-fun reconcilable_A : A;-fun reconcile_V2 : V2;-fun reconciliation_N : N;-fun recondite_A : A;-fun recondition_V2 : V2;-fun reconnaissance_N : N;-fun reconnoitre_V : V;-fun reconnoitre_V2 : V2;-fun reconsecrate_V2 : V2;-fun reconsider_V2 : V2;-fun reconstruct_V2 : V2;-fun reconstruction_N : N;-fun reconvict_V2 : V2;-fun record_N : N;-fun record_V2 : V2;-fun record_breaking_A : A;-fun record_player_N : N;-fun recorder_N : N;-fun recording_N : N;-fun recount_V2 : V2;-fun recoup_V2 : V2;-fun recourse_N : N;-fun recover_V : V;-fun recover_V2 : V2;-fun recoverable_A : A;-fun recovery_N : N;-fun recreant_A : A;-fun recreant_N : N;-fun recreate_V2 : V2;-fun recreation_N : N;-fun recreational_A : A;-fun recriminate_V : V;-fun recrimination_N : N;-fun recriminatory_A : A;-fun recrudescence_N : N;-fun recruit_N : N;-fun recruit_V : V;-fun recruit_V2 : V2;-fun recruitment_N : N;-fun rectal_A : A;-fun rectangle_N : N;-fun rectangular_A : A;-fun rectification_N : N;-fun rectifier_N : N;-fun rectify_V2 : V2;-fun rectilinear_A : A;-fun rectitude_N : N;-fun recto_N : N;-fun rector_N : N;-fun rectory_N : N;-fun rectum_N : N;-fun recumbent_A : A;-fun recuperate_V : V;-fun recuperate_V2 : V2;-fun recuperation_N : N;-fun recuperative_A : A;-fun recur_V : V;-fun recurrence_N : N;-fun recurrent_A : A;-fun recurve_V : V;-fun recurve_V2 : V2;-fun recusancy_N : N;-fun recusant_A : A;-fun recusant_N : N;-fun recycle_V2 : V2;-fun red_A : A;-fun red_N : N;-fun red_hot_A : A;-fun red_rimmed_A : A;-fun redact_V2 : V2;-fun redaction_N : N;-fun redbreast_N : N;-fun redbrick_A : A;-fun redbridge_PN : PN;-fun redcap_N : N;-fun redcoat_N : N;-fun redden_V : V;-fun redden_V2 : V2;-fun reddish_A : A;-fun redditch_PN : PN;-fun redecorate_V2 : V2;-fun redeem_V2 : V2;-fun redeemable_A : A;-fun redeemer_N : N;-fun redefine_V2 : V2;-fun redemption_N : N;-fun redemptive_A : A;-fun redeploy_V2 : V2;-fun redeployment_N : N;-fun redesign_V2 : V2;-fun redevelop_V2 : V2;-fun redevelopment_N : N;-fun redhead_N : N;-fun rediffusion_N : N;-fun rediscover_V2 : V2;-fun rediscovery_N : N;-fun redisposition_N : N;-fun redistribute_V2 : V2;-fun redistribution_N : N;-fun redness_N : N;-fun redo_V2 : V2;-fun redolence_N : N;-fun redolent_A : A;-fun redouble_V : V;-fun redouble_V2 : V2;-fun redoubt_N : N;-fun redoubtable_A : A;-fun redound_V : V;-fun redress_N : N;-fun redress_V2 : V2;-fun redruth_PN : PN;-fun redskin_N : N;-fun reduce_V : V;-fun reduce_V2 : V2;-fun reducible_A : A;-fun reductio_ad_absurdum_N : N;-fun reduction_N : N;-fun redundance_N : N;-fun redundancy_N : N;-fun redundant_A : A;-fun reduplicate_V2 : V2;-fun reduplication_N : N;-fun redwing_N : N;-fun redwood_N : N;-fun reed_N : N;-fun reedy_A : A;-fun reef_N : N;-fun reef_V2 : V2;-fun reef_knot_N : N;-fun reefer_N : N;-fun reek_N : N;-fun reek_V : V;-fun reel_N : N;-fun reel_V : V;-fun reel_V2 : V2;-fun reeve_N : N;-fun ref_N : N;-fun reface_V2 : V2;-fun refashion_N : N;-fun refashion_V2 : V2;-fun refection_N : N;-fun refectory_N : N;-fun refer_V : V;-fun refer_V2 : V2;-fun referable_A : A;-fun referee_N : N;-fun referee_V : V;-fun referee_V2 : V2;-fun reference_N : N;-fun referendum_N : N;-fun referential_A : A;-fun refill_N : N;-fun refill_V2 : V2;-fun refine_V : V;-fun refine_V2 : V2;-fun refinement_N : N;-fun refiner_N : N;-fun refinery_N : N;-fun refit_N : N;-fun refit_V : V;-fun refit_V2 : V2;-fun reflate_V2 : V2;-fun reflation_N : N;-fun reflect_V : V;-fun reflect_V2 : V2;-fun reflection_N : N;-fun reflective_A : A;-fun reflectively_Adv : Adv;-fun reflector_N : N;-fun reflex_A : A;-fun reflex_N : N;-fun reflexion_N : N;-fun reflexive_A : A;-fun reflexive_N : N;-fun refloat_V : V;-fun refloat_V2 : V2;-fun reflux_N : N;-fun reforest_V2 : V2;-fun reforestation_N : N;-fun reform_N : N;-fun reform_V : V;-fun reform_V2 : V2;-fun reformation_N : N;-fun reformatory_A : A;-fun reformatory_N : N;-fun reformer_N : N;-fun refract_V2 : V2;-fun refraction_N : N;-fun refractory_A : A;-fun refrain_N : N;-fun refrain_V : V;-fun refresh_V2 : V2;-fun refresher_N : N;-fun refreshing_A : A;-fun refreshingly_Adv : Adv;-fun refreshment_N : N;-fun refrigerant_A : A;-fun refrigerant_N : N;-fun refrigerate_V2 : V2;-fun refrigeration_N : N;-fun refrigerator_N : N;-fun refuel_V : V;-fun refuel_V2 : V2;-fun refuge_N : N;-fun refugee_N : N;-fun refulgence_N : N;-fun refulgent_A : A;-fun refund_N : N;-fun refund_V2 : V2;-fun refurbish_V2 : V2;-fun refurnish_V2 : V2;-fun refusal_N : N;-fun refuse_N : N;-fun refuse_V : V;-fun refuse_V2 : V2;-fun refuse_collector_N : N;-fun refutable_A : A;-fun refutation_N : N;-fun refute_V2 : V2;-fun reg_PN : PN;-fun regain_V2 : V2;-fun regal_A : A;-fun regale_V2 : V2;-fun regally_Adv : Adv;-fun regard_N : N;-fun regard_V2 : V2;-fun regardful_A : A;-fun regardless_A : A;-fun regatta_N : N;-fun regency_N : N;-fun regenerate_A : A;-fun regenerate_V : V;-fun regenerate_V2 : V2;-fun regeneration_N : N;-fun regensburg_PN : PN;-fun regent_A : A;-fun regent_N : N;-fun reggae_N : N;-fun regicide_N : N;-fun regime_1_N : N;-fun regimen_N : N;-fun regiment_N : N;-fun regiment_V2 : V2;-fun regimental_A : A;-fun regimentation_N : N;-fun regina_PN : PN;-fun reginald_PN : PN;-fun region_N : N;-fun regional_A : A;-fun regionally_Adv : Adv;-fun register_N : N;-fun register_V : V;-fun register_V2 : V2;-fun registrar_N : N;-fun registration_N : N;-fun registry_N : N;-fun regnant_A : A;-fun regress_V : V;-fun regression_N : N;-fun regressive_A : A;-fun regret_N : N;-fun regret_V2 : V2;-fun regretful_A : A;-fun regretfully_Adv : Adv;-fun regrettable_A : A;-fun regrettably_Adv : Adv;-fun regroup_V : V;-fun regroup_V2 : V2;-fun regular_A : A;-fun regular_N : N;-fun regularity_N : N;-fun regularization_N : N;-fun regularize_V2 : V2;-fun regularly_Adv : Adv;-fun regulate_V2 : V2;-fun regulation_N : N;-fun regulator_N : N;-fun regurgitate_V : V;-fun regurgitate_V2 : V2;-fun rehabilitate_V2 : V2;-fun rehabilitation_N : N;-fun rehash_N : N;-fun rehash_V2 : V2;-fun rehear_V2 : V2;-fun rehearing_N : N;-fun rehearsal_N : N;-fun rehearse_V : V;-fun rehearse_V2 : V2;-fun rehouse_V2 : V2;-fun reich_N : N;-fun reigate_PN : PN;-fun reign_N : N;-fun reign_V : V;-fun reimburse_V2 : V2;-fun reimbursement_N : N;-fun reimposition_N : N;-fun rein_N : N;-fun rein_V2 : V2;-fun reincarnate_A : A;-fun reincarnate_V2 : V2;-fun reincarnation_N : N;-fun reindeer_N : N;-fun reinforce_V2 : V2;-fun reinforcement_N : N;-fun reinstate_V2 : V2;-fun reinstatement_N : N;-fun reinsurance_N : N;-fun reinsure_V2 : V2;-fun reintegrate_V2 : V2;-fun reinterpret_V2 : V2;-fun reinterpretation_N : N;-fun reissue_N : N;-fun reissue_V2 : V2;-fun reiterate_V2 : V2;-fun reiteration_N : N;-fun reject_N : N;-fun reject_V2 : V2;-fun rejection_N : N;-fun rejig_V2 : V2;-fun rejoice_V : V;-fun rejoice_V2 : V2;-fun rejoicing_N : N;-fun rejoin_V : V;-fun rejoin_V2 : V2;-fun rejoinder_N : N;-fun rejuvenate_V : V;-fun rejuvenate_V2 : V2;-fun rejuvenation_N : N;-fun rekindle_V : V;-fun rekindle_V2 : V2;-fun relapse_N : N;-fun relapse_V : V;-fun relate_V : V;-fun relate_V2 : V2;-fun relation_N : N;-fun relationship_N : N;-fun relative_A : A;-fun relative_N : N;-fun relatively_Adv : Adv;-fun relativity_N : N;-fun relax_V : V;-fun relax_V2 : V2;-fun relaxation_N : N;-fun relay_N : N;-fun relay_V2 : V2;-fun release_N : N;-fun release_V2 : V2;-fun relegate_V2 : V2;-fun relegation_N : N;-fun relent_V : V;-fun relentless_A : A;-fun relentlessly_Adv : Adv;-fun relevance_N : N;-fun relevancy_N : N;-fun relevant_A : A;-fun relevantly_Adv : Adv;-fun reliability_N : N;-fun reliable_A : A;-fun reliably_Adv : Adv;-fun reliance_N : N;-fun reliant_A : A;-fun relic_N : N;-fun relict_N : N;-fun relief_N : N;-fun relieve_V2 : V2;-fun religion_N : N;-fun religious_A : A;-fun religious_N : N;-fun religiously_Adv : Adv;-fun reline_V2 : V2;-fun relinquish_V2 : V2;-fun reliquary_N : N;-fun relish_N : N;-fun relish_V2 : V2;-fun relive_V2 : V2;-fun relocate_V : V;-fun relocate_V2 : V2;-fun relocation_N : N;-fun reluctance_N : N;-fun reluctant_A : A;-fun reluctantly_Adv : Adv;-fun rely_V : V;-fun remain_V : V;-fun remainder_N : N;-fun remake_N : N;-fun remake_V2 : V2;-fun remand_N : N;-fun remand_V2 : V2;-fun remark_N : N;-fun remark_V : V;-fun remark_V2 : V2;-fun remarkable_A : A;-fun remarkably_Adv : Adv;-fun remarriage_N : N;-fun remarry_V : V;-fun remarry_V2 : V2;-fun remediable_A : A;-fun remedial_A : A;-fun remedy_N : N;-fun remedy_V2 : V2;-fun remember_V : V;-fun remember_V2 : V2;-fun remembrance_N : N;-fun remilitarization_N : N;-fun remilitarize_V2 : V2;-fun remind_V2 : V2;-fun reminder_N : N;-fun reminisce_V : V;-fun reminiscence_N : N;-fun reminiscent_A : A;-fun reminiscently_Adv : Adv;-fun remiss_A : A;-fun remission_N : N;-fun remissness_N : N;-fun remit_V : V;-fun remit_V2 : V2;-fun remittance_N : N;-fun remittent_A : A;-fun remnant_N : N;-fun remodel_V2 : V2;-fun remonstrance_N : N;-fun remonstrate_V : V;-fun remorse_N : N;-fun remorseful_A : A;-fun remorsefully_Adv : Adv;-fun remorseless_A : A;-fun remorselessly_Adv : Adv;-fun remote_A : A;-fun remotely_Adv : Adv;-fun remoteness_N : N;-fun remould_V2 : V2;-fun remount_N : N;-fun remount_V : V;-fun remount_V2 : V2;-fun removable_A : A;-fun removal_N : N;-fun remove_N : N;-fun remove_V : V;-fun remove_V2 : V2;-fun removed_A : A;-fun remover_N : N;-fun remscheid_PN : PN;-fun remunerate_V2 : V2;-fun remuneration_N : N;-fun remunerative_A : A;-fun renaissance_N : N;-fun renal_A : A;-fun rename_V2 : V2;-fun renascence_N : N;-fun renascent_A : A;-fun rend_V2 : V2;-fun render_V2 : V2;-fun rendering_N : N;-fun rendezvous_N : N;-fun rendezvous_V : V;-fun rendition_N : N;-fun renegade_N : N;-fun renegade_V : V;-fun renege_V : V;-fun renegue_V : V;-fun renew_V2 : V2;-fun renewable_A : A;-fun renewal_N : N;-fun renfrew_PN : PN;-fun rennes_PN : PN;-fun rennet_N : N;-fun renounce_V2 : V2;-fun renovate_V2 : V2;-fun renovation_N : N;-fun renovator_N : N;-fun renown_N : N;-fun renowned_A : A;-fun rent_N : N;-fun rent_V : V;-fun rent_V2 : V2;-fun rent_collector_N : N;-fun rent_free_A : A;-fun rent_free_Adv : Adv;-fun rent_rebate_N : N;-fun rent_roll_N : N;-fun rentable_A : A;-fun rental_N : N;-fun rentier_N : N;-fun renunciation_N : N;-fun reopen_V : V;-fun reopen_V2 : V2;-fun reorganization_N : N;-fun reorganize_V : V;-fun reorganize_V2 : V2;-fun reorient_V : V;-fun reorient_V2 : V2;-fun reorientate_V : V;-fun reorientate_V2 : V2;-fun reorientation_N : N;-fun rep_N : N;-fun repaint_V2 : V2;-fun repair_N : N;-fun repair_V : V;-fun repair_V2 : V2;-fun repairable_A : A;-fun repairer_N : N;-fun reparable_A : A;-fun reparation_N : N;-fun repartee_N : N;-fun repast_N : N;-fun repatriate_N : N;-fun repatriate_V2 : V2;-fun repatriation_N : N;-fun repay_V : V;-fun repay_V2 : V2;-fun repayable_A : A;-fun repayment_N : N;-fun repeal_N : N;-fun repeal_V2 : V2;-fun repeat_N : N;-fun repeat_V : V;-fun repeat_V2 : V2;-fun repeatable_A : A;-fun repeated_A : A;-fun repeatedly_Adv : Adv;-fun repeater_N : N;-fun repel_V2 : V2;-fun repellent_A : A;-fun repellent_N : N;-fun repent_V : V;-fun repent_V2 : V2;-fun repentance_N : N;-fun repentant_A : A;-fun repentantly_Adv : Adv;-fun repercussion_N : N;-fun repertoire_N : N;-fun repertory_N : N;-fun repetition_N : N;-fun repetitious_A : A;-fun repetitive_A : A;-fun repetitively_Adv : Adv;-fun repine_V : V;-fun replace_V2 : V2;-fun replaceable_A : A;-fun replacement_N : N;-fun replant_V2 : V2;-fun replay_N : N;-fun replay_V2 : V2;-fun replenish_V2 : V2;-fun replenishment_N : N;-fun replete_A : A;-fun repletion_N : N;-fun replica_N : N;-fun reply_N : N;-fun reply_V : V;-fun reply_V2 : V2;-fun reply_paid_A : A;-fun repoint_V2 : V2;-fun report_N : N;-fun report_V : V;-fun report_V2 : V2;-fun reportable_A : A;-fun reportage_N : N;-fun reportedly_Adv : Adv;-fun reporter_N : N;-fun repose_N : N;-fun repose_V : V;-fun repose_V2 : V2;-fun reposeful_A : A;-fun repository_N : N;-fun repot_V2 : V2;-fun repp_N : N;-fun reprehend_V2 : V2;-fun reprehensible_A : A;-fun reprehensibly_Adv : Adv;-fun represent_V2 : V2;-fun representation_N : N;-fun representative_A : A;-fun representative_N : N;-fun repress_V2 : V2;-fun repressed_A : A;-fun repression_N : N;-fun repressive_A : A;-fun reprieve_N : N;-fun reprieve_V2 : V2;-fun reprimand_N : N;-fun reprimand_V2 : V2;-fun reprint_N : N;-fun reprint_V2 : V2;-fun reprisal_N : N;-fun reproach_N : N;-fun reproach_V2 : V2;-fun reproachful_A : A;-fun reproachfully_Adv : Adv;-fun reprobate_N : N;-fun reprobate_V2 : V2;-fun reprobation_N : N;-fun reproduce_V : V;-fun reproduce_V2 : V2;-fun reproducer_N : N;-fun reproducible_A : A;-fun reproduction_N : N;-fun reproductive_A : A;-fun reproof_N : N;-fun reproof_V2 : V2;-fun reprove_V2 : V2;-fun reprovingly_Adv : Adv;-fun reps_N : N;-fun reptile_N : N;-fun reptilian_A : A;-fun reptilian_N : N;-fun republic_N : N;-fun republican_A : A;-fun republican_N : N;-fun republicanism_N : N;-fun repudiate_V2 : V2;-fun repudiation_N : N;-fun repugnance_N : N;-fun repugnant_A : A;-fun repulse_N : N;-fun repulse_V2 : V2;-fun repulsion_N : N;-fun repulsive_A : A;-fun repulsively_Adv : Adv;-fun reputable_A : A;-fun reputably_Adv : Adv;-fun reputation_N : N;-fun repute_N : N;-fun repute_V2 : V2;-fun reputed_A : A;-fun reputedly_Adv : Adv;-fun request_N : N;-fun request_V2 : V2;-fun requiem_N : N;-fun require_V2 : V2;-fun requirement_N : N;-fun requisite_A : A;-fun requisite_N : N;-fun requisition_N : N;-fun requisition_V2 : V2;-fun requital_N : N;-fun requite_V2 : V2;-fun reread_V2 : V2;-fun reredos_N : N;-fun rerun_N : N;-fun rerun_V2 : V2;-fun res_N : N;-fun rescind_V2 : V2;-fun rescript_N : N;-fun rescue_N : N;-fun rescue_V2 : V2;-fun rescuer_N : N;-fun research_N : N;-fun research_V : V;-fun researcher_N : N;-fun reseat_V2 : V2;-fun reseed_V2 : V2;-fun resell_V2 : V2;-fun resemblance_N : N;-fun resemble_V2 : V2;-fun resent_V2 : V2;-fun resentful_A : A;-fun resentfully_Adv : Adv;-fun resentment_N : N;-fun reservation_N : N;-fun reserve_N : N;-fun reserve_V2 : V2;-fun reserved_A : A;-fun reservedly_Adv : Adv;-fun reservist_N : N;-fun reservoir_N : N;-fun reset_V2 : V2;-fun resettle_V : V;-fun resettle_V2 : V2;-fun resettlement_N : N;-fun reshape_V2 : V2;-fun reshuffle_N : N;-fun reshuffle_V2 : V2;-fun reside_V : V;-fun residence_N : N;-fun residency_N : N;-fun resident_A : A;-fun resident_N : N;-fun residential_A : A;-fun residual_A : A;-fun residuary_A : A;-fun residue_N : N;-fun resign_V : V;-fun resign_V2 : V2;-fun resignation_N : N;-fun resigned_A : A;-fun resignedly_Adv : Adv;-fun resilience_N : N;-fun resiliency_N : N;-fun resilient_A : A;-fun resin_N : N;-fun resinated_A : A;-fun resinous_A : A;-fun resist_V : V;-fun resist_V2 : V2;-fun resistance_N : N;-fun resistant_A : A;-fun resister_N : N;-fun resistive_A : A;-fun resistivity_N : N;-fun resistless_A : A;-fun resistor_N : N;-fun resole_V2 : V2;-fun resolute_A : A;-fun resolutely_Adv : Adv;-fun resoluteness_N : N;-fun resolution_N : N;-fun resolvable_A : A;-fun resolve_N : N;-fun resolve_V : V;-fun resolve_V2 : V2;-fun resonance_N : N;-fun resonant_A : A;-fun resonate_V : V;-fun resonate_V2 : V2;-fun resonator_N : N;-fun resort_N : N;-fun resort_V : V;-fun resound_V : V;-fun resound_V2 : V2;-fun resoundingly_Adv : Adv;-fun resource_N : N;-fun resourceful_A : A;-fun resourcefully_Adv : Adv;-fun resourceless_A : A;-fun respect_N : N;-fun respect_V2 : V2;-fun respectability_N : N;-fun respectable_A : A;-fun respectably_Adv : Adv;-fun respecter_N : N;-fun respectful_A : A;-fun respectfully_Adv : Adv;-fun respective_A : A;-fun respectively_Adv : Adv;-fun respiration_N : N;-fun respirator_N : N;-fun respiratory_A : A;-fun respire_V : V;-fun respite_N : N;-fun respite_V2 : V2;-fun resplendence_N : N;-fun resplendency_N : N;-fun resplendent_A : A;-fun resplendently_Adv : Adv;-fun respond_V : V;-fun respondent_N : N;-fun response_N : N;-fun responsibility_N : N;-fun responsible_A : A;-fun responsibly_Adv : Adv;-fun responsive_A : A;-fun responsiveness_N : N;-fun rest_N : N;-fun rest_V : V;-fun rest_V2 : V2;-fun rest_cure_N : N;-fun rest_day_N : N;-fun rest_home_N : N;-fun rest_house_N : N;-fun restart_V : V;-fun restart_V2 : V2;-fun restate_V2 : V2;-fun restatement_N : N;-fun restaurant_N : N;-fun restauranteur_N : N;-fun restaurateur_N : N;-fun restful_A : A;-fun restfully_Adv : Adv;-fun restfulness_N : N;-fun restitution_N : N;-fun restive_A : A;-fun restively_Adv : Adv;-fun restiveness_N : N;-fun restless_A : A;-fun restlessly_Adv : Adv;-fun restlessness_N : N;-fun restock_V2 : V2;-fun restoration_N : N;-fun restorative_A : A;-fun restorative_N : N;-fun restore_V2 : V2;-fun restorer_N : N;-fun restrain_V2 : V2;-fun restrained_A : A;-fun restraint_N : N;-fun restrict_V2 : V2;-fun restriction_N : N;-fun restrictive_A : A;-fun restrictively_Adv : Adv;-fun restrictiveness_N : N;-fun restructure_V2 : V2;-fun result_N : N;-fun result_V : V;-fun resultant_A : A;-fun resume_V2 : V2;-fun resumption_N : N;-fun resurface_V : V;-fun resurface_V2 : V2;-fun resurgence_N : N;-fun resurgent_A : A;-fun resurrect_V : V;-fun resurrect_V2 : V2;-fun resurrection_N : N;-fun resuscitate_V : V;-fun resuscitate_V2 : V2;-fun resuscitation_N : N;-fun ret_PN : PN;-fun ret_V2 : V2;-fun retail_Adv : Adv;-fun retail_N : N;-fun retail_V : V;-fun retail_V2 : V2;-fun retailer_N : N;-fun retain_V2 : V2;-fun retainer_N : N;-fun retake_N : N;-fun retake_V2 : V2;-fun retaliate_V : V;-fun retaliation_N : N;-fun retaliative_A : A;-fun retaliatory_A : A;-fun retard_V2 : V2;-fun retardation_N : N;-fun retch_V : V;-fun retd_PN : PN;-fun retell_V2 : V2;-fun retention_N : N;-fun retentive_A : A;-fun retentively_Adv : Adv;-fun retentiveness_N : N;-fun retford_PN : PN;-fun rethink_N : N;-fun rethink_V : V;-fun rethink_V2 : V2;-fun reticence_N : N;-fun reticent_A : A;-fun reticently_Adv : Adv;-fun reticulate_A : A;-fun reticulate_V : V;-fun reticulate_V2 : V2;-fun reticulation_N : N;-fun reticule_N : N;-fun retina_N : N;-fun retinal_A : A;-fun retinue_N : N;-fun retire_N : N;-fun retire_V : V;-fun retire_V2 : V2;-fun retired_A : A;-fun retirement_N : N;-fun retiring_A : A;-fun retool_V2 : V2;-fun retort_N : N;-fun retort_V : V;-fun retort_V2 : V2;-fun retouch_V2 : V2;-fun retrace_V2 : V2;-fun retract_V : V;-fun retract_V2 : V2;-fun retractable_A : A;-fun retractile_A : A;-fun retraction_N : N;-fun retransmit_V2 : V2;-fun retread_N : N;-fun retread_V2 : V2;-fun retreat_N : N;-fun retreat_V : V;-fun retrench_V : V;-fun retrench_V2 : V2;-fun retrenchment_N : N;-fun retrial_N : N;-fun retribution_N : N;-fun retributive_A : A;-fun retrievable_A : A;-fun retrieval_N : N;-fun retrieve_V : V;-fun retrieve_V2 : V2;-fun retriever_N : N;-fun retroactive_A : A;-fun retroactively_Adv : Adv;-fun retrograde_A : A;-fun retrograde_V : V;-fun retrogress_V : V;-fun retrogression_N : N;-fun retrogressive_A : A;-fun retrorocket_N : N;-fun retrospect_N : N;-fun retrospection_N : N;-fun retrospective_A : A;-fun retrospectively_Adv : Adv;-fun retrousse_A : A;-fun retroversion_N : N;-fun retsina_N : N;-fun return_N : N;-fun return_V : V;-fun return_V2 : V2;-fun returnable_A : A;-fun reunification_N : N;-fun reunion_N : N;-fun reunite_V : V;-fun reunite_V2 : V2;-fun rev_N : N;-fun rev_PN : PN;-fun rev_V : V;-fun rev_V2 : V2;-fun revaluation_N : N;-fun revalue_V2 : V2;-fun revamp_V2 : V2;-fun revd_PN : PN;-fun reveal_V2 : V2;-fun reveille_N : N;-fun revel_N : N;-fun revel_V : V;-fun revelation_N : N;-fun reveller_N : N;-fun revelry_N : N;-fun revenge_N : N;-fun revenge_V2 : V2;-fun revengeful_A : A;-fun revengefully_Adv : Adv;-fun revenue_N : N;-fun reverberant_A : A;-fun reverberate_V : V;-fun reverberate_V2 : V2;-fun reverberation_N : N;-fun revere_V2 : V2;-fun reverence_N : N;-fun reverence_V2 : V2;-fun reverend_A : A;-fun reverend_N : N;-fun reverent_A : A;-fun reverential_A : A;-fun reverentially_Adv : Adv;-fun reverently_Adv : Adv;-fun reverie_N : N;-fun revers_N : N;-fun reversal_N : N;-fun reverse_A : A;-fun reverse_N : N;-fun reverse_V : V;-fun reverse_V2 : V2;-fun reversely_Adv : Adv;-fun reversibility_N : N;-fun reversible_A : A;-fun reversion_N : N;-fun reversionary_A : A;-fun revert_V : V;-fun revertible_A : A;-fun revetment_N : N;-fun review_N : N;-fun review_V : V;-fun review_V2 : V2;-fun reviewer_N : N;-fun revile_V : V;-fun revile_V2 : V2;-fun revise_N : N;-fun revise_V2 : V2;-fun reviser_N : N;-fun revision_N : N;-fun revisionism_N : N;-fun revisionist_N : N;-fun revisit_V2 : V2;-fun revitalization_N : N;-fun revitalize_V2 : V2;-fun revival_N : N;-fun revivalist_N : N;-fun revive_V : V;-fun revive_V2 : V2;-fun revivify_V2 : V2;-fun revocable_A : A;-fun revocation_N : N;-fun revoke_N : N;-fun revoke_V : V;-fun revoke_V2 : V2;-fun revolt_N : N;-fun revolt_V : V;-fun revolt_V2 : V2;-fun revolting_A : A;-fun revoltingly_Adv : Adv;-fun revolution_N : N;-fun revolutionary_A : A;-fun revolutionary_N : N;-fun revolutionize_V2 : V2;-fun revolve_V : V;-fun revolve_V2 : V2;-fun revolver_N : N;-fun revue_N : N;-fun revulsion_N : N;-fun reward_N : N;-fun reward_V2 : V2;-fun rewire_V2 : V2;-fun reword_V2 : V2;-fun rewrite_N : N;-fun rewrite_V2 : V2;-fun rex_PN : PN;-fun reykjavik_PN : PN;-fun rhapsodize_V : V;-fun rhapsody_N : N;-fun rhea_N : N;-fun rheims_PN : PN;-fun rhenish_A : A;-fun rheostat_N : N;-fun rhesus_N : N;-fun rhetoric_N : N;-fun rhetorical_A : A;-fun rhetorically_Adv : Adv;-fun rhetorician_N : N;-fun rheum_N : N;-fun rheumatic_A : A;-fun rheumatic_N : N;-fun rheumatism_N : N;-fun rheumatoid_A : A;-fun rheydt_PN : PN;-fun rhinal_A : A;-fun rhine_PN : PN;-fun rhinestone_N : N;-fun rhino_N : N;-fun rhinoceros_N : N;-fun rhizome_N : N;-fun rhode_PN : PN;-fun rhododendron_N : N;-fun rhomb_N : N;-fun rhomboid_A : A;-fun rhomboid_N : N;-fun rhombus_N : N;-fun rhondda_PN : PN;-fun rhosllanerchrugog_PN : PN;-fun rhubarb_N : N;-fun rhyl_PN : PN;-fun rhyme_N : N;-fun rhyme_V : V;-fun rhyme_V2 : V2;-fun rhymed_A : A;-fun rhymester_N : N;-fun rhymney_PN : PN;-fun rhythm_N : N;-fun rhythmic_A : A;-fun rhythmical_A : A;-fun rhythmically_Adv : Adv;-fun rib_N : N;-fun rib_V2 : V2;-fun ribald_A : A;-fun ribald_N : N;-fun ribaldry_N : N;-fun riband_N : N;-fun ribbon_N : N;-fun riboflavin_N : N;-fun rice_N : N;-fun rice_paper_N : N;-fun rich_A : A;-fun richard_PN : PN;-fun richly_Adv : Adv;-fun richmond_PN : PN;-fun richmond_upon_thames_PN : PN;-fun richness_N : N;-fun rick_N : N;-fun rick_PN : PN;-fun rick_V2 : V2;-fun rickets_N : N;-fun rickety_A : A;-fun rickmansworth_PN : PN;-fun rickshaw_N : N;-fun ricky_PN : PN;-fun ricochet_N : N;-fun ricochet_V : V;-fun ricochet_V2 : V2;-fun rid_V2 : V2;-fun riddance_N : N;-fun riddle_N : N;-fun riddle_V2 : V2;-fun ride_N : N;-fun ride_V : V;-fun ride_V2 : V2;-fun rider_N : N;-fun riderless_A : A;-fun ridge_N : N;-fun ridge_V2 : V2;-fun ridge_tile_N : N;-fun ridgepole_N : N;-fun ridicule_N : N;-fun ridicule_V2 : V2;-fun ridiculous_A : A;-fun ridiculously_Adv : Adv;-fun riding_N : N;-fun riding_habit_N : N;-fun riding_lamp_N : N;-fun riding_light_N : N;-fun riding_master_N : N;-fun riding_school_N : N;-fun riesling_N : N;-fun rife_A : A;-fun riff_N : N;-fun riff_raff_N : N;-fun riffle_V : V;-fun riffle_V2 : V2;-fun rifle_N : N;-fun rifle_V2 : V2;-fun rifle_range_N : N;-fun rifle_shot_N : N;-fun rifleman_N : N;-fun rift_N : N;-fun rift_valley_N : N;-fun rig_N : N;-fun rig_V : V;-fun rig_V2 : V2;-fun riga_PN : PN;-fun rigger_N : N;-fun rigging_N : N;-fun right_A : A;-fun right_Adv : Adv;-fun right_N : N;-fun right_V2 : V2;-fun right_angled_A : A;-fun right_down_A : A;-fun right_down_Adv : Adv;-fun right_hand_A : A;-fun right_handed_A : A;-fun right_hander_N : N;-fun right_minded_A : A;-fun right_turn_N : N;-fun right_wing_N : N;-fun right_winger_N : N;-fun righteous_A : A;-fun righteously_Adv : Adv;-fun righteousness_N : N;-fun rightful_A : A;-fun rightfully_Adv : Adv;-fun rightfulness_N : N;-fun rightist_A : A;-fun rightist_N : N;-fun rightly_Adv : Adv;-fun rightness_N : N;-fun rigid_A : A;-fun rigidity_N : N;-fun rigidly_Adv : Adv;-fun rigmarole_N : N;-fun rigor_mortis_N : N;-fun rigorous_A : A;-fun rigorously_Adv : Adv;-fun rigour_N : N;-fun rigout_N : N;-fun rijeka_PN : PN;-fun rile_V2 : V2;-fun rill_N : N;-fun rim_N : N;-fun rim_V2 : V2;-fun rime_N : N;-fun rime_V2 : V2;-fun rimini_PN : PN;-fun rind_N : N;-fun rinderpest_N : N;-fun ring_N : N;-fun ring_V : V;-fun ring_V2 : V2;-fun ring_armour_N : N;-fun ring_finger_N : N;-fun ring_mail_N : N;-fun ring_road_N : N;-fun ringer_N : N;-fun ringleader_N : N;-fun ringlet_N : N;-fun ringmaster_N : N;-fun ringside_N : N;-fun ringwood_PN : PN;-fun ringworm_N : N;-fun rink_N : N;-fun rinse_N : N;-fun rinse_V2 : V2;-fun rio_de_janeiro_PN : PN;-fun riot_N : N;-fun riot_V : V;-fun rioter_N : N;-fun riotous_A : A;-fun riotously_Adv : Adv;-fun rip_N : N;-fun rip_PN : PN;-fun rip_V : V;-fun rip_V2 : V2;-fun rip_off_N : N;-fun rip_roaring_A : A;-fun riparian_A : A;-fun ripcord_N : N;-fun ripe_A : A;-fun ripely_Adv : Adv;-fun ripen_V : V;-fun ripen_V2 : V2;-fun ripeness_N : N;-fun ripley_PN : PN;-fun ripon_PN : PN;-fun riposte_N : N;-fun riposte_V : V;-fun ripple_N : N;-fun ripple_V : V;-fun ripple_V2 : V2;-fun ripsaw_N : N;-fun riptide_N : N;-fun risborough_PN : PN;-fun risca_PN : PN;-fun rise_N : N;-fun rise_V : V;-fun riser_N : N;-fun rishton_PN : PN;-fun risibility_N : N;-fun risible_A : A;-fun rising_N : N;-fun risk_N : N;-fun risk_V2 : V2;-fun riskily_Adv : Adv;-fun riskiness_N : N;-fun risky_A : A;-fun risotto_N : N;-fun risque_A : A;-fun rissole_N : N;-fun rita_PN : PN;-fun rite_N : N;-fun ritual_A : A;-fun ritual_N : N;-fun ritualism_N : N;-fun ritualist_N : N;-fun ritualistic_A : A;-fun ritzy_A : A;-fun rival_N : N;-fun rival_V2 : V2;-fun rivalry_N : N;-fun rive_V : V;-fun rive_V2 : V2;-fun river_N : N;-fun river_basin_N : N;-fun river_bed_N : N;-fun riverside_N : N;-fun rivet_N : N;-fun rivet_V2 : V2;-fun riveter_N : N;-fun riviera_PN : PN;-fun rivulet_N : N;-fun rly_N : N;-fun rm_N : N;-fun rn_N : N;-fun roach_N : N;-fun road_N : N;-fun road_book_N : N;-fun road_hog_N : N;-fun road_metal_N : N;-fun road_sense_N : N;-fun roadbed_N : N;-fun roadblock_N : N;-fun roadhouse_N : N;-fun roadless_A : A;-fun roadman_N : N;-fun roadmender_N : N;-fun roadside_N : N;-fun roadstead_N : N;-fun roadster_N : N;-fun roadway_N : N;-fun roadworthy_A : A;-fun roam_V : V;-fun roam_V2 : V2;-fun roan_A : A;-fun roan_N : N;-fun roar_N : N;-fun roar_V : V;-fun roar_V2 : V2;-fun roaring_A : A;-fun roaring_Adv : Adv;-fun roast_A : A;-fun roast_N : N;-fun roast_V : V;-fun roast_V2 : V2;-fun roaster_N : N;-fun roasting_N : N;-fun rob_PN : PN;-fun rob_V2 : V2;-fun robber_N : N;-fun robbery_N : N;-fun robe_N : N;-fun robe_V : V;-fun robe_V2 : V2;-fun robert_PN : PN;-fun robin_N : N;-fun robin_PN : PN;-fun robot_N : N;-fun robust_A : A;-fun robustly_Adv : Adv;-fun robustness_N : N;-fun roc_N : N;-fun rochdale_PN : PN;-fun rochester_PN : PN;-fun rock_'n_roll_N : N;-fun rock_N : N;-fun rock_V : V;-fun rock_V2 : V2;-fun rock_bottom_N : N;-fun rock_cake_N : N;-fun rock_climbing_N : N;-fun rock_crystal_N : N;-fun rock_garden_N : N;-fun rock_plant_N : N;-fun rock_salmon_N : N;-fun rock_salt_N : N;-fun rocker_N : N;-fun rockery_N : N;-fun rocket_N : N;-fun rocket_V : V;-fun rocket_base_N : N;-fun rocket_range_N : N;-fun rocketry_N : N;-fun rocking_chair_N : N;-fun rocking_horse_N : N;-fun rocky_A : A;-fun rococo_A : A;-fun rod_N : N;-fun rod_PN : PN;-fun rodent_N : N;-fun rodeo_N : N;-fun rodney_PN : PN;-fun rodomontade_N : N;-fun roe_N : N;-fun roebuck_N : N;-fun roentgen_N : N;-fun rogation_N : N;-fun roger_PN : PN;-fun rogue_N : N;-fun rogue_elephant_N : N;-fun roguery_N : N;-fun roguish_A : A;-fun roguishly_Adv : Adv;-fun roguishness_N : N;-fun roisterer_N : N;-fun role_1_N : N;-fun roll_N : N;-fun roll_V : V;-fun roll_V2 : V2;-fun roll_call_N : N;-fun roll_on_N : N;-fun roller_N : N;-fun roller_skate_N : N;-fun rollicking_A : A;-fun rolling_N : N;-fun rolling_mill_N : N;-fun rolling_pin_N : N;-fun rolling_stock_N : N;-fun roly_poly_N : N;-fun romaic_A : A;-fun romaic_N : N;-fun roman_A : A;-fun roman_N : N;-fun romance_A : A;-fun romance_N : N;-fun romance_V : V;-fun romanesque_N : N;-fun romania_PN : PN;-fun romanian_A : A;-fun romanian_N : N;-fun romantic_A : A;-fun romantic_N : N;-fun romantically_Adv : Adv;-fun romanticism_N : N;-fun romanticist_N : N;-fun romanticize_V : V;-fun romanticize_V2 : V2;-fun romany_A : A;-fun romany_N : N;-fun rome_PN : PN;-fun romish_A : A;-fun romp_N : N;-fun romp_V : V;-fun romper_N : N;-fun romsey_PN : PN;-fun ron_PN : PN;-fun ronald_PN : PN;-fun rondeau_N : N;-fun rondel_N : N;-fun rondo_N : N;-fun roneo_N : N;-fun roneo_V2 : V2;-fun ronnie_PN : PN;-fun rood_N : N;-fun rood_tree_N : N;-fun roof_N : N;-fun roof_V2 : V2;-fun roof_garden_N : N;-fun roof_tree_N : N;-fun roofing_N : N;-fun roofless_A : A;-fun rook_N : N;-fun rook_V2 : V2;-fun rookery_N : N;-fun rookie_N : N;-fun room_N : N;-fun room_V : V;-fun room_mate_N : N;-fun roomed_A : A;-fun roomer_N : N;-fun roomful_N : N;-fun roomily_Adv : Adv;-fun roomy_A : A;-fun roost_N : N;-fun roost_V : V;-fun rooster_N : N;-fun root_N : N;-fun root_V : V;-fun root_V2 : V2;-fun rootle_V : V;-fun rootless_A : A;-fun rope_N : N;-fun rope_V2 : V2;-fun rope_dancer_N : N;-fun rope_ladder_N : N;-fun rope_yard_N : N;-fun rope_yarn_N : N;-fun ropewalk_N : N;-fun ropewalker_N : N;-fun ropeway_N : N;-fun ropey_A : A;-fun roquefort_N : N;-fun rosalie_PN : PN;-fun rosalind_PN : PN;-fun rosamund_PN : PN;-fun rosario_PN : PN;-fun rosary_N : N;-fun roscommon_PN : PN;-fun rose_N : N;-fun rose_PN : PN;-fun rose_bed_N : N;-fun rose_leaf_N : N;-fun rose_red_A : A;-fun rose_water_N : N;-fun roseate_A : A;-fun rosebud_N : N;-fun rosemary_N : N;-fun rosemary_PN : PN;-fun rosette_N : N;-fun rosewood_N : N;-fun rosie_PN : PN;-fun rosin_N : N;-fun rosin_V2 : V2;-fun roslyn_PN : PN;-fun ross_on_wye_PN : PN;-fun rossington_PN : PN;-fun rosslare_PN : PN;-fun roster_N : N;-fun rostock_PN : PN;-fun rostov_na_donu_PN : PN;-fun rostrum_N : N;-fun rosy_A : A;-fun rot_N : N;-fun rot_V : V;-fun rot_V2 : V2;-fun rota_N : N;-fun rotarian_N : N;-fun rotary_A : A;-fun rotary_N : N;-fun rotate_V : V;-fun rotate_V2 : V2;-fun rotation_N : N;-fun rotational_A : A;-fun rotationally_Adv : Adv;-fun rotatory_A : A;-fun rote_N : N;-fun rotgut_N : N;-fun rotherham_PN : PN;-fun rothesay_PN : PN;-fun rothwell_PN : PN;-fun rotisserie_N : N;-fun rotogravure_N : N;-fun rotor_N : N;-fun rotten_A : A;-fun rottenly_Adv : Adv;-fun rottenness_N : N;-fun rotter_N : N;-fun rotterdam_PN : PN;-fun rotund_A : A;-fun rotunda_N : N;-fun rotundity_N : N;-fun rotundly_Adv : Adv;-fun roubaix_PN : PN;-fun rouble_N : N;-fun rouen_PN : PN;-fun rouge_N : N;-fun rouge_V : V;-fun rouge_V2 : V2;-fun rough_A : A;-fun rough_Adv : Adv;-fun rough_N : N;-fun rough_V2 : V2;-fun rough_and_tumble_A : A;-fun rough_and_tumble_N : N;-fun rough_dry_V2 : V2;-fun rough_hewn_A : A;-fun rough_house_V : V;-fun rough_house_V2 : V2;-fun rough_spoken_A : A;-fun roughage_N : N;-fun roughcast_N : N;-fun roughcast_V2 : V2;-fun roughen_V : V;-fun roughen_V2 : V2;-fun roughish_A : A;-fun roughly_Adv : Adv;-fun roughneck_N : N;-fun roughness_N : N;-fun roughrider_N : N;-fun roughshod_A : A;-fun roulette_N : N;-fun round_A : A;-fun round_Adv : Adv;-fun round_N : N;-fun round_V : V;-fun round_V2 : V2;-fun round_arm_A : A;-fun round_arm_Adv : Adv;-fun round_backed_A : A;-fun round_eyed_A : A;-fun round_hand_N : N;-fun round_shot_N : N;-fun round_shouldered_A : A;-fun round_the_clock_A : A;-fun round_the_clock_Adv : Adv;-fun roundabout_A : A;-fun roundabout_N : N;-fun roundel_N : N;-fun roundelay_N : N;-fun roundhead_N : N;-fun roundhouse_N : N;-fun roundish_A : A;-fun roundly_Adv : Adv;-fun roundness_N : N;-fun roundsman_N : N;-fun roundup_N : N;-fun rouse_V : V;-fun rouse_V2 : V2;-fun rout_N : N;-fun rout_V2 : V2;-fun route_N : N;-fun route_V2 : V2;-fun routemarch_N : N;-fun routine_A : A;-fun routine_N : N;-fun roue_N : N;-fun rove_V : V;-fun rove_V2 : V2;-fun rover_N : N;-fun row_N : N;-fun row_V : V;-fun row_V2 : V2;-fun rowan_N : N;-fun rowan_berry_N : N;-fun rowan_tree_N : N;-fun rowboat_N : N;-fun rowdily_Adv : Adv;-fun rowdiness_N : N;-fun rowdy_A : A;-fun rowdy_N : N;-fun rowdyism_N : N;-fun rowel_N : N;-fun rower_N : N;-fun rowing_N : N;-fun rowing_boat_N : N;-fun rowing_club_N : N;-fun rowlands_gill_PN : PN;-fun rowlock_N : N;-fun roy_PN : PN;-fun royal_A : A;-fun royalist_N : N;-fun royally_Adv : Adv;-fun royalty_N : N;-fun royston_PN : PN;-fun rpm_N : N;-fun rspca_N : N;-fun rsvp_PN : PN;-fun rt_hon_PN : PN;-fun rub_N : N;-fun rub_V : V;-fun rub_V2 : V2;-fun rub_a_dub_N : N;-fun rub_down_N : N;-fun rub_up_N : N;-fun rubber_N : N;-fun rubber_V2 : V2;-fun rubber_stamp_V2 : V2;-fun rubberize_V2 : V2;-fun rubberneck_N : N;-fun rubberneck_V : V;-fun rubbery_A : A;-fun rubbing_N : N;-fun rubbish_N : N;-fun rubbish_V2 : V2;-fun rubbishing_N : N;-fun rubbishy_A : A;-fun rubble_N : N;-fun rubicon_N : N;-fun rubicund_A : A;-fun rubric_N : N;-fun ruby_A : A;-fun ruby_N : N;-fun ruck_N : N;-fun ruck_V : V;-fun ruck_V2 : V2;-fun rucksack_N : N;-fun ruckus_N : N;-fun rudder_N : N;-fun rudderless_A : A;-fun ruddiness_N : N;-fun ruddington_PN : PN;-fun ruddle_N : N;-fun ruddle_V2 : V2;-fun ruddy_A : A;-fun rude_A : A;-fun rudely_Adv : Adv;-fun rudeness_N : N;-fun rudiment_N : N;-fun rudimentary_A : A;-fun rudolf_PN : PN;-fun rudy_PN : PN;-fun rue_N : N;-fun rue_V2 : V2;-fun rueful_A : A;-fun ruefully_Adv : Adv;-fun ruff_N : N;-fun ruff_V : V;-fun ruff_V2 : V2;-fun ruffian_N : N;-fun ruffianism_N : N;-fun ruffianly_A : A;-fun ruffle_N : N;-fun ruffle_V : V;-fun ruffle_V2 : V2;-fun rug_N : N;-fun rugby_N : N;-fun rugby_PN : PN;-fun rugeley_PN : PN;-fun rugged_A : A;-fun ruggedly_Adv : Adv;-fun ruggedness_N : N;-fun rugger_N : N;-fun ruin_N : N;-fun ruin_V2 : V2;-fun ruination_N : N;-fun ruinous_A : A;-fun ruinously_Adv : Adv;-fun rule_N : N;-fun rule_V : V;-fun rule_V2 : V2;-fun ruler_N : N;-fun ruling_A : A;-fun ruling_N : N;-fun rum_N : N;-fun rum_runner_N : N;-fun rumba_N : N;-fun rumble_N : N;-fun rumble_V : V;-fun rumble_V2 : V2;-fun rumbling_N : N;-fun rumbustious_A : A;-fun ruminant_A : A;-fun ruminant_N : N;-fun ruminate_V : V;-fun rumination_N : N;-fun ruminative_A : A;-fun rummage_N : N;-fun rummage_V : V;-fun rummage_V2 : V2;-fun rummy_A : A;-fun rummy_N : N;-fun rumour_N : N;-fun rumour_V2 : V2;-fun rumour_monger_N : N;-fun rump_N : N;-fun rump_steak_N : N;-fun rumple_V2 : V2;-fun rumpus_N : N;-fun run_N : N;-fun run_V : V;-fun run_V2 : V2;-fun run_of_the_mill_A : A;-fun run_off_N : N;-fun run_through_N : N;-fun run_up_N : N;-fun runaway_A : A;-fun runaway_N : N;-fun runcorn_PN : PN;-fun rundown_A : A;-fun rundown_N : N;-fun rune_N : N;-fun rung_N : N;-fun runic_A : A;-fun runnel_N : N;-fun runner_N : N;-fun runner_up_N : N;-fun running_A : A;-fun running_N : N;-fun running_board_N : N;-fun runny_A : A;-fun runt_N : N;-fun runway_N : N;-fun rupee_N : N;-fun rupert_PN : PN;-fun rupiah_N : N;-fun rupture_N : N;-fun rupture_V : V;-fun rupture_V2 : V2;-fun rural_A : A;-fun ruritanian_A : A;-fun ruse_N : N;-fun rush_N : N;-fun rush_V : V;-fun rush_V2 : V2;-fun rushlight_N : N;-fun rushy_A : A;-fun rusk_N : N;-fun russet_A : A;-fun russet_N : N;-fun russia_PN : PN;-fun russian_A : A;-fun russian_N : N;-fun rust_N : N;-fun rust_V : V;-fun rust_V2 : V2;-fun rustic_A : A;-fun rustic_N : N;-fun rusticate_V : V;-fun rusticate_V2 : V2;-fun rusticity_N : N;-fun rustiness_N : N;-fun rustle_N : N;-fun rustle_V : V;-fun rustle_V2 : V2;-fun rustler_N : N;-fun rustless_A : A;-fun rustling_N : N;-fun rusty_A : A;-fun rut_N : N;-fun rut_V2 : V2;-fun ruth_PN : PN;-fun rutherglen_PN : PN;-fun ruthless_A : A;-fun ruthlessly_Adv : Adv;-fun ruthlessness_N : N;-fun rutland_PN : PN;-fun rwanda_PN : PN;-fun rwandan_A : A;-fun rwandan_N : N;-fun ryde_PN : PN;-fun rye_N : N;-fun rye_bread_N : N;-fun ryehill_PN : PN;-fun rechauffe_N : N;-fun regime_2_N : N;-fun resume_N : N;-fun role_2_N : N;-fun rontgen_N : N;-fun saarbrucken_PN : PN;-fun sabadeli_PN : PN;-fun sabah_PN : PN;-fun sabahan_A : A;-fun sabahan_N : N;-fun sabbatarian_A : A;-fun sabbatarian_N : N;-fun sabbath_N : N;-fun sabbatical_A : A;-fun sabbatical_N : N;-fun sable_A : A;-fun sable_N : N;-fun sabot_N : N;-fun sabotage_N : N;-fun sabotage_V2 : V2;-fun saboteur_N : N;-fun sabre_N : N;-fun sabre_V2 : V2;-fun sabre_rattling_N : N;-fun sabre_toothed_A : A;-fun sac_N : N;-fun saccharin_N : N;-fun saccharine_A : A;-fun sacerdotal_A : A;-fun sacerdotalism_N : N;-fun sachet_N : N;-fun sack_N : N;-fun sack_V2 : V2;-fun sack_race_N : N;-fun sackbut_N : N;-fun sackcloth_N : N;-fun sacking_N : N;-fun sacrament_N : N;-fun sacramental_A : A;-fun sacramento_PN : PN;-fun sacred_A : A;-fun sacredly_Adv : Adv;-fun sacredness_N : N;-fun sacrifice_N : N;-fun sacrifice_V : V;-fun sacrifice_V2 : V2;-fun sacrificial_A : A;-fun sacrilege_N : N;-fun sacrilegious_A : A;-fun sacristan_N : N;-fun sacristy_N : N;-fun sacrosanct_A : A;-fun sad_A : A;-fun sadden_V : V;-fun sadden_V2 : V2;-fun saddle_N : N;-fun saddle_V2 : V2;-fun saddle_sore_A : A;-fun saddlebag_N : N;-fun saddler_N : N;-fun saddlery_N : N;-fun sadhu_N : N;-fun sadism_N : N;-fun sadist_N : N;-fun sadistic_A : A;-fun sadly_Adv : Adv;-fun sadness_N : N;-fun sado_masochist_N : N;-fun sadomasochism_N : N;-fun sae_N : N;-fun safari_N : N;-fun safe_A : A;-fun safe_N : N;-fun safe_conduct_N : N;-fun safe_deposit_A : A;-fun safe_deposit_N : N;-fun safecracker_N : N;-fun safeguard_N : N;-fun safeguard_V2 : V2;-fun safekeeping_N : N;-fun safely_Adv : Adv;-fun safeness_N : N;-fun safety_N : N;-fun safety_belt_N : N;-fun safety_bolt_N : N;-fun safety_catch_N : N;-fun safety_curtain_N : N;-fun safety_factor_N : N;-fun safety_lamp_N : N;-fun safety_lock_N : N;-fun safety_match_N : N;-fun safety_pin_N : N;-fun safety_razor_N : N;-fun safety_valve_N : N;-fun saffron_N : N;-fun saffron_walden_PN : PN;-fun sag_N : N;-fun sag_V : V;-fun saga_N : N;-fun sagacious_A : A;-fun sagaciously_Adv : Adv;-fun sagacity_N : N;-fun sage_A : A;-fun sage_N : N;-fun sage_green_A : A;-fun sage_green_N : N;-fun sagely_Adv : Adv;-fun sagittarius_PN : PN;-fun sago_N : N;-fun sahib_N : N;-fun said_A : A;-fun saigon_PN : PN;-fun sail_N : N;-fun sail_V : V;-fun sail_V2 : V2;-fun sailcloth_N : N;-fun sailing_N : N;-fun sailing_boat_N : N;-fun sailing_master_N : N;-fun sailing_ship_N : N;-fun sailing_vessel_N : N;-fun sailor_N : N;-fun saint's_day_N : N;-fun saint_N : N;-fun sainted_A : A;-fun sainthood_N : N;-fun saintlike_A : A;-fun saintliness_N : N;-fun saintly_A : A;-fun sake_1_N : N;-fun sake_2_N : N;-fun sal_volatile_N : N;-fun salaam_N : N;-fun salaam_V : V;-fun salable_A : A;-fun salacious_A : A;-fun salaciously_Adv : Adv;-fun salaciousness_N : N;-fun salacity_N : N;-fun salad_N : N;-fun salad_dressing_N : N;-fun salad_oil_N : N;-fun salamanca_PN : PN;-fun salamander_N : N;-fun salami_N : N;-fun salaried_A : A;-fun salary_N : N;-fun sale_N : N;-fun sale_PN : PN;-fun saleable_A : A;-fun salerno_PN : PN;-fun saleroom_N : N;-fun salesman_N : N;-fun salesmanship_N : N;-fun saleswoman_N : N;-fun salford_PN : PN;-fun salience_N : N;-fun salient_A : A;-fun salient_N : N;-fun saline_A : A;-fun saline_N : N;-fun salinity_N : N;-fun salisbury_PN : PN;-fun saliva_N : N;-fun salivary_A : A;-fun salivate_V : V;-fun sallow_A : A;-fun sallow_V : V;-fun sallow_V2 : V2;-fun sally_N : N;-fun sally_PN : PN;-fun sally_V : V;-fun salmon_N : N;-fun salon_N : N;-fun saloon_N : N;-fun salsify_N : N;-fun salt_A : A;-fun salt_N : N;-fun salt_PN : PN;-fun salt_V2 : V2;-fun salt_cellar_N : N;-fun salt_lick_N : N;-fun saltash_PN : PN;-fun saltburn_PN : PN;-fun saltcoats_PN : PN;-fun saltiness_N : N;-fun saltpan_N : N;-fun saltpetre_N : N;-fun saltwater_N : N;-fun saltworks_N : N;-fun salty_A : A;-fun salubrious_A : A;-fun salubrity_N : N;-fun salutary_A : A;-fun salutation_N : N;-fun salute_N : N;-fun salute_V : V;-fun salute_V2 : V2;-fun salvador_PN : PN;-fun salvadorean_A : A;-fun salvadorean_N : N;-fun salvage_N : N;-fun salvage_V2 : V2;-fun salvation_N : N;-fun salve_N : N;-fun salve_V2 : V2;-fun salver_N : N;-fun salvia_N : N;-fun salvo_N : N;-fun salzburg_PN : PN;-fun sam_PN : PN;-fun samantha_PN : PN;-fun samaritan_N : N;-fun samba_N : N;-fun same_A : A;-fun same_Adv : Adv;-fun sameness_N : N;-fun sammy_PN : PN;-fun samoa_PN : PN;-fun samoan_A : A;-fun samoan_N : N;-fun samovar_N : N;-fun sampan_N : N;-fun sample_N : N;-fun sample_V2 : V2;-fun sampler_N : N;-fun samuel_PN : PN;-fun samurai_N : N;-fun san_antonio_PN : PN;-fun san_bernardino_PN : PN;-fun san_diego_PN : PN;-fun san_francisco_PN : PN;-fun san_jose_PN : PN;-fun san_juan_PN : PN;-fun san_marinese_A : A;-fun san_marinese_N : N;-fun san_marino_PN : PN;-fun san_sebastian_PN : PN;-fun sanatorium_N : N;-fun sanctification_N : N;-fun sanctify_V2 : V2;-fun sanctimonious_A : A;-fun sanctimoniously_Adv : Adv;-fun sanction_N : N;-fun sanction_V2 : V2;-fun sanctity_N : N;-fun sanctuary_N : N;-fun sanctum_N : N;-fun sand_N : N;-fun sand_V2 : V2;-fun sand_bar_N : N;-fun sandal_N : N;-fun sandalled_A : A;-fun sandalwood_N : N;-fun sandbach_PN : PN;-fun sandbag_N : N;-fun sandbank_N : N;-fun sandblast_V2 : V2;-fun sandboy_N : N;-fun sandfly_N : N;-fun sandglass_N : N;-fun sandiness_N : N;-fun sandown_PN : PN;-fun sandpaper_N : N;-fun sandpaper_V2 : V2;-fun sandpiper_N : N;-fun sandpit_N : N;-fun sandra_PN : PN;-fun sandstone_N : N;-fun sandstorm_N : N;-fun sandwich_N : N;-fun sandwich_V2 : V2;-fun sandwich_board_N : N;-fun sandwichman_N : N;-fun sandy_A : A;-fun sandy_PN : PN;-fun sane_A : A;-fun sanely_Adv : Adv;-fun sang_froid_N : N;-fun sango_N : N;-fun sanguinary_A : A;-fun sanguine_A : A;-fun sanitary_A : A;-fun sanitation_N : N;-fun sanity_N : N;-fun sanskrit_N : N;-fun santa_claus_N : N;-fun santa_claus_PN : PN;-fun santander_PN : PN;-fun santiago_PN : PN;-fun santo_domingo_PN : PN;-fun santos_PN : PN;-fun sao_paolo_PN : PN;-fun sap_N : N;-fun sap_V : V;-fun sap_V2 : V2;-fun saphead_N : N;-fun sapience_N : N;-fun sapient_A : A;-fun sapiently_Adv : Adv;-fun sapless_A : A;-fun sapling_N : N;-fun sapper_N : N;-fun sapphic_A : A;-fun sapphire_N : N;-fun sapporo_PN : PN;-fun sappy_A : A;-fun sapwood_N : N;-fun sara_PN : PN;-fun saraband_N : N;-fun saracen_N : N;-fun sarah_PN : PN;-fun sarajevo_PN : PN;-fun saratov_PN : PN;-fun sarawak_PN : PN;-fun sarawakian_A : A;-fun sarawakian_N : N;-fun sarcasm_N : N;-fun sarcastic_A : A;-fun sarcastically_Adv : Adv;-fun sarcophagus_N : N;-fun sardine_N : N;-fun sardonic_A : A;-fun sardonically_Adv : Adv;-fun sari_N : N;-fun sarisbury_PN : PN;-fun sarong_N : N;-fun sarsaparilla_N : N;-fun sartorial_A : A;-fun sash_N : N;-fun sash_cord_N : N;-fun sash_line_N : N;-fun saskatchewan_PN : PN;-fun sassari_PN : PN;-fun sassenach_N : N;-fun sat_PN : PN;-fun satan_N : N;-fun satanic_A : A;-fun satchel_N : N;-fun sate_V2 : V2;-fun sateen_N : N;-fun satellite_N : N;-fun satiable_A : A;-fun satiate_V2 : V2;-fun satiety_N : N;-fun satin_A : A;-fun satin_N : N;-fun satinwood_N : N;-fun satire_N : N;-fun satirical_A : A;-fun satirically_Adv : Adv;-fun satirist_N : N;-fun satirize_V2 : V2;-fun satisfaction_N : N;-fun satisfactorily_Adv : Adv;-fun satisfactory_A : A;-fun satisfy_V : V;-fun satisfy_V2 : V2;-fun satisfying_A : A;-fun satisfyingly_Adv : Adv;-fun satrap_N : N;-fun satsuma_N : N;-fun saturate_V2 : V2;-fun saturation_N : N;-fun saturday_N : N;-fun saturday_PN : PN;-fun saturn_PN : PN;-fun saturnalia_N : N;-fun saturnine_A : A;-fun satyr_N : N;-fun satyric_A : A;-fun sauce_N : N;-fun sauce_V2 : V2;-fun sauce_boat_N : N;-fun saucepan_N : N;-fun saucer_N : N;-fun saucer_eyed_A : A;-fun sauchie_PN : PN;-fun saucily_Adv : Adv;-fun sauciness_N : N;-fun saucy_A : A;-fun saudi_arabia_PN : PN;-fun saudi_arabian_A : A;-fun saudi_arabian_N : N;-fun sauerkraut_N : N;-fun sauna_N : N;-fun saunter_N : N;-fun saunter_V : V;-fun saunterer_N : N;-fun saurian_A : A;-fun saurian_N : N;-fun sausage_N : N;-fun sausage_dog_N : N;-fun sausage_meat_N : N;-fun sausage_roll_N : N;-fun saute_A : A;-fun saute_V2 : V2;-fun savage_A : A;-fun savage_N : N;-fun savage_V2 : V2;-fun savagely_Adv : Adv;-fun savageness_N : N;-fun savagery_N : N;-fun savanna_N : N;-fun savannah_N : N;-fun savant_N : N;-fun save_N : N;-fun save_V : V;-fun save_V2 : V2;-fun saveloy_N : N;-fun saver_N : N;-fun saving_A : A;-fun saving_N : N;-fun savings_bank_N : N;-fun saviour_N : N;-fun savoir_faire_N : N;-fun savory_N : N;-fun savour_N : N;-fun savour_V : V;-fun savour_V2 : V2;-fun savoury_A : A;-fun savoury_N : N;-fun savoy_N : N;-fun savvy_N : N;-fun savvy_V : V;-fun saw_N : N;-fun saw_V : V;-fun saw_V2 : V2;-fun saw_pit_N : N;-fun sawbridgeworth_PN : PN;-fun sawdust_N : N;-fun sawhorse_N : N;-fun sawmill_N : N;-fun sawyer_N : N;-fun sax_N : N;-fun saxhorn_N : N;-fun saxifrage_N : N;-fun saxon_A : A;-fun saxon_N : N;-fun saxophone_N : N;-fun saxophonist_N : N;-fun say_N : N;-fun say_V : V;-fun say_V2 : V2;-fun saying_N : N;-fun scab_N : N;-fun scabbard_N : N;-fun scabby_A : A;-fun scabies_N : N;-fun scabious_N : N;-fun scabrous_A : A;-fun scaffold_N : N;-fun scaffolding_N : N;-fun scalawag_N : N;-fun scald_N : N;-fun scald_V2 : V2;-fun scale_N : N;-fun scale_V : V;-fun scale_V2 : V2;-fun scaling_ladder_N : N;-fun scallop_N : N;-fun scallop_V2 : V2;-fun scallop_shell_N : N;-fun scallywag_N : N;-fun scalp_N : N;-fun scalp_V2 : V2;-fun scalpel_N : N;-fun scaly_A : A;-fun scamp_N : N;-fun scamp_V2 : V2;-fun scamper_N : N;-fun scamper_V : V;-fun scan_V : V;-fun scan_V2 : V2;-fun scandal_N : N;-fun scandalize_V2 : V2;-fun scandalmonger_N : N;-fun scandalmongering_N : N;-fun scandalous_A : A;-fun scandalously_Adv : Adv;-fun scandinavian_A : A;-fun scandinavian_N : N;-fun scanner_N : N;-fun scansion_N : N;-fun scant_A : A;-fun scant_V2 : V2;-fun scantily_Adv : Adv;-fun scantiness_N : N;-fun scantling_N : N;-fun scanty_A : A;-fun scapegoat_N : N;-fun scapegrace_N : N;-fun scapula_N : N;-fun scar_N : N;-fun scar_V : V;-fun scar_V2 : V2;-fun scarab_N : N;-fun scarborough_PN : PN;-fun scarce_A : A;-fun scarcely_Adv : Adv;-fun scarcity_N : N;-fun scare_N : N;-fun scare_V : V;-fun scare_V2 : V2;-fun scarecrow_N : N;-fun scaremonger_N : N;-fun scarf_N : N;-fun scarf_pin_N : N;-fun scarify_V2 : V2;-fun scarlet_A : A;-fun scarlet_N : N;-fun scarp_N : N;-fun scarper_V : V;-fun scary_A : A;-fun scathing_A : A;-fun scathingly_Adv : Adv;-fun scatter_N : N;-fun scatter_V : V;-fun scatter_V2 : V2;-fun scatterbrain_N : N;-fun scatterbrained_A : A;-fun scattered_A : A;-fun scatty_A : A;-fun scavenge_V : V;-fun scavenger_N : N;-fun scenario_N : N;-fun scenarist_N : N;-fun scene_N : N;-fun scene_painter_N : N;-fun scene_shifter_N : N;-fun scenery_N : N;-fun scenic_A : A;-fun scenically_Adv : Adv;-fun scent_N : N;-fun scent_V2 : V2;-fun scentless_A : A;-fun sceptered_A : A;-fun sceptic_N : N;-fun sceptical_A : A;-fun sceptically_Adv : Adv;-fun scepticism_N : N;-fun sceptre_N : N;-fun sceptred_A : A;-fun schedule_N : N;-fun schedule_V2 : V2;-fun schema_N : N;-fun schematic_A : A;-fun schematically_Adv : Adv;-fun scheme_N : N;-fun scheme_V : V;-fun scheme_V2 : V2;-fun schemer_N : N;-fun scherzo_N : N;-fun schism_N : N;-fun schismatic_A : A;-fun schist_N : N;-fun schizoid_A : A;-fun schizophrenia_N : N;-fun schizophrenic_A : A;-fun schizophrenic_N : N;-fun schmaltz_N : N;-fun schmaltzy_A : A;-fun schmalz_N : N;-fun schmalzy_A : A;-fun schnapps_N : N;-fun schnitzel_N : N;-fun schnorkel_N : N;-fun scholar_N : N;-fun scholarly_A : A;-fun scholarship_N : N;-fun scholastic_A : A;-fun scholasticism_N : N;-fun school_N : N;-fun school_V2 : V2;-fun school_board_N : N;-fun schoolbook_N : N;-fun schoolboy_N : N;-fun schoolchild_N : N;-fun schoolfellow_N : N;-fun schoolfriend_N : N;-fun schoolgirl_N : N;-fun schoolhouse_N : N;-fun schooling_N : N;-fun schoolman_N : N;-fun schoolmaster_N : N;-fun schoolmate_N : N;-fun schoolmistress_N : N;-fun schoolroom_N : N;-fun schoolteacher_N : N;-fun schooltime_N : N;-fun schooner_N : N;-fun schottische_N : N;-fun schwa_N : N;-fun schwerin_PN : PN;-fun sci_fi_N : N;-fun sciatic_A : A;-fun sciatica_N : N;-fun science_N : N;-fun scientific_A : A;-fun scientifically_Adv : Adv;-fun scientist_N : N;-fun scimitar_N : N;-fun scintilla_N : N;-fun scintillate_V : V;-fun scintillation_N : N;-fun scion_N : N;-fun sclerosis_N : N;-fun scoff_N : N;-fun scoff_V : V;-fun scoff_V2 : V2;-fun scoffer_N : N;-fun scoffingly_Adv : Adv;-fun scold_N : N;-fun scold_V : V;-fun scold_V2 : V2;-fun scolding_N : N;-fun scollop_N : N;-fun scollop_V2 : V2;-fun sconce_N : N;-fun scone_N : N;-fun scoop_N : N;-fun scoop_V2 : V2;-fun scoopful_N : N;-fun scoot_V : V;-fun scooter_N : N;-fun scope_N : N;-fun scorbutic_A : A;-fun scorch_N : N;-fun scorch_V : V;-fun scorch_V2 : V2;-fun scorcher_N : N;-fun scorching_A : A;-fun scorching_Adv : Adv;-fun score_N : N;-fun score_V : V;-fun score_V2 : V2;-fun scoreboard_N : N;-fun scorebook_N : N;-fun scorecard_N : N;-fun scorer_N : N;-fun scorn_N : N;-fun scorn_V2 : V2;-fun scornful_A : A;-fun scornfully_Adv : Adv;-fun scorpio_PN : PN;-fun scorpion_N : N;-fun scot_N : N;-fun scot_free_Adv : Adv;-fun scotch_A : A;-fun scotch_N : N;-fun scotch_V2 : V2;-fun scotchman_N : N;-fun scotchwoman_N : N;-fun scotland_PN : PN;-fun scotland_yard_PN : PN;-fun scots_A : A;-fun scotsman_N : N;-fun scotswoman_N : N;-fun scottish_A : A;-fun scoundrel_N : N;-fun scoundrelly_A : A;-fun scour_N : N;-fun scour_V : V;-fun scour_V2 : V2;-fun scourer_N : N;-fun scourge_N : N;-fun scourge_V2 : V2;-fun scout_N : N;-fun scout_V : V;-fun scout_V2 : V2;-fun scoutmaster_N : N;-fun scow_N : N;-fun scowl_N : N;-fun scowl_V : V;-fun scrabble_N : N;-fun scrabble_V : V;-fun scrag_N : N;-fun scrag_V2 : V2;-fun scrag_end_N : N;-fun scraggy_A : A;-fun scram_V : V;-fun scramble_N : N;-fun scramble_V : V;-fun scramble_V2 : V2;-fun scrambler_N : N;-fun scrap_N : N;-fun scrap_V2 : V2;-fun scrap_iron_N : N;-fun scrapbook_N : N;-fun scrape_N : N;-fun scrape_V : V;-fun scrape_V2 : V2;-fun scraper_N : N;-fun scrapheap_N : N;-fun scraping_N : N;-fun scrappily_Adv : Adv;-fun scrappiness_N : N;-fun scrappy_A : A;-fun scratch_N : N;-fun scratch_V : V;-fun scratch_V2 : V2;-fun scratch_pad_N : N;-fun scratch_race_N : N;-fun scratchy_A : A;-fun scrawl_N : N;-fun scrawl_V : V;-fun scrawl_V2 : V2;-fun scrawny_A : A;-fun scream_N : N;-fun scream_V : V;-fun scream_V2 : V2;-fun screamingly_Adv : Adv;-fun scree_N : N;-fun screech_N : N;-fun screech_V : V;-fun screech_V2 : V2;-fun screech_owl_N : N;-fun screed_N : N;-fun screen_N : N;-fun screen_V : V;-fun screen_V2 : V2;-fun screw_N : N;-fun screw_V : V;-fun screw_V2 : V2;-fun screw_topped_A : A;-fun screwball_A : A;-fun screwball_N : N;-fun screwdriver_N : N;-fun screwy_A : A;-fun scribble_N : N;-fun scribble_V : V;-fun scribble_V2 : V2;-fun scribbler_N : N;-fun scribbling_block_N : N;-fun scribe_N : N;-fun scrimmage_N : N;-fun scrimmage_V : V;-fun scrimmage_V2 : V2;-fun scrimp_V : V;-fun scrimp_V2 : V2;-fun scrimshank_V : V;-fun scrimshanker_N : N;-fun scrip_N : N;-fun script_N : N;-fun scripted_A : A;-fun scriptural_A : A;-fun scripture_N : N;-fun scriptwriter_N : N;-fun scrivener_N : N;-fun scrofula_N : N;-fun scrofulous_A : A;-fun scroll_N : N;-fun scrooge_N : N;-fun scrotum_N : N;-fun scrounge_V : V;-fun scrounge_V2 : V2;-fun scrounger_N : N;-fun scrub_N : N;-fun scrub_V : V;-fun scrub_V2 : V2;-fun scrubbing_brush_N : N;-fun scrubby_A : A;-fun scruff_N : N;-fun scruffy_A : A;-fun scrum_N : N;-fun scrummage_N : N;-fun scrumptious_A : A;-fun scrunch_N : N;-fun scrunch_V2 : V2;-fun scruple_N : N;-fun scruple_V : V;-fun scrupulous_A : A;-fun scrupulously_Adv : Adv;-fun scrutineer_N : N;-fun scrutinize_V2 : V2;-fun scrutiny_N : N;-fun scud_N : N;-fun scud_V : V;-fun scuff_V : V;-fun scuff_V2 : V2;-fun scuffle_V : V;-fun scull_N : N;-fun scull_V : V;-fun scull_V2 : V2;-fun sculler_N : N;-fun scullery_N : N;-fun scullion_N : N;-fun sculpt_V : V;-fun sculpt_V2 : V2;-fun sculptor_N : N;-fun sculptress_N : N;-fun sculptural_A : A;-fun sculpture_N : N;-fun sculpture_V : V;-fun sculpture_V2 : V2;-fun scum_N : N;-fun scummy_A : A;-fun scunthorpe_PN : PN;-fun scupper_N : N;-fun scupper_V2 : V2;-fun scurf_N : N;-fun scurfy_A : A;-fun scurrility_N : N;-fun scurrilous_A : A;-fun scurrilously_Adv : Adv;-fun scurry_N : N;-fun scurry_V : V;-fun scurvily_Adv : Adv;-fun scurvy_A : A;-fun scurvy_N : N;-fun scut_N : N;-fun scutcheon_N : N;-fun scuttle_N : N;-fun scuttle_V : V;-fun scuttle_V2 : V2;-fun scylla_N : N;-fun scythe_N : N;-fun scythe_V2 : V2;-fun sea_N : N;-fun sea_anemone_N : N;-fun sea_animal_N : N;-fun sea_bathing_N : N;-fun sea_boat_N : N;-fun sea_bream_N : N;-fun sea_breeze_N : N;-fun sea_coal_N : N;-fun sea_cow_N : N;-fun sea_dog_N : N;-fun sea_fish_N : N;-fun sea_girt_A : A;-fun sea_god_N : N;-fun sea_green_A : A;-fun sea_green_N : N;-fun sea_horse_N : N;-fun sea_level_N : N;-fun sea_lion_N : N;-fun sea_power_N : N;-fun sea_rover_N : N;-fun sea_snake_N : N;-fun sea_urchin_N : N;-fun sea_wall_N : N;-fun sea_water_N : N;-fun seabed_N : N;-fun seabird_N : N;-fun seaboard_N : N;-fun seaborne_A : A;-fun seafarer_N : N;-fun seafaring_A : A;-fun seafood_N : N;-fun seaford_PN : PN;-fun seafront_N : N;-fun seagoing_A : A;-fun seagull_N : N;-fun seaham_PN : PN;-fun seakale_N : N;-fun seal_N : N;-fun seal_V : V;-fun seal_V2 : V2;-fun seal_ring_N : N;-fun sealer_N : N;-fun sealing_wax_N : N;-fun sealskin_N : N;-fun sealyham_N : N;-fun seam_N : N;-fun seam_V2 : V2;-fun seaman_N : N;-fun seamanlike_A : A;-fun seamanship_N : N;-fun seamless_A : A;-fun seamstress_N : N;-fun seamus_PN : PN;-fun seamy_A : A;-fun sean_PN : PN;-fun seaplane_N : N;-fun seaport_N : N;-fun sear_A : A;-fun sear_V2 : V2;-fun search_N : N;-fun search_V : V;-fun search_V2 : V2;-fun search_party_N : N;-fun search_warrant_N : N;-fun searcher_N : N;-fun searching_A : A;-fun searchingly_Adv : Adv;-fun searchlight_N : N;-fun searing_iron_N : N;-fun seascape_N : N;-fun seashell_N : N;-fun seashore_N : N;-fun seasick_A : A;-fun seasickness_N : N;-fun seaside_N : N;-fun season_N : N;-fun season_V : V;-fun season_V2 : V2;-fun season_ticket_N : N;-fun seasonable_A : A;-fun seasonal_A : A;-fun seasonally_Adv : Adv;-fun seasoning_N : N;-fun seat_N : N;-fun seat_V2 : V2;-fun seat_belt_N : N;-fun seating_room_N : N;-fun seaton_burn_PN : PN;-fun seaton_delaval_PN : PN;-fun seattle_PN : PN;-fun seaward_A : A;-fun seawards_Adv : Adv;-fun seaway_N : N;-fun seaweed_N : N;-fun seaworthiness_N : N;-fun seaworthy_A : A;-fun sec_N : N;-fun secede_V : V;-fun secession_N : N;-fun secessionist_N : N;-fun seclude_V2 : V2;-fun secluded_A : A;-fun seclusion_N : N;-fun second_N : N;-fun second_V2 : V2;-fun second_best_A : A;-fun second_best_Adv : Adv;-fun second_best_N : N;-fun second_class_A : A;-fun second_class_Adv : Adv;-fun second_class_N : N;-fun second_hand_A : A;-fun second_hand_N : N;-fun second_rate_A : A;-fun second_rater_N : N;-fun second_sighted_A : A;-fun secondarily_Adv : Adv;-fun secondary_A : A;-fun seconder_N : N;-fun secondly_Adv : Adv;-fun secondment_N : N;-fun secrecy_N : N;-fun secret_A : A;-fun secret_N : N;-fun secretarial_A : A;-fun secretariat_N : N;-fun secretary_N : N;-fun secretary_general_N : N;-fun secrete_V2 : V2;-fun secretion_N : N;-fun secretive_A : A;-fun secretively_Adv : Adv;-fun secretiveness_N : N;-fun secretly_Adv : Adv;-fun sect_N : N;-fun sectarian_A : A;-fun sectarian_N : N;-fun sectarianism_N : N;-fun section_N : N;-fun sectional_A : A;-fun sectionalism_N : N;-fun sector_N : N;-fun secular_A : A;-fun secularism_N : N;-fun secularist_N : N;-fun secularize_V2 : V2;-fun secure_A : A;-fun secure_V2 : V2;-fun securely_Adv : Adv;-fun securicor_PN : PN;-fun security_N : N;-fun sedan_N : N;-fun sedan_chair_N : N;-fun sedate_A : A;-fun sedate_V2 : V2;-fun sedately_Adv : Adv;-fun sedateness_N : N;-fun sedation_N : N;-fun sedative_A : A;-fun sedative_N : N;-fun sedentary_A : A;-fun sedge_N : N;-fun sedgy_A : A;-fun sediment_N : N;-fun sedimentary_A : A;-fun sedition_N : N;-fun seditious_A : A;-fun seduce_V2 : V2;-fun seducer_N : N;-fun seduction_N : N;-fun seductive_A : A;-fun seductively_Adv : Adv;-fun sedulous_A : A;-fun sedulously_Adv : Adv;-fun see_N : N;-fun see_V : V;-fun see_V2 : V2;-fun see_through_A : A;-fun seed_N : N;-fun seed_V : V;-fun seed_V2 : V2;-fun seed_corn_N : N;-fun seedbed_N : N;-fun seedcake_N : N;-fun seedily_Adv : Adv;-fun seediness_N : N;-fun seedless_A : A;-fun seedling_N : N;-fun seedsman_N : N;-fun seedtime_N : N;-fun seedy_A : A;-fun seek_V2 : V2;-fun seeker_N : N;-fun seem_V : V;-fun seeming_A : A;-fun seemingly_Adv : Adv;-fun seemliness_N : N;-fun seemly_A : A;-fun seep_V : V;-fun seepage_N : N;-fun seer_N : N;-fun seersucker_N : N;-fun seesaw_N : N;-fun seesaw_V : V;-fun seethe_V : V;-fun seethe_V2 : V2;-fun segment_N : N;-fun segment_V : V;-fun segment_V2 : V2;-fun segmentation_N : N;-fun segregate_V2 : V2;-fun segregation_N : N;-fun seignior_N : N;-fun seine_N : N;-fun seine_V : V;-fun seine_V2 : V2;-fun seismic_A : A;-fun seismograph_N : N;-fun seismologist_N : N;-fun seismology_N : N;-fun seize_V : V;-fun seize_V2 : V2;-fun seizure_N : N;-fun selby_PN : PN;-fun seldom_Adv : Adv;-fun select_A : A;-fun select_V2 : V2;-fun selection_N : N;-fun selective_A : A;-fun selectively_Adv : Adv;-fun selectivity_N : N;-fun selector_N : N;-fun selenium_N : N;-fun self_N : N;-fun self_abasement_N : N;-fun self_abnegation_N : N;-fun self_absorbed_A : A;-fun self_acting_A : A;-fun self_activating_A : A;-fun self_addressed_A : A;-fun self_appointed_A : A;-fun self_assertion_N : N;-fun self_assertive_A : A;-fun self_assurance_N : N;-fun self_assured_A : A;-fun self_centred_A : A;-fun self_collected_A : A;-fun self_coloured_A : A;-fun self_command_N : N;-fun self_communion_N : N;-fun self_complacency_N : N;-fun self_confessed_A : A;-fun self_confidence_N : N;-fun self_confident_A : A;-fun self_conscious_A : A;-fun self_consciousness_N : N;-fun self_contained_A : A;-fun self_control_N : N;-fun self_defence_N : N;-fun self_denial_N : N;-fun self_denying_A : A;-fun self_determination_N : N;-fun self_educated_A : A;-fun self_effacing_A : A;-fun self_employed_A : A;-fun self_esteem_N : N;-fun self_evident_A : A;-fun self_examination_N : N;-fun self_explanatory_A : A;-fun self_help_N : N;-fun self_importance_N : N;-fun self_important_A : A;-fun self_imposed_A : A;-fun self_indulgence_N : N;-fun self_indulgent_A : A;-fun self_interest_N : N;-fun self_locking_A : A;-fun self_made_A : A;-fun self_opinionated_A : A;-fun self_pity_N : N;-fun self_possessed_A : A;-fun self_possession_N : N;-fun self_preservation_N : N;-fun self_raising_A : A;-fun self_reliance_N : N;-fun self_reliant_A : A;-fun self_respect_N : N;-fun self_respecting_A : A;-fun self_righteous_A : A;-fun self_rule_N : N;-fun self_sacrifice_N : N;-fun self_sacrificing_A : A;-fun self_same_A : A;-fun self_sealing_A : A;-fun self_seeker_N : N;-fun self_seeking_A : A;-fun self_seeking_N : N;-fun self_service_N : N;-fun self_sown_A : A;-fun self_starter_N : N;-fun self_styled_A : A;-fun self_sufficiency_N : N;-fun self_sufficient_A : A;-fun self_sufficing_A : A;-fun self_supporting_A : A;-fun self_will_N : N;-fun self_willed_A : A;-fun self_winding_A : A;-fun selfconsciously_Adv : Adv;-fun selfish_A : A;-fun selfishly_Adv : Adv;-fun selfishness_N : N;-fun selkirk_PN : PN;-fun sell_N : N;-fun sell_V : V;-fun sell_V2 : V2;-fun seller_N : N;-fun selling_N : N;-fun sellout_N : N;-fun selsey_PN : PN;-fun selston_PN : PN;-fun selvage_N : N;-fun selvedge_N : N;-fun semantic_A : A;-fun semantics_N : N;-fun semaphore_N : N;-fun semaphore_V : V;-fun semaphore_V2 : V2;-fun semarang_PN : PN;-fun semblance_N : N;-fun semen_N : N;-fun semester_N : N;-fun semibreve_N : N;-fun semicircle_N : N;-fun semicircular_A : A;-fun semicolon_N : N;-fun semiconducting_A : A;-fun semiconductor_N : N;-fun semiconscious_A : A;-fun semidetached_A : A;-fun semifinal_N : N;-fun semifinalist_N : N;-fun seminal_A : A;-fun seminar_N : N;-fun seminarist_N : N;-fun seminary_N : N;-fun semiofficial_A : A;-fun semiquaver_N : N;-fun semirigid_A : A;-fun semite_A : A;-fun semite_N : N;-fun semitic_A : A;-fun semitone_N : N;-fun semitropical_A : A;-fun semivowel_N : N;-fun semolina_N : N;-fun sempstress_N : N;-fun senate_N : N;-fun senator_N : N;-fun senatorial_A : A;-fun send_V : V;-fun send_V2 : V2;-fun send_up_N : N;-fun sender_N : N;-fun sendoff_N : N;-fun senegal_PN : PN;-fun senegalese_A : A;-fun senegalese_N : N;-fun senescence_N : N;-fun senescent_A : A;-fun seneschal_N : N;-fun senile_A : A;-fun senility_N : N;-fun senior_A : A;-fun senior_N : N;-fun seniority_N : N;-fun senna_N : N;-fun senora_N : N;-fun senorita_N : N;-fun sensation_N : N;-fun sensational_A : A;-fun sensationalism_N : N;-fun sensationalist_N : N;-fun sensationally_Adv : Adv;-fun sense_N : N;-fun sense_V2 : V2;-fun sense_organ_N : N;-fun senseless_A : A;-fun senselessly_Adv : Adv;-fun senselessness_N : N;-fun sensibility_N : N;-fun sensible_A : A;-fun sensibly_Adv : Adv;-fun sensitive_A : A;-fun sensitively_Adv : Adv;-fun sensitivity_N : N;-fun sensitization_N : N;-fun sensitize_V2 : V2;-fun sensory_A : A;-fun sensual_A : A;-fun sensualism_N : N;-fun sensualist_N : N;-fun sensuality_N : N;-fun sensuous_A : A;-fun sensuously_Adv : Adv;-fun sensuousness_N : N;-fun sentence_N : N;-fun sentence_V2 : V2;-fun sententious_A : A;-fun sententiously_Adv : Adv;-fun sentient_A : A;-fun sentiment_N : N;-fun sentimental_A : A;-fun sentimentalist_N : N;-fun sentimentality_N : N;-fun sentimentalize_V : V;-fun sentimentalize_V2 : V2;-fun sentimentally_Adv : Adv;-fun sentinel_N : N;-fun sentry_N : N;-fun sentry_box_N : N;-fun sentry_go_N : N;-fun seoul_PN : PN;-fun sepal_N : N;-fun separability_N : N;-fun separable_A : A;-fun separably_Adv : Adv;-fun separate_A : A;-fun separate_N : N;-fun separate_V : V;-fun separate_V2 : V2;-fun separately_Adv : Adv;-fun separation_N : N;-fun separatist_N : N;-fun separator_N : N;-fun sepia_N : N;-fun sepsis_N : N;-fun sept_PN : PN;-fun september_N : N;-fun september_PN : PN;-fun septet_N : N;-fun septic_A : A;-fun septicaemia_N : N;-fun septicemia_N : N;-fun septuagenarian_N : N;-fun septuagint_N : N;-fun sepulchral_A : A;-fun sepulchre_N : N;-fun sepulture_N : N;-fun sequel_N : N;-fun sequence_N : N;-fun sequent_A : A;-fun sequential_A : A;-fun sequentially_Adv : Adv;-fun sequester_V2 : V2;-fun sequestered_A : A;-fun sequestrate_V2 : V2;-fun sequestration_N : N;-fun sequin_N : N;-fun sequoia_N : N;-fun seraglio_N : N;-fun seraph_N : N;-fun seraphic_A : A;-fun serbo_croat_N : N;-fun sere_A : A;-fun serenade_N : N;-fun serenade_V2 : V2;-fun serendipity_N : N;-fun serene_A : A;-fun serenely_Adv : Adv;-fun serenity_N : N;-fun serf_N : N;-fun serfdom_N : N;-fun serge_N : N;-fun sergeant_N : N;-fun sergeant_major_N : N;-fun serial_A : A;-fun serial_N : N;-fun serialize_V2 : V2;-fun serially_Adv : Adv;-fun seriatim_Adv : Adv;-fun sericultural_A : A;-fun sericulture_N : N;-fun sericulturist_N : N;-fun series_N : N;-fun seriocomic_A : A;-fun serious_A : A;-fun seriously_Adv : Adv;-fun seriousness_N : N;-fun serjeant_N : N;-fun serjeant_at_arms_N : N;-fun sermon_N : N;-fun sermonize_V : V;-fun sermonize_V2 : V2;-fun serous_A : A;-fun serpent_N : N;-fun serpentine_A : A;-fun serrated_A : A;-fun serried_A : A;-fun serum_N : N;-fun servant_N : N;-fun serve_N : N;-fun serve_V : V;-fun serve_V2 : V2;-fun server_N : N;-fun service_N : N;-fun service_V2 : V2;-fun serviceable_A : A;-fun serviceman_N : N;-fun serviette_N : N;-fun servile_A : A;-fun servilely_Adv : Adv;-fun servility_N : N;-fun serving_N : N;-fun servitor_N : N;-fun servitude_N : N;-fun sesame_N : N;-fun sesotho_N : N;-fun sesquipedalian_A : A;-fun session_N : N;-fun set_N : N;-fun set_V : V;-fun set_V2 : V2;-fun set_square_N : N;-fun set_to_N : N;-fun set_up_N : N;-fun setback_N : N;-fun setswana_N : N;-fun sett_N : N;-fun settee_N : N;-fun setter_N : N;-fun setting_N : N;-fun settle_N : N;-fun settle_V : V;-fun settle_V2 : V2;-fun settled_A : A;-fun settlement_N : N;-fun settler_N : N;-fun seven_sisters_PN : PN;-fun sevenfold_A : A;-fun sevenfold_Adv : Adv;-fun sevenoaks_PN : PN;-fun sever_V : V;-fun sever_V2 : V2;-fun several_A : A;-fun severally_Adv : Adv;-fun severance_N : N;-fun severe_A : A;-fun severely_Adv : Adv;-fun severity_N : N;-fun sevilla_PN : PN;-fun seville_PN : PN;-fun sew_V : V;-fun sew_V2 : V2;-fun sewage_N : N;-fun sewage_farm_N : N;-fun sewage_works_N : N;-fun sewer_N : N;-fun sewer_gas_N : N;-fun sewer_rat_N : N;-fun sewerage_N : N;-fun sewing_N : N;-fun sewing_machine_N : N;-fun sex_N : N;-fun sex_V2 : V2;-fun sex_starved_A : A;-fun sexagenarian_A : A;-fun sexagenarian_N : N;-fun sexed_A : A;-fun sexism_N : N;-fun sexist_A : A;-fun sexist_N : N;-fun sexless_A : A;-fun sextant_N : N;-fun sextet_N : N;-fun sextette_N : N;-fun sexton_N : N;-fun sexual_A : A;-fun sexuality_N : N;-fun sexually_Adv : Adv;-fun sexy_A : A;-fun seychelles_PN : PN;-fun seychellois_A : A;-fun seychellois_N : N;-fun senor_N : N;-fun sgd_PN : PN;-fun sgt_PN : PN;-fun shabbily_Adv : Adv;-fun shabbiness_N : N;-fun shabby_A : A;-fun shabby_genteel_A : A;-fun shack_N : N;-fun shack_V : V;-fun shackle_N : N;-fun shackle_V2 : V2;-fun shad_N : N;-fun shaddock_N : N;-fun shade_N : N;-fun shade_V : V;-fun shade_V2 : V2;-fun shade_tree_N : N;-fun shading_N : N;-fun shadow_N : N;-fun shadow_V2 : V2;-fun shadow_boxing_N : N;-fun shadowy_A : A;-fun shady_A : A;-fun shaft_N : N;-fun shag_N : N;-fun shag_V : V;-fun shag_V2 : V2;-fun shaggily_Adv : Adv;-fun shagginess_N : N;-fun shagging_N : N;-fun shaggy_A : A;-fun shah_N : N;-fun shake_N : N;-fun shake_V : V;-fun shake_V2 : V2;-fun shake_up_N : N;-fun shakedown_N : N;-fun shakeout_N : N;-fun shaker_N : N;-fun shakespearian_A : A;-fun shakily_Adv : Adv;-fun shakiness_N : N;-fun shaking_N : N;-fun shaky_A : A;-fun shale_N : N;-fun shale_oil_N : N;-fun shallot_N : N;-fun shallow_A : A;-fun shallow_N : N;-fun shallow_V : V;-fun sham_A : A;-fun sham_N : N;-fun sham_V : V;-fun sham_V2 : V2;-fun shamble_N : N;-fun shamble_V : V;-fun shambles_N : N;-fun shame_N : N;-fun shame_V2 : V2;-fun shame_making_A : A;-fun shamefaced_A : A;-fun shamefacedly_Adv : Adv;-fun shameful_A : A;-fun shamefully_Adv : Adv;-fun shameless_A : A;-fun shamelessly_Adv : Adv;-fun shamelessness_N : N;-fun shammy_N : N;-fun shampoo_N : N;-fun shampoo_V2 : V2;-fun shamrock_N : N;-fun shandy_N : N;-fun shanghai_PN : PN;-fun shanghai_V2 : V2;-fun shank_N : N;-fun shanklin_PN : PN;-fun shantung_N : N;-fun shanty_N : N;-fun shantytown_N : N;-fun shape_N : N;-fun shape_V : V;-fun shape_V2 : V2;-fun shapeless_A : A;-fun shapelessly_Adv : Adv;-fun shapelessness_N : N;-fun shapely_A : A;-fun shard_N : N;-fun share_N : N;-fun share_V : V;-fun share_V2 : V2;-fun share_out_N : N;-fun sharecropper_N : N;-fun shareholder_N : N;-fun shareholding_N : N;-fun shark_N : N;-fun sharkskin_N : N;-fun sharon_PN : PN;-fun sharp_A : A;-fun sharp_Adv : Adv;-fun sharp_N : N;-fun sharp_eyed_A : A;-fun sharp_set_A : A;-fun sharp_sighted_A : A;-fun sharp_witted_A : A;-fun sharpen_V : V;-fun sharpen_V2 : V2;-fun sharpener_N : N;-fun sharper_N : N;-fun sharply_Adv : Adv;-fun sharpness_N : N;-fun sharpshooter_N : N;-fun shatter_V : V;-fun shatter_V2 : V2;-fun shatterproof_A : A;-fun shave_N : N;-fun shave_V : V;-fun shave_V2 : V2;-fun shaver_N : N;-fun shavian_A : A;-fun shavian_N : N;-fun shaving_brush_N : N;-fun shawl_N : N;-fun she_goat_N : N;-fun sheaf_N : N;-fun shear_V2 : V2;-fun sheath_N : N;-fun sheath_knife_N : N;-fun sheathe_V2 : V2;-fun sheathing_N : N;-fun shebang_N : N;-fun shebeen_N : N;-fun shed_N : N;-fun shed_V2 : V2;-fun sheen_N : N;-fun sheep_N : N;-fun sheepdog_N : N;-fun sheepfold_N : N;-fun sheepish_A : A;-fun sheepishly_Adv : Adv;-fun sheepishness_N : N;-fun sheeprun_N : N;-fun sheepskin_N : N;-fun sheer_A : A;-fun sheer_Adv : Adv;-fun sheer_V : V;-fun sheerness_PN : PN;-fun sheet_N : N;-fun sheet_anchor_N : N;-fun sheet_lightning_N : N;-fun sheeting_N : N;-fun sheffield_PN : PN;-fun sheik_N : N;-fun sheikdom_N : N;-fun sheikh_N : N;-fun sheikhdom_N : N;-fun sheila_PN : PN;-fun shekel_N : N;-fun sheldrake_N : N;-fun shelf_N : N;-fun shelford_PN : PN;-fun shell_N : N;-fun shell_V : V;-fun shell_V2 : V2;-fun shell_shock_N : N;-fun shellac_N : N;-fun shellac_V2 : V2;-fun shellfire_N : N;-fun shellfish_N : N;-fun shellproof_A : A;-fun shelter_N : N;-fun shelter_V : V;-fun shelter_V2 : V2;-fun shelve_V : V;-fun shelve_V2 : V2;-fun shepherd_N : N;-fun shepherd_V2 : V2;-fun shepherdess_N : N;-fun shepshed_PN : PN;-fun shepton_mallet_PN : PN;-fun sheraton_N : N;-fun sherbet_N : N;-fun sherbourne_PN : PN;-fun sheriff_N : N;-fun sheringham_PN : PN;-fun sherry_N : N;-fun shetland_PN : PN;-fun shevington_PN : PN;-fun shew_V : V;-fun shew_V2 : V2;-fun shibboleth_N : N;-fun shield_N : N;-fun shield_V2 : V2;-fun shift_N : N;-fun shift_V : V;-fun shift_V2 : V2;-fun shiftily_Adv : Adv;-fun shiftiness_N : N;-fun shiftless_A : A;-fun shifty_A : A;-fun shihkiachwang_PN : PN;-fun shildon_PN : PN;-fun shillelagh_N : N;-fun shilling_N : N;-fun shillyshally_N : N;-fun shillyshally_V : V;-fun shimmer_N : N;-fun shimmer_V : V;-fun shin_N : N;-fun shin_V : V;-fun shinbone_N : N;-fun shindig_N : N;-fun shindy_N : N;-fun shine_N : N;-fun shine_V : V;-fun shine_V2 : V2;-fun shingle_N : N;-fun shingle_V2 : V2;-fun shingles_N : N;-fun shingly_A : A;-fun shinguard_N : N;-fun shiny_A : A;-fun ship's_chandler_N : N;-fun ship_N : N;-fun ship_V : V;-fun ship_V2 : V2;-fun ship_breaker_N : N;-fun ship_canal_N : N;-fun shipboard_A : A;-fun shipbroker_N : N;-fun shipbuilder_N : N;-fun shipbuilding_N : N;-fun shipload_N : N;-fun shipmate_N : N;-fun shipment_N : N;-fun shipowner_N : N;-fun shipper_N : N;-fun shipping_N : N;-fun shipping_agent_N : N;-fun shipping_office_N : N;-fun shipshape_A : A;-fun shipshape_Adv : Adv;-fun shipway_N : N;-fun shipwreck_N : N;-fun shipwreck_V : V;-fun shipwright_N : N;-fun shipyard_N : N;-fun shire_N : N;-fun shirebrook_PN : PN;-fun shiremoor_PN : PN;-fun shirk_V : V;-fun shirk_V2 : V2;-fun shirker_N : N;-fun shirley_PN : PN;-fun shirt_N : N;-fun shirt_front_N : N;-fun shirting_N : N;-fun shirtwaist_N : N;-fun shirtwaister_N : N;-fun shirty_A : A;-fun shish_kebab_N : N;-fun shit_N : N;-fun shit_V : V;-fun shiver_N : N;-fun shiver_V : V;-fun shiver_V2 : V2;-fun shivery_A : A;-fun shoal_N : N;-fun shoal_V : V;-fun shock_Adv : Adv;-fun shock_N : N;-fun shock_V2 : V2;-fun shock_brigade_N : N;-fun shock_headed_A : A;-fun shock_worker_N : N;-fun shockable_A : A;-fun shocker_N : N;-fun shocking_A : A;-fun shockingly_Adv : Adv;-fun shoddiness_N : N;-fun shoddy_A : A;-fun shoddy_N : N;-fun shoe_N : N;-fun shoe_V2 : V2;-fun shoe_leather_N : N;-fun shoeblack_N : N;-fun shoehorn_N : N;-fun shoelace_N : N;-fun shoemaker_N : N;-fun shoemaking_N : N;-fun shoestring_N : N;-fun shoetree_N : N;-fun shogun_N : N;-fun shoo_V : V;-fun shoo_V2 : V2;-fun shoot_N : N;-fun shoot_V : V;-fun shoot_V2 : V2;-fun shooter_N : N;-fun shooting_N : N;-fun shooting_box_N : N;-fun shooting_brake_N : N;-fun shooting_gallery_N : N;-fun shooting_range_N : N;-fun shooting_stick_N : N;-fun shop_N : N;-fun shop_V : V;-fun shop_assistant_N : N;-fun shop_bell_N : N;-fun shop_boy_N : N;-fun shop_front_N : N;-fun shop_girl_N : N;-fun shop_steward_N : N;-fun shopkeeper_N : N;-fun shoplift_V : V;-fun shoplift_V2 : V2;-fun shoplifter_N : N;-fun shoplifting_N : N;-fun shopper_N : N;-fun shopping_N : N;-fun shopsoiled_A : A;-fun shopwalker_N : N;-fun shopwindow_N : N;-fun shopworn_A : A;-fun shore_N : N;-fun shore_V2 : V2;-fun short_A : A;-fun short_Adv : Adv;-fun short_N : N;-fun short_V : V;-fun short_V2 : V2;-fun short_change_V2 : V2;-fun short_circuit_N : N;-fun short_circuit_V : V;-fun short_circuit_V2 : V2;-fun short_dated_A : A;-fun short_handed_A : A;-fun short_lived_A : A;-fun short_range_A : A;-fun short_sighted_A : A;-fun short_tempered_A : A;-fun short_term_A : A;-fun short_winded_A : A;-fun shortage_N : N;-fun shortbread_N : N;-fun shortcake_N : N;-fun shortcoming_N : N;-fun shorten_V : V;-fun shorten_V2 : V2;-fun shortening_N : N;-fun shortfall_N : N;-fun shorthand_N : N;-fun shorthorn_N : N;-fun shortish_A : A;-fun shortlist_N : N;-fun shortlist_V2 : V2;-fun shortly_Adv : Adv;-fun shortness_N : N;-fun shot_N : N;-fun shot_put_N : N;-fun shot_tower_N : N;-fun shotgun_N : N;-fun shotton_PN : PN;-fun shotts_PN : PN;-fun shoulder_N : N;-fun shoulder_V2 : V2;-fun shoulder_blade_N : N;-fun shoulder_flash_N : N;-fun shoulder_strap_N : N;-fun shout_N : N;-fun shout_V : V;-fun shout_V2 : V2;-fun shouting_N : N;-fun shove_N : N;-fun shove_V : V;-fun shove_V2 : V2;-fun shove_ha'penny_N : N;-fun shovel_N : N;-fun shovel_V2 : V2;-fun shovel_board_N : N;-fun shovelful_N : N;-fun show_N : N;-fun show_V : V;-fun show_V2 : V2;-fun show_business_N : N;-fun show_off_N : N;-fun show_window_N : N;-fun showbiz_N : N;-fun showboat_N : N;-fun showcase_N : N;-fun showdown_N : N;-fun shower_N : N;-fun shower_V : V;-fun shower_V2 : V2;-fun shower_bath_N : N;-fun showery_A : A;-fun showgirl_N : N;-fun showily_Adv : Adv;-fun showiness_N : N;-fun showing_N : N;-fun showjumping_N : N;-fun showman_N : N;-fun showmanship_N : N;-fun showplace_N : N;-fun showroom_N : N;-fun showy_A : A;-fun shrapnel_N : N;-fun shred_N : N;-fun shred_V2 : V2;-fun shrew_N : N;-fun shrew_mouse_N : N;-fun shrewd_A : A;-fun shrewdly_Adv : Adv;-fun shrewdness_N : N;-fun shrewish_A : A;-fun shrewishly_Adv : Adv;-fun shrewishness_N : N;-fun shrewsbury_PN : PN;-fun shriek_N : N;-fun shriek_V : V;-fun shriek_V2 : V2;-fun shrift_N : N;-fun shrike_N : N;-fun shrill_A : A;-fun shrill_V : V;-fun shrill_V2 : V2;-fun shrillness_N : N;-fun shrilly_Adv : Adv;-fun shrimp_N : N;-fun shrimp_V : V;-fun shrine_N : N;-fun shrine_V2 : V2;-fun shrink_N : N;-fun shrink_V : V;-fun shrink_V2 : V2;-fun shrinkable_A : A;-fun shrinkage_N : N;-fun shrive_V2 : V2;-fun shrivel_V : V;-fun shrivel_V2 : V2;-fun shropshire_PN : PN;-fun shroud_N : N;-fun shroud_V2 : V2;-fun shrove_tuesday_N : N;-fun shrove_tuesday_PN : PN;-fun shrub_N : N;-fun shrubbery_N : N;-fun shrug_N : N;-fun shrug_V2 : V2;-fun shuck_N : N;-fun shuck_V2 : V2;-fun shudder_N : N;-fun shudder_V : V;-fun shudderingly_Adv : Adv;-fun shuffle_N : N;-fun shuffle_V : V;-fun shuffle_V2 : V2;-fun shuffler_N : N;-fun shun_V2 : V2;-fun shunt_V : V;-fun shunt_V2 : V2;-fun shunter_N : N;-fun shush_V : V;-fun shush_V2 : V2;-fun shut_V : V;-fun shut_V2 : V2;-fun shutdown_N : N;-fun shuteye_N : N;-fun shutter_N : N;-fun shutter_V2 : V2;-fun shuttle_N : N;-fun shuttle_V : V;-fun shuttle_V2 : V2;-fun shuttlecock_N : N;-fun shy_A : A;-fun shy_N : N;-fun shy_V : V;-fun shy_V2 : V2;-fun shyly_Adv : Adv;-fun shyness_N : N;-fun shyster_N : N;-fun siam_PN : PN;-fun siamese_A : A;-fun siamese_N : N;-fun sian_PN : PN;-fun siberian_A : A;-fun sibilant_A : A;-fun sibilant_N : N;-fun sibling_N : N;-fun sibyl_N : N;-fun sibylline_A : A;-fun sic_Adv : Adv;-fun sicilian_A : A;-fun sicilian_N : N;-fun sick_A : A;-fun sick_V2 : V2;-fun sick_benefit_N : N;-fun sick_berth_N : N;-fun sick_headache_N : N;-fun sick_leave_N : N;-fun sick_list_N : N;-fun sick_parade_N : N;-fun sick_pay_N : N;-fun sick_room_N : N;-fun sickbay_N : N;-fun sickbed_N : N;-fun sicken_V : V;-fun sicken_V2 : V2;-fun sickening_A : A;-fun sickeningly_Adv : Adv;-fun sickish_A : A;-fun sickle_N : N;-fun sickly_A : A;-fun sickness_N : N;-fun sid_PN : PN;-fun side_N : N;-fun side_V : V;-fun side_chapel_N : N;-fun side_dish_N : N;-fun side_drum_N : N;-fun side_face_Adv : Adv;-fun side_glance_N : N;-fun side_road_N : N;-fun side_saddle_Adv : Adv;-fun side_saddle_N : N;-fun side_slip_N : N;-fun side_slip_V : V;-fun side_splitting_A : A;-fun side_stroke_N : N;-fun side_view_N : N;-fun sideboard_N : N;-fun sidecar_N : N;-fun sided_A : A;-fun sidelight_N : N;-fun sideline_N : N;-fun sidelong_A : A;-fun sidelong_Adv : Adv;-fun sidereal_A : A;-fun sideshow_N : N;-fun sidesman_N : N;-fun sidestep_N : N;-fun sidestep_V : V;-fun sidestep_V2 : V2;-fun sidetrack_N : N;-fun sidetrack_V2 : V2;-fun sidewalk_N : N;-fun sidewards_Adv : Adv;-fun sideways_Adv : Adv;-fun siding_N : N;-fun sidle_V : V;-fun sidmouth_PN : PN;-fun sidney_PN : PN;-fun siege_N : N;-fun sienna_N : N;-fun sierra_N : N;-fun sierra_leone_PN : PN;-fun sierra_leonian_A : A;-fun sierra_leonian_N : N;-fun siesta_N : N;-fun sieve_N : N;-fun sieve_V2 : V2;-fun sift_V : V;-fun sift_V2 : V2;-fun sifter_N : N;-fun sigh_N : N;-fun sigh_V : V;-fun sigh_V2 : V2;-fun sight_N : N;-fun sight_V2 : V2;-fun sighted_A : A;-fun sighting_N : N;-fun sightless_A : A;-fun sightseeing_N : N;-fun sightseer_N : N;-fun sign_N : N;-fun sign_V : V;-fun sign_V2 : V2;-fun sign_painter_N : N;-fun signal_A : A;-fun signal_N : N;-fun signal_V : V;-fun signal_V2 : V2;-fun signal_box_N : N;-fun signalize_V2 : V2;-fun signaller_N : N;-fun signally_Adv : Adv;-fun signalman_N : N;-fun signatory_N : N;-fun signature_N : N;-fun signet_N : N;-fun signet_ring_N : N;-fun significance_N : N;-fun significant_A : A;-fun significantly_Adv : Adv;-fun signification_N : N;-fun significative_A : A;-fun signify_V : V;-fun signify_V2 : V2;-fun signor_N : N;-fun signora_N : N;-fun signorina_N : N;-fun signpost_N : N;-fun signpost_V2 : V2;-fun sikh_N : N;-fun silage_N : N;-fun sileby_PN : PN;-fun silence_N : N;-fun silence_V2 : V2;-fun silencer_N : N;-fun silent_A : A;-fun silently_Adv : Adv;-fun silhouette_N : N;-fun silhouette_V2 : V2;-fun silica_N : N;-fun silicate_N : N;-fun silicon_N : N;-fun silicone_N : N;-fun silicosis_N : N;-fun silk_N : N;-fun silken_A : A;-fun silkily_Adv : Adv;-fun silkiness_N : N;-fun silkworm_N : N;-fun silky_A : A;-fun sill_N : N;-fun sillabub_N : N;-fun silliness_N : N;-fun silly_A : A;-fun silly_N : N;-fun silo_N : N;-fun silsden_PN : PN;-fun silt_N : N;-fun silt_V : V;-fun silt_V2 : V2;-fun silvan_A : A;-fun silver_N : N;-fun silver_V : V;-fun silver_V2 : V2;-fun silver_fish_N : N;-fun silvern_A : A;-fun silverside_N : N;-fun silversmith_N : N;-fun silvery_A : A;-fun silvia_PN : PN;-fun simian_A : A;-fun simian_N : N;-fun similar_A : A;-fun similarity_N : N;-fun similarly_Adv : Adv;-fun simile_N : N;-fun similitude_N : N;-fun simmer_N : N;-fun simmer_V : V;-fun simmer_V2 : V2;-fun simon_PN : PN;-fun simony_N : N;-fun simoom_N : N;-fun simoon_N : N;-fun simper_V : V;-fun simperingly_Adv : Adv;-fun simple_A : A;-fun simple_N : N;-fun simple_hearted_A : A;-fun simple_minded_A : A;-fun simpleton_N : N;-fun simplicity_N : N;-fun simplification_N : N;-fun simplify_V2 : V2;-fun simply_Adv : Adv;-fun simulacrum_N : N;-fun simulate_V2 : V2;-fun simulation_N : N;-fun simulator_N : N;-fun simultaneity_N : N;-fun simultaneous_A : A;-fun simultaneously_Adv : Adv;-fun simultaneousness_N : N;-fun sin_N : N;-fun sin_V : V;-fun since_Adv : Adv;-fun sincere_A : A;-fun sincerely_Adv : Adv;-fun sincerity_N : N;-fun sine_N : N;-fun sine_die_Adv : Adv;-fun sine_qua_non_N : N;-fun sinecure_N : N;-fun sinew_N : N;-fun sinewy_A : A;-fun sinful_A : A;-fun sinfulness_N : N;-fun sing_V : V;-fun sing_V2 : V2;-fun singable_A : A;-fun singapore_PN : PN;-fun singaporean_A : A;-fun singaporean_N : N;-fun singe_N : N;-fun singe_V : V;-fun singe_V2 : V2;-fun singer_N : N;-fun singhalese_A : A;-fun singing_N : N;-fun single_A : A;-fun single_N : N;-fun single_V2 : V2;-fun single_breasted_A : A;-fun single_handed_A : A;-fun single_handed_Adv : Adv;-fun single_minded_A : A;-fun single_spacing_N : N;-fun singleness_N : N;-fun singlestick_N : N;-fun singlet_N : N;-fun singleton_N : N;-fun singly_Adv : Adv;-fun singsong_N : N;-fun singular_A : A;-fun singular_N : N;-fun singularity_N : N;-fun singularize_V2 : V2;-fun singularly_Adv : Adv;-fun sinhala_N : N;-fun sinhalese_A : A;-fun sinhalese_N : N;-fun sining_PN : PN;-fun sinister_A : A;-fun sink_N : N;-fun sink_V : V;-fun sink_V2 : V2;-fun sinkable_A : A;-fun sinker_N : N;-fun sinking_N : N;-fun sinking_fund_N : N;-fun sinless_A : A;-fun sinlessness_N : N;-fun sinn_fein_PN : PN;-fun sinner_N : N;-fun sinologist_N : N;-fun sinology_N : N;-fun sinuosity_N : N;-fun sinuous_A : A;-fun sinus_N : N;-fun sinusitis_N : N;-fun sioux_N : N;-fun sip_N : N;-fun sip_V : V;-fun sip_V2 : V2;-fun siphon_N : N;-fun siphon_V : V;-fun siphon_V2 : V2;-fun sir_N : N;-fun sir_roger_de_coverley_N : N;-fun siracusa_PN : PN;-fun sirdar_N : N;-fun sire_N : N;-fun sire_V2 : V2;-fun siren_N : N;-fun sirloin_N : N;-fun sirocco_N : N;-fun sirrah_N : N;-fun sirup_N : N;-fun sisal_N : N;-fun sissified_A : A;-fun sissy_N : N;-fun sister_N : N;-fun sister_in_law_N : N;-fun sisterhood_N : N;-fun sisterly_A : A;-fun siswati_N : N;-fun sit_V : V;-fun sit_V2 : V2;-fun sit_in_N : N;-fun sitar_N : N;-fun site_N : N;-fun site_V : V;-fun sitter_N : N;-fun sitting_N : N;-fun sitting_room_N : N;-fun sittingbourne_PN : PN;-fun situated_A : A;-fun situation_N : N;-fun six_footer_N : N;-fun six_shooter_N : N;-fun sixfold_A : A;-fun sixfold_Adv : Adv;-fun sixpence_N : N;-fun sixpenny_A : A;-fun sixth_former_N : N;-fun sizable_A : A;-fun size_N : N;-fun size_V2 : V2;-fun sizeable_A : A;-fun sized_A : A;-fun sizzle_V : V;-fun skate_N : N;-fun skate_V : V;-fun skateboard_N : N;-fun skateboarder_N : N;-fun skateboarding_N : N;-fun skater_N : N;-fun skating_N : N;-fun skating_rink_N : N;-fun skedaddle_V : V;-fun skeet_N : N;-fun skegness_PN : PN;-fun skein_N : N;-fun skeleton_N : N;-fun skelmanthorpe_PN : PN;-fun skelmersdale_PN : PN;-fun skep_N : N;-fun skeptical_A : A;-fun skeptically_Adv : Adv;-fun skepticism_N : N;-fun sketch_N : N;-fun sketch_V : V;-fun sketch_V2 : V2;-fun sketch_block_N : N;-fun sketch_book_N : N;-fun sketch_map_N : N;-fun sketcher_N : N;-fun sketchily_Adv : Adv;-fun sketchiness_N : N;-fun sketchy_A : A;-fun skew_A : A;-fun skew_eyed_A : A;-fun skewen_PN : PN;-fun skewer_N : N;-fun skewer_V2 : V2;-fun ski_N : N;-fun ski_V : V;-fun ski_bob_N : N;-fun ski_jump_N : N;-fun ski_lift_N : N;-fun ski_plane_N : N;-fun skid_N : N;-fun skid_V : V;-fun skidpan_N : N;-fun skier_N : N;-fun skiff_N : N;-fun skiffle_N : N;-fun skiffle_group_N : N;-fun skilful_A : A;-fun skilfully_Adv : Adv;-fun skill_N : N;-fun skilled_A : A;-fun skillet_N : N;-fun skilly_N : N;-fun skim_V : V;-fun skim_V2 : V2;-fun skimmed_milk_N : N;-fun skimmer_N : N;-fun skimp_V : V;-fun skimp_V2 : V2;-fun skimpily_Adv : Adv;-fun skimpy_A : A;-fun skin_N : N;-fun skin_V : V;-fun skin_V2 : V2;-fun skin_deep_A : A;-fun skin_diving_N : N;-fun skin_graft_N : N;-fun skin_tight_A : A;-fun skinflint_N : N;-fun skinhead_N : N;-fun skinny_A : A;-fun skint_A : A;-fun skip_N : N;-fun skip_V : V;-fun skip_V2 : V2;-fun skipper_N : N;-fun skipper_V2 : V2;-fun skipping_rope_N : N;-fun skipton_PN : PN;-fun skirl_N : N;-fun skirmish_N : N;-fun skirmish_V : V;-fun skirmisher_N : N;-fun skirt_N : N;-fun skirt_V : V;-fun skirt_V2 : V2;-fun skirting_board_N : N;-fun skit_N : N;-fun skitter_V : V;-fun skittish_A : A;-fun skittishly_Adv : Adv;-fun skittishness_N : N;-fun skittle_N : N;-fun skittle_V2 : V2;-fun skittle_pin_N : N;-fun skittles_N : N;-fun skivvy_N : N;-fun skopje_PN : PN;-fun skua_N : N;-fun skulk_V : V;-fun skulker_N : N;-fun skull_N : N;-fun skullcap_N : N;-fun skullduggery_N : N;-fun skulled_A : A;-fun skunk_N : N;-fun sky_N : N;-fun sky_V2 : V2;-fun sky_blue_A : A;-fun sky_blue_N : N;-fun sky_high_Adv : Adv;-fun skylark_N : N;-fun skylark_V : V;-fun skylight_N : N;-fun skyline_N : N;-fun skyrocket_V : V;-fun skyscraper_N : N;-fun skyward_A : A;-fun skyward_Adv : Adv;-fun skywards_A : A;-fun skywards_Adv : Adv;-fun skywriting_N : N;-fun slab_N : N;-fun slack_A : A;-fun slack_N : N;-fun slack_V : V;-fun slacken_V : V;-fun slacken_V2 : V2;-fun slacker_N : N;-fun slackly_Adv : Adv;-fun slackness_N : N;-fun slag_N : N;-fun slag_heap_N : N;-fun slake_V2 : V2;-fun slalom_N : N;-fun slam_N : N;-fun slam_V : V;-fun slam_V2 : V2;-fun slander_N : N;-fun slander_V2 : V2;-fun slanderer_N : N;-fun slanderous_A : A;-fun slang_N : N;-fun slang_V2 : V2;-fun slangily_Adv : Adv;-fun slanginess_N : N;-fun slangy_A : A;-fun slant_N : N;-fun slant_V : V;-fun slant_V2 : V2;-fun slantingly_Adv : Adv;-fun slantwise_Adv : Adv;-fun slap_Adv : Adv;-fun slap_N : N;-fun slap_V2 : V2;-fun slap_bang_Adv : Adv;-fun slap_happy_A : A;-fun slap_up_A : A;-fun slapdash_A : A;-fun slapdash_Adv : Adv;-fun slapstick_N : N;-fun slash_N : N;-fun slash_V : V;-fun slash_V2 : V2;-fun slat_N : N;-fun slate_N : N;-fun slate_V2 : V2;-fun slate_club_N : N;-fun slate_pencil_N : N;-fun slating_N : N;-fun slatted_A : A;-fun slattern_N : N;-fun slatternliness_N : N;-fun slatternly_A : A;-fun slaty_A : A;-fun slaughter_N : N;-fun slaughter_V2 : V2;-fun slaughterer_N : N;-fun slaughterhouse_N : N;-fun slav_A : A;-fun slav_N : N;-fun slave_N : N;-fun slave_V : V;-fun slave_driver_N : N;-fun slave_trade_N : N;-fun slave_traffic_N : N;-fun slaver_N : N;-fun slaver_V : V;-fun slavery_N : N;-fun slavey_N : N;-fun slavish_A : A;-fun slavishly_Adv : Adv;-fun slavonic_A : A;-fun slaw_N : N;-fun slay_V2 : V2;-fun slayer_N : N;-fun sleaford_PN : PN;-fun sleazy_A : A;-fun sled_N : N;-fun sledge_N : N;-fun sledge_V : V;-fun sledge_V2 : V2;-fun sledgehammer_N : N;-fun sleek_A : A;-fun sleek_V2 : V2;-fun sleekly_Adv : Adv;-fun sleekness_N : N;-fun sleep_N : N;-fun sleep_V : V;-fun sleep_V2 : V2;-fun sleeper_N : N;-fun sleepily_Adv : Adv;-fun sleepiness_N : N;-fun sleeping_N : N;-fun sleeping_bag_N : N;-fun sleeping_car_N : N;-fun sleeping_draught_N : N;-fun sleeping_pill_N : N;-fun sleeping_sickness_N : N;-fun sleepless_A : A;-fun sleeplessly_Adv : Adv;-fun sleeplessness_N : N;-fun sleepwalker_N : N;-fun sleepy_A : A;-fun sleepy_head_N : N;-fun sleet_N : N;-fun sleet_V : V;-fun sleety_A : A;-fun sleeve_N : N;-fun sleeved_A : A;-fun sleeveless_A : A;-fun sleigh_N : N;-fun sleigh_V : V;-fun sleigh_V2 : V2;-fun sleigh_bell_N : N;-fun sleight_N : N;-fun slender_A : A;-fun slenderize_V : V;-fun slenderize_V2 : V2;-fun slenderly_Adv : Adv;-fun slenderness_N : N;-fun sleuth_N : N;-fun sleuth_hound_N : N;-fun slew_V : V;-fun slew_V2 : V2;-fun slice_N : N;-fun slice_V : V;-fun slice_V2 : V2;-fun slick_A : A;-fun slick_Adv : Adv;-fun slick_N : N;-fun slicker_N : N;-fun slide_N : N;-fun slide_V : V;-fun slide_V2 : V2;-fun slide_rule_N : N;-fun slight_A : A;-fun slight_N : N;-fun slight_V2 : V2;-fun slightingly_Adv : Adv;-fun slightly_Adv : Adv;-fun slightness_N : N;-fun sligo_PN : PN;-fun slim_A : A;-fun slim_V : V;-fun slime_N : N;-fun sliminess_N : N;-fun slimly_Adv : Adv;-fun slimness_N : N;-fun slimy_A : A;-fun sling_N : N;-fun sling_V : V;-fun sling_V2 : V2;-fun slinger_N : N;-fun slink_V : V;-fun slip_N : N;-fun slip_V : V;-fun slip_V2 : V2;-fun slip_carriage_N : N;-fun slip_coach_N : N;-fun slip_road_N : N;-fun slip_up_N : N;-fun slipcover_N : N;-fun slipknot_N : N;-fun slipon_N : N;-fun slipover_N : N;-fun slipper_N : N;-fun slippered_A : A;-fun slipperiness_N : N;-fun slippery_A : A;-fun slippy_A : A;-fun slipshod_A : A;-fun slipstream_N : N;-fun slipway_N : N;-fun slit_N : N;-fun slit_V2 : V2;-fun slither_V : V;-fun slithery_A : A;-fun sliver_N : N;-fun sliver_V : V;-fun sliver_V2 : V2;-fun slob_N : N;-fun slobber_N : N;-fun slobber_V : V;-fun slobber_V2 : V2;-fun sloe_N : N;-fun sloe_gin_N : N;-fun slog_V : V;-fun slog_V2 : V2;-fun slogan_N : N;-fun slogger_N : N;-fun sloop_N : N;-fun slop_N : N;-fun slop_V : V;-fun slop_V2 : V2;-fun slop_basin_N : N;-fun slop_pail_N : N;-fun slop_shop_N : N;-fun slope_N : N;-fun slope_V : V;-fun slope_V2 : V2;-fun slopingly_Adv : Adv;-fun sloppily_Adv : Adv;-fun sloppiness_N : N;-fun sloppy_A : A;-fun slosh_V : V;-fun slosh_V2 : V2;-fun sloshed_A : A;-fun slot_N : N;-fun slot_V2 : V2;-fun slot_machine_N : N;-fun sloth_N : N;-fun slothful_A : A;-fun slouch_N : N;-fun slouch_V : V;-fun slouch_hat_N : N;-fun slouchingly_Adv : Adv;-fun slough_N : N;-fun slough_PN : PN;-fun slough_V : V;-fun slough_V2 : V2;-fun slovak_N : N;-fun sloven_N : N;-fun slovenian_A : A;-fun slovenian_N : N;-fun slovenliness_N : N;-fun slovenly_A : A;-fun slow_A : A;-fun slow_Adv : Adv;-fun slow_V : V;-fun slow_V2 : V2;-fun slow_worm_N : N;-fun slowcoach_N : N;-fun slowdown_N : N;-fun slower_Adv : Adv;-fun slowest_Adv : Adv;-fun slowly_Adv : Adv;-fun slowness_N : N;-fun sludge_N : N;-fun slug_N : N;-fun slug_V : V;-fun slug_V2 : V2;-fun sluggard_N : N;-fun sluggish_A : A;-fun sluggishly_Adv : Adv;-fun sluggishness_N : N;-fun sluice_N : N;-fun sluice_V : V;-fun sluice_V2 : V2;-fun sluice_valve_N : N;-fun sluicegate_N : N;-fun slum_N : N;-fun slum_V : V;-fun slumber_N : N;-fun slumber_V : V;-fun slumber_V2 : V2;-fun slumberer_N : N;-fun slumberous_A : A;-fun slummy_A : A;-fun slump_N : N;-fun slump_V : V;-fun slur_N : N;-fun slur_V : V;-fun slur_V2 : V2;-fun slurry_N : N;-fun slush_N : N;-fun slushy_A : A;-fun slut_N : N;-fun sluttish_A : A;-fun sly_A : A;-fun slyly_Adv : Adv;-fun slyness_N : N;-fun smack_Adv : Adv;-fun smack_N : N;-fun smack_V : V;-fun smack_V2 : V2;-fun smacker_N : N;-fun smacking_N : N;-fun small_A : A;-fun small_Adv : Adv;-fun small_N : N;-fun small_minded_A : A;-fun smallholder_N : N;-fun smallholding_N : N;-fun smallness_N : N;-fun smallpox_N : N;-fun smalltime_A : A;-fun smarmy_A : A;-fun smart_A : A;-fun smart_N : N;-fun smart_V : V;-fun smarten_V : V;-fun smarten_V2 : V2;-fun smartly_Adv : Adv;-fun smartness_N : N;-fun smash_Adv : Adv;-fun smash_N : N;-fun smash_V : V;-fun smash_V2 : V2;-fun smash_up_N : N;-fun smasher_N : N;-fun smashing_A : A;-fun smattering_N : N;-fun smear_N : N;-fun smear_V : V;-fun smear_V2 : V2;-fun smear_word_N : N;-fun smell_N : N;-fun smell_V : V;-fun smell_V2 : V2;-fun smelling_bottle_N : N;-fun smelly_A : A;-fun smelt_N : N;-fun smelt_V2 : V2;-fun smilax_N : N;-fun smile_N : N;-fun smile_V : V;-fun smile_V2 : V2;-fun smilingly_Adv : Adv;-fun smirch_N : N;-fun smirch_V2 : V2;-fun smirk_N : N;-fun smirk_V : V;-fun smite_V : V;-fun smite_V2 : V2;-fun smith_N : N;-fun smithy_N : N;-fun smock_N : N;-fun smocking_N : N;-fun smog_N : N;-fun smoke_N : N;-fun smoke_V : V;-fun smoke_V2 : V2;-fun smoke_bomb_N : N;-fun smoke_cured_A : A;-fun smoke_dried_A : A;-fun smoke_screen_N : N;-fun smokeless_A : A;-fun smoker_N : N;-fun smokestack_N : N;-fun smoking_N : N;-fun smoking_car_N : N;-fun smoking_carriage_N : N;-fun smoking_compartment_N : N;-fun smoking_mixture_N : N;-fun smoking_room_N : N;-fun smoky_A : A;-fun smooth_A : A;-fun smooth_N : N;-fun smooth_V : V;-fun smooth_V2 : V2;-fun smooth_bore_A : A;-fun smooth_faced_A : A;-fun smooth_spoken_A : A;-fun smooth_tongued_A : A;-fun smoothing_iron_N : N;-fun smoothing_plane_N : N;-fun smoothly_Adv : Adv;-fun smoothness_N : N;-fun smorgasbord_N : N;-fun smother_N : N;-fun smother_V2 : V2;-fun smoulder_N : N;-fun smoulder_V : V;-fun smudge_N : N;-fun smudge_V : V;-fun smudge_V2 : V2;-fun smudgy_A : A;-fun smug_A : A;-fun smuggle_V2 : V2;-fun smuggler_N : N;-fun smugly_Adv : Adv;-fun smugness_N : N;-fun smut_N : N;-fun smut_V2 : V2;-fun smuttily_Adv : Adv;-fun smuttiness_N : N;-fun smutty_A : A;-fun snack_N : N;-fun snack_bar_N : N;-fun snack_counter_N : N;-fun snaffle_N : N;-fun snaffle_V2 : V2;-fun snaffle_bit_N : N;-fun snag_N : N;-fun snag_V2 : V2;-fun snail_N : N;-fun snake_N : N;-fun snake_V : V;-fun snake_charmer_N : N;-fun snaky_A : A;-fun snap_N : N;-fun snap_V : V;-fun snap_V2 : V2;-fun snap_fastener_N : N;-fun snapdragon_N : N;-fun snappish_A : A;-fun snappishly_Adv : Adv;-fun snappishness_N : N;-fun snappy_A : A;-fun snapshot_N : N;-fun snare_N : N;-fun snare_V2 : V2;-fun snare_drum_N : N;-fun snarl_N : N;-fun snarl_V : V;-fun snarl_V2 : V2;-fun snarl_up_N : N;-fun snatch_N : N;-fun snatch_V : V;-fun snatch_V2 : V2;-fun snatcher_N : N;-fun snazzy_A : A;-fun sneak_N : N;-fun sneak_V : V;-fun sneak_V2 : V2;-fun sneak_thief_N : N;-fun sneaking_A : A;-fun sneakingly_Adv : Adv;-fun sneaky_A : A;-fun sneer_N : N;-fun sneer_V : V;-fun sneeringly_Adv : Adv;-fun sneeze_N : N;-fun sneeze_V : V;-fun snick_N : N;-fun snick_V : V;-fun snick_V2 : V2;-fun snicker_N : N;-fun snicker_V : V;-fun snide_A : A;-fun sniff_N : N;-fun sniff_V : V;-fun sniff_V2 : V2;-fun sniffle_V : V;-fun sniffy_A : A;-fun snifter_N : N;-fun snigger_N : N;-fun snigger_V : V;-fun snip_N : N;-fun snip_V : V;-fun snip_V2 : V2;-fun snipe_N : N;-fun snipe_V : V;-fun snipe_V2 : V2;-fun sniper_N : N;-fun snippet_N : N;-fun snipping_N : N;-fun snitch_V : V;-fun snitch_V2 : V2;-fun snivel_V : V;-fun sniveller_N : N;-fun snob_N : N;-fun snobbery_N : N;-fun snobbish_A : A;-fun snobbishly_Adv : Adv;-fun snobbishness_N : N;-fun snog_V : V;-fun snogging_N : N;-fun snood_N : N;-fun snook_N : N;-fun snooker_N : N;-fun snoop_V : V;-fun snooper_N : N;-fun snootily_Adv : Adv;-fun snooty_A : A;-fun snooze_N : N;-fun snooze_V : V;-fun snore_N : N;-fun snore_V : V;-fun snorer_N : N;-fun snorkel_N : N;-fun snort_N : N;-fun snort_V : V;-fun snort_V2 : V2;-fun snorter_N : N;-fun snorty_A : A;-fun snot_N : N;-fun snot_nosed_A : A;-fun snotty_A : A;-fun snout_N : N;-fun snow_N : N;-fun snow_V : V;-fun snow_V2 : V2;-fun snow_clad_A : A;-fun snow_covered_A : A;-fun snow_line_N : N;-fun snow_white_A : A;-fun snowball_N : N;-fun snowball_V : V;-fun snowball_V2 : V2;-fun snowberry_N : N;-fun snowblind_A : A;-fun snowblindness_N : N;-fun snowbound_A : A;-fun snowcapped_A : A;-fun snowdrift_N : N;-fun snowdrop_N : N;-fun snowfall_N : N;-fun snowfield_N : N;-fun snowflake_N : N;-fun snowman_N : N;-fun snowplough_N : N;-fun snowstorm_N : N;-fun snowy_A : A;-fun snr_PN : PN;-fun snub_A : A;-fun snub_N : N;-fun snub_V2 : V2;-fun snub_nosed_A : A;-fun snuff_N : N;-fun snuff_V : V;-fun snuff_V2 : V2;-fun snuff_colour_A : A;-fun snuff_colour_N : N;-fun snuff_coloured_A : A;-fun snuffbox_N : N;-fun snuffle_N : N;-fun snuffle_V : V;-fun snug_A : A;-fun snug_N : N;-fun snuggery_N : N;-fun snuggle_V : V;-fun snuggle_V2 : V2;-fun snugly_Adv : Adv;-fun snugness_N : N;-fun so_Adv : Adv;-fun so_N : N;-fun so_and_so_N : N;-fun so_called_A : A;-fun so_so_A : A;-fun so_so_Adv : Adv;-fun soak_N : N;-fun soak_V : V;-fun soak_V2 : V2;-fun soaker_N : N;-fun soap_N : N;-fun soap_V2 : V2;-fun soap_bubble_N : N;-fun soap_opera_N : N;-fun soapbox_N : N;-fun soapy_A : A;-fun soar_V : V;-fun sob_N : N;-fun sob_V : V;-fun sob_V2 : V2;-fun sob_stuff_N : N;-fun sobbingly_Adv : Adv;-fun sober_A : A;-fun sober_V : V;-fun sober_V2 : V2;-fun sober_sides_N : N;-fun soberly_Adv : Adv;-fun sobriety_N : N;-fun sobriquet_N : N;-fun soc_N : N;-fun soccer_N : N;-fun sociability_N : N;-fun sociable_A : A;-fun sociably_Adv : Adv;-fun social_A : A;-fun social_N : N;-fun social_work_N : N;-fun socialism_N : N;-fun socialist_A : A;-fun socialist_N : N;-fun socialite_N : N;-fun socialization_N : N;-fun socialize_V2 : V2;-fun socially_Adv : Adv;-fun society_N : N;-fun sociological_A : A;-fun sociologically_Adv : Adv;-fun sociologist_N : N;-fun sociology_N : N;-fun sock_Adv : Adv;-fun sock_N : N;-fun sock_V2 : V2;-fun socket_N : N;-fun socratic_A : A;-fun sod_N : N;-fun sod_V : V;-fun soda_N : N;-fun soda_biscuit_N : N;-fun soda_cracker_N : N;-fun soda_fountain_N : N;-fun soda_water_N : N;-fun sodden_A : A;-fun sodding_A : A;-fun sodium_N : N;-fun sodomite_N : N;-fun sodomy_N : N;-fun sofa_N : N;-fun sofia_PN : PN;-fun soft_A : A;-fun soft_boiled_A : A;-fun soft_footed_A : A;-fun soft_headed_A : A;-fun soft_hearted_A : A;-fun soft_pedal_V : V;-fun soft_pedal_V2 : V2;-fun soft_soap_V2 : V2;-fun soft_solder_N : N;-fun soft_solder_V2 : V2;-fun soft_spoken_A : A;-fun soft_witted_A : A;-fun soften_V : V;-fun soften_V2 : V2;-fun softener_N : N;-fun softie_N : N;-fun softish_A : A;-fun softland_V : V;-fun softly_Adv : Adv;-fun softness_N : N;-fun software_N : N;-fun softwood_N : N;-fun softy_N : N;-fun sogginess_N : N;-fun soggy_A : A;-fun soh_N : N;-fun soho_PN : PN;-fun soignee_A : A;-fun soigne_A : A;-fun soil_N : N;-fun soil_V : V;-fun soil_V2 : V2;-fun soil_pipe_N : N;-fun soiree_N : N;-fun sojourn_N : N;-fun sojourn_V : V;-fun sojourner_N : N;-fun sol_PN : PN;-fun sol_fa_N : N;-fun solace_N : N;-fun solace_V2 : V2;-fun solar_A : A;-fun solar_plexus_N : N;-fun solarium_N : N;-fun solder_N : N;-fun solder_V2 : V2;-fun soldering_iron_N : N;-fun soldier_N : N;-fun soldier_V : V;-fun soldiery_N : N;-fun sole_A : A;-fun sole_N : N;-fun sole_V2 : V2;-fun solecism_N : N;-fun soled_A : A;-fun solely_Adv : Adv;-fun solemn_A : A;-fun solemnity_N : N;-fun solemnization_N : N;-fun solemnize_V2 : V2;-fun solemnly_Adv : Adv;-fun solemnness_N : N;-fun solicit_V : V;-fun solicit_V2 : V2;-fun solicitation_N : N;-fun solicitor_N : N;-fun solicitor_general_N : N;-fun solicitous_A : A;-fun solicitously_Adv : Adv;-fun solicitude_N : N;-fun solid_A : A;-fun solid_N : N;-fun solid_state_A : A;-fun solidarity_N : N;-fun solidification_N : N;-fun solidify_V : V;-fun solidify_V2 : V2;-fun solidity_N : N;-fun solidly_Adv : Adv;-fun solidness_N : N;-fun solihull_PN : PN;-fun soliloquize_V : V;-fun soliloquy_N : N;-fun solingen_PN : PN;-fun solipsism_N : N;-fun solitaire_N : N;-fun solitarily_Adv : Adv;-fun solitary_A : A;-fun solitude_N : N;-fun solo_N : N;-fun soloist_N : N;-fun solon_PN : PN;-fun solstice_N : N;-fun solubility_N : N;-fun soluble_A : A;-fun solution_N : N;-fun solvable_A : A;-fun solve_V2 : V2;-fun solvency_N : N;-fun solvent_A : A;-fun solvent_N : N;-fun somali_A : A;-fun somali_N : N;-fun somalia_PN : PN;-fun somalian_A : A;-fun somalian_N : N;-fun somatic_A : A;-fun sombre_A : A;-fun sombrely_Adv : Adv;-fun sombreness_N : N;-fun sombrero_N : N;-fun someday_Adv : Adv;-fun somehow_Adv : Adv;-fun someone_N : N;-fun someplace_Adv : Adv;-fun somercotes_PN : PN;-fun somersault_N : N;-fun somersault_V : V;-fun somerset_PN : PN;-fun something_Adv : Adv;-fun sometime_Adv : Adv;-fun sometimes_Adv : Adv;-fun someway_Adv : Adv;-fun somewhat_Adv : Adv;-fun somnambulism_N : N;-fun somnambulist_N : N;-fun somnolence_N : N;-fun somnolent_A : A;-fun somnolently_Adv : Adv;-fun son_N : N;-fun son_in_law_N : N;-fun sonar_N : N;-fun sonata_N : N;-fun song_N : N;-fun songbird_N : N;-fun songbook_N : N;-fun songster_N : N;-fun songstress_N : N;-fun sonia_PN : PN;-fun sonic_A : A;-fun sonnet_N : N;-fun sonneteer_N : N;-fun sonny_N : N;-fun sonority_N : N;-fun sonorous_A : A;-fun sonorously_Adv : Adv;-fun sonsy_A : A;-fun soochow_PN : PN;-fun soon_Adv : Adv;-fun sooner_Adv : Adv;-fun soonest_Adv : Adv;-fun soot_N : N;-fun soot_V2 : V2;-fun sooth_N : N;-fun soothe_V2 : V2;-fun soothingly_Adv : Adv;-fun soothsayer_N : N;-fun sooty_A : A;-fun sop_N : N;-fun sop_V2 : V2;-fun sophia_PN : PN;-fun sophie_PN : PN;-fun sophism_N : N;-fun sophist_N : N;-fun sophisticated_A : A;-fun sophistication_N : N;-fun sophistry_N : N;-fun sophomore_N : N;-fun soporific_A : A;-fun soporific_N : N;-fun sopping_A : A;-fun sopping_Adv : Adv;-fun soppy_A : A;-fun soprano_N : N;-fun sorbet_N : N;-fun sorcerer_N : N;-fun sorceress_N : N;-fun sorcery_N : N;-fun sordid_A : A;-fun sordidly_Adv : Adv;-fun sordidness_N : N;-fun sore_A : A;-fun sore_N : N;-fun sorely_Adv : Adv;-fun soreness_N : N;-fun sorghum_N : N;-fun sorority_N : N;-fun sorrel_A : A;-fun sorrel_N : N;-fun sorrow_N : N;-fun sorrow_V : V;-fun sorrowful_A : A;-fun sorrowfully_Adv : Adv;-fun sorry_A : A;-fun sort_N : N;-fun sort_V : V;-fun sort_V2 : V2;-fun sorter_N : N;-fun sortie_N : N;-fun sos_N : N;-fun soss_N : N;-fun sot_N : N;-fun sotho_A : A;-fun sotho_N : N;-fun sottish_A : A;-fun sottishly_Adv : Adv;-fun sottishness_N : N;-fun sotto_voce_Adv : Adv;-fun sou'_east_Adv : Adv;-fun sou'_east_N : N;-fun sou'_sou'_east_Adv : Adv;-fun sou'_sou'_east_N : N;-fun sou'_sou'_west_Adv : Adv;-fun sou'_sou'_west_N : N;-fun sou'_west_Adv : Adv;-fun sou'_west_N : N;-fun sou'_wester_N : N;-fun sou_N : N;-fun soubrette_N : N;-fun soubriquet_N : N;-fun souffle_N : N;-fun sough_V : V;-fun soul_N : N;-fun soul_destroying_A : A;-fun soul_stirring_A : A;-fun soulful_A : A;-fun soulfully_Adv : Adv;-fun soulless_A : A;-fun soullessly_Adv : Adv;-fun sound_A : A;-fun sound_Adv : Adv;-fun sound_N : N;-fun sound_V : V;-fun sound_V2 : V2;-fun sound_film_N : N;-fun sound_recording_N : N;-fun sound_wave_N : N;-fun soundbox_N : N;-fun sounding_board_N : N;-fun soundless_A : A;-fun soundlessly_Adv : Adv;-fun soundly_Adv : Adv;-fun soundness_N : N;-fun soundproof_A : A;-fun soundproof_V2 : V2;-fun soundtrack_N : N;-fun soup_N : N;-fun soup_V2 : V2;-fun soup_kitchen_N : N;-fun soupcon_N : N;-fun sour_A : A;-fun sour_V : V;-fun sour_V2 : V2;-fun source_N : N;-fun sourly_Adv : Adv;-fun sourness_N : N;-fun souse_V2 : V2;-fun soused_A : A;-fun soutane_N : N;-fun south_Adv : Adv;-fun south_N : N;-fun south_kirkby_PN : PN;-fun south_normantown_PN : PN;-fun south_ockendon_PN : PN;-fun south_shields_PN : PN;-fun south_southeast_Adv : Adv;-fun south_southeast_N : N;-fun south_southwest_Adv : Adv;-fun south_southwest_N : N;-fun southampton_PN : PN;-fun southeast_Adv : Adv;-fun southeast_N : N;-fun southeaster_N : N;-fun southeasterly_A : A;-fun southeastern_A : A;-fun southend_on_sea_PN : PN;-fun southerly_A : A;-fun southerly_Adv : Adv;-fun southern_A : A;-fun southerner_N : N;-fun southernmost_A : A;-fun southpaw_N : N;-fun southport_PN : PN;-fun southward_Adv : Adv;-fun southwards_Adv : Adv;-fun southwark_PN : PN;-fun southwest_Adv : Adv;-fun southwest_N : N;-fun southwester_N : N;-fun southwesterly_A : A;-fun southwestern_A : A;-fun souvenir_N : N;-fun sovereign_A : A;-fun sovereign_N : N;-fun sovereignty_N : N;-fun soviet_A : A;-fun soviet_N : N;-fun sovietize_V2 : V2;-fun sow_N : N;-fun sow_V : V;-fun sow_V2 : V2;-fun sower_N : N;-fun soy_N : N;-fun soya_N : N;-fun sozzled_A : A;-fun spa_N : N;-fun space_N : N;-fun space_V2 : V2;-fun space_bar_N : N;-fun space_capsule_N : N;-fun space_heater_N : N;-fun space_helmet_N : N;-fun space_rocket_N : N;-fun space_time_N : N;-fun space_vehicle_N : N;-fun spacecraft_N : N;-fun spaceship_N : N;-fun spacesuit_N : N;-fun spacing_N : N;-fun spacious_A : A;-fun spaciously_Adv : Adv;-fun spaciousness_N : N;-fun spade_N : N;-fun spade_V2 : V2;-fun spadeful_N : N;-fun spadework_N : N;-fun spaghetti_N : N;-fun spain_PN : PN;-fun spalding_PN : PN;-fun spam_N : N;-fun span_N : N;-fun span_V2 : V2;-fun spangle_N : N;-fun spangle_V2 : V2;-fun spaniard_N : N;-fun spaniel_N : N;-fun spanish_A : A;-fun spanish_N : N;-fun spank_V : V;-fun spank_V2 : V2;-fun spanking_A : A;-fun spanking_N : N;-fun spanner_N : N;-fun spar_N : N;-fun spar_V : V;-fun spare_A : A;-fun spare_N : N;-fun spare_V : V;-fun spare_V2 : V2;-fun spare_rib_N : N;-fun sparely_Adv : Adv;-fun spareness_N : N;-fun sparing_A : A;-fun sparingly_Adv : Adv;-fun spark_N : N;-fun spark_V : V;-fun spark_V2 : V2;-fun spark_plug_N : N;-fun sparking_plug_N : N;-fun sparkle_N : N;-fun sparkle_V : V;-fun sparkler_N : N;-fun sparkling_A : A;-fun sparring_match_N : N;-fun sparring_partner_N : N;-fun sparrow_N : N;-fun sparse_A : A;-fun sparsely_Adv : Adv;-fun sparseness_N : N;-fun sparsity_N : N;-fun spartan_A : A;-fun spartan_N : N;-fun spasm_N : N;-fun spasmodic_A : A;-fun spasmodically_Adv : Adv;-fun spastic_A : A;-fun spastic_N : N;-fun spat_N : N;-fun spat_V : V;-fun spat_V2 : V2;-fun spatchcock_N : N;-fun spatchcock_V2 : V2;-fun spate_N : N;-fun spatial_A : A;-fun spatially_Adv : Adv;-fun spatter_N : N;-fun spatter_V : V;-fun spatter_V2 : V2;-fun spatula_N : N;-fun spavin_N : N;-fun spavined_A : A;-fun spawn_N : N;-fun spawn_V : V;-fun spawn_V2 : V2;-fun spay_V2 : V2;-fun speak_V : V;-fun speak_V2 : V2;-fun speaker_N : N;-fun speakership_N : N;-fun speaking_trumpet_N : N;-fun speaking_tube_N : N;-fun spear_N : N;-fun spear_V2 : V2;-fun spearhead_N : N;-fun spearmint_N : N;-fun spec_N : N;-fun special_A : A;-fun special_N : N;-fun specialism_N : N;-fun specialist_N : N;-fun speciality_N : N;-fun specialization_N : N;-fun specialize_V : V;-fun specialize_V2 : V2;-fun specially_Adv : Adv;-fun specialty_N : N;-fun specie_N : N;-fun species_N : N;-fun specifiable_A : A;-fun specific_A : A;-fun specific_N : N;-fun specifically_Adv : Adv;-fun specification_N : N;-fun specificity_N : N;-fun specify_V2 : V2;-fun specimen_N : N;-fun specious_A : A;-fun speciously_Adv : Adv;-fun speciousness_N : N;-fun speck_N : N;-fun specked_A : A;-fun speckle_N : N;-fun speckled_A : A;-fun speckless_A : A;-fun spectacle_N : N;-fun spectacled_A : A;-fun spectacular_A : A;-fun spectacular_N : N;-fun spectacularly_Adv : Adv;-fun spectator_N : N;-fun spectral_A : A;-fun spectre_N : N;-fun spectroscope_N : N;-fun spectroscopic_A : A;-fun spectrum_N : N;-fun speculate_V : V;-fun speculation_N : N;-fun speculative_A : A;-fun speculatively_Adv : Adv;-fun speculator_N : N;-fun speech_N : N;-fun speech_day_N : N;-fun speechify_V : V;-fun speechless_A : A;-fun speechlessly_Adv : Adv;-fun speed_N : N;-fun speed_V : V;-fun speed_V2 : V2;-fun speed_cop_N : N;-fun speed_indicator_N : N;-fun speed_limit_N : N;-fun speed_up_N : N;-fun speedboat_N : N;-fun speedily_Adv : Adv;-fun speeding_N : N;-fun speedometer_N : N;-fun speedway_N : N;-fun speedwell_N : N;-fun speedy_A : A;-fun spelaeologist_N : N;-fun spelaeology_N : N;-fun speleologist_N : N;-fun speleology_N : N;-fun spell_N : N;-fun spell_V : V;-fun spell_V2 : V2;-fun spellbinder_N : N;-fun spellbound_A : A;-fun speller_N : N;-fun spelling_N : N;-fun spelt_N : N;-fun spenborough_PN : PN;-fun spend_V : V;-fun spend_V2 : V2;-fun spender_N : N;-fun spendthrift_N : N;-fun spennymoor_PN : PN;-fun spent_A : A;-fun sperm_N : N;-fun sperm_whale_N : N;-fun spermaceti_N : N;-fun spermatozoon_N : N;-fun spermicide_N : N;-fun spew_V : V;-fun spew_V2 : V2;-fun sphagnum_N : N;-fun sphere_N : N;-fun spherical_A : A;-fun spheroid_N : N;-fun sphinx_N : N;-fun spice_N : N;-fun spice_V2 : V2;-fun spicily_Adv : Adv;-fun spiciness_N : N;-fun spick_A : A;-fun spicy_A : A;-fun spider_N : N;-fun spidery_A : A;-fun spiel_N : N;-fun spiel_V : V;-fun spiel_V2 : V2;-fun spigot_N : N;-fun spike_N : N;-fun spike_V2 : V2;-fun spikenard_N : N;-fun spiky_A : A;-fun spill_N : N;-fun spill_V : V;-fun spill_V2 : V2;-fun spillage_N : N;-fun spillover_N : N;-fun spillway_N : N;-fun spin_N : N;-fun spin_V : V;-fun spin_V2 : V2;-fun spin_drier_N : N;-fun spin_dry_V2 : V2;-fun spin_off_N : N;-fun spinach_N : N;-fun spinal_A : A;-fun spindle_N : N;-fun spindle_berry_N : N;-fun spindle_legged_A : A;-fun spindle_shanked_A : A;-fun spindle_shanks_N : N;-fun spindle_tree_N : N;-fun spindly_A : A;-fun spindrift_N : N;-fun spine_N : N;-fun spineless_A : A;-fun spinet_N : N;-fun spinnaker_N : N;-fun spinney_N : N;-fun spinning_wheel_N : N;-fun spinster_N : N;-fun spinsterhood_N : N;-fun spiny_A : A;-fun spiral_A : A;-fun spiral_N : N;-fun spiral_V : V;-fun spirally_Adv : Adv;-fun spire_N : N;-fun spirit_N : N;-fun spirit_V2 : V2;-fun spirit_lamp_N : N;-fun spirit_level_N : N;-fun spirit_rapper_N : N;-fun spirit_stove_N : N;-fun spirited_A : A;-fun spiritless_A : A;-fun spiritual_A : A;-fun spiritual_N : N;-fun spiritualism_N : N;-fun spiritualist_N : N;-fun spiritualistic_A : A;-fun spirituality_N : N;-fun spiritualization_N : N;-fun spiritualize_V2 : V2;-fun spiritually_Adv : Adv;-fun spirituous_A : A;-fun spirt_N : N;-fun spirt_V : V;-fun spit_N : N;-fun spit_V : V;-fun spit_V2 : V2;-fun spite_N : N;-fun spite_V2 : V2;-fun spiteful_A : A;-fun spitefully_Adv : Adv;-fun spitefulness_N : N;-fun spitfire_N : N;-fun spitting_N : N;-fun spittle_N : N;-fun spittoon_N : N;-fun spiv_N : N;-fun splash_N : N;-fun splash_V : V;-fun splash_V2 : V2;-fun splashdown_N : N;-fun splay_A : A;-fun splay_N : N;-fun splay_V : V;-fun splay_V2 : V2;-fun splayfoot_N : N;-fun splayfooted_A : A;-fun spleen_N : N;-fun splendid_A : A;-fun splendidly_Adv : Adv;-fun splendiferous_A : A;-fun splendour_N : N;-fun splenetic_A : A;-fun splice_N : N;-fun splice_V2 : V2;-fun splicer_N : N;-fun splint_N : N;-fun splinter_N : N;-fun splinter_V : V;-fun splinter_V2 : V2;-fun splinter_proof_A : A;-fun splintery_A : A;-fun split_N : N;-fun split_PN : PN;-fun split_V : V;-fun split_V2 : V2;-fun splodge_N : N;-fun splosh_V2 : V2;-fun splotch_N : N;-fun splurge_N : N;-fun splurge_V : V;-fun splutter_N : N;-fun splutter_V : V;-fun splutter_V2 : V2;-fun spode_N : N;-fun spoil_N : N;-fun spoil_V : V;-fun spoil_V2 : V2;-fun spoilsport_N : N;-fun spoke_N : N;-fun spokesman_N : N;-fun spoliation_N : N;-fun spondaic_A : A;-fun spondee_N : N;-fun sponge_N : N;-fun sponge_V : V;-fun sponge_V2 : V2;-fun sponge_cake_N : N;-fun sponger_N : N;-fun sponginess_N : N;-fun spongy_A : A;-fun sponsor_N : N;-fun sponsor_V2 : V2;-fun sponsorship_N : N;-fun spontaneity_N : N;-fun spontaneous_A : A;-fun spontaneously_Adv : Adv;-fun spontaneousness_N : N;-fun spoof_N : N;-fun spoof_V2 : V2;-fun spook_N : N;-fun spooky_A : A;-fun spool_N : N;-fun spoon_N : N;-fun spoon_V : V;-fun spoon_V2 : V2;-fun spoonerism_N : N;-fun spoonfeed_V2 : V2;-fun spoonfeeding_N : N;-fun spoonful_N : N;-fun spoor_N : N;-fun sporadic_A : A;-fun sporadically_Adv : Adv;-fun spore_N : N;-fun sporran_N : N;-fun sport_N : N;-fun sport_V : V;-fun sport_V2 : V2;-fun sporting_A : A;-fun sportingly_Adv : Adv;-fun sportive_A : A;-fun sportively_Adv : Adv;-fun sportiveness_N : N;-fun sports_car_N : N;-fun sports_coat_N : N;-fun sports_editor_N : N;-fun sports_jacket_N : N;-fun sportsman_N : N;-fun sportsmanlike_A : A;-fun sportsmanship_N : N;-fun spot_N : N;-fun spot_V : V;-fun spot_V2 : V2;-fun spotless_A : A;-fun spotlessly_Adv : Adv;-fun spotlight_N : N;-fun spotlight_V2 : V2;-fun spotted_A : A;-fun spotter_N : N;-fun spotty_A : A;-fun spouse_N : N;-fun spout_N : N;-fun spout_V : V;-fun spout_V2 : V2;-fun sprain_N : N;-fun sprain_V2 : V2;-fun sprat_N : N;-fun sprawl_N : N;-fun sprawl_V : V;-fun spray_N : N;-fun spray_V2 : V2;-fun spray_gun_N : N;-fun sprayer_N : N;-fun spread_N : N;-fun spread_V : V;-fun spread_V2 : V2;-fun spread_over_N : N;-fun spreadeagle_N : N;-fun spreadeagle_V2 : V2;-fun spreader_N : N;-fun spree_N : N;-fun sprig_N : N;-fun sprigged_A : A;-fun sprightliness_N : N;-fun sprightly_A : A;-fun spring_N : N;-fun spring_V : V;-fun spring_V2 : V2;-fun spring_balance_N : N;-fun spring_clean_N : N;-fun spring_clean_V2 : V2;-fun spring_cleaning_N : N;-fun spring_gun_N : N;-fun spring_mattress_N : N;-fun springboard_N : N;-fun springbok_N : N;-fun springfield_PN : PN;-fun springless_A : A;-fun springlike_A : A;-fun springtide_N : N;-fun springtime_N : N;-fun springy_A : A;-fun sprinkle_V2 : V2;-fun sprinkler_N : N;-fun sprinkling_N : N;-fun sprint_N : N;-fun sprint_V : V;-fun sprinter_N : N;-fun sprit_N : N;-fun sprite_N : N;-fun spritsail_N : N;-fun sprocket_N : N;-fun sprocket_wheel_N : N;-fun sprout_N : N;-fun sprout_V : V;-fun sprout_V2 : V2;-fun spruce_A : A;-fun spruce_N : N;-fun spruce_V : V;-fun spruce_V2 : V2;-fun sprucely_Adv : Adv;-fun spruceness_N : N;-fun spry_A : A;-fun spud_N : N;-fun spue_V : V;-fun spue_V2 : V2;-fun spume_N : N;-fun spunk_N : N;-fun spunky_A : A;-fun spur_N : N;-fun spur_V : V;-fun spur_V2 : V2;-fun spurious_A : A;-fun spuriously_Adv : Adv;-fun spuriousness_N : N;-fun spurn_V2 : V2;-fun spurt_N : N;-fun spurt_V : V;-fun sputnik_N : N;-fun sputter_V : V;-fun sputter_V2 : V2;-fun sputum_N : N;-fun spy_N : N;-fun spy_V : V;-fun spy_V2 : V2;-fun spy_hole_N : N;-fun spyglass_N : N;-fun sq_PN : PN;-fun squab_N : N;-fun squabble_N : N;-fun squabble_V : V;-fun squad_N : N;-fun squadron_N : N;-fun squalid_A : A;-fun squalidly_Adv : Adv;-fun squall_N : N;-fun squall_V : V;-fun squally_A : A;-fun squalor_N : N;-fun squander_V2 : V2;-fun squandermania_N : N;-fun square_A : A;-fun square_Adv : Adv;-fun square_N : N;-fun square_V : V;-fun square_V2 : V2;-fun square_bashing_N : N;-fun square_built_A : A;-fun square_rigged_A : A;-fun square_shouldered_A : A;-fun square_toed_A : A;-fun square_toes_N : N;-fun squarely_Adv : Adv;-fun squareness_N : N;-fun squash_N : N;-fun squash_V : V;-fun squash_V2 : V2;-fun squashy_A : A;-fun squat_A : A;-fun squat_V : V;-fun squatter_N : N;-fun squaw_N : N;-fun squawk_N : N;-fun squawk_V : V;-fun squawker_N : N;-fun squeak_N : N;-fun squeak_V : V;-fun squeak_V2 : V2;-fun squeaker_N : N;-fun squeaky_A : A;-fun squeal_N : N;-fun squeal_V : V;-fun squeal_V2 : V2;-fun squealer_N : N;-fun squeamish_A : A;-fun squeamishly_Adv : Adv;-fun squeamishness_N : N;-fun squeegee_N : N;-fun squeegee_V2 : V2;-fun squeeze_N : N;-fun squeeze_V : V;-fun squeeze_V2 : V2;-fun squeezer_N : N;-fun squelch_N : N;-fun squelch_V : V;-fun squelch_V2 : V2;-fun squib_N : N;-fun squid_N : N;-fun squiffy_A : A;-fun squiggle_N : N;-fun squiggly_A : A;-fun squint_N : N;-fun squint_V : V;-fun squint_eyed_A : A;-fun squire_N : N;-fun squire_V2 : V2;-fun squirearchy_N : N;-fun squirm_N : N;-fun squirm_V : V;-fun squirrel_N : N;-fun squirt_N : N;-fun squirt_V : V;-fun squirt_V2 : V2;-fun sr_PN : PN;-fun sri_lanka_PN : PN;-fun sri_lankan_A : A;-fun sri_lankan_N : N;-fun srn_N : N;-fun ss_N : N;-fun st_PN : PN;-fun st_albans_PN : PN;-fun st_andrews_PN : PN;-fun st_andrews_major_PN : PN;-fun st_austell_PN : PN;-fun st_blazey_PN : PN;-fun st_helens_PN : PN;-fun st_ives_PN : PN;-fun st_louis_PN : PN;-fun st_neots_PN : PN;-fun st_paul_PN : PN;-fun st_petersburg_PN : PN;-fun st_stephen_PN : PN;-fun sta_PN : PN;-fun stab_N : N;-fun stab_V : V;-fun stab_V2 : V2;-fun stabber_N : N;-fun stability_N : N;-fun stabilization_N : N;-fun stabilize_V2 : V2;-fun stabilizer_N : N;-fun stable_A : A;-fun stable_N : N;-fun stable_V2 : V2;-fun stable_companion_N : N;-fun stableboy_N : N;-fun stableman_N : N;-fun stablemate_N : N;-fun stabling_N : N;-fun staccato_A : A;-fun staccato_Adv : Adv;-fun stack_N : N;-fun stack_V2 : V2;-fun stadium_N : N;-fun staff_N : N;-fun staff_V2 : V2;-fun staff_office_N : N;-fun stafford_PN : PN;-fun staffordshire_PN : PN;-fun stag_N : N;-fun stag_party_N : N;-fun stage_N : N;-fun stage_V : V;-fun stage_V2 : V2;-fun stage_struck_A : A;-fun stage_whisper_N : N;-fun stagecoach_N : N;-fun stagecraft_N : N;-fun stager_N : N;-fun stagflation_N : N;-fun stagger_N : N;-fun stagger_V : V;-fun stagger_V2 : V2;-fun staggerer_N : N;-fun staggeringly_Adv : Adv;-fun stagily_Adv : Adv;-fun staginess_N : N;-fun staging_N : N;-fun stagnancy_N : N;-fun stagnant_A : A;-fun stagnate_V : V;-fun stagnation_N : N;-fun stagy_A : A;-fun staid_A : A;-fun staidly_Adv : Adv;-fun staidness_N : N;-fun stain_N : N;-fun stain_V : V;-fun stain_V2 : V2;-fun stainless_A : A;-fun stair_N : N;-fun stair_carpet_N : N;-fun stair_rod_N : N;-fun staircase_N : N;-fun stairway_N : N;-fun stake_N : N;-fun stake_V2 : V2;-fun stake_holder_N : N;-fun stakeford_PN : PN;-fun stalactite_N : N;-fun stalagmite_N : N;-fun stale_A : A;-fun stale_V : V;-fun stalemate_N : N;-fun stalemate_V2 : V2;-fun staleness_N : N;-fun stalk_N : N;-fun stalk_V : V;-fun stalk_V2 : V2;-fun stalker_N : N;-fun stalking_horse_N : N;-fun stall_N : N;-fun stall_V : V;-fun stall_V2 : V2;-fun stall_fed_A : A;-fun stallion_N : N;-fun stalwart_A : A;-fun stalwart_N : N;-fun stalybridge_PN : PN;-fun stamen_N : N;-fun stamford_PN : PN;-fun stamina_N : N;-fun stammer_N : N;-fun stammer_V : V;-fun stammer_V2 : V2;-fun stammerer_N : N;-fun stammeringly_Adv : Adv;-fun stamp_N : N;-fun stamp_V : V;-fun stamp_V2 : V2;-fun stamp_album_N : N;-fun stamp_collector_N : N;-fun stamp_dealer_N : N;-fun stamp_duty_N : N;-fun stampede_N : N;-fun stampede_V : V;-fun stampede_V2 : V2;-fun stamping_ground_N : N;-fun stan_PN : PN;-fun stance_N : N;-fun stanchion_N : N;-fun stand_N : N;-fun stand_V : V;-fun stand_V2 : V2;-fun stand_in_N : N;-fun stand_to_N : N;-fun stand_up_A : A;-fun standard_A : A;-fun standard_N : N;-fun standard_bearer_N : N;-fun standardization_N : N;-fun standardize_V2 : V2;-fun standby_N : N;-fun standing_A : A;-fun standing_N : N;-fun standoffish_A : A;-fun standoffishly_Adv : Adv;-fun standoffishness_N : N;-fun standpipe_N : N;-fun standpoint_N : N;-fun standstill_N : N;-fun stanford_PN : PN;-fun stanley_PN : PN;-fun stanza_N : N;-fun staple_N : N;-fun staple_V2 : V2;-fun stapler_N : N;-fun stapling_machine_N : N;-fun star_N : N;-fun star_V : V;-fun star_V2 : V2;-fun starboard_N : N;-fun starboard_V2 : V2;-fun starch_N : N;-fun starch_V2 : V2;-fun starchy_A : A;-fun stardom_N : N;-fun stardust_N : N;-fun stare_N : N;-fun stare_V : V;-fun stare_V2 : V2;-fun starfish_N : N;-fun stargazer_N : N;-fun staring_A : A;-fun staring_Adv : Adv;-fun stark_A : A;-fun stark_Adv : Adv;-fun starkers_A : A;-fun starkly_Adv : Adv;-fun starless_A : A;-fun starlet_N : N;-fun starlight_N : N;-fun starling_N : N;-fun starlit_A : A;-fun starry_A : A;-fun starry_eyed_A : A;-fun start_N : N;-fun start_V : V;-fun start_V2 : V2;-fun starter_N : N;-fun starting_gate_N : N;-fun starting_point_N : N;-fun starting_post_N : N;-fun startle_V2 : V2;-fun startlingly_Adv : Adv;-fun starvation_N : N;-fun starve_V : V;-fun starve_V2 : V2;-fun starveling_N : N;-fun stash_V2 : V2;-fun state_N : N;-fun state_V2 : V2;-fun statecraft_N : N;-fun stated_A : A;-fun statehouse_N : N;-fun stateless_A : A;-fun stateliness_N : N;-fun stately_A : A;-fun statement_N : N;-fun statesman_N : N;-fun statesmanlike_A : A;-fun statesmanship_N : N;-fun static_A : A;-fun statically_Adv : Adv;-fun statics_N : N;-fun station_N : N;-fun station_V2 : V2;-fun station_waggon_N : N;-fun stationary_A : A;-fun stationer_N : N;-fun stationery_N : N;-fun stationmaster_N : N;-fun statistic_N : N;-fun statistical_A : A;-fun statistically_Adv : Adv;-fun statistician_N : N;-fun statistics_N : N;-fun statuary_A : A;-fun statuary_N : N;-fun statue_N : N;-fun statuesque_A : A;-fun statuette_N : N;-fun stature_N : N;-fun status_N : N;-fun status_quo_N : N;-fun statute_N : N;-fun statute_book_N : N;-fun statutorily_Adv : Adv;-fun statutory_A : A;-fun staunch_A : A;-fun staunch_V2 : V2;-fun staunchly_Adv : Adv;-fun staunchness_N : N;-fun stave_N : N;-fun stave_V : V;-fun stave_V2 : V2;-fun stay_N : N;-fun stay_V : V;-fun stay_V2 : V2;-fun stay_at_home_N : N;-fun stayer_N : N;-fun std_PN : PN;-fun stead_N : N;-fun steadfast_A : A;-fun steadfastly_Adv : Adv;-fun steadfastness_N : N;-fun steadily_Adv : Adv;-fun steadiness_N : N;-fun steady_A : A;-fun steady_Adv : Adv;-fun steady_N : N;-fun steady_V : V;-fun steady_V2 : V2;-fun steak_N : N;-fun steal_V : V;-fun steal_V2 : V2;-fun stealth_N : N;-fun stealthily_Adv : Adv;-fun stealthy_A : A;-fun steam_N : N;-fun steam_V : V;-fun steam_V2 : V2;-fun steam_boiler_N : N;-fun steam_coal_N : N;-fun steam_engine_N : N;-fun steam_heat_N : N;-fun steam_heat_V2 : V2;-fun steamboat_N : N;-fun steamer_N : N;-fun steamroller_N : N;-fun steamroller_V2 : V2;-fun steamship_N : N;-fun steamy_A : A;-fun steed_N : N;-fun steel_N : N;-fun steel_V2 : V2;-fun steel_clad_A : A;-fun steel_plated_A : A;-fun steelworks_N : N;-fun steely_A : A;-fun steelyard_N : N;-fun steenbok_N : N;-fun steep_A : A;-fun steep_V : V;-fun steep_V2 : V2;-fun steepen_V : V;-fun steepen_V2 : V2;-fun steepish_A : A;-fun steeple_N : N;-fun steeplechase_N : N;-fun steeplechaser_N : N;-fun steeplejack_N : N;-fun steeply_Adv : Adv;-fun steepness_N : N;-fun steer_N : N;-fun steer_V : V;-fun steer_V2 : V2;-fun steerage_N : N;-fun steerageway_N : N;-fun steering_gear_N : N;-fun steering_wheel_N : N;-fun steersman_N : N;-fun stele_N : N;-fun stella_PN : PN;-fun stellar_A : A;-fun stem_N : N;-fun stem_V : V;-fun stem_V2 : V2;-fun stemmed_A : A;-fun sten_PN : PN;-fun stench_N : N;-fun stencil_N : N;-fun stencil_V2 : V2;-fun stenographer_N : N;-fun stenography_N : N;-fun stentorian_A : A;-fun step_N : N;-fun step_V : V;-fun step_V2 : V2;-fun stepbrother_N : N;-fun stepchild_N : N;-fun stepdaughter_N : N;-fun stepfather_N : N;-fun stephanie_PN : PN;-fun stephen_PN : PN;-fun stepladder_N : N;-fun stepmother_N : N;-fun stepparent_N : N;-fun steppe_N : N;-fun stepping_stone_N : N;-fun stepsister_N : N;-fun stepson_N : N;-fun stereo_N : N;-fun stereophonic_A : A;-fun stereoscope_N : N;-fun stereoscopic_A : A;-fun stereotype_N : N;-fun stereotype_V2 : V2;-fun sterile_A : A;-fun sterility_N : N;-fun sterilization_N : N;-fun sterilize_V2 : V2;-fun sterling_A : A;-fun sterling_N : N;-fun stern_A : A;-fun stern_N : N;-fun sternly_Adv : Adv;-fun sternness_N : N;-fun sternum_N : N;-fun sternwheeler_N : N;-fun stertorous_A : A;-fun stertorously_Adv : Adv;-fun stethoscope_N : N;-fun stetson_N : N;-fun steve_PN : PN;-fun stevedore_N : N;-fun steven_PN : PN;-fun stevenage_PN : PN;-fun stevenston_PN : PN;-fun stew_N : N;-fun stew_V : V;-fun stew_V2 : V2;-fun steward_N : N;-fun stewardess_N : N;-fun stewardship_N : N;-fun stewart_PN : PN;-fun stewed_A : A;-fun steyning_PN : PN;-fun stick_N : N;-fun stick_V : V;-fun stick_V2 : V2;-fun stick_in_the_mud_A : A;-fun stick_in_the_mud_N : N;-fun stick_on_A : A;-fun stick_up_N : N;-fun sticker_N : N;-fun stickily_Adv : Adv;-fun stickiness_N : N;-fun sticking_plaster_N : N;-fun stickler_N : N;-fun sticky_A : A;-fun stiff_A : A;-fun stiff_Adv : Adv;-fun stiff_N : N;-fun stiff_necked_A : A;-fun stiffen_V : V;-fun stiffen_V2 : V2;-fun stiffener_N : N;-fun stiffening_N : N;-fun stiffly_Adv : Adv;-fun stiffness_N : N;-fun stifle_V : V;-fun stifle_V2 : V2;-fun stigma_N : N;-fun stigmatize_V2 : V2;-fun stile_N : N;-fun stiletto_N : N;-fun still_A : A;-fun still_Adv : Adv;-fun still_N : N;-fun still_V2 : V2;-fun still_life_N : N;-fun still_room_N : N;-fun stillbirth_N : N;-fun stillborn_A : A;-fun stillness_N : N;-fun stilly_A : A;-fun stilt_N : N;-fun stilted_A : A;-fun stiltedly_Adv : Adv;-fun stilton_N : N;-fun stimulant_N : N;-fun stimulate_V2 : V2;-fun stimulating_A : A;-fun stimulation_N : N;-fun stimulus_N : N;-fun sting_N : N;-fun sting_V : V;-fun sting_V2 : V2;-fun stinger_N : N;-fun stingily_Adv : Adv;-fun stinginess_N : N;-fun stingless_A : A;-fun stingray_N : N;-fun stingy_A : A;-fun stink_N : N;-fun stink_V : V;-fun stink_V2 : V2;-fun stinker_N : N;-fun stint_N : N;-fun stint_V : V;-fun stint_V2 : V2;-fun stipend_N : N;-fun stipendiary_A : A;-fun stipendiary_N : N;-fun stipple_V2 : V2;-fun stipulate_V : V;-fun stipulate_V2 : V2;-fun stipulation_N : N;-fun stir_N : N;-fun stir_V : V;-fun stir_V2 : V2;-fun stirling_PN : PN;-fun stirring_A : A;-fun stirringly_Adv : Adv;-fun stirrup_N : N;-fun stirrup_cup_N : N;-fun stitch_N : N;-fun stitch_V : V;-fun stitch_V2 : V2;-fun stoat_N : N;-fun stochastic_A : A;-fun stochastically_Adv : Adv;-fun stock_N : N;-fun stock_V2 : V2;-fun stock_cube_N : N;-fun stock_farmer_N : N;-fun stock_in_trade_N : N;-fun stock_list_N : N;-fun stock_still_Adv : Adv;-fun stockade_N : N;-fun stockade_V2 : V2;-fun stockbreeder_N : N;-fun stockbroker_N : N;-fun stockcar_N : N;-fun stockfish_N : N;-fun stockholder_N : N;-fun stockholding_N : N;-fun stockholm_PN : PN;-fun stockily_Adv : Adv;-fun stockinette_N : N;-fun stocking_N : N;-fun stockinged_A : A;-fun stockist_N : N;-fun stockjobber_N : N;-fun stockpile_N : N;-fun stockpiling_N : N;-fun stockport_PN : PN;-fun stockpot_N : N;-fun stockroom_N : N;-fun stocksbridge_PN : PN;-fun stocktaking_N : N;-fun stocky_A : A;-fun stockyard_N : N;-fun stodge_N : N;-fun stodginess_N : N;-fun stodgy_A : A;-fun stoep_N : N;-fun stoic_N : N;-fun stoical_A : A;-fun stoically_Adv : Adv;-fun stoicism_N : N;-fun stoke_V : V;-fun stoke_V2 : V2;-fun stoke_on_trent_PN : PN;-fun stokehold_N : N;-fun stokehole_N : N;-fun stoker_N : N;-fun stole_N : N;-fun stolen_A : A;-fun stolid_A : A;-fun stolidity_N : N;-fun stolidly_Adv : Adv;-fun stolidness_N : N;-fun stomach_N : N;-fun stomach_V2 : V2;-fun stomach_ache_N : N;-fun stomach_pump_N : N;-fun stomp_N : N;-fun stomp_V : V;-fun stone_N : N;-fun stone_PN : PN;-fun stone_V2 : V2;-fun stone_blind_A : A;-fun stone_cold_A : A;-fun stone_dead_A : A;-fun stone_deaf_A : A;-fun stone_fruit_N : N;-fun stone_pit_N : N;-fun stone_sober_A : A;-fun stonebreaker_N : N;-fun stoned_A : A;-fun stonehouse_PN : PN;-fun stoneless_A : A;-fun stonemason_N : N;-fun stonewall_V2 : V2;-fun stonewaller_N : N;-fun stonewalling_N : N;-fun stoneware_N : N;-fun stonework_N : N;-fun stonily_Adv : Adv;-fun stony_A : A;-fun stony_broke_A : A;-fun stooge_N : N;-fun stooge_V : V;-fun stool_N : N;-fun stoop_N : N;-fun stoop_V : V;-fun stoop_V2 : V2;-fun stop_N : N;-fun stop_V : V;-fun stop_V2 : V2;-fun stopcock_N : N;-fun stopgap_N : N;-fun stopover_N : N;-fun stoppage_N : N;-fun stopper_N : N;-fun stopping_N : N;-fun stopwatch_N : N;-fun storage_N : N;-fun store_N : N;-fun store_V2 : V2;-fun storehouse_N : N;-fun storeroom_N : N;-fun storey_N : N;-fun storeyed_A : A;-fun storied_A : A;-fun stork_N : N;-fun storm_N : N;-fun storm_V : V;-fun storm_V2 : V2;-fun storm_beaten_A : A;-fun storm_bound_A : A;-fun storm_centre_N : N;-fun storm_cloud_N : N;-fun storm_cone_N : N;-fun storm_lantern_N : N;-fun storm_signal_N : N;-fun storm_tossed_A : A;-fun storm_trooper_N : N;-fun stormily_Adv : Adv;-fun stormproof_A : A;-fun stormy_A : A;-fun stornoway_PN : PN;-fun story_N : N;-fun storyteller_N : N;-fun stotfold_PN : PN;-fun stoup_N : N;-fun stourbridge_PN : PN;-fun stourport_on_severn_PN : PN;-fun stout_A : A;-fun stout_N : N;-fun stouthearted_A : A;-fun stoutly_Adv : Adv;-fun stoutness_N : N;-fun stove_N : N;-fun stovepipe_N : N;-fun stow_V2 : V2;-fun stowaway_N : N;-fun stowmarket_PN : PN;-fun straddle_V : V;-fun straddle_V2 : V2;-fun strafe_V2 : V2;-fun straggle_V : V;-fun straggler_N : N;-fun straggly_A : A;-fun straight_A : A;-fun straight_Adv : Adv;-fun straight_N : N;-fun straighten_V : V;-fun straighten_V2 : V2;-fun straightforward_A : A;-fun straightforwardly_Adv : Adv;-fun straightness_N : N;-fun straightway_Adv : Adv;-fun strain_N : N;-fun strain_V : V;-fun strain_V2 : V2;-fun strained_A : A;-fun strainer_N : N;-fun strait_A : A;-fun strait_N : N;-fun strait_laced_A : A;-fun straiten_V2 : V2;-fun straitjacket_N : N;-fun strand_N : N;-fun strand_V : V;-fun strand_V2 : V2;-fun strange_A : A;-fun strangely_Adv : Adv;-fun strangeness_N : N;-fun stranger_N : N;-fun strangle_V2 : V2;-fun stranglehold_N : N;-fun strangulation_N : N;-fun stranraer_PN : PN;-fun strap_N : N;-fun strap_V2 : V2;-fun straphanger_N : N;-fun strapping_A : A;-fun strapping_N : N;-fun strasbourg_PN : PN;-fun stratagem_N : N;-fun strategic_A : A;-fun strategical_A : A;-fun strategically_Adv : Adv;-fun strategics_N : N;-fun strategist_N : N;-fun strategy_N : N;-fun stratford_on_avon_PN : PN;-fun strathaven_PN : PN;-fun strathclyde_PN : PN;-fun stratification_N : N;-fun stratify_V : V;-fun stratify_V2 : V2;-fun stratosphere_N : N;-fun stratum_N : N;-fun straw_N : N;-fun straw_V2 : V2;-fun straw_coloured_A : A;-fun strawberry_N : N;-fun strawboard_N : N;-fun stray_N : N;-fun stray_V : V;-fun streak_N : N;-fun streak_V : V;-fun streak_V2 : V2;-fun streaky_A : A;-fun stream_N : N;-fun stream_V : V;-fun streamer_N : N;-fun streamlet_N : N;-fun streamline_V2 : V2;-fun streamlined_A : A;-fun street_N : N;-fun street_PN : PN;-fun street_girl_N : N;-fun street_urchin_N : N;-fun streetcar_N : N;-fun streetwalker_N : N;-fun strength_N : N;-fun strengthen_V : V;-fun strengthen_V2 : V2;-fun strenuous_A : A;-fun strenuously_Adv : Adv;-fun strenuousness_N : N;-fun streptococcus_N : N;-fun streptomycin_N : N;-fun stress_N : N;-fun stress_V2 : V2;-fun stress_mark_N : N;-fun stretch_N : N;-fun stretch_V : V;-fun stretch_V2 : V2;-fun stretcher_N : N;-fun stretcher_bearer_N : N;-fun stretcher_party_N : N;-fun stretford_PN : PN;-fun strew_V2 : V2;-fun striated_A : A;-fun stricken_A : A;-fun strict_A : A;-fun strictly_Adv : Adv;-fun strictness_N : N;-fun stricture_N : N;-fun stride_N : N;-fun stride_V : V;-fun stride_V2 : V2;-fun strident_A : A;-fun stridently_Adv : Adv;-fun stridulate_V : V;-fun stridulation_N : N;-fun strife_N : N;-fun strike_N : N;-fun strike_V : V;-fun strike_V2 : V2;-fun strike_leader_N : N;-fun strike_pay_N : N;-fun strikebound_A : A;-fun strikebreaker_N : N;-fun striker_N : N;-fun striking_A : A;-fun strikingly_Adv : Adv;-fun string_N : N;-fun string_V : V;-fun string_V2 : V2;-fun stringency_N : N;-fun stringent_A : A;-fun stringently_Adv : Adv;-fun stringy_A : A;-fun strip_N : N;-fun strip_V : V;-fun strip_V2 : V2;-fun strip_lighting_N : N;-fun strip_poker_N : N;-fun strip_show_N : N;-fun stripe_N : N;-fun striped_A : A;-fun stripling_N : N;-fun stripper_N : N;-fun striptease_N : N;-fun stripy_A : A;-fun strive_V : V;-fun striver_N : N;-fun stroboscope_N : N;-fun stroke_N : N;-fun stroke_V2 : V2;-fun stroll_N : N;-fun stroll_V : V;-fun stroller_N : N;-fun strong_A : A;-fun strong_arm_A : A;-fun strong_boned_A : A;-fun strong_minded_A : A;-fun strongbox_N : N;-fun stronghold_N : N;-fun strongly_Adv : Adv;-fun strongroom_N : N;-fun strontium_N : N;-fun strop_N : N;-fun strop_V2 : V2;-fun strophe_N : N;-fun stroppy_A : A;-fun stroud_PN : PN;-fun struck_A : A;-fun structural_A : A;-fun structurally_Adv : Adv;-fun structure_N : N;-fun structured_A : A;-fun strudel_N : N;-fun struggle_N : N;-fun struggle_V : V;-fun strum_N : N;-fun strum_V : V;-fun strum_V2 : V2;-fun strumpet_N : N;-fun strut_N : N;-fun strut_V : V;-fun strychnine_N : N;-fun stuart_PN : PN;-fun stub_N : N;-fun stub_V2 : V2;-fun stubble_N : N;-fun stubbly_A : A;-fun stubborn_A : A;-fun stubbornly_Adv : Adv;-fun stubbornness_N : N;-fun stubby_A : A;-fun stucco_N : N;-fun stucco_V2 : V2;-fun stuck_up_A : A;-fun stud_N : N;-fun stud_V2 : V2;-fun stud_farm_N : N;-fun stud_mare_N : N;-fun studbook_N : N;-fun student_N : N;-fun studied_A : A;-fun studio_N : N;-fun studious_A : A;-fun studiously_Adv : Adv;-fun studiousness_N : N;-fun studley_PN : PN;-fun study_N : N;-fun study_V : V;-fun study_V2 : V2;-fun stuff_N : N;-fun stuff_V2 : V2;-fun stuffily_Adv : Adv;-fun stuffiness_N : N;-fun stuffing_N : N;-fun stuffy_A : A;-fun stultification_N : N;-fun stultify_V2 : V2;-fun stumble_N : N;-fun stumble_V : V;-fun stumbling_block_N : N;-fun stump_N : N;-fun stump_V : V;-fun stump_V2 : V2;-fun stumper_N : N;-fun stumpy_A : A;-fun stun_V2 : V2;-fun stunner_N : N;-fun stunning_A : A;-fun stunningly_Adv : Adv;-fun stunt_N : N;-fun stunt_V2 : V2;-fun stupefaction_N : N;-fun stupefy_V2 : V2;-fun stupendous_A : A;-fun stupendously_Adv : Adv;-fun stupid_A : A;-fun stupid_N : N;-fun stupidity_N : N;-fun stupidly_Adv : Adv;-fun stupify_V2 : V2;-fun stupifying_A : A;-fun stupor_N : N;-fun sturdily_Adv : Adv;-fun sturdiness_N : N;-fun sturdy_A : A;-fun sturgeon_N : N;-fun stutter_N : N;-fun stutter_V : V;-fun stutter_V2 : V2;-fun stutterer_N : N;-fun stutteringly_Adv : Adv;-fun stuttgart_PN : PN;-fun sty_N : N;-fun stye_N : N;-fun stygian_A : A;-fun style_N : N;-fun style_V2 : V2;-fun stylish_A : A;-fun stylishly_Adv : Adv;-fun stylishness_N : N;-fun stylist_N : N;-fun stylistic_A : A;-fun stylistically_Adv : Adv;-fun stylization_N : N;-fun stylize_V2 : V2;-fun stylus_N : N;-fun stymie_N : N;-fun stymie_V2 : V2;-fun styptic_A : A;-fun styptic_N : N;-fun styx_PN : PN;-fun suasion_N : N;-fun suave_A : A;-fun suavely_Adv : Adv;-fun suavity_N : N;-fun sub_N : N;-fun sub_V : V;-fun sub_V2 : V2;-fun sub_judice_A : A;-fun sub_rosa_Adv : Adv;-fun subaltern_N : N;-fun subatomic_A : A;-fun subcommittee_N : N;-fun subconscious_A : A;-fun subconscious_N : N;-fun subconsciously_Adv : Adv;-fun subconsciousness_N : N;-fun subcontinent_N : N;-fun subcontract_N : N;-fun subcontract_V : V;-fun subcontract_V2 : V2;-fun subcontractor_N : N;-fun subcutaneous_A : A;-fun subdivide_V : V;-fun subdivide_V2 : V2;-fun subdivision_N : N;-fun subdue_V2 : V2;-fun subedit_V2 : V2;-fun subeditor_N : N;-fun subfusc_A : A;-fun subgroup_N : N;-fun subheading_N : N;-fun subhuman_A : A;-fun subject_A : A;-fun subject_N : N;-fun subject_V2 : V2;-fun subjection_N : N;-fun subjective_A : A;-fun subjectively_Adv : Adv;-fun subjectivity_N : N;-fun subjoin_V2 : V2;-fun subjugate_V2 : V2;-fun subjugation_N : N;-fun subjunctive_A : A;-fun subjunctive_N : N;-fun sublease_N : N;-fun sublease_V : V;-fun sublease_V2 : V2;-fun sublet_V : V;-fun sublet_V2 : V2;-fun sublieutenant_N : N;-fun sublimate_A : A;-fun sublimate_N : N;-fun sublimate_V2 : V2;-fun sublimation_N : N;-fun sublime_A : A;-fun sublime_N : N;-fun sublimely_Adv : Adv;-fun subliminal_A : A;-fun sublimity_N : N;-fun submarine_A : A;-fun submarine_N : N;-fun submariner_N : N;-fun submerge_V : V;-fun submerge_V2 : V2;-fun submerged_A : A;-fun submergence_N : N;-fun submersible_A : A;-fun submersion_N : N;-fun submission_N : N;-fun submissive_A : A;-fun submissively_Adv : Adv;-fun submissiveness_N : N;-fun submit_V : V;-fun submit_V2 : V2;-fun subnormal_A : A;-fun subnormal_N : N;-fun suborbital_A : A;-fun subordinate_A : A;-fun subordinate_N : N;-fun subordinate_V2 : V2;-fun subordination_N : N;-fun subordinative_A : A;-fun suborn_V2 : V2;-fun subornation_N : N;-fun subpoena_N : N;-fun subpoena_V2 : V2;-fun subscribe_V : V;-fun subscribe_V2 : V2;-fun subscriber_N : N;-fun subscript_N : N;-fun subscription_N : N;-fun subsection_N : N;-fun subsequent_A : A;-fun subsequently_Adv : Adv;-fun subserve_V2 : V2;-fun subservience_N : N;-fun subservient_A : A;-fun subserviently_Adv : Adv;-fun subside_V : V;-fun subsidence_N : N;-fun subsidiary_A : A;-fun subsidiary_N : N;-fun subsidization_N : N;-fun subsidize_V2 : V2;-fun subsidy_N : N;-fun subsist_V : V;-fun subsistence_N : N;-fun subsoil_N : N;-fun subsonic_A : A;-fun substance_N : N;-fun substandard_A : A;-fun substantial_A : A;-fun substantially_Adv : Adv;-fun substantiate_V2 : V2;-fun substantiation_N : N;-fun substantival_A : A;-fun substantive_A : A;-fun substantive_N : N;-fun substation_N : N;-fun substitute_N : N;-fun substitute_V : V;-fun substitute_V2 : V2;-fun substitution_N : N;-fun substrate_N : N;-fun substratum_N : N;-fun substructure_N : N;-fun subsume_V2 : V2;-fun subtend_V2 : V2;-fun subterfuge_N : N;-fun subterranean_A : A;-fun subtitle_N : N;-fun subtle_A : A;-fun subtlety_N : N;-fun subtly_Adv : Adv;-fun subtopia_N : N;-fun subtract_V2 : V2;-fun subtraction_N : N;-fun subtropical_A : A;-fun suburb_N : N;-fun suburban_A : A;-fun suburbia_N : N;-fun subvention_N : N;-fun subversion_N : N;-fun subversive_A : A;-fun subversive_N : N;-fun subvert_V2 : V2;-fun subway_N : N;-fun succeed_V : V;-fun succeed_V2 : V2;-fun success_N : N;-fun successful_A : A;-fun successfully_Adv : Adv;-fun succession_N : N;-fun successive_A : A;-fun successively_Adv : Adv;-fun successor_N : N;-fun succinct_A : A;-fun succinctly_Adv : Adv;-fun succinctness_N : N;-fun succour_N : N;-fun succour_V2 : V2;-fun succubus_N : N;-fun succulence_N : N;-fun succulent_A : A;-fun succulent_N : N;-fun succumb_V : V;-fun such_A : A;-fun suchlike_A : A;-fun suchow_PN : PN;-fun suck_N : N;-fun suck_V : V;-fun suck_V2 : V2;-fun sucker_N : N;-fun sucking_pig_N : N;-fun suckle_V2 : V2;-fun suckling_N : N;-fun suction_N : N;-fun sudan_PN : PN;-fun sudanese_A : A;-fun sudanese_N : N;-fun sudbury_PN : PN;-fun sudden_A : A;-fun sudden_N : N;-fun suddenly_Adv : Adv;-fun suddenness_N : N;-fun sue_PN : PN;-fun sue_V : V;-fun sue_V2 : V2;-fun suede_N : N;-fun suet_N : N;-fun suety_A : A;-fun suffer_V : V;-fun suffer_V2 : V2;-fun sufferable_A : A;-fun sufferance_N : N;-fun sufferer_N : N;-fun suffering_N : N;-fun suffice_V : V;-fun suffice_V2 : V2;-fun sufficiency_N : N;-fun sufficient_A : A;-fun sufficiently_Adv : Adv;-fun suffix_N : N;-fun suffocate_V : V;-fun suffocate_V2 : V2;-fun suffocation_N : N;-fun suffolk_PN : PN;-fun suffragan_N : N;-fun suffrage_N : N;-fun suffragette_N : N;-fun suffuse_V2 : V2;-fun suffusion_N : N;-fun sugar_N : N;-fun sugar_V2 : V2;-fun sugar_beet_N : N;-fun sugar_candy_N : N;-fun sugar_cane_N : N;-fun sugar_coated_A : A;-fun sugar_daddy_N : N;-fun sugar_loaf_N : N;-fun sugar_refinery_N : N;-fun sugarlump_N : N;-fun sugary_A : A;-fun suggest_V2 : V2;-fun suggestibility_N : N;-fun suggestible_A : A;-fun suggestion_N : N;-fun suggestive_A : A;-fun suggestively_Adv : Adv;-fun suicidal_A : A;-fun suicide_N : N;-fun suit_N : N;-fun suit_V : V;-fun suit_V2 : V2;-fun suitability_N : N;-fun suitable_A : A;-fun suitableness_N : N;-fun suitably_Adv : Adv;-fun suitcase_N : N;-fun suite_N : N;-fun suiting_N : N;-fun suitor_N : N;-fun sulk_N : N;-fun sulk_V : V;-fun sulkily_Adv : Adv;-fun sulkiness_N : N;-fun sulky_A : A;-fun sulky_N : N;-fun sullen_A : A;-fun sullenly_Adv : Adv;-fun sullenness_N : N;-fun sully_V2 : V2;-fun sulpha_N : N;-fun sulphate_N : N;-fun sulphide_N : N;-fun sulphur_N : N;-fun sulphuretted_A : A;-fun sulphuric_A : A;-fun sulphurous_A : A;-fun sultan_N : N;-fun sultana_N : N;-fun sultanate_N : N;-fun sultrily_Adv : Adv;-fun sultriness_N : N;-fun sultry_A : A;-fun sum_N : N;-fun sum_V : V;-fun sum_V2 : V2;-fun sumac_N : N;-fun sumach_N : N;-fun sumatra_PN : PN;-fun sumatran_A : A;-fun sumatran_N : N;-fun summarily_Adv : Adv;-fun summarize_V2 : V2;-fun summary_A : A;-fun summary_N : N;-fun summation_N : N;-fun summer_N : N;-fun summer_V : V;-fun summerhouse_N : N;-fun summertime_N : N;-fun summery_A : A;-fun summing_up_N : N;-fun summit_N : N;-fun summon_V2 : V2;-fun summons_N : N;-fun summons_V2 : V2;-fun sump_N : N;-fun sumpter_N : N;-fun sumptuary_A : A;-fun sumptuous_A : A;-fun sumptuously_Adv : Adv;-fun sumptuousness_N : N;-fun sun_N : N;-fun sun_PN : PN;-fun sun_V2 : V2;-fun sun_drenched_A : A;-fun sun_dried_A : A;-fun sun_god_N : N;-fun sun_helmet_N : N;-fun sun_lounge_N : N;-fun sun_parlour_N : N;-fun sun_porch_N : N;-fun sun_up_N : N;-fun sun_visor_N : N;-fun sun_worship_N : N;-fun sunbaked_A : A;-fun sunbathe_N : N;-fun sunbathe_V : V;-fun sunbeam_N : N;-fun sunblind_N : N;-fun sunbonnet_N : N;-fun sunburn_N : N;-fun sunburned_A : A;-fun sunburnt_A : A;-fun sunburst_N : N;-fun sundae_N : N;-fun sunday_N : N;-fun sunday_PN : PN;-fun sunder_N : N;-fun sunder_V2 : V2;-fun sunderland_PN : PN;-fun sundial_N : N;-fun sundown_N : N;-fun sundowner_N : N;-fun sundry_A : A;-fun sunfish_N : N;-fun sunflower_N : N;-fun sunhat_N : N;-fun sunlamp_N : N;-fun sunless_A : A;-fun sunlight_N : N;-fun sunlit_A : A;-fun sunnily_Adv : Adv;-fun sunny_A : A;-fun sunray_A : A;-fun sunrise_N : N;-fun sunroof_N : N;-fun sunset_N : N;-fun sunshade_N : N;-fun sunshine_N : N;-fun sunshine_roof_N : N;-fun sunspot_N : N;-fun sunstroke_N : N;-fun suntan_N : N;-fun suntrap_N : N;-fun sup_N : N;-fun sup_V : V;-fun sup_V2 : V2;-fun super_A : A;-fun super_N : N;-fun superabundance_N : N;-fun superabundant_A : A;-fun superannuate_V2 : V2;-fun superannuated_A : A;-fun superannuation_N : N;-fun superb_A : A;-fun superbly_Adv : Adv;-fun supercargo_N : N;-fun supercharged_A : A;-fun supercharger_N : N;-fun supercilious_A : A;-fun superciliously_Adv : Adv;-fun superciliousness_N : N;-fun superego_N : N;-fun supererogation_N : N;-fun superfatted_A : A;-fun superficial_A : A;-fun superficiality_N : N;-fun superficially_Adv : Adv;-fun superficies_N : N;-fun superfine_A : A;-fun superfluity_N : N;-fun superfluous_A : A;-fun superfluously_Adv : Adv;-fun superhuman_A : A;-fun superimpose_V2 : V2;-fun superintend_V : V;-fun superintend_V2 : V2;-fun superintendence_N : N;-fun superintendent_N : N;-fun superior_A : A;-fun superior_N : N;-fun superiority_N : N;-fun superlative_A : A;-fun superlative_N : N;-fun superman_N : N;-fun supermarket_N : N;-fun supernal_A : A;-fun supernatural_A : A;-fun supernaturally_Adv : Adv;-fun supernormal_A : A;-fun supernumerary_N : N;-fun superscription_N : N;-fun supersede_V2 : V2;-fun supersession_N : N;-fun supersonic_A : A;-fun superstition_N : N;-fun superstitious_A : A;-fun superstitiously_Adv : Adv;-fun superstructure_N : N;-fun supertax_N : N;-fun supervene_V : V;-fun supervise_V : V;-fun supervise_V2 : V2;-fun supervision_N : N;-fun supervisor_N : N;-fun supervisory_A : A;-fun supine_A : A;-fun supinely_Adv : Adv;-fun supper_N : N;-fun supperless_A : A;-fun supplant_V2 : V2;-fun supplanter_N : N;-fun supple_A : A;-fun supplement_N : N;-fun supplement_V2 : V2;-fun supplementary_A : A;-fun suppleness_N : N;-fun suppliant_A : A;-fun suppliant_N : N;-fun supplicant_N : N;-fun supplicate_V : V;-fun supplicate_V2 : V2;-fun supplication_N : N;-fun supplier_N : N;-fun supply_N : N;-fun supply_V2 : V2;-fun support_N : N;-fun support_V2 : V2;-fun supportable_A : A;-fun supporter_N : N;-fun suppose_V2 : V2;-fun supposed_A : A;-fun supposedly_Adv : Adv;-fun supposition_N : N;-fun suppository_N : N;-fun suppress_V2 : V2;-fun suppression_N : N;-fun suppressive_A : A;-fun suppressor_N : N;-fun suppurate_V : V;-fun suppuration_N : N;-fun supra_Adv : Adv;-fun supranational_A : A;-fun supremacy_N : N;-fun supreme_A : A;-fun supremely_Adv : Adv;-fun supt_PN : PN;-fun surabaja_PN : PN;-fun surcharge_N : N;-fun surcharge_V2 : V2;-fun surd_N : N;-fun sure_A : A;-fun sure_Adv : Adv;-fun sure_footed_A : A;-fun surely_Adv : Adv;-fun sureness_N : N;-fun surety_N : N;-fun surf_N : N;-fun surface_N : N;-fun surface_V : V;-fun surface_V2 : V2;-fun surface_to_air_A : A;-fun surfboard_N : N;-fun surfboat_N : N;-fun surfeit_N : N;-fun surfeit_V2 : V2;-fun surfing_N : N;-fun surfriding_N : N;-fun surge_N : N;-fun surge_V : V;-fun surgeon_N : N;-fun surgery_N : N;-fun surgical_A : A;-fun surgically_Adv : Adv;-fun surlily_Adv : Adv;-fun surliness_N : N;-fun surly_A : A;-fun surmise_N : N;-fun surmise_V : V;-fun surmise_V2 : V2;-fun surmount_V2 : V2;-fun surmountable_A : A;-fun surname_N : N;-fun surpass_V2 : V2;-fun surpassing_A : A;-fun surpassingly_Adv : Adv;-fun surplice_N : N;-fun surpliced_A : A;-fun surplus_N : N;-fun surprise_N : N;-fun surprise_V2 : V2;-fun surprised_A : A;-fun surprisedly_Adv : Adv;-fun surprising_A : A;-fun surprisingly_Adv : Adv;-fun surrealism_N : N;-fun surrealist_N : N;-fun surrealistic_A : A;-fun surrender_N : N;-fun surrender_V : V;-fun surrender_V2 : V2;-fun surreptitious_A : A;-fun surreptitiously_Adv : Adv;-fun surrey_PN : PN;-fun surrogate_A : A;-fun surrogate_N : N;-fun surround_N : N;-fun surround_V2 : V2;-fun surrounding_A : A;-fun surtax_N : N;-fun surtax_V2 : V2;-fun surveillance_N : N;-fun survey_N : N;-fun survey_V2 : V2;-fun surveying_N : N;-fun surveyor_N : N;-fun survival_N : N;-fun survive_V : V;-fun survive_V2 : V2;-fun survivor_N : N;-fun susan_PN : PN;-fun susanna_PN : PN;-fun susceptibility_N : N;-fun susceptible_A : A;-fun susie_PN : PN;-fun suspect_A : A;-fun suspect_N : N;-fun suspect_V2 : V2;-fun suspend_V2 : V2;-fun suspender_N : N;-fun suspense_N : N;-fun suspension_N : N;-fun suspicion_N : N;-fun suspicious_A : A;-fun suspiciously_Adv : Adv;-fun suss_V2 : V2;-fun sussex_PN : PN;-fun sustain_V2 : V2;-fun sustenance_N : N;-fun suttee_N : N;-fun sutton_PN : PN;-fun sutton_at_hone_PN : PN;-fun sutton_coldfield_PN : PN;-fun sutton_in_ashfield_PN : PN;-fun suture_N : N;-fun suzanne_PN : PN;-fun suzerain_N : N;-fun suzerainty_N : N;-fun svelte_A : A;-fun sverdlovsk_PN : PN;-fun swab_N : N;-fun swab_V2 : V2;-fun swaddle_V2 : V2;-fun swadlincote_PN : PN;-fun swag_N : N;-fun swagger_A : A;-fun swagger_N : N;-fun swagger_V : V;-fun swaggerer_N : N;-fun swahili_N : N;-fun swain_N : N;-fun swallow_N : N;-fun swallow_V : V;-fun swallow_V2 : V2;-fun swallow_tailed_A : A;-fun swami_N : N;-fun swamp_N : N;-fun swamp_V2 : V2;-fun swampy_A : A;-fun swan's_down_N : N;-fun swan_N : N;-fun swan_V : V;-fun swan_song_N : N;-fun swanage_PN : PN;-fun swank_N : N;-fun swank_V : V;-fun swanky_A : A;-fun swanley_PN : PN;-fun swansea_PN : PN;-fun swap_N : N;-fun swap_V : V;-fun swap_V2 : V2;-fun sward_N : N;-fun swarm_N : N;-fun swarm_V : V;-fun swarm_V2 : V2;-fun swarthy_A : A;-fun swashbuckler_N : N;-fun swashbuckling_A : A;-fun swashbuckling_N : N;-fun swastika_N : N;-fun swat_N : N;-fun swat_V2 : V2;-fun swath_N : N;-fun swathe_N : N;-fun swathe_V2 : V2;-fun sway_N : N;-fun sway_V : V;-fun sway_V2 : V2;-fun swazi_A : A;-fun swazi_N : N;-fun swaziland_PN : PN;-fun swear_V : V;-fun swear_V2 : V2;-fun swearer_N : N;-fun swearing_N : N;-fun swearword_N : N;-fun sweat_N : N;-fun sweat_V : V;-fun sweat_V2 : V2;-fun sweatband_N : N;-fun sweater_N : N;-fun sweatshop_N : N;-fun sweaty_A : A;-fun swede_A : A;-fun swede_N : N;-fun sweden_PN : PN;-fun swedish_A : A;-fun swedish_N : N;-fun sweep_N : N;-fun sweep_V : V;-fun sweep_V2 : V2;-fun sweeper_N : N;-fun sweeping_A : A;-fun sweeping_N : N;-fun sweepingly_Adv : Adv;-fun sweet_A : A;-fun sweet_N : N;-fun sweet_scented_A : A;-fun sweetbread_N : N;-fun sweetbriar_N : N;-fun sweetbrier_N : N;-fun sweeten_V : V;-fun sweeten_V2 : V2;-fun sweetening_N : N;-fun sweetheart_N : N;-fun sweetie_N : N;-fun sweetish_A : A;-fun sweetly_Adv : Adv;-fun sweetmeat_N : N;-fun sweetness_N : N;-fun swell_A : A;-fun swell_N : N;-fun swell_V : V;-fun swell_V2 : V2;-fun swelling_N : N;-fun swelter_V : V;-fun sweptback_A : A;-fun swerve_N : N;-fun swerve_V : V;-fun swerve_V2 : V2;-fun swift_A : A;-fun swift_N : N;-fun swiftly_Adv : Adv;-fun swiftness_N : N;-fun swig_N : N;-fun swig_V : V;-fun swig_V2 : V2;-fun swill_N : N;-fun swill_V : V;-fun swill_V2 : V2;-fun swim_N : N;-fun swim_V : V;-fun swim_V2 : V2;-fun swimmer_N : N;-fun swimming_N : N;-fun swimming_bath_N : N;-fun swimming_costume_N : N;-fun swimming_pool_N : N;-fun swimmingly_Adv : Adv;-fun swimsuit_N : N;-fun swindle_N : N;-fun swindle_V : V;-fun swindle_V2 : V2;-fun swindler_N : N;-fun swindon_PN : PN;-fun swine_N : N;-fun swineherd_N : N;-fun swing_N : N;-fun swing_V : V;-fun swing_V2 : V2;-fun swinge_V2 : V2;-fun swingeing_A : A;-fun swinging_A : A;-fun swinish_A : A;-fun swinton_PN : PN;-fun swipe_N : N;-fun swipe_V2 : V2;-fun swirl_N : N;-fun swirl_V : V;-fun swirl_V2 : V2;-fun swish_A : A;-fun swish_N : N;-fun swish_V : V;-fun swish_V2 : V2;-fun swiss_A : A;-fun swiss_N : N;-fun switch_N : N;-fun switch_V : V;-fun switch_V2 : V2;-fun switchboard_N : N;-fun switchman_N : N;-fun switzerland_PN : PN;-fun swivel_N : N;-fun swivel_V : V;-fun swivel_V2 : V2;-fun swiz_N : N;-fun swizzle_N : N;-fun swizzle_stick_N : N;-fun swob_N : N;-fun swob_V2 : V2;-fun swollen_headed_A : A;-fun swoon_N : N;-fun swoon_V : V;-fun swoop_N : N;-fun swoop_V : V;-fun swoop_V2 : V2;-fun swop_N : N;-fun swop_V : V;-fun swop_V2 : V2;-fun sword_N : N;-fun sword_cane_N : N;-fun sword_cut_N : N;-fun sword_dance_N : N;-fun swordfish_N : N;-fun swordplay_N : N;-fun swordsman_N : N;-fun swordsmanship_N : N;-fun swordstick_N : N;-fun sworn_A : A;-fun swot_N : N;-fun swot_V : V;-fun swot_V2 : V2;-fun sybarite_N : N;-fun sybaritic_A : A;-fun sycamore_N : N;-fun sycophancy_N : N;-fun sycophant_N : N;-fun sycophantic_A : A;-fun sydney_PN : PN;-fun syllabary_N : N;-fun syllabic_A : A;-fun syllabicate_V2 : V2;-fun syllabication_N : N;-fun syllabification_N : N;-fun syllabify_V2 : V2;-fun syllabize_V2 : V2;-fun syllable_N : N;-fun syllabled_A : A;-fun syllabus_N : N;-fun syllogism_N : N;-fun syllogistic_A : A;-fun sylph_N : N;-fun sylph_like_A : A;-fun sylvan_A : A;-fun sylvia_PN : PN;-fun symbiosis_N : N;-fun symbol_N : N;-fun symbolic_A : A;-fun symbolical_A : A;-fun symbolically_Adv : Adv;-fun symbolism_N : N;-fun symbolization_N : N;-fun symbolize_V2 : V2;-fun symmetric_A : A;-fun symmetrical_A : A;-fun symmetrically_Adv : Adv;-fun symmetry_N : N;-fun sympathetic_A : A;-fun sympathetically_Adv : Adv;-fun sympathize_V : V;-fun sympathizer_N : N;-fun sympathy_N : N;-fun symphonic_A : A;-fun symphony_N : N;-fun symposium_N : N;-fun symptom_N : N;-fun symptomatic_A : A;-fun symptomatically_Adv : Adv;-fun symptomless_A : A;-fun synagogue_N : N;-fun synchroflash_N : N;-fun synchromesh_N : N;-fun synchronization_N : N;-fun synchronize_V : V;-fun synchronize_V2 : V2;-fun synchronous_A : A;-fun synchronously_Adv : Adv;-fun synchrony_N : N;-fun synchrotron_N : N;-fun syncopate_V2 : V2;-fun syncopation_N : N;-fun syncope_N : N;-fun syndic_N : N;-fun syndicalism_N : N;-fun syndicalist_N : N;-fun syndicate_N : N;-fun syndicate_V2 : V2;-fun syndication_N : N;-fun syndrome_N : N;-fun synod_N : N;-fun synonym_N : N;-fun synonymous_A : A;-fun synopsis_N : N;-fun synoptic_A : A;-fun synoptically_Adv : Adv;-fun syntactic_A : A;-fun syntactically_Adv : Adv;-fun syntax_N : N;-fun synthesis_N : N;-fun synthesize_V2 : V2;-fun synthetic_A : A;-fun synthetic_N : N;-fun synthetically_Adv : Adv;-fun syphilis_N : N;-fun syphilitic_A : A;-fun syphilitic_N : N;-fun syphon_N : N;-fun syphon_V : V;-fun syphon_V2 : V2;-fun syracuse_PN : PN;-fun syria_PN : PN;-fun syrian_A : A;-fun syrian_N : N;-fun syringa_N : N;-fun syringe_N : N;-fun syringe_V2 : V2;-fun syrup_N : N;-fun syrupy_A : A;-fun system_N : N;-fun systematic_A : A;-fun systematically_Adv : Adv;-fun systematization_N : N;-fun systematize_V2 : V2;-fun syston_PN : PN;-fun seance_N : N;-fun t_junction_N : N;-fun t_shirt_N : N;-fun t_square_N : N;-fun tab_N : N;-fun tabard_N : N;-fun tabby_A : A;-fun tabby_N : N;-fun tabby_cat_N : N;-fun tabernacle_N : N;-fun table_N : N;-fun table_V2 : V2;-fun table_d'hote_A : A;-fun table_d'hote_Adv : Adv;-fun table_knife_N : N;-fun table_lifting_N : N;-fun table_linen_N : N;-fun table_rapping_N : N;-fun table_talk_N : N;-fun table_turning_N : N;-fun tableau_N : N;-fun tableau_vivant_N : N;-fun tablecloth_N : N;-fun tablemat_N : N;-fun tablespoon_N : N;-fun tablespoonful_N : N;-fun tablet_N : N;-fun tableware_N : N;-fun tabloid_N : N;-fun taboo_A : A;-fun taboo_N : N;-fun taboo_V2 : V2;-fun tabor_N : N;-fun tabular_A : A;-fun tabulate_V2 : V2;-fun tabulation_N : N;-fun tabulator_N : N;-fun tachograph_N : N;-fun tacit_A : A;-fun tacitly_Adv : Adv;-fun taciturn_A : A;-fun taciturnity_N : N;-fun taciturnly_Adv : Adv;-fun tack_N : N;-fun tack_V : V;-fun tack_V2 : V2;-fun tackle_N : N;-fun tackle_V : V;-fun tackle_V2 : V2;-fun tacky_A : A;-fun tact_N : N;-fun tactful_A : A;-fun tactfully_Adv : Adv;-fun tactic_N : N;-fun tactical_A : A;-fun tactically_Adv : Adv;-fun tactician_N : N;-fun tactile_A : A;-fun tactless_A : A;-fun tactlessly_Adv : Adv;-fun tactlessness_N : N;-fun tactual_A : A;-fun tadley_PN : PN;-fun tadpole_N : N;-fun taegu_PN : PN;-fun taffeta_N : N;-fun taffrail_N : N;-fun taffy_N : N;-fun tag_N : N;-fun tag_V : V;-fun tag_V2 : V2;-fun tahiti_PN : PN;-fun tahitian_A : A;-fun tahitian_N : N;-fun tail_N : N;-fun tail_V : V;-fun tail_V2 : V2;-fun tail_coat_N : N;-fun tail_end_N : N;-fun tail_light_N : N;-fun tailboard_N : N;-fun tailed_A : A;-fun tailgate_N : N;-fun tailless_A : A;-fun tailor_N : N;-fun tailor_V2 : V2;-fun tailor_made_A : A;-fun tailpiece_N : N;-fun tailplane_N : N;-fun tailspin_N : N;-fun taint_N : N;-fun taint_V : V;-fun taint_V2 : V2;-fun taintless_A : A;-fun taipei_PN : PN;-fun taiwan_PN : PN;-fun taiwanese_A : A;-fun taiwanese_N : N;-fun taiyuan_PN : PN;-fun take_N : N;-fun take_V : V;-fun take_V2 : V2;-fun take_home_A : A;-fun take_off_N : N;-fun take_up_N : N;-fun takeaway_A : A;-fun takeover_N : N;-fun taker_N : N;-fun taking_A : A;-fun talc_N : N;-fun talcum_N : N;-fun tale_N : N;-fun tale_bearer_N : N;-fun tale_teller_N : N;-fun talent_N : N;-fun talented_A : A;-fun talisman_N : N;-fun talk_N : N;-fun talk_V : V;-fun talk_V2 : V2;-fun talkative_A : A;-fun talker_N : N;-fun talkie_N : N;-fun talking_point_N : N;-fun talking_to_N : N;-fun tall_A : A;-fun tallboy_N : N;-fun tallish_A : A;-fun tallow_N : N;-fun tally_N : N;-fun tally_V : V;-fun tally_clerk_N : N;-fun tallyman_N : N;-fun talmud_N : N;-fun talon_N : N;-fun talus_N : N;-fun tam_o'_shanter_N : N;-fun tamable_A : A;-fun tamale_N : N;-fun tamarind_N : N;-fun tamarisk_N : N;-fun tambour_N : N;-fun tambourine_N : N;-fun tame_A : A;-fun tame_V2 : V2;-fun tamely_Adv : Adv;-fun tameness_N : N;-fun tamer_N : N;-fun tamil_A : A;-fun tamil_N : N;-fun tammany_N : N;-fun tammy_N : N;-fun tamp_V2 : V2;-fun tamper_V : V;-fun tampere_PN : PN;-fun tamworth_PN : PN;-fun tan_A : A;-fun tan_N : N;-fun tan_V : V;-fun tan_V2 : V2;-fun tandem_Adv : Adv;-fun tandem_N : N;-fun tang_N : N;-fun tangent_N : N;-fun tangerine_A : A;-fun tangerine_N : N;-fun tangibility_N : N;-fun tangible_A : A;-fun tangibly_Adv : Adv;-fun tangle_N : N;-fun tangle_V : V;-fun tangle_V2 : V2;-fun tango_N : N;-fun tangshan_PN : PN;-fun tangy_A : A;-fun tank_N : N;-fun tank_V : V;-fun tank_car_N : N;-fun tankard_N : N;-fun tanker_N : N;-fun tanner_N : N;-fun tannery_N : N;-fun tannic_A : A;-fun tannin_N : N;-fun tannoy_N : N;-fun tansy_N : N;-fun tantalize_V2 : V2;-fun tantamount_A : A;-fun tantrum_N : N;-fun tanzania_PN : PN;-fun tanzanian_A : A;-fun tanzanian_N : N;-fun tap_N : N;-fun tap_V : V;-fun tap_V2 : V2;-fun tap_dancing_N : N;-fun tape_N : N;-fun tape_V2 : V2;-fun tape_measure_N : N;-fun tape_recorder_N : N;-fun taper_N : N;-fun taper_V : V;-fun taper_V2 : V2;-fun tapestried_A : A;-fun tapestry_N : N;-fun tapeworm_N : N;-fun tapioca_N : N;-fun tapir_N : N;-fun taproom_N : N;-fun taproot_N : N;-fun tapster_N : N;-fun tar_N : N;-fun tar_V2 : V2;-fun tar_macadam_N : N;-fun taradiddle_N : N;-fun taranaki_PN : PN;-fun tarantella_N : N;-fun tarantelle_N : N;-fun taranto_PN : PN;-fun tarantula_N : N;-fun tarboosh_N : N;-fun tardily_Adv : Adv;-fun tardiness_N : N;-fun tardy_A : A;-fun tare_N : N;-fun target_N : N;-fun tariff_N : N;-fun tarmac_N : N;-fun tarmac_V2 : V2;-fun tarn_N : N;-fun tarnish_N : N;-fun tarnish_V : V;-fun tarnish_V2 : V2;-fun taro_N : N;-fun tarpaulin_N : N;-fun tarpon_N : N;-fun tarradiddle_N : N;-fun tarragon_N : N;-fun tarrasa_PN : PN;-fun tarry_A : A;-fun tarry_V : V;-fun tarsal_A : A;-fun tarsal_N : N;-fun tarsus_N : N;-fun tart_A : A;-fun tart_N : N;-fun tart_V2 : V2;-fun tartan_N : N;-fun tartar_N : N;-fun tartaric_A : A;-fun tartly_Adv : Adv;-fun tartness_N : N;-fun tashkent_PN : PN;-fun task_N : N;-fun task_V2 : V2;-fun task_force_N : N;-fun taskmaster_N : N;-fun tasmania_PN : PN;-fun tassel_N : N;-fun tasseled_A : A;-fun tasselled_A : A;-fun taste_N : N;-fun taste_V : V;-fun taste_V2 : V2;-fun tasteful_A : A;-fun tastefully_Adv : Adv;-fun tasteless_A : A;-fun tastelessly_Adv : Adv;-fun taster_N : N;-fun tastily_Adv : Adv;-fun tasty_A : A;-fun tat_N : N;-fun tat_V : V;-fun tat_V2 : V2;-fun tatter_N : N;-fun tatterdemalion_N : N;-fun tattered_A : A;-fun tattily_Adv : Adv;-fun tatting_N : N;-fun tattle_N : N;-fun tattle_V : V;-fun tattle_V2 : V2;-fun tattler_N : N;-fun tattoo_N : N;-fun tattoo_V2 : V2;-fun tatty_A : A;-fun taunt_N : N;-fun taunt_V2 : V2;-fun tauntingly_Adv : Adv;-fun taunton_PN : PN;-fun taurus_PN : PN;-fun taut_A : A;-fun tautly_Adv : Adv;-fun tautness_N : N;-fun tautological_A : A;-fun tautology_N : N;-fun taverham_PN : PN;-fun tavern_N : N;-fun tavistock_PN : PN;-fun tawdrily_Adv : Adv;-fun tawdriness_N : N;-fun tawdry_A : A;-fun tawny_A : A;-fun tawse_N : N;-fun tax_N : N;-fun tax_V2 : V2;-fun tax_collector_N : N;-fun tax_free_A : A;-fun taxability_N : N;-fun taxable_A : A;-fun taxation_N : N;-fun taxi_N : N;-fun taxi_V : V;-fun taxi_V2 : V2;-fun taxicab_N : N;-fun taxidermist_N : N;-fun taxidermy_N : N;-fun taximeter_N : N;-fun taxonomy_N : N;-fun taxpayer_N : N;-fun tayside_PN : PN;-fun tb_N : N;-fun tbilisi_PN : PN;-fun te_deum_N : N;-fun tea_N : N;-fun tea_bag_N : N;-fun tea_break_N : N;-fun tea_caddy_N : N;-fun tea_chest_N : N;-fun tea_cloth_N : N;-fun tea_cosy_N : N;-fun tea_garden_N : N;-fun tea_kettle_N : N;-fun tea_leaf_N : N;-fun tea_party_N : N;-fun tea_service_N : N;-fun tea_set_N : N;-fun tea_strainer_N : N;-fun tea_table_N : N;-fun tea_time_N : N;-fun tea_towel_N : N;-fun tea_tray_N : N;-fun tea_trolley_N : N;-fun tea_urn_N : N;-fun tea_wagon_N : N;-fun teacake_N : N;-fun teach_V : V;-fun teach_V2 : V2;-fun teach_in_N : N;-fun teachable_A : A;-fun teacher_N : N;-fun teaching_N : N;-fun teacup_N : N;-fun teahouse_N : N;-fun teak_N : N;-fun teal_N : N;-fun team_N : N;-fun team_V : V;-fun teamster_N : N;-fun teamwork_N : N;-fun teapot_N : N;-fun tear_N : N;-fun tear_V : V;-fun tear_V2 : V2;-fun tear_drop_N : N;-fun tear_gas_N : N;-fun tearaway_A : A;-fun tearaway_N : N;-fun tearful_A : A;-fun tearfully_Adv : Adv;-fun tearing_A : A;-fun tearing_N : N;-fun tearless_A : A;-fun tearoom_N : N;-fun tease_N : N;-fun tease_V2 : V2;-fun teasel_N : N;-fun teaser_N : N;-fun teashop_N : N;-fun teasingly_Adv : Adv;-fun teaspoon_N : N;-fun teaspoonful_N : N;-fun teat_N : N;-fun teazel_N : N;-fun teazle_N : N;-fun tec_N : N;-fun tech_N : N;-fun technical_A : A;-fun technicality_N : N;-fun technically_Adv : Adv;-fun technician_N : N;-fun technicolor_N : N;-fun technique_N : N;-fun technocracy_N : N;-fun technocrat_N : N;-fun technological_A : A;-fun technologist_N : N;-fun technology_N : N;-fun techy_A : A;-fun ted_N : N;-fun ted_PN : PN;-fun teddy_N : N;-fun teddy_PN : PN;-fun teddy_boy_N : N;-fun tedious_A : A;-fun tediously_Adv : Adv;-fun tediousness_N : N;-fun tedium_N : N;-fun tee_N : N;-fun tee_V : V;-fun tee_V2 : V2;-fun tee_shirt_N : N;-fun teem_V : V;-fun teenage_A : A;-fun teenager_N : N;-fun teeny_A : A;-fun teesside_PN : PN;-fun teeter_V : V;-fun teethe_V : V;-fun teetotal_A : A;-fun teetotaller_N : N;-fun teetotum_N : N;-fun teg_N : N;-fun tegument_N : N;-fun teheran_PN : PN;-fun teignmouth_PN : PN;-fun tel_PN : PN;-fun tel_aviv_PN : PN;-fun telecast_N : N;-fun telecast_V2 : V2;-fun telecommunication_N : N;-fun telegram_N : N;-fun telegraph_N : N;-fun telegraph_V : V;-fun telegraph_V2 : V2;-fun telegraph_line_N : N;-fun telegraph_pole_N : N;-fun telegraph_post_N : N;-fun telegraph_wire_N : N;-fun telegrapher_N : N;-fun telegraphese_N : N;-fun telegraphic_A : A;-fun telegraphically_Adv : Adv;-fun telegraphist_N : N;-fun telegraphy_N : N;-fun telemetry_N : N;-fun teleological_A : A;-fun teleologist_N : N;-fun teleology_N : N;-fun telepathic_A : A;-fun telepathist_N : N;-fun telepathy_N : N;-fun telephone_N : N;-fun telephone_V : V;-fun telephone_V2 : V2;-fun telephonic_A : A;-fun telephonist_N : N;-fun telephony_N : N;-fun telephoto_N : N;-fun telephotograph_N : N;-fun telephotography_N : N;-fun teleprinter_N : N;-fun teleprompter_N : N;-fun telescope_N : N;-fun telescope_V : V;-fun telescope_V2 : V2;-fun telescopic_A : A;-fun telescopically_Adv : Adv;-fun teletypewriter_N : N;-fun televise_V2 : V2;-fun television_N : N;-fun telex_N : N;-fun telfer_N : N;-fun telford_PN : PN;-fun tell_V : V;-fun tell_V2 : V2;-fun teller_N : N;-fun telling_A : A;-fun tellingly_Adv : Adv;-fun telltale_N : N;-fun telly_N : N;-fun telpher_N : N;-fun telstar_PN : PN;-fun temerity_N : N;-fun temp_N : N;-fun temper_N : N;-fun temper_V : V;-fun temper_V2 : V2;-fun tempera_N : N;-fun temperament_N : N;-fun temperamental_A : A;-fun temperamentally_Adv : Adv;-fun temperance_N : N;-fun temperate_A : A;-fun temperately_Adv : Adv;-fun temperateness_N : N;-fun temperature_N : N;-fun tempered_A : A;-fun tempest_N : N;-fun tempest_swept_A : A;-fun tempest_tossed_A : A;-fun tempestuous_A : A;-fun template_N : N;-fun temple_N : N;-fun templet_N : N;-fun tempo_N : N;-fun temporal_A : A;-fun temporality_N : N;-fun temporalty_N : N;-fun temporarily_Adv : Adv;-fun temporariness_N : N;-fun temporary_A : A;-fun temporize_V : V;-fun tempt_V2 : V2;-fun temptation_N : N;-fun tempter_N : N;-fun temptingly_Adv : Adv;-fun temptress_N : N;-fun tenability_N : N;-fun tenable_A : A;-fun tenacious_A : A;-fun tenaciously_Adv : Adv;-fun tenaciousness_N : N;-fun tenacity_N : N;-fun tenancy_N : N;-fun tenant_N : N;-fun tenant_V2 : V2;-fun tenantry_N : N;-fun tenby_PN : PN;-fun tench_N : N;-fun tend_V : V;-fun tend_V2 : V2;-fun tendency_N : N;-fun tendentious_A : A;-fun tendentiously_Adv : Adv;-fun tendentiousness_N : N;-fun tender_A : A;-fun tender_N : N;-fun tender_V : V;-fun tender_V2 : V2;-fun tenderfoot_N : N;-fun tenderhearted_A : A;-fun tenderloin_N : N;-fun tenderly_Adv : Adv;-fun tenderness_N : N;-fun tendon_N : N;-fun tendril_N : N;-fun tenement_N : N;-fun tenement_house_N : N;-fun tenet_N : N;-fun tenfold_Adv : Adv;-fun tenner_N : N;-fun tennessee_PN : PN;-fun tennis_N : N;-fun tennis_court_N : N;-fun tennis_elbow_N : N;-fun tenon_N : N;-fun tenor_N : N;-fun tenpence_N : N;-fun tenpin_N : N;-fun tense_A : A;-fun tense_N : N;-fun tense_V : V;-fun tense_V2 : V2;-fun tensely_Adv : Adv;-fun tenseness_N : N;-fun tensile_A : A;-fun tension_N : N;-fun tensity_N : N;-fun tent_N : N;-fun tent_peg_N : N;-fun tentacle_N : N;-fun tentative_A : A;-fun tentatively_Adv : Adv;-fun tenterden_PN : PN;-fun tenth_A : A;-fun tenth_N : N;-fun tenthly_Adv : Adv;-fun tenuity_N : N;-fun tenuous_A : A;-fun tenuously_Adv : Adv;-fun tenure_N : N;-fun tepee_N : N;-fun tepid_A : A;-fun tepidity_N : N;-fun tepidly_Adv : Adv;-fun tepidness_N : N;-fun tercentenary_N : N;-fun tercentennial_N : N;-fun terence_PN : PN;-fun teresa_PN : PN;-fun tergiversate_V : V;-fun tergiversation_N : N;-fun term_N : N;-fun term_V2 : V2;-fun termagant_N : N;-fun termi_PN : PN;-fun terminable_A : A;-fun terminal_A : A;-fun terminal_N : N;-fun terminally_Adv : Adv;-fun terminate_V : V;-fun terminate_V2 : V2;-fun termination_N : N;-fun terminological_A : A;-fun terminology_N : N;-fun terminus_N : N;-fun termite_N : N;-fun tern_N : N;-fun terpsichorean_A : A;-fun terr_PN : PN;-fun terra_cotta_N : N;-fun terra_firma_N : N;-fun terra_incognita_N : N;-fun terrace_N : N;-fun terrace_V2 : V2;-fun terrain_N : N;-fun terrapin_N : N;-fun terrestrial_A : A;-fun terrible_A : A;-fun terribly_Adv : Adv;-fun terrier_N : N;-fun terrific_A : A;-fun terrifically_Adv : Adv;-fun terrify_V2 : V2;-fun territorial_A : A;-fun territorial_N : N;-fun territory_N : N;-fun terror_N : N;-fun terror_stricken_A : A;-fun terror_struck_A : A;-fun terrorism_N : N;-fun terrorist_N : N;-fun terrorize_V2 : V2;-fun terry_PN : PN;-fun terse_A : A;-fun tersely_Adv : Adv;-fun terseness_N : N;-fun tertian_A : A;-fun tertiary_A : A;-fun terylene_N : N;-fun tess_PN : PN;-fun tessa_PN : PN;-fun tessellated_A : A;-fun test_N : N;-fun test_V2 : V2;-fun test_drive_N : N;-fun test_drive_V2 : V2;-fun test_tube_N : N;-fun testament_N : N;-fun testamentary_A : A;-fun testate_A : A;-fun testate_N : N;-fun testator_N : N;-fun testatrix_N : N;-fun testbed_N : N;-fun testicle_N : N;-fun testify_V : V;-fun testify_V2 : V2;-fun testily_Adv : Adv;-fun testimonial_N : N;-fun testimony_N : N;-fun testiness_N : N;-fun testis_N : N;-fun testy_A : A;-fun tetanus_N : N;-fun tetchily_Adv : Adv;-fun tetchiness_N : N;-fun tetchy_A : A;-fun tether_N : N;-fun tether_V2 : V2;-fun teuton_N : N;-fun teutonic_A : A;-fun tewkesbury_PN : PN;-fun texan_A : A;-fun texan_N : N;-fun texas_PN : PN;-fun text_N : N;-fun textbook_N : N;-fun textile_A : A;-fun textile_N : N;-fun textual_A : A;-fun texture_N : N;-fun textured_A : A;-fun thai_A : A;-fun thai_N : N;-fun thailand_PN : PN;-fun thalidomide_N : N;-fun thame_PN : PN;-fun thane_N : N;-fun thank_V2 : V2;-fun thank_offering_N : N;-fun thankful_A : A;-fun thankfully_Adv : Adv;-fun thankfulness_N : N;-fun thankless_A : A;-fun thanksgiving_N : N;-fun thatch_N : N;-fun thatch_V2 : V2;-fun thatcham_PN : PN;-fun thatcher_N : N;-fun thaw_N : N;-fun thaw_V : V;-fun thaw_V2 : V2;-fun theatre_N : N;-fun theatregoer_N : N;-fun theatrical_A : A;-fun theatrical_N : N;-fun theatrically_Adv : Adv;-fun theft_N : N;-fun theism_N : N;-fun theist_N : N;-fun theistic_A : A;-fun theistical_A : A;-fun thematic_A : A;-fun theme_N : N;-fun then_Adv : Adv;-fun thence_Adv : Adv;-fun thenceforth_Adv : Adv;-fun thenceforward_Adv : Adv;-fun theo_PN : PN;-fun theocracy_N : N;-fun theocratic_A : A;-fun theodolite_N : N;-fun theodore_PN : PN;-fun theologian_N : N;-fun theological_A : A;-fun theologically_Adv : Adv;-fun theology_N : N;-fun theorem_N : N;-fun theoretic_A : A;-fun theoretical_A : A;-fun theoretically_Adv : Adv;-fun theoretician_N : N;-fun theorist_N : N;-fun theorize_V : V;-fun theory_N : N;-fun theosophical_A : A;-fun theosophist_N : N;-fun theosophy_N : N;-fun therapeutic_A : A;-fun therapeutical_A : A;-fun therapeutics_N : N;-fun therapist_N : N;-fun therapy_N : N;-fun thereabout_Adv : Adv;-fun thereabouts_Adv : Adv;-fun thereafter_Adv : Adv;-fun thereby_Adv : Adv;-fun therefore_Adv : Adv;-fun therefrom_Adv : Adv;-fun therein_Adv : Adv;-fun thereinafter_Adv : Adv;-fun thereof_Adv : Adv;-fun thereon_Adv : Adv;-fun theresa_PN : PN;-fun thereto_Adv : Adv;-fun thereunder_Adv : Adv;-fun thereupon_Adv : Adv;-fun therewith_Adv : Adv;-fun therewithal_Adv : Adv;-fun therm_N : N;-fun thermal_A : A;-fun thermal_N : N;-fun thermally_Adv : Adv;-fun thermionic_A : A;-fun thermodynamics_N : N;-fun thermometer_N : N;-fun thermonuclear_A : A;-fun thermoplastic_A : A;-fun thermoplastic_N : N;-fun thermos_N : N;-fun thermosetting_A : A;-fun thermostat_N : N;-fun thermostatic_A : A;-fun thermostatically_Adv : Adv;-fun thesaurus_N : N;-fun thesis_N : N;-fun thespian_A : A;-fun thespian_N : N;-fun thessaloniki_PN : PN;-fun thetford_PN : PN;-fun thick_A : A;-fun thick_Adv : Adv;-fun thick_N : N;-fun thick_headed_A : A;-fun thick_set_A : A;-fun thick_skinned_A : A;-fun thicken_V : V;-fun thicken_V2 : V2;-fun thickening_N : N;-fun thicket_N : N;-fun thickly_Adv : Adv;-fun thickness_N : N;-fun thief_N : N;-fun thieve_V : V;-fun thieve_V2 : V2;-fun thievery_N : N;-fun thievish_A : A;-fun thievishly_Adv : Adv;-fun thigh_N : N;-fun thighbone_N : N;-fun thimble_N : N;-fun thimbleful_N : N;-fun thin_A : A;-fun thin_Adv : Adv;-fun thin_V : V;-fun thin_V2 : V2;-fun thin_skinned_A : A;-fun thine_A : A;-fun thing_N : N;-fun thingmabob_N : N;-fun thingmajig_N : N;-fun thingumabob_N : N;-fun thingumajig_N : N;-fun thingummy_N : N;-fun think_N : N;-fun think_V : V;-fun think_V2 : V2;-fun think_tank_N : N;-fun thinkable_A : A;-fun thinker_N : N;-fun thinking_A : A;-fun thinking_N : N;-fun thinly_Adv : Adv;-fun thinness_N : N;-fun thionville_PN : PN;-fun third_rate_A : A;-fun third_rater_N : N;-fun thirdly_Adv : Adv;-fun thirsk_PN : PN;-fun thirst_N : N;-fun thirst_V2 : V2;-fun thirstily_Adv : Adv;-fun thirsty_A : A;-fun thistle_N : N;-fun thistledown_N : N;-fun thither_Adv : Adv;-fun tho'_Adv : Adv;-fun thole_N : N;-fun tholepin_N : N;-fun thomas_PN : PN;-fun thong_N : N;-fun thorax_N : N;-fun thorn_N : N;-fun thornbury_PN : PN;-fun thorne_PN : PN;-fun thorny_A : A;-fun thorough_A : A;-fun thoroughbred_A : A;-fun thoroughbred_N : N;-fun thoroughfare_N : N;-fun thoroughgoing_A : A;-fun thoroughly_Adv : Adv;-fun thoroughness_N : N;-fun though_Adv : Adv;-fun thought_N : N;-fun thought_reader_N : N;-fun thoughtful_A : A;-fun thoughtfully_Adv : Adv;-fun thoughtfulness_N : N;-fun thoughtless_A : A;-fun thoughtlessly_Adv : Adv;-fun thoughtlessness_N : N;-fun thousandfold_A : A;-fun thousandfold_Adv : Adv;-fun thousandth_A : A;-fun thousandth_N : N;-fun thraldom_N : N;-fun thrall_N : N;-fun thrash_V : V;-fun thrash_V2 : V2;-fun thrashing_N : N;-fun thread_N : N;-fun thread_V2 : V2;-fun threadbare_A : A;-fun threadlike_A : A;-fun threat_N : N;-fun threaten_V : V;-fun threaten_V2 : V2;-fun threateningly_Adv : Adv;-fun three_cornered_A : A;-fun three_d_A : A;-fun three_d_N : N;-fun three_decker_N : N;-fun three_dimensional_A : A;-fun three_figure_A : A;-fun three_funnelled_A : A;-fun three_lane_A : A;-fun three_legged_A : A;-fun three_piece_A : A;-fun three_ply_A : A;-fun three_quarter_A : A;-fun three_quarter_N : N;-fun three_score_A : A;-fun three_score_N : N;-fun three_storey_A : A;-fun three_storeyed_A : A;-fun three_wheeled_A : A;-fun threefold_A : A;-fun threefold_Adv : Adv;-fun threepence_N : N;-fun threepenny_A : A;-fun threesome_N : N;-fun threnody_N : N;-fun thresh_V : V;-fun thresh_V2 : V2;-fun thresher_N : N;-fun threshing_floor_N : N;-fun threshing_machine_N : N;-fun threshold_N : N;-fun thrice_Adv : Adv;-fun thrift_N : N;-fun thriftily_Adv : Adv;-fun thriftless_A : A;-fun thriftlessly_Adv : Adv;-fun thriftlessness_N : N;-fun thrifty_A : A;-fun thrill_N : N;-fun thrill_V : V;-fun thrill_V2 : V2;-fun thriller_N : N;-fun thrive_V : V;-fun throat_N : N;-fun throated_A : A;-fun throaty_A : A;-fun throb_N : N;-fun throb_V : V;-fun throbbing_A : A;-fun throe_N : N;-fun thrombosis_N : N;-fun throne_N : N;-fun throng_N : N;-fun throng_V : V;-fun throng_V2 : V2;-fun throstle_N : N;-fun throttle_N : N;-fun throttle_V : V;-fun throttle_V2 : V2;-fun throttle_valve_N : N;-fun through_Adv : Adv;-fun throughout_Adv : Adv;-fun throughput_N : N;-fun throughway_N : N;-fun throw_N : N;-fun throw_V : V;-fun throw_V2 : V2;-fun throw_in_N : N;-fun throwaway_N : N;-fun throwback_N : N;-fun thrum_V : V;-fun thrum_V2 : V2;-fun thrush_N : N;-fun thrust_N : N;-fun thrust_V : V;-fun thrust_V2 : V2;-fun thruster_N : N;-fun thud_N : N;-fun thud_V : V;-fun thug_N : N;-fun thuggery_N : N;-fun thumb_N : N;-fun thumb_V2 : V2;-fun thumbnut_N : N;-fun thumbscrew_N : N;-fun thumbstall_N : N;-fun thumbtack_N : N;-fun thump_N : N;-fun thump_V : V;-fun thump_V2 : V2;-fun thumping_A : A;-fun thunder_N : N;-fun thunder_V : V;-fun thunder_V2 : V2;-fun thunderbolt_N : N;-fun thunderclap_N : N;-fun thunderous_A : A;-fun thunderstorm_N : N;-fun thunderstruck_A : A;-fun thundery_A : A;-fun thurcroft_PN : PN;-fun thurible_N : N;-fun thurmaston_PN : PN;-fun thurrock_PN : PN;-fun thurs_PN : PN;-fun thursday_N : N;-fun thursday_PN : PN;-fun thurso_PN : PN;-fun thus_Adv : Adv;-fun thwack_N : N;-fun thwack_V2 : V2;-fun thwart_N : N;-fun thwart_V2 : V2;-fun thy_A : A;-fun thyme_N : N;-fun thyroid_N : N;-fun ti_N : N;-fun tiara_N : N;-fun tibet_PN : PN;-fun tibetan_A : A;-fun tibetan_N : N;-fun tibia_N : N;-fun tic_N : N;-fun tick_N : N;-fun tick_V : V;-fun tick_V2 : V2;-fun tick_tock_N : N;-fun ticker_N : N;-fun ticker_tape_N : N;-fun ticket_N : N;-fun ticket_V2 : V2;-fun ticket_collector_N : N;-fun ticking_N : N;-fun tickle_V : V;-fun tickle_V2 : V2;-fun tickler_N : N;-fun ticklish_A : A;-fun tidal_A : A;-fun tidbit_N : N;-fun tiddler_N : N;-fun tiddley_A : A;-fun tiddlywinks_N : N;-fun tide_N : N;-fun tide_V2 : V2;-fun tidemark_N : N;-fun tideway_N : N;-fun tidily_Adv : Adv;-fun tidiness_N : N;-fun tidworth_PN : PN;-fun tidy_A : A;-fun tidy_N : N;-fun tidy_V : V;-fun tidy_V2 : V2;-fun tie_N : N;-fun tie_V : V;-fun tie_V2 : V2;-fun tie_on_A : A;-fun tie_up_N : N;-fun tientsin_PN : PN;-fun tier_N : N;-fun tiff_N : N;-fun tiger_N : N;-fun tiger_lily_N : N;-fun tigerish_A : A;-fun tight_A : A;-fun tight_Adv : Adv;-fun tight_laced_A : A;-fun tight_lipped_A : A;-fun tight_wad_N : N;-fun tighten_V : V;-fun tighten_V2 : V2;-fun tightly_Adv : Adv;-fun tightness_N : N;-fun tightrope_N : N;-fun tigress_N : N;-fun tike_N : N;-fun tilburg_PN : PN;-fun tilbury_PN : PN;-fun tilde_N : N;-fun tile_N : N;-fun tile_V2 : V2;-fun till_N : N;-fun till_V2 : V2;-fun tillage_N : N;-fun tiller_N : N;-fun tilt_N : N;-fun tilt_V : V;-fun tilt_V2 : V2;-fun tilth_N : N;-fun tiltyard_N : N;-fun tim_PN : PN;-fun timber_N : N;-fun timbered_A : A;-fun timbre_N : N;-fun timbrel_N : N;-fun time_N : N;-fun time_V2 : V2;-fun time_ball_N : N;-fun time_bomb_N : N;-fun time_expired_A : A;-fun time_exposure_N : N;-fun time_fuse_N : N;-fun time_honoured_A : A;-fun time_lag_N : N;-fun time_limit_N : N;-fun time_sheet_N : N;-fun time_signal_N : N;-fun time_switch_N : N;-fun timecard_N : N;-fun timekeeper_N : N;-fun timekeeping_N : N;-fun timeless_A : A;-fun timeliness_N : N;-fun timely_A : A;-fun timepiece_N : N;-fun timesaving_A : A;-fun timeserver_N : N;-fun timeserving_A : A;-fun timetable_N : N;-fun timework_N : N;-fun timid_A : A;-fun timidity_N : N;-fun timidly_Adv : Adv;-fun timidness_N : N;-fun timing_N : N;-fun timmy_PN : PN;-fun timorous_A : A;-fun timorously_Adv : Adv;-fun timothy_N : N;-fun timothy_PN : PN;-fun timpanist_N : N;-fun tin_N : N;-fun tin_V2 : V2;-fun tin_opener_N : N;-fun tin_pan_alley_N : N;-fun tin_plate_N : N;-fun tina_PN : PN;-fun tincture_N : N;-fun tincture_V2 : V2;-fun tinder_N : N;-fun tinderbox_N : N;-fun tine_N : N;-fun tined_A : A;-fun tinfoil_N : N;-fun ting_N : N;-fun ting_V : V;-fun ting_V2 : V2;-fun tinge_N : N;-fun tinge_V2 : V2;-fun tingle_N : N;-fun tingle_V : V;-fun tinker_N : N;-fun tinker_V : V;-fun tinkle_N : N;-fun tinkle_V : V;-fun tinkle_V2 : V2;-fun tinny_A : A;-fun tinsel_N : N;-fun tinsel_V2 : V2;-fun tinselly_A : A;-fun tinsmith_N : N;-fun tint_N : N;-fun tint_V2 : V2;-fun tintack_N : N;-fun tintinnabulation_N : N;-fun tiny_A : A;-fun tip_N : N;-fun tip_V : V;-fun tip_V2 : V2;-fun tip_and_run_A : A;-fun tip_off_N : N;-fun tip_top_A : A;-fun tip_top_Adv : Adv;-fun tip_up_A : A;-fun tipperary_PN : PN;-fun tippet_N : N;-fun tipple_N : N;-fun tipple_V : V;-fun tipple_V2 : V2;-fun tippler_N : N;-fun tipstaff_N : N;-fun tipster_N : N;-fun tipsy_A : A;-fun tiptoe_Adv : Adv;-fun tiptoe_V : V;-fun tirade_N : N;-fun tire_N : N;-fun tire_V : V;-fun tire_V2 : V2;-fun tired_A : A;-fun tiredness_N : N;-fun tireless_A : A;-fun tirelessly_Adv : Adv;-fun tiresome_A : A;-fun tiresomely_Adv : Adv;-fun tiring_Adv : Adv;-fun tiro_N : N;-fun tissue_N : N;-fun tit_N : N;-fun titan_N : N;-fun titanic_A : A;-fun titbit_N : N;-fun tithe_N : N;-fun tithe_barn_N : N;-fun titillate_V2 : V2;-fun titillation_N : N;-fun titivate_V : V;-fun titivate_V2 : V2;-fun titlark_N : N;-fun title_N : N;-fun title_deed_N : N;-fun title_page_N : N;-fun title_role_N : N;-fun titled_A : A;-fun titmouse_N : N;-fun titter_V : V;-fun tittivate_V : V;-fun tittivate_V2 : V2;-fun tittle_N : N;-fun tittle_tattle_N : N;-fun tittle_tattle_V : V;-fun titular_A : A;-fun tiverton_PN : PN;-fun tizzy_N : N;-fun tnt_N : N;-fun to_Adv : Adv;-fun to_do_N : N;-fun toad_N : N;-fun toad_in_the_hole_N : N;-fun toadstool_N : N;-fun toady_N : N;-fun toady_V : V;-fun toast_N : N;-fun toast_V : V;-fun toast_V2 : V2;-fun toaster_N : N;-fun toasting_fork_N : N;-fun toastmaster_N : N;-fun toastrack_N : N;-fun tobacco_N : N;-fun tobacconist_N : N;-fun tobago_PN : PN;-fun tobagonian_A : A;-fun tobagonian_N : N;-fun toboggan_N : N;-fun toboggan_V : V;-fun toby_PN : PN;-fun toby_jug_N : N;-fun toccata_N : N;-fun tocsin_N : N;-fun today_Adv : Adv;-fun today_N : N;-fun toddle_V : V;-fun toddler_N : N;-fun toddy_N : N;-fun todmorden_PN : PN;-fun toe_N : N;-fun toe_V2 : V2;-fun toecap_N : N;-fun toehold_N : N;-fun toenail_N : N;-fun toff_N : N;-fun toffee_N : N;-fun tog_V2 : V2;-fun toga_N : N;-fun together_Adv : Adv;-fun togetherness_N : N;-fun toggle_N : N;-fun togo_PN : PN;-fun togolese_A : A;-fun togolese_N : N;-fun toil_N : N;-fun toil_V : V;-fun toiler_N : N;-fun toilet_N : N;-fun toilet_paper_N : N;-fun toilet_powder_N : N;-fun toilet_roll_N : N;-fun toilet_table_N : N;-fun toilsome_A : A;-fun tokay_N : N;-fun token_N : N;-fun tokyo_PN : PN;-fun tolerable_A : A;-fun tolerably_Adv : Adv;-fun tolerance_N : N;-fun tolerant_A : A;-fun tolerantly_Adv : Adv;-fun tolerate_V2 : V2;-fun toleration_N : N;-fun toll_N : N;-fun toll_V : V;-fun toll_V2 : V2;-fun tollbar_N : N;-fun tollbooth_N : N;-fun tollgate_N : N;-fun tollhouse_N : N;-fun tom_PN : PN;-fun tomahawk_N : N;-fun tomahawk_V2 : V2;-fun tomato_N : N;-fun tomb_N : N;-fun tombola_N : N;-fun tomboy_N : N;-fun tombstone_N : N;-fun tomcat_N : N;-fun tome_N : N;-fun tomfool_N : N;-fun tomfoolery_N : N;-fun tommy_PN : PN;-fun tommy_gun_N : N;-fun tommy_rot_N : N;-fun tomorrow_Adv : Adv;-fun tomorrow_N : N;-fun tomtit_N : N;-fun tomtom_N : N;-fun ton_N : N;-fun ton_V : V;-fun tonal_A : A;-fun tonality_N : N;-fun tonbridge_PN : PN;-fun tone_N : N;-fun tone_V : V;-fun tone_V2 : V2;-fun tone_deaf_A : A;-fun tone_poem_N : N;-fun toned_A : A;-fun toneless_A : A;-fun tonelessly_Adv : Adv;-fun tonga_PN : PN;-fun tongan_A : A;-fun tongan_N : N;-fun tongue_N : N;-fun tongue_in_cheek_A : A;-fun tongue_in_cheek_Adv : Adv;-fun tongue_tied_A : A;-fun tongue_twister_N : N;-fun tongued_A : A;-fun tonic_A : A;-fun tonic_N : N;-fun tonic_sol_fa_N : N;-fun tonight_Adv : Adv;-fun tonight_N : N;-fun tonnage_N : N;-fun tonne_N : N;-fun tonsil_N : N;-fun tonsillitis_N : N;-fun tonsorial_A : A;-fun tonsure_N : N;-fun tonsure_V2 : V2;-fun tontine_N : N;-fun tony_PN : PN;-fun tonyrefail_PN : PN;-fun too_Adv : Adv;-fun tool_N : N;-fun tool_V2 : V2;-fun toot_N : N;-fun toot_V : V;-fun toot_V2 : V2;-fun tooth_N : N;-fun toothache_N : N;-fun toothbrush_N : N;-fun toothed_A : A;-fun toothless_A : A;-fun toothpaste_N : N;-fun toothpick_N : N;-fun toothpowder_N : N;-fun toothsome_A : A;-fun tootle_N : N;-fun tootle_V : V;-fun top_N : N;-fun top_V2 : V2;-fun top_boot_N : N;-fun top_dress_V2 : V2;-fun top_dressing_N : N;-fun top_flight_A : A;-fun top_heavy_A : A;-fun top_hole_A : A;-fun top_ranking_A : A;-fun topaz_N : N;-fun topcoat_N : N;-fun tope_V : V;-fun tope_V2 : V2;-fun toper_N : N;-fun topgallant_A : A;-fun topgallant_N : N;-fun topi_N : N;-fun topiary_N : N;-fun topic_N : N;-fun topical_A : A;-fun topically_Adv : Adv;-fun topknot_N : N;-fun topless_A : A;-fun topmast_N : N;-fun topmost_A : A;-fun topnotch_A : A;-fun topographical_A : A;-fun topographically_Adv : Adv;-fun topography_N : N;-fun topper_N : N;-fun topping_A : A;-fun toppingly_Adv : Adv;-fun topple_V : V;-fun topple_V2 : V2;-fun topsail_N : N;-fun topsy_turvy_A : A;-fun topsy_turvy_Adv : Adv;-fun topsy_turvydom_N : N;-fun toque_N : N;-fun tor_N : N;-fun torbay_PN : PN;-fun torch_N : N;-fun torch_race_N : N;-fun torch_singer_N : N;-fun torchlight_N : N;-fun toreador_N : N;-fun torino_PN : PN;-fun torment_N : N;-fun torment_V2 : V2;-fun tormentor_N : N;-fun tornado_N : N;-fun toronto_PN : PN;-fun torpedo_N : N;-fun torpedo_V2 : V2;-fun torpedo_boat_N : N;-fun torpedo_tube_N : N;-fun torpid_A : A;-fun torpidity_N : N;-fun torpidly_Adv : Adv;-fun torpidness_N : N;-fun torpor_N : N;-fun torque_N : N;-fun torrent_N : N;-fun torrential_A : A;-fun torrid_A : A;-fun torridity_N : N;-fun torsion_N : N;-fun torso_N : N;-fun tort_N : N;-fun tortilla_N : N;-fun tortoise_N : N;-fun tortoiseshell_N : N;-fun tortuous_A : A;-fun tortuously_Adv : Adv;-fun torture_N : N;-fun torture_V2 : V2;-fun torturer_N : N;-fun tory_N : N;-fun tosh_N : N;-fun toss_N : N;-fun toss_V : V;-fun toss_V2 : V2;-fun toss_up_N : N;-fun tot_N : N;-fun tot_V : V;-fun tot_V2 : V2;-fun total_A : A;-fun total_N : N;-fun total_V : V;-fun total_V2 : V2;-fun totalitarian_A : A;-fun totalitarianism_N : N;-fun totality_N : N;-fun totalizator_N : N;-fun totally_Adv : Adv;-fun tote_N : N;-fun tote_V2 : V2;-fun totem_N : N;-fun totem_pole_N : N;-fun totnes_PN : PN;-fun totter_V : V;-fun tottery_A : A;-fun toucan_N : N;-fun touch_N : N;-fun touch_V : V;-fun touch_V2 : V2;-fun touch_and_go_A : A;-fun touch_type_V : V;-fun touchable_A : A;-fun touchdown_N : N;-fun touched_A : A;-fun touchily_Adv : Adv;-fun touchiness_N : N;-fun touching_A : A;-fun touchingly_Adv : Adv;-fun touchline_N : N;-fun touchstone_N : N;-fun touchy_A : A;-fun tough_A : A;-fun tough_N : N;-fun toughen_V : V;-fun toughen_V2 : V2;-fun toughie_N : N;-fun toughly_Adv : Adv;-fun toughness_N : N;-fun toulon_PN : PN;-fun toulouse_PN : PN;-fun toupee_N : N;-fun tour_N : N;-fun tour_V : V;-fun tour_V2 : V2;-fun tour_de_force_N : N;-fun touring_A : A;-fun touring_N : N;-fun tourism_N : N;-fun tourist_N : N;-fun tournament_N : N;-fun tourney_N : N;-fun tourniquet_N : N;-fun tours_PN : PN;-fun tousle_V2 : V2;-fun tout_N : N;-fun tout_V : V;-fun tout_ensemble_Adv : Adv;-fun tout_ensemble_N : N;-fun tow_N : N;-fun tow_V2 : V2;-fun towel_N : N;-fun towel_V2 : V2;-fun towel_horse_N : N;-fun towel_rack_N : N;-fun towel_rail_N : N;-fun towelling_N : N;-fun tower_N : N;-fun tower_V : V;-fun tower_block_N : N;-fun tower_hamlets_PN : PN;-fun towering_A : A;-fun towing_line_N : N;-fun towing_path_N : N;-fun towing_rope_N : N;-fun towline_N : N;-fun town_N : N;-fun town_crier_N : N;-fun town_gas_N : N;-fun townee_N : N;-fun township_N : N;-fun townsman_N : N;-fun towpath_N : N;-fun towrope_N : N;-fun toxaemia_N : N;-fun toxic_A : A;-fun toxicity_N : N;-fun toxicologist_N : N;-fun toxicology_N : N;-fun toxin_N : N;-fun toy_N : N;-fun toy_V : V;-fun toyshop_N : N;-fun trace_N : N;-fun trace_V : V;-fun trace_V2 : V2;-fun traceable_A : A;-fun tracer_N : N;-fun tracery_N : N;-fun trachea_N : N;-fun trachoma_N : N;-fun tracing_N : N;-fun tracing_paper_N : N;-fun track_N : N;-fun track_V2 : V2;-fun tracked_A : A;-fun tracker_N : N;-fun trackless_A : A;-fun tract_N : N;-fun tractability_N : N;-fun tractable_A : A;-fun traction_N : N;-fun traction_engine_N : N;-fun tractor_N : N;-fun tracy_PN : PN;-fun trad_N : N;-fun trade_N : N;-fun trade_V : V;-fun trade_V2 : V2;-fun trade_in_N : N;-fun trade_union_N : N;-fun trade_unionism_N : N;-fun trade_unionist_N : N;-fun trade_wind_N : N;-fun trademark_N : N;-fun trader_N : N;-fun trades_union_N : N;-fun tradesman_N : N;-fun tradition_N : N;-fun traditional_A : A;-fun traditionalism_N : N;-fun traditionalist_N : N;-fun traditionally_Adv : Adv;-fun traduce_V2 : V2;-fun traducer_N : N;-fun traffic_N : N;-fun traffic_V : V;-fun trafficator_N : N;-fun trafficker_N : N;-fun tragedian_N : N;-fun tragedienne_N : N;-fun tragedy_N : N;-fun tragic_A : A;-fun tragically_Adv : Adv;-fun tragicomedy_N : N;-fun tragicomic_A : A;-fun trail_N : N;-fun trail_V : V;-fun trail_V2 : V2;-fun trailer_N : N;-fun train_N : N;-fun train_V : V;-fun train_V2 : V2;-fun trainbearer_N : N;-fun trainee_N : N;-fun trainer_N : N;-fun training_N : N;-fun training_college_N : N;-fun training_ship_N : N;-fun trainload_N : N;-fun trainman_N : N;-fun traipse_V : V;-fun trait_N : N;-fun traitor_N : N;-fun traitorous_A : A;-fun traitorously_Adv : Adv;-fun traitress_N : N;-fun trajectory_N : N;-fun tralee_PN : PN;-fun tram_N : N;-fun tram_car_N : N;-fun tramline_N : N;-fun trammel_V2 : V2;-fun tramp_N : N;-fun tramp_V : V;-fun tramp_V2 : V2;-fun tramp_steamer_N : N;-fun trample_N : N;-fun trample_V : V;-fun trample_V2 : V2;-fun trampoline_N : N;-fun tramway_N : N;-fun trance_N : N;-fun tranent_PN : PN;-fun tranquil_A : A;-fun tranquility_N : N;-fun tranquilize_V2 : V2;-fun tranquillity_N : N;-fun tranquillize_V2 : V2;-fun tranquillizer_N : N;-fun tranquilly_Adv : Adv;-fun trans_PN : PN;-fun transact_V2 : V2;-fun transaction_N : N;-fun transalpine_A : A;-fun transalpine_N : N;-fun transatlantic_A : A;-fun transcend_V2 : V2;-fun transcendence_N : N;-fun transcendency_N : N;-fun transcendent_A : A;-fun transcendental_A : A;-fun transcendentalism_N : N;-fun transcendentalist_N : N;-fun transcendentally_Adv : Adv;-fun transcontinental_A : A;-fun transcribe_V2 : V2;-fun transcript_N : N;-fun transcription_N : N;-fun transept_N : N;-fun transfer_N : N;-fun transfer_V : V;-fun transfer_V2 : V2;-fun transferability_N : N;-fun transferable_A : A;-fun transference_N : N;-fun transfiguration_N : N;-fun transfigure_V2 : V2;-fun transfix_V2 : V2;-fun transform_V2 : V2;-fun transformable_A : A;-fun transformation_N : N;-fun transformer_N : N;-fun transfuse_V2 : V2;-fun transfusion_N : N;-fun transgress_V : V;-fun transgress_V2 : V2;-fun transgression_N : N;-fun transgressor_N : N;-fun transience_N : N;-fun transiency_N : N;-fun transient_A : A;-fun transient_N : N;-fun transiently_Adv : Adv;-fun transistor_N : N;-fun transistorized_A : A;-fun transit_N : N;-fun transition_N : N;-fun transitional_A : A;-fun transitionally_Adv : Adv;-fun transitive_A : A;-fun transitively_Adv : Adv;-fun transitory_A : A;-fun translatable_A : A;-fun translate_V2 : V2;-fun translation_N : N;-fun translator_N : N;-fun transliterate_V2 : V2;-fun transliteration_N : N;-fun translucence_N : N;-fun translucency_N : N;-fun translucent_A : A;-fun transmigration_N : N;-fun transmission_N : N;-fun transmit_V2 : V2;-fun transmitter_N : N;-fun transmogrification_N : N;-fun transmogrify_V2 : V2;-fun transmutable_A : A;-fun transmutation_N : N;-fun transmute_V2 : V2;-fun transoceanic_A : A;-fun transom_N : N;-fun transom_window_N : N;-fun transparence_N : N;-fun transparency_N : N;-fun transparent_A : A;-fun transparently_Adv : Adv;-fun transpiration_N : N;-fun transpire_V : V;-fun transpire_V2 : V2;-fun transplant_N : N;-fun transplant_V : V;-fun transplant_V2 : V2;-fun transplantation_N : N;-fun transpolar_A : A;-fun transport_N : N;-fun transport_V2 : V2;-fun transportable_A : A;-fun transportation_N : N;-fun transporter_N : N;-fun transpose_V2 : V2;-fun transposition_N : N;-fun transsexual_N : N;-fun transship_V2 : V2;-fun transshipment_N : N;-fun transubstantiation_N : N;-fun transverse_A : A;-fun transversely_Adv : Adv;-fun transvestism_N : N;-fun transvestite_N : N;-fun trap_N : N;-fun trap_V2 : V2;-fun trap_door_N : N;-fun trap_shooting_N : N;-fun trapeze_N : N;-fun trapezium_N : N;-fun trapezoid_N : N;-fun trapper_N : N;-fun trappist_N : N;-fun trash_N : N;-fun trashy_A : A;-fun trauma_N : N;-fun traumatic_A : A;-fun travail_N : N;-fun travel_N : N;-fun travel_V : V;-fun travel_V2 : V2;-fun travel_soiled_A : A;-fun travel_stained_A : A;-fun travel_worn_A : A;-fun traveled_A : A;-fun travelled_A : A;-fun traveller_N : N;-fun travelling_N : N;-fun travelogue_N : N;-fun traverse_N : N;-fun traverse_V2 : V2;-fun travesty_N : N;-fun travesty_V2 : V2;-fun trawl_N : N;-fun trawl_V : V;-fun trawl_V2 : V2;-fun trawl_net_N : N;-fun trawler_N : N;-fun tray_N : N;-fun tray_cloth_N : N;-fun treacherous_A : A;-fun treacherously_Adv : Adv;-fun treachery_N : N;-fun treacle_N : N;-fun treacly_A : A;-fun tread_N : N;-fun tread_V : V;-fun tread_V2 : V2;-fun treadle_N : N;-fun treadle_V : V;-fun treadmill_N : N;-fun treas_N : N;-fun treason_N : N;-fun treasonable_A : A;-fun treasonably_Adv : Adv;-fun treasonous_A : A;-fun treasure_N : N;-fun treasure_V2 : V2;-fun treasure_house_N : N;-fun treasure_trove_N : N;-fun treasurer_N : N;-fun treasury_N : N;-fun treat_N : N;-fun treat_V : V;-fun treat_V2 : V2;-fun treatise_N : N;-fun treatment_N : N;-fun treaty_N : N;-fun treble_A : A;-fun treble_N : N;-fun treble_V : V;-fun treble_V2 : V2;-fun tredegar_PN : PN;-fun tree_N : N;-fun tree_V2 : V2;-fun tree_fern_N : N;-fun treeless_A : A;-fun trefoil_N : N;-fun trek_N : N;-fun trek_V : V;-fun trellis_N : N;-fun trellis_V2 : V2;-fun tremble_N : N;-fun tremble_V : V;-fun tremendous_A : A;-fun tremendously_Adv : Adv;-fun tremolo_N : N;-fun tremor_N : N;-fun tremulous_A : A;-fun tremulously_Adv : Adv;-fun trench_N : N;-fun trench_V2 : V2;-fun trenchancy_N : N;-fun trenchant_A : A;-fun trenchantly_Adv : Adv;-fun trencher_N : N;-fun trencherman_N : N;-fun trend_N : N;-fun trend_V : V;-fun trend_setter_N : N;-fun trend_setting_N : N;-fun trendy_A : A;-fun trepan_V2 : V2;-fun trephine_N : N;-fun trephine_V2 : V2;-fun trepidation_N : N;-fun trespass_N : N;-fun trespass_V : V;-fun trespasser_N : N;-fun tress_N : N;-fun trestle_N : N;-fun trestle_bridge_N : N;-fun trestle_table_N : N;-fun trevor_PN : PN;-fun triad_N : N;-fun trial_N : N;-fun triangle_N : N;-fun triangular_A : A;-fun tribal_A : A;-fun tribalism_N : N;-fun tribe_N : N;-fun tribesman_N : N;-fun tribulation_N : N;-fun tribunal_N : N;-fun tribune_N : N;-fun tributary_A : A;-fun tributary_N : N;-fun tribute_N : N;-fun trice_N : N;-fun trice_V2 : V2;-fun trick_N : N;-fun trick_V2 : V2;-fun trickery_N : N;-fun trickiness_N : N;-fun trickle_N : N;-fun trickle_V : V;-fun trickle_V2 : V2;-fun trickster_N : N;-fun tricksy_A : A;-fun tricky_A : A;-fun tricolour_N : N;-fun tricycle_N : N;-fun trident_N : N;-fun tried_A : A;-fun triennial_A : A;-fun triennial_N : N;-fun trier_N : N;-fun trieste_PN : PN;-fun trifle_N : N;-fun trifle_V : V;-fun trifle_V2 : V2;-fun trifler_N : N;-fun trifling_A : A;-fun trigger_N : N;-fun trigger_V2 : V2;-fun trigger_happy_A : A;-fun trigonometry_N : N;-fun trilateral_A : A;-fun trilby_N : N;-fun trill_N : N;-fun trill_V : V;-fun trill_V2 : V2;-fun trillion_A : A;-fun trillion_N : N;-fun trillionth_A : A;-fun trillionth_N : N;-fun trilogy_N : N;-fun trim_A : A;-fun trim_N : N;-fun trim_V : V;-fun trim_V2 : V2;-fun trimaran_N : N;-fun trimly_Adv : Adv;-fun trimmer_N : N;-fun trimming_N : N;-fun tring_PN : PN;-fun trinidad_PN : PN;-fun trinidadian_A : A;-fun trinidadian_N : N;-fun trinitrotoluene_N : N;-fun trinity_N : N;-fun trinket_N : N;-fun trio_N : N;-fun trip_N : N;-fun trip_V : V;-fun trip_V2 : V2;-fun tripartite_A : A;-fun tripe_N : N;-fun triple_A : A;-fun triple_V : V;-fun triple_V2 : V2;-fun triplet_N : N;-fun triplex_A : A;-fun triplicate_A : A;-fun triplicate_N : N;-fun triplicate_V2 : V2;-fun tripod_N : N;-fun tripos_N : N;-fun tripper_N : N;-fun tripping_A : A;-fun trippingly_Adv : Adv;-fun triptych_N : N;-fun trireme_N : N;-fun trisect_V2 : V2;-fun trite_A : A;-fun tritely_Adv : Adv;-fun triteness_N : N;-fun triumph_N : N;-fun triumph_V : V;-fun triumphal_A : A;-fun triumphant_A : A;-fun triumphantly_Adv : Adv;-fun triumvir_N : N;-fun triumvirate_N : N;-fun triune_A : A;-fun trivet_N : N;-fun trivial_A : A;-fun triviality_N : N;-fun trivialize_V2 : V2;-fun trivially_Adv : Adv;-fun trochaic_A : A;-fun trochee_N : N;-fun troglodyte_N : N;-fun troika_N : N;-fun trojan_A : A;-fun trojan_N : N;-fun troll_N : N;-fun troll_V : V;-fun troll_V2 : V2;-fun trolley_N : N;-fun trolley_car_N : N;-fun trollop_N : N;-fun trombone_N : N;-fun trombonist_N : N;-fun troon_PN : PN;-fun troop_N : N;-fun troop_V : V;-fun troop_V2 : V2;-fun troop_carrier_N : N;-fun trooper_N : N;-fun troopship_N : N;-fun trope_N : N;-fun trophy_N : N;-fun tropic_N : N;-fun tropical_A : A;-fun tropically_Adv : Adv;-fun trot_N : N;-fun trot_V : V;-fun trot_V2 : V2;-fun troth_N : N;-fun trotter_N : N;-fun troubadour_N : N;-fun trouble_N : N;-fun trouble_V : V;-fun trouble_V2 : V2;-fun troublemaker_N : N;-fun troubleshooter_N : N;-fun troublesome_A : A;-fun troublous_A : A;-fun trough_N : N;-fun trounce_V2 : V2;-fun trouncing_N : N;-fun troupe_N : N;-fun trouper_N : N;-fun trouser_N : N;-fun trousseau_N : N;-fun trout_N : N;-fun trove_N : N;-fun trowbridge_PN : PN;-fun trowel_N : N;-fun troy_N : N;-fun truancy_N : N;-fun truant_N : N;-fun truce_N : N;-fun truck_N : N;-fun truckle_N : N;-fun truckle_V : V;-fun truckle_bed_N : N;-fun truculence_N : N;-fun truculency_N : N;-fun truculent_A : A;-fun truculently_Adv : Adv;-fun trudge_N : N;-fun trudge_V : V;-fun true_A : A;-fun true_Adv : Adv;-fun true_N : N;-fun true_V2 : V2;-fun true_blue_A : A;-fun true_blue_N : N;-fun true_hearted_A : A;-fun truelove_N : N;-fun truffle_N : N;-fun truism_N : N;-fun truly_Adv : Adv;-fun trump_N : N;-fun trump_V : V;-fun trump_V2 : V2;-fun trumpery_A : A;-fun trumpet_N : N;-fun trumpet_V : V;-fun trumpet_V2 : V2;-fun trumpeter_N : N;-fun truncate_V2 : V2;-fun truncheon_N : N;-fun trundle_V : V;-fun trundle_V2 : V2;-fun trunk_N : N;-fun trunk_call_N : N;-fun trunk_line_N : N;-fun trunk_road_N : N;-fun trunking_N : N;-fun truro_PN : PN;-fun truss_N : N;-fun truss_V2 : V2;-fun trust_N : N;-fun trust_V : V;-fun trust_V2 : V2;-fun trustee_N : N;-fun trusteeship_N : N;-fun trustful_A : A;-fun trustfully_Adv : Adv;-fun trusting_A : A;-fun trustingly_Adv : Adv;-fun trustworthiness_N : N;-fun trustworthy_A : A;-fun trusty_A : A;-fun truth_N : N;-fun truthful_A : A;-fun truthfully_Adv : Adv;-fun truthfulness_N : N;-fun try_N : N;-fun try_V : V;-fun try_V2 : V2;-fun try_on_N : N;-fun try_out_N : N;-fun trying_A : A;-fun tryst_N : N;-fun tsar_N : N;-fun tsarina_N : N;-fun tsetse_N : N;-fun tsetse_fly_N : N;-fun tsinan_PN : PN;-fun tsingtao_PN : PN;-fun tsitsihar_PN : PN;-fun tswana_A : A;-fun tswana_N : N;-fun tub_N : N;-fun tub_thumper_N : N;-fun tuba_N : N;-fun tubby_A : A;-fun tube_N : N;-fun tube_well_N : N;-fun tubeless_A : A;-fun tuber_N : N;-fun tubercular_A : A;-fun tuberculosis_N : N;-fun tuberculous_A : A;-fun tubful_N : N;-fun tubing_N : N;-fun tubular_A : A;-fun tuc_N : N;-fun tuck_N : N;-fun tuck_V : V;-fun tuck_V2 : V2;-fun tuck_in_N : N;-fun tuck_shop_N : N;-fun tucker_N : N;-fun tues_PN : PN;-fun tuesday_N : N;-fun tuesday_PN : PN;-fun tuft_N : N;-fun tufted_A : A;-fun tug_N : N;-fun tug_V : V;-fun tug_V2 : V2;-fun tugboat_N : N;-fun tuition_N : N;-fun tulip_N : N;-fun tulle_N : N;-fun tullibody_PN : PN;-fun tumble_N : N;-fun tumble_V : V;-fun tumble_V2 : V2;-fun tumble_down_A : A;-fun tumbler_N : N;-fun tumbleweed_N : N;-fun tumbrel_N : N;-fun tumbril_N : N;-fun tumescence_N : N;-fun tumescent_A : A;-fun tumid_A : A;-fun tumidity_N : N;-fun tummy_N : N;-fun tumour_N : N;-fun tumult_N : N;-fun tumultuous_A : A;-fun tumultuously_Adv : Adv;-fun tumulus_N : N;-fun tun_N : N;-fun tuna_N : N;-fun tunbridge_wells_PN : PN;-fun tundra_N : N;-fun tune_N : N;-fun tune_V : V;-fun tune_V2 : V2;-fun tuneful_A : A;-fun tunefully_Adv : Adv;-fun tunefulness_N : N;-fun tuner_N : N;-fun tung_oil_N : N;-fun tungsten_N : N;-fun tunic_N : N;-fun tuning_fork_N : N;-fun tunis_PN : PN;-fun tunisia_PN : PN;-fun tunisian_A : A;-fun tunisian_N : N;-fun tunnel_N : N;-fun tunnel_V : V;-fun tunnel_V2 : V2;-fun tunny_N : N;-fun tup_N : N;-fun tuppence_N : N;-fun tuppenny_A : A;-fun turban_N : N;-fun turbaned_A : A;-fun turbid_A : A;-fun turbidity_N : N;-fun turbidness_N : N;-fun turbine_N : N;-fun turbojet_N : N;-fun turboprop_N : N;-fun turbot_N : N;-fun turbulence_N : N;-fun turbulent_A : A;-fun turbulently_Adv : Adv;-fun turd_N : N;-fun tureen_N : N;-fun turf_N : N;-fun turf_V2 : V2;-fun turgid_A : A;-fun turgidity_N : N;-fun turgidly_Adv : Adv;-fun turin_PN : PN;-fun turk_N : N;-fun turkey_N : N;-fun turkey_PN : PN;-fun turkish_A : A;-fun turkish_N : N;-fun turku_PN : PN;-fun turmeric_N : N;-fun turmoil_N : N;-fun turn_N : N;-fun turn_V : V;-fun turn_V2 : V2;-fun turn_off_N : N;-fun turn_on_N : N;-fun turn_out_N : N;-fun turn_round_N : N;-fun turn_up_N : N;-fun turncoat_N : N;-fun turncock_N : N;-fun turner_N : N;-fun turning_N : N;-fun turning_point_N : N;-fun turnip_N : N;-fun turnkey_N : N;-fun turnover_N : N;-fun turnpike_N : N;-fun turnspit_N : N;-fun turnstile_N : N;-fun turntable_N : N;-fun turpentine_N : N;-fun turpitude_N : N;-fun turps_N : N;-fun turquoise_N : N;-fun turret_N : N;-fun turtle_N : N;-fun turtledove_N : N;-fun turtleneck_A : A;-fun turtlenecked_A : A;-fun tusk_N : N;-fun tussle_N : N;-fun tussle_V : V;-fun tussock_N : N;-fun tut_V2 : V2;-fun tutelage_N : N;-fun tutelary_A : A;-fun tutor_N : N;-fun tutor_V2 : V2;-fun tutorial_A : A;-fun tutorial_N : N;-fun tutorially_Adv : Adv;-fun tutorship_N : N;-fun tutti_frutti_N : N;-fun tutu_N : N;-fun tuxedo_N : N;-fun tv_N : N;-fun tvs_N : N;-fun twaddle_N : N;-fun twaddle_V : V;-fun twain_N : N;-fun twang_N : N;-fun twang_V : V;-fun twang_V2 : V2;-fun tweak_N : N;-fun tweak_V2 : V2;-fun twee_A : A;-fun tweed_N : N;-fun tween_Adv : Adv;-fun tween_decks_Adv : Adv;-fun tweet_N : N;-fun tweet_V : V;-fun tweeter_N : N;-fun twelfth_night_N : N;-fun twelfth_night_PN : PN;-fun twelvemonth_N : N;-fun twerp_N : N;-fun twice_Adv : Adv;-fun twiddle_N : N;-fun twiddle_V : V;-fun twiddle_V2 : V2;-fun twiddly_A : A;-fun twig_N : N;-fun twig_V : V;-fun twig_V2 : V2;-fun twiggy_A : A;-fun twilight_N : N;-fun twilit_A : A;-fun twill_N : N;-fun twilled_A : A;-fun twin_N : N;-fun twin_V2 : V2;-fun twine_N : N;-fun twine_V : V;-fun twine_V2 : V2;-fun twinge_N : N;-fun twinkle_N : N;-fun twinkle_V : V;-fun twinkling_N : N;-fun twinned_A : A;-fun twirl_N : N;-fun twirl_V : V;-fun twirl_V2 : V2;-fun twist_N : N;-fun twist_V : V;-fun twist_V2 : V2;-fun twister_N : N;-fun twisty_A : A;-fun twit_N : N;-fun twit_V2 : V2;-fun twitch_N : N;-fun twitch_V : V;-fun twitch_V2 : V2;-fun twitter_N : N;-fun twitter_V : V;-fun two_a_penny_A : A;-fun two_edged_A : A;-fun two_faced_A : A;-fun two_funnelled_A : A;-fun two_handed_A : A;-fun two_piece_N : N;-fun two_ply_A : A;-fun two_seater_N : N;-fun two_step_N : N;-fun two_timing_A : A;-fun two_way_A : A;-fun twofold_A : A;-fun twofold_Adv : Adv;-fun twopence_N : N;-fun twopenny_A : A;-fun twopenny_halfpenny_A : A;-fun tycoon_N : N;-fun tyke_N : N;-fun tympanum_N : N;-fun tyne_PN : PN;-fun tynemouth_PN : PN;-fun type_N : N;-fun type_V : V;-fun type_V2 : V2;-fun typecast_V2 : V2;-fun typeface_N : N;-fun typescript_N : N;-fun typesetter_N : N;-fun typewriter_N : N;-fun typewritten_A : A;-fun typhoid_N : N;-fun typhoon_N : N;-fun typhus_N : N;-fun typical_A : A;-fun typically_Adv : Adv;-fun typify_V2 : V2;-fun typist_N : N;-fun typographer_N : N;-fun typographic_A : A;-fun typographically_Adv : Adv;-fun typography_N : N;-fun tyrannical_A : A;-fun tyrannize_V : V;-fun tyrannize_V2 : V2;-fun tyrannous_A : A;-fun tyranny_N : N;-fun tyrant_N : N;-fun tyre_N : N;-fun tyro_N : N;-fun tyrone_PN : PN;-fun tzar_N : N;-fun tzarina_N : N;-fun tzupo_PN : PN;-fun tete_a_tete_Adv : Adv;-fun tete_a_tete_N : N;-fun u_boat_N : N;-fun u_turn_N : N;-fun ubiquitous_A : A;-fun ubiquity_N : N;-fun udder_N : N;-fun uddingston_PN : PN;-fun udi_PN : PN;-fun udine_PN : PN;-fun ufa_PN : PN;-fun ufo's_N : N;-fun ufo_N : N;-fun uganda_PN : PN;-fun ugandan_A : A;-fun ugandan_N : N;-fun uglify_V2 : V2;-fun ugliness_N : N;-fun ugly_A : A;-fun uk_PN : PN;-fun ukase_N : N;-fun ukulele_N : N;-fun ulcer_N : N;-fun ulcerate_V : V;-fun ulcerate_V2 : V2;-fun ulceration_N : N;-fun ulcerous_A : A;-fun ulna_N : N;-fun ulster_N : N;-fun ulster_PN : PN;-fun ulterior_A : A;-fun ultimate_A : A;-fun ultimately_Adv : Adv;-fun ultimatum_N : N;-fun ultimo_A : A;-fun ultra_vires_A : A;-fun ultra_vires_Adv : Adv;-fun ultramarine_A : A;-fun ultramarine_N : N;-fun ultramontane_A : A;-fun ultrasonic_A : A;-fun ultraviolet_A : A;-fun ululate_V : V;-fun ululation_N : N;-fun ulverston_PN : PN;-fun umber_A : A;-fun umber_N : N;-fun umbilical_A : A;-fun umbrage_N : N;-fun umbrella_N : N;-fun umlaut_N : N;-fun umpire_N : N;-fun umpire_V : V;-fun umpire_V2 : V2;-fun umpteen_A : A;-fun umpteenth_A : A;-fun un_N : N;-fun un_come_at_able_A : A;-fun un_get_at_able_A : A;-fun unabashed_A : A;-fun unabated_A : A;-fun unable_A : A;-fun unabridged_A : A;-fun unacceptable_A : A;-fun unacceptably_Adv : Adv;-fun unaccommodating_A : A;-fun unaccompanied_A : A;-fun unaccountable_A : A;-fun unaccountably_Adv : Adv;-fun unaccounted_A : A;-fun unaccustomed_A : A;-fun unacknowledged_A : A;-fun unacquainted_A : A;-fun unadorned_A : A;-fun unadulterated_A : A;-fun unadventurous_A : A;-fun unadvised_A : A;-fun unadvisedly_Adv : Adv;-fun unaffected_A : A;-fun unafraid_A : A;-fun unaided_A : A;-fun unalienable_A : A;-fun unaligned_A : A;-fun unalloyed_A : A;-fun unalterable_A : A;-fun unalterably_Adv : Adv;-fun unaltered_A : A;-fun unambiguous_A : A;-fun unambiguously_Adv : Adv;-fun unamended_A : A;-fun unanimity_N : N;-fun unanimous_A : A;-fun unanimously_Adv : Adv;-fun unannounced_A : A;-fun unanswerable_A : A;-fun unanswered_A : A;-fun unanticipated_A : A;-fun unappealing_A : A;-fun unappetizing_A : A;-fun unappreciated_A : A;-fun unappreciative_A : A;-fun unapproachable_A : A;-fun unarguable_A : A;-fun unarguably_Adv : Adv;-fun unarmed_A : A;-fun unarticulated_A : A;-fun unashamed_A : A;-fun unashamedly_Adv : Adv;-fun unasked_A : A;-fun unassailable_A : A;-fun unassailably_Adv : Adv;-fun unassisted_A : A;-fun unassuming_A : A;-fun unassumingly_Adv : Adv;-fun unattached_A : A;-fun unattainable_A : A;-fun unattainably_Adv : Adv;-fun unattended_A : A;-fun unattractive_A : A;-fun unattractively_Adv : Adv;-fun unauthorized_A : A;-fun unavailable_A : A;-fun unavailing_A : A;-fun unavoidable_A : A;-fun unavoidably_Adv : Adv;-fun unawakened_A : A;-fun unaware_A : A;-fun unawares_Adv : Adv;-fun unbacked_A : A;-fun unbalance_V2 : V2;-fun unbalanced_A : A;-fun unbar_V2 : V2;-fun unbearable_A : A;-fun unbearably_Adv : Adv;-fun unbeatable_A : A;-fun unbeaten_A : A;-fun unbecoming_A : A;-fun unbecomingly_Adv : Adv;-fun unbeknown_A : A;-fun unbeknown_Adv : Adv;-fun unbeknownst_A : A;-fun unbeknownst_Adv : Adv;-fun unbelief_N : N;-fun unbelievable_A : A;-fun unbelievably_Adv : Adv;-fun unbeliever_N : N;-fun unbelieving_A : A;-fun unbelievingly_Adv : Adv;-fun unbeloved_A : A;-fun unbend_V : V;-fun unbend_V2 : V2;-fun unbending_A : A;-fun unbiased_A : A;-fun unbiassed_A : A;-fun unbidden_A : A;-fun unbind_V2 : V2;-fun unblock_V2 : V2;-fun unblushing_A : A;-fun unblushingly_Adv : Adv;-fun unbolt_V : V;-fun unbolt_V2 : V2;-fun unborn_A : A;-fun unbosom_V2 : V2;-fun unbounded_A : A;-fun unbowed_A : A;-fun unbreakable_A : A;-fun unbridled_A : A;-fun unbroken_A : A;-fun unbuckle_V2 : V2;-fun unburden_V2 : V2;-fun unburied_A : A;-fun unbutton_V2 : V2;-fun unbuttoned_A : A;-fun uncalled_for_A : A;-fun uncannily_Adv : Adv;-fun uncanny_A : A;-fun uncared_for_A : A;-fun uncarpeted_A : A;-fun unceasing_A : A;-fun unceasingly_Adv : Adv;-fun uncensored_A : A;-fun unceremonious_A : A;-fun unceremoniously_Adv : Adv;-fun unceremoniousness_N : N;-fun uncertain_A : A;-fun uncertainly_Adv : Adv;-fun uncertainty_N : N;-fun unchain_V2 : V2;-fun unchallengeable_A : A;-fun unchallenged_A : A;-fun unchanged_A : A;-fun unchanging_A : A;-fun uncharacteristic_A : A;-fun uncharacteristically_Adv : Adv;-fun uncharitable_A : A;-fun uncharted_A : A;-fun unchecked_A : A;-fun unchivalrously_Adv : Adv;-fun unchristian_A : A;-fun uncivil_A : A;-fun uncivilized_A : A;-fun unclaimed_A : A;-fun unclassified_A : A;-fun uncle_N : N;-fun unclean_A : A;-fun unclear_A : A;-fun unclouded_A : A;-fun uncluttered_A : A;-fun unco_A : A;-fun unco_Adv : Adv;-fun unco_operative_A : A;-fun unco_ordinated_A : A;-fun uncoloured_A : A;-fun uncomfortable_A : A;-fun uncomfortably_Adv : Adv;-fun uncommercialized_A : A;-fun uncommitted_A : A;-fun uncommon_A : A;-fun uncommonly_Adv : Adv;-fun uncommunicative_A : A;-fun uncompetitive_A : A;-fun uncomplaining_A : A;-fun uncomplainingly_Adv : Adv;-fun uncompleted_A : A;-fun uncomplicated_A : A;-fun uncomplimentary_A : A;-fun uncomprehending_A : A;-fun uncompromising_A : A;-fun unconcealed_A : A;-fun unconcern_N : N;-fun unconcerned_A : A;-fun unconcernedly_Adv : Adv;-fun unconditional_A : A;-fun unconditionally_Adv : Adv;-fun unconditioned_A : A;-fun unconfined_A : A;-fun unconfirmed_A : A;-fun unconformable_A : A;-fun uncongenial_A : A;-fun unconnected_A : A;-fun unconquered_A : A;-fun unconscionable_A : A;-fun unconscious_A : A;-fun unconscious_N : N;-fun unconsciously_Adv : Adv;-fun unconsciousness_N : N;-fun unconsidered_A : A;-fun unconstitutional_A : A;-fun unconstitutionally_Adv : Adv;-fun unconstrained_A : A;-fun unconstructive_A : A;-fun unconsummated_A : A;-fun uncontaminated_A : A;-fun uncontrollable_A : A;-fun uncontrollably_Adv : Adv;-fun uncontrolled_A : A;-fun uncontroversial_A : A;-fun unconventional_A : A;-fun unconventionality_N : N;-fun unconverted_A : A;-fun unconvinced_A : A;-fun unconvincing_A : A;-fun uncooked_A : A;-fun uncork_V2 : V2;-fun uncorrected_A : A;-fun uncorrelated_A : A;-fun uncorroborated_A : A;-fun uncouple_V2 : V2;-fun uncouth_A : A;-fun uncouthly_Adv : Adv;-fun uncouthness_N : N;-fun uncover_V2 : V2;-fun uncritical_A : A;-fun uncritically_Adv : Adv;-fun uncross_V2 : V2;-fun uncrossed_A : A;-fun uncrowned_A : A;-fun unction_N : N;-fun unctuous_A : A;-fun unctuously_Adv : Adv;-fun uncultivated_A : A;-fun uncultured_A : A;-fun uncurl_V : V;-fun uncurl_V2 : V2;-fun uncut_A : A;-fun undamaged_A : A;-fun undated_A : A;-fun undaunted_A : A;-fun undeceive_V2 : V2;-fun undecided_A : A;-fun undeclared_A : A;-fun undefeated_A : A;-fun undefended_A : A;-fun undeferential_A : A;-fun undefinable_A : A;-fun undefined_A : A;-fun undemanding_A : A;-fun undemocratic_A : A;-fun undemocratically_Adv : Adv;-fun undemonstrative_A : A;-fun undeniable_A : A;-fun undeniably_Adv : Adv;-fun undenominational_A : A;-fun under_Adv : Adv;-fun under_the_counter_A : A;-fun underact_V : V;-fun underact_V2 : V2;-fun underarm_A : A;-fun underarm_Adv : Adv;-fun underbelly_N : N;-fun underbid_V2 : V2;-fun underbred_A : A;-fun underbrush_N : N;-fun undercarriage_N : N;-fun undercharge_N : N;-fun undercharge_V2 : V2;-fun underclothing_N : N;-fun undercoat_N : N;-fun undercover_A : A;-fun undercurrent_N : N;-fun undercut_N : N;-fun undercut_V2 : V2;-fun underdeveloped_A : A;-fun underdevelopment_N : N;-fun underdog_N : N;-fun underdone_A : A;-fun underemployed_A : A;-fun underestimate_N : N;-fun underestimate_V2 : V2;-fun underestimation_N : N;-fun underexpose_V2 : V2;-fun underexposure_N : N;-fun underfed_A : A;-fun underfelt_N : N;-fun underfloor_A : A;-fun underfoot_Adv : Adv;-fun undergarment_N : N;-fun undergo_V2 : V2;-fun undergraduate_N : N;-fun underground_A : A;-fun underground_Adv : Adv;-fun underground_N : N;-fun undergrowth_N : N;-fun underhand_A : A;-fun underhand_Adv : Adv;-fun underhanded_A : A;-fun underhung_A : A;-fun underlay_N : N;-fun underlie_V2 : V2;-fun underline_N : N;-fun underline_V2 : V2;-fun underling_N : N;-fun undermanned_A : A;-fun undermentioned_A : A;-fun undermine_V2 : V2;-fun underneath_Adv : Adv;-fun undernourished_A : A;-fun undernourishment_N : N;-fun underpass_N : N;-fun underpay_V2 : V2;-fun underpayment_N : N;-fun underpin_V2 : V2;-fun underpopulated_A : A;-fun underprivileged_A : A;-fun underproduction_N : N;-fun underquote_V2 : V2;-fun underrate_V2 : V2;-fun underscore_V2 : V2;-fun undersea_A : A;-fun underseal_N : N;-fun undersealed_A : A;-fun undersecretary_N : N;-fun undersell_V2 : V2;-fun undersexed_A : A;-fun undershoot_V2 : V2;-fun underside_N : N;-fun undersign_V2 : V2;-fun undersized_A : A;-fun underskirt_N : N;-fun underslung_A : A;-fun underspend_V : V;-fun underspend_V2 : V2;-fun underspent_A : A;-fun understaffed_A : A;-fun understand_V : V;-fun understand_V2 : V2;-fun understandable_A : A;-fun understandably_Adv : Adv;-fun understanding_A : A;-fun understanding_N : N;-fun understate_V2 : V2;-fun understatement_N : N;-fun understock_V2 : V2;-fun understudy_N : N;-fun understudy_V2 : V2;-fun undersurface_N : N;-fun undertake_V2 : V2;-fun undertaker_N : N;-fun undertaking_N : N;-fun undertone_N : N;-fun undertow_N : N;-fun undervaluation_N : N;-fun undervalue_V2 : V2;-fun underwater_A : A;-fun underwear_N : N;-fun underweight_A : A;-fun underworld_N : N;-fun underwrite_V2 : V2;-fun underwriter_N : N;-fun undeserved_A : A;-fun undeserving_A : A;-fun undesigned_A : A;-fun undesirable_A : A;-fun undesirable_N : N;-fun undetected_A : A;-fun undetermined_A : A;-fun undeterred_A : A;-fun undeveloped_A : A;-fun undiagnosed_A : A;-fun undifferentiated_A : A;-fun undigested_A : A;-fun undignified_A : A;-fun undiluted_A : A;-fun undiminished_A : A;-fun undimmed_A : A;-fun undiplomatic_A : A;-fun undiplomatically_Adv : Adv;-fun undischarged_A : A;-fun undisciplined_A : A;-fun undisclosed_A : A;-fun undiscovered_A : A;-fun undiscriminating_A : A;-fun undisguised_A : A;-fun undismayed_A : A;-fun undisputed_A : A;-fun undisputedly_Adv : Adv;-fun undissolved_A : A;-fun undistinguishable_A : A;-fun undistinguished_A : A;-fun undistributed_A : A;-fun undisturbed_A : A;-fun undivided_A : A;-fun undo_V2 : V2;-fun undock_V : V;-fun undock_V2 : V2;-fun undocumented_A : A;-fun undogmatic_A : A;-fun undoing_N : N;-fun undomesticated_A : A;-fun undone_A : A;-fun undoubted_A : A;-fun undoubtedly_Adv : Adv;-fun undramatic_A : A;-fun undramatically_Adv : Adv;-fun undreamed_A : A;-fun undreamed_of_A : A;-fun undreamt_A : A;-fun undress_N : N;-fun undress_V : V;-fun undress_V2 : V2;-fun undrinkable_A : A;-fun undue_A : A;-fun undulate_V : V;-fun undulation_N : N;-fun unduly_Adv : Adv;-fun undying_A : A;-fun unearned_A : A;-fun unearth_V2 : V2;-fun unearthly_A : A;-fun unease_N : N;-fun uneasily_Adv : Adv;-fun uneasiness_N : N;-fun uneasy_A : A;-fun uneatable_A : A;-fun uneaten_A : A;-fun uneconomic_A : A;-fun uneconomical_A : A;-fun unedifying_A : A;-fun unedited_A : A;-fun uneducated_A : A;-fun uneffective_A : A;-fun unelaborated_A : A;-fun unemotional_A : A;-fun unemotionally_Adv : Adv;-fun unemployable_A : A;-fun unemployed_A : A;-fun unemployment_N : N;-fun unending_A : A;-fun unendingly_Adv : Adv;-fun unendurable_A : A;-fun unenlightened_A : A;-fun unenterprising_A : A;-fun unenthusiastic_A : A;-fun unenthusiastically_Adv : Adv;-fun unenviable_A : A;-fun unequal_A : A;-fun unequalled_A : A;-fun unequally_Adv : Adv;-fun unequipped_A : A;-fun unequivocal_A : A;-fun unequivocally_Adv : Adv;-fun unerring_A : A;-fun unerringly_Adv : Adv;-fun unesco_PN : PN;-fun unethical_A : A;-fun unethically_Adv : Adv;-fun uneven_A : A;-fun unevenly_Adv : Adv;-fun uneventful_A : A;-fun uneventfully_Adv : Adv;-fun unexampled_A : A;-fun unexceeded_A : A;-fun unexceptionable_A : A;-fun unexceptional_A : A;-fun unexciting_A : A;-fun unexpected_A : A;-fun unexpectedly_Adv : Adv;-fun unexpectedness_N : N;-fun unexpired_A : A;-fun unexplained_A : A;-fun unexplored_A : A;-fun unexposed_A : A;-fun unexpressed_A : A;-fun unexpurgated_A : A;-fun unfailing_A : A;-fun unfailingly_Adv : Adv;-fun unfair_A : A;-fun unfairly_Adv : Adv;-fun unfairness_N : N;-fun unfaithful_A : A;-fun unfaithfully_Adv : Adv;-fun unfaithfulness_N : N;-fun unfaltering_A : A;-fun unfalteringly_Adv : Adv;-fun unfamiliar_A : A;-fun unfamiliarity_N : N;-fun unfashionable_A : A;-fun unfashionably_Adv : Adv;-fun unfasten_V : V;-fun unfasten_V2 : V2;-fun unfathomable_A : A;-fun unfathomed_A : A;-fun unfavourable_A : A;-fun unfavourably_Adv : Adv;-fun unfed_A : A;-fun unfeeling_A : A;-fun unfeelingly_Adv : Adv;-fun unfeigned_A : A;-fun unfeignedly_Adv : Adv;-fun unfermented_A : A;-fun unfertilized_A : A;-fun unfettered_A : A;-fun unfinished_A : A;-fun unfit_A : A;-fun unfit_V2 : V2;-fun unflagging_A : A;-fun unflappable_A : A;-fun unfledged_A : A;-fun unflinching_A : A;-fun unflurried_A : A;-fun unfold_V : V;-fun unfold_V2 : V2;-fun unforeseeable_A : A;-fun unforeseen_A : A;-fun unforgettable_A : A;-fun unforgettably_Adv : Adv;-fun unforgivable_A : A;-fun unforgivably_Adv : Adv;-fun unforgiving_A : A;-fun unformed_A : A;-fun unforthcoming_A : A;-fun unfortunate_A : A;-fun unfortunate_N : N;-fun unfortunately_Adv : Adv;-fun unfounded_A : A;-fun unframed_A : A;-fun unfrequented_A : A;-fun unfriendliness_N : N;-fun unfriendly_A : A;-fun unfrock_V2 : V2;-fun unfruitful_A : A;-fun unfulfilled_A : A;-fun unfurl_V : V;-fun unfurl_V2 : V2;-fun unfurnished_A : A;-fun ungainly_A : A;-fun ungenerous_A : A;-fun ungentle_A : A;-fun ungentlemanly_A : A;-fun unglazed_A : A;-fun ungodly_A : A;-fun ungovernable_A : A;-fun ungraceful_A : A;-fun ungracious_A : A;-fun ungraciously_Adv : Adv;-fun ungrammatical_A : A;-fun ungrammatically_Adv : Adv;-fun ungrateful_A : A;-fun ungratefully_Adv : Adv;-fun ungratefulness_N : N;-fun ungrudging_A : A;-fun ungrudgingly_Adv : Adv;-fun unguarded_A : A;-fun unguent_N : N;-fun unhallowed_A : A;-fun unhampered_A : A;-fun unhand_V2 : V2;-fun unhappily_Adv : Adv;-fun unhappiness_N : N;-fun unhappy_A : A;-fun unharmed_A : A;-fun unhealed_A : A;-fun unhealthy_A : A;-fun unheard_A : A;-fun unheard_of_A : A;-fun unhearing_A : A;-fun unheated_A : A;-fun unheeded_A : A;-fun unhelpful_A : A;-fun unhelpfully_Adv : Adv;-fun unheralded_A : A;-fun unhesitating_A : A;-fun unhesitatingly_Adv : Adv;-fun unhindered_A : A;-fun unhinge_V2 : V2;-fun unhitch_V : V;-fun unhitch_V2 : V2;-fun unholy_A : A;-fun unhook_V2 : V2;-fun unhoped_for_A : A;-fun unhorse_V2 : V2;-fun unhurried_A : A;-fun unhurriedly_Adv : Adv;-fun unhurt_A : A;-fun unhygienic_A : A;-fun unhygienically_Adv : Adv;-fun unicef_PN : PN;-fun unicorn_N : N;-fun unidentifiable_A : A;-fun unidentified_A : A;-fun unification_N : N;-fun uniform_A : A;-fun uniform_N : N;-fun uniformed_A : A;-fun uniformity_N : N;-fun uniformly_Adv : Adv;-fun unify_V2 : V2;-fun unilateral_A : A;-fun unilateralism_N : N;-fun unilateralist_A : A;-fun unilateralist_N : N;-fun unilaterally_Adv : Adv;-fun unimaginable_A : A;-fun unimaginably_Adv : Adv;-fun unimaginative_A : A;-fun unimaginatively_Adv : Adv;-fun unimpaired_A : A;-fun unimpeachable_A : A;-fun unimpeded_A : A;-fun unimportant_A : A;-fun unimpressed_A : A;-fun unimpressive_A : A;-fun unimpressively_Adv : Adv;-fun uninfluenced_A : A;-fun uninformative_A : A;-fun uninformed_A : A;-fun uninhabitable_A : A;-fun uninhabited_A : A;-fun uninhibited_A : A;-fun uninitiated_A : A;-fun uninjured_A : A;-fun uninspired_A : A;-fun uninspiring_A : A;-fun uninsured_A : A;-fun unintelligent_A : A;-fun unintelligently_Adv : Adv;-fun unintelligible_A : A;-fun unintelligibly_Adv : Adv;-fun unintended_A : A;-fun unintentional_A : A;-fun unintentionally_Adv : Adv;-fun uninterested_A : A;-fun uninteresting_A : A;-fun uninterestingly_Adv : Adv;-fun uninterrupted_A : A;-fun uninterruptedly_Adv : Adv;-fun uninvited_A : A;-fun uninviting_A : A;-fun union_N : N;-fun unionist_N : N;-fun unique_A : A;-fun uniquely_Adv : Adv;-fun uniqueness_N : N;-fun unisex_A : A;-fun unison_N : N;-fun unit_N : N;-fun unitarian_A : A;-fun unitarian_N : N;-fun unitarianism_N : N;-fun unitary_A : A;-fun unite_V : V;-fun unite_V2 : V2;-fun united_A : A;-fun unitedly_Adv : Adv;-fun unity_N : N;-fun univ_PN : PN;-fun universal_A : A;-fun universality_N : N;-fun universally_Adv : Adv;-fun universe_N : N;-fun university_N : N;-fun unjust_A : A;-fun unjustifiable_A : A;-fun unjustifiably_Adv : Adv;-fun unjustified_A : A;-fun unjustly_Adv : Adv;-fun unkempt_A : A;-fun unkind_A : A;-fun unkindly_Adv : Adv;-fun unkissed_A : A;-fun unknowable_A : A;-fun unknowing_A : A;-fun unknowingly_Adv : Adv;-fun unknown_A : A;-fun unknown_N : N;-fun unlabelled_A : A;-fun unladylike_A : A;-fun unlamented_A : A;-fun unlatched_A : A;-fun unlawful_A : A;-fun unlawfully_Adv : Adv;-fun unlearn_V2 : V2;-fun unleash_V2 : V2;-fun unleavened_A : A;-fun unlettered_A : A;-fun unlicensed_A : A;-fun unlighted_A : A;-fun unlikable_A : A;-fun unlike_A : A;-fun unlikely_A : A;-fun unlimited_A : A;-fun unlined_A : A;-fun unlisted_A : A;-fun unlit_A : A;-fun unliterary_A : A;-fun unload_V : V;-fun unload_V2 : V2;-fun unlocated_A : A;-fun unlock_V : V;-fun unlock_V2 : V2;-fun unlooked_for_A : A;-fun unloose_V2 : V2;-fun unlovable_A : A;-fun unloved_A : A;-fun unlovely_A : A;-fun unluckily_Adv : Adv;-fun unlucky_A : A;-fun unmade_A : A;-fun unman_V2 : V2;-fun unmanageable_A : A;-fun unmanageably_Adv : Adv;-fun unmanly_A : A;-fun unmanned_A : A;-fun unmannered_A : A;-fun unmannerly_A : A;-fun unmarked_A : A;-fun unmarried_A : A;-fun unmask_V : V;-fun unmask_V2 : V2;-fun unmatchable_A : A;-fun unmatched_A : A;-fun unmechanized_A : A;-fun unmemorable_A : A;-fun unmemorably_Adv : Adv;-fun unmentionable_A : A;-fun unmerciful_A : A;-fun unmercifully_Adv : Adv;-fun unmerited_A : A;-fun unmindful_A : A;-fun unmingled_A : A;-fun unmistakable_A : A;-fun unmistakably_Adv : Adv;-fun unmitigated_A : A;-fun unmixed_A : A;-fun unmodernized_A : A;-fun unmodified_A : A;-fun unmolested_A : A;-fun unmourned_A : A;-fun unmovable_A : A;-fun unmoved_A : A;-fun unmoving_A : A;-fun unmusical_A : A;-fun unmusically_Adv : Adv;-fun unnamed_A : A;-fun unnatural_A : A;-fun unnaturally_Adv : Adv;-fun unnecessarily_Adv : Adv;-fun unnecessary_A : A;-fun unnerve_V2 : V2;-fun unnoticeable_A : A;-fun unnoticed_A : A;-fun unnumbered_A : A;-fun unobjectionable_A : A;-fun unobservant_A : A;-fun unobserved_A : A;-fun unobtainable_A : A;-fun unobtrusive_A : A;-fun unobtrusively_Adv : Adv;-fun unobvious_A : A;-fun unoccupied_A : A;-fun unofficial_A : A;-fun unofficially_Adv : Adv;-fun unopen_A : A;-fun unopened_A : A;-fun unopposed_A : A;-fun unoriginal_A : A;-fun unorthodox_A : A;-fun unpack_V : V;-fun unpack_V2 : V2;-fun unpaid_A : A;-fun unpainted_A : A;-fun unpalatable_A : A;-fun unpalatably_Adv : Adv;-fun unparalleled_A : A;-fun unpardonable_A : A;-fun unpardonably_Adv : Adv;-fun unparliamentary_A : A;-fun unpatriotic_A : A;-fun unpatriotically_Adv : Adv;-fun unpaved_A : A;-fun unpersuaded_A : A;-fun unperturbed_A : A;-fun unpick_V : V;-fun unpick_V2 : V2;-fun unplaced_A : A;-fun unplanned_A : A;-fun unplayable_A : A;-fun unpleasant_A : A;-fun unpleasantly_Adv : Adv;-fun unpleasantness_N : N;-fun unplug_V : V;-fun unplug_V2 : V2;-fun unplumbed_A : A;-fun unpolluted_A : A;-fun unpompous_A : A;-fun unpopular_A : A;-fun unpopularity_N : N;-fun unpractised_A : A;-fun unprecedented_A : A;-fun unprecedentedly_Adv : Adv;-fun unpredictability_N : N;-fun unpredictable_A : A;-fun unpredictably_Adv : Adv;-fun unpredicted_A : A;-fun unprejudiced_A : A;-fun unpremeditated_A : A;-fun unprepared_A : A;-fun unprepossessing_A : A;-fun unpretentious_A : A;-fun unprincipled_A : A;-fun unprintable_A : A;-fun unproductive_A : A;-fun unproductively_Adv : Adv;-fun unprofessional_A : A;-fun unprofitable_A : A;-fun unprofitably_Adv : Adv;-fun unpromising_A : A;-fun unprompted_A : A;-fun unpronounceable_A : A;-fun unpropitious_A : A;-fun unprotected_A : A;-fun unproved_A : A;-fun unproven_A : A;-fun unprovided_A : A;-fun unprovoked_A : A;-fun unpublished_A : A;-fun unpunished_A : A;-fun unputdownable_A : A;-fun unqualified_A : A;-fun unquestionable_A : A;-fun unquestionably_Adv : Adv;-fun unquestioned_A : A;-fun unquestioning_A : A;-fun unquiet_A : A;-fun unquotable_A : A;-fun unquote_Adv : Adv;-fun unravel_V : V;-fun unravel_V2 : V2;-fun unreached_A : A;-fun unread_A : A;-fun unreadable_A : A;-fun unready_A : A;-fun unreal_A : A;-fun unrealistic_A : A;-fun unrealistically_Adv : Adv;-fun unreality_N : N;-fun unrealized_A : A;-fun unreasonable_A : A;-fun unreasonably_Adv : Adv;-fun unreasoning_A : A;-fun unreceptive_A : A;-fun unreciprocated_A : A;-fun unrecognizable_A : A;-fun unrecognizably_Adv : Adv;-fun unrecognized_A : A;-fun unreconciled_A : A;-fun unrecorded_A : A;-fun unredeemable_A : A;-fun unrefined_A : A;-fun unreflective_A : A;-fun unregenerate_A : A;-fun unregistered_A : A;-fun unrehearsed_A : A;-fun unrelated_A : A;-fun unrelaxed_A : A;-fun unrelenting_A : A;-fun unreliable_A : A;-fun unreliably_Adv : Adv;-fun unrelieved_A : A;-fun unremarkable_A : A;-fun unremarkably_Adv : Adv;-fun unremitting_A : A;-fun unrepeatable_A : A;-fun unrepentant_A : A;-fun unrepresentative_A : A;-fun unrequested_A : A;-fun unrequited_A : A;-fun unreserved_A : A;-fun unreservedly_Adv : Adv;-fun unresisting_A : A;-fun unresolved_A : A;-fun unrest_N : N;-fun unrestrained_A : A;-fun unrestricted_A : A;-fun unrevised_A : A;-fun unrewarded_A : A;-fun unrewarding_A : A;-fun unrhythmical_A : A;-fun unrighteous_A : A;-fun unrighteously_Adv : Adv;-fun unripe_A : A;-fun unripened_A : A;-fun unrivalled_A : A;-fun unroll_V : V;-fun unroll_V2 : V2;-fun unromantic_A : A;-fun unromantically_Adv : Adv;-fun unruffled_A : A;-fun unruly_A : A;-fun unsaddle_V2 : V2;-fun unsaddled_A : A;-fun unsafe_A : A;-fun unsaid_A : A;-fun unsaleable_A : A;-fun unsalted_A : A;-fun unsatisfactorily_Adv : Adv;-fun unsatisfactory_A : A;-fun unsatisfied_A : A;-fun unsatisfying_A : A;-fun unsaturated_A : A;-fun unsavoury_A : A;-fun unsay_V2 : V2;-fun unscathed_A : A;-fun unscheduled_A : A;-fun unscientific_A : A;-fun unscientifically_Adv : Adv;-fun unscramble_V2 : V2;-fun unscrew_V : V;-fun unscrew_V2 : V2;-fun unscripted_A : A;-fun unscrupulous_A : A;-fun unscrupulously_Adv : Adv;-fun unsealed_A : A;-fun unseasonable_A : A;-fun unseasonably_Adv : Adv;-fun unseasoned_A : A;-fun unseat_V2 : V2;-fun unseaworthy_A : A;-fun unsecured_A : A;-fun unseeded_A : A;-fun unseeing_A : A;-fun unseemly_A : A;-fun unseen_A : A;-fun unseen_N : N;-fun unselected_A : A;-fun unselective_A : A;-fun unselfconscious_A : A;-fun unselfconsciously_Adv : Adv;-fun unselfish_A : A;-fun unselfishly_Adv : Adv;-fun unselfishness_N : N;-fun unsettle_V2 : V2;-fun unsex_V2 : V2;-fun unsexed_A : A;-fun unshakable_A : A;-fun unshakably_Adv : Adv;-fun unshaved_A : A;-fun unshaven_A : A;-fun unsheathe_V2 : V2;-fun unshielded_A : A;-fun unshrinkable_A : A;-fun unshrinking_A : A;-fun unshuttered_A : A;-fun unsighted_A : A;-fun unsightliness_N : N;-fun unsightly_A : A;-fun unsigned_A : A;-fun unsilenced_A : A;-fun unsinkable_A : A;-fun unskilled_A : A;-fun unsmiling_A : A;-fun unsociable_A : A;-fun unsociably_Adv : Adv;-fun unsocial_A : A;-fun unsold_A : A;-fun unsolicited_A : A;-fun unsolved_A : A;-fun unsophisticated_A : A;-fun unsound_A : A;-fun unsparing_A : A;-fun unsparingly_Adv : Adv;-fun unspeakable_A : A;-fun unspeakably_Adv : Adv;-fun unspecialized_A : A;-fun unspecific_A : A;-fun unspecifically_Adv : Adv;-fun unspecified_A : A;-fun unspectacular_A : A;-fun unspoiled_A : A;-fun unspoilt_A : A;-fun unspoken_A : A;-fun unsporting_A : A;-fun unsportingly_Adv : Adv;-fun unsportsmanlike_A : A;-fun unspotted_A : A;-fun unstable_A : A;-fun unstartling_A : A;-fun unstated_A : A;-fun unstatesmanlike_A : A;-fun unsteadily_Adv : Adv;-fun unsteady_A : A;-fun unstoppable_A : A;-fun unstrained_A : A;-fun unstressed_A : A;-fun unstructured_A : A;-fun unstrung_A : A;-fun unstuck_A : A;-fun unstudied_A : A;-fun unsubtle_A : A;-fun unsuccessful_A : A;-fun unsuccessfully_Adv : Adv;-fun unsuitability_N : N;-fun unsuitable_A : A;-fun unsuitably_Adv : Adv;-fun unsuited_A : A;-fun unsullied_A : A;-fun unsung_A : A;-fun unsupervised_A : A;-fun unsupported_A : A;-fun unsure_A : A;-fun unsurpassed_A : A;-fun unsuspected_A : A;-fun unsuspecting_A : A;-fun unsuspectingly_Adv : Adv;-fun unsuspicious_A : A;-fun unswayed_A : A;-fun unsweetened_A : A;-fun unswept_A : A;-fun unswerving_A : A;-fun unswervingly_Adv : Adv;-fun unsyllabic_A : A;-fun unsympathetic_A : A;-fun unsympathetically_Adv : Adv;-fun unsystematic_A : A;-fun unsystematically_Adv : Adv;-fun untainted_A : A;-fun untamed_A : A;-fun untapped_A : A;-fun untarnished_A : A;-fun untaxed_A : A;-fun untenable_A : A;-fun untenanted_A : A;-fun untended_A : A;-fun untested_A : A;-fun untethered_A : A;-fun unthinkable_A : A;-fun unthinking_A : A;-fun unthinkingly_Adv : Adv;-fun unthought_of_A : A;-fun untidily_Adv : Adv;-fun untidiness_N : N;-fun untidy_A : A;-fun untie_V : V;-fun untie_V2 : V2;-fun untimely_A : A;-fun untiring_A : A;-fun untitled_A : A;-fun untold_A : A;-fun untouchable_A : A;-fun untouchable_N : N;-fun untouched_A : A;-fun untoward_A : A;-fun untrained_A : A;-fun untrammelled_A : A;-fun untranslatable_A : A;-fun untreated_A : A;-fun untried_A : A;-fun untroubled_A : A;-fun untrue_A : A;-fun untruly_Adv : Adv;-fun untrustworthy_A : A;-fun untruth_N : N;-fun untruthful_A : A;-fun untruthfully_Adv : Adv;-fun untucked_A : A;-fun unturned_A : A;-fun untutored_A : A;-fun untwisted_A : A;-fun untypical_A : A;-fun untypically_Adv : Adv;-fun unused_A : A;-fun unusual_A : A;-fun unusually_Adv : Adv;-fun unutterable_A : A;-fun unutterably_Adv : Adv;-fun unvaried_A : A;-fun unvarnished_A : A;-fun unvarying_A : A;-fun unveil_V : V;-fun unveil_V2 : V2;-fun unverified_A : A;-fun unversed_A : A;-fun unvigilant_A : A;-fun unvoiced_A : A;-fun unwanted_A : A;-fun unwarily_Adv : Adv;-fun unwarrantably_Adv : Adv;-fun unwarranted_A : A;-fun unwary_A : A;-fun unwashed_A : A;-fun unwavering_A : A;-fun unwaveringly_Adv : Adv;-fun unweaned_A : A;-fun unwearied_A : A;-fun unwed_A : A;-fun unwelcome_A : A;-fun unwell_A : A;-fun unwholesome_A : A;-fun unwieldiness_N : N;-fun unwieldy_A : A;-fun unwilling_A : A;-fun unwillingly_Adv : Adv;-fun unwillingness_N : N;-fun unwind_V : V;-fun unwind_V2 : V2;-fun unwise_A : A;-fun unwisely_Adv : Adv;-fun unwitnessed_A : A;-fun unwitting_A : A;-fun unwittingly_Adv : Adv;-fun unwonted_A : A;-fun unwontedly_Adv : Adv;-fun unworkable_A : A;-fun unworkmanlike_A : A;-fun unworldly_A : A;-fun unworn_A : A;-fun unworried_A : A;-fun unworthily_Adv : Adv;-fun unworthiness_N : N;-fun unworthy_A : A;-fun unwrap_V : V;-fun unwrap_V2 : V2;-fun unwritten_A : A;-fun unyielding_A : A;-fun unzip_V2 : V2;-fun up_Adv : Adv;-fun up_V : V;-fun up_V2 : V2;-fun up_and_coming_A : A;-fun up_beat_N : N;-fun up_holland_PN : PN;-fun up_market_A : A;-fun up_to_date_A : A;-fun up_to_the_minute_A : A;-fun upbraid_V2 : V2;-fun upbraiding_N : N;-fun upbringing_N : N;-fun upcountry_A : A;-fun upcountry_Adv : Adv;-fun update_V2 : V2;-fun upgrade_N : N;-fun upgrade_V2 : V2;-fun upheaval_N : N;-fun uphill_A : A;-fun uphill_Adv : Adv;-fun uphold_V2 : V2;-fun upholster_V2 : V2;-fun upholsterer_N : N;-fun upholstery_N : N;-fun upkeep_N : N;-fun upland_N : N;-fun uplift_N : N;-fun uplift_V2 : V2;-fun upmost_A : A;-fun upper_A : A;-fun upper_N : N;-fun uppercut_N : N;-fun uppermost_A : A;-fun uppermost_Adv : Adv;-fun uppish_A : A;-fun uppishly_Adv : Adv;-fun uppishness_N : N;-fun uppity_A : A;-fun upright_A : A;-fun upright_N : N;-fun uprightly_Adv : Adv;-fun uprightness_N : N;-fun uprising_N : N;-fun uproar_N : N;-fun uproarious_A : A;-fun uproariously_Adv : Adv;-fun uproot_V2 : V2;-fun upset_N : N;-fun upset_V : V;-fun upset_V2 : V2;-fun upshot_N : N;-fun upside_down_Adv : Adv;-fun upstage_A : A;-fun upstage_Adv : Adv;-fun upstage_V2 : V2;-fun upstairs_A : A;-fun upstairs_Adv : Adv;-fun upstanding_A : A;-fun upstart_A : A;-fun upstart_N : N;-fun upstream_Adv : Adv;-fun upsurge_N : N;-fun uptake_N : N;-fun uptight_A : A;-fun upton_PN : PN;-fun uptown_A : A;-fun uptown_Adv : Adv;-fun upturn_N : N;-fun upturned_A : A;-fun upward_A : A;-fun upward_Adv : Adv;-fun upwards_Adv : Adv;-fun uranium_N : N;-fun uranus_PN : PN;-fun urban_A : A;-fun urbane_A : A;-fun urbanely_Adv : Adv;-fun urbanity_N : N;-fun urbanization_N : N;-fun urbanize_V2 : V2;-fun urchin_N : N;-fun urdu_A : A;-fun urdu_N : N;-fun urge_N : N;-fun urge_V2 : V2;-fun urgency_N : N;-fun urgent_A : A;-fun urgently_Adv : Adv;-fun urging_N : N;-fun uric_A : A;-fun urinal_N : N;-fun urinary_A : A;-fun urinate_V : V;-fun urine_N : N;-fun urn_N : N;-fun ursula_PN : PN;-fun uruguay_PN : PN;-fun uruguayan_A : A;-fun uruguayan_N : N;-fun urumchi_PN : PN;-fun us_PN : PN;-fun usa_PN : PN;-fun usable_A : A;-fun usaf_N : N;-fun usage_N : N;-fun use_N : N;-fun use_V2 : V2;-fun used_A : A;-fun useful_A : A;-fun usefully_Adv : Adv;-fun usefulness_N : N;-fun useless_A : A;-fun uselessly_Adv : Adv;-fun uselessness_N : N;-fun user_N : N;-fun ushaw_moor_PN : PN;-fun usher_N : N;-fun usher_V2 : V2;-fun usherette_N : N;-fun usn_N : N;-fun uss_N : N;-fun ussr_N : N;-fun usual_A : A;-fun usually_Adv : Adv;-fun usurer_N : N;-fun usurious_A : A;-fun usurp_V2 : V2;-fun usurpation_N : N;-fun usurper_N : N;-fun usury_N : N;-fun utah_PN : PN;-fun utensil_N : N;-fun uterine_A : A;-fun uterus_N : N;-fun utilitarian_A : A;-fun utilitarian_N : N;-fun utilitarianism_N : N;-fun utility_N : N;-fun utilizable_A : A;-fun utilization_N : N;-fun utilize_V2 : V2;-fun utmost_A : A;-fun utmost_N : N;-fun utopia_N : N;-fun utopian_A : A;-fun utrecht_PN : PN;-fun utter_A : A;-fun utter_V2 : V2;-fun utterance_N : N;-fun utterly_Adv : Adv;-fun uttermost_A : A;-fun uttermost_N : N;-fun uttoxeter_PN : PN;-fun uvula_N : N;-fun uvular_A : A;-fun uxorious_A : A;-fun uxoriously_Adv : Adv;-fun uxoriousness_N : N;-fun v_and_a_N : N;-fun vac_N : N;-fun vacancy_N : N;-fun vacant_A : A;-fun vacantly_Adv : Adv;-fun vacate_V2 : V2;-fun vacation_N : N;-fun vacation_V : V;-fun vacationist_N : N;-fun vaccinate_V2 : V2;-fun vaccination_N : N;-fun vaccine_N : N;-fun vacillate_V : V;-fun vacillation_N : N;-fun vacuity_N : N;-fun vacuous_A : A;-fun vacuously_Adv : Adv;-fun vacuum_N : N;-fun vade_mecum_N : N;-fun vagabond_A : A;-fun vagabond_N : N;-fun vagary_N : N;-fun vagina_N : N;-fun vaginal_A : A;-fun vagrancy_N : N;-fun vagrant_A : A;-fun vagrant_N : N;-fun vague_A : A;-fun vaguely_Adv : Adv;-fun vagueness_N : N;-fun vain_A : A;-fun vainglorious_A : A;-fun vainglory_N : N;-fun vainly_Adv : Adv;-fun valance_N : N;-fun vale_N : N;-fun valediction_N : N;-fun valedictory_A : A;-fun valence_N : N;-fun valencia_PN : PN;-fun valenciennes_PN : PN;-fun valency_N : N;-fun valentine_N : N;-fun valerian_N : N;-fun valet_N : N;-fun valet_V2 : V2;-fun valetudinarian_A : A;-fun valetudinarian_N : N;-fun valiant_A : A;-fun valiantly_Adv : Adv;-fun valid_A : A;-fun validate_V2 : V2;-fun validity_N : N;-fun validly_Adv : Adv;-fun valise_N : N;-fun valladolid_PN : PN;-fun valley_N : N;-fun valorous_A : A;-fun valour_N : N;-fun valuable_A : A;-fun valuable_N : N;-fun valuation_N : N;-fun value_N : N;-fun value_V2 : V2;-fun value_added_A : A;-fun valueless_A : A;-fun valuer_N : N;-fun valve_N : N;-fun valvular_A : A;-fun vamoose_V : V;-fun vamp_N : N;-fun vamp_V : V;-fun vamp_V2 : V2;-fun vampire_N : N;-fun van_N : N;-fun vancouver_PN : PN;-fun vandal_N : N;-fun vandalism_N : N;-fun vane_N : N;-fun vanessa_PN : PN;-fun vanguard_N : N;-fun vanilla_N : N;-fun vanish_V : V;-fun vanity_N : N;-fun vanquish_V2 : V2;-fun vantage_N : N;-fun vantage_point_N : N;-fun vapid_A : A;-fun vapidity_N : N;-fun vapidly_Adv : Adv;-fun vapidness_N : N;-fun vaporization_N : N;-fun vaporize_V : V;-fun vaporize_V2 : V2;-fun vaporous_A : A;-fun vapour_N : N;-fun vapour_bath_N : N;-fun varanasi_PN : PN;-fun variability_N : N;-fun variable_A : A;-fun variable_N : N;-fun variableness_N : N;-fun variably_Adv : Adv;-fun variance_N : N;-fun variant_A : A;-fun variant_N : N;-fun variation_N : N;-fun varicoloured_A : A;-fun varicose_A : A;-fun varied_A : A;-fun variegated_A : A;-fun variegation_N : N;-fun variety_N : N;-fun variform_A : A;-fun variorum_A : A;-fun various_A : A;-fun variously_Adv : Adv;-fun varlet_N : N;-fun varnish_N : N;-fun varnish_V2 : V2;-fun varsity_N : N;-fun vary_V : V;-fun vary_V2 : V2;-fun vascular_A : A;-fun vase_N : N;-fun vasectomy_N : N;-fun vaseline_N : N;-fun vassal_N : N;-fun vassalage_N : N;-fun vast_A : A;-fun vasteras_PN : PN;-fun vastly_Adv : Adv;-fun vastness_N : N;-fun vat_N : N;-fun vatican_N : N;-fun vaudeville_N : N;-fun vault_N : N;-fun vault_V : V;-fun vault_V2 : V2;-fun vaulted_A : A;-fun vaulter_N : N;-fun vaulting_horse_N : N;-fun vaunt_N : N;-fun vaunt_V : V;-fun vaunt_V2 : V2;-fun vaunter_N : N;-fun vauntingly_Adv : Adv;-fun vc_N : N;-fun vd_N : N;-fun veal_N : N;-fun vector_N : N;-fun veer_V : V;-fun vegetable_A : A;-fun vegetable_N : N;-fun vegetarian_N : N;-fun vegetate_V : V;-fun vegetation_N : N;-fun vehemence_N : N;-fun vehement_A : A;-fun vehemently_Adv : Adv;-fun vehicle_N : N;-fun vehicular_A : A;-fun veil_N : N;-fun veil_V2 : V2;-fun veiling_N : N;-fun vein_N : N;-fun veined_A : A;-fun veld_N : N;-fun vellum_N : N;-fun velocipede_N : N;-fun velocity_N : N;-fun velour_N : N;-fun velvet_N : N;-fun velveteen_N : N;-fun velvety_A : A;-fun venal_A : A;-fun venality_N : N;-fun venally_Adv : Adv;-fun vend_V2 : V2;-fun vendee_N : N;-fun vender_N : N;-fun vendetta_N : N;-fun vendor_N : N;-fun veneer_N : N;-fun veneer_V2 : V2;-fun venerable_A : A;-fun venerate_V2 : V2;-fun veneration_N : N;-fun venereal_A : A;-fun venetian_A : A;-fun venezia_PN : PN;-fun venezuela_PN : PN;-fun venezuelan_A : A;-fun venezuelan_N : N;-fun vengeance_N : N;-fun vengeful_A : A;-fun venial_A : A;-fun venice_PN : PN;-fun venison_N : N;-fun venom_N : N;-fun venomed_A : A;-fun venomous_A : A;-fun venomously_Adv : Adv;-fun venous_A : A;-fun vent_N : N;-fun vent_V2 : V2;-fun vent_hole_N : N;-fun ventilate_V2 : V2;-fun ventilation_N : N;-fun ventilator_N : N;-fun ventnor_PN : PN;-fun ventral_A : A;-fun ventricle_N : N;-fun ventricular_A : A;-fun ventriloquism_N : N;-fun ventriloquist_N : N;-fun venture_N : N;-fun venture_V : V;-fun venture_V2 : V2;-fun venturesome_A : A;-fun venturous_A : A;-fun venue_N : N;-fun venus_PN : PN;-fun vera_PN : PN;-fun veracious_A : A;-fun veraciously_Adv : Adv;-fun veracity_N : N;-fun veranda_N : N;-fun verandah_N : N;-fun verb_N : N;-fun verbal_A : A;-fun verbalize_V2 : V2;-fun verbally_Adv : Adv;-fun verbatim_A : A;-fun verbatim_Adv : Adv;-fun verbena_N : N;-fun verbiage_N : N;-fun verbose_A : A;-fun verbosely_Adv : Adv;-fun verboseness_N : N;-fun verbosity_N : N;-fun verdancy_N : N;-fun verdant_A : A;-fun verdict_N : N;-fun verdigris_N : N;-fun verdure_N : N;-fun verey_A : A;-fun verge_N : N;-fun verge_V : V;-fun verger_N : N;-fun verifiable_A : A;-fun verification_N : N;-fun verify_V2 : V2;-fun verily_Adv : Adv;-fun verisimilitude_N : N;-fun veritable_A : A;-fun verity_N : N;-fun vermicelli_N : N;-fun vermiform_A : A;-fun vermilion_A : A;-fun vermilion_N : N;-fun vermin_N : N;-fun verminous_A : A;-fun vermont_PN : PN;-fun vermouth_N : N;-fun vernacular_A : A;-fun vernacular_N : N;-fun vernal_A : A;-fun vernon_PN : PN;-fun verona_PN : PN;-fun veronica_N : N;-fun veronica_PN : PN;-fun verruca_N : N;-fun versatile_A : A;-fun versatility_N : N;-fun verse_N : N;-fun versed_A : A;-fun versification_N : N;-fun versifier_N : N;-fun versify_V : V;-fun versify_V2 : V2;-fun version_N : N;-fun verso_N : N;-fun vertebra_N : N;-fun vertebrate_A : A;-fun vertebrate_N : N;-fun vertex_N : N;-fun vertical_A : A;-fun vertical_N : N;-fun vertically_Adv : Adv;-fun vertiginous_A : A;-fun vertigo_N : N;-fun verve_N : N;-fun very_A : A;-fun very_Adv : Adv;-fun vesicle_N : N;-fun vesicular_A : A;-fun vessel_N : N;-fun vest_N : N;-fun vest_V : V;-fun vest_V2 : V2;-fun vestal_A : A;-fun vestal_N : N;-fun vestibule_N : N;-fun vestige_N : N;-fun vestigial_A : A;-fun vestment_N : N;-fun vestry_N : N;-fun vestryman_N : N;-fun vesture_N : N;-fun vesture_V2 : V2;-fun vet_N : N;-fun vet_V2 : V2;-fun vetch_N : N;-fun veteran_N : N;-fun veterinary_A : A;-fun veto_N : N;-fun veto_V2 : V2;-fun vex_V2 : V2;-fun vexation_N : N;-fun vexatious_A : A;-fun vhf_PN : PN;-fun via_media_N : N;-fun viability_N : N;-fun viable_A : A;-fun viaduct_N : N;-fun vial_N : N;-fun vibrant_A : A;-fun vibraphone_N : N;-fun vibrate_V : V;-fun vibrate_V2 : V2;-fun vibration_N : N;-fun vibrato_N : N;-fun vibrator_N : N;-fun vic_PN : PN;-fun vicar_N : N;-fun vicarage_N : N;-fun vicarious_A : A;-fun vicariously_Adv : Adv;-fun vice_N : N;-fun vice_versa_Adv : Adv;-fun vicenza_PN : PN;-fun viceregal_A : A;-fun vicereine_N : N;-fun viceroy_N : N;-fun vicinity_N : N;-fun vicious_A : A;-fun viciously_Adv : Adv;-fun viciousness_N : N;-fun vicissitude_N : N;-fun vicky_PN : PN;-fun victim_N : N;-fun victimization_N : N;-fun victimize_V2 : V2;-fun victor_N : N;-fun victor_PN : PN;-fun victoria_N : N;-fun victoria_PN : PN;-fun victorian_A : A;-fun victorian_N : N;-fun victoriana_N : N;-fun victorious_A : A;-fun victoriously_Adv : Adv;-fun victory_N : N;-fun victual_N : N;-fun victual_V : V;-fun victual_V2 : V2;-fun victualler_N : N;-fun vicuna_N : N;-fun videlicet_Adv : Adv;-fun video_N : N;-fun videotape_N : N;-fun videotape_V2 : V2;-fun vie_V : V;-fun vienna_PN : PN;-fun vietnam_PN : PN;-fun vietnamese_A : A;-fun vietnamese_N : N;-fun view_N : N;-fun view_V2 : V2;-fun viewer_N : N;-fun viewfinder_N : N;-fun viewless_A : A;-fun viewpark_PN : PN;-fun viewpoint_N : N;-fun vigil_N : N;-fun vigilance_N : N;-fun vigilant_A : A;-fun vigilante_N : N;-fun vigilantly_Adv : Adv;-fun vignette_N : N;-fun vigo_PN : PN;-fun vigorous_A : A;-fun vigorously_Adv : Adv;-fun vigour_N : N;-fun viking_N : N;-fun vile_A : A;-fun vilely_Adv : Adv;-fun vileness_N : N;-fun vilification_N : N;-fun vilify_V2 : V2;-fun villa_N : N;-fun village_N : N;-fun villager_N : N;-fun villain_N : N;-fun villainess_N : N;-fun villainous_A : A;-fun villainy_N : N;-fun villein_N : N;-fun villeinage_N : N;-fun vim_N : N;-fun vinaigrette_N : N;-fun vince_PN : PN;-fun vincent_PN : PN;-fun vindicate_V2 : V2;-fun vindication_N : N;-fun vindictive_A : A;-fun vindictively_Adv : Adv;-fun vindictiveness_N : N;-fun vine_N : N;-fun vinegar_N : N;-fun vinegary_A : A;-fun vinery_N : N;-fun vineyard_N : N;-fun vino_N : N;-fun vinous_A : A;-fun vintage_N : N;-fun vintner_N : N;-fun vinyl_N : N;-fun viol_N : N;-fun viola_N : N;-fun viola_PN : PN;-fun violate_V2 : V2;-fun violation_N : N;-fun violence_N : N;-fun violent_A : A;-fun violently_Adv : Adv;-fun violet_N : N;-fun violet_PN : PN;-fun violin_N : N;-fun violinist_N : N;-fun vip_N : N;-fun viper_N : N;-fun vips_N : N;-fun virago_N : N;-fun virgin_A : A;-fun virgin_N : N;-fun virginal_A : A;-fun virginal_N : N;-fun virginia_N : N;-fun virginia_PN : PN;-fun virginia_water_PN : PN;-fun virginity_N : N;-fun virgo_PN : PN;-fun virgule_N : N;-fun virile_A : A;-fun virility_N : N;-fun virology_N : N;-fun virtu_N : N;-fun virtual_A : A;-fun virtually_Adv : Adv;-fun virtue_N : N;-fun virtuosity_N : N;-fun virtuoso_N : N;-fun virtuous_A : A;-fun virtuously_Adv : Adv;-fun virulence_N : N;-fun virulent_A : A;-fun virulently_Adv : Adv;-fun virus_N : N;-fun vis_a_vis_Adv : Adv;-fun visa_N : N;-fun visa_V2 : V2;-fun visage_N : N;-fun visaged_A : A;-fun visceral_A : A;-fun viscid_A : A;-fun viscosity_N : N;-fun viscount_N : N;-fun viscountcy_N : N;-fun viscountess_N : N;-fun viscous_A : A;-fun visibility_N : N;-fun visible_A : A;-fun visibly_Adv : Adv;-fun vision_N : N;-fun visionary_A : A;-fun visionary_N : N;-fun visit_N : N;-fun visit_V : V;-fun visit_V2 : V2;-fun visitant_N : N;-fun visitation_N : N;-fun visiting_N : N;-fun visitor_N : N;-fun visor_N : N;-fun vista_N : N;-fun visual_A : A;-fun visualization_N : N;-fun visualize_V2 : V2;-fun visually_Adv : Adv;-fun vital_A : A;-fun vitalism_N : N;-fun vitalist_N : N;-fun vitality_N : N;-fun vitalize_V2 : V2;-fun vitally_Adv : Adv;-fun vitamin_N : N;-fun vitiate_V2 : V2;-fun vitoria_PN : PN;-fun vitreous_A : A;-fun vitrify_V : V;-fun vitrify_V2 : V2;-fun vitriol_N : N;-fun vitriolic_A : A;-fun vituperate_V2 : V2;-fun vituperation_N : N;-fun vituperative_A : A;-fun viv_PN : PN;-fun viva_N : N;-fun viva_voce_A : A;-fun viva_voce_Adv : Adv;-fun viva_voce_N : N;-fun vivace_Adv : Adv;-fun vivacious_A : A;-fun vivaciously_Adv : Adv;-fun vivacity_N : N;-fun vivian_PN : PN;-fun vivid_A : A;-fun vividly_Adv : Adv;-fun vividness_N : N;-fun vivien_PN : PN;-fun vivienne_PN : PN;-fun viviparous_A : A;-fun vivisect_V2 : V2;-fun vivisection_N : N;-fun vivisectionist_N : N;-fun vixen_N : N;-fun vixenish_A : A;-fun viz_PN : PN;-fun vizier_N : N;-fun vocabulary_N : N;-fun vocal_A : A;-fun vocalist_N : N;-fun vocalize_V2 : V2;-fun vocally_Adv : Adv;-fun vocation_N : N;-fun vocational_A : A;-fun vocative_A : A;-fun vocative_N : N;-fun vociferate_V : V;-fun vociferate_V2 : V2;-fun vociferation_N : N;-fun vociferous_A : A;-fun vodka_N : N;-fun vogue_N : N;-fun voice_N : N;-fun voice_V2 : V2;-fun voiced_A : A;-fun voiceless_A : A;-fun void_A : A;-fun void_N : N;-fun void_V2 : V2;-fun voile_N : N;-fun vol_N : N;-fun volatile_A : A;-fun volatility_N : N;-fun volcanic_A : A;-fun volcano_N : N;-fun vole_N : N;-fun volgograd_PN : PN;-fun volition_N : N;-fun volitional_A : A;-fun volley_N : N;-fun volley_V : V;-fun volley_V2 : V2;-fun volleyball_N : N;-fun vols_N : N;-fun volt_N : N;-fun voltage_N : N;-fun volte_face_N : N;-fun volubility_N : N;-fun voluble_A : A;-fun volubly_Adv : Adv;-fun volume_N : N;-fun voluminous_A : A;-fun voluntarily_Adv : Adv;-fun voluntary_A : A;-fun voluntary_N : N;-fun volunteer_N : N;-fun volunteer_V : V;-fun volunteer_V2 : V2;-fun voluptuary_N : N;-fun voluptuous_A : A;-fun voluptuously_Adv : Adv;-fun voluptuousness_N : N;-fun volute_N : N;-fun voluted_A : A;-fun vomit_N : N;-fun vomit_V : V;-fun vomit_V2 : V2;-fun voodoo_N : N;-fun voodooism_N : N;-fun voracious_A : A;-fun voraciously_Adv : Adv;-fun voracity_N : N;-fun voronezh_PN : PN;-fun vortex_N : N;-fun votary_N : N;-fun vote_N : N;-fun vote_V : V;-fun vote_V2 : V2;-fun voteless_A : A;-fun voter_N : N;-fun votive_A : A;-fun vouch_V : V;-fun voucher_N : N;-fun vouchsafe_V2 : V2;-fun vow_N : N;-fun vow_V2 : V2;-fun vowel_N : N;-fun vox_N : N;-fun vox_populi_N : N;-fun voyage_N : N;-fun voyage_V : V;-fun voyager_N : N;-fun voyeur_N : N;-fun voyeurism_N : N;-fun voyeuristic_A : A;-fun voyeuristically_Adv : Adv;-fun vp_N : N;-fun vs_PN : PN;-fun vso_PN : PN;-fun vulcanite_N : N;-fun vulcanization_N : N;-fun vulcanize_V2 : V2;-fun vulgar_A : A;-fun vulgarian_N : N;-fun vulgarism_N : N;-fun vulgarity_N : N;-fun vulgarization_N : N;-fun vulgarize_V2 : V2;-fun vulgarly_Adv : Adv;-fun vulgate_N : N;-fun vulnerability_N : N;-fun vulnerable_A : A;-fun vulpine_A : A;-fun vulture_N : N;-fun vulva_N : N;-fun wad_N : N;-fun wad_V2 : V2;-fun wadding_N : N;-fun waddle_N : N;-fun waddle_V : V;-fun wade_V : V;-fun wade_V2 : V2;-fun wader_N : N;-fun wadi_N : N;-fun wafer_N : N;-fun waffle_N : N;-fun waffle_V : V;-fun waft_N : N;-fun waft_V2 : V2;-fun wag_N : N;-fun wag_V : V;-fun wag_V2 : V2;-fun wage_N : N;-fun wage_V2 : V2;-fun wage_claim_N : N;-fun wage_earner_N : N;-fun wage_freeze_N : N;-fun wager_N : N;-fun wager_V : V;-fun wager_V2 : V2;-fun waggery_N : N;-fun waggish_A : A;-fun waggishly_Adv : Adv;-fun waggishness_N : N;-fun waggle_V : V;-fun waggle_V2 : V2;-fun waggon_N : N;-fun waggoner_N : N;-fun wagon_lit_N : N;-fun wagtail_N : N;-fun waif_N : N;-fun wail_N : N;-fun wail_V : V;-fun wail_V2 : V2;-fun wain_N : N;-fun wainscot_N : N;-fun wainscoted_A : A;-fun waist_N : N;-fun waist_deep_A : A;-fun waist_deep_Adv : Adv;-fun waist_high_A : A;-fun waist_high_Adv : Adv;-fun waistband_N : N;-fun waistcoat_N : N;-fun waistline_N : N;-fun wait_N : N;-fun wait_V : V;-fun wait_V2 : V2;-fun waiter_N : N;-fun waiting_list_N : N;-fun waiting_room_N : N;-fun waitress_N : N;-fun waive_V2 : V2;-fun waiver_N : N;-fun wake_N : N;-fun wake_V : V;-fun wake_V2 : V2;-fun wakefield_PN : PN;-fun wakeful_A : A;-fun wakefulness_N : N;-fun waken_V : V;-fun waken_V2 : V2;-fun waking_A : A;-fun wale_N : N;-fun wales_PN : PN;-fun walk_N : N;-fun walk_V : V;-fun walk_V2 : V2;-fun walkabout_N : N;-fun walkaway_N : N;-fun walker_N : N;-fun walkie_talkie_N : N;-fun walking_N : N;-fun walkout_N : N;-fun walkover_N : N;-fun wall_N : N;-fun wall_V2 : V2;-fun wall_eyed_A : A;-fun wall_painting_N : N;-fun wall_street_PN : PN;-fun wallaby_N : N;-fun wallace_PN : PN;-fun wallah_N : N;-fun wallasey_PN : PN;-fun wallet_N : N;-fun wallflower_N : N;-fun wallingford_PN : PN;-fun wallop_N : N;-fun wallop_V2 : V2;-fun walloping_A : A;-fun wallow_N : N;-fun wallow_V : V;-fun wallpaper_N : N;-fun wallsend_PN : PN;-fun wally_PN : PN;-fun walnut_N : N;-fun walrus_N : N;-fun walsall_PN : PN;-fun walsham_PN : PN;-fun walter_PN : PN;-fun waltham_forest_PN : PN;-fun walton_PN : PN;-fun waltz_N : N;-fun waltz_V : V;-fun waltz_V2 : V2;-fun wampum_N : N;-fun wan_A : A;-fun wand_N : N;-fun wander_V : V;-fun wander_V2 : V2;-fun wanderer_N : N;-fun wanderlust_N : N;-fun wandsworth_PN : PN;-fun wane_N : N;-fun wane_V : V;-fun wangle_N : N;-fun wangle_V2 : V2;-fun wank_N : N;-fun wank_V : V;-fun wanly_Adv : Adv;-fun wanness_N : N;-fun want_N : N;-fun want_V : V;-fun want_V2 : V2;-fun want_ad_N : N;-fun wantage_PN : PN;-fun wanton_A : A;-fun wanton_N : N;-fun wanton_V : V;-fun wantonly_Adv : Adv;-fun wantonness_N : N;-fun war_N : N;-fun war_V : V;-fun war_baby_N : N;-fun war_bride_N : N;-fun war_cloud_N : N;-fun war_cry_N : N;-fun war_dance_N : N;-fun war_god_N : N;-fun war_torn_A : A;-fun war_widow_N : N;-fun warble_N : N;-fun warble_V : V;-fun warble_V2 : V2;-fun warbler_N : N;-fun ward_N : N;-fun ward_V2 : V2;-fun warden_N : N;-fun warder_N : N;-fun wardress_N : N;-fun wardrobe_N : N;-fun wardroom_N : N;-fun ware_N : N;-fun ware_PN : PN;-fun ware_V2 : V2;-fun warehouse_N : N;-fun warehousing_N : N;-fun warfare_N : N;-fun warhead_N : N;-fun warhorse_N : N;-fun warily_Adv : Adv;-fun wariness_N : N;-fun warley_PN : PN;-fun warlike_A : A;-fun warlord_N : N;-fun warm_A : A;-fun warm_V : V;-fun warm_V2 : V2;-fun warm_blooded_A : A;-fun warm_hearted_A : A;-fun warmer_N : N;-fun warming_pan_N : N;-fun warminster_PN : PN;-fun warmly_Adv : Adv;-fun warmonger_N : N;-fun warmth_N : N;-fun warn_V2 : V2;-fun warning_A : A;-fun warning_N : N;-fun warp_N : N;-fun warp_V : V;-fun warp_V2 : V2;-fun warpaint_N : N;-fun warpath_N : N;-fun warrant_N : N;-fun warrant_V2 : V2;-fun warrantee_N : N;-fun warrantor_N : N;-fun warranty_N : N;-fun warren_N : N;-fun warrington_PN : PN;-fun warrior_N : N;-fun warsaw_PN : PN;-fun warship_N : N;-fun warsop_PN : PN;-fun wart_N : N;-fun warthog_N : N;-fun wartime_N : N;-fun warwick_PN : PN;-fun warwickshire_PN : PN;-fun wary_A : A;-fun wash_N : N;-fun wash_V : V;-fun wash_V2 : V2;-fun wash_drawing_N : N;-fun wash_hand_basin_N : N;-fun wash_hand_stand_N : N;-fun wash_house_N : N;-fun wash_leather_N : N;-fun washable_A : A;-fun washbasin_N : N;-fun washboard_N : N;-fun washbowl_N : N;-fun washcloth_N : N;-fun washday_N : N;-fun washer_N : N;-fun washerwoman_N : N;-fun washing_N : N;-fun washing_day_N : N;-fun washing_machine_N : N;-fun washing_up_N : N;-fun washington_PN : PN;-fun washington_dc_PN : PN;-fun washout_N : N;-fun washroom_N : N;-fun washstand_N : N;-fun washtub_N : N;-fun washy_A : A;-fun wasp_N : N;-fun wasp_waisted_A : A;-fun waspish_A : A;-fun wassail_N : N;-fun wastage_N : N;-fun waste_A : A;-fun waste_N : N;-fun waste_V : V;-fun waste_V2 : V2;-fun waste_paper_basket_N : N;-fun waste_pipe_N : N;-fun wastebasket_N : N;-fun wastebin_N : N;-fun wasteful_A : A;-fun wastefully_Adv : Adv;-fun wasteland_N : N;-fun waster_N : N;-fun wastrel_N : N;-fun watch_N : N;-fun watch_V : V;-fun watch_V2 : V2;-fun watch_chain_N : N;-fun watch_glass_N : N;-fun watch_guard_N : N;-fun watch_key_N : N;-fun watchdog_N : N;-fun watcher_N : N;-fun watchful_A : A;-fun watchfully_Adv : Adv;-fun watchfulness_N : N;-fun watchmaker_N : N;-fun watchman_N : N;-fun watchtower_N : N;-fun watchword_N : N;-fun water_N : N;-fun water_V : V;-fun water_V2 : V2;-fun water_biscuit_N : N;-fun water_blister_N : N;-fun water_bottle_N : N;-fun water_buffalo_N : N;-fun water_butt_N : N;-fun water_cart_N : N;-fun water_closet_N : N;-fun water_finder_N : N;-fun water_glass_N : N;-fun water_hole_N : N;-fun water_ice_N : N;-fun water_jacket_N : N;-fun water_level_N : N;-fun water_lily_N : N;-fun water_line_N : N;-fun water_main_N : N;-fun water_nymph_N : N;-fun water_polo_N : N;-fun water_power_N : N;-fun water_rat_N : N;-fun water_rate_N : N;-fun water_skiing_N : N;-fun water_skin_N : N;-fun water_softener_N : N;-fun water_spaniel_N : N;-fun water_supply_N : N;-fun water_tower_N : N;-fun water_vole_N : N;-fun water_waggon_N : N;-fun water_wagon_N : N;-fun water_wheel_N : N;-fun water_worn_A : A;-fun waterbird_N : N;-fun waterborne_A : A;-fun watercannon_N : N;-fun waterchute_N : N;-fun watercolour_N : N;-fun watercolourist_N : N;-fun watercourse_N : N;-fun watercress_N : N;-fun waterfall_N : N;-fun waterford_PN : PN;-fun waterfowl_N : N;-fun waterfront_N : N;-fun waterhen_N : N;-fun waterhyacinth_N : N;-fun watering_can_N : N;-fun watering_cart_N : N;-fun waterless_A : A;-fun waterlogged_A : A;-fun waterloo_PN : PN;-fun waterman_N : N;-fun watermark_N : N;-fun watermelon_N : N;-fun watermill_N : N;-fun waterproof_A : A;-fun waterproof_N : N;-fun waterproof_V2 : V2;-fun watershed_N : N;-fun waterside_N : N;-fun waterspout_N : N;-fun watertable_N : N;-fun watertight_A : A;-fun waterway_N : N;-fun waterworks_N : N;-fun watery_A : A;-fun watford_PN : PN;-fun watt_N : N;-fun wattage_N : N;-fun wattle_N : N;-fun wave_N : N;-fun wave_V : V;-fun wave_V2 : V2;-fun wavelength_N : N;-fun waver_V : V;-fun waverer_N : N;-fun wavy_A : A;-fun wax_N : N;-fun wax_V : V;-fun wax_V2 : V2;-fun wax_chandler_N : N;-fun wax_paper_N : N;-fun waxen_A : A;-fun waxwork_N : N;-fun waxy_A : A;-fun way_Adv : Adv;-fun way_N : N;-fun way_out_A : A;-fun waybill_N : N;-fun wayfarer_N : N;-fun wayfaring_A : A;-fun waylay_V2 : V2;-fun wayne_PN : PN;-fun wayside_N : N;-fun wayward_A : A;-fun wc_N : N;-fun wcs_N : N;-fun weak_A : A;-fun weak_kneed_A : A;-fun weaken_V : V;-fun weaken_V2 : V2;-fun weakling_N : N;-fun weakly_A : A;-fun weakly_Adv : Adv;-fun weakness_N : N;-fun weal_N : N;-fun weald_N : N;-fun wealth_N : N;-fun wealthily_Adv : Adv;-fun wealthy_A : A;-fun wean_V2 : V2;-fun weapon_N : N;-fun weaponless_A : A;-fun wear_N : N;-fun wear_PN : PN;-fun wear_V : V;-fun wear_V2 : V2;-fun wearable_A : A;-fun wearer_N : N;-fun wearily_Adv : Adv;-fun weariness_N : N;-fun wearing_A : A;-fun wearisome_A : A;-fun weary_A : A;-fun weary_V : V;-fun weary_V2 : V2;-fun weasel_N : N;-fun weather_N : N;-fun weather_V : V;-fun weather_V2 : V2;-fun weather_beaten_A : A;-fun weather_bound_A : A;-fun weather_bureau_N : N;-fun weather_chart_N : N;-fun weather_glass_N : N;-fun weather_map_N : N;-fun weather_ship_N : N;-fun weather_station_N : N;-fun weather_vane_N : N;-fun weatherboarding_N : N;-fun weathercock_N : N;-fun weatherman_N : N;-fun weatherproof_A : A;-fun weave_N : N;-fun weave_V : V;-fun weave_V2 : V2;-fun weaver_N : N;-fun weaverbird_N : N;-fun web_N : N;-fun web_footed_A : A;-fun web_toed_A : A;-fun webbed_A : A;-fun webbing_N : N;-fun wed_PN : PN;-fun wed_V : V;-fun wed_V2 : V2;-fun wedding_N : N;-fun wedding_cake_N : N;-fun wedding_ring_N : N;-fun wedge_N : N;-fun wedge_V2 : V2;-fun wedlock_N : N;-fun wednesday_N : N;-fun wednesday_PN : PN;-fun wee_A : A;-fun wee_N : N;-fun wee_V : V;-fun wee_wee_N : N;-fun weed_N : N;-fun weed_V : V;-fun weed_V2 : V2;-fun weedkiller_N : N;-fun weedy_A : A;-fun week_N : N;-fun weekday_N : N;-fun weekend_N : N;-fun weekend_V : V;-fun weekender_N : N;-fun weekly_A : A;-fun weekly_Adv : Adv;-fun weekly_N : N;-fun weeny_A : A;-fun weep_V : V;-fun weep_V2 : V2;-fun weeping_A : A;-fun weevil_N : N;-fun weft_N : N;-fun weigh_V : V;-fun weigh_V2 : V2;-fun weighbridge_N : N;-fun weighing_machine_N : N;-fun weight_N : N;-fun weight_V2 : V2;-fun weightily_Adv : Adv;-fun weightiness_N : N;-fun weightless_A : A;-fun weightlessness_N : N;-fun weightlifting_N : N;-fun weighty_A : A;-fun weir_N : N;-fun weird_A : A;-fun weirdie_N : N;-fun weirdly_Adv : Adv;-fun weirdness_N : N;-fun welcome_A : A;-fun welcome_N : N;-fun welcome_V2 : V2;-fun weld_N : N;-fun weld_V : V;-fun weld_V2 : V2;-fun welder_N : N;-fun welfare_N : N;-fun welkin_N : N;-fun well_A : A;-fun well_Adv : Adv;-fun well_N : N;-fun well_V : V;-fun well_adjusted_A : A;-fun well_advised_A : A;-fun well_appointed_A : A;-fun well_balanced_A : A;-fun well_behaved_A : A;-fun well_being_N : N;-fun well_born_A : A;-fun well_bred_A : A;-fun well_conducted_A : A;-fun well_connected_A : A;-fun well_disposed_A : A;-fun well_doer_N : N;-fun well_doing_N : N;-fun well_favoured_A : A;-fun well_found_A : A;-fun well_founded_A : A;-fun well_groomed_A : A;-fun well_grounded_A : A;-fun well_heeled_A : A;-fun well_informed_A : A;-fun well_intentioned_A : A;-fun well_knit_A : A;-fun well_known_A : A;-fun well_lined_A : A;-fun well_marked_A : A;-fun well_meaning_A : A;-fun well_meant_A : A;-fun well_nigh_Adv : Adv;-fun well_read_A : A;-fun well_rounded_A : A;-fun well_set_A : A;-fun well_shaven_A : A;-fun well_spoken_A : A;-fun well_timed_A : A;-fun well_to_do_A : A;-fun well_tried_A : A;-fun well_turned_A : A;-fun well_water_N : N;-fun well_wisher_N : N;-fun well_worn_A : A;-fun wellhead_N : N;-fun wellingborough_PN : PN;-fun wellington_N : N;-fun wellington_PN : PN;-fun wells_PN : PN;-fun welsh_A : A;-fun welsh_N : N;-fun welsh_V : V;-fun welsher_N : N;-fun welshman_N : N;-fun welshpool_PN : PN;-fun welt_N : N;-fun welter_A : A;-fun welter_N : N;-fun welter_V : V;-fun welterweight_N : N;-fun welwyn_PN : PN;-fun welwyn_garden_city_PN : PN;-fun wen_N : N;-fun wench_N : N;-fun wench_V : V;-fun wend_V2 : V2;-fun wendover_PN : PN;-fun wendy_PN : PN;-fun werewolf_N : N;-fun wesleyan_A : A;-fun wesleyan_N : N;-fun west_Adv : Adv;-fun west_N : N;-fun west_bromwich_PN : PN;-fun west_country_A : A;-fun west_end_A : A;-fun westbury_PN : PN;-fun westerly_A : A;-fun westerly_Adv : Adv;-fun western_A : A;-fun western_N : N;-fun westerner_N : N;-fun westernization_N : N;-fun westernize_V2 : V2;-fun westernmost_A : A;-fun westhoughton_PN : PN;-fun westmeath_PN : PN;-fun westminster_PN : PN;-fun westmoreland_PN : PN;-fun weston_super_mare_PN : PN;-fun westward_A : A;-fun westward_Adv : Adv;-fun westwards_Adv : Adv;-fun wet_A : A;-fun wet_N : N;-fun wet_V2 : V2;-fun wet_nurse_N : N;-fun wether_N : N;-fun wetherby_PN : PN;-fun wetting_N : N;-fun wexford_PN : PN;-fun weymouth_PN : PN;-fun whack_N : N;-fun whack_V2 : V2;-fun whacked_A : A;-fun whacker_N : N;-fun whacking_A : A;-fun whacking_Adv : Adv;-fun whacking_N : N;-fun whale_N : N;-fun whale_V : V;-fun whalebone_N : N;-fun whaler_N : N;-fun whaley_bridge_PN : PN;-fun whaling_gun_N : N;-fun whang_Adv : Adv;-fun whang_N : N;-fun whang_V2 : V2;-fun wharf_N : N;-fun wharfage_N : N;-fun what_A : A;-fun what_for_N : N;-fun whate'er_A : A;-fun whatever_A : A;-fun whatnot_N : N;-fun whatsoe'er_A : A;-fun whatsoever_A : A;-fun wheat_N : N;-fun wheaten_A : A;-fun wheatley_hill_PN : PN;-fun wheedle_V2 : V2;-fun wheel_N : N;-fun wheel_V : V;-fun wheel_V2 : V2;-fun wheelbarrow_N : N;-fun wheelbase_N : N;-fun wheelchair_N : N;-fun wheelhouse_N : N;-fun wheelwright_N : N;-fun wheeze_N : N;-fun wheeze_V : V;-fun wheeze_V2 : V2;-fun wheezily_Adv : Adv;-fun wheeziness_N : N;-fun wheezy_A : A;-fun whelk_N : N;-fun whelp_N : N;-fun whelp_V : V;-fun when_Adv : Adv;-fun whence_Adv : Adv;-fun whencesoever_A : A;-fun whenever_Adv : Adv;-fun where_Adv : Adv;-fun whereabouts_Adv : Adv;-fun whereat_Adv : Adv;-fun whereby_Adv : Adv;-fun wherefore_Adv : Adv;-fun wherein_Adv : Adv;-fun whereof_Adv : Adv;-fun whereon_Adv : Adv;-fun wheresoever_Adv : Adv;-fun whereto_Adv : Adv;-fun whereunto_Adv : Adv;-fun whereupon_Adv : Adv;-fun wherever_Adv : Adv;-fun wherewith_Adv : Adv;-fun wherewithal_Adv : Adv;-fun wherewithal_N : N;-fun wherry_N : N;-fun whet_V2 : V2;-fun whetstone_N : N;-fun whey_N : N;-fun which_A : A;-fun whichever_A : A;-fun whichsoever_A : A;-fun whiff_N : N;-fun whig_N : N;-fun while_N : N;-fun while_V2 : V2;-fun whim_N : N;-fun whimper_N : N;-fun whimper_V : V;-fun whimper_V2 : V2;-fun whimsey_N : N;-fun whimsical_A : A;-fun whimsicality_N : N;-fun whimsically_Adv : Adv;-fun whimsy_N : N;-fun whin_N : N;-fun whine_N : N;-fun whine_V : V;-fun whine_V2 : V2;-fun whiner_N : N;-fun whinny_N : N;-fun whinny_V : V;-fun whip_N : N;-fun whip_V : V;-fun whip_V2 : V2;-fun whip_round_N : N;-fun whipcord_N : N;-fun whipper_in_N : N;-fun whippersnapper_N : N;-fun whippet_N : N;-fun whipping_N : N;-fun whipping_boy_N : N;-fun whipping_post_N : N;-fun whipping_top_N : N;-fun whippoorwill_N : N;-fun whippy_A : A;-fun whir_N : N;-fun whir_V : V;-fun whirl_N : N;-fun whirl_V : V;-fun whirl_V2 : V2;-fun whirligig_N : N;-fun whirlpool_N : N;-fun whirlwind_N : N;-fun whirr_N : N;-fun whirr_V : V;-fun whisk_N : N;-fun whisk_V : V;-fun whisk_V2 : V2;-fun whisker_N : N;-fun whiskered_A : A;-fun whiskey_N : N;-fun whisky_N : N;-fun whisper_N : N;-fun whisper_V : V;-fun whisper_V2 : V2;-fun whisperer_N : N;-fun whispering_N : N;-fun whispering_gallery_N : N;-fun whist_N : N;-fun whist_drive_N : N;-fun whistle_N : N;-fun whistle_V : V;-fun whistle_V2 : V2;-fun whistle_stop_N : N;-fun whit_N : N;-fun whitburn_PN : PN;-fun whitby_PN : PN;-fun whitchurch_PN : PN;-fun white_A : A;-fun white_N : N;-fun white_collar_A : A;-fun white_hot_A : A;-fun white_lipped_A : A;-fun white_livered_A : A;-fun whitebait_N : N;-fun whitehall_PN : PN;-fun whitehaven_PN : PN;-fun whiten_V : V;-fun whiten_V2 : V2;-fun whiteness_N : N;-fun whitening_N : N;-fun whitethorn_N : N;-fun whitewash_N : N;-fun whitewash_V2 : V2;-fun whither_Adv : Adv;-fun whithersoever_Adv : Adv;-fun whiting_N : N;-fun whitish_A : A;-fun whitley_bay_PN : PN;-fun whitlow_N : N;-fun whitstable_PN : PN;-fun whitsun_N : N;-fun whitsun_PN : PN;-fun whitsuntide_N : N;-fun whitsuntide_PN : PN;-fun whittle_V : V;-fun whittle_V2 : V2;-fun whittle_le_woods_PN : PN;-fun whittlesey_PN : PN;-fun whitworth_PN : PN;-fun whiz_N : N;-fun whiz_V : V;-fun whizz_kid_N : N;-fun who_N : N;-fun whodunit_N : N;-fun whole_A : A;-fun whole_N : N;-fun whole_wheat_N : N;-fun wholehearted_A : A;-fun wholeheartedly_Adv : Adv;-fun wholeheartedness_N : N;-fun wholemeal_N : N;-fun wholesale_A : A;-fun wholesale_Adv : Adv;-fun wholesale_N : N;-fun wholesaler_N : N;-fun wholesome_A : A;-fun wholesomely_Adv : Adv;-fun wholly_Adv : Adv;-fun whoop_N : N;-fun whoop_V : V;-fun whoop_V2 : V2;-fun whoopee_N : N;-fun whooping_cough_N : N;-fun whop_V2 : V2;-fun whopper_N : N;-fun whopping_A : A;-fun whopping_Adv : Adv;-fun whore_N : N;-fun whoremonger_N : N;-fun whorl_N : N;-fun whorled_A : A;-fun why_Adv : Adv;-fun why_N : N;-fun wi_N : N;-fun wick_N : N;-fun wick_PN : PN;-fun wicked_A : A;-fun wickedly_Adv : Adv;-fun wickedness_N : N;-fun wicker_N : N;-fun wickerwork_N : N;-fun wicket_N : N;-fun wicket_door_N : N;-fun wicket_gate_N : N;-fun wicket_keeper_N : N;-fun wickford_PN : PN;-fun wicklow_PN : PN;-fun wide_A : A;-fun wide_Adv : Adv;-fun wide_awake_A : A;-fun widely_Adv : Adv;-fun widen_V : V;-fun widen_V2 : V2;-fun widespread_A : A;-fun widgeon_N : N;-fun widnes_PN : PN;-fun widow_N : N;-fun widowed_A : A;-fun widower_N : N;-fun widowhood_N : N;-fun width_N : N;-fun wield_V2 : V2;-fun wiesbaden_PN : PN;-fun wife_N : N;-fun wifelike_A : A;-fun wifely_A : A;-fun wig_N : N;-fun wigan_PN : PN;-fun wigged_A : A;-fun wigging_N : N;-fun wiggle_N : N;-fun wiggle_V : V;-fun wiggle_V2 : V2;-fun wight_N : N;-fun wight_PN : PN;-fun wigwam_N : N;-fun wild_A : A;-fun wild_Adv : Adv;-fun wildcat_A : A;-fun wildebeest_N : N;-fun wilderness_N : N;-fun wildfire_N : N;-fun wildly_Adv : Adv;-fun wildness_N : N;-fun wile_N : N;-fun wilf_PN : PN;-fun wilfrid_PN : PN;-fun wilful_A : A;-fun wilfully_Adv : Adv;-fun wilfulness_N : N;-fun wilhelmshaven_PN : PN;-fun will_N : N;-fun will_PN : PN;-fun will_V : V;-fun will_V2 : V2;-fun will_o'_the_wisp_N : N;-fun willed_A : A;-fun willful_A : A;-fun william_PN : PN;-fun willie_PN : PN;-fun willing_A : A;-fun willingly_Adv : Adv;-fun willingness_N : N;-fun willington_PN : PN;-fun willow_N : N;-fun willow_pattern_N : N;-fun willow_tree_N : N;-fun willowy_A : A;-fun willpower_N : N;-fun willy_PN : PN;-fun willy_nilly_Adv : Adv;-fun wilmslow_PN : PN;-fun wilt_V : V;-fun wilt_V2 : V2;-fun wilton_N : N;-fun wiltshire_PN : PN;-fun wily_A : A;-fun wimbourne_PN : PN;-fun wimbourne_minster_PN : PN;-fun wimple_N : N;-fun win_N : N;-fun win_V : V;-fun win_V2 : V2;-fun wince_N : N;-fun wince_V2 : V2;-fun winceyette_N : N;-fun winch_N : N;-fun winch_V2 : V2;-fun winchester_PN : PN;-fun wind_N : N;-fun wind_V : V;-fun wind_V2 : V2;-fun wind_gauge_N : N;-fun wind_tunnel_N : N;-fun windbag_N : N;-fun windblown_A : A;-fun windbreak_N : N;-fun windbreaker_N : N;-fun windcheater_N : N;-fun windermere_PN : PN;-fun windfall_N : N;-fun windflower_N : N;-fun windily_Adv : Adv;-fun windiness_N : N;-fun winding_sheet_N : N;-fun windjammer_N : N;-fun windlass_N : N;-fun windless_A : A;-fun windmill_N : N;-fun window_N : N;-fun window_box_N : N;-fun window_dressing_N : N;-fun windowpane_N : N;-fun windowsill_N : N;-fun windpipe_N : N;-fun windscreen_N : N;-fun windscreen_wiper_N : N;-fun windshield_N : N;-fun windsock_N : N;-fun windsor_PN : PN;-fun windswept_A : A;-fun windward_A : A;-fun windward_N : N;-fun windy_A : A;-fun wine_N : N;-fun wine_V2 : V2;-fun wineglass_N : N;-fun winepress_N : N;-fun wineskin_N : N;-fun wing_N : N;-fun wing_V : V;-fun wing_V2 : V2;-fun wing_commander_N : N;-fun wing_nut_N : N;-fun wing_screw_N : N;-fun wingate_PN : PN;-fun winged_A : A;-fun winger_N : N;-fun wingless_A : A;-fun wingspan_N : N;-fun wingspread_N : N;-fun winifred_PN : PN;-fun wink_N : N;-fun wink_V : V;-fun wink_V2 : V2;-fun winkle_N : N;-fun winkle_V2 : V2;-fun winner_N : N;-fun winnie_PN : PN;-fun winning_post_N : N;-fun winnipeg_PN : PN;-fun winnow_V2 : V2;-fun winsford_PN : PN;-fun winsome_A : A;-fun winsomely_Adv : Adv;-fun winsomeness_N : N;-fun winter_N : N;-fun winter_V : V;-fun wintery_A : A;-fun wintry_A : A;-fun wipe_N : N;-fun wipe_V : V;-fun wipe_V2 : V2;-fun wiper_N : N;-fun wire_N : N;-fun wire_V : V;-fun wire_V2 : V2;-fun wire_haired_A : A;-fun wireless_A : A;-fun wireless_N : N;-fun wirepuller_N : N;-fun wireworm_N : N;-fun wiring_N : N;-fun wiry_A : A;-fun wisbech_PN : PN;-fun wisconsin_PN : PN;-fun wisdom_N : N;-fun wisdom_tooth_N : N;-fun wise_A : A;-fun wise_N : N;-fun wiseacre_N : N;-fun wisecrack_N : N;-fun wisecrack_V : V;-fun wisely_Adv : Adv;-fun wish_N : N;-fun wish_V : V;-fun wish_V2 : V2;-fun wishbone_N : N;-fun wishful_A : A;-fun wishfully_Adv : Adv;-fun wishing_cap_N : N;-fun wishy_washy_A : A;-fun wisp_N : N;-fun wispy_A : A;-fun wisteria_N : N;-fun wistful_A : A;-fun wistfully_Adv : Adv;-fun wit_N : N;-fun witch_N : N;-fun witch_doctor_N : N;-fun witch_elm_N : N;-fun witch_hazel_N : N;-fun witch_hunt_N : N;-fun witchcraft_N : N;-fun witchery_N : N;-fun witching_A : A;-fun withal_Adv : Adv;-fun witham_PN : PN;-fun withdraw_V : V;-fun withdraw_V2 : V2;-fun withdrawal_N : N;-fun withe_N : N;-fun wither_V : V;-fun wither_V2 : V2;-fun witheringly_Adv : Adv;-fun withernsea_PN : PN;-fun withhold_V2 : V2;-fun within_Adv : Adv;-fun without_Adv : Adv;-fun withstand_V2 : V2;-fun withy_N : N;-fun witless_A : A;-fun witness_N : N;-fun witness_V : V;-fun witness_V2 : V2;-fun witness_box_N : N;-fun witness_stand_N : N;-fun witney_PN : PN;-fun witticism_N : N;-fun wittily_Adv : Adv;-fun wittingly_Adv : Adv;-fun witty_A : A;-fun wive_V : V;-fun wive_V2 : V2;-fun wizard_A : A;-fun wizard_N : N;-fun wizardry_N : N;-fun wizened_A : A;-fun wk_N : N;-fun woad_N : N;-fun wobble_V : V;-fun wobble_V2 : V2;-fun wobbler_N : N;-fun wobbly_A : A;-fun woburn_PN : PN;-fun woe_N : N;-fun woebegone_A : A;-fun woeful_A : A;-fun woefully_Adv : Adv;-fun wokingham_PN : PN;-fun wold_N : N;-fun wolf's_bane_N : N;-fun wolf_N : N;-fun wolf_V2 : V2;-fun wolf_cub_N : N;-fun wolfhound_N : N;-fun wolfish_A : A;-fun wolfram_N : N;-fun wolverhampton_PN : PN;-fun wolverton_PN : PN;-fun woman_N : N;-fun womanhood_N : N;-fun womanish_A : A;-fun womanize_V : V;-fun womanizer_N : N;-fun womankind_N : N;-fun womanlike_A : A;-fun womanly_A : A;-fun womb_N : N;-fun wombat_N : N;-fun wombourne_PN : PN;-fun wonder_N : N;-fun wonder_V : V;-fun wonder_V2 : V2;-fun wonder_struck_A : A;-fun wonderful_A : A;-fun wonderfully_Adv : Adv;-fun wonderingly_Adv : Adv;-fun wonderland_N : N;-fun wonderment_N : N;-fun wondrous_A : A;-fun wondrous_Adv : Adv;-fun wonky_A : A;-fun wont_A : A;-fun wont_N : N;-fun wonted_A : A;-fun woo_V2 : V2;-fun wood_N : N;-fun wood_block_N : N;-fun wood_pulp_N : N;-fun woodbine_N : N;-fun woodbridge_PN : PN;-fun woodcock_N : N;-fun woodcraft_N : N;-fun woodcut_N : N;-fun woodcutter_N : N;-fun wooded_A : A;-fun wooden_A : A;-fun woodenheaded_A : A;-fun woodland_N : N;-fun woodlouse_N : N;-fun woodman_N : N;-fun woodpecker_N : N;-fun woodpile_N : N;-fun woodshed_N : N;-fun woodsman_N : N;-fun woodwind_N : N;-fun woodwork_N : N;-fun woodworm_N : N;-fun woody_A : A;-fun wooer_N : N;-fun woof_N : N;-fun woofer_N : N;-fun wool_N : N;-fun woolen_A : A;-fun woolgathering_A : A;-fun woolgathering_N : N;-fun woollen_A : A;-fun woolly_A : A;-fun wooly_A : A;-fun wooly_N : N;-fun wootton_bassett_PN : PN;-fun worcester_PN : PN;-fun word_N : N;-fun word_V2 : V2;-fun word_division_N : N;-fun word_painter_N : N;-fun word_perfect_A : A;-fun word_picture_N : N;-fun word_splitting_N : N;-fun wordbook_N : N;-fun wordily_Adv : Adv;-fun wordiness_N : N;-fun wording_N : N;-fun wordless_A : A;-fun wordy_A : A;-fun work_N : N;-fun work_V : V;-fun work_V2 : V2;-fun work_in_N : N;-fun work_out_N : N;-fun work_study_N : N;-fun workable_A : A;-fun workaday_A : A;-fun workbag_N : N;-fun workbasket_N : N;-fun workbench_N : N;-fun workbook_N : N;-fun workbox_N : N;-fun workday_N : N;-fun worker_N : N;-fun workhouse_N : N;-fun working_A : A;-fun working_N : N;-fun working_class_A : A;-fun working_out_N : N;-fun workington_PN : PN;-fun workman_N : N;-fun workmanlike_A : A;-fun workmanship_N : N;-fun workmate_N : N;-fun workroom_N : N;-fun workshop_N : N;-fun workshy_A : A;-fun worksop_PN : PN;-fun worktable_N : N;-fun world_N : N;-fun world_weary_A : A;-fun worldliness_N : N;-fun worldly_A : A;-fun worldwide_A : A;-fun worm_N : N;-fun worm_V2 : V2;-fun worm_eaten_A : A;-fun worm_gear_N : N;-fun wormcast_N : N;-fun wormhole_N : N;-fun wormwood_N : N;-fun wormy_A : A;-fun worried_A : A;-fun worrisome_A : A;-fun worry_N : N;-fun worry_V : V;-fun worry_V2 : V2;-fun worrying_A : A;-fun worryingly_Adv : Adv;-fun worse_Adv : Adv;-fun worse_N : N;-fun worsen_V : V;-fun worsen_V2 : V2;-fun worship_N : N;-fun worship_V : V;-fun worship_V2 : V2;-fun worshipful_A : A;-fun worshipper_N : N;-fun worst_Adv : Adv;-fun worst_N : N;-fun worst_V2 : V2;-fun worsted_N : N;-fun worth_A : A;-fun worth_N : N;-fun worthily_Adv : Adv;-fun worthiness_N : N;-fun worthing_PN : PN;-fun worthless_A : A;-fun worthlessly_Adv : Adv;-fun worthlessness_N : N;-fun worthwhile_A : A;-fun worthy_A : A;-fun worthy_N : N;-fun would_be_A : A;-fun wound_N : N;-fun wound_V2 : V2;-fun wow_N : N;-fun wpb_N : N;-fun wpm_N : N;-fun wrac_N : N;-fun wrack_N : N;-fun wraf_N : N;-fun wraith_N : N;-fun wrangle_N : N;-fun wrangle_V : V;-fun wrap_N : N;-fun wrap_V : V;-fun wrap_V2 : V2;-fun wrapper_N : N;-fun wrapping_N : N;-fun wrath_N : N;-fun wrathful_A : A;-fun wrathfully_Adv : Adv;-fun wreak_V2 : V2;-fun wreath_N : N;-fun wreathe_V : V;-fun wreathe_V2 : V2;-fun wreck_N : N;-fun wreck_V2 : V2;-fun wreckage_N : N;-fun wrecker_N : N;-fun wren_N : N;-fun wrench_N : N;-fun wrench_V2 : V2;-fun wrest_V2 : V2;-fun wrestle_N : N;-fun wrestle_V : V;-fun wrestler_N : N;-fun wretch_N : N;-fun wretched_A : A;-fun wretchedly_Adv : Adv;-fun wretchedness_N : N;-fun wrexham_PN : PN;-fun wrick_N : N;-fun wrick_V2 : V2;-fun wriggle_N : N;-fun wriggle_V : V;-fun wriggle_V2 : V2;-fun wriggler_N : N;-fun wright_N : N;-fun wring_N : N;-fun wring_V2 : V2;-fun wringer_N : N;-fun wrinkle_N : N;-fun wrinkle_V : V;-fun wrinkle_V2 : V2;-fun wrinkly_A : A;-fun wrist_N : N;-fun wristband_N : N;-fun wristlet_N : N;-fun wristwatch_N : N;-fun writ_N : N;-fun writ_large_A : A;-fun write_V : V;-fun write_V2 : V2;-fun write_off_N : N;-fun write_up_N : N;-fun writer_N : N;-fun writhe_V : V;-fun writing_N : N;-fun writing_desk_N : N;-fun writing_ink_N : N;-fun writing_paper_N : N;-fun writtle_PN : PN;-fun wrns_N : N;-fun wroclaw_PN : PN;-fun wrong_A : A;-fun wrong_Adv : Adv;-fun wrong_N : N;-fun wrong_V2 : V2;-fun wrong_headed_A : A;-fun wrong_headedly_Adv : Adv;-fun wrongdoer_N : N;-fun wrongdoing_N : N;-fun wrongful_A : A;-fun wrongfully_Adv : Adv;-fun wrongly_Adv : Adv;-fun wroth_A : A;-fun wroughton_PN : PN;-fun wry_A : A;-fun wryly_Adv : Adv;-fun wt_N : N;-fun wuhan_PN : PN;-fun wuppertal_PN : PN;-fun wurzburg_PN : PN;-fun wusih_PN : PN;-fun wycombe_PN : PN;-fun wymondham_PN : PN;-fun wyoming_PN : PN;-fun wythall_PN : PN;-fun x_ray_N : N;-fun x_ray_V2 : V2;-fun xenophobia_N : N;-fun xerox_N : N;-fun xerox_V2 : V2;-fun xmas_N : N;-fun xmas_PN : PN;-fun xylophone_N : N;-fun yacht_N : N;-fun yacht_V : V;-fun yacht_club_N : N;-fun yachting_N : N;-fun yachtsman_N : N;-fun yahoo_N : N;-fun yak_N : N;-fun yam_N : N;-fun yammer_V : V;-fun yank_N : N;-fun yank_V2 : V2;-fun yankee_N : N;-fun yap_N : N;-fun yap_V : V;-fun yard_N : N;-fun yard_measure_N : N;-fun yardarm_N : N;-fun yardstick_N : N;-fun yarmouth_PN : PN;-fun yarn_N : N;-fun yarn_V : V;-fun yaroslavi_PN : PN;-fun yarrow_N : N;-fun yashmak_N : N;-fun yate_PN : PN;-fun yateley_PN : PN;-fun yaw_N : N;-fun yaw_V : V;-fun yawl_N : N;-fun yawn_N : N;-fun yawn_V : V;-fun yea_Adv : Adv;-fun yea_N : N;-fun yeah_Adv : Adv;-fun year_N : N;-fun yearbook_N : N;-fun yearling_N : N;-fun yearlong_A : A;-fun yearly_A : A;-fun yearly_Adv : Adv;-fun yearn_V : V;-fun yearning_N : N;-fun yearningly_Adv : Adv;-fun yeast_N : N;-fun yeasty_A : A;-fun yell_N : N;-fun yell_V : V;-fun yell_V2 : V2;-fun yellow_A : A;-fun yellow_N : N;-fun yellow_V : V;-fun yellow_V2 : V2;-fun yellow_bellied_A : A;-fun yellow_flag_N : N;-fun yellowish_A : A;-fun yellowness_N : N;-fun yelp_V : V;-fun yemen_PN : PN;-fun yemeni_A : A;-fun yemeni_N : N;-fun yen_N : N;-fun yen_V : V;-fun yeoman_N : N;-fun yeomanry_N : N;-fun yeovil_PN : PN;-fun yerevan_PN : PN;-fun yes_N : N;-fun yesterday_Adv : Adv;-fun yesterday_N : N;-fun yet_Adv : Adv;-fun yeti_N : N;-fun yew_N : N;-fun yew_tree_N : N;-fun yha_N : N;-fun yiddish_N : N;-fun yield_N : N;-fun yield_V : V;-fun yield_V2 : V2;-fun yielding_A : A;-fun yieldingly_Adv : Adv;-fun ymca_N : N;-fun yo_yo_N : N;-fun yob_N : N;-fun yobo_N : N;-fun yodel_N : N;-fun yodel_V : V;-fun yodel_V2 : V2;-fun yodeller_N : N;-fun yoga_N : N;-fun yoghourt_N : N;-fun yoghurt_N : N;-fun yogi_N : N;-fun yogurt_N : N;-fun yoke_N : N;-fun yoke_V : V;-fun yoke_V2 : V2;-fun yokel_N : N;-fun yokohama_PN : PN;-fun yolk_N : N;-fun yon_A : A;-fun yon_Adv : Adv;-fun yonder_A : A;-fun yonder_Adv : Adv;-fun yore_N : N;-fun york_PN : PN;-fun yorkley_PN : PN;-fun yorkshire_PN : PN;-fun young_A : A;-fun young_N : N;-fun youngish_A : A;-fun youngster_N : N;-fun youth_N : N;-fun youthful_A : A;-fun youthfully_Adv : Adv;-fun youthfulness_N : N;-fun yowl_V : V;-fun yr_N : N;-fun ystradgynlais_PN : PN;-fun yugoslav_A : A;-fun yugoslav_N : N;-fun yugoslavia_PN : PN;-fun yugoslavian_A : A;-fun yugoslavian_N : N;-fun yukon_PN : PN;-fun yule_N : N;-fun yule_log_N : N;-fun yuletide_N : N;-fun yvonne_PN : PN;-fun ywca_N : N;-fun zagreb_PN : PN;-fun zaire_PN : PN;-fun zairean_A : A;-fun zairean_N : N;-fun zambia_PN : PN;-fun zambian_A : A;-fun zambian_N : N;-fun zany_A : A;-fun zany_N : N;-fun zap_V2 : V2;-fun zaporozhye_PN : PN;-fun zaragoza_PN : PN;-fun zeal_N : N;-fun zealand_PN : PN;-fun zealander_A : A;-fun zealander_N : N;-fun zealot_N : N;-fun zealotry_N : N;-fun zealous_A : A;-fun zealously_Adv : Adv;-fun zebra_N : N;-fun zebu_N : N;-fun zee_N : N;-fun zen_N : N;-fun zenith_N : N;-fun zenithal_A : A;-fun zephyr_N : N;-fun zeppelin_N : N;-fun zero_N : N;-fun zero_V : V;-fun zest_N : N;-fun zestful_A : A;-fun zestfully_Adv : Adv;-fun zigzag_Adv : Adv;-fun zigzag_N : N;-fun zigzag_V : V;-fun zimbabwe_PN : PN;-fun zimbabwean_A : A;-fun zimbabwean_N : N;-fun zinc_N : N;-fun zing_N : N;-fun zinnia_N : N;-fun zion_N : N;-fun zionism_N : N;-fun zionist_A : A;-fun zionist_N : N;-fun zip_N : N;-fun zip_V2 : V2;-fun zip_code_N : N;-fun zip_fastener_N : N;-fun zipper_N : N;-fun zither_N : N;-fun zloty_N : N;-fun zodiac_N : N;-fun zoe_PN : PN;-fun zombie_N : N;-fun zonal_A : A;-fun zone_N : N;-fun zone_V2 : V2;-fun zoning_N : N;-fun zoo_N : N;-fun zoological_A : A;-fun zoologist_N : N;-fun zoology_N : N;-fun zoom_N : N;-fun zoom_V : V;-fun zoophyte_N : N;-fun zoot_suit_N : N;-fun zucchini_N : N;-fun zurich_PN : PN;-fun a_la_carte_Adv : Adv;-fun a_la_mode_Adv : Adv;-fun eclair_N : N;-fun eclat_N : N;-fun elan_N : N;-fun elite_N : N;-fun emigre_N : N;-fun epee_N : N;--}-}
file too large to diff
@@ -1,100 +1,11 @@-concrete ExtraLav of ExtraLavAbs = CatLav ** - open ResLav, Coordination, Prelude, MorphoLav in {-{-- lin- GenNP np = {s = \\_,_ => np.s ! Gen ; sp = \\_,_,_ => np.s ! Gen} ;- ComplBareVS v s = insertObj (\\_ => s.s) (predV v) ;-- StrandRelSlash rp slash = {- s = \\t,a,p,ag => - rp.s ! RC (fromAgr ag).g Acc ++ slash.s ! t ! a ! p ! ODir ++ slash.c2 ;- c = Acc- } ;- EmptyRelSlash slash = {- s = \\t,a,p,_ => slash.s ! t ! a ! p ! ODir ++ slash.c2 ;- c = Acc- } ;-- StrandQuestSlash ip slash = - {s = \\t,a,b,q => - (mkQuestion (ss (ip.s ! Acc)) slash).s ! t ! a ! b ! q ++ slash.c2- };-- lincat- VPI = {s : VPIForm => Agr => Str} ;- [VPI] = {s1,s2 : VPIForm => Agr => Str} ;-- lin- BaseVPI = twoTable2 VPIForm Agr ;- ConsVPI = consrTable2 VPIForm Agr comma ;-- MkVPI vp = {- s = \\v,a => vp.ad ++ vp.inf ++ vp.s2 ! a- } ;- ConjVPI = conjunctDistrTable2 VPIForm Agr ;- ComplVPIVV vv vpi = - insertObj (\\a => (if_then_Str vv.isAux [] "to") ++ vpi.s ! VPIInf ! a) (predVV vv) ;-- UncNegCl t p cl = {- s = t.s ++ p.s ++ cl.s ! t.t ! t.a ! unc p.p ! ODir- } ;- UncNegQCl t p cl = {- s = \\q => t.s ++ p.s ++ cl.s ! t.t ! t.a ! unc p.p ! q- } ;- UncNegRCl t p cl = {- s = \\r => t.s ++ p.s ++ cl.s ! t.t ! t.a ! unc p.p ! r ;- c = cl.c- } ;-- UncNegImpSg p imp = {s = p.s ++ imp.s ! unc p.p ! ImpF Sg False} ;- UncNegImpPl p imp = {s = p.s ++ imp.s ! unc p.p ! ImpF Pl False} ;-- CompoundCN a b = {s = \\n,c => a.s ! Sg ! Nom ++ b.s ! n ! c ; g = b.g} ;-- oper- unc = contrNeg False ; --- lin- that_RP = - { s = table {- RC _ Gen => "whose" ; - RC _ _ => "that" ;- RPrep Neutr => "which" ;- RPrep _ => "whom"- } ;- a = RNoAg- } ;-- each_Det = mkDeterminer Sg "each" ;---- for VP conjunction-- param- VPIForm = VPIInf | VPIPPart ;-- lincat- VPS = {s : Agr => Str} ;- [VPS] = {s1,s2 : Agr => Str} ;-- lin- BaseVPS = twoTable Agr ;- ConsVPS = consrTable Agr comma ;-- PredVPS np vpi = {s = np.s ! Nom ++ vpi.s ! np.a} ;+--# -path=.:../abstract:../common:../prelude - MkVPS t p vp = {- s = \\a => - let - verb = vp.s ! t.t ! t.a ! contrNeg True p.p ! ODir ! a ;- verbf = verb.aux ++ verb.adv ++ verb.fin ++ verb.inf ;- in t.s ++ p.s ++ vp.ad ++ verbf ++ vp.s2 ! a- } ;+concrete ExtraLav of ExtraLavAbs = CatLav ** open ResLav in { - ConjVPS = conjunctDistrTable Agr ;+flags+ coding = utf8 ; - ICompAP ap = {s = "how" ++ ap.s ! agrP3 Sg} ; ---- IComp should have agr!+lin+ GenNP np = {s = \\_,_,_ => np.s ! Gen ; d = Def} ; - IAdvAdv adv = {s = "how" ++ adv.s} ;--}-} +}
@@ -1,20 +1,3 @@-abstract ExtraLavAbs = Extra - [ProDrop] ** {-{---- uncontracted negations; contracted are the default- fun- UncNegCl : Temp -> Pol -> Cl -> S ;- UncNegQCl : Temp -> Pol -> QCl -> QS ;- UncNegRCl : Temp -> Pol -> RCl -> RS ;-- UncNegImpSg : Pol -> Imp -> Utt; -- do not help yourself- UncNegImpPl : Pol -> Imp -> Utt; -- do not help yourselves---- freely compounded nouns-- CompoundCN : CN -> CN -> CN ; -- rock album-- that_RP : RP ; -- "that" as a relational pronoun (IdRP is "which" / "who")+--# -path=.:../abstract:../common:../prelude - each_Det : Det ;--} -}+abstract ExtraLavAbs = Extra ** {}
@@ -1,8 +1,8 @@---# -path=.:../abstract:../common:prelude+--# -path=.:../abstract:../common:../prelude -concrete GrammarLav of Grammar = - NounLav, - VerbLav, +concrete GrammarLav of Grammar =+ NounLav,+ VerbLav, AdjectiveLav, AdverbLav, NumeralLav,@@ -11,12 +11,15 @@ RelativeLav, ConjunctionLav, PhraseLav,- TextX,+ TextX - [CAdv], StructuralLav, IdiomLav,- TenseX+ TenseX - [CAdv] ** { -flags startcat = Phr ; unlexer = text ; lexer = text ;+flags+ startcat = Phr ;+ unlexer = text ;+ lexer = text ; -} ;+}
@@ -1,32 +1,73 @@-concrete IdiomLav of Idiom = CatLav ** open Prelude, ResLav in {-{-- flags optimize=all_subs ;+--# -path=.:../abstract:../common:../prelude - lin- ImpersCl vp = mkClause "it" (agrP3 Sg) vp ;- GenericCl vp = mkClause "one" (agrP3 Sg) vp ;+concrete IdiomLav of Idiom = CatLav ** open+ Prelude,+ ResLav,+ VerbLav,+ ParadigmsVerbsLav+ in { - CleftNP np rs = mkClause "it" (agrP3 Sg) - (insertObj (\\_ => rs.s ! np.a)- (insertObj (\\_ => np.s ! rs.c) (predAux auxBe))) ;+flags+ coding = utf8 ;+ optimize = all_subs ; - CleftAdv ad s = mkClause "it" (agrP3 Sg) - (insertObj (\\_ => conjThat ++ s.s)- (insertObj (\\_ => ad.s) (predAux auxBe))) ;+lin+ ImpersCl vp =+ let a = AgP3 Sg Masc+ in {+ s = \\mood,pol =>+ buildVerb vp.v mood pol a ++ -- Verb+ vp.s2 ! a -- Object(s), complements, adverbial modifiers+ } ; - ExistNP np = - mkClause "there" (agrP3 (fromAgr np.a).n) - (insertObj (\\_ => np.s ! Acc) (predAux auxBe)) ;+ GenericCl vp =+ let a = AgP3 Sg Masc+ in {+ s = \\mood,pol =>+ buildVerb vp.v mood pol a +++ vp.s2 ! a+ } ; - ExistIP ip = - mkQuestion (ss (ip.s ! Nom)) - (mkClause "there" (agrP3 ip.n) (predAux auxBe)) ;+ ExistNP np =+ let+ v = lin V mkVerb_toBe ;+ a = np.a+ in {+ s = \\mood,pol =>+ buildVerb v mood pol a +++ np.s ! Nom+ } ; - ProgrVP vp = insertObj (\\a => vp.ad ++ vp.prp ++ vp.s2 ! a) (predAux auxBe) ;+ ExistIP ip =+ let+ v = lin V mkVerb_toBe ;+ a = AgP3 ip.n Masc+ in {+ s = \\mood,pol =>+ ip.s ! Nom +++ buildVerb v mood pol a+ } ; - ImpPl1 vp = {s = "let's" ++ infVP True vp (AgP1 Pl)} ;+ -- FIXME: needs restriction so that only VerbMood Indicative _ _ Present is allowed;+ -- can't do that on VP level...+ ProgrVP v = v ; - ImpP3 np vp = {s = "let" ++ np.s ! Acc ++ infVP True vp np.a} ;--}-}+ ImpPl1 vp =+ let a = AgP1 Pl+ in {+ s =+ vp.v.s ! Pos ! (Indicative P1 Pl Pres) ++ -- Verb+ vp.s2 ! a -- Object(s), complements, adverbial modifiers+ }+ | { s = vp.v.s ! Pos ! (Indicative P1 Pl Fut) ++ vp.s2 ! a } --# notpresent+ ; + ImpP3 np vp = {+ s = "lai" ++ np.s ! Nom ++ buildVerb vp.v (Ind Simul Pres) Pos np.a ++ vp.s2 ! np.a ;+ } ;++ -- FIXME: placeholder+ CleftNP np rs = { s = \\_,_ => NON_EXISTENT } ;+ CleftAdv ad s = { s = \\_,_ => NON_EXISTENT } ;++}
@@ -1,182 +0,0 @@---# -path=.:prelude:../abstract:../common--concrete IrregLav of IrregLavAbs = CatLav ** open ParadigmsLav in {-{--flags optimize=values ;-- lin- awake_V = irregV "awake" "awoke" "awoken" ;- bear_V = irregV "bear" "bore" "born" ;- beat_V = irregV "beat" "beat" "beat" ;- become_V = irregV "become" "became" "become" ;- begin_V = irregV "begin" "began" "begun" ;- bend_V = irregV "bend" "bent" "bent" ;- beset_V = irregV "beset" "beset" "beset" ;- bet_V = irregDuplV "bet" "bet" "bet" ;- bid_V = irregDuplV "bid" (variants {"bid" ; "bade"}) (variants {"bid" ; "bidden"}) ;- bind_V = irregV "bind" "bound" "bound" ;- bite_V = irregV "bite" "bit" "bitten" ;- bleed_V = irregV "bleed" "bled" "bled" ;- blow_V = irregV "blow" "blew" "blown" ;- break_V = irregV "break" "broke" "broken" ;- breed_V = irregV "breed" "bred" "bred" ;- bring_V = irregV "bring" "brought" "brought" ;- broadcast_V = irregV "broadcast" "broadcast" "broadcast" ;- build_V = irregV "build" "built" "built" ;- burn_V = irregV "burn" (variants {"burned" ; "burnt"}) (variants {"burned" ; "burnt"}) ;- burst_V = irregV "burst" "burst" "burst" ;- buy_V = irregV "buy" "bought" "bought" ;- cast_V = irregV "cast" "cast" "cast" ;- catch_V = irregV "catch" "caught" "caught" ;- choose_V = irregV "choose" "chose" "chosen" ;- cling_V = irregV "cling" "clung" "clung" ;- come_V = irregV "come" "came" "come" ;- cost_V = irregV "cost" "cost" "cost" ;- creep_V = irregV "creep" "crept" "crept" ;- cut_V = irregDuplV "cut" "cut" "cut" ;- deal_V = irregV "deal" "dealt" "dealt" ;- dig_V = irregDuplV "dig" "dug" "dug" ;- dive_V = irregV "dive" (variants {"dived" ; "dove"}) "dived" ;- do_V = mk5V "do" "does" "did" "done" "doing" ;- draw_V = irregV "draw" "drew" "drawn" ;- dream_V = irregV "dream" (variants {"dreamed" ; "dreamt"}) (variants {"dreamed" ; "dreamt"}) ;- drive_V = irregV "drive" "drove" "driven" ;- drink_V = irregV "drink" "drank" "drunk" ;- eat_V = irregV "eat" "ate" "eaten" ;- fall_V = irregV "fall" "fell" "fallen" ;- feed_V = irregV "feed" "fed" "fed" ;- feel_V = irregV "feel" "felt" "felt" ;- fight_V = irregV "fight" "fought" "fought" ;- find_V = irregV "find" "found" "found" ;- fit_V = irregDuplV "fit" "fit" "fit" ;- flee_V = irregV "flee" "fled" "fled" ;- fling_V = irregV "fling" "flung" "flung" ;- fly_V = irregV "fly" "flew" "flown" ;- forbid_V = irregDuplV "forbid" "forbade" "forbidden" ;- forget_V = irregDuplV "forget" "forgot" "forgotten" ;- forgive_V = irregV "forgive" "forgave" "forgiven" ;- forsake_V = irregV "forsake" "forsook" "forsaken" ;- freeze_V = irregV "freeze" "froze" "frozen" ;- get_V = irregDuplV "get" "got" "gotten" ;- give_V = irregV "give" "gave" "given" ;- go_V = mk5V "go" "goes" "went" "gone" "going" ;- grind_V = irregV "grind" "ground" "ground" ;- grow_V = irregV "grow" "grew" "grown" ;- hang_V = irregV "hang" "hung" "hung" ;- have_V = mk5V "have" "has" "had" "had" "having" ;- hear_V = irregV "hear" "heard" "heard" ;- hide_V = irregV "hide" "hid" "hidden" ;- hit_V = irregDuplV "hit" "hit" "hit" ;- hold_V = irregV "hold" "held" "held" ;- hurt_V = irregV "hurt" "hurt" "hurt" ;- keep_V = irregV "keep" "kept" "kept" ;- kneel_V = irregV "kneel" "knelt" "knelt" ;- knit_V = irregDuplV "knit" "knit" "knit" ;- know_V = irregV "know" "knew" "know" ;- lay_V = irregV "lay" "laid" "laid" ;- lead_V = irregV "lead" "led" "led" ;- leap_V = irregV "leap" (variants {"leaped" ; "lept"}) (variants {"leaped" ; "lept"}) ;- learn_V = irregV "learn" (variants {"learned" ; "learnt"}) (variants {"learned" ; "learnt"}) ;- leave_V = irregV "leave" "left" "left" ;- lend_V = irregV "lend" "lent" "lent" ;- let_V = irregDuplV "let" "let" "let" ;- lie_V = irregV "lie" "lay" "lain" ;- light_V = irregV "light" (variants {"lighted" ; "lit"}) "lighted" ;- lose_V = irregV "lose" "lost" "lost" ;- make_V = irregV "make" "made" "made" ;- mean_V = irregV "mean" "meant" "meant" ;- meet_V = irregV "meet" "met" "met" ;- misspell_V = irregV "misspell" (variants {"misspelled" ; "misspelt"}) (variants {"misspelled" ; "misspelt"}) ;- mistake_V = irregV "mistake" "mistook" "mistaken" ;- mow_V = irregV "mow" "mowed" (variants {"mowed" ; "mown"}) ;- overcome_V = irregV "overcome" "overcame" "overcome" ;- overdo_V = mk5V "overdo" "overdoes" "overdid" "overdone" "overdoing" ;- overtake_V = irregV "overtake" "overtook" "overtaken" ;- overthrow_V = irregV "overthrow" "overthrew" "overthrown" ;- pay_V = irregV "pay" "paid" "paid" ;- plead_V = irregV "plead" "pled" "pled" ;- prove_V = irregV "prove" "proved" (variants {"proved" ; "proven"}) ;- put_V = irregDuplV "put" "put" "put" ;- quit_V = irregDuplV "quit" "quit" "quit" ;- read_V = irregV "read" "read" "read" ;- rid_V = irregDuplV "rid" "rid" "rid" ;- ride_V = irregV "ride" "rode" "ridden" ;- ring_V = irregV "ring" "rang" "rung" ;- rise_V = irregV "rise" "rose" "risen" ;- run_V = irregDuplV "run" "ran" "run" ;- saw_V = irregV "saw" "sawed" (variants {"sawed" ; "sawn"}) ;- say_V = irregV "say" "said" "said" ;- see_V = irregV "see" "saw" "seen" ;- seek_V = irregV "seek" "sought" "sought" ;- sell_V = irregV "sell" "sold" "sold" ;- send_V = irregV "send" "sent" "sent" ;- set_V = irregDuplV "set" "set" "set" ;- sew_V = irregV "sew" "sewed" (variants {"sewed" ; "sewn"}) ;- shake_V = irregV "shake" "shook" "shaken" ;- shave_V = irregV "shave" "shaved" (variants {"shaved" ; "shaven"}) ;- shear_V = irregV "shear" "shore" "shorn" ;- shed_V = irregDuplV "shed" "shed" "shed" ;- shine_V = irregV "shine" "shone" "shone" ;- shoe_V = irregV "shoe" "shoed" (variants {"shoed" ; "shod"}) ;- shoot_V = irregV "shoot" "shot" "shot" ;- show_V = irregV "show" "showed" (variants {"showed" ; "shown"}) ;- shrink_V = irregV "shrink" "shrank" "shrunk" ;- shut_V = irregDuplV "shut" "shut" "shut" ;- sing_V = irregV "sing" "sang" "sung" ;- sink_V = irregV "sink" "sank" "sunk" ;- sit_V = irregDuplV "sit" "sat" "sat" ;- sleep_V = irregV "sleep" "slept" "slept" ;- slay_V = irregV "slay" "slew" "slain" ;- slide_V = irregV "slide" "slid" "slid" ;- sling_V = irregV "sling" "slung" "slung" ;- slit_V = irregDuplV "slit" "slit" "slit" ;- smite_V = irregV "smite" "smote" "smitten" ;- sow_V = irregV "sow" "sowed" (variants {"sowed" ; "sown"}) ;- speak_V = irregV "speak" "spoke" "spoken" ;- speed_V = irregV "speed" "sped" "sped" ;- spend_V = irregV "spend" "spent" "spent" ;- spill_V = irregV "spill" (variants {"spilled" ; "spilt"}) (variants {"spilled" ; "spilt"}) ;- spin_V = irregDuplV "spin" "spun" "spun" ;- spit_V = irregDuplV "spit" (variants {"spit" ; "spat"}) "spit" ;- split_V = irregDuplV "split" "split" "split" ;- spread_V = irregV "spread" "spread" "spread" ;- spring_V = irregV "spring" (variants {"sprang" ; "sprung"}) "sprung" ;- stand_V = irregV "stand" "stood" "stood" ;- steal_V = irregV "steal" "stole" "stolen" ;- stick_V = irregV "stick" "stuck" "stuck" ;- sting_V = irregV "sting" "stung" "stung" ;- stink_V = irregV "stink" "stank" "stunk" ;- stride_V = irregV "stride" "strod" "stridden" ;- strike_V = irregV "strike" "struck" "struck" ;- string_V = irregV "string" "strung" "strung" ;- strive_V = irregV "strive" "strove" "striven" ;- swear_V = irregV "swear" "swore" "sworn" ;- sweep_V = irregV "sweep" "swept" "swept" ;- swell_V = irregV "swell" "swelled" (variants {"swelled" ; "swollen"}) ;- swim_V = irregDuplV "swim" "swam" "swum" ;- swing_V = irregV "swing" "swung" "swung" ;- take_V = irregV "take" "took" "taken" ;- teach_V = irregV "teach" "taught" "taught" ;- tear_V = irregV "tear" "tore" "torn" ;- tell_V = irregV "tell" "told" "told" ;- think_V = irregV "think" "thought" "thought" ;- thrive_V = irregV "thrive" (variants {"thrived" ; "throve"}) "thrived" ;- throw_V = irregV "throw" "threw" "thrown" ;- thrust_V = irregV "thrust" "thrust" "thrust" ;- tread_V = irregV "tread" "trod" "trodden" ;- understand_V = irregV "understand" "understood" "understood" ;- uphold_V = irregV "uphold" "upheld" "upheld" ;- upset_V = irregDuplV "upset" "upset" "upset" ;- wake_V = irregV "wake" "woke" "woken" ;- wear_V = irregV "wear" "wore" "worn" ;- weave_V = irregV "weave" (variants {"weaved" ; "wove"}) (variants {"weaved" ; "woven"}) ;- wed_V = irregDuplV "wed" "wed" "wed" ;- weep_V = irregV "weep" "wept" "wept" ;- wind_V = irregV "wind" "wound" "wound" ;- win_V = irregDuplV "win" "won" "won" ;- withhold_V = irregV "withhold" "withheld" "withheld" ;- withstand_V = irregV "withstand" "withstood" "withstood" ;- wring_V = irregV "wring" "wrung" "wrung" ;- write_V = irregV "write" "wrote" "written" ;--} -}
@@ -1,178 +0,0 @@-abstract IrregLavAbs = Cat ** {-{--fun- awake_V : V ;- bear_V : V ;- beat_V : V ;- become_V : V ;- begin_V : V ;- bend_V : V ;- beset_V : V ;- bet_V : V ;- bid_V : V ;- bind_V : V ;- bite_V : V ;- bleed_V : V ;- blow_V : V ;- break_V : V ;- breed_V : V ;- bring_V : V ;- broadcast_V : V ;- build_V : V ;- burn_V : V ;- burst_V : V ;- buy_V : V ;- cast_V : V ;- catch_V : V ;- choose_V : V ;- cling_V : V ;- come_V : V ;- cost_V : V ;- creep_V : V ;- cut_V : V ;- deal_V : V ;- dig_V : V ;- dive_V : V ;- do_V : V ;- draw_V : V ;- dream_V : V ;- drive_V : V ;- drink_V : V ;- eat_V : V ;- fall_V : V ;- feed_V : V ;- feel_V : V ;- fight_V : V ;- find_V : V ;- fit_V : V ;- flee_V : V ;- fling_V : V ;- fly_V : V ;- forbid_V : V ;- forget_V : V ;- forgive_V : V ;- forsake_V : V ;- freeze_V : V ;- get_V : V ;- give_V : V ;- go_V : V ;- grind_V : V ;- grow_V : V ;- hang_V : V ;- have_V : V ;- hear_V : V ;- hide_V : V ;- hit_V : V ;- hold_V : V ;- hurt_V : V ;- keep_V : V ;- kneel_V : V ;- knit_V : V ;- know_V : V ;- lay_V : V ;- lead_V : V ;- leap_V : V ;- learn_V : V ;- leave_V : V ;- lend_V : V ;- let_V : V ;- lie_V : V ;- light_V : V ;- lose_V : V ;- make_V : V ;- mean_V : V ;- meet_V : V ;- misspell_V : V ;- mistake_V : V ;- mow_V : V ;- overcome_V : V ;- overdo_V : V ;- overtake_V : V ;- overthrow_V : V ;- pay_V : V ;- plead_V : V ;- prove_V : V ;- put_V : V ;- quit_V : V ;- read_V : V ;- rid_V : V ;- ride_V : V ;- ring_V : V ;- rise_V : V ;- run_V : V ;- saw_V : V ;- say_V : V ;- see_V : V ;- seek_V : V ;- sell_V : V ;- send_V : V ;- set_V : V ;- sew_V : V ;- shake_V : V ;- shave_V : V ;- shear_V : V ;- shed_V : V ;- shine_V : V ;- shoe_V : V ;- shoot_V : V ;- show_V : V ;- shrink_V : V ;- shut_V : V ;- sing_V : V ;- sink_V : V ;- sit_V : V ;- sleep_V : V ;- slay_V : V ;- slide_V : V ;- sling_V : V ;- slit_V : V ;- smite_V : V ;- sow_V : V ;- speak_V : V ;- speed_V : V ;- spend_V : V ;- spill_V : V ;- spin_V : V ;- spit_V : V ;- split_V : V ;- spread_V : V ;- spring_V : V ;- stand_V : V ;- steal_V : V ;- stick_V : V ;- sting_V : V ;- stink_V : V ;- stride_V : V ;- strike_V : V ;- string_V : V ;- strive_V : V ;- swear_V : V ;- sweep_V : V ;- swell_V : V ;- swim_V : V ;- swing_V : V ;- take_V : V ;- teach_V : V ;- tear_V : V ;- tell_V : V ;- think_V : V ;- thrive_V : V ;- throw_V : V ;- thrust_V : V ;- tread_V : V ;- understand_V : V ;- uphold_V : V ;- upset_V : V ;- wake_V : V ;- wear_V : V ;- weave_V : V ;- wed_V : V ;- weep_V : V ;- wind_V : V ;- win_V : V ;- withhold_V : V ;- withstand_V : V ;- wring_V : V ;- write_V : V ;--} -}
@@ -1,10 +1,13 @@ --# -path=.:../abstract:../common:../prelude -concrete LangLav of Lang = +concrete LangLav of Lang = GrammarLav, LexiconLav ** { -flags startcat = Phr ; unlexer = text ; lexer = text ;+flags+ startcat = Phr ;+ unlexer = text ;+ lexer = text ; -} ;+}
@@ -1,388 +1,387 @@---# -path=.:prelude+--# -path=.:../abstract:../common:../prelude -concrete LexiconLav of Lexicon = CatLav ** - open ParadigmsLav, IrregLav, Prelude in {+concrete LexiconLav of Lexicon = CatLav ** open+ ParadigmsLav,+ StructuralLav,+ ResLav,+ Prelude+ in { -flags - optimize=values ;+flags+ optimize = values ; coding = utf8 ;- + lin airplane_N = mkN "lidmašīna" ;- come_V = mkV "nākt" "nāku" "nācu" ;+ answer_V2S = mkV2S (mkV "atbildēt" third_conjugation) dat_Prep that_Subj ;+ -- toP = 'answer to [Person]' = 'atbildēt [kam?]'+ apartment_N = mkN "dzīvoklis" ;+ apple_N = mkN "ābols" ;+ art_N = mkN "māksla" ;+ ask_V2Q = mkV2Q (mkV "vaicāt" second_conjugation) dat_Prep ;+ baby_N = mkN "bērns" ; bad_A = mkA "slikts" ;- - walk_V = mkV "doties" "dodos" "devos" ;--- please_V2 = mkV "priecēt" second_conjugation ;- love_V2 = mkV "mīlēt" third_conjugation ;--- say_V = mkV "sacīt" third_conjugation ; --- be_V = mkV "būt" ;+ bank_N = mkN "banka" ;+ beautiful_A = mkA "skaists" ;+ become_VA = mkVA (mkV "kļūt" "kļūstu" "kļuvu") ;+ beer_N = mkN "alus" ;+ beg_V2V = mkV2V (mkV "lūgt" "lūdzu" "lūdzu") acc_Prep ;+ big_A = mkA "liels" ;+ bike_N = mkN "divritenis" ;+ bird_N = mkN "putns" ;+ black_A = mkA "melns" ;+ blue_A = mkA "zils" ;+ boat_N = mkN "laiva" ;+ book_N = mkN "grāmata" ;+ boot_N = mkN "zābaks" ;+ boss_N = mkN "boss" ;+ boy_N = mkN "puika" ;+ bread_N = mkN "maize" ;+ break_V2 = mkV2 (mkV "lauzt" "laužu" "lauzu") acc_Prep ;+ broad_A = mkA "plats" ;+ brother_N2 = mkN2 (mkN "brālis") gen_Prep True;+ -- Ģenitīvs nav kā piederība, bet kā relācija: "Jāņa/tēva brālis", bet ne "mans brālis" (?)+ brown_A = mkA "brūns" ;+ butter_N = mkN "sviests" ;+ buy_V2 = mkV2 (mkV "pirkt" "pērku" "pirku") acc_Prep ;+ camera_N = mkN "fotoaparāts" ;+ cap_N = mkN "cepure" ;+ car_N = mkN "automašīna" ;+ carpet_N = mkN "paklājs" ;+ cat_N = mkN "kaķis" ;+ ceiling_N = mkN "griesti" ;+ chair_N = mkN "krēsls" ;+ cheese_N = mkN "siers" ;+ child_N = mkN "bērns" ;+ church_N = mkN "baznīca" ;+ city_N = mkN "pilsēta" ;+ clean_A = mkA "tīrs" ;+ clever_A = mkA "gudrs" ;+ close_V2 = mkV2 (mkV "aizvērt" "aizveru" "aizvēru") acc_Prep ;+ coat_N = mkN "mētelis" ;+ cold_A = mkA "auksts" ;+ come_V = mkV "nākt" "nāku" "nācu" ;+ computer_N = mkN "dators" ;+ country_N = mkN "valsts" ;+ cousin_N = mkN "brālēns" ; -- FIXME: brālēns/māsīca angļiem ir vienāds...+ cow_N = mkN "govs" ;+ die_V = mkV "nomirt" "nomirstu" "nomiru";+ dirty_A = mkA "netīrs" ;+ distance_N3 = mkN3 (mkN "attālums") from_Prep to_Prep ; -- no / līdz+ doctor_N = mkN "ārsts" ;+ dog_N = mkN "suns" ;+ door_N = mkN "durvis" ;+ drink_V2 = mkV2 (mkV "dzert" "dzeru" "dzēru") acc_Prep;+ --easy_A2V = mkA2V (regA "easy") forP ; -- FIXME: nav tādas konstrukcijas latviešu val.+ eat_V2 = mkV2 (mkV "ēst" "ēdu" "ēdu") acc_Prep ;+ empty_A = mkA "tukšs" ;+ enemy_N = mkN "ienaidnieks" ;+ factory_N = mkN "rūpnīca" ;+ father_N2 = mkN2 (mkN "tēvs") gen_Prep True ;+ fear_VS = mkVS (mkV "baidīties" third_conjugation) that_Subj ;+ find_V2 = mkV2 (mkV "atrast" "atrodi" "atradu") acc_Prep ;+ fish_N = mkN "zivs" ;+ floor_N = mkN "grīda" ;+ forget_V2 = mkV2 (mkV "aizmirst" "aizmirstu" "aizmirsu") acc_Prep ;+ fridge_N = mkN "ledusskapis" ;+ friend_N = mkN "draugs" ;+ fruit_N = mkN "auglis" ;+ fun_AV = mkAV (mkA "priecīgs") ;+ garden_N = mkN "dārzs" ;+ girl_N = mkN "meitene" ;+ glove_N = mkN "cimds" ;+ gold_N = mkN "zelts" ;+ good_A = mkA "labs" ;+ go_V = mkV "iet" ;+ green_A = mkA "zaļš" ;+ harbour_N = mkN "osta" ;+ hate_V2 = mkV2 (mkV "ienīst" "ienīstu" "ienīdu") acc_Prep ;+ hat_N = mkN "cepure" ;+ hear_V2 = mkV2 (mkV "dzirdēt" third_conjugation) acc_Prep ;+ hill_N = mkN "kalns" ;+ hope_VS = mkVS (mkV "cerēt" third_conjugation) that_Subj ;+ horse_N = mkN "zirgs" ;+ hot_A = mkA "karsts" ;+ house_N = mkN "māja" ;+ important_A = mkA "svarīgs" ;+ industry_N = mkN "industrija" ;+ iron_N = mkN "dzelzs" ;+ king_N = mkN "karalis" ;+ know_V2 = mkV2 (mkV "zināt" third_conjugation) acc_Prep ;+ -- FIXME: šitādas lietas jārisina ar valencēm nevis 2 vienādiem vārdiem+ know_VS = mkVS (mkV "zināt" third_conjugation) that_Subj ;+ lake_N = mkN "ezers" ;+ lamp_N = mkN "lampa" ;+ learn_V2 = mkV2 (mkV "mācīties" third_conjugation) acc_Prep ;+ leather_N = mkN "āda" ;+ leave_V2 = mkV2 (mkV "atstāt" "atstāju" "atstāju") acc_Prep ;+ --like_V2 = mkV2 (regV "like") ;+ listen_V2 = mkV2 (mkV "klausīties" third_conjugation) acc_Prep ;+ live_V = mkV "dzīvot" second_conjugation ;+ long_A = mkA "garš" ;+ lose_V2 = mkV2 (mkV "pazaudēt" second_conjugation) acc_Prep ;+ love_N = mkN "mīlestība" ;+ love_V2 = mkV2 (mkV "mīlēt" third_conjugation) acc_Prep ;+ man_N = mkN "vīrietis" ;+ married_A2 = mkA2 (mkA (mkV "precēties" third_conjugation)) with_Prep ;+ meat_N = mkN "gaļa" ;+ milk_N = mkN "piens" ;+ moon_N = mkN "mēness" ;+ mother_N2 = mkN2 (mkN "māte") gen_Prep True ;+ mountain_N = mkN "kalns" ;+ music_N = mkN "mūzika" ;+ narrow_A = mkA "šaurs" ;+ new_A = mkA "jauns" ;+ newspaper_N = mkN "avīze" ;+ oil_N = mkN "eļļa" ; -- reku parādās klasiskās problēmas - eļļa vai nafta?+ old_A = mkA "vecs" ;+ open_V2 = mkV2 (mkV "atvērt" "atveru" "atvēru") acc_Prep ;+ paint_V2A = mkV2A (mkV "krāsot" second_conjugation) acc_Prep ;+ paper_N = mkN "papīrs" ;+ paris_PN = mkPN "Parīze" ;+ peace_N = mkN "miers" ;+ pen_N = mkN "pildspalva" ;+ planet_N = mkN "planēta" ;+ plastic_N = mkN "plastmasa" ;+ play_V2 = mkV2 (mkV "spēlēt" second_conjugation) acc_Prep ;+ policeman_N = mkN "policists" ;+ priest_N = mkN "mācītājs" ;+ probable_AS = mkAS (mkA "iespējams") ;+ queen_N = mkN "karaliene" ;+ radio_N = mkN "radio" ;+ --rain_V0 = mkV0 (regV "rain") ;+ read_V2 = mkV2 (mkV "lasīt" third_conjugation) acc_Prep ;+ red_A = mkA "sarkans" ;+ religion_N = mkN "reliģija" ;+ restaurant_N = mkN "restorāns" ;+ river_N = mkN "upe" ;+ rock_N = mkN "akmens" ;+ roof_N = mkN "jumts" ;+ rubber_N = mkN "gumija" ;+ run_V = mkV "skriet" "skrienu" "skrēju" ;+ say_VS = mkVS (mkV "sacīt" third_conjugation) that_Subj ;+ school_N = mkN "skola" ;+ science_N = mkN "zinātne" ;+ sea_N = mkN "jūra" ;+ seek_V2 = mkV2 (mkV "meklēt" second_conjugation) acc_Prep ;+ see_V2 = mkV2 (mkV "redzēt" third_conjugation) acc_Prep ;+ sell_V3 = mkV3 (mkV "pārdot" "pārdodu" "pārdevu") acc_Prep dat_Prep ;+ send_V3 = mkV3 (mkV "sūtīt" third_conjugation) acc_Prep dat_Prep ;+ sheep_N = mkN "aita" ;+ ship_N = mkN "kuģis" ;+ shirt_N = mkN "krekls" ;+ shoe_N = mkN "kurpe" ;+ shop_N = mkN "veikals" ;+ short_A = mkA "īss" ;+ silver_N = mkN "sudrabs" ;+ sister_N = mkN "māsa" ; -- TODO: kāpēc nav kā brālis ar parametru?+ sleep_V = mkV "gulēt";+ small_A = mkA "mazs" ;+ snake_N = mkN "čūska" ;+ sock_N = mkN "zeķe" ;+ speak_V2 = mkV2 (mkV "sacīt" third_conjugation) acc_Prep ; -- TODO: citas valences tur tak+ star_N = mkN "zvaigzne" ;+ steel_N = mkN "tērauds" ;+ stone_N = mkN "akmens" ;+ stove_N = mkN "plīts" ;+ student_N = mkN "students" ;+ stupid_A = mkA "dumjš" ;+ sun_N = mkN "saule" ;+ switch8off_V2 = mkV2 (mkV "izslēgt" "izslēdzu" "izslēdzu") acc_Prep ;+ switch8on_V2 = mkV2 (mkV "ieslēgt" "ieslēdzu" "ieslēdzu") acc_Prep ;+ table_N = mkN "galds" ;+ talk_V3 = mkV3 (mkV "runāt" second_conjugation) to_Prep par_Prep ; -- ar ko, par ko+ teacher_N = mkN "skolotājs" ;+ teach_V2 = mkV2 (mkV "mācīt" third_conjugation) acc_Prep ;+ television_N = mkN "televīzija" ;+ thick_A = mkA "biezs" ;+ thin_A = mkA "plāns" ;+ train_N = mkN "vilciens" ;+ travel_V = mkV "ceļot" second_conjugation ;+ tree_N = mkN "koks" ;+ --trousers_N = mkN "bikses" ;+ ugly_A = mkA "neglīts" ;+ understand_V2 = mkV2 (mkV "saprast" "saprotu" "sapratu") acc_Prep ;+ university_N = mkN "universitāte" ;+ village_N = mkN "village" ;+ wait_V2 = mkV2 (mkV "gaidīt" third_conjugation) acc_Prep ;+ walk_V = mkV "staigāt" second_conjugation ;+ warm_A = mkA "silts" ;+ war_N = mkN "karš" ;+ watch_V2 = mkV2 (mkV "skatīties" third_conjugation) acc_Prep ;+ water_N = mkN "ūdens" ;+ white_A = mkA "balts" ;+ window_N = mkN "logs" ;+ wine_N = mkN "vīns" ;+ win_V2 = mkV2 (mkV "uzvarēt" third_conjugation) acc_Prep ;+ woman_N = mkN "sieviete" ;+ wonder_VQ = mkVQ (mkV "brīnīties" third_conjugation) ;+ wood_N = mkN "koks" ;+ write_V2 = mkV2 (mkV "rakstīt" third_conjugation) acc_Prep ;+ yellow_A = mkA "dzeltens" ;+ young_A = mkA "jauns" ;+ do_V2 = mkV2 (mkV "darīt" third_conjugation) acc_Prep ;+ now_Adv = mkAdv "tagad" ;+ already_Adv = mkAdv "jau" ;+ song_N = mkN "dziesma" ;+ add_V3 = mkV3 (mkV "pielikt" "pielieku" "pieliku") acc_Prep dat_Prep ;+ number_N = mkN "skaitlis" ;+ put_V2 = mkV2 (mkV "likt" "lieku" "liku") acc_Prep ;+ stop_V = mkV "apstāties" "apstājos" "apstājos";+ jump_V = mkV "lēkt" "lecu" "lēcu" ; -{- - answer_V2S = mkV2S (mkV "answer" "answered") toP ;- apartment_N = regN "apartment" ;- apple_N = regN "apple" ;- art_N = regN "art" ;- ask_V2Q = mkV2Q (regV "ask") noPrep ;- baby_N = regN "baby" ;- bad_A = mkADeg "bad" "worse" "worst" "badly" ;- bank_N = regN "bank" ;- beautiful_A = compoundADeg (regA "beautiful") ;- become_VA = mkVA (irregV "become" "became" "become") ;- beer_N = regN "beer" ;- beg_V2V = mkV2V (regDuplV "beg") noPrep toP ;- big_A = duplADeg "big" ;- bike_N = regN "bike" ;- bird_N = regN "bird" ;- black_A = regADeg "black" ;- blue_A = regADeg "blue" ;- boat_N = regN "boat" ;- book_N = regN "book" ;- boot_N = regN "boot" ;- boss_N = mkN human (regN "boss") ;- boy_N = mkN masculine (regN "boy") ;- bread_N = regN "bread" ;- break_V2 = dirV2 (irregV "break" "broke" "broken") ;- broad_A = regADeg "broad" ;- brother_N2 = mkN2 (mkN masculine (mkN "brother")) (mkPrep "of") ;- brown_A = regADeg "brown" ;- butter_N = regN "butter" ;- buy_V2 = dirV2 (irregV "buy" "bought" "bought") ;- camera_N = regN "camera" ;- cap_N = regN "cap" ;- car_N = regN "car" ;- carpet_N = regN "carpet" ;- cat_N = regN "cat" ;- ceiling_N = regN "ceiling" ;- chair_N = regN "chair" ;- cheese_N = regN "cheese" ;- child_N = mk2N "child" "children" ;- church_N = regN "church" ;- city_N = regN "city" ;- clean_A = regADeg "clean" ;- clever_A = mkA "clever" "cleverer" ;- close_V2 = dirV2 (regV "close") ;- coat_N = regN "coat" ;- cold_A = regADeg "cold" ;- come_V = (irregV "come" "came" "come") ;- computer_N = regN "computer" ;- country_N = regN "country" ;- cousin_N = mkN human (regN "cousin") ;- cow_N = regN "cow" ;- die_V = (regV "die") ;- dirty_A = regADeg "dirty" ;- distance_N3 = mkN3 (regN "distance") fromP toP ;- doctor_N = mkN human (regN "doctor") ;- dog_N = regN "dog" ;- door_N = regN "door" ;- drink_V2 = dirV2 (irregV "drink" "drank" "drunk") ;- easy_A2V = mkA2V (regA "easy") forP ;- eat_V2 = dirV2 (irregV "eat" "ate" "eaten") ;- empty_A = regADeg "empty" ;- enemy_N = regN "enemy" ;- factory_N = regN "factory" ;- father_N2 = mkN2 (mkN masculine (mkN "father")) (mkPrep "of") ;- fear_VS = mkVS (regV "fear") ;- find_V2 = dirV2 (irregV "find" "found" "found") ;- fish_N = mk2N "fish" "fish" ;- floor_N = regN "floor" ;- forget_V2 = dirV2 (irregDuplV "forget" "forgot" "forgotten") ;- fridge_N = regN "fridge" ;- friend_N = mkN human (regN "friend") ;- fruit_N = regN "fruit" ;- fun_AV = mkAV (regA "fun") ;- garden_N = regN "garden" ;- girl_N = mkN feminine (regN "girl") ;- glove_N = regN "glove" ;- gold_N = regN "gold" ;- good_A = mkADeg "good" "better" "best" "well" ;- go_V = mk5V "go" "goes" "went" "gone" "going" ;- green_A = regADeg "green" ;- harbour_N = regN "harbour" ;- hate_V2 = dirV2 (regV "hate") ;- hat_N = regN "hat" ;- hear_V2 = dirV2 (irregV "hear" "heard" "heard") ;- hill_N = regN "hill" ;- hope_VS = mkVS (regV "hope") ;- horse_N = regN "horse" ;- hot_A = duplADeg "hot" ;- house_N = regN "house" ;- important_A = compoundADeg (regA "important") ;- industry_N = regN "industry" ;- iron_N = regN "iron" ;- king_N = mkN masculine (regN "king") ;- know_V2 = dirV2 (irregV "know" "knew" "known") ;- know_VS = mkVS (irregV "know" "knew" "known") ;- lake_N = regN "lake" ;- lamp_N = regN "lamp" ;- learn_V2 = dirV2 (regV "learn") ;- leather_N = regN "leather" ;- leave_V2 = dirV2 (irregV "leave" "left" "left") ;- like_V2 = dirV2 (regV "like") ;- listen_V2 = prepV2 (regV "listen") toP ;- live_V = (regV "live") ;- long_A = regADeg "long" ;- lose_V2 = dirV2 (irregV "lose" "lost" "lost") ;- love_N = regN "love" ;- love_V2 = dirV2 (regV "love") ;- man_N = mkN masculine (mk2N "man" "men") ;- married_A2 = mkA2 (regA "married") toP ;- meat_N = regN "meat" ;- milk_N = regN "milk" ;- moon_N = regN "moon" ;- mother_N2 = mkN2 (mkN feminine (mkN "mother")) (mkPrep "of") ;- mountain_N = regN "mountain" ;- music_N = regN "music" ;- narrow_A = regADeg "narrow" ;- new_A = regADeg "new" ;- newspaper_N = regN "newspaper" ;- oil_N = regN "oil" ;- old_A = regADeg "old" ;- open_V2 = dirV2 (regV "open") ;- paint_V2A = mkV2A (regV "paint") noPrep ;- paper_N = regN "paper" ;- paris_PN = mkPN (mkN nonhuman (mkN "Paris")) ;- peace_N = regN "peace" ;- pen_N = regN "pen" ;- planet_N = regN "planet" ;- plastic_N = regN "plastic" ;- play_V2 = dirV2 (regV "play") ;- policeman_N = mkN masculine (mkN "policeman" "policemen") ;- priest_N = mkN human (regN "priest") ;- probable_AS = mkAS (regA "probable") ;- queen_N = mkN feminine (regN "queen") ;- radio_N = regN "radio" ;- rain_V0 = mkV0 (regV "rain") ;- read_V2 = dirV2 (irregV "read" "read" "read") ;- red_A = duplADeg "red" ;- religion_N = regN "religion" ;- restaurant_N = regN "restaurant" ;- river_N = regN "river" ;- rock_N = regN "rock" ;- roof_N = regN "roof" ;- rubber_N = regN "rubber" ;- run_V = (irregDuplV "run" "ran" "run") ;- say_VS = mkVS (irregV "say" "said" "said") ;- school_N = regN "school" ;- science_N = regN "science" ;- sea_N = regN "sea" ;- seek_V2 = dirV2 (irregV "seek" "sought" "sought") ;- see_V2 = dirV2 (irregV "see" "saw" "seen") ;- sell_V3 = dirV3 (irregV "sell" "sold" "sold") toP ;- send_V3 = dirV3 (irregV "send" "sent" "sent") toP ;- sheep_N = mk2N "sheep" "sheep" ;- ship_N = regN "ship" ;- shirt_N = regN "shirt" ;- shoe_N = regN "shoe" ;- shop_N = regN "shop" ;- short_A = regADeg "short" ;- silver_N = regN "silver" ;- sister_N = mkN feminine (mkN "sister") ;- sleep_V = (irregV "sleep" "slept" "slept") ;- small_A = regADeg "small" ;- snake_N = regN "snake" ;- sock_N = regN "sock" ;- speak_V2 = dirV2 (irregV "speak" "spoke" "spoken") ;- star_N = regN "star" ;- steel_N = regN "steel" ;- stone_N = regN "stone" ;- stove_N = regN "stove" ;- student_N = mkN human (regN "student") ;- stupid_A = mkA "stupid" ;- sun_N = regN "sun" ;- switch8off_V2 = dirV2 (partV (regV "switch") "off") ;- switch8on_V2 = dirV2 (partV (regV "switch") "on") ;- table_N = regN "table" ;- talk_V3 = mkV3 (regV "talk") toP aboutP ;- teacher_N = mkN human (regN "teacher") ;- teach_V2 = dirV2 (irregV "teach" "taught" "taught") ;- television_N = regN "television" ;- thick_A = regADeg "thick" ;- thin_A = duplADeg "thin" ;- train_N = regN "train" ;- travel_V = (regDuplV "travel") ;- tree_N = regN "tree" ;- ---- trousers_N = regN "trousers" ;- ugly_A = mkA "ugly" ;- understand_V2 = dirV2 (irregV "understand" "understood" "understood") ;- university_N = regN "university" ;- village_N = regN "village" ;- wait_V2 = prepV2 (regV "wait") forP ;- walk_V = (regV "walk") ;- warm_A = regADeg "warm" ;- war_N = regN "war" ;- watch_V2 = dirV2 (regV "watch") ;- water_N = regN "water" ;- white_A = mkA "white" ;- window_N = regN "window" ;- wine_N = regN "wine" ;- win_V2 = dirV2 (irregDuplV "win" "won" "won") ;- woman_N = mkN feminine (mk2N "woman" "women") ;- wonder_VQ = mkVQ (mkV "wonder" "wondered") ;- wood_N = regN "wood" ;- write_V2 = dirV2 (irregV "write" "wrote" "written") ;- yellow_A = mkA "yellow" ;- young_A = regADeg "young" ;+ --left_Ord = mkOrd "left" ;+ --right_Ord = mkOrd "right" ;+ far_Adv = mkAdv "tālu" ;+ correct_A = mkA "pareizs" ;+ dry_A = mkA "sauss" ;+ dull_A = mkA "neass" ; -- garlaicīgs?+ full_A = mkA "pilns" ;+ heavy_A = mkA "smags" ;+ near_A = mkA "tuvs" ;+ rotten_A = mkA "sapuvis" ;+ round_A = mkA "apaļš" ;+ sharp_A = mkA "ass" ;+ smooth_A = mkA "gluds" ;+ straight_A = mkA "taisns" ;+ wet_A = mkA "slapjš" ;+ wide_A = mkA "plats" ;+ animal_N = mkN "dzīvnieks" ;+ ashes_N = mkN "pelni" ; -- FIXME: plural only? kā to norāda?+ back_N = mkN "mugura" ;+ bark_N = mkN "miza" ;+ belly_N = mkN "vēders" ;+ blood_N = mkN "asinis" Fem ;+ bone_N = mkN "kauls" ;+ breast_N = mkN "krūts" Fem ;+ cloud_N = mkN "mākonis" ;+ day_N = mkN "diena" ;+ dust_N = mkN "putekļi" ;+ ear_N = mkN "auss" ;+ earth_N = mkN "zeme" ;+ egg_N = mkN "ola" ;+ eye_N = mkN "acs" ;+ fat_N = mkN "tauki" ;+ feather_N = mkN "spalva" ;+ fingernail_N = mkN "nags" ;+ fire_N = mkN "uguns" ;+ flower_N = mkN "puķe" ;+ fog_N = mkN "migla" ;+ foot_N = mkN "pēda" ;+ forest_N = mkN "mežs" ;+ grass_N = mkN "zāle" ;+ guts_N = mkN "zarnas" ; -- FIXME: no singular+ hair_N = mkN "mati" ;+ hand_N = mkN "roka" ;+ head_N = mkN "galva" ;+ heart_N = mkN "sirds" ;+ horn_N = mkN "rags" ;+ husband_N = mkN "vīrs" ; --TODO: kāpēc nav parametrs tāpat kā tēvam?+ ice_N = mkN "ledus" ;+ knee_N = mkN "ceļgals" ;+ leaf_N = mkN "lapa" ;+ leg_N = mkN "kāja" ;+ liver_N = mkN "aknas" ;+ louse_N = mkN "uts" ;+ mouth_N = mkN "mute" ;+ name_N = mkN "vārds" ;+ neck_N = mkN "kakls" ;+ night_N = mkN "nakts" ;+ nose_N = mkN "deguns" ;+ person_N = mkN "cilvēks" ;+ rain_N = mkN "lietus" ;+ road_N = mkN "ceļš" ;+ root_N = mkN "sakne" ;+ rope_N = mkN "virve" ;+ salt_N = mkN "sāls" ;+ sand_N = mkN "smiltis" ;+ seed_N = mkN "sēkla" ;+ skin_N = mkN "āda" ;+ sky_N = mkN "debesis" ;+ smoke_N = mkN "dūmi" ;+ snow_N = mkN "sniegs" ;+ stick_N = mkN "nūja" ;+ tail_N = mkN "aste" ;+ tongue_N = mkN "mēle" ;+ tooth_N = mkN "zobs";+ wife_N = mkN "sieva" ;+ wind_N = mkN "vējš" ;+ wing_N = mkN "spārns" ;+ worm_N = mkN "tārps" ;+ year_N = mkN "gads" ; - do_V2 = dirV2 (mk5V "do" "does" "did" "done" "doing") ;- now_Adv = mkAdv "now" ;- already_Adv = mkAdv "already" ;- song_N = regN "song" ;- add_V3 = dirV3 (regV "add") toP ;- number_N = regN "number" ;- put_V2 = prepV2 (irregDuplV "put" "put" "put") noPrep ;- stop_V = regDuplV "stop" ;- jump_V = regV "jump" ;+ blow_V = mkV "pūst" "pūšu" "pūtu" ;+ breathe_V = mkV2 (mkV "elpot" second_conjugation) acc_Prep ;+ burn_V = mkV "degt" "degu" "degu" ;+ dig_V = mkV "rakt" "roku" "raku" ;+ fall_V = mkV "krist" "krītu" "kritu" ;+ float_V = mkV "peldēt" third_conjugation ;+ flow_V = mkV "plūst" "plūstu" "plūdu" ;+ fly_V = mkV "lidot" second_conjugation ;+ freeze_V = mkV "sasalt" "sasalstu" "sasalu" ;+ give_V3 = mkV3 (mkV "dot" "dodu" "devu") acc_Prep dat_Prep ; -- dot ko? kam?+ laugh_V = mkV "smieties" "smejos" "smējos" ;+ lie_V = mkV "gulties" "guļos" "gūlos" ;+ play_V = mkV "spēlēt" second_conjugation ;+ sew_V = mkV "šūt" "šuju" "šuvu" ;+ sing_V = mkV "dziedāt" third_conjugation ;+ sit_V = mkV "sēdēt" third_conjugation ;+ smell_V = mkV "smirdēt" third_conjugation ;+ spit_V = mkV "spļaut" "spļauju" "spļāvu" ;+ stand_V = mkV "stāvēt" third_conjugation ;+ swell_V = mkV "piebriest" "piebriestu" "piebriedu" ;+ swim_V = mkV "peldēt" third_conjugation ;+ think_V = mkV "domāt" second_conjugation ;+ turn_V = mkV "griezties" "griežos" "griezos" ;+ vomit_V = mkV "vemt" "vemju" "vēmu" ; - left_Ord = mkOrd "left" ;- right_Ord = mkOrd "right" ;- far_Adv = mkAdv "far" ;- correct_A = (regA "correct") ;- dry_A = regA "dry" ;- dull_A = regA "dull" ;- full_A = regA "full" ;- heavy_A = regA "heavy" ;- near_A = regA "near" ;- rotten_A = (regA "rotten") ;- round_A = regA "round" ;- sharp_A = regA "sharp" ;- smooth_A = regA "smooth" ;- straight_A = regA "straight" ;- wet_A = regA "wet" ; ----- wide_A = regA "wide" ;- animal_N = regN "animal" ;- ashes_N = regN "ash" ; -- FIXME: plural only?- back_N = regN "back" ;- bark_N = regN "bark" ;- belly_N = regN "belly" ;- blood_N = regN "blood" ;- bone_N = regN "bone" ;- breast_N = regN "breast" ;- cloud_N = regN "cloud" ;- day_N = regN "day" ;- dust_N = regN "dust" ;- ear_N = regN "ear" ;- earth_N = regN "earth" ;- egg_N = regN "egg" ;- eye_N = regN "eye" ;- fat_N = regN "fat" ;- feather_N = regN "feather" ;- fingernail_N = regN "fingernail" ;- fire_N = regN "fire" ;- flower_N = regN "flower" ;- fog_N = regN "fog" ;- foot_N = mk2N "foot" "feet" ;- forest_N = regN "forest" ;- grass_N = regN "grass" ;- guts_N = regN "gut" ; -- FIXME: no singular- hair_N = regN "hair" ;- hand_N = regN "hand" ;- head_N = regN "head" ;- heart_N = regN "heart" ;- horn_N = regN "horn" ;- husband_N = mkN masculine (regN "husband") ;- ice_N = regN "ice" ;- knee_N = regN "knee" ;- leaf_N = mk2N "leaf" "leaves" ;- leg_N = regN "leg" ;- liver_N = regN "liver" ;- louse_N = mk2N "louse" "lice" ;- mouth_N = regN "mouth" ;- name_N = regN "name" ;- neck_N = regN "neck" ;- night_N = regN "night" ;- nose_N = regN "nose" ;- person_N = mkN human (regN "person") ;- rain_N = regN "rain" ;- road_N = regN "road" ;- root_N = regN "root" ;- rope_N = regN "rope" ;- salt_N = regN "salt" ;- sand_N = regN "sand" ;- seed_N = regN "seed" ;- skin_N = regN "skin" ;- sky_N = regN "sky" ;- smoke_N = regN "smoke" ;- snow_N = regN "snow" ;- stick_N = regN "stick" ;- tail_N = regN "tail" ;- tongue_N = regN "tongue" ;- tooth_N = mk2N "tooth" "teeth" ;- wife_N = mkN feminine (mk2N "wife" "wives") ;- wind_N = regN "wind" ;- wing_N = regN "wing" ;- worm_N = regN "worm" ;- year_N = regN "year" ;- blow_V = IrregEng.blow_V ;- breathe_V = dirV2 (regV "breathe") ;- burn_V = IrregEng.burn_V ;- dig_V = IrregEng.dig_V ;- fall_V = IrregEng.fall_V ;- float_V = regV "float" ;- flow_V = regV "flow" ;- fly_V = IrregEng.fly_V ;- freeze_V = IrregEng.freeze_V ;- give_V3 = dirV3 give_V toP ;- laugh_V = regV "laugh" ;- lie_V = IrregEng.lie_V ;- play_V = regV "play" ;- sew_V = IrregEng.sew_V ;- sing_V = IrregEng.sing_V ;- sit_V = IrregEng.sit_V ;- smell_V = regV "smell" ;- spit_V = IrregEng.spit_V ;- stand_V = IrregEng.stand_V ;- swell_V = IrregEng.swell_V ;- swim_V = IrregEng.swim_V ;- think_V = IrregEng.think_V ;- turn_V = regV "turn" ;- vomit_V = mkV "vomit" "vomited" ;+ bite_V2 = mkV2 (mkV "kost" "kožu" "kodu") dat_Prep ;+ count_V2 = mkV2 (mkV "skaitīt" third_conjugation) acc_Prep ;+ cut_V2 = mkV2 (mkV "griezt" "griežu" "griezu") acc_Prep ;+ fear_V2 = mkV2 (mkV "baidīties" third_conjugation) from_Prep ;+ fight_V2 = mkV2 (mkV "cīnīties" third_conjugation) with_Prep ;+ hit_V2 = mkV2 (mkV "sist" "situ" "situ") dat_Prep ;+ -- TODO: atkal valences, var arī akuzatīvu ar bik citu nozīmi+ hold_V2 = mkV2 (mkV "turēt" third_conjugation) acc_Prep ;+ hunt_V2 = mkV2 (mkV "medīt" second_conjugation) acc_Prep ;+ kill_V2 = mkV2 (mkV "nogalināt" third_conjugation) acc_Prep ;+ pull_V2 = mkV2 (mkV "vilkt" "velku" "vilku") acc_Prep ;+ push_V2 = mkV2 (mkV "stumt" "stumju" "stūmu") acc_Prep ;+ rub_V2 = mkV2 (mkV "berzt" "beržu" "berzu") acc_Prep ;+ scratch_V2 = mkV2 (mkV "kasīt" third_conjugation) acc_Prep ;+ split_V2 = mkV2 (mkV "sadalīt" third_conjugation) acc_Prep ;+ squeeze_V2 = mkV2 (mkV "saspiest" "saspiežu" "saspiedu") acc_Prep ;+ stab_V2 = mkV2 (mkV "sadurt" "saduru" "sadūru") acc_Prep ;+ suck_V2 = mkV2 (mkV "sūkt" "sūcu" "sūcu") acc_Prep ;+ throw_V2 = mkV2 (mkV "mest" "metu" "metu") acc_Prep ;+ tie_V2 = mkV2 (mkV "piesiet" "piesienu" "piesēju") acc_Prep ;+ wash_V2 = mkV2 (mkV "mazgāt" second_conjugation) acc_Prep ;+ wipe_V2 = mkV2 (mkV "slaucīt" third_conjugation) acc_Prep ; - bite_V2 = dirV2 IrregEng.bite_V ;- count_V2 = dirV2 (regV "count") ;- cut_V2 = dirV2 IrregEng.cut_V ;- fear_V2 = dirV2 (regV "fear") ;- fight_V2 = dirV2 fight_V ;- hit_V2 = dirV2 hit_V ;- hold_V2 = dirV2 hold_V ;- hunt_V2 = dirV2 (regV "hunt") ;- kill_V2 = dirV2 (regV "kill") ;- pull_V2 = dirV2 (regV "pull") ;- push_V2 = dirV2 (regV "push") ;- rub_V2 = dirV2 (regDuplV "rub") ;- scratch_V2 = dirV2 (regV "scratch") ;- split_V2 = dirV2 split_V ;- squeeze_V2 = dirV2 (regV "squeeze") ;- stab_V2 = dirV2 (regDuplV "stab") ;- suck_V2 = dirV2 (regV "suck") ;- throw_V2 = dirV2 throw_V ;- tie_V2 = dirV2 (regV "tie") ;- wash_V2 = dirV2 (regV "wash") ;- wipe_V2 = dirV2 (regV "wipe") ;+ --other_A = regA "other" ; --- other_A = regA "other" ;+ grammar_N = mkN "gramatika" ;+ language_N = mkN "valoda" ;+ rule_N = mkN "likums" ; - grammar_N = regN "grammar" ;- language_N = regN "language" ;- rule_N = regN "rule" ;+ john_PN = mkPN "Jānis" ; --- added 4/6/2007- john_PN = mkPN (mkN masculine (mkN "John")) ;- question_N = regN "question" ;- ready_A = regA "ready" ;- reason_N = regN "reason" ;- today_Adv = mkAdv "today" ;- uncertain_A = regA "uncertain" ;+ question_N = mkN "jautājums" ;+ ready_A = mkA "gatavs" ;+ reason_N = mkN "iemesls" ;+ today_Adv = mkAdv "šodien" ;+ uncertain_A = mkA "nepārliecināts" ; oper- aboutP = mkPrep "about" ;+ par_Prep = mkPrep "par" Acc Dat ;++{- atP = mkPrep "at" ; forP = mkPrep "for" ; fromP = mkPrep "from" ; inP = mkPrep "in" ; onP = mkPrep "on" ; toP = mkPrep "to" ;- -}- -} ;++}
@@ -1,13 +1,15 @@ --# -path=.:../common:../abstract -resource MakeStructuralLav = open CatLav, ParadigmsLav, ResLav, MorphoLav, Prelude in {-{--oper - mkSubj : Str -> Subj = \x -> +resource MakeStructuralLav = open CatLav, ParadigmsLav, ResLav, Prelude in {++flags+ coding = utf8 ;++oper+ mkSubj : Str -> Subj = \x -> lin Subj {s = x} ;- mkNP : Str -> ParadigmsEng.Number -> NP = \s,n ->- lin NP (regNP s n) ;- mkIDet : Str -> ParadigmsEng.Number -> IDet = \s,n ->- lin IDet {s = s ; n = n} ;--}++ mkIDet : Str -> ParadigmsLav.Number -> IDet = \s,n ->+ lin IDet {s = \\_ => s ; n = n} ;+ }
@@ -1,43 +1,12 @@---# -path=.:../../prelude+--# -path=.:../abstract:../common:../prelude ---1 A Simple English Resource Morphology------ Aarne Ranta 2002 -- 2005--- -- This resource morphology contains definitions needed in the resource--- syntax. To build a lexicon, it is better to use $ParadigmsEng$, which+-- syntax. To build a lexicon, it is better to use $ParadigmsLav$, which -- gives a higher-level access to this module. -resource MorphoLav = open Prelude, (Predef=Predef), ResLav in {-- flags optimize=all ;----2 Determiners-{-- oper-- mkDeterminer : Number -> Str ->- {s : Str ; sp : NPCase => Str; n : Number ; hasNum : Bool} = \n,s ->- {s = s;- sp = \\c => regGenitiveS s ! npcase2case c ;- n = n ;- hasNum = True ; -- doesn't matter since s = sp- } ;----2 Pronouns-+resource MorphoLav = ResLav ** { - mkPron : (i,me,my,mine : Str) -> Number -> Person -> Gender ->- {s : NPCase => Str ; sp : Case => Str ; a : Agr} =- \i,me,my,mine,n,p,g -> {- s = table {- NCase Nom => i ;- NPAcc => me ;- NCase Gen => my- } ;- a = toAgr n p g ;- sp = regGenitiveS mine- } ;--}-} ;+flags+ optimize = all ; +}
@@ -1,150 +1,157 @@-concrete NounLav of Noun = CatLav ** open MorphoLav, ResLav, Prelude in {-flags optimize=all_subs ;+--# -path=.:../abstract:../common:../prelude - lin+concrete NounLav of Noun = CatLav ** open+ MorphoLav,+ ResLav,+ Prelude+ in { - UseN n = {s = \\_ => n.s ; g = n.g} ;- - DetCN det cn = {- s = \\c => det.s ! cn.g ! c ++ cn.s ! det.d ! det.n ! c ;- g = cn.g ;- n = det.n ;- p = P3 ;- } ;- - - -{-- DetCN det cn = {- s = \\c => det.s ++ cn.s ! det.n ! c ; - a = agrgP3 det.n cn.g- } ;+flags+ coding = utf8 ;+ optimize = all_subs ; - UsePN pn = pn ** {a = agrgP3 Sg pn.g} ;- UsePron p = p ;+lin+ UseN n = { s = \\_ => n.s ; g = n.g } ;+ UsePN pn = { s = pn.s ; a = agrgP3 Sg pn.g } ;+ UsePron p = p ; - PredetNP pred np = {- s = \\c => pred.s ++ np.s ! c ;- a = np.a- } ;+ PredetNP pred np = {+ s = \\c => pred.s ! (fromAgr np.a).g ++ np.s ! c ;+ a = np.a+ } ; - PPartNP np v2 = {- s = \\c => np.s ! c ++ v2.s ! VPPart ;- a = np.a- } ;+ UseN2 n = { s = \\_ => n.s ; g = n.g } ;+ UseN3 n = n ; - RelNP np rs = {- s = \\c => np.s ! c ++ "," ++ rs.s ! np.a ;- a = np.a- } ;+ ComplN2 f x = {+ s = \\_,n,c => preOrPost f.isPre (f.p.s ++ x.s ! (f.p.c ! (fromAgr x.a).n)) (f.s ! n ! c) ;+ g = f.g+ } ; - AdvNP np adv = {- s = \\c => np.s ! c ++ adv.s ;- a = np.a- } ;+ ComplN3 f x = {+ s = \\n,c => preOrPost f.isPre1 (f.p1.s ++ x.s ! (f.p1.c ! (fromAgr x.a).n)) (f.s ! n ! c) ;+ g = f.g ;+ p = f.p2 ;+ isPre = f.isPre2+ } ; - DetQuant quant num = {- s = quant.s ! num.hasCard ! num.n ++ num.s ! Nom;- sp = \\c => case num.hasCard of {- False => quant.sp ! num.hasCard ! num.n ! c ++ num.s ! Nom ;- True => quant.sp ! num.hasCard ! num.n ! Nom ++ num.s ! c- } ;- n = num.n- } ;+ Use2N3 n = { s = n.s ; g = n.g ; p = n.p1 ; isPre = n.isPre1 } ;+ Use3N3 n = { s = n.s ; g = n.g ; p = n.p2 ; isPre = n.isPre2 } ; - DetQuantOrd quant num ord = {- s = quant.s ! num.hasCard ! num.n ++ num.s ! Nom ++ ord.s ! Nom; - sp = \\c => quant.sp ! num.hasCard ! num.n ! Nom ++ num.s ! Nom ++ ord.s ! c ; - n = num.n- } ;+ AdvNP np adv = {+ s = \\c => np.s ! c ++ adv.s ;+ a = np.a+ } ; - DetNP det = {- s = det.sp ;- a = agrP3 det.n- } ;+ RelNP np rs = {+ s = \\c => np.s ! c ++ "," ++ rs.s ! np.a ;+ a = np.a+ } ; - PossPron p = {- s = \\_,_ => p.s ! Gen ;- sp = \\_,_ => p.sp - } ;+ DetCN det cn = {+ s = \\c => det.s ! cn.g ! c ++ cn.s ! det.d ! det.n ! c ;+ a = AgP3 det.n cn.g ;+ } ; - NumSg = {s = \\c => []; n = Sg ; hasCard = False} ;- NumPl = {s = \\c => []; n = Pl ; hasCard = False} ;----b NoOrd = {s = []} ;+ DetQuant quant num = {+ s = \\g,c => quant.s ! g ! num.n ! c ++ num.s ! g ! c ;+ n = num.n ;+ d = quant.d -- FIXME: ja ir kārtas skaitļa vārds, tad tikai noteiktās formas drīkst būt+ } ; - NumCard n = n ** {hasCard = True} ;+ DetQuantOrd quant num ord = {+ s = \\g,c => quant.s ! g ! num.n ! c ++ num.s ! g ! c ++ ord.s ! g ! c ;+ n = num.n ;+ d = quant.d --FIXME: ja ir kārtas skaitļa vārds, tad tikai noteiktās formas drīkst būt+ } ; - NumDigits n = {s = n.s ! NCard ; n = n.n} ;- OrdDigits n = {s = n.s ! NOrd} ;+ DetNP det = {+ s = \\c => det.s ! Masc ! c ;+ a = AgP3 det.n Masc+ } | {+ s = \\c => det.s ! Fem ! c ;+ a = AgP3 det.n Fem+ } ; - NumNumeral numeral = {s = numeral.s ! NCard; n = numeral.n} ;- OrdNumeral numeral = {s = numeral.s ! NOrd} ;+ AdjCN ap cn = {+ s = \\d,n,c => ap.s ! d ! cn.g ! n ! c ++ cn.s ! d ! n ! c ;+ g = cn.g+ } ; - AdNum adn num = {s = \\c => adn.s ++ num.s!c ; n = num.n} ;+ DefArt = {+ s = \\_,_,_ => [] ;+ d = Def+ } ; - OrdSuperl a = {s = \\c => a.s ! AAdj Superl c } ;+ IndefArt = {+ s = \\_,_,_ => [] ;+ d = Indef+ } ; - DefArt = {- s = \\hasCard,n => artDef ;- sp = \\hasCard,n => case <n,hasCard> of {- <Sg,False> => table { Gen => "its"; _ => "it" } ;- <Pl,False> => table { Nom => "they"; Acc => "them"; Gen => "theirs" } ;- _ => \\c => artDef- }- } ;+ PossPron p = {+ s = p.possessive ;+ d = Def ;+ } ; - IndefArt = {- s = \\hasCard,n => case <n,hasCard> of {- <Sg,False> => artIndef ;- _ => []- } ;- sp = \\hasCard,n => case <n,hasCard> of {- <Sg,False> => table { Gen => "one's"; _ => "one" };- <Pl,False> => table { Gen => "ones'"; _ => "ones" } ;- _ => \\c => []- }- } ;+ MassNP cn = {+ s = cn.s ! Indef ! Sg ; -- FIXME: a 'šis alus'? der tak gan 'zaļš alus' gan 'zaļais alus'+ a = AgP3 Sg cn.g+ } ; - MassNP cn = {- s = cn.s ! Sg ;- a = agrP3 Sg- } ;+ NumSg = { s = \\_,_ => [] ; n = Sg ; hasCard = False } ;+ NumPl = { s = \\_,_ => [] ; n = Pl ; hasCard = False } ; - UseN n = n ;- UseN2 n = n ;----b UseN3 n = n ;+ NumCard n = n ** { hasCard = True } ; - Use2N3 f = {- s = \\n,c => f.s ! n ! Nom ;- g = f.g ;- c2 = f.c2- } ;+ NumDigits n = { s = \\g,c => n.s ! NCard ; n = n.n } ;+ OrdDigits n = { s = \\g,c => n.s ! NOrd } ; - Use3N3 f = {- s = \\n,c => f.s ! n ! Nom ;- g = f.g ;- c2 = f.c3- } ;+ NumNumeral numeral = { s = numeral.s ! NCard ; n = numeral.n } ;+ OrdNumeral numeral = { s = numeral.s ! NOrd } ; - ComplN2 f x = {s = \\n,c => f.s ! n ! Nom ++ f.c2 ++ x.s ! c ; g = f.g} ;- ComplN3 f x = {- s = \\n,c => f.s ! n ! Nom ++ f.c2 ++ x.s ! c ;- g = f.g ;- c2 = f.c3- } ;+ OrdSuperl a = { s = \\g,c => a.s ! (AAdj Superl Def g Sg c) } ; - AdjCN ap cn = {- s = \\n,c => preOrPost ap.isPre (ap.s ! agrgP3 n cn.g) (cn.s ! n ! c) ;- g = cn.g- } ;- RelCN cn rs = {- s = \\n,c => cn.s ! n ! c ++ rs.s ! agrgP3 n cn.g ;- g = cn.g- } ;- AdvCN cn ad = {s = \\n,c => cn.s ! n ! c ++ ad.s ; g = cn.g} ;+ AdNum adn num = {+ s = \\g,c => adn.s ++ num.s ! g ! c ;+ n = num.n ;+ hasCard = num.n+ } ; - SentCN cn sc = {s = \\n,c => cn.s ! n ! c ++ sc.s ; g = cn.g} ;+ AdvCN cn ad = {+ s = \\d,n,c => cn.s ! d ! n ! c ++ ad.s ;+ g = cn.g+ } ; - ApposCN cn np = {s = \\n,c => cn.s ! n ! Nom ++ np.s ! c ; g = cn.g} ;--}+ -- 'Pielikums'+ ApposCN cn np = {+ s = \\d,n,c => case (fromAgr np.a).n of {+ n => cn.s ! d ! n ! c ++ np.s ! c ; -- FIXME: comparison not working+ _ => NON_EXISTENT+ } ;+ g = cn.g+ } ;++ RelCN cn rs = {+ s = \\d, n,c => cn.s ! d ! n ! c ++ "," ++ rs.s ! AgP3 n cn.g ;+ g = cn.g+ } ;++ SentCN cn sc = {+ s = \\d,n,c => cn.s ! d ! n ! c ++ "," ++ sc.s ;+ g = cn.g+ } ;++ -- FIXME: vajag -ts / -ta divdabja formu, + šķirot noteikto/nenoteikto galotni+ PPartNP np v2 = {+ s = \\c => v2.s ! Pos ! (Participle (fromAgr np.a).g (fromAgr np.a).n c) ++ np.s ! c ;+ a = np.a+ } ;++ -- TODO: šim vajag -ts -ta divdabjus (+ noteiktās formas tiem)+ --PPartNP np v2 = {+ -- s = \\c => np.s ! c ++ v2.s ! VPPart ;+ -- a = np.a+ --} ;+ --SentCN cn sc = { s = \\n,c => cn.s ! n ! c ++ sc.s ; g = cn.g } ;+ }
@@ -1,95 +1,117 @@-concrete NumeralLav of Numeral = CatLav ** open ResLav in {-{--lincat - Digit = {s : DForm => CardOrd => Case => Str} ;- Sub10 = {s : DForm => CardOrd => Case => Str ; n : Number} ;- Sub100 = {s : CardOrd => Case => Str ; n : Number} ;- Sub1000 = {s : CardOrd => Case => Str ; n : Number} ;- Sub1000000 = {s : CardOrd => Case => Str ; n : Number} ;+--# -path=.:../abstract:../common:../prelude -lin num x = x ;-lin n2 = let two = mkNum "two" "twelve" "twenty" "second" in- {s = \\f,o => case <f,o> of {- <teen,NOrd> => regGenitiveS "twelfth" ;- _ => two.s ! f ! o- }- } ;+concrete NumeralLav of Numeral = CatLav ** open+ ResLav,+ ParadigmsLav+ in { -lin n3 = mkNum "three" "thirteen" "thirty" "third" ;-lin n4 = mkNum "four" "fourteen" "forty" "fourth" ;-lin n5 = mkNum "five" "fifteen" "fifty" "fifth" ;-lin n6 = regNum "six" ;-lin n7 = regNum "seven" ;-lin n8 = mkNum "eight" "eighteen" "eighty" "eighth" ;-lin n9 = mkNum "nine" "nineteen" "ninety" "ninth" ;+flags+ coding = utf8 ; -lin pot01 = mkNum "one" "eleven" "ten" "first" ** {n = Sg} ;-lin pot0 d = d ** {n = Pl} ;-lin pot110 = regCardOrd "ten" ** {n = Pl} ;-lin pot111 = regCardOrd "eleven" ** {n = Pl} ;-lin pot1to19 d = {s = d.s ! teen} ** {n = Pl} ;-lin pot0as1 n = {s = n.s ! unit} ** {n = n.n} ;-lin pot1 d = {s = d.s ! ten} ** {n = Pl} ;-lin pot1plus d e = {- s = \\o,c => d.s ! ten ! NCard ! Nom ++ "-" ++ e.s ! unit ! o ! c ; n = Pl} ;-lin pot1as2 n = n ;-lin pot2 d = {s = \\o,c => d.s ! unit ! NCard ! Nom ++ mkCard o "hundred" ! c} ** {n = Pl} ;-lin pot2plus d e = {- s = \\o,c => d.s ! unit ! NCard ! Nom ++ "hundred" ++ "and" ++ e.s ! o ! c ; n = Pl} ;-lin pot2as3 n = n ;-lin pot3 n = {- s = \\o,c => n.s ! NCard ! Nom ++ mkCard o "thousand" ! c ; n = Pl} ;-lin pot3plus n m = {- s = \\o,c => n.s ! NCard ! Nom ++ "thousand" ++ m.s ! o ! c; n = Pl} ;+lincat+ -- TODO: formas, kas pieprasa ģenitīvu - tūkstotis grāmatu, trīs simti meiteņu+ Digit = { s : DForm => CardOrd => Gender => Case => Str } ;+ Sub10 = { s : CardOrd => Gender => Case => Str ; n : Number } ;+ Sub100 = { s : CardOrd => Gender => Case => Str ; n : Number } ;+ Sub1000 = { s : CardOrd => Gender => Case => Str ; n : Number } ;+ Sub1000000 = { s : CardOrd => Gender => Case => Str ; n : Number } ; --- numerals as sequences of digits+lin+ num x = x ; - lincat - Dig = TDigit ;+ n2 = mkNumReg "divi" "otrais" Pl ; - lin- IDig d = d ** {tail = T1} ;+ n3 =+ let trijs = mkNumSpec "trijs" "trešais" "trīs" "trīs" Pl+ in {+ s = \\f,o,g,c => case <f, o, g, c> of {+ <unit, NCard, _, Nom> => "trīs" ;+ <unit, NCard, _, Dat> => "trim" ;+ <unit, NCard, _, Loc> => "trīs" ;+ _ => trijs.s ! f ! o ! g ! c+ }+ } | {+ s = \\f,o,g,c => case <f, o, g, c> of {+ <unit, NCard, _, Nom> => "trīs" ;+ _ => trijs.s ! f ! o ! g ! c+ }+ } ; - IIDig d i = {- s = \\o,c => d.s ! NCard ! Nom ++ commaIf i.tail ++ i.s ! o ! c ;- n = Pl ;- tail = inc i.tail- } ;+ n4 = mkNumReg "četri" "ceturtais" Pl ;+ n5 = mkNumReg "pieci" "piektais" Pl ;+ n6 = mkNumReg "seši" "sestais" Pl ;+ n7 = mkNumReg "septiņi" "septītais" Pl ;+ n8 = mkNumReg "astoņi" "astotais" Pl ;+ n9 = mkNumReg "deviņi" "devītais" Pl ; - D_0 = mkDig "0" ;- D_1 = mk3Dig "1" "1st" Sg ;- D_2 = mk2Dig "2" "2nd" ;- D_3 = mk2Dig "3" "3rd" ;- D_4 = mkDig "4" ;- D_5 = mkDig "5" ;- D_6 = mkDig "6" ;- D_7 = mkDig "7" ;- D_8 = mkDig "8" ;- D_9 = mkDig "9" ;+ pot01 = { s = viens.s ! unit } ** { n = Sg } ;+ pot0 d = { s = d.s ! unit } ** { n = Pl } ;+ pot110 = { s = viens.s ! ten } ** { n = Pl } ;+ pot111 = { s = viens.s ! teen } ** { n = Pl } ;+ pot1to19 d = { s = d.s ! teen } ** { n = Pl } ;+ pot0as1 n = { s = n.s ; n = n.n } ;+ pot1 d = { s = d.s ! ten } ** { n = Pl } ; - oper- commaIf : DTail -> Str = \t -> case t of {- T3 => "," ;- _ => []- } ;+ pot1plus d e = {+ s = \\o,g,c => d.s ! ten ! NCard ! Masc ! Nom ++ e.s ! o ! g ! c ;+ n = e.n+ } ; - inc : DTail -> DTail = \t -> case t of {- T1 => T2 ;- T2 => T3 ;- T3 => T1- } ;+ pot1as2 n = n ; - mk2Dig : Str -> Str -> TDigit = \c,o -> mk3Dig c o Pl ;- mkDig : Str -> TDigit = \c -> mk2Dig c (c + "th") ;+ -- FIXME: nav īsti labi, kārtas skaitlim ir jābūt 'trīssimtais' utml+ pot2 d = {+ s = \\o,g,c => d.s ! NCard ! Masc ! Nom ++ simts ! o ! g ! d.n ! c ;+ n = Pl+ } ; - mk3Dig : Str -> Str -> Number -> TDigit = \c,o,n -> {- s = table {NCard => regGenitiveS c ; NOrd => regGenitiveS o} ;- n = n- } ;+ pot2plus d e = {+ s = \\o,g,c => d.s ! NCard ! Masc ! Nom ++ simts ! NCard ! Masc ! d.n ! Nom ++ e.s ! o ! g ! c ;+ n = e.n+ } ; - TDigit = {- n : Number ;- s : CardOrd => Case => Str- } ;--}+ pot2as3 n = n ;++ pot3 d = {+ s = \\o,g,c => d.s ! NCard ! Masc ! Nom ++ tuukstotis ! o ! g ! d.n ! c ;+ n = Pl+ } ;++ pot3plus d e = {+ s = \\o,g,c => d.s ! NCard ! Masc ! Nom ++ tuukstotis ! NCard ! Masc ! d.n ! Nom ++ e.s ! o ! g ! c ;+ n = e.n+ } ;++-- Numerals as sequences of digits:++lincat+ Dig = { n : Number ; s : CardOrd => Str } ;++lin+ IDig d = d ;++ IIDig d i = {+ s = \\o => d.s ! NCard ++ i.s ! o ;+ n = Pl ; -- FIXME: 1 cilvēks, 11 cilvēki, 21 cilvēks, ...+ } ;++ D_0 = mkDig "0" ;+ D_1 = mk2Dig "1" Sg ;+ D_2 = mkDig "2" ;+ D_3 = mkDig "3" ;+ D_4 = mkDig "4" ;+ D_5 = mkDig "5" ;+ D_6 = mkDig "6" ;+ D_7 = mkDig "7" ;+ D_8 = mkDig "8" ;+ D_9 = mkDig "9" ;++oper+ mkDig : Str -> Dig = \c -> mk2Dig c Pl ;++ mk2Dig : Str -> Number -> Dig = \c,n -> lin Dig {+ s = table { NCard => c ; NOrd => c + "." } ;+ n = n+ } ;+ }
@@ -1,1 +0,0 @@-resource OverloadLav = Overload with (Grammar = GrammarLav) ;
@@ -1,18 +1,19 @@--- Latvian adjective paradigms - by Normunds Grūzītis; copied off mini-grammar as of 2011-07-12+--# -path=.:../abstract:../common:../prelude -resource ParadigmsAdjectivesLav = open - (Predef=Predef), - Prelude, +resource ParadigmsAdjectivesLav = open+ (Predef=Predef),+ Prelude, ResLav, CatLav in { flags coding = utf8;- + oper- Adj : Type = {s : Degree => Definite => Gender => Number => Case => Str} ;- + --Adj : Type = {s : Degree => Definite => Gender => Number => Case => Str} ;+ Adj : Type = {s : AForm => Str} ;+ -- ADJECTIVES -- TODO: Parameters and paradigms should be redesigned due to the many NON_EXISTENT forms..?@@ -38,34 +39,45 @@ -- Indeclinable adjective: theoretically, any #vowel ending mkAdjective_Indecl : Str -> Adj = \lemma -> { s = table{- Posit => \\_,_,_,_ => lemma ;- Compar => \\_,_,_,_ => lemma ;- Superl => table {Indef => \\_,_,_ => NON_EXISTENT ; Def => \\_,_,_ => lemma}+ AAdj Superl Indef _ _ _ => NON_EXISTENT;+ AAdj _ _ _ _ _ => lemma ;+ AAdv d => mkAdjective_Adverb lemma ! d-- TODO - notestēt šādu keisu } } ; -- Qualitative adjective: -s, -š mkAdjective_Qual : Str -> Adj = \lemma -> { s = table {- Posit => table {Indef => mkAdjective_Pos lemma Indef ; Def => mkAdjective_Pos lemma Def} ;- Compar => table {Indef => mkAdjective_Comp lemma Indef ; Def => mkAdjective_Comp lemma Def} ;- Superl => table {Indef => \\_,_,_ => NON_EXISTENT ; Def => mkAdjective_Sup lemma}+ AAdj Posit d g n c => mkAdjective_Pos lemma d ! g ! n ! c;+ AAdj Compar d g n c => mkAdjective_Comp lemma d ! g ! n ! c;+ AAdj Superl Def g n c => mkAdjective_Sup lemma ! g ! n ! c;+ AAdj Superl Indef _ _ _ => NON_EXISTENT;+ AAdv d => mkAdjective_Adverb lemma ! d } } ; -- Relative adjective: -ais (Def only); -s, -š (Indef and Def) mkAdjective_Rel : Str -> Adj = \lemma -> { s = table {- Posit => case lemma of {- s + "ais" => table {Indef => \\_,_,_ => NON_EXISTENT ; Def => mkAdjective_Pos lemma Def} ;- _ => table {Indef => mkAdjective_Pos lemma Indef ; Def => mkAdjective_Pos lemma Def}+ AAdj Posit Def g n c => mkAdjective_Pos lemma Def ! g ! n ! c;+ AAdj Posit Indef g n c => case lemma of {+ s + "ais" => NON_EXISTENT ;+ _ => mkAdjective_Pos lemma Indef ! g ! n ! c } ;- Compar => table {Indef => \\_,_,_ => NON_EXISTENT ; Def => \\_,_,_ => NON_EXISTENT} ;- Superl => table {Indef => \\_,_,_ => NON_EXISTENT ; Def => \\_,_,_ => NON_EXISTENT}+ AAdj _ _ _ _ _ => NON_EXISTENT ;+ AAdv d => mkAdjective_Adverb lemma ! d } }; + mkAdjective_Participle : Verb -> Adj = \v -> {+ s = table {+ AAdj Posit Indef g n c => v.s ! Pos !(Participle g n c); --FIXME - iznest polaritāti ārpusē lai ir noliegtie kā atsevišķi īpašībasvārdi+ _ => NON_EXISTENT --FIXME - salikt arī tās divdabja formas+ }+ };+ -- Positive degree: -s, -š (Indef and Def); -ais (Def only)+ -- TODO - atsaukties uz lietvārdu locīšanas tabulām? mkAdjective_Pos : Str -> Definite -> Gender => Number => Case => Str = \lemma,defin -> let stem : Str = case lemma of { s + "ais" => s ;@@ -79,14 +91,16 @@ Gen => stem + "a" ; Dat => stem + "am" ; Acc => stem + "u" ;- Loc => stem + "ā"+ Loc => stem + "ā" ;+ Voc => NON_EXISTENT } ; Pl => table { Nom => stem + "i" ;- Gen => stem + "us" ;+ Gen => stem + "u" ; Dat => stem + "iem" ; Acc => stem + "us" ;- Loc => stem + "os"+ Loc => stem + "os" ;+ Voc => NON_EXISTENT } } ; Fem => table {@@ -95,14 +109,16 @@ Gen => stem + "as" ; Dat => stem + "ai" ; Acc => stem + "u" ;- Loc => stem + "ā"+ Loc => stem + "ā" ;+ Voc => NON_EXISTENT } ; Pl => table { Nom => stem + "as" ; Gen => stem + "u" ; Dat => stem + "ām" ; Acc => stem + "as" ;- Loc => stem + "ās"+ Loc => stem + "ās" ;+ Voc => NON_EXISTENT } } } ;@@ -113,14 +129,16 @@ Gen => stem + "ā" ; Dat => case stem of {s + "ēj" => stem + "am" ; _ => stem + "ajam"} ; Acc => stem + "o" ;- Loc => case stem of {s + "ēj" => stem + "ā" ; _ => stem + "ajā"}+ Loc => case stem of {s + "ēj" => stem + "ā" ; _ => stem + "ajā"} ;+ Voc => stem + "ais" } ; Pl => table { Nom => stem + "ie" ; Gen => stem + "o" ; Dat => case stem of {s + "ēj" => stem + "iem" ; _ => stem + "ajiem"} ; Acc => stem + "os" ;- Loc => case stem of {s + "ēj" => stem + "os" ; _ => stem + "ajos"}+ Loc => case stem of {s + "ēj" => stem + "os" ; _ => stem + "ajos"} ;+ Voc => stem + "ie" } } ; Fem => table {@@ -129,14 +147,16 @@ Gen => stem + "ās" ; Dat => case stem of {s + "ēj" => stem + "ai" ; _ => stem + "ajai"} ; Acc => stem + "o" ;- Loc => case stem of {s + "ēj" => stem + "ā" ; _ => stem + "ajā"}+ Loc => case stem of {s + "ēj" => stem + "ā" ; _ => stem + "ajā"} ;+ Voc => stem + "ā" } ; Pl => table { Nom => stem + "ās" ; Gen => stem + "o" ; Dat => case stem of {s + "ēj" => stem + "ām" ; _ => stem + "ajām"} ; Acc => stem + "ās" ;- Loc => case stem of {s + "ēj" => stem + "ās" ; _ => stem + "ajās"}+ Loc => case stem of {s + "ēj" => stem + "ās" ; _ => stem + "ajās"} ;+ Voc => stem + "ās" } } }@@ -153,14 +173,16 @@ Gen => stem + "āka" ; Dat => stem + "ākam" ; Acc => stem + "āku" ;- Loc => stem + "ākā"+ Loc => stem + "ākā" ;+ Voc => NON_EXISTENT } ; Pl => table { Nom => stem + "āki" ; Gen => stem + "āku" ; Dat => stem + "ākiem" ; Acc => stem + "ākus" ;- Loc => stem + "ākos"+ Loc => stem + "ākos" ;+ Voc => NON_EXISTENT } } ; Fem => table {@@ -169,14 +191,16 @@ Gen => stem + "ākas" ; Dat => stem + "ākai" ; Acc => stem + "āku" ;- Loc => stem + "ākā"+ Loc => stem + "ākā" ;+ Voc => NON_EXISTENT } ; Pl => table { Nom => stem + "ākas" ; Gen => stem + "āku" ; Dat => stem + "ākām" ; Acc => stem + "ākas" ;- Loc => stem + "ākās"+ Loc => stem + "ākās" ;+ Voc => NON_EXISTENT } } } ;@@ -187,14 +211,16 @@ Gen => stem + "ākā" ; Dat => stem + "ākajam" ; Acc => stem + "āko" ;- Loc => stem + "ākajā"+ Loc => stem + "ākajā" ;+ Voc => stem + "ākais" } ; Pl => table { Nom => stem + "ākie" ; Gen => stem + "āko" ; Dat => stem + "ākajiem" ; Acc => stem + "ākos" ;- Loc => stem + "ākajos"+ Loc => stem + "ākajos" ;+ Voc => stem + "ākie" } } ; Fem => table {@@ -203,14 +229,16 @@ Gen => stem + "ākās" ; Dat => stem + "ākajai" ; Acc => stem + "āko" ;- Loc => stem + "ākajā"+ Loc => stem + "ākajā" ;+ Voc => stem + "ākā" } ; Pl => table { Nom => stem + "ākās" ; Gen => stem + "āko" ; Dat => stem + "ākajām" ; Acc => stem + "ākās" ;- Loc => stem + "ākajās"+ Loc => stem + "ākajās" ;+ Voc => stem + "ākās" } } }@@ -218,5 +246,16 @@ -- Superlative degree: Qual only, Def only mkAdjective_Sup : Str -> Gender => Number => Case => Str = \lemma ->- \\g,n,c => "vis" + (mkAdjective_Comp lemma Def) ! g ! n ! c ; + \\g,n,c => "vis" + (mkAdjective_Comp lemma Def) ! g ! n ! c ;++ -- Adverbial form, all 3 degrees+ mkAdjective_Adverb : Str -> Degree => Str = \lemma ->+ let stem : Str = case lemma of {+ s + "ais" => s ;+ _ => Predef.tk 1 lemma+ } in table {+ Posit => stem + "i";+ Compar => stem + "āk";+ Superl => "vis" + stem + "āk"+ }; } ;
@@ -1,17 +1,13 @@---# -path=.:../abstract:../../prelude:../common+--# -path=.:../abstract:../common:../prelude ---1 English Lexical Paradigms------ Aarne Ranta 2003--2005------ This is an API for the user of the resource grammar +-- This is an API for the user of the resource grammar -- for adding lexical items. It gives functions for forming -- expressions of open categories: nouns, adjectives, verbs.--- +-- -- Closed categories (determiners, pronouns, conjunctions) are--- accessed through the resource syntax API, $Structural.gf$. +-- accessed through the resource syntax API, $Structural.gf$. ----- The main difference with $MorphoEng.gf$ is that the types+-- The main difference with $MorphoLav.gf$ is that the types -- referred to are compiled resource grammar types. We have moreover -- had the design principle of always having existing forms, rather -- than stems, as string arguments of the paradigms.@@ -20,13 +16,10 @@ -- first we give a handful of patterns that aim to cover all -- regular cases. Then we give a worst-case function $mkC$, which serves as an -- escape to construct the most irregular words of type $C$.--- However, this function should only seldom be needed: we have a--- separate module [``IrregEng`` ../../english/IrregEng.gf], --- which covers irregular verbss. -resource ParadigmsLav = open - (Predef=Predef), - Prelude, +resource ParadigmsLav = open+ (Predef=Predef),+ Prelude, ParadigmsNounsLav, ParadigmsAdjectivesLav, ParadigmsVerbsLav,@@ -36,12 +29,26 @@ in { flags- coding = utf8;+ coding = utf8 ; -oper +oper+ Number : Type ;+ singular : Number ;+ plural : Number ;++ Number = ResLav.Number ;+ singular = Sg ;+ plural = Pl ;+ second_conjugation : VerbConj = C2 ; third_conjugation : VerbConj = C3 ;- ++ nominative : Case = Nom ;+ genitive : Case = Gen ;+ dative : Case = Dat ;+ accusative : Case = Acc ;+ locative : Case = Loc ;+ mkN = overload { mkN : (lemma : Str) -> N = \l -> lin N (mkNoun l) ; @@ -53,687 +60,145 @@ mkN : (lemma : Str) -> NounDecl -> Bool -> N = \l,d,p -> lin N (mkNounByDeclPal l d p) ; mkN : (lemma : Str) -> Gender -> NounDecl -> N = \l,g,d -> lin N (mkNounByGendDecl l g d) ; - mkN : (lemma : Str) -> Gender -> NounDecl -> Bool -> N = \l,g,d,p -> lin N (mkNounByGendDeclPal l g d p) ;+ mkN : (lemma : Str) -> Gender -> NounDecl -> Bool -> N = \l,g,d,p ->+ lin N (mkNounByGendDeclPal l g d p) ; } ; - mkA = overload {- mkA : (lemma : Str) -> A = \s -> lin A (mkAdjective s) ;- mkA : (lemma : Str) -> AdjType -> A = \s,t -> lin A (mkAdjectiveByType s t) ;+ mkPN = overload {+ mkN : (lemma : Str) -> PN = \l -> lin PN (mkProperNoun l Sg) ;+ mkN : (lemma : Str) -> Number -> PN = \l,n -> lin PN (mkProperNoun l n) ; } ; - mkV = overload {- mkV : (lemma : Str) -> V = \l -> lin V (mkVerb_Irreg l) ;- mkV : (lemma : Str) -> VerbConj -> V = \l,c -> lin V (mkVerb l c) ;- mkV : (lemma : Str) -> Str -> Str -> V = \l1,l2,l3 -> lin V (mkVerbC1 l1 l2 l3) ;- } ;- -{- - ---2 Parameters ------ To abstract over gender names, we define the following identifiers.--oper- Gender : Type ; -- human : Gender ;- nonhuman : Gender ;- masculine : Gender ;- feminine : Gender ;---- To abstract over number names, we define the following.-- Number : Type ; -- singular : Number ;- plural : Number ;---- To abstract over case names, we define the following.-- Case : Type ;-- nominative : Case ;- genitive : Case ;---- Prepositions are used in many-argument functions for rection.--- The resource category $Prep$ is used.------2 Nouns---- Nouns are constructed by the function $mkN$, which takes a varying--- number of arguments.-- mkN : overload {---- The regular function captures the variants for nouns ending with--- "s","sh","x","z" or "y": "kiss - kisses", "flash - flashes"; --- "fly - flies" (but "toy - toys"),-- mkN : (flash : Str) -> N ;---- In practice the worst case is to give singular and plural nominative.-- mkN : (man,men : Str) -> N ;---- The theoretical worst case: give all four forms.-- mkN : (man,men,man's,men's : Str) -> N ;---- Change gender from the default $nonhuman$.-- mkN : Gender -> N -> N ;----3 Compound nouns ------ A compound noun is an uninflected string attached to an inflected noun,--- such as "baby boom", "chief executive officer".-- mkN : Str -> N -> N+ mkN2 = overload {+ mkN2 : N -> Prep -> N2 = \n,p -> lin N2 n ** { p = p ; isPre = False } ;+ mkN2 : N -> Prep -> Bool -> N2 = \n,p,isPre -> lin N2 n ** { p = p ; isPre = isPre } ; } ; ----3 Relational nouns + mkN3 : N -> Prep -> Prep -> N3 = \n,p1,p2 ->+ lin N3 n ** { p1 = p1 ; p2 = p2 ; isPre1 = False ; isPre2 = False } ; - mkN2 : overload {- mkN2 : N -> Prep -> N2 ; -- access to- mkN2 : N -> Str -> N2 ; -- access to- mkN2 : Str -> Str -> N2 ; -- access to- mkN2 : N -> N2 ; -- wife of- mkN2 : Str -> N2 -- daughter of+ mkA = overload {+ mkA : (lemma : Str) -> A = \s -> lin A (mkAdjective s) ;+ mkA : (lemma : Str) -> AdjType -> A = \s,t -> lin A (mkAdjectiveByType s t) ;+ mkA : (v : Verb) -> A = \v -> lin A (mkAdjective_Participle v) ; } ; --- Use the function $mkPrep$ or see the section on prepositions below to --- form other prepositions.------ Three-place relational nouns ("the connection from x to y") need two prepositions.-- mkN3 : N -> Prep -> Prep -> N3 ;------3 Proper names and noun phrases------ Proper names, with a regular genitive, are formed from strings.-- mkPN : overload {-- mkPN : Str -> PN ;---- Sometimes a common noun can be reused as a proper name, e.g. "Bank"-- mkPN : N -> PN- } ;+ mkA2 : A -> Prep -> A2 = \a,p -> lin A2 (a ** { p = p }) ; -- precējies ar ...+ mkAS : A -> AS =\a -> lin A a ;+ mkA2S : A -> Prep -> A2S =\a,p -> lin A2 (a ** { p = p }) ;+ mkAV : A -> AV = \a -> lin A a ;+ mkA2V : A -> Prep -> A2V = \a,p -> lin A2 (a ** { p = p }) ; ---3 Determiners and quantifiers+ AS, AV : Type = { s : AForm => Str } ;+ A2S, A2V : Type = { s : AForm => Str ; p : Prep }; - mkQuant : overload {- mkQuant : (this, these : Str) -> Quant ;- mkQuant : (no_sg, no_pl, none_sg, non_pl : Str) -> Quant ;+ mkV = overload {+ mkV : (lemma : Str) -> V = \l -> lin V (mkVerb_Irreg l) ;+ mkV : (lemma : Str) -> VerbConj -> V = \l,c -> lin V (mkVerb l c) ;+ mkV : (lemma : Str) -> Str -> Str -> V = \l1,l2,l3 -> lin V (mkVerbC1 l1 l2 l3) ; } ; - mkOrd : Str -> Ord ;----2 Adjectives-- mkA : overload {---- For regular adjectives, the adverbial and comparison forms are derived. This holds--- even for cases with the variations "happy - happily - happier - happiest",--- "free - freely - freer - freest", and "rude - rudest".-- mkA : (happy : Str) -> A ;---- However, the duplication of the final consonant cannot be predicted,--- but a separate case is used to give the comparative-- mkA : (fat,fatter : Str) -> A ;---- As many as four forms may be needed.-- mkA : (good,better,best,well : Str) -> A - } ;---- Regular comparison is formed by "more - most" for words with two vowels separated--- and terminated by some other letters. To force this or the opposite, --- the following can be used: -- compoundA : A -> A ; -- -/more/most ditto- simpleA : A -> A ; -- young,younger,youngest-----3 Two-place adjectives+ mkV2 : V -> Prep -> V2 = \v,p -> lin V2 v ** { p = p } ;+ mkVS : V -> Subj -> VS = \v,s -> lin VS v ** { subj = s } ;+ mkV2S : V -> Prep -> Subj -> V2S = \v,p,s -> lin V2S v ** { p = p ; subj = s } ;+ mkVA : V -> VA = \v -> lin VA v ;+ mkV2A : V -> Prep -> V2A = \v,p -> lin V2A v ** { p = p } ;+ mkVQ : V -> VQ = \v -> lin VQ v ;+ mkV2Q : V -> Prep -> V2Q = \v,p -> lin V2Q v ** { p = p } ;+ mkVV : V -> VV = \v -> lin VV v ;+ mkV2V : V -> Prep -> V2V = \v,p -> lin V2V v ** { p = p } ;+ mkV3 : V -> Prep -> Prep -> V3 = \v,p1,p2 -> lin V3 v ** { p1 = p1 ; p2 = p2 } ; - mkA2 : overload {- mkA2 : A -> Prep -> A2 ; -- absent from- mkA2 : A -> Str -> A2 ; -- absent from- mkA2 : Str -> Prep -> A2 ; -- absent from- mkA2 : Str -> Str -> A2 -- absent from+ mkCAdv : Str -> Str -> Degree -> CAdv = \s,p,d -> { s = s ; p = p ; d = d ; lock_CAdv = <> } ; + mkPrep = overload {+ mkPrep : Str -> Case -> Case -> Prep = \prep,sg,pl ->+ lin Prep { s = prep ; c = table { Sg => sg ; Pl => pl } } ;+ mkPrep : Case -> Prep = \c -> lin Prep { s = [] ; c = table { _ => c } } ; } ; ----2 Adverbs---- Adverbs are not inflected. Most lexical ones have position--- after the verb. Some can be preverbal (e.g. "always").-- mkAdv : Str -> Adv ;- mkAdV : Str -> AdV ;---- Adverbs modifying adjectives and sentences can also be formed.-- mkAdA : Str -> AdA ;---- Adverbs modifying numerals-- mkAdN : Str -> AdN ;----2 Prepositions------ A preposition as used for rection in the lexicon, as well as to--- build $PP$s in the resource API, just requires a string.-- mkPrep : Str -> Prep ;- noPrep : Prep ;---- (These two functions are synonyms.)+ -- empty fake prepositions for valences+ -- rections that are expressed by simple cases without any prepositions+ nom_Prep = mkPrep Nom ;+ gen_Prep = mkPrep Gen ;+ dat_Prep = mkPrep Dat ;+ acc_Prep = mkPrep Acc ;+ loc_Prep = mkPrep Loc ; ---2 Conjunctions---+ mkAdv : Str -> Adv = \x -> lin Adv (ss x) ;+ mkAdV : Str -> AdV = \x -> lin AdV (ss x) ;+ mkAdA : Str -> AdA = \x -> lin AdA (ss x) ;+ mkAdN : Str -> AdN = \x -> lin AdN (ss x) ; - mkConj : overload {- mkConj : Str -> Conj ; -- and (plural agreement)- mkConj : Str -> Number -> Conj ; -- or (agrement number given as argument)- mkConj : Str -> Str -> Conj ; -- both ... and (plural)- mkConj : Str -> Str -> Number -> Conj ; -- either ... or (agrement number given as argument)+ mkConj = overload {+ mkConj : Str -> Conj = \y -> mk2Conj [] y Pl ;+ mkConj : Str -> Number -> Conj = \y,n -> mk2Conj [] y n ;+ mkConj : Str -> Str -> Conj = \x,y -> mk2Conj x y Pl ;+ mkConj : Str -> Str -> Number -> Conj = mk2Conj ; } ; ---2 Verbs------- Verbs are constructed by the function $mkV$, which takes a varying--- number of arguments.-- mkV : overload {---- The regular verb function recognizes the special cases where the last--- character is "y" ("cry-cries" but "buy-buys") or a sibilant--- ("kiss-"kisses", "jazz-jazzes", "rush-rushes", "munch - munches", --- "fix - fixes").-- mkV : (cry : Str) -> V ;---- Give the present and past forms for regular verbs where--- the last letter is duplicated in some forms,--- e.g. "rip - ripped - ripping".-- mkV : (stop, stopped : Str) -> V ;---- There is an extensive list of irregular verbs in the module $IrregularEng$.--- In practice, it is enough to give three forms, --- e.g. "drink - drank - drunk".-- mkV : (drink, drank, drunk : Str) -> V ;---- Irregular verbs with duplicated consonant in the present participle.- - mkV : (run, ran, run, running : Str) -> V ;---- Except for "be", the worst case needs five forms: the infinitive and--- the third person singular present, the past indicative, and the--- past and present participles.-- mkV : (go, goes, went, gone, going : Str) -> V ;---- Adds a prefix to an exisiting verb. This is most useful to create--- prefix-variants of irregular verbs from $IrregEng$, e.g. "undertake".-- mkV : Str -> V -> V ;- };---- Verbs with a particle.--- The particle, such as in "switch on", is given as a string.-- partV : V -> Str -> V ;---- Reflexive verbs.--- By default, verbs are not reflexive; this function makes them that.-- reflV : V -> V ;----3 Two-place verbs------ Two-place verbs need a preposition, except the special case with direct object.--- (transitive verbs). Notice that a particle comes from the $V$.-- mkV2 : overload {- mkV2 : Str -> V2 ; -- kill- mkV2 : V -> V2 ; -- hit- mkV2 : V -> Prep -> V2 ; -- believe in- mkV2 : V -> Str -> V2 ; -- believe in- mkV2 : Str -> Prep -> V2 ; -- believe in- mkV2 : Str -> Str -> V2 -- believe in- };----3 Three-place verbs------ Three-place (ditransitive) verbs need two prepositions, of which--- the first one or both can be absent.-- mkV3 : overload {- mkV3 : V -> Prep -> Prep -> V3 ; -- speak, with, about- mkV3 : V -> Prep -> V3 ; -- give,_,to- mkV3 : V -> Str -> V3 ; -- give,_,to- mkV3 : Str -> Str -> V3 ; -- give,_,to- mkV3 : V -> V3 ; -- give,_,_- mkV3 : Str -> V3 ; -- give,_,_- };----3 Other complement patterns------ Verbs and adjectives can take complements such as sentences,--- questions, verb phrases, and adjectives.-- mkV0 : V -> V0 ;- mkVS : V -> VS ;- mkV2S : V -> Prep -> V2S ;- mkVV : V -> VV ;- mkV2V : V -> Prep -> Prep -> V2V ;- mkVA : V -> VA ;- mkV2A : V -> Prep -> V2A ;- mkVQ : V -> VQ ;- mkV2Q : V -> Prep -> V2Q ;-- mkAS : A -> AS ;- mkA2S : A -> Prep -> A2S ;- mkAV : A -> AV ;- mkA2V : A -> Prep -> A2V ;---- Notice: Categories $V0, AS, A2S, AV, A2V$ are just $A$.--- $V0$ is just $V$; the second argument is treated as adverb.-- V0 : Type ;- AS, A2S, AV, A2V : Type ;----2 Other categories--mkSubj : Str -> Subj = \s -> lin Subj {s = s} ;----.---2 Definitions of paradigms------ The definitions should not bother the user of the API. So they are--- hidden from the document.-- Gender = ResEng.Gender ; - Number = ResEng.Number ;- Case = ResEng.Case ;- human = Masc ; - nonhuman = Neutr ;- masculine = Masc ;- feminine = Fem ;- singular = Sg ;- plural = Pl ;- nominative = Nom ;- genitive = Gen ;-- Preposition : Type = Str ; -- obsolete-- regN = \ray -> - let rays = add_s ray- in- mk2N ray rays ;+ mk2Conj : Str -> Str -> Number -> Conj = \x,y,n -> lin Conj (sd2 x y ** { n = n }) ; + viens = mkNumSpec "viens" "pirmais" "vien" "" Sg ; - add_s : Str -> Str = \w -> case w of {- _ + ("io" | "oo") => w + "s" ; -- radio, bamboo- _ + ("s" | "z" | "x" | "sh" | "ch" | "o") => w + "es" ; -- bus, hero- _ + ("a" | "o" | "u" | "e") + "y" => w + "s" ; -- boy- x + "y" => x + "ies" ; -- fly- _ => w + "s" -- car- } ;+ mkNumReg : Str -> Str -> Number -> { s : DForm => CardOrd => Gender => Case => Str } =+ \pieci,piektais,n -> mkNumSpec pieci piektais (cutStem pieci) (cutStem pieci) n ; - duplFinal : Str -> Str = \w -> case w of {- _ + ("a" | "e" | "o") + ("a" | "e" | "i" | "o" | "u") + ? => w ; -- waited, needed- _ + ("a" | "e" | "i" | "o" | "u") + - c@("b"|"d"|"g"|"m"|"n"|"p"|"r"|"t") => w + c ; -- omitted, manned- _ => w- } ;+ mkNumSpec : Str -> Str -> Str -> Str -> Number -> { s : DForm => CardOrd => Gender => Case => Str } =+ \pieci,piektais,stem_teen,stem_ten,n ->+ let+ masc = mkNoun_D1 pieci ;+ fem = mkNoun_D4 pieci Fem ;+ ord = mkAdjective_Pos piektais Def ;+ padsmit = mkAdjective_Pos (stem_teen+"padsmitais") Def ;+ desmit = mkAdjective_Pos (stem_ten+"desmitais") Def ;+ in {+ s = table {+ unit => table {+ NCard => table {+ Masc => table { c => masc.s ! n ! c } ;+ Fem => table { c => fem.s ! n ! c }+ } ;+ NOrd => table {+ -- FIXME: pazaudējam kārtas skaitļu daudzskaitli - 'mēs palikām piektie'+ g => table { c => ord ! g ! Sg ! c }+ }+ } ;+ teen => table {+ NCard => table { g => table { c => stem_teen + "padsmit" } } ;+ NOrd => table { g => table { c => padsmit ! g ! Sg ! c } }+ } ;+ ten => table {+ NCard => table { g => table { c => stem_ten + "desmit" } } ;+ NOrd => table { g => table { c => desmit ! g ! Sg ! c } }+ }+ }+ } ; - mk2N = \man,men -> - let mens = case last men of {- "s" => men + "'" ;- _ => men + "'s"+ simts : CardOrd => Gender => Number => Case => Str =+ let+ card = mkNoun_D1 "simts" ;+ ord = mkAdjective_Pos "simtais" Def ;+ in table {+ NCard => table {+ _ => table { n => table { c => card.s ! n ! c } }+ } ;+ NOrd => table {+ g => table { n => table { c => ord ! g ! n ! c } } }- in- mk4N man men (man + "'s") mens ;-- mk4N = \man,men,man's,men's -> - lin N (mkNoun man man's men men's ** {g = Neutr}) ;-- genderN g man = lin N {s = man.s ; g = g} ;-- compoundN s n = lin N {s = \\x,y => s ++ n.s ! x ! y ; g=n.g} ;-- mkPN = overload {- mkPN : Str -> PN = regPN ;- mkPN : N -> PN = nounPN- } ;-- mkN2 = overload {- mkN2 : N -> Prep -> N2 = prepN2 ;- mkN2 : N -> Str -> N2 = \n,s -> prepN2 n (mkPrep s);- mkN2 : Str -> Str -> N2 = \n,s -> prepN2 (regN n) (mkPrep s);- mkN2 : N -> N2 = \n -> prepN2 n (mkPrep "of") ;- mkN2 : Str -> N2 = \s -> prepN2 (regN s) (mkPrep "of") - } ;-- prepN2 = \n,p -> lin N2 (n ** {c2 = p.s}) ;- regN2 n = prepN2 (regN n) (mkPrep "of") ;-- mkN3 = \n,p,q -> lin N3 (n ** {c2 = p.s ; c3 = q.s}) ;----3 Relational common noun phrases------ In some cases, you may want to make a complex $CN$ into a--- relational noun (e.g. "the old town hall of").-- cnN2 : CN -> Prep -> N2 ;- cnN3 : CN -> Prep -> Prep -> N3 ;---- This is obsolete.- cnN2 = \n,p -> lin N2 (n ** {c2 = p.s}) ;- cnN3 = \n,p,q -> lin N3 (n ** {c2 = p.s ; c3 = q.s}) ;-- regPN n = regGenPN n human ;- regGenPN n g = lin PN {s = table {Gen => n + "'s" ; _ => n} ; g = g} ;- nounPN n = lin PN {s = n.s ! singular ; g = n.g} ;-- mkQuant = overload {- mkQuant : (this, these : Str) -> Quant = \sg,pl -> mkQuantifier sg pl sg pl;- mkQuant : (no_sg, no_pl, none_sg, non_pl : Str) -> Quant = mkQuantifier;- } ;-- mkQuantifier : Str -> Str -> Str -> Str -> Quant = - \sg,pl,sg',pl' -> lin Quant {- s = \\_ => table { Sg => sg ; Pl => pl } ;- sp = \\_ => table { Sg => regGenitiveS sg' ; Pl => regGenitiveS pl'} } ; - mkOrd : Str -> Ord = \x -> lin Ord { s = regGenitiveS x};-- mk2A a b = mkAdjective a a a b ;- regA a = case a of {- _ + ("a" | "e" | "i" | "o" | "u" | "y") + ? + _ + - ("a" | "e" | "i" | "o" | "u" | "y") + ? + _ => - lin A (compoundADeg (regADeg a)) ;- _ => lin A (regADeg a)- } ;-- prepA2 a p = lin A2 (a ** {c2 = p.s}) ;-- ADeg = A ; ------ mkADeg a b c d = mkAdjective a b c d ;-- regADeg happy = - let- happ = init happy ;- y = last happy ;- happie = case y of {- "y" => happ + "ie" ;- "e" => happy ;- _ => duplFinal happy + "e"- } ;- happily : Str = case happy of {- _ + "ble" => init happy + "y" ;- _ + "y" => happ + "ily" ;- _ + "ll" => happy + "y" ;- _ => happy + "ly"- } ;- in mkADeg happy (happie + "r") (happie + "st") happily ;-- duplADeg fat = - mkADeg fat - (fat + last fat + "er") (fat + last fat + "est") (fat + "ly") ;-- compoundADeg a =- let ad = (a.s ! AAdj Posit Nom) - in mkADeg ad ("more" ++ ad) ("most" ++ ad) (a.s ! AAdv) ;-- adegA a = a ;-- mkAdv x = lin Adv (ss x) ;- mkAdV x = lin AdV (ss x) ;- mkAdA x = lin AdA (ss x) ;- mkAdN x = lin AdN (ss x) ;-- mkPrep p = lin Prep (ss p) ;- noPrep = mkPrep [] ;-- mk5V a b c d e = lin V (mkVerb a b c d e ** {s1 = []}) ;-- regV cry = + tuukstotis : CardOrd => Gender => Number => Case => Str = let- cries = (regN cry).s ! Pl ! Nom ; -- !- cried : Str = case cries of {- _ + "es" => init cries + "d" ;- _ => duplFinal cry + "ed"- } ;- crying : Str = case cry of {- _ + "ee" => cry + "ing" ;- d + "ie" => d + "ying" ;- us + "e" => us + "ing" ; - _ => duplFinal cry + "ing"- }- in mk5V cry cries cried cried crying ;-- reg2V fit fitted =- let fitt = Predef.tk 2 fitted ;- in mk5V fit (fit + "s") (fitt + "ed") (fitt + "ed") (fitt + "ing") ;-- regDuplV fit = - case last fit of {- ("a" | "e" | "i" | "o" | "u" | "y") => - Predef.error (["final duplication makes no sense for"] ++ fit) ;- t =>- let fitt = fit + t in- mk5V fit (fit + "s") (fitt + "ed") (fitt + "ed") (fitt + "ing")+ card = mkNoun_D2 "tūkstotis" True ;+ ord = mkAdjective_Pos "tūkstošais" Def ;+ in table {+ NCard => table {+ _ => table { n => table { c => card.s ! n ! c } } } ;-- irregV x y z = let reg = (regV x).s in- mk5V x (reg ! VPres) y z (reg ! VPresPart) ** {s1 = []} ;-- irreg4V x y z w = let reg = (regV x).s in- mk5V x (reg ! VPres) y z w ** {s1 = []} ;-- irregDuplV fit y z = - let - fitting = (regDuplV fit).s ! VPresPart- in- mk5V fit (fit + "s") y z fitting ;-- partV v p = lin V {s = \\f => v.s ! f ++ p ; isRefl = v.isRefl} ;- reflV v = lin V {s = v.s ; part = v.part ; isRefl = True} ;-- prepV2 v p = lin V2 {s = v.s ; s1 = v.s1 ; c2 = p.s ; isRefl = v.isRefl} ;- dirV2 v = prepV2 v noPrep ;-- prepPrepV3 v p q = - lin V3 {s = v.s ; s1 = v.s1 ; c2 = p.s ; c3 = q.s ; isRefl = v.isRefl} ;- dirV3 v p = prepPrepV3 v noPrep p ;- dirdirV3 v = dirV3 v noPrep ;-- mkVS v = lin VS v ;- mkVV v = lin VV {- s = table {VVF vf => v.s ! vf ; _ => v.s ! VInf} ;- --- variants {}} ; not used - isAux = False- } ;- mkVQ v = lin VQ v ;-- V0 : Type = V ;--- V2S, V2V, V2Q : Type = V2 ;- AS, A2S, AV : Type = A ;- A2V : Type = A2 ;-- mkV0 v = v ;- mkV2S v p = lin V2S (prepV2 v p) ;- mkV2V v p t = lin V2V (prepV2 v p ** {isAux = False}) ;- mkVA v = lin VA v ;- mkV2A v p = lin V2A (prepV2 v p) ;- mkV2Q v p = lin V2Q (prepV2 v p) ;-- mkAS v = v ;- mkA2S v p = lin A (prepA2 v p) ;- mkAV v = v ;- mkA2V v p = prepA2 v p ;----- pre-overload API and overload definitions-- mk4N : (man,men,man's,men's : Str) -> N ;- regN : Str -> N ;- mk2N : (man,men : Str) -> N ;- genderN : Gender -> N -> N ;- compoundN : Str -> N -> N ;-- mkN = overload {- mkN : (man,men,man's,men's : Str) -> N = mk4N ;- mkN : Str -> N = regN ;- mkN : (man,men : Str) -> N = mk2N ;- mkN : Gender -> N -> N = genderN ;- mkN : Str -> N -> N = compoundN- } ;---- Relational nouns ("daughter of x") need a preposition. -- prepN2 : N -> Prep -> N2 ;---- The most common preposition is "of", and the following is a--- shortcut for regular relational nouns with "of".-- regN2 : Str -> N2 ;-- mk2A : (free,freely : Str) -> A ;- regA : Str -> A ;-- mkA = overload {- mkA : Str -> A = regA ;- mkA : (fat,fatter : Str) -> A = \fat,fatter -> - mkAdjective fat fatter (init fatter + "st") (fat + "ly") ;- mkA : (good,better,best,well : Str) -> A = \a,b,c,d ->- mkAdjective a b c d+ NOrd => table {+ g => table { n => table { c => ord ! g ! n ! c } }+ } } ; - compoundA = compoundADeg ;- simpleA a = - let ad = (a.s ! AAdj Posit Nom) - in regADeg ad ;-- prepA2 : A -> Prep -> A2 ;-- mkA2 = overload {- mkA2 : A -> Prep -> A2 = prepA2 ;- mkA2 : A -> Str -> A2 = \a,p -> prepA2 a (mkPrep p) ;- mkA2 : Str -> Prep -> A2 = \a,p -> prepA2 (regA a) p;- mkA2 : Str -> Str -> A2 = \a,p -> prepA2 (regA a) (mkPrep p);- } ;-- mk5V : (go, goes, went, gone, going : Str) -> V ;- regV : (cry : Str) -> V ;- reg2V : (stop, stopped : Str) -> V;- irregV : (drink, drank, drunk : Str) -> V ;- irreg4V : (run, ran, run, running : Str) -> V ;-- -- Use reg2V instead- regDuplV : Str -> V ;- -- Use irreg4V instead- irregDuplV : (get, got, gotten : Str) -> V ;-- mkV = overload {- mkV : (cry : Str) -> V = regV ;- mkV : (stop, stopped : Str) -> V = reg2V ;- mkV : (drink, drank, drunk : Str) -> V = irregV ;- mkV : (run, ran, run, running : Str) -> V = irreg4V ;- mkV : (go, goes, went, gone, going : Str) -> V = mk5V ;- mkV : Str -> V -> V = prefixV- };-- prepV2 : V -> Prep -> V2 ;- dirV2 : V -> V2 ;- prefixV : Str -> V -> V = \p,v -> v ** { s = p + v.s } ;-- mkV2 = overload {- mkV2 : V -> V2 = dirV2 ;- mkV2 : Str -> V2 = \s -> dirV2 (regV s) ;- mkV2 : V -> Prep -> V2 = prepV2 ;- mkV2 : V -> Str -> V2 = \v,p -> prepV2 v (mkPrep p) ;- mkV2 : Str -> Prep -> V2 = \v,p -> prepV2 (regV v) p ;- mkV2 : Str -> Str -> V2 = \v,p -> prepV2 (regV v) (mkPrep p)- }; -- prepPrepV3 : V -> Prep -> Prep -> V3 ;- dirV3 : V -> Prep -> V3 ;- dirdirV3 : V -> V3 ;-- mkV3 = overload {- mkV3 : V -> Prep -> Prep -> V3 = prepPrepV3 ;- mkV3 : V -> Prep -> V3 = dirV3 ;- mkV3 : V -> Str -> V3 = \v,s -> dirV3 v (mkPrep s);- mkV3 : Str -> Str -> V3 = \v,s -> dirV3 (regV v) (mkPrep s);- mkV3 : V -> V3 = dirdirV3 ;- mkV3 : Str -> V3 = \v -> dirdirV3 (regV v) ;- } ;-- mkConj = overload {- mkConj : Str -> Conj = \y -> mk2Conj [] y plural ;- mkConj : Str -> Number -> Conj = \y,n -> mk2Conj [] y n ;- mkConj : Str -> Str -> Conj = \x,y -> mk2Conj x y plural ;- mkConj : Str -> Str -> Number -> Conj = mk2Conj ;- } ;-- mk2Conj : Str -> Str -> Number -> Conj = \x,y,n -> - lin Conj (sd2 x y ** {n = n}) ;------ obsolete---- Comparison adjectives may two more forms. -- ADeg : Type ;-- mkADeg : (good,better,best,well : Str) -> ADeg ;---- The regular pattern recognizes two common variations: --- "-e" ("rude" - "ruder" - "rudest") and--- "-y" ("happy - happier - happiest - happily")-- regADeg : Str -> ADeg ; -- long, longer, longest---- However, the duplication of the final consonant is nor predicted,--- but a separate pattern is used:-- duplADeg : Str -> ADeg ; -- fat, fatter, fattest---- If comparison is formed by "more", "most", as in general for--- long adjective, the following pattern is used:-- compoundADeg : A -> ADeg ; -- -/more/most ridiculous---- From a given $ADeg$, it is possible to get back to $A$.-- adegA : ADeg -> A ;--- regPN : Str -> PN ; - regGenPN : Str -> Gender -> PN ; -- John, John's---- Sometimes you can reuse a common noun as a proper name, e.g. "Bank".-- nounPN : N -> PN ;----}-} ;+}
@@ -1,27 +1,53 @@--- Latvian noun paradigms - by Normunds Grūzītis; copied off mini-grammar as of 2011-07-12+--# -path=.:../abstract:../common:../prelude -resource ParadigmsNounsLav = open - (Predef=Predef), - Prelude, +resource ParadigmsNounsLav = open+ (Predef=Predef),+ Prelude, ResLav, CatLav in { flags- coding = utf8;- + coding = utf8 ;+ oper Noun : Type = {s : Number => Case => Str ; g : Gender} ;+ ProperNoun : Type = {s : Case => Str; g : Gender; n : Number} ; masculine : Gender = Masc ;- feminine : Gender = Fem ; - --- NOUNS+ feminine : Gender = Fem ; -- No parameters - default assumptions (gender, declension, palatalization) mkNoun : Str -> Noun = \lemma -> mkNounByPal lemma True ; + mkProperNoun : Str -> Number -> ProperNoun = \lemma,number ->+ let noun = mkNoun lemma+ in {+ s = table {+ c => noun.s ! number ! c+ } ;+ g = noun.g ;+ n = number+ } ;++{-+ mkCardinalNumeral : Str -> CardinalNumeral = \lemma ->+ let+ stem : Str = cutStem lemma;+ masc = mkNoun_D1 lemma;+ fem = mkNoun_D4 lemma + "a" Fem+ in {+ s = table {+ Masc => table {++ } ;+ Fem => table {+ } ;+ }+ }+-}+ -- Specified palatalization; default gender and declension mkNounByPal : Str -> Bool -> Noun = \lemma,pal -> case lemma of {@@ -94,23 +120,28 @@ -- Expected endings of a D1 lemma: -- Sg: -s, -š -- Pl: -i+ -- should be provided only in the case of plural mass nouns+ -- produces an incorrect Sg.Nom form if plural lemma is given+ -- the incorrect Sg.Nom forms should be filtered out by a domain lexicon mkNoun_D1 : Str -> Noun = \lemma -> let stem : Str = cutStem lemma in { s = table { Sg => table {- Nom => lemma ; -- FIXME: if Pl lemma (-i) => -s or -š?! (default rule, explicit parameter)+ Nom => lemma ; Gen => stem + "a" ; Dat => stem + "am" ; Acc => stem + "u" ;- Loc => stem + "ā"+ Loc => stem + "ā" ;+ Voc => stem } ; Pl => table { Nom => stem + "i" ; Gen => stem + "u" ; Dat => stem + "iem" ; Acc => stem + "us" ;- Loc => stem + "os"+ Loc => stem + "os" ;+ Voc => stem + "i" } } ; g = Masc@@ -118,25 +149,30 @@ -- Expected endings of a D2 lemma: -- Sg: -is, -s+ -- -s is expected only in the case of few predefined exceptions -- Pl: -i- -- Note: ending -s is expected only in the case of few predefined exceptions+ -- should be provided only in the case of plural mass nouns+ -- produces an incorrect Sg.Nom form if plural lemma is given+ -- the incorrect Sg.Nom forms should be filtered out by a domain lexicon mkNoun_D2 : Str -> Bool -> Noun = \lemma,pal -> let stem : Str = cutStem lemma in { s = table { Sg => table {- Nom => lemma ; -- FIXME: if Pl lemma (-i) => -is or -s?! (exceptions only - default rules only?)+ Nom => lemma ; Gen => case lemma of {#exception_D2_1 + "s" => lemma ; _ => palatalize stem pal + "a"} ; Dat => stem + "im" ; Acc => stem + "i" ;- Loc => stem + "ī"+ Loc => stem + "ī" ;+ Voc => stem + "i" } ; Pl => table { Nom => palatalize stem pal + "i" ; Gen => palatalize stem pal + "u" ; Dat => palatalize stem pal + "iem" ; Acc => palatalize stem pal + "us" ;- Loc => palatalize stem pal + "os"+ Loc => palatalize stem pal + "os" ;+ Voc => palatalize stem pal + "i" } } ; g = Masc@@ -154,14 +190,16 @@ Gen => stem + "us" ; Dat => stem + "um" ; Acc => stem + "u" ;- Loc => stem + "ū"+ Loc => stem + "ū" ;+ Voc => stem + "u" } ; Pl => table { Nom => stem + "i" ; Gen => stem + "u" ; Dat => stem + "iem" ; Acc => stem + "us" ;- Loc => stem + "os"+ Loc => stem + "os" ;+ Voc => stem + "i" } } ; g = Masc@@ -179,14 +217,16 @@ Gen => stem + "as" ; Dat => case gend of {Fem => stem + "ai" ; Masc => stem + "am"} ; Acc => stem + "u" ;- Loc => stem + "ā"+ Loc => stem + "ā" ;+ Vod => stem + "a" } ; Pl => table { Nom => stem + "as" ; Gen => stem + "u" ; Dat => stem + "ām" ; Acc => stem + "as" ;- Loc => stem + "ās"+ Loc => stem + "ās" ;+ Voc => stem + "as" } } ; g = gend@@ -204,14 +244,16 @@ Gen => stem + "es" ; Dat => case gend of {Fem => stem + "ei" ; Masc => stem + "em"} ; Acc => stem + "i" ;- Loc => stem + "ē"+ Loc => stem + "ē" ;+ Voc => stem + "e" } ; Pl => table { Nom => stem + "es" ; Gen => palatalize stem pal + "u" ; Dat => stem + "ēm" ; Acc => stem + "es" ;- Loc => stem + "ēs"+ Loc => stem + "ēs" ;+ Voc => stem + "es" } } ; g = gend@@ -231,7 +273,8 @@ Gen => stem + "s" ; Dat => case gend of {Fem => stem + "ij" ; Masc => stem + "im"} ; Acc => stem + "i" ;- Loc => stem + "ī"+ Loc => stem + "ī" ;+ Voc => stem + "s" } } ; Pl => table {@@ -239,7 +282,8 @@ Gen => palatalize stem pal + "u" ; Dat => stem + "īm" ; Acc => stem + "is" ;- Loc => stem + "īs"+ Loc => stem + "īs" ;+ Voc => stem + "is" } } ; g = gend@@ -256,14 +300,16 @@ Gen => stem + "šanās" ; Dat => NON_EXISTENT ; Acc => stem + "šanos" ;- Loc => NON_EXISTENT+ Loc => NON_EXISTENT ;+ Voc => stem + "šanās" } ; Pl => table { Nom => stem + "šanās" ; Gen => stem + "šanos" ; Dat => NON_EXISTENT ; Acc => stem + "šanās" ;- Loc => NON_EXISTENT+ Loc => NON_EXISTENT ;+ Voc => stem + "šanās" } } ; g = Fem@@ -277,6 +323,8 @@ exception_D2_2_pal : pattern Str = #(_ + "suņ") ; exception_D4 : pattern Str = #(_ + "puik") ; exception_D6 : pattern Str = #(_ + "ļaud") ;++ -- Auxiliaries
@@ -1,18 +1,17 @@--- Latvian pronoun paradigms - by Normunds Grūzītis; copied off mini-grammar as of 2011-07-12+--# -path=.:../abstract:../common:../prelude -resource ParadigmsPronounsLav = open - (Predef=Predef), - Prelude, +resource ParadigmsPronounsLav = open+ (Predef=Predef),+ Prelude, ResLav, CatLav in { flags coding = utf8;- + oper- Pron : Type = {s : Number => Case => Str ; p : Person} ;- PronGend : Type = {s : Gender => Number => Case => Str ; p : Person} ;+ PronGend : Type = {s : Gender => Number => Case => Str} ; -- PRONOUNS (incl. 'determiners') @@ -35,14 +34,16 @@ Gen => stem + "a" ; Dat => stem + "am" ; Acc => stem + "u" ;- Loc => stem + "ā"+ Loc => stem + "ā" ;+ Voc => NON_EXISTENT --FIXME - var tak uzrunā arī likt determineru } ; Pl => table { Nom => stem + "i" ; Gen => stem + "u" ; Dat => stem + "iem" ; Acc => stem + "us" ;- Loc => stem + "os"+ Loc => stem + "os" ;+ Voc => NON_EXISTENT } } ; Fem => table {@@ -51,18 +52,19 @@ Gen => stem + "as" ; Dat => stem + "ai" ; Acc => stem + "u" ;- Loc => stem + "ā"+ Loc => stem + "ā" ;+ Voc => NON_EXISTENT } ; Pl => table { Nom => stem + "as" ; Gen => stem + "u" ; Dat => stem + "ām" ; Acc => stem + "as" ;- Loc => stem + "ās"+ Loc => stem + "ās" ;+ Voc => NON_EXISTENT } } } ;- p = P3 } ; -- A special case (paradigm) of Gender=>Number=>Case P3 pronouns@@ -80,14 +82,16 @@ Gen => stem + suff2 ; Dat => stem + suff1 + "m" ; Acc => stem + "o" ;- Loc => stem + "ajā"+ Loc => stem + "ajā" ;+ Voc => NON_EXISTENT } ; Pl => table { Nom => stem + "ie" ; Gen => stem + "o" ; Dat => stem + "iem" ; Acc => stem + "os" ;- Loc => stem + "ajos"+ Loc => stem + "ajos" ;+ Voc => NON_EXISTENT } } ; Fem => table {@@ -96,18 +100,19 @@ Gen => stem + suff2 + "s" ; Dat => stem + "ai" ; Acc => stem + "o" ;- Loc => stem + "ajā"+ Loc => stem + "ajā" ;+ Voc => NON_EXISTENT } ; Pl => table { Nom => stem + suff2 + "s" ; Gen => stem + "o" ; Dat => stem + suff2 + "m" ; Acc => stem + suff2 + "s" ;- Loc => stem + "ajās"+ Loc => stem + "ajās" ;+ Voc => NON_EXISTENT } } } ;- p = P3 } ;- + } ;
@@ -1,21 +1,18 @@--- Latvian verb paradigms - by Pēteris Paikens & Normunds Grūzītis, copied off mini-grammar as of 2011-07-12+--# -path=.:../abstract:../common:../prelude -resource ParadigmsVerbsLav = open - (Predef=Predef), - Prelude, +resource ParadigmsVerbsLav = open+ (Predef=Predef),+ Prelude, ResLav, CatLav in { flags- coding = utf8;- + coding = utf8 ;+ oper- Verb : Type = {s : Polarity => VerbForm => Str} ; Verb_TMP : Type = {s : VerbForm => Str} ; --- VERBS- -- Second and third conjugations mkVerb : Str -> VerbConj -> Verb = \lemma,conj -> { s = table {@@ -84,7 +81,7 @@ Indicative P1 Pl Fut => pal_C1_1 stem3 stem + "sim" ; Indicative P1 Pl Past => stem3 + "ām" ; - Indicative P2 Sg Pres => pal_C1_2 stem3 stem2 ;+ Indicative P2 Sg Pres => stem3 ; Indicative P2 Sg Fut => pal_C1_1 stem3 stem + "si" ; Indicative P2 Sg Past => stem3 + "i" ; Indicative P2 Pl Pres => stem2 + "at" ;@@ -95,7 +92,7 @@ Indicative P3 _ Fut => pal_C1_1 stem3 stem + "s" ; Indicative P3 _ Past => stem3 + "a" ; - Indicative _ _ Cond => stem + "tu"; + Indicative _ _ Cond => stem + "tu"; Relative Pres => stem2 + "ot" ; Relative Fut => pal_C1_1 stem3 stem + "šot" ;@@ -105,27 +102,10 @@ Debitive => "jā" + stem2 ; DebitiveRelative => "jā" + stem2 + "ot" ; - Participle Masc Sg Nom => pal_C1_4 stem3 + "is" ;- Participle Masc Sg Gen => pal_C1_3 stem3 + "uša" ;- Participle Masc Sg Dat => pal_C1_3 stem3 + "ušam" ;- Participle Masc Sg Acc => pal_C1_3 stem3 + "ušu" ;- Participle Masc Sg Loc => pal_C1_3 stem3 + "ušā" ;- Participle Masc Pl Nom => pal_C1_3 stem3 + "uši" ;- Participle Masc Pl Gen => pal_C1_3 stem3 + "ušu" ;- Participle Masc Pl Dat => pal_C1_3 stem3 + "ušiem" ;- Participle Masc Pl Acc => pal_C1_3 stem3 + "ušus" ;- Participle Masc Pl Loc => pal_C1_3 stem3 + "ušos" ;+ Imperative Sg => stem3 ;+ Imperative Pl => stem3 + "iet" ; - Participle Fem Sg Nom => pal_C1_3 stem3 + "usi" ;- Participle Fem Sg Gen => pal_C1_3 stem3 + "ušas" ;- Participle Fem Sg Dat => pal_C1_3 stem3 + "ušai" ;- Participle Fem Sg Acc => pal_C1_3 stem3 + "ušu" ;- Participle Fem Sg Loc => pal_C1_3 stem3 + "ušā" ;- Participle Fem Pl Nom => pal_C1_3 stem3 + "ušas" ;- Participle Fem Pl Gen => pal_C1_3 stem3 + "ušu" ;- Participle Fem Pl Dat => pal_C1_3 stem3 + "ušām" ;- Participle Fem Pl Acc => pal_C1_3 stem3 + "ušas" ;- Participle Fem Pl Loc => pal_C1_3 stem3 + "ušās"+ Participle g n c => participle_normal_l g n c (pal_C1_3 stem3) (pal_C1_4 stem3) } } ; @@ -155,7 +135,7 @@ Indicative P3 _ Fut => stem + "s" ; Indicative P3 _ Past => stem + "ja" ; - Indicative _ _ Cond => stem + "tu"; + Indicative _ _ Cond => stem + "tu"; Relative Pres => stem + "jot" ; Relative Fut => stem + "šot" ;@@ -165,27 +145,10 @@ Debitive => "jā" + stem ; DebitiveRelative => "jā" + stem + "jot" ; - Participle Masc Sg Nom => stem + "jis" ;- Participle Masc Sg Gen => stem + "juša" ;- Participle Masc Sg Dat => stem + "jušam" ;- Participle Masc Sg Acc => stem + "jušu" ;- Participle Masc Sg Loc => stem + "jušā" ;- Participle Masc Pl Nom => stem + "juši" ;- Participle Masc Pl Gen => stem + "jušu" ;- Participle Masc Pl Dat => stem + "jušiem" ;- Participle Masc Pl Acc => stem + "jušus" ;- Participle Masc Pl Loc => stem + "jušos" ;+ Imperative Sg => stem ;+ Imperative Pl => stem + "jiet"; - Participle Fem Sg Nom => stem + "jusi" ;- Participle Fem Sg Gen => stem + "jušas" ;- Participle Fem Sg Dat => stem + "jušai" ;- Participle Fem Sg Acc => stem + "jušu" ;- Participle Fem Sg Loc => stem + "jušā" ;- Participle Fem Pl Nom => stem + "jušas" ;- Participle Fem Pl Gen => stem + "jušu" ;- Participle Fem Pl Dat => stem + "jušām" ;- Participle Fem Pl Acc => stem + "jušas" ;- Participle Fem Pl Loc => stem + "jušās"+ Participle g n c => participle_normal g n c (stem + "j") } } ; @@ -215,7 +178,7 @@ Indicative P3 _ Fut => stem + "s" ; Indicative P3 _ Past => stem + "ja" ; - Indicative _ _ Cond => stem + "tu"; + Indicative _ _ Cond => stem + "tu"; Relative Pres => pal_C3_1 stem + "ot" ; Relative Fut => stem + "šot" ;@@ -225,27 +188,10 @@ Debitive => pal_C3_3 stem ; DebitiveRelative => pal_C3_3 stem + "ot" ; - Participle Masc Sg Nom => stem + "jis" ;- Participle Masc Sg Gen => stem + "juša" ;- Participle Masc Sg Dat => stem + "jušam" ;- Participle Masc Sg Acc => stem + "jušu" ;- Participle Masc Sg Loc => stem + "jušā" ;- Participle Masc Pl Nom => stem + "juši" ;- Participle Masc Pl Gen => stem + "jušu" ;- Participle Masc Pl Dat => stem + "jušiem" ;- Participle Masc Pl Acc => stem + "jušus" ;- Participle Masc Pl Loc => stem + "jušos" ;+ Imperative Sg => pal_C3_1 stem + "i" ;+ Imperative Pl => pal_C3_1 stem + "iet"; - Participle Fem Sg Nom => stem + "jusi" ;- Participle Fem Sg Gen => stem + "jušas" ;- Participle Fem Sg Dat => stem + "jušai" ;- Participle Fem Sg Acc => stem + "jušu" ;- Participle Fem Sg Loc => stem + "jušā" ;- Participle Fem Pl Nom => stem + "jušas" ;- Participle Fem Pl Gen => stem + "jušu" ;- Participle Fem Pl Dat => stem + "jušām" ;- Participle Fem Pl Acc => stem + "jušas" ;- Participle Fem Pl Loc => stem + "jušās"+ Participle g n c => participle_normal g n c (stem + "j") } } ; @@ -278,7 +224,7 @@ Indicative P3 _ Fut => pal_C1_1 stem3 stem + "sies" ; Indicative P3 _ Past => stem3 + "ās" ; - Indicative _ _ Cond => stem + "tos"; + Indicative _ _ Cond => stem + "tos"; Relative Pres => stem2 + "oties" ; Relative Fut => pal_C1_1 stem3 stem + "šoties" ;@@ -288,27 +234,10 @@ Debitive => "jā" + stem2 + "as" ; DebitiveRelative => "jā" + stem2 + "oties" ; - Participle Masc Sg Nom => pal_C1_4 stem3 + "ies" ;- Participle Masc Sg Gen => NON_EXISTENT ;- Participle Masc Sg Dat => NON_EXISTENT ;- Participle Masc Sg Acc => pal_C1_3 stem3 + "ušos" ;- Participle Masc Sg Loc => NON_EXISTENT ;- Participle Masc Pl Nom => pal_C1_3 stem3 + "ušies" ;- Participle Masc Pl Gen => pal_C1_3 stem3 + "ušos" ;- Participle Masc Pl Dat => NON_EXISTENT ;- Participle Masc Pl Acc => pal_C1_3 stem3 + "ušos" ;- Participle Masc Pl Loc => NON_EXISTENT ;+ Imperative Sg => pal_C1_2 stem3 stem2 + "ies" ;+ Imperative Pl => pal_C1_2 stem3 stem2 + "ieties" ; - Participle Fem Sg Nom => pal_C1_3 stem3 + "usies" ;- Participle Fem Sg Gen => pal_C1_3 stem3 + "ušās" ;- Participle Fem Sg Dat => NON_EXISTENT ;- Participle Fem Sg Acc => pal_C1_3 stem3 + "ušos" ;- Participle Fem Sg Loc => NON_EXISTENT ;- Participle Fem Pl Nom => pal_C1_3 stem3 + "ušās" ;- Participle Fem Pl Gen => pal_C1_3 stem3 + "ušos" ;- Participle Fem Pl Dat => NON_EXISTENT ;- Participle Fem Pl Acc => pal_C1_3 stem3 + "ušos" ;- Participle Fem Pl Loc => NON_EXISTENT+ Participle g n c => participle_reflexive_l g n c (pal_C1_3 stem3) (pal_C1_4 stem3) } } ; @@ -338,7 +267,7 @@ Indicative P3 _ Fut => stem + "sies" ; Indicative P3 _ Past => stem + "jās" ; - Indicative _ _ Cond => stem + "tos"; + Indicative _ _ Cond => stem + "tos"; Relative Pres => stem + "joties" ; Relative Fut => stem + "šoties" ;@@ -348,27 +277,10 @@ Debitive => "jā" + stem + "jas" ; DebitiveRelative => "jā" + stem + "joties" ; - Participle Masc Sg Nom => stem + "jies" ;- Participle Masc Sg Gen => NON_EXISTENT ;- Participle Masc Sg Dat => NON_EXISTENT ;- Participle Masc Sg Acc => stem + "jušos" ;- Participle Masc Sg Loc => NON_EXISTENT ;- Participle Masc Pl Nom => stem + "jušies" ;- Participle Masc Pl Gen => stem + "jušos" ;- Participle Masc Pl Dat => NON_EXISTENT ;- Participle Masc Pl Acc => stem + "jušos" ;- Participle Masc Pl Loc => NON_EXISTENT ;+ Imperative Sg => stem + "jies" ;+ Imperative Pl => stem + "jieties" ; - Participle Fem Sg Nom => stem + "jusies" ;- Participle Fem Sg Gen => stem + "jušās" ;- Participle Fem Sg Dat => NON_EXISTENT ;- Participle Fem Sg Acc => stem + "jušos" ;- Participle Fem Sg Loc => NON_EXISTENT ;- Participle Fem Pl Nom => stem + "jušās" ;- Participle Fem Pl Gen => stem + "jušos" ;- Participle Fem Pl Dat => NON_EXISTENT ;- Participle Fem Pl Acc => stem + "jušās" ;- Participle Fem Pl Loc => NON_EXISTENT+ Participle g n c => participle_reflexive g n c (stem + "j") } } ; @@ -398,7 +310,7 @@ Indicative P3 _ Fut => stem + "sies" ; Indicative P3 _ Past => stem + "jās" ; - Indicative _ _ Cond => stem + "tos"; + Indicative _ _ Cond => stem + "tos"; Relative Pres => pal_C3_1 stem + "oties" ; Relative Fut => stem + "šoties" ;@@ -408,33 +320,18 @@ Debitive => pal_C3_6 stem + "s" ; DebitiveRelative => pal_C3_6 stem + "oties" ; - Participle Masc Sg Nom => stem + "jies" ;- Participle Masc Sg Gen => NON_EXISTENT ;- Participle Masc Sg Dat => NON_EXISTENT ;- Participle Masc Sg Acc => stem + "jušos" ;- Participle Masc Sg Loc => NON_EXISTENT ;- Participle Masc Pl Nom => stem + "jušies" ;- Participle Masc Pl Gen => stem + "jušos" ;- Participle Masc Pl Dat => NON_EXISTENT ;- Participle Masc Pl Acc => stem + "jušos" ;- Participle Masc Pl Loc => NON_EXISTENT ;+ Imperative Sg => pal_C3_1 stem + "ies" ;+ Imperative Pl => pal_C3_1 stem + "ieties" ; - Participle Fem Sg Nom => stem + "jusies" ;- Participle Fem Sg Gen => stem + "jušās" ;- Participle Fem Sg Dat => NON_EXISTENT ;- Participle Fem Sg Acc => stem + "jušos" ;- Participle Fem Sg Loc => NON_EXISTENT ;- Participle Fem Pl Nom => stem + "jušās" ;- Participle Fem Pl Gen => stem + "jušos" ;- Participle Fem Pl Dat => NON_EXISTENT ;- Participle Fem Pl Acc => stem + "jušās" ;- Participle Fem Pl Loc => NON_EXISTENT+ Participle g n c => participle_reflexive g n c (stem + "j") } } ; mkVerb_Irreg : Str -> Verb = \lemma -> case lemma of {- "būt" => mkVerb_toBe+ "būt" => mkVerb_toBe ;+ "iet" => mkVerb_Walk ;+ "gulēt" => mkVerb_Sleep } ; mkVerb_toBe : Verb = {@@ -457,6 +354,43 @@ } } ; + mkVerb_Walk : Verb = {+ s = table {+ Pos => table {+ Indicative P3 _ Pres => "iet" ;+ Debitive => "jāiet" ;+ x => (mkVerb_C1 "iet" "eju" "gāju" ).s ! x -- the incorrect form 'esu' will be overriden+ } ;+ Neg => table {+ Indicative P3 _ Pres => "neiet" ;+ Debitive => NON_EXISTENT;+ DebitiveRelative => NON_EXISTENT;+ x => (mkVerb_C1 "neiet" "neeju" "negāju" ).s ! x -- the incorrect form 'neesu' will be overriden+ }+ }+ } ;++ mkVerb_Sleep : Verb = {+ s = table {+ Pos => table {+ Indicative P2 Sg Pres => (mkVerb_C3 "gulēt").s ! Indicative P2 Sg Pres;+ Indicative p n Pres => (mkVerb_C3 "guļēt").s ! Indicative p n Pres;+ Relative Pres => (mkVerb_C3 "guļēt").s ! Relative Pres;+ Debitive => (mkVerb_C3 "guļēt").s ! Debitive;+ DebitiveRelative => (mkVerb_C3 "guļēt").s ! DebitiveRelative;+ x => (mkVerb_C3 "gulēt").s ! x+ } ;+ Neg => table {+ Indicative P2 Sg Pres => (mkVerb_C3 "negulēt").s ! Indicative P2 Sg Pres;+ Indicative p n Pres => (mkVerb_C3 "neguļēt").s ! Indicative p n Pres;+ Relative Pres => (mkVerb_C3 "neguļēt").s ! Relative Pres;+ Debitive => NON_EXISTENT;+ DebitiveRelative => NON_EXISTENT;+ x => (mkVerb_C3 "negulēt").s ! x+ }+ }+ } ;+ -- Auxiliaries (palatalization rules) -- Ref. to the Java implementation: mija6@@ -468,6 +402,7 @@ _ + "s" => s + "sī" ; _ => stem } ;+ s + "z" => s + "zī" ; -- lauzt -> lauzīs _ => stem } ; @@ -478,7 +413,12 @@ _ + "s" => s + "s" ; _ => stem } ;- s + "ž" => s + "d" ;+ s + "t" => case stem of {+ _ + "met" => stem ;+ _ + "cērt" => stem;+ _ => s + "ti"+ } ;+ -- s + "ž" => s + "d" ; -- aizkomentēts jo noveda pie laužu -> laud nevis lauz s + "ļ" => s + "l" ; s + "mj" => s + "m" ; s + "bj" => s + "b" ;@@ -520,14 +460,7 @@ -- Ref. to the Java implementation: mija5 pal_C3_3 : Str -> Str = \stem ->- "jā" +- case stem of {- s + "dā" => s + "d" ;- s + "ā" => s + "a" ;- s + "cī" => s + "ka" ;- s + "ī" => s + "a" ;- _ => Predef.tk 1 stem- } ;+ "jā" + pal_C3_5 stem ; -- Ref. to the Java implementation: mija8 pal_C3_4 : Str -> Str = \stem ->@@ -557,6 +490,90 @@ s + "ī" => s + "ā" ; s + "inā" => s + "inā" ; _ => Predef.tk 1 stem + "a"- } ; - + } ;+++ -- Participle paradigms+ participle_normal : Gender -> Number -> Case -> Str -> Str = \g,n,c, stem -> participle_normal_l g n c stem stem;+ participle_normal_l : Gender -> Number -> Case -> Str -> Str -> Str = \g,n,c, stem, lemma_stem ->+ case g of {+ Masc => case n of {+ Sg => case c of {+ Nom => lemma_stem + "is" ;+ Gen => stem + "uša" ;+ Dat => stem + "ušam" ;+ Acc => stem + "ušu" ;+ Loc => stem + "ušā" ;+ Voc => NON_EXISTENT+ } ;+ Pl => case c of {+ Nom => stem + "uši" ;+ Gen => stem + "ušu" ;+ Dat => stem + "ušiem" ;+ Acc => stem + "ušus" ;+ Loc => stem + "ušos" ;+ Voc => NON_EXISTENT+ }+ } ;+ Fem => case n of {+ Sg => case c of {+ Nom => stem + "usi" ;+ Gen => stem + "ušas" ;+ Dat => stem + "ušai" ;+ Acc => stem + "ušu" ;+ Loc => stem + "ušā" ;+ Voc => NON_EXISTENT+ };+ Pl => case c of {+ Nom => stem + "ušas" ;+ Gen => stem + "ušu" ;+ Dat => stem + "ušām" ;+ Acc => stem + "ušas" ;+ Loc => stem + "ušās" ;+ Voc => NON_EXISTENT+ }+ }+ } ;++ participle_reflexive : Gender -> Number -> Case -> Str -> Str = \g,n,c, stem -> participle_reflexive_l g n c stem stem;+ participle_reflexive_l : Gender -> Number -> Case -> Str -> Str -> Str = \g,n,c, stem, lemma_stem ->+ case g of {+ Masc => case n of {+ Sg => case c of {+ Nom => lemma_stem + "ies" ;+ Gen => NON_EXISTENT ;+ Dat => NON_EXISTENT ;+ Acc => stem + "ušos" ;+ Loc => NON_EXISTENT ;+ Voc => NON_EXISTENT+ } ;+ Pl => case c of {+ Nom => stem + "ušies" ;+ Gen => stem + "ušos" ;+ Dat => NON_EXISTENT ;+ Acc => stem + "ušos" ;+ Loc => NON_EXISTENT ;+ Voc => NON_EXISTENT+ }+ } ;+ Fem => case n of {+ Sg => case c of {+ Nom => stem + "usies" ;+ Gen => stem + "ušās" ;+ Dat => NON_EXISTENT ;+ Acc => stem + "ušos" ;+ Loc => NON_EXISTENT ;+ Voc => NON_EXISTENT+ };+ Pl => case c of {+ Nom => stem + "ušās" ;+ Gen => stem + "ušos" ;+ Dat => NON_EXISTENT ;+ Acc => stem + "ušos" ;+ Loc => NON_EXISTENT ;+ Voc => NON_EXISTENT+ }+ }+ } ;+ } ;
@@ -1,29 +1,38 @@-concrete PhraseLav of Phrase = CatLav ** open Prelude, ResLav in {- lin- PhrUtt pconj utt voc = {s = pconj.s ++ utt.s ++ voc.s} ;- UttS s = s ;+--# -path=.:../abstract:../common:../prelude - NoPConj = {s = []} ;- NoVoc = {s = []} ;- -{-+concrete PhraseLav of Phrase = CatLav ** open+ ResLav,+ VerbLav+ in { - UttQS qs = {s = qs.s ! QDir} ;- UttImpSg pol imp = {s = pol.s ++ imp.s ! contrNeg True pol.p ! ImpF Sg False} ;- UttImpPl pol imp = {s = pol.s ++ imp.s ! contrNeg True pol.p ! ImpF Pl False} ;- UttImpPol pol imp = {s = pol.s ++ imp.s ! contrNeg True pol.p ! ImpF Sg True} ;+flags+ coding = utf8 ; - UttIP ip = {s = ip.s ! Nom} ; --- Acc also- UttIAdv iadv = iadv ;- UttNP np = {s = np.s ! Nom} ;- UttVP vp = {s = infVP False vp (agrP3 Sg)} ;- UttAdv adv = adv ;- UttCN n = {s = n.s ! Sg ! Nom} ;- UttCard n = {s = n.s ! Nom} ;- UttAP ap = {s = ap.s ! agrP3 Sg} ;+lin+ PhrUtt pconj utt voc = { s = pconj.s ++ utt.s ++ voc.s } ; - PConjConj conj = {s = conj.s2} ; ---+ UttS s = { s = s.s } ;+ UttQS qs = { s = qs.s } ;+ UttImpSg pol imp = { s = pol.s ++ imp.s ! pol.p ! Sg } ;+ UttImpPl pol imp = { s = pol.s ++ imp.s ! pol.p ! Pl } ;+ UttImpPol pol imp = { s = pol.s ++ "lūdzu" ++ imp.s ! pol.p ! Pl } ; - VocNP np = {s = "," ++ np.s ! Nom} ;--}+ UttNP np = { s = np.s ! Nom } ;+ UttCN n = { s = n.s ! Indef ! Sg ! Nom } ;+ UttAP ap = { s = ap.s ! Indef ! Masc ! Sg ! Nom } ;+ UttAdv adv = adv ;++ -- FIXME: neesmu līdz galam drošs vai agreement ir tieši (AgPr Pl)+ UttVP vp = { s = build_VP vp Pos Infinitive (AgP3 Pl Masc) } ;++ UttIP ip = { s = ip.s ! Nom } ;+ UttIAdv iadv = iadv ;+ UttCard n = { s = n.s ! Masc ! Nom } ;++ NoPConj = { s = [] } ;+ NoVoc = { s = [] } ;++ VocNP np = { s = "," ++ np.s ! ResLav.Voc } ;+ PConjConj conj = { s = conj.s2 } ;+ }
@@ -1,55 +1,55 @@-concrete QuestionLav of Question = CatLav ** open ResLav, Prelude in {-{-- flags optimize=all_subs ;+--# -path=.:../abstract:../common:../prelude - lin+concrete QuestionLav of Question = CatLav ** open+ ResLav,+ VerbLav,+ Prelude,+ ParadigmsVerbsLav+ in { - QuestCl cl = {- s = \\t,a,p => - let cls = cl.s ! t ! a ! p - in table {- QDir => cls ! OQuest ;- QIndir => "if" ++ cls ! ODir- } ---- "whether" in ExtEng- } ;+flags+ optimize = all_subs ;+ coding = utf8 ; - QuestVP qp vp = - let cl = mkClause (qp.s ! Nom) (agrP3 qp.n) vp- in {s = \\t,a,b,_ => cl.s ! t ! a ! b ! ODir} ;+lin+ QuestCl cl = { s = \\m,p => "vai" ++ cl.s ! m ! p } ; - QuestSlash ip slash = - mkQuestion (ss (slash.c2 ++ ip.s ! Acc)) slash ;- --- stranding in ExratEng + QuestVP ip vp = { s = \\m,p => ip.s ! Nom ++ buildVerb vp.v m p (AgP3 ip.n Masc) } ; - QuestIAdv iadv cl = mkQuestion iadv cl ;+ QuestSlash ip slash = { s = \\m,p => slash.p.s ++ ip.s ! (slash.p.c ! ip.n) ++ slash.s ! m ! p } ; - QuestIComp icomp np = - mkQuestion icomp (mkClause (np.s ! Nom) np.a (predAux auxBe)) ;+ QuestIAdv iadv cl = { s = \\m,p => iadv.s ++ cl.s ! m ! p } ; + QuestIComp icomp np = { s = \\m,p => icomp.s ++ buildVerb mkVerb_toBe m p np.a ++ np.s ! Nom } ; - PrepIP p ip = {s = p.s ++ ip.s ! Acc} ;+ IdetQuant idet num = {+ s = \\g => idet.s ! g ! num.n ++ num.s ! g ! Nom ;+ n = num.n+ } ; - AdvIP ip adv = {- s = \\c => ip.s ! c ++ adv.s ;- n = ip.n- } ;- - IdetCN idet cn = {- s = \\c => idet.s ++ cn.s ! idet.n ! c ; - n = idet.n- } ;+ -- FIXME: quick&dirty - lai kompilētos pret RGL API+ -- Saskaņā ar Cat.gf, Common.gf un Structural.gf nav iespējams neko saskaņot...+ -- Identisks copy-paste ir Rus gadījumā, bet priekš Bul Krasimirs ir kaut ko paplašinājis.+ AdvIAdv i a = ss (i.s ++ a.s) ; - IdetIP idet = {- s = \\c => idet.s ; - n = idet.n- } ;+ AdvIP ip adv = {+ s = \\c => ip.s ! c ++ adv.s ;+ n = ip.n+ } ; - IdetQuant idet num = {- s = idet.s ! num.n ++ num.s ! Nom ; - n = num.n- } ;+ PrepIP p ip = { s = p.s ++ ip.s ! (p.c ! ip.n) } ; - CompIAdv a = a ;- CompIP p = ss (p.s ! Nom) ;--}+ IdetCN idet cn = {+ s = \\c => idet.s ! cn.g ++ cn.s ! Def ! idet.n ! c ;+ n = idet.n+ } ;++ IdetIP idet = {+ s = \\c => (idet.s ! Masc) | (idet.s ! Fem) ;+ n = idet.n+ } ;++ CompIAdv a = a ;+ CompIP p = ss (p.s ! Nom) ;+ }
@@ -1,52 +1,53 @@-concrete RelativeLav of Relative = CatLav ** open ResLav in {-{-- flags optimize=all_subs ;+--# -path=.:../abstract:../common:../prelude - lin+concrete RelativeLav of Relative = CatLav ** open+ ResLav,+ VerbLav+ in { - RelCl cl = {- s = \\t,a,p,_ => "such" ++ "that" ++ cl.s ! t ! a ! p ! ODir ; - c = Nom- } ;+flags+ optimize = all_subs ;+ coding = utf8 ; - RelVP rp vp = {- s = \\t,ant,b,ag => - let - agr = case rp.a of {- RNoAg => ag ;- RAg a => a- } ;- cl = mkClause (rp.s ! RC (fromAgr agr).g Nom) agr vp- in- cl.s ! t ! ant ! b ! ODir ;- c = Nom- } ;+lin+ RelCl cl = { s = \\m,p,_ => "ka" ++ cl.s ! m ! p } ; --- Pied piping: "at which we are looking". Stranding and empty--- relative are defined in $ExtraEng.gf$ ("that we are looking at", --- "we are looking at").+ RelVP rp vp = {+ s = \\m,p,ag =>+ rp.s ! Masc ! Nom ++ buildVerb vp.v m p (toAgr (fromAgr ag).n P3 (fromAgr ag).g) ++ vp.s2 ! ag+ } ; - RelSlash rp slash = {- s = \\t,a,p,agr => - slash.c2 ++ rp.s ! RPrep (fromAgr agr).g ++ slash.s ! t ! a ! p ! ODir ;- c = Acc- } ;+ -- FIXME: vārdu secība - nevis 'kas mīl viņu' bet 'kas viņu mīl' (?)+ -- FIXME: Masc varētu nebūt labi+ RelSlash rp slash = {+ s = \\m,p,ag => slash.p.s ++ rp.s ! Masc ! (slash.p.c ! Sg) ++ slash.s ! m ! p+ } ; - FunRP p np rp = {- s = \\c => np.s ! Acc ++ p.s ++ rp.s ! RPrep (fromAgr np.a).g ;- a = RAg np.a- } ;+ -- FIXME: placeholder+ -- TODO: jātestē, kautkas nav labi ar testpiemēru+ FunRP p np rp = {+ s = \\g,c => p.s ++ rp.s ! g ! c ++ np.s ! (p.c ! (fromAgr np.a).n)+ } ; - IdRP = - { s = table {- RC _ Gen => "whose" ; - RC Neutr _ => "which" ;- RC _ Acc => "whom" ;- RC _ Nom => "who" ;- RPrep Neutr => "which" ;- RPrep _ => "whom"- } ;- a = RNoAg+ IdRP = {+ s = table {+ Masc => table {+ Nom => "kurš" ;+ Gen => "kura" ;+ Dat => "kuram" ;+ Acc => "kuru" ;+ Loc => "kurā" ;+ ResLav.Voc => NON_EXISTENT } ;--}+ Fem => table {+ Nom => "kura" ;+ Gen => "kuras" ;+ Dat => "kurai" ;+ Acc => "kuru" ;+ Loc => "kurā" ;+ ResLav.Voc => NON_EXISTENT+ }+ }+ } ;+ }
@@ -1,503 +1,117 @@+--# -path=.:../abstract:../common:../prelude+ -- This module contains operations that are needed to make the -- resource syntax work. To define everything that is needed to -- implement $Test$, it moreover contains regular lexical -- patterns needed for $Lex$. resource ResLav = ParamX ** open Prelude in {- flags optimize=all ;- --- Some parameters, such as $Number$, are inherited from $ParamX$.---2 For $Noun$--- This is the worst-case $Case$ needed for pronouns.- param- +flags+ optimize = all ;+ coding = utf8 ;++param+ -- Some parameters, such as $Number$, are inherited from $ParamX$.+ -- Nouns- Case = Nom | Gen | Dat | Acc | Loc ;- Gender = Masc | Fem ;- Restriction = AllForms | SgOnly | PlOnly | SgGenOnly | PlGenOnly ; - NounDecl = D0 | D1 | D2 | D3 | D4 | D5 | D6 | DR ;- + Case = Nom | Gen | Dat | Acc | Loc | Voc ;+ Gender = Masc | Fem ;+ NounDecl = D0 | D1 | D2 | D3 | D4 | D5 | D6 | DR ;+ -- Adjectives- Definite = Indef | Def ;- AdjType = AdjQual | AdjRel | AdjIndecl ;- + Definite = Indef | Def ;+ AdjType = AdjQual | AdjRel | AdjIndecl ;++ -- TODO: pārveidot uz šādu formu lai ir arī apstākļa vārdi kas atvasināti no īpašības vārdiem+ AForm = AAdj Degree Definite Gender Number Case | AAdv Degree ;+ -- Verbs -- Ind = Indicative -- Rel = Relative (Latvian specific: http://www.isocat.org/rest/dc/3836) -- Deb = Debitive (Latvian specific: http://www.isocat.org/rest/dc/3835) -- Condit = Conditional- -- DebitiveRelative - the relative subtype of debitive- VerbForm = Infinitive | Indicative Person Number Tense | Relative Tense | Debitive |- DebitiveRelative | Participle Gender Number Case ; -- Imperative nav pielikts, bet tur ir kaut kâdas îpatnîbas globâlajâ ParamsX modulî par imperatîvu- VerbMood = Ind Anteriority Tense | Rel Anteriority Tense | Deb Anteriority Tense | Condit Anteriority ;- VerbConj = C2 | C3 ;- - Agr = Ag Gender Number ;- - ThisOrThat = This | That ;- - oper - - vowel : pattern Str = #("a"|"â"|"e"|"ç"|"i"|"î"|"o"|"u"|"û") ;-- simpleCons : pattern Str = #("c"|"d"|"l"|"n"|"s"|"t"|"z") ;- labialCons : pattern Str = #("b"|"m"|"p"|"v") ;- sonantCons : pattern Str = #("l"|"m"|"n"|"r"|"ï"|"ò") ;- doubleCons : pattern Str = #("ll"|"ln"|"nn"|"sl"|"sn"|"st"|"zl"|"zn") ;- - NON_EXISTENT : Str = "NON_EXISTENT" ;- - -{- --- Agreement of $NP$ has 8 values. $Gender$ is needed for "who"/"which" and--- for "himself"/"herself"/"itself".-- param- Agr = AgP1 Number | AgP2 Number | AgP3Sg Gender | AgP3Pl ;-- param - Gender = Neutr | Masc | Fem ;-----2 For $Verb$---- Only these five forms are needed for open-lexicon verbs.-- param- VForm = - VInf- | VPres- | VPPart- | VPresPart- | VPast --# notpresent- ;---- Auxiliary verbs have special negative forms.-- VVForm = - VVF VForm- | VVPresNeg- | VVPastNeg --# notpresent- ;---- The order of sentence is needed already in $VP$.-- Order = ODir | OQuest ;-----2 For $Adjective$-- AForm = AAdj Degree Case | AAdv ;----2 For $Relative$- - RAgr = RNoAg | RAg Agr ;- RCase = RPrep Gender | RC Gender Case ;----2 For $Numeral$-- CardOrd = NCard | NOrd ;- DForm = unit | teen | ten ;----2 Transformations between parameter types-- oper- toAgr : Number -> Person -> Gender -> Agr = \n,p,g -> - case p of {- P1 => AgP1 n ;- P2 => AgP2 n ;- P3 => case n of {- Sg => AgP3Sg g ;- Pl => AgP3Pl- }- } ;-- fromAgr : Agr -> {n : Number ; p : Person ; g : Gender} = \a -> case a of {- AgP1 n => {n = n ; p = P1 ; g = Masc} ;- AgP2 n => {n = n ; p = P2 ; g = Masc} ;- AgP3Pl => {n = Pl ; p = P3 ; g = Masc} ;- AgP3Sg g => {n = Sg ; p = P3 ; g = g}- } ;-- agrP3 : Number -> Agr = \n -> agrgP3 n Neutr ;-- agrgP3 : Number -> Gender -> Agr = \n,g -> toAgr n P3 g ;-- conjAgr : Agr -> Agr -> Agr = \a0,b0 -> - let a = fromAgr a0 ; b = fromAgr b0 - in- toAgr- (conjNumber a.n b.n)- (conjPerson a.p b.p) a.g ;---- For $Lex$.---- For each lexical category, here are the worst-case constructors.-- mkNoun : (_,_,_,_ : Str) -> {s : Number => Case => Str} = - \man,mans,men,mens -> {- s = table {- Sg => table {- Gen => mans ;- _ => man- } ;- Pl => table {- Gen => mens ;- _ => men- }- }- } ;-- mkAdjective : (_,_,_,_ : Str) -> {s : AForm => Str; lock_A : {}} = - \good,better,best,well -> lin A {- s = table {- AAdj Posit c => (regGenitiveS good) ! c ;- AAdj Compar c => (regGenitiveS better) ! c ;- AAdj Superl c => (regGenitiveS best) ! c ;- AAdv => well- }- } ;-- mkVerb : (_,_,_,_,_ : Str) -> Verb = - \go,goes,went,gone,going -> {- s = table {- VInf => go ;- VPres => goes ;- VPast => went ; --# notpresent- VPPart => gone ;- VPresPart => going- } ;- isRefl = False- } ;-- mkIP : (i,me,my : Str) -> Number -> {s : Case => Str ; n : Number} =- \i,me,my,n -> let who = mkNP i me my n P3 Neutr in {- s = who.s ; - n = n- } ;-- mkNP : (i,me,my : Str) -> Number -> Person -> Gender -> - {s : Case => Str ; a : Agr} = \i,me,my,n,p,g -> - { s = table {- Nom => i ;- Acc => me ;- Gen => my- } ;- a = toAgr n p g ;- };-- regNP : Str -> Number -> {s : Case => Str ; a : Agr} = \that,n ->- mkNP that that (that + "'s") n P3 Neutr ;-- regGenitiveS : Str -> Case => Str = \s -> - table { Gen => genitiveS s; _ => s } ;-- genitiveS : Str -> Str = \dog ->- case last dog of {- "s" => dog + "'" ;- _ => dog + "'s"- };---- We have just a heuristic definition of the indefinite article.--- There are lots of exceptions: consonantic "e" ("euphemism"), consonantic--- "o" ("one-sided"), vocalic "u" ("umbrella").-- artIndef = pre {- "eu" | "Eu" | "uni" | "up" => "a" ;- "un" => "an" ; - "a" | "e" | "i" | "o" | "A" | "E" | "I" | "O" => "an" ;- _ => "a"- } ;-- artDef = "the" ;---- For $Verb$.-- Verb : Type = {- s : VForm => Str ;- isRefl : Bool- } ;+ -- DebitiveRelative = the relative subtype of debitive+ VerbForm =+ Infinitive+ | Indicative Person Number Tense+ | Relative Tense+ | Debitive+ | Imperative Number+ | DebitiveRelative+ | Participle Gender Number Case+ ;+ -- TODO: divdabim noteiktā forma un arī pārākā / vispārākā pakāpe - param- CPolarity = - CPos- | CNeg Bool ; -- contracted or not+ VerbMood =+ Ind Anteriority Tense+ | Rel Anteriority Tense --# notpresent+ | Deb Anteriority Tense --# notpresent+ | Condit Anteriority --# notpresent+ ; - oper- contrNeg : Bool -> Polarity -> CPolarity = \b,p -> case p of {- Pos => CPos ;- Neg => CNeg b- } ;+ VerbConj = C2 | C3 ; - VerbForms : Type =- Tense => Anteriority => CPolarity => Order => Agr => - {aux, adv, fin, inf : Str} ; -- would, not, sleeps, slept+ --Agr = Ag Gender Number ;+ -- TODO: kāpēc P3 jāsaskaņo Gender? divdabju dēļ?+ Agr = AgP1 Number | AgP2 Number | AgP3 Number Gender ; - VP : Type = {- s : VerbForms ;- prp : Str ; -- present participle - inf : Str ; -- the infinitive form ; VerbForms would be the logical place- ad : Str ; -- sentence adverb- s2 : Agr => Str -- complement- } ;+ ThisOrThat = This | That ;+ CardOrd = NCard | NOrd ;+ DForm = unit | teen | ten ; +oper+ vowel : pattern Str = #("a"|"ā"|"e"|"ē"|"i"|"ī"|"o"|"u"|"ū") ; - SlashVP = VP ** {c2 : Str} ;+ simpleCons : pattern Str = #("c"|"d"|"l"|"n"|"s"|"t"|"z") ;+ labialCons : pattern Str = #("b"|"m"|"p"|"v") ;+ sonantCons : pattern Str = #("l"|"m"|"n"|"r"|"ļ"|"ņ") ;+ doubleCons : pattern Str = #("ll"|"ln"|"nn"|"sl"|"sn"|"st"|"zl"|"zn") ; - predVc : (Verb ** {c2 : Str}) -> SlashVP = \verb -> - predV verb ** {c2 = verb.c2} ;+ NON_EXISTENT : Str = "NON_EXISTENT" ; - predV : Verb -> VP = \verb -> {- s = \\t,ant,b,ord,agr => - let- inf = verb.s ! VInf ;- fin = presVerb verb agr ;- part = verb.s ! VPPart ;- in- case <t,ant,b,ord> of {- <Pres,Simul,CPos,ODir> => vff fin [] ;- <Pres,Simul,CPos,OQuest> => vf (does agr) inf ;- <Pres,Anter,CPos,_> => vf (have agr) part ; --# notpresent- <Pres,Anter,CNeg c,_> => vfn c (have agr) (havent agr) part ; --# notpresent- <Past,Simul,CPos,ODir> => vff (verb.s ! VPast) [] ; --# notpresent- <Past,Simul,CPos,OQuest> => vf "did" inf ; --# notpresent- <Past,Simul,CNeg c,_> => vfn c "did" "didn't" inf ; --# notpresent- <Past,Anter,CPos,_> => vf "had" part ; --# notpresent- <Past,Anter,CNeg c,_> => vfn c "had" "hadn't" part ; --# notpresent- <Fut, Simul,CPos,_> => vf "will" inf ; --# notpresent- <Fut, Simul,CNeg c,_> => vfn c "will" "won't" inf ; --# notpresent- <Fut, Anter,CPos,_> => vf "will" ("have" ++ part) ; --# notpresent- <Fut, Anter,CNeg c,_> => vfn c "will" "won't"("have" ++ part) ; --# notpresent- <Cond,Simul,CPos,_> => vf "would" inf ; --# notpresent- <Cond,Simul,CNeg c,_> => vfn c "would" "wouldn't" inf ; --# notpresent- <Cond,Anter,CPos,_> => vf "would" ("have" ++ part) ; --# notpresent- <Cond,Anter,CNeg c,_> => vfn c "would" "wouldn't" ("have" ++ part) ; --# notpresent- <Pres,Simul,CNeg c,_> => vfn c (does agr) (doesnt agr) inf- } ;- prp = verb.s ! VPresPart ;- inf = verb.s ! VInf ;- ad = [] ;- s2 = \\a => if_then_Str verb.isRefl (reflPron ! a) []- } ;+ Verb : Type = { s : Polarity => VerbForm => Str } ; - predAux : Aux -> VP = \verb -> {- s = \\t,ant,cb,ord,agr => - let - b = case cb of {- CPos => Pos ;- _ => Neg- } ;- inf = verb.inf ;- fin = verb.pres ! b ! agr ;- finp = verb.pres ! Pos ! agr ;- part = verb.ppart ;- in- case <t,ant,cb,ord> of {- <Pres,Anter,CPos,_> => vf (have agr) part ; --# notpresent- <Pres,Anter,CNeg c,_> => vfn c (have agr) (havent agr) part ; --# notpresent- <Past,Simul,CPos, _> => vf (verb.past ! b ! agr) [] ; --# notpresent- <Past,Simul,CNeg c, _> => vfn c (verb.past!Pos!agr)(verb.past!Neg!agr) [] ; --# notpresent- <Past,Anter,CPos,_> => vf "had" part ; --# notpresent- <Past,Anter,CNeg c,_> => vfn c "had" "hadn't" part ; --# notpresent- <Fut, Simul,CPos,_> => vf "will" inf ; --# notpresent- <Fut, Simul,CNeg c,_> => vfn c "will" "won't" inf ; --# notpresent- <Fut, Anter,CPos,_> => vf "will" ("have" ++ part) ; --# notpresent- <Fut, Anter,CNeg c,_> => vfn c "will" "won't"("have" ++ part) ; --# notpresent- <Cond,Simul,CPos,_> => vf "would" inf ; --# notpresent- <Cond,Simul,CNeg c,_> => vfn c "would" "wouldn't" inf ; --# notpresent- <Cond,Anter,CPos,_> => vf "would" ("have" ++ part) ; --# notpresent- <Cond,Anter,CNeg c,_> => vfn c "would" "wouldn't" ("have" ++ part) ; --# notpresent- <Pres,Simul,CPos, _> => vf fin [] ;- <Pres,Simul,CNeg c, _> => vfn c finp fin [] - } ;- prp = verb.prpart ;- inf = verb.inf ;- ad = [] ;- s2 = \\_ => []- } ;- - vff : Str -> Str -> {aux, adv, fin, inf : Str} = \x,y -> - {aux = [] ; adv = [] ; fin = x ; inf = y} ;+ VP = { v : Verb ; s2 : Agr => Str } ; -- s2 = object(s), complements, adverbial modifiers - vf : Str -> Str -> {aux, adv, fin, inf : Str} = \x,y -> vfn True x x y ;+ VPSlash = VP ** { p : prep } ;+ -- principā rekur ir objekts kuram jau kaut kas ir bet ir vēl viena brīva valence... - vfn : Bool -> Str -> Str -> Str -> {aux, fin, adv, inf : Str} = - \contr,x,y,z -> - case contr of {- True => {aux = y ; adv = [] ; fin = [] ; inf = z} ;- False => {aux = x ; adv = "not" ; fin = [] ; inf = z}- } ;+ prep = { s : Str ; c : Number => Case } ; - insertObj : (Agr => Str) -> VP -> VP = \obj,vp -> {- s = vp.s ;- prp = vp.prp ;- inf = vp.inf ;- ad = vp.ad ;- s2 = \\a => vp.s2 ! a ++ obj ! a- } ;+ --Valence : Type = { p : Prep ; c : Number => Case } ;+ -- e.g. 'ar' + Sg-Acc or Pl-Dat; Preposition may be skipped for simple case-baced valences - insertObjPre : (Agr => Str) -> VP -> VP = \obj,vp -> {- s = vp.s ;- prp = vp.prp ;- inf = vp.inf ;- ad = vp.ad ;- s2 = \\a => obj ! a ++ vp.s2 ! a + toAgr : Number -> Person -> Gender -> Agr = \n,p,g ->+ case p of {+ P1 => AgP1 n ;+ P2 => AgP2 n ;+ P3 => AgP3 n g } ; - insertObjc : (Agr => Str) -> SlashVP -> SlashVP = \obj,vp -> - insertObj obj vp ** {c2 = vp.c2} ;----- The adverb should be before the finite verb.-- insertAdV : Str -> VP -> VP = \ad,vp -> {- s = vp.s ;- prp = vp.prp ;- inf = vp.inf ;- ad = vp.ad ++ ad ;- s2 = \\a => vp.s2 ! a+ fromAgr : Agr -> { n : Number ; p : Person ; g : Gender } = \a ->+ case a of {+ AgP1 n => { n = n ; p = P1 ; g = Masc } ; -- FIXME: 'es esmu skaista'+ AgP2 n => { n = n ; p = P2 ; g = Masc } ; -- FIXME: 'tu esi skaista'+ AgP3 n g => { n = n ; p = P3 ; g = g } } ; --- -- predVV : {s : VVForm => Str ; isAux : Bool} -> VP = \verb ->- let verbs = verb.s+ conjAgr : Agr -> Agr -> Agr = \a0,b0 ->+ let+ a = fromAgr a0 ;+ b = fromAgr b0 in- case verb.isAux of {- True => predAux {- pres = table {- Pos => \\_ => verbs ! VVF VPres ;- Neg => \\_ => verbs ! VVPresNeg- } ;- past = table { --# notpresent- Pos => \\_ => verbs ! VVF VPast ; --# notpresent- Neg => \\_ => verbs ! VVPastNeg --# notpresent- } ; --# notpresent- inf = verbs ! VVF VInf ;- ppart = verbs ! VVF VPPart ;- prpart = verbs ! VVF VPresPart ;- } ;- _ => predV {s = \\vf => verbs ! VVF vf ; isRefl = False}- } ;-- presVerb : {s : VForm => Str} -> Agr -> Str = \verb -> - agrVerb (verb.s ! VPres) (verb.s ! VInf) ;-- infVP : Bool -> VP -> Agr -> Str = \isAux,vp,a ->- vp.ad ++ - case isAux of {True => [] ; False => "to"} ++ - vp.inf ++ vp.s2 ! a ;-- agrVerb : Str -> Str -> Agr -> Str = \has,have,agr -> - case agr of {- AgP3Sg _ => has ;- _ => have- } ;-- have = agrVerb "has" "have" ;- havent = agrVerb "hasn't" "haven't" ;- does = agrVerb "does" "do" ;- doesnt = agrVerb "doesn't" "don't" ;-- Aux = {- pres : Polarity => Agr => Str ; - past : Polarity => Agr => Str ; --# notpresent- inf,ppart,prpart : Str- } ;-- auxBe : Aux = {- pres = \\b,a => case <b,a> of {- <Pos,AgP1 Sg> => "am" ; - <Neg,AgP1 Sg> => ["am not"] ; --- am not I- _ => agrVerb (posneg b "is") (posneg b "are") a- } ;- past = \\b,a => case a of { --# notpresent- AgP1 Sg | AgP3Sg _ => posneg b "was" ; --# notpresent- _ => (posneg b "were") --# notpresent- } ; --# notpresent- inf = "be" ;- ppart = "been" ;- prpart = "being"- } ;-- posneg : Polarity -> Str -> Str = \p,s -> case p of {- Pos => s ;- Neg => s + "n't"- } ;-- conjThat : Str = "that" ;-- reflPron : Agr => Str = table {- AgP1 Sg => "myself" ;- AgP2 Sg => "yourself" ;- AgP3Sg Masc => "himself" ;- AgP3Sg Fem => "herself" ;- AgP3Sg Neutr => "itself" ;- AgP1 Pl => "ourselves" ;- AgP2 Pl => "yourselves" ;- AgP3Pl => "themselves"- } ;---- For $Sentence$.-- Clause : Type = {- s : Tense => Anteriority => CPolarity => Order => Str- } ;-- mkClause : Str -> Agr -> VP -> Clause =- \subj,agr,vp -> {- s = \\t,a,b,o => - let - verb = vp.s ! t ! a ! b ! o ! agr ;- compl = vp.s2 ! agr- in- case o of {- ODir => subj ++ verb.aux ++ verb.adv ++ vp.ad ++ verb.fin ++ verb.inf ++ compl ;- OQuest => verb.aux ++ subj ++ verb.adv ++ vp.ad ++ verb.fin ++ verb.inf ++ compl- }- } ;----- For $Numeral$.+ toAgr+ (conjNumber a.n b.n)+ (conjPerson a.p b.p) -- FIXME: personu apvienošana ir tricky un ir jāuztaisa korekti+ (conjGender a.g b.g) ; - mkNum : Str -> Str -> Str -> Str -> {s : DForm => CardOrd => Case => Str} = - \two, twelve, twenty, second ->- {s = table {- unit => table {NCard => regGenitiveS two ; NOrd => regGenitiveS second} ; - teen => \\c => mkCard c twelve ; - ten => \\c => mkCard c twenty- }+ conjGender : Gender -> Gender -> Gender = \a,b ->+ case a of {+ Fem => b ;+ _ => Masc } ; - regNum : Str -> {s : DForm => CardOrd => Case => Str} = - \six -> mkNum six (six + "teen") (six + "ty") (regOrd six) ;-- regCardOrd : Str -> {s : CardOrd => Case => Str} = \ten ->- {s = table {NCard => regGenitiveS ten ; - NOrd => regGenitiveS (regOrd ten)} } ;-- mkCard : CardOrd -> Str -> Case => Str = \o,ten -> - (regCardOrd ten).s ! o ; -- regOrd : Str -> Str = \ten -> - case last ten of {- "y" => init ten + "ieth" ;- _ => ten + "th"- } ;-- mkQuestion : - {s : Str} -> Clause -> - {s : Tense => Anteriority => CPolarity => QForm => Str} = \wh,cl ->- {- s = \\t,a,p => - let - cls = cl.s ! t ! a ! p ;- why = wh.s- in table {- QDir => why ++ cls ! OQuest ;- QIndir => why ++ cls ! ODir- }- } ;+ agrgP3 : Number -> Gender -> Agr = \n,g -> toAgr n P3 g ; --} }
@@ -1,100 +1,73 @@-concrete SentenceLav of Sentence = CatLav ** open Prelude, ResLav, ParadigmsVerbsLav in {- flags optimize=all_subs ;+--# -path=.:../abstract:../common:../prelude - lin+concrete SentenceLav of Sentence = CatLav ** open+ ResLav,+ VerbLav+ in { - UseCl t p cl = {s = t.s ++ p.s ++ cl.s ! (Ind t.a t.t) ! p.p} ;- - PredVP np vp =- let- part = vp.v.s ! ResLav.Pos ! (Participle np.g np.n Nom) ;- obj = vp.obj ! (Ag np.g np.n)- in {- s = \\mood,pol =>- case mood of { -- Subject- Deb _ _ => np.s ! Dat ;- _ => np.s ! Nom- } ++- case mood of { -- Verb- Ind Simul tense => vp.v.s ! pol ! (Indicative np.p np.n tense) ;- Ind Anter tense => mkVerb_toBe.s ! pol ! (Indicative np.p np.n tense) ++ part ;+flags+ optimize = all_subs ;+ coding = utf8 ; - Rel _ Past => ResLav.NON_EXISTENT ; -- FIXME (?)- Rel Simul tense => vp.v.s ! pol ! (Relative tense) ;- Rel Anter tense => mkVerb_toBe.s ! pol ! (Relative tense) ++ part ;+lin+ PredVP np vp = mkClause np vp ; - Deb Simul tense => mkVerb_toBe.s ! pol ! (Indicative P3 Sg tense) ++- vp.v.s ! ResLav.Pos ! Debitive ;- Deb Anter tense => mkVerb_toBe.s ! pol ! (Indicative P3 Sg tense) ++- mkVerb_toBe.s ! ResLav.Pos ! (Participle Masc Sg Nom) ++ vp.v.s ! ResLav.Pos ! Debitive ;+ PredSCVP sc vp = mkClauseSC sc vp ; - Condit Simul => vp.v.s ! pol ! (Indicative np.p np.n Cond) ;- Condit Anter => mkVerb_toBe.s ! pol ! (Indicative np.p np.n Cond) ++ part- } ++- obj -- Object- } ;- -{- - PredVP np vp = mkClause (np.s ! Nom) np.a vp ;+ ImpVP vp = { s = \\pol, n => vp.v.s ! pol ! (Imperative n) ++ vp.s2 ! (AgP2 n) } ; - PredSCVP sc vp = mkClause sc.s (agrP3 Sg) vp ;+ SlashVP np vp = mkClause np vp ** { p = vp.p } ; - ImpVP vp = {- s = \\pol,n => - let - agr = AgP2 (numImp n) ;- verb = infVP True vp agr ;- dont = case pol of {- CNeg True => "don't" ;- CNeg False => "do" ++ "not" ;- _ => []- }- in- dont ++ verb- } ;+ AdvSlash slash adv = {+ s = \\m,p => slash.s ! m ! p ++ adv.s ;+ p = slash.p+ } ; - SlashVP np vp = - mkClause (np.s ! Nom) np.a vp ** {c2 = vp.c2} ;+ SlashPrep cl prep = cl ** { p = prep } ; - AdvSlash slash adv = {- s = \\t,a,b,o => slash.s ! t ! a ! b ! o ++ adv.s ;- c2 = slash.c2- } ;+ SlashVS np vs slash =+ mkClause np (lin VP { v = vs ; s2 = \\_ => "," ++ vs.subj.s ++ slash.s }) ** { p = slash.p } ; - SlashPrep cl prep = cl ** {c2 = prep.s} ;+ ComplVS v s = { v = v ; s2 = \\_ => "," ++ v.subj.s ++ s.s } ; - SlashVS np vs slash = - mkClause (np.s ! Nom) np.a - (insertObj (\\_ => conjThat ++ slash.s) (predV vs)) **- {c2 = slash.c2} ;+ -- TODO: nočekot kāpēc te ir tieši 'ka'+ EmbedS s = { s = "ka" ++ s.s } ; - EmbedS s = {s = conjThat ++ s.s} ;- EmbedQS qs = {s = qs.s ! QIndir} ;- EmbedVP vp = {s = infVP False vp (agrP3 Sg)} ; --- agr+ EmbedQS qs = { s = qs.s } ; - UseCl t p cl = {- s = t.s ++ p.s ++ cl.s ! t.t ! t.a ! ctr p.p ! ODir- } ;- UseQCl t p cl = {- s = \\q => t.s ++ p.s ++ cl.s ! t.t ! t.a ! ctr p.p ! q- } ;- UseRCl t p cl = {- s = \\r => t.s ++ p.s ++ cl.s ! t.t ! t.a ! ctr p.p ! r ;- c = cl.c- } ;- UseSlash t p cl = {- s = t.s ++ p.s ++ cl.s ! t.t ! t.a ! ctr p.p ! ODir ;- c2 = cl.c2- } ;+ -- FIXME: neesmu līdz galam drošs vai agreement ir tieši (AgPr Pl)+ EmbedVP vp = { s = build_VP vp Pos Infinitive (AgP3 Pl Masc) } ; - AdvS a s = {s = a.s ++ "," ++ s.s} ;+ UseCl t p cl = { s = t.s ++ p.s ++ cl.s ! (Ind t.a t.t) ! p.p } ;+ UseQCl t p cl = { s = t.s ++ p.s ++ cl.s ! (Ind t.a t.t) ! p.p } ; - SSubjS a s b = {s = a.s ++ s.s ++ b.s} ;+ UseRCl t p cl =+ { s = \\ag => t.s ++ p.s ++ cl.s ! (Ind t.a t.t) ! p.p ! ag }+ | { s = \\ag => t.s ++ p.s ++ cl.s ! (Rel t.a t.t) ! p.p ! ag } --# notpresent+ ; - RelS s r = {s = s.s ++ "," ++ r.s ! agrP3 Sg} ;+ UseSlash t p slash = { s = t.s ++ p.s ++ slash.s ! (Ind t.a t.t) ! p.p ; p = slash.p } ; - oper- ctr = contrNeg True ; -- contracted negations--}-}+ -- FIXME: placeholder+ AdvS a s = { s = NON_EXISTENT } ; +oper+ mkClause : NP -> CatLav.VP -> Cl = \np,vp -> lin Cl {+ s = \\mood,pol =>+ case mood of { -- Subject+ -- FIXME: jāčeko valences, reizēm arī īstenības izteiksmē - 'man patīk kaut kas'+ Deb _ _ => np.s ! Dat ; --# notpresent+ _ => np.s ! Nom+ } +++ buildVerb vp.v mood pol np.a ++ -- Verb+ vp.s2 ! np.a -- Object(s), complements, adverbial modifiers+ } ;++ -- FIXME: quick&dirty - lai kompilētos pret RGL API+ -- Eng: PredSCVP sc vp = mkClause sc.s (agrP3 Sg) vp+ -- Ar SC nav iespējams neko saskaņot (sk. Cat.gf un Common.gf)+ mkClauseSC : SC -> CatLav.VP -> Cl = \sc,vp -> lin Cl {+ s = \\mood,pol => sc.s ++ buildVerb vp.v mood pol (AgP3 Sg Masc) ++ vp.s2 ! (AgP3 Sg Masc)+ } ;++}
@@ -1,15 +1,23 @@-concrete StructuralLav of Structural = CatLav ** - open MorphoLav, ResLav, ParadigmsLav, ParadigmsPronounsLav, MakeStructuralLav, - (C = ConstructX), Prelude in {+--# -path=.:../abstract:../common:../prelude +concrete StructuralLav of Structural = CatLav ** open+ Prelude,+ ResLav,+ ParadigmsLav,+ ParadigmsPronounsLav,+ NounLav+ in {+ flags optimize = all ;- coding = utf8 ; - -lin - + coding = utf8 ;++lin+ language_title_Utt = ss "Latviešu valoda" ;++ -- TODO: kā ar loģikā lietotajiem 'visi', 'katrs' ? every_Det = {- s = (\\g,c => (mkPronoun_Gend "ikviens").s ! g ! Sg ! c) ; -- TODO - kā ar loģikā lietotajiem 'visi', 'katrs' ?+ s = (\\g,c => (mkPronoun_Gend "ikviens").s ! g ! Sg ! c) ; n = Sg ; d = Indef } ;@@ -19,148 +27,427 @@ n = Sg ; d = Indef } ;+ somePl_Det = { s = (\\g,c => (mkPronoun_Gend "kāds").s ! g ! Pl ! c) ; -- lai atļautu arī tukšo, jāliek (\\_,_ => []) | klāt n = Pl ; d = Indef } ; - -{-- above_Prep = mkPrep "above" ;- after_Prep = mkPrep "after" ;- all_Predet = ss "all" ;- almost_AdA = mkAdA "almost" ;- almost_AdN = mkAdN "almost" ;- although_Subj = ss "although" ;- always_AdV = mkAdV "always" ;- and_Conj = mkConj "and" ;- because_Subj = ss "because" ;- before_Prep = mkPrep "before" ;- behind_Prep = mkPrep "behind" ;- between_Prep = mkPrep "between" ;- both7and_DConj = mkConj "both" "and";- but_PConj = ss "but" ;- by8agent_Prep = mkPrep "by" ;- by8means_Prep = mkPrep "by" ;- can8know_VV, can_VV = {- s = table { - VVF VInf => ["be able to"] ;- VVF VPres => "can" ;- VVF VPPart => ["been able to"] ;- VVF VPresPart => ["being able to"] ;- VVF VPast => "could" ; --# notpresent- VVPastNeg => "couldn't" ; --# notpresent- VVPresNeg => "can't"- } ;- isAux = True- } ;- during_Prep = mkPrep "during" ;- either7or_DConj = mkConj "either" "or" singular ;- everybody_NP = regNP "everybody" singular ;- every_Det = mkDeterminer singular "every" ;- everything_NP = regNP "everything" singular ;- everywhere_Adv = mkAdv "everywhere" ;- few_Det = mkDeterminer plural "few" ;---- first_Ord = ss "first" ; DEPRECATED- for_Prep = mkPrep "for" ;- from_Prep = mkPrep "from" ;- he_Pron = mkPron "he" "him" "his" "his" singular P3 masculine ;- here_Adv = mkAdv "here" ;- here7to_Adv = mkAdv ["to here"] ;- here7from_Adv = mkAdv ["from here"] ;- how_IAdv = ss "how" ;- how8much_IAdv = ss "how much" ;- how8many_IDet = mkDeterminer plural ["how many"] ;- if_Subj = ss "if" ;- in8front_Prep = mkPrep ["in front of"] ;- i_Pron = mkPron "I" "me" "my" "mine" singular P1 human ;- in_Prep = mkPrep "in" ;- it_Pron = mkPron "it" "it" "its" "its" singular P3 nonhuman ;- less_CAdv = C.mkCAdv "less" "than" ;- many_Det = mkDeterminer plural "many" ;- more_CAdv = C.mkCAdv "more" "than" ;- most_Predet = ss "most" ;- much_Det = mkDeterminer singular "much" ;- must_VV = {+ few_Det = {+ s = (\\g,c => (mkPronoun_Gend "dažs").s ! g ! Pl ! c) ;+ n = Pl ;+ d = Indef+ } ;++ many_Det = {+ s = (\\g,c => (mkPronoun_Gend "daudzs").s ! g ! Pl ! c) ; -- 'daudzs' izlocīsies korekti uz daudzskaitļa 'daudzi'+ n = Pl ;+ d = Indef+ } ;++ much_Det = {+ s = (\\g,c => "daudz") ; -- FIXME - ņem saistību ar ģenitīvu; kā to realizēt?+ n = Sg ;+ d = Indef+ } ;++ this_Quant = {+ s = (mkPronoun_ThisThat This).s ;+ d = Def+ } ;++ that_Quant = {+ s = (mkPronoun_ThisThat That).s ;+ d = Def+ } ;+++ i_Pron = { s = table {- VVF VInf => ["have to"] ;- VVF VPres => "must" ;- VVF VPPart => ["had to"] ;- VVF VPresPart => ["having to"] ;- VVF VPast => ["had to"] ; --# notpresent- VVPastNeg => ["hadn't to"] ; --# notpresent- VVPresNeg => "mustn't"- } ;- isAux = True- } ;----b no_Phr = ss "no" ;- no_Utt = ss "no" ;- on_Prep = mkPrep "on" ;----- one_Quant = mkDeterminer singular "one" ; -- DEPRECATED- only_Predet = ss "only" ;- or_Conj = mkConj "or" singular ;- otherwise_PConj = ss "otherwise" ;- part_Prep = mkPrep "of" ;- please_Voc = ss "please" ;- possess_Prep = mkPrep "of" ;- quite_Adv = mkAdv "quite" ;- she_Pron = mkPron "she" "her" "her" "hers" singular P3 feminine ;- so_AdA = mkAdA "so" ;- somebody_NP = regNP "somebody" singular ;- someSg_Det = mkDeterminer singular "some" ;- somePl_Det = mkDeterminer plural "some" ;- something_NP = regNP "something" singular ;- somewhere_Adv = mkAdv "somewhere" ;- that_Quant = mkQuant "that" "those" ;- there_Adv = mkAdv "there" ;- there7to_Adv = mkAdv "there" ;- there7from_Adv = mkAdv ["from there"] ;- therefore_PConj = ss "therefore" ;- they_Pron = mkPron "they" "them" "their" "theirs" plural P3 human ;- this_Quant = mkQuant "this" "these" ;- through_Prep = mkPrep "through" ;- too_AdA = mkAdA "too" ;- to_Prep = mkPrep "to" ;- under_Prep = mkPrep "under" ;- very_AdA = mkAdA "very" ;- want_VV = mkVV (regV "want") ;- we_Pron = mkPron "we" "us" "our" "ours" plural P1 human ;- whatPl_IP = mkIP "what" "what" "what's" plural ;- whatSg_IP = mkIP "what" "what" "what's" singular ;- when_IAdv = ss "when" ;- when_Subj = ss "when" ;- where_IAdv = ss "where" ;- which_IQuant = {s = \\_ => "which"} ;----b whichPl_IDet = mkDeterminer plural ["which"] ;----b whichSg_IDet = mkDeterminer singular ["which"] ;- whoPl_IP = mkIP "who" "whom" "whose" plural ;- whoSg_IP = mkIP "who" "whom" "whose" singular ;- why_IAdv = ss "why" ;- without_Prep = mkPrep "without" ;- with_Prep = mkPrep "with" ;----b yes_Phr = ss "yes" ;- yes_Utt = ss "yes" ;- youSg_Pron = mkPron "you" "you" "your" "yours" singular P2 human ;- youPl_Pron = mkPron "you" "you" "your" "yours" plural P2 human ;- youPol_Pron = mkPron "you" "you" "your" "yours" singular P2 human ;+ Nom => "es";+ Gen => "manis";+ Dat => "man";+ Acc => "mani";+ Loc => "manī";+ ResLav.Voc => NON_EXISTENT+ } ;+ possessive = table {+ Masc => table {+ Sg => table {+ Nom => "mans";+ Gen => "mana";+ Dat => "manam";+ Acc => "manu";+ Loc => "manā";+ ResLav.Voc => "mans"+ };+ Pl => table {+ Nom => "mani";+ Gen => "manu";+ Dat => "maniem";+ Acc => "manus";+ Loc => "manos";+ ResLav.Voc => "mani"+ }+ } ;+ Fem => table {+ Sg => table {+ Nom => "mana";+ Gen => "manas";+ Dat => "manai";+ Acc => "manu";+ Loc => "manā";+ ResLav.Voc => "mana"+ };+ Pl => table {+ Nom => "manas";+ Gen => "manu";+ Dat => "manām";+ Acc => "manas";+ Loc => "manās";+ ResLav.Voc => "manas"+ }+ }+ } ;+ a = AgP1 Sg ;+ } ; - not_Predet = {s = "not" ; lock_Predet = <>} ;- no_Quant = mkQuant "no" "no" "none" "none" ;- if_then_Conj = mkConj "if" "then" singular ;- nobody_NP = regNP "nobody" singular ;- nothing_NP = regNP "nothing" singular ;+ we_Pron = {+ s = table {+ Nom => "mēs";+ Gen => "mūsu";+ Dat => "mums";+ Acc => "mūs";+ Loc => "mūsos";+ ResLav.Voc => NON_EXISTENT+ } ;+ possessive = table {+ _ => table {+ _ => table {+ _ => "mūsu"+ }+ }+ } ;+ a = AgP1 Pl ;+ } ; - at_least_AdN = mkAdN "at least" ;- at_most_AdN = mkAdN "at most" ;+ youSg_Pron = {+ s = table {+ Nom => "tu";+ Gen => "tevis";+ Dat => "tev";+ Acc => "tevi";+ Loc => "tevī";+ ResLav.Voc => "tu"+ } ;+ possessive = table {+ Masc => table {+ Sg => table {+ Nom => "tavs";+ Gen => "tava";+ Dat => "tavam";+ Acc => "tavu";+ Loc => "tavā" ;+ ResLav.Voc => "tavs"+ };+ Pl => table {+ Nom => "tavi";+ Gen => "tavu";+ Dat => "taviem";+ Acc => "tavus";+ Loc => "tavos";+ ResLav.Voc => "tavi"+ }+ } ;+ Fem => table {+ Sg => table {+ Nom => "tava";+ Gen => "tavas";+ Dat => "tavai";+ Acc => "tavu";+ Loc => "tavā";+ ResLav.Voc => "tava"+ };+ Pl => table {+ Nom => "tavas";+ Gen => "tavu";+ Dat => "tavām";+ Acc => "tavas";+ Loc => "tavās";+ ResLav.Voc => "tavas"+ }+ }+ } ;+ a = AgP2 Sg ;+ } ; - except_Prep = mkPrep "except" ;+ youPl_Pron = {+ s = table {+ Nom => "jūs";+ Gen => "jūsu";+ Dat => "jums";+ Acc => "jūs";+ Loc => "jūsos";+ ResLav.Voc => "jūs"+ } ;+ possessive = table {+ _ => table {+ _ => table {+ _ => "jūsu"+ }+ }+ } ;+ a = AgP2 Pl ;+ } ; - as_CAdv = C.mkCAdv "as" "as" ;+ youPol_Pron = {+ s = table {+ Nom => "jūs";+ Gen => "jūsu";+ Dat => "jums";+ Acc => "jūs";+ Loc => "jūsos";+ ResLav.Voc => "jūs"+ } ;+ possessive = table {+ _ => table {+ _ => table {+ _ => "jūsu"+ }+ }+ } ;+ a = AgP2 Pl ;+ } ; - have_V2 = dirV2 (mk5V "have" "has" "had" "had" "having") ;- that_Subj = ss "that" ;- lin language_title_Utt = ss "English" ;--}-}+ he_Pron = {+ s = (\\c => (mkPronoun_Gend "viņš").s ! Masc ! Sg ! c) ;+ possessive = table {+ _ => table {+ _ => table {+ _ => "viņa"+ }+ }+ } ;+ a = AgP3 Sg Masc ;+ } ; + she_Pron = {+ s = (\\c => (mkPronoun_Gend "viņš").s ! Fem ! Sg ! c) ;+ possessive = table {+ _ => table {+ _ => table {+ _ => "viņas"+ }+ }+ } ;+ a = AgP3 Sg Fem ;+ } ;++ they_Pron = {+ s = (\\c => (mkPronoun_Gend "viņš").s ! Masc ! Pl ! c) ;+ possessive = table {+ _ => table {+ _ => table {+ _ => "viņu"+ }+ }+ } ;+ a = AgP3 Pl Masc ;+ } |+ {+ s = (\\c => (mkPronoun_Gend "viņš").s ! Fem ! Pl ! c) ;+ possessive = table {+ _ => table {+ _ => table {+ _ => "viņu"+ }+ }+ } ;+ a = AgP3 Pl Fem ;+ } ;++ it_Pron = {+ s = \\c => (mkPronoun_ThisThat That).s ! Masc ! Sg ! c;+ possessive = table { _ => table { _ => table { _ => "tā" }}};+ a = AgP3 Sg Masc+ } | {+ s = \\c => (mkPronoun_ThisThat That).s ! Fem ! Sg ! c;+ possessive = table { _ => table { _ => table { _ => "tās" }}};+ a = AgP3 Sg Fem+ };++ -- manuprāt prievārdi tomēr ir valodas-specifiski un nebūtu tieši 1-pret-1 jātulko+ above_Prep = mkPrep "virs" Gen Dat;+ after_Prep = mkPrep "pēc" Gen Dat;+ before_Prep = mkPrep "pirms" Gen Dat;+ behind_Prep = mkPrep "aiz" Gen Dat;+ between_Prep = mkPrep "starp" Acc Dat;+ for_Prep = mkPrep "priekš" Gen Dat;+ from_Prep = mkPrep "no" Gen Dat;+ on_Prep = mkPrep "uz" Gen Dat;+ with_Prep = mkPrep "ar" Acc Dat; -- ar sievu, ar sievām+ in_Prep = mkPrep Loc ;+ to_Prep = mkPrep "līdz" Dat Dat; --FIXME - ļoti dažādi tulkojas+ possess_Prep = mkPrep Gen ; --FIXME - reku vajadzētu vārdu secību otrādi, ka pirms paskaidrojamā vārda likt+ under_Prep = mkPrep "zem" Gen Dat;+ with_Prep = mkPrep "ar" Acc Dat;+ without_Prep = mkPrep "bez" Gen Dat;+ by8agent_Prep = nom_Prep; --- A was attacked by B -> A-Dat uzbruka B-Nom+ by8means_Prep = mkPrep "ar" Acc Dat;+ during_Prep = mkPrep "laikā" Gen Gen; --FIXME nevaru saprast. laikam postfix 'X laikā' jāliek+ in8front_Prep = mkPrep "priekšā" Dat Dat;+ part_Prep = mkPrep Gen ; --FIXME - reku vajadzētu vārdu secību otrādi, ka pirms paskaidrojamā vārda likt+ through_Prep = mkPrep "cauri" Dat Dat;+ except_Prep = mkPrep "izņemot" Acc Acc;++ very_AdA = mkAdA "ļoti" ;+ almost_AdA = mkAdA "gandrīz" ;+ so_AdA = mkAdA "tik" ;+ too_AdA = mkAdA "pārāk" ;++ and_Conj = mkConj "un" ;+ or_Conj = mkConj "vai" Sg ;+ if_then_Conj = mkConj "ja" "tad";++ but_PConj = ss "bet" ;+ otherwise_PConj = ss "tomēr" ; --?+ therefore_PConj = ss "tātad" ; --?++ more_CAdv = (mkCAdv [] "nekā" Compar) | (mkCAdv "vairāk" "nekā" Posit);+ less_CAdv = mkCAdv "mazāk" "nekā" Posit;+ as_CAdv = mkCAdv "tikpat" "kā" Posit;++ here_Adv = mkAdv "šeit" ;+ there_Adv = mkAdv "tur" ;+ everywhere_Adv = mkAdv "visur" ;+ here7to_Adv = mkAdv ["uz šejieni"] ;+ here7from_Adv = mkAdv ["no šejienes"] ;+ there7to_Adv = mkAdv "uz turieni" ;+ there7from_Adv = mkAdv "no turienes";+ somewhere_Adv = mkAdv "kaut kur" ;+ quite_Adv = mkAdv "diezgan" ;++ both7and_DConj = mkConj "gan" ("," ++ "gan"); --FIXME - komati nav tā kā vajag+ either7or_DConj = mkConj ("vai" ++ "nu") ("," ++ "vai") Sg ; --FIXME - komati nav tā kā vajag++ want_VV = mkVV (mkV "gribēt" third_conjugation) ;++ whoSg_IP = {+ s = table {+ Nom => "kurš"; -- FIXME - Fem?+ Gen => "kura";+ Dat => "kuram";+ Acc => "kuru";+ Loc => "kurā";+ ResLav.Voc => NON_EXISTENT+ };+ n = Sg+ };+ whoPl_IP = {+ s = table {+ Nom => "kuri";+ Gen => "kuru";+ Dat => "kuriem";+ Acc => "kurus";+ Loc => "kuros";+ ResLav.Voc => NON_EXISTENT+ };+ n = Pl+ };+ whatSg_IP = {+ s = table {+ Nom => "kas"; -- FIXME - Fem? standarta locīšana?+ Gen => "kā";+ Dat => "kam";+ Acc => "ko";+ Loc => "kur";+ ResLav.Voc => NON_EXISTENT+ };+ n = Sg+ };+ whatPl_IP = {+ s = table {+ Nom => "kas"; -- FIXME - Fem? standarta locīšana?+ Gen => "kā";+ Dat => "kam";+ Acc => "ko";+ Loc => "kur";+ ResLav.Voc => NON_EXISTENT+ };+ n = Pl+ };++ why_IAdv = ss "kāpēc" ;+ how_IAdv = ss "kā" ;+ how8much_IAdv = ss "cik daudz" ;+ when_IAdv = ss "kad" ;+ where_IAdv = ss "kur" ;++ which_IQuant = {s = table {+ Masc => table { Sg => "kurš"; Pl => "kuri"};+ Fem => table { Sg => "kura"; Pl => "kuras"}+ }+ } ;++ when_Subj = ss "kad" ;+ although_Subj = ss "kaut arī" ;+ because_Subj = ss "jo" ;+ if_Subj = ss "ja" ;+ that_Subj = ss "ka" ; -- ja pareizi saprotu šo konkrēto 'that' pielietojumu++ all_Predet = { s = table {+ Masc => "visi";+ Fem => "visas"+ }+ };+ only_Predet = { s = table { _ => "tikai"} };+ most_Predet = { s = table { _ => "vairums"} };++ yes_Utt = ss "jā" ;+ please_Voc = ss "lūdzu" ;++ almost_AdN = mkAdN "gandrīz" ;+ at_least_AdN = mkAdN "vismaz" ;+ at_most_AdN = mkAdN "ne vairāk kā" ;++ always_AdV = mkAdV "vienmēr" ;+++ how8many_IDet = { s = table { _ => "cik daudz"}; n = Sg }; --TODO jātestē kā to pielieto un vai nevajag vēl kaut ko+++ everybody_NP = DetCN emptyPl_Det (UseN (mkN "visi"));+ everything_NP = DetCN emptySg_Det (UseN (mkN "viss"));+ nobody_NP = DetCN emptySg_Det (UseN (mkN "neviens"));+ nothing_NP = DetCN emptySg_Det (UseN (mkN "nekas"));+ somebody_NP = DetCN emptySg_Det (UseN (mkN "kāds"));+ something_NP = DetCN emptySg_Det (UseN (mkN "kaut kas"));++oper+ reflPron : Case => Str = table {+ Nom => NON_EXISTENT;+ Gen => "sevis";+ Dat => "sev";+ Acc => "sevi";+ Loc => "sevī";+ ResLav.Voc => NON_EXISTENT+ } ;++ lai_Subj = ss "lai" ;+ kameer_Subj = ss "kamēr" ;++ emptyPl_Det = {+ s:Gender => Case => Str = \\_,_ => [];+ n = Pl ;+ d = Indef+ } ;+ emptySg_Det = {+ s:Gender => Case => Str = \\_,_ => [];+ n = Sg ;+ d = Indef+ } ;++ no_Utt = ss "nē" ;++}
@@ -1,44 +1,45 @@---# -path=.:../abstract:../common+--# -path=.:../abstract:../common:../prelude -concrete SymbolLav of Symbol = CatLav ** open Prelude, ResLav in {-{-+concrete SymbolLav of Symbol = CatLav ** open+ Prelude,+ ResLav+ in {++flags+ coding = utf8 ;+ lin- SymbPN i = {s = addGenitiveS i.s ; g = Neutr} ;- IntPN i = {s = addGenitiveS i.s ; g = Neutr} ;- FloatPN i = {s = addGenitiveS i.s ; g = Neutr} ;- NumPN i = {s = i.s ; g = Neutr} ;+ SymbPN i = {s = \\_ => i.s ; g = Masc ; n = Sg} ;+ IntPN i = {s = \\_ => i.s ; g = Masc ; n = Pl} ;+ FloatPN i = {s = \\_ => i.s ; g = Masc ; n = Pl} ;+ NumPN i = {s = \\_ => i.s ! Masc ! Nom ; g = Masc ; n = Pl} ;+ CNIntNP cn i = {- s = \\c => cn.s ! Sg ! Nom ++ (addGenitiveS i.s) ! c ;+ s = \\_ => cn.s ! Indef ! Sg ! Nom ++ i.s ; a = agrgP3 Sg cn.g } ; CNSymbNP det cn xs = {- s = \\c => det.s ++ cn.s ! det.n ! Nom ++ (addGenitiveS xs.s) ! c ; + s = \\_ => det.s ! cn.g ! Nom ++ cn.s ! det.d ! det.n ! Nom ++ xs.s ; a = agrgP3 det.n cn.g } ; CNNumNP cn i = {- s = \\c => cn.s ! Sg ! Nom ++ i.s ! c ;+ s = \\_ => cn.s ! Indef ! Sg ! Nom ++ i.s ! Masc ! Nom ; a = agrgP3 Sg cn.g } ; - SymbS sy = sy ; + SymbS sy = sy ; - SymbNum sy = { s = addGenitiveS sy.s ; n = Pl ; hasCard = True } ;- SymbOrd sy = { s = \\c => sy.s ++ (regGenitiveS "th")!c} ;+ SymbNum sy = { s = \\_,_ => sy.s ; n = Pl } ;+ SymbOrd sy = { s = \\_,_ => sy.s ++ "."} ; -lincat +lincat Symb, [Symb] = SS ; lin MkSymb s = s ; - BaseSymb = infixSS "and" ;+ BaseSymb = infixSS "un" ; ConsSymb = infixSS "," ; -oper- -- Note: this results in a space before 's, but there's- -- not mauch we can do about that.- addGenitiveS : Str -> Case => Str = \s -> - table { Gen => s ++ "'s"; _ => s } ;--} }
@@ -1,52 +1,111 @@-concrete VerbLav of Verb = CatLav ** open ResLav in {- flags optimize=all_subs ;+--# -path=.:../abstract:../common:../prelude - lin- - UseV v = {v = v ; obj = \\_ => []} ;-{-- UseV = predV ;+-- FIXME: module relations. VerbLav is included in many places because of buildVerb,+-- and includes ParadigmsVerbsLav because of mkVerb_toBe -+-- they need to be reallocated somehow to ResLav or something similar.+-- Not so simple since morphology itself needs ResLav & friends. - SlashV2a v = predVc v ;- Slash2V3 v np = - insertObjc (\\_ => v.c2 ++ np.s ! Acc) (predV v ** {c2 = v.c3}) ;- Slash3V3 v np = - insertObjc (\\_ => v.c3 ++ np.s ! Acc) (predVc v) ; ----+concrete VerbLav of Verb = CatLav ** open+ ParamX,+ ResLav,+ ParadigmsVerbsLav,+ StructuralLav+ in { - ComplVV v vp = insertObj (\\a => infVP v.isAux vp a) (predVV v) ;- ComplVS v s = insertObj (\\_ => conjThat ++ s.s) (predV v) ;- ComplVQ v q = insertObj (\\_ => q.s ! QIndir) (predV v) ;- ComplVA v ap = insertObj (ap.s) (predV v) ;+flags+ optimize = all_subs ;+ coding = utf8 ; - SlashV2V v vp = insertObjc (\\a => infVP v.isAux vp a) (predVc v) ;- SlashV2S v s = insertObjc (\\_ => conjThat ++ s.s) (predVc v) ;- SlashV2Q v q = insertObjc (\\_ => q.s ! QIndir) (predVc v) ;- SlashV2A v ap = insertObjc (\\a => ap.s ! a) (predVc v) ; ----+lin+ -- TODO: rewrite šo uz valencēm, lai ir semantiskās saites+ UseV v = { v = v ; s2 = \\_ => [] } ; - ComplSlash vp np = insertObjPre (\\_ => vp.c2 ++ np.s ! Acc) vp ;+ ComplVV v vp = { v = v ; s2 = \\agr => build_VP vp Pos Infinitive agr } ;+ ComplVS v s = { v = v ; s2 = \\_ => "," ++ v.subj.s ++ s.s } ;+ ComplVQ v q = { v = v ; s2 = \\_ => "," ++ q.s } ;+ ComplVA v ap = { v = v ; s2 = \\agr => ap.s ! Indef ! (fromAgr agr).g ! (fromAgr agr).n ! Nom } ; - SlashVV vv vp = - insertObj (\\a => infVP vv.isAux vp a) (predVV vv) **- {c2 = vp.c2} ;- SlashV2VNP vv np vp = - insertObjPre (\\_ => vv.c2 ++ np.s ! Acc)- (insertObjc (\\a => infVP vv.isAux vp a) (predVc vv)) **- {c2 = vp.c2} ;+ SlashV2a v = { v = v ; s2 = \\_ => [] ; p = v.p } ; - UseComp comp = insertObj comp.s (predAux auxBe) ;+ Slash2V3 v np =+ insertObjc (\\_ => v.p1.s ++ np.s ! (v.p1.c ! (fromAgr np.a).n))+ { v = v ; s2 = \\_ => [] ; p = v.p2 } ; - AdvVP vp adv = insertObj (\\_ => adv.s) vp ;+ Slash3V3 v np =+ insertObjc (\\_ => v.p2.s ++ np.s ! (v.p2.c ! (fromAgr np.a).n))+ { v = v ; s2 = \\_ => [] ; p = v.p1 } ; - AdVVP adv vp = insertAdV adv.s vp ;+ SlashV2V v vp = { v = v ; s2 = \\agr => build_VP vp Pos Infinitive agr ; p = v.p } ;+ SlashV2S v s = { v = v ; s2 = \\_ => "," ++ v.subj.s ++ s.s ; p = v.p } ;+ SlashV2Q v q = { v = v ; s2 = \\_ => "," ++ q.s ; p = v.p } ;+ SlashV2A v ap = { v = v ; s2 = \\agr => ap.s ! Indef ! (fromAgr agr).g ! (fromAgr agr).n ! Nom ; p = v.p } ; - ReflVP v = insertObjPre (\\a => v.c2 ++ reflPron ! a) v ;+ ComplSlash vp np = insertObjPre (\\_ => vp.p.s ++ np.s ! (vp.p.c ! (fromAgr np.a).n)) vp ; - PassV2 v = insertObj (\\_ => v.s ! VPPart) (predAux auxBe) ;+ CompAP ap = { s = \\agr => ap.s ! Indef ! (fromAgr agr).g ! (fromAgr agr).n ! Nom } ;+ CompNP np = { s = \\_ => np.s ! Nom } ;+ CompAdv a = { s = \\_ => a.s } ;+ CompCN cn = { s = \\agr => cn.s ! Indef ! (fromAgr agr).n ! Nom } ; ----b UseVS, UseVQ = \vv -> {s = vv.s ; c2 = [] ; isRefl = vv.isRefl} ; -- no "to"+ ReflVP vp = insertObjPre (\\a => vp.p.s ++ reflPron ! (vp.p.c ! (fromAgr a).n)) vp ; - CompAP ap = ap ;- CompNP np = {s = \\_ => np.s ! Acc} ;- CompAdv a = {s = \\_ => a.s} ;--}+ UseComp comp = { v = lin V mkVerb_toBe ; s2 = \\agr => comp.s ! agr } ;++ AdvVP vp adv = insertObj (\\_ => adv.s) vp ;+ AdVVP adv vp = insertObjPre (\\_ => adv.s) vp ;++oper+ build_VP : ResLav.VP -> Polarity -> VerbForm -> Agr -> Str = \vp,p,vf,agr ->+ vp.v.s ! p ! vf ++ vp.s2 ! agr ;++ insertObj : (Agr => Str) -> { v : Verb ; s2 : Agr => Str } -> { v : Verb ; s2 : Agr => Str } =+ \obj,vp -> {+ v = vp.v ;+ s2 = \\a => vp.s2 ! a ++ obj ! a+ } ;++ insertObjPre : (Agr => Str) -> { v : Verb ; s2 : Agr => Str } -> { v : Verb ; s2 : Agr => Str } =+ \obj,vp -> {+ v = vp.v ;+ s2 = \\a => obj ! a ++ vp.s2 ! a+ } ;++ insertObjc : (Agr => Str) -> { v : Verb ; s2 : Agr => Str ; p : Prep } -> { v : Verb ; s2 : Agr => Str ; p : Prep } =+ \obj,vp -> insertObj obj vp ** { p = vp.p } ;++ buildVerb : Verb -> VerbMood -> Polarity -> Agr -> Str = \v,mood,pol,ag ->+ let+ ag = fromAgr ag+ ; --# notpresent+ part = v.s ! ResLav.Pos ! (Participle ag.g ag.n Nom) --# notpresent+ in case mood of {+ Ind Simul tense => v.s ! pol ! (Indicative ag.p ag.n tense)+ ; --# notpresent+ Ind Anter tense => mkVerb_toBe.s ! pol ! (Indicative ag.p ag.n tense) ++ part ; --# notpresent++ -- FIXME(?): Rel _ Past => ...+ Rel _ Past => ResLav.NON_EXISTENT ; --# notpresent+ Rel Simul tense => v.s ! pol ! (Relative tense) ; --# notpresent+ Rel Anter tense => mkVerb_toBe.s ! pol ! (Relative tense) ++ part ; --# notpresent++ Deb Simul tense => mkVerb_toBe.s ! pol ! (Indicative P3 Sg tense) ++ --# notpresent+ v.s ! ResLav.Pos ! Debitive ; --# notpresent+ Deb Anter tense => mkVerb_toBe.s ! pol ! (Indicative P3 Sg tense) ++ --# notpresent+ mkVerb_toBe.s ! ResLav.Pos ! (Participle Masc Sg Nom) ++ --# notpresent+ v.s ! ResLav.Pos ! Debitive ; --# notpresent++ Condit Simul => v.s ! pol ! (Indicative ag.p ag.n ParamX.Cond) ; --# notpresent+ Condit Anter => mkVerb_toBe.s ! pol ! (Indicative ag.p ag.n ParamX.Cond) ++ part --# notpresent+ } ;++-- TODO: nav testēts+lin+ SlashVV vv vp = { v = vv ; s2 = \\agr => build_VP vp Pos Infinitive agr ; p = vp.p } ;+ SlashV2VNP vv np vp =+ insertObjc (\\_ => vv.p.s ++ np.s ! (vv.p.c ! (fromAgr np.a).n))+ { v = vv ; s2 = \\agr => build_VP vp Pos Infinitive agr ; p = vp.p } ;++ -- FIXME: placeholder+ PassV2 v = { v = v ; s2 = \\_ => NON_EXISTENT } ;+ }
@@ -0,0 +1,11 @@+-- AdjectiveMlt.gf: adjectives+--+-- Maltese Resource Grammar Library+-- John J. Camilleri, 2012+-- Licensed under LGPL++concrete AdjectiveMlt of Adjective = CatMlt ** open ResMlt, Prelude in {++-- AP++}
@@ -0,0 +1,12 @@+-- AdverbMlt.gf: adverbial phrases+--+-- Maltese Resource Grammar Library+-- John J. Camilleri, 2012+-- Licensed under LGPL++concrete AdverbMlt of Adverb = CatMlt ** open ResMlt, Prelude in {++-- AdN+-- Adv++}
@@ -0,0 +1,19 @@+-- AllMlt.gf: common grammar plus language-dependent extensions+--+-- Maltese Resource Grammar Library+-- John J. Camilleri, 2012+-- Licensed under LGPL++--# -path=.:prelude:../abstract:../common++concrete AllMlt of AllMltAbs =+ LangMlt,+ IrregMlt,+ ExtraMlt+ ** {} ;++{-+ IrregMlt-[+ blow_V,burn_V,come_V,dig_V,fall_V,fly_V,freeze_V,go_V,lie_V,run_V,+ sew_V,sing_V,sit_V,sleep_V,spit_V,stand_V,swell_V,swim_V,think_V],+-}
@@ -0,0 +1,19 @@+-- AllMlt.gf: common grammar plus language-dependent extensions+--+-- Maltese Resource Grammar Library+-- John J. Camilleri, 2012+-- Licensed under LGPL++--# -path=.:prelude:../abstract:../common++abstract AllMltAbs =+ Lang,+ IrregMltAbs,+ ExtraMltAbs+ ** {} ;++{-+ IrregMltAbs-[+ blow_V,burn_V,come_V,dig_V,fall_V,fly_V,freeze_V,go_V,lie_V,run_V,+ sew_V,sing_V,sit_V,sleep_V,spit_V,stand_V,swell_V,swim_V,think_V],+-}
@@ -0,0 +1,66 @@+-- CatMlt.gf: the common type system+--+-- Maltese Resource Grammar Library+-- John J. Camilleri, 2012+-- Licensed under LGPL++--concrete CatMlt of Cat = CommonX ** open ResMlt, Prelude, ParamX in {+concrete CatMlt of Cat = CommonX ** open ResMlt, Prelude in {++ flags optimize=all_subs ;+++ lincat+-- S = {s : Str} ;+-- Cl = {s : ResMlt.Tense => Bool => Str} ;+-- NP = ResMlt.NP ; -- {s : Case => {clit,obj : Str ; isClit : Bool} ; a : Agr} ;+-- VP = ResMlt.VP ; -- {v : Verb ; clit : Str ; clitAgr : ClitAgr ; obj : Agr => Str} ;+-- AP = {s : Gender => Number => Str ; isPre : Bool} ;+-- CN = ResMlt.Noun ; -- {s : Number => Str ; g : Gender} ;+-- Det = {s : Gender => Case => Str ; n : Number} ;+ N = ResMlt.Noun ;+ N2 = ResMlt.Noun ;+ N3 = ResMlt.Noun ;+ A = ResMlt.Adj ;+ V = ResMlt.Verb ;+-- V2 = ResMlt.Verb ** {c : Case} ;+-- AdA = {s : Str} ;+-- Pol = {s : Str ; b : Bool} ;+-- Tense = {s : Str ; t : ResMlt.Tense} ;+-- Conj = {s : Str ; n : Number} ;+++ -- Cardinal or ordinal in WORDS (not digits)+ Numeral = {+ s : CardOrd => Num_Case => Str ;+ n : Num_Number+ } ;++ -- Cardinal or ordinal in DIGITS (not words)+ Digits = {+ s : Str ; -- No need for CardOrd, i.e. no 1st, 2nd etc in Maltese+ n : Num_Number ;+ tail : DTail+ };++{-+-- These below are just examples, I believe they came form Italian.+ S = {s : Str} ;+ Cl = {s : ResMlt.Tense => Bool => Str} ;+ NP = {s : Case => {clit,obj : Str ; isClit : Bool} ; a : Agr} ;+ VP = {v : Verb ; clit : Str ; clitAgr : ClitAgr ; obj : Agr => Str} ;+ AP = {s : Gender => Number => Str ; isPre : Bool} ;+ CN = {s : Number => Str ; g : Gender} ;+ Det = {s : Gender => Case => Str ; n : Number} ;+ N = {s : Number => Str ; g : Gender} ;+ N2 = {s : Number => Str ; g : Gender} ;+ A = {s : Number => Str ; isPre : Bool} ;+ V = ResMlt.Verb ;+ V2 = ResMlt.Verb ** {c : Case} ;+ AdA = {s : Str} ;+ Pol = {s : Str ; b : Bool} ;+ Tense = {s : Str ; t : ResMlt.Tense} ;+ Conj = {s : Str ; n : Number} ;+-}++}
@@ -0,0 +1,15 @@+-- ConjunctionMlt.gf: co-ordination+--+-- Maltese Resource Grammar Library+-- John J. Camilleri, 2012+-- Licensed under LGPL++concrete ConjunctionMlt of Conjunction = CatMlt ** open ResMlt, Coordination, Prelude in {++-- Adv+-- AP+-- NP+-- RS+-- S++}
@@ -0,0 +1,17 @@+-- ExtraMlt.gf: extra stuff+--+-- Maltese Resource Grammar Library+-- John J. Camilleri, 2012+-- Licensed under LGPL++concrete ExtraMlt of ExtraMltAbs = CatMlt **+ open ResMlt, ParadigmsMlt in {++ flags coding=utf8 ;+++-- lin+-- thigh_N = mkNounDual "koxxa" ;+-- sailor_N = mkNoun "baħri" ;++}
@@ -0,0 +1,13 @@+-- ExtraMltAbs.gf: abstract grammar for extra stuff+--+-- Maltese Resource Grammar Library+-- John J. Camilleri, 2012+-- Licensed under LGPL++abstract ExtraMltAbs = Cat ** {++-- fun+-- thigh_N : N ;+-- sailor_N : N ;++}
@@ -0,0 +1,27 @@+-- GrammarMlt.gf: common syntax+--+-- Maltese Resource Grammar Library+-- John J. Camilleri, 2012+-- Licensed under LGPL++--# -path=.:../abstract:../common:../prelude++concrete GrammarMlt of Grammar =+ NounMlt,+ VerbMlt,+ AdjectiveMlt,+ AdverbMlt,+ NumeralMlt,+ SentenceMlt,+ QuestionMlt,+ RelativeMlt,+ ConjunctionMlt,+ PhraseMlt,+ TextX - [Utt],+ StructuralMlt,+ IdiomMlt+ ** {++ flags coding=utf8 ;++}
@@ -0,0 +1,14 @@+-- IdiomMlt.gf: idiomatic expressions+--+-- Maltese Resource Grammar Library+-- John J. Camilleri, 2012+-- Licensed under LGPL++concrete IdiomMlt of Idiom = CatMlt ** open Prelude, ResMlt in {++-- Cl+-- QCl+-- VP+-- Utt++}
@@ -0,0 +1,13 @@+-- IrregMlt.gf: irregularly inflected words (mostly verbs)+--+-- Maltese Resource Grammar Library+-- John J. Camilleri, 2012+-- Licensed under LGPL++--# -path=.:prelude:../abstract:../common++concrete IrregMlt of IrregMltAbs = CatMlt ** open ParadigmsMlt in {++++}
@@ -0,0 +1,19 @@+-- IrregMltAbs.gf: abstract grammar for irregularly inflected words (mostly verbs)+--+-- Maltese Resource Grammar Library+-- John J. Camilleri, 2012+-- Licensed under LGPL++--# -path=.:prelude:../abstract:../common++abstract IrregMltAbs = Cat ** {++{-+fun++ awake_V : V ;+ bear_V : V ;+ beat_V : V ;+-}++}
@@ -0,0 +1,16 @@+-- LangMlt.gf: common syntax and lexicon+--+-- Maltese Resource Grammar Library+-- John J. Camilleri, 2012+-- Licensed under LGPL++--# -path=.:../abstract:../common:../prelude++concrete LangMlt of Lang =+ GrammarMlt,+ LexiconMlt+ ** {++ flags startcat = Phr ; unlexer = text ; lexer = text ; coding = utf8 ;++}
@@ -0,0 +1,396 @@+-- LexiconMlt.gf: test lexicon of 300 content words+--+-- Maltese Resource Grammar Library+-- John J. Camilleri, 2012+-- Licensed under LGPL++--# -path=.:../abstract:../common:../prelude++concrete LexiconMlt of Lexicon = CatMlt **+ --open ParadigmsMlt, ResMlt, Prelude in {+ open ParadigmsMlt, IrregMlt, ResMlt in {++ flags optimize=values ; coding=utf8 ;++ lin++ {- ===== My Verbs ===== -}++ {-+ cut_V2 = mkVerb "qata'" "aqta'" "aqtgħu" ;+ write_V2 = mkVerb "kiteb" ;+ break_V2 = mkVerb "kiser" ;+ find_V2 = mkVerb "sab" ;+ throw_V2 = mkVerb "tefa'" ;+ hear_V2 = mkVerb "sama'" "isma'" "isimgħu" ;+ fear_V2 = mkVerb "beża'" ;+ pray_V = mkVerb "talab" "itlob" "itolbu" ;+ understand_V2 = mkVerb "fehem" ;+ pull_V2 = mkVerb "ġibed" ;+ walk_V = mkVerb "mexa'" ;+ -}+ -- die_V = mkVerb "miet" ;+ die_V = mkVerb "qarmeċ" ;+++ {- ===== My Nouns ===== -}++ --airplane_N = mkNoun "ajruplan" Masc ;+ airplane_N = mkNoun "ajruplan" ;+ --apple_N = mkNoun "tuffieħa" Fem ;+ apple_N = mkNounColl "tuffieħ" ;++ bench_N = mkNoun "bank" "bankijiet" ;++++ {- ===== Required by RGL ===== -}+++-- add_V3+-- alas_Interj+-- already_Adv+ animal_N = mkNoun "annimal" ;+-- answer_V2S+ apartment_N = mkNoun "appartament" ;+ art_N = mkNounNoPlural "arti" Fem ;+-- ashes_N = mkNoun "rmied" ;+-- ask_V2Q+ baby_N = mkNoun "tarbija" "trabi" ;+ back_N = mkNoun "dahar" "dhur" ;+-- bad_A+ bank_N = mkNoun "bank" "bankijiet" ; -- BANEK is for lotto booths!+ bark_N = mkNoun "qoxra" "qoxriet" ;+-- beautiful_A+-- become_VA+ beer_N = mkNoun "birra" "birer" ;+-- beg_V2V+ belly_N = mkNoun "żaqq" "żquq" ;+-- big_A+ bike_N = mkNoun "rota" ;+ bird_N = mkNoun "għasfur" "għasafar" ; -- what about GĦASFURA?+-- bite_V2+-- black_A+ blood_N = mkNoun [] "demm" [] "dmija" [] ;+-- blow_V+-- blue_A+ boat_N = mkNoun "dgħajsa" "dgħajjes" ;+ bone_N = mkNounColl "għadam" ;+ book_N = mkNoun "ktieb" "kotba" ;+ boot_N = mkNoun "żarbun" "żraben" ; -- what about ŻARBUNA?+ boss_N = mkNoun "mgħallem" "mgħallmin" ;+ boy_N = mkNoun "tifel" "tfal" ;+ bread_N = mkNounColl "ħobż" ;+-- break_V2+ breast_N = mkNoun "sider" "sdur" ; -- also ISDRA+-- breathe_V+-- broad_A+ brother_N2 = mkNoun "ħu" "aħwa" ;+-- brown_A+-- burn_V+ butter_N = mkNoun [] "butir" [] "butirijiet" [] ;+-- buy_V2+ camera_N = mkNoun "kamera" "kameras" ;+ cap_N = mkNoun "beritta" ;+ car_N = mkNoun "karozza" ;+ carpet_N = mkNoun "tapit" ; -- TAPITI or TWAPET ?+ cat_N = mkNoun "qattus" "qtates" ; -- what about QATTUSA ?+ ceiling_N = mkNoun "saqaf" "soqfa";+ chair_N = mkNoun "siġġu" "siġġijiet" ;+ cheese_N = mkNounColl "ġobon" ;+-- child_N = mkNoun "tfajjel" ; -- Not an easy one...+ church_N = mkNoun "knisja" "knejjes" ;+ city_N = mkNoun "belt" "bliet" Fem ;+-- clean_A+-- clever_A+-- close_V2+ cloud_N = mkNounColl "sħab" ;+ coat_N = mkNoun "kowt" "kowtijiet" ;+-- cold_A+-- come_V+ computer_N = mkNoun "kompjuter" "kompjuters" ;+-- correct_A+-- count_V2+ country_N = mkNoun "pajjiż" ;+ cousin_N = mkNoun "kuġin" ;+ cow_N = mkNoun "baqra" "baqar" "baqartejn" [] [] ;+-- cut_V2+ day_N = mkNoun "ġurnata" "ġranet" ;+-- dig_V+-- dirty_A+ distance_N3 = mkNoun "distanza" ;+-- do_V2+ doctor_N = mkNoun "tabib" "tobba" ; -- what about TABIBA ?+ dog_N = mkNoun "kelb" "klieb" ;+ door_N = mkNoun "bieb" "bibien" ; -- what about BIEBA ?+-- drink_V2+-- dry_A+-- dull_A+ dust_N = mkNounColl "trab" ; -- not sure but sounds right+ ear_N = mkNounDual "widna" ;+ earth_N = mkNoun "art" "artijiet" Fem ;+-- easy_A2V+-- eat_V2+ egg_N = mkNounColl "bajd" ;+-- empty_A+ enemy_N = mkNoun "għadu" "għedewwa" ;+ eye_N = mkNounWorst "għajn" [] "għajnejn" "għajnejn" "għejun" Fem ;+ factory_N = mkNoun "fabbrika" ;+-- fall_V+-- far_Adv+ fat_N = mkNounColl "xaħam" ;+ father_N2 = mkNoun "missier" "missierijiet" ;+-- fear_V2+-- fear_VS+ feather_N = mkNounColl "rix" ;+-- fight_V2+-- find_V2+ fingernail_N = mkNoun "difer" [] "difrejn" "dwiefer" [] ;+ fire_N = mkNoun "nar" "nirien" ;+ fish_N = mkNounColl "ħut" ;+-- float_V+ earth_N = mkNoun "art" "artijiet" Fem ;+-- flow_V+ flower_N = mkNoun "fjura" ;+-- fly_V+ fog_N = mkNoun [] "ċpar" [] [] [] ;+ foot_N = mkNounWorst "sieq" [] "saqajn" "saqajn" [] Fem ;+ forest_N = mkNoun "foresta" ; -- also MASĠAR+-- forget_V2+-- freeze_V+ fridge_N = mkNoun "friġġ" "friġġijiet" ;+ friend_N = mkNoun "ħabib" "ħbieb" ;+ fruit_N = mkNounColl "frott" ;+-- full_A+-- fun_AV+ garden_N = mkNoun "ġnien" "ġonna" ;+ girl_N = mkNoun "tifla" "tfal" ;+-- give_V3+ glove_N = mkNoun "ingwanta" ;+-- go_V+ gold_N = mkNoun [] "deheb" [] "dehbijiet" [] ;+-- good_A+ grammar_N = mkNoun "grammatika" ;+ grass_N = mkNounWorst "ħaxixa" "ħaxix" [] [] "ħxejjex" Masc ; -- Dict says ĦAXIX = n.koll.m.s., f. -a, pl.ind. ĦXEJJEX+-- green_A+ guts_N = mkNoun "musrana" [] [] "musraniet" "msaren" ;+ hair_N = mkNoun "xagħar" [] [] "xagħariet" "xgħur" ;+ hand_N = mkNounWorst "id" [] "idejn" "idejn" [] Fem ;+ harbour_N = mkNoun "port" "portijiet" ;+ hat_N = mkNoun "kappell" "kpiepel" ;+-- hate_V2+ head_N = mkNoun "ras" "rjus" Fem ;+-- hear_V2+ heart_N = mkNoun "qalb" "qlub" Fem ;+-- heavy_A+ hill_N = mkNoun "għolja" "għoljiet" ;+-- hit_V2+-- hold_V2+-- hope_VS+ horn_N = mkNoun "ħorn" "ħornijiet" ;+ horse_N = mkNoun "żiemel" "żwiemel" ;+-- hot_A+ house_N = mkNoun "dar" "djar" Fem ;+-- hunt_V2+ husband_N = mkNoun "raġel" "rġiel" ;+ ice_N = mkNoun "silġ" "silġiet" ;+-- important_A+ industry_N = mkNoun "industrija" ;+ iron_N = mkNounWorst "ħadida" "ħadid" [] "ħadidiet" "ħdejjed" Masc ;+-- john_PN+-- jump_V+-- kill_V2+ king_N = mkNoun "re" "rejjiet" ;+ knee_N = mkNoun "rkoppa" [] "rkopptejn" "rkoppiet" [] ; -- TODO use mkNounDual+-- know_V2+-- know_VQ+-- know_VS+ lake_N = mkNoun "għadira" "għadajjar" ;+ lamp_N = mkNoun "lampa" ;+ language_N = mkNoun "lingwa" ; -- lsien?+-- laugh_V+ leaf_N = mkNoun "werqa" "weraq" "werqtejn" "werqiet" [] ;+-- learn_V2+ leather_N = mkNoun "ġilda" "ġild" [] "ġildiet" "ġlud" ; -- mkNounColl "ġild" ;+-- leave_V2+-- left_Ord+ leg_N = mkNoun "riġel" [] "riġlejn" [] [] ; -- sieq?+-- lie_V+-- like_V2+-- listen_V2+-- live_V+ liver_N = mkNoun "fwied" [] [] [] "ifdwa" ;+-- long_A+-- lose_V2+ louse_N = mkNoun "qamla" "qamliet" ;+ love_N = mkNoun "mħabba" "mħabbiet" ; -- hmmm+-- love_V2+ man_N = mkNoun "raġel" "rġiel" ;+-- married_A2+ meat_N = mkNoun "laħam" [] [] "laħmiet" "laħmijiet" ;+ milk_N = mkNoun [] "ħalib" [] "ħalibijiet" "ħlejjeb" ;+ moon_N = mkNoun "qamar" "oqmra" ; -- qmura?+ mother_N2 = mkNoun "omm" "ommijiet" Fem ;+ mountain_N = mkNoun "muntanja" ;+ mouth_N = mkNoun "ħalq" "ħluq" ;+ music_N = mkNoun "musika" ; -- plural?+ name_N = mkNoun "isem" "ismijiet" ;+-- narrow_A+-- near_A+ neck_N = mkNoun "għonq" "għenuq" ;+-- new_A+ newspaper_N = mkNoun "gazzetta" ;+ night_N = mkNoun "lejl" "ljieli" ;+ nose_N = mkNoun "mnieħer" "mniħrijiet" ;+-- now_Adv+ number_N = mkNoun "numru" ;+ oil_N = mkNoun "żejt" "żjut" ;+-- old_A+-- open_V2+-- paint_V2A+ paper_N = mkNoun "karta" ;+-- paris_PN+ peace_N = mkNoun "paċi" "paċijiet" Fem ;+ pen_N = mkNoun "pinna" "pinen" ;+ person_N = mkNounWorst [] "persuna" [] "persuni" [] Masc ;+ planet_N = mkNoun "pjaneta" ;+ plastic_N = mkNounNoPlural "plastik" ;+-- play_V+-- play_V2+ policeman_N = mkNounNoPlural "pulizija" ;+ priest_N = mkNoun "qassis" "qassisin" ;+-- probable_AS+-- pull_V2+-- push_V2+-- put_V2+ queen_N = mkNoun "reġina" "rġejjen" ;+ question_N = mkNoun "mistoqsija" "mistoqsijiet" ; -- domanda?+ radio_N = mkNoun "radju" "radjijiet" ;+ rain_N = mkNounNoPlural "xita" ;+-- rain_V0+-- read_V2+-- ready_A+ reason_N = mkNoun "raġun" "raġunijiet" ;+-- red_A+ religion_N = mkNoun "reliġjon" "reliġjonijiet" ;+ restaurant_N = mkNoun "restorant" ;+-- right_Ord+ river_N = mkNoun "xmara" "xmajjar" ;+ road_N = mkNounWorst "triq" [] [] "triqat" "toroq" Fem ;+ rock_N = mkNoun "blata" "blat" [] "blatiet" "blajjiet" ; -- in dictionary BLAT and BLATA are separate!+ roof_N = mkNoun "saqaf" "soqfa" ;+ root_N = mkNoun "qħerq" "qħeruq" ;+ rope_N = mkNoun "ħabel" "ħbula" ;+-- rotten_A+-- round_A+-- rub_V2+ rubber_N = mkNoun "gomma" "gomom" ;+ rule_N = mkNoun "regola" ;+-- run_V+ salt_N = mkNoun "melħ" "melħiet" ;+ sand_N = mkNoun "ramla" "ramel" [] "ramliet" "rmiel" ;+-- say_VS+ school_N = mkNoun "skola" "skejjel" ;+ science_N = mkNoun "xjenza" ;+-- scratch_V2+ sea_N = mkNoun "baħar" [] "baħrejn" "ibħra" [] ;+-- see_V2+ seed_N = mkNoun "żerriegħa" "żerrigħat" ;+-- seek_V2+-- sell_V3+-- send_V3+-- sew_V+-- sharp_A+ sheep_N = mkNoun "nagħġa" "nagħaġ" [] "nagħġiet" [] ;+ ship_N = mkNoun "vapur" ;+ shirt_N = mkNoun "qmis" "qomos" Fem ;+ shoe_N = mkNoun "żarbun" "żraben" ;+ shop_N = mkNoun "ħanut" "ħwienet" ;+-- short_A+ silver_N = mkNoun "fidda" "fided" ;+-- sing_V+ sister_N = mkNoun "oħt" "aħwa" Fem ;+-- sit_V+ skin_N = mkNoun "ġilda" "ġildiet" ;+ sky_N = mkNoun "sema" "smewwiet" Masc ;+-- sleep_V+-- small_A+-- smell_V+ smoke_N = mkNoun "duħħan" "dħaħen" ;+-- smooth_A+ snake_N = mkNoun "serp" "sriep" ;+ snow_N = mkNoun [] "borra" [] [] [] ;+ sock_N = mkNoun "kalzetta" ;+ song_N = mkNoun "kanzunetta" ;+-- speak_V2+-- spit_V+-- split_V2+-- squeeze_V2+-- stab_V2+-- stand_V+ star_N = mkNoun "stilla" "stilel" ;+ steel_N = mkNounNoPlural "azzar" ;+ stick_N = mkNoun "lasta" ;+ stone_N = mkNoun "ġebla" "ġebel" [] "ġebliet" "ġbiel" ;+-- stop_V+ stove_N = mkNoun "kuker" "kukers" ; -- fuklar?+-- straight_A+ student_N = mkNoun "student" ;+-- stupid_A+-- suck_V2+ sun_N = mkNoun "xemx" "xmux" Fem ;+-- swell_V+-- swim_V+-- switch8off_V2+-- switch8on_V2+ table_N = mkNoun "mejda" "mwejjed" ;+ tail_N = mkNoun "denb" "dnieb" ;+-- talk_V3+-- teach_V2+ teacher_N = mkNoun "għalliem" "għalliema" ; -- għalliema ?+ television_N = mkNoun "televixin" "televixins" ;+-- thick_A+-- thin_A+-- think_V+-- throw_V2+-- tie_V2+-- today_Adv+ tongue_N = mkNoun "lsien" "ilsna" ;+ tooth_N = mkNoun "sinna" [] [] "sinniet" "snien" ; -- darsa?+ train_N = mkNoun "ferrovija" ;+-- travel_V+ tree_N = mkNoun "siġra" "siġar" [] "siġriet" [] ;+-- turn_V+-- ugly_A+-- uncertain_A+-- understand_V2+ university_N = mkNoun "università" "universitàjiet" ;+ village_N = mkNoun "raħal" "rħula" ; -- villaġġ ?+-- vomit_V+-- wait_V2+-- walk_V+ war_N = mkNoun "gwerra" "gwerrer" ;+-- warm_A+-- wash_V2+-- watch_V2+ water_N = mkNoun "ilma" "ilmijiet" Masc ;+-- wet_A+-- white_A+-- wide_A+ wife_N = mkNoun "mara" "nisa" ;+-- win_V2+ wind_N = mkNoun "riħ" [] [] "rjieħ" "rjiħat" ;+ window_N = mkNoun "tieqa" "twieqi" ;+ wine_N = mkNoun [] "nbid" [] [] "nbejjed" ;+ wing_N = mkNoun "ġewnaħ" "ġwienaħ" ;+-- wipe_V2+ woman_N = mkNoun "mara" "nisa" ;+-- wonder_VQ+ wood_N = mkNoun "injam" "injamiet" ;+ worm_N = mkNoun "dudu" "dud" [] "dudiet" "dwied" ; -- duda+-- write_V2+ year_N = mkNoun "sena" [] "sentejn" "snin" [] ;+-- yellow_A+-- young_A++} ;
@@ -0,0 +1,10 @@+-- MorphoMlt.gf: morphology+--+-- Maltese Resource Grammar Library+-- John J. Camilleri, 2012+-- Licensed under LGPL++resource MorphoMlt = ResMlt ** open Prelude in {+ flags optimize=all ; coding=utf8 ;++}
@@ -0,0 +1,17 @@+-- NounMlt.gf: noun phrases and nouns+--+-- Maltese Resource Grammar Library+-- John J. Camilleri, 2012+-- Licensed under LGPL++concrete NounMlt of Noun = CatMlt ** open ResMlt, Prelude in {+ flags optimize=noexpand ;++-- Card+-- CN+-- Det+-- NP+-- Num+-- Ord++}
@@ -0,0 +1,491 @@+-- NumeralMlt.gf: cardinals and ordinals+--+-- Maltese Resource Grammar Library+-- John J. Camilleri, 2012+-- Licensed under LGPL++concrete NumeralMlt of Numeral = CatMlt [Numeral,Digits] ** open Prelude,ResMlt in {++ flags coding=utf8 ;++-- Numeral, Digit+-- Dig, Digits++{-+ -- This code taken from examples/numerals/maltese.sty in GF darcs repository, July 2011.+ -- Original author unknown++ -- ABSTRACT definitions copied from lib/src/abstract/Numeral.gf++ -- Numerals from 1 to 999999 in decimal notation+ cat+ Numeral ; -- 0..+ Digit ; -- 2..9+ Sub10 ; -- 1..9+ Sub100 ; -- 1..99+ Sub1000 ; -- 1..999+ Sub1000000 ; -- 1..999999++ data+ num : Sub1000000 -> Numeral ;++ n2, n3, n4, n5, n6, n7, n8, n9 : Digit ;++ pot01 : Sub10 ; -- 1+ pot0 : Digit -> Sub10 ; -- d * 1+ pot110 : Sub100 ; -- 10+ pot111 : Sub100 ; -- 11+ pot1to19 : Digit -> Sub100 ; -- 10 + d+ pot0as1 : Sub10 -> Sub100 ; -- coercion of 1..9+ pot1 : Digit -> Sub100 ; -- d * 10+ pot1plus : Digit -> Sub10 -> Sub100 ; -- d * 10 + n+ pot1as2 : Sub100 -> Sub1000 ; -- coercion of 1..99+ pot2 : Sub10 -> Sub1000 ; -- m * 100+ pot2plus : Sub10 -> Sub100 -> Sub1000 ; -- m * 100 + n+ pot2as3 : Sub1000 -> Sub1000000 ; -- coercion of 1..999+ pot3 : Sub1000 -> Sub1000000 ; -- m * 1000+ pot3plus : Sub1000 -> Sub1000 -> Sub1000000 ; -- m * 1000 + n+-}+ oper+ Form1 = {+ s : DForm => CardOrd => Num_Case => Str ;+ --thou : CardOrd => Str ;+ thou : { s : Str ; treatAs : DForm } ;+ n : Num_Number ;+ } ;+ Form2 = {+ s : CardOrd => Num_Case => Str ;+ --thou : CardOrd => Str ;+ thou : { s : Str ; treatAs : DForm } ;+ n : Num_Number ;+ f : DForm ;+ } ;+++ lincat+ Digit = Form1 ;+ Sub10 = Form1 ;+ Sub100 = Form2 ;+ Sub1000 = Form2 ;+ Sub1000000 = Form2 ;++ oper++ -- Make a "number" (in this case a Form1)+ -- Should be moved to ResMlt ?+ -- Params:+ -- unit, eg TNEJN+ -- ordinal unit (without article), eg TIENI+ -- adjectival, eg ŻEWĠ+ -- teen, eg TNAX+ -- ten, eg GĦOXRIN+ -- number, eg NumDual+ --mkNum : Str -> Str -> Str -> Str -> Str -> Str -> Str -> Num_Number -> Form1 = \unit,ordunit,adjectival,teen,ten,hundred,thousand,num -> {+ mkNum : Str -> Str -> Str -> Str -> Str -> Num_Number -> Form1 = \unit,ordunit,adjectival,teen,ten,num ->+ let+ hundred = case num of {+ NumSg => "mija" ;+ NumDual => "mitejn" ;+ _ => adjectival+ } ;+ thousand = case num of {+ NumSg => "wieħed" ;+ NumDual => "elfejn" ;+ _ => case adjectival of {+ _ + "'" => (init adjectival) + "t" ; -- eg SEBA' -> SEBAT+ _ + "t" => adjectival ; -- eg SITT -> SITT+ _ => adjectival + "t" -- eg ĦAMES -> ĦAMEST+ }+ }+ in {+ s = table {+ Unit => table {+ NCard => table {+ NumNominative => unit ; -- eg TNEJN+ NumAdjectival => adjectival -- eg ŻEWĠ+ } ;+ NOrd => \\numcase => definiteArticle ++ ordunit -- eg IT-TIENI+ } ;+ Teen => table {+ NCard => table {+ NumNominative => teen ; -- eg TNAX+ NumAdjectival => teen + "-il" -- eg TNAX-IL+ } ;+ NOrd => table {+ NumNominative => definiteArticle ++ teen ; -- eg IT-TNAX+ NumAdjectival => definiteArticle ++ (teen + "-il") -- eg IT-TNAX-IL+ }+ } ;+ Ten => table {+ NCard => \\numcase => ten ; -- eg TLETIN+ NOrd => \\numcase => definiteArticle ++ ten -- eg IT-TLETIN+ } ;+ Hund => table {+ NCard => case num of {+ NumSg => table {+ NumNominative => "mija" ; -- ie MIJA+ NumAdjectival => "mitt" -- ie MITT suldat+ } ;+ NumDual => \\numcase => hundred ; -- ie MITEJN+ _ => table {+ NumNominative => hundred ++ "mija" ; -- eg MIJA, SEBA' MIJA+ NumAdjectival => hundred ++ "mitt" -- eg MITT, SEBA' MITT suldat+ }+ } ;+ NOrd => case num of {+ NumSg => table {+ NumNominative => definiteArticle ++ "mija" ; -- ie IL-MIJA+ NumAdjectival => definiteArticle ++ "mitt" -- ie IL-MITT suldat+ } ;+ NumDual => \\numcase => definiteArticle ++ hundred ; -- ie IL-MITEJN, IL-MITEJN suldat+ _ => table {+ NumNominative => definiteArticle ++ hundred ++ "mija" ; -- eg IS-SEBA' MIJA+ NumAdjectival => definiteArticle ++ hundred ++ "mitt" -- eg IS-SEBA' MITT suldat+ }+ }+ }+ } ;+-- thou = thousand ;+ thou = { s = thousand ; treatAs = Unit } ;+ n = num ;+ } ;++ lin+ -- Unit Ord.Unit Adjectival Teen Ten Number+ n2 = mkNum "tnejn" "tieni" "żewġ" "tnax" "għoxrin" NumDual ;+ n3 = mkNum "tlieta" "tielet" "tlett" "tlettax" "tletin" NumPl ; -- TODO tlett / tliet ?+ n4 = mkNum "erbgħa" "raba'" "erba'" "erbatax" "erbgħin" NumPl ;+ n5 = mkNum "ħamsa" "ħames" "ħames" "ħmistax" "ħamsin" NumPl ;+ n6 = mkNum "sitta" "sitt" "sitt" "sittax" "sittin" NumPl ;+ n7 = mkNum "sebgħa" "seba'" "seba'" "sbatax" "sebgħin" NumPl ;+ n8 = mkNum "tmienja" "tmin" "tmin" "tmintax" "tmenin" NumPl ;+ n9 = mkNum "disgħa" "disa'" "disa'" "dsatax" "disgħin" NumPl ;++ oper+ -- Helper functions for below+ mkForm2 : Form2 = overload {++ -- Infer adjectival, thousands+ mkForm2 : Str -> Str -> DForm -> Form2 = \card,ord,form -> {+ s = table {+ NCard => \\numcase => card ;+ NOrd => \\numcase => ord+ } ;+ --thou = card ;+ thou = { s = card ; treatAs = form } ;+ n = NumPl ;+ f = form ;+ } ;++ -- Explicit everything+ mkForm2 : Str -> Str -> Str -> Str -> DForm -> Form2 = \card,ord,adj,thousand,form -> {+ s = table {+ NCard => table {+ NumNominative => card ;+ NumAdjectival => adj+ } ;+ --NOrd => \\numcase => addDefiniteArticle ord+ NOrd => table {+ NumNominative => definiteArticle ++ ord ;+ NumAdjectival => definiteArticle ++ adj+ }+ } ;+ --thou = thousand ;+ thou = { s = thousand ; treatAs = form } ;+ n = NumPl ;+ f = form ;+ } ;++ -- Given an existing table+ mkForm2 : (CardOrd => Num_Case => Str) -> DForm -> Form2 = \tab,form -> {+ s = tab ;+ thou = {+ s = case form of {+ Teen => tab ! NCard ! NumAdjectival ;+ _ => tab ! NCard ! NumNominative+ } ;+ treatAs = form ;+ } ;+ n = NumPl ;+ f = form ;+ } ;++ }; -- end of mkForm2 overload++ lin++ -- Sub1000000 -> Numeral+ num x = x ;++ -- Sub10 ; 1+ -- Unit Ord.Unit Adjectival Teen Ten Number+ pot01 = mkNum "wieħed" "ewwel" "wieħed" [] [] NumSg ;++ -- Digit -> Sub10 ; d * 1+ pot0 d = d ** {n = case d.n of { NumDual => NumDual ; _ => NumPl } } ;++ -- Sub100 ; 10, 11+ -- Cardinal Ordinal Adjectival Thousand Form+ pot110 = mkForm2 "għaxra" "għaxar" "għaxar" "għaxart" Unit ;+ pot111 = mkForm2 "ħdax" "ħdax" "ħdax-il" "ħdax-il" Teen ;+{-+ pot110 = {+ s = table {+ NCard => table {+ NumNominative => "għaxra" ;+ NumAdjectival => "għaxar"+ } ;+ NOrd => \\numcase => addDefiniteArticle "għaxar"+ } ;+ thou = table {+ NCard => "għaxart" ;+ NOrd => addDefiniteArticle "għaxart"+ } ;+ n = NumPl ;+ f = Ten ;+ } ;+-}++ -- Digit -> Sub100 ; 10 + d+ pot1to19 d =+ mkForm2+ (d.s ! Teen)+ Teen+ ;++ -- Sub10 -> Sub100 ; coercion of 1..9+ pot0as1 d = {+ s = d.s ! Unit ;+ thou = d.thou ;+ n = d.n ;+ f = Unit ;+ } ;++ -- Digit -> Sub100 ; d * 10+ pot1 d =+ mkForm2+ (d.s ! Ten)+ Ten+ ;++ -- Digit -> Sub10 -> Sub100 ; d * 10 + n+ pot1plus d n =+ let unit = (n.s ! Unit ! NCard ! NumNominative) in+ mkForm2+ (unit ++ "u" ++ (d.s ! Ten ! NCard ! NumNominative))+ (definiteArticle ++ unit ++ "u" ++ (d.s ! Ten ! NCard ! NumNominative))+ Ten+ ;++ -- Sub100 -> Sub1000 ; coercion of 1..99+ pot1as2 m = m ;++ -- Sub10 -> Sub1000 ; m * 100+ pot2 m = {+ s = m.s ! Hund ;+ thou = {+ s = case m.n of {+ NumSg => "mitt" ; -- Special case for "mitt elf"+ NumDual => "mitejn" ; -- Special case for "mitejn elf"+ _ => m.thou.s+ } ;+ treatAs = Hund ;+ } ;+ n = NumPl ;+ f = Hund ;+ } ;++ -- Sub10 -> Sub100 -> Sub1000 ; m * 100 + n+ pot2plus m n =+ let+ hund : Str = m.s ! Hund ! NCard ! NumNominative+ in {+ s = table {+ NCard => table {+ NumNominative => hund ++ "u" ++ n.s ! NCard ! NumNominative ;+ NumAdjectival => hund ++ "u" ++ n.s ! NCard ! NumAdjectival+ } ;+ NOrd => table {+ NumNominative => definiteArticle ++ hund ++ "u" ++ n.s ! NCard ! NumNominative ;+ NumAdjectival => definiteArticle ++ hund ++ "u" ++ n.s ! NCard ! NumAdjectival+ }+ } ;+ thou = {+ s = hund ++ "u" ++ n.thou.s ;+ treatAs = case n.n of {+ NumSg => Ten ; -- specific case for mija u wiehed elf+ _ => n.f -- eg So that "106,000" is treated as "6,000"+ } ;+ } ;+ n = NumPl ;+ f = Hund ;+ } ;++ -- Sub1000 -> Sub1000000 ; coercion of 1..999+ pot2as3 m = m ;++ -- Sub1000 -> Sub1000000 ; m * 1000+ pot3 m = {+ s =+ case <m.n, m.thou.treatAs> of {+ <NumSg ,_> => numTable "elf" ; -- 1 * 1000+ <NumDual,_> => numTable "elfejn" ; -- 2 * 2000+ <NumPl ,Unit> => numTable m.thou.s "elef" ; -- 3-10 * 1000+ <NumPl ,_> => numTable m.thou.s "elf" -- 11+ * 1000+ } ;+{-+ case m.f of {+ Unit => numTable m.thou "elef" ; --+ _ => case m.n of {+ NumSg => numTable "elf" ; --+ NumDual => numTable "elfejn" ; --+ NumPl => numTable m.thou "elf" --+ }+ } ;+-}+ thou = {+ s = m.thou.s ;+ treatAs = m.f ;+ } ;+ n = NumPl ;+ f = Hund ; -- NOT IMPORTANT+ } ;++ -- Sub1000 -> Sub1000 -> Sub1000000 ; m * 1000 + n+ pot3plus m n = {+ s =+ let+ ukemm = table {+ NumNominative => "u" ++ (n.s ! NCard ! NumNominative) ;+ NumAdjectival => "u" ++ (n.s ! NCard ! NumAdjectival)+ }+ in+ case <m.n, m.thou.treatAs> of {+ <NumSg ,_> => numTable "elf" ukemm ;+ <NumDual,_> => numTable "elfejn" ukemm ;+ <NumPl ,Unit> => numTable (m.thou.s ++ "elef") ukemm ;+ <NumPl ,_> => numTable (m.thou.s ++ "elf") ukemm+ } ;+{-+ NumSg => elf2 "elf" ukemm ;+ NumDual => elf2 "elfejn" ukemm ;+ NumPl => case m.f of {+ Unit => elf2 m.thou ("elef" ++ ukemm) ;+ _ => elf2 m.thou ("elf" ++ ukemm)+ }+-}+ thou = {+ s = m.thou.s ;+ treatAs = m.f ;+ } ;+ n = NumPl ;+ f = Hund ; -- NOT IMPORTANT+ } ;++ oper+ -- Build "x thousand" table+ numTable : (CardOrd => Num_Case => Str) = overload {++ numTable : Str -> (CardOrd => Num_Case => Str) = \thou -> table {+ NCard => \\numcase => thou ;+ NOrd => \\numcase => definiteArticle ++ thou+ } ;++ numTable : Str -> Str -> (CardOrd => Num_Case => Str) = \thou,attach -> table {+ NCard => \\numcase => thou ++ attach ;+ NOrd => \\numcase => definiteArticle ++ thou ++ attach+ } ;++ numTable : Str -> (Num_Case => Str) -> (CardOrd => Num_Case => Str) = \thou,attach -> table {+ NCard => table {+ NumNominative => thou ++ (attach ! NumNominative) ;+ NumAdjectival => thou ++ (attach ! NumAdjectival)+ } ;+ NOrd => table {+ NumNominative => definiteArticle ++ thou ++ (attach ! NumNominative) ;+ NumAdjectival => definiteArticle ++ thou ++ (attach ! NumAdjectival)+ }+ } ;++ } ;+{-+-- elf : (CardOrd => Str) = overload {+ elf : Str -> (CardOrd => Num_Case => Str) = \m -> table {+ NCard => \\numcase => m ;+ NOrd => \\numcase => addDefiniteArticle m+ } ;+ elf2 : Str -> Str -> (CardOrd => Num_Case => Str) = \m,n -> table {+ NCard => \\numcase => m ++ n ;+ NOrd => \\numcase => (addDefiniteArticle m) ++ n+ } ;+-}+-- } ;++{-+ Numerals as sequences of digits have a separate, simpler grammar+ ================================================================++ cat+ Dig ; -- single digit 0..9++ data+ IDig : Dig -> Digits ; -- 8+ IIDig : Dig -> Digits -> Digits ; -- 876++ D_0, D_1, D_2, D_3, D_4, D_5, D_6, D_7, D_8, D_9 : Dig ;+-}++ lincat++ Dig = {+ s : Str ;+ n : Num_Number+ } ;++ oper+ -- Helper for making a Dig object. Specifying no number inplies plural.+ mkDig : Dig = overload {+ mkDig : Str -> Dig = \digit -> lin Dig {+ s = digit ;+ n = NumPl+ } ;+ mkDig : Str -> Num_Number -> Dig = \digit,num -> lin Dig {+ s = digit ;+ n = num+ } ;+ } ;++ -- For correct comma placement in Digits+ commaIf : DTail -> Str = \t -> case t of {+ T3 => "," ;+ _ => []+ } ;+ inc : DTail -> DTail = \t -> case t of {+ T1 => T2 ;+ T2 => T3 ;+ T3 => T1+ } ;++ lin+ D_0 = mkDig "0" ;+ D_1 = mkDig "1" NumSg ;+ D_2 = mkDig "2" NumDual ;+ D_3 = mkDig "3" ;+ D_4 = mkDig "4" ;+ D_5 = mkDig "5" ;+ D_6 = mkDig "6" ;+ D_7 = mkDig "7" ;+ D_8 = mkDig "8" ;+ D_9 = mkDig "9" ;++ -- Create Digits from a Dig+ IDig d = d ** {tail = T1} ;++ -- Create Digits from combining Dig with Digits+ IIDig d i = {+ s = d.s ++ (commaIf i.tail) ++ i.s ;+ n = NumPl ;+ tail = inc i.tail+ } ;++}
@@ -0,0 +1,9 @@+-- Maltese Resource Grammar Library+-- John J. Camilleri, 2012+-- Licensed under LGPL++resource OrthoMlt = open Prelude, Predef in {+ flags coding=utf8 ;+++}
@@ -0,0 +1,561 @@+-- ParadigmsMlt.gf: morphological paradigms+--+-- Maltese Resource Grammar Library+-- John J. Camilleri, 2012+-- Licensed under LGPL++--# -path=.:../abstract:../../prelude:../common++resource ParadigmsMlt = open+ Predef,+ Prelude,+ MorphoMlt,+ OrthoMlt,(ResMlt=ResMlt),+ CatMlt+ in {++ flags optimize=noexpand ; coding=utf8 ;++ oper++ {- ===== Noun Paradigms ===== -}++ -- Helper function for inferring noun plural from singulative+ -- Nouns with collective & determinate forms should not use this...+ inferNounPlural : Str -> Str = \sing ->+ case sing of {+ _ + "na" => init sing + "iet" ; -- eg WIDNIET+ _ + "i" => sing + "n" ; -- eg BAĦRIN, DĦULIN, RAĦLIN+ _ + ("a"|"u") => init(sing) + "i" ; -- eg ROTI+ _ + "q" => sing + "at" ; -- eg TRIQAT+ _ => sing + "i"+ } ;++ -- Helper function for inferring noun gender from singulative+ -- Refer Maltese (Descriptive Grammars) pg190+ inferNounGender : Str -> Gender = \sing ->+ case sing of {+ _ + "aġni" => Fem ;+ _ + "anti" => Fem ;+ _ + "zzjoni" => Fem ;+ _ + "ġenesi" => Fem ;+ _ + "ite" => Fem ;+ _ + "itù" => Fem ;+ _ + "joni" => Fem ;+ _ + "ojde" => Fem ;+ _ + "udni" => Fem ;+ _ + ("a"|"à") => Fem ;+ _ => Masc+ } ;+++ -- Overloaded function for building a noun+ -- Return: Noun+ mkNoun : Noun = overload {++ -- Take the singular and infer gender & plural.+ -- Assume no special plural forms.+ -- Params:+ -- Singular, eg AJRUPLAN+ mkNoun : Str -> Noun = \sing ->+ let+ plural = inferNounPlural sing ;+ gender = inferNounGender sing ;+ in+ mkNounWorst sing [] [] plural [] gender ;++ -- Take an explicit gender.+ -- Assume no special plural forms.+ -- Params:+ -- Singular, eg AJRUPLAN+ -- Gender+ mkNoun : Str -> Gender -> Noun = \sing,gender ->+ let+ plural = inferNounPlural sing ;+ in+ mkNounWorst sing [] [] plural [] gender ;++ -- Take the singular, plural. Infer gender.+ -- Assume no special plural forms.+ -- Params:+ -- Singular, eg KTIEB+ -- Plural, eg KOTBA+ mkNoun : Str -> Str -> Noun = \sing,plural ->+ let+ gender = inferNounGender sing ;+ in+ mkNounWorst sing [] [] plural [] gender ;++ -- Take the singular, plural and gender.+ -- Assume no special plural forms.+ -- Params:+ -- Singular, eg KTIEB+ -- Plural, eg KOTBA+ -- Gender+ mkNoun : Str -> Str -> Gender -> Noun = \sing,plural,gender ->+ mkNounWorst sing [] [] plural [] gender ;+++ -- Takes all 5 forms, inferring gender+ -- Params:+ -- Singulative, eg KOXXA+ -- Collective, eg KOXXOX+ -- Double, eg KOXXTEJN+ -- Determinate Plural, eg KOXXIET+ -- Indeterminate Plural+ mkNoun : Str -> Str -> Str -> Str -> Str -> Noun = \sing,coll,dual,det,ind ->+ let+ gender = if_then_else (Gender) (isNil sing) (inferNounGender coll) (inferNounGender sing) ;+ in+ mkNounWorst sing coll dual det ind gender ;++ } ; --end of mkNoun overload++ -- Take the singular and infer gender.+ -- No other plural forms.+ -- Params:+ -- Singular, eg ARTI+ mkNounNoPlural : Noun = overload {++ mkNounNoPlural : Str -> Noun = \sing ->+ let gender = inferNounGender sing ;+ in mkNounWorst sing [] [] [] [] gender+ ;++ mkNounNoPlural : Str -> Gender -> Noun = \sing,gender ->+ mkNounWorst sing [] [] [] [] gender+ ;++ } ; --end of mkNounNoPlural overload+++ -- Take the singular and infer dual, plural & gender+ -- Params:+ -- Singular, eg AJRUPLAN+ mkNounDual : Str -> Noun = \sing ->+ let+ dual : Str = case sing of {+ _ + ("għ"|"'") => sing + "ajn" ;+ _ + ("a") => init(sing) + "ejn" ;+ _ => sing + "ejn"+ } ;+ plural = inferNounPlural sing ;+ gender = inferNounGender sing ;+ in+ mkNounWorst sing [] dual plural [] gender ;+++ -- Take the collective, and infer singulative, determinate plural, and gender.+ -- Params:+ -- Collective Plural, eg TUFFIEĦ+ mkNounColl : Str -> Noun = \coll ->+ let+ stem : Str = case coll of {+ -- This can only apply when there are 2 syllables in the word+ _ + #Vowel + #Consonant + #Vowel + K@#Consonant => tk 2 coll + K ; -- eg GĦADAM -> GĦADM-++ _ => coll+ } ;+ -------+ sing : Str = case stem of {+ _ => stem + "a"+ } ;+ det : Str = case stem of {+ _ => stem + "iet"+ } ;+ -- gender = inferNounGender sing ;+ gender = Masc ; -- Collective noun is always treated as Masculine+ in+ mkNounWorst sing coll [] det [] gender ;+++ -- Worst case+ -- Takes all forms and a gender+ -- Params:+ -- Singulative, eg KOXXA+ -- Collective, eg KOXXOX+ -- Double, eg KOXXTEJN+ -- Determinate Plural, eg KOXXIET+ -- Indeterminate Plural+ -- Gender+ mkNounWorst : Str -> Str -> Str -> Str -> Str -> Gender -> Noun = \sing,coll,dual,det,ind,gen -> {+ s = table {+ Singular Singulative => sing ;+ Singular Collective => coll ;+ Dual => dual ;+ Plural Determinate => det ;+ Plural Indeterminate => ind+ } ;+ g = gen ;+ } ;++{-+ -- Correctly abbreviate definite prepositions and join with noun+ -- Params:+ -- preposition (eg TAL, MAL, BĦALL)+ -- noun+ abbrevPrepositionDef : Str -> Str -> Str = \prep,noun ->+ let+ -- Remove either 1 or 2 l's+ prepStem : Str = case prep of {+ _ + "ll" => tk 2 prep ;+ _ + "l" => tk 1 prep ;+ _ => prep -- this should never happen, I don't think+ }+ in+ case noun of {+ ("s"|#LiquidCons) + #Consonant + _ => prep + "-i" + noun ;+ ("għ" | #Vowel) + _ => case prep of {+ ("fil"|"bil") => (take 1 prep) + "l-" + noun ;+ _ => prep + "-" + noun+ };+ K@#CoronalConsonant + _ => prepStem + K + "-" + noun ;+ #Consonant + _ => prep + "-" + noun ;+ _ => []+ } ;+-}+ -- Correctly abbreviate indefinite prepositions and join with noun+ -- Params:+ -- preposition (eg TA', MA', BĦAL)+ -- noun+ abbrevPrepositionIndef : Str -> Str -> Str = \prep,noun ->+ let+ initPrepLetter = take 1 prep ;+ initNounLetter = take 1 noun+ in+ if_then_Str (isNil noun) [] (+ case prep of {++ -- TA', MA', SA+ _ + ("a'"|"a") =>+ case noun of {+ #Vowel + _ => initPrepLetter + "'" + noun ;+ ("għ" | "h") + #Vowel + _ => initPrepLetter + "'" + noun ;+ _ => prep ++ noun+ } ;++ -- FI, BI+ _ + "i" =>+ if_then_Str (pbool2bool (eqStr initPrepLetter initNounLetter))+ (prep ++ noun)+ (case noun of {+ -- initPrepLetter + _ => prep ++ noun ;+ #Vowel + _ => initPrepLetter + "'" + noun ;+ #Consonant + #Vowel + _ => initPrepLetter + "'" + noun ;+ #Consonant + "r" + #Vowel + _ => initPrepLetter + "'" + noun ;+ _ => prep ++ noun+ }) ;++ -- Else leave untouched+ _ => prep ++ noun++ });+++ {- ========== Verb paradigms ========== -}++ -- Takes a verb as a string and returns the VType and root/pattern.+ -- Used in smart paradigm below and elsewhere.+ -- Params: "Mamma" (Perf Per3 Sg Masc) as string (eg KITEB or ĦAREĠ)+ -- Return: Record with v:VType, r:Root, p:Pattern+ classifyVerb : Str -> { t:VType ; r:Root ; p:Pattern } = \mamma -> case mamma of {+ -- Quad+ K@#Consonant + v1@#Vowel + T@#Consonant + B@#Consonant + v2@#Vowel + L@#Consonant => { t=Quad ; r={ K=K ; T=T ; B=B ; L=L } ; p={ v1=v1 ; v2=v2 } } ;++ -- Hollow+ K@#Consonant + v1@"a" + B@#Consonant => { t=Hollow ; r={ K=K ; T="w" ; B=B ; L=[] } ; p={ v1=v1 ; v2="" } } ;+ K@#Consonant + v1@"ie" + B@#Consonant => { t=Hollow ; r={ K=K ; T="j" ; B=B ; L=[] } ; p={ v1=v1 ; v2="" } } ;++ -- Double+ K@#Consonant + v1@#Vowel + T@#Consonant + B@#Consonant => { t=Double ; r={ K=K ; T=T ; B="j" ; L=[] } ; p={ v1=v1 ; v2="" } } ;++ -- Weak+ K@#Consonant + v1@#Vowel + T@#Consonant + v2@#Vowel => { t=Weak ; r={ K=K ; T=T ; B="j" ; L=[] } ; p={ v1=v1 ; v2=v2 } } ;++ -- Defective+ K@#Consonant + v1@#Vowel + T@#Consonant + v2@#Vowel + B@( "għ" | "'" ) => { t=Defective ; r={ K=K ; T=T ; B="għ" ; L=[] } ; p={ v1=v1 ; v2=v2 } } ;++ -- Strong+ K@#Consonant + v1@#Vowel + T@#Consonant + v2@#Vowel + B@(#Consonant | "ġ") => { t=Strong ; r={ K=K ; T=T ; B=B ; L=[] } ; p={ v1=v1 ; v2=v2 } } ;++ -- Error :(+ _ => Predef.error ( "Unable to parse verb" )+ } ;++ -- Smart paradigm for building a Verb, by calling correct corresponding mkXXX functions+ -- Return: Verb+ mkVerb : Verb = overload {++ -- Tries to do everything just from the mamma of the verb+ -- Params:+ -- "Mamma" (Perf Per3 Sg Masc) as string (eg KITEB or ĦAREĠ)+ mkVerb : Str -> Verb = \mamma ->+ let+ class = classifyVerb mamma+ in+ case class.t of {+ Strong => mkStrong class.r class.p ;+ Defective => mkDefective class.r class.p ;+ Weak => Predef.error ( "WEAK" ) ;+ Hollow => Predef.error ( "HOLLOW" ) ;+ Double => Predef.error ( "DOUBLE" ) ;+ Quad => mkQuad class.r class.p+ } ;++ -- Same as above but also takes an Imperative of the word for when it behaves less predictably+ -- Params:+ -- "Mamma" (Perf Per3 Sg Masc) as string (eg KITEB or ĦAREĠ )+ -- Imperative Singular as a string (eg IKTEB or OĦROĠ )+ -- Imperative Plural as a string (eg IKTBU or OĦORĠU )+ mkVerb : Str -> Str -> Str -> Verb = \mamma,imp_sg,imp_pl ->+ let+ class = classifyVerb mamma+ in+ case class.t of {+ Strong => {+ s = table {+ VPerf pgn => ( conjStrongPerf class.r class.p ) ! pgn ;+ VImpf pgn => ( conjStrongImpf imp_sg imp_pl ) ! pgn ;+ VImp n => table { Sg => imp_sg ; Pl => imp_pl } ! n+ } ;+ o = Semitic ;+ t = Strong ;+ } ;+ Defective => {+ s = table {+ VPerf pgn => ( conjDefectivePerf class.r class.p ) ! pgn ;+ VImpf pgn => ( conjDefectiveImpf imp_sg imp_pl ) ! pgn ;+ VImp n => table { Sg => imp_sg ; Pl => imp_pl } ! n+ } ;+ o = Semitic ;+ t = Defective ;+ } ;+ Weak => Predef.error ( "WEAK" ) ;+ Hollow => Predef.error ( "HOLLOW" ) ;+ Double => Predef.error ( "DOUBLE" ) ;+ Quad => {+ s = table {+ VPerf pgn => ( conjQuadPerf class.r class.p ) ! pgn ;+ VImpf pgn => ( conjQuadImpf imp_sg imp_pl ) ! pgn ;+ VImp n => table { Sg => imp_sg ; Pl => imp_pl } ! n+ } ;+ o = Semitic ;+ t = Quad ;+ }+ } ;++ } ; --end of mkVerb overload+++ {- ===== STRONG VERB ===== -}++ -- Strong verb, eg ĦAREĠ (Ħ-R-Ġ)+ -- Make a verb by calling generate functions for each tense+ -- Params: Root, Pattern+ -- Return: Verb+ mkStrong : Root -> Pattern -> Verb = \r,p ->+ let+ imp = conjStrongImp r p ;+ in {+ s = table {+ VPerf pgn => ( conjStrongPerf r p ) ! pgn ;+ VImpf pgn => ( conjStrongImpf (imp ! Sg) (imp ! Pl) ) ! pgn ;+ VImp n => imp ! n+ } ;+ t = Strong ;+ o = Semitic+ } ;++ -- Conjugate entire verb in PERFECT tense+ -- Params: Root, Pattern+ -- Return: Lookup table of Agr against Str+ conjStrongPerf : Root -> Pattern -> ( Agr => Str ) = \root,p ->+ let+ stem_12 = root.K + root.T + (case p.v2 of {"e" => "i" ; _ => p.v2 }) + root.B ;+ stem_3 = root.K + p.v1 + root.T + root.B ;+ in+ table {+ Per1 Sg => stem_12 + "t" ; -- Jiena KTIBT+ Per2 Sg => stem_12 + "t" ; -- Inti KTIBT+ Per3Sg Masc => root.K + p.v1 + root.T + p.v2 + root.B ; -- Huwa KITEB+ Per3Sg Fem => stem_3 + (case p.v2 of {"o" => "o" ; _ => "e"}) + "t" ; -- Hija KITBET+ Per1 Pl => stem_12 + "na" ; -- Aħna KTIBNA+ Per2 Pl => stem_12 + "tu" ; -- Intom KTIBTU+ Per3Pl => stem_3 + "u" -- Huma KITBU+ } ;++ -- Conjugate entire verb in IMPERFECT tense, given the IMPERATIVE+ -- Params: Imperative Singular (eg IKTEB), Imperative Plural (eg IKTBU)+ -- Return: Lookup table of Agr against Str+ conjStrongImpf : Str -> Str -> ( Agr => Str ) = \stem_sg,stem_pl ->+ table {+ Per1 Sg => "n" + stem_sg ; -- Jiena NIKTEB+ Per2 Sg => "t" + stem_sg ; -- Inti TIKTEB+ Per3Sg Masc => "j" + stem_sg ; -- Huwa JIKTEB+ Per3Sg Fem => "t" + stem_sg ; -- Hija TIKTEB+ Per1 Pl => "n" + stem_pl ; -- Aħna NIKTBU+ Per2 Pl => "t" + stem_pl ; -- Intom TIKTBU+ Per3Pl => "j" + stem_pl -- Huma JIKTBU+ } ;++ -- Conjugate entire verb in IMPERATIVE tense, infers vowel patterns+ -- Params: Root, Pattern+ -- Return: Lookup table of Number against Str+ conjStrongImp : Root -> Pattern -> ( Person_Number => Str ) = \root,p ->+ let+ stem_sg = case (p.v1 + p.v2) of {+ "aa" => "i" + root.K + root.T + "o" + root.B ;+ "ae" => "o" + root.K + root.T + "o" + root.B ;+ "ee" => "i" + root.K + root.T + "e" + root.B ;+ "ea" => "i" + root.K + root.T + "a" + root.B ;+ "ie" => "i" + root.K + root.T + "e" + root.B ;+ "oo" => "o" + root.K + root.T + "o" + root.B+ } ;+ stem_pl = case (p.v1 + p.v2) of {+ "aa" => "i" + root.K + "o" + root.T + root.B ;+ "ae" => "o" + root.K + "o" + root.T + root.B ;+ "ee" => "i" + root.K + "e" + root.T + root.B ;+ "ea" => "i" + root.K + "i" + root.T + root.B ;+ "ie" => "i" + root.K + "e" + root.T + root.B ;+ "oo" => "o" + root.K + "o" + root.T + root.B+ } ;+ in+ table {+ Sg => stem_sg ; -- Inti: IKTEB+ Pl => stem_pl + "u" -- Intom: IKTBU+ } ;+++ {- ===== DEFECTIVE VERB ===== -}++ -- Defective verb, eg SAMA' (S-M-GĦ)+ -- Make a verb by calling generate functions for each tense+ -- Params: Root, Pattern+ -- Return: Verb+ mkDefective : Root -> Pattern -> Verb = \r,p ->+ let+ imp = conjDefectiveImp r p ;+ in {+ s = table {+ VPerf pgn => ( conjDefectivePerf r p ) ! pgn ;+ VImpf pgn => ( conjDefectiveImpf (imp ! Sg) (imp ! Pl) ) ! pgn ;+ VImp n => imp ! n+ } ;+ t = Defective ;+ o = Semitic+ } ;++ -- Conjugate entire verb in PERFECT tense+ -- Params: Root, Pattern+ -- Return: Lookup table of Agr against Str+ conjDefectivePerf : Root -> Pattern -> ( Agr => Str ) = \root,p ->+ let+ stem_12 = root.K + root.T + (case p.v2 of {"e" => "i" ; _ => p.v2 }) + "j" ; -- "AGĦ" -> "AJ"+ stem_3 = root.K + p.v1 + root.T + root.B ;+ in+ table {+ Per1 Sg => stem_12 + "t" ; -- Jiena QLAJT+ Per2 Sg => stem_12 + "t" ; -- Inti QLAJT+ Per3Sg Masc => root.K + p.v1 + root.T + p.v2 + "'" ; -- Huwa QALA'+ Per3Sg Fem => stem_3 + (case p.v2 of {"o" => "o" ; _ => "e"}) + "t" ; -- Hija QALGĦET+ Per1 Pl => stem_12 + "na" ; -- Aħna QLAJNA+ Per2 Pl => stem_12 + "tu" ; -- Intom QLAJTU+ Per3Pl => stem_3 + "u" -- Huma QALGĦU+ } ;++ -- Conjugate entire verb in IMPERFECT tense, given the IMPERATIVE+ -- Params: Imperative Singular (eg IKTEB), Imperative Plural (eg IKTBU)+ -- Return: Lookup table of Agr against Str+ conjDefectiveImpf : Str -> Str -> ( Agr => Str ) = \stem_sg,stem_pl ->+ table {+ Per1 Sg => "n" + stem_sg ; -- Jiena NIKTEB+ Per2 Sg => "t" + stem_sg ; -- Inti TIKTEB+ Per3Sg Masc => "j" + stem_sg ; -- Huwa JIKTEB+ Per3Sg Fem => "t" + stem_sg ; -- Hija TIKTEB+ Per1 Pl => "n" + stem_pl ; -- Aħna NIKTBU+ Per2 Pl => "t" + stem_pl ; -- Intom TIKTBU+ Per3Pl => "j" + stem_pl -- Huma JIKTBU+ } ;++ -- Conjugate entire verb in IMPERATIVE tense, infers vowel patterns+ -- Params: Root, Pattern+ -- Return: Lookup table of Number against Str+ conjDefectiveImp : Root -> Pattern -> ( Person_Number => Str ) = \root,p ->+ let+ v1 = case p.v1 of { "e" => "i" ; _ => p.v1 } ;+ v_pl = case p.v1 of { "a" => "i" ; _ => "" } ; -- some verbs require "i" insertion in middle (eg AQILGĦU)+ in+ table {+ Sg => v1 + root.K + root.T + p.v2 + "'" ; -- Inti: AQLA' / IBŻA'+ Pl => v1 + root.K + v_pl + root.T + root.B + "u" -- Intom: AQILGĦU / IBŻGĦU+ } ;++ {- ===== QUADRILITERAL VERB ===== -}++ -- Make a Quad verb, eg QARMEĊ (Q-R-M-Ċ)+ -- Make a verb by calling generate functions for each tense+ -- Params: Root, Pattern+ -- Return: Verb+ mkQuad : Root -> Pattern -> Verb = \r,p ->+ let+ imp = conjQuadImp r p ;+ in {+ s = table {+ VPerf pgn => ( conjQuadPerf r p ) ! pgn ;+ VImpf pgn => ( conjQuadImpf (imp ! Sg) (imp ! Pl) ) ! pgn ;+ VImp n => imp ! n+ } ;+ t = Quad ;+ o = Semitic ;+ } ;++ -- Conjugate entire verb in PERFECT tense+ -- Params: Root, Pattern+ -- Return: Lookup table of Agr against Str+ conjQuadPerf : Root -> Pattern -> ( Agr => Str ) = \root,p ->+ let+ stem_12 = root.K + p.v1 + root.T + root.B + (case p.v2 of {"e" => "i" ; _ => p.v2 }) + root.L ;+ stem_3 = root.K + p.v1 + root.T + root.B + root.L ;+ in+ table {+ Per1 Sg => stem_12 + "t" ; -- Jiena DARDART+ Per2 Sg => stem_12 + "t" ; -- Inti DARDART+ Per3Sg Masc => root.K + p.v1 + root.T + root.B + p.v2 + root.L ; -- Huwa DARDAR+ Per3Sg Fem => stem_3 + (case p.v2 of {"o" => "o" ; _ => "e"}) + "t" ; -- Hija DARDRET+ Per1 Pl => stem_12 + "na" ; -- Aħna DARDARNA+ Per2 Pl => stem_12 + "tu" ; -- Intom DARDARTU+ Per3Pl => stem_3 + "u" -- Huma DARDRU+ } ;++ -- Conjugate entire verb in IMPERFECT tense, given the IMPERATIVE+ -- Params: Imperative Singular (eg ____), Imperative Plural (eg ___)+ -- Return: Lookup table of Agr against Str+ conjQuadImpf : Str -> Str -> ( Agr => Str ) = \stem_sg,stem_pl ->+ let+ prefix_dbl:Str = case stem_sg of {+ X@( "d" | "t" ) + _ => "i" + X ;+ _ => "t"+ } ;+ in+ table {+ Per1 Sg => "in" + stem_sg ; -- Jiena INDARDAR+ Per2 Sg => prefix_dbl + stem_sg ; -- Inti IDDARDAR+ Per3Sg Masc => "i" + stem_sg ; -- Huwa IDARDAR+ Per3Sg Fem => prefix_dbl + stem_sg ; -- Hija IDDARDAR+ Per1 Pl => "in" + stem_pl ; -- Aħna INDARDRU+ Per2 Pl => prefix_dbl + stem_pl ; -- Intom IDDARDRU+ Per3Pl => "i" + stem_pl -- Huma IDARDRU+ } ;++ -- Conjugate entire verb in IMPERATIVE tense, infers vowel patterns+ -- Params: Root, Pattern+ -- Return: Lookup table of Number against Str+ conjQuadImp : Root -> Pattern -> ( Person_Number => Str ) = \root,p ->+ table {+ Sg => root.K + p.v1 + root.T + root.B + p.v2 + root.L ; -- Inti: DARDAR+ Pl => root.K + p.v1 + root.T + root.B + root.L + "u" -- Intom: DARDRU+ } ;++++}
@@ -0,0 +1,8 @@+-- Maltese Resource Grammar Library+-- John J. Camilleri, 2012+-- Licensed under LGPL++resource PatternsMlt = {+ flags coding=utf8 ;++}
@@ -0,0 +1,14 @@+-- PhraseMlt.gf: suprasentential phrases+--+-- Maltese Resource Grammar Library+-- John J. Camilleri, 2012+-- Licensed under LGPL++concrete PhraseMlt of Phrase = CatMlt ** open ParamX, Prelude, ResMlt in {++-- PConj+-- Phr+-- Utt+-- Voc++}
@@ -0,0 +1,17 @@+-- QuestionMlt.gf: questions and interrogatives+--+-- Maltese Resource Grammar Library+-- John J. Camilleri, 2012+-- Licensed under LGPL++concrete QuestionMlt of Question = CatMlt ** open ResMlt, ParamX, Prelude in {++ flags optimize=all_subs ;++-- IAdv+-- IComp+-- IDet+-- IP+-- QCl++}
@@ -0,0 +1,12 @@+-- RelativeMlt.gf: relational clauses and pronouns+--+-- Maltese Resource Grammar Library+-- John J. Camilleri, 2012+-- Licensed under LGPL++concrete RelativeMlt of Relative = CatMlt ** open ResMlt in {++-- RCl+-- RP++}
@@ -0,0 +1,311 @@+-- ResMlt.gf: Language-specific parameter types, morphology, VP formation+--+-- Maltese Resource Grammar Library+-- John J. Camilleri, 2012+-- Licensed under LGPL++--# -path=.:../abstract:../common:../prelude++{-+ Verb types summary:+ ===================+ - Strong verb: none of radicals are semi-vowels eg ĦAREĠ (Ħ-R-Ġ)+ - Defective verb: third radical is semivowel GĦ eg QATA' (Q-T-GĦ)+ - Weak verb: third radical is semivowel J eg MEXA (M-X-J)+ - Hollow verb: long A or IE btw radicals 1 & 3 eg QAL (Q-W-L) or SAB (S-J-B)+ - Double/Geminated verb: radicals 2 & 3 identical eg ĦABB (Ħ-B-B)+ - Quadriliteral verb: 4 radicals eg QARMEĊ (Q-R-M-Ċ)+-}+++resource ResMlt = PatternsMlt ** open Prelude in {++ flags coding=utf8 ;++ param++ -- Used in the NumeralMlt module+ CardOrd = NCard | NOrd ;+ DTail = T1 | T2 | T3 ; -- This is already defined in ParamX...+ Num_Number =+ NumSg+ | NumDual+ | NumPl+ ;+ DForm =+ Unit -- 0..10+ | Teen -- 11-19+ --| TeenIl -- 11-19+ | Ten -- 20-99+ | Hund -- 100..999+ --| Thou -- 1000++ ;+ Num_Case =+ NumNominative+ | NumAdjectival ;+++{-+ Note: NNQ = Non-numerically quantifiable++ Nouns can have the following forms:+ o Singular+ - Singulative (1, >10)+ - Collective (NNQ)+ o Dual (2)+ o Plural+ - Determinate (2-10)+ - Indeterminate (NNQ)+ - Sound+ - Broken+ - Plural of Plural++ Typical combinations thereof (* marks base form):+ - Singulative, no plural!+ - Singulative*, Plural+ - Singulative* (1), Dual (2), Plural (>2)+ - Singulative (1, >10), Collective* (NNQ), Determinate Plural (2-10)+ - Singulative, Collective*, Determinate Plural, Indeterminate Plural -> very few nouns have these 4 forms+-}+ Noun_Sg_Type =+ Singulative -- eg ĦUTA+ | Collective -- eg ĦUT+ ;+ Noun_Pl_Type =+ Determinate -- eg ĦUTIET+ | Indeterminate -- eg ĦWIET+ ;+ Noun_Number =+ Singular Noun_Sg_Type -- eg ĦUTA / ĦUT+ | Dual -- eg WIDNEJN+ | Plural Noun_Pl_Type -- eg ĦUTIET / ĦWIET+ ;++{-+ Noun_PluralType =+ Sound -- External (affix), eg FERGĦA -> FERGĦAT+ | Broken -- Internal, eg FERGĦA -> FRIEGĦI+ | Irregular -- eg MARA -> NISA+ | PluralOfPlural -- eg TARF -> TRUF -> TRUFIJIET+ | Foreign -- eg KARTI, PRATTIĊI, TELEVIXINS+ ;+-}++ Gender = Masc | Fem ;++ Animacy =+ Animate+ | Inanimate+ ;++ Definiteness =+ Definite -- eg IL-KARTA. In this context same as Determinate+ | Indefinite -- eg KARTA+ ;++{-+ -- CASE AS DEFINED BY GRAMMATIKA MALTIJA, p132+ -- Noun cases+ Case =+ Nominative -- referent as subject, eg IT-TARBIJA ...+ | Genitive -- referent as possessor, eg ... TAT-TARBIJA+ | Accusative -- referent as direct object+ | Dative -- referent as indirect object, eg ... LIT-TARBIJA+ | Ablative -- referent as instrument, cause, location, source or time, eg ... MINN TARBIJA+ | Vocative -- referent being adressed, eg AA TARBIJA (lol)+ ;+-}+{-+ -- CASE AS DEFINED BY ME+ -- Noun cases (note my examples include DEFINITE ARTICLE)+ -- Commented lines mean that noun iflection is unchanged, not that the case does not occur in Maltese!+ Case =+-- Absessive -- lack or absence of referent (MINGĦAJR)+-- | Ablative -- referent as instrument, cause, location, source or time+-- | Absolutive -- subject of intransitive or object of transitive verb (in ergative-absolutive languages)+-- | Accusative -- referent as direct object (in nominative-accusative languages)+-- | Allative -- motion towards referent (LEJN)+-- | Additive -- synonym of Allative (above)+ Benefactive -- referent as recipient, eg GĦAT-TARBIJA. cf Dative.+-- | Causative -- referent as the cause of a situation (MINĦABBA)+ | Comitative -- with, eg MAT-TARBIJA+ | Dative -- referent as indirect object, eg LIT-TARBIJA. cf Benefactive.+-- | Delative -- motion downward from referent+ | Elative -- motion away from referent, eg MIT-TARBIJA+ | Equative -- likeness or identity, eg BĦAT-TARBIJA+-- | Ergative -- subject of transitive verb (in ergative-absolutive languages)+-- | Essive -- temporary state / while / in capacity of (BĦALA)+ | Genitive -- referent as possessor, eg TAT-TARBIJA+-- | Illative -- motion into / towards referent, eg SAT-TARBIJA. cf Allative.+ | Inessive -- within referent, eg ĠOT-TARBIJA, FIT-TARBIJA+ | Instrumental -- referent as instrument, eg BIT-TARBIJA. cf Ablative.+ | Lative -- motion up to referent, eg SAT-TARBIJA+-- | Locative -- location at referent+ | Nominative -- referent as subject, eg IT-TARBIJA+-- | Partitive -- partial nature of referent+-- | Prolative -- motion along / beside referent+-- | Superessive -- on / upon (FUQ)+-- | Translative -- referent noun or adjective as result of process of change+-- | Vocative -- referent being adressed, eg AA TARBIJA (lol)+ ;+-}+-- Person = P1 | P2 | P3 ;+-- State = Def | Indef | Const ;+-- Mood = Ind | Cnj | Jus ;+-- Voice = Act | Pas ;+ Origin =+ Semitic+ | Romance+ | English+ ;+-- Order = Verbal | Nominal ;++ -- Just for my own use+ -- Mamma = Per3 Sg Masc ;++ -- Shortcut type+ -- GenNum = gn Gender Number2 ;+++ Person_Number = Sg | Pl ;++ -- Agreement features+ Agr =+ Per1 Person_Number -- Jiena, Aħna+ | Per2 Person_Number -- Inti, Intom+ | Per3Sg Gender -- Huwa, Hija+ | Per3Pl -- Huma+ ;++ -- Possible tenses+ Tense =+ Perf -- Perfect tense, eg SERAQ+ | Impf -- Imperfect tense, eg JISRAQ+ | Imp -- Imperative, eg ISRAQ+ -- | PresPart -- Present Particible. Intransitive and 'motion' verbs only, eg NIEŻEL+ -- | PastPart -- Past Particible. Both verbal & adjectival function, eg MISRUQ+ -- | VerbalNoun -- Verbal Noun, eg SERQ+ ;++ -- Possible verb forms (tense + person)+ VForm =+ VPerf Agr -- Perfect tense in all pronoun cases+ | VImpf Agr -- Imperfect tense in all pronoun cases+ | VImp Person_Number -- Imperative is always Per2, Sg & Pl+ -- | VPresPart GenNum -- Present Particible for Gender/Number+ -- | VPastPart GenNum -- Past Particible for Gender/Number+ -- | VVerbalNoun -- Verbal Noun+ ;++ -- Possible verb types+ VType =+ Strong -- Strong verb: none of radicals are semi-vowels eg ĦAREĠ (Ħ-R-Ġ)+ | Defective -- Defective verb: third radical is semivowel GĦ eg QATA' (Q-T-GĦ)+ | Weak -- Weak verb: third radicl is semivowel J eg MEXA (M-X-J)+ | Hollow -- Hollow verb: long A or IE btw radicals 1 & 3 eg QAL (Q-W-L) or SAB (S-J-B)+ | Double -- Double/Geminated verb: radicals 2 & 3 identical eg ĦABB (Ħ-B-B)+ | Quad -- Quadliteral verb eg KARKAR (K-R-K-R), MAQDAR (M-Q-D-R), LEMBEB (L-M-B-B)+ ;++ oper++ -- Roots & Patterns+ Pattern : Type = {v1, v2 : Str} ; -- vowel1, vowel2+ -- Root3 : Type = {K, T, B : Str} ;+ -- Root4 : Type = Root3 ** {L : Str} ;+ Root : Type = {K, T, B, L : Str} ;++ -- Some classes. I need to include "c" because currently "ċ" gets downgraded to "c" in input :/+ Consonant : pattern Str = #( "b" | "c" | "ċ" | "d" | "f" | "ġ" | "g" | "għ" | "ħ" | "h" | "j" | "k" | "l" | "m" | "n" | "p" | "q" | "r" | "s" | "t" | "v" | "w" | "x" | "ż" | "z" );+ CoronalConsonant : pattern Str = #( "c" | "ċ" | "d" | "n" | "r" | "s" | "t" | "x" | "ż" | "z" ); -- "konsonanti xemxin"+ LiquidCons : pattern Str = #( "l" | "m" | "n" | "r" | "għ" );+ Vowel : pattern Str = #( "a" | "e" | "i" | "o" | "u" );+ Digraph : pattern Str = #( "ie" );+ SemiVowel : pattern Str = #( "għ" | "j" );++ {- ===== Type declarations ===== -}++ -- VP = {+ -- v : Verb ;+ -- clit : Str ;+ -- clitAgr : ClitAgr ;+ -- obj : Agr => Str+ -- } ;++ -- NP = {+ -- s : Case => {clit,obj : Str ; isClit : Bool} ;+ -- a : Agr+ -- } ;++{-+ Noun : Type = {+ s : Number5 => Str ;+ g : Gender ;+ } ;+-}+ Noun : Type = {+ s : Noun_Number => Str ;+ g : Gender ;+ } ;++ Adj : Type = {+ s : Gender => Person_Number => Str ;+ -- isPre : Bool ;+ } ;++ Verb : Type = {+ s : VForm => Str ; -- Give me the form (tense, person etc) and I'll give you the string+ t : VType ; -- Inherent - Strong/Hollow etc+ o : Origin ; -- Inherent - a verb of Semitic or Romance origins?+ } ;+++ {- ===== Useful helper functions ===== -}++ addDefinitePreposition : Str -> Str -> Str = \prep,n -> (getDefinitePreposition prep n) ++ n ;+ addDefiniteArticle = addDefinitePreposition "il" ;+ getDefiniteArticle = getDefinitePreposition "il" ;++ -- Correctly inflect definite preposition+ -- A more generic version of getDefiniteArticle+ -- Params:+ -- preposition (eg TAL, MAL, BĦALL)+ -- noun+ -- NOTE trying to call this with a runtime string will cause a world of pain. Design around it.+ getDefinitePreposition : Str -> Str -> Str = \prep,noun ->+ let+ -- Remove either 1 or 2 l's+ prepStem : Str = case prep of {+ _ + "ll" => Predef.tk 2 prep ;+ _ + "l" => Predef.tk 1 prep ;+ _ => prep -- this should never happen, I don't think+ }+ in+ case noun of {+ ("s"|#LiquidCons) + #Consonant + _ => prep + "-i" ; -- L-ISKOLA+ ("għ" | #Vowel) + _ => case prep of { -- L-GĦATBA...+ ("fil"|"bil") => (Predef.take 1 prep) + "l-" ;+ "il" => "l" + "-" ;+ _ => prep + "-"+ };+ K@#CoronalConsonant + _ => prepStem + K + "-" ; -- IĊ-ĊISK+ #Consonant + _ => prep + "-" ; -- IL-QADDIS+ _ => [] -- ?+ } ;++ definiteArticle : Str =+ pre {+ "il-" ;+ "l-" / strs { "a" ; "e" ; "i" ; "o" ; "u" ; "h" ; "għ" } ;+ "iċ-" / strs { "ċ" } ;+ "id-" / strs { "d" } ;+ "in-" / strs { "n" } ;+ "ir-" / strs { "r" } ;+ "is-" / strs { "s" } ;+ "it-" / strs { "t" } ;+ "ix-" / strs { "x" } ;+ "iż-" / strs { "ż" } ;+ "iz-" / strs { "z" }+ } ;++}
@@ -0,0 +1,26 @@+-- SentenceMlt.gf: clauses and sentences+--+-- Maltese Resource Grammar Library+-- John J. Camilleri, 2012+-- Licensed under LGPL++--# -path=.:abstract:common:prelude++concrete SentenceMlt of Sentence = CatMlt ** open+ ResMlt,+ Prelude,+ ResMlt,+ ParamX,+ CommonX in {++ flags optimize=all_subs ;++-- Cl+-- Imp+-- QS+-- RS+-- S+-- SC+-- SSlash++}
@@ -0,0 +1,12 @@+-- StructuralMlt.gf: lexicon of structural words+--+-- Maltese Resource Grammar Library+-- John J. Camilleri, 2012+-- Licensed under LGPL++concrete StructuralMlt of Structural = CatMlt **+ open MorphoMlt, ResMlt, ParadigmsMlt, Prelude in {++ flags optimize=all ; coding=utf8 ;++}
@@ -0,0 +1,11 @@+-- Maltese Resource Grammar Library+-- John J. Camilleri, 2012+-- Licensed under LGPL++--# -path=.:abstract:common++concrete SymbolMlt of Symbol = CatMlt ** open Prelude, ResMlt in {+++}+
@@ -0,0 +1,12 @@+-- TextMlt.gf: many-phrase texts+--+-- Maltese Resource Grammar Library+-- John J. Camilleri, 2012+-- Licensed under LGPL++concrete IdiomMlt of Idiom = CatMlt ** open Prelude, ResMlt in {++-- Text++}+
@@ -0,0 +1,14 @@+-- VerbMlt.gf: verb phrases+--+-- Maltese Resource Grammar Library+-- John J. Camilleri, 2012+-- Licensed under LGPL++concrete VerbMlt of Verb = CatMlt ** open Prelude, ResMlt in {+ flags optimize=all_subs ;++-- Comp+-- VP+-- VPSplash++}
@@ -0,0 +1,45 @@+import List+import System++-- (c) Aarne Ranta 2010 under GNU LGPL++-- Compile files into pgf, in chosen combinations.++-- Usage: runghc Compile (-make | -link)? Eng Fre Fin ...+-- The -make option links all pgf files to one in the end+-- The -link option only links, without first compiling+-- Arguments whose length are 3 characters are prefixed with mainmodu.+-- Other arguments are passed literally.++-- Thus, for instance, to produce an English-Swedish-Romanian phrasebook with English+-- disambiguation, the command is+--+-- runghc Compile -link Eng Swe Ron DisambPhrasebookEng+++-- change this to apply to another project; alternatively, just use full file names+mainmodu = "MiniGrammar"++main = do+ (opts,langs) <- getArgs >>= return . partition ((=='-') . head)+ let modus = [mkFile la | la <- langs]+ putStrLn $ unwords modus+ if notElem "-link" opts + then mapM_ compileOne modus >> return ()+ else return ()+ case opts of+ _ | elem "-make" opts || elem "-link" opts -> do+ let comm = "gf -make -s " ++ unwords (map (++ ".pgf") modus)+ putStrLn comm+ system comm+ return () + _ -> return ()++compileOne modu = do+ let comm = "gf -make -s -optimize-pgf -name=" ++ + modu ++ " " ++ modu ++ ".gf" +++ " +RTS -K32M"+ putStrLn comm+ system comm++mkFile la = if length la == 3 then mainmodu ++ la else la
@@ -1,10 +1,12 @@-all: src pgf+compile = runghc Compile +all: src compdemo linkdemo+ src: runghc MkMini.hs -pgf: src- gf -make -optimize-pgf MiniGrammar???.gf +RTS -K100M+compdemo:+ $(compile) Afr Bul Cat Dan Dut Eng Fin Fre Ger Hin Ita Lav Nep Nor Pes Pnb Pol Ron Rus Snd Spa Swe Tha Urd -gf: src- gf -batch MiniGrammar???.gf+linkdemo:+ $(compile) -link Afr Bul Cat Dan Dut Eng Fin Fre Ger Hin Ita Lav Nep Nor Pes Pnb Pol Ron Rus Snd Spa Swe Tha Urd
@@ -1,5 +1,3 @@---# -path=.:alltenses- abstract MiniGrammar = Lexicon, Grammar [ -- the "mini" resource of GF book, chapter 9@@ -110,7 +108,7 @@ here_Adv, -- Adv, by_Prep, in_Prep, of_Prep, with_Prep, -- Prep, can_VV, must_VV, want_VV, -- VV,- although_Subj, because_Subj, when_Subj, -- Subj,+ although_Subj, because_Subj, when_Subj, if_Subj, -- Subj, when_IAdv, where_IAdv, why_IAdv-- IAdv, ] ** {@@ -130,9 +128,9 @@ this_Det, these_Det : Det ; that_Det, those_Det : Det ; i_NP, youSg_NP, he_NP, she_NP, we_NP, youPl_NP, they_NP : NP ;- SubjS : S -> Subj -> S -> S ; -- she walks because we run+ SubjS : Subj -> S -> S -> Utt ; -- if she walks we run CompAdv : Adv -> VP ; -- be here- SlashV2 : NP -> V2 -> ClSlash ; -- she loves+-- SlashV2 : NP -> V2 -> ClSlash ; -- she loves SlashPrep : Cl -> Prep -> ClSlash ; -- she walks with AdvCN : CN -> Prep -> NP -> CN ; -- man in the city
@@ -49,6 +49,7 @@ TTAnt, -- Tense -> Ant -> Temp ; PPos, PNeg, -- Pol, TPres, TPast, TFut, TCond, -- Tense,+ STense, SCond, SFut, SPast, SPres, -- scand tense ASimul, AAnter, and_Conj, or_Conj, -- Conj,@@ -111,7 +112,7 @@ here_Adv, -- Adv, by_Prep, in_Prep, of_Prep, with_Prep, -- Prep, can_VV, must_VV, want_VV, -- VV,- although_Subj, because_Subj, when_Subj, -- Subj,+ although_Subj, because_Subj, when_Subj, if_Subj, -- Subj, when_IAdv, where_IAdv, why_IAdv-- IAdv, ] ** open SyntaxEng, (S = SyntaxEng) in {@@ -122,7 +123,7 @@ ComplV2 v np = mkVP v np ; ModCN ap cn = lin CN (mkCN <lin AP ap : AP> <lin CN cn : CN>) ; CompAP ap = mkVP (lin AP ap) ;- ConjS co x y = mkS co x y ;+ ConjS co x y = mkS (lin Conj co) (lin S x) (lin S y) ; ConjAP co x y = mkAP co x y ; ConjNP co x y = mkNP co x y ; a_Det = mkDet a_Quant ;@@ -138,10 +139,9 @@ we_NP = S.we_NP ; youPl_NP = S.youPl_NP ; they_NP = S.they_NP ;--- SubjS s subj s = mkS s (mkAdv subj s) ;- CompAdv adv = mkVP adv ;+ SubjS subj a b = mkUtt (mkS (S.mkAdv <subj : Subj> <a : S>) b) ;+ CompAdv adv = mkVP (lin Adv adv) ; -- SlashV2 np v2 = mkClSlash np v2 ;- SlashPrep cl p = mkClSlash cl p ;- AdvCN cn p pp = mkCN <lin CN cn : CN> (mkAdv p pp) ;-+ SlashPrep cl p = mkClSlash (lin Cl cl) <p : Prep> ;+ AdvCN cn p pp = mkCN <lin CN cn : CN> (mkAdv <p : Prep> <pp : NP>) ; }
@@ -1,6 +1,11 @@ src = "Eng"-langs = ["Afr","Bul","Cat","Dan","Dut","Fin","Fre","Ger","Ita",- "Nep","Nor","Pes","Pol","Pnb","Ron","Rus","Spa","Swe","Urd"]+langs = [+ "Afr","Bul","Cat","Dan","Dut",+ "Fin","Fre","Ger","Hin","Ita",+ "Lav","Nep","Nor","Pes","Pol",+ "Pnb","Ron","Rus","Snd","Spa",+ "Swe","Tha","Urd"+ ] file lng = "MiniGrammar" ++ lng ++ ".gf"
@@ -1,2 +1,2 @@-concrete CatNor of Cat = CommonX ** CatScand with+concrete CatNor of Cat = CommonX - [Tense, Temp] ** CatScand with (ResScand = ResNor) ;
@@ -57,6 +57,8 @@ noPart = {part = []} ; auxFut = "vil" ; -- "skal" in ExtNor+ auxFutKommer = "kommer" ; + auxFutPart = "til" ; auxCond = "ville" ; negation : Polarity => Str = table {
@@ -6,4 +6,6 @@ a = np.a } ; + TFutKommer = {s = []} ** {t = SFutKommer} ; --# notpresent+ }
@@ -11,10 +11,10 @@ RelativeNor, ConjunctionNor, PhraseNor,- TextX,+ TextX - [Tense,Temp] , IdiomNor, StructuralNor,- TenseX+ TenseNor ** { flags startcat = Phr ; unlexer = text ; lexer = text ;
@@ -9,7 +9,7 @@ GenericCl vp = mkClause "man" (agrP3 Utr Sg) vp ; CleftNP np rs = mkClause "det" (agrP3 Neutr Sg) - (insertObj (\\_ => np.s ! rs.c ++ rs.s ! np.a) (predV verbBe)) ;+ (insertObj (\\_ => np.s ! rs.c ++ rs.s ! np.a ! RNom) (predV verbBe)) ; CleftAdv ad s = mkClause "det" (agrP3 Neutr Sg) (insertObj (\\_ => ad.s ++ s.s ! Sub) (predV verbBe)) ;
@@ -0,0 +1,3 @@+concrete TenseNor of Tense = CatNor, TenseX [Ant,Pol,AAnter,ASimul,PNeg,PPos] ** + TenseScand with + (ResScand = ResNor) ;
@@ -33,60 +33,60 @@ -- all this lifted to tables - ListTable : Type -> Type = \P -> {s1,s2 : P => Str} ; + ListTable : PType -> Type = \P -> {s1,s2 : P => Str} ; - twoTable : (P : Type) -> (_,_ : {s : P => Str}) -> ListTable P = \_,x,y ->+ twoTable : (P : PType) -> (_,_ : {s : P => Str}) -> ListTable P = \_,x,y -> {s1 = x.s ; s2 = y.s} ; - consTable : (P : Type) -> Str -> ListTable P -> {s : P => Str} -> ListTable P = + consTable : (P : PType) -> Str -> ListTable P -> {s : P => Str} -> ListTable P = \P,c,xs,x -> {s1 = table P {o => xs.s1 ! o ++ c ++ xs.s2 ! o} ; s2 = x.s} ; - conjunctTable : (P : Type) -> Conjunction -> ListTable P -> {s : P => Str} = + conjunctTable : (P : PType) -> Conjunction -> ListTable P -> {s : P => Str} = \P,or,xs -> {s = table P {p => xs.s1 ! p ++ or.s ++ xs.s2 ! p}} ; conjunctDistrTable : - (P : Type) -> ConjunctionDistr -> ListTable P -> {s : P => Str} = \P,or,xs ->+ (P : PType) -> ConjunctionDistr -> ListTable P -> {s : P => Str} = \P,or,xs -> {s = table P {p => or.s1++ xs.s1 ! p ++ or.s2 ++ xs.s2 ! p}} ; -- ... and to two- and three-argument tables: how clumsy! --- - ListTable2 : Type -> Type -> Type = \P,Q -> + ListTable2 : PType -> PType -> Type = \P,Q -> {s1,s2 : P => Q => Str} ; - twoTable2 : (P,Q : Type) -> (_,_ : {s : P => Q => Str}) -> ListTable2 P Q = + twoTable2 : (P,Q : PType) -> (_,_ : {s : P => Q => Str}) -> ListTable2 P Q = \_,_,x,y -> {s1 = x.s ; s2 = y.s} ; consTable2 : - (P,Q : Type) -> Str -> ListTable2 P Q -> {s : P => Q => Str} -> ListTable2 P Q =+ (P,Q : PType) -> Str -> ListTable2 P Q -> {s : P => Q => Str} -> ListTable2 P Q = \P,Q,c,xs,x -> {s1 = table P {p => table Q {q => xs.s1 ! p ! q ++ c ++ xs.s2 ! p! q}} ; s2 = x.s } ; conjunctTable2 : - (P,Q : Type) -> Conjunction -> ListTable2 P Q -> {s : P => Q => Str} = + (P,Q : PType) -> Conjunction -> ListTable2 P Q -> {s : P => Q => Str} = \P,Q,or,xs -> {s = table P {p => table Q {q => xs.s1 ! p ! q ++ or.s ++ xs.s2 ! p ! q}}} ; conjunctDistrTable2 : - (P,Q : Type) -> ConjunctionDistr -> ListTable2 P Q -> {s : P => Q => Str} = + (P,Q : PType) -> ConjunctionDistr -> ListTable2 P Q -> {s : P => Q => Str} = \P,Q,or,xs -> {s = table P {p => table Q {q => or.s1++ xs.s1 ! p ! q ++ or.s2 ++ xs.s2 ! p ! q}}} ; - ListTable3 : Type -> Type -> Type -> Type = \P,Q,R -> + ListTable3 : PType -> PType -> PType -> Type = \P,Q,R -> {s1,s2 : P => Q => R => Str} ; - twoTable3 : (P,Q,R : Type) -> (_,_ : {s : P => Q => R => Str}) -> + twoTable3 : (P,Q,R : PType) -> (_,_ : {s : P => Q => R => Str}) -> ListTable3 P Q R = \_,_,_,x,y -> {s1 = x.s ; s2 = y.s} ; consTable3 : - (P,Q,R : Type) -> Str -> ListTable3 P Q R -> {s : P => Q => R => Str} -> + (P,Q,R : PType) -> Str -> ListTable3 P Q R -> {s : P => Q => R => Str} -> ListTable3 P Q R = \P,Q,R,c,xs,x -> {s1 = \\p,q,r => xs.s1 ! p ! q ! r ++ c ++ xs.s2 ! p ! q ! r ; @@ -94,26 +94,26 @@ } ; conjunctTable3 : - (P,Q,R : Type) -> Conjunction -> ListTable3 P Q R -> {s : P => Q => R => Str} = + (P,Q,R : PType) -> Conjunction -> ListTable3 P Q R -> {s : P => Q => R => Str} = \P,Q,R,or,xs -> {s = \\p,q,r => xs.s1 ! p ! q ! r ++ or.s ++ xs.s2 ! p ! q ! r} ; conjunctDistrTable3 : - (P,Q,R : Type) -> ConjunctionDistr -> ListTable3 P Q R -> + (P,Q,R : PType) -> ConjunctionDistr -> ListTable3 P Q R -> {s : P => Q => R => Str} = \P,Q,R,or,xs -> {s = \\p,q,r => or.s1++ xs.s1 ! p ! q ! r ++ or.s2 ++ xs.s2 ! p ! q ! r} ; - ListTable4 : Type -> Type -> Type -> Type -> Type = \P,Q,R,T -> + ListTable4 : PType -> PType -> PType -> PType -> Type = \P,Q,R,T -> {s1,s2 : P => Q => R => T => Str} ; - twoTable4 : (P,Q,R,T : Type) -> (_,_ : {s : P => Q => R => T => Str}) -> + twoTable4 : (P,Q,R,T : PType) -> (_,_ : {s : P => Q => R => T => Str}) -> ListTable4 P Q R T = \_,_,_,_,x,y -> {s1 = x.s ; s2 = y.s} ; consTable4 : - (P,Q,R,T : Type) -> Str -> ListTable4 P Q R T -> {s : P => Q => R => T => Str} -> + (P,Q,R,T : PType) -> Str -> ListTable4 P Q R T -> {s : P => Q => R => T => Str} -> ListTable4 P Q R T = \P,Q,R,T,c,xs,x -> {s1 = \\p,q,r,t => xs.s1 ! p ! q ! r ! t ++ c ++ xs.s2 ! p ! q ! r ! t ; @@ -121,12 +121,12 @@ } ; conjunctTable4 : - (P,Q,R,T : Type) -> Conjunction -> ListTable4 P Q R T -> {s : P => Q => R => T => Str} = + (P,Q,R,T : PType) -> Conjunction -> ListTable4 P Q R T -> {s : P => Q => R => T => Str} = \P,Q,R,T,or,xs -> {s = \\p,q,r,t => xs.s1 ! p ! q ! r ! t ++ or.s ++ xs.s2 ! p ! q ! r ! t} ; conjunctDistrTable4 : - (P,Q,R,T : Type) -> ConjunctionDistr -> ListTable4 P Q R T -> + (P,Q,R,T : PType) -> ConjunctionDistr -> ListTable4 P Q R T -> {s : P => Q => R => T => Str} = \P,Q,R,T,or,xs -> {s = \\p,q,r,t => or.s1++ xs.s1 ! p ! q ! r ! t ++ or.s2 ++ xs.s2 ! p ! q ! r ! t} ;@@ -142,18 +142,18 @@ consrSS : Str -> SS -> ListX -> ListX = \comma,x,xs -> consrStr comma x.s xs ; - consrTable : (P : Type) -> Str -> {s : P => Str} -> ListTable P -> ListTable P = + consrTable : (P : PType) -> Str -> {s : P => Str} -> ListTable P -> ListTable P = \P,c,x,xs -> {s1 = table P {o => x.s ! o ++ c ++ xs.s1 ! o} ; s2 = xs.s2} ; - consrTable2 : (P,Q : Type) -> Str -> {s : P => Q => Str} -> + consrTable2 : (P,Q : PType) -> Str -> {s : P => Q => Str} -> ListTable2 P Q -> ListTable2 P Q = \P,Q,c,x,xs -> {s1 = table P {p => table Q {q => x.s ! p ! q ++ c ++ xs.s1 ! p ! q}} ; s2 = xs.s2 } ; - consrTable3 : (P,Q,R : Type) -> Str -> {s : P => Q => R => Str} -> + consrTable3 : (P,Q,R : PType) -> Str -> {s : P => Q => R => Str} -> ListTable3 P Q R -> ListTable3 P Q R = \P,Q,R,c,x,xs -> {s1 = table P {p => table Q {q => table R {@@ -162,7 +162,7 @@ s2 = xs.s2 } ; - consrTable4 : (P,Q,R,T : Type) -> Str -> {s : P => Q => R => T => Str} -> + consrTable4 : (P,Q,R,T : PType) -> Str -> {s : P => Q => R => T => Str} -> ListTable4 P Q R T -> ListTable4 P Q R T = \P,Q,R,T,c,x,xs -> {s1 = table P {p => table Q {q => table R {
@@ -32,6 +32,7 @@ oper toLower : Tok -> Tok = variants {} ; -- map all chars to lower case oper show : (P : Type) -> P -> Tok = variants {} ; -- convert param to string oper read : (P : Type) -> Tok -> P = variants {} ; -- convert string to param+ oper eqVal : (P : Type) -> P -> P -> PBool = variants {} ; -- test if equal values oper toStr : (L : Type) -> L -> Str = variants {} ; -- find the "first" string oper mapStr : (L : Type) -> (Str -> Str) -> L -> L = variants {} ; -- map all strings in a data structure; experimental ---
@@ -16,14 +16,14 @@ cc2 : (_,_ : SS) -> SS = \x,y -> ss (x.s ++ y.s) ; cc3 : (_,_,_ : SS) -> SS = \x,y,z -> ss (x.s ++ y.s ++ z.s) ; - SS1 : Type -> Type = \P -> {s : P => Str} ;- ss1 : (A : Type) -> Str -> SS1 A = \A,s -> {s = table {_ => s}} ;+ SS1 : PType -> Type = \P -> {s : P => Str} ;+ ss1 : (A : PType) -> Str -> SS1 A = \A,s -> {s = table {_ => s}} ; SP1 : Type -> Type = \P -> {s : Str ; p : P} ; sp1 : (A : Type) -> Str -> A -> SP1 A = \_,s,a -> {s = s ; p = a} ; - constTable : (A,B : Type) -> B -> A => B = \_,_,b -> \\_ => b ;- constStr : (A : Type) -> Str -> A => Str = \A -> constTable A Str ;+ constTable : (A : PType) -> (B : Type) -> B -> A => B = \u,v,b -> \\_ => b ;+ constStr : (A : PType) -> Str -> A => Str = \A -> constTable A Str ; -- Discontinuous constituents.
@@ -42,7 +42,7 @@ } ; SentAP ap sc = {- s = \\a => ap.s ! a ++ sc.s ; --- mood + s = \\a => ap.s ! a ++ sc.s ! dative ; -- prête à dormir --- mood isPre = False } ;
@@ -1,4 +1,4 @@-incomplete concrete CatRomance of Cat = CommonX+incomplete concrete CatRomance of Cat = CommonX - [SC] ** open Prelude, CommonRomance, ResRomance, (R = ParamX) in { flags optimize=all_subs ;@@ -15,6 +15,7 @@ c2 : Compl } ; + SC = {s : Case => Str} ; -- de dormir / à dormir -- Sentence
@@ -147,7 +147,7 @@ g = g } ; SentCN cn sc = let g = cn.g in {- s = \\n => cn.s ! n ++ sc.s ;+ s = \\n => cn.s ! n ++ sc.s ! genitive ; -- raison de dormir g = g } ; AdvCN cn sc = let g = cn.g in {
@@ -250,15 +250,16 @@ infVP : VP -> Agr -> Str = \vp,agr -> let-----e clpr = pronArg agr.n agr.p vp.clAcc vp.clDat ;-----e iform = infForm agr.n agr.p vp.clAcc vp.clDat ;- clpr = <vp.clit1,vp.clit2, False> ; ----e- iform = False ; ----e- inf = vp.s.s ! VInfin False ; ---- ! (aagr agr.g agr.n) ;- neg = vp.neg ! Pos ; --- Neg not in API- obj = neg.p2 ++ clpr.p2 ++ vp.comp ! agr ++ vp.ext ! Pos ---- pol+ iform = False ; ---- meaning: no clitics+ inf = vp.s.s ! VInfin iform ; + neg = vp.neg ! Pos ; --- Neg not in API+ obj = neg.p2 ++ vp.comp ! agr ++ vp.ext ! Pos ; ---- pol+ refl = case vp.s.vtyp of {+ VRefl => reflPron agr.n agr.p Acc ; ---- case ?+ _ => [] + } ; in- clitInf clpr.p3 (clpr.p1 ++ vp.clit3) inf ++ obj ;+ neg.p1 ++ clitInf iform (refl ++ vp.clit1 ++ vp.clit2 ++ vp.clit3) inf ++ obj ; }
@@ -6,7 +6,7 @@ lin PredVP np vp = mkClause (np.s ! Nom).comp np.hasClit np.isPol np.a vp ; - PredSCVP sc vp = mkClause sc.s False False (agrP3 Masc Sg) vp ;+ PredSCVP sc vp = mkClause (sc.s ! Nom) False False (agrP3 Masc Sg) vp ; ImpVP vp = { s = \\p,i,g => case i of {@@ -47,9 +47,9 @@ c2 = slash.c2 } ; - EmbedS s = {s = conjThat ++ s.s ! Indic} ; --- mood- EmbedQS qs = {s = qs.s ! QIndir} ;- EmbedVP vp = {s = infVP vp (agrP3 Masc Sg)} ; --- agr ---- compl+ EmbedS s = {s = \\_ => conjThat ++ s.s ! Indic} ; --- mood+ EmbedQS qs = {s = \\_ => qs.s ! QIndir} ;+ EmbedVP vp = {s = \\c => prepCase c ++ infVP vp (agrP3 Masc Sg)} ; --- agr ---- compl UseCl t p cl = { s = \\o => t.s ++ p.s ++ cl.s ! DDir ! t.t ! t.a ! p.p ! o
@@ -1,3 +1,4 @@+--# -no-pmcfg --# -path=.:../abstract:../common:../prelude concrete AllRon of AllRonAbs =
@@ -1,3 +1,4 @@+--# -no-pmcfg --# -path=.:../abstract:../common:../prelude concrete LangRon of Lang =
@@ -59,13 +59,13 @@ -- like "mnogo" -- The determined noun has the case parameter specific for the determiner - Det = {s : AdjForm => Str; n: Number; g: PronGen; c: Case} ; - Predet, Quant = {s : AdjForm => Str; g: PronGen; c: Case} ; + Det = {s : AdjForm => Str; n: Number; g: PronGen; c: Case; size: Size} ; + Predet, Quant = {s : AdjForm => Str; g: PronGen; c: Case; size: Size} ; -- Numeral - Num, Numeral, Card = {s : Case => Gender => Str ; n : Number} ; - Digits = {s : Str ; n : Number} ; ---- + Num, Numeral, Card = {s : Gender => Animacy => Case => Str ; n : Number ; size: Size} ; + Digits = {s : Str ; n : Number ; size: Size} ; ---- -- Structural -- The conjunction has an inherent number, which is used when conjoining
file too large to diff
file too large to diff
@@ -11,7 +11,7 @@ animal_N = mkN "животное" animate; answer_V2S = dirV2 (regV imperfective first "отвеча" "ю" "отвечал" "отвечай" "отвечать" ); apartment_N = mkN "квартира" ;- apple_N = mkN "яблоко" ;+ apple_N = mkN "яблоко" inanimate ; art_N = mkN "искусство" ; ashes_N = mkN "пепел" ; ask_V2Q = dirV2 (regV imperfective first "спрашива" "ю" "спрашивал" "спрашивай" "спрашивать") ;@@ -22,7 +22,7 @@ bark_N = mkN "кора"; beautiful_A = mkA "красивый"; become_VA = regV perfective second "станов" "лю" "стал" "стань" "стать" ;- beer_N = mkN "пиво" ;+ beer_N = mkIndeclinableNoun "пиво" neuter inanimate ; beg_V2V = dirV2 (mkV imperfective "прошу" "просишь" "просит" "просим" "просите" "просят" "просил" "проси" "просить" ); belly_N = mkN "живот" ; big_A = mkA "большой" "больше" ;@@ -157,7 +157,7 @@ important_A = mkA "важный" ; industry_N = mkN "промышленность" ; iron_N = mkN "железо" ;- john_PN = mkPN "Иван" Masc Animate ;+ john_PN = mkPN "Иван" Masc Sg Animate ; jump_V = regV imperfective first "прыга" "ю" "прыгал" "прыгай" "прыгать" ; kill_V2 = dirV2 (regV imperfective first "убива" "ю" "убивал" "убивай" "убивать" ) ; king_N = mkN "король" "короля" "королю" "короля" "королем" "короле" "короле" "короли" "королей" "королям" "королей" "королями" "королях" masculine animate ;@@ -211,7 +211,7 @@ paint_V2A = dirV2 (regV imperfective first "рису" "ю" "рисовал" "рисуй" "рисовать" ) ; --- palace_N = nDvorec "двор" ; -- +++ MG_UR: added +++ paper_N = mkN "бумага" ;- paris_PN = mkPN "Париж" Masc Inanimate ;+ paris_PN = mkPN "Париж" Masc Sg Inanimate ; peace_N = mkN "мир" ; pen_N = mkN "ручка" ; person_N = mkN "лицo" animate ; -- irregular@@ -317,7 +317,7 @@ think_V = regV imperfective first "дума" "ю" "думал" "думай" "думать" ; throw_V2 = dirV2 (regV imperfective first "броса" "ю" "бросал" "бросай" "бросать" ) ; tie_V2 = dirV2 (regV imperfective first "вяж" "у" "вязал" "вяжи" "вязать") ;--- today_Adv = ;+ today_Adv = mkAdv "сегодня" ; tongue_N = mkN "язык" ; tooth_N = mkN "зуб" ; train_N = mkN "поезд" ;@@ -353,7 +353,7 @@ wood_N = mkN "дерево" ; worm_N = mkN "черв" ; write_V2 = dirV2 (regV imperfective first "пиш" "у" "писал" "пиши" "писать" );- year_N = mkN "годь" ;+ year_N = mkN "год" ; yellow_A = mkA "жёлтый" ; young_A = mkA "молодой" "моложе"; }
@@ -34,7 +34,7 @@ Prepos _ => "тебе" } } in pronYaTu nonPoss "тво" P2 ; --- Pronouns ya, tu, svoj+-- Pronouns ya, ty, svoj oper pronYaTu : { s : Case => Str } -> Str -> Person -> Pronoun = \nonPoss, mo, pers -> { s = table {@@ -346,18 +346,18 @@ let i = iAfter stem in let o = oAfter stem in { s = table {- NF Sg Nom => stem ;- NF Sg Gen => stem+"а" ;- NF Sg Dat => stem+"у" ;- NF Sg Acc => stem ;- NF Sg Inst => stem+o+"м" ;- NF Sg (Prepos _) => stem+"е" ;- NF Pl Nom => stem+i ;- NF Pl Gen => stem+case stem of { _+("ш"|"ж"|"ч"|"щ") => "ей"; _ => "ов" } ;- NF Pl Dat => stem+"ам" ;- NF Pl Acc => stem+i ;- NF Pl Inst => stem+"ами" ;- NF Pl (Prepos _) => stem+"ах" };+ NF Sg Nom _ => stem ;+ NF Sg Gen _ => stem+"а" ;+ NF Sg Dat _ => stem+"у" ;+ NF Sg Acc _ => stem ;+ NF Sg Inst _ => stem+o+"м" ;+ NF Sg (Prepos _) _ => stem+"е" ;+ NF Pl Nom _ => stem+i ;+ NF Pl Gen _ => stem+case stem of { _+("ш"|"ж"|"ч"|"щ") => "ей"; _ => "ов" } ;+ NF Pl Dat _ => stem+"ам" ;+ NF Pl Acc _ => stem+i ;+ NF Pl Inst _ => stem+"ами" ;+ NF Pl (Prepos _) _ => stem+"ах" }; g = Masc; anim = Inanimate }; -- 1. Hard regular neuter inanimate, e.g. pravilo.@@ -367,18 +367,18 @@ oper nRegHardNeut : Str ->CommNoun= \stem -> let o = oAfter stem in { s = table {- NF Sg Nom => stem+o ;- NF Sg Gen => stem+"а" ;- NF Sg Dat => stem+"у" ;- NF Sg Acc => stem+o ;- NF Sg Inst => stem+o+"м" ;- NF Sg (Prepos _) => stem+"е" ;- NF Pl Nom => stem+case stem of { _+"к" => "и" ; _ => "а" } ;- NF Pl Gen => stem ;- NF Pl Dat => stem+"ам" ;- NF Pl Acc => stem+"а" ;- NF Pl Inst => stem+"ами" ;- NF Pl (Prepos _) => stem+"ах" };+ NF Sg Nom _ => stem+o ;+ NF Sg Gen _ => stem+"а" ;+ NF Sg Dat _ => stem+"у" ;+ NF Sg Acc _ => stem+o ;+ NF Sg Inst _ => stem+o+"м" ;+ NF Sg (Prepos _) _ => stem+"е" ;+ NF Pl Nom _ => stem+case stem of { _+"к" => "и" ; _ => "а" } ;+ NF Pl Gen _ => stem ;+ NF Pl Dat _ => stem+"ам" ;+ NF Pl Acc _ => stem+"а" ;+ NF Pl Inst _ => stem+"ами" ;+ NF Pl (Prepos _) _ => stem+"ах" }; g = Neut; anim = Inanimate }; -- 1. Hard regular feminine inanimate, e.g. karta.@@ -389,77 +389,77 @@ let i = iAfter stem in let o = oAfter stem in { s = table {- NF Sg Nom => stem+"а" ;- NF Sg Gen => stem+i ;- NF Sg Dat => stem+"е" ;- NF Sg Acc => stem+"у" ;- NF Sg Inst => stem+o+"й" ;- NF Sg (Prepos _) => stem+"е" ;- NF Pl Nom => stem+i ;- NF Pl Gen => stem ;- NF Pl Dat => stem+"ам" ;- NF Pl Acc => stem+i ;- NF Pl Inst => stem+"ами" ;- NF Pl (Prepos _) => stem+"ах" };+ NF Sg Nom _ => stem+"а" ;+ NF Sg Gen _ => stem+i ;+ NF Sg Dat _ => stem+"е" ;+ NF Sg Acc _ => stem+"у" ;+ NF Sg Inst _ => stem+o+"й" ;+ NF Sg (Prepos _) _ => stem+"е" ;+ NF Pl Nom _ => stem+i ;+ NF Pl Gen _ => stem ;+ NF Pl Dat _ => stem+"ам" ;+ NF Pl Acc _ => stem+i ;+ NF Pl Inst _ => stem+"ами" ;+ NF Pl (Prepos _) _ => stem+"ах" }; g = Fem; anim = Inanimate }; -- 2. Soft regular masculine inanimate, e.g. vichr' oper nRegSoftMasc : Str ->CommNoun= \stem -> { s = table {- NF Sg Nom => stem+"ь";- NF Sg Gen => stem+"я" ;- NF Sg Dat => stem+"ю" ;- NF Sg Acc => stem+"ь" ;- NF Sg Inst => stem+"ем" ;- NF Sg (Prepos _) => stem+"е" ;- NF Pl Nom => stem+"и" ;- NF Pl Gen => stem+"ей" ;- NF Pl Dat => stem+"ям" ;- NF Pl Acc => stem+"и" ;- NF Pl Inst => stem+"ями" ;- NF Pl (Prepos _) => stem+"ях" };+ NF Sg Nom _ => stem+"ь";+ NF Sg Gen _ => stem+"я" ;+ NF Sg Dat _ => stem+"ю" ;+ NF Sg Acc _ => stem+"ь" ;+ NF Sg Inst _ => stem+"ем" ;+ NF Sg (Prepos _) _ => stem+"е" ;+ NF Pl Nom _ => stem+"и" ;+ NF Pl Gen _ => stem+"ей" ;+ NF Pl Dat _ => stem+"ям" ;+ NF Pl Acc _ => stem+"и" ;+ NF Pl Inst _ => stem+"ями" ;+ NF Pl (Prepos _) _ => stem+"ях" }; g = Masc; anim = Inanimate }; -- 2. Soft regular neuter inanimate, e.g. more oper nRegSoftNeut : Str ->CommNoun= \stem -> { s = table {- NF Sg Nom => stem+"е";- NF Sg Gen => stem+"я" ;- NF Sg Dat => stem+"ю" ;- NF Sg Acc => stem+"е" ;- NF Sg Inst => stem+"ем" ;- NF Sg (Prepos _) => stem+"е" ;- NF Pl Nom => stem+"я" ;- NF Pl Gen => stem+"ей" ;- NF Pl Dat => stem+"ям" ;- NF Pl Acc => stem+"я" ;- NF Pl Inst => stem+"ями" ;- NF Pl (Prepos _) => stem+"ях" };+ NF Sg Nom _ => stem+"е";+ NF Sg Gen _ => stem+"я" ;+ NF Sg Dat _ => stem+"ю" ;+ NF Sg Acc _ => stem+"е" ;+ NF Sg Inst _ => stem+"ем" ;+ NF Sg (Prepos _) _ => stem+"е" ;+ NF Pl Nom _ => stem+"я" ;+ NF Pl Gen _ => stem+"ей" ;+ NF Pl Dat _ => stem+"ям" ;+ NF Pl Acc _ => stem+"я" ;+ NF Pl Inst _ => stem+"ями" ;+ NF Pl (Prepos _) _ => stem+"ях" }; g = Neut; anim = Inanimate }; -- 2. Soft regular feminine inanimate, e.g. burya oper nRegSoftFem : Str ->CommNoun= \stem -> { s = table {- NF Sg Nom => stem+"я";- NF Sg Gen => stem+"и" ;- NF Sg Dat => stem+"е" ;- NF Sg Acc => stem+"ю" ;- NF Sg Inst => stem+"ей" ;- NF Sg (Prepos _) => stem+"е" ;- NF Pl Nom => stem+"и" ;- NF Pl Gen => stem+"ь" ;- NF Pl Dat => stem+"ям" ;- NF Pl Acc => stem+"и" ;- NF Pl Inst => stem+"ями" ;- NF Pl (Prepos _) => stem+"ях" };+ NF Sg Nom _ => stem+"я";+ NF Sg Gen _ => stem+"и" ;+ NF Sg Dat _ => stem+"е" ;+ NF Sg Acc _ => stem+"ю" ;+ NF Sg Inst _ => stem+"ей" ;+ NF Sg (Prepos _) _ => stem+"е" ;+ NF Pl Nom _ => stem+"и" ;+ NF Pl Gen _ => stem+"ь" ;+ NF Pl Dat _ => stem+"ям" ;+ NF Pl Acc _ => stem+"и" ;+ NF Pl Inst _ => stem+"ями" ;+ NF Pl (Prepos _) _ => stem+"ях" }; g = Fem; anim = Inanimate }; -- 6. Masc ending in -Vй (V = vowel) oper nDecl6Masc : Str ->CommNoun= \stem -> let n = nRegSoftMasc stem in { s = table {- NF Sg (Nom|Acc) => stem+"й";- NF Pl Gen => stem+"ев" ;+ NF Sg (Nom|Acc) _ => stem+"й";+ NF Pl Gen _ => stem+"ев" ; sf => n.s!sf }; g = n.g; anim = n.anim }; @@ -467,7 +467,7 @@ oper nDecl6Neut : Str ->CommNoun= \stem -> let n = nRegSoftNeut stem in { s = table {- NF Pl Gen => stem+"й" ;+ NF Pl Gen _ => stem+"й" ; sf => n.s!sf }; g = n.g; anim = n.anim }; @@ -475,7 +475,7 @@ oper nDecl6Fem : Str ->CommNoun= \stem -> let n = nRegSoftFem stem in { s = table {- NF Pl Gen => stem+"й" ;+ NF Pl Gen _ => stem+"й" ; sf => n.s!sf }; g = n.g; anim = n.anim }; @@ -483,7 +483,7 @@ oper nDecl7Masc : Str ->CommNoun= \stem -> let n = nDecl6Masc stem in { s = table {- NF Sg (Prepos _) => stem+"и" ;+ NF Sg (Prepos _) _ => stem+"и" ; sf => n.s!sf }; g = n.g; anim = n.anim }; @@ -491,7 +491,7 @@ oper nDecl7Neut : Str ->CommNoun= \stem -> let n = nDecl6Neut stem in { s = table {- NF Sg (Prepos _) => stem+"и" ;+ NF Sg (Prepos _) _ => stem+"и" ; sf => n.s!sf }; g = n.g; anim = n.anim }; @@ -499,7 +499,7 @@ oper nDecl7Fem : Str ->CommNoun= \stem -> let n = nDecl6Fem stem in { s = table {- NF Sg (Dat|Prepos _) => stem+"и" ;+ NF Sg (Dat|Prepos _) _ => stem+"и" ; sf => n.s!sf }; g = n.g; anim = n.anim }; @@ -508,35 +508,35 @@ oper nDecl8 : Str ->CommNoun= \stem -> let a : Str = case stem of { _+("ч"|"щ"|"ш"|"ж") => "а"; _ => "я" } in { s = table {- NF Sg Nom => stem+"ь";- NF Sg Gen => stem+"и" ;- NF Sg Dat => stem+"и" ;- NF Sg Acc => stem+"ь" ;- NF Sg Inst => stem+"ью" ;- NF Sg (Prepos _) => stem+"и" ;- NF Pl Nom => stem+"и" ;- NF Pl Gen => stem+"ей" ;- NF Pl Dat => stem+a+"м" ;- NF Pl Acc => stem+"и" ;- NF Pl Inst => stem+a+"ми" ;- NF Pl (Prepos _) => stem+a+"х" };+ NF Sg Nom _ => stem+"ь";+ NF Sg Gen _ => stem+"и" ;+ NF Sg Dat _ => stem+"и" ;+ NF Sg Acc _ => stem+"ь" ;+ NF Sg Inst _ => stem+"ью" ;+ NF Sg (Prepos _) _ => stem+"и" ;+ NF Pl Nom _ => stem+"и" ;+ NF Pl Gen _ => stem+"ей" ;+ NF Pl Dat _ => stem+a+"м" ;+ NF Pl Acc _ => stem+"и" ;+ NF Pl Inst _ => stem+a+"ми" ;+ NF Pl (Prepos _) _ => stem+a+"х" }; g = Fem; anim = Inanimate }; -- 9. Neut ending in -мя oper nDecl9 : Str ->CommNoun= \stem -> { s = table {- NF Sg Nom => stem+"мя";- NF Sg Gen => stem+"мени" ;- NF Sg Dat => stem+"мени" ;- NF Sg Acc => stem+"мя" ;- NF Sg Inst => stem+"менем" ;- NF Sg (Prepos _) => stem+"мени" ;- NF Pl Nom => stem+"мена" ;- NF Pl Gen => stem+"мён" ;- NF Pl Dat => stem+"менам" ;- NF Pl Acc => stem+"мена" ;- NF Pl Inst => stem+"менами" ;- NF Pl (Prepos _) => stem+"менах" };+ NF Sg Nom _ => stem+"мя";+ NF Sg Gen _ => stem+"мени" ;+ NF Sg Dat _ => stem+"мени" ;+ NF Sg Acc _ => stem+"мя" ;+ NF Sg Inst _ => stem+"менем" ;+ NF Sg (Prepos _) _ => stem+"мени" ;+ NF Pl Nom _ => stem+"мена" ;+ NF Pl Gen _ => stem+"мён" ;+ NF Pl Dat _ => stem+"менам" ;+ NF Pl Acc _ => stem+"мена" ;+ NF Pl Inst _ => stem+"менами" ;+ NF Pl (Prepos _) _ => stem+"менах" }; g = Fem; anim = Inanimate }; -- 10. Masc in -oнoк@@ -551,8 +551,8 @@ oper nSplitSgPl : CommNoun -> CommNoun -> CommNoun = \x, y -> {s = table {- NF Sg c => x.s!(NF Sg c) ;- NF Pl c => y.s!(NF Pl c)+ NF Sg c size => x.s!(NF Sg c size) ;+ NF Pl c size => y.s!(NF Pl c size) } ; g = x.g ; anim = y.anim } ;@@ -560,18 +560,18 @@ -- Nouns inflected as adjectives. oper nAdj : Adjective -> Gender ->CommNoun= \a,g -> { s = table {- NF Sg c => a.s!AF c Inanimate (GSg g) ;- NF Pl c => a.s!AF c Inanimate GPl };+ NF Sg c _ => a.s!AF c Inanimate (GSg g) ;+ NF Pl c _ => a.s!AF c Inanimate GPl }; g = g; anim = Inanimate } ; -- Makes a noun animate. oper nAnimate : CommNoun -> CommNoun = \n -> { s = table { - NF Sg Acc => case n.g of {- Masc => n.s!(NF Sg Gen);- _ => n.s!(NF Sg Acc)+ NF Sg Acc size => case n.g of {+ Masc => n.s!(NF Sg Gen size);+ _ => n.s!(NF Sg Acc size) };- NF Pl Acc => n.s!(NF Pl Gen);+ NF Pl Acc size => n.s!(NF Pl Gen size); sf => n.s!sf } ; g = n.g ; anim = Animate @@ -582,90 +582,90 @@ oper nullEndInAnimateDeclStul: Str -> CommNoun = \brat -> {s = table- { NF Sg Nom => brat ;- NF Sg Gen => brat+"а" ;- NF Sg Dat => brat+"у" ;- NF Sg Acc => brat +"а";- NF Sg Inst => brat+"ом" ;- NF Sg (Prepos _) => brat+"е" ;- NF Pl Nom => brat+"ья" ;- NF Pl Gen => brat+"ьев" ;- NF Pl Dat => brat+"ьям" ;- NF Pl Acc => brat +"ьев";- NF Pl Inst => brat+"ьями" ;- NF Pl (Prepos _) => brat+"ьяах"+ { NF Sg Nom _ => brat ;+ NF Sg Gen _ => brat+"а" ;+ NF Sg Dat _ => brat+"у" ;+ NF Sg Acc _ => brat +"а";+ NF Sg Inst _ => brat+"ом" ;+ NF Sg (Prepos _) _ => brat+"е" ;+ NF Pl Nom _ => brat+"ья" ;+ NF Pl Gen _ => brat+"ьев" ;+ NF Pl Dat _ => brat+"ьям" ;+ NF Pl Acc _ => brat +"ьев";+ NF Pl Inst _ => brat+"ьями" ;+ NF Pl (Prepos _) _ => brat+"ьяах" } ; g = Masc ; anim = Inanimate } ; oper nullEndAnimateDeclBrat: Str -> CommNoun = \brat -> {s = table- { NF Sg Nom => brat ;- NF Sg Gen => brat+"а" ;- NF Sg Dat => brat+"у" ;- NF Sg Acc => brat +"а";- NF Sg Inst => brat+"ом" ;- NF Sg (Prepos _) => brat+"е" ;- NF Pl Nom => brat+"ья" ;- NF Pl Gen => brat+"ьев" ;- NF Pl Dat => brat+"ьям" ;- NF Pl Acc => brat +"ьев";- NF Pl Inst => brat+"ьями" ;- NF Pl (Prepos _) => brat+"ьяах"+ { NF Sg Nom _ => brat ;+ NF Sg Gen _ => brat+"а" ;+ NF Sg Dat _ => brat+"у" ;+ NF Sg Acc _ => brat +"а";+ NF Sg Inst _ => brat+"ом" ;+ NF Sg (Prepos _) _ => brat+"е" ;+ NF Pl Nom _ => brat+"ья" ;+ NF Pl Gen _ => brat+"ьев" ;+ NF Pl Dat _ => brat+"ьям" ;+ NF Pl Acc _ => brat +"ьев";+ NF Pl Inst _ => brat+"ьями" ;+ NF Pl (Prepos _) _ => brat+"ьяах" } ; g = Masc ; anim = Animate } ; oper irregPl_StemInAnimateDecl: Str -> CommNoun = \derev -> { s = table- { NF Sg Nom => derev+"о" ;- NF Sg Gen => derev+"а" ;- NF Sg Dat => derev+"у" ;- NF Sg Acc => derev +"о";- NF Sg Inst => derev+"ом" ;- NF Sg (Prepos _) => derev+"е" ;- NF Pl Nom => derev+"ья" ;- NF Pl Gen => derev+"ьев" ;- NF Pl Dat => derev+"ьям" ;- NF Pl Acc => derev +"ья" ;- NF Pl Inst => derev+"ьями" ;- NF Pl (Prepos _) => derev+"ьяах"+ { NF Sg Nom _ => derev+"о" ;+ NF Sg Gen _ => derev+"а" ;+ NF Sg Dat _ => derev+"у" ;+ NF Sg Acc _ => derev +"о";+ NF Sg Inst _ => derev+"ом" ;+ NF Sg (Prepos _) _ => derev+"е" ;+ NF Pl Nom _ => derev+"ья" ;+ NF Pl Gen _ => derev+"ьев" ;+ NF Pl Dat _ => derev+"ьям" ;+ NF Pl Acc _ => derev +"ья" ;+ NF Pl Inst _ => derev+"ьями" ;+ NF Pl (Prepos _) _ => derev+"ьяах" } ; g = Masc ; anim = Inanimate } ; oper kg_oEnd_SgDecl: Str -> CommNoun = \mnog -> { s = table {- NF _ Nom => mnog+"о" ;- NF _ Gen => mnog +"их";- NF _ Dat => mnog+"им" ;- NF _ Acc => mnog+"о" ;- NF _ Inst => mnog+"ими" ;- NF _ (Prepos _) => mnog+"их"+ NF _ Nom _ => mnog+"о" ;+ NF _ Gen _ => mnog +"их";+ NF _ Dat _ => mnog+"им" ;+ NF _ Acc _ => mnog+"о" ;+ NF _ Inst _ => mnog+"ими" ;+ NF _ (Prepos _) _ => mnog+"их" } ; g = Neut ; anim = Inanimate } ; oper oEnd_PlDecl: Str -> CommNoun = \menshinstv -> { s = table {- NF _ Nom => menshinstv+"а" ;- NF _ Gen => menshinstv;- NF _ Dat => menshinstv+"ам" ;- NF _ Acc => menshinstv+"ва" ;- NF _ Inst => menshinstv+"ами" ;- NF _ (Prepos _) => menshinstv+"вах"+ NF _ Nom _ => menshinstv+"а" ;+ NF _ Gen _ => menshinstv;+ NF _ Dat _ => menshinstv+"ам" ;+ NF _ Acc _ => menshinstv+"ва" ;+ NF _ Inst _ => menshinstv+"ами" ;+ NF _ (Prepos _) _ => menshinstv+"вах" } ; g = Neut ; anim = Inanimate } ; oper oEnd_SgDecl: Str -> CommNoun = \bolshinstv -> {s = table {- NF _ Nom => bolshinstv+"о" ;- NF _ Gen => bolshinstv+"а" ;- NF _ Dat => bolshinstv+"у" ;- NF _ Acc => bolshinstv+"о" ;- NF _ Inst => bolshinstv+"ом" ;- NF _ (Prepos _) => bolshinstv+"е"+ NF _ Nom _ => bolshinstv+"о" ;+ NF _ Gen _ => bolshinstv+"а" ;+ NF _ Dat _ => bolshinstv+"у" ;+ NF _ Acc _ => bolshinstv+"о" ;+ NF _ Inst _ => bolshinstv+"ом" ;+ NF _ (Prepos _) _ => bolshinstv+"е" } ; g = Neut ; anim = Inanimate } ;@@ -677,18 +677,18 @@ oper eEnd_Decl: Str -> CommNoun = \vs -> { s = table {- NF Sg Nom => vs+"е" ;- NF Sg Gen => vs+"ех" ;- NF Sg Dat => vs+"ем" ;- NF Sg Acc => vs+"ех" ;- NF Sg Inst => vs+"еми" ;- NF Sg (Prepos _) => vs+"ех" ;- NF Pl Nom => vs+"е" ;- NF Pl Gen => vs +"ех";- NF Pl Dat => vs+"ем" ;- NF Pl Acc => vs+ "ех" ;- NF Pl Inst => vs+"еми" ;- NF Pl (Prepos _) => vs+"ех"+ NF Sg Nom _ => vs+"е" ;+ NF Sg Gen _ => vs+"ех" ;+ NF Sg Dat _ => vs+"ем" ;+ NF Sg Acc _ => vs+"ех" ;+ NF Sg Inst _ => vs+"еми" ;+ NF Sg (Prepos _) _ => vs+"ех" ;+ NF Pl Nom _ => vs+"е" ;+ NF Pl Gen _ => vs +"ех";+ NF Pl Dat _ => vs+"ем" ;+ NF Pl Acc _ => vs+ "ех" ;+ NF Pl Inst _ => vs+"еми" ;+ NF Pl (Prepos _) _ => vs+"ех" } ; g = Neut ; anim = Inanimate } ;@@ -803,7 +803,7 @@ vseDetPl: Adjective = extAdjFromSubst (eEnd_Decl "вс") ; extAdjFromSubst: CommNoun -> Adjective = \ vse ->- {s = \\af => vse.s ! NF (numAF af) (caseAF af) } ;+ {s = \\af => vse.s ! NF (numAF af) (caseAF af) plg } ; oper totDet: Adjective = {s = table {@@ -1015,8 +1015,6 @@ } ; -} -- ---- 2 Adverbs -- --oper vsegda: Adverb = { s = "всегда" } ;@@ -1037,7 +1035,48 @@ -- +++ MG_UR: new conjugation class 'Foreign' introduced +++ param Conjugation = First | FirstE | Second | SecondA | Mixed | Dolzhen | Foreign ; + oper hasConj : Verbum -> Conjugation = \ v ->+ case v.s ! VFORM Act VINF of {+ -- irregular first+ _+("бр"|"стел"|"поч"|"зижд"|"б"|"в"|"л"|"п"|"ш"|"гн"|"ж"|"зыб"|"шиб")+"ить"+(""|"ся") => First ;+ -- irregular second+ _+("блест"|"бол"|"вел"|"верт"|"вид"|"вис"|"галд"|"гляд"|"гор"|"грем"|"гуд"|"гунд"|"дуд"+ |"завис"|"звен"|"зр"|"зуд"|"кип"|"киш"|"копт"|"корп"|"кряхт"|"лет"|"ненавид"|"обид"+ |"перд"|"пыхт"|"сверб"|"свирист"|"свист"|"сид"|"сип"|"скорб"|"скрип"|"смерд"|"смотр"|"соп"+ |"тарахт"|"терп"|"храп"|"хруст"|"шелест"|"шелест")+"еть"+(""|"ся") => Second ;+ _+("бренч"|"брюзж"|"бурч"|"верещ"|"визж"|"ворч"|"гн"|"дребезж"|"дыш"|"держ"|"дрож"|"жужж"|"журч"+ |"звуч"|"крич"|"леж"|"молч"|"мыч"|"пищ"|"рыч"|"слыш"|"сп"|"стуч"|"торч"|"трещ"+ |"урч"|"фырч"|"шурш"|"шкварч")+"ать"+(""|"ся") => SecondA ;+ -- regular first+ _+("сто"|"бо")+"ять"+(""|"ся") => SecondA ;+ stem+("е"|"а"|"о"|"у"|"я"|"ы")+"ть" => First;+ -- regular second+ stem+"ить" => Second;+ -- default+ stem+"ть" => First+ } ; + oper verbStem : Verbum -> Str = \ v ->+ case v.s ! VFORM Act VINF of {+ stem+"ть" => stem ;+ stem+"ти" => stem ;+ stem+"и" => stem+ } ;++ oper verbHasEnding : Verbum -> Str = \ v ->+ case v.s ! (VFORM Act (VIND GPl (VPresent P3))) of {+ _+"ут" => "ущ" ;+ _+"ют" => "ющ" ;+ _+"ат" => "ащ" ;+ _+"ят" => "ящ"+ } ;++ oper stemHasEnding : Str -> Str = \ s ->+ case s of {+ _+("а"|"е"|"ё"|"и"|"о"|"у"|"э"|"ю"|"я") => "вш" ;+ _ => "ш"+ } ;+ --3 First conjugation (in Present) verbs : oper verbIdti : Verbum = verbDecl Imperfective First "ид" "у" "шел" "иди" "идти"; @@ -1312,5 +1351,16 @@ Inst => masha + "ей"; (Prepos _) => masha + "е" }; g = Fem ; anim = anim };++ -- Люберцы, Нидерланды+ mkProperNamePl : Str -> Animacy -> ProperName = \lubercy, anim ->+ let a : Str = case lubercy of {_+("ч"|"щ"|"ш"|"ж") => "а"; _ => "о" } in+ { s = table { Nom => lubercy + "ы";+ Gen => lubercy + a + "в";+ Dat => lubercy + "ам";+ Acc => lubercy + "ы";+ Inst => lubercy + "ей";+ (Prepos _) => lubercy + "ах" };+ g = Neut ; anim = anim }; };
@@ -6,13 +6,27 @@ lin DetCN kazhduj okhotnik = { - s = \\c => case kazhduj.c of { - Nom => - kazhduj.s ! AF (extCase c) okhotnik.anim (gennum okhotnik.g kazhduj.n) ++ - okhotnik.s ! NF kazhduj.n (extCase c) ; - _ => - kazhduj.s ! AF (extCase c) okhotnik.anim (gennum okhotnik.g kazhduj.n) ++ - okhotnik.s ! NF kazhduj.n kazhduj.c }; + s = \\c => case kazhduj.size of { + nom => + kazhduj.s ! AF (extCase c) okhotnik.anim (gennum okhotnik.g kazhduj.n) ++ + okhotnik.s ! NF kazhduj.n (extCase c) nom ; + sgg => + case kazhduj.c of { + Nom => + kazhduj.s ! AF (extCase c) okhotnik.anim (gennum okhotnik.g kazhduj.n) ++ + okhotnik.s ! NF Sg Gen sgg; + _ => + kazhduj.s ! AF (extCase c) okhotnik.anim (gennum okhotnik.g kazhduj.n) ++ + okhotnik.s ! NF Pl kazhduj.c sgg } ; + plg => + case kazhduj.c of { + Nom => + kazhduj.s ! AF (extCase c) okhotnik.anim (gennum okhotnik.g kazhduj.n) ++ + okhotnik.s ! NF Pl Gen plg ; + _ => + kazhduj.s ! AF (extCase c) okhotnik.anim (gennum okhotnik.g kazhduj.n) ++ + okhotnik.s ! NF Pl kazhduj.c plg } + }; n = kazhduj.n ; p = P3 ; pron = False; @@ -71,17 +85,19 @@ } ; DetQuantOrd quant num ord = { - s = \\af => quant.s !af ++ num.s! (caseAF af) ! (genAF af) ++ ord.s!af ; + s = \\af => quant.s !af ++ num.s ! (genAF af) ! (animAF af) ! (caseAF af) ++ ord.s!af ; n = num.n ; g = quant.g; - c = quant.c + c = quant.c; + size = quant.size } ; DetQuant quant num = { - s = \\af => quant.s !af ++ num.s! (caseAF af) ! (genAF af) ; + s = \\af => quant.s !af ++ num.s ! (genAF af) ! (animAF af) ! (caseAF af); n = num.n ; g = quant.g; - c = quant.c + c = quant.c; + size = num.size } ; {- DetArtOrd quant num ord = { @@ -101,7 +117,7 @@ -- MassDet = {s = \\_=>[] ; c=Nom; g = PNoGen; n = Sg} ; MassNP okhotnik = { - s = \\c => okhotnik.s ! NF Sg (extCase c) ; + s = \\c => okhotnik.s ! NF Sg (extCase c) nom ; n = Sg ; p = P3 ; pron = False; @@ -131,11 +147,11 @@ anim = okhotnik.anim } ; -} - PossPron p = {s = \\af => p.s ! mkPronForm (caseAF af) No (Poss (gennum (genAF af) (numAF af) )); c=Nom; g = PNoGen} ; + PossPron p = {s = \\af => p.s ! mkPronForm (caseAF af) No (Poss (gennum (genAF af) (numAF af) )); c=Nom; g = PNoGen; size = nom} ; NumCard c = c ; - NumSg = {s = \\_,_ => [] ; n = Sg} ; - NumPl = {s = \\_,_ => [] ; n = Pl} ; + NumSg = {s = \\_,_,_ => [] ; n = Sg ; size = nom} ; + NumPl = {s = \\_,_,_ => [] ; n = Pl ; size = plg} ; OrdNumeral numeral = variants {} ; ---- TODO; needed to compile Constructors OrdDigits numeral = variants {} ; ---- TODO; needed to compile Constructors @@ -143,14 +159,14 @@ -- {s = \\ af => (uy_j_EndDecl (numeral.s ! caseAF af ! genAF af)).s!af} ; NumNumeral n = n ; - NumDigits n = {s = \\_,_ => n.s ; n = n.n} ; + NumDigits n = {s = \\_,_,_ => n.s ; n = n.n ; size = n.size } ; - AdNum adn num = {s = \\c,n => adn.s ++ num.s!c!n ; n = num.n} ; + AdNum adn num = {s = \\c,a,n => adn.s ++ num.s!c!a!n ; n = num.n ; size = num.size} ; OrdSuperl a = {s = a.s!Posit}; - DefArt = {s = \\_=>[] ; c=Nom; g = PNoGen }; - IndefArt = { s = \\_=>[] ; c=Nom; g = PNoGen }; + DefArt = {s = \\_=>[] ; c=Nom; g = PNoGen; size = nom }; + IndefArt = { s = \\_=>[] ; c=Nom; g = PNoGen; size = nom }; UseN noun = noun ; UseN2 noun = noun ; @@ -165,9 +181,9 @@ ComplN2 f x = { s = \\nf => case x.pron of { - True => x.s ! (case nf of {NF n c => mkPronForm c No (Poss (gennum f.g n))}) ++ f.s ! nf ; + True => x.s ! (case nf of {NF n c size => mkPronForm c No (Poss (gennum f.g n))}) ++ f.s ! nf ; False => f.s ! nf ++ f.c2.s ++ - x.s ! (case nf of {NF n c => mkPronForm f.c2.c Yes (Poss (gennum f.g n))}) + x.s ! (case nf of {NF n c size => mkPronForm f.c2.c Yes (Poss (gennum f.g n))}) }; g = f.g ; anim = f.anim @@ -205,7 +221,8 @@ -- later, in the chapter on verbs. AdjCN ap cn = { - s = \\nf => ap.s ! case nf of {NF n c => AF c cn.anim (gennum cn.g n)} ++ + s = \\nf => ap.s ! case nf of {NF Sg Gen sgg => AF Nom cn.anim GPl ; + NF n c size => AF c cn.anim (gennum cn.g n)} ++ cn.s ! nf ; g = cn.g ; anim = cn.anim @@ -231,14 +248,14 @@ } ; RelCN idea x = { - s = \\nf => idea.s ! nf ++ case nf of {NF n c => x.s ! (gennum idea.g n)!c!idea.anim} ; + s = \\nf => idea.s ! nf ++ case nf of {NF n c size => x.s ! (gennum idea.g n)!c!idea.anim} ; g = idea.g ; anim = idea.anim } ; ---- AR 17/12/2008 ApposCN cn s = { - s = \\nf => cn.s ! nf ++ s.s ! (case nf of {NF n c => PF c No NonPoss}) ; + s = \\nf => cn.s ! nf ++ s.s ! (case nf of {NF n c size => PF c No NonPoss}) ; g = cn.g ; anim = cn.anim } ;
@@ -5,98 +5,221 @@ flags coding=utf8 ; -- Toiska, 13/8/2000, AR with Arto Mustajoki. +-- Nikita Frolov, 2011 -lincat Digit = {s : DForm => Gender => Str ; size : Size} ; -lincat Sub10 = {s : Place => DForm => Gender => Str ; size : Size} ; -lincat Sub100 = {s : Place => Gender => Str ; size : Size} ; -lincat Sub1000 = {s : Place => Gender => Str ; size : Size} ; -lincat Sub1000000 = {s : Gender => Str} ; +lincat Digit = {s : DForm => Gender => Animacy => Case => Str ; size : Size} ; +lincat Sub10 = {s : Place => DForm => Gender => Animacy => Case => Str ; size : Size} ; +lincat Sub100 = {s : Place => Gender => Animacy => Case => Str ; size : Size} ; +lincat Sub1000 = {s : Place => Gender => Animacy => Case => Str ; size : Size} ; +lincat Sub1000000 = {s : Gender => Animacy => Case => Str ; size : Size} ; -lin num x = {s = table{ _ => x.s } ; n = Pl}; ---- n TODO ; Size? AR 18/12/2007 +lin num x = {s = \\ g,a,c => x.s ! g ! a ! c; n = Pl ; size = x.size}; lin n2 = - {s = table {unit => table {Fem => "две" ; _ => "два"} ; - teen => gg "двенадцать" ; - ten => gg "двадцать" ; - hund => gg "двести"} ; + {s = table {unit => \\ g, a, c => + case <c, g, a> of { + <(Nom|Acc), Fem, Inanimate > => "две"; + <(Nom|Acc), _, Inanimate > => "два"; + <(Nom|Acc), _, Animate > => "двух"; + <(Gen|Prepos _), _, _ > => "двух"; + <Dat, _, _ > => "двум"; + <Inst, _, _ > => "двумя" + }; + teen => nadsat "две" ; + ten => n2030 "два" ; + hund => \\ g, a, c => + case <c, g> of { + <(Nom|Acc), _ > => "двести"; + <Gen, _ > => "двухсот"; + <Dat, _ > => "двумстам"; + <Inst, _ > => "двумяюстами"; + <Prepos _, _ > => "двухстах"} } ; size = sgg} ; lin n3 = - {s = table {unit => gg "три" ; - teen => gg "тринадцать" ; - ten => gg "тридцать" ; - hund => gg "триста"} ; + {s = table {unit => tri ; + teen => nadsat "три" ; + ten => n2030 "три" ; + hund => sta tri} ; size = sgg} ; lin n4 = - {s = table {unit => gg "четыре" ; - teen => gg "четырнадцать" ; - ten => gg "сорок" ; - hund => gg "четыреста"} ; + {s = table {unit => chetyre ; + teen => nadsat "четыр" ; + ten => \\ g, a, c => + case <c, g> of { + <(Nom|Acc), _ > => "сорок"; + <(Gen|Dat|Inst|Prepos _), _ > => "сорока" } ; + hund => sta chetyre } ; size = sgg} ; lin n5 = - {s = table {unit => gg "пять" ; - teen => gg "пятнадцать" ; - ten => gg "пятьдесят" ; - hund => gg "пятьсот"} ; + {s = table {unit => n59 "пят" ; + teen => nadsat "пят" ; + ten => n5070 "пят" ; + hund => sot (n59 "пят")} ; size = plg} ; lin n6 = - {s = table {unit => gg "шесть" ; - teen => gg "шестнадцать" ; - ten => gg "шестьдесят" ; - hund => gg "шестьсот"} ; + {s = table {unit => n59 "шест" ; + teen => nadsat "шест" ; + ten => n5070 "шест" ; + hund => sot (n59 "шест")} ; size = plg} ; lin n7 = - {s = table {unit => gg "семь" ; - teen => gg "семнадцать" ; - ten => gg "семьдесят" ; - hund => gg "семьсот"} ; + {s = table {unit => n59 "сем" ; + teen => nadsat "сем" ; + ten => n5070 "сем" ; + hund => sot (n59 "сем") } ; size = plg} ; lin n8 = - {s = table {unit => gg "восемь" ; - teen => gg "восемнадцать" ; - ten => gg "восемьдесят" ; - hund => gg "восемьсот"} ; + {s = table {unit => vosem ; + teen => nadsat "восем" ; + ten => \\ g, a, c => + case <c, g> of { + <(Nom|Acc), _ > => "восемьдесят"; + <(Gen|Dat|Prepos _), _ > => "восьмидесяти" ; + <Inst, _ > => "восемьюдесятью" + }; + hund => sot vosem + } ; size = plg} ; lin n9 = - {s = table {unit => gg "девять" ; - teen => gg "девятнадцать" ; - ten => gg "девяносто" ; - hund => gg "девятьсот"} ; + {s = table {unit => n59 "девят" ; + teen => nadsat "девят" ; + ten => \\ g, a, c => + case <c, g> of { + <(Nom|Acc), _ > => "девяносто"; + <(Gen|Dat|Inst|Prepos _), _ > => "девяноста" + }; + hund => sot (n59 "девят") } ; size = plg} ; +oper n59 : Str -> (Gender => Animacy => Case => Str) = \ n -> \\ g, a, c => + case <c, g> of { + <(Nom|Acc), _ > => n + "ь"; + <(Gen|Dat|Prepos _), _ > => n + "и"; + <Inst, _ > => n + "ью" + }; +oper n2030 : Str -> (Gender => Animacy => Case => Str) = \ n -> \\ g, a, c => + case <c, g> of { + <(Nom|Acc), _ > => n + "дцать"; + <(Gen|Dat|Prepos _), _ > => n + "дцати" ; + <Inst, _ > => n + "дцатью" + }; + +oper n5070 : Str -> (Gender => Animacy => Case => Str) = \ n -> \\ g, a, c => + case <c, g> of { + <(Nom|Acc), _ > => n + "ьдесят"; + <(Gen|Dat|Prepos _), _ > => n + "идесяти" ; + <Inst, _ > => n + "ьюдесятью" + }; + +oper tri : Gender => Animacy => Case => Str = \\ g, a, c => + case <c, g> of { + <(Nom|Acc), _ > => "три"; + <(Gen|Prepos _), _ > => "трех"; + <Dat, _ > => "трем"; + <Inst, _ > => "тремя" + }; + +oper chetyre : Gender => Animacy => Case => Str = \\ g, a, c => + case <c, g> of { + <(Nom|Acc), _ > => "четыре"; + <(Gen|Prepos _), _ > => "четырех"; + <Dat, _ > => "четырем"; + <Inst, _ > => "четырьмя" + }; + +oper vosem : Gender => Animacy => Case => Str = \\ g, a, c => + case <c, g> of { + <(Nom|Acc), _ > => "восемь"; + <(Gen|Dat|Prepos _), _ > => "восьми"; + <Inst, _ > => "восемью" + }; + +-- a little tribute to Burgess +oper nadsat : Str -> (Gender => Animacy => Case => Str) = \ n -> \\ g, a, c => + case <c, g> of { + <(Nom|Acc), _ > => n + "надцать"; + <(Gen|Dat|Prepos _), _ > => n + "надцати"; + <Inst, _ > => n + "надцатью" + }; + +oper sta : (Gender => Animacy => Case => Str) -> (Gender => Animacy => Case => Str) = \ n -> \\ g, a, c => + case <c, g> of { + <(Nom|Acc), _ > => n ! Fem ! Animate ! c + "ста"; + <Gen, _ > => n ! Fem ! Animate ! c + "сот"; + <Dat, _ > => n ! Fem ! Animate ! c + "стам"; + <Inst, _ > => n ! Fem ! Animate ! c + "юстами"; + <Prepos _, _ > => n ! Fem ! Animate ! c + "стах" + }; + +oper sot : (Gender => Animacy => Case => Str) -> (Gender => Animacy => Case => Str) = \ n -> \\ g, a, c => + case <c, g> of { + <(Nom|Acc), _ > => n ! Fem ! Animate ! c + "сот"; + <Gen, _ > => n ! Fem ! Animate ! c + "сот"; + <Dat, _ > => n ! Fem ! Animate ! c + "стам"; + <Inst, _ > => n ! Fem ! Animate ! c + "юстами"; + <Prepos _, _ > => n ! Fem ! Animate ! c + "ста" + }; + lin pot01 = - {s = table {attr => table {hund => gg "сто" ; _ => gg []} ; - _ => table {hund => gg "сто" ; - _ => table {Masc => "один" ; Fem => "одна" ; _ => "одно"}}} ; + {s = table {attr => table {hund => \\ g, a, c => + case <g, a, c> of { + <_, _, (Nom|Acc) > => "сто"; + <_, _, (Gen|Dat|Prepos _) > => "ста"; + <_, _, Inst > => "сотней" + }; + _ => \\ g, a, c => []} ; + _ => table {hund => \\ g, a, c => + case <g, a, c> of { + <_, _, (Nom|Acc) > => "сто"; + <_, _, (Gen|Dat|Prepos _) > => "ста"; + -- TODO: case agreement with nouns + <_, _, Inst > => "сотней" + }; + _ => \\ g, a, c => + case <g, a, c> of { + <Masc, Animate, Acc> => "одного"; + <Masc, Inanimate, Acc> => "один"; + <Masc, _, Nom > => "один"; + <Masc, _, Gen > => "одного"; + <Masc, _, Dat > => "одному"; + <Masc, _, Inst > => "одним"; + <Masc, _, Prepos _ > => "одном"; + <Fem, _, Nom > => "одна"; + <Fem, _, (Gen|Dat|Inst|Prepos _) > => "одной"; + <Fem, _, Acc> => "одну"; + <Neut, _, (Nom|Acc) > => "одно"; + <Neut, _, Gen > => "одного"; + <Neut, _, Dat > => "одному"; + <Neut, _, Inst > => "одним"; + <Neut, _, Prepos _ > => "одном"}}} ; size = nom} ; lin pot0 d = {s = table {_ => d.s} ; size = d.size} ; lin pot110 = - {s = table {_ => gg "десяти"} ; size = plg} ; --- {s = table {_ => gg "десять"} ; size = plg} ; + {s = \\ p => n59 "десять" ; size = plg} ; lin pot111 = - {s = table {_ => gg "одиннадцать"} ; size = plg} ; --- 11 + {s = \\ p => nadsat "один" ; size = plg} ; --- 11 lin pot1to19 d = - {s = table {_ => d.s ! teen} ; size = plg} ; + {s = table {_ => d.s ! teen} ; size = d.size} ; lin pot0as1 n = {s = table {p => n.s ! p ! unit} ; size = n.size} ; lin pot1 d = {s = table {_ => d.s ! ten} ; size = plg} ; --- lin pot1plus d e = - {s = table {_ => - table {g => d.s ! ten ! g ++ e.s ! indep ! unit ! g}} ; size = e.size} ; + {s = table {_ => \\ g, a, c => d.s ! ten ! g ! a ! c ++ e.s ! indep ! unit ! g ! a ! c} ; size = e.size} ; lin pot1as2 n = {s = n.s ; size = n.size} ; lin pot2 d = {s = table {p => d.s ! p ! hund} ; size = plg} ; lin pot2plus d e = - {s = table {p => table {g => d.s ! p ! hund ! g ++ e.s ! indep ! g}} ; size = e.size} ; + {s = \\ p, g, a, c => d.s ! p ! hund ! g ! a ! c ++ e.s ! indep ! g ! a ! c ; size = e.size} ; lin pot2as3 n = - {s = n.s ! indep} ; + {s = n.s ! indep ; size = n.size} ; lin pot3 n = - {s = gg (n.s ! attr ! Fem ++ mille ! n.size)} ; + {s = \\ g, a, c => n.s ! attr ! Fem ! a ! c ++ mille ! n.size ; size = n.size} ; lin pot3plus n m = - {s = table {g => n.s ! attr ! Fem ++ mille ! n.size ++ m.s ! indep ! g}} ; + {s = \\ g, a, c => n.s ! attr ! Fem ! a ! c ++ mille ! n.size ++ m.s ! indep ! g ! a ! c ; size = m.size} ; --- TODO --- raz/odin @@ -107,36 +230,39 @@ Dig = TDigit ; lin - IDig d = {s = d.s ; n = d.n} ; + IDig d = {s = d.s ; n = d.n ; size = d.size} ; IIDig d i = { s = d.s ++ i.s ; - n = Pl + n = Pl ; + size = i.size } ; - D_0 = mkDig "0" ; - D_1 = mk3Dig "1" "1" Sg ; ---- - D_2 = mkDig "2" ; - D_3 = mkDig "3" ; - D_4 = mkDig "4" ; - D_5 = mkDig "5" ; - D_6 = mkDig "6" ; - D_7 = mkDig "7" ; - D_8 = mkDig "8" ; - D_9 = mkDig "9" ; + D_0 = mk2Dig "0" plg ; + D_1 = mk4Dig "1" "1" Sg nom ; ---- + D_2 = mk2Dig "2" sgg ; + D_3 = mk2Dig "3" sgg ; + D_4 = mk2Dig "4" sgg ; + D_5 = mk2Dig "5" plg ; + D_6 = mk2Dig "6" plg ; + D_7 = mk2Dig "7" plg ; + D_8 = mk2Dig "8" plg ; + D_9 = mk2Dig "9" plg ; oper - mk2Dig : Str -> Str -> TDigit = \c,o -> mk3Dig c o Pl ; - mkDig : Str -> TDigit = \c -> mk2Dig c (c + "o") ; + mk3Dig : Str -> Str -> Size -> TDigit = \c,o,size -> mk4Dig c o Pl size ; + mk2Dig : Str -> Size -> TDigit = \c,size -> mk3Dig c (c + "o") size ; - mk3Dig : Str -> Str -> Number -> TDigit = \c,o,n -> { + mk4Dig : Str -> Str -> Number -> Size -> TDigit = \c,o,n,size -> { s = c ; ---- gender - n = n + n = n ; + size = size } ; TDigit = { n : Number ; - s : Str + s : Str ; + size : Size } ; }
@@ -101,7 +101,7 @@ -- Proper names. - mkPN : Str -> Gender -> Animacy -> PN ; -- "Иван", "Маша"+ mkPN : Str -> Gender -> Number -> Animacy -> PN ; -- "Иван", "Маша" nounPN : N -> PN ; @@ -130,6 +130,7 @@ -- Adjectives with irregular comparative. mkA : (positive, comparative : Str) -> A ;+ } ; -- Two-place adjectives need a preposition and a case as extra arguments.@@ -284,7 +285,7 @@ mkIndeclinableNoun = \s,g, anim -> {- s = table { NF _ _ => s } ;+ s = table { NF _ _ _ => s } ; g = g ; anim = anim } ** {lock_N = <>};@@ -295,19 +296,19 @@ nomPl, genPl, datPl, accPl, instPl, preposPl, g, anim -> { s = table { - NF Sg Nom => nomSg ;- NF Sg Gen => genSg ;- NF Sg Dat => datSg ;- NF Sg Acc => accSg ;- NF Sg Inst => instSg ;- NF Sg (Prepos PrepOther) => preposSg ;- NF Sg (Prepos PrepVNa) => prepos2Sg ;- NF Pl Nom => nomPl ;- NF Pl Gen => genPl ;- NF Pl Dat => datPl ;- NF Pl Acc => accPl ;- NF Pl Inst => instPl ;- NF Pl (Prepos _) => preposPl+ NF Sg Nom _ => nomSg ;+ NF Sg Gen _ => genSg ;+ NF Sg Dat _ => datSg ;+ NF Sg Acc _ => accSg ;+ NF Sg Inst _ => instSg ;+ NF Sg (Prepos PrepOther) _ => preposSg ;+ NF Sg (Prepos PrepVNa) _ => prepos2Sg ;+ NF Pl Nom _ => nomPl ;+ NF Pl Gen _ => genPl ;+ NF Pl Dat _ => datPl ;+ NF Pl Acc _ => accPl ;+ NF Pl Inst _ => instPl ;+ NF Pl (Prepos _) _ => preposPl } ; g = g ; anim = anim@@ -361,12 +362,15 @@ mkN3 f p2 p3 = (UseN f) ** {c2 = p2; c3 = p3; lock_N3 = <>} ; - mkPN = \ivan, g, anim -> - case g of { - Masc => mkProperNameMasc ivan anim ; - _ => mkProperNameFem ivan anim+ mkPN = \ivan, g, n, anim -> + case n of {+ Sg => case g of { + Masc => mkProperNameMasc ivan anim ; + _ => mkProperNameFem ivan anim+ } ;+ Pl => mkProperNamePl ivan anim } ** {lock_PN =<>};- nounPN n = {s=\\c => n.s! NF Sg c; anim=n.anim; g=n.g; lock_PN=<>};+ nounPN n = {s=\\c => n.s! NF Sg c nom; anim=n.anim; g=n.g; lock_PN=<>}; -- On the top level, it is maybe $CN$ that is used rather than $N$, and -- $NP$ rather than $PN$.@@ -377,7 +381,7 @@ makeCN = UseN; - makeNP = \x,y,z -> UsePN (mkPN x y z) ;+ makeNP = \x,y,z -> UsePN (mkPN x y singular z) ; mkA = overload { mkA : (positive : Str) -> A = mk1A ;@@ -409,6 +413,40 @@ } } ** {lock_A = <>}; ++ oper mkParticiple : Voice -> VTense -> V -> A = \voice, tense, v ->+ let vstem = verbStem v in+ let actpres = verbHasEnding v in+ let actpast = stemHasEnding vstem in+ let passpast = case hasConj v of {+ (First|FirstE) => "ем" ;+ (Second|SecondA) => "им" ;+ _ => "ем"+ } in+ case <voice, tense> of {+ <Act, VPresent _> => mkA (vstem + actpres + "ий") ;+ <Act, VPast> => mkA (vstem + actpast + "ий") ;+ <Pass, VPresent _> => mkA (vstem + "нный") ;+ <Pass, VPast> => mkA (vstem + passpast + "ый") ;+ _ => mkA "" -- Russian participles do not have a future tense+ } ;++ oper mkActPresParticiple : V -> A = mkParticiple Act (VPresent P3) ;+ oper mkActPastParticiple : V -> A = mkParticiple Act (VPresent P3) ;+ oper mkPassPresParticiple : V -> A = mkParticiple Pass VPast ;+ oper mkPassPastParticiple : V -> A = mkParticiple Pass VPast ;++ oper mkGerund : VTense -> V -> Adv = \tense, v ->+ let vstem = verbStem v in+ let suffix = case hasConj v of {+ SecondA => "а" ;+ _ => "я"+ } in+ case tense of {+ VPresent _ => mkAdv (vstem + suffix) ;+ VPast => mkAdv (vstem + "в") ;+ _ => mkAdv "" -- Russian gerunds do not have a future tense+ } ; mkA2 a p c= a ** {c2 = {s=p; c=c}; lock_A2 = <>}; -- mkADeg a s = mkAdjDeg a s ** {lock_ADeg = <>}; -- defined in morpho.RusU
@@ -17,8 +17,8 @@ UttNP np = {s = np.s ! PF Acc No NonPoss} ; UttVP vp = {s = vp.s ! ClInfinit ! GSg Masc ! P3} ; UttAdv adv = adv ;- UttCN n = {s = n.s ! NF Sg Nom} ;- UttCard n = {s = n.s ! Nom ! Neut} ;+ UttCN n = {s = n.s ! NF Sg Nom nom} ;+ UttCard n = {s = n.s ! Neut ! Inanimate ! Nom} ; UttAP ap = {s = ap.s ! AF Nom Inanimate (GSg Neut)} ; ---- gennum ? (AR) NoPConj = {s = []} ;
@@ -36,10 +36,10 @@ {s = \\pf => case kakoj.c of { Nom => kakoj.s ! AF (extCase pf) okhotnik.anim (gennum okhotnik.g kakoj.n) ++ - okhotnik.s ! NF kakoj.n (extCase pf) ; + okhotnik.s ! NF kakoj.n (extCase pf) nom ; _ => kakoj.s ! AF (extCase pf) okhotnik.anim (gennum okhotnik.g kakoj.n) ++ - okhotnik.s ! NF kakoj.n kakoj.c };+ okhotnik.s ! NF kakoj.n kakoj.c plg }; n = kakoj.n ; p = P3 ; pron = False;@@ -61,7 +61,7 @@ IdetQuant kakoj pyat = -- okhotnik = {s = \\af => kakoj.s ! pyat.n ! af ++- pyat.s ! caseAF af ! genAF af ;+ pyat.s ! genAF af ! animAF af ! caseAF af ; n = pyat.n ; g = kakoj.g ; c = kakoj.c
@@ -31,6 +31,7 @@ -- Anteriority = Simul | Anter ; ClForm = ClIndic RusTense Anteriority | ClCondit | ClInfinit | ClImper; -- "naked infinitive" clauses+-- DetForm = NonNum | Few | Many ; -- A number of Russian nouns have common gender. They can -- denote both males and females: "умница" (a clever person), "инженер" (an engineer).@@ -77,7 +78,7 @@ -- For the sake of shorter description these parameters are -- combined in the type SubstForm. param- NForm = NF Number Case ;+ NForm = NF Number Case Size ; -- Real parameter types (i.e. ones on which words and phrases depend) @@ -124,7 +125,9 @@ p : Person ; g: PronGen ; anim : Animacy ; pron: Bool} ; mkNP : Number -> CommNoun -> NounPhrase = \n,chelovek -> - {s = \\cas => chelovek.s ! NF n (extCase cas) ;+ {s = \\cas => chelovek.s ! NF n (extCase cas) (case n of {+ Sg => nom ;+ Pl => plg }); n = n ; g = PGen chelovek.g ; p = P3 ; pron =False ; anim = chelovek.anim } ;@@ -316,6 +319,9 @@ oper caseAF: AdjForm -> Case = \af -> case af of { AdvF => Nom; AFShort _ => Nom; AF c _ _ => c } ;++oper animAF: AdjForm -> Animacy = \af ->+ case af of { AF _ a _ => a ; _ => Inanimate } ; -- The Degree parameter should also be more complex, since most Russian -- adjectives have two comparative forms:
@@ -14,7 +14,7 @@ above_Prep = { s = "над" ; c = Inst} ; after_Prep = { s = "после" ; c = Gen }; -- all8mass_Det = vesDet ** {n = Sg; g = PNoGen; c = Nom} ; - all_Predet = vseDetPl ** { g = PNoGen; c = Nom} ; + all_Predet = vseDetPl ** { g = PNoGen; c = Nom; size = nom} ; almost_AdA = {s= "почти"} ; almost_AdN = {s= "почти"} ; although_Subj = ss "хотя" ;@@ -33,11 +33,11 @@ during_Prep = { s = ["в течение"] ; c = Gen}; either7or_DConj = sd2 "либо" [", либо"] ** {n = Sg} ; -- comma is not visible in GUI!- every_Det = kazhdujDet ** {n = Sg ; g = PNoGen; c= Nom} ; + every_Det = kazhdujDet ** {n = Sg ; g = PNoGen; c= Nom; size = nom} ; everybody_NP = mkNP Pl (UseN ((eEnd_Decl "вс")**{lock_N=<>})) ; everything_NP = UsePron (pronVseInanimate ** {lock_Pron=<>}) ; everywhere_Adv = ss "везде" ;- few_Det = nemnogoSgDet **{lock_Det= <>; n= Sg; g = PNoGen; c = Nom};+ few_Det = nemnogoSgDet **{lock_Det= <>; n= Sg; g = PNoGen; c = Nom; size = plg}; --- DEPREC first_Ord = (uy_j_EndDecl "перв" ) ** {lock_A = <>}; --AStaruyj for_Prep = { s = "для" ; c = Gen }; from_Prep = { s = "от" ; c = Gen };@@ -47,25 +47,26 @@ here7from_Adv = ss "отсюда" ; how_IAdv = ss "как" ; how8many_IDet = skolkoSgDet ** {n = Pl; g = (PGen Neut); c= Gen}; + how8much_IAdv = ss "сколько" ; i_Pron = pronYa ; if_Subj = ss "если" ; in8front_Prep = { s = "перед" ; c = Inst}; in_Prep = { s = "в" ; c = Prepos PrepVNa } ; it_Pron = pronOno ; less_CAdv = {s="менее"; p=""} ;- many_Det = mnogoSgDet ** {n = Sg; g = (PGen Neut); c= Gen} ; + many_Det = mnogoSgDet ** {n = Sg; g = (PGen Neut); c= Gen; size = plg} ; more_CAdv = {s="более"; p=""} ;- most_Predet = bolshinstvoSgDet ** {n = Sg; g = (PGen Neut); c= Gen} ; + most_Predet = bolshinstvoSgDet ** {n = Sg; g = (PGen Neut); c= Gen; size = plg} ; -- inanimate, Sg: "большинство телефонов безмолству-ет" -- most8many_Det = bolshinstvoPlDet ** {n = Pl; g = (PGen Neut); c= Gen} ; -- animate, Pl: "большинство учащихся хорошо подготовлен-ы"- much_Det = mnogoSgDet ** {n = Sg; g = (PGen Neut); c= Gen} ; -- same as previous+ much_Det = mnogoSgDet ** {n = Sg; g = (PGen Neut); c= Gen; size = plg} ; -- same as previous must_VV = verbDolzhen ; no_Utt = ss ["Нет"] ; on_Prep = { s = "на" ; c = Prepos PrepVNa }; --- DEPREC one_Quant = odinDet ** {lock_QuantSg = <>; n= Sg; g = PNoGen; c = Nom }; --AStaruyj :- only_Predet = (uy_j_EndDecl "единственн" ) ** {lock_Predet = <>; n= Sg; g = PNoGen; c = Nom };+ only_Predet = (uy_j_EndDecl "единственн" ) ** {lock_Predet = <>; n= Sg; g = PNoGen; c = Nom; size = nom }; or_Conj = {s1= [] ; s2 = "или" ; n = Sg} ; otherwise_PConj = ss "иначе" ; part_Prep = { s = "" ; c = Nom}; -- missing in Russian@@ -75,17 +76,17 @@ she_Pron = pronOna ; so_AdA = ss "так"; somebody_NP = UsePron (pronKtoTo** {lock_Pron = <>});- someSg_Det = nekotorujDet ** {n = Sg; g = PNoGen; c= Nom} ;- somePl_Det = nekotorujDet ** {n = Pl; g = PNoGen; c= Nom} ; + someSg_Det = nekotorujDet ** {n = Sg; g = PNoGen; c= Nom; size = nom} ;+ somePl_Det = nekotorujDet ** {n = Pl; g = PNoGen; c= Nom; size = nom} ; something_NP = UsePron (pronChtoTo** {lock_Pron=<> }) ; somewhere_Adv = ss "где-нибудь" ;- that_Quant = totDet ** {n = Sg; g = PNoGen; c= Nom} ;+ that_Quant = totDet ** {n = Sg; g = PNoGen; c= Nom; size = nom} ; there_Adv = ss "там" ; there7to_Adv = ss "туда" ; there7from_Adv = ss "оттуда" ; therefore_PConj = ss "следовательно" ; they_Pron = pronOni;- this_Quant = etotDet ** {n = Sg; g = PNoGen; c= Nom} ;+ this_Quant = etotDet ** {n = Sg; g = PNoGen; c= Nom; size = nom} ; through_Prep = { s = "через" ; c = Acc }; to_Prep = { s = "к" ; c = Dat }; too_AdA = ss "слишком" ;@@ -114,6 +115,9 @@ youPol_Pron = pronVu; have_V2= P.dirV2 (P.regV P.imperfective P.first "име" "ю" "имел" "имей" "иметь" );+ have_V3 = P.mkV3 (P.mkV P.imperfective "есть" "есть" "есть" "есть" "есть" "есть" "был" "будь" "есть") "" "у" Nom Gen;++ have_not_V3 = P.mkV3 (P.mkV P.imperfective "нет" "нет" "нет" "нет" "нет" "нет" "не было" "не будь" "нет") "" "у" Gen Gen; --- NoDet = nikakojDet ** {n = Sg; g = PNoGen; c= Nom} ; --- AnyDet = lubojDet ** {n = Sg; g = PNoGen; c= Nom} ;
@@ -2,31 +2,31 @@ concrete SymbolRus of Symbol = CatRus ** open Prelude, ResRus in { -{- TODO!+{- TODO! -} lin- SymbPN i = {s = addGenitiveS i.s ; g = Neutr} ;- IntPN i = {s = addGenitiveS i.s ; g = Neutr} ;- FloatPN i = {s = addGenitiveS i.s ; g = Neutr} ;- NumPN i = {s = i.s ; g = Neutr} ;- CNIntNP cn i = {- s = \\c => cn.s ! Sg ! Nom ++ (addGenitiveS i.s) ! c ;- a = agrgP3 Sg cn.g- } ;- CNSymbNP det cn xs = {- s = \\c => det.s ++ cn.s ! det.n ! Nom ++ (addGenitiveS xs.s) ! c ; - a = agrgP3 det.n cn.g- } ;- CNNumNP cn i = {- s = \\c => cn.s ! Sg ! Nom ++ i.s ! c ;- a = agrgP3 Sg cn.g- } ;+ SymbPN i = {s = table {_ => i.s} ; g = Neut; anim = Inanimate } ;+ IntPN i = {s = table {_ => i.s} ; g = Neut; anim = Inanimate } ;+ FloatPN i = {s = table {_ => i.s} ; g = Neut; anim = Inanimate } ;+ NumPN n = {s = table {_ => n.s ! Neut ! Inanimate ! Nom} ; g = Neut; anim = Inanimate } ; + CNIntNP cn i = {s = \\cas => cn.s ! NF Sg (extCase cas) nom ++ i.s;+ n = Sg ; p = P3 ;+ g = PGen cn.g ; anim = cn.anim ; pron = False } ;+ CNNumNP cn n = {s = \\cas => cn.s ! NF Sg (extCase cas) nom+ ++ n.s ! cn.g ! cn. anim ! (extCase cas) ;+ n = Sg ; p = P3 ;+ g = PGen cn.g ; anim = cn.anim ; pron = False } ;++ CNSymbNP d cn ss = {s = \\cas => cn.s ! NF Sg (extCase cas) nom;+ n = Sg ; p = P3 ;+ g = PGen cn.g ; anim = cn.anim ; pron = False } ;+ SymbS sy = sy ; - SymbNum sy = { s = addGenitiveS sy.s ; n = Pl ; hasCard = True } ;- SymbOrd sy = { s = \\c => sy.s ++ (regGenitiveS "th")!c} ;--}+ SymbNum sy = { s = \\_,_,_=>sy.s; n=Pl ; size = plg }; + SymbOrd sy = { s = \\af => sy.s } ;+ lincat Symb, [Symb] = SS ;@@ -34,7 +34,7 @@ lin MkSymb s = s ; --- BaseSymb = infixSS "and" ;+ BaseSymb = infixSS "и" ; ConsSymb = infixSS "," ;
@@ -53,7 +53,8 @@ }; -- infinitive does not save GenNum, -- but indicative does for the sake of adjectival predication !- ClIndic Present _ => zloj.s ! AF Nom Animate gn ;+-- ClIndic Present _ => zloj.s ! AF Nom Animate gn ;+ ClIndic Present _ => zloj.s ! AFShort gn ; ClIndic PastRus _ => case gn of { (GSg Fem) => "была" ++ zloj.s! AF Nom Animate (GSg Fem); (GSg Masc) => "был" ++ zloj.s! AF Nom Animate (GSg Masc);@@ -86,19 +87,19 @@ CompCN zloj ={ s= \\clf,gn,p => let num = numGenNum gn ;- zlojsg = zloj.s ! NF Sg Nom ;- zlojpl = zloj.s ! NF Pl Nom+ zlojsg = zloj.s ! NF Sg Nom nom ;+ zlojpl = zloj.s ! NF Pl Nom plg in case clf of { -- person is ignored !- ClInfinit => "быть" ++ zloj.s ! NF Sg Inst ; + ClInfinit => "быть" ++ zloj.s ! NF Sg Inst nom ; ClImper => case gn of - { (GSg _) => "будь" ++ zloj.s ! NF Sg Inst ;- GPl => "будьте" ++ zloj.s ! NF Pl Inst + { (GSg _) => "будь" ++ zloj.s ! NF Sg Inst plg ;+ GPl => "будьте" ++ zloj.s ! NF Pl Inst plg }; -- infinitive does not save GenNum, -- but indicative does for the sake of adjectival predication !- ClIndic Present _ => zloj.s ! NF num Nom ;+ ClIndic Present _ => zloj.s ! NF num Nom nom ; ClIndic PastRus _ => case gn of { (GSg Fem) => "была" ++ zlojsg ; (GSg Masc) => "был" ++ zlojsg ;
@@ -1,5 +1,5 @@ incomplete concrete CatScand of Cat = - CommonX ** open ResScand, Prelude, CommonScand, (R = ParamX) in {+ CommonX -[Tense,Temp] ** open (RS = ResScand), Prelude, CommonScand, (R = ParamX) in { flags optimize=all_subs ; @@ -9,14 +9,14 @@ S = {s : Order => Str} ; QS = {s : QForm => Str} ;- RS = {s : Agr => Str ; c : NPForm} ;+ RS = {s : Agr => RCase => Str ; c : NPForm} ; SSlash = {s : Order => Str ; n3 : Agr => Str ; c2 : Complement} ; -- Sentence - Cl = {s : R.Tense => Anteriority => Polarity => Order => Str} ;+ Cl = {s : STense => Anteriority => Polarity => Order => Str} ; ClSlash = {- s : R.Tense => Anteriority => Polarity => Order => Str ; + s : STense => Anteriority => Polarity => Order => Str ; n3 : Agr => Str ; c2 : Complement } ;@@ -24,7 +24,7 @@ -- Question - QCl = {s : R.Tense => Anteriority => Polarity => QForm => Str} ;+ QCl = {s : STense => Anteriority => Polarity => QForm => Str} ; IP = {s : NPForm => Str ; g : Gender ; n : Number} ; IComp = {s : AFormPos => Str} ; IDet = {s : NGender => Str ; n : Number ; det : DetSpecies} ;@@ -32,7 +32,7 @@ -- Relative; the case $c$ is for "det" clefts. - RCl = {s : R.Tense => Anteriority => Polarity => Agr => Str ; c : NPForm} ;+ RCl = {s : STense => Anteriority => Polarity => Agr => RCase => Str ; c : NPForm} ; RP = {s : Gender => Number => RCase => Str ; a : RAgr} ; -- Verb@@ -102,4 +102,9 @@ N3 = Noun ** {c2,c3 : Complement} ; PN = {s : Case => Str ; g : Gender} ; +++ lincat+ Temp = {s : Str ; t : STense ; a : Anteriority} ;+ Tense = {s : Str ; t : STense} ; }
@@ -59,7 +59,7 @@ ; VPForm = - VPFinite Tense Anteriority+ VPFinite STense Anteriority | VPImperat | VPInfinit Anteriority ; @@ -73,6 +73,17 @@ PredetAgr = PNoAg | PAg Number ; + STense =+ SPres + | SPast --# notpresent+ | SFut --# notpresent+ | SFutKommer --# notpresent -- komma att+ | SCond --# notpresent+ ;++++ oper Complement : Type = {s : Str ; hasPrep : Bool} ; @@ -121,10 +132,10 @@ -- Used in $DiffScand.predV$. - vFin : Tense -> Voice -> VForm = \t,v -> case t of {- Pres => VF (VPres v) + vFin : STense -> Voice -> VForm = \t,v -> case t of {+ SPres => VF (VPres v) ; --# notpresent- Past => VF (VPret v) ; --# notpresent+ SPast => VF (VPret v) ; --# notpresent _ => VI (VInfin v) --# notpresent } ; @@ -315,7 +326,7 @@ -- For $Sentence$. Clause : Type = {- s : Tense => Anteriority => Polarity => Order => Str+ s : STense => Anteriority => Polarity => Order => Str } ; mkClause : Str -> Agr -> VP -> Clause = \subj,agr,vp -> {
@@ -17,7 +17,7 @@ isPre = ss.isPre } ; - ConjRS conj ss = conjunctDistrTable Agr conj ss ** {+ ConjRS conj ss = conjunctDistrTable2 Agr RCase conj ss ** { c = ss.c } ; @@ -43,8 +43,8 @@ ConsNP xs x = consrTable NPForm comma xs x ** {a = conjAgr xs.a x.a} ; BaseAP x y = twoTable AFormPos x y ** {isPre = andB x.isPre y.isPre} ; ConsAP xs x = consrTable AFormPos comma xs x ** {isPre = andB xs.isPre x.isPre} ;- BaseRS x y = twoTable Agr x y ** {c = y.c} ;- ConsRS xs x = consrTable Agr comma xs x ** {c = xs.c} ;+ BaseRS x y = twoTable2 Agr RCase x y ** {c = y.c} ;+ ConsRS xs x = consrTable2 Agr RCase comma xs x ** {c = xs.c} ; BaseIAdv = twoSS ; ConsIAdv = consrSS comma ; BaseCN = twoTable3 Number DetSpecies Case ;@@ -56,7 +56,7 @@ [IAdv] = {s1,s2 : Str} ; [NP] = {s1,s2 : NPForm => Str ; a : Agr} ; [AP] = {s1,s2 : AFormPos => Str ; isPre : Bool} ;- [RS] = {s1,s2 : Agr => Str ; c : NPForm} ;+ [RS] = {s1,s2 : Agr => RCase => Str ; c : NPForm} ; [CN] = {s1,s2 : Number => DetSpecies => Case => Str} ; --- g : NGender ; isMod : Bool} ; }
@@ -42,7 +42,9 @@ verbBecome : Verb ; - auxFut : Str ;+ auxFut : Str ; -- ska+ auxFutKommer : Str ; -- "kommer" + auxFutPart : Str ; -- "til" auxCond : Str ; negation : Polarity => Str ;
@@ -2,19 +2,26 @@ open CommonScand,Coordination,ResScand, ParamX in { lin GenNP np = {- s,sp = \\n,_,_,g => np.s ! NPPoss (gennum (ngen2gen g) n) Nom ; + s = \\n,_,_,g => np.s ! NPPoss (gennum (ngen2gen g) n) Nom ; + sp = \\_,_,_,_ => NONEXIST ; det = DDef Indef } ; ComplBareVS v s = insertObj (\\_ => s.s ! Sub) (predV v) ; + CompBareCN cn = {s = \\a => case a.n of { + Sg => cn.s ! Sg ! DIndef ! Nom ;+ Pl => cn.s ! Pl ! DIndef ! Nom+ }+ } ;+ StrandRelSlash rp slash = {- s = \\t,a,p,ag => + s = \\t,a,p,ag,_ => rp.s ! ag.g ! ag.n ! RNom ++ slash.s ! t ! a ! p ! Sub ++ slash.c2.s ; c = NPAcc } ; EmptyRelSlash slash = {- s = \\t,a,p,ag => + s = \\t,a,p,ag,_ => slash.s ! t ! a ! p ! Sub ++ slash.c2.s ; c = NPAcc } ;@@ -86,7 +93,7 @@ IAdvAdv adv = {s = hur_IAdv.s ++ adv.s} ; lincat- Foc = {s : ParamX.Tense => Anteriority => Polarity => Str} ;+ Foc = {s : STense => Anteriority => Polarity => Str} ; lin FocObj np cls = {@@ -104,4 +111,5 @@ UseFoc t p foc = {s = t.s ++ p.s ++ foc.s ! t.t ! t.a ! p.p} ; + oper NONEXIST : Str = "#¿@§X?X&%/" ; }
@@ -1,3 +1,5 @@ abstract ExtraScandAbs = Extra ** {-+ + fun --# notpresent+ TFutKommer : Tense ; --# notpresent }
@@ -176,13 +176,13 @@ } ; RelCN cn rs = let g = cn.g in {- s = \\n,d,c => cn.s ! n ! d ! c ++ rs.s ! agrP3 (ngen2gen g) n ;+ s = \\n,d,c => cn.s ! n ! d ! c ++ rs.s ! agrP3 (ngen2gen g) n ! RNom ; g = g ; isMod = cn.isMod } ; RelNP np rs = {- s = \\c => np.s ! c ++ "," ++ rs.s ! np.a ;+ s = \\c => np.s ! c ++ "," ++ rs.s ! np.a ! RNom ; a = np.a ; isMod = np.isMod } ;
@@ -6,19 +6,19 @@ lin RelCl cl = {- s = \\t,a,p,ag => + s = \\t,a,p,ag,_ => pronSuch ! gennumAgr ag ++ conjThat ++ cl.s ! t ! a ! p ! Sub ; c = NPAcc } ; RelVP rp vp = {- s = \\t,ant,b,ag => + s = \\t,ant,b,ag,rc => let agr = case rp.a of { RNoAg => ag ; RAg g n p => {g = g ; n = n ; p = p} } ;- cl = mkClause (rp.s ! ag.g ! ag.n ! RNom) agr vp+ cl = mkClause (rp.s ! ag.g ! ag.n ! rc) agr vp in cl.s ! t ! ant ! b ! Sub ; c = NPNom@@ -29,7 +29,7 @@ -- and the empty relative ("huset hon bor i") are defined in $ExtraScand$. RelSlash rp slash = {- s = \\t,a,p,ag => + s = \\t,a,p,ag,_ => let agr = case rp.a of { RNoAg => ag ;
@@ -16,15 +16,20 @@ Noun = {s : Number => Species => Case => Str ; g : NGender} ; --- This function is here because it depends on $verbHave, auxFut, auxCond$.+-- needed for VP conjunction+ param+ VPIForm = VPIInf | VPISup ; ---- sup not yet used - predV : Verb -> VP = \verb -> ++-- This function is here because it depends on $verbHave, auxFut, auxCond$.+ oper+ predV : Verb -> VP = \verb -> let diath = case verb.vtype of { VPass => Pass ; _ => Act } ;- vfin : Tense -> Str = \t -> verb.s ! vFin t diath ;+ vfin : STense -> Str = \t -> verb.s ! vFin t diath ; vsup = verb.s ! VI (VSupin diath) ; --# notpresent vinf = verb.s ! VI (VInfin diath) ; @@ -32,8 +37,9 @@ True => verbBe.s ; _ => verbHave.s } ;+ - har : Tense -> Str = \t -> auxv ! vFin t Act ;+ har : STense -> Str = \t -> auxv ! vFin t Act ; ha : Str = auxv ! VI (VInfin Act) ; vf : Str -> Str -> {fin,inf : Str} = \fin,inf -> {@@ -43,16 +49,18 @@ in { s = table { VPFinite t Simul => case t of {--- Pres | Past => vf (vfin t) [] ; -- the general rule- Past => vf (vfin t) [] ; --# notpresent- Fut => vf auxFut vinf ; --# notpresent- Cond => vf auxCond vinf ; --# notpresent- Pres => vf (vfin t) []+-- SPres | SPast => vf (vfin t) [] ; -- the general rule+ SPast => vf (vfin t) [] ; --# notpresent+ SFut => vf auxFut vinf ; --# notpresent+ SFutKommer => vf auxFutKommer (auxFutPart ++ infMark ++ vinf) ; --# notpresent+ SCond => vf auxCond vinf ; --# notpresent+ SPres => vf (vfin t) [] } ; VPFinite t Anter => case t of { --# notpresent- Pres | Past => vf (har t) vsup ; --# notpresent- Fut => vf auxFut (ha ++ vsup) ; --# notpresent- Cond => vf auxCond (ha ++ vsup) --# notpresent+ SPres | SPast => vf (har t) vsup ; --# notpresent+ SFut => vf auxFut (ha ++ vsup) ; --# notpresent+ SFutKommer => vf auxFutKommer (auxFutPart ++ infMark ++ ha ++ vsup) ; --# notpresent+ SCond => vf auxCond (ha ++ vsup) --# notpresent } ; --# notpresent VPImperat => vf (verb.s ! VF (VImper diath)) [] ; VPInfinit Anter => vf [] (ha ++ vsup) ; --# notpresent@@ -67,10 +75,6 @@ ext : Str = [] ; en2,ea2,eext : Bool = False -- indicate if the field exists } ;---- needed for VP conjunction- param- VPIForm = VPIInf | VPISup ; ---- sup not yet used }
@@ -48,7 +48,7 @@ s = \\q => t.s ++ p.s ++ cl.s ! t.t ! t.a ! p.p ! q } ; UseRCl t p cl = {- s = \\r => t.s ++ p.s ++ cl.s ! t.t ! t.a ! p.p ! r ;+ s = \\r,rc => t.s ++ p.s ++ cl.s ! t.t ! t.a ! p.p ! r ! rc ; c = cl.c } ; UseSlash t p cl = {@@ -60,6 +60,6 @@ AdvS a s = {s = \\o => a.s ++ s.s ! Inv} ; ExtAdvS a s = {s = \\o => a.s ++ "," ++ s.s ! Inv} ; - RelS s r = {s = \\o => s.s ! o ++ "," ++ r.s ! agrP3 Neutr Sg} ; --- vilket+ RelS s r = {s = \\o => s.s ! o ++ "," ++ r.s ! agrP3 Neutr Sg ! RPrep True } ; --- vilket }
@@ -0,0 +1,22 @@+incomplete concrete TenseScand of Tense = + CatScand [Tense,Temp], TenseX [Ant,Pol,AAnter,ASimul,PNeg,PPos] ** + open ResScand, CommonScand in {++ lin++ TTAnt t a = {s = a.s ++ t.s ; a = a.a ; t = t.t} ;+ TPres = {s = []} ** {t = SPres} ;+ TPast = {s = []} ** {t = SPast} ; --# notpresent+ TFut = {s = []} ** {t = SFut} ; --# notpresent+ TCond = {s = []} ** {t = SCond} ; --# notpresent++param + STense =+ SPres+ | SPast --# notpresent+ | SFut --# notpresent+ | SFutKommer --# notpresent+ | SCond --# notpresent+ ;++}
@@ -0,0 +1,40 @@+concrete AdjectiveSnd of Adjective = CatSnd ** open ResSnd, Prelude in { + + flags coding = utf8; + lin + + PositA a = a ; + UseComparA a = a; + + ComparA a np = { +-- s = \\n,g,c => np.s ! NPC Obl ++ "کان" ++ a.s ! n ! g ! c ; + s = \\n,g,c => np.s ! NPC Abl ++ "کان" ++ a.s ! n ! g ! c ; + } ; + +---- $SuperlA$ belongs to determiner syntax in $Noun$. + + ComplA2 a np = { + s = \\n,g,c => np.s ! NPC Obl ++ a.c2 ++ a.s ! n ! g ! c ; + } ; + + ReflA2 a = { + s = \\n,g,c => a.s ! n ! g ! c ++ RefPron ++ "سان" ; + } ; + + SentAP ap sc = { + s = \\n,g,c => ap.s ! n ! g ! c ++ sc.s ; + } ; + + AdAP ada ap = { + s = \\n,g,c => ada.s ++ ap.s ! n ! g ! c ; + } ; + + UseA2 a = a ; + + CAdvAP cadv ap np = { + s = \\n,g,c => cadv.s ++ ap.s ! n ! g ! c ++ cadv.p ++ np.s ! NPC Dir ; + }; + + AdjOrd ord = { s = \\_,_,_ => ord.s ; }; + +}
@@ -0,0 +1,20 @@+concrete AdverbSnd of Adverb = CatSnd ** open ResSnd, Prelude in { + + flags coding = utf8; + lin + PositAdvAdj a = {s = \\g => a.s ! Sg ! g ! Obl } ; + ComparAdvAdj cadv a np = { + s = \\g => np.s ! NPObj ++ cadv.p ++ cadv.s ++ a.s ! Sg ! g ! Obl ; + } ; + ComparAdvAdjS cadv a s = { + s = \\g => cadv.p ++ cadv.s ++ a.s ! Sg ! g ! Obl ++ s.s; + } ; + + PrepNP prep np = {s = \\_ => np.s ! NPObj ++ prep.s } ; + + AdAdv ada adv = { s = \\g => ada.s ++ adv.s ! g} ; + + SubjS sub snt = {s = \\_ => sub.s ++ snt.s } ; + AdnCAdv cadv = {s = "سان گڏ " ++ cadv.s} ; + +}
@@ -0,0 +1,6 @@+--# -path=.:../abstract:../common:../prelude++concrete AllSnd of AllSndAbs =+ LangSnd,+ ExtraSnd+ ** {} ;
@@ -0,0 +1,4 @@+abstract AllSndAbs =+ Lang,+ ExtraSndAbs+ ** {} ;
@@ -0,0 +1,100 @@+concrete CatSnd of Cat = CommonX - [Adv] ** open ResSnd, Prelude in { + + flags optimize=all_subs ; + + lincat +------ Tensed/Untensed + + S = {s : Str} ; + QS = {s : QForm => Str} ; + RS = {s : Agr => Str ; c : Case} ; -- c for it clefts + SSlash = {s : Str ; c2 : ResSnd.Compl} ; + +---- Sentence + + Cl = ResSnd.Clause ; + ClSlash = { + s : ResSnd.VPHTense => Polarity => Order => Str ; + c2 : ResSnd.Compl + } ; + Imp = {s : CPolarity => ImpForm => Str} ; + +---- Question + QCl = {s : ResSnd.VPHTense => Polarity => QForm => Str} ; + + IP = {s: Case => Str ; g : Gender ; n : Number}; + + IDet = {s :Gender => Str ; n : Number} ; + + IQuant = {s : Number => Gender => Str} ; + +---- Relative + + RCl = { + s : ResSnd.VPHTense => Polarity => Order => Agr => Str ; + c : Case + } ; + RP = {s: Number => Gender => Case => Str ; a:RAgr}; + +---- Verb + + VP = ResSnd.VPH ; + VPSlash = ResSnd.VPHSlash ; + Comp = {s : Agr => Str} ; + +---- Adv + Adv = {s : Gender => Str} ; +---- Adjective + + AP = ResSnd.Adjective1 ; + +---- Noun + + CN = ResSnd.Noun ; + NP = ResSnd.NP ; + + Pron = {s : Case => Str ; ps : Str ; a : Agr}; + + Det = ResSnd.Determiner ; + + Predet = {s : Str} ; + + Num = {s : Str ; n : Number} ; + Card = {s : Str; n : Number} ; + Ord = {s : Str; n : Number} ; + + Quant = {s:Number => Gender => Case => Str ; a:Agr}; + + Art = {s : Str} ; + +---- Numeral + + Numeral = {s : CardOrd => Str ; n : Number} ; + Digits = {s : CardOrd => Str ; n : Number } ; + +---- Structural + + Conj = {s1,s2 : Str ; n : Number} ; +-----b Conj = {s : Str ; n : Number} ; +-----b DConj = {s1,s2 : Str ; n : Number} ; + + + Subj = {s : Str} ; + + Prep = ResSnd.Preposition; +---- Open lexical classes, e.g. Lexicon + + V, VS, VQ, VA = ResSnd.Verb ; -- = {s : VForm => Str} ; + V2, V2A, V2Q, V2S = ResSnd.Verb ** {c2 : Compl} ; + V3 = ResSnd.Verb ** {c2, c3 : Str} ; + VV = ResSnd.Verb ** { isAux : Bool} ; + V2V = ResSnd.Verb ** {c1 : Str ; c2 : Str ; isAux : Bool} ; + A = ResSnd.Adjective1 ; --- {s : Gender => Number => Case => Str} ; + A2 = ResSnd.Adjective1 ** { c2 : Str} ; + + N = {s : Number => Case => Str ; g : Gender} ; + N2 = {s : Number => Case => Str ; g : Gender} ** {c2 : Str ; c3 : Str } ; + N3 = {s : Number => Case => Str ; g : Gender} ** {c2 : Str ; c3 : Str ; c4 : Str} ; + PN = {s : Case => Str ; g : Gender} ; + +}
@@ -0,0 +1,47 @@+--concrete Conjunctionsnd of Conjunction = +-- Catsndu ** open Ressnd, Coordination, Prelude in { + +concrete ConjunctionSnd of Conjunction = + CatSnd ** open ResSnd, Coordination, Prelude in { + + + flags optimize=all_subs ; + + lin + + ConjS = conjunctDistrSS ; + +-- ConjAdv = conjunctDistrSS ; + ConjAdv conj advs = conjunctDistrTable Gender conj advs ; + + ConjNP conj ss = conjunctDistrTable NPCase conj ss ** { + a = conjAgr (agrP3 Masc conj.n) ss.a ; + isPron = ss.isPron ; + } ; + + ConjAP conj ss = conjunctDistrTable3 Number Gender Case conj ss ; + ConjRS conj rs = conjunctDistrTable Agr conj rs ** { c = rs.c}; + +---- These fun's are generated from the list cat's. + + BaseS = twoSS ; + ConsS = consrSS comma ; +-- BaseAdv = twoSS ; + BaseAdv x y = twoTable Gender x y ; +-- ConsAdv = consrSS comma ; + ConsAdv xs x = consrTable Gender comma xs x ; + BaseNP x y = twoTable NPCase x y ** {a = conjAgr x.a y.a ; isPron = andB x.isPron y.isPron} ; + BaseRS x y = twoTable Agr x y ** {c = x.c}; + ConsNP xs x = consrTable NPCase comma xs x ** {a = conjAgr xs.a x.a ; isPron = andB xs.isPron x.isPron} ; + ConsRS xs x = consrTable Agr comma xs x ** { c = xs.c}; + BaseAP x y = twoTable3 Number Gender Case x y ; -- ** {isPre = andB x.isPre y.isPre} ; + ConsAP xs x = consrTable3 Number Gender Case comma xs x ;-- ** {isPre = andB xs.isPre x.isPre} ; + + lincat + [S] = {s1,s2 : Str} ; + [Adv] = {s1,s2 : Gender => Str} ; + [NP] = {s1,s2 : NPCase => Str ; a : Agr ; isPron : Bool} ; + [AP] = {s1,s2 : Number => Gender => Case => Str} ; + [RS] = {s1,s2 : Agr => Str ; c : Case}; + +}
@@ -0,0 +1,170 @@+resource Coordination = open Prelude in {++param+ ListSize = TwoElem | ManyElem ;++oper + ListX = {s1,s2 : Str} ;++ twoStr : (x,y : Str) -> ListX = \x,y -> + {s1 = x ; s2 = y} ; + consStr : Str -> ListX -> Str -> ListX = \comma,xs,x -> + {s1 = xs.s1 ++ comma ++ xs.s2 ; s2 = x } ; ++ twoSS : (_,_ : SS) -> ListX = \x,y -> + twoStr x.s y.s ;+ consSS : Str -> ListX -> SS -> ListX = \comma,xs,x -> + consStr comma xs x.s ;++ Conjunction : Type = SS ;+ ConjunctionDistr : Type = {s1 : Str ; s2 : Str} ;++ conjunctX : Conjunction -> ListX -> Str = \or,xs ->+ xs.s1 ++ or.s ++ xs.s2 ;++ conjunctDistrX : ConjunctionDistr -> ListX -> Str = \or,xs ->+ or.s1 ++ xs.s1 ++ or.s2 ++ xs.s2 ;++ conjunctSS : Conjunction -> ListX -> SS = \or,xs ->+ ss (xs.s1 ++ or.s ++ xs.s2) ;++ conjunctDistrSS : ConjunctionDistr -> ListX -> SS = \or,xs ->+ ss (or.s1 ++ xs.s1 ++ or.s2 ++ xs.s2) ;++ -- all this lifted to tables++ ListTable : Type -> Type = \P -> {s1,s2 : P => Str} ; ++ twoTable : (P : Type) -> (_,_ : {s : P => Str}) -> ListTable P = \_,x,y ->+ {s1 = x.s ; s2 = y.s} ; ++ consTable : (P : Type) -> Str -> ListTable P -> {s : P => Str} -> ListTable P = + \P,c,xs,x ->+ {s1 = table P {o => xs.s1 ! o ++ c ++ xs.s2 ! o} ; s2 = x.s} ; ++ conjunctTable : (P : Type) -> Conjunction -> ListTable P -> {s : P => Str} = + \P,or,xs ->+ {s = table P {p => xs.s1 ! p ++ or.s ++ xs.s2 ! p}} ;++ conjunctDistrTable : + (P : Type) -> ConjunctionDistr -> ListTable P -> {s : P => Str} = \P,or,xs ->+ {s = table P {p => or.s1++ xs.s1 ! p ++ or.s2 ++ xs.s2 ! p}} ;++ -- ... and to two- and three-argument tables: how clumsy! ---++ ListTable2 : Type -> Type -> Type = \P,Q -> + {s1,s2 : P => Q => Str} ; ++ twoTable2 : (P,Q : Type) -> (_,_ : {s : P => Q => Str}) -> ListTable2 P Q = + \_,_,x,y ->+ {s1 = x.s ; s2 = y.s} ; ++ consTable2 : + (P,Q : Type) -> Str -> ListTable2 P Q -> {s : P => Q => Str} -> ListTable2 P Q =+ \P,Q,c,xs,x ->+ {s1 = table P {p => table Q {q => xs.s1 ! p ! q ++ c ++ xs.s2 ! p! q}} ; + s2 = x.s+ } ; ++ conjunctTable2 : + (P,Q : Type) -> Conjunction -> ListTable2 P Q -> {s : P => Q => Str} = + \P,Q,or,xs ->+ {s = table P {p => table Q {q => xs.s1 ! p ! q ++ or.s ++ xs.s2 ! p ! q}}} ;++ conjunctDistrTable2 : + (P,Q : Type) -> ConjunctionDistr -> ListTable2 P Q -> {s : P => Q => Str} = + \P,Q,or,xs ->+ {s = + table P {p => table Q {q => or.s1++ xs.s1 ! p ! q ++ or.s2 ++ xs.s2 ! p ! q}}} ;++ ListTable3 : Type -> Type -> Type -> Type = \P,Q,R -> + {s1,s2 : P => Q => R => Str} ; ++ twoTable3 : (P,Q,R : Type) -> (_,_ : {s : P => Q => R => Str}) -> + ListTable3 P Q R = + \_,_,_,x,y ->+ {s1 = x.s ; s2 = y.s} ; ++ consTable3 : + (P,Q,R : Type) -> Str -> ListTable3 P Q R -> {s : P => Q => R => Str} -> + ListTable3 P Q R =+ \P,Q,R,c,xs,x ->+ {s1 = \\p,q,r => xs.s1 ! p ! q ! r ++ c ++ xs.s2 ! p ! q ! r ; + s2 = x.s+ } ; ++ conjunctTable3 : + (P,Q,R : Type) -> Conjunction -> ListTable3 P Q R -> {s : P => Q => R => Str} = + \P,Q,R,or,xs ->+ {s = \\p,q,r => xs.s1 ! p ! q ! r ++ or.s ++ xs.s2 ! p ! q ! r} ;++ conjunctDistrTable3 : + (P,Q,R : Type) -> ConjunctionDistr -> ListTable3 P Q R -> + {s : P => Q => R => Str} = + \P,Q,R,or,xs ->+ {s = \\p,q,r => or.s1++ xs.s1 ! p ! q ! r ++ or.s2 ++ xs.s2 ! p ! q ! r} ;+ + ---------+ ListTable4 : Type -> Type -> Type -> Type -> Type = \P,Q,R,T -> + {s1,s2 : P => Q => R => T => Str} ; ++ twoTable4 : (P,Q,R,T : Type) -> (_,_ : {s : P => Q => R => T => Str}) -> + ListTable4 P Q R T = + \_,_,_,_,x,y ->+ {s1 = x.s ; s2 = y.s} ; ++ consTable4 : + (P,Q,R,T : Type) -> Str -> ListTable4 P Q R T -> {s : P => Q => R => T => Str} -> + ListTable4 P Q R T =+ \P,Q,R,T,c,xs,x ->+ {s1 = \\p,q,r,t => xs.s1 ! p ! q ! r ! t ++ c ++ xs.s2 ! p ! q ! r ! t ; + s2 = x.s+ } ; ++ conjunctTable4 : + (P,Q,R,T : Type) -> Conjunction -> ListTable4 P Q R T -> {s : P => Q => R => T => Str} = + \P,Q,R,T,or,xs ->+ {s = \\p,q,r,t => xs.s1 ! p ! q ! r ! t ++ or.s ++ xs.s2 ! p ! q ! r ! t} ;++ conjunctDistrTable4 : + (P,Q,R,T : Type) -> ConjunctionDistr -> ListTable4 P Q R T -> + {s : P => Q => R => T => Str} = + \P,Q,R,T,or,xs ->+ {s = \\p,q,r,t => or.s1++ xs.s1 ! p ! q ! r ! t ++ or.s2 ++ xs.s2 ! p ! q ! r ! t} ;+ --------------++ comma = "," ;++-- you can also do this to right-associative lists:++ consrStr : Str -> Str -> ListX -> ListX = \comma,x,xs -> + {s1 = x ++ comma ++ xs.s1 ; s2 = xs.s2 } ; ++ consrSS : Str -> SS -> ListX -> ListX = \comma,x,xs -> + consrStr comma x.s xs ;++ consrTable : (P : Type) -> Str -> {s : P => Str} -> ListTable P -> ListTable P = + \P,c,x,xs ->+ {s1 = table P {o => x.s ! o ++ c ++ xs.s1 ! o} ; s2 = xs.s2} ; ++ consrTable2 : (P,Q : Type) -> Str -> {s : P => Q => Str} -> + ListTable2 P Q -> ListTable2 P Q = + \P,Q,c,x,xs ->+ {s1 = table P {p => table Q {q => x.s ! p ! q ++ c ++ xs.s1 ! p ! q}} ; + s2 = xs.s2+ } ; + consrTable4 : (P,Q,R,T : Type) -> Str -> {s : P => Q => R => T => Str} -> + ListTable4 P Q R T -> ListTable4 P Q R T = + \P,Q,R,T,c,x,xs ->+ {s1 = table P {p => table Q {q => table R { r => table T {t => x.s ! p ! q ! r ! t ++ c ++ xs.s1 ! p ! q ! r ! t}}}} ; + s2 = xs.s2+ } ;+ consrTable3 : (P,Q,R : Type) -> Str -> {s : P => Q => R => Str} -> + ListTable3 P Q R -> ListTable3 P Q R = + \P,Q,R,c,x,xs ->+ {s1 = table P {p => table Q {q => table R {t => x.s ! p ! q ! t ++ c ++ xs.s1 ! p ! q ! t }}} ; + s2 = xs.s2+ } ; +++} ;
@@ -0,0 +1,19 @@+concrete ExtraSnd of ExtraSndAbs = CatSnd ** + open ResSnd, Coordination, Prelude, MorphoSnd, ParadigmsSnd in {++ flags coding = utf8;++ lin+ GenNP np = {s = \\_,_,_ => np.s ! NPC Obl ++ "ڪا" ; a = np.a} ;++ each_Det = mkDet "hر ڪwی" "hر ڪwی" "hر ڪwی" "hر ڪwی" Sg ;+ have_V = mkV "راڪھنا";+ IAdvAdv adv = {s = "ڪتنی" ++ adv.s!Masc} ;+ ICompAP ap = {s = "ڪتنE" ++ ap.s ! Sg ! Masc ! Dir} ;+ cost_V = mkV "قیمت" ;+ + -- added for causitives+ make_CV = mkVerb "نoتhiنگ" ** {c2 = "" };++-- for VP conjunction+}
@@ -0,0 +1,9 @@+abstract ExtraSndAbs = Extra ** { + +-- uncontracted negations; contracted are the default + fun + + each_Det : Det ; + have_V : V; + cost_V : V; +}
@@ -0,0 +1,24 @@+--# -path=.:../abstract:../common:../prelude + + concrete GrammarSnd of Grammar = + NounSnd, + VerbSnd, + AdjectiveSnd, + AdverbSnd, + NumeralSnd, + SentenceSnd, + QuestionSnd, + RelativeSnd, + ConjunctionSnd, + PhraseSnd, + TextX - [Adv], + StructuralSnd, + TenseX - [Adv], + IdiomSnd + ** { + +flags startcat = Phr ; unlexer = text ; lexer = text ; + +} + +
@@ -0,0 +1,40 @@+concrete IdiomSnd of Idiom = CatSnd ** open Prelude,Predef, ResSnd in { + + flags optimize=all_subs ; + flags coding = utf8; + + lin + ImpersCl vp = mkSClause " " (agrP3 Masc Sg) vp ; + GenericCl vp = mkSClause "ڪو۶ی" (agrP3 Masc Sg) vp ; + + CleftNP np rs = + let cl = mkSClause (np.s ! NPC rs.c) (np.a) (predAux auxBe); + in + {s = \\t,p,o => cl.s ! t ! p ! o ++ rs.s ! np.a }; + + CleftAdv ad ss = { s = \\t,b,o => ad.s ! Masc ++ ss.s}; + + ExistNP np = + mkSClause "ھتی" (agrP3 (fromAgr np.a).g (fromAgr np.a).n) + (insertObj (\\_ => np.s ! NPC Dir) (predAux auxBe)) ; + + ExistIP ip = + let cl = mkSClause ("ھتی" ++ ip.s ! Dir) (agrP3 ip.g ip.n) (predAux auxBe); + in { + s = \\t,p,qf => case qf of { + QDir => cl.s ! t ! p ! ODir; + QIndir => cl.s ! t! p ! ODir + } + }; + + ProgrVP vp = (predProg vp) ; + + + ImpPl1 vp = {s = "اچ" ++ (vp.s ! VPReq).inf} ; +-- ImpP3 np vp = {s = np.s!NPC Dir ++ "کی" ++ (vp.s ! VPImp ).inf ++ "ڏی"}; here VPImp form is not correct e.g jan ko sw do, rather jan ko swnE do, and swnE is stored in vp.VPInf.fin + ImpP3 np vp = {s = np.s!NPC Dir ++ "کی" ++ (vp.s ! VPInf ).fin ++ "ڏیو"}; + + + +} +
@@ -0,0 +1,10 @@+--# -path=.:../abstract:../common:../sindhi + +concrete LangSnd of Lang = + GrammarSnd, + LexiconSnd + ** { + +flags startcat = Phr ; unlexer=unwords ; lexer=words ; + +}
@@ -0,0 +1,362 @@+--# -path=.:prelude:alltenses + +concrete LexiconSnd of Lexicon = CatSnd ** +--open ResSnd, Prelude in { + open ParadigmsSnd,MorphoSnd, Prelude in { + + flags + optimize=values ; + coding = utf8; + + lin + + airplane_N = mkN03 "جھاج" ; + answer_V2S = mkV2 (compoundV "جواب" (mkV "ڏیڻ ")) ; + apple_N = mkN03 "سوف" ; + art_N = mkN13 "فن" ; + ask_V2Q = mkV2 (mkV "پڇڻ "); + baby_N = mkN05 "ٻار" ; + bad_A = mkAdj3 "ڪراب" ; + bank_N = mkN03 "بانڪ" ; + beautiful_A = mkAdj1 "پیارو" ; + become_VA = mkV "ٿیڻ "; + beer_N = mkN03 "شراب" ; +--beg_V2V = mkV "پنڻ " ; + big_A = mkAdj1 "وڏو" ; + bike_N = mkN03 "سایچl" ; + bird_N = mkN01 "پکی" ; + black_A = mkAdj1 "ڪارو" ; + blue_A = mkAdj1 "نیرو" ; + boat_N = mkN04 "ڀیری" ; + book_N = mkN03 "ڪتاب" ; + boot_N = mkN01 "جوتو" ; + boss_N = mkN03 "بالادست" ; + boy_N = mkN01 "چوڪرو" ; + bread_N = mkN03 "مانی" ; + break_V2 = mkV2 "ٽورڻ " ; + broad_A = mkAdj1 "ویڪرو" ; +--brother_N2 = mkN10 "ڀا۶ " "جo " ; --not correct + brown_A = mkAdj3 "ناسی" ; + butter_N = mkN13 "مکڻ" ; + buy_V2 = mkV2(compoundV "ئرید " do_V2); + camera_N = mkN01 "ڪیمیرا"; + cap_N = mkN03 "ڻوپY" ; + car_N = mkN03 "گاڏی" ; + carpet_N = mkN01 "تڏو" ; + cat_N = mkN09 "ٻلی" ; + ceiling_N = mkN01 "ڇت" ; + chair_N = mkN09 "ڪرسی" ; + cheese_N = mkN14 "پنیر" ; + child_N = mkN01 "ٻار" ; +--church_N = mkN03 "گرجا" (mkN "گرجا") ; + clean_A = mkAdj3 "ساف" ; + clever_A = mkAdj3 "hوشیار" ; + close_V2 = mkV2 (compoundV "بند" do_V2); + coat_N = mkN03 "ڪوٽ" ; + cold_A = mkAdj1 "ٿڌو" ; + computer_N = mkN03 "ڪمپیوٽر" ; + country_N = mkN03 "مlڪ" ; + cousin_N = mkN03 "س۶وٽ" ; -- a compund noun made of two nouns + cow_N = mkN09 "گان" ; + die_V = mkV "مرڻ " ; + dirty_A = mkAdj1 "میرو" ; +--distance_N3 = mkN3 (mkN "پنڌ") (mkPrep "دا") "دE" "توN" ; + doctor_N = mkN03 "ڊاڪتر" ; + dog_N = mkN01 "ڪتو" ; + door_N = mkN01 "دروزو" ; + drink_V2 = mkV2 "پی۶ڻ "; + easy_A2V = mkA "سولو" "" ; + eat_V2 = mkV2( mkV "کا۶ڻ "); + empty_A = mkAdj3 "ئالی" ; + enemy_N = mkN03 "دشمن" ; + factory_N = mkN02 "ڪارئانو" ; + father_N2 = mkN2 (mkN06 "پی") (mkPrep "جو") "جی" ; + fear_VS = mkV "ڊڄڻ "; + fish_N = mkN09 "مڇی" ; + floor_N = mkN03 "فرش" ; + fridge_N = mkN03 "گرج" ; + friend_N = mkN05 "دوست" ; + fruit_N = mkN13 "ثمر" ; +--fun_AV = mkAdj1V (regA "مزو") ; + garden_N = mkN03 "باغ" ; + girl_N = mkN09 "ڇوڪری" ; + glove_N = mkN01 "دستانو" ; + gold_N = mkN13 "سون" ; + good_A = mkAdj1 "سٺو" ; +-- go_V = mkIrrgV "وڃڻ" "" ; + green_A = mkAdj1 "ساعو" ; + harbour_N = mkN08 "پاناگاھ" ; + hate_V2 = mkV2 (compoundV "نفرت" do_V2) ; + hat_N = mkN01 "توپlو" ; +--have_V = dirV2 (mk5V "ha?ع" "hاس" "hاد" "hاد" "ھجڻ ") ; + hear_V2 = mkV2 (mkV "ٻڌڻ ") ; + hill_N = mkN09 "ٽڪری" ; + hope_VS = (compoundV "امید" do_V2); + horse_N = mkN01 "گورو" ; + hot_A = mkAdj1 "ڪوسو" ; + house_N = mkN03 "گھر" ; + important_A = mkAdj3 "ضروری" ; + industry_N = mkN01 "دندو" ; + iron_N = mkN09 "لوھ " ; + king_N = mkN01 "بادشاھ" ; + know_V2 = mkV2 (mkV "Jاڻڻ") ; + know_VS = (mkV "ڄاڻڻ ") ; + know_VQ = (mkV "ڄاڻڻ ") ; + lake_N = mkN09 "ڍنڍ" ; + lamp_N = mkN09 "بتی " ; + learn_V2 = mkV2 ( mkV "سK'ڻ ") ; + leather_N = mkN01 "چمڙو" ; + leave_V2 = mkV2 (mkV "چڏڻ") ; + like_V2 = mkV2 (compoundV "پصند" do_V2); + listen_V2 = mkV2 (mkV "ئن ڍیڻ ") ; + live_V = mkV "رhڻ " ; ---- touch + long_A = mkAdj1 "ڊگو" ; + lose_V2= mkV2 "hارا۶ڻ " ; + love_N = mkN08 "مھبت" ; + love_V2 = mkV2 (compoundV "عشق" do_V2) "سان"; + man_N = mkN03 "ماڻھو" ;--not correct according to rules should be discussed +--married_A2 = mkAdj1 "پرڻیل" ; + meat_N = mkN01 "کادو" ; + milk_N = mkN13 "کیر" ; + moon_N = mkN13 "چنڊ" ; +--mother_N2 = mkN2(mkN07 "ما۶ " "جو" "جی" );--not covered need to be discussed + mountain_N = mkN03 "جبل" ; + music_N = mkN14 "موسیقی" ; + narrow_A = mkAdj1 "سوڙھو" ; + new_A = mkAdj1 "ن۶ون" ; + newspaper_N = mkN04 "ائبار" ; + oil_N = mkN03 "تیل" ; + old_A = mkAdj1 "پوڙھی" ; +-- open_V2 = mkV2 (mkIrrgV "ئولڻ" "ئوl") ; + paint_V2A = mkV2 (compoundV "رنگ" do_V2) ; + paper_N = mkN01 "پنو" ; +--paris_PN = mkN13 "پیرس" masculine; + peace_N = mkN13 "امن" ; + pen_N = mkN14 "قلم" ; + planet_N = mkN01 "سیارو" ; + plastic_N = mkN13 "مڙندڙ" ; + play_V2 = mkV2 (mkV "راند") ; + policeman_N = mkN05 "سپاھی" ; + priest_N = mkN05 "پیغمبر" ; +--probable_AS = mkAdj1S (regA "امڪان" ) ; + queen_N = mkN09 "شھزادی" ; + radio_N = mkN01 "باجو" ; +--rain_V0 = compoundV "مینھن" ""; + red_A = mkAdj1 "ڳاڙھو" ; -- worst case + religion_N = mkN03 "مزھب" ; + restaurant_N = mkN05 "ھوٽl" ; + river_N = mkN12 "دریا" ; + rock_N = mkN08 "ٽڪری" ; + roof_N = mkN14 "ڇت" ; + rubber_N = mkN13 "ربڙ" ; + run_V = mkV "ڊوڙڻ " ; + say_VS = mkV "چوڻ " ; + school_N = mkN03 "اسڪول" ; + science_N = mkN13 "ساعنص" ; + sea_N = mkN14 "سمنڊ" ; + seek_V2 = mkV2 (compoundV "تlاش" do_V2) ; + see_V2 = mkV2 (mkV "ڏسڻ ") ; + sell_V = mkV "وڪڻڻ "; + send_V= mkV "موڪلڻ "; + sheep_N = mkN09 "رڍ" ; + ship_N = mkN03 "جhاز" ; + shirt_N = mkN01 "چولو"; + shoe_N = mkN01 "جوتو" ; + shop_N = mkN03 "دوڪان" ; + short_A = mkAdj1 "ننڍو " ; + silver_N = mkN14 "چاندی" ; + sister_N = mkN11 "ٻیڻ " ; + sleep_V = mkV "سمھڻ " ; + small_A = mkAdj1 "ننڍو" ; + snake_N = mkN03 "نانگ" ; + sock_N = mkN04 "جوراب" ; + speak_V2 = mkV2 (mkV "غالh۶ڻ ") ; + star_N = mkN01 "شروعات" ; + steel_N = mkN13 "استیل" ; + stone_N = mkN05 "پٽر" ; + stove_N = mkN01 "چلھو" ; + student_N = mkN05 "شاگرد" ; + stupid_A = mkAdj1 "چریو" ; + sun_N = mkN13 "سج" ; + switch8off_V2 = mkV2 (mkV "ھلاعت") ; + switch8on_V2 = mkV2 (compoundV "بند" do_V2) ; + table_N = mkN04 "میز" ; + talk_V = mkV "غالhاعڻ "; + teacher_N = mkN05 "استاد" ; + teach_V = mkV "سیکارڻ "; + television_N = mkN14 "تیلیوزن" ; + thick_A = mkAdj1 "موتو" ; + thin_A = mkAdj1 "سنھو" ; + train_N = mkN09 "ریل" ; + travel_V = (compoundV "سفر" do_V2) ; + tree_N = mkN13 "وڻ " ; + trousers_N = mkN01 "پاجامو" ; + ugly_A = mkAdj3 "بدسورت" ; + understand_V = mkV "سمجھڻ "; + university_N = mkN09 "یونیورسٽY" ; + village_N = mkN03 "غوٺ " ; + wait_V2 = mkV2 (compoundV "انتظار" (mkV "انتظار")) ; + walk_V = mkV "ھلڻ " ; + warm_A = mkAdj3 "گرم" ; + war_N = mkN03 "جنگ" ; + watch_V2 = mkV2 (mkV "ڍسڻ ") ; + water_N = mkN14 "پاڻی" ; -- not covered masculine ending with y + white_A = mkAdj1 "اڇو" ; + window_N = mkN09 "دری" ; + wine_N = mkN04 "شراب"; + win_V = mkV"کٽڻ " ; + woman_N = mkN09 "استری" ; + wonder_VQ = compoundV "ھیران"(mkV "ٿیڻ ") ; + wood_N = mkN13 "ڪاٺ" ; + write_V = mkV "لئڻ " ; + yellow_A = mkAdj1 "پیلو" ; + young_A = mkAdj3 "جوان" ; + do_V2 = mkV2 (mkV "ڪرڻ ") ; + now_Adv = mkAdv "ھاڻی" ; +--already_Adv = mkAdj1dv "پھریاعین" ; + song_N = mkN01 "گانو" ; +-- number_N = mkN03 "انگ" ; + put_V = mkV "وجڻ " ; + stop_V = mkV "بیھڻ " ; + jump_V = compoundV "ٽپو " (mkV "") ; -- here + left_Ord = {s = "کابو" ; n = singular}; + right_Ord = {s= "سڄو" ; n = singular}; +--far_Adv = mkAdj1dv "پری" ; + correct_A = mkAdj3 "سھی" ; + dry_A = mkAdj3 "ئشڪ" ; + dull_A = mkAdj1 "جڏو" ; + full_A = mkAdj3 "ٻریل" ; + heavy_A = mkAdj1 "گرو" ; + near_A = mkAdj1 "ویجھو" ; + rotten_A = mkAdj3 "ئراب" ; + round_A = mkAdj3 "گول" ; + sharp_A = mkAdj3 "تیز" ; + smooth_A = mkAdj3 "hموار" ; + straight_A = mkAdj1 "سڌو" ; + wet_A = mkAdj1 "االو"; + wide_A = mkAdj1 "ویڪرو" ; + animal_N = mkN03 "جانور" ; + ashes_N = mkN14 "راک " ; -- FIXME: plural only? + back_N = mkN09 "پٺ " ; + bark_N = mkN13 "ٻ۶ونڪڻ " ; + belly_N = mkN14 "پیٽ" ; + blood_N = mkN13 "رت" ; + bone_N = mkN09 "hڏی" ; + breast_N = mkN09 "ڇاتی" ; + cloud_N = mkN03 "جھڙ" ; + day_N = mkN13 "ڏینھن" ; + dust_N = mkN14"ڌوڙ" ; + ear_N = mkN03 "ڪن" ; + earth_N = mkN08 "زمین" ; + egg_N = mkN01 "بیدو" ; + eye_N = mkN09 "اک " ; + fat_N = mkN09 "چرٻی" ; + feather_N = mkN13 "کنڀ" ; + fingernail_N = mkN03 "نھ " ; + fire_N = mkN14 "باھ" ; + flower_N = mkN03 "گل" ; + fog_N = mkN13 "ماڪ" ; + foot_N = mkN03 "پیر" ; -- not properly covered need to be discussed + forest_N = mkN01 "ٻیلو" ; + grass_N = mkN04 "گاh" ; +--guts_N = mkN "g?ت" ; -- FIXME: no singular + hair_N = mkN03 "وار" ; + hand_N = mkN03 "hٿ "; + head_N = mkN01 "مٿو" ; + heart_N = mkN09 "دل"; + horn_N = mkN13 "سڱ " ; + husband_N = mkN03 "مڙس" ; + ice_N = mkN09 "برف" ; + nee_N = mkN01 "گوڏو" ; + leaf_N = mkN03 "پن" ; + leg_N = mkN09 "ٽنگ" ; + liver_N = mkN03 "جیرو" ; + louse_N = mkN14 "جون۶ " ; + mouth_N = mkN03 "وات" ; + name_N = mkN01 "نالو"; + neck_N = mkN04 "ڪنڌ " ; + night_N = mkN09 "رات" ; + nose_N = mkN03 "نڪ" ; + person_N = mkN03 "شئس" ; + rain_N = mkN14 "مینhن" ; + road_N = mkN01 "رستو" ; + root_N = mkN09 "پاڙ" ; + rope_N = mkN09 "رسی"; + salt_N = mkN14 "لوڻ " ; + sand_N = mkN14 "واری" ; + seed_N = mkN03 "ٻج" ; + skin_N = mkN09 "چمڙی" ; + sky_N = mkN03 "ااسمان"; + smoke_N = mkN13 "دونھو"; -- singular masc nouns ending with aN,wN yet to be implemented + snow_N = mkN13 "برف" ; + stick_N = mkN09 "ڏنڊی" ; + tail_N = mkN13 "پڇ " ; + tongue_N = mkN08 "زبان" ; + tooth_N = mkN03 "ڏاند"; + wife_N = mkN09 "زال" ; + wind_N = mkN08 "ھوا" ; + wing_N = mkN05 "پر" ; + worm_N = mkN01 "ڪینعون" ; + year_N = mkN03 "سال" ; + blow_V = mkV "وڄڻ " ; + breathe_V = compoundV "ساh " (mkV "K'ڻڻ " ) ; + burn_V = mkV "سڙڻ " ; + dig_V = mkV "K'ٽڻ " ; + fall_V = mkV "ڪرڻ " ; + float_V = mkV "ترڻ " ; + flow_V = mkV "وھڻ " ; + fly_V = mkV "اڏڻ "; + freeze_V = mkV "ڄمڻ " ; + give_V3= mkV3 (mkV "ڏیڻ ") "" "" ; -- here + laugh_V = mkV "کلڻ " ; + lie_N = mkN01 "ڪوڙ" ; + lie_V = compoundV "ڪوڙ " ( mkV "غالhاعڻ ") ; + play_V = mkV "کیڍڻ " ; + sew_V = mkV "سبڻ " ; + sing_V = mkV "گا۶ڻ " ; + sit_V = mkV "ویھڻ "; + smell_V = mkV "سنگڻ " ; + spit_V = mkV "ٿڪڻ " ; + stand_V = mkV "باھڻ "; + swell_V = mkV "سبڻ" ; + swim_V = mkV "ترڻ " ; + think_V = mkV "سوچڻ " ; + turn_V = mkV "مڙڻ "; + vomit_V = compoundV "الٽی" (mkV "ڪرڻ ") ; + bite_V2 = mkV2 (mkV "چئ پا۶ڻ ") ; + count_V = mkV "غڻڻ "; + cut_V = mkV "ڪٽڻ "; + fear_V = mkV "ڊڄڻ " ; + fight_V = mkV "وڙھڻ " ; + hit_V = mkV "مارڻ " ; + hold_V = mkV "جھلڻ " ; + hunt_V2 = mkV2 (compoundV "شڪار" do_V2); + kill_V = mkV "مارن" ; + pull_V = mkV "چڪڻ "; + push_V = mkV "ڌڪڻ " ; + rub_V = mkV "مھٽڻ " ; + scratch_V= mkV "ئرچڻ " ; + split_V= mkV "ھارڻ " ; +--squeeze_V2 = dirV2 (regV "سq?ععزع") ; +--stab_V2 = dirV2 (regDuplV "ستاب") ; + suck_V = mkV "چوسڻ " ; + throw_V = mkV "اڇلڻ " ; + tie_V = mkV "ٻڌڻ " ; + wash_V = mkV "ڌو۶ڻ" ; + wipe_V= mkV "اگھڻ "; +--other_A = regA "ٻیا"; + grammar_N = mkN03 "گردان" ; + language_N = mkN09 "ٻولی" ; + rule_N = mkN03 "اصول" ; + + ---- added 4/6/2007 + john_PN = mkPN "جان" masculine ; + question_N = mkN03 "سواl" ; +--ready_A = regA "تیار" ; + reason_N = mkN03 "سبب" ; + today_Adv = mkAdv "اڄ " ; + uncertain_A = mkAdj3 ["اچانڪ"] ; + + +} +
@@ -0,0 +1,14 @@+--# -path=.:../common:../abstract + +resource MakeStructuralsnd = open Catsnd, Paradigmssnd, Ressnd, Morphosnd, Nounsnd, Prelude in { + +oper + mkSubj : Str -> CatPnb.Subj = \x -> + lin Subj {s = x} ; + mkNP : Str -> Number -> ResPnb.NP = \s,n -> + MassNP (UseN (ParadigmsPnb.mkN s)); +-- lin NP (regNP s n) ; + mkIDet : Str -> Number -> IDet = \s,n -> + lin IDet {s = \\_ => s ; n = n} ; + +}
@@ -0,0 +1,393 @@+--# -path=.:../../prelude +-- +----1 A Simple Sindhi Resource Morphology +---- +---- by Jherna Devi, Shafqat Virk,2012 +---- +---- This resource morphology contains definitions needed in the resource +---- syntax. To build a lexicon, it is better to use $ParadigmsSnd$, which +---- gives a higher-level access to this module. +-- +resource MorphoSnd = ResSnd ** open Prelude,Predef in { + + + flags optimize=all ; + coding = utf8; + +----2 Nouns +oper + + mkN : (x1,_,_,_,_,_,_,x8 : Str) -> Gender -> Noun = + \sd,so,sv,sa, pd,po,pv,pa, g -> { + s = table { + Sg => table { + Dir => sd ; + Obl => so ; + Voc => sv ; + Abl => sa + } ; + Pl => table { + Dir => pd ; + Obl => po ; + Voc => pv ; + Abl => pa + } + } ; + + g = g + } ; + + +-- 1. msculine: chokro, kuto, hat + mkN01 : Str -> Noun ; + mkN01 chokro = let chokr = (tk 1 chokro) + in mkN (chokro) (chokr+"ی") (chokr+"ا") (chokr+"ا") + (chokr+"ا") (chokr+"ن") (chokr+"ا") (chokr+"ا") + Masc ; + + +-- 2. karkhano + mkN02 : Str -> Noun ; + mkN02 karkhano =let karkhan = (tk 1 karkhano) + in mkN (karkhano) (karkhan+"ی") (karkhan+"ا") (karkhano) + (karkhan+"ا") (karkhan+"ن") (karkhan+"و") (karkhan+"ا") + Fem ; + +-- 3. gher, shehar + mkN03 : Str -> Noun ; + mkN03 gher = mkN (gher) (gher) (gher) (gher) + (gher) (gher+"ن") (gher+"و") (gher) + Masc ; + +-- 4. paki, mez, gah + mkN04 : Str -> Noun ; + mkN04 paki = mkN (paki) (paki) (paki) (paki) + (paki) (paki+"ن") (paki) (paki) + Fem ; + +-- 5. msculine: bar, hotel, pathar + mkN05 : Str -> Noun ; + mkN05 bar = mkN (bar) (bar) (bar) (bar) + (bar) (bar+"ن") (bar+"و") (bar) + Masc ; + +-- 6. pe + mkN06 : Str -> Noun ; + mkN06 pe = mkN (pe) (pe) (pe) (pe) + (pe+"۶ر") (pe+"۶رن") (pe+"۶رو") (pe+"۶ر") + Masc ; + +-- 7. Feminine : ma + mkN07 : Str -> Noun ; + mkN07 ma = mkN (ma) (ma) (ma) (ma) + (ma+"۶ر") (ma+"۶رن") (ma+"۶رو") (ma+"۶ر") + Fem ; + +-- 8. msculine: topi, takre + mkN08 : Str -> Noun ; + mkN08 topi = mkN (topi) (topi) (topi) (topi) + (topi+"ون") (topi+"ن") (topi+"و") (topi+"ون") + Masc ; + +-- 9. Feminine: bere, bili, kurse + mkN09 : Str -> Noun ; + mkN09 bili = mkN (bili) (bili) (bili) (bili) + (bili+"ون") (bili+"ن") (bili+"ن") (bili+"ون") + Fem ; + +-- 10. msculine: bha + mkN010 : Str -> Noun ; + mkN010 bha = mkN (bha) (bha) (bha) (bha) + (bha+"ر") (bha+"رن") (bha+"رو") (bha+"ر") + Masc ; + +-- 11. Feminine: bhen + mkN11 : Str -> Noun ; + mkN11 bhen = let bhe= (tk 1 bhen) + in mkN (bhen) (bhen) (bhen) (bhen) + (bhe+"نر") (bhe+"نرن") (bhen+"ون") (bhe+"نر") + Fem ; + +--12. msculine: raja, darya + mkN12 : Str -> Noun ; + mkN12 raja = mkN (raja) (raja) (raja) (raja) + (raja) (raja+"۶ن") (raja+"۶و") (raja) + Masc ; + +-- 13. msculine: fan, son, kher, + mkN13 : Str -> Noun ; + mkN13 son = mkN (son) (son) (son) (son) + (son) (son) (son) (son) + Masc ; + +-- 14. Feminine: pen, samand + mkN14 : Str -> Noun ; + mkN14 pen = mkN (pen) (pen) (pen) (pen) + (pen) (pen) pen "" + Fem ; + + + +----2 Determiners + + IDeterminer = {s:Gender => Str ; n : Number}; + + makeDet : Str -> Str -> Str -> Str -> Number -> Determiner = \s1,s2,s3,s4,n -> { + s = table { + Sg => table { + Masc => s1 ; + Fem => s2 + } ; + Pl => table { + Masc => s3 ; + Fem => s4 + } + } ; + + n = n + }; + + makeIDet : Str -> Str -> Number -> IDeterminer = \s1,s2,n -> { + s = table { + Masc => s1; + Fem => s2 + }; + n = n + }; + + makeIQuant : Str -> Str -> Str -> Str -> {s:Number => Gender => Str} = \s1,s2,s3,s4 -> { + s = table { + Sg => table { + Masc => s1 ; + Fem => s2 + } ; + Pl => table { + Masc => s3 ; + Fem => s4 + } + } + }; + +-- Proposition + + makePrep : Str -> Preposition = \str -> {s = str } ** { lock_Prep = <>}; + +----2 Pronouns + --PronForm = {s:Pronoun => Str}; + + DemonPronForm = {s:DemPronForm => Str}; + mkDemonPronForm : (x1,x2,x3,x4,x5,x6,x7,x8,x9,x10,x11,x12,x13,x14,x15,x16:Str) -> DemPronForm = + \y1,y2,y3,y4,y5,y6,y7,y8,y9,y10,y11,y12,y13,y14,y15,y16 -> { + s = table { + Sg => table { + Masc => table { + Dir => y1 ; + Obl => y2 ; + Voc => y3 ; + Abl => y4 + }; + Fem => table { + Dir => y5 ; + Obl => y6 ; + Voc => y7 ; + Abl => y8 + } + }; + Pl => table { + Masc => table { + Dir => y9 ; + Obl => y10 ; + Voc => y11 ; + Abl => y12 + }; + Fem => table { + Dir => y13 ; + Obl => y14 ; + Voc => y15 ; + Abl => y16 + } + } + } + }; + + makeDemonPronForm : Str -> Str -> Str -> DemPronForm ; + makeDemonPronForm yeh is inn = mkDemonPronForm yeh is "" yeh is "" yeh inn "" yeh inn "" "" "" "" ""; +-- makePossPronForm myra myry hmara hmary = mkDemonPronForm myra myra myra myry myry myry hmara hmara hmara hmary hmary hmary; + + mkPron : (x1,x2,x3,x4:Str) -> {s:Case => Str} = + \y1,y2,y3,y4 -> { s = + table { + Dir => y1; + Obl => y2; + Voc => y3; + Abl => y4 + } + }; + + ------- PossPronForm yet to be implemented + + +-- IntPronForm = {s:InterrPronForm => Str}; + IntPronForm = {s: Case => Str}; + mkIntPronForm : (x1,x2,x3,x4:Str) -> IntPronForm = + \y1,y2,y3,y4 -> { + s = + table { + Dir => y1; + Obl => y2; + Voc => y3; + Abl => y4 + } + }; + + +----2 Adjectives +-- defined in ResSnd + +------------------------------------------------------------------ +----Verbs +------------------------------------------------------------------ + +--1. Basic stem form, direct & indirect causatives exists +-- v1 nechna nechaana nechwana + + mkVerb : (_: Str) -> Verb = \inf -> + let root = (tk 1 inf) ; + inf = inf ; + root2 = (tk 2 inf) ; + in { + s = table { + + Root => root ; + + Inf => inf ; + Inf_Fem => ((tk 1 root) + "ی") ; + Inf_Obl => (tk 1 root) ; + Ablative => ((tk 1 root) + "وN") ; + + + VF tense person number gender => (mkCmnVF root root2 tense person number gender).s + } + } ; + + mkIrrgVerb : (inf,root: Str) -> Verb = \inf,root -> + let root = root ; + in { + s = table { + + Root => root ; + + Inf => inf ; + Inf_Fem => ((tk 1 inf) + "ی") ; + Inf_Obl => (tk 1 inf) ; + Ablative => ((tk 1 inf) + "وN") ; + + + VF tense person number gender => (mkCmnVF (root+"ی") (root+"ی") tense person number gender).s + } + } ; + + +mkCmnVF : Str -> Str -> VTense -> PPerson -> Number -> Gender -> {s:Str}= \root,root2,t,p,n,g -> + {s = case (last root) of { + ("ا"|"۽"|"ی") => (mkCmnVF1 root t p n g).s ; + _ => (mkCmnVF1 root t p n g).s + } + }; + + mkCmnVF1 : Str -> VTense -> PPerson -> Number -> Gender -> {s:Str}= \root,t,p,n,g -> + {s = let nadaa = root + "ندو" ; --root + variants{"ندا";"وندا"}; + nadii = root + "ون" ; --root + variants{"ندی";"وندی"} ; + nade = root + "ندی" ; --root + variants{"ندی";"یندین"} ; + nadiiaaN = root + "ندو"; --root + variants{"ندیاN";"وندیاN"}; + ndi = root + "ندی"; + nda = root + "ندا" ; + ndywn = root + "ندیون" ; + ndyn = root + "ندین" ; + + in + case <t,p,n,g> of { + <Subj,Pers1, Sg,_> => root + "ان" ; + <Subj,Pers1, Sg,_> => root + "ان" ; + <subj, Pers1, pl,Masc> => root + "ون" ; + <subj, Pers1, pl,Fem> => root + "ون" ; + <Subj,Pers2_Casual, Sg,_> => root +"ین"; + <Subj,Pers2_Casual, Pl,_> => root + "و" ; + <Subj,Pers2_Respect, _, _> => root + "و" ; + + <Subj,Pers3_Near, Sg,Masc> => root +"ی"; + <Subj,Pers3_Near, sg,Fem> => root +"ی"; + <Subj,Pers3_Near, pl,Masc> => root +"ن"; + <Subj,Pers3_Near, pl,Fem> => root +"ن"; + <Subj,Pers3_Distant,Sg,Masc> => root +"ی"; + <Subj,Pers3_Distant,Sg,Fem> => root +"ی"; + <Subj,Pers3_Distant,Pl,Masc> => root +"ن"; + <Subj,Pers3_Distant,Pl,Fem> => root +"ن"; + + + <Perf, Pers1,Sg,Masc> => root + "یل" ; + <Perf, Pers1,Sg,Fem> => root + "یل" ; + <Perf, Pers1,Pl,Masc> => root + "یل" ; + <Perf, Pers1,Pl,Fem> => root + "یل" ; + <Perf, Pers2_Casual,Sg,Masc> => root + "یل" ; + <Perf, Pers2_Casual,Sg,Fem> => root + "یل" ; + <Perf, Pers2_Casual,Pl,Masc> => root + "یل" ; + <Perf, Pers2_Casual,Pl,Fem> => root + "یل" ; + <Perf, Pers2_Respect,Sg,Masc> => root + "یل" ; + <Perf, Pers2_Respect,Sg,Fem> => root + "یل" ; + <Perf, Pers2_Respect,Pl,Masc> => root + "یل" ; + <Perf, Pers2_Respect,Pl,Fem> => root + "یل" ; + + <Perf, _, Sg,Masc> => root + "یل" ; + <Perf, _, Sg,Fem> => root + "یل" ; + <Perf, _, Pl,Masc> => root + "یل" ; + <Perf, _, Pl,Fem> => root + "یل" ; + + <Imperf, Pers1,Sg, Masc> => root + "ندو" ; + <Imperf, Pers1,Sg, Fem> => root + "ندی" ; + <Imperf, Pers1,Pl, Masc> => root + "ندا" ; + <Imperf, Pers1,Pl, Fem> => root + "ندیون" ; + + <Imperf, Pers2_Casual, Sg, Masc> => root + "ندو" ; + <Imperf, Pers2_Casual, Sg, Fem> => root + "ندی" ; + <Imperf, Pers2_Casual, Pl, Masc> => root + "ندا" ; + <Imperf, Pers2_Casual, Pl, Fem> => root + "ندیون" ; + + <Imperf, Pers2_Respect, Sg, Masc> => root + "ندا" ; + <Imperf, Pers2_Respect, Sg, Fem> => root + "ندیون" ; + <Imperf, Pers2_Respect, Pl, Masc> => root + "ندا" ; + <Imperf, Pers2_Respect, Pl, Fem> => root + "ندیون" ; + + <Imperf, _, Sg, Masc> => root + "ندو" ; + <Imperf, _, Sg, Fem> => root + "ندی" ; + <Imperf, _, Pl, Masc> => root + "ندا" ; + <Imperf, _, Pl, Fem> => root + "ندیون" + + } + } ; + + + mkCmnVF2 : Str -> VTense -> PPerson -> Number -> Gender -> {s:Str}= \inf,t,p,n,g -> + {s = + case <t,p,n,g> of { + <_, _, _,_> => inf + } + }; + + + + + + + + + + + + + + + + + +}
@@ -0,0 +1,138 @@+concrete NounSnd of Noun = CatSnd ** open ResSnd, Prelude in { + + flags optimize=all_subs ; + + lin + DetCN det cn = { + s = \\c => detcn2NP det cn c det.n ; + a = agrP3 cn.g det.n ; + isPron = False + } ; + + UsePN pn = {s = \\c => toNP pn.s c ; a = agrP3 pn.g Sg ; isPron = False} ; + UsePron p = {s = \\c => np2pronCase p.s c p.a ; a = p.a ; isPron = True} ; + + PredetNP pred np = { + s = \\c => pred.s ++ np.s ! c ; + a = np.a; + isPron = np.isPron + } ; + + PPartNP np v2 = { + s = \\c => v2.s ! VF Perf (fromAgr np.a).p (fromAgr np.a).n (fromAgr np.a).g ++ np.s ! c ; + a = np.a ; + isPron = np.isPron + } ; + + RelNP np rs = { + s = \\c => np.s ! c ++ rs.s ! np.a ; + a = np.a ; + isPron = np.isPron + } ; + + AdvNP np adv = { + s = \\c => np.s ! c ++ adv.s ! (fromAgr np.a).g ; + a = np.a ; + isPron = np.isPron + } ; + + DetQuantOrd quant num ord = { +-- s = \\ c => detquant2det quant.s num.s c ++ ord.s ; + s = \\n,g => quant.s!n!g!Dir ++ num.s ++ ord.s; + n = num.n + } ; + + DetQuant quant num = { +-- s = \\c => detquant2det quant.s num.s c; + s = \\n,g => quant.s!n!g!Dir ++ num.s; + n = num.n + } ; + + DetNP det = { + s = \\c => det2NP det c ; ---- case + a = agrP3 Masc Sg ; + isPron = False + } ; + + PossPron p = {s = \\_,_,_ => p.ps ; a = p.a} ; + + NumSg = {s = []; n = Sg} ; + NumPl = {s = []; n = Pl} ; + + NumCard n = n ** {hasCard = True} ; + + NumDigits n = {s = n.s ! NCard ; n = n.n} ; + OrdDigits n = {s = n.s ! NOrd; n = n.n} ; + + NumNumeral numeral = {s = numeral.s ! NCard; n = numeral.n} ; + OrdNumeral numeral = {s = numeral.s ! NOrd ; n = numeral.n} ; + + AdNum adn num = {s = adn.s ++ num.s ; n = num.n} ; + + OrdSuperl a = {s = a.s ! Sg ! Masc ! Dir ; n = Sg} ; + + + + DetArtSg art cn = { + s = \\c => art.s ++ toNP (cn.s ! Sg) c ; + a = agrP3 cn.g Sg + } ; + + DetArtPl art cn = { + s = \\c => art.s ++ toNP (cn.s ! Pl) c ; + a = agrP3 cn.g Pl + } ; + + DefArt = {s = \\_,_,_ => [] ; a = defaultAgr} ; + IndefArt = {s = \\_,_,_ => [] ; a =defaultAgr } ; + + MassNP cn = {s = \\c => toNP (cn.s ! Sg) c ; a = agrP3 cn.g Sg ; isPron = False} ; + + UseN n = n ; + UseN2 n = { s = n.s ; g = n.g }; + + Use2N3 f = { + s = f.s; + g = f.g ; + c2 = f.c2; + c3 = f.c3 + } ; + + Use3N3 f = { + s = f.s ; + g = f.g ; + c2 = f.c2; + c3 = f.c3 + } ; + + ComplN2 f x = {s = \\n,c => case c of { + Dir => x.s ! NPC c ++ f.c2 ++ f.s ! n ! c ; + Obl => x.s ! NPC c ++ f.c3 ++ f.s ! n ! c ; + Abl => x.s ! NPC c ++ f.c3 ++ f.s ! n ! c ; + ResSnd.Voc => x.s ! NPC c ++ f.c3 ++ f.s ! n ! c + }; + g = f.g; + }; + ComplN3 f x = { + s = \\n,c => x.s ! NPObj ++ f.c4 ++ f.s ! n ! Dir ; + g = f.g ; + c2 = f.c2; + c3 = f.c3 + } ; + + AdjCN ap cn = { + s = \\n,c => ap.s ! n ! cn.g ! c ++ cn.s ! n ! c ; + g = cn.g + } ; + + RelCN cn rs = { + s = \\n,c => cn.s ! n ! c ++ rs.s ! agrP3 cn.g n ; + g = cn.g + } ; + AdvCN cn ad = {s = \\n,c => cn.s ! n ! c ++ ad.s ! cn.g ; g = cn.g} ; + + SentCN cn sc = {s = \\n,c => cn.s ! n ! c ++ sc.s ; g = cn.g} ; + + ApposCN cn np = {s = \\n,c => cn.s ! n ! Dir ++ np.s ! NPC c ; g = cn.g} ; + +}
@@ -0,0 +1,126 @@+concrete NumeralSnd of Numeral = CatSnd ** open ResSnd, Prelude in {+-- By Harald Hammarstroem+-- Modification for Punjabi by Shafqat Virk+ flags coding=utf8 ;++++param DForm = unit | ten ;+param DSize = sg | r2 | r3 | r4 | r5 | r6 | r7 | r8 | r9 ;+param Size = singl | less100 | more100 ; ++oper LinDigit = {s : DForm => Str ; size : DSize ; n : Number} ;+++lincat Dig = { s:Str ; n : Number};+lincat Digit = LinDigit ;+lincat Sub10 = {s : DForm => Str ; size : DSize ; n : Number} ;+lincat Sub100 = {s : Str ; size : Size ; n : Number} ;+lincat Sub1000 = {s : Str ; s2 : Str ; size : Size ; n : Number } ; +lincat Sub1000000 = { s : Str ; n : Number } ;++lin num x0 = + {s = table {+ NCard => x0.s ; + NOrd => Prelude.glue x0.s "ون" -- (mkOrd x0.s) need to use mkOrd which will make irregular ordinals but it gives path error+ };+ n = x0.n+ } ;+oper mkOrd : Str -> Str =+ \s -> case s of {+ "ھڪ" => "پھریون";+ "ٻ" => "ٻیون";+ "ٽی" => "ٽیون";+ "چار" => "چواٿون";+ _ => s ++ "وN"+ };+-- {s = \\_ => x0.s ; n = x0.n} ; +++oper mkNum : Str -> Str -> DSize -> LinDigit = + \do -> \bis -> \sz -> + {s = table {unit => do ; ten => bis } ; + size = sz ; n = Pl} ;++lin n2 = mkNum "ٻ" "ویھ" r2 ;+lin n3 = mkNum "ٽی" "ٽیھ" r3 ;+lin n4 = mkNum "چار" "چاlیھ" r4 ;+lin n5 = mkNum "پنج" "پنجاھ" r5 ;+lin n6 = mkNum "ڇھ" "سٺھ " r6 ; +lin n7 = mkNum "ست" "ستر" r7; +lin n8 = mkNum "اٺ '" "اسی" r8;+lin n9 = mkNum "نو" "نوی" r9 ;++oper mkR : Str -> Str -> Str -> Str -> Str -> Str -> Str -> Str -> Str -> DSize => Str = \a1 -> \a2 -> \a3 -> \a4 -> \a5 -> \a6 -> \a7 -> \a8 -> \a9 -> table {+ sg => a1 + "نھن" ;+ r2 => a2 + "یھ " ;+ r3 => a3 + "یھ " ;+ r4 => a4 + "اlیھ " ;+ r5 => a5 + "ونجاھ " ;+ r6 => a6 + "ھٺ" ;+ r7 => a7 + "تر" ;+ r8 => a8 + "اسی" ;+ r9 => a9 + "انوی"+} ;++oper rows : DSize => DSize => Str = table {+ sg => mkR "یار " "ایڪ " "اڪٽ" "ایڪیت " "ایڪ" "ایڪ" "ایڪ" "ایڪ" "ایڪ" ; + r2 => mkR "ٻای " "ٻاو" "ٻٽ" "ٻا۶ت" "ٻا" "ٻا" "ٻاھ " "ٻیی" "ٻیی" ;+ r3 => mkR "ٽیر " "ٽیو " "ٽیٽ" "ٽیت" "ٽی" "ٽی" "ٽیھ " "ٽی" "تی" ;+ r4 => mkR "چوڏ " "چوو " "چوٽ" "چو۶ت " "چو" "چو" "چوھ " "چور " "چور" ;+ r5 => mkR "پنڌر " "پنجو " "پنجٽ" "پنجیت" "پنج" "پنج" "پنجھ" "پنج" "پنج" ;+ r6 => mkR "سور " "ڇو" "ڇٽی" "ڇا۶ت" "ڇا" "ڇا" "ڇاھ" "ڇ" "ڇ" ;+ r7 => mkR "ستر" "ستاو" "ستٽ " "ستیت" "ست" "ست" "ست" "ست" "ست" ;+ r8 => mkR "ارڙ" "اٺاو " "اٺٽ" "اٺی" "اٺ" "اٺ" "اٺا" "اٺ" "اٺ" ; + r9 => table {sg => "اڻویھ " ; r2 => "اڻٽیھ " ; r3 => "اڻیتاlیھ " ; + r4 => "اڻونجاھ " ; r5 => "اڻھٺ " ; r6 => "اڻتر " ; + r7 => "اڻاسی " ; + r8 => "اڻانوی " ; r9 => "نوانوی" } +} ;++oper ss : Str -> {s : Str} = \s -> {s = s} ;++lin pot01 = {s = table {unit => "ھڪ" ; _ => "دمی" } ; size = sg ; n = Sg} ;+lin pot0 d = d ; +lin pot110 = {s = "ڏھ " ; size = less100 ; n = Pl} ; +lin pot111 = {s = rows ! sg ! sg ; size = less100 ; n = Pl} ;+lin pot1to19 d = {s = rows ! d.size ! sg ; size = less100 ; n = d.n} ;+lin pot0as1 n = {s = n.s ! unit ; size = table {sg => singl ; _ => less100} ! n.size ; n = n.n } ;++lin pot1 d = {s = d.s ! ten ; size = less100 ; n = d.n} ;+lin pot1plus d e = {s = rows ! e.size ! d.size ; size = less100 ; n = d.n} ;++lin pot1as2 n = {s = n.s ; s2 = "دمی" ; size = n.size ; n = n.n} ;+lin pot2 d = {s = (mksau (d.s ! unit) d.size) ; + s2 = d.s ! unit ++ "lک " ; size = more100 ; n = d.n} ;+lin pot2plus d e = + {s = (mksau (d.s ! unit) d.size) ++ e.s ; + s2 = (d.s ! unit) ++ "lک " ++ (mkhazar e.s e.size) ; + size = more100 ; n = d.n} ;++lin pot2as3 n = {s = n.s ; n = n.n} ;+lin pot3 n = {s = table { singl => ekhazar ;+ less100 => n.s ++ "ھزار" ; + more100 => n.s2 } ! n.size ; n = n.n} ;+lin pot3plus n m = + {s = table {singl => ekhazar ;+ less100 => n.s ++ "ھزار" ; + more100 => n.s2 } ! n.size ++ m.s ; n = n.n} ;++lin D_0 = { s = "۰" ; n = Sg};+lin D_1 = { s = "۱" ; n = Sg};+lin D_2 = { s = "۲" ; n = Pl};+lin D_3 = { s = "۳" ; n = Pl};+lin D_4 = { s = "۴" ; n = Pl};+lin D_5 = { s = "۵" ; n = Pl};+lin D_6 = { s = "۶" ; n = Pl};+lin D_7 = { s = "۷" ; n = Pl};+lin D_8 = { s = "۸" ; n = Pl};+lin D_9 = { s = "۹" ; n = Pl};+lin IDig d = { s = \\_ => d.s ; n = d.n} ;+lin IIDig d dg = { s = \\df => Prelude.glue (dg.s ! df) d.s ; n = Pl }; ++oper ekhazar : Str = variants {"ھزار" ; "ھڪ" ++ "ھزار"} ; +oper mkhazar : Str -> Size -> Str = \s -> \sz -> table {singl => ekhazar ; _ => s ++ "ھزار"} ! sz ;+oper mksau : Str -> DSize -> Str = \s -> \sz -> table {sg => "ھڪ" ++ "سو" ; _ => s ++ "سو"} ! sz ;+}
@@ -0,0 +1,181 @@+--# -path=.:../abstract:../../prelude:../common +-- +----1 Sndu Lexical Paradigms + +resource ParadigmsSnd = open + Predef, + Prelude, + MorphoSnd, + CatSnd + in { + +--2 Parameters + +oper + masculine : Gender ; + feminine : Gender ; + singular : Number; + plural : Number; + + singular = Sg ; plural = Pl; + + masculine = Masc ; feminine = Fem ; --i + + +--2 Nouns + + + mkN2 : N -> Prep -> Str -> N2; + mkN2 = \n,p,c -> n ** {lock_N2 = <> ; c2 = p.s ; c3 = c } ; + + mkN3 : N -> Prep -> Str -> Str-> N3 ; + mkN3 = \n,p,q,r -> n ** {lock_N3 = <> ; c2 = p.s ; c3 = q ; c4 = r} ; + +-- Compound Nouns + + mkCmpdNoun : Str -> N -> N + = \s,noun -> {s =\\n,c => s ++ noun.s ! n ! c ; g = noun.g ; lock_N = <>}; + + +-- Proper names +mkPN = overload { + mkPN : Str -> PN = + \s -> let n = mkN11 s in {s = n.s ! Sg ; g = n.g ; lock_PN = <>} ; + mkPN : Str -> Gender -> PN = + \s,g -> let n = mkN11 s in {s = n.s ! Sg ; g = g ; lock_PN = <>} ; + }; +-- Personal Pronouns + personalPN : Str -> Str -> Str -> Str -> Str -> Number -> Gender -> PPerson -> Pron = + \s1,s2,s3,s4,sp,nn,g,p -> let n = mkPron s1 s2 s3 s4 in {s = n.s ; a = toAgr nn p g ; ps = sp ; lock_Pron = <>}; +-- Demonstration Pronouns + demoPN : Str -> Str -> Str -> Quant = + \s1,s2,s3 -> let n = makeDemonPronForm s1 s2 s3 in {s = n.s ; a = defaultAgr ; lock_Quant = <>}; + +-- Determiner + mkDet : Str -> Str -> Str -> Str -> Number -> Det = + \s1,s2,s3,s4,nb -> let dt = makeDet s1 s2 s3 s4 nb in {s = dt.s ; n = nb ; lock_Det = <>}; + +-- Intergative pronouns + mkIP : (x1,x2,x3,x4:Str) -> Number -> Gender -> IP = + \s1,s2,s3,s4,n,g -> let p = mkIntPronForm s1 s2 s3 s4 in { s = p.s ; n = n ; g = g ; lock_IP = <>}; + +-- AdN + mkAdN : Str -> AdN = \s -> ss s ; + +--2 Adjectives + + mkA = overload { + mkA : Str-> A + = \s -> mkAdj1 s ** {lock_A = <>} ; + mkA : Str -> Str -> A2 + = \a,c -> let n = mkAdj1 a in {s = n.s; c2 = c} ** {lock_A2 = <>} ; + } ; + +--2 Verbs + + mkV : Str -> V + = \s -> mkVerb s ** {lock_V = <>} ; + + mkV2 = overload { + mkV2 : Str -> V2 + = \s -> mkVerb s ** {c2 = {s = [] ; c = VTrans} ; lock_V2 = <>} ; + mkV2 : V -> V2 + = \v -> v ** {c2 = {s = [] ; c = VTrans} ; lock_V2 = <>} ; + mkV2 : V -> Str -> V2 + = \v,p -> v ** {c2 = {s = p ; c = VTrans} ; lock_V2 = <>} ; + } ; + + mkV3 : V -> Str -> Str -> V3; + mkV3 v p q = v ** { c2 = p ; c3 = q ; lock_V3 = <>} ; + mkV2V : V -> Str -> Str -> Bool -> V2V ; + mkV2V v s1 s2 b = v ** {isAux = b ; c1 = s1 ; c2 = s2 ; lock_V2V = <>} ; + +-- compund verbs + compoundV = overload { + compoundV : Str -> V -> V = \s,v -> {s = \\vf => s ++ v.s ! vf ; lock_V = <>} ; + compoundV : Str -> V2 -> V = \s,v -> {s = \\vf => s ++ v.s ! vf ; lock_V = <>} ; + }; + + +----2 Adverbs + mkAdv : Str -> Adv = \str -> {s =\\ _ => str ; lock_Adv = <>}; + +----2 Prepositions + + mkPrep : Str -> Prep ; + mkPrep str = makePrep str ** {lock_Prep = <>}; + +--3 Determiners and quantifiers + +-- mkQuant : overload { + mkQuant1 : Pron -> Quant ; +-- mkQuant : (no_sg, no_pl, none_sg, non_pl : Str) -> Quant ; +-- } ; + mkIQuant : Str -> Str -> Str -> Str -> IQuant ; + mkIQuant s1 s2 s3 s4 = let n = makeIQuant s1 s2 s3 s4 in {s = n.s; lock_IQuant = <>} ; + +-- mkQuant = overload { + mkQuant1 : Pron -> Quant = \p -> {s = \\_,_,c => p.s!c ;a = p.a ; lock_Quant = <>}; +-- mkQuant : (no_sg, no_pl, none_sg, non_pl : Str) -> Quant = mkQuantifier; +-- } ; + +--2 Conjunctions + mkConj : overload { + mkConj : Str -> Conj ; -- and (plural agreement) + mkConj : Str -> Number -> Conj ; -- or (agrement number given as argument) + mkConj : Str -> Str -> Conj ; -- both ... and (plural) + mkConj : Str -> Str -> Number -> Conj ; -- either ... or (agrement number given as argument) + } ; + mkConj = overload { + mkConj : Str -> Conj = \y -> mk2Conj [] y plural ; + mkConj : Str -> Number -> Conj = \y,n -> mk2Conj [] y n ; + mkConj : Str -> Str -> Conj = \x,y -> mk2Conj x y plural ; + mkConj : Str -> Str -> Number -> Conj = mk2Conj ; + } ; + + mk2Conj : Str -> Str -> Number -> Conj = \x,y,n -> + lin Conj (sd2 x y ** {n = n}) ; + +-- mkV0 : V -> V0 ; +-- mkVS : V -> VS ; +-- mkV2S : V -> Prep -> V2S ; + mkVV : V -> VV = \v -> lin VV (v ** {isAux = False}); + + +-- mkV2V : V -> Prep -> Prep -> V2V ; +-- mkVA : V -> VA ; +-- mkV2A : V -> Prep -> V2A ; +-- mkVQ : V -> VQ ; +-- mkV2Q : V -> Prep -> V2Q ; +-- +-- mkAS : A -> AS ; +-- mkA2S : A -> Prep -> A2S ; +-- mkAV : A -> AV ; +-- mkA2V : A -> Prep -> A2V ; +-- mkA2V a p = a ** {c2 = p.s } ; +-- +---- Notice: Categories $V0, AS, A2S, AV, A2V$ are just $A$. +---- $V0$ is just $V$; the second argument is treated as adverb. +-- +-- V0 : Type ; +-- AS, A2S, AV, A2V : Type ; +-- +----. +----2 Definitions of paradigms +---- +---- The definitions should not bother the user of the API. So they are +---- hidden from the document. +-- +-- Gender = MorphoHin.Gender ; +-- Number = MorphoHin.Number ; +-- Case = MorphoHin.Case ; +-- human = Masc ; +-- nonhuman = Neutr ; +-- masculine = Masc ; +-- feminine = Fem ; +-- singular = Sg ; +-- plural = Pl ; +-- nominative = Nom ; +-- genitive = Gen ; + +}
@@ -0,0 +1,27 @@+concrete PhraseSnd of Phrase = CatSnd ** open Prelude, ResSnd in { + + lin + PhrUtt pconj utt voc = {s = pconj.s ++ utt.s ++ voc.s} ; + + UttS s = s ; + UttQS qs = {s = qs.s ! QDir} ; + UttImpSg pol imp = {s = pol.s ++ imp.s ! contrNeg True pol.p ! ImpF Sg False} ; + UttImpPl pol imp = {s = pol.s ++ imp.s ! contrNeg True pol.p ! ImpF Pl False } ; + UttImpPol pol imp = {s = pol.s ++ imp.s ! contrNeg True pol.p ! ImpF Sg True} ; + + UttIP ip = {s = ip.s ! Dir} ; --- Acc also + UttIAdv iadv = iadv ; + UttNP np = {s = np.s ! NPC Dir} ; + UttVP vp = {s = infVP False vp (agrP3 Masc Sg) ++ vp.embComp} ; + UttAdv adv = {s = adv.s ! Masc } ; + UttCN cn = {s = cn.s ! Sg ! Dir}; + UttCard n = n ; + UttAP ap = {s = ap.s ! Sg ! Masc ! Dir} ; + + NoPConj = {s = []} ; + PConjConj conj = {s = conj.s2} ; --- + + NoVoc = {s = []} ; + VocNP np = {s = np.s ! NPC Voc} ; + +}
@@ -0,0 +1,75 @@+concrete QuestionSnd of Question = CatSnd ** open ResSnd, Prelude in { + flags optimize=all_subs ; + coding = utf8; + + lin + + QuestCl cl = { + s = \\t,p,qf => case qf of { + QDir => cl.s ! t ! p ! OQuest; + QIndir => "جیڪڏھن" ++ cl.s ! t! p ! ODir + } + }; + + QuestVP qp vp = + let cl = mkSClause ("") (Ag qp.g qp.n Pers3_Near) vp; + qp1 = qp.s ! Dir; + qp2 = qp.s ! Obl ++ "جی" + in { s = \\t,p,o => case t of { + VPImpPast => case vp.subj of {VIntrans => qp1 ++ cl.s ! t ! p ! ODir; _ => qp2 ++ cl.s ! t ! p ! ODir}; + _ => qp1 ++ cl.s ! t ! p ! ODir + } + }; + QuestSlash ip slash = + let ip1 = ip.s ! Dir; + ip2 = ip.s ! Obl ++ "جی" + in { + s = \\t,p,o => case t of { + VPImpPast => ip2 ++ slash.s ! t ! p ! ODir; + _ => ip1 ++ slash.s ! t ! p ! ODir + } + }; + + QuestIAdv iadv cl = { + s = \\t,p,_ => iadv.s ++ cl.s ! t ! p ! ODir; + }; + + QuestIComp icomp np = + let cl = mkSClause (np.s ! NPC Dir ++ icomp.s) np.a (predAux auxBe); + in { + s = \\t,p,qf => case qf of { + QDir => cl.s ! t ! p ! ODir; + QIndir => cl.s ! t! p ! ODir + } + }; + + PrepIP p ip = {s = ip.s ! ResSnd. Voc ++ p.s } ; + + AdvIP ip adv = { + s = \\c => adv.s ! ip.g ++ ip.s ! c ; + n = ip.n; + g = ip.g; + } ; + + IdetCN idet cn = { + s = \\c => idet.s ! cn.g ++ cn.s ! idet.n ! c ; + g = cn.g; + n = idet.n; + } ; + + IdetIP idet = { + s = \\_ => idet.s ! Masc ; + n = idet.n; + g = Masc; + } ; + + IdetQuant iqant num = { + s = \\g => iqant.s ! num.n ! g ++ num.s ; + n = num.n + } ; + + CompIAdv a = a ; + CompIP p = ss (p.s ! Dir) ; + AdvIAdv i a = {s = i.s ++ a.s ! Masc} ; + +}
@@ -0,0 +1,90 @@+concrete RelativeSnd of Relative = CatSnd ** open ResSnd in { + + flags optimize=all_subs ; + coding = utf8; + + lin + + RelCl cl = { + s = \\t,p,o,agr => case <t,giveNumber agr,giveGender agr> of { + <VPImpPast,Sg,_> => "جھنکی" ++ cl.s ! t ! p ! o ; + <VPImpPast,Pl,_> => "جھنجو" ++ cl.s ! t ! p ! o ; + <_,Sg,Masc> => "جیھڙو" ++ cl.s ! t ! p ! o ; + <_,Sg,Fem> => "جیھڙا" ++ cl.s ! t ! p ! o ; + <_,Pl,Masc> => "جیھڙا" ++ cl.s ! t ! p ! o ; + <_,Pl,Fem> => "جیھڙیون" ++ cl.s ! t ! p ! o + }; + c = Dir + } ; +-- RelVP and RelSlash slows the linking process a lot this is why it is commented for test purposes + + RelVP rp vp = { + s = \\t,p,o,ag => + let + agr = case rp.a of { + RNoAg => ag ; + RAg a => a + } ; + cl = mkSClause (rp.s ! (giveNumber agr) ! (giveGender agr) ! Dir) agr vp; + +-- cl = case t of { +-- VPImpPast => mkSClause (rp.s ! (giveNumber agr) ! Obl) agr vp; +-- _ => mkSClause (rp.s ! (giveNumber agr) ! Dir) agr vp +-- }; + in + cl.s ! t ! p ! ODir ; + c = Dir + } ; + + +---- Pied piping: "ات whiچh wع ارع looڪiنگ". Stranding and empty +---- relative are defined in $ExtraHin.gf$ ("تhات wع ارع looڪiنگ ات", +---- "wع ارع looڪiنگ ات"). +-- + RelSlash rp slash = { + s = \\t,p,o,agr => rp.s ! (giveNumber agr) ! (giveGender agr) ! Obl ++ slash.c2.s ++ slash.s ! t ! p ! o ; + c = Dir + } ; + + FunRP p np rp = { + s = \\n,g,c => rp.s ! n ! g ! c ++ np.s ! NPC c ++ p.s ; + a = RAg np.a + } ; + + IdRP = { + s = table { + Sg => table { + Masc => table { + + ResSnd.Dir => "جھڙا" ; + ResSnd.Obl => "جنھن" ; + ResSnd.Voc => "جھڙی" ; + ResSnd.Abl => "جھڙی" + }; + Fem => table { + + ResSnd.Dir => "جھڙی" ; + ResSnd.Obl => "جنھن" ; + ResSnd.Voc => "جھڙی" ; + ResSnd.Abl => "جھڙی" + } + }; + Pl => table { + Masc => table { + ResSnd.Dir => "جھڙی" ; + ResSnd.Obl => "جھڙی" ; + ResSnd.Voc => "جھڙی" ; + ResSnd.Abl => "جھڙی" + }; + Fem => table { + ResSnd.Dir => "جھڙی" ; + ResSnd.Obl => "جھڙی" ; + ResSnd.Voc => "جھڙی" ; + ResSnd.Abl => "جھڙی" + } + } + }; + a = RNoAg + } ; + +}
@@ -0,0 +1,673 @@+--# -path=.:../abstract:../common:../../prelude +-- +--1 Sndu auxiliary operations. +-- +-- This module contains operations that are needed to make the +-- resource syntax work. + +resource ResSnd = ParamX ** open Prelude,Predef in { + + flags optimize=all ; + coding = utf8; + + param + Case = Dir | Obl | Voc | Abl ; + Gender = Masc | Fem ; + VTense = Subj | Perf | Imperf; + PPerson = Pers1 + | Pers2_Casual + | Pers2_Respect + | Pers3_Near + | Pers3_Distant; + + Order = ODir | OQuest ; + +--2 For $Relative$ + + RAgr = RNoAg | RAg Agr ; + RCase = RC Number Case ; + +-- for Numerial + + CardOrd = NCard | NOrd ; + + VerbForm4 = + VF VTense PPerson Number Gender + | Inf | Inf_Fem | Inf_Obl | Ablative + | Root ; + + oper + Noun = {s : Number => Case => Str ; g : Gender} ; + Verb = {s : VerbForm4 => Str} ; + Preposition = {s : Str}; + DemPronForm = {s : Number => Gender => Case => Str}; + -- PossPronForm = {s : Number => Gender => Case => Str}; + Determiner = {s : Number => Gender => Str ; n : Number}; + + ----------------------------------------------- + -- Snd Adjectives + ----------------------------------------------- + Adjective1 = {s : Number => Gender => Case => Str} ; + + mkAdj1 : Str -> Adjective1 ; + mkAdj1 nyrw = let end = last (nyrw) ; + --nyr = if_then_else Str (eq end "ی") nyrw (tk 1 nyrw) + nyr = (tk 1 nyrw) + in adj1 (nyrw) (nyr+"ی") ( nyr+"ا") (nyr+"ا") (nyrw) (nyr+"ی") (nyr+"ی") (nyr+"ی") + (nyr+"ا") (nyr+"ن") ( nyr+"ا") (nyr+"ا") (nyr+"یون") (nyr+"ین") (nyr+"ین") (nyr+"یون") ; + + + + adj1 :(x1,_,_,_,_,_,_, _,_,_,_,_,_,_,_, x16 : Str) -> {s : Number => Gender => Case => Str} = + \msd,mso,msv,msa, fsd,fso,fsv,fsa, mpd,mpo,mpv,mpa, fpd,fpo,fpv,fpa -> { + s = table { + Sg => (cmnAdj msd mso msv msa fsd fso fsv fsa).s ; + Pl => (cmnAdj mpd mpo mpv mpa fpd fpo fpv fpa).s + } + }; + + mkAdj2 : Str -> Adjective1 ; + mkAdj2 young = adj1 (young) (young) (young ) (young) (young) (young) (young) (young) + (young) (young) (young ) (young) (young+"ین") (young+"ین") (young+"ین") (young+"ین") ; + + + + + + mkAdj3 : Str -> Adjective1 ; + mkAdj3 acank = adj1 acank acank acank acank acank acank acank acank acank acank acank acank acank acank acank acank ; + + + cmnAdj : (x1,_,_,_,_,_,_,x8 : Str) -> {s : Gender => Case => Str} = + \sd,so,sv,sa, pd,po,pv,pa -> { + s = table { + Masc => table { + Dir => sd ; + Obl => so ; + Voc => sv ; + Abl => sa + } ; + Fem => table { + Dir => pd ; + Obl => po ; + Voc => pv ; + Abl => pa + } + } + } ; + + + + + RefPron : Str; + RefPron = "پاڻ"; + + ---------------------------------------------------------- + -- Grammar part + ---------------------------------------------------------- + + param + Agr = Ag Gender Number PPerson ; + NPCase = NPC Case | NPObj | NPErg ; + + oper + np2pronCase : (Case => Str) -> NPCase -> Agr -> Str = \ppf,npc,a -> case npc of { + NPC c => ppf ! c; + NPObj => ppf ! Obl ; + NPErg => case (fromAgr a).p of { + (Pers3_Near|Pers3_Distant) => ppf ! Dir ++ "جی" ; + _ => ppf ! Dir + } + } ; + + toNP : ( Case => Str) -> NPCase -> Str = \pn, npc -> case npc of { + NPC c => pn ! c ; + NPObj => pn ! Dir ; + NPErg => pn ! Obl + } ; + + detcn2NP : (Determiner) -> Noun -> NPCase -> Number -> Str = \dt,cn,npc,nn -> case npc of { + NPC c => dt.s ! Sg ! Masc ++ cn.s ! nn ! c ; + NPObj => dt.s ! Sg ! Masc ++ cn.s ! nn ! Dir ; + NPErg => dt.s ! Sg ! Masc ++ cn.s ! nn ! Obl + } ; + + det2NP : (Determiner) -> NPCase -> Str = \dt,npc -> case npc of { + NPC c => dt.s ! Sg ! Masc ; + NPObj => dt.s ! Sg ! Masc ; + NPErg => dt.s ! Sg ! Masc + } ; + + + oper +------------------------------------------ +-- Agreement transformations +----------------------------------------- + + toAgr : Number -> PPerson -> Gender -> Agr = \n,p,g -> + Ag g n p; + + + fromAgr : Agr -> {n : Number ; p : PPerson ; g : Gender} = \a -> case a of { + Ag g n p => {n = n ; p = p ; g = g} + } ; + + conjAgr : Agr -> Agr -> Agr = \a0,b0 -> + let a = fromAgr a0 ; b = fromAgr b0 + in + toAgr + (conjNumber a.n b.n) + b.p a.g; + + giveNumber : Agr -> Number =\a -> case a of { + Ag _ n _ => n + }; + giveGender : Agr -> Gender =\a -> case a of { + Ag g _ _ => g + }; + + defaultAgr : Agr = agrP3 Masc Sg ; + agrP3 : Gender -> Number -> Agr = \g,n -> Ag g n Pers3_Distant ; + + personalAgr : Agr = agrP1 Masc Sg ; + agrP1 : Gender -> Number -> Agr = \g,n -> Ag g n Pers1 ; + + param + CPolarity = + CPos + | CNeg Bool ; -- contracted or not + + oper + contrNeg : Bool -> Polarity -> CPolarity = \b,p -> case p of { + Pos => CPos ; + Neg => CNeg b + } ; + + NP : Type = {s : NPCase => Str ; a : Agr ; isPron : Bool} ; + + param + CTense = CPresent | CPast | CFuture | CContinuous; + + oper + copula : CTense -> Number -> PPerson -> Gender -> Str = \t,n,p,g -> +case <t,n,p,g> of { +<CPresent,Sg,Pers1,Masc > => "ٿو"; +<CPresent,Sg,Pers1,Fem > => "ٿی" ; +<CPresent,Sg,Pers2_Casual,Masc > => "ٿو" ; +<CPresent,Sg,Pers2_Casual,Fem > => "ٿی" ; +<CPresent,Sg,Pers2_Respect,Masc > => "ٿا" ; +<CPresent,Sg,Pers2_Respect,Fem > => "ٿیون" ; +<CPresent,Sg,Pers3_Near,Masc > => "ٿو" ; +<CPresent,Sg,Pers3_Near,Fem > => "ٿی" ; +<CPresent,Sg,Pers3_Distant,Masc > => "ٿو" ; +<CPresent,Sg,Pers3_Distant,Fem > => "ٿی" ; +<CPresent,Pl,Pers1,Masc > => "ٿا" ; +<CPresent,Pl,Pers1,Fem > => "ٿیون" ; +<CPresent,Pl,Pers2_Casual,Masc > => "ٿا" ; +<CPresent,Pl,Pers2_Casual,Fem > => "ٿی" ; +<CPresent,Pl,Pers2_Respect,Masc > => "ٿا" ; +<CPresent,Pl,Pers2_Respect,Fem > => "ٿیون" ; +<CPresent,Pl,Pers3_Near,Masc > => "ٿا" ; +<CPresent,Pl,Pers3_Near,Fem > => "ٿیون" ; +<CPresent,Pl,Pers3_Distant,Masc > => "ٿا" ; +<CPresent,Pl,Pers3_Distant,Fem > => "ٿیون" ; +<CPast,Sg,Pers1,Masc > => "ھیم" ; +<CPast,Sg,Pers1,Fem > => "ھیم" ; +<CPast,Sg,Pers2_Casual,Masc > => "ھ۶ین" ; +<CPast,Sg,Pers2_Casual,Fem > => "ھ۶ین" ; +<CPast,Sg,Pers2_Respect,Masc > => "ھ۶و" ; +<CPast,Sg,Pers2_Respect,Fem > => "ھ۶یون" ; +<CPast,Sg,Pers3_Near,_ > => "اھی" ; +-- <CPast,Sg,Pers3_Near,Fem > => "اھ۶" ; +<CPast,Sg,Pers3_Distant,Masc > => "ھیو" ; +<CPast,Sg,Pers3_Distant,Fem > => "ھ۶ی" ; + +<CPast,Pl,Pers1,Masc > => "ھ۶اسین" ; +<CPast,Pl,Pers1,Fem > => "ھیوسین" ; +<CPast,Pl,Pers2_Casual,_ > => "ھ۶ا" ; +<CPast,Pl,Pers2_Respect,_ > => "ھیو" ; +<CPast,Pl,Pers3_Near,Masc > => "ھ۶ا" ; +<CPast,Pl,Pers3_Near,Fem > => "ھ۶یون" ; +<CPast,Pl,Pers3_Distant,Masc > => "ھ۶ا" ; +<CPast,Pl,Pers3_Distant,Fem > => "ھیون" ; + +<CFuture,Sg,Pers1,Masc > => "ھوندس" ; +<CFuture,Sg,Pers1,Fem > => "ھوندس" ; +<CFuture,Sg,Pers2_Casual,Masc > => "ھوندین" ; +<CFuture,Sg,Pers2_Casual,Fem > => "ھوندین" ; +<CFuture,Sg,Pers2_Respect,Masc > => "ھوندو۶ " ; +<CFuture,Sg,Pers2_Respect,Fem > => "ھوندو۶ " ; +<CFuture,Sg,Pers3_Near,Masc > => "ھوندو " ; +<CFuture,Sg,Pers3_Near,Fem > => "ھوندی" ; +<CFuture,Sg,Pers3_Distant,Masc > => "ھوندو " ; +<CFuture,Sg,Pers3_Distant,Fem > => "ھوندی" ; +<CFuture,Pl,Pers1,Masc > => "ھونداسین" ; +<CFuture,Pl,Pers1,Fem > => "ھوندیونسین" ; +<CFuture,Pl,Pers2_Casual,Masc > => "ھوندو۶ " ; +<CFuture,Pl,Pers2_Casual,Fem > => "ھوندیوین" ; +<CFuture,Pl,Pers2_Respect,Masc > => "ھوندو۶ " ; +<CFuture,Pl,Pers2_Respect,Fem > => "ھوندیوین" ; +<CFuture,Pl,Pers3_Near,Masc > => "ھوندا" ; +<CFuture,Pl,Pers3_Near,Fem > => "ھوندیون" ; +<CFuture,Pl,Pers3_Distant,Masc > => "ھوندا" ; +<CFuture,Pl,Pers3_Distant,Fem > => "ھوندیون" ; + +<CContinuous,Sg,Pers1,Masc > => "اھیان" ; +<CContinuous,Sg,Pers1,Fem > => "اھیان" ; +<CContinuous,Sg,Pers2_Casual,Masc > => "اھین" ; +<CContinuous,Sg,Pers2_Casual,Fem > => "اھین" ; +<CContinuous,Sg,Pers2_Respect,Masc > => "اھیو " ; +<CContinuous,Sg,Pers2_Respect,Fem > => "اھیو " ; +<CContinuous,Sg,Pers3_Near,Masc > => "اھی " ; +<CContinuous,Sg,Pers3_Near,Fem > => "اھی" ; +<CContinuous,Sg,Pers3_Distant,Masc > => "اھی " ; +<CContinuous,Sg,Pers3_Distant,Fem > => "اھی" ; +<CContinuous,Pl,Pers1,Masc > => "اھیون" ; +<CContinuous,Pl,Pers1,Fem > => "اھیون" ; +<CContinuous,Pl,Pers2_Casual,Masc > => "اھیو " ; +<CContinuous,Pl,Pers2_Casual,Fem > => "اھیو " ; +<CContinuous,Pl,Pers2_Respect,Masc > => "اھیو " ; +<CContinuous,Pl,Pers2_Respect,Fem > => "اھیو " ; +<CContinuous,Pl,Pers3_Near,Masc > => "اھن" ; +<CContinuous,Pl,Pers3_Near,Fem > => "اھن" ; +<CContinuous,Pl,Pers3_Distant,Masc > => "اھن" ; +<CContinuous,Pl,Pers3_Distant,Fem > => "اھن" + + +} ; + param + VPPTense = + VPPres + |VPPast + |VPFutr + |VPPerf; + + VPHTense = + VPGenPres -- impf hum nahim "I گo" + | VPImpPast -- impf Ta nahim "I wعنت" + | VPFut -- fut na/nahim "I سhاll گo" + | VPContPres -- stem raha hum nahim "I ام گoiنگ" + | VPContPast -- stem raha Ta nahim "I wاس گoiنگ" + | VPContFut + | VPPerfPres -- perf hum na/nahim "I hاvع گoنع" + | VPPerfPast -- perf Ta na/nahim "I hاد گoنع" + | VPPerfFut + | VPPerfPresCont + | VPPerfPastCont + | VPPerfFutCont + | VPSubj -- subj na "I مای گo" + ; + + VPHForm = + VPTense VPPTense Agr -- 9 * 12 + | VPReq + | VPImp + | VPReqFut + | VPInf + | VPStem + ; + + VType = VIntrans | VTrans | VTransPost ; + + oper + + objVType : VType -> NPCase = \vt -> case vt of { + VTrans => NPObj ; + _ => NPC Obl + } ; + + VPH : Type = { + s : VPHForm => {fin, inf : Str} ; + obj : {s : Str ; a : Agr} ; + subj : VType ; + comp : Agr => Str; + inf : Str; + ad : Str; + embComp : Str ; + prog : Bool ; + } ; + + VPHSlash = VPH ** {c2 : Compl} ; + + oper + Compl : Type = {s : Str ; c : VType} ; + + predV : Verb -> VPH = \verb -> { + s = \\vh => + case vh of { + VPTense VPPres (Ag g n p) => {fin = copula CPresent n p g ; inf = verb.s ! VF Subj p n g } ; + VPTense VPPast (Ag g n p) => {fin = copula CPast n p g ; inf =verb.s ! VF Perf p n g} ; + VPTense VPFutr (Ag g n p) => {fin = copula CFuture n p g ; inf = verb.s ! VF Imperf p n g } ; + VPTense VPPerf (Ag g n p) => { fin = [] ; inf = verb.s ! Root ++ cka g n } ; + VPStem => {fin = [] ; inf = verb.s ! Root}; + VPInf => {fin = verb.s!Inf_Obl ; inf = verb.s ! Root}; + VPImp => {fin = verb.s!VF Subj Pers3_Near Pl Masc ; inf = verb.s ! Root}; + VPReq => {fin = [] ; inf = verb.s!VF Subj Pers1 Pl Masc}; + _ => {fin = [] ; inf = verb.s ! Root} + }; + obj = {s = [] ; a = defaultAgr} ; + subj = VIntrans ; + inf = verb.s ! Inf; + ad = []; + embComp = []; + prog = False ; + comp = \\_ => [] + } ; + + predVc : (Verb ** {c2,c1 : Str}) -> VPHSlash = \verb -> + predV verb ** {c2 = {s = verb.c1 ; c = VTrans} } ; +------------------------- +-- added for cauitives + predVcc : (Verb **{c2:Compl}) -> VPHSlash = \verb -> + predV verb ** {c2 = {s = "" ; c = VTrans} } ; +------------------------ + + raha : Gender -> Number -> Str = \g,n -> + (mkAdj1 "ریا").s ! n ! g ! Dir ; + rahanDa : Gender -> Number -> Str = \g,n -> + (mkAdj1 "رھندا").s ! n ! g ! Dir ; + + pya : Gender -> Number -> Str = \g,n -> + (mkAdj1 "پیا").s ! n ! g ! Dir ; + + cka : Gender -> Number -> Str = \g,n -> + (mkAdj1 "گیا").s ! n ! g ! Dir ; + + hw : PPerson -> Number -> Str = \pp,n -> + case <pp,n> of { + <Pers1,_> => "hwwاN"; + <Pers2_Casual,Sg> => "hwwیN"; + <Pers2_Casual,Pl> => "hww"; + <Pers2_Respect,_> => "hww"; + <Pers3_Distant,Sg> => "hwwE"; + <Pers3_Distant,Pl> => "hwن"; + <Pers3_Near,Sg> => "hwwE"; + <Pers3_Near,Pl> => "hwن" + + }; + + predAux : Aux -> VPH = \verb -> { + s = \\vh => + let + + inf = verb.inf ; + part = verb.ppart ; + + in + case vh of { + VPTense VPPres (Ag g n p) => {fin = copula CContinuous n p g ; inf = part } ; + VPTense VPPast (Ag g n p) => {fin = copula CPast n p g ; inf = part } ; + VPTense VPFutr (Ag g n p) => {fin = copula CFuture n p g ; inf = part ++ hw p n } ; + VPStem => {fin = [] ; inf = "رh" }; + _ => {fin = part ; inf = inf } + }; + obj = {s = [] ; a = defaultAgr} ; + subj = VIntrans ; + inf = verb.inf; + ad = []; + embComp = []; + prog = False ; + comp = \\_ => [] + } ; + + Aux = { + inf,ppart,prpart : Str + } ; + + auxBe : Aux = { + inf = "" ; + ppart = "" ; + prpart = "" + } ; + + predProg : VPH -> VPH = \verb -> { + s = \\vh => + case vh of { + VPTense VPPres (Ag g n p) => {fin = copula CPresent n p g ; inf = (verb.s!VPTense VPPres (Ag g n p)).inf ++ pya g n} ; + VPTense VPPast (Ag g n p) => {fin = copula CPast n p g ; inf = (verb.s!VPTense VPPres (Ag g n p)).inf ++ pya g n} ; + VPTense VPFutr (Ag g n p) => {fin = copula CFuture n p g ; inf = (verb.s!VPTense VPPres (Ag g n p)).inf } ; + VPTense VPPerf (Ag g n p) => {fin = copula CPast n p g ; inf = (verb.s!VPTense VPPres (Ag g n p)).inf ++ raha g n } ; + VPStem => {fin = [] ; inf = (verb.s!VPStem).inf }; + _ => {fin = [] ; inf = [] } + }; + obj = verb.obj ; + subj = VIntrans ; + inf = verb.inf; + ad = verb.ad; + embComp = verb.embComp; + prog = True ; + comp = verb.comp + } ; + + Clause : Type = {s : VPHTense => Polarity => Order => Str} ; + mkClause : NP -> VPH -> Clause = \np,vp -> { + s = \\vt,b,ord => + let + subjagr : NPCase * Agr = case vt of { + VPImpPast => case vp.subj of { + VTrans => <NPErg, vp.obj.a> ; + VTransPost => <NPErg, defaultAgr> ; + _ => <NPC Dir, np.a> + } ; + _ => <NPC Dir, np.a> + } ; + subj = subjagr.p1 ; + agr = subjagr.p2 ; + n = (fromAgr agr).n; + p = (fromAgr agr).p; + g = (fromAgr agr).g; + vps = case vt of { + + VPGenPres => vp.s ! VPTense VPPres agr ; + VPImpPast => vp.s ! VPTense VPPast agr ; + + VPFut => case vp.prog of { True => {fin = (vp.s ! VPTense VPFutr agr).fin ; inf = (vp.s ! VPTense VPFutr agr).inf ++ hw p n} ; + _ => vp.s ! VPTense VPFutr agr } ; + VPContPres => + {fin = copula CContinuous n p g ; inf = (vp.s ! VPTense VPPres agr).inf ++ raha g n } ; + VPContPast => + {fin = copula CPast n p g ; inf = (vp.s ! VPTense VPPres agr).inf ++ raha g n } ; + VPContFut => + {fin = copula CFuture n p g ; inf = (vp.s ! VPTense VPPres agr).inf ++ raha g n } ; + VPPerfPres => + {fin = copula CContinuous n p g ; inf = (vp.s ! VPTense VPPast agr).inf } ; + -- {fin = copula CPresent n p g ; inf = (vp.s ! VPStem).inf ++ cka g n } ; + VPPerfPast => + -- {fin = copula CPast n p g ; inf = (vp.s ! VPStem).inf ++ cka g n } ; + {fin = copula CPast n p g ; inf = (vp.s ! VPTense VPPast agr).inf } ; + VPPerfFut => + {fin = copula CFuture n p g ; inf = (vp.s ! VPTense VPPast agr).inf } ; + VPPerfPresCont => + {fin = copula CContinuous n p g ; inf = (vp.s ! VPTense VPFutr agr).inf ++ raha g n} ; + VPPerfPastCont => + {fin = copula CPast n p g ; inf = (vp.s ! VPTense VPFutr agr).inf ++ rahanDa g n} ; + VPPerfFutCont => + {fin = copula CFuture n p g ; inf = (vp.s ! VPTense VPFutr agr).inf ++ rahanDa g n} ; + VPSubj => case vp.prog of { True => {fin = (vp.s ! VPTense VPFutr agr).inf ++ hw p n ; inf = "شاید" } ; + _ => {fin = (vp.s ! VPTense VPFutr agr).inf ; inf = "شاید" } } + + }; + + + quest = + case ord of + { ODir => []; + OQuest => "ڇا" }; + na = + case b of + { Pos => []; + Neg => "ن" }; + nahim = + case b of + { Pos => []; + Neg => "ن" }; + in + case vt of { + VPSubj => quest ++ np.s ! subj ++ vp.obj.s ++ vp.ad ++ vp.comp ! np.a ++ vps.inf ++ na ++ vps.fin ++ vp.embComp ; + _ => quest ++ np.s ! subj ++ vp.obj.s ++ vp.ad ++ vp.comp ! np.a ++ vps.inf ++ nahim ++ vps.fin ++ vp.embComp}; + + } ; + + mkSClause : Str -> Agr -> VPH -> Clause = + \subj,agr,vp -> { + s = \\t,b,ord => + let + n = (fromAgr agr).n; + p = (fromAgr agr).p; + g = (fromAgr agr).g; + vps = case t of { + VPGenPres => vp.s ! VPTense VPPres agr ; + VPImpPast => vp.s ! VPTense VPPast agr ; + VPFut => vp.s ! VPTense VPFutr agr ; + VPContPres => + {fin = copula CPresent n p g ; inf = (vp.s ! VPStem).inf ++ pya g n } ; + VPContPast => + {fin = copula CPast n p g ; inf = (vp.s ! VPStem).inf ++ pya g n } ; + VPContFut => + {fin = copula CFuture n p g ; inf = (vp.s ! VPStem).inf ++ pya g n ++ hw p n } ; + VPPerfPres => + {fin = copula CPresent n p g ; inf = (vp.s ! VPStem).inf ++ cka g n } ; + VPPerfPast => + {fin = copula CPast n p g ; inf = (vp.s ! VPStem).inf ++ cka g n } ; + VPPerfFut => + {fin = copula CFuture n p g ; inf = (vp.s ! VPStem).inf ++ cka g n ++ hw p n } ; + VPPerfPresCont => + {fin = copula CPresent n p g ; inf = (vp.s ! VPStem).inf ++ pya g n } ; + VPPerfPastCont => + {fin = copula CPast n p g ; inf = (vp.s ! VPStem).inf ++ pya g n } ; + VPPerfFutCont => + {fin = copula CFuture n p g ; inf = (vp.s ! VPStem).inf ++ pya g n ++ hw p n } ; + VPSubj => {fin = (vp.s ! VPTense VPPres agr).inf ; inf = "شاید" } + + }; + + quest = + case ord of + { ODir => []; + OQuest => "ڇا" }; + na = + case b of + { Pos => []; + Neg => "ن" }; + nahim = + case b of + { Pos => []; + Neg => "ن" }; + in + case t of { + VPSubj => quest ++ subj ++ vp.obj.s ++ vp.ad ++ vp.comp ! agr ++ vps.inf ++ na ++ vps.fin ++ vp.embComp; + _ => quest ++ subj ++ vp.obj.s ++ vp.ad ++ vp.comp ! agr ++ vps.inf ++ nahim ++ vps.fin ++ vp.embComp}; + } ; + + insertSubj : PPerson -> Str -> Str = \p,s -> + case p of { Pers1 => s ++ "wN" ; _ => s ++ ""}; + + insertObj : (Agr => Str) -> VPH -> VPH = \obj1,vp -> { + s = vp.s ; + obj = vp.obj ; + subj = vp.subj ; + inf = vp.inf; + ad = vp.ad; + embComp = vp.embComp; + prog = vp.prog ; + comp = \\a => vp.comp ! a ++ obj1 ! a + } ; + insertVV : Str -> VPH -> Str -> VPH -> VPH = \obj1,vp,emb,vp2 -> { + s = vp.s ; + obj = vp2.obj ; + subj = vp.subj ; + inf = vp.inf; + ad = vp.ad; + embComp = vp.embComp ++ emb; -- this should be covered in urdu as well + prog = vp.prog ; + comp = \\a => vp.comp ! a ++ obj1 + } ; + + insertObj2 : (Str) -> VPH -> VPH = \obj1,vp -> { + s = vp.s; + obj = vp.obj ; + subj = vp.subj ; + inf = vp.inf; + ad = vp.ad; + embComp = vp.embComp ++ obj1; + prog = vp.prog ; + comp = vp.comp + + } ; + + insertObjc : (Agr => Str) -> VPHSlash -> VPHSlash = \obj,vp -> + insertObj obj vp ** {c2 = vp.c2} ; + insertObjc2 : Str -> VPHSlash -> VPHSlash = \obj,vp -> + insertObj2 obj vp ** {c2 = vp.c2} ; + + infVP : Bool -> VPH -> Agr -> Str = \isAux,vp,a -> + vp.obj.s ++ vp.inf ++ vp.comp ! a ; + infVV : Bool -> VPH -> Str = \isAux,vp -> + case isAux of {False => (vp.comp ! (toAgr Sg Pers1 Masc)) ++ vp.inf ; True => (vp.comp ! (toAgr Sg Pers1 Masc)) ++ (vp.s ! VPImp).fin }; -- need to be checked and should be covered in urdu as well + infV2V : Bool -> VPH -> Str = \isAux,vp -> + case isAux of {False => (vp.comp ! (toAgr Sg Pers1 Masc)) ++ vp.inf ++ "دی" ; True => (vp.comp ! (toAgr Sg Pers1 Masc)) ++ (vp.s ! VPImp).fin ++ "دی"}; -- need to be checked and should be covered in urdu as well + + insertObject : NP -> VPHSlash -> VPH = \np,vps -> { + s = vps.s ; + obj = case np.isPron of { + False => {s = vps.obj.s ++ np.s ! objVType vps.c2.c ++ vps.c2.s ; a = np.a} ; + _ => {s = vps.obj.s ++ np.s ! objVType vps.c2.c ++ vps.c2.s ; a = np.a} + }; + subj = vps.c2.c ; + inf = vps.inf; + ad = vps.ad; + embComp = vps.embComp; + prog = vps.prog ; + comp = vps.comp + } ; + + insertObjPre : (Agr => Str) -> VPHSlash -> VPH = \obj,vp -> { + s = vp.s ; + obj = vp.obj ; + inf = vp.inf ; + subj = vp.subj ; + ad = vp.ad ; + embComp = vp.embComp; + prog = vp.prog ; + comp = \\a => obj ! a ++ vp.c2.s ++ vp.comp ! a + } ; + + insertAdV : Str -> VPH -> VPH = \ad,vp -> { + s = vp.s ; + obj = vp.obj ; + inf = vp.inf ; + subj = vp.subj; + ad = vp.ad ++ ad ; + embComp = vp.embComp; + prog = vp.prog ; + comp = vp.comp + } ; + conjThat : Str = "ت" ; + checkPron : NP -> Str -> Str = \np,str -> case (np.isPron) of { + True => np.s ! NPC Obl; + False => np.s ! NPC Obl ++ str} ; + + insertEmbCompl : VPH -> Str -> VPH = \vp,emb -> { + s = vp.s ; + obj = vp.obj ; + inf = vp.inf ; + subj = vp.subj; + ad = vp.ad; + embComp = vp.embComp ++ emb; + prog = vp.prog ; + comp = vp.comp + } ; + + insertTrans : VPH -> VType -> VPH = \vp,vtype -> { + s = vp.s ; + obj = vp.obj ; + inf = vp.inf ; + subj = case vtype of {VIntrans => VTransPost ; VTrans => VTrans ; _ => vtype} ; -- still some problem not working properly + ad = vp.ad; + embComp = vp.embComp ; + prog = vp.prog ; + comp = vp.comp + } ; + +} +
@@ -0,0 +1,104 @@+concrete SentenceSnd of Sentence = CatSnd ** open Prelude, ResSnd in { + + flags optimize=all_subs ; + coding = utf8; + + lin + + PredVP np vp = mkClause np vp ; + + PredSCVP sc vp = mkSClause sc.s (defaultAgr) vp ; + + ImpVP vp = { + s = \\pol,n => + let + agr = Ag Masc (numImp n) Pers2_Casual ; +-- verb = infVP True vp agr ; + verb = (vp.s ! VPImp).inf ++ vp.comp ! agr ; + dont = case pol of { + CNeg True => "ن" ; + CNeg False => "ن" ; + _ => [] + } + in + dont ++ verb + } ; + + SlashVP np vp = + mkClause np vp ** {c2 = vp.c2} ; + + AdvSlash slash adv = { + s = \\t,p,o => adv.s ! Masc ++ slash.s ! t ! p ! o ; + c2 = slash.c2 + } ; + + SlashPrep cl prep = cl ** {c2 = { s = prep.s ; c = VIntrans}} ; + + SlashVS np vs slash = + mkClause np + (insertObj2 (conjThat ++ slash.s) (predV vs)) ** + {c2 = slash.c2} ; + + EmbedS s = {s = conjThat ++ s.s} ; + EmbedQS qs = {s = qs.s ! QIndir} ; + EmbedVP vp = {s = infVP False vp defaultAgr} ; --- agr + + UseCl temp p cl = + { s = case <temp.t,temp.a> of { + <Pres,Simul> => temp.s ++ p.s ++ cl.s ! VPGenPres ! p.p ! ODir; + <Pres,Anter> => temp.s ++ p.s ++ cl.s ! VPPerfPres ! p.p ! ODir; + <Past,Simul> => temp.s ++ p.s ++ cl.s ! VPImpPast ! p.p ! ODir; + <Past,Anter> => temp.s ++ p.s ++ cl.s ! VPPerfPast ! p.p ! ODir; + <Fut,Simul> => temp.s ++ p.s ++ cl.s ! VPFut ! p.p ! ODir; + <Fut,Anter> => temp.s ++ p.s ++ cl.s ! VPPerfFut ! p.p ! ODir; + <Cond,Simul> => temp.s ++ p.s ++ cl.s ! VPSubj ! p.p ! ODir; + <Cond,Anter> => temp.s ++ p.s ++ cl.s ! VPSubj ! p.p ! ODir -- this needs to be fixed by making SubjPerf in ResPnb + + }; + } ; + UseQCl temp p cl = { + s = \\q => case <temp.t,temp.a> of { + <Pres,Simul> => temp.s ++ p.s ++ cl.s ! VPGenPres ! p.p ! q; + <Pres,Anter> => temp.s ++ p.s ++ cl.s ! VPPerfPres ! p.p ! q; + <Past,Simul> => temp.s ++ p.s ++ cl.s ! VPImpPast ! p.p ! q; + <Past,Anter> => temp.s ++ p.s ++ cl.s ! VPPerfPast ! p.p ! q; + <Fut,Simul> => temp.s ++ p.s ++ cl.s ! VPFut ! p.p ! q; + <Fut,Anter> => temp.s ++ p.s ++ cl.s ! VPPerfFut ! p.p ! q; + <Cond,Simul> => temp.s ++ p.s ++ cl.s ! VPSubj ! p.p ! q; + <Cond,Anter> => temp.s ++ p.s ++ cl.s ! VPSubj ! p.p ! q + + }; + } ; + UseRCl temp p rcl = { + s = \\q => case <temp.t,temp.a> of { + <Pres,Simul> => temp.s ++ p.s ++ rcl.s ! VPGenPres ! p.p ! ODir ! q; + <Pres,Anter> => temp.s ++ p.s ++ rcl.s ! VPPerfPres ! p.p ! ODir ! q; + <Past,Simul> => temp.s ++ p.s ++ rcl.s ! VPImpPast ! p.p ! ODir ! q; + <Past,Anter> => temp.s ++ p.s ++ rcl.s ! VPPerfPast ! p.p ! ODir ! q; + <Fut,Simul> => temp.s ++ p.s ++ rcl.s ! VPFut ! p.p ! ODir ! q; + <Fut,Anter> => temp.s ++ p.s ++ rcl.s ! VPPerfFut ! p.p ! ODir ! q; + <Cond,Simul> => temp.s ++ p.s ++ rcl.s ! VPSubj ! p.p ! ODir ! q; + <Cond,Anter> => temp.s ++ p.s ++ rcl.s ! VPSubj ! p.p ! ODir ! q + }; + c = rcl.c + } ; + UseSlash temp p clslash = { + s = case <temp.t,temp.a> of { + <Pres,Simul> => temp.s ++ p.s ++ clslash.s ! VPGenPres ! p.p ! ODir; + <Pres,Anter> => temp.s ++ p.s ++ clslash.s ! VPPerfPres ! p.p ! ODir; + <Past,Simul> => temp.s ++ p.s ++ clslash.s ! VPImpPast ! p.p ! ODir ; + <Past,Anter> => temp.s ++ p.s ++ clslash.s ! VPPerfPast ! p.p ! ODir; + <Fut,Simul> => temp.s ++ p.s ++ clslash.s ! VPFut ! p.p ! ODir; + <Fut,Anter> => temp.s ++ p.s ++ clslash.s ! VPPerfFut ! p.p ! ODir; + <Cond,Simul> => temp.s ++ p.s ++ clslash.s ! VPSubj ! p.p ! ODir; + <Cond,Anter> => temp.s ++ p.s ++ clslash.s ! VPSubj ! p.p ! ODir + }; + c2 = clslash.c2 + } ; + + AdvS a s = {s = a.s ! Masc ++ s.s} ; + + RelS s r = {s = s.s ++ r.s ! agrP3 Masc Sg} ; + SSubjS s sj s = { s = s.s ++ sj.s ++ s.s}; + +}
@@ -0,0 +1,132 @@+concrete StructuralSnd of Structural = CatSnd ** + open MorphoSnd, ParadigmsSnd, Prelude in { + + flags optimize=all ; + coding = utf8; + + lin + above_Prep = mkPrep "مٿی " ; + after_Prep = mkPrep "کان پو۶ " ; + all_Predet = ss "سڀ " ; + almost_AdA, almost_AdN = mkAdN "گھڻو ڪری " ; + although_Subj = ss "جیتوڻیڪ " ; + always_AdV = ss "ھمیشھ " ; + and_Conj = sd2 [] "۽" ** {n = Pl} ; + because_Subj = ss "ڇاڪاڻ تی " ; + before_Prep = mkPrep "پیھرین" ; + behind_Prep = mkPrep "پٺتی " ; + between_Prep = mkPrep " جی وچ می " ; + both7and_DConj = sd2 "ٻ۶ی " "۽" ** {n = Pl} ; + but_PConj = ss "پر" ; + by8agent_Prep = mkPrep "ھٿان " ; + by8means_Prep = mkPrep "ڪان" ; + can8know_VV,can_VV = mkV "سگھڻ " ** { isAux = True} ; + during_Prep = mkPrep "وچ ۾" ; + either7or_DConj = sd2 "ڪو۶ی ٻیو " "یا" ** {n = Sg} ; +--everybody_NP = MassNP (UseN (ParadigmsSnd.mkN "ھر ڪو۶ی" "ھر ڪو۶ی" "ھر ڪو۶ی" "ھر ڪو۶ی" Masc )); -- not a good way coz need to include NounSnd + every_Det = mkDet "ھر ھڪ " "ھر ھڪ " "ھر ھڪ " "ھر ھڪ " Sg; +--everything_NP = MassNP (UseN (ParadigmsSnd.mkN "ھر شی " "ھر شی " "ھر شی " "سڀ ڪجھ " Masc )); + everywhere_Adv = mkAdv "ھر ھنڌ " ; + few_Det = mkDet "ڪجھ " "ڪجھ " "ڪجھ " "ڪجھ " Pl ; + first_Ord = {s = "پھریون" ; n = Sg} ; --DEPRECATED + for_Prep = mkPrep "لا۶ی "; + from_Prep = mkPrep "وٽان" ; + he_Pron = personalPN "ھو" "ھو" "" ["ھو "] ["ھو"] Sg Masc Pers3_Distant ; + here_Adv = mkAdv "ھتی" ; + here7to_Adv = mkAdv "اجھو" ; + here7from_Adv = mkAdv ["ھیڏانھن"] ; + how_IAdv = ss "ڪ۶ین" ; + how8many_IDet = makeIDet "ڪیترا" "ڪیترا" Pl ; + how8much_IAdv = ss "ڪیترا"; + if_Subj = ss "جیڪڏھن" ; + in8front_Prep = mkPrep ["جی سامھون"] ; + i_Pron = personalPN "مان" "مھنجا " "مھنجو " "مان" " " Sg Masc Pers1; + in_Prep = mkPrep "۾" ; + it_Pron = personalPN "اھا" "ھن" "اھو" "اھا" "" Sg Masc Pers3_Near; + less_CAdv = {s = "گھٽ" ; p = ""} ; + many_Det = mkDet "گھڻا" "گھڻی" "ڪافی" "ڪیترا" Pl ; + more_CAdv = {s = "وڌیڪ"; p = "گھڻا" } ; + most_Predet = ss "سڀ کان گھڻو" ; + much_Det = mkDet "گھڻو" "گھڻو" "گھڻو" "گھڻو" Sg ; +--must_VV = { +-- s = table { +-- VVF VInf => ["hاvع تo"] ; +-- VVF VPres => "مuست" ; +-- VVF VPPart => ["hاد تo"] ; +-- VVF VPresPart => ["hاviنگ تo"] ; +-- VVF VPast => ["hاد تo"] ; --# notpresent +-- VVPastNeg => ["hادn'ت تo"] ; --# notpresent +-- VVPresNeg => "مuستn'ت" +-- } ; +-- isAux = True +-- } ; + +-----b + no_Phr = ss "نo" ; + no_Utt = ss "نا" ; + on_Prep = mkPrep "مٿان" ; + one_Quant = demoPN "ھڪ" "ھڪ" "ھڪ" ; -- DEPRECATED + only_Predet = ss "صرف" ; + or_Conj = sd2 [] "یا" ** {n = Sg} ; + otherwise_PConj = ss "ن ت پو۶ی" ; + part_Prep = mkPrep "حسو" ; + possess_Prep = mkPrep[ "جو یا جی"] ; + please_Voc = ss "مھربانی" ; + quite_Adv = ss "ڇڏڻ " ; + she_Pron = personalPN "ھو۶" "ھو" "ھو" ["ھو۶"] ["ھو۶"] Sg Fem Pers3_Distant ; + so_AdA = ss "ان ڪری" ; +--somebody_NP = MassNP (UseN (ParadigmsSnd.mkN "ڪو۶ی" "ڪو۶ی" "ڪو۶ی" "ڪو۶ی" Masc )); + someSg_Det = mkDet "ڪجھ " "ڪجھ " "ڪجھ " "ڪجھ " Sg ; + somePl_Det = mkDet "ڪجھ " "ڪجھ " "ڪجھ " "ڪجھ " Pl ; +--something_NP = MassNP (UseN (ParadigmsSnd.mkN "ڪو۶ی شی" "ڪو۶ی شی" "ڪو۶ی شی" "ڪو۶ی شیون" Masc )); + somewhere_Adv = mkAdv "ڪٿی" ; + that_Quant = demoPN "جیڪو" "" "" ; + that_Subj = ss "اھا" ; + there_Adv = mkAdv "اتی" ; + there7to_Adv = mkAdv ["ھتی"] ; + there7from_Adv = mkAdv ["ھتان"] ; + therefore_PConj = ss "ان ڪری" ; + they_Pron = personalPN "اھی" "اھی" "اھی" ["اھی جو"] ["اھی جو"] Pl Masc Pers3_Distant ; ---- + this_Quant = demoPN "ھی" "ھن" ""; + through_Prep = mkPrep "منجھان" ; + under_Prep = mkPrep " ھیٺان" ; -- ** {lock_Prep = <>}; + too_AdA = ss "بیحد"; + to_Prep = mkPrep "ڏانھن" ; -- ** {lock_Prep = <>}; + very_AdA = ss "تمام" ; + want_VV = mkV "چاھڻ " ** { isAux = False} ; + we_Pron = personalPN "اسان" "اسان" "اسان" "اسانجo" "اسانجo" Pl Masc Pers1 ; + whatSg_IP = mkIP "ڇا" "ڇو" "" "" Sg Masc ; + whatPl_IP = mkIP "ڇا" "ڇو " " " "" Pl Masc ; + when_IAdv = ss "ڪڏھن" ; + when_Subj = ss "جڏھن" ; + where_IAdv = ss "ڪٿی" ; +--which_IQuant = {s = \\_ => "ڪھڙو"} ; + which_IQuant = mkIQuant "جیڪو" "جیڪی" "جیڪا" "جھڙو" ; + whichPl_IDet = makeDet "جیڪY" "جنھن" ; + whichSg_IDet = makeDet "جیڪو " "جیڪا" ; + whoSg_IP = mkIP "ڪیر" "ڪھنجی" "ڪھنجo" "" Sg Masc ; + whoPl_IP = mkIP "ڪیر" "ڪھنجا" "ڪھنجا" "" Pl Masc ; + why_IAdv = ss "ڇو" ; + without_Prep = mkPrep "کان سوا۶ " ; + with_Prep = mkPrep "سان" ; + yes_Phr = ss "ھا" ; + yes_Utt = ss "ھا" ; + youSg_Pron = personalPN "تون" "تون" "تون" "تھنجو" "تھنجی" Sg Masc Pers2_Casual ; + youPl_Pron = personalPN "توھان" "توھان" "توھان" "توھانجو" "توھانجی" Pl Masc Pers2_Casual ; + youPol_Pron = personalPN "توھان" "توھان" "توھان" "توھان جو" "توھان جی" Pl Masc Pers2_Respect ; + no_Quant = demoPN " ڇو ن" "ڇو ن" "ڇو ن " ; + not_Predet = {s="ن"} ; + if_then_Conj = sd2 "جیڪڏھن" "ت" ** {n = Sg} ; + at_least_AdN = mkAdN ["گھٽ می گھٽ"] ; + at_most_AdN = mkAdN ["گھڻی کان گھڻو"]; + +--nothing_NP = MassNP (UseN (ParadigmsSnd.mkN "ڪجھ شی ن" "ڪجھ شی ن" "ڪجھ شی ن" "ڪجھ شی ن" "ڪجھ شی ن" "ڪجھ شی ن" Masc )); + except_Prep = mkPrep "سوا۶ " ; +--nobody_NP = MassNP (UseN (ParadigmsSnd.mkN "ڪو ب ن" "ڪو ب ن" "ڪو ب ن" "ڪو ب ن" "ڪو ب ن" "ڪو ب ن" Masc )); + + as_CAdv = {s = "جی۶ن" ; p = "جھڙو"} ; + have_V2 = mkV2 (mkV "رکڻ ") "" ; + language_title_Utt = ss "ٻوlی" ; + +} +
@@ -0,0 +1,50 @@+--# -path=.:../abstract:../common + +concrete SymbolSnd of Symbol = CatSnd ** open Prelude, ResSnd in { + + flags coding = utf8; + + lin +-- SymbPN i = {s = \\_ => i.s ; g = Masc} ; + SymbPN i = {s = addGenitiveS i.s ; g = Masc} ; + IntPN i = {s = addGenitiveS i.s ; g = Masc} ; + FloatPN i = {s = addGenitiveS i.s ; g = Masc} ; + NumPN i = {s = \\_ =>i.s ; g = Masc} ; + CNIntNP cn i = { + s = \\c => cn.s ! Sg ! Dir ++ i.s ; + a = agrP3 cn.g Sg ; + isPron = False + } ; + CNSymbNP det cn xs = { + s = \\c => det.s!Sg!Masc ++ cn.s ! det.n ! Dir ++ xs.s ; + a = agrP3 cn.g det.n; + isPron = False + } ; + CNNumNP cn i = { + s = \\c => cn.s ! Sg ! Dir ++ i.s ; + a = agrP3 cn.g Sg; + isPron = False + } ; + + SymbS sy = sy ; + SymbNum sy = { s = sy.s ; n = Pl } ; + SymbOrd sy = { s = sy.s ++ "wاN" ; n = Pl} ; + +lincat + + Symb, [Symb] = SS ; + +lin + MkSymb s = s ; + + BaseSymb = infixSS "تE" ; + ConsSymb = infixSS "" ; + +oper + -- Note: this results in a space before 's, but there's + -- not mauch we can do about that. + addGenitiveS : Str -> Case => Str = \s -> + table {_ => s ++ "دا" } ; + + +}
@@ -0,0 +1,44 @@+concrete VerbSnd of Verb = CatSnd ** open ResSnd in {++ flags coding = utf8;+ flags optimize=all_subs ;++ lin+ UseV v = predV v ;+ SlashV2a v = predV v ** {c2 = {s = v.c2.s ; c = VTrans}} ;+ Slash2V3 v np = + insertObjc (\\_ => np.s ! NPObj ++ v.c3 ) (predV v ** {c2 = {s = v.c2 ; c = VTrans}}) ;+ + Slash3V3 v np = + insertObjc (\\_ => checkPron np v.c2) (predV v ** {c2 = {s = v.c3 ; c = VTrans}}) ; + + ComplVV v vp = insertTrans (insertVV (infVV v.isAux vp) (predV v) vp.embComp vp) vp.subj; + ComplVS v s = insertTrans (insertObj2 (conjThat ++ s.s) (predV v)) VTransPost ;+ ComplVQ v q = insertObj2 (conjThat ++ q.s ! QIndir) (predV v) ;+ ComplVA v ap = insertObj (\\a => ap.s ! giveNumber a ! giveGender a ! Dir ) (predV v) ;+ SlashV2V v vp = insertVV (infV2V v.isAux vp) (predV v) vp.embComp vp **{c2 = {s = "تwN" ; c = VTransPost}} ; -- should creat a form at VP level which can be used in VP like 'swn da kyna' also check the c=VTransPost it is correct in case if second v is intrasitive, but not if trans like begged me to ead bread+ SlashV2S v s = insertObjc2 (conjThat ++ s.s) (predV v ** {c2 = {s = "کی" ; c = VTransPost}}) ;+ SlashV2Q v q = insertObjc2 (conjThat ++ q.s ! QIndir) (predV v ** {c2 = {s = "کان" ; c = VTransPost}}) ; -- chek for VTransPost, as in this case , case should be ergative but agrement should be default+ SlashV2A v ap = insertObjc (\\a => ap.s ! giveNumber a ! giveGender a ! Dir ) (predV v ** {c2 = {s = "کی" ; c = VTransPost}}) ; ----+ ComplSlash vp np = insertObject np vp ;+ SlashVV vv vp = + insertEmbCompl (insertObj (\\a => infVP vv.isAux vp a) (predV vv)) vp.embComp **+ {c2 = vp.c2} ;+ SlashV2VNP vv np vp = + insertObjPre (\\_ => np.s ! NPObj )+ (insertObjc (\\a => infVP vv.isAux vp a) (predVc vv)) **+ {c2 = vp.c2} ;+ UseComp comp = insertObj comp.s (predAux auxBe) ;++ AdvVP vp adv = insertObj (\\a => adv.s ! (fromAgr a).g) vp ;++ AdVVP adv vp = insertAdV adv.s vp ;+ ReflVP v = insertObjPre (\\_ => RefPron) v ;+ PassV2 v = predV v ; -- need to be fixed+ CompAP ap ={s = \\a => ap.s ! giveNumber a ! giveGender a ! Dir } ;+ CompNP np = {s = \\_ => np.s ! NPObj} ;+ CompAdv adv = {s = \\a => adv.s ! (fromAgr a).g } ;+ CompCN cn = {s = \\a => cn.s ! giveNumber a ! Dir} ;+++}
@@ -0,0 +1,40 @@+concrete AdjectiveSnd of Adjective = CatSnd ** open ResSnd, Prelude in { + + flags coding = utf8; + lin + + PositA a = a ; + UseComparA a = a; + + ComparA a np = { +-- s = \\n,g,c => np.s ! NPC Obl ++ "k'an" ++ a.s ! n ! g ! c ; + s = \\n,g,c => np.s ! NPC Abl ++ "k'an" ++ a.s ! n ! g ! c ; + } ; + +---- $SuperlA$ belongs to determiner syntax in $Noun$. + + ComplA2 a np = { + s = \\n,g,c => np.s ! NPC Obl ++ a.c2 ++ a.s ! n ! g ! c ; + } ; + + ReflA2 a = { + s = \\n,g,c => a.s ! n ! g ! c ++ RefPron ++ "san" ; + } ; + + SentAP ap sc = { + s = \\n,g,c => ap.s ! n ! g ! c ++ sc.s ; + } ; + + AdAP ada ap = { + s = \\n,g,c => ada.s ++ ap.s ! n ! g ! c ; + } ; + + UseA2 a = a ; + + CAdvAP cadv ap np = { + s = \\n,g,c => cadv.s ++ ap.s ! n ! g ! c ++ cadv.p ++ np.s ! NPC Dir ; + }; + + AdjOrd ord = { s = \\_,_,_ => ord.s ; }; + +}
@@ -0,0 +1,20 @@+concrete AdverbSnd of Adverb = CatSnd ** open ResSnd, Prelude in { + + flags coding = utf8; + lin + PositAdvAdj a = {s = \\g => a.s ! Sg ! g ! Obl } ; + ComparAdvAdj cadv a np = { + s = \\g => np.s ! NPObj ++ cadv.p ++ cadv.s ++ a.s ! Sg ! g ! Obl ; + } ; + ComparAdvAdjS cadv a s = { + s = \\g => cadv.p ++ cadv.s ++ a.s ! Sg ! g ! Obl ++ s.s; + } ; + + PrepNP prep np = {s = \\_ => np.s ! NPObj ++ prep.s } ; + + AdAdv ada adv = { s = \\g => ada.s ++ adv.s ! g} ; + + SubjS sub snt = {s = \\_ => sub.s ++ snt.s } ; + AdnCAdv cadv = {s = "san gD' " ++ cadv.s} ; + +}
@@ -0,0 +1,19 @@+concrete ExtraSnd of ExtraSndAbs = CatSnd ** + open ResSnd, Coordination, Prelude, MorphoSnd, ParadigmsSnd in {++ flags coding = utf8;++ lin+ GenNP np = {s = \\_,_,_ => np.s ! NPC Obl ++ "ka" ; a = np.a} ;++ each_Det = mkDet "hr kwy" "hr kwy" "hr kwy" "hr kwy" Sg ;+ have_V = mkV "rakh'na";+ IAdvAdv adv = {s = "ktny" ++ adv.s!Masc} ;+ ICompAP ap = {s = "ktnE" ++ ap.s ! Sg ! Masc ! Dir} ;+ cost_V = mkV "qymt" ;+ + -- added for causitives+ make_CV = mkVerb "nothing" ** {c2 = "" };++-- for VP conjunction+}
@@ -0,0 +1,40 @@+concrete IdiomSnd of Idiom = CatSnd ** open Prelude,Predef, ResSnd in { + + flags optimize=all_subs ; + flags coding = utf8; + + lin + ImpersCl vp = mkSClause " " (agrP3 Masc Sg) vp ; + GenericCl vp = mkSClause "kWe'y" (agrP3 Masc Sg) vp ; + + CleftNP np rs = + let cl = mkSClause (np.s ! NPC rs.c) (np.a) (predAux auxBe); + in + {s = \\t,p,o => cl.s ! t ! p ! o ++ rs.s ! np.a }; + + CleftAdv ad ss = { s = \\t,b,o => ad.s ! Masc ++ ss.s}; + + ExistNP np = + mkSClause "h'ty" (agrP3 (fromAgr np.a).g (fromAgr np.a).n) + (insertObj (\\_ => np.s ! NPC Dir) (predAux auxBe)) ; + + ExistIP ip = + let cl = mkSClause ("h'ty" ++ ip.s ! Dir) (agrP3 ip.g ip.n) (predAux auxBe); + in { + s = \\t,p,qf => case qf of { + QDir => cl.s ! t ! p ! ODir; + QIndir => cl.s ! t! p ! ODir + } + }; + + ProgrVP vp = (predProg vp) ; + + + ImpPl1 vp = {s = "ac" ++ (vp.s ! VPReq).inf} ; +-- ImpP3 np vp = {s = np.s!NPC Dir ++ "k'y" ++ (vp.s ! VPImp ).inf ++ "D'y"}; here VPImp form is not correct e.g jan ko sw do, rather jan ko swnE do, and swnE is stored in vp.VPInf.fin + ImpP3 np vp = {s = np.s!NPC Dir ++ "k'y" ++ (vp.s ! VPInf ).fin ++ "D'yW"}; + + + +} +
@@ -0,0 +1,362 @@+--# -path=.:prelude:alltenses + +concrete LexiconSnd of Lexicon = CatSnd ** +--open ResSnd, Prelude in { + open ParadigmsSnd,MorphoSnd, Prelude in { + + flags + optimize=values ; + coding = utf8; + + lin + + airplane_N = mkN03 "jh'aj" ; + answer_V2S = mkV2 (compoundV "jWab" (mkV "D'yt' ")) ; + apple_N = mkN03 "sWf" ; + art_N = mkN13 "fn" ; + ask_V2Q = mkV2 (mkV "pc't' "); + baby_N = mkN05 "Bar" ; + bad_A = mkAdj3 "krab" ; + bank_N = mkN03 "bank" ; + beautiful_A = mkAdj1 "pyarW" ; + become_VA = mkV "T'yt' "; + beer_N = mkN03 "Xrab" ; +--beg_V2V = mkV "pnt' " ; + big_A = mkAdj1 "WD'W" ; + bike_N = mkN03 "saycl" ; + bird_N = mkN01 "pk'y" ; + black_A = mkAdj1 "karW" ; + blue_A = mkAdj1 "nyrW" ; + boat_N = mkN04 "B'yry" ; + book_N = mkN03 "ktab" ; + boot_N = mkN01 "jWtW" ; + boss_N = mkN03 "baLadst" ; + boy_N = mkN01 "cWkrW" ; + bread_N = mkN03 "many" ; + break_V2 = mkV2 "TWrt' " ; + broad_A = mkAdj1 "WykrW" ; +--brother_N2 = mkN10 "B'ae' " "jo " ; --not correct + brown_A = mkAdj3 "nasy" ; + butter_N = mkN13 "mk't'" ; + buy_V2 = mkV2(compoundV "Kryd " do_V2); + camera_N = mkN01 "kymyra"; + cap_N = mkN03 "t'WpY" ; + car_N = mkN03 "gaD'y" ; + carpet_N = mkN01 "tD'W" ; + cat_N = mkN09 "BLy" ; + ceiling_N = mkN01 "c't" ; + chair_N = mkN09 "krsy" ; + cheese_N = mkN14 "pnyr" ; + child_N = mkN01 "Bar" ; +--church_N = mkN03 "grja" (mkN "grja") ; + clean_A = mkAdj3 "saf" ; + clever_A = mkAdj3 "hWXyar" ; + close_V2 = mkV2 (compoundV "bnd" do_V2); + coat_N = mkN03 "kWT" ; + cold_A = mkAdj1 "T'd'W" ; + computer_N = mkN03 "kmpyWTr" ; + country_N = mkN03 "mlk" ; + cousin_N = mkN03 "se'WT" ; -- a compund noun made of two nouns + cow_N = mkN09 "gan" ; + die_V = mkV "mrt' " ; + dirty_A = mkAdj1 "myrW" ; +--distance_N3 = mkN3 (mkN "pnd'") (mkPrep "da") "dE" "tWN" ; + doctor_N = mkN03 "d!aktr" ; + dog_N = mkN01 "ktW" ; + door_N = mkN01 "drWzW" ; + drink_V2 = mkV2 "pye't' "; + easy_A2V = mkA "sWLW" "" ; + eat_V2 = mkV2( mkV "k'ae't' "); + empty_A = mkAdj3 "KaLy" ; + enemy_N = mkN03 "dXmn" ; + factory_N = mkN02 "karKanW" ; + father_N2 = mkN2 (mkN06 "py") (mkPrep "jW") "jy" ; + fear_VS = mkV "d!J't' "; + fish_N = mkN09 "mc'y" ; + floor_N = mkN03 "frX" ; + fridge_N = mkN03 "grj" ; + friend_N = mkN05 "dWst" ; + fruit_N = mkN13 "Cmr" ; +--fun_AV = mkAdj1V (regA "mzW") ; + garden_N = mkN03 "baG" ; + girl_N = mkN09 "c'Wkry" ; + glove_N = mkN01 "dstanW" ; + gold_N = mkN13 "sWn" ; + good_A = mkAdj1 "sT!W" ; +-- go_V = mkIrrgV "WY't'" "" ; + green_A = mkAdj1 "saeW" ; + harbour_N = mkN08 "panagah'" ; + hate_V2 = mkV2 (compoundV "nfrt" do_V2) ; + hat_N = mkN01 "tWplW" ; +--have_V = dirV2 (mk5V "ha?e" "has" "had" "had" "h'jt' ") ; + hear_V2 = mkV2 (mkV "Bd't' ") ; + hill_N = mkN09 "Tkry" ; + hope_VS = (compoundV "amyd" do_V2); + horse_N = mkN01 "gWrW" ; + hot_A = mkAdj1 "kWsW" ; + house_N = mkN03 "gh'r" ; + important_A = mkAdj3 "Z-rWry" ; + industry_N = mkN01 "dndW" ; + iron_N = mkN09 "LWh' " ; + king_N = mkN01 "badXah'" ; + know_V2 = mkV2 (mkV "Jat't'") ; + know_VS = (mkV "J'at't' ") ; + know_VQ = (mkV "J'at't' ") ; + lake_N = mkN09 "DnD" ; + lamp_N = mkN09 "bty " ; + learn_V2 = mkV2 ( mkV "sK't' ") ; + leather_N = mkN01 "cmRW" ; + leave_V2 = mkV2 (mkV "cD't'") ; + like_V2 = mkV2 (compoundV "pSnd" do_V2); + listen_V2 = mkV2 (mkV "Kn Dyt' ") ; + live_V = mkV "rht' " ; ---- touch + long_A = mkAdj1 "d!gW" ; + lose_V2= mkV2 "harae't' " ; + love_N = mkN08 "mh'bt" ; + love_V2 = mkV2 (compoundV "eXq" do_V2) "san"; + man_N = mkN03 "mat'h'W" ;--not correct according to rules should be discussed +--married_A2 = mkAdj1 "prt'yL" ; + meat_N = mkN01 "k'adW" ; + milk_N = mkN13 "k'yr" ; + moon_N = mkN13 "cnd!" ; +--mother_N2 = mkN2(mkN07 "mae' " "jW" "jy" );--not covered need to be discussed + mountain_N = mkN03 "jbL" ; + music_N = mkN14 "mWsyqy" ; + narrow_A = mkAdj1 "sWRh'W" ; + new_A = mkAdj1 "ne'Wn" ; + newspaper_N = mkN04 "aKbar" ; + oil_N = mkN03 "tyL" ; + old_A = mkAdj1 "pWRh'y" ; +-- open_V2 = mkV2 (mkIrrgV "KWLt'" "KWl") ; + paint_V2A = mkV2 (compoundV "rng" do_V2) ; + paper_N = mkN01 "pnW" ; +--paris_PN = mkN13 "pyrs" masculine; + peace_N = mkN13 "amn" ; + pen_N = mkN14 "qLm" ; + planet_N = mkN01 "syarW" ; + plastic_N = mkN13 "mRndR" ; + play_V2 = mkV2 (mkV "rand") ; + policeman_N = mkN05 "spah'y" ; + priest_N = mkN05 "pyGmbr" ; +--probable_AS = mkAdj1S (regA "amkan" ) ; + queen_N = mkN09 "Xh'zady" ; + radio_N = mkN01 "bajW" ; +--rain_V0 = compoundV "mynh'n" ""; + red_A = mkAdj1 "G'aRh'W" ; -- worst case + religion_N = mkN03 "mzh'b" ; + restaurant_N = mkN05 "h'WTl" ; + river_N = mkN12 "drya" ; + rock_N = mkN08 "Tkry" ; + roof_N = mkN14 "c't" ; + rubber_N = mkN13 "rbR" ; + run_V = mkV "d!WRt' " ; + say_VS = mkV "cWt' " ; + school_N = mkN03 "askWL" ; + science_N = mkN13 "saenS" ; + sea_N = mkN14 "smnd!" ; + seek_V2 = mkV2 (compoundV "tlaX" do_V2) ; + see_V2 = mkV2 (mkV "D'st' ") ; + sell_V = mkV "Wkt't' "; + send_V= mkV "mWkLt' "; + sheep_N = mkN09 "rD" ; + ship_N = mkN03 "jhaz" ; + shirt_N = mkN01 "cWLW"; + shoe_N = mkN01 "jWtW" ; + shop_N = mkN03 "dWkan" ; + short_A = mkAdj1 "nnDW " ; + silver_N = mkN14 "candy" ; + sister_N = mkN11 "Byt' " ; + sleep_V = mkV "smh't' " ; + small_A = mkAdj1 "nnDW" ; + snake_N = mkN03 "nang" ; + sock_N = mkN04 "jWrab" ; + speak_V2 = mkV2 (mkV "GaLhe't' ") ; + star_N = mkN01 "XrWeat" ; + steel_N = mkN13 "astyL" ; + stone_N = mkN05 "pTr" ; + stove_N = mkN01 "cLh'W" ; + student_N = mkN05 "Xagrd" ; + stupid_A = mkAdj1 "cryW" ; + sun_N = mkN13 "sj" ; + switch8off_V2 = mkV2 (mkV "h'Laet") ; + switch8on_V2 = mkV2 (compoundV "bnd" do_V2) ; + table_N = mkN04 "myz" ; + talk_V = mkV "GaLhaet' "; + teacher_N = mkN05 "astad" ; + teach_V = mkV "syk'art' "; + television_N = mkN14 "tyLyWzn" ; + thick_A = mkAdj1 "mWtW" ; + thin_A = mkAdj1 "snh'W" ; + train_N = mkN09 "ryL" ; + travel_V = (compoundV "sfr" do_V2) ; + tree_N = mkN13 "Wt' " ; + trousers_N = mkN01 "pajamW" ; + ugly_A = mkAdj3 "bdsWrt" ; + understand_V = mkV "smjh't' "; + university_N = mkN09 "yWnyWrsTY" ; + village_N = mkN03 "GWT! " ; + wait_V2 = mkV2 (compoundV "antz-ar" (mkV "antz-ar")) ; + walk_V = mkV "h'Lt' " ; + warm_A = mkAdj3 "grm" ; + war_N = mkN03 "jng" ; + watch_V2 = mkV2 (mkV "Dst' ") ; + water_N = mkN14 "pat'y" ; -- not covered masculine ending with y + white_A = mkAdj1 "ac'W" ; + window_N = mkN09 "dry" ; + wine_N = mkN04 "Xrab"; + win_V = mkV"k'Tt' " ; + woman_N = mkN09 "astry" ; + wonder_VQ = compoundV "h'yran"(mkV "T'yt' ") ; + wood_N = mkN13 "kaT!" ; + write_V = mkV "LKt' " ; + yellow_A = mkAdj1 "pyLW" ; + young_A = mkAdj3 "jWan" ; + do_V2 = mkV2 (mkV "krt' ") ; + now_Adv = mkAdv "h'at'y" ; +--already_Adv = mkAdj1dv "ph'ryaeyn" ; + song_N = mkN01 "ganW" ; +-- number_N = mkN03 "ang" ; + put_V = mkV "Wjt' " ; + stop_V = mkV "byh't' " ; + jump_V = compoundV "TpW " (mkV "") ; -- here + left_Ord = {s = "k'abW" ; n = singular}; + right_Ord = {s= "sJ'W" ; n = singular}; +--far_Adv = mkAdj1dv "pry" ; + correct_A = mkAdj3 "sh'y" ; + dry_A = mkAdj3 "KXk" ; + dull_A = mkAdj1 "jD'W" ; + full_A = mkAdj3 "BryL" ; + heavy_A = mkAdj1 "grW" ; + near_A = mkAdj1 "Wyjh'W" ; + rotten_A = mkAdj3 "Krab" ; + round_A = mkAdj3 "gWL" ; + sharp_A = mkAdj3 "tyz" ; + smooth_A = mkAdj3 "hmWar" ; + straight_A = mkAdj1 "sd'W" ; + wet_A = mkAdj1 "aaLW"; + wide_A = mkAdj1 "WykrW" ; + animal_N = mkN03 "janWr" ; + ashes_N = mkN14 "rak' " ; -- FIXME: plural only? + back_N = mkN09 "pT! " ; + bark_N = mkN13 "Be'Wnkt' " ; + belly_N = mkN14 "pyT" ; + blood_N = mkN13 "rt" ; + bone_N = mkN09 "hD'y" ; + breast_N = mkN09 "c'aty" ; + cloud_N = mkN03 "jh'R" ; + day_N = mkN13 "D'ynh'n" ; + dust_N = mkN14"d'WR" ; + ear_N = mkN03 "kn" ; + earth_N = mkN08 "zmyn" ; + egg_N = mkN01 "bydW" ; + eye_N = mkN09 "ak' " ; + fat_N = mkN09 "crBy" ; + feather_N = mkN13 "k'nB'" ; + fingernail_N = mkN03 "nh' " ; + fire_N = mkN14 "bah'" ; + flower_N = mkN03 "gL" ; + fog_N = mkN13 "mak" ; + foot_N = mkN03 "pyr" ; -- not properly covered need to be discussed + forest_N = mkN01 "ByLW" ; + grass_N = mkN04 "gah" ; +--guts_N = mkN "g?t" ; -- FIXME: no singular + hair_N = mkN03 "War" ; + hand_N = mkN03 "hT' "; + head_N = mkN01 "mT'W" ; + heart_N = mkN09 "dL"; + horn_N = mkN13 "sc! " ; + husband_N = mkN03 "mRs" ; + ice_N = mkN09 "brf" ; + nee_N = mkN01 "gWD'W" ; + leaf_N = mkN03 "pn" ; + leg_N = mkN09 "Tng" ; + liver_N = mkN03 "jyrW" ; + louse_N = mkN14 "jWne' " ; + mouth_N = mkN03 "Wat" ; + name_N = mkN01 "naLW"; + neck_N = mkN04 "knd' " ; + night_N = mkN09 "rat" ; + nose_N = mkN03 "nk" ; + person_N = mkN03 "XKs" ; + rain_N = mkN14 "mynhn" ; + road_N = mkN01 "rstW" ; + root_N = mkN09 "paR" ; + rope_N = mkN09 "rsy"; + salt_N = mkN14 "LWt' " ; + sand_N = mkN14 "Wary" ; + seed_N = mkN03 "Bj" ; + skin_N = mkN09 "cmRy" ; + sky_N = mkN03 "aasman"; + smoke_N = mkN13 "dWnh'W"; -- singular masc nouns ending with aN,wN yet to be implemented + snow_N = mkN13 "brf" ; + stick_N = mkN09 "D'nd!y" ; + tail_N = mkN13 "pc' " ; + tongue_N = mkN08 "zban" ; + tooth_N = mkN03 "D'and"; + wife_N = mkN09 "zaL" ; + wind_N = mkN08 "h'Wa" ; + wing_N = mkN05 "pr" ; + worm_N = mkN01 "kyneWn" ; + year_N = mkN03 "saL" ; + blow_V = mkV "WJ't' " ; + breathe_V = compoundV "sah " (mkV "K't't' " ) ; + burn_V = mkV "sRt' " ; + dig_V = mkV "K'Tt' " ; + fall_V = mkV "krt' " ; + float_V = mkV "trt' " ; + flow_V = mkV "Wh't' " ; + fly_V = mkV "aD't' "; + freeze_V = mkV "J'mt' " ; + give_V3= mkV3 (mkV "D'yt' ") "" "" ; -- here + laugh_V = mkV "k'Lt' " ; + lie_N = mkN01 "kWR" ; + lie_V = compoundV "kWR " ( mkV "GaLhaet' ") ; + play_V = mkV "k'yDt' " ; + sew_V = mkV "sbt' " ; + sing_V = mkV "gae't' " ; + sit_V = mkV "Wyh't' "; + smell_V = mkV "sngt' " ; + spit_V = mkV "T'kt' " ; + stand_V = mkV "bah't' "; + swell_V = mkV "sbt'" ; + swim_V = mkV "trt' " ; + think_V = mkV "sWct' " ; + turn_V = mkV "mRt' "; + vomit_V = compoundV "aLTy" (mkV "krt' ") ; + bite_V2 = mkV2 (mkV "cK pae't' ") ; + count_V = mkV "Gt't' "; + cut_V = mkV "kTt' "; + fear_V = mkV "d!J't' " ; + fight_V = mkV "WRh't' " ; + hit_V = mkV "mart' " ; + hold_V = mkV "jh'Lt' " ; + hunt_V2 = mkV2 (compoundV "Xkar" do_V2); + kill_V = mkV "marn" ; + pull_V = mkV "ckt' "; + push_V = mkV "d'kt' " ; + rub_V = mkV "mh'Tt' " ; + scratch_V= mkV "Krct' " ; + split_V= mkV "h'art' " ; +--squeeze_V2 = dirV2 (regV "sq?eeze") ; +--stab_V2 = dirV2 (regDuplV "stab") ; + suck_V = mkV "cWst' " ; + throw_V = mkV "ac'Lt' " ; + tie_V = mkV "Bd't' " ; + wash_V = mkV "d'We't'" ; + wipe_V= mkV "agh't' "; +--other_A = regA "Bya"; + grammar_N = mkN03 "grdan" ; + language_N = mkN09 "BWLy" ; + rule_N = mkN03 "aSWL" ; + + ---- added 4/6/2007 + john_PN = mkPN "jan" masculine ; + question_N = mkN03 "sWal" ; +--ready_A = regA "tyar" ; + reason_N = mkN03 "sbb" ; + today_Adv = mkAdv "aJ' " ; + uncertain_A = mkAdj3 ["acank"] ; + + +} +
@@ -0,0 +1,393 @@+--# -path=.:../../prelude +-- +----1 A Simple Sindhi Resource Morphology +---- +---- by Jherna Devi, Shafqat Virk,2012 +---- +---- This resource morphology contains definitions needed in the resource +---- syntax. To build a lexicon, it is better to use $ParadigmsSnd$, which +---- gives a higher-level access to this module. +-- +resource MorphoSnd = ResSnd ** open Prelude,Predef in { + + + flags optimize=all ; + coding = utf8; + +----2 Nouns +oper + + mkN : (x1,_,_,_,_,_,_,x8 : Str) -> Gender -> Noun = + \sd,so,sv,sa, pd,po,pv,pa, g -> { + s = table { + Sg => table { + Dir => sd ; + Obl => so ; + Voc => sv ; + Abl => sa + } ; + Pl => table { + Dir => pd ; + Obl => po ; + Voc => pv ; + Abl => pa + } + } ; + + g = g + } ; + + +-- 1. msculine: chokro, kuto, hat + mkN01 : Str -> Noun ; + mkN01 chokro = let chokr = (tk 1 chokro) + in mkN (chokro) (chokr+"y") (chokr+"a") (chokr+"a") + (chokr+"a") (chokr+"n") (chokr+"a") (chokr+"a") + Masc ; + + +-- 2. karkhano + mkN02 : Str -> Noun ; + mkN02 karkhano =let karkhan = (tk 1 karkhano) + in mkN (karkhano) (karkhan+"y") (karkhan+"a") (karkhano) + (karkhan+"a") (karkhan+"n") (karkhan+"W") (karkhan+"a") + Fem ; + +-- 3. gher, shehar + mkN03 : Str -> Noun ; + mkN03 gher = mkN (gher) (gher) (gher) (gher) + (gher) (gher+"n") (gher+"W") (gher) + Masc ; + +-- 4. paki, mez, gah + mkN04 : Str -> Noun ; + mkN04 paki = mkN (paki) (paki) (paki) (paki) + (paki) (paki+"n") (paki) (paki) + Fem ; + +-- 5. msculine: bar, hotel, pathar + mkN05 : Str -> Noun ; + mkN05 bar = mkN (bar) (bar) (bar) (bar) + (bar) (bar+"n") (bar+"W") (bar) + Masc ; + +-- 6. pe + mkN06 : Str -> Noun ; + mkN06 pe = mkN (pe) (pe) (pe) (pe) + (pe+"e'r") (pe+"e'rn") (pe+"e'rW") (pe+"e'r") + Masc ; + +-- 7. Feminine : ma + mkN07 : Str -> Noun ; + mkN07 ma = mkN (ma) (ma) (ma) (ma) + (ma+"e'r") (ma+"e'rn") (ma+"e'rW") (ma+"e'r") + Fem ; + +-- 8. msculine: topi, takre + mkN08 : Str -> Noun ; + mkN08 topi = mkN (topi) (topi) (topi) (topi) + (topi+"Wn") (topi+"n") (topi+"W") (topi+"Wn") + Masc ; + +-- 9. Feminine: bere, bili, kurse + mkN09 : Str -> Noun ; + mkN09 bili = mkN (bili) (bili) (bili) (bili) + (bili+"Wn") (bili+"n") (bili+"n") (bili+"Wn") + Fem ; + +-- 10. msculine: bha + mkN010 : Str -> Noun ; + mkN010 bha = mkN (bha) (bha) (bha) (bha) + (bha+"r") (bha+"rn") (bha+"rW") (bha+"r") + Masc ; + +-- 11. Feminine: bhen + mkN11 : Str -> Noun ; + mkN11 bhen = let bhe= (tk 1 bhen) + in mkN (bhen) (bhen) (bhen) (bhen) + (bhe+"nr") (bhe+"nrn") (bhen+"Wn") (bhe+"nr") + Fem ; + +--12. msculine: raja, darya + mkN12 : Str -> Noun ; + mkN12 raja = mkN (raja) (raja) (raja) (raja) + (raja) (raja+"e'n") (raja+"e'W") (raja) + Masc ; + +-- 13. msculine: fan, son, kher, + mkN13 : Str -> Noun ; + mkN13 son = mkN (son) (son) (son) (son) + (son) (son) (son) (son) + Masc ; + +-- 14. Feminine: pen, samand + mkN14 : Str -> Noun ; + mkN14 pen = mkN (pen) (pen) (pen) (pen) + (pen) (pen) pen "" + Fem ; + + + +----2 Determiners + + IDeterminer = {s:Gender => Str ; n : Number}; + + makeDet : Str -> Str -> Str -> Str -> Number -> Determiner = \s1,s2,s3,s4,n -> { + s = table { + Sg => table { + Masc => s1 ; + Fem => s2 + } ; + Pl => table { + Masc => s3 ; + Fem => s4 + } + } ; + + n = n + }; + + makeIDet : Str -> Str -> Number -> IDeterminer = \s1,s2,n -> { + s = table { + Masc => s1; + Fem => s2 + }; + n = n + }; + + makeIQuant : Str -> Str -> Str -> Str -> {s:Number => Gender => Str} = \s1,s2,s3,s4 -> { + s = table { + Sg => table { + Masc => s1 ; + Fem => s2 + } ; + Pl => table { + Masc => s3 ; + Fem => s4 + } + } + }; + +-- Proposition + + makePrep : Str -> Preposition = \str -> {s = str } ** { lock_Prep = <>}; + +----2 Pronouns + --PronForm = {s:Pronoun => Str}; + + DemonPronForm = {s:DemPronForm => Str}; + mkDemonPronForm : (x1,x2,x3,x4,x5,x6,x7,x8,x9,x10,x11,x12,x13,x14,x15,x16:Str) -> DemPronForm = + \y1,y2,y3,y4,y5,y6,y7,y8,y9,y10,y11,y12,y13,y14,y15,y16 -> { + s = table { + Sg => table { + Masc => table { + Dir => y1 ; + Obl => y2 ; + Voc => y3 ; + Abl => y4 + }; + Fem => table { + Dir => y5 ; + Obl => y6 ; + Voc => y7 ; + Abl => y8 + } + }; + Pl => table { + Masc => table { + Dir => y9 ; + Obl => y10 ; + Voc => y11 ; + Abl => y12 + }; + Fem => table { + Dir => y13 ; + Obl => y14 ; + Voc => y15 ; + Abl => y16 + } + } + } + }; + + makeDemonPronForm : Str -> Str -> Str -> DemPronForm ; + makeDemonPronForm yeh is inn = mkDemonPronForm yeh is "" yeh is "" yeh inn "" yeh inn "" "" "" "" ""; +-- makePossPronForm myra myry hmara hmary = mkDemonPronForm myra myra myra myry myry myry hmara hmara hmara hmary hmary hmary; + + mkPron : (x1,x2,x3,x4:Str) -> {s:Case => Str} = + \y1,y2,y3,y4 -> { s = + table { + Dir => y1; + Obl => y2; + Voc => y3; + Abl => y4 + } + }; + + ------- PossPronForm yet to be implemented + + +-- IntPronForm = {s:InterrPronForm => Str}; + IntPronForm = {s: Case => Str}; + mkIntPronForm : (x1,x2,x3,x4:Str) -> IntPronForm = + \y1,y2,y3,y4 -> { + s = + table { + Dir => y1; + Obl => y2; + Voc => y3; + Abl => y4 + } + }; + + +----2 Adjectives +-- defined in ResSnd + +------------------------------------------------------------------ +----Verbs +------------------------------------------------------------------ + +--1. Basic stem form, direct & indirect causatives exists +-- v1 nechna nechaana nechwana + + mkVerb : (_: Str) -> Verb = \inf -> + let root = (tk 1 inf) ; + inf = inf ; + root2 = (tk 2 inf) ; + in { + s = table { + + Root => root ; + + Inf => inf ; + Inf_Fem => ((tk 1 root) + "y") ; + Inf_Obl => (tk 1 root) ; + Ablative => ((tk 1 root) + "WN") ; + + + VF tense person number gender => (mkCmnVF root root2 tense person number gender).s + } + } ; + + mkIrrgVerb : (inf,root: Str) -> Verb = \inf,root -> + let root = root ; + in { + s = table { + + Root => root ; + + Inf => inf ; + Inf_Fem => ((tk 1 inf) + "y") ; + Inf_Obl => (tk 1 inf) ; + Ablative => ((tk 1 inf) + "WN") ; + + + VF tense person number gender => (mkCmnVF (root+"y") (root+"y") tense person number gender).s + } + } ; + + +mkCmnVF : Str -> Str -> VTense -> PPerson -> Number -> Gender -> {s:Str}= \root,root2,t,p,n,g -> + {s = case (last root) of { + ("a"|"A"|"y") => (mkCmnVF1 root t p n g).s ; + _ => (mkCmnVF1 root t p n g).s + } + }; + + mkCmnVF1 : Str -> VTense -> PPerson -> Number -> Gender -> {s:Str}= \root,t,p,n,g -> + {s = let nadaa = root + "ndW" ; --root + variants{"nda";"Wnda"}; + nadii = root + "Wn" ; --root + variants{"ndy";"Wndy"} ; + nade = root + "ndy" ; --root + variants{"ndy";"yndyn"} ; + nadiiaaN = root + "ndW"; --root + variants{"ndyaN";"WndyaN"}; + ndi = root + "ndy"; + nda = root + "nda" ; + ndywn = root + "ndyWn" ; + ndyn = root + "ndyn" ; + + in + case <t,p,n,g> of { + <Subj,Pers1, Sg,_> => root + "an" ; + <Subj,Pers1, Sg,_> => root + "an" ; + <subj, Pers1, pl,Masc> => root + "Wn" ; + <subj, Pers1, pl,Fem> => root + "Wn" ; + <Subj,Pers2_Casual, Sg,_> => root +"yn"; + <Subj,Pers2_Casual, Pl,_> => root + "W" ; + <Subj,Pers2_Respect, _, _> => root + "W" ; + + <Subj,Pers3_Near, Sg,Masc> => root +"y"; + <Subj,Pers3_Near, sg,Fem> => root +"y"; + <Subj,Pers3_Near, pl,Masc> => root +"n"; + <Subj,Pers3_Near, pl,Fem> => root +"n"; + <Subj,Pers3_Distant,Sg,Masc> => root +"y"; + <Subj,Pers3_Distant,Sg,Fem> => root +"y"; + <Subj,Pers3_Distant,Pl,Masc> => root +"n"; + <Subj,Pers3_Distant,Pl,Fem> => root +"n"; + + + <Perf, Pers1,Sg,Masc> => root + "yL" ; + <Perf, Pers1,Sg,Fem> => root + "yL" ; + <Perf, Pers1,Pl,Masc> => root + "yL" ; + <Perf, Pers1,Pl,Fem> => root + "yL" ; + <Perf, Pers2_Casual,Sg,Masc> => root + "yL" ; + <Perf, Pers2_Casual,Sg,Fem> => root + "yL" ; + <Perf, Pers2_Casual,Pl,Masc> => root + "yL" ; + <Perf, Pers2_Casual,Pl,Fem> => root + "yL" ; + <Perf, Pers2_Respect,Sg,Masc> => root + "yL" ; + <Perf, Pers2_Respect,Sg,Fem> => root + "yL" ; + <Perf, Pers2_Respect,Pl,Masc> => root + "yL" ; + <Perf, Pers2_Respect,Pl,Fem> => root + "yL" ; + + <Perf, _, Sg,Masc> => root + "yL" ; + <Perf, _, Sg,Fem> => root + "yL" ; + <Perf, _, Pl,Masc> => root + "yL" ; + <Perf, _, Pl,Fem> => root + "yL" ; + + <Imperf, Pers1,Sg, Masc> => root + "ndW" ; + <Imperf, Pers1,Sg, Fem> => root + "ndy" ; + <Imperf, Pers1,Pl, Masc> => root + "nda" ; + <Imperf, Pers1,Pl, Fem> => root + "ndyWn" ; + + <Imperf, Pers2_Casual, Sg, Masc> => root + "ndW" ; + <Imperf, Pers2_Casual, Sg, Fem> => root + "ndy" ; + <Imperf, Pers2_Casual, Pl, Masc> => root + "nda" ; + <Imperf, Pers2_Casual, Pl, Fem> => root + "ndyWn" ; + + <Imperf, Pers2_Respect, Sg, Masc> => root + "nda" ; + <Imperf, Pers2_Respect, Sg, Fem> => root + "ndyWn" ; + <Imperf, Pers2_Respect, Pl, Masc> => root + "nda" ; + <Imperf, Pers2_Respect, Pl, Fem> => root + "ndyWn" ; + + <Imperf, _, Sg, Masc> => root + "ndW" ; + <Imperf, _, Sg, Fem> => root + "ndy" ; + <Imperf, _, Pl, Masc> => root + "nda" ; + <Imperf, _, Pl, Fem> => root + "ndyWn" + + } + } ; + + + mkCmnVF2 : Str -> VTense -> PPerson -> Number -> Gender -> {s:Str}= \inf,t,p,n,g -> + {s = + case <t,p,n,g> of { + <_, _, _,_> => inf + } + }; + + + + + + + + + + + + + + + + + +}
@@ -0,0 +1,126 @@+concrete NumeralSnd of Numeral = CatSnd ** open ResSnd, Prelude in {+-- By Harald Hammarstroem+-- Modification for Punjabi by Shafqat Virk+ flags coding=utf8 ;++++param DForm = unit | ten ;+param DSize = sg | r2 | r3 | r4 | r5 | r6 | r7 | r8 | r9 ;+param Size = singl | less100 | more100 ; ++oper LinDigit = {s : DForm => Str ; size : DSize ; n : Number} ;+++lincat Dig = { s:Str ; n : Number};+lincat Digit = LinDigit ;+lincat Sub10 = {s : DForm => Str ; size : DSize ; n : Number} ;+lincat Sub100 = {s : Str ; size : Size ; n : Number} ;+lincat Sub1000 = {s : Str ; s2 : Str ; size : Size ; n : Number } ; +lincat Sub1000000 = { s : Str ; n : Number } ;++lin num x0 = + {s = table {+ NCard => x0.s ; + NOrd => Prelude.glue x0.s "Wn" -- (mkOrd x0.s) need to use mkOrd which will make irregular ordinals but it gives path error+ };+ n = x0.n+ } ;+oper mkOrd : Str -> Str =+ \s -> case s of {+ "h'k" => "ph'ryWn";+ "B" => "ByWn";+ "Ty" => "TyWn";+ "car" => "cWaT'Wn";+ _ => s ++ "WN"+ };+-- {s = \\_ => x0.s ; n = x0.n} ; +++oper mkNum : Str -> Str -> DSize -> LinDigit = + \do -> \bis -> \sz -> + {s = table {unit => do ; ten => bis } ; + size = sz ; n = Pl} ;++lin n2 = mkNum "B" "Wyh'" r2 ;+lin n3 = mkNum "Ty" "Tyh'" r3 ;+lin n4 = mkNum "car" "calyh'" r4 ;+lin n5 = mkNum "pnj" "pnjah'" r5 ;+lin n6 = mkNum "c'h'" "sT!h' " r6 ; +lin n7 = mkNum "st" "str" r7; +lin n8 = mkNum "aT! '" "asy" r8;+lin n9 = mkNum "nW" "nWy" r9 ;++oper mkR : Str -> Str -> Str -> Str -> Str -> Str -> Str -> Str -> Str -> DSize => Str = \a1 -> \a2 -> \a3 -> \a4 -> \a5 -> \a6 -> \a7 -> \a8 -> \a9 -> table {+ sg => a1 + "nh'n" ;+ r2 => a2 + "yh' " ;+ r3 => a3 + "yh' " ;+ r4 => a4 + "alyh' " ;+ r5 => a5 + "Wnjah' " ;+ r6 => a6 + "h'T!" ;+ r7 => a7 + "tr" ;+ r8 => a8 + "asy" ;+ r9 => a9 + "anWy"+} ;++oper rows : DSize => DSize => Str = table {+ sg => mkR "yar " "ayk " "akT" "aykyt " "ayk" "ayk" "ayk" "ayk" "ayk" ; + r2 => mkR "Bay " "BaW" "BT" "Bae't" "Ba" "Ba" "Bah' " "Byy" "Byy" ;+ r3 => mkR "Tyr " "TyW " "TyT" "Tyt" "Ty" "Ty" "Tyh' " "Ty" "ty" ;+ r4 => mkR "cWD' " "cWW " "cWT" "cWe't " "cW" "cW" "cWh' " "cWr " "cWr" ;+ r5 => mkR "pnd'r " "pnjW " "pnjT" "pnjyt" "pnj" "pnj" "pnjh'" "pnj" "pnj" ;+ r6 => mkR "sWr " "c'W" "c'Ty" "c'ae't" "c'a" "c'a" "c'ah'" "c'" "c'" ;+ r7 => mkR "str" "staW" "stT " "styt" "st" "st" "st" "st" "st" ;+ r8 => mkR "arR" "aT!aW " "aT!T" "aT!y" "aT!" "aT!" "aT!a" "aT!" "aT!" ; + r9 => table {sg => "at'Wyh' " ; r2 => "at'Tyh' " ; r3 => "at'ytalyh' " ; + r4 => "at'Wnjah' " ; r5 => "at'h'T! " ; r6 => "at'tr " ; + r7 => "at'asy " ; + r8 => "at'anWy " ; r9 => "nWanWy" } +} ;++oper ss : Str -> {s : Str} = \s -> {s = s} ;++lin pot01 = {s = table {unit => "h'k" ; _ => "dmy" } ; size = sg ; n = Sg} ;+lin pot0 d = d ; +lin pot110 = {s = "D'h' " ; size = less100 ; n = Pl} ; +lin pot111 = {s = rows ! sg ! sg ; size = less100 ; n = Pl} ;+lin pot1to19 d = {s = rows ! d.size ! sg ; size = less100 ; n = d.n} ;+lin pot0as1 n = {s = n.s ! unit ; size = table {sg => singl ; _ => less100} ! n.size ; n = n.n } ;++lin pot1 d = {s = d.s ! ten ; size = less100 ; n = d.n} ;+lin pot1plus d e = {s = rows ! e.size ! d.size ; size = less100 ; n = d.n} ;++lin pot1as2 n = {s = n.s ; s2 = "dmy" ; size = n.size ; n = n.n} ;+lin pot2 d = {s = (mksau (d.s ! unit) d.size) ; + s2 = d.s ! unit ++ "lk' " ; size = more100 ; n = d.n} ;+lin pot2plus d e = + {s = (mksau (d.s ! unit) d.size) ++ e.s ; + s2 = (d.s ! unit) ++ "lk' " ++ (mkhazar e.s e.size) ; + size = more100 ; n = d.n} ;++lin pot2as3 n = {s = n.s ; n = n.n} ;+lin pot3 n = {s = table { singl => ekhazar ;+ less100 => n.s ++ "h'zar" ; + more100 => n.s2 } ! n.size ; n = n.n} ;+lin pot3plus n m = + {s = table {singl => ekhazar ;+ less100 => n.s ++ "h'zar" ; + more100 => n.s2 } ! n.size ++ m.s ; n = n.n} ;++lin D_0 = { s = "N0" ; n = Sg};+lin D_1 = { s = "N1" ; n = Sg};+lin D_2 = { s = "N2" ; n = Pl};+lin D_3 = { s = "N3" ; n = Pl};+lin D_4 = { s = "N4" ; n = Pl};+lin D_5 = { s = "N5" ; n = Pl};+lin D_6 = { s = "N6" ; n = Pl};+lin D_7 = { s = "N7" ; n = Pl};+lin D_8 = { s = "N8" ; n = Pl};+lin D_9 = { s = "N9" ; n = Pl};+lin IDig d = { s = \\_ => d.s ; n = d.n} ;+lin IIDig d dg = { s = \\df => Prelude.glue (dg.s ! df) d.s ; n = Pl }; ++oper ekhazar : Str = variants {"h'zar" ; "h'k" ++ "h'zar"} ; +oper mkhazar : Str -> Size -> Str = \s -> \sz -> table {singl => ekhazar ; _ => s ++ "h'zar"} ! sz ;+oper mksau : Str -> DSize -> Str = \s -> \sz -> table {sg => "h'k" ++ "sW" ; _ => s ++ "sW"} ! sz ;+}
@@ -0,0 +1,75 @@+concrete QuestionSnd of Question = CatSnd ** open ResSnd, Prelude in { + flags optimize=all_subs ; + coding = utf8; + + lin + + QuestCl cl = { + s = \\t,p,qf => case qf of { + QDir => cl.s ! t ! p ! OQuest; + QIndir => "jykD'h'n" ++ cl.s ! t! p ! ODir + } + }; + + QuestVP qp vp = + let cl = mkSClause ("") (Ag qp.g qp.n Pers3_Near) vp; + qp1 = qp.s ! Dir; + qp2 = qp.s ! Obl ++ "jy" + in { s = \\t,p,o => case t of { + VPImpPast => case vp.subj of {VIntrans => qp1 ++ cl.s ! t ! p ! ODir; _ => qp2 ++ cl.s ! t ! p ! ODir}; + _ => qp1 ++ cl.s ! t ! p ! ODir + } + }; + QuestSlash ip slash = + let ip1 = ip.s ! Dir; + ip2 = ip.s ! Obl ++ "jy" + in { + s = \\t,p,o => case t of { + VPImpPast => ip2 ++ slash.s ! t ! p ! ODir; + _ => ip1 ++ slash.s ! t ! p ! ODir + } + }; + + QuestIAdv iadv cl = { + s = \\t,p,_ => iadv.s ++ cl.s ! t ! p ! ODir; + }; + + QuestIComp icomp np = + let cl = mkSClause (np.s ! NPC Dir ++ icomp.s) np.a (predAux auxBe); + in { + s = \\t,p,qf => case qf of { + QDir => cl.s ! t ! p ! ODir; + QIndir => cl.s ! t! p ! ODir + } + }; + + PrepIP p ip = {s = ip.s ! ResSnd. Voc ++ p.s } ; + + AdvIP ip adv = { + s = \\c => adv.s ! ip.g ++ ip.s ! c ; + n = ip.n; + g = ip.g; + } ; + + IdetCN idet cn = { + s = \\c => idet.s ! cn.g ++ cn.s ! idet.n ! c ; + g = cn.g; + n = idet.n; + } ; + + IdetIP idet = { + s = \\_ => idet.s ! Masc ; + n = idet.n; + g = Masc; + } ; + + IdetQuant iqant num = { + s = \\g => iqant.s ! num.n ! g ++ num.s ; + n = num.n + } ; + + CompIAdv a = a ; + CompIP p = ss (p.s ! Dir) ; + AdvIAdv i a = {s = i.s ++ a.s ! Masc} ; + +}
@@ -0,0 +1,90 @@+concrete RelativeSnd of Relative = CatSnd ** open ResSnd in { + + flags optimize=all_subs ; + coding = utf8; + + lin + + RelCl cl = { + s = \\t,p,o,agr => case <t,giveNumber agr,giveGender agr> of { + <VPImpPast,Sg,_> => "jh'nk'y" ++ cl.s ! t ! p ! o ; + <VPImpPast,Pl,_> => "jh'njW" ++ cl.s ! t ! p ! o ; + <_,Sg,Masc> => "jyh'RW" ++ cl.s ! t ! p ! o ; + <_,Sg,Fem> => "jyh'Ra" ++ cl.s ! t ! p ! o ; + <_,Pl,Masc> => "jyh'Ra" ++ cl.s ! t ! p ! o ; + <_,Pl,Fem> => "jyh'RyWn" ++ cl.s ! t ! p ! o + }; + c = Dir + } ; +-- RelVP and RelSlash slows the linking process a lot this is why it is commented for test purposes + + RelVP rp vp = { + s = \\t,p,o,ag => + let + agr = case rp.a of { + RNoAg => ag ; + RAg a => a + } ; + cl = mkSClause (rp.s ! (giveNumber agr) ! (giveGender agr) ! Dir) agr vp; + +-- cl = case t of { +-- VPImpPast => mkSClause (rp.s ! (giveNumber agr) ! Obl) agr vp; +-- _ => mkSClause (rp.s ! (giveNumber agr) ! Dir) agr vp +-- }; + in + cl.s ! t ! p ! ODir ; + c = Dir + } ; + + +---- Pied piping: "at which we are looking". Stranding and empty +---- relative are defined in $ExtraHin.gf$ ("that we are looking at", +---- "we are looking at"). +-- + RelSlash rp slash = { + s = \\t,p,o,agr => rp.s ! (giveNumber agr) ! (giveGender agr) ! Obl ++ slash.c2.s ++ slash.s ! t ! p ! o ; + c = Dir + } ; + + FunRP p np rp = { + s = \\n,g,c => rp.s ! n ! g ! c ++ np.s ! NPC c ++ p.s ; + a = RAg np.a + } ; + + IdRP = { + s = table { + Sg => table { + Masc => table { + + ResSnd.Dir => "jh'Ra" ; + ResSnd.Obl => "jnh'n" ; + ResSnd.Voc => "jh'Ry" ; + ResSnd.Abl => "jh'Ry" + }; + Fem => table { + + ResSnd.Dir => "jh'Ry" ; + ResSnd.Obl => "jnh'n" ; + ResSnd.Voc => "jh'Ry" ; + ResSnd.Abl => "jh'Ry" + } + }; + Pl => table { + Masc => table { + ResSnd.Dir => "jh'Ry" ; + ResSnd.Obl => "jh'Ry" ; + ResSnd.Voc => "jh'Ry" ; + ResSnd.Abl => "jh'Ry" + }; + Fem => table { + ResSnd.Dir => "jh'Ry" ; + ResSnd.Obl => "jh'Ry" ; + ResSnd.Voc => "jh'Ry" ; + ResSnd.Abl => "jh'Ry" + } + } + }; + a = RNoAg + } ; + +}
@@ -0,0 +1,673 @@+--# -path=.:../abstract:../common:../../prelude +-- +--1 Sndu auxiliary operations. +-- +-- This module contains operations that are needed to make the +-- resource syntax work. + +resource ResSnd = ParamX ** open Prelude,Predef in { + + flags optimize=all ; + coding = utf8; + + param + Case = Dir | Obl | Voc | Abl ; + Gender = Masc | Fem ; + VTense = Subj | Perf | Imperf; + PPerson = Pers1 + | Pers2_Casual + | Pers2_Respect + | Pers3_Near + | Pers3_Distant; + + Order = ODir | OQuest ; + +--2 For $Relative$ + + RAgr = RNoAg | RAg Agr ; + RCase = RC Number Case ; + +-- for Numerial + + CardOrd = NCard | NOrd ; + + VerbForm4 = + VF VTense PPerson Number Gender + | Inf | Inf_Fem | Inf_Obl | Ablative + | Root ; + + oper + Noun = {s : Number => Case => Str ; g : Gender} ; + Verb = {s : VerbForm4 => Str} ; + Preposition = {s : Str}; + DemPronForm = {s : Number => Gender => Case => Str}; + -- PossPronForm = {s : Number => Gender => Case => Str}; + Determiner = {s : Number => Gender => Str ; n : Number}; + + ----------------------------------------------- + -- Snd Adjectives + ----------------------------------------------- + Adjective1 = {s : Number => Gender => Case => Str} ; + + mkAdj1 : Str -> Adjective1 ; + mkAdj1 nyrw = let end = last (nyrw) ; + --nyr = if_then_else Str (eq end "y") nyrw (tk 1 nyrw) + nyr = (tk 1 nyrw) + in adj1 (nyrw) (nyr+"y") ( nyr+"a") (nyr+"a") (nyrw) (nyr+"y") (nyr+"y") (nyr+"y") + (nyr+"a") (nyr+"n") ( nyr+"a") (nyr+"a") (nyr+"yWn") (nyr+"yn") (nyr+"yn") (nyr+"yWn") ; + + + + adj1 :(x1,_,_,_,_,_,_, _,_,_,_,_,_,_,_, x16 : Str) -> {s : Number => Gender => Case => Str} = + \msd,mso,msv,msa, fsd,fso,fsv,fsa, mpd,mpo,mpv,mpa, fpd,fpo,fpv,fpa -> { + s = table { + Sg => (cmnAdj msd mso msv msa fsd fso fsv fsa).s ; + Pl => (cmnAdj mpd mpo mpv mpa fpd fpo fpv fpa).s + } + }; + + mkAdj2 : Str -> Adjective1 ; + mkAdj2 young = adj1 (young) (young) (young ) (young) (young) (young) (young) (young) + (young) (young) (young ) (young) (young+"yn") (young+"yn") (young+"yn") (young+"yn") ; + + + + + + mkAdj3 : Str -> Adjective1 ; + mkAdj3 acank = adj1 acank acank acank acank acank acank acank acank acank acank acank acank acank acank acank acank ; + + + cmnAdj : (x1,_,_,_,_,_,_,x8 : Str) -> {s : Gender => Case => Str} = + \sd,so,sv,sa, pd,po,pv,pa -> { + s = table { + Masc => table { + Dir => sd ; + Obl => so ; + Voc => sv ; + Abl => sa + } ; + Fem => table { + Dir => pd ; + Obl => po ; + Voc => pv ; + Abl => pa + } + } + } ; + + + + + RefPron : Str; + RefPron = "pat'"; + + ---------------------------------------------------------- + -- Grammar part + ---------------------------------------------------------- + + param + Agr = Ag Gender Number PPerson ; + NPCase = NPC Case | NPObj | NPErg ; + + oper + np2pronCase : (Case => Str) -> NPCase -> Agr -> Str = \ppf,npc,a -> case npc of { + NPC c => ppf ! c; + NPObj => ppf ! Obl ; + NPErg => case (fromAgr a).p of { + (Pers3_Near|Pers3_Distant) => ppf ! Dir ++ "jy" ; + _ => ppf ! Dir + } + } ; + + toNP : ( Case => Str) -> NPCase -> Str = \pn, npc -> case npc of { + NPC c => pn ! c ; + NPObj => pn ! Dir ; + NPErg => pn ! Obl + } ; + + detcn2NP : (Determiner) -> Noun -> NPCase -> Number -> Str = \dt,cn,npc,nn -> case npc of { + NPC c => dt.s ! Sg ! Masc ++ cn.s ! nn ! c ; + NPObj => dt.s ! Sg ! Masc ++ cn.s ! nn ! Dir ; + NPErg => dt.s ! Sg ! Masc ++ cn.s ! nn ! Obl + } ; + + det2NP : (Determiner) -> NPCase -> Str = \dt,npc -> case npc of { + NPC c => dt.s ! Sg ! Masc ; + NPObj => dt.s ! Sg ! Masc ; + NPErg => dt.s ! Sg ! Masc + } ; + + + oper +------------------------------------------ +-- Agreement transformations +----------------------------------------- + + toAgr : Number -> PPerson -> Gender -> Agr = \n,p,g -> + Ag g n p; + + + fromAgr : Agr -> {n : Number ; p : PPerson ; g : Gender} = \a -> case a of { + Ag g n p => {n = n ; p = p ; g = g} + } ; + + conjAgr : Agr -> Agr -> Agr = \a0,b0 -> + let a = fromAgr a0 ; b = fromAgr b0 + in + toAgr + (conjNumber a.n b.n) + b.p a.g; + + giveNumber : Agr -> Number =\a -> case a of { + Ag _ n _ => n + }; + giveGender : Agr -> Gender =\a -> case a of { + Ag g _ _ => g + }; + + defaultAgr : Agr = agrP3 Masc Sg ; + agrP3 : Gender -> Number -> Agr = \g,n -> Ag g n Pers3_Distant ; + + personalAgr : Agr = agrP1 Masc Sg ; + agrP1 : Gender -> Number -> Agr = \g,n -> Ag g n Pers1 ; + + param + CPolarity = + CPos + | CNeg Bool ; -- contracted or not + + oper + contrNeg : Bool -> Polarity -> CPolarity = \b,p -> case p of { + Pos => CPos ; + Neg => CNeg b + } ; + + NP : Type = {s : NPCase => Str ; a : Agr ; isPron : Bool} ; + + param + CTense = CPresent | CPast | CFuture | CContinuous; + + oper + copula : CTense -> Number -> PPerson -> Gender -> Str = \t,n,p,g -> +case <t,n,p,g> of { +<CPresent,Sg,Pers1,Masc > => "T'W"; +<CPresent,Sg,Pers1,Fem > => "T'y" ; +<CPresent,Sg,Pers2_Casual,Masc > => "T'W" ; +<CPresent,Sg,Pers2_Casual,Fem > => "T'y" ; +<CPresent,Sg,Pers2_Respect,Masc > => "T'a" ; +<CPresent,Sg,Pers2_Respect,Fem > => "T'yWn" ; +<CPresent,Sg,Pers3_Near,Masc > => "T'W" ; +<CPresent,Sg,Pers3_Near,Fem > => "T'y" ; +<CPresent,Sg,Pers3_Distant,Masc > => "T'W" ; +<CPresent,Sg,Pers3_Distant,Fem > => "T'y" ; +<CPresent,Pl,Pers1,Masc > => "T'a" ; +<CPresent,Pl,Pers1,Fem > => "T'yWn" ; +<CPresent,Pl,Pers2_Casual,Masc > => "T'a" ; +<CPresent,Pl,Pers2_Casual,Fem > => "T'y" ; +<CPresent,Pl,Pers2_Respect,Masc > => "T'a" ; +<CPresent,Pl,Pers2_Respect,Fem > => "T'yWn" ; +<CPresent,Pl,Pers3_Near,Masc > => "T'a" ; +<CPresent,Pl,Pers3_Near,Fem > => "T'yWn" ; +<CPresent,Pl,Pers3_Distant,Masc > => "T'a" ; +<CPresent,Pl,Pers3_Distant,Fem > => "T'yWn" ; +<CPast,Sg,Pers1,Masc > => "h'ym" ; +<CPast,Sg,Pers1,Fem > => "h'ym" ; +<CPast,Sg,Pers2_Casual,Masc > => "h'e'yn" ; +<CPast,Sg,Pers2_Casual,Fem > => "h'e'yn" ; +<CPast,Sg,Pers2_Respect,Masc > => "h'e'W" ; +<CPast,Sg,Pers2_Respect,Fem > => "h'e'yWn" ; +<CPast,Sg,Pers3_Near,_ > => "ah'y" ; +-- <CPast,Sg,Pers3_Near,Fem > => "ah'e'" ; +<CPast,Sg,Pers3_Distant,Masc > => "h'yW" ; +<CPast,Sg,Pers3_Distant,Fem > => "h'e'y" ; + +<CPast,Pl,Pers1,Masc > => "h'e'asyn" ; +<CPast,Pl,Pers1,Fem > => "h'yWsyn" ; +<CPast,Pl,Pers2_Casual,_ > => "h'e'a" ; +<CPast,Pl,Pers2_Respect,_ > => "h'yW" ; +<CPast,Pl,Pers3_Near,Masc > => "h'e'a" ; +<CPast,Pl,Pers3_Near,Fem > => "h'e'yWn" ; +<CPast,Pl,Pers3_Distant,Masc > => "h'e'a" ; +<CPast,Pl,Pers3_Distant,Fem > => "h'yWn" ; + +<CFuture,Sg,Pers1,Masc > => "h'Wnds" ; +<CFuture,Sg,Pers1,Fem > => "h'Wnds" ; +<CFuture,Sg,Pers2_Casual,Masc > => "h'Wndyn" ; +<CFuture,Sg,Pers2_Casual,Fem > => "h'Wndyn" ; +<CFuture,Sg,Pers2_Respect,Masc > => "h'WndWe' " ; +<CFuture,Sg,Pers2_Respect,Fem > => "h'WndWe' " ; +<CFuture,Sg,Pers3_Near,Masc > => "h'WndW " ; +<CFuture,Sg,Pers3_Near,Fem > => "h'Wndy" ; +<CFuture,Sg,Pers3_Distant,Masc > => "h'WndW " ; +<CFuture,Sg,Pers3_Distant,Fem > => "h'Wndy" ; +<CFuture,Pl,Pers1,Masc > => "h'Wndasyn" ; +<CFuture,Pl,Pers1,Fem > => "h'WndyWnsyn" ; +<CFuture,Pl,Pers2_Casual,Masc > => "h'WndWe' " ; +<CFuture,Pl,Pers2_Casual,Fem > => "h'WndyWyn" ; +<CFuture,Pl,Pers2_Respect,Masc > => "h'WndWe' " ; +<CFuture,Pl,Pers2_Respect,Fem > => "h'WndyWyn" ; +<CFuture,Pl,Pers3_Near,Masc > => "h'Wnda" ; +<CFuture,Pl,Pers3_Near,Fem > => "h'WndyWn" ; +<CFuture,Pl,Pers3_Distant,Masc > => "h'Wnda" ; +<CFuture,Pl,Pers3_Distant,Fem > => "h'WndyWn" ; + +<CContinuous,Sg,Pers1,Masc > => "ah'yan" ; +<CContinuous,Sg,Pers1,Fem > => "ah'yan" ; +<CContinuous,Sg,Pers2_Casual,Masc > => "ah'yn" ; +<CContinuous,Sg,Pers2_Casual,Fem > => "ah'yn" ; +<CContinuous,Sg,Pers2_Respect,Masc > => "ah'yW " ; +<CContinuous,Sg,Pers2_Respect,Fem > => "ah'yW " ; +<CContinuous,Sg,Pers3_Near,Masc > => "ah'y " ; +<CContinuous,Sg,Pers3_Near,Fem > => "ah'y" ; +<CContinuous,Sg,Pers3_Distant,Masc > => "ah'y " ; +<CContinuous,Sg,Pers3_Distant,Fem > => "ah'y" ; +<CContinuous,Pl,Pers1,Masc > => "ah'yWn" ; +<CContinuous,Pl,Pers1,Fem > => "ah'yWn" ; +<CContinuous,Pl,Pers2_Casual,Masc > => "ah'yW " ; +<CContinuous,Pl,Pers2_Casual,Fem > => "ah'yW " ; +<CContinuous,Pl,Pers2_Respect,Masc > => "ah'yW " ; +<CContinuous,Pl,Pers2_Respect,Fem > => "ah'yW " ; +<CContinuous,Pl,Pers3_Near,Masc > => "ah'n" ; +<CContinuous,Pl,Pers3_Near,Fem > => "ah'n" ; +<CContinuous,Pl,Pers3_Distant,Masc > => "ah'n" ; +<CContinuous,Pl,Pers3_Distant,Fem > => "ah'n" + + +} ; + param + VPPTense = + VPPres + |VPPast + |VPFutr + |VPPerf; + + VPHTense = + VPGenPres -- impf hum nahim "I go" + | VPImpPast -- impf Ta nahim "I went" + | VPFut -- fut na/nahim "I shall go" + | VPContPres -- stem raha hum nahim "I am going" + | VPContPast -- stem raha Ta nahim "I was going" + | VPContFut + | VPPerfPres -- perf hum na/nahim "I have gone" + | VPPerfPast -- perf Ta na/nahim "I had gone" + | VPPerfFut + | VPPerfPresCont + | VPPerfPastCont + | VPPerfFutCont + | VPSubj -- subj na "I may go" + ; + + VPHForm = + VPTense VPPTense Agr -- 9 * 12 + | VPReq + | VPImp + | VPReqFut + | VPInf + | VPStem + ; + + VType = VIntrans | VTrans | VTransPost ; + + oper + + objVType : VType -> NPCase = \vt -> case vt of { + VTrans => NPObj ; + _ => NPC Obl + } ; + + VPH : Type = { + s : VPHForm => {fin, inf : Str} ; + obj : {s : Str ; a : Agr} ; + subj : VType ; + comp : Agr => Str; + inf : Str; + ad : Str; + embComp : Str ; + prog : Bool ; + } ; + + VPHSlash = VPH ** {c2 : Compl} ; + + oper + Compl : Type = {s : Str ; c : VType} ; + + predV : Verb -> VPH = \verb -> { + s = \\vh => + case vh of { + VPTense VPPres (Ag g n p) => {fin = copula CPresent n p g ; inf = verb.s ! VF Subj p n g } ; + VPTense VPPast (Ag g n p) => {fin = copula CPast n p g ; inf =verb.s ! VF Perf p n g} ; + VPTense VPFutr (Ag g n p) => {fin = copula CFuture n p g ; inf = verb.s ! VF Imperf p n g } ; + VPTense VPPerf (Ag g n p) => { fin = [] ; inf = verb.s ! Root ++ cka g n } ; + VPStem => {fin = [] ; inf = verb.s ! Root}; + VPInf => {fin = verb.s!Inf_Obl ; inf = verb.s ! Root}; + VPImp => {fin = verb.s!VF Subj Pers3_Near Pl Masc ; inf = verb.s ! Root}; + VPReq => {fin = [] ; inf = verb.s!VF Subj Pers1 Pl Masc}; + _ => {fin = [] ; inf = verb.s ! Root} + }; + obj = {s = [] ; a = defaultAgr} ; + subj = VIntrans ; + inf = verb.s ! Inf; + ad = []; + embComp = []; + prog = False ; + comp = \\_ => [] + } ; + + predVc : (Verb ** {c2,c1 : Str}) -> VPHSlash = \verb -> + predV verb ** {c2 = {s = verb.c1 ; c = VTrans} } ; +------------------------- +-- added for cauitives + predVcc : (Verb **{c2:Compl}) -> VPHSlash = \verb -> + predV verb ** {c2 = {s = "" ; c = VTrans} } ; +------------------------ + + raha : Gender -> Number -> Str = \g,n -> + (mkAdj1 "rya").s ! n ! g ! Dir ; + rahanDa : Gender -> Number -> Str = \g,n -> + (mkAdj1 "rh'nda").s ! n ! g ! Dir ; + + pya : Gender -> Number -> Str = \g,n -> + (mkAdj1 "pya").s ! n ! g ! Dir ; + + cka : Gender -> Number -> Str = \g,n -> + (mkAdj1 "gya").s ! n ! g ! Dir ; + + hw : PPerson -> Number -> Str = \pp,n -> + case <pp,n> of { + <Pers1,_> => "hwwaN"; + <Pers2_Casual,Sg> => "hwwyN"; + <Pers2_Casual,Pl> => "hww"; + <Pers2_Respect,_> => "hww"; + <Pers3_Distant,Sg> => "hwwE"; + <Pers3_Distant,Pl> => "hwn"; + <Pers3_Near,Sg> => "hwwE"; + <Pers3_Near,Pl> => "hwn" + + }; + + predAux : Aux -> VPH = \verb -> { + s = \\vh => + let + + inf = verb.inf ; + part = verb.ppart ; + + in + case vh of { + VPTense VPPres (Ag g n p) => {fin = copula CContinuous n p g ; inf = part } ; + VPTense VPPast (Ag g n p) => {fin = copula CPast n p g ; inf = part } ; + VPTense VPFutr (Ag g n p) => {fin = copula CFuture n p g ; inf = part ++ hw p n } ; + VPStem => {fin = [] ; inf = "rh" }; + _ => {fin = part ; inf = inf } + }; + obj = {s = [] ; a = defaultAgr} ; + subj = VIntrans ; + inf = verb.inf; + ad = []; + embComp = []; + prog = False ; + comp = \\_ => [] + } ; + + Aux = { + inf,ppart,prpart : Str + } ; + + auxBe : Aux = { + inf = "" ; + ppart = "" ; + prpart = "" + } ; + + predProg : VPH -> VPH = \verb -> { + s = \\vh => + case vh of { + VPTense VPPres (Ag g n p) => {fin = copula CPresent n p g ; inf = (verb.s!VPTense VPPres (Ag g n p)).inf ++ pya g n} ; + VPTense VPPast (Ag g n p) => {fin = copula CPast n p g ; inf = (verb.s!VPTense VPPres (Ag g n p)).inf ++ pya g n} ; + VPTense VPFutr (Ag g n p) => {fin = copula CFuture n p g ; inf = (verb.s!VPTense VPPres (Ag g n p)).inf } ; + VPTense VPPerf (Ag g n p) => {fin = copula CPast n p g ; inf = (verb.s!VPTense VPPres (Ag g n p)).inf ++ raha g n } ; + VPStem => {fin = [] ; inf = (verb.s!VPStem).inf }; + _ => {fin = [] ; inf = [] } + }; + obj = verb.obj ; + subj = VIntrans ; + inf = verb.inf; + ad = verb.ad; + embComp = verb.embComp; + prog = True ; + comp = verb.comp + } ; + + Clause : Type = {s : VPHTense => Polarity => Order => Str} ; + mkClause : NP -> VPH -> Clause = \np,vp -> { + s = \\vt,b,ord => + let + subjagr : NPCase * Agr = case vt of { + VPImpPast => case vp.subj of { + VTrans => <NPErg, vp.obj.a> ; + VTransPost => <NPErg, defaultAgr> ; + _ => <NPC Dir, np.a> + } ; + _ => <NPC Dir, np.a> + } ; + subj = subjagr.p1 ; + agr = subjagr.p2 ; + n = (fromAgr agr).n; + p = (fromAgr agr).p; + g = (fromAgr agr).g; + vps = case vt of { + + VPGenPres => vp.s ! VPTense VPPres agr ; + VPImpPast => vp.s ! VPTense VPPast agr ; + + VPFut => case vp.prog of { True => {fin = (vp.s ! VPTense VPFutr agr).fin ; inf = (vp.s ! VPTense VPFutr agr).inf ++ hw p n} ; + _ => vp.s ! VPTense VPFutr agr } ; + VPContPres => + {fin = copula CContinuous n p g ; inf = (vp.s ! VPTense VPPres agr).inf ++ raha g n } ; + VPContPast => + {fin = copula CPast n p g ; inf = (vp.s ! VPTense VPPres agr).inf ++ raha g n } ; + VPContFut => + {fin = copula CFuture n p g ; inf = (vp.s ! VPTense VPPres agr).inf ++ raha g n } ; + VPPerfPres => + {fin = copula CContinuous n p g ; inf = (vp.s ! VPTense VPPast agr).inf } ; + -- {fin = copula CPresent n p g ; inf = (vp.s ! VPStem).inf ++ cka g n } ; + VPPerfPast => + -- {fin = copula CPast n p g ; inf = (vp.s ! VPStem).inf ++ cka g n } ; + {fin = copula CPast n p g ; inf = (vp.s ! VPTense VPPast agr).inf } ; + VPPerfFut => + {fin = copula CFuture n p g ; inf = (vp.s ! VPTense VPPast agr).inf } ; + VPPerfPresCont => + {fin = copula CContinuous n p g ; inf = (vp.s ! VPTense VPFutr agr).inf ++ raha g n} ; + VPPerfPastCont => + {fin = copula CPast n p g ; inf = (vp.s ! VPTense VPFutr agr).inf ++ rahanDa g n} ; + VPPerfFutCont => + {fin = copula CFuture n p g ; inf = (vp.s ! VPTense VPFutr agr).inf ++ rahanDa g n} ; + VPSubj => case vp.prog of { True => {fin = (vp.s ! VPTense VPFutr agr).inf ++ hw p n ; inf = "Xayd" } ; + _ => {fin = (vp.s ! VPTense VPFutr agr).inf ; inf = "Xayd" } } + + }; + + + quest = + case ord of + { ODir => []; + OQuest => "c'a" }; + na = + case b of + { Pos => []; + Neg => "n" }; + nahim = + case b of + { Pos => []; + Neg => "n" }; + in + case vt of { + VPSubj => quest ++ np.s ! subj ++ vp.obj.s ++ vp.ad ++ vp.comp ! np.a ++ vps.inf ++ na ++ vps.fin ++ vp.embComp ; + _ => quest ++ np.s ! subj ++ vp.obj.s ++ vp.ad ++ vp.comp ! np.a ++ vps.inf ++ nahim ++ vps.fin ++ vp.embComp}; + + } ; + + mkSClause : Str -> Agr -> VPH -> Clause = + \subj,agr,vp -> { + s = \\t,b,ord => + let + n = (fromAgr agr).n; + p = (fromAgr agr).p; + g = (fromAgr agr).g; + vps = case t of { + VPGenPres => vp.s ! VPTense VPPres agr ; + VPImpPast => vp.s ! VPTense VPPast agr ; + VPFut => vp.s ! VPTense VPFutr agr ; + VPContPres => + {fin = copula CPresent n p g ; inf = (vp.s ! VPStem).inf ++ pya g n } ; + VPContPast => + {fin = copula CPast n p g ; inf = (vp.s ! VPStem).inf ++ pya g n } ; + VPContFut => + {fin = copula CFuture n p g ; inf = (vp.s ! VPStem).inf ++ pya g n ++ hw p n } ; + VPPerfPres => + {fin = copula CPresent n p g ; inf = (vp.s ! VPStem).inf ++ cka g n } ; + VPPerfPast => + {fin = copula CPast n p g ; inf = (vp.s ! VPStem).inf ++ cka g n } ; + VPPerfFut => + {fin = copula CFuture n p g ; inf = (vp.s ! VPStem).inf ++ cka g n ++ hw p n } ; + VPPerfPresCont => + {fin = copula CPresent n p g ; inf = (vp.s ! VPStem).inf ++ pya g n } ; + VPPerfPastCont => + {fin = copula CPast n p g ; inf = (vp.s ! VPStem).inf ++ pya g n } ; + VPPerfFutCont => + {fin = copula CFuture n p g ; inf = (vp.s ! VPStem).inf ++ pya g n ++ hw p n } ; + VPSubj => {fin = (vp.s ! VPTense VPPres agr).inf ; inf = "Xayd" } + + }; + + quest = + case ord of + { ODir => []; + OQuest => "c'a" }; + na = + case b of + { Pos => []; + Neg => "n" }; + nahim = + case b of + { Pos => []; + Neg => "n" }; + in + case t of { + VPSubj => quest ++ subj ++ vp.obj.s ++ vp.ad ++ vp.comp ! agr ++ vps.inf ++ na ++ vps.fin ++ vp.embComp; + _ => quest ++ subj ++ vp.obj.s ++ vp.ad ++ vp.comp ! agr ++ vps.inf ++ nahim ++ vps.fin ++ vp.embComp}; + } ; + + insertSubj : PPerson -> Str -> Str = \p,s -> + case p of { Pers1 => s ++ "wN" ; _ => s ++ ""}; + + insertObj : (Agr => Str) -> VPH -> VPH = \obj1,vp -> { + s = vp.s ; + obj = vp.obj ; + subj = vp.subj ; + inf = vp.inf; + ad = vp.ad; + embComp = vp.embComp; + prog = vp.prog ; + comp = \\a => vp.comp ! a ++ obj1 ! a + } ; + insertVV : Str -> VPH -> Str -> VPH -> VPH = \obj1,vp,emb,vp2 -> { + s = vp.s ; + obj = vp2.obj ; + subj = vp.subj ; + inf = vp.inf; + ad = vp.ad; + embComp = vp.embComp ++ emb; -- this should be covered in urdu as well + prog = vp.prog ; + comp = \\a => vp.comp ! a ++ obj1 + } ; + + insertObj2 : (Str) -> VPH -> VPH = \obj1,vp -> { + s = vp.s; + obj = vp.obj ; + subj = vp.subj ; + inf = vp.inf; + ad = vp.ad; + embComp = vp.embComp ++ obj1; + prog = vp.prog ; + comp = vp.comp + + } ; + + insertObjc : (Agr => Str) -> VPHSlash -> VPHSlash = \obj,vp -> + insertObj obj vp ** {c2 = vp.c2} ; + insertObjc2 : Str -> VPHSlash -> VPHSlash = \obj,vp -> + insertObj2 obj vp ** {c2 = vp.c2} ; + + infVP : Bool -> VPH -> Agr -> Str = \isAux,vp,a -> + vp.obj.s ++ vp.inf ++ vp.comp ! a ; + infVV : Bool -> VPH -> Str = \isAux,vp -> + case isAux of {False => (vp.comp ! (toAgr Sg Pers1 Masc)) ++ vp.inf ; True => (vp.comp ! (toAgr Sg Pers1 Masc)) ++ (vp.s ! VPImp).fin }; -- need to be checked and should be covered in urdu as well + infV2V : Bool -> VPH -> Str = \isAux,vp -> + case isAux of {False => (vp.comp ! (toAgr Sg Pers1 Masc)) ++ vp.inf ++ "dy" ; True => (vp.comp ! (toAgr Sg Pers1 Masc)) ++ (vp.s ! VPImp).fin ++ "dy"}; -- need to be checked and should be covered in urdu as well + + insertObject : NP -> VPHSlash -> VPH = \np,vps -> { + s = vps.s ; + obj = case np.isPron of { + False => {s = vps.obj.s ++ np.s ! objVType vps.c2.c ++ vps.c2.s ; a = np.a} ; + _ => {s = vps.obj.s ++ np.s ! objVType vps.c2.c ++ vps.c2.s ; a = np.a} + }; + subj = vps.c2.c ; + inf = vps.inf; + ad = vps.ad; + embComp = vps.embComp; + prog = vps.prog ; + comp = vps.comp + } ; + + insertObjPre : (Agr => Str) -> VPHSlash -> VPH = \obj,vp -> { + s = vp.s ; + obj = vp.obj ; + inf = vp.inf ; + subj = vp.subj ; + ad = vp.ad ; + embComp = vp.embComp; + prog = vp.prog ; + comp = \\a => obj ! a ++ vp.c2.s ++ vp.comp ! a + } ; + + insertAdV : Str -> VPH -> VPH = \ad,vp -> { + s = vp.s ; + obj = vp.obj ; + inf = vp.inf ; + subj = vp.subj; + ad = vp.ad ++ ad ; + embComp = vp.embComp; + prog = vp.prog ; + comp = vp.comp + } ; + conjThat : Str = "t" ; + checkPron : NP -> Str -> Str = \np,str -> case (np.isPron) of { + True => np.s ! NPC Obl; + False => np.s ! NPC Obl ++ str} ; + + insertEmbCompl : VPH -> Str -> VPH = \vp,emb -> { + s = vp.s ; + obj = vp.obj ; + inf = vp.inf ; + subj = vp.subj; + ad = vp.ad; + embComp = vp.embComp ++ emb; + prog = vp.prog ; + comp = vp.comp + } ; + + insertTrans : VPH -> VType -> VPH = \vp,vtype -> { + s = vp.s ; + obj = vp.obj ; + inf = vp.inf ; + subj = case vtype of {VIntrans => VTransPost ; VTrans => VTrans ; _ => vtype} ; -- still some problem not working properly + ad = vp.ad; + embComp = vp.embComp ; + prog = vp.prog ; + comp = vp.comp + } ; + +} +
@@ -0,0 +1,104 @@+concrete SentenceSnd of Sentence = CatSnd ** open Prelude, ResSnd in { + + flags optimize=all_subs ; + coding = utf8; + + lin + + PredVP np vp = mkClause np vp ; + + PredSCVP sc vp = mkSClause sc.s (defaultAgr) vp ; + + ImpVP vp = { + s = \\pol,n => + let + agr = Ag Masc (numImp n) Pers2_Casual ; +-- verb = infVP True vp agr ; + verb = (vp.s ! VPImp).inf ++ vp.comp ! agr ; + dont = case pol of { + CNeg True => "n" ; + CNeg False => "n" ; + _ => [] + } + in + dont ++ verb + } ; + + SlashVP np vp = + mkClause np vp ** {c2 = vp.c2} ; + + AdvSlash slash adv = { + s = \\t,p,o => adv.s ! Masc ++ slash.s ! t ! p ! o ; + c2 = slash.c2 + } ; + + SlashPrep cl prep = cl ** {c2 = { s = prep.s ; c = VIntrans}} ; + + SlashVS np vs slash = + mkClause np + (insertObj2 (conjThat ++ slash.s) (predV vs)) ** + {c2 = slash.c2} ; + + EmbedS s = {s = conjThat ++ s.s} ; + EmbedQS qs = {s = qs.s ! QIndir} ; + EmbedVP vp = {s = infVP False vp defaultAgr} ; --- agr + + UseCl temp p cl = + { s = case <temp.t,temp.a> of { + <Pres,Simul> => temp.s ++ p.s ++ cl.s ! VPGenPres ! p.p ! ODir; + <Pres,Anter> => temp.s ++ p.s ++ cl.s ! VPPerfPres ! p.p ! ODir; + <Past,Simul> => temp.s ++ p.s ++ cl.s ! VPImpPast ! p.p ! ODir; + <Past,Anter> => temp.s ++ p.s ++ cl.s ! VPPerfPast ! p.p ! ODir; + <Fut,Simul> => temp.s ++ p.s ++ cl.s ! VPFut ! p.p ! ODir; + <Fut,Anter> => temp.s ++ p.s ++ cl.s ! VPPerfFut ! p.p ! ODir; + <Cond,Simul> => temp.s ++ p.s ++ cl.s ! VPSubj ! p.p ! ODir; + <Cond,Anter> => temp.s ++ p.s ++ cl.s ! VPSubj ! p.p ! ODir -- this needs to be fixed by making SubjPerf in ResPnb + + }; + } ; + UseQCl temp p cl = { + s = \\q => case <temp.t,temp.a> of { + <Pres,Simul> => temp.s ++ p.s ++ cl.s ! VPGenPres ! p.p ! q; + <Pres,Anter> => temp.s ++ p.s ++ cl.s ! VPPerfPres ! p.p ! q; + <Past,Simul> => temp.s ++ p.s ++ cl.s ! VPImpPast ! p.p ! q; + <Past,Anter> => temp.s ++ p.s ++ cl.s ! VPPerfPast ! p.p ! q; + <Fut,Simul> => temp.s ++ p.s ++ cl.s ! VPFut ! p.p ! q; + <Fut,Anter> => temp.s ++ p.s ++ cl.s ! VPPerfFut ! p.p ! q; + <Cond,Simul> => temp.s ++ p.s ++ cl.s ! VPSubj ! p.p ! q; + <Cond,Anter> => temp.s ++ p.s ++ cl.s ! VPSubj ! p.p ! q + + }; + } ; + UseRCl temp p rcl = { + s = \\q => case <temp.t,temp.a> of { + <Pres,Simul> => temp.s ++ p.s ++ rcl.s ! VPGenPres ! p.p ! ODir ! q; + <Pres,Anter> => temp.s ++ p.s ++ rcl.s ! VPPerfPres ! p.p ! ODir ! q; + <Past,Simul> => temp.s ++ p.s ++ rcl.s ! VPImpPast ! p.p ! ODir ! q; + <Past,Anter> => temp.s ++ p.s ++ rcl.s ! VPPerfPast ! p.p ! ODir ! q; + <Fut,Simul> => temp.s ++ p.s ++ rcl.s ! VPFut ! p.p ! ODir ! q; + <Fut,Anter> => temp.s ++ p.s ++ rcl.s ! VPPerfFut ! p.p ! ODir ! q; + <Cond,Simul> => temp.s ++ p.s ++ rcl.s ! VPSubj ! p.p ! ODir ! q; + <Cond,Anter> => temp.s ++ p.s ++ rcl.s ! VPSubj ! p.p ! ODir ! q + }; + c = rcl.c + } ; + UseSlash temp p clslash = { + s = case <temp.t,temp.a> of { + <Pres,Simul> => temp.s ++ p.s ++ clslash.s ! VPGenPres ! p.p ! ODir; + <Pres,Anter> => temp.s ++ p.s ++ clslash.s ! VPPerfPres ! p.p ! ODir; + <Past,Simul> => temp.s ++ p.s ++ clslash.s ! VPImpPast ! p.p ! ODir ; + <Past,Anter> => temp.s ++ p.s ++ clslash.s ! VPPerfPast ! p.p ! ODir; + <Fut,Simul> => temp.s ++ p.s ++ clslash.s ! VPFut ! p.p ! ODir; + <Fut,Anter> => temp.s ++ p.s ++ clslash.s ! VPPerfFut ! p.p ! ODir; + <Cond,Simul> => temp.s ++ p.s ++ clslash.s ! VPSubj ! p.p ! ODir; + <Cond,Anter> => temp.s ++ p.s ++ clslash.s ! VPSubj ! p.p ! ODir + }; + c2 = clslash.c2 + } ; + + AdvS a s = {s = a.s ! Masc ++ s.s} ; + + RelS s r = {s = s.s ++ r.s ! agrP3 Masc Sg} ; + SSubjS s sj s = { s = s.s ++ sj.s ++ s.s}; + +}
@@ -0,0 +1,132 @@+concrete StructuralSnd of Structural = CatSnd ** + open MorphoSnd, ParadigmsSnd, Prelude in { + + flags optimize=all ; + coding = utf8; + + lin + above_Prep = mkPrep "mT'y " ; + after_Prep = mkPrep "k'an pWe' " ; + all_Predet = ss "sB' " ; + almost_AdA, almost_AdN = mkAdN "gh't'W kry " ; + although_Subj = ss "jytWt'yk " ; + always_AdV = ss "h'myXh' " ; + and_Conj = sd2 [] "A" ** {n = Pl} ; + because_Subj = ss "c'akat' ty " ; + before_Prep = mkPrep "pyh'ryn" ; + behind_Prep = mkPrep "pT!ty " ; + between_Prep = mkPrep " jy Wc my " ; + both7and_DConj = sd2 "Be'y " "A" ** {n = Pl} ; + but_PConj = ss "pr" ; + by8agent_Prep = mkPrep "h'T'an " ; + by8means_Prep = mkPrep "kan" ; + can8know_VV,can_VV = mkV "sgh't' " ** { isAux = True} ; + during_Prep = mkPrep "Wc M" ; + either7or_DConj = sd2 "kWe'y ByW " "ya" ** {n = Sg} ; +--everybody_NP = MassNP (UseN (ParadigmsSnd.mkN "h'r kWe'y" "h'r kWe'y" "h'r kWe'y" "h'r kWe'y" Masc )); -- not a good way coz need to include NounSnd + every_Det = mkDet "h'r h'k " "h'r h'k " "h'r h'k " "h'r h'k " Sg; +--everything_NP = MassNP (UseN (ParadigmsSnd.mkN "h'r Xy " "h'r Xy " "h'r Xy " "sB' kjh' " Masc )); + everywhere_Adv = mkAdv "h'r h'nd' " ; + few_Det = mkDet "kjh' " "kjh' " "kjh' " "kjh' " Pl ; + first_Ord = {s = "ph'ryWn" ; n = Sg} ; --DEPRECATED + for_Prep = mkPrep "Lae'y "; + from_Prep = mkPrep "WTan" ; + he_Pron = personalPN "h'W" "h'W" "" ["h'W "] ["h'W"] Sg Masc Pers3_Distant ; + here_Adv = mkAdv "h'ty" ; + here7to_Adv = mkAdv "ajh'W" ; + here7from_Adv = mkAdv ["h'yD'anh'n"] ; + how_IAdv = ss "ke'yn" ; + how8many_IDet = makeIDet "kytra" "kytra" Pl ; + how8much_IAdv = ss "kytra"; + if_Subj = ss "jykD'h'n" ; + in8front_Prep = mkPrep ["jy samh'Wn"] ; + i_Pron = personalPN "man" "mh'nja " "mh'njW " "man" " " Sg Masc Pers1; + in_Prep = mkPrep "M" ; + it_Pron = personalPN "ah'a" "h'n" "ah'W" "ah'a" "" Sg Masc Pers3_Near; + less_CAdv = {s = "gh'T" ; p = ""} ; + many_Det = mkDet "gh't'a" "gh't'y" "kafy" "kytra" Pl ; + more_CAdv = {s = "Wd'yk"; p = "gh't'a" } ; + most_Predet = ss "sB' k'an gh't'W" ; + much_Det = mkDet "gh't'W" "gh't'W" "gh't'W" "gh't'W" Sg ; +--must_VV = { +-- s = table { +-- VVF VInf => ["have to"] ; +-- VVF VPres => "must" ; +-- VVF VPPart => ["had to"] ; +-- VVF VPresPart => ["having to"] ; +-- VVF VPast => ["had to"] ; --# notpresent +-- VVPastNeg => ["hadn't to"] ; --# notpresent +-- VVPresNeg => "mustn't" +-- } ; +-- isAux = True +-- } ; + +-----b + no_Phr = ss "no" ; + no_Utt = ss "na" ; + on_Prep = mkPrep "mT'an" ; + one_Quant = demoPN "h'k" "h'k" "h'k" ; -- DEPRECATED + only_Predet = ss "Srf" ; + or_Conj = sd2 [] "ya" ** {n = Sg} ; + otherwise_PConj = ss "n t pWe'y" ; + part_Prep = mkPrep "HsW" ; + possess_Prep = mkPrep[ "jW ya jy"] ; + please_Voc = ss "mh'rbany" ; + quite_Adv = ss "c'D't' " ; + she_Pron = personalPN "h'We'" "h'W" "h'W" ["h'We'"] ["h'We'"] Sg Fem Pers3_Distant ; + so_AdA = ss "an kry" ; +--somebody_NP = MassNP (UseN (ParadigmsSnd.mkN "kWe'y" "kWe'y" "kWe'y" "kWe'y" Masc )); + someSg_Det = mkDet "kjh' " "kjh' " "kjh' " "kjh' " Sg ; + somePl_Det = mkDet "kjh' " "kjh' " "kjh' " "kjh' " Pl ; +--something_NP = MassNP (UseN (ParadigmsSnd.mkN "kWe'y Xy" "kWe'y Xy" "kWe'y Xy" "kWe'y XyWn" Masc )); + somewhere_Adv = mkAdv "kT'y" ; + that_Quant = demoPN "jykW" "" "" ; + that_Subj = ss "ah'a" ; + there_Adv = mkAdv "aty" ; + there7to_Adv = mkAdv ["h'ty"] ; + there7from_Adv = mkAdv ["h'tan"] ; + therefore_PConj = ss "an kry" ; + they_Pron = personalPN "ah'y" "ah'y" "ah'y" ["ah'y jW"] ["ah'y jW"] Pl Masc Pers3_Distant ; ---- + this_Quant = demoPN "h'y" "h'n" ""; + through_Prep = mkPrep "mnjh'an" ; + under_Prep = mkPrep " h'yT!an" ; -- ** {lock_Prep = <>}; + too_AdA = ss "byHd"; + to_Prep = mkPrep "D'anh'n" ; -- ** {lock_Prep = <>}; + very_AdA = ss "tmam" ; + want_VV = mkV "cah't' " ** { isAux = False} ; + we_Pron = personalPN "asan" "asan" "asan" "asanjo" "asanjo" Pl Masc Pers1 ; + whatSg_IP = mkIP "c'a" "c'W" "" "" Sg Masc ; + whatPl_IP = mkIP "c'a" "c'W " " " "" Pl Masc ; + when_IAdv = ss "kD'h'n" ; + when_Subj = ss "jD'h'n" ; + where_IAdv = ss "kT'y" ; +--which_IQuant = {s = \\_ => "kh'RW"} ; + which_IQuant = mkIQuant "jykW" "jyky" "jyka" "jh'RW" ; + whichPl_IDet = makeDet "jykY" "jnh'n" ; + whichSg_IDet = makeDet "jykW " "jyka" ; + whoSg_IP = mkIP "kyr" "kh'njy" "kh'njo" "" Sg Masc ; + whoPl_IP = mkIP "kyr" "kh'nja" "kh'nja" "" Pl Masc ; + why_IAdv = ss "c'W" ; + without_Prep = mkPrep "k'an sWae' " ; + with_Prep = mkPrep "san" ; + yes_Phr = ss "h'a" ; + yes_Utt = ss "h'a" ; + youSg_Pron = personalPN "tWn" "tWn" "tWn" "th'njW" "th'njy" Sg Masc Pers2_Casual ; + youPl_Pron = personalPN "tWh'an" "tWh'an" "tWh'an" "tWh'anjW" "tWh'anjy" Pl Masc Pers2_Casual ; + youPol_Pron = personalPN "tWh'an" "tWh'an" "tWh'an" "tWh'an jW" "tWh'an jy" Pl Masc Pers2_Respect ; + no_Quant = demoPN " c'W n" "c'W n" "c'W n " ; + not_Predet = {s="n"} ; + if_then_Conj = sd2 "jykD'h'n" "t" ** {n = Sg} ; + at_least_AdN = mkAdN ["gh'T my gh'T"] ; + at_most_AdN = mkAdN ["gh't'y k'an gh't'W"]; + +--nothing_NP = MassNP (UseN (ParadigmsSnd.mkN "kjh' Xy n" "kjh' Xy n" "kjh' Xy n" "kjh' Xy n" "kjh' Xy n" "kjh' Xy n" Masc )); + except_Prep = mkPrep "sWae' " ; +--nobody_NP = MassNP (UseN (ParadigmsSnd.mkN "kW b n" "kW b n" "kW b n" "kW b n" "kW b n" "kW b n" Masc )); + + as_CAdv = {s = "jye'n" ; p = "jh'RW"} ; + have_V2 = mkV2 (mkV "rk't' ") "" ; + language_title_Utt = ss "BWly" ; + +} +
@@ -0,0 +1,50 @@+--# -path=.:../abstract:../common + +concrete SymbolSnd of Symbol = CatSnd ** open Prelude, ResSnd in { + + flags coding = utf8; + + lin +-- SymbPN i = {s = \\_ => i.s ; g = Masc} ; + SymbPN i = {s = addGenitiveS i.s ; g = Masc} ; + IntPN i = {s = addGenitiveS i.s ; g = Masc} ; + FloatPN i = {s = addGenitiveS i.s ; g = Masc} ; + NumPN i = {s = \\_ =>i.s ; g = Masc} ; + CNIntNP cn i = { + s = \\c => cn.s ! Sg ! Dir ++ i.s ; + a = agrP3 cn.g Sg ; + isPron = False + } ; + CNSymbNP det cn xs = { + s = \\c => det.s!Sg!Masc ++ cn.s ! det.n ! Dir ++ xs.s ; + a = agrP3 cn.g det.n; + isPron = False + } ; + CNNumNP cn i = { + s = \\c => cn.s ! Sg ! Dir ++ i.s ; + a = agrP3 cn.g Sg; + isPron = False + } ; + + SymbS sy = sy ; + SymbNum sy = { s = sy.s ; n = Pl } ; + SymbOrd sy = { s = sy.s ++ "waN" ; n = Pl} ; + +lincat + + Symb, [Symb] = SS ; + +lin + MkSymb s = s ; + + BaseSymb = infixSS "tE" ; + ConsSymb = infixSS "" ; + +oper + -- Note: this results in a space before 's, but there's + -- not mauch we can do about that. + addGenitiveS : Str -> Case => Str = \s -> + table {_ => s ++ "da" } ; + + +}
@@ -0,0 +1,44 @@+concrete VerbSnd of Verb = CatSnd ** open ResSnd in {++ flags coding = utf8;+ flags optimize=all_subs ;++ lin+ UseV v = predV v ;+ SlashV2a v = predV v ** {c2 = {s = v.c2.s ; c = VTrans}} ;+ Slash2V3 v np = + insertObjc (\\_ => np.s ! NPObj ++ v.c3 ) (predV v ** {c2 = {s = v.c2 ; c = VTrans}}) ;+ + Slash3V3 v np = + insertObjc (\\_ => checkPron np v.c2) (predV v ** {c2 = {s = v.c3 ; c = VTrans}}) ; + + ComplVV v vp = insertTrans (insertVV (infVV v.isAux vp) (predV v) vp.embComp vp) vp.subj; + ComplVS v s = insertTrans (insertObj2 (conjThat ++ s.s) (predV v)) VTransPost ;+ ComplVQ v q = insertObj2 (conjThat ++ q.s ! QIndir) (predV v) ;+ ComplVA v ap = insertObj (\\a => ap.s ! giveNumber a ! giveGender a ! Dir ) (predV v) ;+ SlashV2V v vp = insertVV (infV2V v.isAux vp) (predV v) vp.embComp vp **{c2 = {s = "twN" ; c = VTransPost}} ; -- should creat a form at VP level which can be used in VP like 'swn da kyna' also check the c=VTransPost it is correct in case if second v is intrasitive, but not if trans like begged me to ead bread+ SlashV2S v s = insertObjc2 (conjThat ++ s.s) (predV v ** {c2 = {s = "k'y" ; c = VTransPost}}) ;+ SlashV2Q v q = insertObjc2 (conjThat ++ q.s ! QIndir) (predV v ** {c2 = {s = "k'an" ; c = VTransPost}}) ; -- chek for VTransPost, as in this case , case should be ergative but agrement should be default+ SlashV2A v ap = insertObjc (\\a => ap.s ! giveNumber a ! giveGender a ! Dir ) (predV v ** {c2 = {s = "k'y" ; c = VTransPost}}) ; ----+ ComplSlash vp np = insertObject np vp ;+ SlashVV vv vp = + insertEmbCompl (insertObj (\\a => infVP vv.isAux vp a) (predV vv)) vp.embComp **+ {c2 = vp.c2} ;+ SlashV2VNP vv np vp = + insertObjPre (\\_ => np.s ! NPObj )+ (insertObjc (\\a => infVP vv.isAux vp a) (predVc vv)) **+ {c2 = vp.c2} ;+ UseComp comp = insertObj comp.s (predAux auxBe) ;++ AdvVP vp adv = insertObj (\\a => adv.s ! (fromAgr a).g) vp ;++ AdVVP adv vp = insertAdV adv.s vp ;+ ReflVP v = insertObjPre (\\_ => RefPron) v ;+ PassV2 v = predV v ; -- need to be fixed+ CompAP ap ={s = \\a => ap.s ! giveNumber a ! giveGender a ! Dir } ;+ CompNP np = {s = \\_ => np.s ! NPObj} ;+ CompAdv adv = {s = \\a => adv.s ! (fromAgr a).g } ;+ CompCN cn = {s = \\a => cn.s ! giveNumber a ! Dir} ;+++}
@@ -1,5 +1,5 @@ --# -path=.:../romance:../abstract:../common:prelude concrete CatSpa of Cat = CommonX - - [Temp,TTAnt,Tense,TPres,TPast,TFut,TCond] ** CatRomance with+ [SC,Temp,TTAnt,Tense,TPres,TPast,TFut,TCond] ** CatRomance with (ResRomance = ResSpa) ;
@@ -95,7 +95,8 @@ let pe = case b of {True => P3 ; _ => p} ; agr = {g = g ; n = n ; p = pe} ;- clpr = <[],[],False> ; ----e pronArg agr.n agr.p vp.clAcc vp.clDat ;+ clpr = <vp.clit1 ++ vp.clit2, [],False> ; ---- TODO: True if clit+---- clpr = <[],[],False> ; ----e pronArg agr.n agr.p vp.clAcc vp.clDat ; ----e verb = case <aag.n, pol,pe> of { ----e <Sg,Neg,P2> => (vp.s ! VPInfinit Simul clpr.p3).inf ! aag ; ----e _ => (vp.s ! VPImperat).fin ! agr
@@ -11,7 +11,7 @@ RelativeSpa, ConjunctionSpa, PhraseSpa,- TextSpa - [Temp,Tense], -- special punctuation+ TextSpa - [SC,Temp,Tense], -- special punctuation IdiomSpa, StructuralSpa, TenseSpa
@@ -72,8 +72,8 @@ <ental _, NOrd g n> => pronForms (adjSolo secondo) g n ; <tiotal, NCard _> => venti ; <tiotal, NOrd g n> => regCard ventesimo g n ;- <ton, NCard _> => venti ;- <ton, NOrd g n> => regCard ventesimo g n ;+ <ton, NCard _> => dodici ;+ <ton, NOrd g n> => regCard dodicesimo g n ; <hundra _, NCard Masc> => ducento ; <hundra _, NCard Fem> => Predef.tk 2 ducento + "as" ; <hundra _, NOrd g n> => regCard ducentesimo g n
@@ -1,7 +1,7 @@ --# -path=.:../scandinavian:../abstract:../common:prelude concrete AllSwe of AllSweAbs = - LangSwe,+ LangSwe - [PassV2], IrregSwe, ExtraSwe ** {} ;
@@ -1,5 +1,5 @@ abstract AllSweAbs = - Lang,+ Lang - [PassV2] , IrregSweAbs, ExtraSweAbs ** {} ;
@@ -1,2 +1,2 @@-concrete CatSwe of Cat = CommonX ** CatScand with+concrete CatSwe of Cat = CommonX - [Tense,Temp] ** CatScand with (ResScand = ResSwe) ;
file too large to diff
file too large to diff
@@ -19,6 +19,7 @@ hasAuxBe _ = False ; + -- Strings. conjThat = "att" ;@@ -48,6 +49,8 @@ noPart = {part = []} ; auxFut = "ska" ; -- "skall" in ExtSwe+ auxFutKommer = "kommer" ; + auxFutPart = "" ; auxCond = "skulle" ; negation : Polarity => Str = table {
@@ -1,28 +1,119 @@-concrete ExtraSwe of ExtraSweAbs = ExtraScandSwe ** open CommonScand, ResSwe, ParamX, Prelude in {+--# -path=.:../scandinavian:../abstract:../common:prelude+concrete ExtraSwe of ExtraSweAbs = ExtraScandSwe - [FocAdv] ,+ ParadigmsSwe - [nominative] **+ open CommonScand, ResSwe, ParamX, VerbSwe, Prelude, DiffSwe, StructuralSwe, MorphoSwe,+ NounSwe, Coordination, AdjectiveSwe, SentenceSwe, RelativeSwe in { +lincat+ ReflNP = NP ;+ PronAQ = A ; -- 'en sådan' + PronAD = A ; -- 'fler' + AdvFoc = Adv ;+ RelVSCl = {s : Agr => RCase => Str};+ + + lin- FocVP vp np = {+ + TFutKommer = {s = []} ** {t = SFutKommer} ; --# notpresent+ + DetNP_utr = detNP utrum Sg ;++ oper detNP : NGender -> Number -> Det -> NP =+ \g,num,det -> let + m = True ; ---- is this needed for other than Art?+ in lin NP {+ s = \\c => det.sp ! m ! g;+ a = agrP3 (ngen2gen g) num+ } ;++ lin+ RelVS s rvs = {s = \\o => s.s ! o ++ "," ++ rvs.s ! agrP3 Neutr Sg ! RPrep True} ; + RelSlashVS t p vs np = let vpform = VPFinite t.t t.a ;+ cl = PredVP np (predV vs) ; + vilket = IdRP.s ! Neutr ! Sg ! (RPrep True) in+ {s = \\ag,rc => t.s ++ p.s ++ vilket ++ cl.s ! t.t ! t.a ! p.p ! Sub } ;++ + AdvFocVP adv vp = {s = \\vpf => {fin = adv.s ++ (vp.s ! vpf).fin ;+ inf = (vp.s ! vpf).inf};+ a1 = vp.a1 ; n2 = vp.n2 ; a2 = vp.a2 ; ext = vp.ext ;+ en2 = vp.en2 ; ea2 = vp.ea2; eext = vp.eext } ;+ PredetAdvF adv = {s = \\_,_ => adv.s ; p = [] ; a = PNoAg} ;+ + QuantPronAQ x = + let utr = x.s ! AF (APosit (Strong (GSg Utr))) Nom ;+ ntr = x.s ! AF (APosit (Strong (GSg Neutr))) Nom ;+ pl = x.s ! AF (APosit (Strong GPl)) Nom + in+ {s =+ table {Sg => \\_,_ => genderForms ("en"++utr) + ("ett"++ntr) ;+ Pl => \\_,_,_ => pl} ;+ sp = table {Sg => \\_,_ => genderForms utr ntr;+ Pl => \\_,_,_ => pl};+ det = DDef Indef};++ CompPronAQ x = CompAP (PositA (lin A x)) ; ++ DetPronAD x = lin Det {s,sp = \\_,_ => x.s ! AF (APosit (Strong GPl)) Nom ;+ n = Pl ; det = DDef Indef} ;++ CompPronAD x = CompAP (PositA (lin A x)) ; ++ ComplVAPronAQ v ap = insertObj (\\a => (PositA ap).s ! agrAdjNP a DIndef) (predV v) ;+ ComplVAPronAD v ap = insertObj (\\a => (UseComparA ap).s ! agrAdjNP a DIndef) (predV v) ;++++lin+ FocVP vp np = { s = \\t,a,p => let- subj = np.s ! nominative ;+ subj = np.s ! CommonScand.nominative ; agr = np.a ;- vps = vp.s ! VPFinite t a ;- verb = case <<t,a> : ParamX.Tense * Anteriority> of {- <Pres,Simul> => {fin = "gör" ; inf = vps.inf} - ; --# notpresent- <Past,Simul> => {fin = "gjorde" ; inf = vps.inf} ; --# notpresent- _ => vps --# notpresent- } ;- vfin = verb.fin ;- vinf = verb.inf ;- neg = vp.a1 ! p ;- comp = vp.n2 ! agr ++ vp.a2 ++ vp.ext+ vps = vp.s ! VPFinite t a ; + vf = case <<t,a> : STense * Anteriority> of {+ <SPres,Simul> => vps.fin+ ;<SPast,Simul> => vps.fin; --# notpresent + <_ ,Simul> => vps.inf; --# notpresent+ <SPres,Anter> => vps.inf; --# notpresent+ <SPast,Anter> => vps.inf; --# notpresent+ <_ ,Anter> => (vp.s ! VPFinite SPast Anter).inf --# notpresent+ };+ verb = mkClause subj agr (predV do_V) ; + comp = vp.n2 ! agr ++ vp.a2 ++ vp.ext in- vinf ++ comp ++ vfin ++ subj ++ neg+ vf ++ comp ++ (verb.s ! t ! a ! p ! Inv) ++ vp.a1 ! Pos } ; + oper do_V : V = mkV "göra" "gör" "gör" "gjorde" "gjort" "gjord" ;+ lin+ FocAP ap np = + {s = \\t,a,p => + let vp = UseComp ap ; + vps = vp.s ! VPFinite t a;+ npAgr = np.a in+ vp.n2 ! npAgr ++ vps.fin ++ np.s ! NPNom + ++ negation ! p++ vps.inf }; ++ FocVV vv vp np = + {s = \\t,a,p =>+ let vps = vp.s ! VPInfinit Simul ;+ vvp = UseV vv ;+ vvs = vvp.s ! VPFinite t a ; + always = vp.a1 ! Pos ++ vvp.a1 ! Pos ;+ already = vp.a2 ++ vvp.a2 in+ vps.inf ++ vp.n2 ! np.a ++ vvs.fin ++ np.s ! NPNom + ++ vv.c2.s ++ always ++ negation ! p ++ already ++ vvs.inf+ }; +++lin+ PrepCN prep cn = {s = prep.s ++ cn.s ! Sg ! DIndef ! Nom } ;+ CompoundNomN a b = { s = \\n,d,c => a.s ! Sg ! Indef ! Nom ++ BIND ++ b.s ! n ! d ! c ; g = b.g@@ -38,4 +129,120 @@ g = b.g } ; ++ it8utr_Pron = MorphoSwe.regNP "den" "dess" Utr Sg ;+ + this8denna_Quant = + {s,sp = table {+ Sg => \\_,_ => genderForms ["denna"] ["detta"] ; + Pl => \\_,_,_ => ["dessa"]+ } ;+ det = DDef Indef+ } + ;+++ SupCl np vp pol = let sub = np.s ! nominative ; --# notpresent+ verb = (vp.s ! VPFinite SPres Anter).inf ; --# notpresent+ neg = vp.a1 ! pol.p ++ pol.s ; --# notpresent+ compl = vp.n2 ! np.a ++ vp.a2 ++ vp.ext in --# notpresent+ {s = \\_ => sub ++ neg ++ verb ++ compl }; --# notpresent+ ++ PassV2 v2 = predV (depV v2);++ PassV2Be v = insertObj + (\\a => v.s ! VI (VPtPret (agrAdjNP a DIndef) Nom)) + (predV verbBecome) ;++ + + AdvComp comp adv = {s = \\agr => adv.s ++ comp.s ! agr} ;+ + PPartAP v2 =+ {s = \\aform => v2.s ! VI (VPtPret aform Nom);+ isPre = True} ; ++ ReflCN num cn = + let g = cn.g ;+ m = cn.isMod ;+ dd = DDef Indef ;+ in lin NP {+ s = \\c => cn.s ! num.n ! dd ! caseNP c ++ num.s ! g ; + a = agrP3 (ngen2gen g) num.n -- ?+ } ;++ ReflSlash vp np = let vp_l = lin VPSlash vp ;+ np_l = lin NP np ;+ obj = vp.n3 ! np.a in+ lin VP (insertObjPost (\\a => vp.c2.s ++ reflForm a np.a ++ np.s ! NPNom++obj) vp) ; +++++ oper reflForm : Agr -> Agr -> Str = \aSub,aObj ->+ case <aSub.p,aObj.g,aObj.n> of {+ <P3,Neutr,Sg> => "sitt" ;+ <P3,Utr ,Sg> => "sin" ;+ <P3,_ ,Pl> => "sina" ;+ _ => reflGenPron aSub.p aSub.n aObj.n aObj.g};+ + oper reflGenPron : Person -> (subnum,objnum : ParadigmsSwe.Number)+ -> NGender -> Str =+ \p,subnum,objnum,g -> let pn = getPronoun p subnum+ in pn.s ! NPPoss (gennum g objnum) Nom ;++++ + this_NP : Str -> Gender -> Number -> NP =+ \denna,g,n -> lin NP {s = table {NPPoss gn c => denna+"s";+ _ => denna};+ a = agrP3 g n};++ getPronoun : Person -> ParadigmsSwe.Number -> Pron = + \p,n -> case <p,n> of {+ <P1,Sg> => i_Pron ;+ <P2,Sg> => youSg_Pron ;+ <P3,Sg> => he_Pron ;+ <P1,Pl> => we_Pron ;+ <P2,Pl> => youPl_Pron ;+ <P3,Pl> => they_Pron } ;+++----------------- Predeterminers,Quantifiers,Determiners++ lin+ bara_AdvFoc = mkAdv "bara" ;++ sadana_PronAQ = mkA "sådan" ;+ fler_PronAD = mkA "flera" "flera" "flera" "fler" "flest" ;++ hela_Predet = {s = \\_,_ => "hela" ; p = [] ; a = PNoAg} ;+ samma_Predet = {s = \\_,_ => "samma" ; p = [] ; a = PNoAg} ;++ sjaelva_Quant = {s = \\_,_,_,_ => "själva" ;+ sp = \\_,_,_,_ => variants {};+ det = DDef Def } ;++ vardera_Det = {s,sp = \\_,_ => "vardera" ; n = Sg ; det = DDef Indef};+ ena_Det = {s = \\_,_ => "ena" ; + sp = \\_ => genderForms ["den ena"] ["det ena"] ; + n = Sg ; det = DDef Def};+ baegge_Det = {s,sp = \\_,_ => "bägge" ; n = Pl ; det = DDef Def} ;+ baada_Det = {s,sp = \\_,_ => "båda" ; n = Pl ; det = DDef Def} ;+ varannan_Det = {s,sp = \\_,_ => "varannan" ; n = Sg ; det = DDef Indef} ;+ somliga_Det = {s,sp = \\_,_ => "somliga" ; n = Pl ; det = DDef Indef} ;+ dylika_Det = {s,sp = \\_,_ => "dylika" ; n = Pl ; det = DDef Indef} ;+ oovriga_Det = {s,sp = \\_,_ => "övriga" ; n = Pl ; det = DDef Indef} ;+ samtliga_Det = {s,sp = \\_,_ => "samtliga" ; n = Pl ; det = DDef Indef} ;+ aatskilliga_Det = {s,sp = \\_,_ => "åtskilliga" ; n = Pl ; det = DDef Indef} ;+ varenda_Det = {s = \\_ => genderForms ["varenda"] ["vartenda"] ; + sp = \\_ => genderForms ["varenda en"] ["vartenda ett"] ; + n = Sg ; det = DDef Indef};++ noll_Det = {s,sp = \\_,_ => "noll" ; n = Pl ; det = DDef Indef};++ }+
@@ -1,11 +1,89 @@+--# -path=.:../scandinavian:../abstract:../common:prelude -- Structures special for Swedish. These are not implemented in other -- Scandinavian languages. -abstract ExtraSweAbs = ExtraScandAbs ** {+abstract ExtraSweAbs = ExtraScandAbs -[FocAP] ** { +cat ReflNP ; + PronAD ; -- relational pronouns which can act like adjectives and+ -- determiners. 'fler'+ PronAQ ; -- relational pronouns which can act like adjectives and+ -- quantifiers. 'sådan'+ ++ AdvFoc ; -- foucsing adverbs 'bara'. acts as predeterminers, normal+ -- adverbs or before finite verb+ + RelVSCl ; + fun+ + RelVS : S -> RelVSCl -> S ; -- hon sover, vilket vi vet+ RelSlashVS : Temp -> Pol -> VS -> NP -> RelVSCl ; -- vilket vi vet++ FocAP : Comp -> NP -> Foc ;++ DetNP_utr : Det -> NP ; -- den här++ AdvFocVP : AdvFoc -> VP -> VP ; -- (han) bara log+ PredetAdvF : AdvFoc -> Predet ; -- bara (barn), inte ens (katten)+++ DetPronAD : PronAD -> Det ;+ QuantPronAQ : PronAQ -> Quant ;+ CompPronAQ : PronAQ -> Comp ;+ CompPronAD : PronAD -> Comp ; + ComplVAPronAQ : VA -> PronAQ -> VP ; -- de blev sådana+ ComplVAPronAD : VA -> PronAD -> VP ; -- de blev fler++ CompoundNomN : N -> N -> N ; -- fot+boll CompoundGenN : N -> N -> N ; -- yrkes+musiker CompoundAdjN : A -> N -> N ; -- vit+vin+ + it8utr_Pron : Pron ;+ this8denna_Quant : Quant ;+ + ReflCN : Num -> CN -> ReflNP ;+ ReflSlash : VPSlash -> ReflNP -> VP ;+ + + SupCl : NP -> VP -> Pol -> S ; -- när jag sovit+ + + + PassV2 : V2 -> VP ; -- äts + PassV2Be : V2 -> VP ; -- bli äten+ + + PPartAP : V2 -> AP ; -- (han är) äten+ ++ AdvComp : Comp -> Adv -> Comp ; -- jag är redan här+++----------------- Predeterminers,Quantifiers,Determiners++ bara_AdvFoc : AdvFoc ;++ sadana_PronAQ : PronAQ ;+ fler_PronAD : PronAD ;+ hela_Predet : Predet ; --hela horder/hela katten + sjaelva_Quant : Quant ; -- själva kungen/själva öronen + samma_Predet : Predet ; -- samma katter/samma öra + varenda_Det : Det ;+ vardera_Det : Det ;+ ena_Det : Det ;+ baegge_Det : Det ;+ baada_Det : Det ;+ varannan_Det : Det ;+ somliga_Det : Det ;+ dylika_Det : Det ;+ oovriga_Det : Det ;+ aatskilliga_Det : Det ;+ samtliga_Det : Det ;++ noll_Det : Det ;+ }
@@ -11,10 +11,10 @@ RelativeSwe, ConjunctionSwe, PhraseSwe,- TextX,+ TextX -[Tense,Temp], IdiomSwe, StructuralSwe,- TenseX+ TenseSwe ** { flags startcat = Phr ; unlexer = text ; lexer = text ;
@@ -12,7 +12,7 @@ GenericCl vp = mkClause "man" (agrP3 utr Sg) vp ; CleftNP np rs = mkClause "det" (agrP3 neutr Sg) - (insertObj (\\_ => np.s ! rs.c ++ rs.s ! np.a) (predV verbBe)) ;+ (insertObj (\\_ => np.s ! rs.c ++ rs.s ! np.a ! RNom) (predV verbBe)) ; CleftAdv ad s = mkClause "det" (agrP3 neutr Sg) (insertObj (\\_ => ad.s ++ s.s ! Sub) (predV verbBe)) ;
@@ -88,9 +88,13 @@ mkN : (nyckel,nycklar : Str) -> N ; -- singular and plural suffice for most nouns --- In the worst case, four forms are needed.+-- In the worst case, four forms are needed, - mkN : (museum,museet,museer,museerna : Str) -> N -- worst case for nouns+ mkN : (museum,museet,museer,museerna : Str) -> N ; -- worst case for nouns++-- and perhaps a gender.++ mkN : (museum,museet,museer,museerna : Str) -> Gender -> N -- even worse case for nouns } ; -- All the functions above work quite as well to form *compound nouns*,@@ -313,7 +317,8 @@ mkN : (apa : Str) -> N = regN ; mkN : Str -> Gender -> N = regGenN ; mkN : (nyckel, nycklar : Str) -> N = mk2N ; - mkN : (museum,museet,museer,museerna : Str) -> N = mk4N+ mkN : (museum,museet,museer,museerna : Str) -> N = mk4N ;+ mkN : (museum,museet,museer,museerna : Str) -> Gender -> N = mk5N } ; mk4N : (museum,museet,museer,museerna : Str) -> N = \apa,apan,apor,aporna -> {@@ -322,6 +327,11 @@ "n" => Utr ; _ => Neutr }+ } ** {lock_N = <>} ;++ mk5N : (museum,museet,museer,museerna : Str) -> Gender -> N = \apa,apan,apor,aporna,g -> {+ s = nounForms apa apan apor aporna ;+ g = g } ** {lock_N = <>} ; regN : Str -> N = \bil -> regGenN bil g where {
@@ -1,3 +1,2 @@-instance ResSwe of ResScand = DiffSwe ** open CommonScand, Prelude in {+instance ResSwe of ResScand = DiffSwe ** open CommonScand, Prelude in { } ;-
@@ -28,7 +28,7 @@ everybody_NP = regNP "alla" "allas" Utr Pl ; every_Det = { s = \\_,_ => "varje" ; - sp = \\_,_ => "var och en" ; ----+ sp = \\_ => genderForms ["var och en"] ["vart och ett"] ; ---- n = Sg ; det = DIndef } ;
@@ -0,0 +1,3 @@+concrete TenseSwe of Tense = CatSwe, TenseX [Ant,Pol,AAnter,ASimul,PNeg,PPos] ** + TenseScand with+ (ResScand = ResSwe) ;
@@ -4,33 +4,22 @@ PositA a = a ; --- ComparA a np = {--- s = \\_ => a.s ! AAdj Compar ++ "than" ++ np.s ! Nom ; --- isPre = False--- } ;-------- $SuperlA$ belongs to determiner syntax in $Noun$.------ ComplA2 a np = {--- s = \\_ => a.s ! AAdj Posit ++ a.c2 ++ np.s ! Acc ; --- isPre = False--- } ;------ ReflA2 a = {--- s = \\ag => a.s ! AAdj Posit ++ a.c2 ++ reflPron ! ag ; --- isPre = False--- } ;------ SentAP ap sc = {--- s = \\a => ap.s ! a ++ sc.s ; --- isPre = False--- } ;------ AdAP ada ap = {--- s = \\a => ada.s ++ ap.s ! a ;--- isPre = ap.isPre--- } ;------ UseA2 a = a ;---+ ComparA a np = mkAdj (thbind a.s kwaa_s np.s) ;++ UseComparA a = mkAdj (thbind a.s kwaa_s) ;++ AdjOrd ord = ord ;++ CAdvAP ad ap np = mkAdj (thbind ap.s ad.s ad.p np.s) ;++ ComplA2 a np = mkAdj (thbind a.s a.c2 np.s) ;++ ReflA2 a = mkAdj (thbind a.s a.c2 reflPron) ;++ SentAP ap sc = thbind ap sc ;++ AdAP ada ap = thbind ap ada ;++ UseA2 a = a ;+ }
@@ -4,20 +4,16 @@ lin PositAdvAdj a = a ; --- ComparAdvAdj cadv a np = {--- s = cadv.s ++ a.s ! AAdv ++ "than" ++ np.s ! Nom--- } ;--- ComparAdvAdjS cadv a s = {--- s = cadv.s ++ a.s ! AAdv ++ "than" ++ s.s--- } ;------ PrepNP prep np = {s = prep.s ++ np.s ! Acc} ;------ AdAdv = cc2 ;------ SubjS = cc2 ;--- AdvSC s = s ; --- this rule give stack overflow in ordinary parsing------ AdnCAdv cadv = {s = cadv.s ++ "than"} ;---+ PrepNP prep np = thbind prep np ;++ ComparAdvAdj cadv a np = ss (thbind a.s cadv.s cadv.p np.s) ;++ ComparAdvAdjS cadv a s = ss (thbind a.s cadv.s cadv.p s.s) ;++ AdAdv adv ad = thbind ad adv ;++ SubjS x y = thbind x y ;++ AdnCAdv cadv = ss (thbind cadv.s conjThat) ; -----+ }
@@ -8,70 +8,69 @@ S = {s : Str} ; QS = {s : QForm => Str} ;--- RS = {s : Agr => Str ; c : Case} ; -- c for it clefts-------- Sentence---- Cl = {s : Polarity => Str} ;--- Slash = {--- s : Tense => Anteriority => CPolarity => Order => Str ;--- c2 : Str--- } ;+ RS = {s : Str} ;+ SSlash = {s : Str ; c2 : Str} ;++-- Sentence++ Cl = ResTha.Clause ; -- {s : Polarity => Str} ;+ ClSlash = {s : Polarity => Str ; c2 : Str} ; Imp = {s : Polarity => Str} ;-------- Question---++-- Question+ QCl = {s : Polarity => Str} ;--- IP = {s : Case => Str ; n : Number} ;--- IComp = {s : Str} ; --- IDet = {s : Str ; n : Number} ;-------- Relative------ RCl = {s : Tense => Anteriority => CPolarity => Agr => Str ; c : Case} ;--- RP = {s : RCase => Str ; a : RAgr} ;-------- Verb---+ IP = {s : Str} ;+ IComp = {s : Str} ; + IDet, IQuant = Determiner ;++-- Relative++ RCl = {s : Polarity => Str} ;+ RP = {s : Str} ;++-- Verb+ VP = ResTha.VP ; - Comp = ResTha.VP ; -------- Adjective------ AP = {s : Agr => Str ; isPre : Bool} ; ---+ Comp = {s : Polarity => Str} ;+ VPSlash = ResTha.VP ** {c2 : Str} ;++-- Adjective++ AP = ResTha.Adj ;+ -- Noun---- CN = Noun ;- NP, Pron = SS ;- Det = Determiner ; --- Predet, Ord = {s : Str} ;- Num, Quant = {s : Str ; hasC : Bool} ; + CN = ResTha.Noun ;+ NP, Pron = ResTha.NP ;+ Det, Quant = ResTha.Determiner ; + Predet = {s1,s2 : Str} ;+ Ord = {s : Str} ;+ Num = {s : Str ; hasC : Bool} ;+ -- Numeral - Numeral = {s : Str} ;+ Numeral, Card, Digits = {s : Str} ; ----- Structural------ Conj = {s : Str ; n : Number} ;--- DConj = {s1,s2 : Str ; n : Number} ;--- Subj = {s : Str} ;--- Prep = {s : Str} ;---+-- Structural++ Conj = {s1,s2 : Str} ;+ Subj = {s : Str} ;+ Prep = {s : Str} ;+ -- Open lexical classes, e.g. Lexicon V, VS, VQ, VA = Verb ; - V2, V2A = Verb ** {c2 : Str} ;- V3 = Verb ** {c2, c3 : Str} ;+ V2, V2Q, V2S = Verb ** {c2 : Str} ;+ V3, V2A, V2V = Verb ** {c2, c3 : Str} ; VV = VVerb ;------ A = {s : AForm => Str} ;--- A2 = {s : AForm => Str ; c2 : Str} ;---- N = Noun ;--- N2 = {s : Number => Case => Str} ** {c2 : Str} ;--- N3 = {s : Number => Case => Str} ** {c2,c3 : Str} ;--- PN = {s : Case => Str} ;---++ A = ResTha.Adj ;+ A2 = ResTha.Adj ** {c2 : Str} ;++ N = ResTha.Noun ;+ N2 = ResTha.Noun ** {c2 : Str} ;+ N3 = ResTha.Noun ** {c2,c3 : Str} ;+ PN = ResTha.NP ;+ }
@@ -1,45 +1,34 @@---concrete ConjunctionTha of Conjunction = --- CatTha ** open ResTha, Coordination, Prelude in {------ flags optimize=all_subs ;------ lin------ ConjS = conjunctSS ;--- DConjS = conjunctDistrSS ;------ ConjAdv = conjunctSS ;--- DConjAdv = conjunctDistrSS ;------ ConjNP conj ss = conjunctTable Case conj ss ** {--- a = {n = conjNumber conj.n ss.a.n ; p = ss.a.p}--- } ;--- DConjNP conj ss = conjunctDistrTable Case conj ss ** {--- a = {n = conjNumber conj.n ss.a.n ; p = ss.a.p}--- } ;------ ConjAP conj ss = conjunctTable Agr conj ss ** {--- isPre = ss.isPre--- } ;--- DConjAP conj ss = conjunctDistrTable Agr conj ss ** {--- isPre = ss.isPre--- } ;-------- These fun's are generated from the list cat's.------ BaseS = twoSS ;--- ConsS = consrSS comma ;--- BaseAdv = twoSS ;--- ConsAdv = consrSS comma ;--- BaseNP x y = twoTable Case x y ** {a = conjAgr x.a y.a} ;--- ConsNP xs x = consrTable Case comma xs x ** {a = conjAgr xs.a x.a} ;--- BaseAP x y = twoTable Agr x y ** {isPre = andB x.isPre y.isPre} ;--- ConsAP xs x = consrTable Agr comma xs x ** {isPre = andB xs.isPre x.isPre} ;------ lincat--- [S] = {s1,s2 : Str} ;--- [Adv] = {s1,s2 : Str} ;--- [NP] = {s1,s2 : Case => Str ; a : Agr} ;--- [AP] = {s1,s2 : Agr => Str ; isPre : Bool} ;------}+concrete ConjunctionTha of Conjunction = CatTha ** open Prelude, Coordination in {++ lin++ ConjS = conjunctDistrSS ;+ ConjAdv = conjunctDistrSS ;+ ConjNP = conjunctDistrSS ;+ ConjAP = conjunctDistrSS ;+ ConjRS = conjunctDistrSS ;++-- These fun's are generated from the list cat's.++ BaseS = twoSS ;+ ConsS = consrSS thcomma ;+ BaseAdv = twoSS ;+ ConsAdv = consrSS thcomma ;+ BaseNP = twoSS ;+ ConsNP = consrSS thcomma ;+ BaseAP = twoSS ;+ ConsAP = consrSS thcomma ;+ BaseRS = twoSS ;+ ConsRS = consrSS thcomma ;++ lincat+ [S] = {s1,s2 : Str} ;+ [Adv] = {s1,s2 : Str} ;+ [NP] = {s1,s2 : Str} ;+ [AP] = {s1,s2 : Str} ;+ [RS] = {s1,s2 : Str} ;++ oper+ thcomma : Str = [] ; ---- should be a space++}
@@ -8,12 +8,12 @@ NumeralTha, SentenceTha, QuestionTha,--- RelativeTha,--- ConjunctionTha,+ RelativeTha,+ ConjunctionTha, PhraseTha,--- TextX,+ TextTha, StructuralTha,--- IdiomTha+ IdiomTha, TenseX ** {
@@ -1,30 +1,33 @@---concrete IdiomTha of Idiom = CatTha ** open Prelude, ResTha in {------ flags optimize=all_subs ;------ lin--- ImpersCl vp = mkClause "it" (agrP3 Sg) vp ;--- GenericCl vp = mkClause "one" (agrP3 Sg) vp ;------ CleftNP np rs = mkClause "it" (agrP3 Sg) --- (insertObj (\\_ => rs.s ! np.a)--- (insertObj (\\_ => np.s ! rs.c) (predAux auxBe))) ;------ CleftAdv ad s = mkClause "it" (agrP3 Sg) --- (insertObj (\\_ => conjThat ++ s.s)--- (insertObj (\\_ => ad.s) (predAux auxBe))) ;------ ExistNP np = --- mkClause "there" (agrP3 np.a.n) --- (insertObj (\\_ => np.s ! Acc) (predAux auxBe)) ;------ ExistIP ip = --- mkQuestion (ss (ip.s ! Nom)) --- (mkClause "there" (agrP3 ip.n) (predAux auxBe)) ;------ ProgrVP vp = insertObj (\\a => vp.ad ++ vp.prp ++ vp.s2 ! a) (predAux auxBe) ;------ ImpPl1 vp = {s = "let's" ++ infVP True vp {n = Pl ; p = P1}} ;------}---+concrete IdiomTha of Idiom = CatTha ** open Prelude, ResTha in {++ lin+ ImpersCl vp = mkClause (mkNP []) vp ;+ GenericCl vp = mkClause (mkNP []) vp ; ---- ??++ CleftNP np rs = {s = \\q,p => thbind (case p of{ ---- ??+ Pos => thbind np.s pen_s rs.s ;+ Neg => thbind np.s may_s chay_s rs.s+ }) (case q of {ClQuest => m'ay_s ; _ => []})+ } ;++ CleftAdv ad s = {s = \\q,p => thbind (negation p) ad.s s.s (case q of {ClQuest => m'ay_s ; _ => []})} ; ---- ??++ ExistNP np = {+ s = \\q,p => thbind (case p of {+ Pos => thbind mii_s np.s ;+ Neg => thbind may_s mii_s np.s+ }) (case q of {ClQuest => m'ay_s ; _ => []})+ } ;++ ExistIP ip = mkPolClause ip (predV (regV [])) ; ----++ ProgrVP vp = {+ s = \\p => thbind kam_s lag2_s (vp.s ! p) ;+ e = vp.e+ } ;++ ImpPl1 vp = ss (infVP vp) ; ----++}++
@@ -1,368 +1,365 @@---# -path=.:prelude- concrete LexiconTha of Lexicon = CatTha ** - open StringsTha, ResTha, Prelude in {+ open ParadigmsTha, ResTha, Prelude in { +-- (c) AR 2011 in collaboration with Chotiros Kairoje, under LGPL+ flags - optimize=values ;+ coding = utf8 ; lin--- airplane_N = regN "airplane" ;--- answer_V2S = mkV2S (regV "answer") toP ;--- apartment_N = regN "apartment" ;--- apple_N = regN "apple" ;--- art_N = regN "art" ;--- ask_V2Q = mkV2Q (regV "ask") noPrep ;--- baby_N = regN "baby" ;--- bad_A = mkADeg "bad" "badly" "worse" "worst" ;--- bank_N = regN "bank" ;--- beautiful_A = regADeg "beautiful" ;--- become_VA = mkVA (irregV "become" "became" "become") ;+ add_V3 = mkV3 (mkV "เพิ่ม") ;+ airplane_N = mkN (thword "เครื่อง" "บิน") "ลำ" ;+ already_Adv = mkAdv (thword "เรียบ" "ร้อย") ;+ animal_N = animalN (thword "สัตว์") ;+ answer_V2S = mkV2S (regV "ตอบ") [] ; ---- prep+ apartment_N = mkN (thword "ห้อง" "เช่า")"ห้อง" ;+ apple_N = mkN (thbind "แอป" "เปิ้ล") "ลูก" ;+ art_N = mkN (thword "ศิล" "ปะ") ;+ ashes_N = mkN (thword "เถ้า") ;+ ask_V2Q = regV "ถาม" ** {c2 = []} ;+ at_Prep = mkPrep "ที่" ;+ baby_N = mkN (thword "เด็ก" "ทา" "รก") "คน" ;+ back_N = mkN (thword "หลัง") ;+ bad_A = mkA (thword "เลว") ;+ bank_N = placeN (thword "ธนา" "คาร") ;+ bark_N = mkN (thword "เปลือก") ;+ beautiful_A = mkA "สวย" ;+ become_VA = mkV (thword "กลาย" "เป็น") ; -- pen beer_N = mkN biar_s kew_s ; --- beg_V2V = mkV2V (regDuplV "beg") noPrep toP ;- big_A = ss yay_s ;--- bike_N = regN "bike" ;--- bird_N = regN "bird" ;--- black_A = regADeg "black" ;--- blue_A = regADeg "blue" ;--- boat_N = regN "boat" ;- book_N = mkN (nag_s ++ svv_s) lem_s ;--- boot_N = regN "boot" ;--- boss_N = regN "boss" ;--- boy_N = regN "boy" ;--- bread_N = regN "bread" ;--- break_V2 = dirV2 (irregV "break" "broke" "broken") ;--- broad_A = regADeg "broad" ;--- brother_N2 = regN2 "brother" ;--- brown_A = regADeg "brown" ;--- butter_N = regN "butter" ;--- buy_V2 = dirV2 (irregV "buy" "bought" "bought") ;--- camera_N = regN "camera" ;--- cap_N = regN "cap" ;--- car_N = regN "car" ;--- carpet_N = regN "carpet" ;--- cat_N = regN "cat" ;--- ceiling_N = regN "ceiling" ;--- chair_N = regN "chair" ;--- cheese_N = regN "cheese" ;--- child_N = mk2N "child" "children" ;--- church_N = regN "church" ;--- city_N = regN "city" ;--- clean_A = regADeg "clean" ;--- clever_A = regADeg "clever" ;--- close_V2 = dirV2 (regV "close") ;--- coat_N = regN "coat" ;--- cold_A = regADeg "cold" ;--- come_V = (irregV "come" "came" "come") ;--- computer_N = regN "computer" ;--- country_N = regN "country" ;--- cousin_N = regN "cousin" ;--- cow_N = regN "cow" ;--- die_V = (regV "die") ;--- dirty_A = regADeg "dirty" ;--- distance_N3 = mkN3 (regN "distance") fromP toP ;--- doctor_N = regN "doctor" ;--- dog_N = regN "dog" ;--- door_N = regN "door" ;- drink_V2 = dirV2 (regV dvm_s) ;--- easy_A2V = mkA2V (regA "easy") forP ;--- eat_V2 = dirV2 (irregV "eat" "ate" "eaten") ;--- empty_A = regADeg "empty" ;--- enemy_N = regN "enemy" ;--- factory_N = regN "factory" ;--- father_N2 = regN2 "father" ;--- fear_VS = mkVS (regV "fear") ;--- find_V2 = dirV2 (irregV "find" "found" "found") ;--- fish_N = mk2N "fish" "fish" ;--- floor_N = regN "floor" ;--- forget_V2 = dirV2 (irregDuplV "forget" "forgot" "forgotten") ;--- fridge_N = regN "fridge" ;--- friend_N = regN "friend" ;--- fruit_N = regN "fruit" ;--- fun_AV = mkAV (regA "fun") ;--- garden_N = regN "garden" ;--- girl_N = regN "girl" ;--- glove_N = regN "glove" ;--- gold_N = regN "gold" ;--- good_A = mkADeg "good" "well" "better" "best" ;- go_V = regV pay_s ;--- green_A = regADeg "green" ;--- harbour_N = regN "harbour" ;--- hate_V2 = dirV2 (regV "hate") ;--- hat_N = regN "hat" ;--- have_V2 = dirV2 (mkV "have" "has" "had" "had" "having") ;--- hear_V2 = dirV2 (irregV "hear" "heard" "heard") ;--- hill_N = regN "hill" ;--- hope_VS = mkVS (regV "hope") ;--- horse_N = regN "horse" ;--- hot_A = duplADeg "hot" ;+ beg_V2V = regV "ขอ" ** {c2 = [] ; c3 = "ให้"} ; --- hay as prep of VP+ belly_N = mkN (thword "พุง") ;+ big_A = mkA (thword "ใหญ่") ;+ bike_N = mkN (thword "จักร" "ยาน") "คัน" ;+ bird_N = mkN (thword "นก") "ตัว" ;+ bite_V2 = mkV2 (thword "กัด") ;+ black_A = mkA (thword "ดำ") ;+ blood_N = mkN (thword "เลือด") ;+ blow_V = mkV (thword "พัด") ;+ blue_A = mkA (thword "น้ำ" "เงิน") ; --- (thword "สี" "น้ำ" "เงิน") ;+ boat_N = mkN (thword "เรือ") "ลำ" ;+ bone_N = mkN (thword "กระ" "ดูก") ;+ book_N = mkN (thword nag_s svv_s) lem_s ;+ boot_N = mkN (thword "รอง" "เท้า" "บูท") "คู่";+ boss_N = mkN (thword "เจ้า" "นาย")" คน" ;+ boy_N = mkN (thword "เด็ก" "ผู้" "ชาย")" คน";+ bread_N = mkN (thword "ขนม" "ปัง") "ห่อ" ;+ break_V2 = mkV2 "แตกหัก" ;+ breast_N = mkN (thword "หน้า" "อก") ;+ breathe_V = mkV (thword "หาย" "ใจ") ;+ broad_A = mkA "กว้าง" ;+ brother_N2 = mkN2 (personN (thword "พี่" "ชาย")) poss ;+ brown_A = mkA (thword "สี" "น้ำ" "ตาล") ;+ burn_V = mkV (thword "เผา") ;+ butter_N = mkN (thword "เนย") "สด" ; ----?+ buy_V2 = mkV2 "ซื้อ" ;+ camera_N = mkN "กล้อง" "ตัว" ;+ cap_N = mkN "หมวก" ;+ car_N = mkN "รถ" "คัน" ;+ carpet_N = mkN "พรม" "ผืน" ;+ cat_N = mkN "แมว" "ตัว" ;+ ceiling_N = mkN (thword "เพ" "ดาน") ; ----?+ chair_N = mkN (thword "เก้า" "อี้") "ตัว" ;+ cheese_N = mkN (thword "เนย" "แข็ง") "ก้อน" ; + child_N = personN (thword "ลูก") ; --- personN (thword "เด็ก") ;+ church_N = placeN "โบสถ์" ;+ city_N = mkN "เมือง" "เมือง" ;+ clean_A = mkA (thword "ทำ" "ความ" "สะ" "อาด") ;+ clever_A = mkA "ฉลาด" ;+ close_V2 = mkV2 (mkV "ปิด") ;+ cloud_N = mkN (thword "เมฆ") ;+ coat_N = mkN (thword "เสื้อ" "คลุม") "ตัว" ;+ cold_A = mkA (thword "หนาว") ;+ come_V = mkV (thword "มา") ;+ computer_N = mkN (thword "คอม" "พิว" "เตอร์") "เครื่อง" ;+ correct_A = mkA (thword "ถูก") ;+ count_V2 = mkV2 (thword "นับ") ;+ country_N = placeN (thword "ประ" "เทศ") ;+ cousin_N = mkN "ญาติ" "คน" ;+ cow_N = mkN "วัว" "ตัว" ;+ cut_V2 = mkV2 (thword "ตัด") ;+ day_N = mkN (thword "กลาง" "วัน") ;+ die_V = mkV (thword "ตาย") ;+ dig_V = mkV (thword "ขุด") ;+ dirty_A = mkA (thword "สก" "ปรก") ;+ distance_N3 = mkN3 (mkN (thword "ระ" "ยะ" "ทาง")) "จาก" "ถืง" ;+ do_V2 = mkV2 (mkV "ทำ") ; ----? "ทำ" "ทำ" "ทำ" "กำลังทำ") ;+ doctor_N = mkN "หมอ" "คน";+ dog_N = animalN (thword "หมา") ;+ door_N = mkN "ประตู" "บาน" ;+ drink_V2 = mkV2 (thword "ดื่ม") ;+ dry_A = mkA (thword "แห้ง") ;+ dull_A = mkA (thword "ทื่อ") ;+ dust_N = mkN (thword "ฝุ่น") ;+ ear_N = mkN (thword "หู") ;+ earth_N = mkN (thword "โลก") ;+ easy_A2V = mkA "ง่าย" ** {c2 = []} ; ----?+ eat_V2 = mkV2 (thword "กิน") ;+ egg_N = mkN (thword "ไข่") "ฟอง" ;+ empty_A = mkA (thword "ว่าง" "เปล่า") ;+ enemy_N = personN (thword "ศัต" "รู") ; ----?+ eye_N = mkN (thword "ตา") ;+ factory_N = mkN (thword "โรง" "งาน") "โรง" ;+ fall_V = mkV (thword "ตก") ;+ far_Adv = ss (thword "ไกล") ;+ fat_N = mkN (thword "ไข" "มัน") ;+ father_N2 = mkN2 (personN (thword "พ่อ")) poss ;+ fear_N = mkN (thword "ความ" "กลัว") ;+ fear_V2 = mkV2 "กลัว";+ fear_VS = mkVS (regV "กลัว") ;+ feather_N = mkN (thword "ขน" "นก") ;+ fight_V2 = mkV2 (thword "สู้") ;+ find_V2 = mkV2 "หา" ;+ fingernail_N = mkN (thword "เล็บ") ;+ fire_N = mkN (thword "ไฟ") ;+ fish_N = animalN (thword "ปลา") ;+ float_V = mkV (thword "ลอย") ;+ floor_N = mkN "พื้น" ; ----?+ flow_V = mkV (thword "ไหล") ;+ flower_N = mkN (thword "ดอกไม้") "ดอก" ;+ fly_V = mkV (thword "บิน") ;+ fog_N = mkN (thword "หมอก") ;+ foot_N = mkN (thword "เท้า") " ข้าง" ;+----? forP = mkPrep "สำหรับ" ;+ forest_N = placeN (thword "ป่า") ;+ forget_V2 = mkV2 "ลืม" ;+ freeze_V = mkV (thword "แข็ง") ;+ fridge_N = mkN (thword "ตู้" "เย็น") "ตู้" ;+ friend_N = personN "เพี่อน" ;+ fruit_N = mkN (thword "ผล" "ไม้") ;+ full_A = mkA (thword "เต็ม") ;+ fun_AV = mkA "สนุก" ;+ garden_N = placeN "สวน" ;+ girl_N = mkN (thword "เด็ก" "ผู้" "หญิง") "คน" ;+ give_V3 = mkV3 "ให้" ;+ glove_N = mkN "ถุง" "มือ" ; ----?+ go_V = mkV pay_s ;+ gold_N = mkN "ทอง" ;+ good_A = mkA "ดี" ;+ grammar_N = mkN (thword "ไวย" "กรณ์") ; ----?+ grass_N = mkN "หญ้า" ;+ green_A = mkA "เขียว" ; --- (thword "สี" "เขียว") ;+ guts_N = mkN (thword "ไส้") ;+ hair_N = mkN (thword "ผม") ;+ hand_N = mkN (thword "มือ") ;+ harbour_N = placeN (thword "ท่า" "เรือ") ; ----?+ hat_N = mkN "หมวก" "ใบ" ;+ hate_V2 = mkV2 "เกลียด" ;+ head_N = mkN (thword "หัว") ;+ hear_V2 = mkV2 (thword "ได้" "ยิน") ;+ heart_N = mkN (thword "ใจ") ;+ heavy_A = mkA (thword "หนัก") ;+ hill_N = placeN (thword "เนิน" "เขา") ;+ hit_V2 = mkV2 (thword "ตี") ;+ hold_V2 = mkV2 (thword "รั้ง") ;+ hope_VS = mkVS (regV "หวัง") ;+ horn_N = mkN (thword "เขา") ;+ horse_N = mkN "ม้า" " ตัว" ;+ hot_A = mkA "ร้อน" ; house_N = mkN baan_s lag_s ;--- important_A = compoundADeg (regA "important") ;--- industry_N = regN "industry" ;--- iron_N = regN "iron" ;--- king_N = regN "king" ;--- know_V2 = dirV2 (irregV "know" "knew" "known") ;--- lake_N = regN "lake" ;--- lamp_N = regN "lamp" ;--- learn_V2 = dirV2 (regV "learn") ;--- leather_N = regN "leather" ;--- leave_V2 = dirV2 (irregV "leave" "left" "left") ;--- like_V2 = dirV2 (regV "like") ;--- listen_V2 = mkV2 (regV "listen") toP ;--- live_V = (regV "live") ;- john_PN = ss "cn" ;--- long_A = regADeg "long" ;--- lose_V2 = dirV2 (irregV "lose" "lost" "lost") ;--- love_N = regN "love" ;- love_V2 = dirV2 (regV rak_s) ;--- man_N = mk2N "man" "men" ;--- married_A2 = mkA2 (regA "married") toP ;--- meat_N = regN "meat" ;--- milk_N = regN "milk" ;--- moon_N = regN "moon" ;--- mother_N2 = regN2 "mother" ;--- mountain_N = regN "mountain" ;--- music_N = regN "music" ;--- narrow_A = regADeg "narrow" ;--- new_A = regADeg "new" ;--- newspaper_N = regN "newspaper" ;--- oil_N = regN "oil" ;--- old_A = regADeg "old" ;--- open_V2 = dirV2 (regV "open") ;--- paint_V2A = mkV2A (regV "paint") noPrep ;--- paper_N = regN "paper" ;--- paris_PN = regPN "Paris" ;--- peace_N = regN "peace" ;--- pen_N = regN "pen" ;--- planet_N = regN "planet" ;--- plastic_N = regN "plastic" ;--- play_V2 = dirV2 (regV "play") ;--- policeman_N = regN "policeman" ;--- priest_N = regN "priest" ;--- probable_AS = mkAS (regA "probable") ;--- queen_N = regN "queen" ;--- radio_N = regN "radio" ;--- rain_V0 = mkV0 (regV "rain") ;--- read_V2 = dirV2 (irregV "read" "read" "read") ;--- red_A = duplADeg "red" ;--- religion_N = regN "religion" ;--- restaurant_N = regN "restaurant" ;--- river_N = regN "river" ;--- rock_N = regN "rock" ;--- roof_N = regN "roof" ;--- rubber_N = regN "rubber" ;--- run_V = (irregDuplV "run" "ran" "run") ;--- say_VS = mkVS (irregV "say" "said" "said") ;--- school_N = regN "school" ;--- science_N = regN "science" ;--- sea_N = regN "sea" ;--- seek_V2 = dirV2 (irregV "seek" "sought" "sought") ;--- see_V2 = dirV2 (irregV "see" "saw" "seen") ;--- sell_V3 = dirV3 (irregV "sell" "sold" "sold") toP ;--- send_V3 = dirV3 (irregV "send" "sent" "sent") toP ;--- sheep_N = mk2N "sheep" "sheep" ;--- ship_N = regN "ship" ;--- shirt_N = regN "shirt" ;--- shoe_N = regN "shoe" ;--- shop_N = regN "shop" ;--- short_A = regADeg "short" ;--- silver_N = regN "silver" ;--- sister_N = regN "sister" ;- sleep_V = resV noon_s lap_s ;--- small_A = regADeg "small" ;--- snake_N = regN "snake" ;--- sock_N = regN "sock" ;--- speak_V2 = dirV2 (irregV "speak" "spoke" "spoken") ;--- star_N = regN "star" ;--- steel_N = regN "steel" ;--- stone_N = regN "stone" ;--- stove_N = regN "stove" ;--- student_N = regN "student" ;--- stupid_A = regADeg "stupid" ;--- sun_N = regN "sun" ;--- switch8off_V2 = dirV2 (partV (regV "switch") "off") ;--- switch8on_V2 = dirV2 (partV (regV "switch") "on") ;--- table_N = regN "table" ;--- talk_V3 = mkV3 (regV "talk") toP aboutP ;--- teacher_N = regN "teacher" ;--- teach_V2 = dirV2 (irregV "teach" "taught" "taught") ;--- television_N = regN "television" ;--- thick_A = regADeg "thick" ;--- thin_A = duplADeg "thin" ;--- train_N = regN "train" ;--- travel_V = (regDuplV "travel") ;--- tree_N = regN "tree" ;--- ---- trousers_N = regN "trousers" ;--- ugly_A = regADeg "ugly" ;--- understand_V2 = dirV2 (irregV "understand" "understood" "understood") ;--- university_N = regN "university" ;--- village_N = regN "village" ;--- wait_V2 = mkV2 (regV "wait") forP ;--- walk_V = (regV "walk") ;--- warm_A = regADeg "warm" ;--- war_N = regN "war" ;--- watch_V2 = dirV2 (regV "watch") ;--- water_N = regN "water" ;--- white_A = regADeg "white" ;--- window_N = regN "window" ;--- wine_N = regN "wine" ;--- win_V2 = dirV2 (irregDuplV "win" "won" "won") ;- woman_N = mkN (puu_s ++ yig_s) khon_s ;--- wonder_VQ = mkVQ (regV "wonder") ;--- wood_N = regN "wood" ;--- write_V2 = dirV2 (irregV "write" "wrote" "written") ;--- yellow_A = regADeg "yellow" ;--- young_A = regADeg "young" ;------ do_V2 = dirV2 (mkV "do" "does" "did" "done" "doing") ;--- now_Adv = mkAdv "now" ;--- already_Adv = mkAdv "already" ;--- song_N = regN "song" ;--- add_V3 = dirV3 (regV "add") toP ;--- number_N = regN "number" ;--- put_V2 = mkV2 (irregDuplV "put" "put" "put") noPrep ;--- stop_V = regDuplV "stop" ;--- jump_V = regV "jump" ;------ left_Ord = ss "left" ;--- right_Ord = ss "right" ;--- far_Adv = mkAdv "far" ;--- correct_A = (regA "correct") ;--- dry_A = regA "dry" ;--- dull_A = regA "dull" ;--- full_A = regA "full" ;--- heavy_A = regA "heavy" ;--- near_A = regA "near" ;--- rotten_A = (regA "rotten") ;--- round_A = regA "round" ;--- sharp_A = regA "sharp" ;--- smooth_A = regA "smooth" ;--- straight_A = regA "straight" ;--- wet_A = regA "wet" ; ------- wide_A = regA "wide" ;--- animal_N = regN "animal" ;--- ashes_N = regN "ash" ; -- FIXME: plural only?--- back_N = regN "back" ;--- bark_N = regN "bark" ;--- belly_N = regN "belly" ;--- blood_N = regN "blood" ;--- bone_N = regN "bone" ;--- breast_N = regN "breast" ;--- cloud_N = regN "cloud" ;--- day_N = regN "day" ;--- dust_N = regN "dust" ;--- ear_N = regN "ear" ;--- earth_N = regN "earth" ;--- egg_N = regN "egg" ;--- eye_N = regN "eye" ;--- fat_N = regN "fat" ;--- feather_N = regN "feather" ;--- fingernail_N = regN "fingernail" ;--- fire_N = regN "fire" ;--- flower_N = regN "flower" ;--- fog_N = regN "fog" ;--- foot_N = mk2N "foot" "feet" ;--- forest_N = regN "forest" ;--- grass_N = regN "grass" ;--- guts_N = regN "gut" ; -- FIXME: no singular--- hair_N = regN "hair" ;--- hand_N = regN "hand" ;--- head_N = regN "head" ;--- heart_N = regN "heart" ;--- horn_N = regN "horn" ;--- husband_N = genderN masculine (regN "husband") ;--- ice_N = regN "ice" ;--- knee_N = regN "knee" ;--- leaf_N = mk2N "leaf" "leaves" ;--- leg_N = regN "leg" ;--- liver_N = regN "liver" ;--- louse_N = mk2N "louse" "lice" ;--- mouth_N = regN "mouth" ;--- name_N = regN "name" ;--- neck_N = regN "neck" ;--- night_N = regN "night" ;--- nose_N = regN "nose" ;--- person_N = genderN human (regN "person") ;--- rain_N = regN "rain" ;--- road_N = regN "road" ;--- root_N = regN "root" ;--- rope_N = regN "rope" ;--- salt_N = regN "salt" ;--- sand_N = regN "sand" ;--- seed_N = regN "seed" ;--- skin_N = regN "skin" ;--- sky_N = regN "sky" ;--- smoke_N = regN "smoke" ;--- snow_N = regN "snow" ;--- stick_N = regN "stick" ;--- tail_N = regN "tail" ;--- tongue_N = regN "tongue" ;--- tooth_N = mk2N "tooth" "teeth" ;--- wife_N = genderN feminine (mk2N "wife" "wives") ;--- wind_N = regN "wind" ;--- wing_N = regN "wing" ;--- worm_N = regN "worm" ;--- year_N = regN "year" ;--- blow_V = blow_V ;--- breathe_V = dirV2 (regV "breathe") ;--- burn_V = burn_V ;--- dig_V = dig_V ;--- fall_V = fall_V ;--- float_V = regV "float" ;--- flow_V = regV "flow" ;--- fly_V = fly_V ;--- freeze_V = freeze_V ;--- give_V3 = dirV3 give_V toP ;--- laugh_V = regV "laugh" ;--- lie_V = lie_V ;--- play_V = regV "play" ;--- sew_V = sew_V ;--- sing_V = sing_V ;--- sit_V = sit_V ;--- smell_V = regV "smell" ;--- spit_V = spit_V ;--- stand_V = stand_V ;--- swell_V = swell_V ;--- swim_V = swim_V ;--- think_V = think_V ;--- turn_V = regV "turn" ;--- vomit_V = regV "vomit" ;------ bite_V2 = dirV2 bite_V ;--- count_V2 = dirV2 (regV "count") ;--- cut_V2 = dirV2 cut_V ;--- fear_V2 = dirV2 (regV "fear") ;--- fight_V2 = dirV2 fight_V ;--- hit_V2 = dirV2 hit_V ;--- hold_V2 = dirV2 hold_V ;--- hunt_V2 = dirV2 (regV "hunt") ;--- kill_V2 = dirV2 (regV "kill") ;--- pull_V2 = dirV2 (regV "pull") ;--- push_V2 = dirV2 (regV "push") ;--- rub_V2 = dirV2 (regDuplV "rub") ;--- scratch_V2 = dirV2 (regV "scratch") ;--- split_V2 = dirV2 split_V ;--- squeeze_V2 = dirV2 (regV "squeeze") ;--- stab_V2 = dirV2 (regDuplV "stab") ;--- suck_V2 = dirV2 (regV "suck") ;--- throw_V2 = dirV2 throw_V ;--- tie_V2 = dirV2 (regV "tie") ;--- wash_V2 = dirV2 (regV "wash") ;--- wipe_V2 = dirV2 (regV "wipe") ;-------- other_A = regA "other" ;------ grammar_N = regN "grammar" ;--- language_N = regN "language" ;--- rule_N = regN "rule" ;------oper--- aboutP = mkPrep "about" ;--- atP = mkPrep "at" ;--- forP = mkPrep "for" ;--- fromP = mkPrep "from" ;--- inP = mkPrep "in" ;--- onP = mkPrep "on" ;--- toP = mkPrep "to" ;---+ hunt_V2 = mkV2 (thword "ล่า") ;+ husband_N = personN (thword "สา" "มี") ;+ ice_N = mkN (thword "น้ำ" "แข็ง") ;+ important_A = mkA (thword "สำ" "คัญ") ;+ industry_N = mkN (thword "อุต" "สาห" "กรรม") ; ----?+ iron_N = mkN "เหล็ก" ; ----?+ john_PN = ss "จอห์น" ;+ jump_V = mkV (thword "กระ" "โดด") ;+ kill_V2 = mkV2 (thword "ฆ่า") ;+ king_N = mkN (thword "พระ" "รา" "ชา") (thword "พระ" "องด์") ;+ knee_N = mkN (thword "เข่า") ;+ know_V2 = mkV2 "รู้" ; ----?+ know_VQ = lin VQ (regV "รู้") ;+ know_VS = lin VS (regV "รู้") ;+ lake_N = mkN (thword "ทะ" "เล" "สาบ") ; ----?+ lamp_N = mkN (thword "โคม" "ไฟ") ; ----?+ language_N = mkN (thword "ภา" "ษา") ; ----?+ laugh_V = mkV (thword "หัว" "เราะ") ;+ leaf_N = mkN (thword "ใบ") ;+ learn_V2 = mkV2 (mkV "เรียน") ;+ leather_N = mkN (thword "หนัง" "สัตว์") ; ----?+ leave_V2 = mkV2 "จาก" ;+ left_Ord = ss "ซ้าย" ;+ leg_N = mkN (thword "ขา") ;+ lie_V = mkV (thword "นอน") ;+ like_V2 = mkV2 (mkV "ชอบ") ;+ listen_V2 = mkV2 (mkV "ฟัง") ;+ live_V = mkV (thword "อยู่") ;+ liver_N = mkN (thword "ตับ") ;+ long_A = mkA (thword "ยาว") ;+ lose_V2 = mkV2 "หาย" ;+ louse_N = animalN (thword "เหา") ;+ love_N = mkN (thword "ความ" rak_s) ;+ love_V2 = mkV2 rak_s ;+ man_N = personN (thword "ชาย") ;+ married_A2 = mkA2 (mkA (thword "แต่ง" "งาน" "แล้ว")) "กับ" ;+ meat_N = mkN (thword "เนื้อ") ;+ milk_N = mkN (thword "นม") kew_s ;+ moon_N = mkN (thword "พระ" "จันทร์") ;+ mother_N2 = mkN2 (personN "แม่") poss ;+ mountain_N = mkN (thword "เขา") ;+ mouth_N = mkN (thword "ปาก") ;+ music_N = mkN (thword "ดน" "ตรี") ; ----?+ name_N = mkN (thword "ชื่อ") ;+ narrow_A = mkA (thword "แคบ") ;+ near_A = mkA "ใกล้" ;+ near_Adv = mkAdv "ใกล้" ;+ neck_N = mkN (thword "คอ") ;+ new_A = mkA (thword "ใหม่") ;+ newspaper_N = mkN (thword "หนัง" "สือ" "พิมพ์") "ฉบับ" ;+ night_N = mkN (thword "กลาง" "คืน") ;+ nose_N = mkN (thword "จมูก") ;+ now_Adv = mkAdv (thword "เดี๋ยว" "นี้") ;+ number_N = mkN (thword "หมาย" "เลข") ; ----?+ oil_N = mkN (thword "น้ำมัน") ; ----?+ old_A = mkA (thword "แก่") ;+ open_V2 = mkV2 (mkV "เปิด") ;+ other_A = mkA "อื่น" ;+ paint_V2A = mkV2A (regV "ทา") [] "สี" ;+ paper_N = mkN (thword "กระ" "ดาษ") ; ----?+ paris_PN = ss "ปารีส" ;+ peace_N = mkN (thword "สัน" "ติ" "ภาพ"); ----?+ pen_N = mkN (thword "ปาก" "กา") ; ----?+ person_N = personN (thword "บุค" "คล") ; ----?+ planet_N = mkN "ดาว" ; ----?+ plastic_N = mkN (thword "พลาส" "ติค") ; ----?+ play_V = mkV (thword "เล่น") ;+ play_V2 = mkV2 (mkV "เล่น") ;+ policeman_N = mkN (thword "ตำ" "รวจ")"คน" ;+ priest_N = mkN (thword "นัก" "บวช")"รูป" ;+ probable_AS = mkA (thword "บาง" "ที") ;+ pull_V2 = mkV2 (thword "ดึง") ;+ push_V2 = mkV2 (thword "ผลัก") ;+ put_V2 = mkV2 "ใส่" ;+ queen_N = mkN (thword "พระ" "รา" "ชิ" "นี") (thword "พระ" "องค์") ;+ radio_N = mkN (thword "วิท" "ยุ") "เครื่อง" ;+ rain_N = mkN (thword "ฝน") ;+ rain_V0 = mkV (thword "มี" "ฝน") ; ----+ ready_A = mkA "พร้อม" ;+ reason_N = verbalN "เหตู" ;+ read_V2 = mkV2 "อ่าน" ;+ red_A = mkA "แดง" ; --- (thword "สี" "แดง") ;+ religion_N = mkN (thword "ศาส" "นา") ; ----?+ restaurant_N = placeN (thword "ร้าน" "อา" "หาร") ;+ right_Ord = ss "ขวา" ;+ river_N = mkN (thword "แม่" "น้ำ") ;+ road_N = mkN (thword "ถนน") ;+ rock_N = mkN "หิน" ; ----?+ roof_N = mkN (thword "หลัง" "คา") ; ----?+ root_N = mkN (thword "ราก") ; ----?+ rope_N = mkN (thword "เชือก") ; ----?+ rotten_A = mkA (thword "เน่า") ;+ round_A = mkA (thword "กลม") ;+ rub_V2 = mkV2 (thword "ถู") ;+ rubber_N = mkN "ยาง" ; ----?+ rule_N = mkN "กฎ" ; ----?+ run_V = mkV "วิ่ง" ;+ salt_N = mkN (thword "เกลือ") ;+ sand_N = mkN (thword "ทราย") ;+ say_VS = mkVS (regV "พูด") ;+ school_N = placeN (thword "โรง" "เรียน") ;+---- science_N = mkN "science" ; ----?+ scratch_V2 = mkV2 (thword "เกา") ;+ sea_N = mkN (thword "ทะ" "เล") ;+ see_V2 = mkV2 (thword "เห็น") ;+ seed_N = mkN (thword "เม็ด") ;+ seek_V2 = mkV2 "หา" ;+ sell_V3 = mkV3 "ขาย" ;+ send_V3 = mkV3 (mkV "ส่ง") [] (thword "ให้" "กับ") ; --- hai kab as prep+ sew_V = mkV (thword "เย็บ") ;+ sharp_A = mkA (thword "คม") ;+ sheep_N = animalN "แกะ" ;+ ship_N = mkN "เรือ" ; ----?+ shirt_N = mkN (thword "เสื้อ" "เชิ้ต")"ตัว" ; ----?+ shoe_N = mkN (thword "รอง" "เท้า") ; ----?+ shop_N = placeN (thword "ร้าน" "ค้า") ;+ short_A = mkA (thword "สั้น") ;+ silver_N = mkN "เงิน" ; ----?+ sing_V = mkV (thword "ร้อง") ;+ sister_N = mkN (thword "พี่" "สาว")"คน" ;+ sit_V = mkV (thword "นั่ง") ;+ skin_N = mkN (thword "ผิว" "หนัง") ;+ sky_N = mkN (thword "ฟ้า") ;+ sleep_V = mkV "นอน" "หลับ" ;+ small_A = mkA (thword "เล็ก") ;+ smell_V = mkV (thword "มี" "กลิ่น") ;+ smoke_N = mkN (thword "ควัน") ;+ smooth_A = mkA (thword "ละ" "มุน") ;+ snake_N = animalN (thword "งู") ;+ snow_N = mkN (thword "หิ" "มะ") ;+ sock_N = mkN (thword "ถุง" "เท้า") ; ----?+ song_N = mkN "เพลง" ; ----?+ speak_V2 = mkV2 "พูด" ;+ spit_V = mkV (thword "ถ่ม" "น้ำ" "ลาย") ;+ split_V2 = mkV2 (thword "ผ่า") ;+ squeeze_V2 = mkV2 (thword "คั้น") ;+ stab_V2 = mkV2 (thword "แทง") ;+ stand_V = mkV (thword "ยืน") ;+ star_N = mkN (thword "ดาว") ;+ steel_N = mkN "เหล็ก" ; ----?+ stick_N = mkN (thword "กิ่ง") ;+ stone_N = mkN (thword "หิน") ;+ stop_V = mkV "หยุด" ;+ stove_N = mkN "เตา" ; ----?+ straight_A = mkA (thword "ตรง") ;+ student_N = personN (thword "นัก" "ศึก" "ษา") ;+ stupid_A = mkA "โง่" ;+ suck_V2 = mkV2 (thword "ดูด") ;+ sun_N = mkN (thword "พระ" "อา" "ทิตย์") ;+ swell_V = mkV (thword "บวม") ;+ swim_V = mkV (thword "ว่าย") ;+ switch8off_V2 = mkV2 "เปิด" ;+ switch8on_V2 = mkV2 "ปิด" ;+ table_N = mkN "โต๊ะ" "ตัว" ; ----?+ tail_N = mkN (thword "หาง") ; ----?+ talk_V3 = mkV3 (mkV "พูด") ; ----?+ teach_V2 = mkV2 "สอน" ;+ teacher_N = personN "ครู" ;+ television_N = mkN (thword "ที" "วี")"เครื่อง" ;+ thick_A = mkA (thword "หนา") ;+ thin_A = mkA (thword "บาง") ;+ think_V = mkV (thword "คิด") ;+ throw_V2 = mkV2 (thword "ขว้าง") ;+ tie_V2 = mkV2 (thword "ผูก") ;+ today_Adv = ss (thword "วัน" "นี้") ;+ tongue_N = mkN (thword "ลิ้น") ; ----?+ tooth_N = mkN (thword "ฟัน") ; ----?+ train_N = mkN (thword "รถ" "ไฟ") "ขบวน" ;+ travel_V = mkV "เที่ยว" ;+ tree_N = mkN (thword "ต้น" "ไม้") ; ----?+ turn_V = mkV (thword "หัน") ;+ ugly_A = mkA (thword "น่า" "เกลียด") ;+ uncertain_A = mkA (thword "ลัง" "เล" "ใจ") ;+ understand_V2 = mkV2 (mkV (thword "เข้า" "ใจ")) ;+ university_N = placeN (thword "มหา" "วิท" "ยา" "ลัย") ;+ village_N = placeN (thword "หมู่" "บ้าน") ;+ vomit_V = mkV (thword "อ้วก") ;+ wait_V2 = mkV2 "รอ" ;+ walk_V = mkV (thword "เดิน") ;+ war_N = mkN (thword "สง" "คราม") ; ----?+ warm_A = mkA (thword "อุ่น") ;+ wash_V2 = mkV2 (thword "ล้าง") ;+ watch_V2 = mkV2 "ดู" ;+ water_N = mkN (thword "น้ำ") ; ----?+ wet_A = mkA (thword "เปียก") ;+ white_A = mkA (thword "ขาว") ;+ wide_A = mkA (thword "กว้าง") ;+ wife_N = personN (thword "เมีย") ;+ win_V2 = mkV2 "ชนะ" ;+ wind_N = mkN (thword "ลม") ;+ window_N = mkN (thword "หน้า" "ต่าง" "บาน") ; ----?+ wine_N = mkN (thword "เหล้า" "องุ่น") "ขวด" ;+ wing_N = mkN (thword "ปิก") ;+ wipe_V2 = mkV2 (thword "เช็ด") ;+ woman_N = personN (thword "หญิง") ;+ wonder_VQ = mkVQ (regV (thword "ประ" "หลาด" "ใจ")) ; ----+ wood_N = mkN "ไม้" ; ----?+ worm_N = animalN (thword "หนอน") ;+ write_V2 = mkV2 "เขียน" ;+ year_N = mkN (thword "ปี") ;+ yellow_A = mkA "เหลือง" ; ---- (thword "สี" "เหลือง") ;+ young_A = mkA "รุ่น" ;++oper + poss = "ของ" ;+ }
@@ -5,72 +5,68 @@ lin DetCN det cn = let cnc = if_then_Str det.hasC cn.c []- in ss (cn.s ++ det.s1 ++ cnc ++ det.s2) ;+ in mkNP (thbind cn.s det.s1 cnc det.s2) ; UsePN pn = pn ; UsePron p = p ;------ PredetNP pred np = {--- s = \\c => pred.s ++ np.s ! c ;--- a = np.a--- } ;------ PPartNP np v2 = {--- s = \\c => np.s ! c ++ v2.s ! VPPart ;--- a = np.a--- } ;------ AdvNP np adv = {--- s = \\c => np.s ! c ++ adv.s ;--- a = np.a--- } ; + DetNP det = mkNP (thbind det.s1 det.s2) ;++ PredetNP pred np = mkNP (thbind pred.s1 np.s pred.s2) ;++ PPartNP np v2 = thbind np (ss ((predV v2).s ! Pos)) ; ---- ??++ AdvNP np adv = thbind np adv ;+ DetQuant quant num = {- s1 = [] ;- s2 = quant.s ++ num.s ;- hasC = quant.hasC ;+ s1 = num.s ++ quant.s1 ; --- can there be quant.s1 ??+ s2 = quant.s2 ;+ hasC = orB num.hasC quant.hasC ; } ; DetQuantOrd quant num ord = {- s1 = num.s ;- s2 = quant.s ++ ord.s ;- hasC = orB num.hasC quant.hasC ;+ s1 = num.s ++ quant.s1 ; --- can there be quant.s1 ??+ s2 = ord.s ++ quant.s2 ; + hasC = True ; } ; PossPron p = {- s = khoog_s ++ p.s ;+ s1 = khoog_s ++ p.s ;+ s2 = [] ; hasC = False } ; NumSg, NumPl = {s = [] ; hasC = False} ; NumCard n = n ** {hasC = True} ;--- OrdInt n = {s = n.s ++ "th"} ; ------+ NumDigits d = d ;+ OrdDigits d = {s = thbind thii_s d.s} ;+ NumNumeral numeral = numeral ** {hasC = True} ;- OrdNumeral numeral = {s = thii_s ++ numeral.s} ;------ AdNum adn num = {s = adn.s ++ num.s} ;------ OrdSuperl a = {s = a.s ! AAdj Superl} ;---- DefArt = {s = [] ; hasC = False} ;- IndefArt = {s = [] ; hasC = False} ;+ OrdNumeral numeral = {s = thbind thii_s numeral.s} ; + AdNum adn num = thbind adn num ; ---- always?++ OrdSuperl a = {s = thbind a.s thii_s sut_s} ;++ DefArt = {s1,s2 = [] ; hasC = False} ;+ IndefArt = {s1,s2 = [] ; hasC = False} ;+ MassNP cn = cn ; UseN n = n ;--- UseN2 n = n ;--- UseN3 n = n ;------ ComplN2 f x = {s = \\n,c => f.s ! n ! Nom ++ f.c2 ++ x.s ! c} ;--- ComplN3 f x = {s = \\n,c => f.s ! n ! Nom ++ f.c2 ++ x.s ! c ; c2 = f.c3} ;+ UseN2 n = n ;+ Use2N3 f = {s = thbind f.s ; c = f.c ; c2 = f.c2} ;+ Use3N3 f = {s = thbind f.s ; c = f.c ; c2 = f.c3} ; + ComplN2 f x = {s = thbind f.s f.c2 x.s ; c = f.c} ;+ ComplN3 f x = {s = thbind f.s f.c2 x.s ; c = f.c ; c2 = f.c3} ;+ AdjCN ap cn = {s = cn.s ++ ap.s ; c = cn.c} ; --- RelCN cn rs = {s = \\n,c => cn.s ! n ! c ++ rs.s ! {n = n ; p = P3}} ;--- AdvCN cn ad = {s = \\n,c => cn.s ! n ! c ++ ad.s} ;------ SentCN cn sc = {s = \\n,c => cn.s ! n ! c ++ sc.s} ;------ ApposCN cn np = {s = \\n,c => cn.s ! n ! Nom ++ np.s ! c} ;---+ RelCN cn rs = {s = thbind cn.s rs.s ; c = cn.s} ;+ AdvCN cn ad = {s = thbind cn.s ad.s ; c = cn.s} ;+ SentCN cn cs = {s = thbind cn.s cs.s ; c = cn.s} ;+ ApposCN cn np = {s = thbind cn.s np.s ; c = cn.s} ;++ RelNP np rs = thbind np rs ;+ }
@@ -1,5 +1,7 @@-concrete NumeralTha of Numeral = CatTha ** open ResTha, StringsTha in {+concrete NumeralTha of Numeral = CatTha ** open ResTha, StringsTha, Prelude in { +flags coding = utf8 ;+ lincat -- Numeral = {s : Str} ; Digit = {s : DForm => Str} ;@@ -27,26 +29,26 @@ pot110 = {s = sip} ; pot111 = {s = table {- Unit => sip_s ++ et_s ;- Thousand => nvg_s ++ mvvn_s ++ nvg_s ++ phan_s+ Unit => thbind sip_s et_s ;+ Thousand => thbind nvg_s mvvn_s nvg_s phan_s } } ; pot1to19 d = {s = table {- Unit => sip_s ++ d.s ! After ; - Thousand => nvg_s ++ mvvn_s ++ d.s ! Indep ++ phan_s+ Unit => thbind sip_s (d.s ! After) ; + Thousand => thbind nvg_s mvvn_s (d.s ! Indep) phan_s } } ;- pot0as1 d = {s = \\n => d.s ! Indep ++ phan ! n} ;- pot1 d = {s = \\n => d.s ! ModTen ++ sip ! n} ;+ pot0as1 d = {s = \\n => thbind (d.s ! Indep) (phan ! n)} ;+ pot1 d = {s = \\n => thbind (d.s ! ModTen) (sip ! n)} ; pot1plus d e = {- s = \\n => d.s ! ModTen ++ sip ! n ++ e.s ! After ++ phan ! n+ s = \\n => thbind (d.s ! ModTen) (sip ! n) (e.s ! After) (phan ! n) } ; pot1as2 n = n ;- pot2 d = {s = \\n => d.s ! Indep ++ roy ! n} ;- pot2plus d e = {s = \\n => d.s ! Indep ++ roy ! n ++ e.s ! n} ;+ pot2 d = {s = \\n => thbind (d.s ! Indep) (roy ! n)} ;+ pot2plus d e = {s = \\n => thbind (d.s ! Indep) (roy ! n) (e.s ! n)} ; pot2as3 n = {s = n.s ! Unit} ; pot3 n = {s = n.s ! Thousand} ;- pot3plus n m = {s = n.s ! Thousand ++ m.s ! Unit} ;+ pot3plus n m = {s = thbind (n.s ! Thousand) (m.s ! Unit)} ; param DForm = Indep | ModTen | After ;@@ -62,5 +64,26 @@ sip = table {Unit => sip_s ; Thousand => mvvn_s} ; roy = table {Unit => rooy_s ; Thousand => seen_s} ; phan = table {Unit => [] ; Thousand => phan_s} ;++-- numerals as sequences of digits++ lincat + Dig = SS ;++ lin+ IDig d = d ;++ IIDig d i = thbind d i ;++ D_0 = ss "๐" ;+ D_1 = ss "๑" ;+ D_2 = ss "๒" ;+ D_3 = ss "๓" ;+ D_4 = ss "๔" ;+ D_5 = ss "๕" ;+ D_6 = ss "๖" ;+ D_7 = ss "๗" ;+ D_8 = ss "๘" ;+ D_9 = ss "๙" ; }
@@ -1,496 +1,95 @@-----# -path=.:../abstract:../../prelude:../common--------1 Thai Lexical Paradigms---------- Aarne Ranta 2003--2005---------- This is an API for the user of the resource grammar ----- for adding lexical items. It gives functions for forming----- expressions of open categories: nouns, adjectives, verbs.----- ----- Closed categories (determiners, pronouns, conjunctions) are----- accessed through the resource syntax API, $Structural.gf$. ---------- The main difference with $MorphoTha.gf$ is that the types----- referred to are compiled resource grammar types. We have moreover----- had the design principle of always having existing forms, rather----- than stems, as string arguments of the paradigms.---------- The structure of functions for each word class $C$ is the following:----- first we give a handful of patterns that aim to cover all----- regular cases. Then we give a worst-case function $mkC$, which serves as an----- escape to construct the most irregular words of type $C$.----- However, this function should only seldom be needed: we have a----- separate module [``IrregTha`` ../../english/IrregTha.gf], ----- which covers irregular verbss.------resource ParadigmsTha = open --- (Predef=Predef), --- Prelude, --- MorphoTha,--- CatTha--- in {-----2 Parameters ---------- To abstract over gender names, we define the following identifiers.------oper--- Gender : Type ; ------ human : Gender ;--- nonhuman : Gender ;--- masculine : Gender ;-------- To abstract over number names, we define the following.------ Number : Type ; ------ singular : Number ;--- plural : Number ;-------- To abstract over case names, we define the following.------ Case : Type ;------ nominative : Case ;--- genitive : Case ;-------- Prepositions are used in many-argument functions for rection.----- The resource category $Prep$ is used.--------------2 Nouns-------- Nouns are constructed by the function $mkN$, which takes a varying----- number of arguments.------ mkN : overload {-------- Worst case: give all four forms.------ mkN : (man,men,man's,men's : Str) -> N ;-------- The regular function captures the variants for nouns ending with----- "s","sh","x","z" or "y": "kiss - kisses", "flash - flashes"; ----- "fly - flies" (but "toy - toys"),------ mkN : (flash : Str) -> N ;-------- In practice the worst case is just: give singular and plural nominative.------ mkN : (man,men : Str) -> N ;-------- All nouns created by the previous functions are marked as----- $nonhuman$. If you want a $human$ noun, wrap it with the following----- function:------ mkN : Gender -> N -> N ;--------3 Compound nouns ---------- A compound noun is an uninflected string attached to an inflected noun,----- such as "baby boom", "chief executive officer".------ mkN : Str -> N -> N--- } ;-----------3 Relational nouns ----- ----- Relational nouns ("daughter of x") need a preposition. ------ mkN2 : N -> Prep -> N2 ;-------- The most common preposition is "of", and the following is a----- shortcut for regular relational nouns with "of".------ regN2 : Str -> N2 ;-------- Use the function $mkPrep$ or see the section on prepositions below to ----- form other prepositions.---------- Three-place relational nouns ("the connection from x to y") need two prepositions.------ mkN3 : N -> Prep -> Prep -> N3 ;-----------3 Relational common noun phrases---------- In some cases, you may want to make a complex $CN$ into a----- relational noun (e.g. "the old town hall of").------ cnN2 : CN -> Prep -> N2 ;--- cnN3 : CN -> Prep -> Prep -> N3 ;-------- -----3 Proper names and noun phrases---------- Proper names, with a regular genitive, are formed as follows------ regPN : Str -> PN ; --- regGenPN : Str -> Gender -> PN ; -- John, John's-------- Sometimes you can reuse a common noun as a proper name, e.g. "Bank".------ nounPN : N -> PN ;-------- To form a noun phrase that can also be plural and have an irregular----- genitive, you can use the worst-case function.------ mkNP : Str -> Str -> Number -> Gender -> NP ; --------2 Adjectives-------- Non-comparison one-place adjectives need two forms: one for----- the adjectival and one for the adverbial form ("free - freely")------ mkA : (free,freely : Str) -> A ;-------- For regular adjectives, the adverbial form is derived. This holds----- even for cases with the variation "happy - happily".------ regA : Str -> A ;--- -----3 Two-place adjectives---------- Two-place adjectives need a preposition for their second argument.------ mkA2 : A -> Prep -> A2 ;-------- Comparison adjectives may two more forms. ------ ADeg : Type ;------ mkADeg : (good,better,best,well : Str) -> ADeg ;-------- The regular pattern recognizes two common variations: ----- "-e" ("rude" - "ruder" - "rudest") and----- "-y" ("happy - happier - happiest - happily")------ regADeg : Str -> ADeg ; -- long, longer, longest-------- However, the duplication of the final consonant is nor predicted,----- but a separate pattern is used:------ duplADeg : Str -> ADeg ; -- fat, fatter, fattest-------- If comparison is formed by "more", "most", as in general for----- long adjective, the following pattern is used:------ compoundADeg : A -> ADeg ; -- -/more/most ridiculous-------- From a given $ADeg$, it is possible to get back to $A$.------ adegA : ADeg -> A ;-----------2 Adverbs-------- Adverbs are not inflected. Most lexical ones have position----- after the verb. Some can be preverbal (e.g. "always").------ mkAdv : Str -> Adv ;--- mkAdV : Str -> AdV ;-------- Adverbs modifying adjectives and sentences can also be formed.------ mkAdA : Str -> AdA ;--------2 Prepositions---------- A preposition as used for rection in the lexicon, as well as to----- build $PP$s in the resource API, just requires a string.------ mkPrep : Str -> Prep ;--- noPrep : Prep ;-------- (These two functions are synonyms.)--------2 Verbs---------- Except for "be", the worst case needs five forms: the infinitive and----- the third person singular present, the past indicative, and the----- past and present participles.------ mkV : (go, goes, went, gone, going : Str) -> V ;-------- The regular verb function recognizes the special cases where the last----- character is "y" ("cry - cries" but "buy - buys") or "s", "sh", "x", "z"----- ("fix - fixes", etc).------ regV : Str -> V ;-------- The following variant duplicates the last letter in the forms like----- "rip - ripped - ripping".------ regDuplV : Str -> V ;-------- There is an extensive list of irregular verbs in the module $IrregularTha$.----- In practice, it is enough to give three forms, ----- e.g. "drink - drank - drunk", with a variant indicating consonant----- duplication in the present participle.------ irregV : (drink, drank, drunk : Str) -> V ;--- irregDuplV : (get, got, gotten : Str) -> V ;-----------3 Verbs with a particle.---------- The particle, such as in "switch on", is given as a string.------ partV : V -> Str -> V ;--------3 Reflexive verbs---------- By default, verbs are not reflexive; this function makes them that.------ reflV : V -> V ;--------3 Two-place verbs---------- Two-place verbs need a preposition, except the special case with direct object.----- (transitive verbs). Notice that a particle comes from the $V$.------ mkV2 : V -> Prep -> V2 ;------ dirV2 : V -> V2 ;--------3 Three-place verbs---------- Three-place (ditransitive) verbs need two prepositions, of which----- the first one or both can be absent.------ mkV3 : V -> Prep -> Prep -> V3 ; -- speak, with, about--- dirV3 : V -> Prep -> V3 ; -- give,_,to--- dirdirV3 : V -> V3 ; -- give,_,_--------3 Other complement patterns---------- Verbs and adjectives can take complements such as sentences,----- questions, verb phrases, and adjectives.------ mkV0 : V -> V0 ;--- mkVS : V -> VS ;--- mkV2S : V -> Prep -> V2S ;--- mkVV : V -> VV ;--- mkV2V : V -> Prep -> Prep -> V2V ;--- mkVA : V -> VA ;--- mkV2A : V -> Prep -> V2A ;--- mkVQ : V -> VQ ;--- mkV2Q : V -> Prep -> V2Q ;------ mkAS : A -> AS ;--- mkA2S : A -> Prep -> A2S ;--- mkAV : A -> AV ;--- mkA2V : A -> Prep -> A2V ;-------- Notice: categories $V2S, V2V, V2A, V2Q$ are in v 1.0 treated----- just as synonyms of $V2$, and the second argument is given----- as an adverb. Likewise $AS, A2S, AV, A2V$ are just $A$.----- $V0$ is just $V$.------ V0, V2S, V2V, V2A, V2Q : Type ;--- AS, A2S, AV, A2V : Type ;--------.-----2 Definitions of paradigms---------- The definitions should not bother the user of the API. So they are----- hidden from the document.------ Gender = MorphoTha.Gender ; --- Number = MorphoTha.Number ;--- Case = MorphoTha.Case ;--- human = Masc ; --- nonhuman = Neutr ;--- masculine = Masc ;--- feminine = Fem ;--- singular = Sg ;--- plural = Pl ;--- nominative = Nom ;--- genitive = Gen ;------ Preposition : Type = Str ; -- obsolete------ regN = \ray -> --- let--- ra = Predef.tk 1 ray ; --- y = Predef.dp 1 ray ; --- r = Predef.tk 2 ray ; --- ay = Predef.dp 2 ray ;--- rays =--- case y of {--- "y" => y2ie ray "s" ; --- "s" => ray + "es" ;--- "z" => ray + "es" ;--- "x" => ray + "es" ;--- _ => case ay of {--- "sh" => ray + "es" ;--- "ch" => ray + "es" ;--- _ => ray + "s"--- }--- }--- in--- mk2N ray rays ;------ mk2N = \man,men -> --- let mens = case last men of {--- "s" => men + "'" ;--- _ => men + "'s"--- }--- in--- mk4N man men (man + "'s") mens ;------ mk4N = \man,men,man's,men's -> --- mkNoun man man's men men's ** {g = Neutr ; lock_N = <>} ;------ genderN g man = {s = man.s ; g = g ; lock_N = <>} ;------ compoundN s n = {s = \\x,y => s ++ n.s ! x ! y ; g=n.g ; lock_N = <>} ;------ mkN2 = \n,p -> n ** {lock_N2 = <> ; c2 = p.s} ;--- regN2 n = mkN2 (regN n) (mkPrep "of") ;--- mkN3 = \n,p,q -> n ** {lock_N3 = <> ; c2 = p.s ; c3 = q.s} ;--- cnN2 = \n,p -> n ** {lock_N2 = <> ; c2 = p.s} ;--- cnN3 = \n,p,q -> n ** {lock_N3 = <> ; c2 = p.s ; c3 = q.s} ;------ regPN n = regGenPN n human ;--- regGenPN n g = nameReg n g ** {lock_PN = <>} ;--- nounPN n = {s = n.s ! singular ; g = n.g ; lock_PN = <>} ;--- mkNP x y n g = {s = table {Gen => x ; _ => y} ; a = agrP3 n ;--- lock_NP = <>} ;------ mkA a b = mkAdjective a a a b ** {lock_A = <>} ;--- regA a = regAdjective a ** {lock_A = <>} ;------ mkA2 a p = a ** {c2 = p.s ; lock_A2 = <>} ;------ ADeg = A ; ---------- mkADeg a b c d = mkAdjective a b c d ** {lock_A = <>} ;------ regADeg happy = --- let--- happ = init happy ;--- y = last happy ;--- happie = case y of {--- "y" => happ + "ie" ;--- "e" => happy ;--- _ => happy + "e"--- } ;--- happily = case y of {--- "y" => happ + "ily" ;--- _ => happy + "ly"--- } ;--- in mkADeg happy (happie + "r") (happie + "st") happily ;------ duplADeg fat = --- mkADeg fat --- (fat + last fat + "er") (fat + last fat + "est") (fat + "ly") ;------ compoundADeg a =--- let ad = (a.s ! AAdj Posit) --- in mkADeg ad ("more" ++ ad) ("most" ++ ad) (a.s ! AAdv) ;------ adegA a = a ;------ mkAdv x = ss x ** {lock_Adv = <>} ;--- mkAdV x = ss x ** {lock_AdV = <>} ;--- mkAdA x = ss x ** {lock_AdA = <>} ;------ mkPrep p = ss p ** {lock_Prep = <>} ;--- noPrep = mkPrep [] ;------ mkV a b c d e = mkVerb a b c d e ** {s1 = [] ; lock_V = <>} ;------ regV cry = --- let--- cr = init cry ;--- y = last cry ;--- cries = (regN cry).s ! Pl ! Nom ; -- !--- crie = init cries ;--- cried = case last crie of {--- "e" => crie + "d" ;--- _ => crie + "ed"--- } ;--- crying = case y of {--- "e" => case last cr of {--- "e" => cry + "ing" ; --- _ => cr + "ing" --- } ;--- _ => cry + "ing"--- }--- in mkV cry cries cried cried crying ;------ regDuplV fit = --- case last fit of {--- ("a" | "e" | "i" | "o" | "u" | "y") => --- Predef.error (["final duplication makes no sense for"] ++ fit) ;--- t =>--- let fitt = fit + t in--- mkV fit (fit + "s") (fitt + "ed") (fitt + "ed") (fitt + "ing")--- } ;------ irregV x y z = let reg = (regV x).s in--- mkV x (reg ! VPres) y z (reg ! VPresPart) ** {s1 = [] ; lock_V = <>} ;------ irregDuplV fit y z = --- let --- fitting = (regDuplV fit).s ! VPresPart--- in--- mkV fit (fit + "s") y z fitting ;------ partV v p = verbPart v p ** {lock_V = <>} ;--- reflV v = {s = v.s ; part = v.part ; lock_V = v.lock_V ; isRefl = True} ;------ mkV2 v p = v ** {s = v.s ; s1 = v.s1 ; c2 = p.s ; lock_V2 = <>} ;--- dirV2 v = mkV2 v noPrep ;------ mkV3 v p q = v ** {s = v.s ; s1 = v.s1 ; c2 = p.s ; c3 = q.s ; lock_V3 = <>} ;--- dirV3 v p = mkV3 v noPrep p ;--- dirdirV3 v = dirV3 v noPrep ;------ mkVS v = v ** {lock_VS = <>} ;--- mkVV v = {--- s = table {VVF vf => v.s ! vf ; _ => variants {}} ; --- isAux = False ; lock_VV = <>--- } ;--- mkVQ v = v ** {lock_VQ = <>} ;------ V0 : Type = V ;--- V2S, V2V, V2Q, V2A : Type = V2 ;--- AS, A2S, AV : Type = A ;--- A2V : Type = A2 ;------ mkV0 v = v ** {lock_V = <>} ;--- mkV2S v p = mkV2 v p ** {lock_V2 = <>} ;--- mkV2V v p t = mkV2 v p ** {s4 = t ; lock_V2 = <>} ;--- mkVA v = v ** {lock_VA = <>} ;--- mkV2A v p = mkV2 v p ** {lock_V2A = <>} ;--- mkV2Q v p = mkV2 v p ** {lock_V2 = <>} ;------ mkAS v = v ** {lock_A = <>} ;--- mkA2S v p = mkA2 v p ** {lock_A = <>} ;--- mkAV v = v ** {lock_A = <>} ;--- mkA2V v p = mkA2 v p ** {lock_A2 = <>} ;----------- pre-overload API and overload definitions------ mk4N : (man,men,man's,men's : Str) -> N ;--- regN : Str -> N ;--- mk2N : (man,men : Str) -> N ;--- genderN : Gender -> N -> N ;--- compoundN : Str -> N -> N ;------ mkN = overload {--- mkN : (man,men,man's,men's : Str) -> N = mk4N ;--- mkN : Str -> N = regN ;--- mkN : (man,men : Str) -> N = mk2N ;--- mkN : Gender -> N -> N = genderN ;--- mkN : Str -> N -> N = compoundN--- } ;---------} ;+resource ParadigmsTha = open CatTha, ResTha, Prelude in {++flags coding = utf8 ;++oper+ mkN = overload {+ mkN : Str -> N + = \s -> lin N {s = s ; c = "กำ ลัง"} ; ---- for small objects, see LP PB p. 20+ mkN : Str -> Str -> N + = \s,c -> lin N {s = s ; c = c} ;+ } ;++ personN : Str -> N+ = \s -> mkN s "คน" ;+ fooddishN : Str -> N+ = \s -> mkN s "จาน" ;+ vehicleN : Str -> N+ = \s -> mkN s "คัน" ;+ houseN : Str -> N+ = \s -> mkN s "หลัง" ;+ animalN : Str -> N+ = \s -> mkN s "ตัว" ;+ placeN : Str -> N+ = \s -> mkN s "แห่ง" ;+ verbalN : Str -> N+ = \s -> mkN s "ข้อ" ;++ mkN2 : N -> Str -> N2+ = \n,p -> lin N2 (n ** {c2 = p}) ;++ mkN3 : N -> Str -> Str -> N3+ = \n,p,q -> lin N3 (n ** {c2 = p ; c3 = q}) ;++ mkA : Str -> A = \s -> lin A (mkAdj s) ;++ mkPN : Str -> PN+ = \s -> lin PN (ss s) ;++ mkA2 : A -> Str -> A2+ = \n,p -> lin A2 (n ** {c2 = p}) ;++ mkV = overload {+ mkV : Str -> Verb + = \s -> {s1 = [] ; s2 = s ; isCompl = False} ;+ mkV : Str -> Str -> Verb + = \s,c -> lin V {s1 = s ; s2 = c ; isCompl = True} ;+ } ;++ mkV2 = overload {+ mkV2 : Str -> V2+ = \s -> lin V2 (dirV2 (regV s)) ;+ mkV2 : V -> V2+ = \s -> lin V2 (dirV2 s) ;+ mkV2 : V -> Str -> V2+ = \v,p -> lin V2 (v ** {c2 = p}) ;+ } ;++ mkV3 = overload {+ mkV3 : Str -> V3+ = \s -> lin V3 (regV s ** {c2,c3 = []}) ;+ mkV3 : V -> V3+ = \s -> lin V3 (s ** {c2,c3 = []}) ;+ mkV3 : V -> Str -> Str -> V3+ = \v,p,q -> lin V3 (v ** {c2 = p ; c3 = q}) ;+ } ;++ mkVQ : V -> VQ =+ \v -> lin VQ v ;++ mkVS : V -> VS =+ \v -> lin VS v ;++ mkVA : V -> VA =+ \v -> lin VA v ;++ mkV2Q : V -> Str -> V2Q =+ \v,p -> lin V2Q (v ** {c2 = p}) ; ++ mkV2V : V -> Str -> Str -> V2V =+ \v,p,q -> lin V2V (v ** {c2 = p ; c3 = q}) ; ++ mkV2S : V -> Str -> V2S =+ \v,p -> lin V2S (v ** {c2 = p}) ; ++ mkV2A : V -> Str -> Str -> V2A =+ \v,p,q -> lin V2A (v ** {c2 = p ; c3 = q}) ; ++ mkAdv : Str -> Adv = + \s -> lin Adv (ss s) ;++ mkPrep : Str -> Prep = + \s -> lin Prep (ss s) ;++ +}
@@ -12,11 +12,14 @@ UttIP ip = ip ; UttIAdv iadv = iadv ; UttNP np = np ;- UttVP vp = {s = vp.s ! Pos} ;+ UttCN cn = cn ;+ UttAP ap = ap ;+ UttCard x = x ;+ UttVP vp = {s = vp.s ! Pos ++ vp.e} ; UttAdv adv = adv ; NoPConj = {s = []} ;- PConjConj conj = conj ;+ PConjConj conj = ss conj.s2 ; NoVoc = {s = []} ; VocNP np = {s = np.s} ; ---- ??
@@ -7,35 +7,39 @@ -- pos. may, neg. chay may - not always the proper forms --- - QuestCl cl = {s = \\p => cl.s ! Pos ++ polStr chay_s p ++ m'ay_s} ; + QuestCl cl = {s = cl.s ! ClQuest} ; ------ QuestVP qp vp = --- let cl = mkClause (qp.s ! Nom) {n = qp.n ; p = P3} vp--- in {s = \\t,a,b,_ => cl.s ! t ! a ! b ! ODir} ;------ QuestSlash ip slash = --- mkQuestion (ss (slash.c2 ++ ip.s ! Acc)) slash ;--- --- stranding in ExratTha ------ QuestIAdv iadv cl = mkQuestion iadv cl ;------ QuestIComp icomp np = --- mkQuestion icomp (mkClause (np.s ! Nom) np.a (predAux auxBe)) ;--------- PrepIP p ip = {s = p.s ++ ip.s ! Nom} ;------ AdvIP ip adv = {--- s = \\c => ip.s ! c ++ adv.s ;--- n = ip.n--- } ;--- --- IDetCN idet num ord cn = {--- s = \\c => idet.s ++ num.s ++ ord.s ++ cn.s ! idet.n ! c ; --- n = idet.n--- } ;------ CompIAdv a = a ;---+---- order of IP and VP to be revisited: Smyth p. 160++ QuestVP qp vp = {s = (mkClause qp vp).s ! ClDecl} ;++ QuestSlash ip slash = {s = \\p => thbind (slash.s ! p) slash.c2 ip.s} ; ++ QuestIAdv iadv cl = {s = \\p => thbind (cl.s ! ClDecl ! p) iadv.s} ; ++ QuestIComp icomp np = {s = \\p => thbind np.s (polStr may_s p) icomp.s} ; ++ PrepIP p ip = thbind p ip ;++ AdvIP ip adv = thbind ip adv ;++ IdetCN det cn = + let cnc = if_then_Str det.hasC cn.c []+ in mkNP (thbind cn.s det.s1 cnc det.s2) ;++ IdetIP idet = mkNP (thbind idet.s1 idet.s2) ;++ IdetQuant iquant num = {+ s1 = num.s ++ iquant.s1 ; --- is num even possible ??+ s2 = iquant.s2 ;+ hasC = iquant.hasC+ } ;++ AdvIAdv i a = thbind i a ;++ CompIAdv a = ss (thbind yuu_s a.s) ;++ CompIP ip = ss (thbind pen_s ip.s) ;+ }+
@@ -1,48 +1,10 @@---concrete RelativeTha of Relative = CatTha ** open ResTha in {------ flags optimize=all_subs ;------ lin------ RelCl cl = {--- s = \\t,a,p,_ => "such" ++ "that" ++ cl.s ! t ! a ! p ! ODir ; --- c = Nom--- } ;------ RelVP rp vp = {--- s = \\t,ant,b,ag => --- let --- agr = case rp.a of {--- RNoAg => ag ;--- RAg a => a--- } ;--- cl = mkClause (rp.s ! RC Nom) agr vp--- in--- cl.s ! t ! ant ! b ! ODir ;--- c = Nom--- } ;-------- Pied piping: "at which we are looking". Stranding and empty----- relative are defined in $ExtraTha.gf$ ("that we are looking at", ----- "we are looking at").------ RelSlash rp slash = {--- s = \\t,a,p,_ => slash.c2 ++ rp.s ! RPrep ++ slash.s ! t ! a ! p ! ODir ;--- c = Acc--- } ;------ FunRP p np rp = {--- s = \\c => np.s ! Acc ++ p.s ++ rp.s ! RPrep ;--- a = RAg np.a--- } ;------ IdRP = {--- s = table {--- RC Gen => "whose" ; --- RC _ => "that" ;--- RPrep => "which"--- } ;--- a = RNoAg--- } ;------}+concrete RelativeTha of Relative = CatTha ** open ResTha, Prelude in {++ lin+ RelCl cl = {s = \\p => thbind thii_s (cl.s ! ClDecl ! p)} ; ---- ??+ RelVP rp vp = mkPolClause rp vp ;+ RelSlash rp slash = {s = \\p => thbind slash.c2 rp.s (slash.s ! p)} ;+ FunRP p np rp = {s = thbind np.s p.s rp.s} ; ---- ??+ IdRP = ss thii_s ;++}
@@ -7,52 +7,121 @@ ---- implement $Test$, it moreover contains regular lexical ---- patterns needed for $Lex$. ---resource ResTha = ParamX ** open StringsTha, Prelude in {+resource ResTha = ParamX, StringsTha ** open Prelude in { oper +-- binding words together - if you want. But better do it with the unlexer -unchars.++ bIND = [] ;++ thbind = overload {+ thbind : Str -> Str = \s -> s ;+ thbind : (s1,s2 : Str) -> Str = \s1,s2 -> s1 ++ bIND ++ s2 ;+ thbind : (s1,_,s3 : Str) -> Str = \s1,s2,s3 -> s1 ++ bIND ++ s2 ++ bIND ++ s3 ;+ thbind : (s1,_,_,s4 : Str) -> Str = + \s1,s2,s3,s4 -> s1 ++ bIND ++ s2 ++ bIND ++ s3 ++ bIND ++ s4 ;+ thbind : (s1,_,_,_,s5 : Str) -> Str = + \s1,s2,s3,s4,s5 -> s1 ++ bIND ++ s2 ++ bIND ++ s3 ++ bIND ++ s4 ++ bIND ++ s5 ;+ thbind : (s1,_,_,_,_,s6 : Str) -> Str = + \s1,s2,s3,s4,s5,s6 -> + s1 ++ bIND ++ s2 ++ bIND ++ s3 ++ bIND ++ s4 ++ bIND ++ s5 ++ bIND ++ s6 ;++ thbind : SS -> SS = \s -> s ;+ thbind : (s1,s2 : SS) -> SS = \s1,s2 -> ss (s1.s ++ bIND ++ s2.s) ;+ thbind : (s1,_,s3 : SS) -> SS = \s1,s2,s3 -> ss (s1.s ++ bIND ++ s2.s ++ bIND ++ s3.s) ;+ thbind : (s1,_,_,s4 : SS) -> SS = + \s1,s2,s3,s4 -> ss (s1.s ++ bIND ++ s2.s ++ bIND ++ s3.s ++ bIND ++ s4.s) ;+ } ;++ thword = overload {+ thword : Str -> Str = \s -> s ;+ thword : (s1,s2 : Str) -> Str = \s1,s2 -> s1 + s2 ;+ thword : (s1,_,s3 : Str) -> Str = \s1,s2,s3 -> s1 + s2 + s3 ;+ thword : (s1,_,_,s4 : Str) -> Str = + \s1,s2,s3,s4 -> s1 + s2 + s3 + s4 ;+ thword : (s1,_,_,_,s5 : Str) -> Str = + \s1,s2,s3,s4,s5 -> s1 + s2 + s3 + s4 + s5 ;+ thword : (s1,_,_,_,_,s6 : Str) -> Str = + \s1,s2,s3,s4,s5,s6 -> s1 + s2 + s3 + s4 + s5 + s6 ;++ } ;+ -- noun and classifier Noun = {s,c : Str} ; - mkN : Str -> Str -> Noun = \s,c -> {s = s ; c = c} ;+ mkNoun : Str -> Str -> Noun = \s,c -> {s = s ; c = c} ; -- before and after classifier; whether classifier needed (default) Determiner = {s1, s2 : Str ; hasC : Bool} ; - mkDet : Str -> Str -> Determiner = + mkDet : Str -> Str -> Determiner = -- before and after classifier \s,c -> {s1 = s ; s2 = c ; hasC = True} ; + quantDet : Str -> Determiner = -- quantifier: before classifier + \s -> mkDet s [] ;++ demDet : Str -> Determiner = -- demonstrative: after classifier + \s -> mkDet [] s ;+ -- Part before and after negation (mai_s) - Verb = {s1,s2 : Str} ;+ Verb = {s1,s2 : Str ; isCompl : Bool} ; - resV : Str -> Str -> Verb = \s,c -> {s1 = s ; s2 = c} ;+ resV : Str -> Str -> Verb = \s,c -> {s1 = s ; s2 = c ; isCompl = True} ; - regV : Str -> Verb = \s -> resV [] s ;+ regV : Str -> Verb = \s -> {s1 = [] ; s2 = s ; isCompl = False} ; dirV2 : Verb -> Verb ** {c2 : Str} = \v -> v ** {c2 = []} ; -- Auxiliary verbs, according to order and negation. -- The three types are $VV may VP | may VV VP | VP may VV$ - param VVTyp = VVPre | VVMid | VVPost ;+ param VVTyp = VVPre | VVMid | VVPost ; - oper VVerb = {s : Str ; typ : VVTyp} ;+ oper + VVerb = {s : Str ; typ : VVTyp} ; + Adj = SS ; + + mkAdj : Str -> Adj = ss ;+ -- Verb phrases: form negation and question, too. VP = {- s : Polarity => Str + s : Polarity => Str ;+ e : Str -- extraposed clause } ; - mkVP : Verb -> VP = \v -> {- s = \\p => v.s1 ++ polStr may_s p ++ v.s2+ infVP : VP -> Str = \vp -> thbind (vp.s ! Pos) vp.e ; ----++ predV : Verb -> VP = \v -> {+ s = \\p => if_then_Str v.isCompl + (thbind v.s1 (polStr may_s p ++ v.s2))+ (v.s1 ++ (polStr may_s p ++ v.s2)) ; --- v.s1 = [] ;+ e = [] } ; + insertObj : NP -> VP -> VP = \o,vp -> {+ s = \\p => thbind (vp.s ! p) o.s ;+ e = vp.e+ } ; ++ insertExtra : Str -> VP -> VP = \o,vp -> {+ s = vp.s ;+ e = vp.e ++ o+ } ; ++ adjVP : Adj -> VP = \a -> {+ s = \\p => thbind (polStr may_s p) a.s ;+ e = []+ } ;+ insertObject : Str -> VP -> VP = \np,vp -> {- s = \\p => vp.s ! p ++ np+ s = \\p => thbind (vp.s ! p) np ;+ e = vp.e } ; polStr : Str -> Polarity -> Str = \m,p -> case p of {@@ -60,425 +129,34 @@ Neg => m } ; --- flags optimize=all ;----------- Some parameters, such as $Number$, are inherited from $ParamX$.--------2 For $Noun$-------- This is the worst-case $Case$ needed for pronouns.------ param--- Case = Nom | Acc | Gen ;-------- Agreement of $NP$ is a record. We'll add $Gender$ later.------ oper--- Agr = {n : Number ; p : Person} ;------ param --- Gender = Neutr | Masc | Fem ;--------2 For $Verb$-------- Only these five forms are needed for open-lexicon verbs.------ param--- VForm = --- VInf--- | VPres--- | VPPart--- | VPresPart--- | VPast --# notpresent--- ;-------- Auxiliary verbs have special negative forms.------ VVForm = --- VVF VForm--- | VVPresNeg--- | VVPastNeg --# notpresent--- ;-------- The order of sentence is needed already in $VP$.------ Order = ODir | OQuest ;-----------2 For $Adjective$------ AForm = AAdj Degree | AAdv ;--------2 For $Relative$--- --- RAgr = RNoAg | RAg {n : Number ; p : Person} ;--- RCase = RPrep | RC Case ;--------2 For $Numeral$------ CardOrd = NCard | NOrd ;--- DForm = unit | teen | ten ;--------2 Transformations between parameter types------ oper--- agrP3 : Number -> Agr = \n -> --- {n = n ; p = P3} ;------ conjAgr : Agr -> Agr -> Agr = \a,b -> {--- n = conjNumber a.n b.n ;--- p = conjPerson a.p b.p--- } ;-------- For $Lex$.-------- For each lexical category, here are the worst-case constructors.------ mkNoun : (_,_,_,_ : Str) -> {s : Number => Case => Str} = --- \man,mans,men,mens -> {--- s = table {--- Sg => table {--- Gen => mans ;--- _ => man--- } ;--- Pl => table {--- Gen => mens ;--- _ => men--- }--- }--- } ;------ mkAdjective : (_,_,_,_ : Str) -> {s : AForm => Str} = --- \good,better,best,well -> {--- s = table {--- AAdj Posit => good ;--- AAdj Compar => better ;--- AAdj Superl => best ;--- AAdv => well--- }--- } ;------ mkVerb : (_,_,_,_,_ : Str) -> Verb = --- \go,goes,went,gone,going -> {--- s = table {--- VInf => go ;--- VPres => goes ;--- VPast => went ; --# notpresent--- VPPart => gone ;--- VPresPart => going--- } ;--- isRefl = False--- } ;------ mkIP : (i,me,my : Str) -> Number -> {s : Case => Str ; n : Number} =--- \i,me,my,n -> let who = mkNP i me my n P3 in {s = who.s ; n = n} ;------ mkNP : (i,me,my : Str) -> Number -> Person -> {s : Case => Str ; a : Agr} =--- \i,me,my,n,p -> {--- s = table {--- Nom => i ;--- Acc => me ;--- Gen => my--- } ;--- a = {--- n = n ;--- p = p--- }--- } ;-------- These functions cover many cases; full coverage inflectional patterns are----- in $MorphoTha$.------ regN : Str -> {s : Number => Case => Str} = \car ->--- mkNoun car (car + "'s") (car + "s") (car + "s'") ;------ regA : Str -> {s : AForm => Str} = \warm ->--- mkAdjective warm (warm + "er") (warm + "est") (warm + "ly") ;------ regV : Str -> Verb = \walk ->--- mkVerb walk (walk + "s") (walk + "ed") (walk + "ed") (walk + "ing") ;------ regNP : Str -> Number -> {s : Case => Str ; a : Agr} = \that,n ->--- mkNP that that (that + "'s") n P3 ;-------- We have just a heuristic definition of the indefinite article.----- There are lots of exceptions: consonantic "e" ("euphemism"), consonantic----- "o" ("one-sided"), vocalic "u" ("umbrella").------ artIndef = pre {--- "a" ; --- "an" / strs {"a" ; "e" ; "i" ; "o" ; "A" ; "E" ; "I" ; "O" }--- } ;------ artDef = "the" ;-------- For $Verb$.------ Verb : Type = {--- s : VForm => Str ;--- isRefl : Bool--- } ;------ param--- CPolarity = --- CPos--- | CNeg Bool ; -- contracted or not------ oper--- contrNeg : Bool -> Polarity -> CPolarity = \b,p -> case p of {--- Pos => CPos ;--- Neg => CNeg b--- } ;------ VerbForms : Type =--- Tense => Anteriority => CPolarity => Order => Agr => {fin, inf : Str} ; ------ VP : Type = {--- s : VerbForms ;--- prp : Str ; -- present participle --- inf : Str ; -- the infinitive form ; VerbForms would be the logical place--- ad : Str ; -- sentential adverb--- s2 : Agr => Str -- complement--- } ;--------- predV : Verb -> VP = \verb -> {--- s = \\t,ant,b,ord,agr => --- let--- inf = verb.s ! VInf ;--- fin = presVerb verb agr ;--- part = verb.s ! VPPart ;--- in--- case <t,ant,b,ord> of {--- <Pres,Simul,CPos,ODir> => vf fin [] ;--- <Pres,Simul,CPos,OQuest> => vf (does agr) inf ;--- <Pres,Anter,CPos,_> => vf (have agr) part ; --# notpresent--- <Pres,Anter,CNeg c,_> => vfn c (have agr) (havent agr) part ; --# notpresent--- <Past,Simul,CPos,ODir> => vf (verb.s ! VPast) [] ; --# notpresent--- <Past,Simul,CPos,OQuest> => vf "did" inf ; --# notpresent--- <Past,Simul,CNeg c,_> => vfn c "did" "didn't" inf ; --# notpresent--- <Past,Anter,CPos,_> => vf "had" part ; --# notpresent--- <Past,Anter,CNeg c,_> => vfn c "had" "hadn't" part ; --# notpresent--- <Fut, Simul,CPos,_> => vf "will" inf ; --# notpresent--- <Fut, Simul,CNeg c,_> => vfn c "will" "won't" inf ; --# notpresent--- <Fut, Anter,CPos,_> => vf "will" ("have" ++ part) ; --# notpresent--- <Fut, Anter,CNeg c,_> => vfn c "will" "won't"("have" ++ part) ; --# notpresent--- <Cond,Simul,CPos,_> => vf "would" inf ; --# notpresent--- <Cond,Simul,CNeg c,_> => vfn c "would" "wouldn't" inf ; --# notpresent--- <Cond,Anter,CPos,_> => vf "would" ("have" ++ part) ; --# notpresent--- <Cond,Anter,CNeg c,_> => vfn c "would" "wouldn't" ("have" ++ part) ; --# notpresent--- <Pres,Simul,CNeg c,_> => vfn c (does agr) (doesnt agr) inf--- } ;--- prp = verb.s ! VPresPart ;--- inf = verb.s ! VInf ;--- ad = [] ;--- s2 = \\a => if_then_Str verb.isRefl (reflPron ! a) []--- } ;------ predAux : Aux -> VP = \verb -> {--- s = \\t,ant,cb,ord,agr => --- let --- b = case cb of {--- CPos => Pos ;--- _ => Neg--- } ;--- inf = verb.inf ;--- fin = verb.pres ! b ! agr ;--- finp = verb.pres ! Pos ! agr ;--- part = verb.ppart ;--- in--- case <t,ant,cb,ord> of {--- <Pres,Anter,CPos,_> => vf (have agr) part ; --# notpresent--- <Pres,Anter,CNeg c,_> => vfn c (have agr) (havent agr) part ; --# notpresent--- <Past,Simul,CPos, _> => vf (verb.past ! b ! agr) [] ; --# notpresent--- <Past,Simul,CNeg c, _> => vfn c (verb.past!Pos!agr)(verb.past!Neg!agr) [] ; --# notpresent--- <Past,Anter,CPos,_> => vf "had" part ; --# notpresent--- <Past,Anter,CNeg c,_> => vfn c "had" "hadn't" part ; --# notpresent--- <Fut, Simul,CPos,_> => vf "will" inf ; --# notpresent--- <Fut, Simul,CNeg c,_> => vfn c "will" "won't" inf ; --# notpresent--- <Fut, Anter,CPos,_> => vf "will" ("have" ++ part) ; --# notpresent--- <Fut, Anter,CNeg c,_> => vfn c "will" "won't"("have" ++ part) ; --# notpresent--- <Cond,Simul,CPos,_> => vf "would" inf ; --# notpresent--- <Cond,Simul,CNeg c,_> => vfn c "would" "wouldn't" inf ; --# notpresent--- <Cond,Anter,CPos,_> => vf "would" ("have" ++ part) ; --# notpresent--- <Cond,Anter,CNeg c,_> => vfn c "would" "wouldn't" ("have" ++ part) ; --# notpresent--- <Pres,Simul,CPos, _> => vf fin [] ;--- <Pres,Simul,CNeg c, _> => vfn c finp fin [] --- } ;--- prp = verb.prpart ;--- inf = verb.inf ;--- ad = [] ;--- s2 = \\_ => []--- } ;--- --- vf : Str -> Str -> {fin, inf : Str} = \x,y -> vfn True x x y ;------ vfn : Bool -> Str -> Str -> Str -> {fin, inf : Str} = \contr,x,y,z -> --- case contr of {--- True => {fin = y ; inf = z} ;--- False => {fin = x ; inf = "not" ++ z}--- } ;------ insertObj : (Agr => Str) -> VP -> VP = \obj,vp -> {--- s = vp.s ;--- prp = vp.prp ;--- inf = vp.inf ;--- ad = vp.ad ;--- s2 = \\a => vp.s2 ! a ++ obj ! a--- } ;--------- The adverb should be before the finite verb.------ insertAdV : Str -> VP -> VP = \adv,vp -> {--- s = vp.s ;--- prp = vp.prp ;--- inf = vp.inf ;--- ad = vp.ad ++ adv ;--- s2 = \\a => vp.s2 ! a--- } ;-------- ------ predVV : {s : VVForm => Str ; isAux : Bool} -> VP = \verb ->--- let verbs = verb.s--- in--- case verb.isAux of {--- True => predAux {--- pres = table {--- Pos => \\_ => verbs ! VVF VPres ;--- Neg => \\_ => verbs ! VVPresNeg--- } ;--- past = table { --# notpresent--- Pos => \\_ => verbs ! VVF VPast ; --# notpresent--- Neg => \\_ => verbs ! VVPastNeg --# notpresent--- } ; --# notpresent--- inf = verbs ! VVF VInf ;--- ppart = verbs ! VVF VPPart ;--- prpart = verbs ! VVF VPresPart ;--- } ;--- _ => predV {s = \\vf => verbs ! VVF vf ; isRefl = False}--- } ;------ presVerb : {s : VForm => Str} -> Agr -> Str = \verb -> --- agrVerb (verb.s ! VPres) (verb.s ! VInf) ;------ infVP : Bool -> VP -> Agr -> Str = \isAux,vp,a ->--- vp.ad ++ if_then_Str isAux [] "to" ++ --- vp.inf ++ vp.s2 ! a ;------ agrVerb : Str -> Str -> Agr -> Str = \has,have,agr -> --- case agr of {--- {n = Sg ; p = P3} => has ;--- _ => have--- } ;------ have = agrVerb "has" "have" ;--- havent = agrVerb "hasn't" "haven't" ;--- does = agrVerb "does" "do" ;--- doesnt = agrVerb "doesn't" "don't" ;------ Aux = {--- pres : Polarity => Agr => Str ; --- past : Polarity => Agr => Str ; --# notpresent--- inf,ppart,prpart : Str--- } ;------ auxBe : Aux = {--- pres = \\b,a => case <b,a> of {--- <Pos,{n = Sg ; p = P1}> => "am" ; --- <Neg,{n = Sg ; p = P1}> => ["am not"] ; --- am not I--- _ => agrVerb (posneg b "is") (posneg b "are") a--- } ;--- past = \\b,a => case a of { --# notpresent--- {n = Sg ; p = P1|P3} => (posneg b "was") ; --# notpresent--- _ => (posneg b "were") --# notpresent--- } ; --# notpresent--- inf = "be" ;--- ppart = "been" ;--- prpart = "being"--- } ;------ posneg : Polarity -> Str -> Str = \p,s -> case p of {--- Pos => s ;--- Neg => s + "n't"--- } ;------ conjThat : Str = "that" ;------ reflPron : Agr => Str = table {--- {n = Sg ; p = P1} => "myself" ;--- {n = Sg ; p = P2} => "yourself" ;--- {n = Sg ; p = P3} => "itself" ; ------- {n = Pl ; p = P1} => "ourselves" ;--- {n = Pl ; p = P2} => "yourselves" ;--- {n = Pl ; p = P3} => "themselves"--- } ;-------- For $Sentence$.------ Clause : Type = {--- s : Tense => Anteriority => CPolarity => Order => Str--- } ;------ mkClause : Str -> Agr -> VP -> Clause =--- \subj,agr,vp -> {--- s = \\t,a,b,o => --- let --- verb = vp.s ! t ! a ! b ! o ! agr ;--- compl = vp.s2 ! agr--- in--- case o of {--- ODir => subj ++ verb.fin ++ vp.ad ++ verb.inf ++ compl ;--- OQuest => verb.fin ++ subj ++ vp.ad ++ verb.inf ++ compl--- }--- } ;----------- For $Numeral$.------ mkNum : Str -> Str -> Str -> Str -> {s : DForm => CardOrd => Str} = --- \two, twelve, twenty, second ->--- {s = table {--- unit => table {NCard => two ; NOrd => second} ; --- teen => \\c => mkCard c twelve ; --- ten => \\c => mkCard c twenty--- }--- } ;------ regNum : Str -> {s : DForm => CardOrd => Str} = --- \six -> mkNum six (six + "teen") (six + "ty") (regOrd six) ;------ regCardOrd : Str -> {s : CardOrd => Str} = \ten ->--- {s = table {NCard => ten ; NOrd => regOrd ten}} ;------ mkCard : CardOrd -> Str -> Str = \c,ten -> --- (regCardOrd ten).s ! c ; ------ regOrd : Str -> Str = \ten -> --- case last ten of {--- "y" => init ten + "ieth" ;--- _ => ten + "th"--- } ;------ mkQuestion : --- {s : Str} -> Clause -> --- {s : Tense => Anteriority => CPolarity => QForm => Str} = \wh,cl ->--- {--- s = \\t,a,p => --- let --- cls = cl.s ! t ! a ! p ;--- why = wh.s--- in table {--- QDir => why ++ cls ! OQuest ;--- QIndir => why ++ cls ! ODir--- }--- } ;-------- for VP conjunction------ param--- VPIForm = VPIInf | VPIPPart ;------+ negation : Polarity -> Str = polStr may_s ;++-- clauses++param ClForm = ClDecl | ClQuest ;++oper+ NP = SS ;++ mkNP : Str -> NP = ss ;++ Clause = {+ s : ClForm => Polarity => Str+ } ;++ mkClause : NP -> VP -> Clause = \np,vp -> {+ s = table {+ ClDecl => \\p => thbind np.s (vp.s ! p) vp.e ;+ ClQuest => \\p => thbind np.s (vp.s ! p) (polStr chay_s p) vp.e m'ay_s --- the place of vp.e?+ }+ } ;++ mkPolClause : NP -> VP -> {s : Polarity => Str} = \np,vp -> {+ s = (mkClause np vp).s ! ClDecl+ } ;++ conjThat = waa_s ;++ reflPron = thbind tua_s eeng_s ;+ }
@@ -5,57 +5,44 @@ lin - PredVP np vp = {s = \\p => np.s ++ vp.s ! p} ;+ PredVP np vp = mkClause np vp ; --- PredSCVP sc vp = mkClause sc.s (agrP3 Sg) vp ;+ PredSCVP sc vp = mkClause sc vp ; ImpVP vp = { s = table {- Pos => vp.s ! Pos ++ si_s ;- Neg => yaa_s ++ vp.s ! Pos+ Pos => thbind (vp.s ! Pos) vp.e si_s ;+ Neg => thbind yaa_s (vp.s ! Pos) vp.e } } ;--- SlashV2 np v2 = --- mkClause (np.s ! Nom) np.a (predV v2) ** {c2 = v2.c2} ;------ SlashVVV2 np vv v2 = --- mkClause (np.s ! Nom) np.a --- (insertObj (\\a => infVP vv.isAux (predV v2) a) (predVV vv)) **--- {c2 = v2.c2} ;------ AdvSlash slash adv = {--- s = \\t,a,b,o => slash.s ! t ! a ! b ! o ++ adv.s ;--- c2 = slash.c2--- } ;------ SlashPrep cl prep = cl ** {c2 = prep.s} ;------ EmbedS s = {s = conjThat ++ s.s} ;--- EmbedQS qs = {s = qs.s ! QIndir} ;--- EmbedVP vp = {s = infVP False vp (agrP3 Sg)} ; --- agr---- UseCl t p cl = {s = t.s ++ p.s ++ cl.s ! p.p} ;++ SlashVP np vp = mkPolClause np vp ** {c2 = vp.c2} ;++ SlashVS np vs slash = + mkPolClause np (insertObj (mkNP <thbind conjThat slash.s : Str>) (predV vs)) ** {c2 = slash.c2} ;++ AdvSlash slash adv = {+ s = \\p => thbind (slash.s ! p) adv.s ;+ c2 = slash.c2+ } ;+ + SlashPrep cl prep = {s = cl.s ! ClDecl ; c2 = prep.s} ;+ + EmbedS s = {s = thbind conjThat s.s} ;+ EmbedQS qs = {s = qs.s ! QIndir} ;+ EmbedVP vp = {s = infVP vp} ;++ UseCl t p cl = {s = thbind t.s p.s (cl.s ! ClDecl ! p.p)} ; UseQCl t p cl = {- s = \\q => t.s ++ p.s ++- case q of {QIndir => waa_s ; _ => []} ++ - cl.s ! p.p+ s = \\q => thbind t.s p.s+ (case q of {QIndir => waa_s ; _ => []}) (cl.s ! p.p) } ;--- UseRCl t a p cl = {--- s = \\r => t.s ++ a.s ++ p.s ++ cl.s ! t.t ! a.a ! ctr p.p ! r ;--- c = cl.c--- } ;------ AdvS a s = {s = a.s ++ "," ++ s.s} ;------ oper--- ctr = contrNeg True ; -- contracted negations---}------{------- todo: tense of embedded Slash------ SlashVSS np vs s = --- mkClause (np.s ! Nom) np.a --- (insertObj (\\_ => conjThat ++ s.s) (predV vs)) **--- {c2 = s.c2} ;+ UseRCl t p cl = {+ s = thbind t.s p.s (cl.s ! p.p) ;+ } ;+ UseSlash t p cl = {s = thbind t.s p.s (cl.s ! p.p) ; c2 = cl.c2} ;++ AdvS a s = thbind a s ;++ RelS s r = thbind s r ; }
@@ -1,87 +1,99 @@--- The only place where literal Thai strings are defined --- (except for Lexicon and Structural).--- Convert this into StringsThai by 'make strings'+-- a repository of literal Thai strings resource StringsTha = { +flags coding = utf8 ;+ oper -aphai_s = "Op3ay" ; -- excuse2-baan_s = "bT2a:n" ; -- house-biar_s = "ebi:OrK" ; -- beer-ca_s = "ca." ; -- Modal-cet_s = "ecSd" ; -- seven-chan_s = "c1an" ; -- I-chay_s = "a%c2T1" ; -- yes-cheut_s = "ec2v:T2t" ; -- shirt2-chuay_s = "c2T1wy" ; -- help1-di_s = "di" ; -- I (fem)1-dii_s = "di:" ; -- hello2-duay_s = "dT2wy" ; -- help2-dvm_s = "dvm" ; -- drink-et_s = "eOSd" ; -- one'-haa_s = "hT2a:" ; -- five-hay_s = "a%hT2" ; -- give-hoog_s = "hT2Og" ; -- room-hok_s = "ho?k" ; -- six-jai_s = "a%j" ; -- understand2-kaaw_s = "eka:" ; -- nine-kew_s = "e'kT2w" ; -- glass (drink Classif)-khaw_s = "ek1a:" ; -- he-khon_s = "k2n" ; -- people Classif-khoo_s = "k1O" ; -- please-khoog_s = "k1Og" ; -- Possessive-khoop_s = "k1Ob" ; -- thank-khow_s = "ek1T2w" ; -- understand1-khun_s = "k2un'" ; -- you-koon_s = "kT1On" ; -- bye2-laa_s = "la:" ; -- bye1-lag_s = "hlag" ; -- houses Classif-lap_s = "hlab" ; -- sleep2 -lem_s = "elT1m" ; -- books Classif-may_s = "a&mT1" ; -- not-m'ay_s = "a&hm" ; -- Question-mvvn_s = "hmv:T1n" ; -- ten thousand-nag_s = "hna.g" ; -- book1-nai_s = "a&hn" ; -- where2-nam_s = "na+" ; -- water-nan_s = "naT2n" ; -- that-nii_s = "ni:T2" ; -- this-nit_s = "nid" ; -- little1-noon_s = "nOn" ; -- sleep1-noi_s = "hnT1Oy" ; -- little2-nvg_s = "hnvg" ; -- one-pay_s = "a&p" ; -- go-peet_s = "e'pd" ; -- eight-pen_s = "epSn" ; -- be, can-know-phan_s = "p2an" ; -- thousand-phom_s = "p1m" ; -- I (masc)-puu_s = "p1u:T2" ; -- woman1-rai_s = "a&r" ; -- how-much2-rak_s = "rak" ; -- love-raw_s = "era:" ; -- we-rooy_s = "rT2Oy" ; -- hundred-saam_s = "sa:m" ; -- three-sawat_s = "swas" ; -- hello1-seen_s = "e'sn" ; -- hundred thousand-seua_s = "esv:T2O" ; -- shirt1-si_s = "s'i" ; -- Imperative-sii_s = "si:T1" ; -- four-sip_s = "sib" ; -- ten-soog_s = "sOg" ; -- two-svv_s = "sv:O" ; -- book2-thii_s = "t5i:T1" ; -- Ord-thoot_s = "o:t5r'" ; -- sorry2-thao_s = "et5T1a:" ; -- how-much1-tog_s = "tT2Og" ; -- must-waa_s = "wT1a:" ; -- that Conj-way_s = "a&hw" ; -- can-potent-yaa_s = "OyT1a:" ; -- Neg Imper-yaak_s = "Oya:k" ; -- want-yay_s = "a%hy'" ; -- big-yig_s = "hy'ig" ; -- woman2-yii_s = "yi:T1" ; -- two'-yin_s = "yin" ; -- you're-welcome1-yuu_s = "yu:" ; -- where0(?)+-- if Thai is paired with Pronunciation, return the latter+thpron : Str -> Str -> Str = \t,p -> p ;++aphai_s = "อภัย" ; -- excuse2+baan_s = "บ้าน" ; -- house+biar_s = "เบียร์" ; -- beer+ca_s = "จะ" ; -- Modal+cet_s = "เจ็ด" ; -- seven+chan_s = "ฉัน" ; -- I+chay_s = "ใช่" ; -- yes+cheut_s = "เชื้ต" ; -- shirt2+chuay_s = "ช่วย" ; -- help1+di_s = "ดิ" ; -- I (fem)1+dii_s = "ดี" ; -- hello2+duay_s = "ด้วย" ; -- help2+dvm_s = "ดึม" ; -- drink+eeng_s = "เอง" ; -- self+et_s = "เอ็ด" ; -- one'+haa_s = "ห้า" ; -- five+hay_s = "ให้" ; -- give+hoog_s = "ห้อง" ; -- room+hok_s = "หก" ; -- six+jai_s = "ใจ" ; -- understand2+kaaw_s = "เก้า" ; -- nine+kam_s = "กำ" ; -- Progr1+kew_s = "แก้ว" ; -- glass (drink Classif)+khaw_s = "เขา" ; -- he+khon_s = "คน" ; -- people Classif+khoo_s = "ขอ" ; -- please+khoog_s = "ของ" ; -- Possessive+khoop_s = "ขอบ" ; -- thank+khow_s = "เข้ว" ; -- understand1+khun_s = "คุณ" ; -- you+koon_s = "ก่อน" ; -- bye2+kwaa_s = "กว่า" ; -- comparative+mii_s = "มี" ; -- have+laa_s = "ลา" ; -- bye1+lag2_s = "ลัง" ; -- Progr2+lag_s = "หลัง" ; -- houses Classif+lap_s = "หลับ" ; -- sleep2 +lem_s = "เล่ม" ; -- books Classif+mak_s = "มาก" ; -- very+may_s = "ไม่" ; -- not+m'ay_s = "ไหม" ; -- Question+mvvn_s = "หมื่น" ; -- ten thousand+nag_s = "หนะง" ; -- book1+nai_s = "ไหน" ; -- where2+nam_s = "นำ" ; -- water+nan_s = "นั้น" ; -- that+nii_s = "นี้" ; -- this+nit_s = "นิด" ; -- little1+noon_s = "นอน" ; -- sleep1+noi_s = "หน่อย" ; -- little2+nvg_s = "หนึง" ; -- one+pay_s = "ไป" ; -- go+peet_s = "แปด" ; -- eight+pen_s = "เป็น" ; -- be, can-know+phan_s = "พัน" ; -- thousand+phom_s = "ผม" ; -- I (masc)+puu_s = "ผู้" ; -- woman1+rai_s = "ไร" ; -- how-much2+rak_s = "รัก" ; -- love+raw_s = "เรา" ; -- we+rooy_s = "ร้อย" ; -- hundred+saam_s = "สาม" ; -- three+sawat_s = "สวัส" ; -- hello1+seen_s = "แสน" ; -- hundred thousand+seua_s = "เสื้อ" ; -- shirt1+si_s = "ซิ" ; -- Imperative+sii_s = "สี่" ; -- four+sip_s = "สิบ" ; -- ten+soog_s = "สอง" ; -- two+sut_s = "สุด" ; -- Superlative+svv_s = "สือ" ; -- book2+thii_s = "ที่" ; -- Ord+thoot_s = "โทr'" ; -- sorry2+thao_s = "เท่า" ; -- how-much1+thuuk_s = "ถูก" ; -- passive+tog_s = "ต้อง" ; -- must+tua_s = "ตัว" ; -- refl pronoun+waa_s = "ว่า" ; -- that Conj+way_s = "ไหว" ; -- can-potent+yaa_s = "อย่า" ; -- Neg Imper+yaak_s = "อยาก" ; -- want+yay_s = "ใหญ" ; -- big+yig_s = "หญิง" ; -- woman2+yii_s = "ยี่" ; -- two'+yin_s = "ยิน" ; -- you're-welcome1+yuu_s = "อยู่" ; -- be (in a place) }
@@ -1,110 +1,108 @@ concrete StructuralTha of Structural = CatTha ** - open StringsTha, ResTha, Prelude in {+ open ParadigmsTha, ResTha, Prelude in { - flags optimize=all ;+ flags coding = utf8 ; lin--- above_Prep = ss "above" ;--- after_Prep = ss "after" ;--- all_Predet = ss "all" ;--- almost_AdA, almost_AdN = ss "almost" ;--- although_Subj = ss "although" ;--- always_AdV = ss "always" ;--- and_Conj = ss "and" ** {n = Pl} ;--- because_Subj = ss "because" ;--- before_Prep = ss "before" ;--- behind_Prep = ss "behind" ;--- between_Prep = ss "between" ;--- both7and_DConj = sd2 "both" "and" ** {n = Pl} ;--- but_PConj = ss "but" ;--- by8agent_Prep = ss "by" ;--- by8means_Prep = ss "by" ;+ above_Prep = ss (thword "ข้าง" "บน") ;+ after_Prep = ss (thword "หลัง" "จาก") ;+ all_Predet = {s1 = thword "ทั้ง" "หมด" ; s2 = []} ;+ almost_AdA, almost_AdN = ss (thword "เกิ" "อบ") ;+ although_Subj = ss "ถืง" ;+ always_AdV = ss (thword "เส" "มอ") ; --- pronunciation+ and_Conj = {s1 = [] ; s2 = "และ"} ;+ as_CAdv = {s = thword "เท่า" ; p = "กับ"} ; ----+ at_least_AdN = ss (thword "อย่าง" "น้อย") ;+ at_most_AdN = ss (thword "อย่าง" "มาก") ;+ because_Subj = ss (thword "เพ" "ราะ") ;+ before_Prep = ss "ก่อน" ;+ behind_Prep = ss "หลัง" ;+ between_Prep = ss (thword "ระ" "หว่าง") ;+ both7and_DConj = {s1 = "ทั้ง" ; s2 = "และ"} ;+ but_PConj = ss "แต่" ;+ by8agent_Prep = ss [] ;+ by8means_Prep = ss "ผ่าน" ; can8know_VV = {s = pen_s ; typ = VVPost} ;- can_VV = {s = way_s ; typ = VVPost} ;--- during_Prep = ss "during" ;--- either7or_DConj = sd2 "either" "or" ** {n = Sg} ;--- everybody_NP = regNP "everybody" Sg ;--- every_Det = mkDeterminer Sg "every" ;--- everything_NP = regNP "everything" Sg ;--- everywhere_Adv = ss "everywhere" ;--- few_Det = mkDeterminer Pl "few" ;--- first_Ord = ss "first" ;--- for_Prep = ss "for" ;--- from_Prep = ss "from" ;+ can_VV = {s = "ได้" ; typ = VVPost} ;+ during_Prep = ss (thword "ระ" "หว่าง") ;+ either7or_DConj = {s1 = [] ; s2 = "หริอ"} ; ---- or: mai - ko+ everybody_NP = mkNP (thword "ทุก" "คน") ;+ every_Det = quantDet "ทุก" ;+ everything_NP = mkNP (thword "ทุก" "สิ่ง") ;+ everywhere_Adv = ss (thword "ทุก" "ที") ;+ except_Prep = ss (thword "นอก" "จาก") ;+ few_Det = quantDet (thword "สอง" "สาม") ;+ for_Prep = ss "ให้" ;+ from_Prep = ss "จาก" ;+ have_V2 = mkV2 "มี" ; he_Pron = ss khaw_s ;--- here_Adv = ss "here" ;--- here7to_Adv = ss ["to here"] ;--- here7from_Adv = ss ["from here"] ;--- how_IAdv = ss "how" ;--- how8many_IDet = mkDeterminer Pl ["how many"] ;--- if_Subj = ss "if" ;--- in8front_Prep = ss ["in front of"] ;+ here_Adv = ss (thword "ที่" "นี่") ;+ here7to_Adv = ss "ที่นี่" ; ----+ here7from_Adv = ss (thword "จาก" "นี่") ; ----+ how_IAdv = ss (thword "อย่าง" "ไร") ;+ how8many_IDet = quantDet "กี่" ;+ how8much_IAdv = ss (thword "เท่า" "ไร") ;+ in8front_Prep = ss "หน้า" ; i_Pron = ss chan_s ;--- in_Prep = ss "in" ;--- it_Pron = mkNP "it" "it" "its" Sg P3 ;--- less_CAdv = ss "less" ;--- many_Det = mkDeterminer Pl "many" ;--- more_CAdv = ss "more" ;--- most_Predet = ss "most" ;--- much_Det = mkDeterminer Sg "much" ;+ if_Subj = ss (thword "ถ้า") ; ---- ... ko+ if_then_Conj = {s1 = "ถ้า" ; s2 = "ก็"} ; ---- ko between subj and verb+ in_Prep = ss (thword "ใน") ;+ it_Pron = ss "มัน" ;+ less_CAdv = {s = "น้อย" ; p = "กว่า"} ;+ many_Det = quantDet "หลาย" ;+ more_CAdv = {s = "มาก" ; p = "กว่า"} ;+ most_Predet = {s1 = thword "มาก" "ที่" "สุด" ; s2 = []} ;+ much_Det = quantDet "หลาย" ; ---- always? must_VV = {s = tog_s ; typ = VVPre} ;--- no_Phr = ss "no" ;--- on_Prep = ss "on" ;--- one_Quant = mkDeterminer Sg "one" ;--- only_Predet = ss "only" ;--- or_Conj = ss "or" ** {n = Sg} ;--- otherwise_PConj = ss "otherwise" ;--- part_Prep = ss "of" ;--- please_Voc = ss "please" ;--- possess_Prep = ss "of" ;--- quite_Adv = ss "quite" ;- she_Pron = ss khaw_s ;--- so_AdA = ss "so" ;--- somebody_NP = regNP "somebody" Sg ;--- someSg_Det = mkDeterminer Sg "some" ;--- somePl_Det = mkDeterminer Pl "some" ;--- something_NP = regNP "something" Sg ;--- somewhere_Adv = ss "somewhere" ;- that_Quant = ss nan_s ** {hasC = True} ;--- that_NP = regNP "that" Sg ;--- there_Adv = ss "there" ;--- there7to_Adv = ss "there" ;--- there7from_Adv = ss ["from there"] ;--- therefore_PConj = ss "therefore" ;--- these_NP = regNP "these" Pl ;--- they_Pron = mkNP "they" "them" "their" Pl P3 ; --- this_Quant = mkQuant "this" "these" ;--- this_NP = regNP "this" Sg ;--- those_NP = regNP "those" Pl ;--- through_Prep = ss "through" ;--- too_AdA = ss "too" ;--- to_Prep = ss "to" ;--- under_Prep = ss "under" ;--- very_AdA = ss "very" ;+ no_Quant = quantDet (thword "ไม่" "มี") ;+ no_Utt = ss may_s ;+ nobody_NP = mkNP (thword "ไม่" "มี" "ใคร") ;+ not_Predet = {s1 = may_s ; s2 = []} ; ----+ nothing_NP = mkNP "เปล่า" ;+ on_Prep = ss "บน" ;+ only_Predet = {s1 = [] ; s2 = thword "เท่า" "นั้น"} ;+ or_Conj = {s1 = [] ; s2 = "หริอ"} ;+ otherwise_PConj = ss (thword "ไม่" "อย่าง" "นั้น") ;+ part_Prep = ss "" ; ----+ please_Voc = ss "ขอ" ;+ possess_Prep = ss "ของ" ;+ quite_Adv = ss (thword "ค่อน" "ข้าง") ;+ she_Pron = ss "หล่อน" ;+ so_AdA = ss (thword "ดัง" "นั้น") ;+ somebody_NP = mkNP (thword "บาง" "คน") ;+ somePl_Det = quantDet ("บาง") ;+ someSg_Det = quantDet ("บาง") ;+ something_NP = mkNP (thword "บาง" "สิ่ง") ;+ somewhere_Adv = mkAdv (thword "บาง" "แห่ง") ;+ that_Quant = demDet nan_s ;+ that_Subj = ss conjThat ;+ there_Adv = ss (thword "ที่" "นั่น") ;+ there7to_Adv = ss (thword "ที่" "นั่น") ; ----+ there7from_Adv = ss (thword "จาก" "นั่น") ; ----+ therefore_PConj = ss (thword "เพราะ" "ฉะ" "นั้น") ;+ they_Pron = mkNP (thword "พวก" khaw_s) ; --- mkNP (thword "เขา" "ทั้ง" "หลาย") ;+ this_Quant = demDet nii_s ;+ through_Prep = ss "ผ่าน" ;+ too_AdA = ss (thword "เกิน" "ไป") ;+ to_Prep = ss "ถืง" ;+ under_Prep = ss "ใต้" ;+ very_AdA = ss "มาก" ; want_VV = {s = yaak_s ; typ = VVMid} ; we_Pron = ss raw_s ;--- whatPl_IP = mkIP "what" "what" "what's" Sg ;--- whatSg_IP = mkIP "what" "what" "what's" Sg ;--- when_IAdv = ss "when" ;--- when_Subj = ss "when" ;--- where_IAdv = ss "where" ;--- whichPl_IDet = mkDeterminer Pl ["which"] ;--- whichSg_IDet = mkDeterminer Sg ["which"] ;--- whoSg_IP = mkIP "who" "whom" "whose" Sg ;--- whoPl_IP = mkIP "who" "whom" "whose" Pl ;--- why_IAdv = ss "why" ;--- without_Prep = ss "without" ;--- with_Prep = ss "with" ;--- yes_Phr = ss "yes" ;+ whatPl_IP, whatSg_IP = ss (thword "อะ" "ไร") ;+ when_IAdv = ss (thword "เมื่อไร") ;+ when_Subj = ss "ที" ;+ where_IAdv = ss (thword "ที่" "ไหน") ;+ which_IQuant = demDet "ไหน" ; + whoPl_IP, whoSg_IP = ss "ใคร" ;+ why_IAdv = ss (thword "ทำ" "ไม") ;+ without_Prep = ss (thword "ไม่" "มี") ;+ with_Prep = ss "กับ" ;+ yes_Utt = ss chay_s ; youSg_Pron = ss khun_s ;- youPl_Pron = ss khun_s ;+ youPl_Pron = ss (thword "พวก" khun_s) ; youPol_Pron = ss khun_s ;---------oper--- mkQuant : Str -> Str -> {s : Number => Str} = \x,y -> {--- s = table Number [x ; y]--- } ;---+ right_Ord = ss (thword "ขวา") ;+ left_Ord = ss (thword "ซ้าย") ; }
@@ -0,0 +1,36 @@+--# -path=.:../abstract:../common + +concrete SymbolTha of Symbol = CatTha ** open Prelude, ResTha in { + + flags coding = utf8; + + lin + SymbPN i = i ; + IntPN i = i ; + FloatPN i = i ; + NumPN i = i ; + CNIntNP cn i = { + s = thbind cn.s ++ i.s ; + c = cn.c + } ; + CNSymbNP det cn xs = ss (thbind det.s1 cn.s xs.s) ; ---- + CNNumNP cn i = { + s = thbind cn.s ++ i.s ; + c = cn.c + } ; + + SymbS sy = sy ; + SymbNum sy = sy ; + SymbOrd sy = sy ; + +lincat + + Symb, [Symb] = SS ; + +lin + MkSymb s = s ; + + BaseSymb = infixSS "" ; + ConsSymb = infixSS "" ; + +}
@@ -0,0 +1,11 @@+concrete TextTha of Text = CommonX ** open ResTha in {++-- No punctuation - but make sure to leave spaces between sentences!++ lin+ TEmpty = {s = []} ;+ TFullStop x xs = {s = x.s ++ "" ++ xs.s} ;+ TQuestMark x xs = {s = x.s ++ "" ++ xs.s} ;+ TExclMark x xs = {s = x.s ++ "" ++ xs.s} ;++}
@@ -0,0 +1,420 @@+module Main where++import Data.Char+import Data.List+import qualified Data.Map as Map+import System++-- convert all files *Tha.gf into *ThP.gf with "t" changed to (thpron "t" "p")++main = allThpron++allThpron = do+ System.system "ls *Tha*.gf ../api/*Tha*.gf >srcThai.txt"+ files <- readFile "srcThai.txt" >>= return . lines+ mapM_ fileThpron files+ return ()++fileThpron file = do+ s <- readFile file+ let tgt = appThpron file+ writeFile tgt (appThpron s)+ putStrLn ("wrote " ++ tgt)++-- thb = IPA Thai; not used in ISO-639-3 like Thp +appThpron s = case s of+ '"':cs -> let (w,_:rest) = break (=='"') cs in mkThpron w ++ appThpron rest+ 'T':'h':'a':'A':rest -> "Thb" ++ appThpron rest -- AllThaAbs+ 'T':'h':'a':c:rest | isAlpha c -> "Tha" ++ c : appThpron rest -- Thank+ 'T':'h':'a':rest -> "Thb" ++ appThpron rest+ c:cs -> c:appThpron cs+ _ -> s++mkThpron s = "(thpron \"" ++ s ++ "\" \"" ++ thai2pron s ++ "\")"+++-- the following functions involving pron (=pronunciation) work on syllables++thai2pron = uni2pron . thai2uni+trans2pron = uni2pron . trans2uni+trans2thai = uni2thai . trans2uni+trans2dat = uni2dat . trans2uni++thai2uni :: String -> [Int]+thai2uni = map fromEnum++uni2thai :: [Int] -> String+uni2thai = map toEnum++uni2pron :: [Int] -> String+uni2pron = dat2pron . uni2dat++uni2dat = map (maybe CR dat . (\u -> Map.lookup u uniMap)) --- CR as exception value++--high = accent '\x301'+--low = accent '\x300'+--rising = accent '\x306'+--falling = accent '\x302'++dat2pron :: [ThaiDat] -> String+dat2pron is = case is of++-- exceptional words+ [Ce,Ck1,CaL] -> "kha\x301w"+ [Cc1,Ca,Cn] -> "cha\x301n"+ [CaE,Ch,Cm] -> "m" ++ high "ay"+ [Ct,CT2,CO,Cg] -> "t" ++ falling i_O ++ i_ng + [Ce,Cg,Ci,Cn] -> i_ng ++ i_oe ++ "n"+ [CaE,Cd,CT2] -> "d" ++ falling "aay"+ [Ce,Ck,CT2,CaL] -> "k" ++ falling "aaw"+ [CaE,Cm,CT2] -> "m" ++ high "aay"+ [CO,Cy,CaL,Ck] -> "y" ++ low "aak"+ [CO,Cy,CT1,CaL] -> "y" ++ low "aa"+ [CO,Cy,CT1,CaL,Cg] -> "y" ++ low "aa" ++ i_ng+ [CO,Cy,CT1,CuL] -> "y" ++ low "uu"+ [Cp3,Cr] -> "phan" --- not in Smyth+ [Cp2,Cw,Ck] -> "phw" ++ falling "ak" -- not in Smyth+ [Cc2,CvL,CT1,CO] -> "ch" ++ falling i_uue --- to get rid of final O+ [CO,Cg,CT1,Cu,Cn] -> low "a" ++ i_ng ++ low "un" --- probably there is a rule for leading vowelless O++-- words following the rules (mostly from Smyth's Essential Grammar)+ _ -> case getSyllable is of+ [Ce] : cc : [] : d : cs | brev d -> prons cc ++ tone cc d cs "e" ++ endWith cs -- e-8 -> e+ [Ce'] : cc : [] : d : cs | brev d -> prons cc ++ tone cc d cs i_ae ++ endWith cs -- ä-8 -> ä+ [v] :[CO]: [] : d : cs -> tone[CO]d cs (pron v) ++ endWith cs -- e/ä/o/ay/ay+ [v] : cc : [] : d : cs -> prons cc ++ tone cc d cs (pron v) ++ endWith cs -- e/ä/o/ay/ay+ [Ce] : cc : [Cy] : d : cs -> prons cc ++ tone cc d cs (i_ooe++"y")++ endWith cs -- e-y -> ööy+ [Ce] : cc : [CO] : d : cs -> prons cc ++ tone cc d cs i_ooe ++ endWith cs -- e-O -> öö+ [Ce] : cc : [CO,CaP] : d : cs -> prons cc ++ tone cc d cs i_oe ++ endWith cs -- e-Oa -> ö+ [Ce] : cc : [CaP] : d : cs -> prons cc ++ tone cc d cs "e" ++ endWith cs -- e-a+ [Ce] : cc : [CaL] : d : cs -> prons cc ++ tone cc d cs "aw" ++ endWith cs -- e-a+ [Ce] : cc : [CaL,CaP] : d : cs -> prons cc ++ tone cc d cs i_O ++ endWith cs -- e-Aa -> O+ [Ce] : cc : [Ci] : d : cs -> prons cc ++ tone cc d cs i_ooe ++ endWith cs -- e-i -> öö+ [Ce] : cc : [CiL,Cy] : d : cs -> prons cc ++ tone cc d cs "ia" ++ endWith cs -- e-iiy-> ia+ [Ce] : cc : [Ci,Cy,CaP] : d : cs -> prons cc ++ tone cc d cs "ia" ++ endWith cs -- e-iya-> ia+ [Ce] : cc : [CiL,CO] : d : cs -> prons cc ++ tone cc d cs "ia" ++ endWith cs -- e-iiO-> üa+ [Ce] : cc : [CvL,CO] : d : cs -> prons cc ++ tone cc d cs (i_ue++"a") ++ endWith cs -- e-vvO-> üa+ [Ce] : cc : [CvL,CO,Cy] : d : cs -> prons cc ++ tone cc d cs (i_ue++"ay")++ endWith cs -- e-vvOy-> üay+ [Ce'] : cc : [CaP] : d : cs -> prons cc ++ tone cc d cs i_ae ++ endWith cs -- ä-a -> ä+ [CoL] : cc : [CaP] : d : cs -> prons cc ++ tone cc d cs "o" ++ endWith cs -- o-a -> o+ [] :[CO]: v : d : cs -> tone[CO]d cs (prons v) ++ endWith cs -- Ov -> v+ [] : cc : [Ca,Cw] : d : cs -> prons cc ++ tone cc d cs "ua" ++ endWith cs -- Caw -> Cua+ [] : cc : v :[CK]:cs -> endWith cs -- swas(di:K)+ [] : bb : [] : cc : []: d : cs -> prons bb ++ "a" ++ prons cc ++ tone cc [] cs "o" ++ endWith (d:cs) -- CaCoC+ [] : bb : [] : cc : [] -> prons bb ++ tone bb [] [cc] "o" ++ endWith [cc] -- CoC+ [] : bb : [] : cc : v : d : cs -> prons bb ++ "a" ++ prons cc ++ tone cc [] cs (prons v) ++ endWith cs -- CaCvC+ [] : cc : v : d : cs -> prons cc ++ tone cc d cs (prons v) ++ endWith cs -- Cv- (normal)++ _ -> prons is --- shouldn't happen++ where+ prons cc = case cc of+ _ :CK:cs -> prons cs -- killer + Ch:c:cs | isConsonant c -> concatMap pron (c:cs) -- hC, ---- only some conss+ _ -> concatMap pron cc+ endWith ss = case concat ss of+ _:CK:cs -> dat2pron cs+ c :cs -> enc c ++ dat2pron cs+ _ -> []++ enc c = lookThai [] enp c+ pron c = lookThai [] pro c+ brev d = elem CS d -- shortener++getSyllable :: [ThaiDat] -> [[ThaiDat]] -- (V?),(C|CC|hC),(V*),(D*),(C*),[[],C]?+getSyllable s = case s of+ v:cs | isPreVowel v -> [v]:getCons v cs+ [] -> []+ c:_ -> []:getCons c s+ where+ getCons v s = case s of+ Ch:c:cs | isConsonant c && isLow c -> let (cc:ccs) = getCons v (c:cs) in (Ch:cc):ccs -- hC+ CO:cs -> [CO] :getVow v cs -- O+ Cs:Cr:cs -> [Cs] :getVow v cs -- sr -> s+ _:CK:[] -> []+ b:Cr:Cr:[] | isConsonant b -> [b] :[Ca]:[]:[Cr]:[] -- Crr -> Can+ b:Cr:Cr:[c] | all isConsonant [b,c] -> [b] :[Ca]:[]:[c]:[] -- CrrC -> CaC + b:c:cs | isCluster b c -> [b,c] :getVow v cs -- C(l|r|w) cluster+ b:cs | isPreVowel v -> [b] :getVow v cs+ b:c:Cw:Cy:[]| isConsonant b && isDiacritic c -> [b]:[Cu,Ca]:[c]:[Cy]:[] -- CTuay+ b:Cw:Cy:[] | isConsonant b -> [b] :[Cu,Ca]:[]:[Cy]:[] -- Cuay+ b:c:d:[] | all isConsonant [b,c,d] -> [b] :[]:[c]:[]:[d]:[] -- CaCoC+ b:c:[] | all isConsonant [b,c] -> [b] :[]:[c]:[] -- CoC+ b:c:cs | all isConsonant [b,c] -> [b] :[]:[c]:getVow c cs -- CaCvC+ b:cs | isConsonant b -> [b] :getVow v cs -- C+ _ -> [s] --- shouldn't happen ??+ getVow v0 s = case span (\x -> inVow v0 x || isDiacritic x) s of+ (v,c:cs) -> let (d,w) = partition isDiacritic v in w:d:[c]:getSyllable cs+ (v,_) -> let (d,w) = partition isDiacritic v in [w,d]+ inVow v0 x = isInVowel x || case v0 of+ Ce -> elem x [Cy] -- after e-, also y is a part of a vowel+ _ -> False --- elem x [Cw]+ isLow c = lookThai Low ccl c == Low++isCluster b c = + (pronTha c == "r" && elem (pronTha b) ["k","kh","p","ph","t"])+ || (pronTha c == "ri" && elem (pronTha b) ["k","kh","p","ph","t"])+ || (pronTha c == "l" && elem (pronTha b) ["k","kh","p","ph"])+ || (pronTha c == "w" && elem (pronTha b) ["k","kh"])++pronTha c = lookThai [] pro c++isInVowel :: ThaiDat -> Bool+isInVowel v = (CaP <= v && v <= CuL) || v == CO -- infix vowels++isPreVowel :: ThaiDat -> Bool+isPreVowel i = Ce <= i && i <= CaE++isVowel :: ThaiDat -> Bool+isVowel i = CaP <= i && i <= CaE++isConsonant :: ThaiDat -> Bool+isConsonant i = Ck <= i && i <= Ch' && i /= CO++isDiacritic :: ThaiDat -> Bool+isDiacritic i = CS <= i && i <= CK++tone :: [ThaiDat] -> [ThaiDat] -> [[ThaiDat]] -> String -> String+tone cc@(c:_) d cs v = case (lookThai Low ccl c, isLive cs1, toneMark d) of+ (_,_,3) -> high v+ (_,_,4) -> rising v+ (Low,_,1) -> falling v+ (Low,_,2) -> high v+ (Low,True,_) -> mid v+ (Low,False,_) -> case isLong v of+ False -> high v+ True -> falling v+ (_,_,1) -> low v+ (_,_,2) -> falling v+ (Mid,True,_) -> mid v+ (Mid,False,_) -> low v+ (High,True,_) -> rising v+ (High,False,_) -> low v+ where+ cs1 = concat (take 1 cs)+tone _ _ _ v = mid v++toneMark :: [ThaiDat] -> Int+toneMark is = case is of+ CT1:is -> 1+ CT2:is -> 2+ CT3:is -> 3+ CT4:is -> 4+ _ :is -> toneMark is+ _ -> 0 -- no tone mark in is++isLong :: String -> Bool+isLong s = case s of+ 'i':'a':_ -> True+ 'u':'a':_ -> True+ '\x289':a:_ -> True -- uea+ c:d:_ | c == d -> True --- must be vowels+ _:cs -> isLong cs+ _ -> False ++isLive :: [ThaiDat] -> Bool+isLive is = case is of+ [i] -> lookThai False liv i+ [] -> True+ _ -> False++mid, high, low, falling, rising :: String -> String+mid s = s+high = accent '\x301'+low = accent '\x300'+rising = accent '\x306'+falling = accent '\x302'++accent a s = case s of+ c:cs -> c:a:cs+ _ -> s++trans2uni :: String -> [Int]+trans2uni = + map (\c -> maybe 0 id $ Map.lookup c trans) . + unchar+ where+ trans = Map.fromList [(tra c, uni c) | c <- allThaiChars]+ +unchar :: String -> [String] +unchar s = case s of+ c:d:cs + | isAlpha d -> [c] : unchar (d:cs)+ | isSpace d -> [c]:[d]: unchar cs+ | otherwise -> let (ds,cs2) = break (\x -> isAlpha x || isSpace x) cs in+ (c:d:ds) : unchar cs2+ [_] -> [s]+ _ -> []+++thaiMap :: Map.Map ThaiDat ThaiChar+thaiMap = Map.fromList [(dat c,c) | c <- allThaiChars]++uniMap :: Map.Map Int ThaiChar+uniMap = Map.fromList [(uni c,c) | c <- allThaiChars]++lookThai :: a -> (ThaiChar -> a) -> ThaiDat -> a+lookThai v f i = maybe v f (Map.lookup i thaiMap)++data ThaiChar = TC {+ dat :: ThaiDat,+ uni :: Int,+ tra :: String,+ ccl :: CClass,+ liv :: Bool,+ pro :: String,+ enp :: String+ }+ deriving Show++data CClass = Low | Mid | High+ deriving (Show, Eq)++-- IPA sounds+i_ng = "\331"+i_O = "\596"+i_ue = "\x289"+i_ae = "\x25b"+i_oe = "\601"+i_ooe = i_oe ++ i_oe+i_uue = i_ue ++ i_ue+i_aae = i_ae ++ i_ae+i_OO = i_O ++ i_O++allThaiChars :: [ThaiChar]+allThaiChars = [+ TC {dat = Ck, uni = 3585, tra = "k", ccl = Mid, liv = False, pro = "k", enp = "k"},+ TC {dat = Ck1, uni = 3586, tra = "k1", ccl = High, liv = False, pro = "kh", enp = "k"},+ TC {dat = Ck2, uni = 3588, tra = "k2", ccl = Low, liv = False, pro = "kh", enp = "k"},+ TC {dat = Ck3, uni = 3590, tra = "k3", ccl = Low, liv = False, pro = "kh", enp = "k"},+ TC {dat = Cg, uni = 3591, tra = "g", ccl = Low, liv = True, pro = i_ng, enp = i_ng},+ TC {dat = Cc, uni = 3592, tra = "c", ccl = Mid, liv = False, pro = "c", enp = "t"},+ TC {dat = Cc1, uni = 3593, tra = "c1", ccl = High, liv = False, pro = "ch", enp = "t"},+ TC {dat = Cc2, uni = 3594, tra = "c2", ccl = Low, liv = False, pro = "ch", enp = "t"},+ TC {dat = Cs', uni = 3595, tra = "s'", ccl = Low, liv = False, pro = "s", enp = "t"},+ TC {dat = Cc3, uni = 3596, tra = "c3", ccl = Low, liv = False, pro = "ch", enp = "t"},+ TC {dat = Cy', uni = 3597, tra = "y'", ccl = Low, liv = False, pro = "y", enp = "n"},+ TC {dat = Cd', uni = 3598, tra = "d'", ccl = Mid, liv = False, pro = "d", enp = "t"},+ TC {dat = Ct', uni = 3599, tra = "t'", ccl = Mid, liv = False, pro = "t", enp = "t"},+ TC {dat = Ct1, uni = 3600, tra = "t1", ccl = High, liv = False, pro = "th", enp = "t"},+ TC {dat = Ct2, uni = 3601, tra = "t2", ccl = Low, liv = False, pro = "th", enp = "t"},+ TC {dat = Ct3, uni = 3602, tra = "t3", ccl = Low, liv = False, pro = "th", enp = "t"},+ TC {dat = Cn', uni = 3603, tra = "n'", ccl = Low, liv = True, pro = "n", enp = "n"},+ TC {dat = Cd, uni = 3604, tra = "d", ccl = Mid, liv = False, pro = "d", enp = "t"},+ TC {dat = Ct, uni = 3605, tra = "t", ccl = Mid, liv = False, pro = "t", enp = "t"},+ TC {dat = Ct4, uni = 3606, tra = "t4", ccl = High, liv = False, pro = "th", enp = "t"},+ TC {dat = Ct5, uni = 3607, tra = "t5", ccl = Low, liv = False, pro = "th", enp = "t"},+ TC {dat = Ct6, uni = 3608, tra = "t6", ccl = Low, liv = False, pro = "th", enp = "t"},+ TC {dat = Cn, uni = 3609, tra = "n", ccl = Low, liv = True, pro = "n", enp = "n"},+ TC {dat = Cb, uni = 3610, tra = "b", ccl = Mid, liv = False, pro = "b", enp = "p"},+ TC {dat = Cp, uni = 3611, tra = "p", ccl = Mid, liv = False, pro = "p", enp = "p"},+ TC {dat = Cp1, uni = 3612, tra = "p1", ccl = High, liv = False, pro = "ph", enp = "p"},+ TC {dat = Cf, uni = 3613, tra = "f", ccl = High, liv = False, pro = "f", enp = "p"},+ TC {dat = Cp2, uni = 3614, tra = "p2", ccl = Low, liv = False, pro = "ph", enp = "p"},+ TC {dat = Cf', uni = 3615, tra = "f'", ccl = Low, liv = False, pro = "f", enp = "p"},+ TC {dat = Cp3, uni = 3616, tra = "p3", ccl = Low, liv = False, pro = "ph", enp = "p"},+ TC {dat = Cm, uni = 3617, tra = "m", ccl = Low, liv = True, pro = "m", enp = "m"},+ TC {dat = Cy, uni = 3618, tra = "y", ccl = Low, liv = True, pro = "y", enp = "y"},+ TC {dat = Cr, uni = 3619, tra = "r", ccl = Low, liv = True, pro = "r", enp = "n"},+ TC {dat = Cl, uni = 3621, tra = "l", ccl = Low, liv = True, pro = "l", enp = "n"},+ TC {dat = Cw, uni = 3623, tra = "w", ccl = Low, liv = True, pro = "w", enp = "w"},+ TC {dat = CsM, uni = 3624, tra = "s-", ccl = High, liv = False, pro = "s", enp = "t"},+ TC {dat = CsP, uni = 3625, tra = "s.", ccl = High, liv = False, pro = "s", enp = "t"},+ TC {dat = Cs, uni = 3626, tra = "s", ccl = High, liv = False, pro = "s", enp = "t"},+ TC {dat = Ch, uni = 3627, tra = "h", ccl = High, liv = True, pro = "h", enp = ""},+ TC {dat = Cl, uni = 3628, tra = "l'", ccl = Low, liv = True, pro = "l", enp = "n"},+ TC {dat = CO, uni = 3629, tra = "O", ccl = Mid, liv = True, pro = i_OO, enp = i_OO},+ TC {dat = Ch', uni = 3630, tra = "h'", ccl = Low, liv = True, pro = "h", enp = ""},++ TC {dat = CaP, uni = 3632, tra = "a.", ccl = Low, liv = False, pro = "a", enp = "a"},+ TC {dat = Ca, uni = 3633, tra = "a", ccl = Low, liv = False, pro = "a", enp = "a"},+ TC {dat = CaL, uni = 3634, tra = "a:", ccl = Low, liv = True, pro = "aa", enp = "aa"},+ TC {dat = Cam, uni = 3635, tra = "a+", ccl = Low, liv = True, pro = "am", enp = "am"},+ TC {dat = Ci, uni = 3636, tra = "i", ccl = Low, liv = False, pro = "i", enp = "i"},+ TC {dat = CiL, uni = 3637, tra = "i:", ccl = Low, liv = True, pro = "ii", enp = "ii"},+ TC {dat = Cv, uni = 3638, tra = "v", ccl = Low, liv = False, pro = i_ue, enp = i_ue},+ TC {dat = CvL, uni = 3639, tra = "v:", ccl = Low, liv = True, pro = i_uue, enp = i_uue},+ TC {dat = Cu, uni = 3640, tra = "u", ccl = Low, liv = False, pro = "u", enp = "u"},+ TC {dat = CuL, uni = 3641, tra = "u:", ccl = Low, liv = True, pro = "uu", enp = "uu"},+ TC {dat = Ce, uni = 3648, tra = "e", ccl = Low, liv = True, pro = "ee", enp = "ee"},+ TC {dat = Ce', uni = 3649, tra = "e'", ccl = Low, liv = True, pro = i_aae, enp = i_aae},+ TC {dat = CoL, uni = 3650, tra = "o:", ccl = Low, liv = True, pro = "oo", enp = "oo"},+ TC {dat = CaH, uni = 3651, tra = "a%", ccl = Low, liv = True, pro = "ay", enp = "ay"},+ TC {dat = CaE, uni = 3652, tra = "a&", ccl = Low, liv = True, pro = "ay", enp = "ay"},+ TC {dat = CL, uni = 3653, tra = "L", ccl = Low, liv = True, pro = "li", enp = "n"},+ TC {dat = CR, uni = 3654, tra = "R", ccl = Low, liv = True, pro = "ri", enp = "n"},+ TC {dat = CS, uni = 3655, tra = "S", ccl = Low, liv = True, pro = "", enp = ""},+ TC {dat = CT1, uni = 3656, tra = "T1", ccl = Low, liv = True, pro = "", enp = ""},+ TC {dat = CT2, uni = 3657, tra = "T2", ccl = Low, liv = True, pro = "", enp = ""},+ TC {dat = CT3, uni = 3658, tra = "T3", ccl = Low, liv = True, pro = "", enp = ""},+ TC {dat = CT4, uni = 3659, tra = "T4", ccl = Low, liv = True, pro = "", enp = ""},+ TC {dat = CK, uni = 3660, tra = "K", ccl = Low, liv = True, pro = "", enp = ""},+ TC {dat = CN0, uni = 3664, tra = "N0", ccl = Low, liv = False, pro = "0", enp = "0"},+ TC {dat = CN1, uni = 3665, tra = "N1", ccl = Low, liv = False, pro = "1", enp = "1"},+ TC {dat = CN2, uni = 3666, tra = "N2", ccl = Low, liv = False, pro = "2", enp = "2"},+ TC {dat = CN3, uni = 3667, tra = "N3", ccl = Low, liv = False, pro = "3", enp = "3"},+ TC {dat = CN4, uni = 3668, tra = "N4", ccl = Low, liv = False, pro = "4", enp = "4"},+ TC {dat = CN5, uni = 3669, tra = "N5", ccl = Low, liv = False, pro = "5", enp = "5"},+ TC {dat = CN6, uni = 3670, tra = "N6", ccl = Low, liv = False, pro = "6", enp = "6"},+ TC {dat = CN7, uni = 3671, tra = "N7", ccl = Low, liv = False, pro = "7", enp = "7"},+ TC {dat = CN8, uni = 3672, tra = "N8", ccl = Low, liv = False, pro = "8", enp = "8"},+ TC {dat = CN9, uni = 3673, tra = "N9", ccl = Low, liv = False, pro = "9", enp = "9"}+ ]++data ThaiDat =+ Ck | Ck1 | Ck2 | Ck3 | Cg | Cc | Cc1 | Cc2 | Cs' | + Cc3 | Cy' | Cd' | Ct' | Ct1 | Ct2 | Ct3 | Cn' | Cd | + Ct | Ct4 | Ct5 | Ct6 | Cn | Cb | Cp | Cp1 | Cf | + Cp2 | Cf' | Cp3 | Cm | Cy | Cr | Cl | Cw | CsM |+ CsP | Cs | Ch | Cl' | CO | Ch' | CaP | Ca | CaL |+ Cam | Ci | CiL | Cv | CvL | Cu | CuL | Ce | Ce' |+ CoL | CaH | CaE | CL | CR | CS | CT1 | CT2 | CT3 |+ CT4 | CK | CN0 | CN1 | CN2 | CN3 | CN4 | CN5 | CN6 |+ CN7 | CN8 | CN9+ deriving (Eq,Ord,Show)++-- testing with Wikipedia Swadesh list++testFile = "src/test.txt"+resultFile = "src/results.txt"++test = do+ s <- readFile testFile+ writeFile resultFile []+ mapM_ (testOne . tabs) $ lines s++testOne ws = case ws of+ m:t:p:r:_ -> appendFile resultFile $ concat [mn,"\t",t,"\t",p,"\t",r,"\t",result,"\n"] where+ result = unwords (intersperse "," (map thai2pron (filter (/=",") (words t))))+ mn = if result == r + then m+ else if result == p then (m ++ "+") else (m ++ "-") + _ -> return ()++testOneS ws = case ws of+ m:t:p:r:_ -> appendFile resultFile $ concat [m,"\t",t,"\t",pn,"\t",r,"\n"] where+ result = unwords (intersperse "," (map thai2pron (filter (/=",") (words t))))+ pn = if m == "+" + then r+ else p+ _ -> return ()++tabs s = case break (=='\t') s of+ ([], _:ws) -> tabs ws+ (w , _:ws) -> w:tabs ws+ _ -> [s]+++-- heuristics for finding syllables - unreliable, unfinished+uniSyllables :: [ThaiDat] -> [[ThaiDat]]+uniSyllables = reverse . (syll [] []) where+ syll sys sy is = case is of+ c:cs | isPreVowel c -> new [] is+ c:d:cs | isConsonant c && isConsonant d -> new [c] (d:cs) ---- no consonant clusters+ c:cs -> continue [c] cs ---- more rules to follow + _ -> sy:sys+ where+ new old = syll ((sy ++ old) : sys) []+ continue old = syll sys (sy ++ old)++
@@ -3,10 +3,23 @@ flags optimize=all_subs ; lin- UseV = mkVP ;--- ComplV2 v np = insertObject (v.c2 ++ np.s) (mkVP v) ;--- ComplV3 v np np2 = insertObject (v.c2 ++ np.s ++ v.c3 ++ np2.s) (mkVP v) ;+ UseV = predV ; + SlashV2a v = predV v ** {c2 = v.c2} ;++ Slash2V3 v np = insertObject <thbind v.c2 np.s : Str> (predV v) ** {c2 = v.c3} ;+ Slash3V3 v np = insertExtra <thbind v.c3 np.s : Str> (predV v) ** {c2 = v.c2} ;++ SlashV2A v ap = + insertExtra <thbind pen_s v.c3 ap.s : Str> (predV v) ** {c2 = v.c2} ; --- pen?++ SlashV2V v vp = ---- looks too simple compared with ComplVV+ insertExtra <thbind <v.c3 : Str> <infVP vp : Str> : Str> (predV v) ** {c2 = v.c2} ;+ SlashV2S v s = + insertExtra <thbind conjThat s.s : Str> (predV v) ** {c2 = v.c2} ;+ SlashV2Q v q = + insertExtra (q.s ! QIndir) (predV v) ** {c2 = v.c2} ;+ ComplVV vv vp = { s = \\p => let @@ -14,38 +27,53 @@ v = vp.s ! Pos in case vv.typ of {- VVPre => vv.s ++ neg ++ v ; - VVMid => neg ++ vv.s ++ v ; - VVPost => v ++ neg ++ vv.s- }+ VVPre => thbind vv.s neg v ; + VVMid => thbind neg vv.s v ; + VVPost => thbind v neg vv.s+ } ;+ e = [] } ; ------ ComplVS v s = insertObj (\\_ => conjThat ++ s.s) (predV v) ;--- ComplVQ v q = insertObj (\\_ => q.s ! QIndir) (predV v) ;------ ComplVA v ap = insertObj (ap.s) (predV v) ;--- ComplV2A v np ap = --- insertObj (\\_ => v.c2 ++ np.s ! Acc ++ ap.s ! np.a) (predV v) ;---- UseComp comp = comp ;------ AdvVP vp adv = insertObj (\\_ => adv.s) vp ;------ AdVVP adv vp = insertAdV adv.s vp ;------ ReflV2 v = insertObj (\\a => v.c2 ++ reflPron ! a) (predV v) ;------ PassV2 v = insertObj (\\_ => v.s ! VPPart) (predAux auxBe) ;------ UseVS, UseVQ = \vv -> {s = vv.s ; c2 = [] ; isRefl = vv.isRefl} ; + ComplVS v s = insertObj (mkNP (thbind conjThat s.s)) (predV v) ;+ ComplVQ v q = insertObj (mkNP (q.s ! QIndir)) (predV v) ; - CompAP ap = {s = \\p => polStr may_s p ++ ap.s} ;++ ComplVA v ap = insertObj ap (predV v) ; ++ ComplSlash vp np = insertObj (mkNP (thbind vp.c2 np.s)) vp ;++ UseComp comp = comp ** {e = []} ;++ SlashVV v vp = ---- too simple?+ insertObj (mkNP (infVP vp)) (predV (regV v.s)) ** {c2 = vp.c2} ;++ SlashV2VNP v np vp = + insertObj np+ (insertObj (mkNP (infVP vp)) (predV v)) ** {c2 = vp.c2} ;++ AdvVP vp adv = insertObj adv vp ;++ AdVVP adv vp = insertObj adv vp ; + + ReflVP vp = insertObj (mkNP (thbind vp.c2 reflPron)) vp ;++ PassV2 v = {s = \\p => thbind (polStr may_s p) thuuk_s ; e = thbind v.s1 v.s2} ; -- to put agent before verb; --- the place of neg?++ CompAP ap = {s = \\p => thbind (polStr may_s p) ap.s} ;+ CompNP np = {s = table {- Pos => pen_s ++ np.s ;- Neg => may_s ++ chay_s ++ np.s+ Pos => thbind pen_s np.s ;+ Neg => thbind may_s chay_s np.s } } ;- CompAdv a = {s = \\p => polStr may_s p ++ a.s} ; --- ?? + CompCN np = {s = table {+ Pos => thbind pen_s np.s ;+ Neg => thbind may_s chay_s np.s+ }+ } ;++ CompAdv a = {s = \\p => thbind (polStr may_s p) yuu_s a.s} ; --- works for place adverbs+ }+
@@ -0,0 +1,19 @@+main = interact (unlines . map mkOne . lines)++mkOne s = case tabs s of+ _:eng:tha:_ -> mkEntry eng tha+ _ -> ""++tabs s = case break (=='\t') s of+ ([], _:ws) -> tabs ws+ (w , _:ws) -> w:tabs ws+ _ -> [s]++-- rough approximation of POS+mkEntry eng tha = unwords [" ",ident,"=",mk,def,";"] where+ (ident,mk) = case words eng of+ "to":w:_ -> (w ++ "_V", "mkV")+ w:_ -> (w ++ "_N", "mkN")+ def = "(thbind \"" ++ takeWhile (/=',') tha ++ "\")"++
@@ -0,0 +1,93 @@+-- The only place where literal Thai strings are defined +-- (except for Lexicon and Structural).+-- Convert this into StringsThai by +-- gf+-- > rf -file=thai/src/StringsTha.gf | ps -env=quotes -to_thai | wf -file=thai/StringsTha.gf+-- สุคสันต์วันเกิด!++resource StringsTha = {++flags coding = utf8 ;++oper++aphai_s = "Op3ay" ; -- excuse2+baan_s = "bT2a:n" ; -- house+biar_s = "ebi:OrK" ; -- beer+ca_s = "ca." ; -- Modal+cet_s = "ecSd" ; -- seven+chan_s = "c1an" ; -- I+chay_s = "a%c2T1" ; -- yes+cheut_s = "ec2v:T2t" ; -- shirt2+chuay_s = "c2T1wy" ; -- help1+di_s = "di" ; -- I (fem)1+dii_s = "di:" ; -- hello2+duay_s = "dT2wy" ; -- help2+dvm_s = "dvm" ; -- drink+et_s = "eOSd" ; -- one'+haa_s = "hT2a:" ; -- five+hay_s = "a%hT2" ; -- give+hoog_s = "hT2Og" ; -- room+hok_s = "hk" ; -- six+jai_s = "a%j" ; -- understand2+kaaw_s = "eka:" ; -- nine+kew_s = "e'kT2w" ; -- glass (drink Classif)+khaw_s = "ek1a:" ; -- he+khon_s = "k2n" ; -- people Classif+khoo_s = "k1O" ; -- please+khoog_s = "k1Og" ; -- Possessive+khoop_s = "k1Ob" ; -- thank+khow_s = "ek1T2w" ; -- understand1+khun_s = "k2un'" ; -- you+koon_s = "kT1On" ; -- bye2+laa_s = "la:" ; -- bye1+lag_s = "hlag" ; -- houses Classif+lap_s = "hlab" ; -- sleep2 +lem_s = "elT1m" ; -- books Classif+mak_s = "ma:k" ; -- very+may_s = "a&mT1" ; -- not+m'ay_s = "a&hm" ; -- Question+mvvn_s = "hmv:T1n" ; -- ten thousand+nag_s = "hna.g" ; -- book1+nai_s = "a&hn" ; -- where2+nam_s = "na+" ; -- water+nan_s = "naT2n" ; -- that+nii_s = "ni:T2" ; -- this+nit_s = "nid" ; -- little1+noon_s = "nOn" ; -- sleep1+noi_s = "hnT1Oy" ; -- little2+nvg_s = "hnvg" ; -- one+pay_s = "a&p" ; -- go+peet_s = "e'pd" ; -- eight+pen_s = "epSn" ; -- be, can-know+phan_s = "p2an" ; -- thousand+phom_s = "p1m" ; -- I (masc)+puu_s = "p1u:T2" ; -- woman1+rai_s = "a&r" ; -- how-much2+rak_s = "rak" ; -- love+raw_s = "era:" ; -- we+rooy_s = "rT2Oy" ; -- hundred+saam_s = "sa:m" ; -- three+sawat_s = "swas" ; -- hello1+seen_s = "e'sn" ; -- hundred thousand+seua_s = "esv:T2O" ; -- shirt1+si_s = "s'i" ; -- Imperative+sii_s = "si:T1" ; -- four+sip_s = "sib" ; -- ten+soog_s = "sOg" ; -- two+svv_s = "sv:O" ; -- book2+thii_s = "t5i:T1" ; -- Ord+thoot_s = "o:t5r'" ; -- sorry2+thao_s = "et5T1a:" ; -- how-much1+tog_s = "tT2Og" ; -- must+waa_s = "wT1a:" ; -- that Conj+way_s = "a&hw" ; -- can-potent+yaa_s = "OyT1a:" ; -- Neg Imper+yaak_s = "Oya:k" ; -- want+yay_s = "a%hy'" ; -- big+yig_s = "hy'ig" ; -- woman2+yii_s = "yi:T1" ; -- two'+yin_s = "yin" ; -- you're-welcome1+yuu_s = "yu:" ; -- where0(?)++}
@@ -0,0 +1,209 @@+-- http://en.wiktionary.org/wiki/Appendix:Thai_Swadesh_list, 7/11/2011++1 I ฉัน , กู chǎn , kuu+2 you (singular) เธอ , มึง thəə , mʉŋ+3 he เขา kháo+4 we เรา rao+5 you (plural) พวกคุณ phûakkhun+6 they พวกเขา phûakkháo+7 this นิ้ níi+8 that นั่น nán+9 here ที่นี่ thîinîi+10 there ที่นั่น thîinân+11 who ผู้ใด phûuday+12 what อะไร ?aray+13 where ที่ใด thîiday+14 when เมื่อไร mʉ̂aray+15 how อย่างไร yàaŋray+16 not ไม่ mây+17 all ทั้งหมด tháŋmòt+18 many หลาย lǎay+19 some บ้าง bâaŋ+20 few สองสาม sɔ̌ɔŋsǎam+21 other อื่น ?ʉ̀ʉn+22 one หนึ่ง nʉ̀ŋ+23 two สอง sɔ̌ɔŋ+24 three สาม sǎam+25 four สี่ sìi+26 five ห้า hâa+27 big ใหญ่ , โต yày , too+28 long ยาว yaaw+29 wide กว้าง kwâaŋ+30 thick หนา nǎa+31 heavy หนัก nàk+32 small เล็ก , น้อย lék , nɔ́ɔy+33 short สั้น , เตี้ย sân , tîa+34 narrow แคบ khâeaep+35 thin บาง baaŋ+36 woman หญิง yǐŋ+37 man (adult male) ชาย chaay+38 man (human being) ผู้ , คน phûu , khon+39 child เด็ก , ศิศุ dèk , sìsù+40 wife เมีย , ภรรยา mia , phanrayaa+41 husband ผัว , สามี phǔa , sǎamii+42 mother แม่ mâeae+43 father พ่อ , บิดา phɔ̂ɔ , bìdaa+44 animal สัตว์ sàt+45 fish ปลา plaa+46 bird นก; วิหค (Sanskrit) nók , wíhòk+47 dog หมา; สุนัข (Sanskrit) mǎa , sùnák+48 louse เล็น , เหา len , hǎo+49 snake งู ŋuu+50 worm หนอน nɔ̌ɔn+51 tree ไม้ máay+52 forest ดง , ป่า doŋ , pàa+53 stick กิ่ง kìŋ+54 fruit หมาก màak+55 seed เม็ด mét+56 leaf ใบ bay+57 root ราก râak+58 bark (of a tree) เปลือก , ผิว plʉ̀ak , phǐw+59 flower ดอก , ปลี dɔ̀ɔk , plii+60 grass หญ้า yâa+61 rope เชือก chʉ̂ak+62 skin หนัง nǎŋ+63 meat เนื้อ nʉ́a+64 blood เลือด , โลหิต lʉ̂at , loohìt+65 bone กระดูก , ก้าง kradùuk , kâaŋ+66 fat (noun) มัน man+67 egg ไข่ khày+68 horn เขา khǎo+69 tail หาง hǎaŋ+70 feather ขน khǒn+71 hair ผม phǒm+72 head หัว hǔa+73 ear หู hǔu+74 eye ตา taa+75 nose จมูก camùuk+76 mouth ปาก pàak+77 tooth ฟัน fan+78 tongue (organ) ลิ้น lín+79 fingernail เล็บ lép+80 foot เท้า , ตีน tháaw , tiin+81 leg ขา khǎa+82 knee เข่า khào+83 hand มือ mʉʉ+84 wing ปิก pìik+85 belly พุง phuŋ+86 guts ไส้ sây+87 neck คอ , ศอ khɔɔ , sɔ̌ɔ+88 back หลัง lǎŋ+89 breast นม nom+90 heart ใจ cay+91 liver ตับ tàp+92 to drink ดื่ม dʉ̀ʉm+93 to eat กิน kin+94 to bite กัด kàt+95 to suck ดูด dùut+96 to spit ถ่ม , คาย thòm , khaay+97 to vomit อ้วก , อาเจียน ?ûak , ?aacian+98 to blow พัด phát+99 to breathe หายใจ hǎaycay+100 to laugh หัวเราะ hǔarɔ́+101 to see เห็น hěn+102 to hear ยิน , ฟัง yin , faŋ+103 to know รู้ rúu+104 to think คิด khít , ?àan+105 to smell มีกลิ่น miiklìn+106 fear กลัว , ยั่น klua , yân+107 to sleep นอน nɔɔn+108 to live อยู่ , อาศัย yùu , ?aasǎi+109 to die ตาย , วาย taay , waay+110 to kill ฆ่า , มล้าง khâa , maláaŋ+111 to fight สู้ , รบ sûu , róp+112 to hunt ล่า lâa+113 to hit ตี tii+114 to cut ตัด , บาด tàt , bàat+115 to split ผ่า phàa+116 to stab แทง , เสียบ thaeaeŋ , sìap+117 to scratch เกา kao+118 to dig ขุด khùt+119 to swim ว่าย wâay+120 to fly บิน bin+121 to walk เดิน dəən+122 to come มา maa+123 to lie (as in a bed) นอน nɔɔn+124 to sit นั่ง nâŋ+125 to stand ยืน yʉʉn+126 to turn (intransitive) หัน hǎn+127 to fall ตก , หล่น tòk , lòn+128 to give ให้ hây+129 to hold อุ้ม ?ûm+130 to squeeze คั้น khán+131 to rub ถู , นวด thǔu , nûat+132 to wash ล้าง láaŋ+133 to wipe เช็ด chét+134 to pull ดึง , ลาก dʉŋ , lâak+135 to push ผลัก phlàk+136 to throw ขว้าง , ปา khwâaŋ , paa+137 to tie ผูก , ล่าม phùuk , lâam+138 to sew เย็บ yép+139 to count นับ náp+140 to say พูด , บอก phûut , bɔ̀ɔk+141 to sing ร้อง rɔ́ɔŋ , khàp+142 to play เล่น lên+143 to float ลอย lɔɔy+144 to flow ไหล lǎy+145 to freeze แข็ง khǎeŋ+146 to swell ตุ่ม tùm+147 sun ตะวัน; พระอาทิตย์ (Sanskrit) tawan , phrá?aathít+148 moon เดือน; พระจันทร์ (Sanskrit) dʉan , phrácan+149 star ดาว; ดารา (Sanskrit) daaw , daaraa+150 water น้ำ; ชล (Sanskrit) náam , chon+151 rain ฝน fǒn+152 river แม่น้ำ , นที (Sanskrit) mâenáam , náthii+153 lake ทะเลสาบ thaleesàap+154 sea ทะเล; มหาสมุทร (Sanskrit) thalee , mahǎasamùt+155 salt เกลือ klʉa+156 stone หิน hǐn+157 sand ทราย saay+158 dust ฝุ่น; ธุลี (Sanskrit) fùn , thúlii+159 earth ดิน din+160 cloud เมฆ mêek+161 fog หมอก mɔ̀ɔk+162 sky ฟ้า , นภา fáa , napā+163 wind ลม lom+164 snow หิมะ himá+165 ice น้ำแข็ง náamkhǎeŋ+166 smoke ควัน khwan+167 fire ไฟ , อัคนี fay , akkhanii+168 ash เถ้า thâo+169 to burn เผา phǎo+170 road ทาง , หน thaaŋ , hǒn+171 mountain เขา , ภู , ดอย , คิริ phuu , khǎo , dɔɔy , khìrì+172 red แดง daeaeŋ+173 green เขียว khǐaw+174 yellow เหลือง lʉ̌aŋ+175 white ขาว khǎaw+176 black ดำ dam+177 night กลางคืน klaaŋkhʉʉn+178 day กลางวัน klaaŋwan+179 year ปี ,ขวบ pii , khùap+180 warm ร้อน , อุ่น rɔ́ɔn , ?ùn+181 cold หนาว , เซ็ง nǎaw , sen+182 full เต็ม tem+183 new ใหม่ mày+184 old แก่ , เฒ่า kàeae , thâo+185 good ดี dii+186 bad เลว , ร้้าย leew , ráay+187 rotten เน่า nâo+188 dirty สกปรก sòkkapròk+189 straight ดิ่ง , ตรง dìŋ , troŋ+190 round กลม , มน klom , mon+191 sharp (as a knife) คม khom+192 dull (as a knife) ทื่อ thʉ̂ʉ+193 smooth ละมุน lamun+194 wet เปียก pìak+195 dry แห้ง hâeaeŋ+196 correct แท้ , แม่น tháeae , mâeaen+197 near ใกล้ klây+198 far ไกล klay+199 right ขวา khwǎa+200 left ซ้าย sáay+201 at ที่ thîi+202 in ใน nay+203 with กับ , ด้วย kàp , dûay+204 and และ láe+205 if ถ้า , เผื่อ thâa , phʉ̀a+206 because เพราะ , ด้วย phrɔ́ , dûay+207 name ชื่อ , เรียก chʉ̂ʉ , rîak
@@ -0,0 +1,207 @@++ ฉัน , กู chăn , kuu chăn , kuu++ เธอ , มึง thəə , mʉŋ thəə , mʉŋ+- เขา kháw khăw++ เรา raw raw+- พวกคุณ phûakkhun phwkkhun+- พวกเขา phûakkháo phwkkhăw++ นิ้ ní ní+- นั่น nán nân+- ที่นี่ thîinîi thîinii+- ที่นั่น thîinân thîinan+- ผู้ใด phûuday phûuaydo+- อะไร aray aayro+- ที่ใด thîiday thîiaydo+- เมื่อไร mʉ̂aray eemʉʉɔɔayr+- อย่างไร yàaŋray yaaŋayr++ ไม่ mây mây+- ทั้งหมด tháŋmòt tháŋmt++ หลาย lăay lăay++ บ้าง bâaŋ bâaŋ++ สองสาม sɔ̆ɔŋsăam sɔ̆ɔŋsăam++ อื่น ʉ̀ʉn ʉ̀ʉn++ หนึ่ง nʉ̀ŋ nʉ̀ŋ++ สอง sɔ̆ɔŋ sɔ̆ɔŋ++ สาม săam săam++ สี่ sìi sìi ++ ห้า hâa hâa++ ใหญ่ , โต yày , too yày , too++ ยาว yaaw yaaw+- กว้าง kwâaŋ kwâaŋ++ หนา năa năa++ หนัก nàk nàk++ เล็ก , น้อย lék , nɔ́ɔy lék , nɔ́ɔy++ สั้น , เตี้ย sân , tîa sân , tîa+- แคบ khɛɛp khɛɛ++ บาง baaŋ baaŋ++ หญิง yĭŋ yĭŋ++ ชาย chaay chaay++ ผู้ , คน phûu khon phûu khon+- เด็ก , ศิศุ dèk , sìsù dèk , sìtu+- เมีย , ภรรยา mia , phanrayaa mia , phrnyaa++ ผัว , สามี phăw , săamii phăw , săamii++ แม่ mɛ̂ɛ mɛ̂ɛ+- พ่อ , บิดา phɔ̂ɔ , bìdaa phɔ̂ɔ , bìtaa+- สัตว์ sàt sàtwo++ ปลา plaa plaa+- นก; วิหค (Sanskrit) nók , wíhòk nk , wikho +- หมา; สุนัข (Sanskrit) mǎa , sùnák màa , sŭnakh ++ เล็น , เหา len , hăw len , hăw++ งู ŋuu ŋuu+- หนอน nɔ̌ɔn nɔ̆ɔn++ ไม้ máy máy++ ดง , ป่า doŋ , pàa doŋ , pàa++ กิ่ง kìŋ kìŋ++ หมาก màak màak++ เม็ด mét mét++ ใบ bay bay++ ราก râak râak+- เปลือก , ผิว plʉ̀ak , phĭw eeplʉʉɔɔk , phĭw++ ดอก , ปลี dɔ̀ɔk , plii dɔ̀ɔk , plii++ หญ้า yâa yâa+- เชือก chʉ̂ak eechʉʉɔɔk++ หนัง năŋ năŋ+- เนื้อ nʉ́a eenʉʉɔɔ+- เลือด , โลหิต lʉ̂at , loohìt eelʉʉɔɔd , looit+- กระดูก , ก้าง kradùuk , kâaŋ kràtuuk , kâaŋ++ มัน man man+- ไข่ khày khày++ เขา khăw khăw++ หาง hăaŋ hăaŋ+- ขน khǒn khon+- ผม phǒm phom+- หัว hǔa hăw++ หู hŭu hŭu++ ตา taa taa+- จมูก camùuk cmuuk++ ปาก pàak pàak++ ฟัน fan fan++ ลิ้น lín lín++ เล็บ lép lép++ เท้า , ตีน tháw , tiin tháw , tiin++ ขา khăa khăa++ เข่า khàw khàw+- มือ mʉʉ mʉʉɔɔ++ ปิก pìk pìk++ พุง phuŋ phuŋ++ ไส้ sây sây++ คอ , ศอ khɔɔ , sɔ̆ɔ khɔɔ , sɔ̆ɔ++ หลัง lăŋ lăŋ++ นม nom nom++ ใจ cay cay++ ตับ tàp tàp++ ดื่ม dʉ̀ʉm dʉ̀ʉm++ กิน kin kin++ กัด kàt kàt++ ดูด dùut dùut+- ถ่ม , คาย thòm , khaay thm , khaay+- อ้วก , อาเจียน ûak , aacian wko , aaeeciiyno++ พัด phát phát++ หายใจ hăaycay hăaycay+- หัวเราะ hǔarɔ́ hăwrɔ++ เห็น hĕn hĕn++ ยิน , ฟัง yin , faŋ yin , faŋ++ รู้ rúu rúu++ คิด khít khít+- มีกลิ่น miikllîn mîiklîn++ กลัว , ยั่น klaw , yân klaw , yân++ นอน nɔɔn nɔɔn+- อยู่ , อาศัย yùu , aasǎi yuu , àatay++ ตาย , วาย taay , waay taay , waay+- ฆ่า , มล้าง khâa , maláaŋ khâa , mláaŋ+- สู้ , รบ sûu , róp sûu , rop++ ล่า lâa lâa++ ตี tii tii++ ตัด , บาด tàt , bàat tàt , bàat++ ผ่า phàa phàa+- แทง , เสียบ thɛɛŋ , sìap thɛɛ , sìap++ เกา kaw kaw++ ขุด khùt khùt++ ว่าย wâay wâay++ บิน bin bin++ เดิน dəən dəən++ มา maa maa++ นอน nɔɔn nɔɔn++ นั่ง nâŋ nâŋ++ ยืน yʉʉn yʉʉn++ หัน hăn hăn+- ตก , หล่น tòk , lòn tok , ln++ ให้ hây hây++ อุ้ม ûm ûm++ คั้น khán khán+- ถู , นวด thǔu , nûat thŭu , nwt++ ล้าง láaŋ láaŋ++ เช็ด chét chét++ ดึง , ลาก dʉŋ , lâak dʉŋ , lâak++ ผลัก phlàk phlàk++ ขว้าง , ปา khwâaŋ , paa khwâaŋ , paa++ ผูก , ล่าม phùuk , lâam phùuk , lâam++ เย็บ yép yép++ นับ náp náp++ พูด , บอก phûut , bɔ̀ɔk phûut , bɔ̀ɔk++ ร้อง rɔ́ɔŋ rɔ́ɔŋ++ เล่น lêen lêen++ ลอย lɔɔy lɔɔy++ ไหล lăy lăy++ แข็ง khɛ̆ŋ khɛ̆ŋ++ ตุ่ม tùm tùm+- ตะวัน , พระ อาทิตย์ tawan , phrá aathít tawan , phrâɔɔaatity +- เดือน , พระจันทร์ dʉan , phrácan eedʉʉɔɔn , phrátanthr +- ดาว , ดารา daaw , daaraa daaw , daanaa +- น้ำ , ชล náam , chon nám , chlo +- ฝน fǒn fon+- แม่น้ำ , นที mɛ̂ɛnám , náthii mɛ̂ɛnam , ntii +- ทะเลสาบ thaleesàap thaeeltaab+- ทะเล , มหาสมุทร thalee , mahǎasamùt thaeel , maasmuthr +- เกลือ klʉa eeklʉʉɔɔ++ หิน hĭn hĭn+- ทราย saay thraay+- ฝุ่น; ธุลี fùn , thúlii fùn , thunii ++ ดิน din din+- เมฆ mêek mee++ หมอก mɔ̀ɔk mɔ̀ɔk+- ฟ้า , นภา fáa , napaa fáa , npaa++ ลม lom lom+- หิมะ himá hĭma+- น้ำแข็ง náamkhǎeŋ nám0x25bɛkhŋ++ ควัน khwan khwan+- ไฟ , อัคนี fay , akkhanii fay , àknii++ เถ้า thâw thâw++ เผา phăw phăw+- ทาง , หน thaaŋ , hǒn thaaŋ , no+- เขา , ภู , ดอย , คิริ khăw , phuu , dɔɔy , khìrì khăw , phuu , dɔɔy , khini+- แดง dɛɛŋ dɛɛ++ เขียว khĭaw khĭaw+- เหลือง lʉ̌aŋ eehlʉʉɔɔŋ++ ขาว khăaw khăaw++ ดำ dam dam++ กลางคืน klaaŋkhʉʉn klaaŋkhʉʉn++ กลางวัน klaaŋwan klaaŋwan+- ปี ,ขวบ pii , khùap pii , khwb++ ร้อน , อุ่น rɔ́ɔn , ùn rɔ́ɔn , ùn++ หนาว , เซ็ง năaw , seŋ năaw , seŋ++ เต็ม tem tem++ ใหม่ mày mày++ แก่ , เฒ่า kɛ̀ɛ , thâw kɛ̀ɛ , thâw++ ดี dii dii+- เลว , ร้้าย leew , ráay lwee ráay++ เน่า nâw nâw+- สกปรก sòkkapròk skprk+- ดิ่ง , ตรง dìŋ , troŋ dìŋ , trŋ+- กลม , มน klom , mon klm , mon++ คม khom khom+- ทื่อ thʉ̂ʉ thʉ̂ʉɔɔ++ ละมุน lamun lamun+- เปียก pìak pìak++ แห้ง hɛ̂ɛŋ hɛ̂ɛŋ++ แท้ , แม่น thɛ́ɛ , mɛ̂ɛn thɛ́ɛ , mɛ̂ɛn++ ใกล้ klây klây++ ไกล klay klay++ ขวา khwăa khwăa++ ซ้าย sáay sáay++ ที่ thîi thîi++ ใน nay nay+- กับ , ด้วย kàp , dûay kàp , dwyo+- และ láe lɛ+- ถ้า , เผื่อ thâa , phʉ̀a thâa , eephʉʉɔɔ+- เพราะ , ด้วย phrɔ́ , dûay phrɔ , dwyo+- ชื่อ , เรียก chʉ̂ʉ , rîak chʉ̂ʉɔɔ , rîak
@@ -1,2 +1,2 @@-concrete CatUrd of Cat = CommonX - [Adv,AdN] ** CatHindustani with +concrete CatUrd of Cat = CommonX - [Adv,AdN,SC] ** CatHindustani with (ResHindustani = ResUrd) ;
@@ -4,8 +4,8 @@ -- -- This module contains operations that are needed to make the -- resource syntax work. -resource CommonHindustani = ParamX ** open Prelude,Predef in {-+resource CommonHindustani = ParamX ** open Prelude, Predef in {+--interface CommonHindustani = ParamX ** open Prelude,Predef,StringsHindustani1 in { flags coding = utf8 ; oper@@ -71,105 +71,8 @@ NPCase = NPC Case | NPObj | NPErg ; Order = ODir | OQuest ; - - oper - copula : CTense -> Number -> UPerson -> Gender -> Str = \t,n,p,g -> - case <t,n,p,g> of {- <CPresent,Sg,Pers1,_ > => "ہوں" ;- <CPresent,Sg,Pers2_Casual,_ > => "ہے" ;- <CPresent,Sg,Pers2_Familiar,_ > => "ہو" ;- <CPresent,Sg,Pers2_Respect,_ > => "ہیں" ;- <CPresent,Sg,Pers3_Near,_ > => "ہے" ;- <CPresent,Sg,Pers3_Distant,_ > => "ہے" ;- <CPresent,Pl,Pers1,_ > => "ہیں" ;- <CPresent,Pl,Pers2_Casual,_ > => "ہو" ;- <CPresent,Pl,Pers2_Familiar,_ > => "ہو" ;- <CPresent,Pl,Pers2_Respect,_ > => "ہیں" ;- <CPresent,Pl,Pers3_Near,_ > => "ہیں" ;- <CPresent,Pl,Pers3_Distant,_ > => "ہیں" ;- <CPast,Sg,Pers1,Masc > => "تھا" ;- <CPast,Sg,Pers1,Fem > => "تھی" ;- <CPast,Sg,Pers2_Casual,Masc > => "تھا" ;- <CPast,Sg,Pers2_Casual,Fem > => "تھی" ;- <CPast,Sg,Pers2_Familiar,Masc > => "تh-ا" ;- <CPast,Sg,Pers2_Familiar,Fem > => "تھی" ;- <CPast,Sg,Pers2_Respect,Masc > => "تھے" ;- <CPast,Sg,Pers2_Respect,Fem > => "تھیں" ;- <CPast,Sg,Pers3_Near,Masc > => "تh-ا" ;- <CPast,Sg,Pers3_Near,Fem > => "تھی" ;- <CPast,Sg,Pers3_Distant,Masc > => "تh-ا" ;- <CPast,Sg,Pers3_Distant,Fem > => "تھی" ;- <CPast,Pl,Pers1,Masc > => "تھے" ;- <CPast,Pl,Pers1,Fem > => "تھیں" ;- <CPast,Pl,Pers2_Casual,Masc > => "تھے" ;- <CPast,Pl,Pers2_Casual,Fem > => "تھیں" ;- <CPast,Pl,Pers2_Familiar,Masc > => "تھے" ;- <CPast,Pl,Pers2_Familiar,Fem > => "تھیں" ;- <CPast,Pl,Pers2_Respect,Masc > => "تھے" ;- <CPast,Pl,Pers2_Respect,Fem > => "تھیں" ;- <CPast,Pl,Pers3_Near,Masc > => "تھے" ;- <CPast,Pl,Pers3_Near,Fem > => "تھیں" ;- <CPast,Pl,Pers3_Distant,Masc > => "تھے" ;- <CPast,Pl,Pers3_Distant,Fem > => "تھیں" ;- <CFuture,Sg,Pers1,Masc > => "گا" ;- <CFuture,Sg,Pers1,Fem > => "گی" ;- <CFuture,Sg,Pers2_Casual,Masc > => "گا" ;- <CFuture,Sg,Pers2_Casual,Fem > => "گی" ;- <CFuture,Sg,Pers2_Familiar,Masc > => "گے" ;- <CFuture,Sg,Pers2_Familiar,Fem > => "گی" ;- <CFuture,Sg,Pers2_Respect,Masc > => "گے" ;- <CFuture,Sg,Pers2_Respect,Fem > => "گی" ;- <CFuture,Sg,Pers3_Near,Masc > => "گا" ;- <CFuture,Sg,Pers3_Near,Fem > => "گی" ;- <CFuture,Sg,Pers3_Distant,Masc > => "گا" ;- <CFuture,Sg,Pers3_Distant,Fem > => "گی" ;- <CFuture,Pl,Pers1,Masc > => "گے" ;- <CFuture,Pl,Pers1,Fem > => "گی" ;- <CFuture,Pl,Pers2_Casual,Masc > => "گے" ;- <CFuture,Pl,Pers2_Casual,Fem > => "گی" ;- <CFuture,Pl,Pers2_Familiar,Masc > => "گے" ;- <CFuture,Pl,Pers2_Familiar,Fem > => "گی" ;- <CFuture,Pl,Pers2_Respect,Masc > => "گے" ;- <CFuture,Pl,Pers2_Respect,Fem > => "گی" ;- <CFuture,Pl,Pers3_Near,Masc > => "گے" ;- <CFuture,Pl,Pers3_Near,Fem > => "گے" ;- <CFuture,Pl,Pers3_Distant,Masc > => "گے" ;- <CFuture,Pl,Pers3_Distant,Fem > => "گی" - - - } ;- raha : Gender -> Number -> Str = \g,n -> - (regAdjective "رہا").s ! n ! g ! Dir ! Posit ;-- cka : Gender -> Number -> Str = \g,n -> - (regAdjective "چكا").s ! n ! g ! Dir ! Posit ;- - hw : UPerson -> Number -> Str = \pp,n -> - case <pp,n> of {- <Pers1,_> => "ہوں";- <_,Pl> => "ہوں";- <_,_> => "ہو"- };- - ------------------------------------------------ -- Hindustani Adjectives- ------------------------------------------------ - Adjective = { s: Number => Gender => Case => Degree => Str };- regAdjective : Str -> Adjective; - regAdjective x = case x of {- acch + ("ا"|"اں") => mkAdjective x ("بہت" ++ x) ("سب سے" ++ x) (acch + "ے") ("بہت" ++ acch + "ے") ("سب سے" ++ acch + "ے") (acch + "ے") ("بہت" ++ acch + "ے") ("سب سے" ++ acch + "ے")- (acch + "ی") ("بہت" ++ acch + "ی") ("سب سے" ++ acch + "ی") (acch + "ی") ("بہت" ++ acch + "ی") ("سب سے" ++ acch + "ی") (acch + "ی") ("بہت" ++ acch + "ی") ("سب سے" ++ acch + "ی")- (acch +"ے") ("بہت" ++ acch + "ے") ("سب سے" ++ acch + "ے") (acch + "ے") ("بہت" ++ acch + "ے") ("سب سے" ++ acch + "ے") (acch + "ے") ("بہت" ++ acch + "ے") ("سب سے" ++ acch + "ے")- (acch + "ی") ("بہت" ++ acch + "ی") ("سب سے" ++ acch + "ی") (acch + "ی") ("بہت" ++ acch + "ی") ("سب سے" ++ acch + "ی") (acch + "ی") ("بہت" ++ acch + "ی") ("سب سے" ++ acch + "ی");- - _ => mkAdjective x ("بہت" ++ x) ("سب سے" ++ x) x ("بہت" ++ x) ("سب سے" ++ x) x ("بہت" ++ x) ("سب سے" ++ x)- x ("بہت" ++ x) ("سب سے" ++ x) x ("بہت" ++ x) ("سب سے" ++ x) x ("بہت" ++ x) ("سب سے" ++ x)- x ("بہت" ++ x) ("سب سے" ++ x) x ("بہت" ++ x) ("سب سے" ++ x) x ("بہت" ++ x) ("سب سے" ++ x)- x ("بہت" ++ x) ("سب سے" ++ x) x ("بہت" ++ x) ("سب سے" ++ x) x ("بہت" ++ x) ("سب سے" ++ x)- - }; - + + oper mkAdjective : (x1,x2,x3,x4,x5,x6,x7,x8,x9,x10,x11,x12,x13,x14,x15,x16,x17,x18,x19,x20,x21,x22,x23,x24,x25,x26,x27,x28,x29,x30,x31,x32,x33,x34,x35,x36:Str) -> Adjective = \y1,y2,y3,y4,y5,y6,y7,y8,y9,y10,y11,y12,y13,y14,y15,y16,y17,y18,y19,y20,y21,y22,y23,y24,y25,y26,y27,y28,y29,y30,y31,y32,y33,y34,y35,y36 -> {@@ -249,34 +152,10 @@ } }; - compoundAdj : Str -> Str -> Adjective = \s1,s2 -> mkCompoundAdj (regAdjective s1) (regAdjective s2) ;- mkCompoundAdj : Adjective -> Adjective -> Adjective ;- mkCompoundAdj adj1 adj2 = {s = \\n,g,c,d => adj1.s ! n ! g ! c ! d ++ adj2.s ! n ! g ! c ! d} ;+ Adjective = { s: Number => Gender => Case => Degree => Str };+ Verb : Type = {s : VerbForm => Str} ;-- predV : Verb -> VPH ;- predV v = {- s = \\vh => - case vh of {- VPTense VPPres (Ag g n p) => {fin = copula CPresent n p g ; inf = v.s ! VF Imperf p n g } ;- VPTense VPPast (Ag g n p) => {fin = [] ; inf =v.s ! VF Perf p n g} ;- VPTense VPFutr (Ag g n p) => {fin = copula CFuture n p g ; inf = v.s ! VF Subj p n g } ;- VPTense VPPerf (Ag g n p) => { fin = [] ; inf = v.s ! Root ++ cka g n } ; - VPStem => {fin = [] ; inf = v.s ! Root};- VPInf => {fin = v.s ! Inf_Obl ; inf = v.s ! Root}; -- for V2V like sonE ky altja krna , check if it is being used anywhere else- VPImp => {fin = v.s ! VF Subj Pers3_Near Pl Masc ; inf = v.s ! Root};- _ => {fin = [] ; inf = v.s ! Root} - };- obj = {s = [] ; a = defaultAgr} ;- subj = VIntrans ;- inf = v.s ! Inf;- ad = [];- embComp = [];- prog = False ;- comp = \\_ => []- } ; - defaultAgr : Agr = agrP3 Masc Sg ; agrP3 : Gender -> Number -> Agr = \g,n -> Ag g n Pers3_Distant ; toAgr : Number -> UPerson -> Gender -> Agr = \n,p,g -> @@ -300,8 +179,9 @@ giveGender : Agr -> Gender =\a -> case a of { Ag g _ _ => g };- insertSubj : UPerson -> Str -> Str = \p,s -> - case p of { Pers1 => s ++ "وں" ; _ => s ++ "ے"};+ +-- insertSubj : UPerson -> Str -> Str = \p,s -> +-- case p of { Pers1 => s ++ "وں" ; _ => s ++ "ے"}; mkOrd : Str -> Str = \s -> case s of {@@ -311,6 +191,7 @@ "چار" => "چوتھا"; "چھ" => "چھٹا"; _ => s ++ "واں"- }; + };+ }
@@ -112,4 +112,137 @@ _ => ppf ! Dir ++ "نے" } } ;+ + +conjThat = "كہ" ;+ insertSubj : UPerson -> Str -> Str = \p,s -> + case p of { Pers1 => s ++ "واں" ; _ => s ++ "ے"}; -- check with prasad for vn~+ + agr = "اگر" ;+ awr = "اور" ;+ ky = "كی" ;+ jn = "جن" ;+ js = "جس" ;+ jw = "جو" ;+ kw = "كو" ;+ mt = "مت" ;+ nE = "نے" ;+ nh = "نا" ;+ sE = "سے" ;+ waN = "واں" ; + hE = "ہے" ;+ comma = "," ;+ indfArt = "اك" ; + kwd = "خود" ; ++copula : CTense -> Number -> UPerson -> Gender -> Str = \t,n,p,g -> + case <t,n,p,g> of {+ <CPresent,Sg,Pers1,_ > => "ہوں" ;+ <CPresent,Sg,Pers2_Casual,_ > => "ہے"; + <CPresent,Sg,Pers2_Familiar,_ > => "ہو" ;+ <CPresent,Sg,Pers2_Respect,_ > => "ہیں" ;+ <CPresent,Sg,Pers3_Near,_ > => "ہے" ;+ <CPresent,Sg,Pers3_Distant,_ > => "ہے" ;+ <CPresent,Pl,Pers1,_ > => "ہیں" ;+ <CPresent,Pl,Pers2_Casual,_ > => "ہو" ;+ <CPresent,Pl,Pers2_Familiar,_ > => "ہو" ;+ <CPresent,Pl,Pers2_Respect,_ > => "ہیں" ;+ <CPresent,Pl,Pers3_Near,_ > => "ہیں" ;+ <CPresent,Pl,Pers3_Distant,_ > => "ہیں" ;+ <CPast,Sg,Pers1,Masc > => "تھا" ;+ <CPast,Sg,Pers1,Fem > => "تھی" ;+ <CPast,Sg,Pers2_Casual,Masc > => "تھا" ;+ <CPast,Sg,Pers2_Casual,Fem > => "تھی" ;+ <CPast,Sg,Pers2_Familiar,Masc > => "تh-ا" ;+ <CPast,Sg,Pers2_Familiar,Fem > => "تھی" ;+ <CPast,Sg,Pers2_Respect,Masc > => "تھے" ;+ <CPast,Sg,Pers2_Respect,Fem > => "تھیں" ;+ <CPast,Sg,Pers3_Near,Masc > => "تh-ا" ;+ <CPast,Sg,Pers3_Near,Fem > => "تھی" ;+ <CPast,Sg,Pers3_Distant,Masc > => "تh-ا" ;+ <CPast,Sg,Pers3_Distant,Fem > => "تھی" ;+ <CPast,Pl,Pers1,Masc > => "تھے" ;+ <CPast,Pl,Pers1,Fem > => "تھیں" ;+ <CPast,Pl,Pers2_Casual,Masc > => "تھے" ;+ <CPast,Pl,Pers2_Casual,Fem > => "تھیں" ;+ <CPast,Pl,Pers2_Familiar,Masc > => "تھے" ;+ <CPast,Pl,Pers2_Familiar,Fem > => "تھیں" ;+ <CPast,Pl,Pers2_Respect,Masc > => "تھے" ;+ <CPast,Pl,Pers2_Respect,Fem > => "تھیں" ;+ <CPast,Pl,Pers3_Near,Masc > => "تھے" ;+ <CPast,Pl,Pers3_Near,Fem > => "تھیں" ;+ <CPast,Pl,Pers3_Distant,Masc > => "تھے" ;+ <CPast,Pl,Pers3_Distant,Fem > => "تھیں" ;+ <CFuture,Sg,Pers1,Masc > => "گا" ;+ <CFuture,Sg,Pers1,Fem > => "گی" ;+ <CFuture,Sg,Pers2_Casual,Masc > => "گا" ;+ <CFuture,Sg,Pers2_Casual,Fem > => "گی" ;+ <CFuture,Sg,Pers2_Familiar,Masc > => "گے" ;+ <CFuture,Sg,Pers2_Familiar,Fem > => "گی" ;+ <CFuture,Sg,Pers2_Respect,Masc > => "گے" ;+ <CFuture,Sg,Pers2_Respect,Fem > => "گی" ;+ <CFuture,Sg,Pers3_Near,Masc > => "گا" ;+ <CFuture,Sg,Pers3_Near,Fem > => "گی" ;+ <CFuture,Sg,Pers3_Distant,Masc > => "گا" ;+ <CFuture,Sg,Pers3_Distant,Fem > => "گی" ;+ <CFuture,Pl,Pers1,Masc > => "گے" ;+ <CFuture,Pl,Pers1,Fem > => "گی" ;+ <CFuture,Pl,Pers2_Casual,Masc > => "گے" ;+ <CFuture,Pl,Pers2_Casual,Fem > => "گی" ;+ <CFuture,Pl,Pers2_Familiar,Masc > => "گے" ;+ <CFuture,Pl,Pers2_Familiar,Fem > => "گی" ;+ <CFuture,Pl,Pers2_Respect,Masc > => "گے" ;+ <CFuture,Pl,Pers2_Respect,Fem > => "گی" ;+ <CFuture,Pl,Pers3_Near,Masc > => "گے" ;+ <CFuture,Pl,Pers3_Near,Fem > => "گے" ;+ <CFuture,Pl,Pers3_Distant,Masc > => "گے" ;+ <CFuture,Pl,Pers3_Distant,Fem > => "گی" + + } ;+ + raha : Gender -> Number -> Str = \g,n -> + (regAdjective "رہا").s ! n ! g ! Dir ! Posit ;++ cka : Gender -> Number -> Str = \g,n -> + (regAdjective "چكا").s ! n ! g ! Dir ! Posit ;+ + hw : UPerson -> Number -> Str = \pp,n -> + case <pp,n> of {+ <Pers1,_> => "ہوں";+ <_,Pl> => "ہوں";+ <_,_> => "ہو"+ };+ + hwa : Agr -> Str = \agr ->+ let n = (fromAgr agr).n;+ p = (fromAgr agr).p;+ g = (fromAgr agr).g;+ in+ case <n,g> of {+ <Sg,Masc> => "ہوا";+ <Sg,Fem> => "ہوی";+ <Pl,Masc> => "ہوے" ;+ <Pl,Fem> => "ہوی"+ }; + + -----------------------------------------------+ -- Hindustani Adjectives+ -----------------------------------------------+ + Adjective = { s: Number => Gender => Case => Degree => Str };+ + regAdjective : Str -> Adjective; + regAdjective x = case x of {+ acch + ("ا"|"اں") => mkAdjective x ("بہت" ++ x) ("سب سے" ++ x) (acch + "ے") ("بہت" ++ acch + "ے") ("سب سے" ++ acch + "ے") (acch + "ے") ("بہت" ++ acch + "ے") ("سب سے" ++ acch + "ے")+ (acch + "ی") ("بہت" ++ acch + "ی") ("سب سے" ++ acch + "ی") (acch + "ی") ("بہت" ++ acch + "ی") ("سب سے" ++ acch + "ی") (acch + "ی") ("بہت" ++ acch + "ی") ("سب سے" ++ acch + "ی")+ (acch +"ے") ("بہت" ++ acch + "ے") ("سب سے" ++ acch + "ے") (acch + "ے") ("بہت" ++ acch + "ے") ("سب سے" ++ acch + "ے") (acch + "ے") ("بہت" ++ acch + "ے") ("سب سے" ++ acch + "ے")+ (acch + "ی") ("بہت" ++ acch + "ی") ("سب سے" ++ acch + "ی") (acch + "ی") ("بہت" ++ acch + "ی") ("سب سے" ++ acch + "ی") (acch + "ی") ("بہت" ++ acch + "ی") ("سب سے" ++ acch + "ی");+ + _ => mkAdjective x ("بہت" ++ x) ("سب سے" ++ x) x ("بہت" ++ x) ("سب سے" ++ x) x ("بہت" ++ x) ("سب سے" ++ x)+ x ("بہت" ++ x) ("سب سے" ++ x) x ("بہت" ++ x) ("سب سے" ++ x) x ("بہت" ++ x) ("سب سے" ++ x)+ x ("بہت" ++ x) ("سب سے" ++ x) x ("بہت" ++ x) ("سب سے" ++ x) x ("بہت" ++ x) ("سب سے" ++ x)+ x ("بہت" ++ x) ("سب سے" ++ x) x ("بہت" ++ x) ("سب سے" ++ x) x ("بہت" ++ x) ("سب سے" ++ x)+ + }; + }
@@ -11,10 +11,10 @@ RelativeUrd, ConjunctionUrd, PhraseUrd, - TextUrd - [Adv,AdN], + TextUrd - [Adv,AdN,SC], -- TextX - [Adv,AdN], StructuralUrd, - TenseX - [Adv,AdN], + TenseX - [Adv,AdN,SC], IdiomUrd ** {
@@ -119,7 +119,7 @@ love_N = mkN "محبت" ; love_V2 = mkV2 (compoundV "پیار" do_V2) "كو"; man_N = mkN "آدمی" "آدمی" "آدمی" "آدمی" "آدمیوں" "آدمیو" masculine ; - married_A2 = mkA "[شادی كرنa]" "سے" ; + married_A2 = mkA "شادی شدہ" "سے" ; meat_N = mkN "گوشت" ; milk_N = mkN "دودھ" ; moon_N = mkN "چاند" ; @@ -162,7 +162,7 @@ seek_V2 = mkV2 (compoundV "تلاش" do_V2) ; see_V2 = mkV2 (mkV "دیكھنا") ; sell_V3 = mkV3 (mkV "بیچنا") "كو" ""; - send_V3 = mkV3 (mkV "بھیجنا") "كو" "كو"; + send_V3 = mkV3 (mkV "بھیجنا") "كو" ""; sheep_N = mkN "بھیڑ" feminine ; ship_N = mkN "جہاز" ; shirt_N = mkN "قمیص" feminine; @@ -352,7 +352,7 @@ wash_V2 = mkV2 (mkV "دھونا") ; wipe_V2 = mkV2 (compoundV "صاف" (mkV "كرنا" )); ----- other_A = regA "?تہعر" ; +---- other_A = regA "؟تہعر" ; grammar_N = mkN "گردان" ; language_N = mkN "زبان" feminine ; @@ -361,7 +361,7 @@ ---- added 4/6/2007 john_PN = mkPN "جان" ; question_N = mkN "سوال" ; --- ready_A = regA "رعادی" ; + ready_A = mkA "تیار" ; reason_N = mkN "وجہ" feminine ; today_Adv = mkAdv "آج" ; uncertain_A = mkA ["غیریقینی"] ;
@@ -50,7 +50,7 @@ eq : Str -> Str -> Bool = \s1,s2-> (pbool2bool (eqStr s1 s2)) ; RefPron : Str; - RefPron = "خود"; + RefPron = kwd ; ---------------------------------------------------------- -- Grammar part @@ -60,47 +60,23 @@ toNP : ( Case => Str) -> NPCase -> Str = \pn, npc -> case npc of { NPC c => pn ! c ; NPObj => pn ! Dir ; - NPErg => pn ! Obl ++ "نے" + NPErg => pn ! Obl ++ nE } ; detcn2NP : (Determiner) -> Noun -> NPCase -> Number -> Str = \dt,cn,npc,nn -> case npc of { -- NPC c => dt.s ! Sg ! Masc ++ cn.s ! nn ! c ; --changed while phrasebook e.g tyry beti where gender of determiner 'tyry' should be dependent on gender of common noum e.g 'beti' NPC c => dt.s ! nn ! cn.g ! c ++ cn.s ! nn ! c ; NPObj => dt.s ! nn ! cn.g ! Obl ++ cn.s ! nn ! Dir ; - NPErg => dt.s ! nn ! cn.g ! Obl ++ cn.s ! nn ! Obl ++ "نے" + NPErg => dt.s ! nn ! cn.g ! Obl ++ cn.s ! nn ! Obl ++ nE } ; det2NP : (Determiner) -> NPCase -> Str = \dt,npc -> case npc of { NPC c => dt.s ! Sg ! Masc ! c ; NPObj => dt.s ! Sg ! Masc ! Dir ; - NPErg => dt.s ! Sg ! Masc ! Obl ++ "نے" + NPErg => dt.s ! Sg ! Masc ! Obl ++ nE } ; ------------------------------------------ -- Agreement transformations ----------------------------------------- -{- toAgr : Number -> UPerson -> Gender -> Agr = \n,p,g -> - Ag g n p; - - - fromAgr : Agr -> {n : Number ; p : UPerson ; g : Gender} = \a -> case a of { - Ag g n p => {n = n ; p = p ; g = g} - } ; - - conjAgr : Agr -> Agr -> Agr = \a0,b0 -> - let a = fromAgr a0 ; b = fromAgr b0 - in - toAgr - (conjNumber a.n b.n) - b.p a.g; - - giveNumber : Agr -> Number =\a -> case a of { - Ag _ n _ => n - }; - giveGender : Agr -> Gender =\a -> case a of { - Ag g _ _ => g - }; --} --- defaultAgr : Agr = agrP3 Masc Sg ; --- agrP3 : Gender -> Number -> Agr = \g,n -> Ag g n Pers3_Distant ; personalAgr : Agr = agrP1 Masc Sg ; agrP1 : Gender -> Number -> Agr = \g,n -> Ag g n Pers1 ; @@ -121,6 +97,7 @@ objVType : VType -> NPCase = \vt -> case vt of { VTrans => NPObj ; + VTransPost => NPC Dir ; _ => NPC Obl } ; @@ -131,14 +108,28 @@ predVc : (Verb ** {c2,c1 : Str}) -> VPHSlash = \verb -> predV verb ** {c2 = {s = verb.c1 ; c = VTrans} } ; -{- -------------------------- --- added for cauitives - predVcc : (Verb **{c2:Compl}) -> VPHSlash = \verb -> - predV verb ** {c2 = {s = "" ; c = VTrans} } ; ------------------------- --} - predAux : Aux -> VPH = \verb -> { + predV : Verb -> VPH ; + predV v = { + s = \\vh => + case vh of { + VPTense VPPres (Ag g n p) => {fin = copula CPresent n p g ; inf = v.s ! VF Imperf p n g } ; + VPTense VPPast (Ag g n p) => {fin = [] ; inf =v.s ! VF Perf p n g} ; + VPTense VPFutr (Ag g n p) => {fin = copula CFuture n p g ; inf = v.s ! VF Subj p n g } ; + VPTense VPPerf (Ag g n p) => { fin = [] ; inf = v.s ! Root ++ cka g n } ; + VPStem => {fin = [] ; inf = v.s ! Root}; + VPInf => {fin = v.s ! Inf_Obl ; inf = v.s ! Root}; -- for V2V like sonE ky altja krna , check if it is being used anywhere else + VPImp => {fin = v.s ! VF Subj Pers3_Near Pl Masc ; inf = v.s ! Root}; + _ => {fin = [] ; inf = v.s ! Root} + }; + obj = {s = [] ; a = defaultAgr} ; + subj = VIntrans ; + inf = v.s ! Inf; + ad = []; + embComp = []; + prog = False ; + comp = \\_ => [] + } ; + predAux : Aux -> VPH = \verb -> { s = \\vh => let @@ -191,107 +182,6 @@ comp = verb.comp } ; -{- Clause : Type = {s : VPHTense => Polarity => Order => Str} ; - mkClause : NP -> VPH -> Clause = \np,vp -> { - s = \\vt,b,ord => - let - subjagr : NPCase * Agr = case vt of { - VPImpPast => case vp.subj of { - VTrans => <NPErg, vp.obj.a> ; - VTransPost => <NPErg, defaultAgr> ; - _ => <NPC Dir, np.a> - } ; - _ => <NPC Dir, np.a> - } ; - subj = subjagr.p1 ; - agr = subjagr.p2 ; - n = (fromAgr agr).n; - p = (fromAgr agr).p; - g = (fromAgr agr).g; - vps = case vt of { - - VPGenPres => vp.s ! VPTense VPPres agr ; - VPImpPast => vp.s ! VPTense VPPast agr ; - VPFut => case vp.prog of { True => {fin = (vp.s ! VPTense VPFutr agr).fin ; inf = (vp.s ! VPTense VPFutr agr).inf ++ hw p n} ; - _ => vp.s ! VPTense VPFutr agr } ; - VPContPres => {fin = copula CPresent n p g ; inf = (vp.s ! VPStem).inf ++ raha g n } ; - VPContPast => {fin = copula CPast n p g ; inf = (vp.s ! VPStem).inf ++ raha g n } ; - VPContFut => {fin = copula CFuture n p g ; inf = (vp.s ! VPStem).inf ++ raha g n ++ hw p n} ; - VPPerfPres => {fin = copula CPresent n p g ; inf = (vp.s ! VPTense VPPerf agr).inf } ; - VPPerfPast => {fin = copula CPast n p g ; inf = (vp.s ! VPTense VPPerf agr).inf } ; - VPPerfFut => {fin = copula CFuture n p g ; inf = (vp.s ! VPTense VPPerf agr).inf ++ hw p n } ; - VPPerfPresCont => {fin = copula CPresent n p g ; inf = (vp.s ! VPTense VPPres agr).inf ++ raha g n } ; - VPPerfPastCont => {fin = copula CPast n p g ; inf = (vp.s ! VPTense VPPres agr).inf ++ raha g n } ; - VPPerfFutCont => {fin = copula CFuture n p g ; inf = (vp.s ! VPTense VPPres agr).inf ++ raha g n ++ hw p n } ; - VPSubj => case vp.prog of { True => {fin = (vp.s ! VPTense VPFutr agr).inf ++ hw p n ; inf = "شاید" } ; - _ => {fin = (vp.s ! VPTense VPFutr agr).inf ; inf = "شاید" } } - - }; - - - quest = - case ord of - { ODir => []; - OQuest => "كیا" }; - na = - case b of - { Pos => []; - Neg => "نا" }; - nahim = - case b of - { Pos => []; - Neg => "نہیں" }; - in - case vt of { - VPSubj => quest ++ np.s ! subj ++ vp.obj.s ++ vp.ad ++ vp.comp ! np.a ++ na ++ vps.inf ++ vps.fin ++ vp.embComp ; - _ => quest ++ np.s ! subj ++ vp.obj.s ++ vp.ad ++ vp.comp ! np.a ++ nahim ++ vps.inf ++ vps.fin ++ vp.embComp}; - - } ; - - mkSClause : Str -> Agr -> VPH -> Clause = - \subj,agr,vp -> { - s = \\t,b,ord => - let - n = (fromAgr agr).n; - p = (fromAgr agr).p; - g = (fromAgr agr).g; - vps = case t of { - VPGenPres => vp.s ! VPTense VPPres agr ; - VPImpPast => vp.s ! VPTense VPPast agr ; - VPFut => vp.s ! VPTense VPFutr agr ; - VPContPres => {fin = copula CPresent n p g ; inf = (vp.s ! VPStem).inf ++ raha g n } ; - VPContPast => {fin = copula CPast n p g ; inf = (vp.s ! VPStem).inf ++ raha g n } ; - VPContFut => {fin = copula CFuture n p g ; inf = (vp.s ! VPStem).inf ++ raha g n ++ hw p n } ; - VPPerfPres => {fin = copula CPresent n p g ; inf = (vp.s ! VPStem).inf ++ cka g n } ; - VPPerfPast => {fin = copula CPast n p g ; inf = (vp.s ! VPStem).inf ++ cka g n } ; - VPPerfFut => {fin = copula CFuture n p g ; inf = (vp.s ! VPStem).inf ++ cka g n ++ hw p n } ; - VPPerfPresCont => {fin = copula CPresent n p g ; inf = (vp.s ! VPStem).inf ++ raha g n } ; - VPPerfPastCont => {fin = copula CPast n p g ; inf = (vp.s ! VPStem).inf ++ raha g n } ; - VPPerfFutCont => {fin = copula CFuture n p g ; inf = (vp.s ! VPStem).inf ++ raha g n ++ hw p n } ; - VPSubj => {fin = insertSubj p (vp.s ! VPStem).inf ; inf = "شاید" } - - }; - - quest = - case ord of - { ODir => []; - OQuest => "كیا" }; - na = - case b of - { Pos => []; - Neg => "نا" }; - nahim = - case b of - { Pos => []; - Neg => "نہیں" }; - in - case t of { - VPSubj => quest ++ subj ++ vp.obj.s ++ vp.ad ++ vp.comp ! agr ++ na ++ vps.inf ++ vps.fin ++ vp.embComp; - _ => quest ++ subj ++ vp.obj.s ++ vp.ad ++ vp.comp ! agr ++ nahim ++ vps.inf ++ vps.fin ++ vp.embComp}; - } ; --} --- insertSubj : UPerson -> Str -> Str = \p,s -> --- case p of { Pers1 => s ++ "وں" ; _ => s ++ "ے"}; insertObj : (Agr => Str) -> VPH -> VPH = \obj1,vp -> { s = vp.s ; @@ -326,19 +216,18 @@ } ; - insertObjc : (Agr => Str) -> VPHSlash -> VPHSlash = \obj,vp -> + insertObjc : (Agr => Str) -> VPHSlash -> VPHSlash = \obj,vp -> insertObj obj vp ** {c2 = vp.c2} ; insertObjc2 : Str -> VPHSlash -> VPHSlash = \obj,vp -> insertObj2 obj vp ** {c2 = vp.c2} ; infVP : Bool -> VPH -> Agr -> Str = \isAux,vp,a -> - vp.obj.s ++ vp.inf ++ vp.comp ! a ; --- infVV : Bool -> VPH -> Str = \isAux,vp -> --- case isAux of {False => vp.obj.s ++ vp.inf ; True => vp.obj.s ++ (vp.s ! VPImp).fin }; + vp.obj.s ++ vp.comp ! a ++ vp.inf ; + infVV : Bool -> VPH -> Str = \isAux,vp -> - case isAux of {False => vp.obj.s ++ (vp.comp ! (toAgr Sg Pers1 Masc)) ++ vp.inf ; True => vp.obj.s ++ (vp.comp ! (toAgr Sg Pers1 Masc)) ++ (vp.s ! VPImp).fin } ; + case isAux of {False => vp.obj.s ++ (vp.comp ! (toAgr Sg Pers1 Masc)) ++ vp.inf ; True => (vp.s ! VPImp).inf ++ vp.obj.s ++ (vp.comp ! (toAgr Sg Pers1 Masc)) } ; infV2V : Bool -> VPH -> Str = \isAux,vp -> - case isAux of {False => vp.obj.s ++ (vp.comp ! (toAgr Sg Pers1 Masc)) ++ (vp.s ! VPInf).fin ++ "كی" ; True => vp.obj.s ++ (vp.comp ! (toAgr Sg Pers1 Masc)) ++ (vp.s ! VPImp).fin ++ "كی"}; + case isAux of {False => vp.obj.s ++ (vp.comp ! (toAgr Sg Pers1 Masc)) ++ (vp.s ! VPInf).fin ++ ky ; True => vp.obj.s ++ (vp.comp ! (toAgr Sg Pers1 Masc)) ++ (vp.s ! VPImp).fin ++ ky}; insertObject : NP -> VPHSlash -> VPH = \np,vps -> { @@ -374,7 +263,7 @@ comp = vp.comp } ; - conjThat : Str = "كہ" ; +-- conjThat : Str = "كہ" ; insertEmbCompl : VPH -> Str -> VPH = \vp,emb -> { s = vp.s ; @@ -395,7 +284,12 @@ embComp = vp.embComp ; prog = vp.prog ; comp = vp.comp - } ; + } ; + + compoundAdj : Str -> Str -> Adjective = \s1,s2 -> mkCompoundAdj (regAdjective s1) (regAdjective s2) ; + mkCompoundAdj : Adjective -> Adjective -> Adjective ; + mkCompoundAdj adj1 adj2 = {s = \\n,g,c,d => adj1.s ! n ! g ! c ! d ++ adj2.s ! n ! g ! c ! d} ; + }
@@ -10,7 +10,7 @@ jw = "جو" ; kw = "كو" ; mt = "مت" ;- nE = "نے" ;+-- nE = "نے" ; nh = "نہ" ; sE = "سے" ; waN = "واں" ;
@@ -5,7 +5,7 @@ coding = utf8; lin - above_Prep = mkPrep "اوپر" "اوپر" ; + above_Prep = mkPrep ["كے اوپر"] ["كے اوپر"] ; after_Prep = mkPrep ["كے بعد"] ["كے بعد"] ; all_Predet = ss "تمام" ; almost_AdA, almost_AdN = mkAdN "تقریبا" ; @@ -13,8 +13,8 @@ always_AdV = ss "ہمیشہ" ; and_Conj = sd2 [] "اور" ** {n = Pl} ; because_Subj = ss "كیونكہ" ; - before_Prep = mkPrep "پہلے" "پہلے" ; - behind_Prep = mkPrep "پیچھے" "پیچھے" ; + before_Prep = mkPrep ["سے پہلے"] ["سے پہلے"] ; + behind_Prep = mkPrep ["كے پیچھے"] ["كے پیچھے"] ; between_Prep = mkPrep "درمیاں" "درمیاں" ; both7and_DConj = sd2 "دونوں" "اور" ** {n = Pl} ; but_PConj = ss "لیكن" ;
@@ -1,6 +1,6 @@ concrete TextUrd of Text = CommonX - [Temp,TTAnt,Tense,TPres,TPast,TFut,TCond] ** { --- This works for the special punctuation marks of Urdu but still browser does not display them well so left balnk.+-- This works for the special punctuation marks of Urdu. lin TEmpty = {s = []} ;
@@ -112,4 +112,137 @@ _ => ppf ! Dir ++ "nE" } } ;+ + +conjThat = "kh" ;+ insertSubj : UPerson -> Str -> Str = \p,s -> + case p of { Pers1 => s ++ "waN" ; _ => s ++ "E"}; -- check with prasad for vn~+ + agr = "agr" ;+ awr = "awr" ;+ ky = "ky" ;+ jn = "jn" ;+ js = "js" ;+ jw = "jw" ;+ kw = "kw" ;+ mt = "mt" ;+ nE = "nE" ;+ nh = "na" ;+ sE = "sE" ;+ waN = "waN" ; + hE = "hE" ;+ comma = "," ;+ indfArt = "ak" ; + kwd = "Kwd" ; ++copula : CTense -> Number -> UPerson -> Gender -> Str = \t,n,p,g -> + case <t,n,p,g> of {+ <CPresent,Sg,Pers1,_ > => "hwN" ;+ <CPresent,Sg,Pers2_Casual,_ > => "hE"; + <CPresent,Sg,Pers2_Familiar,_ > => "hw" ;+ <CPresent,Sg,Pers2_Respect,_ > => "hyN" ;+ <CPresent,Sg,Pers3_Near,_ > => "hE" ;+ <CPresent,Sg,Pers3_Distant,_ > => "hE" ;+ <CPresent,Pl,Pers1,_ > => "hyN" ;+ <CPresent,Pl,Pers2_Casual,_ > => "hw" ;+ <CPresent,Pl,Pers2_Familiar,_ > => "hw" ;+ <CPresent,Pl,Pers2_Respect,_ > => "hyN" ;+ <CPresent,Pl,Pers3_Near,_ > => "hyN" ;+ <CPresent,Pl,Pers3_Distant,_ > => "hyN" ;+ <CPast,Sg,Pers1,Masc > => "th'a" ;+ <CPast,Sg,Pers1,Fem > => "th'y" ;+ <CPast,Sg,Pers2_Casual,Masc > => "th'a" ;+ <CPast,Sg,Pers2_Casual,Fem > => "th'y" ;+ <CPast,Sg,Pers2_Familiar,Masc > => "th-a" ;+ <CPast,Sg,Pers2_Familiar,Fem > => "th'y" ;+ <CPast,Sg,Pers2_Respect,Masc > => "th'E" ;+ <CPast,Sg,Pers2_Respect,Fem > => "th'yN" ;+ <CPast,Sg,Pers3_Near,Masc > => "th-a" ;+ <CPast,Sg,Pers3_Near,Fem > => "th'y" ;+ <CPast,Sg,Pers3_Distant,Masc > => "th-a" ;+ <CPast,Sg,Pers3_Distant,Fem > => "th'y" ;+ <CPast,Pl,Pers1,Masc > => "th'E" ;+ <CPast,Pl,Pers1,Fem > => "th'yN" ;+ <CPast,Pl,Pers2_Casual,Masc > => "th'E" ;+ <CPast,Pl,Pers2_Casual,Fem > => "th'yN" ;+ <CPast,Pl,Pers2_Familiar,Masc > => "th'E" ;+ <CPast,Pl,Pers2_Familiar,Fem > => "th'yN" ;+ <CPast,Pl,Pers2_Respect,Masc > => "th'E" ;+ <CPast,Pl,Pers2_Respect,Fem > => "th'yN" ;+ <CPast,Pl,Pers3_Near,Masc > => "th'E" ;+ <CPast,Pl,Pers3_Near,Fem > => "th'yN" ;+ <CPast,Pl,Pers3_Distant,Masc > => "th'E" ;+ <CPast,Pl,Pers3_Distant,Fem > => "th'yN" ;+ <CFuture,Sg,Pers1,Masc > => "ga" ;+ <CFuture,Sg,Pers1,Fem > => "gy" ;+ <CFuture,Sg,Pers2_Casual,Masc > => "ga" ;+ <CFuture,Sg,Pers2_Casual,Fem > => "gy" ;+ <CFuture,Sg,Pers2_Familiar,Masc > => "gE" ;+ <CFuture,Sg,Pers2_Familiar,Fem > => "gy" ;+ <CFuture,Sg,Pers2_Respect,Masc > => "gE" ;+ <CFuture,Sg,Pers2_Respect,Fem > => "gy" ;+ <CFuture,Sg,Pers3_Near,Masc > => "ga" ;+ <CFuture,Sg,Pers3_Near,Fem > => "gy" ;+ <CFuture,Sg,Pers3_Distant,Masc > => "ga" ;+ <CFuture,Sg,Pers3_Distant,Fem > => "gy" ;+ <CFuture,Pl,Pers1,Masc > => "gE" ;+ <CFuture,Pl,Pers1,Fem > => "gy" ;+ <CFuture,Pl,Pers2_Casual,Masc > => "gE" ;+ <CFuture,Pl,Pers2_Casual,Fem > => "gy" ;+ <CFuture,Pl,Pers2_Familiar,Masc > => "gE" ;+ <CFuture,Pl,Pers2_Familiar,Fem > => "gy" ;+ <CFuture,Pl,Pers2_Respect,Masc > => "gE" ;+ <CFuture,Pl,Pers2_Respect,Fem > => "gy" ;+ <CFuture,Pl,Pers3_Near,Masc > => "gE" ;+ <CFuture,Pl,Pers3_Near,Fem > => "gE" ;+ <CFuture,Pl,Pers3_Distant,Masc > => "gE" ;+ <CFuture,Pl,Pers3_Distant,Fem > => "gy" + + } ;+ + raha : Gender -> Number -> Str = \g,n -> + (regAdjective "rha").s ! n ! g ! Dir ! Posit ;++ cka : Gender -> Number -> Str = \g,n -> + (regAdjective "cka").s ! n ! g ! Dir ! Posit ;+ + hw : UPerson -> Number -> Str = \pp,n -> + case <pp,n> of {+ <Pers1,_> => "hwN";+ <_,Pl> => "hwN";+ <_,_> => "hw"+ };+ + hwa : Agr -> Str = \agr ->+ let n = (fromAgr agr).n;+ p = (fromAgr agr).p;+ g = (fromAgr agr).g;+ in+ case <n,g> of {+ <Sg,Masc> => "hwa";+ <Sg,Fem> => "hwy";+ <Pl,Masc> => "hwE" ;+ <Pl,Fem> => "hwy"+ }; + + -----------------------------------------------+ -- Hindustani Adjectives+ -----------------------------------------------+ + Adjective = { s: Number => Gender => Case => Degree => Str };+ + regAdjective : Str -> Adjective; + regAdjective x = case x of {+ acch + ("a"|"aN") => mkAdjective x ("bht" ++ x) ("sb sE" ++ x) (acch + "E") ("bht" ++ acch + "E") ("sb sE" ++ acch + "E") (acch + "E") ("bht" ++ acch + "E") ("sb sE" ++ acch + "E")+ (acch + "y") ("bht" ++ acch + "y") ("sb sE" ++ acch + "y") (acch + "y") ("bht" ++ acch + "y") ("sb sE" ++ acch + "y") (acch + "y") ("bht" ++ acch + "y") ("sb sE" ++ acch + "y")+ (acch +"E") ("bht" ++ acch + "E") ("sb sE" ++ acch + "E") (acch + "E") ("bht" ++ acch + "E") ("sb sE" ++ acch + "E") (acch + "E") ("bht" ++ acch + "E") ("sb sE" ++ acch + "E")+ (acch + "y") ("bht" ++ acch + "y") ("sb sE" ++ acch + "y") (acch + "y") ("bht" ++ acch + "y") ("sb sE" ++ acch + "y") (acch + "y") ("bht" ++ acch + "y") ("sb sE" ++ acch + "y");+ + _ => mkAdjective x ("bht" ++ x) ("sb sE" ++ x) x ("bht" ++ x) ("sb sE" ++ x) x ("bht" ++ x) ("sb sE" ++ x)+ x ("bht" ++ x) ("sb sE" ++ x) x ("bht" ++ x) ("sb sE" ++ x) x ("bht" ++ x) ("sb sE" ++ x)+ x ("bht" ++ x) ("sb sE" ++ x) x ("bht" ++ x) ("sb sE" ++ x) x ("bht" ++ x) ("sb sE" ++ x)+ x ("bht" ++ x) ("sb sE" ++ x) x ("bht" ++ x) ("sb sE" ++ x) x ("bht" ++ x) ("sb sE" ++ x)+ + }; + }
@@ -119,7 +119,7 @@ love_N = mkN "mHbt" ; love_V2 = mkV2 (compoundV "pyar" do_V2) "kw"; man_N = mkN "Admy" "Admy" "Admy" "Admy" "AdmywN" "Admyw" masculine ; - married_A2 = mkA "[Xady krna]" "sE" ; + married_A2 = mkA "Xady Xdh" "sE" ; meat_N = mkN "gwXt" ; milk_N = mkN "dwdh'" ; moon_N = mkN "cand" ; @@ -162,7 +162,7 @@ seek_V2 = mkV2 (compoundV "tlaX" do_V2) ; see_V2 = mkV2 (mkV "dykh'na") ; sell_V3 = mkV3 (mkV "bycna") "kw" ""; - send_V3 = mkV3 (mkV "bh'yjna") "kw" "kw"; + send_V3 = mkV3 (mkV "bh'yjna") "kw" ""; sheep_N = mkN "bh'yR" feminine ; ship_N = mkN "jhaz" ; shirt_N = mkN "qmyS" feminine; @@ -361,7 +361,7 @@ ---- added 4/6/2007 john_PN = mkPN "jan" ; question_N = mkN "swal" ; --- ready_A = regA "ready" ; + ready_A = mkA "tyar" ; reason_N = mkN "wjh" feminine ; today_Adv = mkAdv "Aj" ; uncertain_A = mkA ["Gyryqyny"] ;
@@ -0,0 +1,117 @@+-- By Harald Hammarstr+-- Modification for Urdu Shafqat Virk+++concrete NumeralUrd of Numeral = CatUrd ** open ResUrd,CommonHindustani,ParamX, Prelude in {+flags coding=utf8 ;++param DForm = unit | ten ;+param DSize = sg | r2 | r3 | r4 | r5 | r6 | r7 | r8 | r9 ;+param Size = singl | less100 | more100 ; ++oper LinDigit = {s : DForm => Str ; size : DSize ; n : Number} ;+++lincat Dig = { s:Str ; n : Number};+lincat Digit = LinDigit ;+lincat Sub10 = {s : DForm => Str ; size : DSize ; n : Number} ;+lincat Sub100 = {s : Str ; size : Size ; n : Number} ;+lincat Sub1000 = {s : Str ; s2 : Str ; size : Size ; n : Number } ; +lincat Sub1000000 = { s : Str ; n : Number } ;++lin num x0 = + {s = table {+ NCard => x0.s ; + NOrd => x0.s ++ "waN" -- need to use mkOrd x0.s but it gives linking error + };+ n = x0.n+ } ;+++oper mkNum : Str -> Str -> DSize -> LinDigit = + \do -> \bis -> \sz -> + {s = table {unit => do ; ten => bis } ; + size = sz ; n = Pl} ;++lin n2 = mkNum "dw" "bys" r2 ;+lin n3 = mkNum "tyn" "tys" r3 ;+lin n4 = mkNum "car" "calys" r4 ;+lin n5 = mkNum "panc" "pcas" r5 ;+lin n6 = mkNum "ch'" "saTh'" r6 ; +lin n7 = mkNum "sat" "str" r7; +lin n8 = mkNum "ATh'" "asy" r8;+lin n9 = mkNum "nw" "nwE" r9 ;++oper mkR : Str -> Str -> Str -> Str -> Str -> Str -> Str -> Str -> Str -> DSize => Str = \a1 -> \a2 -> \a3 -> \a4 -> \a5 -> \a6 -> \a7 -> \a8 -> \a9 -> table {+ sg => a1 + "h" ;+ r2 => a2 + "ys" ;+ r3 => a3 + "tys" ;+ r4 => a4 + "alys" ;+ r5 => a5 + "n" ;+ r6 => a6 + "saTh'" ;+ r7 => a7 + "htr" ;+ r8 => a8 + "asy" ;+ r9 => a9 + "anwE"+} ;++oper rows : DSize => DSize => Str = table {+ sg => mkR "gyar" "ak" "akt" "akt" "akyaw" "ak" "ak" "aky" "aky" ; + r2 => mkR "bar" "bay" "bat" "bay" "baw" "ba" "ba" "bay" "b" ;+ r3 => mkR "tyr" "ty" "tyn" "tnt" "trp" "try" "t" "tr" "tr" ;+ r4 => mkR "cwd" "cwb" "cwn" "cwa" "cww" "cwn" "cwh" "cwr" "cwr" ;+ r5 => mkR "pndr" "pcy" "pyn" "pnta" "pcp" "pyn" "ph" "pc" "pc" ;+ r6 => mkR "swl" "ch'b" "ch't" "ch'y" "ch'p" "ch'ya" "ch'" "ch'y" "ch'y" ;+ r7 => mkR "str" "sta" "syn" "snt" "staw" "sta" "sr" "st" "sta" ;+ r8 => mkR "aTh'ar" "aTh'ay" "aR" "aRt" "aTh'aw" "aR" "aTh'" "aTh'" "aTh'" ; + r9 => table {sg => "anys" ; r2 => "antys" ; r3 => "antalys" ; + r4 => "ancas" ; r5 => "ansth'" ; r6 => "anhtr" ; + r7 => "anasy" ; + r8 => "ananwE" ; r9 => "nnanwE" } +} ;++oper ss : Str -> {s : Str} = \s -> {s = s} ;++lin pot01 = {s = table {unit => "ayk" ; _ => "dmy" } ; size = sg ; n = Sg} ;+lin pot0 d = d ; +lin pot110 = {s = "ds" ; size = less100 ; n = Pl} ; +lin pot111 = {s = rows ! sg ! sg ; size = less100 ; n = Pl} ;+lin pot1to19 d = {s = rows ! d.size ! sg ; size = less100 ; n = d.n} ;+lin pot0as1 n = {s = n.s ! unit ; size = table {sg => singl ; _ => less100} ! n.size ; n = n.n } ;++lin pot1 d = {s = d.s ! ten ; size = less100 ; n = d.n} ;+lin pot1plus d e = {s = rows ! e.size ! d.size ; size = less100 ; n = d.n} ;++lin pot1as2 n = {s = n.s ; s2 = "dmy" ; size = n.size ; n = n.n} ;+lin pot2 d = {s = (mksau (d.s ! unit) d.size) ; + s2 = d.s ! unit ++ "lakh'" ; size = more100 ; n = d.n} ;+lin pot2plus d e = + {s = (mksau (d.s ! unit) d.size) ++ e.s ; + s2 = (d.s ! unit) ++ "lakh'" ++ (mkhazar e.s e.size) ; + size = more100 ; n = d.n} ;++lin pot2as3 n = {s = n.s ; n = n.n} ;+lin pot3 n = {s = table { singl => ekhazar ;+ less100 => n.s ++ "hzar" ; + more100 => n.s2 } ! n.size ; n = n.n} ;+lin pot3plus n m = + {s = table {singl => ekhazar ;+ less100 => n.s ++ "hzar" ; + more100 => n.s2 } ! n.size ++ m.s ; n = n.n} ;++lin D_0 = { s = "N0" ; n = Sg};+lin D_1 = { s = "N1" ; n = Sg};+lin D_2 = { s = "N2" ; n = Pl};+lin D_3 = { s = "N3" ; n = Pl};+lin D_4 = { s = "N4" ; n = Pl};+lin D_5 = { s = "N5" ; n = Pl};+lin D_6 = { s = "N6" ; n = Pl};+lin D_7 = { s = "N7" ; n = Pl};+lin D_8 = { s = "N8" ; n = Pl};+lin D_9 = { s = "N9" ; n = Pl};+lin IDig d = { s = \\_ => d.s ; n = d.n} ;+lin IIDig d dg = { s = \\df => Prelude.glue (dg.s ! df) d.s ; n = Pl }; ++oper ekhazar : Str = variants {"hzar" ; "ayk" ++ "hzar"} ; +oper mkhazar : Str -> Size -> Str = \s -> \sz -> table {singl => ekhazar ; _ => s ++ "hzar"} ! sz ;+oper mksau : Str -> DSize -> Str = \s -> \sz -> table {sg => "ayk" ++ "sw" ; _ => s ++ "sw"} ! sz ;+}
@@ -5,7 +5,7 @@ coding = utf8; lin - above_Prep = mkPrep "awpr" "awpr" ; + above_Prep = mkPrep ["kE awpr"] ["kE awpr"] ; after_Prep = mkPrep ["kE bed"] ["kE bed"] ; all_Predet = ss "tmam" ; almost_AdA, almost_AdN = mkAdN "tqryba" ; @@ -13,8 +13,8 @@ always_AdV = ss "hmyXh" ; and_Conj = sd2 [] "awr" ** {n = Pl} ; because_Subj = ss "kywnkh" ; - before_Prep = mkPrep "phlE" "phlE" ; - behind_Prep = mkPrep "pych'E" "pych'E" ; + before_Prep = mkPrep ["sE phlE"] ["sE phlE"] ; + behind_Prep = mkPrep ["kE pych'E"] ["kE pych'E"] ; between_Prep = mkPrep "drmyaN" "drmyaN" ; both7and_DConj = sd2 "dwnwN" "awr" ** {n = Pl} ; but_PConj = ss "lykn" ; @@ -72,7 +72,7 @@ possess_Prep = mkPrep "ka" "ky" ; quite_Adv = ss "KamwX" ; she_Pron = personalPN "wh" "as" "wh" ["as ky"] ["as ky"] ["as kE"] ["as ky"] Sg Fem Pers3_Distant ; - so_AdA = ss "[as lyE]" ; + so_AdA = ss "as lyE" ; somebody_NP = MassNP (UseN (ParadigmsUrd.mkN "kwy" "kwy" "kwy" "kwy" "kwy" "kwy" Masc )); someSg_Det = mkDet "kch'" "kch'" "kch'" "kch'" Sg ; somePl_Det = mkDet "kch'" "kch'" "kch'" "kch'" Pl ; @@ -89,7 +89,7 @@ through_Prep = mkPrep ["myN sE"] ["myN sE"] ; too_AdA = ss "bht" ; to_Prep = mkPrep "kw" "kw" ; -- ** {lock_Prep = <>}; - under_Prep = mkPrep "nycE" "nycE" ; -- ** {lock_Prep = <>}; + under_Prep = mkPrep "kE nycE" "kE nycE" ; -- ** {lock_Prep = <>}; very_AdA = ss "bht" ; want_VV = mkV "cahna" ** { isAux = False} ; we_Pron = personalPN "hm" "hm" "hm" "hmara" "hmary" "hmarE" "hmary" Pl Masc Pers1 ; @@ -118,7 +118,7 @@ at_least_AdN = mkAdN ["km az km"] ; at_most_AdN = mkAdN ["zyadh sE zyadh"]; nothing_NP = MassNP (UseN (ParadigmsUrd.mkN "kwy cyz nhyN" "kwy cyz nhyN" "kwy cyz nhyN" "kwy cyz nhyN" "kwy cyz nhyN" "kwy cyz nhyN" Masc )); - except_Prep = mkPrep "swaE" "swaE" ; + except_Prep = mkPrep "kE swaE" "kE swaE" ; nobody_NP = MassNP (UseN (ParadigmsUrd.mkN "kwy nhyN" "kwy nhyN" "kwy nhyN" "kwy nhyN" "kwy nhyN" "kwy nhyN" Masc )); as_CAdv = {s = "atna" ; p = "jtna"} ;
@@ -45,5 +45,5 @@ ModeHelp -> putStrLn helpMessage ModeInteractive -> mainGFI opts files ModeRun -> mainRunGFI opts files- ModeServer -> mainServerGFI opts files- ModeCompiler -> dieIOE (mainGFC opts files)+ ModeServer port -> mainServerGFI opts port files+ ModeCompiler -> mainGFC opts files
@@ -1037,7 +1037,7 @@ }), ("t", emptyCommandInfo { longname = "tokenize",- synopsis = "Tokenize string usng the vocabulary",+ synopsis = "Tokenize string using the vocabulary", exec = execToktok env, options = [], flags = [("lang","The name of the concrete to use")]
@@ -55,12 +55,11 @@ -- for different cf formats importCF opts files get = do s <- fmap unlines $ mapM readFile files - let cnc = justModuleName (last files)- gf <- case get cnc s of- Ok g -> return g+ gf <- case get (last files) s of+ Ok gf -> return gf Bad s -> error s ---- Ok gr <- appIOE $ compileSourceGrammar opts gf- epgf <- appIOE $ link opts (identC (BS.pack (cnc ++ "Abs"))) gr+ epgf <- appIOE $ link opts (identC (BS.pack (justModuleName (last files) ++ "Abs"))) gr case epgf of Ok pgf -> return pgf- Bad s -> error s ----+ Bad s -> error s ----
@@ -6,12 +6,13 @@ import GF.Compile.CheckGrammar import GF.Compile.Optimize import GF.Compile.SubExOpt+import GF.Compile.GeneratePMCFG import GF.Compile.GrammarToPGF import GF.Compile.ReadFiles import GF.Compile.Update import GF.Compile.Refresh- import GF.Compile.Coding+import GF.Compile.Tags import GF.Grammar.Grammar import GF.Grammar.Lookup@@ -20,10 +21,8 @@ import GF.Infra.Ident import GF.Infra.Option-import GF.Infra.Modules import GF.Infra.UseIO import GF.Infra.CheckM- import GF.Data.Operations import Control.Monad@@ -34,7 +33,6 @@ import qualified Data.Set as Set import Data.List(nub) import Data.Maybe (isNothing)-import Data.Binary import qualified Data.ByteString.Char8 as BS import Text.PrettyPrint @@ -56,7 +54,8 @@ link opts cnc gr = do let isv = (verbAtLeast opts Normal) putPointE Normal opts "linking ... " $ do- pgf <- ioeIO (mkCanon2pgf opts cnc gr)+ let abs = err (const cnc) id $ abstractOfConcrete gr cnc+ pgf <- ioeIO (mkCanon2pgf opts gr abs) probs <- ioeIO (maybe (return . defaultProbabilities) readProbabilitiesFromFile (flag optProbsFile opts) pgf) ioeIO $ when (verbAtLeast opts Normal) $ putStrFlush "OK" return $ setProbabilities probs @@ -70,19 +69,25 @@ -- to compile a set of modules, e.g. an old GF or a .cf file compileSourceGrammar :: Options -> SourceGrammar -> IOE SourceGrammar compileSourceGrammar opts gr = do- (_,gr',_) <- foldM compOne (0,emptySourceGrammar,Map.empty) (modules gr)+ (_,gr',_) <- foldM (\env -> compileSourceModule opts env Nothing)+ (0,emptySourceGrammar,Map.empty)+ (modules gr) return gr'- where- compOne env mo = do- (k,mo') <- compileSourceModule opts env mo- extendCompileEnvInt env k Nothing mo' --- file for the same of modif time... + -- to output an intermediate stage intermOut :: Options -> Dump -> Doc -> IOE () intermOut opts d doc | dump opts d = ioeIO (hPutStrLn stderr (render (text "\n\n--#" <+> text (show d) $$ doc))) | otherwise = return () +warnOut opts warnings+ | null warnings = return ()+ | otherwise = ioeIO (hPutStrLn stderr $ + if flag optVerbosity opts == Normal+ then ('\n':warnings)+ else warnings)+ -- | the environment type CompileEnv = (Int,SourceGrammar,ModEnv) @@ -130,105 +135,129 @@ | verbAtLeast opts Normal = ioeIO (putStrFlush m) >> act | otherwise = putPointE Verbose opts v act - let gf = takeExtensions file let path = dropFileName file let name = dropExtension file - case gf of+ case takeExtensions file of -- for compiled gf, read the file and update environment -- also undo common subexp optimization, to enable normal computations ".gfo" -> do- sm00 <- putPointE Verbose opts ("+ reading" +++ file) $ ioeIO (decodeFile file)- let sm0 = addOptionsToModule opts sm00+ sm00 <- putPointE Verbose opts ("+ reading" +++ file) $ ioeIO (decodeModule file)+ let sm0 = (fst sm00, (snd sm00) {mflags = mflags (snd sm00) `addOptions` opts}) - intermOut opts DumpSource (ppModule Qualified sm0)+ intermOut opts DumpSource (ppModule Internal sm0) let sm1 = unsubexpModule sm0- sm <- {- putPointE Normal opts "creating indirections" $ -} ioeErr $ extendModule srcgr sm1- + (sm,warnings) <- {- putPointE Normal opts "creating indirections" $ -} ioeErr $ runCheck $ extendModule srcgr sm1+ warnOut opts warnings++ if flag optTagsOnly opts+ then writeTags opts srcgr (gf2gftags opts file) sm1+ else return ()+ extendCompileEnv env file sm -- for gf source, do full compilation and generate code _ -> do - let gfo = gf2gfo opts file b1 <- ioeIO $ doesFileExist file if not b1- then compileOne opts env $ gfo+ then compileOne opts env $ (gf2gfo opts file) else do sm00 <- putpOpt ("- parsing" +++ file) ("- compiling" +++ file ++ "... ") $ getSourceModule opts file- enc <- ioeIO $ mkTextEncoding (renameEncoding (flag optEncoding (flagsModule sm00)))- let sm0 = decodeStringsInModule enc sm00+ enc <- ioeIO $ mkTextEncoding (renameEncoding (flag optEncoding (mflags (snd sm00))))+ let sm = decodeStringsInModule enc sm00 - intermOut opts DumpSource (ppModule Qualified sm0)+ intermOut opts DumpSource (ppModule Internal sm) - (k',sm) <- compileSourceModule opts env sm0- putPointE Verbose opts " generating code... " $ generateModuleCode opts gfo sm- extendCompileEnvInt env k' (Just gfo) sm+ compileSourceModule opts env (Just file) sm where isConcr (_,m) = isModCnc m && mstatus m /= MSIncomplete -compileSourceModule :: Options -> CompileEnv -> SourceModule -> IOE (Int,SourceModule)-compileSourceModule opts env@(k,gr,_) mo@(i,mi) = do-- let puts = putPointE Quiet opts- putpp = putPointE Verbose opts+compileSourceModule :: Options -> CompileEnv -> Maybe FilePath -> SourceModule -> IOE CompileEnv+compileSourceModule opts env@(k,gr,_) mb_gfFile mo@(i,mi) = do - mo1 <- ioeErr $ rebuildModule gr mo- intermOut opts DumpRebuild (ppModule Qualified mo1)+ let putpp = putPointE Verbose opts+ + (mo1,warnings) <- ioeErr $ runCheck $ rebuildModule gr mo+ warnOut opts warnings+ intermOut opts DumpRebuild (ppModule Internal mo1) - mo1b <- ioeErr $ extendModule gr mo1- intermOut opts DumpExtend (ppModule Qualified mo1b)+ (mo1b,warnings) <- ioeErr $ runCheck $ extendModule gr mo1+ warnOut opts warnings+ intermOut opts DumpExtend (ppModule Internal mo1b) case mo1b of- (_,n) | not (isCompleteModule n) -> do- return (k,mo1b) -- refresh would fail, since not renamed+ (_,n) | not (isCompleteModule n) ->+ if not (flag optTagsOnly opts)+ then do let mb_gfo = fmap (gf2gfo opts) mb_gfFile+ case mb_gfo of+ Just gfo -> writeGFO opts gfo mo1b+ Nothing -> return ()+ extendCompileEnvInt env k mb_gfo mo1b+ else do case mb_gfFile of+ Just gfFile -> writeTags opts gr (gf2gftags opts gfFile) mo1b+ Nothing -> return ()+ extendCompileEnvInt env k Nothing mo1b _ -> do let mos = modules gr (mo2,warnings) <- putpp " renaming " $ ioeErr $ runCheck (renameModule mos mo1b)- if null warnings then return () else puts warnings $ return ()- intermOut opts DumpRename (ppModule Qualified mo2)+ warnOut opts warnings+ intermOut opts DumpRename (ppModule Internal mo2) - (mo3,warnings) <- putpp " type checking" $ ioeErr $ runCheck (checkModule mos mo2)- if null warnings then return () else puts warnings $ return ()- intermOut opts DumpTypeCheck (ppModule Qualified mo3)+ (mo3,warnings) <- putpp " type checking" $ ioeErr $ runCheck (checkModule opts mos mo2)+ warnOut opts warnings+ intermOut opts DumpTypeCheck (ppModule Internal mo3) - (k',mo3r:_) <- putpp " refreshing " $ ioeErr $ refreshModule (k,mos) mo3- intermOut opts DumpRefresh (ppModule Qualified mo3r)+ if not (flag optTagsOnly opts)+ then do (k',mo3r:_) <- putpp " refreshing " $ ioeErr $ refreshModule (k,mos) mo3+ intermOut opts DumpRefresh (ppModule Internal mo3r) - mo4 <- putpp " optimizing " $ ioeErr $ optimizeModule opts mos mo3r- intermOut opts DumpOptimize (ppModule Qualified mo4)+ mo4 <- putpp " optimizing " $ ioeErr $ optimizeModule opts mos mo3r+ intermOut opts DumpOptimize (ppModule Internal mo4) - return (k',mo4)+ mo5 <- if isModCnc (snd mo4) && flag optPMCFG opts+ then putpp " generating PMCFG " $ ioeIO $ generatePMCFG opts mos mo4+ else return mo4+ intermOut opts DumpCanon (ppModule Internal mo5) -generateModuleCode :: Options -> FilePath -> SourceModule -> IOE SourceModule-generateModuleCode opts file minfo = do- let minfo1 = subexpModule minfo- minfo2 = case minfo1 of- (m,mi) -> (m,mi{jments=Map.filter (\x -> case x of {AnyInd _ _ -> False; _ -> True}) (jments mi)})- putPointE Normal opts (" wrote file" +++ file) $ ioeIO $ encodeFile file minfo2- return minfo1+ let mb_gfo = fmap (gf2gfo opts) mb_gfFile+ case mb_gfo of+ Just gfo -> writeGFO opts gfo mo5+ Nothing -> return () + extendCompileEnvInt env k' mb_gfo mo5+ else do case mb_gfFile of+ Just gfFile -> writeTags opts gr (gf2gftags opts gfFile) mo3+ Nothing -> return ()+ extendCompileEnvInt env k Nothing mo3+++writeGFO :: Options -> FilePath -> SourceModule -> IOE ()+writeGFO opts file mo = do+ let mo1 = subexpModule mo+ mo2 = case mo1 of+ (m,mi) -> (m,mi{jments=Map.filter (\x -> case x of {AnyInd _ _ -> False; _ -> True}) (jments mi)})+ putPointE Normal opts (" write file" +++ file) $ ioeIO $ encodeModule file mo2+ -- auxiliaries --reverseModules (MGrammar ms) = MGrammar $ reverse ms emptyCompileEnv :: CompileEnv-emptyCompileEnv = (0,emptyMGrammar,Map.empty)+emptyCompileEnv = (0,emptySourceGrammar,Map.empty) -extendCompileEnvInt (_,gr,menv) k mfile sm = do- let (mod,imps) = importsOfModule sm+extendCompileEnvInt (_,gr,menv) k mfile mo = do menv2 <- case mfile of Just file -> do+ let (mod,imps) = importsOfModule mo t <- ioeIO $ getModificationTime file return $ Map.insert mod (t,imps) menv _ -> return menv- return (k,prependModule gr sm,menv2) --- reverse later--extendCompileEnv e@(k,_,_) file sm = extendCompileEnvInt e k (Just file) sm-+ return (k,prependModule gr mo,menv2) --- reverse later +extendCompileEnv e@(k,_,_) file mo = extendCompileEnvInt e k (Just file) mo
@@ -23,10 +23,12 @@ module GF.Compile.CheckGrammar(checkModule) where import GF.Infra.Ident-import GF.Infra.Modules+import GF.Infra.Option import GF.Compile.TypeCheck.Abstract import GF.Compile.TypeCheck.Concrete+import qualified GF.Compile.TypeCheck.ConcreteNew as CN+import qualified GF.Compile.Compute.ConcreteNew as CN import GF.Grammar import GF.Grammar.Lexer@@ -43,27 +45,27 @@ import Text.PrettyPrint -- | checking is performed in the dependency order of modules-checkModule :: [SourceModule] -> SourceModule -> Check SourceModule-checkModule ms m@(name,mo) = checkIn (text "checking module" <+> ppIdent name) $ do- checkRestrictedInheritance ms m- m <- case mtype mo of- MTConcrete a -> do let gr = mGrammar (m:ms)- abs <- checkErr $ lookupModule gr a- checkCompleteGrammar gr (a,abs) m- _ -> return m- infos <- checkErr $ topoSortJments m- foldM updateCheckInfo m infos+checkModule :: Options -> [SourceModule] -> SourceModule -> Check SourceModule+checkModule opts mos mo@(m,mi) = do+ checkRestrictedInheritance mos mo+ mo <- case mtype mi of+ MTConcrete a -> do let gr = mGrammar (mo:mos)+ abs <- checkErr $ lookupModule gr a+ checkCompleteGrammar gr (a,abs) mo+ _ -> return mo+ infos <- checkErr $ topoSortJments mo+ foldM updateCheckInfo mo infos where- updateCheckInfo (name,mo) (i,info) = do- info <- checkInfo ms (name,mo) i info- return (name,updateModule mo i info)+ updateCheckInfo mo@(m,mi) (i,info) = do+ info <- checkInfo opts mos mo i info+ return (m,mi{jments=updateTree (i,info) (jments mi)}) -- check if restricted inheritance modules are still coherent -- i.e. that the defs of remaining names don't depend on omitted names checkRestrictedInheritance :: [SourceModule] -> SourceModule -> Check ()-checkRestrictedInheritance mos (name,mo) = do- let irs = [ii | ii@(_,mi) <- extend mo, mi /= MIAll] -- names with restr. inh.- let mrs = [((i,m),mi) | (i,m) <- mos, Just mi <- [lookup i irs]] +checkRestrictedInheritance mos (name,mo) = checkIn (ppLocation (msrc mo) NoLoc <> colon) $ do+ let irs = [ii | ii@(_,mi) <- mextend mo, mi /= MIAll] -- names with restr. inh.+ let mrs = [((i,m),mi) | (i,m) <- mos, Just mi <- [lookup i irs]] -- the restr. modules themself, with restr. infos mapM_ checkRem mrs where@@ -80,7 +82,7 @@ allDeps = concatMap (allDependencies (const True) . jments . snd) mos checkCompleteGrammar :: SourceGrammar -> SourceModule -> SourceModule -> Check SourceModule-checkCompleteGrammar gr (am,abs) (cm,cnc) = do+checkCompleteGrammar gr (am,abs) (cm,cnc) = checkIn (ppLocation (msrc cnc) NoLoc <> colon) $ do let jsa = jments abs let jsc = jments cnc @@ -90,7 +92,7 @@ -- check that all abstract constants are in concrete; build default lin and lincats jsc <- foldM checkAbs jsc (tree2list jsa) - return (cm,replaceJudgements cnc jsc)+ return (cm,cnc{jments=jsc}) where checkAbs js i@(c,info) = case info of@@ -103,108 +105,137 @@ return info _ -> return info case info of- CncCat (Just (L loc (RecType []))) _ _ -> return (foldr (\_ -> Abs Explicit identW) (R []) cxt)- _ -> Bad "no def lin"+ CncCat (Just (L loc (RecType []))) _ _ _ -> return (foldr (\_ -> Abs Explicit identW) (R []) cxt)+ _ -> Bad "no def lin" case lookupIdent c js of Ok (AnyInd _ _) -> return js- Ok (CncFun ty (Just def) pn) -> - return $ updateTree (c,CncFun ty (Just def) pn) js- Ok (CncFun ty Nothing pn) ->+ Ok (CncFun ty (Just def) mn mf) -> + return $ updateTree (c,CncFun ty (Just def) mn mf) js+ Ok (CncFun ty Nothing mn mf) -> case mb_def of- Ok def -> return $ updateTree (c,CncFun ty (Just (L (0,0) def)) pn) js- Bad _ -> do checkWarn $ text "no linearization of" <+> ppIdent c+ Ok def -> return $ updateTree (c,CncFun ty (Just (L NoLoc def)) mn mf) js+ Bad _ -> do checkWarn (text "no linearization of" <+> ppIdent c) return js _ -> do case mb_def of Ok def -> do (cont,val) <- linTypeOfType gr cm ty let linty = (snd (valCat ty),cont,val)- return $ updateTree (c,CncFun (Just linty) (Just (L (0,0) def)) Nothing) js- Bad _ -> do checkWarn $ text "no linearization of" <+> ppIdent c+ return $ updateTree (c,CncFun (Just linty) (Just (L NoLoc def)) Nothing Nothing) js+ Bad _ -> do checkWarn (text "no linearization of" <+> ppIdent c) return js AbsCat (Just _) -> case lookupIdent c js of Ok (AnyInd _ _) -> return js- Ok (CncCat (Just _) _ _) -> return js- Ok (CncCat _ mt mp) -> do- checkWarn $ - text "no linearization type for" <+> ppIdent c <> text ", inserting default {s : Str}"- return $ updateTree (c,CncCat (Just (L (0,0) defLinType)) mt mp) js+ Ok (CncCat (Just _) _ _ _) -> return js+ Ok (CncCat Nothing mt mp mpmcfg) -> do+ checkWarn (text "no linearization type for" <+> ppIdent c <> text ", inserting default {s : Str}")+ return $ updateTree (c,CncCat (Just (L NoLoc defLinType)) mt mp mpmcfg) js _ -> do- checkWarn $ - text "no linearization type for" <+> ppIdent c <> text ", inserting default {s : Str}"- return $ updateTree (c,CncCat (Just (L (0,0) defLinType)) Nothing Nothing) js+ checkWarn (text "no linearization type for" <+> ppIdent c <> text ", inserting default {s : Str}")+ return $ updateTree (c,CncCat (Just (L NoLoc defLinType)) Nothing Nothing Nothing) js _ -> return js checkCnc js i@(c,info) = case info of- CncFun _ d pn -> case lookupOrigInfo gr (am,c) of- Ok (_,AbsFun (Just (L _ ty)) _ _ _) -> - do (cont,val) <- linTypeOfType gr cm ty- let linty = (snd (valCat ty),cont,val)- return $ updateTree (c,CncFun (Just linty) d pn) js- _ -> do checkWarn $ text "function" <+> ppIdent c <+> text "is not in abstract"+ CncFun _ d mn mf -> case lookupOrigInfo gr (am,c) of+ Ok (_,AbsFun (Just (L _ ty)) _ _ _) -> + do (cont,val) <- linTypeOfType gr cm ty+ let linty = (snd (valCat ty),cont,val)+ return $ updateTree (c,CncFun (Just linty) d mn mf) js+ _ -> do checkWarn (text "function" <+> ppIdent c <+> text "is not in abstract")+ return js+ CncCat _ _ _ _ -> case lookupOrigInfo gr (am,c) of+ Ok _ -> return $ updateTree i js+ _ -> do checkWarn (text "category" <+> ppIdent c <+> text "is not in abstract") return js- CncCat _ _ _ -> case lookupOrigInfo gr (am,c) of- Ok _ -> return $ updateTree i js- _ -> do checkWarn $ text "category" <+> ppIdent c <+> text "is not in abstract"- return js- _ -> return $ updateTree i js+ _ -> return $ updateTree i js -- | General Principle: only Just-values are checked. -- A May-value has always been checked in its origin module.-checkInfo :: [SourceModule] -> SourceModule -> Ident -> Info -> Check Info-checkInfo ms (m,mo) c info = do- checkReservedId c+checkInfo :: Options -> [SourceModule] -> SourceModule -> Ident -> Info -> Check Info+checkInfo opts ms (m,mo) c info = do+ checkIn (ppLocation (msrc mo) NoLoc <> colon) $+ checkReservedId c case info of AbsCat (Just (L loc cont)) -> - mkCheck loc "category" $ + mkCheck loc "the category" $ checkContext gr cont AbsFun (Just (L loc typ0)) ma md moper -> do typ <- compAbsTyp [] typ0 -- to calculate let definitions- mkCheck loc "type of function" $+ mkCheck loc "the type of function" $ checkTyp gr typ case md of- Just eqs -> mapM_ (\(L loc eq) -> mkCheck loc "definition of function" $+ Just eqs -> mapM_ (\(L loc eq) -> mkCheck loc "the definition of function" $ checkDef gr (m,c) typ eq) eqs Nothing -> return () return (AbsFun (Just (L loc typ)) ma md moper) - CncFun linty@(Just (cat,cont,val)) (Just (L loc trm)) mpr -> chIn loc "linearization of" $ do- (trm',_) <- checkLType gr [] trm (mkFunType (map (\(_,_,ty) -> ty) cont) val) -- erases arg vars- mpr <- checkPrintname gr mpr- return (CncFun linty (Just (L loc trm')) mpr)+ CncCat mty mdef mpr mpmcfg -> do+ mty <- case mty of+ Just (L loc typ) -> chIn loc "linearization type of" $ + (if flag optNewComp opts+ then do (typ,_) <- CN.checkLType gr typ typeType+ typ <- computeLType gr [] typ+ return (Just (L loc typ))+ else do (typ,_) <- checkLType gr [] typ typeType+ typ <- computeLType gr [] typ+ return (Just (L loc typ)))+ Nothing -> return Nothing+ mdef <- case (mty,mdef) of+ (Just (L _ typ),Just (L loc def)) -> + chIn loc "default linearization of" $ do+ (def,_) <- checkLType gr [] def (mkFunType [typeStr] typ)+ return (Just (L loc def))+ _ -> return Nothing+ mpr <- case mpr of+ (Just (L loc t)) -> + chIn loc "print name of" $ do+ (t,_) <- checkLType gr [] t typeStr+ return (Just (L loc t))+ _ -> return Nothing+ return (CncCat mty mdef mpr mpmcfg) - CncCat (Just (L loc typ)) mdef mpr -> chIn loc "linearization type of" $ do- (typ,_) <- checkLType gr [] typ typeType- typ <- computeLType gr [] typ- mdef <- case mdef of- Just (L loc def) -> do- (def,_) <- checkLType gr [] def (mkFunType [typeStr] typ)- return $ Just (L loc def)- _ -> return mdef- mpr <- checkPrintname gr mpr- return (CncCat (Just (L loc typ)) mdef mpr)+ CncFun mty mt mpr mpmcfg -> do+ mt <- case (mty,mt) of+ (Just (cat,cont,val),Just (L loc trm)) -> + chIn loc "linearization of" $ do+ (trm,_) <- checkLType gr [] trm (mkFunType (map (\(_,_,ty) -> ty) cont) val) -- erases arg vars+ return (Just (L loc trm))+ _ -> return mt+ mpr <- case mpr of+ (Just (L loc t)) -> + chIn loc "print name of" $ do+ (t,_) <- checkLType gr [] t typeStr+ return (Just (L loc t))+ _ -> return Nothing+ return (CncFun mty mt mpr mpmcfg) ResOper pty pde -> do (pty', pde') <- case (pty,pde) of (Just (L loct ty), Just (L locd de)) -> do ty' <- chIn loct "operation" $- checkLType gr [] ty typeType >>= computeLType gr [] . fst+ (if flag optNewComp opts+ then CN.checkLType gr ty typeType >>= return . CN.normalForm gr . fst+ else checkLType gr [] ty typeType >>= computeLType gr [] . fst) (de',_) <- chIn locd "operation" $- checkLType gr [] de ty'+ (if flag optNewComp opts+ then CN.checkLType gr de ty'+ else checkLType gr [] de ty') return (Just (L loct ty'), Just (L locd de')) (Nothing , Just (L locd de)) -> do (de',ty') <- chIn locd "operation" $- inferLType gr [] de+ (if flag optNewComp opts+ then CN.inferLType gr de+ else inferLType gr [] de) return (Just (L locd ty'), Just (L locd de')) (Just (L loct ty), Nothing) -> do chIn loct "operation" $ checkError (text "No definition given to the operation") return (ResOper pty' pde') - ResOverload os tysts -> chIn (0,0) "overloading" $ do+ ResOverload os tysts -> chIn NoLoc "overloading" $ do tysts' <- mapM (uncurry $ flip (\(L loc1 t) (L loc2 ty) -> checkLType gr [] t ty >>= \(t,ty) -> return (L loc1 t, L loc2 ty))) tysts -- return explicit ones tysts0 <- checkErr $ lookupOverload gr (m,c) -- check against inherited ones too tysts1 <- mapM (uncurry $ flip (checkLType gr [])) @@ -215,17 +246,18 @@ sort [let (xs,t) = typeFormCnc x in t : map (\(b,x,t) -> t) xs | (_,x) <- tysts1] return (ResOverload os [(y,x) | (x,y) <- tysts']) - ResParam (Just pcs) _ -> do- ts <- liftM concat $ mapM mkPar pcs- return (ResParam (Just pcs) (Just ts))+ ResParam (Just (L loc pcs)) _ -> do+ ts <- chIn loc "parameter type" $ + liftM concat $ mapM mkPar pcs+ return (ResParam (Just (L loc pcs)) (Just ts)) _ -> return info where gr = mGrammar ((m,mo) : ms)- chIn loc cat = checkIn (text "Happened in" <+> text cat <+> ppIdent c <+> ppPosition m loc <> colon)+ chIn loc cat = checkIn (ppLocation (msrc mo) loc <> colon $$ + nest 2 (text "Happened in" <+> text cat <+> ppIdent c)) - mkPar (L loc (f,co)) = - chIn loc "parameter type" $ do+ mkPar (f,co) = do vs <- checkErr $ liftM combinations $ mapM (\(_,_,ty) -> allParamValues gr ty) co return $ map (mkApp (QC (m,f))) vs @@ -238,7 +270,9 @@ mkCheck loc cat ss = case ss of [] -> return info- _ -> checkError (vcat ss $$ text "in" <+> text cat <+> ppIdent c <+> ppPosition m loc)+ _ -> checkError (ppLocation (msrc mo) loc <> colon $$ + nest 2 (text "Happened in" <+> text cat <+> ppIdent c $$ + nest 2 (vcat ss))) compAbsTyp g t = case t of Vr x -> maybe (checkError (text "no value given to variable" <+> ppIdent x)) return $ lookup x g@@ -252,11 +286,6 @@ Abs _ _ _ -> return t _ -> composOp (compAbsTyp g) t --checkPrintname :: SourceGrammar -> Maybe (L Term) -> Check (Maybe (L Term))-checkPrintname gr (Just (L loc t)) = do (t,_) <- checkLType gr [] t typeStr- return (Just (L loc t))-checkPrintname gr Nothing = return Nothing -- | for grammars obtained otherwise than by parsing ---- update!! checkReservedId :: Ident -> Check ()
@@ -3,7 +3,6 @@ import GF.Grammar.Grammar import GF.Grammar.Macros import GF.Text.Coding-import GF.Infra.Modules import GF.Infra.Option import GF.Data.Operations @@ -18,13 +17,13 @@ decodeStringsInModule enc mo = codeSourceModule (decodeUnicode enc . BS.pack) mo codeSourceModule :: (String -> String) -> SourceModule -> SourceModule-codeSourceModule co (id,mo) = (id,replaceJudgements mo (mapTree codj (jments mo)))+codeSourceModule co (id,mo) = (id,mo{jments = mapTree codj (jments mo)}) where codj (c,info) = case info of- ResOper pty pt -> ResOper (codeLTerms co pty) (codeLTerms co pt) - ResOverload es tyts -> ResOverload es [(codeLTerm co ty,codeLTerm co t) | (ty,t) <- tyts]- CncCat pty pt mpr -> CncCat pty (codeLTerms co pt) (codeLTerms co mpr)- CncFun mty pt mpr -> CncFun mty (codeLTerms co pt) (codeLTerms co mpr)+ ResOper pty pt -> ResOper (codeLTerms co pty) (codeLTerms co pt) + ResOverload es tyts -> ResOverload es [(codeLTerm co ty,codeLTerm co t) | (ty,t) <- tyts]+ CncCat mty mt mpr mpmcfg -> CncCat mty (codeLTerms co mt) (codeLTerms co mpr) mpmcfg+ CncFun mty mt mpr mpmcfg -> CncFun mty (codeLTerms co mt) (codeLTerms co mpr) mpmcfg _ -> info codeLTerms co = fmap (codeLTerm co)
@@ -17,7 +17,6 @@ ) where import GF.Infra.Ident-import GF.Infra.Modules import GF.Infra.Option import GF.Data.Operations import GF.Grammar@@ -46,14 +45,14 @@ return (length ctxt) predefModInfo :: SourceModInfo-predefModInfo = ModInfo MTResource MSComplete noOptions [] Nothing [] [] primitives+predefModInfo = ModInfo MTResource MSComplete noOptions [] Nothing [] [] "Predef.gf" Nothing primitives primitives = Map.fromList [ (cErrorType, ResOper (Just (noLoc typeType)) Nothing) , (cInt , ResOper (Just (noLoc typePType)) Nothing) , (cFloat , ResOper (Just (noLoc typePType)) Nothing) , (cInts , fun [typeInt] typePType)- , (cPBool , ResParam (Just [noLoc (cPTrue,[]),noLoc (cPFalse,[])]) (Just [QC (cPredef,cPTrue), QC (cPredef,cPFalse)]))+ , (cPBool , ResParam (Just (noLoc [(cPTrue,[]),(cPFalse,[])])) (Just [QC (cPredef,cPTrue), QC (cPredef,cPFalse)])) , (cPTrue , ResValue (noLoc typePBool)) , (cPFalse , ResValue (noLoc typePBool)) , (cError , fun [typeStr] typeError) -- non-can. of empty set@@ -78,6 +77,8 @@ [(Explicit,varP,typePType),(Explicit,identW,typeStr)] (Vr varP) []))) Nothing) , (cShow , ResOper (Just (noLoc (mkProd -- (P : PType) -> P -> Tok [(Explicit,varP,typePType),(Explicit,identW,Vr varP)] typeStr []))) Nothing)+ , (cEqVal , ResOper (Just (noLoc (mkProd -- (P : PType) -> P -> P -> PBool+ [(Explicit,varP,typePType),(Explicit,identW,Vr varP),(Explicit,identW,Vr varP)] typePBool []))) Nothing) , (cToStr , ResOper (Just (noLoc (mkProd -- (L : Type) -> L -> Str [(Explicit,varL,typeType),(Explicit,identW,Vr varL)] typeStr []))) Nothing) , (cMapStr , ResOper (Just (noLoc (mkProd -- (L : Type) -> (Str -> Str) -> L -> L@@ -87,7 +88,7 @@ fun from to = oper (mkFunType from to) oper ty = ResOper (Just (noLoc ty)) Nothing - noLoc = L (0,0)+ noLoc = L NoLoc varL :: Ident varL = identC (BS.pack "L")@@ -125,7 +126,7 @@ (EInt i, EInt j) | f == cEqInt -> retb $ if i==j then predefTrue else predefFalse (EInt i, EInt j) | f == cLessInt -> retb $ if i<j then predefTrue else predefFalse (EInt i, EInt j) | f == cPlus -> retb $ EInt $ i+j- (_, t) | f == cShow -> retb $ foldr C Empty $ map K $ words $ render (ppTerm Unqualified 0 t)+ (_, t) | f == cShow && notVar t -> retb $ foldrC $ map K $ words $ render (ppTerm Unqualified 0 t) (_, K s) | f == cRead -> retb $ Cn (identC (BS.pack s)) --- because of K, only works for atomic tags (_, t) | f == cToStr -> trm2str t >>= retb _ -> retb t ---- prtBad "cannot compute predefined" t@@ -136,6 +137,7 @@ (z,_) <- appPredefined z0 case (z, y, x) of (ty,op,t) | f == cMapStr -> retf $ mapStr ty op t+ _ | f == cEqVal && notVar y && notVar x -> retb $ if y==x then predefTrue else predefFalse _ -> retb t ---- prtBad "cannot compute predefined" t _ -> retb t ---- prtBad "cannot compute predefined" t@@ -154,6 +156,11 @@ (K x,K y) -> K (x +++ y) _ -> t _ -> t+ notVar t = case t of+ Vr _ -> False+ App f a -> notVar f && notVar a+ _ -> True ---- would need to check that t is a value+ foldrC ts = if null ts then Empty else foldr1 C ts -- read makes variables into constants
@@ -1,7 +1,3 @@-{-# LANGUAGE CPP #-} module GF.Compile.Compute.Concrete(module M) where-#ifdef CC_LAZY-import GF.Compile.Compute.ConcreteLazy as M -- New, experimental-#else-import GF.Compile.Compute.ConcreteStrict as M -- Old, trusted-#endif+import GF.Compile.Compute.ConcreteLazy as M -- New+--import GF.Compile.Compute.ConcreteStrict as M -- Old, inefficient
@@ -18,7 +18,6 @@ import GF.Grammar.Grammar import GF.Infra.Ident import GF.Infra.Option-import GF.Infra.Modules import GF.Data.Str import GF.Grammar.ShowTerm import GF.Grammar.Printer
@@ -0,0 +1,104 @@+module GF.Compile.Compute.ConcreteNew+ ( normalForm+ , Value(..), Env, eval, apply, value2term+ ) where++import GF.Grammar hiding (Env, VGen, VApp, VRecType)+import GF.Grammar.Lookup+import GF.Grammar.Predef+import GF.Data.Operations+import Data.List (intersect)+import Text.PrettyPrint+import qualified Data.ByteString.Char8 as BS++normalForm :: SourceGrammar -> Term -> Term+normalForm gr t = value2term gr [] (eval gr [] t)++data Value+ = VApp QIdent [Value]+ | VGen Int [Value]+ | VMeta MetaId Env [Value]+ | VClosure Env Term+ | VInt Int+ | VFloat Double+ | VString String+ | VSort Ident+ | VImplArg Value+ | VTblType Value Value+ | VRecType [(Label,Value)]+ | VRec [(Label,Value)]+ | VTbl Type [Value]+ | VC Value Value+ | VPatt Patt+ | VPattType Value+ | VFV Value+ | VAlts Value [(Value, Value)]+ | VError String+ deriving Show++type Env = [(Ident,Value)]++eval :: SourceGrammar -> Env -> Term -> Value+eval gr env (Vr x) = case lookup x env of+ Just v -> v+ Nothing -> error ("Unknown variable "++showIdent x)+eval gr env (Q x)+ | x == (cPredef,cErrorType) -- to be removed+ = let varP = identC (BS.pack "P") + in eval gr [] (mkProd [(Implicit,varP,typeType)] (Vr varP) [])+ | fst x == cPredef = VApp x []+ | otherwise = case lookupResDef gr x of+ Ok t -> eval gr [] t+ Bad err -> error err+eval gr env (QC x) = VApp x []+eval gr env (App e1 e2) = apply gr env e1 [eval gr env e2]+eval gr env (Meta i) = VMeta i env []+eval gr env t@(Prod _ _ _ _) = VClosure env t+eval gr env t@(Abs _ _ _) = VClosure env t+eval gr env (EInt n) = VInt n+eval gr env (EFloat f) = VFloat f+eval gr env (K s) = VString s+eval gr env Empty = VString ""+eval gr env (Sort s) + | s == cTok = VSort cStr -- to be removed+ | otherwise = VSort s+eval gr env (ImplArg t) = VImplArg (eval gr env t)+eval gr env (Table p res) = VTblType (eval gr env p) (eval gr env res)+eval gr env (RecType rs) = VRecType [(l,eval gr env ty) | (l,ty) <- rs]+eval gr env t@(ExtR t1 t2) =+ let error = VError (show (text "The term" <+> ppTerm Unqualified 0 t <+> text "is not reducible"))+ in case (eval gr env t1, eval gr env t2) of+ (VRecType rs1, VRecType rs2) -> case intersect (map fst rs1) (map fst rs2) of+ [] -> VRecType (rs1 ++ rs2)+ _ -> error+ (VRec rs1, VRec rs2) -> case intersect (map fst rs1) (map fst rs2) of+ [] -> VRec (rs1 ++ rs2)+ _ -> error+ _ -> error+eval gr env t = error ("eval "++show t)++apply gr env t [] = eval gr env t+apply gr env (Q x) vs = case lookupResDef gr x of+ Ok t -> apply gr [] t vs+ Bad err -> error err+apply gr env (App t1 t2) vs = apply gr env t1 (eval gr env t2 : vs)+apply gr env (Abs b x t) (v:vs) = case (b,v) of+ (Implicit,VImplArg v) -> apply gr ((x,v):env) t vs+ (Explicit, v) -> apply gr ((x,v):env) t vs+apply gr env t vs = error ("apply "++show t)++value2term :: SourceGrammar -> [Ident] -> Value -> Term+value2term gr xs (VApp f vs) = foldl App (Q f) (map (value2term gr xs) vs)+value2term gr xs (VGen j vs) = foldl App (Vr (reverse xs !! j)) (map (value2term gr xs) vs)+value2term gr xs (VMeta j env vs) = foldl App (Meta j) (map (value2term gr xs) vs)+value2term gr xs (VClosure env (Prod bt x t1 t2)) = Prod bt x (value2term gr xs (eval gr env t1))+ (value2term gr (x:xs) (eval gr ((x,VGen (length xs) []) : env) t2))+value2term gr xs (VClosure env (Abs bt x t)) = Abs bt x (value2term gr (x:xs) (eval gr ((x,VGen (length xs) []) : env) t))+value2term gr xs (VInt n) = EInt n+value2term gr xs (VFloat f) = EFloat f+value2term gr xs (VString s) = if null s then Empty else K s+value2term gr xs (VSort s) = Sort s+value2term gr xs (VImplArg v) = ImplArg (value2term gr xs v)+value2term gr xs (VTblType p res) = Table (value2term gr xs p) (value2term gr xs res)+value2term gr xs (VRecType rs) = RecType [(l,value2term gr xs v) | (l,v) <- rs]+value2term gr xs v = error ("value2term "++show v)
@@ -10,14 +10,14 @@ ----------------------------------------------------------------------------- module GF.Compile.GeneratePMCFG- (convertConcrete) where+ (generatePMCFG, pgfCncCat, addPMCFG+ ) where import PGF.CId-import PGF.Data hiding (Type)+import PGF.Data hiding (Type, Production) import GF.Infra.Option import GF.Grammar hiding (Env, mkRecord, mkTable)-import qualified GF.Infra.Modules as M import GF.Grammar.Lookup import GF.Grammar.Predef import GF.Data.BacktrackM@@ -29,9 +29,11 @@ import qualified Data.Set as Set import qualified Data.List as List import qualified Data.IntMap as IntMap+import qualified Data.IntSet as IntSet import qualified Data.ByteString.Char8 as BS import Text.PrettyPrint hiding (Str) import Data.Array.IArray+import Data.Array.Unboxed import Data.Maybe import Data.Char (isDigit) import Control.Monad@@ -41,156 +43,84 @@ ---------------------------------------------------------------------- -- main conversion function --convertConcrete :: Options -> SourceGrammar -> SourceModule -> SourceModule -> IO Concr-convertConcrete opts0 gr am cm = do- let env = emptyGrammarEnv gr cm- when (flag optProf opts) $ do- profileGrammar cm env pfrules- env <- foldM (convertLinDef gr opts) env pflindefs- env <- foldM (convertRule gr opts) env pfrules- return $ getConcr flags printnames env+generatePMCFG :: Options -> [SourceModule] -> SourceModule -> IO SourceModule+generatePMCFG opts mos cmo@(cm,cmi) = do+ (seqs,js) <- mapAccumWithKeyM (addPMCFG opts gr am cm) Map.empty (jments cmi)+ when (verbAtLeast opts Verbose) $ hPutStrLn stderr ""+ return (cm,cmi{mseqs = Just (mkSetArray seqs), jments = js}) where- (m,mo) = cm- - opts = addOptions (M.flags (snd am)) opts0-- pflindefs = [- ((m,id),term,lincat) |- (id,GF.Grammar.CncCat (Just (L _ lincat)) (Just (L _ term)) _) <- Map.toList (M.jments mo)]-- pfrules = [- (PFRule id args ([],res) (map (\(_,_,ty) -> ty) cont) val term) |- (id,GF.Grammar.CncFun (Just (cat,cont,val)) (Just (L _ term)) _) <- Map.toList (M.jments mo),- let (ctxt,res,_) = err error typeForm (lookupFunType gr (fst am) id)- args = [catSkeleton ty | (_,_,ty) <- ctxt]]-- flags = Map.fromList [(mkCId f,LStr x) | (f,x) <- optionsPGF (M.flags mo)]-- printnames = Map.fromAscList [(i2i id, name) | (id,info) <- Map.toList (M.jments mo), name <- prn info]- where- prn (GF.Grammar.CncFun _ _ (Just (L _ tr))) = [flatten tr]- prn (GF.Grammar.CncCat _ _ (Just (L _ tr))) = [flatten tr]- prn _ = []-- flatten (K s) = s- flatten (Alts x _) = flatten x- flatten (C x y) = flatten x +++ flatten y--i2i :: Ident -> CId-i2i = CId . ident2bs+ gr = mGrammar (cmo:mos)+ MTConcrete am = mtype cmi -profileGrammar (m,mo) env@(GrammarEnv last_id catSet seqSet funSet lindefSet crcSet appSet prodSet) pfrules = do- hPutStrLn stderr ""- hPutStrLn stderr ("Language: " ++ showIdent m)- hPutStrLn stderr ""- hPutStrLn stderr "Categories Count"- hPutStrLn stderr "--------------------------------"- mapM_ profileCat (Map.toList catSet)- hPutStrLn stderr "--------------------------------"- hPutStrLn stderr ""- hPutStrLn stderr "Rules Count"- hPutStrLn stderr "--------------------------------"- mapM_ profileRule pfrules- hPutStrLn stderr "--------------------------------"+mapAccumWithKeyM :: (Monad m, Ord k) => (a -> k -> b -> m (a,c)) -> a+ -> Map.Map k b -> m (a,Map.Map k c)+mapAccumWithKeyM f a m = do let xs = Map.toAscList m+ (a,ys) <- mapAccumM f a xs+ return (a,Map.fromAscList ys) where- profileCat (cid,(fcat1,fcat2,_)) = do- hPutStrLn stderr (lformat 23 (showIdent cid) ++ rformat 9 (show (fcat2-fcat1+1)))+ mapAccumM f a [] = return (a,[])+ mapAccumM f a ((k,x):kxs) = do (a,y ) <- f a k x+ (a,kys) <- mapAccumM f a kxs+ return (a,(k,y):kys) - profileRule (PFRule fun args res ctypes ctype term) = do- let pargs = map (protoFCat env) args- hPutStrLn stderr (lformat 23 (showIdent fun) ++ rformat 9 (show (product (map (catFactor env) args))))- where- catFactor (GrammarEnv last_id catSet seqSet funSet lindefSet crcSet appSet prodSet) (n,(_,cat)) =- case Map.lookup cat catSet of- Just (s,e,_) -> e-s+1- Nothing -> 0 - lformat :: Int -> String -> String- lformat n s = s ++ replicate (n-length s) ' '+addPMCFG :: Options -> SourceGrammar -> Ident -> Ident -> SeqSet -> Ident -> Info -> IO (SeqSet, Info)+addPMCFG opts gr am cm seqs id (GF.Grammar.CncFun mty@(Just (cat,cont,val)) mlin@(Just (L _ term)) mprn Nothing) = do+ let pres = protoFCat gr res val+ pargs = [protoFCat gr (snd $ catSkeleton ty) lincat | ((_,_,ty),(_,_,lincat)) <- zip ctxt cont] - rformat :: Int -> String -> String- rformat n s = replicate (n-length s) ' ' ++ s+ pmcfgEnv0 = emptyPMCFGEnv -data ProtoFRule = PFRule Ident {- function -}- [([Cat],Cat)] {- argument types: context size and category -}- ([Cat],Cat) {- result type : context size (always 0) and category -}- [Type] {- argument lin-types representation -}- Type {- result lin-type representation -}- Term {- body -}+ b = runCnvMonad gr (unfactor term >>= convertTerm opts CNil val) (pargs,[])+ (seqs1,b1) = addSequencesB seqs b+ pmcfgEnv1 = foldBM addRule+ pmcfgEnv0+ (goB b1 CNil [])+ (pres,pargs)+ pmcfg = getPMCFG pmcfgEnv1+ + stats = let PMCFG prods funs = pmcfg+ (s,e) = bounds funs+ !prods_cnt = length prods+ !funs_cnt = e-s+1+ in (prods_cnt,funs_cnt) -optimize :: [ProtoFCat] -> GrammarEnv -> GrammarEnv-optimize pargs (GrammarEnv last_id catSet seqSet funSet lindefSet crcSet appSet prodSet) =- IntMap.foldWithKey optimize (GrammarEnv last_id catSet seqSet funSet lindefSet crcSet IntMap.empty prodSet) appSet+ when (verbAtLeast opts Verbose) $ hPutStr stderr ("\n+ "++showIdent id ++ " " ++ show (product (map catFactor pargs)))+ seqs1 `seq` stats `seq` return ()+ when (verbAtLeast opts Verbose) $ hPutStr stderr (" "++show stats)+ return (seqs1,GF.Grammar.CncFun mty mlin mprn (Just pmcfg)) where- optimize cat ps env = IntMap.foldWithKey ff env (IntMap.fromListWith (++) [(funid,[args]) | (funid,args) <- Set.toList ps])- where- ff :: FunId -> [[FId]] -> GrammarEnv -> GrammarEnv- ff funid xs env- | product (map Set.size ys) == count- = case List.mapAccumL (\env c -> addCoercion env (Set.toList c)) env ys of- (env,args) -> let xs = sequence (zipWith addContext pargs args)- in List.foldl (\env x -> addProduction env cat (PApply funid x)) env xs- | otherwise = List.foldl (\env args -> let xs = sequence (zipWith addContext pargs args)- in List.foldl (\env x -> addProduction env cat (PApply funid x)) env xs) env xs- where- count = length xs- ys = foldr (zipWith Set.insert) (repeat Set.empty) xs-- addContext (PFCat ctxt _ _) fid = do hyps <- mapM toCncHypo ctxt- return (PArg hyps fid)-- toCncHypo cat =- case Map.lookup cat catSet of- Just (s,e,_) -> do fid <- range (s,e)- guard (fid `IntMap.member` lindefSet)- return (fidVar,fid)- Nothing -> mzero--convertRule :: SourceGrammar -> Options -> GrammarEnv -> ProtoFRule -> IO GrammarEnv-convertRule gr opts grammarEnv (PFRule fun args res ctypes ctype term) = do- let pres = protoFCat grammarEnv res- pargs = map (protoFCat grammarEnv) args+ (ctxt,res,_) = err error typeForm (lookupFunType gr am id) - b = runCnvMonad gr (unfactor term >>= convertTerm opts CNil ctype) (pargs,[])- (grammarEnv1,b1) = addSequencesB grammarEnv b- grammarEnv2 = foldBM addRule- grammarEnv1- (goB b1 CNil [])- (pres,pargs)- grammarEnv3 = optimize pargs grammarEnv2- when (verbAtLeast opts Verbose) $ hPutStrLn stderr ("+ "++showIdent fun)- return $! grammarEnv3- where addRule lins (newCat', newArgs') env0 =- let [newCat] = getFIds env0 newCat'- (env1, newArgs) = List.mapAccumL (\env -> addCoercion env . getFIds env) env0 newArgs'-- (env2,funid) = addCncFun env1 (PGF.Data.CncFun (i2i fun) (mkArray lins))+ let [newCat] = getFIds newCat'+ !fun = mkArray lins+ newArgs = map getFIds newArgs'+ in addFunction env0 newCat fun newArgs - in addApplication env2 newCat (funid,newArgs)+addPMCFG opts gr am cm seqs id (GF.Grammar.CncCat mty@(Just (L _ lincat)) mdef@(Just (L _ term)) mprn Nothing) = do+ let pres = protoFCat gr (am,id) lincat+ parg = protoFCat gr (identW,cVar) typeStr -convertLinDef :: SourceGrammar -> Options -> GrammarEnv -> (Cat,Term,Type) -> IO GrammarEnv-convertLinDef gr opts grammarEnv (cat,lindef,lincat) = do- let pres = protoFCat grammarEnv ([],cat)- parg = protoFCat grammarEnv ([],(identW,cVar))+ pmcfgEnv0 = emptyPMCFGEnv - b = runCnvMonad gr (unfactor lindef >>= convertTerm opts CNil lincat) ([parg],[])- (grammarEnv1,b1) = addSequencesB grammarEnv b- grammarEnv2 = foldBM addRule- grammarEnv1- (goB b1 CNil [])- (pres,[parg])- when (verbAtLeast opts Verbose) $ hPutStrLn stderr ("+ "++showCId lindefCId)- return $! grammarEnv2+ b = runCnvMonad gr (unfactor term >>= convertTerm opts CNil lincat) ([parg],[])+ (seqs1,b1) = addSequencesB seqs b+ pmcfgEnv1 = foldBM addRule+ pmcfgEnv0+ (goB b1 CNil [])+ (pres,[parg])+ pmcfg = getPMCFG pmcfgEnv1+ when (verbAtLeast opts Verbose) $ hPutStr stderr ("\n+ "++showIdent id++" "++show (catFactor pres))+ seqs1 `seq` pmcfg `seq` return (seqs1,GF.Grammar.CncCat mty mdef mprn (Just pmcfg)) where- lindefCId = mkCId ("lindef "++showIdent (snd cat))- addRule lins (newCat', newArgs') env0 =- let [newCat] = getFIds env0 newCat'- (env1,funid) = addCncFun env0 (PGF.Data.CncFun lindefCId (mkArray lins))- in addLinDef env1 newCat funid+ let [newCat] = getFIds newCat'+ !fun = mkArray lins+ in addFunction env0 newCat fun [[fidVar]] +addPMCFG opts gr am cm seqs id info = return (seqs, info)+ unfactor :: Term -> CnvMonad Term unfactor t = CM (\gr c -> c (unfac gr t)) where@@ -203,6 +133,22 @@ Vr y | y == x -> u _ -> composSafeOp (restore x u) t +pgfCncCat :: SourceGrammar -> Type -> Int -> PGF.Data.CncCat+pgfCncCat gr lincat index =+ let ((_,size),schema) = computeCatRange gr lincat+ in PGF.Data.CncCat index+ (index+size-1)+ (mkArray (map (renderStyle style{mode=OneLineMode} . ppPath) + (getStrPaths schema)))+ where+ getStrPaths :: Schema Identity s c -> [Path]+ getStrPaths = collect CNil []+ where+ collect path paths (CRec rs) = foldr (\(lbl,Identity t) paths -> collect (CProj lbl path) paths t) paths rs+ collect path paths (CTbl _ cs) = foldr (\(trm,Identity t) paths -> collect (CSel trm path) paths t) paths cs+ collect path paths (CStr _) = reversePath path : paths+ collect path paths (CPar _) = paths+ ---------------------------------------------------------------------- -- CnvMonad monad --@@ -249,7 +195,7 @@ choices :: Int -> Path -> CnvMonad Term choices nr path = do (args,_) <- get let PFCat _ _ schema = args !! nr- descend schema path CNil+ descend schema path CNil where descend (CRec rs) (CProj lbl path) rpath = case lookup lbl rs of Just (Identity t) -> descend t path (CProj lbl rpath)@@ -306,15 +252,46 @@ -- The annotations are as follows: the strings are annotated with -- their index in the PMCFG tuple, the parameters are annotated -- with their value both as term and as index.-data ProtoFCat = PFCat [Ident] Ident Proto+data ProtoFCat = PFCat Ident Int (Schema Identity Int (Int,[(Term,Int)])) type Env = (ProtoFCat, [ProtoFCat]) -protoFCat :: GrammarEnv -> ([Cat],Cat) -> ProtoFCat-protoFCat (GrammarEnv last_id catSet seqSet funSet lindefSet crcSet appSet prodSet) (ctxt,(_,cat)) =- case Map.lookup cat catSet of- Just (_,_,proto) -> PFCat (map snd ctxt) cat proto- Nothing -> error "unknown category"- +protoFCat :: SourceGrammar -> Cat -> Type -> ProtoFCat+protoFCat gr cat lincat =+ case computeCatRange gr lincat of+ ((_,f),schema) -> PFCat (snd cat) f schema++getFIds :: ProtoFCat -> [FId]+getFIds (PFCat _ _ schema) =+ reverse (solutions (variants schema) ())+ where+ variants (CRec rs) = fmap sum $ mapM (\(lbl,Identity t) -> variants t) rs+ variants (CTbl _ cs) = fmap sum $ mapM (\(trm,Identity t) -> variants t) cs+ variants (CStr _) = return 0+ variants (CPar (m,values)) = do (value,index) <- member values+ return (m*index)++catFactor :: ProtoFCat -> Int+catFactor (PFCat _ f _) = f++computeCatRange gr lincat = compute (0,1) lincat+ where+ compute st (RecType rs) = let (st',rs') = List.mapAccumL (\st (lbl,t) -> case lbl of+ LVar _ -> let (st',t') = compute st t+ in (st ,(lbl,Identity t'))+ _ -> let (st',t') = compute st t+ in (st',(lbl,Identity t'))) st rs+ in (st',CRec rs')+ compute st (Table pt vt) = let vs = err error id (allParamValues gr pt)+ (st',cs') = List.mapAccumL (\st v -> let (st',vt') = compute st vt+ in (st',(v,Identity vt'))) st vs+ in (st',CTbl pt cs')+ compute st (Sort s)+ | s == cStr = let (index,m) = st+ in ((index+1,m),CStr index)+ compute st t = let vs = err error id (allParamValues gr t)+ (index,m) = st+ in ((index,m*length vs),CPar (m,zip vs [0..]))+ ppPath (CProj lbl path) = ppLabel lbl <+> ppPath path ppPath (CSel trm path) = ppTerm Unqualified 5 trm <+> ppPath path ppPath CNil = empty@@ -364,7 +341,7 @@ mkTable pt (map (\v -> (v,convertArg opts vt nr (CSel v path))) vs) convertArg opts (Sort _) nr path = do (args,_) <- get- let PFCat _ cat schema = args !! nr+ let PFCat cat _ schema = args !! nr l = index (reversePath path) schema sym | CProj (LVar i) CNil <- path = SymVar nr i | isLiteralCat opts cat = SymLit nr l@@ -412,27 +389,38 @@ goV (CStr seqid) rpath ss = return (seqid : ss) goV (CPar t) rpath ss = restrictHead (reversePath rpath) t >> return ss -addSequencesB :: GrammarEnv -> Branch (Value [Symbol]) -> (GrammarEnv, Branch (Value SeqId))-addSequencesB env (Case nr path bs) = let (env1,bs1) = List.mapAccumL (\env (trm,b) -> let (env',b') = addSequencesB env b- in (env',(trm,b'))) env bs- in (env1,Case nr path bs1)-addSequencesB env (Variant bs) = let (env1,bs1) = List.mapAccumL addSequencesB env bs- in (env1,Variant bs1)-addSequencesB env (Return v) = let (env1,v1) = addSequencesV env v- in (env1,Return v1) -addSequencesV :: GrammarEnv -> Value [Symbol] -> (GrammarEnv, Value SeqId)-addSequencesV env (CRec vs) = let (env1,vs1) = List.mapAccumL (\env (lbl,b) -> let (env',b') = addSequencesB env b- in (env',(lbl,b'))) env vs- in (env1,CRec vs1)-addSequencesV env (CTbl pt vs)=let (env1,vs1) = List.mapAccumL (\env (trm,b) -> let (env',b') = addSequencesB env b- in (env',(trm,b'))) env vs- in (env1,CTbl pt vs1)-addSequencesV env (CStr lin) = let (env1,seqid) = addSequence env (optimizeLin lin)- in (env1,CStr seqid)-addSequencesV env (CPar i) = (env,CPar i)+----------------------------------------------------------------------+-- SeqSet +type SeqSet = Map.Map Sequence SeqId +addSequencesB :: SeqSet -> Branch (Value [Symbol]) -> (SeqSet, Branch (Value SeqId))+addSequencesB seqs (Case nr path bs) = let !(seqs1,bs1) = mapAccumL' (\seqs (trm,b) -> let !(seqs',b') = addSequencesB seqs b+ in (seqs',(trm,b'))) seqs bs+ in (seqs1,Case nr path bs1)+addSequencesB seqs (Variant bs) = let !(seqs1,bs1) = mapAccumL' addSequencesB seqs bs+ in (seqs1,Variant bs1)+addSequencesB seqs (Return v) = let !(seqs1,v1) = addSequencesV seqs v+ in (seqs1,Return v1)++addSequencesV :: SeqSet -> Value [Symbol] -> (SeqSet, Value SeqId)+addSequencesV seqs (CRec vs) = let !(seqs1,vs1) = mapAccumL' (\seqs (lbl,b) -> let !(seqs',b') = addSequencesB seqs b+ in (seqs',(lbl,b'))) seqs vs+ in (seqs1,CRec vs1)+addSequencesV seqs (CTbl pt vs)=let !(seqs1,vs1) = mapAccumL' (\seqs (trm,b) -> let !(seqs',b') = addSequencesB seqs b+ in (seqs',(trm,b'))) seqs vs+ in (seqs1,CTbl pt vs1)+addSequencesV seqs (CStr lin) = let !(seqs1,seqid) = addSequence seqs (optimizeLin lin)+ in (seqs1,CStr seqid)+addSequencesV seqs (CPar i) = (seqs,CPar i)++-- a strict version of Data.List.mapAccumL+mapAccumL' f s [] = (s,[])+mapAccumL' f s (x:xs) = (s'',y:ys)+ where !(s', y ) = f s x+ !(s'',ys) = mapAccumL' f s' xs+ optimizeLin [] = [] optimizeLin lin@(SymKS _ : _) = let (ts,lin') = getRest lin@@ -443,7 +431,16 @@ getRest lin = ([],lin) optimizeLin (sym : lin) = sym : optimizeLin lin +addSequence :: SeqSet -> [Symbol] -> (SeqSet,SeqId)+addSequence seqs lst =+ case Map.lookup seq seqs of+ Just id -> (seqs,id)+ Nothing -> let !last_seq = Map.size seqs+ in (Map.insert seq last_seq seqs, last_seq)+ where+ seq = mkArray lst + ------------------------------------------------------------ -- eval a term to ground terms @@ -479,124 +476,36 @@ ---------------------------------------------------------------------- -- GrammarEnv -data GrammarEnv = GrammarEnv {-# UNPACK #-} !Int CatSet SeqSet FunSet LinDefSet CoerceSet AppSet ProdSet-type Proto = Schema Identity Int (Int,[(Term,Int)])-type CatSet = Map.Map Ident (FId,FId,Proto)-type SeqSet = Map.Map Sequence SeqId-type FunSet = Map.Map CncFun FunId-type LinDefSet= IntMap.IntMap [FunId]-type CoerceSet= Map.Map [FId] FId-type AppSet = IntMap.IntMap (Set.Set (FunId,[FId]))-type ProdSet = IntMap.IntMap (Set.Set Production)--emptyGrammarEnv gr (m,mo) =- let (last_id,catSet) = Map.mapAccumWithKey computeCatRange 0 lincats- in GrammarEnv last_id catSet Map.empty Map.empty IntMap.empty Map.empty IntMap.empty IntMap.empty- where- computeCatRange index cat ctype- | cat == cString = (index,(fidString,fidString,CRec [(theLinLabel,Identity (CStr 0))]))- | cat == cInt = (index,(fidInt, fidInt, CRec [(theLinLabel,Identity (CStr 0))]))- | cat == cFloat = (index,(fidFloat, fidFloat, CRec [(theLinLabel,Identity (CStr 0))]))- | cat == cVar = (index,(fidVar, fidVar, CStr 0))- | otherwise = (index+size,(index,index+size-1,schema))- where- ((_,size),schema) = compute (0,1) ctype- - compute st (RecType rs) = let (st',rs') = List.mapAccumL (\st (lbl,t) -> let (st',t') = compute st t- in (st',(lbl,Identity t'))) st rs- in (st',CRec rs')- compute st (Table pt vt) = let vs = err error id (allParamValues gr pt)- (st',cs') = List.mapAccumL (\st v -> let (st',vt') = compute st vt- in (st',(v,Identity vt'))) st vs- in (st',CTbl pt cs')- compute st (Sort s)- | s == cStr = let (index,m) = st- in ((index+1,m),CStr index)- compute st t = let vs = err error id (allParamValues gr t)- (index,m) = st- in ((index,m*length vs),CPar (m,zip vs [0..]))-- lincats =- Map.insert cVar (Sort cStr) $- Map.fromAscList - [(c, ty) | (c,GF.Grammar.CncCat (Just (L _ ty)) _ _) <- Map.toList (M.jments mo)]--addApplication :: GrammarEnv -> FId -> (FunId,[FId]) -> GrammarEnv-addApplication (GrammarEnv last_id catSet seqSet funSet lindefSet crcSet appSet prodSet) fid p =- GrammarEnv last_id catSet seqSet funSet lindefSet crcSet (IntMap.insertWith Set.union fid (Set.singleton p) appSet) prodSet--addProduction :: GrammarEnv -> FId -> Production -> GrammarEnv-addProduction (GrammarEnv last_id catSet seqSet funSet lindefSet crcSet appSet prodSet) cat p =- GrammarEnv last_id catSet seqSet funSet lindefSet crcSet appSet (IntMap.insertWith Set.union cat (Set.singleton p) prodSet)+data PMCFGEnv = PMCFGEnv !ProdSet !FunSet+type ProdSet = Set.Set Production+type FunSet = Map.Map (UArray LIndex SeqId) FunId -addSequence :: GrammarEnv -> [Symbol] -> (GrammarEnv,SeqId)-addSequence env@(GrammarEnv last_id catSet seqSet funSet lindefSet crcSet appSet prodSet) lst =- case Map.lookup seq seqSet of- Just id -> (env,id)- Nothing -> let !last_seq = Map.size seqSet- in (GrammarEnv last_id catSet (Map.insert seq last_seq seqSet) funSet lindefSet crcSet appSet prodSet,last_seq)- where- seq = mkArray lst+emptyPMCFGEnv =+ PMCFGEnv Set.empty Map.empty -addCncFun :: GrammarEnv -> CncFun -> (GrammarEnv,FunId)-addCncFun env@(GrammarEnv last_id catSet seqSet funSet lindefSet crcSet appSet prodSet) fun = +addFunction :: PMCFGEnv -> FId -> UArray LIndex SeqId -> [[FId]] -> PMCFGEnv+addFunction (PMCFGEnv prodSet funSet) !fid fun args = case Map.lookup fun funSet of- Just id -> (env,id)- Nothing -> let !last_funid = Map.size funSet- in (GrammarEnv last_id catSet seqSet (Map.insert fun last_funid funSet) lindefSet crcSet appSet prodSet,last_funid)--addCoercion :: GrammarEnv -> [FId] -> (GrammarEnv,FId)-addCoercion env@(GrammarEnv last_id catSet seqSet funSet lindefSet crcSet appSet prodSet) sub_fcats =- case sub_fcats of- [fcat] -> (env,fcat)- _ -> case Map.lookup sub_fcats crcSet of- Just fcat -> (env,fcat)- Nothing -> let !fcat = last_id+1- in (GrammarEnv fcat catSet seqSet funSet lindefSet (Map.insert sub_fcats fcat crcSet) appSet prodSet,fcat)--addLinDef :: GrammarEnv -> FId -> FunId -> GrammarEnv-addLinDef (GrammarEnv last_id catSet seqSet funSet lindefSet crcSet appSet prodSet) fid funid =- GrammarEnv last_id catSet seqSet funSet (IntMap.insertWith (++) fid [funid] lindefSet) crcSet appSet prodSet+ Just !funid -> PMCFGEnv (Set.insert (Production fid funid args) prodSet)+ funSet+ Nothing -> let !funid = Map.size funSet+ in PMCFGEnv (Set.insert (Production fid funid args) prodSet)+ (Map.insert fun funid funSet) -getConcr :: Map.Map CId Literal -> Map.Map CId String -> GrammarEnv -> Concr-getConcr flags printnames (GrammarEnv last_id catSet seqSet funSet lindefSet crcSet appSet prodSet) =- Concr { cflags = flags- , printnames = printnames- , cncfuns = mkSetArray funSet- , lindefs = lindefSet- , sequences = mkSetArray seqSet- , productions = IntMap.union prodSet coercions- , pproductions = IntMap.empty- , lproductions = Map.empty- , lexicon = IntMap.empty- , cnccats = Map.fromList [(i2i cat,PGF.Data.CncCat start end (mkArray (map (renderStyle style{mode=OneLineMode} . ppPath) (getStrPaths schema))))- | (cat,(start,end,schema)) <- Map.toList catSet]- , totalCats = last_id+1- }+getPMCFG :: PMCFGEnv -> PMCFG+getPMCFG (PMCFGEnv prodSet funSet) =+ PMCFG (optimize prodSet) (mkSetArray funSet) where- mkSetArray map = array (0,Map.size map-1) [(v,k) | (k,v) <- Map.toList map]- - coercions = IntMap.fromList [(fcat,Set.fromList (map PCoerce sub_fcats)) | (sub_fcats,fcat) <- Map.toList crcSet]-- getStrPaths :: Schema Identity s c -> [Path]- getStrPaths = collect CNil []+ optimize ps = Map.foldWithKey ff [] (Map.fromListWith (++) [((fid,funid),[args]) | (Production fid funid args) <- Set.toList ps]) where- collect path paths (CRec rs) = foldr (\(lbl,Identity t) paths -> collect (CProj lbl path) paths t) paths rs- collect path paths (CTbl _ cs) = foldr (\(trm,Identity t) paths -> collect (CSel trm path) paths t) paths cs- collect path paths (CStr _) = reversePath path : paths- collect path paths (CPar _) = paths---getFIds :: GrammarEnv -> ProtoFCat -> [FId]-getFIds (GrammarEnv last_id catSet seqSet funSet lindefSet crcSet appSet prodSet) (PFCat ctxt cat schema) =- case Map.lookup cat catSet of- Just (start,end,_) -> reverse (solutions (fmap (start +) $ variants schema) ())- where- variants (CRec rs) = fmap sum $ mapM (\(lbl,Identity t) -> variants t) rs- variants (CTbl _ cs) = fmap sum $ mapM (\(trm,Identity t) -> variants t) cs- variants (CStr _) = return 0- variants (CPar (m,values)) = do (value,index) <- member values- return (m*index)+ ff :: (FId,FunId) -> [[[FId]]] -> [Production] -> [Production]+ ff (fid,funid) xs prods+ | product (map IntSet.size ys) == count+ = (Production fid funid (map IntSet.toList ys)) : prods+ | otherwise = map (Production fid funid) xs ++ prods+ where+ count = sum (map (product . map length) xs)+ ys = foldl (zipWith (foldr IntSet.insert)) (repeat IntSet.empty) xs ------------------------------------------------------------ -- updating the MCF rule@@ -614,9 +523,9 @@ put (head, args) restrictProtoFCat :: (Functor m, MonadPlus m) => Path -> Term -> ProtoFCat -> m ProtoFCat-restrictProtoFCat path v (PFCat ctxt cat schema) = do+restrictProtoFCat path v (PFCat cat f schema) = do schema <- addConstraint path v schema- return (PFCat ctxt cat schema)+ return (PFCat cat f schema) where addConstraint (CProj lbl path) v (CRec rs) = fmap CRec $ update lbl (addConstraint path v) rs addConstraint (CSel trm path) v (CTbl pt cs) = fmap (CTbl pt) $ update trm (addConstraint path v) cs@@ -632,4 +541,5 @@ | otherwise = do xs <- update k0 f xs return (x:xs) -mkArray lst = listArray (0,length lst-1) lst+mkArray lst = listArray (0,length lst-1) lst+mkSetArray map = array (0,Map.size map-1) [(v,k) | (k,v) <- Map.toList map]
@@ -12,12 +12,11 @@ -- this module builds the internal GF grammar that is sent to the type checker ----------------------------------------------------------------------------- -module GF.Compile.GetGrammar (getSourceModule, addOptionsToModule) where+module GF.Compile.GetGrammar (getSourceModule) where import GF.Data.Operations import GF.Infra.UseIO-import GF.Infra.Modules import GF.Infra.Option import GF.Grammar.Lexer import GF.Grammar.Parser@@ -39,13 +38,10 @@ case runP pModDef content of Left (Pn l c,msg) -> do file <- writeTemp tmp let location = file++":"++show l++":"++show c- return (Bad (location++": "++msg))- Right mo -> do removeTemp tmp- return (Ok (addOptionsToModule opts mo))+ return (Bad (location++":\n "++msg))+ Right (i,mi) -> do removeTemp tmp+ return (Ok (i,mi{mflags=mflags mi `addOptions` opts, msrc=file0})) `catch` (return . Bad . show)--addOptionsToModule :: Options -> SourceModule -> SourceModule-addOptionsToModule opts = mapSourceModule (\m -> m { flags = flags m `addOptions` opts }) runPreprocessor :: Temporary -> String -> IO Temporary runPreprocessor tmp0 p =
@@ -1,10 +1,11 @@-{-# LANGUAGE PatternGuards #-}+{-# LANGUAGE BangPatterns #-} module GF.Compile.GrammarToPGF (mkCanon2pgf) where import GF.Compile.Export import GF.Compile.GeneratePMCFG import PGF.CId+import PGF.Data(fidInt,fidFloat,fidString) import PGF.Optimize(updateProductionIndices) import qualified PGF.Macros as CM import qualified PGF.Data as C@@ -15,9 +16,8 @@ import qualified GF.Grammar.Lookup as Look import qualified GF.Grammar as A import qualified GF.Grammar.Macros as GM---import qualified GF.Compile.Compute.Concrete as Compute ---- -import qualified GF.Infra.Modules as M import qualified GF.Infra.Option as O+import GF.Compile.GeneratePMCFG import GF.Infra.Ident import GF.Infra.Option@@ -26,61 +26,81 @@ import Data.List import Data.Function import Data.Char (isDigit,isSpace)+import qualified Data.Set as Set import qualified Data.Map as Map+import qualified Data.IntMap as IntMap import qualified Data.ByteString.Char8 as BS+import Data.Array.IArray import Text.PrettyPrint---import Debug.Trace -------- when developing, swap commenting---traceD s t = trace s t -traceD s t = t +import Control.Monad.Identity --- the main function: generate PGF from GF.-mkCanon2pgf :: Options -> Ident -> SourceGrammar -> IO D.PGF-mkCanon2pgf opts cnc gr = (canon2pgf opts gr . reorder abs) gr- where- abs = err (const cnc) id $ M.abstractOfConcrete gr cnc---- Generate PGF from grammar.--type AbsConcsGrammar = (IdModInfo,[IdModInfo]) -- (abstract,concretes)-type IdModInfo = (Ident,SourceModInfo)--canon2pgf :: Options -> SourceGrammar -> AbsConcsGrammar -> IO D.PGF-canon2pgf opts gr (am,cms) = do- if dump opts DumpCanon- then putStrLn (render (vcat (map (ppModule Qualified) (am:cms))))- else return ()- (an,abs) <- mkAbstr am- cncs <- mapM (mkConcr am) cms+mkCanon2pgf :: Options -> SourceGrammar -> Ident -> IO D.PGF+mkCanon2pgf opts gr am = do+ (an,abs) <- mkAbstr gr am+ cncs <- mapM (mkConcr gr) (allConcretes gr am) return $ updateProductionIndices (D.PGF Map.empty an abs (Map.fromList cncs)) where- mkAbstr (a,abm) = return (i2i a, D.Abstr flags funs cats)+ mkAbstr gr am = return (i2i am, D.Abstr flags funs cats) where- flags = Map.fromList [(mkCId f,C.LStr x) | (f,x) <- optionsPGF (M.flags abm)]+ aflags = + concatOptions (reverse [mflags mo | (_,mo) <- modules gr, isModAbs mo])++ adefs =+ [((cPredefAbs,c), AbsCat (Just (L NoLoc []))) | c <- [cFloat,cInt,cString]] ++ + Look.allOrigInfos gr am++ flags = Map.fromList [(mkCId f,C.LStr x) | (f,x) <- optionsPGF aflags] - funs = Map.fromAscList [(i2i f, (mkType [] ty, mkArrity ma, mkDef pty, 0)) | - (f,AbsFun (Just (L _ ty)) ma pty _) <- Map.toAscList (M.jments abm)]+ funs = Map.fromList [(i2i f, (mkType [] ty, mkArrity ma, mkDef pty, 0)) | + ((m,f),AbsFun (Just (L _ ty)) ma pty _) <- adefs] - cats = Map.fromAscList [(i2i c, (snd (mkContext [] cont),catfuns c)) |- (c,AbsCat (Just (L _ cont))) <- Map.toAscList (M.jments abm)]+ cats = Map.fromList [(i2i c, (snd (mkContext [] cont),catfuns c)) |+ ((m,c),AbsCat (Just (L _ cont))) <- adefs] catfuns cat = (map (\x -> (0,snd x)) . sortBy (compare `on` fst))- [(loc,i2i f) | (f,AbsFun (Just (L loc ty)) _ _ (Just True)) <- tree2list (M.jments abm), snd (GM.valCat ty) == cat]+ [(loc,i2i f) | ((m,f),AbsFun (Just (L loc ty)) _ _ (Just True)) <- adefs, snd (GM.valCat ty) == cat] - mkConcr am cm@(lang,mo) = do- cnc <- convertConcrete opts gr am cm- return (i2i lang, cnc)+ mkConcr gr cm = do+ let cflags = concatOptions [mflags mo | (i,mo) <- modules gr, isModCnc mo, + Just r <- [lookup i (allExtendSpecs gr cm)]] + (seqs,cdefs) <- addMissingPMCFGs+ Map.empty + ([((cPredefAbs,c), CncCat (Just (L NoLoc GM.defLinType)) Nothing Nothing Nothing) | c <- [cInt,cFloat,cString]] +++ Look.allOrigInfos gr cm)++ let flags = Map.fromList [(mkCId f,C.LStr x) | (f,x) <- optionsPGF cflags]++ !(!fid_cnt1,!cnccats) = genCncCats gr am cm cdefs+ !(!fid_cnt2,!productions,!lindefs,!sequences,!cncfuns)+ = genCncFuns gr am cm seqs cdefs fid_cnt1 cnccats+ + printnames = genPrintNames cdefs+ return (i2i cm, D.Concr flags + printnames+ cncfuns+ lindefs+ sequences+ productions+ IntMap.empty+ Map.empty+ cnccats+ IntMap.empty+ fid_cnt2)+ where+ -- if some module was compiled with -no-pmcfg, then+ -- we have to create the PMCFG code just before linking+ addMissingPMCFGs seqs [] = return (seqs,[])+ addMissingPMCFGs seqs (((m,id), info):is) = do+ (seqs,info) <- addPMCFG opts gr am cm seqs id info+ (seqs,is ) <- addMissingPMCFGs seqs is+ return (seqs, ((m,id), info) : is)+ i2i :: Ident -> CId i2i = CId . ident2bs -b2b :: A.BindType -> C.BindType-b2b A.Explicit = C.Explicit-b2b A.Implicit = C.Implicit- mkType :: [Ident] -> A.Type -> C.Type mkType scope t = case GM.typeForm t of@@ -95,7 +115,7 @@ Vr x -> case lookup x (zip scope [0..]) of Just i -> C.EVar i Nothing -> C.EMeta 0- Abs b x t-> C.EAbs (b2b b) (i2i x) (mkExp (x:scope) t)+ Abs b x t-> C.EAbs b (i2i x) (mkExp (x:scope) t) App t1 t2-> C.EApp (mkExp scope t1) (mkExp scope t2) EInt i -> C.ELit (C.LInt (fromIntegral i)) EFloat f -> C.ELit (C.LFlt f)@@ -121,8 +141,8 @@ mkContext :: [Ident] -> A.Context -> ([Ident],[C.Hypo]) mkContext scope hyps = mapAccumL (\scope (bt,x,ty) -> let ty' = mkType scope ty in if x == identW- then ( scope,(b2b bt,i2i x,ty'))- else (x:scope,(b2b bt,i2i x,ty'))) scope hyps + then ( scope,(bt,i2i x,ty'))+ else (x:scope,(bt,i2i x,ty'))) scope hyps mkDef (Just eqs) = Just [C.Equ ps' (mkExp scope' e) | L _ (ps,e) <- eqs, let (scope',ps') = mapAccumL mkPatt [] ps] mkDef Nothing = Nothing@@ -149,28 +169,127 @@ mkCase cns vrs = Case (fmap compilePatt cns) (compilePatt vrs) --- return just one module per language+genCncCats gr am cm cdefs =+ let (index,cats) = mkCncCats 0 cdefs+ in (index, Map.fromList cats)+ where+ mkCncCats index [] = (index,[])+ mkCncCats index (((m,id),CncCat (Just (L _ lincat)) _ _ _):cdefs) + | id == cInt = + let cc = pgfCncCat gr lincat fidInt+ (index',cats) = mkCncCats index cdefs+ in (index', (i2i id,cc) : cats)+ | id == cFloat = + let cc = pgfCncCat gr lincat fidFloat+ (index',cats) = mkCncCats index cdefs+ in (index', (i2i id,cc) : cats)+ | id == cString = + let cc = pgfCncCat gr lincat fidString+ (index',cats) = mkCncCats index cdefs+ in (index', (i2i id,cc) : cats)+ | otherwise =+ let cc@(C.CncCat s e _) = pgfCncCat gr lincat index+ (index',cats) = mkCncCats (e+1) cdefs+ in (index', (i2i id,cc) : cats)+ mkCncCats index (_ :cdefs) = mkCncCats index cdefs -reorder :: Ident -> SourceGrammar -> AbsConcsGrammar-reorder abs cg =--- M.MGrammar $- ((abs, M.ModInfo M.MTAbstract M.MSComplete aflags [] Nothing [] [] adefs),- [(cnc, M.ModInfo (M.MTConcrete abs) M.MSComplete cflags [] Nothing [] [] cdefs)- | cnc <- M.allConcretes cg abs, let (cflags,cdefs) = concr cnc])++genCncFuns gr am cm seqs0 cdefs fid_cnt cnccats =+ let (fid_cnt1,funs_cnt1,seqs1,funs1,lindefs) = mkCncCats cdefs fid_cnt 0 seqs0 [] IntMap.empty+ (fid_cnt2,funs_cnt2,seqs2,funs2,prods) = mkCncFuns cdefs fid_cnt1 funs_cnt1 seqs1 funs1 lindefs Map.empty IntMap.empty+ in (fid_cnt2,prods,lindefs,mkSetArray seqs2,array (0,funs_cnt2-1) funs2) where- aflags = - concatOptions (reverse [M.flags mo | (_,mo) <- M.modules cg, M.isModAbs mo])+ mkCncCats [] fid_cnt funs_cnt seqs funs lindefs =+ (fid_cnt,funs_cnt,seqs,funs,lindefs)+ mkCncCats (((m,id),CncCat _ _ _ (Just (PMCFG prods0 funs0))):cdefs) fid_cnt funs_cnt seqs funs lindefs =+ let !funs_cnt' = let (s_funid, e_funid) = bounds funs0+ in funs_cnt+(e_funid-s_funid+1)+ lindefs' = foldl' (toLinDef (am,id) funs_cnt) lindefs prods0+ !(seqs',funs') = foldl' (toCncFun funs_cnt (m,mkLinDefId id)) (seqs,funs) (assocs funs0)+ in mkCncCats cdefs fid_cnt funs_cnt' seqs' funs' lindefs'+ mkCncCats (_ :cdefs) fid_cnt funs_cnt seqs funs lindefs = + mkCncCats cdefs fid_cnt funs_cnt seqs funs lindefs - adefs = - Map.fromList (predefADefs ++ Look.allOrigInfos cg abs)+ mkCncFuns [] fid_cnt funs_cnt seqs funs lindefs crc prods =+ (fid_cnt,funs_cnt,seqs,funs,prods)+ mkCncFuns (((m,id),CncFun _ _ _ (Just (PMCFG prods0 funs0))):cdefs) fid_cnt funs_cnt seqs funs lindefs crc prods =+ let Ok ty_C = fmap GM.typeForm (Look.lookupFunType gr am id)+ !funs_cnt' = let (s_funid, e_funid) = bounds funs0+ in funs_cnt+(e_funid-s_funid+1)+ !(fid_cnt',crc',prods') + = foldl' (toProd lindefs ty_C funs_cnt)+ (fid_cnt,crc,prods) prods0+ !(seqs',funs') = foldl' (toCncFun funs_cnt (m,id)) (seqs,funs) (assocs funs0)+ in mkCncFuns cdefs fid_cnt' funs_cnt' seqs' funs' lindefs crc' prods'+ mkCncFuns (_ :cdefs) fid_cnt funs_cnt seqs funs lindefs crc prods = + mkCncFuns cdefs fid_cnt funs_cnt seqs funs lindefs crc prods++ toProd lindefs (ctxt_C,res_C,_) offs st (Production fid0 funid0 args0) =+ let !((fid_cnt,crc,prods),args) = mapAccumL mkArg st (zip ctxt_C args0) + set0 = Set.fromList (map (C.PApply (offs+funid0)) (sequence args))+ fid = mkFId res_C fid0+ !prods' = case IntMap.lookup fid prods of+ Just set -> IntMap.insert fid (Set.union set0 set) prods+ Nothing -> IntMap.insert fid set0 prods+ in (fid_cnt,crc,prods') where- predefADefs = - [(c, AbsCat (Just (L (0,0) []))) | c <- [cFloat,cInt,cString]]+ mkArg st@(fid_cnt,crc,prods) ((_,_,ty),fid0s ) =+ case fid0s of+ [fid0] -> (st,map (flip C.PArg (mkFId arg_C fid0)) ctxt)+ fid0s -> case Map.lookup fids crc of+ Just fid -> (st,map (flip C.PArg fid) ctxt)+ Nothing -> let !crc' = Map.insert fids fid_cnt crc+ !prods' = IntMap.insert fid_cnt (Set.fromList (map C.PCoerce fids)) prods+ in ((fid_cnt+1,crc',prods'),map (flip C.PArg fid_cnt) ctxt)+ where+ (hargs_C,arg_C) = GM.catSkeleton ty+ ctxt = mapM (mkCtxt lindefs) hargs_C+ fids = map (mkFId arg_C) fid0s - concr la = (flags, Map.fromList (predefCDefs ++ jments))- where - flags = concatOptions [M.flags mo | (i,mo) <- M.modules cg, M.isModCnc mo, - Just r <- [lookup i (M.allExtendSpecs cg la)]]- jments = Look.allOrigInfos cg la- predefCDefs = - [(c, CncCat (Just (L (0,0) GM.defLinType)) Nothing Nothing) | c <- [cInt,cFloat,cString]]+ mkLinDefId id = + identC (BS.append (BS.pack "lindef ") (ident2bs id))++ toLinDef res offs lindefs (Production fid0 funid0 _) =+ IntMap.insertWith (++) fid [offs+funid0] lindefs+ where+ fid = mkFId res fid0++ mkFId (_,cat) fid0 =+ case Map.lookup (i2i cat) cnccats of+ Just (C.CncCat s e _) -> s+fid0+ Nothing -> error "GrammarToPGF.mkFId failed"++ mkCtxt lindefs (_,cat) =+ case Map.lookup (i2i cat) cnccats of+ Just (C.CncCat s e _) -> [(C.fidVar,fid) | fid <- [s..e], Just _ <- [IntMap.lookup fid lindefs]]+ Nothing -> error "GrammarToPGF.mkCtxt failed"++ toCncFun offs (m,id) (seqs,funs) (funid0,lins0) =+ case lookupModule gr m of+ Ok (ModInfo{mseqs=Just mseqs}) -> let !(!seqs',lins) = mapAccumL (mkLin mseqs) seqs (elems lins0)+ in (seqs',(offs+funid0,C.CncFun (i2i id) (mkArray lins)):funs)+ _ -> -- this function should have been compiled during the linking phase+ -- so its sequences must be in seqs already+ (seqs,(offs+funid0,C.CncFun (i2i id) lins0):funs)+ where+ mkLin mseqs seqs seqid =+ let seq = mseqs ! seqid+ in case Map.lookup seq seqs of+ Just seqid -> (seqs,seqid)+ Nothing -> let !seqid = Map.size seqs+ !seqs' = Map.insert seq seqid seqs+ in (seqs',seqid)++genPrintNames cdefs =+ Map.fromAscList [(i2i id, name) | ((m,id),info) <- cdefs, name <- prn info]+ where+ prn (CncFun _ _ (Just (L _ tr)) _) = [flatten tr]+ prn (CncCat _ _ (Just (L _ tr)) _) = [flatten tr]+ prn _ = []++ flatten (K s) = s+ flatten (Alts x _) = flatten x+ flatten (C x y) = flatten x +++ flatten y++mkArray lst = listArray (0,length lst-1) lst+mkSetArray map = array (0,Map.size map-1) [(v,k) | (k,v) <- Map.toList map]
@@ -68,17 +68,15 @@ moduleDeps ms = mapM deps ms where deps (c,m) = errIn ("checking dependencies of module" +++ prt c) $ case mtype m of MTConcrete a -> do- aty <- lookupModuleType gr a- testErr (aty == MTAbstract) "the of-module is not an abstract syntax" + am <- lookupModuleType gr a+ testErr (mtype am == MTAbstract) "the of-module is not an abstract syntax" chDep (IdentM c (MTConcrete a)) (extends m) (MTConcrete a) (opens m) MTResource t -> chDep (IdentM c t) (extends m) t (opens m) t chDep it es ety os oty = do- ests <- mapM (lookupModuleType gr) es- testErr (all (compatMType ety) ests) "inappropriate extension module type" ----- osts <- mapM (lookupModuleType gr . openedModule) os----- testErr (all (compatOType oty) osts) "inappropriate open module type"+ ems <- mapM (lookupModuleType gr) es+ testErr (all (compatMType ety . mtype) ests) "inappropriate extension module type" let ab = case it of IdentM _ (MTConcrete a) -> [IdentM a MTAbstract] _ -> [] ----
@@ -17,7 +17,6 @@ import GF.Grammar.Grammar import GF.Infra.Ident-import GF.Infra.Modules import GF.Grammar.Printer import GF.Grammar.Macros import GF.Grammar.Lookup@@ -49,11 +48,11 @@ return (name,mi) | otherwise = return m where- oopts = opts `addOptions` flagsModule m+ oopts = opts `addOptions` mflags mi updateEvalInfo mi (i,info) = do- info' <- evalInfo oopts ms (name,mi) i info- return (updateModule mi i info')+ info <- evalInfo oopts ms (name,mi) i info+ return (mi{jments=updateTree (i,info) (jments mi)}) evalInfo :: Options -> [SourceModule] -> SourceModule -> Ident -> Info -> Err Info evalInfo opts ms m c info = do@@ -62,7 +61,7 @@ errIn ("optimizing " ++ showIdent c) $ case info of - CncCat ptyp pde ppr -> do+ CncCat ptyp pde ppr mpmcfg -> do pde' <- case (ptyp,pde) of (Just (L _ typ), Just (L loc de)) -> do de <- partEval opts gr ([(Explicit, varStr, typeStr)], typ) de@@ -75,16 +74,16 @@ ppr' <- evalPrintname gr ppr - return (CncCat ptyp pde' ppr')+ return (CncCat ptyp pde' ppr' mpmcfg) - CncFun (mt@(Just (_,cont,val))) pde ppr -> --trace (prt c) $+ CncFun (mt@(Just (_,cont,val))) pde ppr mpmcfg -> --trace (prt c) $ eIn (text "linearization in type" <+> ppTerm Unqualified 0 (mkProd cont val []) $$ text "of function") $ do pde' <- case pde of Just (L loc de) -> do de <- partEval opts gr (cont,val) de return (Just (L loc (factor param c 0 de))) Nothing -> return pde ppr' <- evalPrintname gr ppr- return $ CncFun mt pde' ppr' -- only cat in type actually needed+ return $ CncFun mt pde' ppr' mpmcfg -- only cat in type actually needed ResOper pty pde | OptExpand `Set.member` optim -> do
@@ -26,7 +26,6 @@ import GF.Infra.UseIO import GF.Infra.Option import GF.Infra.Ident-import GF.Infra.Modules import GF.Data.Operations import GF.Grammar.Lexer import GF.Grammar.Parser@@ -109,13 +108,22 @@ let mb_envmod = Map.lookup name env (st,t) = selectFormat opts (fmap fst mb_envmod) gfTime gfoTime - (mname,imps) <- case st of- CSEnv -> return (name, maybe [] snd mb_envmod)- CSRead -> ioeIO $ fmap importsOfModule (decodeModHeader ((if isGFO file then id else gf2gfo opts) file))+ (st,(mname,imps)) <-+ case st of+ CSEnv -> return (st, (name, maybe [] snd mb_envmod))+ CSRead -> do mb_mo <- ioeIO $ decodeModuleHeader ((if isGFO file then id else gf2gfo opts) file)+ case mb_mo of+ Just mo -> return (st,importsOfModule mo)+ Nothing+ | isGFO file -> ioeErr $ Bad (file ++ " is compiled with different GF version and I can't find the source file")+ | otherwise -> do s <- ioeIO $ BS.readFile file+ case runP pModHeader s of+ Left (Pn l c,msg) -> ioeBad (file ++ ":" ++ show l ++ ":" ++ show c ++ ": " ++ msg)+ Right mo -> return (CSComp,importsOfModule mo) CSComp -> do s <- ioeIO $ BS.readFile file case runP pModHeader s of Left (Pn l c,msg) -> ioeBad (file ++ ":" ++ show l ++ ":" ++ show c ++ ": " ++ msg)- Right mo -> return (importsOfModule mo)+ Right mo -> return (st,importsOfModule mo) ioeErr $ testErr (mname == name) ("module name" +++ mname +++ "differs from file name" +++ name) return (name,st,t,isJust gfTime,imps,dropFileName file)@@ -169,10 +177,10 @@ where depModInfo mi = depModType (mtype mi) .- depExtends (extend mi) .+ depExtends (mextend mi) . depWith (mwith mi) . depExDeps (mexdeps mi).- depOpens (opens mi)+ depOpens (mopens mi) depModType (MTAbstract) xs = xs depModType (MTResource) xs = xs
@@ -19,7 +19,6 @@ import GF.Data.Operations import GF.Grammar.Grammar import GF.Infra.Ident-import GF.Infra.Modules import GF.Grammar.Macros import Control.Monad @@ -114,7 +113,7 @@ refreshModule (k,ms) mi@(i,mo) | isModCnc mo || isModRes mo = do (k',js') <- foldM refreshRes (k,[]) $ tree2list $ jments mo- return (k', (i, replaceJudgements mo (buildTree js')) : ms)+ return (k', (i,mo{jments=buildTree js'}) : ms) | otherwise = return (k, mi:ms) where refreshRes (k,cs) ci@(c,info) = case info of@@ -125,12 +124,12 @@ (k',tyts') <- liftM (\ (t,(_,i)) -> (i,t)) $ appSTM (mapPairsM (\(L loc t) -> liftM (L loc) (refresh t)) tyts) (initIdStateN k) return $ (k', (c, ResOverload os tyts'):cs)- CncCat mt (Just (L loc trm)) pn -> do ---- refresh mt, pn+ CncCat mt (Just (L loc trm)) mn mpmcfg-> do ---- refresh mt, pn (k',trm') <- refreshTermKN k trm- return $ (k', (c, CncCat mt (Just (L loc trm')) pn):cs)- CncFun mt (Just (L loc trm)) pn -> do ---- refresh pn+ return $ (k', (c, CncCat mt (Just (L loc trm')) mn mpmcfg):cs)+ CncFun mt (Just (L loc trm)) mn mpmcfg -> do ---- refresh pn (k',trm') <- refreshTermKN k trm- return $ (k', (c, CncFun mt (Just (L loc trm')) pn):cs)+ return $ (k', (c, CncFun mt (Just (L loc trm')) mn mpmcfg):cs) _ -> return (k, ci:cs)
@@ -24,14 +24,12 @@ module GF.Compile.Rename ( renameSourceTerm,- renameSourceJudgement, renameModule ) where import GF.Grammar.Grammar import GF.Grammar.Values import GF.Grammar.Predef-import GF.Infra.Modules import GF.Infra.Ident import GF.Infra.CheckM import GF.Grammar.Macros@@ -47,24 +45,15 @@ -- | this gives top-level access to renaming term input in the cc command renameSourceTerm :: SourceGrammar -> Ident -> Term -> Check Term renameSourceTerm g m t = do- mo <- checkErr $ lookupModule g m- status <- buildStatus g m mo+ mi <- checkErr $ lookupModule g m+ status <- buildStatus g (m,mi) renameTerm status [] t --- | this gives top-level access to renaming term input in the cj command-renameSourceJudgement :: SourceGrammar -> Ident -> (Ident,Info) -> Check (Ident,Info)-renameSourceJudgement g m (i,t) = do- mo <- checkErr $ lookupModule g m- status <- buildStatus g m mo- t2 <- renameInfo status m i t- return (i,t2)- renameModule :: [SourceModule] -> SourceModule -> Check SourceModule-renameModule ms (name,mo) = checkIn (text "renaming module" <+> ppIdent name) $ do- let js1 = jments mo- status <- buildStatus (mGrammar ms) name mo- js2 <- checkMap (renameInfo status name) js1- return (name, mo {opens = map forceQualif (opens mo), jments = js2})+renameModule ms mo@(m,mi) = do+ status <- buildStatus (mGrammar ms) mo+ js <- checkMap (renameInfo status mo) (jments mi)+ return (m, mi{jments = js}) type Status = (StatusTree, [(OpenSpec, StatusTree)]) @@ -73,42 +62,45 @@ type StatusInfo = Ident -> Term renameIdentTerm :: Status -> Term -> Check Term-renameIdentTerm env@(act,imps) t = - checkIn (text "atomic term" <+> ppTerm Qualified 0 t $$ text "given" <+> hsep (punctuate comma (map (ppIdent . fst) qualifs))) $- case t of- Vr c -> ident predefAbs c- Cn c -> ident (\_ s -> checkError s) c- Q (m',c) | m' == cPredef {- && isInPredefined c -} -> return t- Q (m',c) -> do- m <- checkErr (lookupErr m' qualifs)- f <- lookupTree showIdent c m- return $ f c- QC (m',c) | m' == cPredef {- && isInPredefined c -} -> return t- QC (m',c) -> do- m <- checkErr (lookupErr m' qualifs)- f <- lookupTree showIdent c m- return $ f c- _ -> return t- where- opens = [st | (OSimple _,st) <- imps]- qualifs = [(m, st) | (OQualif m _, st) <- imps] ++ - [(m, st) | (OQualif _ m, st) <- imps] ++ - [(m, st) | (OSimple m, st) <- imps] -- qualif is always possible+renameIdentTerm env@(act,imps) t0 = + case t0 of+ Vr c -> ident predefAbs c+ Cn c -> ident (\_ s -> checkError s) c+ Q (m',c) | m' == cPredef {- && isInPredefined c -} -> return t0+ Q (m',c) -> do+ m <- checkErr (lookupErr m' qualifs)+ f <- lookupTree showIdent c m+ return $ f c+ QC (m',c) | m' == cPredef {- && isInPredefined c -} -> return t0+ QC (m',c) -> do+ m <- checkErr (lookupErr m' qualifs)+ f <- lookupTree showIdent c m+ return $ f c+ _ -> return t0+ where+ opens = [st | (OSimple _,st) <- imps]+ qualifs = [(m, st) | (OQualif m _, st) <- imps] ++ + [(m, st) | (OQualif _ m, st) <- imps] ++ + [(m, st) | (OSimple m, st) <- imps] -- qualif is always possible - -- this facility is mainly for BWC with GF1: you need not import PredefAbs- predefAbs c s- | isPredefCat c = return $ Q (cPredefAbs,c)- | otherwise = checkError s+ -- this facility is mainly for BWC with GF1: you need not import PredefAbs+ predefAbs c s+ | isPredefCat c = return (Q (cPredefAbs,c))+ | otherwise = checkError s - ident alt c = case lookupTree showIdent c act of- Ok f -> return $ f c- _ -> case lookupTreeManyAll showIdent opens c of- [f] -> return $ f c- [] -> alt c (text "constant not found:" <+> ppIdent c)- fs -> case nub [f c | f <- fs] of- [tr] -> return tr- ts@(t:_) -> do checkWarn (text "conflict" <+> hsep (punctuate comma (map (ppTerm Qualified 0) ts)))- return t+ ident alt c = + case lookupTree showIdent c act of+ Ok f -> return (f c)+ _ -> case lookupTreeManyAll showIdent opens c of+ [f] -> return (f c)+ [] -> alt c (text "constant not found:" <+> ppIdent c $$+ text "given" <+> fsep (punctuate comma (map (ppIdent . fst) qualifs)))+ fs -> case nub [f c | f <- fs] of+ [tr] -> return tr+ ts@(t:_) -> do checkWarn (text "atomic term" <+> ppTerm Qualified 0 t0 $$+ text "conflict" <+> hsep (punctuate comma (map (ppTerm Qualified 0) ts)) $$+ text "given" <+> fsep (punctuate comma (map (ppIdent . fst) qualifs)))+ return t -- a warning will be generated in CheckGrammar, and the head returned -- in next V: -- Bad $ "conflicting imports:" +++ unwords (map prt ts) @@ -127,15 +119,15 @@ OSimple i -> mapTree (info2status (Just i)) OQualif i j -> mapTree (info2status (Just j)) -buildStatus :: SourceGrammar -> Ident -> SourceModInfo -> Check Status-buildStatus gr c mo = let mo' = self2status c mo in do- let gr1 = prependModule gr (c,mo)- ops = [OSimple e | e <- allExtends gr1 c] ++ opens mo- mods <- checkErr $ mapM (lookupModule gr1 . openedModule) ops- let sts = map modInfo2status $ zip ops mods - return $ if isModCnc mo- then (emptyBinTree, reverse sts) -- the module itself does not define any names- else (mo',reverse sts) -- so the empty ident is not needed+buildStatus :: SourceGrammar -> SourceModule -> Check Status+buildStatus gr mo@(m,mi) = checkIn (ppLocation (msrc mi) NoLoc <> colon) $ do+ let gr1 = prependModule gr mo+ ops = [OSimple e | e <- allExtends gr1 m] ++ mopens mi+ mods <- checkErr $ mapM (lookupModule gr1 . openedModule) ops+ let sts = map modInfo2status $ zip ops mods + return (if isModCnc mi+ then (emptyBinTree, reverse sts) -- the module itself does not define any names+ else (self2status m mi,reverse sts)) -- so the empty ident is not needed modInfo2status :: (OpenSpec,SourceModInfo) -> (OpenSpec, StatusTree) modInfo2status (o,mo) = (o,tree2status o (jments mo))@@ -143,25 +135,22 @@ self2status :: Ident -> SourceModInfo -> StatusTree self2status c m = mapTree (info2status (Just c)) (jments m) -forceQualif o = case o of- OSimple i -> OQualif i i- OQualif _ i -> OQualif i i -renameInfo :: Status -> Ident -> Ident -> Info -> Check Info-renameInfo status m i info =+renameInfo :: Status -> SourceModule -> Ident -> Info -> Check Info+renameInfo status (m,mi) i info = case info of AbsCat pco -> liftM AbsCat (renPerh (renameContext status) pco) AbsFun pty pa ptr poper -> liftM4 AbsFun (renTerm pty) (return pa) (renMaybe (mapM (renLoc (renEquation status))) ptr) (return poper) ResOper pty ptr -> liftM2 ResOper (renTerm pty) (renTerm ptr) ResOverload os tysts -> liftM (ResOverload os) (mapM (renPair (renameTerm status [])) tysts) ResParam (Just pp) m -> do- pp' <- mapM (renLoc (renParam status)) pp+ pp' <- renLoc (mapM (renParam status)) pp return (ResParam (Just pp') m) ResValue t -> do t <- renLoc (renameTerm status []) t return (ResValue t)- CncCat pty ptr ppr -> liftM3 CncCat (renTerm pty) (renTerm ptr) (renTerm ppr)- CncFun mt ptr ppr -> liftM2 (CncFun mt) (renTerm ptr) (renTerm ppr)+ CncCat mty mtr mpr mpmcfg -> liftM4 CncCat (renTerm mty) (renTerm mtr) (renTerm mpr) (return mpmcfg)+ CncFun mty mtr mpr mpmcfg -> liftM3 (CncFun mty) (renTerm mtr) (renTerm mpr) (return mpmcfg) _ -> return info where renTerm = renPerh (renameTerm status [])@@ -172,13 +161,13 @@ renMaybe ren Nothing = return Nothing renLoc ren (L loc x) =- checkIn (text "renaming of" <+> ppIdent i <+> ppPosition m loc) $ do+ checkIn (ppLocation (msrc mi) loc <> colon $$ text "Happened in the renaming of" <+> ppIdent i) $ do x <- ren x return (L loc x) - renPair ren (L locx x, L locy y) = do x <- ren x- y <- ren y- return (L locx x, L locy y)+ renPair ren (x, y) = do x <- renLoc ren x+ y <- renLoc ren y+ return (x, y) renEquation :: Status -> Equation -> Check Equation renEquation b (ps,t) = do
@@ -27,7 +27,6 @@ import GF.Grammar.Lookup import GF.Infra.Ident import qualified GF.Grammar.Macros as C-import qualified GF.Infra.Modules as M import GF.Data.Operations import Control.Monad@@ -38,22 +37,22 @@ subexpModule :: SourceModule -> SourceModule subexpModule (n,mo) = errVal (n,mo) $ do- let ljs = tree2list (M.jments mo)+ let ljs = tree2list (jments mo) (tree,_) <- appSTM (getSubtermsMod n ljs) (Map.empty,0) js2 <- liftM buildTree $ addSubexpConsts n tree $ ljs- return (n,M.replaceJudgements mo js2)+ return (n,mo{jments=js2}) unsubexpModule :: SourceModule -> SourceModule unsubexpModule sm@(i,mo)- | hasSub ljs = (i,M.replaceJudgements mo (rebuild (map unparInfo ljs)))+ | hasSub ljs = (i,mo{jments=rebuild (map unparInfo ljs)}) | otherwise = sm where- ljs = tree2list (M.jments mo) + ljs = tree2list (jments mo) -- perform this iff the module has opers hasSub ljs = not $ null [c | (c,ResOper _ _) <- ljs] unparInfo (c,info) = case info of- CncFun xs (Just (L loc t)) m -> [(c, CncFun xs (Just (L loc (unparTerm t))) m)]+ CncFun xs (Just (L loc t)) m pf -> [(c, CncFun xs (Just (L loc (unparTerm t))) m pf)] ResOper (Just (L loc (EInt 8))) _ -> [] -- subexp-generated opers ResOper pty (Just (L loc t)) -> [(c, ResOper pty (Just (L loc (unparTerm t))))] _ -> [(c,info)]@@ -61,7 +60,7 @@ Q (m,c) | isOperIdent c -> --- name convention of subexp opers errVal t $ liftM unparTerm $ lookupResDef gr (m,c) _ -> C.composSafeOp unparTerm t- gr = M.mGrammar [sm]+ gr = mGrammar [sm] rebuild = buildTree . concat -- implementation@@ -76,9 +75,9 @@ mapM mkOne $ opers ++ lins where mkOne (f,def) = case def of- CncFun xs (Just (L loc trm)) pn -> do+ CncFun xs (Just (L loc trm)) pn pf -> do trm' <- recomp f trm- return (f,CncFun xs (Just (L loc trm')) pn)+ return (f,CncFun xs (Just (L loc trm')) pn pf) ResOper ty (Just (L loc trm)) -> do trm' <- recomp f trm return (f,ResOper ty (Just (L loc trm')))@@ -89,7 +88,7 @@ list = Map.toList tree - oper id trm = (operIdent id, ResOper (Just (L (0,0) (EInt 8))) (Just (L (0,0) trm))) + oper id trm = (operIdent id, ResOper (Just (L NoLoc (EInt 8))) (Just (L NoLoc trm))) --- impossible type encoding generated opers getSubtermsMod :: Ident -> [(Ident,Info)] -> TermM (Map Term (Int,Int))@@ -99,7 +98,7 @@ return $ Map.filter (\ (nu,_) -> nu > 1) tree0 where getInfo get fi@(f,i) = case i of- CncFun xs (Just (L _ trm)) pn -> do+ CncFun xs (Just (L _ trm)) pn _ -> do get trm return $ fi ResOper ty (Just (L _ trm)) -> do
@@ -0,0 +1,88 @@+module GF.Compile.Tags+ ( writeTags+ , gf2gftags+ ) where++import GF.Infra.Option+import GF.Infra.UseIO+import GF.Data.Operations+import GF.Grammar++import Data.List+import qualified Data.Map as Map+import qualified Data.Set as Set+import Control.Monad+import Text.PrettyPrint+import System.FilePath++writeTags opts gr file mo = do+ let imports = getImports opts gr mo+ locals = getLocalTags [] mo+ txt = unlines ((Set.toList . Set.fromList) (imports++locals))+ putPointE Normal opts (" write file" +++ file) $ ioeIO $ writeFile file txt++getLocalTags x (m,mi) = + [showIdent i ++ "\t" ++ k ++ "\t" ++ l ++ "\t" ++ t + | (i,jment) <- Map.toList (jments mi),+ (k,l,t) <- getLocations jment] ++ x+ where+ getLocations :: Info -> [(String,String,String)]+ getLocations (AbsCat mb_ctxt) = maybe (loc "cat") mb_ctxt+ getLocations (AbsFun mb_type _ mb_eqs _) = maybe (ltype "fun") mb_type +++ maybe (list (loc "def")) mb_eqs + getLocations (ResParam mb_params _) = maybe (loc "param") mb_params+ getLocations (ResValue mb_type) = ltype "param-value" mb_type+ getLocations (ResOper mb_type mb_def) = maybe (ltype "oper-type") mb_type +++ maybe (loc "oper-def") mb_def+ getLocations (ResOverload _ defs) = list (\(x,y) -> ltype "overload-type" x ++ + loc "overload-def" y) defs+ getLocations (CncCat mty mdef mprn _) = maybe (loc "lincat") mty ++ + maybe (loc "lindef") mdef ++ + maybe (loc "printname") mprn+ getLocations (CncFun _ mlin mprn _) = maybe (loc "lin") mlin +++ maybe (loc "printname") mprn+ getLocations _ = []++ loc kind (L loc _) = [(kind,render (ppLocation (msrc mi) loc),"")]++ ltype kind (L loc ty) = [(kind,render (ppLocation (msrc mi) loc),render (ppTerm Unqualified 0 ty))]++ maybe f (Just x) = f x+ maybe f Nothing = []++ list f xs = concatMap f xs+ + render = renderStyle style{mode=OneLineMode}+++getImports opts gr mo@(m,mi) = concatMap toDep allOpens+ where+ allOpens = [(OSimple m,incl) | (m,incl) <- mextend mi] ++ + [(o,MIAll) | o <- mopens mi]++ toDep (OSimple m,incl) =+ let Ok mi = lookupModule gr m+ in [showIdent id ++ "\t" ++ "indir" ++ "\t" ++ showIdent m ++ "\t\t" ++ gf2gftags opts (orig mi info)+ | (id,info) <- Map.toList (jments mi), filter incl id]+ toDep (OQualif m1 m2,incl) =+ let Ok mi = lookupModule gr m2+ in [showIdent id ++ "\t" ++ "indir" ++ "\t" ++ showIdent m2 ++ "\t" ++ showIdent m1 ++ "\t" ++ gf2gftags opts (orig mi info) + | (id,info) <- Map.toList (jments mi), filter incl id]++ filter MIAll id = True+ filter (MIOnly ids) id = elem id ids+ filter (MIExcept ids) id = not (elem id ids)++ orig mi info =+ case info of+ AnyInd _ m0 -> let Ok mi0 = lookupModule gr m0+ in msrc mi0+ _ -> msrc mi ++gftagsFile :: FilePath -> FilePath+gftagsFile f = addExtension f "gf-tags"++gf2gftags :: Options -> FilePath -> FilePath+gf2gftags opts file = maybe (gftagsFile (dropExtension file))+ (\dir -> dir </> gftagsFile (dropExtension (takeFileName file)))+ (flag optOutputDir opts)
@@ -2,7 +2,6 @@ module GF.Compile.TypeCheck.Concrete( checkLType, inferLType, computeLType, ppType ) where import GF.Infra.CheckM-import GF.Infra.Modules import GF.Data.Operations import GF.Grammar
@@ -0,0 +1,561 @@+module GF.Compile.TypeCheck.ConcreteNew( checkLType, inferLType ) where++import GF.Grammar hiding (Env, VGen, VApp, VRecType)+import GF.Grammar.Lookup+import GF.Grammar.Predef+import GF.Grammar.Lockfield+import GF.Compile.Compute.ConcreteNew+import GF.Compile.Compute.AppPredefined+import GF.Infra.CheckM+import GF.Infra.UseIO+import GF.Data.Operations++import Text.PrettyPrint+import Data.List (nub, (\\), tails)+import qualified Data.IntMap as IntMap+import qualified Data.ByteString.Char8 as BS++import GF.Grammar.Parser+import System.IO+import Debug.Trace++checkLType :: SourceGrammar -> Term -> Type -> Check (Term, Type)+checkLType gr t ty = runTcM $ do+ t <- checkSigma gr [] t (eval gr [] ty)+ t <- zonkTerm t+ return (t,ty)++inferLType :: SourceGrammar -> Term -> Check (Term, Type)+inferLType gr t = runTcM $ do+ (t,ty) <- inferSigma gr [] t+ t <- zonkTerm t+ ty <- zonkTerm (value2term gr [] ty)+ return (t,ty)++inferSigma :: SourceGrammar -> Scope -> Term -> TcM (Term,Sigma)+inferSigma gr scope t = do -- GEN1+ (t,ty) <- tcRho gr scope t Nothing+ env_tvs <- getMetaVars gr (scopeTypes scope)+ res_tvs <- getMetaVars gr [(scope,ty)]+ let forall_tvs = res_tvs \\ env_tvs+ quantify gr scope t forall_tvs ty++checkSigma :: SourceGrammar -> Scope -> Term -> Sigma -> TcM Term+checkSigma gr scope t sigma = do -- GEN2+ (abs, scope, t, rho) <- skolemise id gr scope t sigma+ let skol_tvs = []+ (t,rho) <- tcRho gr scope t (Just rho)+ esc_tvs <- getFreeVars gr ((scope,sigma) : scopeTypes scope)+ let bad_tvs = filter (`elem` esc_tvs) skol_tvs+ if null bad_tvs+ then return (abs t)+ else tcError (text "Type not polymorphic enough")++tcRho :: SourceGrammar -> Scope -> Term -> Maybe Rho -> TcM (Term, Rho)+tcRho gr scope t@(EInt _) mb_ty = instSigma gr scope t (eval gr [] typeInt) mb_ty+tcRho gr scope t@(EFloat _) mb_ty = instSigma gr scope t (eval gr [] typeFloat) mb_ty+tcRho gr scope t@(K _) mb_ty = instSigma gr scope t (eval gr [] typeStr) mb_ty+tcRho gr scope t@(Empty) mb_ty = instSigma gr scope t (eval gr [] typeStr) mb_ty+tcRho gr scope t@(Vr v) mb_ty = do -- VAR+ case lookup v scope of+ Just v_sigma -> instSigma gr scope t v_sigma mb_ty+ Nothing -> tcError (text "Unknown variable" <+> ppIdent v)+tcRho gr scope t@(Q id) mb_ty+ | elem (fst id) [cPredef,cPredefAbs] = + case typPredefined (snd id) of+ Just ty -> instSigma gr scope t (eval gr [] ty) mb_ty+ Nothing -> tcError (text "unknown in Predef:" <+> ppQIdent Qualified id)+ | otherwise = do+ case lookupResType gr id of+ Ok ty -> instSigma gr scope t (eval gr [] ty) mb_ty+ Bad err -> tcError (text err)+tcRho gr scope t@(QC id) mb_ty = do+ case lookupResType gr id of+ Ok ty -> instSigma gr scope t (eval gr [] ty) mb_ty+ Bad err -> tcError (text err)+tcRho gr scope (App fun arg) mb_ty = do -- APP+ (fun,fun_ty) <- tcRho gr scope fun Nothing+ (arg_ty, res_ty) <- unifyFun gr scope (eval gr (scopeEnv scope) arg) fun_ty+ arg <- checkSigma gr scope arg arg_ty+ instSigma gr scope (App fun arg) res_ty mb_ty+tcRho gr scope (Abs bt var body) Nothing = do -- ABS1+ i <- newMeta (eval gr [] typeType)+ (body,body_ty) <- tcRho gr ((var,VMeta i (scopeEnv scope) []):scope) body Nothing+ return (Abs bt var body, (VClosure (scopeEnv scope)+ (Prod bt identW (Meta i) (value2term gr (scopeVars scope) body_ty))))+tcRho gr scope (Abs bt var body) (Just ty) = do -- ABS2+ (var_ty, body_ty) <- unifyFun gr scope (VGen (length scope) []) ty + (body, body_ty) <- tcRho gr ((var,var_ty):scope) body (Just body_ty)+ return (Abs bt var body,ty)+tcRho gr scope (Let (var, (mb_ann_ty, rhs)) body) mb_ty = do -- LET+ (rhs,var_ty) <- case mb_ann_ty of+ Nothing -> inferSigma gr scope rhs+ Just ann_ty -> do (ann_ty, _) <- tcRho gr scope ann_ty (Just (eval gr [] typeType))+ let v_ann_ty = eval gr (scopeEnv scope) ann_ty+ rhs <- checkSigma gr scope rhs v_ann_ty+ return (rhs, v_ann_ty)+ (body, body_ty) <- tcRho gr ((var,var_ty):scope) body mb_ty+ return (Let (var, (Just (value2term gr (scopeVars scope) var_ty), rhs)) body, body_ty)+tcRho gr scope (Typed body ann_ty) mb_ty = do -- ANNOT+ (ann_ty, _) <- tcRho gr scope ann_ty (Just (eval gr [] typeType))+ let v_ann_ty = eval gr (scopeEnv scope) ann_ty+ body <- checkSigma gr scope body v_ann_ty+ instSigma gr scope (Typed body ann_ty) v_ann_ty mb_ty+tcRho gr scope (FV ts) mb_ty = do+ case ts of+ [] -> do i <- newMeta (eval gr [] typeType)+ instSigma gr scope (FV []) (VMeta i (scopeEnv scope) []) mb_ty+ (t:ts) -> do (t,ty) <- tcRho gr scope t mb_ty+ + let go [] ty = return ([],ty)+ go (t:ts) ty = do (t, ty) <- tcRho gr scope t (Just ty)+ (ts,ty) <- go ts ty+ return (t:ts,ty)+ + (ts,ty) <- go ts ty+ return (FV (t:ts), ty)+tcRho gr scope t@(Sort s) mb_ty = do+ instSigma gr scope t (eval gr [] typeType) mb_ty+tcRho gr scope t@(RecType rs) mb_ty = do+ mapM_ (\(l,ty) -> tcRho gr scope ty (Just (eval gr [] typeType))) rs+ instSigma gr scope t (eval gr [] typeType) mb_ty+tcRho gr scope t@(Table p res) mb_ty = do+ (p, p_ty) <- tcRho gr scope p (Just (eval gr [] typePType))+ (res,res_ty) <- tcRho gr scope res Nothing+ subsCheckRho gr scope t res_ty (eval gr [] typeType)+ instSigma gr scope (Table p res) res_ty mb_ty+tcRho gr scope (Prod bt x ty1 ty2) mb_ty = do+ (ty1,ty1_ty) <- tcRho gr scope ty1 (Just (eval gr [] typeType))+ (ty2,ty2_ty) <- tcRho gr ((x,eval gr (scopeEnv scope) ty1):scope) ty2 (Just (eval gr [] typeType))+ instSigma gr scope (Prod bt x ty1 ty2) (eval gr [] typeType) mb_ty+tcRho gr scope (S t p) mb_ty = do+ p_ty <- fmap Meta $ newMeta (eval gr [] typePType)+ res_ty <- fmap Meta $ newMeta (eval gr [] typeType)+ let t_ty = eval gr (scopeEnv scope) (Table p_ty res_ty)+ (t,t_ty) <- tcRho gr scope t (Just t_ty)+ p <- checkSigma gr scope p (eval gr (scopeEnv scope) p_ty)+ instSigma gr scope (S t p) (eval gr (scopeEnv scope) res_ty) mb_ty+tcRho gr scope (T tt ps) mb_ty = do+ p_ty <- case tt of+ TRaw -> fmap Meta $ newMeta (eval gr [] typePType)+ TTyped ty -> do (ty, _) <- tcRho gr scope ty (Just (eval gr [] typeType))+ return ty+ res_ty <- fmap Meta $ newMeta (eval gr [] typeType)+ ps <- mapM (tcCase gr scope (eval gr (scopeEnv scope) p_ty) (eval gr (scopeEnv scope) res_ty)) ps+ instSigma gr scope (T (TTyped p_ty) ps) (eval gr (scopeEnv scope) (Table p_ty res_ty)) mb_ty+tcRho gr scope t@(R rs) mb_ty = do+ lttys <- case mb_ty of+ Nothing -> inferRecFields gr scope rs+ Just ty -> case ty of+ VRecType ltys -> checkRecFields gr scope rs ltys+ VMeta _ _ _ -> inferRecFields gr scope rs+ _ -> tcError (text "Record type is inferred but:" $$+ nest 2 (ppTerm Unqualified 0 (value2term gr (scopeVars scope) ty)) $$+ text "is expected in the expresion:" $$+ nest 2 (ppTerm Unqualified 0 t))+ return (R [(l, (Just (value2term gr (scopeVars scope) ty), t)) | (l,t,ty) <- lttys], + VRecType [(l, ty) | (l,t,ty) <- lttys]+ )+tcRho gr scope (P t l) mb_ty = do+ x_ty <- case mb_ty of+ Just ty -> return ty+ Nothing -> do i <- newMeta (eval gr [] typeType)+ return (VMeta i (scopeEnv scope) [])+ (t,t_ty) <- tcRho gr scope t (Just (VRecType [(l,x_ty)]))+ return (P t l,x_ty)+tcRho gr scope (C t1 t2) mb_ty = do+ (t1,t1_ty) <- tcRho gr scope t1 (Just (eval gr [] typeStr))+ (t2,t2_ty) <- tcRho gr scope t2 (Just (eval gr [] typeStr))+ instSigma gr scope (C t1 t2) (eval gr [] typeStr) mb_ty+tcRho gr scope (Glue t1 t2) mb_ty = do+ (t1,t1_ty) <- tcRho gr scope t1 (Just (eval gr [] typeStr))+ (t2,t2_ty) <- tcRho gr scope t2 (Just (eval gr [] typeStr))+ instSigma gr scope (Glue t1 t2) (eval gr [] typeStr) mb_ty+tcRho gr scope t@(ExtR t1 t2) mb_ty = do+ (t1,t1_ty) <- tcRho gr scope t1 Nothing+ (t2,t2_ty) <- tcRho gr scope t2 Nothing+ case (t1_ty,t2_ty) of+ (VSort s1,VSort s2)+ | s1 == cType && s2 == cType -> instSigma gr scope (ExtR t1 t2) (VSort cType) mb_ty+ (VRecType rs1, VRecType rs2) + | otherwise -> do tcWarn (text "bbbb")+ instSigma gr scope (ExtR t1 t2) (VRecType (rs1 ++ rs2)) mb_ty+ _ -> tcError (text "Cannot type check" <+> ppTerm Unqualified 0 t)+tcRho gr scope (ELin cat t) mb_ty = do -- this could be done earlier, i.e. in the parser+ tcRho gr scope (ExtR t (R [(lockLabel cat,(Just (RecType []),R []))])) mb_ty+tcRho gr scope (ELincat cat t) mb_ty = do -- this could be done earlier, i.e. in the parser+ tcRho gr scope (ExtR t (RecType [(lockLabel cat,RecType [])])) mb_ty+tcRho gr scope (Alts t ss) mb_ty = do+ (t,_) <- tcRho gr scope t (Just (eval gr [] typeStr))+ ss <- flip mapM ss $ \(t1,t2) -> do+ (t1,_) <- tcRho gr scope t1 (Just (eval gr [] typeStr))+ (t2,_) <- tcRho gr scope t2 (Just (eval gr [] typeStrs))+ return (t1,t2)+ instSigma gr scope (Alts t ss) (eval gr [] typeStr) mb_ty+tcRho gr scope (Strs ss) mb_ty = do+ ss <- flip mapM ss $ \t -> do+ (t,_) <- tcRho gr scope t (Just (eval gr [] typeStr))+ return t+ instSigma gr scope (Strs ss) (eval gr [] typeStrs) mb_ty+tcRho gr scope t _ = error ("tcRho "++show t)++tcCase gr scope p_ty res_ty (p,t) = do+ scope <- tcPatt gr scope p p_ty+ (t,res_ty) <- tcRho gr scope t (Just res_ty)+ return (p,t)++tcPatt gr scope PW ty0 =+ return scope+tcPatt gr scope (PV x) ty0 =+ return ((x,ty0):scope)+tcPatt gr scope (PP c ps) ty0 = + case lookupResType gr c of+ Ok ty -> do let go scope ty [] = return (scope,ty)+ go scope ty (p:ps) = do (arg_ty,res_ty) <- unifyFun gr scope (VGen (length scope) []) ty+ scope <- tcPatt gr scope p arg_ty+ go scope res_ty ps+ (scope,ty) <- go scope (eval gr [] ty) ps+ unify gr scope ty0 ty+ return scope+ Bad err -> tcError (text err)+tcPatt gr scope (PString s) ty0 = do+ unify gr scope ty0 (eval gr [] typeStr)+ return scope+tcPatt gr scope PChar ty0 = do+ unify gr scope ty0 (eval gr [] typeStr)+ return scope+tcPatt gr scope (PSeq p1 p2) ty0 = do+ unify gr scope ty0 (eval gr [] typeStr)+ scope <- tcPatt gr scope p1 (eval gr [] typeStr)+ scope <- tcPatt gr scope p2 (eval gr [] typeStr)+ return scope+tcPatt gr scope (PAs x p) ty0 = do+ tcPatt gr ((x,ty0):scope) p ty0+tcPatt gr scope (PR rs) ty0 = do+ let go scope [] = return (scope,[])+ go scope ((l,p):rs) = do i <- newMeta (eval gr [] typePType)+ let ty = VMeta i (scopeEnv scope) []+ scope <- tcPatt gr scope p ty+ (scope,rs) <- go scope rs+ return (scope,(l,ty) : rs)+ (scope',rs) <- go scope rs+ unify gr scope ty0 (VRecType rs)+ return scope'+tcPatt gr scope (PAlt p1 p2) ty0 = do+ tcPatt gr scope p1 ty0+ tcPatt gr scope p2 ty0+ return scope+tcPatt gr scope p ty = error ("tcPatt "++show p)+++inferRecFields gr scope rs = + mapM (\(l,r) -> tcRecField gr scope l r Nothing) rs++checkRecFields gr scope [] ltys+ | null ltys = return []+ | otherwise = tcError (text "Missing fields:" <+> hsep (map (ppLabel . fst) ltys))+checkRecFields gr scope ((l,t):lts) ltys =+ case takeIt l ltys of+ (Just ty,ltys) -> do ltty <- tcRecField gr scope l t (Just ty)+ lttys <- checkRecFields gr scope lts ltys+ return (ltty : lttys)+ (Nothing,ltys) -> do tcWarn (text "Discarded field:" <+> ppLabel l)+ ltty <- tcRecField gr scope l t Nothing+ lttys <- checkRecFields gr scope lts ltys+ return lttys -- ignore the field+ where+ takeIt l1 [] = (Nothing, [])+ takeIt l1 (lty@(l2,ty):ltys)+ | l1 == l2 = (Just ty,ltys) + | otherwise = let (mb_ty,ltys') = takeIt l1 ltys+ in (mb_ty,lty:ltys')++tcRecField gr scope l (mb_ann_ty,t) mb_ty = do+ (t,ty) <- case mb_ann_ty of+ Just ann_ty -> do (ann_ty, _) <- tcRho gr scope ann_ty (Just (eval gr [] typeType))+ let v_ann_ty = eval gr (scopeEnv scope) ann_ty+ t <- checkSigma gr scope t v_ann_ty+ instSigma gr scope t v_ann_ty mb_ty+ Nothing -> tcRho gr scope t mb_ty+ return (l,t,ty)+++-- | Invariant: if the third argument is (Just rho),+-- then rho is in weak-prenex form+instSigma :: SourceGrammar -> Scope -> Term -> Sigma -> Maybe Rho -> TcM (Term, Rho)+instSigma gr scope t ty1 Nothing = instantiate gr t ty1 -- INST1+instSigma gr scope t ty1 (Just ty2) = do -- INST2+ t <- subsCheckRho gr scope t ty1 ty2+ return (t,ty2)++-- | (subsCheck scope args off exp) checks that +-- 'off' is at least as polymorphic as 'args -> exp'+subsCheck :: SourceGrammar -> Scope -> Term -> Sigma -> Sigma -> TcM Term+subsCheck gr scope t sigma1 sigma2 = do -- DEEP-SKOL+ (abs, scope, t, rho2) <- skolemise id gr scope t sigma2+ let skol_tvs = []+ t <- subsCheckRho gr scope t sigma1 rho2+ esc_tvs <- getFreeVars gr [(scope,sigma1),(scope,sigma2)]+ let bad_tvs = filter (`elem` esc_tvs) skol_tvs+ if null bad_tvs+ then return (abs t)+ else tcError (vcat [text "Subsumption check failed:",+ nest 2 (ppTerm Unqualified 0 (value2term gr (scopeVars scope) sigma1)),+ text "is not as polymorphic as",+ nest 2 (ppTerm Unqualified 0 (value2term gr (scopeVars scope) sigma2))])+++-- | Invariant: the second argument is in weak-prenex form+subsCheckRho :: SourceGrammar -> Scope -> Term -> Sigma -> Rho -> TcM Term+subsCheckRho gr scope t sigma1@(VClosure env (Prod Implicit _ _ _)) rho2 = do -- Rule SPEC+ (t,rho1) <- instantiate gr t sigma1+ subsCheckRho gr scope t rho1 rho2+subsCheckRho gr scope t rho1 (VClosure env (Prod Explicit _ a2 r2)) = do -- Rule FUN+ (a1,r1) <- unifyFun gr scope (VGen (length scope) []) rho1+ subsCheckFun gr scope t a1 r1 (eval gr env a2) (eval gr env r2)+subsCheckRho gr scope t (VClosure env (Prod Explicit _ a1 r1)) rho2 = do -- Rule FUN+ (a2,r2) <- unifyFun gr scope (VGen (length scope) []) rho2+ subsCheckFun gr scope t (eval gr env a1) (eval gr env r1) a2 r2+subsCheckRho gr scope t (VSort s1) (VSort s2)+ | s1 == cPType && s2 == cType = return t+subsCheckRho gr scope t tau1 tau2 = do -- Rule MONO+ unify gr scope tau1 tau2 -- Revert to ordinary unification+ return t++subsCheckFun :: SourceGrammar -> Scope -> Term -> Sigma -> Rho -> Sigma -> Rho -> TcM Term+subsCheckFun gr scope t a1 r1 a2 r2 = do+ let v = newVar scope+ vt <- subsCheck gr scope (Vr v) a2 a1+ t <- subsCheckRho gr ((v,eval gr [] typeType):scope) (App t vt) r1 r2 ;+ return (Abs Explicit v t)+++-----------------------------------------------------------------------+-- Unification+-----------------------------------------------------------------------++unifyFun :: SourceGrammar -> Scope -> Value -> Rho -> TcM (Sigma, Rho)+unifyFun gr scope arg_v (VClosure env (Prod Explicit x arg res))+ | x /= identW = return (eval gr env arg,eval gr ((x,arg_v):env) res)+ | otherwise = return (eval gr env arg,eval gr env res)+unifyFun gr scope arg_v tau = do+ arg_ty <- newMeta (eval gr [] typeType)+ res_ty <- newMeta (eval gr [] typeType)+ unify gr scope tau (VClosure [] (Prod Explicit identW (Meta arg_ty) (Meta res_ty)))+ return (VMeta arg_ty [] [], VMeta res_ty [] [])++unify gr scope (VApp f1 vs1) (VApp f2 vs2)+ | f1 == f2 = sequence_ (zipWith (unify gr scope) vs1 vs2)+unify gr scope (VSort s1) (VSort s2)+ | s1 == s2 = return ()+unify gr scope (VGen i vs1) (VGen j vs2)+ | i == j = sequence_ (zipWith (unify gr scope) vs1 vs2)+unify gr scope (VMeta i env1 vs1) (VMeta j env2 vs2)+ | i == j = sequence_ (zipWith (unify gr scope) vs1 vs2)+ | otherwise = do mv <- getMeta j+ case mv of+ Bound t2 -> unify gr scope (VMeta i env1 vs1) (apply gr env2 t2 vs2)+ Unbound _ -> setMeta i (Bound (Meta j))+unify gr scope (VMeta i env vs) v = unifyVar gr scope i env vs v+unify gr scope v (VMeta i env vs) = unifyVar gr scope i env vs v+unify gr scope (VTblType p1 res1) (VTblType p2 res2) = do+ unify gr scope p1 p2+ unify gr scope res1 res2+unify gr scope (VRecType rs1) (VRecType rs2) = do+ sequence_ [unify gr scope ty1 ty2 | (l,ty1) <- rs1, Just ty2 <- [lookup l rs2]]+unify gr scope v1 v2 = do+ t1 <- zonkTerm (value2term gr (scopeVars scope) v1)+ t2 <- zonkTerm (value2term gr (scopeVars scope) v2)+ tcError (text "Cannot unify types:" <+> (ppTerm Unqualified 0 t1 $$ + ppTerm Unqualified 0 t2))++-- | Invariant: tv1 is a flexible type variable+unifyVar :: SourceGrammar -> Scope -> MetaId -> Env -> [Value] -> Tau -> TcM ()+unifyVar gr scope i env vs ty2 = do -- Check whether i is bound+ mv <- getMeta i+ case mv of+ Bound ty1 -> unify gr scope (apply gr env ty1 vs) ty2+ Unbound _ -> do let ty2' = value2term gr (scopeVars scope) ty2+ ms2 <- getMetaVars gr [(scope,ty2)]+ if i `elem` ms2+ then tcError (text "Occurs check for" <+> ppMeta i <+> text "in:" $$+ nest 2 (ppTerm Unqualified 0 ty2'))+ else setMeta i (Bound ty2')+++-----------------------------------------------------------------------+-- Instantiation and quantification+-----------------------------------------------------------------------++-- | Instantiate the topmost for-alls of the argument type+-- with metavariables+instantiate :: SourceGrammar -> Term -> Sigma -> TcM (Term,Rho)+instantiate gr t (VClosure env (Prod Implicit x ty1 ty2)) = do+ i <- newMeta (eval gr env ty1)+ instantiate gr (App t (ImplArg (Meta i))) (eval gr ((x,VMeta i [] []):env) ty2)+instantiate gr t ty = do+ return (t,ty)++skolemise f gr scope t (VClosure env (Prod Implicit x arg_ty res_ty)) -- Rule PRPOLY+ | x /= identW = + let (y,body) = case t of+ Abs Implicit y body -> (y, body)+ body -> (newVar scope, body)+ in skolemise (f . Abs Implicit y)+ gr+ ((y,eval gr env arg_ty):scope) body+ (eval gr ((x,VGen (length scope) []):env) res_ty)+skolemise f gr scope t (VClosure env (Prod Explicit x arg_ty res_ty)) -- Rule PRFUN+ | x /= identW = + let (y,body) = case t of+ Abs Explicit y body -> (y, body)+ body -> let y = newVar scope+ in (y, App body (Vr y))+ in skolemise (f . Abs Explicit y)+ gr+ ((y,eval gr env arg_ty):scope) body+ (eval gr ((x,VGen (length scope) []):env) res_ty)+skolemise f gr scope t ty -- Rule PRMONO+ = return (f, scope, t, ty)+++-- | Quantify over the specified type variables (all flexible)+quantify :: SourceGrammar -> Scope -> Term -> [MetaId] -> Rho -> TcM (Term,Sigma)+quantify gr scope t tvs ty0 = do+ mapM_ bind (tvs `zip` new_bndrs) -- 'bind' is just a cunning way + ty <- zonkTerm ty -- of doing the substitution+ return (foldr (Abs Implicit) t new_bndrs+ ,eval gr [] (foldr (\v ty -> Prod Implicit v typeType ty) ty new_bndrs)+ )+ where+ ty = value2term gr (scopeVars scope) ty0+ + used_bndrs = nub (bndrs ty) -- Avoid quantified type variables in use+ new_bndrs = take (length tvs) (allBinders \\ used_bndrs)+ bind (i, name) = setMeta i (Bound (Vr name))++ bndrs (Prod _ x t1 t2) = [x] ++ bndrs t1 ++ bndrs t2+ bndrs _ = []++allBinders :: [Ident] -- a,b,..z, a1, b1,... z1, a2, b2,... +allBinders = [ identC (BS.pack [x]) | x <- ['a'..'z'] ] +++ [ identC (BS.pack (x : show i)) | i <- [1 :: Integer ..], x <- ['a'..'z']]+++-----------------------------------------------------------------------+-- The Monad+-----------------------------------------------------------------------++type Scope = [(Ident,Value)]++type Sigma = Value+type Rho = Value -- No top-level ForAll+type Tau = Value -- No ForAlls anywhere++data MetaValue+ = Unbound Sigma+ | Bound Term+type MetaStore = IntMap.IntMap MetaValue+data TcResult a+ = TcOk a MetaStore [Message]+ | TcFail [Message]+newtype TcM a = TcM {unTcM :: MetaStore -> [Message] -> TcResult a}++instance Monad TcM where+ return x = TcM (\ms msgs -> TcOk x ms msgs)+ f >>= g = TcM (\ms msgs -> case unTcM f ms msgs of+ TcOk x ms msgs -> unTcM (g x) ms msgs+ TcFail msgs -> TcFail msgs)+ fail = tcError . text++instance Functor TcM where+ fmap f g = TcM (\ms msgs -> case unTcM g ms msgs of+ TcOk x ms msgs -> TcOk (f x) ms msgs+ TcFail msgs -> TcFail msgs)++tcError :: Message -> TcM a+tcError msg = TcM (\ms msgs -> TcFail (msg : msgs))++tcWarn :: Message -> TcM ()+tcWarn msg = TcM (\ms msgs -> TcOk () ms ((text "Warning:" <+> msg) : msgs))++runTcM :: TcM a -> Check a+runTcM f = Check (\ctxt msgs -> case unTcM f IntMap.empty msgs of+ TcOk x _ msgs -> Success x msgs+ TcFail msgs -> Fail msgs)++newMeta :: Sigma -> TcM MetaId+newMeta ty = TcM (\ms msgs -> + let i = IntMap.size ms+ in TcOk i (IntMap.insert i (Unbound ty) ms) msgs)++getMeta :: MetaId -> TcM MetaValue+getMeta i = TcM (\ms msgs -> + case IntMap.lookup i ms of+ Just mv -> TcOk mv ms msgs+ Nothing -> TcFail ((text "Unknown metavariable" <+> ppMeta i) : msgs))++setMeta :: MetaId -> MetaValue -> TcM ()+setMeta i mv = TcM (\ms msgs -> TcOk () (IntMap.insert i mv ms) msgs)++newVar :: Scope -> Ident+newVar scope = head [x | i <- [1..], + let x = identC (BS.pack ('v':show i)), + isFree scope x]+ where+ isFree [] x = True+ isFree ((y,_):scope) x = x /= y && isFree scope x++scopeEnv scope = zipWith (\(x,ty) i -> (x,VGen i [])) (reverse scope) [0..]+scopeVars scope = map fst scope+scopeTypes scope = zipWith (\(_,ty) scope -> (scope,ty)) scope (tails scope)++-- | This function takes account of zonking, and returns a set+-- (no duplicates) of unbound meta-type variables+getMetaVars :: SourceGrammar -> [(Scope,Sigma)] -> TcM [MetaId]+getMetaVars gr sc_tys = do+ tys <- mapM (\(scope,ty) -> zonkTerm (value2term gr (scopeVars scope) ty)) sc_tys+ return (foldr go [] tys)+ where+ -- Get the MetaIds from a term; no duplicates in result+ go (Vr tv) acc = acc + go (Meta i) acc+ | i `elem` acc = acc+ | otherwise = i : acc+ go (Q _) acc = acc+ go (QC _) acc = acc+ go (Sort _) acc = acc+ go (Prod _ _ arg res) acc = go arg (go res acc)+ go (Table p t) acc = go p (go t acc)+ go (RecType rs) acc = foldl (\acc (l,ty) -> go ty acc) acc rs+ go t acc = error ("go "++show t)++-- | This function takes account of zonking, and returns a set+-- (no duplicates) of free type variables+getFreeVars :: SourceGrammar -> [(Scope,Sigma)] -> TcM [Ident]+getFreeVars gr sc_tys = do+ tys <- mapM (\(scope,ty) -> zonkTerm (value2term gr (scopeVars scope) ty)) sc_tys+ return (foldr (go []) [] tys)+ where+ go bound (Vr tv) acc + | tv `elem` bound = acc+ | tv `elem` acc = acc+ | otherwise = tv : acc+ go bound (Meta _) acc = acc+ go bound (Q _) acc = acc+ go bound (QC _) acc = acc+ go bound (Prod _ x arg res) acc = go bound arg (go (x : bound) res acc)+ go bound (RecType rs) acc = foldl (\acc (l,ty) -> go bound ty acc) acc rs+ go bound (Table p t) acc = go bound p (go bound t acc)++-- | Eliminate any substitutions in a term+zonkTerm :: Term -> TcM Term+zonkTerm (Meta i) = do+ mv <- getMeta i+ case mv of+ Unbound _ -> return (Meta i)+ Bound t -> do t <- zonkTerm t+ setMeta i (Bound t) -- "Short out" multiple hops+ return t+zonkTerm t = composOp zonkTerm t+
@@ -15,11 +15,11 @@ module GF.Compile.Update (buildAnyTree, extendModule, rebuildModule) where import GF.Infra.Ident+import GF.Infra.Option+import GF.Infra.CheckM import GF.Grammar.Grammar import GF.Grammar.Printer import GF.Grammar.Lookup-import GF.Infra.Modules-import GF.Infra.Option import GF.Data.Operations @@ -44,40 +44,43 @@ text "in module" <+> ppIdent m) Nothing -> go (Map.insert c j map) is -extendModule :: SourceGrammar -> SourceModule -> Err SourceModule+extendModule :: SourceGrammar -> SourceModule -> Check SourceModule extendModule gr (name,m) ---- Just to allow inheritance in incomplete concrete (which are not ---- compiled anyway), extensions are not built for them. ---- Should be replaced by real control. AR 4/2/2005 | mstatus m == MSIncomplete && isModCnc m = return (name,m)- | otherwise = do m' <- foldM extOne m (extend m) + | otherwise = checkIn (ppLocation (msrc m) NoLoc <> colon) $ do+ m' <- foldM extOne m (mextend m) return (name,m') where extOne mo (n,cond) = do- m0 <- lookupModule gr n+ m0 <- checkErr $ lookupModule gr n -- test that the module types match, and find out if the old is complete- testErr (sameMType (mtype m) (mtype mo)) - ("illegal extension type to module" +++ showIdent name)+ unless (sameMType (mtype m) (mtype mo)) + (checkError (text "illegal extension type to module" <+> ppIdent name)) let isCompl = isCompleteModule m0 -- build extension in a way depending on whether the old module is complete- js1 <- extendMod gr isCompl (n, isInherited cond) name (jments m0) (jments mo)+ js1 <- extendMod gr isCompl ((n,m0), isInherited cond) name (jments mo) -- if incomplete, throw away extension information return $ if isCompl then mo {jments = js1}- else mo {extend = filter ((/=n) . fst) (extend mo)+ else mo {mextend= filter ((/=n) . fst) (mextend mo) ,mexdeps= nub (n : mexdeps mo) ,jments = js1 } -- | rebuilding instance + interface, and "with" modules, prior to renaming. -- AR 24/10/2003-rebuildModule :: SourceGrammar -> SourceModule -> Err SourceModule-rebuildModule gr mo@(i,mi@(ModInfo mt stat fs_ me mw ops_ med_ js_)) = do+rebuildModule :: SourceGrammar -> SourceModule -> Check SourceModule+rebuildModule gr mo@(i,mi@(ModInfo mt stat fs_ me mw ops_ med_ msrc_ env_ js_)) = + checkIn (ppLocation msrc_ NoLoc <> colon) $ do+ ---- deps <- moduleDeps ms ---- is <- openInterfaces deps i let is = [] ---- the method above is buggy: try "i -src" for two grs. AR 8/3/2005@@ -85,22 +88,23 @@ -- add the information given in interface into an instance module Nothing -> do- testErr (null is || mstatus mi == MSIncomplete) - ("module" +++ showIdent i +++ - "has open interfaces and must therefore be declared incomplete") + unless (null is || mstatus mi == MSIncomplete) + (checkError (text "module" <+> ppIdent i <+> + text "has open interfaces and must therefore be declared incomplete")) case mt of MTInstance (i0,mincl) -> do- m1 <- lookupModule gr i0- testErr (isModRes m1) ("interface expected instead of" +++ showIdent i0)- js' <- extendMod gr False (i0, isInherited mincl) i (jments m1) (jments mi)+ m1 <- checkErr $ lookupModule gr i0+ unless (isModRes m1)+ (checkError (text "interface expected instead of" <+> ppIdent i0))+ js' <- extendMod gr False ((i0,m1), isInherited mincl) i (jments mi) --- to avoid double inclusions, in instance I of I0 = J0 ** ... case extends mi of- [] -> return $ replaceJudgements mi js'+ [] -> return mi{jments=js'} j0s -> do- m0s <- mapM (lookupModule gr) j0s+ m0s <- checkErr $ mapM (lookupModule gr) j0s let notInM0 c _ = all (not . isInBinTree c . jments) m0s let js2 = filterBinTree notInM0 js'- return $ replaceJudgements mi js2+ return mi{jments=js2} _ -> return mi -- add the instance opens to an incomplete module "with" instances@@ -108,9 +112,9 @@ let (infs,insts) = unzip ops let stat' = ifNull MSComplete (const MSIncomplete) [i | i <- is, notElem i infs]- testErr (stat' == MSComplete || stat == MSIncomplete) - ("module" +++ showIdent i +++ "remains incomplete")- ModInfo mt0 _ fs me' _ ops0 _ js <- lookupModule gr ext+ unless (stat' == MSComplete || stat == MSIncomplete) + (checkError (text "module" <+> ppIdent i <+> text "remains incomplete"))+ ModInfo mt0 _ fs me' _ ops0 _ fpath _ js <- checkErr $ lookupModule gr ext let ops1 = nub $ ops_ ++ -- N.B. js has been name-resolved already [OQualif i j | (i,j) <- ops] ++@@ -120,10 +124,10 @@ --- check if me is incomplete let fs1 = fs `addOptions` fs_ -- new flags have priority- let js0 = [ci | ci@(c,_) <- tree2list js, isInherited incl c]+ let js0 = [(c,globalizeLoc fpath j) | (c,j) <- tree2list js, isInherited incl c] let js1 = buildTree (tree2list js_ ++ js0) let med1= nub (ext : infs ++ insts ++ med_)- return $ ModInfo mt0 stat' fs1 me Nothing ops1 med1 js1+ return $ ModInfo mt0 stat' fs1 me Nothing ops1 med1 msrc_ env_ js1 return (i,mi') @@ -131,30 +135,31 @@ -- and the process is interrupted if unification fails. -- If the extended module is incomplete, its judgements are just copied. extendMod :: SourceGrammar ->- Bool -> (Ident,Ident -> Bool) -> Ident -> - BinTree Ident Info -> BinTree Ident Info -> - Err (BinTree Ident Info)-extendMod gr isCompl (name,cond) base old new = foldM try new $ Map.toList old + Bool -> (SourceModule,Ident -> Bool) -> Ident -> + BinTree Ident Info -> Check (BinTree Ident Info)+extendMod gr isCompl ((name,mi),cond) base new = foldM try new $ Map.toList (jments mi) where- try new (c,i)+ try new (c,i0) | not (cond c) = return new | otherwise = case Map.lookup c new of Just j -> case unifyAnyInfo name i j of Ok k -> return $ updateTree (c,k) new Bad _ -> do (base,j) <- case j of - AnyInd _ m -> lookupOrigInfo gr (m,c)+ AnyInd _ m -> checkErr $ lookupOrigInfo gr (m,c) _ -> return (base,j) (name,i) <- case i of - AnyInd _ m -> lookupOrigInfo gr (m,c)+ AnyInd _ m -> checkErr $ lookupOrigInfo gr (m,c) _ -> return (name,i)- fail $ render (text "cannot unify the information" $$ - nest 4 (ppJudgement Qualified (c,i)) $$- text "in module" <+> ppIdent name <+> text "with" $$- nest 4 (ppJudgement Qualified (c,j)) $$- text "in module" <+> ppIdent base)+ checkError (text "cannot unify the information" $$ + nest 4 (ppJudgement Qualified (c,i)) $$+ text "in module" <+> ppIdent name <+> text "with" $$+ nest 4 (ppJudgement Qualified (c,j)) $$+ text "in module" <+> ppIdent base) Nothing-> if isCompl then return $ updateTree (c,indirInfo name i) new else return $ updateTree (c,i) new+ where+ i = globalizeLoc (msrc mi) i0 indirInfo :: Ident -> Info -> Info indirInfo n info = AnyInd b n' where @@ -165,6 +170,24 @@ AnyInd b k -> (b,k) _ -> (False,n) ---- canonical in Abs +globalizeLoc fpath i =+ case i of+ AbsCat mc -> AbsCat (fmap gl mc)+ AbsFun mt ma md moper -> AbsFun (fmap gl mt) ma (fmap (fmap gl) md) moper+ ResParam mt mv -> ResParam (fmap gl mt) mv+ ResValue t -> ResValue (gl t)+ ResOper mt m -> ResOper (fmap gl mt) (fmap gl m)+ ResOverload ms os -> ResOverload ms (map (\(x,y) -> (gl x,gl y)) os)+ CncCat mc mf mp mpmcfg-> CncCat (fmap gl mc) (fmap gl mf) (fmap gl mp) mpmcfg+ CncFun m mt md mpmcfg-> CncFun m (fmap gl mt) (fmap gl md) mpmcfg+ AnyInd b m -> AnyInd b m+ where+ gl (L loc0 x) = loc `seq` L (External fpath loc) x+ where+ loc = case loc0 of+ External _ loc -> loc+ loc -> loc+ unifyAnyInfo :: Ident -> Info -> Info -> Err Info unifyAnyInfo m i j = case (i,j) of (AbsCat mc1, AbsCat mc2) -> @@ -173,19 +196,19 @@ liftM4 AbsFun (unifMaybeL mt1 mt2) (unifAbsArrity ma1 ma2) (unifAbsDefs md1 md2) (unifMaybe moper1 moper2) -- adding defs (ResParam mt1 mv1, ResParam mt2 mv2) ->- liftM2 ResParam (unifMaybe mt1 mt2) (unifMaybe mv1 mv2)- (ResValue t1, ResValue t2) - | t1==t2 -> return (ResValue t1)+ liftM2 ResParam (unifMaybeL mt1 mt2) (unifMaybe mv1 mv2)+ (ResValue (L l1 t1), ResValue (L l2 t2)) + | t1==t2 -> return (ResValue (L l1 t1)) | otherwise -> fail "" (_, ResOverload ms t) | elem m ms -> return $ ResOverload ms t (ResOper mt1 m1, ResOper mt2 m2) -> liftM2 ResOper (unifMaybeL mt1 mt2) (unifMaybeL m1 m2) - (CncCat mc1 mf1 mp1, CncCat mc2 mf2 mp2) -> - liftM3 CncCat (unifMaybeL mc1 mc2) (unifMaybeL mf1 mf2) (unifMaybeL mp1 mp2)- (CncFun m mt1 md1, CncFun _ mt2 md2) -> - liftM2 (CncFun m) (unifMaybeL mt1 mt2) (unifMaybeL md1 md2) ---- adding defs+ (CncCat mc1 mf1 mp1 mpmcfg1, CncCat mc2 mf2 mp2 mpmcfg2) -> + liftM4 CncCat (unifMaybeL mc1 mc2) (unifMaybeL mf1 mf2) (unifMaybeL mp1 mp2) (unifMaybe mpmcfg1 mpmcfg2)+ (CncFun m mt1 md1 mpmcfg1, CncFun _ mt2 md2 mpmcfg2) -> + liftM3 (CncFun m) (unifMaybeL mt1 mt2) (unifMaybeL md1 md2) (unifMaybe mpmcfg1 mpmcfg2) (AnyInd b1 m1, AnyInd b2 m2) -> do testErr (b1 == b2) $ "indirection status"
@@ -11,7 +11,6 @@ import GF.Grammar.Grammar import GF.Infra.Ident import GF.Infra.Option ----import GF.Infra.Modules import GF.Grammar.Macros import GF.Grammar.Lookup @@ -32,8 +31,8 @@ ResValue lt -> i ---- ResOper mt md -> ResOper mt Nothing ResOverload is fs -> ResOverload is [(lty, L loc (EInt 0)) | (lty,L loc _) <- fs]- CncCat mty mte mtf -> CncCat mty Nothing Nothing- CncFun mict mte mtf -> CncFun mict Nothing Nothing+ CncCat mty mte mtf mpmcfg -> CncCat mty Nothing Nothing Nothing+ CncFun mict mte mtf mpmcfg -> CncFun mict Nothing Nothing Nothing AnyInd b f -> i constantsInTerm :: Term -> [QIdent]@@ -107,12 +106,12 @@ AbsFun mt mi me mb -> 1 + msize mt + sum [sum (map (sizeTerm . patt2term) ps) + sizeTerm t | Just es <- [me], L _ (ps,t) <- es] ResParam mp mt -> - 1 + sum [1 + sum [1 + sizeTerm ty | (_,_,ty) <- co] | Just ps <- [mp], L _ (_,co) <- ps]+ 1 + sum [1 + sum [1 + sizeTerm ty | (_,_,ty) <- co] | Just (L _ ps) <- [mp], (_,co) <- ps] ResValue lt -> 0 ResOper mt md -> 1 + msize mt + msize md ResOverload is fs -> 1 + sum [sizeTerm ty + sizeTerm tr | (L _ ty, L _ tr) <- fs]- CncCat mty mte mtf -> 1 + msize mty -- ignoring lindef and printname- CncFun mict mte mtf -> 1 + msize mte -- ignoring type and printname+ CncCat mty mte mtf _ -> 1 + msize mty -- ignoring lindef and printname+ CncFun mict mte mtf _ -> 1 + msize mte -- ignoring type and printname AnyInd b f -> -1 -- just to ignore these in the size _ -> 0 where
@@ -9,16 +9,23 @@ module GF.Grammar.Binary where +import Data.Char import Data.Binary +import Control.Monad import qualified Data.Map as Map import qualified Data.ByteString.Char8 as BS import GF.Data.Operations import GF.Infra.Ident import GF.Infra.Option -import GF.Infra.Modules import GF.Grammar.Grammar +import PGF.Binary + +-- Please change this every time when the GFO format is changed +gfoVersion = "GF02" + + instance Binary Ident where put id = put (ident2bs id) get = do bs <- get @@ -26,14 +33,14 @@ then return identW else return (identC bs) -instance Binary a => Binary (MGrammar a) where +instance Binary SourceGrammar where put = put . modules get = fmap mGrammar get -instance Binary a => Binary (ModInfo a) where - put mi = do put (mtype mi,mstatus mi,flags mi,extend mi,mwith mi,opens mi,mexdeps mi,jments mi) - get = do (mtype,mstatus,flags,extend,mwith,opens,med,jments) <- get - return (ModInfo mtype mstatus flags extend mwith opens med jments) +instance Binary SourceModInfo where + put mi = do put (mtype mi,mstatus mi,mflags mi,mextend mi,mwith mi,mopens mi,mexdeps mi,msrc mi,mseqs mi,jments mi) + get = do (mtype,mstatus,mflags,mextend,mwith,mopens,med,msrc,mseqs,jments) <- get + return (ModInfo mtype mstatus mflags mextend mwith mopens med msrc mseqs jments) instance Binary ModuleType where put MTAbstract = putWord8 0 @@ -86,6 +93,19 @@ Ok x -> return x Bad msg -> fail msg +instance Binary Production where + put (Production res funid args) = put (res,funid,args) + get = do res <- get + funid <- get + args <- get + return (Production res funid args) + +instance Binary PMCFG where + put (PMCFG prods funs) = put (prods,funs) + get = do prods <- get + funs <- get + return (PMCFG prods funs) + instance Binary Info where put (AbsCat x) = putWord8 0 >> put x put (AbsFun w x y z) = putWord8 1 >> put (w,x,y,z) @@ -93,8 +113,8 @@ put (ResValue x) = putWord8 3 >> put x put (ResOper x y) = putWord8 4 >> put (x,y) put (ResOverload x y)= putWord8 5 >> put (x,y) - put (CncCat x y z) = putWord8 6 >> put (x,y,z) - put (CncFun x y z) = putWord8 7 >> put (x,y,z) + put (CncCat w x y z) = putWord8 6 >> put (w,x,y,z) + put (CncFun w x y z) = putWord8 7 >> put (w,x,y,z) put (AnyInd x y) = putWord8 8 >> put (x,y) get = do tag <- getWord8 case tag of @@ -104,24 +124,25 @@ 3 -> get >>= \x -> return (ResValue x) 4 -> get >>= \(x,y) -> return (ResOper x y) 5 -> get >>= \(x,y) -> return (ResOverload x y) - 6 -> get >>= \(x,y,z) -> return (CncCat x y z) - 7 -> get >>= \(x,y,z) -> return (CncFun x y z) + 6 -> get >>= \(w,x,y,z) -> return (CncCat w x y z) + 7 -> get >>= \(w,x,y,z) -> return (CncFun w x y z) 8 -> get >>= \(x,y) -> return (AnyInd x y) _ -> decodingError +instance Binary Location where + put NoLoc = putWord8 0 + put (Local x y) = putWord8 1 >> put (x,y) + put (External x y) = putWord8 2 >> put (x,y) + get = do tag <- getWord8 + case tag of + 0 -> return NoLoc + 1 -> get >>= \(x,y) -> return (Local x y) + 2 -> get >>= \(x,y) -> return (External x y) + instance Binary a => Binary (L a) where put (L x y) = put (x,y) get = get >>= \(x,y) -> return (L x y) -instance Binary BindType where - put Explicit = putWord8 0 - put Implicit = putWord8 1 - get = do tag <- getWord8 - case tag of - 0 -> return Explicit - 1 -> return Implicit - _ -> decodingError - instance Binary Term where put (Vr x) = putWord8 0 >> put x put (Cn x) = putWord8 1 >> put x @@ -134,28 +155,31 @@ put (App x y) = putWord8 8 >> put (x,y) put (Abs x y z) = putWord8 9 >> put (x,y,z) put (Meta x) = putWord8 10 >> put x - put (Prod w x y z)= putWord8 11 >> put (w,x,y,z) - put (Typed x y) = putWord8 12 >> put (x,y) - put (Example x y) = putWord8 13 >> put (x,y) - put (RecType x) = putWord8 14 >> put x - put (R x) = putWord8 15 >> put x - put (P x y) = putWord8 16 >> put (x,y) - put (ExtR x y) = putWord8 17 >> put (x,y) - put (Table x y) = putWord8 18 >> put (x,y) - put (T x y) = putWord8 19 >> put (x,y) - put (V x y) = putWord8 20 >> put (x,y) - put (S x y) = putWord8 21 >> put (x,y) - put (Let x y) = putWord8 22 >> put (x,y) - put (Q x) = putWord8 23 >> put x - put (QC x) = putWord8 24 >> put x - put (C x y) = putWord8 25 >> put (x,y) - put (Glue x y) = putWord8 26 >> put (x,y) - put (EPatt x) = putWord8 27 >> put x - put (EPattType x) = putWord8 28 >> put x - put (FV x) = putWord8 29 >> put x - put (Alts x y) = putWord8 30 >> put (x,y) - put (Strs x) = putWord8 31 >> put x - put (ELin x y) = putWord8 32 >> put (x,y) + put (ImplArg x) = putWord8 11 >> put x + put (Prod w x y z)= putWord8 12 >> put (w,x,y,z) + put (Typed x y) = putWord8 13 >> put (x,y) + put (Example x y) = putWord8 14 >> put (x,y) + put (RecType x) = putWord8 15 >> put x + put (R x) = putWord8 16 >> put x + put (P x y) = putWord8 17 >> put (x,y) + put (ExtR x y) = putWord8 18 >> put (x,y) + put (Table x y) = putWord8 19 >> put (x,y) + put (T x y) = putWord8 20 >> put (x,y) + put (V x y) = putWord8 21 >> put (x,y) + put (S x y) = putWord8 22 >> put (x,y) + put (Let x y) = putWord8 23 >> put (x,y) + put (Q x) = putWord8 24 >> put x + put (QC x) = putWord8 25 >> put x + put (C x y) = putWord8 26 >> put (x,y) + put (Glue x y) = putWord8 27 >> put (x,y) + put (EPatt x) = putWord8 28 >> put x + put (EPattType x) = putWord8 29 >> put x + put (ELincat x y) = putWord8 30 >> put (x,y) + put (ELin x y) = putWord8 31 >> put (x,y) + put (FV x) = putWord8 32 >> put x + put (Alts x y) = putWord8 33 >> put (x,y) + put (Strs x) = putWord8 34 >> put x + put (Error x) = putWord8 35 >> put x get = do tag <- getWord8 case tag of @@ -170,28 +194,31 @@ 8 -> get >>= \(x,y) -> return (App x y) 9 -> get >>= \(x,y,z) -> return (Abs x y z) 10 -> get >>= \x -> return (Meta x) - 11 -> get >>= \(w,x,y,z)->return (Prod w x y z) - 12 -> get >>= \(x,y) -> return (Typed x y) - 13 -> get >>= \(x,y) -> return (Example x y) - 14 -> get >>= \x -> return (RecType x) - 15 -> get >>= \x -> return (R x) - 16 -> get >>= \(x,y) -> return (P x y) - 17 -> get >>= \(x,y) -> return (ExtR x y) - 18 -> get >>= \(x,y) -> return (Table x y) - 19 -> get >>= \(x,y) -> return (T x y) - 20 -> get >>= \(x,y) -> return (V x y) - 21 -> get >>= \(x,y) -> return (S x y) - 22 -> get >>= \(x,y) -> return (Let x y) - 23 -> get >>= \x -> return (Q x) - 24 -> get >>= \x -> return (QC x) - 25 -> get >>= \(x,y) -> return (C x y) - 26 -> get >>= \(x,y) -> return (Glue x y) - 27 -> get >>= \x -> return (EPatt x) - 28 -> get >>= \x -> return (EPattType x) - 29 -> get >>= \x -> return (FV x) - 30 -> get >>= \(x,y) -> return (Alts x y) - 31 -> get >>= \x -> return (Strs x) - 32 -> get >>= \(x,y) -> return (ELin x y) + 11 -> get >>= \x -> return (ImplArg x) + 12 -> get >>= \(w,x,y,z)->return (Prod w x y z) + 13 -> get >>= \(x,y) -> return (Typed x y) + 14 -> get >>= \(x,y) -> return (Example x y) + 15 -> get >>= \x -> return (RecType x) + 16 -> get >>= \x -> return (R x) + 17 -> get >>= \(x,y) -> return (P x y) + 18 -> get >>= \(x,y) -> return (ExtR x y) + 19 -> get >>= \(x,y) -> return (Table x y) + 20 -> get >>= \(x,y) -> return (T x y) + 21 -> get >>= \(x,y) -> return (V x y) + 22 -> get >>= \(x,y) -> return (S x y) + 23 -> get >>= \(x,y) -> return (Let x y) + 24 -> get >>= \x -> return (Q x) + 25 -> get >>= \x -> return (QC x) + 26 -> get >>= \(x,y) -> return (C x y) + 27 -> get >>= \(x,y) -> return (Glue x y) + 28 -> get >>= \x -> return (EPatt x) + 29 -> get >>= \x -> return (EPattType x) + 30 -> get >>= \(x,y) -> return (ELincat x y) + 31 -> get >>= \(x,y) -> return (ELin x y) + 32 -> get >>= \x -> return (FV x) + 33 -> get >>= \(x,y) -> return (Alts x y) + 34 -> get >>= \x -> return (Strs x) + 35 -> get >>= \x -> return (Error x) _ -> decodingError instance Binary Patt where @@ -259,9 +286,23 @@ 1 -> fmap LVar get _ -> decodingError -decodeModHeader :: FilePath -> IO SourceModule -decodeModHeader fpath = do - (m,mtype,mstatus,flags,extend,mwith,opens,med) <- decodeFile fpath - return (m,ModInfo mtype mstatus flags extend mwith opens med Map.empty) -decodingError = fail "This GFO file was compiled with different version of GF" +putGFOVersion = mapM_ (putWord8 . fromIntegral . ord) gfoVersion +getGFOVersion = replicateM (length gfoVersion) (fmap (chr . fromIntegral) getWord8) + +decodeModule :: FilePath -> IO SourceModule +decodeModule fpath = + decodeFile_ fpath (getGFOVersion >> get) + +decodeModuleHeader fpath = decodeFile_ fpath getVersionedMod + where + getVersionedMod = do + ver <- getGFOVersion + if ver == gfoVersion + then do (m,mtype,mstatus,mflags,mextend,mwith,mopens,med,msrc) <- get + return (Just (m,ModInfo mtype mstatus mflags mextend mwith mopens med msrc Nothing Map.empty)) + else return Nothing + +encodeModule :: FilePath -> SourceModule -> IO () +encodeModule fpath mo = + encodeFile_ fpath (putGFOVersion >> put mo)
@@ -17,17 +17,18 @@ import GF.Grammar.Grammar import GF.Grammar.Macros import GF.Infra.Ident-import GF.Infra.Modules import GF.Infra.Option+import GF.Infra.UseIO import GF.Data.Operations import Data.Char import Data.List import qualified Data.ByteString.Char8 as BS+import System.FilePath -getCF :: String -> String -> Err SourceGrammar-getCF name = fmap (cf2gf name) . pCF+getCF :: FilePath -> String -> Err SourceGrammar+getCF fpath = fmap (cf2gf fpath) . pCF --------------------- -- the parser -------@@ -50,9 +51,9 @@ getCFRule s = getcf (wrds s) where getcf ws = case ws of fun : cat : a : its | isArrow a -> - Ok [L (0,0) (init fun, (cat, map mkIt its))]+ Ok [L NoLoc (init fun, (cat, map mkIt its))] cat : a : its | isArrow a -> - Ok [L (0,0) (mkFun cat it, (cat, map mkIt it)) | it <- chunk its]+ Ok [L NoLoc (mkFun cat it, (cat, map mkIt it)) | it <- chunk its] _ -> Bad (" invalid rule:" +++ s) isArrow a = elem a ["->", "::="] mkIt w = case w of@@ -80,13 +81,13 @@ -- the compiler ---------- -------------------------- -cf2gf :: String -> CF -> SourceGrammar-cf2gf name cf = mGrammar [- (aname, addFlag (modifyFlags (\fs -> fs{optStartCat = Just cat}))- (emptyModInfo{mtype = MTAbstract, jments = abs})),- (cname, emptyModInfo{mtype = MTConcrete aname, jments = cnc})+cf2gf :: FilePath -> CF -> SourceGrammar+cf2gf fpath cf = mGrammar [+ (aname, ModInfo MTAbstract MSComplete (modifyFlags (\fs -> fs{optStartCat = Just cat})) [] Nothing [] [] fpath Nothing abs),+ (cname, ModInfo (MTConcrete aname) MSComplete noOptions [] Nothing [] [] fpath Nothing cnc) ] where+ name = justModuleName fpath (abs,cnc,cat) = cf2grammar cf aname = identS $ name ++ "Abs" cname = identS name@@ -99,9 +100,9 @@ cat = case rules of (L _ (_,(c,_))):_ -> c -- the value category of the first rule _ -> error "empty CF" - cats = [(cat, AbsCat (Just (L (0,0) []))) | + cats = [(cat, AbsCat (Just (L NoLoc []))) | cat <- nub (concat (map cf2cat rules))] ----notPredef cat- lincats = [(cat, CncCat (Just (L loc defLinType)) Nothing Nothing) | (cat,AbsCat (Just (L loc _))) <- cats]+ lincats = [(cat, CncCat (Just (L loc defLinType)) Nothing Nothing Nothing) | (cat,AbsCat (Just (L loc _))) <- cats] (funs,lins) = unzip (map cf2rule rules) cf2cat :: CFRule -> [Ident]@@ -118,6 +119,7 @@ Nothing (Just (L loc (mkAbs (map fst args) (mkRecord (const theLinLabel) [foldconcat (map mkIt args0)]))))+ Nothing Nothing) mkIt (v, Left _) = P (Vr v) theLinLabel mkIt (_, Right a) = K a
@@ -24,13 +24,14 @@ import Data.Char import Data.List+import System.FilePath -- AR 18/4/2000 - 31/3/2004 -getEBNF :: String -> String -> Err SourceGrammar-getEBNF name = fmap (cf2gf name . ebnf2cf) . pEBNF+getEBNF :: FilePath -> String -> Err SourceGrammar+getEBNF fpath = fmap (cf2gf fpath . ebnf2cf) . pEBNF type EBNF = [ERule] type ERule = (ECat, ERHS)@@ -54,7 +55,7 @@ ebnf2cf :: EBNF -> [CFRule] ebnf2cf ebnf = - [L (0,0) (mkCFF i rule,rule) | (i,rule) <- zip [0..] (normEBNF ebnf)] where+ [L NoLoc (mkCFF i rule,rule) | (i,rule) <- zip [0..] (normEBNF ebnf)] where mkCFF i (c, _) = ("Mk" ++ c ++ "_" ++ show i) normEBNF :: EBNF -> [CFJustRule]
@@ -14,13 +14,29 @@ -- AR 23\/1\/2000 -- 30\/5\/2001 -- 4\/5\/2003 ----------------------------------------------------------------------------- -module GF.Grammar.Grammar (SourceGrammar,- emptySourceGrammar,mGrammar,- SourceModInfo,- SourceModule,- mapSourceModule,+module GF.Grammar.Grammar (+ SourceGrammar, SourceModInfo(..), SourceModule, ModuleType(..),+ emptySourceGrammar, mGrammar, modules, prependModule,++ MInclude (..), OpenSpec(..),+ extends, isInherited, inheritAll,+ openedModule, depPathModule, allDepsModule, partOfGrammar,+ allExtends, allExtendSpecs, allExtendsPlus, allExtensions, + searchPathModule,+ + lookupModule,+ isModAbs, isModRes, isModCnc,+ sameMType, isCompilableModule, isCompleteModule,+ allAbstracts, greatestAbstract, allResources,+ greatestResource, allConcretes, allConcreteModules,+ abstractOfConcrete,++ ModuleStatus(..),+ + PMCFG(..), Production(..), FId, FunId, SeqId, LIndex, Sequence,+ Info(..),- L(..), unLoc,+ Location(..), L(..), unLoc, Type, Cat, Fun,@@ -47,24 +63,271 @@ import GF.Infra.Ident import GF.Infra.Option ----import GF.Infra.Modules import GF.Data.Operations +import PGF.Data (FId, FunId, SeqId, LIndex, Sequence, BindType(..))++import Data.List+import Data.Array.IArray+import Data.Array.Unboxed+import qualified Data.Map as Map+import qualified Data.Set as Set+import qualified Data.IntMap as IntMap import qualified Data.ByteString.Char8 as BS+import Text.PrettyPrint+import System.FilePath+import Control.Monad.Identity --- | grammar as presented to the compiler-type SourceGrammar = MGrammar Info -emptySourceGrammar = emptyMGrammar -type SourceModInfo = ModInfo Info+data SourceGrammar = MGrammar { + moduleMap :: Map.Map Ident SourceModInfo,+ modules :: [(Ident,SourceModInfo)]+ } +data SourceModInfo = ModInfo {+ mtype :: ModuleType,+ mstatus :: ModuleStatus,+ mflags :: Options,+ mextend :: [(Ident,MInclude)],+ mwith :: Maybe (Ident,MInclude,[(Ident,Ident)]),+ mopens :: [OpenSpec],+ mexdeps :: [Ident],+ msrc :: FilePath,+ mseqs :: Maybe (Array SeqId Sequence),+ jments :: Map.Map Ident Info+ }+ type SourceModule = (Ident, SourceModInfo) -mapSourceModule :: (SourceModInfo -> SourceModInfo) -> (SourceModule -> SourceModule)-mapSourceModule f (i,mi) = (i, f mi)+-- | encoding the type of the module+data ModuleType = + MTAbstract + | MTResource+ | MTConcrete Ident+ | MTInterface+ | MTInstance (Ident,MInclude)+ deriving (Eq,Show) +data MInclude = MIAll | MIOnly [Ident] | MIExcept [Ident]+ deriving (Eq,Show)++extends :: SourceModInfo -> [Ident]+extends = map fst . mextend++isInherited :: MInclude -> Ident -> Bool+isInherited c i = case c of+ MIAll -> True+ MIOnly is -> elem i is+ MIExcept is -> notElem i is++inheritAll :: Ident -> (Ident,MInclude)+inheritAll i = (i,MIAll)++data OpenSpec = + OSimple Ident+ | OQualif Ident Ident+ deriving (Eq,Show)++data ModuleStatus = + MSComplete + | MSIncomplete + deriving (Eq,Ord,Show)++openedModule :: OpenSpec -> Ident+openedModule o = case o of+ OSimple m -> m+ OQualif _ m -> m++-- | initial dependency list+depPathModule :: SourceModInfo -> [OpenSpec]+depPathModule m = fors m ++ exts m ++ mopens m+ where+ fors m = + case mtype m of+ MTConcrete i -> [OSimple i]+ MTInstance (i,_) -> [OSimple i]+ _ -> []+ exts m = map OSimple (extends m)++-- | all dependencies+allDepsModule :: SourceGrammar -> SourceModInfo -> [OpenSpec]+allDepsModule gr m = iterFix add os0 where+ os0 = depPathModule m+ add os = [m | o <- os, Just n <- [lookup (openedModule o) mods], + m <- depPathModule n]+ mods = modules gr++-- | select just those modules that a given one depends on, including itself+partOfGrammar :: SourceGrammar -> (Ident,SourceModInfo) -> SourceGrammar+partOfGrammar gr (i,m) = mGrammar [mo | mo@(j,_) <- mods, elem j modsFor]+ where+ mods = modules gr+ modsFor = (i:) $ map openedModule $ allDepsModule gr m++-- | all modules that a module extends, directly or indirectly, without restricts+allExtends :: SourceGrammar -> Ident -> [Ident]+allExtends gr i =+ case lookupModule gr i of+ Ok m -> case extends m of + [] -> [i]+ is -> i : concatMap (allExtends gr) is+ _ -> []++-- | all modules that a module extends, directly or indirectly, with restricts+allExtendSpecs :: SourceGrammar -> Ident -> [(Ident,MInclude)]+allExtendSpecs gr i =+ case lookupModule gr i of+ Ok m -> case mextend m of + [] -> [(i,MIAll)]+ is -> (i,MIAll) : concatMap (allExtendSpecs gr . fst) is+ _ -> []++-- | this plus that an instance extends its interface+allExtendsPlus :: SourceGrammar -> Ident -> [Ident]+allExtendsPlus gr i =+ case lookupModule gr i of+ Ok m -> i : concatMap (allExtendsPlus gr) (exts m)+ _ -> []+ where+ exts m = extends m ++ [j | MTInstance (j,_) <- [mtype m]]++-- | conversely: all modules that extend a given module, incl. instances of interface+allExtensions :: SourceGrammar -> Ident -> [Ident]+allExtensions gr i =+ case lookupModule gr i of+ Ok m -> let es = exts i in es ++ concatMap (allExtensions gr) es+ _ -> []+ where+ exts i = [j | (j,m) <- mods, elem i (extends m) || isInstanceOf i m]+ mods = modules gr+ isInstanceOf i m = case mtype m of+ MTInstance (j,_) -> j == i+ _ -> False++-- | initial search path: the nonqualified dependencies+searchPathModule :: SourceModInfo -> [Ident]+searchPathModule m = [i | OSimple i <- depPathModule m]++prependModule (MGrammar mm ms) im@(i,m) = MGrammar (Map.insert i m mm) (im:ms)++emptySourceGrammar :: SourceGrammar+emptySourceGrammar = mGrammar []++mGrammar ms = MGrammar (Map.fromList ms) ms+++-- | we store the module type with the identifier++abstractOfConcrete :: SourceGrammar -> Ident -> Err Ident+abstractOfConcrete gr c = do+ n <- lookupModule gr c+ case mtype n of+ MTConcrete a -> return a+ _ -> Bad $ render (text "expected concrete" <+> ppIdent c)++lookupModule :: SourceGrammar -> Ident -> Err SourceModInfo+lookupModule gr m = case Map.lookup m (moduleMap gr) of+ Just i -> return i+ Nothing -> Bad $ render (text "unknown module" <+> ppIdent m <+> text "among" <+> hsep (map (ppIdent . fst) (modules gr)))++isModAbs :: SourceModInfo -> Bool+isModAbs m =+ case mtype m of+ MTAbstract -> True+ _ -> False++isModRes :: SourceModInfo -> Bool+isModRes m =+ case mtype m of+ MTResource -> True+ MTInterface -> True ---+ MTInstance _ -> True+ _ -> False++isModCnc :: SourceModInfo -> Bool+isModCnc m =+ case mtype m of+ MTConcrete _ -> True+ _ -> False++sameMType :: ModuleType -> ModuleType -> Bool+sameMType m n =+ case (n,m) of+ (MTConcrete _, MTConcrete _) -> True++ (MTInstance _, MTInstance _) -> True+ (MTInstance _, MTResource) -> True+ (MTInstance _, MTConcrete _) -> True++ (MTInterface, MTInstance _) -> True+ (MTInterface, MTResource) -> True -- for reuse+ (MTInterface, MTAbstract) -> True -- for reuse+ (MTInterface, MTConcrete _) -> True -- for reuse++ (MTResource, MTInstance _) -> True+ (MTResource, MTConcrete _) -> True -- for reuse++ _ -> m == n++-- | don't generate code for interfaces and for incomplete modules+isCompilableModule :: SourceModInfo -> Bool+isCompilableModule m =+ case mtype m of+ MTInterface -> False+ _ -> mstatus m == MSComplete++-- | interface and "incomplete M" are not complete+isCompleteModule :: SourceModInfo -> Bool+isCompleteModule m = mstatus m == MSComplete && mtype m /= MTInterface+++-- | all abstract modules sorted from least to most dependent+allAbstracts :: SourceGrammar -> [Ident]+allAbstracts gr = + case topoTest [(i,extends m) | (i,m) <- modules gr, mtype m == MTAbstract] of+ Left is -> is+ Right cycles -> error $ render (text "Cyclic abstract modules:" <+> vcat (map (hsep . map ppIdent) cycles))++-- | the last abstract in dependency order (head of list)+greatestAbstract :: SourceGrammar -> Maybe Ident+greatestAbstract gr =+ case allAbstracts gr of+ [] -> Nothing+ as -> return $ last as++-- | all resource modules+allResources :: SourceGrammar -> [Ident]+allResources gr = [i | (i,m) <- modules gr, isModRes m || isModCnc m]++-- | the greatest resource in dependency order+greatestResource :: SourceGrammar -> Maybe Ident+greatestResource gr =+ case allResources gr of+ [] -> Nothing+ a -> return $ head a ---- why not last as in Abstract? works though AR 24/5/2008++-- | all concretes for a given abstract+allConcretes :: SourceGrammar -> Ident -> [Ident]+allConcretes gr a =+ [i | (i, m) <- modules gr, mtype m == MTConcrete a, isCompleteModule m]++-- | all concrete modules for any abstract+allConcreteModules :: SourceGrammar -> [Ident]+allConcreteModules gr =+ [i | (i, m) <- modules gr, MTConcrete _ <- [mtype m], isCompleteModule m]+++data Production = Production {-# UNPACK #-} !FId+ {-# UNPACK #-} !FunId+ [[FId]]+ deriving (Eq,Ord,Show)++data PMCFG = PMCFG [Production]+ (Array FunId (UArray LIndex SeqId)) + deriving (Eq,Show)+ -- | the constructors are judgements in -- -- - abstract syntax (/ABS/)@@ -80,23 +343,29 @@ | AbsFun (Maybe (L Type)) (Maybe Int) (Maybe [L Equation]) (Maybe Bool) -- ^ (/ABS/) type, arrity and definition of a function -- judgements in resource- | ResParam (Maybe [L Param]) (Maybe [Term]) -- ^ (/RES/) the second parameter is list of all possible values+ | ResParam (Maybe (L [Param])) (Maybe [Term]) -- ^ (/RES/) the second parameter is list of all possible values | ResValue (L Type) -- ^ (/RES/) to mark parameter constructors for lookup | ResOper (Maybe (L Type)) (Maybe (L Term)) -- ^ (/RES/) | ResOverload [Ident] [(L Type,L Term)] -- ^ (/RES/) idents: modules inherited -- judgements in concrete syntax- | CncCat (Maybe (L Type)) (Maybe (L Term)) (Maybe (L Term)) -- ^ (/CNC/) lindef ini'zed, - | CncFun (Maybe (Ident,Context,Type)) (Maybe (L Term)) (Maybe (L Term)) -- ^ (/CNC/) type info added at 'TC'+ | CncCat (Maybe (L Type)) (Maybe (L Term)) (Maybe (L Term)) (Maybe PMCFG) -- ^ (/CNC/) lindef ini'zed, + | CncFun (Maybe (Ident,Context,Type)) (Maybe (L Term)) (Maybe (L Term)) (Maybe PMCFG) -- ^ (/CNC/) type info added at 'TC' -- indirection to module Ident | AnyInd Bool Ident -- ^ (/INDIR/) the 'Bool' says if canonical deriving Show -data L a = L (Int,Int) a -- location information- deriving (Eq,Show)+data Location + = NoLoc+ | Local Int Int+ | External FilePath Location+ deriving (Show,Eq,Ord) +data L a = L Location a -- location information+ deriving Show+ instance Functor L where fmap f (L loc x) = L loc (f x) @@ -109,11 +378,6 @@ type QIdent = (Ident,Ident) -data BindType = - Explicit- | Implicit- deriving (Eq,Ord,Show)- data Term = Vr Ident -- ^ variable | Cn Ident -- ^ constant@@ -212,7 +476,7 @@ type Context = [Hypo] -- (x:A)(y:B) (x,y:A) (_,_:A) type Equation = ([Patt],Term) -type Labelling = (Label, Term) +type Labelling = (Label, Type) type Assign = (Label, (Maybe Type, Term)) type Case = (Patt, Term) type Cases = ([Patt], Term)
@@ -17,7 +17,6 @@ module GF.Grammar.Lookup ( lookupIdent,--- lookupIdentInfo, lookupOrigInfo, allOrigInfos, lookupResDef,@@ -34,7 +33,6 @@ import GF.Data.Operations import GF.Infra.Ident-import GF.Infra.Modules import GF.Grammar.Macros import GF.Grammar.Grammar import GF.Grammar.Printer@@ -57,10 +55,10 @@ Ok v -> return v Bad _ -> Bad ("unknown identifier" +++ showIdent c) -lookupIdentInfo :: ModInfo a -> Ident -> Err a+lookupIdentInfo :: SourceModInfo -> Ident -> Err Info lookupIdentInfo mo i = lookupIdent i (jments mo) -lookupQIdentInfo :: MGrammar info -> QIdent -> Err info+lookupQIdentInfo :: SourceGrammar -> QIdent -> Err Info lookupQIdentInfo gr (m,c) = flip lookupIdentInfo c =<< lookupModule gr m lookupResDef :: SourceGrammar -> QIdent -> Err Term@@ -73,11 +71,11 @@ case info of ResOper _ (Just (L _ t)) -> return t ResOper _ Nothing -> return (Q (m,c))- CncCat (Just (L _ ty)) _ _ -> lock c ty- CncCat _ _ _ -> lock c defLinType+ CncCat (Just (L _ ty)) _ _ _ -> lock c ty+ CncCat _ _ _ _ -> lock c defLinType - CncFun (Just (cat,_,_)) (Just (L _ tr)) _ -> unlock cat tr- CncFun _ (Just (L _ tr)) _ -> return tr+ CncFun (Just (cat,_,_)) (Just (L _ tr)) _ _ -> unlock cat tr+ CncFun _ (Just (L _ tr)) _ _ -> return tr AnyInd _ n -> look n c ResParam _ _ -> return (QC (m,c))@@ -91,8 +89,8 @@ ResOper (Just (L _ t)) _ -> return t -- used in reused concrete- CncCat _ _ _ -> return typeType- CncFun (Just (cat,cont,val)) _ _ -> do+ CncCat _ _ _ _ -> return typeType+ CncFun (Just (cat,cont,val)) _ _ _ -> do val' <- lock cat val return $ mkProd cont val' [] AnyInd _ n -> lookupResType gr (n,c)@@ -121,10 +119,10 @@ AnyInd _ n -> lookupOrigInfo gr (n,c) i -> return (m,i) -allOrigInfos :: SourceGrammar -> Ident -> [(Ident,Info)]+allOrigInfos :: SourceGrammar -> Ident -> [(QIdent,Info)] allOrigInfos gr m = errVal [] $ do mo <- lookupModule gr m- return [(c,i) | (c,_) <- tree2list (jments mo), Ok (_,i) <- [lookupOrigInfo gr (m,c)]]+ return [((m,c),i) | (c,_) <- tree2list (jments mo), Ok (m,i) <- [lookupOrigInfo gr (m,c)]] lookupParamValues :: SourceGrammar -> QIdent -> Err [Term] lookupParamValues gr c = do@@ -165,9 +163,9 @@ lookupLincat gr m c = do info <- lookupQIdentInfo gr (m,c) case info of- CncCat (Just (L _ t)) _ _ -> return t- AnyInd _ n -> lookupLincat gr n c- _ -> Bad (render (ppIdent c <+> text "has no linearization type in" <+> ppIdent m))+ CncCat (Just (L _ t)) _ _ _ -> return t+ AnyInd _ n -> lookupLincat gr n c+ _ -> Bad (render (ppIdent c <+> text "has no linearization type in" <+> ppIdent m)) -- | this is needed at compile time lookupFunType :: SourceGrammar -> Ident -> Ident -> Err Type@@ -191,7 +189,7 @@ -- this gives all opers and param constructors, also overloaded opers and funs, and the types, and locations -- notice that it only gives the modules that are reachable and the opers that are included -allOpers :: SourceGrammar -> [((Ident,Ident),Type,(Int,Int))]+allOpers :: SourceGrammar -> [((Ident,Ident),Type,Location)] allOpers gr = [((mo,op),typ,loc) | (mo,minc) <- reachable,@@ -212,7 +210,7 @@ _ -> [] --- not for dependent types-allOpersTo :: SourceGrammar -> Type -> [((Ident,Ident),Type,(Int,Int))]+allOpersTo :: SourceGrammar -> Type -> [((Ident,Ident),Type,Location)] allOpersTo gr ty = [op | op@(_,typ,_) <- allOpers gr, isProdTo ty typ] where isProdTo t typ = eqProd typ t || case typ of Prod _ _ a b -> isProdTo t b
@@ -21,7 +21,6 @@ import GF.Data.Operations import GF.Data.Str import GF.Infra.Ident-import GF.Infra.Modules import GF.Grammar.Grammar import GF.Grammar.Values import GF.Grammar.Predef@@ -70,9 +69,8 @@ typeSkeleton :: Type -> ([(Int,Cat)],Cat) typeSkeleton typ =- let (cont,cat,_) = typeForm typ- args = map (\(b,x,t) -> typeSkeleton t) cont- in ([(length c, v) | (c,v) <- args], cat)+ let (ctxt,cat,_) = typeForm typ+ in ([(length c, v) | (b,x,t) <- ctxt, let (c,v) = typeSkeleton t], cat) catSkeleton :: Type -> ([Cat],Cat) catSkeleton typ =@@ -560,9 +558,9 @@ pts i = case i of ResOper pty pt -> [pty,pt] ResOverload _ tyts -> concat [[Just ty, Just tr] | (ty,tr) <- tyts]- ResParam (Just ps) _ -> [Just (L loc t) | L loc (_,cont) <- ps, (_,_,t) <- cont]- CncCat pty _ _ -> [pty]- CncFun _ pt _ -> [pt] ---- (Maybe (Ident,(Context,Type))+ ResParam (Just (L loc ps)) _ -> [Just (L loc t) | (_,cont) <- ps, (_,_,t) <- cont]+ CncCat pty _ _ _ -> [pty]+ CncFun _ pt _ _ -> [pt] ---- (Maybe (Ident,(Context,Type)) AbsFun pty _ ptr _ -> [pty] --- ptr is def, which can be mutual AbsCat (Just (L loc co)) -> [Just (L loc ty) | (_,_,ty) <- co] _ -> []
@@ -5,11 +5,10 @@ , pModDef , pModHeader , pExp- , pTopDef+ , pTopDef ) where import GF.Infra.Ident-import GF.Infra.Modules import GF.Infra.Option import GF.Data.Operations import GF.Grammar.Predef@@ -118,14 +117,14 @@ defs <- case buildAnyTree id jments of Ok x -> return x Bad msg -> fail msg- return (id, ModInfo mtype mstat opts extends with opens [] defs) }+ return (id, ModInfo mtype mstat opts extends with opens [] "" Nothing defs) } ModHeader :: { SourceModule } ModHeader : ComplMod ModType '=' ModHeaderBody { let { mstat = $1 ; (mtype,id) = $2 ; (extends,with,opens) = $4 }- in (id, ModInfo mtype mstat noOptions extends with opens [] emptyBinTree) }+ in (id, ModInfo mtype mstat noOptions extends with opens [] "" Nothing emptyBinTree) } ComplMod :: { ModuleStatus } ComplMod @@ -220,11 +219,11 @@ | 'data' ListDataDef { Left $2 } | 'param' ListParamDef { Left $2 } | 'oper' ListOperDef { Left $2 }- | 'lincat' ListTermDef { Left [(f, CncCat (Just e) Nothing Nothing ) | (f,e) <- $2] }- | 'lindef' ListTermDef { Left [(f, CncCat Nothing (Just e) Nothing ) | (f,e) <- $2] }+ | 'lincat' ListTermDef { Left [(f, CncCat (Just e) Nothing Nothing Nothing) | (f,e) <- $2] }+ | 'lindef' ListTermDef { Left [(f, CncCat Nothing (Just e) Nothing Nothing) | (f,e) <- $2] } | 'lin' ListLinDef { Left $2 }- | 'printname' 'cat' ListTermDef { Left [(f, CncCat Nothing Nothing (Just e)) | (f,e) <- $3] }- | 'printname' 'fun' ListTermDef { Left [(f, CncFun Nothing Nothing (Just e)) | (f,e) <- $3] }+ | 'printname' 'cat' ListTermDef { Left [(f, CncCat Nothing Nothing (Just e) Nothing) | (f,e) <- $3] }+ | 'printname' 'fun' ListTermDef { Left [(f, CncFun Nothing Nothing (Just e) Nothing) | (f,e) <- $3] } | 'flags' ListFlagDef { Right $2 } CatDef :: { [(Ident,Info)] }@@ -251,9 +250,9 @@ ParamDef :: { [(Ident,Info)] } ParamDef- : Ident '=' ListParConstr { ($1, ResParam (Just $3) Nothing) :- [(f, ResValue (L loc (mkProdSimple co (Cn $1)))) | L loc (f,co) <- $3] }- | Ident { [($1, ResParam Nothing Nothing)] }+ : Posn Ident '=' ListParConstr Posn { ($2, ResParam (Just (mkL $1 $5 [param | L loc param <- $4])) Nothing) :+ [(f, ResValue (L loc (mkProdSimple co (Cn $2)))) | L loc (f,co) <- $4] }+ | Posn Ident Posn { [($2, ResParam Nothing Nothing)] } OperDef :: { [(Ident,Info)] } OperDef@@ -264,8 +263,8 @@ LinDef :: { [(Ident,Info)] } LinDef- : Posn ListName '=' Exp Posn { [(f, CncFun Nothing (Just (mkL $1 $5 $4)) Nothing) | f <- $2] }- | Posn Name ListArg '=' Exp Posn { [($2, CncFun Nothing (Just (mkL $1 $6 (mkAbs $3 $5))) Nothing)] }+ : Posn ListName '=' Exp Posn { [(f, CncFun Nothing (Just (mkL $1 $5 $4)) Nothing Nothing) | f <- $2] }+ | Posn Name ListArg '=' Exp Posn { [($2, CncFun Nothing (Just (mkL $1 $6 (mkAbs $3 $5))) Nothing Nothing)] } TermDef :: { [(Ident,L Term)] } TermDef@@ -604,7 +603,7 @@ { happyError :: P a-happyError = fail "parse error"+happyError = fail "syntax error" mkListId,mkConsId,mkBaseId :: Ident -> Ident mkListId = prefixId (BS.pack "List")@@ -675,21 +674,21 @@ checkInfoType mt jment@(id,info) = case info of- AbsCat pcont -> ifAbstract mt (locPerh pcont)- AbsFun pty _ pde _ -> ifAbstract mt (locPerh pty ++ maybe [] locAll pde)- CncCat pty pd ppn -> ifConcrete mt (locPerh pty ++ locPerh pd ++ locPerh ppn)- CncFun _ pd ppn -> ifConcrete mt (locPerh pd ++ locPerh ppn)- ResParam pparam _ -> ifResource mt (maybe [] locAll pparam)- ResValue ty -> ifResource mt (locL ty)- ResOper pty pt -> ifOper mt pty pt- ResOverload _ xs -> ifResource mt (concat [[loc1,loc2] | (L loc1 _,L loc2 _) <- xs])+ AbsCat pcont -> ifAbstract mt (locPerh pcont)+ AbsFun pty _ pde _ -> ifAbstract mt (locPerh pty ++ maybe [] locAll pde)+ CncCat pty pd ppn _ -> ifConcrete mt (locPerh pty ++ locPerh pd ++ locPerh ppn)+ CncFun _ pd ppn _ -> ifConcrete mt (locPerh pd ++ locPerh ppn)+ ResParam pparam _ -> ifResource mt (locPerh pparam)+ ResValue ty -> ifResource mt (locL ty)+ ResOper pty pt -> ifOper mt pty pt+ ResOverload _ xs -> ifResource mt (concat [[loc1,loc2] | (L loc1 _,L loc2 _) <- xs]) where locPerh = maybe [] locL locAll xs = [loc | L loc x <- xs] locL (L loc x) = [loc] - illegal ((s,e):_) = failLoc (Pn s 0) "illegal definition"- illegal _ = return jment+ illegal (Local s e:_) = failLoc (Pn s 0) "illegal definition"+ illegal _ = return jment ifAbstract MTAbstract locs = return jment ifAbstract _ locs = illegal locs@@ -729,6 +728,6 @@ _ -> fail "no strs from pattern" mkL :: Posn -> Posn -> x -> L x-mkL (Pn l1 _) (Pn l2 _) x = L (l1,l2) x+mkL (Pn l1 _) (Pn l2 _) x = L (Local l1 l2) x }
@@ -33,6 +33,7 @@ , cOccurs, cEqInt, cLessInt, cPlus, cShow, cRead , cToStr, cMapStr, cError , cToUpper, cToLower, cIsUpper+ , cEqVal -- hacks , cMeta, cAs, cChar, cChars, cSeq, cAlt, cRep@@ -128,6 +129,9 @@ cEqStr :: Ident cEqStr = identC (BS.pack "eqStr")++cEqVal :: Ident+cEqVal = identC (BS.pack "eqVal") cOccur :: Ident cOccur = identC (BS.pack "occur")
@@ -13,36 +13,48 @@ , ppGrammar , ppModule , ppJudgement + , ppParams , ppTerm , ppPatt , ppValue , ppConstrs - , ppPosition + , ppLocation , ppQIdent + , ppMeta + , getAbs ) where import GF.Infra.Ident -import GF.Infra.Modules import GF.Infra.Option import GF.Grammar.Values import GF.Grammar.Grammar +import PGF.Expr (ppMeta) +import PGF.Printer (ppFId, ppFunId, ppSeqId, ppSeq) + import Text.PrettyPrint import Data.Maybe (maybe, isNothing) import Data.List (intersperse) import qualified Data.Map as Map +import qualified Data.IntMap as IntMap +import qualified Data.Set as Set +import qualified Data.Array.IArray as Array -data TermPrintQual = Qualified | Unqualified +data TermPrintQual + = Unqualified | Qualified | Internal + deriving Eq ppGrammar :: SourceGrammar -> Doc ppGrammar sgr = vcat $ map (ppModule Qualified) $ modules sgr ppModule :: TermPrintQual -> SourceModule -> Doc -ppModule q (mn, ModInfo mtype mstat opts exts with opens _ jments) = - hdr $$ nest 2 (ppOptions opts $$ vcat (map (ppJudgement q) defs)) $$ ftr +ppModule q (mn, ModInfo mtype mstat opts exts with opens _ _ mseqs jments) = + hdr $$ + nest 2 (ppOptions opts $$ + vcat (map (ppJudgement q) (Map.toList jments)) $$ + maybe empty (ppSequences q) mseqs) $$ + ftr where - defs = Map.toList jments - hdr = complModDoc <+> modTypeDoc <+> equals <+> hsep (intersperse (text "**") $ filter (not . isEmpty) $ [ commaPunct ppExtends exts @@ -97,8 +109,8 @@ ppJudgement q (id, ResParam pparams _) = text "param" <+> ppIdent id <+> (case pparams of - Just ps -> equals <+> fsep (intersperse (char '|') (map (ppParam q) ps)) - _ -> empty) <+> semi + Just (L _ ps) -> equals <+> ppParams q ps + _ -> empty) <+> semi ppJudgement q (id, ResValue pvalue) = empty ppJudgement q (id, ResOper ptype pexp) = text "oper" <+> ppIdent id <+> @@ -109,7 +121,7 @@ (text "overload" <+> lbrace $$ nest 2 (vcat [ppIdent id <+> (colon <+> ppTerm q 0 ty $$ equals <+> ppTerm q 0 e <+> semi) | (L _ ty,L _ e) <- defs]) $$ rbrace) <+> semi -ppJudgement q (id, CncCat ptype pexp pprn) = +ppJudgement q (id, CncCat ptype pexp pprn mpmcfg) = (case ptype of Just (L _ typ) -> text "lincat" <+> ppIdent id <+> equals <+> ppTerm q 0 typ <+> semi Nothing -> empty) $$ @@ -117,17 +129,40 @@ Just (L _ exp) -> text "lindef" <+> ppIdent id <+> equals <+> ppTerm q 0 exp <+> semi Nothing -> empty) $$ (case pprn of - Just (L _ prn) -> text "printname" <+> text "cat" <+> ppIdent id <+> equals <+> ppTerm q 0 prn <+> semi - Nothing -> empty) -ppJudgement q (id, CncFun ptype pdef pprn) = + Just (L _ prn) -> text "printname" <+> ppIdent id <+> equals <+> ppTerm q 0 prn <+> semi + Nothing -> empty) $$ + (case (mpmcfg,q) of + (Just (PMCFG prods funs),Internal) + -> text "pmcfg" <+> ppIdent id <+> equals <+> char '{' $$ + nest 2 (vcat (map ppProduction prods) $$ + space $$ + vcat (map (\(funid,arr) -> ppFunId funid <+> text ":=" <+> + parens (hcat (punctuate comma (map ppSeqId (Array.elems arr))))) + (Array.assocs funs))) $$ + char '}' + _ -> empty) +ppJudgement q (id, CncFun ptype pdef pprn mpmcfg) = (case pdef of Just (L _ e) -> let (xs,e') = getAbs e in text "lin" <+> ppIdent id <+> hsep (map ppBind xs) <+> equals <+> ppTerm q 0 e' <+> semi Nothing -> empty) $$ (case pprn of - Just (L _ prn) -> text "printname" <+> text "fun" <+> ppIdent id <+> equals <+> ppTerm q 0 prn <+> semi - Nothing -> empty) -ppJudgement q (id, AnyInd cann mid) = text "-- ind" <+> ppIdent id <+> equals <+> (if cann then text "canonical" else empty) <+> ppIdent mid <+> semi + Just (L _ prn) -> text "printname" <+> ppIdent id <+> equals <+> ppTerm q 0 prn <+> semi + Nothing -> empty) $$ + (case (mpmcfg,q) of + (Just (PMCFG prods funs),Internal) + -> text "pmcfg" <+> ppIdent id <+> equals <+> char '{' $$ + nest 2 (vcat (map ppProduction prods) $$ + space $$ + vcat (map (\(funid,arr) -> ppFunId funid <+> text ":=" <+> + parens (hcat (punctuate comma (map ppSeqId (Array.elems arr))))) + (Array.assocs funs))) $$ + char '}' + _ -> empty) +ppJudgement q (id, AnyInd cann mid) = + case q of + Internal -> text "ind" <+> ppIdent id <+> equals <+> (if cann then text "canonical" else empty) <+> ppIdent mid <+> semi + _ -> empty ppTerm q d (Abs b v e) = let (xs,e') = getAbs (Abs b v e) in prec d 0 (char '\\' <> commaPunct ppBind xs <+> text "->" <+> ppTerm q 0 e') @@ -181,7 +216,7 @@ ppTerm q d (K s) = str s ppTerm q d (EInt n) = int n ppTerm q d (EFloat f) = double f -ppTerm q d (Meta _) = char '?' +ppTerm q d (Meta i) = ppMeta i ppTerm q d (Empty) = text "[]" ppTerm q d (R []) = text "<>" -- to distinguish from {} empty RecType ppTerm q d (R xs) = braces (fsep (punctuate semi [ppLabel l <+> @@ -250,8 +285,10 @@ ppQIdent q (m,id) = case q of - Qualified -> ppIdent m <> char '.' <> ppIdent id Unqualified -> ppIdent id + Qualified -> ppIdent m <> char '.' <> ppIdent id + Internal -> ppIdent m <> char '.' <> ppIdent id + ppLabel = ppIdent . label2ident @@ -269,13 +306,28 @@ ppAltern q (x,y) = ppTerm q 0 x <+> char '/' <+> ppTerm q 0 y -ppParam q (L _ (id,cxt)) = ppIdent id <+> hsep (map (ppDDecl q) cxt) +ppParams q ps = fsep (intersperse (char '|') (map (ppParam q) ps)) +ppParam q (id,cxt) = ppIdent id <+> hsep (map (ppDDecl q) cxt) -ppPosition :: Ident -> (Int,Int) -> Doc -ppPosition m (b,e) - | b == e = text "in" <+> ppIdent m <> text ".gf, line" <+> int b - | otherwise = text "in" <+> ppIdent m <> text ".gf, lines" <+> int b <> text "-" <> int e +ppLocation :: FilePath -> Location -> Doc +ppLocation fpath NoLoc = text fpath +ppLocation fpath (External p l) = ppLocation p l +ppLocation fpath (Local b e) + | b == e = text fpath <> colon <> int b + | otherwise = text fpath <> colon <> int b <> text "-" <> int e +ppProduction (Production fid funid args) = + ppFId fid <+> text "->" <+> ppFunId funid <> + brackets (hcat (punctuate comma (map (hsep . intersperse (char '|') . map ppFId) args))) + +ppSequences q seqsArr + | null seqs || q /= Internal = empty + | otherwise = text "sequences" <+> char '{' $$ + nest 2 (vcat (map ppSeq seqs)) $$ + char '}' + where + seqs = Array.assocs seqsArr + commaPunct f ds = (hcat (punctuate comma (map f ds))) prec d1 d2 doc @@ -298,3 +350,4 @@ getLet (Let l e) = let (ls,e') = getLet e in (l:ls,e') getLet e = ([],e) +
@@ -13,6 +13,3 @@ #ifdef SERVER_MODE ++" server" #endif-#ifdef CC_LAZY- ++ " cclazy"-#endif
@@ -13,7 +13,7 @@ ----------------------------------------------------------------------------- module GF.Infra.CheckM- (Check, Message, runCheck,+ (Check(..), CheckResult(..), Message, runCheck, checkError, checkCond, checkWarn, checkErr, checkIn, checkMap ) where
@@ -3,7 +3,6 @@ ) where import GF.Grammar.Grammar-import GF.Infra.Modules import GF.Infra.Ident import Data.List (nub,isPrefixOf)@@ -60,8 +59,8 @@ MTConcrete i -> [i | yes i] MTInstance (i,_) -> [i | yes i] _ -> [],- extendeds = nub $ filter yes $ map fst (extend m),- openeds = nub $ filter yes $ map openedModule (opens m),+ extendeds = nub $ filter yes $ map fst (mextend m),+ openeds = nub $ filter yes $ map openedModule (mopens m), extrads = nub $ filter yes $ mexdeps m } yes i = case monly of
@@ -1,344 +0,0 @@-------------------------------------------------------------------------- |--- Module : Modules--- Maintainer : AR--- Stability : (stable)--- Portability : (portable)------ > CVS $Date: 2005/11/09 15:14:30 $ --- > CVS $Author: aarne $--- > CVS $Revision: 1.26 $------ Datastructures and functions for modules, common to GF and GFC.------ AR 29\/4\/2003------ The same structure will be used in both source code and canonical.--- The parameters tell what kind of data is involved.--------------------------------------------------------------------------------module GF.Infra.Modules (- MGrammar, ModInfo(..), ModuleType(..),- MInclude (..),- mGrammar,modules,prependModule,- extends, isInherited,inheritAll, - updateModule, replaceJudgements, addFlag,- addOpenQualif, flagsModule, allFlags,- OpenSpec(..),- ModuleStatus(..),- openedModule, depPathModule, allDepsModule, partOfGrammar,- allExtends, allExtendSpecs, allExtendsPlus, allExtensions, - searchPathModule,- -- addModule, mapModules, updateMGrammar, - emptyMGrammar, emptyModInfo,- abstractOfConcrete, abstractModOfConcrete,- lookupModule, lookupModuleType, lookupInfo,- isModAbs, isModRes, isModCnc,- sameMType, isCompilableModule, isCompleteModule,- allAbstracts, greatestAbstract, allResources,- greatestResource, allConcretes, allConcreteModules- ) where--import GF.Infra.Ident-import GF.Infra.Option-import GF.Data.Operations--import Data.List-import qualified Data.Map as Map-import Text.PrettyPrint---- AR 29/4/2003---- The same structure will be used in both source code and canonical.--- The parameters tell what kind of data is involved.--- Invariant: modules are stored in dependency order----mGrammar = MGrammar---newtype MGrammar a = MGrammar {modules :: [(Ident,ModInfo a)]}--data MGrammar a = MGrammar { moduleMap :: Map.Map Ident (ModInfo a),- modules :: [(Ident,ModInfo a)] }- deriving Show-mGrammar ms = MGrammar (Map.fromList ms) ms--data ModInfo a = ModInfo {- mtype :: ModuleType,- mstatus :: ModuleStatus,- flags :: Options,- extend :: [(Ident,MInclude)],- mwith :: Maybe (Ident,MInclude,[(Ident,Ident)]),- opens :: [OpenSpec],- mexdeps :: [Ident],- jments :: Map.Map Ident a- }- deriving Show---- | encoding the type of the module-data ModuleType = - MTAbstract - | MTResource- | MTConcrete Ident- -- ^ up to this, also used in GFO. Below, source only.- | MTInterface- | MTInstance (Ident,MInclude)- deriving (Eq,Show)--data MInclude = MIAll | MIOnly [Ident] | MIExcept [Ident]- deriving (Eq,Show)--extends :: ModInfo a -> [Ident]-extends = map fst . extend--isInherited :: MInclude -> Ident -> Bool-isInherited c i = case c of- MIAll -> True- MIOnly is -> elem i is- MIExcept is -> notElem i is--inheritAll :: Ident -> (Ident,MInclude)-inheritAll i = (i,MIAll)---- destructive update-{---- | dep order preserved since old cannot depend on new-updateMGrammar :: MGrammar a -> MGrammar a -> MGrammar a-updateMGrammar (MGrammar omap os) (MGrammar nmap ns) =- MGrammar (Map.union nmap omap) -- Map.union is left-biased- ([im | im@(i,m) <- os, i `notElem` nis] ++ ns)- where- nis = map fst ns--}-updateModule :: ModInfo t -> Ident -> t -> ModInfo t-updateModule (ModInfo mt ms fs me mw ops med js) i t = ModInfo mt ms fs me mw ops med (updateTree (i,t) js)--replaceJudgements :: ModInfo t -> Map.Map Ident t -> ModInfo t-replaceJudgements (ModInfo mt ms fs me mw ops med _) js = ModInfo mt ms fs me mw ops med js--addOpenQualif :: Ident -> Ident -> ModInfo t -> ModInfo t-addOpenQualif i j (ModInfo mt ms fs me mw ops med js) = ModInfo mt ms fs me mw (OQualif i j : ops) med js--addFlag :: Options -> ModInfo t -> ModInfo t-addFlag f mo = mo {flags = flags mo `addOptions` f} --flagsModule :: (Ident,ModInfo a) -> Options-flagsModule (_,mi) = flags mi--allFlags :: MGrammar a -> Options-allFlags gr = concatOptions [flags m | (_,m) <- modules gr]-{--mapModules :: (ModInfo a -> ModInfo a) -> MGrammar a -> MGrammar a -mapModules f = mGrammar . map (onSnd f) . modules--}-data OpenSpec = - OSimple Ident- | OQualif Ident Ident- deriving (Eq,Show)--data ModuleStatus = - MSComplete - | MSIncomplete - deriving (Eq,Ord,Show)--openedModule :: OpenSpec -> Ident-openedModule o = case o of- OSimple m -> m- OQualif _ m -> m---- | initial dependency list-depPathModule :: ModInfo a -> [OpenSpec]-depPathModule m = fors m ++ exts m ++ opens m- where- fors m = - case mtype m of- MTConcrete i -> [OSimple i]- MTInstance (i,_) -> [OSimple i]- _ -> []- exts m = map OSimple (extends m)---- | all dependencies-allDepsModule :: MGrammar a -> ModInfo a -> [OpenSpec]-allDepsModule gr m = iterFix add os0 where- os0 = depPathModule m- add os = [m | o <- os, Just n <- [lookup (openedModule o) mods], - m <- depPathModule n]- mods = modules gr---- | select just those modules that a given one depends on, including itself-partOfGrammar :: MGrammar a -> (Ident,ModInfo a) -> MGrammar a-partOfGrammar gr (i,m) = mGrammar [mo | mo@(j,_) <- mods, elem j modsFor]- where- mods = modules gr- modsFor = (i:) $ map openedModule $ allDepsModule gr m---- | all modules that a module extends, directly or indirectly, without restricts-allExtends :: MGrammar a -> Ident -> [Ident]-allExtends gr i =- case lookupModule gr i of- Ok m -> case extends m of - [] -> [i]- is -> i : concatMap (allExtends gr) is- _ -> []---- | all modules that a module extends, directly or indirectly, with restricts-allExtendSpecs :: MGrammar a -> Ident -> [(Ident,MInclude)]-allExtendSpecs gr i =- case lookupModule gr i of- Ok m -> case extend m of - [] -> [(i,MIAll)]- is -> (i,MIAll) : concatMap (allExtendSpecs gr . fst) is- _ -> []---- | this plus that an instance extends its interface-allExtendsPlus :: MGrammar a -> Ident -> [Ident]-allExtendsPlus gr i =- case lookupModule gr i of- Ok m -> i : concatMap (allExtendsPlus gr) (exts m)- _ -> []- where- exts m = extends m ++ [j | MTInstance (j,_) <- [mtype m]]---- | conversely: all modules that extend a given module, incl. instances of interface-allExtensions :: MGrammar a -> Ident -> [Ident]-allExtensions gr i =- case lookupModule gr i of- Ok m -> let es = exts i in es ++ concatMap (allExtensions gr) es- _ -> []- where- exts i = [j | (j,m) <- mods, elem i (extends m) || isInstanceOf i m]- mods = modules gr- isInstanceOf i m = case mtype m of- MTInstance (j,_) -> j == i- _ -> False---- | initial search path: the nonqualified dependencies-searchPathModule :: ModInfo a -> [Ident]-searchPathModule m = [i | OSimple i <- depPathModule m]--{---- | a new module can safely be added to the end, since nothing old can depend on it-addModule :: MGrammar a -> Ident -> ModInfo a -> MGrammar a---addModule gr name mi = MGrammar $ (modules gr ++ [(name,mi)])-addModule gr name mi = MGrammar $ Map.insert name mi (moduleMap gr)--}--prependModule (MGrammar mm ms) im@(i,m) = MGrammar (Map.insert i m mm) (im:ms)--emptyMGrammar :: MGrammar a-emptyMGrammar = mGrammar []--emptyModInfo :: ModInfo a-emptyModInfo = ModInfo MTResource MSComplete noOptions [] Nothing [] [] emptyBinTree---- | we store the module type with the identifier--abstractOfConcrete :: MGrammar a -> Ident -> Err Ident-abstractOfConcrete gr c = do- n <- lookupModule gr c- case mtype n of- MTConcrete a -> return a- _ -> Bad $ render (text "expected concrete" <+> ppIdent c)--abstractModOfConcrete :: MGrammar a -> Ident -> Err (ModInfo a)-abstractModOfConcrete gr c = lookupModule gr =<< abstractOfConcrete gr c---- the canonical file name----- canonFileName s = prt s ++ ".gfc"--lookupModule :: MGrammar a -> Ident -> Err (ModInfo a)---lookupModule gr m = case lookup m (modules gr) of-lookupModule gr m = case Map.lookup m (moduleMap gr) of- Just i -> return i- Nothing -> Bad $ render (text "unknown module" <+> ppIdent m <+> text "among" <+> hsep (map (ppIdent . fst) (modules gr)))--lookupModuleType :: MGrammar a -> Ident -> Err ModuleType-lookupModuleType gr m = mtype `fmap` lookupModule gr m--lookupInfo :: ModInfo a -> Ident -> Err a-lookupInfo mo i = lookupTree showIdent i (jments mo)--isModAbs :: ModInfo a -> Bool-isModAbs m =- case mtype m of- MTAbstract -> True- _ -> False--isModRes :: ModInfo a -> Bool-isModRes m =- case mtype m of- MTResource -> True- MTInterface -> True ---- MTInstance _ -> True- _ -> False--isModCnc :: ModInfo a -> Bool-isModCnc m =- case mtype m of- MTConcrete _ -> True- _ -> False--sameMType :: ModuleType -> ModuleType -> Bool-sameMType m n =- case (n,m) of- (MTConcrete _, MTConcrete _) -> True-- (MTInstance _, MTInstance _) -> True- (MTInstance _, MTResource) -> True- (MTInstance _, MTConcrete _) -> True-- (MTInterface, MTInstance _) -> True- (MTInterface, MTResource) -> True -- for reuse- (MTInterface, MTAbstract) -> True -- for reuse- (MTInterface, MTConcrete _) -> True -- for reuse-- (MTResource, MTInstance _) -> True- (MTResource, MTConcrete _) -> True -- for reuse-- _ -> m == n---- | don't generate code for interfaces and for incomplete modules-isCompilableModule :: ModInfo a -> Bool-isCompilableModule m =- case mtype m of- MTInterface -> False- _ -> mstatus m == MSComplete---- | interface and "incomplete M" are not complete-isCompleteModule :: ModInfo a -> Bool-isCompleteModule m = mstatus m == MSComplete && mtype m /= MTInterface----- | all abstract modules sorted from least to most dependent-allAbstracts :: MGrammar a -> [Ident]-allAbstracts gr = - case topoTest [(i,extends m) | (i,m) <- modules gr, mtype m == MTAbstract] of- Left is -> is- Right cycles -> error $ render (text "Cyclic abstract modules:" <+> vcat (map (hsep . map ppIdent) cycles))---- | the last abstract in dependency order (head of list)-greatestAbstract :: MGrammar a -> Maybe Ident-greatestAbstract gr =- case allAbstracts gr of- [] -> Nothing- as -> return $ last as---- | all resource modules-allResources :: MGrammar a -> [Ident]-allResources gr = [i | (i,m) <- modules gr, isModRes m || isModCnc m]---- | the greatest resource in dependency order-greatestResource :: MGrammar a -> Maybe Ident-greatestResource gr =- case allResources gr of- [] -> Nothing- a -> return $ head a ---- why not last as in Abstract? works though AR 24/5/2008---- | all concretes for a given abstract-allConcretes :: MGrammar a -> Ident -> [Ident]-allConcretes gr a =- [i | (i, m) <- modules gr, mtype m == MTConcrete a, isCompleteModule m]---- | all concrete modules for any abstract-allConcreteModules :: MGrammar a -> [Ident]-allConcreteModules gr =- [i | (i, m) <- modules gr, MTConcrete _ <- [mtype m], isCompleteModule m]
@@ -6,7 +6,7 @@ Mode(..), Phase(..), Verbosity(..), OutputFormat(..), SISRFormat(..), Optimization(..), CFGTransform(..), HaskellOption(..),- Dump(..), Printer(..), Recomp(..),+ Dump(..), Recomp(..), outputFormatsExpl, -- * Option parsing parseOptions, parseModuleOptions, fixRelativeLibPaths,@@ -74,7 +74,7 @@ -- Types data Mode = ModeVersion | ModeHelp | ModeInteractive | ModeRun | ModeCompiler- | ModeServer+ | ModeServer Int{-port-} deriving (Show,Eq,Ord) data Verbosity = Quiet | Normal | Verbose | Debug@@ -133,10 +133,6 @@ data Dump = DumpSource | DumpRebuild | DumpExtend | DumpRename | DumpTypeCheck | DumpRefresh | DumpOptimize | DumpCanon deriving (Show,Eq,Ord) --- | Pretty-printing options-data Printer = PrinterStrip -- ^ Remove name qualifiers.- deriving (Show,Eq,Ord)- data Recomp = AlwaysRecomp | RecompIfNewer | NeverRecomp deriving (Show,Eq,Ord) @@ -144,31 +140,25 @@ optMode :: Mode, optStopAfterPhase :: Phase, optVerbosity :: Verbosity,- optProf :: Bool, optShowCPUTime :: Bool,- optEmitGFO :: Bool, optOutputFormats :: [OutputFormat], optSISR :: Maybe SISRFormat, optHaskellOptions :: Set HaskellOption, optLexicalCats :: Set String, optLiteralCats :: Set Ident, optGFODir :: Maybe FilePath,- optOutputFile :: Maybe FilePath, optOutputDir :: Maybe FilePath, optGFLibPath :: Maybe FilePath, optRecomp :: Recomp,- optPrinter :: [Printer], optProbsFile :: Maybe FilePath, optRetainResource :: Bool, optName :: Maybe String,- optAbsName :: Maybe String,- optCncName :: Maybe String,- optResName :: Maybe String, optPreprocessors :: [String], optEncoding :: String,+ optPMCFG :: Bool, optOptimizations :: Set Optimization, optOptimizePGF :: Bool,- optMkIndexPGF :: Bool,+ optMkIndexPGF :: Bool, optCFGTransforms :: Set CFGTransform, optLibraryPath :: [FilePath], optStartCat :: Maybe String,@@ -176,7 +166,9 @@ optLexer :: Maybe String, optUnlexer :: Maybe String, optWarnings :: [Warning],- optDump :: [Dump]+ optDump :: [Dump],+ optTagsOnly :: Bool,+ optNewComp :: Bool } deriving (Show) @@ -245,29 +237,23 @@ optMode = ModeInteractive, optStopAfterPhase = Compile, optVerbosity = Normal,- optProf = False, optShowCPUTime = False,- optEmitGFO = True, optOutputFormats = [], optSISR = Nothing, optHaskellOptions = Set.empty, optLiteralCats = Set.fromList [cString,cInt,cFloat,cVar], optLexicalCats = Set.empty, optGFODir = Nothing,- optOutputFile = Nothing, optOutputDir = Nothing, optGFLibPath = Nothing, optRecomp = RecompIfNewer,- optPrinter = [], optProbsFile = Nothing, optRetainResource = False, optName = Nothing,- optAbsName = Nothing,- optCncName = Nothing,- optResName = Nothing, optPreprocessors = [], optEncoding = "latin1",+ optPMCFG = True, -- #ifdef CC_LAZY -- optOptimizations = Set.fromList [OptStem,OptCSE], -- #else@@ -283,7 +269,9 @@ optLexer = Nothing, optUnlexer = Nothing, optWarnings = [],- optDump = []+ optDump = [],+ optTagsOnly = False,+ optNewComp = False } -- Option descriptions@@ -298,16 +286,15 @@ Option [] ["batch"] (NoArg (mode ModeCompiler)) "Run in batch compiler mode.", Option [] ["interactive"] (NoArg (mode ModeInteractive)) "Run in interactive mode (default).", Option [] ["run"] (NoArg (mode ModeRun)) "Run in interactive mode, showing output only (no other messages).",- Option [] ["server"] (NoArg (mode ModeServer)) "Run in HTTP server mode.",+ Option [] ["server"] (OptArg modeServer "port") $+ "Run in HTTP server mode on given port (default "++show defaultPort++").",+ Option [] ["tags"] (NoArg (set $ \o -> o{optMode = ModeCompiler, optTagsOnly = True})) "Build TAGS file and exit.", Option ['E'] [] (NoArg (phase Preproc)) "Stop after preprocessing (with --preproc).", Option ['C'] [] (NoArg (phase Convert)) "Stop after conversion to .gf.", Option ['c'] [] (NoArg (phase Compile)) "Stop after compiling to .gfo (default) .", Option [] ["make"] (NoArg (liftM2 addOptions (mode ModeCompiler) (phase Link))) "Build .pgf file and other output files and exit.",- Option [] ["prof"] (NoArg (prof True)) "Dump profiling information when compiling to PMCFG", Option [] ["cpu"] (NoArg (cpu True)) "Show compilation CPU time statistics.", Option [] ["no-cpu"] (NoArg (cpu False)) "Don't show compilation CPU time statistics (default).",- Option [] ["emit-gfo"] (NoArg (emitGFO True)) "Create .gfo files (default).",- Option [] ["no-emit-gfo"] (NoArg (emitGFO False)) "Do not create .gfo files.", Option [] ["gfo-dir"] (ReqArg gfoDir "DIR") "Directory to put .gfo files in (default = '.').", Option ['f'] ["output-format"] (ReqArg outFmt "FMT") (unlines ["Output format. FMT can be one of:",@@ -324,8 +311,6 @@ "Treat CAT as a lexical category.", Option [] ["literal"] (ReqArg literalCat "CAT[,CAT[...]]") "Treat CAT as a literal category.",- Option ['o'] ["output-file"] (ReqArg outFile "FILE") - "Save output in FILE (default is out.X, where X depends on output format.", Option ['D'] ["output-dir"] (ReqArg outDir "DIR") "Save output files (other than .gfo files) in DIR.", Option [] ["gf-lib-path"] (ReqArg gfLibPath "DIR") @@ -336,23 +321,12 @@ "(default) Recompile from source if the source is newer than the .gfo file.", Option [] ["gfo","no-recomp"] (NoArg (recomp NeverRecomp)) "Never recompile from source, if there is already .gfo file.",- Option [] ["strip"] (NoArg (printer PrinterStrip))- "Remove name qualifiers when pretty-printing.", Option [] ["retain"] (NoArg (set $ \o -> o { optRetainResource = True })) "Retain opers.", Option [] ["probs"] (ReqArg probsFile "file.probs") "Read probabilities from file.", Option ['n'] ["name"] (ReqArg name "NAME") (unlines ["Use NAME as the name of the output. This is used in the output file names, ", "with suffixes depending on the formats, and, when relevant, ", "internally in the output."]),- Option [] ["abs"] (ReqArg absName "NAME")- ("Use NAME as the name of the abstract syntax module generated from "- ++ "a grammar in GF 1 format."),- Option [] ["cnc"] (ReqArg cncName "NAME")- ("Use NAME as the name of the concrete syntax module generated from "- ++ "a grammar in GF 1 format."),- Option [] ["res"] (ReqArg resName "NAME")- ("Use NAME as the name of the resource module generated from "- ++ "a grammar in GF 1 format."), Option ['i'] [] (ReqArg addLibDir "DIR") "Add DIR to the library search path.", Option [] ["path"] (ReqArg setLibPath "DIR:DIR:...") "Set the library search path.", Option [] ["preproc"] (ReqArg preproc "CMD") @@ -364,6 +338,8 @@ Option [] ["language"] (ReqArg language "LANG") "Set the speech language flag to LANG in the generated grammar.", Option [] ["lexer"] (ReqArg lexer "LEXER") "Use lexer LEXER.", Option [] ["unlexer"] (ReqArg unlexer "UNLEXER") "Use unlexer UNLEXER.",+ Option [] ["pmcfg"] (NoArg (pmcfg True)) "Generate PMCFG (default).",+ Option [] ["no-pmcfg"] (NoArg (pmcfg False)) "Don't generate PMCFG (useful for libraries).", Option [] ["optimize"] (ReqArg optimize "OPT") "Select an optimization package. OPT = all | values | parametrize | none", Option [] ["optimize-pgf"] (NoArg (optimize_pgf True))@@ -373,6 +349,7 @@ Option [] ["stem"] (onOff (toggleOptimize OptStem) True) "Perform stem-suffix analysis (default on).", Option [] ["cse"] (onOff (toggleOptimize OptCSE) True) "Perform common sub-expression elimination (default on).", Option [] ["cfg"] (ReqArg cfgTransform "TRANS") "Enable or disable specific CFG transformations. TRANS = merge, no-merge, bottomup, no-bottomup, ...",+ Option [] ["new-comp"] (NoArg (set $ \o -> o{optNewComp = True})) "Use the new experimental compiler.", dumpOption "source" DumpSource, dumpOption "rebuild" DumpRebuild, dumpOption "extend" DumpExtend,@@ -385,14 +362,18 @@ ] where phase x = set $ \o -> o { optStopAfterPhase = x } mode x = set $ \o -> o { optMode = x }+ defaultPort = 41296+ modeServer = maybe (ms defaultPort) readPort+ where+ ms = mode . ModeServer+ readPort p = maybe err ms (readMaybe p)+ where err = fail $ "Bad server port: "++p verbosity mv = case mv of Nothing -> set $ \o -> o { optVerbosity = Verbose } Just v -> case readMaybe v >>= toEnumBounded of Just i -> set $ \o -> o { optVerbosity = i } Nothing -> fail $ "Bad verbosity: " ++ show v- prof x = set $ \o -> o { optProf = x } cpu x = set $ \o -> o { optShowCPUTime = x }- emitGFO x = set $ \o -> o { optEmitGFO = x } gfoDir x = set $ \o -> o { optGFODir = Just x } outFmt x = readOutputFormat x >>= \f -> set $ \o -> o { optOutputFormats = optOutputFormats o ++ [f] }@@ -406,17 +387,12 @@ ++ " Known: " ++ show (map fst haskellOptionNames) literalCat x = set $ \o -> o { optLiteralCats = foldr Set.insert (optLiteralCats o) ((map (identC . BS.pack) . splitBy (==',')) x) } lexicalCat x = set $ \o -> o { optLexicalCats = foldr Set.insert (optLexicalCats o) (splitBy (==',') x) }- outFile x = set $ \o -> o { optOutputFile = Just x } outDir x = set $ \o -> o { optOutputDir = Just x } gfLibPath x = set $ \o -> o { optGFLibPath = Just x } recomp x = set $ \o -> o { optRecomp = x }- printer x = set $ \o -> o { optPrinter = x : optPrinter o } probsFile x = set $ \o -> o { optProbsFile = Just x } name x = set $ \o -> o { optName = Just x }- absName x = set $ \o -> o { optAbsName = Just x }- cncName x = set $ \o -> o { optCncName = Just x }- resName x = set $ \o -> o { optResName = Just x } addLibDir x = set $ \o -> o { optLibraryPath = x:optLibraryPath o } setLibPath x = set $ \o -> o { optLibraryPath = splitInModuleSearchPath x } preproc x = set $ \o -> o { optPreprocessors = optPreprocessors o ++ [x] }@@ -425,6 +401,8 @@ language x = set $ \o -> o { optSpeechLanguage = Just x } lexer x = set $ \o -> o { optLexer = Just x } unlexer x = set $ \o -> o { optUnlexer = Just x }++ pmcfg x = set $ \o -> o { optPMCFG = x } optimize x = case lookup x optimizationPackages of Just p -> set $ \o -> o { optOptimizations = p }
@@ -137,11 +137,14 @@ ioeErr :: Err a -> IOE a ioeErr = ioe . return +instance Functor IOE where fmap = liftM+ instance Monad IOE where return a = ioe (return (return a)) IOE c >>= f = IOE $ do x <- c -- Err a appIOE $ err ioeBad f x -- f :: a -> IOE a+ fail = ioeBad ioeBad :: String -> IOE a ioeBad = ioe . return . Bad@@ -157,9 +160,6 @@ case ev of Ok v -> foldIOE f v xx Bad m -> return $ (s, Just m)--dieIOE :: IOE a -> IO a-dieIOE x = appIOE x >>= err die return die :: String -> IO a die s = do hPutStrLn stderr s
@@ -11,7 +11,6 @@ import GF.Data.Utilities import GF.Data.XML import GF.Infra.Ident-import GF.Infra.Modules import PGF import PGF.Data import PGF.Macros
@@ -43,6 +43,7 @@ ("greek", transGreek), ("hebrew", transHebrew), ("persian", transPersian),+ ("sindhi", transSindhi), ("nepali", transNepali), ("telugu", transTelugu), ("thai", transThai),@@ -122,15 +123,16 @@ transDevanagari = (mkTransliteration "Devanagari" allTransUrduHindi allCodes){invisible_chars = ["a"]} where- allCodes = [0x0900 .. 0x095f]+ allCodes = [0x0900 .. 0x095f] ++ [0x0966 .. 0x096f] allTransUrduHindi = words $- "- M N - - a- A- i- I- u- U- R- - - - e- " ++- "E- - - o- O- k K g G N: c C j J n: t. " ++- "T. d. D. n. t T d D n - p P b B m y " ++- "r - l - - v S s. s h - - r: - A i " ++- "I u U R - - - e E o O - - - - - " ++- "- - - - - - - - - - - z r. - - - "+ "- n~ m. h. - A A: I I: U U: r.- l.- - - E: " +++ "E+ - - O: O+ k k' g g' n- c c' j j' n* T " +++ "T' D D' N t t' d d' n - p p' b b' m y " +++ "r - l L - v s* S s h - - X~ - a: i " +++ "i: u u: r. l. - - e: e+ - - o: o+ X, - - " +++ "- - - - - - - - q x g. z R R' f - " +++ "N0 N1 N2 N3 N4 N5 N6 N7 N8 N9 " transUrdu :: Transliteration@@ -145,6 +147,23 @@ "f q k l m n - w " ++ -- 0641 - 0648 "$ n- T p c D R x g h t: y N h' E " ++ -- 0654,658,679,67e,686,688,698,6af,6c1,6c3,6cc,6ba,6be,6d2 "N0 N1 N2 N3 N4 N5 N6 N7 N8 N9 " ++ "? ."++transSindhi :: Transliteration+transSindhi = + (mkTransliteration "Sindhi" allTrans allCodes) where+ allCodes = [0x062e] ++ [0x0627 .. 0x062f] ++ [0x0630 .. 0x063a] ++ [0x0641 .. 0x0648] +++ [0x067a,0x067b,0x067d,0x067e,0x067f] ++ [0x0680 .. 0x068f] +++ [0x0699,0x0918,0x06a6,0x061d,0x06a9,0x06af,0x06b3,0x06bb,0x06be,0x06f6,0x06cc,0x06b1, 0x06aa, 0x06fd, 0x06fe] +++ [0x06f0 .. 0x06f9] ++ [0x061f,0x06D4]+ allTrans = words $+ "K a b - t C j H - d " ++ -- 0626 - 062f+ "Z r z s X S Z- t- z- e G " ++ -- 0630 - 063a+ "f q - L m n - W " ++ -- 0641 - 0648+ "T! B T p T' " ++ -- 067a,067b,067d,067e,067f+ "B' - - Y' J' - c c' - - d! - d' D - D' " ++ -- 0680 - 068f+ "R - F' - k' g G' t' h' e' y c! k A M " ++ -- 0699, 0918, 06a6, 061d, 06a9,06af,06b3,06bb,06be,06f6,06cc,06b1 + "N0 N1 N2 N3 N4 N5 N6 N7 N8 N9 " ++ "? ."+ transArabic :: Transliteration
@@ -24,15 +24,21 @@ import Control.Exception -mainGFC :: Options -> [FilePath] -> IOE ()-mainGFC opts fs = - case () of- _ | null fs -> fail $ "No input files."- _ | all (extensionIs ".cf") fs -> compileCFFiles opts fs- _ | all (\f -> extensionIs ".gf" f || extensionIs ".gfo" f) fs -> compileSourceFiles opts fs- _ | all (extensionIs ".pgf") fs -> unionPGFFiles opts fs- _ -> fail $ "Don't know what to do with these input files: " ++ unwords fs- where extensionIs ext = (== ext) . takeExtension+mainGFC :: Options -> [FilePath] -> IO ()+mainGFC opts fs = do+ r <- appIOE (case () of+ _ | null fs -> fail $ "No input files."+ _ | all (extensionIs ".cf") fs -> compileCFFiles opts fs+ _ | all (\f -> extensionIs ".gf" f || extensionIs ".gfo" f) fs -> compileSourceFiles opts fs+ _ | all (extensionIs ".pgf") fs -> unionPGFFiles opts fs+ _ -> fail $ "Don't know what to do with these input files: " ++ unwords fs)+ case r of+ Ok x -> return x+ Bad msg -> die $ if flag optVerbosity opts == Normal+ then ('\n':msg)+ else msg+ where+ extensionIs ext = (== ext) . takeExtension compileSourceFiles :: Options -> [FilePath] -> IOE () compileSourceFiles opts fs =
@@ -21,7 +21,6 @@ import GF.Infra.CheckM import GF.Infra.UseIO import GF.Infra.Option-import GF.Infra.Modules (greatestResource, modules, emptyModInfo, mGrammar) import GF.Infra.Ident (showIdent) import GF.Infra.BuildInfo (buildInfo) import qualified System.Console.Haskeline as Haskeline@@ -70,8 +69,8 @@ shell opts files = loop opts =<< importInEnv emptyGFEnv opts files #ifdef SERVER_MODE-mainServerGFI opts0 files =- server (execute1 opts) =<< importInEnv emptyGFEnv opts files+mainServerGFI opts0 port files =+ server port (execute1 opts) =<< importInEnv emptyGFEnv opts files where opts = beQuiet opts0 #else mainServerGFI opts files =@@ -402,13 +401,12 @@ data GFEnv = GFEnv { sourcegrammar :: SourceGrammar, -- gfo grammar -retain commandenv :: CommandEnv,- history :: [String]--,---cputime :: Integer+ history :: [String] } emptyGFEnv :: GFEnv emptyGFEnv =- GFEnv (mGrammar [(identW,emptyModInfo)]) (mkCommandEnv emptyPGF) [] {-0-}+ GFEnv emptySourceGrammar (mkCommandEnv emptyPGF) [] {-0-} wordCompletion gfenv (left,right) = do case wc_type (reverse left) of
@@ -1,74 +1,122 @@+{-# LANGUAGE CPP #-} module GFServer(server) where-import Data.List(partition)+import Data.List(partition,stripPrefix,tails)+import Data.Maybe(mapMaybe) import qualified Data.Map as M import Control.Monad(when) import System.Random(randomRIO)-import System.IO(stdout,stderr)-import System.IO.Error(try,ioError)+import System.IO(stdout,stderr,hPutStrLn)+import System.IO.Error(try,ioError,isAlreadyExistsError) import System.Directory(doesDirectoryExist,doesFileExist,createDirectory, setCurrentDirectory,getCurrentDirectory, getDirectoryContents,removeFile,removeDirectory)-import System.FilePath(takeExtension,takeFileName,takeDirectory,(</>))-import System.Posix.Files(getFileStatus,isSymbolicLink,removeLink,+import System.FilePath(dropExtension,takeExtension,takeFileName,takeDirectory,+ (</>))+#ifndef mingw32_HOST_OS+import System.Posix.Files(getSymbolicLinkStatus,isSymbolicLink,removeLink, createSymbolicLink)-import Control.Concurrent.MVar(newMVar,modifyMVar)-import Network.URI(URI(..))+#endif+import Control.Concurrent(newMVar,modifyMVar,forkIO)+import Network.URI(URI(..),parseURI) import Network.Shed.Httpd(initServer,Request(..),Response(..),queryToArguments, noCache)+--import qualified Network.FastCGI as FCGI -- from hackage direct-fastcgi import Network.CGI(handleErrors,liftIO)-import FastCGIUtils(outputJSONP,handleCGIErrors)+import FastCGIUtils(outputJSONP,handleCGIErrors,stderrToFile)+import Text.JSON(encode,showJSON,makeObj) import System.IO.Silently(hCapture) import System.Process(readProcessWithExitCode) import System.Exit(ExitCode(..))-import Codec.Binary.UTF8.String(encodeString)+import Codec.Binary.UTF8.String(decodeString,encodeString) import GF.Infra.UseIO(readBinaryFile,writeBinaryFile) import qualified PGFService as PS import qualified ExampleService as ES import Data.Version(showVersion) import Paths_gf(getDataDir,version) import GF.Infra.BuildInfo (buildInfo)+import SimpleEditor.Convert(parseModule) import RunHTTP(cgiHandler) --- * HTTP server-server execute1 state0 = - do state <- newMVar M.empty+--logFile :: FilePath+--logFile = "pgf-error.log"++debug s = liftIO (logPutStrLn s)++-- | Combined FastCGI and HTTP server+server port execute1 state0 = + do --stderrToFile logFile+ state <- newMVar M.empty cache <- PS.newPGFCache datadir <- getDataDir let root = datadir</>"www"- port = 41296- putStrLn $ "This is GF version "++showVersion version++"."- putStrLn buildInfo- putStrLn $ "Document root = "++root- putStrLn $ "Starting HTTP server, open http://localhost:"- ++show port++"/ in your web browser."+ debug $ "document root="++root setCurrentDirectory root- initServer port (modifyMVar state . handle state0 cache execute1)+-- FCGI.acceptLoop forkIO (handle_fcgi execute1 state0 state cache)+ -- if acceptLoop returns, then GF was not invoked as a FastCGI script+ http_server execute1 state0 state cache root+ where+ -- | HTTP server+ http_server execute1 state0 state cache root =+ do putStrLn $ "This is GF version "++showVersion version++"."+ putStrLn buildInfo+ putStrLn $ "Document root = "++root+ putStrLn $ "Starting HTTP server, open http://localhost:"+ ++show port++"/ in your web browser."+ initServer port (modifyMVar state . handle state0 cache execute1) --- * HTTP request handler+{-+-- | FastCGI request handler+handle_fcgi execute1 state0 stateM cache =+ do Just method <- FCGI.getRequestMethod+ debug $ "request method="++method+ Just path <- FCGI.getPathInfo+-- debug $ "path info="++path+ query <- maybe (return "") return =<< FCGI.getQueryString+-- debug $ "query string="++query+ let uri = URI "" Nothing path query ""+ headers <- fmap (mapFst show) FCGI.getAllRequestHeaders+ body <- fmap BS.unpack FCGI.fGetContents+ let req = Request method uri headers body+-- debug (show req)+ (output,resp) <- liftIO $ hCapture [stdout] $ modifyMVar stateM $ handle state0 cache execute1 req+ let Response code headers body = resp+-- debug output+ debug $ " "++show code++" "++show headers+ FCGI.setResponseStatus code+ mapM_ (uncurry (FCGI.setResponseHeader . toHeader)) headers+ let pbody = BS.pack body+ n = BS.length pbody+ FCGI.fPut pbody+ debug $ "done "++show n+-}++-- | HTTP request handler handle state0 cache execute1 rq@(Request method URI{uriPath=upath,uriQuery=q} hdrs body) state =- do let qs = decodeQ $ - case method of- "GET" -> queryToArguments q- "POST" -> queryToArguments body-- logPutStrLn $ method++" "++upath++" "++show qs- case upath of- "/new" -> new--- "/stop" ->--- "/start" ->- "/gfshell" -> inDir qs $ look "command" . command- "/cloud" -> inDir qs $ look "command" . cloud- '/':rpath ->- case (takeDirectory path,takeFileName path,takeExtension path) of- (_ ,_ ,".pgf") -> wrapCGI $ PS.cgiMain' cache path- (dir,"grammars.cgi",_ ) -> wrapCGI $ grammarList dir- (dir ,"exb.fcgi" ,_ ) -> wrapCGI $ ES.cgiMain' root dir cache- _ -> do resp <- serveStaticFile path- return (state,resp)- where path = translatePath rpath- _ -> return (state,resp400 upath)+ case method of+ "POST" -> normal_request (inputs body)+ "GET" -> normal_request (inputs q)+ _ -> return (state,resp501 $ "method "++method) where+ normal_request qs =+ do logPutStrLn $ method++" "++upath++" "++show qs+ case upath of+ "/new" -> new+-- "/stop" ->+-- "/start" ->+ "/gfshell" -> inDir qs $ look "command" . command+ "/parse" -> parse qs+ "/cloud" -> inDir qs $ look "command" . cloud+ '/':rpath ->+ case (takeDirectory path,takeFileName path,takeExtension path) of+ (_ ,_ ,".pgf") -> wrapCGI $ PS.cgiMain' cache path+ (dir,"grammars.cgi",_ ) -> grammarList dir qs+ (dir ,"exb.fcgi" ,_ ) -> wrapCGI $ ES.cgiMain' root dir cache+ _ -> do resp <- serveStaticFile path+ return (state,resp)+ where path = translatePath rpath+ _ -> return (state,resp400 upath)+ root = "." translatePath rpath = root</>rpath -- hmm, check for ".."@@ -90,7 +138,10 @@ do cwd <- getCurrentDirectory b <- try $ setCurrentDirectory dir case b of- Left _ -> return (state,resp404 dir)+ Left _ -> do b <- try $ readFile dir -- poor man's symbolic links+ case b of+ Left _ -> return (state,resp404 dir)+ Right dir' -> cd dir' qs' Right _ -> do logPutStrLn $ "cd "++dir r <- try (ok dir qs') setCurrentDirectory cwd@@ -107,6 +158,9 @@ let state' = maybe state (flip (M.insert dir) state) st' return (state',ok200 output) + parse qs =+ return (state,json200 (makeObj(map(parseModule.apBoth decodeString) qs)))+ cloud dir cmd qs = case cmd of "make" -> make dir qs@@ -122,7 +176,8 @@ let args = "-s":"-make":map fst files cmd = unwords ("gf":args) out <- readProcessWithExitCode "gf" args ""- return (state,html200 (resultpage ('/':dir++"/") cmd out files))+ cwd <- getCurrentDirectory+ return (state,json200 (jsonresult cwd ('/':dir++"/") cmd out files)) upload files = do let update (name,contents)= updateFile name contents@@ -131,7 +186,7 @@ jsonList = do jsons <- ls_ext "." ".json"- return (state,ok200 (unwords jsons))+ return (state,json200 jsons) rm path _ | takeExtension path==".json" = do b <- doesFileExist path@@ -143,11 +198,20 @@ download path _ = (,) state `fmap` serveStaticFile path - link_directories olddir newdir@('/':'t':'m':'p':'/':_) _ | olddir/=newdir =+ link_directories olddir newdir@('/':'t':'m':'p':'/':_) _ | old/=new = do setCurrentDirectory ".."- st <- getFileStatus old- if isSymbolicLink st then removeLink old else removeDir old+ logPutStrLn =<< getCurrentDirectory+ logPutStrLn $ "link_dirs new="++new++", old="++old+#ifdef mingw32_HOST_OS+ isDir <- doesDirectoryExist old+ if isDir then removeDir old else removeFile old+ writeFile old new -- poor man's symbolic links+#else+ isLink <- isSymbolicLink `fmap` getSymbolicLinkStatus old+ logPutStrLn $ "old is link: "++show isLink+ if isLink then removeLink old else removeDir old createSymbolicLink new old+#endif return (state,ok200 "") where old = takeFileName olddir@@ -155,7 +219,9 @@ link_directories olddir newdir _ = return (state,resp400 $ "unacceptable directories "++olddir++" "++newdir) - grammarList dir = outputJSONP =<< liftIO (ls_ext dir ".pgf")+ grammarList dir qs =+ do pgfs <- ls_ext dir ".pgf"+ return (state,jsonp qs pgfs) ls_ext dir ext = do paths <- getDirectoryContents dir@@ -163,38 +229,71 @@ -- * Dynamic content -resultpage dir cmd (ecode,stdout,stderr) files =+jsonresult cwd dir cmd (ecode,stdout,stderr) files =+ makeObj [+ prop "errorcode" (if ecode==ExitSuccess then "OK" else "Error"),+ prop "command" cmd,+ prop "output" (unlines [rel stderr,rel stdout]),+ prop "minibar_url" ("/minibar/minibar.html?"++dir++pgf)]+ where+ pgf = case files of+ (abstract,_):_ -> "%20"++dropExtension abstract++".pgf"+ _ -> ""++ rel = unlines . map relative . lines++ -- remove absolute file paths from error messages:+ relative s = case stripPrefix cwd s of+ Just ('/':rest) -> rest+ _ -> s+{-+resultpage cwd dir cmd (ecode,stdout,stderr) files = unlines $ "<!DOCTYPE html>":- "<title>Uploaded</title>":+ wrap "title" "Uploaded": "<link rel=stylesheet type=\"text/css\" HREF=\"/gfse/editor.css\" title=\"Normal\">":- "<h1>Uploaded</h1>":- "<pre>":escape cmd:"":escape stderr:escape stdout:- "</pre>":+ wrap "h1" "Uploaded":+ concatMap (pre.escape) [cmd,rel stderr,rel stdout]: (if ecode==ExitSuccess- then "<h3>OK</h3>":links+ then wrap "h3" "OK":links else "<h3 class=error_message>Error</h3>":listing) where links = "<dl>":- ("<dt>▸ <a href=\"/minibar/minibar.html?"++dir++"\">Minibar</a>"):- "<dt>◂ <a href=\"javascript:history.back()\">Back to Editor</a>":+ ("<dt>▸ <a href=\"/minibar/minibar.html?"++dir++pgf++"\">Minibar</a>"):+ "<dt class=back_to_editor>◂ <a href=\"javascript:history.back()\">Back to Editor</a>": "</dl>": [] + pgf = case files of+ (abstract,_):_ -> "%20"++dropExtension abstract++".pgf"+ _ -> ""+ listing = concatMap listfile files listfile (name,source) = - ("<h4>"++name++"</h4><pre class=plain>"):number source:"</pre>":[]+ (wrap "h4" name++"<pre class=plain>"):number source:"</pre>":[] number = unlines . zipWith num [1..] . lines num n s = pad (show n)++" "++escape s pad s = replicate (5-length s) ' '++s + pre = wrap "pre"+ wrap t s = tag t++s++endtag t+ tag t = "<"++t++">"+ endtag t = tag ('/':t)++ rel = unlines . map relative . lines++ -- remove absolute file paths from error messages:+ relative s = case stripPrefix cwd s of+ Just ('/':rest) -> rest+ _ -> s+ escape = concatMap escape1 escape1 '<' = "<" escape1 '&' = "&" escape1 c = [c]-+-} -- * Static content serveStaticFile path =@@ -204,27 +303,37 @@ serveStaticFile' path = do let ext = takeExtension path- (t,rdFile,encode) = contentTypeFromExt ext+ (t,rdFile) = contentTypeFromExt ext if ext `elem` [".cgi",".fcgi",".sh",".php"] then return $ resp400 $ "Unsupported file type: "++ext else do b <- doesFileExist path- if b then fmap (ok200' (ct t) . encode) $ rdFile path+ if b then fmap (ok200' (ct t)) $ rdFile path else return (resp404 path) -- * Logging-logPutStrLn = putStrLn+logPutStrLn = hPutStrLn stderr +-- * JSONP output++jsonp qs = json200' $ maybe id apply (lookup "jsonp" qs)+ where+ apply f json = f++"("++json++")"+ -- * Standard HTTP responses ok200 = Response 200 [plainUTF8,noCache] . encodeString ok200' t = Response 200 [t]+json200 x = json200' id x+json200' f = ok200' jsonUTF8 . encodeString . f . encode html200 = ok200' htmlUTF8 . encodeString resp204 = Response 204 [] "" -- no content resp400 msg = Response 400 [plain] $ "Bad request: "++msg++"\n" resp404 path = Response 404 [plain] $ "Not found: "++path++"\n"+resp501 msg = Response 501 [plain] $ "Not implemented: "++msg++"\n" -- * Content types plain = ct "text/plain" plainUTF8 = ct "text/plain; charset=UTF-8"+jsonUTF8 = ct "text/javascript; charset=UTF-8" htmlUTF8 = ct "text/html; charset=UTF-8" ct t = ("Content-Type",t) @@ -240,8 +349,9 @@ ".jpg" -> bin "image/jpg" _ -> bin "application/octet-stream" where- text subtype = ("text/"++subtype++"; charset=UTF-8",readFile,encodeString)- bin t = (t,readBinaryFile,id)+ text subtype = ("text/"++subtype++"; charset=UTF-8",+ fmap encodeString . readFile)+ bin t = (t,readBinaryFile) -- * IO utilities updateFile path new =@@ -250,24 +360,48 @@ seq (either (const 0) length old) $ writeBinaryFile path new - newDirectory =- do k <- randomRIO (1,maxBound::Int)- let path = "tmp/gfse."++show k- b <- try $ createDirectory path- case b of- Left _ -> newDirectory- Right _ -> return ('/':path)+ do debug "newDirectory"+ loop 10+ where+ loop 0 = fail "Failed to create a new directory"+ loop n = maybe (loop (n-1)) return =<< once + once =+ do k <- randomRIO (1,maxBound::Int)+ let path = "tmp/gfse."++show k+ b <- try $ createDirectory path+ case b of+ Left err -> do debug (show err) ;+ if isAlreadyExistsError err+ then return Nothing+ else ioError err+ Right _ -> return (Just ('/':path))+ -- | Remove a directory and the files in it, but not recursively removeDir dir = do files <- filter (`notElem` [".",".."]) `fmap` getDirectoryContents dir mapM (removeFile . (dir</>)) files removeDirectory dir+{-+-- * direct-fastcgi deficiency workaround +--toHeader = FCGI.toHeader -- not exported, unfortuntately++toHeader "Content-Type" = FCGI.HttpContentType -- to avoid duplicate headers+toHeader s = FCGI.HttpExtensionHeader s -- cheating a bit+-}+ -- * misc utils -decodeQ qs = [(decode n,decode v)|(n,v)<-qs]-decode = map decode1-decode1 '+' = ' ' -- httpd-shed bug workaround-decode1 c = c++inputs = queryToArguments . fixplus+ where+ fixplus = concatMap decode+ decode '+' = "%20" -- httpd-shed bug workaround+ decode c = [c]++mapFst f xys = [(f x,y)|(x,y)<-xys]+apBoth f (x,y) = (f x,f y)++prop n v = (n,showJSON v)
@@ -0,0 +1,152 @@+{-# LANGUAGE NoMonomorphismRestriction #-}+module SimpleEditor.Convert where++import Control.Monad(unless,foldM,ap,mplus)+import Data.List(sortBy)+import Data.Function(on)+import qualified Data.Map as Map+import qualified Data.ByteString.Char8 as BS(pack)+import Text.JSON(encode,makeObj)+import Text.PrettyPrint(render)++--import GF.Compile.GetGrammar (getSourceModule)+import GF.Infra.Option(optionsGFO)+import GF.Infra.Ident(showIdent)+--import GF.Infra.UseIO(appIOE)+import GF.Grammar.Grammar+import GF.Grammar.Printer(ppParams,ppTerm,getAbs,TermPrintQual(..))+import GF.Grammar.Parser(runP,pModDef)+import GF.Grammar.Lexer(Posn(..))+import GF.Data.ErrM++import SimpleEditor.Syntax as S+import SimpleEditor.JSON+++parseModule (path,source) =+ prop path $ + case runP pModDef (BS.pack source) of+ Left (Pn l c,msg) ->+ makeObj [prop "error" msg,+ prop "location" (show l++":"++show c)]+ Right mod -> case convModule mod of+ Ok g -> makeObj [prop "converted" g]+ Bad msg -> makeObj [prop "parsed" msg]++{-+convAbstractFile path =+ appIOE (fmap encode . convAbstract =<< getSourceModule noOptions path)+-}++convModule m@(modid,src) =+ if isModAbs src+ then convAbstract m+ else if isModCnc src+ then convConcrete m+ else fail "An abstract or concrete syntax module was expected"++convAbstract (modid,src) =+ do unless (isModAbs src) $ fail "Abstract syntax expected"+ unless (isCompleteModule src) $ fail "A complete abstract syntax expected"+ extends <- convExtends (mextend src)+ (cats0,funs0) <- convAbsJments (jments src)+ let cats = reverse cats0+ funs = reverse funs0+ flags = optionsGFO (mflags src)+ startcat = maybe "-" id $ lookup "startcat" flags+ return $ Grammar (convId modid) extends (Abstract startcat cats funs) []++convExtends = mapM convExtend+convExtend (modid,MIAll) = return (convId modid)+convExtend _ = fail "unsupported module extension"++convAbsJments jments = foldM convAbsJment ([],[]) (jmentList jments)++convAbsJment (cats,funs) (name,jment) =+ case jment of+ AbsCat octx -> do unless (null (maybe [] unLoc octx)) $+ fail "category with context"+ let cat = convId name+ return (cat:cats,funs)+ AbsFun (Just lt) _ oeqns _ -> do unless (null (maybe [] id oeqns)) $+ fail "function with equations"+ let f = convId name+ typ <- convType (unLoc lt)+ let fun = Fun f typ+ return (cats,fun:funs)+ _ -> fail $ "unsupported judgement form: "++show jment++convType (Prod _ _ t1 t2) = (:) `fmap` convSimpleType t1 `ap` convType t2+convType t = (:[]) `fmap` convSimpleType t+++convSimpleType (Vr id) = return (convId id)+convSimpleType t = fail "unsupported type"++convId = showIdent++convConcrete (modid,src) =+ do unless (isModCnc src) $ fail "Concrete syntax expected"+ unless (isCompleteModule src) $ fail "A complete concrete syntax expected"+ extends <- convExtends (mextend src)+ opens <- convOpens (mopens src)+ js <- convCncJments (jments src)+ let ps = [p | Pa p <-js]+ lcs = [lc | LC lc<-js]+ os = [o | Op o <-js]+ ls = [l | Li l <-js]+ langcode = "" -- !!!+ conc = Concrete langcode opens ps lcs os ls+ abs = Abstract "-" [] [] -- dummy+ return $ Grammar (convId modid) extends abs [conc]++convOpens = mapM convOpen++convOpen o =+ case o of+ OSimple id -> return (convId id)+ _ -> fail "unsupported module open"+++data CncJment = Pa S.Param | LC Lincat | Op Oper | Li Lin | Ignored++convCncJments = mapM convCncJment . jmentList++convCncJment (name,jment) =+ case jment of+ ResParam ops _ ->+ return $ Pa $ Param i (maybe "" (render . ppParams q . unLoc) ops)+ ResValue _ -> return Ignored+ CncCat (Just (L _ typ)) Nothing pprn _ -> -- ignores printname !!+ return $ LC $ Lincat i (render $ ppTerm q 0 typ)+ ResOper oltyp (Just lterm) -> return $ Op $ Oper lhs rhs+ where+ lhs = i++maybe "" ((" : "++) . render . ppTerm q 0 . unLoc) oltyp+ rhs = " = "++render (ppTerm q 0 (unLoc lterm))+ CncFun _ (Just ldef) pprn _ -> -- ignores printname !!+ do let (xs,e') = getAbs (unLoc ldef)+ lin = render $ ppTerm q 0 e'+ args <- mapM convBind xs+ return $ Li $ Lin i args lin+ _ -> fail $ "unsupported judgement form: "++show jment+ where+ i = convId name+ q = Unqualified++convBind (Explicit,v) = return $ convId v+convBind (Implicit,v) = fail "implicit binding not supported"++jmentList = sortBy (compare `on` (jmentLocation.snd)) . Map.toList++jmentLocation jment =+ case jment of+ AbsCat ctxt -> fmap loc ctxt+ AbsFun ty _ _ _ -> fmap loc ty+ ResParam ops _ -> fmap loc ops+ CncCat ty _ _ _ -> fmap loc ty+ ResOper ty rhs -> fmap loc rhs `mplus` fmap loc ty+ CncFun _ rhs _ _ -> fmap loc rhs+ _ -> Nothing+++loc (L l _) = l
@@ -0,0 +1,47 @@+module SimpleEditor.JSON where++import Text.JSON++import SimpleEditor.Syntax+++instance JSON Grammar where+ showJSON (Grammar name extends abstract concretes) =+ makeObj [prop "basename" name,+ prop "extends" extends,+ prop "abstract" abstract,+ prop "concretes" concretes]++instance JSON Abstract where+ showJSON (Abstract startcat cats funs) =+ makeObj [prop "startcat" startcat,+ prop "cats" cats,+ prop "funs" funs]++instance JSON Fun where showJSON (Fun name typ) = signature name typ+instance JSON Param where showJSON (Param name rhs) = definition name rhs+instance JSON Oper where showJSON (Oper name rhs) = definition name rhs++signature name typ = makeObj [prop "name" name,prop "type" typ]+definition name rhs = makeObj [prop "name" name,prop "rhs" rhs]++instance JSON Concrete where+ showJSON (Concrete langcode opens params lincats opers lins) =+ makeObj [prop "langcode" langcode,+ prop "opens" opens,+ prop "params" params,+ prop "lincats" lincats,+ prop "opers" opers,+ prop "lins" lins]++instance JSON Lincat where+ showJSON (Lincat cat lintype) =+ makeObj [prop "cat" cat,prop "type" lintype]++instance JSON Lin where+ showJSON (Lin fun args lin) =+ makeObj [prop "fun" fun,+ prop "args" args,+ prop "lin" lin]++prop name v = (name,showJSON v)
@@ -0,0 +1,39 @@+{-+Abstract syntax for the small subset of GF grammars supported+in gfse, the JavaScript-based simple grammar editor.+-}+module SimpleEditor.Syntax where++type Id = String -- all sorts of identifiers+type ModId = Id -- module name+type Cat = Id -- category name+type FunId = Id -- function name+type Type = [Cat] -- [Cat_1,...,Cat_n] means Cat_1 -> ... -> Cat_n++data Grammar = Grammar { basename :: ModId,+ extends :: [ModId],+ abstract :: Abstract,+ concretes:: [Concrete] }+ deriving Show++data Abstract = Abstract { startcat:: Cat, cats:: [Cat], funs:: [Fun] }+ deriving Show+data Fun = Fun { fname:: FunId, ftype:: Type }+ deriving Show++data Concrete = Concrete { langcode:: Id,+ opens:: [ModId],+ params:: [Param],+ lincats:: [Lincat],+ opers:: [Oper],+ lins:: [Lin] }+ deriving Show++data Param = Param {pname:: Id, prhs:: String} deriving Show+data Lincat = Lincat {cat :: Cat, lintype:: Term} deriving Show+data Oper = Oper {oname:: Lhs, orhs:: Term} deriving Show+data Lin = Lin {fun :: FunId, args:: [Id], lin:: Term} deriving Show++type Lhs = String -- name and type of oper,+ -- e.g "regN : Str -> { s:Str,g:Gender} ="+type Term = String -- arbitrary GF term (not parsed by the editor)
@@ -42,8 +42,8 @@ } -getNext :: Environ -> ([MyFunc],[MyFunc])-getNext env = +getNext :: Environ -> Environ -> ([MyFunc],[MyFunc])+getNext env example_env = let sgs = getSigs env allfuncs = getAll env names = Set.fromList $ map getName $ concat $ Map.elems sgs
@@ -4,6 +4,7 @@ import Data.Map(fromList) import Data.Char(isDigit) import Data.Maybe(fromJust)+import qualified Codec.Binary.UTF8.String as UTF8 (decodeString) import PGF import GF.Compile.ToAPI import Network.CGI@@ -22,12 +23,16 @@ do command <- getInp "command" environ <- parseEnviron =<< getInp "state" case command of- "possibilities" -> outputJSONP (E.getNext environ)- "provide_example" -> doProvideExample root cwd cache environ+ "possibilities" -> doPossibilities environ+ "provide_example" -> doProvideExample root cwd cache environ "abstract_example" -> doAbstractExample cwd cache environ- "test_function" -> doTestFunction cwd cache environ+ "test_function" -> doTestFunction cwd cache environ _ -> throwCGIError 400 ("Unknown command: "++command) [] +doPossibilities environ =+ do example_environ <- parseEnviron =<< getInp "example_state"+ outputJSONP (E.getNext environ example_environ)+ doProvideExample root cwd cache environ = do Just lang <- readInput "lang" fun <- getCId "fun"@@ -79,7 +84,7 @@ parseEnviron s = do state <- liftIO $ readIO s return $ environ state -getInp name = maybe err return =<< getInput name+getInp name = maybe err (return . UTF8.decodeString) =<< getInput name where err = throwCGIError 400 ("Missing parameter: "++name) []
@@ -1,7 +1,7 @@ Editor improvements for example-based grammar writing:-- Remove the same language from the example language menu-- Send the other language environment to getNext++ Remove the same language from the example language menu++ Send the other language environment to getNext - Compile a new .pgf automatically when needed - Update buttons automatically when functions are added or removed - Switch over to using AbsParadigmsEng.pgf instead of the old exprToAPI function
@@ -0,0 +1,5 @@+Libpgf was written by:++Lauri Alanko <lealanko@ling.helsinki.fi>++Based on the original PGF implementation by Krasimir Angelov.
@@ -0,0 +1,165 @@+ GNU LESSER GENERAL PUBLIC LICENSE+ Version 3, 29 June 2007++ Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>+ Everyone is permitted to copy and distribute verbatim copies+ of this license document, but changing it is not allowed.+++ This version of the GNU Lesser General Public License incorporates+the terms and conditions of version 3 of the GNU General Public+License, supplemented by the additional permissions listed below.++ 0. Additional Definitions.++ As used herein, "this License" refers to version 3 of the GNU Lesser+General Public License, and the "GNU GPL" refers to version 3 of the GNU+General Public License.++ "The Library" refers to a covered work governed by this License,+other than an Application or a Combined Work as defined below.++ An "Application" is any work that makes use of an interface provided+by the Library, but which is not otherwise based on the Library.+Defining a subclass of a class defined by the Library is deemed a mode+of using an interface provided by the Library.++ A "Combined Work" is a work produced by combining or linking an+Application with the Library. The particular version of the Library+with which the Combined Work was made is also called the "Linked+Version".++ The "Minimal Corresponding Source" for a Combined Work means the+Corresponding Source for the Combined Work, excluding any source code+for portions of the Combined Work that, considered in isolation, are+based on the Application, and not on the Linked Version.++ The "Corresponding Application Code" for a Combined Work means the+object code and/or source code for the Application, including any data+and utility programs needed for reproducing the Combined Work from the+Application, but excluding the System Libraries of the Combined Work.++ 1. Exception to Section 3 of the GNU GPL.++ You may convey a covered work under sections 3 and 4 of this License+without being bound by section 3 of the GNU GPL.++ 2. Conveying Modified Versions.++ If you modify a copy of the Library, and, in your modifications, a+facility refers to a function or data to be supplied by an Application+that uses the facility (other than as an argument passed when the+facility is invoked), then you may convey a copy of the modified+version:++ a) under this License, provided that you make a good faith effort to+ ensure that, in the event an Application does not supply the+ function or data, the facility still operates, and performs+ whatever part of its purpose remains meaningful, or++ b) under the GNU GPL, with none of the additional permissions of+ this License applicable to that copy.++ 3. Object Code Incorporating Material from Library Header Files.++ The object code form of an Application may incorporate material from+a header file that is part of the Library. You may convey such object+code under terms of your choice, provided that, if the incorporated+material is not limited to numerical parameters, data structure+layouts and accessors, or small macros, inline functions and templates+(ten or fewer lines in length), you do both of the following:++ a) Give prominent notice with each copy of the object code that the+ Library is used in it and that the Library and its use are+ covered by this License.++ b) Accompany the object code with a copy of the GNU GPL and this license+ document.++ 4. Combined Works.++ You may convey a Combined Work under terms of your choice that,+taken together, effectively do not restrict modification of the+portions of the Library contained in the Combined Work and reverse+engineering for debugging such modifications, if you also do each of+the following:++ a) Give prominent notice with each copy of the Combined Work that+ the Library is used in it and that the Library and its use are+ covered by this License.++ b) Accompany the Combined Work with a copy of the GNU GPL and this license+ document.++ c) For a Combined Work that displays copyright notices during+ execution, include the copyright notice for the Library among+ these notices, as well as a reference directing the user to the+ copies of the GNU GPL and this license document.++ d) Do one of the following:++ 0) Convey the Minimal Corresponding Source under the terms of this+ License, and the Corresponding Application Code in a form+ suitable for, and under terms that permit, the user to+ recombine or relink the Application with a modified version of+ the Linked Version to produce a modified Combined Work, in the+ manner specified by section 6 of the GNU GPL for conveying+ Corresponding Source.++ 1) Use a suitable shared library mechanism for linking with the+ Library. A suitable mechanism is one that (a) uses at run time+ a copy of the Library already present on the user's computer+ system, and (b) will operate properly with a modified version+ of the Library that is interface-compatible with the Linked+ Version.++ e) Provide Installation Information, but only if you would otherwise+ be required to provide such information under section 6 of the+ GNU GPL, and only to the extent that such information is+ necessary to install and execute a modified version of the+ Combined Work produced by recombining or relinking the+ Application with a modified version of the Linked Version. (If+ you use option 4d0, the Installation Information must accompany+ the Minimal Corresponding Source and Corresponding Application+ Code. If you use option 4d1, you must provide the Installation+ Information in the manner specified by section 6 of the GNU GPL+ for conveying Corresponding Source.)++ 5. Combined Libraries.++ You may place library facilities that are a work based on the+Library side by side in a single library together with other library+facilities that are not Applications and are not covered by this+License, and convey such a combined library under terms of your+choice, if you do both of the following:++ a) Accompany the combined library with a copy of the same work based+ on the Library, uncombined with any other library facilities,+ conveyed under the terms of this License.++ b) Give prominent notice with the combined library that part of it+ is a work based on the Library, and explaining where to find the+ accompanying uncombined form of the same work.++ 6. Revised Versions of the GNU Lesser General Public License.++ The Free Software Foundation may publish revised and/or new versions+of the GNU Lesser General Public License from time to time. Such new+versions will be similar in spirit to the present version, but may+differ in detail to address new problems or concerns.++ Each version is given a distinguishing version number. If the+Library as you received it specifies that a certain numbered version+of the GNU Lesser General Public License "or any later version"+applies to it, you have the option of following the terms and+conditions either of that published version or of any later version+published by the Free Software Foundation. If the Library as you+received it does not specify a version number of the GNU Lesser+General Public License, you may choose any version of the GNU Lesser+General Public License ever published by the Free Software Foundation.++ If the Library as you received it specifies that a proxy can decide+whether future versions of the GNU Lesser General Public License shall+apply, that proxy's public statement of acceptance of any version is+permanent authorization for you to choose that version for the+Library.
@@ -0,0 +1,1632 @@+# Doxyfile 1.7.1 -*- conf -*-++# This file describes the settings to be used by the documentation system+# doxygen (www.doxygen.org) for a project+#+# All text after a hash (#) is considered a comment and will be ignored+# The format is:+# TAG = value [value, ...]+# For lists items can also be appended using:+# TAG += value [value, ...]+# Values that contain spaces should be placed between quotes (" ")++#---------------------------------------------------------------------------+# Project related configuration options+#---------------------------------------------------------------------------++# This tag specifies the encoding used for all characters in the config file+# that follow. The default is UTF-8 which is also the encoding used for all+# text before the first occurrence of this tag. Doxygen uses libiconv (or the+# iconv built into libc) for the transcoding. See+# http://www.gnu.org/software/libiconv for the list of possible encodings.++DOXYFILE_ENCODING = UTF-8++# The PROJECT_NAME tag is a single word (or a sequence of words surrounded+# by quotes) that should identify the project.++PROJECT_NAME = $(PROJECT)++# The PROJECT_NUMBER tag can be used to enter a project or revision number.+# This could be handy for archiving the generated documentation or+# if some version control system is used.++PROJECT_NUMBER = $(VERSION)++# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute)+# base path where the generated documentation will be put.+# If a relative path is entered, it will be relative to the location+# where doxygen was started. If left blank the current directory will be used.++OUTPUT_DIRECTORY = $(DOCDIR)++# If the CREATE_SUBDIRS tag is set to YES, then doxygen will create+# 4096 sub-directories (in 2 levels) under the output directory of each output+# format and will distribute the generated files over these directories.+# Enabling this option can be useful when feeding doxygen a huge amount of+# source files, where putting all generated files in the same directory would+# otherwise cause performance problems for the file system.++CREATE_SUBDIRS = NO++# The OUTPUT_LANGUAGE tag is used to specify the language in which all+# documentation generated by doxygen is written. Doxygen will use this+# information to generate all constant output in the proper language.+# The default language is English, other supported languages are:+# Afrikaans, Arabic, Brazilian, Catalan, Chinese, Chinese-Traditional,+# Croatian, Czech, Danish, Dutch, Esperanto, Farsi, Finnish, French, German,+# Greek, Hungarian, Italian, Japanese, Japanese-en (Japanese with English+# messages), Korean, Korean-en, Lithuanian, Norwegian, Macedonian, Persian,+# Polish, Portuguese, Romanian, Russian, Serbian, Serbian-Cyrilic, Slovak,+# Slovene, Spanish, Swedish, Ukrainian, and Vietnamese.++OUTPUT_LANGUAGE = English++# If the BRIEF_MEMBER_DESC tag is set to YES (the default) Doxygen will+# include brief member descriptions after the members that are listed in+# the file and class documentation (similar to JavaDoc).+# Set to NO to disable this.++BRIEF_MEMBER_DESC = YES++# If the REPEAT_BRIEF tag is set to YES (the default) Doxygen will prepend+# the brief description of a member or function before the detailed description.+# Note: if both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the+# brief descriptions will be completely suppressed.++REPEAT_BRIEF = YES++# This tag implements a quasi-intelligent brief description abbreviator+# that is used to form the text in various listings. Each string+# in this list, if found as the leading text of the brief description, will be+# stripped from the text and the result after processing the whole list, is+# used as the annotated text. Otherwise, the brief description is used as-is.+# If left blank, the following values are used ("$name" is automatically+# replaced with the name of the entity): "The $name class" "The $name widget"+# "The $name file" "is" "provides" "specifies" "contains"+# "represents" "a" "an" "the"++ABBREVIATE_BRIEF = ++# If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then+# Doxygen will generate a detailed section even if there is only a brief+# description.++ALWAYS_DETAILED_SEC = YES++# If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all+# inherited members of a class in the documentation of that class as if those+# members were ordinary class members. Constructors, destructors and assignment+# operators of the base classes will not be shown.++INLINE_INHERITED_MEMB = NO++# If the FULL_PATH_NAMES tag is set to YES then Doxygen will prepend the full+# path before files name in the file list and in the header files. If set+# to NO the shortest path that makes the file name unique will be used.++FULL_PATH_NAMES = YES++# If the FULL_PATH_NAMES tag is set to YES then the STRIP_FROM_PATH tag+# can be used to strip a user-defined part of the path. Stripping is+# only done if one of the specified strings matches the left-hand part of+# the path. The tag can be used to show relative paths in the file list.+# If left blank the directory from which doxygen is run is used as the+# path to strip.++STRIP_FROM_PATH =++# The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of+# the path mentioned in the documentation of a class, which tells+# the reader which header file to include in order to use a class.+# If left blank only the name of the header file containing the class+# definition is used. Otherwise one should specify the include paths that+# are normally passed to the compiler using the -I flag.++STRIP_FROM_INC_PATH =++# If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter+# (but less readable) file names. This can be useful is your file systems+# doesn't support long names like on DOS, Mac, or CD-ROM.++SHORT_NAMES = NO++# If the JAVADOC_AUTOBRIEF tag is set to YES then Doxygen+# will interpret the first line (until the first dot) of a JavaDoc-style+# comment as the brief description. If set to NO, the JavaDoc+# comments will behave just like regular Qt-style comments+# (thus requiring an explicit @brief command for a brief description.)++JAVADOC_AUTOBRIEF = NO++# If the QT_AUTOBRIEF tag is set to YES then Doxygen will+# interpret the first line (until the first dot) of a Qt-style+# comment as the brief description. If set to NO, the comments+# will behave just like regular Qt-style comments (thus requiring+# an explicit \brief command for a brief description.)++QT_AUTOBRIEF = NO++# The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make Doxygen+# treat a multi-line C++ special comment block (i.e. a block of //! or ///+# comments) as a brief description. This used to be the default behaviour.+# The new default is to treat a multi-line C++ comment block as a detailed+# description. Set this tag to YES if you prefer the old behaviour instead.++MULTILINE_CPP_IS_BRIEF = NO++# If the INHERIT_DOCS tag is set to YES (the default) then an undocumented+# member inherits the documentation from any documented member that it+# re-implements.++INHERIT_DOCS = YES++# If the SEPARATE_MEMBER_PAGES tag is set to YES, then doxygen will produce+# a new page for each member. If set to NO, the documentation of a member will+# be part of the file/class/namespace that contains it.++SEPARATE_MEMBER_PAGES = NO++# The TAB_SIZE tag can be used to set the number of spaces in a tab.+# Doxygen uses this value to replace tabs by spaces in code fragments.++TAB_SIZE = 8++# This tag can be used to specify a number of aliases that acts+# as commands in the documentation. An alias has the form "name=value".+# For example adding "sideeffect=\par Side Effects:\n" will allow you to+# put the command \sideeffect (or @sideeffect) in the documentation, which+# will result in a user-defined paragraph with heading "Side Effects:".+# You can put \n's in the value part of an alias to insert newlines.++ALIASES = pool="@param pool The pool to allocate from."++# Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C+# sources only. Doxygen will then generate output that is more tailored for C.+# For instance, some of the names that are used will be different. The list+# of all members will be omitted, etc.++OPTIMIZE_OUTPUT_FOR_C = YES++# Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java+# sources only. Doxygen will then generate output that is more tailored for+# Java. For instance, namespaces will be presented as packages, qualified+# scopes will look different, etc.++OPTIMIZE_OUTPUT_JAVA = NO++# Set the OPTIMIZE_FOR_FORTRAN tag to YES if your project consists of Fortran+# sources only. Doxygen will then generate output that is more tailored for+# Fortran.++OPTIMIZE_FOR_FORTRAN = NO++# Set the OPTIMIZE_OUTPUT_VHDL tag to YES if your project consists of VHDL+# sources. Doxygen will then generate output that is tailored for+# VHDL.++OPTIMIZE_OUTPUT_VHDL = NO++# Doxygen selects the parser to use depending on the extension of the files it+# parses. With this tag you can assign which parser to use for a given extension.+# Doxygen has a built-in mapping, but you can override or extend it using this+# tag. The format is ext=language, where ext is a file extension, and language+# is one of the parsers supported by doxygen: IDL, Java, Javascript, CSharp, C,+# C++, D, PHP, Objective-C, Python, Fortran, VHDL, C, C++. For instance to make+# doxygen treat .inc files as Fortran files (default is PHP), and .f files as C+# (default is Fortran), use: inc=Fortran f=C. Note that for custom extensions+# you also need to set FILE_PATTERNS otherwise the files are not read by doxygen.++EXTENSION_MAPPING =++# If you use STL classes (i.e. std::string, std::vector, etc.) but do not want+# to include (a tag file for) the STL sources as input, then you should+# set this tag to YES in order to let doxygen match functions declarations and+# definitions whose arguments contain STL classes (e.g. func(std::string); v.s.+# func(std::string) {}). This also make the inheritance and collaboration+# diagrams that involve STL classes more complete and accurate.++BUILTIN_STL_SUPPORT = NO++# If you use Microsoft's C++/CLI language, you should set this option to YES to+# enable parsing support.++CPP_CLI_SUPPORT = NO++# Set the SIP_SUPPORT tag to YES if your project consists of sip sources only.+# Doxygen will parse them like normal C++ but will assume all classes use public+# instead of private inheritance when no explicit protection keyword is present.++SIP_SUPPORT = NO++# For Microsoft's IDL there are propget and propput attributes to indicate getter+# and setter methods for a property. Setting this option to YES (the default)+# will make doxygen to replace the get and set methods by a property in the+# documentation. This will only work if the methods are indeed getting or+# setting a simple type. If this is not the case, or you want to show the+# methods anyway, you should set this option to NO.++IDL_PROPERTY_SUPPORT = YES++# If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC+# tag is set to YES, then doxygen will reuse the documentation of the first+# member in the group (if any) for the other members of the group. By default+# all members of a group must be documented explicitly.++DISTRIBUTE_GROUP_DOC = NO++# Set the SUBGROUPING tag to YES (the default) to allow class member groups of+# the same type (for instance a group of public functions) to be put as a+# subgroup of that type (e.g. under the Public Functions section). Set it to+# NO to prevent subgrouping. Alternatively, this can be done per class using+# the \nosubgrouping command.++SUBGROUPING = NO++# When TYPEDEF_HIDES_STRUCT is enabled, a typedef of a struct, union, or enum+# is documented as struct, union, or enum with the name of the typedef. So+# typedef struct TypeS {} TypeT, will appear in the documentation as a struct+# with name TypeT. When disabled the typedef will appear as a member of a file,+# namespace, or class. And the struct will be named TypeS. This can typically+# be useful for C code in case the coding convention dictates that all compound+# types are typedef'ed and only the typedef is referenced, never the tag name.++TYPEDEF_HIDES_STRUCT = NO++# The SYMBOL_CACHE_SIZE determines the size of the internal cache use to+# determine which symbols to keep in memory and which to flush to disk.+# When the cache is full, less often used symbols will be written to disk.+# For small to medium size projects (<1000 input files) the default value is+# probably good enough. For larger projects a too small cache size can cause+# doxygen to be busy swapping symbols to and from disk most of the time+# causing a significant performance penality.+# If the system has enough physical memory increasing the cache will improve the+# performance by keeping more symbols in memory. Note that the value works on+# a logarithmic scale so increasing the size by one will rougly double the+# memory usage. The cache size is given by this formula:+# 2^(16+SYMBOL_CACHE_SIZE). The valid range is 0..9, the default is 0,+# corresponding to a cache size of 2^16 = 65536 symbols++SYMBOL_CACHE_SIZE = 0++#---------------------------------------------------------------------------+# Build related configuration options+#---------------------------------------------------------------------------++# If the EXTRACT_ALL tag is set to YES doxygen will assume all entities in+# documentation are documented, even if no documentation was available.+# Private class members and static file members will be hidden unless+# the EXTRACT_PRIVATE and EXTRACT_STATIC tags are set to YES++EXTRACT_ALL = $(DEVDOC)++# If the EXTRACT_PRIVATE tag is set to YES all private members of a class+# will be included in the documentation.++EXTRACT_PRIVATE = $(DEVDOC)++# If the EXTRACT_STATIC tag is set to YES all static members of a file+# will be included in the documentation.++EXTRACT_STATIC = YES +# When DEVDOC=NO, we only scan the headers, and want to document static +# inline functions.++# If the EXTRACT_LOCAL_CLASSES tag is set to YES classes (and structs)+# defined locally in source files will be included in the documentation.+# If set to NO only classes defined in header files are included.++EXTRACT_LOCAL_CLASSES = $(DEVDOC)++# This flag is only useful for Objective-C code. When set to YES local+# methods, which are defined in the implementation section but not in+# the interface are included in the documentation.+# If set to NO (the default) only methods in the interface are included.++EXTRACT_LOCAL_METHODS = NO++# If this flag is set to YES, the members of anonymous namespaces will be+# extracted and appear in the documentation as a namespace called+# 'anonymous_namespace{file}', where file will be replaced with the base+# name of the file that contains the anonymous namespace. By default+# anonymous namespace are hidden.++EXTRACT_ANON_NSPACES = NO++# If the HIDE_UNDOC_MEMBERS tag is set to YES, Doxygen will hide all+# undocumented members of documented classes, files or namespaces.+# If set to NO (the default) these members will be included in the+# various overviews, but no documentation section is generated.+# This option has no effect if EXTRACT_ALL is enabled.++HIDE_UNDOC_MEMBERS = NO++# If the HIDE_UNDOC_CLASSES tag is set to YES, Doxygen will hide all+# undocumented classes that are normally visible in the class hierarchy.+# If set to NO (the default) these classes will be included in the various+# overviews. This option has no effect if EXTRACT_ALL is enabled.++HIDE_UNDOC_CLASSES = NO++# If the HIDE_FRIEND_COMPOUNDS tag is set to YES, Doxygen will hide all+# friend (class|struct|union) declarations.+# If set to NO (the default) these declarations will be included in the+# documentation.++HIDE_FRIEND_COMPOUNDS = NO++# If the HIDE_IN_BODY_DOCS tag is set to YES, Doxygen will hide any+# documentation blocks found inside the body of a function.+# If set to NO (the default) these blocks will be appended to the+# function's detailed documentation block.++HIDE_IN_BODY_DOCS = NO++# The INTERNAL_DOCS tag determines if documentation+# that is typed after a \internal command is included. If the tag is set+# to NO (the default) then the documentation will be excluded.+# Set it to YES to include the internal documentation.++INTERNAL_DOCS = $(DEVDOC)++# If the CASE_SENSE_NAMES tag is set to NO then Doxygen will only generate+# file names in lower-case letters. If set to YES upper-case letters are also+# allowed. This is useful if you have classes or files whose names only differ+# in case and if your file system supports case sensitive file names. Windows+# and Mac users are advised to set this option to NO.++CASE_SENSE_NAMES = YES++# If the HIDE_SCOPE_NAMES tag is set to NO (the default) then Doxygen+# will show members with their full class and namespace scopes in the+# documentation. If set to YES the scope will be hidden.++HIDE_SCOPE_NAMES = NO++# If the SHOW_INCLUDE_FILES tag is set to YES (the default) then Doxygen+# will put a list of the files that are included by a file in the documentation+# of that file.++SHOW_INCLUDE_FILES = $(DEVDOC)++# If the FORCE_LOCAL_INCLUDES tag is set to YES then Doxygen+# will list include files with double quotes in the documentation+# rather than with sharp brackets.++FORCE_LOCAL_INCLUDES = NO++# If the INLINE_INFO tag is set to YES (the default) then a tag [inline]+# is inserted in the documentation for inline members.++INLINE_INFO = YES++# If the SORT_MEMBER_DOCS tag is set to YES (the default) then doxygen+# will sort the (detailed) documentation of file and class members+# alphabetically by member name. If set to NO the members will appear in+# declaration order.++SORT_MEMBER_DOCS = NO++# If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the+# brief documentation of file, namespace and class members alphabetically+# by member name. If set to NO (the default) the members will appear in+# declaration order.++SORT_BRIEF_DOCS = NO++# If the SORT_MEMBERS_CTORS_1ST tag is set to YES then doxygen+# will sort the (brief and detailed) documentation of class members so that+# constructors and destructors are listed first. If set to NO (the default)+# the constructors will appear in the respective orders defined by+# SORT_MEMBER_DOCS and SORT_BRIEF_DOCS.+# This tag will be ignored for brief docs if SORT_BRIEF_DOCS is set to NO+# and ignored for detailed docs if SORT_MEMBER_DOCS is set to NO.++SORT_MEMBERS_CTORS_1ST = NO++# If the SORT_GROUP_NAMES tag is set to YES then doxygen will sort the+# hierarchy of group names into alphabetical order. If set to NO (the default)+# the group names will appear in their defined order.++SORT_GROUP_NAMES = NO++# If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be+# sorted by fully-qualified names, including namespaces. If set to+# NO (the default), the class list will be sorted only by class name,+# not including the namespace part.+# Note: This option is not very useful if HIDE_SCOPE_NAMES is set to YES.+# Note: This option applies only to the class list, not to the+# alphabetical list.++SORT_BY_SCOPE_NAME = NO++# The GENERATE_TODOLIST tag can be used to enable (YES) or+# disable (NO) the todo list. This list is created by putting \todo+# commands in the documentation.++GENERATE_TODOLIST = YES++# The GENERATE_TESTLIST tag can be used to enable (YES) or+# disable (NO) the test list. This list is created by putting \test+# commands in the documentation.++GENERATE_TESTLIST = YES++# The GENERATE_BUGLIST tag can be used to enable (YES) or+# disable (NO) the bug list. This list is created by putting \bug+# commands in the documentation.++GENERATE_BUGLIST = YES++# The GENERATE_DEPRECATEDLIST tag can be used to enable (YES) or+# disable (NO) the deprecated list. This list is created by putting+# \deprecated commands in the documentation.++GENERATE_DEPRECATEDLIST= YES++# The ENABLED_SECTIONS tag can be used to enable conditional+# documentation sections, marked by \if sectionname ... \endif.++ENABLED_SECTIONS =++# The MAX_INITIALIZER_LINES tag determines the maximum number of lines+# the initial value of a variable or define consists of for it to appear in+# the documentation. If the initializer consists of more lines than specified+# here it will be hidden. Use a value of 0 to hide initializers completely.+# The appearance of the initializer of individual variables and defines in the+# documentation can be controlled using \showinitializer or \hideinitializer+# command in the documentation regardless of this setting.++MAX_INITIALIZER_LINES = 0 # hide by default++# Set the SHOW_USED_FILES tag to NO to disable the list of files generated+# at the bottom of the documentation of classes and structs. If set to YES the+# list will mention the files that were used to generate the documentation.++SHOW_USED_FILES = YES++# If the sources in your project are distributed over multiple directories+# then setting the SHOW_DIRECTORIES tag to YES will show the directory hierarchy+# in the documentation. The default is NO.++SHOW_DIRECTORIES = YES++# Set the SHOW_FILES tag to NO to disable the generation of the Files page.+# This will remove the Files entry from the Quick Index and from the+# Folder Tree View (if specified). The default is YES.++SHOW_FILES = YES++# Set the SHOW_NAMESPACES tag to NO to disable the generation of the+# Namespaces page.+# This will remove the Namespaces entry from the Quick Index+# and from the Folder Tree View (if specified). The default is YES.++SHOW_NAMESPACES = YES++# The FILE_VERSION_FILTER tag can be used to specify a program or script that+# doxygen should invoke to get the current version for each file (typically from+# the version control system). Doxygen will invoke the program by executing (via+# popen()) the command <command> <input-file>, where <command> is the value of+# the FILE_VERSION_FILTER tag, and <input-file> is the name of an input file+# provided by doxygen. Whatever the program writes to standard output+# is used as the file version. See the manual for examples.++FILE_VERSION_FILTER =++# The LAYOUT_FILE tag can be used to specify a layout file which will be parsed+# by doxygen. The layout file controls the global structure of the generated+# output files in an output format independent way. The create the layout file+# that represents doxygen's defaults, run doxygen with the -l option.+# You can optionally specify a file name after the option, if omitted+# DoxygenLayout.xml will be used as the name of the layout file.++LAYOUT_FILE = DoxygenLayout.xml++#---------------------------------------------------------------------------+# configuration options related to warning and progress messages+#---------------------------------------------------------------------------++# The QUIET tag can be used to turn on/off the messages that are generated+# by doxygen. Possible values are YES and NO. If left blank NO is used.++QUIET = NO++# The WARNINGS tag can be used to turn on/off the warning messages that are+# generated by doxygen. Possible values are YES and NO. If left blank+# NO is used.++WARNINGS = YES++# If WARN_IF_UNDOCUMENTED is set to YES, then doxygen will generate warnings+# for undocumented members. If EXTRACT_ALL is set to YES then this flag will+# automatically be disabled.++WARN_IF_UNDOCUMENTED = NO++# If WARN_IF_DOC_ERROR is set to YES, doxygen will generate warnings for+# potential errors in the documentation, such as not documenting some+# parameters in a documented function, or documenting parameters that+# don't exist or using markup commands wrongly.++WARN_IF_DOC_ERROR = YES++# This WARN_NO_PARAMDOC option can be abled to get warnings for+# functions that are documented, but have no documentation for their parameters+# or return value. If set to NO (the default) doxygen will only warn about+# wrong or incomplete parameter documentation, but not about the absence of+# documentation.++WARN_NO_PARAMDOC = NO++# The WARN_FORMAT tag determines the format of the warning messages that+# doxygen can produce. The string should contain the $file, $line, and $text+# tags, which will be replaced by the file and line number from which the+# warning originated and the warning text. Optionally the format may contain+# $version, which will be replaced by the version of the file (if it could+# be obtained via FILE_VERSION_FILTER)++WARN_FORMAT = "$file:$line: $text"++# The WARN_LOGFILE tag can be used to specify a file to which warning+# and error messages should be written. If left blank the output is written+# to stderr.++WARN_LOGFILE =++#---------------------------------------------------------------------------+# configuration options related to the input files+#---------------------------------------------------------------------------++# The INPUT tag can be used to specify the files and/or directories that contain+# documented source files. You may enter file names like "myfile.cpp" or+# directories like "/usr/src/myproject". Separate the files or directories+# with spaces.++INPUT = $(INPUT)++# This tag can be used to specify the character encoding of the source files+# that doxygen parses. Internally doxygen uses the UTF-8 encoding, which is+# also the default input encoding. Doxygen uses libiconv (or the iconv built+# into libc) for the transcoding. See http://www.gnu.org/software/libiconv for+# the list of possible encodings.++INPUT_ENCODING = UTF-8++# If the value of the INPUT tag contains directories, you can use the+# FILE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp+# and *.h) to filter out the source-files in the directories. If left+# blank the following patterns are tested:+# *.c *.cc *.cxx *.cpp *.c++ *.java *.ii *.ixx *.ipp *.i++ *.inl *.h *.hh *.hxx+# *.hpp *.h++ *.idl *.odl *.cs *.php *.php3 *.inc *.m *.mm *.py *.f90++FILE_PATTERNS =++# The RECURSIVE tag can be used to turn specify whether or not subdirectories+# should be searched for input files as well. Possible values are YES and NO.+# If left blank NO is used.++RECURSIVE = YES++# The EXCLUDE tag can be used to specify files and/or directories that should+# excluded from the INPUT source files. This way you can easily exclude a+# subdirectory from a directory tree whose root is specified with the INPUT tag.++EXCLUDE =++# The EXCLUDE_SYMLINKS tag can be used select whether or not files or+# directories that are symbolic links (a Unix filesystem feature) are excluded+# from the input.++EXCLUDE_SYMLINKS = NO++# If the value of the INPUT tag contains directories, you can use the+# EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude+# certain files from those directories. Note that the wildcards are matched+# against the file with absolute path, so to exclude all test directories+# for example use the pattern */test/*++EXCLUDE_PATTERNS =++# The EXCLUDE_SYMBOLS tag can be used to specify one or more symbol names+# (namespaces, classes, functions, etc.) that should be excluded from the+# output. The symbol name can be a fully qualified name, a word, or if the+# wildcard * is used, a substring. Examples: ANamespace, AClass,+# AClass::ANamespace, ANamespace::*Test++EXCLUDE_SYMBOLS =++# The EXAMPLE_PATH tag can be used to specify one or more files or+# directories that contain example code fragments that are included (see+# the \include command).++EXAMPLE_PATH =++# If the value of the EXAMPLE_PATH tag contains directories, you can use the+# EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp+# and *.h) to filter out the source-files in the directories. If left+# blank all files are included.++EXAMPLE_PATTERNS =++# If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be+# searched for input files to be used with the \include or \dontinclude+# commands irrespective of the value of the RECURSIVE tag.+# Possible values are YES and NO. If left blank NO is used.++EXAMPLE_RECURSIVE = NO++# The IMAGE_PATH tag can be used to specify one or more files or+# directories that contain image that are included in the documentation (see+# the \image command).++IMAGE_PATH =++# The INPUT_FILTER tag can be used to specify a program that doxygen should+# invoke to filter for each input file. Doxygen will invoke the filter program+# by executing (via popen()) the command <filter> <input-file>, where <filter>+# is the value of the INPUT_FILTER tag, and <input-file> is the name of an+# input file. Doxygen will then use the output that the filter program writes+# to standard output.+# If FILTER_PATTERNS is specified, this tag will be+# ignored.++INPUT_FILTER =++# The FILTER_PATTERNS tag can be used to specify filters on a per file pattern+# basis.+# Doxygen will compare the file name with each pattern and apply the+# filter if there is a match.+# The filters are a list of the form:+# pattern=filter (like *.cpp=my_cpp_filter). See INPUT_FILTER for further+# info on how filters are used. If FILTER_PATTERNS is empty, INPUT_FILTER+# is applied to all files.++FILTER_PATTERNS =++# If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using+# INPUT_FILTER) will be used to filter the input files when producing source+# files to browse (i.e. when SOURCE_BROWSER is set to YES).++FILTER_SOURCE_FILES = NO++#---------------------------------------------------------------------------+# configuration options related to source browsing+#---------------------------------------------------------------------------++# If the SOURCE_BROWSER tag is set to YES then a list of source files will+# be generated. Documented entities will be cross-referenced with these sources.+# Note: To get rid of all source code in the generated output, make sure also+# VERBATIM_HEADERS is set to NO.++SOURCE_BROWSER = $(DEVDOC)++# Setting the INLINE_SOURCES tag to YES will include the body+# of functions and classes directly in the documentation.++INLINE_SOURCES = $(DEVDOC)++# Setting the STRIP_CODE_COMMENTS tag to YES (the default) will instruct+# doxygen to hide any special comment blocks from generated source code+# fragments. Normal C and C++ comments will always remain visible.++STRIP_CODE_COMMENTS = YES++# If the REFERENCED_BY_RELATION tag is set to YES+# then for each documented function all documented+# functions referencing it will be listed.++REFERENCED_BY_RELATION = $(DEVDOC)++# If the REFERENCES_RELATION tag is set to YES+# then for each documented function all documented entities+# called/used by that function will be listed.++REFERENCES_RELATION = $(DEVDOC)++# If the REFERENCES_LINK_SOURCE tag is set to YES (the default)+# and SOURCE_BROWSER tag is set to YES, then the hyperlinks from+# functions in REFERENCES_RELATION and REFERENCED_BY_RELATION lists will+# link to the source code.+# Otherwise they will link to the documentation.++REFERENCES_LINK_SOURCE = $(DEVDOC)++# If the USE_HTAGS tag is set to YES then the references to source code+# will point to the HTML generated by the htags(1) tool instead of doxygen+# built-in source browser. The htags tool is part of GNU's global source+# tagging system (see http://www.gnu.org/software/global/global.html). You+# will need version 4.8.6 or higher.++USE_HTAGS = NO++# If the VERBATIM_HEADERS tag is set to YES (the default) then Doxygen+# will generate a verbatim copy of the header file for each class for+# which an include is specified. Set to NO to disable this.++VERBATIM_HEADERS = NO++#---------------------------------------------------------------------------+# configuration options related to the alphabetical class index+#---------------------------------------------------------------------------++# If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index+# of all compounds will be generated. Enable this if the project+# contains a lot of classes, structs, unions or interfaces.++ALPHABETICAL_INDEX = YES++# If the alphabetical index is enabled (see ALPHABETICAL_INDEX) then+# the COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns+# in which this list will be split (can be a number in the range [1..20])++COLS_IN_ALPHA_INDEX = 5++# In case all classes in a project start with a common prefix, all+# classes will be put under the same header in the alphabetical index.+# The IGNORE_PREFIX tag can be used to specify one or more prefixes that+# should be ignored while generating the index headers.++IGNORE_PREFIX =++#---------------------------------------------------------------------------+# configuration options related to the HTML output+#---------------------------------------------------------------------------++# If the GENERATE_HTML tag is set to YES (the default) Doxygen will+# generate HTML output.++GENERATE_HTML = YES++# The HTML_OUTPUT tag is used to specify where the HTML docs will be put.+# If a relative path is entered the value of OUTPUT_DIRECTORY will be+# put in front of it. If left blank `html' will be used as the default path.++HTML_OUTPUT = html++# The HTML_FILE_EXTENSION tag can be used to specify the file extension for+# each generated HTML page (for example: .htm,.php,.asp). If it is left blank+# doxygen will generate files with .html extension.++HTML_FILE_EXTENSION = .html++# The HTML_HEADER tag can be used to specify a personal HTML header for+# each generated HTML page. If it is left blank doxygen will generate a+# standard header.++HTML_HEADER =++# The HTML_FOOTER tag can be used to specify a personal HTML footer for+# each generated HTML page. If it is left blank doxygen will generate a+# standard footer.++HTML_FOOTER =++# The HTML_STYLESHEET tag can be used to specify a user-defined cascading+# style sheet that is used by each HTML page. It can be used to+# fine-tune the look of the HTML output. If the tag is left blank doxygen+# will generate a default style sheet. Note that doxygen will try to copy+# the style sheet file to the HTML output directory, so don't put your own+# stylesheet in the HTML output directory as well, or it will be erased!++HTML_STYLESHEET =++# The HTML_COLORSTYLE_HUE tag controls the color of the HTML output.+# Doxygen will adjust the colors in the stylesheet and background images+# according to this color. Hue is specified as an angle on a colorwheel,+# see http://en.wikipedia.org/wiki/Hue for more information.+# For instance the value 0 represents red, 60 is yellow, 120 is green,+# 180 is cyan, 240 is blue, 300 purple, and 360 is red again.+# The allowed range is 0 to 359.++HTML_COLORSTYLE_HUE = 220++# The HTML_COLORSTYLE_SAT tag controls the purity (or saturation) of+# the colors in the HTML output. For a value of 0 the output will use+# grayscales only. A value of 255 will produce the most vivid colors.++HTML_COLORSTYLE_SAT = 100++# The HTML_COLORSTYLE_GAMMA tag controls the gamma correction applied to+# the luminance component of the colors in the HTML output. Values below+# 100 gradually make the output lighter, whereas values above 100 make+# the output darker. The value divided by 100 is the actual gamma applied,+# so 80 represents a gamma of 0.8, The value 220 represents a gamma of 2.2,+# and 100 does not change the gamma.++HTML_COLORSTYLE_GAMMA = 80++# If the HTML_TIMESTAMP tag is set to YES then the footer of each generated HTML+# page will contain the date and time when the page was generated. Setting+# this to NO can help when comparing the output of multiple runs.++HTML_TIMESTAMP = YES++# If the HTML_ALIGN_MEMBERS tag is set to YES, the members of classes,+# files or namespaces will be aligned in HTML using tables. If set to+# NO a bullet list will be used.++HTML_ALIGN_MEMBERS = YES++# If the HTML_DYNAMIC_SECTIONS tag is set to YES then the generated HTML+# documentation will contain sections that can be hidden and shown after the+# page has loaded. For this to work a browser that supports+# JavaScript and DHTML is required (for instance Mozilla 1.0+, Firefox+# Netscape 6.0+, Internet explorer 5.0+, Konqueror, or Safari).++HTML_DYNAMIC_SECTIONS = NO++# If the GENERATE_DOCSET tag is set to YES, additional index files+# will be generated that can be used as input for Apple's Xcode 3+# integrated development environment, introduced with OSX 10.5 (Leopard).+# To create a documentation set, doxygen will generate a Makefile in the+# HTML output directory. Running make will produce the docset in that+# directory and running "make install" will install the docset in+# ~/Library/Developer/Shared/Documentation/DocSets so that Xcode will find+# it at startup.+# See http://developer.apple.com/tools/creatingdocsetswithdoxygen.html+# for more information.++GENERATE_DOCSET = NO++# When GENERATE_DOCSET tag is set to YES, this tag determines the name of the+# feed. A documentation feed provides an umbrella under which multiple+# documentation sets from a single provider (such as a company or product suite)+# can be grouped.++DOCSET_FEEDNAME = "Doxygen generated docs"++# When GENERATE_DOCSET tag is set to YES, this tag specifies a string that+# should uniquely identify the documentation set bundle. This should be a+# reverse domain-name style string, e.g. com.mycompany.MyDocSet. Doxygen+# will append .docset to the name.++DOCSET_BUNDLE_ID = org.doxygen.Project++# When GENERATE_PUBLISHER_ID tag specifies a string that should uniquely identify+# the documentation publisher. This should be a reverse domain-name style+# string, e.g. com.mycompany.MyDocSet.documentation.++DOCSET_PUBLISHER_ID = org.doxygen.Publisher++# The GENERATE_PUBLISHER_NAME tag identifies the documentation publisher.++DOCSET_PUBLISHER_NAME = Publisher++# If the GENERATE_HTMLHELP tag is set to YES, additional index files+# will be generated that can be used as input for tools like the+# Microsoft HTML help workshop to generate a compiled HTML help file (.chm)+# of the generated HTML documentation.++GENERATE_HTMLHELP = $(GENERATE_HTMLHELP)++# If the GENERATE_HTMLHELP tag is set to YES, the CHM_FILE tag can+# be used to specify the file name of the resulting .chm file. You+# can add a path in front of the file if the result should not be+# written to the html output directory.++CHM_FILE =++# If the GENERATE_HTMLHELP tag is set to YES, the HHC_LOCATION tag can+# be used to specify the location (absolute path including file name) of+# the HTML help compiler (hhc.exe). If non-empty doxygen will try to run+# the HTML help compiler on the generated index.hhp.++HHC_LOCATION =++# If the GENERATE_HTMLHELP tag is set to YES, the GENERATE_CHI flag+# controls if a separate .chi index file is generated (YES) or that+# it should be included in the master .chm file (NO).++GENERATE_CHI = $(GENERATE_CHI)++# If the GENERATE_HTMLHELP tag is set to YES, the CHM_INDEX_ENCODING+# is used to encode HtmlHelp index (hhk), content (hhc) and project file+# content.++CHM_INDEX_ENCODING =++# If the GENERATE_HTMLHELP tag is set to YES, the BINARY_TOC flag+# controls whether a binary table of contents is generated (YES) or a+# normal table of contents (NO) in the .chm file.++BINARY_TOC = NO++# The TOC_EXPAND flag can be set to YES to add extra items for group members+# to the contents of the HTML help documentation and to the tree view.++TOC_EXPAND = NO++# If the GENERATE_QHP tag is set to YES and both QHP_NAMESPACE and+# QHP_VIRTUAL_FOLDER are set, an additional index file will be generated+# that can be used as input for Qt's qhelpgenerator to generate a+# Qt Compressed Help (.qch) of the generated HTML documentation.++GENERATE_QHP = NO++# If the QHG_LOCATION tag is specified, the QCH_FILE tag can+# be used to specify the file name of the resulting .qch file.+# The path specified is relative to the HTML output folder.++QCH_FILE =++# The QHP_NAMESPACE tag specifies the namespace to use when generating+# Qt Help Project output. For more information please see+# http://doc.trolltech.com/qthelpproject.html#namespace++QHP_NAMESPACE = org.doxygen.Project++# The QHP_VIRTUAL_FOLDER tag specifies the namespace to use when generating+# Qt Help Project output. For more information please see+# http://doc.trolltech.com/qthelpproject.html#virtual-folders++QHP_VIRTUAL_FOLDER = doc++# If QHP_CUST_FILTER_NAME is set, it specifies the name of a custom filter to+# add. For more information please see+# http://doc.trolltech.com/qthelpproject.html#custom-filters++QHP_CUST_FILTER_NAME =++# The QHP_CUST_FILT_ATTRS tag specifies the list of the attributes of the+# custom filter to add. For more information please see+# <a href="http://doc.trolltech.com/qthelpproject.html#custom-filters">+# Qt Help Project / Custom Filters</a>.++QHP_CUST_FILTER_ATTRS =++# The QHP_SECT_FILTER_ATTRS tag specifies the list of the attributes this+# project's+# filter section matches.+# <a href="http://doc.trolltech.com/qthelpproject.html#filter-attributes">+# Qt Help Project / Filter Attributes</a>.++QHP_SECT_FILTER_ATTRS =++# If the GENERATE_QHP tag is set to YES, the QHG_LOCATION tag can+# be used to specify the location of Qt's qhelpgenerator.+# If non-empty doxygen will try to run qhelpgenerator on the generated+# .qhp file.++QHG_LOCATION =++# If the GENERATE_ECLIPSEHELP tag is set to YES, additional index files+# will be generated, which together with the HTML files, form an Eclipse help+# plugin. To install this plugin and make it available under the help contents+# menu in Eclipse, the contents of the directory containing the HTML and XML+# files needs to be copied into the plugins directory of eclipse. The name of+# the directory within the plugins directory should be the same as+# the ECLIPSE_DOC_ID value. After copying Eclipse needs to be restarted before+# the help appears.++GENERATE_ECLIPSEHELP = NO++# A unique identifier for the eclipse help plugin. When installing the plugin+# the directory name containing the HTML and XML files should also have+# this name.++ECLIPSE_DOC_ID = org.doxygen.Project++# The DISABLE_INDEX tag can be used to turn on/off the condensed index at+# top of each HTML page. The value NO (the default) enables the index and+# the value YES disables it.++DISABLE_INDEX = NO++# This tag can be used to set the number of enum values (range [1..20])+# that doxygen will group on one line in the generated HTML documentation.++ENUM_VALUES_PER_LINE = 4++# The GENERATE_TREEVIEW tag is used to specify whether a tree-like index+# structure should be generated to display hierarchical information.+# If the tag value is set to YES, a side panel will be generated+# containing a tree-like index structure (just like the one that+# is generated for HTML Help). For this to work a browser that supports+# JavaScript, DHTML, CSS and frames is required (i.e. any modern browser).+# Windows users are probably better off using the HTML help feature.++GENERATE_TREEVIEW = NO++# By enabling USE_INLINE_TREES, doxygen will generate the Groups, Directories,+# and Class Hierarchy pages using a tree view instead of an ordered list.++USE_INLINE_TREES = NO++# If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be+# used to set the initial width (in pixels) of the frame in which the tree+# is shown.++TREEVIEW_WIDTH = 250++# When the EXT_LINKS_IN_WINDOW option is set to YES doxygen will open+# links to external symbols imported via tag files in a separate window.++EXT_LINKS_IN_WINDOW = NO++# Use this tag to change the font size of Latex formulas included+# as images in the HTML documentation. The default is 10. Note that+# when you change the font size after a successful doxygen run you need+# to manually remove any form_*.png images from the HTML output directory+# to force them to be regenerated.++FORMULA_FONTSIZE = 10++# Use the FORMULA_TRANPARENT tag to determine whether or not the images+# generated for formulas are transparent PNGs. Transparent PNGs are+# not supported properly for IE 6.0, but are supported on all modern browsers.+# Note that when changing this option you need to delete any form_*.png files+# in the HTML output before the changes have effect.++FORMULA_TRANSPARENT = YES++# When the SEARCHENGINE tag is enabled doxygen will generate a search box+# for the HTML output. The underlying search engine uses javascript+# and DHTML and should work on any modern browser. Note that when using+# HTML help (GENERATE_HTMLHELP), Qt help (GENERATE_QHP), or docsets+# (GENERATE_DOCSET) there is already a search function so this one should+# typically be disabled. For large projects the javascript based search engine+# can be slow, then enabling SERVER_BASED_SEARCH may provide a better solution.++SEARCHENGINE = YES++# When the SERVER_BASED_SEARCH tag is enabled the search engine will be+# implemented using a PHP enabled web server instead of at the web client+# using Javascript. Doxygen will generate the search PHP script and index+# file to put on the web server. The advantage of the server+# based approach is that it scales better to large projects and allows+# full text search. The disadvances is that it is more difficult to setup+# and does not have live searching capabilities.++SERVER_BASED_SEARCH = NO++#---------------------------------------------------------------------------+# configuration options related to the LaTeX output+#---------------------------------------------------------------------------++# If the GENERATE_LATEX tag is set to YES (the default) Doxygen will+# generate Latex output.++GENERATE_LATEX = $(GENERATE_LATEX)++# The LATEX_OUTPUT tag is used to specify where the LaTeX docs will be put.+# If a relative path is entered the value of OUTPUT_DIRECTORY will be+# put in front of it. If left blank `latex' will be used as the default path.++LATEX_OUTPUT = latex++# The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be+# invoked. If left blank `latex' will be used as the default command name.+# Note that when enabling USE_PDFLATEX this option is only used for+# generating bitmaps for formulas in the HTML output, but not in the+# Makefile that is written to the output directory.++LATEX_CMD_NAME = latex++# The MAKEINDEX_CMD_NAME tag can be used to specify the command name to+# generate index for LaTeX. If left blank `makeindex' will be used as the+# default command name.++MAKEINDEX_CMD_NAME = makeindex++# If the COMPACT_LATEX tag is set to YES Doxygen generates more compact+# LaTeX documents. This may be useful for small projects and may help to+# save some trees in general.++COMPACT_LATEX = NO++# The PAPER_TYPE tag can be used to set the paper type that is used+# by the printer. Possible values are: a4, a4wide, letter, legal and+# executive. If left blank a4wide will be used.++PAPER_TYPE = $(PAPER_SIZE)++# The EXTRA_PACKAGES tag can be to specify one or more names of LaTeX+# packages that should be included in the LaTeX output.++EXTRA_PACKAGES =++# The LATEX_HEADER tag can be used to specify a personal LaTeX header for+# the generated latex document. The header should contain everything until+# the first chapter. If it is left blank doxygen will generate a+# standard header. Notice: only use this tag if you know what you are doing!++LATEX_HEADER =++# If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated+# is prepared for conversion to pdf (using ps2pdf). The pdf file will+# contain links (just like the HTML output) instead of page references+# This makes the output suitable for online browsing using a pdf viewer.++PDF_HYPERLINKS = YES++# If the USE_PDFLATEX tag is set to YES, pdflatex will be used instead of+# plain latex in the generated Makefile. Set this option to YES to get a+# higher quality PDF documentation.++USE_PDFLATEX = YES++# If the LATEX_BATCHMODE tag is set to YES, doxygen will add the \\batchmode.+# command to the generated LaTeX files. This will instruct LaTeX to keep+# running if errors occur, instead of asking the user for help.+# This option is also used when generating formulas in HTML.++LATEX_BATCHMODE = NO++# If LATEX_HIDE_INDICES is set to YES then doxygen will not+# include the index chapters (such as File Index, Compound Index, etc.)+# in the output.++LATEX_HIDE_INDICES = NO++# If LATEX_SOURCE_CODE is set to YES then doxygen will include+# source code with syntax highlighting in the LaTeX output.+# Note that which sources are shown also depends on other settings+# such as SOURCE_BROWSER.++LATEX_SOURCE_CODE = NO++#---------------------------------------------------------------------------+# configuration options related to the RTF output+#---------------------------------------------------------------------------++# If the GENERATE_RTF tag is set to YES Doxygen will generate RTF output+# The RTF output is optimized for Word 97 and may not look very pretty with+# other RTF readers or editors.++GENERATE_RTF = $(GENERATE_RTF)++# The RTF_OUTPUT tag is used to specify where the RTF docs will be put.+# If a relative path is entered the value of OUTPUT_DIRECTORY will be+# put in front of it. If left blank `rtf' will be used as the default path.++RTF_OUTPUT = rtf++# If the COMPACT_RTF tag is set to YES Doxygen generates more compact+# RTF documents. This may be useful for small projects and may help to+# save some trees in general.++COMPACT_RTF = NO++# If the RTF_HYPERLINKS tag is set to YES, the RTF that is generated+# will contain hyperlink fields. The RTF file will+# contain links (just like the HTML output) instead of page references.+# This makes the output suitable for online browsing using WORD or other+# programs which support those fields.+# Note: wordpad (write) and others do not support links.++RTF_HYPERLINKS = NO++# Load stylesheet definitions from file. Syntax is similar to doxygen's+# config file, i.e. a series of assignments. You only have to provide+# replacements, missing definitions are set to their default value.++RTF_STYLESHEET_FILE =++# Set optional variables used in the generation of an rtf document.+# Syntax is similar to doxygen's config file.++RTF_EXTENSIONS_FILE =++#---------------------------------------------------------------------------+# configuration options related to the man page output+#---------------------------------------------------------------------------++# If the GENERATE_MAN tag is set to YES (the default) Doxygen will+# generate man pages++GENERATE_MAN = $(GENERATE_MAN)++# The MAN_OUTPUT tag is used to specify where the man pages will be put.+# If a relative path is entered the value of OUTPUT_DIRECTORY will be+# put in front of it. If left blank `man' will be used as the default path.++MAN_OUTPUT = man++# The MAN_EXTENSION tag determines the extension that is added to+# the generated man pages (default is the subroutine's section .3)++MAN_EXTENSION = .3++# If the MAN_LINKS tag is set to YES and Doxygen generates man output,+# then it will generate one additional man file for each entity+# documented in the real man page(s). These additional files+# only source the real man page, but without them the man command+# would be unable to find the correct page. The default is NO.++MAN_LINKS = NO++#---------------------------------------------------------------------------+# configuration options related to the XML output+#---------------------------------------------------------------------------++# If the GENERATE_XML tag is set to YES Doxygen will+# generate an XML file that captures the structure of+# the code including all documentation.++GENERATE_XML = $(GENERATE_XML)++# The XML_OUTPUT tag is used to specify where the XML pages will be put.+# If a relative path is entered the value of OUTPUT_DIRECTORY will be+# put in front of it. If left blank `xml' will be used as the default path.++XML_OUTPUT = xml++# The XML_SCHEMA tag can be used to specify an XML schema,+# which can be used by a validating XML parser to check the+# syntax of the XML files.++XML_SCHEMA =++# The XML_DTD tag can be used to specify an XML DTD,+# which can be used by a validating XML parser to check the+# syntax of the XML files.++XML_DTD =++# If the XML_PROGRAMLISTING tag is set to YES Doxygen will+# dump the program listings (including syntax highlighting+# and cross-referencing information) to the XML output. Note that+# enabling this will significantly increase the size of the XML output.++XML_PROGRAMLISTING = YES++#---------------------------------------------------------------------------+# configuration options for the AutoGen Definitions output+#---------------------------------------------------------------------------++# If the GENERATE_AUTOGEN_DEF tag is set to YES Doxygen will+# generate an AutoGen Definitions (see autogen.sf.net) file+# that captures the structure of the code including all+# documentation. Note that this feature is still experimental+# and incomplete at the moment.++GENERATE_AUTOGEN_DEF = NO++#---------------------------------------------------------------------------+# configuration options related to the Perl module output+#---------------------------------------------------------------------------++# If the GENERATE_PERLMOD tag is set to YES Doxygen will+# generate a Perl module file that captures the structure of+# the code including all documentation. Note that this+# feature is still experimental and incomplete at the+# moment.++GENERATE_PERLMOD = NO++# If the PERLMOD_LATEX tag is set to YES Doxygen will generate+# the necessary Makefile rules, Perl scripts and LaTeX code to be able+# to generate PDF and DVI output from the Perl module output.++PERLMOD_LATEX = NO++# If the PERLMOD_PRETTY tag is set to YES the Perl module output will be+# nicely formatted so it can be parsed by a human reader.+# This is useful+# if you want to understand what is going on.+# On the other hand, if this+# tag is set to NO the size of the Perl module output will be much smaller+# and Perl will parse it just the same.++PERLMOD_PRETTY = YES++# The names of the make variables in the generated doxyrules.make file+# are prefixed with the string contained in PERLMOD_MAKEVAR_PREFIX.+# This is useful so different doxyrules.make files included by the same+# Makefile don't overwrite each other's variables.++PERLMOD_MAKEVAR_PREFIX =++#---------------------------------------------------------------------------+# Configuration options related to the preprocessor+#---------------------------------------------------------------------------++# If the ENABLE_PREPROCESSING tag is set to YES (the default) Doxygen will+# evaluate all C-preprocessor directives found in the sources and include+# files.++ENABLE_PREPROCESSING = YES++# If the MACRO_EXPANSION tag is set to YES Doxygen will expand all macro+# names in the source code. If set to NO (the default) only conditional+# compilation will be performed. Macro expansion can be done in a controlled+# way by setting EXPAND_ONLY_PREDEF to YES.++MACRO_EXPANSION = YES++# If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES+# then the macro expansion is limited to the macros specified with the+# PREDEFINED and EXPAND_AS_DEFINED tags.++EXPAND_ONLY_PREDEF = YES++# If the SEARCH_INCLUDES tag is set to YES (the default) the includes files+# in the INCLUDE_PATH (see below) will be search if a #include is found.++SEARCH_INCLUDES = YES++# The INCLUDE_PATH tag can be used to specify one or more directories that+# contain include files that are not input files but should be processed by+# the preprocessor.++INCLUDE_PATH =++# You can use the INCLUDE_FILE_PATTERNS tag to specify one or more wildcard+# patterns (like *.h and *.hpp) to filter out the header-files in the+# directories. If left blank, the patterns specified with FILE_PATTERNS will+# be used.++INCLUDE_FILE_PATTERNS =++# The PREDEFINED tag can be used to specify one or more macro names that+# are defined before the preprocessor is started (similar to the -D option of+# gcc). The argument of the tag is a list of macros of the form: name+# or name=definition (no spaces). If the definition and the = are+# omitted =1 is assumed. To prevent a macro definition from being+# undefined via #undef or recursively expanded use the := operator+# instead of the = operator.++PREDEFINED = DOXYGEN=1++# If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then+# this tag can be used to specify a list of macro names that should be expanded.+# The macro definition that is found in the sources will be used.+# Use the PREDEFINED tag if you want to use a different macro definition.++EXPAND_AS_DEFINED = GU_PRIVATE++# If the SKIP_FUNCTION_MACROS tag is set to YES (the default) then+# doxygen's preprocessor will remove all function-like macros that are alone+# on a line, have an all uppercase name, and do not end with a semicolon. Such+# function macros are typically used for boiler-plate code, and will confuse+# the parser if not removed.++SKIP_FUNCTION_MACROS = YES++#---------------------------------------------------------------------------+# Configuration::additions related to external references+#---------------------------------------------------------------------------++# The TAGFILES option can be used to specify one or more tagfiles.+# Optionally an initial location of the external documentation+# can be added for each tagfile. The format of a tag file without+# this location is as follows:+#+# TAGFILES = file1 file2 ...+# Adding location for the tag files is done as follows:+#+# TAGFILES = file1=loc1 "file2 = loc2" ...+# where "loc1" and "loc2" can be relative or absolute paths or+# URLs. If a location is present for each tag, the installdox tool+# does not have to be run to correct the links.+# Note that each tag file must have a unique name+# (where the name does NOT include the path)+# If a tag file is not located in the directory in which doxygen+# is run, you must also specify the path to the tagfile here.++TAGFILES =++# When a file name is specified after GENERATE_TAGFILE, doxygen will create+# a tag file that is based on the input files it reads.++GENERATE_TAGFILE =++# If the ALLEXTERNALS tag is set to YES all external classes will be listed+# in the class index. If set to NO only the inherited external classes+# will be listed.++ALLEXTERNALS = NO++# If the EXTERNAL_GROUPS tag is set to YES all external groups will be listed+# in the modules index. If set to NO, only the current project's groups will+# be listed.++EXTERNAL_GROUPS = YES++# The PERL_PATH should be the absolute path and name of the perl script+# interpreter (i.e. the result of `which perl').++PERL_PATH = /usr/bin/perl++#---------------------------------------------------------------------------+# Configuration options related to the dot tool+#---------------------------------------------------------------------------++# If the CLASS_DIAGRAMS tag is set to YES (the default) Doxygen will+# generate a inheritance diagram (in HTML, RTF and LaTeX) for classes with base+# or super classes. Setting the tag to NO turns the diagrams off. Note that+# this option is superseded by the HAVE_DOT option below. This is only a+# fallback. It is recommended to install and use dot, since it yields more+# powerful graphs.++CLASS_DIAGRAMS = YES++# You can define message sequence charts within doxygen comments using the \msc+# command. Doxygen will then run the mscgen tool (see+# http://www.mcternan.me.uk/mscgen/) to produce the chart and insert it in the+# documentation. The MSCGEN_PATH tag allows you to specify the directory where+# the mscgen tool resides. If left empty the tool is assumed to be found in the+# default search path.++MSCGEN_PATH =++# If set to YES, the inheritance and collaboration graphs will hide+# inheritance and usage relations if the target is undocumented+# or is not a class.++HIDE_UNDOC_RELATIONS = YES++# If you set the HAVE_DOT tag to YES then doxygen will assume the dot tool is+# available from the path. This tool is part of Graphviz, a graph visualization+# toolkit from AT&T and Lucent Bell Labs. The other options in this section+# have no effect if this option is set to NO (the default)++HAVE_DOT = $(HAVE_DOT)++# The DOT_NUM_THREADS specifies the number of dot invocations doxygen is+# allowed to run in parallel. When set to 0 (the default) doxygen will+# base this on the number of processors available in the system. You can set it+# explicitly to a value larger than 0 to get control over the balance+# between CPU load and processing speed.++DOT_NUM_THREADS = 0++# By default doxygen will write a font called FreeSans.ttf to the output+# directory and reference it in all dot files that doxygen generates. This+# font does not include all possible unicode characters however, so when you need+# these (or just want a differently looking font) you can specify the font name+# using DOT_FONTNAME. You need need to make sure dot is able to find the font,+# which can be done by putting it in a standard location or by setting the+# DOTFONTPATH environment variable or by setting DOT_FONTPATH to the directory+# containing the font.++DOT_FONTNAME = FreeSans.ttf++# The DOT_FONTSIZE tag can be used to set the size of the font of dot graphs.+# The default size is 10pt.++DOT_FONTSIZE = 10++# By default doxygen will tell dot to use the output directory to look for the+# FreeSans.ttf font (which doxygen will put there itself). If you specify a+# different font using DOT_FONTNAME you can set the path where dot+# can find it using this tag.++DOT_FONTPATH =++# If the CLASS_GRAPH and HAVE_DOT tags are set to YES then doxygen+# will generate a graph for each documented class showing the direct and+# indirect inheritance relations. Setting this tag to YES will force the+# the CLASS_DIAGRAMS tag to NO.++CLASS_GRAPH = YES++# If the COLLABORATION_GRAPH and HAVE_DOT tags are set to YES then doxygen+# will generate a graph for each documented class showing the direct and+# indirect implementation dependencies (inheritance, containment, and+# class references variables) of the class with other documented classes.++COLLABORATION_GRAPH = YES++# If the GROUP_GRAPHS and HAVE_DOT tags are set to YES then doxygen+# will generate a graph for groups, showing the direct groups dependencies++GROUP_GRAPHS = YES++# If the UML_LOOK tag is set to YES doxygen will generate inheritance and+# collaboration diagrams in a style similar to the OMG's Unified Modeling+# Language.++UML_LOOK = NO++# If set to YES, the inheritance and collaboration graphs will show the+# relations between templates and their instances.++TEMPLATE_RELATIONS = NO++# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDE_GRAPH, and HAVE_DOT+# tags are set to YES then doxygen will generate a graph for each documented+# file showing the direct and indirect include dependencies of the file with+# other documented files.++INCLUDE_GRAPH = $(DEVDOC)++# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDED_BY_GRAPH, and+# HAVE_DOT tags are set to YES then doxygen will generate a graph for each+# documented header file showing the documented files that directly or+# indirectly include this file.++INCLUDED_BY_GRAPH = $(DEVDOC)++# If the CALL_GRAPH and HAVE_DOT options are set to YES then+# doxygen will generate a call dependency graph for every global function+# or class method. Note that enabling this option will significantly increase+# the time of a run. So in most cases it will be better to enable call graphs+# for selected functions only using the \callgraph command.++CALL_GRAPH = NO++# If the CALLER_GRAPH and HAVE_DOT tags are set to YES then+# doxygen will generate a caller dependency graph for every global function+# or class method. Note that enabling this option will significantly increase+# the time of a run. So in most cases it will be better to enable caller+# graphs for selected functions only using the \callergraph command.++CALLER_GRAPH = NO++# If the GRAPHICAL_HIERARCHY and HAVE_DOT tags are set to YES then doxygen+# will graphical hierarchy of all classes instead of a textual one.++GRAPHICAL_HIERARCHY = YES++# If the DIRECTORY_GRAPH, SHOW_DIRECTORIES and HAVE_DOT tags are set to YES+# then doxygen will show the dependencies a directory has on other directories+# in a graphical way. The dependency relations are determined by the #include+# relations between the files in the directories.++DIRECTORY_GRAPH = YES++# The DOT_IMAGE_FORMAT tag can be used to set the image format of the images+# generated by dot. Possible values are png, jpg, or gif+# If left blank png will be used.++DOT_IMAGE_FORMAT = png++# The tag DOT_PATH can be used to specify the path where the dot tool can be+# found. If left blank, it is assumed the dot tool can be found in the path.++DOT_PATH =++# The DOTFILE_DIRS tag can be used to specify one or more directories that+# contain dot files that are included in the documentation (see the+# \dotfile command).++DOTFILE_DIRS =++# The DOT_GRAPH_MAX_NODES tag can be used to set the maximum number of+# nodes that will be shown in the graph. If the number of nodes in a graph+# becomes larger than this value, doxygen will truncate the graph, which is+# visualized by representing a node as a red box. Note that doxygen if the+# number of direct children of the root node in a graph is already larger than+# DOT_GRAPH_MAX_NODES then the graph will not be shown at all. Also note+# that the size of a graph can be further restricted by MAX_DOT_GRAPH_DEPTH.++DOT_GRAPH_MAX_NODES = 50++# The MAX_DOT_GRAPH_DEPTH tag can be used to set the maximum depth of the+# graphs generated by dot. A depth value of 3 means that only nodes reachable+# from the root by following a path via at most 3 edges will be shown. Nodes+# that lay further from the root node will be omitted. Note that setting this+# option to 1 or 2 may greatly reduce the computation time needed for large+# code bases. Also note that the size of a graph can be further restricted by+# DOT_GRAPH_MAX_NODES. Using a depth of 0 means no depth restriction.++MAX_DOT_GRAPH_DEPTH = 0++# Set the DOT_TRANSPARENT tag to YES to generate images with a transparent+# background. This is disabled by default, because dot on Windows does not+# seem to support this out of the box. Warning: Depending on the platform used,+# enabling this option may lead to badly anti-aliased labels on the edges of+# a graph (i.e. they become hard to read).++DOT_TRANSPARENT = NO++# Set the DOT_MULTI_TARGETS tag to YES allow dot to generate multiple output+# files in one run (i.e. multiple -o and -T options on the command line). This+# makes dot run faster, but since only newer versions of dot (>1.8.10)+# support this, this feature is disabled by default.++DOT_MULTI_TARGETS = NO++# If the GENERATE_LEGEND tag is set to YES (the default) Doxygen will+# generate a legend page explaining the meaning of the various boxes and+# arrows in the dot generated graphs.++GENERATE_LEGEND = YES++# If the DOT_CLEANUP tag is set to YES (the default) Doxygen will+# remove the intermediate dot files that are used to generate+# the various graphs.++DOT_CLEANUP = YES
@@ -0,0 +1,188 @@+<doxygenlayout version="1.0">+ <!-- Navigation index tabs for HTML output -->+ <navindex>+ <tab type="mainpage" visible="yes" title=""/>+ <tab type="pages" visible="yes" title="" intro=""/>+ <tab type="modules" visible="yes" title="" intro=""/>+ <tab type="namespaces" visible="yes" title="">+ <tab type="namespacelist" visible="yes" title="" intro=""/>+ <tab type="namespacemembers" visible="yes" title="" intro=""/>+ </tab>+ <tab type="classes" visible="yes" title="">+ <tab type="classlist" visible="yes" title="" intro=""/>+ <tab type="classindex" visible="$ALPHABETICAL_INDEX" title=""/> + <tab type="hierarchy" visible="yes" title="" intro=""/>+ <tab type="classmembers" visible="yes" title="" intro=""/>+ </tab>+ <tab type="files" visible="yes" title="">+ <tab type="filelist" visible="yes" title="" intro=""/>+ <tab type="globals" visible="yes" title="" intro=""/>+ </tab>+ <tab type="dirs" visible="yes" title="" intro=""/>+ <tab type="examples" visible="yes" title="" intro=""/> + </navindex>++ <!-- Layout definition for a class page -->+ <class>+ <briefdescription visible="yes"/>+ <includes visible="$SHOW_INCLUDE_FILES"/>+ <inheritancegraph visible="$CLASS_GRAPH"/>+ <collaborationgraph visible="$COLLABORATION_GRAPH"/>+ <allmemberslink visible="yes"/>+ <memberdecl>+ <nestedclasses visible="yes" title=""/>+ <publictypes title=""/>+ <publicslots title=""/>+ <signals title=""/>+ <publicmethods title=""/>+ <publicstaticmethods title=""/>+ <publicattributes title=""/>+ <publicstaticattributes title=""/>+ <protectedtypes title=""/>+ <protectedslots title=""/>+ <protectedmethods title=""/>+ <protectedstaticmethods title=""/>+ <protectedattributes title=""/>+ <protectedstaticattributes title=""/>+ <packagetypes title=""/>+ <packagemethods title=""/>+ <packagestaticmethods title=""/>+ <packageattributes title=""/>+ <packagestaticattributes title=""/>+ <properties title=""/>+ <events title=""/>+ <privatetypes title=""/>+ <privateslots title=""/>+ <privatemethods title=""/>+ <privatestaticmethods title=""/>+ <privateattributes title=""/>+ <privatestaticattributes title=""/>+ <friends title=""/>+ <related title="" subtitle=""/>+ <membergroups visible="yes"/>+ </memberdecl>+ <detaileddescription title=""/>+ <memberdef>+ <inlineclasses title=""/>+ <typedefs title=""/>+ <enums title=""/>+ <constructors title=""/>+ <functions title=""/>+ <related title=""/>+ <variables title=""/>+ <properties title=""/>+ <events title=""/>+ </memberdef>+ <usedfiles visible="$SHOW_USED_FILES"/>+ <authorsection visible="yes"/>+ </class>++ <!-- Layout definition for a namespace page -->+ <namespace>+ <briefdescription visible="yes"/>+ <memberdecl>+ <nestednamespaces visible="yes" title=""/>+ <classes visible="yes" title=""/>+ <typedefs title=""/>+ <enums title=""/>+ <functions title=""/>+ <variables title=""/>+ <membergroups visible="yes"/>+ </memberdecl>+ <detaileddescription title=""/>+ <memberdef>+ <inlineclasses title=""/>+ <typedefs title=""/>+ <enums title=""/>+ <functions title=""/>+ <variables title=""/>+ </memberdef>+ <authorsection visible="yes"/>+ </namespace>++ <!-- Layout definition for a file page -->+ <file>+ <briefdescription visible="yes"/>+ <includes visible="$SHOW_INCLUDE_FILES"/>+ <includegraph visible="$INCLUDE_GRAPH"/>+ <includedbygraph visible="$INCLUDED_BY_GRAPH"/>+ <sourcelink visible="yes"/>+ <detaileddescription title=""/>+ <memberdecl>+ <membergroups visible="yes"/>+ <namespaces visible="yes" title=""/>+ <enums title=""/>+ <classes visible="yes" title=""/>+ <typedefs title=""/>+ <functions title=""/>+ <defines title=""/>+ <variables title=""/>+ </memberdecl>+ <memberdef>+ <enums title=""/>+ <inlineclasses title=""/>+ <typedefs title=""/>+ <functions title=""/>+ <defines title=""/>+ <variables title=""/>+ </memberdef>+ <authorsection/>+ </file>++ <!-- Layout definition for a group page -->+ <group>+ <briefdescription visible="yes"/>+ <groupgraph visible="$GROUP_GRAPHS"/>+ <detaileddescription title=""/>+ <memberdecl>+ <membergroups visible="yes"/>+ <enums title=""/>+ <enumvalues title=""/>+ <classes visible="yes" title=""/>+ <namespaces visible="yes" title=""/>+ <dirs visible="yes" title=""/>+ <nestedgroups visible="yes" title=""/>+ <files visible="yes" title=""/>+ <typedefs title=""/>+ <defines title=""/>+ <functions title=""/>+ <variables title=""/>+ <signals title=""/>+ <publicslots title=""/>+ <protectedslots title=""/>+ <privateslots title=""/>+ <events title=""/>+ <properties title=""/>+ <friends title=""/>+ </memberdecl>+ <memberdef>+ <pagedocs/>+ <enums title=""/>+ <enumvalues title=""/>+ <inlineclasses title=""/>+ <typedefs title=""/>+ <functions title=""/>+ <defines title=""/>+ <variables title=""/>+ <signals title=""/>+ <publicslots title=""/>+ <protectedslots title=""/>+ <privateslots title=""/>+ <events title=""/>+ <properties title=""/>+ <friends title=""/>+ </memberdef>+ <authorsection visible="yes"/>+ </group>++ <!-- Layout definition for a directory page -->+ <directory>+ <briefdescription visible="yes"/>+ <directorygraph visible="yes"/>+ <memberdecl>+ <dirs visible="yes"/>+ <files visible="yes"/>+ </memberdecl>+ <detaileddescription title=""/>+ </directory>+</doxygenlayout>
@@ -1,19 +0,0 @@-CC = gcc-CFLAGS += -O2 -W -Wall--.PHONY: all clean--all: libgfcc.a--libgfcc.a: gfcc-tree.o gfcc-term.o - ar r $@ $^--gfcc-tree.o: gfcc-tree.c gfcc-tree.h- $(CC) $(CFLAGS) -c -o $@ $<--gfcc-term.o: gfcc-term.c gfcc-term.h- $(CC) $(CFLAGS) -c -o $@ $<--clean:- -rm -f libgfcc.a- -rm -f *.o
@@ -0,0 +1,117 @@++LDADD = libgu.la++lib_LTLIBRARIES = libgu.la libpgf.la++pkgconfigdir = $(libdir)/pkgconfig+pkgconfig_DATA = libgu.pc libpgf.pc++configincludedir = $(libdir)/libgu/include+nodist_configinclude_HEADERS = guconfig.h++guincludedir=$(includedir)/gu+guinclude_HEADERS = \+ gu/assert.h \+ gu/bits.h \+ gu/choice.h \+ gu/defs.h \+ gu/dump.h \+ gu/enum.h \+ gu/exn.h \+ gu/file.h \+ gu/fun.h \+ gu/hash.h \+ gu/in.h \+ gu/intern.h \+ gu/list.h \+ gu/log.h \+ gu/map.h \+ gu/mem.h \+ gu/out.h \+ gu/prime.h \+ gu/read.h \+ gu/seq.h \+ gu/str.h \+ gu/string.h \+ gu/sysdeps.h \+ gu/type.h \+ gu/ucs.h \+ gu/utf8.h \+ gu/variant.h \+ gu/write.h \+ gu/yaml.h++pgfincludedir=$(includedir)/pgf+pgfinclude_HEADERS = \+ pgf/data.h \+ pgf/expr.h \+ pgf/linearize.h \+ pgf/parser.h \+ pgf/pgf.h++libgu_la_SOURCES = \+ gu/assert.c \+ gu/bits.c \+ gu/choice.c \+ gu/defs.c \+ gu/seq.c \+ gu/dump.c \+ gu/enum.c \+ gu/exn.c \+ gu/file.c \+ gu/fun.c \+ gu/hash.c \+ gu/in.c \+ gu/intern.c \+ gu/list.c \+ gu/log.c \+ gu/map.c \+ gu/mem.c \+ gu/out.c \+ gu/prime.c \+ gu/read.c \+ gu/str.c \+ gu/string.c \+ gu/type.c \+ gu/utf8.c \+ gu/write.c \+ gu/ucs.c \+ gu/variant.c \+ gu/yaml.c++libpgf_la_SOURCES = \+ pgf/data.c \+ pgf/data.h \+ pgf/edsl.h \+ pgf/expr.c \+ pgf/expr.h \+ pgf/parser.c \+ pgf/parser.h \+ pgf/reader.c \+ pgf/linearize.c \+ pgf/printer.c++bin_PROGRAMS = \+ utils/pgf2yaml \+ utils/pgf-print \+ utils/pgf-translate++utils_pgf2yaml_SOURCES = utils/pgf2yaml.c+utils_pgf2yaml_LDADD = libpgf.la libgu.la ++utils_pgf_print_SOURCES = utils/pgf-print.c+utils_pgf_print_LDADD = libpgf.la libgu.la ++utils_pgf_translate_SOURCES = utils/pgf-translate.c+utils_pgf_translate_LDADD = libpgf.la libgu.la++AUTOMAKE_OPTIONS = foreign subdir-objects dist-bzip2+ACLOCAL_AMFLAGS = -I m4+include doxygen.am++EXTRA_DIST = \+ Doxyfile \+ DoxygenLayout.xml \+ libgu.pc.in \+ libpgf.pc.in \+ guconfig.h.in
@@ -0,0 +1,119 @@++This is a preview release of libpgf, a native-code library for parsing+and linearization of the PGF grammars produced by the Grammatical +Framework <http://www.grammaticalframework.org/>.++This release is not yet ready for production use: essential+functionality is still missing, the API is still likely to change, and+the documentation is incomplete. This release is primarily meant for+developers who are interested in using libpgf, and who wish to+contribute to its design.+++PREREQUISITES+-------------++This is a self-contained library: only a C99-conformant C compiler is+needed. The code is mostly portable C, although it makes some very+general assumptions about the architecture (mostly regarding the+representation of addresses) that should hold on modern systems. Still,+the code has only been tested on Linux-x86(-64) so far. Reports of+porting problems on other platforms are appreciated.++Although the code "only" requires C99-conformance, it seems that many+compilers fail at it subtly. In particular:++- Clang does not currently support "extern inline" properly.++- Sun C 5.9 apparently has a bug in its treatment of sizeof on compound+ array literals.++As a consequence, these compilers cannot be used in the current state of+the code. Modern versions of GCC, on the other hand, seem to work fine.+++INSTALLING+----------++This is a standard GNU Autotools package. Read the attached INSTALL file+for generic installation instructions. There are currently no+interesting special configuration options.++Pkg-config configuration files for the library are also provided.+++STATUS+------++Currently only very basic PGF functionality is supported, enough to+translate sentences of the Phrasebook grammar in the GF distribution.+Among missing features are:++- querying a parser for tokens expected next+- literals and custom categories+- higher-order abstract syntax variables+- type checking and inference+- generation of random syntax trees++Most of these will eventually get added.+++PROGRAMS+--------++There are two small programs included. These are mainly for testing+purposes and for demonstrating how to use the library.++The pgf2yaml program simply reads a PGF file from the standard input and+dumps it to the standard output in YAML <http://yaml.org/> format.++The pgf-translate program translates sentences of one language in a PGF+grammar into another. It is invoked:++pgf-translate PGF CAT FROM_LANG TO_LANG++Where PGF is a PGF file, CAT is the name of the category whose sentences+are to be translated, and FROM_LANG and TO_LANG are names of concrete+grammars within the PGF file.++The program prompts for a line containing a full sentence of the+specified category in the source language, and displays the syntax trees+and destination language linearizations of all possible parses of that+sentence.+++LIBGU+-----++Along with libpgf proper, this distribution includes libgu, a+general-purpose utility library that libpgf is based on. Libgu is usable+independently of libpgf, and may eventually be split into a separate+package. Do give it a try if you are looking for a library to make C+programming less painful.+++DOCUMENTATION+-------------++Documentation is still fragmentary, but some of the most important+headers have documentation comments. If you have Doxygen+<http://doxygen.org/> installed, "make doxygen-doc" will generate HTML+documentation for the library.++The sources in utils/pgf-translate.c have some comments which may also+clarify how to use the library.+++FEEDBACK+--------++Please report bugs to the Grammatical Framework bug tracker+<https://code.google.com/p/grammatical-framework/issues/>.++For general questions, comments and suggestions on libpgf, write to the+GF mailing list at <mailto:gf-dev@googlegroups.com> or+<https://groups.google.com/group/gf-dev>.++For questions and comments that are related to the core libgu library,+but not to PGF, please write directly to the author at+<mailto:lealanko@ling.helsinki.fi>.
@@ -0,0 +1,66 @@+AC_INIT(Portable Grammar Format library, 0.1.pre, + https://code.google.com/p/grammatical-framework/, + libpgf)+AC_PREREQ(2.58)++AC_CONFIG_SRCDIR([gu/mem.c])+AC_CONFIG_AUX_DIR([scripts])+AC_CONFIG_MACRO_DIR([m4])++AM_INIT_AUTOMAKE([1.7.9])+m4_ifdef([AM_SILENT_RULES], [AM_SILENT_RULES([yes])])++PKG_PROG_PKG_CONFIG++AC_CONFIG_HEADERS([config.h guconfig.h])++AM_MAINTAINER_MODE([enable])+AC_CHECK_LIB(m,nan)+AC_PROG_MAKE_SET+AC_PROG_INSTALL+AC_PROG_LIBTOOL+AC_PROG_CC+AC_PROG_CC_C99+AM_PROG_CC_C_O++[if [ "x$GCC" = "xyes" ]; then+ CFLAGS="$CFLAGS\+ -Wall\+ -Wextra\+ -Wno-missing-field-initializers\+ -Wno-unused-parameter"+fi]+++AC_C_ALIGNOF+AC_C_FAM_IN_MEM+AC_C_STATEMENT_EXPRESSIONS++m4_define([ORIG_DEFINE],m4_defn([AC_DEFINE]))+m4_define([_ORIG_DEFINE],m4_defn([_AC_DEFINE]))+m4_pushdef([AC_DEFINE],[ORIG_DEFINE([GU_$1],[$2],[$3])])+AC_C_ASCII+m4_popdef([AC_DEFINE])++dnl Doxygen support+DX_PS_FEATURE(OFF) +DX_PDF_FEATURE(OFF) +AC_DEFUN([DX_FEATURE_dev], OFF)+DX_ARG_ABLE(dev, [include internal development documentation],+ [],+ [],+ [],+ [DX_ENV_APPEND(DEVDOC, YES)]+ [DX_ENV_APPEND(INPUT, $srcdir)],+ [DX_ENV_APPEND(DEVDOC, NO)+ DX_ENV_APPEND(INPUT, + [\$(guinclude_HEADERS) \$(pgfinclude_HEADERS)])])+DX_INIT_DOXYGEN(libpgf)+++AC_CONFIG_FILES([Makefile+ libgu.pc+ libpgf.pc+ ])++AC_OUTPUT
@@ -0,0 +1,169 @@+# ===========================================================================+# http://www.gnu.org/software/autoconf-archive/ax_prog_doxygen.html+# ===========================================================================++# LICENSE+#+# Copyright (c) 2009 Oren Ben-Kiki <oren@ben-kiki.org>+#+# Copying and distribution of this file, with or without modification, are+# permitted in any medium without royalty provided the copyright notice+# and this notice are preserved. This file is offered as-is, without any+# warranty.++## --------------------------------- ##+## Format-independent Doxygen rules. ##+## --------------------------------- ##++if DX_COND_doc++## ------------------------------- ##+## Rules specific for HTML output. ##+## ------------------------------- ##++if DX_COND_html++DX_CLEAN_HTML = @DX_DOCDIR@/html++endif DX_COND_html++## ------------------------------ ##+## Rules specific for CHM output. ##+## ------------------------------ ##++if DX_COND_chm++DX_CLEAN_CHM = @DX_DOCDIR@/chm++if DX_COND_chi++DX_CLEAN_CHI = @DX_DOCDIR@/@PACKAGE@.chi++endif DX_COND_chi++endif DX_COND_chm++## ------------------------------ ##+## Rules specific for MAN output. ##+## ------------------------------ ##++if DX_COND_man++DX_CLEAN_MAN = @DX_DOCDIR@/man++endif DX_COND_man++## ------------------------------ ##+## Rules specific for RTF output. ##+## ------------------------------ ##++if DX_COND_rtf++DX_CLEAN_RTF = @DX_DOCDIR@/rtf++endif DX_COND_rtf++## ------------------------------ ##+## Rules specific for XML output. ##+## ------------------------------ ##++if DX_COND_xml++DX_CLEAN_XML = @DX_DOCDIR@/xml++endif DX_COND_xml++## ----------------------------- ##+## Rules specific for PS output. ##+## ----------------------------- ##++if DX_COND_ps++DX_CLEAN_PS = @DX_DOCDIR@/@PACKAGE@.ps++DX_PS_GOAL = doxygen-ps++doxygen-ps: @DX_DOCDIR@/@PACKAGE@.ps++@DX_DOCDIR@/@PACKAGE@.ps: @DX_DOCDIR@/@PACKAGE@.tag+ cd @DX_DOCDIR@/latex; \+ rm -f *.aux *.toc *.idx *.ind *.ilg *.log *.out; \+ $(DX_LATEX) refman.tex; \+ $(MAKEINDEX_PATH) refman.idx; \+ $(DX_LATEX) refman.tex; \+ countdown=5; \+ while $(DX_EGREP) 'Rerun (LaTeX|to get cross-references right)' \+ refman.log > /dev/null 2>&1 \+ && test $$countdown -gt 0; do \+ $(DX_LATEX) refman.tex; \+ countdown=`expr $$countdown - 1`; \+ done; \+ $(DX_DVIPS) -o ../@PACKAGE@.ps refman.dvi++endif DX_COND_ps++## ------------------------------ ##+## Rules specific for PDF output. ##+## ------------------------------ ##++if DX_COND_pdf++DX_CLEAN_PDF = @DX_DOCDIR@/@PACKAGE@.pdf++DX_PDF_GOAL = doxygen-pdf++doxygen-pdf: @DX_DOCDIR@/@PACKAGE@.pdf++@DX_DOCDIR@/@PACKAGE@.pdf: @DX_DOCDIR@/@PACKAGE@.tag+ cd @DX_DOCDIR@/latex; \+ rm -f *.aux *.toc *.idx *.ind *.ilg *.log *.out; \+ $(DX_PDFLATEX) refman.tex; \+ $(DX_MAKEINDEX) refman.idx; \+ $(DX_PDFLATEX) refman.tex; \+ countdown=5; \+ while $(DX_EGREP) 'Rerun (LaTeX|to get cross-references right)' \+ refman.log > /dev/null 2>&1 \+ && test $$countdown -gt 0; do \+ $(DX_PDFLATEX) refman.tex; \+ countdown=`expr $$countdown - 1`; \+ done; \+ mv refman.pdf ../@PACKAGE@.pdf++endif DX_COND_pdf++## ------------------------------------------------- ##+## Rules specific for LaTeX (shared for PS and PDF). ##+## ------------------------------------------------- ##++if DX_COND_latex++DX_CLEAN_LATEX = @DX_DOCDIR@/latex++endif DX_COND_latex++.PHONY: doxygen-run doxygen-doc $(DX_PS_GOAL) $(DX_PDF_GOAL)++.INTERMEDIATE: doxygen-run $(DX_PS_GOAL) $(DX_PDF_GOAL)++doxygen-run: @DX_DOCDIR@/@PACKAGE@.tag++doxygen-doc: doxygen-run $(DX_PS_GOAL) $(DX_PDF_GOAL)++@DX_DOCDIR@/@PACKAGE@.tag: $(DX_CONFIG) $(pkginclude_HEADERS)+ rm -rf @DX_DOCDIR@+ $(DX_ENV) $(DX_DOXYGEN) $(srcdir)/$(DX_CONFIG)++DX_CLEANFILES = \+ @DX_DOCDIR@/@PACKAGE@.tag \+ -r \+ $(DX_CLEAN_HTML) \+ $(DX_CLEAN_CHM) \+ $(DX_CLEAN_CHI) \+ $(DX_CLEAN_MAN) \+ $(DX_CLEAN_RTF) \+ $(DX_CLEAN_XML) \+ $(DX_CLEAN_PS) \+ $(DX_CLEAN_PDF) \+ $(DX_CLEAN_LATEX)++endif DX_COND_doc
@@ -1,203 +0,0 @@-#include "gfcc-term.h"--#include <stdarg.h>-#include <stdio.h>-#include <stdlib.h>--static void *buffer = NULL;-static size_t current;--extern void term_alloc_pool(size_t size) {- if (buffer == NULL) - buffer = malloc(size);- current = 0;-}--extern void term_free_pool() {- if (buffer != NULL)- free(buffer);- buffer = NULL;-}--extern void *term_alloc(size_t size) {- void *off = buffer + current;- current += size;- return off;-}--static inline Term *create_term(TermType type, int n) {- Term *t = (Term*)term_alloc(sizeof(Term) + n * sizeof(Term *));- t->type = type;- t->value.size = n; /* FIXME: hack! */- return t;-}--extern Term *term_array(int n, ...) {- Term *t = create_term(TERM_ARRAY, n);- va_list ap;- int i;-- va_start(ap, n);- for (i = 0; i < n; i++) {- term_set_child(t, i, va_arg(ap, Term *));- }- va_end(ap);-- return t;-}--extern Term *term_seq(int n, ...) {- Term *t = create_term(TERM_SEQUENCE, n);- va_list ap;- int i;-- va_start(ap, n);- for (i = 0; i < n; i++) {- term_set_child(t, i, va_arg(ap, Term *));- }- va_end(ap);-- return t;-}--extern Term *term_variants(int n, ...) {- Term *t = create_term(TERM_VARIANTS, n);- va_list ap;- int i;-- va_start(ap, n);- for (i = 0; i < n; i++) {- term_set_child(t, i, va_arg(ap, Term *));- }- va_end(ap);-- return t;-}--extern Term *term_glue(int n, ...) {- Term *t = create_term(TERM_GLUE, n);- va_list ap;- int i;-- va_start(ap, n);- for (i = 0; i < n; i++) {- term_set_child(t, i, va_arg(ap, Term *));- }- va_end(ap);-- return t;-}--extern Term *term_rp(Term *t1, Term *t2) {- Term *t = create_term(TERM_RECORD_PARAM, 2);- term_set_child(t, 0, t1);- term_set_child(t, 1, t2);- return t;-}--extern Term *term_suffix(const char *pref, Term *suf) {- Term *t = create_term(TERM_SUFFIX_TABLE, 2);- term_set_child(t,0,term_str(pref));- term_set_child(t,1,suf);- return t;-}--extern Term *term_str(const char *s) {- Term *t = create_term(TERM_STRING, 0);- t->value.string_value = s;- return t;-}--extern Term *term_int(int i) {- Term *t = create_term(TERM_INTEGER,0);- t->value.integer_value = i;- return t;-}--extern Term *term_meta() {- return create_term(TERM_META, 0);-}----extern Term *term_sel_int(Term *t, int i) {- switch (t->type) {- case TERM_ARRAY:- return term_get_child(t,i);- case TERM_SUFFIX_TABLE:- return term_glue(2,- term_get_child(t,0), - term_sel_int(term_get_child(t,1),i));- case TERM_META:- return t;- default: - fprintf(stderr,"Error: term_sel_int %d %d\n", t->type, i);- exit(1);- return NULL;- }-}--extern Term *term_sel(Term *t1, Term *t2) {- switch (t2->type) {- case TERM_INTEGER:- return term_sel_int(t1, t2->value.integer_value);- case TERM_RECORD_PARAM:- return term_sel(t1,term_get_child(t2,0));- case TERM_META:- return term_sel_int(t1,0);- default: - fprintf(stderr,"Error: term_sel %d %d\n", t1->type, t2->type);- exit(1);- return 0;- }-}----static void term_print_sep(FILE *stream, Term *t, const char *sep) {- int n = t->value.size;- int i;-- for (i = 0; i < n; i++) {- term_print(stream, term_get_child(t,i));- if (i < n-1) {- fputs(sep, stream);- }- }-}--extern void term_print(FILE *stream, Term *t) {- switch (t->type) {- case TERM_ARRAY:- term_print(stream, term_get_child(t,0));- break;- case TERM_SEQUENCE:- term_print_sep(stream, t, " ");- break;- case TERM_VARIANTS:- term_print_sep(stream, t, "/");- break;- case TERM_GLUE:- term_print_sep(stream, t, "");- break;- case TERM_RECORD_PARAM:- term_print(stream, term_get_child(t,0));- break;- case TERM_SUFFIX_TABLE:- term_print(stream, term_get_child(t,0));- term_print(stream, term_get_child(t,1));- break;- case TERM_META:- fputs("?", stream);- break;- case TERM_STRING: - fputs(t->value.string_value, stream);- break;- case TERM_INTEGER: - fprintf(stream, "%d", t->value.integer_value);- break;- default:- fprintf(stderr,"Error: term_print %d\n", t->type);- exit(1);- }-}
@@ -1,65 +0,0 @@-#ifndef GFCC_TERM_H-#define GFCC_TERM_H--#include <stdio.h>--typedef enum {- /* size = variable */- TERM_ARRAY,- TERM_SEQUENCE,- TERM_VARIANTS,- TERM_GLUE,- /* size = 2 */- TERM_RECORD_PARAM,- TERM_SUFFIX_TABLE,- /* size = 0 */- TERM_META,- TERM_STRING,- TERM_INTEGER-} TermType;--struct Term_ {- TermType type;- union {- const char *string_value;- int integer_value;- int size;- } value;- struct Term_ *args[0];-};--typedef struct Term_ Term;----static inline Term *term_get_child(Term *t, int n) {- return t->args[n];-}--static inline void term_set_child(Term *t, int n, Term *c) {- t->args[n] = c;-}--extern void term_alloc_pool(size_t size);-extern void term_free_pool();-extern void *term_alloc(size_t size);---extern Term *term_array(int n, ...);-extern Term *term_seq(int n, ...);-extern Term *term_variants(int n, ...);-extern Term *term_glue(int n, ...);--extern Term *term_rp(Term *t1, Term *t2);-extern Term *term_suffix(const char *pref, Term *suf);-extern Term *term_str(const char *s);-extern Term *term_int(int i);-extern Term *term_meta();--extern Term *term_sel_int(Term *t, int i);-extern Term *term_sel(Term *t1, Term *t2);---extern void term_print(FILE *stream, Term *t);--#endif
@@ -1,61 +0,0 @@-#include "gfcc-tree.h"--#include <stdlib.h>---extern int arity(Tree *t) {- switch (t->type) {- case ATOM_STRING: - case ATOM_INTEGER:- case ATOM_DOUBLE:- case ATOM_META:- return 0;- default:- return t->value.size;- }-}--static Tree *create_tree(atom_type c, int n) {- Tree *t = (Tree *)malloc(sizeof(Tree) + n * sizeof(Tree *));- t->type = c;- return t;-}--extern Tree *tree_string(const char *s) {- Tree *t = create_tree(ATOM_STRING, 0);- t->value.string_value = s;- return t;-}--extern Tree *tree_integer(int i) {- Tree *t = create_tree(ATOM_INTEGER, 0);- t->value.integer_value = i;- return t;-}--extern Tree *tree_double(double d) {- Tree *t = create_tree(ATOM_DOUBLE, 0);- t->value.double_value = d;- return t;-}--extern Tree *tree_meta() {- return create_tree(ATOM_META, 0);-}--extern Tree *tree_fun(atom_type f, int n) {- Tree *t = create_tree(f, n);- t->value.size = n;- return t;-}---extern void tree_free(Tree *t) {- int n = arity(t);- int i;-- for (i = 0; i < n; i++) {- tree_free(tree_get_child(t,i));- }- free(t);-}
@@ -1,49 +0,0 @@-#ifndef GFCC_TREE_H-#define GFCC_TREE_H--typedef enum {- ATOM_STRING,- ATOM_INTEGER,- ATOM_DOUBLE,- ATOM_META,- ATOM_FIRST_FUN-} atom_type;--struct Tree_{- atom_type type;- union {- const char *string_value;- int integer_value;- double double_value;- int size;- } value;- struct Tree_ *args[0];-};--typedef struct Tree_ Tree;--static inline Tree *tree_get_child(Tree *t, int n) {- return t->args[n];-}--static inline void tree_set_child(Tree *t, int n, Tree *a) {- t->args[n] = a;-}--extern int arity(Tree *t);---extern Tree *tree_string(const char *s);--extern Tree *tree_integer(int i);--extern Tree *tree_double(double d);--extern Tree *tree_meta();--extern Tree *tree_fun(atom_type f, int n);---extern void tree_free(Tree *t);--#endif
@@ -0,0 +1,53 @@+#include <gu/assert.h>+#include <stdlib.h>+#include <stdio.h>+#include <stdarg.h>++const char*+gu_assert_mode_descs[] = {+ [GU_ASSERT_PRECOND] = "precondition failed",+ [GU_ASSERT_POSTCOND] = "postcondition failed",+ [GU_ASSERT_ASSERTION] = "assertion failed",+ [GU_ASSERT_NEVER] = "control should not reach here",+};++void+gu_abort_v_(GuAssertMode mode,+ const char* file, const char* func, int line,+ const char* msg_fmt, va_list args)+{+ const char* desc = gu_assert_mode_descs[mode];+ (void) fprintf(stderr, "%s (%s:%d): %s\n", func, file, line, desc);+ if (msg_fmt != NULL) {+ (void) fputc('\t', stderr);+ (void) vfprintf(stderr, msg_fmt, args);+ (void) fputc('\n', stderr);+ }+ abort();+}++void+gu_abort_(GuAssertMode mode,+ const char* file, const char* func, int line,+ const char* msg_fmt, ...)+{+ va_list args;+ va_start(args, msg_fmt);+ gu_abort_v_(mode, file, func, line, msg_fmt, args);+ va_end(args);+}+ ++void +gu_fatal(const char* fmt, ...)+{+ va_list args;+ va_start(args, fmt);+ fputs("Fatal error", stderr);+ if (fmt) {+ fputs(": ", stderr);+ (void) vfprintf(stderr, fmt, args);+ }+ fputc('\n', stderr);+ abort();+}
@@ -0,0 +1,61 @@+#ifndef GU_ASSERT_H_+#define GU_ASSERT_H_++#include <gu/defs.h>++typedef enum {+ GU_ASSERT_PRECOND,+ GU_ASSERT_ASSERTION,+ GU_ASSERT_POSTCOND,+ GU_ASSERT_NEVER+} GuAssertMode;++void+gu_abort_v_(GuAssertMode mode, + const char* file, const char* func, int line,+ const char* msg_fmt, va_list args);++void+gu_abort_(GuAssertMode mode, + const char* file, const char* func, int line,+ const char* msg_fmt, ...);++#ifndef NDEBUG+#define gu_assertion_(mode_, expr_, ...) \+ GU_BEGIN \+ if (!(expr_)) { \+ gu_abort_(mode_, __FILE__, __func__, __LINE__, __VA_ARGS__); \+ } \+ GU_END+#else+// this should prevent unused variable warnings when a variable is only used+// in an assertion+#define gu_assertion_(mode_, expr_, ...) \+ GU_BEGIN \+ (void) (sizeof (expr_)); \+ GU_END+#endif+++#define gu_require(expr) \+ gu_assertion_(GU_ASSERT_PRECOND, expr, "%s", #expr)++#define gu_assert_msg(expr, ...) \+ gu_assertion_(GU_ASSERT_ASSERTION, expr, __VA_ARGS__)++#define gu_assert(expr) \+ gu_assert_msg(expr, "%s", #expr)++#define gu_ensure(expr) \+ gu_assertion_(GU_ASSERT_POSTCOND, expr, "%s", #expr)++#define gu_impossible_msg(...) \+ gu_assertion_(GU_ASSERT_ASSERTION, false, __VA_ARGS__)++#define gu_impossible() \+ gu_impossible_msg(NULL)++void +gu_fatal(const char* fmt, ...);++#endif /* GU_ASSERT_H_ */
@@ -0,0 +1,53 @@+#include <gu/bits.h>++#include <limits.h>+#include <inttypes.h>+#include <stdio.h>+#include <string.h>+#include <stdlib.h>+#include <math.h>++unsigned gu_ceil2e(unsigned u) +{+ u--;+ u |= u >> 1;+ u |= u >> 2;+ u |= u >> 4;+ u |= u >> 8;+#if UINT_MAX > UINT16_MAX+ u |= u >> 16;+#endif+#if UINT_MAX > UINT32_MAX+ u |= u >> 32;+#endif+ u++;+ return u;+}++GU_DEFINE_TYPE(GuIntDecodeExn, abstract, _);++double +gu_decode_double(uint64_t u)+{+ bool sign = u >> 63;+ unsigned rawexp = u >> 52 & 0x7ff;+ uint64_t mantissa = u & 0xfffffffffffff;+ double ret;++ if (rawexp == 0x7ff) {+ if (mantissa == 0) {+ ret = INFINITY;+ } else {+ // At least glibc supports specifying the+ // mantissa like this.+ int len = snprintf(NULL, 0, "0x%" PRIx64, mantissa);+ char buf[len + 1];+ snprintf(buf, len + 1, "0x%" PRIx64, mantissa);+ ret = nan(buf);+ }+ } else {+ uint64_t m = rawexp ? 1ULL << 52 | mantissa : mantissa << 1;+ ret = ldexp((double) m, rawexp - 1075);+ }+ return sign ? copysign(ret, -1.0) : ret;+}
@@ -0,0 +1,151 @@+#ifndef GU_BITS_H_+#define GU_BITS_H_++#include <gu/defs.h>+#include <gu/assert.h>+++#define GU_WORD_BITS (sizeof(GuWord) * CHAR_BIT)+++/*+ * Based on the Bit Twiddling Hacks collection by Sean Eron Anderson+ * <http://graphics.stanford.edu/~seander/bithacks.html>+ */++unsigned gu_ceil2e(unsigned i);++static inline int+gu_sign(int i) {+ return (i > 0) - (i < 0);+}++static inline size_t+gu_ceildiv(size_t size, size_t div)+{+ return (size + div - 1) / div;+}++static inline bool+gu_aligned(uintptr_t addr, size_t alignment)+{+ gu_require(alignment == gu_ceil2e(alignment));+ return (addr & (alignment - 1)) == 0;+}++static inline uintptr_t+gu_align_forward(uintptr_t addr, size_t alignment) {+ gu_require(alignment == gu_ceil2e(alignment));+ uintptr_t mask = alignment - 1;+ return (addr + mask) & ~mask;+}++static inline uintptr_t+gu_align_backward(uintptr_t addr, size_t alignment) {+ gu_require(alignment == gu_ceil2e(alignment));+ return addr & ~(alignment - 1);+}++static inline bool+gu_bits_test(const GuWord* bitmap, int idx) {+ return !!(bitmap[idx / GU_WORD_BITS] & 1 << (idx % GU_WORD_BITS));+}++static inline void+gu_bits_set(GuWord* bitmap, int idx) {+ bitmap[idx / GU_WORD_BITS] |= ((GuWord) 1) << (idx % GU_WORD_BITS);+}++static inline void+gu_bits_clear(GuWord* bitmap, int idx) {+ bitmap[idx / GU_WORD_BITS] &= ~(((GuWord) 1) << (idx % GU_WORD_BITS));+}++static inline size_t+gu_bits_size(size_t n_bits) {+ return gu_ceildiv(n_bits, GU_WORD_BITS) * sizeof(GuWord);+}++static inline void*+gu_word_ptr(GuWord w)+{+ return (void*) w;+}++static inline GuWord+gu_ptr_word(void* p)+{+ return (GuWord) p;+}++#define GuOpaque() struct { GuWord w_; }++typedef GuWord GuTagged;++#define GU_TAG_MAX (sizeof(GuWord) - 1)++static inline size_t+gu_tagged_tag(GuTagged t) {+ return (int) (t & (sizeof(GuWord) - 1));+}++static inline void*+gu_tagged_ptr(GuTagged w) {+ return (void*) gu_align_backward(w, sizeof(GuWord));+}++static inline GuTagged+gu_tagged(void* ptr, size_t tag) {+ gu_require(tag < sizeof(GuWord));+ uintptr_t u = (uintptr_t) ptr;+ gu_require(gu_align_backward(u, sizeof(GuWord)) == u);+ return (GuWord) { u | tag };+}++#include <gu/exn.h>+#include <gu/type.h>++extern GU_DECLARE_TYPE(GuIntDecodeExn, abstract);++#define GU_DECODE_2C_(u_, t_, umax_, posmax_, tmin_, err_) \+ (((u_) <= (posmax_)) \+ ? (t_) (u_) \+ : (tmin_) + ((t_) ((umax_) - (u_))) < 0 \+ ? -1 - ((t_) ((umax_) - (u_))) \+ : (gu_raise(err_, GuIntDecodeExn), -1))+++static inline int8_t+gu_decode_2c8(uint8_t u, GuExn* err)+{+ return GU_DECODE_2C_(u, int8_t, UINT8_C(0xff), + INT8_C(0x7f), INT8_MIN, err);+}++static inline int16_t+gu_decode_2c16(uint16_t u, GuExn* err)+{+ return GU_DECODE_2C_(u, int16_t, UINT16_C(0xffff), + INT16_C(0x7fff), INT16_MIN, err);+}++static inline int32_t+gu_decode_2c32(uint32_t u, GuExn* err)+{+ return GU_DECODE_2C_(u, int32_t, UINT32_C(0xffffffff), + INT32_C(0x7fffffff), INT32_MIN, err);+}++static inline int64_t+gu_decode_2c64(uint64_t u, GuExn* err)+{+ return GU_DECODE_2C_(u, int64_t, UINT64_C(0xffffffffffffffff), + INT64_C(0x7fffffffffffffff), INT64_MIN, err);+}++double+gu_decode_double(uint64_t u);++++#endif // GU_BITS_H_
@@ -0,0 +1,72 @@+#include <gu/choice.h>+#include <gu/seq.h>+#include <gu/assert.h>+#include <gu/log.h>++struct GuChoice {+ GuBuf* path;+ size_t path_idx;+};++GuChoice*+gu_new_choice(GuPool* pool)+{+ GuChoice* ch = gu_new(GuChoice, pool);+ ch->path = gu_new_buf(size_t, pool);+ ch->path_idx = 0;+ return ch;+}++GuChoiceMark+gu_choice_mark(GuChoice* ch)+{+ gu_assert(ch->path_idx <= gu_buf_length(ch->path));+ gu_debug("%p@%d: mark", ch, ch->path_idx);+ return (GuChoiceMark){ch->path_idx};+}++void+gu_choice_reset(GuChoice* ch, GuChoiceMark mark)+{+ gu_assert(ch->path_idx <= gu_buf_length(ch->path));+ gu_debug("%p@%d: reset %d", ch, ch->path_idx, mark.path_idx);+ gu_require(mark.path_idx <= ch->path_idx );+ ch->path_idx = mark.path_idx;+}++int+gu_choice_next(GuChoice* ch, int n_choices)+{+ gu_assert(n_choices >= 0);+ gu_assert(ch->path_idx <= gu_buf_length(ch->path));+ if (n_choices == 0) {+ return -1;+ }+ int i = 0;+ if (gu_buf_length(ch->path) > ch->path_idx) {+ i = (int) gu_buf_get(ch->path, size_t, ch->path_idx);+ gu_assert(i <= n_choices);+ } else {+ gu_buf_push(ch->path, size_t, n_choices);+ i = n_choices;+ }+ int ret = (i == 0) ? -1 : n_choices - i;+ gu_debug("%p@%d: %d", ch, ch->path_idx, ret);+ ch->path_idx++;+ return ret;+}++bool+gu_choice_advance(GuChoice* ch)+{+ gu_assert(ch->path_idx <= gu_buf_length(ch->path));+ + while (gu_buf_length(ch->path) > ch->path_idx) {+ size_t last = gu_buf_pop(ch->path, size_t);+ if (last > 1) {+ gu_buf_push(ch->path, size_t, last-1);+ return true;+ }+ }+ return false;+}
@@ -0,0 +1,37 @@+#ifndef GU_CHOICE_H_+#define GU_CHOICE_H_++#include <gu/mem.h>++typedef struct GuChoice GuChoice;++typedef struct GuChoiceMark GuChoiceMark;++GuChoice*+gu_new_choice(GuPool* pool);++int+gu_choice_next(GuChoice* ch, int n_choices);++GuChoiceMark+gu_choice_mark(GuChoice* ch);++void+gu_choice_reset(GuChoice* ch, GuChoiceMark mark);++bool+gu_choice_advance(GuChoice* ch);+++// private++struct GuChoiceMark {+ size_t path_idx;+};+++++++#endif // GU_CHOICE_H_
@@ -0,0 +1,4 @@+#include <gu/defs.h>++void* const gu_null = NULL;+GuStruct* const gu_null_struct = NULL;
@@ -0,0 +1,217 @@+/* + * Copyright 2010 University of Helsinki.+ * + * This file is part of libgu.+ * + * Libgu is free software: you can redistribute it and/or modify it under+ * the terms of the GNU Lesser General Public License as published by the+ * Free Software Foundation, either version 3 of the License, or (at your+ * option) any later version.+ * + * Libgu is distributed in the hope that it will be useful, but WITHOUT+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public+ * License for more details.+ * + * You should have received a copy of the GNU Lesser General Public+ * License along with libgu. If not, see <http://www.gnu.org/licenses/>.+ */++/** @file+ *+ * Miscellaneous macros.+ */++#ifndef GU_DEFS_H_+#define GU_DEFS_H_++#include <stddef.h>+#include <inttypes.h>+#include <stdbool.h>+#include <assert.h>+#include <limits.h>+#include <stdarg.h>+#include <gu/sysdeps.h>++#define gu_container(mem_p, container_type, member) \+ ((container_type*)(((uint8_t*) (mem_p)) - offsetof(container_type, member)))+/**< Find the address of a containing structure.+ *+ * If @c s has type @c t*, where @c t is a struct or union type with a+ * member @m, then <tt>GU_CONTAINER_P(&s->m, t, m) == s</tt>.+ * + * @param mem_p Pointer to the member of a structure.+ * @param container_type The type of the containing structure.+ * @param member The name of the member of @a container_type+ * @return The address of the containing structure.+ *+ * @hideinitializer */+++#define gu_member_p(struct_p_, offset_) \+ ((void*)&((uint8_t*)(struct_p_))[offset_])++#define gu_member(t_, struct_p_, offset_) \+ (*(t_*)gu_member_p(struct_p_, offset_))++#ifdef GU_ALIGNOF+# define gu_alignof GU_ALIGNOF+# define GU_ALIGNOF_WORKS_ON_FAM_STRUCTS+#else+# define gu_alignof(t_) \+ ((size_t)(offsetof(struct { char c_; t_ e_; }, e_)))+# ifdef GU_CAN_HAVE_FAM_IN_MEMBER+# define GU_ALIGNOF_WORKS_ON_FAM_STRUCTS+# endif+#endif++#define GU_PLIT(type, expr) \+ ((type[1]){ expr })++#define GU_LVALUE(type, expr) \+ (*((type[1]){ expr }))++#define GU_COMMA ,++#define GU_ARRAY_LEN(t,a) (sizeof((const t[])a) / sizeof(t))++#define GU_ID(...) __VA_ARGS__++// This trick is by Laurent Deniau <laurent.deniau@cern.ch>+#define GU_N_ARGS(...) \+ GU_N_ARGS_(__VA_ARGS__, \+ 31,30,29,28,27,26,25,24, \+ 23,22,21,20,19,18,17,16, \+ 15,14,13,12,11,10,9,8, \+ 7,6,5,4,3,2,1,0) +#define GU_N_ARGS_(...) GU_N_ARGS__(__VA_ARGS__)+#define GU_N_ARGS__(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p, \+ q,r,s,t,u,v,w,x,y,z,aa,ab,ac,ad,ae,N,...) \+ N++#define GU_ARG1(a1, ...) a1+#define GU_ARG2(a1, a2, ...) a2++#define GU_BEGIN do {+#define GU_END } while (false)++#define GU_NOP GU_BEGIN (void) 0; GU_END++/**< @hideinitializer */++//+// Assert+//++#define GU_MAX(a_, b_) ((a_) > (b_) ? (a_) : (b_))+#define GU_MIN(a_, b_) ((a_) < (b_) ? (a_) : (b_))++static inline int+gu_max(int a, int b) {+ return GU_MAX(a, b);+}++static inline int+gu_min(int a, int b) {+ return GU_MIN(a, b);+}++#ifdef GU_ALIGNOF_WORKS_ON_FAM_STRUCTS+#define gu_flex_alignof gu_alignof+#else+#define gu_flex_alignof(t) 0+#endif++static inline size_t+gu_flex_size(size_t ssize, size_t offset, int n_elems, size_t e_size)+{+ return GU_MAX(ssize, offset + n_elems * e_size);+}++#define GU_FLEX_SIZE(type, flex_member, n_elems) \+ gu_flex_size(sizeof(type), offsetof(type, flex_member), \+ n_elems, sizeof(((type*)NULL)->flex_member[0]))+++// The following are directly from gmacros.h in GLib++#define GU_PASTE_ARGS(id1_,id2_) \+ id1_ ## id2_++#define GU_PASTE(id1_, id2_) \+ GU_PASTE_ARGS(id1_, id2_)++#define GU_STATIC_ASSERT(expr_) \+ typedef struct { \+ char static_assert[(expr_) ? 1 : -1]; \+ } GU_PASTE(GuStaticAssert_, __LINE__)+++#define GU_ENSURE_TYPE(T, EXPR) \+ ((void)(sizeof(*(T*)NULL=(EXPR))),(EXPR))++#define GU_END_DECLS \+ extern void gu_dummy_(void)++extern void* const gu_null;++// Dummy struct used for generic struct pointers+typedef struct GuStruct GuStruct;++extern GuStruct* const gu_null_struct;++typedef uintptr_t GuWord;++#define GU_WORD_MAX UINTPTR_MAX++// TODO: use max_align_t once C1X is supported+typedef union {+ char c;+ short s;+ int i;+ long l;+ long long ll;+ intmax_t im;+ float f;+ double d;+ long double ld;+ void* p;+ void (*fp)();+} GuMaxAlign;++#define gu_alloca(N) \+ (((union { GuMaxAlign align_; uint8_t buf_[N]; }){{0}}).buf_)+++// For Doxygen+#define GU_PRIVATE /** @private */++#ifdef GU_GNUC+# define GU_LIKELY(EXPR) __builtin_expect(EXPR, 1)+# define GU_UNLIKELY(EXPR) __builtin_expect(EXPR, 0)+# define GU_IS_CONSTANT(EXPR) __builtin_constant_p(EXPR)+#else+# define GU_LIKELY(EXPR) (EXPR)+# define GU_UNLIKELY(EXPR) (EXPR)+# ifdef GU_OPTIMIZE_SIZE+# define GU_IS_CONSTANT(EXPR) false+# else+# define GU_IS_CONSTANT(EXPR) true+# endif+#endif++// Splint annotations+#define GU_ONLY GU_SPLINT(only)+#define GU_NULL GU_SPLINT(null)+#define GU_NOTNULL GU_SPLINT(notnull) +#define GU_RETURNED GU_SPLINT(returned)+#define GU_ABSTRACT GU_SPLINT(abstract)+#define GU_IMMUTABLE GU_SPLINT(immutable)+#define GU_NOTREACHED GU_SPLINT(notreached)+#define GU_UNUSED GU_SPLINT(unused) GU_GNUC_ATTR(unused)+#define GU_OUT GU_SPLINT(out)+#define GU_IN GU_SPLINT(in)+#define GU_NORETURN GU_SPLINT(noreturn) GU_GNUC_ATTR(noreturn)+#define GU_MODIFIES(x) GU_SPLINT(modifies x)++#endif // GU_DEFS_H_
@@ -0,0 +1,411 @@+#include <gu/dump.h>+#include <gu/list.h>+#include <gu/variant.h>+#include <gu/seq.h>+#include <gu/assert.h>+#include <gu/str.h>+#include <gu/file.h>++GuDump*+gu_new_dump(GuWriter* wtr, GuTypeTable* dumpers, GuExn* err, GuPool* pool)+{+ GuDump* ctx = gu_new(GuDump, pool);+ ctx->pool = pool;+ if (dumpers == NULL) {+ dumpers = &gu_dump_table;+ }+ ctx->dumpers = gu_new_type_map(dumpers, pool);+ ctx->yaml = gu_new_yaml(wtr, err, pool);+ ctx->data = gu_new_addr_map(void, void*, &gu_null, pool);+ ctx->print_address = false;+ return ctx;+}++void+gu_dump(GuType* type, const void* value, GuDump* ctx)+{+ GuDumpFn* dumper = gu_type_map_get(ctx->dumpers, type);+ if (ctx->print_address) {+ GuPool* pool = gu_new_pool();+ GuString s = gu_format_string(pool, "%p", value);+ gu_yaml_comment(ctx->yaml, s);+ gu_pool_free(pool);+ }+ (*dumper)(dumper, type, value, ctx);+}++void+gu_dump_stderr(GuType* type, const void* value, GuExn* err)+{+ GuPool* pool = gu_new_pool();+ GuOut* out = gu_file_out(stderr, pool);+#if 0+ GuWriter* wtr = gu_locale_writer(out, pool);+#else+ GuWriter* wtr = gu_new_utf8_writer(out, pool);+#endif+ GuDump* ctx = gu_new_dump(wtr, NULL, err, pool);+ gu_dump(type, value, ctx);+ gu_pool_free(pool);+}++static void+gu_dump_scalar(GuDump* ctx, const char* fmt, ...)+{+ GuPool* tmp_pool = gu_local_pool();+ va_list args;+ va_start(args, fmt);+ GuString s = gu_format_string_v(fmt, args, tmp_pool);+ va_end(args);+ gu_yaml_scalar(ctx->yaml, s);+ gu_pool_free(tmp_pool);+}++static void+gu_dump_str_scalar(GuDump* ctx, const char* str)+{+ GuPool* tmp_pool = gu_local_pool();+ GuString s = gu_str_string(str, tmp_pool);+ gu_yaml_scalar(ctx->yaml, s);+ gu_pool_free(tmp_pool);+}++static void+gu_dump_null(GuDump* ctx)+{+ gu_yaml_tag_secondary(ctx->yaml, "null");+ gu_yaml_scalar(ctx->yaml, gu_empty_string);+}++static void +gu_dump_int(GuDumpFn* dumper, GuType* type, const void* p, + GuDump* ctx)+{+ (void) dumper;+ (void) type;+ const int* ip = p;+ gu_dump_scalar(ctx, "%d", *ip);+}++static void +gu_dump_uint16(GuDumpFn* dumper, GuType* type, const void* p, + GuDump* ctx)+{+ (void) dumper;+ (void) type;+ const uint16_t* ip = p;+ gu_dump_scalar(ctx, "%" PRIu16, *ip);+}++static void +gu_dump_size(GuDumpFn* dumper, GuType* type, const void* p, + GuDump* ctx)+{+ (void) (dumper && type);+ const size_t* zp = p;+ gu_dump_scalar(ctx, "%zu", *zp);+}++++static void +gu_dump_double(GuDumpFn* dumper, GuType* type, const void* p, + GuDump* ctx)+{+ (void) dumper;+ (void) type;+ const double* dp = p;+ gu_dump_scalar(ctx, "%lf", *dp);+}++static const char gu_dump_length_key[] = "gu_dump_length_key";++static void +gu_dump_length(GuDumpFn* dumper, GuType* type, const void* p, + GuDump* ctx)+{+ (void) dumper;+ (void) type;+ const GuLength* ip = p;+ gu_dump_scalar(ctx, "%d", *ip);+ GuLength* lenp = gu_map_get(ctx->data, gu_dump_length_key, void*);+ if (lenp != NULL) {+ *lenp = *ip;+ }+}++static void +gu_dump_str(GuDumpFn* dumper, GuType* type, const void* p, + GuDump* ctx)+{+ (void) dumper;+ (void) type;+ const GuStr* sp = p;+ gu_dump_str_scalar(ctx, *sp);+}++static void +gu_dump_string(GuDumpFn* dumper, GuType* type, const void* p, + GuDump* ctx)+{+ (void) dumper;+ (void) type;+ const GuString* sp = p;+ gu_yaml_scalar(ctx->yaml, *sp);+}+++// For _non-shared_ pointers.+static void +gu_dump_pointer(GuDumpFn* dumper, GuType* type, const void* p, + GuDump* ctx)+{+ (void) dumper;+ GuPointerType* ptype = (GuPointerType*) type;+ void* const* pp = p;+ if (*pp == NULL) {+ gu_dump_null(ctx);+ } else {+ gu_dump(ptype->pointed_type, *pp, ctx);+ }+}++typedef struct {+ GuMapItor itor;+ GuMapType* mtype;+ GuDump* ctx;+} GuDumpMapFn;++static void+gu_dump_map_itor(GuMapItor* self, const void* key, void* value, GuExn* err)+{+ (void) err;+ GuDumpMapFn* clo = (GuDumpMapFn*) self;+ gu_dump(clo->mtype->key_type, key, clo->ctx);+ gu_dump(clo->mtype->value_type, value, clo->ctx);+}++static void+gu_dump_map(GuDumpFn* dumper, GuType* type, const void* p,+ GuDump* ctx)+{+ (void) dumper;+ GuMapType* mtype = (GuMapType*) type;+ GuMap* map = (GuMap*) p;+ gu_yaml_begin_mapping(ctx->yaml);+ GuDumpMapFn clo = { { gu_dump_map_itor }, mtype, ctx };+ gu_map_iter(map, &clo.itor, NULL);+ gu_yaml_end(ctx->yaml);+}+++static void+gu_dump_struct(GuDumpFn* dumper, GuType* type, const void* p,+ GuDump* ctx)+{+ (void) dumper;+ GuStructRepr* srepr = (GuStructRepr*) type;+ gu_yaml_begin_mapping(ctx->yaml);+ const uint8_t* data = p;+ GuLength* old_lenp = gu_map_get(ctx->data, gu_dump_length_key, void*);+ GuLength len = (GuLength)-1;+ gu_map_put(ctx->data, gu_dump_length_key, void*, &len);++ for (int i = 0; i < srepr->members.len; i++) {+ const GuMember* member = &srepr->members.elems[i];+ gu_dump_str_scalar(ctx, member->name);+ const uint8_t* memp = &data[member->offset];+ if (member->is_flex) {+ // Flexible array member+ gu_assert(len != (GuLength)-1);+ size_t mem_s = gu_type_size(member->type);+ gu_yaml_begin_sequence(ctx->yaml);+ for (GuLength i = 0; i < len; i++) {+ gu_dump(member->type, &memp[i * mem_s], ctx);+ }+ gu_yaml_end(ctx->yaml);+ } else {+ gu_dump(member->type, memp, ctx);+ }+ }+ gu_yaml_end(ctx->yaml);+ if (old_lenp) {+ gu_map_set(ctx->data, gu_dump_length_key, void*, old_lenp);+ }+}++static void+gu_dump_alias(GuDumpFn* dumper, GuType* type, const void* p,+ GuDump* ctx)+{+ (void) dumper;+ GuTypeAlias* alias = gu_type_cast(type, alias);++ gu_dump(alias->type, p, ctx);+}++static const char gu_dump_reference_key[] = "reference";++static bool+gu_dump_anchor(GuDump* ctx, const void* p) +{+ GuMap* map = gu_map_get(ctx->data, gu_dump_reference_key, void*);+ if (map == NULL) {+ map = gu_new_addr_map(void, GuYamlAnchor,+ &gu_yaml_null_anchor, ctx->pool);+ gu_map_put(ctx->data, gu_dump_reference_key, void*, map);+ }+ GuYamlAnchor a = gu_map_get(map, p, GuYamlAnchor);+ if (a == gu_yaml_null_anchor) {+ a = gu_yaml_anchor(ctx->yaml);+ gu_map_put(map, p, GuYamlAnchor, a);+ return true;+ } else {+ gu_yaml_alias(ctx->yaml, a);+ return false;+ }+}++static void+gu_dump_referenced(GuDumpFn* dumper, GuType* type, const void* p,+ GuDump* ctx)+{+ (void) dumper;+ GuTypeAlias* alias = gu_type_cast(type, alias);+ bool created = gu_dump_anchor(ctx, p);+ if (created) {+ gu_dump(alias->type, p, ctx);+ } else {+ // gu_assert(false);+ }+}++static void +gu_dump_reference(GuDumpFn* dumper, GuType* type, const void* p, + GuDump* ctx)+{+ (void) dumper;+ (void) type;+ void* const* pp = p;+ bool created = gu_dump_anchor(ctx, *pp);+ if (created) {+ // gu_assert(false);+ GuPointerType* ptype = (GuPointerType*) type;+ gu_dump(ptype->pointed_type, *pp, ctx);+ }+}++static void +gu_dump_shared(GuDumpFn* dumper, GuType* type, const void* p, + GuDump* ctx)+{+ (void) dumper;+ void* const* pp = p;+ if (*pp == NULL) {+ gu_dump_null(ctx);+ } else {+ bool created = gu_dump_anchor(ctx, *pp);+ if (created) {+ GuPointerType* ptype = (GuPointerType*) type;+ gu_dump(ptype->pointed_type, *pp, ctx);+ }+ }+}++static void +gu_dump_list(GuDumpFn* dumper, GuType* type, const void* p, + GuDump* ctx)+{+ (void) dumper;+ GuListType* ltype = (GuListType*) type;+ const uint8_t* up = p;+ int len = * (const int*) p;+ size_t elem_size = gu_type_size(ltype->elem_type);+ gu_yaml_begin_sequence(ctx->yaml);+ for (int i = 0; i < len; i++) {+ ptrdiff_t offset = ltype->elems_offset + i * elem_size;+ gu_dump(ltype->elem_type, &up[offset], ctx);+ }+ gu_yaml_end(ctx->yaml);+}++static void+gu_dump_variant(GuDumpFn* dumper, GuType* type, const void* p,+ GuDump* ctx)+{+ (void) dumper;+ GuVariantType* vtype = gu_type_cast(type, GuVariant);+ const GuVariant* vp = p;+ int tag = gu_variant_tag(*vp);+ for (int i = 0; i < vtype->ctors.len; i++) {+ GuConstructor* ctor = &vtype->ctors.elems[i];+ if (ctor->c_tag == tag) {+ gu_yaml_begin_mapping(ctx->yaml);+ gu_dump_str_scalar(ctx, ctor->c_name);+ void* data = gu_variant_data(*vp);+ gu_dump(ctor->type, data, ctx);+ gu_yaml_end(ctx->yaml);+ return;+ }+ }+ gu_assert(false);+}+++static void+gu_dump_enum(GuDumpFn* dumper, GuType* type, const void* p,+ GuDump* ctx)+{+ (void) dumper;+ GuEnumType* etype = gu_type_cast(type, enum);+ GuEnumConstant* cp = gu_enum_value(etype, p);+ gu_assert(cp != NULL);+ gu_dump_str_scalar(ctx, cp->name);+}++static void+gu_dump_seq(GuDumpFn* dumper, GuType* type, const void* p,+ GuDump* ctx)+{+ (void) dumper;+ GuSeqType* dtype = gu_type_cast(type, GuSeq);+ size_t elem_size = gu_type_size(dtype->elem_type);+ const GuSeq* seqp = p;+ GuSeq seq = *seqp;+ if (gu_seq_is_null(seq)) {+ gu_dump_null(ctx);+ return;+ }+ size_t len = gu_seq_length(seq);+ const uint8_t* data = gu_seq_data(seq);+ gu_yaml_begin_sequence(ctx->yaml);+ for (size_t i = 0; i < len; i++) {+ const void* elemp = &data[i * elem_size];+ gu_dump(dtype->elem_type, elemp, ctx);+ }+ gu_yaml_end(ctx->yaml);+}+++GuTypeTable+gu_dump_table = GU_TYPETABLE(+ GU_SLIST_0,+ { gu_kind(int), gu_fn(gu_dump_int) },+ { gu_kind(uint16_t), gu_fn(gu_dump_uint16) },+ { gu_kind(size_t), gu_fn(gu_dump_size) },+ { gu_kind(GuStr), gu_fn(gu_dump_str) },+ { gu_kind(GuString), gu_fn(gu_dump_string) },+ { gu_kind(struct), gu_fn(gu_dump_struct) },+ { gu_kind(pointer), gu_fn(gu_dump_pointer) },+ { gu_kind(GuMap), gu_fn(gu_dump_map) },+ { gu_kind(alias), gu_fn(gu_dump_alias) },+ { gu_kind(reference), gu_fn(gu_dump_reference) },+ { gu_kind(referenced), gu_fn(gu_dump_referenced) },+ { gu_kind(shared), gu_fn(gu_dump_shared) },+ { gu_kind(GuList), gu_fn(gu_dump_list) },+ { gu_kind(GuSeq), gu_fn(gu_dump_seq) },+ { gu_kind(GuLength), gu_fn(gu_dump_length) },+ { gu_kind(GuVariant), gu_fn(gu_dump_variant) },+ { gu_kind(double), gu_fn(gu_dump_double) },+ { gu_kind(enum), gu_fn(gu_dump_enum) },+ );
@@ -0,0 +1,34 @@+#ifndef GU_DUMP_H_+#define GU_DUMP_H_++#include <gu/defs.h>+#include <gu/yaml.h>+#include <gu/type.h>+#include <gu/map.h>++typedef struct GuDump GuDump;++struct GuDump {+ GuPool* pool;+ GuYaml* yaml;+ GuMap* data;+ GuTypeMap* dumpers;+ bool print_address;+};++typedef void (*GuDumpFn)(GuFn* self, GuType* type, const void* value, GuDump* ctx);++GuDump*+gu_new_dump(GuWriter* wtr, GuTypeTable* dumpers, GuExn* err, GuPool* pool);++void+gu_dump(GuType* type, const void* value, GuDump* ctx);++void+gu_dump_stderr(GuType* type, const void* value, GuExn* err);++extern GuTypeTable+gu_dump_table;+++#endif // GU_DUMP_H_
@@ -0,0 +1,7 @@+#include <gu/enum.h>++void+gu_enum_next(GuEnum* en, void* to, GuPool* pool)+{+ en->next(en, to, pool);+}
@@ -0,0 +1,35 @@+#ifndef GU_ENUM_H_+#define GU_ENUM_H_++#include <gu/mem.h>++typedef struct GuEnum GuEnum;++struct GuEnum {+ void (*next)(GuEnum* self, void* to, GuPool* pool);+};++void+gu_enum_next(GuEnum* en, void* to, GuPool* pool);++#ifdef GU_GNUC++#define gu_next(ENUM, T, POOL) \+ ({ \+ T gu_next_tmp_; \+ gu_enum_next((ENUM), &gu_next_tmp_, (POOL)); \+ gu_next_tmp_; \+ })+#else+static inline void*+gu_enum_next_(GuEnum* en, void* to, GuPool* pool)+{+ gu_enum_next(en, to, pool);+ return to;+}+#define gu_next(ENUM, T, POOL) \+ (*(T*)gu_enum_next_((ENUM), &(T){0}, (POOL)))++#endif++#endif /* GU_ENUM_H_ */
@@ -0,0 +1,72 @@+#include <gu/exn.h>+#include <gu/assert.h>+++GuExn*+gu_new_exn(GuExn* parent, GuKind* catch, GuPool* pool)+{+ return gu_new_s(pool, GuExn,+ .state = GU_EXN_OK,+ .parent = parent,+ .catch = catch,+ .caught = NULL,+ .data.pool = pool,+ .data.data = NULL);+}++void+gu_exn_block(GuExn* err)+{+ if (err && err->state == GU_EXN_RAISED) {+ err->state = GU_EXN_BLOCKED;+ }+}++void+gu_exn_unblock(GuExn* err)+{+ if (err && err->state == GU_EXN_BLOCKED) {+ err->state = GU_EXN_RAISED;+ }+}++GuExnData*+gu_exn_raise_debug_(GuExn* base, GuType* type, + const char* filename, const char* func, int lineno)+{+ gu_require(type);++ // TODO: log the error, once there's a system for dumping+ // error objects.++ GuExn* err = base;+ + while (err && !(err->catch && gu_type_has_kind(type, err->catch))) {+ err->state = GU_EXN_RAISED;+ err = err->parent;+ }+ if (!err) {+ gu_abort_(GU_ASSERT_ASSERTION, filename, func, lineno,+ "Unexpected error raised");+ }+ GuExnState old_state = err->state;+ err->state = GU_EXN_RAISED;+ if (old_state == GU_EXN_OK) {+ err->caught = type;+ if (err->data.pool) {+ return &err->data;+ }+ }+ // Exceptian had already been raised, possibly blocked, or no+ // exception value is required.+ return NULL;+}++GuExnData*+gu_exn_raise_(GuExn* base, GuType* type)+{+ return gu_exn_raise_debug_(base, type, NULL, NULL, -1);+}+++GU_DEFINE_TYPE(GuErrno, signed, _);
@@ -0,0 +1,195 @@+#ifndef GU_EXN_H_+#define GU_EXN_H_++#include <gu/mem.h>+#include <gu/type.h>++/** @file+ *+ * @defgroup GuExn Exceptions+ * Defined in <gu/exn.h>.+ * @{+ */++/// An exception frame.+typedef struct GuExn GuExn;++/// @private+typedef enum {+ GU_EXN_RAISED,+ GU_EXN_OK,+ GU_EXN_BLOCKED+} GuExnState;++typedef struct GuExnData GuExnData;++/// A structure for storing exception values.+struct GuExnData+/**+ * When an exception is raised, if there is an associated value, it+ * must be allocated from a pool that still exists when control+ * returns to the handler of that exception. This structure is used to+ * communicate the exception from the raiser to the handler: the+ * handler sets #pool when setting up the exception frame, and the+ * raiser uses that pool to allocate the value and stores that in+ * #data. When control returns to the handler, it reads the value from+ * there.+ */+{+ + /// The pool that the exception value should be allocated from.+ GuPool* const pool;++ /// The exception value.+ const void* data;+};++struct GuExn {+ /// @privatesection+ GuExnState state;+ GuExn* parent;+ GuKind* catch;+ GuType* caught;+ GuExnData data;+};+++/// @name Creating exception frames+//@{+++/// Allocate a new local exception frame.+#define gu_exn(parent_, catch_, pool_) &(GuExn){ \+ .state = GU_EXN_OK, \+ .parent = parent_, \+ .catch = gu_kind(catch_), \+ .caught = NULL, \+ .data.pool = pool_, \+ .data.data = NULL \+}+++/// Allocate a new exception frame.+GuExn*+gu_new_exn(GuExn* parent, GuKind* catch_kind, GuPool* pool);++++static inline bool+gu_exn_is_raised(GuExn* err) {+ return err && (err->state == GU_EXN_RAISED);+}++static inline void+gu_exn_clear(GuExn* err) {+ err->caught = NULL;+ err->state = GU_EXN_OK;+}++++GuType*+gu_exn_caught(GuExn* err);++const void*+gu_exn_caught_data(GuExn* err);++/// Temporarily block a raised exception.+void+gu_exn_block(GuExn* err);++/// Show again a blocked exception.+void+gu_exn_unblock(GuExn* err);++//@private+GuExnData*+gu_exn_raise_(GuExn* err, GuType* type);++//@private+GuExnData*+gu_exn_raise_debug_(GuExn* err, GuType* type,+ const char* filename, const char* func, int lineno);++#ifdef NDEBUG+#define gu_exn_raise(err_, type_) \+ gu_exn_raise_(err_, type_)+#else+#define gu_exn_raise(err_, type_) \+ gu_exn_raise_debug_(err_, type_, \+ __FILE__, __func__, __LINE__)+#endif++/// Raise an exception.+#define gu_raise(exn, T) \+ gu_exn_raise(exn, gu_type(T))+/**< + * @param exn The current exception frame.+ *+ * @param T The C type of the exception to raise.+ *+ * @return A #GuExnData object that can be used to store the exception value, or+ * \c NULL if no value is required.+ * + * @note The associated #GuType object for type \p T must be visible.+ */++#define gu_raise_new(error_, t_, pool_, expr_) \+ GU_BEGIN \+ GuExnData* gu_raise_err_ = gu_raise(error_, t_); \+ if (gu_raise_err_) { \+ GuPool* pool_ = gu_raise_err_->pool; \+ gu_raise_err_->data = expr_; \+ } \+ GU_END++#define gu_raise_i(error_, t_, ...) \+ gu_raise_new(error_, t_, gu_raise_pool_, gu_new_i(gu_raise_pool_, t_, __VA_ARGS__))+++/// Check the status of the current exception frame+static inline bool+gu_ok(GuExn* exn) {+ return !GU_UNLIKELY(gu_exn_is_raised(exn));+}+/**<+ * @return \c false if an exception has been raised in the frame \p exn+ * and it has not been blocked, \c true otherwise.+ */+++/// Return from current function if an exception has been raised.+#define gu_return_on_exn(exn_, retval_) \+ GU_BEGIN \+ if (gu_exn_is_raised(exn_)) return retval_; \+ GU_END+/**<+ * @showinitializer+ */+++#include <errno.h>++typedef int GuErrno;++extern GU_DECLARE_TYPE(GuErrno, signed);++++#define gu_raise_errno(error_) \+ gu_raise_i(error_, GuErrno, errno)++#if 0++typedef void (*GuExnPrintFn)(GuFn* clo, void* err, FILE* out);++extern GuTypeTable gu_exn_default_printer;++void+gu_exn_print(GuExn* err, FILE* out, GuTypeMap printer_map);++#endif++/** @} */++#endif // GU_EXN_H_
@@ -0,0 +1,73 @@+#include <gu/file.h>++typedef struct GuFileOutStream GuFileOutStream;++struct GuFileOutStream {+ GuOutStream stream;+ FILE* file;+};++static size_t+gu_file_output(GuOutStream* stream, const uint8_t* buf, size_t len, GuExn* err)+{+ GuFileOutStream* fos = gu_container(stream, GuFileOutStream, stream);+ errno = 0;+ size_t wrote = fwrite(buf, 1, len, fos->file);+ if (wrote < len) {+ if (ferror(fos->file)) {+ gu_raise_errno(err);+ }+ }+ return wrote;+}++static void+gu_file_flush(GuOutStream* stream, GuExn* err)+{+ GuFileOutStream* fos = gu_container(stream, GuFileOutStream, stream);+ errno = 0;+ if (fflush(fos->file) != 0) {+ gu_raise_errno(err);+ }+}++GuOut*+gu_file_out(FILE* file, GuPool* pool)+{+ GuFileOutStream* fos = gu_new_i(pool, GuFileOutStream,+ .stream.output = gu_file_output,+ .stream.flush = gu_file_flush,+ .file = file);+ return gu_new_out(&fos->stream, pool);+}+++typedef struct GuFileInStream GuFileInStream;++struct GuFileInStream {+ GuInStream stream;+ FILE* file;+};++static size_t +gu_file_input(GuInStream* stream, uint8_t* buf, size_t sz, GuExn* err)+{+ GuFileInStream* fis = gu_container(stream, GuFileInStream, stream);+ errno = 0;+ size_t got = fread(buf, 1, sz, fis->file);+ if (got == 0) {+ if (ferror(fis->file)) {+ gu_raise_errno(err);+ }+ }+ return got;+}++GuIn*+gu_file_in(FILE* file, GuPool* pool)+{+ GuFileInStream* fis = gu_new_s(pool, GuFileInStream,+ .stream.input = gu_file_input,+ .file = file);+ return gu_new_in(&fis->stream, pool);+}
@@ -0,0 +1,14 @@+#ifndef GU_FILE_H_+#define GU_FILE_H_++#include <gu/in.h>+#include <gu/out.h>+#include <stdio.h>++GuOut*+gu_file_out(FILE* file, GuPool* pool);++GuIn* +gu_file_in(FILE* file, GuPool* pool);++#endif // GU_FILE_H_
@@ -0,0 +1,1 @@+#include <gu/fun.h>
@@ -0,0 +1,71 @@+#ifndef GU_FUN_H_+#define GU_FUN_H_++#include <gu/defs.h>++typedef void (*GuFn)();+typedef void (*GuFn0)(GuFn* clo);+typedef void (*GuFn1)(GuFn* clo, void* arg1);+typedef void (*GuFn2)(GuFn* clo, void* arg1, void* arg2);++#define gu_fn(fn_) (&(GuFn){ fn_ })++static inline void+gu_apply0(GuFn* fn) {+ (*fn)(fn);+}++static inline void+gu_apply1(GuFn* fn, void* arg1) {+ (*fn)(fn, arg1);+}++static inline void+gu_apply2(GuFn* fn, void* arg1, void* arg2) {+ (*fn)(fn, arg1, arg2);+}++#define gu_apply(fn_, ...) \+ ((fn_)->fn((fn_), __VA_ARGS__))++typedef struct GuClo0 GuClo0;++struct GuClo0 {+ GuFn fn;+};++typedef struct GuClo1 GuClo1;++struct GuClo1 {+ GuFn fn;+ void *env1;+};++typedef struct GuClo2 GuClo2;+struct GuClo2 {+ GuFn fn;+ void *env1;+ void *env2;+};++typedef struct GuClo3 GuClo3;+struct GuClo3 {+ GuFn fn;+ void *env1;+ void *env2;+ void *env3;+};++typedef const struct GuEquality GuEquality;++struct GuEquality {+ bool (*is_equal)(GuEquality* self, const void* a, const void* b);+};++typedef const struct GuOrder GuOrder;++struct GuOrder {+ int (*compare)(GuOrder* self, const void* a, const void* b);+};++#endif // GU_FUN_H_
@@ -0,0 +1,77 @@+#include <gu/hash.h>++GuHash+gu_hash_bytes(GuHash h, const uint8_t* buf, size_t len)+{+ for (size_t n = 0; n < len; n++) {+ h = gu_hash_byte(h, buf[n]);+ }+ return h;+}++static bool+gu_int_eq_fn(GuEquality* self, const void* p1, const void* p2)+{+ (void) self;+ const int* ip1 = p1;+ const int* ip2 = p2;+ return *ip1 == *ip2;+}++static GuHash+gu_int_hash_fn(GuHasher* self, const void* p)+{+ (void) self;+ return (GuHash) *(const int*) p;+}++GuHasher gu_int_hasher[1] = {+ {+ { gu_int_eq_fn },+ gu_int_hash_fn+ }+};++static bool+gu_addr_eq_fn(GuEquality* self, const void* p1, const void* p2)+{+ (void) self;+ return (p1 == p2);+}++static GuHash+gu_addr_hash_fn(GuHasher* self, const void* p)+{+ (void) self;+ return (GuHash) (uintptr_t) p;+}++GuHasher gu_addr_hasher[1] = {+ {+ { gu_addr_eq_fn },+ gu_addr_hash_fn+ }+};++static bool+gu_word_eq_fn(GuEquality* self, const void* p1, const void* p2)+{+ (void) self;+ const GuWord* wp1 = p1;+ const GuWord* wp2 = p2;+ return (*wp1 == *wp2);+}++static GuHash+gu_word_hash_fn(GuHasher* self, const void* p)+{+ (void) self;+ return (GuHash) (uintptr_t) p;+}++GuHasher gu_word_hasher[1] = {+ {+ { gu_word_eq_fn },+ gu_word_hash_fn+ }+};
@@ -0,0 +1,40 @@+#ifndef GU_HASH_H_+#define GU_HASH_H_++#include <gu/fun.h>++typedef GuWord GuHash;++static inline GuHash+gu_hash_ptr(void* ptr)+{+ return (GuHash) ptr;+}+++static inline GuHash+gu_hash_byte(GuHash h, uint8_t u)+{+ // Paul Larson's simple byte hash+ return h * 101 + u;+}+++GuHash+gu_hash_bytes(GuHash h, const uint8_t* buf, size_t len);++typedef const struct GuHasher GuHasher;++struct GuHasher {+ GuEquality eq;+ GuHash (*hash)(GuHasher* self, const void* p);+};+++extern GuHasher gu_int_hasher[1];++extern GuHasher gu_addr_hasher[1];++extern GuHasher gu_word_hasher[1];++#endif // GU_HASH_H_
@@ -0,0 +1,421 @@+#include <gu/in.h>+#include <gu/bits.h>+#include <math.h>++GU_DEFINE_TYPE(GuEOF, abstract, _);+++static bool+gu_in_is_buffering(GuIn* in)+{+ return (in->buf_end != NULL);+}++static void+gu_in_end_buffering(GuIn* in, GuExn* err)+{+ if (!gu_in_is_buffering(in)) {+ return;+ }+ if (in->stream->end_buffer) {+ size_t len = ((ptrdiff_t) in->buf_size) + in->buf_curr;+ in->stream->end_buffer(in->stream, len, err);+ }+ in->buf_curr = 0;+ in->buf_size = 0;+ in->buf_end = NULL;+}++static bool+gu_in_begin_buffering(GuIn* in, GuExn* err)+{+ if (gu_in_is_buffering(in)) {+ if (in->buf_curr < 0) {+ return true;+ } else {+ gu_in_end_buffering(in, err);+ if (!gu_ok(err)) return false;+ }+ }+ if (!in->stream->begin_buffer) {+ return false;+ }+ size_t sz = 0;+ const uint8_t* new_buf = + in->stream->begin_buffer(in->stream, &sz, err);+ if (new_buf) {+ in->buf_end = &new_buf[sz];+ in->buf_curr = -(ptrdiff_t) sz;+ in->buf_size = sz;+ return true;+ }+ return false;+}++static size_t+gu_in_input(GuIn* in, uint8_t* dst, size_t sz, GuExn* err)+{+ if (sz == 0) {+ return 0;+ }+ gu_in_end_buffering(in, err);+ if (!gu_ok(err)) {+ return 0;+ }+ GuInStream* stream = in->stream;+ if (stream->input) {+ return stream->input(stream, dst, sz, err);+ }+ gu_raise(err, GuEOF);+ return 0;+}++size_t+gu_in_some(GuIn* in, uint8_t* dst, size_t sz, GuExn* err)+{+ gu_require(sz <= PTRDIFF_MAX);+ if (!gu_in_begin_buffering(in, err)) {+ if (!gu_ok(err)) return 0; + return gu_in_input(in, dst, sz, err);+ }+ size_t real_sz = GU_MIN(sz, (size_t)(-in->buf_curr));+ memcpy(dst, &in->buf_end[in->buf_curr], real_sz);+ in->buf_curr += real_sz;+ return real_sz;+}++void+gu_in_bytes_(GuIn* in, uint8_t* dst, size_t sz, GuExn* err)+{+ size_t avail_sz = GU_MIN(sz, (size_t)(-in->buf_curr));+ memcpy(dst, &in->buf_end[in->buf_curr], avail_sz);+ in->buf_curr += avail_sz;+ if (avail_sz < sz) {+ gu_in_input(in, &dst[avail_sz], sz - avail_sz, err);+ }+}++const uint8_t*+gu_in_begin_span(GuIn* in, size_t *sz_out, GuExn* err)+{+ if (!gu_in_begin_buffering(in, err)) {+ return NULL;+ }+ *sz_out = (size_t) -in->buf_curr;+ return &in->buf_end[in->buf_curr];+}++void+gu_in_end_span(GuIn* in, size_t consumed)+{+ gu_require(consumed <= (size_t) -in->buf_curr);+ in->buf_curr += (ptrdiff_t) consumed;+}++uint8_t +gu_in_u8_(GuIn* in, GuExn* err)+{+ if (gu_in_begin_buffering(in, err) && in->buf_curr < 0) {+ return in->buf_end[in->buf_curr++];+ }+ uint8_t u = 0;+ size_t r = gu_in_input(in, &u, 1, err);+ if (r < 1) {+ gu_raise(err, GuEOF);+ return 0;+ }+ return u;+}++static uint64_t+gu_in_be(GuIn* in, GuExn* err, int n)+{+ uint8_t buf[8];+ gu_in_bytes(in, buf, n, err);+ uint64_t u = 0;+ for (int i = 0; i < n; i++) {+ u = u << 8 | buf[i];+ }+ return u;+}++static uint64_t+gu_in_le(GuIn* in, GuExn* err, int n)+{+ uint8_t buf[8];+ gu_in_bytes(in, buf, n, err);+ uint64_t u = 0;+ for (int i = 0; i < n; i++) {+ u = u << 8 | buf[i];+ }+ return u;+}++int8_t +gu_in_s8(GuIn* in, GuExn* err)+{+ return gu_decode_2c8(gu_in_u8(in, err), err);+}+++uint16_t+gu_in_u16le(GuIn* in, GuExn* err)+{+ return gu_in_le(in, err, 2);+}++int16_t +gu_in_s16le(GuIn* in, GuExn* err)+{+ return gu_decode_2c16(gu_in_u16le(in, err), err);+}++uint16_t+gu_in_u16be(GuIn* in, GuExn* err)+{+ return gu_in_be(in, err, 2);+}++int16_t +gu_in_s16be(GuIn* in, GuExn* err)+{+ return gu_decode_2c16(gu_in_u16be(in, err), err);+}+++uint32_t+gu_in_u32le(GuIn* in, GuExn* err)+{+ return gu_in_le(in, err, 4);+}++int32_t +gu_in_s32le(GuIn* in, GuExn* err)+{+ return gu_decode_2c32(gu_in_u32le(in, err), err);+}++uint32_t+gu_in_u32be(GuIn* in, GuExn* err)+{+ return gu_in_be(in, err, 4);+}++int32_t +gu_in_s32be(GuIn* in, GuExn* err)+{+ return gu_decode_2c32(gu_in_u32be(in, err), err);+}+++uint64_t+gu_in_u64le(GuIn* in, GuExn* err)+{+ return gu_in_le(in, err, 8);+}++int64_t +gu_in_s64le(GuIn* in, GuExn* err)+{+ return gu_decode_2c64(gu_in_u64le(in, err), err);+}++uint64_t+gu_in_u64be(GuIn* in, GuExn* err)+{+ return gu_in_be(in, err, 8);+}++int64_t +gu_in_s64be(GuIn* in, GuExn* err)+{+ return gu_decode_2c64(gu_in_u64be(in, err), err);+}++double+gu_in_f64le(GuIn* in, GuExn* err)+{+ return gu_decode_double(gu_in_u64le(in, err));+}++double+gu_in_f64be(GuIn* in, GuExn* err)+{+ return gu_decode_double(gu_in_u64le(in, err));+}+++static void+gu_in_fini(GuFinalizer* fin)+{+ GuIn* in = gu_container(fin, GuIn, fini);+ GuPool* pool = gu_local_pool();+ GuExn* err = gu_exn(NULL, type, pool);+ gu_in_end_buffering(in, err);+ gu_pool_free(pool);+}++GuIn+gu_init_in(GuInStream* stream)+{+ return (GuIn) {+ .buf_end = NULL,+ .buf_curr = 0,+ .buf_size = 0,+ .stream = stream,+ .fini.fn = gu_in_fini+ };+}++GuIn*+gu_new_in(GuInStream* stream, GuPool* pool)+{+ GuIn* in = gu_new(GuIn, pool);+ *in = gu_init_in(stream);+ return in;+}+++typedef struct GuProxyInStream GuProxyInStream;++struct GuProxyInStream {+ GuInStream stream;+ GuIn* real_in;+};++static const uint8_t*+gu_proxy_in_begin_buffer(GuInStream* self, size_t* sz_out, GuExn* err)+{+ GuProxyInStream* pis = gu_container(self, GuProxyInStream, stream);+ return gu_in_begin_span(pis->real_in, sz_out, err);+}++static void+gu_proxy_in_end_buffer(GuInStream* self, size_t sz, GuExn* err)+{+ GuProxyInStream* pis = gu_container(self, GuProxyInStream, stream);+ gu_in_end_span(pis->real_in, sz);+}++static size_t+gu_proxy_in_input(GuInStream* self, uint8_t* dst, size_t sz, GuExn* err)+{+ GuProxyInStream* pis = gu_container(self, GuProxyInStream, stream);+ return gu_in_some(pis->real_in, dst, sz, err);+}++GuInStream*+gu_in_proxy_stream(GuIn* in, GuPool* pool)+{+ return &gu_new_s(+ pool, GuProxyInStream,+ .stream.begin_buffer = gu_proxy_in_begin_buffer,+ .stream.end_buffer = gu_proxy_in_end_buffer,+ .stream.input = gu_proxy_in_input,+ .real_in = in)->stream;+}++enum {+ GU_BUFFERED_IN_BUF_SIZE = 4096+};++typedef struct GuBufferedInStream GuBufferedInStream;++struct GuBufferedInStream {+ GuInStream stream;+ size_t alloc;+ size_t have;+ size_t curr;+ GuIn* in;+ uint8_t buf[];+};++static const uint8_t*+gu_buffered_in_begin_buffer(GuInStream* self, size_t* sz_out, GuExn* err)+{+ GuBufferedInStream* bis = + gu_container(self, GuBufferedInStream, stream);+ if (bis->curr == bis->have) {+ bis->curr = 0;+ bis->have = gu_in_some(bis->in, bis->buf, bis->alloc, err);+ if (!gu_ok(err)) return NULL;+ }+ *sz_out = bis->have - bis->curr;+ return &bis->buf[bis->curr];+}++static void+gu_buffered_in_end_buffer(GuInStream* self, size_t consumed, GuExn* err)+{+ GuBufferedInStream* bis = + gu_container(self, GuBufferedInStream, stream);+ gu_require(consumed < bis->have - bis->curr);+ bis->curr += consumed;+}++static size_t+gu_buffered_in_input(GuInStream* self, uint8_t* dst, size_t sz, GuExn* err)+{+ GuBufferedInStream* bis = + gu_container(self, GuBufferedInStream, stream);+ return gu_in_some(bis->in, dst, sz, err);+}++GuIn*+gu_buffered_in(GuIn* in, size_t buf_sz, GuPool* pool)+{+ GuBufferedInStream* bis = gu_new_flex(pool, GuBufferedInStream,+ buf, buf_sz);+ bis->stream = (GuInStream) {+ .begin_buffer = gu_buffered_in_begin_buffer,+ .end_buffer = gu_buffered_in_end_buffer,+ .input = gu_buffered_in_input+ };+ bis->have = bis->curr = 0;+ bis->alloc = buf_sz;+ return gu_new_in(&bis->stream, pool);+}++typedef struct GuDataIn GuDataIn;++struct GuDataIn {+ GuInStream stream; + const uint8_t* data;+ size_t sz;+};++static const uint8_t*+gu_data_in_begin_buffer(GuInStream* self, size_t* sz_out, GuExn* err)+{+ (void) err;+ GuDataIn* di = gu_container(self, GuDataIn, stream);+ const uint8_t* buf = di->data;+ if (buf) {+ *sz_out = di->sz;+ di->data = NULL;+ di->sz = 0;+ }+ return buf;+}++GuIn*+gu_data_in(const uint8_t* data, size_t sz, GuPool* pool)+{+ GuDataIn* di = gu_new_s(pool, GuDataIn,+ .stream.begin_buffer = gu_data_in_begin_buffer,+ .data = data,+ .sz = sz);+ return gu_new_in(&di->stream, pool);+}++extern inline uint8_t +gu_in_u8(GuIn* restrict in, GuExn* err);++extern inline void+gu_in_bytes(GuIn* in, uint8_t* buf, size_t sz, GuExn* err);++extern inline int+gu_in_peek_u8(GuIn* restrict in);++extern inline void+gu_in_consume(GuIn* restrict in, size_t sz);
@@ -0,0 +1,146 @@+#ifndef GU_IN_H_+#define GU_IN_H_++#include <gu/defs.h>+#include <gu/exn.h>+#include <gu/assert.h>++typedef struct GuInStream GuInStream;++struct GuInStream {+ const uint8_t* (*begin_buffer)(GuInStream* self, size_t* sz_out, + GuExn* err);+ void (*end_buffer)(GuInStream* self, size_t consumed, GuExn* err);+ size_t (*input)(GuInStream* self, uint8_t* buf, size_t max_sz, + GuExn* err);+};++typedef struct GuIn GuIn;++struct GuIn {+ const uint8_t* restrict buf_end;+ ptrdiff_t buf_curr;+ size_t buf_size;+ GuInStream* stream;+ GuFinalizer fini;+};+++GuIn+gu_init_in(GuInStream* stream);++GuIn*+gu_new_in(GuInStream* stream, GuPool* pool);++GuInStream*+gu_in_proxy_stream(GuIn* in, GuPool* pool);++const uint8_t*+gu_in_begin_span(GuIn* in, size_t *sz_out, GuExn* err);++void+gu_in_end_span(GuIn* in, size_t consumed);++size_t+gu_in_some(GuIn* in, uint8_t* buf, size_t max_len, GuExn* err);++inline void+gu_in_bytes(GuIn* in, uint8_t* buf, size_t sz, GuExn* err)+{+ gu_require(sz < PTRDIFF_MAX);+ ptrdiff_t curr = in->buf_curr;+ ptrdiff_t new_curr = curr + (ptrdiff_t) sz;+ if (GU_UNLIKELY(new_curr > 0)) {+ extern void gu_in_bytes_(GuIn* in, uint8_t* buf, size_t sz, + GuExn* err);+ gu_in_bytes_(in, buf, sz, err);+ return;+ }+ memcpy(buf, &in->buf_end[curr], sz);+ in->buf_curr = new_curr;+}++inline int+gu_in_peek_u8(GuIn* restrict in)+{+ if (GU_UNLIKELY(in->buf_curr == 0)) {+ return -1;+ }+ return in->buf_end[in->buf_curr];+}++inline void+gu_in_consume(GuIn* restrict in, size_t sz)+{+ gu_require((ptrdiff_t) sz + in->buf_curr <= 0);+ in->buf_curr += sz;+}+++inline uint8_t +gu_in_u8(GuIn* restrict in, GuExn* err)+{+ if (GU_UNLIKELY(in->buf_curr == 0)) {+ extern uint8_t gu_in_u8_(GuIn* restrict in, GuExn* err);+ return gu_in_u8_(in, err);+ }+ return in->buf_end[in->buf_curr++];+}++int8_t +gu_in_s8(GuIn* in, GuExn* err);++uint16_t+gu_in_u16le(GuIn* in, GuExn* err);++uint16_t+gu_in_u16be(GuIn* in, GuExn* err);++int16_t+gu_in_s16le(GuIn* in, GuExn* err);++int16_t+gu_in_s16be(GuIn* in, GuExn* err);++uint32_t+gu_in_u32le(GuIn* in, GuExn* err);++uint32_t+gu_in_u32be(GuIn* in, GuExn* err);++int32_t+gu_in_s32le(GuIn* in, GuExn* err);++int32_t+gu_in_s32be(GuIn* in, GuExn* err);++uint64_t+gu_in_u64le(GuIn* in, GuExn* err);++uint64_t+gu_in_u64be(GuIn* in, GuExn* err);++int64_t+gu_in_s64le(GuIn* in, GuExn* err);++int64_t+gu_in_s64be(GuIn* in, GuExn* err);++double+gu_in_f64le(GuIn* in, GuExn* err);++double+gu_in_f64be(GuIn* in, GuExn* err);++GuIn*+gu_buffered_in(GuIn* in, size_t sz, GuPool* pool);++GuIn*+gu_data_in(const uint8_t* buf, size_t size, GuPool* pool);+++extern GU_DECLARE_TYPE(GuEOF, abstract);++#include <gu/type.h>++#endif // GU_IN_H_
@@ -0,0 +1,59 @@+#include "intern.h"++struct GuIntern {+ GuPool* str_pool;+ GuMap* map;+};++GuIntern*+gu_new_intern(GuPool* str_pool, GuPool* pool)+{+ GuIntern* intern = gu_new(GuIntern, pool);+ intern->str_pool = str_pool;+ intern->map = gu_new_set(const char*, gu_str_hasher, pool);+ return intern;+}++const char*+gu_intern_str(GuIntern* intern, const char* cstr)+{+ const char* const* strp = gu_map_find_key(intern->map, &cstr);+ if (strp) {+ return *strp;+ }+ const char* str = gu_strdup(cstr, intern->str_pool);+ gu_map_insert(intern->map, &str);+ return str;+}+++++struct GuSymTable {+ GuPool* sym_pool;+ GuMap* map;+};++GuSymTable*+gu_new_symtable(GuPool* sym_pool, GuPool* pool)+{+ GuSymTable* tab = gu_new(GuSymTable, pool);+ tab->sym_pool = sym_pool;+ tab->map = gu_new_set(GuSymbol, gu_string_hasher, pool);+ return tab;+}++GuSymbol+gu_symtable_intern(GuSymTable* tab, GuString string)+{+ if (gu_string_is_stable(string)) {+ return string;+ }+ const GuSymbol* symp = gu_map_find_key(tab->map, &string);+ if (symp) {+ return *symp;+ }+ GuSymbol sym = gu_string_copy(string, tab->sym_pool);+ gu_map_insert(tab->map, &sym);+ return sym;+}
@@ -0,0 +1,24 @@+#ifndef GU_INTERN_H_+#define GU_INTERN_H_++#include <gu/map.h>+#include <gu/str.h>+#include <gu/string.h>++typedef struct GuIntern GuIntern;++GuIntern* gu_new_intern(GuPool* str_pool, GuPool* pool);+const char* gu_intern_str(GuIntern* intern, const char* cstr);+++typedef struct GuSymTable GuSymTable;++typedef GuString GuSymbol;++GuSymTable*+gu_new_symtable(GuPool* sym_pool, GuPool* pool);++GuSymbol+gu_symtable_intern(GuSymTable* symtab, GuString string);++#endif /* GU_INTERN_H_ */
@@ -0,0 +1,59 @@+/* + * Copyright 2010 University of Helsinki.+ * + * This file is part of libgu.+ * + * Libgu is free software: you can redistribute it and/or modify it under+ * the terms of the GNU Lesser General Public License as published by the+ * Free Software Foundation, either version 3 of the License, or (at your+ * option) any later version.+ * + * Libgu is distributed in the hope that it will be useful, but WITHOUT+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public+ * License for more details.+ * + * You should have received a copy of the GNU Lesser General Public+ * License along with libgu. If not, see <http://www.gnu.org/licenses/>.+ */++#include <gu/list.h>+#include <gu/assert.h>+#include <string.h>++static const int gu_list_empty = 0;++void* gu_list_alloc(GuPool* pool, size_t base_size, size_t elem_size, + int n_elems, size_t alignment)+{+ gu_assert(n_elems >= 0);+ if (n_elems == 0) {+ return (void*) &gu_list_empty;+ }+ // XXX: use gu_flex_size, use offset of elems+ void* p = gu_malloc_aligned(pool, base_size + elem_size * n_elems,+ alignment);+ *(int*) p = n_elems;+ return p;+}+++GU_DEFINE_KIND(GuList, abstract);++// GU_DEFINE_TYPE(GuStrs, GuList, gu_type(GuStr));+// GU_DEFINE_TYPE(GuStrsP, pointer, gu_type(GuStrs));++void*+gu_list_type_alloc(GuListType* ltype, int n_elems, GuPool* pool)+{+ return gu_list_alloc(pool, ltype->size, + gu_type_size(ltype->elem_type),+ n_elems, ltype->align);+}++void*+gu_list_type_index(GuListType* ltype, void* list, int i)+{+ uint8_t* p = list;+ return &p[ltype->elems_offset + i * gu_type_size(ltype->elem_type)];+}
@@ -0,0 +1,140 @@+/* + * Copyright 2010 University of Helsinki.+ * + * This file is part of libgu.+ * + * Libgu is free software: you can redistribute it and/or modify it under+ * the terms of the GNU Lesser General Public License as published by the+ * Free Software Foundation, either version 3 of the License, or (at your+ * option) any later version.+ * + * Libgu is distributed in the hope that it will be useful, but WITHOUT+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public+ * License for more details.+ * + * You should have received a copy of the GNU Lesser General Public+ * License along with libgu. If not, see <http://www.gnu.org/licenses/>.+ */++/** @file+ *+ * Lists.+ */++#ifndef GU_LIST_H_+#define GU_LIST_H_++#include <gu/mem.h>+++#define GuList(t) \+ struct { \+ const int len; \+ t elems[]; \+ }++void* gu_list_alloc(GuPool* pool, size_t base_size, size_t elem_size, + int n_elems, size_t alignment);++#define gu_new_list(t, pool, n) \+ ((t*) gu_list_alloc(pool, \+ sizeof(t), \+ sizeof(((t*)NULL)->elems[0]), \+ (n), \+ gu_flex_alignof(t)))++static inline int+gu_list_length(const void* list)+{+ return *(const int*) list;+}++#define gu_list_elems(lst) \+ ((lst)->elems)++#define gu_list_index(lst, i) \+ (gu_list_elems(lst)[i])++typedef GuList(void*) GuPointers; +//typedef GuList(uint8_t) GuBytes;++typedef GuList(int) GuInts; +++#define GuListN(t_, len_) \+ struct { \+ int len; \+ t elems[len_]; \+ }++#define gu_list_(qual_, t_, ...) \+ ((qual_ GuList(t_) *) \+ ((qual_ GuListN(t_, (sizeof((t_[]){__VA_ARGS__}) / sizeof(t_)))[]){ \+ __VA_ARGS__ \+ }))++#define gu_list(t_, ...) \+ gu_list_(, t_, __VA_ARGS__)++#define gu_clist(t_, ...) \+ gu_list_(const, t_, __VA_ARGS__)+ +#define GuSList(t) \+ const struct { \+ int len; \+ t* elems; \+ }++#define GU_SLIST_0 { .len = 0, .elems = NULL }++#define GU_SLIST(t, ...) \+ { \+ .len = GU_ARRAY_LEN(t,GU_ID({__VA_ARGS__})), \+ .elems = ((t[]){__VA_ARGS__}) \+ }+++#include <gu/type.h>++//+// list+//++typedef const struct GuListType GuListType, GuType_GuList;++struct GuListType {+ GuType_abstract abstract_base;+ size_t size;+ size_t align;+ GuType* elem_type;+ ptrdiff_t elems_offset;+};++#define GU_TYPE_INIT_GuList(k_, t_, elem_type_) { \+ .abstract_base = GU_TYPE_INIT_abstract(k_, t_, _), \+ .size = sizeof(t_), \+ .align = gu_alignof(t_), \+ .elem_type = elem_type_, \+ .elems_offset = offsetof(t_, elems) \+}++extern GU_DECLARE_KIND(GuList);++void*+gu_list_type_alloc(GuListType* ltype, int n_elems, GuPool* pool);++void*+gu_list_type_index(GuListType* ltype, void* list, int i);++#include <gu/str.h>+++typedef GuList(GuStr) GuStrs;+typedef GuStrs* GuStrsP;+ +extern GU_DECLARE_TYPE(GuStrs, GuList);+extern GU_DECLARE_TYPE(GuStrsP, pointer);+++#endif // GU_LIST_H_
@@ -0,0 +1,79 @@+#include <gu/defs.h>+#include <gu/log.h>++#include <stdio.h>+#include <stdlib.h>+#include <stdbool.h>+#include <string.h>++static int gu_log_depth = 0;++static bool+gu_log_match(const char* pat, size_t patlen, const char* str)+{+ if (patlen > 0 && pat[patlen-1] == '*') {+ return strncmp(pat, str, patlen-1) == 0;+ } else if (strlen(str) == patlen) {+ return strncmp(pat, str, patlen) == 0;+ } + return false;+}++static bool+gu_log_enabled(const char* func, const char* file)+{+ const char* cfg = getenv("GU_LOG");+ if (cfg == NULL) {+ return false;+ }+ const char* p = cfg;+ while (true) {+ size_t len = strcspn(p, ",");+ if (gu_log_match(p, len, func)) {+ return true;+ }+ if (gu_log_match(p, len, file)) {+ return true;+ }+ if (p[len] == '\0') {+ break;+ }+ p = &p[len + 1];+ } + return false;+}+++void+gu_log_full_v(GuLogKind kind, const char* func, const char* file, int line,+ const char* fmt, va_list args)+{+ (void) (kind && line);+ if (!gu_log_enabled(func, file)) {+ return;+ }+ if (kind == GU_LOG_KIND_EXIT) {+ gu_log_depth--;+ }+ if (fmt) {+ int indent = gu_min(32 + gu_log_depth, 48);+ fprintf(stderr, "%-*s: ", indent, func);+ vfprintf(stderr, fmt, args);+ fputc('\n', stderr);+ fflush(stderr);+ }+ if (kind == GU_LOG_KIND_ENTER) {+ gu_log_depth++;+ }+}++void+gu_log_full(GuLogKind kind, const char* func, const char* file, int line,+ const char* fmt, ...)+{+ va_list args;+ va_start(args, fmt);+ gu_log_full_v(kind, func, file, line, fmt, args);+ va_end(args);+}+
@@ -0,0 +1,65 @@+#ifndef GU_LOG_H_+#define GU_LOG_H_++#include <stdarg.h>++typedef enum GuLogKind {+ GU_LOG_KIND_ENTER,+ GU_LOG_KIND_EXIT,+ GU_LOG_KIND_DEBUG,+ GU_LOG_KIND_ERROR+} GuLogKind;++void+gu_log_full(GuLogKind kind, const char* func, const char* file, int line,+ const char* fmt, ...);+++void+gu_log_full_v(GuLogKind kind, const char* func, const char* file, int line,+ const char* fmt, va_list args);+++#ifndef NDEBUG++#define gu_logv(kind_, fmt_, args_) \+ gu_log_full_v(kind_, __func__, __FILE__, __LINE__, fmt_, args_)++#define gu_log(kind_, ...) \+ gu_log_full(kind_, __func__, __FILE__, __LINE__, __VA_ARGS__)++#else++static inline void+gu_logv(GuLogKind kind, const char* fmt, va_list args)+{+ (void) kind;+ (void) fmt;+ (void) args;+}++static inline void+gu_log(GuLogKind kind, const char* fmt, ...)+{+ (void) kind;+ (void) fmt;+}++#endif+++++#define gu_enter(...) \+ gu_log(GU_LOG_KIND_ENTER, __VA_ARGS__)++#define gu_exit(...) \+ gu_log(GU_LOG_KIND_EXIT, __VA_ARGS__)++#define gu_debug(...) \+ gu_log(GU_LOG_KIND_DEBUG, __VA_ARGS__)++#define gu_debugv(kind_, fmt_, args_) \+ gu_logv(GU_LOG_KIND_DEBUG, fmt_, args_)++#endif // GU_LOG_H_
@@ -0,0 +1,353 @@+#include <gu/defs.h>+#include <gu/mem.h>+#include <gu/type.h>+#include <gu/map.h>+#include <gu/assert.h>+#include <gu/prime.h>+#include <gu/log.h>++typedef enum {+ GU_MAP_GENERIC,+ GU_MAP_ADDR,+ GU_MAP_WORD+} GuMapKind;++typedef struct GuMapData GuMapData;++struct GuMapData {+ uint8_t* keys;+ uint8_t* values;+ size_t n_occupied;+ size_t n_entries;+ size_t zero_idx;+};++struct GuMap {+ GuMapKind const kind;+ GuHasher* const hasher;+ size_t const key_size;+ size_t const value_size;+ const void* default_value;+ GuMapData data;+ + GuFinalizer fin;+};++static void+gu_map_finalize(GuFinalizer* fin)+{+ GuMap* map = gu_container(fin, GuMap, fin);+ gu_mem_buf_free(map->data.keys);+ if (map->value_size) {+ gu_mem_buf_free(map->data.values);+ }+}++static const GuWord gu_map_empty_key = 0;++static bool+gu_map_buf_is_zero(const uint8_t* p, size_t sz) {+ while (sz >= sizeof(GuWord)) {+ sz -= sizeof(GuWord);+ if (memcmp(&p[sz], &gu_map_empty_key, sizeof(GuWord)) != 0) {+ return false;+ }+ }+ return (memcmp(p, &gu_map_empty_key, sz) == 0);+}++static bool+gu_map_entry_is_free(GuMap* map, GuMapData* data, size_t idx)+{+ if (idx == data->zero_idx) {+ return false;+ } else if (map->kind == GU_MAP_ADDR) {+ const void* key = ((const void**)data->keys)[idx];+ return key == NULL;+ } else if (map->kind == GU_MAP_WORD) {+ GuWord key = ((GuWord*)data->keys)[idx];+ return key == 0;+ }+ gu_assert(map->kind == GU_MAP_GENERIC);+ const void* key = &data->keys[idx * map->key_size];+ return gu_map_buf_is_zero(key, map->key_size);+}++static bool+gu_map_lookup(GuMap* map, const void* key, size_t* idx_out)+{+ size_t n = map->data.n_entries;+ switch (map->kind) {+ case GU_MAP_GENERIC: {+ GuHasher* hasher = map->hasher;+ GuEquality* eq = (GuEquality*) hasher;+ GuHash hash = hasher->hash(hasher, key);+ size_t idx = hash % n;+ size_t offset = (hash % (n - 2)) + 1;+ size_t key_size = map->key_size;+ while (true) {+ void* entry_key = &map->data.keys[idx * key_size];+ if (gu_map_buf_is_zero(entry_key, key_size) &&+ map->data.zero_idx != idx) {+ *idx_out = idx;+ return false;+ } else if (eq->is_equal(eq, key, entry_key)) {+ *idx_out = idx;+ return true;+ }+ idx = (idx + offset) % n;+ }+ gu_impossible();+ break;+ }+ case GU_MAP_ADDR: {+ GuHash hash = (GuHash) key;+ size_t idx = hash % n;+ size_t offset = (hash % (n - 2)) + 1;+ while (true) {+ const void* entry_key =+ ((const void**)map->data.keys)[idx];+ if (entry_key == NULL && map->data.zero_idx != idx) {+ *idx_out = idx;+ return false;+ } else if (entry_key == key) {+ *idx_out = idx;+ return true;+ }+ idx = (idx + offset) % n;+ }+ gu_impossible();+ break;+ }+ case GU_MAP_WORD: {+ GuWord w = *(const GuWord*)key;+ GuHash hash = (GuHash) w;+ size_t idx = hash % n;+ size_t offset = (hash % (n - 2)) + 1;+ while (true) {+ GuWord entry_key = ((GuWord*)map->data.keys)[idx];+ if (entry_key == 0 && map->data.zero_idx != idx) {+ *idx_out = idx;+ return false;+ } else if (entry_key == w) {+ *idx_out = idx;+ return true;+ }+ idx = (idx + offset) % n;+ }+ gu_impossible();+ break;+ }+ default:+ gu_impossible();+ }+ gu_impossible();+ return false;+}+ ++static void+gu_map_resize(GuMap* map)+{+ GuMapData* data = &map->data;+ GuMapData old_data = *data;+ size_t req_entries =+ gu_twin_prime_sup(GU_MAX(11, map->data.n_occupied * 4 / 3 + 1));++ size_t key_size = map->key_size;+ size_t key_alloc = 0;+ data->keys = gu_mem_buf_alloc(req_entries * key_size, &key_alloc);++ size_t value_size = map->value_size;+ size_t value_alloc = 0;+ if (value_size) {+ data->values = gu_mem_buf_alloc(req_entries * value_size,+ &value_alloc);+ memset(data->values, 0, value_alloc);+ }+ + data->n_entries = gu_twin_prime_inf(value_size ?+ GU_MIN(key_alloc / key_size,+ value_alloc / value_size)+ : key_alloc / key_size);+ switch (map->kind) {+ case GU_MAP_GENERIC:+ case GU_MAP_WORD:+ memset(data->keys, 0, key_alloc);+ break;+ case GU_MAP_ADDR:+ for (size_t i = 0; i < data->n_entries; i++) {+ ((const void**)data->keys)[i] = NULL;+ }+ break;+ default:+ gu_impossible();+ }++ gu_assert(data->n_entries > data->n_occupied);+ gu_debug("Resized to %d entries", data->n_entries);+ + data->n_occupied = 0;+ data->zero_idx = SIZE_MAX;++ for (size_t i = 0; i < old_data.n_entries; i++) {+ if (gu_map_entry_is_free(map, &old_data, i)) {+ continue;+ }+ void* old_key = &old_data.keys[i * key_size];+ if (map->kind == GU_MAP_ADDR) {+ old_key = *(void**)old_key;+ }+ void* old_value = &old_data.values[i * value_size];++ memcpy(gu_map_insert(map, old_key),+ old_value, map->value_size);+ }++ gu_mem_buf_free(old_data.keys);+ if (value_size) {+ gu_mem_buf_free(old_data.values);+ }+}+++static bool+gu_map_maybe_resize(GuMap* map)+{+ if (map->data.n_entries <=+ map->data.n_occupied + (map->data.n_occupied / 4)) {+ gu_map_resize(map);+ return true;+ }+ return false;+}++void*+gu_map_find(GuMap* map, const void* key)+{+ size_t idx;+ bool found = gu_map_lookup(map, key, &idx);+ if (found) {+ return &map->data.values[idx * map->value_size];+ }+ return NULL;+}++const void*+gu_map_find_default(GuMap* map, const void* key)+{+ void* p = gu_map_find(map, key);+ return p ? p : map->default_value;+}++const void*+gu_map_find_key(GuMap* map, const void* key)+{+ size_t idx;+ bool found = gu_map_lookup(map, key, &idx);+ if (found) {+ return &map->data.keys[idx * map->key_size];+ }+ return NULL;+}+++void*+gu_map_insert(GuMap* map, const void* key)+{+ size_t idx;+ bool found = gu_map_lookup(map, key, &idx);+ if (!found) {+ if (gu_map_maybe_resize(map)) {+ found = gu_map_lookup(map, key, &idx);+ gu_assert(!found);+ }+ if (map->kind == GU_MAP_ADDR) {+ ((const void**)map->data.keys)[idx] = key;+ } else {+ memcpy(&map->data.keys[idx * map->key_size],+ key, map->key_size);+ }+ if (map->default_value) {+ memcpy(&map->data.values[idx * map->value_size],+ map->default_value, map->value_size);+ }+ if (gu_map_entry_is_free(map, &map->data, idx)) {+ gu_assert(map->data.zero_idx == SIZE_MAX);+ map->data.zero_idx = idx;+ }+ map->data.n_occupied++;+ }+ return &map->data.values[idx * map->value_size];+}++void+gu_map_iter(GuMap* map, GuMapItor* itor, GuExn* err)+{+ for (size_t i = 0; i < map->data.n_entries && gu_ok(err); i++) {+ if (gu_map_entry_is_free(map, &map->data, i)) {+ continue;+ }+ const void* key = &map->data.keys[i * map->key_size];+ void* value = &map->data.values[i * map->value_size];+ if (map->kind == GU_MAP_ADDR) {+ key = *(const void* const*) key;+ }+ itor->fn(itor, key, value, err);+ }+}++static const uint8_t gu_map_no_values[1] = { 0 };++GuMap*+gu_make_map(size_t key_size, GuHasher* hasher,+ size_t value_size, const void* default_value,+ GuPool* pool)+{+ GuMapKind kind =+ ((!hasher || hasher == gu_addr_hasher)+ ? GU_MAP_ADDR+ : (key_size == sizeof(GuWord) && hasher == gu_word_hasher)+ ? GU_MAP_WORD+ : GU_MAP_GENERIC);+ if (kind == GU_MAP_ADDR) {+ key_size = sizeof(GuWord);+ }+ GuMapData data = {+ .n_occupied = 0,+ .n_entries = 0,+ .keys = NULL,+ .values = value_size ? NULL : (uint8_t*) gu_map_no_values,+ .zero_idx = SIZE_MAX+ };+ GuMap* map = gu_new_i(+ pool, GuMap,+ .default_value = default_value,+ .hasher = hasher,+ .data = data,+ .key_size = key_size,+ .value_size = value_size,+ .fin.fn = gu_map_finalize,+ .kind = kind+ );+ gu_pool_finally(pool, &map->fin);+ gu_map_resize(map);+ return map;+}++GuMap*+gu_map_type_make(GuMapType* mtype, GuPool* pool)+{+ size_t key_size = 0;+ if (mtype->hasher && mtype->hasher != gu_addr_hasher) {+ key_size = gu_type_size(mtype->key_type);+ }+ size_t value_size = gu_type_size(mtype->value_type);+ return gu_make_map(key_size, mtype->hasher,+ value_size, mtype->default_value, pool);+}++GU_DEFINE_KIND(GuMap, abstract);+// GU_DEFINE_KIND(GuIntMap, GuMap);++
@@ -0,0 +1,121 @@+#ifndef GU_MAP_H_+#define GU_MAP_H_++#include <gu/hash.h>+#include <gu/mem.h>+#include <gu/exn.h>++typedef const struct GuMapItor GuMapItor;++struct GuMapItor {+ void (*fn)(GuMapItor* self, const void* key, void* value,+ GuExn *err);+};++typedef struct GuMap GuMap;++GuMap*+gu_make_map(size_t key_size, GuHasher* hasher,+ size_t value_size, const void* default_value,+ GuPool* pool);++#define gu_new_map(K, HASHER, V, DV, POOL) \+ (gu_make_map(sizeof(K), (HASHER), sizeof(V), (DV), (POOL)))++#define gu_new_set(K, HASHER, POOL) \+ (gu_make_map(sizeof(K), (HASHER), 0, NULL, (POOL)))++#define gu_new_addr_map(K, V, DV, POOL) \+ (gu_make_map(0, NULL, sizeof(V), (DV), (POOL)))++size_t+gu_map_count(GuMap* map);++void*+gu_map_find_full(GuMap* ht, void* key_inout);++const void*+gu_map_find_default(GuMap* ht, const void* key);++#define gu_map_get(MAP, KEYP, V) \+ (*(V*)gu_map_find_default((MAP), (KEYP)))++void*+gu_map_find(GuMap* ht, const void* key);++#define gu_map_set(MAP, KEYP, V, VAL) \+ GU_BEGIN \+ V* gu_map_set_p_ = gu_map_find((MAP), (KEYP)); \+ *gu_map_set_p_ = (VAL); \+ GU_END++const void*+gu_map_find_key(GuMap* ht, const void* key);++static inline bool+gu_map_has(GuMap* ht, const void* key)+{+ return gu_map_find_key(ht, key) != NULL;+}+++void*+gu_map_insert(GuMap* ht, const void* key);++#define gu_map_put(MAP, KEYP, V, VAL) \+ GU_BEGIN \+ V* gu_map_put_p_ = gu_map_insert((MAP), (KEYP)); \+ *gu_map_put_p_ = (VAL); \+ GU_END++void+gu_map_iter(GuMap* ht, GuMapItor* itor, GuExn* err);+++typedef GuMap GuIntMap;++#define gu_new_int_map(VAL_T, DEFAULT, POOL) \+ gu_new_map(int, gu_int_hasher, VAL_T, DEFAULT, POOL)+++#if defined(GU_TYPE_H_) && !defined(GU_MAP_H_TYPE_)+#define GU_MAP_H_TYPE_++extern GU_DECLARE_KIND(GuMap);++typedef const struct GuMapType GuMapType, GuType_GuMap;++struct GuMapType {+ GuType_abstract abstract_base;+ GuHasher* hasher;+ GuType* key_type;+ GuType* value_type;+ const void* default_value;+};++GuMap*+gu_map_type_make(GuMapType* mtype, GuPool* pool);++#define gu_map_type_new(MAP_T, POOL) \+ gu_map_type_make(gu_type_cast(gu_type(MAP_T), GuMap), (POOL))++#define GU_TYPE_INIT_GuMap(k_, t_, kt_, h_, vt_, dv_) \+ { \+ .abstract_base = GU_TYPE_INIT_abstract(k_, t_, _), \+ .hasher = h_, \+ .key_type = kt_, \+ .value_type = vt_, \+ .default_value = dv_ \+ }++#define gu_type__GuIntMap gu_type__GuMap++typedef GuType_GuMap GuType_GuIntMap;++#define GU_TYPE_INIT_GuIntMap(KIND, MAP_T, VAL_T, DEFAULT) \+ GU_TYPE_INIT_GuMap(KIND, MAP_T, gu_type(int), gu_int_hasher, \+ VAL_T, DEFAULT)++#endif++#endif // GU_MAP_H_
@@ -0,0 +1,346 @@+/* + * Copyright 2010 University of Helsinki.+ * + * This file is part of libgu.+ * + * Libgu is free software: you can redistribute it and/or modify it under+ * the terms of the GNU Lesser General Public License as published by the+ * Free Software Foundation, either version 3 of the License, or (at your+ * option) any later version.+ * + * Libgu is distributed in the hope that it will be useful, but WITHOUT+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public+ * License for more details.+ * + * You should have received a copy of the GNU Lesser General Public+ * License along with libgu. If not, see <http://www.gnu.org/licenses/>.+ */++#include <gu/mem.h>+#include <gu/fun.h>+#include <gu/bits.h>+#include <gu/assert.h>+#include <gu/log.h>+#include <string.h>+#include <stdlib.h>++#ifdef USE_VALGRIND+#include <valgrind/valgrind.h>+#define VG(X) X+#else+#define VG(X) GU_NOP+#endif++static const size_t+// Maximum request size for a chunk. The actual maximum chunk size+// may be somewhat larger.+gu_mem_chunk_max_size = 1024 * sizeof(void*),++// number of bytes to allocate in the pool when it is created+ gu_mem_pool_initial_size = 24 * sizeof(void*),++// Pool allocations larger than this will get their own chunk if+// there's no room in the current one. Allocations smaller than this may trigger+// the creation of a new chunk, in which case the remaining space in+// the current chunk is left unused (internal fragmentation).+ gu_mem_max_shared_alloc = 64 * sizeof(void*),+ +// Should not be smaller than the granularity for malloc+ gu_mem_unit_size = 2 * sizeof(void*),++/* Malloc tuning: the additional memory used by malloc next to the+ allocated object */+ gu_malloc_overhead = sizeof(size_t);++static void*+gu_mem_realloc(void* p, size_t size)+{+ void* buf = realloc(p, size);+ if (size != 0 && buf == NULL) {+ gu_fatal("Memory allocation failed");+ }+ gu_debug("%p %zu -> %p", p, size, buf); // strictly illegal+ return buf;+}++static void*+gu_mem_alloc(size_t size)+{+ void* buf = malloc(size);+ if (buf == NULL) {+ gu_fatal("Memory allocation failed");+ }+ gu_debug("%zu -> %p", size, buf);+ return buf;+}++static void+gu_mem_free(void* p)+{+ gu_debug("%p", p);+ free(p);+}++static size_t+gu_mem_padovan(size_t min)+{+ // This could in principle be done faster with Q-matrices for+ // Padovan numbers, but not really worth it for our commonly+ // small numbers.+ if (min <= 5) {+ return min;+ }+ size_t a = 7, b = 9, c = 12;+ while (min > a) {+ if (b < a) {+ // overflow+ return SIZE_MAX;+ }+ size_t tmp = a + b;+ a = b;+ b = c;+ c = tmp;+ }+ return a;+}++void*+gu_mem_buf_realloc(void* old_buf, size_t min_size, size_t* real_size_out)+{+ size_t min_blocks = ((min_size + gu_malloc_overhead - 1) /+ gu_mem_unit_size) + 1;+ size_t blocks = gu_mem_padovan(min_blocks);+ size_t size = blocks * gu_mem_unit_size - gu_malloc_overhead;+ void* buf = gu_mem_realloc(old_buf, size);+ *real_size_out = buf ? size : 0;+ return buf;+}+void*+gu_mem_buf_alloc(size_t min_size, size_t* real_size_out)+{+ return gu_mem_buf_realloc(NULL, min_size, real_size_out);+}++void+gu_mem_buf_free(void* buf)+{+ gu_mem_free(buf);+}+++typedef struct GuMemChunk GuMemChunk;++struct GuMemChunk {+ GuMemChunk* next;+ uint8_t data[];+};++typedef struct GuFinalizerNode GuFinalizerNode;++struct GuFinalizerNode {+ GuFinalizerNode* next;+ GuFinalizer* fin;+};++enum GuPoolFlags {+ GU_POOL_LOCAL = 1 << 0+};++struct GuPool {+ uint8_t* curr_buf; // actually GuMemChunk*+ GuMemChunk* chunks;+ GuFinalizerNode* finalizers;+ uint16_t flags;+ uint16_t left_edge;+ uint16_t right_edge;+ uint16_t curr_size;+ uint8_t init_buf[];+};++static GuPool*+gu_init_pool(uint8_t* buf, size_t sz)+{+ gu_require(gu_aligned((uintptr_t) (void*) buf, gu_alignof(GuPool)));+ gu_require(sz >= sizeof(GuPool));+ GuPool* pool = (GuPool*) buf;+ pool->flags = 0;+ pool->curr_size = sz;+ pool->curr_buf = (uint8_t*) pool;+ pool->chunks = NULL;+ pool->finalizers = NULL;+ pool->left_edge = offsetof(GuPool, init_buf);+ pool->right_edge = sz;+ VG(VALGRIND_CREATE_MEMPOOL(pool, 0, false));+ return pool;+}++GuPool*+gu_local_pool_(uint8_t* buf, size_t sz)+{+ GuPool* pool = gu_init_pool(buf, sz);+ pool->flags |= GU_POOL_LOCAL;+ gu_debug("%p", pool);+ return pool;+}++GuPool* +gu_new_pool(void)+{+ size_t sz = GU_FLEX_SIZE(GuPool, init_buf, gu_mem_pool_initial_size);+ uint8_t* buf = gu_mem_buf_alloc(sz, &sz);+ GuPool* pool = gu_init_pool(buf, sz);+ gu_debug("%p", pool);+ return pool;+}++static void+gu_pool_expand(GuPool* pool, size_t req)+{+ size_t real_req = GU_MAX(req, GU_MIN(((size_t)pool->curr_size) + 1,+ gu_mem_chunk_max_size));+ gu_assert(real_req >= sizeof(GuMemChunk));+ size_t size = 0;+ GuMemChunk* chunk = gu_mem_buf_alloc(real_req, &size);+ chunk->next = pool->chunks;+ pool->chunks = chunk;+ pool->curr_buf = (uint8_t*) chunk;+ pool->left_edge = offsetof(GuMemChunk, data);+ pool->right_edge = pool->curr_size = size;+ // size should always fit in uint16_t+ gu_assert((size_t) pool->right_edge == size); +}++static size_t+gu_mem_advance(size_t old_pos, size_t pre_align, size_t pre_size,+ size_t align, size_t size)+{+ size_t p = gu_align_forward(old_pos, pre_align);+ p += pre_size;+ p = gu_align_forward(p, align);+ p += size;+ return p;+}++static void*+gu_pool_malloc_aligned(GuPool* pool, size_t pre_align, size_t pre_size,+ size_t align, size_t size) +{+ gu_require(size <= gu_mem_max_shared_alloc);+ size_t pos = gu_mem_advance(pool->left_edge, pre_align, pre_size,+ align, size);+ if (pos > (size_t) pool->right_edge) {+ pos = gu_mem_advance(offsetof(GuMemChunk, data),+ pre_align, pre_size, align, size);+ gu_pool_expand(pool, pos);+ gu_assert(pos <= pool->right_edge);+ }+ pool->left_edge = pos;+ uint8_t* addr = &pool->curr_buf[pos - size];+ VG(VALGRIND_MEMPOOL_ALLOC(pool, addr - pre_size, size + pre_size ));+ return addr;+}++static size_t+gu_pool_avail(GuPool* pool)+{+ return (size_t) pool->right_edge - (size_t) pool->left_edge;+}++void*+gu_pool_malloc_unaligned(GuPool* pool, size_t size)+{+ if (size > gu_pool_avail(pool)) {+ gu_pool_expand(pool, offsetof(GuMemChunk, data) + size);+ gu_assert(size <= gu_pool_avail(pool));+ }+ pool->right_edge -= size;+ void* addr = &pool->curr_buf[pool->right_edge];+ VG(VALGRIND_MEMPOOL_ALLOC(pool, addr, size));+ return addr;+}++void*+gu_malloc_prefixed(GuPool* pool, size_t pre_align, size_t pre_size,+ size_t align, size_t size)+{+ gu_enter("-> %p %zu %zu %zu %zu",+ pool, pre_align, pre_size, align, size);+ void* ret = NULL;+ if (pre_align == 0) {+ pre_align = gu_alignof(GuMaxAlign);+ }+ if (align == 0) {+ align = gu_alignof(GuMaxAlign);+ }+ size_t full_size = gu_mem_advance(offsetof(GuMemChunk, data),+ pre_align, pre_size, align, size);+ if (full_size > gu_mem_max_shared_alloc) {+ GuMemChunk* chunk = gu_mem_alloc(full_size);+ chunk->next = pool->chunks;+ pool->chunks = chunk;+ uint8_t* addr = &chunk->data[full_size - size+ - offsetof(GuMemChunk, data)];+ VG(VALGRIND_MEMPOOL_ALLOC(pool, addr - pre_size,+ pre_size + size));+ ret = addr;+ } else if (pre_align == 1 && align == 1) {+ uint8_t* buf = gu_pool_malloc_unaligned(pool, pre_size + size);+ ret = &buf[pre_size];+ } else {+ ret = gu_pool_malloc_aligned(pool, pre_align, pre_size,+ align, size);+ }+ gu_exit("<- %p", ret);+ return ret;+}++void*+gu_malloc_aligned(GuPool* pool, size_t size, size_t align)+{+ if (align == 0) {+ align = GU_MIN(size, gu_alignof(GuMaxAlign));+ }+ void* ret = gu_malloc_prefixed(pool, 1, 0, align, size);+ return ret;+}+++void +gu_pool_finally(GuPool* pool, GuFinalizer* finalizer)+{+ GuFinalizerNode* node = gu_new(GuFinalizerNode, pool);+ node->next = pool->finalizers;+ node->fin = finalizer;+ pool->finalizers = node;+}++void+gu_pool_free(GuPool* pool)+{+ gu_debug("%p", pool);+ GuFinalizerNode* node = pool->finalizers;+ while (node) {+ GuFinalizerNode* next = node->next;+ node->fin->fn(node->fin);+ node = next;+ }+ GuMemChunk* chunk = pool->chunks;+ while (chunk) {+ GuMemChunk* next = chunk->next;+ gu_mem_buf_free(chunk);+ chunk = next;+ }+ VG(VALGRIND_DESTROY_MEMPOOL(pool));+ if (!pool->flags & GU_POOL_LOCAL) {+ gu_mem_buf_free(pool);+ }+}+++extern inline void* gu_malloc(GuPool* pool, size_t size);++extern inline void* +gu_malloc_init_aligned(GuPool* pool, size_t size, size_t alignment, + const void* init);+
@@ -0,0 +1,276 @@+/* + * Copyright 2010 University of Helsinki.+ * + * This file is part of libgu.+ * + * Libgu is free software: you can redistribute it and/or modify it under+ * the terms of the GNU Lesser General Public License as published by the+ * Free Software Foundation, either version 3 of the License, or (at your+ * option) any later version.+ * + * Libgu is distributed in the hope that it will be useful, but WITHOUT+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public+ * License for more details.+ * + * You should have received a copy of the GNU Lesser General Public+ * License along with libgu. If not, see <http://www.gnu.org/licenses/>.+ */++/** @file+ *+ * Memory allocation tools.+ */++#ifndef GU_MEM_H_+#define GU_MEM_H_++#include <gu/defs.h>+#include <gu/fun.h>++/** @defgroup GuPool Memory pools */+//@{ +++/// A memory pool.+typedef struct GuPool GuPool;++/// @name Creating a pool +//@{+++/// Create a new memory pool.+GU_ONLY GuPool*+gu_new_pool(void);++/**< + * @return A new memory pool.+ */+++//@private+GuPool*+gu_local_pool_(uint8_t* init_buf, size_t sz);++//@private+#define GU_LOCAL_POOL_INIT_SIZE (16 * sizeof(GuWord))+++/// Create a stack-allocated memory pool.+#define gu_local_pool() \+ gu_local_pool_(gu_alloca(GU_LOCAL_POOL_INIT_SIZE), \+ GU_LOCAL_POOL_INIT_SIZE)+/**<+ * @return A memory pool whose first chunk is allocated directly from+ * the stack. This makes its creation faster, and more suitable for+ * functions that usually allocate only a little memory from the pool+ * until it is freed.+ *+ * @note The pool created with #gu_local_pool \e must be freed with+ * #gu_pool_free before the end of the block where #gu_local_pool was+ * called.+ *+ * @note Because #gu_local_pool uses relatively much stack space, it+ * should not be used in the bodies of recursive functions.+ */+++//@}+/// @name Destroying a pool+//@{+++/// Free a memory pool and all objects allocated from it.+void+gu_pool_free(GU_ONLY GuPool* pool);+/**<+ * When the pool is freed, all finalizers registered by+ * #gu_pool_finally on \p pool are invoked in reverse order of+ * registration.+ * + * @note After the pool is freed, all objects allocated from it become+ * invalid and may no longer be used. */++//@}+/// @name Allocating from a pool+//@{+ ++/// Allocate memory with a specified alignment.+void* +gu_malloc_aligned(GuPool* pool, size_t size, size_t alignment); ++void*+gu_malloc_prefixed(GuPool* pool, size_t pre_align, size_t pre_size,+ size_t align, size_t size);++/// Allocate memory from a pool.+inline void*+gu_malloc(GuPool* pool, size_t size) {+ return gu_malloc_aligned(pool, size, 0);+}++#include <string.h>++//@private+static inline void*+gu_malloc_init_aligned(GuPool* pool, size_t size, size_t alignment, + const void* init)+{+ void* p = gu_malloc_aligned(pool, size, alignment);+ memcpy(p, init, size);+ return p;+}++//@private+static inline void*+gu_malloc_init(GuPool* pool, size_t size, const void* init)+{+ return gu_malloc_init_aligned(pool, size, 0, init);+}+++/** Allocate memory to store an array of objects of a given type. */++#define gu_new_n(type, n, pool) \+ ((type*)gu_malloc_aligned((pool), \+ sizeof(type) * (n), \+ gu_alignof(type)))+/**< + * @param type The C type of the objects to allocate.+ *+ * @param n The number of objects to allocate.+ * + * @param pool The memory pool to allocate from.+ *+ * @return A pointer to a heap-allocated array of \p n uninitialized+ * objects of type \p type. + */ +++/** Allocate memory to store an object of a given type. */++#define gu_new(type, pool) \+ gu_new_n(type, 1, pool)+/**< + * @param type The C type of the object to allocate.+ *+ * @param pool The memory pool to allocate from.+ *+ * @return A pointer to a heap-allocated uninitialized object of type+ * \p type.+ */+++#define gu_new_prefixed(pre_type, type, pool) \+ ((type*)(gu_malloc_prefixed((pool), \+ gu_alignof(pre_type), sizeof(pre_type), \+ gu_alignof(type), sizeof(type))))+++ +++#ifdef GU_HAVE_STATEMENT_EXPRESSIONS+#define gu_new_i(pool, type, ...) \+ ({ \+ type *gu_new_p_ = gu_new(type, pool); \+ memcpy((void*) gu_new_p_, &(type){ __VA_ARGS__ }, \+ sizeof(type)); \+ gu_new_p_; \+ })+#else // GU_HAVE_STATEMENT_EXPRESSIONS+#define gu_new_i(pool, type, ...) \+ ((type*)gu_malloc_init_aligned((pool), sizeof(type), \+ gu_alignof(type), \+ &(type){ __VA_ARGS__ }))+#endif // GU_HAVE_STATEMENT_EXPRESSIONS++/** @def gu_new_i(pool, type, ...)+ *+ * Allocate and initialize an object.+ *+ * @param pool The pool to allocate from.+ *+ * @param type The C type of the object to allocate.+ *+ * @param ... An initializer list for the object to allocate.+ */++#define gu_new_s gu_new_i++// Alas, there's no portable way to get the alignment of flex structs.+#define gu_new_flex(pool_, type_, flex_member_, n_elems_) \+ ((type_ *)gu_malloc_aligned( \+ (pool_), \+ GU_FLEX_SIZE(type_, flex_member_, n_elems_), \+ gu_flex_alignof(type_)))+++//@}+/// @name Finalizers+//@{+++typedef struct GuFinalizer GuFinalizer;++struct GuFinalizer {+ void (*fn)(GuFinalizer* self);+ ///< @param self A pointer to this finalizer.+};++/// Register a finalizer.+void gu_pool_finally(GuPool* pool, GuFinalizer* fini);++/**< Register \p fini to be called when \p pool is destroyed. The+ * finalizers are called in reverse order of registration.+ */+++//@}+//@}++/** @defgroup GuMemBuf Memory buffers+ *+ * Resizable blocks of heap-allocated memory. These operations differ+ * from standard \c malloc, \c realloc and \c free -functions in that+ * memory buffers are not allocated by exact size. Instead, a minimum+ * size is requested, and the returned buffer may be larger. This+ * gives the memory allocator more flexibility when the client code+ * can make use of larger buffers than requested.+ * */++//@{+++/// Allocate a new memory buffer.+GU_ONLY void*+gu_mem_buf_alloc(size_t min_size, size_t* real_size);+/**<+ * @param min_size The minimum acceptable size for a returned memory block.+ *+ * @param[out] real_size The actual size of the returned memory+ * block. This is never less than \p min_size.+ *+ * @return A pointer to the memory buffer.+ */+++/// Allocate a new memory buffer to replace an old one.+GU_ONLY void*+gu_mem_buf_realloc(+ GU_NULL GU_ONLY GU_RETURNED+ void* buf,+ size_t min_size,+ size_t* real_size_out);+++/// Free a memory buffer.+void+gu_mem_buf_free(GU_ONLY void* buf);+++//@}+++#endif // GU_MEM_H_
@@ -0,0 +1,302 @@+#include <gu/seq.h>+#include <gu/out.h>++++GuOut+gu_init_out(GuOutStream* stream)+{+ gu_require(stream != NULL);+ GuOut out = {+ .buf_end = NULL,+ .buf_curr = 0,+ .stream = stream,+ .fini.fn = NULL+ };+ return out;+}++static bool+gu_out_is_buffering(GuOut* out)+{+ return !!out->buf_end;+}+++static void+gu_out_end_buf(GuOut* out, GuExn* err)+{+ if (!gu_out_is_buffering(out)) {+ return;+ }+ GuOutStream* stream = out->stream;+ size_t curr_len = ((ptrdiff_t)out->buf_size) + out->buf_curr;+ stream->end_buf(stream, curr_len, err);+ out->buf_end = NULL;+ out->buf_size = out->buf_curr = 0;+}++static bool+gu_out_begin_buf(GuOut* out, size_t req, GuExn* err)+{+ GuOutStream* stream = out->stream;+ if (gu_out_is_buffering(out)) {+ if (out->buf_curr < 0) {+ return true;+ } else {+ gu_out_end_buf(out, err);+ if (!gu_ok(err)) {+ return false;+ }+ }+ }+ if (stream->begin_buf) {+ size_t sz = 0;+ uint8_t* buf = stream->begin_buf(stream, req, &sz, err);+ gu_assert(sz <= PTRDIFF_MAX);+ if (buf) {+ out->buf_end = &buf[sz];+ out->buf_curr = -(ptrdiff_t) sz;+ out->buf_size = sz;+ return true;+ }+ }+ return false;+}++++static void+gu_out_fini(GuFinalizer* self)+{+ GuOut* out = gu_container(self, GuOut, fini);+ if (gu_out_is_buffering(out)) {+ GuPool* pool = gu_local_pool();+ GuExn* err = gu_new_exn(NULL, gu_kind(type), pool);+ gu_out_end_buf(out, err);+ gu_pool_free(pool);+ }+}++GuOut*+gu_new_out(GuOutStream* stream, GuPool* pool)+{+ GuOut* out = gu_new(GuOut, pool);+ *out = gu_init_out(stream);+ out->fini.fn = gu_out_fini;+ gu_pool_finally(pool, &out->fini);+ return out;+}++extern inline bool+gu_out_try_buf_(GuOut* out, const uint8_t* src, size_t len);+++extern inline size_t+gu_out_bytes(GuOut* out, const uint8_t* buf, size_t len, GuExn* err);++static size_t+gu_out_output(GuOut* out, const uint8_t* src, size_t len, GuExn* err)+{+ gu_out_end_buf(out, err);+ if (!gu_ok(err)) {+ return 0;+ }+ return out->stream->output(out->stream, src, len, err);+}+++++void +gu_out_flush(GuOut* out, GuExn* err)+{+ GuOutStream* stream = out->stream;+ if (out->buf_end) {+ gu_out_end_buf(out, err);+ if (!gu_ok(err)) {+ return;+ }+ }+ if (stream->flush) {+ stream->flush(stream, err);+ }+}++uint8_t*+gu_out_begin_span(GuOut* out, size_t req, size_t* sz_out, GuExn* err)+{+ if (!out->buf_end && !gu_out_begin_buf(out, req, err)) {+ return NULL;+ }+ *sz_out = -out->buf_curr;+ return &out->buf_end[out->buf_curr];+}++void+gu_out_end_span(GuOut* out, size_t sz)+{+ ptrdiff_t new_curr = (ptrdiff_t) sz + out->buf_curr;+ gu_require(new_curr <= 0);+ out->buf_curr = new_curr;+}++size_t+gu_out_bytes_(GuOut* restrict out, const uint8_t* restrict src, size_t len, + GuExn* err)+{+ if (!gu_ok(err)) {+ return 0;+ } else if (gu_out_try_buf_(out, src, len)) {+ return len;+ }+ if (gu_out_begin_buf(out, len, err)) {+ if (gu_out_try_buf_(out, src, len)) {+ return len;+ }+ }+ return gu_out_output(out, src, len, err);+}+++void gu_out_u8_(GuOut* restrict out, uint8_t u, GuExn* err)+{+ if (gu_out_begin_buf(out, 1, err)) {+ if (gu_out_try_u8_(out, u)) {+ return;+ }+ }+ gu_out_output(out, &u, 1, err);+}+++extern inline void+gu_out_u8(GuOut* restrict out, uint8_t u, GuExn* err);++extern inline void+gu_out_s8(GuOut* restrict out, int8_t i, GuExn* err);++extern inline bool+gu_out_is_buffered(GuOut* out);++extern inline bool+gu_out_try_u8_(GuOut* restrict out, uint8_t u);++++++++++typedef struct GuProxyOutStream GuProxyOutStream;++struct GuProxyOutStream {+ GuOutStream stream;+ GuOut* real_out;+};+++static uint8_t*+gu_proxy_out_buf_begin(GuOutStream* self, size_t req, size_t* sz_out,+ GuExn* err)+{+ GuProxyOutStream* pos =+ gu_container(self, GuProxyOutStream, stream);+ return gu_out_begin_span(pos->real_out, req, sz_out, err);+}++static void+gu_proxy_out_buf_end(GuOutStream* self, size_t sz, GuExn* err)+{+ GuProxyOutStream* pos =+ gu_container(self, GuProxyOutStream, stream);+ gu_out_end_span(pos->real_out, sz);+}++static size_t+gu_proxy_out_output(GuOutStream* self, const uint8_t* src, size_t sz,+ GuExn* err)+{+ GuProxyOutStream* pos =+ gu_container(self, GuProxyOutStream, stream);+ return gu_out_bytes(pos->real_out, src, sz, err);+}++static void+gu_proxy_out_flush(GuOutStream* self, GuExn* err)+{+ GuProxyOutStream* pos =+ gu_container(self, GuProxyOutStream, stream);+ gu_out_flush(pos->real_out, err);+}+++GuOutStream*+gu_out_proxy_stream(GuOut* out, GuPool* pool)+{+ return &gu_new_s(pool, GuProxyOutStream,+ .stream.begin_buf = gu_proxy_out_buf_begin,+ .stream.end_buf = gu_proxy_out_buf_end,+ .stream.output = gu_proxy_out_output,+ .stream.flush = gu_proxy_out_flush,+ .real_out = out)->stream;+}++++typedef struct GuBufferedOutStream GuBufferedOutStream;++struct GuBufferedOutStream {+ GuProxyOutStream pstream;+ size_t sz;+ uint8_t buf[];+};++static uint8_t*+gu_buffered_out_buf_begin(GuOutStream* self, size_t req, size_t* sz_out,+ GuExn* err)+{+ (void) (req && err);+ GuBufferedOutStream* b =+ gu_container(self, GuBufferedOutStream, pstream.stream);+ *sz_out = b->sz;+ return b->buf;+}++static void+gu_buffered_out_buf_end(GuOutStream* self, size_t sz, GuExn* err)+{+ GuBufferedOutStream* b =+ gu_container(self, GuBufferedOutStream, pstream.stream);+ gu_require(sz <= b->sz);+ gu_out_bytes(b->pstream.real_out, b->buf, sz, err);+}++GuOut*+gu_new_buffered_out(GuOut* out, size_t sz, GuPool* pool)+{+ GuBufferedOutStream* b =+ gu_new_flex(pool, GuBufferedOutStream, buf, sz);+ b->pstream.stream = (GuOutStream) {+ .begin_buf = gu_buffered_out_buf_begin,+ .end_buf = gu_buffered_out_buf_end,+ .output = gu_proxy_out_output,+ .flush = gu_proxy_out_flush+ };+ b->pstream.real_out = out;+ b->sz = sz;+ return gu_new_out(&b->pstream.stream, pool);+}++GuOut*+gu_out_buffered(GuOut* out, GuPool* pool)+{+ if (gu_out_is_buffered(out)) {+ return out;+ }+ return gu_new_buffered_out(out, 4096, pool);+}++
@@ -0,0 +1,166 @@+#ifndef GU_OUT_H_+#define GU_OUT_H_++#include <gu/defs.h>+#include <gu/assert.h>+#include <gu/exn.h>++typedef struct GuOut GuOut;++typedef struct GuOutStream GuOutStream;++struct GuOutStream {+ uint8_t* (*begin_buf)(GuOutStream* self, size_t req, size_t* sz_out,+ GuExn* err);+ void (*end_buf)(GuOutStream* self, size_t span, GuExn* err);+ size_t (*output)(GuOutStream* self, const uint8_t* buf, size_t size,+ GuExn* err);+ void (*flush)(GuOutStream* self, GuExn* err);+};+++struct GuOut {+ uint8_t* restrict buf_end;+ ptrdiff_t buf_curr;+ size_t buf_size;+ GuOutStream* stream;+ GuFinalizer fini;+};+++GuOut+gu_init_out(GuOutStream* stream);++GuOut*+gu_new_out(GuOutStream* stream, GuPool* pool);++inline bool+gu_out_is_buffered(GuOut* out)+{+ return !!out->stream->begin_buf;+}++GuOutStream*+gu_out_proxy_stream(GuOut* out, GuPool* pool);++GuOut*+gu_new_buffered_out(GuOut* out, size_t buf_sz, GuPool* pool);++GuOut*+gu_out_buffered(GuOut* out, GuPool* pool);++uint8_t*+gu_out_begin_span(GuOut* out, size_t req, size_t* sz_out, GuExn* err);++uint8_t*+gu_out_force_span(GuOut* out, size_t min, size_t max, size_t* sz_out,+ GuExn* err);++void+gu_out_end_span(GuOut* out, size_t sz);++size_t+gu_out_bytes_(GuOut* restrict out, const uint8_t* restrict src, + size_t len, GuExn* err);++inline bool+gu_out_try_buf_(GuOut* restrict out, const uint8_t* restrict src, size_t len)+{+ gu_require(len <= PTRDIFF_MAX);+ ptrdiff_t curr = out->buf_curr;+ ptrdiff_t new_curr = curr + (ptrdiff_t) len;+ if (GU_UNLIKELY(new_curr > 0)) {+ return false;+ }+ memcpy(&out->buf_end[curr], src, len);+ out->buf_curr = new_curr;+ return true;+}++inline size_t+gu_out_bytes(GuOut* restrict out, const uint8_t* restrict src, size_t len, + GuExn* err)+{+ if (GU_LIKELY(gu_out_try_buf_(out, src, len))) {+ return len;+ }+ return gu_out_bytes_(out, src, len, err);+}++void+gu_out_flush(GuOut* out, GuExn* err);++inline bool+gu_out_try_u8_(GuOut* restrict out, uint8_t u)+{+ ptrdiff_t curr = out->buf_curr;+ ptrdiff_t new_curr = curr + 1;+ if (GU_UNLIKELY(new_curr > 0)) {+ return false;+ }+ out->buf_end[curr] = u;+ out->buf_curr = new_curr;+ return true;+}++inline void+gu_out_u8(GuOut* restrict out, uint8_t u, GuExn* err)+{+ if (GU_UNLIKELY(!gu_out_try_u8_(out, u))) {+ extern void gu_out_u8_(GuOut* restrict out, uint8_t u, + GuExn* err);+ gu_out_u8_(out, u, err);+ }+}++inline void+gu_out_s8(GuOut* restrict out, int8_t i, GuExn* err)+{+ gu_out_u8(out, (uint8_t) i, err);+}++++void+gu_out_u16le(GuOut* out, uint16_t u, GuExn* err);++void+gu_out_u16be(GuOut* out, uint16_t u, GuExn* err);++void+gu_out_s16le(GuOut* out, int16_t u, GuExn* err);++void+gu_out_s16be(GuOut* out, int16_t u, GuExn* err);++void+gu_out_u32le(GuOut* out, uint32_t u, GuExn* err);++void+gu_out_u32be(GuOut* out, uint32_t u, GuExn* err);++void+gu_out_s32le(GuOut* out, int32_t u, GuExn* err);++void+gu_out_s32be(GuOut* out, int32_t u, GuExn* err);++void+gu_out_u64le(GuOut* out, uint64_t u, GuExn* err);++void+gu_out_u64be(GuOut* out, uint64_t u, GuExn* err);++void+gu_out_s64le(GuOut* out, int64_t u, GuExn* err);++void+gu_out_s64be(GuOut* out, int64_t u, GuExn* err);++void+gu_out_f64le(GuOut* out, double d, GuExn* err);++void+gu_out_f64be(GuOut* out, double d, GuExn* err);++#endif // GU_OUT_H_
@@ -0,0 +1,154 @@+#include <gu/defs.h>+#include <gu/assert.h>++static const uint32_t gu_prime_wheel_mask = 0UL+ | 1 << 1+ | 1 << 7+ | 1 << 11+ | 1 << 13+ | 1 << 17+ | 1 << 19+ | 1 << 23+ | 1 << 29;++static bool+gu_prime_wheel(int i)+{+ gu_assert(i >= 0 && i < 30);+ return !!(gu_prime_wheel_mask & (1 << i));+}++static const uint32_t gu_small_prime_mask = 0UL+ | 1 << 2+ | 1 << 3 + | 1 << 5+ | 1 << 7+ | 1 << 11+ | 1 << 13+ | 1 << 17+ | 1 << 19+ | 1 << 23+ | 1 << 29+ | 1U << 31;++static bool+gu_is_wheel_prime(int u)+{+ gu_assert(u > 30 && u % 2 != 0 && u % 3 != 0 && u % 5 != 0);+ int d = 0;+ int i = 7;+ goto start;+ while (d * d <= u) {+ for (i = 1; i <= 29; i+=2) {+ start:+ if (gu_prime_wheel(i) && u % (d + i) == 0) {+ return false;+ }+ }+ d += 30;+ }+ return true;+}++int+gu_prime_inf(int i)+{+ if (i < 2) {+ return 0;+ } else if (i < 32) {+ while (!(gu_small_prime_mask & (1 << i))) {+ i--;+ }+ return i;+ }++ int d = (i - 1) | 1;+ int r = d % 30;++ while (!gu_prime_wheel(r) || !gu_is_wheel_prime(d)) {+ d -= 2;+ r -= 2;+ if (r < 0) {+ r += 30;+ } + }+ return d;+}++int+gu_prime_sup(int i)+{+ if (i <= 2) {+ return 2;+ } else if (i < 32) {+ while (!(gu_small_prime_mask & (1 << i))) {+ i++;+ }+ return i;+ }++ int d = i | 1;+ int r = d % 30;++ while (!gu_prime_wheel(r) || !gu_is_wheel_prime(d)) {+ d += 2;+ r += 2;+ if (r > 30) {+ r -= 30;+ }+ }+ return d;+}++bool+gu_is_prime(int i)+{+ if (i < 2) {+ return false;+ } else if (i < 30) {+ return !!(gu_small_prime_mask & (1 << i));+ } else if (!gu_prime_wheel(i % 30)) {+ return false;+ } else {+ return gu_is_wheel_prime(i);+ }+}++bool+gu_is_twin_prime(int i)+{+ return gu_is_prime(i) && gu_is_prime(i - 2);+}++int+gu_twin_prime_inf(int i)+{+ while (true) {+ i = gu_prime_inf(i);+ if (i == 0) {+ return 0;+ } else if (gu_is_prime(i - 2)) {+ return i;+ }+ i = i - 4;+ }+ return i;+}++int+gu_twin_prime_sup(int i)+{+ if (i <= 5) {+ return 5;+ }+ i = i - 2;+ while (true) {+ i = gu_prime_sup(i);+ if (gu_is_prime(i + 2)) {+ return i + 2;+ }+ i = i + 4;+ }+ return i;+}+
@@ -0,0 +1,16 @@+#ifndef GU_PRIME_H_+#define GU_PRIME_H_++#include <gu/defs.h>++bool gu_is_prime(int i);++bool gu_is_twin_prime(int i);++int gu_prime_inf(int i);+int gu_twin_prime_inf(int i);++int gu_prime_sup(int i);+int gu_twin_prime_sup(int i);++#endif // GU_PRIME_H_
@@ -0,0 +1,15 @@+#include <gu/read.h>++extern inline GuUCS+gu_read_ucs(GuReader* rdr, GuExn* err);++extern inline char+gu_getc(GuReader* rdr, GuExn* err);++GuReader*+gu_new_utf8_reader(GuIn* utf8_in, GuPool* pool)+{+ GuReader* rdr = gu_new(GuReader, pool);+ rdr->in_ = gu_init_in(gu_in_proxy_stream(utf8_in, pool));+ return rdr;+}
@@ -0,0 +1,31 @@+#ifndef GU_READ_H_+#define GU_READ_H_++#include <gu/in.h>+#include <gu/ucs.h>+#include <gu/utf8.h>++typedef struct GuReader GuReader;++struct GuReader {+ GuIn in_;+};++inline GuUCS+gu_read_ucs(GuReader* rdr, GuExn* err)+{+ return gu_in_utf8(&rdr->in_, err);+}++inline char+gu_getc(GuReader* rdr, GuExn* err)+{+ return gu_in_utf8_char(&rdr->in_, err);+}++GuReader*+gu_new_utf8_reader(GuIn* utf8_in, GuPool* pool);+/**< @todo Implement. */+ ++#endif // GU_READ_H_
@@ -0,0 +1,331 @@+#include <gu/out.h>+#include <gu/seq.h>+#include <gu/fun.h>+#include <gu/assert.h>+#include <string.h>+#include <stdlib.h>+++struct GuBuf {+ uint8_t* data;+ size_t elem_size;+ size_t avail_len;+ GuFinalizer fin;+};++GuBuf*+gu_seq_buf(GuSeq seq)+{+ gu_require(gu_tagged_tag(seq.w_) == 0);+ return gu_word_ptr(seq.w_);+}++GuSeq+gu_buf_seq(GuBuf* buf)+{+ return (GuSeq) { .w_ = gu_ptr_word(buf) };+}++size_t+gu_buf_length(GuBuf* dyn)+{+ return (size_t)(((GuWord*)(void*)dyn)[-1] >> 1);+}++size_t+gu_buf_avail(GuBuf* buf)+{+ return buf->avail_len;+}+++static void+gu_buf_set_length(GuBuf* dyn, size_t new_len)+{+ ((GuWord*)(void*)dyn)[-1] = ((GuWord) new_len) << 1 | 0x1;+}++static void+gu_buf_fini(GuFinalizer* fin)+{+ GuBuf* buf = gu_container(fin, GuBuf, fin);+ gu_mem_buf_free(buf->data);+}++GuBuf*+gu_make_buf(size_t elem_size, GuPool* pool)+{+ GuBuf* buf = gu_new_prefixed(unsigned, GuBuf, pool);+ gu_buf_set_length(buf, 0);+ buf->elem_size = elem_size;+ buf->data = NULL;+ buf->avail_len = 0;+ buf->fin.fn = gu_buf_fini;+ gu_pool_finally(pool, &buf->fin);+ gu_buf_set_length(buf, 0);+ return buf;+}++static const GuWord gu_empty_seq[2] = {0, 0};++GuSeq+gu_make_seq(size_t elem_size, size_t length, GuPool* pool)+{+ size_t size = elem_size * length;+ if (0 < length && length <= GU_TAG_MAX) {+ void* buf = gu_malloc(pool, size);+ return (GuSeq) { gu_tagged(buf, length) };+ } else if (size == 0) {+ return (GuSeq) { gu_tagged((void*)&gu_empty_seq[1], 0) };+ } else {+ void* buf = gu_malloc_prefixed(pool,+ gu_alignof(GuWord), + sizeof(GuWord),+ 0, size);+ ((GuWord*) buf)[-1] = ((GuWord) length) << 1;+ return (GuSeq) { gu_tagged(buf, 0) };+ }+}++static void+gu_buf_require(GuBuf* buf, size_t req_len)+{+ if (req_len <= buf->avail_len) {+ return;+ }+ size_t req_size = buf->elem_size * req_len;+ size_t real_size;+ buf->data = gu_mem_buf_realloc(buf->data, req_size,+ &real_size);+ buf->avail_len = real_size / buf->elem_size;+}++void*+gu_buf_data(GuBuf* buf)+{+ return buf->data;+}++void*+gu_buf_extend_n(GuBuf* buf, size_t n_elems)+{+ size_t len = gu_buf_length(buf);+ size_t new_len = len + n_elems;+ gu_buf_require(buf, new_len);+ gu_buf_set_length(buf, new_len);+ return &buf->data[buf->elem_size * len];+}++void*+gu_buf_extend(GuBuf* buf)+{+ return gu_buf_extend_n(buf, 1);+}++void+gu_buf_push_n(GuBuf* buf, const void* data, size_t n_elems)+{+ + void* p = gu_buf_extend_n(buf, n_elems);+ memcpy(p, data, buf->elem_size * n_elems);+}++const void*+gu_buf_trim_n(GuBuf* buf, size_t n_elems)+{+ gu_require(n_elems <= gu_buf_length(buf));+ size_t new_len = gu_buf_length(buf) - n_elems;+ gu_buf_set_length(buf, new_len);+ return &buf->data[buf->elem_size * new_len];+}++const void*+gu_buf_trim(GuBuf* buf)+{+ return gu_buf_trim_n(buf, 1);+}++void+gu_buf_pop_n(GuBuf* buf, size_t n_elems, void* data_out)+{+ const void* p = gu_buf_trim_n(buf, n_elems);+ memcpy(data_out, p, buf->elem_size * n_elems);+}++GuSeq+gu_buf_freeze(GuBuf* buf, GuPool* pool)+{+ size_t len = gu_buf_length(buf);+ GuSeq seq = gu_make_seq(buf->elem_size, len, pool);+ void* bufdata = gu_buf_data(buf);+ void* seqdata = gu_seq_data(seq);+ memcpy(seqdata, bufdata, buf->elem_size * len);+ return seq;+}++static void+gu_heap_siftdown(GuBuf *buf, GuOrder *order, + const void *value, int startpos, int pos)+{+ while (pos > startpos) {+ int parentpos = (pos - 1) >> 1;+ void *parent = &buf->data[buf->elem_size * parentpos];+ + if (order->compare(order, value, parent) >= 0)+ break;++ memcpy(&buf->data[buf->elem_size * pos], parent, buf->elem_size);+ pos = parentpos;+ }++ memcpy(&buf->data[buf->elem_size * pos], value, buf->elem_size);+}++static void+gu_heap_siftup(GuBuf *buf, GuOrder *order,+ const void *value, int pos)+{+ int startpos = pos;+ int endpos = gu_buf_length(buf);++ int childpos = 2*pos + 1;+ while (childpos < endpos) {+ int rightpos = childpos + 1;+ if (rightpos < endpos &&+ order->compare(order, + &buf->data[buf->elem_size * childpos],+ &buf->data[buf->elem_size * rightpos]) >= 0) {+ childpos = rightpos;+ }++ memcpy(&buf->data[buf->elem_size * pos], + &buf->data[buf->elem_size * childpos], buf->elem_size);+ pos = childpos;+ childpos = 2*pos + 1;+ }+ + gu_heap_siftdown(buf, order, value, startpos, pos);+}++void+gu_buf_heap_push(GuBuf *buf, GuOrder *order, void *value)+{+ gu_buf_extend(buf);+ gu_heap_siftdown(buf, order, value, 0, gu_buf_length(buf)-1);+}++void+gu_buf_heap_pop(GuBuf *buf, GuOrder *order, void* data_out)+{+ const void* last = gu_buf_trim(buf); // raises an error if empty++ if (gu_buf_length(buf) > 0) {+ memcpy(data_out, buf->data, buf->elem_size);+ gu_heap_siftup(buf, order, last, 0);+ } else {+ memcpy(data_out, last, buf->elem_size);+ }+}++void+gu_buf_heap_replace(GuBuf *buf, GuOrder *order, void *value, void *data_out)+{+ gu_require(gu_buf_length(buf) > 0);++ memcpy(data_out, buf->data, buf->elem_size);+ gu_heap_siftup(buf, order, value, 0);+}++void+gu_buf_heapify(GuBuf *buf, GuOrder *order)+{+ size_t middle = gu_buf_length(buf) / 2;+ void *value = alloca(buf->elem_size);+ + for (size_t i = 0; i < middle; i++) {+ memcpy(value, &buf->data[buf->elem_size * i], buf->elem_size);+ gu_heap_siftup(buf, order, value, i);+ }+}++typedef struct GuBufOut GuBufOut;+struct GuBufOut+{+ GuOutStream stream;+ GuBuf* buf;+};++static size_t+gu_buf_out_output(GuOutStream* stream, const uint8_t* src, size_t sz,+ GuExn* err)+{+ (void) err;+ GuBufOut* bout = gu_container(stream, GuBufOut, stream);+ GuBuf* buf = bout->buf;+ gu_assert(sz % buf->elem_size == 0);+ size_t len = sz / buf->elem_size;+ gu_buf_push_n(bout->buf, src, len);+ return len;+}++static uint8_t*+gu_buf_outbuf_begin(GuOutStream* stream, size_t req, size_t* sz_out, GuExn* err)+{+ (void) req;+ (void) err;+ GuBufOut* bout = gu_container(stream, GuBufOut, stream);+ GuBuf* buf = bout->buf;+ size_t esz = buf->elem_size;+ size_t len = gu_buf_length(buf);+ gu_buf_require(buf, len + (req + esz - 1) / esz);+ size_t avail = buf->avail_len;+ gu_assert(len < avail);+ *sz_out = esz * (avail - len);+ return &buf->data[len * esz];+}++static void+gu_buf_outbuf_end(GuOutStream* stream, size_t sz, GuExn* err)+{+ (void) err;+ GuBufOut* bout = gu_container(stream, GuBufOut, stream);+ GuBuf* buf = bout->buf;+ size_t len = gu_buf_length(buf);+ size_t elem_size = buf->elem_size;+ gu_require(sz % elem_size == 0);+ gu_require(sz < elem_size * (len - buf->avail_len));+ gu_buf_set_length(buf, len + (sz / elem_size));+}++GuOut*+gu_buf_out(GuBuf* buf, GuPool* pool)+{+ GuBufOut* bout = gu_new_i(pool, GuBufOut,+ .stream.output = gu_buf_out_output,+ .stream.begin_buf = gu_buf_outbuf_begin,+ .stream.end_buf = gu_buf_outbuf_end,+ .buf = buf);+ return gu_new_out(&bout->stream, pool);+}++const GuSeq+gu_null_seq = GU_NULL_SEQ;+++#include <gu/type.h>++GU_DEFINE_KIND(GuSeq, GuOpaque);+GU_DEFINE_KIND(GuBuf, abstract);++GU_DEFINE_TYPE(GuChars, GuSeq, gu_type(char));+GU_DEFINE_TYPE(GuBytes, GuSeq, gu_type(uint8_t));++char*+gu_chars_str(GuChars chars, GuPool* pool)+{+ size_t len = gu_seq_length(chars);+ char* data = gu_seq_data(chars);+ char* str = gu_new_str(len, pool);+ memcpy(str, data, len);+ return str;+}
@@ -0,0 +1,212 @@+#ifndef GU_SEQ_H_+#define GU_SEQ_H_++#include <gu/mem.h>+#include <gu/bits.h>+++typedef struct GuBuf GuBuf;++typedef GuOpaque() GuSeq;++GuSeq+gu_make_seq(size_t elem_size, size_t len, GuPool* pool);++#define gu_new_seq(T, N, POOL) \+ gu_make_seq(sizeof(T), (N), (POOL))++static inline size_t+gu_seq_length(GuSeq seq)+{+ GuWord w = seq.w_;+ size_t tag = gu_tagged_tag(w);+ if (tag == 0) {+ GuWord* p = gu_tagged_ptr(w);+ return (size_t) (p[-1] >> 1);+ }+ return tag;+}++static inline void*+gu_seq_data(GuSeq seq)+{+ GuWord w = seq.w_;+ int tag = gu_tagged_tag(w);+ void* ptr = gu_tagged_ptr(w);+ if (tag == 0) {+ GuWord* p = ptr;+ if (p[-1] & 0x1) {+ return *(uint8_t**) ptr;+ }+ }+ return ptr;+}++static inline bool+gu_seq_is_null(GuSeq seq)+{+ return (gu_tagged_ptr(seq.w_)) == NULL;+}+++#define gu_seq_index(SEQ, T, I) \+ (&((T*)gu_seq_data(SEQ))[I])++#define gu_seq_get(SEQ, T, I) \+ (*gu_seq_index(SEQ, T, I))++#define gu_seq_set(SEQ, T, I, V) \+ GU_BEGIN \+ (*gu_seq_index(SEQ, T, I) = (V)); \+ GU_END+++++GuBuf*+gu_seq_buf(GuSeq seq);++GuSeq+gu_buf_seq(GuBuf* buf);++GuBuf*+gu_make_buf(size_t elem_size, GuPool* pool);++#define gu_new_buf(T, POOL) \+ gu_make_buf(sizeof(T), (POOL))++size_t+gu_buf_length(GuBuf* buf);++size_t+gu_buf_avail(GuBuf* buf);++void*+gu_buf_data(GuBuf* buf);++#define gu_buf_index(BUF, T, I) \+ (&((T*)gu_buf_data(BUF))[I])++#define gu_buf_get(BUF, T, I) \+ (*gu_buf_index(BUF, T, I))++#define gu_buf_set(BUF, T, I) \+ GU_BEGIN \+ (*gu_buf_index(BUF, T, I) = (V)); \+ GU_END++void+gu_buf_push_n(GuBuf* buf, const void* elems, size_t n_elems);++void*+gu_buf_extend_n(GuBuf* buf, size_t n_elems);++void*+gu_buf_extend(GuBuf* buf);++#define gu_buf_push(BUF, T, VAL) \+ GU_BEGIN \+ ((*(T*)gu_buf_extend(BUF)) = (VAL)); \+ GU_END++void+gu_buf_pop_n(GuBuf* buf, size_t n_elems, void* data_out);++const void*+gu_buf_trim_n(GuBuf* buf, size_t n_elems);++const void*+gu_buf_trim(GuBuf* buf);++#define gu_buf_pop(BUF, T) \+ (*(T*)gu_buf_trim(BUF))++void+gu_seq_resize_tail(GuSeq seq, ptrdiff_t change);+++// Using a buffer as a heap+void+gu_buf_heap_push(GuBuf *buf, GuOrder *order, void *value);++void+gu_buf_heap_pop(GuBuf *buf, GuOrder *order, void* data_out);++void+gu_buf_heap_replace(GuBuf *buf, GuOrder *order, void *value, void *data_out);++void+gu_buf_heapify(GuBuf *buf, GuOrder *order);++#if 0+void+gu_buf_resize_head(GuBuf* buf, ptrdiff_t change);++void+gu_buf_unshift(GuBuf* buf, const void* data, size_t size);++void+gu_buf_shift(GuBuf* buf, size_t size, void* data_out);+#endif++GuSeq+gu_buf_freeze(GuBuf* buf, GuPool* pool);++extern const GuSeq gu_null_seq;++#define GU_NULL_SEQ { .w_ = (GuWord)(void*)NULL }++typedef GuSeq GuChars;+typedef GuSeq GuBytes;+typedef GuBuf GuCharBuf;+typedef GuBuf GuByteBuf;++char*+gu_chars_str(GuChars chars, GuPool* pool);++#endif // GU_SEQ_H_++#if defined(GU_OUT_H_) && !defined(GU_SEQ_H_OUT_)+#define GU_SEQ_H_OUT_++GuOut*+gu_buf_out(GuBuf* buf, GuPool* pool);++#endif+++#if defined(GU_TYPE_H_) && !defined(GU_SEQ_H_TYPE_)+#define GU_SEQ_H_TYPE_++extern GU_DECLARE_KIND(GuSeq);+extern GU_DECLARE_KIND(GuBuf);++struct GuSeqType {+ GuType_GuOpaque opaque_base;+ GuType* elem_type;+};++typedef const struct GuSeqType GuSeqType, GuType_GuSeq;++#define GU_TYPE_INIT_GuSeq(k_, t_, elem_type_) { \+ .opaque_base = GU_TYPE_INIT_GuOpaque(k_, t_, _), \+ .elem_type = elem_type_, \+}++typedef struct GuBufType GuBufType, GuType_GuBuf;++struct GuBufType {+ GuType_abstract abstract_base;+ GuType* elem_type;+};++#define GU_TYPE_INIT_GuBuf(KIND, BUF_T, ELEM_T) { \+ .abstract_base = GU_TYPE_INIT_abstract(KIND, BUF_T, _), \+ .elem_type = ELEM_T \+}++extern GU_DECLARE_TYPE(GuChars, GuSeq);+extern GU_DECLARE_TYPE(GuBytes, GuSeq);++#endif +
@@ -0,0 +1,85 @@+#include <gu/assert.h>+#include <gu/str.h>+#include <string.h>+#include <wchar.h>+#include <stdio.h>+#include <stdlib.h>++const char gu_empty_str[] = "";+const char* const gu_null_str = NULL;++char* +gu_new_str(size_t size, GuPool* pool)+{+ char* str = gu_new_n(char, size + 1, pool);+ memset(str, '\0', size + 1);+ return str;+}++char*+gu_strdup(const char* cstr, GuPool* pool)+{+ int len = strlen(cstr);+ char* str = gu_new_str(len, pool);+ memcpy(str, cstr, len);+ return str;+}++bool+gu_str_eq(GuStr s1, GuStr s2)+{+ return (strcmp(s1, s2)) == 0;+}++static bool+gu_str_is_equal(GuEquality* self, const void* p1, const void* p2)+{+ (void) self;+ const GuStr* sp1 = p1;+ const GuStr* sp2 = p2;+ return gu_str_eq(*sp1, *sp2);+}++static GuHash+gu_str_hasher_hash(GuHasher* self, const void* p)+{+ (void) self;+ GuHash h = 0;+ const GuStr* sp = p;+ for (const char* s = *sp; *s != '\0'; s++) {+ h = 101 * h + (unsigned char) *s;+ }+ return h;+}++GuHasher gu_str_hasher[1] = {+ {+ .eq = { .is_equal = gu_str_is_equal },+ .hash = gu_str_hasher_hash+ }+};++GU_DEFINE_TYPE(GuStr, repr, _);++char* +gu_vasprintf(const char* fmt, va_list args, GuPool* pool)+{+ va_list args2;+ va_copy(args2, args);+ int len = vsnprintf(NULL, 0, fmt, args2);+ gu_assert_msg(len >= 0, "Invalid format string: \"%s\"", fmt);+ va_end(args2);+ char* str = gu_new_str(len, pool);+ vsnprintf(str, len + 1, fmt, args);+ return str;+}++char* +gu_asprintf(GuPool* pool, const char* fmt, ...)+{+ va_list args;+ va_start(args, fmt);+ char* str = gu_vasprintf(fmt, args, pool);+ va_end(args);+ return str;+}
@@ -0,0 +1,29 @@+#ifndef GU_STR_H_+#define GU_STR_H_++#include <gu/mem.h>+#include <gu/hash.h>++extern const char gu_empty_str[];+extern const char* const gu_null_str;++typedef const char* GuStr;++char* gu_new_str(size_t size, GuPool* pool);++char* gu_strdup(const char* str, GuPool* pool);++bool+gu_str_eq(GuStr s1, GuStr s2);++extern GuHasher gu_str_hasher[1];++#include <gu/type.h>++extern GU_DECLARE_TYPE(GuStr, repr);++char* gu_vasprintf(const char* fmt, va_list args, GuPool* pool);++char* gu_asprintf(GuPool* pool, const char* fmt, ...);++#endif // GU_STR_H_
@@ -0,0 +1,270 @@+#include <gu/type.h>+#include <gu/out.h>+#include <gu/seq.h>+#include <gu/map.h>+#include <gu/string.h>+#include <gu/utf8.h>+#include <gu/assert.h>+#include "config.h"++const GuString gu_empty_string = { 1 };++struct GuStringBuf {+ GuByteBuf* bbuf;+ GuWriter* wtr;+};++GuStringBuf*+gu_string_buf(GuPool* pool)+{+ GuBuf* buf = gu_new_buf(uint8_t, pool);+ GuOut* out = gu_buf_out(buf, pool);+ GuWriter* wtr = gu_new_utf8_writer(out, pool);+ return gu_new_s(pool, GuStringBuf,+ .bbuf = buf,+ .wtr = wtr);+}++GuWriter*+gu_string_buf_writer(GuStringBuf* sb)+{+ return sb->wtr;+}++static GuString+gu_utf8_string(const uint8_t* buf, size_t sz, GuPool* pool)+{+ if (sz < GU_MIN(sizeof(GuWord), 128)) {+ GuWord w = 0;+ for (size_t n = 0; n < sz; n++) {+ w = w << 8 | buf[n];+ }+ w = w << 8 | (sz << 1) | 1;+ return (GuString) { w };+ }+ uint8_t* p = NULL;+ if (sz < 256) {+ p = gu_malloc_aligned(pool, 1 + sz, 2);+ p[0] = (uint8_t) sz;+ } else {+ uint8_t* p =+ gu_malloc_prefixed(pool, gu_alignof(size_t),+ sizeof(size_t), 1, 1 + sizeof(sz));+ ((size_t*) p)[-1] = sz;+ p[0] = 0;+ }+ memcpy(&p[1], buf, sz);+ return (GuString) { (GuWord) (void*) p };+}++++GuString+gu_string_buf_freeze(GuStringBuf* sb, GuPool* pool)+{+ gu_writer_flush(sb->wtr, NULL);+ uint8_t* data = gu_buf_data(sb->bbuf);+ size_t len = gu_buf_length(sb->bbuf);+ return gu_utf8_string(data, len, pool);+}++GuReader*+gu_string_reader(GuString s, GuPool* pool)+{+ GuWord w = s.w_;+ uint8_t* buf = NULL;+ size_t len = 0;+ if (w & 1) {+ len = (w & 0xff) >> 1;+ buf = gu_new_n(uint8_t, len, pool);+ for (int i = len - 1; i >= 0; i--) {+ w >>= 8;+ buf[i] = w & 0xff;+ }+ } else {+ uint8_t* p = (void*) w;+ len = (p[0] == 0) ? ((size_t*) p)[-1] : p[0];+ buf = &p[1];+ }+ GuIn* in = gu_data_in(buf, len, pool);+ GuReader* rdr = gu_new_utf8_reader(in, pool);+ return rdr;+}++static bool+gu_string_is_long(GuString s) +{+ return !(s.w_ & 1);+}++bool+gu_string_is_stable(GuString s)+{+ return !gu_string_is_long(s);+}++static size_t+gu_string_long_length(GuString s)+{+ gu_assert(gu_string_is_long(s));+ uint8_t* p = (void*) s.w_;+ uint8_t len = p[0];+ if (len > 0) {+ return len;+ }+ return ((size_t*) p)[-1];+}++size_t+gu_string_length(GuString s)+{+ if (gu_string_is_long(s)) {+ return gu_string_long_length(s);+ }+ return (s.w_ & 0xff) >> 1;+}++static uint8_t*+gu_string_long_data(GuString s)+{+ gu_require(gu_string_is_long(s));+ uint8_t* p = (void*) s.w_;+ return &p[1];+}++GuString+gu_string_copy(GuString string, GuPool* pool)+{+ if (gu_string_is_long(string)) {+ uint8_t* data = gu_string_long_data(string);+ size_t len = gu_string_long_length(string);+ return gu_utf8_string(data, len, pool);+ } else {+ return string;+ }+}+++void+gu_string_write(GuString s, GuWriter* wtr, GuExn* err)+{+ GuWord w = s.w_;+ uint8_t buf[sizeof(GuWord)];+ uint8_t* src;+ size_t sz;+ if (w & 1) {+ sz = (w & 0xff) >> 1;+ gu_assert(sz <= sizeof(GuWord));+ size_t i = sz;+ while (i > 0) {+ w >>= 8;+ buf[--i] = w & 0xff;+ }+ src = buf;+ } else {+ uint8_t* p = (void*) w;+ sz = (p[0] == 0) ? ((size_t*) p)[-1] : p[0];+ src = &p[1];+ }+ gu_utf8_write(src, sz, wtr, err);+}++GuString+gu_format_string_v(const char* fmt, va_list args, GuPool* pool)+{+ GuPool* tmp_pool = gu_local_pool();+ GuStringBuf* sb = gu_string_buf(tmp_pool);+ GuWriter* wtr = gu_string_buf_writer(sb);+ gu_vprintf(fmt, args, wtr, NULL);+ gu_writer_flush(wtr, NULL);+ GuString s = gu_string_buf_freeze(sb, pool);+ gu_pool_free(tmp_pool);+ return s;+}++GuString+gu_format_string(GuPool* pool, const char* fmt, ...)+{+ va_list args;+ va_start(args, fmt);+ GuString s = gu_format_string_v(fmt, args, pool);+ va_end(args);+ return s;+}++GuString+gu_str_string(const char* str, GuPool* pool)+{+#ifdef GU_CHAR_ASCII+ return gu_utf8_string((const uint8_t*) str, strlen(str), pool);+#else+ GuPool* tmp_pool = gu_local_pool();+ GuStringBuf* sb = gu_string_buf(tmp_pool);+ GuWriter* wtr = gu_string_buf_writer(sb);+ gu_puts(str, wtr, NULL);+ gu_writer_flush(wtr, NULL);+ GuString s = gu_string_buf_freeze(sb, pool);+ gu_pool_free(tmp_pool);+ return s;+#endif+}++GuWord+gu_string_hash(GuString s)+{+ if (s.w_ & 1) {+ return s.w_;+ }+ size_t len = gu_string_length(s);+ uint8_t* data = gu_string_long_data(s);+ return gu_hash_bytes(0, data, len);+}++bool+gu_string_eq(GuString s1, GuString s2)+{+ if (s1.w_ == s2.w_) {+ return true;+ } else if (gu_string_is_long(s1) && gu_string_is_long(s2)) {+ size_t len1 = gu_string_long_length(s1);+ size_t len2 = gu_string_long_length(s2);+ if (len1 != len2) {+ return false;+ }+ uint8_t* data1 = gu_string_long_data(s1);+ uint8_t* data2 = gu_string_long_data(s2);+ return (memcmp(data1, data2, len1) == 0);+ }+ return false;++}+++static GuHash+gu_string_hasher_hash(GuHasher* self, const void* p)+{+ (void) self;+ const GuString* sp = p;+ return gu_string_hash(*sp);+}++static bool+gu_string_eq_fn(GuEquality* self, const void* p1, const void* p2)+{+ (void) self;+ const GuString* sp1 = p1;+ const GuString* sp2 = p2;+ return gu_string_eq(*sp1, *sp2);+}++GuHasher gu_string_hasher[1] = {+ {+ .eq = { gu_string_eq_fn },+ .hash = gu_string_hasher_hash+ }+};+++GU_DEFINE_TYPE(GuString, GuOpaque, _);+GU_DEFINE_TYPE(GuStrings, GuSeq, gu_type(GuString));+GU_DEFINE_KIND(GuStringMap, GuMap);
@@ -0,0 +1,125 @@+/* + * Copyright 2011 University of Helsinki.+ * + * This file is part of libgu.+ * + * Libgu is free software: you can redistribute it and/or modify it under+ * the terms of the GNU Lesser General Public License as published by the+ * Free Software Foundation, either version 3 of the License, or (at your+ * option) any later version.+ * + * Libgu is distributed in the hope that it will be useful, but WITHOUT+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public+ * License for more details.+ * + * You should have received a copy of the GNU Lesser General Public+ * License along with libgu. If not, see <http://www.gnu.org/licenses/>.+ */++#ifndef GU_STRING_H_+#define GU_STRING_H_++#include <gu/bits.h>+#include <gu/read.h>+#include <gu/write.h>++typedef GuOpaque() GuString;++extern const GuString gu_empty_string;++GuString+gu_string_copy(GuString string, GuPool* pool);++void+gu_string_write(GuString string, GuWriter* wtr, GuExn* err);++GuReader*+gu_string_reader(GuString string, GuPool* pool);++bool+gu_string_is_stable(GuString string);++GuString+gu_ucs_string(const GuUCS* ubuf, size_t len, GuPool* pool);++typedef struct GuStringBuf GuStringBuf;++GuStringBuf*+gu_string_buf(GuPool* pool);++GuWriter*+gu_string_buf_writer(GuStringBuf* sb);++GuString+gu_string_buf_freeze(GuStringBuf* sb, GuPool* pool);++GuString+gu_format_string_v(const char* fmt, va_list args, GuPool* pool);++GuString+gu_format_string(GuPool* pool, const char* fmt, ...);++GuString+gu_str_string(const char* str, GuPool* pool);++#endif // GU_STRING_H_++#if defined(GU_HASH_H_) && !defined(GU_STRING_H_HASH_)+#define GU_STRING_H_HASH_++uintptr_t+gu_string_hash(GuString s);++extern GuHasher gu_string_hasher[1];++bool+gu_string_eq(GuString s1, GuString s2);+#endif++#ifdef GU_TYPE_H_+# ifndef GU_STRING_H_TYPE_+# define GU_STRING_H_TYPE_++extern GU_DECLARE_TYPE(GuString, GuOpaque);+# endif++# if defined(GU_SEQ_H_) && !defined(GU_STRING_H_SEQ_TYPE_)+# define GU_STRING_H_SEQ_TYPE_+extern GU_DECLARE_TYPE(GuStrings, GuSeq);+# endif++# if defined(GU_MAP_H_TYPE_) && !defined(GU_STRING_H_MAP_TYPE_)+# define GU_STRING_H_MAP_TYPE_++extern GU_DECLARE_KIND(GuStringMap);+typedef GuType_GuMap GuType_GuStringMap;++#define GU_TYPE_INIT_GuStringMap(KIND, MAP_T, VAL_T, DEFAULT) \+ GU_TYPE_INIT_GuMap(KIND, MAP_T, \+ gu_type(GuString), gu_string_hasher, \+ VAL_T, DEFAULT)++# endif+#endif+++#if defined(GU_SEQ_H_) && !defined(GU_STRING_H_SEQ_)+#define GU_STRING_H_SEQ_++typedef GuSeq GuStrings;+// typedef GuBuf GuStringBuf;++#endif+++#if defined(GU_MAP_H_) && !defined(GU_STRING_H_MAP_)+#define GU_STRING_H_MAP_++typedef GuMap GuStringMap;++#define gu_new_string_map(VAL_T, DEFAULT, POOL) \+ gu_new_map(GuString, gu_string_hasher, VAL_T, (DEFAULT), (POOL))++#endif+
@@ -0,0 +1,30 @@+#ifndef GU_SYSDEPS_H_+#define GU_SYSDEPS_H_++#include <guconfig.h>++#if defined(__GNUC__) && !defined(__STRICT_ANSI__)+# define GU_GNUC+#endif++#ifdef GU_GNUC+# define GU_ALIGNOF __alignof+# define GU_HAVE_STATEMENT_EXPRESSIONS+# define GU_GNUC_ATTR(x) __attribute__(( x ))+# if defined(__OPTIMIZE_SIZE__)+# define GU_OPTIMIZE_SIZE+# elif defined(__OPTIMIZE__)+# define GU_OPTIMIZE_SPEED+# endif+#else+# define GU_GNUC_ATTR(x)+#endif++#ifdef S_SPLINT_S+# define GU_SPLINT(x) %{ x %}+#else+# define GU_SPLINT(x)+#endif+++#endif // GU_SYSDEPS_H_
@@ -0,0 +1,229 @@++#include <gu/type.h>+#include <gu/assert.h>+#include <gu/map.h>++GuKind GU_TYPE_IDENT(type)[1] = {{ .super = NULL }};++GU_DEFINE_KIND(alias, type);+GU_DEFINE_KIND(typedef, alias);+GU_DEFINE_KIND(referenced, alias);++GU_DEFINE_KIND(repr, type);+GU_DEFINE_KIND(GuOpaque, repr);++GU_DEFINE_KIND(abstract, type);++GU_DEFINE_KIND(struct, repr);++GU_DEFINE_KIND(pointer, repr);+GU_DEFINE_KIND(reference, pointer);+GU_DEFINE_KIND(shared, pointer);++GU_DEFINE_KIND(primitive, repr);++// sizeof(void) is illegal, so do this manually+GuPrimType GU_TYPE_IDENT(void)[1] = {{+ .repr_base = {+ .type_base = {+ .kind_base = {+ .super = gu_kind(primitive),+ },+ },+ .size = 0,+ .align = 1,+ },+ .name = "void",+}};++GU_DEFINE_KIND(integer, primitive);+GU_DEFINE_TYPE(char, integer, _);++GU_DEFINE_KIND(signed, integer);+GU_DEFINE_TYPE(int, signed, _);+GU_DEFINE_TYPE(int8_t, signed, _);+GU_DEFINE_TYPE(int16_t, signed, _);+GU_DEFINE_TYPE(int32_t, signed, _);+GU_DEFINE_TYPE(int64_t, signed, _);+GU_DEFINE_TYPE(intptr_t, signed, _);+GU_DEFINE_TYPE(intmax_t, signed, _);++GU_DEFINE_KIND(unsigned, integer);+GU_DEFINE_TYPE(uint8_t, unsigned, _);+GU_DEFINE_TYPE(uint16_t, unsigned, _);+GU_DEFINE_TYPE(uint32_t, unsigned, _);+GU_DEFINE_TYPE(uint64_t, unsigned, _);+GU_DEFINE_TYPE(uintmax_t, unsigned, _);+GU_DEFINE_TYPE(size_t, unsigned, _);++GU_DEFINE_TYPE(GuLength, unsigned, _);++GU_DEFINE_KIND(GuFloating, primitive);+GU_DEFINE_TYPE(float, GuFloating, _);+GU_DEFINE_TYPE(double, GuFloating, _);+GU_DEFINE_TYPE(GuLongDouble, GuFloating, _);+++GU_DEFINE_KIND(enum, repr);++bool gu_type_has_kind(GuType* type, GuKind* kind)+{+ GuKind* k = (GuKind*)type;+ while (k != NULL) {+ if (k == kind) {+ return true;+ }+ k = k->super;+ }+ return false;+}+++struct GuTypeMap {+ GuMap* map;+};++static void+gu_type_map_init(GuTypeMap* tmap, GuTypeTable* table) +{+ for (int i = 0; i < table->parents.len; i++) {+ gu_type_map_init(tmap, table->parents.elems[i]);+ }+ for (int i = 0; i < table->entries.len; i++) {+ GuTypeTableEntry* e = &table->entries.elems[i];+ gu_map_put(tmap->map, e->kind, void*, e->val);+ }+}++GuTypeMap*+gu_new_type_map(GuTypeTable* table, GuPool* pool)+{+ GuTypeMap* tmap =+ gu_new_i(pool, GuTypeMap,+ .map = gu_new_map(GuKind, NULL, void*, &gu_null, pool));+ gu_type_map_init(tmap, table);+ return tmap;+}++bool+gu_struct_has_flex(GuStructRepr* srepr)+{+ for (int i = 0; i < srepr->members.len; i++) {+ if (srepr->members.elems[i].is_flex) {+ return true;+ }+ }+ return false;+}++void*+gu_type_map_get(GuTypeMap* tmap, GuType* type)+{+ GuKind* kind = (GuKind*)type;+ while (kind != NULL) {+ void* val = gu_map_get(tmap->map, kind, void*);+ if (val != NULL) {+ return val;+ }+ kind = kind->super;+ }+ return NULL;+}++const void*+gu_type_dyn_cast(GuType* type, GuKind* kind)+{+ if (gu_type_has_kind(type, kind)) {+ return type;+ }+ return NULL;+}+++const void* +gu_type_check_cast(GuType* type, GuKind* kind)+{+ gu_assert(gu_type_has_kind(type, kind));+ return type;+}++GuTypeRepr*+gu_type_repr(GuType* type) +{+ GuTypeAlias* alias;+ while ((alias = gu_type_try_cast(type, alias))) {+ type = alias->type;+ }+ return gu_type_try_cast(type, repr);+}++size_t+gu_type_size(GuType* type)+{+ GuTypeRepr* repr = gu_type_repr(type);+ return repr ? repr->size : 0;+}++GuEnumConstant*+gu_enum_value(GuEnumType* etype, const void* enump)+{+ size_t esize = etype->repr_base.size;+#define CHECK_ENUM_TYPE(t_) do { \+ if (esize == sizeof(t_)) { \+ t_ c = *(const t_*)enump; \+ for (int i = 0; i < etype->constants.len; i++) { \+ GuEnumConstant* cp = &etype->constants.elems[i]; \+ t_ d = *(const t_*)cp->enum_value; \+ if (c == d) { \+ return cp; \+ } \+ } \+ return NULL; \+ } \+ } while (false)++ CHECK_ENUM_TYPE(int);+ CHECK_ENUM_TYPE(char);+ CHECK_ENUM_TYPE(short);+ CHECK_ENUM_TYPE(long);+ CHECK_ENUM_TYPE(long long);++ return NULL;+}++void*+gu_type_malloc(GuType* type, GuPool* pool)+{+ GuTypeRepr* repr = gu_type_repr(type);+ gu_assert(repr);+ return gu_malloc_aligned(pool, repr->size, repr->align);+}++#if 0++typedef const struct GuPtrConvFns GuPtrConvFns;++struct GuPtrConvFns {+ void* (*get)(const void* pp);+ void (*set)(void** pp, void* p);+};++#define GU_TYPE_PTR_DEFINE_GETSET(name_, t_) \+ static void* gu_type_##name_##_ptr_get(const void* pp) { \+ return *(t_* const*) pp; \+ } \+ \+ static void gu_type_##name_##_ptr_set(void* pp, void* p) { \+ *(t_**) pp = p; \+ } \+ static GuPtrConvFns gu_ptr_conv_##name_ = { \+ .get = gu_type_##name_##_ptr_get, \+ .set = gu_type_##name_##_ptr_set \+ }++GU_TYPE_PTR_DEFINE_GETSET(void, void);+GU_TYPE_PTR_DEFINE_GETSET(struct, GuStruct);+GU_TYPE_PTR_DEFINE_GETSET(int, int);+++#endif
@@ -0,0 +1,454 @@+ +#ifndef GU_TYPE_H_+#define GU_TYPE_H_++#include <gu/defs.h>++//+// kind+//++typedef const struct GuKind GuKind;++struct GuKind {+ GuKind* super;+};++// Use GU_PASTE here so k_ can be preprocessor-expanded+#define GU_TYPE_IDENT(k_) GU_PASTE(gu_type__,k_)++#define gu_kind(k_) ((GuKind*)GU_TYPE_IDENT(k_))++#define GU_DECLARE_KIND(k_) \+ GuKind GU_TYPE_IDENT(k_)[1]++extern GU_DECLARE_KIND(kind);++#define GU_DEFINE_KIND(k_, super_k_) \+ GuKind GU_TYPE_IDENT(k_)[1] = {{ .super = gu_kind(super_k_) }}++//+// type+//++typedef const struct GuType GuType;++struct GuType {+ GuKind kind_base;+};++typedef GuType GuType_type;++extern GU_DECLARE_KIND(type);++#define GU_TYPE_INIT_type(k_, t_, _) { .kind_base = { .super = gu_kind(k_) } }++#define gu_type(t_) ((GuType*)gu_kind(t_))+++#define GU_KIND_TYPE(k_) GU_PASTE(GuType_,k_)++// This cannot be used indirectly, since we don't want to pp-expand k_.+// We must inline the body into other macros.+#define GU_TYPE_INIT(k_, ...) \+ GU_TYPE_INIT_##k_(k_, __VA_ARGS__)++//#define GU_TYPE_LIT(k_, ...) +// ((GuType*)(GuType_##k_[]){GU_TYPE_INIT(k_, __VA_ARGS__)})+#define GU_TYPE_LIT(k_, ...) \+ ((GuType*)&(GU_KIND_TYPE(k_)) GU_TYPE_INIT_##k_(k_, __VA_ARGS__))++#define GU_DECLARE_TYPE(t_, k_) \+ GU_KIND_TYPE(k_) GU_TYPE_IDENT(t_)[1]++//#define GU_DEFINE_TYPE(t_, k_, ...) +// GuType_##k_ GU_TYPE_IDENT(t_) = GU_TYPE_INIT(k_, t_, __VA_ARGS__)+#define GU_DEFINE_TYPE(t_, k_, ...) \+ GU_KIND_TYPE(k_) GU_TYPE_IDENT(t_)[1] = \+ { GU_TYPE_INIT_##k_(k_, t_, __VA_ARGS__) }++#define GU_DEFINE_TYPE_ALIAS(t1_, t2_) \+ static GuType* const GU_TYPE_IDENT(t1_) = gu_type(t2_)+++//+// abstract+//++typedef GuType GuType_abstract;++#define GU_TYPE_INIT_abstract(k_, t_, _) \+ GU_TYPE_INIT_type(k_, t_, _)++extern GU_DECLARE_KIND(abstract);+++//+// repr +//++typedef struct GuTypeRepr GuTypeRepr, GuType_repr;++struct GuTypeRepr {+ GuType type_base;+ uint16_t size;+ uint16_t align;+};++#define GU_TYPE_INIT_repr(k_, t_, _) { \+ .type_base = GU_TYPE_INIT_type(k_, t_, _), \+ .size = sizeof(t_), \+ .align = gu_alignof(t_) \+ }++extern GU_DECLARE_KIND(repr);++++//+// GuOpaque+//++typedef GuType_repr GuType_GuOpaque;++#define GU_TYPE_INIT_GuOpaque GU_TYPE_INIT_repr++extern GU_DECLARE_KIND(GuOpaque);++//+// pointer+//++typedef const struct GuPointerType GuPointerType, GuType_pointer;++struct GuPointerType {+ GuType_repr repr_base;+ GuType* pointed_type;+};++#define GU_TYPE_INIT_pointer(k_, t_, pointed_) \+ { \+ .repr_base = GU_TYPE_INIT_repr(k_, t_, _), \+ .pointed_type = pointed_ \+} +++extern GU_DECLARE_KIND(pointer);++#define gu_ptr_type(t_) \+ GU_TYPE_LIT(pointer, t_*, gu_type(t_))++++++++//+// alias+//+++typedef const struct GuTypeAlias GuTypeAlias, GuType_alias;++struct GuTypeAlias {+ GuType type_base;+ GuType* type;+};++#define GU_TYPE_INIT_alias(k_, t_, type_) { \+ .type_base = GU_TYPE_INIT_type(k_, t_, _), \+ .type = type_ \+}++extern GU_DECLARE_KIND(alias);++//+// typedef+//++typedef const struct GuTypeDef GuTypeDef, GuType_typedef;++struct GuTypeDef {+ GuType_alias alias_base;+ const char* name;+};++#define GU_TYPE_INIT_typedef(k_, t_, type_) { \+ .alias_base = GU_TYPE_INIT_alias(k_, t_, type_), \+ .name = #t_, \+}++extern GU_DECLARE_KIND(typedef);++#define GU_DEFINE_TYPEDEF_X(t_, dk_, k_, ...) \+ GU_DEFINE_TYPE(t_, dk_, GU_TYPE_LIT(k_, t_, __VA_ARGS__))++#define GU_DEFINE_TYPEDEF(t_, ...) \+ GU_DEFINE_TYPEDEF_X(t_, typedef, __VA_ARGS__)++++//+// referenced+//++extern GU_DECLARE_KIND(referenced);++typedef GuType_alias GuType_referenced;++#define GU_TYPE_INIT_referenced GU_TYPE_INIT_alias++++#include <gu/list.h>++//+// struct+//++typedef const struct GuStructRepr GuStructRepr, GuType_struct;++typedef const struct GuMember GuMember;++struct GuMember {+ ptrdiff_t offset;+ const char* name;+ GuType* type;+ bool is_flex;+};++struct GuStructRepr {+ GuType_repr repr_base;+ const char* name;+ GuSList(GuMember) members;+};++extern GU_DECLARE_KIND(struct);++#define GU_MEMBER_AUX_(struct_, member_, type_, is_flex_) \+ { \+ .offset = offsetof(struct_, member_), \+ .name = #member_, \+ .type = type_, \+ .is_flex = is_flex_, \+ }++#define GU_MEMBER_V(struct_, member_, type_) \+ GU_MEMBER_AUX_(struct_, member_, type_, false)++#define GU_MEMBER(s_, m_, t_) \+ GU_MEMBER_V(s_, m_, gu_type(t_))++#define GU_MEMBER_P(s_, m_, t_) \+ GU_MEMBER_V(s_, m_, gu_ptr_type(t_))++#define GU_MEMBER_S(s_, m_, t_) \+ GU_MEMBER_V(s_, m_, gu_shared_ptr_type(t_))++#define GU_FLEX_MEMBER_V(struct_, member_, type_) \+ GU_MEMBER_AUX_(struct_, member_, type_, true)++#define GU_FLEX_MEMBER(s_, m_, t_) \+ GU_FLEX_MEMBER_V(s_, m_, gu_type(t_))++#define GU_FLEX_MEMBER_P(s_, m_, t_) \+ GU_FLEX_MEMBER_V(s_, m_, gu_ptr_type(t_))+++#define GU_TYPE_INIT_struct(k_, t_, ...) { \+ .repr_base = GU_TYPE_INIT_repr(k_, t_, _), \+ .name = #t_, \+ .members = GU_SLIST(GuMember, __VA_ARGS__) \+}++bool+gu_struct_has_flex(GuStructRepr* srepr);+++//+// reference+//++typedef GuType_pointer GuType_reference;++#define GU_TYPE_INIT_reference GU_TYPE_INIT_pointer++extern GU_DECLARE_KIND(reference);+++//+// shared+//++typedef GuType_pointer GuType_shared;++#define GU_TYPE_INIT_shared GU_TYPE_INIT_pointer++extern GU_DECLARE_KIND(shared);++#define gu_shared_ptr_type(t_) \+ GU_TYPE_LIT(shared, t_*, gu_type(t_))++//+// primitives+//++typedef const struct GuPrimType GuPrimType, GuType_primitive;++struct GuPrimType {+ GuType_repr repr_base;+ const char* name;+};++#define GU_TYPE_INIT_primitive(k_, t_, _) { \+ .repr_base = GU_TYPE_INIT_repr(k_, t_, _), \+ .name = #t_ \+} ++extern GU_DECLARE_KIND(primitive);+extern GU_DECLARE_TYPE(void, primitive);++#define GU_TYPE_INIT_integer GU_TYPE_INIT_primitive+typedef GuType_primitive GuType_integer;+extern GU_DECLARE_KIND(integer);+extern GU_DECLARE_TYPE(char, integer);++#define GU_TYPE_INIT_signed GU_TYPE_INIT_integer+typedef GuType_integer GuType_signed;+extern GU_DECLARE_KIND(signed);+extern GU_DECLARE_TYPE(int, signed);+extern GU_DECLARE_TYPE(int8_t, signed);+extern GU_DECLARE_TYPE(int16_t, signed);+extern GU_DECLARE_TYPE(int32_t, signed);+extern GU_DECLARE_TYPE(int64_t, signed);+extern GU_DECLARE_TYPE(intptr_t, signed);+extern GU_DECLARE_TYPE(intmax_t, signed);++#define GU_TYPE_INIT_unsigned GU_TYPE_INIT_integer+typedef GuType_integer GuType_unsigned;+extern GU_DECLARE_KIND(unsigned);+extern GU_DECLARE_TYPE(uint8_t, unsigned);+extern GU_DECLARE_TYPE(uint16_t, unsigned);+extern GU_DECLARE_TYPE(uint32_t, unsigned);+extern GU_DECLARE_TYPE(uint64_t, unsigned);+extern GU_DECLARE_TYPE(uintmax_t, unsigned);+extern GU_DECLARE_TYPE(size_t, unsigned);++typedef size_t GuLength;+extern GU_DECLARE_TYPE(GuLength, unsigned); // TODO: get rid+++#define GU_TYPE_INIT_GuFloating GU_TYPE_INIT_primitive+typedef GuType_primitive GuType_GuFloating;+extern GU_DECLARE_KIND(GuFloating);+extern GU_DECLARE_TYPE(float, GuFloating);+extern GU_DECLARE_TYPE(double, GuFloating);+typedef long double GuLongDouble;+extern GU_DECLARE_TYPE(GuLongDouble, GuFloating);++++//+// enum+//++extern GU_DECLARE_KIND(enum);++typedef const struct GuEnumConstant GuEnumConstant;++struct GuEnumConstant {+ const char* name;+ int64_t value;+ const void* enum_value;+};++typedef const struct GuEnumType GuEnumType, GuType_enum;++struct GuEnumType {+ GuType_repr repr_base;+ GuSList(GuEnumConstant) constants;+};++#define GU_ENUM_C(t_, x) { \+ .name = #x, \+ .value = x, \+ .enum_value = (const t_[1]){ x } \+ }++#define GU_TYPE_INIT_enum(k_, t_, ...) { \+ .repr_base = GU_TYPE_INIT_repr(k_, t_, _), \+ .constants = GU_SLIST(GuEnumConstant, __VA_ARGS__) \+}++GuEnumConstant*+gu_enum_value(GuEnumType* etype, const void* enump);+++++bool gu_type_has_kind(const GuType* type, const GuKind* kind);+++++typedef const struct GuTypeTableEntry GuTypeTableEntry;++struct GuTypeTableEntry {+ GuKind* kind;+ void* val;+};++typedef const struct GuTypeTable GuTypeTable;++struct GuTypeTable {+ GuSList(const GuTypeTable*) parents;+ GuSList(GuTypeTableEntry) entries;+};++#define GU_TYPETABLE(parents_, ...) { \+ .parents = parents_, \+ .entries = GU_SLIST(GuTypeTableEntry, \+ __VA_ARGS__) \+ }++typedef struct GuTypeMap GuTypeMap;++GuTypeMap*+gu_new_type_map(GuTypeTable* table, GuPool* pool);++void*+gu_type_map_get(GuTypeMap* tmap, GuType* type);++size_t +gu_type_size(GuType* type);++GuTypeRepr*+gu_type_repr(GuType* type);++const void*+gu_type_check_cast(GuType* t, GuKind* k);++const void*+gu_type_dyn_cast(GuType* t, GuKind* k);++#define gu_type_try_cast(type_, k_) \+ ((GU_KIND_TYPE(k_)*)gu_type_dyn_cast(type_, gu_kind(k_)))++#ifndef NDEBUG+#define gu_type_cast(type_, k_) \+ ((GU_KIND_TYPE(k_)*)gu_type_check_cast(type_, gu_kind(k_)))+#else+#define gu_type_cast(type_, k_) \+ ((GU_KIND_TYPE(k_)*)(type_))+#endif++void* gu_type_malloc(GuType* type, GuPool* pool);++#if 0+void* gu_type_ptr_get(GuType* type, const void* pp);+void gu_type_ptr_set(GuType* type, void* pp, void* p);+#endif+++#endif // GU_TYPE_H_
@@ -0,0 +1,135 @@+#include <gu/ucs.h>+#include <gu/assert.h>+#include <guconfig.h>++GU_DEFINE_TYPE(GuUCSExn, abstract, _);+++#ifdef GU_CHAR_ASCII++bool+gu_char_is_valid(char c)+{+ if (c < 0) {+ return false;+ } else if (c < 64) {+ return UINT64_C(0xffffffef00003f81) & (UINT64_C(1) << c);+ }+#if CHAR_MAX > 127 // Let's avoid spurious warnings+ else if (c > 127) {+ return false;+ }+#endif + return UINT64_C(0x7ffffffefffffffe) & (UINT64_C(1) << (c - 64));+}++char+gu_ucs_char(GuUCS uc, GuExn* err)+{+ if (0 <= uc && uc <= 127) {+ char c = (char) uc;+ if (gu_char_is_valid(c)) {+ return c;+ }+ }+ gu_raise(err, GuUCSExn);+ return 0;+}++#else // defined(GU_CHAR_ASCII)++static const char gu_ucs_ascii[128] =+ "\0\0\0\0\0\0\0\a\b\t\n\v\f\r\0\0"+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"+ " !\"#\0%&'()*+,-./0123456789:;<=>?"+ "\0ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_"+ "\0abcdefghijklmnopqrstuvwxyz{|}~\0";++const uint8_t gu_ucs_ascii_reverse_[CHAR_MAX] = {+ ['\0'] = 0x00, ['\a'] = 0x07, ['\b'] = 0x08, ['\t'] = 0x09,+ ['\n'] = 0x0a, ['\v'] = 0x0b, ['\f'] = 0x0c, ['\r'] = 0x0d,+ [' '] = 0x20, ['!'] = 0x21, ['"'] = 0x22, ['#'] = 0x23, ['%'] = 0x25,+ ['&'] = 0x26, ['\''] = 0x27, ['('] = 0x28, [')'] = 0x29, ['*'] = 0x2a,+ ['+'] = 0x2b, [','] = 0x2c, ['-'] = 0x2d, ['.'] = 0x2e, ['/'] = 0x2f,+ ['0'] = 0x30, ['1'] = 0x31, ['2'] = 0x32, ['3'] = 0x33, ['4'] = 0x34,+ ['5'] = 0x35, ['6'] = 0x36, ['7'] = 0x37, ['8'] = 0x38, ['9'] = 0x39,+ [':'] = 0x3a, [';'] = 0x3b, ['<'] = 0x3c, ['='] = 0x3d, ['>'] = 0x3e,+ ['?'] = 0x3f, ['A'] = 0x41, ['B'] = 0x42, ['C'] = 0x43, ['D'] = 0x44,+ ['E'] = 0x45, ['F'] = 0x46, ['G'] = 0x47, ['H'] = 0x48, ['I'] = 0x49,+ ['J'] = 0x4a, ['K'] = 0x4b, ['L'] = 0x4c, ['M'] = 0x4d, ['N'] = 0x4e,+ ['O'] = 0x4f, ['P'] = 0x50, ['Q'] = 0x51, ['R'] = 0x52, ['S'] = 0x53,+ ['T'] = 0x54, ['U'] = 0x55, ['V'] = 0x56, ['W'] = 0x57, ['X'] = 0x58,+ ['Y'] = 0x59, ['Z'] = 0x5a, ['['] = 0x5b, ['\\'] = 0x5c, [']'] = 0x5d,+ ['^'] = 0x5e, ['_'] = 0x5f, ['a'] = 0x61, ['b'] = 0x62, ['c'] = 0x63,+ ['d'] = 0x64, ['e'] = 0x65, ['f'] = 0x66, ['g'] = 0x67, ['h'] = 0x68,+ ['i'] = 0x69, ['j'] = 0x6a, ['k'] = 0x6b, ['l'] = 0x6c, ['m'] = 0x6d,+ ['n'] = 0x6e, ['o'] = 0x6f, ['p'] = 0x70, ['q'] = 0x71, ['r'] = 0x72,+ ['s'] = 0x73, ['t'] = 0x74, ['u'] = 0x75, ['v'] = 0x76, ['w'] = 0x77,+ ['x'] = 0x78, ['y'] = 0x79, ['z'] = 0x7a, ['{'] = 0x7b, ['|'] = 0x7c,+ ['}'] = 0x7d, ['~'] = 0x7e+};+++bool+gu_char_is_valid(char c)+{+ if (c > 0) {+ return (gu_ucs_ascii_reverse_[(int) c] > 0);+ }+ return (c == '\0');+}++char+gu_ucs_char(GuUCS uc, GuExn* err)+{+ if (uc == 0) {+ return '\0';+ } else if (0 < uc && uc <= 127) {+ char c = gu_ucs_ascii[uc];+ if (c != '\0') {+ return (unsigned char) c;+ }+ }+ gu_raise(err, GuUCSExn);+ return 0;+}++#endif++size_t+gu_str_to_ucs(const char* cbuf, size_t len, GuUCS* ubuf, GuExn* err)+{+ size_t n = 0;+ while (n < len) {+ char c = cbuf[n];+ if (!gu_char_is_valid(c)) {+ gu_raise(err, GuUCSExn);+ return n;+ }+ ubuf[n] = gu_char_ucs(c);+ n++;+ }+ return n;+}++size_t+gu_ucs_to_str(const GuUCS* ubuf, size_t len, char* cbuf, GuExn* err)+{+ size_t n = 0;+ while (n < len) {+ char c = gu_ucs_char(ubuf[n], err);+ if (!gu_ok(err)) {+ break;+ }+ cbuf[n] = c;+ n++;+ }+ return n;+}+++extern inline bool+gu_ucs_valid(GuUCS ucs);++extern inline GuUCS+gu_char_ucs(char c);
@@ -0,0 +1,53 @@+#ifndef GU_UCS_H_+#define GU_UCS_H_++#include <gu/defs.h>+#include <gu/exn.h>+#include <gu/assert.h>+++#if defined(__STDC_ISO_10646__) && WCHAR_MAX >= 0x10FFFF+#include <wchar.h>+#define GU_UCS_WCHAR+typedef wchar_t GuUCS;+#else+typedef int32_t GuUCS;+#endif++#define GU_UCS_MAX ((GuUCS)(0x10FFFF))++bool+gu_char_is_valid(char c);++inline bool+gu_ucs_valid(GuUCS ucs)+{+ return ucs >= 0 && ucs <= GU_UCS_MAX;+}++inline GuUCS+gu_char_ucs(char c)+{+ gu_require(gu_char_is_valid(c));+#ifdef GU_CHAR_ASCII+ GuUCS u = (GuUCS) c;+#else+ extern const uint8_t gu_ucs_ascii_reverse_[CHAR_MAX];+ GuUCS u = gu_ucs_ascii_reverse_[(unsigned char) c];+#endif+ gu_ensure(u < 0x80);+ return u;+}++char+gu_ucs_char(GuUCS uc, GuExn* err);++size_t+gu_str_to_ucs(const char* cbuf, size_t len, GuUCS* ubuf, GuExn* err);++size_t+gu_ucs_to_str(const GuUCS* ubuf, size_t len, char* cbuf, GuExn* err);++extern GU_DECLARE_TYPE(GuUCSExn, abstract);++#endif // GU_ISO10646_H_
@@ -0,0 +1,220 @@+#include <gu/assert.h>+#include <gu/utf8.h>+#include <guconfig.h>++GuUCS+gu_utf8_decode(const uint8_t** src_inout)+{+ const uint8_t* src = *src_inout;+ uint8_t c = src[0];+ if (c < 0x80) {+ *src_inout = src + 1;+ return (GuUCS) c;+ }+ size_t len = (c < 0xe0 ? 1 :+ c < 0xf0 ? 2 :+ 3);+ uint32_t mask = 0x07071f7f;+ uint32_t u = c & (mask >> (len * 8));+ for (size_t i = 1; i <= len; i++) {+ c = src[i];+ u = u << 6 | (c & 0x3f);+ }+ *src_inout = &src[len + 1];+ return (GuUCS) u;+}++GuUCS+gu_in_utf8_(GuIn* in, GuExn* err)+{+ uint8_t c = gu_in_u8(in, err);+ if (!gu_ok(err)) {+ return 0;+ }+ int len = (c < 0x80 ? 0 : + c < 0xc2 ? -1 :+ c < 0xe0 ? 1 :+ c < 0xf0 ? 2 :+ c < 0xf5 ? 3 :+ -1);+ if (len < 0) {+ goto fail;+ } else if (len == 0) {+ return c;+ }+ static const uint8_t mask[4] = { 0x7f, 0x1f, 0x0f, 0x07 };+ uint32_t u = c & mask[len];+ uint8_t buf[3];+ // If reading the extra bytes causes EOF, it is an encoding+ // error, not a legitimate end of character stream.+ GuExn* tmp_err = gu_exn(err, GuEOF, NULL);+ gu_in_bytes(in, buf, len, tmp_err);+ if (tmp_err->caught) {+ goto fail;+ }+ if (!gu_ok(err)) {+ return 0;+ }+ for (int i = 0; i < len; i++) {+ c = buf[i];+ if ((c & 0xc0) != 0x80) {+ goto fail;+ }+ u = u << 6 | (c & 0x3f);+ }+ GuUCS ucs = (GuUCS) u;+ if (!gu_ucs_valid(ucs)) {+ goto fail;+ }+ return ucs;++fail:+ gu_raise(err, GuUCSExn);+ return 0;+}+++size_t+gu_advance_utf8(GuUCS ucs, uint8_t* buf)+{+ gu_require(gu_ucs_valid(ucs));+ if (ucs < 0x80) {+ buf[0] = (uint8_t) ucs;+ return 1;+ } else if (ucs < 0x800) {+ buf[0] = 0xc0 | (ucs >> 6);+ buf[1] = 0x80 | (ucs & 0x3f);+ return 2;+ } else if (ucs < 0x10000) {+ buf[0] = 0xe0 | (ucs >> 12);+ buf[1] = 0x80 | ((ucs >> 6) & 0x3f);+ buf[2] = 0x80 | (ucs & 0x3f);+ return 3;+ } else {+ buf[0] = 0xf0 | (ucs >> 18);+ buf[1] = 0x80 | ((ucs >> 12) & 0x3f);+ buf[2] = 0x80 | ((ucs >> 6) & 0x3f);+ buf[3] = 0x80 | (ucs & 0x3f);+ return 4;+ }+}++char+gu_in_utf8_char_(GuIn* in, GuExn* err)+{+ return gu_ucs_char(gu_in_utf8(in, err), err);+}++void+gu_out_utf8_long_(GuUCS ucs, GuOut* out, GuExn* err)+{+ uint8_t buf[4];+ size_t sz = gu_advance_utf8(ucs, buf);+ switch (sz) {+ case 2:+ gu_out_bytes(out, buf, 2, err);+ break;+ case 3:+ gu_out_bytes(out, buf, 3, err);+ break;+ case 4:+ gu_out_bytes(out, buf, 4, err);+ break;+ default:+ gu_impossible();+ }+}++extern inline void+gu_out_utf8(GuUCS ucs, GuOut* out, GuExn* err);++static size_t +gu_utf32_out_utf8_buffered_(const GuUCS* src, size_t len, GuOut* out, + GuExn* err)+{+ size_t src_i = 0;+ while (src_i < len) {+ size_t dst_sz;+ uint8_t* dst = gu_out_begin_span(out, len - src_i, &dst_sz, err);+ if (!gu_ok(err)) {+ return src_i;+ }+ if (!dst) {+ gu_out_utf8(src[src_i], out, err);+ if (!gu_ok(err)) {+ return src_i;+ }+ src_i++;+ break;+ } + size_t dst_i = 0;+ while (true) {+ size_t safe = (dst_sz - dst_i) / 4;+ size_t end = GU_MIN(len, src_i + safe);+ if (end == src_i) {+ break;+ }+ do {+ GuUCS ucs = src[src_i++];+ dst_i += gu_advance_utf8(ucs, &dst[dst_i]);+ } while (src_i < end);+ } + gu_out_end_span(out, dst_i);+ }+ return src_i;+}++size_t+gu_utf32_out_utf8(const GuUCS* src, size_t len, GuOut* out, GuExn* err)+{+ if (gu_out_is_buffered(out)) {+ return gu_utf32_out_utf8_buffered_(src, len, out, err);+ } + for (size_t i = 0; i < len; i++) {+ gu_out_utf8(src[i], out, err);+ if (!gu_ok(err)) {+ return i;+ }+ }+ return len;++}++#ifndef GU_CHAR_ASCII++void gu_str_out_utf8_(const char* str, GuOut* out, GuExn* err)+{+ size_t len = strlen(str);+ size_t sz = 0;+ uint8_t* buf = gu_out_begin_span(out, len, &sz, err);+ if (!gu_ok(err)) {+ return;+ }+ if (buf != NULL && sz < len) {+ gu_out_end_span(out, 0);+ buf = NULL;+ }+ GuPool* tmp_pool = buf ? NULL : gu_local_pool();+ buf = buf ? buf : gu_new_n(uint8_t, len, tmp_pool);+ for (size_t i = 0; i < len; i++) {+ GuUCS ucs = gu_char_ucs(str[i]);+ buf[i] = (uint8_t) ucs;+ }+ if (tmp_pool) {+ gu_out_bytes(out, buf, len, err);+ gu_pool_free(tmp_pool);+ } else {+ gu_out_end_span(out, len);+ }+}++#endif++extern inline void +gu_str_out_utf8(const char* str, GuOut* out, GuExn* err);++extern inline GuUCS+gu_in_utf8(GuIn* in, GuExn* err);++extern inline char+gu_in_utf8_char(GuIn* in, GuExn* err);
@@ -0,0 +1,67 @@+#ifndef GU_UTF8_H_+#define GU_UTF8_H_++#include <gu/in.h>+#include <gu/out.h>+#include <gu/ucs.h>++inline GuUCS+gu_in_utf8(GuIn* in, GuExn* err)+{+ int i = gu_in_peek_u8(in);+ if (i >= 0 && i < 0x80) {+ gu_in_consume(in, 1);+ return (GuUCS) i;+ }+ extern GuUCS gu_in_utf8_(GuIn* in, GuExn* err);+ return gu_in_utf8_(in, err);+}+++inline char+gu_in_utf8_char(GuIn* in, GuExn* err)+{+#ifdef GU_CHAR_ASCII+ int i = gu_in_peek_u8(in);+ if (i >= 0 && i < 0x80) {+ gu_in_consume(in, 1);+ return (char) i;+ }+#endif+ extern char gu_in_utf8_char_(GuIn* in, GuExn* err);+ return gu_in_utf8_char_(in, err);+}++void+gu_out_utf8_long_(GuUCS ucs, GuOut* out, GuExn* err);++inline void+gu_out_utf8(GuUCS ucs, GuOut* out, GuExn* err)+{+ gu_require(gu_ucs_valid(ucs));+ if (GU_LIKELY(ucs < 0x80)) {+ gu_out_u8(out, ucs, err);+ } else {+ gu_out_utf8_long_(ucs, out, err);+ }+}++size_t+gu_utf32_out_utf8(const GuUCS* src, size_t len, GuOut* out, GuExn* err);++GuUCS+gu_utf8_decode(const uint8_t** utf8);++inline void +gu_str_out_utf8(const char* str, GuOut* out, GuExn* err)+{+#ifdef GU_CHAR_ASCII+ gu_out_bytes(out, (const uint8_t*) str, strlen(str), err);+#else+ extern void + gu_str_out_utf8_(const char* str, GuOut* out, GuExn* err);+ gu_str_out_utf8_(str, out, err);+#endif+}++#endif // GU_UTF8_H_
@@ -0,0 +1,100 @@+/* + * Copyright 2010 University of Helsinki.+ * + * This file is part of libgu.+ * + * Libgu is free software: you can redistribute it and/or modify it under+ * the terms of the GNU Lesser General Public License as published by the+ * Free Software Foundation, either version 3 of the License, or (at your+ * option) any later version.+ * + * Libgu is distributed in the hope that it will be useful, but WITHOUT+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public+ * License for more details.+ * + * You should have received a copy of the GNU Lesser General Public+ * License along with libgu. If not, see <http://www.gnu.org/licenses/>.+ */++#include "variant.h"+#include "bits.h"++enum {+ GU_VARIANT_ALIGNMENT = sizeof(uintptr_t)+};++void* +gu_alloc_variant(uint8_t tag, size_t size, + size_t align, GuVariant* variant_out, GuPool* pool)+{+ align = gu_max(align, GU_VARIANT_ALIGNMENT);+ if (((size_t)tag) > GU_VARIANT_ALIGNMENT - 2) {+ uint8_t* alloc = gu_malloc_aligned(pool, align + size, align);+ alloc[align - 1] = tag;+ void* p = &alloc[align];+ variant_out->p = (uintptr_t)p;+ return p;+ }+ void* p = gu_malloc_aligned(pool, size, align);+ variant_out->p = ((uintptr_t)p) | (tag + 1);+ return p;+}++GuVariant +gu_make_variant(uint8_t tag, size_t size, size_t align, const void* init,+ GuPool* pool)+{+ GuVariant v;+ void* data = gu_alloc_variant(tag, size, align, &v, pool);+ memcpy(data, init, size);+ return v;+}++int+gu_variant_tag(GuVariant variant)+{+ if (gu_variant_is_null(variant)) {+ return GU_VARIANT_NULL;+ }+ int u = variant.p % GU_VARIANT_ALIGNMENT;+ if (u == 0) {+ uint8_t* mem = (uint8_t*)variant.p;+ return mem[-1];+ }+ return u - 1;+}++void*+gu_variant_data(GuVariant variant)+{+ if (gu_variant_is_null(variant)) {+ return NULL;+ }+ return (void*)gu_align_backward(variant.p, GU_VARIANT_ALIGNMENT);+}++GuVariantInfo gu_variant_open(GuVariant variant)+{+ GuVariantInfo info = {+ .tag = gu_variant_tag(variant),+ .data = gu_variant_data(variant)+ };+ return info;+}++int +gu_variant_intval(GuVariant variant)+{+ int u = variant.p % GU_VARIANT_ALIGNMENT;+ if (u == 0) {+ int* mem = (int*)variant.p;+ return *mem;+ }+ return (variant.p / GU_VARIANT_ALIGNMENT);+}++const GuVariant gu_null_variant = { (GuWord) NULL };++GU_DEFINE_KIND(GuVariant, repr);+GU_DEFINE_KIND(GuVariantAsPtr, repr);
@@ -0,0 +1,167 @@+/* + * Copyright 2010 University of Helsinki.+ * + * This file is part of libgu.+ * + * Libgu is free software: you can redistribute it and/or modify it under+ * the terms of the GNU Lesser General Public License as published by the+ * Free Software Foundation, either version 3 of the License, or (at your+ * option) any later version.+ * + * Libgu is distributed in the hope that it will be useful, but WITHOUT+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public+ * License for more details.+ * + * You should have received a copy of the GNU Lesser General Public+ * License along with libgu. If not, see <http://www.gnu.org/licenses/>.+ */++/** @file+ *+ * Lightweight tagged data. + */++#ifndef GU_VARIANT_H_+#define GU_VARIANT_H_++#include <gu/defs.h>+#include <gu/mem.h>+#include <gu/type.h>++/** @name Variants+ * @{+ */++typedef struct GuVariant GuVariant;+++void* gu_alloc_variant(uint8_t tag, + size_t size, size_t align, + GuVariant* variant_out, GuPool* pool);++GuVariant gu_make_variant(uint8_t tag, + size_t size, size_t align, + const void* init, GuPool* pool);++#define gu_new_variant(tag, type, variant_out, pool) \+ ((type*)gu_alloc_variant(tag, sizeof(type), \+ gu_alignof(type), variant_out, pool))++/**< + * @hideinitializer */++#define gu_new_variant_i(POOL, TAG, T, ...) \+ gu_make_variant(TAG, sizeof(T), gu_alignof(T), \+ &(T){ __VA_ARGS__ }, POOL)++++#define gu_new_flex_variant(tag, type, flex_mem, n_elems, variant_out, pool) \+ ((type*)gu_alloc_variant(tag, \+ GU_FLEX_SIZE(type, flex_mem, n_elems), \+ gu_flex_alignof(type), \+ variant_out, pool))+/**< + * @hideinitializer */++enum {+ GU_VARIANT_NULL = -1+};++int gu_variant_tag(GuVariant variant);++void* gu_variant_data(GuVariant variant);+++typedef struct GuVariantInfo GuVariantInfo;++struct GuVariantInfo {+ int tag;+ void* data;+};++GuVariantInfo gu_variant_open(GuVariant variant);++/** @privatesection */+struct GuVariant {+ uintptr_t p;+ /**< @private */+};++/** @} */++static inline void*+gu_variant_to_ptr(GuVariant variant)+{+ return (void*)variant.p;+}++static inline GuVariant+gu_variant_from_ptr(const void* p)+{+ GuVariant v = { (uintptr_t)p };+ return v;+}++extern const GuVariant gu_null_variant;++static inline bool+gu_variant_is_null(GuVariant v) {+ return ((void*)v.p == NULL);+}+++// variant++typedef const struct GuConstructor GuConstructor;++struct GuConstructor {+ int c_tag;+ const char* c_name;+ const GuType* type;+};++#define GU_CONSTRUCTOR_V(ctag, c_type) { \+ .c_tag = ctag, \+ .c_name = #ctag, \+ .type = c_type \+}++#define GU_CONSTRUCTOR(ctag, t_) \+ GU_CONSTRUCTOR_V(ctag, gu_type(t_))++#define GU_CONSTRUCTOR_P(ctag, t_) \+ GU_CONSTRUCTOR_V(ctag, gu_ptr_type(t_))++#define GU_CONSTRUCTOR_S(ctag, t_, ...) \+ GU_CONSTRUCTOR_V(ctag, GU_TYPE_LIT(struct, t_, __VA_ARGS__))++#define GU_CONSTRUCTOR_S1(ctag, t_, mem1_, type1_) \+ GU_CONSTRUCTOR_S(ctag, t_, \+ GU_MEMBER(t_, mem1_, type1_))++#define GU_CONSTRUCTOR_S2(ctag, t_, mem1_, type1_, mem2_, type2_) \+ GU_CONSTRUCTOR_S(ctag, t_, \+ GU_MEMBER(t_, mem1_, type1_), \+ GU_MEMBER(t_, mem2_, type2_))++++typedef GuSList(GuConstructor) GuConstructors;++typedef const struct GuVariantType GuVariantType, GuType_GuVariant;++struct GuVariantType {+ GuType_repr repr_base;+ GuConstructors ctors;+};++#define GU_TYPE_INIT_GuVariant(k_, t_, ...) { \+ .repr_base = GU_TYPE_INIT_repr(k_, GuVariant, _), \+ .ctors = GU_SLIST(GuConstructor, __VA_ARGS__) \+}++extern GU_DECLARE_KIND(GuVariant);++#endif // GU_VARIANT_H_
@@ -0,0 +1,174 @@+#include <gu/write.h>+++size_t+gu_utf32_write(const GuUCS* src, size_t len, GuWriter* wtr, GuExn* err)+{+ return gu_utf32_out_utf8(src, len, &wtr->out_, err);+}+++void+gu_vprintf(const char* fmt, va_list args, GuWriter* wtr, GuExn* err)+{+ GuPool* tmp_pool = gu_local_pool();+ char* str = gu_vasprintf(fmt, args, tmp_pool);+ gu_puts(str, wtr, err);+ gu_pool_free(tmp_pool);+}++void+gu_printf(GuWriter* wtr, GuExn* err, const char* fmt, ...)+{+ va_list args;+ va_start(args, fmt);+ gu_vprintf(fmt, args, wtr, err);+ va_end(args);+}+++GuWriter*+gu_new_utf8_writer(GuOut* utf8_out, GuPool* pool)+{+ GuOutStream* stream = gu_out_proxy_stream(utf8_out, pool);+ GuWriter* wtr = gu_new(GuWriter, pool);+ wtr->out_ = gu_init_out(stream);+ return wtr;+}+++#if 0+#ifdef GU_UCS_WCHAR+#include <stdlib.h>+#include <wchar.h>+static const mbstate_t gu_init_mbstate; // implicitly initialized to zero+#endif++typedef struct GuLocaleWriter GuLocaleWriter;++struct GuLocaleWriter {+ GuOutWriter owtr;+#ifdef GU_UCS_WCHAR+ mbstate_t ps;+ size_t mb_cur_max;+#endif+};++size_t+gu_locale_writer_write(GuWriter* wtr, const uint8_t* utf8_src, size_t sz, + GuExn* err)+{+ GuLocaleWriter* lwtr = (GuLocaleWriter*) wtr;+ size_t done = 0;+ static const size_t bufsize = 256;+#ifdef GU_UCS_WCHAR+ size_t margin = lwtr->mb_cur_max;+#else+ size_t margin = 1;+#endif+ GuOut* out = lwtr->owtr.out;+ if (gu_out_is_buffered(out)) {+ while (done < sz) {+ size_t dst_sz;+ uint8_t* dst = gu_out_begin_span(out, &dst_sz);+ if (!dst) {+ break;+ }+ if (dst_sz <= margin) {+ gu_out_end_span(out, 0);+ break;+ }+ size_t end = dst_sz - margin;+ const uint8_t* + size_t n = done;+ while (n < sz && dst_i <= end) {+#ifdef GU_UCS_WCHAR+ GuUCS ucs = gu_+ wchar_t wc = src[n];+ size_t nb = wcrtomb((char*) p, wc, &lwtr->ps);+#else+ *p = (uint8_t) gu_ucs_char(buf[n], err);+ size_t nb = 1;+ if (!gu_ok(err)) {+ gu_exn_clear(err);+ nb = (size_t) -1;+ }+#endif+ if (nb == (size_t) -1) {+ *p++ = (uint8_t) '?';+ } else {+ p += nb;+ }+ + }+ for (++ }++++ }++ uint8_t cbuf[256];+ while (done < size && gu_ok(err)) {+ uint8_t* p = cbuf;+ uint8_t* edge = &cbuf[bufsize - margin];+ size_t n;+ for (n = done; p <= edge && n < size; n++) {+#ifdef GU_UCS_WCHAR+ wchar_t wc = buf[n];+ size_t nb = wcrtomb((char*) p, wc, &lwtr->ps);+#else+ *p = (uint8_t) gu_ucs_char(buf[n], err);+ size_t nb = 1;+ if (!gu_ok(err)) {+ gu_exn_clear(err);+ nb = (size_t) -1;+ }+#endif+ if (nb == (size_t) -1) {+ *p++ = (uint8_t) '?';+ } else {+ p += nb;+ }+ }+ gu_out_bytes(lwtr->owtr.out, cbuf, p - cbuf, err);+ if (gu_ok(err)) {+ done = n;+ }+ }+ return done;+}++GuWriter*+gu_locale_writer(GuOut* out, GuPool* pool)+{+ GuLocaleWriter* lwtr = gu_new_s(+ pool, GuLocaleWriter,+ .wtr.out.output = gu_locale_writer_output,+ .wtr.out.flush = gu_locale_writer_flush,+ .out = out);+#ifdef GU_UCS_WCHAR+ lwtr->ps = gu_init_mbstate;+ lwtr->mb_cur_max = MB_CUR_MAX;+#endif+ return (GuWriter*) lwtr;+}++#endif++extern inline void+gu_ucs_write(GuUCS ucs, GuWriter* wtr, GuExn* err);++extern inline void+gu_writer_flush(GuWriter* wtr, GuExn* err);++extern inline void+gu_putc(char c, GuWriter* wtr, GuExn* err);++extern inline void+gu_puts(const char* str, GuWriter* wtr, GuExn* err);++extern inline size_t+gu_utf8_write(const uint8_t* src, size_t sz, GuWriter* wtr, GuExn* err);+
@@ -0,0 +1,64 @@+#ifndef GU_WRITE_H_+#define GU_WRITE_H_++#include <gu/exn.h>+#include <gu/ucs.h>+#include <gu/out.h>+#include <gu/utf8.h>++typedef struct GuWriter GuWriter;++struct GuWriter {+ GuOut out_;+};++size_t+gu_utf32_write(const GuUCS* buf, size_t size, GuWriter* wtr, GuExn* err);++inline void+gu_writer_flush(GuWriter* wtr, GuExn* err)+{+ gu_out_flush(&wtr->out_, err);+}++inline void+gu_ucs_write(GuUCS ucs, GuWriter* wtr, GuExn* err)+{+ gu_out_utf8(ucs, &wtr->out_, err);+}++inline void+gu_putc(char c, GuWriter* wtr, GuExn* err)+{+ GuUCS ucs = gu_char_ucs(c);+ gu_out_u8(&wtr->out_, (uint8_t) ucs, err);+}++inline void+gu_puts(const char* str, GuWriter* wtr, GuExn* err)+{+ gu_str_out_utf8(str, &wtr->out_, err);+}++inline size_t+gu_utf8_write(const uint8_t* src, size_t sz, GuWriter* wtr, GuExn* err)+{+ return gu_out_bytes(&wtr->out_, src, sz, err);+}++void+gu_vprintf(const char* fmt, va_list args, GuWriter* wtr, GuExn* err);++void+gu_printf(GuWriter* wtr, GuExn* err, const char* fmt, ...);++//GuWriter+//gu_init_utf8_writer(GuOut* utf8_out);++GuWriter*+gu_new_utf8_writer(GuOut* utf8_out, GuPool* pool);++GuWriter*+gu_make_locale_writer(GuOut* locale_out, GuPool* pool);++#endif // GU_WRITE_H_
@@ -0,0 +1,339 @@+#include <gu/yaml.h>+#include <gu/seq.h>+#include <gu/assert.h>+#include <gu/read.h>+#include <gu/ucs.h>+#include <stdio.h>+#include <stdarg.h>+#include <ctype.h>+++const GuYamlAnchor gu_yaml_null_anchor = 0;++typedef const struct GuYamlState GuYamlState;++struct GuYamlState {+ const char* prefix;+ const char* suffix;+ GuYamlState* next;+};++static const struct {+ GuYamlState document, first_key, key, value, first_elem, elem;+} gu_yaml_states = {+ .document = {+ .prefix = "---\n",+ .suffix = "\n...\n",+ .next = &gu_yaml_states.document,+ },+ .key = {+ .prefix = "? ",+ .next = &gu_yaml_states.value,+ },+ .value = {+ .prefix = ": ",+ .suffix = ",",+ .next = &gu_yaml_states.key,+ },+ .elem = {+ .suffix = ",",+ .next = &gu_yaml_states.elem,+ },+};++typedef const struct GuYamlFrameClass GuYamlFrameClass;++struct GuYamlFrameClass {+ const char* open;+ GuYamlState* first;+ const char* close;+};++static const struct {+ GuYamlFrameClass document, mapping, sequence;+} gu_yaml_frame_classes = {+ .mapping = {+ .open = "{",+ .first = &gu_yaml_states.key,+ .close = "}",+ },+ .sequence = {+ .open = "[",+ .first = &gu_yaml_states.elem,+ .close = "]",+ },+};++typedef struct GuYamlFrame GuYamlFrame;++struct GuYamlFrame {+ GuYamlFrameClass* klass;+ GuYamlState* next;+};++typedef GuBuf GuYamlStack;++struct GuYaml {+ GuWriter* wtr;+ GuExn* err;+ GuPool* pool;+ GuYamlState* state;+ bool in_node;+ bool have_anchor;+ bool have_tag; + int next_anchor;+ bool indent;+ int indent_level;+ bool indented;+ GuYamlStack* stack;+};+++GuYaml*+gu_new_yaml(GuWriter* wtr, GuExn* err, GuPool* pool)+{+ GuYaml* yaml = gu_new(GuYaml, pool);+ yaml->wtr = wtr;+ yaml->pool = pool;+ yaml->err = err;+ yaml->state = &gu_yaml_states.document;+ yaml->in_node = false;+ yaml->have_anchor = false;+ yaml->have_tag = false;+ yaml->next_anchor = 1;+ yaml->stack = gu_new_buf(GuYamlFrame, pool);+ yaml->indent = true;+ yaml->indent_level = 0;+ yaml->indented = false;+ return yaml;+}++static void+gu_yaml_printf(GuYaml* yaml, const char* fmt, ...)+{+ va_list args;+ va_start(args, fmt);+ gu_vprintf(fmt, args, yaml->wtr, yaml->err);+ va_end(args);+}++static void+gu_yaml_putc(GuYaml* yaml, char c)+{+ gu_putc(c, yaml->wtr, yaml->err);+}++static void+gu_yaml_puts(GuYaml* yaml, const char* str)+{+ gu_puts(str, yaml->wtr, yaml->err);+}++static void+gu_yaml_begin_line(GuYaml* yaml)+{+ if (yaml->indent && !yaml->indented) {+ for (int i = 0; i < yaml->indent_level; i++) {+ gu_yaml_putc(yaml, ' ');+ }+ yaml->indented = true;+ }+}++static void+gu_yaml_end_line(GuYaml* yaml)+{+ if (yaml->indent) {+ gu_yaml_putc(yaml, '\n');+ }+ yaml->indented = false;+}+++static void +gu_yaml_begin_node(GuYaml* yaml)+{+ gu_yaml_begin_line(yaml);+ if (!yaml->in_node) {+ if (yaml->state->prefix != NULL) {+ gu_yaml_puts(yaml, yaml->state->prefix);+ }+ yaml->in_node = true;+ }+}++static void+gu_yaml_end_node(GuYaml* yaml)+{+ gu_assert(yaml->in_node);+ if (yaml->state->suffix != NULL) {+ gu_yaml_puts(yaml, yaml->state->suffix);+ }+ gu_yaml_end_line(yaml);+ yaml->in_node = false;+ yaml->have_anchor = false;+ yaml->have_tag = false;+ if (yaml->state != NULL) {+ yaml->state = yaml->state->next;+ }+}++static void+gu_yaml_begin(GuYaml* yaml, GuYamlFrameClass* klass)+{+ gu_yaml_begin_node(yaml);+ gu_yaml_puts(yaml, klass->open);+ gu_buf_push(yaml->stack, GuYamlFrame,+ ((GuYamlFrame) { .klass = klass, .next = yaml->state}));+ yaml->state = klass->first;+ yaml->in_node = yaml->have_anchor = yaml->have_tag = false;+ gu_yaml_end_line(yaml);+ yaml->indent_level++;+}++void+gu_yaml_begin_mapping(GuYaml* yaml)+{+ gu_yaml_begin(yaml, &gu_yaml_frame_classes.mapping);+}++void+gu_yaml_begin_sequence(GuYaml* yaml)+{+ gu_yaml_begin(yaml, &gu_yaml_frame_classes.sequence);+}++void +gu_yaml_end(GuYaml* yaml)+{+ gu_assert(!yaml->in_node);+ yaml->indent_level--;+ gu_yaml_begin_line(yaml);+ GuYamlFrame f = gu_buf_pop(yaml->stack, GuYamlFrame);+ gu_yaml_puts(yaml, f.klass->close);+ yaml->state = f.next;+ yaml->in_node = true;+ gu_yaml_end_node(yaml);+}+++void +gu_yaml_scalar(GuYaml* yaml, GuString s)+{+ gu_yaml_begin_node(yaml);+ gu_yaml_putc(yaml, '"');+ GuPool* tmp_pool = gu_local_pool();+ GuReader* rdr = gu_string_reader(s, tmp_pool);+ GuExn* err = gu_exn(yaml->err, GuEOF, NULL);+ + static const char esc[0x20] = {+ [0x00] = '0',+ [0x07] = 'a', 'b', 't', 'n', 'v', 'f', 'r',+ [0x1b] = 'e'+ };++ while (true) {+ GuUCS u = gu_read_ucs(rdr, err);+ if (!gu_ok(err)) {+ break;+ }+ if (GU_LIKELY(u >= 0x20 && u < 0x7f)) {+ if (GU_UNLIKELY(u == 0x22 || u == 0x5c)) {+ gu_yaml_putc(yaml, '\\');+ }+ gu_ucs_write(u, yaml->wtr, yaml->err);+ } else if (GU_UNLIKELY(u < 0x20 && esc[u])) {+ gu_yaml_printf(yaml, "\\%c", esc[u]);+ } else if (GU_UNLIKELY(u <= 0x9f)) {+ gu_yaml_printf(yaml, "\\x%02x", (unsigned) u);+ } else if (GU_UNLIKELY((u >= 0xd800 && u <= 0xdfff) ||+ (u >= 0xfffe && u <= 0xffff))) {+ gu_yaml_printf(yaml, "\\u%04x", (unsigned) u);+ } else {+ gu_ucs_write(u, yaml->wtr, yaml->err);+ }+ }+ gu_pool_free(tmp_pool);+ gu_yaml_putc(yaml, '"');+ gu_yaml_end_node(yaml);+}++static void +gu_yaml_tag(GuYaml* yaml, const char* format, ...)+{+ gu_yaml_begin_node(yaml);+ gu_assert(!yaml->have_tag);+ gu_yaml_putc(yaml, '!');+ va_list args;+ va_start(args, format);+ gu_vprintf(format, args, yaml->wtr, yaml->err);+ va_end(args);+ gu_yaml_putc(yaml, ' ');+ yaml->have_tag = true;+}++void +gu_yaml_tag_primary(GuYaml* yaml, const char* tag) +{+ // TODO: check tag validity+ gu_yaml_tag(yaml, "%s", tag);+}++void+gu_yaml_tag_secondary(GuYaml* yaml, const char* tag)+{+ // TODO: check tag validity+ gu_yaml_tag(yaml, "!%s", tag);+}++void+gu_yaml_tag_named(GuYaml* yaml, const char* handle, const char* tag)+{+ // TODO: check tag validity+ gu_yaml_tag(yaml, "%s!%s", handle, tag);+}++void+gu_yaml_tag_verbatim(GuYaml* yaml, const char* uri)+{+ // XXX: uri escaping?+ gu_yaml_tag(yaml, "<%s>", uri);+}++void+gu_yaml_tag_non_specific(GuYaml* yaml)+{+ gu_yaml_tag(yaml, "");+}++GuYamlAnchor+gu_yaml_anchor(GuYaml* yaml)+{+ gu_yaml_begin_node(yaml);+ gu_assert(!yaml->have_anchor);+ yaml->have_anchor = true;+ int anchor = yaml->next_anchor++;+ gu_yaml_printf(yaml, "&%d ", anchor);+ return anchor;+}++void+gu_yaml_alias(GuYaml* yaml, GuYamlAnchor anchor)+{+ gu_yaml_begin_node(yaml);+ gu_assert(!yaml->have_anchor && !yaml->have_tag);+ gu_yaml_printf(yaml, "*%d ", anchor);+ gu_yaml_end_node(yaml);+ return;+}++void gu_yaml_comment(GuYaml* yaml, GuString s)+{+ gu_yaml_begin_line(yaml);+ gu_yaml_puts(yaml, "# ");+ // TODO: verify no newlines in comment+ gu_string_write(s, yaml->wtr, yaml->err);+ gu_yaml_puts(yaml, "\n");+ yaml->indented = false;+}+
@@ -0,0 +1,38 @@+#ifndef GU_YAML_H_+#define GU_YAML_H_++#include <gu/mem.h>+#include <gu/write.h>+#include <gu/string.h>++typedef struct GuYaml GuYaml;++typedef int GuYamlAnchor;++extern const GuYamlAnchor gu_yaml_null_anchor;++GuYaml* gu_new_yaml(GuWriter* wtr, GuExn* err, GuPool* pool);++GuYamlAnchor gu_yaml_anchor(GuYaml* yaml);++void gu_yaml_tag_primary(GuYaml* yaml, const char* tag);+void gu_yaml_tag_secondary(GuYaml* yaml, const char* tag);+void gu_yaml_tag_named(GuYaml* yaml, const char* handle, const char* tag);+void gu_yaml_tag_verbatim(GuYaml* yaml, const char* uri);+void gu_yaml_tag_non_specific(GuYaml* yaml);+void gu_yaml_comment(GuYaml* yaml, GuString comment);+++void gu_yaml_scalar(GuYaml* yaml, GuString scalar);++void gu_yaml_alias(GuYaml* yaml, GuYamlAnchor anchor);++void gu_yaml_begin_document(GuYaml* yaml);++void gu_yaml_begin_sequence(GuYaml* yaml);++void gu_yaml_begin_mapping(GuYaml* yaml);++void gu_yaml_end(GuYaml* yaml);++#endif // GU_YAML_H_
@@ -0,0 +1,2 @@+/* Define to 1 if character literals use ASCII encoding */+#undef GU_CHAR_ASCII
@@ -0,0 +1,10 @@+prefix=@prefix@+exec_prefix=@exec_prefix@+libdir=@libdir@+includedir=@includedir@++Name: libgu+Description: G(F|lib|othenburg) Utilities library+Version: @VERSION@+Libs: -L${libdir} -lgu +Cflags: -I${includedir} -I${libdir}/libgu/include
@@ -0,0 +1,11 @@+prefix=@prefix@+exec_prefix=@exec_prefix@+libdir=@libdir@+includedir=@includedir@++Name: libpgf+Description: Portable Grammar Format library+Requires: libgu+Version: @VERSION@+Libs: -L${libdir} -lpgf+Cflags: -I${includedir}
@@ -0,0 +1,533 @@+# ===========================================================================+# http://www.gnu.org/software/autoconf-archive/ax_prog_doxygen.html+# ===========================================================================+#+# SYNOPSIS+#+# DX_INIT_DOXYGEN(PROJECT-NAME, DOXYFILE-PATH, [OUTPUT-DIR])+# DX_DOXYGEN_FEATURE(ON|OFF)+# DX_DOT_FEATURE(ON|OFF)+# DX_HTML_FEATURE(ON|OFF)+# DX_CHM_FEATURE(ON|OFF)+# DX_CHI_FEATURE(ON|OFF)+# DX_MAN_FEATURE(ON|OFF)+# DX_RTF_FEATURE(ON|OFF)+# DX_XML_FEATURE(ON|OFF)+# DX_PDF_FEATURE(ON|OFF)+# DX_PS_FEATURE(ON|OFF)+#+# DESCRIPTION+#+# The DX_*_FEATURE macros control the default setting for the given+# Doxygen feature. Supported features are 'DOXYGEN' itself, 'DOT' for+# generating graphics, 'HTML' for plain HTML, 'CHM' for compressed HTML+# help (for MS users), 'CHI' for generating a seperate .chi file by the+# .chm file, and 'MAN', 'RTF', 'XML', 'PDF' and 'PS' for the appropriate+# output formats. The environment variable DOXYGEN_PAPER_SIZE may be+# specified to override the default 'a4wide' paper size.+#+# By default, HTML, PDF and PS documentation is generated as this seems to+# be the most popular and portable combination. MAN pages created by+# Doxygen are usually problematic, though by picking an appropriate subset+# and doing some massaging they might be better than nothing. CHM and RTF+# are specific for MS (note that you can't generate both HTML and CHM at+# the same time). The XML is rather useless unless you apply specialized+# post-processing to it.+#+# The macros mainly control the default state of the feature. The use can+# override the default by specifying --enable or --disable. The macros+# ensure that contradictory flags are not given (e.g.,+# --enable-doxygen-html and --enable-doxygen-chm,+# --enable-doxygen-anything with --disable-doxygen, etc.) Finally, each+# feature will be automatically disabled (with a warning) if the required+# programs are missing.+#+# Once all the feature defaults have been specified, call DX_INIT_DOXYGEN+# with the following parameters: a one-word name for the project for use+# as a filename base etc., an optional configuration file name (the+# default is 'Doxyfile', the same as Doxygen's default), and an optional+# output directory name (the default is 'doxygen-doc').+#+# Automake Support+#+# The following is a template aminclude.am file for use with Automake.+# Make targets and variables values are controlled by the various+# DX_COND_* conditionals set by autoconf.+#+# The provided targets are:+#+# doxygen-doc: Generate all doxygen documentation.+#+# doxygen-run: Run doxygen, which will generate some of the+# documentation (HTML, CHM, CHI, MAN, RTF, XML)+# but will not do the post processing required+# for the rest of it (PS, PDF, and some MAN).+#+# doxygen-man: Rename some doxygen generated man pages.+#+# doxygen-ps: Generate doxygen PostScript documentation.+#+# doxygen-pdf: Generate doxygen PDF documentation.+#+# Note that by default these are not integrated into the automake targets.+# If doxygen is used to generate man pages, you can achieve this+# integration by setting man3_MANS to the list of man pages generated and+# then adding the dependency:+#+# $(man3_MANS): doxygen-doc+#+# This will cause make to run doxygen and generate all the documentation.+#+# The following variable is intended for use in Makefile.am:+#+# DX_CLEANFILES = everything to clean.+#+# Then add this variable to MOSTLYCLEANFILES.+#+# ----- begin aminclude.am -------------------------------------+#+# ## --------------------------------- ##+# ## Format-independent Doxygen rules. ##+# ## --------------------------------- ##+#+# if DX_COND_doc+#+# ## ------------------------------- ##+# ## Rules specific for HTML output. ##+# ## ------------------------------- ##+#+# if DX_COND_html+#+# DX_CLEAN_HTML = @DX_DOCDIR@/html+#+# endif DX_COND_html+#+# ## ------------------------------ ##+# ## Rules specific for CHM output. ##+# ## ------------------------------ ##+#+# if DX_COND_chm+#+# DX_CLEAN_CHM = @DX_DOCDIR@/chm+#+# if DX_COND_chi+#+# DX_CLEAN_CHI = @DX_DOCDIR@/@PACKAGE@.chi+#+# endif DX_COND_chi+#+# endif DX_COND_chm+#+# ## ------------------------------ ##+# ## Rules specific for MAN output. ##+# ## ------------------------------ ##+#+# if DX_COND_man+#+# DX_CLEAN_MAN = @DX_DOCDIR@/man+#+# endif DX_COND_man+#+# ## ------------------------------ ##+# ## Rules specific for RTF output. ##+# ## ------------------------------ ##+#+# if DX_COND_rtf+#+# DX_CLEAN_RTF = @DX_DOCDIR@/rtf+#+# endif DX_COND_rtf+#+# ## ------------------------------ ##+# ## Rules specific for XML output. ##+# ## ------------------------------ ##+#+# if DX_COND_xml+#+# DX_CLEAN_XML = @DX_DOCDIR@/xml+#+# endif DX_COND_xml+#+# ## ----------------------------- ##+# ## Rules specific for PS output. ##+# ## ----------------------------- ##+#+# if DX_COND_ps+#+# DX_CLEAN_PS = @DX_DOCDIR@/@PACKAGE@.ps+#+# DX_PS_GOAL = doxygen-ps+#+# doxygen-ps: @DX_DOCDIR@/@PACKAGE@.ps+#+# @DX_DOCDIR@/@PACKAGE@.ps: @DX_DOCDIR@/@PACKAGE@.tag+# cd @DX_DOCDIR@/latex; \+# rm -f *.aux *.toc *.idx *.ind *.ilg *.log *.out; \+# $(DX_LATEX) refman.tex; \+# $(MAKEINDEX_PATH) refman.idx; \+# $(DX_LATEX) refman.tex; \+# countdown=5; \+# while $(DX_EGREP) 'Rerun (LaTeX|to get cross-references right)' \+# refman.log > /dev/null 2>&1 \+# && test $$countdown -gt 0; do \+# $(DX_LATEX) refman.tex; \+# countdown=`expr $$countdown - 1`; \+# done; \+# $(DX_DVIPS) -o ../@PACKAGE@.ps refman.dvi+#+# endif DX_COND_ps+#+# ## ------------------------------ ##+# ## Rules specific for PDF output. ##+# ## ------------------------------ ##+#+# if DX_COND_pdf+#+# DX_CLEAN_PDF = @DX_DOCDIR@/@PACKAGE@.pdf+#+# DX_PDF_GOAL = doxygen-pdf+#+# doxygen-pdf: @DX_DOCDIR@/@PACKAGE@.pdf+#+# @DX_DOCDIR@/@PACKAGE@.pdf: @DX_DOCDIR@/@PACKAGE@.tag+# cd @DX_DOCDIR@/latex; \+# rm -f *.aux *.toc *.idx *.ind *.ilg *.log *.out; \+# $(DX_PDFLATEX) refman.tex; \+# $(DX_MAKEINDEX) refman.idx; \+# $(DX_PDFLATEX) refman.tex; \+# countdown=5; \+# while $(DX_EGREP) 'Rerun (LaTeX|to get cross-references right)' \+# refman.log > /dev/null 2>&1 \+# && test $$countdown -gt 0; do \+# $(DX_PDFLATEX) refman.tex; \+# countdown=`expr $$countdown - 1`; \+# done; \+# mv refman.pdf ../@PACKAGE@.pdf+#+# endif DX_COND_pdf+#+# ## ------------------------------------------------- ##+# ## Rules specific for LaTeX (shared for PS and PDF). ##+# ## ------------------------------------------------- ##+#+# if DX_COND_latex+#+# DX_CLEAN_LATEX = @DX_DOCDIR@/latex+#+# endif DX_COND_latex+#+# .PHONY: doxygen-run doxygen-doc $(DX_PS_GOAL) $(DX_PDF_GOAL)+#+# .INTERMEDIATE: doxygen-run $(DX_PS_GOAL) $(DX_PDF_GOAL)+#+# doxygen-run: @DX_DOCDIR@/@PACKAGE@.tag+#+# doxygen-doc: doxygen-run $(DX_PS_GOAL) $(DX_PDF_GOAL)+#+# @DX_DOCDIR@/@PACKAGE@.tag: $(DX_CONFIG) $(pkginclude_HEADERS)+# rm -rf @DX_DOCDIR@+# $(DX_ENV) $(DX_DOXYGEN) $(srcdir)/$(DX_CONFIG)+#+# DX_CLEANFILES = \+# @DX_DOCDIR@/@PACKAGE@.tag \+# -r \+# $(DX_CLEAN_HTML) \+# $(DX_CLEAN_CHM) \+# $(DX_CLEAN_CHI) \+# $(DX_CLEAN_MAN) \+# $(DX_CLEAN_RTF) \+# $(DX_CLEAN_XML) \+# $(DX_CLEAN_PS) \+# $(DX_CLEAN_PDF) \+# $(DX_CLEAN_LATEX)+#+# endif DX_COND_doc+#+# ----- end aminclude.am ---------------------------------------+#+# LICENSE+#+# Copyright (c) 2009 Oren Ben-Kiki <oren@ben-kiki.org>+#+# Copying and distribution of this file, with or without modification, are+# permitted in any medium without royalty provided the copyright notice+# and this notice are preserved. This file is offered as-is, without any+# warranty.++#serial 10++## ----------##+## Defaults. ##+## ----------##++DX_ENV=""+AC_DEFUN([DX_FEATURE_doc], ON)+AC_DEFUN([DX_FEATURE_dot], ON)+AC_DEFUN([DX_FEATURE_man], OFF)+AC_DEFUN([DX_FEATURE_html], ON)+AC_DEFUN([DX_FEATURE_chm], OFF)+AC_DEFUN([DX_FEATURE_chi], OFF)+AC_DEFUN([DX_FEATURE_rtf], OFF)+AC_DEFUN([DX_FEATURE_xml], OFF)+AC_DEFUN([DX_FEATURE_pdf], ON)+AC_DEFUN([DX_FEATURE_ps], ON)++## --------------- ##+## Private macros. ##+## --------------- ##++# DX_ENV_APPEND(VARIABLE, VALUE)+# ------------------------------+# Append VARIABLE="VALUE" to DX_ENV for invoking doxygen.+AC_DEFUN([DX_ENV_APPEND], [AC_SUBST([DX_ENV], ["$DX_ENV $1='$2'"])])++# DX_DIRNAME_EXPR+# ---------------+# Expand into a shell expression prints the directory part of a path.+AC_DEFUN([DX_DIRNAME_EXPR],+ [[expr ".$1" : '\(\.\)[^/]*$' \| "x$1" : 'x\(.*\)/[^/]*$']])++# DX_IF_FEATURE(FEATURE, IF-ON, IF-OFF)+# -------------------------------------+# Expands according to the M4 (static) status of the feature.+AC_DEFUN([DX_IF_FEATURE], [ifelse(DX_FEATURE_$1, ON, [$2], [$3])])++# DX_REQUIRE_PROG(VARIABLE, PROGRAM)+# ----------------------------------+# Require the specified program to be found for the DX_CURRENT_FEATURE to work.+AC_DEFUN([DX_REQUIRE_PROG], [+AC_PATH_TOOL([$1], [$2])+if test "$DX_FLAG_[]DX_CURRENT_FEATURE$$1" = 1; then+ AC_MSG_WARN([$2 not found - will not DX_CURRENT_DESCRIPTION])+ AC_SUBST(DX_FLAG_[]DX_CURRENT_FEATURE, 0)+fi+])++# DX_TEST_FEATURE(FEATURE)+# ------------------------+# Expand to a shell expression testing whether the feature is active.+AC_DEFUN([DX_TEST_FEATURE], [test "$DX_FLAG_$1" = 1])++# DX_CHECK_DEPEND(REQUIRED_FEATURE, REQUIRED_STATE)+# -------------------------------------------------+# Verify that a required features has the right state before trying to turn on+# the DX_CURRENT_FEATURE.+AC_DEFUN([DX_CHECK_DEPEND], [+test "$DX_FLAG_$1" = "$2" \+|| AC_MSG_ERROR([doxygen-DX_CURRENT_FEATURE ifelse([$2], 1,+ requires, contradicts) doxygen-DX_CURRENT_FEATURE])+])++# DX_CLEAR_DEPEND(FEATURE, REQUIRED_FEATURE, REQUIRED_STATE)+# ----------------------------------------------------------+# Turn off the DX_CURRENT_FEATURE if the required feature is off.+AC_DEFUN([DX_CLEAR_DEPEND], [+test "$DX_FLAG_$1" = "$2" || AC_SUBST(DX_FLAG_[]DX_CURRENT_FEATURE, 0)+])++# DX_FEATURE_ARG(FEATURE, DESCRIPTION,+# CHECK_DEPEND, CLEAR_DEPEND,+# REQUIRE, DO-IF-ON, DO-IF-OFF)+# --------------------------------------------+# Parse the command-line option controlling a feature. CHECK_DEPEND is called+# if the user explicitly turns the feature on (and invokes DX_CHECK_DEPEND),+# otherwise CLEAR_DEPEND is called to turn off the default state if a required+# feature is disabled (using DX_CLEAR_DEPEND). REQUIRE performs additional+# requirement tests (DX_REQUIRE_PROG). Finally, an automake flag is set and+# DO-IF-ON or DO-IF-OFF are called according to the final state of the feature.+AC_DEFUN([DX_ARG_ABLE], [+ AC_DEFUN([DX_CURRENT_FEATURE], [$1])+ AC_DEFUN([DX_CURRENT_DESCRIPTION], [$2])+ AC_ARG_ENABLE(doxygen-$1,+ [AS_HELP_STRING(DX_IF_FEATURE([$1], [--disable-doxygen-$1],+ [--enable-doxygen-$1]),+ DX_IF_FEATURE([$1], [don't $2], [$2]))],+ [+case "$enableval" in+#(+y|Y|yes|Yes|YES)+ AC_SUBST([DX_FLAG_$1], 1)+ $3+;; #(+n|N|no|No|NO)+ AC_SUBST([DX_FLAG_$1], 0)+;; #(+*)+ AC_MSG_ERROR([invalid value '$enableval' given to doxygen-$1])+;;+esac+], [+AC_SUBST([DX_FLAG_$1], [DX_IF_FEATURE([$1], 1, 0)])+$4+])+if DX_TEST_FEATURE([$1]); then+ $5+ :+fi+if DX_TEST_FEATURE([$1]); then+ AM_CONDITIONAL(DX_COND_$1, :)+ $6+ :+else+ AM_CONDITIONAL(DX_COND_$1, false)+ $7+ :+fi+])++## -------------- ##+## Public macros. ##+## -------------- ##++# DX_XXX_FEATURE(DEFAULT_STATE)+# -----------------------------+AC_DEFUN([DX_DOXYGEN_FEATURE], [AC_DEFUN([DX_FEATURE_doc], [$1])])+AC_DEFUN([DX_MAN_FEATURE], [AC_DEFUN([DX_FEATURE_man], [$1])])+AC_DEFUN([DX_HTML_FEATURE], [AC_DEFUN([DX_FEATURE_html], [$1])])+AC_DEFUN([DX_CHM_FEATURE], [AC_DEFUN([DX_FEATURE_chm], [$1])])+AC_DEFUN([DX_CHI_FEATURE], [AC_DEFUN([DX_FEATURE_chi], [$1])])+AC_DEFUN([DX_RTF_FEATURE], [AC_DEFUN([DX_FEATURE_rtf], [$1])])+AC_DEFUN([DX_XML_FEATURE], [AC_DEFUN([DX_FEATURE_xml], [$1])])+AC_DEFUN([DX_XML_FEATURE], [AC_DEFUN([DX_FEATURE_xml], [$1])])+AC_DEFUN([DX_PDF_FEATURE], [AC_DEFUN([DX_FEATURE_pdf], [$1])])+AC_DEFUN([DX_PS_FEATURE], [AC_DEFUN([DX_FEATURE_ps], [$1])])++# DX_INIT_DOXYGEN(PROJECT, [CONFIG-FILE], [OUTPUT-DOC-DIR])+# ---------------------------------------------------------+# PROJECT also serves as the base name for the documentation files.+# The default CONFIG-FILE is "Doxyfile" and OUTPUT-DOC-DIR is "doxygen-doc".+AC_DEFUN([DX_INIT_DOXYGEN], [++# Files:+AC_SUBST([DX_PROJECT], [$1])+AC_SUBST([DX_CONFIG], [ifelse([$2], [], Doxyfile, [$2])])+AC_SUBST([DX_DOCDIR], [ifelse([$3], [], doxygen-doc, [$3])])++# Environment variables used inside doxygen.cfg:+DX_ENV_APPEND(SRCDIR, $srcdir)+DX_ENV_APPEND(PROJECT, $DX_PROJECT)+DX_ENV_APPEND(DOCDIR, $DX_DOCDIR)+DX_ENV_APPEND(VERSION, $PACKAGE_VERSION)++# Doxygen itself:+DX_ARG_ABLE(doc, [generate any doxygen documentation],+ [],+ [],+ [DX_REQUIRE_PROG([DX_DOXYGEN], doxygen)+ DX_REQUIRE_PROG([DX_PERL], perl)],+ [DX_ENV_APPEND(PERL_PATH, $DX_PERL)])++# Dot for graphics:+DX_ARG_ABLE(dot, [generate graphics for doxygen documentation],+ [DX_CHECK_DEPEND(doc, 1)],+ [DX_CLEAR_DEPEND(doc, 1)],+ [DX_REQUIRE_PROG([DX_DOT], dot)],+ [DX_ENV_APPEND(HAVE_DOT, YES)+ DX_ENV_APPEND(DOT_PATH, [`DX_DIRNAME_EXPR($DX_DOT)`])],+ [DX_ENV_APPEND(HAVE_DOT, NO)])++# Man pages generation:+DX_ARG_ABLE(man, [generate doxygen manual pages],+ [DX_CHECK_DEPEND(doc, 1)],+ [DX_CLEAR_DEPEND(doc, 1)],+ [],+ [DX_ENV_APPEND(GENERATE_MAN, YES)],+ [DX_ENV_APPEND(GENERATE_MAN, NO)])++# RTF file generation:+DX_ARG_ABLE(rtf, [generate doxygen RTF documentation],+ [DX_CHECK_DEPEND(doc, 1)],+ [DX_CLEAR_DEPEND(doc, 1)],+ [],+ [DX_ENV_APPEND(GENERATE_RTF, YES)],+ [DX_ENV_APPEND(GENERATE_RTF, NO)])++# XML file generation:+DX_ARG_ABLE(xml, [generate doxygen XML documentation],+ [DX_CHECK_DEPEND(doc, 1)],+ [DX_CLEAR_DEPEND(doc, 1)],+ [],+ [DX_ENV_APPEND(GENERATE_XML, YES)],+ [DX_ENV_APPEND(GENERATE_XML, NO)])++# (Compressed) HTML help generation:+DX_ARG_ABLE(chm, [generate doxygen compressed HTML help documentation],+ [DX_CHECK_DEPEND(doc, 1)],+ [DX_CLEAR_DEPEND(doc, 1)],+ [DX_REQUIRE_PROG([DX_HHC], hhc)],+ [DX_ENV_APPEND(HHC_PATH, $DX_HHC)+ DX_ENV_APPEND(GENERATE_HTML, YES)+ DX_ENV_APPEND(GENERATE_HTMLHELP, YES)],+ [DX_ENV_APPEND(GENERATE_HTMLHELP, NO)])++# Seperate CHI file generation.+DX_ARG_ABLE(chi, [generate doxygen seperate compressed HTML help index file],+ [DX_CHECK_DEPEND(chm, 1)],+ [DX_CLEAR_DEPEND(chm, 1)],+ [],+ [DX_ENV_APPEND(GENERATE_CHI, YES)],+ [DX_ENV_APPEND(GENERATE_CHI, NO)])++# Plain HTML pages generation:+DX_ARG_ABLE(html, [generate doxygen plain HTML documentation],+ [DX_CHECK_DEPEND(doc, 1) DX_CHECK_DEPEND(chm, 0)],+ [DX_CLEAR_DEPEND(doc, 1) DX_CLEAR_DEPEND(chm, 0)],+ [],+ [DX_ENV_APPEND(GENERATE_HTML, YES)],+ [DX_TEST_FEATURE(chm) || DX_ENV_APPEND(GENERATE_HTML, NO)])++# PostScript file generation:+DX_ARG_ABLE(ps, [generate doxygen PostScript documentation],+ [DX_CHECK_DEPEND(doc, 1)],+ [DX_CLEAR_DEPEND(doc, 1)],+ [DX_REQUIRE_PROG([DX_LATEX], latex)+ DX_REQUIRE_PROG([DX_MAKEINDEX], makeindex)+ DX_REQUIRE_PROG([DX_DVIPS], dvips)+ DX_REQUIRE_PROG([DX_EGREP], egrep)])++# PDF file generation:+DX_ARG_ABLE(pdf, [generate doxygen PDF documentation],+ [DX_CHECK_DEPEND(doc, 1)],+ [DX_CLEAR_DEPEND(doc, 1)],+ [DX_REQUIRE_PROG([DX_PDFLATEX], pdflatex)+ DX_REQUIRE_PROG([DX_MAKEINDEX], makeindex)+ DX_REQUIRE_PROG([DX_EGREP], egrep)])++# LaTeX generation for PS and/or PDF:+if DX_TEST_FEATURE(ps) || DX_TEST_FEATURE(pdf); then+ AM_CONDITIONAL(DX_COND_latex, :)+ DX_ENV_APPEND(GENERATE_LATEX, YES)+else+ AM_CONDITIONAL(DX_COND_latex, false)+ DX_ENV_APPEND(GENERATE_LATEX, NO)+fi++# Paper size for PS and/or PDF:+AC_ARG_VAR(DOXYGEN_PAPER_SIZE,+ [a4wide (default), a4, letter, legal or executive])+case "$DOXYGEN_PAPER_SIZE" in+#(+"")+ AC_SUBST(DOXYGEN_PAPER_SIZE, "")+;; #(+a4wide|a4|letter|legal|executive)+ DX_ENV_APPEND(PAPER_SIZE, $DOXYGEN_PAPER_SIZE)+;; #(+*)+ AC_MSG_ERROR([unknown DOXYGEN_PAPER_SIZE='$DOXYGEN_PAPER_SIZE'])+;;+esac++#For debugging:+#echo DX_FLAG_doc=$DX_FLAG_doc+#echo DX_FLAG_dot=$DX_FLAG_dot+#echo DX_FLAG_man=$DX_FLAG_man+#echo DX_FLAG_html=$DX_FLAG_html+#echo DX_FLAG_chm=$DX_FLAG_chm+#echo DX_FLAG_chi=$DX_FLAG_chi+#echo DX_FLAG_rtf=$DX_FLAG_rtf+#echo DX_FLAG_xml=$DX_FLAG_xml+#echo DX_FLAG_pdf=$DX_FLAG_pdf+#echo DX_FLAG_ps=$DX_FLAG_ps+#echo DX_ENV=$DX_ENV+])
@@ -0,0 +1,89 @@+# AC_C_ALIGNOF+# ------------+# Check whether the C compiler supports the alignof(type) operator+AC_DEFUN([AC_C_ALIGNOF],+[+ AC_CACHE_CHECK([for alignof],ac_cv_c_alignof,+ [ac_cv_c_alignof=no+ for ac_kw in alignof __alignof __alignof__; do+ AC_COMPILE_IFELSE(+ [AC_LANG_PROGRAM([], [int align = $ac_kw (int);])],+ [ac_cv_c_alignof=$ac_kw; break])+ done])+ if test $ac_cv_c_alignof != no; then+ AC_DEFINE([HAVE_ALIGNOF], 1,+ [Define to 1 if alignof works on your compiler])+ if test $ac_cv_c_alignof != alignof; then+ AC_DEFINE_UNQUOTED([alignof], [$ac_cv_c_alignof],+ [Define to the name of the alignof operator.])+ fi+ fi+])++# AC_C_FAM_IN_MEM+# ---------------+# Check whether the C compiler supports a flexible array member+# in a struct that is the (last) member of a struct+AC_DEFUN([AC_C_FAM_IN_MEM],+[+ AC_CACHE_CHECK([for flexible array members in struct members],+ ac_cv_c_fam_in_mem,+ [AC_COMPILE_IFELSE(+ [AC_LANG_PROGRAM([+ struct { struct { char foo[]; } bar; } baz;+ ])], + [ac_cv_c_fam_in_mem=yes],+ [ac_cv_c_fam_in_mem=no])])+ if test $ac_cv_c_fam_in_mem = yes; then+ AC_DEFINE([CAN_HAVE_FAM_IN_MEMBER], 1,+ [Define to 1 if a struct with flexible array members can be + the last member of another struct.])+ fi+])+++## AC_C_STATEMENT_EXPRESSIONS+AC_DEFUN([AC_C_STATEMENT_EXPRESSIONS],+[+ AC_CACHE_CHECK([for statement expressions],+ ac_cv_c_statement_expressions,+ [AC_COMPILE_IFELSE(+ [AC_LANG_PROGRAM([], [int x = ({ int a = 42; a = a + 1; a; })])],+ [ac_cv_c_statement_expressions=yes],+ [ac_cv_c_statement_expressions=no])])+ if test $ac_cv_c_statement_expressions = yes; then+ AC_DEFINE([HAVE_STATEMENT_EXPRESSIONS], 1,+ [Define to 1 if statement expressions are supported.])+ fi+])++## AC_C_ASCII+AC_DEFUN([AC_C_ASCII],+[+ AC_CACHE_CHECK([whether the execution character set uses ASCII],+ ac_cv_c_ascii,+ [AC_RUN_IFELSE(+ [AC_LANG_PROGRAM([], [[++int i;+static const char ascii[128] =+ "\0\0\0\0\0\0\0\a\b\t\n\v\f\r\0\0"+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"+ " !\"#\0%&'()*+,-./0123456789:;<=>?"+ "\0ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\\\]^_"+ "\0abcdefghijklmnopqrstuvwxyz{|}~\0";++for (i = 0; i < 128; i++) {+ if (ascii[i] && ascii[i] != (char) i) {+ return 1;+ }+}++]])],+ [ac_cv_c_ascii=yes],+ [ac_cv_c_ascii=no])])+ if test $ac_cv_c_ascii = yes; then+ AC_DEFINE([CHAR_ASCII], 1,+ [Define to 1 if the encoding of the basic character set is ASCII.])+ fi+])
@@ -1,14 +0,0 @@-#ifndef PGF_H-#define PGF_H--typedef struct _CId *CId;-typedef struct _String *String;-typedef struct _Literal *Literal ;-typedef struct _Type *Type ;-typedef struct _Expr *Expr ;-typedef struct _PGF *PGF ;--PGF readPGF(char *filename);-void freePGF(PGF pgf);--#endif
@@ -0,0 +1,256 @@+#include "data.h"+#include "expr.h"+#include <gu/type.h>+#include <gu/variant.h>+#include <gu/assert.h>++PgfCCat pgf_ccat_string = { NULL, NULL, 0, GU_NULL_SEQ, -1 };+PgfCCat pgf_ccat_int = { NULL, NULL, 0, GU_NULL_SEQ, -2 };+PgfCCat pgf_ccat_float = { NULL, NULL, 0, GU_NULL_SEQ, -3 };+PgfCCat pgf_ccat_var = { NULL, NULL, 0, GU_NULL_SEQ, -4 };++PgfCCatId+pgf_literal_cat(PgfLiteral lit)+{+ switch (gu_variant_tag(lit)) {+ case PGF_LITERAL_STR:+ return &pgf_ccat_string;+ case PGF_LITERAL_INT:+ return &pgf_ccat_int;+ case PGF_LITERAL_FLT:+ return &pgf_ccat_float;+ default:+ gu_impossible();+ return NULL;+ }+}++bool +pgf_tokens_equal(PgfTokens t1, PgfTokens t2)+{+ size_t len1 = gu_seq_length(t1);+ size_t len2 = gu_seq_length(t2);+ if (len1 != len2) {+ return false;+ }+ for (size_t i = 0; i < len1; i++) {+ GuString s1 = gu_seq_get(t1, PgfToken, i);+ GuString s2 = gu_seq_get(t2, PgfToken, i);+ if (!gu_string_eq(s1, s2)) {+ return false;+ }+ }+ return true;+}++++GU_DEFINE_TYPE(PgfTokens, GuSeq, gu_type(GuString));++GU_DEFINE_TYPE(PgfCId, typedef, gu_type(GuString));++GU_DEFINE_TYPE(GuStringL, GuList, gu_type(GuString));+++#define gu_type__PgfCIdMap gu_type__GuStringMap+typedef GuType_GuStringMap GuType_PgfCIdMap;+#define GU_TYPE_INIT_PgfCIdMap GU_TYPE_INIT_GuStringMap++GU_DEFINE_TYPE(PgfCCat, struct,+ GU_MEMBER_S(PgfCCat, cnccat, PgfCncCat),+ GU_MEMBER_P(PgfCCat, lindefs, PgfFunIds),+ GU_MEMBER(PgfCCat, prods, PgfProductionSeq));++GU_DEFINE_TYPE(PgfCCatId, shared, gu_type(PgfCCat));++GU_DEFINE_TYPE(PgfCCatIds, GuList, gu_type(PgfCCatId));++GU_DEFINE_TYPE(PgfCCatSeq, GuSeq, gu_type(PgfCCatId));++GU_DEFINE_TYPE(PgfAlternative, struct,+ GU_MEMBER(PgfAlternative, form, PgfTokens),+ GU_MEMBER_P(PgfAlternative, prefixes, GuStringL));+++GU_DEFINE_TYPE(+ PgfSymbol, GuVariant,+ GU_CONSTRUCTOR_S(+ PGF_SYMBOL_CAT, PgfSymbolCat,+ GU_MEMBER(PgfSymbolCat, d, int),+ GU_MEMBER(PgfSymbolCat, r, int)),+ GU_CONSTRUCTOR_S(+ PGF_SYMBOL_LIT, PgfSymbolLit,+ GU_MEMBER(PgfSymbolLit, d, int),+ GU_MEMBER(PgfSymbolLit, r, int)),+ GU_CONSTRUCTOR_S(+ PGF_SYMBOL_VAR, PgfSymbolVar,+ GU_MEMBER(PgfSymbolVar, d, int),+ GU_MEMBER(PgfSymbolVar, r, int)),+ GU_CONSTRUCTOR_S(+ PGF_SYMBOL_KS, PgfSymbolKS,+ GU_MEMBER(PgfSymbolKS, tokens, PgfTokens)),+ GU_CONSTRUCTOR_S(+ PGF_SYMBOL_KP, PgfSymbolKP,+ GU_MEMBER(PgfSymbolKP, default_form, PgfTokens),+ GU_MEMBER(PgfSymbolKP, n_forms, GuLength),+ GU_FLEX_MEMBER(PgfSymbolKP, forms, PgfAlternative)));++GU_DEFINE_TYPE(+ PgfCncCat, struct,+ GU_MEMBER(PgfCncCat, cid, PgfCId),+ GU_MEMBER_P(PgfCncCat, cats, PgfCCatIds),+ GU_MEMBER(PgfCncCat, n_lins, size_t),+ GU_FLEX_MEMBER(PgfCncCat, labels, GuString));++// GU_DEFINE_TYPE(PgfSequence, GuList, gu_ptr_type(PgfSymbol));+// GU_DEFINE_TYPE(PgfSequence, GuList, gu_type(PgfSymbol));+GU_DEFINE_TYPE(PgfSequence, GuSeq, gu_type(PgfSymbol));++GU_DEFINE_TYPE(PgfFlags, GuStringMap, gu_type(PgfLiteral), &gu_null_variant);++typedef PgfFlags* PgfFlagsP;++GU_DEFINE_TYPE(PgfFlagsP, pointer, gu_type(PgfFlags));++GU_DEFINE_TYPE(PgfSequences, GuList, gu_type(PgfSequence));++GU_DEFINE_TYPE(PgfSeqId, typedef, gu_type(PgfSequence));++GU_DEFINE_TYPE(+ PgfCncFun, struct,+ GU_MEMBER(PgfCncFun, fun, PgfCId),+ GU_MEMBER(PgfCncFun, n_lins, GuLength),+ GU_FLEX_MEMBER(PgfCncFun, lins, PgfSeqId));++GU_DEFINE_TYPE(PgfCncFuns, GuList, + GU_TYPE_LIT(referenced, _, gu_ptr_type(PgfCncFun)));++GU_DEFINE_TYPE(PgfFunId, shared, gu_type(PgfCncFun));++GU_DEFINE_TYPE(PgfFunIds, GuList, gu_type(PgfFunId));++GU_DEFINE_TYPE(+ PgfPArg, struct,+ GU_MEMBER_P(PgfPArg, hypos, PgfCCatIds),+ GU_MEMBER(PgfPArg, ccat, PgfCCatId));++GU_DEFINE_TYPE(PgfPArgs, GuSeq, gu_type(PgfPArg));++GU_DEFINE_TYPE(+ PgfProduction, GuVariant,+ GU_CONSTRUCTOR_S(+ PGF_PRODUCTION_APPLY, PgfProductionApply,+ GU_MEMBER(PgfProductionApply, fun, PgfFunId),+ GU_MEMBER(PgfProductionApply, args, PgfPArgs)),+ GU_CONSTRUCTOR_S(+ PGF_PRODUCTION_COERCE, PgfProductionCoerce,+ GU_MEMBER(PgfProductionCoerce, coerce, PgfCCatId)),+ GU_CONSTRUCTOR_S(+ PGF_PRODUCTION_CONST, PgfProductionConst,+ GU_MEMBER(PgfProductionConst, expr, PgfExpr),+ GU_MEMBER(PgfProductionConst, n_toks, GuLength),+ GU_FLEX_MEMBER(PgfProductionConst, toks, GuString)),+ GU_CONSTRUCTOR_S(+ PGF_PRODUCTION_META, PgfProductionMeta,+ GU_MEMBER(PgfProductionMeta, args, PgfPArgs)));++GU_DEFINE_TYPE(PgfProductions, GuList, gu_type(PgfProduction));+GU_DEFINE_TYPE(PgfProductionSeq, GuSeq, gu_type(PgfProduction));++GU_DEFINE_TYPE(+ PgfPatt, GuVariant, + GU_CONSTRUCTOR_S(+ PGF_PATT_APP, PgfPattApp,+ GU_MEMBER(PgfPattApp, ctor, PgfCId),+ GU_MEMBER(PgfPattApp, n_args, GuLength),+ GU_FLEX_MEMBER(PgfPattApp, args, PgfPatt)),+ GU_CONSTRUCTOR_S(+ PGF_PATT_VAR, PgfPattVar,+ GU_MEMBER(PgfPattVar, var, PgfCId)),+ GU_CONSTRUCTOR_S(+ PGF_PATT_AS, PgfPattAs,+ GU_MEMBER(PgfPattAs, var, PgfCId),+ GU_MEMBER(PgfPattAs, patt, PgfPatt)),+ GU_CONSTRUCTOR(+ PGF_PATT_WILD, void),+ GU_CONSTRUCTOR_S(+ PGF_PATT_LIT, PgfPattLit,+ GU_MEMBER(PgfPattLit, lit, PgfLiteral)),+ GU_CONSTRUCTOR_S(+ PGF_PATT_IMPL_ARG, PgfPattImplArg,+ GU_MEMBER(PgfPattImplArg, patt, PgfPatt)),+ GU_CONSTRUCTOR_S(+ PGF_PATT_TILDE, PgfPattTilde,+ GU_MEMBER(PgfPattTilde, expr, PgfExpr)));++GU_DEFINE_TYPE(+ PgfEquation, struct, + GU_MEMBER(PgfEquation, body, PgfExpr),+ GU_MEMBER(PgfEquation, n_patts, GuLength),+ GU_FLEX_MEMBER(PgfEquation, patts, PgfPatt));++// Distinct type so we can give it special treatment in the reader+GU_DEFINE_TYPE(PgfEquationsM, GuSeq, gu_type(PgfEquation));++GU_DEFINE_TYPE(+ PgfFunDecl, struct, + GU_MEMBER_P(PgfFunDecl, type, PgfType),+ GU_MEMBER(PgfFunDecl, arity, int),+ GU_MEMBER(PgfFunDecl, defns, PgfEquationsM),+ GU_MEMBER(PgfFunDecl, prob, double));++GU_DEFINE_TYPE(+ PgfCatFun, struct,+ GU_MEMBER(PgfCatFun, prob, double),+ GU_MEMBER(PgfCatFun, fun, PgfCId));++GU_DEFINE_TYPE(+ PgfCat, struct, + GU_MEMBER(PgfCat, context, PgfHypos),+ GU_MEMBER(PgfCat, n_functions, GuLength),+ GU_FLEX_MEMBER(PgfCat, functions, PgfCatFun));+++GU_DEFINE_TYPE(+ PgfAbstr, struct, + GU_MEMBER(PgfAbstr, aflags, PgfFlagsP),+ GU_MEMBER_V(PgfAbstr, funs,+ GU_TYPE_LIT(pointer, PgfCIdMap*,+ GU_TYPE_LIT(PgfCIdMap, _,+ gu_ptr_type(PgfFunDecl),+ &gu_null_struct))),+ GU_MEMBER_V(PgfAbstr, cats,+ GU_TYPE_LIT(pointer, PgfCIdMap*,+ GU_TYPE_LIT(PgfCIdMap, _,+ gu_ptr_type(PgfCat),+ &gu_null_struct))));++GU_DEFINE_TYPE(+ PgfPrintNames, PgfCIdMap, gu_type(GuString), NULL);++GU_DEFINE_TYPE(+ PgfConcr, struct, + GU_MEMBER(PgfConcr, cflags, PgfFlagsP),+ GU_MEMBER_P(PgfConcr, ccats, GuMap),+ GU_MEMBER_P(PgfConcr, cncfuns, PgfCncFuns),+ GU_MEMBER_P(PgfConcr, sequences, PgfSequences), + GU_MEMBER_P(PgfConcr, printnames, PgfPrintNames),+ GU_MEMBER_V(PgfConcr, cnccats,+ GU_TYPE_LIT(pointer, PgfCIdMap*,+ GU_TYPE_LIT(PgfCIdMap, _, + gu_ptr_type(PgfCncCat),+ &gu_null_struct))));++GU_DEFINE_TYPE(+ PgfPGF, struct, + GU_MEMBER(PgfPGF, major_version, uint16_t),+ GU_MEMBER(PgfPGF, minor_version, uint16_t),+ GU_MEMBER(PgfPGF, gflags, PgfFlagsP),+ GU_MEMBER(PgfPGF, absname, PgfCId),+ GU_MEMBER(PgfPGF, abstract, PgfAbstr),+ GU_MEMBER_V(PgfPGF, concretes,+ GU_TYPE_LIT(pointer, PgfCIdMap*,+ GU_TYPE_LIT(PgfCIdMap, _,+ gu_ptr_type(PgfConcr),+ &gu_null_struct))));+
@@ -1,76 +1,358 @@-#ifndef PGF_DATA_H-#define PGF_DATA_H+/* + * Copyright 2010 University of Helsinki.+ * + * This file is part of libpgf.+ * + * Libpgf is free software: you can redistribute it and/or modify it under+ * the terms of the GNU Lesser General Public License as published by the+ * Free Software Foundation, either version 3 of the License, or (at your+ * option) any later version.+ * + * Libpgf is distributed in the hope that it will be useful, but WITHOUT+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public+ * License for more details.+ * + * You should have received a copy of the GNU Lesser General Public+ * License along with libpgf. If not, see <http://www.gnu.org/licenses/>.+ */ -typedef int BindType;+#ifndef PGF_DATA_H_+#define PGF_DATA_H_ -#include "expr.h"-#include "type.h"+#include <gu/list.h>+#include <gu/variant.h>+#include <gu/map.h>+#include <gu/string.h>+#include <gu/type.h>+#include <gu/seq.h>+#include <pgf/pgf.h>+#include <pgf/expr.h> -struct _String {- int len;- unsigned int chars[];+typedef struct PgfCCat PgfCCat;+typedef PgfCCat* PgfCCatId;+extern GU_DECLARE_TYPE(PgfCCat, struct);+extern GU_DECLARE_TYPE(PgfCCatId, shared);+typedef GuList(PgfCCatId) PgfCCatIds;+extern GU_DECLARE_TYPE(PgfCCatIds, GuList);+typedef GuSeq PgfCCatSeq;+extern GU_DECLARE_TYPE(PgfCCatSeq, GuSeq);++typedef struct PgfAbstr PgfAbstr;+typedef struct PgfFunDecl PgfFunDecl;+typedef struct PgfConcr PgfConcr;++typedef int PgfLength;+typedef struct GuVariant PgfSymbol;+typedef struct PgfAlternative PgfAlternative;+typedef struct PgfCncFun PgfCncFun;+++typedef GuSeq PgfSequence; // -> PgfSymbol++typedef PgfCncFun* PgfFunId; // key to PgfCncFuns+extern GU_DECLARE_TYPE(PgfFunId, shared);+typedef GuList(PgfCncFun*) PgfCncFuns; +extern GU_DECLARE_TYPE(PgfCncFuns, GuList);+typedef GuList(PgfFunId) PgfFunIds; +extern GU_DECLARE_TYPE(PgfFunIds, GuList);+// typedef GuStringMap PgfCIdMap; // PgfCId -> ?+#define PgfCIdMap GuStringMap +typedef PgfCIdMap PgfFlags; // PgfCId -> PgfLiteral+extern GU_DECLARE_TYPE(PgfFlags, GuMap);++extern GU_DECLARE_TYPE(PgfType, struct);+typedef GuVariant PgfProduction;+typedef GuList(PgfProduction) PgfProductions;+extern GU_DECLARE_TYPE(PgfProductions, GuList);+typedef GuSeq PgfProductionSeq; +extern GU_DECLARE_TYPE(PgfProductionSeq, GuSeq);++typedef struct PgfCatFun PgfCatFun;+typedef struct PgfCncCat PgfCncCat;+extern GU_DECLARE_TYPE(PgfCncCat, struct);+typedef GuVariant PgfPatt;++typedef GuList(GuString) GuStringL;+extern GU_DECLARE_TYPE(GuStringL, GuList);+typedef GuSeq PgfTokens; // -> PgfToken+extern GU_DECLARE_TYPE(PgfTokens, GuSeq);++bool+pgf_tokens_equal(PgfTokens t1, PgfTokens t2);++++typedef PgfExpr PgfTree;++typedef struct PgfEquation PgfEquation;+typedef GuSeq PgfEquations;+typedef PgfEquations PgfEquationsM; // can be null+extern GU_DECLARE_TYPE(PgfEquationsM, GuSeq);+typedef struct PgfCat PgfCat;++typedef PgfSequence PgfSeqId; // shared reference++extern GU_DECLARE_TYPE(PgfSeqId, typedef);++typedef GuList(PgfSequence) PgfSequences;++extern GU_DECLARE_TYPE(PgfSequences, GuList);+++++struct PgfAbstr {+ PgfFlags* aflags;+ PgfCIdMap* funs; // |-> PgfFunDecl*+ PgfCIdMap* cats; // |-> PgfCat* }; -struct _CId {- int len;- char chars[];+struct PgfPGF {+ uint16_t major_version;+ uint16_t minor_version;+ PgfFlags* gflags;+ PgfCId absname;+ PgfAbstr abstract;+ PgfCIdMap* concretes; // |-> PgfConcr*+ GuPool* pool; }; -typedef struct _CIdList {- int count;- CId names[];-} *CIdList;+extern GU_DECLARE_TYPE(PgfPGF, struct); -typedef struct _AbsCat {- CId name;- Context hypos;- CIdList funs;-} *AbsCat;+struct PgfFunDecl {+ PgfType* type;+ int arity; // Only for computational defs?+ PgfEquationsM defns; // maybe null+ double prob;+}; -typedef struct _AbsCats {- int count;- struct _AbsCat lst[];-} *AbsCats;+struct PgfCatFun {+ double prob;+ PgfCId fun;+}; -typedef struct _AbsFun {- CId name;- Type ty;- int arrity;- Equations equs;-} *AbsFun;+struct PgfCat {+ // TODO: Add cid here+ PgfHypos context;+ GuLength n_functions;+ PgfCatFun functions[]; // XXX: resolve to PgfFunDecl*?+}; -typedef struct _AbsFuns {- int count;- struct _AbsFun lst[];-} *AbsFuns; -struct _Flag {- CId name;- Literal value;-} ;+struct PgfCncCat {+ PgfCId cid;+ PgfCCatIds* cats;+ + size_t n_lins;+ GuString labels[];+ /**< Labels for tuples. All nested tuples, records and tables+ * in the GF linearization types are flattened into a single+ * tuple in the corresponding PGF concrete category. This+ * field holds the labels that indicate which GF field or+ * parameter (or their combination) each tuple element+ * represents. */+}; -typedef struct _Flags {- int count;- struct _Flag values[];-} *Flags;+struct PgfCncFun {+ PgfCId fun; // XXX: resolve to PgfFunDecl*?+ int funid;+ GuLength n_lins;+ PgfSeqId lins[];+}; -typedef struct _Abstract {- CId name;- Flags flags;- AbsFuns funs;- AbsCats cats;-} *Abstract;+struct PgfAlternative {+ PgfTokens form;+ /**< The form of this variant as a list of tokens. */ -typedef struct _Concrete {- CId name;- Flags flags;-} *Concrete;+ GuStringL* prefixes;+ /**< The prefixes of the following symbol that trigger this+ * form. */+}; -struct _PGF {- Flags flags;- int nConcr;- struct _Abstract abstract;- struct _Concrete concretes[];+struct PgfCCat {+ PgfCncCat* cnccat;+ PgfFunIds* lindefs;+ size_t n_synprods;+ PgfProductionSeq prods;+ int fid; }; -#endif+extern PgfCCat pgf_ccat_string, pgf_ccat_int, pgf_ccat_float, pgf_ccat_var;++typedef PgfCIdMap PgfPrintNames;+extern GU_DECLARE_TYPE(PgfPrintNames, GuStringMap);++typedef GuStringMap PgfFunIndices;+extern GU_DECLARE_TYPE(PgfFunIndices, GuStringMap);++typedef GuMap PgfCoerceIdx;+extern GU_DECLARE_TYPE(PgfCoerceIdx, GuMap);++typedef GuStringMap PgfTransitions;+extern GU_DECLARE_TYPE(PgfTransitions, GuStringMap);++typedef GuMap PgfEpsilonIdx;+extern GU_DECLARE_TYPE(PgfEpsilonIdx, GuMap);++struct PgfConcr {+ PgfFlags* cflags;+ PgfPrintNames* printnames;+ GuMap* ccats;+ PgfFunIndices* fun_indices;+ PgfCoerceIdx* coerce_idx;+ PgfTransitions* lexicon_idx;+ PgfEpsilonIdx* epsilon_idx;+ PgfCncFuns* cncfuns;+ PgfSequences* sequences;+ PgfCIdMap* cnccats;+ int total_cats;+ int max_fid;+};++extern GU_DECLARE_TYPE(PgfConcr, struct);++typedef enum {+ PGF_SYMBOL_CAT,+ PGF_SYMBOL_LIT,+ PGF_SYMBOL_VAR,+ PGF_SYMBOL_KS,+ PGF_SYMBOL_KP+} PgfSymbolTag;++typedef struct PgfSymbolIdx PgfSymbolIdx;++struct PgfSymbolIdx {+ int d;+ int r;+};++typedef PgfSymbolIdx PgfSymbolCat, PgfSymbolLit, PgfSymbolVar;++typedef struct {+ PgfTokens tokens;+} PgfSymbolKS;++typedef struct PgfSymbolKP+/** A prefix-dependent symbol. The form that this symbol takes+ * depends on the form of a prefix of the following symbol. */+{+ PgfTokens default_form; + /**< Default form that this symbol takes if none of of the+ * variant forms is triggered. */++ GuLength n_forms;+ PgfAlternative forms[]; + /**< Variant forms whose choise depends on the following+ * symbol. */+} PgfSymbolKP;+++++// PgfProduction++typedef enum {+ PGF_PRODUCTION_APPLY,+ PGF_PRODUCTION_COERCE,+ PGF_PRODUCTION_CONST,+ PGF_PRODUCTION_META+} PgfProductionTag;++typedef struct PgfPArg PgfPArg;++struct PgfPArg {+ PgfCCatId ccat;+ PgfCCatIds* hypos;+};++GU_DECLARE_TYPE(PgfPArg, struct);++typedef GuSeq PgfPArgs;++GU_DECLARE_TYPE(PgfPArgs, GuSeq);++typedef struct {+ PgfFunId fun; + PgfPArgs args;+} PgfProductionApply;++typedef struct PgfProductionCoerce+/** A coercion. This production is a logical union of the coercions of+ * another FId. This allows common subsets of productions to be+ * shared. */+{+ PgfCCatId coerce;+} PgfProductionCoerce;++typedef struct {+ PgfExpr expr; // XXX+ GuLength n_toks;+ GuString toks[]; // XXX+} PgfProductionConst;++typedef struct {+ PgfPArgs args;+} PgfProductionMeta;++extern GU_DECLARE_TYPE(PgfPatt, GuVariant);++extern GU_DECLARE_TYPE(PgfProduction, GuVariant);+extern GU_DECLARE_TYPE(PgfBindType, enum);+extern GU_DECLARE_TYPE(PgfLiteral, GuVariant);+++PgfCCatId+pgf_literal_cat(PgfLiteral lit);++// PgfPatt++typedef enum {+ PGF_PATT_APP,+ PGF_PATT_VAR,+ PGF_PATT_AS,+ PGF_PATT_WILD,+ PGF_PATT_LIT,+ PGF_PATT_IMPL_ARG,+ PGF_PATT_TILDE,+ PGF_PATT_NUM_TAGS+} PgfPattTag;++typedef struct {+ PgfCId ctor;+ GuLength n_args;+ PgfPatt args[];+} PgfPattApp;++typedef struct {+ PgfLiteral* lit;+} PgfPattLit;++typedef struct {+ PgfCId var;+} PgfPattVar;++typedef struct {+ PgfCId var;+ PgfPatt patt;+} PgfPattAs;++typedef void PgfPattWild;++typedef struct {+ PgfPatt patt;+} PgfPattImplArg;++typedef struct {+ PgfExpr expr;+} PgfPattTilde;++struct PgfEquation {+ PgfExpr body;+ GuLength n_patts;+ PgfPatt patts[];+};++++#endif /* PGF_PRIVATE_H_ */
@@ -0,0 +1,20 @@+#ifndef PGF_EDSL_H_+#define PGF_EDSL_H_++#include <pgf/expr.h>++#define APP(f, a) \+ gu_new_variant_i(PGF_EDSL_POOL, PGF_EXPR_APP, PgfExprApp, f, a)+#define APP2(f, a1, a2) APP(APP(f, a1), a2)+#define APP3(f, a1, a2, a3) APP2(APP(f, a1), a2, a3)++#define VAR(s) \+ gu_new_variant_i(PGF_EDSL_POOL, PGF_EXPR_FUN, PgfExprFun, gu_cstring(#s))++#define APPV(s, a) APP(VAR(s), a)+#define APPV2(s, a1, a2) APP2(VAR(s), a1, a2)+#define APPV3(s, a1, a2, a3) APP3(VAR(s), a1, a2)++++#endif // PGF_EDSL_H_
@@ -0,0 +1,429 @@+#include "expr.h"+#include <gu/intern.h>+#include <gu/assert.h>+#include <ctype.h>+++PgfExpr+pgf_expr_unwrap(PgfExpr expr)+{+ while (true) {+ GuVariantInfo i = gu_variant_open(expr);+ switch (i.tag) {+ case PGF_EXPR_IMPL_ARG: {+ PgfExprImplArg* eimpl = i.data;+ expr = eimpl->expr;+ break;+ }+ case PGF_EXPR_TYPED: {+ PgfExprTyped* etyped = i.data;+ expr = etyped->expr;+ break;+ }+ default:+ return expr;+ }+ }+}++int+pgf_expr_arity(PgfExpr expr)+{+ int n = 0;+ while (true) {+ PgfExpr e = pgf_expr_unwrap(expr);+ GuVariantInfo i = gu_variant_open(e);+ switch (i.tag) {+ case PGF_EXPR_APP: {+ PgfExprApp* app = i.data;+ expr = app->fun;+ n = n + 1;+ break;+ }+ case PGF_EXPR_FUN:+ return n;+ default:+ return -1;+ }+ }+}++PgfApplication*+pgf_expr_unapply(PgfExpr expr, GuPool* pool)+{+ int arity = pgf_expr_arity(expr);+ if (arity < 0) {+ return NULL;+ }+ PgfApplication* appl = gu_new_flex(pool, PgfApplication, args, arity);+ appl->n_args = arity;+ for (int n = arity - 1; n >= 0; n--) {+ PgfExpr e = pgf_expr_unwrap(expr);+ gu_assert(gu_variant_tag(e) == PGF_EXPR_APP);+ PgfExprApp* app = gu_variant_data(e);+ appl->args[n] = app->arg;+ expr = app->fun;+ }+ PgfExpr e = pgf_expr_unwrap(expr);+ gu_assert(gu_variant_tag(e) == PGF_EXPR_FUN);+ PgfExprFun* fun = gu_variant_data(e);+ appl->fun = fun->fun;+ return appl;+}++GU_DEFINE_TYPE(PgfBindType, enum,+ GU_ENUM_C(PgfBindType, PGF_BIND_TYPE_EXPLICIT),+ GU_ENUM_C(PgfBindType, PGF_BIND_TYPE_IMPLICIT));++GU_DEFINE_TYPE(PgfLiteral, GuVariant,+ GU_CONSTRUCTOR_S(PGF_LITERAL_STR, PgfLiteralStr,+ GU_MEMBER(PgfLiteralStr, val, GuString)),+ GU_CONSTRUCTOR_S(PGF_LITERAL_INT, PgfLiteralInt,+ GU_MEMBER(PgfLiteralInt, val, int)),+ GU_CONSTRUCTOR_S(PGF_LITERAL_FLT, PgfLiteralFlt,+ GU_MEMBER(PgfLiteralFlt, val, double)));++GU_DECLARE_TYPE(PgfType, struct);++GU_DEFINE_TYPE(PgfHypo, struct,+ GU_MEMBER(PgfHypo, bindtype, PgfBindType),+ GU_MEMBER(PgfHypo, cid, PgfCId),+ GU_MEMBER_P(PgfHypo, type, PgfType));++GU_DEFINE_TYPE(PgfHypos, GuSeq, gu_type(PgfHypo));++GU_DEFINE_TYPE(PgfType, struct,+ GU_MEMBER(PgfType, hypos, PgfHypos),+ GU_MEMBER(PgfType, cid, PgfCId),+ GU_MEMBER(PgfType, n_exprs, GuLength),+ GU_FLEX_MEMBER(PgfType, exprs, PgfExpr));++GU_DEFINE_TYPE(+ PgfExpr, GuVariant,+ GU_CONSTRUCTOR_S(+ PGF_EXPR_ABS, PgfExprAbs,+ GU_MEMBER(PgfExprAbs, bind_type, PgfBindType),+ GU_MEMBER(PgfExprAbs, id, GuStr),+ GU_MEMBER(PgfExprAbs, body, PgfExpr)),+ GU_CONSTRUCTOR_S(+ PGF_EXPR_APP, PgfExprApp,+ GU_MEMBER(PgfExprApp, fun, PgfExpr),+ GU_MEMBER(PgfExprApp, arg, PgfExpr)),+ GU_CONSTRUCTOR_S(+ PGF_EXPR_LIT, PgfExprLit, + GU_MEMBER(PgfExprLit, lit, PgfLiteral)),+ GU_CONSTRUCTOR_S(+ PGF_EXPR_META, PgfExprMeta,+ GU_MEMBER(PgfExprMeta, id, int)),+ GU_CONSTRUCTOR_S(+ PGF_EXPR_FUN, PgfExprFun,+ GU_MEMBER(PgfExprFun, fun, GuString)),+ GU_CONSTRUCTOR_S(+ PGF_EXPR_VAR, PgfExprVar,+ GU_MEMBER(PgfExprVar, var, int)),+ GU_CONSTRUCTOR_S(+ PGF_EXPR_TYPED, PgfExprTyped,+ GU_MEMBER(PgfExprTyped, expr, PgfExpr),+ GU_MEMBER_P(PgfExprTyped, type, PgfType)),+ GU_CONSTRUCTOR_S(+ PGF_EXPR_IMPL_ARG, PgfExprImplArg,+ GU_MEMBER(PgfExprImplArg, expr, PgfExpr)));+++typedef struct PgfExprParser PgfExprParser;++struct PgfExprParser {+ GuReader* rdr;+ GuIntern* intern;+ GuExn* err;+ GuPool* expr_pool;+ const char* lookahead;+ int next_char;+};+++static const char pgf_expr_lpar[] = "(";+static const char pgf_expr_rpar[] = ")";+static const char pgf_expr_semic[] = ";";++static char+pgf_expr_parser_next(PgfExprParser* parser)+{+ if (parser->next_char >= 0) {+ char ret = (char) parser->next_char;+ parser->next_char = -1;+ return ret;+ }+ return gu_getc(parser->rdr, parser->err);+}++static const char*+pgf_expr_parser_lookahead(PgfExprParser* parser)+{+ if (parser->lookahead != NULL) {+ return parser->lookahead;+ }+ const char* str = NULL;+ char c;+ do {+ c = pgf_expr_parser_next(parser);+ if (!gu_ok(parser->err)) {+ return NULL;+ }+ } while (isspace(c));+ switch (c) {+ case '(':+ str = pgf_expr_lpar;+ break;+ case ')':+ str = pgf_expr_rpar;+ break;+ case ';':+ str = pgf_expr_semic;+ break;+ default:+ if (isalpha(c)) {+ GuPool* tmp_pool = gu_new_pool();+ GuCharBuf* chars = gu_new_buf(char, tmp_pool);+ while (isalnum(c) || c == '_') {+ gu_buf_push(chars, char, c);+ c = pgf_expr_parser_next(parser);+ if (!gu_ok(parser->err)) {+ return NULL;+ }+ }+ parser->next_char = (unsigned char) c;+ char* tmp_str = gu_chars_str(gu_buf_seq(chars),+ tmp_pool);+ str = gu_intern_str(parser->intern, tmp_str);+ gu_pool_free(tmp_pool);+ }+ }+ parser->lookahead = str;+ return str;+}++static bool+pgf_expr_parser_token_is_id(const char* str)+{+ if (str == NULL || !str[0]) {+ return false;+ }+ char c = str[0];+ return (isalpha(c) || c == '_');+}++static void+pgf_expr_parser_consume(PgfExprParser* parser)+{+ pgf_expr_parser_lookahead(parser);+ parser->lookahead = NULL;+}++static PgfExpr+pgf_expr_parser_expr(PgfExprParser* parser);++static PgfExpr+pgf_expr_parser_term(PgfExprParser* parser)+{+ const char* la = pgf_expr_parser_lookahead(parser);++ if (la == pgf_expr_lpar) {+ pgf_expr_parser_consume(parser);+ PgfExpr expr = pgf_expr_parser_expr(parser);+ la = pgf_expr_parser_lookahead(parser);+ if (la == pgf_expr_rpar) {+ pgf_expr_parser_consume(parser);+ return expr;+ }+ } else if (pgf_expr_parser_token_is_id(la)) {+ pgf_expr_parser_consume(parser);+ GuString s = gu_str_string(la, parser->expr_pool);+ return gu_new_variant_i(parser->expr_pool,+ PGF_EXPR_FUN,+ PgfExprFun,+ s);+ }+ return gu_null_variant;+}++static PgfExpr+pgf_expr_parser_expr(PgfExprParser* parser)+{+ PgfExpr expr = pgf_expr_parser_term(parser);+ if (gu_variant_is_null(expr))+ {+ return expr;+ }+ while (true) {+ PgfExpr arg = pgf_expr_parser_term(parser);+ if (gu_variant_is_null(arg)) {+ return expr;+ }+ expr = gu_new_variant_i(parser->expr_pool,+ PGF_EXPR_APP,+ PgfExprApp,+ expr, arg);+ }+}++++PgfExpr+pgf_read_expr(GuReader* rdr, GuPool* pool, GuExn* err)+{+ GuPool* tmp_pool = gu_new_pool();+ PgfExprParser* parser = gu_new(PgfExprParser, tmp_pool);+ parser->rdr = rdr;+ parser->intern = gu_new_intern(pool, tmp_pool);+ parser->expr_pool = pool;+ parser->err = err;+ parser->lookahead = NULL;+ parser->next_char = -1;+ PgfExpr expr = pgf_expr_parser_expr(parser);+ const char* la = pgf_expr_parser_lookahead(parser);+ if (la == pgf_expr_semic) {+ pgf_expr_parser_consume(parser);+ } else {+ expr = gu_null_variant;+ }+ gu_pool_free(tmp_pool);+ return expr;+}++void+pgf_print_literal(PgfLiteral lit,+ GuWriter* wtr, GuExn* err)+{+ GuVariantInfo ei = gu_variant_open(lit);+ switch (ei.tag) {+ case PGF_LITERAL_STR: {+ PgfLiteralStr* lit = ei.data;+ gu_putc('"', wtr, err);+ gu_string_write(lit->val, wtr, err);+ gu_putc('"', wtr, err);+ break;+ }+ case PGF_LITERAL_INT: {+ PgfLiteralInt* lit = ei.data;+ gu_printf(wtr, err, "%d", lit->val);+ break;+ }+ case PGF_LITERAL_FLT: {+ PgfLiteralFlt* lit = ei.data;+ gu_printf(wtr, err, "%f", lit->val);+ break;+ }+ default:+ gu_impossible();+ }+}++void+pgf_print_expr(PgfExpr expr, int prec,+ GuWriter* wtr, GuExn* err)+{+ GuVariantInfo ei = gu_variant_open(expr);+ switch (ei.tag) {+ case PGF_EXPR_FUN: {+ PgfExprFun* fun = ei.data;+ gu_string_write(fun->fun, wtr, err);+ break;+ }+ case PGF_EXPR_APP: {+ PgfExprApp* app = ei.data;+ if (prec > 3) {+ gu_puts("(", wtr, err);+ }+ pgf_print_expr(app->fun, 3, wtr, err);+ gu_puts(" ", wtr, err);+ pgf_print_expr(app->arg, 4, wtr, err);+ if (prec > 3) {+ gu_puts(")", wtr, err);+ }+ break;+ }+ case PGF_EXPR_ABS:+ case PGF_EXPR_LIT: {+ PgfExprLit* lit = ei.data;+ pgf_print_literal(lit->lit, wtr, err);+ break;+ }+ case PGF_EXPR_META:+ gu_putc('?', wtr, err);+ break;+ case PGF_EXPR_VAR:+ case PGF_EXPR_TYPED:+ case PGF_EXPR_IMPL_ARG:+ gu_impossible();+ break;+ default:+ gu_impossible();+ }+}++void+pgf_print_hypo(PgfHypo *hypo, int prec, GuWriter *wtr, GuExn *err)+{+ if (hypo->bindtype == PGF_BIND_TYPE_IMPLICIT) {+ gu_puts("({", wtr, err);+ gu_string_write(hypo->cid, wtr, err);+ gu_puts("} : ", wtr, err);+ pgf_print_type(hypo->type, 0, wtr, err);+ gu_puts(")", wtr, err);+ } else {+ GuPool* tmp_pool = gu_new_pool();+ GuString tmp = gu_str_string("_", tmp_pool);+ + if (!gu_string_eq(hypo->cid, tmp)) {+ gu_puts("(", wtr, err);+ gu_string_write(hypo->cid, wtr, err);+ gu_puts(" : ", wtr, err);+ pgf_print_type(hypo->type, 0, wtr, err);+ gu_puts(")", wtr, err);+ } else {+ pgf_print_type(hypo->type, prec, wtr, err);+ }+ + gu_pool_free(tmp_pool);+ }+}++void+pgf_print_type(PgfType *type, int prec, GuWriter *wtr, GuExn *err)+{+ size_t n_hypos = gu_seq_length(type->hypos);+ + if (n_hypos > 0) {+ if (prec > 0) gu_putc('(', wtr, err);+ + for (size_t i = 0; i < n_hypos; i++) {+ PgfHypo *hypo = gu_seq_index(type->hypos, PgfHypo, i);+ pgf_print_hypo(hypo, 1, wtr, err);++ gu_puts(" -> ", wtr, err);+ }++ gu_string_write(type->cid, wtr, err);+ + for (int i = 0; i < type->n_exprs; i++) {+ gu_puts(" ", wtr, err);+ pgf_print_expr(type->exprs[i], 4, wtr, err);+ }+ + if (prec > 0) gu_putc(')', wtr, err);+ } else if (type->n_exprs > 0) {+ if (prec > 3) gu_putc('(', wtr, err);+ + gu_string_write(type->cid, wtr, err);+ + for (int i = 0; i < type->n_exprs; i++) {+ gu_puts(" ", wtr, err);+ pgf_print_expr(type->exprs[i], 4, wtr, err);+ }+ + if (prec > 3) gu_putc(')', wtr, err);+ } else {+ gu_string_write(type->cid, wtr, err);+ }+}
@@ -1,144 +1,161 @@-#ifndef PGF_EXPR_H-#define PGF_EXPR_H+#ifndef EXPR_H_+#define EXPR_H_ -#define LIT_STR 0-#define LIT_INT 1-#define LIT_FLOAT 2+#include <gu/read.h>+#include <gu/write.h>+#include <gu/variant.h>+#include <gu/seq.h>+#include <pgf/pgf.h> -struct _Literal {- int tag;-};+/// Abstract syntax trees+/// @file -typedef struct _LiteralStr {- struct _Literal _;- String val;-} *LiteralStr;+/// An abstract syntax tree+typedef GuVariant PgfExpr; -typedef struct _LiteralInt {- struct _Literal _;- int val;-} *LiteralInt;+GU_DECLARE_TYPE(PgfExpr, GuVariant); -typedef struct _LiteralFloat {- struct _Literal _;- double val;-} *LiteralFloat;+typedef GuList(PgfExpr) PgfExprs; -#define TAG_ABS 0-#define TAG_APP 1-#define TAG_LIT 2-#define TAG_MET 3-#define TAG_FUN 4-#define TAG_VAR 5-#define TAG_TYP 6-#define TAG_IMP 7+typedef struct PgfHypo PgfHypo;+typedef struct PgfType PgfType; -struct _Expr {- int tag;+typedef int PgfMetaId;++typedef enum {+ PGF_BIND_TYPE_EXPLICIT,+ PGF_BIND_TYPE_IMPLICIT+} PgfBindType;++// PgfLiteral++typedef GuVariant PgfLiteral;+++typedef enum {+ PGF_LITERAL_STR,+ PGF_LITERAL_INT,+ PGF_LITERAL_FLT,+ PGF_LITERAL_NUM_TAGS+} PgfLiteralTag;++typedef struct {+ GuString val;+} PgfLiteralStr;++typedef struct {+ int val;+} PgfLiteralInt;++typedef struct {+ double val;+} PgfLiteralFlt;++++struct PgfHypo {+ PgfBindType bindtype;++ PgfCId cid;+ /**< Locally scoped name for the parameter if dependent types+ * are used. "_" for normal parameters. */++ PgfType* type; }; -typedef struct _ExprAbs {- struct _Expr _;- BindType bt;- CId var;- Expr body;-} *ExprAbs;+typedef GuSeq PgfHypos;+extern GU_DECLARE_TYPE(PgfHypos, GuSeq); -typedef struct _ExprApp {- struct _Expr _;- Expr left, right;-} *ExprApp;+struct PgfType {+ PgfHypos hypos;+ PgfCId cid; /// XXX: resolve to PgfCat*?+ int n_exprs;+ PgfExpr exprs[];+}; -typedef struct _ExprLit {- struct _Expr _;- Literal lit;-} *ExprLit;+ +typedef enum {+ PGF_EXPR_ABS,+ PGF_EXPR_APP,+ PGF_EXPR_LIT,+ PGF_EXPR_META,+ PGF_EXPR_FUN,+ PGF_EXPR_VAR,+ PGF_EXPR_TYPED,+ PGF_EXPR_IMPL_ARG,+ PGF_EXPR_NUM_TAGS+} PgfExprTag; -typedef struct _ExprMeta {- struct _Expr _;- int id;-} *ExprMeta;+typedef struct {+ PgfBindType bind_type;+ PgfCId id; // + PgfExpr body;+} PgfExprAbs;+ +typedef struct {+ PgfExpr fun;+ PgfExpr arg;+} PgfExprApp; -typedef struct _ExprFun {- struct _Expr _;- CId fun;-} *ExprFun;+typedef struct {+ PgfLiteral lit;+} PgfExprLit; -typedef struct _ExprVar {- struct _Expr _;- int index;-} *ExprVar;+typedef struct {+ PgfMetaId id;+} PgfExprMeta; -typedef struct _ExprTyped {- struct _Expr _;- Expr e;- Type ty;-} *ExprTyped;+typedef struct {+ PgfCId fun;+} PgfExprFun; -typedef struct _ExprImplArg {- struct _Expr _;- Expr e;-} *ExprImplArg;+typedef struct {+ int var;+} PgfExprVar; -#define TAG_PAPP 0-#define TAG_PVAR 1-#define TAG_PAT 2-#define TAG_PWILD 3-#define TAG_PLIT 4-#define TAG_PIMP 5-#define TAG_PTILDE 6+/**< A variable. The value is a de Bruijn index to the environment,+ * beginning from the innermost variable. */ -typedef struct _Patt {- int tag;-} *Patt;+typedef struct {+ PgfExpr expr;+ PgfType* type;+} PgfExprTyped; -typedef struct _Patts {- int count;- Patt pats[];-} *Patts;+typedef struct {+ PgfExpr expr;+} PgfExprImplArg; -typedef struct _PattApp {- struct _Patt _;- CId fun;- struct _Patts args;-} *PattApp;+int+pgf_expr_arity(PgfExpr expr); -typedef struct _PattVar {- struct _Patt _;- CId var;-} *PattVar;+PgfExpr+pgf_expr_unwrap(PgfExpr expr); -typedef struct _PattAt {- struct _Patt _;- CId var;- Patt pat;-} *PattAt;+typedef struct PgfApplication PgfApplication; -typedef struct _PattWild {- struct _Patt _;-} *PattWild;+struct PgfApplication {+ PgfCId fun;+ int n_args;+ PgfExpr args[];+}; -typedef struct _PattLit {- struct _Patt _;- Literal lit;-} *PattLit;+PgfApplication*+pgf_expr_unapply(PgfExpr expr, GuPool* pool); -typedef struct _PattImplArg {- struct _Patt _;- Patt pat;-} *PattImplArg; -typedef struct _PattTilde {- struct _Patt _;- Expr e;-} *PattTilde;+PgfExpr+pgf_read_expr(GuReader* rdr, GuPool* pool, GuExn* err); -typedef struct _Equations {- int count;- struct _Equation {- Patts lhs;- Expr rhs;- } equs[];-} *Equations;+void+pgf_print_literal(PgfLiteral lit, GuWriter* wtr, GuExn* err); -#endif+void+pgf_print_expr(PgfExpr expr, int prec, GuWriter* wtr, GuExn* err);++void+pgf_print_hypo(PgfHypo *hypo, int prec, GuWriter *wtr, GuExn *err);++void+pgf_print_type(PgfType *type, int prec, GuWriter *wtr, GuExn *err);++#endif /* EXPR_H_ */
@@ -0,0 +1,540 @@+/* + * Copyright 2010 University of Helsinki.+ * + * This file is part of libpgf.+ * + * Libpgf is free software: you can redistribute it and/or modify it under+ * the terms of the GNU Lesser General Public License as published by the+ * Free Software Foundation, either version 3 of the License, or (at your+ * option) any later version.+ * + * Libpgf is distributed in the hope that it will be useful, but WITHOUT+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public+ * License for more details.+ * + * You should have received a copy of the GNU Lesser General Public+ * License along with libpgf. If not, see <http://www.gnu.org/licenses/>.+ */++#include "data.h"+#include "linearize.h"+#include <gu/map.h>+#include <gu/fun.h>+#include <gu/log.h>+#include <gu/choice.h>+#include <gu/seq.h>+#include <gu/string.h>+#include <gu/assert.h>+#include <pgf/expr.h>++typedef GuStringMap PgfLinInfer;+typedef GuSeq PgfProdSeq;++static GU_DEFINE_TYPE(PgfProdSeq, GuSeq, gu_type(PgfProduction));++typedef struct PgfLinInferEntry PgfLinInferEntry;++struct PgfLinInferEntry {+ PgfCCat* cat;+ PgfCncFun* fun;+};++static GU_DEFINE_TYPE(+ PgfLinInferEntry, struct,+ GU_MEMBER_P(PgfLinInferEntry, cat, PgfCCat)+ // ,GU_MEMBER(PgfLinInferEntry, fun, ...)+ );++typedef GuBuf PgfLinInfers;+static GU_DEFINE_TYPE(PgfLinInfers, GuBuf, gu_type(PgfLinInferEntry));++typedef GuIntMap PgfCncProds;+static GU_DEFINE_TYPE(PgfCncProds, GuIntMap, gu_type(PgfProdSeq),+ &gu_null_seq);++typedef GuStringMap PgfLinProds;+static GU_DEFINE_TYPE(PgfLinProds, GuStringMap, gu_ptr_type(PgfCncProds),+ &gu_null_struct);+++static GuHash+pgf_lzr_cats_hash_fn(GuHasher* self, const void* p)+{+ (void) self;+ PgfCCatIds* cats = *(PgfCCatIds* const*)p;+ size_t len = gu_list_length(cats);+ uintptr_t h = 0;+ for (size_t i = 0; i < len; i++) {+ h = 101 * h + (uintptr_t) gu_list_index(cats, i);+ }+ return h;+}++static bool+pgf_lzr_cats_eq_fn(GuEquality* self, const void* p1, const void* p2)+{+ (void) self;+ PgfCCatIds* cats1 = *(PgfCCatIds* const*) p1;+ PgfCCatIds* cats2 = *(PgfCCatIds* const*) p2;+ int len = gu_list_length(cats1);+ if (gu_list_length(cats2) != len) {+ return false;+ }+ for (int i = 0; i < len; i++) {+ PgfCCat* cat1 = gu_list_index(cats1, i);+ PgfCCat* cat2 = gu_list_index(cats2, i);+ if (cat1 != cat2) {+ return false;+ }+ }+ return true;+}++static GuHasher+pgf_lzr_cats_hasher[1] = {+ {+ .eq = { pgf_lzr_cats_eq_fn },+ .hash = pgf_lzr_cats_hash_fn+ }+};++typedef GuMap PgfInferMap;+static GU_DEFINE_TYPE(PgfInferMap, GuMap,+ gu_ptr_type(PgfCCatIds), pgf_lzr_cats_hasher,+ gu_ptr_type(PgfLinInfers), &gu_null_struct);++GU_DEFINE_TYPE(PgfFunIndices, GuStringMap, gu_ptr_type(PgfInferMap),+ &gu_null_struct);++typedef GuBuf PgfCCatBuf;+static GU_DEFINE_TYPE(PgfCCatBuf, GuBuf, gu_ptr_type(PgfCCat));++GU_DEFINE_TYPE(PgfCoerceIdx, GuMap,+ gu_type(PgfCCat), NULL,+ gu_ptr_type(PgfCCatBuf), &gu_null_struct);+++static void+pgf_lzr_add_infer_entry(+ PgfInferMap* infer_table,+ PgfCCat* cat,+ PgfProductionApply* papply,+ GuPool *pool)+{+ PgfPArgs args = papply->args;+ size_t n_args = gu_seq_length(args);+ PgfCCatIds* arg_cats = gu_new_list(PgfCCatIds, pool, n_args);+ for (size_t i = 0; i < n_args; i++) {+ // XXX: What about the hypos in the args?+ gu_list_index(arg_cats, i) = gu_seq_get(args, PgfPArg, i).ccat;+ }+ gu_debug("%d,%d,%d -> %d, %s",+ n_args > 0 ? gu_list_index(arg_cats, 0)->fid : -1,+ n_args > 1 ? gu_list_index(arg_cats, 1)->fid : -1,+ n_args > 2 ? gu_list_index(arg_cats, 2)->fid : -1,+ cat->fid, papply->fun->fun);+ PgfLinInfers* entries =+ gu_map_get(infer_table, &arg_cats, PgfLinInfers*);+ if (!entries) {+ entries = gu_new_buf(PgfLinInferEntry, pool);+ gu_map_put(infer_table, &arg_cats, PgfLinInfers*, entries);+ } else {+ // XXX: arg_cats is duplicate, we ought to free it+ // Display warning?+ }++ PgfLinInferEntry entry = {+ .cat = cat,+ .fun = papply->fun+ };+ gu_buf_push(entries, PgfLinInferEntry, entry);+}+ ++void+pgf_lzr_index(PgfConcr* concr, PgfCCat* ccat, PgfProduction prod,+ GuPool *pool)+{+ void* data = gu_variant_data(prod);+ switch (gu_variant_tag(prod)) {+ case PGF_PRODUCTION_APPLY: {+ PgfProductionApply* papply = data;+ PgfInferMap* infer =+ gu_map_get(concr->fun_indices, &papply->fun->fun,+ PgfInferMap*);+ gu_debug("index: %s -> %d", papply->fun->fun, ccat->fid);+ if (!infer) {+ infer = gu_map_type_new(PgfInferMap, pool);+ gu_map_put(concr->fun_indices,+ &papply->fun->fun, PgfInferMap*, infer);+ }+ pgf_lzr_add_infer_entry(infer, ccat, papply, pool);+ break;+ }+ case PGF_PRODUCTION_COERCE: {+ PgfProductionCoerce* pcoerce = data;+ PgfCCatBuf* cats = gu_map_get(concr->coerce_idx, pcoerce->coerce,+ PgfCCatBuf*);+ if (!cats) {+ cats = gu_new_buf(PgfCCat*, pool);+ gu_map_put(concr->coerce_idx, + pcoerce->coerce, PgfCCatBuf*, cats);+ }+ gu_debug("coerce_idx: %d -> %d", pcoerce->coerce->fid, ccat->fid);+ gu_buf_push(cats, PgfCCat*, ccat);+ break;+ }+ default:+ // Display warning?+ break;+ }+}++typedef struct PgfLzn PgfLzn;++struct PgfLzn {+ PgfConcr* concr;+ GuChoice* ch;+ PgfExpr expr;+ GuEnum en;+};+++//+// PgfCncTree+//++typedef enum {+ PGF_CNC_TREE_APP,+ PGF_CNC_TREE_LIT,+} PgfCncTreeTag;++typedef struct PgfCncTreeApp PgfCncTreeApp;+struct PgfCncTreeApp {+ PgfCncFun* fun;+ GuLength n_args;+ PgfCncTree args[];+};++typedef struct PgfCncTreeLit PgfCncTreeLit;+struct PgfCncTreeLit {+ PgfLiteral lit;+};+++static PgfCCat*+pgf_lzn_pick_supercat(PgfLzn* lzn, PgfCCat* cat)+{+ gu_enter("->");+ while (true) {+ PgfCCatBuf* supers =+ gu_map_get(lzn->concr->coerce_idx, cat, PgfCCatBuf*);+ if (!supers) {+ break;+ }+ gu_debug("n_supers: %d", gu_buf_length(supers));+ int ch = gu_choice_next(lzn->ch, gu_buf_length(supers) + 1);+ gu_debug("choice: %d", ch);+ if (ch == 0) {+ break;+ }+ cat = gu_buf_get(supers, PgfCCat*, ch - 1);+ }+ gu_exit("<- %d", cat->fid);+ return cat;+}++static PgfCCat*+pgf_lzn_infer(PgfLzn* lzn, PgfExpr expr, GuPool* pool, PgfCncTree* ctree_out);++static PgfCCat*+pgf_lzn_infer_apply_try(PgfLzn* lzn, PgfApplication* appl,+ PgfInferMap* infer, GuChoiceMark* marks,+ PgfCCatIds* arg_cats, int* ip, int n_args, + GuPool* pool, PgfCncTreeApp* app_out)+{+ gu_enter("f: %s, *ip: %d, n_args: %d", appl->fun, *ip, n_args);+ PgfCCat* ret = NULL;+ while (*ip < n_args) {+ PgfCncTree* arg_treep = + (app_out == NULL ? NULL : &app_out->args[*ip]);+ PgfCCat* arg_i = + pgf_lzn_infer(lzn, appl->args[*ip], pool, arg_treep);+ if (arg_i == NULL) {+ goto finish;+ }+ arg_i = pgf_lzn_pick_supercat(lzn, arg_i);+ gu_list_index(arg_cats, *ip) = arg_i;+ marks[++*ip] = gu_choice_mark(lzn->ch);+ }+ PgfLinInfers* entries = gu_map_get(infer, &arg_cats, PgfLinInfers*);+ if (!entries) {+ goto finish;+ }+ size_t n_entries = gu_buf_length(entries);+ int e = gu_choice_next(lzn->ch, n_entries);+ gu_debug("entry %d of %d", e, n_entries);+ if (e < 0) {+ goto finish;+ }+ PgfLinInferEntry* entry = gu_buf_index(entries, PgfLinInferEntry, e);+ if (app_out != NULL) {+ app_out->fun = entry->fun;+ }+ ret = entry->cat;+finish:+ gu_exit("fid: %d", ret ? ret->fid : -1);+ return ret;+}+typedef GuList(GuChoiceMark) PgfChoiceMarks;++static PgfCCat*+pgf_lzn_infer_application(PgfLzn* lzn, PgfApplication* appl, + GuPool* pool, PgfCncTree* ctree_out)+{+ PgfInferMap* infer =+ gu_map_get(lzn->concr->fun_indices, &appl->fun, PgfInferMap*);+ gu_enter("-> f: %s, n_args: %d", appl->fun, appl->n_args);+ if (infer == NULL) {+ gu_exit("<- couldn't find f");+ return NULL;+ }+ GuPool* tmp_pool = gu_new_pool();+ PgfCCat* ret = NULL;+ int n = appl->n_args;+ PgfCCatIds* arg_cats = gu_new_list(PgfCCatIds, tmp_pool, n);++ PgfCncTreeApp* appt = NULL;+ if (ctree_out) {+ appt = gu_new_flex_variant(PGF_CNC_TREE_APP, PgfCncTreeApp, + args, n, ctree_out, pool);+ appt->n_args = n;+ }++ PgfChoiceMarks* marksl = gu_new_list(PgfChoiceMarks, tmp_pool, n + 1);+ GuChoiceMark* marks = gu_list_elems(marksl);+ int i = 0;+ marks[i] = gu_choice_mark(lzn->ch);+ while (true) {+ ret = pgf_lzn_infer_apply_try(lzn, appl, infer,+ marks, arg_cats,+ &i, n, pool, appt);+ if (ret != NULL) {+ break;+ }++ do {+ --i;+ if (i < 0) {+ goto finish;+ }+ gu_choice_reset(lzn->ch, marks[i]);+ } while (!gu_choice_advance(lzn->ch));+ }+finish:+ gu_pool_free(tmp_pool);+ gu_exit("<- fid: %d", ret ? ret->fid : -1);+ return ret;+}++static PgfCCat*+pgf_lzn_infer(PgfLzn* lzn, PgfExpr expr, GuPool* pool, PgfCncTree* ctree_out)+{+ PgfCCat* ret = NULL;+ GuPool* tmp_pool = gu_new_pool();+ PgfApplication* appl = pgf_expr_unapply(expr, tmp_pool);+ if (appl != NULL) {+ ret = pgf_lzn_infer_application(lzn, appl, pool, ctree_out);+ } else {+ GuVariantInfo i = gu_variant_open(pgf_expr_unwrap(expr));+ switch (i.tag) {+ case PGF_EXPR_LIT: {+ PgfExprLit* elit = i.data;+ if (pool != NULL) {+ *ctree_out = gu_new_variant_i(+ pool, PGF_CNC_TREE_LIT,+ PgfCncTreeLit,+ .lit = elit->lit);+ }+ ret = pgf_literal_cat(elit->lit);+ }+ default:+ // XXX: should we do something here?+ break;+ }+ }+ gu_pool_free(tmp_pool);+ return ret;+}+++static PgfCncTree+pgf_lzn_next(PgfLzn* lzn, GuPool* pool)+{+ // XXX: rewrite this whole mess+ PgfCncTree ctree = gu_null_variant;+ if (gu_variant_is_null(lzn->expr)) {+ return ctree;+ }+ PgfCCat* cat = NULL;+ GuChoiceMark mark = gu_choice_mark(lzn->ch);+ do {+ cat = pgf_lzn_infer(lzn, lzn->expr, NULL, NULL);+ gu_choice_reset(lzn->ch, mark);+ } while (!cat && gu_choice_advance(lzn->ch));++ if (cat) {+ PgfCCat* cat2 = pgf_lzn_infer(lzn, lzn->expr, pool, &ctree);+ gu_assert(cat == cat2);+ gu_debug("fid: %d", cat->fid);+ gu_choice_reset(lzn->ch, mark);+ if (!gu_choice_advance(lzn->ch)) {+ lzn->expr = gu_null_variant;+ }+ }+ return ctree;+}++static void+pgf_cnc_tree_enum_next(GuEnum* self, void* to, GuPool* pool)+{+ PgfLzn* lzn = gu_container(self, PgfLzn, en);+ PgfCncTree* toc = to;+ *toc = pgf_lzn_next(lzn, pool);+}++PgfCncTreeEnum*+pgf_lzr_concretize(PgfConcr* concr, PgfExpr expr, GuPool* pool)+{+ PgfLzn* lzn = gu_new(PgfLzn, pool);+ lzn->concr = concr;+ lzn->expr = expr;+ lzn->ch = gu_new_choice(pool);+ lzn->en.next = pgf_cnc_tree_enum_next;+ return &lzn->en;+}+++int+pgf_cnc_tree_dimension(PgfCncTree ctree)+{+ GuVariantInfo cti = gu_variant_open(ctree);+ switch (cti.tag) {+ case PGF_CNC_TREE_LIT: + return 1;+ case PGF_CNC_TREE_APP: {+ PgfCncTreeApp* fapp = cti.data;+ return fapp->fun->n_lins;+ }+ default:+ gu_impossible();+ return 0;+ }+}++void+pgf_lzr_linearize(PgfConcr* concr, PgfCncTree ctree, size_t lin_idx, PgfLinFuncs** fnsp)+{+ PgfLinFuncs* fns = *fnsp;+ GuVariantInfo cti = gu_variant_open(ctree);++ switch (cti.tag) {+ case PGF_CNC_TREE_LIT: {+ gu_require(lin_idx == 0);+ PgfCncTreeLit* flit = cti.data;+ if (fns->expr_literal) {+ fns->expr_literal(fnsp, flit->lit);+ }+ break;+ }+ case PGF_CNC_TREE_APP: {+ PgfCncTreeApp* fapp = cti.data;+ PgfCncFun* fun = fapp->fun;+ if (fns->expr_apply) {+ fns->expr_apply(fnsp, fun->fun, fapp->n_args);+ }+ gu_require(lin_idx < fun->n_lins);+ PgfSequence seq = fun->lins[lin_idx];+ size_t nsyms = gu_seq_length(seq);+ PgfSymbol* syms = gu_seq_data(seq);+ for (size_t i = 0; i < nsyms; i++) {+ PgfSymbol sym = syms[i];+ GuVariantInfo sym_i = gu_variant_open(sym);+ switch (sym_i.tag) {+ case PGF_SYMBOL_CAT:+ case PGF_SYMBOL_VAR:+ case PGF_SYMBOL_LIT: {+ PgfSymbolIdx* sidx = sym_i.data;+ gu_assert((unsigned) sidx->d < fapp->n_args);+ PgfCncTree argf = fapp->args[sidx->d];+ pgf_lzr_linearize(concr, argf, sidx->r, fnsp);+ break;+ }+ case PGF_SYMBOL_KS: {+ PgfSymbolKS* ks = sym_i.data;+ if (fns->symbol_tokens) {+ fns->symbol_tokens(fnsp, ks->tokens);+ }+ break;+ }+ case PGF_SYMBOL_KP: {+ // TODO: correct prefix-dependencies+ PgfSymbolKP* kp = sym_i.data;+ if (fns->symbol_tokens) {+ fns->symbol_tokens(fnsp,+ kp->default_form);+ }+ break;+ }+ default:+ gu_impossible(); + }+ }+ break;+ } // case PGF_CNC_TREE_APP+ default:+ gu_impossible();+ }+}++++typedef struct PgfSimpleLin PgfSimpleLin;++struct PgfSimpleLin {+ PgfLinFuncs* funcs;+ GuWriter* wtr;+ GuExn* err;+};++static void+pgf_file_lzn_symbol_tokens(PgfLinFuncs** funcs, PgfTokens toks)+{+ PgfSimpleLin* flin = gu_container(funcs, PgfSimpleLin, funcs);+ if (!gu_ok(flin->err)) {+ return;+ }+ size_t len = gu_seq_length(toks);+ for (size_t i = 0; i < len; i++) {+ PgfToken tok = gu_seq_get(toks, PgfToken, i);+ gu_string_write(tok, flin->wtr, flin->err);+ gu_putc(' ', flin->wtr, flin->err);+ }+}++static PgfLinFuncs pgf_file_lin_funcs = {+ .symbol_tokens = pgf_file_lzn_symbol_tokens+};++void+pgf_lzr_linearize_simple(PgfConcr* concr, PgfCncTree ctree,+ size_t lin_idx, GuWriter* wtr, GuExn* err)+{+ PgfSimpleLin flin = {+ .funcs = &pgf_file_lin_funcs,+ .wtr = wtr,+ .err = err+ };+ pgf_lzr_linearize(concr, ctree, lin_idx, &flin.funcs);+}
@@ -0,0 +1,122 @@+/* + * Copyright 2010-2011 University of Helsinki.+ * + * This file is part of libpgf.+ * + * Libpgf is free software: you can redistribute it and/or modify it under+ * the terms of the GNU Lesser General Public License as published by the+ * Free Software Foundation, either version 3 of the License, or (at your+ * option) any later version.+ * + * Libpgf is distributed in the hope that it will be useful, but WITHOUT+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public+ * License for more details.+ * + * You should have received a copy of the GNU Lesser General Public+ * License along with libpgf. If not, see <http://www.gnu.org/licenses/>.+ */++#include <gu/type.h>+#include <gu/dump.h>+#include <gu/enum.h>+#include <pgf/data.h>++/// Linearization of abstract syntax trees.+/// @file++/** @}+ *+ * @name Enumerating concrete syntax trees+ *+ * Because of the \c variants construct in GF, there may be several+ * possible concrete syntax trees that correspond to a given abstract+ * syntax tree. These can be enumerated with #pgf_lzr_concretize and+ * #pgf_cnc_trees_next.+ *+ * @{+ */+++/// A concrete syntax tree+typedef GuVariant PgfCncTree;++/// An enumeration of #PgfCncTree trees.+typedef GuEnum PgfCncTreeEnum;++/// Begin enumerating concrete syntax variants.+PgfCncTreeEnum*+pgf_lzr_concretize(PgfConcr* concr, PgfExpr expr, GuPool* pool);++/** @}+ *+ * @name Linearizing concrete syntax trees+ *+ * An individual concrete syntax tree has several different+ * linearizations, corresponding to the various fields and cases of+ * corresponding GF values. The number of these linearizations, called+ * the \e dimension of the tree, can be retrieved with+ * #pgf_cnc_tree_dimension.+ * + * A single linearization of a concrete syntax tree is performed by+ * #pgf_lzr_linearize. The linearization is realized as a sequence of+ * events that are notified by calling the functions of a #PgfLinFuncs+ * structure that the client provides.+ *+ * @{+ */++/// Callback functions for linearization.+typedef struct PgfLinFuncs PgfLinFuncs;++struct PgfLinFuncs+{+ /// Output tokens+ void (*symbol_tokens)(PgfLinFuncs** self, PgfTokens toks);++ void (*symbol_expr)(PgfLinFuncs** self, + int argno, PgfExpr expr, int lin_idx);++ /// Begin application+ void (*expr_apply)(PgfLinFuncs** self, PgfCId cid, int n_args);++ /// Output literal+ void (*expr_literal)(PgfLinFuncs** self, PgfLiteral lit);++ void (*abort)(PgfLinFuncs** self);+ void (*finish)(PgfLinFuncs** self);+};++++++/// Linearize a concrete syntax tree.+void+pgf_lzr_linearize(PgfConcr* concr, PgfCncTree ctree, size_t lin_idx,+ PgfLinFuncs** fnsp);+++/// Linearize a concrete syntax tree as space-separated tokens.+void+pgf_lzr_linearize_simple(PgfConcr* concr, PgfCncTree ctree,+ size_t lin_idx, GuWriter* wtr, GuExn* err);+++/// Return the dimension of a concrete syntax tree.+int+pgf_cnc_tree_dimension(PgfCncTree ctree);+/**<+ * @param ctree A concrete syntax tree.+ *+ * @return The dimension of the tree, i.e. the number of different+ * linearizations the tree has.+ */++//@}++++extern GuTypeTable+pgf_linearize_dump_table;+
@@ -1,396 +0,0 @@-#include "../pgf.h"-#include "data.h"-#include "panic.h"-#include <stdio.h>-#include <stdlib.h>--static int readTag(FILE *f) {- return getc(f);-}--static int readInt16(FILE *f) {- int x = getc(f);- int y = getc(f);- return ((x << 8) | y);-}--static int readInt(FILE *f) {- unsigned int x = (unsigned int) getc(f);- if (x <= 0x7f)- return (int) x;- else {- unsigned int y = (unsigned int) readInt(f);- return (int) ((y << 7) | (x & 0x7f)) ;- }-}--static double readFloat(FILE *f) {- double d;- fread(&d, sizeof(d), 1, f);- return d;-}--static String readString(FILE *f) {- int len = readInt(f);- String str = (String) malloc(sizeof(struct _CId)+len*sizeof(unsigned int));- str->len = len;- - int i;- for (i = 0; i < len; i++) {- int c = fgetc(f);- str->chars[i] = c;- }- - return str;-}--static CId readCId(FILE *f) {- int len = readInt(f);- CId cid = (CId) malloc(sizeof(struct _CId)+len*sizeof(char));- cid->len = len;- fread(&cid->chars, sizeof(char), len, f);- return cid;-}--static CIdList readCIdList(FILE *f) {- int i;- int count = readInt(f);- CIdList list = (CIdList) malloc(sizeof(struct _CIdList)+count*sizeof(CId));- - list->count = count;- for (i = 0; i < count; i++) {- list->names[i] = readCId(f);- }-- return list;-}--static Literal readLiteral(FILE *f) {- int tag = readTag(f);- switch (tag) {- case LIT_STR:- { - LiteralStr lit = (LiteralStr) malloc(sizeof(struct _LiteralStr));- lit->_.tag = tag;- lit->val = readString(f);- return ((Literal) lit);- }- case LIT_INT:- { - LiteralInt lit = (LiteralInt) malloc(sizeof(struct _LiteralInt));- lit->_.tag = tag;- lit->val = readInt(f);- return ((Literal) lit);- }- case LIT_FLOAT:- {- LiteralFloat lit = (LiteralFloat) malloc(sizeof(struct _LiteralFloat));- lit->_.tag = tag;- lit->val = readFloat(f);- return ((Literal) lit);- }- default:- __pgf_panic("Unknown literal tag");- }-}--static Flags readFlags(FILE *f) {- int i;- int count = readInt(f);- Flags flags = (Flags) malloc(sizeof(struct _Flags)+count*sizeof(struct _Flag));- - flags->count = count;- for (i = 0; i < count; i++) {- flags->values[i].name = readCId(f);- flags->values[i].value = readLiteral(f);- }-- return flags;-}--static Context readContext(FILE *f);-static Type readType(FILE *f);--static Expr readExpr(FILE *f) {- int tag = readTag(f);- - switch (tag) {- case TAG_ABS:- {- ExprAbs e = (ExprAbs) malloc(sizeof(struct _ExprAbs));- e->_.tag = tag;- e->bt = readTag(f);- e->var = readCId(f);- e->body = readExpr(f);- return ((Expr) e);- }- case TAG_APP:- {- ExprApp e = (ExprApp) malloc(sizeof(struct _ExprApp));- e->_.tag = tag;- e->left = readExpr(f);- e->right = readExpr(f);- return ((Expr) e);- }- case TAG_LIT:- {- ExprLit e = (ExprLit) malloc(sizeof(struct _ExprLit));- e->_.tag = tag;- e->lit = readLiteral(f);- return ((Expr) e);- }- case TAG_MET:- {- ExprMeta e = (ExprMeta) malloc(sizeof(struct _ExprMeta));- e->_.tag = tag;- e->id = readInt(f);- return ((Expr) e);- }- case TAG_FUN:- {- ExprFun e = (ExprFun) malloc(sizeof(struct _ExprFun));- e->_.tag = tag;- e->fun = readCId(f);- return ((Expr) e);- }- case TAG_VAR:- {- ExprVar e = (ExprVar) malloc(sizeof(struct _ExprVar));- e->_.tag = tag;- e->index = readInt(f);- return ((Expr) e);- }- case TAG_TYP:- {- ExprTyped e = (ExprTyped) malloc(sizeof(struct _ExprTyped));- e->_.tag = tag;- e->e = readExpr(f);- e->ty = readType(f);- return ((Expr) e);- }- case TAG_IMP:- {- ExprImplArg e = (ExprImplArg) malloc(sizeof(struct _ExprImplArg));- e->_.tag = tag;- e->e = readExpr(f);- return ((Expr) e);- }- default:- __pgf_panic("Unknown expression tag");- }-}- -static Type readType(FILE *f) {- Context hypos = readContext(f);- CId cat = readCId(f);- - int i;- int count = readInt(f);- Type ty = (Type) malloc(sizeof(struct _Type)+count*sizeof(Expr));- - ty->hypos = hypos;- ty->cat = cat;- ty->nArgs = count;- for (i = 0; i < count; i++) {- ty->args[i] = readExpr(f);- }- - return ty;-}--static void readHypo(FILE *f, Hypo h) {- h->bt = readTag(f);- h->var = readCId(f);- h->ty = readType(f);-}--static Context readContext(FILE *f) {- int i;- int size = readInt(f);- Context ctxt = (Context) malloc(sizeof(struct _Context)+size*sizeof(struct _Hypo));- - ctxt->size = size;- for (i = 0; i < size; i++) {- readHypo(f, &ctxt->hypos[i]);- }- - return ctxt;-}--static Patt readPatt(FILE *f) {- int tag = readTag(f);-- switch (tag) {- case TAG_PAPP:- {- CId fun = readCId(f);- - int i;- int count = readInt(f);- PattApp p = (PattApp) malloc(sizeof(struct _PattApp)+count*sizeof(Patt));- - p->_.tag = tag;- p->fun = fun;- p->args.count = count;- for (i = 0; i < count; i++) {- p->args.pats[i] = readPatt(f);- }- - return ((Patt) p);- }- case TAG_PVAR:- {- PattVar p = (PattVar) malloc(sizeof(struct _PattVar));- p->_.tag = tag;- p->var = readCId(f);- return ((Patt) p);- }- case TAG_PAT:- {- PattAt p = (PattAt) malloc(sizeof(struct _PattAt));- p->_.tag = tag;- p->var = readCId(f);- p->pat = readPatt(f);- return ((Patt) p);- }- case TAG_PWILD:- {- PattWild p = (PattWild) malloc(sizeof(struct _PattWild));- p->_.tag = tag;- return ((Patt) p);- }- case TAG_PLIT:- {- PattLit p = (PattLit) malloc(sizeof(struct _PattLit));- p->_.tag = tag;- p->lit = readLiteral(f);- return ((Patt) p);- }- case TAG_PIMP:- {- PattImplArg p = (PattImplArg) malloc(sizeof(struct _PattImplArg));- p->_.tag = tag;- p->pat = readPatt(f);- return ((Patt) p);- }- case TAG_PTILDE:- {- PattTilde p = (PattTilde) malloc(sizeof(struct _PattTilde));- p->_.tag = tag;- p->e = readExpr(f);- return ((Patt) p);- }- default:- __pgf_panic("Unknown pattern tag");- } -}--static Patts readPatts(FILE *f) {- int i;- int count = readInt(f);- Patts pats = (Patts) malloc(sizeof(struct _Patts)+count*sizeof(Patt));- - pats->count = count;- for (i = 0; i < count; i++) {- pats->pats[i] = readPatt(f);- }-- return pats;-}--static Equations readEquations(FILE *f) {- int i;- int count = readInt(f);- Equations equs = (Equations) malloc(sizeof(struct _Equations)+count*sizeof(struct _Equation));- - equs->count = count;- for (i = 0; i < count; i++) {- equs->equs[i].lhs = readPatts(f);- equs->equs[i].rhs = readExpr(f);- }-- return equs;-}--static void readAbsFun(FILE *f, AbsFun fun) {- fun->name = readCId(f);- fun->ty = readType(f);- fun->arrity = readInt(f);- if (readTag(f) != 0)- fun->equs = readEquations(f);- else- fun->equs = NULL;-}--static AbsFuns readAbsFuns(FILE *f) {- int i;- int count = readInt(f);- AbsFuns funs = (AbsFuns) malloc(sizeof(struct _AbsFuns)+count*sizeof(struct _AbsFun));- - funs->count = count;- for (i = 0; i < count; i++) {- readAbsFun(f, &funs->lst[i]);- }- - return funs;-}--static void readAbsCat(FILE *f, AbsCat cat) {- cat->name = readCId(f);- cat->hypos = readContext(f);- cat->funs = readCIdList(f);-}--static AbsCats readAbsCats(FILE *f) {- int i;- int count = readInt(f);- AbsCats cats = (AbsCats) malloc(sizeof(struct _AbsCats)+count*sizeof(struct _AbsCat));- - cats->count = count;- for (i = 0; i < count; i++) {- readAbsCat(f, &cats->lst[i]);- }- - return cats;-}--static void readAbstr(FILE *f, Abstract abstr) {- abstr->name = readCId(f);- abstr->flags = readFlags(f);- abstr->funs = readAbsFuns(f);- abstr->cats = readAbsCats(f);-}--static void readConcr(FILE *f, Concrete concr) {- concr->name = readCId(f);- concr->flags = readFlags(f);-}--PGF readPGF(char *filename) {- FILE *f = fopen(filename, "rb");- if (f == NULL)- return NULL;- - int maj_ver = readInt16(f);- int min_ver = readInt16(f);- - Flags flags = readFlags(f);- - struct _Abstract abstr;- readAbstr(f, &abstr);- - int nConcr = readInt(f);- PGF pgf = (PGF) malloc(sizeof(struct _PGF)+sizeof(Concrete)*nConcr);- - pgf->flags = flags;- pgf->abstract = abstr;- pgf->nConcr = nConcr;- - int i;-// for (i = 0; i < nConcr; i++) {-// readConcr(f, &pgf->concretes[i]);-// }-- fclose(f);- return pgf;-}
@@ -1,8 +0,0 @@-#include "panic.h"-#include <stdio.h>--void __pgf_panic(char *msg) {- printf("%s\n",msg);- fflush(stdout);- exit(1);-}
@@ -1,6 +0,0 @@-#ifndef PGF_PANIC_H-#define PGF_PANIC_H--void __pgf_panic(char *msg);--#endif
@@ -0,0 +1,1449 @@+#include <pgf/parser.h>+#include <gu/choice.h>+#include <gu/seq.h>+#include <gu/assert.h>+#include <gu/log.h>+#include <gu/file.h>+#include <math.h>+#include <stdlib.h>++typedef struct PgfItem PgfItem;++typedef GuBuf PgfItemBuf;+typedef GuList(PgfItemBuf*) PgfItemBufs;++typedef GuBuf PgfCCatBuf;++struct PgfParse {+ PgfAbstr* abstr;+ PgfConcr* concr;+ PgfItemBuf* agenda;+ int max_fid;+};++typedef struct PgfExprState PgfExprState;++typedef struct {+ double prob;+ PgfExprState *state;+} PgfExprPState;++struct PgfExprState {+ double prob;+ PgfExprState* prev;+ PgfExpr expr;+ PgfPArgs args;+ size_t arg_idx;+};++typedef struct PgfParseResult PgfParseResult;++struct PgfParseResult {+ PgfAbstr* abstr;+ PgfConcr* concr;+ GuPool *tmp_pool;+ GuBuf *pqueue;+ PgfExprEnum en;+};++typedef struct PgfItemBase PgfItemBase;++struct PgfItemBase {+ PgfItemBuf* conts;+ PgfCCat* ccat;+ PgfProduction prod;+ unsigned short lin_idx;+};++struct PgfItem {+ PgfItemBase* base;+ PgfPArgs args;+ PgfSymbol curr_sym;+ uint16_t seq_idx;+ uint8_t tok_idx;+ uint8_t alt;+};++typedef struct {+ int fid;+ int lin_idx;+} PgfCFCat;++static GU_DEFINE_TYPE(PgfCFCat, struct,+ GU_MEMBER(PgfCFCat, fid, int),+ GU_MEMBER(PgfCFCat, lin_idx, int));++extern GuHasher pgf_cfcat_hasher;++static GU_DEFINE_TYPE(PgfItemBuf, abstract, _);+static GU_DEFINE_TYPE(PgfItemBufs, abstract, _);++typedef GuMap PgfContsMap;+GU_DEFINE_TYPE(PgfContsMap, GuMap,+ gu_type(PgfCCat), NULL,+ gu_ptr_type(PgfItemBufs), &gu_null_struct);++typedef GuMap PgfEpsilonIdx;+GU_DEFINE_TYPE(PgfEpsilonIdx, GuMap,+ gu_type(PgfCFCat), &pgf_cfcat_hasher,+ gu_ptr_type(PgfCCat), &gu_null_struct);++typedef GuMap PgfGenCatMap;+GU_DEFINE_TYPE(PgfGenCatMap, GuMap,+ gu_type(PgfItemBuf), NULL,+ gu_ptr_type(PgfCCat), &gu_null_struct);++// GuString -> PgfItemBuf* +typedef GuStringMap PgfTransitions;+GU_DEFINE_TYPE(PgfTransitions, GuStringMap,+ gu_ptr_type(PgfItemBuf), &gu_null_struct);++typedef struct PgfParsing PgfParsing;++typedef const struct PgfLexCallback PgfLexCallback;++struct PgfLexCallback {+ void (*lex)(PgfLexCallback* self, PgfToken tok, PgfItem* item);+};++struct PgfParsing {+ GuPool* pool;+ GuPool* tmp_pool;+ PgfContsMap* conts_map;+ PgfGenCatMap* generated_cats;+ PgfCCatBuf* completed;+ PgfLexCallback* callback;+ PgfItemBuf *lexicon_idx;+ PgfEpsilonIdx *epsilon_idx;+ PgfItemBuf *metas;+ int max_fid;+};++#ifdef PGF_PARSER_DEBUG+static void+pgf_print_production(int fid, PgfProduction prod, GuWriter *wtr, GuExn* err)+{+ gu_printf(wtr,err,"C%d -> ",fid);+ + GuVariantInfo i = gu_variant_open(prod);+ switch (i.tag) {+ case PGF_PRODUCTION_APPLY: {+ PgfProductionApply* papp = i.data;+ gu_printf(wtr,err,"F%d(",papp->fun->funid);+ gu_string_write(papp->fun->fun, wtr, err);+ gu_printf(wtr,err,")[");+ size_t n_args = gu_seq_length(papp->args);+ for (size_t j = 0; j < n_args; j++) {+ if (j > 0)+ gu_putc(',',wtr,err);+ + PgfPArg arg = gu_seq_get(papp->args, PgfPArg, j);++ if (arg.hypos != NULL) {+ size_t n_hypos = gu_list_length(arg.hypos);+ for (size_t k = 0; k < n_hypos; k++) {+ if (k > 0)+ gu_putc(' ',wtr,err);+ PgfCCat *hypo = gu_list_index(arg.hypos, k);+ gu_printf(wtr,err,"C%d",hypo->fid);+ }+ }+ + gu_printf(wtr,err,"C%d",arg.ccat->fid);+ }+ gu_printf(wtr,err,"]\n");+ break;+ }+ case PGF_PRODUCTION_COERCE: {+ PgfProductionCoerce* pcoerce = i.data;+ gu_printf(wtr,err,"_[C%d]\n",pcoerce->coerce->fid);+ break;+ }+ case PGF_PRODUCTION_META: {+ PgfProductionMeta* pmeta = i.data;+ gu_printf(wtr,err,"?[");+ size_t n_args = gu_seq_length(pmeta->args);+ for (size_t j = 0; j < n_args; j++) {+ if (j > 0)+ gu_putc(',',wtr,err);+ + PgfCCat *arg = gu_seq_get(pmeta->args, PgfCCat*, j); + gu_printf(wtr,err,"C%d",arg->fid);+ }+ gu_printf(wtr,err,"]\n");+ break;+ }+ default:+ gu_impossible();+ }+}++void+pgf_print_symbol(PgfSymbol sym, GuWriter *wtr, GuExn *err);++static void+pgf_print_item(PgfItem* item, GuWriter* wtr, GuExn* err)+{+ gu_printf(wtr, err, "[C%d -> ",item->base->ccat->fid);++ GuVariantInfo i = gu_variant_open(item->base->prod);+ switch (i.tag) {+ case PGF_PRODUCTION_APPLY: {+ PgfProductionApply* papp = i.data;+ PgfCncFun* fun = papp->fun;+ gu_printf(wtr, err, "F%d(", fun->funid);+ gu_string_write(fun->fun, wtr, err);+ gu_printf(wtr, err, ")[");+ for (size_t i = 0; i < gu_seq_length(item->args); i++) {+ PgfPArg arg = gu_seq_get(item->args, PgfPArg, i);+ gu_printf(wtr, err,+ ((i < gu_seq_length(item->args)-1) ? "C%d," : "C%d"),+ arg.ccat->fid);+ }+ gu_printf(wtr, err, "]; %d : ",item->base->lin_idx);+ PgfSequence seq = fun->lins[item->base->lin_idx];+ for (size_t i = 0; i < gu_seq_length(seq); i++) {+ if (i == item->seq_idx)+ gu_printf(wtr, err, " . ");+ + PgfSymbol *sym = gu_seq_index(seq, PgfSymbol, i);+ pgf_print_symbol(*sym, wtr, err);+ }+ if (item->seq_idx == gu_seq_length(seq))+ gu_printf(wtr, err, " .");+ break;+ }+ case PGF_PRODUCTION_COERCE: {+ gu_printf(wtr, err, "_[C%d]; %d : ",+ gu_seq_index(item->args, PgfPArg, 0)->ccat->fid,+ item->base->lin_idx);+ if (item->seq_idx == 0)+ gu_printf(wtr, err, ". ");+ gu_printf(wtr, err, "<0,%d>", item->base->lin_idx);+ if (item->seq_idx == 1)+ gu_printf(wtr, err, " .");+ break;+ }+ case PGF_PRODUCTION_META: {+ gu_printf(wtr, err, "?[");+ for (size_t i = 0; i < gu_seq_length(item->args); i++) {+ PgfPArg arg = gu_seq_get(item->args, PgfPArg, i);+ gu_printf(wtr, err,+ ((i < gu_seq_length(item->args)-1) ? "C%d," : "C%d"),+ arg.ccat->fid);+ }+ gu_printf(wtr, err, "]; %d : %d",item->base->lin_idx, item->seq_idx);+ break;+ }+ default:+ gu_impossible();+ }+ + gu_printf(wtr, err, "]\n");+}+#endif++static void+pgf_parsing_add_transition(PgfParsing* parsing, PgfToken tok, PgfItem* item)+{+ parsing->callback->lex(parsing->callback, tok, item);+}++static PgfItemBufs*+pgf_parsing_get_contss(PgfContsMap* conts_map, PgfCCat* cat, GuPool *tmp_pool)+{+ PgfItemBufs* contss = gu_map_get(conts_map, cat, PgfItemBufs*);+ if (!contss) {+ size_t n_lins = cat->cnccat->n_lins;+ contss = gu_new_list(PgfItemBufs, tmp_pool, n_lins);+ for (size_t i = 0; i < n_lins; i++) {+ gu_list_index(contss, i) = NULL;+ }+ gu_map_put(conts_map, cat, PgfItemBufs*, contss);+ }+ return contss;+}++static PgfItemBuf*+pgf_parsing_get_conts(PgfContsMap* conts_map,+ PgfCCat* ccat, size_t lin_idx,+ GuPool *pool, GuPool *tmp_pool)+{+ gu_require(lin_idx < ccat->cnccat->n_lins);+ PgfItemBufs* contss = + pgf_parsing_get_contss(conts_map, ccat, tmp_pool);+ PgfItemBuf* conts = gu_list_index(contss, lin_idx);+ if (!conts) {+ conts = gu_new_buf(PgfItem*, pool);+ gu_list_index(contss, lin_idx) = conts;+ }+ return conts;+}++static bool+pgf_parsing_has_conts(PgfContsMap* conts_map,+ PgfCCat* ccat, size_t lin_idx)+{+ gu_require(lin_idx < ccat->cnccat->n_lins);+ PgfItemBufs* contss = gu_map_get(conts_map, ccat, PgfItemBufs*);+ if (contss == NULL)+ return false;++ return (gu_list_index(contss, lin_idx) != NULL);+}++static PgfCCat*+pgf_parsing_create_completed(PgfParsing* parsing, PgfItemBuf* conts, + PgfCncCat* cnccat)+{+ PgfCCat* cat = gu_new(PgfCCat, parsing->pool);+ cat->cnccat = cnccat;+ cat->fid = parsing->max_fid++;+ cat->prods = gu_buf_seq(gu_new_buf(PgfProduction, parsing->pool));+ cat->n_synprods = 0;+ gu_map_put(parsing->generated_cats, conts, PgfCCat*, cat);+ return cat;+}++static PgfCCat*+pgf_parsing_get_completed(PgfParsing* parsing, PgfItemBuf* conts)+{+ return gu_map_get(parsing->generated_cats, conts, PgfCCat*);+}++static PgfSymbol+pgf_item_base_symbol(PgfItemBase* ibase, size_t seq_idx, GuPool* pool)+{+ GuVariantInfo i = gu_variant_open(ibase->prod);+ switch (i.tag) {+ case PGF_PRODUCTION_APPLY: {+ PgfProductionApply* papp = i.data;+ PgfCncFun* fun = papp->fun;+ gu_assert(ibase->lin_idx < fun->n_lins);+ PgfSequence seq = fun->lins[ibase->lin_idx];+ gu_assert(seq_idx <= gu_seq_length(seq));+ if (seq_idx == gu_seq_length(seq)) {+ return gu_null_variant;+ } else {+ return gu_seq_get(seq, PgfSymbol, seq_idx);+ }+ break;+ }+ case PGF_PRODUCTION_COERCE: {+ gu_assert(seq_idx <= 1);+ if (seq_idx == 1) {+ return gu_null_variant;+ } else {+ return gu_new_variant_i(pool, PGF_SYMBOL_CAT,+ PgfSymbolCat,+ .d = 0, .r = ibase->lin_idx);+ }+ break;+ }+ case PGF_PRODUCTION_META: {+ return gu_null_variant;+ }+ default:+ gu_impossible();+ }+ return gu_null_variant;+}++static PgfItem*+pgf_new_item(PgfCCat* ccat, size_t lin_idx,+ PgfProduction prod, PgfItemBuf* conts, GuPool* pool)+{+ PgfItemBase* base = gu_new(PgfItemBase, pool);+ base->ccat = ccat;+ base->lin_idx = lin_idx;+ base->prod = prod;+ base->conts = conts;++ PgfItem* item = gu_new(PgfItem, pool);+ GuVariantInfo pi = gu_variant_open(prod);+ switch (pi.tag) {+ case PGF_PRODUCTION_APPLY: {+ PgfProductionApply* papp = pi.data;+ item->args = papp->args;+ break;+ }+ case PGF_PRODUCTION_COERCE: {+ PgfProductionCoerce* pcoerce = pi.data;+ item->args = gu_new_seq(PgfPArg, 1, pool);+ PgfPArg* parg = gu_seq_index(item->args, PgfPArg, 0);+ parg->hypos = NULL;+ parg->ccat = pcoerce->coerce;+ break;+ }+ case PGF_PRODUCTION_META: {+ PgfProductionMeta* pmeta = pi.data;+ item->args = pmeta->args;+ break;+ }+ default:+ gu_impossible();+ }+ item->base = base;+ item->curr_sym = pgf_item_base_symbol(item->base, 0, pool);+ item->seq_idx = 0;+ item->tok_idx = 0;+ item->alt = 0;+ return item;+}++static PgfItemBase*+pgf_item_base_copy(PgfItemBase* base, GuPool* pool)+{+ PgfItemBase* copy = gu_new(PgfItemBase, pool);+ memcpy(copy, base, sizeof(PgfItemBase));+ return copy;+}++static PgfItem*+pgf_item_copy(PgfItem* item, GuPool* pool)+{+ PgfItem* copy = gu_new(PgfItem, pool);+ memcpy(copy, item, sizeof(PgfItem));+ return copy;+}++static PgfItem*+pgf_item_update_arg(PgfItem* item, size_t d, PgfCCat *ccat, GuPool* pool)+{+ PgfItem* new_item = pgf_item_copy(item, pool);+ size_t nargs = gu_seq_length(item->args);+ new_item->args = gu_new_seq(PgfPArg, nargs, pool);+ memcpy(gu_seq_data(new_item->args), gu_seq_data(item->args),+ nargs * sizeof(PgfPArg));+ gu_seq_set(new_item->args, PgfPArg, d,+ ((PgfPArg) { .hypos = NULL, .ccat = ccat }));+ + return new_item;+}++static void+pgf_item_advance(PgfItem* item, GuPool* pool)+{+ item->seq_idx++;+ item->curr_sym = pgf_item_base_symbol(item->base, item->seq_idx, pool);+}++static void+pgf_parsing_item(PgfParsing* parsing, PgfItem* item);++static void+pgf_parsing_combine(PgfParsing* parsing, PgfItem* cont, PgfCCat* cat)+{+ if (cont == NULL) {+ gu_buf_push(parsing->completed, PgfCCat*, cat);+ return;+ }++ PgfItem* item = NULL;++ if (!gu_variant_is_null(cont->curr_sym)) {+ gu_assert(gu_variant_tag(cont->curr_sym) == PGF_SYMBOL_CAT);+ PgfSymbolCat* scat = gu_variant_data(cont->curr_sym);++ item = pgf_item_update_arg(cont, scat->d, cat, parsing->pool);+ } else { + item = pgf_item_copy(cont, parsing->pool);+ size_t nargs = gu_seq_length(cont->args);+ item->args = gu_new_seq(PgfPArg, nargs+1, parsing->pool);+ memcpy(gu_seq_data(item->args), gu_seq_data(cont->args),+ nargs * sizeof(PgfPArg));+ gu_seq_set(item->args, PgfPArg, nargs,+ ((PgfPArg) { .hypos = NULL, .ccat = cat }));+ }+ + pgf_item_advance(item, parsing->pool);+ pgf_parsing_item(parsing, item);+}++static void+pgf_parsing_production(PgfParsing* parsing, PgfCCat* ccat, size_t lin_idx,+ PgfProduction prod, PgfItemBuf* conts)+{+ PgfItem* item =+ pgf_new_item(ccat, lin_idx, prod, conts, parsing->pool);+ pgf_parsing_item(parsing, item);+}++static PgfProduction+pgf_parsing_new_production(PgfItem* item, GuPool *pool)+{+ GuVariantInfo i = gu_variant_open(item->base->prod);+ PgfProduction prod = gu_null_variant;+ switch (i.tag) {+ case PGF_PRODUCTION_APPLY: {+ PgfProductionApply* papp = i.data;+ PgfProductionApply* new_papp = + gu_new_variant(PGF_PRODUCTION_APPLY,+ PgfProductionApply,+ &prod, pool);+ new_papp->fun = papp->fun;+ new_papp->args = item->args;+ break;+ }+ case PGF_PRODUCTION_COERCE: {+ PgfProductionCoerce* new_pcoerce =+ gu_new_variant(PGF_PRODUCTION_COERCE,+ PgfProductionCoerce,+ &prod, pool);+ PgfPArg* parg = gu_seq_index(item->args, PgfPArg, 0);+ gu_assert(!parg->hypos || !parg->hypos->len);+ new_pcoerce->coerce = parg->ccat;+ break;+ }+ case PGF_PRODUCTION_META: {+ PgfProductionMeta* new_pmeta = + gu_new_variant(PGF_PRODUCTION_META,+ PgfProductionMeta,+ &prod, pool);+ new_pmeta->args = item->args;+ break;+ }+ default:+ gu_impossible();+ }+ + return prod;+}++static void+pgf_parsing_complete(PgfParsing* parsing, PgfItem* item)+{+ PgfProduction prod =+ pgf_parsing_new_production(item, parsing->pool);++ PgfItemBuf* conts = item->base->conts;+ PgfCCat* tmp_cat = pgf_parsing_get_completed(parsing, conts);+ PgfCCat* cat = tmp_cat;+ if (cat == NULL) {+ cat = pgf_parsing_create_completed(parsing, conts,+ item->base->ccat->cnccat);+ }+ + GuBuf* prodbuf = gu_seq_buf(cat->prods);+ gu_buf_push(prodbuf, PgfProduction, prod);+ cat->n_synprods++;++#ifdef PGF_PARSER_DEBUG+ GuPool* tmp_pool = gu_new_pool();+ GuOut* out = gu_file_out(stderr, tmp_pool);+ GuWriter* wtr = gu_new_utf8_writer(out, tmp_pool);+ GuExn* err = gu_exn(NULL, type, tmp_pool);+ if (tmp_cat == NULL)+ gu_printf(wtr, err, "[C%d; %d; C%d]\n",+ item->base->ccat->fid, + item->base->lin_idx, + cat->fid);+ pgf_print_production(cat->fid, prod, wtr, err);+ gu_pool_free(tmp_pool);+#endif++ if (tmp_cat != NULL) {+ // The category has already been created. If it has also been+ // predicted already, then process a new item for this production.+ PgfItemBufs* contss = + pgf_parsing_get_contss(parsing->conts_map, cat, + parsing->tmp_pool);+ size_t n_contss = gu_list_length(contss);+ for (size_t i = 0; i < n_contss; i++) {+ PgfItemBuf* conts2 = gu_list_index(contss, i);+ /* If there are continuations for+ * linearization index i, then (cat, i) has+ * already been predicted. Add the new+ * production immediately to the agenda,+ * i.e. process it. */+ if (conts2) {+ pgf_parsing_production(parsing, cat, i,+ prod, conts2);+ }+ }+ } else {+ size_t n_conts = gu_buf_length(conts);+ for (size_t i = 0; i < n_conts; i++) {+ PgfItem* cont = gu_buf_get(conts, PgfItem*, i);+ pgf_parsing_combine(parsing, cont, cat);+ }+ }+}++static void+pgf_parsing_td_predict(PgfParsing* parsing, PgfItem* item, + PgfCCat* ccat, size_t lin_idx)+{+ gu_enter("-> cat: %d", ccat->fid);+ if (gu_seq_is_null(ccat->prods)) {+ // Empty category+ return;+ }+ PgfItemBuf* conts = + pgf_parsing_get_conts(parsing->conts_map, ccat, lin_idx, + parsing->pool, parsing->tmp_pool);+ gu_buf_push(conts, PgfItem*, item);+ if (gu_buf_length(conts) == 1) {+ /* First time we encounter this linearization+ * of this category at the current position,+ * so predict it. */+ + // Top-down prediction for syntactic rules+ PgfProductionSeq prods = ccat->prods;+ for (size_t i = 0; i < ccat->n_synprods; i++) {+ PgfProduction prod =+ gu_seq_get(prods, PgfProduction, i);+ pgf_parsing_production(parsing, ccat, lin_idx, + prod, conts);+ }++ // Bottom-up prediction for lexical rules+ if (parsing->lexicon_idx != NULL) {+ size_t n_items = gu_buf_length(parsing->lexicon_idx);+ for (size_t i = 0; i < n_items; i++) {+ PgfItem* item = gu_buf_get(parsing->lexicon_idx, PgfItem*, i);+ + if (item->base->ccat == ccat && + item->base->lin_idx == lin_idx &&+ gu_seq_length(item->args) == 0) {+ pgf_parsing_production(parsing, ccat, lin_idx,+ item->base->prod, conts);+ }+ }+ }++ // Bottom-up prediction for epsilon rules+ PgfCFCat cfc = {ccat->fid, lin_idx};+ PgfCCat* eps_ccat = gu_map_get(parsing->epsilon_idx, &cfc, PgfCCat*);++ if (eps_ccat != NULL) {+ size_t n_prods = gu_seq_length(eps_ccat->prods);+ for (size_t i = 0; i < n_prods; i++) {+ PgfProduction prod = + gu_seq_get(eps_ccat->prods, PgfProduction, i);+ + GuVariantInfo i = gu_variant_open(prod);+ switch (i.tag) {+ case PGF_PRODUCTION_APPLY: {+ PgfProductionApply* papp = i.data;+ if (gu_seq_length(papp->args) == 0) {+ pgf_parsing_production(parsing, ccat, lin_idx,+ prod, conts);+ }+ break;+ }+ }+ }+ }+ } else {+ /* If it has already been completed, combine. */+ PgfCCat* completed = + pgf_parsing_get_completed(parsing, conts);+ if (completed) {+ pgf_parsing_combine(parsing, item, completed);+ }+ }+ gu_exit(NULL);+}++static void+pgf_parsing_bu_predict(PgfParsing* parsing, PgfItem* item, + PgfItemBuf *agenda)+{+ PgfItemBuf* conts =+ pgf_parsing_get_conts(parsing->conts_map,+ item->base->ccat, item->base->lin_idx,+ parsing->pool, parsing->tmp_pool);++ PgfItem* copy = pgf_item_copy(item, parsing->pool);+ copy->base = pgf_item_base_copy(item->base, parsing->pool);+ copy->base->conts = conts;+ gu_buf_push(agenda, PgfItem*, copy);++ if (gu_buf_length(conts) == 0) {+ size_t n_items;++ n_items = gu_buf_length(item->base->conts);+ for (size_t i = 0; i < n_items; i++) {+ PgfItem *item_ = gu_buf_get(item->base->conts, PgfItem*, i);+ pgf_parsing_bu_predict(parsing, item_, conts);+ }++ n_items = gu_buf_length(parsing->metas);+ for (size_t i = 0; i < n_items; i++) {+ PgfItem *item_ = gu_buf_get(parsing->metas, PgfItem*, i);+ gu_buf_push(conts, PgfItem*, item_);+ }+ }++#ifdef PGF_PARSER_DEBUG+ GuPool* tmp_pool = gu_new_pool();+ GuOut* out = gu_file_out(stderr, tmp_pool);+ GuWriter* wtr = gu_new_utf8_writer(out, tmp_pool);+ GuExn* err = gu_exn(NULL, type, tmp_pool);+ pgf_print_item(copy, wtr, err);+ gu_pool_free(tmp_pool);+#endif+}++static void+pgf_parsing_symbol(PgfParsing* parsing, PgfItem* item, PgfSymbol sym) {+ switch (gu_variant_tag(sym)) {+ case PGF_SYMBOL_CAT: {+ PgfSymbolCat* scat = gu_variant_data(sym);+ PgfPArg* parg = gu_seq_index(item->args, PgfPArg, scat->d);+ gu_assert(!parg->hypos || !parg->hypos->len);+ pgf_parsing_td_predict(parsing, item, parg->ccat, scat->r);+ break;+ }+ case PGF_SYMBOL_KS: {+ PgfSymbolKS* sks = gu_variant_data(sym);+ gu_assert(item->tok_idx < gu_seq_length(sks->tokens));+ PgfToken tok = + gu_seq_get(sks->tokens, PgfToken, item->tok_idx++);+ if (item->tok_idx == gu_seq_length(sks->tokens)) {+ item->tok_idx = 0;+ pgf_item_advance(item, parsing->pool);+ }+ pgf_parsing_add_transition(parsing, tok, item);+ break;+ }+ case PGF_SYMBOL_KP: {+ PgfSymbolKP* skp = gu_variant_data(sym);+ size_t idx = item->tok_idx;+ uint8_t alt = item->alt;+ gu_assert(idx < gu_seq_length(skp->default_form));+ if (idx == 0) {+ PgfToken tok;+ PgfItem* new_item;+ + tok = gu_seq_get(skp->default_form, PgfToken, 0);+ new_item = pgf_item_copy(item, parsing->pool);+ new_item->tok_idx++;+ if (new_item->tok_idx == gu_seq_length(skp->default_form)) {+ new_item->tok_idx = 0;+ pgf_item_advance(new_item, parsing->pool);+ }+ pgf_parsing_add_transition(parsing, tok, new_item);++ for (size_t i = 0; i < skp->n_forms; i++) {+ // XXX: do nubbing properly+ PgfTokens toks = skp->forms[i].form;+ PgfTokens toks2 = skp->default_form;+ bool skip = pgf_tokens_equal(toks, toks2);+ for (size_t j = 0; j < i; j++) {+ PgfTokens toks2 = skp->forms[j].form;+ skip |= pgf_tokens_equal(toks, toks2);+ }+ if (!skip) {+ tok = gu_seq_get(toks, PgfToken, 0);+ new_item = pgf_item_copy(item, parsing->pool);+ new_item->tok_idx++;+ new_item->alt = i;+ if (new_item->tok_idx == gu_seq_length(toks)) {+ new_item->tok_idx = 0;+ pgf_item_advance(new_item, parsing->pool);+ }+ pgf_parsing_add_transition(parsing, tok, new_item);+ }+ }+ } else if (alt == 0) {+ PgfToken tok =+ gu_seq_get(skp->default_form, PgfToken, idx);+ item->tok_idx++;+ if (item->tok_idx == gu_seq_length(skp->default_form)) {+ item->tok_idx = 0;+ pgf_item_advance(item, parsing->pool);+ }+ pgf_parsing_add_transition(parsing, tok, item);+ } else {+ gu_assert(alt <= skp->n_forms);+ PgfTokens toks = skp->forms[alt - 1].form;+ PgfToken tok = gu_seq_get(toks, PgfToken, idx);+ item->tok_idx++;+ if (item->tok_idx == gu_seq_length(toks)) {+ item->tok_idx = 0;+ pgf_item_advance(item, parsing->pool);+ }+ pgf_parsing_add_transition(parsing, tok, item);+ }+ break;+ }+ case PGF_SYMBOL_LIT:+ // XXX TODO proper support+ break;+ case PGF_SYMBOL_VAR:+ // XXX TODO proper support+ break;+ default:+ gu_impossible();+ }+}++static void+pgf_parsing_item(PgfParsing* parsing, PgfItem* item)+{+#ifdef PGF_PARSER_DEBUG+ GuPool* tmp_pool = gu_new_pool();+ GuOut* out = gu_file_out(stderr, tmp_pool);+ GuWriter* wtr = gu_new_utf8_writer(out, tmp_pool);+ GuExn* err = gu_exn(NULL, type, tmp_pool);+ pgf_print_item(item, wtr, err);+ gu_pool_free(tmp_pool);+#endif++ GuVariantInfo i = gu_variant_open(item->base->prod);+ switch (i.tag) {+ case PGF_PRODUCTION_APPLY: {+ PgfProductionApply* papp = i.data;+ PgfCncFun* fun = papp->fun;+ PgfSequence seq = fun->lins[item->base->lin_idx];+ if (item->seq_idx == gu_seq_length(seq)) {+ pgf_parsing_complete(parsing, item);+ } else {+ PgfSymbol sym = + gu_seq_get(seq, PgfSymbol, item->seq_idx);+ pgf_parsing_symbol(parsing, item, sym);+ }+ break;+ }+ case PGF_PRODUCTION_COERCE: {+ PgfProductionCoerce* pcoerce = i.data;+ switch (item->seq_idx) {+ case 0:+ pgf_parsing_td_predict(parsing, item, + pcoerce->coerce,+ item->base->lin_idx);+ break;+ case 1:+ pgf_parsing_complete(parsing, item);+ break;+ default:+ gu_impossible();+ }+ break;+ }+ case PGF_PRODUCTION_META: {+ pgf_parsing_complete(parsing, item);+ gu_buf_push(parsing->metas, PgfItem*, item);+ break;+ }+ default:+ gu_impossible();+ }+}++static PgfParsing*+pgf_new_parsing(PgfConcr* concr, PgfLexCallback* callback, int max_fid, + GuPool* parse_pool, GuPool* out_pool)+{+ PgfParsing* parsing = gu_new(PgfParsing, out_pool);+ parsing->generated_cats = gu_map_type_new(PgfGenCatMap, out_pool);+ parsing->conts_map = gu_map_type_new(PgfContsMap, out_pool);+ parsing->completed = gu_new_buf(PgfCCat*, parse_pool);+ parsing->callback = callback;+ parsing->lexicon_idx = NULL;+ parsing->epsilon_idx = concr->epsilon_idx;+ parsing->pool = parse_pool;+ parsing->tmp_pool = out_pool;+ parsing->metas = gu_new_buf(PgfItem*, out_pool);+ parsing->max_fid = max_fid;+ return parsing;+}++static PgfParse*+pgf_new_parse(PgfAbstr* abstr, PgfConcr* concr, + int max_fid, GuPool* pool)+{+ PgfParse* parse = gu_new(PgfParse, pool);+ parse->abstr = abstr;+ parse->concr = concr;+ parse->agenda = NULL;+ parse->max_fid = max_fid;+ return parse;+}++typedef struct {+ PgfLexCallback fn;+ PgfToken tok;+ PgfItemBuf* agenda;+} PgfParseTokenCallback;++static+void pgf_match_token(PgfLexCallback* self, PgfToken tok, PgfItem* item)+{+ PgfParseTokenCallback *clo = (PgfParseTokenCallback *) self;++ if (gu_string_eq(tok, clo->tok)) {+ gu_buf_push(clo->agenda, PgfItem*, item);+ }+}++typedef struct {+ GuMapItor fn;+ PgfProduction prod;+ PgfItemBuf *metas;+ GuPool *pool;+} PgfGetMetaFn;++void+pgf_parsing_get_metas(GuMapItor* fn, const void* key, void* value,+ GuExn* err)+{+ PgfGetMetaFn* clo = (PgfGetMetaFn*) fn;+ PgfCCat *ccat = (PgfCCat *) key;+ PgfItemBufs* contss = *((PgfItemBufs **) value);+ PgfProduction prod = clo->prod;+ PgfItemBuf *metas = clo->metas;+ GuPool *pool = clo->pool;++ size_t n_lins = gu_list_length(contss);+ for (size_t lin_idx = 0; lin_idx < n_lins; lin_idx++) {+ PgfItemBuf* conts = gu_list_index(contss, lin_idx);++ if (conts != NULL) {+ PgfItem *item =+ pgf_new_item(ccat, lin_idx, prod, conts, pool);+ gu_buf_push(metas, PgfItem*, item);+ +#ifdef PGF_PARSER_DEBUG+ GuPool* tmp_pool = gu_new_pool();+ GuOut* out = gu_file_out(stderr, tmp_pool);+ GuWriter* wtr = gu_new_utf8_writer(out, tmp_pool);+ GuExn* err = gu_exn(NULL, type, tmp_pool);+ pgf_print_item(item, wtr, err);+ gu_pool_free(tmp_pool);+#endif+ }+ }+}++PgfParse*+pgf_parse_token(PgfParse* parse, PgfToken tok, bool robust, GuPool* pool)+{+ PgfItemBuf* agenda = gu_new_buf(PgfItem*, pool);++ PgfParseTokenCallback clo1 = {{ pgf_match_token }, tok, agenda};++ GuPool* tmp_pool = gu_new_pool();+ PgfParsing* parsing = pgf_new_parsing(parse->concr, &clo1.fn, parse->max_fid, pool, tmp_pool);+ parsing->lexicon_idx = gu_map_get(parse->concr->lexicon_idx, &tok, GuBuf*);++ size_t n_items = gu_buf_length(parse->agenda);+ for (size_t i = 0; i < n_items; i++) {+ PgfItem* item = gu_buf_get(parse->agenda, PgfItem*, i);+ pgf_parsing_item(parsing, item);+ }++ if (robust) {+ PgfProduction prod;+ PgfProductionMeta* pmeta =+ gu_new_variant(PGF_PRODUCTION_META,+ PgfProductionMeta,+ &prod, parsing->pool);+ pmeta->args = gu_new_seq(PgfPArg, 0, parsing->pool);++ PgfGetMetaFn clo2 = { { pgf_parsing_get_metas }, prod, parsing->metas, pool };+ gu_map_iter(parsing->conts_map, &clo2.fn, NULL);++ if (parsing->lexicon_idx != NULL) {+ size_t n_items = gu_buf_length(parsing->lexicon_idx);+ for (size_t i = 0; i < n_items; i++) {+ PgfItem* item = gu_buf_get(parsing->lexicon_idx, PgfItem*, i);+ + if (!pgf_parsing_has_conts(parsing->conts_map,+ item->base->ccat, item->base->lin_idx)) {+ pgf_parsing_bu_predict(parsing, item, agenda);+ }+ }+ } else {+ size_t n_items = gu_buf_length(parsing->metas);+ for (size_t i = 0; i < n_items; i++) {+ PgfItem* item = gu_buf_get(parsing->metas, PgfItem*, i);+ + pgf_item_advance(item, parsing->pool);+ pgf_parsing_add_transition(parsing, tok, item);+ }+ }+ }++ PgfParse* next_parse = NULL;+ if (gu_buf_length(agenda) > 0) {+ next_parse = pgf_new_parse(parse->abstr, parse->concr, parse->max_fid, pool);+ next_parse->agenda = agenda;+ next_parse->max_fid= parsing->max_fid;+ }++ gu_pool_free(tmp_pool);+ return next_parse;+}+++int cmp_expr_prob(GuOrder* self, const void* a, const void* b)+{+ PgfExprPState *s1 = (PgfExprPState *) a;+ PgfExprPState *s2 = (PgfExprPState *) b;++ if (s1->prob < s2->prob)+ return -1;+ else if (s1->prob > s2->prob)+ return 1;+ else+ return 0;+}++static GuOrder+pgf_expr_state_order = { cmp_expr_prob };++static void+pgf_parse_result_from_ccat(PgfParseResult *result, PgfCCat *ccat, + PgfExprPState *ps, GuPool *pool)+{+ size_t n_prods = gu_seq_length(ccat->prods);+ for (size_t i = 0; i < n_prods; i++) {+ PgfProduction prod =+ gu_seq_get(ccat->prods, PgfProduction, i);++ GuVariantInfo pi = gu_variant_open(prod);+ switch (pi.tag) {+ case PGF_PRODUCTION_APPLY: {+ PgfProductionApply* papp = pi.data;+ + PgfFunDecl *fun_decl =+ gu_map_get(result->abstr->funs, &papp->fun->fun, PgfFunDecl*);+ gu_assert(fun_decl != NULL);++ double prob = ps->prob - log(fun_decl->prob);++ PgfExprState *state = gu_new(PgfExprState, result->tmp_pool);+ state->prev = ps->state;+ PgfExprFun *expr_fun =+ gu_new_variant(PGF_EXPR_FUN,+ PgfExprFun,+ &state->expr, pool);+ expr_fun->fun = papp->fun->fun;+ state->args = papp->args;+ state->arg_idx = 0;+ + PgfExprPState ps1 = { prob, state };+ gu_buf_heap_push(result->pqueue, &pgf_expr_state_order, &ps1);+ break;+ }+ case PGF_PRODUCTION_COERCE: {+ PgfProductionCoerce* pcoerce = pi.data;+ pgf_parse_result_from_ccat(result, pcoerce->coerce, ps, pool);+ break;+ }+ case PGF_PRODUCTION_META: {+ PgfProductionMeta* pmeta = pi.data;++ double prob = ps->prob + 100000000000 + rand();++ PgfExprState *state = gu_new(PgfExprState, result->tmp_pool);+ state->prev = ps->state;+ PgfExprMeta *expr_meta =+ gu_new_variant(PGF_EXPR_META,+ PgfExprMeta,+ &state->expr, pool);+ expr_meta->id = 0;+ state->args = pmeta->args;+ state->arg_idx = 0;+ + PgfExprPState ps1 = { prob, state };+ gu_buf_heap_push(result->pqueue, &pgf_expr_state_order, &ps1);+ break;+ }+ }+ }+}++static PgfExpr+pgf_parse_result_next(PgfParseResult *result, GuPool *pool)+{+ if (result->pqueue == NULL)+ return gu_null_variant;++ while (gu_buf_length(result->pqueue) > 0) { + PgfExprPState ps;+ gu_buf_heap_pop(result->pqueue, &pgf_expr_state_order, &ps);+ + if (ps.state->arg_idx >= gu_seq_length(ps.state->args)) {+ PgfExprState *prev = ps.state->prev;++ if (prev == NULL)+ return ps.state->expr;++ PgfExprState *next = gu_new(PgfExprState, result->tmp_pool);+ next->prev = prev->prev;+ PgfExprApp *expr_apply =+ gu_new_variant(PGF_EXPR_APP,+ PgfExprApp,+ &next->expr, pool);+ expr_apply->fun = prev->expr;+ expr_apply->arg = ps.state->expr;+ next->args = prev->args;+ next->arg_idx = prev->arg_idx;+ + PgfExprPState ps1 = { ps.prob, next };+ gu_buf_heap_push(result->pqueue, &pgf_expr_state_order, &ps1);+ } else {+ PgfPArg *arg = gu_seq_index(ps.state->args, PgfPArg, ps.state->arg_idx++);+ + if (arg->ccat->fid < result->concr->total_cats) {+ PgfExpr fun = ps.state->expr;+ PgfExpr arg;+ PgfExprMeta *expr_meta =+ gu_new_variant(PGF_EXPR_META,+ PgfExprMeta,+ &arg, pool);+ expr_meta->id = 0;++ PgfExprApp *expr_apply =+ gu_new_variant(PGF_EXPR_APP,+ PgfExprApp,+ &ps.state->expr, pool);+ expr_apply->fun = fun;+ expr_apply->arg = arg;+ gu_buf_heap_push(result->pqueue, &pgf_expr_state_order, &ps);+ } else {+ pgf_parse_result_from_ccat(result, arg->ccat, &ps, pool);+ }+ }+ }+ + gu_pool_free(result->tmp_pool);+ result->tmp_pool = NULL;+ result->pqueue = NULL;+ return gu_null_variant;+}++static void+pgf_parse_result_enum_next(GuEnum* self, void* to, GuPool* pool)+{+ PgfParseResult* result = gu_container(self, PgfParseResult, en);+ *(PgfExpr*)to = pgf_parse_result_next(result, pool);+}++static+void pgf_noop(PgfLexCallback* self, PgfToken tok, PgfItem* item)+{+}++PgfExprEnum*+pgf_parse_result(PgfParse* parse, GuPool* pool)+{+ PgfLexCallback fn = { pgf_noop };++ GuPool* parsing_pool = gu_new_pool();+ PgfParsing* parsing = pgf_new_parsing(parse->concr, &fn, parse->max_fid, + pool, parsing_pool);+ size_t n_items = gu_buf_length(parse->agenda);+ for (size_t i = 0; i < n_items; i++) {+ PgfItem* item = gu_buf_get(parse->agenda, PgfItem*, i);+ pgf_parsing_item(parsing, item);+ }+ PgfCCatBuf *completed = parsing->completed;+ gu_pool_free(parsing_pool);++ GuPool *states_pool = gu_new_pool();+ PgfParseResult *result =+ gu_new_i(pool, PgfParseResult,+ .abstr = parse->abstr,+ .concr = parse->concr,+ .tmp_pool = states_pool,+ .pqueue = gu_new_buf(PgfExprPState, states_pool),+ .en.next = pgf_parse_result_enum_next);++ size_t n_completed = gu_buf_length(completed);+ for (size_t i = 0; i < n_completed; i++) {+ PgfCCat *ccat = gu_buf_get(completed, PgfCCat*, i);+ PgfExprPState ps = { 0, NULL };+ pgf_parse_result_from_ccat(result, ccat, &ps, pool);+ }++ return &result->en;+}++++// TODO: s/CId/Cat, add the cid to Cat, make Cat the key to CncCat+PgfParse*+pgf_parser_parse(PgfAbstr* abstr, PgfConcr* concr, PgfCId cat, size_t lin_idx, GuPool* pool)+{+ PgfCncCat* cnccat =+ gu_map_get(concr->cnccats, &cat, PgfCncCat*);+ if (!cnccat) {+ // error ...+ gu_impossible();+ }+ gu_assert(lin_idx < cnccat->n_lins);++ PgfParse* parse = pgf_new_parse(abstr, concr, concr->max_fid, pool);+ parse->agenda = gu_new_buf(PgfItem*, pool);++ PgfItemBuf* conts = gu_new_buf(PgfItem*, pool);+ gu_buf_push(conts, PgfItem*, NULL);++ size_t n_ccats = gu_list_length(cnccat->cats);+ for (size_t i = 0; i < n_ccats; i++) {+ PgfCCat* ccat = gu_list_index(cnccat->cats, i);+ if (ccat != NULL) {+ if (gu_seq_is_null(ccat->prods)) {+ // Empty category+ continue;+ }+ + PgfProductionSeq prods = ccat->prods;+ size_t n_prods = gu_seq_length(prods);+ for (size_t i = 0; i < n_prods; i++) {+ PgfProduction prod =+ gu_seq_get(prods, PgfProduction, i);+ PgfItem* item = + pgf_new_item(ccat, lin_idx, prod, conts, pool);+ gu_buf_push(parse->agenda, PgfItem*, item);+ }+ }+ }+ return parse;+}++static void+pgf_parser_bu_add_entry(PgfConcr* concr, PgfTokens tokens,+ PgfItem* item,+ GuPool *pool)+{+ PgfToken tok = gu_seq_get(tokens, PgfToken, 0);+ + GuBuf* items = gu_map_get(concr->lexicon_idx, &tok, GuBuf*);+ if (items == NULL) {+ items = gu_new_buf(PgfItemBase*, pool);+ gu_map_put(concr->lexicon_idx, &tok, GuBuf*, items);+ }++ gu_buf_push(items, PgfItem*, item);+}++void+pgf_parser_bu_item(PgfConcr* concr, PgfItem* item, + PgfContsMap* conts_map,+ GuPool *pool, GuPool *tmp_pool)+{+ GuVariantInfo i = gu_variant_open(item->base->prod);+ switch (i.tag) {+ case PGF_PRODUCTION_APPLY: {+ PgfProductionApply* papp = i.data;++ PgfSequence seq = papp->fun->lins[item->base->lin_idx];+ if (item->seq_idx < gu_seq_length(seq)) {+ GuVariantInfo i = gu_variant_open(item->curr_sym);+ switch (i.tag) {+ case PGF_SYMBOL_CAT: {+ PgfSymbolCat* scat = i.data;++ // Place the item in the continuation map+ PgfPArg* parg =+ gu_seq_index(item->args, PgfPArg, scat->d);+ PgfItemBuf* conts_ =+ pgf_parsing_get_conts(conts_map, + parg->ccat, scat->r,+ pool, tmp_pool);+ gu_buf_push(conts_, PgfItem*, item);++ // If the current category has epsilon rules+ // then we must do the same for a new item where + // the dot is moved with one position.+ PgfCFCat cfc = {parg->ccat->fid, scat->r};+ PgfCCat* eps_ccat =+ gu_map_get(concr->epsilon_idx, &cfc, PgfCCat*);++ if (eps_ccat != NULL) {+ PgfItem* new_item =+ pgf_item_update_arg(item, scat->d, eps_ccat, pool);+ pgf_item_advance(new_item, pool);+ pgf_parser_bu_item(concr, new_item, conts_map,+ pool, tmp_pool);+ }+ break;+ }+ case PGF_SYMBOL_KS: {+ PgfSymbolKS* sks = i.data;+ + item->tok_idx++;+ if (item->tok_idx == gu_seq_length(sks->tokens)) {+ item->tok_idx = 0;+ pgf_item_advance(item, pool);+ }++ pgf_parser_bu_add_entry(concr, sks->tokens,+ item, pool);+ break;+ }+ case PGF_SYMBOL_KP: {+ PgfSymbolKP* skp = i.data;++ item->tok_idx++;+ if (item->tok_idx == gu_seq_length(skp->default_form)) {+ item->tok_idx = 0;+ pgf_item_advance(item, pool);+ }++ pgf_parser_bu_add_entry(concr, skp->default_form,+ item, pool);+ for (size_t i = 0; i < skp->n_forms; i++) {+ pgf_parser_bu_add_entry(concr, skp->forms[i].form,+ item, pool);+ }+ break;+ }+ case PGF_SYMBOL_LIT:+ // XXX TODO proper support+ break;+ case PGF_SYMBOL_VAR:+ // XXX TODO proper support+ break;+ default:+ gu_impossible();+ }+ } else {+ PgfCFCat cfc = {item->base->ccat->fid, item->base->lin_idx};+ PgfCCat* tmp_ccat =+ gu_map_get(concr->epsilon_idx, &cfc, PgfCCat*);++ PgfCCat* eps_ccat = tmp_ccat;+ if (eps_ccat == NULL) {+ eps_ccat = gu_new(PgfCCat, pool);+ eps_ccat->cnccat = item->base->ccat->cnccat;+ eps_ccat->fid = concr->max_fid++;+ eps_ccat->prods = + gu_buf_seq(gu_new_buf(PgfProduction, pool));+ eps_ccat->n_synprods = 0;+ gu_map_put(concr->epsilon_idx, &cfc, PgfCCat*, eps_ccat);+ }++ PgfProduction prod =+ pgf_parsing_new_production(item, pool);+ GuBuf* prodbuf = gu_seq_buf(eps_ccat->prods);+ gu_buf_push(prodbuf, PgfProduction, prod);+ eps_ccat->n_synprods++;++ if (tmp_ccat == NULL) {+ size_t n_items = gu_buf_length(item->base->conts);+ for (size_t i = 0; i < n_items; i++) {+ PgfItem* cont = + gu_buf_get(item->base->conts, PgfItem*, i);++ gu_assert(gu_variant_tag(cont->curr_sym) == PGF_SYMBOL_CAT);+ PgfSymbolCat* scat = gu_variant_data(cont->curr_sym);++ PgfItem* new_item =+ pgf_item_update_arg(cont, scat->d, eps_ccat, pool);+ pgf_item_advance(new_item, pool);+ pgf_parser_bu_item(concr, new_item, conts_map,+ pool, tmp_pool);+ }+ }+ }+ }+ break;+ case PGF_PRODUCTION_COERCE: {+ PgfPArg* parg =+ gu_seq_index(item->args, PgfPArg, 0);+ PgfItemBuf* conts_ =+ pgf_parsing_get_conts(conts_map,+ parg->ccat, item->base->lin_idx,+ pool, tmp_pool);+ gu_buf_push(conts_, PgfItem*, item);++ // If the argument category has epsilon rules+ // then the result category has epsilon rules too.+ PgfCFCat cfc = {parg->ccat->fid, item->base->lin_idx};+ PgfCCat* eps_arg_ccat =+ gu_map_get(concr->epsilon_idx, &cfc, PgfCCat*);++ if (eps_arg_ccat != NULL) { + PgfCFCat cfc = {item->base->ccat->fid, item->base->lin_idx};+ PgfCCat* tmp_ccat =+ gu_map_get(concr->epsilon_idx, &cfc, PgfCCat*);++ PgfCCat* eps_res_ccat = tmp_ccat;+ if (eps_res_ccat == NULL) {+ eps_res_ccat = gu_new(PgfCCat, pool);+ eps_res_ccat->cnccat = item->base->ccat->cnccat;+ eps_res_ccat->fid = concr->max_fid++;+ eps_res_ccat->prods = + gu_buf_seq(gu_new_buf(PgfProduction, pool));+ eps_res_ccat->n_synprods = 0;+ gu_map_put(concr->epsilon_idx, &cfc, PgfCCat*, eps_res_ccat);+ }++ PgfProduction prod;+ PgfProductionCoerce* new_pcoerce =+ gu_new_variant(PGF_PRODUCTION_COERCE,+ PgfProductionCoerce,+ &prod, pool);+ new_pcoerce->coerce = eps_arg_ccat;++ GuBuf* prodbuf = gu_seq_buf(eps_res_ccat->prods);+ gu_buf_push(prodbuf, PgfProduction, prod);+ eps_res_ccat->n_synprods++;++ if (tmp_ccat == NULL) {+ size_t n_items = gu_buf_length(item->base->conts);+ for (size_t i = 0; i < n_items; i++) {+ PgfItem* cont = + gu_buf_get(item->base->conts, PgfItem*, i);++ gu_assert(gu_variant_tag(cont->curr_sym) == PGF_SYMBOL_CAT);+ PgfSymbolCat* scat = gu_variant_data(cont->curr_sym);++ PgfItem* new_item =+ pgf_item_update_arg(cont, scat->d, eps_res_ccat, pool);+ pgf_item_advance(new_item, pool);+ pgf_parser_bu_item(concr, new_item, conts_map,+ pool, tmp_pool);+ }+ }+ }+ break;+ }+ default:+ gu_impossible();+ }+}++void+pgf_parser_bu_index(PgfConcr* concr, PgfCCat* ccat, PgfProduction prod, + PgfContsMap* conts_map,+ GuPool *pool, GuPool *tmp_pool)+{+ for (size_t lin_idx = 0; lin_idx < ccat->cnccat->n_lins; lin_idx++) {+ PgfItemBuf* conts =+ pgf_parsing_get_conts(conts_map, ccat, lin_idx,+ pool, tmp_pool);+ PgfItem* item =+ pgf_new_item(ccat, lin_idx, prod, conts, pool);++ pgf_parser_bu_item(concr, item, conts_map, pool, tmp_pool);+ }+}++bool+pgf_cfcat_eq_fn(GuEquality* self, const void* a, const void* b)+{+ PgfCFCat *x = (PgfCFCat *) a;+ PgfCFCat *y = (PgfCFCat *) b;+ + return (x->fid == y->fid && x->lin_idx == y->lin_idx);+}++GuHash+pgf_cfcat_hash_fn(GuHasher* self, const void* a)+{+ PgfCFCat *x = (PgfCFCat *) a;+ return ((x->fid << 16) ^ x->lin_idx);+}++GuHasher pgf_cfcat_hasher = {+ { pgf_cfcat_eq_fn },+ pgf_cfcat_hash_fn+};
@@ -0,0 +1,103 @@+#ifndef PGF_PARSER_H_+#define PGF_PARSER_H_++#include <gu/enum.h>+#include <pgf/data.h>+#include <pgf/expr.h>++/// Parsing+/** @file+ *+ * @todo Querying the parser for expected continuations+ *+ * @todo Literals and custom categories+ * + * @todo HOAS, dependent types...+ */++typedef struct PgfParse PgfParse;++/** @}+ * + * @name Parsing a sentence+ *+ * The progress of parsing is controlled by the client code. Firstly, the+ * parsing of a sentence is initiated with #pgf_parser_parse. This returns an+ * initial #PgfParse object, which represents the state of the parsing. A new+ * parse state is obtained by feeding a token with #pgf_parse_token. The old+ * parse state is unaffected by this, so backtracking - and even branching -+ * can be accomplished by retaining the earlier #PgfParse objects.+ *+ * @{+ */++/// Begin parsing+PgfParse*+pgf_parser_parse(PgfAbstr* abstr, PgfConcr* concr, PgfCId cat, size_t lin_idx, GuPool* pool);+/**<+ * @param parser The parser to use+ *+ * @param cat The identifier of the abstract category to parse+ *+ * @param lin_idx The index of the field of the concrete category to parse+ *+ * @pool+ *+ * @return An initial parsing state.+*/+++/// Feed a token to the parser+PgfParse*+pgf_parse_token(PgfParse* parse, PgfToken tok, bool robust, GuPool* pool);+/**<+ * @param parse The current parse state+ *+ * @param tok The token to feed+ *+ * @pool+ *+ * @return A new parse state obtained by feeding \p tok as an input to \p+ * parse, or \c NULL if the token was unexpected.+ *+ * @note The new parse state partially depends on the old one, so it doesn't+ * make sense to use a \p pool argument with a longer lifetime than that of+ * the pool used to create \parse.+ */+++/** @}+ * @name Retrieving abstract syntax trees+ *+ * After the desired tokens have been fed to the parser, the resulting parse+ * state can be queried for completed results. The #pgf_parse_result function+ * returns an enumeration (#GuEnum) of possible abstract syntax trees whose+ * linearization is the sequence of tokens fed so far.+ *+ * @{+ */+++/// An enumeration of #PgfExpr elements.+typedef GuEnum PgfExprEnum;+++/// Retrieve the current parses from the parse state.+PgfExprEnum*+pgf_parse_result(PgfParse* parse, GuPool* pool);+/**<+ * @param parse A parse state+ *+ * @pool+ * + * @return An enumeration of #PgfExpr elements representing the abstract+ * syntax trees that would linearize to the sequence of tokens fed to produce+ * \p parse. The enumeration may yield zero, one or more abstract syntax+ * trees, depending on whether the parse was unsuccesful, unambiguously+ * succesful, or ambiguously successful.+ */+++/** @} */++#endif // PGF_PARSER_H_
@@ -0,0 +1,80 @@+/* + * Copyright 2010 University of Helsinki.+ * + * This file is part of libpgf.+ * + * Libpgf is free software: you can redistribute it and/or modify it under+ * the terms of the GNU Lesser General Public License as published by the+ * Free Software Foundation, either version 3 of the License, or (at your+ * option) any later version.+ * + * Libpgf is distributed in the hope that it will be useful, but WITHOUT+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public+ * License for more details.+ * + * You should have received a copy of the GNU Lesser General Public+ * License along with libpgf. If not, see <http://www.gnu.org/licenses/>.+ */++/** @file+ *+ * The public libpgf API.+ */++#ifndef PGF_H_+#define PGF_H_++#include <gu/exn.h>+#include <gu/mem.h>+#include <gu/in.h>+#include <gu/string.h>+++typedef GuString PgfCId;+extern GU_DECLARE_TYPE(PgfCId, typedef);+++/// A single lexical token +typedef GuString PgfToken; ++/// @name PGF Grammar objects+/// @{++typedef struct PgfPGF PgfPGF;++/**< A representation of a PGF grammar. + */+++PgfPGF*+pgf_read(GuIn* in, GuPool* pool, GuExn* err); ++/**< Read a grammar from a PGF file.+ *+ * @param from PGF input stream.+ * The stream must be positioned in the beginning of a binary+ * PGF representation. After a succesful invocation, the stream is+ * still open and positioned at the end of the representation.+ *+ * @param[out] err_out Raised error.+ * If non-\c NULL, \c *err_out should be \c NULL. Then, upon+ * failure, \c *err_out is set to point to a newly allocated+ * error object, which the caller must free with #g_exn_free+ * or #g_exn_propagate.+ *+ * @return A new PGF object, or \c NULL upon failure. The returned+ * object must later be freed with #pgf_free.+ *+ */+++#include <gu/type.h>+GU_DECLARE_TYPE(PgfPGF, struct);++/// @}++void+pgf_print(PgfPGF* pgf, GuWriter* wtr, GuExn* err); ++#endif // PGF_H_
@@ -0,0 +1,356 @@+#include <pgf/data.h>++typedef struct {+ GuMapItor fn;+ GuWriter* wtr;+} PgfPrintFn;++void+pgf_print_flag(GuMapItor* fn, const void* key, void* value,+ GuExn* err)+{+ PgfPrintFn* clo = (PgfPrintFn*) fn;+ PgfCId flag = *((PgfCId *) key);+ PgfLiteral lit = *((PgfLiteral *) value);+ GuWriter *wtr = clo->wtr;+ + gu_puts(" flag ", wtr, err);+ gu_string_write(flag, wtr, err);+ gu_puts(" = ", wtr, err);+ pgf_print_literal(lit, wtr, err);+ gu_puts(";\n", wtr, err);+}++void+pgf_print_cat(GuMapItor* fn, const void* key, void* value,+ GuExn* err)+{+ PgfPrintFn* clo = (PgfPrintFn*) fn;+ PgfCId name = *((PgfCId *) key);+ PgfCat *cat = *((PgfCat **) value);+ GuWriter *wtr = clo->wtr;++ gu_puts(" cat ", wtr, err);+ gu_string_write(name, wtr, err);++ size_t n_hypos = gu_seq_length(cat->context);+ for (size_t i = 0; i < n_hypos; i++) {+ PgfHypo* hypo = gu_seq_get(cat->context, PgfHypo*, i);+ gu_putc(' ', wtr, err);+ pgf_print_hypo(hypo, 4, wtr, err);+ }++ gu_puts(" ;\n", wtr, err);+}++void+pgf_print_absfun(GuMapItor* fn, const void* key, void* value,+ GuExn* err)+{+ PgfPrintFn* clo = (PgfPrintFn*) fn;+ PgfCId name = *((PgfCId *) key);+ PgfFunDecl *fun = *((PgfFunDecl **) value);+ GuWriter *wtr = clo->wtr;+ + gu_puts(gu_seq_is_null(fun->defns) ? " data " : " fun ", wtr, err);+ gu_string_write(name, wtr, err);+ gu_puts(" : ", wtr, err);+ pgf_print_type(fun->type, 0, wtr, err);+ gu_puts(" ;\n", wtr, err);+}+static void+pgf_print_abstract(PgfCId absname, PgfAbstr* abstr, + GuWriter* wtr, GuExn* err)+{+ gu_puts("abstract ", wtr, err);+ gu_string_write(absname, wtr, err);+ gu_puts(" {\n", wtr, err);+ + PgfPrintFn clo1 = { { pgf_print_flag }, wtr };+ gu_map_iter(abstr->aflags, &clo1.fn, err);++ PgfPrintFn clo2 = { { pgf_print_cat }, wtr };+ gu_map_iter(abstr->cats, &clo2.fn, err);++ PgfPrintFn clo3 = { { pgf_print_absfun }, wtr };+ gu_map_iter(abstr->funs, &clo3.fn, err);+ + gu_puts("}\n", wtr, err);+}++static void+pgf_print_productions(GuMapItor* fn, const void* key, void* value,+ GuExn* err)+{+ PgfPrintFn* clo = (PgfPrintFn*) fn;+ int fid = *((int *) key);+ PgfCCat* ccat = *((PgfCCat**) value);+ GuWriter *wtr = clo->wtr;++ if (!gu_seq_is_null(ccat->prods)) {+ size_t n_prods = gu_seq_length(ccat->prods);+ for (size_t i = 0; i < n_prods; i++) {+ PgfProduction prod = gu_seq_get(ccat->prods, PgfProduction, i);+ + gu_printf(wtr,err," C%d -> ",fid);++ GuVariantInfo i = gu_variant_open(prod);+ switch (i.tag) {+ case PGF_PRODUCTION_APPLY: {+ PgfProductionApply* papp = i.data;+ gu_printf(wtr,err,"F%d[",papp->fun->funid);+ size_t n_args = gu_seq_length(papp->args);+ for (size_t j = 0; j < n_args; j++) {+ if (j > 0)+ gu_putc(',',wtr,err);+ + PgfPArg arg = gu_seq_get(papp->args, PgfPArg, j);++ if (arg.hypos != NULL) {+ size_t n_hypos = gu_list_length(arg.hypos);+ for (size_t k = 0; k < n_hypos; k++) {+ if (k > 0)+ gu_putc(' ',wtr,err);+ PgfCCat *hypo = gu_list_index(arg.hypos, k);+ gu_printf(wtr,err,"C%d",hypo->fid);+ }+ }+ + gu_printf(wtr,err,"C%d",arg.ccat->fid);+ }+ gu_printf(wtr,err,"]\n");+ break;+ }+ case PGF_PRODUCTION_COERCE: {+ PgfProductionCoerce* pcoerce = i.data;+ gu_printf(wtr,err,"_[C%d]\n",pcoerce->coerce->fid);+ break;+ }+ default:+ gu_impossible();+ }+ }+ }+}++static void+pgf_print_lindefs(GuMapItor* fn, const void* key, void* value,+ GuExn* err)+{+ PgfPrintFn* clo = (PgfPrintFn*) fn;+ int fid = *((int *) key);+ PgfCCat* ccat = *((PgfCCat**) value);+ GuWriter *wtr = clo->wtr;+ + if (ccat->lindefs != NULL) {+ gu_printf(wtr,err," C%d -> ",fid);+ + size_t n_lindefs = gu_list_length(ccat->lindefs);+ for (size_t i = 0; i < n_lindefs; i++) {+ if (i > 0) gu_putc(' ', wtr, err);+ + PgfFunId funid = gu_list_index(ccat->lindefs, i);+ gu_printf(wtr,err,"F%d",funid->funid);+ }+ + gu_putc('\n', wtr,err);+ }+}++static void+pgf_print_cncfun(PgfCncFun *cncfun, PgfSequences *sequences, + GuWriter *wtr, GuExn *err)+{+ gu_printf(wtr,err," F%d := (", cncfun->funid);+ + size_t n_seqs = gu_list_length(sequences);+ + for (size_t i = 0; i < cncfun->n_lins; i++) {+ if (i > 0) gu_putc(',', wtr, err);+ PgfSequence seq = cncfun->lins[i];++ for (size_t seqid = 0; seqid < n_seqs; seqid++) {+ if (gu_seq_data(gu_list_index(sequences, seqid)) == gu_seq_data(seq)) {+ gu_printf(wtr,err,"S%d", seqid);+ break;+ }+ }+ }+ + gu_puts(") [", wtr, err);+ gu_string_write(cncfun->fun, wtr, err);+ gu_puts("]\n", wtr, err);+}++static void+pgf_print_tokens(PgfTokens tokens, GuWriter *wtr, GuExn *err)+{+ gu_putc('"', wtr, err);+ size_t n_toks = gu_seq_length(tokens);+ for (size_t i = 0; i < n_toks; i++) {+ if (i > 0) gu_putc(' ', wtr, err);+ + PgfToken tok = gu_seq_get(tokens, PgfToken, i);+ gu_string_write(tok, wtr, err);+ }+ gu_putc('"', wtr, err);+}++void+pgf_print_symbol(PgfSymbol sym, GuWriter *wtr, GuExn *err)+{+ switch (gu_variant_tag(sym)) {+ case PGF_SYMBOL_CAT: {+ PgfSymbolCat* scat = gu_variant_data(sym);+ gu_printf(wtr, err, "<%d,%d>", scat->d, scat->r);+ break;+ }+ case PGF_SYMBOL_KS: {+ PgfSymbolKS* sks = gu_variant_data(sym);+ pgf_print_tokens(sks->tokens, wtr, err);+ break;+ }+ case PGF_SYMBOL_KP: {+ PgfSymbolKP* skp = gu_variant_data(sym);++ gu_puts("pre {", wtr, err);+ pgf_print_tokens(skp->default_form, wtr, err);+ + for (size_t i = 0; i < skp->n_forms; i++) {+ gu_puts("; ", wtr, err);+ pgf_print_tokens(skp->forms[i].form, wtr, err);+ gu_puts(" / ", wtr, err);+ + size_t n_prefixes = gu_list_length(skp->forms[i].prefixes);+ for (size_t j = 0; j < n_prefixes; j++) {+ if (j > 0) gu_putc(' ', wtr, err);+ + GuString prefix = gu_list_index(skp->forms[i].prefixes, j);+ gu_putc('"', wtr, err);+ gu_string_write(prefix, wtr, err);+ gu_putc('"', wtr, err);+ }+ }+ + gu_puts("}", wtr, err);+ break;+ }+ case PGF_SYMBOL_LIT: {+ PgfSymbolLit *slit = gu_variant_data(sym);+ gu_printf(wtr, err, "{%d,%d}", slit->d, slit->r);+ break;+ }+ case PGF_SYMBOL_VAR: {+ PgfSymbolVar *svar = gu_variant_data(sym);+ gu_printf(wtr, err, "<%d,$%d>", svar->d, svar->r);+ break;+ }+ default:+ gu_impossible();+ }+}++static void+pgf_print_sequence(size_t seqid, PgfSequence seq, GuWriter *wtr, GuExn *err)+{+ gu_printf(wtr,err," S%d := ", seqid);++ int n_syms = gu_seq_length(seq);+ for (int i = 0; i < n_syms; i++) {+ if (i > 0) gu_putc(' ', wtr, err);+ + PgfSymbol sym = gu_seq_get(seq, PgfSymbol, i);+ pgf_print_symbol(sym, wtr, err);+ }++ gu_putc('\n', wtr, err);+}++static void+pgf_print_cnccat(GuMapItor* fn, const void* key, void* value,+ GuExn* err)+{+ PgfPrintFn* clo = (PgfPrintFn*) fn;+ PgfCId name = *((PgfCId *) key);+ PgfCncCat* cnccat = *((PgfCncCat**) value);+ GuWriter *wtr = clo->wtr;+ + gu_puts(" ", wtr, err);+ gu_string_write(name, wtr, err);+ gu_puts(" :=\n", wtr, err);+ + PgfCCat *start = gu_list_index(cnccat->cats, 0);+ PgfCCat *end = gu_list_index(cnccat->cats, gu_list_length(cnccat->cats)-1);+ + gu_printf(wtr, err, " range [C%d..C%d]\n", start->fid, end->fid);+ + gu_puts(" labels [", wtr, err);+ for (size_t i = 0; i < cnccat->n_lins; i++) {+ if (i > 0) {+ gu_puts("\n ", wtr, err);+ }++ gu_string_write(cnccat->labels[i], wtr, err);+ }+ gu_puts("]\n", wtr, err);+}++static void+pgf_print_concrete(PgfCId cncname, PgfConcr* concr, + GuWriter* wtr, GuExn* err)+{+ gu_puts("concrete ", wtr, err);+ gu_string_write(cncname, wtr, err);+ gu_puts(" {\n", wtr, err);++ PgfPrintFn clo1 = { { pgf_print_flag }, wtr };+ gu_map_iter(concr->cflags, &clo1.fn, err);++ gu_puts(" productions\n", wtr, err);+ PgfPrintFn clo2 = { { pgf_print_productions }, wtr };+ gu_map_iter(concr->ccats, &clo2.fn, err);++ gu_puts(" lindefs\n", wtr, err);+ PgfPrintFn clo3 = { { pgf_print_lindefs }, wtr };+ gu_map_iter(concr->ccats, &clo3.fn, err);++ gu_puts(" lin\n", wtr, err);+ size_t n_funs = gu_list_length(concr->cncfuns);+ for (size_t i = 0; i < n_funs; i++) {+ PgfCncFun* cncfun = gu_list_index(concr->cncfuns, i);+ pgf_print_cncfun(cncfun, concr->sequences, wtr, err);+ }++ gu_puts(" sequences\n", wtr, err);+ size_t n_seqs = gu_list_length(concr->sequences);+ for (size_t i = 0; i < n_seqs; i++) {+ PgfSequence seq = gu_list_index(concr->sequences, i);+ pgf_print_sequence(i, seq, wtr, err);+ }+ + gu_puts(" categories\n", wtr, err);+ PgfPrintFn clo4 = { { pgf_print_cnccat }, wtr };+ gu_map_iter(concr->cnccats, &clo4.fn, err);+ + gu_puts("}\n", wtr, err);+}++static void+pgf_print_concr_cb(GuMapItor* fn, const void* key, void* value,+ GuExn* err)+{+ PgfPrintFn* clo = (PgfPrintFn*) fn;+ PgfCId cncname = *((PgfCId *) key);+ PgfConcr *concr = *((PgfConcr **) value);++ pgf_print_concrete(cncname, concr, clo->wtr, err);+}++void+pgf_print(PgfPGF* pgf, GuWriter* wtr, GuExn* err)+{+ pgf_print_abstract(pgf->absname, &pgf->abstract, wtr, err);+ + PgfPrintFn clo = { { pgf_print_concr_cb }, wtr };+ gu_map_iter(pgf->concretes, &clo.fn, err);+}
@@ -0,0 +1,884 @@+/* + * Copyright 2010 University of Helsinki.+ * + * This file is part of libpgf.+ * + * Libpgf is free software: you can redistribute it and/or modify it under+ * the terms of the GNU Lesser General Public License as published by the+ * Free Software Foundation, either version 3 of the License, or (at your+ * option) any later version.+ * + * Libpgf is distributed in the hope that it will be useful, but WITHOUT+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public+ * License for more details.+ * + * You should have received a copy of the GNU Lesser General Public+ * License along with libpgf. If not, see <http://www.gnu.org/licenses/>.+ */++#include "data.h"+#include "expr.h"+#include <gu/defs.h>+#include <gu/map.h>+#include <gu/seq.h>+#include <gu/assert.h>+#include <gu/intern.h>+#include <gu/in.h>+#include <gu/bits.h>+#include <gu/exn.h>+#include <gu/utf8.h>++#define GU_LOG_ENABLE+#include <gu/log.h>++typedef struct PgfIdContext PgfIdContext;++typedef GuMap PgfContsMap;++//+// PgfReader+// ++typedef struct PgfReader PgfReader;++struct PgfReader {+ GuIn* in;+ GuExn* err;+ GuPool* opool;+ GuPool* tmp_pool;+ GuSymTable* symtab;+ PgfConcr* curr_concr;+ GuMap* curr_lindefs;+ PgfContsMap* curr_conts_map; // used temporary for building the bu index for the parser+ GuTypeMap* read_to_map;+ GuTypeMap* read_new_map;+ void* curr_key;+};++typedef struct PgfReadTagExn PgfReadTagExn;++struct PgfReadTagExn {+ GuType* type;+ int tag;+};++static GU_DEFINE_TYPE(PgfReadTagExn, abstract, _);++static GU_DEFINE_TYPE(PgfReadExn, abstract, _);++static uint8_t+pgf_read_u8(PgfReader* rdr)+{+ uint8_t u = gu_in_u8(rdr->in, rdr->err);+ gu_debug("u8: %u", u);+ return u;+}++static uint32_t+pgf_read_uint(PgfReader* rdr)+{+ uint32_t u = 0;+ int shift = 0;+ uint8_t b = 0;+ do {+ b = pgf_read_u8(rdr);+ gu_return_on_exn(rdr->err, 0);+ u |= (b & ~0x80) << shift;+ shift += 7;+ } while (b & 0x80);+ gu_debug("uint: %u", u);+ return u;+}++static int32_t+pgf_read_int(PgfReader* rdr)+{+ uint32_t u = pgf_read_uint(rdr);+ return gu_decode_2c32(u, rdr->err);+}++static GuLength+pgf_read_len(PgfReader* rdr)+{+ int32_t len = pgf_read_int(rdr);+ // It's crucial that we return 0 on failure, so the+ // caller can proceed without checking for error+ // immediately.+ gu_return_on_exn(rdr->err, 0);+ if (len < 0) {+ gu_raise_i(rdr->err, PgfReadTagExn,+ .type = gu_type(GuLength), .tag = len);+ return 0;+ }+ return (GuLength) len;+}++typedef const struct PgfReadToFn PgfReadToFn;++struct PgfReadToFn {+ void (*fn)(GuType* type, PgfReader* rdr, void* to);+};++static void +pgf_read_to(PgfReader* rdr, GuType* type, void* to) {+ PgfReadToFn* fn = gu_type_map_get(rdr->read_to_map, type);+ fn->fn(type, rdr, to);+}++typedef const struct PgfReadNewFn PgfReadNewFn;+struct PgfReadNewFn {+ void* (*fn)(GuType* type, PgfReader* rdr, GuPool* pool, + size_t* size_out);+};++static void*+pgf_read_new(PgfReader* rdr, GuType* type, GuPool* pool, size_t* size_out)+{+ size_t size = 0;+ PgfReadNewFn* fn = gu_type_map_get(rdr->read_new_map, type);+ return fn->fn(type, rdr, pool, size_out ? size_out : &size);+}++static void*+pgf_read_new_type(GuType* type, PgfReader* rdr, GuPool* pool, + size_t* size_out)+{+ GuTypeRepr* repr = gu_type_repr(type);+ void* to = gu_malloc_aligned(pool, repr->size, repr->align);+ pgf_read_to(rdr, type, to);+ *size_out = repr->size;+ return to;+}++static void*+pgf_read_struct(GuStructRepr* stype, PgfReader* rdr, void* to, + GuPool* pool, size_t* size_out)+{+ GuTypeRepr* repr = gu_type_cast((GuType*)stype, repr);+ size_t size = repr->size;+ GuLength length = 0;+ bool have_length = false;+ uint8_t* p = NULL;+ uint8_t* bto = to;+ gu_enter("-> struct %s", stype->name);++ for (int i = 0; i < stype->members.len; i++) {+ const GuMember* m = &stype->members.elems[i];+ gu_enter("-> %s.%s", stype->name, m->name);+ if (m->is_flex) {+ gu_assert(have_length && p == NULL && pool != NULL);+ size_t m_size = gu_type_size(m->type);+ size = gu_flex_size(size, m->offset,+ length, m_size);+ p = gu_malloc_aligned(pool, size, repr->align);+ for (size_t j = 0; j < length; j++) {+ pgf_read_to(rdr, m->type, + &p[m->offset + j * m_size]);+ gu_return_on_exn(rdr->err, NULL);+ }+ } else {+ pgf_read_to(rdr, m->type, &bto[m->offset]);+ gu_return_on_exn(rdr->err, NULL);+ }+ if (m->type == gu_type(GuLength)) {+ gu_assert(!have_length);+ have_length = true;+ length = gu_member(GuLength, to, m->offset);+ }+ gu_exit("<- %s.%s", stype->name, m->name);+ }+ if (p) {+ memcpy(p, to, repr->size);+ }+ if (size_out) {+ *size_out = size;+ }+ gu_exit("<- struct %s", stype->name);+ return p;+}++static void+pgf_read_to_struct(GuType* type, PgfReader* rdr, void* to)+{+ GuStructRepr* stype = gu_type_cast(type, struct);+ pgf_read_struct(stype, rdr, to, NULL, NULL);+}++static void*+pgf_read_new_struct(GuType* type, PgfReader* rdr, + GuPool* pool, size_t* size_out)+{+ GuStructRepr* stype = gu_type_cast(type, struct);+ if (gu_struct_has_flex(stype)) {+ GuPool* tmp_pool = gu_new_pool();+ void* to = gu_type_malloc(type, tmp_pool);+ void* p = pgf_read_struct(stype, rdr, to, pool, size_out);+ gu_pool_free(tmp_pool);+ gu_assert(p);+ return p;+ } else {+ void* to = gu_type_malloc(type, pool);+ pgf_read_struct(stype, rdr, to, NULL, NULL);+ return to;+ }+}+++static void+pgf_read_to_pointer(GuType* type, PgfReader* rdr, void* to)+{+ GuPointerType* ptype = (GuPointerType*) type;+ GuType* pointed = ptype->pointed_type;+ gu_require(gu_type_has_kind(pointed, gu_kind(struct)) ||+ gu_type_has_kind(pointed, gu_kind(abstract)));+ GuStruct** sto = to;+ *sto = pgf_read_new(rdr, pointed, rdr->opool, NULL);+}++static void+pgf_read_to_GuVariant(GuType* type, PgfReader* rdr, void* to)+{+ GuVariantType* vtype = (GuVariantType*) type;+ GuVariant* vto = to;++ uint8_t btag = pgf_read_u8(rdr);+ gu_return_on_exn(rdr->err,);+ if (btag >= vtype->ctors.len) {+ gu_raise_i(rdr->err, PgfReadTagExn, + .type = type, .tag = btag);+ return;+ }+ GuConstructor* ctor = &vtype->ctors.elems[btag];+ gu_enter("-> variant %s", ctor->c_name);+ GuPool* tmp_pool = gu_new_pool();+ GuTypeRepr* repr = gu_type_repr(ctor->type);+ size_t size = repr->size;+ void* init = pgf_read_new(rdr, ctor->type, tmp_pool, &size);+ *vto = gu_make_variant(btag, size, repr->align, init, rdr->opool);+ gu_pool_free(tmp_pool);+ gu_exit("<- variant %s", ctor->c_name);+}++static void+pgf_read_to_enum(GuType* type, PgfReader* rdr, void* to)+{+ // For now, assume that enum values are encoded in a single octet+ GuEnumType* etype = (GuEnumType*) type;+ uint8_t tag = pgf_read_u8(rdr);+ gu_return_on_exn(rdr->err,);+ if (tag >= etype->constants.len) {+ gu_raise_i(rdr->err, PgfReadTagExn, + .type = type, .tag = tag);+ return;+ }+ GuEnumConstant* econ = &etype->constants.elems[tag];+ size_t size = gu_type_size(type);+ if (size == sizeof(int8_t)) {+ *((int8_t*) to) = econ->value;+ } else if (size == sizeof(int16_t)) {+ *((int16_t*) to) = econ->value;+ } else if (size == sizeof(int32_t)) {+ *((int32_t*) to) = econ->value;+ } else if (size == sizeof(int64_t)) {+ *((int64_t*) to) = econ->value;+ } else {+ gu_impossible();+ }+}++static void+pgf_read_to_void(GuType* info, PgfReader* rdr, void* to)+{+ (void) (info && rdr && to);+}+++static void+pgf_read_to_int(GuType* type, PgfReader* rdr, void* to) +{+ (void) type;+ *(int*) to = pgf_read_int(rdr);+}++static void+pgf_read_to_uint16_t(GuType* type, PgfReader* rdr, void* to)+{+ (void) type;+ *(uint16_t*) to = gu_in_u16be(rdr->in, rdr->err);+}++static void+pgf_read_to_GuLength(GuType* type, PgfReader* rdr, void* to)+{+ (void) type;+ *(GuLength*) to = pgf_read_len(rdr);+}++static void+pgf_read_to_double(GuType* type, PgfReader* rdr, void* to)+{+ (void) type;+ *(double*) to = gu_in_f64be(rdr->in, rdr->err);+}++static void+pgf_read_to_alias(GuType* type, PgfReader* rdr, void* to)+{+ GuTypeAlias* atype = gu_type_cast(type, alias);+ pgf_read_to(rdr, atype->type, to);+}++static void+pgf_read_into_map(GuMapType* mtype, PgfReader* rdr, GuMap* map)+{+ GuPool* tmp_pool = gu_new_pool();+ void* key = NULL;+ GuLength len = pgf_read_len(rdr);+ gu_return_on_exn(rdr->err, );+ if (mtype->hasher) {+ key = gu_type_malloc(mtype->key_type, tmp_pool);+ }+ for (size_t i = 0; i < len; i++) {+ if (mtype->hasher) {+ pgf_read_to(rdr, mtype->key_type, key);+ } else {+ key = pgf_read_new(rdr, mtype->key_type, + rdr->opool, NULL);+ }+ gu_return_on_exn(rdr->err, );+ rdr->curr_key = key;+ /* If an old value already exists, read into+ it. This allows us to create the value+ object and point into it before we read the+ content. */+ void* val0p = gu_map_insert(map, key);+ void* valp = pgf_read_new(rdr, mtype->value_type, tmp_pool, NULL);+ // if the map has been updated,+ // then the old val0p may not be valid.+ val0p = gu_map_find(map, key); + memcpy(val0p, valp, gu_type_size(mtype->value_type));+ gu_return_on_exn(rdr->err, );+ }+ gu_pool_free(tmp_pool);+}++static void*+pgf_read_new_GuMap(GuType* type, PgfReader* rdr, GuPool* pool, size_t* size_out)+{+ (void) size_out;+ GuMapType* mtype = (GuMapType*) type;+ GuMap* map = gu_map_type_make(mtype, pool);+ pgf_read_into_map(mtype, rdr, map);+ gu_return_on_exn(rdr->err, NULL);+ return map;+}++static void+pgf_read_to_GuString(GuType* type, PgfReader* rdr, void* to)+{+ (void) (type);+ gu_enter("-> GuString");+ GuString* sp = to;+ + GuPool* tmp_pool = gu_new_pool();+ GuStringBuf* sbuf = gu_string_buf(tmp_pool);+ GuWriter* wtr = gu_string_buf_writer(sbuf);++ GuLength len = pgf_read_len(rdr);++ for (size_t i = 0; i < len; i++) {+ GuUCS ucs = gu_in_utf8(rdr->in, rdr->err);+ gu_ucs_write(ucs, wtr, rdr->err);+ }+ GuString str = gu_string_buf_freeze(sbuf, tmp_pool);+ GuSymbol sym = gu_symtable_intern(rdr->symtab, str);+ gu_pool_free(tmp_pool);++ gu_exit("<- GuString");+ *sp = sym;+}++static void+pgf_read_to_PgfCId(GuType* type, PgfReader* rdr, void* to)+{+ (void) (type);+ gu_enter("-> PgfCId");+ PgfCId* sp = to;+ + GuPool* tmp_pool = gu_new_pool();+ GuStringBuf* sbuf = gu_string_buf(tmp_pool);+ GuWriter* wtr = gu_string_buf_writer(sbuf);++ GuLength len = pgf_read_len(rdr);++ for (size_t i = 0; i < len; i++) {+ // CIds are in latin-1+ GuUCS ucs = gu_in_u8(rdr->in, rdr->err);+ gu_ucs_write(ucs, wtr, rdr->err);+ }+ GuString str = gu_string_buf_freeze(sbuf, tmp_pool);+ GuSymbol sym = gu_symtable_intern(rdr->symtab, str);+ gu_pool_free(tmp_pool);++ gu_exit("<- PgfCId");+ *sp = sym;+}++static void+pgf_read_to_PgfCCatId(GuType* type, PgfReader* rdr, void* to)+{+ (void) (type);+ PgfCCat** pto = to;+ int fid = pgf_read_int(rdr);+ gu_return_on_exn(rdr->err,);++ PgfCCat* ccat = gu_map_get(rdr->curr_concr->ccats, &fid, PgfCCat*);+ if (!ccat) {+ ccat = gu_new(PgfCCat, rdr->opool);+ ccat->cnccat = NULL;+ ccat->lindefs = gu_map_get(rdr->curr_lindefs, &fid, PgfFunIds*);+ ccat->n_synprods = 0;+ ccat->prods = gu_null_seq;+ ccat->fid = fid;++ gu_map_put(rdr->curr_concr->ccats, &fid, PgfCCat*, ccat);+ }++ *pto = ccat;+}++static void+pgf_read_to_PgfCCat(GuType* type, PgfReader* rdr, void* to)+{+ (void) type;+ gu_enter("->");+ int* fidp = rdr->curr_key;++ GuLength n_prods = pgf_read_len(rdr);+ gu_return_on_exn(rdr->err, );+ + PgfCCat* ccat = to;+ ccat->cnccat = NULL;+ ccat->lindefs = gu_map_get(rdr->curr_lindefs, fidp, PgfFunIds*);+ ccat->prods = gu_new_seq(PgfProduction, n_prods, rdr->opool);+ ccat->fid = *fidp;+ + size_t top = 0;+ size_t bot = n_prods-1;+ for (size_t i = 0; i < n_prods; i++) {+ PgfProduction prod;+ pgf_read_to(rdr, gu_type(PgfProduction), &prod);+ gu_return_on_exn(rdr->err, );+ + GuVariantInfo i = gu_variant_open(prod);+ switch (i.tag) {+ case PGF_PRODUCTION_APPLY: {+ PgfProductionApply* papp = i.data;+ if (gu_seq_length(papp->args) > 0)+ gu_seq_set(ccat->prods, PgfProduction, top++, prod);+ else+ gu_seq_set(ccat->prods, PgfProduction, bot--, prod);+ break;+ }+ case PGF_PRODUCTION_COERCE: {+ gu_seq_set(ccat->prods, PgfProduction, top++, prod);+ break;+ }+ default:+ gu_impossible();+ }+ }++ ccat->n_synprods = top;++ gu_exit("<-");+}++// This is only needed because new_struct would otherwise override.+// TODO: get rid of new_struct and all the FAM mess+static void*+pgf_read_new_PgfCCat(GuType* type, PgfReader* rdr, GuPool* pool,+ size_t* size_out)+{+ PgfCCat* ccat = gu_map_get(rdr->curr_concr->ccats, rdr->curr_key, PgfCCat*);+ if (!ccat) {+ ccat = gu_new(PgfCCat, pool);+ gu_map_put(rdr->curr_concr->ccats, rdr->curr_key, PgfCCat*, ccat);+ }+ pgf_read_to_PgfCCat(type, rdr, ccat);+ *size_out = sizeof(PgfCCat);+ return ccat;+}++static void*+pgf_read_new_GuList(GuType* type, PgfReader* rdr, GuPool* pool, size_t* size_out)+{+ GuListType* ltype = gu_type_cast(type, GuList);+ GuLength length = pgf_read_len(rdr);+ gu_return_on_exn(rdr->err, NULL);+ void* list = gu_list_type_alloc(ltype, length, pool);+ for (size_t i = 0; i < length; i++) {+ void* elem = gu_list_type_index(ltype, list, i);+ pgf_read_to(rdr, ltype->elem_type, elem);+ gu_return_on_exn(rdr->err, NULL);+ }+ *size_out = gu_flex_size(ltype->size, ltype->elems_offset,+ length, + gu_type_size(ltype->elem_type));+ return list;+}++static void+pgf_read_to_GuSeq(GuType* type, PgfReader* rdr, void* to)+{+ gu_enter("->");+ GuSeqType* stype = gu_type_cast(type, GuSeq);+ GuLength length = pgf_read_len(rdr);+ GuTypeRepr* repr = gu_type_repr(stype->elem_type);+ gu_return_on_exn(rdr->err, );+ GuSeq seq = gu_make_seq(repr->size, length, rdr->opool);+ uint8_t* data = gu_seq_data(seq);+ for (size_t i = 0; i < length; i++) {+ void* elem = &data[i * repr->size];+ pgf_read_to(rdr, stype->elem_type, elem);+ gu_return_on_exn(rdr->err, );+ }+ GuSeq* sto = to;+ *sto = seq;+ gu_exit("<-");+}++static void+pgf_read_to_PgfEquationsM(GuType* type, PgfReader* rdr, void* to)+{+ GuSeq* sto = to;+ uint8_t tag = pgf_read_u8(rdr);+ gu_return_on_exn(rdr->err,);+ switch (tag) {+ case 0:+ *sto = gu_null_seq;+ break;+ case 1: {+ GuLength length = pgf_read_len(rdr);+ gu_return_on_exn(rdr->err, );++ GuSeq seq = gu_new_seq(PgfEquation*, length, rdr->opool);+ PgfEquation** data = gu_seq_data(seq);+ for (size_t i = 0; i < length; i++) {+ GuLength n_patts = pgf_read_len(rdr);+ gu_return_on_exn(rdr->err, );++ PgfEquation *equ =+ gu_malloc(rdr->opool, + sizeof(PgfEquation)+sizeof(PgfPatt)*n_patts);+ equ->n_patts = n_patts;+ for (GuLength j = 0; j < n_patts; j++) {+ pgf_read_to(rdr, gu_type(PgfPatt), &equ->patts[j]);+ gu_return_on_exn(rdr->err, );+ }+ pgf_read_to(rdr, gu_type(PgfExpr), &equ->body);+ gu_return_on_exn(rdr->err, );++ data[i] = equ;+ }+ *sto = seq;+ break;+ }+ default:+ gu_raise_i(rdr->err, PgfReadTagExn,+ .type = type, .tag = tag);+ break;+ }+}++static void+pgf_read_to_PgfSeqId(GuType* type, PgfReader* rdr, void* to)+{+ (void) type;+ int32_t id = pgf_read_int(rdr);+ gu_return_on_exn(rdr->err,);+ if (id < 0 || id >= gu_list_length(rdr->curr_concr->sequences)) {+ gu_raise(rdr->err, PgfReadExn);+ return;+ }+ *(PgfSeqId*) to = gu_list_elems(rdr->curr_concr->sequences)[id];+}+++static void+pgf_read_to_PgfFunId(GuType* type, PgfReader* rdr, void* to)+{+ (void) type;+ int32_t id = pgf_read_int(rdr);+ gu_return_on_exn(rdr->err,);+ if (id < 0 || id >= gu_list_length(rdr->curr_concr->cncfuns)) {+ gu_raise(rdr->err, PgfReadExn);+ return;+ }+ *(PgfFunId*) to = gu_list_elems(rdr->curr_concr->cncfuns)[id];+}++static GU_DEFINE_TYPE(PgfLinDefs, GuIntMap, gu_ptr_type(PgfFunIds),+ &gu_null_struct);+typedef PgfCCat PgfCCatData;+static GU_DEFINE_TYPE(PgfCCatData, typedef, gu_type(PgfCCat));++static GU_DEFINE_TYPE(PgfCCatMap, GuIntMap, gu_ptr_type(PgfCCat),+ &gu_null_struct);++static GU_DEFINE_TYPE(PgfCncCatMap, GuStringMap, gu_ptr_type(PgfCncCat),+ &gu_null_struct);++static PgfCncCat*+pgf_ccat_set_cnccat(PgfCCat* ccat)+{+ if (!ccat->cnccat) {+ size_t n_prods = gu_seq_length(ccat->prods);+ for (size_t i = 0; i < n_prods; i++) {+ PgfProduction prod = + gu_seq_get(ccat->prods, PgfProduction, i);+ GuVariantInfo i = gu_variant_open(prod);+ switch (i.tag) {+ case PGF_PRODUCTION_COERCE: {+ PgfProductionCoerce* pcoerce = i.data;+ PgfCncCat* cnccat = + pgf_ccat_set_cnccat(pcoerce->coerce);+ if (!ccat->cnccat) {+ ccat->cnccat = cnccat;+ } else if (ccat->cnccat != cnccat) {+ // XXX: real error+ gu_impossible();+ }+ break;+ }+ case PGF_PRODUCTION_APPLY:+ // Shouldn't happen with current PGF.+ // XXX: real error+ gu_impossible();+ break;+ default:+ gu_impossible();+ }+ }+ }+ return ccat->cnccat;+}++typedef struct {+ GuMapItor fn;+ PgfReader* rdr;+} PgfIndexFn;++static void+pgf_read_ccat_cb(GuMapItor* fn, const void* key, void* value, GuExn* err)+{+ (void) (key && err);+ PgfCCat* ccat = *((PgfCCat**) value);++ pgf_ccat_set_cnccat(ccat);+}++extern GU_DECLARE_TYPE(PgfContsMap, GuMap);++void+pgf_parser_bu_index(PgfConcr* concr, PgfCCat* cat, PgfProduction prod, + PgfContsMap* conts_map,+ GuPool *pool, GuPool *tmp_pool);++void+pgf_lzr_index(PgfConcr* concr, PgfCCat* cat, PgfProduction prod, + GuPool *pool);++static void+pgf_index_prods(GuMapItor* fn, const void* key, void* value, GuExn* err)+{+ (void) (key && err);+ + PgfIndexFn* clo = (PgfIndexFn*) fn;+ PgfCCat* ccat = *((PgfCCat**) value);+ PgfReader *rdr = clo->rdr;++ if (gu_seq_is_null(ccat->prods))+ return;++ size_t n_prods = gu_seq_length(ccat->prods);+ for (size_t i = 0; i < n_prods; i++) {+ PgfProduction prod = gu_seq_get(ccat->prods, PgfProduction, i);++ pgf_parser_bu_index(rdr->curr_concr, ccat, prod, + rdr->curr_conts_map,+ rdr->opool, rdr->tmp_pool);+ pgf_lzr_index(rdr->curr_concr, ccat, prod, rdr->opool);+ }+}++static void*+pgf_read_new_PgfConcr(GuType* type, PgfReader* rdr, GuPool* pool,+ size_t* size_out)+{+ (void) (type && size_out);+ PgfConcr* concr = gu_new(PgfConcr, pool);+ rdr->curr_concr = concr;+ concr->cflags = + pgf_read_new(rdr, gu_type(PgfFlags), pool, NULL);+ concr->printnames = + pgf_read_new(rdr, gu_type(PgfPrintNames), pool, NULL);+ concr->sequences = + pgf_read_new(rdr, gu_type(PgfSequences), pool, NULL);+ concr->cncfuns =+ pgf_read_new(rdr, gu_type(PgfCncFuns), pool, NULL);+ GuMapType* lindefs_t = gu_type_cast(gu_type(PgfLinDefs), GuMap);+ rdr->curr_lindefs = gu_map_type_make(lindefs_t, rdr->tmp_pool);+ pgf_read_into_map(lindefs_t, rdr, rdr->curr_lindefs);+ rdr->curr_conts_map = gu_map_type_new(PgfContsMap, rdr->tmp_pool);+ GuMapType* ccats_t = gu_type_cast(gu_type(PgfCCatMap), GuMap);+ concr->ccats =+ gu_new_int_map(PgfCCat*, &gu_null_struct, pool);+ concr->fun_indices = gu_map_type_new(PgfFunIndices, pool);+ concr->coerce_idx = gu_map_type_new(PgfCoerceIdx, pool);+ concr->lexicon_idx = gu_map_type_new(PgfTransitions,pool);+ concr->epsilon_idx = gu_map_type_new(PgfEpsilonIdx, pool);+ pgf_read_into_map(ccats_t, rdr, concr->ccats);+ concr->cnccats = pgf_read_new(rdr, gu_type(PgfCncCatMap), pool, NULL);+ concr->total_cats = pgf_read_int(rdr);+ concr->max_fid = concr->total_cats;++ PgfIndexFn clo1 = { { pgf_read_ccat_cb }, rdr };+ gu_map_iter(concr->ccats, &clo1.fn, NULL);+ + PgfIndexFn clo2 = { { pgf_index_prods }, rdr };+ gu_map_iter(concr->ccats, &clo2.fn, NULL);++ // set the function ids+ int n_funs = gu_list_length(concr->cncfuns);+ for (int funid = 0; funid < n_funs; funid++) {+ PgfCncFun* cncfun = gu_list_index(concr->cncfuns, funid);+ cncfun->funid = funid;+ }++ return concr;+}++static void*+pgf_read_new_PgfCncCat(GuType* type, PgfReader* rdr, GuPool* pool,+ size_t* size_out)+{+ PgfCId cid = *(PgfCId*) rdr->curr_key;+ gu_enter("-> cid");+ (void) (type && size_out);+ + int first = pgf_read_int(rdr);+ int last = pgf_read_int(rdr);+ int n_lins = pgf_read_len(rdr);+ + PgfCncCat* cnccat =+ gu_malloc(pool, sizeof(PgfCncCat)+n_lins*sizeof(GuString));+ cnccat->cid = cid;++ int len = last + 1 - first;+ cnccat->cats = gu_new_list(PgfCCatIds, pool, len);+ + for (int i = 0; i < len; i++) {+ int fid = first + i;+ PgfCCat* ccat = gu_map_get(rdr->curr_concr->ccats, &fid, PgfCCat*);+ if (!ccat) {+ ccat = gu_new(PgfCCat, rdr->opool);+ ccat->cnccat = NULL;+ ccat->lindefs = gu_map_get(rdr->curr_lindefs, &fid, PgfFunIds*);+ ccat->n_synprods = 0;+ ccat->prods = gu_null_seq;+ ccat->fid = fid;++ gu_map_put(rdr->curr_concr->ccats, &fid, PgfCCat*, ccat);+ }+ gu_list_index(cnccat->cats, i) = ccat;++ ccat->cnccat = cnccat;+ gu_debug("range[%d] = %d", i, ccat ? ccat->fid : -1);+ }++ cnccat->n_lins = n_lins;+ for (size_t i = 0; i < cnccat->n_lins; i++) {+ pgf_read_to(rdr, gu_type(GuString), &cnccat->labels[i]);+ }+ + gu_exit("<-");+ return cnccat;+}++#define PGF_READ_TO_FN(k_, fn_) \+ { gu_kind(k_), (void*) &(PgfReadToFn){ fn_ } }++#define PGF_READ_TO(k_) \+ PGF_READ_TO_FN(k_, pgf_read_to_##k_)+++static GuTypeTable+pgf_read_to_table = GU_TYPETABLE(+ GU_SLIST_0,+ PGF_READ_TO(struct),+ PGF_READ_TO(GuVariant),+ PGF_READ_TO(enum),+ PGF_READ_TO(void),+ PGF_READ_TO(int),+ PGF_READ_TO(uint16_t),+ PGF_READ_TO(GuLength),+ PGF_READ_TO(PgfCId),+ PGF_READ_TO(GuString),+ PGF_READ_TO(double),+ PGF_READ_TO(pointer),+ PGF_READ_TO(PgfEquationsM),+ PGF_READ_TO(GuSeq),+ PGF_READ_TO(PgfCCatId),+ PGF_READ_TO(PgfCCat),+ PGF_READ_TO(PgfSeqId),+ PGF_READ_TO(PgfFunId),+ PGF_READ_TO(alias));++#define PGF_READ_NEW_FN(k_, fn_) \+ { gu_kind(k_), (void*) &(PgfReadNewFn){ fn_ } }++#define PGF_READ_NEW(k_) \+ PGF_READ_NEW_FN(k_, pgf_read_new_##k_)++static GuTypeTable+pgf_read_new_table = GU_TYPETABLE(+ GU_SLIST_0,+ PGF_READ_NEW(type),+ PGF_READ_NEW(struct),+ PGF_READ_NEW(GuMap),+ PGF_READ_NEW(GuList),+ PGF_READ_NEW(PgfCCat),+ PGF_READ_NEW(PgfCncCat),+ PGF_READ_NEW(PgfConcr)+ );++static PgfReader*+pgf_new_reader(GuIn* in, GuPool* opool, GuPool* tmp_pool, GuExn* err)+{+ PgfReader* rdr = gu_new(PgfReader, tmp_pool);+ rdr->opool = opool;+ rdr->tmp_pool = tmp_pool;+ rdr->symtab = gu_new_symtable(opool, tmp_pool);+ rdr->err = err;+ rdr->in = in;+ rdr->curr_concr = NULL;+ rdr->curr_lindefs = NULL;+ rdr->curr_conts_map = NULL;+ rdr->read_to_map = gu_new_type_map(&pgf_read_to_table, tmp_pool);+ rdr->read_new_map = gu_new_type_map(&pgf_read_new_table, tmp_pool);+ return rdr;+}+++PgfPGF*+pgf_read(GuIn* in, GuPool* pool, GuExn* err)+{+ GuPool* tmp_pool = gu_new_pool();+ PgfReader* rdr = pgf_new_reader(in, pool, tmp_pool, err);+ PgfPGF* pgf = pgf_read_new(rdr, gu_type(PgfPGF), pool, NULL);+ gu_pool_free(tmp_pool);+ gu_return_on_exn(err, NULL);+ return pgf;+}
@@ -1,22 +0,0 @@-#ifndef PGF_TYPE_H-#define PGF_TYPE_H--typedef struct _Hypo {- BindType bt;- CId var;- Type ty;-} *Hypo;--typedef struct _Context {- int size;- struct _Hypo hypos[];-} *Context;--struct _Type {- Context hypos;- CId cat;- int nArgs;- Expr args[];-};--#endif
@@ -1,248 +0,0 @@-#include "../pgf.h"-#include "data.h"-#include "panic.h"-#include <stdlib.h>--static void freeCId(CId id) {- free(id);-}--static void freeCIdList(CIdList ids) {- int i;- for (i = 0; i < ids->count; i++) {- freeCId(ids->names[i]);- }- free(ids);-}--static void freeString(String str) {- free(str);-}--static void freeLiteral(Literal lit) {- switch (lit->tag) {- case LIT_STR:- freeString (((LiteralStr) lit)->val);- break;- }- free(lit);-}--static void freeFlags(Flags flags) {- int i;- for (i = 0; i < flags->count; i++) {- freeCId(flags->values[i].name);- freeLiteral(flags->values[i].value);- } - free(flags);-}--static void freeContext(Context ctxt);-static void freeType(Type ty);--static void freeExpr(Expr e0) {- - switch (e0->tag) {- case TAG_ABS:- {- ExprAbs e = (ExprAbs) e0;- freeCId(e->var);- freeExpr(e->body);- }- break;- case TAG_APP:- {- ExprApp e = (ExprApp) e0;- freeExpr(e->left);- freeExpr(e->right);- }- break;- case TAG_LIT:- {- ExprLit e = (ExprLit) e0;- freeLiteral(e->lit);- }- break;- case TAG_MET:- {- ExprMeta e = (ExprMeta) e0;- }- break;- case TAG_FUN:- {- ExprFun e = (ExprFun) e0;- freeCId(e->fun);- }- break;- case TAG_VAR:- {- ExprVar e = (ExprVar) e0;- }- break;- case TAG_TYP:- {- ExprTyped e = (ExprTyped) e0;- freeExpr(e->e);- freeType(e->ty);- }- break;- case TAG_IMP:- {- ExprImplArg e = (ExprImplArg) e0;- freeExpr(e->e);- }- break;- default:- __pgf_panic("Unknown expression tag");- }- - free(e0);-}--static void freeType(Type ty) {- freeContext(ty->hypos);- freeCId(ty->cat);- - int i;- for (i = 0; i < ty->nArgs; i++) {- freeExpr(ty->args[i]);- }- - free(ty);-}--static void freeHypo(Hypo hypo) {- freeCId(hypo->var);- freeType(hypo->ty);-}--static void freeContext(Context ctxt) {- int i;- for (i = 0; i < ctxt->size; i++) {- freeHypo(&ctxt->hypos[i]);- } - free(ctxt);-}--static void freePatt(Patt p0) {- switch (p0->tag) {- case TAG_PAPP:- {- int i;- PattApp p = (PattApp) p0;- - freeCId(p->fun);- for (i = 0; i < p->args.count; i++) {- freePatt(p->args.pats[i]);- }- }- break;- case TAG_PVAR:- {- PattVar p = (PattVar) p0;- freeCId(p->var);- }- break;- case TAG_PAT:- {- PattAt p = (PattAt) p0;- freeCId(p->var);- freePatt(p->pat);- }- break;- case TAG_PWILD:- {- PattWild p = (PattWild) p0;- }- break;- case TAG_PLIT:- {- PattLit p = (PattLit) p0;- freeLiteral(p->lit);- }- break;- case TAG_PIMP:- {- PattImplArg p = (PattImplArg) p0;- freePatt(p->pat);- }- break;- case TAG_PTILDE:- {- PattTilde p = (PattTilde) p0;- freeExpr(p->e);- }- break;- default:- __pgf_panic("Unknown pattern tag");- }- - free(p0);-}--static void freePatts(Patts pats) {- int i;- for (i = 0; i < pats->count; i++) {- freePatt(pats->pats[i]);- }- free(pats);-}--static void freeEquations(Equations equs) {- int i;- for (i = 0; i < equs->count; i++) {- freePatts(equs->equs[i].lhs);- freeExpr(equs->equs[i].rhs);- }- free(equs);-}--static void freeAbsFun(AbsFun fun) {- freeCId(fun->name);- freeType(fun->ty);- freeEquations(fun->equs);-}--static void freeAbsFuns(AbsFuns funs) {- int i;- for (i = 0; i < funs->count; i++) {- freeAbsFun(&funs->lst[i]);- } - free(funs);-}--static void freeAbsCat(AbsCat cat) {- freeCId(cat->name);- freeContext(cat->hypos);- freeCIdList(cat->funs);-}--static void freeAbsCats(AbsCats cats) {- int i;- for (i = 0; i < cats->count; i++) {- freeAbsCat(&cats->lst[i]);- } - free(cats);-}--static void freeAbstract(Abstract abstr) {- freeCId(abstr->name);- freeFlags(abstr->flags);- freeAbsFuns(abstr->funs);- freeAbsCats(abstr->cats);-}--static void freeConcrete(Concrete concr) {-// freeCId(concr->name);-// freeFlags(concr->flags);-}--void freePGF(PGF pgf) {- int i;- - freeFlags(pgf->flags);- freeAbstract(&pgf->abstract);- for (i = 0; i < pgf->nConcr; i++)- freeConcrete(&pgf->concretes[i]);- free(pgf);-}
@@ -0,0 +1,29 @@+#include <pgf/pgf.h>+#include <pgf/data.h>++#include <gu/dump.h>+#include <gu/file.h>+#include <gu/utf8.h>++GU_DECLARE_TYPE(PgfAbstr, struct);++int main(void) {+ GuPool* pool = gu_new_pool();+ GuExn* err = gu_exn(NULL, type, pool);+ GuIn* in = gu_file_in(stdin, pool);+ PgfPGF* pgf = pgf_read(in, pool, err);+ int status = 0;+ if (!gu_ok(err)) {+ fprintf(stderr, "Reading PGF failed\n");+ status = 1;+ goto fail_read;+ }+ GuOut* out = gu_file_out(stdout, pool);+ GuWriter* wtr = gu_new_utf8_writer(out, pool);+ pgf_print(pgf, wtr, err);+ gu_writer_flush(wtr, err);+fail_read:+ gu_pool_free(pool);+ return status;+}+
@@ -0,0 +1,199 @@+#include <gu/variant.h>+#include <gu/map.h>+#include <gu/dump.h>+#include <gu/log.h>+#include <gu/enum.h>+#include <gu/file.h>+#include <pgf/pgf.h>+#include <pgf/data.h>+#include <pgf/parser.h>+#include <pgf/linearize.h>+#include <pgf/expr.h>+#include <pgf/edsl.h>+#include <stdio.h>+#include <stdlib.h>+#include <string.h>+#include <locale.h>+#include <time.h>++int main(int argc, char* argv[]) {+ // Set the character locale, so we can produce proper output.+ setlocale(LC_CTYPE, "");++ // Create the pool that is used to allocate everything+ GuPool* pool = gu_new_pool();+ int status = EXIT_SUCCESS;+ if (argc != 5) {+ fprintf(stderr, "usage: %s pgf [.]cat from_lang to_lang\n", argv[0]);+ status = EXIT_FAILURE;+ goto fail;+ }+ char* filename = argv[1];++ GuString cat;+ bool robust_mode;+ if (argv[2][0] == '.') {+ printf("%s\n", argv[2]+1);+ cat = gu_str_string(argv[2]+1, pool);+ robust_mode = true;+ } else {+ cat = gu_str_string(argv[2], pool);+ robust_mode = false;+ }++ GuString from_lang = gu_str_string(argv[3], pool);+ GuString to_lang = gu_str_string(argv[4], pool);+ + FILE* infile = fopen(filename, "r");+ if (infile == NULL) {+ fprintf(stderr, "couldn't open %s\n", filename);+ status = EXIT_FAILURE;+ goto fail;+ }++ // Create an input stream from the input file+ GuIn* in = gu_file_in(infile, pool);++ // Create an exception frame that catches all errors.+ GuExn* err = gu_new_exn(NULL, gu_kind(type), pool);++ // Read the PGF grammar.+ PgfPGF* pgf = pgf_read(in, pool, err);++ // If an error occured, it shows in the exception frame+ if (!gu_ok(err)) {+ fprintf(stderr, "Reading PGF failed\n");+ status = EXIT_FAILURE;+ goto fail_read;+ }++ // Look up the source and destination concrete categories+ PgfConcr* from_concr =+ gu_map_get(pgf->concretes, &from_lang, PgfConcr*);+ PgfConcr* to_concr =+ gu_map_get(pgf->concretes, &to_lang, PgfConcr*);+ if (!from_concr || !to_concr) {+ fprintf(stderr, "Unknown language\n");+ status = EXIT_FAILURE;+ goto fail_concr;+ }++ // Arbitrarily choose linearization index 0. Usually the initial+ // categories we are interested in only have one field.+ int lin_idx = 0;++ // Create an output stream for stdout+ GuOut* out = gu_file_out(stdout, pool);++ // Locale-encoding writers are currently unsupported+ // GuWriter* wtr = gu_locale_writer(out, pool);+ // Use a writer with hard-coded utf-8 encoding for now.+ GuWriter* wtr = gu_new_utf8_writer(out, pool);++ // The interactive translation loop.+ // XXX: This currently reads stdin directly, so it doesn't support+ // encodings properly. TODO: use a locale reader for input+ while (true) {+ fprintf(stdout, "> ");+ fflush(stdout);+ char buf[4096];+ char* line = fgets(buf, sizeof(buf), stdin);+ if (line == NULL) {+ if (ferror(stdin)) {+ fprintf(stderr, "Input error\n");+ status = EXIT_FAILURE;+ }+ break;+ } else if (line[0] == '\0') {+ // End nicely on empty input+ break;+ }+ // We create a temporary pool for translating a single+ // sentence, so our memory usage doesn't increase over time.+ GuPool* ppool = gu_new_pool();++ clock_t start = clock();++ // Begin parsing a sentence of the specified category+ PgfParse* parse =+ pgf_parser_parse(&pgf->abstract, from_concr, cat, lin_idx, pool);+ if (parse == NULL) {+ fprintf(stderr, "Couldn't begin parsing\n");+ status = EXIT_FAILURE;+ break;+ }++ // naive tokenization+ char* tok = strtok(line, " \n");+ while (tok) {+ GuString tok_s = gu_str_string(tok, pool);+ gu_debug("parsing token \"%s\"", tok);+ // feed the token to get a new parse state+ parse = pgf_parse_token(parse, tok_s, robust_mode, ppool);+ if (!parse) {+ fprintf(stderr,+ "Unexpected token: \"%s\"\n", tok);+ goto fail_parse;+ }+ tok = strtok(NULL, " \n");+ }+ + // Now begin enumerating the resulting syntax trees+ GuEnum* result = pgf_parse_result(parse, ppool);++ clock_t end = clock();++ double cpu_time_used = ((double) (end - start)) / CLOCKS_PER_SEC;+ printf("%.2f sec\n", cpu_time_used);++ while (true) {+ PgfExpr expr = gu_next(result, PgfExpr, ppool);+ + clock_t end = clock();+ + // The enumerator will return a null variant at the+ // end of the results.+ if (gu_variant_is_null(expr)) {+ break;+ }+ gu_putc(' ', wtr, err);+ // Write out the abstract syntax tree+ pgf_print_expr(expr, 0, wtr, err);+ gu_putc('\n', wtr, err);+ + if (robust_mode) {+ double cpu_time_used = ((double) (end - start)) / CLOCKS_PER_SEC;+ printf("%.2f sec\n", cpu_time_used);+ break;+ }++ // Enumerate the concrete syntax trees corresponding+ // to the abstract tree.+ GuEnum* cts = pgf_lzr_concretize(to_concr, expr, ppool);+ while (true) {+ PgfCncTree ctree =+ gu_next(cts, PgfCncTree, ppool);+ if (gu_variant_is_null(ctree)) {+ break;+ }+ gu_puts(" ", wtr, err);+ // Linearize the concrete tree as a simple+ // sequence of strings.+ pgf_lzr_linearize_simple(to_concr , ctree, lin_idx,+ wtr, err);+ gu_putc('\n', wtr, err);+ gu_writer_flush(wtr, err);+ }+ }+ fail_parse:+ // Free all resources allocated during parsing and linearization+ gu_pool_free(ppool);+ }+fail_concr:+fail_read:+ fclose(infile);+fail:+ gu_pool_free(pool);+ return status;+}+
@@ -0,0 +1,29 @@+#include <pgf/pgf.h>++#include <gu/dump.h>+#include <gu/file.h>+#include <gu/utf8.h>++int main(void) {+ GuPool* pool = gu_new_pool();+ GuExn* err = gu_exn(NULL, type, pool);+ GuIn* in = gu_file_in(stdin, pool);+ PgfPGF* pgf = pgf_read(in, pool, err);+ int status = 0;+ if (!gu_ok(err)) {+ fprintf(stderr, "Reading PGF failed\n");+ status = 1;+ goto fail_read;+ }+ GuOut* out = gu_file_out(stdout, pool);+ GuOut* bout = gu_out_buffered(out, pool);+ // GuWriter* wtr = gu_locale_writer(bout, pool);+ GuWriter* wtr = gu_new_utf8_writer(bout, pool);+ GuDump* ctx = gu_new_dump(wtr, NULL, err, pool);+ gu_dump(gu_type(PgfPGF), pgf, ctx);+ gu_writer_flush(wtr, err);+fail_read:+ gu_pool_free(pool);+ return status;+}+
@@ -48,6 +48,9 @@ , encodeFile -- :: Binary a => FilePath -> a -> IO () , decodeFile -- :: Binary a => FilePath -> IO a + , encodeFile_ -- :: FilePath -> Put -> IO ()+ , decodeFile_ -- :: FilePath -> Get a -> IO a+ -- Lazy put and get -- , lazyPut -- , lazyGet@@ -254,6 +257,9 @@ encodeFile :: Binary a => FilePath -> a -> IO () encodeFile f v = L.writeFile f (encode v) +encodeFile_ :: FilePath -> Put -> IO ()+encodeFile_ f m = L.writeFile f (runPut m)+ -- | Lazily reconstruct a value previously written to a file. -- -- This is just a convenience function, it's defined simply as:@@ -268,6 +274,11 @@ decodeFile f = bracket (openBinaryFile f ReadMode) hClose $ \h -> do s <- L.hGetContents h evaluate $ runGet get s++decodeFile_ :: FilePath -> Get a -> IO a+decodeFile_ f m = bracket (openBinaryFile f ReadMode) hClose $ \h -> do+ s <- L.hGetContents h+ evaluate $ runGet m s -- needs bytestring 0.9.1.x to work
@@ -200,4 +200,4 @@ xs <- replicateM n getArray -- now the elems. return (listArray (0,n-1) xs) -decodingError = fail "This PGF file was compiled with different version of GF" +decodingError = fail "This file was compiled with different version of GF"
@@ -121,7 +121,7 @@ generateForForest (prove dp) e) emptyMetaStore fid in if null res then Left (nub err) - else Right (nubsort [e | (_,_,e) <- res]) + else Right (nub [e | (_,_,e) <- res]) where go rec_ scope_ mb_tty_ (PArg hypos fid) | fid < totalCats cnc = case mb_tty of
@@ -1,4 +1,4 @@-module PGF.Printer (ppPGF,ppCat,ppFun) where+module PGF.Printer (ppPGF,ppCat,ppFId,ppFunId,ppSeqId,ppSeq,ppFun) where import PGF.CId import PGF.Data
@@ -56,13 +56,12 @@ getAbs xs (EAbs _ x e) = getAbs (x:xs) e getAbs xs (ETyped e _) = getAbs xs e- getAbs xs (EImplArg e) = getAbs xs e getAbs xs e = (xs,e) - getApp (EApp x y) es = getApp x (y:es)- getApp (ETyped e _) es = getApp e es- getApp (EImplArg e) es = getApp e es- getApp e es = (e,es)+ getApp (EApp x (EImplArg y)) es = getApp x es+ getApp (EApp x y) es = getApp x (y:es)+ getApp (ETyped e _) es = getApp e es+ getApp e es = (e,es) getLbl scope (EFun f) = let fun = if funs then ppCId f else empty cat = if cats then ppCId (lookValCat (abstract pgf) f) else empty
@@ -14,11 +14,13 @@ import Control.Monad import Control.Exception+import Control.Concurrent(forkIO) import System.Environment(getArgs) import System.Time import System.Locale import System.FilePath import Database.HSQL.MySQL+import Database.HSQL.Types(toSqlValue) logFile :: FilePath logFile = "content-error.log"
@@ -155,49 +155,49 @@ doTranslate :: PGF -> String -> Maybe PGF.Type -> Maybe PGF.Language -> Maybe PGF.Language -> JSValue doTranslate pgf input mcat mfrom mto = showJSON- [toJSObject (("from", showJSON from) :- ("brackets", showJSON bs) :- jsonParseOutput po)- | (from,po,bs) <- parse' pgf input mcat mfrom]+ [makeObj ("from".=from : "brackets".=bs : jsonTranslateOutput po)+ | (from,po,bs) <- parse' pgf input mcat mfrom] where- jsonParseOutput (PGF.ParseOk trees) = [("translations",showJSON - [toJSObject [("tree", showJSON tree),- ("linearizations",showJSON - [toJSObject [("to", showJSON to),- ("text",showJSON output)]- | (to,output) <- linearizeAndBind pgf mto tree]- )]- | tree <- trees])]- jsonParseOutput (PGF.ParseIncomplete)= []- jsonParseOutput (PGF.ParseFailed _) = []- jsonParseOutput (PGF.TypeError errs) = [("typeErrors",showJSON [toJSObject [("fid", showJSON fid)- ,("msg", showJSON (show (PGF.ppTcError err)))- ] | (fid,err) <- errs])]+ jsonTranslateOutput output =+ case output of+ PGF.ParseOk trees ->+ ["translations".=+ [makeObj ["tree".=tree,+ "linearizations".=+ [makeObj ["to".=to, "text".=output]+ | (to,output) <- linearizeAndBind pgf mto tree]] + | tree <- trees]]+ PGF.ParseIncomplete -> ["incomplete".=True]+ PGF.ParseFailed n -> ["parseFailed".=n]+ PGF.TypeError errs -> jsonTypeErrors errs +jsonTypeErrors errs = + ["typeErrors".= [makeObj ["fid".=fid, "msg".=show (PGF.ppTcError err)]+ | (fid,err) <- errs]]+ -- used in phrasebook doTranslateGroup :: PGF -> String -> Maybe PGF.Type -> Maybe PGF.Language -> Maybe PGF.Language -> JSValue doTranslateGroup pgf input mcat mfrom mto = showJSON- [toJSObject [("from", showJSON (langOnly (PGF.showLanguage from))),- ("to", showJSON (langOnly (PGF.showLanguage to))),- ("linearizations",showJSON - [toJSObject (("text", doText (doBind alt)) : disamb lg from ts) | - (ts,alt) <- output, let lg = length output])- ]- | - (from,po,bs) <- parse' pgf input mcat mfrom,- (to,output) <- groupResults [(t, linearize' pgf mto t) | t <- case po of {PGF.ParseOk ts -> ts; _ -> []}]+ [makeObj ["from".=langOnly (PGF.showLanguage from),+ "to".=langOnly (PGF.showLanguage to),+ "linearizations".=+ [toJSObject (("text", doText (doBind alt)) : disamb lg from ts)+ | (ts,alt) <- output, let lg = length output]+ ]+ | + (from,po,bs) <- parse' pgf input mcat mfrom,+ (to,output) <- groupResults [(t, linearize' pgf mto t) | t <- case po of {PGF.ParseOk ts -> ts; _ -> []}] ] where groupResults = Map.toList . foldr more Map.empty . start . collect where collect tls = [(t,(l,s)) | (t,ls) <- tls, (l,s) <- ls, notDisamb l] start ls = [(l,[([t],s)]) | (t,(l,s)) <- ls]- more (l,s) = - Map.insertWith (\ [([t],x)] xs -> insertAlt t x xs) l s+ more (l,s) = Map.insertWith (\ [([t],x)] xs -> insertAlt t x xs) l s insertAlt t x xs = case xs of- (ts,y):xs2 -> if x==y then (t:ts,y):xs2 -- if string is there add only tree+ (ts,y):xs2 -> if x==y then (t:ts,y):xs2 -- if string is there add only tree else (ts,y) : insertAlt t x xs2 _ -> [([t],x)] @@ -234,79 +234,77 @@ notDisamb = (/="Disamb") . take 6 . PGF.showLanguage doParse :: PGF -> String -> Maybe PGF.Type -> Maybe PGF.Language -> JSValue-doParse pgf input mcat mfrom = showJSON $ map toJSObject- [("from", showJSON from) :- ("brackets", showJSON bs) :- jsonParseOutput po- | (from,po,bs) <- parse' pgf input mcat mfrom]+doParse pgf input mcat mfrom = showJSON $ map makeObj+ ["from".=from : "brackets".=bs : jsonParseOutput po+ | (from,po,bs) <- parse' pgf input mcat mfrom] where- jsonParseOutput (PGF.ParseOk trees) = [("trees",showJSON trees)]- jsonParseOutput (PGF.ParseFailed _) = []- jsonParseOutput (PGF.TypeError errs) = [("typeErrors",showJSON [toJSObject [("fid", showJSON fid)- ,("msg", showJSON (show (PGF.ppTcError err)))- ] | (fid,err) <- errs])]+ jsonParseOutput output =+ case output of+ PGF.ParseOk trees -> ["trees".=trees]+ PGF.TypeError errs -> jsonTypeErrors errs+ PGF.ParseIncomplete -> ["incomlete".=True]+ PGF.ParseFailed n -> ["parseFailed".=n] doComplete :: PGF -> String -> Maybe PGF.Type -> Maybe PGF.Language -> Maybe Int -> JSValue-doComplete pgf input mcat mfrom mlimit = showJSON $ map toJSObject- [[("from", showJSON from),- ("brackets", showJSON bs),- ("completions", showJSON cs),- ("text", showJSON s)]- | from <- froms, let (bs,s,cs) = complete' pgf from cat mlimit input]+doComplete pgf input mcat mfrom mlimit = showJSON+ [makeObj ["from".=from, "brackets".=bs, "completions".=cs, "text".=s]+ | from <- froms, let (bs,s,cs) = complete' pgf from cat mlimit input] where froms = maybe (PGF.languages pgf) (:[]) mfrom cat = fromMaybe (PGF.startCat pgf) mcat doLinearize :: PGF -> PGF.Tree -> Maybe PGF.Language -> JSValue-doLinearize pgf tree mto = showJSON $- [toJSObject [("to", PGF.showLanguage to),("text",text)]+doLinearize pgf tree mto = showJSON+ [makeObj ["to".=PGF.showLanguage to, "text".=text] | (to,text) <- linearize' pgf mto tree] doLinearizes :: PGF -> PGF.Tree -> Maybe PGF.Language -> JSValue-doLinearizes pgf tree mto = showJSON $ - [toJSObject [("to", showJSON $ PGF.showLanguage to),- ("texts",showJSON texts)]- | (to,texts) <- linearizes' pgf mto tree]+doLinearizes pgf tree mto = showJSON+ [makeObj ["to".=PGF.showLanguage to, "texts".=texts]+ | (to,texts) <- linearizes' pgf mto tree] doRandom :: PGF -> Maybe PGF.Type -> Maybe Int -> Maybe Int -> Maybe PGF.Language -> IO JSValue doRandom pgf mcat mdepth mlimit mto = do g <- newStdGen let trees = PGF.generateRandomDepth g pgf cat (Just depth)- return $ showJSON $- [toJSObject [("tree", showJSON (PGF.showExpr [] tree)),- ("linearizations", showJSON [toJSObject [("to", PGF.showLanguage to),("text",text)] - | (to,text) <- linearize' pgf mto tree])]- | tree <- limit trees]+ return $ showJSON+ [makeObj ["tree".=PGF.showExpr [] tree,+ "linearizations".=+ [makeObj ["to".=PGF.showLanguage to, "text".=text] + | (to,text) <- linearize' pgf mto tree]]+ | tree <- limit trees] where cat = fromMaybe (PGF.startCat pgf) mcat limit = take (fromMaybe 1 mlimit) depth = fromMaybe 4 mdepth doGenerate :: PGF -> Maybe PGF.Type -> Maybe Int -> Maybe Int -> Maybe PGF.Language -> JSValue doGenerate pgf mcat mdepth mlimit mto = - let trees = PGF.generateAllDepth pgf cat (Just depth)- in showJSON $- [toJSObject [("tree", showJSON (PGF.showExpr [] tree)),- ("linearizations", showJSON [toJSObject [("to", PGF.showLanguage to),("text",text)] - | (to,text) <- linearize' pgf mto tree])]- | tree <- limit trees]- where cat = fromMaybe (PGF.startCat pgf) mcat- limit = take (fromMaybe 1 mlimit)- depth = fromMaybe 4 mdepth+ showJSON [makeObj ["tree".=PGF.showExpr [] tree,+ "linearizations".=+ [makeObj ["to".=PGF.showLanguage to, "text".=text]+ | (to,text) <- linearize' pgf mto tree]]+ | tree <- limit trees]+ where+ trees = PGF.generateAllDepth pgf cat (Just depth)+ cat = fromMaybe (PGF.startCat pgf) mcat+ limit = take (fromMaybe 1 mlimit)+ depth = fromMaybe 4 mdepth doGrammar :: PGF -> Maybe (Accept Language) -> JSValue-doGrammar pgf macc = showJSON $ toJSObject- [("name", showJSON (PGF.abstractName pgf)),- ("userLanguage", showJSON (selectLanguage pgf macc)),- ("startcat",showJSON (PGF.showType [] (PGF.startCat pgf))),- ("categories", showJSON categories),- ("functions", showJSON functions),- ("languages", showJSON languages)]- where languages = map toJSObject- [[("name", showJSON l), - ("languageCode", showJSON $ fromMaybe "" (PGF.languageCode pgf l))]- | l <- PGF.languages pgf]- categories = [PGF.showCId cat | cat <- PGF.categories pgf]- functions = [PGF.showCId fun | fun <- PGF.functions pgf]+doGrammar pgf macc = showJSON $ makeObj+ ["name".=PGF.abstractName pgf,+ "userLanguage".=selectLanguage pgf macc,+ "startcat".=PGF.showType [] (PGF.startCat pgf),+ "categories".=categories,+ "functions".=functions,+ "languages".=languages]+ where+ languages =+ [makeObj ["name".= l, + "languageCode".= fromMaybe "" (PGF.languageCode pgf l)]+ | l <- PGF.languages pgf]+ categories = [PGF.showCId cat | cat <- PGF.categories pgf]+ functions = [PGF.showCId fun | fun <- PGF.functions pgf] doGraphvizAbstrTree pgf tree = do pipeIt2graphviz $ PGF.graphvizAbstractTree pgf (True,True) tree@@ -433,13 +431,9 @@ instance JSON PGF.BracketedString where readJSON x = return (PGF.Leaf "")- showJSON (PGF.Bracket cat fid index _ bs)- = showJSON $ toJSObject [("cat", showJSON cat)- ,("fid", showJSON fid)- ,("index", showJSON index)- ,("children", showJSON bs)- ]- showJSON (PGF.Leaf s) = showJSON $ toJSObject [("token", s)]+ showJSON (PGF.Bracket cat fid index _ bs) =+ makeObj ["cat".=cat, "fid".=fid, "index".=index, "children".=bs]+ showJSON (PGF.Leaf s) = makeObj ["token".=s] -- * PGF utilities @@ -515,6 +509,8 @@ langCodeLanguage pgf code = listToMaybe [l | l <- PGF.languages pgf, PGF.languageCode pgf l == Just code] -- * General utilities++f .= v = (f,showJSON v) --cleanFilePath :: FilePath -> FilePath --cleanFilePath = takeFileName
@@ -8,10 +8,13 @@ flag fastcgi Description: Build the fastcgi service (requires the fastcgi package)+ (In Ubuntu: apt-get install libghc-fastcgi-dev) Default: False flag content- Description: Build content service (requires fastcgi and hsql-mysql packages)+ Description:+ Build content service (requires fastcgi and hsql-mysql packages)+ (In Ubuntu: apt-get install libghc-fastcgi-dev libghc-hsql-mysql-dev) Default: False executable pgf-http@@ -53,6 +56,7 @@ if flag(fastcgi) build-depends: fastcgi >= 3001.0.2.2+ -- Install it in Ubuntu with: apt-get install libghc-fastcgi-dev buildable: True else buildable: False@@ -78,8 +82,11 @@ executable content-service if flag(content)- build-depends: base >=4.2 && <5,- fastcgi >= 3001.0.2.2, hsql-mysql, hsql, old-locale+ build-depends: base >=4.2 && <5, old-locale,+ fastcgi >= 3001.0.2.2,+ -- In Ubuntu: apt-get install libghc-fastcgi-dev+ hsql-mysql, hsql+ -- In Ubuntu: apt-get install libghc-hsql-mysql-dev buildable: True else buildable: False
binary file changed (absent → 36233 bytes)
@@ -0,0 +1,95 @@+/* Copyright © Elnaz Abolahrar and Thomas Hallgren, 2011 */++body {+ background: #eee url("brushed-metal.png");+}++/* th, td { vertical-align: baseline; text-align: left; } */++div#surface {+ min-height: 3ex;+ margin: 5px;+ padding: 5px;+ border: 3px dashed #e0e0e0;+}++div#words {+ min-height: 3ex;+ margin: 5px;+ padding: 6px;+ border: 3px solid #e0e0e0;+}++div.word, span.word, div#words input[type=button] {+ display: inline-block;+ font-family: sans-serif;+ font-size: 100%;+ background-color: white;+ border: 1px solid black;+ padding: 3px;+ margin: 3px;+}++/* added for quiz */+ textarea.quest {+ width: 452px;+ height: 35px;+ font-size:16px;+ }++ textarea.explain {+ width: 452px;+ height: 70px;+ font-size:16px;+ }+ + input.answer1 {+ width: 442px;+ height: 20px;+ font-size:16px;+ }+ + div.hint {+ font-family: Verdana; + font-weight: bold; + font-size:16px;+ }+ + div.bold { + font-weight: bold; + font-size:16px;+ }+ + input.number {+ text-align:center; + font-family: Verdana; + font-weight: bold; + font-size:16px;+ }+ + div.shift_left {+ padding-left: 320px;+ }+ /* default for all links */+ a:link {color: #2E8B57; font-size:16px; font-weight: bold; text-decoration: underline; }+ a:active {color: #2E8B57; font-size:16px; font-weight: bold; text-decoration: underline; }+ a:visited {color: #2E8B57; font-size:16px; font-weight: bold; text-decoration: underline; }+ a:hover {color: #CD853F; font-size:16px; font-weight: bold; text-decoration: none; }++.invalid { color: red; }++div.modtime { float: right; }+.modtime { color: #444; white-space: nowrap; }++ul.space>li { margin-top: 0.5ex; }++div#saldospel input[type=button] { font-size: 100%; }++div#saldospel input.correct { color: green; }+div#saldospel input.incorrect { color: red; }++#surface input[type=text] { width: 5em; }+++span.field { background-color: #eee; }+
@@ -0,0 +1,640 @@+// Copyright © Elnaz Abolahrar and Thomas Hallgren, 2011++// minibar.js, assumes that support.js has also been loaded++var tree_icon="tree-btn.png";++/*+// This is essentially what happens when you call start_minibar:+if(server.grammar_list) grammars=server.grammar_list;+else grammars=server.get_grammarlist();+show_grammarlist(grammars)+select_grammar(grammars[0])+grammar_info=server.get_languages()+show_languages(grammar_info)+new_language()+complete_output=get_completions()+show_completions(complete_output)+*/++function Minibar(server,opts,target) {+ // Typically called when the HTML document is loaded++ /* --- Configuration ---------------------------------------------------- */++ // default values for options:+ this.options={+ show_abstract: false,+ show_trees: false,+ show_grouped_translations: true,+ delete_button_text: "⌫",+ default_source_language: null,+ + //modified for quiz+ try_google: false,+ + feedback_url: null,+ + //modified for quiz+ random_button: false,+ + help_url: null+ }++ // Apply supplied options+ if(opts) for(var o in opts) this.options[o]=opts[o];++ /* --- Creating user interface elements --------------------------------- */++ this.surface=div_id("surface");+ this.extra=div_id("extra");+ this.menubar=div_id("menubar");+ this.quizbar=div_id("quizbar");+ this.words=div_id("words");+ this.translations=div_id("translations");++ this.minibar=element(target || "minibar");+ this.minibar_contin=element("minibar_contin");+ this.minibar_buttons=element("minibar_buttons");+ this.minibar.innerHTML="";+ + //modified for quiz+ with(this) {+ appendChildren(minibar,[menubar, quizbar]);+ appendChildren(minibar_contin,[surface,words]);+ append_extra_buttons(extra,options);+ }++ // Filled in and added to minibar later:+ this.grammar_menu=empty_id("select","grammar_menu");+ this.from_menu=empty_id("select","from_menu");+ this.to_menu=empty_id("select","to_menu");+ ++ /* --- Minibar client state initialisation ------------------------------ */+ this.grammar=null;+ + //modified for quiz+ this.current={from: null, to:null, input: ""};+ + this.previous=null;++ this.server=server;++ /* --- Main program, this gets things going ----------------------------- */+ with(this) {+ if(server.grammar_list) show_grammarlist(server.grammar_list);+ else server.get_grammarlist(bind(show_grammarlist,this));+ }+}++/* --- Auxiliary functions ---------------------------------------------- */+++Minibar.prototype.show_grammarlist=function(grammars) {+ debug(this)+ with(this) {+ //debug("show_grammarlist ")+ menubar.innerHTML="";+ if(grammars.length>0) {+ function opt(g) { return option(g,g); }+ appendChildren(grammar_menu,map(opt,grammars));+ grammar_menu.onchange=+ bind(function() { select_grammar(grammar_menu.value); },this);+ appendChildren(menubar,[text("Grammar: "),grammar_menu]);+ }+ //modified for quiz+ appendChildren(menubar,+ [text(" From: "), from_menu,+ text(" To: "), to_menu]);+ //modified for quiz+ appendChildren(minibar_buttons,+ [button(options.delete_button_text,bind(delete_last,this),"H"),+ button("Clear",bind(clear_all,this),"L")]);+ + if(options.random_button)+ menubar.appendChild(button("Random",bind(generate_random,this),"R"));+ if(options.help_url)+ menubar.appendChild(button("Help",bind(open_help,this)));+ + select_grammar(grammars[0]);+ }+}++Minibar.prototype.select_grammar=function(grammar_name) {+ var t=this;+ //debug("select_grammar ");+ function get_languages() {+ t.server.get_languages(bind(t.show_languages,t));+ }+ t.server.switch_grammar(grammar_name,get_languages);+}++Minibar.prototype.show_languages=function(grammar_info) {+ var t=this;+ with(t) {+ //debug("show_languages ");+ grammar=grammar_info;++ var new_language=function () {+ current.from=from_menu.value;+ + //modified for quiz+ //clear_all();+ }+ + //added for quiz+ var change_tolang=function () {+ current.to=to_menu.value;+ + //var langname = element("to_menu").value;+ //to_menu.current={to: langname, input: ""};+ //clear_all();+ }+ + from_menu.onchange=bind(new_language,t);+ update_language_menu(from_menu,grammar);+ set_initial_language(options,from_menu,grammar);+ + //modified and added for quiz+ //to_menu.onchange=bind(get_translations,t);+ to_menu.onchange=bind(change_tolang,t);+ + update_language_menu(to_menu,grammar);+ + //modified for quiz+ //insertFirst(to_menu,option("All","All"));+ //to_menu.value="All";++ new_language();+ + //added for quiz+ change_tolang();+ }+}++Minibar.prototype.clear_all1=function() {+ with(this) {+ remove_typed_input();+ current.input="";+ previous=null;+ surface.innerHTML="";+ translations.innerHTML="";+ }+ + //added for quiz+ document.answer.answer_text.value = "";+ document.explanation.explanation_text.value= ""; + document.getElementById("hint_txt").innerHTML = "";+}++Minibar.prototype.clear_all=function() {+ with(this) {+ clear_all1();+ get_completions();+ }+}++Minibar.prototype.get_completions=function() {+ + with(this) {+ //debug("get_completions ");+ words.innerHTML="...";+ + //modified for quiz+ server.complete(current.to,current.input,bind(show_completions,this));+ }+}++Minibar.prototype.show_completions=function(complete_output) {+ with(this) {+ //debug("show_completions ");+ var completions=complete_output[0].completions;+ var emptycnt=add_completions(completions)+ if(true/*emptycnt>0*/) get_translations();+ else translations.innerHTML="";+ if(surface.typed && emptycnt==completions.length) {+ if(surface.typed.value=="") remove_typed_input();+ }+ else add_typed_input();+ }+ + //added for quiz :updates the hint and prevents the check_notEmpty alert in show_hint when all words are deleted+ if (!(document.answer.answer_text.value == null || document.answer.answer_text.value ==""))+ { if (hint_times > 0 && hint_times < max_hint_times)+ show_hint();+ } + else + document.getElementById("hint_txt").innerHTML = "";+}++Minibar.prototype.add_completions=function(completions) {+ with(this) {+ if(words.timeout) clearTimeout(words.timeout),words.timeout=null;+ words.innerHTML="";+ words.completions=completions;+ words.word=[];+ var t=surface.typed ? surface.typed.value : "";+ var emptycnt=0;+ for(var i=0;i<completions.length;i++) {+ var s=completions[i];+ if(s.length>0) {+ var w=word(s);+ words.appendChild(w);+ words.word[i]=w;+ }+ else emptycnt++;+ }+ filter_completions(t,true);+ return emptycnt;+ }+}++Minibar.prototype.filter_completions=function(t,dim) {+ with(this) {+ if(words.timeout) clearTimeout(words.timeout),words.timeout=null;+ words.filtered=t;+ //if(dim) debug('filter "'+t+'"');+ var w=words.word;+ words.count=0;+ var dimmed=0;+ var prefix=""; // longest common prefix, for completion+ for(var i=0;i<w.length;i++) {+ var s=words.completions[i];+ var keep=hasPrefix(s,t);+ if(keep) {+ if(words.count==0) prefix=s;+ else prefix=(commonPrefix(prefix,s));+ words.count++;+ }+ if(dim) {+ w[i].style.opacity= keep ? "1" : "0.5";+ if(keep) w[i].style.display="inline";+ else dimmed++;+ }+ else + w[i].style.display=keep ? "inline" : "none";+ }+ words.theword=prefix;+ if(dimmed>0)+ words.timeout=setTimeout(function(){ filter_completions(t,false)},1000);+ }+}+ +Minibar.prototype.get_translations=function() {+ with(this) {+ var c=current;+ if(options.show_grouped_translations)+ server.translategroup(c.from,c.input,bind(show_groupedtranslations,this));+ else+ server.translate(c.from,c.input,bind(show_translations,this));+ }+}++Minibar.prototype.target_lang=function() {+ with(this) return langpart(to_menu.value,grammar.name);+}++Minibar.prototype.add_typed_input=function() {+ with(this) {+ var inp;+ if(surface.typed) inp=surface.typed;+ else {+ inp=empty("input","type","text");+ inp.value="";+ inp.setAttribute("accesskey","t");+ inp.style.width="10em";+ inp.onkeyup=bind(complete_typed,this);+ surface.appendChild(inp);+ surface.typed=inp;+ }+ inp.focus();+ }+}++Minibar.prototype.remove_typed_input=function() {+ with(this) {+ if(surface.typed) {+ surface.typed.parentNode.removeChild(surface.typed);+ surface.typed=null;+ }+ }+}++Minibar.prototype.complete_typed=function(event) {+ with(this) {+ //element("debug").innerHTML=show_props(event,"event");+ var inp=surface.typed;+ //debug('"'+inp.value+'"');+ var s=inp.value;+ var ws=s.split(" ");+ if(ws.length>1 || event.keyCode==13) {+ if(ws[0]!=words.filtered) filter_completions(ws[0],true);+ if(words.count==1) add_word(words.theword);+ else if(elem(ws[0],words.completions)) add_word(ws[0]);+ else if(words.theword.length>ws[0].length) inp.value=words.theword;+ }+ else if(s!=words.filtered) filter_completions(s,true)+ }+}++Minibar.prototype.generate_random=function() {+ var t=this;+ function show_random(random) {+ t.clear_all1();+ t.add_words(random[0].text);+ }+ + function lin_random(abs) {+ t.server.linearize(abs[0].tree,t.current.from,show_random);+ }+ t.server.get_random(lin_random);+}++Minibar.prototype.add_words=function(s) {+ with(this) {+ var ws=s.split(" ");+ for(var i=0;i<ws.length;i++)+ add_word1(ws[i]+" ");+ get_completions();+ }+ //added for quiz+ document.answer.answer_text.value += s+" "; +}++Minibar.prototype.word=function(s) { + var t=this;+ function click_word() {+ if(t.surface.typed) t.surface.typed.value="";+ t.add_word(s);+ }+ return button(s,click_word);+}++Minibar.prototype.add_word=function(s) {+ with(this) {+ add_word1(s+" ");+ if(surface.typed) {+ var s2;+ if(hasPrefix(s2=surface.typed.value,s)) {+ s2=s2.substr(s.length);+ while(s2.length>0 && s2[0]==" ") s2=s2.substr(1);+ surface.typed.value=s2;+ }+ else surface.typed.value="";+ }+ get_completions();+ }+ + //added for quiz+ document.answer.answer_text.value += s+" ";+}++Minibar.prototype.add_word1=function(s) {+ with(this) {+ previous={ input: current.input, previous: previous };+ current.input+=s;+ var w=span_class("word",text(s));+ if(surface.typed) surface.insertBefore(w,surface.typed);+ else surface.appendChild(w);+ }+}++Minibar.prototype.delete_last=function() {+ with(this) {+ if(surface.typed && surface.typed.value!="")+ surface.typed.value="";+ else if(previous) {+ current.input=previous.input;+ previous=previous.previous;+ if(surface.typed) {+ surface.removeChild(surface.typed.previousSibling);+ surface.typed.focus();+ }+ else surface.removeChild(surface.lastChild);+ translations.innerHTML="";+ + //added for quiz (to update the user answer area)+ var last_answer= document.answer.answer_text.value ;+ document.answer.answer_text.value = remove_last(last_answer);+ + get_completions();+ }+ }+}++ //added for quiz+ function remove_last(txt){+ var str = remove_unwanted_characters(txt);+ var ls= str.lastIndexOf(" ");+ if (ls > -1)+ return str.substring(0,ls ) + " ";+ else+ return "";+ }++Minibar.prototype.tdt=function(tree_btn,txt) {+ with(this) {+ return options.show_trees ? tda([tree_btn,txt]) : td(txt);+ }+}++Minibar.prototype.show_translations=function(translationResults) {+ with(this) {+ var trans=translations;+ //var to=target_lang(); // wrong+ var to=to_menu.value;+ var cnt=translationResults.length;+ //trans.translations=translations;+ trans.single_translation=[];+ trans.innerHTML="";+ /*+ trans.appendChild(wrap("h3",text(cnt<1 ? "No translations?" :+ cnt>1 ? ""+cnt+" translations:":+ "One translation:")));+ */+ for(p=0;p<cnt;p++) {+ var tra=translationResults[p];+ if (tra.translations != null) {+ for (q = 0; q < tra.translations.length; q++) {+ var t = tra.translations[q];+ var lin=t.linearizations;+ var tbody=empty("tbody");+ if(options.show_abstract && t.tree)+ tbody.appendChild(tr([th(text("Abstract: ")),+ tdt(abstree_button(t.tree),text(" "+t.tree))]));+ for(var i=0;i<lin.length;i++) + if(to=="All" || lin[i].to==to)+ tbody.appendChild(tr([th(text(langpart(lin[i].to,grammar.name)+": ")),+ tdt(parsetree_button(t.tree,lin[i].to),+ text(lin[i].text))]));+ trans.appendChild(wrap("table",tbody));+ }+ }+ else if(tra.typeErrors) {+ var errs=tra.typeErrors;+ for(var i=0;i<errs.length;i++)+ trans.appendChild(wrap("pre",text(errs[i].msg)))+ }+ }+ }+}++Minibar.prototype.show_groupedtranslations=function(translationsResult) {+ with(this) {+ var trans=translations;+ var to=target_lang();+ //var to=to_menu.value // wrong+ var cnt=translationsResult.length;+ //trans.translations=translationsResult;+ trans.single_translation=[];+ trans.innerHTML="";+ for(p=0;p<cnt;p++) {+ var t=translationsResult[p];+ if(to=="All" || t.to==to) {+ var lin=t.linearizations;+ var tbody=empty("tbody");+ if(to=="All") tbody.appendChild(tr([th(text(t.to+":"))]));+ for(var i=0;i<lin.length;i++) {+ if(to!="All") trans.single_translation[i]=lin[i].text;+ tbody.appendChild(tr([td(text(lin[i].text))]));+ if (lin.length > 1) tbody.appendChild(tr([td(text(lin[i].tree))]));+ }+ trans.appendChild(wrap("table",tbody));+ }+ }+ }+}++Minibar.prototype.append_extra_buttons=function(extra,options) {+ with(this) {+ if(options.try_google)+ extra.appendChild(button("Try Google Translate",bind(try_google,this)));+ if(options.feedback_url)+ appendChildren(extra,[text(" "),button("Feedback",bind(open_feedback,this))]);+ }+}++Minibar.prototype.try_google=function() {+ with(this) {+ var to=target_lang();+ var s=current.input;+ if(surface.typed) s+=surface.typed.value;+ var url="http://translate.google.com/?sl="+ +langpart(current.from,grammar.name);+ if(to!="All") url+="&tl="+to;+ url+="&q="+encodeURIComponent(s);+ window.open(url);+ }+}++Minibar.prototype.open_help=function() {+ with(this) open_popup(options.help_url,"help");+}++Minibar.prototype.open_feedback=function() {+ with(this) {+ // make the minibar state easily accessible from the feedback page:+ minibar.state={grammar:grammar,current:current,to:to_menu.value,+ translations:translations};+ open_popup(options.feedback_url,'feedback');+ }+}++function update_language_menu(menu,grammar) {+ // Replace the options in the menu with the languages in the grammar+ var lang=grammar.languages;+ menu.innerHTML="";+ + for(var i=0; i<lang.length; i++) {+ var ln=lang[i].name;+ if(!hasPrefix(ln,"Disamb")) {+ var lp=langpart(ln,grammar.name);+ menu.appendChild(option(lp,ln));+ }+ }+}++function set_initial_language(options,menu,grammar) {+ if(grammar.userLanguage) menu.value=grammar.userLanguage;+ else if(options.default_source_language) {+ for(var i=0;i<menu.options.length;i++) {+ var o=menu.options[i].value;+ var l=langpart(o,grammar.name);+ if(l==options.default_source_language) menu.value=o;+ }+ }+}++function langpart(conc,abs) { // langpart("FoodsEng","Foods") == "Eng"+ return hasPrefix(conc,abs) ? conc.substr(abs.length) : conc;+}++function abstree_button(abs) {+ var i=img(tree_icon);+ i.setAttribute("onclick","toggle_img(this)");+ i.other=server.current_grammar_url+"?command=abstrtree&tree="+encodeURIComponent(abs);+ return i;+}++function parsetree_button(abs,lang) {+ var i=img(tree_icon);+ i.setAttribute("onclick","toggle_img(this)");+ i.other=server.current_grammar_url+ +"?command=parsetree&from="+lang+"&tree="+encodeURIComponent(abs);+ return i;+}++function toggle_img(i) {+ var tmp=i.src;+ i.src=i.other;+ i.other=tmp;+}++function open_popup(url,target) {+ var w=window.open(url,target,'toolbar=no,location=no,status=no,menubar=no');+ w.focus();+}++function setField(form,name,value) {+ form[name].value=value;+ var el=element(name);+ if(el) el.innerHTML=value;+}++function opener_element(id) { with(window.opener) return element(id); }++// This function is called from feedback.html+function prefill_feedback_form() {+ var state=opener_element("minibar").state;+ var trans=state.translations;+ var gn=state.grammar.name+ var to=langpart(state.to,gn);++ var form=document.forms.namedItem("feedback");+ setField(form,"grammar",gn);+ setField(form,"from",langpart(state.current.from,gn));+ setField(form,"input",state.current.input);+ setField(form,"to",to);+ if(to=="All") element("translation_box").style.display="none";+ else setField(form,"translation",trans.single_translation.join(" / "));+ + // Browser info:+ form["inner_size"].value=window.innerWidth+"×"+window.innerHeight;+ form["outer_size"].value=window.outerWidth+"×"+window.outerHeight;+ form["screen_size"].value=screen.width+"×"+screen.height;+ form["available_screen_size"].value=screen.availWidth+"×"+screen.availHeight;+ form["color_depth"].value=screen.colorDepth;+ form["pixel_depth"].value=screen.pixelDepth;++ window.focus();+}+ ++/*+se.chalmers.cs.gf.gwt.TranslateApp/align-btn.png++GET /grammars/Foods.pgf?&command=abstrtree&tree=Pred+(This+Fish)+(Very+Fresh)+GET /grammars/Foods.pgf?&command=parsetree&tree=Pred+(This+Fish)+Expensive&from=FoodsAfr+GET /grammars/Foods.pgf?&command=alignment&tree=Pred+(This+Fish)+Expensive+*/
@@ -0,0 +1,56 @@++/* --- Grammar access object ------------------------------------------------ */++function pgf_online(options) {+ var server = {+ // State variables (private):+ grammars_url: "/grammars/",+ grammar_list: null,+ current_grammar_url: null,+ + // Methods:+ switch_grammar: function(grammar_url,cont) {+ this.current_grammar_url=this.grammars_url+grammar_url;+ if(cont) cont();+ },+ get_grammarlist: function(cont) {+ http_get_json(this.grammars_url+"grammars.cgi",cont);+ },+ pgf_call: function(cmd,args,cont) {+ var url=this.current_grammar_url+"?command="+cmd;+ for(var arg in args) url+="&"+arg+"="+encodeURIComponent(args[arg]);+ http_get_json(url,cont);+ },+ + get_languages: function(cont) {+ this.pgf_call("grammar",{},cont);+ },+ + get_random: function(cont) {+ this.pgf_call("random",{random:Math.random()},cont);+ },+ linearize: function(tree,to,cont) {+ this.pgf_call("linearize",{tree:tree,to:to},cont);+ },+ linearizeAll: function(tree,to,cont) {+ this.pgf_call("linearizeAll",{tree:tree,to:to},cont);+ },+ complete: function(from,input,cont) {+ this.pgf_call("complete",{from:from,input:input},cont);+ },+ parse: function(from,input,cont) {+ this.pgf_call("parse",{from:from,input:input},cont);+ },+ translate: function(from,input,cont) {+ this.pgf_call("translate",{from:from,input:input},cont);+ },+ translategroup: function(from,input,cont) {+ this.pgf_call("translategroup",{from:from,input:input},cont);+ }+ + };+ for(var o in options) server[o]=options[o];+ if(server.grammar_list && server.grammar_list.length>0)+ server.switch_grammar(server.grammar_list[0]);+ return server;+}
@@ -0,0 +1,50 @@+<!-- Copyright © Elnaz Abolahrar, 2011 --> +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> +<html> +<head> +<title>Quiz About</title> +<link rel=stylesheet type="text/css" href="minibar_quiz.css"> + +<meta name = "viewport" content = "width = device-width"> +<meta http-equiv="Content-type" content="text/html; charset=UTF-8"> +<meta charset="UTF-8"> + +</head> + +<body> + +<h3>About GF Translation Quiz </h3> + +<p style="font-size:18px;"> + This project is actually part of my master thesis work at <a href="http://chalmers.se/en/Pages/default.aspx" >Chalmers University of Technology</a> + , in the Language Technology group under supervision of Professor <a href="http://www.cse.chalmers.se/~aarne/">Aarne Ranta.</a> The application + is an exercise generator to be used in training the lexical, morphological and syntactic aspects of human languages. + One important aspect of this application is that it is intended to be as general as possible and specially not + to be limited to any specific human language. For this purpose GF’s (The <a href="http://www.grammaticalframework.org/" >Grammatical Framework </a>) + Resource Grammar Libraries have been applied as the constructive core of the project. The application also uses the + <a href="http://code.google.com/p/grammatical-framework/wiki/GFWebServiceAPI" >GF web services API </a> + which has made it possible to apply the PGF API as Web Service, to be more precise the Quiz uses the additional API for JavaScript defined in pgf_online.js provided by the + <a href="http://www.grammaticalframework.org:41296/minibar/minibar.html"> Minibar </a> application. + The Quiz also relies on the Minibar, + in the "Easy Study Mode" of the Quiz, where word magnets from the Minibar are available to help the user construct his/her answer. +</p> +<p style="font-size:18px;"> The generated exercises are in the preliminary form of sentences + in a certain language - selected by the user - which need to be translated to another one - which is also the user's choice. + The user may choose the grammar he/she wants to train with as well. More information about how the quiz works can be found from the + <a href="quiz_help.html" >link </a> in the Quiz main page. + +</p> + +<br/> + Author: <i><b> Elnaz Abolahrar </b></i> (elnaz dot abolahrar at gmail dot com) +<br/> + Date: December, 2010 - Göteborg, Sweden +<br/> +<br/> + +<br/> +<div class="shift_left"><a href="javascript: window.close()">Close page</a></div> + +</body> + +</html>
@@ -0,0 +1,46 @@+<!-- Copyright © Elnaz Abolahrar, 2011 --> +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> +<html> +<head> +<title>Quiz Help</title> +<link rel=stylesheet type="text/css" href="minibar_quiz.css"> + +<meta name = "viewport" content = "width = device-width"> +<meta http-equiv="Content-type" content="text/html; charset=UTF-8"> +<meta charset="UTF-8"> + +</head> + +<body> +<a href="quiz_about.html" >About GF Translation Quiz </a> + +<h3>• How the Quiz works? </h3> + +<p style="font-size:18px;"> + <b>Hint:</b> You will find the Hint button very handy in all quiz modes. In fact it works very much similar to the famous <a href="http://en.wikipedia.org/wiki/Mastermind_(board_game)">Mastermind</a> game. Words in green stand for correct words in their correct place in the sentence, and yellow words mean these words are correct words and are part of the right answer but they are misplaced, while red words stand for words which do not exist in the right answer and are either misspelled or totally wrong lexically or grammatically. +<br/><br/> + <b>Check Answer:</b> You can check whether your answer is right by either clicking on this button or pressing the Enter/Return key of your keyboard. (Exception: In the "Easy Study Mode" you cannot use the Enter/Return key for checking your answer, because it has another functionality which is adding typed words to your answer.) Please note that by checking your answer you also submit it, and for each question you have only one submission chance to increase your score - further submissions don't have any impact on your score. Use the Hint if you are not sure and of course if it is available. Also note that Check Answer moves you automatically to the next question if your answer is right. +<br/><br/> + <b>History:</b> At the end of the quiz, either if you end it manually by pressing the "End" button or when the quiz ends itself e.g. when you pass the quiz or at the end of an exam, you will get a "Show Quiz History" button by which you may review and print the whole questions together with your answers and the programs' feedback. +</p> +<hr> + +<h3>• How different are different Quiz Modes? </h3> + +<p style="font-size:18px;"> <b>Easy Study Mode: </b> +In this mode word magnets are available to help you; you can type and/or click on them freely to construct your answer. Use "⌫" (Delete last) <!--img border="0" src="Delete_button.jpg" alt="⌫" width="30" height="17" /--> and "Clear" buttons to delete the last word or all of your answer in case required. Theses words come from the grammar you have chosen, and therefore it keeps you from mistyping words and even making grammatically wrong sentences. Also you have unlimited Hint which is automatically updated as you modify your answer. You can also go to one previous question at a time and of course check your answer's correctness. +<br/><br/><b>Medium Study Mode: </b> +In this mode you can use the Hint button for a maximum of 3 times for each question, and you have the possibility of going to one previous question at a time as well as checking your answer's correctness. +<br/><br/><b>Hard Study Mode: </b> +In this mode you can use the Hint button only once for each question, and you may not use the Previous question button however you may check your answer's correctness. +<br/><br/><b>Exam Mode: </b> +In this mode you cannot use the Hint, Previous question or Check answer buttons, and you will not see your score until the end of the exam. +</p> + +<br/> +<div class="shift_left"><a href="javascript: window.close()">Close page</a></div> + +</body> + +</html> +
@@ -0,0 +1,64 @@+// Copyright © Elnaz Abolahrar, 2011 + +// pre_start: runs on load time before evrything else to prepare the quiz + +function pre_start() +{ + hide_element('history_part'); + hide_element('toggle_show'); + + default_values(); + + var quiz_mode=empty_id("select","quiz_mode"); + + //adds the "Quiz Mode" and "Restart Quiz" and "End Quiz" and "Start Quiz" + appendChildren(minibar.quizbar, + [text(" Quiz Mode: "), quiz_mode, + button("Restart Quiz","restart_quiz()","R"), + button("End Quiz","end_quiz(true)","E"), + button("Start Quiz","start_quiz()","S")]); + + + //adds the "Next Question" and "Previous Question" and "Hint" and "Check Answer" buttons + var buttons_bar=element("buttons_bar"); + appendChildren(buttons_bar, + [button("< Previous Question","previous_question_quiz()","B", "previous_question"), + button("Next Question >","generate_question()","N", "next_question"), + button("Hint","show_hint()","H", "hint"), + submit_button("Check Answer", "check_answer")]); + + disable_all(); + + //hide the minibar word magnets + hide_element('minibar_contin'); + + //hide the delete and clear buttons + hide_element('minibar_buttons'); + + mode_options(quiz_mode); +} + + +function mode_options(quiz_mode) + { + var opt=empty("option"); + opt.setAttribute("value","Easy Study Mode"); + opt.innerHTML="Easy Study Mode"; + quiz_mode.appendChild(opt); + + var opt=empty("option"); + opt.setAttribute("value","Medium Study Mode"); + opt.innerHTML="Medium Study Mode"; + quiz_mode.appendChild(opt); + + var opt=empty("option"); + opt.setAttribute("value","Hard Study Mode"); + opt.innerHTML="Hard Study Mode"; + quiz_mode.appendChild(opt); + + var opt=empty("option"); + opt.setAttribute("value","Exam Mode"); + opt.innerHTML="Exam Mode"; + quiz_mode.appendChild(opt); + } +
@@ -0,0 +1,248 @@+// Copyright © Elnaz Abolahrar and Thomas Hallgren, 2011 + +function hide_element(elem_id) +{ + document.getElementById(elem_id).style.display="none"; +} + +function show_element(elem_id) +{ + document.getElementById(elem_id).style.display=""; +} + +function toggle_info() +{ + if ( info_hidden == true ) + { + show_element("info"); + hide_element("toggle_show"); + show_element("toggle_hide"); + info_hidden = false; + } + else + { + hide_element("info"); + show_element("toggle_show"); + hide_element("toggle_hide"); + info_hidden = true; + } +} + +function show_word_magnets() +{ + if ( words_hidden == true ) + { + show_element("words"); + words_hidden= false; + var buttons_bar=element("buttons_bar"); + buttons_bar.removeChild(buttons_bar.lastChild); + } +} + +function hide_word_magnets() +{ + if ( words_hidden == false ) + { + hide_element("words"); + words_hidden= true; + + //add "Show magnets" button + var buttons_bar=element("buttons_bar"); + appendChildren(buttons_bar, + [ button("Show Magnets","show_word_magnets()","M", "show_magnets")]); + } +} + +function popUp(newPage, pageName) +{ + window.open(newPage, pageName, "dependent = 1, scrollbars=1, location=1, statusbar=1, width=540, height=650, left = 10, top = 20"); +} + + +function disable_all() +{ + //disables the "Hint", "Check Answer", "Next Question" and "Previous Question" buttons + user answer area + document.getElementById('check_answer').disabled = true; + document.getElementById('next_question').disabled = true; + document.getElementById('previous_question').disabled = true; + document.getElementById('hint').disabled = true; + document.getElementById('user_answer').disabled = true; +} + +function set_mode() +{ + //disable the grammar - To - From languages, and mode menubar + document.getElementById('grammar_menu').disabled = true; + document.getElementById('from_menu').disabled = true; + document.getElementById('to_menu').disabled = true; + document.getElementById('quiz_mode').disabled = true; + + + selected_mode = element("quiz_mode").value; + + //sets the Quiz mode displayed + document.getElementById('mode').value = selected_mode; + +/*-------------------------------------- Modes Settings --------------------------------------*/ + switch (selected_mode) + { + case "Easy Study Mode": + have_minibar = true; + have_prevQuestion = true; + have_checkAns = true; + max_hint_times = 100; + break; + + case "Medium Study Mode": + have_minibar = false; + have_prevQuestion = true; + have_checkAns = true; + max_hint_times = 3; + break; + + case "Hard Study Mode": + have_minibar = false; + have_prevQuestion = false; + have_checkAns = true; + max_hint_times = 1; + break; + + case "Exam Mode": + have_minibar = false; + have_prevQuestion = false; + have_checkAns = false; + max_hint_times = 0; + break; + } +} + +function reset_mode() +{ + //enable the grammar - To - From languages, and mode menubar + document.getElementById('grammar_menu').disabled = false; + document.getElementById('from_menu').disabled = false; + document.getElementById('to_menu').disabled = false; + document.getElementById('quiz_mode').disabled = false; + + //clears the Quiz mode displayed + document.getElementById('mode').value = ""; +} + +function remove_minibar() +{ + if (have_minibar && is_ended == false ) + { + //hide the minibar word magnets + hide_element("minibar_contin"); + + //hide the delete and clear buttons + hide_element("minibar_buttons"); + } +} + +function remove_unwanted_characters(txt) +{ + //removes digits, special characters and extra spaces from user's answer + txt = txt.replace(/[\u0021-\u0026 \u0028-\u0040 \u005b-\u0060 \u007b-\u007e]+/g,' ').replace(/^\s+|\s+$/g,'').replace(/\s+/g,' '); + + //changes the first character to lowercase + txt= txt.replace(txt.charAt(0),txt.charAt(0).toLowerCase()); + + return txt; +} + +function split_to_words(str) +{ + if (!(str == "" || str == null)) + str = str.split(" "); + else + str = ""; + + return str; +} + +function string_matching(serv_answer,use_answer) +{ + var result = new Array(); + + //for empty answers + if ( use_answer== "" || use_answer== null) + result= ""; + else + { + var min_length = Math.min(serv_answer.length, use_answer.length); + + var i=0; + for (i= 0; i < min_length; i++) + { + if (serv_answer[i] == use_answer[i]) + result[i] = 1; + else + result[i] = 0; + } + //for answers with extra words (more than the number of words in the right answer) + while ( i < use_answer.length) + { + result[i] = 0; + i++; + } + } + + return result; +} + +function sum_all(arr) { + var s = 0; + for (var i = 0; i < arr.length; i++) + { + s += arr[i]; + } + return s; +} + +function find_closest(all_ans) +{ + var best_match = new Array(); + var comp = new Array(); + var server_answer2 = new Array(); + var max=0; + var k = 0; + for (k= 0; k < all_ans.length; k++) + { + server_answer = remove_unwanted_characters(all_ans[k]); + server_answer2 = split_to_words(server_answer); + + comp = string_matching(server_answer2, user_answer_splited); + var sum = sum_all(comp); + if (sum >= max) + { + best_match = server_answer2; + max= sum; + } + } + return best_match; +} + +function clearing() +{ + //clears the question, answer and the explanation and hint display areas + document.question.question_text.value= "..."; + document.answer.answer_text.value = ""; + document.explanation.explanation_text.value= ""; + document.getElementById("hint_txt").innerHTML = ""; +} + +//checks that the answer field is not empty +function check_notEmpty() +{ + if (document.answer.answer_text.value == null || document.answer.answer_text.value =="") + { + alert(" You have to write something first!"); + //sets the focus on the answer area + document.answer.answer_text.focus(); + + return false; + } + else + return true; +}
@@ -0,0 +1,285 @@+/* --- Accessing document elements ------------------------------------------ */++function element(id) {+ return document.getElementById(id);+}++/* --- JavaScript tricks ---------------------------------------------------- */++// To be able to object methods that refer to "this" as callbacks+// See section 3.3 of https://github.com/spencertipping/js-in-ten-minutes/raw/master/js-in-ten-minutes.pdf+function bind(f, this_value) {+ return function () {return f.apply (this_value, arguments)};+};++/* --- JSONP ---------------------------------------------------------------- */++// Inspired by the function jsonp from +// http://www.west-wind.com/Weblog/posts/107136.aspx+// See also http://niryariv.wordpress.com/2009/05/05/jsonp-quickly/+// http://en.wikipedia.org/wiki/JSON#JSONP+function jsonp(url,callback)+{ + if (url.indexOf("?") > -1)+ url += "&jsonp=" + else+ url += "?jsonp=" + url += callback;+ //url += "&" + new Date().getTime().toString(); // prevent caching + + var script = empty("script"); + script.setAttribute("src",url);+ script.setAttribute("type","text/javascript"); + document.body.appendChild(script);+}++var json = {next:0};++// Like jsonp, but instead of passing the name of the ballback function, you +// pass the callback function directly, making it possible to use anonymous+// functions.+function jsonpf(url,callback)+{+ var name="callback"+(json.next++);+ json[name]=function(x) { delete json[name]; callback(x); }+ jsonp(url,"json."+name);+}++/* --- AJAX ----------------------------------------------------------------- */++function GetXmlHttpObject(handler)+{ + var objXMLHttp=null+ if (window.XMLHttpRequest)+ {+ objXMLHttp=new XMLHttpRequest()+ }+ else if (window.ActiveXObject)+ {+ objXMLHttp=new ActiveXObject("Microsoft.XMLHTTP")+ }+ return objXMLHttp+}++function ajax_http_get(url,callback) {+ var http=GetXmlHttpObject()+ if (http==null) {+ alert ("Browser does not support HTTP Request")+ return+ } + var statechange=function() {+ if (http.readyState==4 || http.readyState=="complete") {+ if(http.status==200) callback(http.responseText);+ else alert("Request for "+url+" failed: "+ +http.status+" "+http.statusText);+ }+ }+ http.onreadystatechange=statechange;+ http.open("GET",url,true)+ http.send(null)+ //dump("http get "+url+"\n")+ return http+}++// JSON via AJAX+function ajax_http_get_json(url,cont) {+ ajax_http_get(url,function(txt) { cont(eval("("+txt+")")); });+}++function sameOrigin(url) {+ return hasPrefix(url,location.protocol+"//"+location.host+"/");+}++// Use AJAX when possible, fallback to JSONP+function http_get_json(url,cont) {+ if(sameOrigin(url)) ajax_http_get_json(url,cont);+ else jsonpf(url,cont);+}+++/* --- HTML construction ---------------------------------------------------- */+function text(s) { return document.createTextNode(s); }++function node(tag,as,ds) {+ var n=document.createElement(tag);+ for(var a in as) n.setAttribute(a,as[a]);+ for(var i in ds) n.appendChild(ds[i]);+ return n;+}++function empty(tag,name,value) {+ var el=node(tag,{},[])+ if(name && value) el.setAttribute(name,value);+ return el;+}++function empty_id(tag,id) { return empty(tag,"id",id); }+function empty_class(tag,cls) { return empty(tag,"class",cls); }++function div_id(id) { return empty_id("div",id); }+function span_id(id) { return empty_id("span",id); }++function wrap(tag,contents) { return node(tag,{},[contents]); }++function wrap_class(tag,cls,contents) {+ var el=empty_class(tag,cls);+ if(contents) el.appendChild(contents);+ return el;+}++function span_class(cls,contents) { return wrap_class("span",cls,contents); }+function div_class(cls,contents) { return wrap_class("div",cls,contents); }++function p(contents) { return wrap("p",contents); }+function dt(contents) { return wrap("dt",contents); }+function li(contents) { return wrap("li",contents); }++function th(contents) { return wrap("th",contents); }+function td(contents) { return wrap("td",contents); }++function tr(cells) { return node("tr",{},cells); }++//modified for quiz (id added)+function button(label,action,key ,id) {+ var el=node("input",{"type":"button","value":label},[]);+ if(typeof action=="string") el.setAttribute("onclick",action);+ else el.onclick=action;+ if(key) el.setAttribute("accesskey",key);+ if(id) el.setAttribute("id",id);+ return el;+}++//added for quiz+function submit_button(label, id) {+ var el=empty("input","type","submit");+ el.setAttribute("value",label);+ if(id) el.setAttribute("id", id);+ return el;+}++function option(label,value) {+ return node("option",{"value":value},[text(label)]);+}++function appendChildren(el,ds) {+ for(var i in ds) el.appendChild(ds[i]);+ return el;+}++function insertFirst(parent,child) {+ parent.insertBefore(child,parent.firstChild);+}++function tda(cs) { return node("td",{},cs); }++function img(src) { return empty("img","src",src); }++/* --- Debug ---------------------------------------------------------------- */++function debug(s) {+ var d=element("debug");+ if(d) d.appendChild(text(s+"\n"))+}++function show_props(obj, objName) {+ var result = "";+ for (var i in obj) {+ result += objName + "." + i + " = " + obj[i] + "<br>";+ }+ return result;+}++function field_names(obj) {+ var result = "";+ for (var i in obj) {+ result += " " + i;+ }+ return result;+}++/* --- Data manipulation ---------------------------------------------------- */+function swap(a,i,j) { // Note: this doesn't work on strings.+ var tmp=a[i];+ a[i]=a[j];+ a[j]=tmp;+ return a;+}++function sort(a) {+// https://developer.mozilla.org/en/Core_JavaScript_1.5_Reference/Global_Objects/Array/sort+ return a.sort();+ /* // Note: this doesn't work on strings.+ for(var i=0;i<a.length-1;i++) {+ var min=i;+ for(var j=i+1;j<a.length;j++)+ if(a[j]<a[min]) min=j;+ if(min!=i) swap(a,i,min);+ }+ return a;+ */+}++function filter(p,xs) {+ var ys=[];+ for(var i=0;i<xs.length;i++)+ if(p(xs[i])) ys[ys.length]=xs[i];+ return ys;+}++function implode(cs) { // array of strings to string+ /*+ var s="";+ for(var i=0;i<cs.length;i++)+ s+=cs[i];+ return s;+ */+ return cs.join("");+}++function hasPrefix(s,pre) { return s.substr(0,pre.length)==pre; }++function commonPrefix(s1,s2) {+ for(var i=0;i<s1.length && i<s2.length && s1[i]==s2[i];i++);+ return s1.substr(0,i);+}++/*+function all(p,xs) {+ for(var i=0;i<xs.length;i++)+ if(!p(xs[i])) return false;+ return true;+}+*/++function map(f,xs) {+ var ys=[];+ for(var i=0;i<xs.length;i++) ys[i]=f(xs[i]);+ return ys;+}++// map in continuation passing style +function mapc(f,xs,cont) { mapc_from(f,xs,0,[],cont); }++function mapc_from(f,xs,i,ys,cont) {+ if(i<xs.length)+ f(xs[i],function(y){ys[i]=y;mapc_from(f,xs,i+1,ys,cont)});+ else+ cont(ys);+}++function overlaps(as,bs) {+ for(var i=0;i<as.length;i++)+ if(elem(as[i],bs)) return true;+ return false;+}++function elem(a,as) {+ for(var i=0;i<as.length;i++)+ if(a==as[i]) return true;+ return false;+}++function shuffle(a) {+ for(i=0;i<a.length;i++) swap(a,i,Math.floor(Math.random()*a.length))+ return a;+}
@@ -0,0 +1,165 @@+<!-- Copyright © Elnaz Abolahrar, 2011 --> +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> +<html> +<head> +<title>GF Translation Quiz</title> + +<link rel=stylesheet type="text/css" href="minibar_quiz.css"> + +<meta name = "viewport" content = "width = device-width"> +<meta http-equiv="Content-type" content="text/html;charset=UTF-8"> +<meta charset="UTF-8"> + +<script type="text/JavaScript" src="support.js"></script> +<script type="text/JavaScript" src="minibar_quiz.js"></script> +<script type="text/JavaScript" src="pgf_online.js"></script> +<script type="text/JavaScript" src="quiz_support.js"></script> +<script type="text/javascript" src="translation_quiz.js"></script> +<script type="text/JavaScript" src="quiz_pre_start.js"></script> + +</head> + +<body> + +<div id = "info" > +<a href="javascript:popUp('quiz_about.html', 'about')">About GF Translation Quiz</a> +<h2 style=" padding-left: 35px;"><i> Welcome to GF Translation Quiz </i></h2> + +<p style="font-size:20px;"> + To start the quiz choose a grammar, From and To languages + <br/> as well as a quiz mode, then press the "Start Quiz" button. + <br/> <b>Note:</b> You may not change these settings in the middle of + <br/> a quiz. + The quiz is over when you have done at least + <span style="color:#2E8B57;"><b><script type="text/javascript"> document.write(min_no_questions); </script></b></span> + <br/>examples with a minimum success of + <span style="color:#2E8B57;"><b><script type="text/javascript"> document.write(pass_percentage * 100); </script> % </b></span> + . However <br/> you can restart or quit the quiz + at any time by clicking <br/>on the "Restart Quiz" or "End Quiz" buttons. +</p> + +<a style="font-size:18px;" href="javascript:popUp('quiz_help.html', 'help')">Click here to learn more about how the Quiz works.</a> +<br/> + +</div> + +<div id = "toggle_hide"; class="shift_left"; ><a href="javascript: toggle_info()">Hide Information</a></div> +<div id = "toggle_show"; class="shift_left"; ><a href="javascript: toggle_info()">Show Information</a></div> + +<hr noshade size=0 /> + +<div id = "minibar1" class="bold"> +</div> + +<hr noshade size=0 /> + +<table frame="void" cellpadding="5" > + <tr> + <td><b>Quiz Question:</b></td> + </tr> + <tr> + <td> + <form name="question"> + <textarea class="quest" name="question_text" wrap="virtual" readonly="true"> + </textarea> + </form> + </td> + </tr> +</table> + +<form name="answer" onsubmit="check_answer_quiz(); return false;"> + <fieldset> + + <legend><b>Your Answer: </b></legend> + <div id = "minibar_buttons" class="shift_left";></div> + <div id = "minibar_contin"></div> + <table cellpadding="2"> + <tr> + <td> + <input class="answer1" type="text" id="user_answer" name="answer_text" value="" /> + </td> + </tr> + <tr> + <td> + <div id="hint_txt" class="hint"> + </td> + </tr> + + <tr> + <td> + <div id = "buttons_bar"></div> + </td> + </tr> + <tr> + <td> + <div id = "history_bar"></div> + </td> + </tr> + </table> + + </fieldset> +</form> + + +<table frame="void" cellpadding="5" > + <tr> + <td><b>Explanation:</b></td> + </tr> + <tr> + <td> + <form name="explanation"> + <textarea class="explain" name="explanation_text" wrap="virtual" readonly="true"> + </textarea> + </form> + </td> + </tr> +</table> + +<table cellpadding="1" cellspacing="10"> + <tr> + <td><b>Current Quiz Mode:</b></td> + <td><b>Answered Questions</b></td> + <td><b>Your Score</b></td> + </tr> + <tr> + <td><input type="text" id="mode" style="border: 0; text-align:left; color:#CD5C5C; background-color:#ccc;" class="number" size="18" readonly="true"/></td> + <td><input type="text" id="counter_display" class="number" size="4" readonly="true" value="0" /></td> + <td><input type="text" id="score_display" style="color:#2E8B57" class="number" size="3" readonly="true" value="0" /></td> + </tr> +</table> + +<div id="history_part"> +</div> + +<script type="text/javascript"> + + var online_options={ + grammars_url: "http://www.grammaticalframework.org/grammars/" + //grammars_url: "http://tournesol.cs.chalmers.se:41296/grammars", + //grammars_url: "http://localhost:41296/grammars", + //grammar_list: ["Foods.pgf"], // leave undefined to get list from server + } + + if(/^\?\/tmp\//.test(location.search)) { + online_options.grammars_url=location.search.substr(1); + } + + var server=pgf_online(online_options); + + var minibar_options= { + show_abstract: false, + show_trees: false, + show_grouped_translations: false, + default_source_language: "Eng", + try_google: false + } + + var minibar=new Minibar(server,minibar_options,"minibar1"); + + pre_start(); + +</script> + +</body> + +</html>
@@ -0,0 +1,766 @@+// Copyright © Elnaz Abolahrar, 2011 + +// translation_quiz.js, assumes that quiz_support.js has also been loaded + +/*-------------------------------------- Configuration Variables --------------------------------------*/ + +var pass_percentage = 0.75; +var min_no_questions = 10; +var exam_quesNo = 10; // sets the number of questions appearing in an exam +var max_answer_times = 1; // the max limit for the user to increase his/her score + + +/*-------------------------------------- other Variables --------------------------------------*/ + +var grammar; +var question_lang; +var answer_lang; + +//saves the random tree generated by the server in generate_question function to be used by the check_answer +var rand_tree; + +var counter; +var score; +var confirmed_check = new Boolean(true); +var prev_pressed = new Boolean(); + +var prev_question; +var prev_explanation; +var prev_answer; +var prev_hint; +var current_question; +var current_answer; +var current_explanation= ""; +var current_hint; + +//for history +var quiz_history = []; +var history_shown= new Boolean(); +var index =0; + +//for check answer +var answer_was_right= new Boolean(); +var raw_user_answer; +var user_answer; +var user_answer_splited; +var server_answer; +var all_answers = []; +var parsed_trees = 0; +var words_hidden = new Boolean(); + +var answer_times ; +var hint_times ; +var hint_pressed = new Boolean(); +var restart_active = new Boolean(); +var is_ended = new Boolean(); +var info_hidden = new Boolean(); + +//modes variables +var have_minibar = new Boolean(); +var have_prevQuestion = new Boolean(); +var have_checkAns = new Boolean(); +var max_hint_times; +var selected_mode; + +/*-------------------------------------- Functions --------------------------------------*/ + + +function default_values() +{ + //resets the question, answer and the explanation and hint display areas + document.question.question_text.value= "Quiz questions will be displayed here."; + document.answer.answer_text.value = " "; + document.explanation.explanation_text.value= "Explanations are displayed here."; + document.getElementById("hint_txt").innerHTML = ""; + + //resets some flags + prev_pressed = false; + is_ended = false; //refering to the End button or end o quiz by score or end of exam + restart_active = false; //refering to the Restart button + hint_pressed = false; + answer_was_right= false; + history_shown= false; + + //resets the counter and score displays and some variables + answer_times = 1; + counter = 0; + score = 0; + hint_times =0; + document.getElementById('counter_display').value = counter; + document.getElementById('score_display').value = score; + + //resets the variables for keeping the history + quiz_history = []; + index =0; + var history=element("history_part"); + history.innerHTML =""; + + //resets the variables for keeping the parsing and linearization altenatives + parsed_trees = 0; + all_answers = []; + + //shows the normal user answer area + show_element("user_answer"); +} + +function start_quiz() +{ + //sets the grammar and From and To languages + grammar= minibar.grammar_menu.value; + question_lang= minibar.from_menu.value; + answer_lang= minibar.to_menu.value; + + //removes the start button + minibar.quizbar.removeChild(minibar.quizbar.lastChild); + + set_mode(); + + //shows the minibar area and buttons + var buttons_bar=element("buttons_bar"); + if (have_minibar) + { + //show the minibar word magnets + show_element("minibar_contin"); + + //show the delete and clear buttons + show_element("minibar_buttons"); + + //hides the normal user answer area + hide_element("user_answer"); + + //changes the "Check Answer" button to a none_submit one + buttons_bar.removeChild(buttons_bar.lastChild); + appendChildren(buttons_bar, + [ button("Check Answer","check_answer_quiz()","C", "check_answer")]); + } + else + { + //enable the user answer area + document.getElementById('user_answer').disabled = false; + + //hide the minibar word magnets + hide_element("minibar_contin"); + + //hide the delete and clear buttons + hide_element("minibar_buttons"); + + //changes the "Check Answer" button to a submit one + buttons_bar.removeChild(buttons_bar.lastChild); + appendChildren(buttons_bar, + [ submit_button("Check Answer", "check_answer")]); + } + + //conditionally enbles the "Hint", "Check Answer", "Next Question" and "Previous Question" buttons, and the minibar + + if (have_checkAns) + document.getElementById('check_answer').disabled = false; + else + document.getElementById('check_answer').disabled = true; + + if (have_prevQuestion) + document.getElementById('previous_question').disabled = false; + + if ( max_hint_times > 0 ) + document.getElementById('hint').disabled = false; + + document.getElementById('next_question').disabled = false; + + //generates the first quiz question + generate_question(); + + //resets the restart_active + restart_active= true ; + + //hides the information + if ( info_hidden == false ) + toggle_info(); +} + +function restart_quiz() +{ + //javascript:location.reload(true); + + if (restart_active == true) + { + var end_confirmed= new Boolean(true); + + if (!is_ended ) + end_confirmed = confirm(" Are you sure you want to quit this quiz!"); + + if (end_confirmed) + { + end_quiz(false); + + reset_mode(); + + //add the start button + appendChildren(minibar.quizbar,[ button("Start Quiz","start_quiz()","S")]); + + //removes the History button + var history_bar=element("history_bar"); + history_bar.removeChild(history_bar.lastChild); + + default_values(); + } + } +} + +function generate_question() +{ + //for the exam mode + if (selected_mode == "Exam Mode") + { + if (check_notEmpty()) + { + if (counter > 0) + { + document.getElementById('score_display').value = "?"; + + //save the current user answer for history + current_answer = document.answer.answer_text.value; + quiz_history[index][1] = current_answer; + + make_all_answers(); + } + else + exam_continue(); + } + } + else + { + if (prev_pressed == true ) + { + //changes the question, answer and the explanation back to the current one + document.question.question_text.value= current_question; + document.answer.answer_text.value = current_answer; + document.explanation.explanation_text.value= current_explanation; + document.getElementById("hint_txt").innerHTML = current_hint; + + prev_pressed = false; // to go back to normal + + //enables the "Previous Question","Hint" and "Check Answer" buttons + document.getElementById('previous_question').disabled = false; + document.getElementById('check_answer').disabled = false; + document.getElementById('hint').disabled = false; + } + else + { + // if the user clicks the "Next Question" without cheking his/her previous answer, + // asks for user's confirmation before moving to the next question + if ( answer_times == 0 ) + { + confirmed_check = confirm("Are you sure you don't want to check your answer's correctness!"); + + if ( hint_times == 0 ) + { + //saves the current answer and the explanation which is null(the answer was not checked or hinted) + current_answer = document.answer.answer_text.value; + + current_explanation = "You did not check your answer's correctness!"; + + current_hint = ""; + } + //save the current user answer for history + quiz_history[index][1] = document.answer.answer_text.value; + + //save the current explanation for history + quiz_history[index][2] = "You did not check your answer's correctness!"; + } + if (confirmed_check == true ) + { + //save the current question for the "previous question" button and history + prev_question = current_question; + + //save the current answer for the "previous question" button + prev_answer = current_answer; + + //save the current explanation and hint for the "previous question" button + prev_explanation = current_explanation; + prev_hint= current_hint; + + //clears the question, answer and the explanation and hint display areas + clearing(); + + if (have_minibar) + { + minibar.clear_all(); + + //unhides the words area and removes the "Show Magnets" button + show_word_magnets(); + } + + if (answer_was_right) //here it still contains info about the previous question + document.explanation.explanation_text.value= current_explanation; + + //resets the times user has answered to the current question + answer_times = 0; + + //resets the times user has pressed hint for the current question + hint_times = 0; + + document.getElementById('counter_display').value = counter; + //increments the counter + counter= ++ counter; + + //sends a question retrival request to the server + server.get_random(generate_question2); + } + } + } + //sets the focus on the answer area + document.answer.answer_text.focus(); +} + +function generate_question2(random_trees) +{ + //we now have a random abstract syntax tree that we need to linearize + server.pgf_call("linearizeAll",{tree:random_trees[0].tree, + to:question_lang}, generate_question3); + rand_tree= random_trees[0].tree; +} + +function generate_question3(random_texts) +{ + var no_of_lins = random_texts[0].texts.length; + + //generates a random number, to determine which linearization should be used as the question + var which= Math.floor(Math.random()* no_of_lins ); + if (which >= no_of_lins) + which = which - 1; + + //display the new quiz quetion sent by server + document.question.question_text.value= counter +". " + random_texts[0].texts[which]; + + //save the current question for the "previous question" button and history + current_question = document.question.question_text.value; + index = quiz_history.length; + quiz_history[index] = []; + quiz_history[index][0]= current_question; +} + +function check_answer_quiz() +{ + if (check_notEmpty()) + { + //resets the user confirmation for moving to next question without checking the answer + confirmed_check = true; + + //clears the explanation and Hint display area + document.explanation.explanation_text.value = ""; + document.getElementById("hint_txt").innerHTML = ""; + + //save the current user answer for the "peivious question" button and history + current_answer = document.answer.answer_text.value; + quiz_history[index][1] = current_answer; + + //increments the times the user has answered to the current question + answer_times ++; + + //resets the hint_pressed flag + hint_pressed = false; + + if ((answer_times + hint_times) <= 1) + make_all_answers(); + else + continue_checking(); + } +} + +function make_all_answers() +{ + //resets the variables for keeping the parsing and linearization altenatives + parsed_trees = 0; + all_answers = []; + + //we now need to linearize the random abstract syntax tree in order to + //find all possible correct answers then we check user's answer against these answers. + server.pgf_call("linearize",{tree:rand_tree, to:question_lang}, parse_answer); +} + +function parse_answer(right_answer) +{ + server.parse(question_lang,right_answer[0].text, parse_answer2); +} + +var trees_to_go; +function parse_answer2(parsed_answer) +{ + trees_to_go = parsed_trees = parsed_answer[0].trees.length; + var j =0; + for (j= 0; j < parsed_trees ; j++) + { + server.linearizeAll(parsed_answer[0].trees[j], answer_lang, collect_answers); + } +} + +function collect_answers(lin_answer) +{ + var next= 0; + var i=0; + for (i= 0; i < lin_answer[0].texts.length ; i++) + { + next = all_answers.length; + all_answers[next]= lin_answer[0].texts[i]; + } + + trees_to_go--; + if(trees_to_go == 0) + continue_checking(); +} + +function continue_checking() +{ + if (selected_mode == "Exam Mode") + { + check_answer_exam2(); + exam_continue(); + } + else + if (hint_pressed) + show_hint2(); + else + check_answer2(); +} + +function check_answer2() +{ + if (have_minibar) + hide_word_magnets(); + + raw_user_answer= document.answer.answer_text.value; + user_answer = remove_unwanted_characters(raw_user_answer); + answer_was_right= false; + var k = 0 ; + for (k= 0; k < all_answers.length; k++) + { + server_answer = remove_unwanted_characters(all_answers[k]); + + if ( user_answer == server_answer ) + { + if (answer_times <= max_answer_times) + { + //increments the score + score ++; + document.getElementById('score_display').value = score; + } + + document.explanation.explanation_text.value = "Yes, that was the correct answer."; + answer_was_right= true; + + break; + + } + } + + if (k >= all_answers.length) + { + document.explanation.explanation_text.value= "No, the correct answer(s) is(are): \n " + + all_answers; + document.getElementById('counter_display').value = counter; + } + + //save the current explanation for the "previous question" button and history + current_explanation = document.explanation.explanation_text.value; + quiz_history[index][2] = current_explanation; + + if ((counter >= min_no_questions) && ((score/counter) >= pass_percentage)) + { + if (answer_was_right) + document.explanation.explanation_text.value += "\nAlso, "; + else + document.explanation.explanation_text.value += "\nHowever, "; + + document.explanation.explanation_text.value += "Congratulations!!! You passed the quiz. Click \"Restart Quiz\" for a new one."; + + document.getElementById('counter_display').value = counter; + + end_quiz(false); + } + else + if (answer_was_right) + { + //goes to the next question automaticly after getting the correct answer + generate_question(); + } + + //save the current hint for the "previous question" button + current_hint = document.getElementById("hint_txt").innerHTML ; +} + +function check_answer_exam2() +{ + + raw_user_answer= document.answer.answer_text.value; + user_answer = remove_unwanted_characters(raw_user_answer); + + var k = 0 ; + for (k= 0; k < all_answers.length; k++) + { + server_answer = remove_unwanted_characters(all_answers[k]); + + if ( user_answer == server_answer ) + { + //increments the score + score ++; + + //save the current explanation for history + current_explanation = "Yes, that was the correct answer."; + quiz_history[index][2] = current_explanation; + + break; + } + } + + if (k >= all_answers.length) + { + //save the current explanation for history + current_explanation = "No, the correct answer(s) is(are): \n " + all_answers; + quiz_history[index][2] = current_explanation; + } +} + +function exam_continue() +{ + if (counter >= exam_quesNo) + exam_result(); + else + { + //clears the question and answer and the explanation and hint display areas + clearing(); + + document.getElementById('counter_display').value = counter + "/" + exam_quesNo; + //increments the counter + counter= ++ counter; + + //sends a question retrival request to the server + server.get_random(generate_question2); + } +} + +function exam_result() +{ + document.getElementById('score_display').value = score; + document.getElementById('counter_display').value = counter + "/" + exam_quesNo; + document.explanation.explanation_text.value= "That's the end of exam."; + end_quiz(false); +} + +function show_hint() +{ + if (hint_times < max_hint_times) + { + if (check_notEmpty()) + { + //clears the explanation and Hint area + document.explanation.explanation_text.value = ""; + document.getElementById("hint_txt").innerHTML = ""; + + //increments the times the user has pressed hint button + hint_times= ++ hint_times; + + //resets the user confirmation for moving to next question without checking the answer + confirmed_check = true; + + //save the current user answer for the "peivious question" button + current_answer = document.answer.answer_text.value; + + //sets the hint_pressed flag + hint_pressed = true; + + raw_user_answer= document.answer.answer_text.value; + user_answer = remove_unwanted_characters(raw_user_answer); + user_answer_splited = split_to_words(user_answer); + + if ((answer_times + hint_times) <= 1) + make_all_answers(); + else + continue_checking(); + } + } + else + { + //Error message (max_hint_times is passed) + document.explanation.explanation_text.value = "Sorry, you have already used up your allowed number of hints for this question."; + } +} + +function show_hint2() +{ + var best_answer = new Array(); + best_answer= find_closest(all_answers); + + var compared = new Array(); + compared = string_matching(best_answer, user_answer_splited); + + //preparing the Hint spans + var hint = element("hint_txt"); + hint.innerHTML = "<b>Hint: </b>"; + var max_length = Math.max(best_answer.length, user_answer_splited.length); + for (k= 0; k < max_length; k++) + { + var id = "word" + k.toString(); + var word_span= span_id(id); + hint.appendChild(word_span); + } + + var k=0; + var visited = new Array(); + for (k= 0; k < best_answer.length; k++) + { + visited[k] = 0; + } + + var i= 0; //i is used for the user_answer + var myid = ""; + while ( i < compared.length) + { + myid = "word" + i.toString(); + if (compared[i] == 0) + { + var j =0; //j is used for the server_answer + while (j < best_answer.length) + { + if (visited[j] == 0 && user_answer_splited[i] == best_answer[j] && (j >= compared.length || compared[j] == 0 )) + { + //yellow for the right word in wrong place + document.getElementById(myid).style.color="#FFFF00"; + visited[j] = 1; + break; + } + j++; + } + + if ( j >= best_answer.length) + { + //red for the totaly wrong word + document.getElementById(myid).style.color="#FF0000"; + } + } + else + { //green for the right word in right place + document.getElementById(myid).style.color="#339933"; + } + document.getElementById(myid).innerHTML = user_answer_splited[i] + " "; + i++; + } + + while ( i < best_answer.length) + { + myid = "word" + i.toString(); + document.getElementById(myid).style.color="#FF0000"; + document.getElementById(myid).innerHTML = "____ "; + i++; + } + + //save the current explanation and hint for the "previous question" button + current_explanation = document.explanation.explanation_text.value; + current_hint = document.getElementById("hint_txt").innerHTML ; +} + +function previous_question_quiz() +{ + if ( counter > 1) + { + if ( answer_times == 0 && hint_times == 0 ) + { + //sets the current answer and the explanation and hint + current_answer = document.answer.answer_text.value; + current_explanation = ""; + current_hint = ""; + } + + //disables the "Previous Question","Hint" and "Check Answer" buttons + document.getElementById('previous_question').disabled = true; + document.getElementById('check_answer').disabled = true; + document.getElementById('hint').disabled = true; + + //changes the question, answer and the explanation + document.question.question_text.value= prev_question; + document.answer.answer_text.value = prev_answer; + document.explanation.explanation_text.value= prev_explanation; + document.getElementById("hint_txt").innerHTML = prev_hint; + + prev_pressed = true; // to remember the current question, answer and explanation + } +} + +function end_quiz(confirm_needed) +{ + if (restart_active == true && is_ended == false) + { + var end= new Boolean(true); + + if (confirm_needed) + end = confirm(" Are you sure you want to quit this quiz!"); + + if (end) + { + if (have_minibar) + { + //removes the "Show Magnets" button if exists + show_word_magnets(); + //remove the minibar word magnets if there was any + remove_minibar(); + //shows the normal user answer area + show_element("user_answer"); + } + disable_all(); + is_ended = true; + + //adds a Show Quiz History button + var history_bar=element("history_bar"); + appendChildren(history_bar, + [ button("Show Quiz History","show_history()","H", "quiz_history")]); + } + } +} + +function show_history() +{ + var current_grammar = minibar.grammar.name; // minibar.grammar.name gives the grammar name without .pgf + var to_lang= langpart(minibar.to_menu.value,current_grammar); + var from_lang= langpart(minibar.from_menu.value,current_grammar); + var history=element("history_part"); + if (history_shown == false) + { + var i=0; + for (i= 0; i < quiz_history.length ; i++) + { + var question = text("Question" + " "+quiz_history[i][0] + "\n"); + history.appendChild(empty("br")); + history.appendChild(question); + history.appendChild(empty("br")); + + var answer = text("Your Answer" + ": "+ quiz_history[i][1] + "\n"); + history.appendChild(answer); + history.appendChild(empty("br")); + + var explan = text("Explanation" + ": "+ quiz_history[i][2] + "\n"); + history.appendChild(explan); + history.appendChild(empty("br")); + history.appendChild(empty("br")); + } + history_shown = true; + } + + var history_content = history.innerHTML; + + var history_window = window.open('', 'historyPopup', "dependent = 1, scrollbars=1, location=1, statusbar=1, width=540, height=650, left = 10, top = 20"); + history_window.document.writeln('<html><head><title>Quiz History</title></head><body>'); + history_window.document.writeln('<h3> Your Quiz History </h3>'); + history_window.document.write('<b> Quiz Mode: </b>'); + history_window.document.write(selected_mode+ ", "); + history_window.document.write('<b> Grammar: </b> '); + history_window.document.write(" "+ current_grammar +", "); + history_window.document.write('<b> From: </b>'); + history_window.document.write(" "+ from_lang + ", "); + history_window.document.write('<b> To: </b>'); + history_window.document.writeln(" "+ to_lang); + history_window.document.writeln('<div style="font-size:18px;">'); + history_window.document.writeln(history_content); + history_window.document.writeln('</div>'); + history_window.document.writeln('<div style="color: #2E8B57; font-size:16px; font-weight: bold;"><a href="javascript: window.print()">Print History</a></div>'); + history_window.document.writeln('<div style="padding-left: 320px; color: #2E8B57; font-size:16px; font-weight: bold;"><a href="javascript: window.close()">Close page</a></div>'); + history_window.document.writeln('</body></html>'); + history_window.document.close(); +}
@@ -111,7 +111,7 @@ At the moment, the concrete syntax for a language <var>L</var> is limited to <ul> <li>opening the Resource Grammar Library modules- <code>Syntax</code><var>L</var> and <code>Paradigms</code><var>L</var>,+ <code>Syntax</code><var>L</var>, <code>Paradigms</code><var>L</var>, <code>Lexicon</code><var>L</var> and <code>Extra</code><var>L</var>, <li><em>linearization types</em> for the categories in the abstract syntax, <li><em>linearizations</em> for the functions in the abstract syntax,@@ -234,7 +234,7 @@ <hr> <div class=modtime><small>-<!-- hhmts start --> Last modified: Fri Oct 7 14:06:14 CEST 2011 <!-- hhmts end -->+<!-- hhmts start --> Last modified: Fri Nov 25 12:44:33 CET 2011 <!-- hhmts end --> </small></div> <address> <a href="http://www.cse.chalmers.se/~hallgren/">TH</a>
@@ -24,7 +24,7 @@ [hidden(g.basename+".gf",show_abstract(g))]) for(var i in g.concretes) form.appendChild(hidden(g.basename+g.concretes[i].langcode+".gf",- show_concrete(g.basename)(g.concretes[i])));+ show_concrete(g)(g.concretes[i]))); editor.appendChild(form); form.submit(); form.parentNode.removeChild(form);@@ -140,7 +140,7 @@ function check_exp(s,cont) { function check(gf_message) { //debug("cc "+s+" = "+gf_message);- cont(/parse error/.test(gf_message) ? "parse error" : null);+ cont(/(parse|syntax) error/.test(gf_message) ? "syntax error" : null); } if(navigator.onLine) ajax_http_get("upload.cgi?cc="+encodeURIComponent(s),check)
@@ -1,11 +1,19 @@ function with_dir(cont) {+ function have_dir(dir) {+ var unique_id=local.get("unique_id")+ if(!unique_id) {+ unique_id=dir.substr(10) // skip "/tmp/gfse."+ local.put("unique_id",unique_id)+ }+ cont(dir,unique_id)+ } var dir=local.get("dir","");- if(/^\/tmp\//.test(dir)) cont(dir);+ if(/^\/tmp\//.test(dir)) have_dir(dir); else ajax_http_get("/new", function(dir) { local.put("dir",dir);- cont(dir);+ have_dir(dir); }); } @@ -18,31 +26,57 @@ } // Upload the grammar to the server and check it for errors-function upload(g) {+function old_upload(g) { function upload2(dir) { var form=node("form",{method:"post",action:"/cloud"}, [hidden("dir",dir),hidden("command","make"), hidden(g.basename+".gf",show_abstract(g))])- var files = [g.basename+".gf"]+ //var files = [g.basename+".gf"] for(var i in g.concretes) { var cname=g.basename+g.concretes[i].langcode+".gf";- files.push(cname);+ //files.push(cname); form.appendChild(hidden(cname,- show_concrete(g.basename)(g.concretes[i])));+ show_concrete(g)(g.concretes[i]))); } editor.appendChild(form); form.submit(); form.parentNode.removeChild(form); }- + function upload3(message) { if(message) alert(message); } with_dir(upload2) } +// Upload the grammar to the server and check it for errors+function upload_grammars(gs,cont) {+ function upload2(dir) {+ var pre="dir="+encodeURIComponent(dir)+ var form= {command:"make"}+ for(var aix in gs) {+ var g=gs[aix]+ form[encodeURIComponent(g.basename+".gf")]=show_abstract(g)+ var cnc=g.concretes+ for(var i in cnc) {+ var cname=g.basename+cnc[i].langcode+".gf";+ form[encodeURIComponent(cname)]=show_concrete(g)(cnc[i]);+ }+ }+ ajax_http_post("/cloud",pre+encodeArgs(form),upload3)+ }++ function upload3(json) {+ var res=JSON.parse(json)+ if(cont) cont(res)+ else alert(res.errorcode+"\n"+res.command+"\n\n"+res.output);+ }++ with_dir(upload2)+}+ // Upload the grammar to store it in the cloud function upload_json(cont) {- function upload2(dir) {+ function upload2(dir,unique_id) { function upload3(resptext,status) { local.put("json_uploaded",Date.now()); //debug("Upload complete")@@ -64,7 +98,6 @@ } } - var prefix=dir.substr(10)+"-" // skip "/tmp/gfse." //debug("New form data"); //var form=new FormData(); // !!! Doesn't work on Android 2.2! var form={dir:dir};@@ -73,14 +106,13 @@ var g=local.get(i,null); if(g) { if(!g.unique_name) {- g.unique_name=prefix+i;+ g.unique_name=unique_id+"-"+i; save_grammar(g) } //form.append(g.unique_name+".json",JSON.stringify(g)); form[encodeURIComponent(g.unique_name+".json")]=JSON.stringify(g) } }- //debug("Upload to "+prefix); ajax_http_post("/cloud","command=upload"+encodeArgs(form),upload3,cont) } @@ -125,7 +157,7 @@ local.put("current",0); if(ls) { //debug("Downloading "+ls);- var files=ls.split(" ");+ var files=JSON.parse(ls); cleanup_deleted(files); for(var i in files) get_file(files[i],file_downloaded,file_failed); }@@ -161,11 +193,17 @@ }) } +// Check the syntax of a source module+function check_module(path,source,cont) {+ var enc=encodeURIComponent;+ http_get_json("/parse?"+enc(path)+"="+enc(source),cont)+}+ // Check the syntax of an expression function check_exp(s,cont) { function check(gf_message) { //debug("cc "+s+" = "+gf_message);- cont(/parse error/.test(gf_message) ? "parse error" : null);+ cont(/(parse|syntax) error/.test(gf_message) ? "syntax error" : null); } gfshell("cc "+s,check); }
@@ -1,9 +1,18 @@-body { background: #eee; }+body { color: black; background: #eee; } h1 { font-size: 175%; }-h1,h2,h3,h4,small { font-family: sans-serif; }+h1,h2,h3,h4,small { font-family: sans-serif;}+h1,h2,h3,h4 { color: #303030; text-shadow: rgba(0,0,0,0.25) 3px 3px 5px; }+ h1:first-child, h2:first-child { margin-top: 0; margin-bottom: 1ex; } -#editor { max-width: 50em; }+#editor {+ /* This allows the div to grow wider than the window if necessary to+ accommodate the contents. Otherwise, wide things inside can poke+ through the border. */+ display: table;+ width: 100%;+}+ div.home, div.grammar { border: 1px solid black; background: #9df; } div.home { padding: 5px; } div.files { margin: 0 8px 8px 8px; }@@ -17,6 +26,9 @@ img.cloud, img.right, div.right, div.modtime { float: right; } .modtime { color: #999; white-space: nowrap; } +table.grammar_list { border-collapse: collapse; margin-left: 1.0em; }+table.grammar_list td { padding: 0.4ex 0.25em; }+ div.namebar { background: #9df; } div.namebar table { width: 100%; } .namebar h3, .home h3 { margin: 0; color: #009; }@@ -32,8 +44,7 @@ div.template:hover { background: #def;} -.lin input[type=button],-.template input[type=button] { float: right; clear: right; margin: 0; }+.exb_linbuttons input[type=button] { float: right; clear: right; margin: 0; } .exb_output { background: #dfd; float: right; margin: 0 10px; } .more, .delete { font-weight: bold; font-family: sans-serif; }@@ -45,14 +56,15 @@ .editable:hover, .deletable:hover { background: #ff9; } -.extensible:hover .more,.editable:hover > .edit ,.deletable:hover > .delete +.extensible:hover .more,.editable:hover > .edit ,.deletable:hover > .delete,+ tr.deletable:hover .delete { visibility: visible; } .more { color: green; } .edit { color: orange; } .delete { color: red; } .error_message,.inError { color: red; }-.template, .template .sep { color: #999; }+.template, .template .sep, .unimportant { color: #999; } form { display: inline-block; } table.tabs {@@ -60,7 +72,7 @@ border-width: 0; border-spacing: 0; empty-cells: show; } -table.tabs td { text-align: center; border: 2px solid #009; padding: 2px; }+table.tabs td { text-align: center; border: 2px solid #009; padding: 2px; white-space: nowrap; } table.tabs td.active { background: white; border-bottom-width: 0; } table.tabs td.inactive { background: #cef;@@ -86,3 +98,16 @@ li { margin-top: 0.5ex; margin-bottom: 0.5ex; } #sharing h1, #sharing .footer { display: none; }++div.compiler_output .back_to_editor { display: none; }++textarea.text_mode {+ /*font-family: inherit; font-size: inherit;*/+ width: 99%;+}++div#minibar {+ border: 1px solid black;+ padding: 5px;+ background: #ccc url("../minibar/brushed-metal.png");+}
@@ -1,6 +1,7 @@ var editor=element("editor");+var compiler_output=element("compiler_output") /* -------------------------------------------------------------------------- */ @@ -13,7 +14,7 @@ function draw_grammar_list() { local.put("current",0);- editor.innerHTML="";+ clear(editor); var uploaded=local.get("dir") && local.get("json_uploaded"); var cloud_upload= a(jsurl("upload_json()"),@@ -35,24 +36,28 @@ insertAfter(cloud_download,cloud_upload); } editor.appendChild(home)- var gs=ul([]); function del(i) { return function () { delete_grammar(i); } } function clone(i) { return function (g,b) { clone_grammar(i); } }- for(var i=0;i<local.count;i++) {- var grammar=local.get(i,null);- if(grammar && grammar.basename) {- var link=a(jsurl("open_grammar("+i+")"),[text(grammar.basename)]);- gs.appendChild(- node("li",{"class":"extensible"},- [deletable(del(i),link,"Delete this grammar"),- more(grammar,clone(i),"Clone this grammar")]))- }+ function new_extension(i) { return function (g,b) { new_grammar([g]) }}+ function item(i,grammar) {+ var link=a(jsurl("open_grammar("+i+")"),[text(grammar.basename)]);+ return node("tr",{"class":"extensible deletable"},+ [td(delete_button(del(i),"Delete this grammar")),+ td(link),+ td(more(grammar,clone(i),"Clone this grammar"))]) } if(local.get("count",null)==null) home.appendChild(text("You have not created any grammars yet.")); else if(local.count==0) home.appendChild(text("Your grammar list is empty."));- home.appendChild(gs);+ else {+ var rows=[];+ for(var i=0;i<local.count;i++) {+ var grammar=local.get(i,null);+ if(grammar && grammar.basename) rows.push(item(i,grammar))+ }+ home.appendChild(node("table",{"class":"grammar_list"},rows));+ } home.appendChild( ul([li([a(jsurl("new_grammar()"),[text("New grammar")])])]));@@ -60,13 +65,31 @@ home.appendChild(empty_id("div","sharing")); } -function new_grammar() {+function new_grammar(gs) {+ gs=gs || []; var g={basename:"Unnamed",+ extends:gs.map(function(g){return g.basename}),+ // check that "Unnamed" is not in exts !! abstract:{cats:[],funs:[]},- concretes:[]}+ concretes:empty_concretes_extending(gs)} edit_grammar(g); } +function empty_concretes_extending(gs) {+ var concs=[]+ var langs=[];+ for(var i in gs) {+ var g=gs[i];+ for(var ci in g.concretes) {+ var conc=g.concretes[ci];+ var code=conc.langcode;+ if(!langs[code])+ langs[code]=true,concs.push(new_concrete(code))+ }+ }+ return concs+}+ function remove_local_grammar(i) { local.remove(i); while(local.count>0 && !local.get(local.count-1))@@ -85,8 +108,9 @@ function clone_grammar(i) { var old=local.get(i);- var g={basename:old.basename,abstract:old.abstract,concretes:old.concretes}- save_grammar(g);+ var g={basename:old.basename,extends:old.extends || [],+ abstract:old.abstract,concretes:old.concretes}+ save_grammar(g); // we rely on the serialization to eliminate sharing draw_grammar_list(); } @@ -97,7 +121,11 @@ edit_grammar(g); } -function close_grammar(g) { save_grammar(g); draw_grammar_list(); }+function close_grammar(g) {+ clear(compiler_output);+ save_grammar(g);+ draw_grammar_list();+} function reload_grammar(g) { save_grammar(g); edit_grammar(g); } function save_grammar(g) {@@ -106,8 +134,7 @@ } function edit_grammar(g) {- editor.innerHTML="";- editor.appendChild(draw_grammar(g));+ replaceChildren(editor,draw_grammar(g)); } @@ -120,8 +147,10 @@ function draw_namebar(g,files) { return div_class("namebar", [table([tr([td(draw_name(g)),- td_right([draw_plainbutton(g,files),- upload_button(g),+ td_right([minibar_button(g,files),+ quiz_button(g),+ compile_button(g),+ draw_plainbutton(g,files), draw_closebutton(g)])])])]) } @@ -152,12 +181,85 @@ return b; } -function upload_button(g) {- var b=button("Compile",function(){upload(g);});- b.title="Upload the grammar to the server to check it in GF and test it in the minibar";+function show_compile_error(res) {+ var dst=compiler_output+ if(dst) {+ clear(dst);+ //var minibarlink=a(res.minibar_url,[text("Minibar")])+ if(res.errorcode=="OK")+ dst.appendChild(wrap("h3",text("OK")))+ else+ appendChildren(dst,+ [node("h3",{"class":"error_message"},+ [text(res.errorcode)]),+ wrap("pre",text(res.command)),+ wrap("pre",text(res.output))])+ }+}++function compile_button(g) {+ function compile() {+ replaceInnerHTML(compiler_output,"<h3>Compiling...</h3>");+ upload(g,show_compile_error);+ }+ var b=button("Compile",compile);+ b.title="Upload the grammar to the server to check it in GF for errors"; return b; } +function minibar_button(g,files) {+ var b2;+ function show_editor() { edit_grammar(g); }+ function goto_minibar(res) {+ show_compile_error(res);+ if(res.errorcode=="OK") {+ //location.href=res.minibar_url;+ clear(files);+ files.appendChild(div_id("minibar"));+ var online_options={grammars_url: local.get("dir")+"/",+ grammar_list: [g.basename+".pgf"]}+ var pgf_server=pgf_online(online_options)+ var minibar_options= {+ show_abstract: true,+ show_trees: true,+ show_grouped_translations: false,+ default_source_language: "Eng",+ try_google: true+ }+ var minibar=new Minibar(pgf_server,minibar_options);+ b.style.display="none";+ if(b2) b2.style.display="";+ else {+ b2=button("Show editor",show_editor);+ insertAfter(b2,b);+ }+ }+ }+ function compile() {+ replaceInnerHTML(compiler_output,"<h3>Compiling...</h3>");+ upload(g,goto_minibar);+ }+ var b=button("Minibar",compile);+ b.title="Upload the grammar and test it in the minibar";+ return b;+}++function quiz_button(g) {+ function goto_quiz(res) {+ show_compile_error(res);+ if(res.errorcode=="OK")+ location.href="../TransQuiz/translation_quiz.html?"+local.get("dir")+"/"+ }+ function compile() {+ replaceInnerHTML(compiler_output,"<h3>Compiling...</h3>");+ upload(g,goto_quiz);+ }+ var b=button("Quiz",compile);+ b.title="Upload the grammar and go to the translation quiz";+ return b;+}++ function lang(code,name) { return { code:code, name:name} } function lang1(name) { var ws=name.split("/");@@ -175,7 +277,7 @@ function add_concrete(g,el) { var file=element("file");- file.innerHTML="";+ clear(file); var dc={}; for(var i in g.concretes) dc[g.concretes[i].langcode]=true;@@ -279,7 +381,10 @@ var abs=g.abstract; var startcat = abs.startcat || abs.cats[0]; function opt(cat) { return option(cat,cat); }- var m= node("select",{},map(opt,abs.cats));+ var opts = g.extends && g.extends.length>0 ? [opt("-")] : [];+ var dc=defined_cats(g);+ for(var cat in dc) if(dc[cat]!="Predef") opts.push(opt(cat));+ var m = node("select",{},opts); m.value=startcat; m.onchange=function() { if(m.value!=abs.startcat) {@@ -291,12 +396,72 @@ return indent([kw("flags startcat"),sep(" = "),m]); } +function draw_conc_extends(g,conc) {+ var kw_extends=kw("extends ")+ kw_extends.title="This grammar is an extension of the grammars listed here."+ var exts=(g.extends || []).map(conc_extends(conc))+ return exts.length>0+ ? indent([kw_extends,ident(exts.join(", "))])+ : text("")+}++function draw_extends(g) {+ var kw_extends=kw("extends ")+ var exts= g.extends || [];+ kw_extends.title="This grammar is an extension of the grammars listed here."+ var m1=more(g,add_extends,"Inherit from other grammars");+ var m2=more(g,add_extends,"Inherit from more grammars");+ var es=[exts.length>0 ? kw_extends : span_class("more",kw_extends)];+ function del(i) { return function() { delete_extends(g,i); }}+ for(var i=0;i<exts.length;i++) {+ if(i>0) es.push(sep(", "))+ es.push(deletable(del(i),ident(exts[i]),"Don't inherit from "+exts[i]));+ }+ es.push(exts.length>0 ? m2 : m1);+ return indent([extensible(es)])+}++function delete_extends(g,ix) {+ g.extends=delete_ix(g.extends,ix);+ //timestamp(g);+ reload_grammar(g);+}++function add_extends(g,el) {+ var file=element("file");+ clear(file)+ var gs=cached_grammar_array_byname();+ var list=[]+ for(var i in gs) {+ if(gs[i].basename!=g.basename+ && !elem(gs[i].basename,g.extends || [])+ && !elem(g.basename,gs[i].extends || [])+ // also exclude indirectly inherited grammars!!+ )+ list.push(li([a(jsurl("add_extends2("+g.index+","+gs[i].index+")"),+ [text(gs[i].basename)])]));+ }+ file.appendChild(p(text("Pick a grammar to inherit:")));+ file.appendChild(node("ul",{"class":"grammars"},list));+}++function add_extends2(gix,igix) {+ var g=local.get(gix);+ var ig=local.get(igix);+ if(!g.extends) g.extends=[];+ g.extends.push(ig.basename);+ //timestamp(g)+ reload_grammar(g);+}+ function draw_abstract(g) { var kw_cat = kw("cat"); kw_cat.title = "The categories (nonterminals) of the grammar are enumerated here. [C.3.2]"; var kw_fun = kw("fun"); kw_fun.title = "The functions (productions) of the grammar are enumerated here. [C.3.4]";+ var flags=g.abstract.startcat || g.abstract.cats.length>1+ || g.extends && g.extends.length>0 ? draw_startcat(g) : text(""); function sort_funs() {@@ -304,16 +469,98 @@ timestamp(g.abstract); save_grammar(g); }- return div_id("file",+ var file=div_id("file", [kw("abstract "),ident(g.basename),sep(" = "), draw_timestamp(g.abstract),+ draw_extends(g), flags, indent([extensible([kw_cat, indent(draw_cats(g))]), extensible([kw_fun, indent_sortable(draw_funs(g),sort_funs)])])]);+ if(navigator.onLine) {+ var mode_button=text_mode(g,file,0);+ insertBefore(mode_button,file.firstChild)+ }+ return file; } +function module_name(g,ix) {+ return ix==0 ? g.basename : g.basename+g.concretes[ix-1].langcode+}+function show_module(g,ix) {+ return ix==0 ? show_abstract(g) : show_concrete(g)(g.concretes[ix-1]);+}++function text_mode(g,file,ix) {+ var path=module_name(g,ix)+".gf"+ function switch_to_guided_mode() {+ clear(compiler_output);+ edit_grammar(g); // !!+ }+ function store_parsed(parse_results) {+ var dst=compiler_output;+ var msg=parse_results[path];+ clear(dst)+ //console.log(msg)+ if(dst && msg.error)+ dst.appendChild(span_class("error_message",+ text(msg.location+": "+msg.error)))+ else if(dst && msg.parsed)+ dst.innerHTML=+ "Accepted by GF, but not by this editor ("+msg.parsed+")"+ else if(msg.converted) {+ if(ix==0) {+ var gnew=msg.converted;+ g.abstract=gnew.abstract;+ g.extends=gnew.extends;+ timestamp(g.abstract);+ save_grammar(g);+ }+ else {+ var conc=g.concretes[ix-1];+ var cnew=msg.converted.concretes[0];+ conc.opens=cnew.opens;+ conc.params=cnew.params;+ conc.lincats=cnew.lincats;+ conc.opers=cnew.opers;+ conc.lins=cnew.lins;+ timestamp(conc);+ save_grammar(g);+ }+ }+ else replaceInnerHTML(dst,"unexpected parse result");+ }+ var last_source=show_abstract(g);+ function parse(source) {+ if(source!=last_source) {+ if(navigator.onLine) {+ //clear(compiler_output) // makes the page "jumpy"+ last_source=source;+ check_module(path,source,store_parsed)+ }+ else replaceInnerHTML(compiler_output,+ "Offline, edits will not be saved")+ }+ }+ function switch_to_text_mode() {+ var ta=node("textarea",{class:"text_mode",rows:25,cols:80},+ [text(show_module(g,ix))])+ var timeout;+ ta.onkeyup=function() {+ if(timeout) clearTimeout(timeout);+ timeout=setTimeout(function(){parse(ta.value)},400)+ }+ var mode_button=div_class("right",[button("Guided mode",switch_to_guided_mode)])+ clear(file)+ appendChildren(file,[mode_button,ta])+ //ta.style.height=ta.scrollHeight+"px";+ ta.focus();+ }+ var mode_button=div_class("right",[button("Text mode",switch_to_text_mode)])+ return mode_button;+}+ function add_cat(g,el) { function add(s) { var cats=s.split(/\s*(?:\s|[;])\s*/); // allow separating spaces or ";"@@ -352,21 +599,27 @@ string_editor(el,cat,ren); } +function duplicated(g,kind,orig) {+ return orig==g.basename+ ? "Same "+kind+" defined twice in this module"+ : "Same "+kind+" already defined in "+orig+}+ function draw_cats(g) { var cs=g.abstract.cats; var es=[];- var defined={};+ var defined=inherited_cats(g); function eident(cat) { function ren(g,el) { rename_cat(g,el,cat); } return editable("span",ident(cat),g,ren,"Rename category"); } function check(cat,el) {- return ifError(defined[cat],"Same category named twice",el);+ return ifError(defined[cat],duplicated(g,"category",defined[cat]),el); } function del(i) { return function() { delete_cat(g,i); }} for(var i in cs) { es.push(deletable(del(i),check(cs[i],eident(cs[i])),"Delete this category"));- defined[cs[i]]=true;+ defined[cs[i]]=g.basename; es.push(sep("; ")); } es.push(more(g,add_cat,"Add more categories"));@@ -419,24 +672,24 @@ var funs=g.abstract.funs; var es=[]; var dc=defined_cats(g);- var df={};+ var df=inherited_funs(g); function del(i) { return function() { delete_fun(g,i); }} function draw_efun(i,df) {- return editable("span",draw_fun(funs[i],dc,df),g,edit_fun(i),"Edit this function");+ return editable("span",draw_fun(g,funs[i],dc,df),g,edit_fun(i),"Edit this function"); } for(var i in funs) { es.push(node_sortable("fun",funs[i].name,[deletable(del(i),draw_efun(i,df),"Delete this function")]));- df[funs[i].name]=true;+ df[funs[i].name]=g.basename; } es.push(more(g,add_fun,"Add a new function")); return es; } -function draw_fun(fun,dc,df) {+function draw_fun(g,fun,dc,df) { function check(el) { return ifError(dc[fun.name], "Function names must be distinct from category names",- ifError(df[fun.name],"Same function defined twice",el));+ ifError(df[fun.name],duplicated(g,"function",df[fun.name]),el)); } return node("span",{}, [check(ident(fun.name)),sep(" : "),draw_type(fun.type,dc)]);@@ -445,6 +698,7 @@ function draw_type(t,dc) { var el=empty("span"); function check(t,el) {+ if(dc[t]) el.title=dc[t]+"."+t; return ifError(!dc[t],"Undefined category",el); } for(var i in t) {@@ -489,13 +743,14 @@ kw_param.title="Parameter type definitions can be added here. [C.3.12]" var kw_oper=kw("oper") kw_oper.title="Operation definitions can be added here. [C.3.14]"- return div_id("file",+ var file=div_id("file", [kw("concrete "), ident(g.basename), editable("span",ident(conc.langcode),g, edit_langcode,"Change language"), kw(" of "),ident(g.basename),sep(" = "), draw_timestamp(conc),+ draw_conc_extends(g,conc), indent([extensible([kw("open "),draw_opens(g,i)])]), indent([kw_lincat,draw_lincats(g,i)]), indent([kw_lin,draw_lins(g,i)]),@@ -503,6 +758,11 @@ indent([extensible([kw_oper,draw_opers(g,i)])]), exb_extra(g,i) ])+ if(navigator.onLine) {+ var mode_button=text_mode(g,file,i+1);+ insertBefore(mode_button,file.firstChild)+ }+ return file; } var rgl_modules=["Paradigms","Syntax","Lexicon","Extra"];@@ -522,7 +782,7 @@ } if(list.length>0) { var file=element("file");- file.innerHTML="";+ clear(file) file.appendChild(p(text("Pick a resource library module to open:"))); file.appendChild(node("ul",{},list)); }@@ -658,7 +918,7 @@ return node("span",{"class":cls}, [ident(c.cat),sep(" = "),t]); }- var dc=defined_cats(g);+ var dc=locally_defined_cats(g,{}); function draw_lincat(c) { var cat=c.cat; var err=!dc[cat];@@ -817,11 +1077,11 @@ } l.push(sep(" = ")); var t=editable("span",text_ne(f.lin),g,edit(f),"Edit lin for "+f.fun);- appendChildren(t,exb_linbuttons(g,ci,f));+ t.appendChild(exb_linbuttons(g,ci,f)); l.push(t); return node("span",{"class":cls},l); }- var df=defined_funs(g);+ var df=locally_defined_funs(g,{}); function draw_lin(f) { var fun=f.fun; var err= !df[fun];@@ -852,6 +1112,57 @@ /* -------------------------------------------------------------------------- */ +function defined_cats(g) { return all_defined_cats(g,inherited_grammars(g)) }+function defined_funs(g) { return all_defined_funs(g,inherited_gramamrs(g)) }+function inherited_cats(g) {+ return all_inherited_cats(inherited_grammars(g),predefined_cats())+}+function inherited_funs(g) {return all_inherited_funs(inherited_grammars(g),{})}++function upload(g,cont) {+ var gs=inherited_grammars(g);+ gs.push(g);+ upload_grammars(gs,cont);+}++// inherited_grammars :: Grammar -> [Grammar]+function inherited_grammars(g) {+ // Load the available grammars once+ var grammar_byname=cached_grammar_byname();+ var visited={};+ // Then traverse the dependencies to collect all inherited grammars+ function ihgs(g) {+ if(visited[g.basename]) return []; // avoid cycles and diamonds+ else {+ visited[g.basename]=true;+ var igs=(g.extends || []).map(grammar_byname)+ var igss=igs.map(ihgs)+ for(var i in igss) igs=igs.concat(igss[i]);+ return igs;+ }+ }+ return ihgs(g)+}++// cached_grammar__byname :: () -> (ModId->Grammar)+function cached_grammar_byname() {+ var gix=cached_grammar_array_byname()+ function grammar_byname(name) { return gix[name]; }+ return grammar_byname;+}++// cached_grammar_array_byname :: () -> {ModId=>Grammar}+function cached_grammar_array_byname() {+ var gix={};+ for(var i=0;i<local.count;i++) {+ var g=local.get(i,null);+ if(g) gix[g.basename]=g; // basenames are not necessarily unique!!+ }+ return gix+}++/* -------------------------------------------------------------------------- */+ function find_langcode(concs,langcode) { for(var ci in concs) if(concs[ci].langcode==langcode)@@ -990,6 +1301,7 @@ function kw(txt) { return wrap_class("span","kw",text(txt)); } function sep(txt) { return wrap_class("span","sep",text(txt)); } function ident(txt) { return wrap_class("span","ident",text(txt)); }+function unimportant(txt) { return wrap_class("small","unimportant",text(txt)); } function indent(cs) { return div_class("indent",cs); } function indent_sortable(cs,sort) {@@ -1004,9 +1316,9 @@ function extensible(cs) { return div_class("extensible",cs); } -function more(g,action,hint) {+function more(g,action,hint,label) { var b=node("span",{"class":"more","title":hint || "Add more"},- [text(" + ")]);+ [text(label || " + ")]); b.onclick=function() { action(g,b); } return b; }@@ -1029,11 +1341,16 @@ } function deletable(del,el,hint) {- var b=node("span",{"class":"delete",title:hint || "Delete"},[text("×")])- b.onclick=del;+ var b=delete_button(del,hint) return node("span",{"class":"deletable"},[b,el]) } +function delete_button(action,hint) {+ var b=node("span",{"class":"delete",title:hint || "Delete"},[text("×")])+ b.onclick=action;+ return b;+}+ function touch_edit() { var b=node("input",{type:"checkbox"},[]); function touch() {@@ -1054,15 +1371,6 @@ function td_right(cs) { return node("td",{"class":"right"},cs); } function jsurl(js) { return "javascript:"+js; } -function hidden(name,value) {- return node("input",{type:"hidden",name:name,value:value},[])-}--function insertBefore(el,ref) { ref.parentNode.insertBefore(el,ref); }--function insertAfter(el,ref) {- ref.parentNode.insertBefore(el,ref.nextSibling);-} /* -------------------------------------------------------------------------- */ function download_from_cloud() {@@ -1075,6 +1383,7 @@ } function download3() { //debug("Uploading local grammars to cloud");+ local.put("dir",newdir); upload_json(download4) } function download4() {
@@ -51,8 +51,11 @@ if(!conc.example_lang) conc.example_lang=g.concretes[0].langcode; reload_grammar(g); }- - exb_call(g,ci,"possibilities",{},show_poss)+ var exci=conc_index(g,conc.example_lang);+ if(!conc.example_lang || !exci)+ conc.example_lang=g.concretes[ci==0 ? 1 : 0].langcode;+ var exci=conc_index(g,conc.example_lang);+ exb_call(g,ci,"possibilities",{example_state:exb_state(g,exci)},show_poss) } var parser = { Eng: "ParseEngAbs.pgf",@@ -67,9 +70,11 @@ } function exblangmenu() {- function opt(conc) { return option(conc.langcode,conc.langcode); }- // skip target language- var m =node("select",{},map(opt,g.concretes));+ function opt(conc) {+ return option(concname(conc.langcode),conc.langcode);+ }+ function skip_target(c) { return c.langcode!=conc.langcode; }+ var m =node("select",{},map(opt,filter(skip_target,g.concretes))); if(conc.example_lang) m.value=conc.example_lang; m.onchange=function() { conc.example_lang=m.value; save_grammar(g); } return m@@ -78,15 +83,24 @@ function ask_poss() { ask_possibilities(g,ci) } if(navigator.onLine && g.concretes.length>1 && conc.example_based && !example_based[ci]) ask_poss();- return parser[conc.langcode] && g.concretes.length>1- ? indent([text("Example based editing: "),- conc.example_based- ? node("span",{},[button("Stop",stop_exb),- text(" Example language: "),- exblangmenu()- ])- : button("Start",ask_poss)])- : text("")+ var sb=button("Start",ask_poss)+ if(parser[conc.langcode] && g.concretes.length>1)+ return indent([wrap("small",text("Example-based editing: ")),+ conc.example_based+ ? node("span",{},+ [button("Stop",stop_exb),+ wrap("small",text(" Example language: ")),+ exblangmenu()+ ])+ : sb])+ else {+ sb.disabled=true;+ var why= g.concretes.length>1+ ? " ("+concname(conc.langcode)+" is not supported yet)"+ : " (Add another language to take examples from first.)"+ return indent([unimportant("Example-based editing: "), sb,+ unimportant(why)])+ } } function fun_lincat(g,conc,fun) {@@ -158,14 +172,19 @@ } var buttons=[]; if(conc.example_based && eb) {- if(eb.exready[fun] && fun_lincat(g,conc,fun))- buttons.push(button("By example",by_example))- if(eb.testable[fun] && f.eb_lin) {+ if(f.template) {+ var byex=button("By example",by_example);+ if(!(eb.exready[fun] && fun_lincat(g,conc,fun)))+ byex.disabled=true+ buttons.push(byex)+ }+ else { var b=button("Test it",test_it);+ if(!eb.testable[fun] || !f.eb_lin) b.disabled=true; buttons.push(b) } var exb_output=node("span",{"class":"exb_output"},[]); buttons.push(exb_output) }- return buttons+ return node("span",{"class":"exb_linbuttons"},buttons) }
@@ -1,31 +1,100 @@ /* Abstract syntax for a small subset of GF grammars in JavaScript */ -function defined_cats(g) {- var dc={};+/*+type Id = String -- all sorts of identifiers+type ModId = Id -- module name+type Cat = Id -- category name+type FunId = Id -- function name+type Type = [Cat] -- [Cat_1,...,Cat_n] means Cat_1 -> ... -> Cat_n++type Grammar = { basename: ModId,+ extends: [ModId],+ abstract: Abstract,+ concretes: [Concrete] }++type Abstract = { startcat: Cat, cats: [Cat], funs: [Fun] }+type Fun = { name: FunId, type: Type }++type Concrete = { langcode: Id,+ opens: [ModId],+ params: [{name: Id, rhs: String}],+ lincats : [{ cat: Cat, type: Term}],+ opers: [{name: Lhs, rhs: Term}],+ lins: [{fun: FunId, args: [Id], lin: Term}]+ }+++type Lhs = String -- name and type of oper,+ -- e.g "regN : Str -> { s:Str,g:Gender} ="+type Term = String -- arbitrary GF term (not parsed by the editor)+*/++// locally_defined_cats :: Grammar -> {Cat=>ModId} -> {Cat=>ModId} // destr upd+function locally_defined_cats(g,dc) { with(g.abstract)- for(var i in cats) dc[cats[i]]=true;+ for(var i in cats) dc[cats[i]]=g.basename; return dc; } -function defined_funs(g) {- var df={};+// predefined_cats :: () -> {Cat=>ModId}+function predefined_cats() {+ var pd = "Predef"+ return { "Int":pd, "Float":pd, "String":pd}+}++// all_defined_cats :: Grammar -> [Grammar] -> {Cat=>ModId}+function all_defined_cats(g,igs) {+ return all_inherited_cats(igs,locally_defined_cats(g,predefined_cats()))+}+// all_inherited_cats :: [Grammar] -> {Cat=>ModId} -> {Cat=>ModId} // destr upd+function all_inherited_cats(igs,dc) {+ for(var i in igs) dc=locally_defined_cats(igs[i],dc)+ return dc;+}++// locally_defined_funs :: [Grammar] -> {FunId=>ModId} -> {Id=>ModId} // destr upd+function locally_defined_funs(g,df) { with(g.abstract)- for(var i in funs) df[funs[i].name]=true;+ for(var i in funs) df[funs[i].name]=g.basename; return df; } +// all_defined_funs :: Grammar -> [Grammar] -> {FunId=>ModId}+function all_defined_funs(g,igs) {+ return all_inherited_funs(igs,locally_defined_funs(g,{}))+}+// all_inherited_funs :: [Grammar] -> {FunId=>ModId} -> {FunId=>ModId} // destr upd+function all_inherited_funs(igs,df) {+ for(var i in igs) df=locally_defined_funs(igs[i],df)+ return df;+}++// Return the type of a named function in the abstract syntax+// function_type :: Grammar -> FunId -> Type function function_type(g,fun) { with(g.abstract) for(var i in funs) if(funs[i].name==fun) return funs[i].type return null; } +// Return the lincat defined in a given concrete syntax for an abstract category+// cat_lincat :: Concrete -> Cat -> Term function cat_lincat(conc,cat) { with(conc) for(var i in lincats) if(lincats[i].cat==cat) return lincats[i].type return null; } +// Return the index of the concrete syntax with a given langcode+// conc_index :: Grammar -> Id -> Int+function conc_index(g,langcode) {+ var c=g.concretes;+ for(var ix=0;ix<c.length;ix++)+ if(c[ix].langcode==langcode) return ix+ return null;+}++// rename_category :: Grammar -> Cat -> Cat -> Grammar // destructive update function rename_category(g,oldcat,newcat) { function rename_cats(cats) { for(var i in cats) if(cats[i]==oldcat) cats[i]=newcat;@@ -54,6 +123,7 @@ return g; } +// rename_function :: Grammar -> Id -> Id -> Grammar // destructive update function rename_function(g,oldfun,newfun) { function rename_lin(lin) { if(lin.fun==oldfun) lin.fun=newfun;@@ -65,6 +135,7 @@ return g; } +// change_lin_lhs :: Grammar -> Id -> Grammar // destructive update function change_lin_lhs(g,fun) { function change_lin(lin) { if(lin.fun==fun.name) lin.args=arg_names(fun.type);@@ -90,7 +161,7 @@ : s+"? "+kind+" names must start with a letter and can contain letters, digits, _ and '" } -+// parse_fun :: String -> {error:String} + {ok:Fun} function parse_fun(s) { var ws=s.split(/\s+/); var fun={name:"",type:[]};@@ -116,6 +187,7 @@ } +// parse_param :: String -> {error:String} + { ok:{name:Id,rhs:String} } function parse_param(s) { var ws=s.split("="); if(ws.length==2) {@@ -127,6 +199,7 @@ return { error: "P = C1 | ... | Cn" } } +// parse_oper :: String -> {error:String} + {ok:{name:Lhs, rhs:Term}} function parse_oper(s) { var i=s.indexOf(" "); var operr = { error: "op = expr" }@@ -143,7 +216,7 @@ } -/* --- Print as plain text (normal GF concrete syntax) ---------------------- */+/* --- Print as plain text (normal GF source syntax) ------------------------- */ function show_type(t) { var s="";@@ -165,7 +238,9 @@ function show_abstract(g) { // var startcat= g.abstract.cats.length==1 ? g.abstract.cats[0] : g.abstract.startcat; var startcat= g.abstract.startcat || g.abstract.cats[0];- return "abstract "+g.basename+" = {\n\n"+ return "abstract "+g.basename+" = "+ +show_extends(g.extends)+ +"{\n\n" +"flags coding = utf8 ;\n\n" +show_startcat(startcat) +show_cats(g.abstract.cats)@@ -173,8 +248,14 @@ +"}\n"; } +function show_extends(exts) {+ return exts && exts.length>0 ? exts.join(", ")+" ** " : "";+}+ function show_startcat(startcat) {- return startcat ? "flags startcat = "+startcat+";\n\n" : "";+ return startcat && startcat!="-"+ ? "flags startcat = "+startcat+";\n\n"+ : ""; } function show_cats(cats) {@@ -184,19 +265,22 @@ function show_funs(funs) { return show_list("fun",show_fun,funs); } function show_concretes(g) {- return map(show_concrete(g.basename),g.concretes).join("\n\n");+ return map(show_concrete(g),g.concretes).join("\n\n"); } -function show_concrete(basename) {+function conc_extends(conc) { return function(m) { return m+conc.langcode; }}++function show_concrete(g) { return function(conc) { return "--# -path=.:present\n"- + "concrete "+basename+conc.langcode+" of "+basename+" ="+ + "concrete "+g.basename+conc.langcode+" of "+g.basename+" = "+ +show_extends((g.extends || []).map(conc_extends(conc))) +show_opens(conc.opens)- +" {\n\nflags coding = utf8 ;\n\n"- +show_params(conc.params)+ +"{\n\nflags coding = utf8 ;\n\n" +show_lincats(conc.lincats)- +show_opers(conc.opers) +show_lins(conc.lins)+ +show_params(conc.params)+ +show_opers(conc.opers) +"}\n" } }@@ -208,7 +292,7 @@ } function show_opens(opens) {- return opens && opens.length>0 ? "\n\nopen "+opens.join(", ")+" in" : ""+ return opens && opens.length>0 ? "\n\nopen "+opens.join(", ")+" in " : "" } function show_params(params) { return show_list("param",show_param,params); }
@@ -4,6 +4,7 @@ <title>GF online editor for simple multilingual grammars</title> <meta charset="UTF-8"> <link rel="stylesheet" type="text/css" href="editor.css" title="Cloud">+<link rel="stylesheet" type="text/css" href="../minibar/minibar.css"> <link rel="alternate stylesheet" type="text/css" href="molto.css" title="MOLTO"> <link rel=author href="http://www.cse.chalmers.se/~hallgren/" title="Thomas Hallgren">@@ -16,14 +17,14 @@ <body class=hover> <h2>GF online editor for simple multilingual grammars</h2>-<div id=editor>-</div>+<div id=editor></div> <small class="hidden"> <span class=more>+</span>=Add an item, <span class=delete>×</span>=Delete item, <span class=edit>%</span>=Edit item. </small> <small class="ifhover">Hover over items for hints and editing options.</small>+<div id=compiler_output class=compiler_output></div> <noscript> This page does not work without JavaScript.@@ -32,7 +33,7 @@ <hr> <div class=modtime><small> HTML-<!-- hhmts start --> Last modified: Mon Oct 10 19:24:05 CEST 2011 <!-- hhmts end -->+<!-- hhmts start --> Last modified: Mon Feb 13 18:05:45 CET 2012 <!-- hhmts end --> </small></div> <a href="about.html">About</a> <pre id=debug></pre>@@ -44,5 +45,10 @@ <script type="text/javascript" src="editor.js"></script> <script type="text/javascript" src="cloud2.js"></script> <script type="text/javascript" src="sort.js"></script>+<script type="text/JavaScript" src="../minibar/minibar.js"></script>+<script type="text/JavaScript" src="../minibar/minibar_input.js"></script>+<script type="text/JavaScript" src="../minibar/minibar_translations.js"></script>+<script type="text/JavaScript" src="../minibar/minibar_support.js"></script>+<script type="text/JavaScript" src="../minibar/pgf_online.js"></script> </body> </html>
@@ -1,6 +1,6 @@ -// We use localStorage to store the grammars,-// see http://diveintohtml5.org/storage.html+// Grammars are stored locally in the browser using localStorage.+// See http://diveintohtml5.info/storage.html var local={ prefix:"gf.editor.simple.grammar",
@@ -1,13 +1,18 @@-body { color: #413b36;- background: #fffcfa;- }+body { color: #413b36; background: #fffcfa; } h1 { font-size: 175%; } h1,h2,h3,h4,small { font-family: sans-serif; } h1,h2,h3,h4,a { color: #5c1a1a; } h1:first-child, h2:first-child { margin-top: 0; margin-bottom: 1ex; } -#editor { max-width: 50em; }+#editor {+ /* This allows the div to grow wider than the window if necessary to+ accommodate the contents. Otherwise, wide things inside can poke+ through the border. */+ display: table;+ width: 100%;+}+ div.grammar { border: 2px solid #b09779; background: #642121; } div.files { margin: 0 8px 8px 8px; } @@ -17,9 +22,12 @@ .slideshow .hidden { display: none; } -img.right, div.right, div.modtime { float: right; }+img.cloud, img.right, div.right, div.modtime { float: right; } .modtime { color: #999; white-space: nowrap; } +table.grammar_list { border-collapse: collapse; margin-left: 1.0em; }+table.grammar_list td { padding: 0.4ex 0.25em; }+ /*div.namebar { background: #642121; }*/ div.namebar table { width: 100%; } .namebar h3 { margin: 0; color: white; }@@ -45,14 +53,15 @@ .editable:hover, .deletable:hover { background: #ff9; } .namebar .editable:hover { background: #04b; } -.extensible:hover .more,.editable:hover > .edit ,.deletable:hover > .delete +.extensible:hover .more,.editable:hover > .edit ,.deletable:hover > .delete,+ tr.deletable:hover .delete { visibility: visible; } .more { color: green; } .edit { color: orange; } .delete { color: red; } .error_message,.inError { color: red; }-.template, .template .sep { color: #999; }+.template, .template .sep, .unimportant { color: #999; } form { display: inline-block; } table.tabs {@@ -60,7 +69,7 @@ border-width: 0; border-spacing: 0; empty-cells: show; } -table.tabs td { text-align: center; border: 2px solid #b09779; padding: 2px; }+table.tabs td { text-align: center; border: 2px solid #b09779; padding: 2px; white-space: nowrap; } table.tabs td.active { background: white; border-bottom-width: 0; } table.tabs td.inactive { background: #e1e1e1;@@ -80,3 +89,17 @@ } input.string_edit { font-family: inherit; font-size: inherit; }++ul.languages { -moz-column-width: 20em; }++li { margin-top: 0.5ex; margin-bottom: 0.5ex; }++#sharing h1, #sharing .footer { display: none; }++div.compiler_output .back_to_editor { display: none; }++div#minibar {+ border: 1px solid black;+ padding: 5px;+ background: #ccc url("../minibar/brushed-metal.png");+}
@@ -1,4 +1,4 @@-<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">+<!DOCTYPE html> <html> <head> <title>Download from Grammar Cloud</title> <link rel="stylesheet" type="text/css" href="editor.css" title="Cloud">@@ -13,7 +13,7 @@ <hr> <address></address>-<!-- hhmts start --> Last modified: Mon Oct 10 20:29:01 CEST 2011 <!-- hhmts end -->+<!-- hhmts start --> Last modified: Mon Feb 13 19:03:32 CET 2012 <!-- hhmts end --> <script type="text/javascript" src="../minibar/support.js"></script> <script type="text/javascript" src="localstorage.js"></script> <script type="text/javascript" src="gf_abs.js"></script>
@@ -0,0 +1,122 @@++function initialize_sorting() {++ function sortable(elem) {+ switch(elem.tagName) {+ case "DIV":+ switch(elem.className) {+ case "fun":+ case "lin":+ case "lincat":+ case "oper":+ return elem;+ default:+ return null;+ }+ default:+ return sortable(elem.parentNode)+ }+ }++ function move_element(elem,x,y) {+ elem.style.left=x+"px";+ elem.style.top=y+"px";+ elem.delta={x:x,y:y};+ }++ function adjust_refs(elem,dy) {+ //jsdebug("dy="+dy);+ move_element(elem,elem.delta.x,elem.delta.y-dy);+ elem.downAt.y+=dy;+ elem.range.lo-=dy;+ elem.range.hi-=dy;+ }++ function move_up(elem) {+ var prev=elem.previousSibling;+ if(prev) {+ var top=elem.offsetTop;+ var mid=prev.offsetTop+prev.offsetHeight/2;+ if(top<mid) {+ elem.parentNode.insertBefore(elem,prev);+ adjust_refs(elem,elem.offsetTop-top)+ }+ //else jsdebug("not yet, top="+top+", mid="+mid);+ }+ //else jsdebug("at top");+ }++ function move_down(elem) {+ var next=elem.nextSibling;+ if(next) {+ var top=elem.offsetTop;+ var bot=top+elem.offsetHeight;+ var mid=next.offsetTop+next.offsetHeight/2;+ if(bot>mid) {+ next.parentNode.insertBefore(next,elem);+ adjust_refs(elem,elem.offsetTop-top)+ }+ //else jsdebug("not yet, top="+top+", bot="+bot+", mid="+mid);+ }+ //else jsdebug("at bottom");+ }++ function swap(elem,dy) {+ if(dy>0) move_down(elem);+ else if(dy<0) move_up(elem);+ }++ function restrictTo(range,y) {+ return Math.min(range.hi,Math.max(range.lo,y));+ }++function startDrag(event,elem) {+ //jsdebug("Start dragging");+ elem.style.position="relative";+ elem.delta || (elem.delta={x:0,y:0});+ elem.downAt={x:event.screenX-elem.delta.x,y:event.screenY-elem.delta.y};+ var list=elem.parentNode;+ var top=list.offsetTop-elem.offsetTop+elem.delta.y;+ elem.range={lo:top,hi:top+list.offsetHeight-elem.offsetHeight};+ elem.style.zIndex=1;+ document.onmousemove=function(event) {+ var dx=0/*event.screenX-elem.downAt.x*/;+ var dy=restrictTo(elem.range,event.screenY-elem.downAt.y);+ //jsdebug("dragging to "+dx+" "+dy+" "+show_props(elem.range,"range"));+ move_element(elem,dx,dy);+ //jsdebug("dragging to "+elem.offsetLeft+" "+elem.offsetTop);+ swap(elem,dy)+ return false;+ }+ document.onmouseup=function() {+ //jsdebug("dropped");+ elem.style.zIndex=0;+ move_element(elem,0,0);+ document.onmousemove=null;+ document.onmouseup=null;+ if(list.onsort) list.onsort();+ else jsdebug("no list.onsort "+list.className+" "+list.firstChild.ident);+ return false;+ }+ return false;+}++function mousedown(event) {+ var elem=sortable(event.target);+ if(elem) return startDrag(event,elem);+ //else jsdebug("Clicked outside"/*+taglist(event.target)/*+show_props(event,"event")*/);+}++ var jsdebug=debug;++function init() {+ document.onmousedown=mousedown;+ //var d=element("javascriptdebug");+ //if(d) jsdebug=function(msg) { d.innerHTML=msg; }+}+ init();+}++initialize_sorting();++//Inspired by http://tool-man.org/examples/sorting.html
@@ -2,17 +2,29 @@ <!-- This is the start page served by "gf -server" --> -<title>GF web service</title>-<h1>GF web service</h1>+<title>GF Cloud Service</title>+<meta charset="UTF-8">+<link rel="stylesheet" type="text/css" href="gfse/editor.css" title="Cloud"> -<h2>Available web applications</h2>+<h1>GF Cloud Service</h1> +<h2>Available Web Applications</h2>+ <ul> <li><a href="minibar/minibar.html">Minibar</a>+ <li><a href="TransQuiz/translation_quiz.html">Translation Quiz</a> <li><a href="gfse/">GF online editor for simple multilingual grammars</a> </ul> +<h2>Some Documentation</h2> +<ul>+ <li><a href="minibar/about.html">About Minibar</a>+ <li><a href="minibar/minibar-api.html">Minibar API documentation</a>+ <li><a href="gfse/about.html">About the online grammar editor</a>+ <li><a href="minibar/gf-web-api-examples.html">PGF web service API examples</a>+</ul>+ <hr> -<a href="http://www.grammaticalframework.org/">Grammatical Framework</a>+<a href="http://www.grammaticalframework.org/">www.grammaticalframework.org</a>
@@ -5,7 +5,7 @@ <meta charset="UTF-8"> </head> -<body>+<body class=minibar> <h1>About Minibar</h1> <a href="minibar.html">Minibar</a> is an alternative implementation of the@@ -170,14 +170,16 @@ <li>[Added 2011-10-18] Added a button to display some grammar info and a start category menu. The start category menu can be turned off by passing the option <code>{startcat_menu:false}</code> when starting the minibar.+ <li>[Added 2012-02-10] New minibar option <code>initial_grammar</code> to+ control which of the available grammars is selected initially. </ul> <hr>-<small class=modtime>-<!-- hhmts start --> Last modified: Tue Oct 18 17:18:42 CEST 2011 <!-- hhmts end -->-</small>+<div class=modtime><small>+<!-- hhmts start --> Last modified: Wed Feb 29 18:27:59 CET 2012 <!-- hhmts end -->+</small></div> <address>-<a href="http://www.cs.chalmers.se/~hallgren/">TH</a>-<img src="http://www.altocumulus.org/~hallgren/online.cgi?icon" alt=""></address>+<a href="http://www.cse.chalmers.se/~hallgren/">TH</a>+<img src="http://www.altocumulus.org/~hallgren/online.cgi?icon" alt=""> </address> </body> </html>
@@ -33,7 +33,7 @@ charset="UTF-8" pagestart "Collected Feedback" begin pre class=feedbacklist- Reg show reverse drop color_depth,pixel_depth,outer_size,inner_size,available_screen_size from-url <"$PATH_TRANSLATED" | plain2html+ Reg show reverse drop color_depth,pixel_depth,outer_size,inner_size,available_screen_size urlmatch-v 'user_agent=*Googlebot*' from-url <"$PATH_TRANSLATED" | plain2html end pageend }
@@ -1,14 +1,15 @@-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">+<!DOCTYPE html> <html> <head> <title>Feedback</title> <link rel=stylesheet type="text/css" href="minibar.css"> <script type="text/JavaScript" src="support.js"></script>+<script type="text/JavaScript" src="minibar_support.js"></script> <script type="text/JavaScript" src="minibar.js"></script> <meta name = "viewport" content = "width = device-width"> </head> -<body onload="prefill_feedback_form()">+<body class=minibar onload="prefill_feedback_form()"> <h2><span id=grammar></span> Feedback</h2>
@@ -1,8 +1,9 @@-body {+body.minibar { background: #ccc url("brushed-metal.png"); } h1, h2, h3, small, th { font-family: sans-serif; }+h1, h2, h3 { color: #303030; text-shadow: rgba(0,0,0,0.25) 3px 3px 5px; } th, td { vertical-align: baseline; text-align: left; } @@ -28,6 +29,7 @@ border: 1px solid black; padding: 3px; margin: 3px;+ box-shadow: 2px 2px 4px rgba(0,0,0,0.3); } .invalid { color: red; }
@@ -4,12 +4,14 @@ <title>Minibar</title> <link rel=stylesheet type="text/css" href="minibar.css"> +<link rel=author href="http://www.cse.chalmers.se/~hallgren/" title="Thomas Hallgren">+ <meta name = "viewport" content = "width = device-width"> <meta charset="UTF-8"> </head> -<body>+<body class=minibar> <h2>Minibar online</h2> <div id=minibar></div> @@ -23,11 +25,9 @@ & <a href="http://www.grammaticalframework.org:41296/translate/">Translator</a>] </small> <small class=modtime>-HTML <!-- hhmts start --> Last modified: Mon Aug 8 18:04:22 CEST 2011 <!-- hhmts end -->+HTML <!-- hhmts start --> Last modified: Mon Feb 13 18:07:42 CET 2012 <!-- hhmts end --> </small> <address>-<a href="http://www.cse.chalmers.se/~hallgren/">TH</a>-<img src="http://www.altocumulus.org/~hallgren/online.cgi?icon" alt=""></address> <script type="text/JavaScript" src="support.js"></script> <script type="text/JavaScript" src="minibar.js"></script>
@@ -32,7 +32,8 @@ target: "minibar", try_google: true, feedback_url: null,- help_url: null+ help_url: null,+ initial_grammar: null } // Apply supplied options@@ -81,7 +82,9 @@ } if(options.help_url) menubar.appendChild(button("Help",bind(open_help,this)));- select_grammar(grammars[0]);+ var grammar0=options.initial_grammar || grammars[0];+ grammar_menu.value=grammar0;+ select_grammar(grammar0); } } @@ -150,7 +153,7 @@ // make the minibar state easily accessible from the feedback page: minibar.state={grammar:grammar,current:input.current, to:translations.to_menu.value,- translations:translations.translations};+ translations:translations.main}; open_popup(options.feedback_url,'feedback'); } }
@@ -7,13 +7,6 @@ //grammar_list: ["Foods.pgf"], // leave undefined to get list from server } --if(/^\?\/tmp\//.test(location.search)) {- online_options.grammars_url=location.search.substr(1);-}--var server=pgf_online(online_options);- var minibar_options= { show_abstract: true, show_trees: true,@@ -22,4 +15,12 @@ //feedback_url: "feedback.html", try_google: true }++if(/^\?\/tmp\//.test(location.search)) {+ var args=decodeURIComponent(location.search.substr(1)).split(" ")+ if(args[0]) online_options.grammars_url=args[0];+ if(args[1]) minibar_options.initial_grammar=args[1];+}++var server=pgf_online(online_options); var minibar=new Minibar(server,minibar_options);
@@ -1,7 +1,7 @@ /* --- Translations object -------------------------------------------------- */ -var tree_icon="tree-btn.png";-var alignment_icon="align-btn.png";+var tree_icon="../minibar/tree-btn.png";+var alignment_icon="../minibar/align-btn.png"; function Translations(server,opts) { this.server=server;@@ -80,7 +80,7 @@ cnt>1 ? ""+cnt+" translations:": "One translation:"))); */- for(p=0;p<cnt;p++) {+ for(var p=0;p<cnt;p++) { var tra=translationResults[p]; if (tra.translations != null) { for (q = 0; q < tra.translations.length; q++) {@@ -122,7 +122,7 @@ //trans.translations=translationsResult; trans.single_translation=[]; trans.innerHTML="";- for(p=0;p<cnt;p++) {+ for(var p=0;p<cnt;p++) { var t=translationsResult[p]; if(to=="All" || t.to==to) { var lin=t.linearizations;@@ -140,24 +140,24 @@ } -function abstree_button(abs) {+Translations.prototype.abstree_button=function(abs) { var i=button_img(tree_icon,"toggle_img(this)"); i.title="Click to display abstract syntax tree"- i.other=server.current_grammar_url+"?command=abstrtree&tree="+encodeURIComponent(abs);+ i.other=this.server.current_grammar_url+"?command=abstrtree&tree="+encodeURIComponent(abs); return i; } -function alignment_button(abs) {+Translations.prototype.alignment_button=function(abs) { var i=button_img(alignment_icon,"toggle_img(this)"); i.title="Click to display word alignment"- i.other=server.current_grammar_url+"?command=alignment&tree="+encodeURIComponent(abs);+ i.other=this.server.current_grammar_url+"?command=alignment&tree="+encodeURIComponent(abs); return i; } -function parsetree_button(abs,lang) {+Translations.prototype.parsetree_button=function(abs,lang) { var i=button_img(tree_icon,"toggle_img(this)"); i.title="Click to display parse tree"- i.other=server.current_grammar_url+ i.other=this.server.current_grammar_url +"?command=parsetree&from="+lang+"&tree="+encodeURIComponent(abs); return i; }
@@ -128,7 +128,7 @@ function node(tag,as,ds) { var n=document.createElement(tag); for(var a in as) n.setAttribute(a,as[a]);- for(var i in ds) n.appendChild(ds[i]);+ if(ds) for(var i in ds) n.appendChild(ds[i]); return n; } @@ -147,9 +147,7 @@ function wrap(tag,contents) { return node(tag,{},[contents]); } function wrap_class(tag,cls,contents) {- var el=empty_class(tag,cls);- if(contents) el.appendChild(contents);- return el;+ return node(tag,{"class":cls},contents ? [contents] : []) } function span_class(cls,contents) { return wrap_class("span",cls,contents); }@@ -177,6 +175,20 @@ return node("option",{"value":value},[text(label)]); } +function hidden(name,value) {+ return node("input",{type:"hidden",name:name,value:value},[])+}++function tda(cs) { return node("td",{},cs); }++function img(src) { return empty("img","src",src); }++/* --- Document modification ------------------------------------------------ */++function clear(el) { replaceInnerHTML(el,""); }+function replaceInnerHTML(el,html) { if(el) el.innerHTML=html; }+function replaceChildren(el,newchild) { clear(el); el.appendChild(newchild); }+ function appendChildren(el,ds) { for(var i in ds) el.appendChild(ds[i]); return el;@@ -186,9 +198,11 @@ parent.insertBefore(child,parent.firstChild); } -function tda(cs) { return node("td",{},cs); }+function insertBefore(el,ref) { ref.parentNode.insertBefore(el,ref); } -function img(src) { return empty("img","src",src); }+function insertAfter(el,ref) {+ ref.parentNode.insertBefore(el,ref.nextSibling);+} /* --- Debug ---------------------------------------------------------------- */