diff --git a/lib/resource-0.6/finnish/MorphoFin.gf b/lib/resource-0.6/finnish/MorphoFin.gf index a24e6baf1..101c268c8 100644 --- a/lib/resource-0.6/finnish/MorphoFin.gf +++ b/lib/resource-0.6/finnish/MorphoFin.gf @@ -437,6 +437,7 @@ getHarmony : Str -> Str = \u -> case u of { "kk" => ku + "k" ; "pp" => ku + "p" ; "tt" => ku + "t" ; + "nk" => ku + "ng" ; "nt" => ku + "nn" ; "mp" => ku + "mm" ; "rt" => ku + "rr" ; @@ -446,7 +447,7 @@ getHarmony : Str -> Str = \u -> case u of { _ => "" } ; "rk" => kul + case o of { - "i" => "rj" ; + "i" => "j" ; _ => "" } ; "hk" => kukk ; -- *tahko-tahon diff --git a/lib/resource-0.6/finnish/ParadigmsFin.gf b/lib/resource-0.6/finnish/ParadigmsFin.gf index 657c01487..1ce2e99ee 100644 --- a/lib/resource-0.6/finnish/ParadigmsFin.gf +++ b/lib/resource-0.6/finnish/ParadigmsFin.gf @@ -60,18 +60,28 @@ oper nKukko : (kukko,kukon,kukkoja : Str) -> Gender -> N ; +-- For convenience, we define 1-argument paradigms as producing the +-- nonhuman gender; the following function changes this: + + humanN : N -> N ; + -- A special case are nouns with no alternations: -- the vowel harmony is inferred from the last letter, -- which must be one of "o", "u", "ö", "y". - nTalo : (talo : Str) -> Gender -> N ; + nTalo : (talo : Str) -> N ; -- Another special case are nouns where the last two consonants -- undergo regular weak-grade alternation: -- "kukko - kukon", "rutto - ruton", "hyppy - hypyn", "sampo - sammon", -- "kunto - kunnon", "sisältö - sisällön", . - nLukko : (lukko : Str) -> Gender -> N ; + nLukko : (lukko : Str) -> N ; + +-- "arpi - arven", "sappi - sapen", "kampi - kammen";"sylki - syljen" + + nArpi : (arpi : Str) -> N ; + nSylki : (sylki : Str) -> N ; -- Foreign words ending in consonants are actually similar to words like -- "malli"/"mallin"/"malleja", with the exception that the "i" is not attached @@ -80,18 +90,18 @@ oper -- 1-syllabic words ending in "n" would have variant plural genitive and -- partitive forms, like "sultanien"/"sultaneiden", which are not covered.) - nLinux : (linuxia : Str) -> Gender -> N ; + nLinux : (linuxia : Str) -> N ; -- Nouns of at least 3 syllables ending with "a" or "ä", like "peruna", "tavara", -- "rytinä". - nPeruna : (peruna : Str) -> Gender -> N ; + nPeruna : (peruna : Str) -> N ; -- The following paradigm covers both nouns ending in an aspirated "e", such as -- "rae", "perhe", "savuke", and also many ones ending in a consonant -- ("rengas", "kätkyt"). The singular nominative and essive are given. - nRae : (rae, rakeena : Str) -> Gender -> N ; + nRae : (rae, rakeena : Str) -> N ; -- The following covers nouns with partitive "ta"/"tä", such as -- "susi", "vesi", "pieni". To get all stems and the vowel harmony, it takes @@ -102,28 +112,32 @@ oper -- Nouns ending with a long vowel, such as "puu", "pää", "pii", "leikkuu", -- are inflected according to the following. - nPuu : (puu : Str) -> Gender -> N ; + nPuu : (puu : Str) -> N ; -- One-syllable diphthong nouns, such as "suo", "tie", "työ", are inflected by -- the following. - nSuo : (suo : Str) -> Gender -> N ; + nSuo : (suo : Str) -> N ; -- Many adjectives but also nouns have the nominative ending "nen" which in other -- cases becomes "s": "nainen", "ihminen", "keltainen". -- To capture the vowel harmony, we use the partitive form as the argument. - nNainen : (naista : Str) -> Gender -> N ; + nNainen : (naista : Str) -> N ; -- The following covers some nouns ending with a consonant, e.g. -- "tilaus", "kaulin", "paimen", "laidun". nTilaus : (tilaus,tilauksena : Str) -> Gender -> N ; +-- Special case: + + nKulaus : (kulaus : Str) -> N ; + -- The following covers nouns like "nauris" and adjectives like "kallis", "tyyris". -- The partitive form is taken to get the vowel harmony. - nNauris : (naurista : Str) -> Gender -> N ; + nNauris : (naurista : Str) -> N ; -- Separately-written compound nouns, like "sambal oelek", "Urho Kekkonen", -- have only their last part inflected. @@ -231,17 +245,24 @@ oper mkNoun a b c d e f g h i j ** {g = k ; lock_N = <>} ; nKukko = \a,b,c,g -> sKukko a b c ** {g = g ; lock_N = <>} ; - nLukko = \a,g -> sLukko a ** {g = g ; lock_N = <>} ; - nTalo = \a,g -> sTalo a ** {g = g ; lock_N = <>} ; - nLinux = \a,g -> sLinux a ** {g = g ; lock_N = <>} ; - nPeruna = \a,g -> sPeruna a ** {g = g ; lock_N = <>} ; - nRae = \a,b,g -> sRae a b ** {g = g ; lock_N = <>} ; + + humanN = \n -> {s = n.s ; lock_N = n.lock_N ; g = human} ; + + nLukko = \a -> sLukko a ** {g = nonhuman ; lock_N = <>} ; + nTalo = \a -> sTalo a ** {g = nonhuman ; lock_N = <>} ; + nArpi = \a -> sArpi a ** {g = nonhuman ; lock_N = <>} ; + nSylki = \a -> sSylki a ** {g = nonhuman ; lock_N = <>} ; + nLinux = \a -> sLinux a ** {g = nonhuman ; lock_N = <>} ; + nPeruna = \a -> sPeruna a ** {g = nonhuman ; lock_N = <>} ; + nRae = \a,b -> sRae a b ** {g = nonhuman ; lock_N = <>} ; nSusi = \a,b,c,g -> sSusi a b c ** {g = g ; lock_N = <>} ; - nPuu = \a,g -> sPuu a ** {g = g ; lock_N = <>} ; - nSuo = \a,g -> sSuo a ** {g = g ; lock_N = <>} ; - nNainen = \a,g -> sNainen a ** {g = g ; lock_N = <>} ; + nPuu = \a -> sPuu a ** {g = nonhuman ; lock_N = <>} ; + nSuo = \a -> sSuo a ** {g = nonhuman ; lock_N = <>} ; + nNainen = \a -> sNainen a ** {g = nonhuman ; lock_N = <>} ; nTilaus = \a,b,g -> sTilaus a b ** {g = g ; lock_N = <>} ; - nNauris = \a,g -> sNauris a ** {g = g ; lock_N = <>} ; + nKulaus = \a -> nTilaus a (init a + "ksen" + getHarmony (last + (init a))) nonhuman ; + nNauris = \a -> sNauris a ** {g = nonhuman ; lock_N = <>} ; nComp = \s,n -> {s = \\c => s ++ n.s ! c ; g = n.g ; lock_N = <>} ; diff --git a/src/GF/CF/CFtoSRG.hs b/src/GF/CF/CFtoSRG.hs index c90a772d8..899fdcfe5 100644 --- a/src/GF/CF/CFtoSRG.hs +++ b/src/GF/CF/CFtoSRG.hs @@ -22,7 +22,7 @@ import CF import CFIdent ---import UseGrammar import PPrCF -import List (intersperse) +import List (intersperse,nub) header :: String header = unlines ["#ABNF 1.0 ISO-8859-1;\n", @@ -38,7 +38,7 @@ prSRGC :: [CFCat] -> CF -> String prSRGC [] _ = [] prSRGC (c:cs) cf = "$" ++ prCFCat c ++ " = " ++ items ++ ";\n"++ prSRGC cs cf where items = concat $ intersperse " | " $ - map f $ map valItemsCF (rulesForCFCat cf c) + map f $ nub $ map valItemsCF (rulesForCFCat cf c) f [] = "$NULL" f xs = unwords $ map prSRGItem xs diff --git a/src/GF/Canon/CanonToGrammar.hs b/src/GF/Canon/CanonToGrammar.hs index 93dac97f6..ece71c517 100644 --- a/src/GF/Canon/CanonToGrammar.hs +++ b/src/GF/Canon/CanonToGrammar.hs @@ -14,7 +14,12 @@ import Operations import Monad --- a decompiler. AR 12/6/2003 +-- a decompiler. AR 12/6/2003 -- 19/4/2004 + +canon2sourceGrammar :: CanonGrammar -> Err G.SourceGrammar +canon2sourceGrammar gr = do + ms' <- mapM canon2sourceModule $ M.modules gr + return $ M.MGrammar ms' canon2sourceModule :: CanonModule -> Err G.SourceModule canon2sourceModule (i,mi) = do diff --git a/src/GF/Shell.hs b/src/GF/Shell.hs index 4c2a067a4..a14461928 100644 --- a/src/GF/Shell.hs +++ b/src/GF/Shell.hs @@ -210,9 +210,7 @@ execC co@(comm, opts0) sa@((st,(h,_)),a) = case comm of | oElem showAll opts -> returnArg (AString txtHelpFile) sa | otherwise -> returnArg (AString txtHelpFileSummary) sa - CPrintGrammar - | oElem showOld opts -> returnArg (AString $ printGrammarOld (canModules st)) sa - | otherwise -> returnArg (AString (optPrintGrammar opts gro)) sa + CPrintGrammar -> returnArg (AString (optPrintGrammar opts gro)) sa CPrintGlobalOptions -> justOutput (putStrLn $ prShellStateInfo st) sa CPrintInformation c -> justOutput (useIOE () $ showInformation opts st c) sa CPrintLanguages -> justOutput diff --git a/src/GF/UseGrammar/Custom.hs b/src/GF/UseGrammar/Custom.hs index 166f918ae..ac47a9758 100644 --- a/src/GF/UseGrammar/Custom.hs +++ b/src/GF/UseGrammar/Custom.hs @@ -19,10 +19,11 @@ import Option import CF import CFIdent ----- import CFtoGrammar +import CanonToGrammar import PPrCF import PrLBNF import PrGrammar +import PrOld import MkGFC import CFtoSRG @@ -145,7 +146,9 @@ customGrammarPrinter = customData "Grammar printers, selected by option -printer=x" $ [ (strCI "gfc", prCanon . stateGrammarST) -- DEFAULT + ,(strCI "gf", err id prGrammar . canon2sourceGrammar . stateGrammarST) ,(strCI "cf", prCF . stateCF) + ,(strCI "old", printGrammarOld . stateGrammarST) ,(strCI "srg", prSRG . stateCF) ,(strCI "lbnf", prLBNF . stateCF) ,(strCI "morpho", prMorpho . stateMorpho) diff --git a/src/HelpFile b/src/HelpFile index 27d030201..0f7db045b 100644 --- a/src/HelpFile +++ b/src/HelpFile @@ -347,8 +347,10 @@ q, quit: q -parser=earley Earley algorithm -parser=chart bottom-up chart parser --printer: format in which the grammar is printed. The default is gf. +-printer: format in which the grammar is printed. The default is gfc. + -printer=gfc GFC grammar -printer=gf GF grammar + -printer=old old GF grammar -printer=cf context-free grammar *-printer=happy source file for Happy parser generator -printer=srg speech recognition grammar diff --git a/src/HelpFile.hs b/src/HelpFile.hs index 57b38218f..099fee6b9 100644 --- a/src/HelpFile.hs +++ b/src/HelpFile.hs @@ -360,11 +360,13 @@ txtHelpFile = "\n -parser=earley Earley algorithm" ++ "\n -parser=chart bottom-up chart parser" ++ "\n" ++ - "\n-printer: format in which the grammar is printed. The default is gf." ++ + "\n-printer: format in which the grammar is printed. The default is gfc." ++ + "\n -printer=gfc GFC grammar" ++ "\n -printer=gf GF grammar" ++ + "\n -printer=old old GF grammar" ++ "\n -printer=cf context-free grammar" ++ "\n *-printer=happy source file for Happy parser generator" ++ - "\n *-printer=srg speech recognition grammar" ++ + "\n -printer=srg speech recognition grammar" ++ "\n *-printer=haskell abstract syntax in Haskell, with transl to/from GF" ++ "\n -printer=morpho full-form lexicon, long format" ++ "\n *-printer=latex LaTeX file (for the tg command)" ++ diff --git a/src/Today.hs b/src/Today.hs index 7b9a5098f..8953c09f8 100644 --- a/src/Today.hs +++ b/src/Today.hs @@ -1 +1 @@ -module Today where today = "Fri Apr 16 18:06:59 CEST 2004" +module Today where today = "Mon Apr 19 17:59:02 CEST 2004"