157 Commits

Author SHA1 Message Date
Krasimir Angelov 621dc23f60 added conjunction of complements 2026-08-15 18:07:05 +02:00
Krasimir Angelov dcd262df05 fix in PassVPSlash 2026-08-15 13:20:24 +02:00
Krasimir Angelov c3f937c667 implement the VPS API 2026-08-13 15:56:41 +02:00
Krasimir Angelov 20cb49cd57 change the default case to accusative 2026-08-13 14:49:49 +02:00
Krasimir Angelov bd0506760e Merge branch 'master' of github.com:GrammaticalFramework/gf-rgl 2026-08-03 16:11:39 +02:00
Krasimir Angelov eae650960b implement OrdNumeralSuperl 2026-08-03 16:11:23 +02:00
Inari Listenmaa 34062e2ed2 Merge pull request #473 from adelon/master
Small fixes for English and Finnish
2026-07-29 18:43:48 +03:00
adelon 827a0296c9 Fin: fix vowel harmony of millionth and billionth 2026-07-24 16:54:00 +02:00
adelon 110266306d Fin: fix singular essive of tuhatN 2026-07-24 16:54:00 +02:00
adelon 498acd0b86 Fin: fix probable_AS inflection
Model `todennäköinen` as a compound so its final component controls vowel harmony. Keep `compoundA.p` empty unless the wrapped adjective has prefix-only modifying use.
2026-07-24 16:54:00 +02:00
adelon d947e7e2e2 Fin: fix comparative and superlative adverbs 2026-07-21 20:57:12 +02:00
adelon 00790d98fa Eng: fix simple past of stride and bestride 2026-07-21 19:50:29 +02:00
adelon 83cfc496a4 Fin: fix elative of ne 2026-07-21 19:50:29 +02:00
aarneranta 363219730e polish: put the AdvVP adverbial after the verb
AdvVP built its result with setPrefix, so the adverbial landed before the
verb. Polish is neutrally SVO, and this matters beyond adverbs proper: an
object reached through PrepNP arrives at AdvVP as an Adv, so a two-place
verb came out as *"π zbiór pusty przecina" rather than "π przecina zbiór
pusty". Both orders are grammatical, but the preverbal one topicalizes.

"śpi tutaj" is as good as "tutaj śpi", so the RGL's own example is
unaffected.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-16 19:50:20 +02:00
aarneranta 8c4cd58bd1 polish: complete the RGL enough to build an application grammar
Adding Polish to informath (grammars/next) exposed a set of gaps. Unlike
Czech, StructuralPol was already complete; what was missing was a handful
of lins, a way to govern the nominative, and some outright mistakes.

Missing lins, all reached as qualified Grammar.X by the application's
functors and so not shimmable from the application side:

  AdjectivePol  AdvAP
  SentencePol   SSubjS
  IdiomPol      ImpP3
  StructuralPol that_Subj
  MarkupPol     new module (Markup is not part of the RGL build script,
                so it is compiled on demand, as MarkupCze is)
  ParadigmsPol  mkAdv (every other ParadigmsX has it; the application
                interfaces reach it as Paradigms.mkAdv)

ImpP3 has no third-person imperative to use, so it takes the standard
"niech" periphrasis. The copula takes the future ("niech x będzie grupą")
and every other verb the present ("niech x należy do A"): być is the only
Polish verb with a synthetic future, and imienne marks exactly the copular
VPs.

NomPrep: ComplCase had no nominative at all, so "jako", "niż" and
"zdefiniowany jako" -- all of which govern the nominative -- came out
locative ("mniejszy niż liczbie"). mkCompl now maps Nom to a new NomPrep,
and the dep tables of the pronouns, nounPN, mkPN and the structural NPs
cover it. LexiconNounPol is marked DO NOT EDIT, but paris_PN and john_PN
inline their own dep tables and so had to be extended too.

Two corrections:

  VerbPol.CompCN used the nominative for a predicative noun, giving
  "x jest grupa"; Polish uses the instrumental, as CompNP right below it
  already does.

  ExtendPol.ExistsNP inherited ExistNP from ExtendFunctor, giving
  "jest macierz". Polish distinguishes the two: "there exists" is istnieć,
  which is what mathematical prose uses.

ParadigmsPol.guess_paradigm_basic never matched -ość, the productive
feminine abstract suffix, so sprzeczność took a masculine declension
(*sprzeczności/a, *sprzecznościowi) despite being tagged feminine. It now
routes to the kość paradigm.

Also documents, without changing, why the 2-string mkN throws its genitive
away: guess_paradigm's 2-string table is unsound (its first branch matches
every noun in -a, and its branches disagree about whether mkNTable* takes
the nominative or the bare stem), so passing sggen to it turns
"liczba"/"liczby" into *liczbaa. The 1-string guesser is the sound path
until that table is repaired.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-16 19:22:24 +02:00
aarneranta 11f73acc28 czech: implement three-place verbs (V3)
Add a proper V3 category to the Czech RGL, previously absent (V3 fell
through to the {s:Str} default and Slash2V3/Slash3V3 were notYet stubs).

- CatCze: lincat V3 = VerbForms ** {c, c2 : ComplementCase}; extend
  VPSlash with a trailing `ind` field for the incorporated indirect
  object (mirrors the English VPSlash c2 field).
- VerbCze: implement Slash2V3 and Slash3V3; ComplSlash now renders the
  `ind` string after the object slot, and SlashV2a sets ind = []. This
  keeps the object before the indirect object under the shared
  ComplV3 v o d = ComplSlash (Slash3V3 v d) o.
- ParadigmsCze: add the mkV3 paradigm (default acc/dat, plus an
  explicit two-complement-case form).
- MissingCze: drop the now-implemented Slash2V3/Slash3V3 stubs.

V2 predication is unchanged (ind is empty for V2-derived VPSlash).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-16 17:51:41 +02:00
aarneranta 344342012d czech: fix noun paradigm selection, add loanword and adjectival types
declensionNounForms only tested hardConsonant (d t g h k n r), so the neutral
consonants (b f l m p s v), which take the hard endings, matched nothing and
fell through to the soft declSTROJ fallback: graf, atom, profil, přístup were
all declined as if soft. Same gap in guessNounForms. Add hardishConsonant
(hard + neutral + the foreign z, x) and use it in both.

The genitive passed to the three-argument mkN was only used to pick a
paradigm, then thrown away, so the oblique stem was re-derived from the
nominative by dropFleetingE. That guesses wrong in both directions: it fires
on člen -> člnu, and fails to fire on uzel -> uzelu, doplněk -> doplněku,
výpočet -> výpočetu. Give declHRAD, declHRADA and declMUZ stem-taking
variants and let declensionNounForms pass the stem it was given. The
one-argument guessNounForms keeps the old dropFleetingE behaviour.

New paradigms, all previously falling back to declSTROJ:
  declLATINUS   algoritmus - algoritmu, kosmos - kosmu (also -os)
  declLATINUSA  the same, masculine animate
  declLATINUM   kontinuum - kontinua
  declGREEKMA   schéma - schématu
  declHRADA     les - lesa, zákon - zákona
  declADJF      proměnná - proměnné
  declADJM      nultý - nultého
  declINVAR     indeclinable loans: bombé, tamari, software

Also match feminine consonant stems by genitive (-i -> kost, -e/-ě -> píseň),
masculine -e/-ě genitives (kužel - kužele, král - krále), and neuter -ě
(těžiště), none of which were reachable before.

Measured on the 1177 nouns of informath's WikidataWordsCze: 225 hit the
fallback before, 1 after (the acronym ADE).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-10 16:32:25 +02:00
aarneranta a79202f667 czech: fill in the lins needed to build an application grammar
The Czech resource was too incomplete to compile a Syntax/Grammar client:
Sentence, Idiom and Question defined almost nothing, and many Structural
words were absent, so MissingCze's notYet stubs were reached at PMCFG
generation time.

Added:
  CatCze        lincat VV
  SentenceCze   AdvS, ExtAdvS, SSubjS, EmbedS, EmbedQS, ImpVP
  IdiomCze      ImpP3, ExistNP, ImpersCl, GenericCl
  VerbCze       CompCN, ComplVS, ComplVV, PassV2
  NounCze       SentCN, PredetNP
  AdverbCze     SubjS
  QuestionCze   QuestIAdv
  PhraseCze     UttImpSg, UttImpPl, UttImpPol
  StructuralCze all_Predet, both7and_DConj, between_Prep, by8means_Prep,
                can_VV, either7or_DConj, every_Det, if_Subj, no_Quant,
                on_Prep, someSg_Det, that_Subj, under_Prep, where_IAdv
  ExtendCze     ExistsNP no longer excluded

Three of these approximate, because VerbForms lacks the required forms:
ImpVP uses the 1st person plural present ("předpokládáme, že ...") as there
is no imperative; PassV2 uses the reflexive passive ("číslo se dělí") as
passpart is commented out in ResCze; ImpP3 uses "nechť", which suits
mathematical text more than the "let John walk" of the RGL example.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-10 15:29:55 +02:00
aarneranta 8a82c2ca53 added Cze.UttVP 2026-07-10 14:56:08 +02:00
aarneranta e866940d65 add the Czech Markup module
MarkupNP marks s, clit and prep, since in Czech these are alternative
surface forms of a pronoun chosen by context, as in MarkupRomance.
The nominative clitic is left alone: it is the pro-drop subject, empty
for every personal pronoun, so marking it up gave "<b> </b> je starý".

Inherit MarkupCze in LangCze, as LangFin does; stringMark is excluded
because abstract Lang already excludes it.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-10 14:16:34 +02:00
aarneranta 8f1b3eeece compiling SymbolicCze by default 2026-07-10 14:08:24 +02:00
aarneranta b14c0f8492 complete the Czech Symbol module
Implement the remaining Symbol functions, which previously fell back to
GF's default linearization: IntPN, FloatPN, NumPN, CNNumNP, CNIntNP,
CNSymbNP, SymbS, SymbNum, SymbOrd, and the [Symb] list.

Symbols and numbers are indeclinable neuters, but a cardinal used as a
name still declines (NumPN). CNNumNP treats the numeral as an invariable
label, so the noun carries the case: "město / městu / městem pět".
CNSymbNP goes through numSizeForm and numSizeAgr, as DetCN does, so
SymbNum's Num5 size gives "n měst x a y je staré".

SymbOrd is only approximate: CatCze has no lincat Ord, so it defaults to
{s : Str} and the masculine "n-tý" cannot agree.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-10 12:29:30 +02:00
aarneranta 2e6a750c1a some fixes in ExtendFin to make it compile again 2026-07-10 11:28:00 +02:00
Krasimir Angelov 98128249bd remove the encoding flag 2026-06-10 12:35:32 +02:00
Krasimir Angelov 1e581fbd10 first draft of Ukrainian grammar 2026-06-10 10:48:57 +02:00
Krasimir Angelov f2ac424bfe first draft of a Belarusian grammar 2026-06-09 07:01:11 +02:00
Krasimir Angelov e65469ffb2 added missing extensions (Codex) 2026-06-05 08:25:21 +02:00
Krasimir Angelov 8458a74e25 added type signature 2026-06-01 09:54:52 +02:00
Krasimir Angelov 7156f488dd remove flag 2026-06-01 08:18:22 +02:00
Krasimir Angelov ff44b03344 added ivarN and invarV 2026-06-01 08:16:19 +02:00
Krasimir Angelov 4282523f2f added ordinal numbers 2026-06-01 07:48:41 +02:00
Krasimir Angelov d8208cba24 added TPastSimple 2026-06-01 07:48:09 +02:00
Krasimir Angelov 0a03e037f4 Faroese grammar 2026-05-31 17:29:17 +02:00
Krasimir Angelov 0201d62777 extensions added with Codex 2026-05-29 14:44:23 +02:00
Krasimir Angelov b8bb7f1d72 grammar extensions for Codex 2026-05-28 08:08:41 +02:00
Krasimir Angelov fe56b729b4 remove redundant parameters 2026-05-26 11:01:32 +02:00
Krasimir Angelov cab232a4f6 added mkMU 2026-05-23 17:40:20 +02:00
Krasimir Angelov cdeaf5a271 added ConstructionMkd 2026-05-23 17:35:06 +02:00
Krasimir Angelov 60e38122d0 additions by Codex 2026-05-23 07:33:51 +02:00
Krasimir Angelov 800e2b0dda more Hungarian functions 2026-05-22 13:23:32 +02:00
Krasimir Angelov 84bdce7cc8 import names 2026-05-21 17:17:17 +02:00
Krasimir Angelov add5029b7a forgot tha names module 2026-05-21 17:15:47 +02:00
Krasimir Angelov 19ba581f0e a number of functions added by Codex 2026-05-21 16:39:56 +02:00
Krasimir Angelov a890a1aad5 Merge branch 'master' of github.com:GrammaticalFramework/gf-rgl 2026-05-19 13:29:24 +02:00
Krasimir Angelov 26a1e55cbe more constructions 2026-05-19 13:29:03 +02:00
aarneranta 992e670c10 ParadigmsGre: case for mkPN Str Gender 2026-05-12 14:53:15 +02:00
Krasimir Angelov eea95a6f76 no need to define g 2026-05-09 18:38:21 +02:00
Krasimir Angelov f1facac1bf uncomment cases 2026-05-07 10:02:15 +02:00
Krasimir Angelov c5bb0dacb5 extended pronouns 2026-05-07 08:49:43 +02:00
Krasimir Angelov 44ea945c8c added Human/NonHuman gender to select the right relative pronoun 2026-05-07 08:39:07 +02:00
Krasimir Angelov 9265270a0c added future tense and fix PossPron 2026-05-06 21:57:29 +02:00
Krasimir Angelov 86e2afcfc0 added documentation 2026-05-06 18:15:17 +02:00
Krasimir Angelov 6115d44398 insertAdv and insertAdvSlash should accumulate adverbs 2026-05-06 15:57:59 +02:00
Krasimir Angelov cf6a376272 module for irregular verbs and eat_V2 in Lexicon 2026-05-06 15:11:03 +02:00
Krasimir Angelov 3a8527689c add CompoundN 2026-05-06 14:55:38 +02:00
Krasimir Angelov 416d37eee7 reorder definite and indefinite 2026-05-06 09:59:18 +02:00
Krasimir Angelov c4d578cac3 started with past tense 2026-05-06 09:56:31 +02:00
Krasimir Angelov a7341d9be1 added invarA 2026-05-06 09:18:32 +02:00
Krasimir Angelov 57ef377e6d added type signature 2026-05-05 21:42:57 +02:00
Krasimir Angelov 3a133d035d added lindef VP 2026-05-05 20:21:10 +02:00
Krasimir Angelov 912ddd521f linref for VP 2026-05-05 20:03:58 +02:00
Krasimir Angelov 945bc086f2 UttCN,UttAP,UttAdv 2026-05-05 15:11:43 +02:00
Krasimir Angelov 70806027c1 added infinitives 2026-05-05 15:03:53 +02:00
Krasimir Angelov 88a3759a9e forgot VerbFao.gf 2026-05-05 11:29:05 +02:00
Krasimir Angelov 1910010e70 sketch of the grammar generated with Codex 2026-05-05 11:05:50 +02:00
Krasimir Angelov 0cd851aa10 added mkACard 2026-05-05 08:48:32 +02:00
Krasimir Angelov 2b07314680 fix theyFem_Pron 2026-05-04 19:53:12 +02:00
Krasimir Angelov a3e19ed673 added pronouns 2026-05-04 19:03:17 +02:00
Krasimir Angelov b571d86b7c added pronouns and compounds 2026-04-30 19:13:25 +02:00
Krasimir Angelov 6064e69d8e Merge branch 'master' of github.com:GrammaticalFramework/gf-rgl 2026-04-30 07:06:25 +02:00
Krasimir Angelov 510abc0364 more variants of compoundN 2026-04-30 07:06:04 +02:00
Inari Listenmaa 331a07bd35 Merge pull request #471 from lauma/latvian-new
Readme for new Latvian stuff
2026-04-29 16:25:54 +02:00
lauma 34ba4cf564 Added readme with project acknowledgment and general info. 2026-04-29 17:20:00 +03:00
Krasimir Angelov 5a9ab2cbdf extended pronouns 2026-04-29 15:17:21 +02:00
Krasimir Angelov 97b8cb72aa added pronouns 2026-04-29 11:45:47 +02:00
Krasimir Angelov 09087c1944 lower-case fields Voc,Pres,Past 2026-04-28 11:20:11 +02:00
Krasimir Angelov f497b4a63a added compoundN, compoundV, genNum 2026-04-28 11:09:29 +02:00
Krasimir Angelov 56e97ebfff spec->sp 2026-04-24 15:10:28 +02:00
Krasimir Angelov 16c19eb4b0 Merge branch 'master' of github.com:GrammaticalFramework/gf-rgl 2026-04-23 10:25:31 +02:00
Krasimir Angelov 35f5d9a68b Imperative_Jussive -> imperative 2026-04-23 10:25:08 +02:00
Inari Listenmaa 0f78e35bed Merge pull request #469 from lauma/latvian-new
New implementation of Latvian nouns form Tēzaurs
2026-04-23 09:49:04 +02:00
Inari Listenmaa bff00560d5 (Som) Add full forms of the pronoun into the s field in UsePron…
…The clitic forms used in VPs and Cls are syncategorematic, so those constructions did not break.
2026-04-22 17:30:48 +02:00
Krasimir Angelov 4ab63d2d66 Neutr -> Neuter 2026-04-22 15:15:35 +02:00
Krasimir Angelov 41e3b8280b added gender to nouns 2026-04-22 13:25:04 +02:00
Krasimir Angelov 4a3e30a1cd Merge branch 'master' of github.com:GrammaticalFramework/gf-rgl 2026-04-21 20:28:15 +02:00
Krasimir Angelov 9458f96f0b remove duplicated definitions 2026-04-21 20:27:57 +02:00
lauma ba922b5daa Tēzaurs Spring version 2026 2026-04-20 19:01:47 +03:00
lauma f261b2f45b Tēzaurs export is ordered in alphabetical order to avoid line order fluctuations without actual change. 2026-04-20 19:01:47 +03:00
lauma 939e96fb6c Fixed gender for nouns like "ļaudis", "dzimtļaudis", "vecļaudis", where default paradigm gender is different from actual noun gender. 2026-04-20 19:01:47 +03:00
lauma 3da5f0d318 Tēzaurs place names are now of type LN and, thus, plural placenames like Cēsis don't have singular cases anymore. 2026-04-20 19:01:47 +03:00
lauma 37d915c879 This should help with renaming confilct ResLav.Voc, CommonX.Voc (in theory) 2026-04-20 19:01:46 +03:00
lauma b69c3518a7 Updated dictionary nouns with custom vocatives and PWN IDs. 2026-04-20 19:01:46 +03:00
lauma 0896a77049 Note to future maintainer (me?) about inflecting in number for proper nouns. 2026-04-20 19:01:46 +03:00
lauma 7225033a03 Clean-up spam comments. 2026-04-20 19:01:46 +03:00
lauma ed27aa97fc Tēzaurs noun lexicon export 2026-04-20 19:01:46 +03:00
lauma de3d59c7e8 Work on the new noun paradigms. 2026-04-20 19:01:46 +03:00
lauma 03024d7b72 Merge remote-tracking branch 'origin/latvian-new' into latvian-new 2026-04-20 19:01:45 +03:00
lauma f6187834c4 Merge remote-tracking branch 'origin/latvian-new' into latvian-new 2026-04-20 19:01:45 +03:00
Lauma 842747b407 Merge branch 'GrammaticalFramework:master' into latvian-new 2026-04-20 19:01:43 +03:00
Inari Listenmaa 922f664f74 imperative as linref for lexical verb categories 2026-04-20 09:12:27 +02:00
Krasimir Angelov 3943089d3d cosmetic changes in the tables 2026-04-20 08:17:18 +02:00
Krasimir Angelov 6a6788c24e Merge branch 'master' of github.com:GrammaticalFramework/gf-rgl 2026-04-17 20:08:55 +02:00
Krasimir Angelov e7e7f12ad8 added documentation 2026-04-17 20:08:42 +02:00
Abdirahman Ahmed 90d8897bf9 Fix AdjCN to include comparative NP (ComparA)
AdjCN currently ignores the 'compar' field from AP, causing the NP in
comparative constructions (ComparA) to be dropped.

Example:
- Expected: "guri ka weyn baabuur"
- Actual:   "guri ka weyn"

This change appends ap.compar in AdjCN, preserving the comparison NP.

