135 Commits

Author SHA1 Message Date
Inari Listenmaa
e825d92233 (Fao) add particle to verbs e.g. "fara út" 2026-04-01 16:27:14 +02:00
Inari Listenmaa
1e436d84a1 (Ice) handle PNs that consist of multiple words 2026-04-01 16:26:14 +02:00
Inari Listenmaa
84e0e2c08f (Jpn) add GN, LN, SN + constructors 2026-04-01 16:21:58 +02:00
Inari Listenmaa
4c55592af4 make it not crash on mkPN "Jósefína" feminine 2026-04-01 15:41:22 +02:00
Inari Listenmaa
28be4fb450 add existing modules to GrammarHye 2026-04-01 15:28:28 +02:00
Krasimir Angelov
74848d304e implement UsePron 2026-03-20 08:27:46 +01:00
Krasimir Angelov
928889b2aa change NP to contain GenNum instead of Number and Gender 2026-03-20 08:14:10 +01:00
Krasimir Angelov
1d7b717866 added inherent parameters for pronouns 2026-03-20 08:04:26 +01:00
Krasimir Angelov
9d18d316c5 remove the flags 2026-03-19 17:49:58 +01:00
Krasimir Angelov
c8a4c28a51 added AdverbMkd 2026-03-19 17:48:52 +01:00
Krasimir Angelov
eeca67e787 add AdverbMkd 2026-03-19 17:45:00 +01:00
Krasimir Angelov
e8005bf071 added SlashV2a 2026-03-19 17:20:10 +01:00
Krasimir Angelov
cc1168634b added VocNP 2026-03-19 15:34:57 +01:00
Krasimir Angelov
76cbf0b75b remove the utf-8 flags 2026-03-19 15:27:53 +01:00
Krasimir Angelov
ce2f785f92 autogenerate parts of the syntax 2026-03-19 15:25:04 +01:00
Krasimir Angelov
0cd3450e08 update the paradigms 2026-03-13 10:58:41 +01:00
Krasimir Angelov
62c5030be1 fix compilation 2026-03-06 14:30:29 +01:00
Krasimir Angelov
bd41b3ccb7 Imperative -> imperative 2026-03-06 13:37:22 +01:00
Krasimir Angelov
53571672e3 started numerals in Macedonian 2026-03-03 14:59:07 +01:00
Krasimir Angelov
761597ad8c move NumeralX.inc to ParamX since it is used in many places 2026-03-03 14:34:52 +01:00
Krasimir Angelov
8e780d6263 use mair/maist for comparison 2026-02-24 08:54:13 +01:00
Krasimir Angelov
ec4bc75a64 added irregular Scots verbs 2026-02-18 15:37:16 +01:00
Krasimir Angelov
dbe6eba30a added PassV2 2026-02-18 09:08:19 +01:00
Krasimir Angelov
066133bbae fix compilation 2026-02-18 09:06:06 +01:00
Krasimir Angelov
e9ecb1a8d6 fix copula 2026-02-18 09:00:26 +01:00
Krasimir Angelov
090a6ea33d started DocumentationSwa.gf 2026-02-17 18:07:55 +01:00
Krasimir Angelov
dceb5252a2 remove the experimental AnaphPron 2026-01-08 09:03:26 +01:00
Krasimir Angelov
73fa89103b remove repeated record fields 2026-01-08 08:44:26 +01:00
Krasimir Angelov
115ad31e2d added lincat CN 2025-11-27 09:11:24 +01:00
Krasimir Angelov
f715e393cb fix the lock field in mkPrep 2025-11-17 14:01:14 +01:00
Krasimir Angelov
5e6ee94baa added TPastSimple 2025-11-16 13:22:01 +01:00
Krasimir Angelov
a73b6ad6ed fixes to make the WordNet compile 2025-11-16 08:52:14 +01:00
Krasimir Angelov
06f3602e00 fix compilation with the old type checker 2025-11-14 14:32:30 +01:00
Krasimir Angelov
c7fe453c12 use consistent lin X everywhere 2025-11-14 14:12:57 +01:00
Krasimir Angelov
48658e3689 fix some of the nouns 2025-11-14 10:52:59 +01:00
Krasimir Angelov
ffc10a32c9 guessed VocNP, UttCN, UttAP 2025-11-06 13:47:58 +01:00
Krasimir Angelov
fff1c40f24 added UttNP 2025-11-06 12:54:45 +01:00
Krasimir Angelov
fd817f80d6 add a lock field 2025-11-06 12:51:53 +01:00
Krasimir Angelov
b84d05034d more type signatures 2025-11-06 12:46:05 +01:00
Krasimir Angelov
d589cedc6b fix typechecking with the normal type checker 2025-11-06 12:41:31 +01:00
Krasimir Angelov
d833b24509 added AdjCN 2025-11-06 12:36:28 +01:00
Krasimir Angelov
071b2af9c3 added gaelic 2025-11-06 11:53:36 +01:00
Krasimir Angelov
1f5615c0bb missed AllGlaAbs.gf 2025-11-06 11:53:22 +01:00
Krasimir Angelov
fda1f49d17 Merge branch 'master' of github.com:GrammaticalFramework/gf-rgl 2025-11-06 11:48:06 +01:00
Krasimir Angelov
6b93e87363 merge of the manual and automatic grammars 2025-11-06 11:47:31 +01:00
Aarne Ranta
f4aae6a61a Merge pull request #466 from hleiss/corrections
(Ger) Corrections in Cat, Irreg, Lexicon ; added QVP in Question and GenIP, GenModIP in Extend
2025-10-31 17:18:05 +01:00
Krasimir Angelov
066d6f9c85 fix type errors with the old type checker 2025-10-27 10:00:29 +01:00
Krasimir Angelov
3e51c585ce fix mkA008 2025-10-27 09:51:16 +01:00
Krasimir Angelov
bba1de3605 fix type errors with the old type checker 2025-10-27 09:46:22 +01:00
Krasimir Angelov
4514ebfc00 fix type errors with the old type checker 2025-10-27 09:43:01 +01:00
Krasimir Angelov
cf947426dc extended documentation 2025-10-25 12:40:02 +02:00
Krasimir Angelov
7383b30cee started with documentation 2025-10-25 12:07:43 +02:00
Krasimir Angelov
c604bd3b77 added Sub1000000000 and Sub1000000000000 2025-10-25 11:15:21 +02:00
Krasimir Angelov
8e63f9b32d fix conflicts 2025-10-25 08:21:28 +02:00
Krasimir Angelov
1aed4c3b5f added missig functions 2025-10-25 08:20:33 +02:00
Hans Leiß
78564236b9 Merge branch 'GrammaticalFramework:master' into corrections 2025-10-05 19:15:50 +02:00
Krasimir Angelov
35a650141e fix UseN and PositA 2025-10-05 09:47:31 +02:00
Krasimir Angelov
5146748f37 added armenian 2025-10-04 19:44:23 +02:00
Hans Leiss
4bf528a429 (Ger) Implemented QVP in Question, GenIP and GenModIP in Extend 2025-09-28 18:15:45 +02:00
Krasimir Angelov
4a0cc4ec40 added linref for verbs and lincat for names 2025-09-26 07:31:56 +02:00
Krasimir Angelov
a5f4679405 refactor the noun paradigms 2025-09-26 07:24:08 +02:00
Krasimir Angelov
cad17e8404 fill in the neuter forms for adjectives 2025-09-26 06:20:16 +02:00
Krasimir Angelov
c9182284e7 added Belarusian 2025-09-25 21:54:33 +02:00
Krasimir Angelov
9649f348b2 a better table for nouns 2025-09-25 13:09:10 +02:00
Krasimir Angelov
3e066bd7ec Merge branch 'master' of github.com:GrammaticalFramework/gf-rgl 2025-09-25 13:02:41 +02:00
Krasimir Angelov
7d4e40bac1 added Ukrainian 2025-09-25 13:02:21 +02:00
Hans Leiss
7e52a4759c (Ger) Corrections in Cat, Res, Lexicon, Structural, Morpho, Paradigms and Questions 2025-09-21 21:05:43 +02:00
Aarne Ranta
f01d509376 word order in Ger CompCN and CompNP: RS in ext part, adv before it; agr for CompCN todo 2025-09-18 20:36:03 +02:00
Krasimir Angelov
153ad8b41a added type signatures 2025-09-11 10:07:38 +02:00
Krasimir Angelov
5375cda243 add type signatures to keep the old type checker happy 2025-09-11 10:04:27 +02:00
Krasimir Angelov
e76e11e566 added PhraseKaz 2025-09-11 09:57:32 +02:00
Krasimir Angelov
bc41082247 added UttS 2025-09-11 09:50:53 +02:00
Krasimir Angelov
0e5bb779cc Particle->Participle 2025-09-10 19:44:07 +02:00
Krasimir Angelov
08aa91cdbb better inflection tables 2025-09-10 19:41:28 +02:00
Krasimir Angelov
7d695a6d49 fix typo 2025-09-10 19:40:57 +02:00
Krasimir Angelov
febd99be26 add faroese 2025-09-10 17:19:26 +02:00
Krasimir Angelov
7016ce8a32 bootstrapped faroese 2025-09-10 16:38:50 +02:00
Krasimir Angelov
1b57ef7fee added lindef for VPSlash 2025-09-09 11:58:17 +02:00
Krasimir Angelov
cd581dc6ac fix -ing -> -in 2025-09-07 11:55:39 +02:00
Krasimir Angelov
5b588daf85 forgot AllScoAbs 2025-09-07 08:59:56 +02:00
Krasimir Angelov
35a6456524 getting started on Scots 2025-09-07 08:19:10 +02:00
Krasimir Angelov
141074bec3 typo infitive -> infinitive 2025-09-04 16:19:12 +02:00
Krasimir Angelov
e78497e46d added CompoundN 2025-08-29 22:35:56 +02:00
Krasimir Angelov
52b6305cf2 a linref for verbs which shows P3 Sg 2025-08-29 13:11:25 +02:00
Krasimir Angelov
1cd582a322 added NamesLav.gf 2025-08-29 12:54:59 +02:00
Krasimir Angelov
2ff33ea968 added AdvS 2025-08-29 09:26:26 +02:00
Krasimir Angelov
b2e2b570e1 added trivial functions 2025-08-29 09:15:10 +02:00
Krasimir Angelov
4644ef0229 added pot3as4 and potas5 2025-08-29 08:33:35 +02:00
Krasimir Angelov
f546600fd2 TPastSimple in Latin and Hungarian 2025-08-29 07:02:44 +02:00
Krasimir Angelov
9c951e244c Merge branch 'master' of github.com:GrammaticalFramework/gf-rgl 2025-08-28 19:36:09 +02:00
Krasimir Angelov
5cb67dadbf NON_EXISTANT -> nonExist 2025-08-28 19:35:49 +02:00
Inari Listenmaa
39f6a43717 fix Sg Dat for class 1B nouns 2025-08-28 17:18:58 +02:00
Inari Listenmaa
81f3531136 Merge pull request #464 from inariksit/gaelic
WIP: Gaelic RG
2025-08-28 16:02:42 +02:00
Inari Listenmaa
9f21a3d103 add the correct word for bird (tunnag is "duck") 2025-08-28 16:01:58 +02:00
Inari Listenmaa
e14833217e TODO notes 2025-08-28 15:47:14 +02:00
Inari Listenmaa
8c25bdeacc add lenition in the case table as separate dimension for Nom and Dat 2025-08-28 15:43:56 +02:00
Inari Listenmaa
d652c81fa7 WIP more preposition contractions + phonological mutation rules 2025-08-27 17:22:33 +02:00
Inari Listenmaa
ed745708b2 massive restructure, very broken, will fix later 2025-08-26 17:07:07 +02:00
Krasimir Angelov
625ddf1e1e added lindef VP 2025-08-26 16:40:42 +02:00
Krasimir Angelov
512412b4bb added invarA 2025-08-26 16:30:13 +02:00
Inari Listenmaa
d4056e7db3 add pronouns, very much WIP (no object forms, possessives) 2025-08-25 17:01:43 +02:00
Inari Listenmaa
c85e7a514b Add some prepositions, merge with pronouns (TODO: merge with articles too) 2025-08-25 17:01:43 +02:00
Inari Listenmaa
a539db3d55 allomorphs for definite article 2025-08-25 17:01:43 +02:00
Inari Listenmaa
b8d9098aaa add more words 2025-08-25 17:01:43 +02:00
Inari Listenmaa
1c87e5ac78 misc fixes in morpho (works for 4 nouns!) 2025-08-25 17:01:43 +02:00
Inari Listenmaa
4f5e67a581 make leaner param for CN (morpho still as wrong as always) 2025-08-25 17:01:43 +02:00
Inari Listenmaa
cabf56aea9 still broken but in a different way 2025-08-25 17:01:43 +02:00
Inari Listenmaa
4b78bd6c67 yep the morpho sucks, but let's fix it in next commits 2025-08-25 17:01:43 +02:00
Inari Listenmaa
c9c1723090 some morphology I pulled out of my ass 2025-08-25 17:01:43 +02:00
Inari Listenmaa
1f3a35a95c start Gla by cloning the template 2025-08-25 17:01:43 +02:00
Krasimir Angelov
3aeb0707f5 Merge branch 'master' of github.com:GrammaticalFramework/gf-rgl 2025-08-22 19:43:34 +02:00
Krasimir Angelov
94472bc4ab make sure that DocumentationLat is always compiled 2025-08-22 19:43:13 +02:00
Inari Listenmaa
e3c9a0045e (Ger) Fix complement number agreement with AgPlPol
"Sie sind ein Vogel", not *Sie sind Vögel
2025-08-22 14:50:35 +02:00
Inari Listenmaa
97227181fe (Ara) add the preposition ka 'كَ' which attaches to its head 2025-08-22 14:27:10 +02:00
Inari Listenmaa
f2afe03303 fix example in arabic documentation 2025-08-22 14:03:29 +02:00
Krasimir Angelov
75d291d26a Merge branch 'master' of github.com:GrammaticalFramework/gf-rgl 2025-08-18 19:14:13 +02:00
Krasimir Angelov
338c347d7c another version of CompoundN 2025-08-18 19:13:53 +02:00
Krasimir Angelov
e24e0cc7ce number agreement when there is no preposition 2025-08-18 18:42:40 +02:00
Inari Listenmaa
51cb9c3091 the latest tag is called release-3.12, use it here 2025-08-12 15:29:06 +02:00
Inari Listenmaa
b84cbcfc28 Merge pull request #463 from inariksit/release-morphodict
Build morphodict and put in GF_LIB_PATH
2025-08-12 15:18:27 +02:00
Inari Listenmaa
de5468e40a control morphodict from Makefile (easy to comment out if desired) 2025-08-12 15:13:51 +02:00
Inari Listenmaa
b93fd7f051 add morphodict into Setup.hs 2025-08-12 15:13:19 +02:00
Inari Listenmaa
5aa5718ca5 add MorphoDict to languages.csv 2025-08-12 15:00:45 +02:00
Krasimir Angelov
fd0706fbc1 Merge branch 'master' of github.com:GrammaticalFramework/gf-rgl 2025-08-12 11:13:50 +02:00
Krasimir Angelov
145e1affe9 added missing bits and pieces 2025-08-12 11:13:29 +02:00
Inari Listenmaa
3d0aa460c5 build morphodict 2025-08-11 15:32:05 +02:00
Inari Listenmaa
a0a8d99872 don't use record extension with PTypes
the current (non-majestic) runtime doesn't support it
2025-08-11 14:43:38 +02:00
Inari Listenmaa
cdc1108a36 update GitHub workflows for GF 3.12 + newer runner 2025-08-11 14:40:02 +02:00
Krasimir Angelov
1308eb85d9 fix type errors detected by the new type checker 2025-08-07 13:35:36 +02:00
Krasimir Angelov
42d06dfafd added some missing funs and cats 2025-08-07 12:19:10 +02:00
Krasimir Angelov
04df53a17a remove dead code as detected by the new typechecker 2025-05-21 14:43:45 +02:00
Krasimir Angelov
41906a31c4 TTAnt must be reimplemented for Bulgarian after we changed the tenses 2025-05-21 13:46:25 +02:00
Krasimir Angelov
2d22802af4 Merge branch 'master' of github.com:GrammaticalFramework/gf-rgl 2025-05-21 13:45:46 +02:00
Krasimir Angelov
76f09c2464 fix vocative for paradigm N008b 2025-05-21 13:45:26 +02:00
Inari Listenmaa
1825904f4d (Chi) add mkAdv instance that doesn't pattern match any strings 2025-05-09 15:29:21 +02:00
304 changed files with 105780 additions and 927 deletions

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@@ -299,9 +299,6 @@ fun
fun fun
CardCNCard : Card -> CN -> Card ; -- three million, four lakh, six dozen etc CardCNCard : Card -> CN -> Card ; -- three million, four lakh, six dozen etc
fun
AnaphPron : NP -> Pron ;
fun fun
TPastSimple : Tense ; TPastSimple : Tense ;

