Merge branch 'GrammaticalFramework:master' into latvian-new

This commit is contained in:
Lauma
2025-10-25 00:55:15 +03:00
committed by GitHub
183 changed files with 91868 additions and 288 deletions

View File

@@ -8,19 +8,26 @@ on:
jobs: jobs:
build: build:
runs-on: ubuntu-18.04 runs-on: ubuntu-24.04
env: env:
GF_VERSION: 3.10-1 GF_VERSION: 3.12
DEST: gf-rgl-${{ github.event.inputs.tag }} DEST: gf-rgl-${{ github.event.inputs.tag }}
steps: steps:
- name: Checkout repository - name: Checkout repository
uses: actions/checkout@v2 uses: actions/checkout@v4
- name: Download GF
uses: dsaltares/fetch-gh-release-asset@1.1.1
with:
repo: 'GrammaticalFramework/gf-core'
version: 'tags/release-${{ env.GF_VERSION }}'
file: 'gf-${{ env.GF_VERSION }}-ubuntu-24.04.deb'
token: ${{ secrets.GITHUB_TOKEN }}
- name: Install GF - name: Install GF
run: | run: |
curl -s https://www.grammaticalframework.org/download/gf_${GF_VERSION}_amd64.deb -o gf.deb sudo dpkg -i gf-${GF_VERSION}-ubuntu-24.04.deb
sudo dpkg -i gf.deb
- name: Build RGL - name: Build RGL
run: | run: |

View File

@@ -6,26 +6,26 @@ on:
jobs: jobs:
build: build:
runs-on: ubuntu-20.04 runs-on: ubuntu-24.04
env: env:
GF_VERSION: 3.11 GF_VERSION: 3.12
DEST: gf-rgl DEST: gf-rgl
steps: steps:
- name: Checkout repository - name: Checkout repository
uses: actions/checkout@v2 uses: actions/checkout@v4
- name: Download GF - name: Download GF
uses: dsaltares/fetch-gh-release-asset@1.1.1 uses: dsaltares/fetch-gh-release-asset@1.1.1
with: with:
repo: 'GrammaticalFramework/gf-core' repo: 'GrammaticalFramework/gf-core'
version: 'tags/${{ env.GF_VERSION }}' version: 'tags/release-${{ env.GF_VERSION }}'
file: 'gf-${{ env.GF_VERSION }}-ubuntu-20.04.deb' file: 'gf-${{ env.GF_VERSION }}-ubuntu-24.04.deb'
token: ${{ secrets.GITHUB_TOKEN }} token: ${{ secrets.GITHUB_TOKEN }}
- name: Install GF - name: Install GF
run: | run: |
sudo dpkg -i gf-${GF_VERSION}-ubuntu-20.04.deb sudo dpkg -i gf-${GF_VERSION}-ubuntu-24.04.deb
- name: Build RGL - name: Build RGL
run: | run: |

View File

@@ -25,6 +25,7 @@ data LangInfo = LangInfo
, langSymbolic :: Bool , langSymbolic :: Bool
, langCompatibility :: Bool , langCompatibility :: Bool
, langSynopsis :: Bool -- ^ include in RGL synopsis , langSynopsis :: Bool -- ^ include in RGL synopsis
, langMorphodict :: Bool
} deriving (Show,Eq) } deriving (Show,Eq)
-- | Load language information from default config file -- | Load language information from default config file
@@ -55,6 +56,7 @@ loadLangsFrom configFile = do
, langSymbolic = boolBit bits 8 True , langSymbolic = boolBit bits 8 True
, langCompatibility = boolBit bits 9 False , langCompatibility = boolBit bits 9 False
, langSynopsis = boolBit bits 10 False , langSynopsis = boolBit bits 10 False
, langMorphodict = boolBit bits 11 False
} }
-- | Separate a string on a character -- | Separate a string on a character

View File

@@ -19,6 +19,7 @@ default: build copy
build: src/*/*.gf build: src/*/*.gf
ifneq (, $(RUNGHC)) ifneq (, $(RUNGHC))
$(RUNGHC) build $(RUNGHC) build
$(RUNGHC) build morphodict
else else
./Setup.sh ./Setup.sh
endif endif
@@ -26,6 +27,7 @@ endif
copy: copy:
ifneq (, $(RUNGHC)) ifneq (, $(RUNGHC))
$(RUNGHC) copy $(RUNGHC) copy
$(RUNGHC) copy morphodict
endif endif
install: build copy install: build copy

View File