A corresponding test has been added to src/somali/unittest/ap.gftest.
2026-04-17 13:07:26 +02:00
Krasimir Angelov be0fb1f7c1 indefinite article and MassNP 2026-04-16 19:15:34 +02:00
Krasimir Angelov 7d73dd8195 added UseV 2026-04-16 17:38:53 +02:00
Krasimir Angelov 48ec088faa more syntax 2026-04-16 16:20:18 +02:00
Krasimir Angelov 8a84ca1a45 added QuantityNP 2026-04-16 08:50:21 +02:00
Krasimir Angelov 34f5e625e3 added QuantityNP 2026-04-16 08:43:22 +02:00
Krasimir Angelov 27c2d7cbb3 medial verbs 2026-04-15 07:47:42 +02:00
Krasimir Angelov 26abc63953 fix ordinals 2026-04-15 07:37:33 +02:00
Krasimir Angelov 15df5ed37e fix PossNP 2026-04-15 07:24:17 +02:00
Krasimir Angelov 43f19f283e fix AdVVP, AdVVPSlash 2026-04-15 06:45:39 +02:00
Krasimir Angelov 9b6b94ec1d fix lincat AP 2026-04-14 11:34:12 +02:00
Krasimir Angelov 8b462bdbfb added feminine pronouns 2026-04-14 09:30:18 +02:00
Krasimir Angelov 14c7db6427 нито -> ниту 2026-04-14 09:07:16 +02:00
Krasimir Angelov 2c613bfc83 added dummy ExtendMlt 2026-04-14 09:06:11 +02:00
Krasimir Angelov 8a8c1c6b42 added copula 2026-04-14 08:59:01 +02:00
Krasimir Angelov 76b27152f9 ResMkd->ResHye 2026-04-14 07:23:19 +02:00
Krasimir Angelov 36bc768f26 forgot Structural 2026-04-14 07:16:06 +02:00
Krasimir Angelov b7275a2bac added conjuncts 2026-04-13 20:54:46 +02:00
Krasimir Angelov 7e8e6dbf34 added conjunctions 2026-04-13 20:46:06 +02:00
Krasimir Angelov 27ff3935c5 added mkDet 2026-04-13 19:34:44 +02:00
Krasimir Angelov 4cd3d3158e added pronouns 2026-04-13 16:27:30 +02:00
Krasimir Angelov e3b27613fd elements of syntax for nouns phrases 2026-04-13 16:05:39 +02:00
Krasimir Angelov 5f6a8b2905 fix compilation 2026-04-13 11:04:31 +02:00
Krasimir Angelov 6203aee170 fix EmbedVP 2026-04-13 10:29:37 +02:00
Krasimir Angelov ffb77daf31 fix UttVP 2026-04-13 10:17:17 +02:00
Krasimir Angelov 494c91f9dd whatSg_IP/whatPl_IP 2026-04-13 09:51:15 +02:00
Krasimir Angelov 6f6405b90e make it compile again 2026-04-13 09:35:08 +02:00
Krasimir Angelov da0e273d3d improved several functions 2026-04-13 09:13:38 +02:00
Krasimir Angelov 263b668249 more fixes 2026-04-11 18:04:50 +02:00
Krasimir Angelov 019a347246 fixes 2026-04-11 17:21:09 +02:00
Krasimir Angelov 6aeda22ed6 fix imperatives 2026-04-11 16:28:55 +02:00
Krasimir Angelov ae9b7d4d45 added pidgin rules 2026-04-11 15:33:05 +02:00
Krasimir Angelov 323e4b4cdf more structural words 2026-04-11 15:03:44 +02:00
Krasimir Angelov e42c5f53e2 added this_Quant, that_Quant 2026-04-11 14:09:44 +02:00
Krasimir Angelov fea01dd313 added questions and relative clauses 2026-04-11 12:01:59 +02:00
Krasimir Angelov 9e402cb608 prepare for numerals with countable forms 2026-04-11 08:58:08 +02:00
Krasimir Angelov 401ac1f954 added missing files 2026-04-11 08:45:52 +02:00
Krasimir Angelov 6a2cb9ec77 Merge branch 'master' of github.com:GrammaticalFramework/gf-rgl 2026-04-10 19:58:56 +02:00
Krasimir Angelov b339f7c2fc started with tenses 2026-04-10 19:58:11 +02:00
EkaterinaVoloshina d6f3cae141 fixed names of fields 2026-04-10 15:57:46 +02:00
EkaterinaVoloshina 44acdbd350 fixed fields in armenian 2026-04-10 15:49:30 +02:00
EkaterinaVoloshina f630f6ef29 Merge branch 'master' of https://github.com/GrammaticalFramework/gf-rgl 2026-04-10 15:14:39 +02:00
EkaterinaVoloshina 8808ce108b changed fields 2026-04-10 15:12:02 +02:00
Krasimir Angelov 1c3bb0f6eb added relative pronoun 2026-04-09 14:25:26 +02:00
Krasimir Angelov 5cc990d259 added CompoundN 2026-04-09 14:03:06 +02:00
Krasimir Angelov 621cfd8b43 support for medial verbs 2026-04-05 11:39:43 +02:00
Krasimir Angelov deb9d40b7e placeholders for morphological functions 2026-04-04 11:18:04 +02:00
Krasimir Angelov 25f422f5ca Merge branch 'master' of github.com:GrammaticalFramework/gf-rgl 2026-04-03 16:57:43 +02:00
Krasimir Angelov f0abf5deff added compoundV 2026-04-03 16:55:51 +02:00
lauma fe2dde5a2c Merge remote-tracking branch 'origin/latvian-new' into latvian-new 2025-10-25 01:01:50 +03:00
lauma 2adce20f76 Work on the new noun paradigms. 2025-10-25 00:56:24 +03:00
Lauma b8a0e7adfe Merge branch 'GrammaticalFramework:master' into latvian-new 2025-10-25 00:55:15 +03:00
lauma e4cf12ee1a Uncommented large functions 2025-08-25 17:19:40 +03:00
lauma 943f387a23 Noun stemchanges for the Lav remake. 2025-08-25 17:17:51 +03:00
248 changed files with 150082 additions and 5043 deletions
+1 -1
View File
@@ -7,7 +7,7 @@ Bul,Bulgarian,bulgarian,,,y,,,,,y,n
Cat,Catalan,catalan,Romance,,y,,,,y,y,n
Cgg,Rukiga,rukiga,,,y,y,n,n,y,y,n
Chi,Chinese (simplified),chinese,,,,,,,,y,y
Cze,Czech,czech,,,,,,n,,y,n
Cze,Czech,czech,,,,,,y,,y,n
Dan,Danish,danish,Scand,,y,,,,,y,n
Dut,Dutch,dutch,,,y,,,,,y,n
Eng,English,english,,,y,,,,y,y,y
1 Code Name Directory Functor Unlexer Present All Try Symbolic Compatibility Synopsis MorphoDict
7 Cat Catalan catalan Romance y y y n
8 Cgg Rukiga rukiga y y n n y y n
9 Chi Chinese (simplified) chinese y y
10 Cze Czech czech n y y n
11 Dan Danish danish Scand y y n
12 Dut Dutch dutch y y n
13 Eng English english y y y y
+60 -24
View File
@@ -1,25 +1,61 @@
concrete CatSqi of Cat = CommonX ** open ParamX, Prelude, ResSqi 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, VA, VV, VS, VQ = Verb ;
lincat V2, V2S, V2Q = Verb ** {c2 : Compl} ;
lincat V3, V2A, V2V = Verb ** {c2,c3 : Compl} ;
lincat Prep = Compl ;
lincat Numeral = {s : Str} ;
lincat Digits = {s : Str; n : Number; tail : DTail} ;
lincat Decimal = {s : Str; n : Number; hasDot : Bool} ;
lincat AP = {s: Species => Case => Gender => Number => Str} ;
lincat CN = Noun ;
lincat Num = {s : Str; n : Number} ;
lincat Quant = {s : Case => Gender => Number => Str; spec : Species} ;
lincat Det = {s : Case => Gender => Str; spec : Species; n : Number} ;
lincat NP = {s: Case => Str; a : Agr} ;
lincat Pron = {s: Case => Str; acc_clit, dat_clit : Str; a : Agr} ;
concrete CatSqi of Cat = CommonX ** open ParamX,Prelude,ResSqi in {
lincat A = Adj ;
lincat A2 = Adj ** {c2 : Compl} ;
lincat V, VA, VV, VS, VQ = Verb ;
lincat V2, V2S, V2Q = Verb ** {c2 : Compl} ;
lincat V3, V2A, V2V = Verb ** {c2,c3 : Compl} ;
lincat Prep = Compl ;
lincat ACard = {s : Str} ;
lincat AP = {s : Species => Case => Gender => Number => Str} ;
lincat CN = Noun ;
lincat Card = {s : Str} ;
lincat Cl = {s : Str} ;
lincat ClSlash = {s : Str} ;
lincat Comp = {s : Str} ;
lincat Conj = {s : Str} ;
lincat DAP = {s : Str} ;
lincat Decimal = {s : Str; n : Number; hasDot : Bool} ;
lincat Det = {s : Case => Gender => Str; sp : Species; n : Number} ;
lincat Digits = {s : Str; n : Number; tail : DTail} ;
lincat GN = {s : Str} ;
lincat IComp = {s : Str} ;
lincat IDet = {s : Str} ;
lincat IP = {s : Str} ;
lincat IQuant = {s : Str} ;
lincat Imp = {s : Str} ;
lincat LN = {s : Str} ;
lincat N = Noun ;
lincat N2 = {s : Species => Case => Number => Str; g : Gender;
c2 : {s : Str}} ;
lincat N3 = {s : Species => Case => Number => Str; g : Gender;
c2 : {s : Str}; c3 : {s : Str}} ;
lincat NP = {s : Case => Str; a : Agr} ;
lincat Num = {s : Str; n : Number} ;
lincat Numeral = {s : Str} ;
lincat Ord = {s : Str} ;
lincat PN = {s : Str} ;
lincat Predet = {s : Str} ;
lincat Pron = {s: Case => Str; acc_clit, dat_clit : Str; a : Agr} ;
lincat QCl = {s : Str} ;
lincat QS = {s : Str} ;
lincat Quant = {s : Case => Gender => Number => Str; sp : Species} ;
lincat RCl = {s : Str} ;
lincat RP = {s : Str} ;
lincat RS = {s : Str} ;
lincat S = {s : Str} ;
lincat SN = {s : Str} ;
lincat SSlash = {s : Str} ;
lincat Subj = {s : Str} ;
lincat VP = {indicative : Tense => Number => Person => Case => Str;
participle : Case => Str;
pres_optative : Number => Person => Case => Str;
perf_optative : Number => Person => Case => Str;
pres_admirative : Number => Person => Case => Str;
imperf_admirative : Number => Person => Case => Str} ;
lincat VPSlash = {indicative : Tense => Number => Person => Str;
imperative : Number => Str; participle : Str;
pres_optative : Number => Person => Str;
perf_optative : Number => Person => Str;
pres_admirative : Number => Person => Str;
imperf_admirative : Number => Person => Str} ;
}
+26 -26
View File
@@ -51,32 +51,32 @@ lin InflectionV = \x -> {
t="fl" ;
s1=heading1 "Folje" ;
s2=frameTable (
tr (intagAttr "th" "rowspan=\"24\"" "Indicative" ++ intagAttr "th" "rowspan=\"6\"" "Pres" ++ intagAttr "th" "rowspan=\"3\"" "Sg" ++ th "P1" ++ td (x.Indicative ! Pres ! Sg ! P1)) ++
tr (th "P2" ++ td (x.Indicative ! Pres ! Sg ! P2)) ++
tr (th "P3" ++ td (x.Indicative ! Pres ! Sg ! P3)) ++
tr (intagAttr "th" "rowspan=\"3\"" "Pl" ++ th "P1" ++ td (x.Indicative ! Pres ! Pl ! P1)) ++
tr (th "P2" ++ td (x.Indicative ! Pres ! Pl ! P2)) ++
tr (th "P3" ++ td (x.Indicative ! Pres ! Pl ! P3)) ++
tr (intagAttr "th" "rowspan=\"6\"" "Past" ++ intagAttr "th" "rowspan=\"3\"" "Sg" ++ th "P1" ++ td (x.Indicative ! Past ! Sg ! P1)) ++
tr (th "P2" ++ td (x.Indicative ! Past ! Sg ! P2)) ++
tr (th "P3" ++ td (x.Indicative ! Past ! Sg ! P3)) ++
tr (intagAttr "th" "rowspan=\"3\"" "Pl" ++ th "P1" ++ td (x.Indicative ! Past ! Pl ! P1)) ++
tr (th "P2" ++ td (x.Indicative ! Past ! Pl ! P2)) ++
tr (th "P3" ++ td (x.Indicative ! Past ! Pl ! P3)) ++
tr (intagAttr "th" "rowspan=\"6\"" "Aorist" ++ intagAttr "th" "rowspan=\"3\"" "Sg" ++ th "P1" ++ td (x.Indicative ! Aorist ! Sg ! P1)) ++
tr (th "P2" ++ td (x.Indicative ! Aorist ! Sg ! P2)) ++
tr (th "P3" ++ td (x.Indicative ! Aorist ! Sg ! P3)) ++
tr (intagAttr "th" "rowspan=\"3\"" "Pl" ++ th "P1" ++ td (x.Indicative ! Aorist ! Pl ! P1)) ++
tr (th "P2" ++ td (x.Indicative ! Aorist ! Pl ! P2)) ++
tr (th "P3" ++ td (x.Indicative ! Aorist ! Pl ! P3)) ++
tr (intagAttr "th" "rowspan=\"6\"" "Imperfect" ++ intagAttr "th" "rowspan=\"3\"" "Sg" ++ th "P1" ++ td (x.Indicative ! Imperfect ! Sg ! P1)) ++
tr (th "P2" ++ td (x.Indicative ! Imperfect ! Sg ! P2)) ++
tr (th "P3" ++ td (x.Indicative ! Imperfect ! Sg ! P3)) ++
tr (intagAttr "th" "rowspan=\"3\"" "Pl" ++ th "P1" ++ td (x.Indicative ! Imperfect ! Pl ! P1)) ++
tr (th "P2" ++ td (x.Indicative ! Imperfect ! Pl ! P2)) ++
tr (th "P3" ++ td (x.Indicative ! Imperfect ! Pl ! P3)) ++
tr (intagAttr "th" "rowspan=\"2\"" "Imperative" ++ th "Sg" ++ td (x.Imperative ! Sg)) ++
tr (th "Pl" ++ td (x.Imperative ! Pl)) ++
tr (intagAttr "th" "rowspan=\"24\"" "Indicative" ++ intagAttr "th" "rowspan=\"6\"" "Pres" ++ intagAttr "th" "rowspan=\"3\"" "Sg" ++ th "P1" ++ td (x.indicative ! Pres ! Sg ! P1)) ++
tr (th "P2" ++ td (x.indicative ! Pres ! Sg ! P2)) ++
tr (th "P3" ++ td (x.indicative ! Pres ! Sg ! P3)) ++
tr (intagAttr "th" "rowspan=\"3\"" "Pl" ++ th "P1" ++ td (x.indicative ! Pres ! Pl ! P1)) ++
tr (th "P2" ++ td (x.indicative ! Pres ! Pl ! P2)) ++
tr (th "P3" ++ td (x.indicative ! Pres ! Pl ! P3)) ++
tr (intagAttr "th" "rowspan=\"6\"" "Past" ++ intagAttr "th" "rowspan=\"3\"" "Sg" ++ th "P1" ++ td (x.indicative ! Past ! Sg ! P1)) ++
tr (th "P2" ++ td (x.indicative ! Past ! Sg ! P2)) ++
tr (th "P3" ++ td (x.indicative ! Past ! Sg ! P3)) ++
tr (intagAttr "th" "rowspan=\"3\"" "Pl" ++ th "P1" ++ td (x.indicative ! Past ! Pl ! P1)) ++
tr (th "P2" ++ td (x.indicative ! Past ! Pl ! P2)) ++
tr (th "P3" ++ td (x.indicative ! Past ! Pl ! P3)) ++
tr (intagAttr "th" "rowspan=\"6\"" "Aorist" ++ intagAttr "th" "rowspan=\"3\"" "Sg" ++ th "P1" ++ td (x.indicative ! Aorist ! Sg ! P1)) ++
tr (th "P2" ++ td (x.indicative ! Aorist ! Sg ! P2)) ++
tr (th "P3" ++ td (x.indicative ! Aorist ! Sg ! P3)) ++
tr (intagAttr "th" "rowspan=\"3\"" "Pl" ++ th "P1" ++ td (x.indicative ! Aorist ! Pl ! P1)) ++
tr (th "P2" ++ td (x.indicative ! Aorist ! Pl ! P2)) ++
tr (th "P3" ++ td (x.indicative ! Aorist ! Pl ! P3)) ++
tr (intagAttr "th" "rowspan=\"6\"" "Imperfect" ++ intagAttr "th" "rowspan=\"3\"" "Sg" ++ th "P1" ++ td (x.indicative ! Imperfect ! Sg ! P1)) ++
tr (th "P2" ++ td (x.indicative ! Imperfect ! Sg ! P2)) ++
tr (th "P3" ++ td (x.indicative ! Imperfect ! Sg ! P3)) ++
tr (intagAttr "th" "rowspan=\"3\"" "Pl" ++ th "P1" ++ td (x.indicative ! Imperfect ! Pl ! P1)) ++
tr (th "P2" ++ td (x.indicative ! Imperfect ! Pl ! P2)) ++
tr (th "P3" ++ td (x.indicative ! Imperfect ! Pl ! P3)) ++
tr (intagAttr "th" "rowspan=\"2\"" "Imperative" ++ th "Sg" ++ td (x.imperative ! Sg)) ++
tr (th "Pl" ++ td (x.imperative ! Pl)) ++
tr (th "participle" ++ td (x.participle)) ++
tr (intagAttr "th" "rowspan=\"6\"" "pres_optative" ++ intagAttr "th" "rowspan=\"3\"" "Sg" ++ th "P1" ++ td (x.pres_optative ! Sg ! P1)) ++
tr (th "P2" ++ td (x.pres_optative ! Sg ! P2)) ++
+270 -270
View File
File diff suppressed because it is too large Load Diff
+5 -6
View File
@@ -4,16 +4,16 @@ concrete NounSqi of Noun = CatSqi ** open MorphoSqi, ResSqi in {
lin
DetCN det cn = {
s = \\c => det.s ! c ! cn.g ++ cn.s ! det.spec ! c ! det.n ;
s = \\c => det.s ! c ! cn.g ++ cn.s ! det.sp ! c ! det.n ;
a = agrgP3 cn.g det.n
} ;
UsePron p = p ;
-- UsePron p = p ;
DetQuant quant num = {
s = \\c,g => quant.s ! c ! g ! num.n ++ num.s ;
n = num.n ;
spec = quant.spec
sp = quant.sp
} ;
NumSg = {s = []; n = Sg} ;
@@ -21,16 +21,15 @@ concrete NounSqi of Noun = CatSqi ** open MorphoSqi, ResSqi in {
DefArt = {
s = \\c,g,n => [] ;
spec = Def
sp = Def
} ;
IndefArt = {
s = \\c,g => table Number ["një"; []] ;
spec = Indef
sp = Indef
} ;
UseN n = n ;
UseN2 n = n ;
AdjCN ap cn = {
s = \\spec,c,n => cn.s ! spec ! c ! n ++ ap.s ! spec ! c ! cn.g ! n ;
+2 -2
View File
@@ -1327,7 +1327,7 @@ oper mkQuant : (_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_ : Str) -> Quant =
}
}
} ;
spec = Indef
sp = Indef
} ;
oper mkDet : (_,_,_,_,_,_,_,_ : Str) -> Number -> Det =
@@ -1350,7 +1350,7 @@ oper mkDet : (_,_,_,_,_,_,_,_ : Str) -> Number -> Det =
Fem => f8
}
} ;
spec = Indef ;
sp = Indef ;
n = n
} ;
+3 -3
View File
@@ -104,10 +104,10 @@ oper mkAdj : (_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_ : Str) -> Bool -> Adj =
param Tense = Pres | Past | Imperfect | Aorist ;
oper Verb = {Indicative: Tense => Number => Person => Str; Imperative: Number => Str; participle: Str; pres_optative: Number => Person => Str; perf_optative: Number => Person => Str; pres_admirative: Number => Person => Str; imperf_admirative: Number => Person => Str} ; -- 758
oper Verb = {indicative: Tense => Number => Person => Str; imperative: Number => Str; participle: Str; pres_optative: Number => Person => Str; perf_optative: Number => Person => Str; pres_admirative: Number => Person => Str; imperf_admirative: Number => Person => Str} ; -- 758
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,f44,f45,f46,f47,f48,f49,f50,f51 ->
{ Indicative = table {
{ indicative = table {
Pres => table {
Sg => table {
P1 => f1 ;
@@ -157,7 +157,7 @@ oper mkVerb : (_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_
}
}
} ;
Imperative = table {
imperative = table {
Sg => f25 ;
Pl => f26
} ;
+1 -420
View File
@@ -128,10 +128,8 @@ C1eC2aC3 = {C1 ="" ; C1C2="'"; C2C3 ="!"; C3="#"};
peC1aC2C3 = { C1 = "ä" ; C1C2="'"; C2C3 ="'"; C3=""};
penC1aC2C3e = { C1 = "än" ; C1C2="'"; C2C3 ="'"; C3=""};
pteC1aC2C3 = { C1 = "t" ; C1C2="'"; C2C3 ="'"; C3=""};
pteC1aC2C3 = { C1 = "t" ; C1C2="'"; C2C3 ="'"; C3=""};-- 3
pteC1aC2C3u = { C1 = "t" ; C1C2="'"; C2C3 ="'"; C3="&"};
pyeC1aC2C3 = { C1 = "y" ; C1C2="'"; C2C3 ="'"; C3=""};
pteC1aC2C3 = { C1 = "t" ; C1C2="'"; C2C3 ="'"; C3=""};
pyeC1aC2C3u = { C1 = "y" ; C1C2="'"; C2C3 ="'"; C3="&"};
--Passive Jus_Imperat mkV3gdl
@@ -343,7 +341,6 @@ leC1AC2aC3 = {C1 ="l" ; C1C2="!"; C2C3 ="'"; C3=""};
enC1AC2aC3 = { C1 = "(n" ; C1C2="!"; C2C3 ="'"; C3=""};
C1AC2aC3 = { C1 = "" ; C1C2="!"; C2C3 ="'"; C3=""};
C1AC2aC3i = { C1 = "" ; C1C2="!"; C2C3 ="'"; C3="#"};
C1AC2aC3u = { C1 = "" ; C1C2="!"; C2C3 ="'"; C3="&"};
yC1AC2aC3 = { C1 = "y" ; C1C2="!"; C2C3 ="'"; C3=""};
tC1AC2aC3 = { C1 = "t" ; C1C2="!"; C2C3 ="'"; C3=""};
yC1AC2aC3u = { C1 = "y" ; C1C2="!"; C2C3 ="'"; C3="&"};
@@ -661,7 +658,7 @@ C1AC2n = { C1 = "" ; C1C2="!"; C2 ="n"};
C1AC2k = { C1 = "" ; C1C2="!"; C2 ="k"};
C1AC2sh = { C1 = "" ; C1C2="!"; C2 ="x"};
C1AC2achehu = { C1 = "" ; C1C2 ="!"; C2 ="!ch&"};
C1AC2a = { C1 = "" ; C1C2="!"; C2 ="'"};
C1AC2a = { C1 = "" ; C1C2="!"; C2 ="'"};
C1AC2ach = { C1 = "" ; C1C2="!"; C2 ="'c"};
C1AC2u = { C1 = "" ; C1C2="!"; C2 ="&"};
-- Imper -- mkV2yz
@@ -701,7 +698,6 @@ C1C2ek = { C1 = "" ; C1C2=""; C2 ="'k"};
C1C2esh = { C1 = "" ; C1C2=""; C2 ="'x"};
C1C2achehu = { C1 = "" ; C1C2=""; C2 ="!ch&"};
C1C2o = { C1 = "" ; C1C2=""; C2 ="/"};
C1C2a = { C1 = "" ; C1C2=""; C2="!"};
C1C2ew = { C1 = "" ; C1C2=""; C2="'w"};
--CompPer mkV2yz y!l'h& !l !l !l cX7l 7l l'c !l
@@ -721,81 +717,12 @@ meC1aC2= {C1 ="m'" ; C1C2="!"; C2 =""};
--Infinitve mkV2yz
C1aC2ii= {C1 ="" ; C1C2="!"; C2 ="#"};
--mkV2yz -- yz -- catch
--Perf --
C1AC2hu = {C1 ="" ; C1C2="!"; C2 ="h&"};
C1AC2n = { C1 = "" ; C1C2="!"; C2 ="n"};
C1AC2k = { C1 = "" ; C1C2="!"; C2 ="k"};
C1AC2sh = { C1 = "" ; C1C2="!"; C2 ="x"};
C1AC2achehu = { C1 = "" ; C1C2 ="!"; C2 ="!ch&"};
C1AC2a = { C1 = "" ; C1C2="!"; C2 ="'"};
C1AC2ach = { C1 = "" ; C1C2="!"; C2 ="'c"};
C1AC2u = { C1 = "" ; C1C2="!"; C2 ="&"};
-- Imper -- mkV2yz
eC1C2alehu = { C1 = "ä" ; C1C2=""; C2 ="!l'h&"};
enC1C2alen = { C1 = "än" ; C1C2=""; C2 ="!l'n"};
teC1C2yaleh = { C1 = "t" ; C1C2=""; C2 ="!l'h"};
teC1C2aleh = { C1 = "t" ; C1C2=""; C2 ="y!l'x"};
teC1C2alachehu = { C1 = "t" ; C1C2=""; C2 ="!l!ch&"};
yeC1C2al = { C1 = "y" ; C1C2=""; C2 ="!l"};
teC1C2alech = { C1 = "t" ; C1C2=""; C2 ="!l'c"};
yeC1C2alu = { C1 = "y" ; C1C2=""; C2 ="!l&"};
-- Cont -- mkV2yz
eC1C2 = { C1 = "ä" ; C1C2=""; C2 =""};
enC1C2 = { C1 = "än" ; C1C2=""; C2 =""};
teC1C2 = { C1 = "t" ; C1C2=""; C2 =""};
--teC1C2 = { C1 = "t" ; C1C2=""; C2 =""};3
teC1C2u = { C1 = "t" ; C1C2=""; C2 ="&"};
yeC1C2 = { C1 = "y" ; C1C2=""; C2 =""};
--teC1C2 = { C1 = "t" ; C1C2=""; C2 =""};
yeC1C2u = { C1 = "y" ; C1C2=""; C2 ="&"};
--Jus_Imperat mkV2yz
leC1aC2a = {C1 ="l" ; C1C2="!"; C2 =""};
enC1aC2a = { C1 = "än" ; C1C2="!"; C2 =""};
C1aC2 = { C1 = "" ; C1C2="!"; C2 =""};
C1aC2i = { C1 = "" ; C1C2="!"; C2 ="#"};
C1eC2u = { C1 = "" ; C1C2="!"; C2 ="&"};
yC1aC2a = { C1 = "y" ; C1C2="!"; C2 =""};
tC1aC2a = { C1 = "t" ; C1C2="!"; C2 =""};
yC1aC2u = { C1 = "y" ; C1C2="!"; C2 ="&"};
--Gerund mkV2yz
C1C2ie = {C1 ="" ; C1C2=""; C2 ="%"};
C1C2en = { C1 = "" ; C1C2=""; C2 ="'n"};
C1C2ek = { C1 = "" ; C1C2=""; C2 ="'k"};
C1C2esh = { C1 = "" ; C1C2=""; C2 ="'x"};
C1C2achehu = { C1 = "" ; C1C2=""; C2 ="!ch&"};
C1C2o = { C1 = "" ; C1C2=""; C2 ="/"};
C1C2a = { C1 = "" ; C1C2=""; C2="!"};
C1C2ew = { C1 = "" ; C1C2=""; C2="'w"};
--CompPer mkV2yz y!l'h& !l !l !l cX7l 7l l'c !l
C1C2iealehu = {C1 ="" ; C1C2=""; C2 ="%y!l'h&"};
C1C2enal = { C1 = "" ; C1C2=""; C2 ="'n!l"};
C1C2ekal = { C1 = "" ; C1C2=""; C2 ="'k!l"};
C1C2eshal = { C1 = "" ; C1C2=""; C2 ="'x!l"};
C1C2achehual = { C1 = "" ; C1C2=""; C2 ="!cX7l"};
C1C2oal = { C1 = "" ; C1C2=""; C2 ="7l"};
C1C2alech = { C1 = "" ; C1C2=""; C2="!l'c"};
C1C2ewal = { C1 = "" ; C1C2=""; C2="'w!l"};
--Infinitve mkV2yz
meC1aC2= {C1 ="m'" ; C1C2="!"; C2 =""};
--Infinitve mkV2yz
C1aC2ii= {C1 ="" ; C1C2="!"; C2 ="#"};
--nore -- nr -- live
--Perf --
C1oC2hu = {C1 ="" ; C1C2="/"; C2 ="h&"};
C1oC2n = { C1 = "" ; C1C2="/"; C2 ="n"};
C1oC2k = { C1 = "" ; C1C2="/"; C2 ="k"};
C1oC2sh = { C1 = "" ; C1C2="/"; C2 ="x"};
C1oC2achehu = { C1 = "" ; C1C2 ="/"; C2 ="!ch&"};
C1oC2a = { C1 = "" ; C1C2="/"; C2 ="'"};
C1oC2ach = { C1 = "" ; C1C2="/"; C2 ="'c"};
C1oC2u = { C1 = "" ; C1C2="/"; C2 ="&"};
@@ -858,87 +785,12 @@ meC1oC2= {C1 ="m'" ; C1C2="/"; C2 =""};
C1uaC2i= {C1 ="" ; C1C2="7"; C2 ="#"};
--nore -- nr -- live
--Perf --
C1oC2hu = {C1 ="" ; C1C2="/"; C2 ="h&"};
C1oC2n = { C1 = "" ; C1C2="/"; C2 ="n"};
C1oC2k = { C1 = "" ; C1C2="/"; C2 ="k"};
C1oC2sh = { C1 = "" ; C1C2="/"; C2 ="x"};
C1oC2achehu = { C1 = "" ; C1C2 ="/"; C2 ="!ch&"};
C1oC2a = { C1 = "" ; C1C2="/"; C2 ="'"};
C1oC2ach = { C1 = "" ; C1C2="/"; C2 ="'c"};
C1oC2u = { C1 = "" ; C1C2="/"; C2 ="&"};
-- Imper -- mkV2nr
eC1oC2alehu = { C1 = "ä" ; C1C2="/"; C2 ="!l'h&"};
enC1oC2alen = { C1 = "än" ; C1C2="/"; C2 ="!l'n"};
teC1oC2yaleh = { C1 = "t" ; C1C2="/"; C2 ="!l'h"};
teC1oC2alesh = { C1 = "t" ; C1C2="/"; C2 ="y!l'x"};
teC1oC2alachehu = { C1 = "t" ; C1C2="/"; C2 ="!l!ch&"};
yeC1oC2al = { C1 = "y" ; C1C2="/"; C2 ="!l"};
teC1oC2alech = { C1 = "t" ; C1C2="/"; C2 ="!l'c"};
yeC1oC2alu = { C1 = "y" ; C1C2="/"; C2 ="!l&"};
-- Imper -- mkV2nr
eC1oC2 = { C1 = "ä" ; C1C2="/"; C2 =""};
enC1oC2 = { C1 = "än" ; C1C2="/"; C2 =""};
teC1oC2 = { C1 = "t" ; C1C2="/"; C2 =""};
teC1oC2i = { C1 = "t" ; C1C2="/"; C2 ="#"};
teC1oC2u = { C1 = "t" ; C1C2="/"; C2 ="&"};
yeC1oC2 = { C1 = "y" ; C1C2="/"; C2 =""};
--teC1oC2 = { C1 = "t" ; C1C2="/"; C2 ="!l'c"};
yeC1oC2u = { C1 = "y" ; C1C2="/"; C2 ="&"};
--Jus_Imperat mkV2nr
leC1uC2 = {C1 ="l" ; C1C2="&"; C2 =""};
enC1uC2 = { C1 = "än" ; C1C2="&"; C2 =""};
C1uC2 = { C1 = "" ; C1C2="&"; C2 =""};
C1uC2i = { C1 = "" ; C1C2="&"; C2 ="#"};
C1uC2u = { C1 = "" ; C1C2="&"; C2 ="&"};
yC1uC2 = { C1 = "y" ; C1C2="&"; C2 =""};
tC1uC2 = { C1 = "t" ; C1C2="&"; C2 =""};
yC1uC2u = { C1 = "y" ; C1C2="&"; C2 ="&"};
--Gerund mkV2nr
C1oC2ie = {C1 ="" ; C1C2="/"; C2 ="%"};
C1oC2en = { C1 = "" ; C1C2="/"; C2 ="'n"};
C1oC2ek = { C1 = "" ; C1C2="/"; C2 ="'k"};
C1oC2esh = { C1 = "" ; C1C2="/"; C2 ="'x"};
C1oC2achehu = { C1 = "" ; C1C2="/"; C2 ="!ch&"};
C1oC2o = { C1 = "" ; C1C2="/"; C2 ="/"};
C1oC2A = { C1 = "" ; C1C2="/"; C2="!"};
C1oC2ew = { C1 = "" ; C1C2="/"; C2="'w"};
--CompPer mkV2nr y!l'h& !l !l !l cX7l 7l l'c !l
C1oC2iealehu = {C1 ="" ; C1C2="/"; C2 ="%y!l'h& "};
C1oC2enal = { C1 = "" ; C1C2="/"; C2 ="'n!l"};
C1oC2ekal = { C1 = "" ; C1C2="/"; C2 ="'k!l"};
C1oC2eshal = { C1 = "" ; C1C2="/"; C2 ="'x!l"};
C1oC2achehual = { C1 = "" ; C1C2="/"; C2 ="!cX7l"};
C1oC2oal = { C1 = "" ; C1C2="/"; C2 ="7l"};
C1oC2Alech = { C1 = "" ; C1C2="/"; C2="!l'c"};
C1oC2ewal = { C1 = "" ; C1C2="/"; C2="'w!l"};
--Infinitve mkV2nr
meC1oC2= {C1 ="m'" ; C1C2="/"; C2 =""};
--Participle mkV2nr
C1uaC2i= {C1 ="" ; C1C2="7"; C2 ="#"};
--mkV2wN -- wN -- swim --- Eg lie, see, say
--Perf --
C1AC2ehu = {C1 ="" ; C1C2="!"; C2 ="'h&"};
C1AC2en = { C1 = "" ; C1C2="!"; C2 ="'n"};
C1AC2ek = { C1 = "" ; C1C2="!"; C2 ="'k"};
C1AC2esh = { C1 = "" ; C1C2="!"; C2 ="'x"};
--C1AC2achehu = { C1 = "" ; C1C2 ="!"; C2 ="!ch&"};
--C1AC2a = { C1 = "" ; C1C2="!"; C2 ="'"};
--C1AC2ach = { C1 = "" ; C1C2="!"; C2 ="'c"};
--C1AC2u = { C1 = "" ; C1C2="!"; C2 ="&"};
-- Imper -- mkV2wN
eC1aC2alehu = { C1 = "ä" ; C1C2="!"; C2 ="!l'h&"};
enC1aC2alen = { C1 = "än" ; C1C2="!"; C2 ="!l'n"};
@@ -992,74 +844,6 @@ C1aC2tewal = { C1 = "" ; C1C2="!"; C2="t'w!l"};
meC1aC2et= {C1 ="m'" ; C1C2="!"; C2 ="'t"};
--nore -- nr -- live
--mkV2wN -- wN -- swim --- Eg lie, see, say
--Perf --
C1AC2ehu = {C1 ="" ; C1C2="!"; C2 ="'h&"};
C1AC2en = { C1 = "" ; C1C2="!"; C2 ="'n"};
C1AC2ek = { C1 = "" ; C1C2="!"; C2 ="'k"};
C1AC2esh = { C1 = "" ; C1C2="!"; C2 ="'x"};
--C1AC2achehu = { C1 = "" ; C1C2 ="!"; C2 ="!ch&"};
--C1AC2a = { C1 = "" ; C1C2="!"; C2 ="'"};
--C1AC2ach = { C1 = "" ; C1C2="!"; C2 ="'c"};
--C1AC2u = { C1 = "" ; C1C2="!"; C2 ="&"};
-- Imper -- mkV2wN
eC1aC2alehu = { C1 = "ä" ; C1C2="!"; C2 ="!l'h&"};
enC1aC2alen = { C1 = "än" ; C1C2="!"; C2 ="!l'n"};
teC1aC2yaleh = { C1 = "t" ; C1C2="!"; C2 ="!l'h"};
teC1aC2alesh = { C1 = "t" ; C1C2="!"; C2 ="y!l'x"};
teC1aC2alachehu = { C1 = "t" ; C1C2="!"; C2 ="!l!ch&"};
yeC1aC2al = { C1 = "y" ; C1C2="!"; C2 ="!l"};
teC1aC2alech = { C1 = "t" ; C1C2="!"; C2 ="!l'c"};
yeC1aC2alu = { C1 = "y" ; C1C2="!"; C2 ="!l&"};
-- Cont -- mkV2wN
eC1aC2 = { C1 = "ä" ; C1C2="!"; C2 =""};
enC1aC2 = { C1 = "än" ; C1C2="!"; C2 =""};
teC1aC2 = { C1 = "t" ; C1C2="!"; C2 =""};
--teC1aC2 = { C1 = "t" ; C1C2="!"; C2 =""};
teC1aC2u = { C1 = "t" ; C1C2="!"; C2 ="&"};
yeC1aC2 = { C1 = "y" ; C1C2="!"; C2 =""};
--teC1aC2 = { C1 = "t" ; C1C2="!"; C2 =""};
yeC1aC2u = { C1 = "y" ; C1C2="!"; C2 ="&"};
--Jus_Imperat mkV2wN
--leC1aC2a = {C1 ="l" ; C1C2="!"; C2 =""};
--enC1aC2a = { C1 = "än" ; C1C2="!"; C2 =""};
--C1aC2 = { C1 = "" ; C1C2="!"; C2 =""};
--C1aC2i = { C1 = "" ; C1C2="!"; C2 ="#"};
--C1eC2u = { C1 = "" ; C1C2="!"; C2 ="&"};
--yC1aC2a = { C1 = "y" ; C1C2="!"; C2 =""};
--tC1aC2a = { C1 = "t" ; C1C2="!"; C2 =""};
--yC1aC2u = { C1 = "y" ; C1C2="!"; C2 ="&"};
--Gerund mkV2wN
C1aC2cie = {C1 ="" ; C1C2="!"; C2 ="c%"};
C1aC2ten = { C1 = "" ; C1C2="!"; C2 ="t'n"};
C1aC2tek = { C1 = "" ; C1C2="!"; C2 ="t'k"};
C1aC2tesh = { C1 = "" ; C1C2="!"; C2 ="t'x"};
C1aC2tachehu = { C1 = "" ; C1C2="!"; C2 ="t!ch&"};
C1aC2to = { C1 = "" ; C1C2="!"; C2 ="t/"};
C1aC2ta = { C1 = "" ; C1C2="!"; C2="t!"};
C1aC2tew = { C1 = "" ; C1C2="!"; C2="t'w"};
--ComPer mkV2wN y!l'h& !l !l !l cX7l 7l l'c !l
C1aC2ciealehu = {C1 ="" ; C1C2="!"; C2 ="c%y!l'h&"};
C1aC2tenal = { C1 = "" ; C1C2="!"; C2 ="t'n!l"};
C1aC2tekal = { C1 = "" ; C1C2="!"; C2 ="t'k!l"};
C1aC2teshal = { C1 = "" ; C1C2="!"; C2 ="t'x!l"};
C1aC2tachehual = { C1 = "" ; C1C2="!"; C2 ="t!cX7l"};
C1aC2toal = { C1 = "" ; C1C2="!"; C2 ="t7l"};
C1aC2talech = { C1 = "" ; C1C2="!"; C2="t!l'c"};
C1aC2tewal = { C1 = "" ; C1C2="!"; C2="t'w!l"};
--Infinitve mkV2wN
meC1aC2et= {C1 ="m'" ; C1C2="!"; C2 ="'t"};
--nore -- nr -- live
----------- This much is enough for the duo-radicals---
--There are few verbs still remaining like the case of shete, hede , --washe, aye, ale , all need unique froms for them selves. I will get --back here later!!
@@ -1109,63 +893,8 @@ tC1eC2 = { C1 = "t" ; C1C2=""; C2 =""};
meC1C2et= {C1 ="m'" ; C1C2=""; C2 ="'t"};
----------- This much is enough for the duo-radicals---
--There are few verbs still remaining like the case of shete, hede , --washe, aye, ale , all need unique froms for them selves. I will get --back here later!!
--seTe -- st -- give
--Perf --
C1eC2hu = {C1 ="" ; C1C2="'"; C2 ="'h&"};
C1eC2n = { C1 = "" ; C1C2="'"; C2 ="'n"};
C1eC2k = { C1 = "" ; C1C2="'"; C2 ="'k"};
C1eC2sh = { C1 = "" ; C1C2="'"; C2 ="'x"};
C1eC2achehu = { C1 = "" ; C1C2 ="'"; C2 ="'ch&"};
C1eC2a = { C1 = "" ; C1C2="'"; C2 ="'"};
C1eC2ach = { C1 = "" ; C1C2="'"; C2 ="'c"};
--C1eC2u = { C1 = "" ; C1C2="'"; C2 ="&"}; same as C1aC2u (bela)
-- Imper -- mkV2sT
--eC1eC2alehu = { C1 = "ä" ; C1C2="'"; C2 ="!l'h&"}; eC1aC2alehu
--enC1eC2alen = { C1 = "än" ; C1C2="'"; C2 ="!l'n"};enC1aC2alen
--teC1eC2yaleh = { C1 = "t" ; C1C2="'"; C2 ="!l'h"};teC1aC2yaleh
--teC1eC2aleh = { C1 = "t" ; C1C2="'"; C2 ="y!l'x"};teC1aC2aleh
--teC1eC2alachehu = { C1 = "t" ; C1C2="'"; C2 ="!l!ch&"};teC1aC2alachehu
--yeC1eC2al = { C1 = "y" ; C1C2="'"; C2 ="!l"};yeC1aC2al
--teC1eC2alech = { C1 = "t" ; C1C2="'"; C2 ="!l'c"};teC1aC2alech
--yeC1eC2alu = { C1 = "y" ; C1C2="'"; C2 ="!l&"};yeC1aC2alu
--Jus_Imperat mkV2sT
leC1eC2 = {C1 ="l" ; C1C2=""; C2 =""};
enC1eC2 = { C1 = "än" ; C1C2=""; C2 =""};
C1C2 = { C1 = "" ; C1C2=""; C2 =""};
C1eC2i = { C1 = "" ; C1C2=""; C2 ="#"};
--C1eC2u = { C1 = "" ; C1C2=""; C2 ="&"}; C1C2u
yC1eC2 = { C1 = "y" ; C1C2=""; C2 =""};
tC1eC2 = { C1 = "t" ; C1C2=""; C2 =""};
--yC1eC2u = { C1 = "y" ; C1C2=""; C2 ="&"};yC1C2u
--Gerund mkV2sT
--C1eC2ie = {C1 ="" ; C1C2="'"; C2 ="c%"}; C1aC2cie
--C1eC2en = { C1 = "" ; C1C2="'"; C2 ="'n"};C1aC2ten
--C1eC2ek = { C1 = "" ; C1C2="'"; C2 ="'k"}; C1aC2tek
--C1eC2esh = { C1 = "" ; C1C2="'"; C2 ="'x"}; C1aC2tesh
--C1eC2achehu = { C1 = "" ; C1C2="'"; C2 ="!ch&"};C1aC2tachehu
--C1eC2o = { C1 = "" ; C1C2="'"; C2 ="/"};C1aC2to
--C1eC2A = { C1 = "" ; C1C2="'"; C2="!"};C1aC2ta
--C1eC2ew = { C1 = "" ; C1C2="'"; C2="'w"}; C1aC2tew
--Infinitve mkV2sT
meC1C2et= {C1 ="m'" ; C1C2=""; C2 ="'t"};
---- Quadro_Radical
--Starting with type Tri-Radical Roots
-- Eg. dbdb - fight
-- qzqz - freeze
@@ -1238,152 +967,4 @@ meC1aC2C3aC4 = {C1 ="m'" ; C1C2="'"; C2C3 =""; C3C4="'"; C4= "" };
--Participle mkV4dbdb
C1eC2C3aC4i = {C1 ="" ; C1C2="'"; C2C3 =""; C3C4="!"; C4= "#" };
---- Quadro_Radical
--Starting with type Tri-Radical Roots
-- Eg. dbdb - fight
-- qzqz - freeze
-- wrwr - throw
-- tnfs - breath
--Perf --
C1aC2aC3aC4hu = {C1 ="" ; C1C2="'"; C2C3 ="'"; C3C4="'"; C4= "h&" };
C1aC2aC3aC4n = { C1 = "" ; C1C2="'"; C2C3 ="'"; C3C4="'"; C4= "n" };
C1aC2aC3aC4k = { C1 = "" ; C1C2="'"; C2C3 ="'"; C3C4="'"; C4= "k" };
C1aC2aC3aC4sh = { C1 = "" ; C1C2="'"; C2C3 ="'"; C3C4="'"; C4= "x" };
C1aC2aC3aC4achehu = { C1 = "" ; C1C2="'"; C2C3 ="'"; C3C4="'"; C4= "!ch&" };
C1aC2aC3aC4a = { C1 = "" ; C1C2="'"; C2C3 ="'"; C3C4="'"; C4= "'" };
C1aC2aC3aC4ech = { C1 = "" ; C1C2="'"; C2C3 ="'"; C3C4="'"; C4= "'c" };
C1aC2aC3aC4u = { C1 = "" ; C1C2="'"; C2C3 ="'"; C3C4="'"; C4= "&" };
--Imper --mkV4dbdb
eC1aC2aC3C4alehu = { C1 = "ä" ; C1C2="'"; C2C3 ="'"; C3C4=""; C4= "!l'h&" };
enC1aC2aC3C4alen = { C1 = "än" ; C1C2="'"; C2C3 ="'"; C3C4=""; C4= "!l'n" };
teC1aC2aC3C4yaleh = { C1 = "t" ; C1C2="'"; C2C3 ="'"; C3C4=""; C4= "!l'h" };
teC1aC2aC3C4aleh = { C1 = "t" ; C1C2="'"; C2C3 ="'"; C3C4=""; C4= "y!l'x" };
teC1aC2aC3C4alachehu = { C1 = "t" ; C1C2="'"; C2C3 ="'"; C3C4=""; C4= "!l!ch&" };
yeC1aC2aC3C4al = { C1 = "y" ; C1C2="'"; C2C3 ="'"; C3C4=""; C4= "!l" };
teC1aC2aC3C4alech = { C1 = "t" ; C1C2="'"; C2C3 ="'"; C3C4=""; C4= "!l'c" };
yeC1aC2aC3C4alu = { C1 = "y" ; C1C2="'"; C2C3 ="'"; C3C4=""; C4= "!l&" };
--Cont --mkV4dbdb
eC1aC2aC3C4 = { C1 = "ä" ; C1C2="'"; C2C3 ="'"; C3C4=""; C4= "" };
enC1aC2aC3C4 = { C1 = "än" ; C1C2="'"; C2C3 ="'"; C3C4=""; C4= "" };
teC1aC2aC3C4 = { C1 = "t" ; C1C2="'"; C2C3 ="'"; C3C4=""; C4= "" };
teC1aC2aC3C4i = { C1 = "t" ; C1C2="'"; C2C3 ="'"; C3C4=""; C4= "#" };
teC1aC2aC3C4u = { C1 = "t" ; C1C2="'"; C2C3 ="'"; C3C4=""; C4= "&" };
yeC1aC2aC3C4 = { C1 = "y" ; C1C2="'"; C2C3 ="'"; C3C4=""; C4= "" };
--teC1aC2aC3C4 = { C1 = "t" ; C1C2="'"; C2C3 ="'"; C3C4=""; C4= "" };
yeC1aC2aC3C4u = { C1 = "y" ; C1C2="'"; C2C3 ="'"; C3C4=""; C4= "&" };
--Jus_Imperat mkV4dbdb
leC1aC2C3C4 = {C1 ="l" ; C1C2="'"; C2C3 =""; C3C4=""; C4= "" };
enC1aC2C3C4 = { C1 = "än" ; C1C2="'"; C2C3 =""; C3C4=""; C4= "" };
C1aC2C3C4 = { C1 = "" ; C1C2="'"; C2C3 =""; C3C4=""; C4= "" };
C1aC2C3C4i = { C1 = "" ; C1C2="'"; C2C3 =""; C3C4=""; C4= "#" };
C1aC2C3C4u = { C1 = "" ; C1C2="'"; C2C3 =""; C3C4=""; C4= "&" };
yC1aC2C3C4 = { C1 = "y" ; C1C2="'"; C2C3 =""; C3C4=""; C4= "" };
tC1aC2C3C4 = { C1 = "t" ; C1C2="'"; C2C3 =""; C3C4=""; C4= "" };
yC1aC2C3C4u = { C1 = "y" ; C1C2="'"; C2C3 =""; C3C4=""; C4= "&" };
--Gerund mkV4dbdb
C1aC2C3C4ie = {C1 ="" ; C1C2="'"; C2C3 =""; C3C4=""; C4= "%" };
C1aC2C3C4en = { C1 = "" ; C1C2="'"; C2C3 =""; C3C4=""; C4= "'n" };
C1aC2C3C4ek = { C1 = "" ; C1C2="'"; C2C3 =""; C3C4=""; C4= "'k" };
C1aC2C3C4esh = { C1 = "" ; C1C2="'"; C2C3 =""; C3C4=""; C4= "'x" };
C1aC2C3C4achehu = { C1 = "" ; C1C2="'"; C2C3 =""; C3C4=""; C4= "!ch&" };
C1aC2C3C4o = { C1 = "" ; C1C2="'"; C2C3 =""; C3C4=""; C4= "/" };
C1aC2C3C4a = { C1 = "" ; C1C2="'"; C2C3 =""; C3C4=""; C4= "!" };
C1aC2C3C4ew = { C1 = "" ; C1C2="'"; C2C3 =""; C3C4=""; C4= "'w" };
--CompPerf mkV4dbdb y!l'h& !l !l !l cX7l 7l l'c !l
C1aC2C3C4iealehu = {C1 ="" ; C1C2="'"; C2C3 =""; C3C4=""; C4= "%y!l'h&" };
C1aC2C3C4enal = { C1 = "" ; C1C2="'"; C2C3 =""; C3C4=""; C4= "'n!l" };
C1aC2C3C4ekal = { C1 = "" ; C1C2="'"; C2C3 =""; C3C4=""; C4= "'k!l" };
C1aC2C3C4eshal = { C1 = "" ; C1C2="'"; C2C3 =""; C3C4=""; C4= "'x!l" };
C1aC2C3C4achehual = { C1 = "" ; C1C2="'"; C2C3 =""; C3C4=""; C4= "!cX7l" };
C1aC2C3C4oal = { C1 = "" ; C1C2="'"; C2C3 =""; C3C4=""; C4= "7l" };
C1aC2C3C4alech = { C1 = "" ; C1C2="'"; C2C3 =""; C3C4=""; C4= "!l'c" };
C1aC2C3C4ewal = { C1 = "" ; C1C2="'"; C2C3 =""; C3C4=""; C4= "'w!l" };
--Infinitve mkV4dbdb
meC1aC2C3aC4 = {C1 ="m'" ; C1C2="'"; C2C3 =""; C3C4="'"; C4= "" };
--Participle mkV4dbdb
C1eC2C3aC4i = {C1 ="" ; C1C2="'"; C2C3 =""; C3C4="!"; C4= "#" };
}
{-
resource PatternsAmh = {
flags coding=utf8 ;
oper
--perf
C1aC2aC3ku = {C1 ="" ; C1C2="ኧ"; C2C3 ="ኧ"; C3="ኩ"};
C1aC2aC3n = { C1 = "" ; C1C2="ኧ"; C2C3 ="ኧ"; C3="ን"};
C1aC2aC3k = { C1 = "" ; C1C2="ኧ"; C2C3 ="ኧ"; C3="ክ"};
C1aC2aC3sh = { C1 = "" ; C1C2="ኧ"; C2C3 ="ኧ"; C3="ሽ"};
C1aC2aC3achehu = { C1 = "" ; C1C2="ኧ"; C2C3 ="ኧ"; C3="አችሁ"};
C1aC2aC3e = { C1 = "" ; C1C2="ኧ"; C2C3 ="ኧ"; C3="ኧ"};
C1aC2aC3ech = { C1 = "" ; C1C2="ኧ"; C2C3 ="ኧ"; C3="ኧች"};
C1aC2aC3u = { C1 = "" ; C1C2="ኧ"; C2C3 ="ኧ"; C3="ኡ"};
--imper
eC1aC2C3alehu = { C1 = "እ" ; C1C2="ኧ"; C2C3 =""; C3="አለሁ"};
enC1aC2C3alen = { C1 = "እን" ; C1C2="ኧ"; C2C3 =""; C3="አለን"};
teC1aC2C3yaleh = { C1 = "ት" ; C1C2="ኧ"; C2C3 =""; C3="አለህ"};
teC1aC2C3aleh = { C1 = "ት" ; C1C2="ኧ"; C2C3 =""; C3="ያለሽ"};
teC1aC2C3alachehu = { C1 = "ት" ; C1C2="ኧ"; C2C3 =""; C3="አላችሁ"};
yeC1aC2C3al = { C1 = "ይ" ; C1C2="ኧ"; C2C3 =""; C3="አል"};
teC1aC2C3alech = { C1 = "ት" ; C1C2="ኧ"; C2C3 =""; C3="አለች"};
yeC1aC2C3alu = { C1 = "ይ" ; C1C2="ኧ"; C2C3 =""; C3="አሉ"};
}
-}
-3
View File
@@ -22,12 +22,9 @@ concrete PhraseAmh of Phrase = CatAmh ** open
UttIP ip = ip ; --- Acc also
UttVP vp = {s = vp.obj.s ++ vp.inf} ;
UttIAdv iadv = iadv ;
UttCN n = {s = n.s ! Sg ! Indef!Nom} ;
UttCard n = {s = n.s ! Masc!Sg!Indef!Nom} ;
UttImpSg pol imp = {s = pol.s ++ imp.s!pol.p!Masc!Sg};
UttImpPl pol imp = {s = pol.s ++ imp.s ! pol.p! Masc! Pl} ; --- TO DO
UttImpPol pol imp = {s = pol.s ++ imp.s ! pol.p ! Masc!Pl} ; -- TO DO ---
UttQS qs = {s = qs.s } ; -- TO DO
{-
PConjConj conj = {s = conj.s2} ; ---
+17 -2
View File
@@ -1,4 +1,19 @@
concrete AdjectiveHye of Adjective = CatHye ** {
concrete AdjectiveHye of Adjective = CatHye ** open ResHye, Prelude in {
lin
PositA a = a ;
AdAP ada ap = {
s = \\sp,c,num => ada.s ++ ap.s ! sp ! c ! num;
isPre = ap.isPre
} ;
PositA a = {
s = \\sp,c,num =>
case <sp,c> of {
<Def,Nom> => a.def_nom ! num ;
<Def,Dat> => a.def_dat ! num ;
<Poss P1,_> => a.poss1 ! c ! num ;
<Poss P2,_> => a.poss2 ! c ! num ;
_ => a.s ! c ! num
} ;
isPre = True
} ;
}
+6
View File
@@ -0,0 +1,6 @@
concrete AdverbHye of Adverb = CatHye ** open Prelude,ResHye in {
lin PrepNP p np = {s = case p.isPre of {
False => np.s ! p.c ++ p.s;
True => p.s ++ np.s ! p.c
}} ;
}
+62 -15
View File
@@ -1,16 +1,63 @@
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 ;
concrete CatHye of Cat = CommonX ** open Prelude,ResHye in {
lincat A = Adj ;
lincat A2 = Adj ** {c2 : Compl} ;
lincat ACard = {s : Str} ;
lincat AP = {s : Species => Case => Number => Str; isPre : Bool} ;
lincat CN = {s : Species => Case => Number => Str} ;
lincat Card = {s : Str} ;
lincat Cl = {s : Str;
conditional : Aspect => Number => Str;
converb : {imperfective : Str; futCon1 : Str;
futCon2 : Str; negative : Str;
perfective : Str; simultaneous : Str};
passive : Str; past : Person => Number => Str;
participle : PartType => Str;
subjunctive : Aspect => Number => Str} ;
lincat ClSlash = {s : Str} ;
lincat Comp = {s : Str} ;
lincat Conj = {s : Str} ;
lincat DAP = {s : Str} ;
lincat Decimal = {s : Str} ;
lincat Det = {s : Str; n : Number; sp : Species} ;
lincat Digits = {s : Str} ;
lincat GN = {s : Str} ;
lincat IComp = {s : Str} ;
lincat IDet = {s : Str} ;
lincat IP = {s : Str} ;
lincat IQuant = {s : Str} ;
lincat Imp = {s : Str} ;
lincat LN = {s : Str} ;
lincat N = Noun ;
lincat N2 = Noun ** {c2 : Compl} ;
lincat N3 = Noun ** {c2,c3 : Compl} ;
lincat NP = {s : Case => Str; a : Agr} ;
lincat Num = {s : Str; n : Number} ;
lincat Numeral = {s : Str} ;
lincat Ord = {s : Str} ;
lincat PN = {s : Str} ;
lincat Predet = {s : Str} ;
lincat Prep = Compl ** {isPre : Bool} ;
lincat Pron = {s : Str; empty : Str; a : Agr} ;
lincat QCl = {s : Str} ;
lincat QS = {s : Str} ;
lincat Quant = {s : Str; sp : Species} ;
lincat RCl = {s : Str} ;
lincat RP = {s : Str} ;
lincat RS = {s : Str} ;
lincat S = {s : Str} ;
lincat SN = {s : Str} ;
lincat SSlash = {s : Str} ;
lincat Subj = {s : Str} ;
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 VP = {s : Str;
conditional : Aspect => Person => Number => Str;
converb : {imperfective : Str; futCon1 : Str; futCon2 : Str;
negative : Str; perfective : Str; simultaneous : Str};
imperative : Number => Str; passive : Str;
past : Person => Number => Str; participle : PartType => Str;
subjunctive : Aspect => Person => Number => Str} ;
lincat VPSlash = Verb ** {c2 : Compl} ;
}
+25 -25
View File
@@ -15,50 +15,50 @@ lin
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))) ++
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 ++
paragraph x.passive ++
heading1 "Participle" ++
frameTable (
tr (th "Resultative" ++ td (x.Participle ! Resultative)) ++
tr (th "Subject" ++ td (x.Participle ! Subject))) ++
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))) ++
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)) ++
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))) ++
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)) ++
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))) ++
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))) ;
tr (td (x.imperative ! Sg) ++ td (x.imperative ! Pl))) ;
s3=[]
} ;
lin
+6 -2
View File
@@ -2,5 +2,9 @@ concrete GrammarHye of Grammar =
TenseX,
PhraseHye,
NounHye,
AdjectiveHye ** {
}
VerbHye,
AdjectiveHye,
AdverbHye,
SentenceHye,
StructuralHye ** {
}
+4 -1
View File
@@ -1,2 +1,5 @@
concrete LexiconHye of Lexicon = CatHye ** open ParadigmsHye in {
}
lin apple_N = mkN001 "խնձոր" ;
lin man_N = mkN047 "տղամարդ" ;
lin woman_N = mkN034 "կին" ;
}
+375 -375
View File
File diff suppressed because it is too large Load Diff
+34 -3
View File
@@ -1,4 +1,35 @@
concrete NounHye of Noun = CatHye ** {
lin
UseN n = n ;
concrete NounHye of Noun = CatHye ** open ResHye in {
lin AdjCN ap cn = {
s = \\sp,c,n =>
case ap.isPre of {
True => ap.s ! Indef ! Nom ! Sg ++ cn.s ! sp ! c ! n;
False => cn.s ! sp ! c ! n ++ ap.s ! Indef ! Nom ! Sg
}
} ;
lin AdvCN cn adv = {
s = \\sp,c,num => adv.s ++ cn.s ! sp ! c ! num
} ;
lin DefArt = {s = []; sp = Def} ;
lin DetCN det cn = {s = \\c => det.s ++ cn.s ! det.sp ! c ! det.n;
a = {n=det.n; p=P3}} ;
lin DetQuant quant num = {s = quant.s ++ num.s; n = num.n; sp=quant.sp} ;
lin IndefArt = {s = "մի"; sp = Indef} ;
lin NumPl = {s = []; n = Pl} ;
lin NumSg = {s = []; n = Sg} ;
lin MassNP cn = {
s = \\c => cn.s ! Indef ! c ! Sg;
a = {n=Sg; p=P3}
} ;
lin PossPron pron = {s = pron.empty; sp = Poss pron.a.p} ;
lin UseN n = {
s = \\sp,c,num =>
case <sp,c> of {
<Def,Nom> => n.def_nom ! num ;
<Def,Dat> => n.def_dat ! num ;
<Poss P1,_> => n.poss1 ! c ! num ;
<Poss P2,_> => n.poss2 ! c ! num ;
_ => n.s ! c ! num
}
} ;
lin UsePron pron = {s = \\c => pron.s; a=pron.a} ;
}
+12 -3
View File
@@ -468,16 +468,19 @@ oper
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} ;
mkPrep : Str -> Prep = \s -> lin Prep {s=s; c=Dat; isPre=False} ;
singular : Number = Sg ;
plural : Number = Pl ;
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} ;
mkQuant : Str -> Quant = \s -> lin Quant {s=s; sp=Indef} ;
mkDet : Str -> Number -> Det = \s,n -> lin Det {s=s; n=n; sp=Indef} ;
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} ;
@@ -488,4 +491,10 @@ oper
mkSN : Str -> SN = \s -> lin SN {s=s} ;
mkPN : Str -> PN = \s -> lin PN {s=s} ;
mkPron : Str -> Number -> Person -> Pron = \s,n,p ->
lin Pron {
s = s ;
empty = [] ;
a = {n = n; p = p}
} ;
}
+17 -18
View File
@@ -1,16 +1,14 @@
resource ResHye = {
resource ResHye = ParamX ** {
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 Verb = {s: Str; causative: Str; conditional: Aspect => Person => Number => Str; converb: {imperfective: Str; futCon1: Str; futCon2: Str; negative: Str; perfective: Str; simultaneous: Str}; imperative: 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 {
causative = f2 ;
conditional = table {
Perfect => table {
P1 => table {
Sg => f3 ;
@@ -40,19 +38,19 @@ oper mkVerb : (_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_
}
}
} ;
Converb = { Imperfective = f15 ;
FutCon1 = f16 ;
FutCon2 = f17 ;
Negative = f18 ;
Perfective = f19 ;
Simultaneous = f20
converb = { imperfective = f15 ;
futCon1 = f16 ;
futCon2 = f17 ;
negative = f18 ;
perfective = f19 ;
simultaneous = f20
} ;
Imperative_Jussive = table {
imperative = table {
Sg => f21 ;
Pl => f22
} ;
Passive = f23 ;
Past = table {
passive = f23 ;
past = table {
P1 => table {
Sg => f24 ;
Pl => f25
@@ -66,11 +64,11 @@ oper mkVerb : (_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_
Pl => f29
}
} ;
Participle = table {
participle = table {
Resultative => f30 ;
Subject => f31
} ;
Subjunctive = table {
subjunctive = table {
Perfect => table {
P1 => table {
Sg => f32 ;
@@ -102,7 +100,8 @@ oper mkVerb : (_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_
}
} ;
param Species = Indef | Def | Poss Person ;
oper Agr = {n : Number; p : Person} ;
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 ->
+14
View File
@@ -0,0 +1,14 @@
concrete SentenceHye of Sentence = CatHye ** open Prelude,ResHye in {
lin PredVP np vp = {s = np.s ! Nom ++ vp.s;
conditional = \\a,n => np.s ! Nom ++ vp.conditional ! a ! P3 ! n;
converb = {imperfective = np.s ! Nom ++ vp.converb.imperfective;
futCon1 = np.s ! Nom ++ vp.converb.futCon1;
futCon2 = np.s ! Nom ++ vp.converb.futCon2;
negative = np.s ! Nom ++ vp.converb.negative;
perfective = np.s ! Nom ++ vp.converb.perfective;
simultaneous = np.s ! Nom ++ vp.converb.simultaneous};
passive = np.s ! Nom ++ vp.passive;
past = \\_,n => np.s ! Nom ++ vp.past ! P3 ! n;
participle = \\p => np.s ! Nom ++ vp.participle ! p;
subjunctive = \\a,n => np.s ! Nom ++ vp.subjunctive ! a ! P3 ! n} ;
}
+8
View File
@@ -0,0 +1,8 @@
concrete StructuralHye of Structural = CatHye ** open ResHye, ParadigmsHye in {
lin i_Pron = mkPron "ես" Sg P1 ;
lin youSg_Pron = mkPron "դու" Sg P2 ;
lin he_Pron, she_Pron, it_Pron = mkPron "նա" Sg P3 ;
lin we_Pron = mkPron "մեք" Pl P1 ;
lin youPl_Pron = mkPron "դուք" Pl P2 ;
lin they_Pron = mkPron "նոքա" Pl P3 ;
}
+35
View File
@@ -0,0 +1,35 @@
concrete VerbHye of Verb = CatHye ** open Prelude,ResHye in {
lin AdvVP vp adv = {s = adv.s ++ vp.s;
conditional = \\a,p,n => adv.s ++ vp.conditional ! a ! p ! n;
converb = {imperfective = adv.s ++ vp.converb.imperfective;
futCon1 = adv.s ++ vp.converb.futCon1;
futCon2 = adv.s ++ vp.converb.futCon2;
negative = adv.s ++ vp.converb.negative;
perfective = adv.s ++ vp.converb.perfective;
simultaneous = adv.s ++ vp.converb.simultaneous};
imperative = \\n => vp.imperative ! n ++ adv.s;
passive = adv.s ++ vp.passive;
past = \\p,n => adv.s ++ vp.past ! p ! n;
participle = \\p => adv.s ++ vp.participle ! p;
subjunctive = \\a,p,n => adv.s ++ vp.subjunctive ! a ! p ! n} ;
lin ComplSlash vp np = {s = vp.s ++ vp.c2.s ++ np.s ! vp.c2.c;
conditional = \\a,p,n => vp.conditional ! a ! p ! n
++ vp.c2.s ++ np.s ! vp.c2.c;
converb = {imperfective = vp.converb.imperfective
++ vp.c2.s ++ np.s ! vp.c2.c;
futCon1 = vp.converb.futCon1 ++ vp.c2.s ++ np.s ! vp.c2.c;
futCon2 = vp.converb.futCon2 ++ vp.c2.s ++ np.s ! vp.c2.c;
negative = vp.converb.negative ++ vp.c2.s ++ np.s ! vp.c2.c;
perfective = vp.converb.perfective
++ vp.c2.s ++ np.s ! vp.c2.c;
simultaneous = vp.converb.simultaneous
++ vp.c2.s ++ np.s ! vp.c2.c};
imperative = \\n => vp.imperative ! n ++ vp.c2.s ++ np.s ! Nom;
passive = vp.passive ++ vp.c2.s ++ np.s ! vp.c2.c;
past = \\p,n => vp.past ! p ! n ++ vp.c2.s ++ np.s ! vp.c2.c;
participle = \\p => vp.participle ! p ++ vp.c2.s ++ np.s ! vp.c2.c;
subjunctive = \\a,p,n => vp.subjunctive ! a ! p ! n
++ vp.c2.s ++ np.s ! vp.c2.c} ;
lin SlashV2a v = v ;
lin UseV v = v ;
}
+11 -1
View File
@@ -1,4 +1,14 @@
concrete AdjectiveBel of Adjective = CatBel ** {
concrete AdjectiveBel of Adjective = CatBel ** open ResBel in {
lin
PositA a = a ;
ComparA a np = {s = \\c,gn => "больш" ++ a.s ! c ! gn ++ "за" ++ np.s ! Acc} ;
ComplA2 a np = {s = \\c,gn => a.s ! c ! gn ++ prepNP a.c2 np} ;
ReflA2 a = {s = \\c,gn => a.s ! c ! gn ++ "да сябе"} ;
UseA2 a = a ;
UseComparA a = {s = \\c,gn => "больш" ++ a.s ! c ! gn} ;
CAdvAP cadv ap np = {s = \\c,gn => cadv.s ++ ap.s ! c ! gn ++ cadv.p ++ np.s ! Nom} ;
AdjOrd ord = ord ;
SentAP ap sc = {s = \\c,gn => ap.s ! c ! gn ++ sc.s} ;
AdAP ada ap = {s = \\c,gn => ada.s ++ ap.s ! c ! gn} ;
AdvAP ap adv = {s = \\c,gn => ap.s ! c ! gn ++ adv.s} ;
}
+13
View File
@@ -0,0 +1,13 @@
concrete AdverbBel of Adverb = CatBel ** open ResBel in {
lin
PositAdvAdj a = {s = a.s ! Nom ! GSg Neuter} ;
PrepNP prep np = {s = prepNP prep np} ;
ComparAdvAdj cadv a np = {s = cadv.s ++ a.s ! Nom ! GSg Neuter ++ cadv.p ++ np.s ! Nom} ;
ComparAdvAdjS cadv a s = {s = cadv.s ++ a.s ! Nom ! GSg Neuter ++ cadv.p ++ s.s} ;
AdAdv ada adv = {s = ada.s ++ adv.s} ;
PositAdAAdj a = {s = a.s ! Nom ! GSg Neuter} ;
SubjS subj s = {s = subj.s ++ s.s} ;
AdnCAdv cadv = {s = cadv.s} ;
}
+2 -1
View File
@@ -1,4 +1,5 @@
concrete AllBel of AllBelAbs =
LangBel
LangBel,
ExtendBel
**
{} ;
+3 -2
View File
@@ -1,3 +1,4 @@
abstract AllBelAbs =
Lang
** {}
Lang,
Extend
** {}
+63 -16
View File
@@ -1,21 +1,68 @@
concrete CatBel of Cat = CommonX ** open ResBel in {
concrete CatBel of Cat = CommonX ** open ResBel, (R = ParamX) 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
S = {s : Str} ;
QS = {s : Str} ;
RS = {s : Str} ;
Cl = {s : R.Tense => R.Polarity => Str} ;
ClSlash = {s : R.Tense => R.Polarity => Str; c : Compl} ;
SSlash = {s : Str; c : Compl} ;
Imp = {s : R.Polarity => Number => Str} ;
lincat LN,SN,GN,PN = {s : Str} ;
QCl = {s : R.Tense => R.Polarity => Str} ;
IP = NPhrase ;
IComp = {s : Str} ;
IDet = {s : Case => Gender => Str; n : Number} ;
IQuant = {s : Case => Gender => Number => Str} ;
linref V,VV,V2,V3,V2A,V2S,V2Q,V2V = \v -> v.infinitive ;
RCl = {s : R.Tense => R.Polarity => Str} ;
RP = {s : Str} ;
VP = VPhrase ;
Comp = {s : Agr => Str} ;
VPSlash = VSlash ;
N = Noun ;
N2 = Noun ** {c2 : Compl} ;
N3 = Noun ** {c2,c3 : Compl} ;
CN = CommonNoun ;
NP = NPhrase ;
Pron = {s: Case => Str; a: Agr} ;
Det = {s : Case => Gender => Str; n : Number} ;
Predet = {s : Case => Gender => Number => Str} ;
Quant = {s : Case => Gender => Number => Str} ;
Num = {s : Case => Gender => Str; n : Number} ;
Card = {s : Str; n : Number} ;
ACard = {s : Str; n : Number} ;
Ord = Adj ;
DAP = {s : Case => Gender => Str; n : Number} ;
Numeral = {s : Str} ;
Digits = {s : Str} ;
Decimal = {s : Str} ;
Conj = {s : Str; n : Number} ;
Subj = {s : Str} ;
Prep = Compl ;
V = Verb ;
VV,VS,VQ,VA = Verb ;
V2 = Verb ** {c2 : Compl} ;
V3,V2A,V2S,V2Q,V2V = Verb ** {c2,c3 : Compl} ;
A = Adj ;
A2 = Adj ** {c2 : Compl} ;
AP = AdjPhrase ;
LN = {s : Case => Str; g : Gender; n : Number} ;
PN = {s : Case => Str; g : Gender; n : Number} ;
GN = {s : Str; g : Gender} ;
SN = {s : Str} ;
linref
V,VV,V2,V3,V2A,V2S,V2Q,V2V = \v -> v.infinitive ;
N,N2,N3 = \n -> n.s ! Nom ! Sg ;
A,A2,AP,Ord = \a -> a.s ! Nom ! GSg Masc ;
NP,IP = \np -> np.s ! Nom ;
S,QS,RS = \s -> s.s ;
}
+60
View File
@@ -0,0 +1,60 @@
concrete ConjunctionBel of Conjunction = CatBel ** open ResBel in {
lin
ConjS conj xs = {s = xs.s1 ++ conj.s ++ xs.s2} ;
ConjRS conj xs = {s = xs.s1 ++ conj.s ++ xs.s2} ;
ConjAP conj xs = {s = \\c,gn => xs.s1 ! c ! gn ++ conj.s ++ xs.s2 ! c ! gn} ;
ConjNP conj xs = {
s = \\c => xs.s1 ! c ++ conj.s ++ xs.s2 ! c ;
a = {g=Masc; n=conj.n; p=P3}
} ;
ConjAdv conj xs = {s = xs.s1 ++ conj.s ++ xs.s2} ;
ConjAdV conj xs = {s = xs.s1 ++ conj.s ++ xs.s2} ;
ConjIAdv conj xs = {s = xs.s1 ++ conj.s ++ xs.s2} ;
ConjCN conj xs = {
s = \\c,n => xs.s1 ! c ! n ++ conj.s ++ xs.s2 ! c ! n ;
voc = xs.voc ;
g = xs.g
} ;
ConjDet conj xs = {
s = \\c,g => xs.s1 ! c ! g ++ conj.s ++ xs.s2 ! c ! g ;
n = conj.n
} ;
BaseS x y = {s1 = x.s; s2 = y.s} ;
ConsS x xs = {s1 = x.s ++ "," ++ xs.s1; s2 = xs.s2} ;
BaseRS x y = {s1 = x.s; s2 = y.s} ;
ConsRS x xs = {s1 = x.s ++ "," ++ xs.s1; s2 = xs.s2} ;
BaseAdv x y = {s1 = x.s; s2 = y.s} ;
ConsAdv x xs = {s1 = x.s ++ "," ++ xs.s1; s2 = xs.s2} ;
BaseAdV x y = {s1 = x.s; s2 = y.s} ;
ConsAdV x xs = {s1 = x.s ++ "," ++ xs.s1; s2 = xs.s2} ;
BaseIAdv x y = {s1 = x.s; s2 = y.s} ;
ConsIAdv x xs = {s1 = x.s ++ "," ++ xs.s1; s2 = xs.s2} ;
BaseNP x y = {
s1 = x.s ;
s2 = y.s
} ;
ConsNP x xs = {
s1 = \\c => x.s ! c ++ "," ++ xs.s1 ! c ;
s2 = xs.s2
} ;
BaseAP x y = {s1 = x.s; s2 = y.s} ;
ConsAP x xs = {s1 = \\c,gn => x.s ! c ! gn ++ "," ++ xs.s1 ! c ! gn; s2 = xs.s2} ;
BaseCN x y = {s1 = x.s; s2 = y.s; voc = x.voc ++ "," ++ y.voc; g = x.g} ;
ConsCN x xs = {s1 = \\c,n => x.s ! c ! n ++ "," ++ xs.s1 ! c ! n; s2 = xs.s2; voc = x.voc ++ "," ++ xs.voc; g = xs.g} ;
BaseDAP x y = {s1 = x.s; s2 = y.s} ;
ConsDAP x xs = {s1 = \\c,g => x.s ! c ! g ++ "," ++ xs.s1 ! c ! g; s2 = xs.s2} ;
lincat
[S] = {s1,s2 : Str} ;
[RS] = {s1,s2 : Str} ;
[Adv] = {s1,s2 : Str} ;
[AdV] = {s1,s2 : Str} ;
[IAdv] = {s1,s2 : Str} ;
[NP] = {s1,s2 : Case => Str} ;
[AP] = {s1,s2 : Case => GenNum => Str} ;
[CN] = {s1,s2 : Case => Number => Str; voc : Str; g : Gender} ;
[DAP] = {s1,s2 : Case => Gender => Str} ;
}
+141
View File
@@ -0,0 +1,141 @@
concrete ConstructionBel of Construction = CatBel ** open ResBel, ParadigmsBel, (R = ParamX) in {
lincat
Timeunit, Hour, Weekday, Month, Monthday, Year, Language = {s : Str} ;
oper
adjVP : Adj -> VPhrase = \a -> {
s = \\t,p,agr => copula t p agr ++ a.s ! Nom ! genNum agr.g agr.n ;
inf = "быць" ++ a.s ! Nom ! GSg Masc ;
imp = \\p,_ => neg p ++ "будзь" ++ a.s ! Nom ! GSg Masc
} ;
lin
hungry_VP = adjVP (mkA "галодны") ;
thirsty_VP = adjVP (mkA "спрагнены") ;
tired_VP = adjVP (mkA "стомлены") ;
scared_VP = adjVP (mkA "спалоханы") ;
ill_VP = adjVP (mkA "хворы") ;
ready_VP = adjVP (mkA "гатовы") ;
has_age_VP card = {
s = \\t,p,a => copula t p a ++ card.s ++ "гадоў" ;
inf = card.s ++ "гадоў" ;
imp = \\p,_ => neg p ++ card.s ++ "гадоў"
} ;
have_name_Cl np name = {s = \\t,p => np.s ! Gen ++ "імя" ++ name.s ! Nom} ;
married_Cl np spouse = {s = \\t,p => np.s ! Nom ++ copula t p np.a ++ "жанаты" ++ "з" ++ spouse.s ! Instr} ;
what_name_QCl np = {s = \\t,p => "як" ++ "завуць" ++ np.s ! Acc} ;
how_old_QCl np = {s = \\t,p => "колькі гадоў" ++ np.s ! Dat} ;
how_far_QCl np = {s = \\t,p => "як далёка" ++ np.s ! Nom} ;
weather_adjCl ap = {s = \\t,p => copula t p defaultAgr ++ ap.s ! Nom ! GSg Neuter} ;
is_right_VP = adjVP (mkA "правы") ;
is_wrong_VP = adjVP (mkA "няправы") ;
n_units_AP card cn a = {s = \\c,gn => card.s ++ cn.s ! Gen ! Pl ++ a.s ! c ! gn} ;
n_units_of_NP card cn np = mkSimpleNP (card.s ++ cn.s ! Gen ! Pl ++ np.s ! Gen) Neuter Sg P3 ;
n_unit_CN card unit cn = nounFromStr (card.s ++ unit.s ! Nom ! Pl ++ cn.s ! Nom ! Sg) cn.g ;
bottle_of_CN np = nounFromStr ("бутэлька" ++ np.s ! Gen) Fem ;
cup_of_CN np = nounFromStr ("кубак" ++ np.s ! Gen) Masc ;
glass_of_CN np = nounFromStr ("шклянка" ++ np.s ! Gen) Fem ;
few_X_short_of_Y np x y = {s = np.s ! Nom ++ "бракуе" ++ x.s ! Gen ! Pl ++ "да" ++ y.s ! Gen ! Sg} ;
timeunitAdv card unit = {s = card.s ++ unit.s} ;
timeunitRange c1 c2 unit = {s = c1.s ++ "да" ++ c2.s ++ unit.s} ;
oneHour = {s = "1"} ; twoHour = {s = "2"} ; threeHour = {s = "3"} ; fourHour = {s = "4"} ;
fiveHour = {s = "5"} ; sixHour = {s = "6"} ; sevenHour = {s = "7"} ; eightHour = {s = "8"} ;
nineHour = {s = "9"} ; tenHour = {s = "10"} ; elevenHour = {s = "11"} ; twelveHour = {s = "12"} ;
thirteenHour = {s = "13"} ; fourteenHour = {s = "14"} ; fifteenHour = {s = "15"} ; sixteenHour = {s = "16"} ;
seventeenHour = {s = "17"} ; eighteenHour = {s = "18"} ; nineteenHour = {s = "19"} ; twentyHour = {s = "20"} ;
twentyOneHour = {s = "21"} ; twentyTwoHour = {s = "22"} ; twentyThreeHour = {s = "23"} ; twentyFourHour = {s = "24"} ;
timeHour h = {s = "а" ++ h.s} ;
timeHourMinute h m = {s = "а" ++ h.s ++ ":" ++ m.s} ;
weekdayPunctualAdv d = {s = "у" ++ d.s} ;
weekdayHabitualAdv d = {s = "па" ++ d.s} ;
weekdayLastAdv d = {s = "мінулай" ++ d.s} ;
weekdayNextAdv d = {s = "наступнай" ++ d.s} ;
monthAdv m = {s = "у" ++ m.s} ;
yearAdv y = {s = "у" ++ y.s} ;
dayMonthAdv d m = {s = d.s ++ m.s} ;
monthYearAdv m y = {s = m.s ++ y.s} ;
dayMonthYearAdv d m y = {s = d.s ++ m.s ++ y.s} ;
intYear i = {s = i.s} ;
intMonthday i = {s = i.s} ;
InLanguage l = {s = "па-" ++ l.s} ;
weekdayN d = nounFromStr d.s Masc ;
monthN m = nounFromStr m.s Masc ;
weekdayPN d = mkPN d.s ;
monthPN m = mkPN m.s ;
languageNP l = mkSimpleNP l.s Neuter Sg P3 ;
languageCN l = nounFromStr l.s Neuter ;
second_Timeunit = {s = "секунд"} ;
minute_Timeunit = {s = "хвілін"} ;
hour_Timeunit = {s = "гадзін"} ;
day_Timeunit = {s = "дзён"} ;
week_Timeunit = {s = "тыдняў"} ;
month_Timeunit = {s = "месяцаў"} ;
year_Timeunit = {s = "гадоў"} ;
monday_Weekday = {s = "панядзелак"} ;
tuesday_Weekday = {s = "аўторак"} ;
wednesday_Weekday = {s = "серада"} ;
thursday_Weekday = {s = "чацвер"} ;
friday_Weekday = {s = "пятніца"} ;
saturday_Weekday = {s = "субота"} ;
sunday_Weekday = {s = "нядзеля"} ;
january_Month = {s = "студзень"} ;
february_Month = {s = "люты"} ;
march_Month = {s = "сакавік"} ;
april_Month = {s = "красавік"} ;
may_Month = {s = "май"} ;
june_Month = {s = "чэрвень"} ;
july_Month = {s = "ліпень"} ;
august_Month = {s = "жнівень"} ;
september_Month = {s = "верасень"} ;
october_Month = {s = "кастрычнік"} ;
november_Month = {s = "лістапад"} ;
december_Month = {s = "снежань"} ;
afrikaans_Language = {s = "афрыкаанс"} ;
amharic_Language = {s = "амхарску"} ;
arabic_Language = {s = "арабску"} ;
bulgarian_Language = {s = "балгарску"} ;
catalan_Language = {s = "каталанску"} ;
chinese_Language = {s = "кітайску"} ;
danish_Language = {s = "дацку"} ;
dutch_Language = {s = "нідэрландску"} ;
english_Language = {s = "англійску"} ;
estonian_Language = {s = "эстонску"} ;
finnish_Language = {s = "фінску"} ;
french_Language = {s = "французску"} ;
german_Language = {s = "нямецку"} ;
greek_Language = {s = "грэцку"} ;
hebrew_Language = {s = "іўрыце"} ;
hindi_Language = {s = "хіндзі"} ;
japanese_Language = {s = "японску"} ;
italian_Language = {s = "італьянску"} ;
latin_Language = {s = "лацінску"} ;
latvian_Language = {s = "латышску"} ;
maltese_Language = {s = "мальтыйску"} ;
nepali_Language = {s = "непальску"} ;
norwegian_Language = {s = "нарвежску"} ;
persian_Language = {s = "персідску"} ;
polish_Language = {s = "польску"} ;
punjabi_Language = {s = "панджабі"} ;
romanian_Language = {s = "румынску"} ;
russian_Language = {s = "руску"} ;
sindhi_Language = {s = "сіндхі"} ;
spanish_Language = {s = "іспанску"} ;
swahili_Language = {s = "суахілі"} ;
swedish_Language = {s = "шведску"} ;
thai_Language = {s = "тайску"} ;
turkish_Language = {s = "турэцку"} ;
urdu_Language = {s = "урду"} ;
}
+6 -6
View File
@@ -29,12 +29,12 @@ lin
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))) ++
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)) ++
+244
View File
@@ -0,0 +1,244 @@
--# -path=.:../abstract:../common:prelude
concrete ExtendBel of Extend = CatBel ** open ResBel, (R = ParamX), ParadigmsBel in {
lincat
VPS = {s : Agr => Str} ;
[VPS] = {s1,s2 : Agr => Str} ;
VPI = {s : Str} ;
[VPI] = {s1,s2 : Str} ;
VPS2 = {s : Agr => Str; c : Compl; post : Str} ;
[VPS2] = {s1,s2 : Agr => Str; c : Compl; post : Str} ;
VPI2 = {s : Str; c : Compl; post : Str} ;
[VPI2] = {s1,s2 : Str; c : Compl; post : Str} ;
[Comp] = {s1,s2 : Agr => Str} ;
[Imp] = {s1,s2 : R.Polarity => Number => Str} ;
RNP = {s : Case => Str} ;
RNPList = {s1,s2 : Case => Str} ;
X = {s : Str} ;
lin
iFem_Pron = mkPron "я" "мяне" "мне" "мяне" "мне" "мной" Fem Sg P1 ;
youFem_Pron = mkPron "ты" "цябе" "табе" "цябе" "табе" "табой" Fem Sg P2 ;
weFem_Pron = mkPron "мы" "нас" "нам" "нас" "нас" "намі" Fem Pl P1 ;
youPlFem_Pron = mkPron "вы" "вас" "вам" "вас" "вас" "вамі" Fem Pl P2 ;
theyFem_Pron = mkPron "яны" "іх" "ім" "іх" "іх" "імі" Fem Pl P3 ;
theyNeutr_Pron = mkPron "яны" "іх" "ім" "іх" "іх" "імі" Neuter Pl P3 ;
youPolFem_Pron = mkPron "вы" "вас" "вам" "вас" "вас" "вамі" Fem Pl P2 ;
youPolPl_Pron = mkPron "вы" "вас" "вам" "вас" "вас" "вамі" Fem Pl P2 ;
youPolPlFem_Pron = mkPron "вы" "вас" "вам" "вас" "вас" "вамі" Fem Pl P2 ;
GenNP np = {s = \\_,_,_ => np.s ! Gen} ;
GenIP ip = {s = \\_,_,_ => ip.s ! Gen} ;
GenRP num cn = {s = cn.s ! Gen ! num.n ++ "якога"} ;
GenModNP num np cn = {
s = \\c => np.s ! Gen ++ cn.s ! c ! num.n ;
a = {g=cn.g; n=num.n; p=P3}
} ;
GenModIP num ip cn = {
s = \\c => ip.s ! Gen ++ cn.s ! c ! num.n ;
a = {g=cn.g; n=num.n; p=P3}
} ;
CompBareCN cn = {s = \\a => cn.s ! Nom ! a.n} ;
PiedPipingQuestSlash ip cl = {s = \\t,p => cl.c.s ++ ip.s ! cl.c.c ++ cl.s ! t ! p} ;
PiedPipingRelSlash rp cl = {s = \\t,p => rp.s ++ cl.s ! t ! p} ;
StrandQuestSlash ip cl = {s = \\t,p => cl.c.s ++ ip.s ! cl.c.c ++ cl.s ! t ! p} ;
StrandRelSlash rp cl = {s = \\t,p => rp.s ++ cl.s ! t ! p} ;
EmptyRelSlash cl = {s = \\t,p => "што" ++ cl.s ! t ! p} ;
MkVPS temp pol vp = {s = \\a => vp.s ! temp.t ! pol.p ! a} ;
ConjVPS conj xs = {s = \\a => xs.s1 ! a ++ conj.s ++ xs.s2 ! a} ;
PredVPS np vps = {s = np.s ! Nom ++ vps.s ! np.a} ;
SQuestVPS np vps = {s = np.s ! Nom ++ vps.s ! np.a} ;
QuestVPS ip vps = {s = ip.s ! Nom ++ vps.s ! ip.a} ;
RelVPS rp vps = {s = rp.s ++ vps.s ! defaultAgr} ;
BaseVPS x y = {s1 = x.s; s2 = y.s} ;
ConsVPS x xs = {s1 = \\a => x.s ! a ++ "," ++ xs.s1 ! a; s2 = xs.s2} ;
ExistS temp pol np = {s = copula temp.t pol.p np.a ++ np.s ! Nom} ;
ExistNPQS temp pol np = {s = copula temp.t pol.p np.a ++ np.s ! Nom} ;
ExistIPQS temp pol ip = {s = copula temp.t pol.p ip.a ++ ip.s ! Nom} ;
MkVPI vp = {s = vp.inf} ;
ConjVPI conj xs = {s = xs.s1 ++ conj.s ++ xs.s2} ;
ComplVPIVV vv vpi = {
s = \\t,p,a => finiteVerb vv t p a ++ vpi.s ;
inf = vv.infinitive ++ vpi.s ;
imp = \\p,n => neg p ++ vv.imperative ! n ++ vpi.s
} ;
BaseVPI x y = {s1 = x.s; s2 = y.s} ;
ConsVPI x xs = {s1 = x.s ++ "," ++ xs.s1; s2 = xs.s2} ;
MkVPS2 temp pol vp = {s = \\a => vp.s ! temp.t ! pol.p ! a; c = vp.c; post = vp.post} ;
ConjVPS2 conj xs = {s = \\a => xs.s1 ! a ++ conj.s ++ xs.s2 ! a; c = xs.c; post = xs.post} ;
ComplVPS2 vps np = {s = \\a => vps.s ! a ++ prepNP vps.c np ++ vps.post} ;
ReflVPS2 vps rnp = {s = \\a => vps.s ! a ++ rnp.s ! vps.c.c ++ vps.post} ;
BaseVPS2 x y = {s1 = x.s; s2 = y.s; c = x.c; post = x.post ++ y.post} ;
ConsVPS2 x xs = {s1 = \\a => x.s ! a ++ "," ++ xs.s1 ! a; s2 = xs.s2; c = xs.c; post = x.post ++ xs.post} ;
MkVPI2 vp = {s = vp.inf; c = vp.c; post = vp.post} ;
ConjVPI2 conj xs = {s = xs.s1 ++ conj.s ++ xs.s2; c = xs.c; post = xs.post} ;
ComplVPI2 vpi np = {s = vpi.s ++ prepNP vpi.c np ++ vpi.post} ;
BaseVPI2 x y = {s1 = x.s; s2 = y.s; c = x.c; post = x.post ++ y.post} ;
ConsVPI2 x xs = {s1 = x.s ++ "," ++ xs.s1; s2 = xs.s2; c = xs.c; post = x.post ++ xs.post} ;
ConjComp conj xs = {s = \\a => xs.s1 ! a ++ conj.s ++ xs.s2 ! a} ;
BaseComp x y = {s1 = x.s; s2 = y.s} ;
ConsComp x xs = {s1 = \\a => x.s ! a ++ "," ++ xs.s1 ! a; s2 = xs.s2} ;
ConjImp conj xs = {s = \\p,n => xs.s1 ! p ! n ++ conj.s ++ xs.s2 ! p ! n} ;
BaseImp x y = {s1 = x.s; s2 = y.s} ;
ConsImp x xs = {s1 = \\p,n => x.s ! p ! n ++ "," ++ xs.s1 ! p ! n; s2 = xs.s2} ;
ProDrop pron = pron ;
ICompAP ap = {s = ap.s ! Nom ! GSg Masc} ;
IAdvAdv adv = {s = adv.s} ;
CompIQuant iq = {s = iq.s ! Nom ! Masc ! Sg} ;
PrepCN prep cn = {s = prep.s ++ cn.s ! prep.c ! Sg} ;
FocusObj np ss = {s = np.s ! Acc ++ ss.s} ;
FocusAdv adv s = {s = adv.s ++ s.s} ;
FocusAdV adv s = {s = adv.s ++ s.s} ;
FocusAP ap np = {s = ap.s ! Nom ! genNum np.a.g np.a.n ++ np.s ! Nom} ;
PresPartAP vp = adjFromStr vp.inf ;
EmbedPresPart vp = {s = vp.inf} ;
PastPartAP vp = adjFromStr vp.inf ;
PastPartAgentAP vp np = adjFromStr (vp.inf ++ prepNP (mkPrep "кім" instrumental) np) ;
PassVPSlash vp = {
s = \\t,p,a => copula t p a ++ vp.inf ;
inf = "быць" ++ vp.inf ;
imp = \\p,_ => neg p ++ "будзь" ++ vp.inf
} ;
PassAgentVPSlash vp np = addAdvVP (PassVPSlash vp) (prepNP (mkPrep "кім" instrumental) np) ;
NominalizeVPSlashNP vp np = mkSimpleNP (vp.inf ++ prepNP vp.c np) Neuter Sg P3 ;
ProgrVPSlash vp = vp ;
A2VPSlash a = {
s = \\t,p,agr => copula t p agr ++ a.s ! Nom ! genNum agr.g agr.n ;
inf = a.s ! Nom ! GSg Masc ;
c = a.c2 ;
imp = \\p,_ => neg p ++ a.s ! Nom ! GSg Masc ;
post = []
} ;
N2VPSlash n = {
s = \\t,p,agr => copula t p agr ++ n.s ! Nom ! agr.n ;
inf = n.s ! Nom ! Sg ;
c = n.c2 ;
imp = \\p,_ => neg p ++ n.s ! Nom ! Sg ;
post = []
} ;
ExistsNP np = {s = \\t,p => copula t p np.a ++ np.s ! Nom} ;
ExistCN cn = {s = \\t,p => copula t p {g=cn.g; n=Sg; p=P3} ++ cn.s ! Nom ! Sg} ;
ExistMassCN cn = ExistCN cn ;
ExistPluralCN cn = {s = \\t,p => copula t p {g=cn.g; n=Pl; p=P3} ++ cn.s ! Nom ! Pl} ;
AdvIsNP adv np = {s = \\t,p => adv.s ++ copula t p np.a ++ np.s ! Nom} ;
AdvIsNPAP adv np ap = {s = \\t,p => adv.s ++ copula t p np.a ++ np.s ! Nom ++ ap.s ! Nom ! genNum np.a.g np.a.n} ;
PurposeVP vp = {s = "каб" ++ vp.inf} ;
ComplBareVS vs s = {
s = \\t,p,a => finiteVerb vs t p a ++ s.s ;
inf = vs.infinitive ++ s.s ;
imp = \\p,n => neg p ++ vs.imperative ! n ++ s.s
} ;
SlashBareV2S v s = {
s = \\t,p,a => finiteVerb v t p a ;
inf = v.infinitive ++ s.s ;
c = v.c2 ;
imp = \\p,n => neg p ++ v.imperative ! n ;
post = s.s
} ;
ComplDirectVS vs utt = {
s = \\t,p,a => finiteVerb vs t p a ++ utt.s ;
inf = vs.infinitive ++ utt.s ;
imp = \\p,n => neg p ++ vs.imperative ! n ++ utt.s
} ;
ComplDirectVQ vq utt = {
s = \\t,p,a => finiteVerb vq t p a ++ utt.s ;
inf = vq.infinitive ++ utt.s ;
imp = \\p,n => neg p ++ vq.imperative ! n ++ utt.s
} ;
FrontComplDirectVS np vs utt = {s = \\t,p => utt.s ++ np.s ! Nom ++ finiteVerb vs t p np.a} ;
FrontComplDirectVQ np vq utt = {s = \\t,p => utt.s ++ np.s ! Nom ++ finiteVerb vq t p np.a} ;
PredAPVP ap vp = {s = \\t,p => copula t p defaultAgr ++ ap.s ! Nom ! GSg Neuter ++ vp.inf} ;
AdjAsCN ap = nounFromStr (ap.s ! Nom ! GSg Masc) Masc ;
AdjAsNP ap = mkSimpleNP (ap.s ! Nom ! GSg Masc) Masc Sg P3 ;
PredIAdvVP iadv vp = {s = \\t,p => iadv.s ++ vp.inf} ;
EmbedSSlash ss = {s = ss.s} ;
ReflRNP vp rnp = {
s = \\t,p,a => vp.s ! t ! p ! a ++ rnp.s ! vp.c.c ++ vp.post ;
inf = vp.inf ++ rnp.s ! vp.c.c ;
imp = \\p,n => vp.imp ! p ! n ++ rnp.s ! vp.c.c ++ vp.post
} ;
ReflPron = {s = caseTable "сябе"} ;
ReflPoss num cn = {s = \\c => "свой" ++ cn.s ! c ! num.n} ;
PredetRNP pred rnp = {s = \\c => pred.s ! c ! Masc ! Sg ++ rnp.s ! c} ;
AdvRNP np prep rnp = {s = \\c => np.s ! c ++ prep.s ++ rnp.s ! prep.c} ;
AdvRVP vp prep rnp = addAdvVP vp (prep.s ++ rnp.s ! prep.c) ;
AdvRAP ap prep rnp = {s = \\c,gn => ap.s ! c ! gn ++ prep.s ++ rnp.s ! prep.c} ;
ReflA2RNP a rnp = {s = \\c,gn => a.s ! c ! gn ++ a.c2.s ++ rnp.s ! a.c2.c} ;
PossPronRNP pron num cn rnp = {
s = \\c => pron.s ! Gen ++ cn.s ! c ! num.n ++ rnp.s ! Gen ;
a = {g=cn.g; n=num.n; p=P3}
} ;
ConjRNP conj xs = {s = \\c => xs.s1 ! c ++ conj.s ++ xs.s2 ! c} ;
Base_rr_RNP x y = {s1 = x.s; s2 = y.s} ;
Base_nr_RNP x y = {s1 = x.s; s2 = y.s} ;
Base_rn_RNP x y = {s1 = x.s; s2 = y.s} ;
Cons_rr_RNP x xs = {s1 = \\c => x.s ! c ++ "," ++ xs.s1 ! c; s2 = xs.s2} ;
Cons_nr_RNP x xs = {s1 = \\c => x.s ! c ++ "," ++ xs.s1 ! c; s2 = xs.s2} ;
ReflPossPron = mkQuant "свой" ;
ComplGenVV vv ant pol vp = {
s = \\t,p,a => finiteVerb vv t p a ++ neg pol.p ++ vp.inf ;
inf = vv.infinitive ++ neg pol.p ++ vp.inf ;
imp = \\p,n => neg p ++ vv.imperative ! n ++ neg pol.p ++ vp.inf
} ;
CompoundN n1 n2 = {
s = \\c,n => n1.s ! Nom ! Sg ++ n2.s ! c ! n ;
voc = n1.voc ++ n2.voc ;
g = n2.g
} ;
CompoundAP n a = {s = \\c,gn => n.s ! Nom ! Sg ++ a.s ! c ! gn} ;
GerundCN vp = nounFromStr vp.inf Neuter ;
GerundNP vp = mkSimpleNP vp.inf Neuter Sg P3 ;
GerundAdv vp = {s = vp.inf} ;
WithoutVP vp = {s = "без" ++ vp.inf} ;
ByVP vp = {s = "праз" ++ vp.inf} ;
InOrderToVP vp = {s = "каб" ++ vp.inf} ;
ApposNP np app = {s = \\c => np.s ! c ++ app.s ! Nom; a = np.a} ;
AdAdV ada adv = {s = ada.s ++ adv.s} ;
UttAdV adv = {s = adv.s} ;
PositAdVAdj a = {s = a.s ! Nom ! GSg Neuter} ;
CompS s = {s = \\_ => s.s} ;
CompQS qs = {s = \\_ => qs.s} ;
CompVP ant pol vp = {s = \\_ => neg pol.p ++ vp.inf} ;
UncontractedNeg = {s = []; p = R.Neg} ;
UttVPShort vp = {s = vp.inf} ;
ComplSlashPartLast vp np = {
s = \\t,p,a => vp.s ! t ! p ! a ++ prepNP vp.c np ++ vp.post ;
inf = vp.inf ++ prepNP vp.c np ;
imp = \\p,n => vp.imp ! p ! n ++ prepNP vp.c np ++ vp.post
} ;
DetNPMasc det = {s = \\c => det.s ! c ! Masc; a = {g=Masc; n=det.n; p=P3}} ;
DetNPFem det = {s = \\c => det.s ! c ! Fem; a = {g=Fem; n=det.n; p=P3}} ;
UseComp_estar comp = UseComp_ser comp ;
UseComp_ser comp = {
s = \\t,p,a => copula t p a ++ comp.s ! a ;
inf = "быць" ++ comp.s ! defaultAgr ;
imp = \\p,_ => neg p ++ "будзь" ++ comp.s ! defaultAgr
} ;
SubjRelNP np rs = {s = \\c => np.s ! c ++ rs.s; a = np.a} ;
UttAccNP np = {s = np.s ! Acc} ;
UttDatNP np = {s = np.s ! Dat} ;
UttAccIP ip = {s = ip.s ! Acc} ;
UttDatIP ip = {s = ip.s ! Dat} ;
UseDAP dap = {s = \\c => dap.s ! c ! Masc; a = {g=Neuter; n=dap.n; p=P3}} ;
UseDAPMasc dap = {s = \\c => dap.s ! c ! Masc; a = {g=Masc; n=dap.n; p=P3}} ;
UseDAPFem dap = {s = \\c => dap.s ! c ! Fem; a = {g=Fem; n=dap.n; p=P3}} ;
CardCNCard card cn = {s = card.s ++ cn.s ! Gen ! Pl; n = Pl} ;
TPastSimple = {s = []; t = R.Past} ;
SubjunctRelCN cn rs = {
s = \\c,n => cn.s ! c ! n ++ rs.s ;
voc = cn.voc ;
g = cn.g
} ;
}
+12 -2
View File
@@ -2,5 +2,15 @@ concrete GrammarBel of Grammar =
TenseX,
PhraseBel,
NounBel,
AdjectiveBel ** {
}
AdjectiveBel,
AdverbBel,
VerbBel,
SentenceBel,
QuestionBel,
RelativeBel,
ConjunctionBel,
NumeralBel,
NamesBel,
StructuralBel,
IdiomBel ** {
}
+22
View File
@@ -0,0 +1,22 @@
concrete IdiomBel of Idiom = CatBel ** open ResBel, (R = ParamX), ParadigmsBel in {
lin
ImpersCl vp = {s = \\t,p => vp.s ! t ! p ! defaultAgr} ;
GenericCl vp = {s = \\t,p => "нехта" ++ vp.s ! t ! p ! defaultAgr} ;
CleftNP np rs = {s = \\_,_ => "гэта" ++ np.s ! Nom ++ rs.s} ;
CleftAdv adv s = {s = \\_,_ => "гэта" ++ adv.s ++ s.s} ;
ExistNP np = {s = \\t,p => copula t p np.a ++ np.s ! Nom} ;
ExistIP ip = {s = \\t,p => copula t p ip.a ++ ip.s ! Nom} ;
ExistNPAdv np adv = {s = \\t,p => copula t p np.a ++ np.s ! Nom ++ adv.s} ;
ExistIPAdv ip adv = {s = \\t,p => copula t p ip.a ++ ip.s ! Nom ++ adv.s} ;
ProgrVP vp = vp ;
ImpPl1 vp = {s = "давайце" ++ vp.inf} ;
ImpP3 np vp = {s = "няхай" ++ np.s ! Nom ++ vp.s ! R.Pres ! R.Pos ! np.a} ;
SelfAdvVP vp = addAdvVP vp "сам" ;
SelfAdVVP vp = addAdVVP "сам" vp ;
SelfNP np = {s = \\c => np.s ! c ++ "сам"; a = np.a} ;
}
+4 -2
View File
@@ -1,10 +1,12 @@
--# -path=.:../abstract
concrete LangBel of Lang =
GrammarBel,
LexiconBel
LexiconBel,
ConstructionBel
,DocumentationBel --# notpresent
** {
flags startcat = Phr ;
}
}
File diff suppressed because it is too large Load Diff
+19
View File
@@ -0,0 +1,19 @@
concrete NamesBel of Names = CatBel ** open ResBel, ParadigmsBel in {
lin
GivenName gn = mkSimpleNP gn.s gn.g Sg P3 ;
MaleSurname sn = mkSimpleNP sn.s Masc Sg P3 ;
FemaleSurname sn = mkSimpleNP sn.s Fem Sg P3 ;
PlSurname sn = mkSimpleNP sn.s Masc Pl P3 ;
FullName gn sn = mkSimpleNP (gn.s ++ sn.s) gn.g Sg P3 ;
UseLN ln = {s = ln.s; a = {g=ln.g; n=ln.n; p=P3}} ;
PlainLN ln = {s = ln.s; a = {g=ln.g; n=ln.n; p=P3}} ;
InLN ln = {s = "у" ++ ln.s ! Loc} ;
AdjLN ap ln = {
s = \\c => ap.s ! c ! genNum ln.g ln.n ++ ln.s ! c ;
g = ln.g ;
n = ln.n
} ;
}
+123 -1
View File
@@ -1,4 +1,126 @@
concrete NounBel of Noun = CatBel ** {
concrete NounBel of Noun = CatBel ** open ResBel, Prelude in {
lin
UseN n = n ;
DetCN det cn = {
s = \\c => det.s ! c ! cn.g ++ cn.s ! c ! det.n ;
a = {g=cn.g; n=det.n; p=P3}
} ;
UsePN pn = {
s = pn.s ;
a = {g=pn.g; n=pn.n; p=P3}
} ;
UsePron p = p ;
PredetNP pred np = {
s = \\c => pred.s ! c ! np.a.g ! np.a.n ++ np.s ! c ;
a = np.a
} ;
PPartNP np v = {
s = \\c => np.s ! c ++ v.participle ! np.a.g ! np.a.n ;
a = np.a
} ;
AdvNP np adv = {
s = \\c => np.s ! c ++ adv.s ;
a = np.a
} ;
ExtAdvNP np adv = {
s = \\c => np.s ! c ++ adv.s ;
a = np.a
} ;
RelNP np rs = {
s = \\c => np.s ! c ++ rs.s ;
a = np.a
} ;
DetNP det = {
s = \\c => det.s ! c ! Masc ;
a = {g=Masc; n=det.n; p=P3}
} ;
DetQuant q n = {
s = \\c,g => q.s ! c ! g ! n.n ++ n.s ! c ! g ;
n = n.n
} ;
DetQuantOrd q n o = {
s = \\c,g => q.s ! c ! g ! n.n ++ n.s ! c ! g ++ o.s ! c ! genNum g n.n ;
n = n.n
} ;
NumSg = {s = \\_,_ => []; n = Sg} ;
NumPl = {s = \\_,_ => []; n = Pl} ;
NumCard card = {s = \\_,_ => card.s; n = card.n} ;
NumDigits digits = {s = digits.s; n = Pl} ;
NumDecimal dec = {s = dec.s; n = Pl} ;
NumNumeral numeral = {s = numeral.s; n = Pl} ;
AdNum adn card = {s = adn.s ++ card.s; n = card.n} ;
OrdDigits d = adjFromStr d.s ;
OrdNumeral n = adjFromStr n.s ;
OrdSuperl a = {s = \\c,gn => "най" ++ a.s ! c ! gn} ;
OrdNumeralSuperl n a = {s = \\c,gn => n.s ++ a.s ! c ! gn} ;
IndefArt = {s = \\_,_,_ => []} ;
DefArt = {s = \\_,_,_ => []} ;
MassNP cn = {
s = \\c => cn.s ! c ! Sg ;
a = {g=cn.g; n=Sg; p=P3}
} ;
PossPron p = {s = \\_,_,_ => p.s ! Gen} ;
ComplN2 n np = {
s = \\c,num => n.s ! c ! num ++ prepNP n.c2 np ;
voc = n.voc ;
g = n.g
} ;
ComplN3 n np = n ** {c2 = n.c3} ;
UseN2 n = n ;
Use2N3 n = n ** {c2 = n.c2} ;
Use3N3 n = n ** {c2 = n.c3} ;
AdjCN ap cn = {
s = \\c,num => ap.s ! c ! genNum cn.g num ++ cn.s ! c ! num ;
voc = cn.voc ;
g = cn.g
} ;
RelCN cn rs = {
s = \\c,num => cn.s ! c ! num ++ rs.s ;
voc = cn.voc ;
g = cn.g
} ;
AdvCN cn adv = {
s = \\c,num => cn.s ! c ! num ++ adv.s ;
voc = cn.voc ;
g = cn.g
} ;
SentCN cn sc = {
s = \\c,num => cn.s ! c ! num ++ sc.s ;
voc = cn.voc ;
g = cn.g
} ;
ApposCN cn np = {
s = \\c,num => cn.s ! c ! num ++ np.s ! Nom ;
voc = cn.voc ;
g = cn.g
} ;
PossNP cn np = {
s = \\c,num => cn.s ! c ! num ++ np.s ! Gen ;
voc = cn.voc ;
g = cn.g
} ;
PartNP cn np = {
s = \\c,num => cn.s ! c ! num ++ np.s ! Gen ;
voc = cn.voc ;
g = cn.g
} ;
CountNP det np = {
s = \\c => det.s ! c ! Masc ++ "з" ++ np.s ! Gen ;
a = {g=Masc; n=det.n; p=P3}
} ;
AdjDAP dap ap = {
s = \\c,g => dap.s ! c ! g ++ ap.s ! c ! genNum g dap.n ;
n = dap.n
} ;
DetDAP det = det ;
QuantityNP dec mu = mkSimpleNP (dec.s ++ mu.s) Neuter Sg P3 ;
}
+65
View File
@@ -0,0 +1,65 @@
concrete NumeralBel of Numeral = CatBel ** {
lincat
Digit, Sub10, Sub100, Sub1000, Sub1000000, Sub1000000000, Sub1000000000000 = {s : Str} ;
Dig = {s : Str} ;
lin
num n = n ;
n2 = {s = "2"} ;
n3 = {s = "3"} ;
n4 = {s = "4"} ;
n5 = {s = "5"} ;
n6 = {s = "6"} ;
n7 = {s = "7"} ;
n8 = {s = "8"} ;
n9 = {s = "9"} ;
pot01 = {s = "1"} ;
pot0 d = d ;
pot0as1 n = n ;
pot110 = {s = "10"} ;
pot111 = {s = "11"} ;
pot1to19 d = {s = "1" ++ d.s} ;
pot1 d = {s = d.s ++ "0"} ;
pot1plus d n = {s = d.s ++ n.s} ;
pot1as2 n = n ;
pot21 = {s = "100"} ;
pot2 n = {s = n.s ++ "00"} ;
pot2plus n m = {s = n.s ++ "00" ++ m.s} ;
pot2as3 n = n ;
pot31 = {s = "1000"} ;
pot3 n = {s = n.s ++ "000"} ;
pot3plus n m = {s = n.s ++ "000" ++ m.s} ;
pot3as4 n = n ;
pot3decimal d = {s = d.s ++ "тысяч"} ;
pot41 = {s = "1000000"} ;
pot4 n = {s = n.s ++ "000000"} ;
pot4plus n m = {s = n.s ++ "000000" ++ m.s} ;
pot4as5 n = n ;
pot4decimal d = {s = d.s ++ "мільёна"} ;
pot51 = {s = "1000000000"} ;
pot5 n = {s = n.s ++ "000000000"} ;
pot5plus n m = {s = n.s ++ "000000000" ++ m.s} ;
pot5decimal d = {s = d.s ++ "мільярда"} ;
IDig d = d ;
IIDig d ds = {s = d.s ++ ds.s} ;
D_0 = {s = "0"} ;
D_1 = {s = "1"} ;
D_2 = {s = "2"} ;
D_3 = {s = "3"} ;
D_4 = {s = "4"} ;
D_5 = {s = "5"} ;
D_6 = {s = "6"} ;
D_7 = {s = "7"} ;
D_8 = {s = "8"} ;
D_9 = {s = "9"} ;
PosDecimal d = d ;
NegDecimal d = {s = "-" ++ d.s} ;
IFrac d dig = {s = d.s ++ "." ++ dig.s} ;
}
+71 -12
View File
@@ -636,6 +636,42 @@ oper
_ => regN form1
} ;
compoundN = overload {
compoundN : A -> N -> N = \a,n -> lin N {
s = \\c,num => a.s ! c ! genNum n.g num ++ n.s ! c ! num ;
voc = a.s ! Nom ! genNum n.g Sg ++ n.voc ;
g = n.g
} ;
compoundN : N -> A -> N = \n,a -> lin N {
s = \\c,num => n.s ! c ! num ++ a.s ! c ! genNum n.g num ;
voc = n.voc ++ a.s ! Nom ! genNum n.g Sg ;
g = n.g
} ;
compoundN : N -> Str -> N = \n,adv -> lin N {
s = \\c,num => n.s ! c ! num ++ adv ;
voc = n.voc ++ adv ;
g = n.g
} ;
compoundN : Str -> N -> N = \adv,n -> lin N {
s = \\c,num => adv ++ n.s ! c ! num ;
voc = adv ++ n.voc ;
g = n.g
}
} ;
mkPron : (_,_,_,_,_,_ : Str) -> Gender -> Number -> Person -> Pron =
\nom,acc,dat,gen,loc,instr,g,n,p -> lin Pron {
s = table {
Nom => nom ;
Acc => acc ;
Dat => dat ;
Gen => gen ;
Loc => loc ;
Instr => instr
} ;
a = {g=g; n = n; p = p}
} ;
regV : Str -> V -- infinitive
= \form -> case form of {
_ + "агчы" => mkV021 form;
@@ -717,6 +753,16 @@ oper
_ => regV form1
} ;
compoundV : V -> Str -> V = \v,adv -> lin V {
active = \\a => {past=(v.active ! a).past ++ adv ;
pres=\\p,num=>(v.active ! a).pres ! p ! num ++ adv
} ;
imperative = \\num => v.imperative ! num ++ adv ;
infinitive = v.infinitive ++ adv ;
participle = \\g,num => v.participle ! g ! num ++ adv ;
passive = \\a,t => v.passive ! a ! t ++ adv
} ;
regA : Str -> A -- s;Nom;('GSg', Masc)
= \form -> case form of {
_ + "які" => mkA006 form;
@@ -819,24 +865,37 @@ oper
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} ;
nominative : Case = Nom ;
accusative : Case = Acc ;
dative : Case = Dat ;
genitive : Case = Gen ;
locative : Case = Loc ;
instrumental : Case = Instr ;
mkPrep = overload {
mkPrep : Str -> Prep = \s -> lin Prep {s=s; c=Acc} ;
mkPrep : Case -> Prep = \c -> lin Prep {s=[]; c=c} ;
mkPrep : Str -> Case -> Prep = \s,c -> lin Prep {s=s; c=c}
} ;
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} ;
mkIP : Str -> IP = \s -> lin IP (mkSimpleNP s Masc Sg P3) ;
mkIQuant : Str -> IQuant = \s -> lin IQuant {s=\\_,_,_ => s} ;
mkIDet : Str -> IDet = \s -> lin IDet {s=\\_,_ => s; n=Sg} ;
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} ;
mkQuant : Str -> Quant = \s -> lin Quant {s=\\_,_,_ => s} ;
adjQuant : A -> Quant = \a -> lin Quant {s=\\c,g,n => a.s ! c ! genNum g n} ;
mkPredet : Str -> Predet = \s -> lin Predet {s=\\_,_,_ => s} ;
mkDet : Str -> Det = \s -> lin Det {s=\\_,_ => s; n=Sg} ;
mkCard : Str -> Card = \s -> lin Card {s=s; n=Pl} ;
mkACard : Str -> ACard = \s -> lin ACard {s=s; n=Pl} ;
mkConj : Str -> Conj = \s -> lin Conj {s=s; n=Pl} ;
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} ;
mkLN : Str -> LN = \s -> lin LN {s=caseTable s; g=Neuter; n=Sg} ;
mkGN : Str -> GN = \s -> lin GN {s=s; g=Masc} ;
mkSN : Str -> SN = \s -> lin SN {s=s} ;
mkPN : Str -> PN = \s -> lin PN {s=s} ;
mkPN : Str -> PN = \s -> lin PN {s=caseTable s; g=Masc; n=Sg} ;
}
+15 -1
View File
@@ -1,11 +1,25 @@
concrete PhraseBel of Phrase = CatBel ** {
concrete PhraseBel of Phrase = CatBel ** open ResBel in {
lin
PhrUtt pconj utt voc = {s = pconj.s ++ utt.s ++ voc.s} ;
UttS s = s ;
UttQS qs = qs ;
UttImpSg pol imp = {s = pol.s ++ imp.s ! pol.p ! Sg} ;
UttImpPl pol imp = {s = pol.s ++ imp.s ! pol.p ! Pl} ;
UttImpPol pol imp = {s = pol.s ++ imp.s ! pol.p ! Pl} ;
UttIP ip = {s = ip.s ! Nom} ;
UttIAdv iadv = iadv ;
UttNP np = {s = np.s ! Nom} ;
UttAdv adv = adv ;
UttVP vp = {s = vp.inf} ;
UttCN cn = {s = cn.s ! Nom ! Sg} ;
UttCard card = {s = card.s} ;
UttAP ap = {s = ap.s ! Nom ! GSg Masc} ;
UttInterj i = i ;
NoPConj = {s = []} ;
PConjConj conj = {s = conj.s} ;
NoVoc = {s = []} ;
VocNP np = {s = np.s ! Nom} ;
}
+50
View File
@@ -0,0 +1,50 @@
concrete QuestionBel of Question = CatBel ** open ResBel, (R = ParamX) in {
lincat
QVP = {s : Str} ;
lin
QuestCl cl = cl ;
QuestVP ip vp = {
s = \\t,p => ip.s ! Nom ++ vp.s ! t ! p ! ip.a
} ;
QuestSlash ip cl = {
s = \\t,p => cl.c.s ++ ip.s ! cl.c.c ++ cl.s ! t ! p
} ;
QuestIAdv iadv cl = {
s = \\t,p => iadv.s ++ cl.s ! t ! p
} ;
QuestIComp icomp np = {
s = \\t,p => icomp.s ++ np.s ! Nom
} ;
IdetCN idet cn = {
s = \\c => idet.s ! c ! cn.g ++ cn.s ! c ! idet.n ;
a = {g=cn.g; n=idet.n; p=P3}
} ;
IdetIP idet = {
s = \\c => idet.s ! c ! Masc ;
a = {g=Masc; n=idet.n; p=P3}
} ;
AdvIP ip adv = {
s = \\c => ip.s ! c ++ adv.s ;
a = ip.a
} ;
IdetQuant iquant num = {
s = \\c,g => iquant.s ! c ! g ! num.n ++ num.s ! c ! g ;
n = num.n
} ;
PrepIP prep ip = {s = prepNP prep ip} ;
AdvIAdv iadv adv = {s = iadv.s ++ adv.s} ;
CompIAdv iadv = iadv ;
CompIP ip = {s = ip.s ! Nom} ;
ComplSlashIP vp ip = {s = vp.s ! R.Pres ! R.Pos ! defaultAgr ++ vp.c.s ++ ip.s ! vp.c.c ++ vp.post} ;
AdvQVP vp iadv = {s = vp.s ! R.Pres ! R.Pos ! defaultAgr ++ iadv.s} ;
AddAdvQVP qvp iadv = {s = qvp.s ++ iadv.s} ;
QuestQVP ip qvp = {
s = \\_,_ => ip.s ! Nom ++ qvp.s
} ;
}
+11
View File
@@ -0,0 +1,11 @@
concrete RelativeBel of Relative = CatBel ** open ResBel in {
lin
RelCl cl = {s = \\t,p => "што" ++ cl.s ! t ! p} ;
RelVP rp vp = {s = \\t,p => rp.s ++ vp.s ! t ! p ! defaultAgr} ;
RelSlash rp cl = {s = \\t,p => rp.s ++ cl.s ! t ! p} ;
IdRP = {s = "які"} ;
FunRP prep np rp = {s = prepNP prep np ++ rp.s} ;
}
+133 -10
View File
@@ -1,4 +1,4 @@
resource ResBel = {
resource ResBel = open (R = ParamX), Prelude in {
param Case = Nom | Acc | Dat | Gen | Loc | Instr ;
param Number = Sg | Pl ;
@@ -40,12 +40,12 @@ oper mkNoun : (_,_,_,_,_,_,_,_,_,_,_,_,_ : Str) -> Gender -> Noun =
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 =
oper Verb = {active: Aspect => {past: Str; pres: Person => Number => Str}; imperative: Number => Str; infinitive: Str; participle: Gender => Number => Str; passive: Aspect => Tense => Str} ; -- 703
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 ->
{ active = table {
Imperf => { Past = f1 ;
Pres = table {
Imperf => { past = f1 ;
pres = table {
P1 => table {
Sg => f2 ;
Pl => f3
@@ -60,8 +60,8 @@ oper mkV : (_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_ : Str) -> V =
}
}
} ;
Perf => { Past = f8 ;
Pres = table {
Perf => { past = f8 ;
pres = table {
P1 => table {
Sg => f9 ;
Pl => f10
@@ -110,8 +110,14 @@ oper mkV : (_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_ : Str) -> V =
param GenNum = GSg Gender | GPl ;
oper A = {s: Case => GenNum => Str} ; -- 704
oper mkA : (_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_ : Str) -> A =
oper genNum : Gender -> Number -> GenNum = \g,n ->
case n of {
Sg => GSg g ;
Pl => GPl
} ;
oper Adj = {s: Case => GenNum => Str} ; -- 704
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 {
Nom => table {
@@ -158,6 +164,123 @@ oper Compl = {s : Str; c : Case} ;
oper noPrep : Compl = {s=""; c=Acc} ;
oper CommonNoun = Noun ;
oper AdjPhrase = A ;
oper AdjPhrase = Adj ;
oper Agr = {g : Gender ; n : Number ; p : Person} ;
oper defaultAgr : Agr = {g=Masc; n=Sg; p=P3} ;
oper NPhrase : Type = {s : Case => Str; a : Agr} ;
oper mkNPhrase : (Case => Str) -> Agr -> NPhrase =
\s,a -> {s = s; a = a} ;
oper caseTable : Str -> Case => Str =
\s -> table {Nom => s; Acc => s; Dat => s; Gen => s; Loc => s; Instr => s} ;
oper mkSimpleNP : Str -> Gender -> Number -> Person -> NPhrase =
\s,g,n,p -> mkNPhrase (caseTable s) {g=g; n=n; p=p} ;
oper nounFromStr : Str -> Gender -> Noun =
\s,g -> {
s = \\_,_ => s ;
voc = s ;
g = g
} ;
oper adjFromStr : Str -> Adj =
\s -> {s = \\_,_ => s} ;
oper prepNP : Compl -> NPhrase -> Str =
\prep,np -> prep.s ++ np.s ! prep.c ;
oper neg : R.Polarity -> Str =
\p -> case p of {
R.Pos => [] ;
R.Neg => "не"
} ;
oper futureBe : Agr -> Str =
\a -> case <a.p,a.n> of {
<P1,Sg> => "буду" ;
<P2,Sg> => "будзеш" ;
<P3,Sg> => "будзе" ;
<P1,Pl> => "будзем" ;
<P2,Pl> => "будзеце" ;
<P3,Pl> => "будуць"
} ;
oper pastBe : Agr -> Str =
\a -> case <a.g,a.n> of {
<Masc,Sg> => "быў" ;
<Fem,Sg> => "была" ;
<Neuter,Sg> => "было" ;
<_,Pl> => "былі"
} ;
oper copula : R.Tense -> R.Polarity -> Agr -> Str =
\t,p,a -> case t of {
R.Pres => neg p ;
R.Past => neg p ++ pastBe a ;
R.Fut => neg p ++ futureBe a ;
R.Cond => neg p ++ pastBe a ++ "бы"
} ;
oper finiteVerb : Verb -> R.Tense -> R.Polarity -> Agr -> Str =
\v,t,p,a -> case t of {
R.Pres => neg p ++ (v.active ! Imperf).pres ! a.p ! a.n ;
R.Past => neg p ++ v.participle ! a.g ! a.n ;
R.Fut => neg p ++ futureBe a ++ v.infinitive ;
R.Cond => neg p ++ v.participle ! a.g ! a.n ++ "бы"
} ;
oper VPhrase : Type = {
s : R.Tense => R.Polarity => Agr => Str ;
inf : Str ;
imp : R.Polarity => Number => Str
} ;
oper mkVPhrase : Verb -> VPhrase =
\v -> {
s = \\t,p,a => finiteVerb v t p a ;
inf = v.infinitive ;
imp = \\p,n => neg p ++ v.imperative ! n
} ;
oper VSlash : Type = {
s : R.Tense => R.Polarity => Agr => Str ;
inf : Str ;
c : Compl ;
imp : R.Polarity => Number => Str ;
post : Str
} ;
oper mkVSlash : Verb -> Compl -> VSlash =
\v,c -> {
s = \\t,p,a => finiteVerb v t p a ;
inf = v.infinitive ;
c = c ;
imp = \\p,n => neg p ++ v.imperative ! n ;
post = []
} ;
oper addAdvVP : VPhrase -> Str -> VPhrase =
\vp,adv -> {
s = \\t,p,a => vp.s ! t ! p ! a ++ adv ;
inf = vp.inf ++ adv ;
imp = \\p,n => vp.imp ! p ! n ++ adv
} ;
oper addAdVVP : Str -> VPhrase -> VPhrase =
\adv,vp -> {
s = \\t,p,a => adv ++ vp.s ! t ! p ! a ;
inf = adv ++ vp.inf ;
imp = \\p,n => adv ++ vp.imp ! p ! n
} ;
oper addAdvSlash : VSlash -> Str -> VSlash =
\vp,adv -> {
s = \\t,p,a => vp.s ! t ! p ! a ;
inf = vp.inf ++ adv ;
c = vp.c ;
imp = \\p,n => vp.imp ! p ! n ;
post = vp.post ++ adv
} ;
}
+45
View File
@@ -0,0 +1,45 @@
concrete SentenceBel of Sentence = CatBel ** open ResBel, (R = ParamX), Prelude in {
lin
PredVP np vp = {
s = \\t,p => np.s ! Nom ++ vp.s ! t ! p ! np.a
} ;
PredSCVP sc vp = {
s = \\t,p => sc.s ++ vp.s ! t ! p ! defaultAgr
} ;
SlashVP np vp = {
s = \\t,p => np.s ! Nom ++ vp.s ! t ! p ! np.a ++ vp.post ;
c = vp.c
} ;
AdvSlash cl adv = {
s = \\t,p => cl.s ! t ! p ++ adv.s ;
c = cl.c
} ;
SlashPrep cl prep = {
s = \\t,p => cl.s ! t ! p ++ prep.s ;
c = prep
} ;
SlashVS np vs ss = {
s = \\t,p => np.s ! Nom ++ finiteVerb vs t p np.a ++ ss.s ;
c = ss.c
} ;
ImpVP vp = {s = \\p,n => vp.imp ! p ! n} ;
AdvImp adv imp = {s = \\p,n => adv.s ++ imp.s ! p ! n} ;
EmbedS s = {s = "што" ++ s.s} ;
EmbedQS qs = {s = qs.s} ;
EmbedVP vp = {s = vp.inf} ;
UseCl temp pol cl = {s = temp.s ++ pol.s ++ cl.s ! temp.t ! pol.p} ;
UseQCl temp pol cl = {s = temp.s ++ pol.s ++ cl.s ! temp.t ! pol.p} ;
UseRCl temp pol cl = {s = cl.s ! temp.t ! pol.p} ;
UseSlash temp pol cl = {s = cl.s ! temp.t ! pol.p; c = cl.c} ;
AdvS adv s = {s = adv.s ++ s.s} ;
ExtAdvS adv s = {s = adv.s ++ s.s} ;
SSubjS s1 subj s2 = {s = s1.s ++ subj.s ++ s2.s} ;
RelS s rs = {s = s.s ++ rs.s} ;
}
+110
View File
@@ -0,0 +1,110 @@
concrete StructuralBel of Structural = CatBel ** open ResBel, ParadigmsBel in {
lin
above_Prep = mkPrep "над" instrumental ;
after_Prep = mkPrep "пасля" genitive ;
all_Predet = mkPredet "усе" ;
almost_AdA = mkAdA "амаль" ;
almost_AdN = mkAdN "амаль" ;
although_Subj = mkSubj "хоць" ;
always_AdV = mkAdV "заўсёды" ;
and_Conj = mkConj "і" ;
because_Subj = mkSubj "бо" ;
before_Prep = mkPrep "перад" instrumental ;
behind_Prep = mkPrep "за" instrumental ;
between_Prep = mkPrep "паміж" instrumental ;
both7and_DConj = mkConj "і" ;
but_PConj = mkPConj "але" ;
by8agent_Prep = mkPrep "кім" instrumental ;
by8means_Prep = mkPrep "праз" accusative ;
can8know_VV = mkVV (mkV021 "магчы") ;
can_VV = mkVV (mkV021 "магчы") ;
during_Prep = mkPrep "падчас" genitive ;
either7or_DConj = mkConj "або" ;
every_Det = {s = \\_,_ => "кожны"; n = Sg} ;
everybody_NP = mkSimpleNP "усе" Masc Pl P3 ;
everything_NP = mkSimpleNP "усё" Neuter Sg P3 ;
everywhere_Adv = mkAdv "усюды" ;
few_Det = {s = \\_,_ => "некалькі"; n = Pl} ;
for_Prep = mkPrep "для" genitive ;
from_Prep = mkPrep "ад" genitive ;
i_Pron = mkPron "я" "мяне" "мне" "мяне" "мне" "мной" Masc Sg P1 ;
youSg_Pron = mkPron "ты" "цябе" "табе" "цябе" "табе" "табой" Masc Sg P2 ;
he_Pron = mkPron "ён" "яго" "яму" "яго" "ім" "ім" Masc Sg P3 ;
she_Pron = mkPron "яна" "яе" "ёй" "яе" "ёй" "ёю" Fem Sg P3 ;
it_Pron = mkPron "яно" "яго" "яму" "яго" "ім" "ім" Neuter Sg P3 ;
we_Pron = mkPron "мы" "нас" "нам" "нас" "нас" "намі" Masc Pl P1 ;
youPl_Pron = mkPron "вы" "вас" "вам" "вас" "вас" "вамі" Masc Pl P2 ;
youPol_Pron = mkPron "вы" "вас" "вам" "вас" "вас" "вамі" Masc Pl P2 ;
they_Pron = mkPron "яны" "іх" "ім" "іх" "іх" "імі" Masc Pl P3 ;
here_Adv = mkAdv "тут" ;
here7to_Adv = mkAdv "сюды" ;
here7from_Adv = mkAdv "адсюль" ;
how_IAdv = mkIAdv "як" ;
how8many_IDet = mkIDet "колькі" ;
how8much_IAdv = mkIAdv "колькі" ;
if_Subj = mkSubj "калі" ;
in8front_Prep = mkPrep "перад" instrumental ;
in_Prep = mkPrep "у" locative ;
less_CAdv = {s = "менш"; p = "чым"} ;
many_Det = {s = \\_,_ => "шмат"; n = Pl} ;
more_CAdv = {s = "больш"; p = "чым"} ;
most_Predet = mkPredet "большасць" ;
much_Det = {s = \\_,_ => "шмат"; n = Sg} ;
must_VV = mkVV (mkV "мусіць") ;
no_Utt = {s = "не"} ;
on_Prep = mkPrep "на" locative ;
only_Predet = mkPredet "толькі" ;
or_Conj = mkConj "або" ;
otherwise_PConj = mkPConj "інакш" ;
part_Prep = mkPrep "з" genitive ;
please_Voc = mkVoc "калі ласка" ;
possess_Prep = mkPrep "у" genitive ;
quite_Adv = mkAdA "зусім" ;
so_AdA = mkAdA "так" ;
someSg_Det = {s = \\_,_ => "нейкі"; n = Sg} ;
somePl_Det = {s = \\_,_ => "некаторыя"; n = Pl} ;
somebody_NP = mkSimpleNP "нехта" Masc Sg P3 ;
something_NP = mkSimpleNP "нешта" Neuter Sg P3 ;
somewhere_Adv = mkAdv "недзе" ;
that_Quant = mkQuant "той" ;
that_Subj = mkSubj "што" ;
there_Adv = mkAdv "там" ;
there7to_Adv = mkAdv "туды" ;
there7from_Adv = mkAdv "адтуль" ;
therefore_PConj = mkPConj "таму" ;
this_Quant = mkQuant "гэты" ;
through_Prep = mkPrep "праз" accusative ;
to_Prep = mkPrep "да" genitive ;
too_AdA = mkAdA "занадта" ;
under_Prep = mkPrep "пад" instrumental ;
very_AdA = mkAdA "вельмі" ;
want_VV = mkVV (mkV009 "хацець") ;
whatPl_IP = mkSimpleNP "што" Neuter Pl P3 ;
whatSg_IP = mkSimpleNP "што" Neuter Sg P3 ;
when_IAdv = mkIAdv "калі" ;
when_Subj = mkSubj "калі" ;
where_IAdv = mkIAdv "дзе" ;
which_IQuant = mkIQuant "які" ;
whoPl_IP = mkSimpleNP "хто" Masc Pl P3 ;
whoSg_IP = mkSimpleNP "хто" Masc Sg P3 ;
why_IAdv = mkIAdv "чаму" ;
with_Prep = mkPrep "з" instrumental ;
without_Prep = mkPrep "без" genitive ;
yes_Utt = {s = "так"} ;
no_Quant = mkQuant "ніякі" ;
not_Predet = mkPredet "не" ;
if_then_Conj = mkConj "калі" ;
at_least_AdN = mkAdN "прынамсі" ;
at_most_AdN = mkAdN "найбольш" ;
nobody_NP = mkSimpleNP "ніхто" Masc Sg P3 ;
nothing_NP = mkSimpleNP "нішто" Neuter Sg P3 ;
except_Prep = mkPrep "акрамя" genitive ;
as_CAdv = {s = "так"; p = "як"} ;
have_V2 = mkV2 (mkV071 "мець") ;
language_title_Utt = {s = "беларуская"} ;
}
+138
View File
@@ -0,0 +1,138 @@
concrete VerbBel of Verb = CatBel ** open ResBel, (R = ParamX), Prelude in {
lin
UseV v = mkVPhrase v ;
ComplVV vv vp = {
s = \\t,p,a => finiteVerb vv t p a ++ vp.inf ;
inf = vv.infinitive ++ vp.inf ;
imp = \\p,n => neg p ++ vv.imperative ! n ++ vp.inf
} ;
ComplVS vs s = {
s = \\t,p,a => finiteVerb vs t p a ++ "што" ++ s.s ;
inf = vs.infinitive ++ "што" ++ s.s ;
imp = \\p,n => neg p ++ vs.imperative ! n ++ "што" ++ s.s
} ;
ComplVQ vq qs = {
s = \\t,p,a => finiteVerb vq t p a ++ qs.s ;
inf = vq.infinitive ++ qs.s ;
imp = \\p,n => neg p ++ vq.imperative ! n ++ qs.s
} ;
ComplVA va ap = {
s = \\t,p,a => finiteVerb va t p a ++ ap.s ! Nom ! genNum a.g a.n ;
inf = va.infinitive ++ ap.s ! Nom ! GSg Masc ;
imp = \\p,n => neg p ++ va.imperative ! n ++ ap.s ! Nom ! GPl
} ;
SlashV2a v = mkVSlash v v.c2 ;
Slash2V3 v np = {
s = \\t,p,a => finiteVerb v t p a ++ prepNP v.c2 np ;
inf = v.infinitive ++ prepNP v.c2 np ;
c = v.c3 ;
imp = \\p,n => neg p ++ v.imperative ! n ++ prepNP v.c2 np ;
post = []
} ;
Slash3V3 v np = {
s = \\t,p,a => finiteVerb v t p a ;
inf = v.infinitive ++ prepNP v.c3 np ;
c = v.c2 ;
imp = \\p,n => neg p ++ v.imperative ! n ;
post = prepNP v.c3 np
} ;
SlashV2V v vp = {
s = \\t,p,a => finiteVerb v t p a ;
inf = v.infinitive ++ vp.inf ;
c = v.c2 ;
imp = \\p,n => neg p ++ v.imperative ! n ;
post = vp.inf
} ;
SlashV2S v s = {
s = \\t,p,a => finiteVerb v t p a ;
inf = v.infinitive ++ "што" ++ s.s ;
c = v.c2 ;
imp = \\p,n => neg p ++ v.imperative ! n ;
post = "што" ++ s.s
} ;
SlashV2Q v qs = {
s = \\t,p,a => finiteVerb v t p a ;
inf = v.infinitive ++ qs.s ;
c = v.c2 ;
imp = \\p,n => neg p ++ v.imperative ! n ;
post = qs.s
} ;
SlashV2A v ap = {
s = \\t,p,a => finiteVerb v t p a ;
inf = v.infinitive ++ ap.s ! Nom ! GSg Masc ;
c = v.c2 ;
imp = \\p,n => neg p ++ v.imperative ! n ;
post = ap.s ! Nom ! GSg Masc
} ;
ComplSlash vp np = {
s = \\t,p,a => vp.s ! t ! p ! a ++ prepNP vp.c np ++ vp.post ;
inf = vp.inf ++ prepNP vp.c np ;
imp = \\p,n => vp.imp ! p ! n ++ prepNP vp.c np ++ vp.post
} ;
SlashVV vv vp = {
s = \\t,p,a => finiteVerb vv t p a ++ vp.s ! R.Pres ! R.Pos ! a ;
inf = vv.infinitive ++ vp.inf ;
c = vp.c ;
imp = \\p,n => neg p ++ vv.imperative ! n ++ vp.imp ! R.Pos ! n ;
post = vp.post
} ;
SlashV2VNP v np vp = {
s = \\t,p,a => finiteVerb v t p a ++ prepNP v.c2 np ++ vp.s ! R.Pres ! R.Pos ! a ;
inf = v.infinitive ++ prepNP v.c2 np ++ vp.inf ;
c = vp.c ;
imp = \\p,n => neg p ++ v.imperative ! n ++ prepNP v.c2 np ++ vp.imp ! R.Pos ! n ;
post = vp.post
} ;
ReflVP vp = {
s = \\t,p,a => vp.s ! t ! p ! a ++ "сябе" ++ vp.post ;
inf = vp.inf ++ "сябе" ;
imp = \\p,n => vp.imp ! p ! n ++ "сябе" ++ vp.post
} ;
UseComp comp = {
s = \\t,p,a => copula t p a ++ comp.s ! a ;
inf = "быць" ++ comp.s ! defaultAgr ;
imp = \\p,_ => neg p ++ "будзь" ++ comp.s ! defaultAgr
} ;
PassV2 v = {
s = \\t,p,a => copula t p a ++ v.participle ! a.g ! a.n ;
inf = "быць" ++ v.participle ! Masc ! Sg ;
imp = \\p,_ => neg p ++ "будзь" ++ v.participle ! Masc ! Sg
} ;
AdvVP vp adv = addAdvVP vp adv.s ;
ExtAdvVP vp adv = addAdvVP vp adv.s ;
AdVVP adv vp = addAdVVP adv.s vp ;
AdvVPSlash vp adv = addAdvSlash vp adv.s ;
AdVVPSlash adv vp = {
s = \\t,p,a => adv.s ++ vp.s ! t ! p ! a ;
inf = adv.s ++ vp.inf ;
c = vp.c ;
imp = \\p,n => adv.s ++ vp.imp ! p ! n ;
post = vp.post
} ;
VPSlashPrep vp prep = {
s = \\t,p,a => vp.s ! t ! p ! a ++ prep.s ;
inf = vp.inf ++ prep.s ;
c = prep ;
imp = \\p,n => vp.imp ! p ! n ++ prep.s ;
post = []
} ;
CompAP ap = {s = \\a => ap.s ! Nom ! genNum a.g a.n} ;
CompNP np = {s = \\_ => np.s ! Nom} ;
CompAdv adv = {s = \\_ => adv.s} ;
CompCN cn = {s = \\a => cn.s ! Nom ! a.n} ;
UseCopula = {
s = \\t,p,a => copula t p a ;
inf = "быць" ;
imp = \\p,_ => neg p ++ "будзь"
} ;
}
+1
View File
@@ -121,6 +121,7 @@ concrete NounBul of Noun = CatBul ** open ResBul, Prelude in {
NumNumeral numeral = {s = \\gspec => numeral.s ! NCard gspec; nn = case numeral.n of {Sg => NNum Sg; Pl => NCountable}} ;
OrdNumeral numeral = {s = \\aform => numeral.s ! NOrd aform} ;
OrdNumeralSuperl numeral a = {s = \\aform => numeral.s ! NOrd aform ++ "най" ++ hyphen ++ a.s ! indefAForm aform} ;
AdNum adn num = {s = \\gspec => adn.s ++ num.s ! gspec; nn = num.nn} ;
-3
View File
@@ -139,9 +139,6 @@ lin
SubjunctRelCN cn rs = RelCN cn rs ; -- no difference from indicative
lincat
X = {s : Str} ;
lin
UseComp_estar = UseComp ;
UseComp_ser = UseComp ;
+4
View File
@@ -6,4 +6,8 @@ lin
s = prep.s ++ np.prep ! prep.c
} ;
SubjS subj s = {
s = subj.s ++ s.s
} ;
}
+3 -2
View File
@@ -21,10 +21,11 @@ concrete CatCze of Cat =
RP = AdjForms ;
VP = {verb : VerbForms ; clit,compl : Agr => Str} ; ---- more fields probably needed
VPSlash = {verb : VerbForms ; clit,compl : Agr => Str ; c : ComplementCase} ; ----
VPSlash = {verb : VerbForms ; clit,compl : Agr => Str ; c : ComplementCase ; ind : Agr => Str} ; -- ind : incorporated indirect object, rendered after the object slot
V = ResCze.VerbForms ;
V2 = ResCze.VerbForms ** {c : ComplementCase} ;
VS,VQ = ResCze.VerbForms ;
V3 = ResCze.VerbForms ** {c,c2 : ComplementCase} ; -- c : direct object, c2 : indirect object
VS,VQ,VV = ResCze.VerbForms ;
A = ResCze.AdjForms ;
AP = ResCze.Adjective ** {isPost : Bool} ; -- {s : Gender => Number => Case => Str}
-1
View File
@@ -12,7 +12,6 @@ concrete ExtendCze of Extend = CatCze **
,SlashBareV2S
,PredIAdvVP
,PredAPVP
,ExistsNP
,ExistS
,ExistPluralCN
,ExistNPQS
+27
View File
@@ -1,5 +1,32 @@
concrete IdiomCze of Idiom = CatCze ** open Prelude, ResCze in {
lin
ImpP3 np vp = {
s = "nechť" ++ np.s ! Nom ++ vp.clit ! np.a ++
verbAgr vp.verb np.a True ++ vp.compl ! np.a
} ;
ImpersCl vp = let agr = Ag Neutr Sg P3 in {
subj = [] ;
clit = vp.clit ! agr ;
compl = vp.compl ! agr ;
verb = vp.verb ;
a = agr
} ;
GenericCl vp = let agr = Ag (Masc Anim) Pl P3 in {
subj = [] ;
clit = vp.clit ! agr ;
compl = vp.compl ! agr ;
verb = vp.verb ;
a = agr
} ;
ExistNP np = {
subj, clit = [] ;
compl = np.s ! Nom ;
verb = iii_kupovatVerbForms "existovat" ;
a = np.a
} ;
}
+2 -1
View File
@@ -1,10 +1,11 @@
--# -path=.:../abstract:../common:../api
concrete LangCze of Lang =
concrete LangCze of Lang =
GrammarCze,
LexiconCze
-- ,ConstructionCze
-- ,DocumentationCze --# notpresent
,MarkupCze - [stringMark]
** {
}
+27
View File
@@ -0,0 +1,27 @@
--# -path=.:../abstract:../common
concrete MarkupCze of Markup = CatCze, MarkHTMLX ** open ResCze in {
lin
MarkupCN m cn = cn ** {s = \\n,c => appMark m (cn.s ! n ! c)} ;
-- s, clit and prep are alternative surface forms, so each is marked;
-- but clit ! Nom is the pro-drop subject, empty for every pronoun,
-- and marking it up would leave the tags around nothing
MarkupNP m np = np ** {
s = \\c => appMark m (np.s ! c) ;
clit = \\c => case c of {
Nom => np.clit ! Nom ;
_ => appMark m (np.clit ! c)
} ;
prep = \\c => appMark m (np.prep ! c)
} ;
MarkupAP m ap = ap ** {s = \\g,n,c => appMark m (ap.s ! g ! n ! c)} ;
MarkupAdv m adv = {s = appMark m adv.s} ;
MarkupS m s = {s = appMark m s.s} ;
MarkupUtt m utt = {s = appMark m utt.s} ;
MarkupPhr m phr = {s = appMark m phr.s} ;
MarkupText m txt = {s = appMark m txt.s} ;
}
-4
View File
@@ -9,12 +9,10 @@ oper AdjOrd : Ord -> AP = notYet "AdjOrd" ;
oper AdnCAdv : CAdv -> AdN = notYet "AdnCAdv" ;
oper AdvIAdv : IAdv -> Adv -> IAdv = notYet "AdvIAdv" ;
oper AdvIP : IP -> Adv -> IP = notYet "AdvIP" ;
oper AdvS : Adv -> S -> S = notYet "AdvS" ;
oper AdvSlash : ClSlash -> Adv -> ClSlash = notYet "AdvSlash" ;
oper CAdvAP : CAdv -> AP -> NP -> AP = notYet "CAdvAP" ;
oper CleftAdv : Adv -> S -> Cl = notYet "CleftAdv" ;
oper CleftNP : NP -> RS -> Cl = notYet "CleftNP" ;
oper CompCN : CN -> Comp = notYet "CompCN" ;
oper CompIAdv : IAdv -> IComp = notYet "CompIAdv" ;
oper CompIP : IP -> IComp = notYet "CompIP" ;
oper ComparA : A -> NP -> AP = notYet "ComparA" ;
@@ -63,8 +61,6 @@ oper RelNP : NP -> RS -> NP = notYet "RelNP" ;
oper RelSlash : RP -> ClSlash -> RCl = notYet "RelSlash" ;
oper SentAP : AP -> SC -> AP = notYet "SentAP" ;
oper SentCN : CN -> SC -> CN = notYet "SentCN" ;
oper Slash2V3 : V3 -> NP -> VPSlash = notYet "Slash2V3" ;
oper Slash3V3 : V3 -> NP -> VPSlash = notYet "Slash3V3" ;
oper SlashPrep : Cl -> Prep -> ClSlash = notYet "SlashPrep" ;
oper SlashV2A : V2A -> AP -> VPSlash = notYet "SlashV2A" ;
oper SlashV2Q : V2Q -> QS -> VPSlash = notYet "SlashV2Q" ;
+7
View File
@@ -99,5 +99,12 @@ lin
NumDecimal ds = ds ** {s = \\_,_ => ds.s} ;
NumNumeral nu = nu ;
SentCN cn sc = cn ** {s = \\n,c => cn.s ! n ! c ++ sc.s} ;
PredetNP pred np = np ** {
s = \\c => pred.s ++ np.s ! c ;
clit = \\c => pred.s ++ np.clit ! c ;
prep = \\c => pred.s ++ np.prep ! c
} ;
}
+8
View File
@@ -122,6 +122,14 @@ oper
= \vf,c -> vf ** {c = c} ;
} ;
mkV3 = overload {
mkV3 : VerbForms -> VerbForms ** {c,c2 : ComplementCase}
= \vf -> vf ** {c = {s = [] ; c = Acc ; hasPrep = False} ;
c2 = {s = [] ; c = Dat ; hasPrep = False}} ;
mkV3 : VerbForms -> ComplementCase -> ComplementCase -> VerbForms ** {c,c2 : ComplementCase}
= \vf,c,c2 -> vf ** {c = c ; c2 = c2} ;
} ;
------------------------
-- Adverbs, prepositions, conjunctions, ...
+5
View File
@@ -6,6 +6,11 @@ lin
UttCN cn = {s = cn.s ! Sg ! Nom} ;
UttAP ap = {s = ap.s ! Masc Anim ! Sg ! Nom} ;
UttNP np = {s = np.s ! Nom} ;
UttVP vp = let agr = Ag Neutr Sg P3 in {s = vp.clit ! agr ++ vp.verb.inf ++ vp.compl ! agr} ;
UttImpSg pol imp = {s = pol.s ++ imp.s} ;
UttImpPl pol imp = {s = pol.s ++ imp.s} ;
UttImpPol pol imp = {s = pol.s ++ imp.s} ;
PhrUtt pconj utt voc = {s = pconj.s ++ utt.s ++ voc.s} ;
+2
View File
@@ -4,4 +4,6 @@ concrete QuestionCze of Question = CatCze **
lin
QuestCl cl = cl ; ----
QuestIAdv iadv cl = cl ** {clit = iadv.s ++ cl.clit} ;
}
+122 -19
View File
@@ -28,6 +28,11 @@ oper
softConsonant : pattern Str = #("ť"|"ď"|"j"|"ň"|"ř"|"š"|"c"|"č"|"ž") ;
neutralConsonant : pattern Str = #("b"|"f"|"l"|"m"|"p"|"s"|"v") ;
-- neutral consonants take the hard endings by default (hrad, pán), and so do
-- the foreign "z" and "x"; this is the class to test when choosing a paradigm
hardishConsonant : pattern Str =
#("d"|"t"|"g"|"h"|"k"|"n"|"r" | "b"|"f"|"l"|"m"|"p"|"s"|"v" | "z"|"x") ;
consonant : pattern Str =
#(
"d" | "t" | "g" | "h" | "k" | "n" | "r" |
@@ -139,22 +144,33 @@ oper
declensionNounForms : (nom,gen : Str) -> Gender -> NounForms
= \nom,gen,g ->
let decl : DeclensionType = case <g, nom, gen> of {
<Masc Anim, _ + #hardConsonant, _ + "a"> => declPAN ;
<Masc Anim, _ + "a" , _ + "a"> => declPREDSEDA ;
<Masc Inanim, _ + #hardConsonant, _ + "u"> => declHRAD ;
<Fem, _ + "a" , _ + "y"> => declZENA ;
<Neutr, _ + "o" , _ + "a"> => declMESTO ;
<Masc Anim, _ + #softConsonant, _ + "e"> => declMUZ ;
<Masc Anim, _ + "tel" , _ + "e"> => declMUZ ;
-- the oblique stem, for the paradigms that cannot derive it from the nominative
let stem : Str = Predef.tk 1 gen ;
decl : DeclensionType = case <g, nom, gen> of {
<Masc Anim, _ + "tel" , _ + "e"> => declMUZstem stem ;
<Masc Anim, _ + "ce" , _ + "e"> => declSOUDCE ;
<Masc Inanim, _ + #softConsonant, _ + "e"> => declSTROJ ;
<Masc Anim, _ + ("us"|"os") , _ + "a"> => declLATINUSA ;
<Masc Anim, _ + "a" , _ + "a"> => declPREDSEDA ;
<Masc Anim, _ + (#softConsonant|#hardishConsonant), _ + ("e"|"ě")> => declMUZstem stem ;
<Masc Anim, _ + #hardishConsonant, _ + "a"> => declPAN ;
<Masc Inanim, _ + ("us"|"os") , _ + "u"> => declLATINUS ;
<Masc Inanim, _ + "ý" , _ + "ého"> => declADJM ;
<Masc Inanim, _ + (#softConsonant|#hardishConsonant), _ + ("e"|"ě")> => declSTROJ ;
<Masc Inanim, _ + #hardishConsonant, _ + "u"> => declHRADstem stem ;
<Masc Inanim, _ + #hardishConsonant, _ + "a"> => declHRADAstem stem ;
<Fem, _ + "a" , _ + "y"> => declZENA ;
<Fem, _ + "á" , _ + "é"> => declADJF ;
<Fem, _ + ("e"|"ě") , _ + ("e"|"ě")> => declRUZE ;
<Fem, _ + #softConsonant, _ + "e"> => declPISEN ;
<Fem, _ + "ost" , _ + "i"> => declKOST ; --- also many other "st" 3.6.3
<Fem, _ + (#softConsonant|#hardishConsonant), _ + "i"> => declKOST ; --- also many other "st" 3.6.3
<Fem, _ + (#softConsonant|#hardishConsonant), _ + ("e"|"ě")> => declPISEN ;
<Neutr, _ + "um" , _ + "a"> => declLATINUM ;
<Neutr, _ + "ma" , _ + ("matu"|"mata")> => declGREEKMA ;
<Neutr, _ + "o" , _ + "a"> => declMESTO ;
<Neutr, _ + "e" , _+"ete"> => declKURE ;
<Neutr, _ + "e" , _ + "e"> => declMORE ;
<Neutr, _ + "í" , _ + "í"> => declSTAVENI ;
<Neutr, _ + ("e"|"ě") , _ + ("e"|"ě")> => declMORE ;
<Masc Inanim, _ + ("é"|"i"|"y"|"e"), _ + ("é"|"i"|"y"|"e")> => declINVAR (Masc Inanim) ;
<Neutr, _ + ("é"|"i"|"y") , _ + ("é"|"i"|"y")> => declINVAR Neutr ;
_ => (\s -> declSTROJ ("" + s)) -- Predef.error ("cannot infer declension type for" ++ nom ++ gen)
}
in decl nom ;
@@ -165,12 +181,14 @@ oper
= \s -> case s of {
_ + "ost" => declKOST s ;
_ + "tel" => declMUZ s ;
_ + #hardConsonant => declHRAD s ;
_ + "us" => declLATINUS s ;
_ + "um" => declLATINUM s ;
_ + #hardishConsonant => declHRAD s ;
_ + #softConsonant => declSTROJ s ;
_ + "a" => declZENA s ;
_ + "o" => declMESTO s ;
_ + "ce" => declSOUDCE s ;
_ + "e" => declMORE s ;
_ + ("e"|"ě") => declMORE s ;
_ + "í" => declSTAVENI s ;
_ => declSTROJ ("" + s) -- Predef.error ("cannot guess declension type for" ++ s)
} ;
@@ -216,9 +234,9 @@ oper
g = Masc Anim
} ;
declHRAD : DeclensionType = \hrad -> --- 3.5.2: sloc u/ě/e extra arg, sport-u, hrad-ě ; sgen u/a
let hrd = dropFleetingE hrad
in
-- the oblique stem is a separate argument, because it cannot always be
-- derived from the nominative: uzel-uzlu but člen-členu
declHRADstem : Str -> DeclensionType = \hrd,hrad ->
{
snom,sacc = hrad ;
sgen,sdat = hrd + "u" ; --- Berlín-a
@@ -233,6 +251,9 @@ oper
g = Masc Inanim
} ;
declHRAD : DeclensionType = \hrad -> --- 3.5.2: sloc u/ě/e extra arg, sport-u, hrad-ě ; sgen u/a
declHRADstem (dropFleetingE hrad) hrad ;
declZENA : DeclensionType = \zena -> --- 3.6.1 sge y/i ; pgen sometimes shortening
let zen = init zena
in
@@ -270,9 +291,91 @@ oper
g = Neutr
} ;
-- Latin masculines in -us: the ending is dropped outside the nominative
-- (algoritmus - algoritmu), otherwise they follow hrad
declLATINUS : DeclensionType = \algoritmus ->
let algoritm = Predef.tk 2 algoritmus
in declHRAD algoritm ** {
snom, sacc = algoritmus ;
svoc = algoritm + "e"
} ;
declLATINUSA : DeclensionType = \genius ->
declLATINUS genius ** {g = Masc Anim} ;
-- Latin neuters in -um: the ending is dropped outside the nominative
-- (kontinuum - kontinua), otherwise they follow město
declLATINUM : DeclensionType = \kompaktum ->
let kompakt = Predef.tk 2 kompaktum
in declMESTO (kompakt + "o") ** {
snom, sacc, svoc = kompaktum
} ;
-- Greek neuters in -ma, with the stem extended by -t- (schéma - schématu)
declGREEKMA : DeclensionType = \schema ->
let schemat = schema + "t"
in {
snom,sacc,svoc = schema ;
sgen,sdat,sloc = schemat + "u" ;
sins = schemat + "em" ;
pnom,pacc = schemat + "a" ;
pgen = schemat ;
pdat = schemat + "ům" ;
ploc = schemat + "ech" ;
pins = schemat + "y" ;
g = Neutr
} ;
-- the hrad type with genitive -a instead of -u (les - lesa, zákon - zákona)
declHRADAstem : Str -> DeclensionType = \les_,les ->
declHRADstem les_ les ** {sgen = les_ + "a"} ;
declHRADA : DeclensionType = \les ->
declHRADAstem (dropFleetingE les) les ;
-- nouns that are adjectives in form: proměnná - proměnné, nultý - nultého
declADJF : DeclensionType = \promenna ->
let a = mladyAdjForms (init promenna + "ý")
in {
snom,svoc = a.fsnom ;
sgen = a.fsgen ;
sdat,sloc = a.fsdat ;
sacc = a.fsacc ;
sins = a.fsins ;
pnom,pacc = a.fpnom ;
pgen,ploc = a.pgen ;
pdat = a.msins ;
pins = a.pins ;
g = Fem
} ;
declADJM : DeclensionType = \nulty ->
let a = mladyAdjForms nulty
in {
snom,sacc,svoc = a.msnom ;
sgen = a.msgen ;
sdat = a.msdat ;
sloc = a.msloc ;
sins = a.msins ;
pnom,pacc = a.fpnom ;
pgen,ploc = a.pgen ;
pdat = a.msins ;
pins = a.pins ;
g = Masc Inanim
} ;
-- indeclinable loans: bombé, tamari, software
declINVAR : Gender -> DeclensionType = \g,s -> {
snom,sgen,sdat,sacc,svoc,sloc,sins = s ;
pnom,pgen,pdat,pacc,ploc,pins = s ;
g = g
} ;
declMUZ : DeclensionType = \muz_ -> --- 3.5.3 : sdat,sloc ; pnom
let muz = dropFleetingE muz_
in
declMUZstem (dropFleetingE muz_) muz_ ;
declMUZstem : Str -> DeclensionType = \muz,muz_ ->
{
snom = muz_ ;
sgen,sacc = muz + "e" ; --- pacc
+20 -1
View File
@@ -28,5 +28,24 @@ lin
pol.s ++ verbAgr rcl.verb a pol.p ++
rcl.compl ! a ;
} ;
-- no imperative in VerbForms yet; the 1st person plural present is used
-- instead, which is the normal register in mathematical Czech
-- ("předpokládáme, že ..." = "we assume that ...")
ImpVP vp = let agr = Ag (Masc Anim) Pl P1 in
{s = vp.clit ! agr ++ verbAgr vp.verb agr True ++ vp.compl ! agr} ;
EmbedS s = {s = "že" ++ s.s} ;
EmbedQS qs = {s = qs.s} ;
EmbedVP vp = let agr = Ag Neutr Sg P3 in
{s = vp.clit ! agr ++ vp.verb.inf ++ vp.compl ! agr} ;
AdvS a s = {s = a.s ++ s.s} ;
ExtAdvS a s = {s = a.s ++ SOFT_BIND ++ "," ++ s.s} ;
SSubjS a subj b = {s = a.s ++ SOFT_BIND ++ "," ++ subj.s ++ b.s} ;
}
+31
View File
@@ -1,11 +1,42 @@
concrete StructuralCze of Structural = CatCze **
open ParadigmsCze, ResCze, Prelude in {
-- a singular determiner inflecting like an adjective, e.g. "každý", "nějaký"
oper
adjDet : AdjForms -> Determiner = \afs -> {
s = \\g,c => (adjFormsAdjective afs).s ! g ! Sg ! c ;
size = Num1
} ;
lin
all_Predet = {s = "všechny"} ;
and_Conj = mkConj "a" ;
both7and_DConj = {s1 = "jak" ; s2 = "tak"} ;
between_Prep = mkPrep "mezi" Ins ;
by8agent_Prep = mkPrep "od" Gen ; ---- TODO this means "from", there might be no good translation
by8means_Prep = mkPrep "pomocí" Gen ;
can_VV = {
inf = "moci" ;
pressg1 = "mohu" ;
pressg2 = "můžeš" ;
pressg3, negpressg3 = "může" ;
prespl1 = "můžeme" ;
prespl2 = "můžete" ;
prespl3 = "mohou" ;
pastpartsg = "mohl" ;
pastpartpl = "mohli" ;
} ;
either7or_DConj = {s1 = "buď" ; s2 = "nebo"} ;
every_Det = adjDet (mladyAdjForms "každý") ;
few_Det = invarNumeral "málo" ; -- CEG 6.8 --- TODO genitive mála
for_Prep = mkPrep "pro" accusative ;
if_Subj = {s = "jestliže"} ;
no_Quant = adjFormsAdjective (mladyAdjForms "žádný") ;
on_Prep = mkPrep "na" Loc ;
someSg_Det = adjDet (mladyAdjForms "nějaký") ;
that_Subj = {s = "že"} ;
under_Prep = mkPrep "pod" Ins ;
where_IAdv = {s = "kde"} ;
from_Prep = mkPrep (pre {"s"|"z" => "ze" ; _ => "z"}) Gen ; ---- consonant clusters
have_V2 = mkV2 haveVerbForms ;
in_Prep = mkPrep (pre {"v"|"m" => "ve" ; _ => "v"}) Loc ; ----
+41 -2
View File
@@ -3,9 +3,48 @@
concrete SymbolCze of Symbol = CatCze ** open Prelude, ResCze in {
lincat
Symb = {s : Str} ;
Symb, [Symb] = SS ;
lin
MkSymb s = s ;
SymbPN s = lin PN {s = \\_ => s.s ; g = Neutr} ;
BaseSymb = infixSS "a" ;
ConsSymb = infixSS bindComma ;
SymbPN s = symbolPN s.s ;
IntPN i = symbolPN i.s ;
FloatPN f = symbolPN f.s ;
-- unlike a bare symbol, a cardinal used as a name still declines
NumPN card = lin PN {s = \\c => card.s ! Neutr ! c ; g = Neutr} ;
-- the numeral is an invariable label: "úroveň pět", "na úrovni pět"
CNNumNP cn card = {
s,clit,prep = \\c => cn.s ! Sg ! c ++ card.s ! cn.g ! Nom ;
a = Ag cn.g Sg P3 ;
hasClit = False ;
} ;
CNIntNP cn i = {
s,clit,prep = \\c => cn.s ! Sg ! c ++ i.s ;
a = Ag cn.g Sg P3 ;
hasClit = False ;
} ;
-- as DetCN in NounCze, with the symbols in apposition
CNSymbNP det cn xs = {
s,clit,prep = \\c => det.s ! cn.g ! c ++ numSizeForm cn.s det.size c ++ xs.s ;
a = numSizeAgr cn.g det.size P3 ;
hasClit = False ;
} ;
SymbS sy = sy ;
SymbNum sy = {s = \\_,_ => sy.s ; size = Num5} ; -- "n čísel", like numerals from 5 up
SymbOrd sy = {s = glue sy.s "-tý"} ; ---- Ord is still an uninflected string
oper
symbolPN : Str -> PN
= \s -> lin PN {s = \\_ => s ; g = Neutr} ;
}
+47 -3
View File
@@ -8,17 +8,35 @@ lin
ComplSlash vps np = case <np.hasClit, vps.c.hasPrep> of {
<True,False> => vps ** {
clit = \\a => vps.clit ! a ++ np.clit ! vps.c.c
clit = \\a => vps.clit ! a ++ np.clit ! vps.c.c ;
compl = \\a => vps.compl ! a ++ vps.ind ! a
} ;
_ => vps ** {
compl = \\a => vps.compl ! a ++ vps.c.s ++ np.s ! vps.c.c
compl = \\a => vps.compl ! a ++ vps.c.s ++ np.s ! vps.c.c ++ vps.ind ! a
}
} ;
SlashV2a v = {
verb = v ;
clit,compl = \\_ => [] ;
c = v.c
c = v.c ;
ind = \\_ => []
} ;
-- three-place verbs: c = direct object case, c2 = indirect object case
Slash2V3 v np = { -- fill the direct object, leave the indirect open
verb = v ;
clit = \\_ => [] ;
compl = \\_ => v.c.s ++ np.s ! v.c.c ;
c = v.c2 ;
ind = \\_ => []
} ;
Slash3V3 v np = { -- fill the indirect object (rendered after the object slot)
verb = v ;
clit = \\_ => [] ;
compl = \\_ => [] ;
c = v.c ;
ind = \\_ => v.c2.s ++ np.s ! v.c2.c
} ;
UseComp comp = {
@@ -36,6 +54,12 @@ lin
CompNP np = {
s = \\a_ => np.s ! Nom ; ---- InstrC in Pol
} ;
CompCN cn = {
s = \\a => case a of {
Ag _ n _ => cn.s ! n ! Nom ---- InstrC also possible
}
} ;
CompAdv adv = {
s = \\a_ => adv.s
@@ -45,4 +69,24 @@ lin
compl = \\a => vp.compl ! a ++ adv.s
} ;
-- VerbForms has no passive participle yet, so the reflexive passive is used:
-- "číslo se dělí" = "the number is divided"
PassV2 v = {
verb = v ;
clit = \\_ => "se" ;
compl = \\_ => []
} ;
ComplVV vv vp = {
verb = vv ;
clit = vp.clit ;
compl = \\a => vp.verb.inf ++ vp.compl ! a
} ;
ComplVS vs s = {
verb = vs ;
clit = \\_ => [] ;
compl = \\_ => SOFT_BIND ++ "," ++ "že" ++ s.s
} ;
}
+1 -1
View File
@@ -149,7 +149,7 @@ flags optimize=values ;
stick_V = irregV "stick" "stuck" "stuck" ;
sting_V = irregV "sting" "stung" "stung" ;
stink_V = irregV "stink" "stank" "stunk" ;
stride_V = irregV "stride" "strod" "stridden" ;
stride_V = irregV "stride" "strode" "stridden" ;
strike_V = irregV "strike" "struck" "struck" ;
string_V = irregV "string" "strung" "strung" ;
strive_V = irregV "strive" "strove" "striven" ;
+3 -3
View File
@@ -39,9 +39,9 @@ concrete NounEng of Noun = CatEng ** open MorphoEng, ResEng, Prelude in {
DetQuant quant num = {
s = quant.s ! num.hasCard ! num.n ++ num.s ! quant.isDef ! Nom;
sp = \\g,hasAdj,c => case <num.hasCard,num.n> of {
<False,Sg> => quant.sp ! g ! hasAdj ! num.n ! c ++ num.s ! quant.isDef ! Nom ;
_ => quant.s ! True ! num.n ++ num.sp ! quant.isDef ! npcase2case c
sp = \\g,hasAdj,c => case num.hasCard of {
False => quant.sp ! g ! hasAdj ! num.n ! c ++ num.s ! quant.isDef ! Nom ;
_ => quant.s ! True ! num.n ++ num.sp ! quant.isDef ! npcase2case c
} ;
n = num.n ;
hasNum = num.hasCard
+29 -1
View File
@@ -1,4 +1,32 @@
concrete AdjectiveFao of Adjective = CatFao ** {
concrete AdjectiveFao of Adjective = CatFao ** open ResFao in {
lin
PositA a = a ;
ComparA a np = {
s = \\g,n,c => "meir" ++ a.s ! g ! n ! c ++ "enn" ++ np.s ! Nom
} ;
ComplA2 a np = {
s = \\g,n,c => a.s ! g ! n ! c ++ a.c2.s ++ np.s ! a.c2.c
} ;
ReflA2 a = {
s = \\g,n,c => a.s ! g ! n ! c ++ a.c2.s ++ "seg"
} ;
UseA2 a = a ;
UseComparA a = {
s = \\g,n,c => "meir" ++ a.s ! g ! n ! c
} ;
CAdvAP cadv ap np = {
s = \\g,n,c => cadv.s ++ ap.s ! g ! n ! c ++ cadv.p ++ np.s ! Nom
} ;
AdjOrd ord = {
s = ord.s
} ;
SentAP ap sc = {
s = \\g,n,c => ap.s ! g ! n ! c ++ sc.s
} ;
AdAP ada ap = {
s = \\g,n,c => ada.s ++ ap.s ! g ! n ! c
} ;
AdvAP ap adv = {
s = \\g,n,c => ap.s ! g ! n ! c ++ adv.s
} ;
}
+11
View File
@@ -0,0 +1,11 @@
concrete AdverbFao of Adverb = CatFao ** open Prelude,ResFao in {
lin
PositAdvAdj a = {s = a.s ! Neuter ! Sg ! Nom} ;
PrepNP p np = {s = p.s ++ np.s ! p.c} ;
ComparAdvAdj cadv a np = {s = cadv.s ++ a.s ! Neuter ! Sg ! Nom ++ cadv.p ++ np.s ! Nom} ;
ComparAdvAdjS cadv a s = {s = cadv.s ++ a.s ! Neuter ! Sg ! Nom ++ cadv.p ++ s.s} ;
AdAdv ada adv = {s = ada.s ++ adv.s} ;
PositAdAAdj a = {s = a.s ! Neuter ! Sg ! Nom} ;
SubjS subj s = {s = subj.s ++ s.s} ;
AdnCAdv cadv = {s = cadv.s} ;
}
+2 -1
View File
@@ -1,4 +1,5 @@
concrete AllFao of AllFaoAbs =
LangFao
LangFao,
ExtendFao
**
{} ;
+3 -2
View File
@@ -1,3 +1,4 @@
abstract AllFaoAbs =
Lang
** {}
Lang,
Extend
** {}
+34 -1
View File
@@ -1,4 +1,4 @@
concrete CatFao of Cat = CommonX ** open ResFao in {
concrete CatFao of Cat = CommonX ** open ResFao, Prelude in {
lincat N = Noun ;
lincat N2 = Noun ** {c2 : Compl} ;
@@ -9,10 +9,43 @@ 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 VP = VerbPhrase ;
lincat VPSlash = Verb ** {c2 : Compl ; sc : Str} ;
lincat Comp = {s : Gender => Number => Str} ;
lincat Cl = Clause ;
lincat ClSlash = {s : Tense => Polarity => Str ; c2 : Compl} ;
lincat SSlash = {s : Str ; c2 : Compl} ;
lincat Imp = {s : Polarity => Number => Str} ;
lincat Prep = Compl ;
lincat CN = CommonNoun ;
lincat NP, Pron = {s : Case => Str ; g : Gender ; n : Number ; p : Person} ;
lincat QS = {s : Str} ;
lincat QCl = {s : Tense => Polarity => Str} ;
lincat IP = {s : Str ; n : Number} ;
lincat IComp = {s : Str} ;
lincat IDet = {s : Str ; n : Number} ;
lincat IQuant = {s : Str} ;
lincat RCl = {s : Tense => Polarity => Gender => PersNum => Str} ;
lincat RS = {s : Gender => PersNum => Str} ;
lincat RP = {s : Str} ;
lincat AP = AdjPhrase ;
lincat Det = {s : Gender => Case => Str ; n : Number ; sp : Species} ;
lincat Predet = {s : Str} ;
lincat Quant = {s : Bool => Gender => Number => Case => Str; sp : Species} ;
lincat Num = {s : Gender => Case => Str ; n : Number ; hasCard : Bool} ;
lincat Card = {s : Gender => Case => Str ; n : Number} ;
lincat ACard = {s : Str} ;
lincat Ord = {s : Gender => Number => Case => Str} ;
lincat DAP = {s : Gender => Case => Str ; n : Number ; sp : Species} ;
lincat S = {s : Str} ;
lincat Numeral = {
s : CardOrd => Gender => Case => Str ;
n : Number
} ;
lincat Digits = {s : Str ; n : Number} ;
lincat Decimal = {s : Str ; n : Number ; hasDot : Bool} ;
lincat Conj = {s : Str} ;
lincat Subj = {s : Str} ;
lincat LN,SN,GN,PN = {s : Str} ;
+53
View File
@@ -0,0 +1,53 @@
concrete ConjunctionFao of Conjunction = CatFao ** open ResFao, Prelude in {
lincat
[S] = {s1,s2 : Str} ;
[RS] = {s1,s2 : Gender => PersNum => Str} ;
[Adv], [AdV], [IAdv] = {s1,s2 : Str} ;
[NP] = {s1,s2 : Case => Str ; g : Gender ; n : Number ; p : Person} ;
[AP] = {s1,s2 : Gender => Number => Case => Str} ;
[CN] = {s1,s2 : Species => Number => Case => Str ; g : Gender} ;
[DAP] = {s1,s2 : Gender => Case => Str ; n : Number ; sp : Species} ;
lin
ConjS conj xs = {s = xs.s1 ++ conj.s ++ xs.s2} ;
ConjRS conj xs = {s = \\g,p => xs.s1 ! g ! p ++ conj.s ++ xs.s2 ! g ! p} ;
ConjAdv conj xs = {s = xs.s1 ++ conj.s ++ xs.s2} ;
ConjAdV conj xs = {s = xs.s1 ++ conj.s ++ xs.s2} ;
ConjIAdv conj xs = {s = xs.s1 ++ conj.s ++ xs.s2} ;
ConjNP conj xs = {
s = \\c => xs.s1 ! c ++ conj.s ++ xs.s2 ! c ;
g = xs.g ;
n = Pl ;
p = P3
} ;
ConjAP conj xs = {s = \\g,n,c => xs.s1 ! g ! n ! c ++ conj.s ++ xs.s2 ! g ! n ! c} ;
ConjCN conj xs = {
s = \\sp,n,c => xs.s1 ! sp ! n ! c ++ conj.s ++ xs.s2 ! sp ! n ! c ;
g = xs.g
} ;
ConjDet conj xs = {
s = \\g,c => xs.s1 ! g ! c ++ conj.s ++ xs.s2 ! g ! c ;
n = xs.n ;
sp = xs.sp
} ;
BaseS x y = {s1 = x.s ; s2 = y.s} ;
ConsS x xs = {s1 = x.s ++ "," ++ xs.s1 ; s2 = xs.s2} ;
BaseRS x y = {s1 = x.s ; s2 = y.s} ;
ConsRS x xs = {s1 = \\g,p => x.s ! g ! p ++ "," ++ xs.s1 ! g ! p ; s2 = xs.s2} ;
BaseAdv x y = {s1 = x.s ; s2 = y.s} ;
ConsAdv x xs = {s1 = x.s ++ "," ++ xs.s1 ; s2 = xs.s2} ;
BaseAdV x y = {s1 = x.s ; s2 = y.s} ;
ConsAdV x xs = {s1 = x.s ++ "," ++ xs.s1 ; s2 = xs.s2} ;
BaseIAdv x y = {s1 = x.s ; s2 = y.s} ;
ConsIAdv x xs = {s1 = x.s ++ "," ++ xs.s1 ; s2 = xs.s2} ;
BaseNP x y = {s1 = x.s ; s2 = y.s ; g = x.g ; n = Pl ; p = P3} ;
ConsNP x xs = {s1 = \\c => x.s ! c ++ "," ++ xs.s1 ! c ; s2 = xs.s2 ; g = xs.g ; n = Pl ; p = P3} ;
BaseAP x y = {s1 = x.s ; s2 = y.s} ;
ConsAP x xs = {s1 = \\g,n,c => x.s ! g ! n ! c ++ "," ++ xs.s1 ! g ! n ! c ; s2 = xs.s2} ;
BaseCN x y = {s1 = x.s ; s2 = y.s ; g = x.g} ;
ConsCN x xs = {s1 = \\sp,n,c => x.s ! sp ! n ! c ++ "," ++ xs.s1 ! sp ! n ! c ; s2 = xs.s2 ; g = xs.g} ;
BaseDAP x y = {s1 = x.s ; s2 = y.s ; n = y.n ; sp = y.sp} ;
ConsDAP x xs = {s1 = \\g,c => x.s ! g ! c ++ "," ++ xs.s1 ! g ! c ; s2 = xs.s2 ; n = xs.n ; sp = xs.sp} ;
}
+173
View File
@@ -0,0 +1,173 @@
concrete ConstructionFao of Construction = CatFao ** open ResFao, ParadigmsFao in {
lincat
Timeunit, Hour, Weekday, Month, Monthday, Year, Language = {s : Str} ;
lin
hungry_VP = beVP "svangur" ;
thirsty_VP = beVP "tystur" ;
tired_VP = beVP "troyttur" ;
scared_VP = beVP "bangin" ;
ill_VP = beVP "sjúkur" ;
ready_VP = beVP "klárur" ;
has_age_VP card = beVP (cardStr card ++ "ára gamal") ;
have_name_Cl np name = {
Converb = np.s ! Nom ++ "eitur" ++ name.s ! Nom ;
Indicative = \\t,pol => np.s ! Nom ++ "eitur" ++ negStr pol ++ name.s ! Nom ;
Nonfinite = np.s ! Nom ++ "eita" ++ name.s ! Nom ;
Participle = \\_ => np.s ! Nom ++ "itið" ++ name.s ! Nom
} ;
married_Cl np spouse = {
Converb = np.s ! Nom ++ "er giftur við" ++ spouse.s ! Dat ;
Indicative = \\t,pol => np.s ! Nom ++ copula ! t ! persNum np.n np.p ++ negStr pol ++ "giftur við" ++ spouse.s ! Dat ;
Nonfinite = np.s ! Nom ++ "vera giftur við" ++ spouse.s ! Dat ;
Participle = \\_ => np.s ! Nom ++ "verið giftur við" ++ spouse.s ! Dat
} ;
what_name_QCl np = {
s = \\t,pol => "hvat" ++ "eitur" ++ np.s ! Nom
} ;
how_old_QCl np = {
s = \\t,pol => "hvussu gamal" ++ copula ! t ! persNum np.n np.p ++ negStr pol ++ np.s ! Nom
} ;
how_far_QCl np = {
s = \\t,pol => "hvussu langt burtur" ++ copula ! t ! persNum np.n np.p ++ negStr pol ++ np.s ! Nom
} ;
weather_adjCl ap = {
Converb = "tað er" ++ ap.s ! Neuter ! Sg ! Nom ;
Indicative = \\t,pol => "tað" ++ copula ! t ! PSg P3 ++ negStr pol ++ ap.s ! Neuter ! Sg ! Nom ;
Nonfinite = "vera" ++ ap.s ! Neuter ! Sg ! Nom ;
Participle = \\_ => "verið" ++ ap.s ! Neuter ! Sg ! Nom
} ;
is_right_VP = beVP "rættur" ;
is_wrong_VP = beVP "skeivur" ;
n_units_AP card cn a = {
s = \\g,n,c => card.s ! cn.g ! Nom ++ cn.s ! Indef ! Pl ! Nom ++ a.s ! g ! n ! c
} ;
n_units_of_NP card cn np = mkNP (card.s ! cn.g ! Nom ++ cn.s ! Indef ! Pl ! Nom ++ "av" ++ np.s ! Dat) np.g np.n np.p ;
n_unit_CN card unit cn = mkCN (card.s ! unit.g ! Nom ++ unit.s ! Indef ! Sg ! Nom ++ cn.s ! Indef ! Sg ! Nom) cn.g ;
bottle_of_CN np = mkCN ("fløska av" ++ np.s ! Dat) Fem ;
cup_of_CN np = mkCN ("koppur av" ++ np.s ! Dat) Masc ;
glass_of_CN np = mkCN ("glas av" ++ np.s ! Dat) Neuter ;
few_X_short_of_Y np x y = {s = np.s ! Nom ++ "vantar nakrar" ++ x.s ! Indef ! Pl ! Acc ++ "í" ++ y.s ! Def ! Sg ! Acc} ;
timeunitAdv card unit = {s = "í" ++ cardStr card ++ unit.s} ;
timeunitRange c1 c2 unit = {s = "í" ++ cardStr c1 ++ "til" ++ cardStr c2 ++ unit.s} ;
oneHour = {s = "eitt"} ;
twoHour = {s = "tvey"} ;
threeHour = {s = "trý"} ;
fourHour = {s = "fýra"} ;
fiveHour = {s = "fimm"} ;
sixHour = {s = "seks"} ;
sevenHour = {s = "sjey"} ;
eightHour = {s = "átta"} ;
nineHour = {s = "níggju"} ;
tenHour = {s = "tíggju"} ;
elevenHour = {s = "ellivu"} ;
twelveHour = {s = "tólv"} ;
thirteenHour = {s = "trettan"} ;
fourteenHour = {s = "fjúrtan"} ;
fifteenHour = {s = "fimtan"} ;
sixteenHour = {s = "sekstan"} ;
seventeenHour = {s = "seytjan"} ;
eighteenHour = {s = "átjan"} ;
nineteenHour = {s = "nítjan"} ;
twentyHour = {s = "tjúgu"} ;
twentyOneHour = {s = "tjúgueitt"} ;
twentyTwoHour = {s = "tjúgutvey"} ;
twentyThreeHour = {s = "tjúgutrý"} ;
twentyFourHour = {s = "tjúgufýra"} ;
timeHour h = {s = "klokkan" ++ h.s} ;
timeHourMinute h m = {s = "klokkan" ++ h.s ++ cardStr m} ;
weekdayPunctualAdv w = {s = w.s} ;
weekdayHabitualAdv w = {s = w.s} ;
weekdayLastAdv w = {s = "seinasta" ++ w.s} ;
weekdayNextAdv w = {s = "næsta" ++ w.s} ;
monthAdv m = {s = "í" ++ m.s} ;
yearAdv y = {s = "í" ++ y.s} ;
dayMonthAdv d m = {s = d.s ++ m.s} ;
monthYearAdv m y = {s = m.s ++ y.s} ;
dayMonthYearAdv d m y = {s = d.s ++ m.s ++ y.s} ;
intYear i = {s = i.s} ;
intMonthday i = {s = i.s} ;
InLanguage l = {s = "á" ++ l.s} ;
weekdayN w = mkCN w.s Masc ;
monthN m = mkCN m.s Masc ;
weekdayPN w = {s = w.s} ;
monthPN m = {s = m.s} ;
languageNP l = mkNP l.s Neuter Sg P3 ;
languageCN l = mkCN l.s Neuter ;
second_Timeunit = {s = "sekund"} ;
minute_Timeunit = {s = "minutt"} ;
hour_Timeunit = {s = "tími"} ;
day_Timeunit = {s = "dagur"} ;
week_Timeunit = {s = "vika"} ;
month_Timeunit = {s = "mánaður"} ;
year_Timeunit = {s = "ár"} ;
monday_Weekday = {s = "mánadagur"} ;
tuesday_Weekday = {s = "týsdagur"} ;
wednesday_Weekday = {s = "mikudagur"} ;
thursday_Weekday = {s = "hósdagur"} ;
friday_Weekday = {s = "fríggjadagur"} ;
saturday_Weekday = {s = "leygardagur"} ;
sunday_Weekday = {s = "sunnudagur"} ;
january_Month = {s = "januar"} ;
february_Month = {s = "februar"} ;
march_Month = {s = "mars"} ;
april_Month = {s = "apríl"} ;
may_Month = {s = "mai"} ;
june_Month = {s = "juni"} ;
july_Month = {s = "juli"} ;
august_Month = {s = "august"} ;
september_Month = {s = "september"} ;
october_Month = {s = "oktober"} ;
november_Month = {s = "november"} ;
december_Month = {s = "desember"} ;
afrikaans_Language = {s = "afrikaans"} ;
amharic_Language = {s = "amhariskt"} ;
arabic_Language = {s = "arabiskt"} ;
bulgarian_Language = {s = "bulgarskt"} ;
catalan_Language = {s = "katalanskt"} ;
chinese_Language = {s = "kinesiskt"} ;
danish_Language = {s = "danskt"} ;
dutch_Language = {s = "hollendskt"} ;
english_Language = {s = "enskt"} ;
estonian_Language = {s = "estiskt"} ;
finnish_Language = {s = "finskt"} ;
french_Language = {s = "franskt"} ;
german_Language = {s = "týskt"} ;
greek_Language = {s = "grikskt"} ;
hebrew_Language = {s = "hebraiskt"} ;
hindi_Language = {s = "hindi"} ;
japanese_Language = {s = "japanskt"} ;
italian_Language = {s = "italskt"} ;
latin_Language = {s = "latín"} ;
latvian_Language = {s = "lettiskt"} ;
maltese_Language = {s = "maltesiskt"} ;
nepali_Language = {s = "nepalskt"} ;
norwegian_Language = {s = "norskt"} ;
persian_Language = {s = "persiskt"} ;
polish_Language = {s = "pólskt"} ;
punjabi_Language = {s = "punjabi"} ;
romanian_Language = {s = "rumenskt"} ;
russian_Language = {s = "russiskt"} ;
sindhi_Language = {s = "sindhi"} ;
spanish_Language = {s = "spanskt"} ;
swahili_Language = {s = "swahili"} ;
swedish_Language = {s = "svenskt"} ;
thai_Language = {s = "tailendskt"} ;
turkish_Language = {s = "turkiskt"} ;
urdu_Language = {s = "urdu"} ;
oper
beVP : Str -> VerbPhrase = \ap -> {
Converb = copula ! Pres ! PPl ++ ap ;
Indicative = \\t,pol,_,p => copula ! t ! p ++ negStr pol ++ ap ;
Nonfinite = "vera" ++ ap ;
Participle = \\_ => "verið" ++ ap
} ;
cardStr : Card -> Str = \card ->
card.s ! Neuter ! Nom ;
}
+16 -12
View File
@@ -10,7 +10,11 @@ lincat
lin
InflectionN,InflectionN2,InflectionN3 = \x -> {
t="n" ;
s1="" ;
s1 = heading1 ("Noun" ++ case x.g of {
Neuter=> "(neuter)";
Masc => "(masc)";
Fem => "(fem)"
}) ;
s2=frameTable (
tr (intagAttr "th" "colspan=\"2\"" "" ++ th "Indef" ++ th "Def") ++
tr (intagAttr "th" "rowspan=\"4\"" "Sg" ++
@@ -30,17 +34,17 @@ lin
t="a" ;
s1="" ;
s2=frameTable (
tr (intagAttr "th" "colspan=\"2\"" "" ++ th "Masc" ++ th "Fem" ++ th "Neutr") ++
tr (intagAttr "th" "colspan=\"2\"" "" ++ th "Masc" ++ th "Fem" ++ th "Neuter") ++
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)) ++
th "Nom" ++ td (x.s ! Masc ! Sg ! Nom) ++ td (x.s ! Fem ! Sg ! Nom) ++ td (x.s ! Neuter ! Sg ! Nom)) ++
tr (th "Acc" ++ td (x.s ! Masc ! Sg ! Acc) ++ td (x.s ! Fem ! Sg ! Acc) ++ td (x.s ! Neuter ! Sg ! Acc)) ++
tr (th "Dat" ++ td (x.s ! Masc ! Sg ! Dat) ++ td (x.s ! Fem ! Sg ! Dat) ++ td (x.s ! Neuter ! Sg ! Dat)) ++
tr (th "Gen" ++ td (x.s ! Masc ! Sg ! Gen) ++ td (x.s ! Fem ! Sg ! Gen) ++ td (x.s ! Neuter ! 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))) ;
th "Nom" ++ td (x.s ! Masc ! Pl ! Nom) ++ td (x.s ! Fem ! Pl ! Nom) ++ td (x.s ! Neuter ! Pl ! Nom)) ++
tr (th "Acc" ++ td (x.s ! Masc ! Pl ! Acc) ++ td (x.s ! Fem ! Pl ! Acc) ++ td (x.s ! Neuter ! Pl ! Acc)) ++
tr (th "Dat" ++ td (x.s ! Masc ! Pl ! Dat) ++ td (x.s ! Fem ! Pl ! Dat) ++ td (x.s ! Neuter ! Pl ! Dat)) ++
tr (th "Gen" ++ td (x.s ! Masc ! Pl ! Gen) ++ td (x.s ! Fem ! Pl ! Gen) ++ td (x.s ! Neuter ! Pl ! Gen))) ;
s3=[]
} ;
lin
@@ -51,8 +55,8 @@ lin
paragraph x.Converb ++
heading2 "Imperative" ++
frameTable (
tr (th "Sg" ++ td (x.Imperative_Jussive ! Sg)) ++
tr (th "Pl" ++ td (x.Imperative_Jussive ! Pl))) ++
tr (th "Sg" ++ td (x.imperative ! Sg)) ++
tr (th "Pl" ++ td (x.imperative ! Pl))) ++
heading2 "Indicative" ++
frameTable (
tr (intagAttr "th" "rowspan=\"4\"" "Pres" ++ th "Sg P1" ++ td (x.Indicative ! Pres ! PSg P1)) ++
+32
View File
@@ -0,0 +1,32 @@
concrete ExtendFao of Extend = CatFao **
open ParadigmsFao, ResFao, (P = ParamX) in {
lincat
VPS = {s : Gender => PersNum => Str} ;
[VPS] = {s1,s2 : Gender => PersNum => Str} ;
VPI = {s : Str} ;
[VPI] = {s1,s2 : Str} ;
VPS2 = {s : Gender => PersNum => Str ; c2 : Compl ; sc : Str} ;
[VPS2] = {s1,s2 : Gender => PersNum => Str ; c2 : Compl ; sc : Str} ;
VPI2 = {s : Str ; c2 : Compl ; sc : Str} ;
[VPI2] = {s1,s2 : Str ; c2 : Compl ; sc : Str} ;
[Comp] = {s1,s2 : Gender => Number => Str} ;
[Imp] = {s1,s2 : Polarity => Number => Str} ;
RNP = {s : Case => Str ; g : Gender ; n : Number ; p : Person} ;
RNPList = {s1,s2 : Case => Str ; g : Gender ; n : Number ; p : Person} ;
X = {s : Str} ;
lin
iFem_Pron = mkPron "eg" "meg" "mær" "mín" Masc Sg P1 ;
youFem_Pron = mkPron "tú" "teg" "tær" "tín" Masc Sg P2 ;
weFem_Pron = mkPron "vit" "okkum" "okkum" "okkara" Masc Pl P1 ;
youPlFem_Pron = mkPron "tit" "tykkum" "tykkum" "tykkara" Masc Pl P2 ;
theyFem_Pron = mkPron "tær" "tær" "teimum" "teirra" Masc Pl P3 ;
youPolFem_Pron = mkPron "tit" "tykkum" "tykkum" "tykkara" Masc Pl P2 ;
youPolPl_Pron = mkPron "tit" "tykkum" "tykkum" "tykkara" Masc Pl P2 ;
youPolPlFem_Pron = mkPron "tit" "tykkum" "tykkum" "tykkara" Masc Pl P2 ;
lin
TPastSimple = {s = [] ; t = P.Past} ;
}
+12 -2
View File
@@ -2,5 +2,15 @@ concrete GrammarFao of Grammar =
TenseX,
PhraseFao,
NounFao,
AdjectiveFao ** {
}
VerbFao,
AdjectiveFao,
AdverbFao,
NumeralFao,
SentenceFao,
QuestionFao,
RelativeFao,
ConjunctionFao,
StructuralFao,
IdiomFao,
NamesFao ** {
}
+62
View File
@@ -0,0 +1,62 @@
concrete IdiomFao of Idiom = CatFao ** open ResFao in {
lin
ImpersCl vp = {
Converb = "tað" ++ vp.Converb ;
Indicative = \\t,pol => "tað" ++ vp.Indicative ! t ! pol ! Neuter ! PSg P3 ;
Nonfinite = "tað" ++ vp.Nonfinite ;
Participle = \\t => "tað" ++ vp.Participle ! t
} ;
GenericCl vp = {
Converb = "mann" ++ vp.Converb ;
Indicative = \\t,pol => "mann" ++ vp.Indicative ! t ! pol ! Masc ! PSg P3 ;
Nonfinite = "mann" ++ vp.Nonfinite ;
Participle = \\t => "mann" ++ vp.Participle ! t
} ;
CleftNP np rs = {
Converb = "tað er" ++ np.s ! Nom ++ rs.s ! np.g ! persNum np.n np.p ;
Indicative = \\t,pol => "tað" ++ copula ! t ! PSg P3 ++ negStr pol ++ np.s ! Nom ++ rs.s ! np.g ! persNum np.n np.p ;
Nonfinite = "vera" ++ np.s ! Nom ++ rs.s ! np.g ! persNum np.n np.p ;
Participle = \\_ => "verið" ++ np.s ! Nom ++ rs.s ! np.g ! persNum np.n np.p
} ;
CleftAdv adv s = {
Converb = "tað er" ++ adv.s ++ s.s ;
Indicative = \\t,pol => "tað" ++ copula ! t ! PSg P3 ++ negStr pol ++ adv.s ++ s.s ;
Nonfinite = "vera" ++ adv.s ++ s.s ;
Participle = \\_ => "verið" ++ adv.s ++ s.s
} ;
ExistNP np = {
Converb = "tað er" ++ np.s ! Nom ;
Indicative = \\t,pol => "tað" ++ copula ! t ! persNum np.n P3 ++ negStr pol ++ np.s ! Nom ;
Nonfinite = "vera" ++ np.s ! Nom ;
Participle = \\_ => "verið" ++ np.s ! Nom
} ;
ExistIP ip = {
s = \\t,pol => "hvat" ++ copula ! t ! persNum ip.n P3 ++ negStr pol
} ;
ExistNPAdv np adv = {
Converb = "tað er" ++ np.s ! Nom ++ adv.s ;
Indicative = \\t,pol => "tað" ++ copula ! t ! persNum np.n P3 ++ negStr pol ++ np.s ! Nom ++ adv.s ;
Nonfinite = "vera" ++ np.s ! Nom ++ adv.s ;
Participle = \\_ => "verið" ++ np.s ! Nom ++ adv.s
} ;
ExistIPAdv ip adv = {
s = \\t,pol => ip.s ++ copula ! t ! persNum ip.n P3 ++ negStr pol ++ adv.s
} ;
ProgrVP vp = {
Converb = "vera við at" ++ vp.Nonfinite ;
Indicative = \\t,pol,g,p => copula ! t ! p ++ negStr pol ++ "við at" ++ vp.Nonfinite ;
Nonfinite = "vera við at" ++ vp.Nonfinite ;
Participle = \\_ => "verið við at" ++ vp.Nonfinite
} ;
ImpPl1 vp = {s = "lat okkum" ++ vp.Nonfinite} ;
ImpP3 np vp = {s = "lat" ++ np.s ! Acc ++ vp.Nonfinite} ;
SelfAdvVP vp = vp ** {
Converb = vp.Converb ++ "sjálvur" ;
Indicative = \\t,pol,g,p => vp.Indicative ! t ! pol ! g ! p ++ "sjálvur" ;
Nonfinite = vp.Nonfinite ++ "sjálvur" ;
Participle = \\t => vp.Participle ! t ++ "sjálvur"
} ;
SelfAdVVP = SelfAdvVP ;
SelfNP np = np ** {s = \\c => np.s ! c ++ "sjálvur"} ;
}
+2 -1
View File
@@ -2,9 +2,10 @@
concrete LangFao of Lang =
GrammarFao,
LexiconFao
,ConstructionFao
,DocumentationFao --# notpresent
** {
flags startcat = Phr ;
}
}
+9 -2
View File
@@ -1,2 +1,9 @@
concrete LexiconFao of Lexicon = CatFao ** open ParadigmsFao in {
}
concrete LexiconFao of Lexicon = CatFao ** open ParadigmsFao, ResFao in {
lin
apple_N = mkN "epli" ;
big_A = mkA "stórur" ;
child_N = mkN "barn" ;
die_V = mkV "doyggja" "doyrt" ;
good_A = mkA "góður" ;
go_V = mkVerb "farið" "far" "farið" "fari" "fert" "fer" "fara" "fór" "fórt" "fór" "fóru" "fara" "farandi" "farin" ;
}
+509 -339
View File
File diff suppressed because it is too large Load Diff
+14
View File
@@ -0,0 +1,14 @@
concrete NamesFao of Names = CatFao ** open ResFao in {
lin
GivenName gn = mkNP gn.s Masc Sg P3 ;
MaleSurname sn = mkNP sn.s Masc Sg P3 ;
FemaleSurname sn = mkNP sn.s Fem Sg P3 ;
PlSurname sn = mkNP sn.s Masc Pl P3 ;
FullName gn sn = mkNP (gn.s ++ sn.s) Masc Sg P3 ;
UseLN ln = mkNP ln.s Neuter Sg P3 ;
PlainLN ln = mkNP ln.s Neuter Sg P3 ;
InLN ln = {s = "í" ++ ln.s} ;
AdjLN ap ln = {s = ap.s ! Neuter ! Sg ! Nom ++ ln.s} ;
}
+158 -1
View File
@@ -1,4 +1,161 @@
concrete NounFao of Noun = CatFao ** {
concrete NounFao of Noun = CatFao ** open ResFao, Prelude in {
lin
UseN n = n ;
UseN2 n = n ;
Use2N3 n = n ** {c2 = n.c2} ;
Use3N3 n = n ** {c2 = n.c3} ;
UsePN pn = mkNP pn.s Masc Sg P3 ;
UsePron p = p ;
RelNP np rs =
np ** {s = \\c => np.s ! c ++ "," ++ rs.s ! np.g ! persNum np.n np.p} ;
DetNP det = {
s = \\c => det.s ! Masc ! c ;
g = Masc ;
n = det.n ;
p = P3
} ;
PredetNP pred np = np ** {
s = \\c => pred.s ++ np.s ! c
} ;
PPartNP np v2 = np ** {
s = \\c => np.s ! c ++ v2.Participle ! Past
} ;
AdvNP np adv = np ** {
s = \\c => np.s ! c ++ adv.s
} ;
ExtAdvNP np adv = np ** {
s = \\c => np.s ! c ++ "," ++ adv.s
} ;
DetCN det cn = {
s = \\c => det.s ! cn.g ! c ++ cn.s ! det.sp ! det.n ! c ;
g = cn.g ;
n = det.n ;
p = P3
} ;
DefArt = {
s = \\_,_,_,_ => [] ;
sp = Def ;
} ;
IndefArt = {
s = \\b =>
table {
Masc => table {
Sg => case b of {
False => table {Nom => "ein" ; Acc => "ein" ; Dat => "einum" ; Gen => "eins"} ;
True => \\_ => []
} ;
Pl => \\_ => []
} ;
Fem => table {
Sg => case b of {
False => table {Nom => "ein" ; Acc => "eina" ; Dat => "einari" ; Gen => "einar"} ;
True => \\_ => []
} ;
Pl => \\_ => []
} ;
Neuter => table {
Sg => case b of {
False => table {Nom => "eitt" ; Acc => "eitt" ; Dat => "einum" ; Gen => "eins"} ;
True => \\_ => []
} ;
Pl => \\_ => []
}
} ;
sp = Indef ;
} ;
DetQuant quant num = {
s = \\g,c => quant.s ! num.hasCard ! g ! num.n ! c ++
num.s ! g ! c ;
n = num.n ;
sp = quant.sp
} ;
DetQuantOrd quant num ord = {
s = \\g,c => quant.s ! num.hasCard ! g ! num.n ! c ++
num.s ! g ! c ++ ord.s ! g ! num.n ! c ;
n = num.n ;
sp = quant.sp
} ;
NumSg = {
s = \\_,_ => [] ;
n = Sg ;
hasCard = False
} ;
NumPl = {
s = \\_,_ => [] ;
n = Pl ;
hasCard = False
} ;
NumCard card = card ** {hasCard = True} ;
NumDigits digits = {s = \\_,_ => digits.s ; n = Pl} ;
NumDecimal dec = {s = \\_,_ => dec.s ; n = Pl} ;
NumNumeral numeral = {s=numeral.s ! NCard; n=numeral.n} ;
AdNum adn card = {s = \\g,c => adn.s ++ card.s ! g ! c ; n = card.n} ;
OrdDigits digits = {s = \\_,_,_ => digits.s ++ BIND ++ "."} ;
OrdNumeral numeral = {s = \\g,n,c => numeral.s ! NOrd n ! g ! c} ;
OrdSuperl a = {s = a.s} ;
OrdNumeralSuperl numeral a = {
s = \\g,n,c => numeral.s ! NOrd n ! g ! c ++ a.s ! g ! n ! c
} ;
MassNP cn = {
s = \\c => cn.s ! Indef ! Sg ! c ;
g = cn.g ;
n = Sg ;
p = P3
} ;
PossPron pron = {
s = \\_,_,_,_ => pron.s ! Gen ;
sp = Def
} ;
ComplN2 n2 np = {
s = \\sp,n,c => n2.s ! sp ! n ! c ++ n2.c2.s ++ np.s ! n2.c2.c ;
g = n2.g
} ;
ComplN3 n3 np = n3 ** {
s = \\sp,n,c => n3.s ! sp ! n ! c ++ n3.c2.s ++ np.s ! n3.c2.c ;
c2 = n3.c3
} ;
AdjCN ap cn = {
s = \\sp,n,c => ap.s ! cn.g ! n ! c ++ cn.s ! sp ! n ! c ;
g = cn.g
} ;
RelCN cn rs = {
s = \\sp,n,c => cn.s ! sp ! n ! c ++ rs.s ! cn.g ! persNum n P3 ;
g = cn.g
} ;
AdvCN cn adv = {
s = \\sp,n,c => cn.s ! sp ! n ! c ++ adv.s ;
g = cn.g
} ;
SentCN cn sc = {
s = \\sp,n,c => cn.s ! sp ! n ! c ++ sc.s ;
g = cn.g
} ;
ApposCN cn np = {
s = \\sp,n,c => cn.s ! sp ! n ! c ++ np.s ! Nom ;
g = cn.g
} ;
PossNP cn np = {
s = \\sp,n,c => cn.s ! sp ! n ! c ++ np.s ! Gen ;
g = cn.g
} ;
PartNP cn np = {
s = \\sp,n,c => cn.s ! sp ! n ! c ++ "av" ++ np.s ! Dat ;
g = cn.g
} ;
CountNP det np = {
s = \\c => det.s ! np.g ! c ++ "av" ++ np.s ! Dat ;
g = np.g ;
n = det.n ;
p = P3
} ;
AdjDAP dap ap = dap ** {
s = \\g,c => dap.s ! g ! c ++ ap.s ! g ! dap.n ! c
} ;
DetDAP det = det ;
QuantityNP dec mu = {
s = \\_ => dec.s ++ mu.s ;
g = Neuter ;
n = Pl ;
p = P3
} ;
}
+316
View File
@@ -0,0 +1,316 @@
concrete NumeralFao of Numeral = CatFao [Numeral, Digits, Decimal] ** open Prelude, ResFao in {
lincat
Digit = {
s,teen,ten : CardOrd => Gender => Case => Str ;
n : Number ;
} ;
Sub10 = {
s : CardOrd => Gender => Case => Str ;
hundredth, thousandth, millionth, milliardth : Gender => Case => Str ;
n : Number
} ;
Sub100, Sub1000 = {
s : CardOrd => Gender => Case => Str ;
thousandth, millionth, milliardth : Gender => Case => Str ;
n : Number
} ;
Sub1000000, Sub1000000000, Sub1000000000000 =
{s : CardOrd => Gender => Case => Str ; n : Number} ;
Dig = {s : Str; n : Number} ;
lin
num n = n ;
n2 = {
s = table {
NCard => table {
Masc => caseList "tveir" "tveir" "tveimum" "tveggja" ;
Fem => caseList "tvær" "tvær" "tveimum" "tveggja" ;
Neuter => caseList "tvey" "tvey" "tveimum" "tveggja"
} ;
NOrd n => table {
Masc => case n of {
Sg => caseList "annar" "annan" "øðrum" "annars" ;
Pl => caseList "aðrir" "aðrar" "øðrum" "annara"
} ;
Fem => case n of {
Sg => caseList "onnur" "aðra" "aðrari" "annarar" ;
Pl => caseList "aðrar" "aðrar" "øðrum" "annara"
} ;
Neuter => case n of {
Sg => caseList "annað" "annað" "øðrum" "annars" ;
Pl => caseList "onnur" "onnur" "øðrum" "annara"
}
}
} ;
teen = table {
NCard => \\_,_ => "tólv" ;
NOrd n => mkWeakOrd "tólvti" ! n
} ;
ten = table {
NCard => \\_,_ => "tjúgu" ;
NOrd n => mkWeakOrd "tjúgundi" ! n
} ;
n = Pl
} ;
n3 = {
s = table {
NCard => table {
Masc => caseList "tríggir" "tríggjar" "trimum" "tríggja" ;
Fem => caseList "tríggjar" "tríggjar" "trimum" "tríggja" ;
Neuter => caseList "trý" "trý" "trimum" "tríggja"
} ;
NOrd n => mkOrdForms "triði" "triðja" "triðju" ! n
} ;
teen = table {
NCard => \\_,_ => "trettan" ;
NOrd n => mkWeakOrd "trettandi" ! n
} ;
ten = table {
NCard => \\_,_ => "tríati" ;
NOrd n => mkWeakOrd "tretivundi" ! n
} ;
n = Pl
} ;
n4 = mkDigit "fýra" "fjúrtan" "fýrati" "fjórði" "fjúrtandi" "fjørutandi" ;
n5 = mkDigit "fimm" "fimtan" "fimmti" "fimti" "fimtandi" "fimtandi" ;
n6 = mkDigit "seks" "sekstan" "seksti" "sætti" "sekstandi" "sekstandi" ;
n7 = mkDigit "sjey" "seytjan" "sjeyti" "sjeyndi" "seytjandi" "sjútandi" ;
n8 = mkDigit "átta" "átjan" "áttati" "áttandi" "átjandi" "áttandi" ;
n9 = mkDigit "níggju" "nítjan" "níti" "níggjundi" "nítjandi" "nítandi" ;
pot01 = {
s = table {
NCard => table {
Masc => caseList "ein" "ein" "einum" "eins" ;
Fem => caseList "einar" "eina" "einari" "einar" ;
Neuter => caseList "eitt" "eitt" "einum" "eins"
} ;
NOrd n => mkWeakOrd "fyrsti" ! n
} ;
hundredth = mkWeakOrd "hundraðandi" ! Sg ;
thousandth = mkWeakOrd "túsundandi" ! Sg ;
millionth = mkWeakOrd "milliónandi" ! Sg ;
milliardth = mkWeakOrd "milliardandi" ! Sg ;
n = Sg
} ;
pot0 d = d ** {
hundredth = mkCompoundOrd (numBase d) "hundraðandi" ! Pl ;
thousandth = mkCompoundOrd (numBase d) "túsundandi" ! Pl ;
millionth = mkCompoundOrd (numBase d) "milliónandi" ! Pl ;
milliardth = mkCompoundOrd (numBase d) "milliardandi" ! Pl
} ;
pot0as1 n = n ;
pot110 =
let ten : Gender => Case => Str =
table {
Neuter => \\_ => "ti" ;
_ => \\_ => "tíggju"
} ;
in mkCardOrd ten
(mkWeakOrd "tíggjundi") ** {
thousandth = \\g,c => ten ! g ! Nom ++ mkWeakOrd "túsundandi" ! Pl ! g ! Nom ;
millionth = \\g,c => ten ! g ! Nom ++ mkWeakOrd "milliónandi" ! Pl ! g ! Nom ;
milliardth = \\g,c => ten ! g ! Nom ++ mkWeakOrd "milliardandi" ! Pl ! g ! Nom
};
pot111 =
mkCardOrd (\\_,_ => "ellivu")
(mkWeakOrd "ellivti") ** {
thousandth = \\g,c => "ellivu" ++ mkWeakOrd "túsundandi" ! Pl ! g ! Nom ;
millionth = \\g,c => "ellivu" ++ mkWeakOrd "milliónandi" ! Pl ! g ! Nom ;
milliardth = \\g,c => "ellivu" ++ mkWeakOrd "milliardandi" ! Pl ! g ! Nom
};
pot1to19 d =
mkCardOrd (d.teen ! NCard)
(\\n => d.teen ! NOrd n) ** {
thousandth = \\g,c => d.teen ! NCard ! g ! Nom ++ mkWeakOrd "túsundandi" ! Pl ! g ! Nom ;
millionth = \\g,c => d.teen ! NCard ! g ! Nom ++ mkWeakOrd "milliónandi" ! Pl ! g ! Nom ;
milliardth = \\g,c => d.teen ! NCard ! g ! Nom ++ mkWeakOrd "milliardandi" ! Pl ! g ! Nom
};
pot1 d =
mkCardOrd (d.ten ! NCard)
(\\n => d.ten ! NOrd n) ** {
thousandth = \\g,c => d.ten ! NCard ! g ! Nom ++ mkWeakOrd "túsundandi" ! Pl ! g ! Nom ;
millionth = \\g,c => d.ten ! NCard ! g ! Nom ++ mkWeakOrd "milliónandi" ! Pl ! g ! Nom ;
milliardth = \\g,c => d.ten ! NCard ! g ! Nom ++ mkWeakOrd "milliardandi" ! Pl ! g ! Nom
} ;
pot1plus d e = {
s = table {
NCard => \\g,c => e.s ! NCard ! g ! c ++ "og" ++ d.ten ! NCard ! g ! Nom ;
NOrd n => \\g,c => d.ten ! NCard ! g ! c ++ "og" ++ e.s ! NOrd n ! g ! Nom
} ;
thousandth = \\g,c => d.ten ! NCard ! g ! Nom ++ "og" ++ e.s ! NCard ! g ! c ++ mkWeakOrd "túsundandi" ! Pl ! g ! Nom ;
millionth = \\g,c => d.ten ! NCard ! g ! Nom ++ "og" ++ e.s ! NCard ! g ! c ++ mkWeakOrd "milliónandi" ! Pl ! g ! Nom ;
milliardth = \\g,c => d.ten ! NCard ! g ! Nom ++ "og" ++ e.s ! NCard ! g ! c ++ mkWeakOrd "milliardandi" ! Pl ! g ! Nom ;
n = Pl
} ;
pot1as2 n = n ;
pot21 =
mkCardOrd (\\_,_ => "hundrað")
(mkWeakOrd "hundraðandi") ** {
thousandth = \\g,c => "hundrað" ++ mkWeakOrd "túsundandi" ! Pl ! g ! Nom ;
millionth = \\g,c => "hundrað" ++ mkWeakOrd "milliónandi" ! Pl ! g ! Nom ;
milliardth = \\g,c => "hundrað" ++ mkWeakOrd "milliardandi" ! Pl ! g ! Nom
} ;
pot2 d =
mkCardOrd (\\_,_ => numBase d ++ "hundrað")
(\\_ => d.hundredth) ** {
thousandth = \\g,c => numBase d ++ "hundrað" ++ mkWeakOrd "túsundandi" ! Pl ! g ! Nom ;
millionth = \\g,c => numBase d ++ "hundrað" ++ mkWeakOrd "milliónandi" ! Pl ! g ! Nom ;
milliardth = \\g,c => numBase d ++ "hundrað" ++ mkWeakOrd "milliardandi" ! Pl ! g ! Nom
} ;
pot2plus d e = {
s = table {
NCard => \\g,c => numBase d ++ "hundrað" ++ e.s ! NCard ! g ! c ;
NOrd n => \\g,c => numBase d ++ "hundrað" ++ "og" ++ e.s ! NOrd n ! g ! c
} ;
thousandth = \\g,c => numBase d ++ "hundrað" ++ e.s ! NCard ! g ! c ++ mkWeakOrd "túsundandi" ! Pl ! g ! Nom ;
millionth = \\g,c => numBase d ++ "hundrað" ++ e.s ! NCard ! g ! c ++ mkWeakOrd "milliónandi" ! Pl ! g ! Nom ;
milliardth = \\g,c => numBase d ++ "hundrað" ++ e.s ! NCard ! g ! c ++ mkWeakOrd "milliardandi" ! Pl ! g ! Nom ;
n = Pl
} ;
pot2as3 n = n ;
pot31 = mkCardOrd (\\_,_ => "túsund")
(mkWeakOrd "túsundandi") ;
pot3 n = mkCardOrd (\\_,_ => numBase n ++ "túsund")
(\\_ => n.thousandth) ;
pot3plus n m = {
s = table {
NCard => \\g,c => numBase n ++ "túsund" ++ m.s ! NCard ! g ! c ;
NOrd num => \\g,c => numBase n ++ "túsund" ++ "og" ++ m.s ! NOrd num ! g ! c
} ;
n = Pl
} ;
pot3as4 n = n ;
pot3decimal d = mkCardOrd (\\_,_ => d.s ++ "túsund")
(\\_,_,_ => d.s ++ "túsundandi") ;
pot41 = mkCardOrd (\\_,_ => "millión")
(mkWeakOrd "milliónandi") ;
pot4 n = mkCardOrd (\\_,_ => numBase n ++ "millión")
(\\_ => n.millionth) ;
pot4plus n m = {
s = table {
NCard => \\g,c => numBase n ++ "millión" ++ m.s ! NCard ! g ! c ;
NOrd num => \\g,c => numBase n ++ "millión" ++ "og" ++ m.s ! NOrd num ! g ! c
} ;
n = Pl
} ;
pot4as5 n = n ;
pot4decimal d = mkCardOrd (\\_,_ => d.s ++ "millión")
(\\_,_,_ => d.s ++ "milliónandi") ;
pot51 = mkCardOrd (\\_,_ => "milliard")
(mkWeakOrd "milliardandi") ;
pot5 n = mkCardOrd (\\_,_ => numBase n ++ "milliard")
(\\_ => n.milliardth) ;
pot5plus n m = {
s = table {
NCard => \\g,c => numBase n ++ "milliard" ++ m.s ! NCard ! g ! c ;
NOrd num => \\g,c => numBase n ++ "milliard" ++ "og" ++ m.s ! NOrd num ! g ! c
} ;
n = Pl
} ;
pot5decimal d = mkCardOrd (\\_,_ => d.s ++ "milliard")
(\\_,_,_ => d.s ++ "milliardandi") ;
IDig d = d ;
IIDig d ds = {s = d.s ++ BIND ++ ds.s; n = Pl} ;
D_0 = {s = "0"; n = Pl} ;
D_1 = {s = "1"; n = Sg} ;
D_2 = {s = "2"; n = Pl} ;
D_3 = {s = "3"; n = Pl} ;
D_4 = {s = "4"; n = Pl} ;
D_5 = {s = "5"; n = Pl} ;
D_6 = {s = "6"; n = Pl} ;
D_7 = {s = "7"; n = Pl} ;
D_8 = {s = "8"; n = Pl} ;
D_9 = {s = "9"; n = Pl} ;
PosDecimal d = d ** {hasDot = False} ;
NegDecimal d = {s = "-" ++ BIND ++ d.s; n = Pl; hasDot = False} ;
IFrac d i = {s = d.s ++ if_then_Str d.hasDot BIND (BIND++"."++BIND) ++ i.s; n = Pl; hasDot = True} ;
oper
caseList : Str -> Str -> Str -> Str -> Case => Str = \nom,acc,dat,gen ->
table {Nom => nom ; Acc => acc ; Dat => dat ; Gen => gen} ;
mkCardOrd :
(Gender => Case => Str) ->
(Number => Gender => Case => Str) ->
{s : CardOrd => Gender => Case => Str ; n : Number} =
\card,ord -> {
s = table {
NCard => card ;
NOrd n => ord ! n
} ;
n = Pl
} ;
mkDigit :
Str -> Str -> Str -> Str -> Str -> Str -> Digit =
\str,teen,ten,unitOrd,teenOrd,tenOrd -> lin Digit {
s = table {
NCard => \\_,_ => str ;
NOrd n => mkWeakOrd unitOrd ! n
} ;
teen = table {
NCard => \\_,_ => teen ;
NOrd n => mkWeakOrd teenOrd ! n
} ;
ten = table {
NCard => \\_,_ => ten ;
NOrd n => mkWeakOrd tenOrd ! n
} ;
n = Pl
} ;
mkOrdForms : Str -> Str -> Str -> Number => Gender => Case => Str = \masc,obl,pl ->
table {
Sg =>
table {
Masc => caseList masc obl obl obl ;
Fem => caseList obl pl pl pl ;
Neuter => \\_ => obl
} ;
Pl => \\_,_ => pl
} ;
mkWeakOrd : Str -> Number => Gender => Case => Str = \lemma ->
let stem : Str = init lemma in
mkOrdForms lemma (stem + "a") (stem + "u") ;
mkCompoundOrd : Str -> Str -> Number => Gender => Case => Str = \prefix,lemma ->
let stem : Str = init lemma in
mkOrdForms
(prefix ++ BIND ++ lemma)
(prefix ++ BIND ++ (stem + "a"))
(prefix ++ BIND ++ (stem + "u")) ;
numBase : {s : CardOrd => Gender => Case => Str} -> Str = \n ->
n.s ! NCard ! Neuter ! Nom ;
}
+38 -6
View File
@@ -319,6 +319,19 @@ oper
_ => regN form1
} ;
mkPron : (_,_,_,_ : Str) -> Gender -> Number -> Person -> Pron =
\nom,acc,dat,gen,g,n,p -> lin Pron {
s = table {
Nom => nom ;
Acc => acc ;
Dat => dat ;
Gen => gen
} ;
g = g ;
n = n ;
p = p
} ;
regA : Str -> A -- s;Masc;Sg;Nom
= \form -> case form of {
_ + "dur" => mkA001 form;
@@ -489,11 +502,20 @@ oper
mkN3 : N -> Prep -> Prep -> N3 = \n,p1,p2 -> lin N3 (n ** {c2 = p1; c3 = p2}) ;
} ;
invarN : Str -> N = \s -> lin N {
s = \\_,_,_ => s ;
g = Masc
} ;
mkA = overload {
mkA : Str -> A = regA; -- s;Masc;Sg;Nom
mkA : Str -> Str -> A = reg2A -- s;Masc;Sg;Nom s;Masc;Sg;Dat
} ;
invarA : Str -> A = \s -> lin A {
s = \\_,_,_ => s
} ;
mkA2 = overload {
mkA2 : A -> A2 = \a -> lin A2 (a ** {c2 = noPrep}) ;
mkA2 : A -> Prep -> A2 = \a,p -> lin A2 (a ** {c2 = p}) ;
@@ -502,10 +524,19 @@ oper
mkV = overload {
mkV : Str -> V = regV; -- Nonfinite
mkV : Str -> Str -> V = reg2V ; -- Nonfinite Indicative;Pres;('PSg', P2)
mkV : V -> Str -> V -- particle verb
mkV : V -> Str -> V -- particle verb
= \v,p -> v ** {particle = p}
} ;
invarV : Str -> V = \s -> lin V {
Converb = s ;
imperative = \\_ => s ;
Indicative = \\_,_ => s ;
Nonfinite = s ;
Participle = \\_ => s ;
particle = []
} ;
mkVV : V -> VV = \v -> lin VV v ;
mkVS : V -> VS = \v -> lin VS v ;
mkVQ : V -> VQ = \v -> lin VQ v ;
@@ -552,14 +583,15 @@ oper
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} ;
mkIP : Str -> IP = \s -> lin IP {s=s; n=Sg} ;
mkIQuant : Str -> IQuant = \s -> lin IQuant {s=s} ;
mkIDet : Str -> IDet = \s -> lin IDet {s=s} ;
mkIDet : Str -> IDet = \s -> lin IDet {s=s; n=Sg} ;
mkSubj : Str -> Subj = \s -> lin Subj {s=s} ;
mkQuant : Str -> Quant = \s -> lin Quant {s=s} ;
mkQuant : Str -> Quant = \s -> lin Quant {s=\\_,_,_,_ => s; sp=Indef} ;
mkPredet : Str -> Predet = \s -> lin Predet {s=s} ;
mkDet : Str -> Det = \s -> lin Det {s=s} ;
mkCard : Str -> Card = \s -> lin Card {s=s} ;
mkDet : Str -> Det = \s -> lin Det {s=\\_,_ => s; n=Sg; sp=Indef} ;
mkCard : Str -> Card = \s -> lin Card {s=\\_,_ => s; n=Pl} ;
mkACard : Str -> ACard = \s -> lin ACard {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} ;
+15 -1
View File
@@ -1,11 +1,25 @@
concrete PhraseFao of Phrase = CatFao ** {
concrete PhraseFao of Phrase = CatFao ** open ResFao in {
lin
PhrUtt pconj utt voc = {s = pconj.s ++ utt.s ++ voc.s} ;
UttS s = s ;
UttQS qs = qs ;
UttImpSg pol imp = {s = imp.s ! pol.p ! Sg} ;
UttImpPl pol imp = {s = imp.s ! pol.p ! Pl} ;
UttImpPol pol imp = {s = imp.s ! pol.p ! Pl} ;
UttIP ip = {s = ip.s} ;
UttIAdv iadv = iadv ;
UttNP np = {s = np.s ! Nom} ;
UttVP vp = {s = vp.Nonfinite} ;
UttCN cn = {s = cn.s ! Indef ! Sg ! Nom} ;
UttCard card = {s = card.s ! Neuter ! Nom} ;
UttAP ap = {s = ap.s ! Masc ! Sg ! Nom} ;
UttAdv adv = adv ;
UttInterj i = i ;
NoPConj = {s = []} ;
PConjConj conj = conj ;
NoVoc = {s = []} ;
VocNP np = {s = "," ++ np.s ! Nom} ;
}
+50
View File
@@ -0,0 +1,50 @@
concrete QuestionFao of Question = CatFao ** open ResFao in {
lincat QVP = {s : Tense => Polarity => Str} ;
lin
QuestCl cl = {s = cl.Indicative} ;
QuestVP ip vp = {
s = \\t,pol => ip.s ++ vp.Indicative ! t ! pol ! Masc ! persNum ip.n P3
} ;
QuestSlash ip cls = {
s = \\t,pol => ip.s ++ cls.s ! t ! pol
} ;
QuestIAdv iadv cl = {
s = \\t,pol => iadv.s ++ cl.Indicative ! t ! pol
} ;
QuestIComp icomp np = {
s = \\t,pol => icomp.s ++ copula ! t ! persNum np.n np.p ++ negStr pol ++ np.s ! Nom
} ;
IdetCN idet cn = {
s = idet.s ++ cn.s ! Indef ! idet.n ! Nom ;
n = idet.n
} ;
IdetIP idet = {
s = idet.s ;
n = idet.n
} ;
AdvIP ip adv = ip ** {s = ip.s ++ adv.s} ;
IdetQuant iquant num = {
s = iquant.s ++ num.s ! Masc ! Nom ;
n = num.n
} ;
PrepIP prep ip = {s = prep.s ++ ip.s} ;
AdvIAdv iadv adv = {s = iadv.s ++ adv.s} ;
CompIAdv iadv = iadv ;
CompIP ip = {s = ip.s} ;
ComplSlashIP vps ip = {
s = \\t,pol => vps.Indicative ! t ! PSg P3 ++ vps.particle ++ negStr pol ++ vps.c2.s ++ ip.s ++ vps.sc
} ;
AdvQVP vp iadv = {
s = \\t,pol => vp.Indicative ! t ! pol ! Masc ! PSg P3 ++ iadv.s
} ;
AddAdvQVP qvp iadv = {
s = \\t,pol => qvp.s ! t ! pol ++ iadv.s
} ;
QuestQVP ip qvp = {
s = \\t,pol => ip.s ++ qvp.s ! t ! pol
} ;
}
+16
View File
@@ -0,0 +1,16 @@
concrete RelativeFao of Relative = CatFao ** open ResFao in {
lin
IdRP = {s = "sum"} ;
RelCl cl = {
s = \\t,pol,_,_ => "sum" ++ cl.Indicative ! t ! pol
} ;
RelVP rp vp = {
s = \\t,pol,g,pn => rp.s ++ vp.Indicative ! t ! pol ! g ! pn
} ;
RelSlash rp cls = {
s = \\t,pol,_,_ => rp.s ++ cls.s ! t ! pol
} ;
FunRP prep np rp = {
s = prep.s ++ np.s ! prep.c ++ rp.s
} ;
}
+86 -15
View File
@@ -1,12 +1,14 @@
resource ResFao = {
resource ResFao = ParamX - [Tense,Pres,Past] ** {
param
CardOrd = NCard | NOrd Number ;
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 ->
param Gender = Masc | Fem | Neuter ;
oper Noun = {s: Species => Number => Case => Str; g : Gender} ; -- 2135
oper mkNoun : (_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_ : Str) -> Gender -> Noun =
\f1,f2,f3,f4,f5,f6,f7,f8,f9,f10,f11,f12,f13,f14,f15,f16,g ->
{ s = table {
Indef => table {
Sg => table {
@@ -36,7 +38,8 @@ oper mkNoun : (_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_ : Str) -> Noun =
Gen => f16
}
}
}
} ;
g = g
} ;
@@ -72,7 +75,7 @@ oper mkAdj : (_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_ : Str) -> Adj =
Gen => f16
}
} ;
Neutr => table {
Neuter=> table {
Sg => table {
Nom => f17 ;
Acc => f18 ;
@@ -89,17 +92,28 @@ oper mkAdj : (_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_ : Str) -> Adj =
}
} ;
param Tense = Past | Pres ;
param Tense = Pres | Past ;
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 persNum : Number -> Person -> PersNum =
\n,p -> case n of {
Sg => PSg p ;
Pl => PPl
} ;
oper persNumNumber : PersNum -> Number =
\pn -> case pn of {
PSg _ => Sg ;
PPl => Pl
} ;
oper Verb = {Converb: Str; imperative: 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
} ;
imperative = table {
Sg => f2 ;
Pl => f3
} ;
Indicative = table {
Pres => table {
PSg P1 => f4 ;
@@ -128,5 +142,62 @@ oper noPrep : Compl = {s=""; c=Acc} ;
oper CommonNoun = Noun ;
oper AdjPhrase = Adj ;
oper VerbPhrase = {
Converb : Str ;
Indicative : Tense => Polarity => Gender => PersNum => Str ;
Nonfinite : Str ;
Participle : Tense => Str ;
} ;
oper Clause = {
Converb : Str ;
Indicative : Tense => Polarity => Str ;
Nonfinite : Str ;
Participle : Tense => Str
} ;
oper
copula : Tense => PersNum => Str =
table {
Pres => table {
PSg P1 => "eri" ;
PSg P2 => "ert" ;
PSg P3 => "er" ;
PPl => "eru"
} ;
Past => table {
PSg P1 => "var" ;
PSg P2 => "vart" ;
PSg P3 => "var" ;
PPl => "vóru"
}
} ;
oper
negStr : Polarity -> Str = \pol -> case pol of {
Pos => [] ;
Neg => "ikki"
} ;
mkNP : Str -> Gender -> Number -> Person -> {s : Case => Str ; g : Gender ; n : Number ; p : Person} =
\str,g,n,p -> {
s = \\_ => str ;
g = g ;
n = n ;
p = p
} ;
mkCN : Str -> Gender -> CommonNoun =
\str,g -> {
s = \\_,_,_ => str ;
g = g
} ;
mkVP : Str -> VerbPhrase =
\str -> {
Converb = str ;
Indicative = \\_,pol,_,_ => str ++ negStr pol ;
Nonfinite = str ;
Participle = \\_ => str
} ;
}
+90
View File
@@ -0,0 +1,90 @@
concrete SentenceFao of Sentence = CatFao ** open Prelude, ResFao, (P = ParamX) in {
lin PredVP np vp = {Converb = np.s ! Nom ++ vp.Converb;
Indicative = \\t,pol =>
let p = persNum np.n np.p
in np.s ! Nom ++ vp.Indicative ! t ! pol ! np.g ! p;
Nonfinite = np.s ! Nom ++ vp.Nonfinite;
Participle = \\t => np.s ! Nom ++ vp.Participle ! t} ;
PredSCVP sc vp = {Converb = sc.s ++ vp.Converb;
Indicative = \\t,pol => sc.s ++ vp.Indicative ! t ! pol ! Neuter ! PSg P3;
Nonfinite = sc.s ++ vp.Nonfinite;
Participle = \\t => sc.s ++ vp.Participle ! t} ;
SlashVP np vps = {
s = \\t,pol =>
let p = persNum np.n np.p in
np.s ! Nom ++ vps.Indicative ! t ! p ++ vps.particle ++ negStr pol ++ vps.sc ;
c2 = vps.c2
} ;
AdvSlash cls adv = cls ** {
s = \\t,pol => cls.s ! t ! pol ++ adv.s
} ;
SlashPrep cl prep = {
s = cl.Indicative ;
c2 = prep
} ;
SlashVS np vs sslash = {
s = \\t,pol =>
let p = persNum np.n np.p in
np.s ! Nom ++ vs.Indicative ! t ! p ++ vs.particle ++ negStr pol ++ sslash.s ;
c2 = sslash.c2
} ;
ImpVP vp = {
s = \\pol,n => negStr pol ++ vp.Nonfinite
} ;
AdvImp adv imp = {
s = \\pol,n => adv.s ++ imp.s ! pol ! n
} ;
UseCl temp pol cl =
let
tense = case temp.t of {
P.Pres => Pres ;
P.Past => Past ;
P.Fut => Pres ;
P.Cond => Past
} ;
in {
s = temp.s ++ pol.s ++ cl.Indicative ! tense ! pol.p
} ;
UseQCl temp pol qcl =
let
tense = case temp.t of {
P.Pres => Pres ;
P.Past => Past ;
P.Fut => Pres ;
P.Cond => Past
} ;
in {
s = temp.s ++ pol.s ++ qcl.s ! tense ! pol.p
} ;
UseRCl temp pol rcl =
let
tense = case temp.t of {
P.Pres => Pres ;
P.Past => Past ;
P.Fut => Pres ;
P.Cond => Past
}
in {
s = \\g,pn =>
temp.s ++ pol.s ++ rcl.s ! tense ! pol.p ! g ! pn
} ;
UseSlash temp pol cls =
let
tense = case temp.t of {
P.Pres => Pres ;
P.Past => Past ;
P.Fut => Pres ;
P.Cond => Past
} ;
in {
s = temp.s ++ pol.s ++ cls.s ! tense ! pol.p ;
c2 = cls.c2
} ;
EmbedS s = {s = "at" ++ s.s} ;
EmbedQS qs = {s = qs.s} ;
EmbedVP vp = {s = vp.Nonfinite} ;
AdvS adv s = {s = adv.s ++ s.s} ;
ExtAdvS adv s = {s = adv.s ++ "," ++ s.s} ;
SSubjS s1 subj s2 = {s = s1.s ++ subj.s ++ s2.s} ;
RelS s rs = {s = s.s ++ "," ++ rs.s ! Neuter ! PSg P3} ;
}
+14
View File
@@ -0,0 +1,14 @@
concrete StructuralFao of Structural = CatFao **
open ParadigmsFao, ResFao in {
lin
i_Pron = mkPron "eg" "meg" "mær" "mín" Masc Sg P1 ;
youSg_Pron = mkPron "tú" "teg" "tær" "tín" Masc Sg P2 ;
he_Pron = mkPron "hann" "hann" "honum" "hansara" Masc Sg P3 ;
she_Pron = mkPron "hon" "hana" "henni" "hennara" Fem Sg P3 ;
it_Pron = mkPron "tað" "tað" "tí" "tess" Neuter Sg P3 ;
we_Pron = mkPron "vit" "okkum" "okkum" "okkara" Masc Pl P1 ;
youPl_Pron = mkPron "tit" "tykkum" "tykkum" "tykkara" Masc Pl P2 ;
they_Pron = mkPron "teir" "teir" "teimum" "teirra" Masc Pl P3 ;
youPol_Pron = mkPron "tit" "tykkum" "tykkum" "tykkara" Masc Pl P2 ;
}
+138
View File
@@ -0,0 +1,138 @@
concrete VerbFao of Verb = CatFao ** open Prelude,ResFao in {
lin UseV v = {Converb = v.Converb ++ v.particle;
Indicative = \\t,pol,g,p => v.Indicative ! t ! p ++ v.particle ++
negStr pol ;
Nonfinite = v.Nonfinite ++ v.particle;
Participle = \\t => v.Participle ! t ++ v.particle} ;
lin ComplVV vv vp = {Converb = vv.Converb ++ vv.particle ++ vp.Nonfinite;
Indicative = \\t,pol,g,p =>
vv.Indicative ! t ! p ++ vv.particle ++ negStr pol ++ vp.Nonfinite;
Nonfinite = vv.Nonfinite ++ vv.particle ++ vp.Nonfinite;
Participle = \\t => vv.Participle ! t ++ vv.particle ++ vp.Nonfinite} ;
lin ComplVS vs s = {Converb = vs.Converb ++ vs.particle ++ "at" ++ s.s;
Indicative = \\t,pol,g,p =>
vs.Indicative ! t ! p ++ vs.particle ++ negStr pol ++ "at" ++ s.s;
Nonfinite = vs.Nonfinite ++ vs.particle ++ "at" ++ s.s;
Participle = \\t => vs.Participle ! t ++ vs.particle ++ "at" ++ s.s} ;
lin ComplVQ vq qs = {Converb = vq.Converb ++ vq.particle ++ qs.s;
Indicative = \\t,pol,g,p =>
vq.Indicative ! t ! p ++ vq.particle ++ negStr pol ++ qs.s;
Nonfinite = vq.Nonfinite ++ vq.particle ++ qs.s;
Participle = \\t => vq.Participle ! t ++ vq.particle ++ qs.s} ;
lin ComplVA va ap = {Converb = va.Converb ++ va.particle ++ ap.s ! Neuter ! Sg ! Nom;
Indicative = \\t,pol,g,p =>
va.Indicative ! t ! p ++ va.particle ++ negStr pol ++ ap.s ! g ! persNumNumber p ! Nom;
Nonfinite = va.Nonfinite ++ va.particle ++ ap.s ! Neuter ! Sg ! Nom;
Participle = \\t => va.Participle ! t ++ va.particle ++ ap.s ! Neuter ! Sg ! Nom} ;
lin AdvVP vp adv = {Converb = vp.Converb ++ adv.s;
Indicative = \\t,pol,g,p => vp.Indicative ! t ! pol ! g ! p ++ adv.s;
Nonfinite = vp.Nonfinite ++ adv.s;
Participle = \\t => vp.Participle ! t ++ adv.s} ;
lin ExtAdvVP vp adv = {Converb = vp.Converb ++ "," ++ adv.s;
Indicative = \\t,pol,g,p => vp.Indicative ! t ! pol ! g ! p ++ "," ++ adv.s;
Nonfinite = vp.Nonfinite ++ "," ++ adv.s;
Participle = \\t => vp.Participle ! t ++ "," ++ adv.s} ;
lin AdVVP adv vp = {Converb = adv.s ++ vp.Converb;
Indicative = \\t,pol,g,p => adv.s ++ vp.Indicative ! t ! pol ! g ! p;
Nonfinite = adv.s ++ vp.Nonfinite;
Participle = \\t => adv.s ++ vp.Participle ! t} ;
lin ComplSlash vps np = {Converb = vps.Converb ++ vps.particle
++ vps.c2.s ++ np.s ! vps.c2.c ++ vps.sc;
Indicative = \\t,pol,g,p =>
vps.Indicative ! t ! p ++ vps.particle ++
negStr pol ++
vps.c2.s ++ np.s ! vps.c2.c ++ vps.sc ;
Nonfinite = vps.Nonfinite ++ vps.particle ++ vps.c2.s ++ np.s ! vps.c2.c ++ vps.sc;
Participle = \\t => vps.Participle ! t ++ vps.particle ++ vps.c2.s ++ np.s ! vps.c2.c ++ vps.sc} ;
lin UseComp comp = {
Converb = copula ! Pres ! PPl ++ comp.s ! Masc ! Sg ;
Indicative = \\t,pol,g,p => copula ! t ! p ++
negStr pol ++
comp.s ! g ! persNumNumber p ;
Nonfinite = "vera" ++ comp.s ! Masc ! Sg ;
Participle = \\t => "verið" ++ comp.s ! Masc ! Sg
} ;
lin CompAP ap = {s = \\g,n => ap.s ! g ! n ! Nom} ;
lin CompNP np = {s = \\_,_ => np.s ! Nom} ;
lin CompAdv adv = {s = \\_,_ => adv.s} ;
lin CompCN cn = {s = \\_,n => cn.s ! Indef ! n ! Nom} ;
lin UseCopula = {
Converb = "verið" ;
Indicative = \\t,pol,_,p => copula ! t ! p ++ negStr pol ;
Nonfinite = "vera" ;
Participle = \\_ => "verið"
} ;
lin SlashV2a v = v ** {sc = []} ;
lin Slash2V3 v np = v ** {
Converb = v.Converb ++ v.particle ++ v.c2.s ++ np.s ! v.c2.c ;
Indicative = \\t,p => v.Indicative ! t ! p ++ v.particle ++ v.c2.s ++ np.s ! v.c2.c ;
Nonfinite = v.Nonfinite ++ v.particle ++ v.c2.s ++ np.s ! v.c2.c ;
Participle = \\t => v.Participle ! t ++ v.particle ++ v.c2.s ++ np.s ! v.c2.c ;
particle = [] ;
c2 = v.c3 ;
sc = []
} ;
lin Slash3V3 v np = v ** {
c2 = v.c2 ;
sc = v.c3.s ++ np.s ! v.c3.c
} ;
lin SlashV2A v ap = v ** {
c2 = v.c2 ;
sc = ap.s ! Neuter ! Sg ! Nom
} ;
lin SlashV2S v s = v ** {
c2 = v.c2 ;
sc = "at" ++ s.s
} ;
lin SlashV2Q v qs = v ** {
c2 = v.c2 ;
sc = qs.s
} ;
lin SlashV2V v vp = v ** {
c2 = v.c2 ;
sc = vp.Nonfinite
} ;
lin SlashVV vv vps = vps ** {
Converb = vv.Converb ++ vv.particle ++ vps.Nonfinite ;
Indicative = \\t,p => vv.Indicative ! t ! p ++ vv.particle ++ vps.Nonfinite ;
Nonfinite = vv.Nonfinite ++ vv.particle ++ vps.Nonfinite ;
Participle = \\t => vv.Participle ! t ++ vv.particle ++ vps.Nonfinite ;
particle = []
} ;
lin SlashV2VNP v np vps = v ** {
c2 = v.c2 ;
sc = v.c3.s ++ np.s ! v.c3.c ++ vps.Nonfinite
} ;
lin ReflVP vps =
let np = mkNP "seg" Masc Sg P3 in {
Converb = vps.Converb ++ vps.particle ++ vps.c2.s ++ np.s ! vps.c2.c ++ vps.sc ;
Indicative = \\t,pol,g,p =>
vps.Indicative ! t ! p ++ vps.particle ++ negStr pol ++ vps.c2.s ++ np.s ! vps.c2.c ++ vps.sc ;
Nonfinite = vps.Nonfinite ++ vps.particle ++ vps.c2.s ++ np.s ! vps.c2.c ++ vps.sc ;
Participle = \\t => vps.Participle ! t ++ vps.particle ++ vps.c2.s ++ np.s ! vps.c2.c ++ vps.sc
} ;
lin PassV2 v = {
Converb = "verið" ++ v.Participle ! Past ;
Indicative = \\t,pol,_,p => copula ! t ! p ++ negStr pol ++ v.Participle ! Past ;
Nonfinite = "vera" ++ v.Participle ! Past ;
Participle = \\_ => "verið" ++ v.Participle ! Past
} ;
lin AdvVPSlash vps adv = vps ** {sc = vps.sc ++ adv.s} ;
lin AdVVPSlash adv vps = vps ** {
Converb = adv.s ++ vps.Converb ;
Indicative = \\t,p => adv.s ++ vps.Indicative ! t ! p ;
Nonfinite = adv.s ++ vps.Nonfinite ;
Participle = \\t => adv.s ++ vps.Participle ! t
} ;
lin VPSlashPrep vp prep = {
Converb = vp.Converb ;
imperative = \\_ => vp.Nonfinite ;
Indicative = \\t,p => vp.Indicative ! t ! Pos ! Masc ! p ;
Nonfinite = vp.Nonfinite ;
Participle = vp.Participle ;
particle = [] ;
c2 = prep ;
sc = []
} ;
}
+1
View File
@@ -66,6 +66,7 @@ concrete CatFin of Cat = CommonX ** open ResFin, StemFin, Prelude in {
Predet = {s : Number => NPForm => Str} ;
Quant = {s1,sp : Number => Case => Str ; s2 : Harmony => Str ; isPoss : Bool ; isDef : Bool ; isNeg : Bool} ;
Card = {s : Number => Case => Str ; n : Number} ;
ACard = {s : Number => Case => Str ; n : Number} ;
Num = {s : Number => Case => Str ; isNum : Bool ; n : Number} ;
-- Numeral
+3
View File
@@ -29,6 +29,9 @@ lin
is_wrong_VP = mkVP (ParadigmsFin.mkAdv "väärässä") ;
n_units_AP card cn a = mkAP (lin AdA (mkUtt (lin NP (mkNP <lin Card card : Card> (lin CN cn))))) (lin A a) ;
n_units_of_NP card cn np =
mkNP (mkNP <lin Card card : Card> (lin CN cn))
(SyntaxFin.mkAdv part_Prep (lin NP np)) ;
bottle_of_CN np = mkCN (lin N2 (mkN2 (mkN "pullo") (mkPrep partitive))) (lin NP np) | mkCN (lin N2 (mkN2 (mkN "pullollinen") (mkPrep partitive))) (lin NP np);
cup_of_CN np = mkCN (lin N2 (mkN2 (mkN "kuppi") (mkPrep partitive))) (lin NP np) | mkCN (lin N2 (mkN2 (mkN "kupillinen") (mkPrep partitive))) (lin NP np) ;
+189 -6
View File
@@ -3,15 +3,23 @@
concrete ExtendFin of Extend =
CatFin ** ExtendFunctor - [
VPI2,VPS2,MkVPS,MkVPS2,ConjVPS2,ComplVPS2, ConsVPS, BaseVPS, ListVPS, VPS, ConjVPS,PredVPS,
MkVPI,BaseVPI,ConsVPI,ConjVPI,ComplVPIVV,
MkVPI2,ConjVPI2,ComplVPI2,ComplVPIVV
,ListComp, BaseComp, ConsComp, ConjComp
,ListImp, BaseImp, ConsImp, ConjImp
,ExistCN, ExistMassCN, ICompAP, ByVP
,CompoundN, GenNP, GenIP, GenRP, AdvIsNP, EmbedSSlash
,CompoundN, CompoundAP, GenNP, GenIP, GenRP, AdvIsNP, EmbedSSlash
,PassVPSlash, PassAgentVPSlash
,CardCNCard
,UttAccNP
,AdjAsCN, AdjAsNP
,AdjAsCN, AdjAsNP, GerundCN, GerundNP, GerundAdv
,ApposNP
,PresPartAP, PastPartAP
,PresPartAP, PastPartAP, PastPartAgentAP
,PositAdVAdj, ProgrVPSlash
,RNP,RNPList,ReflPron,ReflPoss,ReflVPSlash,ReflVPS2,ReflA2
,PredetRNP,AdvRNP,AdvRVP,AdvRAP,PossPronRNP
,Base_rr_RNP,Base_nr_RNP,Base_rn_RNP,Cons_rr_RNP,Cons_nr_RNP,ConjRNP
]
with
(Grammar = GrammarFin) **
@@ -97,13 +105,24 @@ oper
} ;
BaseVPI = twoTable2 VVType Agr ;
ConsVPI = consrTable2 VVType Agr comma ;
BaseVPI x y = {
s1 = x.s ;
s2 = y.s ;
sc = x.sc
} ;
ConsVPI x xs = {
s1 = \\vt,agr => x.s ! vt ! agr ++ comma ;
s2 = \\vt,agr => xs.s1 ! vt ! agr ++ xs.s2 ! vt ! agr ;
sc = x.sc
} ;
ConjVPI conj xs = {
s = \\vt,agr => conj.s1 ++ xs.s1 ! vt ! agr ++ conj.s2 ++ xs.s2 ! vt ! agr ;
sc = xs.sc
} ;
MkVPI vp = mkVPI vp ;
ConjVPI c xs = conjunctDistrTable2 VVType Agr c xs ;
ComplVPIVV vv vpi =
S.insertObj (\\_,_,a => vpi.s ! vv.vi ! a)
(S.predV (vv ** {sc = case vpi.sc of {
@@ -112,6 +131,16 @@ oper
) ;
lincat [Comp] = {s1,s2 : Agr => Str} ;
lin BaseComp = twoTable Agr ;
ConsComp = consrTable Agr comma ;
ConjComp conj xs = conjunctDistrTable Agr conj xs ;
lincat [Imp] = {s1,s2 : Polarity => Agr => Str} ;
lin BaseImp = twoTable2 Polarity Agr ;
ConsImp = consrTable2 Polarity Agr comma ;
ConjImp conj xs = conjunctDistrTable2 Polarity Agr conj xs ;
-------- two-place verb conjunction
lincat
@@ -163,6 +192,13 @@ lin
h = n2.h
} ;
CompoundAP n a =
let prefix = (S.snoun2nounBind n).s ! NCompound in {
s = \\_,af => prefix ++ BIND ++ sAdjFull2nforms Posit a ! af ;
p = [] ;
hasPrefix = True
} ;
---- copied from VerbFin.CompAP, should be shared
ICompAP ap = {
s = \\agr =>
@@ -262,6 +298,145 @@ lin PastPartAP vps = {
p = vps.c2.s.p1 ;
hasPrefix = False
} ;
PastPartAgentAP vps np = {
s = \\_,nf => np.s ! NPCase Gen ++ preCompVP (lin VP vps) (AgentPart (AN nf)) ;
p = vps.c2.s.p1 ;
hasPrefix = False
} ;
lin GerundCN vp = {
s = \\nf => let infForm : InfForm =
case nf of {
NCase _ Part => Inf4Part ;
_ => Inf4Nom
}
in infVP vp.s.sc Pos (agrP3 (numN nf)) vp infForm ;
postmod = \\_ => [] ;
h = Back
} ;
GerundNP vp =
MassNP {
s = \\nf => let infForm : InfForm =
case nf of {
NCase _ Part => Inf4Part ;
_ => Inf4Nom
}
in infVP vp.s.sc Pos (agrP3 (numN nf)) vp infForm ;
postmod = \\_ => [] ;
h = Back
} ;
GerundAdv vp = {
s = infVP vp.s.sc Pos (agrP3 Sg) vp Inf3Adess
} ;
PositAdVAdj a = {s = a.s ! Posit ! sAAdv} ;
lin ProgrVPSlash vp =
let
inf = (sverb2verbSep vp.s).s ! Inf Inf3Iness ;
on = predV olla
in vp ** {
s = on.s ;
s2 = \\b,p,a => inf ++ vp.s2 ! b ! p ! a ;
} ;
lincat
RNP = {s : Agr => NPForm => Str ; isPron : Bool ; isNeg : Bool} ;
RNPList = {s1,s2 : Agr => NPForm => Str ; isPron : Bool ; isNeg : Bool} ;
lin ReflPron = {
s = \\agr,npf => (reflPron agr).s ! npf ;
isPron = True ;
isNeg = False
} ;
ReflPoss num cn = {
s = \\agr, npf =>
let
quant : Quant = lin Quant { -- possessive pronoun with suffix only
s2 : Harmony => Str = \\harm => possSuffixGen harm agr ;
s1,sp = \\_,_ => [] ; isNum,isNeg = False ; isPoss,isDef = True
}
in (DetCN (DetQuant quant num) cn).s ! npf ;
isPron = False ;
isNeg = False
} ;
ReflVPS2 vps rnp = {
s = \\agr => vps.s ! agr ++ appCompl True vps.p vps.c2 (rnp2np agr rnp) ;
sc = vps.sc ;
h = vps.h
} ;
PredetRNP pred rnp = {
s = \\agr,npf => pred.s ! complNumAgr agr ! npf ++ rnp.s ! agr ! npf ;
isPron = False ;
isNeg = rnp.isNeg
} ;
AdvRNP np prep rnp = {
s = \\agr,npf => np.s ! npf ++ appCompl True Pos prep (rnp2np agr rnp) ;
isPron = False ;
isNeg = orB np.isNeg rnp.isNeg
} ;
AdvRVP vp prep rnp =
insertObj (\\_,b,agr => appCompl True b prep (rnp2np agr rnp)) vp ;
AdvRAP ap prep rnp = ap ** {
s = \\isMod,af => ap.s ! isMod ! af ++ appCompl True Pos prep (rnp2np (agrP3 Sg) rnp) ;
hasPrefix = False
} ;
PossPronRNP p num cn rnp =
let np = DetCN (DetQuant (PossPron p) num) cn in
np ** {
s = \\npf => np.s ! npf ++ rnp.s ! p.a ! NPCase Gen ;
isNeg = orB np.isNeg rnp.isNeg
} ;
Base_rr_RNP x y = {
s1 = x.s ;
s2 = y.s ;
isPron = False ;
isNeg = orB x.isNeg y.isNeg
} ;
Base_nr_RNP x y = {
s1 = \\_,npf => x.s ! npf ;
s2 = y.s ;
isPron = False ;
isNeg = orB x.isNeg y.isNeg
} ;
Base_rn_RNP x y = {
s1 = x.s ;
s2 = \\_,npf => y.s ! npf ;
isPron = False ;
isNeg = orB x.isNeg y.isNeg
} ;
Cons_rr_RNP x xs = {
s1 = \\agr,npf => x.s ! agr ! npf ++ comma ;
s2 = \\agr,npf => xs.s1 ! agr ! npf ++ xs.s2 ! agr ! npf ;
isPron = False ;
isNeg = orB x.isNeg xs.isNeg
} ;
Cons_nr_RNP x xs = {
s1 = \\_,npf => x.s ! npf ++ comma ;
s2 = \\agr,npf => xs.s1 ! agr ! npf ++ xs.s2 ! agr ! npf ;
isPron = False ;
isNeg = orB x.isNeg xs.isNeg
} ;
ConjRNP conj xs = {
s = \\agr,npf => conj.s1 ++ xs.s1 ! agr ! npf ++ conj.s2 ++ xs.s2 ! agr ! npf ;
isPron = xs.isPron ;
isNeg = xs.isNeg
} ;
oper
-- ruohoa syövä, Ranskassa valmistettu
@@ -271,4 +446,12 @@ oper
vp.s.s ! vform ++
vp.ext ;
rnp2np : Agr -> RNP -> NP ;
rnp2np agr rnp = {
s = rnp.s ! agr ;
a = agr ;
isPron = rnp.isPron ;
isNeg = rnp.isNeg
} ;
}
+1 -2
View File
@@ -148,8 +148,7 @@ lin
play_V2 = mkV2 (mkV "pelata") cpartitive ; --- leikkiä, soittaa
policeman_N = mkN "poliisi" ;
priest_N = mkN "pappi" ;
probable_AS = mkAS --- for vowel harmony
(mkA (mkN "todennäköinen") "tonennäköisempi" "todennäköisin") ; ---- sta
probable_AS = mkAS (compoundA "toden" (mkA "näköinen")) ;
queen_N = mkN "kuningatar" ;
radio_N = mk2N "radio" "radioita" ;
rain_V0 = mkV0 (mk2V "sataa" "satoi") ;
+1 -1
View File
@@ -1064,7 +1064,7 @@ oper
Transl => "niiksi" ;
Ess => "niinä" ;
Iness => "niissä" ;
Elat => "niitä" ;
Elat => "niistä" ;
Illat => "niihin" ;
Adess => "niillä" ;
Ablat => "niiltä" ;
+4
View File
@@ -36,4 +36,8 @@ lin InLN ln =
let c = case ln.extCase of {True => Adess ; False => Iness}
in {s = ln.s ! c} ;
lin AdjLN ap ln = ln ** {
s = \\c => ap.s ! True ! NCase ln.n c ++ ln.s ! c
} ;
}
+5
View File
@@ -294,6 +294,11 @@ concrete NounFin of Noun = CatFin ** open ResFin, MorphoFin, StemFin, Prelude in
isPron = False ; isNeg = det.isNeg
} ;
AdjDAP dap ap = dap ** {
s1 = \\c => dap.s1 ! c ++ ap.s ! True ! NCase dap.n c ;
sp = \\c => dap.sp ! c ++ ap.s ! False ! NCase dap.n c
} ;
DetDAP d = d ;
QuantityNP n m = {
+42 -2
View File
@@ -75,10 +75,24 @@ lin
pot3as4 n = n ;
pot3decimal d = {n = Pl ; s = \\c => d.s ! NCard (NCase Sg Nom) ++ BIND ++ tuhattaN.s ! Pl ! c} ;
pot41 = {n = Pl ; s = miljoonaN.s} ;
pot4 d = {n = Pl ; s = \\c => d.s ! NumAttr ! NCard (NCase Sg Nom) ++ nBIND d.n ++ miljoonaaN.s ! d.n ! c} ;
pot4plus d e = {
n = Pl ;
s = \\c => d.s ! NumAttr ! NCard (NCase Sg Nom) ++ nBIND d.n ++ miljoonaaN.s ! d.n ! c ++
e.s ! c
} ;
pot4as5 n = n ;
pot4decimal d = {n = Pl ; s = \\c => d.s ! NCard (NCase Sg Nom) ++ "miljoonaa"} ; -- KA: case inflection missing
pot51 = {n = Pl ; s = \\c => "miljardi"} ; -- KA: case inflection missing
pot51 = {n = Pl ; s = miljardiN.s} ;
pot5 d = {n = Pl ; s = \\c => d.s ! NumAttr ! NCard (NCase Sg Nom) ++ nBIND d.n ++ miljardiaN.s ! d.n ! c} ;
pot5plus d e = {
n = Pl ;
s = \\c => d.s ! NumAttr ! NCard (NCase Sg Nom) ++ nBIND d.n ++ miljardiaN.s ! d.n ! c ++
e.s ! c
} ;
pot5decimal d = {n = Pl ; s = \\c => d.s ! NCard (NCase Sg Nom) ++ "miljardia"} ; -- KA: case inflection missing
oper
-- co : (c,o : {s : NForm => Str}) -> {s : CardOrd => Str} = \c,o -> {
@@ -128,7 +142,7 @@ oper
(ordN "a" "sadas") ;
tuhatN = co
(snoun2nounBind (mkN "tuhat" "tuhannen" "tuhatta" "ruhantena" "tuhanteen"
(snoun2nounBind (mkN "tuhat" "tuhannen" "tuhatta" "tuhantena" "tuhanteen"
"tuhansien" "tuhansia" "tuhansina" "tuhansissa" "tuhansiin"))
(ordN "a" "tuhannes") ;
@@ -157,6 +171,32 @@ oper
}
} ;
miljoonaN = co
(snoun2nounBind (mkN "miljoona"))
(ordN "a" "miljoonas") ;
miljoonaaN = {s = table {
Sg => miljoonaN.s ;
Pl => table {
NCard (NCase Sg Nom) => "miljoonaa" ;
k => miljoonaN.s ! k
}
}
} ;
miljardiN = co
(snoun2nounBind (mkN "miljardi"))
(ordN "a" "miljardis") ;
miljardiaN = {s = table {
Sg => miljardiN.s ;
Pl => table {
NCard (NCase Sg Nom) => "miljardia" ;
k => miljardiN.s ! k
}
}
} ;
lincat
Dig = TDigit ;
+9 -1
View File
@@ -221,7 +221,15 @@ oper
= \s -> lin A {s = \\_,_ => s ; h = Back ; p = [] ; hasPrefix = False} ; ----- stemming adds bogus endings
compoundA : Str -> A -> A -- prefix glued to adjective, e.g. "hevos"+"vetoinen"
= \s,a -> lin A {s = \\d,c => s + a.s ! d ! c ; h = a.h ; p = s + a.p ; hasPrefix = a.hasPrefix} ;
= \s,a -> lin A {
s = \\d,c => s + a.s ! d ! c ;
h = a.h ;
p = case a.hasPrefix of {
True => s + a.p ;
False => []
} ;
hasPrefix = a.hasPrefix
} ;
prefixA : Str -> A -> A -- in modifying use, an uninflected glued prefix, e.g. "sähkö" for "sähköinen"
= \pr,a -> a ** {

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