View File

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

View File

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

View File

@@ -84,10 +84,4 @@ oper
_ => BIND _ => BIND
} ; } ;
inc : DTail -> DTail = \t -> case t of {
T1 => T2 ;
T2 => T3 ;
T3 => T1
} ;
} }

View File

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

View File

@@ -109,11 +109,6 @@ lin pot3plus n m = {
_ => BIND _ => BIND
} ; } ;
inc : DTail -> DTail = \t -> case t of {
T1 => T2 ;
T2 => T3 ;
T3 => T1
} ;
------------------ :) what a releif ------------------ :) what a releif
mk2Dig : Str -> Str -> TDigit = \c,o -> mk3Dig c o ; mk2Dig : Str -> Str -> TDigit = \c,o -> mk3Dig c o ;

View File

@@ -18,7 +18,7 @@
-- Author: Hans Leiß, LMU Munich, CIS -- Author: Hans Leiß, LMU Munich, CIS
resource ResGrc = ParamX - [Number,Sg,Pl,ImpForm,numImp,Tense,ImpF] resource ResGrc = ParamX - [Number,Sg,Pl,ImpForm,numImp,Tense,ImpF,inc,DTail]
** open Prelude, PhonoGrc, Predef in { ** open Prelude, PhonoGrc, Predef in {
flags flags
optimize = noexpand ; -- optimize=all is impossible with addAccent optimize = noexpand ; -- optimize=all is impossible with addAccent

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

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

View File

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

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

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

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

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

View File

@@ -1,3 +1,16 @@
--# -path=.:../basque:../common:../abstract:../prelude --# -path=.:../basque:../common:../abstract:../prelude
resource TryEus = SyntaxEus, LexiconEus, ParadigmsEus - [mkAdv,mkAdN,mkDet,mkQuant,mkPConj] ; resource TryEus = SyntaxEus-[mkVoc], LexiconEus, ParadigmsEus - [mkAdv,mkAdN,mkDet,mkQuant,mkPConj,mkVoc] **
open (P = ParadigmsEus) in {
oper
mkAdv = overload SyntaxEus {
mkAdv : Str -> Adv = P.mkAdv ;
} ;
mkVoc = overload {
mkVoc : NP -> Voc = SyntaxEus.mkVoc ;
mkVoc : Str -> Voc = P.mkVoc ;
} ;
}

View File

@@ -1,3 +1,3 @@
--# -path=.:../german:../common:../abstract:../prelude --# -path=.:../german:../common:../abstract:../prelude
resource TryGer = SyntaxGer, ExtraGer, LexiconGer, ParadigmsGer - [mkAdv], MakeStructuralGer ; resource TryGer = SyntaxGer, ExtraGer, LexiconGer, ParadigmsGer - [mkAdv,mkIAdv], MakeStructuralGer ;

View File

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

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

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

View File

@@ -31,15 +31,15 @@ lin
monthAdv january = monthAdv january =
let january_CN : CN = mkCN month_Timeunit (mkNP (mkPN january)) ; let january_CN : CN = mkCN month_Timeunit (mkNP (mkPN january)) ;
january_NP : NP = R.emptyNP ** january_NP : NP = lin NP R.emptyNP **
{s = \\c => R.cn2str january_CN R.Sg R.Const c ; {s = \\c => R.cn2str january_CN R.Sg R.Const c ;
a = {pgn = R.Per3 january_CN.g R.Sg ; isPron = False}} ; a = {pgn = R.Per3 january_CN.g R.Sg ; isPron = False}} ;
in SyntaxAra.mkAdv R.biPrep january_NP ; in SyntaxAra.mkAdv ParadigmsAra.biPrep january_NP ;
yearAdv y = SyntaxAra.mkAdv in_Prep y ; yearAdv y = SyntaxAra.mkAdv in_Prep y ;
-- dummy -- dummy
dayMonthAdv d m = SyntaxAra.mkAdv on_Prep (mkNP d) ; -- on 17 May dayMonthAdv d m = SyntaxAra.mkAdv on_Prep (mkNP m) ; -- on 17 May
monthYearAdv m y = SyntaxAra.mkAdv on_Prep (mkNP m) ; -- in May 2012 monthYearAdv m y = SyntaxAra.mkAdv on_Prep (mkNP m) ; -- in May 2012
dayMonthYearAdv d m y = SyntaxAra.mkAdv on_Prep y ; -- on 17 May 2013 dayMonthYearAdv d m y = SyntaxAra.mkAdv on_Prep y ; -- on 17 May 2013
@@ -51,7 +51,7 @@ lin
let ap = mkAP a in ap ** { let ap = mkAP a in ap ** {
s = \\s,g,n,d,c => s = \\s,g,n,d,c =>
ap.s ! s ! g ! n ! d ! c ap.s ! s ! g ! n ! d ! c
++ (mkAdv R.biPrep (mkNP amount_N)).s ++ (mkAdv ParadigmsAra.biPrep (mkNP amount_N)).s
++ (mkNP card cn).s ! R.Bare ---- ? /IL ++ (mkNP card cn).s ! R.Bare ---- ? /IL
} ; } ;
@@ -60,26 +60,26 @@ oper
amount_N : N = mkN "مِقْدَار" "مَقَادِير" masc nohum ; amount_N : N = mkN "مِقْدَار" "مَقَادِير" masc nohum ;
-- hack used in the name constructions -- hack used in the name constructions
toNP : Bool -> NP -> NP = \b -> if_then_else NP b R.emptyNP ; toNP : Bool -> NP -> NP = \b -> if_then_else NP b (lin NP R.emptyNP) ;
lin lin
-- : NP -> NP -> Cl -- : NP -> NP -> Cl
have_name_Cl np nm = have_name_Cl np nm =
let subjPron : Pron = R.np2pron np ; let subjPron : Pron = lin Pron (R.np2pron np) ;
me : NP = toNP np.a.isPron np ; me : NP = toNP np.a.isPron np ;
myName : NP = E.ApposNP me (mkNP (mkDet subjPron) L.name_N) ; myName : NP = E.ApposNP me (mkNP (mkDet subjPron) L.name_N) ;
in mkCl myName nm ; in mkCl myName nm ;
-- : NP -> QCl -- : NP -> QCl
what_name_QCl np = what_name_QCl np =
let subjPron : Pron = R.np2pron np ; let subjPron : Pron = lin Pron (R.np2pron np) ;
me : R.NP = toNP np.a.isPron np ; me : R.NP = toNP np.a.isPron np ;
myName : NP = E.ApposNP me (mkNP (mkDet subjPron) L.name_N) ; myName : NP = E.ApposNP me (mkNP (mkDet subjPron) L.name_N) ;
what_IP : R.IP = R.mkIP "مَا هُوَ" R.Sg ; what_IP : IP = lin IP (R.mkIP "مَا هُوَ" R.Sg) ;
in mkQCl what_IP myName ; in mkQCl what_IP myName ;
how_old_QCl np = how_old_QCl np =
let subjPron : Pron = R.np2pron np ; let subjPron : Pron = lin Pron (R.np2pron np) ;
me : R.NP = toNP np.a.isPron np ; me : R.NP = toNP np.a.isPron np ;
age_N = mkN "عُمر" ; age_N = mkN "عُمر" ;
myAge : NP = E.ApposNP me (mkNP (mkDet subjPron) L.name_N) ; myAge : NP = E.ApposNP me (mkNP (mkDet subjPron) L.name_N) ;

View File

@@ -23,7 +23,7 @@ flags
beautiful_A = sndA "جمل" "فَعِيل" ; beautiful_A = sndA "جمل" "فَعِيل" ;
become_VA = mkVA (v4 "صبح") ; become_VA = mkVA (v4 "صبح") ;
beer_N = sdfN "بير" "فِعلة" Fem NoHum ; beer_N = sdfN "بير" "فِعلة" Fem NoHum ;
beg_V2V = mkV2V (mkVV (v5 "وسل")) noPrep ; beg_V2V = mkV2V (mkVV (v5 "وسل")) ParadigmsAra.noPrep ;
big_A = sndA "كبر" "فَعِيل" ; big_A = sndA "كبر" "فَعِيل" ;
bike_N = sdfN "درج" "فَعّالة" Fem NoHum ; bike_N = sdfN "درج" "فَعّالة" Fem NoHum ;
bird_N = brkN "طير" "فَعل" "فُعُول" Masc NoHum; bird_N = brkN "طير" "فَعل" "فُعُول" Masc NoHum;
@@ -72,7 +72,7 @@ flags
door_N = brkN "بوب" "فاع" "أَفعَال" Masc NoHum ; door_N = brkN "بوب" "فاع" "أَفعَال" Masc NoHum ;
drink_V2 = dirV2 (regV "شَرِب") ; drink_V2 = dirV2 (regV "شَرِب") ;
-- drink_V2 = dirV2 (v1 "شرب" i a) ; -- drink_V2 = dirV2 (v1 "شرب" i a) ;
easy_A2V = mkA2 (sndA "سهل" "فَعل") liPrep ; easy_A2V = mkA2 (sndA "سهل" "فَعل") ParadigmsAra.liPrep ;
eat_V2 = dirV2 (mkV "ءكل" FormI) ; eat_V2 = dirV2 (mkV "ءكل" FormI) ;
empty_A = sndA "فرغ" "فاعِل" ; empty_A = sndA "فرغ" "فاعِل" ;
enemy_N = brkN "عدو" "فَعُلّ" "أَفعَاء" Masc Hum ; enemy_N = brkN "عدو" "فَعُلّ" "أَفعَاء" Masc Hum ;
@@ -202,7 +202,7 @@ flags
switch8off_V2 = dirV2 (v4 "طفء") ; switch8off_V2 = dirV2 (v4 "طفء") ;
switch8on_V2 = dirV2 (v4 "شعل") ; switch8on_V2 = dirV2 (v4 "شعل") ;
table_N = sdfN "طول" "فاعِلة" Fem NoHum ; table_N = sdfN "طول" "فاعِلة" Fem NoHum ;
talk_V3 = mkV3 (v5 "حدث") liPrep (mkPrep "عَن") ; talk_V3 = mkV3 (v5 "حدث") ParadigmsAra.liPrep (mkPrep "عَن") ;
teacher_N = sdmN "علم" "مُفَعِّل" Masc Hum ; --mucal~imö teacher_N = sdmN "علم" "مُفَعِّل" Masc Hum ; --mucal~imö
teach_V2 = dirV2 (v2 "علم") ; teach_V2 = dirV2 (v2 "علم") ;
television_N = mkN (sndf "تِلِفِزيُون") Masc NoHum ; television_N = mkN (sndf "تِلِفِزيُون") Masc NoHum ;

View File

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

View File

@@ -108,7 +108,7 @@ resource ParadigmsAra = open
---- ++ n.s2 ! Sg ! Def ! c -- NB this hack works for idaafa constructions (if you used mkN : N -> N -> N), but wrong for mkN : N -> A -> N. /IL ---- ++ n.s2 ! Sg ! Def ! c -- NB this hack works for idaafa constructions (if you used mkN : N -> N -> N), but wrong for mkN : N -> A -> N. /IL
---- }))) ; ---- }))) ;
mkLN : NP -> LN mkLN : NP -> LN
= \np -> np ; = \np -> lin LN np ;
} ; } ;
--3 Relational nouns --3 Relational nouns
@@ -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} ;
@@ -812,7 +814,7 @@ resource ParadigmsAra = open
dirV3 = overload { dirV3 = overload {
dirV3 : V -> Prep -> V3 = \v,p -> mkV3 v (casePrep acc) p ; dirV3 : V -> Prep -> V3 = \v,p -> mkV3 v (casePrep acc) p ;
dirV3 : V -> Str -> V3 = \v,s -> mkV3 v (casePrep acc) (mkPreposition s) dirV3 : V -> Str -> V3 = \v,s -> mkV3 v (casePrep acc) (mkPrep s)
} ; } ;
dirdirV3 v = dirV3 v (casePrep acc) ; dirdirV3 v = dirV3 v (casePrep acc) ;
@@ -873,7 +875,7 @@ resource ParadigmsAra = open
mkAS, mkAS,
mkAV = \a -> a ; mkAV = \a -> a ;
mkA2S, mkA2S,
mkA2V = \a,p -> prepA2 a (mkPreposition p) ; mkA2V = \a,p -> lin A (prepA2 a (mkPreposition p)) ;
@@ -949,25 +951,25 @@ oper
wmkA : {masc_sg, masc_pl, root, sg_patt : Str} -> A wmkA : {masc_sg, masc_pl, root, sg_patt : Str} -> A
= \r -> mkA r.root r.sg_patt ; = \r -> mkA r.root r.sg_patt ;
wmkA : {masc_sg, fem_sg, masc_pl, fem_pl, root, pl_patt : Str} -> A wmkA : {masc_sg, fem_sg, masc_pl, fem_pl, root, pl_patt : Str} -> A
= \r -> mascFemAdj r.masc_sg r.fem_sg ; = \r -> mascFemA r.masc_sg r.fem_sg ;
wmkA : {masc_sg, fem_sg, masc_pl, fem_pl, root : Str} -> A wmkA : {masc_sg, fem_sg, masc_pl, fem_pl, root : Str} -> A
= \r -> mascFemAdj r.masc_sg r.fem_sg ; = \r -> mascFemA r.masc_sg r.fem_sg ;
wmkA : {masc_sg, fem_sg, root : Str} -> A wmkA : {masc_sg, fem_sg, root : Str} -> A
= \r -> mkA r.root ; ---- = \r -> mkA r.root ; ----
wmkA : {masc_sg, fem_sg, masc_pl, fem_pl, pl_patt : Str} -> A wmkA : {masc_sg, fem_sg, masc_pl, fem_pl, pl_patt : Str} -> A
= \r -> mascFemAdj r.masc_sg r.fem_sg ; = \r -> mascFemA r.masc_sg r.fem_sg ;
wmkA : {masc_sg : Str; fem_sg : Str; fem_pl : Str} -> A wmkA : {masc_sg : Str; fem_sg : Str; fem_pl : Str} -> A
= \r -> mascFemAdj r.masc_sg r.fem_sg ; = \r -> mascFemA r.masc_sg r.fem_sg ;
wmkA : {masc_sg : Str; fem_sg : Str; root : Str ; sg_patt : Str} -> A wmkA : {masc_sg : Str; fem_sg : Str; root : Str ; sg_patt : Str} -> A
= \r -> mkA r.root r.sg_patt ; = \r -> mkA r.root r.sg_patt ;
wmkA : {masc_sg : Str; fem_sg : Str} -> A wmkA : {masc_sg : Str; fem_sg : Str} -> A
= \r -> mascFemAdj r.masc_sg r.fem_sg ; = \r -> mascFemA r.masc_sg r.fem_sg ;
wmkA : {masc_sg : Str; masc_pl : Str; fem_sg : Str; fem_pl : Str} -> A wmkA : {masc_sg : Str; masc_pl : Str; fem_sg : Str; fem_pl : Str} -> A
= \r -> mascFemAdj r.masc_sg r.fem_sg ; = \r -> mascFemA r.masc_sg r.fem_sg ;
wmkA : {masc_sg : Str; masc_pl : Str; fem_sg : Str; root : Str} -> A wmkA : {masc_sg : Str; masc_pl : Str; fem_sg : Str; root : Str} -> A
= \r -> mkA r.root ; = \r -> mkA r.root ;
wmkA : {masc_sg : Str; masc_pl : Str; fem_sg : Str} -> A wmkA : {masc_sg : Str; masc_pl : Str; fem_sg : Str} -> A
= \r -> mascFemAdj r.masc_sg r.fem_sg ; = \r -> mascFemA r.masc_sg r.fem_sg ;
wmkA : {masc_sg : Str; masc_pl : Str; root : Str} -> A wmkA : {masc_sg : Str; masc_pl : Str; root : Str} -> A
= \r -> mkA r.root ; = \r -> mkA r.root ;
wmkA : {masc_sg : Str; masc_pl, pl_patt : Str; root : Str} -> A wmkA : {masc_sg : Str; masc_pl, pl_patt : Str; root : Str} -> A