@@ -1,4 +1,4 @@
{-# LANGUAGE CPP #-} {-# LANGUAGE CPP, LambdaCase #-}
-- | Main build script for RGL -- | Main build script for RGL
@@ -150,11 +150,12 @@ getRGLBuildSubDir mode =
case mode of case mode of
Present -> "present" Present -> "present"
AllTenses -> "alltenses" AllTenses -> "alltenses"
MorphoDict -> "morphodict"
------------------------------------------------------------------------------- -------------------------------------------------------------------------------
-- Build modes -- Build modes
data Mode = Present | AllTenses data Mode = Present | AllTenses | MorphoDict
deriving (Show,Eq) deriving (Show,Eq)
all_modes :: [String] all_modes :: [String]
@@ -187,6 +188,7 @@ rglCommands =
, RGLCommand "lang" False $ gfcp [l,s] , RGLCommand "lang" False $ gfcp [l,s]
, RGLCommand "api" False $ gfcp [t,sc] , RGLCommand "api" False $ gfcp [t,sc]
, RGLCommand "compat" False $ gfcp [c] , RGLCommand "compat" False $ gfcp [c]
, RGLCommand "morphodict" False $ gfcp [m]
-- Special command, invoked when command ends in .gf -- Special command, invoked when command ends in .gf
, RGLCommand "modules" False $ \modes args bi -> do , RGLCommand "modules" False $ \modes args bi -> do
@@ -223,14 +225,20 @@ rglCommands =
s mode args = (symbol,optml mode langTry args) s mode args = (symbol,optml mode langTry args)
c mode args = (compat,optml AllTenses langCompatibility args) c mode args = (compat,optml AllTenses langCompatibility args)
t mode args = (try,optml mode langTry args) t mode args = (try,optml mode langTry args)
m mode args = (morphodict,optml mode langMorphodict args)
sc mode args = (symbolic,optml mode langSymbolic args) sc mode args = (symbolic,optml mode langSymbolic args)
optml :: Mode -> (LangInfo -> Bool) -> [String] -> ([LangInfo] -> [LangInfo]) optml :: Mode -> (LangInfo -> Bool) -> [String] -> ([LangInfo] -> [LangInfo])
optml mode pred args = optml mode pred args =
\langsAll -> \langsAll ->
let langsDefault = filter (if mode == Present then langPresent else const True) (filter pred langsAll) let langsDefault = filter (mode2langinfo mode) (filter pred langsAll)
in getOptLangs langsAll langsDefault args in getOptLangs langsAll langsDefault args
mode2langinfo = \case
Present -> langPresent
MorphoDict -> langMorphodict
_ -> const True
------------------------------------------------------------------------------- -------------------------------------------------------------------------------
-- Getting module paths/names -- Getting module paths/names
@@ -260,6 +268,9 @@ syntax l = sourceDir </> "api" </> ("Syntax" ++ langCode l ++ ".gf")
symbolic :: LangInfo -> FilePath symbolic :: LangInfo -> FilePath
symbolic l = sourceDir </> "api" </> ("Symbolic" ++ langCode l ++ ".gf") symbolic l = sourceDir </> "api" </> ("Symbolic" ++ langCode l ++ ".gf")
morphodict :: LangInfo -> FilePath
morphodict l = sourceDir </> "morphodict" </> ("MorphoDict" ++ langCode l ++ ".gf")
------------------------------------------------------------------------------- -------------------------------------------------------------------------------
-- Argument helpers -- Argument helpers
@@ -303,7 +314,8 @@ getOptMode args =
where where
explicit_modes = explicit_modes =
[Present | have "present"] ++ [Present | have "present"] ++
[AllTenses|have "alltenses"] [AllTenses | have "alltenses"] ++
[MorphoDict | have "morphodict"]
have mode = mode `elem` args have mode = mode `elem` args
-- | List of languages overriding the default definitions -- | List of languages overriding the default definitions
@@ -367,7 +379,7 @@ gfcn bi mode summary files = do
let dir = getRGLBuildDir bi mode let dir = getRGLBuildDir bi mode
preproc = case mode of preproc = case mode of
Present -> "--preproc=mkPresent" Present -> "--preproc=mkPresent"
AllTenses -> "" _ -> ""
createDirectoryIfMissing True dir createDirectoryIfMissing True dir
if length files > 0 if length files > 0
then do then do

View File

@@ -59,6 +59,7 @@ gfc="${gf} --batch --quiet --gf-lib-path=${dist}"
mkdir -p "${dist}/prelude" mkdir -p "${dist}/prelude"
mkdir -p "${dist}/present" mkdir -p "${dist}/present"
mkdir -p "${dist}/alltenses" mkdir -p "${dist}/alltenses"
mkdir -p "${dist}/morphodict"
# Build: prelude # Build: prelude
echo "Building [prelude]" echo "Building [prelude]"
@@ -68,6 +69,7 @@ ${gfc} --gfo-dir="${dist}"/prelude "${src}"/prelude/*.gf
# Gather all language modules for building # Gather all language modules for building
modules_present= modules_present=
modules_alltenses= modules_alltenses=
modules_morphodict=
for lang in $langs; do for lang in $langs; do
for mod in $modules_langs $modules_api; do for mod in $modules_langs $modules_api; do
if [ $mod == "Compatibility" ] && [[ "$langs_compat" != *"$lang"* ]]; then continue; fi if [ $mod == "Compatibility" ] && [[ "$langs_compat" != *"$lang"* ]]; then continue; fi
@@ -80,8 +82,12 @@ for lang in $langs; do
modules_alltenses="${modules_alltenses} ${file}" modules_alltenses="${modules_alltenses} ${file}"
done done
done done
file="${src}/morphodict/MorphoDict${lang}.gf"
if [ ! -f "$file" ]; then continue; fi
modules_morphodict="${modules_morphodict} ${file}"
done done
# Build: present # Build: present
echo "Building [present]" echo "Building [present]"
if [ $verbose = true ]; then echo $modules_present; fi if [ $verbose = true ]; then echo $modules_present; fi
@@ -96,6 +102,13 @@ for module in $modules_alltenses; do
${gfc} --no-pmcfg --gfo-dir="${dist}"/alltenses "${module}" ${gfc} --no-pmcfg --gfo-dir="${dist}"/alltenses "${module}"
done done
# Build: morphodict
echo "Building [morphodict]"
if [ $verbose = true ]; then echo $modules_morphodict; fi
for module in $modules_morphodict; do
${gfc} --no-pmcfg --gfo-dir="${dist}"/morphodict "${module}"
done
# Copy # Copy
if [ $dest == $dist ]; then exit 0; fi if [ $dest == $dist ]; then exit 0; fi
echo "Copying to ${dest}" echo "Copying to ${dest}"

View File

@@ -1,58 +1,63 @@
Code,Name,Directory,Functor,Unlexer,Present,All,Try,Symbolic,Compatibility,Synopsis Code,Name,Directory,Functor,Unlexer,Present,All,Try,Symbolic,Compatibility,Synopsis,MorphoDict
Afr,Afrikaans,afrikaans,,,,,,n,,y Afr,Afrikaans,afrikaans,,,,,,n,,y,n
Amh,Amharic,amharic,,,,,n,n,,n Amh,Amharic,amharic,,,,,n,n,,n,n
Ara,Arabic,arabic,,,,,,y,,y Ara,Arabic,arabic,,,,,,y,,y,y
Bul,Bulgarian,bulgarian,,,y,,,,,y Bel,Belarusian,belarusian,,,,y,n,n,n,y,n
Cat,Catalan,catalan,Romance,,y,,,,y,y Bul,Bulgarian,bulgarian,,,y,,,,,y,n
Cgg,Rukiga,rukiga,,,y,y,n,n,y,y Cat,Catalan,catalan,Romance,,y,,,,y,y,n
Chi,Chinese (simplified),chinese,,,,,,,,y Cgg,Rukiga,rukiga,,,y,y,n,n,y,y,n
Cze,Czech,czech,,,,,,n,,y Chi,Chinese (simplified),chinese,,,,,,,,y,y
Dan,Danish,danish,Scand,,y,,,,,y Cze,Czech,czech,,,,,,n,,y,n
Dut,Dutch,dutch,,,y,,,,,y Dan,Danish,danish,Scand,,y,,,,,y,n
Eng,English,english,,,y,,,,y,y Dut,Dutch,dutch,,,y,,,,,y,n
Est,Estonian,estonian,,,,,,,,y Eng,English,english,,,y,,,,y,y,y
Eus,Basque,basque,,,,,,,,y Est,Estonian,estonian,,,,,,,,y,n
Fin,Finnish,finnish,,,y,,,,y,y Eus,Basque,basque,,,,,,,,y,n
Fre,French,french,Romance,,y,,,,y,y Fao,Faroese,faroese,,,,y,n,n,n,y,n
Ger,German,german,,,y,,,,,y Fin,Finnish,finnish,,,y,,,,y,y,y
Grc,Ancient Greek,ancient_greek,,,y,,n,n,,n Fre,French,french,Romance,,y,,,,y,y,y
Gre,Greek,greek,,,,,,,,y Ger,German,german,,,y,,,,,y,y
Heb,Hebrew,hebrew,,,,,n,n,,n Grc,Ancient Greek,ancient_greek,,,y,,n,n,,n,n
Hin,Hindi,hindi,Hindustani,to_devanagari,y,,,,,y Gre,Greek,greek,,,,,,,,y,n
Hrv,Croatian,croatian,,,,,,y,,n Heb,Hebrew,hebrew,,,,,n,n,,n,n
Hun,Hungarian,hungarian,,,n,y,y,y,n,n Hin,Hindi,hindi,Hindustani,to_devanagari,y,,,,,y,n
Ice,Icelandic,icelandic,,,,,,n,,y Hrv,Croatian,croatian,,,,,,y,,n,n
Ina,Interlingua,interlingua,,,y,,n,n,,n Hun,Hungarian,hungarian,,,n,y,y,y,n,n,n
Ita,Italian,italian,Romance,,y,,,,y,y Hye,Armenian,armenian,,,,y,n,n,n,y,n
Jpn,Japanese,japanese,,,,,,,,y Ice,Icelandic,icelandic,,,,,,n,,y,n
Kaz,Kazakh,kazakh,,,,y,n,n,n,y Ina,Interlingua,interlingua,,,y,,n,n,,n,n
Kor,Korean,korean,,,n,y,y,y,n,n Ita,Italian,italian,Romance,,y,,,,y,y,y
Lat,Latin,latin,,,,,y,y,n,y Jpn,Japanese,japanese,,,,,,,,y,n
Lav,Latvian,latvian,,,,,,,y,y Kaz,Kazakh,kazakh,,,,y,n,n,n,y,n
Mkd,Macedonian,macedonian,,,,y,n,n,n,y Kor,Korean,korean,,,n,y,y,y,n,n,n
May,Malay,malay,,,y,,,,n,y Lat,Latin,latin,,,,,y,y,n,y,n
Mlt,Maltese,maltese,,,,,,,,y Lav,Latvian,latvian,,,,,,,y,y,n
Mon,Mongolian,mongolian,,,,,,n,,y Mkd,Macedonian,macedonian,,,,y,n,n,n,y,n
Nep,Nepali,nepali,,,,,,n,,y May,Malay,malay,,,y,,,,n,y,n
Nno,Norwegian (nynorsk),nynorsk,,,y,,,,,y Mlt,Maltese,maltese,,,,,,,,y,n
Nor,Norwegian (bokmål),norwegian,Scand,,y,,,,,y Mon,Mongolian,mongolian,,,,,,n,,y,n
Pes,Persian,persian,,,,,,,,y Nep,Nepali,nepali,,,,,,n,,y,n
Pnb,Punjabi,punjabi,,,y,,,,,y Nno,Norwegian (nynorsk),nynorsk,,,y,,,,,y,n
Pol,Polish,polish,,,,,,,,y Nor,Norwegian (bokmål),norwegian,Scand,,y,,,,,y,n
Por,Portuguese,portuguese,Romance,,y,,,,y,y Pes,Persian,persian,,,,,,,,y,n
Ron,Romanian,romanian,,,y,,,,,y Pnb,Punjabi,punjabi,,,y,,,,,y,n
Rus,Russian,russian,,,y,,,,,y Pol,Polish,polish,,,,,,,,y,n
Slo,Slovak,slovak,,,,,,n,,y Por,Portuguese,portuguese,Romance,,y,,,,y,y,y
Slv,Slovenian,slovenian,,,,,n,n,,n Ron,Romanian,romanian,,,y,,,,,y,n
Snd,Sindhi,sindhi,,,,,,,,y Rus,Russian,russian,,,y,,,,,y,n
Spa,Spanish,spanish,Romance,,y,,,,y,y Slo,Slovak,slovak,,,,,,n,,y,n
Sqi,Albanian,albanian,,,,y,n,n,n,y Slv,Slovenian,slovenian,,,,,n,n,,n,n
Swa,Swahili,swahili,Bantu,,,y,n,n,n,n Snd,Sindhi,sindhi,,,,,,,,y,n
Swe,Swedish,swedish,Scand,,y,,,,y,y Spa,Spanish,spanish,Romance,,y,,,,y,y,y
Tam,Tamil,tamil,n,n,n,n,n,n,n,n Sqi,Albanian,albanian,,,,y,n,n,n,y,n
Tel,Telugu,telugu,,,y,n,n,n,,n Sco,Scots,scots,,,y,,,,,y,n
Tha,Thai,thai,,to_thai,,,,,,y Swa,Swahili,swahili,Bantu,,,y,n,n,n,n,n
Tur,Turkish,turkish,,,y,,,n,,n Swe,Swedish,swedish,Scand,,y,,,,y,y,y
Urd,Urdu,urdu,Hindustani,,,,,,,y Tam,Tamil,tamil,n,n,n,n,n,n,n,n,n
Som,Somali,somali,,,,,n,n,,n Tel,Telugu,telugu,,,y,n,n,n,,n,n
Zul,Zulu,zulu,,,,,n,n,,n Tha,Thai,thai,,to_thai,,,,,,y,n
Tur,Turkish,turkish,,,y,,,n,,n,n
Ukr,Ukrainian,ukrainian,,,,y,n,n,n,y,n
Urd,Urdu,urdu,Hindustani,,,,,,,y,n
Som,Somali,somali,,,,,n,n,,n,n
Zul,Zulu,zulu,,,,,n,n,,n,n
1 Code Name Directory Functor Unlexer Present All Try Symbolic Compatibility Synopsis MorphoDict
2 Afr Afrikaans afrikaans n y n
3 Amh Amharic amharic n n n n
4 Ara Arabic arabic y y y
5 Bul Bel Bulgarian Belarusian bulgarian belarusian y y n n n y n
6 Cat Bul Catalan Bulgarian catalan bulgarian Romance y y y n
7 Cgg Cat Rukiga Catalan rukiga catalan Romance y y n n y y n
8 Chi Cgg Chinese (simplified) Rukiga chinese rukiga y y n n y y n
9 Cze Chi Czech Chinese (simplified) czech chinese n y y
10 Dan Cze Danish Czech danish czech Scand y n y n
11 Dut Dan Dutch Danish dutch danish Scand y y n
12 Eng Dut English Dutch english dutch y y y n
13 Est Eng Estonian English estonian english y y y y
14 Eus Est Basque Estonian basque estonian y n
15 Fin Eus Finnish Basque finnish basque y y y n
16 Fre Fao French Faroese french faroese Romance y y n n y n y n
17 Ger Fin German Finnish german finnish y y y y
18 Grc Fre Ancient Greek French ancient_greek french Romance y n n y n y y
19 Gre Ger Greek German greek german y y y
20 Heb Grc Hebrew Ancient Greek hebrew ancient_greek y n n n n
21 Hin Gre Hindi Greek hindi greek Hindustani to_devanagari y y n
22 Hrv Heb Croatian Hebrew croatian hebrew n y n n n
23 Hun Hin Hungarian Hindi hungarian hindi Hindustani to_devanagari n y y y y n n y n
24 Ice Hrv Icelandic Croatian icelandic croatian n y y n n
25 Ina Hun Interlingua Hungarian interlingua hungarian y n y n y n y n n n
26 Ita Hye Italian Armenian italian armenian Romance y y n n y n y n
27 Jpn Ice Japanese Icelandic japanese icelandic n y n
28 Kaz Ina Kazakh Interlingua kazakh interlingua y y n n n y n n
29 Kor Ita Korean Italian korean italian Romance n y y y y n y n y y
30 Lat Jpn Latin Japanese latin japanese y y n y n
31 Lav Kaz Latvian Kazakh latvian kazakh y n n y n y n
32 Mkd Kor Macedonian Korean macedonian korean n y n y n y n y n n
33 May Lat Malay Latin malay latin y y y n y n
34 Mlt Lav Maltese Latvian maltese latvian y y n
35 Mon Mkd Mongolian Macedonian mongolian macedonian y n n n y n
36 Nep May Nepali Malay nepali malay y n n y n
37 Nno Mlt Norwegian (nynorsk) Maltese nynorsk maltese y y n
38 Nor Mon Norwegian (bokmål) Mongolian norwegian mongolian Scand y n y n
39 Pes Nep Persian Nepali persian nepali n y n
40 Pnb Nno Punjabi Norwegian (nynorsk) punjabi nynorsk y y n
41 Pol Nor Polish Norwegian (bokmål) polish norwegian Scand y y n
42 Por Pes Portuguese Persian portuguese persian Romance y y y n
43 Ron Pnb Romanian Punjabi romanian punjabi y y n
44 Rus Pol Russian Polish russian polish y y n
45 Slo Por Slovak Portuguese slovak portuguese Romance y n y y y
46 Slv Ron Slovenian Romanian slovenian romanian y n n n y n
47 Snd Rus Sindhi Russian sindhi russian y y n
48 Spa Slo Spanish Slovak spanish slovak Romance y n y y n
49 Sqi Slv Albanian Slovenian albanian slovenian y n n n y n n
50 Swa Snd Swahili Sindhi swahili sindhi Bantu y n n n n y n
51 Swe Spa Swedish Spanish swedish spanish Scand Romance y y y y
52 Tam Sqi Tamil Albanian tamil albanian n n n n y n n n n y n
53 Tel Sco Telugu Scots telugu scots y n n n n y n
54 Tha Swa Thai Swahili thai swahili Bantu to_thai y n n n y n n
55 Tur Swe Turkish Swedish turkish swedish Scand y n y n y y
56 Urd Tam Urdu Tamil urdu tamil Hindustani n n n n n n n y n n
57 Som Tel Somali Telugu somali telugu y n n n n n
58 Zul Tha Zulu Thai zulu thai to_thai n n n y n
59 Tur Turkish turkish y n n n
60 Ukr Ukrainian ukrainian y n n n y n
61 Urd Urdu urdu Hindustani y n
62 Som Somali somali n n n n
63 Zul Zulu zulu n n n n

View File

@@ -89,4 +89,17 @@ concrete CatAfr of Cat =
SN = {s : Sex => NPCase => Str; pl : NPCase => Str} ; SN = {s : Sex => NPCase => Str; pl : NPCase => Str} ;
LN = {s : Adjf => NPCase => Str ; hasArt : Bool ; n : Number} ; LN = {s : Adjf => NPCase => Str ; hasArt : Bool ; n : Number} ;
lindef
VPSlash = \s -> {
s = {s = \\_ => s; prefix = ""; aux = VHebben; vtype = VAct} ;
a1 = \\_ => "" ;
n0 = \\_ => "" ;
n2 = \\_ => "" ;
a2 = "" ;
isAux = False ;
inf = <"",False> ;
ext = "" ;
c2 = ""
} ;
} }

View File

@@ -315,7 +315,7 @@ param
--2 Transformations between parameter types --2 Transformations between parameter types
oper Agr : Type = {g : Gender ; n : Number ; p : Person} ; oper Agr : PType = {g : Gender ; n : Number ; p : Person} ;
oper oper
agrP3 : Number -> Agr = agrgP3 Neutr ; agrP3 : Number -> Agr = agrgP3 Neutr ;

View File

@@ -3,6 +3,7 @@ concrete PhraseSqi of Phrase = CatSqi ** open Prelude, ResSqi in {
lin lin
PhrUtt pconj utt voc = {s = pconj.s ++ utt.s ++ voc.s} ; PhrUtt pconj utt voc = {s = pconj.s ++ utt.s ++ voc.s} ;
UttS s = s ;
UttNP np = {s = np.s ! Nom} ; UttNP np = {s = np.s ! Nom} ;
UttInterj i = i ; UttInterj i = i ;

15
src/api/CombinatorsSco.gf Normal file
View File

@@ -0,0 +1,15 @@
--# -path=.:alltenses:prelude
resource CombinatorsSco = Combinators - [ appCN, appCNc ] with
(Cat = CatSco),
(Structural = StructuralSco),
(Noun = NounSco),
(Constructors = ConstructorsSco) **
{
oper
appCN : CN -> NP -> NP
= \cn,x -> mkNP the_Art (PossNP cn x) ;
appCNc : CN -> [NP] -> NP
= \cn,xs -> let np : NP = mkNP and_Conj xs
in mkNP the_Art (PossNP cn np) ;
}

View File

@@ -0,0 +1,3 @@
--# -path=.:alltenses:prelude
resource ConstructorsSco = Constructors with (Grammar = GrammarSco) ;

5
src/api/SymbolicSco.gf Normal file
View File

@@ -0,0 +1,5 @@
--# -path=.:../english:../common:../abstract:../prelude
resource SymbolicSco = Symbolic with
(Symbol = SymbolSco),
(Grammar = GrammarSco) ;

5
src/api/SyntaxSco.gf Normal file
View File

@@ -0,0 +1,5 @@
--# -path=.:alltenses:prelude
instance SyntaxSco of Syntax =
ConstructorsSco, CatSco, StructuralSco, CombinatorsSco ;

View File

@@ -1,3 +1,17 @@
--# -path=.:../hungarian:../common:../abstract:../prelude --# -path=.:../hungarian:../common:../abstract:../prelude
resource TryHun = SyntaxHun, LexiconHun, ParadigmsHun - [mkAdv] ; resource TryHun = SyntaxHun-[mkAdN], LexiconHun, ParadigmsHun - [mkAdv,mkAdN] **
open (P = ParadigmsHun) in {
oper
mkAdv = overload SyntaxHun {
mkAdv : Str -> Adv = P.mkAdv ;
} ;
mkAdN = overload {
mkAdN : CAdv -> AdN = SyntaxHun.mkAdN ;
mkAdN : Str -> AdN = P.mkAdN ;
} ;
}

22
src/api/TrySco.gf Normal file
View File

@@ -0,0 +1,22 @@
--# -path=.:../english:../common:../abstract:../prelude
resource TrySco = SyntaxSco-[mkAdN], LexiconSco, ParadigmsSco - [mkAdv,mkAdN,mkOrd,mkQuant,mkVoc] **
open (P = ParadigmsEng) in {
oper
mkAdv = overload SyntaxSco {
mkAdv : Str -> Adv = P.mkAdv ;
} ;
mkAdN = overload {
mkAdN : CAdv -> AdN = SyntaxSco.mkAdN ;
mkAdN : Str -> AdN = P.mkAdN ;
} ;
mkOrd = overload SyntaxSco {
mkOrd : Str -> Ord = P.mkOrd ;
} ;
}

View File

@@ -70,6 +70,8 @@ oper
_ => "لِ" _ => "لِ"
}) Dat ; }) Dat ;
biPrep : Preposition = mkPrefix "بِ" ; biPrep : Preposition = mkPrefix "بِ" ;
kaPrep : Preposition = mkPrefix "كَ" ;
accPrep : Preposition = mkPreposition [] Acc ; -- default object case in VP accPrep : Preposition = mkPreposition [] Acc ; -- default object case in VP
genPrep : Preposition = mkPreposition [] Gen ; -- default object case in N2 genPrep : Preposition = mkPreposition [] Gen ; -- default object case in N2

View File

@@ -153,7 +153,7 @@ resource ParadigmsAra = open
nisbaA : Str -> Adj ; -- Forms relative adjectives with the suffix ِيّ. Takes either the stem and adds يّ, or the whole word ending in يّ and just adds declension. nisbaA : Str -> Adj ; -- Forms relative adjectives with the suffix ِيّ. Takes either the stem and adds يّ, or the whole word ending in يّ and just adds declension.
idaafaA : N -> A -> A ; -- Forms adjectives of type غَيْرُ طَيِّبٍ 'not good'. Noun is in construct state but inflects in case. Adjective is in genitive, but inflects in gender, number and state. idaafaA : N -> A -> A ; -- Forms adjectives of type غَيْرُ لَذيذٍ 'not tasty'. Noun is in construct state but inflects in case. Adjective is in genitive, but inflects in gender, number and state.
degrA : (masc,fem,plur : Str) -> A ; -- Adjective where masculine singular is also the comparative form. Indeclinable singular, basic triptote declension for dual and plural. degrA : (masc,fem,plur : Str) -> A ; -- Adjective where masculine singular is also the comparative form. Indeclinable singular, basic triptote declension for dual and plural.
@@ -202,6 +202,7 @@ resource ParadigmsAra = open
liPrep : Prep ; -- The preposition لِ, binding to its head. Vowel assimilation and def. article elision implemented. liPrep : Prep ; -- The preposition لِ, binding to its head. Vowel assimilation and def. article elision implemented.
biPrep : Prep ; -- The preposition بِ, binding to its head. biPrep : Prep ; -- The preposition بِ, binding to its head.
kaPrep : Prep ; -- The preposition كَ, binding to its head.
noPrep : Prep ; -- No preposition at all, "complement case" is nominative. noPrep : Prep ; -- No preposition at all, "complement case" is nominative.
--2 Conjunctions --2 Conjunctions
@@ -375,6 +376,7 @@ resource ParadigmsAra = open
noPrep = lin Prep ResAra.noPrep ; noPrep = lin Prep ResAra.noPrep ;
biPrep = lin Prep ResAra.biPrep ; biPrep = lin Prep ResAra.biPrep ;
liPrep = lin Prep ResAra.liPrep ; liPrep = lin Prep ResAra.liPrep ;
kaPrep = lin Prep ResAra.kaPrep ;
casePrep : Case -> Prep = \c -> lin Prep {s=[]; c=c; binds=False} ; casePrep : Case -> Prep = \c -> lin Prep {s=[]; c=c; binds=False} ;

View File

@@ -0,0 +1,4 @@
concrete AdjectiveHye of Adjective = CatHye ** {
lin
PositA a = a ;
}

4
src/armenian/AllHye.gf Normal file
View File

@@ -0,0 +1,4 @@
concrete AllHye of AllHyeAbs =
LangHye
**
{} ;

View File

@@ -0,0 +1,3 @@
abstract AllHyeAbs =
Lang
** {}

16
src/armenian/CatHye.gf Normal file
View File

@@ -0,0 +1,16 @@
concrete CatHye of Cat = CommonX ** open ResHye in {
lincat V = Verb ;
lincat VV,VS,VQ,VA = Verb ;
lincat V2 = Verb ** {c2 : Compl} ;
lincat V3,V2A,V2S,V2Q,V2V = Verb ** {c2,c3 : Compl} ;
lincat N = Noun ;
lincat N2 = Noun ** {c2 : Compl} ;
lincat N3 = Noun ** {c2,c3 : Compl} ;
lincat CN = Noun ;
lincat A = Adj ;
lincat A2 = Adj ** {c2 : Compl} ;
lincat AP = Adj ;
lincat Prep = Compl ;
}

View File

@@ -0,0 +1,133 @@
concrete DocumentationHye of Documentation = CatHye ** open
ResHye, Prelude, HTML in {
lincat
Inflection = {t : Str; s1,s2,s3 : Str} ;
Definition = {s : Str} ;
Document = {s : Str} ;
Tag = {s : Str} ;
lin
InflectionV,InflectionV2,InflectionV2A,InflectionV2Q,InflectionV2S,InflectionV2V,InflectionV3,InflectionVA,InflectionVQ,InflectionVS,InflectionVV = \x -> {
t="v" ;
s1="" ;
s2=heading1 "Infinitive" ++
paragraph (x.s) ++
heading1 "Converb" ++
frameTable (
tr (th "Imperfective" ++ td (x.Converb.Imperfective)) ++
tr (th "Simultaneous" ++ td (x.Converb.Simultaneous)) ++
tr (th "Perfective" ++ td (x.Converb.Perfective)) ++
tr (th "Futute I" ++ td (x.Converb.FutCon1)) ++
tr (th "Futute II" ++ td (x.Converb.FutCon2)) ++
tr (th "Connegative" ++ td (x.Converb.Negative))) ++
heading1 "Passive" ++
paragraph x.Passive ++
heading1 "Participle" ++
frameTable (
tr (th "Resultative" ++ td (x.Participle ! Resultative)) ++
tr (th "Subject" ++ td (x.Participle ! Subject))) ++
heading1 "Past" ++
frameTable (
tr (th "" ++ th "Sg" ++ th "Pl") ++
tr (th "P1" ++ td (x.Past ! P1 ! Sg) ++ td (x.Past ! P1 ! Pl)) ++
tr (th "P2" ++ td (x.Past ! P2 ! Sg) ++ td (x.Past ! P2 ! Pl)) ++
tr (th "P3" ++ td (x.Past ! P3 ! Sg) ++ td (x.Past ! P3 ! Pl))) ++
heading1 "Subjunctive" ++
frameTable (
tr (intagAttr "th" "colspan=\"2\"" "" ++ th "Sg" ++ th "Pl") ++
tr (intagAttr "th" "rowspan=\"3\"" "Perfect" ++
th "P1" ++ td (x.Subjunctive ! Perfect ! P1 ! Sg) ++ td (x.Subjunctive ! Perfect ! P1 ! Pl)) ++
tr (th "P2" ++ td (x.Subjunctive ! Perfect ! P2 ! Sg) ++ td (x.Subjunctive ! Perfect ! P2 ! Pl)) ++
tr (th "P3" ++ td (x.Subjunctive ! Perfect ! P3 ! Sg) ++ td (x.Subjunctive ! Perfect ! P3 ! Pl)) ++
tr (intagAttr "th" "rowspan=\"3\"" "Non_Past" ++
th "P1" ++ td (x.Subjunctive ! Non_Past ! P1 ! Sg) ++ td (x.Subjunctive ! Non_Past ! P1 ! Pl)) ++
tr (th "P2" ++ td (x.Subjunctive ! Non_Past ! P2 ! Sg) ++ td (x.Subjunctive ! Non_Past ! P2 ! Pl)) ++
tr (th "P3" ++ td (x.Subjunctive ! Non_Past ! P3 ! Sg) ++ td (x.Subjunctive ! Non_Past ! P3 ! Pl))) ++
heading1 "Conditional" ++
frameTable (
tr (intagAttr "th" "colspan=\"2\"" "" ++ th "Sg" ++ th "Pl") ++
tr (intagAttr "th" "rowspan=\"3\"" "Perfect" ++
th "P1" ++ td (x.Conditional ! Perfect ! P1 ! Sg) ++ td (x.Conditional ! Perfect ! P1 ! Pl)) ++
tr (th "P2" ++ td (x.Conditional ! Perfect ! P2 ! Sg) ++ td (x.Conditional ! Perfect ! P2 ! Pl)) ++
tr (th "P3" ++ td (x.Conditional ! Perfect ! P3 ! Sg) ++ td (x.Conditional ! Perfect ! P3 ! Pl)) ++
tr (intagAttr "th" "rowspan=\"4\"" "Non_Past" ++
th "P1" ++ td (x.Conditional ! Non_Past ! P1 ! Sg) ++ td (x.Conditional ! Non_Past ! P1 ! Pl)) ++
tr (th "P2" ++ td (x.Conditional ! Non_Past ! P2 ! Sg) ++ td (x.Conditional ! Non_Past ! P2 ! Pl)) ++
tr (th "P3" ++ td (x.Conditional ! Non_Past ! P3 ! Sg) ++ td (x.Conditional ! Non_Past ! P3 ! Pl))) ++
heading1 "Imperative" ++
frameTable (
tr (th "Sg" ++ th "Pl") ++
tr (td (x.Imperative_Jussive ! Sg) ++ td (x.Imperative_Jussive ! Pl))) ;
s3=[]
} ;
lin
InflectionN,InflectionN2,InflectionN3 = \x -> {
t="n" ;
s1="" ;
s2=frameTable (
tr (th "" ++ th "Sg" ++ th "Pl") ++
tr (th "Nom" ++ td (x.s ! Nom ! Sg) ++ td (x.s ! Nom ! Pl)) ++
tr (th "Dat" ++ td (x.s ! Dat ! Sg) ++ td (x.s ! Dat ! Pl)) ++
tr (th "Ablat" ++ td (x.s ! Ablat ! Sg) ++ td (x.s ! Ablat ! Pl)) ++
tr (th "Instr" ++ td (x.s ! Instr ! Sg) ++ td (x.s ! Instr ! Pl)) ++
tr (th "Loc" ++ td (x.s ! Loc ! Sg) ++ td (x.s ! Loc ! Pl)) ++
tr (intagAttr "th" "colspan=\"3\"" "definite forms") ++
tr (th "Nom" ++ td (x.def_nom ! Sg) ++ td (x.def_nom ! Pl)) ++
tr (th "Dat" ++ td (x.def_dat ! Sg) ++ td (x.def_dat ! Pl)) ++
tr (intagAttr "th" "colspan=\"3\"" "1st person possessive forms") ++
tr (th "Nom" ++ td (x.poss1 ! Nom ! Sg) ++ td (x.poss1 ! Nom ! Pl)) ++
tr (th "Dat" ++ td (x.poss1 ! Dat ! Sg) ++ td (x.poss1 ! Dat ! Pl)) ++
tr (th "Ablat" ++ td (x.poss1 ! Ablat ! Sg) ++ td (x.poss1 ! Ablat ! Pl)) ++
tr (th "Instr" ++ td (x.poss1 ! Instr ! Sg) ++ td (x.poss1 ! Instr ! Pl)) ++
tr (th "Loc" ++ td (x.poss1 ! Loc ! Sg) ++ td (x.poss1 ! Loc ! Pl)) ++
tr (intagAttr "th" "colspan=\"3\"" "2nd person possessive forms") ++
tr (th "Nom" ++ td (x.poss2 ! Nom ! Sg) ++ td (x.poss2 ! Nom ! Pl)) ++
tr (th "Dat" ++ td (x.poss2 ! Dat ! Sg) ++ td (x.poss2 ! Dat ! Pl)) ++
tr (th "Ablat" ++ td (x.poss2 ! Ablat ! Sg) ++ td (x.poss2 ! Ablat ! Pl)) ++
tr (th "Instr" ++ td (x.poss2 ! Instr ! Sg) ++ td (x.poss2 ! Instr ! Pl)) ++
tr (th "Loc" ++ td (x.poss2 ! Loc ! Sg) ++ td (x.poss2 ! Loc ! Pl))) ;
s3=[]
} ;
lin
InflectionA,InflectionA2 = \x -> {
t="a" ;
s1="" ;
s2=frameTable (
tr (th "" ++ th "Sg" ++ th "Pl") ++
tr (th "Nom" ++ td (x.s ! Nom ! Sg) ++ td (x.s ! Nom ! Pl)) ++
tr (th "Dat" ++ td (x.s ! Dat ! Sg) ++ td (x.s ! Dat ! Pl)) ++
tr (th "Ablat" ++ td (x.s ! Ablat ! Sg) ++ td (x.s ! Ablat ! Pl)) ++
tr (th "Instr" ++ td (x.s ! Instr ! Sg) ++ td (x.s ! Instr ! Pl)) ++
tr (th "Loc" ++ td (x.s ! Loc ! Sg) ++ td (x.s ! Loc ! Pl)) ++
tr (intagAttr "th" "colspan=\"3\"" "definite forms") ++
tr (th "Nom" ++ td (x.def_nom ! Sg) ++ td (x.def_nom ! Pl)) ++
tr (th "Dat" ++ td (x.def_dat ! Sg) ++ td (x.def_dat ! Pl)) ++
tr (intagAttr "th" "colspan=\"3\"" "1st person possessive forms") ++
tr (th "Nom" ++ td (x.poss1 ! Nom ! Sg) ++ td (x.poss1 ! Nom ! Pl)) ++
tr (th "Dat" ++ td (x.poss1 ! Dat ! Sg) ++ td (x.poss1 ! Dat ! Pl)) ++
tr (th "Ablat" ++ td (x.poss1 ! Ablat ! Sg) ++ td (x.poss1 ! Ablat ! Pl)) ++
tr (th "Instr" ++ td (x.poss1 ! Instr ! Sg) ++ td (x.poss1 ! Instr ! Pl)) ++
tr (th "Loc" ++ td (x.poss1 ! Loc ! Sg) ++ td (x.poss1 ! Loc ! Pl)) ++
tr (intagAttr "th" "colspan=\"3\"" "2nd person possessive forms") ++
tr (th "Nom" ++ td (x.poss2 ! Nom ! Sg) ++ td (x.poss2 ! Nom ! Pl)) ++
tr (th "Dat" ++ td (x.poss2 ! Dat ! Sg) ++ td (x.poss2 ! Dat ! Pl)) ++
tr (th "Ablat" ++ td (x.poss2 ! Ablat ! Sg) ++ td (x.poss2 ! Ablat ! Pl)) ++
tr (th "Instr" ++ td (x.poss2 ! Instr ! Sg) ++ td (x.poss2 ! Instr ! Pl)) ++
tr (th "Loc" ++ td (x.poss2 ! Loc ! Sg) ++ td (x.poss2 ! Loc ! Pl))) ;
s3=[]
} ;
lin
InflectionAdA,InflectionAdN,InflectionAdV,InflectionAdv = \x -> {t="adv"; s1=""; s2=x.s; s3=""} ;
InflectionPrep = \x -> {t="prep"; s1=""; s2=x.s; s3=""} ;
lin
NoDefinition t = {s=t.s};
MkDefinition t d = {s="<p><b>Definition:</b>"++t.s++d.s++"</p>"};
MkDefinitionEx t d e = {s="<p><b>Definition:</b>"++t.s++d.s++"</p><p><b>Example:</b>"++e.s++"</p>"};
lin
MkDocument d i e = {s = i.s1 ++ d.s ++ i.s2 ++ i.s3 ++ e.s} ;
MkTag i = {s = i.t} ;
}

View File

@@ -0,0 +1,2 @@
concrete GrammarHye of Grammar = TenseX ** {
}

10
src/armenian/LangHye.gf Normal file
View File

@@ -0,0 +1,10 @@
--# -path=.:../abstract
concrete LangHye of Lang =
GrammarHye,
LexiconHye
,DocumentationHye --# notpresent
** {
flags startcat = Phr ;
}

View File

@@ -0,0 +1,2 @@
concrete LexiconHye of Lexicon = CatHye ** open ParadigmsHye in {
}

7506
src/armenian/MorphoHye.gf Normal file

File diff suppressed because it is too large Load Diff

4
src/armenian/NounHye.gf Normal file
View File

@@ -0,0 +1,4 @@
concrete NounHye of Noun = CatHye ** {
lin
UseN n = n ;
}

View File

@@ -0,0 +1,488 @@
resource ParadigmsHye = MorphoHye ** open Predef, Prelude, CatHye, ResHye in {
oper
regV : Str -> V -- s
= \form -> case form of {
_ + "ղալ" => mkV002 form;
_ + "ձալ" => mkV002 form;
_ + "զալ" => mkV002 form;
_ + "լալ" => mkV002 form;
_ + "թալ" => mkV002 form;
_ + "ռալ" => mkV002 form;
_ + "րալ" => mkV002 form;
_ + "ւալ" => mkV002 form;
_ + "ջալ" => mkV002 form;
_ + "գալ" => mkV002 form;
_ + "տալ" => mkV002 form;
_ + "ճալ" => mkV002 form;
_ + "սալ" => mkV002 form;
_ + "փալ" => mkV002 form;
_ + "կալ" => mkV002 form;
_ + "վալ" => mkV002 form;
_ + "բալ" => mkV002 form;
_ + "ծալ" => mkV002 form;
_ + "չալ" => mkV002 form;
_ + "նալ" => mkV004 form;
_ + "ել" => mkV001 form;
_ => error "Cannot find an inflection rule"
} ;
reg2V : Str -> Str -> V -- s Imperative_Jussive;Pl
= \form1, form2 -> case <form1, form2> of {
<_ + "լ", _ + "է՛ք"> => mkV012 form1;
_ => regV form1
} ;
regN : Str -> N -- s;Nom;Sg
= \form -> case form of {
_ + "իւն" => mkN008 form;
_ + "ժամ" => mkN007 form;
_ + "մոմ" => mkN007 form;
_ + "ւնտ" => mkN007 form;
_ + "րստ" => mkN007 form;
_ + "խոտ" => mkN007 form;
_ + "ելտ" => mkN007 form;
_ + "տառ" => mkN007 form;
_ + "երդ" => mkN007 form;
_ + "ձող" => mkN007 form;
_ + "փող" => mkN007 form;
_ + "հող" => mkN007 form;
_ + "խաղ" => mkN007 form;
_ + "իկղ" => mkN007 form;
_ + "շոր" => mkN007 form;
_ + "զոր" => mkN007 form;
_ + "շեր" => mkN016 form;
_ + "եգր" => mkN007 form;
_ + "թել" => mkN007 form;
_ + "խել" => mkN007 form;
_ + "ճոճ" => mkN007 form;
_ + "իցք" => mkN007 form;
_ + "ենք" => mkN007 form;
_ + "ուրծք" => mkN005 form;
_ + "յծք" => mkN007 form;
_ + "նչք" => mkN007 form;
_ + "ծոց" => mkN007 form;
_ + "այց" => mkN007 form;
_ + "կաց" => mkN007 form;
_ + "ջիջ" => mkN013 form;
_ + "եղջ" => mkN007 form;
_ + "ւրթ" => mkN007 form;
_ + "յոթ" => mkN007 form;
_ + "ճապ" => mkN001 form;
_ + "րապ" => mkN001 form;
_ + "լեպ" => mkN001 form;
_ + "ծագ" => mkN007 form;
_ + "ենգ" => mkN007 form;
_ + "գիչ" => mkN013 form;
_ + "միչ" => mkN013 form;
_ + "տիչ" => mkN013 form;
_ + "նիչ" => mkN013 form;
_ + "ւրծ" => mkN007 form;
_ + "թու" => mkN012 form;
_ + "զու" => mkN012 form;
_ + "ռու" => mkN012 form;
_ + "ճու" => mkN012 form;
_ + "ղու" => mkN012 form;
_ + "ճաշ" => mkN007 form;
_ + "վիշ" => mkN013 form;
_ + "ուրձ" => mkN005 form;
_ + "դհի" => mkN006 form;
_ + "ւդի" => mkN006 form;
_ + "ուն" => mkN010 form;
_ + "սն" => mkN007 form;
_ + "կն" => mkN007 form;
_ + "շն" => mkN007 form;
_ + "մն" => mkN007 form;
_ + "ռն" => mkN007 form;
_ + "ձն" => mkN007 form;
_ + "նն" => mkN007 form;
_ + "ւմ" => mkN004 form;
_ + "րմ" => mkN007 form;
_ + "ղմ" => mkN007 form;
_ + "յմ" => mkN007 form;
_ + "հմ" => mkN007 form;
_ + "լմ" => mkN007 form;
_ + "յտ" => mkN007 form;
_ + "յռ" => mkN007 form;
_ + "ղդ" => mkN007 form;
_ + "տղ" => mkN007 form;
_ + "ղխ" => mkN007 form;
_ + "լխ" => mkN007 form;
_ + "ճխ" => mkN007 form;
_ + "չխ" => mkN007 form;
_ + "ղկ" => mkN007 form;
_ + "սկ" => mkN007 form;
_ + "տր" => mkN007 form;
_ + "կր" => mkN007 form;
_ + "նր" => mkN007 form;
_ + "ղր" => mkN007 form;
_ + "խր" => mkN007 form;
_ + "բր" => mkN007 form;
_ + "օր" => mkN016 form;
_ + "յլ" => mkN007 form;
_ + "րս" => mkN007 form;
_ + "մս" => mkN007 form;
_ + "փս" => mkN007 form;
_ + "լս" => mkN007 form;
_ + "րճ" => mkN007 form;
_ + "եճ" => mkN007 form;
_ + "աճ" => mkN007 form;
_ + "նճ" => mkN007 form;
_ + "ջք" => mkN007 form;
_ + "մք" => mkN007 form;
_ + "վք" => mkN007 form;
_ + "թք" => mkN007 form;
_ + "բք" => mkN007 form;
_ + "խց" => mkN007 form;
_ + "ղց" => mkN007 form;
_ + "վթ" => mkN007 form;
_ + "ղբ" => mkN007 form;
_ + "րբ" => mkN007 form;
_ + "ուբ" => mkN005 form;
_ + "զբ" => mkN007 form;
_ + "եբ" => mkN007 form;
_ + "ոպ" => mkN001 form;
_ + "ւպ" => mkN001 form;
_ + "իպ" => mkN001 form;
_ + "եգ" => mkN007 form;
_ + "իգ" => mkN007 form;
_ + "ոգ" => mkN007 form;
_ + "յգ" => mkN007 form;
_ + "ուրչ" => mkN005 form;
_ + "շչ" => mkN007 form;
_ + "նծ" => mkN007 form;
_ + "եծ" => mkN007 form;
_ + "յծ" => mkN007 form;
_ + "եւ" => mkN001 form;
_ + "աւ" => mkN001 form;
_ + "ւժ" => mkN007 form;
_ + "իժ" => mkN013 form;
_ + "քշ" => mkN007 form;
_ + "րշ" => mkN007 form;
_ + "ուզ" => mkN005 form;
_ + "րզ" => mkN007 form;
_ + "ավ" => mkN007 form;
_ + "յվ" => mkN007 form;
_ + "աֆ" => mkN001 form;
_ + "լֆ" => mkN001 form;
_ + "իփ" => mkN001 form;
_ + "ափ" => mkN001 form;
_ + "ոյ" => mkN007 form;
_ + "լի" => mkN006 form;
_ + "բի" => mkN006 form;
_ + "խի" => mkN006 form;
_ + "թի" => mkN006 form;
_ + "պի" => mkN006 form;
_ + "վի" => mkN006 form;
_ + "փի" => mkN006 form;
_ + "աի" => mkN006 form;
_ + "ջի" => mkN006 form;
_ + "ն" => mkN001 form;
_ + "մ" => mkN001 form;
_ + "տ" => mkN001 form;
_ + "ռ" => mkN001 form;
_ + "դ" => mkN001 form;
_ + "ղ" => mkN001 form;
_ + "խ" => mkN001 form;
_ + "կ" => mkN001 form;
_ + "ր" => mkN001 form;
_ + "լ" => mkN001 form;
_ + "ս" => mkN001 form;
_ + "ճ" => mkN001 form;
_ + "ք" => mkN001 form;
_ + "ց" => mkN001 form;
_ + "ջ" => mkN001 form;
_ + "թ" => mkN001 form;
_ + "բ" => mkN001 form;
_ + "պ" => mkN007 form;
_ + "գ" => mkN001 form;
_ + "չ" => mkN001 form;
_ + "ծ" => mkN001 form;
_ + "ւ" => mkN006 form;
_ + "ժ" => mkN001 form;
_ + "շ" => mkN001 form;
_ + "զ" => mkN001 form;
_ + "ձ" => mkN007 form;
_ + "վ" => mkN001 form;
_ + "ֆ" => mkN007 form;
_ + "հ" => mkN001 form;
_ + "փ" => mkN007 form;
_ + "յ" => mkN001 form;
_ + "ա" => mkN002 form;
_ + "ո" => mkN002 form;
_ + "ի" => mkN003 form;
_ + "ե" => mkN006 form;
_ + "է" => mkN006 form;
_ => error "Cannot find an inflection rule"
} ;
reg2N : Str -> Str -> N -- s;Nom;Sg s;Dat;Sg
= \form1, form2 -> case <form1, form2> of {
<_ + "թու", _ + "ւի"> => mkN006 form1;
<_ + "շեր", _ + "ի"> => mkN001 form1;
<_ + "ժամ", _ + "ա"> => mkN016 form1;
<_ + "ուն", _ + "բնի"> => mkN005 form1;
<_ + "ւն", _ + "վան"> => mkN009 form1;
<_ + "ւն", _ + "տան"> => mkN028 form1;
<_ + "ւն", _ + "շան"> => mkN028 form1;
<_ + "ւզ", _ + "ւզի"> => mkN001 form1;
<_ + "ւն", _ + "ի"> => mkN001 form1;
<_ + "ւն", _ + "ա"> => mkN032 form1;
<_ + "ւմ", _ + "ի"> => mkN001 form1;
<_ + "լի", _ + "ւ"> => mkN003 form1;
<_ + "բի", _ + "ւ"> => mkN003 form1;
<_ + "խի", _ + "ւ"> => mkN003 form1;
<_ + "թի", _ + "ւ"> => mkN003 form1;
<_ + "տ", _ + "մտի"> => mkN005 form1;
<_ + "տ", _ + "գտի"> => mkN005 form1;
<_ + "տ", _ + "վտի"> => mkN013 form1;
<_ + "ռ", _ + "ճռի"> => mkN013 form1;
<_ + "ն", _ + "ծնի"> => mkN013 form1;
<_ + "ն", _ + "տնի"> => mkN013 form1;
<_ + "ն", _ + "ցնի"> => mkN013 form1;
<_ + "ն", _ + "ձնի"> => mkN013 form1;
<_ + "ն", _ + "բնի"> => mkN013 form1;
<_ + "ն", _ + "խնի"> => mkN013 form1;
<_ + "ղ", _ + "ւղի"> => mkN007 form1;
<_ + "ղ", _ + "վղի"> => mkN013 form1;
<_ + "ղ", _ + "փղի"> => mkN015 form1;
<_ + "ղ", _ + "տղի"> => mkN031 form1;
<_ + "խ", _ + "ծխի"> => mkN005 form1;
<_ + "խ", _ + "բխի"> => mkN031 form1;
<_ + "կ", _ + "ղկի"> => mkN013 form1;
<_ + "կ", _ + "տկի"> => mkN013 form1;
<_ + "կ", _ + "պկի"> => mkN013 form1;
<_ + "կ", _ + "զկի"> => mkN031 form1;
<_ + "ս", _ + "մսի"> => mkN013 form1;
<_ + "ճ", _ + "վճի"> => mkN013 form1;
<_ + "ճ", _ + "հճի"> => mkN013 form1;
<_ + "ց", _ + "տցի"> => mkN005 form1;
<_ + "ց", _ + "կցի"> => mkN013 form1;
<_ + "ր", _ + "դրի"> => mkN013 form1;
<_ + "ր", _ + "գրի"> => mkN015 form1;
<_ + "ր", _ + "տրի"> => mkN005 form1;
<_ + "ր", _ + "ջրի"> => mkN005 form1;
<_ + "ր", _ + "լրի"> => mkN005 form1;
<_ + "ր", _ + "նրի"> => mkN013 form1;
<_ + "ր", _ + "խրի"> => mkN013 form1;
<_ + "ր", _ + "կրի"> => mkN013 form1;
<_ + "ր", _ + "ցրի"> => mkN013 form1;
<_ + "չ", _ + "պչի"> => mkN013 form1;
<_ + "չ", _ + "կչի"> => mkN013 form1;
<_ + "չ", _ + "րչի"> => mkN013 form1;
<_ + "չ", _ + "ցչի"> => mkN013 form1;
<_ + "չ", _ + "վչի"> => mkN013 form1;
<_ + "ծ", _ + "գծի"> => mkN015 form1;
<_ + "շ", _ + "փշի"> => mkN005 form1;
<_ + "ի", _ + "իու"> => mkN027 form1;
<_ + "ի", _ + "ձիի"> => mkN017 form1;
<_ + "ւ", _ + "վի"> => mkN012 form1;
<_ + "տ", _ + "ա"> => mkN016 form1;
<_ + "ռ", _ + "ն"> => mkN026 form1;
<_ + "ն", _ + "ջ"> => mkN034 form1;
<_ + "կ", _ + "ա"> => mkN016 form1;
<_ + "կ", _ + "ն"> => mkN023 form1;
<_ + "ր", _ + "ջ"> => mkN043 form1;
<_ + "ի", _ + "ի"> => mkN006 form1;
_ => regN form1
} ;
regA : Str -> A -- s;Nom;Sg
= \form -> case form of {
_ + "կիչ" => mkA006 form;
_ + "ենգ" => mkA005 form;
_ + "աղջ" => mkA005 form;
_ + "սկի" => mkA003 form;
_ + "աղի" => mkA003 form;
_ + "ղց" => mkA005 form;
_ + "ջն" => mkA005 form;
_ + "եպ" => mkA005 form;
_ + "նտ" => mkA005 form;
_ + "ոդ" => mkA005 form;
_ + "ղծ" => mkA005 form;
_ + "յծ" => mkA005 form;
_ + "եծ" => mkA005 form;
_ + "ձր" => mkA005 form;
_ + "նր" => mkA005 form;
_ + "ծր" => mkA005 form;
_ + "մր" => mkA005 form;
_ + "սր" => mkA005 form;
_ + "քր" => mkA005 form;
_ + "ցր" => mkA005 form;
_ + "եւ" => mkA001 form;
_ + "ոկ" => mkA005 form;
_ + "ղմ" => mkA005 form;
_ + "տք" => mkA005 form;
_ + "իղ" => mkA006 form;
_ + "նչ" => mkA008 form;
_ + "ոխ" => mkA005 form;
_ + "ղխ" => mkA005 form;
_ + "ղթ" => mkA005 form;
_ + "ւթ" => mkA011 form;
_ + "րշ" => mkA005 form;
_ + "եշ" => mkA005 form;
_ + "քշ" => mkA005 form;
_ + "ոռ" => mkA005 form;
_ + "ւգ" => mkA005 form;
_ + "եգ" => mkA005 form;
_ + "րճ" => mkA005 form;
_ + "րզ" => mkA005 form;
_ + "եզ" => mkA005 form;
_ + "ւփ" => mkA005 form;
_ + "նջ" => mkA005 form;
_ + "աջ" => mkA005 form;
_ + "մբ" => mkA001 form;
_ + "ոյ" => mkA001 form;
_ + "բի" => mkA003 form;
_ + "սի" => mkA003 form;
_ + "ց" => mkA001 form;
_ + "ն" => mkA001 form;
_ + "պ" => mkA001 form;
_ + "տ" => mkA001 form;
_ + "դ" => mkA001 form;
_ + "վ" => mkA001 form;
_ + "ծ" => mkA001 form;
_ + "ձ" => mkA001 form;
_ + "ր" => mkA001 form;
_ + "լ" => mkA001 form;
_ + "ւ" => mkA002 form;
_ + "կ" => mkA001 form;
_ + "մ" => mkA001 form;
_ + "ք" => mkA001 form;
_ + "ղ" => mkA001 form;
_ + "չ" => mkA001 form;
_ + "ժ" => mkA001 form;
_ + "խ" => mkA001 form;
_ + "թ" => mkA001 form;
_ + "ս" => mkA001 form;
_ + "շ" => mkA001 form;
_ + "հ" => mkA001 form;
_ + "ռ" => mkA001 form;
_ + "գ" => mkA001 form;
_ + "ճ" => mkA001 form;
_ + "զ" => mkA001 form;
_ + "փ" => mkA001 form;
_ + "ջ" => mkA001 form;
_ + "բ" => mkA005 form;
_ + "յ" => mkA005 form;
_ + "ե" => mkA002 form;
_ + "ի" => mkA002 form;
_ + "ա" => mkA004 form;
_ + "ո" => mkA004 form;
_ => error "Cannot find an inflection rule"
} ;
reg2A : Str -> Str -> A -- s;Nom;Sg s;Nom;Pl
= \form1, form2 -> case <form1, form2> of {
<_ + "ոռ", _ + "ներ"> => mkA001 form1;
<_ + "տ", _ + "տեր"> => mkA005 form1;
<_ + "վ", _ + "վեր"> => mkA005 form1;
<_ + "ծ", _ + "ծեր"> => mkA005 form1;
<_ + "ձ", _ + "ձեր"> => mkA005 form1;
<_ + "լ", _ + "լեր"> => mkA005 form1;
<_ + "կ", _ + "կեր"> => mkA005 form1;
<_ + "մ", _ + "մեր"> => mkA005 form1;
<_ + "ք", _ + "քեր"> => mkA005 form1;
<_ + "ղ", _ + "ղեր"> => mkA005 form1;
<_ + "խ", _ + "խեր"> => mkA005 form1;
<_ + "թ", _ + "թեր"> => mkA005 form1;
<_ + "շ", _ + "շեր"> => mkA005 form1;
<_ + "հ", _ + "հեր"> => mkA005 form1;
<_ + "ռ", _ + "ռեր"> => mkA005 form1;
<_ + "գ", _ + "գեր"> => mkA005 form1;
<_ + "ճ", _ + "ճեր"> => mkA005 form1;
<_ + "զ", _ + "զեր"> => mkA005 form1;
<_ + "ջ", _ + "ջեր"> => mkA005 form1;
_ => regA form1
} ;
mkV = overload {
mkV : Str -> V = regV; -- s
mkV : Str -> Str -> V = reg2V -- s Imperative_Jussive;Pl
} ;
mkVV,mkVS,mkVQ,mkVA = \v -> v ;
mkV2 = overload {
mkV2 : V -> V2 = \v -> v ** {c2 = noPrep} ;
mkV2 : V -> Prep -> V2 = \v,p -> v ** {c2 = p} ;
} ;
mkV3 = overload {
mkV3 : V -> V3 = \v -> v ** {c2 = noPrep; c3 = noPrep} ;
mkV3 : V -> Prep -> Prep -> V3 = \v,p1,p2 -> v ** {c2 = p1; c3 = p2} ;
} ;
mkV2A = overload {
mkV2A : V -> V2A = \v -> v ** {c2 = noPrep; c3 = noPrep} ;
mkV2A : V -> Prep -> Prep -> V2A = \v,p1,p2 -> v ** {c2 = p1; c3 = p2} ;
} ;
mkV2S = overload {
mkV2S : V -> V2S = \v -> v ** {c2 = noPrep; c3 = noPrep} ;
mkV2S : V -> Prep -> Prep -> V2S = \v,p1,p2 -> v ** {c2 = p1; c3 = p2} ;
} ;
mkV2Q = overload {
mkV2Q : V -> V2Q = \v -> v ** {c2 = noPrep; c3 = noPrep} ;
mkV2Q : V -> Prep -> Prep -> V2Q = \v,p1,p2 -> v ** {c2 = p1; c3 = p2} ;
} ;
mkV2V = overload {
mkV2V : V -> V2V = \v -> v ** {c2 = noPrep; c3 = noPrep} ;
mkV2V : V -> Prep -> Prep -> V2V = \v,p1,p2 -> v ** {c2 = p1; c3 = p2} ;
} ;
mkN = overload {
mkN : Str -> N = regN; -- s;Nom;Sg
mkN : Str -> Str -> N = reg2N -- s;Nom;Sg s;Dat;Sg
} ;
mkN2 = overload {
mkN2 : N -> N2 = \n -> n ** {c2 = noPrep} ;
mkN2 : N -> Prep -> N2 = \n,p -> n ** {c2 = p} ;
} ;
mkN3 = overload {
mkN3 : N -> N3 = \n -> n ** {c2 = noPrep; c3 = noPrep} ;
mkN3 : N -> Prep -> Prep -> N3 = \n,p1,p2 -> n ** {c2 = p1; c3 = p2} ;
} ;
mkA = overload {
mkA : Str -> A = regA; -- s;Nom;Sg
mkA : Str -> Str -> A = reg2A -- s;Nom;Sg s;Nom;Pl
} ;
mkA2 = overload {
mkA2 : A -> A2 = \a -> a ** {c2 = noPrep} ;
mkA2 : A -> Prep -> A2 = \a,p -> a ** {c2 = p} ;
} ;
mkAdv : Str -> Adv = \s -> lin Adv {s=s} ;
mkAdV : Str -> AdV = \s -> lin AdV {s=s} ;
mkAdA : Str -> AdA = \s -> lin AdA {s=s} ;
mkAdN : Str -> AdN = \s -> lin AdN {s=s} ;
mkCAdv : Str -> CAdv = \s -> lin CAdv {s=s; p=""} ;
mkInterj : Str -> Interj = \s -> lin Interj {s=s} ;
mkMU : Str -> MU = \s -> lin MU {s=s; isPre=False} ;
mkPrep : Str -> Prep = \s -> lin Prep {s=s; c=Dat} ;
mkIAdv : Str -> IAdv = \s -> lin IAdv {s=s} ;
mkIP : Str -> IP = \s -> lin IP {s=s} ;
mkIQuant : Str -> IQuant = \s -> lin IQuant {s=s} ;
mkIDet : Str -> IDet = \s -> lin IDet {s=s} ;
mkSubj : Str -> Subj = \s -> lin Subj {s=s} ;
mkQuant : Str -> Quant = \s -> lin Quant {s=s} ;
mkPredet : Str -> Predet = \s -> lin Predet {s=s} ;
mkDet : Str -> Det = \s -> lin Det {s=s} ;
mkCard : Str -> Card = \s -> lin Card {s=s} ;
mkConj : Str -> Conj = \s -> lin Conj {s=s} ;
mkPConj : Str -> PConj = \s -> lin PConj {s=s} ;
mkVoc : Str -> Voc = \s -> lin Voc {s=s} ;
mkLN : Str -> LN = \s -> lin LN {s=s} ;
mkGN : Str -> GN = \s -> lin GN {s=s} ;
mkSN : Str -> SN = \s -> lin SN {s=s} ;
mkPN : Str -> PN = \s -> lin PN {s=s} ;
}

11
src/armenian/PhraseHye.gf Normal file
View File

@@ -0,0 +1,11 @@
concrete PhraseHye of Phrase = CatHye ** {
lin
PhrUtt pconj utt voc = {s = pconj.s ++ utt.s ++ voc.s} ;
UttS s = s ;
UttInterj i = i ;
NoPConj = {s = []} ;
NoVoc = {s = []} ;
}

269
src/armenian/ResHye.gf Normal file
View File

@@ -0,0 +1,269 @@
resource ResHye = {
param Aspect = Non_Past | Perfect ;
param Person = P1 | P3 | P2 ;
param Number = Sg | Pl ;
param Case = Nom | Dat | Ablat | Instr | Loc ;
param PartType = Resultative | Subject ;
oper Verb = {s: Str; Causative: Str; Conditional: Aspect => Person => Number => Str; Converb: {Imperfective: Str; FutCon1: Str; FutCon2: Str; Negative: Str; Perfective: Str; Simultaneous: Str}; Imperative_Jussive: Number => Str; Passive: Str; Past: Person => Number => Str; Participle: PartType => Str; Subjunctive: Aspect => Person => Number => Str} ; -- 898
oper mkVerb : (_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_ : Str) -> Verb =
\f1,f2,f3,f4,f5,f6,f7,f8,f9,f10,f11,f12,f13,f14,f15,f16,f17,f18,f19,f20,f21,f22,f23,f24,f25,f26,f27,f28,f29,f30,f31,f32,f33,f34,f35,f36,f37,f38,f39,f40,f41,f42,f43 ->
{ s = f1 ;
Causative = f2 ;
Conditional = table {
Perfect => table {
P1 => table {
Sg => f3 ;
Pl => f4
} ;
P2 => table {
Sg => f5 ;
Pl => f6
} ;
P3 => table {
Sg => f7 ;
Pl => f8
}
} ;
Non_Past => table {
P1 => table {
Sg => f9 ;
Pl => f10
} ;
P2 => table {
Sg => f11 ;
Pl => f12
} ;
P3 => table {
Sg => f13 ;
Pl => f14
}
}
} ;
Converb = { Imperfective = f15 ;
FutCon1 = f16 ;
FutCon2 = f17 ;
Negative = f18 ;
Perfective = f19 ;
Simultaneous = f20
} ;
Imperative_Jussive = table {
Sg => f21 ;
Pl => f22
} ;
Passive = f23 ;
Past = table {
P1 => table {
Sg => f24 ;
Pl => f25
} ;
P2 => table {
Sg => f26 ;
Pl => f27
} ;
P3 => table {
Sg => f28 ;
Pl => f29
}
} ;
Participle = table {
Resultative => f30 ;
Subject => f31
} ;
Subjunctive = table {
Perfect => table {
P1 => table {
Sg => f32 ;
Pl => f33
} ;
P2 => table {
Sg => f34 ;
Pl => f35
} ;
P3 => table {
Sg => f36 ;
Pl => f37
}
} ;
Non_Past => table {
P1 => table {
Sg => f38 ;
Pl => f39
} ;
P2 => table {
Sg => f40 ;
Pl => f41
} ;
P3 => table {
Sg => f42 ;
Pl => f43
}
}
}
} ;
oper Noun = {s: Case => Number => Str; def_dat: Number => Str; def_nom: Number => Str; poss1: Case => Number => Str; poss2: Case => Number => Str} ; -- 4880
oper mkNoun : (_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_ : Str) -> Noun =
\f1,f2,f3,f4,f5,f6,f7,f8,f9,f10,f11,f12,f13,f14,f15,f16,f17,f18,f19,f20,f21,f22,f23,f24,f25,f26,f27,f28,f29,f30,f31,f32,f33,f34 ->
{ s = table {
Nom => table {
Sg => f1 ;
Pl => f2
} ;
Dat => table {
Sg => f3 ;
Pl => f4
} ;
Ablat => table {
Sg => f5 ;
Pl => f6
} ;
Instr => table {
Sg => f7 ;
Pl => f8
} ;
Loc => table {
Sg => f9 ;
Pl => f10
}
} ;
def_dat = table {
Sg => f11 ;
Pl => f12
} ;
def_nom = table {
Sg => f13 ;
Pl => f14
} ;
poss1 = table {
Nom => table {
Sg => f15 ;
Pl => f16
} ;
Dat => table {
Sg => f17 ;
Pl => f18
} ;
Ablat => table {
Sg => f19 ;
Pl => f20
} ;
Instr => table {
Sg => f21 ;
Pl => f22
} ;
Loc => table {
Sg => f23 ;
Pl => f24
}
} ;
poss2 = table {
Nom => table {
Sg => f25 ;
Pl => f26
} ;
Dat => table {
Sg => f27 ;
Pl => f28
} ;
Ablat => table {
Sg => f29 ;
Pl => f30
} ;
Instr => table {
Sg => f31 ;
Pl => f32
} ;
Loc => table {
Sg => f33 ;
Pl => f34
}
}
} ;
oper Adj = {s: Case => Number => Str; def_dat: Number => Str; def_nom: Number => Str; poss1: Case => Number => Str; poss2: Case => Number => Str} ; -- 1608
oper mkAdj : (_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_ : Str) -> Adj =
\f1,f2,f3,f4,f5,f6,f7,f8,f9,f10,f11,f12,f13,f14,f15,f16,f17,f18,f19,f20,f21,f22,f23,f24,f25,f26,f27,f28,f29,f30,f31,f32,f33,f34 ->
{ s = table {
Nom => table {
Sg => f1 ;
Pl => f2
} ;
Dat => table {
Sg => f3 ;
Pl => f4
} ;
Ablat => table {
Sg => f5 ;
Pl => f6
} ;
Instr => table {
Sg => f7 ;
Pl => f8
} ;
Loc => table {
Sg => f9 ;
Pl => f10
}
} ;
def_dat = table {
Sg => f11 ;
Pl => f12
} ;
def_nom = table {
Sg => f13 ;
Pl => f14
} ;
poss1 = table {
Nom => table {
Sg => f15 ;
Pl => f16
} ;
Dat => table {
Sg => f17 ;
Pl => f18
} ;
Ablat => table {
Sg => f19 ;
Pl => f20
} ;
Instr => table {
Sg => f21 ;
Pl => f22
} ;
Loc => table {
Sg => f23 ;
Pl => f24
}
} ;
poss2 = table {
Nom => table {
Sg => f25 ;
Pl => f26
} ;
Dat => table {
Sg => f27 ;
Pl => f28
} ;
Ablat => table {
Sg => f29 ;
Pl => f30
} ;
Instr => table {
Sg => f31 ;
Pl => f32
} ;
Loc => table {
Sg => f33 ;
Pl => f34
}
}
} ;
oper Compl = {s : Str; c : Case} ;
oper noPrep : Compl = {s=""; c=Dat} ;
}

View File

@@ -19,7 +19,7 @@ param
oper oper
-- AGRE = {g : Gender ; n : Number ; p : Person} ; -- AGRE = {g : Gender ; n : Number ; p : Person} ;
Agre : Type = {g : Gender ; n : Number ; p : Person} ; Agre : PType = {g : Gender ; n : Number ; p : Person} ;
agre : Gender -> Number -> Person -> Agre = \g,n,p -> {g = g ; n = n ; p = p} ; agre : Gender -> Number -> Person -> Agre = \g,n,p -> {g = g ; n = n ; p = p} ;
agrFeatures : Agr -> Agre = \a -> case a of {Ag g n p => {g = g ; n = n ; p = p}} ; agrFeatures : Agr -> Agre = \a -> case a of {Ag g n p => {g = g ; n = n ; p = p}} ;

View File

@@ -0,0 +1,4 @@
concrete AdjectiveBel of Adjective = CatBel ** {
lin
PositA a = a ;
}

4
src/belarusian/AllBel.gf Normal file
View File

@@ -0,0 +1,4 @@
concrete AllBel of AllBelAbs =
LangBel
**
{} ;

View File

@@ -0,0 +1,3 @@
abstract AllBelAbs =
Lang
** {}

21
src/belarusian/CatBel.gf Normal file
View File

@@ -0,0 +1,21 @@
concrete CatBel of Cat = CommonX ** open ResBel in {
lincat N = Noun ;
lincat N2 = Noun ** {c2 : Compl} ;
lincat N3 = Noun ** {c2,c3 : Compl} ;
lincat V = V ;
lincat VV,VS,VQ,VA = V ;
lincat V2 = V ** {c2 : Compl} ;
lincat V3,V2A,V2S,V2Q,V2V = V ** {c2,c3 : Compl} ;
lincat A = A ;
lincat A2 = A ** {c2 : Compl} ;
lincat Prep = Compl ;
lincat CN = CommonNoun ;
lincat AP = AdjPhrase ;
lincat S = {s : Str} ;
lincat LN,SN,GN,PN = {s : Str} ;
linref V,VV,V2,V3,V2A,V2S,V2Q,V2V = \v -> v.infinitive ;
}

View File

@@ -0,0 +1,77 @@
concrete DocumentationBel of Documentation = CatBel ** open
ResBel, Prelude, HTML in {
lincat
Inflection = {t : Str; s1,s2,s3 : Str} ;
Definition = {s : Str} ;
Document = {s : Str} ;
Tag = {s : Str} ;
lin
InflectionN,InflectionN2,InflectionN3 = \x -> {
t="n" ;
s1="" ;
s2=frameTable (
tr (th "" ++ th "Sg" ++ th "Pl") ++
tr (th "Nom" ++ td (x.s ! Nom ! Sg) ++ td (x.s ! Nom ! Pl)) ++
tr (th "Acc" ++ td (x.s ! Acc ! Sg) ++ td (x.s ! Acc ! Pl)) ++
tr (th "Dat" ++ td (x.s ! Dat ! Sg) ++ td (x.s ! Dat ! Pl)) ++
tr (th "Gen" ++ td (x.s ! Gen ! Sg) ++ td (x.s ! Gen ! Pl)) ++
tr (th "Loc" ++ td (x.s ! Loc ! Sg) ++ td (x.s ! Loc ! Pl)) ++
tr (th "Instr" ++ td (x.s ! Instr ! Sg) ++ td (x.s ! Instr ! Pl))) ;
s3=[]
} ;
lin
InflectionV,InflectionV2,InflectionV2A,InflectionV2Q,InflectionV2S,InflectionV2V,InflectionV3,InflectionVA,InflectionVQ,InflectionVS,InflectionVV = \x -> {
t="v" ;
s1="" ;
s2=heading1 "Infinitive" ++
paragraph (x.infinitive) ++
heading1 "Present" ++
frameTable (
tr (intagAttr "th" "rowspan=\"6\"" "Pres" ++ intagAttr "th" "rowspan=\"2\"" "P1" ++ th "Sg" ++ td ((x.active ! Imperf).Pres ! P1 ! Sg)) ++
tr (th "Pl" ++ td ((x.active ! Imperf).Pres ! P1 ! Pl)) ++
tr (intagAttr "th" "rowspan=\"2\"" "P2" ++ th "Sg" ++ td ((x.active ! Imperf).Pres ! P2 ! Sg)) ++
tr (th "Pl" ++ td ((x.active ! Imperf).Pres ! P2 ! Pl)) ++
tr (intagAttr "th" "rowspan=\"2\"" "P3" ++ th "Sg" ++ td ((x.active ! Imperf).Pres ! P3 ! Sg)) ++
tr (th "Pl" ++ td ((x.active ! Imperf).Pres ! P3 ! Pl))) ++
heading1 "Imperative" ++
frameTable (
tr (th "Sg" ++ td (x.imperative ! Sg)) ++
tr (th "Pl" ++ td (x.imperative ! Pl))) ++
heading1 "participle" ++
frameTable (
tr (th "" ++ th "Sg" ++ th "Pl") ++
tr (th "Masc" ++ td (x.participle ! Masc ! Sg) ++ td (x.participle ! Masc ! Pl)) ++
tr (th "Fem" ++ td (x.participle ! Fem ! Sg) ++ td (x.participle ! Fem ! Pl)) ++
tr (th "Neuter" ++ td (x.participle ! Neuter ! Sg) ++ td (x.participle ! Neuter ! Pl))) ;
s3=[]
} ;
lin
InflectionA,InflectionA2 = \x -> {
t="a" ;
s1="" ;
s2=frameTable (
tr (th "" ++ th "Masc" ++ th "Fem" ++ th "Neuter" ++ th "Pl") ++
tr (th "Nom" ++ td (x.s ! Nom ! GSg Masc) ++ td (x.s ! Nom ! GSg Fem) ++ td (x.s ! Nom ! GSg Neuter) ++ td (x.s ! Nom ! GPl)) ++
tr (th "Acc" ++ td (x.s ! Acc ! GSg Masc) ++ td (x.s ! Acc ! GSg Fem) ++ td (x.s ! Acc ! GSg Neuter) ++ td (x.s ! Acc ! GPl)) ++
tr (th "Dat" ++ td (x.s ! Dat ! GSg Masc) ++ td (x.s ! Dat ! GSg Fem) ++ td (x.s ! Dat ! GSg Neuter) ++ td (x.s ! Dat ! GPl)) ++
tr (th "Gen" ++ td (x.s ! Gen ! GSg Masc) ++ td (x.s ! Gen ! GSg Fem) ++ td (x.s ! Gen ! GSg Neuter) ++ td (x.s ! Gen ! GPl)) ++
tr (th "Loc" ++ td (x.s ! Loc ! GSg Masc) ++ td (x.s ! Loc ! GSg Fem) ++ td (x.s ! Loc ! GSg Neuter) ++ td (x.s ! Loc ! GPl)) ++
tr (th "Instr"++td (x.s ! Instr ! GSg Masc)++td (x.s ! Instr ! GSg Fem)++td (x.s ! Instr ! GSg Neuter)++td (x.s ! Instr ! GPl))) ;
s3=[]
} ;
lin
InflectionAdA,InflectionAdN,InflectionAdV,InflectionAdv = \x -> {t="adv"; s1=""; s2=x.s; s3=""} ;
InflectionPrep = \x -> {t="prep"; s1=""; s2=x.s; s3=""} ;
lin
NoDefinition t = {s=t.s};
MkDefinition t d = {s="<p><b>Definition:</b>"++t.s++d.s++"</p>"};
MkDefinitionEx t d e = {s="<p><b>Definition:</b>"++t.s++d.s++"</p><p><b>Example:</b>"++e.s++"</p>"};
lin
MkDocument d i e = {s = i.s1 ++ d.s ++ i.s2 ++ i.s3 ++ e.s} ;
MkTag i = {s = i.t} ;
}

View File

@@ -0,0 +1,6 @@
concrete GrammarBel of Grammar =
TenseX,
PhraseBel,
NounBel,
AdjectiveBel ** {
}

10
src/belarusian/LangBel.gf Normal file
View File

@@ -0,0 +1,10 @@
--# -path=.:../abstract
concrete LangBel of Lang =
GrammarBel,
LexiconBel
,DocumentationBel --# notpresent
** {
flags startcat = Phr ;
}

View File

@@ -0,0 +1,2 @@
concrete LexiconBel of Lexicon = CatBel ** open ParadigmsBel in {
}

29614
src/belarusian/MorphoBel.gf Normal file

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,4 @@
concrete NounBel of Noun = CatBel ** {
lin
UseN n = n ;
}

View File

@@ -0,0 +1,839 @@
resource ParadigmsBel = MorphoBel ** open Predef, Prelude, CatBel, ResBel in {
oper
regN : Str -> N -- s;Nom;Sg
= \form -> case form of {
_ + "цат" => mkN056 form;
_ + "фат" => mkN099 form;
_ + "бат" => mkN131 form;
_ + "ват" => mkN131 form;
_ + "кат" => mkN131 form;
_ + "энт" => mkN131 form;
_ + "онт" => mkN056 form;
_ + "ікт" => mkN056 form;
_ + "укт" => mkN056 form;
_ + "сіт" => mkN131 form;
_ + "біт" => mkN131 form;
_ + "ірт" => mkN205 form;
_ + "ост" => mkN056 form;
_ + "уст" => mkN125 form;
_ + "эфт" => mkN056 form;
_ + "нёт" => mkN056 form;
_ + "ыёт" => mkN131 form;
_ + "аэт" => mkN131 form;
_ + "цэт" => mkN131 form;
_ + "чыт" => mkN125 form;
_ + "гут" => mkN125 form;
_ + "'ят" => mkN131 form;
_ + "лец" => mkN002 form;
_ + "аец" => mkN235 form;
_ + "еец" => mkN235 form;
_ + "ыец" => mkN235 form;
_ + "іец" => mkN235 form;
_ + "зец" => mkN265 form;
_ + "вец" => mkN300 form;
_ + "рац" => mkN286 form;
_ + "рка" => mkN003 form;
_ + "іка" => mkN003 form;
_ + "ека" => mkN003 form;
_ + "ыка" => mkN003 form;
_ + "ўка" => mkN217 form;
_ + "ука" => mkN026 form;
_ + "эка" => mkN026 form;
_ + "ока" => mkN026 form;
_ + "ака" => mkN026 form;
_ + "яка" => mkN026 form;
_ + "йка" => mkN124 form;
_ + "ька" => mkN196 form;
_ + "ква" => mkN039 form;
_ + "ова" => mkN150 form;
_ + "зва" => mkN039 form;
_ + "хва" => mkN039 form;
_ + "рва" => mkN039 form;
_ + "ева" => mkN138 form;
_ + "ява" => mkN150 form;
_ + "эва" => mkN166 form;
_ + "уза" => mkN012 form;
_ + "аза" => mkN012 form;
_ + "нза" => mkN012 form;
_ + "еза" => mkN024 form;
_ + "ўза" => mkN039 form;
_ + "яза" => mkN187 form;
_ + "іма" => mkN012 form;
_ + "ома" => mkN012 form;
_ + "ьма" => mkN091 form;
_ + "чма" => mkN215 form;
_ + "ьба" => mkN012 form;
_ + "аба" => mkN012 form;
_ + "ыба" => mkN012 form;
_ + "ёба" => mkN024 form;
_ + "жба" => mkN039 form;
_ + "чба" => mkN039 form;
_ + "ўба" => mkN091 form;
_ + "ўна" => mkN012 form;
_ + "ына" => mkN012 form;
_ + "ана" => mkN012 form;
_ + "рна" => mkN012 form;
_ + "дна" => mkN024 form;
_ + "нна" => mkN039 form;
_ + "яна" => mkN061 form;
_ + "уна" => mkN091 form;
_ + "спа" => mkN012 form;
_ + "лпа" => mkN083 form;
_ + "гла" => mkN012 form;
_ + "ула" => mkN188 form;
_ + "ёла" => mkN012 form;
_ + "іла" => mkN188 form;
_ + "ела" => mkN188 form;
_ + "яла" => mkN091 form;
_ + "сла" => mkN260 form;
_ + "ыса" => mkN012 form;
_ + "оса" => mkN024 form;
_ + "йга" => mkN020 form;
_ + "рга" => mkN061 form;
_ + "ьга" => mkN088 form;
_ + "ята" => mkN245 form;
_ + "ыта" => mkN245 form;
_ + "дра" => mkN102 form;
_ + "тра" => mkN080 form;
_ + "бра" => mkN080 form;
_ + "ўра" => mkN099 form;
_ + "кра" => mkN102 form;
_ + "ыца" => mkN137 form;
_ + "ўца" => mkN137 form;
_ + "дца" => mkN078 form;
_ + "йца" => mkN078 form;
_ + "чца" => mkN078 form;
_ + "нца" => mkN080 form;
_ + "рца" => mkN080 form;
_ + "сца" => mkN080 form;
_ + "ржа" => mkN064 form;
_ + "жжа" => mkN080 form;
_ + "джа" => mkN102 form;
_ + "ыча" => mkN036 form;
_ + "эча" => mkN036 form;
_ + "яча" => mkN064 form;
_ + "чча" => mkN080 form;
_ + "нча" => mkN102 form;
_ + "оха" => mkN309 form;
_ + "ьха" => mkN309 form;
_ + "зык" => mkN005 form;
_ + "мык" => mkN005 form;
_ + "тык" => mkN043 form;
_ + "аяк" => mkN005 form;
_ + "пяк" => mkN005 form;
_ + "ляк" => mkN063 form;
_ + "мак" => mkN006 form;
_ + "пак" => mkN006 form;
_ + "шак" => mkN006 form;
_ + "сак" => mkN006 form;
_ + "вак" => mkN063 form;
_ + "зак" => mkN251 form;
_ + "вік" => mkN005 form;
_ + "лік" => mkN043 form;
_ + "вук" => mkN006 form;
_ + "цук" => mkN006 form;
_ + "рук" => mkN043 form;
_ + "шук" => mkN043 form;
_ + "нук" => mkN063 form;
_ + "чук" => mkN328 form;
_ + "шок" => mkN015 form;
_ + "мок" => mkN063 form;
_ + "чок" => mkN015 form;
_ + "нок" => mkN015 form;
_ + "рэк" => mkN063 form;
_ + "цуг" => mkN005 form;
_ + "раг" => mkN063 form;
_ + "онг" => mkN008 form;
_ + "рог" => mkN337 form;
_ + "лог" => mkN200 form;
_ + "жух" => mkN005 form;
_ + "тух" => mkN063 form;
_ + "нах" => mkN063 form;
_ + "віч" => mkN062 form;
_ + "нач" => mkN184 form;
_ + "ршч" => mkN204 form;
_ + "пыр" => mkN334 form;
_ + "лор" => mkN007 form;
_ + "рор" => mkN042 form;
_ + "пор" => mkN059 form;
_ + "хор" => mkN155 form;
_ + "фар" => mkN007 form;
_ + "нар" => mkN007 form;
_ + "хар" => mkN019 form;
_ + "гар" => mkN019 form;
_ + "вар" => mkN042 form;
_ + "жар" => mkN042 form;
_ + "сір" => mkN062 form;
_ + "пір" => mkN062 form;
_ + "хір" => mkN365 form;
_ + "гір" => mkN365 form;
_ + "кер" => mkN007 form;
_ + "мер" => mkN042 form;
_ + "лер" => mkN042 form;
_ + "нер" => mkN062 form;
_ + "вер" => mkN174 form;
_ + "ґер" => mkN127 form;
_ + "цэр" => mkN062 form;
_ + "шэр" => mkN062 form;
_ + "дэр" => mkN062 form;
_ + "гур" => mkN062 form;
_ + "чур" => mkN062 form;
_ + "аўр" => mkN334 form;
_ + "ыгр" => mkN334 form;
_ + "даж" => mkN034 form;
_ + "гаж" => mkN071 form;
_ + "ыум" => mkN031 form;
_ + "нос" => mkN013 form;
_ + "пус" => mkN009 form;
_ + "лас" => mkN009 form;
_ + "рас" => mkN045 form;
_ + "лёс" => mkN011 form;
_ + "цыс" => mkN013 form;
_ + "нес" => mkN045 form;
_ + "зіс" => mkN045 form;
_ + "вол" => mkN035 form;
_ + "рол" => mkN159 form;
_ + "пел" => mkN011 form;
_ + "рал" => mkN013 form;
_ + "дал" => mkN013 form;
_ + "кал" => mkN013 form;
_ + "сал" => mkN013 form;
_ + "сул" => mkN013 form;
_ + "мул" => mkN045 form;
_ + "нёл" => mkN013 form;
_ + "вон" => mkN009 form;
_ + "рон" => mkN011 form;
_ + "лон" => mkN011 form;
_ + "зон" => mkN011 form;
_ + "аон" => mkN013 form;
_ + "зан" => mkN013 form;
_ + "бан" => mkN195 form;
_ + "зін" => mkN011 form;
_ + "фін" => mkN013 form;
_ + "він" => mkN013 form;
_ + "рэн" => mkN011 form;
_ + "зын" => mkN011 form;
_ + "лын" => mkN214 form;
_ + "іян" => mkN013 form;
_ + "лян" => mkN045 form;
_ + "цян" => mkN195 form;
_ + "жун" => mkN195 form;
_ + "кун" => mkN195 form;
_ + "сун" => mkN195 form;
_ + "пун" => mkN366 form;
_ + "лаб" => mkN009 form;
_ + "ваб" => mkN011 form;
_ + "раб" => mkN013 form;
_ + "арб" => mkN045 form;
_ + "цай" => mkN022 form;
_ + "гай" => mkN117 form;
_ + "тай" => mkN117 form;
_ + "чай" => mkN305 form;
_ + "бой" => mkN017 form;
_ + "рой" => mkN022 form;
_ + "пой" => mkN305 form;
_ + "зей" => mkN022 form;
_ + "куй" => mkN099 form;
_ + "мыз" => mkN011 form;
_ + "цуз" => mkN013 form;
_ + "буз" => mkN214 form;
_ + "куп" => mkN013 form;
_ + "чуп" => mkN045 form;
_ + "ноп" => mkN035 form;
_ + "хоп" => mkN045 form;
_ + "льф" => mkN011 form;
_ + "орф" => mkN011 form;
_ + "сад" => mkN037 form;
_ + "гад" => mkN037 form;
_ + "айд" => mkN037 form;
_ + "код" => mkN037 form;
_ + "лод" => mkN048 form;
_ + "луд" => mkN048 form;
_ + "пед" => mkN037 form;
_ + "зед" => mkN081 form;
_ + "оід" => mkN037 form;
_ + "туш" => mkN034 form;
_ + "рыш" => mkN062 form;
_ + "дло" => mkN278 form;
_ + "яло" => mkN278 form;
_ + "бло" => mkN278 form;
_ + "ало" => mkN316 form;
_ + "іно" => mkN061 form;
_ + "гно" => mkN278 form;
_ + "тно" => mkN316 form;
_ + "дро" => mkN246 form;
_ + "яро" => mkN246 form;
_ + "шкі" => mkN242 form;
_ + "ані" => mkN088 form;
_ + "дні" => mkN241 form;
_ + "уры" => mkN061 form;
_ + "юты" => mkN181 form;
_ + "оны" => mkN145 form;
_ + "чны" => mkN181 form;
_ + "ены" => mkN291 form;
_ + "аны" => mkN291 form;
_ + "нны" => mkN291 form;
_ + "іцы" => mkN145 form;
_ + "ёды" => mkN145 form;
_ + "зія" => mkN133 form;
_ + "хія" => mkN133 form;
_ + "лея" => mkN133 form;
_ + "ель" => mkN237 form;
_ + "унь" => mkN164 form;
_ + "энь" => mkN164 form;
_ + "ань" => mkN164 form;
_ + "онь" => mkN164 form;
_ + "азь" => mkN100 form;
_ + "дзь" => mkN152 form;
_ + "ось" => mkN375 form;
_ + "ась" => mkN375 form;
_ + "яць" => mkN325 form;
_ + "уць" => mkN325 form;
_ + "іць" => mkN325 form;
_ + "іт" => mkN056 form;
_ + "рт" => mkN056 form;
_ + "ст" => mkN131 form;
_ + "ыт" => mkN056 form;
_ + "ят" => mkN056 form;
_ + "лт" => mkN056 form;
_ + "шт" => mkN056 form;
_ + "нц" => mkN042 form;
_ + "яц" => mkN046 form;
_ + "ац" => mkN046 form;
_ + "ва" => mkN024 form;
_ + "за" => mkN016 form;
_ + "ма" => mkN016 form;
_ + "ба" => mkN016 form;
_ + "на" => mkN016 form;
_ + "па" => mkN016 form;
_ + "ла" => mkN024 form;
_ + "са" => mkN016 form;
_ + "га" => mkN021 form;
_ + "та" => mkN023 form;
_ + "ра" => mkN036 form;
_ + "ца" => mkN036 form;
_ + "жа" => mkN036 form;
_ + "ша" => mkN036 form;
_ + "ча" => mkN297 form;
_ + "эа" => mkN061 form;
_ + "да" => mkN087 form;
_ + "ха" => mkN114 form;
_ + "ык" => mkN063 form;
_ + "як" => mkN006 form;
_ + "ак" => mkN178 form;
_ + "юк" => mkN006 form;
_ + "ок" => mkN043 form;
_ + "ск" => mkN043 form;
_ + "ўк" => mkN044 form;
_ + "ёк" => mkN122 form;
_ + "уг" => mkN115 form;
_ + "рг" => mkN008 form;
_ + "аг" => mkN008 form;
_ + "яг" => mkN008 form;
_ + "зг" => mkN030 form;
_ + "ог" => mkN105 form;
_ + "ег" => mkN200 form;
_ + "іх" => mkN006 form;
_ + "эх" => mkN008 form;
_ + "ях" => mkN113 form;
_ + "рч" => mkN007 form;
_ + "іч" => mkN007 form;
_ + "юч" => mkN034 form;
_ + "яч" => mkN034 form;
_ + "шч" => mkN034 form;
_ + "ыч" => mkN034 form;
_ + "еч" => mkN184 form;
_ + "эч" => mkN184 form;
_ + "ыр" => mkN019 form;
_ + "ар" => mkN062 form;
_ + "ір" => mkN007 form;
_ + "яр" => mkN019 form;
_ + "юр" => mkN042 form;
_ + "гр" => mkN062 form;
_ + "ёр" => mkN062 form;
_ + "аж" => mkN062 form;
_ + "ож" => mkN059 form;
_ + "ўж" => mkN155 form;
_ + "рж" => mkN155 form;
_ + "дж" => mkN204 form;
_ + "ам" => mkN031 form;
_ + "ум" => mkN045 form;
_ + "ьм" => mkN031 form;
_ + "ім" => mkN031 form;
_ + "йм" => mkN031 form;
_ + "ём" => mkN031 form;
_ + "юм" => mkN031 form;
_ + "эм" => mkN045 form;
_ + "яс" => mkN009 form;
_ + "ёс" => mkN045 form;
_ + "нс" => mkN045 form;
_ + "рс" => mkN045 form;
_ + "эс" => mkN045 form;
_ + "ыл" => mkN011 form;
_ + "ел" => mkN330 form;
_ + "эл" => mkN045 form;
_ + "іл" => mkN013 form;
_ + "ёл" => mkN018 form;
_ + "ін" => mkN239 form;
_ + "эн" => mkN013 form;
_ + "рн" => mkN011 form;
_ + "ын" => mkN013 form;
_ + "ен" => mkN013 form;
_ + "ун" => mkN214 form;
_ + "рб" => mkN035 form;
_ + "ўб" => mkN035 form;
_ + "юб" => mkN045 form;
_ + "уб" => mkN050 form;
_ + "ыб" => mkN050 form;
_ + "ей" => mkN017 form;
_ + "яй" => mkN017 form;
_ + "эй" => mkN022 form;
_ + "уй" => mkN067 form;
_ + "ыз" => mkN045 form;
_ + "оз" => mkN057 form;
_ + "уп" => mkN050 form;
_ + "ап" => mkN013 form;
_ + "ўп" => mkN045 form;
_ + "ып" => mkN045 form;
_ + "іф" => mkN045 form;
_ + "рд" => mkN037 form;
_ + "юд" => mkN081 form;
_ + "зд" => mkN082 form;
_ + "ьв" => mkN120 form;
_ + "аш" => mkN034 form;
_ + "уш" => mkN046 form;
_ + "рш" => mkN046 form;
_ + "ўш" => mkN059 form;
_ + "ро" => mkN061 form;
_ + "кі" => mkN322 form;
_ + "ні" => mkN099 form;
_ + "ці" => mkN099 form;
_ + "лі" => mkN241 form;
_ + "гі" => mkN242 form;
_ + "ыё" => mkN061 form;
_ + "нё" => mkN433 form;
_ + "ье" => mkN061 form;
_ + "ае" => mkN361 form;
_ + "ры" => mkN145 form;
_ + "ты" => mkN145 form;
_ + "шы" => mkN181 form;
_ + "бы" => mkN291 form;
_ + "лы" => mkN291 form;
_ + "чы" => mkN291 form;
_ + "мы" => mkN291 form;
_ + "мя" => mkN092 form;
_ + "бя" => mkN092 form;
_ + "оя" => mkN133 form;
_ + "ця" => mkN154 form;
_ + "ка" => mkN004 form;
_ + "ль" => mkN100 form;
_ + "нь" => mkN100 form;
_ + "зь" => mkN410 form;
_ + "сь" => mkN116 form;
_ + "ыў" => mkN252 form;
_ + "еў" => mkN252 form;
_ + "т" => mkN032 form;
_ + "ц" => mkN127 form;
_ + "к" => mkN008 form;
_ + "г" => mkN043 form;
_ + "х" => mkN043 form;
_ + "ч" => mkN019 form;
_ + "р" => mkN046 form;
_ + "ж" => mkN046 form;
_ + "м" => mkN011 form;
_ + "с" => mkN031 form;
_ + "л" => mkN031 form;
_ + "н" => mkN031 form;
_ + "б" => mkN031 form;
_ + "й" => mkN010 form;
_ + "з" => mkN031 form;
_ + "п" => mkN031 form;
_ + "ф" => mkN031 form;
_ + "д" => mkN027 form;
_ + "в" => mkN031 form;
_ + ("яляш"|"ялюш") => mkN243 form;
_ + "о" => mkN055 form;
_ + "і" => mkN061 form;
_ + "э" => mkN061 form;
_ + "ё" => mkN230 form;
_ + "ю" => mkN061 form;
_ + "е" => mkN201 form;
_ + "ы" => mkN283 form;
_ + "я" => mkN206 form;
_ + "у" => mkN088 form;
_ + "ь" => mkN262 form;
_ + "o" => mkN144 form;
_ + "ў" => mkN351 form;
_ => error "Cannot find an inflection rule"
} ;
reg2N : Str -> Str -> N -- s;Nom;Sg s;Acc;Pl
= \form1, form2 -> case <form1, form2> of {
<_ + "мак", _ + "мкі"> => mkN178 form1;
<_ + "ана", _ + "оны"> => mkN070 form1;
<_ + "ана", _ + "эны"> => mkN182 form1;
<_ + "нер", _ + "яры"> => mkN069 form1;
<_ + "ель", _ + "блі"> => mkN118 form1;
<_ + "ель", _ + "флі"> => mkN179 form1;
<_ + "ань", _ + "жні"> => mkN177 form1;
<_ + "раб", _ + "оў"> => mkN195 form1;
<_ + "вак", _ + "оў"> => mkN328 form1;
<_ + "вец", _ + "оў"> => mkN420 form1;
<_ + "рка", _ + "і"> => mkN004 form1;
<_ + "іка", _ + "і"> => mkN026 form1;
<_ + "ека", _ + "і"> => mkN256 form1;
<_ + "ыка", _ + "і"> => mkN026 form1;
<_ + "ыка", _ + "ў"> => mkN129 form1;
<_ + "ўка", _ + "к"> => mkN161 form1;
<_ + "зык", _ + "ў"> => mkN006 form1;
<_ + "мак", _ + "і"> => mkN005 form1;
<_ + "пак", _ + "і"> => mkN005 form1;
<_ + "шок", _ + "і"> => mkN008 form1;
<_ + "лік", _ + "ў"> => mkN063 form1;
<_ + "нос", _ + "ы"> => mkN009 form1;
<_ + "гай", _ + "і"> => mkN010 form1;
<_ + "льф", _ + "ы"> => mkN031 form1;
<_ + "рон", _ + "ў"> => mkN013 form1;
<_ + "лон", _ + "ў"> => mkN029 form1;
<_ + "лон", _ + "ы"> => mkN045 form1;
<_ + "лёс", _ + "ы"> => mkN045 form1;
<_ + "зін", _ + "ы"> => mkN031 form1;
<_ + "уза", _ + "ы"> => mkN091 form1;
<_ + "аза", _ + "ы"> => mkN016 form1;
<_ + "аза", _ + "з"> => mkN139 form1;
<_ + "ьба", _ + "ы"> => mkN016 form1;
<_ + "іма", _ + "ы"> => mkN091 form1;
<_ + "ына", _ + "ы"> => mkN016 form1;
<_ + "спа", _ + "ы"> => mkN039 form1;
<_ + "ана", _ + "ы"> => mkN016 form1;
<_ + "гла", _ + "ы"> => mkN356 form1;
<_ + "аба", _ + "ы"> => mkN016 form1;
<_ + "ула", _ + "л"> => mkN012 form1;
<_ + "ула", _ + "ы"> => mkN016 form1;
<_ + "ыса", _ + "ы"> => mkN016 form1;
<_ + "рна", _ + "ы"> => mkN091 form1;
<_ + "раб", _ + "ы"> => mkN031 form1;
<_ + "іян", _ + "ы"> => mkN031 form1;
<_ + "цыс", _ + "ы"> => mkN031 form1;
<_ + "мок", _ + "і"> => mkN015 form1;
<_ + "іла", _ + "ы"> => mkN016 form1;
<_ + "ела", _ + "ы"> => mkN016 form1;
<_ + "ова", _ + "ў"> => mkN138 form1;
<_ + "вол", _ + "ў"> => mkN029 form1;
<_ + "дра", _ + "ў"> => mkN141 form1;
<_ + "гад", _ + "ў"> => mkN081 form1;
<_ + "зва", _ + "ў"> => mkN083 form1;
<_ + "рва", _ + "ў"> => mkN083 form1;
<_ + "вар", _ + "ў"> => mkN062 form1;
<_ + "рук", _ + "ў"> => mkN328 form1;
<_ + "нер", _ + "ы"> => mkN046 form1;
<_ + "ост", _ + "ы"> => mkN054 form1;
<_ + "энт", _ + "ы"> => mkN056 form1;
<_ + "вер", _ + "ў"> => mkN062 form1;
<_ + "раг", _ + "і"> => mkN115 form1;
<_ + "ўца", _ + "ў"> => mkN078 form1;
<_ + "бра", _ + "ы"> => mkN102 form1;
<_ + "ьма", _ + "ў"> => mkN083 form1;
<_ + "ель", _ + "і"> => mkN100 form1;
<_ + "рог", _ + "і"> => mkN105 form1;
<_ + "рог", _ + "ў"> => mkN339 form1;
<_ + "унь", _ + "і"> => mkN121 form1;
<_ + "йка", _ + "к"> => mkN160 form1;
<_ + "ька", _ + "ў"> => mkN129 form1;
<_ + "ька", _ + "і"> => mkN197 form1;
<_ + "яць", _ + "ў"> => mkN132 form1;
<_ + "ось", _ + "ў"> => mkN152 form1;
<_ + "зак", _ + "ў"> => mkN191 form1;
<_ + "ар", _ + "тры"> => mkN373 form1;
<_ + "ок", _ + "ркі"> => mkN015 form1;
<_ + "ок", _ + "ткі"> => mkN015 form1;
<_ + "ок", _ + "акі"> => mkN030 form1;
<_ + "ва", _ + "івы"> => mkN150 form1;
<_ + "ла", _ + "элы"> => mkN182 form1;
<_ + "ла", _ + "ылы"> => mkN188 form1;
<_ + "са", _ + "осы"> => mkN070 form1;
<_ + "ел", _ + "елы"> => mkN031 form1;
<_ + "ль", _ + "злі"> => mkN177 form1;
<_ + "нь", _ + "дні"> => mkN173 form1;
<_ + "нь", _ + "ўні"> => mkN175 form1;
<_ + "нь", _ + "сні"> => mkN179 form1;
<_ + "нь", _ + "пні"> => mkN179 form1;
<_ + "нь", _ + "яні"> => mkN400 form1;
<_ + "ак", _ + "оў"> => mkN006 form1;
<_ + "ык", _ + "оў"> => mkN006 form1;
<_ + "як", _ + "аў"> => mkN063 form1;
<_ + "ар", _ + "оў"> => mkN019 form1;
<_ + "ла", _ + "ол"> => mkN139 form1;
<_ + "ын", _ + "оў"> => mkN038 form1;
<_ + "яр", _ + "аў"> => mkN062 form1;
<_ + "іт", _ + "ты"> => mkN032 form1;
<_ + "ль", _ + "ёў"> => mkN203 form1;
<_ + "ак", _ + "ў"> => mkN276 form1;
<_ + "ык", _ + "і"> => mkN008 form1;
<_ + "ыр", _ + "ы"> => mkN034 form1;
<_ + "ір", _ + "ы"> => mkN042 form1;
<_ + "ар", _ + "ы"> => mkN046 form1;
<_ + "аг", _ + "ў"> => mkN063 form1;
<_ + "эх", _ + "ў"> => mkN063 form1;
<_ + "ма", _ + "м"> => mkN012 form1;
<_ + "на", _ + "н"> => mkN012 form1;
<_ + "ба", _ + "б"> => mkN012 form1;
<_ + "ла", _ + "л"> => mkN012 form1;
<_ + "па", _ + "п"> => mkN012 form1;
<_ + "ап", _ + "ы"> => mkN031 form1;
<_ + "эл", _ + "ў"> => mkN013 form1;
<_ + "ен", _ + "ы"> => mkN045 form1;
<_ + "ей", _ + "ў"> => mkN022 form1;
<_ + "ёл", _ + "ы"> => mkN031 form1;
<_ + "та", _ + "ў"> => mkN078 form1;
<_ + "ін", _ + "ы"> => mkN031 form1;
<_ + "ст", _ + "ы"> => mkN032 form1;
<_ + "шч", _ + "ў"> => mkN346 form1;
<_ + "ца", _ + "ц"> => mkN137 form1;
<_ + "рд", _ + "ў"> => mkN081 form1;
<_ + "ск", _ + "ў"> => mkN063 form1;
<_ + "еч", _ + "ы"> => mkN069 form1;
<_ + "ча", _ + "ў"> => mkN141 form1;
<_ + "бя", _ + "т"> => mkN153 form1;
<_ + "ль", _ + "ў"> => mkN152 form1;
<_ + "нь", _ + "ў"> => mkN152 form1;
<_ + "ха", _ + "і"> => mkN309 form1;
<_ + "зь", _ + "ў"> => mkN132 form1;
<_ + "оя", _ + "і"> => mkN301 form1;
<_ + "ж", _ + "ыжы"> => mkN090 form1;
<_ + "г", _ + "ўгі"> => mkN044 form1;
<_ + "с", _ + "ысы"> => mkN050 form1;
<_ + "д", _ + "оды"> => mkN037 form1;
<_ + "р", _ + "ары"> => mkN059 form1;
<_ + "ь", _ + "кці"> => mkN177 form1;
<_ + "ь", _ + "гці"> => mkN177 form1;
<_ + "ь", _ + "аці"> => mkN325 form1;
<_ + "т", _ + "оў"> => mkN001 form1;
<_ + "к", _ + "оў"> => mkN006 form1;
<_ + "л", _ + "оў"> => mkN159 form1;
<_ + "й", _ + "оі"> => mkN017 form1;
<_ + "й", _ + "іі"> => mkN067 form1;
<_ + "с", _ + "оў"> => mkN195 form1;
<_ + "н", _ + "оў"> => mkN038 form1;
<_ + "о", _ + "вы"> => mkN278 form1;
<_ + "т", _ + "ў"> => mkN131 form1;
<_ + "а", _ + "к"> => mkN003 form1;
<_ + "к", _ + "ў"> => mkN063 form1;
<_ + "м", _ + "ў"> => mkN013 form1;
<_ + "л", _ + "ў"> => mkN013 form1;
<_ + "с", _ + "ў"> => mkN013 form1;
<_ + "з", _ + "ў"> => mkN013 form1;
<_ + "н", _ + "ў"> => mkN013 form1;
<_ + "п", _ + "ў"> => mkN029 form1;
<_ + "р", _ + "ў"> => mkN062 form1;
<_ + "х", _ + "ў"> => mkN063 form1;
<_ + "я", _ + "т"> => mkN153 form1;
<_ + "я", _ + "ў"> => mkN154 form1;
<_ + "я", _ + "ь"> => mkN232 form1;
<_ + "я", _ + "й"> => mkN384 form1;
<_ + "ц", _ + "ы"> => mkN299 form1;
<_ + "ь", _ + "й"> => mkN323 form1;
_ => regN form1
} ;
regV : Str -> V -- infinitive
= \form -> case form of {
_ + "агчы" => mkV021 form;
_ + "іць" => mkV036 form;
_ + "эць" => mkV048 form;
_ + "ыць" => mkV020 form;
_ + "уць" => mkV045 form;
_ + "ячы" => mkV072 form;
_ + "ьці" => mkV013 form;
_ + "зці" => mkV049 form;
_ + "бці" => mkV137 form;
_ + "сці" => mkV016 form;
_ + "цца" => mkV043 form;
_ + "ма" => mkV013 form;
_ + "шы" => mkV013 form;
_ + "ь" => mkV015 form;
_ => error "Cannot find an inflection rule"
} ;
reg2V : Str -> Str -> V -- infinitive Imperative;Sg
= \form1, form2 -> case <form1, form2> of {
<_ + "іць", _ + "ані"> => mkV096 form1;
<_ + "іць", _ + "яні"> => mkV079 form1;
<_ + "іць", _ + "апі"> => mkV017 form1;
<_ + "іць", _ + "сці"> => mkV078 form1;
<_ + "уць", _ + "кні"> => mkV074 form1;
<_ + "уць", _ + "хні"> => mkV074 form1;
<_ + "іць", _ + "ві"> => mkV001 form1;
<_ + "іць", _ + "бі"> => mkV058 form1;
<_ + "іць", _ + "зі"> => mkV058 form1;
<_ + "іць", _ + "аі"> => mkV155 form1;
<_ + "іць", _ + "пі"> => mkV058 form1;
<_ + "іць", _ + "ці"> => mkV033 form1;
<_ + "іць", _ + "сі"> => mkV050 form1;
<_ + "іць", _ + "ць"> => mkV060 form1;
<_ + "іць", _ + "мь"> => mkV106 form1;
<_ + "ыць", _ + "жы"> => mkV064 form1;
<_ + "іць", _ + "і"> => mkV011 form1;
<_ + "іць", _ + "ў"> => mkV139 form1;
<_ + "іць", _ + "й"> => mkV156 form1;
<_ + "эць", _ + "й"> => mkV015 form1;
<_ + "эць", _ + "ь"> => mkV063 form1;
<_ + "ыць", _ + "ы"> => mkV070 form1;
<_ + "ыць", _ + "й"> => mkV055 form1;
<_ + "ыць", _ + "і"> => mkV089 form1;
<_ + "уць", _ + "ь"> => mkV037 form1;
<_ + "уць", _ + "й"> => mkV055 form1;
<_ + "зці", _ + "ь"> => mkV092 form1;
<_ + "ь", _ + "жуй"> => mkV003 form1;
<_ + "ь", _ + "цай"> => mkV055 form1;
<_ + "ь", _ + "лжы"> => mkV125 form1;
<_ + "ь", _ + "аві"> => mkV102 form1;
<_ + "ь", _ + "ссі"> => mkV145 form1;
<_ + "і", _ + "асі"> => mkV137 form1;
<_ + "ы", _ + "яжы"> => mkV143 form1;
<_ + "а", _ + "іся"> => mkV046 form1;
<_ + "а", _ + "ыся"> => mkV046 form1;
<_ + "а", _ + "ься"> => mkV080 form1;
<_ + "а", _ + "рся"> => mkV087 form1;
<_ + "а", _ + "чся"> => mkV087 form1;
<_ + "ь", _ + "уй"> => mkV029 form1;
<_ + "ь", _ + "ой"> => mkV025 form1;
<_ + "ь", _ + "юй"> => mkV120 form1;
<_ + "ь", _ + "нь"> => mkV063 form1;
<_ + "ь", _ + "шы"> => mkV028 form1;
<_ + "ь", _ + "чы"> => mkV130 form1;
<_ + "ь", _ + "мі"> => mkV039 form1;
<_ + "ь", _ + "ві"> => mkV039 form1;
<_ + "ь", _ + "зі"> => mkV115 form1;
<_ + "ь", _ + "ні"> => mkV102 form1;
<_ + "ь", _ + "бі"> => mkV145 form1;
<_ + "і", _ + "сі"> => mkV049 form1;
<_ + "і", _ + "ці"> => mkV056 form1;
<_ + "ь", _ + "ь"> => mkV018 form1;
<_ + "ь", _ + "ы"> => mkV066 form1;
<_ + "ь", _ + "ч"> => mkV034 form1;
<_ + "ь", _ + "і"> => mkV069 form1;
<_ + "і", _ + "ь"> => mkV054 form1;
_ => regV form1
} ;
regA : Str -> A -- s;Nom;('GSg', Masc)
= \form -> case form of {
_ + "які" => mkA006 form;
_ + "пы" => mkA002 form;
_ + "гі" => mkA006 form;
_ + "хі" => mkA006 form;
_ + "ні" => mkA005 form;
_ + "ці" => mkA005 form;
_ + "ыі" => mkA005 form;
_ + "ы" => mkA001 form;
_ + "і" => mkA003 form;
_ + "а" => mkA004 form;
_ + "н" => mkA004 form;
_ + "т" => mkA004 form;
_ + "ў" => mkA004 form;
_ + "ь" => mkA004 form;
_ => error "Cannot find an inflection rule"
} ;
reg2A : Str -> Str -> A -- s;Nom;('GSg', Masc) s;Nom;('GSg', Neuter)
= \form1, form2 -> case <form1, form2> of {
<_ + "гі", _ + "ае"> => mkA003 form1;
<_ + "хі", _ + "ае"> => mkA003 form1;
<_ + "ы", _ + "ое"> => mkA002 form1;
<_ + "і", _ + "яе"> => mkA004 form1;
<_ + "і", _ + "ое"> => mkA006 form1;
_ => regA form1
} ;
mkN = overload {
mkN : Str -> N = regN; -- s;Nom;Sg
mkN : Str -> Str -> N = reg2N -- s;Nom;Sg s;Acc;Pl
} ;
mkN2 = overload {
mkN2 : N -> N2 = \n -> n ** {c2 = noPrep} ;
mkN2 : N -> Prep -> N2 = \n,p -> n ** {c2 = p} ;
} ;
mkN3 = overload {
mkN3 : N -> N3 = \n -> n ** {c2 = noPrep; c3 = noPrep} ;
mkN3 : N -> Prep -> Prep -> N3 = \n,p1,p2 -> n ** {c2 = p1; c3 = p2} ;
} ;
mkV = overload {
mkV : Str -> V = regV; -- infinitive
mkV : Str -> Str -> V = reg2V -- infinitive Imperative;Sg
} ;
mkVV,mkVS,mkVQ,mkVA = \v -> v ;
mkV2 = overload {
mkV2 : V -> V2 = \v -> v ** {c2 = noPrep} ;
mkV2 : V -> Prep -> V2 = \v,p -> v ** {c2 = p} ;
} ;
mkV3 = overload {
mkV3 : V -> V3 = \v -> v ** {c2 = noPrep; c3 = noPrep} ;
mkV3 : V -> Prep -> Prep -> V3 = \v,p1,p2 -> v ** {c2 = p1; c3 = p2} ;
} ;
mkV2A = overload {
mkV2A : V -> V2A = \v -> v ** {c2 = noPrep; c3 = noPrep} ;
mkV2A : V -> Prep -> Prep -> V2A = \v,p1,p2 -> v ** {c2 = p1; c3 = p2} ;
} ;
mkV2S = overload {
mkV2S : V -> V2S = \v -> v ** {c2 = noPrep; c3 = noPrep} ;
mkV2S : V -> Prep -> Prep -> V2S = \v,p1,p2 -> v ** {c2 = p1; c3 = p2} ;
} ;
mkV2Q = overload {
mkV2Q : V -> V2Q = \v -> v ** {c2 = noPrep; c3 = noPrep} ;
mkV2Q : V -> Prep -> Prep -> V2Q = \v,p1,p2 -> v ** {c2 = p1; c3 = p2} ;
} ;
mkV2V = overload {
mkV2V : V -> V2V = \v -> v ** {c2 = noPrep; c3 = noPrep} ;
mkV2V : V -> Prep -> Prep -> V2V = \v,p1,p2 -> v ** {c2 = p1; c3 = p2} ;
} ;
mkA = overload {
mkA : Str -> A = regA; -- s;Nom;('GSg', Masc)
mkA : Str -> Str -> A = reg2A -- s;Nom;('GSg', Masc) s;Nom;('GSg', Neuter)
} ;
mkA2 = overload {
mkA2 : A -> A2 = \a -> a ** {c2 = noPrep} ;
mkA2 : A -> Prep -> A2 = \a,p -> a ** {c2 = p} ;
} ;
mkAdv : Str -> Adv = \s -> lin Adv {s=s} ;
mkAdV : Str -> AdV = \s -> lin AdV {s=s} ;
mkAdA : Str -> AdA = \s -> lin AdA {s=s} ;
mkAdN : Str -> AdN = \s -> lin AdN {s=s} ;
mkCAdv : Str -> CAdv = \s -> lin CAdv {s=s; p=""} ;
mkInterj : Str -> Interj = \s -> lin Interj {s=s} ;
mkMU : Str -> MU = \s -> lin MU {s=s; isPre=False} ;
mkPrep : Str -> Prep = \s -> lin Prep {s=s; c=Acc} ;
mkIAdv : Str -> IAdv = \s -> lin IAdv {s=s} ;
mkIP : Str -> IP = \s -> lin IP {s=s} ;
mkIQuant : Str -> IQuant = \s -> lin IQuant {s=s} ;
mkIDet : Str -> IDet = \s -> lin IDet {s=s} ;
mkSubj : Str -> Subj = \s -> lin Subj {s=s} ;
mkQuant : Str -> Quant = \s -> lin Quant {s=s} ;
mkPredet : Str -> Predet = \s -> lin Predet {s=s} ;
mkDet : Str -> Det = \s -> lin Det {s=s} ;
mkCard : Str -> Card = \s -> lin Card {s=s} ;
mkConj : Str -> Conj = \s -> lin Conj {s=s} ;
mkPConj : Str -> PConj = \s -> lin PConj {s=s} ;
mkVoc : Str -> Voc = \s -> lin Voc {s=s} ;
mkLN : Str -> LN = \s -> lin LN {s=s} ;
mkGN : Str -> GN = \s -> lin GN {s=s} ;
mkSN : Str -> SN = \s -> lin SN {s=s} ;
mkPN : Str -> PN = \s -> lin PN {s=s} ;
}

View File

@@ -0,0 +1,11 @@
concrete PhraseBel of Phrase = CatBel ** {
lin
PhrUtt pconj utt voc = {s = pconj.s ++ utt.s ++ voc.s} ;
UttS s = s ;
UttInterj i = i ;
NoPConj = {s = []} ;
NoVoc = {s = []} ;
}

163
src/belarusian/ResBel.gf Normal file
View File

@@ -0,0 +1,163 @@
resource ResBel = {
param Case = Nom | Acc | Dat | Gen | Loc | Instr ;
param Number = Sg | Pl ;
param Gender = Masc | Fem | Neuter ;
oper Noun = {s: Case => Number => Str; voc: Str; g: Gender} ; -- 2696
oper mkNoun : (_,_,_,_,_,_,_,_,_,_,_,_,_ : Str) -> Gender -> Noun =
\f1,f2,f3,f4,f5,f6,f7,f8,f9,f10,f11,f12,f13,g ->
{ s = table {
Nom => table {
Sg => f1 ;
Pl => f2
} ;
Acc => table {
Sg => f3 ;
Pl => f4
} ;
Dat => table {
Sg => f5 ;
Pl => f6
} ;
Gen => table {
Sg => f7 ;
Pl => f8
} ;
Loc => table {
Sg => f9 ;
Pl => f10
} ;
Instr => table {
Sg => f11 ;
Pl => f12
}
} ;
voc = f13 ;
g = g
} ;
param Aspect = Imperf | Perf ;
param Person = P1 | P2 | P3 ;
param Tense = Pres | Past ;
oper V = {active: Aspect => {Past: Str; Pres: Person => Number => Str}; imperative: Number => Str; infinitive: Str; participle: Gender => Number => Str; passive: Aspect => Tense => Str} ; -- 703
oper mkV : (_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_ : Str) -> V =
\f1,f2,f3,f4,f5,f6,f7,f8,f9,f10,f11,f12,f13,f14,f15,f16,f17,f18,f19,f20,f21,f22,f23,f24,f25,f26,f27 ->
{ active = table {
Imperf => { Past = f1 ;
Pres = table {
P1 => table {
Sg => f2 ;
Pl => f3
} ;
P2 => table {
Sg => f4 ;
Pl => f5
} ;
P3 => table {
Sg => f6 ;
Pl => f7
}
}
} ;
Perf => { Past = f8 ;
Pres = table {
P1 => table {
Sg => f9 ;
Pl => f10
} ;
P2 => table {
Sg => f11 ;
Pl => f12
} ;
P3 => table {
Sg => f13 ;
Pl => f14
}
}
}
} ;
imperative = table {
Sg => f15 ;
Pl => f16
} ;
infinitive = f17 ;
participle = table {
Masc => table {
Sg => f18 ;
Pl => f19
} ;
Fem => table {
Sg => f20 ;
Pl => f21
} ;
Neuter => table {
Sg => f22 ;
Pl => f23
}
} ;
passive = table {
Imperf => table {
Pres => f24 ;
Past => f25
} ;
Perf => table {
Pres => f26 ;
Past => f27
}
}
} ;
param GenNum = GSg Gender | GPl ;
oper A = {s: Case => GenNum => Str} ; -- 704
oper mkA : (_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_ : Str) -> A =
\f1,f2,f3,f4,f5,f6,f7,f8,f9,f10,f11,f12,f13,f14,f15,f16,f17,f18,f19,f20,f21,f22,f23,f24 ->
{ s = table {
Nom => table {
GSg Masc => f1 ;
GSg Fem => f2 ;
GSg Neuter => f3 ;
GPl => f4
} ;
Acc => table {
GSg Masc => f5 ;
GSg Fem => f6 ;
GSg Neuter => f7 ;
GPl => f8
} ;
Dat => table {
GSg Masc => f9 ;
GSg Fem => f10 ;
GSg Neuter => f11 ;
GPl => f12
} ;
Gen => table {
GSg Masc => f13 ;
GSg Fem => f14 ;
GSg Neuter => f15 ;
GPl => f16
} ;
Loc => table {
GSg Masc => f17 ;
GSg Fem => f18 ;
GSg Neuter => f19 ;
GPl => f20
} ;
Instr => table {
GSg Masc => f21 ;
GSg Fem => f22 ;
GSg Neuter => f23 ;
GPl => f24
}
}
} ;
oper Compl = {s : Str; c : Case} ;
oper noPrep : Compl = {s=""; c=Acc} ;
oper CommonNoun = Noun ;
oper AdjPhrase = A ;
}

View File

@@ -148,7 +148,7 @@ lin
s1= heading1 ("Прилагателно") ; s1= heading1 ("Прилагателно") ;
s2= frameTable ( s2= frameTable (
tr (intagAttr "th" "rowspan=\"7\"" "ед.ч." ++ tr (intagAttr "th" "rowspan=\"7\"" "ед.ч." ++
intagAttr "th" "rowspan=\"3\"" "мн.ч." ++ intagAttr "th" "rowspan=\"3\"" "м.р." ++
th "нечленувано" ++ th "нечленувано" ++
td (a.s ! (ASg Masc Indef))) ++ td (a.s ! (ASg Masc Indef))) ++
tr (th "непълен член" ++ td (a.s ! (ASg Masc Def))) ++ tr (th "непълен член" ++ td (a.s ! (ASg Masc Def))) ++

View File

@@ -42,14 +42,14 @@ flags
-- To abstract over gender names, we define the following identifiers. -- To abstract over gender names, we define the following identifiers.
oper oper
Gender : Type ; Gender : PType ;
masculine : Gender ; masculine : Gender ;
feminine : Gender ; feminine : Gender ;
-- To abstract over number names, we define the following. -- To abstract over number names, we define the following.
Number : Type ; Number : PType ;
singular : Number ; singular : Number ;
plural : Number ; plural : Number ;

View File

@@ -19,8 +19,14 @@ concrete ExtendDan of Extend = CatDan **
GenRP GenRP
] ]
with (Grammar = GrammarDan) with (Grammar = GrammarDan)
** { ** open Prelude in {
flags coding=utf8 ; flags coding=utf8 ;
lin CompoundN n1 n2 = {
s = \\n,s,c => n1.co ++ BIND ++ n2.s ! n ! s ! c ;
co = n1.co ++ BIND ++ n2.co ;
g = n2.g
} ;
} }

View File

@@ -7,7 +7,7 @@ concrete NumeralDan of Numeral = CatDan [Numeral,Digits,Decimal] ** open MorphoD
lincat lincat
Digit = {s : DForm => CardOrd => Str} ; Digit = {s : DForm => CardOrd => Str} ;
Sub10 = {s : DForm => CardOrd => Str ; n : Number} ; Sub10 = {s : DForm => CardOrd => Str ; n : Number} ;
Sub100, Sub1000, Sub1000000 = Sub100, Sub1000, Sub1000000, Sub1000000000, Sub1000000000000 =
{s : CardOrd => Str ; n : Number} ; {s : CardOrd => Str ; n : Number} ;
lin num x = x ; lin num x = x ;
@@ -45,6 +45,9 @@ lin n9 = mkTal "ni" "nitten" "halvfems" "niende" "halvfemsindstyvende" ;
pot3 n = numPl (\\g => n.s ! invNum ++ cardOrd "tusind" "tusinde" ! g) ; pot3 n = numPl (\\g => n.s ! invNum ++ cardOrd "tusind" "tusinde" ! g) ;
pot3plus n m = {s = \\g => n.s ! invNum ++ "tusind" ++ "og" ++ m.s ! g ; n =Pl} ; pot3plus n m = {s = \\g => n.s ! invNum ++ "tusind" ++ "og" ++ m.s ! g ; n =Pl} ;
pot3as4 n = n ;
pot4as5 n = n ;
lincat lincat
Dig = TDigit ; Dig = TDigit ;

View File

@@ -512,8 +512,8 @@ param
-- IL2018-02: a whole lot of times we only need number and person, not gender -- IL2018-02: a whole lot of times we only need number and person, not gender
-- maybe switch to PersAgr at some point and halve the number of fields -- maybe switch to PersAgr at some point and halve the number of fields
oper PersAgr : Type = {n : Number ; p : Person} ; oper PersAgr : PType = {n : Number ; p : Person} ;
oper Agr : Type = PersAgr ** {g : Gender} ; oper Agr : PType = {n : Number ; p : Person ; g : Gender} ;
oper oper
pagr : Agr -> PersAgr = \agr -> { p = agr.p ; n = agr.n } ; pagr : Agr -> PersAgr = \agr -> { p = agr.p ; n = agr.n } ;

View File

@@ -191,7 +191,7 @@ lin
VVPresPart => pp "verb+ing" VVPresPart => pp "verb+ing"
}) ; }) ;
s2= frameTable ( s2= frameTable (
tr (th "infitive" ++ td (v.s ! VVF VInf)) ++ tr (th "infinitive" ++ td (v.s ! VVF VInf)) ++
tr (th "present" ++ td (v.s ! VVF VPres ++ "&#160;" ++ v.s ! VVPresNeg)) ++ tr (th "present" ++ td (v.s ! VVF VPres ++ "&#160;" ++ v.s ! VVPresNeg)) ++
tr (th "past" ++ td (v.s ! VVF VPast ++ "&#160;" ++ v.s ! VVPastNeg)) ++ --# notpresent tr (th "past" ++ td (v.s ! VVF VPast ++ "&#160;" ++ v.s ! VVPastNeg)) ++ --# notpresent
tr (th "past part." ++ td (v.s ! VVF VPPart)) ++ tr (th "past part." ++ td (v.s ! VVF VPPart)) ++
@@ -229,7 +229,7 @@ lin
oper oper
inflVerb : Verb -> Str = \verb -> inflVerb : Verb -> Str = \verb ->
frameTable ( frameTable (
tr (th "infitive" ++ td (verb.s ! VInf)) ++ tr (th "infinitive" ++ td (verb.s ! VInf)) ++
tr (th "present" ++ td (verb.s ! VPres)) ++ tr (th "present" ++ td (verb.s ! VPres)) ++
tr (th "past" ++ td (verb.s ! VPast)) ++ --# notpresent tr (th "past" ++ td (verb.s ! VPast)) ++ --# notpresent
tr (th "past part." ++ td (verb.s ! VPPart)) ++ tr (th "past part." ++ td (verb.s ! VPPart)) ++

View File

@@ -0,0 +1,4 @@
concrete AdjectiveFao of Adjective = CatFao ** {
lin
PositA a = a ;
}

4
src/faroese/AllFao.gf Normal file
View File

@@ -0,0 +1,4 @@
concrete AllFao of AllFaoAbs =
LangFao
**
{} ;

3
src/faroese/AllFaoAbs.gf Normal file
View File

@@ -0,0 +1,3 @@
abstract AllFaoAbs =
Lang
** {}

19
src/faroese/CatFao.gf Normal file
View File

@@ -0,0 +1,19 @@
concrete CatFao of Cat = CommonX ** open ResFao in {
lincat N = Noun ;
lincat N2 = Noun ** {c2 : Compl} ;
lincat N3 = Noun ** {c2,c3 : Compl} ;
lincat A = Adj ;
lincat A2 = Adj ** {c2 : Compl} ;
lincat V = Verb ;
lincat VV,VS,VQ,VA = Verb ;
lincat V2 = Verb ** {c2 : Compl} ;
lincat V3,V2A,V2S,V2Q,V2V = Verb ** {c2,c3 : Compl} ;
lincat Prep = Compl ;
lincat CN = CommonNoun ;
lincat AP = AdjPhrase ;
lincat S = {s : Str} ;
lincat LN,SN,GN,PN = {s : Str} ;
}

View File

@@ -0,0 +1,87 @@
concrete DocumentationFao of Documentation = CatFao ** open
ResFao, Prelude, HTML in {
lincat
Inflection = {t : Str; s1,s2,s3 : Str} ;
Definition = {s : Str} ;
Document = {s : Str} ;
Tag = {s : Str} ;
lin
InflectionN,InflectionN2,InflectionN3 = \x -> {
t="n" ;
s1="" ;
s2=frameTable (
tr (intagAttr "th" "colspan=\"2\"" "" ++ th "Indef" ++ th "Def") ++
tr (intagAttr "th" "rowspan=\"4\"" "Sg" ++
th "Nom" ++ td (x.s ! Indef ! Sg ! Nom) ++ td (x.s ! Def ! Sg ! Nom)) ++
tr (th "Acc" ++ td (x.s ! Indef ! Sg ! Acc) ++ td (x.s ! Def ! Sg ! Acc)) ++
tr (th "Dat" ++ td (x.s ! Indef ! Sg ! Dat) ++ td (x.s ! Def ! Sg ! Dat)) ++
tr (th "Gen" ++ td (x.s ! Indef ! Sg ! Gen) ++ td (x.s ! Def ! Sg ! Gen)) ++
tr (intagAttr "th" "rowspan=\"4\"" "Pl" ++
th "Nom" ++ td (x.s ! Indef ! Pl ! Nom) ++ td (x.s ! Def ! Pl ! Nom)) ++
tr (th "Acc" ++ td (x.s ! Indef ! Pl ! Acc) ++ td (x.s ! Def ! Pl ! Acc)) ++
tr (th "Dat" ++ td (x.s ! Indef ! Pl ! Dat) ++ td (x.s ! Def ! Pl ! Dat)) ++
tr (th "Gen" ++ td (x.s ! Indef ! Pl ! Gen) ++ td (x.s ! Def ! Pl ! Gen))) ;
s3=[]
} ;
lin
InflectionA,InflectionA2 = \x -> {
t="a" ;
s1="" ;
s2=frameTable (
tr (intagAttr "th" "colspan=\"2\"" "" ++ th "Masc" ++ th "Fem" ++ th "Neutr") ++
tr (intagAttr "th" "rowspan=\"4\"" "Sg" ++
th "Nom" ++ td (x.s ! Masc ! Sg ! Nom) ++ td (x.s ! Fem ! Sg ! Nom) ++ td (x.s ! Neutr ! Sg ! Nom)) ++
tr (th "Acc" ++ td (x.s ! Masc ! Sg ! Acc) ++ td (x.s ! Fem ! Sg ! Acc) ++ td (x.s ! Neutr ! Sg ! Acc)) ++
tr (th "Dat" ++ td (x.s ! Masc ! Sg ! Dat) ++ td (x.s ! Fem ! Sg ! Dat) ++ td (x.s ! Neutr ! Sg ! Dat)) ++
tr (th "Gen" ++ td (x.s ! Masc ! Sg ! Gen) ++ td (x.s ! Fem ! Sg ! Gen) ++ td (x.s ! Neutr ! Sg ! Gen)) ++
tr (intagAttr "th" "rowspan=\"4\"" "Pl" ++
th "Nom" ++ td (x.s ! Masc ! Pl ! Nom) ++ td (x.s ! Fem ! Pl ! Nom) ++ td (x.s ! Neutr ! Pl ! Nom)) ++
tr (th "Acc" ++ td (x.s ! Masc ! Pl ! Acc) ++ td (x.s ! Fem ! Pl ! Acc) ++ td (x.s ! Neutr ! Pl ! Acc)) ++
tr (th "Dat" ++ td (x.s ! Masc ! Pl ! Dat) ++ td (x.s ! Fem ! Pl ! Dat) ++ td (x.s ! Neutr ! Pl ! Dat)) ++
tr (th "Gen" ++ td (x.s ! Masc ! Pl ! Gen) ++ td (x.s ! Fem ! Pl ! Gen) ++ td (x.s ! Neutr ! Pl ! Gen))) ;
s3=[]
} ;
lin
InflectionV,InflectionV2,InflectionV2A,InflectionV2Q,InflectionV2S,InflectionV2V,InflectionV3,InflectionVA,InflectionVQ,InflectionVS,InflectionVV = \x -> {
t="v" ;
s1="" ;
s2=heading2 "Converb" ++
paragraph x.Converb ++
heading2 "Imperative" ++
frameTable (
tr (th "Sg" ++ td (x.Imperative_Jussive ! Sg)) ++
tr (th "Pl" ++ td (x.Imperative_Jussive ! Pl))) ++
heading2 "Indicative" ++
frameTable (
tr (intagAttr "th" "rowspan=\"4\"" "Pres" ++ th "Sg P1" ++ td (x.Indicative ! Pres ! PSg P1)) ++
tr (th "Sg P2" ++ td (x.Indicative ! Pres ! PSg P2)) ++
tr (th "Sg P3" ++ td (x.Indicative ! Pres ! PSg P3)) ++
tr (th "Pl" ++ td (x.Indicative ! Pres ! PPl)) ++
tr (intagAttr "th" "rowspan=\"4\"" "Past" ++ th "Sg P1" ++ td (x.Indicative ! Past ! PSg P1)) ++
tr (th "Sg P2" ++ td (x.Indicative ! Past ! PSg P2)) ++
tr (th "Sg P3" ++ td (x.Indicative ! Past ! PSg P3)) ++
tr (th "Pl" ++ td (x.Indicative ! Past ! PPl))) ++
heading2 "Nonfinite" ++
paragraph x.Nonfinite ++
heading2 "Participle" ++
frameTable (
tr (th "Pres" ++ td (x.Participle ! Pres)) ++
tr (th "Past" ++ td (x.Participle ! Past))) ;
s3=[]
} ;
lin
InflectionAdA,InflectionAdN,InflectionAdV,InflectionAdv = \x -> {t="adv"; s1=""; s2=x.s; s3=""} ;
InflectionPrep = \x -> {t="prep"; s1=""; s2=x.s; s3=""} ;
lin
NoDefinition t = {s=t.s};
MkDefinition t d = {s="<p><b>Definition:</b>"++t.s++d.s++"</p>"};
MkDefinitionEx t d e = {s="<p><b>Definition:</b>"++t.s++d.s++"</p><p><b>Example:</b>"++e.s++"</p>"};
lin
MkDocument d i e = {s = i.s1 ++ d.s ++ i.s2 ++ i.s3 ++ e.s} ;
MkTag i = {s = i.t} ;
}

View File

@@ -0,0 +1,6 @@
concrete GrammarFao of Grammar =
TenseX,
PhraseFao,
NounFao,
AdjectiveFao ** {
}

10
src/faroese/LangFao.gf Normal file
View File

@@ -0,0 +1,10 @@
--# -path=.:../abstract
concrete LangFao of Lang =
GrammarFao,
LexiconFao
,DocumentationFao --# notpresent
** {
flags startcat = Phr ;
}

View File

@@ -0,0 +1,2 @@
concrete LexiconFao of Lexicon = CatFao ** open ParadigmsFao in {
}

12180
src/faroese/MorphoFao.gf Normal file

File diff suppressed because it is too large Load Diff

4
src/faroese/NounFao.gf Normal file
View File

@@ -0,0 +1,4 @@
concrete NounFao of Noun = CatFao ** {
lin
UseN n = n ;
}

570
src/faroese/ParadigmsFao.gf Normal file
View File

@@ -0,0 +1,570 @@
resource ParadigmsFao = MorphoFao ** open Predef, Prelude, CatFao, ResFao in {
oper
regN : Str -> N -- s;Indef;Sg;Nom
= \form -> case form of {
_ + "aður" => mkN032 form;
_ + "eki" => mkN025 form;
_ + "ski" => mkN014 form;
_ + "ýki" => mkN002 form;
_ + "rki" => mkN014 form;
_ + "lki" => mkN014 form;
_ + "øki" => mkN014 form;
_ + "øri" => mkN002 form;
_ + "vri" => mkN021 form;
_ + "lri" => mkN031 form;
_ + "yri" => mkN079 form;
_ + "ldi" => mkN031 form;
_ + "dni" => mkN002 form;
_ + "gni" => mkN002 form;
_ + "vni" => mkN021 form;
_ + "avi" => mkN021 form;
_ + "rvi" => mkN031 form;
_ + "yvi" => mkN031 form;
_ + "ugi" => mkN021 form;
_ + "ggi" => mkN040 form;
_ + "rgi" => mkN014 form;
_ + "øpi" => mkN002 form;
_ + "ýpi" => mkN031 form;
_ + "ppi" => mkN031 form;
_ + "mli" => mkN021 form;
_ + "pli" => mkN031 form;
_ + "æli" => mkN031 form;
_ + "iði" => mkN031 form;
_ + "æði" => mkN031 form;
_ + "ýði" => mkN031 form;
_ + "eði" => mkN104 form;
_ + "ysi" => mkN002 form;
_ + "lsi" => mkN031 form;
_ + "esi" => mkN031 form;
_ + "æmi" => mkN002 form;
_ + "ami" => mkN021 form;
_ + "ømi" => mkN031 form;
_ + "rmi" => mkN079 form;
_ + "sur" => mkN003 form;
_ + "øur" => mkN009 form;
_ + "ýur" => mkN009 form;
_ + "par" => mkN008 form;
_ + "gar" => mkN015 form;
_ + "tar" => mkN019 form;
_ + "mar" => mkN159 form;
_ + "fer" => mkN008 form;
_ + "ter" => mkN019 form;
_ + "tør" => mkN015 form;
_ + "dir" => mkN133 form;
_ + "ørr" => mkN139 form;
_ + "arn" => mkN004 form;
_ + "ørn" => mkN018 form;
_ + "agn" => mkN008 form;
_ + "ogn" => mkN007 form;
_ + "egn" => mkN008 form;
_ + "pan" => mkN007 form;
_ + "ran" => mkN008 form;
_ + "ian" => mkN008 form;
_ + "ton" => mkN008 form;
_ + "lon" => mkN019 form;
_ + "ein" => mkN019 form;
_ + "min" => mkN045 form;
_ + "vín" => mkN019 form;
_ + "ekn" => mkN019 form;
_ + "gun" => mkN024 form;
_ + "ødn" => mkN018 form;
_ + "jún" => mkN115 form;
_ + "lak" => mkN008 form;
_ + "bak" => mkN049 form;
_ + "ark" => mkN004 form;
_ + "ørk" => mkN018 form;
_ + "tsk" => mkN007 form;
_ + "pik" => mkN008 form;
_ + "eik" => mkN015 form;
_ + "økk" => mkN018 form;
_ + "ekk" => mkN068 form;
_ + "ikk" => mkN068 form;
_ + "úkk" => mkN163 form;
_ + "røk" => mkN121 form;
_ + "øgg" => mkN007 form;
_ + "agg" => mkN091 form;
_ + "org" => mkN015 form;
_ + "log" => mkN049 form;
_ + "ald" => mkN004 form;
_ + "old" => mkN007 form;
_ + "rgd" => mkN007 form;
_ + "und" => mkN019 form;
_ + "and" => mkN096 form;
_ + "ond" => mkN117 form;
_ + "ødd" => mkN088 form;
_ + "arð" => mkN004 form;
_ + "urð" => mkN006 form;
_ + "ørð" => mkN018 form;
_ + "lið" => mkN027 form;
_ + "nið" => mkN027 form;
_ + "ráð" => mkN027 form;
_ + "jal" => mkN004 form;
_ + "gal" => mkN038 form;
_ + "eil" => mkN006 form;
_ + "fil" => mkN099 form;
_ + "sól" => mkN007 form;
_ + "egl" => mkN015 form;
_ + "øll" => mkN078 form;
_ + "ell" => mkN078 form;
_ + "lat" => mkN004 form;
_ + "ikt" => mkN007 form;
_ + "átt" => mkN137 form;
_ + "itt" => mkN087 form;
_ + "ýtt" => mkN087 form;
_ + "att" => mkN087 form;
_ + "uft" => mkN007 form;
_ + "bót" => mkN007 form;
_ + "ist" => mkN008 form;
_ + "øst" => mkN008 form;
_ + "jøt" => mkN008 form;
_ + "eit" => mkN015 form;
_ + "rát" => mkN008 form;
_ + "pet" => mkN015 form;
_ + "álp" => mkN007 form;
_ + "upp" => mkN015 form;
_ + "alv" => mkN004 form;
_ + "eyv" => mkN006 form;
_ + "úgv" => mkN132 form;
_ + "yga" => mkN044 form;
_ + "oka" => mkN012 form;
_ + "ina" => mkN012 form;
_ + "mla" => mkN012 form;
_ + "vja" => mkN012 form;
_ + "tsj" => mkN015 form;
_ + "tos" => mkN026 form;
_ + "jús" => mkN026 form;
_ + "lús" => mkN047 form;
_ + "mús" => mkN047 form;
_ + "bus" => mkN026 form;
_ + "ins" => mkN026 form;
_ + "fræ" => mkN027 form;
_ + "omb" => mkN117 form;
_ + "ði" => mkN025 form;
_ + "fi" => mkN002 form;
_ + "ai" => mkN015 form;
_ + "ar" => mkN004 form;
_ + "ðr" => mkN006 form;
_ + "er" => mkN046 form;
_ + "úr" => mkN007 form;
_ + "or" => mkN008 form;
_ + "yr" => mkN008 form;
_ + "ør" => mkN008 form;
_ + "ár" => mkN019 form;
_ + "ór" => mkN019 form;
_ + "ýr" => mkN019 form;
_ + "ir" => mkN053 form;
_ + "ír" => mkN019 form;
_ + "ær" => mkN034 form;
_ + "æv" => mkN034 form;
_ + "rr" => mkN080 form;
_ + "rn" => mkN008 form;
_ + "vn" => mkN004 form;
_ + "gn" => mkN018 form;
_ + "tn" => mkN004 form;
_ + "in" => mkN008 form;
_ + "ín" => mkN008 form;
_ + "yn" => mkN008 form;
_ + "nn" => mkN051 form;
_ + "ún" => mkN019 form;
_ + "ýn" => mkN019 form;
_ + "sn" => mkN019 form;
_ + "án" => mkN019 form;
_ + "pn" => mkN019 form;
_ + "ak" => mkN004 form;
_ + "ík" => mkN006 form;
_ + "sk" => mkN008 form;
_ + "ðk" => mkN008 form;
_ + "kk" => mkN015 form;
_ + "øk" => mkN018 form;
_ + "ók" => mkN061 form;
_ + "ag" => mkN004 form;
_ + "gg" => mkN063 form;
_ + "óg" => mkN015 form;
_ + "rg" => mkN019 form;
_ + "ig" => mkN019 form;
_ + "og" => mkN027 form;
_ + "ld" => mkN019 form;
_ + "dd" => mkN076 form;
_ + "vd" => mkN118 form;
_ + "að" => mkN004 form;
_ + "rð" => mkN019 form;
_ + "oð" => mkN027 form;
_ + "al" => mkN008 form;
_ + "il" => mkN045 form;
_ + "ll" => mkN085 form;
_ + "ul" => mkN024 form;
_ + "yl" => mkN046 form;
_ + "øl" => mkN075 form;
_ + "el" => mkN092 form;
_ + "at" => mkN015 form;
_ + "kt" => mkN015 form;
_ + "tt" => mkN015 form;
_ + "ft" => mkN112 form;
_ + "ót" => mkN061 form;
_ + "lt" => mkN008 form;
_ + "nt" => mkN008 form;
_ + "øt" => mkN015 form;
_ + "mt" => mkN008 form;
_ + "yt" => mkN015 form;
_ + "vt" => mkN015 form;
_ + "ít" => mkN015 form;
_ + "rp" => mkN004 form;
_ + "lp" => mkN015 form;
_ + "pp" => mkN108 form;
_ + "rv" => mkN004 form;
_ + "lv" => mkN008 form;
_ + "yv" => mkN008 form;
_ + "av" => mkN008 form;
_ + "øv" => mkN018 form;
_ + "ív" => mkN019 form;
_ + "gv" => mkN041 form;
_ + "ev" => mkN046 form;
_ + "lf" => mkN008 form;
_ + "ím" => mkN008 form;
_ + "am" => mkN008 form;
_ + "mm" => mkN054 form;
_ + "po" => mkN008 form;
_ + "no" => mkN015 form;
_ + "sj" => mkN026 form;
_ + "ós" => mkN015 form;
_ + "ks" => mkN015 form;
_ + "as" => mkN103 form;
_ + "ás" => mkN100 form;
_ + "es" => mkN092 form;
_ + "øs" => mkN139 form;
_ + "i" => mkN001 form;
_ + "r" => mkN010 form;
_ + "n" => mkN015 form;
_ + "k" => mkN019 form;
_ + "g" => mkN006 form;
_ + "d" => mkN015 form;
_ + "ð" => mkN015 form;
_ + "l" => mkN019 form;
_ + "t" => mkN019 form;
_ + "p" => mkN019 form;
_ + "a" => mkN005 form;
_ + "y" => mkN008 form;
_ + "ó" => mkN007 form;
_ + "ý" => mkN008 form;
_ + "ø" => mkN008 form;
_ + "f" => mkN077 form;
_ + "m" => mkN019 form;
_ + "o" => mkN019 form;
_ + "j" => mkN105 form;
_ + "s" => mkN028 form;
_ + "á" => mkN015 form;
_ + "í" => mkN019 form;
_ + "u" => mkN019 form;
_ + "e" => mkN027 form;
_ + "æ" => mkN022 form;
_ + "b" => mkN096 form;
_ => error "Cannot find an inflection rule"
} ;
reg2N : Str -> Str -> N -- s;Indef;Sg;Nom s;Indef;Pl;Dat
= \form1, form2 -> case <form1, form2> of {
<_ + "ski", _ + "kum"> => mkN001 form1;
<_ + "ugi", _ + "gum"> => mkN001 form1;
<_ + "ggi", _ + "gum"> => mkN001 form1;
<_ + "sur", _ + "num"> => mkN058 form1;
<_ + "ald", _ + "num"> => mkN008 form1;
<_ + "eyv", _ + "num"> => mkN008 form1;
<_ + "ist", _ + "tum"> => mkN015 form1;
<_ + "ður", _ + "ðum"> => mkN009 form1;
<_ + "ður", _ + "rum"> => mkN127 form1;
<_ + "rki", _ + "num"> => mkN021 form1;
<_ + "agg", _ + "num"> => mkN063 form1;
<_ + "ekk", _ + "num"> => mkN163 form1;
<_ + "eki", _ + "m"> => mkN001 form1;
<_ + "agn", _ + "m"> => mkN004 form1;
<_ + "pan", _ + "m"> => mkN015 form1;
<_ + "álp", _ + "m"> => mkN015 form1;
<_ + "ogn", _ + "m"> => mkN015 form1;
<_ + "sól", _ + "m"> => mkN015 form1;
<_ + "átt", _ + "i"> => mkN007 form1;
<_ + "ist", _ + "i"> => mkN007 form1;
<_ + "rki", _ + "i"> => mkN025 form1;
<_ + "øll", _ + "m"> => mkN018 form1;
<_ + "lið", _ + "m"> => mkN019 form1;
<_ + "iði", _ + "i"> => mkN025 form1;
<_ + "ði", _ + "num"> => mkN021 form1;
<_ + "ar", _ + "num"> => mkN008 form1;
<_ + "al", _ + "lum"> => mkN004 form1;
<_ + "lt", _ + "tum"> => mkN019 form1;
<_ + "sk", _ + "kum"> => mkN015 form1;
<_ + "ót", _ + "num"> => mkN008 form1;
<_ + "il", _ + "jum"> => mkN092 form1;
<_ + "ir", _ + "rum"> => mkN019 form1;
<_ + "gv", _ + "vum"> => mkN148 form1;
<_ + "gv", _ + "um"> => mkN102 form1;
<_ + "ði", _ + "m"> => mkN001 form1;
<_ + "rð", _ + "i"> => mkN007 form1;
<_ + "tt", _ + "i"> => mkN007 form1;
<_ + "ft", _ + "i"> => mkN007 form1;
<_ + "ld", _ + "i"> => mkN075 form1;
<_ + "a", _ + "aum"> => mkN019 form1;
<_ + "y", _ + "yum"> => mkN006 form1;
<_ + "ð", _ + "num"> => mkN049 form1;
<_ + "t", _ + "num"> => mkN008 form1;
<_ + "r", _ + "rum"> => mkN042 form1;
<_ + "r", _ + "jum"> => mkN150 form1;
<_ + "æ", _ + "æum"> => mkN027 form1;
<_ + "s", _ + "num"> => mkN026 form1;
<_ + "i", _ + "i"> => mkN025 form1;
<_ + "a", _ + "i"> => mkN012 form1;
<_ + "g", _ + "i"> => mkN007 form1;
<_ + "d", _ + "i"> => mkN007 form1;
<_ + "ð", _ + "i"> => mkN007 form1;
<_ + "k", _ + "i"> => mkN007 form1;
_ => regN form1
} ;
regA : Str -> A -- s;Masc;Sg;Nom
= \form -> case form of {
_ + "dur" => mkA001 form;
_ + "tur" => mkA003 form;
_ + "ður" => mkA010 form;
_ + "pur" => mkA004 form;
_ + "sur" => mkA008 form;
_ + "mur" => mkA016 form;
_ + "áur" => mkA017 form;
_ + "íur" => mkA017 form;
_ + "óur" => mkA017 form;
_ + "jur" => mkA033 form;
_ + "il" => mkA035 form;
_ + "in" => mkA009 form;
_ + "ur" => mkA007 form;
_ => error "Cannot find an inflection rule"
} ;
reg2A : Str -> Str -> A -- s;Masc;Sg;Nom s;Masc;Sg;Dat
= \form1, form2 -> case <form1, form2> of {
_ => regA form1
} ;
regV : Str -> V -- Nonfinite
= \form -> case form of {
_ + "erja" => mkV011 form;
_ + "ala" => mkV046 form;
_ + "øla" => mkV009 form;
_ + "gla" => mkV009 form;
_ + "æla" => mkV009 form;
_ + "íla" => mkV020 form;
_ + "ula" => mkV088 form;
_ + "lda" => mkV056 form;
_ + "úka" => mkV044 form;
_ + "aka" => mkV054 form;
_ + "eka" => mkV028 form;
_ + "mba" => mkV009 form;
_ + "íða" => mkV014 form;
_ + "rða" => mkV108 form;
_ + "nna" => mkV039 form;
_ + "vna" => mkV009 form;
_ + "ina" => mkV009 form;
_ + "ína" => mkV014 form;
_ + "yna" => mkV009 form;
_ + "æna" => mkV020 form;
_ + "ýna" => mkV009 form;
_ + "øna" => mkV020 form;
_ + "una" => mkV021 form;
_ + "iga" => mkV086 form;
_ + "ega" => mkV075 form;
_ + "íga" => mkV014 form;
_ + "uga" => mkV029 form;
_ + "nga" => mkV047 form;
_ + "ðja" => mkV012 form;
_ + "kja" => mkV077 form;
_ + "lja" => mkV042 form;
_ + "mja" => mkV042 form;
_ + "lsa" => mkV020 form;
_ + "æsa" => mkV020 form;
_ + "ysa" => mkV020 form;
_ + "ýsa" => mkV020 form;
_ + "ósa" => mkV050 form;
_ + "esa" => mkV071 form;
_ + "sta" => mkV037 form;
_ + "tta" => mkV037 form;
_ + "áta" => mkV053 form;
_ + "íta" => mkV014 form;
_ + "óta" => mkV019 form;
_ + "yta" => mkV020 form;
_ + "ýta" => mkV020 form;
_ + "eta" => mkV023 form;
_ + "øta" => mkV020 form;
_ + "fta" => mkV037 form;
_ + "øra" => mkV009 form;
_ + "ýra" => mkV009 form;
_ + "yra" => mkV009 form;
_ + "æra" => mkV009 form;
_ + "íra" => mkV009 form;
_ + "gva" => mkV040 form;
_ + "ava" => mkV058 form;
_ + "ova" => mkV099 form;
_ + "eva" => mkV028 form;
_ + "íva" => mkV014 form;
_ + "yva" => mkV009 form;
_ + "øva" => mkV009 form;
_ + "rpa" => mkV018 form;
_ + "ópa" => mkV021 form;
_ + "epa" => mkV028 form;
_ + "úpa" => mkV044 form;
_ + "ema" => mkV018 form;
_ + "oma" => mkV062 form;
_ + "ða" => mkV006 form;
_ + "pa" => mkV020 form;
_ + "ma" => mkV009 form;
_ + "áa" => mkV034 form;
_ + "fa" => mkV106 form;
_ + "øa" => mkV043 form;
_ + "a" => mkV001 form;
_ + "t" => mkV005 form;
_ => error "Cannot find an inflection rule"
} ;
reg2V : Str -> Str -> V -- Nonfinite Indicative;Pres;('PSg', P2)
= \form1, form2 -> case <form1, form2> of {
<_ + "gva", _ + "ørt"> => mkV055 form1;
<_ + "era", _ + "ert"> => mkV008 form1;
<_ + "ala", _ + "ar"> => mkV001 form1;
<_ + "ala", _ + "ir"> => mkV009 form1;
<_ + "úka", _ + "ar"> => mkV001 form1;
<_ + "aka", _ + "ar"> => mkV001 form1;
<_ + "nna", _ + "ar"> => mkV001 form1;
<_ + "íða", _ + "ar"> => mkV001 form1;
<_ + "íða", _ + "ir"> => mkV006 form1;
<_ + "rja", _ + "ar"> => mkV001 form1;
<_ + "sta", _ + "ar"> => mkV001 form1;
<_ + "sta", _ + "ur"> => mkV018 form1;
<_ + "gva", _ + "ar"> => mkV001 form1;
<_ + "rða", _ + "ar"> => mkV001 form1;
<_ + "tta", _ + "ar"> => mkV001 form1;
<_ + "tta", _ + "ur"> => mkV024 form1;
<_ + "ava", _ + "ar"> => mkV001 form1;
<_ + "iga", _ + "ar"> => mkV001 form1;
<_ + "iga", _ + "ir"> => mkV007 form1;
<_ + "ova", _ + "ar"> => mkV001 form1;
<_ + "lda", _ + "ar"> => mkV001 form1;
<_ + "lda", _ + "ir"> => mkV010 form1;
<_ + "áta", _ + "ar"> => mkV001 form1;
<_ + "vna", _ + "ar"> => mkV001 form1;
<_ + "eka", _ + "ar"> => mkV001 form1;
<_ + "mba", _ + "ar"> => mkV001 form1;
<_ + "eva", _ + "ar"> => mkV001 form1;
<_ + "ita", _ + "ir"> => mkV020 form1;
<_ + "ína", _ + "ir"> => mkV009 form1;
<_ + "íva", _ + "ir"> => mkV009 form1;
<_ + "yta", _ + "ur"> => mkV041 form1;
<_ + "ysa", _ + "ur"> => mkV041 form1;
<_ + "eta", _ + "ir"> => mkV020 form1;
<_ + "kja", _ + "ur"> => mkV100 form1;
<_ + "nna", _ + "t"> => mkV076 form1;
<_ + "rja", _ + "t"> => mkV093 form1;
<_ + "gva", _ + "t"> => mkV022 form1;
<_ + "ega", _ + "r"> => mkV001 form1;
<_ + "ita", _ + "t"> => mkV109 form1;
<_ + "lja", _ + "t"> => mkV112 form1;
<_ + "ða", _ + "ar"> => mkV001 form1;
<_ + "ða", _ + "ur"> => mkV066 form1;
<_ + "pa", _ + "ar"> => mkV001 form1;
<_ + "ma", _ + "ar"> => mkV001 form1;
<_ + "fa", _ + "ar"> => mkV001 form1;
<_ + "áa", _ + "r"> => mkV001 form1;
<_ + "a", _ + "ært"> => mkV084 form1;
<_ + "a", _ + "t"> => mkV025 form1;
_ => regV form1
} ;
mkN = overload {
mkN : Str -> N = regN; -- s;Indef;Sg;Nom
mkN : Str -> Str -> N = reg2N -- s;Indef;Sg;Nom s;Indef;Pl;Dat
} ;
mkN2 = overload {
mkN2 : N -> N2 = \n -> n ** {c2 = noPrep} ;
mkN2 : N -> Prep -> N2 = \n,p -> n ** {c2 = p} ;
} ;
mkN3 = overload {
mkN3 : N -> N3 = \n -> n ** {c2 = noPrep; c3 = noPrep} ;
mkN3 : N -> Prep -> Prep -> N3 = \n,p1,p2 -> n ** {c2 = p1; c3 = p2} ;
} ;
mkA = overload {
mkA : Str -> A = regA; -- s;Masc;Sg;Nom
mkA : Str -> Str -> A = reg2A -- s;Masc;Sg;Nom s;Masc;Sg;Dat
} ;
mkA2 = overload {
mkA2 : A -> A2 = \a -> a ** {c2 = noPrep} ;
mkA2 : A -> Prep -> A2 = \a,p -> a ** {c2 = p} ;
} ;
mkV = overload {
mkV : Str -> V = regV; -- Nonfinite
mkV : Str -> Str -> V = reg2V -- Nonfinite Indicative;Pres;('PSg', P2)
} ;
mkVV : V -> VV = \v -> v ;
mkVS : V -> VS = \v -> v ;
mkVQ : V -> VQ = \v -> v ;
mkVA : V -> VA = \v -> v ;
mkV2 = overload {
mkV2 : V -> V2 = \v -> v ** {c2 = noPrep} ;
mkV2 : V -> Prep -> V2 = \v,p -> v ** {c2 = p} ;
} ;
mkV3 = overload {
mkV3 : V -> V3 = \v -> v ** {c2 = noPrep; c3 = noPrep} ;
mkV3 : V -> Prep -> Prep -> V3 = \v,p1,p2 -> v ** {c2 = p1; c3 = p2} ;
} ;
mkV2A = overload {
mkV2A : V -> V2A = \v -> v ** {c2 = noPrep; c3 = noPrep} ;
mkV2A : V -> Prep -> Prep -> V2A = \v,p1,p2 -> v ** {c2 = p1; c3 = p2} ;
} ;
mkV2S = overload {
mkV2S : V -> V2S = \v -> v ** {c2 = noPrep; c3 = noPrep} ;
mkV2S : V -> Prep -> Prep -> V2S = \v,p1,p2 -> v ** {c2 = p1; c3 = p2} ;
} ;
mkV2Q = overload {
mkV2Q : V -> V2Q = \v -> v ** {c2 = noPrep; c3 = noPrep} ;
mkV2Q : V -> Prep -> Prep -> V2Q = \v,p1,p2 -> v ** {c2 = p1; c3 = p2} ;
} ;
mkV2V = overload {
mkV2V : V -> V2V = \v -> v ** {c2 = noPrep; c3 = noPrep} ;
mkV2V : V -> Prep -> Prep -> V2V = \v,p1,p2 -> v ** {c2 = p1; c3 = p2} ;
} ;
mkAdv : Str -> Adv = \s -> lin Adv {s=s} ;
mkAdV : Str -> AdV = \s -> lin AdV {s=s} ;
mkAdA : Str -> AdA = \s -> lin AdA {s=s} ;
mkAdN : Str -> AdN = \s -> lin AdN {s=s} ;
mkCAdv : Str -> CAdv = \s -> lin CAdv {s=s; p=""} ;
mkInterj : Str -> Interj = \s -> lin Interj {s=s} ;
mkMU : Str -> MU = \s -> lin MU {s=s; isPre=False} ;
mkPrep : Str -> Prep = \s -> lin Prep {s=s; c=Acc} ;
mkIAdv : Str -> IAdv = \s -> lin IAdv {s=s} ;
mkIP : Str -> IP = \s -> lin IP {s=s} ;
mkIQuant : Str -> IQuant = \s -> lin IQuant {s=s} ;
mkIDet : Str -> IDet = \s -> lin IDet {s=s} ;
mkSubj : Str -> Subj = \s -> lin Subj {s=s} ;
mkQuant : Str -> Quant = \s -> lin Quant {s=s} ;
mkPredet : Str -> Predet = \s -> lin Predet {s=s} ;
mkDet : Str -> Det = \s -> lin Det {s=s} ;
mkCard : Str -> Card = \s -> lin Card {s=s} ;
mkConj : Str -> Conj = \s -> lin Conj {s=s} ;
mkPConj : Str -> PConj = \s -> lin PConj {s=s} ;
mkVoc : Str -> Voc = \s -> lin Voc {s=s} ;
mkLN : Str -> LN = \s -> lin LN {s=s} ;
mkGN : Str -> GN = \s -> lin GN {s=s} ;
mkSN : Str -> SN = \s -> lin SN {s=s} ;
mkPN : Str -> PN = \s -> lin PN {s=s} ;
}

11
src/faroese/PhraseFao.gf Normal file
View File

@@ -0,0 +1,11 @@
concrete PhraseFao of Phrase = CatFao ** {
lin
PhrUtt pconj utt voc = {s = pconj.s ++ utt.s ++ voc.s} ;
UttS s = s ;
UttInterj i = i ;
NoPConj = {s = []} ;
NoVoc = {s = []} ;
}

131
src/faroese/ResFao.gf Normal file
View File

@@ -0,0 +1,131 @@
resource ResFao = {
param Species = Indef | Def ;
param Number = Sg | Pl ;
param Case = Nom | Acc | Dat | Gen ;
param Gender = Neutr | Fem | Masc ;
oper Noun = {s: Species => Number => Case => Str} ; -- 2135
oper mkNoun : (_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_ : Str) -> Noun =
\f1,f2,f3,f4,f5,f6,f7,f8,f9,f10,f11,f12,f13,f14,f15,f16 ->
{ s = table {
Indef => table {
Sg => table {
Nom => f1 ;
Acc => f2 ;
Dat => f3 ;
Gen => f4
} ;
Pl => table {
Nom => f5 ;
Acc => f6 ;
Dat => f7 ;
Gen => f8
}
} ;
Def => table {
Sg => table {
Nom => f9 ;
Acc => f10 ;
Dat => f11 ;
Gen => f12
} ;
Pl => table {
Nom => f13 ;
Acc => f14 ;
Dat => f15 ;
Gen => f16
}
}
}
} ;
oper Adj = {s: Gender => Number => Case => Str} ; -- 346
oper mkAdj : (_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_ : Str) -> Adj =
\f1,f2,f3,f4,f5,f6,f7,f8,f9,f10,f11,f12,f13,f14,f15,f16,f17,f18,f19,f20,f21,f22,f23,f24 ->
{ s = table {
Masc => table {
Sg => table {
Nom => f1 ;
Acc => f2 ;
Dat => f3 ;
Gen => f4
} ;
Pl => table {
Nom => f5 ;
Acc => f6 ;
Dat => f7 ;
Gen => f8
}
} ;
Fem => table {
Sg => table {
Nom => f9 ;
Acc => f10 ;
Dat => f11 ;
Gen => f12
} ;
Pl => table {
Nom => f13 ;
Acc => f14 ;
Dat => f15 ;
Gen => f16
}
} ;
Neutr => table {
Sg => table {
Nom => f17 ;
Acc => f18 ;
Dat => f19 ;
Gen => f20
} ;
Pl => table {
Nom => f21 ;
Acc => f22 ;
Dat => f23 ;
Gen => f24
}
}
}
} ;
param Tense = Past | Pres ;
param PersNum = PSg Person | PPl ;
param Person = P1 | P3 | P2 ;
oper Verb = {Converb: Str; Imperative_Jussive: Number => Str; Indicative: Tense => PersNum => Str; Nonfinite: Str; Participle: Tense => Str} ; -- 596
oper mkVerb : (_,_,_,_,_,_,_,_,_,_,_,_,_,_ : Str) -> Verb =
\f1,f2,f3,f4,f5,f6,f7,f8,f9,f10,f11,f12,f13,f14 ->
{ Converb = f1 ;
Imperative_Jussive = table {
Sg => f2 ;
Pl => f3
} ;
Indicative = table {
Pres => table {
PSg P1 => f4 ;
PSg P2 => f5 ;
PSg P3 => f6 ;
PPl => f7
} ;
Past => table {
PSg P1 => f8 ;
PSg P2 => f9 ;
PSg P3 => f10 ;
PPl => f11
}
} ;
Nonfinite = f12 ;
Participle = table {
Pres => f13 ;
Past => f14
}
} ;
oper Compl = {s : Str; c : Case} ;
oper noPrep : Compl = {s=""; c=Acc} ;
oper CommonNoun = Noun ;
oper AdjPhrase = Adj ;
}

View File

@@ -62,7 +62,7 @@ oper
-- Adjectives --- could be made more compact by pressing comparison forms down to a few -- Adjectives --- could be made more compact by pressing comparison forms down to a few
oper oper
SAForm : Type = AForm ; SAForm : PType = AForm ;
oper oper
SAdj = {s : SAForm => Str ; h : Harmony} ; SAdj = {s : SAForm => Str ; h : Harmony} ;
@@ -112,7 +112,7 @@ oper
-- verbs -- verbs
oper oper
SVForm : Type = VForm ; SVForm : PType = VForm ;
SVerb : Type = {s : SVForm => Str ; h : Harmony} ; SVerb : Type = {s : SVForm => Str ; h : Harmony} ;
ollaSVerbForms : SVForm => Str = verbOlla.s ; ollaSVerbForms : SVForm => Str = verbOlla.s ;

View File

@@ -98,10 +98,9 @@ lin ApposNP np1 np2 = np1 ** { -- guessed by KA
lin CompoundN a b = lin N { lin CompoundN a b = lin N {
s = \\n => b.s ! n ++ s = \\n => b.s ! n ++
case b.relType of { case b.relType of {
NRelPrep p => prepCase (CPrep p) ; -- tasa de suicidio NRelPrep p => prepCase (CPrep p) ++ a.s ! Sg ; -- tasa de suicidio
NRelNoPrep => [] -- connessione internet = internet connection NRelNoPrep => a.s ! n -- connessione internet = internet connection
} ++ } ;
a.s ! Sg ;
g = b.g ; g = b.g ;
relType = b.relType relType = b.relType
} ; } ;

View File

@@ -40,14 +40,14 @@ resource ParadigmsFre =
-- To abstract over gender names, we define the following identifiers. -- To abstract over gender names, we define the following identifiers.
oper oper
Gender : Type ; Gender : PType ;
masculine : Gender ; masculine : Gender ;
feminine : Gender ; feminine : Gender ;
-- To abstract over number names, we define the following. -- To abstract over number names, we define the following.
Number : Type ; --% Number : PType ; --%
singular : Number ; --% singular : Number ; --%
plural : Number ; --% plural : Number ; --%
@@ -200,7 +200,7 @@ oper
mkA : (banal,banale,banaux,banalement : Str) -> A ; -- almost worst-case adjective mkA : (banal,banale,banaux,banalement : Str) -> A ; -- almost worst-case adjective
-- This is the worst-case paradigm for the positive forms, used for "vieux/vieil". -- This is the worst-case paradigm for the positive forms, used for "vieux/vieil".
mkA : (vieux,vieil,vieille,vieuxs,vieuxment : Str) -> A ; -- worst-case adjetive mkA : (vieux,vieil,vieille,vieux,vieillement : Str) -> A ; -- worst-case adjetive
-- If comparison forms are irregular (i.e. not formed by "plus", e.g. -- If comparison forms are irregular (i.e. not formed by "plus", e.g.
-- "bon-meilleur"), the positive and comparative can be given as separate -- "bon-meilleur"), the positive and comparative can be given as separate
@@ -468,6 +468,17 @@ oper
prefixA = prefA ; prefixA = prefA ;
invarA : (sud : Str) -> A = \sud -> compADeg {
s = table {
AF _ _ => sud;
AAttrMasc => sud;
AA => case sud of {
_ + "ée" => init sud + "ment" ;
_ => sud + "ment"
}
} ;
} ;
mkAdv x = ss x ** {lock_Adv = <>} ; mkAdv x = ss x ** {lock_Adv = <>} ;
mkAdV x = ss x ** {lock_AdV = <>} ; mkAdV x = ss x ** {lock_AdV = <>} ;
mkAdA x = ss x ** {lock_AdA = <>} ; mkAdA x = ss x ** {lock_AdA = <>} ;

View File

@@ -0,0 +1,68 @@
concrete AdjectiveGla of Adjective = CatGla ** open ResGla, Prelude in {
flags optimize=all_subs ;
lin
-- : AP -> Adv -> AP ; -- warm by nature
AdvAP ap adv = ap ** {
s = ap.s ++ adv.s ;
} ;
-- : A -> AP ;
PositA a = a ** {
compar = [] ;
} ;
-- : A -> NP -> AP ;
ComparA a np = a ** {
compar = np.s
} ;
-- : A2 -> NP -> AP ; -- married to her
-- ComplA2 a2 np = a2 ** { } ;
-- : A2 -> AP ; -- married to itself
-- ReflA2 a2 = a2 ** { } ;
-- : A2 -> AP ; -- married
UseA2 = PositA ;
-- : A -> AP ; -- warmer
-- UseComparA a = a ** {
-- s = \\af => "???" ++ a.s ! af ;
-- compar = []
-- } ;
-- : CAdv -> AP -> NP -> AP ; -- as cool as John
-- CAdvAP adv ap np = ap ** { } ;
-- The superlative use is covered in $Ord$.
-- : Ord -> AP ; -- warmest
-- AdjOrd ord = ord ** {
-- compar = []
-- } ;
-- AdjOrd : Ord -> AP =
AdjOrd ord = ord ;
-- Sentence and question complements defined for all adjectival
-- phrases, although the semantics is only clear for some adjectives.
-- : AP -> SC -> AP ; -- good that she is here
-- SentAP ap sc = ap ** {
-- s = \\af => ap.s ! af ++ sc.s
-- } ;
-- An adjectival phrase can be modified by an *adadjective*, such as "very".
-- : AdA -> AP -> AP ;
-- AdAP ada ap = ap ** { } ;
-- It can also be postmodified by an adverb, typically a prepositional phrase.
}

59
src/gaelic/AdverbGla.gf Normal file
View File

@@ -0,0 +1,59 @@
concrete AdverbGla of Adverb = CatGla ** open ResGla, ParadigmsGla, Prelude in {
lin
{-
-- : A -> Adv ;
PositAdvAdj adj =
-- : CAdv -> A -> NP -> Adv ; -- more warmly than John
ComparAdvAdj cadv a np =
-- : CAdv -> A -> S -> Adv ; -- more warmly than he runs
ComparAdvAdjS cadv a s =
-}
-- : Prep -> NP -> Adv ;
PrepNP prep np = {
s = prepAndArt ++ noun
} where {
defaultCase : CoreCase = prep.c2 ! getDefi np.a ;
complCase : Case = case <defaultCase, np.a> of {
<Dat NoMutation, NotPron (DPoss _ (Sg1|Sg2|Sg3 Masc))>
=> CC (Dat Lenited) ; -- force lenition if possessive triggers it
<Nom NoMutation, NotPron (DPoss _ (Sg1|Sg2|Sg3 Masc))>
=> CC (Nom Lenited) ; -- force lenition if possessive triggers it
_ => CC defaultCase } ;
prepStr : Str = prep.s ! agr2pagr np.a ; -- can be Prep or Prep+Pron merged
artStr : Str = np.art ! complCase ;
prepAndArt : Str = case np.a of {
NotPron (DDef _ Indefinite) => prepStr ++ artStr ;
_ => prepStr } ;
noun : Str = case <prep.replacesObjPron, np.a> of {
<_, NotPron _> | <False, _>
=> np.s ! complCase ;
_ => np.empty -- empty string to avoid metavariables
}
};
{-
-- Adverbs can be modified by 'adadjectives', just like adjectives.
-- : AdA -> Adv -> Adv ; -- very quickly
AdAdv ada adv = adv **
-- Like adverbs, adadjectives can be produced by adjectives.
-- : A -> AdA ; -- extremely
PositAdAAdj a =
-- Subordinate clauses can function as adverbs.
-- : Subj -> S -> Adv ;
SubjS subj s = {s = subj.s ++ s.s} ;
-- Comparison adverbs also work as numeral adverbs.
-- : CAdv -> AdN ; -- less (than five)
AdnCAdv cadv = ;
-}
}

6
src/gaelic/AllGla.gf Normal file
View File

@@ -0,0 +1,6 @@
--# -path=.:../abstract:../common:../prelude
concrete AllGla of AllGlaAbs =
LangGla,
ExtendGla
;

121
src/gaelic/CatGla.gf Normal file
View File

@@ -0,0 +1,121 @@
concrete CatGla of Cat = CommonX ** open ResGla, Coordination, Prelude in {
flags optimize=all_subs ;
lincat
--2 Sentences and clauses
-- Constructed in SentenceGla, and also in IdiomGla
S = SS ;
QS = SS ;
RS = SS ;
-- relative sentence. Tense and polarity fixed,
-- but agreement may depend on the CN/NP it modifies.
Cl = ResGla.LinCl ;
ClSlash = SS ;
SSlash = SS ; -- sentence missing NP; e.g. "she has looked at"
Imp = SS ; -- imperative e.g. "look at this"
--2 Questions and interrogatives
-- Constructed in QuestionGla.
QCl = SS ;
IComp = SS ; -- interrogative complement of copula e.g. "where"
IDet = SS ; -- interrogative determiner e.g. "how many"
IQuant = SS ; -- interrogative quantifier e.g. "which"
IP = SS ; -- interrogative pronoun e.g. "who"
--2 Subord clauses and pronouns
RCl = SS ;
RP = SS ;
--2 Verb phrases
-- Constructed in VerbGla.
VP = ResGla.LinVP ;
VPSlash = SS ;
Comp = SS ;
--2 Adjectival phrases
-- Constructed in AdjectiveGla.
AP = SS ;
--2 Nouns and noun phrases
-- Constructed in NounGla.
-- Many atomic noun phrases e.g. "everybody"
-- are constructed in StructuralGla.
CN = ResGla.LinCN ;
NP = ResGla.LinNP ;
Pron = LinPron ;
Det = ResGla.LinDet ; -- s : Str , n : Number
Predet = SS ;
Quant = ResGla.LinQuant ; -- s : Number => Str
Num = ResGla.LinNum ;
Card = ResGla.LinNum ;
ACard = SS ;
Ord = SS ;
DAP = SS ;
--2 Numerals
-- Constructed in NumeralGla.
Numeral = ResGla.LinNumeral ;
Digits = ResGla.LinNumeral ;
--2 Structural words
-- Constructed in StructuralGla.
Conj = Coordination.ConjunctionDistr ** {
n : Number -- The number of the NP that results from
-- coordinating a list of NPs with that Conj.
} ; -- "[Ann and Bob] are children" → and_Conj.n = Pl
Subj = SS ;
Prep = ResGla.LinPrep ;
--2 Words of open classes
-- These are constructed in LexiconGla and in
-- additional lexicon modules.
-- TODO: eventually different lincats
VS, -- sentence-complement verb e.g. "claim"
VQ, -- question-complement verb e.g. "wonder"
VA, -- adjective-complement verb e.g. "look"
V = ResGla.LinV ;
VV -- verb-phrase-complement verb e.g. "want"
= SS ;
V2A, -- verb with NP and AP complement e.g. "paint"
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"
V2 = SS ;
V3 = SS ;
A = SS ;
A2 = SS ;
N = ResGla.LinN ;
N2 = ResGla.LinN ;
N3 = ResGla.LinN ;
PN = SS ;
-- From the Names module, not in the official API as of 2023-08
GN = SS ; -- Given name, e.g. "George"
SN = SS ; -- Second name, e.g. "Washington"
LN = SS ; -- Location name, e.g. "Sweden"
linref
Cl = linCl ;
}

View File

@@ -0,0 +1,147 @@
concrete ConjunctionGla of Conjunction =
CatGla ** open ResGla, Coordination, Prelude in {
flags optimize=all_subs ;
{- Conjunction for category X needs four things:
lincat [X]
lin BaseX
lin ConsX
lin ConjX
For example, if X is defined as
lincat X = {s : Number => Str ; g : Gender} ;
then [X] will split its s field into two, and retain its other fields as is:
lincat [X] = {s1,s2 : Number => Str ; g : Gender} ;
Let us look at a simple case: Adv is of type {s : Str}
Then [Adv] is {s1,s2 : Str}.
BaseAdv, ConsAdv and ConjAdv can all use functions defined in prelude/Coordination:
BaseAdv = twoSS ;
ConsAdv = consrSS comma ;
ConjAdv = conjunctSS ;
--}
-----------------------------------------------------------------------------
-- Adverb and other simple {s : Str} types.
lincat
[Adv],[AdV],[IAdv] = {s1,s2 : Str} ;
lin
BaseAdv, BaseAdV, BaseIAdv = twoSS ;
ConsAdv, ConsAdV, ConsIAdv = consrSS comma ;
ConjAdv, ConjAdV, ConjIAdv = conjunctDistrSS ;
{-
-----------------------------------------------------------------------------
-- S is sometimes already {s : Str}, sometimes open for mood or word order.
-- Simply take the lincat of S, and split the s field into s1 and s2.
-- Then make sure that all of the other fields are retained.
lincat
[S] = {s1, s2 : …} ;
lin
-- : S -> S -> ListS ; -- John walks, Mary runs
BaseS x y =
-- : S -> ListS -> ListS ; -- John walks, Mary runs, Bill swims
ConsS x xs =
-- : Conj -> ListS -> S ; -- he walks and she runs
ConjS conj xs =
-----------------------------------------------------------------------------
-- RS is variable on … and has inherent …
-- RS can modify CNs, which are open for …, and have inherent …
lincat
[RS] = {s1,s2 : … => Str} ;
lin
-- : RS -> RS -> ListRS ; -- who walks, whom I know
BaseRS x y =
-- : RS -> ListRS -> ListRS ; -- who wals, whom I know, who is here
ConsRS x xs =
-- : Conj -> ListRS -> RS ; -- who walks and whose mother runs
ConjRS conj xs =
-----------------------------------------------------------------------------
-- NP is variable on … and has inherent …
lincat
[NP] = {s1, s2 : …} ;
lin
-- : NP -> NP -> ListNP ; -- John, Mary
BaseNP x y =
-- : NP -> ListNP -> ListNP ; -- John, Mary, Bill
ConsNP x xs =
-- : Conj -> ListNP -> NP ; -- she or we
ConjNP conj xs =
-----------------------------------------------------------------------------
-- AP is variable on … and has an inherent …
lincat
[AP] = {s1, s2 : …} ;
lin
-- : AP -> AP -> ListAP ; -- red, white
BaseAP x y =
-- : AP -> ListAP -> ListAP ; -- red, white, blue
ConsAP x xs =
-- : Conj -> ListAP -> AP ; -- cold and warm
ConjAP conj xs =
-----------------------------------------------------------------------------
-- CN is variable on …
-- CN conjunction is not in the API, so this can be lower prio
lincat
[CN] = {s1, s2 : …} ;
lin
-- : CN -> CN -> ListCN ; -- man, woman
BaseCN x y =
-- : CN -> ListCN -> ListCN ; -- man, woman, child
ConsCN x xs =
-- : Conj -> ListCN -> CN ; -- man and woman
ConjCN conj xs =
-----------------------------------------------------------------------------
-- Det and DAP
-- Note that there is no [Det], the way to coordinate Dets is to make them
-- into DAP first, using Noun.DetDAP : Det -> DAP ;
-- DAP ("three small") isn't used in any API functions, so lower prio.
lincat
[DAP] = {s1, s2 : …} ;
lin
-- : DAP -> DAP -> ListDAP ;
BaseDAP x y =
-- : DAP -> ListDAP -> ListDAP ;
ConsDAP xs x =
-- : Conj -> ListDAP -> Det ; -- his or her
ConjDet conj xs =
-}
}

View File

@@ -0,0 +1,117 @@
concrete ConstructionGla of Construction = CatGla ** open ParadigmsGla in {
lincat
Timeunit = N ;
Weekday = N ;
Monthday = NP ;
Month = N ;
Year = NP ;
{-
lin
timeunitAdv n time =
let n_card : Card = n ;
n_hours_NP : NP = mkNP n_card time ;
in SyntaxGla.mkAdv for_Prep n_hours_NP | mkAdv (n_hours_NP.s ! R.npNom) ;
weekdayPunctualAdv w = ; -- on Sunday
weekdayHabitualAdv w = ; -- on Sundays
weekdayNextAdv w = -- next Sunday
weekdayLastAdv w = -- last Sunday
monthAdv m = mkAdv in_Prep (mkNP m) ;
yearAdv y = mkAdv in_Prep y ;
dayMonthAdv d m = ; -- on 17 Gla
monthYearAdv m y = ; -- in Gla 2012
dayMonthYearAdv d m y = ; -- on 17 Gla 2013
intYear = symb ;
intMonthday = symb ;
lincat Language = N ;
lin InLanguage l = mkAdv ???_Prep (mkNP l) ;
lin
weekdayN w = w ;
monthN m = m ;
weekdayPN w = mkPN w ;
monthPN m = mkPN m ;
languageCN l = mkCN l ;
languageNP l = mkNP l ;
oper mkLanguage : Str -> N = \s -> mkN s ;
----------------------------------------------
---- lexicon of special names
lin second_Timeunit = mkN "second" ;
lin minute_Timeunit = mkN "minute" ;
lin hour_Timeunit = mkN "hour" ;
lin day_Timeunit = mkN "day" ;
lin week_Timeunit = mkN "week" ;
lin month_Timeunit = mkN "month" ;
lin year_Timeunit = mkN "year" ;
lin monday_Weekday = mkN "Monday" ;
lin tuesday_Weekday = mkN "Tuesday" ;
lin wednesday_Weekday = mkN "Wednesday" ;
lin thursday_Weekday = mkN "Thursday" ;
lin friday_Weekday = mkN "Friday" ;
lin saturday_Weekday = mkN "Saturday" ;
lin sunday_Weekday = mkN "Sunday" ;
lin january_Month = mkN "January" ;
lin february_Month = mkN "February" ;
lin march_Month = mkN "March" ;
lin april_Month = mkN "April" ;
lin may_Month = mkN "May" ;
lin june_Month = mkN "June" ;
lin july_Month = mkN "July" ;
lin august_Month = mkN "August" ;
lin september_Month = mkN "September" ;
lin october_Month = mkN "October" ;
lin november_Month = mkN "November" ;
lin december_Month = mkN "December" ;
lin afrikaans_Language = mkLanguage "Afrikaans" ;
lin amharic_Language = mkLanguage "Amharic" ;
lin arabic_Language = mkLanguage "Arabic" ;
lin bulgarian_Language = mkLanguage "Bulgarian" ;
lin catalan_Language = mkLanguage "Catalan" ;
lin chinese_Language = mkLanguage "Chinese" ;
lin danish_Language = mkLanguage "Danish" ;
lin dutch_Language = mkLanguage "Dutch" ;
lin english_Language = mkLanguage "Euslish" ;
lin estonian_Language = mkLanguage "Estonian" ;
lin finnish_Language = mkLanguage "Finnish" ;
lin french_Language = mkLanguage "French" ;
lin german_Language = mkLanguage "German" ;
lin greek_Language = mkLanguage "Greek" ;
lin hebrew_Language = mkLanguage "Hebrew" ;
lin hindi_Language = mkLanguage "Hindi" ;
lin japanese_Language = mkLanguage "Japanese" ;
lin italian_Language = mkLanguage "Italian" ;
lin latin_Language = mkLanguage "Latin" ;
lin latvian_Language = mkLanguage "Latvian" ;
lin maltese_Language = mkLanguage "Maltese" ;
lin nepali_Language = mkLanguage "Nepali" ;
lin norwegian_Language = mkLanguage "Norwegian" ;
lin persian_Language = mkLanguage "Persian" ;
lin polish_Language = mkLanguage "Polish" ;
lin punjabi_Language = mkLanguage "Punjabi" ;
lin romanian_Language = mkLanguage "Romanian" ;
lin russian_Language = mkLanguage "Russian" ;
lin sindhi_Language = mkLanguage "Sindhi" ;
lin spanish_Language = mkLanguage "Spanish" ;
lin swahili_Language = mkLanguage "Swahili" ;
lin swedish_Language = mkLanguage "Swedish" ;
lin thai_Language = mkLanguage "Thai" ;
lin turkish_Language = mkLanguage "Turkish" ;
lin urdu_Language = mkLanguage "Urdu" ;
-}
}

35
src/gaelic/ExtendGla.gf Normal file
View File

@@ -0,0 +1,35 @@
--# -path=.:../common:../abstract
concrete ExtendGla of Extend = CatGla
** ExtendFunctor - [
VPS -- finite VP's with tense and polarity
, ListVPS
, VPI
, ListVPI -- infinitive VP's (TODO: with anteriority and polarity)
, MkVPS
, PredVPS
-- excluded because RGL funs needed for them not implemented yet
, SlashBareV2S
, PredAPVP
, ComplBareVS
, AdvIsNP, AdvIsNPAP
, CompBareCN
, CompIQuant
, ComplSlashPartLast
, ComplDirectVQ
, ComplDirectVS
, DetNPFem, DetNPMasc
, ExistCN, ExistMassCN, ExistPluralCN, ExistsNP
, ExistIPQS, ExistNPQS, ExistS
, PredIAdvVP
, PrepCN
, ReflPossPron
, UttVP, UttVPShort, UttAccNP, UttDatNP, UttAccIP, UttDatIP
, EmptyRelSlash, StrandQuestSlash, StrandRelSlash
, SubjRelNP
, UseComp_ser, UseComp_estar
, iFem_Pron, weFem_Pron, youFem_Pron, youPlFem_Pron, youPolFem_Pron, youPolPlFem_Pron, youPolPl_Pron, theyFem_Pron, theyNeutr_Pron
, GenModNP
] with (Grammar=GrammarGla) ;

17
src/gaelic/GrammarGla.gf Normal file
View File

@@ -0,0 +1,17 @@
concrete GrammarGla of Grammar =
NounGla
, VerbGla
, AdjectiveGla
, AdverbGla
, NumeralGla
, SentenceGla
, QuestionGla
, RelativeGla
, ConjunctionGla
, PhraseGla
, TextX
, StructuralGla
, IdiomGla
, TenseX
, NamesGla -- Not part of original Grammar, here to trigger compilation
;

56
src/gaelic/IdiomGla.gf Normal file
View File

@@ -0,0 +1,56 @@
--1 Idiom: Idiomatic Expressions
concrete IdiomGla of Idiom = CatGla ** open Prelude, ResGla, VerbGla, QuestionGla, NounGla, StructuralGla in {
-- This module defines constructions that are formed in fixed ways,
-- often different even in closely related languages.
{-
lin
-- ImpersCl : VP -> Cl ; -- it is hot
ImpersCl vp = {
} ;
-- : NP -> Cl ; -- there is a house
ExistNP np =
-- ExistIP : IP -> QCl ; -- which houses are there
ExistIP ip =
-- GenericCl : VP -> Cl ; -- one sleeps
GenericCl vp =
CleftNP : NP -> RS -> Cl ; -- it is I who did it
CleftAdv : Adv -> S -> Cl ; -- it is here she slept
-- : NP -> Cl ; -- there is a house
ExistNP np =
ExistIP : IP -> QCl ; -- which houses are there
-- 7/12/2012 generalizations of these
ExistNPAdv : NP -> Adv -> Cl ; -- there is a house in Paris
ExistIPAdv : IP -> Adv -> QCl ; -- which houses are there in Paris
-- : VP -> VP ;
ProgrVP vp = vp ** {
} ;
-- : VP -> Utt ; -- let's go
ImpPl1 vp = { } ;
ImpP3 : NP -> VP -> Utt ; -- let John walk
-- 3/12/2013 non-reflexive uses of "self"
SelfAdvVP : VP -> VP ; -- is at home himself
SelfAdVVP : VP -> VP ; -- is himself at home
SelfNP : NP -> NP ; -- the president himself (is at home)
-}
}

5
src/gaelic/LangGla.gf Normal file
View File

@@ -0,0 +1,5 @@
--# -path=.:../abstract:../common:../prelude:../api
concrete LangGla of Lang =
GrammarGla,
LexiconGla,
ConstructionGla ;

420
src/gaelic/LexiconGla.gf Normal file
View File

@@ -0,0 +1,420 @@
concrete LexiconGla of Lexicon = CatGla **
open ParadigmsGla, ResGla in {
----
-- A
{-
lin add_V3 = mkV3 (mkV "") ;
lin airplane_N = mkN "" ;
lin alas_Interj = mkInterj "" ;
lin already_Adv = mkA "" ;
lin animal_N = mkN "" ;
lin answer_V2S = mkV2S (mkV "") ;
lin apartment_N = mkN "" ;
lin apple_N = mkN "" ;
lin art_N = mkN "" ;
lin ashes_N = mkN "" ;
lin ask_V2Q = mkV2Q (mkV "") ;
----
-- B
lin baby_N = mkN "" ;
lin back_N = mkN "" ;
lin bad_A = mkA "" ;
lin bank_N = mkN "" ;
lin bark_N = mkN "" ;
lin beautiful_A = mkA "" ;
lin become_VA = mkVA (mkV "") ;
lin beer_N = mkN "" ;
lin beg_V2V = mkV2V (mkV "") ;
lin belly_N = mkN "" ;
lin big_A = mkA "" ;
lin bike_N = mkN "" ;-}
lin bird_N = smartN "eun" "eòin" "eòin" Masc ;{-
lin bite_V2 = mkV2 "" ;
lin black_A = mkA "" ;
lin blood_N = mkN "" ;
lin blow_V = mkV "" ;
lin blue_A = mkA "" ;
lin boat_N = mkN "" ;
lin bone_N = mkN "" ;
lin boot_N = mkN "" ;
lin boss_N = mkN "" ;
lin book_N = mkN "" ;
lin boy_N = mkN "" ;
lin bread_N = mkN "" ;
lin break_V2 = mkV2 "" ;
lin breast_N = mkN "" ;
lin breathe_V = mkV "" ;
lin broad_A = mkA "" ;
lin brother_N2 = mkN "" ;
lin brown_A = mkA "" ;
lin burn_V = mkV "" ;
lin butter_N = mkN "" ;
lin buy_V2 = mkV2 "" ;
----
-- C
lin camera_N = mkN "" ;
lin cap_N = mkN "" ;
lin car_N = mkN "" ;
lin carpet_N = mkN "" ;
lin cat_N = mkN "" ;
lin ceiling_N = mkN "" ;
lin chair_N = mkN "" ;
lin cheese_N = mkN "" ;
lin child_N = mkN "" ;
lin church_N = mkN "" ;
lin city_N = mkN "" ;
lin clean_A = mkA "" ;
lin clever_A = mkA "" ;
lin close_V2 = mkV2 "" ;
lin cloud_N = mkN "" ;
lin coat_N = mkN "" ;
lin cold_A = mkA "" ;
lin come_V = mkV "" ;
lin computer_N = mkN "" ;
lin correct_A = mkA "" ;
lin count_V2 = mkV2 "" ;
lin country_N = mkN "" ;
lin cousin_N = mkN "" ;
lin cow_N = mkN "" ;
lin cut_V2 = mkV2 "" ;
----
-- D
lin day_N = mkN "" ; -}
lin die_V = mkV "die" ;
{-lin dig_V = mkV "" ;
lin dirty_A = mkA "" ;
lin distance_N3 = mkN3 (mkN "") ;
lin do_V2 = mkV2 "" ;
lin doctor_N = mkN "" ;
lin dog_N = mkN "" ;
lin door_N = mkN "" ;
lin drink_V2 = mkV2 "" ;
lin dry_A = mkA "" ;
lin dull_A = mkA "" ;
lin dust_N = mkN "" ;
----
-- E
lin ear_N = mkN "" ;
lin earth_N = mkN "" ;
lin eat_V2 = mkV "" ;
lin egg_N = mkN "" ;
lin empty_A = mkA "" ;
lin enemy_N = mkN "" ;
lin eye_N = mkN "" ;
----
-- F
lin factory_N = mkN "" ;
lin fall_V = mkV "" ;
lin far_Adv = mkA "" ;
lin fat_N = mkN "" ;
lin father_N2 = mkN2 (mkN "") ;
lin fear_V2 = mkV2 "" ;
lin fear_VS = mkVS (mkV "") ;
lin feather_N = mkN "" ;
lin fight_V2 = mkV2 "" ;
lin find_V2 = mkV2 "" ;
lin fingernail_N = mkN "" ;
lin fire_N = mkN "" ;
lin fish_N = mkN "" ;
lin float_V = mkV "" ;
lin floor_N = mkN "" ;
lin flow_V = mkV "" ;
lin flower_N = mkN "" ;
lin fly_V = mkV "" ;
lin fog_N = mkN "" ;
lin foot_N = mkN "" ;
lin forest_N = mkN "" ;
lin forget_V2 = mkV2 "" ;
lin freeze_V = mkV "" ;
lin fridge_N = mkN "" ;
lin friend_N = mkN "" ;
lin fruit_N = mkN "" ;
lin full_A = mkA "" ;
--lin fun_AV
----
-- G
lin garden_N = mkN "" ;
lin girl_N = mkN "" ;
lin give_V3 = mkV3 (mkV "") ;
lin glove_N = mkN "" ;
lin go_V = mkV "" ;
lin gold_N = mkN "" ;
lin good_A = mkA "" ;
lin grammar_N = mkN "" ;
lin grass_N = mkN "" ;
lin green_A = mkA "" ;
----
-- H
lin hair_N = mkN "" ;-}
lin hand_N = smartN "làmh" Fem ;{-
lin harbour_N = mkN "" ;
lin hat_N = mkN "" ;
lin hate_V2 = mkV2 "" ;
lin head_N = mkN "" ;
lin hear_V2 = mkV2 "" ;
lin heart_N = mkN "" ;
lin heavy_A = mkA "" ;
lin hill_N = mkN "" ;
lin hit_V2 = mkV2 "" ;
lin hold_V2 = mkV2 "" ;
lin hope_VS = mkV "" ;
lin horn_N = mkN "" ;
lin horse_N = mkN "" ;
lin hot_A = mkA "" ;
lin house_N = mkN "" ;
lin hunt_V2 = mkV2 "" ;
lin husband_N = mkN "" ;
--------
-- I - K
lin ice_N = mkN "" ;
lin industry_N = mkN "" ;
lin iron_N = mkN "" ;
lin john_PN = mkPN "" ;
lin jump_V = mkV "" ;
lin kill_V2 = mkV2 "" ;
lin king_N = mkN "" ;
lin knee_N = mkN "" ;
lin know_V2 = mkV2 "" ;
lin know_VQ = mkVQ (mkV "") ;
lin know_VS = mkV "" ;
-}
----
-- L
lin lake_N = smartN "loch" "locha" "lochan" Masc ;
{-
lin lamp_N = mkN "" ;
lin language_N = mkN "" ;
lin laugh_V = mkV "" ;
lin leaf_N = mkN "" ;
lin learn_V2 = mkV2 "" ;
lin leather_N = mkN "" ;
lin leave_V2 = mkV2 "" ;
lin leg_N = mkN "" ;
lin lie_V = mkV "" ;
lin like_V2 = mkV2 "" ;
lin listen_V2 = mkV2 "" ;
lin live_V = mkV "";
lin liver_N = mkN "" ;
lin long_A = mkA "" ;
lin lose_V2 = mkV2 "" ;
lin louse_N = mkN "" ;
lin love_N = mkN "" ;
lin love_V2 = mkV2 "" ;
----
-- M
-}lin man_N = smartN "fear" Masc ;{-
lin married_A2 = mkA2 (mkA "") ;
lin meat_N = mkN "" ;
lin milk_N = mkN "" ;
lin moon_N = mkN "" ;
lin mother_N2 = mkN2 (mkN "") ;
lin mountain_N = mkN "" ;
lin mouth_N = mkN "" ;
lin music_N = mkN "" ;
----
-- N
lin name_N = mkN "" ;
lin narrow_A = mkA "" ;
lin near_A = mkA "" ;
lin neck_N = mkN "" ;
lin new_A = mkA "" ;
lin newspaper_N = mkN "" ;
lin night_N = mkN "" ;
lin nose_N = mkN "" ;
lin now_Adv = mkAdv "" ;
lin number_N = mkN "" ;
--------
-- O - P
lin oil_N = mkN "" ;
lin old_A = mkA "" ;
lin open_V2 = mkV2 "" ;
lin paint_V2A = mkV2A (mkV "") ;
lin paper_N = mkN "" ;
lin paris_PN = mkPN "Paris" ;
lin peace_N = mkN "" ;
lin pen_N = mkN "" ;
lin person_N = mkN "" ;
lin planet_N = mkN "" ;
lin plastic_N = mkN "" ;
lin play_V = mkV "" ;
lin policeman_N = mkN "" ;
lin priest_N = mkN "" ;
lin pull_V2 = mkV2 "" ;
lin push_V2 = mkV2 "" ;
lin put_V2 = mkV2 "" ;
--------
-- Q - R
lin queen_N = mkN "" ;
lin question_N = mkN "" ;
lin radio_N = mkN "" ;
lin rain_N = mkN "" ;
lin rain_V0 = mkV "" ;
lin read_V2 = mkV2 "" ;
lin ready_A = mkA "" ;
lin reason_N = mkN "" ;
lin red_A = mkA "" ;
lin religion_N = mkN "" ;
lin restaurant_N = mkN "" ;
lin river_N = mkN "" ;
lin road_N = mkN "" ;
lin rock_N = mkN "" ;
lin roof_N = mkN "" ;
lin root_N = mkN "" ;
lin rope_N = mkN "" ;
lin rotten_A = mkA "" ;
lin round_A = mkA "" ;
lin rub_V2 = mkV2 "" ;
lin rubber_N = mkN "" ;
lin rule_N = mkN "" ;
lin run_V = mkV "" ;
----
-- S
lin salt_N = mkN "" ;
lin sand_N = mkN "" ;
lin say_VS = mkVS (mkV "") ;
lin school_N = mkN "" ;
lin science_N = mkN "" ;
lin scratch_V2 = mkV2 "" ;
lin sea_N = mkN "" ;
lin see_V2 = mkV2 "" ;
lin seed_N = mkN "" ;
lin seek_V2 = mkV2 "" ;
lin sell_V3 = mkV3 (mkV "" Meng) emptyPrep emptyPrep ; -- TODO
lin send_V3 = mkV3 (mkV "") ;
lin sew_V = mkV "" ;
lin sharp_A = mkA "" ;
lin sheep_N = mkN "" fem ;
lin ship_N = mkN "" ;
lin shirt_N = mkN "" ;
lin shoe_N = mkN "" ;
lin shop_N = mkN "" ;
lin short_A = mkA "" ;
lin silver_N = mkN "" ;
lin sing_V = mkV "" ;
lin sister_N = mkN "" ;
lin sit_V = mkV "" ;
lin skin_N = mkN "" ;
lin sky_N = mkN "" ;
lin sleep_V = mkV "" ;
lin small_A = mkA "" ;
lin smell_V = mkV "" ;
lin smoke_N = mkN "" ;
lin smooth_A = mkA "" ;
lin snake_N = mkN "" ;
lin snow_N = mkN "" ;
lin sock_N = mkN "" ;
lin song_N = mkN "" ;
lin speak_V2 = mkV2 "" ;
lin spit_V = mkV "" ;
lin split_V2 = mkV2 "" ;
lin squeeze_V2 = mkV2 "" ;
lin stab_V2 = mkV2 "" ;
lin stand_V = mkV "" ;
lin star_N = mkN "" ;
lin steel_N = mkN "" ;
lin stick_N = mkN "" ;
lin stone_N = mkN "" ;
lin stop_V = mkV "" ;
lin stove_N = mkN "" ;
lin straight_A = mkA "" ;
lin student_N = mkN "" ;
lin stupid_A = mkA "" ;
lin suck_V2 = mkV2 "" ;
lin sun_N = mkN "" ;
lin swell_V = mkV "" ;
lin swim_V = mkV "" ;
----
-- T
lin table_N = mkN "" ;
lin tail_N = mkN "" ;
lin talk_V3 = mkV3 (mkV "" Ber) (mkPrep "") (mkPrep "") ;
lin teach_V2 = mkV2 "" ;
lin teacher_N = mkN "" ;
lin television_N = mkN "" ;
lin thick_A = mkA "" ;
lin thin_A = mkA "" ;
lin think_V = mkV "" ;
lin throw_V2 = mkV2 "" ;
lin tie_V2 = mkV2 "" ;
lin today_Adv = mkA "" ;
lin tongue_N = mkN "" ;
lin tooth_N = mkN "" ;
lin train_N = mkN "" ;
lin travel_V = mkV "" ;
lin tree_N = mkN "" ;
lin turn_V = mkV "" ;
--------
-- U - V
lin ugly_A = mkA "" ;
lin uncertain_A = mkA "" ;
lin understand_V2 = mkV2 "" ;
lin university_N = mkN "" ;
lin village_N = mkN "" ;
lin vomit_V = mkV2 "" ;
--------
-- W - Y
lin wait_V2 = mkV2 "" ;
lin walk_V = mkV "" ;
lin war_N = mkN "" ;
lin warm_A = mkA "" ;
lin wash_V2 = mkV2 "" ;
lin watch_V2 = mkV2 "" ;
lin water_N = mkNoun "" ;
lin wet_A = mkA "" ;
lin white_A = mkA "" ;
lin wide_A = mkA "" ;
lin wife_N = mkN "" ;
lin win_V2 = mkV2 "" ;
lin wind_N = mkN "" ;
lin window_N = mkN "" ;
lin wine_N = mkN "" ;
lin wing_N = mkN "" ;
lin wipe_V2 = mkV2 "" ;-}
lin woman_N = smartN "boireannach" Masc ;{-
lin wonder_VQ = mkVQ (mkV "") ;
lin wood_N = mkN "" ;
lin worm_N = mkN "" ;
lin write_V2 = mkV2 "" ;
lin year_N = mkN "" ;
lin yellow_A = mkA "" ;
lin young_A = mkA "" ;
-}
}

313
src/gaelic/MissingGla.gf Normal file
View File

@@ -0,0 +1,313 @@
resource MissingGla = open GrammarGla, Prelude in {
-- temporary definitions to enable the compilation of RGL API
oper AdAP : AdA -> AP -> AP = notYet "AdAP" ;
oper AdAdv : AdA -> Adv -> Adv = notYet "AdAdv" ;
oper AdNum : AdN -> Card -> Card = notYet "AdNum" ;
oper AdVVP : AdV -> VP -> VP = notYet "AdVVP" ;
oper AdVVPSlash : AdV -> VPSlash -> VPSlash = notYet "AdVVPSlash" ;
oper AddAdvQVP : QVP -> IAdv -> QVP = notYet "AddAdvQVP" ;
oper AdjCN : AP -> CN -> CN = notYet "AdjCN" ;
oper AdjDAP : DAP -> AP -> DAP = notYet "AdjDAP" ;
oper AdjOrd : Ord -> AP = notYet "AdjOrd" ;
oper AdnCAdv : CAdv -> AdN = notYet "AdnCAdv" ;
oper AdvAP : AP -> Adv -> AP = notYet "AdvAP" ;
oper AdvCN : CN -> Adv -> CN = notYet "AdvCN" ;
oper AdvIAdv : IAdv -> Adv -> IAdv = notYet "AdvIAdv" ;
oper AdvIP : IP -> Adv -> IP = notYet "AdvIP" ;
oper AdvImp : Adv -> Imp -> Imp = notYet "AdvImp" ;
oper AdvNP : NP -> Adv -> NP = notYet "AdvNP" ;
oper AdvQVP : VP -> IAdv -> QVP = notYet "AdvQVP" ;
oper AdvS : Adv -> S -> S = notYet "AdvS" ;
oper AdvSlash : ClSlash -> Adv -> ClSlash = notYet "AdvSlash" ;
oper AdvVP : VP -> Adv -> VP = notYet "AdvVP" ;
oper AdvVPSlash : VPSlash -> Adv -> VPSlash = notYet "AdvVPSlash" ;
oper ApposCN : CN -> NP -> CN = notYet "ApposCN" ;
oper BaseAP : AP -> AP -> ListAP = notYet "BaseAP" ;
oper BaseAdV : AdV -> AdV -> ListAdV = notYet "BaseAdV" ;
oper BaseAdv : Adv -> Adv -> ListAdv = notYet "BaseAdv" ;
oper BaseCN : CN -> CN -> ListCN = notYet "BaseCN" ;
oper BaseIAdv : IAdv -> IAdv -> ListIAdv = notYet "BaseIAdv" ;
oper BaseNP : NP -> NP -> ListNP = notYet "BaseNP" ;
oper BaseRS : RS -> RS -> ListRS = notYet "BaseRS" ;
oper BaseS : S -> S -> ListS = notYet "BaseS" ;
oper CAdvAP : CAdv -> AP -> NP -> AP = notYet "CAdvAP" ;
oper CleftAdv : Adv -> S -> Cl = notYet "CleftAdv" ;
oper CleftNP : NP -> RS -> Cl = notYet "CleftNP" ;
oper CompAP : AP -> Comp = notYet "CompAP" ;
oper CompAdv : Adv -> Comp = notYet "CompAdv" ;
oper CompCN : CN -> Comp = notYet "CompCN" ;
oper CompIAdv : IAdv -> IComp = notYet "CompIAdv" ;
oper CompIP : IP -> IComp = notYet "CompIP" ;
oper CompNP : NP -> Comp = notYet "CompNP" ;
oper ComparA : A -> NP -> AP = notYet "ComparA" ;
oper ComparAdvAdj : CAdv -> A -> NP -> Adv = notYet "ComparAdvAdj" ;
oper ComparAdvAdjS : CAdv -> A -> S -> Adv = notYet "ComparAdvAdjS" ;
oper ComplA2 : A2 -> NP -> AP = notYet "ComplA2" ;
oper ComplN2 : N2 -> NP -> CN = notYet "ComplN2" ;
oper ComplN3 : N3 -> NP -> N2 = notYet "ComplN3" ;
oper ComplSlash : VPSlash -> NP -> VP = notYet "ComplSlash" ;
oper ComplSlashIP : VPSlash -> IP -> QVP = notYet "ComplSlashIP" ;
oper ComplVA : VA -> AP -> VP = notYet "ComplVA" ;
oper ComplVQ : VQ -> QS -> VP = notYet "ComplVQ" ;
oper ComplVS : VS -> S -> VP = notYet "ComplVS" ;
oper ComplVV : VV -> VP -> VP = notYet "ComplVV" ;
oper ConjAP : Conj -> ListAP -> AP = notYet "ConjAP" ;
oper ConjAdV : Conj -> ListAdV -> AdV = notYet "ConjAdV" ;
oper ConjAdv : Conj -> ListAdv -> Adv = notYet "ConjAdv" ;
oper ConjCN : Conj -> ListCN -> CN = notYet "ConjCN" ;
oper ConjDet : Conj -> ListDAP -> Det = notYet "ConjDet" ;
oper ConjIAdv : Conj -> ListIAdv -> IAdv = notYet "ConjIAdv" ;
oper ConjNP : Conj -> ListNP -> NP = notYet "ConjNP" ;
oper ConjRS : Conj -> ListRS -> RS = notYet "ConjRS" ;
oper ConjS : Conj -> ListS -> S = notYet "ConjS" ;
oper ConsAP : AP -> ListAP -> ListAP = notYet "ConsAP" ;
oper ConsAdV : AdV -> ListAdV -> ListAdV = notYet "ConsAdV" ;
oper ConsAdv : Adv -> ListAdv -> ListAdv = notYet "ConsAdv" ;
oper ConsCN : CN -> ListCN -> ListCN = notYet "ConsCN" ;
oper ConsIAdv : IAdv -> ListIAdv -> ListIAdv = notYet "ConsIAdv" ;
oper ConsNP : NP -> ListNP -> ListNP = notYet "ConsNP" ;
oper ConsRS : RS -> ListRS -> ListRS = notYet "ConsRS" ;
oper ConsS : S -> ListS -> ListS = notYet "ConsS" ;
oper CountNP : Det -> NP -> NP = notYet "CountNP" ;
oper DetCN : Det -> CN -> NP = notYet "DetCN" ;
oper DetDAP : Det -> DAP = notYet "DetDAP" ;
oper DetNP : Det -> NP = notYet "DetNP" ;
oper DetQuantOrd : Quant -> Num -> Ord -> Det = notYet "DetQuantOrd" ;
oper EmbedQS : QS -> SC = notYet "EmbedQS" ;
oper EmbedS : S -> SC = notYet "EmbedS" ;
oper EmbedVP : VP -> SC = notYet "EmbedVP" ;
oper ExistIP : IP -> QCl = notYet "ExistIP" ;
oper ExistIPAdv : IP -> Adv -> QCl = notYet "ExistIPAdv" ;
oper ExistNP : NP -> Cl = notYet "ExistNP" ;
oper ExistNPAdv : NP -> Adv -> Cl = notYet "ExistNPAdv" ;
oper ExtAdvS : Adv -> S -> S = notYet "ExtAdvS" ;
oper ExtAdvVP : VP -> Adv -> VP = notYet "ExtAdvVP" ;
oper FunRP : Prep -> NP -> RP -> RP = notYet "FunRP" ;
oper GenericCl : VP -> Cl = notYet "GenericCl" ;
oper IdRP : RP = notYet "IdRP" ;
oper IdetCN : IDet -> CN -> IP = notYet "IdetCN" ;
oper IdetIP : IDet -> IP = notYet "IdetIP" ;
oper IdetQuant : IQuant -> Num -> IDet = notYet "IdetQuant" ;
oper ImpP3 : NP -> VP -> Utt = notYet "ImpP3" ;
oper ImpPl1 : VP -> Utt = notYet "ImpPl1" ;
oper ImpVP : VP -> Imp = notYet "ImpVP" ;
oper ImpersCl : VP -> Cl = notYet "ImpersCl" ;
oper MassNP : CN -> NP = notYet "MassNP" ;
oper NumCard : Card -> Num = notYet "NumCard" ;
oper NumDigits : Digits -> Card = notYet "NumDigits" ;
oper NumNumeral : Numeral -> Card = notYet "NumNumeral" ;
oper OrdDigits : Digits -> Ord = notYet "OrdDigits" ;
oper OrdNumeral : Numeral -> Ord = notYet "OrdNumeral" ;
oper OrdNumeralSuperl : Numeral -> A -> Ord = notYet "OrdNumeralSuperl" ;
oper OrdSuperl : A -> Ord = notYet "OrdSuperl" ;
oper PConjConj : Conj -> PConj = notYet "PConjConj" ;
oper PPartNP : NP -> V2 -> NP = notYet "PPartNP" ;
oper PartNP : CN -> NP -> CN = notYet "PartNP" ;
oper PassV2 : V2 -> VP = notYet "PassV2" ;
oper PhrUtt : PConj -> Utt -> Voc -> Phr = notYet "PhrUtt" ;
oper PositA : A -> AP = notYet "PositA" ;
oper PositAdAAdj : A -> AdA = notYet "PositAdAAdj" ;
oper PositAdvAdj : A -> Adv = notYet "PositAdvAdj" ;
oper PossNP : CN -> NP -> CN = notYet "PossNP" ;
oper PossPron : Pron -> Quant = notYet "PossPron" ;
oper PredSCVP : SC -> VP -> Cl = notYet "PredSCVP" ;
oper PredVP : NP -> VP -> Cl = notYet "PredVP" ;
oper PredetNP : Predet -> NP -> NP = notYet "PredetNP" ;
oper PrepIP : Prep -> IP -> IAdv = notYet "PrepIP" ;
oper PrepNP : Prep -> NP -> Adv = notYet "PrepNP" ;
oper ProgrVP : VP -> VP = notYet "ProgrVP" ;
oper QuestCl : Cl -> QCl = notYet "QuestCl" ;
oper QuestIAdv : IAdv -> Cl -> QCl = notYet "QuestIAdv" ;
oper QuestIComp : IComp -> NP -> QCl = notYet "QuestIComp" ;
oper QuestQVP : IP -> QVP -> QCl = notYet "QuestQVP" ;
oper QuestSlash : IP -> ClSlash -> QCl = notYet "QuestSlash" ;
oper QuestVP : IP -> VP -> QCl = notYet "QuestVP" ;
oper ReflA2 : A2 -> AP = notYet "ReflA2" ;
oper ReflVP : VPSlash -> VP = notYet "ReflVP" ;
oper RelCN : CN -> RS -> CN = notYet "RelCN" ;
oper RelCl : Cl -> RCl = notYet "RelCl" ;
oper RelNP : NP -> RS -> NP = notYet "RelNP" ;
oper RelS : S -> RS -> S = notYet "RelS" ;
oper RelSlash : RP -> ClSlash -> RCl = notYet "RelSlash" ;
oper RelVP : RP -> VP -> RCl = notYet "RelVP" ;
oper SSubjS : S -> Subj -> S -> S = notYet "SSubjS" ;
oper SelfAdVVP : VP -> VP = notYet "SelfAdVVP" ;
oper SelfAdvVP : VP -> VP = notYet "SelfAdvVP" ;
oper SelfNP : NP -> NP = notYet "SelfNP" ;
oper SentAP : AP -> SC -> AP = notYet "SentAP" ;
oper SentCN : CN -> SC -> CN = notYet "SentCN" ;
oper Slash2V3 : V3 -> NP -> VPSlash = notYet "Slash2V3" ;
oper Slash3V3 : V3 -> NP -> VPSlash = notYet "Slash3V3" ;
oper SlashPrep : Cl -> Prep -> ClSlash = notYet "SlashPrep" ;
oper SlashV2A : V2A -> AP -> VPSlash = notYet "SlashV2A" ;
oper SlashV2Q : V2Q -> QS -> VPSlash = notYet "SlashV2Q" ;
oper SlashV2S : V2S -> S -> VPSlash = notYet "SlashV2S" ;
oper SlashV2V : V2V -> VP -> VPSlash = notYet "SlashV2V" ;
oper SlashV2VNP : V2V -> NP -> VPSlash -> VPSlash = notYet "SlashV2VNP" ;
oper SlashV2a : V2 -> VPSlash = notYet "SlashV2a" ;
oper SlashVP : NP -> VPSlash -> ClSlash = notYet "SlashVP" ;
oper SlashVS : NP -> VS -> SSlash -> ClSlash = notYet "SlashVS" ;
oper SlashVV : VV -> VPSlash -> VPSlash = notYet "SlashVV" ;
oper SubjS : Subj -> S -> Adv = notYet "SubjS" ;
oper TFullStop : Phr -> Text -> Text = notYet "TFullStop" ;
oper Use2N3 : N3 -> N2 = notYet "Use2N3" ;
oper Use3N3 : N3 -> N2 = notYet "Use3N3" ;
oper UseA2 : A2 -> AP = notYet "UseA2" ;
oper UseCl : Temp -> Pol -> Cl -> S = notYet "UseCl" ;
oper UseComp : Comp -> VP = notYet "UseComp" ;
oper UseComparA : A -> AP = notYet "UseComparA" ;
oper UseCopula : VP = notYet "UseCopula" ;
oper UseN : N -> CN = notYet "UseN" ;
oper UseN2 : N2 -> CN = notYet "UseN2" ;
oper UsePN : PN -> NP = notYet "UsePN" ;
oper UsePron : Pron -> NP = notYet "UsePron" ;
oper UseQCl : Temp -> Pol -> QCl -> QS = notYet "UseQCl" ;
oper UseRCl : Temp -> Pol -> RCl -> RS = notYet "UseRCl" ;
oper UseSlash : Temp -> Pol -> ClSlash -> SSlash = notYet "UseSlash" ;
oper UseV : V -> VP = notYet "UseV" ;
oper UttAP : AP -> Utt = notYet "UttAP" ;
oper UttAdv : Adv -> Utt = notYet "UttAdv" ;
oper UttCN : CN -> Utt = notYet "UttCN" ;
oper UttCard : Card -> Utt = notYet "UttCard" ;
oper UttIAdv : IAdv -> Utt = notYet "UttIAdv" ;
oper UttIP : IP -> Utt = notYet "UttIP" ;
oper UttImpPl : Pol -> Imp -> Utt = notYet "UttImpPl" ;
oper UttImpPol : Pol -> Imp -> Utt = notYet "UttImpPol" ;
oper UttImpSg : Pol -> Imp -> Utt = notYet "UttImpSg" ;
oper UttInterj : Interj -> Utt = notYet "UttInterj" ;
oper UttNP : NP -> Utt = notYet "UttNP" ;
oper UttQS : QS -> Utt = notYet "UttQS" ;
oper UttS : S -> Utt = notYet "UttS" ;
oper UttVP : VP -> Utt = notYet "UttVP" ;
oper VPSlashPrep : VP -> Prep -> VPSlash = notYet "VPSlashPrep" ;
oper VocNP : NP -> Voc = notYet "VocNP" ;
oper above_Prep : Prep = notYet "above_Prep" ;
oper active2passive : Cl -> Cl = notYet "active2passive" ;
oper after_Prep : Prep = notYet "after_Prep" ;
oper alas_Interj : Interj = notYet "alas_Interj" ;
oper all_Predet : Predet = notYet "all_Predet" ;
oper almost_AdA : AdA = notYet "almost_AdA" ;
oper almost_AdN : AdN = notYet "almost_AdN" ;
oper already_Adv : Adv = notYet "already_Adv" ;
oper although_Subj : Subj = notYet "although_Subj" ;
oper always_AdV : AdV = notYet "always_AdV" ;
oper as_CAdv : CAdv = notYet "as_CAdv" ;
oper at_least_AdN : AdN = notYet "at_least_AdN" ;
oper at_most_AdN : AdN = notYet "at_most_AdN" ;
oper because_Subj : Subj = notYet "because_Subj" ;
oper before_Prep : Prep = notYet "before_Prep" ;
oper behind_Prep : Prep = notYet "behind_Prep" ;
oper between_Prep : Prep = notYet "between_Prep" ;
oper both7and_DConj : Conj = notYet "both7and_DConj" ;
oper but_PConj : PConj = notYet "but_PConj" ;
oper by8agent_Prep : Prep = notYet "by8agent_Prep" ;
oper by8means_Prep : Prep = notYet "by8means_Prep" ;
oper dconcat : Digits -> Digits -> Digits = notYet "dconcat" ;
oper digits2num : Digits -> Numeral = notYet "digits2num" ;
oper digits2numeral : Card -> Card = notYet "digits2numeral" ;
oper dn : Dig -> Digit = notYet "dn" ;
oper dn10 : Dig -> Sub10 = notYet "dn10" ;
oper dn100 : Dig -> Dig -> Sub100 = notYet "dn100" ;
oper dn1000 : Dig -> Dig -> Dig -> Sub1000 = notYet "dn1000" ;
oper dn1000000a : Dig -> Dig -> Dig -> Dig -> Sub1000000 = notYet "dn1000000a" ;
oper dn1000000b : Dig -> Dig -> Dig -> Dig -> Dig -> Sub1000000 = notYet "dn1000000b" ;
oper dn1000000c : Dig -> Dig -> Dig -> Dig -> Dig -> Dig -> Sub1000000 = notYet "dn1000000c" ;
oper during_Prep : Prep = notYet "during_Prep" ;
oper either7or_DConj : Conj = notYet "either7or_DConj" ;
oper every_Det : Det = notYet "every_Det" ;
oper everybody_NP : NP = notYet "everybody_NP" ;
oper everything_NP : NP = notYet "everything_NP" ;
oper everywhere_Adv : Adv = notYet "everywhere_Adv" ;
oper except_Prep : Prep = notYet "except_Prep" ;
oper few_Det : Det = notYet "few_Det" ;
oper for_Prep : Prep = notYet "for_Prep" ;
oper from_Prep : Prep = notYet "from_Prep" ;
oper he_Pron : Pron = notYet "he_Pron" ;
oper here7from_Adv : Adv = notYet "here7from_Adv" ;
oper here7to_Adv : Adv = notYet "here7to_Adv" ;
oper here_Adv : Adv = notYet "here_Adv" ;
oper how8many_IDet : IDet = notYet "how8many_IDet" ;
oper how8much_IAdv : IAdv = notYet "how8much_IAdv" ;
oper how_IAdv : IAdv = notYet "how_IAdv" ;
oper i_Pron : Pron = notYet "i_Pron" ;
oper if_Subj : Subj = notYet "if_Subj" ;
oper if_then_Conj : Conj = notYet "if_then_Conj" ;
oper in8front_Prep : Prep = notYet "in8front_Prep" ;
oper in_Prep : Prep = notYet "in_Prep" ;
oper it_Pron : Pron = notYet "it_Pron" ;
oper john_PN : PN = notYet "john_PN" ;
oper language_title_Utt : Utt = notYet "language_title_Utt" ;
oper left_Ord : Ord = notYet "left_Ord" ;
oper less_CAdv : CAdv = notYet "less_CAdv" ;
oper many_Det : Det = notYet "many_Det" ;
oper more_CAdv : CAdv = notYet "more_CAdv" ;
oper most_Predet : Predet = notYet "most_Predet" ;
oper much_Det : Det = notYet "much_Det" ;
oper nd : Digit -> Dig = notYet "nd" ;
oper nd10 : Sub10 -> Digits = notYet "nd10" ;
oper nd100 : Sub100 -> Digits = notYet "nd100" ;
oper nd1000 : Sub1000 -> Digits = notYet "nd1000" ;
oper nd1000000 : Sub1000000 -> Digits = notYet "nd1000000" ;
oper no_Quant : Quant = notYet "no_Quant" ;
oper no_Utt : Utt = notYet "no_Utt" ;
oper nobody_NP : NP = notYet "nobody_NP" ;
oper not_Predet : Predet = notYet "not_Predet" ;
oper nothing_NP : NP = notYet "nothing_NP" ;
oper num : Sub1000000 -> Numeral = notYet "num" ;
oper num2digits : Numeral -> Digits = notYet "num2digits" ;
oper on_Prep : Prep = notYet "on_Prep" ;
oper only_Predet : Predet = notYet "only_Predet" ;
oper or_Conj : Conj = notYet "or_Conj" ;
oper otherwise_PConj : PConj = notYet "otherwise_PConj" ;
oper part_Prep : Prep = notYet "part_Prep" ;
oper please_Voc : Voc = notYet "please_Voc" ;
oper possess_Prep : Prep = notYet "possess_Prep" ;
oper pot01 : Sub10 = notYet "pot01" ;
oper pot1 : Digit -> Sub100 = notYet "pot1" ;
oper pot110 : Sub100 = notYet "pot110" ;
oper pot111 : Sub100 = notYet "pot111" ;
oper pot1plus : Digit -> Sub10 -> Sub100 = notYet "pot1plus" ;
oper pot1to19 : Digit -> Sub100 = notYet "pot1to19" ;
oper pot2 : Sub10 -> Sub1000 = notYet "pot2" ;
oper pot2plus : Sub10 -> Sub100 -> Sub1000 = notYet "pot2plus" ;
oper pot3 : Sub1000 -> Sub1000000 = notYet "pot3" ;
oper pot3plus : Sub1000 -> Sub1000 -> Sub1000000 = notYet "pot3plus" ;
oper quite_Adv : AdA = notYet "quite_Adv" ;
oper right_Ord : Ord = notYet "right_Ord" ;
oper she_Pron : Pron = notYet "she_Pron" ;
oper so_AdA : AdA = notYet "so_AdA" ;
oper somePl_Det : Det = notYet "somePl_Det" ;
oper someSg_Det : Det = notYet "someSg_Det" ;
oper somebody_NP : NP = notYet "somebody_NP" ;
oper something_NP : NP = notYet "something_NP" ;
oper somewhere_Adv : Adv = notYet "somewhere_Adv" ;
oper that_Quant : Quant = notYet "that_Quant" ;
oper that_Subj : Subj = notYet "that_Subj" ;
oper there7from_Adv : Adv = notYet "there7from_Adv" ;
oper there7to_Adv : Adv = notYet "there7to_Adv" ;
oper there_Adv : Adv = notYet "there_Adv" ;
oper therefore_PConj : PConj = notYet "therefore_PConj" ;
oper they_Pron : Pron = notYet "they_Pron" ;
oper this_Quant : Quant = notYet "this_Quant" ;
oper through_Prep : Prep = notYet "through_Prep" ;
oper to_Prep : Prep = notYet "to_Prep" ;
oper too_AdA : AdA = notYet "too_AdA" ;
oper under_Prep : Prep = notYet "under_Prep" ;
oper very_AdA : AdA = notYet "very_AdA" ;
oper we_Pron : Pron = notYet "we_Pron" ;
oper whatPl_IP : IP = notYet "whatPl_IP" ;
oper whatSg_IP : IP = notYet "whatSg_IP" ;
oper when_IAdv : IAdv = notYet "when_IAdv" ;
oper when_Subj : Subj = notYet "when_Subj" ;
oper where_IAdv : IAdv = notYet "where_IAdv" ;
oper which_IQuant : IQuant = notYet "which_IQuant" ;
oper whoPl_IP : IP = notYet "whoPl_IP" ;
oper whoSg_IP : IP = notYet "whoSg_IP" ;
oper why_IAdv : IAdv = notYet "why_IAdv" ;
oper with_Prep : Prep = notYet "with_Prep" ;
oper without_Prep : Prep = notYet "without_Prep" ;
oper yes_Utt : Utt = notYet "yes_Utt" ;
oper youPl_Pron : Pron = notYet "youPl_Pron" ;
oper youPol_Pron : Pron = notYet "youPol_Pron" ;
oper youSg_Pron : Pron = notYet "youSg_Pron" ;
}

36
src/gaelic/NamesGla.gf Normal file
View File

@@ -0,0 +1,36 @@
concrete NamesGla of Names = CatGla ** open Prelude in {
-- An API layer to deal with names
-- Not part of the RGL API, but used in the AW project
-- So depends on your goals whether this is high or low priority to implement.
{-
lin
-- : GN -> NP ;
GivenName gn =
-- : SN -> NP ;
MaleSurname sn =
-- : SN -> NP ;
FemaleSurname sn =
-- : SN -> NP ;
PlSurname sn =
-- : GN -> SN -> NP ;
FullName gn sn =
lin
-- : LN -> NP ;
UseLN ln =
-- : LN -> NP ;
PlainLN ln =
-- : LN -> Adv ;
InLN ln =
-- : AP -> LN -> LN ;
AdjLN ap ln =
-}
}

215
src/gaelic/NounGla.gf Normal file
View File

@@ -0,0 +1,215 @@
concrete NounGla of Noun = CatGla ** open ResGla, Prelude in {
flags optimize=all_subs ;
lin
--2 Noun phrases
-- : Det -> CN -> NP
DetCN det cn = emptyNP ** {
art = det.s ! cn.g ;
s = \\c => cn.s ! getNForm det.dt c ;
a = NotPron det.dt ;
} ;
-- : PN -> NP ;
-- Assuming that lincat PN = lincat NP
-- UsePN pn = pn ;
-- : Pron -> NP ;
-- Assuming that lincat Pron = lincat NP
UsePron pron = emptyNP ** pron ** {
s = \\c => pron.s ! npc2cc c ;
a = IsPron pron.a
} ;
{-
-- : Predet -> NP -> NP ; -- only the man
PredetNP predet np =
-- A noun phrase can also be postmodified by the past participle of a
-- verb, by an adverb, or by a relative clause
-- low prio
-- : NP -> V2 -> NP ; -- the man seen
-- PPartNP np v2 = np ** {
-- s =
-- } ;
-- : NP -> Adv -> NP ; -- Paris today
AdvNP np adv = np ** {
s = np.s ++ "," ++ adv.s
} ;
-- : NP -> Adv -> NP ; -- boys, such as ..
ExtAdvNP np adv = AdvNP np {s = "," ++ adv.s} ;
-- : NP -> RS -> NP ; -- Paris, which is here
RelNP np rs = np ** {
} ;
-- Determiners can form noun phrases directly.
-- : Det -> NP ;
DetNP det = emptyNP ** {
s = \\_ => linDet det ;
} ;
-}
-- MassNP : CN -> NP ;
MassNP cn = emptyNP ** {
s = \\c => cn.s ! getNForm (DDef Sg Indefinite) c -- no article, singular indefinite forms, open for cases+mutations
} ;
--2 Determiners
-- The determiner has a fine-grained structure, in which a 'nucleus'
-- quantifier and an optional numeral can be discerned.
-- : Quant -> Num -> Det ;
DetQuant quant num = quant ** {
s = \\g,c => getArt quant num.n g c ++ num.s ;
s2 = \\g,c => "DUMMY" ; -- "teen" from numbers like seventeen
dt = case quant.qt of {
QDef defi => DDef num.n defi ;
QPoss agr => DPoss num.n agr } ;
} ;
-- : Quant -> Num -> Ord -> Det ;
-- DetQuantOrd quant num ord = quant ** {
-- } ;
-- Whether the resulting determiner is singular or plural depends on the
-- cardinal.
-- All parts of the determiner can be empty, except $Quant$, which is
-- the "kernel" of a determiner. It is, however, the $Num$ that determines
-- the inherent number.
NumSg = {s = [] ; n = Sg} ;
NumPl = {s = [] ; n = Pl} ;
{-
-- : Card -> Num ; -- two
NumCard card = card ;
-- : Digits -> Card ;
NumDigits dig = -- probably like OrdDigits, but choose the NCard form
-- : Numeral -> Card ;
NumNumeral num = {
s = num.s ! NCard ;
n = num.n -- inherits grammatical number (Sg, Pl, …) from the Numeral
} ;
-- : AdN -> Card -> Card ;
AdNum adn card = card ** { s = adn.s ++ card.s } ;
-- : Digits -> Ord ;
OrdDigits digs = digs ** { s = digs.s ! NOrd } ;
-- : Numeral -> Ord ;
OrdNumeral num = {
s = num.s ! NOrd
} ;
-- : A -> Ord ;
OrdSuperl a = {
s = "most" ++ a.s ! Superl
} ;
-- One can combine a numeral and a superlative.
-- : Numeral -> A -> Ord ; -- third largest
OrdNumeralSuperl num a = {
s = num.s ! NOrd ++ a.s ! Superl
} ;
-}
-- : Quant
DefArt = ResGla.defArt ;
-- : Quant
IndefArt = mkQuant [] (QDef Indefinite) ;
-- : Pron -> Quant -- my
PossPron pron = mkQuant pron.poss (QPoss pron.a) ;
--2 Common nouns
-- : N -> CN
UseN = useN ;
{-
-- : N2 -> CN ;
UseN2 n2 =
-- : N2 -> NP -> CN ;
ComplN2 n2 np =
-- : N3 -> NP -> N2 ; -- distance from this city (to Paris)
ComplN3 n3 np =
-- : N3 -> N2 ; -- distance (from this city)
Use2N3 n3 = lin N2 n3 ** { c2 = n3.c3 } ;
-- : N3 -> N2 ; -- distance (to Paris)
Use3N3 n3 = lin N2 n3 ;
-- : AP -> CN -> CN
AdjCN ap cn =
-- : CN -> RS -> CN ;
RelCN cn rs =
-- : CN -> Adv -> CN ;
AdvCN cn adv =
-- 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 VerbGla.
-- : CN -> SC -> CN ; -- question where she sleeps
SentCN cn sc =
--2 Apposition
-- This is certainly overgenerating.
-- : CN -> NP -> CN ; -- city Paris (, numbers x and y)
ApposCN cn np = cn ** {
s =
} ;
--2 Possessive and partitive constructs
-- NB. Below this, the functions are not in the API, so lower prio to implement
-- : PossNP : CN -> NP -> CN ;
-- in English: book of someone; point is that we can add a determiner to the CN,
-- so it can become "a book of someone" or "the book of someone"
PossNP cn np =
-- : Det -> NP -> NP ; -- three of them, some of the boys
CountNP det np = -- Nonsense for DefArt or IndefArt, but don't worry about that! RGL can contain weird sentences, as long as it contains the non-weird stuff we want
-- : CN -> NP -> CN ; -- glass of wine / two kilos of red apples
PartNP cn np =
--3 Conjoinable determiners and ones with adjectives
-- : DAP -> AP -> DAP ; -- the large (one)
AdjDAP dap ap = dap ** {
} ;
-- : Det -> DAP ; -- this (or that)
DetDAP det = det ;
-}
}

117
src/gaelic/NumeralGla.gf Normal file
View File

@@ -0,0 +1,117 @@
concrete NumeralGla of Numeral = CatGla [Numeral,Digits] **
open Prelude, ResGla in {
{-
lincat
Digit = LinNumeral ; -- 2..9
Sub10, -- 1..9
Sub100, -- 1..99
Sub1000, -- 1..999
Sub1000000, -- 1..999999
Sub1000000000, -- 1..999999999
Sub1000000000000 -- 1..999999999999
= LinNumeral ;
-- param CardOrd defined in ResGla
-- type LinNumeral -""-
lin
-- : Sub1000000 -> Numeral ; -- 123456 [coercion to top category]
num x = x ;
-- : Digit ;
n2 = mkNumeral "two" ;
n3 = mkNumeral "three" ;
n4 = mkNumeral "four" ;
n5 = mkNumeral "five" ;
n6 = mkNumeral "six" ;
n7 = mkNumeral "seven" ;
n8 = mkNumeral "eight" ;
n9 = mkNumeral "nine" ;
-- : Sub10 ; -- 1
-- pot01 =
-- : Digit -> Sub10 ; -- d * 1
pot0 d = d ;
-- : Sub100 ; -- 10
-- pot110 = mkNum "ten" ;
-- : Sub100 ; -- 11
-- pot111 = mkNum "eleven" ;
-- : Digit -> Sub100 ; -- 10 + d
-- pot1to19 d =
-- : Sub10 -> Sub100 ; -- coercion of 1..9
pot0as1 n = n ;
-- : Digit -> Sub100 ; -- d * 10
-- pot1 d =
-- : Digit -> Sub10 -> Sub100 ; -- d * 10 + n
-- pot1plus d e =
-- : Sub100 -> Sub1000 ; -- coercion of 1..99
pot1as2 n = n ;
-- : Sub10 -> Sub1000 ; -- m * 100
-- pot2 d =
-- : Sub10 -> Sub100 -> Sub1000 ; -- m * 100 + n
-- pot2plus d e =
-- : Sub1000 -> Sub1000000 ; -- coercion of 1..999
pot2as3 n = n ;
-- : Sub1000 -> Sub1000000 ; -- m * 1000
-- pot3 d =
-- : Sub1000 -> Sub1000 -> Sub1000000 ; -- m * 1000 + n
-- pot3plus d e =
--------------------------------------------------------------------------------
-- Numerals as sequences of digits have a separate, simpler grammar
--
lincat
Dig = LinDig ; -- single digit 0..9
lin
-- : Dig -> Digits ; -- 8
IDig d = d ;
-- : Dig -> Digits -> Digits ; -- 876
IIDig d e = {
s = table {
NCard => glue (d.s ! NCard) (e.s ! NCard) ;
NOrd => glue (d.s ! NCard) (e.s ! NOrd)
} ;
n = Pl ;
} ;
-- : Dig ;
D_0 = mkDig "0" ;
D_1 = mkDig "1" ;
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
LinDig : Type = {s : CardOrd => Str ; n : Number} ;
mkDig : Str -> LinDig = \s -> {
s = table {
NCard => s ;
NOrd => s + "th"
} ;
n = Pl ; -- TODO: handle number 1
} ;
-}
}

213
src/gaelic/ParadigmsGla.gf Normal file
View File

@@ -0,0 +1,213 @@
resource ParadigmsGla = open CatGla, ResGla, NounGla, Prelude in {
oper
--2 Parameters
--
-- To abstract over number, valency and (some) case names,
-- we define the following identifiers. The application programmer
-- should always use these constants instead of the constructors
-- defined in $ResSom$.
Prep : Type ;
noPrep : Prep ;
-- Add more overload instances if needed for all categories!
--2 Nouns
mkN : overload {
mkN : Str -> N ; -- Predictable nouns
} ;
mkPN : overload {
mkPN : Str -> PN ; -- Proper nouns
} ;
--2 Adjectives
mkA : overload {
mkA : Str -> A ; -- Predictable adjective
} ;
mkA2 : overload {
mkA2 : Str -> A2 ; -- Predictable A2, no preposition
mkA2 : A -> Prep -> A2 ; -- A2 made from A and Prep
} ;
--2 Verbs
-- Verbs
mkV : overload {
mkV : Str -> V ; -- Predictable verb
} ;
mkV2 : overload {
mkV2 : Str -> V2 ; -- Predictable transitive verb
mkV2 : V -> Prep -> V2 ; -- V2 made from V and Prep
} ;
mkV3 : overload {
mkV3 : V -> V3 ; -- No prepositions
mkV3 : V -> Prep -> Prep -> V3 ; -- Prepositions for direct and indirect objects given
} ;
mkVV : overload {
mkVV : V -> VV ;
} ;
mkVA : overload {
mkVA : V -> VA ;
} ;
mkVQ : overload {
mkVQ : V -> VQ ;
} ;
mkVS : overload {
mkV : V -> VS ;
} ;
-- Etc. do the same for other V subcats (V2A, V2V, V2S, …)
-----
--2 Structural categories
-- If prepositions take case, add that as argument to mkPrep
-- mkPrep : overload {
-- mkPrep : Str -> Prep ;
-- } ;
-- TODO: should export the whole set of morphologically complex prepositions here and not let users construct them alone
-- but should include funs like "override complement case for existing preps"
mkConj : overload {
mkConj : (and : Str) -> Conj ; -- (coffee) and (tea)
mkConj : (either : Str) -> (or : Str) -> Conj ; -- either (coffee) or (tea)
} ;
mkSubj : overload {
mkSubj : Str -> Subj ;
} ;
mkAdv : overload {
mkAdv : Str -> Adv ;
} ;
mkAdV : overload {
mkAdV : Str -> AdV ;
} ;
mkAdA : overload {
mkAdA : Str -> AdA ;
} ;
--.
-------------------------------------------------------------------------------
-- The definitions should not bother the user of the API. So they are
-- hidden from the document.
Prep = CatGla.Prep ;
noPrep = lin Prep ResGla.emptyPrep ;
-- Add more overload instances if needed for all categories!
-- For explanation of `lin N`, see
-- https://inariksit.github.io/gf/2018/05/25/subtyping-gf.html#lock-fields
mkN = overload {
mkN : Str -> N = \s -> lin N (ResGla.smartN s (s+"a") (s+"an") Masc) ;
-- TODO: more overload instances
} ;
{-
mkPN = overload {
mkPN : Str -> PN = …
} ;
--2 Adjectives
mkA = overload {
mkA : Str -> A = \s -> …
} ;
mkA2 = overload {
mkA2 : Str -> A2 = \s -> …
mkA2 : A -> Prep -> A2 = \s -> …
} ;
--2 Verbs
-}
-- Verbs
mkV = overload {
mkV : Str -> V = \s -> lin V (mkVerb s) ;
} ;
{-
mkV2 = overload {
mkV2 : Str -> V2 = \s -> …
mkV2 : V -> Prep -> V2 = \s -> …
} ;
mkV3 = overload {
mkV3 : V -> V3 = \s -> …
mkV3 : V -> Prep -> Prep -> V3 = \s -> …
} ;
mkVV = overload {
mkVV : V -> VV = \s -> …
} ;
mkVA = overload {
mkVA : V -> VA = \s -> …
} ;
mkVQ = overload {
mkVQ : V -> VQ = \s -> …
} ;
mkVS = overload {
mkV : V -> VS = \s -> …
} ;
-- Etc. do the same for other V subcats (V2A, V2V, V2S, …)
-----
-}
{-
-- If prepositions take case, add that as argument to mkPrep
mkPrep = overload {
mkPrep : Str -> Prep = \s -> lin Prep {s = s} ;
} ;
mkConj = overload {
mkConj : (and : Str) -> Conj = \s -> …
mkConj : (either : Str) -> (or : Str) -> Conj = \s -> …
} ;
mkSubj = overload {
mkSubj : Str -> Subj = \s -> …
} ;
mkAdv = overload {
mkAdv : Str -> Adv = \s -> …
} ;
mkAdV = overload {
mkAdV : Str -> AdV = \s -> …
} ;
mkAdA = overload {
mkAdA : Str -> AdA = \s -> …
} ;
-}
--------------------------------------------------------------------------------
}

27
src/gaelic/PhraseGla.gf Normal file
View File

@@ -0,0 +1,27 @@
concrete PhraseGla of Phrase = CatGla ** open Prelude, ResGla in {
lin
PhrUtt pconj utt voc = {s = pconj.s ++ utt.s ++ voc.s} ;
UttS s = s ;
{-
UttQS qs = qs ;
UttIAdv iadv = iadv ;
UttNP np =
UttIP ip =
UttImpSg pol imp = { s = pol.s ++ imp.s ! Sg ! pol.p } ;
UttImpPl pol imp =
UttImpPol pol imp = {s = pol.s ++ imp.s ! Sg ! pol.p} ;
UttVP vp = {s = linVP vp} ;
UttAP ap = { s = ap.s } ;
UttAdv adv = {s = } ;
UttCN n = {s = } ;
UttCard n = {s = } ;
UttInterj i = i ; -}
NoPConj = {s = []} ;
-- PConjConj conj = {s = conj.s1 ++ conj.s2 ! …} ;
NoVoc = {s = []} ;
-- VocNP np = { s = "," ++ np.s ! … } ;
}

105
src/gaelic/QuestionGla.gf Normal file
View File

@@ -0,0 +1,105 @@
concrete QuestionGla of Question = CatGla ** open
Prelude, ResGla, ParadigmsGla, (V=VerbGla), (Noun=NounGla), (S=StructuralGla) in {
-- A question can be formed from a clause ('yes-no question') or
-- with an interrogative.
-- Interrogative pronouns can be formed with interrogative
-- determiners, with or without a noun.
{-
lin
-- : IDet -> CN -> IP ; -- which five songs
IdetCN idet cn = Noun.DetCN idet cn ** {
} ;
-- : IDet -> IP ; -- which five
IdetIP idet = Noun.DetNP idet ** {sp = idet.sp};
-- : IQuant -> Num -> IDet ; -- which (five)
IdetQuant iquant num = iquant ** {
} ;
-- : IP -> ClSlash -> QCl ; -- whom does John love
QuestSlash ip cls = cls ** {
} ;
-- : Cl -> QCl ;
QuestCl cl = cl ** {
};
-- : IP -> VP -> QCl ;
QuestVP ip cl = cl ** {
} ;
-- : IAdv -> Cl -> QCl ; -- why does John walk
QuestIAdv iadv cls = {
} ;
-- : IP -> IComp ;
CompIP ip = {s = ip.s ! } ; -- who (is it)
-- : IComp -> NP -> QCl ; -- where is John?
QuestIComp icomp np = {
} ;
-- Interrogative pronouns can be formed with interrogative
-- determiners, with or without a noun.
-- : IDet -> CN -> IP ; -- which five songs
IdetCN idet cn =
-- : IDet -> IP ; -- which five
IdetIP idet =
-- They can be modified with adverbs.
-- : IP -> Adv -> IP ; -- who in Paris
AdvIP = Noun.AdvNP ;
-- Interrogative quantifiers have number forms and can take number modifiers.
-- : IQuant -> Num -> IDet ; -- which (five)
IdetQuant = Noun.DetQuant ;
-- Interrogative adverbs can be formed prepositionally.
-- : Prep -> IP -> IAdv ; -- with whom
PrepIP prep ip =
-- They can be modified with other adverbs.
-- : IAdv -> Adv -> IAdv ; -- where in Paris
AdvIAdv iadv adv =
-- Interrogative complements to copulas can be both adverbs and
-- pronouns.
-- : IAdv -> IComp ;
CompIAdv iadv = iadv ; -- where (is it)
-- More $IP$, $IDet$, and $IAdv$ are defined in $Structural$.
-- Wh questions with two or more question words require a new, special category.
lincat
-- buy what where
QVP =
lin
-- : VPSlash -> IP -> QVP ; -- buys what
ComplSlashIP vps ip =
-- : VP -> IAdv -> QVP ; -- lives where
AdvQVP vp iadv =
-- : QVP -> IAdv -> QVP ; -- buys what where
AddAdvQVP qvp iadv =
-- : IP -> QVP -> QCl ; -- who buys what where
QuestQVP ip qvp =
-}
}

24
src/gaelic/RelativeGla.gf Normal file
View File

@@ -0,0 +1,24 @@
concrete RelativeGla of Relative = CatGla ** open
ResGla, Prelude in {
{-
lin
-- : Cl -> RCl ; -- such that John loves her
RelCl cl = cl ** {
} ;
-- : RP -> VP -> RCl ;
RelVP rp vp = {
} ;
-- : RP -> ClSlash -> RCl ; -- who I went with
RelSlash rp cls = {
} ;
-- : RP ;
IdRP = {s = "that"} ;
-- : Prep -> NP -> RP -> RP ; -- the mother of whom
FunRP prep np rp =
-}
}

625
src/gaelic/ResGla.gf Normal file
View File

@@ -0,0 +1,625 @@
resource ResGla = open Prelude, Predef in {
--------------------------------------------------------------------------------
-- General notes
-- ** Naming **
{-
I'm using the naming scheme for lincats and opers as explained here:
https://inariksit.github.io/gf/2018/08/28/gf-gotchas.html#my-naming-scheme-for-lincats-and-opers
-}
-- ** File structure **
-- The rest of this module is organised as follows:
-----------------------------
-- Grammatical categor(y|ies)
{-
General comments on the cat(s)
params related to the cat(s)
opers related to the cat(s)
-}
--------------------------------------------------------------------------------
-- Nouns
param
Gender = Masc | Fem ;
CoreCase = Nom Mutation | Gen | Dat Mutation ;
Case = CC CoreCase | Voc ;
-- NPCase = NPC CoreCase | NPVoc ;
Mutation = Lenited | NoMutation ;
Number = Sg
| Pl
;
Person = P1 | P2 | P3 ;
Definiteness = Definite | Indefinite ; -- Some prepositions govern different case when definite vs. indefinite
oper
NOM : CoreCase = Nom NoMutation ; -- shorthand
npc2cc : Case -> CoreCase = \npc -> case npc of {
CC c => c ;
_ => NOM
} ;
param
NForm =
Indef Number CoreCase
| Def Number Case
| Dual -- only after number 2, only for a handful of nouns. TODO: does it have different cases?
;
oper
getNForm : DType -> Case -> NForm = \d,c ->
case <d,c> of {
<DDef n Indefinite,Voc> => Def n Voc ;
<DDef n Indefinite,CC c> => Indef n c ;
<DDef n Definite,c> => Def n c ;
<DPoss n _,Voc> => Indef n NOM ; -- as per Michal on Discord https://discord.com/channels/865093807343140874/865094084683366400/1409838154550087711 . TODO: Def or Indef nom ????
<DPoss n _,c> => Def n c -- ????????????????
} ;
LinN : Type = {
base, -- tunnag fuil loch fear litir bròg
dat, -- -"- bròig (1B)
gen, -- tunnaige fala locha fir litreach ("de-palatalised") bròige
pl, -- tunnagan lochan fir litrichean brògan
-- pldat, -- Krasimir's and Katya's automatic extraction suggests there's a difference, but I don't see it
-- add this form if we turn out to need it
-- TODO: for nouns that only use suffixes, should these just show theoretical forms?
lenited, -- thunnag fhuil loch fhear
palatalised, -- tunnaig fuil loch fir
lenited_palatalised, -- thunnaig fhuil loch fhir
lenited_plural
: Str ;
g : Gender
} ;
mk5N : (nom,gen,dat,pl : Str) -> Gender -> LinN = \brog,broige,broig,brogan,g -> {
base = brog ;
gen = broige ;
dat = broig ;
pl = brogan ;
lenited_plural = lenite brogan ;
lenited = bhrog ;
palatalised = broig ;
lenited_palatalised = bhroig ;
g = g
} where {
bhrog : Str = lenite brog ;
bhroig : Str = lenite broig } ;
smartN = overload {
smartN : (nom,gen,pl : Str) -> Gender -> LinN = \loch,locha,lochan,g ->
mk5N loch locha loch lochan g ;
smartN : (base : Str) -> Gender -> LinN = \tunnag,g ->
let fm : Str -> Str -> Str = \fem,masc -> case g of {
Fem => fem ; Masc => masc } ;
tunnaig : Str = palatalise tunnag ;
tunnaige : Str = fm (tunnaig + "e") tunnaig ;
tunnagan : Str = fm (tunnag + "an") tunnaig ;
in mk5N tunnag tunnaige tunnag tunnagan g
} ;
vowel : pattern Str = #("a"|"à"|"e"|"i"|"ì"|"o"|"u") ; -- more accents?
diphthong : pattern Str = #("ea"|"oi") ;
lenitable : pattern Str = #("b"|"c"|"f"|"g"|"m"|"p"|"d"|"t"|"s") ;
labial : pattern Str = #("b"|"f"|"m"|"p") ;
palatalise : Str -> Str = \lamh -> case lamh of {
f@? + "ea" + r => f + "i" + r ; -- TODO is this irregular?
boireann@(_ + (#vowel|#diphthong) + ? + _ + (#vowel|#diphthong) + ? + _)
+ a@#vowel + ch => boireann + a + "i" + ch ;
tunn@(_ + (#vowel|#diphthong) + ? + _)
+ a@#vowel + g => tunn + a + "i" + g ;
l + a@#vowel + mh => l + a + "i" + mh ;
_ => lamh } ;
lenite : Str -> Str = \tunnag -> case tunnag of {
"s" + ("p"|"g"|"m"|"t") + _ => tunnag ; -- sp, sg, sm, st don't lenite
t@#lenitable + "h" + _ => tunnag ; -- don't lenite twice
t@#lenitable + unnag => t + "h" + unnag ;
_ => tunnag } ;
-- For inflection paradigms, see http://www.grammaticalframework.org/doc/tutorial/gf-tutorial.html#toc56
mkNoun : (b,g,d,pl,l,p,lp,lpl : Str) -> Gender -> LinN = \b,gen,dat,pl,l,p,lp,lpl,g -> {
base = b ; -- tunnag fuil loch fear litir
gen = gen ; -- tunnaige fala locha fir litreach
dat = dat ; -- tunnaige fala locha fir litreach
pl = pl ; -- tunnagan lochan fir litrichean
lenited = l ; -- thunnag fhuil loch fhear litir ?
palatalised = p ; -- tunnaig fuil loch fir litir ?
lenited_palatalised = lp ; -- thunnaig fhuil loch fhir litir ?
lenited_plural = lpl ; -- thunnagan lochan fhir litrichean ?
g = g ;
} ;
-- TODO: no idea if this is even remotely correct
-- can always replace morphology with Katya's automated tool
useN : LinN -> LinCN = \n -> n ** {
s = table {
Indef Sg (Nom NoMutation) => n.base ;
Indef Sg (Nom Lenited) => n.lenited ;
Indef Sg Gen => n.gen ;
Indef Sg (Dat NoMutation) => n.dat ;
Indef Sg (Dat Lenited) => fm n.lenited_palatalised n.lenited ; ------- FIXME later
Def Sg (CC (Nom NoMutation)) => n.base ;
Def Sg (CC (Nom Lenited)) => n.lenited ;
Def Sg (CC Gen) => fm n.gen n.lenited_palatalised ;
Def Sg (CC (Dat NoMutation)) => fm n.palatalised n.lenited ;
Def Sg (CC (Dat Lenited)) => fm n.lenited_palatalised n.lenited ;
Def Sg Voc => fm n.lenited n.lenited_palatalised ;
Indef Pl (Nom NoMutation) => fm n.pl n.palatalised ;
Indef Pl (Nom Lenited) => fm n.lenited_plural n.lenited_palatalised ;
Indef Pl Gen => n.lenited ;
Indef Pl (Dat NoMutation) => fm n.pl n.palatalised ; -- TODO: is this overfitting based on the 5 nouns i know? probably!
Indef Pl (Dat Lenited) => fm n.lenited_plural n.lenited_palatalised ; -- TODO: see above
Def Pl (CC (Nom NoMutation)) => n.pl ;
Def Pl (CC (Nom Lenited)) => n.lenited_plural ;
Def Pl (CC Gen) => n.base ;
Def Pl (CC (Dat NoMutation)) => n.pl ;
Def Pl (CC (Dat Lenited)) => n.lenited_plural ;
Def Pl Voc => glue n.lenited "a" ;
Dual => fm n.palatalised n.base -- TODO: is this correct? only for 1-syllable feminine nouns?
}
} where {
fm : Str -> Str -> Str = \fem,masc -> case n.g of {
Fem => fem ;
Masc => masc
}
};
LinCN : Type = {
s : NForm =>
Str ;
g : Gender ;
-- ** postmod/premod/… : Str -- if needed? determiners can put stuff after head but it only comes at NP
} ;
linCN : LinCN -> Str = \cn -> cn.s ! Indef Sg NOM
-- ++ cn.postmod -- If there is another field, use here
;
-- some test nouns — TODO: do smart paradigms
tunnag_N : LinN = {
base,dat = "tunnag" ;
gen = "tunnaige" ;
pl = "tunnagan" ;
lenited_plural = "thunnagan" ;
lenited = "thunnag" ;
palatalised = "tunnaig" ;
lenited_palatalised = "thunnaig" ;
g = Fem ;
} ;
boireannach_N : LinN = {
base,dat = "boireannach" ;
pl,gen = "boireannaich" ;
lenited = "bhoireannach" ;
palatalised = "boireannaich" ;
lenited_palatalised,
lenited_plural = "bhoireannaich" ;
g = Masc ;
} ;
---------------------------------------------
-- Proper noun
oper
LinPN : Type = {
s : Str ;
n : Number ; -- Proper nouns often have already an inherent number; you don't usually say "a Paris / many Parises"
g : Gender ; -- inherent gender/noun class, if your language has that
} ;
---------------------------------------------
-- Numeral
-- Used in NumeralGla
param
CardOrd = NCard | NOrd ;
oper
LinNumeral : Type = {s : CardOrd => Str ; n : Number} ;
mkNumeral : (card, ord : Str) -> LinNumeral = \card,ord -> {
s = table {
NCard => card ; -- aon(a) -- TODO: allomorph of this depends on the following word?
NOrd => ord -- a' chiad
} ;
n = Pl ; -- NB. singular for 1, 2, 20 + multiples of 20 and 100 (Lamb, p. 218)
} ;
---------------------------------------------
-- Pronoun
oper
LinPron : Type = {
s : CoreCase => Str ;
a : PronAgr ;
poss : Str ; -- if a case is needed, it comes from the Prep! TODO verify this (do we ever need a dative for poss pron without a prep present? some preps merge, others not, but the pronoun is present in all the preps. why this way—I counted on there being fewer pronouns than prepositions.)
empty : Str ; -- to prevent metavariables
} ;
-- TODO: nicer API where you can give Person, Number, Gender etc.
-- not this weird unintuitive Agr param
mkPron : (subj,poss : Str) -> PronAgr -> LinPron = \subj,poss,agr -> {
s = table {
Nom _ => subj ;
_ => "gam" -- TODO fix this
} ;
poss = poss ;
a = agr ;
empty = []
} ;
---------------------------------------------
-- NP
{-
In the RGL, a NP may come from a common noun, proper noun or pronoun.
Pronouns are the only ones that have an inherent person (nouns are almost always 3rd person! please give me counterexamples if you can think of any.)
So we can often say that NP's lincat is the same as Prons.
NB. for later, when you want to make Pron into possessives, you may need more fields in LinPron than in LinNP.
That's why I'm copying over the definition below, instead of the neater `LinNP : Type = LinPron`.
-}
oper
LinNP : Type = {
art, -- to be replaced with a combo coming from Prep, if argument of PrepNP? see Lamb p. 225
-- TODO: is that an issue when the allomorph has been chosen by an inherent param in CN?
-- does that param need to be kept in LinNP, and Prep need an inflection table from that param?
-- or do we have an exhaustive list of prepositions that merge, and we can make that into a param and put on a LHS here?
s : Case => Str ; -- TODO: is lenition a separate dimension from case?
empty : Str ; -- to avoid metavariables
a : Agr ; -- includes whether it's pron and whether it's definite. TODO: probably can make even leaner (wasn't a prio so far).
} ;
linNP : LinNP -> Str = \np -> np.art ! CC NOM ++ np.s ! CC NOM ;
emptyNP : LinNP = {
s,art = \\_ => [] ;
a = NotPron (DDef Sg Indefinite) ; -- we assume pronouns are definite by default. also it just matters for PrepNP.
empty = [] ;
} ;
--------------------------------------------------------------------------------
-- Det, Quant, Card, Ord
param
QuantForm = QSg Gender CoreCase | QPl CoreCase ;
QType = QDef Definiteness | QPoss PronAgr ;
DType = DDef Number Definiteness | DPoss Number PronAgr ;
-- The minimum forms that preposition merges with
PrepAgr = PrepBase | PrepDefiniteArticle Number | PrepObjectPron PronAgr | PrepPossPron PronAgr ;
oper
agr2pagr : Agr -> PrepAgr = \a -> case a of {
NotPron (DDef n Definite) => PrepDefiniteArticle n ;
NotPron (DPoss n agr) => PrepPossPron agr ;
IsPron agr => PrepObjectPron agr ;
NotPron _ => PrepBase
} ;
getQuantForm : Number -> Gender -> Case -> QuantForm = \n,g,c -> case <n,c> of {
<Sg,CC c> => QSg g c ;
<Sg,_> => QSg g NOM ; --- ??????
<Pl,CC c> => QPl c ;
<Pl,_> => QPl NOM --- ??????
} ;
getArt : LinQuant -> Number -> Gender -> Case -> Str = \quant,n,g,c -> case c of {
Voc => "" ; -- TODO: add empty field to article to not get metavariables
_ => quant.s ! getQuantForm n g c
} ;
LinQuant : Type = {
s -- quantifier in a context, e.g. 'this (cat) (is nice)'
: QuantForm => Str ;
sp : Str ; -- quantifier as standalone, e.g. 'this (is nice)'
qt : QType ; -- Definite, Indefinite or Possessive
} ;
LinDet : Type = {
s,s2 : Gender => Case => Str ;
sp : Str ;
dt : DType ; -- includes number
} ;
LinNum : Type = {
s : Str ;
n : Number ;
} ;
-- Can you reuse your mkNoun? Do nouns and quantifiers inflect the same way?
mkQuant : Str -> QType -> LinQuant = \this,qt -> {
s = \\_ => this ;
sp = this ;
qt = qt ;
} ;
mkDet : (seven, teen : Str) -> Definiteness -> Number -> LinDet = \aon, deug, defi, num -> {
s = \\_,_ => aon ;
s2 = \\_,_ => deug ;
sp = aon ;
dt = DDef num defi
} ;
-- Allomorphs of the definite article
AN, AN_L, NA, NAN : Str ;
AN = pre {
#vowel => "an t-" ++ BIND ;
#labial => "am" ;
_ => "an" } ;
-- N.B. lenition comes from a different param, this is just a shorthand
AN_L = pre {
"b"|"m"|"p"|"c"|"g" => "a'" ;
"f" => "an" ;
"sl"|"sn"|"sr"|
"sa"|"sà"|"si"|"sì"|
"se"|"so"|"su" => "an t-" ++ BIND ;
_ => "an" } ;
NA = pre {
#vowel => "na h-" ++ BIND ;
_ => "na" } ;
NAN = pre {
#labial => "nam" ;
_ => "nan" } ;
defArt : LinQuant = {
s = table {
QSg Masc (Nom _) => AN ;
QSg Masc _ => AN_L ;
QSg Fem Gen => NA ;
QSg Fem _ => AN_L ;
QPl Gen => NAN ;
QPl _ => NA
} ;
sp = "an" ; --- meaningless for DefArt
qt = QDef Definite ;
} ;
--------------------------------------------------------------------------------
-- Adpositions
{- The main use of Prep is in the fun
PrepNP : Prep -> NP -> Adv
Despite the name of the RGL category, a 'Prep' can be a preposition, postposition,
or just an instruction to choose a particular case from the NP.
A language may use one, two or all these strategies.
-}
-- TODO: prepositions can merge with articles
-- Lamb, page 210: obair _sa_ cheàrdaich 'working _in+the_ forge'
-- more on preps: Lamb, p.224
param
PronAgr = Sg1 | Sg2 | Sg3 Gender | Pl1 | Pl2 | Pl3 ;
-- PronType = Object | Possessive ;
Agr = NotPron DType | IsPron PronAgr ;
oper
getDefi : Agr -> Definiteness = \a -> case a of {
NotPron (DDef n d) => d ;
_ => Definite
} ;
LinPrep : Type = {
s : PrepAgr => Str ; -- bare: aig 'on', inflected: agam 'on me', agad 'on you', …
c2 : Definiteness => CoreCase ; -- most often dative
replacesObjPron : Bool ; -- NP has to keep track of if it comes from a Pron
-- If your language has both pre- and postpositions, you need an inherent parameter in Prep to record which one a given Prep is.
-- position : PreOrPost ;
-- Some cause lenition—is that separate from case?
} ;
PrepForms : Type = {base, sg1, sg2, sg3M, sg3F, pl1, pl2, pl3 : Str} ;
H, N, LENITION_DEBUG : Str ;
H = pre {#vowel => "h" ++ BIND ; _ => []} ;
N = pre {#vowel => "n-" ++ BIND ; _ => []} ;
LENITION_DEBUG = "^L" ; -- Only for debugging purposes—replace with empty string for production
invarPrepForms : Str -> PrepForms = \str ->
{base=str ; sg1=str++"mo" + LENITION_DEBUG; sg2=str++"do" + LENITION_DEBUG; sg3M=str++"a" + LENITION_DEBUG;
sg3F=str++"a"++H; pl1=str++"àr"++N; pl2=str++"ùr"++N; pl3=str++AN} ; -- AN is defined as an allomorph to def art, TODO does the possessive add t- before vowel?
mkLinPrep : (replacesObjPron : Bool)
-> (indef,defi : CoreCase)
-> (objForms, possForms : PrepForms)
-> LinPrep =
\replaces,casIndef,casDef,objForms,possForms -> {
s = table {
PrepBase => aig ;
PrepDefiniteArticle Sg => aig + "✨" ++ BIND ++ AN ; -- TODO: merge with article!!!!!!
PrepDefiniteArticle Pl => aig + "✨" ++ BIND ++ NA ; -- TODO: merge with article!!!!!!
PrepObjectPron Sg1 => agam ;
PrepObjectPron Sg2 => agad ;
PrepObjectPron (Sg3 Masc) => aige ;
PrepObjectPron (Sg3 Fem) => aice ;
PrepObjectPron Pl1 => againn ;
PrepObjectPron Pl2 => agaibh ;
PrepObjectPron Pl3 => aca ;
PrepPossPron Sg1 => gam ;
PrepPossPron Sg2 => gad ;
PrepPossPron (Sg3 Masc) => ga_L ;
PrepPossPron (Sg3 Fem) => ga_H ;
PrepPossPron Pl1 => gar ;
PrepPossPron Pl2 => gur ;
PrepPossPron Pl3 => gan } ;
c2 = table {Indefinite => casIndef ; Definite => casDef} ;
replacesObjPron = replaces
} where {
aig = objForms.base ; agam = objForms.sg1 ; agad = objForms.sg2 ;
aige = objForms.sg3M ; aice = objForms.sg3F ;
againn = objForms.pl1 ; agaibh = objForms.pl2 ; aca = objForms.pl3 ;
gam = possForms.sg1 ; gad = possForms.sg2 ;
ga_L = possForms.sg3M ; ga_H = possForms.sg3F ;
gar = possForms.pl1 ; gur = possForms.pl2 ; gan = possForms.pl3 ;
} ;
smartPrep : (objForms, possForms : PrepForms) -> LinPrep =
mkLinPrep True (Dat Lenited) (Dat Lenited) ;
mkPrep = overload {
mkPrep : (objForms, possForms : PrepForms) -> LinPrep = smartPrep ;
mkPrep : (objForms, possForms : PrepForms) -> Mutation -> LinPrep =
\obj,poss,mutation -> mkLinPrep True (Dat mutation) (Dat mutation) obj poss ;
mkPrep : (replacesObjPron : Bool) -> (indef,defi : CoreCase)
-> (objForms, possForms : PrepForms) -> LinPrep = mkLinPrep
} ;
emptyPrep : LinPrep = {
s = \\_ => [] ;
poss = \\_ => [] ;
c2 = \\_ => Dat Lenited ;
replacesObjPron = False
} ;
aigPrep : LinPrep =
mkPrep
{base="aig"; sg1="agam"; sg2="agad"; sg3M="aige"; sg3F="aice"; pl1="againn"; pl2="agaibh"; pl3="aca"}
{base="aig"; sg1="'gam" + LENITION_DEBUG; sg2="'gad" + LENITION_DEBUG; sg3M="'ga" + LENITION_DEBUG; sg3F="'ga"++H; pl1="'gar"++N; pl2="'gur"++N; pl3="'gan"}
NoMutation ;
airPrep : LinPrep =
mkPrep
{base="air"; sg1="orm"; sg2="ort"; sg3M="air"; sg3F="oirre"; pl1="oirrn"; pl2="oirbh"; pl3="orra"}
(invarPrepForms "air")
NoMutation ;
annPrep : LinPrep =
mkPrep
{base="ann"; sg1="annam"; sg2="annad"; sg3M="ann"; sg3F="innte"; pl1="annainn"; pl2="annaibh"; pl3="annta"}
{base="ann"; sg1="'nam" + LENITION_DEBUG; sg2="'nad" + LENITION_DEBUG; sg3M="'na" + LENITION_DEBUG; sg3F="'na"++H; pl1="'nar"++N; pl2="'nur"++N; pl3="'nan"}
NoMutation ;
àsPrep : LinPrep =
mkPrep
{base="às"; sg1="asam"; sg2="asad"; sg3M="às"; sg3F="aiste"; pl1="asainn"; pl2="asaibh"; pl3="asda"}
(invarPrepForms "às")
NoMutation ;
bhoPrep : LinPrep =
mkPrep
{base="bho"; sg1="bhuam"; sg2="bhuat"; sg3M="bhuaithe"; sg3F="bhuaipe"; pl1="bhuainn"; pl2="buaibh"; pl3="bhuapa"}
{base="bho"; sg1="bhom" + LENITION_DEBUG; sg2="bhod" + LENITION_DEBUG; sg3M="bho a" + LENITION_DEBUG; sg3F="bho a"++H; pl1="bhor"++N; pl2="bhu"++N; pl3="bhon"}
Lenited ;
{- dePrep : LinPrep = …-}
doPrep : LinPrep =
mkPrep
{base="do"; sg1="dhomh"; sg2="dhut"; sg3M="dha"; sg3F="dhi"; pl1="dhuinn"; pl2="dhuibh"; pl3="dhiubh"}
{base="bho"; sg1="dom" + LENITION_DEBUG; sg2="dod" + LENITION_DEBUG; sg3M="dha" + LENITION_DEBUG; sg3F="dha"++H; pl1="dor"++N; pl2="dhur"++N; pl3="don"}
Lenited ;
{- eadarPrep : LinPrep = …-}
{- foPrep : LinPrep = …-}
guPrep : LinPrep =
mkPrep
True {-replaces object pronoun-}
(Dat NoMutation) {-governs dative when indefinite, no mutation-}
Gen {-governs genitive when definite-}
{base="gu"; sg1="ugam"; sg2="ugad"; sg3M="uige"; sg3F="uice"; pl1="ugainn"; pl2="ugaibh"; pl3="uca"}
{base="gu"; sg1="gum" + LENITION_DEBUG; sg2="gud" + LENITION_DEBUG; sg3M="gu a" + LENITION_DEBUG; sg3F="gu a"++H; pl1="gar"++N; pl2="gur"++N; pl3="gun"}
;
--------------------------------------------------------------------------------
-- Adjectives
-- Lamb p. 220 basic morphology, degree
-- Lamb p. 246: predicative adjectives
LinA : Type = SS ;
LinA2 : Type = LinA ;
mkAdj : Str -> LinA = \str -> {s = str} ;
AdjPhrase : Type = LinA ; -- ** {compar : Str} ;
--------------------------------------------------------------------------------
-- Verbs
param
VAgr = VSg1 | VSg2 | VSg3 | VPl1 | VPl2 | VPl3 ;
VForm = VInf | VPres VAgr | VPast VAgr ; -- TODO
oper
nagr2vagr : Agr -> VAgr = \a -> case a of {
NotPron (DDef Sg _) => VSg3 ;
NotPron (DDef Pl _) => VPl3 ;
-- this is the number of the possessee—number of possessor only matters for PrepNP!
NotPron (DPoss Sg _) => VSg3 ;
NotPron (DPoss Pl _) => VPl3 ;
-- this is subject pronoun, which agrees with verb
IsPron Sg1 => VSg1 ;
IsPron Sg2 => VSg2 ;
IsPron (Sg3 _) => VSg3 ;
IsPron Pl1 => VPl1 ;
IsPron Pl2 => VPl2 ;
IsPron Pl3 => VPl3
} ;
LinV : Type = {
s : VForm => Str
} ;
LinV2 : Type = LinV ** {
c2 : LinPrep ;
} ;
mkVerb : Str -> LinV = \str -> {
s = table {
_ => str
}
} ;
copula : LinV = {s = \\_ => "TODO: copula"} ; -- often useful
------------------
-- VP
-- Lamb p. 229
-- "tense, aspect, modality, voice, person and number. There are contrasts to be seen, as above, between inflected and periphrastic forms and, as a whole, periphrasis is more productive."
LinVP : Type = {
s : VForm => Str ;
} ;
LinVPSlash : Type = LinVP ** {
c2 : LinPrep ;
} ;
linVP : LinVP -> Str = \vp -> vp.s ! VInf ;
--------------------------------------------------------------------------------
-- Cl, S
-- Operations for clauses, sentences
LinCl : Type = {
subj : Str ;
pred : Str ; -- TODO: depend on Temp and Pol
} ;
linCl : LinCl -> Str = \cl -> cl.subj ++ cl.pred ;
}

76
src/gaelic/SentenceGla.gf Normal file
View File

@@ -0,0 +1,76 @@
concrete SentenceGla of Sentence = CatGla ** open
TenseX, ResGla, (AM=AdverbGla), Prelude in {
flags optimize=all_subs ;
lin
--2 Clauses
-- : NP -> VP -> Cl
PredVP np vp = {
subj = linNP np ; -- article and CN are discontinuous in NP! linNP just picks nominative unmutated.
pred =
-- table {something with tense+polarity =>
vp.s ! VPres (nagr2vagr np.a)
-- TODO: all of the VP's tense and polarity should be open here!
-- PredVP only decides the subject.
-- }
} ;
{-
-- : SC -> VP -> Cl ; -- that she goes is good
PredSCVP sc vp = ;
--2 Clauses missing object noun phrases
-- : NP -> VPSlash -> ClSlash ;
SlashVP =
-- : ClSlash -> Adv -> ClSlash ; -- (whom) he sees today
AdvSlash cls adv =
-- : Cl -> Prep -> ClSlash ; -- (with whom) he walks
SlashPrep cl prep = cl ** {c2 = prep} ;
-- Imperatives
-- : VP -> Imp ;
ImpVP vp =
--2 Embedded sentences
-- : S -> SC ;
EmbedS s =
-- : QS -> SC ;
EmbedQS qs =
-- : VP -> SC ;
EmbedVP vp =
-}
--2 Sentences
-- : Temp -> Pol -> Cl -> S ;
UseCl t p cl = {
s = cl.subj ++ t.s ++ p.s ++ cl.pred -- ! t.t ! p.p -- eventually
} ;
{-
-- : Temp -> Pol -> QCl -> QS ;
UseQCl t p cl =
-- : Temp -> Pol -> RCl -> RS ;
UseRCl t p cl =
-- AdvS : Adv -> S -> S ; -- then I will go home
AdvS adv s =
-- ExtAdvS : Adv -> S -> S ; -- next week, I will go home
ExtAdvS adv s =
-- : S -> Subj -> S -> S ;
SSubjS s1 subj s2 =
-- : S -> RS -> S ; -- she sleeps, which is good
RelS sent rs =
-}
}

171
src/gaelic/StructuralGla.gf Normal file
View File

@@ -0,0 +1,171 @@
concrete StructuralGla of Structural = CatGla **
open Prelude, ResGla, (Noun=NounGla), ParadigmsGla in {
-------
-- Ad*
{-
lin almost_AdA =
lin almost_AdN =
lin at_least_AdN =
lin at_most_AdN =
lin so_AdA =
lin too_AdA =
lin very_AdA =
lin as_CAdv =
lin less_CAdv =
lin more_CAdv =
lin how8much_IAdv =
lin when_IAdv =
lin how_IAdv =
lin where_IAdv =
lin why_IAdv =
lin always_AdV = ss "" ;
lin everywhere_Adv = ss "" ;
lin here7from_Adv = ss "" ;
lin here7to_Adv = ss "" ;
lin here_Adv = ss "" ;
lin quite_Adv = ss "" ;
lin somewhere_Adv = ss "" ;
lin there7from_Adv = ss "" ;
lin there7to_Adv = ss "" ;
lin there_Adv = ss "" ;
-}
-------
-- Conj
-- The lincat of Conj is Coordination.ConjunctionDistr ** {n:Number}
-- which means that there are two fields for the strings, and
-- n:Number which specifies the number of the resulting NP.
lin and_Conj = {s1 = [] ; s2 = "and" ; n = Pl} ;
-- lin or_Conj =
-- lin if_then_Conj =
lin both7and_DConj = {s1 = "both" ; s2 = "and" ; n = Pl} ;
-- lin either7or_DConj =
-- lin but_PConj =
-- lin otherwise_PConj =
-- lin therefore_PConj =
-----------------
-- *Det and Quant
{-
lin how8many_IDet =
lin every_Det =
lin all_Predet = {s = ""} ;
lin not_Predet = { s = "" } ;
lin only_Predet = { s = "" } ;
lin most_Predet = {s = ""} ;
lin few_Det = R.indefDet "" pl ;
lin many_Det = R.indefDet "" pl ;
lin much_Det = R.indefDet "" sg ;
lin somePl_Det =
lin someSg_Det =
lin no_Quant =
lin that_Quant = mkQuant "" ;
lin this_Quant = mkQuant "" ;
lin which_IQuant = mkQuant "" ;
-----
-- NP
lin somebody_NP =
lin everybody_NP =
lin everything_NP =
lin nobody_NP =
lin nothing_NP =
lin somebody_NP =
lin something_NP =
-------}
-- Prep
-- lin above_Prep = mkPrep "" ;
-- lin after_Prep = mkPrep "" ;
-- lin before_Prep = mkPrep "" ;
-- lin behind_Prep = mkPrep "" ;
-- lin between_Prep = = mkPrep "" ;
-- lin by8agent_Prep = mkPrep "" ;
-- lin by8means_Prep = mkPrep "" ;
-- lin during_Prep = mkPrep "" ;
-- lin except_Prep = mkPrep "" ;
lin for_Prep = ResGla.doPrep ;
lin from_Prep = ResGla.bhoPrep ;
-- lin in8front_Prep = mkPrep "" ;
lin in_Prep = ResGla.annPrep ;
lin on_Prep = ResGla.airPrep ;
-- lin part_Prep = mkPrep "" ;
-- lin possess_Prep = mkPrep "" ;
-- lin through_Prep = mkPrep "" ;
lin to_Prep = ResGla.guPrep ;
-- lin under_Prep = mkPrep "" ;
-- lin with_Prep = mkPrep "" ;
-- lin without_Prep = mkPrep "" ;
-------
-- Pron
-- Pronouns are closed class, no constructor in ParadigmsGla.
--lin it_Pron =
lin i_Pron = mkPron "mi" "mo^L" Sg1 ;
lin youPol_Pron = youPl_Pron ;
lin youSg_Pron = mkPron "tu" "do^L" Sg2 ;
lin he_Pron = mkPron "e" "a^L" (Sg3 Masc) ;
lin she_Pron = mkPron "i" "a^H" (Sg3 Fem) ;
lin we_Pron = mkPron "sinn" "àr^N" Pl1 ;
lin youPl_Pron = mkPron"sibh" "ùr^N" Pl2 ;
lin they_Pron = mkPron "iad" AN Pl3 ;
{-
lin whatPl_IP =
lin whatSg_IP =
lin whoPl_IP =
lin whoSg_IP =
-------
-- Subj
lin although_Subj =
lin because_Subj =
lin if_Subj =
lin that_Subj =
lin when_Subj =
------
-- Utt
lin language_title_Utt = ss "" ;
lin no_Utt = ss "" ;
lin yes_Utt = ss "" ;
-------
-- Verb
lin have_V2 =
lin can8know_VV = -- can (capacity)
lin can_VV = -- can (possibility)
lin must_VV =
lin want_VV =
------
-- Voc
lin please_Voc = ss "" ;
-}
}

73
src/gaelic/SymbolGla.gf Normal file
View File

@@ -0,0 +1,73 @@
--# -path=.:../abstract:../common:../prelude
concrete SymbolGla of Symbol = CatGla **
open Prelude, ParadigmsGla, ResGla, (Noun=NounGla) in {
lin
-- : Symb -> PN ; -- x
SymbPN i = mkPN_onRuntimeToken i.s ;
-- : Int -> PN ; -- 27
IntPN i = mkPN_onRuntimeToken i.s ;
-- : Float -> PN ; -- 3.14159
FloatPN i = mkPN_onRuntimeToken i.s ;
-- : Card -> PN ; -- twelve [as proper name]
NumPN i = mkPN_onRuntimeToken (i.s ! NCard) ;
lin
-- CNIntNP cn i = {} ;
-- : Det -> CN -> [Symb] -> NP ; -- (the) (2) numbers x and y
CNSymbNP det cn xs =
let cnSymb : CN = cn ** {postmod = cn.postmod ++ xs.s}
in Noun.DetCN det cnSymb ;
-- : CN -> Card -> NP ; -- level five ; level 5
CNNumNP cn i =
let cnSymb : CN = cn ** {postmod = cn.postmod ++ i.s}
in Noun.MassNP cnSymb ;
-- : Symb -> S ;
SymbS sy = sy ;
-- : Symb -> Card ;
SymbNum sy = mkNumeral_onRuntimeToken sy.s ;
-- : Symb -> Ord ;
SymbOrd sy = sy ; ---- TODO: nothing added to it. Lincat of Ord is just SS from the beginning.
oper
-- To make Card or PN from a runtime argument, cannot use the single + operation.
-- See https://inariksit.github.io/gf/2018/08/28/gf-gotchas.html#unsupported-token-gluing
mkNumeral_onRuntimeToken : Str -> LinNumeral = \str -> {
s = table {
NCard => str ;
NOrd => str ++ BIND ++ "th"
} ;
n = Pl ; -- NB. probably singular for number 1
} ;
mkPN_onRuntimeToken : Str -> LinPN = \str -> {
s =
-- table {_ => -- If lincat of PN changes so that it's an inflection table, uncomment this
str
-- }
;
n = Sg ;
} ;
lincat
Symb, [Symb] = SS ;
lin
MkSymb s = s ;
BaseSymb = infixSS "and" ; -- this comes between the last two ones
ConsSymb = infixSS "," ;
}

114
src/gaelic/VerbGla.gf Normal file
View File

@@ -0,0 +1,114 @@
concrete VerbGla of Verb = CatGla ** open ResGla, AdverbGla, Prelude in {
lin
-----
-- VP
-- : V -> VP
-- NB. assumes that lincat V = lincat VP
-- This will most likely change when you start working with VPs
UseV v = v ;
{-
-- : V2 -> VP ;
PassV2 v2 =
-- : VPSlash -> VP ;
ReflVP vps =
-- : VV -> VP -> VP ;
ComplVV vv vp =
-- : VS -> S -> VP ;
ComplVS vs s =
-- : VQ -> QS -> VP ;
ComplVQ vq qs =
-- : VA -> AP -> VP ;
ComplVA va ap =
-- : Comp -> VP ;
UseComp comp =
-}
--------
-- Slash
{-
-- : V2 -> VPSlash
SlashV2a v2 =
-- : V3 -> NP -> VPSlash ; -- give it (to her)
Slash2V3 v3 dobj =
-- : V3 -> NP -> VPSlash ; -- give (it) to her
Slash3V3 v3 iobj =
SlashV2A v2 adj =
-- : V2S -> S -> VPSlash ; -- answer (to him) that it is good
SlashV2S v2s s =
-- : V2V -> VP -> VPSlash ; -- beg (her) to go
SlashV2V v2v vp = ;
-- : V2Q -> QS -> VPSlash ; -- ask (him) who came
SlashV2Q v2q qs = ;
-- : V2A -> AP -> VPSlash ; -- paint (it) red
SlashV2A v2a ap = ;
-- : VPSlash -> NP -> VP
-- Often VPSlash has a field called c2, which is used to pick right form of np complement
ComplSlash vps np = vps ** {
compl = np.s ! vps.c2
} ;
-- : VV -> VPSlash -> VPSlash ;
SlashVV vv vps = ComplVV vv vps ** {
} ;
-- : V2V -> NP -> VPSlash -> VPSlash ; -- beg me to buy
SlashV2VNP v2v np vps =
-- : VP -> Adv -> VP ; -- sleep here
AdvVP vp adv =
-- : AdV -> VP -> VP ; -- always sleep
AdVVP adv vp =
-- : VPSlash -> Adv -> VPSlash ; -- use (it) here
AdvVPSlash = insertAdv ;
-- : VP -> Adv -> VP ; -- sleep , even though ...
ExtAdvVP vp adv = ;
-- : AdV -> VPSlash -> VPSlash ; -- always use (it)
AdVVPSlash adv vps = vps ** { adv = adv.s ++ vps.adv } ;
-- : VP -> Prep -> VPSlash ; -- live in (it)
VPSlashPrep vp prep = vp ** {c2 = prep} ;
--2 Complements to copula
-- Adjectival phrases, noun phrases, and adverbs can be used.
-- : AP -> Comp ;
CompAP ap =
-- : CN -> Comp ;
CompCN cn =
-- NP -> Comp ;
CompNP np =
-- : Adv -> Comp ;
CompAdv adv =
-- : VP -- Copula alone;
UseCopula =
-}
}

View File

@@ -40,7 +40,7 @@ concrete CatGer of Cat =
VP = ResGer.VP ; VP = ResGer.VP ;
VPSlash = ResGer.VPSlash ; VPSlash = ResGer.VPSlash ;
Comp = {s : Agr => Str ; ext : Str} ; Comp = {s : Agr => Str ; ext : Number => Str} ;
-- Adjective (HL 7/23: we need c : Agr => Str * Str to handle reflexive objects, cf ReflA2) -- Adjective (HL 7/23: we need c : Agr => Str * Str to handle reflexive objects, cf ReflA2)

View File

@@ -103,21 +103,27 @@ concrete VerbGer of Verb = CatGer ** open Prelude, ResGer, Coordination in {
insertObj' obj b w c vps ; insertObj' obj b w c vps ;
UseComp comp = UseComp comp =
insertExtrapos comp.ext (insertObj comp.s (predV sein_V)) ; -- agr not used insertExtrapos (comp.ext ! Sg) (insertObj comp.s (predV sein_V)) ; -- agr not used ---- TODO: comp.ext depends on number if CompCN
-- SS: adj slot not used here for e.g. "ich bin alt" but same behaviour as NPs? -- SS: adj slot not used here for e.g. "ich bin alt" but same behaviour as NPs?
-- "ich bin nicht alt" "ich bin nicht Doris" -- "ich bin nicht alt" "ich bin nicht Doris"
UseCopula = predV sein_V ; UseCopula = predV sein_V ;
CompAP ap = {s = \\_ => ap.c.p1 ++ ap.s ! APred ++ ap.c.p2 ; ext = ap.s2 ! Nom ++ ap.ext} ; CompAP ap = {s = \\_ => ap.c.p1 ++ ap.s ! APred ++ ap.c.p2 ; ext = \\_ => ap.s2 ! Nom ++ ap.ext} ;
CompNP np = {s = \\_ => np.s ! False ! Nom ++ np.rc ; ext = np.ext} ; CompNP np = {s = \\_ => np.s ! False ! Nom ; ext = \\_ => np.rc ++ np.ext} ;
CompAdv a = {s = \\_ => a.s ; ext = []} ; CompAdv a = {s = \\_ => a.s ; ext = \\_ => []} ;
CompCN cn = {s = \\a => case numberAgr a of { CompCN cn = {
Sg => "ein" + pronEnding ! GSg cn.g ! Nom ++ cn.s ! Strong ! Sg ! Nom ++ cn.rc ! Sg ; --- s = let
Pl => cn.s ! Strong ! Pl ! Nom ++ cn.rc ! Pl --- sg : Str = "ein" + pronEnding ! GSg cn.g ! Nom ++ cn.s ! Strong ! Sg ! Nom ++ cn.adv ; ---
pl : Str = cn.s ! Strong ! Pl ! Nom ++ cn.adv
in table {
AgPlPol => sg ;
a => case numberAgr a of {
Sg => sg ;
Pl => pl }
} ; } ;
ext = cn.adv ++ cn.ext ext = \\n => cn.rc ! n ++ cn.ext
} ; } ;
AdvVP vp adv = insertAdv adv.s vp ; AdvVP vp adv = insertAdv adv.s vp ;

View File

@@ -39,7 +39,7 @@ resource ResGre = ParamX ** open Prelude in {
oper oper
AAgr : Type = {g : Gender ; n : Number} ; AAgr : PType = {g : Gender ; n : Number} ;
VP = { v : Verb ; clit,clit2 : Str ; comp : Agr => Str ; isNeg : Bool ; voice : Voice ; aspect :Aspect} ; VP = { v : Verb ; clit,clit2 : Str ; comp : Agr => Str ; isNeg : Bool ; voice : Voice ; aspect :Aspect} ;

View File

@@ -117,12 +117,14 @@ concrete CatHun of Cat = CommonX - [Adv] ** open ResHun, Prelude in {
N, N,
N2, N2,
N3 = ResHun.Noun ; N3 = ResHun.Noun ;
PN = ResHun.NounPhrase ; PN,LN,GN,SN = ResHun.NounPhrase ;
Adv = {s : Str ; isPre : Bool} ; Adv = {s : Str ; isPre : Bool} ;
linref linref
CN = linCN ; CN = linCN ;
NP = linNP ; NP = linNP ;
V,VS,VQ,VA = \v -> v.s ! VPres P3 Sg ;
V2,V3,V2S,V2Q,V2A = \v -> v.s ! Indef ! VPres P3 Sg ;
} }

View File

@@ -5,4 +5,7 @@ concrete ExtendHun of Extend = CatHun
-- with (Grammar=GrammarHun) -- with (Grammar=GrammarHun)
** open Prelude, ResHun, NounHun in { ** open Prelude, ResHun, NounHun in {
lin
TPastSimple = {s = []} ** {t = Past} ; --# notpresent
} ; } ;

View File

@@ -6,7 +6,10 @@ lincat
Sub10 = LinDigit ; Sub10 = LinDigit ;
Sub100, Sub100,
Sub1000, Sub1000,
Sub1000000 = ResHun.Numeral ; Sub1000000,
Sub1000000000,
Sub1000000000000 = ResHun.Numeral ;
lin lin
-- TODO: Add case inflection and ordinal forms to all numerals -- TODO: Add case inflection and ordinal forms to all numerals
@@ -72,6 +75,9 @@ lin
{s = table {p => n.s ! Attrib ++ "ezer" ++ m.s ! p} ; {s = table {p => n.s ! Attrib ++ "ezer" ++ m.s ! p} ;
n = numNumber ; numtype = IsNum} ; n = numNumber ; numtype = IsNum} ;
pot3as4 n = n ;
pot4as5 n = n ;
oper oper
LinDigit : Type = {s : DForm*Place => Str ; n : Number} ; LinDigit : Type = {s : DForm*Place => Str ; n : Number} ;

View File

@@ -31,6 +31,14 @@ oper
-- mkPN : N -> Number -> PN ; -- mkPN : N -> Number -> PN ;
} ; } ;
mkLN : overload {
mkLN : Str -> PN ; -- Singular PN out of a string
mkLN : Str -> Number -> PN -- PN with a given number
} ;
mkGN : Str -> PN ; -- GN out of a string
mkSN : Str -> SN ; -- SN out of a string
--2 Adjectives --2 Adjectives
mkA : overload { mkA : overload {
@@ -110,6 +118,9 @@ oper
mkAdA : Str -> AdA mkAdA : Str -> AdA
= \s -> lin AdA {s = s} ; = \s -> lin AdA {s = s} ;
mkAdN : Str -> AdN
= \s -> lin AdN {s = s} ;
--. --.
------------------------------------------------------------------------------- -------------------------------------------------------------------------------
@@ -184,6 +195,14 @@ oper
-- mkPN : N -> Number -> PN ; -- mkPN : N -> Number -> PN ;
} ; } ;
mkLN = overload {
mkLN : Str -> LN = \s -> lin LN (defNP s Sg) ;
mkLN : Str -> Number -> LN = \s,n -> lin LN (defNP s n) ;
} ;
mkGN s = lin GN (defNP s Sg) ;
mkSN s = lin SN (defNP s Sg) ;
mkA = overload { mkA = overload {
mkA : (sgnom : Str) -> A = \s -> lin A (mkAdj s) ; mkA : (sgnom : Str) -> A = \s -> lin A (mkAdj s) ;
mkA : (sgnom,sgacc : Str) -> A = \nom,acc -> mkA : (sgnom,sgacc : Str) -> A = \nom,acc ->
@@ -213,17 +232,54 @@ oper
copula = ResHun.copula ; copula = ResHun.copula ;
mkVS = overload {
mkVS : Str -> VS = \v -> lin VS (mkVerb v) ;
mkVS : V -> VS = \v -> lin VS v ;
} ;
mkVQ = overload {
mkVQ : Str -> VQ = \v -> lin VQ (mkVerb v) ;
mkVQ : V -> VQ = \v -> lin VQ v ;
} ;
mkVA = overload {
mkVA : Str -> VA = \v -> lin VA (mkVerb v) ;
mkVA : V -> VA = \v -> lin VA v ;
} ;
mkV2 = overload { mkV2 = overload {
mkV2 : (plain : Str) -> V2 = \v2 -> lin V2 (mkVerb2 v2) ; mkV2 : (plain : Str) -> V2 = \v2 -> lin V2 (mkVerb2 v2) ;
mkV2 : V -> V2 = vtov2 ; mkV2 : V -> V2 = vtov2 ;
} ; } ;
mkVV = overload {
mkVV : Str -> VV = \v -> lin VV (mkVerb2 v) ;
mkVV : V -> VV = \v -> lin VV (vtov2 v) ;
} ;
mkV2A = overload {
mkV2A : Str -> V2A = \v -> lin V2A (mkVerb2 v) ;
mkV2A : V -> V2A = \v -> lin V2A (vtov2 v) ;
} ;
mkV2V = overload {
mkV2V : Str -> V2V = \v -> lin V2V (mkVerb2 v) ;
mkV2V : V -> V2V = \v -> lin V2V (vtov2 v) ;
} ;
mkV2S = overload {
mkV2S : Str -> V2S = \v -> lin V2S (mkVerb2 v) ;
mkV2S : V -> V2S = \v -> lin V2S (vtov2 v) ;
} ;
mkV2Q = overload {
mkV2Q : Str -> V2Q = \v -> lin V2Q (mkVerb2 v) ;
mkV2Q : V -> V2Q = \v -> lin V2Q (vtov2 v) ;
} ;
mkV3 = overload { mkV3 = overload {
mkV3 : (plain : Str) -> V3 = \v3 -> lin V3 (mkVerb3 v3) ; mkV3 : (plain : Str) -> V3 = \v3 -> lin V3 (mkVerb3 v3) ;
} ; } ;
--
-- mkVV = overload {
-- } ;
mkPrep = overload { mkPrep = overload {
mkPrep : (e : Str) -> Prep mkPrep : (e : Str) -> Prep
@@ -234,6 +290,8 @@ oper
casePrep : Case -> Prep casePrep : Case -> Prep
= \c -> lin Prep (ResHun.caseAdp c) ; = \c -> lin Prep (ResHun.caseAdp c) ;
mkInterj : Str -> Interj = \s -> lin Interj {s = s} ;
-------------------------------------------------------------------------------- --------------------------------------------------------------------------------
} }

View File

@@ -121,12 +121,12 @@ lin under_Prep = nomAdp "alatt" ;
-- Pron -- Pron
-- Pronouns are closed class, no constructor in ParadigmsHun. -- Pronouns are closed class, no constructor in ParadigmsHun.
-- it_Pron =
i_Pron = pronTable ! <P1,Sg> ; i_Pron = pronTable ! <P1,Sg> ;
youPol_Pron, youPol_Pron,
youSg_Pron = pronTable ! <P2,Sg> ; youSg_Pron = pronTable ! <P2,Sg> ;
he_Pron, he_Pron,
she_Pron = pronTable ! <P3,Sg> ; she_Pron,
it_Pron = pronTable ! <P3,Sg> ;
we_Pron = pronTable ! <P1,Pl> ; we_Pron = pronTable ! <P1,Pl> ;
youPl_Pron = pronTable ! <P2,Pl> ; youPl_Pron = pronTable ! <P2,Pl> ;
they_Pron = pronTable ! <P3,Pl> ; they_Pron = pronTable ! <P3,Pl> ;

View File

@@ -40,14 +40,14 @@ resource ParadigmsIta = BeschIta **
-- To abstract over gender names, we define the following identifiers. -- To abstract over gender names, we define the following identifiers.
oper oper
Gender : Type ; Gender : PType ;
masculine : Gender ; masculine : Gender ;
feminine : Gender ; feminine : Gender ;
-- To abstract over number names, we define the following. -- To abstract over number names, we define the following.
Number : Type ; Number : PType ;
singular : Number ; singular : Number ;
plural : Number ; plural : Number ;

Some files were not shown because too many files have changed in this diff Show More