mirror of
https://github.com/GrammaticalFramework/gf-rgl.git
synced 2026-05-28 01:18:57 -06:00
Merge remote-tracking branch 'origin/latvian-new' into latvian-new
This commit is contained in:
17
.github/workflows/release.yml
vendored
17
.github/workflows/release.yml
vendored
@@ -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: |
|
||||||
|
|||||||
12
.github/workflows/test.yml
vendored
12
.github/workflows/test.yml
vendored
@@ -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: |
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
2
Makefile
2
Makefile
@@ -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
|
||||||
|
|||||||
26
Setup.hs
26
Setup.hs
@@ -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
|
||||||
|
|
||||||
@@ -302,8 +313,9 @@ getOptMode args =
|
|||||||
else explicit_modes
|
else explicit_modes
|
||||||
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
|
||||||
@@ -366,8 +378,8 @@ gfcn :: Info -> Mode -> String -> [FilePath] -> IO ()
|
|||||||
gfcn bi mode summary files = do
|
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
|
||||||
|
|||||||
13
Setup.sh
13
Setup.sh
@@ -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}"
|
||||||
|
|||||||
121
languages.csv
121
languages.csv
@@ -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
|
||||||
|
|||||||
|
@@ -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 = ""
|
||||||
|
} ;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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 ;
|
||||||
|
|||||||
@@ -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
15
src/api/CombinatorsSco.gf
Normal 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) ;
|
||||||
|
}
|
||||||
3
src/api/ConstructorsSco.gf
Normal file
3
src/api/ConstructorsSco.gf
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
--# -path=.:alltenses:prelude
|
||||||
|
|
||||||
|
resource ConstructorsSco = Constructors with (Grammar = GrammarSco) ;
|
||||||
5
src/api/SymbolicSco.gf
Normal file
5
src/api/SymbolicSco.gf
Normal 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
5
src/api/SyntaxSco.gf
Normal file
@@ -0,0 +1,5 @@
|
|||||||
|
--# -path=.:alltenses:prelude
|
||||||
|
|
||||||
|
instance SyntaxSco of Syntax =
|
||||||
|
ConstructorsSco, CatSco, StructuralSco, CombinatorsSco ;
|
||||||
|
|
||||||
@@ -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
22
src/api/TrySco.gf
Normal 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 ;
|
||||||
|
} ;
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
@@ -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
|
||||||
|
|
||||||
@@ -502,17 +504,17 @@ oper
|
|||||||
AComp d c => comp ! Sg ! d ! c
|
AComp d c => comp ! Sg ! d ! c
|
||||||
}
|
}
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
mascFemCompAdj : (kabir, kabira, akbar : Str) -> Adj =
|
mascFemCompAdj : (kabir, kabira, akbar : Str) -> Adj =
|
||||||
\kabir, kabira, akbar ->
|
\kabir, kabira, akbar ->
|
||||||
ntablesAdj (positAdj kabir ! Masc) (positAdj kabir ! Fem) (positAdj akbar ! Masc) ;
|
ntablesAdj (positAdj kabir ! Masc) (positAdj kabir ! Fem) (positAdj akbar ! Masc) ;
|
||||||
|
|
||||||
mascFemAdj : (kabir, kabira : Str) -> Adj = \kabir, kabira ->
|
mascFemAdj : (kabir, kabira : Str) -> Adj = \kabir, kabira ->
|
||||||
mascFemCompAdj kabir kabira kabir ; ---- comp
|
mascFemCompAdj kabir kabira kabir ; ---- comp
|
||||||
|
|
||||||
mascAdj : (kabir : Str) -> Adj = \kabir ->
|
mascAdj : (kabir : Str) -> Adj = \kabir ->
|
||||||
mascFemAdj kabir (kabir + "َة") ;
|
mascFemAdj kabir (kabir + "َة") ;
|
||||||
|
|
||||||
|
|
||||||
-----------------------------------------------------------------------------
|
-----------------------------------------------------------------------------
|
||||||
-----------------------------------------------------------------------------
|
-----------------------------------------------------------------------------
|
||||||
|
|||||||
@@ -99,7 +99,7 @@ resource ParadigmsAra = open
|
|||||||
mkLN = overload {
|
mkLN = overload {
|
||||||
mkLN : Str -> LN -- Predictable LN from a Str: fem hum if ends in ة, otherwise masc hum.
|
mkLN : Str -> LN -- Predictable LN from a Str: fem hum if ends in ة, otherwise masc hum.
|
||||||
= \s -> lin LN (N.UsePN (smartPN s)) ;
|
= \s -> lin LN (N.UsePN (smartPN s)) ;
|
||||||
mkLN : Str -> Gender -> LN
|
mkLN : Str -> Gender -> LN
|
||||||
= \s, g -> lin LN (N.UsePN (smartPN s ** {g = g})) ;
|
= \s, g -> lin LN (N.UsePN (smartPN s ** {g = g})) ;
|
||||||
mkLN : N -> LN -- Make a LN out of N. The LN is in construct state.
|
mkLN : N -> LN -- Make a LN out of N. The LN is in construct state.
|
||||||
= \n -> lin LN (N.MassNP (N.UseN n)) ;
|
= \n -> lin LN (N.MassNP (N.UseN n)) ;
|
||||||
@@ -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} ;
|
||||||
|
|
||||||
@@ -914,7 +916,7 @@ oper
|
|||||||
wmkN : {sg, pl : Str ; g : Gender} -> N
|
wmkN : {sg, pl : Str ; g : Gender} -> N
|
||||||
= \r -> mkN r.sg r.pl r.g nohum ; --- hum/nohum not in Wikt
|
= \r -> mkN r.sg r.pl r.g nohum ; --- hum/nohum not in Wikt
|
||||||
wmkN : {sg : Str} -> N
|
wmkN : {sg : Str} -> N
|
||||||
= \r -> smartN r.sg ;
|
= \r -> smartN r.sg ;
|
||||||
wmkN : {sg : Str ; g : Gender ; root : Str} -> N
|
wmkN : {sg : Str ; g : Gender ; root : Str} -> N
|
||||||
= \r -> smartN r.sg ** {g = r.g} ; ----
|
= \r -> smartN r.sg ** {g = r.g} ; ----
|
||||||
wmkN : {sg : Str; g : Gender} -> N
|
wmkN : {sg : Str; g : Gender} -> N
|
||||||
@@ -924,8 +926,8 @@ oper
|
|||||||
wmkN : {sg : Str; pl : Str} -> N
|
wmkN : {sg : Str; pl : Str} -> N
|
||||||
= \r -> mkN r.sg r.pl masc nohum ; ---- ** {g = (smartN r.sg).g} ;
|
= \r -> mkN r.sg r.pl masc nohum ; ---- ** {g = (smartN r.sg).g} ;
|
||||||
wmkN : {sg, pl : Str ; root : Str} -> N
|
wmkN : {sg, pl : Str ; root : Str} -> N
|
||||||
= \r -> mkN r.sg r.pl masc nohum ; ----
|
= \r -> mkN r.sg r.pl masc nohum ; ----
|
||||||
wmkN : {sg : Str; root : Str} -> N
|
wmkN : {sg : Str; root : Str} -> N
|
||||||
= \r -> smartN r.sg ;
|
= \r -> smartN r.sg ;
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
|
|||||||
4
src/armenian/AdjectiveHye.gf
Normal file
4
src/armenian/AdjectiveHye.gf
Normal file
@@ -0,0 +1,4 @@
|
|||||||
|
concrete AdjectiveHye of Adjective = CatHye ** {
|
||||||
|
lin
|
||||||
|
PositA a = a ;
|
||||||
|
}
|
||||||
4
src/armenian/AllHye.gf
Normal file
4
src/armenian/AllHye.gf
Normal file
@@ -0,0 +1,4 @@
|
|||||||
|
concrete AllHye of AllHyeAbs =
|
||||||
|
LangHye
|
||||||
|
**
|
||||||
|
{} ;
|
||||||
3
src/armenian/AllHyeAbs.gf
Normal file
3
src/armenian/AllHyeAbs.gf
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
abstract AllHyeAbs =
|
||||||
|
Lang
|
||||||
|
** {}
|
||||||
16
src/armenian/CatHye.gf
Normal file
16
src/armenian/CatHye.gf
Normal 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 ;
|
||||||
|
|
||||||
|
}
|
||||||
133
src/armenian/DocumentationHye.gf
Normal file
133
src/armenian/DocumentationHye.gf
Normal 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} ;
|
||||||
|
}
|
||||||
2
src/armenian/GrammarHye.gf
Normal file
2
src/armenian/GrammarHye.gf
Normal file
@@ -0,0 +1,2 @@
|
|||||||
|
concrete GrammarHye of Grammar = TenseX ** {
|
||||||
|
}
|
||||||
10
src/armenian/LangHye.gf
Normal file
10
src/armenian/LangHye.gf
Normal file
@@ -0,0 +1,10 @@
|
|||||||
|
--# -path=.:../abstract
|
||||||
|
concrete LangHye of Lang =
|
||||||
|
GrammarHye,
|
||||||
|
LexiconHye
|
||||||
|
,DocumentationHye --# notpresent
|
||||||
|
** {
|
||||||
|
|
||||||
|
flags startcat = Phr ;
|
||||||
|
|
||||||
|
}
|
||||||
2
src/armenian/LexiconHye.gf
Normal file
2
src/armenian/LexiconHye.gf
Normal file
@@ -0,0 +1,2 @@
|
|||||||
|
concrete LexiconHye of Lexicon = CatHye ** open ParadigmsHye in {
|
||||||
|
}
|
||||||
7506
src/armenian/MorphoHye.gf
Normal file
7506
src/armenian/MorphoHye.gf
Normal file
File diff suppressed because it is too large
Load Diff
4
src/armenian/NounHye.gf
Normal file
4
src/armenian/NounHye.gf
Normal file
@@ -0,0 +1,4 @@
|
|||||||
|
concrete NounHye of Noun = CatHye ** {
|
||||||
|
lin
|
||||||
|
UseN n = n ;
|
||||||
|
}
|
||||||
488
src/armenian/ParadigmsHye.gf
Normal file
488
src/armenian/ParadigmsHye.gf
Normal 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
11
src/armenian/PhraseHye.gf
Normal 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
269
src/armenian/ResHye.gf
Normal 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} ;
|
||||||
|
|
||||||
|
}
|
||||||
@@ -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}} ;
|
||||||
|
|||||||
4
src/belarusian/AdjectiveBel.gf
Normal file
4
src/belarusian/AdjectiveBel.gf
Normal file
@@ -0,0 +1,4 @@
|
|||||||
|
concrete AdjectiveBel of Adjective = CatBel ** {
|
||||||
|
lin
|
||||||
|
PositA a = a ;
|
||||||
|
}
|
||||||
4
src/belarusian/AllBel.gf
Normal file
4
src/belarusian/AllBel.gf
Normal file
@@ -0,0 +1,4 @@
|
|||||||
|
concrete AllBel of AllBelAbs =
|
||||||
|
LangBel
|
||||||
|
**
|
||||||
|
{} ;
|
||||||
3
src/belarusian/AllBelAbs.gf
Normal file
3
src/belarusian/AllBelAbs.gf
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
abstract AllBelAbs =
|
||||||
|
Lang
|
||||||
|
** {}
|
||||||
21
src/belarusian/CatBel.gf
Normal file
21
src/belarusian/CatBel.gf
Normal 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 ;
|
||||||
|
|
||||||
|
}
|
||||||
77
src/belarusian/DocumentationBel.gf
Normal file
77
src/belarusian/DocumentationBel.gf
Normal 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} ;
|
||||||
|
}
|
||||||
6
src/belarusian/GrammarBel.gf
Normal file
6
src/belarusian/GrammarBel.gf
Normal file
@@ -0,0 +1,6 @@
|
|||||||
|
concrete GrammarBel of Grammar =
|
||||||
|
TenseX,
|
||||||
|
PhraseBel,
|
||||||
|
NounBel,
|
||||||
|
AdjectiveBel ** {
|
||||||
|
}
|
||||||
10
src/belarusian/LangBel.gf
Normal file
10
src/belarusian/LangBel.gf
Normal file
@@ -0,0 +1,10 @@
|
|||||||
|
--# -path=.:../abstract
|
||||||
|
concrete LangBel of Lang =
|
||||||
|
GrammarBel,
|
||||||
|
LexiconBel
|
||||||
|
,DocumentationBel --# notpresent
|
||||||
|
** {
|
||||||
|
|
||||||
|
flags startcat = Phr ;
|
||||||
|
|
||||||
|
}
|
||||||
2
src/belarusian/LexiconBel.gf
Normal file
2
src/belarusian/LexiconBel.gf
Normal file
@@ -0,0 +1,2 @@
|
|||||||
|
concrete LexiconBel of Lexicon = CatBel ** open ParadigmsBel in {
|
||||||
|
}
|
||||||
29614
src/belarusian/MorphoBel.gf
Normal file
29614
src/belarusian/MorphoBel.gf
Normal file
File diff suppressed because it is too large
Load Diff
4
src/belarusian/NounBel.gf
Normal file
4
src/belarusian/NounBel.gf
Normal file
@@ -0,0 +1,4 @@
|
|||||||
|
concrete NounBel of Noun = CatBel ** {
|
||||||
|
lin
|
||||||
|
UseN n = n ;
|
||||||
|
}
|
||||||
839
src/belarusian/ParadigmsBel.gf
Normal file
839
src/belarusian/ParadigmsBel.gf
Normal 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} ;
|
||||||
|
|
||||||
|
}
|
||||||
11
src/belarusian/PhraseBel.gf
Normal file
11
src/belarusian/PhraseBel.gf
Normal 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
163
src/belarusian/ResBel.gf
Normal 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 ;
|
||||||
|
|
||||||
|
}
|
||||||
@@ -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))) ++
|
||||||
|
|||||||
@@ -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 ;
|
||||||
|
|||||||
@@ -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
|
||||||
|
} ;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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 ;
|
||||||
|
|
||||||
|
|||||||
@@ -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 } ;
|
||||||
|
|||||||
@@ -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 ++ " " ++ v.s ! VVPresNeg)) ++
|
tr (th "present" ++ td (v.s ! VVF VPres ++ " " ++ v.s ! VVPresNeg)) ++
|
||||||
tr (th "past" ++ td (v.s ! VVF VPast ++ " " ++ v.s ! VVPastNeg)) ++ --# notpresent
|
tr (th "past" ++ td (v.s ! VVF VPast ++ " " ++ 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)) ++
|
||||||
|
|||||||
4
src/faroese/AdjectiveFao.gf
Normal file
4
src/faroese/AdjectiveFao.gf
Normal file
@@ -0,0 +1,4 @@
|
|||||||
|
concrete AdjectiveFao of Adjective = CatFao ** {
|
||||||
|
lin
|
||||||
|
PositA a = a ;
|
||||||
|
}
|
||||||
4
src/faroese/AllFao.gf
Normal file
4
src/faroese/AllFao.gf
Normal file
@@ -0,0 +1,4 @@
|
|||||||
|
concrete AllFao of AllFaoAbs =
|
||||||
|
LangFao
|
||||||
|
**
|
||||||
|
{} ;
|
||||||
3
src/faroese/AllFaoAbs.gf
Normal file
3
src/faroese/AllFaoAbs.gf
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
abstract AllFaoAbs =
|
||||||
|
Lang
|
||||||
|
** {}
|
||||||
19
src/faroese/CatFao.gf
Normal file
19
src/faroese/CatFao.gf
Normal 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} ;
|
||||||
|
|
||||||
|
}
|
||||||
87
src/faroese/DocumentationFao.gf
Normal file
87
src/faroese/DocumentationFao.gf
Normal 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} ;
|
||||||
|
}
|
||||||
6
src/faroese/GrammarFao.gf
Normal file
6
src/faroese/GrammarFao.gf
Normal file
@@ -0,0 +1,6 @@
|
|||||||
|
concrete GrammarFao of Grammar =
|
||||||
|
TenseX,
|
||||||
|
PhraseFao,
|
||||||
|
NounFao,
|
||||||
|
AdjectiveFao ** {
|
||||||
|
}
|
||||||
10
src/faroese/LangFao.gf
Normal file
10
src/faroese/LangFao.gf
Normal file
@@ -0,0 +1,10 @@
|
|||||||
|
--# -path=.:../abstract
|
||||||
|
concrete LangFao of Lang =
|
||||||
|
GrammarFao,
|
||||||
|
LexiconFao
|
||||||
|
,DocumentationFao --# notpresent
|
||||||
|
** {
|
||||||
|
|
||||||
|
flags startcat = Phr ;
|
||||||
|
|
||||||
|
}
|
||||||
2
src/faroese/LexiconFao.gf
Normal file
2
src/faroese/LexiconFao.gf
Normal file
@@ -0,0 +1,2 @@
|
|||||||
|
concrete LexiconFao of Lexicon = CatFao ** open ParadigmsFao in {
|
||||||
|
}
|
||||||
12180
src/faroese/MorphoFao.gf
Normal file
12180
src/faroese/MorphoFao.gf
Normal file
File diff suppressed because it is too large
Load Diff
4
src/faroese/NounFao.gf
Normal file
4
src/faroese/NounFao.gf
Normal file
@@ -0,0 +1,4 @@
|
|||||||
|
concrete NounFao of Noun = CatFao ** {
|
||||||
|
lin
|
||||||
|
UseN n = n ;
|
||||||
|
}
|
||||||
570
src/faroese/ParadigmsFao.gf
Normal file
570
src/faroese/ParadigmsFao.gf
Normal 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
11
src/faroese/PhraseFao.gf
Normal 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
131
src/faroese/ResFao.gf
Normal 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 ;
|
||||||
|
|
||||||
|
}
|
||||||
@@ -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 ;
|
||||||
|
|||||||
@@ -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
|
||||||
} ;
|
} ;
|
||||||
|
|||||||
@@ -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 = <>} ;
|
||||||
|
|||||||
68
src/gaelic/AdjectiveGla.gf
Normal file
68
src/gaelic/AdjectiveGla.gf
Normal 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
59
src/gaelic/AdverbGla.gf
Normal 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
6
src/gaelic/AllGla.gf
Normal file
@@ -0,0 +1,6 @@
|
|||||||
|
--# -path=.:../abstract:../common:../prelude
|
||||||
|
|
||||||
|
concrete AllGla of AllGlaAbs =
|
||||||
|
LangGla,
|
||||||
|
ExtendGla
|
||||||
|
;
|
||||||
121
src/gaelic/CatGla.gf
Normal file
121
src/gaelic/CatGla.gf
Normal 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 ;
|
||||||
|
|
||||||
|
}
|
||||||
147
src/gaelic/ConjunctionGla.gf
Normal file
147
src/gaelic/ConjunctionGla.gf
Normal 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 =
|
||||||
|
-}
|
||||||
|
}
|
||||||
117
src/gaelic/ConstructionGla.gf
Normal file
117
src/gaelic/ConstructionGla.gf
Normal 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
35
src/gaelic/ExtendGla.gf
Normal 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
17
src/gaelic/GrammarGla.gf
Normal 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
56
src/gaelic/IdiomGla.gf
Normal 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
5
src/gaelic/LangGla.gf
Normal file
@@ -0,0 +1,5 @@
|
|||||||
|
--# -path=.:../abstract:../common:../prelude:../api
|
||||||
|
concrete LangGla of Lang =
|
||||||
|
GrammarGla,
|
||||||
|
LexiconGla,
|
||||||
|
ConstructionGla ;
|
||||||
420
src/gaelic/LexiconGla.gf
Normal file
420
src/gaelic/LexiconGla.gf
Normal 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
313
src/gaelic/MissingGla.gf
Normal 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
36
src/gaelic/NamesGla.gf
Normal 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
215
src/gaelic/NounGla.gf
Normal 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
117
src/gaelic/NumeralGla.gf
Normal 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
213
src/gaelic/ParadigmsGla.gf
Normal 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
27
src/gaelic/PhraseGla.gf
Normal 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
105
src/gaelic/QuestionGla.gf
Normal 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
24
src/gaelic/RelativeGla.gf
Normal 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
625
src/gaelic/ResGla.gf
Normal 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
76
src/gaelic/SentenceGla.gf
Normal 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
171
src/gaelic/StructuralGla.gf
Normal 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
73
src/gaelic/SymbolGla.gf
Normal 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
114
src/gaelic/VerbGla.gf
Normal 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 =
|
||||||
|
-}
|
||||||
|
|
||||||
|
}
|
||||||
@@ -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)
|
||||||
|
|
||||||
|
|||||||
@@ -103,22 +103,28 @@ 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
|
||||||
ext = cn.adv ++ cn.ext
|
in table {
|
||||||
} ;
|
AgPlPol => sg ;
|
||||||
|
a => case numberAgr a of {
|
||||||
|
Sg => sg ;
|
||||||
|
Pl => pl }
|
||||||
|
} ;
|
||||||
|
ext = \\n => cn.rc ! n ++ cn.ext
|
||||||
|
} ;
|
||||||
|
|
||||||
AdvVP vp adv = insertAdv adv.s vp ;
|
AdvVP vp adv = insertAdv adv.s vp ;
|
||||||
ExtAdvVP vp adv = insertAdv (embedInCommas adv.s) vp ;
|
ExtAdvVP vp adv = insertAdv (embedInCommas adv.s) vp ;
|
||||||
|
|||||||
@@ -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} ;
|
||||||
|
|
||||||
@@ -1826,4 +1826,4 @@ resource ResGre = ParamX ** open Prelude in {
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -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 ;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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
|
||||||
|
|
||||||
} ;
|
} ;
|
||||||
|
|||||||
@@ -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} ;
|
||||||
|
|
||||||
|
|||||||
@@ -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} ;
|
||||||
--------------------------------------------------------------------------------
|
--------------------------------------------------------------------------------
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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> ;
|
||||||
|
|||||||
@@ -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
Reference in New Issue
Block a user