View File

@@ -124,7 +124,7 @@ concrete StructuralAra of Structural = CatAra **
youPl_Pron = youPlMasc_Pron ; youPl_Pron = youPlMasc_Pron ;
youPol_Pron = youPlFem_Pron ; -- arbitrary? youPol_Pron = youPlFem_Pron ; -- arbitrary?
have_V2 = mkV2 ladaa_V (casePrep nom) ; -- "X has Y" literally "Y<nom> is on X<nom>" have_V2 = mkV2 (lin V ladaa_V) (casePrep nom) ; -- "X has Y" literally "Y<nom> is on X<nom>"
--have_V2 = dirV2 (regV "يَملِك") ; -- "X<nom> owns/possesses Y<acc>" --have_V2 = dirV2 (regV "يَملِك") ; -- "X<nom> owns/possesses Y<acc>"
lin language_title_Utt = {s = \\_ => "العربية"} ; lin language_title_Utt = {s = \\_ => "العربية"} ;

View File

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

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

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

View File

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

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

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

View File

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

View File

@@ -0,0 +1,6 @@
concrete GrammarHye of Grammar =
TenseX,
PhraseHye,
NounHye,
AdjectiveHye ** {
}

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

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

View File

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

7506
src/armenian/MorphoHye.gf Normal file

File diff suppressed because it is too large Load Diff

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

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

View File

@@ -0,0 +1,491 @@
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 : V -> VV = \v -> lin VV v ;
mkVS : V -> VS = \v -> lin VS v ;
mkVQ : V -> VQ = \v -> lin VQ v ;
mkVA : V -> VA = \v -> lin VA v ;
mkV2 = overload {
mkV2 : V -> V2 = \v -> lin V2 (v ** {c2 = noPrep}) ;
mkV2 : V -> Prep -> V2 = \v,p -> lin V2 (v ** {c2 = p}) ;
} ;
mkV3 = overload {
mkV3 : V -> V3 = \v -> lin V3 (v ** {c2 = noPrep; c3 = noPrep}) ;
mkV3 : V -> Prep -> Prep -> V3 = \v,p1,p2 -> lin V3 (v ** {c2 = p1; c3 = p2}) ;
} ;
mkV2A = overload {
mkV2A : V -> V2A = \v -> lin V2A (v ** {c2 = noPrep; c3 = noPrep}) ;
mkV2A : V -> Prep -> Prep -> V2A = \v,p1,p2 -> lin V2A (v ** {c2 = p1; c3 = p2}) ;
} ;
mkV2S = overload {
mkV2S : V -> V2S = \v -> lin V2S (v ** {c2 = noPrep; c3 = noPrep}) ;
mkV2S : V -> Prep -> Prep -> V2S = \v,p1,p2 -> lin V2S (v ** {c2 = p1; c3 = p2}) ;
} ;
mkV2Q = overload {
mkV2Q : V -> V2Q = \v -> lin V2Q (v ** {c2 = noPrep; c3 = noPrep}) ;
mkV2Q : V -> Prep -> Prep -> V2Q = \v,p1,p2 -> lin V2Q (v ** {c2 = p1; c3 = p2}) ;
} ;
mkV2V = overload {
mkV2V : V -> V2V = \v -> lin V2V (v ** {c2 = noPrep; c3 = noPrep}) ;
mkV2V : V -> Prep -> Prep -> V2V = \v,p1,p2 -> lin V2V (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 -> lin N2 (n ** {c2 = noPrep}) ;
mkN2 : N -> Prep -> N2 = \n,p -> lin N2 (n ** {c2 = p}) ;
} ;
mkN3 = overload {
mkN3 : N -> N3 = \n -> lin N3 (n ** {c2 = noPrep; c3 = noPrep}) ;
mkN3 : N -> Prep -> Prep -> N3 = \n,p1,p2 -> lin N3 (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 -> lin A2 (a ** {c2 = noPrep}) ;
mkA2 : A -> Prep -> A2 = \a,p -> lin A2 (a ** {c2 = p}) ;
} ;
mkAdv : Str -> Adv = \s -> lin Adv {s=s} ;
mkAdV : Str -> AdV = \s -> lin AdV {s=s} ;
mkAdA : Str -> AdA = \s -> lin AdA {s=s} ;
mkAdN : Str -> AdN = \s -> lin AdN {s=s} ;
mkCAdv : Str -> CAdv = \s -> lin CAdv {s=s; p=""} ;
mkInterj : Str -> Interj = \s -> lin Interj {s=s} ;
mkMU : Str -> MU = \s -> lin MU {s=s; isPre=False} ;
mkPrep : Str -> Prep = \s -> lin Prep {s=s; c=Dat} ;
mkIAdv : Str -> IAdv = \s -> lin IAdv {s=s} ;
mkIP : Str -> IP = \s -> lin IP {s=s} ;
mkIQuant : Str -> IQuant = \s -> lin IQuant {s=s} ;
mkIDet : Str -> IDet = \s -> lin IDet {s=s} ;
mkSubj : Str -> Subj = \s -> lin Subj {s=s} ;
mkQuant : Str -> Quant = \s -> lin Quant {s=s} ;
mkPredet : Str -> Predet = \s -> lin Predet {s=s} ;
mkDet : Str -> Det = \s -> lin Det {s=s} ;
mkCard : Str -> Card = \s -> lin Card {s=s} ;
mkConj : Str -> Conj = \s -> lin Conj {s=s} ;
mkPConj : Str -> PConj = \s -> lin PConj {s=s} ;
mkVoc : Str -> Voc = \s -> lin Voc {s=s} ;
mkLN : Str -> LN = \s -> lin LN {s=s} ;
mkGN : Str -> GN = \s -> lin GN {s=s} ;
mkSN : Str -> SN = \s -> lin SN {s=s} ;
mkPN : Str -> PN = \s -> lin PN {s=s} ;
}

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

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

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

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

View File

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

View File

@@ -121,7 +121,7 @@ concrete CatEus of Cat = CommonX ** open ResEus, Prelude in {
N = ResEus.Noun ; N = ResEus.Noun ;
N2 = ResEus.Noun2 ; N2 = ResEus.Noun2 ;
N3 = ResEus.Noun3 ; N3 = ResEus.Noun3 ;
PN = ResEus.PNoun ; PN,LN,GN,SN = ResEus.PNoun ;
linref linref

View File

@@ -91,7 +91,7 @@ oper
-- Use linCNIndef so that words with FinalA get the -a at the end -- Use linCNIndef so that words with FinalA get the -a at the end
baseCN : CN -> CN -> [CN] = \x,y -> baseCN : CN -> CN -> [CN] = \x,y ->
y ** --choose all the other fields from second argument lin ListCN y ** --choose all the other fields from second argument
{ s1 = \\agr => linCNIndef x ; { s1 = \\agr => linCNIndef x ;
s2 = y.s } ; s2 = y.s } ;

View File

@@ -0,0 +1,65 @@
--# -path=.:../abstract:../common
concrete DocumentationEus of Documentation = CatEus ** open
ResEus,
Prelude,
HTML in {
lincat
Inflection = {t : Str; s1,s2 : Str} ;
Definition = {s : Str} ;
Document = {s : Str} ;
Tag = {s : Str} ;
lin
InflectionN, InflectionN2, InflectionN3 = \n -> {
t = "n" ;
s1 = heading1 "Noun" ;
s2 = frameTable (
tr (th "" ++ th "Sg" ++ th "Pl") ++
tr (th "absolutive" ++ td (n.s++artDef ! Sg ! Abs ! n.ph) ++ td (n.s++artDef ! Pl ! Abs ! n.ph)) ++
tr (th "ergative" ++ td (n.s++artDef ! Sg ! Erg ! n.ph) ++ td (n.s++artDef ! Pl ! Erg ! n.ph)) ++
tr (th "dative" ++ td (n.s++artDef ! Sg ! Dat ! n.ph) ++ td (n.s++artDef ! Pl ! Dat ! n.ph)) ++
tr (th "genitive" ++ td (n.s++artDef ! Sg ! Gen ! n.ph) ++ td (n.s++artDef ! Pl ! Gen ! n.ph)) ++
tr (th "commitative" ++ td (n.s++artDef ! Sg ! Soc ! n.ph) ++ td (n.s++artDef ! Pl ! Soc ! n.ph)) ++
tr (th "instrumental"++ td (n.s++artDef ! Sg ! Ins ! n.ph) ++ td (n.s++artDef ! Pl ! Ins ! n.ph)) ++
tr (th "inessive" ++ td (n.s++artDef ! Sg ! Ine ! n.ph) ++ td (n.s++artDef ! Pl ! Ine ! n.ph)) ++
tr (th "partitive" ++ td (n.s++artDef ! Sg ! Par ! n.ph) ++ td (n.s++artDef ! Pl ! Par ! n.ph))
) ;
} ;
InflectionA, InflectionA2, InflectionA3 = \a -> {
t = "a" ;
s1 = heading1 "Adjective" ;
s2 = frameTable (
tr (th "" ++ th "Sg" ++ th "Pl") ++
tr (th "absolutive" ++ td (a.s ! AF Posit++artDef ! Sg ! Abs ! a.ph) ++ td (a.s ! AF Posit++artDef ! Pl ! Abs ! a.ph)) ++
tr (th "ergative" ++ td (a.s ! AF Posit++artDef ! Sg ! Erg ! a.ph) ++ td (a.s ! AF Posit++artDef ! Pl ! Erg ! a.ph)) ++
tr (th "dative" ++ td (a.s ! AF Posit++artDef ! Sg ! Dat ! a.ph) ++ td (a.s ! AF Posit++artDef ! Pl ! Dat ! a.ph)) ++
tr (th "genitive" ++ td (a.s ! AF Posit++artDef ! Sg ! Gen ! a.ph) ++ td (a.s ! AF Posit++artDef ! Pl ! Gen ! a.ph)) ++
tr (th "commitative" ++ td (a.s ! AF Posit++artDef ! Sg ! Soc ! a.ph) ++ td (a.s ! AF Posit++artDef ! Pl ! Soc ! a.ph)) ++
tr (th "instrumental"++ td (a.s ! AF Posit++artDef ! Sg ! Ins ! a.ph) ++ td (a.s ! AF Posit++artDef ! Pl ! Ins ! a.ph)) ++
tr (th "inessive" ++ td (a.s ! AF Posit++artDef ! Sg ! Ine ! a.ph) ++ td (a.s ! AF Posit++artDef ! Pl ! Ine ! a.ph)) ++
tr (th "partitive" ++ td (a.s ! AF Posit++artDef ! Sg ! Par ! a.ph) ++ td (a.s ! AF Posit++artDef ! Pl ! Par ! a.ph))
) ;
} ;
InflectionV, InflectionV2, InflectionV3, InflectionVA, InflectionVS, InflectionVQ, InflectionV2A, InflectionV2S, InflectionV2Q = \v -> {
t = "v" ;
s1 = heading1 "Verb" ;
s2 = frameTable (
tr (th "present" ++ td (v.prc ! Pres)) ++
tr (th "past" ++ td (v.prc ! Past)) ++
tr (th "future" ++ td (v.prc ! Fut))
) ;
} ;
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 ++ paragraph e.s} ;
MkTag i = {s = i.t} ;
}

View File

@@ -2,6 +2,7 @@ concrete LangEus of Lang =
GrammarEus, GrammarEus,
LexiconEus, LexiconEus,
ConstructionEus ConstructionEus
,DocumentationEus --# notpresent
** { ** {

View File

@@ -196,7 +196,7 @@ lin jump_V = mkV "jauzi" egin_V ; --Apertium
lin kill_V2 = mkV2 "hil" ; --Apertium lin kill_V2 = mkV2 "hil" ; --Apertium
lin king_N = mkN "errege" animate ; --Apertium lin king_N = mkN "errege" animate ; --Apertium
lin knee_N = mkN "belaun" ; --Apertium lin knee_N = mkN "belaun" ; --Apertium
lin know_V2 = lin V2 jakin_V2 ; -- synthetic verb lin know_V2 = jakin_V2 ; -- synthetic verb
lin know_VQ = lin VQ jakin_V2 ; -- synthetic verb lin know_VQ = lin VQ jakin_V2 ; -- synthetic verb
lin know_VS = ukanV "uste" ; lin know_VS = ukanV "uste" ;
@@ -426,11 +426,11 @@ oper
egin_V : V = mkV "egin" ; egin_V : V = mkV "egin" ;
-- Some synthetic verbs -- Some synthetic verbs
etorri_V : R.Verb = R.syntVerbDa "etorri" R.Etorri ; etorri_V : V = lin V (R.syntVerbDa "etorri" R.Etorri) ;
ibili_V : R.Verb = R.syntVerbDa "ibili" R.Ibili ; ibili_V : V = lin V (R.syntVerbDa "ibili" R.Ibili) ;
jakin_V2 : R.Verb = R.syntVerbDu "jakin" R.Jakin ; jakin_V2 : V2 = lin V2 (R.syntVerbDu "jakin" R.Jakin) ;
joan_V : R.Verb = R.syntVerbDa "joan" R.Joan ; joan_V : V = lin V (R.syntVerbDa "joan" R.Joan) ;
} }

View File

@@ -29,6 +29,8 @@ lincat Sub10 = LinDigit ;
lincat Sub100 = {s : Str ; n : Number } ; lincat Sub100 = {s : Str ; n : Number } ;
lincat Sub1000 = {s : Str ; n : Number ; isHundred : Bool } ; lincat Sub1000 = {s : Str ; n : Number ; isHundred : Bool } ;
lincat Sub1000000 = {s : Str ; n : Number } ; lincat Sub1000000 = {s : Str ; n : Number } ;
lincat Sub1000000000 = {s : Str ; n : Number } ;
lincat Sub1000000000000 = {s : Str ; n : Number } ;
---------------------------------------------------------------------------- ----------------------------------------------------------------------------

View File

@@ -42,6 +42,9 @@ oper
} ; } ;
mkPN : Str -> PN = \s -> lin PN (mkPNoun s) ; mkPN : Str -> PN = \s -> lin PN (mkPNoun s) ;
mkLN : Str -> LN = \s -> lin LN (mkPNoun s) ;
mkGN : Str -> GN = \s -> lin GN (mkPNoun s) ;
mkSN : Str -> SN = \s -> lin SN (mkPNoun s) ;
mkN2 = overload { mkN2 = overload {
mkN2 : Str -> N2 = \s -> lin N2 (mkNoun2 s genitive) ; mkN2 : Str -> N2 = \s -> lin N2 (mkNoun2 s genitive) ;
@@ -64,7 +67,7 @@ oper
mkA = overload { mkA = overload {
mkA : Str -> A = \s -> lin A (regAdj s) ; mkA : Str -> A = \s -> lin A (regAdj s) ;
mkA : Str -> A -> A = \s,a -> irregAdvAdj s a mkA : Str -> A -> A = \s,a -> lin A (irregAdvAdj s a)
} ; } ;
mkA2 : Str -> Prep -> A2 = \s,pp -> lin A2 (regAdj s ** { compl = pp }) ; mkA2 : Str -> Prep -> A2 = \s,pp -> lin A2 (regAdj s ** { compl = pp }) ;
@@ -101,7 +104,7 @@ oper
mkV2A : Str -> V2A = \s -> lin V2A (mkVerbDu s) ; -- Nor-nork mkV2A : Str -> V2A = \s -> lin V2A (mkVerbDu s) ; -- Nor-nork
mkVQ : Str -> VQ = \s -> lin VQ (mkVerbDu s) ; -- Nor-nork mkVQ : Str -> VQ = \s -> lin VQ (mkVerbDu s) ; -- Nor-nork
mkVS : Str -> VS = \s -> lin VS (mkVerbDu s) ; -- Nor-nork mkVS : Str -> VS = \s -> lin VS (mkVerbDu s) ; -- Nor-nork
mkVV : V -> VV = \v -> lin VV v ;
mkV2V : Str -> V2V = \s -> lin V2V (mkVerbDio s) ; -- ??? TODO check valency mkV2V : Str -> V2V = \s -> lin V2V (mkVerbDio s) ; -- ??? TODO check valency
mkV2S : Str -> V2S = \s -> lin V2S (mkVerbDio s) ; -- Nor-nori-nork: (mutilari) (neska datorrela) erantzun diot mkV2S : Str -> V2S = \s -> lin V2S (mkVerbDio s) ; -- Nor-nori-nork: (mutilari) (neska datorrela) erantzun diot
@@ -113,15 +116,15 @@ oper
-- Verbs with non-inflecting participle -- Verbs with non-inflecting participle
-- These are just Verb, use izanV or egonV for intransitive and ukanV for transitive. -- These are just Verb, use izanV or egonV for intransitive and ukanV for transitive.
izanV : Str -> Verb = \bizi -> izanV : Str -> V = \bizi ->
mkVerbDa bizi ** { prc = \\_ => bizi } ; -- Non-inflecting participle, auxtype is Da (nor): e.g. "bizi naiz", "beldur naiz" lin V (mkVerbDa bizi ** { prc = \\_ => bizi }) ; -- Non-inflecting participle, auxtype is Da (nor): e.g. "bizi naiz", "beldur naiz"
egonV : Str -> Verb = \zain -> egonV : Str -> V = \zain ->
mkVerbDaEgon zain ** { prc = \\_ => zain } ; -- Non-inflecting participle, auxtype is Da (nor), but with egon: e.g. "zain nago" lin V (mkVerbDaEgon zain ** { prc = \\_ => zain }) ; -- Non-inflecting participle, auxtype is Da (nor), but with egon: e.g. "zain nago"
ukanV : Str -> Verb = \maite -> ukanV : Str -> V = \maite ->
mkVerbDu maite ** { prc = \\_ => maite } ; -- Non-inflecting participle, auxtype is Du (nor-nork): e.g, "maite zaitut" lin V (mkVerbDu maite ** { prc = \\_ => maite }) ; -- Non-inflecting participle, auxtype is Du (nor-nork): e.g, "maite zaitut"
--2 Structural categories --2 Structural categories
@@ -154,6 +157,10 @@ oper
mkAdA : Str -> AdA = \s -> lin AdA {s = s} ; mkAdA : Str -> AdA = \s -> lin AdA {s = s} ;
oper mkAdN : Str -> AdN = \s -> lin AdN {s=s} ;
oper mkInterj : Str -> Interj = \s -> lin Interj {s=s} ;
oper mkVoc : Str -> Voc = \s -> lin Voc {s=s} ;
--. --.
------------------------------------------------------------------------------- -------------------------------------------------------------------------------

View File

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

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

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

View File

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

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

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

View File

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

View File

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

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

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

View File

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

29614
src/belarusian/MorphoBel.gf Normal file

File diff suppressed because it is too large Load Diff

View File

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

View File

@@ -0,0 +1,842 @@
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 -> lin N2 (n ** {c2 = noPrep}) ;
mkN2 : N -> Prep -> N2 = \n,p -> lin N2 (n ** {c2 = p}) ;
} ;
mkN3 = overload {
mkN3 : N -> N3 = \n -> lin N3 (n ** {c2 = noPrep; c3 = noPrep}) ;
mkN3 : N -> Prep -> Prep -> N3 = \n,p1,p2 -> lin N3 (n ** {c2 = p1; c3 = p2}) ;
} ;
mkV = overload {
mkV : Str -> V = regV; -- infinitive
mkV : Str -> Str -> V = reg2V -- infinitive Imperative;Sg
} ;
mkVV : V -> VV = \v -> lin VV v ;
mkVS : V -> VS = \v -> lin VS v ;
mkVQ : V -> VQ = \v -> lin VQ v ;
mkVA : V -> VA = \v -> lin VA v ;
mkV2 = overload {
mkV2 : V -> V2 = \v -> lin V2 (v ** {c2 = noPrep}) ;
mkV2 : V -> Prep -> V2 = \v,p -> lin V2 (v ** {c2 = p}) ;
} ;
mkV3 = overload {
mkV3 : V -> V3 = \v -> lin V3 (v ** {c2 = noPrep; c3 = noPrep}) ;
mkV3 : V -> Prep -> Prep -> V3 = \v,p1,p2 -> lin V3 (v ** {c2 = p1; c3 = p2}) ;
} ;
mkV2A = overload {
mkV2A : V -> V2A = \v -> lin V2A (v ** {c2 = noPrep; c3 = noPrep}) ;
mkV2A : V -> Prep -> Prep -> V2A = \v,p1,p2 -> lin V2A (v ** {c2 = p1; c3 = p2}) ;
} ;
mkV2S = overload {
mkV2S : V -> V2S = \v -> lin V2S (v ** {c2 = noPrep; c3 = noPrep}) ;
mkV2S : V -> Prep -> Prep -> V2S = \v,p1,p2 -> lin V2S (v ** {c2 = p1; c3 = p2}) ;
} ;
mkV2Q = overload {
mkV2Q : V -> V2Q = \v -> lin V2Q (v ** {c2 = noPrep; c3 = noPrep}) ;
mkV2Q : V -> Prep -> Prep -> V2Q = \v,p1,p2 -> lin V2Q (v ** {c2 = p1; c3 = p2}) ;
} ;
mkV2V = overload {
mkV2V : V -> V2V = \v -> lin V2V (v ** {c2 = noPrep; c3 = noPrep}) ;
mkV2V : V -> Prep -> Prep -> V2V = \v,p1,p2 -> lin V2V (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 -> lin A2 (a ** {c2 = noPrep}) ;
mkA2 : A -> Prep -> A2 = \a,p -> lin A2 (a ** {c2 = p}) ;
} ;
mkAdv : Str -> Adv = \s -> lin Adv {s=s} ;
mkAdV : Str -> AdV = \s -> lin AdV {s=s} ;
mkAdA : Str -> AdA = \s -> lin AdA {s=s} ;
mkAdN : Str -> AdN = \s -> lin AdN {s=s} ;
mkCAdv : Str -> CAdv = \s -> lin CAdv {s=s; p=""} ;
mkInterj : Str -> Interj = \s -> lin Interj {s=s} ;
mkMU : Str -> MU = \s -> lin MU {s=s; isPre=False} ;
mkPrep : Str -> Prep = \s -> lin Prep {s=s; c=Acc} ;
mkIAdv : Str -> IAdv = \s -> lin IAdv {s=s} ;
mkIP : Str -> IP = \s -> lin IP {s=s} ;
mkIQuant : Str -> IQuant = \s -> lin IQuant {s=s} ;
mkIDet : Str -> IDet = \s -> lin IDet {s=s} ;
mkSubj : Str -> Subj = \s -> lin Subj {s=s} ;
mkQuant : Str -> Quant = \s -> lin Quant {s=s} ;
mkPredet : Str -> Predet = \s -> lin Predet {s=s} ;
mkDet : Str -> Det = \s -> lin Det {s=s} ;
mkCard : Str -> Card = \s -> lin Card {s=s} ;
mkConj : Str -> Conj = \s -> lin Conj {s=s} ;
mkPConj : Str -> PConj = \s -> lin PConj {s=s} ;
mkVoc : Str -> Voc = \s -> lin Voc {s=s} ;
mkLN : Str -> LN = \s -> lin LN {s=s} ;
mkGN : Str -> GN = \s -> lin GN {s=s} ;
mkSN : Str -> SN = \s -> lin SN {s=s} ;
mkPN : Str -> PN = \s -> lin PN {s=s} ;
}

View File

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

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

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

View File

@@ -1,5 +1,5 @@
--# -coding=utf8 --# -coding=utf8
concrete CatBul of Cat = CommonX - [Temp,Tense,IAdv,AdV] ** open ResBul, Prelude, Predef, (R = ParamX) in { concrete CatBul of Cat = CommonX - [Temp,Tense,TTAnt,IAdv,AdV] ** open ResBul, Prelude, Predef, (R = ParamX) in {
lincat lincat
-- Tensed/Untensed -- Tensed/Untensed

View File

@@ -32,7 +32,6 @@ concrete ConjunctionBul of Conjunction =
ConjAP conj ss = { ConjAP conj ss = {
s = \\aform,p => linCoord []!conj.sep ++ ss.s!aform!p!conj.sep ++ conj.s ++ ss.s!aform!p!4; s = \\aform,p => linCoord []!conj.sep ++ ss.s!aform!p!conj.sep ++ conj.s ++ ss.s!aform!p!4;
adv = ss.adv!conj.conj ++ conj.s ++ ss.adv!4;
isPre = ss.isPre isPre = ss.isPre
} ; } ;

View File

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

View File

@@ -316,18 +316,6 @@ lin UseComp_estar = UseComp ;
lin ProDrop pro = pro ; lin ProDrop pro = pro ;
lin AnaphPron np =
case <np.gn, np.p> of {
<GSg _, PronP1> => i_Pron ;
<GSg _, PronP2> => youSg_Pron ;
<GSg Masc, _> => he_Pron ;
<GSg Fem, _> => she_Pron ;
<GSg Neutr, _> => it_Pron ;
<GPl, PronP1> => we_Pron ;
<GPl, PronP2> => youPl_Pron ;
<GPl, _> => they_Pron
} ;
lin TPastSimple = {s = []} ** {t = VPastSimple} ; --# notpresent lin TPastSimple = {s = []} ** {t = VPastSimple} ; --# notpresent
} }

View File

@@ -1,4 +1,4 @@
--# -path=.:../abstract:../common:../api --# -path=.:../abstract:../common:../api:../prelude
concrete LangBul of Lang = concrete LangBul of Lang =
GrammarBul, GrammarBul,

View File

@@ -33,13 +33,13 @@ oper
mkA2 a p = a ** {c2 = p ; lock_A2 = <>} ; mkA2 a p = a ** {c2 = p ; lock_A2 = <>} ;
mkAS : A -> AS ; mkAS : A -> AS ;
mkAS v = v ** {lock_A = <>} ; mkAS v = v ;
mkA2S : A -> Prep -> A2S ; mkA2S : A -> Prep -> A2S ;
mkA2S v p = mkA2 v p ** {lock_A = <>} ; mkA2S v p = mkA2 v p ;
mkAV : A -> AV ; mkAV : A -> AV ;
mkAV v = v ** {lock_A = <>} ; mkAV v = v ;
mkA2V : A -> Prep -> A2V ; mkA2V : A -> Prep -> A2V ;
mkA2V v p = mkA2 v p ** {lock_A2 = <>} ; mkA2V v p = mkA2 v p ** {lock_A2 = <>} ;
@@ -75,7 +75,6 @@ oper
compoundV : V -> Str -> V ; compoundV : V -> Str -> V ;
compoundV v adv = { compoundV v adv = {
s = \\asp,vform => v.s ! asp ! vform ++ adv ; s = \\asp,vform => v.s ! asp ! vform ++ adv ;
n = \\nform => v.n ! nform ++ adv ;
vtype = VNormal; vtype = VNormal;
lock_V=<> lock_V=<>
} ; } ;
@@ -105,7 +104,7 @@ oper
-- the first one or both can be absent. -- the first one or both can be absent.
mkV3 : V -> Prep -> Prep -> V3 ; -- speak, with, about mkV3 : V -> Prep -> Prep -> V3 ; -- speak, with, about
mkV3 v p q = {s = v.s; s1 = v.s1; c2 = p; c3 = q; vtype = v.vtype; lock_V3 = <>} ; mkV3 v p q = {s = v.s; c2 = p; c3 = q; vtype = v.vtype; lock_V3 = <>} ;
dirV3 : V -> Prep -> V3 ; -- give,_,to dirV3 : V -> Prep -> V3 ; -- give,_,to
dirV3 v p = mkV3 v noPrep p ; dirV3 v p = mkV3 v noPrep p ;
@@ -169,7 +168,7 @@ oper
-- --
prepN2 : N -> Prep -> N2 ; prepN2 : N -> Prep -> N2 ;
prepN2 n p = n ** {c2 = p} ; prepN2 n p = lin N2 (n ** {c2 = p}) ;
dirN2 : N -> N2 ; dirN2 : N -> N2 ;
dirN2 n = prepN2 n noPrep ; dirN2 n = prepN2 n noPrep ;
@@ -179,7 +178,7 @@ oper
-- --
prepN3 : N -> Prep -> Prep -> N3 ; prepN3 : N -> Prep -> Prep -> N3 ;
prepN3 n p q = n ** {c2 = p; c3 = q} ; prepN3 n p q = lin N3 (n ** {c2 = p; c3 = q}) ;
dirN3 : N -> Prep -> N3 ; dirN3 : N -> Prep -> N3 ;
dirN3 n p = prepN3 n noPrep p ; dirN3 n p = prepN3 n noPrep p ;
@@ -189,9 +188,9 @@ oper
compoundN = overload { compoundN = overload {
compoundN : Str -> N -> N compoundN : Str -> N -> N
= \s,n -> {s = \\nform => s ++ n.s ! nform ; rel = \\aform => s ++ n.rel ! aform; relType = AdvMod; g=n.g ; anim=n.anim ; lock_N = <>} ; = \s,n -> {s = \\nform => s ++ n.s ! nform ; rel = \\aform => s ++ n.rel ! aform; relType = AdvMod; g=n.g ; lock_N = <>} ;
compoundN : N -> Str -> N compoundN : N -> Str -> N
= \n,s -> {s = \\nform => n.s ! nform ++ s; rel = \\aform => n.rel ! aform ++ s; relType = AdvMod; g=n.g ; anim=n.anim ; lock_N = <>} ; = \n,s -> {s = \\nform => n.s ! nform ++ s; rel = \\aform => n.rel ! aform ++ s; relType = AdvMod; g=n.g ; lock_N = <>} ;
compoundN : N -> N -> N compoundN : N -> N -> N
= \n1,n2 -> lin N = \n1,n2 -> lin N
{s = table { {s = table {

View File

@@ -200,12 +200,6 @@ lin pot5decimal d = {
_ => BIND _ => BIND
} ; } ;
inc : DTail -> DTail = \t -> case t of {
T1 => T2 ;
T2 => T3 ;
T3 => T1
} ;
mk2Dig : Str -> Str -> TDigit = \c,o -> mk3Dig c (c+"ма") o Pl ; mk2Dig : Str -> Str -> TDigit = \c,o -> mk3Dig c (c+"ма") o Pl ;
mkDig : Str -> TDigit = \c -> mk2Dig c (c + "ти") ; mkDig : Str -> TDigit = \c -> mk2Dig c (c + "ти") ;

View File

@@ -187,7 +187,7 @@ oper
in {s = mkNoun (v0+"е"+v1) in {s = mkNoun (v0+"е"+v1)
(v0+v1+"и") (v0+v1+"и")
(v0+"е"+v1+"а") (v0+"е"+v1+"а")
(v0+"е"+v1+"е") (v0+v1+"ьо")
g ; g ;
rel = \\_ => base ; relType = Pref ; rel = \\_ => base ; relType = Pref ;
g = g ; g = g ;

View File

@@ -70,8 +70,7 @@ concrete SentenceBul of Sentence = CatBul ** open Prelude, ResBul in {
s = \\q => t.s ++ p.s ++ cl.s ! t.t ! t.a ! p.p ! q s = \\q => t.s ++ p.s ++ cl.s ! t.t ! t.a ! p.p ! q
} ; } ;
UseRCl t p cl = { UseRCl t p cl = {
s = \\agr => t.s ++ p.s ++ cl.s ! t.t ! t.a ! p.p ! agr ; s = \\agr => t.s ++ p.s ++ cl.s ! t.t ! t.a ! p.p ! agr
role = cl.role
} ; } ;
UseSlash t p cl = { UseSlash t p cl = {
s = \\agr => t.s ++ p.s ++ cl.s ! agr ! t.t ! t.a ! p.p ! Main ; s = \\agr => t.s ++ p.s ++ cl.s ! agr ! t.t ! t.a ! p.p ! Main ;

View File

@@ -1,6 +1,7 @@
concrete TenseBul of Tense = CatBul [Tense,Temp], TenseX - [Temp,Tense,TPres,TPast,TFut,TCond,IAdv,AdV,SC] ** open ResBul in { concrete TenseBul of Tense = CatBul [Tense,Temp], TenseX - [Temp,Tense,TTAnt,TPres,TPast,TFut,TCond,IAdv,AdV,SC] ** open ResBul in {
lin lin
TTAnt t a = {s = a.s ++ t.s ; a = a.a ; t = t.t} ;
TPres = {s = []} ** {t = VPresent} ; TPres = {s = []} ** {t = VPresent} ;
TPast = {s = []} ** {t = VPastImperfect} ; --# notpresent TPast = {s = []} ** {t = VPastImperfect} ; --# notpresent
TFut = {s = []} ** {t = VFut} ; --# notpresent TFut = {s = []} ** {t = VFut} ; --# notpresent

View File

@@ -179,12 +179,6 @@ param
_ => BIND _ => BIND
} ; } ;
inc : DTail -> DTail = \t -> case t of {
T1 => T2 ;
T2 => T3 ;
T3 => T1
} ;
oper oper
mk2Dig : Str -> Str -> TDigit = \c,o -> mk3Dig c o Pl ; mk2Dig : Str -> Str -> TDigit = \c,o -> mk3Dig c o Pl ;
mkDig : Str -> TDigit = \c -> mk2Dig c (c + ":o") ; mkDig : Str -> TDigit = \c -> mk2Dig c (c + ":o") ;

View File

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

View File

@@ -155,6 +155,8 @@ oper
= \s,at -> lin Adv {s = word s ; advType = at ; hasDe = advTypeHasDe at} ; = \s,at -> lin Adv {s = word s ; advType = at ; hasDe = advTypeHasDe at} ;
mkAdv : Adv -> AdvType -> Adv -- To fix the AdvType in an Adv produced by SyntaxChi.mkAdv mkAdv : Adv -> AdvType -> Adv -- To fix the AdvType in an Adv produced by SyntaxChi.mkAdv
= \adv,at -> adv ** {advType = at ; hasDe = advTypeHasDe at} ; = \adv,at -> adv ** {advType = at ; hasDe = advTypeHasDe at} ;
mkAdv : Str -> AdvType -> Bool -> Adv
= \s,at,hasDe -> lin Adv {s = word s ; advType = at ; hasDe = hasDe} ;
} ; } ;
@@ -181,7 +183,7 @@ oper
mkInterj : Str -> Interj mkInterj : Str -> Interj
= \s -> lin Interj {s = word s} ; = \s -> lin Interj {s = word s} ;
emptyPrep : Preposition = mkPrep [] ; emptyPrep : Prep = mkPrep [] ;
mkpNP : Str -> CatChi.NP mkpNP : Str -> CatChi.NP
= \s -> lin NP {s = word s ; det = []} ; = \s -> lin NP {s = word s ; det = []} ;

View File

@@ -64,5 +64,11 @@ resource ParamX = open Prelude in {
param param
DTail = T1 | T2 | T3 ; DTail = T1 | T2 | T3 ;
oper
inc : DTail -> DTail = \t -> case t of {
T1 => T2 ;
T2 => T3 ;
T3 => T1
} ;
} }

View File

@@ -726,7 +726,6 @@ adjFormsAdjective : AdjForms -> Adjective = \afs -> {
Ag _ Pl P1 => jarniAdjForms "naše" ** { Ag _ Pl P1 => jarniAdjForms "naše" ** {
msnom = "náš" ; msnom = "náš" ;
msins = "naším" ;
fsgen,mpnom = "naši" ; fsgen,mpnom = "naši" ;
fsins = "naší" ; fsins = "naší" ;
pdat, msins = "našim" ; pdat, msins = "našim" ;
@@ -735,7 +734,6 @@ adjFormsAdjective : AdjForms -> Adjective = \afs -> {
} ; } ;
Ag _ Pl P2 => jarniAdjForms "vaše" ** { Ag _ Pl P2 => jarniAdjForms "vaše" ** {
msnom = "váš" ; msnom = "váš" ;
msins = "vaším" ;
fsgen,mpnom = "vaši" ; fsgen,mpnom = "vaši" ;
fsins = "vaší" ; fsins = "vaší" ;
pdat, msins = "vašim" ; pdat, msins = "vašim" ;

View File

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

View File

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

View File

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

View File

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

View File

@@ -182,7 +182,7 @@ concrete ExtendEng of Extend =
BaseVPS2 x y = BaseVPS2 x y =
let baseX : OneFinVPS = baseVPS2 x ; let baseX : OneFinVPS = baseVPS2 x ;
baseY : OneFinVPS = baseVPS y ; baseY : OneFinVPS = baseVPS (lin VPS y) ;
in twoTable2 Order Agr baseX baseY ** {fin = baseX.fin ; c2 = y.c2} ; in twoTable2 Order Agr baseX baseY ** {fin = baseX.fin ; c2 = y.c2} ;
ConsVPS2 x xs = ConsVPS2 x xs =
let baseX : OneFinVPS = baseVPS2 x ; let baseX : OneFinVPS = baseVPS2 x ;
@@ -323,8 +323,8 @@ lin BaseImp = twoTable2 CPolarity ImpForm ;
} ; } ;
lin lin
PassVPSlash vps = passVPSlash (lin VPS vps) [] ; PassVPSlash vps = passVPSlash (lin VPSlash vps) [] ;
PassAgentVPSlash vps np = passVPSlash (lin VPS vps) ("by" ++ np.s ! NPAcc) ; PassAgentVPSlash vps np = passVPSlash (lin VPSlash vps) ("by" ++ np.s ! NPAcc) ;
ProgrVPSlash vp = insertObjc (\\a => vp.ad ! a ++ vp.prp ++ vp.p ++ vp.s2 ! a) ProgrVPSlash vp = insertObjc (\\a => vp.ad ! a ++ vp.prp ++ vp.p ++ vp.s2 ! a)
(predAux auxBe ** {c2 = vp.c2; gapInMiddle = vp.gapInMiddle; missingAdv = vp.missingAdv}); (predAux auxBe ** {c2 = vp.c2; gapInMiddle = vp.gapInMiddle; missingAdv = vp.missingAdv});
@@ -500,18 +500,4 @@ lin CardCNCard card cn =
lin theyFem_Pron = mkPron "they" "them" "their" "theirs" plural P3 feminine ; lin theyFem_Pron = mkPron "they" "them" "their" "theirs" plural P3 feminine ;
lin theyNeutr_Pron = mkPron "they" "them" "their" "theirs" plural P3 nonhuman ; lin theyNeutr_Pron = mkPron "they" "them" "their" "theirs" plural P3 nonhuman ;
lin AnaphPron np =
case np.a of {
AgP1 Sg => i_Pron ;
AgP1 Pl => we_Pron ;
AgP2 Sg => youSg_Pron ;
AgP2 Pl => youPl_Pron ;
AgP3Sg Masc => he_Pron ;
AgP3Sg Fem => she_Pron ;
AgP3Sg Neutr => it_Pron ;
AgP3Pl Masc => they_Pron ;
AgP3Pl Fem => theyFem_Pron ;
AgP3Pl Neutr => theyNeutr_Pron
} ;
} }

View File

@@ -134,12 +134,6 @@ lin PosDecimal d = d ** {hasDot=False} ;
_ => BIND _ => BIND
} ; } ;
inc : DTail -> DTail = \t -> case t of {
T1 => T2 ;
T2 => T3 ;
T3 => T1
} ;
mk2Dig : Str -> Str -> TDigit = \c,o -> mk3Dig c o Pl ; mk2Dig : Str -> Str -> TDigit = \c,o -> mk3Dig c o Pl ;
mkDig : Str -> TDigit = \c -> mk2Dig c (c + "th") ; mkDig : Str -> TDigit = \c -> mk2Dig c (c + "th") ;

View File

@@ -353,7 +353,7 @@ concrete ExtendEst of Extend =
-- : VPSlash -> AP ; -- täna leitud -- : VPSlash -> AP ; -- täna leitud
PastPartAP vp = { PastPartAP vp = {
s = \\_,_ => vp2adv <vp : VP> <True : Bool> <PastPart Pass : VForm> ; s = \\_,_ => vp2adv <lin VP vp : VP> True (PastPart Pass) ;
infl = Invariable infl = Invariable
} ; } ;
@@ -366,7 +366,7 @@ concrete ExtendEst of Extend =
-- : VPSlash -> NP -> AP -- hobisukeldujate poolt leitud (süvaveepomm) -- : VPSlash -> NP -> AP -- hobisukeldujate poolt leitud (süvaveepomm)
PastPartAgentAP vp np = { PastPartAgentAP vp np = {
s = \\_,_ => appCompl True Pos by8agent_Prep np s = \\_,_ => appCompl True Pos by8agent_Prep np
++ vp2adv <vp : VP> <True : Bool> <PastPart Pass : VForm> ; ++ vp2adv <lin VP vp : VP> True (PastPart Pass) ;
infl = Invariable infl = Invariable
} ; } ;
@@ -374,7 +374,7 @@ concrete ExtendEst of Extend =
-- : AP -> VP -> Cl ; -- it is good to walk / on hea kõndida -- : AP -> VP -> Cl ; -- it is good to walk / on hea kõndida
PredAPVP ap vp = PredAPVP ap vp =
let heaOllaVP : VP = insertObj (\\_,_,_ => ap.s ! True ! NCase Sg Nom) vp ; -- puts AP into the s2 field let heaOllaVP : VP = lin VP (insertObj (\\_,_,_ => ap.s ! True ! NCase Sg Nom) vp) ; -- puts AP into the s2 field
heaOllaComp : Comp = CompVP ASimul PPos heaOllaVP ; -- chooses InfDa, fixes word order heaOllaComp : Comp = CompVP ASimul PPos heaOllaVP ; -- chooses InfDa, fixes word order
heaOlla : VP = UseComp heaOllaComp -- looks silly, but I want to reuse the abstract syntax funs :-P heaOlla : VP = UseComp heaOllaComp -- looks silly, but I want to reuse the abstract syntax funs :-P
in existClause noSubj (agrP3 Sg) heaOlla ; in existClause noSubj (agrP3 Sg) heaOlla ;

View File

@@ -970,9 +970,9 @@ oper
mkV2Q v p = lin V2Q (mk2V2 v p) ; mkV2Q v p = lin V2Q (mk2V2 v p) ;
mkAS a = a ; mkAS a = a ;
mkA2S a p = mkA2 a p ; mkA2S a p = lin A (mkA2 a p) ;
mkAV a = a ; mkAV a = a ;
mkA2V a p = mkA2 a p ; mkA2V a p = lin A (mkA2 a p) ;
mkMU : Str -> MU = \s -> lin MU {s=s; isPre=False} ; mkMU : Str -> MU = \s -> lin MU {s=s; isPre=False} ;

View File

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

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

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

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

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

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

@@ -0,0 +1,20 @@
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} ;
linref V = \v -> v.Nonfinite ++ v.particle ;
}

View File

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

View File

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

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

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

View File

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

12292
src/faroese/MorphoFao.gf Normal file

File diff suppressed because it is too large Load Diff

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

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

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

@@ -0,0 +1,572 @@
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 -> lin N2 (n ** {c2 = noPrep}) ;
mkN2 : N -> Prep -> N2 = \n,p -> lin N2 (n ** {c2 = p}) ;
} ;
mkN3 = overload {
mkN3 : N -> N3 = \n -> lin N3 (n ** {c2 = noPrep; c3 = noPrep}) ;
mkN3 : N -> Prep -> Prep -> N3 = \n,p1,p2 -> lin N3 (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 -> lin A2 (a ** {c2 = noPrep}) ;
mkA2 : A -> Prep -> A2 = \a,p -> lin A2 (a ** {c2 = p}) ;
} ;
mkV = overload {
mkV : Str -> V = regV; -- Nonfinite
mkV : Str -> Str -> V = reg2V ; -- Nonfinite Indicative;Pres;('PSg', P2)
mkV : V -> Str -> V -- particle verb
= \v,p -> v ** {particle = p}
} ;
mkVV : V -> VV = \v -> lin VV v ;
mkVS : V -> VS = \v -> lin VS v ;
mkVQ : V -> VQ = \v -> lin VQ v ;
mkVA : V -> VA = \v -> lin VA v ;
mkV2 = overload {
mkV2 : V -> V2 = \v -> lin V2 (v ** {c2 = noPrep}) ;
mkV2 : V -> Prep -> V2 = \v,p -> lin V2 (v ** {c2 = p}) ;
} ;
mkV3 = overload {
mkV3 : V -> V3 = \v -> lin V3 (v ** {c2 = noPrep; c3 = noPrep}) ;
mkV3 : V -> Prep -> Prep -> V3 = \v,p1,p2 -> lin V3 (v ** {c2 = p1; c3 = p2}) ;
} ;
mkV2A = overload {
mkV2A : V -> V2A = \v -> lin V2A (v ** {c2 = noPrep; c3 = noPrep}) ;
mkV2A : V -> Prep -> Prep -> V2A = \v,p1,p2 -> lin V2A (v ** {c2 = p1; c3 = p2}) ;
} ;
mkV2S = overload {
mkV2S : V -> V2S = \v -> lin V2S (v ** {c2 = noPrep; c3 = noPrep}) ;
mkV2S : V -> Prep -> Prep -> V2S = \v,p1,p2 -> lin V2S (v ** {c2 = p1; c3 = p2}) ;
} ;
mkV2Q = overload {
mkV2Q : V -> V2Q = \v -> lin V2Q (v ** {c2 = noPrep; c3 = noPrep}) ;
mkV2Q : V -> Prep -> Prep -> V2Q = \v,p1,p2 -> lin V2Q (v ** {c2 = p1; c3 = p2}) ;
} ;
mkV2V = overload {
mkV2V : V -> V2V = \v -> lin V2V (v ** {c2 = noPrep; c3 = noPrep}) ;
mkV2V : V -> Prep -> Prep -> V2V = \v,p1,p2 -> lin V2V (v ** {c2 = p1; c3 = p2}) ;
} ;
mkAdv : Str -> Adv = \s -> lin Adv {s=s} ;
mkAdV : Str -> AdV = \s -> lin AdV {s=s} ;
mkAdA : Str -> AdA = \s -> lin AdA {s=s} ;
mkAdN : Str -> AdN = \s -> lin AdN {s=s} ;
mkCAdv : Str -> CAdv = \s -> lin CAdv {s=s; p=""} ;
mkInterj : Str -> Interj = \s -> lin Interj {s=s} ;
mkMU : Str -> MU = \s -> lin MU {s=s; isPre=False} ;
mkPrep : Str -> Prep = \s -> lin Prep {s=s; c=Acc} ;
mkIAdv : Str -> IAdv = \s -> lin IAdv {s=s} ;
mkIP : Str -> IP = \s -> lin IP {s=s} ;
mkIQuant : Str -> IQuant = \s -> lin IQuant {s=s} ;
mkIDet : Str -> IDet = \s -> lin IDet {s=s} ;
mkSubj : Str -> Subj = \s -> lin Subj {s=s} ;
mkQuant : Str -> Quant = \s -> lin Quant {s=s} ;
mkPredet : Str -> Predet = \s -> lin Predet {s=s} ;
mkDet : Str -> Det = \s -> lin Det {s=s} ;
mkCard : Str -> Card = \s -> lin Card {s=s} ;
mkConj : Str -> Conj = \s -> lin Conj {s=s} ;
mkPConj : Str -> PConj = \s -> lin PConj {s=s} ;
mkVoc : Str -> Voc = \s -> lin Voc {s=s} ;
mkLN : Str -> LN = \s -> lin LN {s=s} ;
mkGN : Str -> GN = \s -> lin GN {s=s} ;
mkSN : Str -> SN = \s -> lin SN {s=s} ;
mkPN : Str -> PN = \s -> lin PN {s=s} ;
}

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

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

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

@@ -0,0 +1,132 @@
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 ; particle : 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
} ;
particle = []
} ;
oper Compl = {s : Str; c : Case} ;
oper noPrep : Compl = {s=""; c=Acc} ;
oper CommonNoun = Noun ;
oper AdjPhrase = Adj ;
}

View File

@@ -161,14 +161,14 @@ oper
verbExample : CatFin.Cl -> Str = \cl -> (S.mkUtt cl).s ; verbExample : CatFin.Cl -> Str = \cl -> (S.mkUtt cl).s ;
{- {-
-} --# notpresent -} --# notpresent
inflVerb : CatFin.V -> Str = \verb0 -> inflVerb : SVerb1 -> Str = \verb0 ->
let let
verb = sverb2verbSep verb0 ; verb = sverb2verbSep verb0 ;
vfin : ResFin.VForm -> Str = \f -> vfin : ResFin.VForm -> Str = \f ->
verb.s ! f ; verb.s ! f ;
nounNounHeading : Parameter -> Parameter -> Str = \n1,n2 -> nounNounHeading : Parameter -> Parameter -> Str = \n1,n2 ->
(S.mkUtt (G.PossNP (S.mkCN n1) (S.mkNP (snoun2nounSep n2)))).s ; (S.mkUtt (G.PossNP (S.mkCN n1) (S.mkNP (lin N (snoun2nounSep n2))))).s ;
in in
heading3 (nounNounHeading present_Parameter indicative_Parameter) ++ heading3 (nounNounHeading present_Parameter indicative_Parameter) ++
frameTable ( frameTable (

View File

@@ -258,7 +258,7 @@ lin PresPartAP vp = {
hasPrefix = False hasPrefix = False
} ; } ;
lin PastPartAP vps = { lin PastPartAP vps = {
s = \\_,nf => preCompVP <vps : VP> (PastPartAct (AN nf)) ; s = \\_,nf => preCompVP (lin VP vps) (PastPartAct (AN nf)) ;
p = vps.c2.s.p1 ; p = vps.c2.s.p1 ;
hasPrefix = False hasPrefix = False
} ; } ;

View File

@@ -406,10 +406,10 @@ mkVS = overload {
mkQuant = overload { mkQuant = overload {
mkQuant : N -> Quant = mkQuant : N -> Quant =
\noun -> heavyQuant {s1 = \\n,c => (snoun2nounBind noun).s ! NCase n c ; s2 = \\_ => [] ; isNum,isPoss,isNeg,isDef = False} ; \noun -> lin Quant (heavyQuant {s1 = \\n,c => (snoun2nounBind noun).s ! NCase n c ; s2 = \\_ => [] ; isNum,isPoss,isNeg,isDef = False}) ;
mkQuant : N -> N -> Quant = mkQuant : N -> N -> Quant =
\sg,pl -> heavyQuant {s1 = table {Sg => \\c => (snoun2nounBind pl).s ! NCase Sg c ; Pl => \\c => (snoun2nounBind pl).s ! NCase Pl c} ; \sg,pl -> lin Quant (heavyQuant {s1 = table {Sg => \\c => (snoun2nounBind pl).s ! NCase Sg c ; Pl => \\c => (snoun2nounBind pl).s ! NCase Pl c} ;
s2 = \\_ => [] ; isNum,isPoss,isNeg,isDef = False} ; s2 = \\_ => [] ; isNum,isPoss,isNeg,isDef = False}) ;
} ; } ;
mkInterj : Str -> Interj mkInterj : Str -> Interj

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