|
Packit |
1f3717 |
# Suomi-malaga, suomen kielen muoto-opin kuvaus.
|
|
Packit |
1f3717 |
#
|
|
Packit |
1f3717 |
# Tekijänoikeus © 2006-2011 Hannu Väisänen (Etunimi.Sukunimi@uef.fi)
|
|
Packit |
1f3717 |
#
|
|
Packit |
1f3717 |
# Tämä ohjelma on vapaa; tätä ohjelmaa on sallittu levittää
|
|
Packit |
1f3717 |
# edelleen ja muuttaa GNU yleisen lisenssin (GPL lisenssin)
|
|
Packit |
1f3717 |
# ehtojen mukaan sellaisina kuin Free Software Foundation
|
|
Packit |
1f3717 |
# on ne julkaissut; joko Lisenssin version 2, tai (valinnan
|
|
Packit |
1f3717 |
# mukaan) minkä tahansa myöhemmän version mukaisesti.
|
|
Packit |
1f3717 |
#
|
|
Packit |
1f3717 |
# Tätä ohjelmaa levitetään siinä toivossa, että se olisi
|
|
Packit |
1f3717 |
# hyödyllinen, mutta ilman mitään takuuta; ilman edes
|
|
Packit |
1f3717 |
# hiljaista takuuta kaupallisesti hyväksyttävästä laadusta tai
|
|
Packit |
1f3717 |
# soveltuvuudesta tiettyyn tarkoitukseen. Katso GPL
|
|
Packit |
1f3717 |
# lisenssistä lisää yksityiskohtia.
|
|
Packit |
1f3717 |
#
|
|
Packit |
1f3717 |
# Tämän ohjelman mukana pitäisi tulla kopio GPL
|
|
Packit |
1f3717 |
# lisenssistä; jos näin ei ole, kirjoita osoitteeseen Free
|
|
Packit |
1f3717 |
# Software Foundation Inc., 51 Franklin Street, Fifth Floor,
|
|
Packit |
1f3717 |
# Boston, MA 02110-1301, USA.
|
|
Packit |
1f3717 |
#
|
|
Packit |
1f3717 |
# Tämän ohjeman linkittäminen staattisesti tai dynaamisesti
|
|
Packit |
1f3717 |
# muihin moduuleihin on ohjelmaan perustuvan teoksen
|
|
Packit |
1f3717 |
# tekemistä, joka on siis GPL lisenssin ehtojen alainen.
|
|
Packit |
1f3717 |
#
|
|
Packit |
1f3717 |
#
|
|
Packit |
1f3717 |
# This program is free software; you can redistribute it and/or modify
|
|
Packit |
1f3717 |
# it under the terms of the GNU General Public License as published by
|
|
Packit |
1f3717 |
# the Free Software Foundation; either version 2, or (at your option)
|
|
Packit |
1f3717 |
# any later version.
|
|
Packit |
1f3717 |
#
|
|
Packit |
1f3717 |
# This program is distributed in the hope that it will be useful, but
|
|
Packit |
1f3717 |
# WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
Packit |
1f3717 |
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
Packit |
1f3717 |
# General Public License for more details.
|
|
Packit |
1f3717 |
#
|
|
Packit |
1f3717 |
# You should have received a copy of the GNU General Public License
|
|
Packit |
1f3717 |
# along with this program; see the file COPYING. If not, write to the
|
|
Packit |
1f3717 |
# Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
|
|
Packit |
1f3717 |
# 02110-1301, USA.
|
|
Packit |
1f3717 |
#
|
|
Packit |
1f3717 |
# Linking this program statically or dynamically with other modules is
|
|
Packit |
1f3717 |
# making a combined work based on this program. Thus, the terms and
|
|
Packit |
1f3717 |
# conditions of the GNU General Public License cover the whole
|
|
Packit |
1f3717 |
# combination.
|
|
Packit |
1f3717 |
|
|
Packit |
1f3717 |
initial <>, rules # laatusana,
|
|
Packit |
1f3717 |
nimi_laatusana,
|
|
Packit |
1f3717 |
lukusana,
|
|
Packit |
1f3717 |
sanan_alku;
|
|
Packit |
1f3717 |
|
|
Packit |
1f3717 |
include "suomi.inc";
|
|
Packit |
1f3717 |
###include "sanat/luvut.mor";
|
|
Packit |
1f3717 |
|
|
Packit |
1f3717 |
define @teonsana := <teonsana, kieltosana>;
|
|
Packit |
1f3717 |
|
|
Packit |
1f3717 |
define @ehtotapa := <ehtotapa, ehtotapa_ttA, ehtotapa_tA>;
|
|
Packit |
1f3717 |
|
|
Packit |
1f3717 |
define @mahtotapa :=
|
|
Packit |
1f3717 |
mahtotapa_le_kielto, mahtotapa_ne_kielto,
|
|
Packit |
1f3717 |
mahtotapa_re_kielto, mahtotapa_se_kielto,
|
|
Packit |
1f3717 |
mahtotapa_ttA, mahtotapa_tA>;
|
|
Packit |
1f3717 |
|
|
Packit |
1f3717 |
define @käskytapa :=
|
|
Packit |
1f3717 |
käskytapa_tA>;
|
|
Packit |
1f3717 |
|
|
Packit |
1f3717 |
define @nimitapa_1 :=
|
|
Packit |
1f3717 |
nimitapa_1_nA, nimitapa_1_rA, nimitapa_1_tA>;
|
|
Packit |
1f3717 |
define @nimitapa_2 := <nimitapa_2, nimitapa_2_ttA, nimitapa_2_tA>;
|
|
Packit |
1f3717 |
define @nimitapa_3 := <nimitapa_3, nimitapa_3_saama, nimitapa_3_ttA, nimitapa_3_tA>;
|
|
Packit |
1f3717 |
|
|
Packit |
1f3717 |
define @voittoaste := <voittoaste>;
|
|
Packit |
1f3717 |
define @yliaste := <yliaste>;
|
|
Packit |
1f3717 |
|
|
Packit |
1f3717 |
|
|
Packit |
1f3717 |
define @tekijämuodot := @kestämän_tekijäpääte + @tositavan_tekijäpääte_4 + @kertoman_tekijäpääte
|
|
Packit |
1f3717 |
+ @ehtotapa + @mahtotapa + @käskytapa;
|
|
Packit |
1f3717 |
|
|
Packit |
1f3717 |
# Neljäs nimitapa katsotaan teonsanasta johdetuksi nimisanaksi.
|
|
Packit |
1f3717 |
define @nimitavat := @nimitapa_1 + @nimitapa_2 + @nimitapa_3 + <nimitapa_5>;
|
|
Packit |
1f3717 |
#define @nimitavat := @nimitapa_1 + @nimitapa_2 + @nimitapa_3 + <nimitapa_4, nimitapa_5>;
|
|
Packit |
1f3717 |
|
|
Packit |
1f3717 |
define @laatutavat := @laatutapa_1 + @laatutapa_2;
|
|
Packit |
1f3717 |
|
|
Packit |
1f3717 |
|
|
Packit |
1f3717 |
|
|
Packit |
1f3717 |
# Sääntö sanan_alku on muokattu Harri Pitkäsen Voikko-versiosta.
|
|
Packit |
1f3717 |
#
|
|
Packit |
1f3717 |
combi_rule sanan_alku ($vasen, $oikea, $sana):
|
|
Packit |
1f3717 |
####define $profile := transmit ("sanan_alku ($vasen, $oikea, $sana):");
|
|
Packit |
1f3717 |
# define $a := transmit ($vasen);
|
|
Packit |
1f3717 |
# define $b := transmit ($oikea);
|
|
Packit |
1f3717 |
# define $c := transmit ($sana);
|
|
Packit |
1f3717 |
|
|
Packit |
1f3717 |
#if ($oikea.luokka in
|
|
Packit |
1f3717 |
# asemosana, seikkasana, suhdesana, nimisana> + @erisnimi) then
|
|
Packit |
1f3717 |
# define $b := transmit ("§§§ " + value_string($oikea.luokka));
|
|
Packit |
1f3717 |
#end;
|
|
Packit |
1f3717 |
|
|
Packit |
1f3717 |
define $res := <[alku: $sana] + $oikea>;
|
|
Packit |
1f3717 |
|
|
Packit |
1f3717 |
if $oikea.luokka = nimisana then
|
|
Packit |
1f3717 |
if (tavuviiva in $oikea.jatko) then
|
|
Packit |
1f3717 |
result $res, rules tavuviiva;
|
|
Packit |
1f3717 |
end;
|
|
Packit |
1f3717 |
if (yhdyssana in $oikea.jatko) and
|
|
Packit |
1f3717 |
(($oikea.tiedot = nil) or not ((ei_ys in $oikea.tiedot) or (ei_ysa in $oikea.tiedot))) then
|
|
Packit |
1f3717 |
result $res, rules yhdyssana;
|
|
Packit |
1f3717 |
end;
|
|
Packit |
1f3717 |
if (@nimisanasta_johdettu_laatusana * $oikea.jatko /= <>) then
|
|
Packit |
1f3717 |
result $res, rules nimisanasta_johdettu_laatusana;
|
|
Packit |
1f3717 |
end;
|
|
Packit |
1f3717 |
if (@nimisanasta_johdettu_seikkasana * $oikea.jatko /= <>) then
|
|
Packit |
1f3717 |
result $res, rules nimisanasta_johdettu_seikkasana;
|
|
Packit |
1f3717 |
end;
|
|
Packit |
1f3717 |
if (@nimi_laatusanan_johdin * $oikea.jatko /= <>) then
|
|
Packit |
1f3717 |
result $res, rules nimi_laatusanan_johdin;
|
|
Packit |
1f3717 |
end;
|
|
Packit |
1f3717 |
if (omistusliite in $oikea.jatko) then
|
|
Packit |
1f3717 |
result $res, rules omistusliite;
|
|
Packit |
1f3717 |
end;
|
|
Packit |
1f3717 |
if (liitesana in $oikea.jatko) then
|
|
Packit |
1f3717 |
result $res, rules liitesana;
|
|
Packit |
1f3717 |
end;
|
|
Packit |
1f3717 |
if (loppu in $oikea.jatko) then
|
|
Packit |
1f3717 |
result $res, accept;
|
|
Packit |
1f3717 |
end;
|
|
Packit |
1f3717 |
result $res, rules sijapääte;
|
|
Packit |
1f3717 |
|
|
Packit |
1f3717 |
elseif ($oikea.luokka = laatusana) then
|
|
Packit |
1f3717 |
if (omistusliite in $oikea.jatko) then
|
|
Packit |
1f3717 |
result $res, rules omistusliite;
|
|
Packit |
1f3717 |
end;
|
|
Packit |
1f3717 |
if (liitesana in $oikea.jatko) then
|
|
Packit |
1f3717 |
result $res, rules liitesana;
|
|
Packit |
1f3717 |
end;
|
|
Packit |
1f3717 |
# Arka+mainen, halpa+mainen, oiva+llinen, täyde+llinen (= täysi + johdin_llinen), yms.
|
|
Packit |
1f3717 |
if (@nimi_laatusanan_johdin * $oikea.jatko /= <>) then
|
|
Packit |
1f3717 |
result $res, rules nimi_laatusanan_johdin;
|
|
Packit |
1f3717 |
end;
|
|
Packit |
1f3717 |
if (@voittoaste + @yliaste * $oikea.jatko /= <>) then
|
|
Packit |
1f3717 |
result $res, rules voitto_yliaste;
|
|
Packit |
1f3717 |
end;
|
|
Packit |
1f3717 |
if (@laatusanasta_johdettu_nimisana * $oikea.jatko /= <>) then
|
|
Packit |
1f3717 |
result $res, rules laatusanasta_johdettu_nimisana;
|
|
Packit |
1f3717 |
end;
|
|
Packit |
1f3717 |
if (@laatusanasta_johdettu_laatusana * $oikea.jatko /= <>) then
|
|
Packit |
1f3717 |
result $res, rules laatusanasta_johdettu_laatusana;
|
|
Packit |
1f3717 |
end;
|
|
Packit |
1f3717 |
if (loppu in $oikea.jatko) then
|
|
Packit |
1f3717 |
result $res, accept;
|
|
Packit |
1f3717 |
end;
|
|
Packit |
1f3717 |
if (tavuviiva in $oikea.jatko) then
|
|
Packit |
1f3717 |
result $res, rules tavuviiva;
|
|
Packit |
1f3717 |
end;
|
|
Packit |
1f3717 |
# if (yhdyssana in $oikea.jatko) then
|
|
Packit |
1f3717 |
if (yhdyssana in $oikea.jatko) and
|
|
Packit |
1f3717 |
(($oikea.tiedot = nil) or not ((ei_ys in $oikea.tiedot) or (ei_ysa in $oikea.tiedot))) then
|
|
Packit |
1f3717 |
result $res, rules yhdyssana;
|
|
Packit |
1f3717 |
# result $res, rules inen_päätteinen_laatusana;
|
|
Packit |
1f3717 |
end;
|
|
Packit |
1f3717 |
result $res, rules sijapääte;
|
|
Packit |
1f3717 |
|
|
Packit |
1f3717 |
elseif ($oikea.luokka = teonsana) then
|
|
Packit |
1f3717 |
#define $a := transmit ($oikea);
|
|
Packit |
1f3717 |
if (liitesana in $oikea.jatko) then
|
|
Packit |
1f3717 |
if (($oikea.tapaluokka = käskytapa) and
|
|
Packit |
1f3717 |
($oikea.tekijä = 2) and
|
|
Packit |
1f3717 |
($oikea.luku = yksikkö)) then
|
|
Packit |
1f3717 |
result $res, rules liitesana_ei_kO;
|
|
Packit |
1f3717 |
else
|
|
Packit |
1f3717 |
result $res, rules liitesana;
|
|
Packit |
1f3717 |
end;
|
|
Packit |
1f3717 |
end;
|
|
Packit |
1f3717 |
if (loppu in $oikea.jatko) then
|
|
Packit |
1f3717 |
result $res, accept;
|
|
Packit |
1f3717 |
end;
|
|
Packit |
1f3717 |
if (tavuviiva in $oikea.jatko) then
|
|
Packit |
1f3717 |
result $res, rules tavuviiva;
|
|
Packit |
1f3717 |
end;
|
|
Packit |
1f3717 |
if (@teonsanasta_johdettu_teonsana * $oikea.jatko /= <>) then
|
|
Packit |
1f3717 |
result $res, rules teonsanan_johdos_teonsana;
|
|
Packit |
1f3717 |
end;
|
|
Packit |
1f3717 |
# if (@tekijämuodot * $oikea.jatko /= <>) then
|
|
Packit |
1f3717 |
# result $res, rules tekijämuodot;
|
|
Packit |
1f3717 |
# end;
|
|
Packit |
1f3717 |
# if (@nimitavat * $oikea.jatko /= <>) then
|
|
Packit |
1f3717 |
# result $res, rules nimitavat;
|
|
Packit |
1f3717 |
# end;
|
|
Packit |
1f3717 |
# if (@laatutavat * $oikea.jatko /= <>) then
|
|
Packit |
1f3717 |
# result $res, rules laatutavat;
|
|
Packit |
1f3717 |
# end;
|
|
Packit |
1f3717 |
# result $res, rules teonsanan_johdos_nimisana, teonsanan_johdos_laatusana;
|
|
Packit |
1f3717 |
# Tämä on nopeampi kuin kaikki erikseen!
|
|
Packit |
1f3717 |
result $res, rules tekijämuodot, nimitavat, laatutavat,
|
|
Packit |
1f3717 |
teonsanan_johdos_nimisana, teonsanan_johdos_laatusana;
|
|
Packit |
1f3717 |
elseif $oikea.luokka = lyhenne then
|
|
Packit |
1f3717 |
if (kaksoispiste in $oikea.jatko) then
|
|
Packit |
1f3717 |
result $res, rules kaksoispiste;
|
|
Packit |
1f3717 |
end;
|
|
Packit |
1f3717 |
if (tavuviiva in $oikea.jatko) then
|
|
Packit |
1f3717 |
result $res, rules tavuviiva;
|
|
Packit |
1f3717 |
end;
|
|
Packit |
1f3717 |
if (loppu in $oikea.jatko) then
|
|
Packit |
1f3717 |
result $res, accept;
|
|
Packit |
1f3717 |
end;
|
|
Packit |
1f3717 |
# result $res, rules kaksoispiste, tavuviiva, loppu;
|
|
Packit |
1f3717 |
elseif $oikea.luokka in @erisnimi then
|
|
Packit |
1f3717 |
if (omistusliite in $oikea.jatko) then
|
|
Packit |
1f3717 |
result $res, rules omistusliite;
|
|
Packit |
1f3717 |
end;
|
|
Packit |
1f3717 |
if (liitesana in $oikea.jatko) then
|
|
Packit |
1f3717 |
result $res, rules liitesana;
|
|
Packit |
1f3717 |
end;
|
|
Packit |
1f3717 |
if (tavuviiva in $oikea.jatko) then
|
|
Packit |
1f3717 |
result $res, rules tavuviiva;
|
|
Packit |
1f3717 |
end;
|
|
Packit |
1f3717 |
if (loppu in $oikea.jatko) then
|
|
Packit |
1f3717 |
result $res, accept;
|
|
Packit |
1f3717 |
end;
|
|
Packit |
1f3717 |
if ((johdin_lAinen in $oikea.jatko or johdin_mAinen in $oikea.jatko)
|
|
Packit |
1f3717 |
and ($oikea.luokka in <paikannimi, sukunimi>)) then
|
|
Packit |
1f3717 |
result $res, rules paikannimen_ja_sukunimen_lainen_johdin;
|
|
Packit |
1f3717 |
end;
|
|
Packit |
1f3717 |
result $res, rules erisnimen_sijapääte;
|
|
Packit |
1f3717 |
elseif $oikea.luokka in <huudahdussana, sidesana> then
|
|
Packit |
1f3717 |
if (tavuviiva in $oikea.jatko) then
|
|
Packit |
1f3717 |
result $res, rules tavuviiva;
|
|
Packit |
1f3717 |
end;
|
|
Packit |
1f3717 |
if (loppu in $oikea.jatko) then
|
|
Packit |
1f3717 |
result $res, accept;
|
|
Packit |
1f3717 |
end;
|
|
Packit |
1f3717 |
result $res, rules liitesana;
|
|
Packit |
1f3717 |
elseif $oikea.luokka = etuliite then
|
|
Packit |
1f3717 |
if (kieltosana in $oikea.jatko) then
|
|
Packit |
1f3717 |
result $res, rules kieltosana;
|
|
Packit |
1f3717 |
end;
|
|
Packit |
1f3717 |
if (nimisana in $oikea.jatko) then
|
|
Packit |
1f3717 |
result $res, rules nimisana, teonsanasta_johdettu_nimisana,
|
|
Packit |
1f3717 |
paikannimen_ja_sukunimen_lainen_johdos;
|
|
Packit |
1f3717 |
if (not (teonsana in $oikea.jatko)) then
|
|
Packit |
1f3717 |
result $res, rules teonsana_teonsanasta_johdettu_nimisana;
|
|
Packit |
1f3717 |
end;
|
|
Packit |
1f3717 |
end;
|
|
Packit |
1f3717 |
if (laatusana in $oikea.jatko) then
|
|
Packit |
1f3717 |
result $res, rules laatusana, teonsanasta_johdettu_laatusana;
|
|
Packit |
1f3717 |
if (not (teonsana in $oikea.jatko)) then
|
|
Packit |
1f3717 |
result $res, rules teonsana_teonsanasta_johdettu_laatusana;
|
|
Packit |
1f3717 |
end;
|
|
Packit |
1f3717 |
end;
|
|
Packit |
1f3717 |
if (nimi_laatusana in $oikea.jatko) then
|
|
Packit |
1f3717 |
result $res, rules nimi_laatusana;
|
|
Packit |
1f3717 |
if (not (nimisana in $oikea.jatko)) then
|
|
Packit |
1f3717 |
result $res, rules nimisana, teonsanasta_johdettu_nimisana;
|
|
Packit |
1f3717 |
end;
|
|
Packit |
1f3717 |
if (not (laatusana in $oikea.jatko)) then
|
|
Packit |
1f3717 |
result $res, rules laatusana, teonsanasta_johdettu_laatusana;
|
|
Packit |
1f3717 |
end;
|
|
Packit |
1f3717 |
end;
|
|
Packit |
1f3717 |
if (teonsana in $oikea.jatko) then
|
|
Packit |
1f3717 |
result $res, rules teonsana;
|
|
Packit |
1f3717 |
end;
|
|
Packit |
1f3717 |
# Tavuviiva ja etuliite ovat aina jatkossa eli niitä ei tarvitse testata.
|
|
Packit |
1f3717 |
result $res, rules tavuviiva, etuliite;
|
|
Packit |
1f3717 |
elseif $oikea.luokka = kieltosana then
|
|
Packit |
1f3717 |
if (loppu in $oikea.jatko) then
|
|
Packit |
1f3717 |
result $res, accept;
|
|
Packit |
1f3717 |
end;
|
|
Packit |
1f3717 |
result $res, rules liitesana, liitesana_kä, tavuviiva;
|
|
Packit |
1f3717 |
elseif $oikea.luokka = asemosana then
|
|
Packit |
1f3717 |
if (loppu in $oikea.jatko) then
|
|
Packit |
1f3717 |
result $res, accept;
|
|
Packit |
1f3717 |
end;
|
|
Packit |
1f3717 |
result $res, rules asemosanan_sijapääte, liitesana, tavuviiva, voitto_yliaste;
|
|
Packit |
1f3717 |
elseif $oikea.luokka in <seikkasana, suhdesana> then
|
|
Packit |
1f3717 |
if (loppu in $oikea.jatko) then
|
|
Packit |
1f3717 |
result $res, accept;
|
|
Packit |
1f3717 |
end;
|
|
Packit |
1f3717 |
if (liitesana in $oikea.jatko) then
|
|
Packit |
1f3717 |
result $res, rules liitesana;
|
|
Packit |
1f3717 |
end;
|
|
Packit |
1f3717 |
if (omistusliite in $oikea.jatko) then
|
|
Packit |
1f3717 |
result $res, rules omistusliite;
|
|
Packit |
1f3717 |
end;
|
|
Packit |
1f3717 |
if (tavuviiva in $oikea.jatko) then
|
|
Packit |
1f3717 |
result $res, rules tavuviiva;
|
|
Packit |
1f3717 |
end;
|
|
Packit |
1f3717 |
result $res, rules sijapääte;
|
|
Packit |
1f3717 |
elseif $oikea.luokka in @erisnimi then
|
|
Packit |
1f3717 |
if (omistusliite in $oikea.jatko) then
|
|
Packit |
1f3717 |
result $res, rules omistusliite;
|
|
Packit |
1f3717 |
end;
|
|
Packit |
1f3717 |
if (liitesana in $oikea.jatko) then
|
|
Packit |
1f3717 |
result $res, rules liitesana;
|
|
Packit |
1f3717 |
end;
|
|
Packit |
1f3717 |
if (tavuviiva in $oikea.jatko) then
|
|
Packit |
1f3717 |
result $res, rules tavuviiva;
|
|
Packit |
1f3717 |
end;
|
|
Packit |
1f3717 |
if (loppu in $oikea.jatko) then
|
|
Packit |
1f3717 |
result $res, accept;
|
|
Packit |
1f3717 |
end;
|
|
Packit |
1f3717 |
if ((johdin_lAinen in $oikea.jatko) and ($oikea.luokka in <paikannimi, sukunimi>)) then
|
|
Packit |
1f3717 |
result $res, rules paikannimen_ja_sukunimen_lainen_johdin;
|
|
Packit |
1f3717 |
end;
|
|
Packit |
1f3717 |
result $res, rules erisnimen_sijapääte;
|
|
Packit |
1f3717 |
end;
|
|
Packit |
1f3717 |
#define $b := transmit (<"c"> + <$oikea>);
|
|
Packit |
1f3717 |
#define $c := transmit (<"d"> + <$sana>);
|
|
Packit |
1f3717 |
stop;
|
|
Packit |
1f3717 |
end;
|
|
Packit |
1f3717 |
|
|
Packit |
1f3717 |
|
|
Packit |
1f3717 |
combi_rule etuliite ($vasen, $oikea, $sana, $n):
|
|
Packit |
1f3717 |
####define $profile := transmit ("etuliite ($vasen, $oikea, $sana, $n):");
|
|
Packit |
1f3717 |
? $oikea.luokka = etuliite;
|
|
Packit |
1f3717 |
|
|
Packit |
1f3717 |
#define $a := transmit ($vasen);
|
|
Packit |
1f3717 |
#define $b := transmit (<$oikea> + <$sana> + <"">);
|
|
Packit |
1f3717 |
|
|
Packit |
1f3717 |
define $i := $n - 1;
|
|
Packit |
1f3717 |
|
|
Packit |
1f3717 |
#assert ($i = length($vasen));
|
|
Packit |
1f3717 |
|
|
Packit |
1f3717 |
? ($oikea.luokka in $vasen.$i.jatko);
|
|
Packit |
1f3717 |
|
|
Packit |
1f3717 |
? (($vasen.$i.tiedot = nil) or not ((ei_ys in $vasen.$i.tiedot) or (ei_ysa in $vasen.$i.tiedot)));
|
|
Packit |
1f3717 |
? (($oikea.tiedot = nil) or not ((ei_ys in $oikea.tiedot) or (ei_ysj in $oikea.tiedot)));
|
|
Packit |
1f3717 |
|
|
Packit |
1f3717 |
define $res := $vasen + <[alku: $sana] + $oikea>;
|
|
Packit |
1f3717 |
|
|
Packit |
1f3717 |
# Ehkei-tyyppiset sanat eivät voi olla yhdyssanojen osana.
|
|
Packit |
1f3717 |
# if (kieltosana in $oikea.jatko) then
|
|
Packit |
1f3717 |
# result $r, rules kieltosana;
|
|
Packit |
1f3717 |
# end;
|
|
Packit |
1f3717 |
if (nimisana in $oikea.jatko) then
|
|
Packit |
1f3717 |
result $res, rules nimisana, teonsanasta_johdettu_nimisana,
|
|
Packit |
1f3717 |
paikannimen_ja_sukunimen_lainen_johdos;
|
|
Packit |
1f3717 |
if (not (teonsana in $oikea.jatko)) then
|
|
Packit |
1f3717 |
result $res, rules teonsana_teonsanasta_johdettu_nimisana;
|
|
Packit |
1f3717 |
end;
|
|
Packit |
1f3717 |
end;
|
|
Packit |
1f3717 |
if (laatusana in $oikea.jatko) then
|
|
Packit |
1f3717 |
result $res, rules laatusana, teonsanasta_johdettu_laatusana;
|
|
Packit |
1f3717 |
if (not (teonsana in $oikea.jatko)) then
|
|
Packit |
1f3717 |
result $res, rules teonsana_teonsanasta_johdettu_laatusana;
|
|
Packit |
1f3717 |
end;
|
|
Packit |
1f3717 |
end;
|
|
Packit |
1f3717 |
if (nimi_laatusana in $oikea.jatko) then
|
|
Packit |
1f3717 |
result $res, rules nimi_laatusana;
|
|
Packit |
1f3717 |
if (not (nimisana in $oikea.jatko)) then
|
|
Packit |
1f3717 |
result $res, rules nimisana, teonsanasta_johdettu_nimisana;
|
|
Packit |
1f3717 |
end;
|
|
Packit |
1f3717 |
if (not (laatusana in $oikea.jatko)) then
|
|
Packit |
1f3717 |
result $res, rules laatusana, teonsanasta_johdettu_laatusana;
|
|
Packit |
1f3717 |
end;
|
|
Packit |
1f3717 |
end;
|
|
Packit |
1f3717 |
if (teonsana in $oikea.jatko) then
|
|
Packit |
1f3717 |
result $res, rules teonsana;
|
|
Packit |
1f3717 |
end;
|
|
Packit |
1f3717 |
|
|
Packit |
1f3717 |
# Tavuviiva ja etuliite ovat aina jatkossa eli niitä ei tarvitse testata.
|
|
Packit |
1f3717 |
#
|
|
Packit |
1f3717 |
result $res, rules tavuviiva, etuliite;
|
|
Packit |
1f3717 |
end;
|
|
Packit |
1f3717 |
|
|
Packit |
1f3717 |
|
|
Packit |
1f3717 |
combi_rule nimisana ($vasen, $oikea, $sana, $n):
|
|
Packit |
1f3717 |
####define $profile := transmit ("nimisana ($vasen, $oikea, $sana, $n):");
|
|
Packit |
1f3717 |
define $i := $n - 1;
|
|
Packit |
1f3717 |
|
|
Packit |
1f3717 |
#assert ($i = length($vasen));
|
|
Packit |
1f3717 |
|
|
Packit |
1f3717 |
define $res := $vasen + <[alku: $sana] + $oikea>;
|
|
Packit |
1f3717 |
|
|
Packit |
1f3717 |
# Esim. (koillis)puolitse, (maan)teitse, (sähkö)postitse.
|
|
Packit |
1f3717 |
#
|
|
Packit |
1f3717 |
if ($oikea.luokka = seikkasana and $oikea.tiedot /= nil and
|
|
Packit |
1f3717 |
ys_perusosa in $oikea.tiedot and $vasen /= <>) then
|
|
Packit |
1f3717 |
if (loppu in $oikea.jatko) then
|
|
Packit |
1f3717 |
result $res, accept;
|
|
Packit |
1f3717 |
end;
|
|
Packit |
1f3717 |
if (liitesana in $oikea.jatko) then
|
|
Packit |
1f3717 |
result $res, rules liitesana;
|
|
Packit |
1f3717 |
end;
|
|
Packit |
1f3717 |
if (omistusliite in $oikea.jatko) then
|
|
Packit |
1f3717 |
result $res, rules omistusliite;
|
|
Packit |
1f3717 |
end;
|
|
Packit |
1f3717 |
result $res, rules ei_ys_sijapääte;
|
|
Packit |
1f3717 |
end;
|
|
Packit |
1f3717 |
|
|
Packit |
1f3717 |
? $oikea.luokka = nimisana;
|
|
Packit |
1f3717 |
|
|
Packit |
1f3717 |
#define $n1 := transmit (<"nimisana1"> + <$vasen.$i.jatko>);
|
|
Packit |
1f3717 |
#define $n2 := transmit (<"nimisana2"> + <$oikea.luokka>);
|
|
Packit |
1f3717 |
#define $n3 := transmit (<"nimisana3"> + <$sana>);
|
|
Packit |
1f3717 |
#define $n4 := transmit (<"nimisana4"> + <($oikea.luokka in $vasen.$i.jatko)>);
|
|
Packit |
1f3717 |
#define $n5 := transmit (<"nimisana5"> + <$oikea.tiedot>);
|
|
Packit |
1f3717 |
|
|
Packit |
1f3717 |
? $oikea.luokka in $vasen.$i.jatko;
|
|
Packit |
1f3717 |
? yhdyssana_oikein ($vasen, $oikea, $i);
|
|
Packit |
1f3717 |
### ? ($oikea.tiedot = nil) or not (ei_ys in $oikea.tiedot); # Ei toimi!
|
|
Packit |
1f3717 |
|
|
Packit |
1f3717 |
if (tavuviiva in $oikea.jatko) then
|
|
Packit |
1f3717 |
result $res, rules tavuviiva;
|
|
Packit |
1f3717 |
end;
|
|
Packit |
1f3717 |
if (yhdyssana in $oikea.jatko) then
|
|
Packit |
1f3717 |
result $res, rules yhdyssana;
|
|
Packit |
1f3717 |
end;
|
|
Packit |
1f3717 |
if (@nimisanasta_johdettu_laatusana * $oikea.jatko /= <>) then
|
|
Packit |
1f3717 |
result $res, rules nimisanasta_johdettu_laatusana;
|
|
Packit |
1f3717 |
end;
|
|
Packit |
1f3717 |
if (@nimisanasta_johdettu_seikkasana * $oikea.jatko /= <>) then
|
|
Packit |
1f3717 |
result $res, rules nimisanasta_johdettu_seikkasana;
|
|
Packit |
1f3717 |
end;
|
|
Packit |
1f3717 |
if (@nimi_laatusanan_johdin * $oikea.jatko /= <>) then
|
|
Packit |
1f3717 |
result $res, rules nimi_laatusanan_johdin;
|
|
Packit |
1f3717 |
end;
|
|
Packit |
1f3717 |
if ($vasen.$i.luokka = tavuviiva) or ($oikea.tiedot = nil or not (ei_ysj in $oikea.tiedot)) then
|
|
Packit |
1f3717 |
if (omistusliite in $oikea.jatko) then
|
|
Packit |
1f3717 |
result $res, rules omistusliite;
|
|
Packit |
1f3717 |
end;
|
|
Packit |
1f3717 |
if (liitesana in $oikea.jatko) then
|
|
Packit |
1f3717 |
result $res, rules liitesana;
|
|
Packit |
1f3717 |
end;
|
|
Packit |
1f3717 |
if (loppu in $oikea.jatko) then
|
|
Packit |
1f3717 |
result $res, accept;
|
|
Packit |
1f3717 |
end;
|
|
Packit |
1f3717 |
result $res, rules sijapääte;
|
|
Packit |
1f3717 |
end;
|
|
Packit |
1f3717 |
end;
|
|
Packit |
1f3717 |
|
|
Packit |
1f3717 |
|
|
Packit |
1f3717 |
combi_rule laatusana ($vasen, $oikea, $sana, $n):
|
|
Packit |
1f3717 |
####define $profile := transmit ("laatusana ($vasen, $oikea, $sana, $n):");
|
|
Packit |
1f3717 |
? $oikea.luokka = laatusana;
|
|
Packit |
1f3717 |
|
|
Packit |
1f3717 |
define $i := $n - 1;
|
|
Packit |
1f3717 |
|
|
Packit |
1f3717 |
#define $nimi := transmit (<"laatusana"> + <$vasen.$i.alku> + <$oikea> + <$sana>);
|
|
Packit |
1f3717 |
#define $n := transmit (<"luokka"> + <$vasen.$i.luokka>);
|
|
Packit |
1f3717 |
|
|
Packit |
1f3717 |
? ($oikea.luokka in $vasen.$i.jatko);
|
|
Packit |
1f3717 |
? yhdyssana_oikein ($vasen, $oikea, $i);
|
|
Packit |
1f3717 |
|
|
Packit |
1f3717 |
#define $n := transmit (<$vasen> + <$oikea> + <$sana>);
|
|
Packit |
1f3717 |
#define $n1 := transmit ($vasen);
|
|
Packit |
1f3717 |
#define $n2 := transmit ($oikea);
|
|
Packit |
1f3717 |
#define $n3 := transmit ($sana);
|
|
Packit |
1f3717 |
|
|
Packit |
1f3717 |
define $res := $vasen + <[alku: $sana] + $oikea>;
|
|
Packit |
1f3717 |
|
|
Packit |
1f3717 |
if (omistusliite in $oikea.jatko) then
|
|
Packit |
1f3717 |
result $res, rules omistusliite;
|
|
Packit |
1f3717 |
end;
|
|
Packit |
1f3717 |
if (liitesana in $oikea.jatko) then
|
|
Packit |
1f3717 |
result $res, rules liitesana;
|
|
Packit |
1f3717 |
end;
|
|
Packit |
1f3717 |
# Arka+mainen, halpa+mainen, oiva+llinen, täyde+llinen (= täysi + johdin_llinen), yms.
|
|
Packit |
1f3717 |
if (@nimi_laatusanan_johdin * $oikea.jatko /= <>) then
|
|
Packit |
1f3717 |
result $res, rules nimi_laatusanan_johdin;
|
|
Packit |
1f3717 |
end;
|
|
Packit |
1f3717 |
if (@voittoaste + @yliaste * $oikea.jatko /= <>) then
|
|
Packit |
1f3717 |
result $res, rules voitto_yliaste;
|
|
Packit |
1f3717 |
end;
|
|
Packit |
1f3717 |
if (@laatusanasta_johdettu_nimisana * $oikea.jatko /= <>) then
|
|
Packit |
1f3717 |
result $res, rules laatusanasta_johdettu_nimisana;
|
|
Packit |
1f3717 |
end;
|
|
Packit |
1f3717 |
if (@laatusanasta_johdettu_laatusana * $oikea.jatko /= <>) then
|
|
Packit |
1f3717 |
result $res, rules laatusanasta_johdettu_laatusana;
|
|
Packit |
1f3717 |
end;
|
|
Packit |
1f3717 |
if (loppu in $oikea.jatko) then
|
|
Packit |
1f3717 |
result $res, accept;
|
|
Packit |
1f3717 |
end;
|
|
Packit |
1f3717 |
if (tavuviiva in $oikea.jatko) then
|
|
Packit |
1f3717 |
result $res, rules tavuviiva;
|
|
Packit |
1f3717 |
end;
|
|
Packit |
1f3717 |
if (yhdyssana in $oikea.jatko) then
|
|
Packit |
1f3717 |
# ? ($oikea.tiedot = nil) or not ((ei_ys in $oikea.tiedot) or (ei_ysj in $oikea.tiedot));
|
|
Packit |
1f3717 |
result $res, rules yhdyssana;
|
|
Packit |
1f3717 |
# result $res, rules inen_päätteinen_laatusana;
|
|
Packit |
1f3717 |
end;
|
|
Packit |
1f3717 |
result $res, rules sijapääte;
|
|
Packit |
1f3717 |
end;
|
|
Packit |
1f3717 |
|
|
Packit |
1f3717 |
|
|
Packit |
1f3717 |
combi_rule inen_päätteinen_laatusana ($vasen, $oikea, $sana, $n):
|
|
Packit |
1f3717 |
? $oikea.perusmuoto /= nil;
|
|
Packit |
1f3717 |
? $oikea.luokka in <laatusana, nimi_laatusana>;
|
|
Packit |
1f3717 |
? $oikea.perusmuoto matches ".*inen";
|
|
Packit |
1f3717 |
|
|
Packit |
1f3717 |
define $i := $n - 1;
|
|
Packit |
1f3717 |
define $profile := transmit ("inen_päätteinen_laatusana ($vasen, $oikea, $sana, $n):");
|
|
Packit |
1f3717 |
define $a1 := transmit ($vasen.$i);
|
|
Packit |
1f3717 |
define $a2 := transmit ($oikea - jatko);
|
|
Packit |
1f3717 |
define $a3 := transmit ($sana);
|
|
Packit |
1f3717 |
define $a4 := transmit ($n);
|
|
Packit |
1f3717 |
|
|
Packit |
1f3717 |
define $res := $vasen + <[alku: $sana] + $oikea>;
|
|
Packit |
1f3717 |
|
|
Packit |
1f3717 |
if omistusliite in $oikea.jatko then
|
|
Packit |
1f3717 |
result $res, rules omistusliite;
|
|
Packit |
1f3717 |
end;
|
|
Packit |
1f3717 |
if tavuviiva in $oikea.jatko then
|
|
Packit |
1f3717 |
result $res, rules tavuviiva;
|
|
Packit |
1f3717 |
end;
|
|
Packit |
1f3717 |
if loppu in $oikea.jatko then
|
|
Packit |
1f3717 |
result $res, accept;
|
|
Packit |
1f3717 |
end;
|
|
Packit |
1f3717 |
if liitesana in $oikea.jatko then
|
|
Packit |
1f3717 |
result $res, rules liitesana;
|
|
Packit |
1f3717 |
end;
|
|
Packit |
1f3717 |
if yhdyssana in $oikea.jatko then
|
|
Packit |
1f3717 |
result $res, rules yhdyssana;
|
|
Packit |
1f3717 |
end;
|
|
Packit |
1f3717 |
result $res, rules sijapääte;
|
|
Packit |
1f3717 |
## result $res, rules laatusanan_sijapäte; laatusanan_johdos;
|
|
Packit |
1f3717 |
end;
|
|
Packit |
1f3717 |
|
|
Packit |
1f3717 |
|
|
Packit |
1f3717 |
combi_rule nimi_laatusana ($vasen, $oikea, $sana, $n):
|
|
Packit |
1f3717 |
####define $profile := transmit ("nimi_laatusana ($vasen, $oikea, $sana, $n):");
|
|
Packit |
1f3717 |
|
|
Packit |
1f3717 |
? $oikea.luokka = nimi_laatusana;
|
|
Packit |
1f3717 |
define $i := $n - 1;
|
|
Packit |
1f3717 |
|
|
Packit |
1f3717 |
##assert ($i = length($vasen));
|
|
Packit |
1f3717 |
|
|
Packit |
1f3717 |
#define $n4 := transmit ($oikea.luokka);
|
|
Packit |
1f3717 |
|
|
Packit |
1f3717 |
if ($i greater 0) then
|
|
Packit |
1f3717 |
? $oikea.luokka in $vasen.$i.jatko;
|
|
Packit |
1f3717 |
? yhdyssana_oikein ($vasen, $oikea, $i);
|
|
Packit |
1f3717 |
end;
|
|
Packit |
1f3717 |
|
|
Packit |
1f3717 |
#define $n1 := transmit ($vasen);
|
|
Packit |
1f3717 |
#define $n2 := transmit ($oikea);
|
|
Packit |
1f3717 |
#define $n3 := transmit ($sana);
|
|
Packit |
1f3717 |
|
|
Packit |
1f3717 |
define $res := $vasen + <[alku: $sana] + $oikea>;
|
|
Packit |
1f3717 |
|
|
Packit |
1f3717 |
if (omistusliite in $oikea.jatko) then
|
|
Packit |
1f3717 |
result $res, rules omistusliite;
|
|
Packit |
1f3717 |
end;
|
|
Packit |
1f3717 |
if (liitesana in $oikea.jatko) then
|
|
Packit |
1f3717 |
result $res, rules liitesana;
|
|
Packit |
1f3717 |
end;
|
|
Packit |
1f3717 |
if ((voittoaste in $oikea.jatko) or (yliaste in $oikea.jatko)) then
|
|
Packit |
1f3717 |
result $res, rules voitto_yliaste;
|
|
Packit |
1f3717 |
end;
|
|
Packit |
1f3717 |
if (loppu in $oikea.jatko) then
|
|
Packit |
1f3717 |
result $res, accept;
|
|
Packit |
1f3717 |
end;
|
|
Packit |
1f3717 |
if (@nimi_laatusanan_johdin * $oikea.jatko /= <>) then
|
|
Packit |
1f3717 |
result $res, rules nimi_laatusanan_johdin;
|
|
Packit |
1f3717 |
end;
|
|
Packit |
1f3717 |
if (@laatusanasta_johdettu_nimisana * $oikea.jatko /= <>) then
|
|
Packit |
1f3717 |
result $res, rules laatusanasta_johdettu_nimisana;
|
|
Packit |
1f3717 |
end;
|
|
Packit |
1f3717 |
if (@laatusanasta_johdettu_laatusana * $oikea.jatko /= <>) then
|
|
Packit |
1f3717 |
result $res, rules laatusanasta_johdettu_laatusana;
|
|
Packit |
1f3717 |
end;
|
|
Packit |
1f3717 |
if (@nimisanasta_johdettu_laatusana * $oikea.jatko /= <>) then
|
|
Packit |
1f3717 |
result $res, rules nimisanasta_johdettu_laatusana;
|
|
Packit |
1f3717 |
end;
|
|
Packit |
1f3717 |
if (@nimisanasta_johdettu_seikkasana * $oikea.jatko /= <>) then
|
|
Packit |
1f3717 |
result $res, rules nimisanasta_johdettu_seikkasana;
|
|
Packit |
1f3717 |
end;
|
|
Packit |
1f3717 |
if (tavuviiva in $oikea.jatko) then
|
|
Packit |
1f3717 |
result $res, rules tavuviiva;
|
|
Packit |
1f3717 |
end;
|
|
Packit |
1f3717 |
if (yhdyssana in $oikea.jatko) then
|
|
Packit |
1f3717 |
result $res, rules yhdyssana;
|
|
Packit |
1f3717 |
end;
|
|
Packit |
1f3717 |
result $res, rules sijapääte;
|
|
Packit |
1f3717 |
end;
|
|
Packit |
1f3717 |
|
|
Packit |
1f3717 |
|
|
Packit |
1f3717 |
combi_rule asemosana ($vasen, $oikea, $sana):
|
|
Packit |
1f3717 |
####define $profile := transmit ("asemosana ($vasen, $oikea, $sana):");
|
|
Packit |
1f3717 |
? $oikea.luokka = asemosana;
|
|
Packit |
1f3717 |
|
|
Packit |
1f3717 |
#define $nimi := transmit (<"asemosana"> + <$oikea> + <$sana>);
|
|
Packit |
1f3717 |
|
|
Packit |
1f3717 |
define $res := $vasen + <[alku: $sana] + $oikea>;
|
|
Packit |
1f3717 |
|
|
Packit |
1f3717 |
if (loppu in $oikea.jatko) then
|
|
Packit |
1f3717 |
result $res, accept;
|
|
Packit |
1f3717 |
end;
|
|
Packit |
1f3717 |
result $res, rules asemosanan_sijapääte, liitesana, tavuviiva, voitto_yliaste;
|
|
Packit |
1f3717 |
end;
|
|
Packit |
1f3717 |
|
|
Packit |
1f3717 |
|
|
Packit |
1f3717 |
combi_rule lyhennesääntö ($vasen, $oikea, $sana, $n):
|
|
Packit |
1f3717 |
####define $profile := transmit ("lyhennesääntö ($vasen, $oikea, $sana):");
|
|
Packit |
1f3717 |
? $oikea.luokka in <lyhenne>;
|
|
Packit |
1f3717 |
|
|
Packit |
1f3717 |
#define $nimi := transmit (<"lyhennesääntö"> + <$vasen> + <$oikea> + <$sana>);
|
|
Packit |
1f3717 |
#define $nimi1 := transmit (<"lyhennesääntö1"> + <$vasen.($n-1)>);
|
|
Packit |
1f3717 |
#define $nimi2 := transmit (<"lyhennesääntö2"> + <$oikea>);
|
|
Packit |
1f3717 |
#define $nimi3 := transmit (<"lyhennesääntö3"> + <$sana>);
|
|
Packit |
1f3717 |
|
|
Packit |
1f3717 |
define $res := $vasen + <[alku: $sana] + $oikea>;
|
|
Packit |
1f3717 |
|
|
Packit |
1f3717 |
if (loppu in $oikea.jatko) then
|
|
Packit |
1f3717 |
result $res, accept;
|
|
Packit |
1f3717 |
end;
|
|
Packit |
1f3717 |
result $res, rules kaksoispiste, tavuviiva;
|
|
Packit |
1f3717 |
end;
|
|
Packit |
1f3717 |
|
|
Packit |
1f3717 |
|
|
Packit |
1f3717 |
combi_rule apusana ($vasen, $oikea, $sana):
|
|
Packit |
1f3717 |
####define $profile := transmit ("apusana ($vasen, $oikea, $sana):");
|
|
Packit |
1f3717 |
? $oikea.luokka in <huudahdussana, sidesana>;
|
|
Packit |
1f3717 |
|
|
Packit |
1f3717 |
#define $nimi := transmit (<"apusana"> + <$oikea> + <$sana>);
|
|
Packit |
1f3717 |
|
|
Packit |
1f3717 |
define $res := $vasen + <[alku: $sana] + $oikea>;
|
|
Packit |
1f3717 |
|
|
Packit |
1f3717 |
if (loppu in $oikea.jatko) then
|
|
Packit |
1f3717 |
result $res, accept;
|
|
Packit |
1f3717 |
end;
|
|
Packit |
1f3717 |
result $res, rules liitesana, tavuviiva;
|
|
Packit |
1f3717 |
end;
|
|
Packit |
1f3717 |
|
|
Packit |
1f3717 |
|
|
Packit |
1f3717 |
combi_rule kaksoispiste ($vasen, $oikea, $sana, $n):
|
|
Packit |
1f3717 |
####define $profile := transmit ("kaksoispiste ($vasen, $oikea, $sana, $n):");
|
|
Packit |
1f3717 |
? $oikea.luokka in <kaksoispiste>;
|
|
Packit |
1f3717 |
|
|
Packit |
1f3717 |
#define $nimi := transmit (<":"> + <$vasen> + <$oikea> + <$sana> + <length($vasen)>);
|
|
Packit |
1f3717 |
|
|
Packit |
1f3717 |
result $vasen + <[alku: $sana] + $oikea + [äs: $vasen.($n-1).äs]>,
|
|
Packit |
1f3717 |
rules kaksoispisteen_sijapääte;
|
|
Packit |
1f3717 |
end;
|
|
Packit |
1f3717 |
|
|
Packit |
1f3717 |
|
|
Packit |
1f3717 |
combi_rule tavuviiva ($vasen, $oikea, $sana, $n):
|
|
Packit |
1f3717 |
####define $profile := transmit ("tavuviiva ($vasen, $oikea, $sana, $n):");
|
|
Packit |
1f3717 |
? $oikea.luokka in <tavuviiva>;
|
|
Packit |
1f3717 |
? $oikea.luokka in $vasen.($n-1).jatko;
|
|
Packit |
1f3717 |
|
|
Packit |
1f3717 |
#define $nimi1 := transmit (<"tavuviiva1"> + <$vasen>);
|
|
Packit |
1f3717 |
#define $nimi2 := transmit (<"tavuviiva2"> + <$oikea>);
|
|
Packit |
1f3717 |
#define $nimi3 := transmit (<"tavuviiva3"> + <$sana>);
|
|
Packit |
1f3717 |
|
|
Packit |
1f3717 |
define $res := $vasen + <[alku: $sana] + $oikea>;
|
|
Packit |
1f3717 |
|
|
Packit |
1f3717 |
if (loppu in $oikea.jatko) then
|
|
Packit |
1f3717 |
result $res, accept;
|
|
Packit |
1f3717 |
end;
|
|
Packit |
1f3717 |
result $res, rules yhdyssana, asemosana, apusana, lyhennesääntö, erisnimi, lukusana;
|
|
Packit |
1f3717 |
end;
|
|
Packit |
1f3717 |
|
|
Packit |
1f3717 |
|
|
Packit |
1f3717 |
# Tämä sääntö on muokattu Harri Pitkäsen Voikko-versiosta.
|
|
Packit |
1f3717 |
#
|
|
Packit |
1f3717 |
combi_rule kaksoispisteen_sijapääte ($vasen, $oikea, $sana, $n):
|
|
Packit |
1f3717 |
####define $profile := transmit ("kaksoispisteen_sijapääte ($vasen, $oikea, $sana, $n):");
|
|
Packit |
1f3717 |
? $oikea.luokka = sijapääte;
|
|
Packit |
1f3717 |
? $oikea.sija /= keinonto_n;
|
|
Packit |
1f3717 |
|
|
Packit |
1f3717 |
define $edellinen := $vasen.($n-1);
|
|
Packit |
1f3717 |
? ($edellinen.äs = aä) or ($oikea.äs = aä) or ($edellinen.äs = $oikea.äs);
|
|
Packit |
1f3717 |
|
|
Packit |
1f3717 |
if $oikea.äs = aä then $oikea.äs := $edellinen.äs; end;
|
|
Packit |
1f3717 |
|
|
Packit |
1f3717 |
define $res := $vasen + <[alku: $sana] + $oikea>;
|
|
Packit |
1f3717 |
|
|
Packit |
1f3717 |
if (loppu in $oikea.jatko) then
|
|
Packit |
1f3717 |
result $res, accept;
|
|
Packit |
1f3717 |
end;
|
|
Packit |
1f3717 |
result $res, rules omistusliite, liitesana;
|
|
Packit |
1f3717 |
end;
|
|
Packit |
1f3717 |
|
|
Packit |
1f3717 |
|
|
Packit |
1f3717 |
define @sti_edeltäjä := <laatusana, nimi_laatusana, voittoaste, yliaste>
|
|
Packit |
1f3717 |
+ @nimisanasta_johdettu_laatusana
|
|
Packit |
1f3717 |
+ @laatusanasta_johdettu_laatusana
|
|
Packit |
1f3717 |
+ @nimi_laatusanan_johdin
|
|
Packit |
1f3717 |
+ @teonsanasta_johdettu_laatusana
|
|
Packit |
1f3717 |
+ @lukusana + @laatutapa_1 + @laatutapa_2;
|
|
Packit |
1f3717 |
|
|
Packit |
1f3717 |
# Sijapääte, joka voi olla yhdyssanan alkuosassa.
|
|
Packit |
1f3717 |
#
|
|
Packit |
1f3717 |
#define @yhdyssanasija :=
|
|
Packit |
1f3717 |
# omanto_en,
|
|
Packit |
1f3717 |
# omanto_ien,
|
|
Packit |
1f3717 |
# omanto_jen,
|
|
Packit |
1f3717 |
# omanto_in, # Vanhempainloma.
|
|
Packit |
1f3717 |
# omanto_ten, # Naistentanssit.
|
|
Packit |
1f3717 |
# omanto_iT, # Hampaidenhoito, hampaittenhoito.
|
|
Packit |
1f3717 |
# sisätulento_hVn, # Maahantulo, työhönotto.
|
|
Packit |
1f3717 |
# sisätulento_ihin>; # Maihinnousu.
|
|
Packit |
1f3717 |
|
|
Packit |
1f3717 |
combi_rule sijapääte ($vasen, $oikea, $sana, $n):
|
|
Packit |
1f3717 |
####define $profile := transmit ("sijapääte ($vasen, $oikea, $sana, $n):");
|
|
Packit |
1f3717 |
? $oikea.luokka = sijapääte;
|
|
Packit |
1f3717 |
|
|
Packit |
1f3717 |
#define $nimi := transmit (<$vasen> + <$oikea> + <$sana>);
|
|
Packit |
1f3717 |
|
|
Packit |
1f3717 |
define $edellinen := $vasen.($n-1);
|
|
Packit |
1f3717 |
|
|
Packit |
1f3717 |
? $oikea.sija in $edellinen.jatko;
|
|
Packit |
1f3717 |
? äs_ok ($edellinen,$oikea);
|
|
Packit |
1f3717 |
|
|
Packit |
1f3717 |
? ($oikea.sija /= sisätulento_Vn) or sisätulento_Vn_oikein ($oikea.sija, substring($edellinen.alku,1R), $sana);
|
|
Packit |
1f3717 |
? ($oikea.sija /= sisätulento_hVn) or sisätulento_hVn_oikein ($oikea.sija, substring($edellinen.alku,1R), $sana);
|
|
Packit |
1f3717 |
|
|
Packit |
1f3717 |
if $oikea.äs = aä then $oikea.äs := $edellinen.äs; end;
|
|
Packit |
1f3717 |
define $res := $vasen + <[alku: $sana] + $oikea>;
|
|
Packit |
1f3717 |
|
|
Packit |
1f3717 |
#define $a1 := transmit ($edellinen);
|
|
Packit |
1f3717 |
#define $b1 := transmit ($oikea);
|
|
Packit |
1f3717 |
#define $c1 := transmit ($sana);
|
|
Packit |
1f3717 |
|
|
Packit |
1f3717 |
if (($oikea.sija = kerronto_sti) and ($edellinen.luokka in @sti_edeltäjä)) then
|
|
Packit |
1f3717 |
if (loppu in $oikea.jatko) then
|
|
Packit |
1f3717 |
result $res, accept;
|
|
Packit |
1f3717 |
end;
|
|
Packit |
1f3717 |
result $res, rules liitesana;
|
|
Packit |
1f3717 |
else
|
|
Packit |
1f3717 |
if (omistusliite in $oikea.jatko) then
|
|
Packit |
1f3717 |
result $res, rules omistusliite;
|
|
Packit |
1f3717 |
end;
|
|
Packit |
1f3717 |
if (liitesana in $oikea.jatko) then
|
|
Packit |
1f3717 |
result $res, rules liitesana;
|
|
Packit |
1f3717 |
end;
|
|
Packit |
1f3717 |
if (tavuviiva in $oikea.jatko) then
|
|
Packit |
1f3717 |
result $res, rules tavuviiva;
|
|
Packit |
1f3717 |
end;
|
|
Packit |
1f3717 |
if (yhdyssana in $oikea.jatko) and
|
|
Packit |
1f3717 |
(($edellinen.tiedot = nil) or not ((ei_ys in $edellinen.tiedot) or (ei_ysa in $edellinen.tiedot))) then
|
|
Packit |
1f3717 |
result $res, rules yhdyssana;
|
|
Packit |
1f3717 |
end;
|
|
Packit |
1f3717 |
if (loppu in $oikea.jatko) then
|
|
Packit |
1f3717 |
result $res, accept;
|
|
Packit |
1f3717 |
end;
|
|
Packit |
1f3717 |
end;
|
|
Packit |
1f3717 |
end;
|
|
Packit |
1f3717 |
|
|
Packit |
1f3717 |
|
|
Packit |
1f3717 |
combi_rule ei_ys_sijapääte ($vasen, $oikea, $sana, $n):
|
|
Packit |
1f3717 |
####define $profile := transmit ("sijapääte ($vasen, $oikea, $sana, $n):");
|
|
Packit |
1f3717 |
? $oikea.luokka = sijapääte;
|
|
Packit |
1f3717 |
|
|
Packit |
1f3717 |
#define $nimi := transmit (<$vasen> + <$oikea> + <$sana>);
|
|
Packit |
1f3717 |
|
|
Packit |
1f3717 |
define $edellinen := $vasen.($n-1);
|
|
Packit |
1f3717 |
|
|
Packit |
1f3717 |
? $oikea.sija in $edellinen.jatko;
|
|
Packit |
1f3717 |
? äs_ok ($edellinen,$oikea);
|
|
Packit |
1f3717 |
|
|
Packit |
1f3717 |
? ($oikea.sija /= sisätulento_Vn) or sisätulento_Vn_oikein ($oikea.sija, substring($edellinen.alku,1R), $sana);
|
|
Packit |
1f3717 |
? ($oikea.sija /= sisätulento_hVn) or sisätulento_hVn_oikein ($oikea.sija, substring($edellinen.alku,1R), $sana);
|
|
Packit |
1f3717 |
|
|
Packit |
1f3717 |
if $oikea.äs = aä then $oikea.äs := $edellinen.äs; end;
|
|
Packit |
1f3717 |
define $res := $vasen + <[alku: $sana] + $oikea>;
|
|
Packit |
1f3717 |
|
|
Packit |
1f3717 |
#define $a1 := transmit ($edellinen);
|
|
Packit |
1f3717 |
#define $b1 := transmit ($oikea);
|
|
Packit |
1f3717 |
#define $c1 := transmit ($sana);
|
|
Packit |
1f3717 |
|
|
Packit |
1f3717 |
if (($oikea.sija = kerronto_sti) and ($edellinen.luokka in @sti_edeltäjä)) then
|
|
Packit |
1f3717 |
if (loppu in $oikea.jatko) then
|
|
Packit |
1f3717 |
result $res, accept;
|
|
Packit |
1f3717 |
end;
|
|
Packit |
1f3717 |
result $res, rules liitesana;
|
|
Packit |
1f3717 |
else
|
|
Packit |
1f3717 |
if (omistusliite in $oikea.jatko) then
|
|
Packit |
1f3717 |
result $res, rules omistusliite;
|
|
Packit |
1f3717 |
end;
|
|
Packit |
1f3717 |
if (liitesana in $oikea.jatko) then
|
|
Packit |
1f3717 |
result $res, rules liitesana;
|
|
Packit |
1f3717 |
end;
|
|
Packit |
1f3717 |
if (tavuviiva in $oikea.jatko) then
|
|
Packit |
1f3717 |
result $res, rules tavuviiva;
|
|
Packit |
1f3717 |
end;
|
|
Packit |
1f3717 |
if (loppu in $oikea.jatko) then
|
|
Packit |
1f3717 |
result $res, accept;
|
|
Packit |
1f3717 |
end;
|
|
Packit |
1f3717 |
end;
|
|
Packit |
1f3717 |
end;
|
|
Packit |
1f3717 |
|
|
Packit |
1f3717 |
|
|
Packit |
1f3717 |
combi_rule asemosanan_sijapääte ($vasen, $oikea, $sana, $n):
|
|
Packit |
1f3717 |
####define $profile := transmit ("asemosanan_sijapääte ($vasen, $oikea, $sana, $n):");
|
|
Packit |
1f3717 |
? $oikea.luokka = sijapääte;
|
|
Packit |
1f3717 |
|
|
Packit |
1f3717 |
define $edellinen := $vasen.($n-1);
|
|
Packit |
1f3717 |
? $oikea.sija in $edellinen.jatko;
|
|
Packit |
1f3717 |
? äs_ok ($edellinen,$oikea);
|
|
Packit |
1f3717 |
|
|
Packit |
1f3717 |
? ($oikea.sija /= sisätulento_Vn) or sisätulento_Vn_oikein ($oikea.sija, substring($edellinen.alku,1R), $sana);
|
|
Packit |
1f3717 |
? ($oikea.sija /= sisätulento_hVn) or sisätulento_hVn_oikein ($oikea.sija, substring($edellinen.alku,1R), $sana);
|
|
Packit |
1f3717 |
|
|
Packit |
1f3717 |
if $oikea.äs = aä then $oikea.äs := $edellinen.äs; end;
|
|
Packit |
1f3717 |
define $res := $vasen + <[alku: $sana] + $oikea>;
|
|
Packit |
1f3717 |
|
|
Packit |
1f3717 |
if (($oikea.sija = kerronto_sti) and ($edellinen.luokka in @sti_edeltäjä)) then
|
|
Packit |
1f3717 |
if (loppu in $oikea.jatko) then
|
|
Packit |
1f3717 |
result $res, accept;
|
|
Packit |
1f3717 |
end;
|
|
Packit |
1f3717 |
result $res, rules liitesana;
|
|
Packit |
1f3717 |
else
|
|
Packit |
1f3717 |
if sijamuoto_sijasta($oikea.sija) = omanto then
|
|
Packit |
1f3717 |
result $res, rules inen_johdos_nimisanasta; # Muun+tyyppinen yms.
|
|
Packit |
1f3717 |
end;
|
|
Packit |
1f3717 |
if (loppu in $oikea.jatko) then
|
|
Packit |
1f3717 |
result $res, accept;
|
|
Packit |
1f3717 |
end;
|
|
Packit |
1f3717 |
result $res, rules liitesana;
|
|
Packit |
1f3717 |
# result $res, rules liitesana, tavuviiva, loppu;
|
|
Packit |
1f3717 |
end;
|
|
Packit |
1f3717 |
end;
|
|
Packit |
1f3717 |
|
|
Packit |
1f3717 |
|
|
Packit |
1f3717 |
combi_rule laatutavan_sijapääte ($vasen, $oikea, $sana, $n):
|
|
Packit |
1f3717 |
####define $profile := transmit ("laatutavan_sijapääte ($vasen, $oikea, $sana, $n):");
|
|
Packit |
1f3717 |
? $oikea.luokka = sijapääte;
|
|
Packit |
1f3717 |
|
|
Packit |
1f3717 |
define $edellinen := $vasen.($n-1);
|
|
Packit |
1f3717 |
? $oikea.sija in $edellinen.jatko;
|
|
Packit |
1f3717 |
? äs_ok ($edellinen,$oikea);
|
|
Packit |
1f3717 |
|
|
Packit |
1f3717 |
? ($oikea.sija /= sisätulento_Vn) or sisätulento_Vn_oikein ($oikea.sija, substring($edellinen.alku,1R), $sana);
|
|
Packit |
1f3717 |
? ($oikea.sija /= sisätulento_hVn) or sisätulento_hVn_oikein ($oikea.sija, substring($edellinen.alku,1R), $sana);
|
|
Packit |
1f3717 |
|
|
Packit |
1f3717 |
if $oikea.äs = aä then $oikea.äs := $edellinen.äs; end;
|
|
Packit |
1f3717 |
define $res := $vasen + <[alku: $sana] + $oikea>;
|
|
Packit |
1f3717 |
|
|
Packit |
1f3717 |
if (($oikea.sija = kerronto_sti) and ($edellinen.luokka in @sti_edeltäjä)) then
|
|
Packit |
1f3717 |
if (loppu in $oikea.jatko) then
|
|
Packit |
1f3717 |
result $res, accept;
|
|
Packit |
1f3717 |
end;
|
|
Packit |
1f3717 |
result $res, rules liitesana;
|
|
Packit |
1f3717 |
else
|
|
Packit |
1f3717 |
if (omistusliite in $oikea.jatko) then
|
|
Packit |
1f3717 |
result $res, rules omistusliite;
|
|
Packit |
1f3717 |
end;
|
|
Packit |
1f3717 |
if (liitesana in $oikea.jatko) then
|
|
Packit |
1f3717 |
result $res, rules liitesana;
|
|
Packit |
1f3717 |
end;
|
|
Packit |
1f3717 |
if (loppu in $oikea.jatko) then
|
|
Packit |
1f3717 |
result $res, accept;
|
|
Packit |
1f3717 |
end;
|
|
Packit |
1f3717 |
### result $res, rules omistusliite, liitesana, loppu;
|
|
Packit |
1f3717 |
end;
|
|
Packit |
1f3717 |
end;
|
|
Packit |
1f3717 |
|
|
Packit |
1f3717 |
|
|
Packit |
1f3717 |
combi_rule teonsana ($vasen, $oikea, $sana, $n):
|
|
Packit |
1f3717 |
####define $profile := transmit ("teonsana ($vasen, $oikea, $sana, $n):");
|
|
Packit |
1f3717 |
? $oikea.luokka in <teonsana>;
|
|
Packit |
1f3717 |
|
|
Packit |
1f3717 |
define $i := $n - 1;
|
|
Packit |
1f3717 |
? $oikea.luokka in $vasen.$i.jatko;
|
|
Packit |
1f3717 |
|
|
Packit |
1f3717 |
if ((substring($vasen.$i.perusmuoto,1R) matches @ääntiö) and
|
|
Packit |
1f3717 |
(substring($oikea.perusmuoto,1) matches @ääntiö)) then
|
|
Packit |
1f3717 |
? (substring($vasen.$i.perusmuoto,1R) /= substring($oikea.perusmuoto,1));
|
|
Packit |
1f3717 |
end;
|
|
Packit |
1f3717 |
|
|
Packit |
1f3717 |
#define $n1 := transmit (<"teonsana1"> + <$vasen>);
|
|
Packit |
1f3717 |
#define $n2 := transmit (<"teonsana2"> + <$oikea>);
|
|
Packit |
1f3717 |
#define $n3 := transmit (<"teonsana3"> + <$sana>);
|
|
Packit |
1f3717 |
#define $n6 := transmit (<"">);
|
|
Packit |
1f3717 |
|
|
Packit |
1f3717 |
define $res := $vasen + <[alku: $sana] + $oikea>;
|
|
Packit |
1f3717 |
|
|
Packit |
1f3717 |
if (liitesana in $oikea.jatko) then
|
|
Packit |
1f3717 |
if (($oikea.tapaluokka = käskytapa) and
|
|
Packit |
1f3717 |
($oikea.tekijä = 2) and
|
|
Packit |
1f3717 |
($oikea.luku = yksikkö)) then
|
|
Packit |
1f3717 |
result $res, rules liitesana_ei_kO;
|
|
Packit |
1f3717 |
else
|
|
Packit |
1f3717 |
result $res, rules liitesana;
|
|
Packit |
1f3717 |
end;
|
|
Packit |
1f3717 |
end;
|
|
Packit |
1f3717 |
if (loppu in $oikea.jatko) then
|
|
Packit |
1f3717 |
result $res, accept;
|
|
Packit |
1f3717 |
end;
|
|
Packit |
1f3717 |
if (tavuviiva in $oikea.jatko) then
|
|
Packit |
1f3717 |
result $res, rules tavuviiva;
|
|
Packit |
1f3717 |
end;
|
|
Packit |
1f3717 |
if (@teonsanasta_johdettu_teonsana * $oikea.jatko /= <>) then
|
|
Packit |
1f3717 |
result $res, rules teonsanan_johdos_teonsana;
|
|
Packit |
1f3717 |
end;
|
|
Packit |
1f3717 |
# if (@tekijämuodot * $oikea.jatko /= <>) then
|
|
Packit |
1f3717 |
# result $res, rules tekijämuodot;
|
|
Packit |
1f3717 |
# end;
|
|
Packit |
1f3717 |
# if (@nimitavat * $oikea.jatko /= <>) then
|
|
Packit |
1f3717 |
# result $res, rules nimitavat;
|
|
Packit |
1f3717 |
# end;
|
|
Packit |
1f3717 |
# if (@laatutavat * $oikea.jatko /= <>) then
|
|
Packit |
1f3717 |
# result $res, rules laatutavat;
|
|
Packit |
1f3717 |
# end;
|
|
Packit |
1f3717 |
# Tämä on nopeampi kuin kaikki erikseen!
|
|
Packit |
1f3717 |
result $res, rules tekijämuodot, nimitavat, laatutavat;
|
|
Packit |
1f3717 |
end;
|
|
Packit |
1f3717 |
|
|
Packit |
1f3717 |
|
|
Packit |
1f3717 |
combi_rule tekijämuodot ($vasen, $oikea, $sana, $n):
|
|
Packit |
1f3717 |
####define $profile := transmit ("tekijämuodot ($vasen, $oikea, $sana, $n):");
|
|
Packit |
1f3717 |
? $oikea.luokka in @tekijämuodot;
|
|
Packit |
1f3717 |
|
|
Packit |
1f3717 |
define $i := $n - 1;
|
|
Packit |
1f3717 |
? $oikea.luokka in $vasen.$i.jatko;
|
|
Packit |
1f3717 |
? äs_ok ($vasen.$i, $oikea);
|
|
Packit |
1f3717 |
|
|
Packit |
1f3717 |
#define $a := transmit ($vasen);
|
|
Packit |
1f3717 |
#define $b := transmit ($oikea.luokka);
|
|
Packit |
1f3717 |
#define $c := transmit ($sana);
|
|
Packit |
1f3717 |
|
|
Packit |
1f3717 |
if $oikea.äs = aä then $oikea.äs := $vasen.$i.äs; end;
|
|
Packit |
1f3717 |
|
|
Packit |
1f3717 |
# Päätteessä on sama ääntiö kuin vartalon lopussa,
|
|
Packit |
1f3717 |
# esim. puhua => puhuu, saada => saa.
|
|
Packit |
1f3717 |
#
|
|
Packit |
1f3717 |
if (($oikea.luokka = kestämän_tekijäpääte_y3)
|
|
Packit |
1f3717 |
and ($vasen.$i.alku matches ".*" + @ääntiö)) then
|
|
Packit |
1f3717 |
require (viimeinen_kirjain ($vasen.$i.alku) = $sana);
|
|
Packit |
1f3717 |
end;
|
|
Packit |
1f3717 |
|
|
Packit |
1f3717 |
# Vvi-päätteessä Avi hyväksytään missä tahansa sanassa, muuten päätteen alussa
|
|
Packit |
1f3717 |
# on sama ääntiö kuin vartalon lopussa: puhuuvi, sanoovi.
|
|
Packit |
1f3717 |
#
|
|
Packit |
1f3717 |
# "Savu käypi sieramista,: Pöly musta pörnyävi,: Tulta Hurja henkiävi,: Säkeniä suitsuavi, ..."
|
|
Packit |
1f3717 |
# Frans Pietari Kemelli: Höyrylaiva Oulu. Oulun Viikko-Sanomia 14.8.1841.
|
|
Packit |
1f3717 |
# http://fi.wikisource.org/wiki/H%C3%B6yrylaiva_Oulu
|
|
Packit |
1f3717 |
# http://digi.lib.helsinki.fi/sanomalehti/secure/showPage.html?id=122472&conversationId=1&action=entryPage
|
|
Packit |
1f3717 |
#
|
|
Packit |
1f3717 |
if (($oikea.luokka = kestämän_tekijäpääte_y3_Vvi)
|
|
Packit |
1f3717 |
and ($vasen.$i.alku matches ".*" + @ääntiö)) then
|
|
Packit |
1f3717 |
require (($sana in <"avi", "ävi">) or
|
|
Packit |
1f3717 |
(viimeinen_kirjain ($vasen.$i.alku) = substring($sana,1,1)));
|
|
Packit |
1f3717 |
end;
|
|
Packit |
1f3717 |
|
|
Packit |
1f3717 |
define $res := $vasen + <[alku: $sana] + $oikea>;
|
|
Packit |
1f3717 |
|
|
Packit |
1f3717 |
if (loppu in $oikea.jatko) then
|
|
Packit |
1f3717 |
result $res, accept;
|
|
Packit |
1f3717 |
end;
|
|
Packit |
1f3717 |
result $res, rules liitesana;
|
|
Packit |
1f3717 |
end;
|
|
Packit |
1f3717 |
|
|
Packit |
1f3717 |
|
|
Packit |
1f3717 |
combi_rule nimitavat ($vasen, $oikea, $sana, $n):
|
|
Packit |
1f3717 |
####define $profile := transmit ("nimitavat ($vasen, $oikea, $sana, $n):");
|
|
Packit |
1f3717 |
? $oikea.luokka in @nimitavat;
|
|
Packit |
1f3717 |
|
|
Packit |
1f3717 |
define $i := $n - 1;
|
|
Packit |
1f3717 |
|
|
Packit |
1f3717 |
#define $n1 := transmit (<"nimitavat1"> + <$vasen.$i>);
|
|
Packit |
1f3717 |
#define $n2 := transmit (<"nimitavat2"> + <$oikea>);
|
|
Packit |
1f3717 |
|
|
Packit |
1f3717 |
? $oikea.luokka in $vasen.$i.jatko;
|
|
Packit |
1f3717 |
#define $n3 := transmit (<"nimitavat3"> + <$vasen.$i.luokka> + <$oikea.jatko> + <$sana>);
|
|
Packit |
1f3717 |
|
|
Packit |
1f3717 |
? äs_ok ($vasen.$i, $oikea);
|
|
Packit |
1f3717 |
|
|
Packit |
1f3717 |
if $oikea.äs = aä then $oikea.äs := $vasen.$i.äs; end;
|
|
Packit |
1f3717 |
|
|
Packit |
1f3717 |
define $res := $vasen + <[alku: $sana] + $oikea>;
|
|
Packit |
1f3717 |
|
|
Packit |
1f3717 |
if ($oikea.luokka in @nimitapa_1) then
|
|
Packit |
1f3717 |
if (loppu in $oikea.jatko) then
|
|
Packit |
1f3717 |
result $res, accept;
|
|
Packit |
1f3717 |
end;
|
|
Packit |
1f3717 |
result $res, rules nimitapa_1_pitkä, liitesana;
|
|
Packit |
1f3717 |
elseif ($oikea.luokka in @nimitapa_2) then
|
|
Packit |
1f3717 |
#
|
|
Packit |
1f3717 |
# Ääntiö + "iss[aä] käy mutta ei kerake + "iss[aä]".
|
|
Packit |
1f3717 |
# Esim. puno+issa (puno+essa) käy mutta ei tull+issa (tull+essa).
|
|
Packit |
1f3717 |
# Nyt esim. "aitoissa" on sekä aitta-sanan että aitoa-sanan muoto (aitoessa).
|
|
Packit |
1f3717 |
#
|
|
Packit |
1f3717 |
if ($sana in <"issa", "issä">) then
|
|
Packit |
1f3717 |
? ($vasen.$i.alku matches ".*[aeiouyäö]");
|
|
Packit |
1f3717 |
end;
|
|
Packit |
1f3717 |
if (omistusliite in $oikea.jatko) then
|
|
Packit |
1f3717 |
result $res, rules omistusliite;
|
|
Packit |
1f3717 |
end;
|
|
Packit |
1f3717 |
if (loppu in $oikea.jatko) then
|
|
Packit |
1f3717 |
result $res, accept;
|
|
Packit |
1f3717 |
end;
|
|
Packit |
1f3717 |
result $res, rules liitesana;
|
|
Packit |
1f3717 |
elseif ($oikea.luokka in @nimitapa_3) then
|
|
Packit |
1f3717 |
if (omistusliite in $oikea.jatko) then
|
|
Packit |
1f3717 |
result $res, rules omistusliite;
|
|
Packit |
1f3717 |
end;
|
|
Packit |
1f3717 |
if (loppu in $oikea.jatko) then
|
|
Packit |
1f3717 |
result $res, accept;
|
|
Packit |
1f3717 |
end;
|
|
Packit |
1f3717 |
result $res, rules liitesana;
|
|
Packit |
1f3717 |
elseif ($oikea.luokka = nimitapa_5) then
|
|
Packit |
1f3717 |
if (loppu in $oikea.jatko) then
|
|
Packit |
1f3717 |
result $res, accept;
|
|
Packit |
1f3717 |
end;
|
|
Packit |
1f3717 |
result $res, rules omistusliite;
|
|
Packit |
1f3717 |
end;
|
|
Packit |
1f3717 |
end;
|
|
Packit |
1f3717 |
|
|
Packit |
1f3717 |
|
|
Packit |
1f3717 |
combi_rule nimitapa_1_pitkä ($vasen, $oikea, $sana, $n):
|
|
Packit |
1f3717 |
####define $profile := transmit ("nimitapa_1_pitkä ($vasen, $oikea, $sana, $n):");
|
|
Packit |
1f3717 |
? $oikea.luokka = nimitapa_1_pitkä;
|
|
Packit |
1f3717 |
|
|
Packit |
1f3717 |
define $i := $n - 1;
|
|
Packit |
1f3717 |
? nimitapa_1_pitkä in $vasen.$i.jatko;
|
|
Packit |
1f3717 |
? äs_ok ($vasen.$i, $oikea);
|
|
Packit |
1f3717 |
|
|
Packit |
1f3717 |
if $oikea.äs = aä then $oikea.äs := $vasen.$i.äs; end;
|
|
Packit |
1f3717 |
|
|
Packit |
1f3717 |
#define $nimi := transmit ("nimitapa_1_pitkä " + $vasen.$i.alku + " " + $sana);
|
|
Packit |
1f3717 |
|
|
Packit |
1f3717 |
result $vasen + <[alku: $sana] + $oikea>, rules omistusliite;
|
|
Packit |
1f3717 |
end;
|
|
Packit |
1f3717 |
|
|
Packit |
1f3717 |
|
|
Packit |
1f3717 |
combi_rule laatutavat ($vasen, $oikea, $sana, $n):
|
|
Packit |
1f3717 |
####define $profile := transmit ("laatutavat ($vasen, $oikea, $sana, $n):");
|
|
Packit |
1f3717 |
? $oikea.luokka in @laatutavat;
|
|
Packit |
1f3717 |
|
|
Packit |
1f3717 |
define $i := $n - 1;
|
|
Packit |
1f3717 |
? $oikea.luokka in $vasen.$i.jatko;
|
|
Packit |
1f3717 |
? äs_ok ($vasen.$i, $oikea);
|
|
Packit |
1f3717 |
|
|
Packit |
1f3717 |
if $oikea.äs = aä then $oikea.äs := $vasen.$i.äs; end;
|
|
Packit |
1f3717 |
|
|
Packit |
1f3717 |
#define $n1 := transmit (<"laatutapa1"> + <$vasen>);
|
|
Packit |
1f3717 |
#define $n2 := transmit (<"laatutapa2"> + <$oikea>);
|
|
Packit |
1f3717 |
#define $n3 := transmit (<"laatutapa3"> + <$sana>);
|
|
Packit |
1f3717 |
#define $n4 := transmit (<"laatutapa4"> + <$i>);
|
|
Packit |
1f3717 |
#define $n5 := transmit (<"">);
|
|
Packit |
1f3717 |
|
|
Packit |
1f3717 |
define $res := $vasen + <[alku: $sana] + $oikea>;
|
|
Packit |
1f3717 |
|
|
Packit |
1f3717 |
if (omistusliite in $oikea.jatko) then
|
|
Packit |
1f3717 |
result $res, rules omistusliite;
|
|
Packit |
1f3717 |
end;
|
|
Packit |
1f3717 |
if (liitesana in $oikea.jatko) then
|
|
Packit |
1f3717 |
result $res, rules liitesana;
|
|
Packit |
1f3717 |
end;
|
|
Packit |
1f3717 |
if (loppu in $oikea.jatko) then
|
|
Packit |
1f3717 |
result $res, accept;
|
|
Packit |
1f3717 |
end;
|
|
Packit |
1f3717 |
if ((voittoaste in $oikea.jatko) or (yliaste in $oikea.jatko)) then
|
|
Packit |
1f3717 |
result $res, rules laatutavan_voitto_yliaste;
|
|
Packit |
1f3717 |
end;
|
|
Packit |
1f3717 |
result $res, rules laatutavan_sijapääte;
|
|
Packit |
1f3717 |
end;
|
|
Packit |
1f3717 |
|
|
Packit |
1f3717 |
|
|
Packit |
1f3717 |
combi_rule kieltosana ($vasen, $oikea, $sana):
|
|
Packit |
1f3717 |
####define $profile := transmit ("kieltosana ($vasen, $oikea, $sana):");
|
|
Packit |
1f3717 |
? $oikea.luokka = kieltosana;
|
|
Packit |
1f3717 |
|
|
Packit |
1f3717 |
define $res := $vasen + <[alku: $sana] + $oikea>;
|
|
Packit |
1f3717 |
|
|
Packit |
1f3717 |
if (loppu in $oikea.jatko) then
|
|
Packit |
1f3717 |
result $res, accept;
|
|
Packit |
1f3717 |
end;
|
|
Packit |
1f3717 |
result $res, rules liitesana, liitesana_kä, tavuviiva;
|
|
Packit |
1f3717 |
end;
|
|
Packit |
1f3717 |
|
|
Packit |
1f3717 |
|
|
Packit |
1f3717 |
combi_rule liitesana ($vasen, $oikea, $sana, $n):
|
|
Packit |
1f3717 |
####define $profile := transmit ("liitesana ($vasen, $oikea, $sana, $n):");
|
|
Packit |
1f3717 |
? $oikea.luokka in <liitesana, liitesana2, liitesana_kO, liitesana_s>;
|
|
Packit |
1f3717 |
|
|
Packit |
1f3717 |
define $i := $n - 1;
|
|
Packit |
1f3717 |
#
|
|
Packit |
1f3717 |
# Testin jälkiosa on lisätty siksi, että on otettu
|
|
Packit |
1f3717 |
# käyttöön sääntö liitesana_ei_kO. Toinen mahdollisuus olisi ollut
|
|
Packit |
1f3717 |
# vaihtaa jokaisessa jatko-kentässä "liitesana" muotoon "liitesana, liitesana_kO",
|
|
Packit |
1f3717 |
# paitsi silloin, kun sanaa ei voi seurata liitesana_kO.
|
|
Packit |
1f3717 |
# Lisäämällä tämän pääsi helpommalla. Liitesana "ko", "kö" ei voi olla teonsanan
|
|
Packit |
1f3717 |
# jatkona samalla tavalla kuin muut liitesanat: "puhuko" on "puhu" + käskytapa_kielto
|
|
Packit |
1f3717 |
# (älkää puhuko), ei "puhu" + liitesana_kO (mutta "puhuuko" on "puhuu" + liitesana_kO).
|
|
Packit |
1f3717 |
# Huomaa toisaalta, että "puhukin" on "puhu" + litesana "kin".
|
|
Packit |
1f3717 |
#
|
|
Packit |
1f3717 |
##? $oikea.luokka in $vasen.$i.jatko;
|
|
Packit |
1f3717 |
? ($oikea.luokka in $vasen.$i.jatko) or (liitesana in $vasen.$i.jatko and $oikea.luokka = liitesana_kO);
|
|
Packit |
1f3717 |
? äs_ok ($vasen.$i, $oikea);
|
|
Packit |
1f3717 |
|
|
Packit |
1f3717 |
#define $a := transmit (<$vasen.$i.luokka> + <$vasen.$i.tapaluokka> +
|
|
Packit |
1f3717 |
# <$vasen.$i.tekijä> + <$vasen.$i.luku> + <$sana> + <$oikea.luokka> + <$i>);
|
|
Packit |
1f3717 |
|
|
Packit |
1f3717 |
result $vasen + <[alku: $sana] + $oikea>, accept;
|
|
Packit |
1f3717 |
end;
|
|
Packit |
1f3717 |
|
|
Packit |
1f3717 |
|
|
Packit |
1f3717 |
# Merkkijonon viimeinen merkki
|
|
Packit |
1f3717 |
# Tekijä: Björn Beutel.
|
|
Packit |
1f3717 |
#subrule last($string):
|
|
Packit |
1f3717 |
# ! $string matches ".*", ".": $last;
|
|
Packit |
1f3717 |
# return $last;
|
|
Packit |
1f3717 |
#end;
|
|
Packit |
1f3717 |
|
|
Packit |
1f3717 |
|
|
Packit |
1f3717 |
combi_rule liitesana_ei_kO ($vasen, $oikea, $sana, $n):
|
|
Packit |
1f3717 |
####define $profile := transmit ("liitesana ($vasen, $oikea, $sana, $n):");
|
|
Packit |
1f3717 |
? $oikea.luokka in <liitesana, liitesana2, liitesana_s>;
|
|
Packit |
1f3717 |
|
|
Packit |
1f3717 |
define $i := $n - 1;
|
|
Packit |
1f3717 |
? $oikea.luokka in $vasen.$i.jatko;
|
|
Packit |
1f3717 |
? äs_ok ($vasen.$i, $oikea);
|
|
Packit |
1f3717 |
|
|
Packit |
1f3717 |
#define $a := transmit (<$vasen.$i.luokka> + <$vasen.$i.tapaluokka> +
|
|
Packit |
1f3717 |
# <$vasen.$i.tekijä> + <$vasen.$i.luku> + <$sana> + <$oikea.luokka> + <$i>);
|
|
Packit |
1f3717 |
|
|
Packit |
1f3717 |
result $vasen + <[alku: $sana] + $oikea>, accept;
|
|
Packit |
1f3717 |
end;
|
|
Packit |
1f3717 |
|
|
Packit |
1f3717 |
|
|
Packit |
1f3717 |
combi_rule liitesana_kä ($vasen, $oikea, $sana, $n):
|
|
Packit |
1f3717 |
####define $profile := transmit ("liitesana_kä ($vasen, $oikea, $sana, $n):");
|
|
Packit |
1f3717 |
? $oikea.luokka = liitesana_kä;
|
|
Packit |
1f3717 |
|
|
Packit |
1f3717 |
define $i := $n - 1;
|
|
Packit |
1f3717 |
? $oikea.luokka in $vasen.$i.jatko;
|
|
Packit |
1f3717 |
? äs_ok ($vasen.$i, $oikea);
|
|
Packit |
1f3717 |
|
|
Packit |
1f3717 |
if $oikea.äs = aä then $oikea.äs := $vasen.$i.äs; end;
|
|
Packit |
1f3717 |
|
|
Packit |
1f3717 |
define $res := $vasen + <[alku: $sana] + $oikea>;
|
|
Packit |
1f3717 |
|
|
Packit |
1f3717 |
if (loppu in $oikea.jatko) then
|
|
Packit |
1f3717 |
result $res, accept;
|
|
Packit |
1f3717 |
end;
|
|
Packit |
1f3717 |
result $res, rules liitesana;
|
|
Packit |
1f3717 |
end;
|
|
Packit |
1f3717 |
|
|
Packit |
1f3717 |
|
|
Packit |
1f3717 |
combi_rule omistusliite ($vasen, $oikea, $sana, $n):
|
|
Packit |
1f3717 |
#define $profile := transmit ("omistusliite ($vasen, $oikea, $sana, $n):");
|
|
Packit |
1f3717 |
? $oikea.luokka = omistusliite;
|
|
Packit |
1f3717 |
define $i := $n - 1;
|
|
Packit |
1f3717 |
|
|
Packit |
1f3717 |
? $oikea.luokka in $vasen.$i.jatko;
|
|
Packit |
1f3717 |
? äs_ok ($vasen.$i, $oikea);
|
|
Packit |
1f3717 |
|
|
Packit |
1f3717 |
if $oikea.äs = aä then $oikea.äs := $vasen.$i.äs; end;
|
|
Packit |
1f3717 |
define $result := $vasen + <[alku: $sana] + $oikea>;
|
|
Packit |
1f3717 |
|
|
Packit |
1f3717 |
# Hyväksytään yksikön ensimmäisen omistusliite "in" eräissä
|
|
Packit |
1f3717 |
# sijamuodoissa, esim. matkallain, matkaltain, matkallein;
|
|
Packit |
1f3717 |
# ja myös esim. tyttärein (tyttäreni).
|
|
Packit |
1f3717 |
#
|
|
Packit |
1f3717 |
if (($sana = "in") and ($oikea.tekijä = 1)
|
|
Packit |
1f3717 |
and ((($vasen.$i.luokka in <sijapääte, nimitapa_2, nimitapa_3>) and
|
|
Packit |
1f3717 |
(not ($vasen.$i.sija in <vajanto_ttA, vajanto_ittA>)) and
|
|
Packit |
1f3717 |
(substring (value_string ($vasen.$i.sija), 1R) in <"A", "e">))
|
|
Packit |
1f3717 |
or (($vasen.$i.alku /= nil) and substring ($vasen.$i.alku, 1R) in <"e">))) then
|
|
Packit |
1f3717 |
if (loppu in $oikea.jatko) then
|
|
Packit |
1f3717 |
result $result, accept;
|
|
Packit |
1f3717 |
end;
|
|
Packit |
1f3717 |
result $result, rules liitesana;
|
|
Packit |
1f3717 |
end;
|
|
Packit |
1f3717 |
|
|
Packit |
1f3717 |
#define $a := transmit ($vasen);
|
|
Packit |
1f3717 |
#define $b := transmit ($oikea);
|
|
Packit |
1f3717 |
#define $c := transmit ($sana);
|
|
Packit |
1f3717 |
|
|
Packit |
1f3717 |
# Jos sijamuoto on omanto_in, hyväksytään vain omistusliitteet "nsa", "nsä", "mme".
|
|
Packit |
1f3717 |
# Omistusliitteet "nsa" ja "nsä" hyväksytään aina, mutta omistusliite "mme" vain, jos
|
|
Packit |
1f3717 |
# sanan vartalon viimeinen kirjain on a tai e tai ä. Tämä algoritmi kelpaa Juhani
|
|
Packit |
1f3717 |
# Ahon teoksille (http://www.lonnrot.net/etext.html).
|
|
Packit |
1f3717 |
#
|
|
Packit |
1f3717 |
# Siis hyväksytään esim. isä+i+nsä, vala+i+nsa, kasvo+i+nsa, pöytä+i+mme, synte+i+mme, mutta ei usko+i+mme.
|
|
Packit |
1f3717 |
#
|
|
Packit |
1f3717 |
if ($sana in <"ni", "si", "s", "nsa", "nsä", "ns", "mme", "nne">) then
|
|
Packit |
1f3717 |
if ($vasen.$i.sija = omanto_in) then
|
|
Packit |
1f3717 |
if (($sana in <"nsa", "nsä">) or
|
|
Packit |
1f3717 |
(($sana in <"mme">) and (substring ($vasen.($i-1).alku, 1R) in <"a", "e", "ä">))) then
|
|
Packit |
1f3717 |
if (loppu in $oikea.jatko) then
|
|
Packit |
1f3717 |
result $result, accept;
|
|
Packit |
1f3717 |
end;
|
|
Packit |
1f3717 |
result $result, rules liitesana;
|
|
Packit |
1f3717 |
else
|
|
Packit |
1f3717 |
stop;
|
|
Packit |
1f3717 |
end;
|
|
Packit |
1f3717 |
else
|
|
Packit |
1f3717 |
if (loppu in $oikea.jatko) then
|
|
Packit |
1f3717 |
result $result, accept;
|
|
Packit |
1f3717 |
end;
|
|
Packit |
1f3717 |
result $result, rules liitesana;
|
|
Packit |
1f3717 |
end;
|
|
Packit |
1f3717 |
elseif omistusliite3_oikein ($vasen.$i.alku, $sana) then
|
|
Packit |
1f3717 |
#define $o1 := transmit ($vasen.$i.alku + " " + $sana);
|
|
Packit |
1f3717 |
#define $o2 := transmit ((strcat ($vasen) matches ".*(aa|ee|ii|oo|uu|yy|ää|öö)"));
|
|
Packit |
1f3717 |
#define $o3 := transmit ((not (strcat ($vasen) matches ".*(aa|ee|ii|oo|uu|yy|ää|öö)")));
|
|
Packit |
1f3717 |
#define $o4 := transmit (($vasen.$i.luokka = sijapääte));
|
|
Packit |
1f3717 |
if ((not (strcat ($vasen) matches ".*(aa|ee|ii|oo|uu|yy|ää|öö)"))
|
|
Packit |
1f3717 |
and ((($vasen.$i.luokka = sijapääte) and
|
|
Packit |
1f3717 |
($vasen.$i.sija in
|
|
Packit |
1f3717 |
osanto_tA, osanto_ttA, osanto_itA,
|
|
Packit |
1f3717 |
osanto_jA,
|
|
Packit |
1f3717 |
olento_nA, olento_inA,
|
|
Packit |
1f3717 |
tulento_ksi, tulento_iksi,
|
|
Packit |
1f3717 |
sisäolento_ssA, sisäolento_issA,
|
|
Packit |
1f3717 |
sisäeronto_stA, sisäeronto_istA,
|
|
Packit |
1f3717 |
ulko_olento_llA, ulko_olento_illA,
|
|
Packit |
1f3717 |
ulkoeronto_ltA, ulkoeronto_iltA,
|
|
Packit |
1f3717 |
ulkotulento_lle, ulkotulento_ille,
|
|
Packit |
1f3717 |
vajanto_ttA, vajanto_ittA,
|
|
Packit |
1f3717 |
seuranto_ine>))
|
|
Packit |
1f3717 |
or ($vasen.$i.luokka in <seikkasana, suhdesana>)
|
|
Packit |
1f3717 |
or (($vasen.$i.luokka = nimisana) and ($vasen.$i.sijamuoto /= nil)))) then # Omallatunnolla+an yms.
|
|
Packit |
1f3717 |
if (loppu in $oikea.jatko) then
|
|
Packit |
1f3717 |
result $result, accept;
|
|
Packit |
1f3717 |
end;
|
|
Packit |
1f3717 |
result $result, rules liitesana;
|
|
Packit |
1f3717 |
elseif (($vasen.$i.luokka in <nimitapa_1_pitkä, nimitapa_2, nimitapa_3, nimitapa_3_saama, nimitapa_5>)
|
|
Packit |
1f3717 |
and not ($vasen.$i.alku in <"maa", "mää">)) then ## Tämä ehto on kopsattu Harri Pitkäsen Voikko-versiosta:
|
|
Packit |
1f3717 |
## eroa+maa+an on väärin.
|
|
Packit |
1f3717 |
if (loppu in $oikea.jatko) then
|
|
Packit |
1f3717 |
result $result, accept;
|
|
Packit |
1f3717 |
end;
|
|
Packit |
1f3717 |
result $result, rules liitesana;
|
|
Packit |
1f3717 |
end;
|
|
Packit |
1f3717 |
end;
|
|
Packit |
1f3717 |
end;
|
|
Packit |
1f3717 |
|
|
Packit |
1f3717 |
|
|
Packit |
1f3717 |
combi_rule voitto_yliaste ($vasen, $oikea, $sana, $n):
|
|
Packit |
1f3717 |
####define $profile := transmit ("voitto_yliaste ($vasen, $oikea, $sana, $n):");
|
|
Packit |
1f3717 |
? $oikea.luokka in @voittoaste + @yliaste;
|
|
Packit |
1f3717 |
define $i := $n - 1;
|
|
Packit |
1f3717 |
|
|
Packit |
1f3717 |
#define $nimi1a := transmit ("voitto_yliaste1 " + $vasen.$i.alku + " " + $sana);
|
|
Packit |
1f3717 |
#define $nimi2a := transmit (<"voitto_yliaste2"> + <$vasen.$i>);
|
|
Packit |
1f3717 |
#define $nimi3a := transmit (<"voitto_yliaste3"> + <$oikea> + <$sana>);
|
|
Packit |
1f3717 |
|
|
Packit |
1f3717 |
? $oikea.luokka in $vasen.$i.jatko;
|
|
Packit |
1f3717 |
? äs_ok ($vasen.$i, $oikea);
|
|
Packit |
1f3717 |
|
|
Packit |
1f3717 |
if $oikea.äs = aä then $oikea.äs := $vasen.$i.äs; end;
|
|
Packit |
1f3717 |
|
|
Packit |
1f3717 |
define $res := $vasen + <[alku: $sana] + $oikea>;
|
|
Packit |
1f3717 |
|
|
Packit |
1f3717 |
if ($oikea.luokka = voittoaste and yhdyssana in $oikea.jatko) then
|
|
Packit |
1f3717 |
#
|
|
Packit |
1f3717 |
# Jos jatkossa on yhdyssana, niin on myös tavuviiva.
|
|
Packit |
1f3717 |
#
|
|
Packit |
1f3717 |
result $res, rules yhdyssana, tavuviiva;
|
|
Packit |
1f3717 |
end;
|
|
Packit |
1f3717 |
if (liitesana in $oikea.jatko) then
|
|
Packit |
1f3717 |
result $res, rules liitesana;
|
|
Packit |
1f3717 |
end;
|
|
Packit |
1f3717 |
if (omistusliite in $oikea.jatko) then
|
|
Packit |
1f3717 |
result $res, rules omistusliite;
|
|
Packit |
1f3717 |
end;
|
|
Packit |
1f3717 |
if (johdin_UUs in $oikea.jatko) then
|
|
Packit |
1f3717 |
result $res, rules laatusanasta_johdettu_nimisana;
|
|
Packit |
1f3717 |
end;
|
|
Packit |
1f3717 |
if (loppu in $oikea.jatko) then
|
|
Packit |
1f3717 |
result $res, accept;
|
|
Packit |
1f3717 |
end;
|
|
Packit |
1f3717 |
|
|
Packit |
1f3717 |
result $res, rules sijapääte;
|
|
Packit |
1f3717 |
end;
|
|
Packit |
1f3717 |
|
|
Packit |
1f3717 |
|
|
Packit |
1f3717 |
combi_rule laatutavan_voitto_yliaste ($vasen, $oikea, $sana, $n):
|
|
Packit |
1f3717 |
####define $profile := transmit ("laatutavan_voitto_yliaste ($vasen, $oikea, $sana, $n):");
|
|
Packit |
1f3717 |
? $oikea.luokka in @voittoaste + @yliaste;
|
|
Packit |
1f3717 |
define $i := $n - 1;
|
|
Packit |
1f3717 |
|
|
Packit |
1f3717 |
? $oikea.luokka in $vasen.$i.jatko;
|
|
Packit |
1f3717 |
? äs_ok ($vasen.$i, $oikea);
|
|
Packit |
1f3717 |
|
|
Packit |
1f3717 |
if $oikea.äs = aä then $oikea.äs := $vasen.$i.äs; end;
|
|
Packit |
1f3717 |
|
|
Packit |
1f3717 |
define $res := $vasen + <[alku: $sana] + $oikea>;
|
|
Packit |
1f3717 |
|
|
Packit |
1f3717 |
if (liitesana in $oikea.jatko) then
|
|
Packit |
1f3717 |
result $res, rules liitesana;
|
|
Packit |
1f3717 |
end;
|
|
Packit |
1f3717 |
if (omistusliite in $oikea.jatko) then
|
|
Packit |
1f3717 |
result $res, rules omistusliite;
|
|
Packit |
1f3717 |
end;
|
|
Packit |
1f3717 |
if (loppu in $oikea.jatko) then
|
|
Packit |
1f3717 |
result $res, accept;
|
|
Packit |
1f3717 |
end;
|
|
Packit |
1f3717 |
|
|
Packit |
1f3717 |
result $res, rules sijapääte;
|
|
Packit |
1f3717 |
end;
|
|
Packit |
1f3717 |
|
|
Packit |
1f3717 |
|
|
Packit |
1f3717 |
subrule strcat ($vasen):
|
|
Packit |
1f3717 |
define $s := "";
|
|
Packit |
1f3717 |
|
|
Packit |
1f3717 |
foreach $k in $vasen:
|
|
Packit |
1f3717 |
$s :=+ $k.alku;
|
|
Packit |
1f3717 |
end;
|
|
Packit |
1f3717 |
|
|
Packit |
1f3717 |
return $s;
|
|
Packit |
1f3717 |
end;
|
|
Packit |
1f3717 |
|
|
Packit |
1f3717 |
|
|
Packit |
1f3717 |
subrule sana1 ($tietue):
|
|
Packit |
1f3717 |
if ($tietue.perusmuoto2 /= nil) then
|
|
Packit |
1f3717 |
return $tietue.perusmuoto2;
|
|
Packit |
1f3717 |
elseif ($tietue.perusmuoto = nil) then
|
|
Packit |
1f3717 |
return $tietue.alku;
|
|
Packit |
1f3717 |
else
|
|
Packit |
1f3717 |
return $tietue.perusmuoto;
|
|
Packit |
1f3717 |
end;
|
|
Packit |
1f3717 |
end;
|
|
Packit |
1f3717 |
|
|
Packit |
1f3717 |
|
|
Packit |
1f3717 |
subrule sisätulento_Vn_oikein ($sija, $ed_kirjain, $sana):
|
|
Packit |
1f3717 |
return ((($ed_kirjain matches @a) and ($sana matches "an?")) or
|
|
Packit |
1f3717 |
(($ed_kirjain matches @e) and ($sana matches "en?")) or
|
|
Packit |
1f3717 |
(($ed_kirjain matches @i) and ($sana matches "in?")) or
|
|
Packit |
1f3717 |
(($ed_kirjain matches @o) and ($sana matches "on?")) or
|
|
Packit |
1f3717 |
(($ed_kirjain matches @u) and ($sana matches "un?")) or
|
|
Packit |
1f3717 |
(($ed_kirjain matches @y) and ($sana matches "yn?")) or
|
|
Packit |
1f3717 |
(($ed_kirjain matches @ä) and ($sana matches "än?")) or
|
|
Packit |
1f3717 |
(($ed_kirjain matches @ö) and ($sana matches "ön?")));
|
|
Packit |
1f3717 |
end;
|
|
Packit |
1f3717 |
|
|
Packit |
1f3717 |
|
|
Packit |
1f3717 |
subrule sisätulento_hVn_oikein ($sija, $ed_kirjain, $sana):
|
|
Packit |
1f3717 |
return ((($ed_kirjain matches @a) and ($sana matches "han?")) or
|
|
Packit |
1f3717 |
(($ed_kirjain matches @e) and ($sana matches "hen?")) or
|
|
Packit |
1f3717 |
(($ed_kirjain matches @i) and ($sana matches "hin?")) or
|
|
Packit |
1f3717 |
(($ed_kirjain matches @o) and ($sana matches "hon?")) or
|
|
Packit |
1f3717 |
(($ed_kirjain matches @u) and ($sana matches "hun?")) or
|
|
Packit |
1f3717 |
(($ed_kirjain matches @y) and ($sana matches "hyn?")) or
|
|
Packit |
1f3717 |
(($ed_kirjain matches @ä) and ($sana matches "hän?")) or
|
|
Packit |
1f3717 |
(($ed_kirjain matches @ö) and ($sana matches "hön?")) or
|
|
Packit |
1f3717 |
(($ed_kirjain matches "'"))); # Parfait'hen yms.
|
|
Packit |
1f3717 |
end;
|
|
Packit |
1f3717 |
|
|
Packit |
1f3717 |
|
|
Packit |
1f3717 |
subrule omistusliite3_oikein ($sana, $liite):
|
|
Packit |
1f3717 |
return ((($sana matches ".*" + @a) and ($liite = "an")) or
|
|
Packit |
1f3717 |
(($sana matches ".*" + @e) and ($liite in <"en", "hen">)) or
|
|
Packit |
1f3717 |
(($sana matches ".*" + @i) and ($liite = "in")) or
|
|
Packit |
1f3717 |
(($sana matches ".*" + @o) and ($liite = "on")) or
|
|
Packit |
1f3717 |
(($sana matches ".*" + @u) and ($liite = "un")) or
|
|
Packit |
1f3717 |
(($sana matches ".*" + @y) and ($liite = "yn")) or
|
|
Packit |
1f3717 |
(($sana matches ".*" + @ä) and ($liite = "än")) or
|
|
Packit |
1f3717 |
(($sana matches ".*" + @ö) and ($liite = "ön")));
|
|
Packit |
1f3717 |
end;
|
|
Packit |
1f3717 |
|
|
Packit |
1f3717 |
|
|
Packit |
1f3717 |
subrule viimeinen_kirjain ($sana):
|
|
Packit |
1f3717 |
if ($sana matches ".*" + @a) then return "a";
|
|
Packit |
1f3717 |
elseif ($sana matches ".*" + @e) then return "e";
|
|
Packit |
1f3717 |
elseif ($sana matches ".*" + @i) then return "i";
|
|
Packit |
1f3717 |
elseif ($sana matches ".*" + @o) then return "o";
|
|
Packit |
1f3717 |
elseif ($sana matches ".*" + @u) then return "u";
|
|
Packit |
1f3717 |
elseif ($sana matches ".*" + @y) then return "y";
|
|
Packit |
1f3717 |
elseif ($sana matches ".*" + @ä) then return "ä";
|
|
Packit |
1f3717 |
elseif ($sana matches ".*" + @ö) then return "ö";
|
|
Packit |
1f3717 |
else
|
|
Packit |
1f3717 |
error "Viimeinen kirjain ei ole ääntiö sanassa " + $sana;
|
|
Packit |
1f3717 |
end;
|
|
Packit |
1f3717 |
end;
|
|
Packit |
1f3717 |
|
|
Packit |
1f3717 |
|
|
Packit |
1f3717 |
subrule yhdyssana_oikein ($vasen, $oikea, $n):
|
|
Packit |
1f3717 |
#define $profile := transmit ("subrule yhdyssana_oikein ($vasen, $oikea, $n):");
|
|
Packit |
1f3717 |
#define $a := transmit (<$oikea.luokka> + <$oikea.perusmuoto> + <$vasen.$n.luokka>);
|
|
Packit |
1f3717 |
#define $b := transmit (<$vasen.$n.perusmuoto> + <$oikea.perusmuoto>);
|
|
Packit |
1f3717 |
|
|
Packit |
1f3717 |
|
|
Packit |
1f3717 |
# Jotkut sanat eivät voi olla yhdyssanojen osina.
|
|
Packit |
1f3717 |
#
|
|
Packit |
1f3717 |
if ((($vasen.$n.tiedot /= nil) and ((ei_ys in $vasen.$n.tiedot) or (ei_ysa in $vasen.$n.tiedot))) or
|
|
Packit |
1f3717 |
(($oikea.tiedot /= nil) and ((ei_ys in $oikea.tiedot)))) then
|
|
Packit |
1f3717 |
#define $d := transmit (<"yhdyssana_oikein-d">);
|
|
Packit |
1f3717 |
return no;
|
|
Packit |
1f3717 |
end;
|
|
Packit |
1f3717 |
|
|
Packit |
1f3717 |
if (($vasen.$n.luokka /= tavuviiva) and ($oikea.tiedot /= nil) and (ei_ysj in $oikea.tiedot)) then
|
|
Packit |
1f3717 |
return no;
|
|
Packit |
1f3717 |
end;
|
|
Packit |
1f3717 |
|
|
Packit |
1f3717 |
if (($vasen.$n.perusmuoto /= nil) and ($oikea.perusmuoto /= nil)) then
|
|
Packit |
1f3717 |
#
|
|
Packit |
1f3717 |
# Yhdyssanan eka osa ei voi loppua samaan ääntiöön, millä toka osa alkaa.
|
|
Packit |
1f3717 |
# Siis esim. ensiilta ei käy, vaan pitäisi olla ensi-ilta.
|
|
Packit |
1f3717 |
#
|
|
Packit |
1f3717 |
define $s := $vasen.$n.perusmuoto;
|
|
Packit |
1f3717 |
if (length($vasen.$n.alku) greater length($vasen.$n.perusmuoto)) then
|
|
Packit |
1f3717 |
$s := $vasen.$n.alku;
|
|
Packit |
1f3717 |
end;
|
|
Packit |
1f3717 |
define $s1 := substring($s,1R);
|
|
Packit |
1f3717 |
define $s2 := substring($oikea.perusmuoto,1);
|
|
Packit |
1f3717 |
if (($s1 = $s2) and ($s1 matches @ääntiö) and ($s2 matches @ääntiö)) then
|
|
Packit |
1f3717 |
return no;
|
|
Packit |
1f3717 |
## return ($s1 /= $s2);
|
|
Packit |
1f3717 |
end;
|
|
Packit |
1f3717 |
end;
|
|
Packit |
1f3717 |
return yes;
|
|
Packit |
1f3717 |
end;
|
|
Packit |
1f3717 |
|
|
Packit |
1f3717 |
|
|
Packit |
1f3717 |
#####################################################
|
|
Packit |
1f3717 |
|
|
Packit |
1f3717 |
|
|
Packit |
1f3717 |
output_filter tulosta ($tulos):
|
|
Packit |
1f3717 |
foreach $j in $tulos:
|
|
Packit |
1f3717 |
#define $a := transmit ($j);
|
|
Packit |
1f3717 |
#define $b := transmit ("");
|
|
Packit |
1f3717 |
result perusmuoto ($j);
|
|
Packit |
1f3717 |
end;
|
|
Packit |
1f3717 |
end;
|
|
Packit |
1f3717 |
|
|
Packit |
1f3717 |
|
|
Packit |
1f3717 |
subrule sana2 ($tietue):
|
|
Packit |
1f3717 |
# ? ($tietue.luokka = lukusana);
|
|
Packit |
1f3717 |
#define $a := transmit ($tietue);
|
|
Packit |
1f3717 |
if ($tietue.perusmuoto = "kymmenen") then
|
|
Packit |
1f3717 |
return "kymmentä";
|
|
Packit |
1f3717 |
elseif ($tietue.perusmuoto = "tuhat") then
|
|
Packit |
1f3717 |
return "tuhatta";
|
|
Packit |
1f3717 |
elseif ($tietue.alaluokka in <sata, miljoona> and $tietue.perusmuoto /= "sadas") then
|
|
Packit |
1f3717 |
return $tietue.perusmuoto + "a";
|
|
Packit |
1f3717 |
elseif ($tietue.perusmuoto2 /= nil) then
|
|
Packit |
1f3717 |
return $tietue.perusmuoto2;
|
|
Packit |
1f3717 |
elseif ($tietue.perusmuoto = nil) then
|
|
Packit |
1f3717 |
return $tietue.alku;
|
|
Packit |
1f3717 |
else
|
|
Packit |
1f3717 |
return $tietue.perusmuoto;
|
|
Packit |
1f3717 |
end;
|
|
Packit |
1f3717 |
end;
|
|
Packit |
1f3717 |
|
|
Packit |
1f3717 |
|
|
Packit |
1f3717 |
subrule lukusanan_perusmuoto ($tietue, $i, $k, $s):
|
|
Packit |
1f3717 |
#define $a := transmit (<"a"> + <$tietue.$i.alku> + <$tietue.$i.perusmuoto> + <length($tietue)> + <$i> + <$k> + <$s>);
|
|
Packit |
1f3717 |
|
|
Packit |
1f3717 |
if ($i = 1 and $tietue.$i.alaluokka in <sata, tuhat, miljoona>) then
|
|
Packit |
1f3717 |
return $tietue.$i.perusmuoto;
|
|
Packit |
1f3717 |
end;
|
|
Packit |
1f3717 |
|
|
Packit |
1f3717 |
if ($tietue.$i.luokka = lukusanan_jälkiliite) then
|
|
Packit |
1f3717 |
return $tietue.$i.perusmuoto;
|
|
Packit |
1f3717 |
end;
|
|
Packit |
1f3717 |
|
|
Packit |
1f3717 |
if ($tietue.$i.alaluokka = yksiyhdeksän) then
|
|
Packit |
1f3717 |
if (($k greater 2) and ($i less $k) and ($tietue.($i+1).luokka = sijapääte) and ($tietue.($i+2).luokka /= lukusana)) then
|
|
Packit |
1f3717 |
return $tietue.$i.alku;
|
|
Packit |
1f3717 |
else
|
|
Packit |
1f3717 |
return $tietue.$i.perusmuoto;
|
|
Packit |
1f3717 |
end;
|
|
Packit |
1f3717 |
elseif ($tietue.$i.perusmuoto = "kymmenen") then
|
|
Packit |
1f3717 |
if (($i = $k) and (($s matches ".+sataa") or ($s = "sata"))) then
|
|
Packit |
1f3717 |
return "kymmenen";
|
|
Packit |
1f3717 |
else
|
|
Packit |
1f3717 |
return "kymmentä";
|
|
Packit |
1f3717 |
end;
|
|
Packit |
1f3717 |
elseif ($tietue.$i.alaluokka in <sata, tuhat, miljoona>) then
|
|
Packit |
1f3717 |
if ($tietue.($i+1).luokka in <lukusana, sijapääte>) then
|
|
Packit |
1f3717 |
#define $b := transmit (<"b"> + <$tietue.$i.alku> + <$tietue.$i.perusmuoto> + <length($tietue)> + <$i> + <$k> + <$s>);
|
|
Packit |
1f3717 |
return sana2 ($tietue.$i);
|
|
Packit |
1f3717 |
else
|
|
Packit |
1f3717 |
#define $c := transmit (<"c"> + <$tietue.$i.alku> + <$tietue.$i.perusmuoto> + <length($tietue)> + <$i> + <$k> + <$s>);
|
|
Packit |
1f3717 |
return $tietue.$i.perusmuoto;
|
|
Packit |
1f3717 |
end;
|
|
Packit |
1f3717 |
elseif ($tietue.$i.luokka = sijapääte) then
|
|
Packit |
1f3717 |
#define $ö := transmit (<"ö"> + <$tietue.$i.alku> + <$tietue.$i.perusmuoto> + <length($tietue)> + <$i> + <$k> + <$s>);
|
|
Packit |
1f3717 |
if ($i less $k and $tietue.($i+1).luokka in <lukusana, lukusanan_jälkiliite>) then
|
|
Packit |
1f3717 |
return "";
|
|
Packit |
1f3717 |
else
|
|
Packit |
1f3717 |
return $tietue.$i.alku;
|
|
Packit |
1f3717 |
end;
|
|
Packit |
1f3717 |
end;
|
|
Packit |
1f3717 |
return alku ($tietue.$i);
|
|
Packit |
1f3717 |
end;
|
|
Packit |
1f3717 |
|
|
Packit |
1f3717 |
|
|
Packit |
1f3717 |
subrule alku ($tietue):
|
|
Packit |
1f3717 |
#define $a := transmit (<"ALKU"> + <$tietue>);
|
|
Packit |
1f3717 |
|
|
Packit |
1f3717 |
if ($tietue.perusmuoto = nil) then return $tietue.alku; end;
|
|
Packit |
1f3717 |
|
|
Packit |
1f3717 |
if ($tietue.alku2 /= nil) then
|
|
Packit |
1f3717 |
##define $aaaa := transmit ($tietue.alku);
|
|
Packit |
1f3717 |
return $tietue.alku2;
|
|
Packit |
1f3717 |
end;
|
|
Packit |
1f3717 |
|
|
Packit |
1f3717 |
|
|
Packit |
1f3717 |
# Antautua/antauta. Antau(du)ttu-muodolle tulee väärä perusmuoto antauttu.
|
|
Packit |
1f3717 |
#
|
|
Packit |
1f3717 |
# if ($tietue.perusmuoto matches ("...*(au|äy)" : $alku, "t(ua|yä)" : $loppu)) then
|
|
Packit |
1f3717 |
# define $n := length ($alku);
|
|
Packit |
1f3717 |
# return substring($tietue.perusmuoto,1,$n+2);
|
|
Packit |
1f3717 |
# end;
|
|
Packit |
1f3717 |
|
|
Packit |
1f3717 |
# Onneto(i)n.
|
|
Packit |
1f3717 |
#
|
|
Packit |
1f3717 |
if (($tietue.luokka = johdin_tOn) and ($tietue.alku matches ("t[oö]in"))) then
|
|
Packit |
1f3717 |
#define $ton := transmit ("ton");
|
|
Packit |
1f3717 |
return $tietue.perusmuoto;
|
|
Packit |
1f3717 |
end;
|
|
Packit |
1f3717 |
|
|
Packit |
1f3717 |
define $taulukko := <
|
|
Packit |
1f3717 |
# <"", "", "", "">,
|
|
Packit |
1f3717 |
# <"kamari", "kammar", "kamar">,
|
|
Packit |
1f3717 |
<"kirjoitelma", "kirjotelm", "kirjoitelm">,
|
|
Packit |
1f3717 |
<"kulttuuri", "kultuur", "kulttuur">,
|
|
Packit |
1f3717 |
<"liipaisin", "liipasi", "liipaisi">,
|
|
Packit |
1f3717 |
<"mahdoton", "maho", "mahdo">,
|
|
Packit |
1f3717 |
# <"poliitikko", "politik", "poliitik">,
|
|
Packit |
1f3717 |
# <"politiikka", "politik", "politiik">,
|
|
Packit |
1f3717 |
<"punainen", "punan", "punain">,
|
|
Packit |
1f3717 |
<"punainen", "punas", "punais">,
|
|
Packit |
1f3717 |
<"teatteri", "teaatte", "teatte">
|
|
Packit |
1f3717 |
>;
|
|
Packit |
1f3717 |
foreach $k in $taulukko:
|
|
Packit |
1f3717 |
if ($tietue.perusmuoto = $k.1) then
|
|
Packit |
1f3717 |
#define $e := transmit ($k);
|
|
Packit |
1f3717 |
define $n := length ($k.2);
|
|
Packit |
1f3717 |
if (length($tietue.alku) greater_equal $n) and (substring ($tietue.alku,1,$n) = $k.2) then
|
|
Packit |
1f3717 |
#define $ö := transmit ("Huu " + $tietue.alku + " " + $k.3 + " " + substring ($tietue.alku, $n + 1, 1R));
|
|
Packit |
1f3717 |
return $k.3 + substring ($tietue.alku, $n + 1, 1R);
|
|
Packit |
1f3717 |
end;
|
|
Packit |
1f3717 |
end;
|
|
Packit |
1f3717 |
end;
|
|
Packit |
1f3717 |
#define $buu := transmit (<"boo"> + <$tietue.alku>);
|
|
Packit |
1f3717 |
return $tietue.alku;
|
|
Packit |
1f3717 |
end;
|
|
Packit |
1f3717 |
|
|
Packit |
1f3717 |
|
|
Packit |
1f3717 |
# Muutetaan sana perusmuotoon: Väisäsillemmekö -> Väisänen.
|
|
Packit |
1f3717 |
#
|
|
Packit |
1f3717 |
subrule perusmuoto ($tietue):
|
|
Packit |
1f3717 |
define $n := length ($tietue);
|
|
Packit |
1f3717 |
define $k := $n;
|
|
Packit |
1f3717 |
|
|
Packit |
1f3717 |
#define $z := transmit (<"1"> + <$tietue> + <$k>);
|
|
Packit |
1f3717 |
|
|
Packit |
1f3717 |
# Poistetaan sanan lopusta osat, jotka eivät vaikuta perusmuotoon.
|
|
Packit |
1f3717 |
#
|
|
Packit |
1f3717 |
repeat while ($tietue.$k.luokka in
|
|
Packit |
1f3717 |
omistusliite, kaksoispiste,
|
|
Packit |
1f3717 |
voittoaste, yliaste,
|
|
Packit |
1f3717 |
liitesana_kä, nimitapa_1_pitkä, nimitapa_5>
|
|
Packit |
1f3717 |
+ @tositapa + @ehtotapa + @mahtotapa + @käskytapa
|
|
Packit |
1f3717 |
+ @nimitapa_1 + @nimitapa_2 + @nimitapa_3
|
|
Packit |
1f3717 |
+ @laatutapa_1 + @laatutapa_2);
|
|
Packit |
1f3717 |
#define $a := transmit (<"2"> + <$tietue.$k.perusmuoto> + <$tietue.$k.alku> + <$k>);
|
|
Packit |
1f3717 |
$k :=- 1;
|
|
Packit |
1f3717 |
end;
|
|
Packit |
1f3717 |
|
|
Packit |
1f3717 |
#define $a := transmit (<"A"> + <$tietue.$k.perusmuoto> + <$tietue.$k.alku> + <$k>);
|
|
Packit |
1f3717 |
|
|
Packit |
1f3717 |
define $s := "";
|
|
Packit |
1f3717 |
foreach $i in $k - 1:
|
|
Packit |
1f3717 |
if ($tietue.$i.lukutyyppi /= nil and $tietue.$i.lukutyyppi = perusluku) then
|
|
Packit |
1f3717 |
if ($i = 1 and $tietue.($i+1).luokka = sijapääte and $tietue.($i+2).luokka /= lukusana) then
|
|
Packit |
1f3717 |
$s :=+ $tietue.$i.alku;
|
|
Packit |
1f3717 |
else
|
|
Packit |
1f3717 |
$s :=+ lukusanan_perusmuoto ($tietue, $i, $k, $s);
|
|
Packit |
1f3717 |
end;
|
|
Packit |
1f3717 |
# elseif ($tietue.($i+1).luokka = tavuviiva) then
|
|
Packit |
1f3717 |
# if ($tietue.$i.luokka = sijapääte and $tietue.$i.sija in <omanto_n>) then
|
|
Packit |
1f3717 |
# $s :=+ alku ($tietue.$i);
|
|
Packit |
1f3717 |
# end;
|
|
Packit |
1f3717 |
else
|
|
Packit |
1f3717 |
$s :=+ alku ($tietue.$i);
|
|
Packit |
1f3717 |
#define $b := transmit (<"B"> + <$tietue.$i.perusmuoto> + <$tietue.$i.alku> + <$tietue.$i.luokka> + <$i> + <$s>);
|
|
Packit |
1f3717 |
end;
|
|
Packit |
1f3717 |
end;
|
|
Packit |
1f3717 |
if ($k = 1) then
|
|
Packit |
1f3717 |
$s :=+ sana1 ($tietue.$k);
|
|
Packit |
1f3717 |
#define $b := transmit (<"C"> + <$tietue.$k.perusmuoto> + <$tietue.$k.alku> + <$k> + <$s>);
|
|
Packit |
1f3717 |
elseif ($tietue.$k.lukutyyppi /= nil and $tietue.$k.lukutyyppi = perusluku) then
|
|
Packit |
1f3717 |
$s :=+ lukusanan_perusmuoto ($tietue, $k, $k, $s);
|
|
Packit |
1f3717 |
#define $c := transmit (<"D"> + <$tietue.$k.perusmuoto> + <$tietue.$k.alku> + <$k> + <$s>);
|
|
Packit |
1f3717 |
else
|
|
Packit |
1f3717 |
$s :=+ sana2 ($tietue.$k);
|
|
Packit |
1f3717 |
#define $d := transmit (<"E"> + <$tietue.$k.perusmuoto> + <$tietue.$k.alku> + <$k> + <$s>);
|
|
Packit |
1f3717 |
end;
|
|
Packit |
1f3717 |
return $s;
|
|
Packit |
1f3717 |
end;
|
|
Packit |
1f3717 |
|
|
Packit |
1f3717 |
|
|
Packit |
1f3717 |
|
|
Packit |
1f3717 |
##==========================================
|
|
Packit |
1f3717 |
|
|
Packit |
1f3717 |
|
|
Packit |
1f3717 |
combi_rule teonsana_teonsanasta_johdettu_nimisana ($vasen, $oikea, $sana, $n):
|
|
Packit |
1f3717 |
####define $profile := transmit ("teonsana_teonsanasta_johdettu_nimisana ($vasen, $oikea, $sana, $n):");
|
|
Packit |
1f3717 |
? $oikea.luokka = teonsana;
|
|
Packit |
1f3717 |
? nimisana in $vasen.($n-1).jatko;
|
|
Packit |
1f3717 |
? $oikea.jatko * (@teonsanasta_johdettu_teonsana) /= <>;
|
|
Packit |
1f3717 |
? äs_ok ($vasen.($n-1), $oikea);
|
|
Packit |
1f3717 |
|
|
Packit |
1f3717 |
#define $a := transmit ($vasen.($n-1));
|
|
Packit |
1f3717 |
#define $b := transmit ($oikea);
|
|
Packit |
1f3717 |
#define $c := transmit ($sana);
|
|
Packit |
1f3717 |
#define $d := transmit ($n);
|
|
Packit |
1f3717 |
#define $e := transmit (<"">);
|
|
Packit |
1f3717 |
|
|
Packit |
1f3717 |
if $oikea.äs = aä then $oikea.äs := $vasen.($n-1).äs; end;
|
|
Packit |
1f3717 |
result $vasen + <[alku: $sana] + $oikea>, rules teonsanan_johdos_teonsana_nimisana;
|
|
Packit |
1f3717 |
end;
|
|
Packit |
1f3717 |
|
|
Packit |
1f3717 |
|
|
Packit |
1f3717 |
combi_rule teonsana_teonsanasta_johdettu_laatusana ($vasen, $oikea, $sana, $n):
|
|
Packit |
1f3717 |
####define $profile := transmit ("teonsana_teonsanasta_johdettu_laatusana ($vasen, $oikea, $sana, $n):");
|
|
Packit |
1f3717 |
? $oikea.luokka = teonsana;
|
|
Packit |
1f3717 |
? laatusana in $vasen.($n-1).jatko;
|
|
Packit |
1f3717 |
? $oikea.jatko * (@teonsanasta_johdettu_teonsana) /= <>;
|
|
Packit |
1f3717 |
? äs_ok ($vasen.($n-1), $oikea);
|
|
Packit |
1f3717 |
|
|
Packit |
1f3717 |
#define $a := transmit ($vasen.($n-1));
|
|
Packit |
1f3717 |
#define $b := transmit ($oikea);
|
|
Packit |
1f3717 |
#define $c := transmit ($sana);
|
|
Packit |
1f3717 |
#define $d := transmit ($n);
|
|
Packit |
1f3717 |
#define $e := transmit (<"">);
|
|
Packit |
1f3717 |
|
|
Packit |
1f3717 |
if $oikea.äs = aä then $oikea.äs := $vasen.($n-1).äs; end;
|
|
Packit |
1f3717 |
result $vasen + <[alku: $sana] + $oikea>, rules teonsanan_johdos_teonsana_laatusana;
|
|
Packit |
1f3717 |
end;
|
|
Packit |
1f3717 |
|
|
Packit |
1f3717 |
|
|
Packit |
1f3717 |
combi_rule teonsanasta_johdettu_nimisana ($vasen, $oikea, $sana, $n):
|
|
Packit |
1f3717 |
####define $profile := transmit ("teonsanasta_johdettu_nimisana ($vasen, $oikea, $sana, $n):");
|
|
Packit |
1f3717 |
? $oikea.luokka = teonsana;
|
|
Packit |
1f3717 |
? $oikea.jatko * (@teonsanasta_johdettu_nimisana) /= <>;
|
|
Packit |
1f3717 |
|
|
Packit |
1f3717 |
#define $a := transmit ($vasen.($n-1).jatko);
|
|
Packit |
1f3717 |
#define $b := transmit ($oikea.jatko);
|
|
Packit |
1f3717 |
#define $c := transmit ($sana);
|
|
Packit |
1f3717 |
#define $d := transmit ($n);
|
|
Packit |
1f3717 |
#define $e := transmit ($vasen.($n-1));
|
|
Packit |
1f3717 |
|
|
Packit |
1f3717 |
# ? yhdyssana_oikein ($vasen, $oikea, $n-1);
|
|
Packit |
1f3717 |
if ((substring($vasen.($n-1).perusmuoto,1R) = substring($oikea.perusmuoto,1)) and
|
|
Packit |
1f3717 |
(substring($oikea.perusmuoto,1) matches @ääntiö)) then
|
|
Packit |
1f3717 |
stop;
|
|
Packit |
1f3717 |
end;
|
|
Packit |
1f3717 |
? $vasen.($n-1).jatko * <nimisana, nimi_laatusana, laatusana, etuliite> /= <>;
|
|
Packit |
1f3717 |
|
|
Packit |
1f3717 |
|
|
Packit |
1f3717 |
result $vasen + <[alku: $sana] + $oikea>,
|
|
Packit |
1f3717 |
rules teonsanan_johdos_nimisana;
|
|
Packit |
1f3717 |
end;
|
|
Packit |
1f3717 |
|
|
Packit |
1f3717 |
|
|
Packit |
1f3717 |
combi_rule teonsanan_johdos_nimisana ($vasen, $oikea, $sana, $n):
|
|
Packit |
1f3717 |
####define $profile := transmit ("teonsanan_johdos_nimisana ($vasen, $oikea, $sana, $n):");
|
|
Packit |
1f3717 |
? $oikea.luokka in @teonsanasta_johdettu_nimisana;
|
|
Packit |
1f3717 |
|
|
Packit |
1f3717 |
define $i := $n - 1;
|
|
Packit |
1f3717 |
? $oikea.luokka in $vasen.$i.jatko;
|
|
Packit |
1f3717 |
|
|
Packit |
1f3717 |
# Vaihdetaan ääntiösointu oikeaksi.
|
|
Packit |
1f3717 |
# Esim. pitää => pito, kiertää => kierros.
|
|
Packit |
1f3717 |
#
|
|
Packit |
1f3717 |
if ($oikea.luokka in <johdin_O, johdin_Os, johdin_tO_leuto, johdin_tO_liitto>) then
|
|
Packit |
1f3717 |
$vasen.$i :=+ [alkuperäinen_äs: $vasen.($n-1).äs];
|
|
Packit |
1f3717 |
if ($vasen.$i.alku matches ".*" + @yäö + ".*") then
|
|
Packit |
1f3717 |
$vasen.$i.äs := ä;
|
|
Packit |
1f3717 |
else
|
|
Packit |
1f3717 |
$vasen.$i.äs := a;
|
|
Packit |
1f3717 |
end;
|
|
Packit |
1f3717 |
end;
|
|
Packit |
1f3717 |
|
|
Packit |
1f3717 |
? äs_ok ($vasen.$i, $oikea);
|
|
Packit |
1f3717 |
|
|
Packit |
1f3717 |
if $oikea.äs = aä then $oikea.äs := $vasen.$i.äs; end;
|
|
Packit |
1f3717 |
|
|
Packit |
1f3717 |
$vasen.$i :=+ [lähtöluokka: $vasen.$i.luokka];
|
|
Packit |
1f3717 |
$vasen.$i.luokka := nimisana;
|
|
Packit |
1f3717 |
|
|
Packit |
1f3717 |
#define $a := transmit ($vasen.$i.luokka);
|
|
Packit |
1f3717 |
#define $b := transmit ($oikea);
|
|
Packit |
1f3717 |
#define $c := transmit ($sana);
|
|
Packit |
1f3717 |
#define $d := transmit ($n);
|
|
Packit |
1f3717 |
|
|
Packit |
1f3717 |
define $res := $vasen + <[alku: $sana] + $oikea>;
|
|
Packit |
1f3717 |
|
|
Packit |
1f3717 |
if (tavuviiva in $oikea.jatko) then
|
|
Packit |
1f3717 |
result $res, rules tavuviiva;
|
|
Packit |
1f3717 |
end;
|
|
Packit |
1f3717 |
if (yhdyssana in $oikea.jatko) then
|
|
Packit |
1f3717 |
result $res, rules yhdyssana;
|
|
Packit |
1f3717 |
end;
|
|
Packit |
1f3717 |
if (omistusliite in $oikea.jatko) then
|
|
Packit |
1f3717 |
result $res, rules omistusliite;
|
|
Packit |
1f3717 |
end;
|
|
Packit |
1f3717 |
if (liitesana in $oikea.jatko) then
|
|
Packit |
1f3717 |
result $res, rules liitesana;
|
|
Packit |
1f3717 |
end;
|
|
Packit |
1f3717 |
if (loppu in $oikea.jatko) then
|
|
Packit |
1f3717 |
result $res, accept;
|
|
Packit |
1f3717 |
end;
|
|
Packit |
1f3717 |
if (@nimisanasta_johdettu_seikkasana * $oikea.jatko /= <>) then
|
|
Packit |
1f3717 |
result $res, rules nimisanasta_johdettu_seikkasana;
|
|
Packit |
1f3717 |
end;
|
|
Packit |
1f3717 |
if (@nimisanasta_johdettu_laatusana * $oikea.jatko /= <>) then
|
|
Packit |
1f3717 |
result $res, rules nimisanasta_johdettu_laatusana;
|
|
Packit |
1f3717 |
end;
|
|
Packit |
1f3717 |
if (@nimi_laatusanan_johdin * $oikea.jatko /= <>) then
|
|
Packit |
1f3717 |
result $res, rules nimi_laatusanan_johdin;
|
|
Packit |
1f3717 |
end;
|
|
Packit |
1f3717 |
result $res, rules sijapääte;
|
|
Packit |
1f3717 |
end;
|
|
Packit |
1f3717 |
|
|
Packit |
1f3717 |
|
|
Packit |
1f3717 |
#################################################
|
|
Packit |
1f3717 |
|
|
Packit |
1f3717 |
combi_rule teonsanasta_johdettu_laatusana ($vasen, $oikea, $sana, $n):
|
|
Packit |
1f3717 |
####define $profile := transmit ("teonsanasta_johdettu_laatusana ($vasen, $oikea, $sana, $n):");
|
|
Packit |
1f3717 |
? $oikea.luokka = teonsana;
|
|
Packit |
1f3717 |
? $oikea.jatko * @teonsanasta_johdettu_laatusana /= <>;
|
|
Packit |
1f3717 |
|
|
Packit |
1f3717 |
#define $a := transmit ($vasen);
|
|
Packit |
1f3717 |
#define $b := transmit ($oikea);
|
|
Packit |
1f3717 |
#define $c := transmit ($sana);
|
|
Packit |
1f3717 |
#define $d := transmit ($n);
|
|
Packit |
1f3717 |
|
|
Packit |
1f3717 |
## ? yhdyssana_oikein ($vasen, $oikea, $n-1);
|
|
Packit |
1f3717 |
if ((substring($vasen.($n-1).perusmuoto,1R) = substring($oikea.perusmuoto,1)) and
|
|
Packit |
1f3717 |
(substring($oikea.perusmuoto,1) matches @ääntiö)) then
|
|
Packit |
1f3717 |
stop;
|
|
Packit |
1f3717 |
end;
|
|
Packit |
1f3717 |
? $vasen.($n-1).jatko * <nimisana, nimi_laatusana, laatusana, etuliite> /= <>;
|
|
Packit |
1f3717 |
|
|
Packit |
1f3717 |
result $vasen + <[alku: $sana] + $oikea>,
|
|
Packit |
1f3717 |
rules teonsanan_johdos_laatusana;
|
|
Packit |
1f3717 |
end;
|
|
Packit |
1f3717 |
|
|
Packit |
1f3717 |
|
|
Packit |
1f3717 |
combi_rule teonsanan_johdos_laatusana ($vasen, $oikea, $sana, $n):
|
|
Packit |
1f3717 |
####define $profile := transmit ("teonsanan_johdos_laatusana ($vasen, $oikea, $sana, $n):");
|
|
Packit |
1f3717 |
? $oikea.luokka in @teonsanasta_johdettu_laatusana;
|
|
Packit |
1f3717 |
? $oikea.luokka in $vasen.($n-1).jatko;
|
|
Packit |
1f3717 |
? äs_ok ($vasen.($n-1), $oikea);
|
|
Packit |
1f3717 |
|
|
Packit |
1f3717 |
if $oikea.äs = aä then $oikea.äs := $vasen.($n-1).äs; end;
|
|
Packit |
1f3717 |
|
|
Packit |
1f3717 |
#define $a := transmit ($vasen);
|
|
Packit |
1f3717 |
#define $b := transmit ($oikea);
|
|
Packit |
1f3717 |
#define $c := transmit ($sana);
|
|
Packit |
1f3717 |
#define $d := transmit ($n);
|
|
Packit |
1f3717 |
|
|
Packit |
1f3717 |
define $res := $vasen + <[alku: $sana] + $oikea>;
|
|
Packit |
1f3717 |
|
|
Packit |
1f3717 |
if (tavuviiva in $oikea.jatko) then
|
|
Packit |
1f3717 |
result $res, rules tavuviiva;
|
|
Packit |
1f3717 |
end;
|
|
Packit |
1f3717 |
if (yhdyssana in $oikea.jatko) then
|
|
Packit |
1f3717 |
result $res, rules yhdyssana;
|
|
Packit |
1f3717 |
end;
|
|
Packit |
1f3717 |
if (omistusliite in $oikea.jatko) then
|
|
Packit |
1f3717 |
result $res, rules omistusliite;
|
|
Packit |
1f3717 |
end;
|
|
Packit |
1f3717 |
if (liitesana in $oikea.jatko) then
|
|
Packit |
1f3717 |
result $res, rules liitesana;
|
|
Packit |
1f3717 |
end;
|
|
Packit |
1f3717 |
if (loppu in $oikea.jatko) then
|
|
Packit |
1f3717 |
result $res, accept;
|
|
Packit |
1f3717 |
end;
|
|
Packit |
1f3717 |
if (@laatusanasta_johdettu_nimisana * $oikea.jatko /= <>) then
|
|
Packit |
1f3717 |
result $res, rules laatusanasta_johdettu_nimisana;
|
|
Packit |
1f3717 |
end;
|
|
Packit |
1f3717 |
if (@laatusanasta_johdettu_laatusana * $oikea.jatko /= <>) then
|
|
Packit |
1f3717 |
result $res, rules laatusanasta_johdettu_laatusana;
|
|
Packit |
1f3717 |
end;
|
|
Packit |
1f3717 |
if (@nimi_laatusanan_johdin * $oikea.jatko /= <>) then
|
|
Packit |
1f3717 |
result $res, rules nimi_laatusanan_johdin;
|
|
Packit |
1f3717 |
end;
|
|
Packit |
1f3717 |
if ((voittoaste in $oikea.jatko) or (yliaste in $oikea.jatko)) then
|
|
Packit |
1f3717 |
result $res, rules voitto_yliaste;
|
|
Packit |
1f3717 |
end;
|
|
Packit |
1f3717 |
result $res, rules sijapääte;
|
|
Packit |
1f3717 |
end;
|
|
Packit |
1f3717 |
|
|
Packit |
1f3717 |
|
|
Packit |
1f3717 |
combi_rule teonsanan_johdos_teonsana ($vasen, $oikea, $sana, $n):
|
|
Packit |
1f3717 |
####define $profile := transmit ("teonsanan_johdos_teonsana ($vasen, $oikea, $sana, $n):");
|
|
Packit |
1f3717 |
? $oikea.luokka in @teonsanasta_johdettu_teonsana;
|
|
Packit |
1f3717 |
? $oikea.luokka in $vasen.($n-1).jatko;
|
|
Packit |
1f3717 |
? äs_ok ($vasen.($n-1), $oikea);
|
|
Packit |
1f3717 |
|
|
Packit |
1f3717 |
#define $a := transmit (<"vasen"> + <$vasen>);
|
|
Packit |
1f3717 |
#define $b := transmit (<"oikea"> + <$oikea>);
|
|
Packit |
1f3717 |
#define $c := transmit ($sana);
|
|
Packit |
1f3717 |
#define $d := transmit ($n);
|
|
Packit |
1f3717 |
|
|
Packit |
1f3717 |
$oikea :=+ [lähtöluokka: $oikea.luokka];
|
|
Packit |
1f3717 |
$oikea.luokka := teonsana;
|
|
Packit |
1f3717 |
|
|
Packit |
1f3717 |
#define $a2 := transmit (<"vasen2"> + <$vasen>);
|
|
Packit |
1f3717 |
#define $b2 := transmit (<"oikea2"> + <$oikea>);
|
|
Packit |
1f3717 |
|
|
Packit |
1f3717 |
if $oikea.äs = aä then $oikea.äs := $vasen.($n-1).äs; end;
|
|
Packit |
1f3717 |
define $res := $vasen + <[alku: $sana] + $oikea>;
|
|
Packit |
1f3717 |
|
|
Packit |
1f3717 |
if (liitesana in $oikea.jatko) then
|
|
Packit |
1f3717 |
result $res, rules liitesana_ei_kO;
|
|
Packit |
1f3717 |
end;
|
|
Packit |
1f3717 |
if (loppu in $oikea.jatko) then
|
|
Packit |
1f3717 |
result $res, accept;
|
|
Packit |
1f3717 |
end;
|
|
Packit |
1f3717 |
if (tavuviiva in $oikea.jatko) then
|
|
Packit |
1f3717 |
result $res, rules tavuviiva;
|
|
Packit |
1f3717 |
end;
|
|
Packit |
1f3717 |
## if (@teonsanasta_johdettu_teonsana * $oikea.jatko /= <>) then
|
|
Packit |
1f3717 |
## result $res, rules teonsanan_johdos_teonsana;
|
|
Packit |
1f3717 |
## end;
|
|
Packit |
1f3717 |
# if (@tekijämuodot * $oikea.jatko /= <>) then
|
|
Packit |
1f3717 |
# result $res, rules tekijämuodot;
|
|
Packit |
1f3717 |
# end;
|
|
Packit |
1f3717 |
# if (@nimitavat * $oikea.jatko /= <>) then
|
|
Packit |
1f3717 |
# result $res, rules nimitavat;
|
|
Packit |
1f3717 |
# end;
|
|
Packit |
1f3717 |
# if (@laatutavat * $oikea.jatko /= <>) then
|
|
Packit |
1f3717 |
# result $res, rules laatutavat;
|
|
Packit |
1f3717 |
# end;
|
|
Packit |
1f3717 |
# Tämä on nopeampi kuin kaikki erikseen!
|
|
Packit |
1f3717 |
result $res, rules tekijämuodot, nimitavat, laatutavat,
|
|
Packit |
1f3717 |
teonsanan_johdos_nimisana, teonsanan_johdos_laatusana;
|
|
Packit |
1f3717 |
end;
|
|
Packit |
1f3717 |
|
|
Packit |
1f3717 |
|
|
Packit |
1f3717 |
combi_rule teonsanan_johdos_teonsana_nimisana ($vasen, $oikea, $sana, $n):
|
|
Packit |
1f3717 |
#define $profile := transmit ("teonsanan_johdos_teonsana_nimisana ($vasen, $oikea, $sana, $n):");
|
|
Packit |
1f3717 |
? $oikea.luokka in @teonsanasta_johdettu_teonsana;
|
|
Packit |
1f3717 |
? $oikea.luokka in $vasen.($n-1).jatko;
|
|
Packit |
1f3717 |
? äs_ok ($vasen.($n-1), $oikea);
|
|
Packit |
1f3717 |
|
|
Packit |
1f3717 |
#define $a := transmit ($vasen);
|
|
Packit |
1f3717 |
#define $b := transmit ($oikea);
|
|
Packit |
1f3717 |
#define $c := transmit ($sana);
|
|
Packit |
1f3717 |
#define $d := transmit ($n);
|
|
Packit |
1f3717 |
|
|
Packit |
1f3717 |
if $oikea.äs = aä then $oikea.äs := $vasen.($n-1).äs; end;
|
|
Packit |
1f3717 |
|
|
Packit |
1f3717 |
result $vasen + <[alku: $sana] + $oikea>, rules teonsanan_johdos_nimisana;
|
|
Packit |
1f3717 |
end;
|
|
Packit |
1f3717 |
|
|
Packit |
1f3717 |
|
|
Packit |
1f3717 |
combi_rule teonsanan_johdos_teonsana_laatusana ($vasen, $oikea, $sana, $n):
|
|
Packit |
1f3717 |
#define $profile := transmit ("teonsanan_johdos_teonsana_nimisana ($vasen, $oikea, $sana, $n):");
|
|
Packit |
1f3717 |
? $oikea.luokka in @teonsanasta_johdettu_teonsana;
|
|
Packit |
1f3717 |
? $oikea.luokka in $vasen.($n-1).jatko;
|
|
Packit |
1f3717 |
? äs_ok ($vasen.($n-1), $oikea);
|
|
Packit |
1f3717 |
|
|
Packit |
1f3717 |
#define $a := transmit ($vasen);
|
|
Packit |
1f3717 |
#define $b := transmit ($oikea);
|
|
Packit |
1f3717 |
#define $c := transmit ($sana);
|
|
Packit |
1f3717 |
#define $d := transmit ($n);
|
|
Packit |
1f3717 |
|
|
Packit |
1f3717 |
if $oikea.äs = aä then $oikea.äs := $vasen.($n-1).äs; end;
|
|
Packit |
1f3717 |
|
|
Packit |
1f3717 |
result $vasen + <[alku: $sana] + $oikea>, rules teonsanan_johdos_laatusana;
|
|
Packit |
1f3717 |
end;
|
|
Packit |
1f3717 |
|
|
Packit |
1f3717 |
|
|
Packit |
1f3717 |
#################################################
|
|
Packit |
1f3717 |
|
|
Packit |
1f3717 |
combi_rule nimisanasta_johdettu_seikkasana ($vasen, $oikea, $sana, $n):
|
|
Packit |
1f3717 |
####define $profile := transmit ("nimisanasta_johdettu_seikkasana ($vasen, $oikea, $sana, $n):");
|
|
Packit |
1f3717 |
? $oikea.luokka in @nimisanasta_johdettu_seikkasana;
|
|
Packit |
1f3717 |
? $oikea.luokka in $vasen.($n-1).jatko;
|
|
Packit |
1f3717 |
? äs_ok ($vasen.($n-1), $oikea);
|
|
Packit |
1f3717 |
|
|
Packit |
1f3717 |
if $oikea.äs = aä then $oikea.äs := $vasen.($n-1).äs; end;
|
|
Packit |
1f3717 |
|
|
Packit |
1f3717 |
define $res := $vasen + <[alku: $sana] + $oikea>;
|
|
Packit |
1f3717 |
|
|
Packit |
1f3717 |
if (loppu in $oikea.jatko) then
|
|
Packit |
1f3717 |
result $res, accept;
|
|
Packit |
1f3717 |
end;
|
|
Packit |
1f3717 |
result $res, rules liitesana;
|
|
Packit |
1f3717 |
end;
|
|
Packit |
1f3717 |
|
|
Packit |
1f3717 |
|
|
Packit |
1f3717 |
#################################################
|
|
Packit |
1f3717 |
|
|
Packit |
1f3717 |
|
|
Packit |
1f3717 |
combi_rule nimisanasta_johdettu_laatusana ($vasen, $oikea, $sana, $n):
|
|
Packit |
1f3717 |
####define $profile := transmit ("nimisanasta_johdettu_laatusana ($vasen, $oikea, $sana, $n):");
|
|
Packit |
1f3717 |
? $oikea.luokka in @nimisanasta_johdettu_laatusana;
|
|
Packit |
1f3717 |
define $i := $n - 1;
|
|
Packit |
1f3717 |
? $oikea.luokka in $vasen.$i.jatko;
|
|
Packit |
1f3717 |
|
|
Packit |
1f3717 |
if ($oikea.luokka = johdin_inen) then
|
|
Packit |
1f3717 |
if (($n = 2) and (($vasen.$i.tiedot = nil) or (not (inen in $vasen.$i.tiedot)))) then
|
|
Packit |
1f3717 |
#define $aa := transmit ("Plonk " + $vasen.$i.perusmuoto + " " + $vasen.$i.alku);
|
|
Packit |
1f3717 |
stop;
|
|
Packit |
1f3717 |
end;
|
|
Packit |
1f3717 |
end;
|
|
Packit |
1f3717 |
|
|
Packit |
1f3717 |
? äs_ok ($vasen.$i, $oikea);
|
|
Packit |
1f3717 |
if $oikea.äs = aä then $oikea.äs := $vasen.($n-1).äs; end;
|
|
Packit |
1f3717 |
|
|
Packit |
1f3717 |
define $res := $vasen + <[alku: $sana] + $oikea>;
|
|
Packit |
1f3717 |
|
|
Packit |
1f3717 |
if (tavuviiva in $oikea.jatko) then
|
|
Packit |
1f3717 |
result $res, rules tavuviiva;
|
|
Packit |
1f3717 |
end;
|
|
Packit |
1f3717 |
##############################################
|
|
Packit |
1f3717 |
if (yhdyssana in $oikea.jatko) then
|
|
Packit |
1f3717 |
result $res, rules yhdyssana;
|
|
Packit |
1f3717 |
end;
|
|
Packit |
1f3717 |
|
|
Packit |
1f3717 |
# if (yhdyssana in $oikea.jatko) then
|
|
Packit |
1f3717 |
# if ($oikea.luokka = johdin_inen and $n = 2) then
|
|
Packit |
1f3717 |
#define $a := transmit (<"a"> + <$vasen.$i.perusmuoto>);
|
|
Packit |
1f3717 |
#define $b := transmit (<"b"> + <$oikea - jatko>);
|
|
Packit |
1f3717 |
# result $res, rules inen_päätteinen_laatusana;
|
|
Packit |
1f3717 |
# else
|
|
Packit |
1f3717 |
# result $res, rules yhdyssana;
|
|
Packit |
1f3717 |
# end;
|
|
Packit |
1f3717 |
# end;
|
|
Packit |
1f3717 |
###################################
|
|
Packit |
1f3717 |
if (loppu in $oikea.jatko) then
|
|
Packit |
1f3717 |
result $res, accept;
|
|
Packit |
1f3717 |
end;
|
|
Packit |
1f3717 |
if (liitesana in $oikea.jatko) then
|
|
Packit |
1f3717 |
result $res, rules liitesana;
|
|
Packit |
1f3717 |
end;
|
|
Packit |
1f3717 |
if (omistusliite in $oikea.jatko) then
|
|
Packit |
1f3717 |
result $res, rules omistusliite;
|
|
Packit |
1f3717 |
end;
|
|
Packit |
1f3717 |
if (@laatusanasta_johdettu_nimisana * $oikea.jatko /= <>) then
|
|
Packit |
1f3717 |
result $res, rules laatusanasta_johdettu_nimisana;
|
|
Packit |
1f3717 |
end;
|
|
Packit |
1f3717 |
if (@laatusanasta_johdettu_laatusana * $oikea.jatko /= <>) then
|
|
Packit |
1f3717 |
result $res, rules laatusanasta_johdettu_laatusana;
|
|
Packit |
1f3717 |
end;
|
|
Packit |
1f3717 |
if (@nimi_laatusanan_johdin * $oikea.jatko /= <>) then
|
|
Packit |
1f3717 |
result $res, rules nimi_laatusanan_johdin;
|
|
Packit |
1f3717 |
end;
|
|
Packit |
1f3717 |
if ((voittoaste in $oikea.jatko) or (yliaste in $oikea.jatko)) then
|
|
Packit |
1f3717 |
result $res, rules voitto_yliaste;
|
|
Packit |
1f3717 |
end;
|
|
Packit |
1f3717 |
result $res, rules sijapääte;
|
|
Packit |
1f3717 |
end;
|
|
Packit |
1f3717 |
|
|
Packit |
1f3717 |
|
|
Packit |
1f3717 |
#################################################
|
|
Packit |
1f3717 |
|
|
Packit |
1f3717 |
|
|
Packit |
1f3717 |
combi_rule laatusanasta_johdettu_nimisana ($vasen, $oikea, $sana, $n):
|
|
Packit |
1f3717 |
#define $profile := transmit ("laatusanasta_johdettu_nimisana ($vasen, $oikea, $sana, $n):");
|
|
Packit |
1f3717 |
? $oikea.luokka in @laatusanasta_johdettu_nimisana;
|
|
Packit |
1f3717 |
? $oikea.luokka in $vasen.($n-1).jatko;
|
|
Packit |
1f3717 |
? äs_ok ($vasen.($n-1), $oikea);
|
|
Packit |
1f3717 |
|
|
Packit |
1f3717 |
if $oikea.äs = aä then $oikea.äs := $vasen.($n-1).äs; end;
|
|
Packit |
1f3717 |
|
|
Packit |
1f3717 |
#define $a := transmit ($vasen.($n-1));
|
|
Packit |
1f3717 |
#define $b := transmit ($oikea);
|
|
Packit |
1f3717 |
#define $c := transmit ($sana);
|
|
Packit |
1f3717 |
#define $d := transmit ($n);
|
|
Packit |
1f3717 |
|
|
Packit |
1f3717 |
define $res := $vasen + <[alku: $sana] + $oikea>;
|
|
Packit |
1f3717 |
|
|
Packit |
1f3717 |
if (tavuviiva in $oikea.jatko) then
|
|
Packit |
1f3717 |
result $res, rules tavuviiva;
|
|
Packit |
1f3717 |
end;
|
|
Packit |
1f3717 |
if (yhdyssana in $oikea.jatko) then
|
|
Packit |
1f3717 |
result $res, rules yhdyssana;
|
|
Packit |
1f3717 |
end;
|
|
Packit |
1f3717 |
if (@nimisanasta_johdettu_laatusana * $oikea.jatko /= <>) then
|
|
Packit |
1f3717 |
result $res, rules nimisanasta_johdettu_laatusana;
|
|
Packit |
1f3717 |
end;
|
|
Packit |
1f3717 |
if (@nimisanasta_johdettu_seikkasana * $oikea.jatko /= <>) then
|
|
Packit |
1f3717 |
result $res, rules nimisanasta_johdettu_seikkasana;
|
|
Packit |
1f3717 |
end;
|
|
Packit |
1f3717 |
if (@nimi_laatusanan_johdin * $oikea.jatko /= <>) then
|
|
Packit |
1f3717 |
result $res, rules nimi_laatusanan_johdin;
|
|
Packit |
1f3717 |
end;
|
|
Packit |
1f3717 |
if (omistusliite in $oikea.jatko) then
|
|
Packit |
1f3717 |
result $res, rules omistusliite;
|
|
Packit |
1f3717 |
end;
|
|
Packit |
1f3717 |
if (liitesana in $oikea.jatko) then
|
|
Packit |
1f3717 |
result $res, rules liitesana;
|
|
Packit |
1f3717 |
end;
|
|
Packit |
1f3717 |
if (loppu in $oikea.jatko) then
|
|
Packit |
1f3717 |
result $res, accept;
|
|
Packit |
1f3717 |
end;
|
|
Packit |
1f3717 |
result $res, rules sijapääte;
|
|
Packit |
1f3717 |
end;
|
|
Packit |
1f3717 |
|
|
Packit |
1f3717 |
|
|
Packit |
1f3717 |
combi_rule laatusanasta_johdettu_laatusana ($vasen, $oikea, $sana, $n):
|
|
Packit |
1f3717 |
####define $profile := transmit ("laatusanasta_johdettu_laatusana ($vasen, $oikea, $sana, $n):");
|
|
Packit |
1f3717 |
? $oikea.luokka in @laatusanasta_johdettu_laatusana;
|
|
Packit |
1f3717 |
? $oikea.luokka in $vasen.($n-1).jatko;
|
|
Packit |
1f3717 |
|
|
Packit |
1f3717 |
if $oikea.äs = aä then $oikea.äs := $vasen.($n-1).äs; end;
|
|
Packit |
1f3717 |
|
|
Packit |
1f3717 |
define $res := $vasen + <[alku: $sana] + $oikea>;
|
|
Packit |
1f3717 |
|
|
Packit |
1f3717 |
if (omistusliite in $oikea.jatko) then
|
|
Packit |
1f3717 |
result $res, rules omistusliite;
|
|
Packit |
1f3717 |
end;
|
|
Packit |
1f3717 |
if (liitesana in $oikea.jatko) then
|
|
Packit |
1f3717 |
result $res, rules liitesana;
|
|
Packit |
1f3717 |
end;
|
|
Packit |
1f3717 |
if (tavuviiva in $oikea.jatko) then
|
|
Packit |
1f3717 |
result $res, rules tavuviiva;
|
|
Packit |
1f3717 |
end;
|
|
Packit |
1f3717 |
if (loppu in $oikea.jatko) then
|
|
Packit |
1f3717 |
result $res, accept;
|
|
Packit |
1f3717 |
end;
|
|
Packit |
1f3717 |
if ((voittoaste in $oikea.jatko) or (yliaste in $oikea.jatko)) then
|
|
Packit |
1f3717 |
result $res, rules voitto_yliaste;
|
|
Packit |
1f3717 |
end;
|
|
Packit |
1f3717 |
if (@laatusanasta_johdettu_nimisana * $oikea.jatko /= <>) then
|
|
Packit |
1f3717 |
result $res, rules laatusanasta_johdettu_nimisana; # Hyvänlaisuus.
|
|
Packit |
1f3717 |
end;
|
|
Packit |
1f3717 |
result $res, rules sijapääte;
|
|
Packit |
1f3717 |
end;
|
|
Packit |
1f3717 |
|
|
Packit |
1f3717 |
|
|
Packit |
1f3717 |
###########################################################################33
|
|
Packit |
1f3717 |
|
|
Packit |
1f3717 |
# Erisnimien käsittely on muokattu Harri Pitkäsen Voikko-versiosta.
|
|
Packit |
1f3717 |
|
|
Packit |
1f3717 |
combi_rule erisnimi ($vasen, $oikea, $sana):
|
|
Packit |
1f3717 |
####define $profile := transmit ("erisnimi ($vasen, $oikea, $sana):");
|
|
Packit |
1f3717 |
? $oikea.luokka in @erisnimi;
|
|
Packit |
1f3717 |
|
|
Packit |
1f3717 |
define $res := $vasen + <[alku: $sana] + $oikea>;
|
|
Packit |
1f3717 |
if (omistusliite in $oikea.jatko) then
|
|
Packit |
1f3717 |
result $res, rules omistusliite;
|
|
Packit |
1f3717 |
end;
|
|
Packit |
1f3717 |
if (liitesana in $oikea.jatko) then
|
|
Packit |
1f3717 |
result $res, rules liitesana;
|
|
Packit |
1f3717 |
end;
|
|
Packit |
1f3717 |
if (tavuviiva in $oikea.jatko) then
|
|
Packit |
1f3717 |
result $res, rules tavuviiva;
|
|
Packit |
1f3717 |
end;
|
|
Packit |
1f3717 |
if (loppu in $oikea.jatko) then
|
|
Packit |
1f3717 |
result $res, accept;
|
|
Packit |
1f3717 |
end;
|
|
Packit |
1f3717 |
result $res, rules erisnimen_sijapääte;
|
|
Packit |
1f3717 |
end;
|
|
Packit |
1f3717 |
|
|
Packit |
1f3717 |
|
|
Packit |
1f3717 |
# Paikannimestä johdettu kansallisuuden nimi tai
|
|
Packit |
1f3717 |
# sukunimestä johdettu aatteen kannattajan nimi.
|
|
Packit |
1f3717 |
#
|
|
Packit |
1f3717 |
combi_rule paikannimen_ja_sukunimen_lainen_johdos ($vasen, $oikea, $sana, $n):
|
|
Packit |
1f3717 |
####define $profile := transmit ("paikannimen_ja_sukunimen_lainen_johdos ($vasen, $oikea, $sana, $n):");
|
|
Packit |
1f3717 |
? $oikea.luokka in <paikannimi, sukunimi>;
|
|
Packit |
1f3717 |
#define $a := transmit ($vasen);
|
|
Packit |
1f3717 |
#define $b := transmit ($oikea);
|
|
Packit |
1f3717 |
#define $c := transmit ($sana);
|
|
Packit |
1f3717 |
#define $d := transmit ($n);
|
|
Packit |
1f3717 |
|
|
Packit |
1f3717 |
? ($vasen.($n-1).jatko * <nimisana, nimi_laatusana, laatusana, etuliite> /= <>);
|
|
Packit |
1f3717 |
? johdin_lAinen in $oikea.jatko;
|
|
Packit |
1f3717 |
|
|
Packit |
1f3717 |
result $vasen + <[alku: $sana] + $oikea>, rules paikannimen_ja_sukunimen_lainen_johdin;
|
|
Packit |
1f3717 |
end;
|
|
Packit |
1f3717 |
|
|
Packit |
1f3717 |
|
|
Packit |
1f3717 |
combi_rule paikannimen_lainen_johdos_paikannimen_omannon_jälkeen ($vasen, $oikea, $sana, $n):
|
|
Packit |
1f3717 |
####define $profile := transmit ("paikannimen_lainen_johdin ($vasen, $oikea, $sana, $n):");
|
|
Packit |
1f3717 |
|
|
Packit |
1f3717 |
? ($oikea.luokka = paikannimi and johdin_lAinen in $oikea.jatko);
|
|
Packit |
1f3717 |
if $oikea.äs = aä then $oikea.äs := $vasen.($n-1).äs; end;
|
|
Packit |
1f3717 |
define $res := $vasen + <[alku: $sana] + $oikea>;
|
|
Packit |
1f3717 |
|
|
Packit |
1f3717 |
result $res, rules paikannimen_ja_sukunimen_lainen_johdin;
|
|
Packit |
1f3717 |
end;
|
|
Packit |
1f3717 |
|
|
Packit |
1f3717 |
|
|
Packit |
1f3717 |
combi_rule paikannimen_ja_sukunimen_lainen_johdin ($vasen, $oikea, $sana, $n):
|
|
Packit |
1f3717 |
####define $profile := transmit ("paikannimen_ja_sukunimen_lainen_johdin ($vasen, $oikea, $sana, $n):");
|
|
Packit |
1f3717 |
? ($oikea.luokka = johdin_lAinen) or
|
|
Packit |
1f3717 |
(($oikea.luokka = johdin_mAinen) and ($vasen.($n-1).tiedot = nil or not (ei_mAinen in $vasen.($n-1).tiedot)));
|
|
Packit |
1f3717 |
? äs_ok ($vasen.($n-1), $oikea);
|
|
Packit |
1f3717 |
|
|
Packit |
1f3717 |
if $oikea.äs = aä then $oikea.äs := $vasen.($n-1).äs; end;
|
|
Packit |
1f3717 |
|
|
Packit |
1f3717 |
#define $a := transmit ($vasen);
|
|
Packit |
1f3717 |
#define $b := transmit ($oikea);
|
|
Packit |
1f3717 |
#define $c := transmit ($sana);
|
|
Packit |
1f3717 |
#define $d := transmit ($n);
|
|
Packit |
1f3717 |
|
|
Packit |
1f3717 |
define $res := $vasen + <[alku: $sana] + $oikea>;
|
|
Packit |
1f3717 |
|
|
Packit |
1f3717 |
if (tavuviiva in $oikea.jatko) then
|
|
Packit |
1f3717 |
result $res, rules tavuviiva;
|
|
Packit |
1f3717 |
end;
|
|
Packit |
1f3717 |
if (yhdyssana in $oikea.jatko) then
|
|
Packit |
1f3717 |
result $res, rules yhdyssana;
|
|
Packit |
1f3717 |
end;
|
|
Packit |
1f3717 |
if omistusliite in $oikea.jatko then
|
|
Packit |
1f3717 |
result $res, rules omistusliite;
|
|
Packit |
1f3717 |
end;
|
|
Packit |
1f3717 |
if liitesana in $oikea.jatko then
|
|
Packit |
1f3717 |
result $res, rules liitesana;
|
|
Packit |
1f3717 |
end;
|
|
Packit |
1f3717 |
if (@laatusanasta_johdettu_nimisana * $oikea.jatko /= <>) then
|
|
Packit |
1f3717 |
result $res, rules laatusanasta_johdettu_nimisana;
|
|
Packit |
1f3717 |
end;
|
|
Packit |
1f3717 |
if (loppu in$oikea.jatko) then
|
|
Packit |
1f3717 |
result $res, accept;
|
|
Packit |
1f3717 |
end;
|
|
Packit |
1f3717 |
if (<voittoaste, yliaste> * $oikea.jatko /= <>) then
|
|
Packit |
1f3717 |
result $res, rules voitto_yliaste;
|
|
Packit |
1f3717 |
end;
|
|
Packit |
1f3717 |
result $res, rules sijapääte;
|
|
Packit |
1f3717 |
end;
|
|
Packit |
1f3717 |
|
|
Packit |
1f3717 |
|
|
Packit |
1f3717 |
combi_rule erisnimen_sijapääte ($vasen, $oikea, $sana, $n):
|
|
Packit |
1f3717 |
####define $profile := transmit ("erisnimen_sijapääte ($vasen, $oikea, $sana, $n):");
|
|
Packit |
1f3717 |
? $oikea.luokka = sijapääte;
|
|
Packit |
1f3717 |
|
|
Packit |
1f3717 |
#define $nimi := transmit (<$vasen> + <$oikea> + <$sana>);
|
|
Packit |
1f3717 |
#define $a := transmit ($vasen);
|
|
Packit |
1f3717 |
#define $b := transmit ($oikea);
|
|
Packit |
1f3717 |
#define $c := transmit ($sana);
|
|
Packit |
1f3717 |
#define $d := transmit ($n);
|
|
Packit |
1f3717 |
#define $e := transmit ($vasen.($n-1).perusmuoto);
|
|
Packit |
1f3717 |
#define $f := transmit ($vasen.($n-1).luokka);
|
|
Packit |
1f3717 |
|
|
Packit |
1f3717 |
define $edellinen := $vasen.length ($vasen);
|
|
Packit |
1f3717 |
|
|
Packit |
1f3717 |
#define $e := transmit ($edellinen);
|
|
Packit |
1f3717 |
|
|
Packit |
1f3717 |
? $oikea.sija in $edellinen.jatko;
|
|
Packit |
1f3717 |
? äs_ok ($vasen.($n-1), $oikea);
|
|
Packit |
1f3717 |
|
|
Packit |
1f3717 |
? ($oikea.sija /= sisätulento_Vn) or sisätulento_Vn_oikein ($oikea.sija, substring($edellinen.alku,1R), $sana);
|
|
Packit |
1f3717 |
? ($oikea.sija /= sisätulento_hVn) or sisätulento_hVn_oikein ($oikea.sija, substring($edellinen.alku,1R), $sana);
|
|
Packit |
1f3717 |
|
|
Packit |
1f3717 |
if $oikea.äs = aä then $oikea.äs := $edellinen.äs; end;
|
|
Packit |
1f3717 |
|
|
Packit |
1f3717 |
define $res := $vasen + <[alku: $sana] + $oikea>;
|
|
Packit |
1f3717 |
|
|
Packit |
1f3717 |
if ($oikea.sija = omanto_n) then
|
|
Packit |
1f3717 |
if omistusliite in $oikea.jatko then
|
|
Packit |
1f3717 |
result $res, rules omistusliite;
|
|
Packit |
1f3717 |
end;
|
|
Packit |
1f3717 |
if ($vasen.($n-1).luokka = paikannimi) then
|
|
Packit |
1f3717 |
result $res, rules paikannimen_lainen_johdos_paikannimen_omannon_jälkeen;
|
|
Packit |
1f3717 |
end;
|
|
Packit |
1f3717 |
result $res, rules yhdysmerkki_erisnimen_jälkeen, johdettu_erisnimi;
|
|
Packit |
1f3717 |
else
|
|
Packit |
1f3717 |
if omistusliite in $oikea.jatko then
|
|
Packit |
1f3717 |
result $res, rules omistusliite;
|
|
Packit |
1f3717 |
end;
|
|
Packit |
1f3717 |
if tavuviiva in $oikea.jatko then
|
|
Packit |
1f3717 |
result $res, rules yhdysmerkki_erisnimen_jälkeen;
|
|
Packit |
1f3717 |
end;
|
|
Packit |
1f3717 |
end;
|
|
Packit |
1f3717 |
if (loppu in $oikea.jatko) then
|
|
Packit |
1f3717 |
result $res, accept;
|
|
Packit |
1f3717 |
end;
|
|
Packit |
1f3717 |
result $res, rules liitesana;
|
|
Packit |
1f3717 |
end;
|
|
Packit |
1f3717 |
|
|
Packit |
1f3717 |
|
|
Packit |
1f3717 |
combi_rule yhdysmerkki_erisnimen_jälkeen ($vasen, $oikea, $sana):
|
|
Packit |
1f3717 |
####define $profile := transmit ("yhdysmerkki_erisnimen_jälkeen ($vasen, $oikea, $sana):");
|
|
Packit |
1f3717 |
? $oikea.luokka = tavuviiva;
|
|
Packit |
1f3717 |
|
|
Packit |
1f3717 |
define $res := $vasen + <[alku: $sana] + $oikea>;
|
|
Packit |
1f3717 |
result $res, rules yhdyssana, erisnimi;
|
|
Packit |
1f3717 |
end;
|
|
Packit |
1f3717 |
|
|
Packit |
1f3717 |
|
|
Packit |
1f3717 |
combi_rule johdettu_erisnimi ($vasen, $oikea, $sana):
|
|
Packit |
1f3717 |
####define $profile := transmit ("johdettu_erisnimi ($vasen, $oikea, $sana):");
|
|
Packit |
1f3717 |
? ($oikea.paikannimen_jälkiliite = yes) or ($oikea.etunimen_jälkiliite = yes);
|
|
Packit |
1f3717 |
define $res := $vasen + <[alku: $sana] + $oikea>;
|
|
Packit |
1f3717 |
if omistusliite in $oikea.jatko then
|
|
Packit |
1f3717 |
result $res, rules omistusliite;
|
|
Packit |
1f3717 |
end;
|
|
Packit |
1f3717 |
if loppu in $oikea.jatko then
|
|
Packit |
1f3717 |
result $res, accept;
|
|
Packit |
1f3717 |
end;
|
|
Packit |
1f3717 |
if liitesana in $oikea.jatko then
|
|
Packit |
1f3717 |
result $res, rules liitesana;
|
|
Packit |
1f3717 |
end;
|
|
Packit |
1f3717 |
if tavuviiva in $oikea.jatko then
|
|
Packit |
1f3717 |
result $res, rules yhdysmerkki_erisnimen_jälkeen;
|
|
Packit |
1f3717 |
end;
|
|
Packit |
1f3717 |
# result $res, rules erisnimen_sijapääte;
|
|
Packit |
1f3717 |
result $res, rules sijapääte;
|
|
Packit |
1f3717 |
end;
|
|
Packit |
1f3717 |
|
|
Packit |
1f3717 |
|
|
Packit |
1f3717 |
# inen-johdinta edeltävä nimisana.
|
|
Packit |
1f3717 |
# Sääntö ei voi olla sanan alussa.
|
|
Packit |
1f3717 |
#
|
|
Packit |
1f3717 |
combi_rule inen_johdos_nimisanasta ($vasen, $oikea, $sana, $n):
|
|
Packit |
1f3717 |
##define $profile := transmit ("inen_johdos_nimisanasta ($vasen, $oikea, $sana, $n):");
|
|
Packit |
1f3717 |
? $oikea.luokka in <nimisana, nimi_laatusana>;
|
|
Packit |
1f3717 |
? johdin_inen in $oikea.jatko;
|
|
Packit |
1f3717 |
? $oikea.tiedot = nil or
|
|
Packit |
1f3717 |
(not ei_ys in $oikea.tiedot and not ei_ysj in $oikea.tiedot);
|
|
Packit |
1f3717 |
|
|
Packit |
1f3717 |
# define $a := transmit ($vasen);
|
|
Packit |
1f3717 |
# define $b := transmit ($oikea);
|
|
Packit |
1f3717 |
# define $c := transmit ($sana);
|
|
Packit |
1f3717 |
# define $d := transmit ($n);
|
|
Packit |
1f3717 |
|
|
Packit |
1f3717 |
result $vasen + <[alku: $sana] + $oikea>, rules johdin_inen;
|
|
Packit |
1f3717 |
end;
|
|
Packit |
1f3717 |
|
|
Packit |
1f3717 |
|
|
Packit |
1f3717 |
combi_rule johdin_inen ($vasen, $oikea, $sana, $n):
|
|
Packit |
1f3717 |
####define $profile := transmit ("johdin_inen ($vasen, $oikea, $sana, $n):");
|
|
Packit |
1f3717 |
? $oikea.luokka = johdin_inen;
|
|
Packit |
1f3717 |
|
|
Packit |
1f3717 |
# define $ö := transmit ("AAAAAAAAAAAAAAA");
|
|
Packit |
1f3717 |
# define $a := transmit ($vasen);
|
|
Packit |
1f3717 |
# define $b := transmit ($oikea.jatko);
|
|
Packit |
1f3717 |
# define $c := transmit ($sana);
|
|
Packit |
1f3717 |
# define $d := transmit ($n);
|
|
Packit |
1f3717 |
# define $x := transmit ("BBBBBBBBBBBBBBB");
|
|
Packit |
1f3717 |
|
|
Packit |
1f3717 |
define $i := $n - 1;
|
|
Packit |
1f3717 |
? äs_ok ($vasen.$i, $oikea);
|
|
Packit |
1f3717 |
|
|
Packit |
1f3717 |
if $oikea.äs = aä then $oikea.äs := $vasen.$i.äs; end;
|
|
Packit |
1f3717 |
|
|
Packit |
1f3717 |
define $res := $vasen + <[alku: $sana] + $oikea>;
|
|
Packit |
1f3717 |
|
|
Packit |
1f3717 |
if tavuviiva in $oikea.jatko then
|
|
Packit |
1f3717 |
result $res, rules tavuviiva;
|
|
Packit |
1f3717 |
end;
|
|
Packit |
1f3717 |
# if (yhdyssana in $oikea.jatko) then
|
|
Packit |
1f3717 |
# result $res, rules yhdyssana;
|
|
Packit |
1f3717 |
# end;
|
|
Packit |
1f3717 |
if omistusliite in $oikea.jatko then
|
|
Packit |
1f3717 |
result $res, rules omistusliite;
|
|
Packit |
1f3717 |
end;
|
|
Packit |
1f3717 |
if loppu in $oikea.jatko then
|
|
Packit |
1f3717 |
result $res, accept;
|
|
Packit |
1f3717 |
end;
|
|
Packit |
1f3717 |
if liitesana in $oikea.jatko then
|
|
Packit |
1f3717 |
result $res, rules liitesana;
|
|
Packit |
1f3717 |
end;
|
|
Packit |
1f3717 |
if (@laatusanasta_johdettu_nimisana * $oikea.jatko /= <>) then
|
|
Packit |
1f3717 |
result $res, rules laatusanasta_johdettu_nimisana;
|
|
Packit |
1f3717 |
end;
|
|
Packit |
1f3717 |
# if (@laatusanasta_johdettu_laatusana * $oikea.jatko /= <>) then
|
|
Packit |
1f3717 |
# result $res, rules laatusanasta_johdettu_laatusana;
|
|
Packit |
1f3717 |
# end;
|
|
Packit |
1f3717 |
if ((voittoaste in $oikea.jatko) or (yliaste in $oikea.jatko)) then
|
|
Packit |
1f3717 |
result $res, rules voitto_yliaste;
|
|
Packit |
1f3717 |
end;
|
|
Packit |
1f3717 |
result $res, rules sijapääte;
|
|
Packit |
1f3717 |
end;
|
|
Packit |
1f3717 |
|
|
Packit |
1f3717 |
|
|
Packit |
1f3717 |
subrule äs_ok ($edellinen, $oikea):
|
|
Packit |
1f3717 |
#define $a := transmit (<"äs_ok"> + <$edellinen.äs> + <$oikea.äs>);
|
|
Packit |
1f3717 |
#define $b := transmit (<"äs_ok"> + <$edellinen>);
|
|
Packit |
1f3717 |
#define $c := transmit (<"äs_ok"> + <$oikea>);
|
|
Packit |
1f3717 |
|
|
Packit |
1f3717 |
return ($oikea.äs = aä or $edellinen.äs = aä or $oikea.äs = $edellinen.äs);
|
|
Packit |
1f3717 |
end;
|
|
Packit |
1f3717 |
|
|
Packit |
1f3717 |
|
|
Packit |
1f3717 |
combi_rule nimi_laatusanan_johdin ($vasen, $oikea, $sana, $n):
|
|
Packit |
1f3717 |
####define $profile := transmit ("nimi_laatusanan_johdin ($vasen, $oikea, $sana, $n):");
|
|
Packit |
1f3717 |
? $oikea.luokka in @nimi_laatusanan_johdin;
|
|
Packit |
1f3717 |
? $oikea.luokka in $vasen.($n-1).jatko;
|
|
Packit |
1f3717 |
? äs_ok ($vasen.($n-1), $oikea);
|
|
Packit |
1f3717 |
|
|
Packit |
1f3717 |
#define $xb := transmit ($oikea.luokka);
|
|
Packit |
1f3717 |
#define $xa := transmit ($vasen);
|
|
Packit |
1f3717 |
#define $yb := transmit ($oikea);
|
|
Packit |
1f3717 |
#define $yc := transmit ($sana);
|
|
Packit |
1f3717 |
#define $yd := transmit ($n);
|
|
Packit |
1f3717 |
|
|
Packit |
1f3717 |
if $oikea.äs = aä then $oikea.äs := $vasen.($n-1).äs; end;
|
|
Packit |
1f3717 |
|
|
Packit |
1f3717 |
define $res := $vasen + <[alku: $sana] + $oikea>;
|
|
Packit |
1f3717 |
|
|
Packit |
1f3717 |
if (tavuviiva in $oikea.jatko) then
|
|
Packit |
1f3717 |
result $res, rules tavuviiva;
|
|
Packit |
1f3717 |
end;
|
|
Packit |
1f3717 |
if (yhdyssana in $oikea.jatko) then
|
|
Packit |
1f3717 |
result $res, rules yhdyssana;
|
|
Packit |
1f3717 |
end;
|
|
Packit |
1f3717 |
if (@laatusanasta_johdettu_nimisana * $oikea.jatko /= <>) then
|
|
Packit |
1f3717 |
result $res, rules laatusanasta_johdettu_nimisana;
|
|
Packit |
1f3717 |
end;
|
|
Packit |
1f3717 |
# if (@laatusanasta_johdettu_laatusana * $oikea.jatko /= <>) then
|
|
Packit |
1f3717 |
# result $res, rules laatusanasta_johdettu_laatusana;
|
|
Packit |
1f3717 |
# end;
|
|
Packit |
1f3717 |
if (loppu in $oikea.jatko) then
|
|
Packit |
1f3717 |
result $res, accept;
|
|
Packit |
1f3717 |
end;
|
|
Packit |
1f3717 |
if (omistusliite in $oikea.jatko) then
|
|
Packit |
1f3717 |
result $res, rules omistusliite;
|
|
Packit |
1f3717 |
end;
|
|
Packit |
1f3717 |
if (liitesana in $oikea.jatko) then
|
|
Packit |
1f3717 |
result $res, rules liitesana;
|
|
Packit |
1f3717 |
end;
|
|
Packit |
1f3717 |
if ((voittoaste in $oikea.jatko) or (yliaste in $oikea.jatko)) then
|
|
Packit |
1f3717 |
result $res, rules voitto_yliaste;
|
|
Packit |
1f3717 |
end;
|
|
Packit |
1f3717 |
result $res, rules sijapääte;
|
|
Packit |
1f3717 |
end;
|
|
Packit |
1f3717 |
|
|
Packit |
1f3717 |
|
|
Packit |
1f3717 |
##########################################
|
|
Packit |
1f3717 |
|
|
Packit |
1f3717 |
# Lukusanojen käsittely on muokattu Harri Pitkäsen Voikko-versiosta.
|
|
Packit |
1f3717 |
|
|
Packit |
1f3717 |
combi_rule lukusana ($vasen, $oikea, $sana, $index):
|
|
Packit |
1f3717 |
#define $profile := transmit ("lukusana ($vasen, $oikea, $sana, $index):");
|
|
Packit |
1f3717 |
? $oikea.luokka = lukusana;
|
|
Packit |
1f3717 |
define $sijamuoto := nil;
|
|
Packit |
1f3717 |
define $luku := nil;
|
|
Packit |
1f3717 |
|
|
Packit |
1f3717 |
#define $a1 := transmit ($vasen);
|
|
Packit |
1f3717 |
#define $a2 := transmit ($oikea);
|
|
Packit |
1f3717 |
#define $a3 := transmit ($sana);
|
|
Packit |
1f3717 |
#define $a4 := transmit ($index);
|
|
Packit |
1f3717 |
|
|
Packit |
1f3717 |
if ($oikea.alaluokka = erikoisluku) then
|
|
Packit |
1f3717 |
define $erikoisres := $vasen + <[alku: $sana] + $oikea>;
|
|
Packit |
1f3717 |
if (loppu in $oikea.jatko) then
|
|
Packit |
1f3717 |
result $erikoisres, accept;
|
|
Packit |
1f3717 |
end;
|
|
Packit |
1f3717 |
if (liitesana in $oikea.jatko) then
|
|
Packit |
1f3717 |
result $erikoisres, rules liitesana;
|
|
Packit |
1f3717 |
end;
|
|
Packit |
1f3717 |
if (lukusanan_jälkiliite in $oikea.jatko) then
|
|
Packit |
1f3717 |
result $erikoisres, rules lukusanan_jälkiliite;
|
|
Packit |
1f3717 |
end;
|
|
Packit |
1f3717 |
result $erikoisres, rules yhdyssana, tavuviiva;
|
|
Packit |
1f3717 |
stop;
|
|
Packit |
1f3717 |
end;
|
|
Packit |
1f3717 |
|
|
Packit |
1f3717 |
if ($index = 1) then
|
|
Packit |
1f3717 |
if ($oikea.alaluokka = toista) then
|
|
Packit |
1f3717 |
stop; # "Toistamaan" ei ole toista+maa+n.
|
|
Packit |
1f3717 |
end;
|
|
Packit |
1f3717 |
else
|
|
Packit |
1f3717 |
# if ($index greater 1) then
|
|
Packit |
1f3717 |
define $edellinen := $vasen.($index - 1);
|
|
Packit |
1f3717 |
? $edellinen.lukutyyppi = nil or $edellinen.lukutyyppi = $oikea.lukutyyppi;
|
|
Packit |
1f3717 |
$sijamuoto := $edellinen.sijamuoto;
|
|
Packit |
1f3717 |
$luku := $edellinen.luku;
|
|
Packit |
1f3717 |
# Estetään peräkkäiset "satasata", "tuhattuhat" jne.
|
|
Packit |
1f3717 |
if ($edellinen.luokka = lukusana) then
|
|
Packit |
1f3717 |
? not ($oikea.alaluokka = $edellinen.alaluokka);
|
|
Packit |
1f3717 |
end;
|
|
Packit |
1f3717 |
end;
|
|
Packit |
1f3717 |
define $res := $vasen + <[alku: $sana, sijamuoto: $sijamuoto, luku: $luku] + $oikea>;
|
|
Packit |
1f3717 |
|
|
Packit |
1f3717 |
if ($oikea.alaluokka = yksiyhdeksän) then
|
|
Packit |
1f3717 |
if (nimentö in $oikea.jatko) then
|
|
Packit |
1f3717 |
if loppu in $oikea.jatko then
|
|
Packit |
1f3717 |
result $res, accept;
|
|
Packit |
1f3717 |
end;
|
|
Packit |
1f3717 |
result $res, rules lukusana_toista, lukusana_sisäkerroin,
|
|
Packit |
1f3717 |
liitesana; ##, lukusanan_jälkiliite;
|
|
Packit |
1f3717 |
#, yhdyssana;
|
|
Packit |
1f3717 |
## nimisana, laatusana;
|
|
Packit |
1f3717 |
## nimisana, inen_johdos_nimisanasta, inen_päätteinen_laatusana;
|
|
Packit |
1f3717 |
end;
|
|
Packit |
1f3717 |
if (omistusliite in $oikea.jatko) then
|
|
Packit |
1f3717 |
result $res, rules omistusliite;
|
|
Packit |
1f3717 |
end;
|
|
Packit |
1f3717 |
elseif ($oikea.alaluokka in <kymmenen, sata>) then
|
|
Packit |
1f3717 |
if (nimentö in $oikea.jatko) then
|
|
Packit |
1f3717 |
if omistusliite in $oikea.jatko then
|
|
Packit |
1f3717 |
result $res, rules omistusliite;
|
|
Packit |
1f3717 |
end;
|
|
Packit |
1f3717 |
if loppu in $oikea.jatko then
|
|
Packit |
1f3717 |
result $res, accept;
|
|
Packit |
1f3717 |
end;
|
|
Packit |
1f3717 |
result $res, rules lukusana_sisäkerroin,
|
|
Packit |
1f3717 |
liitesana, lukusanan_jälkiliite;
|
|
Packit |
1f3717 |
## nimisana, laatusana;
|
|
Packit |
1f3717 |
## nimisana, inen_johdos_nimisanasta, inen_päätteinen_laatusana;
|
|
Packit |
1f3717 |
end;
|
|
Packit |
1f3717 |
elseif ($oikea.alaluokka in <tuhat, miljoona> and nimentö in $oikea.jatko) then
|
|
Packit |
1f3717 |
if omistusliite in $oikea.jatko then
|
|
Packit |
1f3717 |
result $res, rules omistusliite;
|
|
Packit |
1f3717 |
end;
|
|
Packit |
1f3717 |
if loppu in $oikea.jatko then
|
|
Packit |
1f3717 |
result $res, accept;
|
|
Packit |
1f3717 |
end;
|
|
Packit |
1f3717 |
result $res, rules liitesana, lukusanan_jälkiliite;
|
|
Packit |
1f3717 |
## yhdyssana;
|
|
Packit |
1f3717 |
## nimisana, laatusana;
|
|
Packit |
1f3717 |
## nimisana, inen_johdos_nimisanasta, inen_päätteinen_laatusana;
|
|
Packit |
1f3717 |
elseif ($oikea.alaluokka = numeromerkki) then
|
|
Packit |
1f3717 |
$res := $vasen + <[alku: $sana, pilkku: no, rakenne: "=q"] + $oikea>;
|
|
Packit |
1f3717 |
if (loppu in $oikea.jatko) then
|
|
Packit |
1f3717 |
result $res, accept;
|
|
Packit |
1f3717 |
end;
|
|
Packit |
1f3717 |
result $res, rules lukusana_numero; ##, yhdysmerkki_numeron_jälkeen;
|
|
Packit |
1f3717 |
end;
|
|
Packit |
1f3717 |
if ($oikea.alaluokka in <sata, tuhat>) then
|
|
Packit |
1f3717 |
if (nimentö in $oikea.jatko) then
|
|
Packit |
1f3717 |
result $res, rules lukusana;
|
|
Packit |
1f3717 |
end;
|
|
Packit |
1f3717 |
end;
|
|
Packit |
1f3717 |
if (tavuviiva in $oikea.jatko) then
|
|
Packit |
1f3717 |
result $res, rules tavuviiva;
|
|
Packit |
1f3717 |
end;
|
|
Packit |
1f3717 |
# result $res, rules lukusana_sijapääte;
|
|
Packit |
1f3717 |
result $res, rules yhdyssana, lukusana_sijapääte;
|
|
Packit |
1f3717 |
end;
|
|
Packit |
1f3717 |
|
|
Packit |
1f3717 |
|
|
Packit |
1f3717 |
combi_rule lukusana_sijapääte ($vasen, $oikea, $sana, $index):
|
|
Packit |
1f3717 |
####define $profile := transmit ("lukusana_sijapääte ($vasen, $oikea, $sana, $index):");
|
|
Packit |
1f3717 |
? $oikea.luokka = sijapääte;
|
|
Packit |
1f3717 |
define $edellinen := $vasen.($index - 1);
|
|
Packit |
1f3717 |
? $oikea.sija in $edellinen.jatko;
|
|
Packit |
1f3717 |
? äs_ok($edellinen, $oikea);
|
|
Packit |
1f3717 |
? ($oikea.sija /= sisätulento_Vn) or sisätulento_Vn_oikein ($oikea.sija, substring($edellinen.alku,1R), $sana);
|
|
Packit |
1f3717 |
? ($oikea.sija /= sisätulento_hVn) or sisätulento_hVn_oikein ($oikea.sija, substring($edellinen.alku,1R), $sana);
|
|
Packit |
1f3717 |
if $oikea.äs = aä then $oikea.äs := $edellinen.äs; end;
|
|
Packit |
1f3717 |
|
|
Packit |
1f3717 |
define $sijamuoto := sijamuoto_sijasta($oikea.sija);
|
|
Packit |
1f3717 |
? $edellinen.sijamuoto = nil or $edellinen.sijamuoto = $sijamuoto;
|
|
Packit |
1f3717 |
? $edellinen.luku = nil or $edellinen.luku = $oikea.luku;
|
|
Packit |
1f3717 |
|
|
Packit |
1f3717 |
define $res := $vasen + <[alku: $sana, sijamuoto: $sijamuoto, lukutyyppi: $edellinen.lukutyyppi] + $oikea>;
|
|
Packit |
1f3717 |
if ($edellinen.alaluokka = yksiyhdeksän) then
|
|
Packit |
1f3717 |
if omistusliite in $oikea.jatko then
|
|
Packit |
1f3717 |
result $res, rules omistusliite;
|
|
Packit |
1f3717 |
end;
|
|
Packit |
1f3717 |
result $res, rules lukusana_toista, lukusana_sisäkerroin,
|
|
Packit |
1f3717 |
## yhdyssana;
|
|
Packit |
1f3717 |
lukusanan_jälkiliite;
|
|
Packit |
1f3717 |
## nimisana, laatusana;
|
|
Packit |
1f3717 |
## nimisana, inen_johdos_nimisanasta, inen_päätteinen_laatusana;
|
|
Packit |
1f3717 |
elseif ($edellinen.alaluokka in <kymmenen, sata>) then
|
|
Packit |
1f3717 |
if omistusliite in $oikea.jatko then
|
|
Packit |
1f3717 |
result $res, rules omistusliite;
|
|
Packit |
1f3717 |
end;
|
|
Packit |
1f3717 |
result $res, rules lukusana_sisäkerroin, lukusanan_jälkiliite;
|
|
Packit |
1f3717 |
else
|
|
Packit |
1f3717 |
result $res, rules lukusanan_jälkiliite;
|
|
Packit |
1f3717 |
## result $res, rules yhdyssana;
|
|
Packit |
1f3717 |
## , nimisana, lukusanan_jälkiliite, laatusana;
|
|
Packit |
1f3717 |
##, inen_johdos_nimisanasta, inen_päätteinen_laatusana;
|
|
Packit |
1f3717 |
end;
|
|
Packit |
1f3717 |
if loppu in $oikea.jatko then
|
|
Packit |
1f3717 |
result $res, accept;
|
|
Packit |
1f3717 |
end;
|
|
Packit |
1f3717 |
if ($edellinen.alaluokka in <sata, tuhat>) then
|
|
Packit |
1f3717 |
result $res, rules lukusana;
|
|
Packit |
1f3717 |
end;
|
|
Packit |
1f3717 |
if liitesana in $oikea.jatko then
|
|
Packit |
1f3717 |
result $res, rules liitesana;
|
|
Packit |
1f3717 |
end;
|
|
Packit |
1f3717 |
if tavuviiva in $oikea.jatko then
|
|
Packit |
1f3717 |
result $res, rules tavuviiva;
|
|
Packit |
1f3717 |
end;
|
|
Packit |
1f3717 |
if yhdyssana in $oikea.jatko then
|
|
Packit |
1f3717 |
result $res, rules yhdyssana;
|
|
Packit |
1f3717 |
end;
|
|
Packit |
1f3717 |
end;
|
|
Packit |
1f3717 |
|
|
Packit |
1f3717 |
|
|
Packit |
1f3717 |
combi_rule lukusana_sisäkerroin ($vasen, $oikea, $sana, $index):
|
|
Packit |
1f3717 |
####define $profile := transmit ("lukusana_sisäkerroin ($vasen, $oikea, $sana, $index):");
|
|
Packit |
1f3717 |
? $oikea.luokka = lukusana;
|
|
Packit |
1f3717 |
? $oikea.alaluokka in <kymmenen, sata, tuhat, miljoona>;
|
|
Packit |
1f3717 |
|
|
Packit |
1f3717 |
define $edellinen := $vasen.($index - 1);
|
|
Packit |
1f3717 |
? $edellinen.lukutyyppi = $oikea.lukutyyppi;
|
|
Packit |
1f3717 |
define $res := $vasen + <[alku: $sana, sijamuoto: $edellinen.sijamuoto, luku: $edellinen.luku] + $oikea>;
|
|
Packit |
1f3717 |
|
|
Packit |
1f3717 |
if ($edellinen.sijamuoto in <nil, nimentö>) then
|
|
Packit |
1f3717 |
result $res, rules lukusana_sisäkerroin_osanto;
|
|
Packit |
1f3717 |
else
|
|
Packit |
1f3717 |
result $res, rules lukusana_sisäkerroin_sijapääte;
|
|
Packit |
1f3717 |
end;
|
|
Packit |
1f3717 |
|
|
Packit |
1f3717 |
if ($oikea.lukutyyppi = järjestysluku) then
|
|
Packit |
1f3717 |
result $res, rules lukusana;
|
|
Packit |
1f3717 |
end;
|
|
Packit |
1f3717 |
|
|
Packit |
1f3717 |
if ($oikea.lukutyyppi = järjestysluku and loppu in $oikea.jatko) then
|
|
Packit |
1f3717 |
if omistusliite in $oikea.jatko then
|
|
Packit |
1f3717 |
result $res, rules omistusliite;
|
|
Packit |
1f3717 |
end;
|
|
Packit |
1f3717 |
if loppu in $oikea.jatko then
|
|
Packit |
1f3717 |
result $res, accept;
|
|
Packit |
1f3717 |
end;
|
|
Packit |
1f3717 |
result $res, rules liitesana;
|
|
Packit |
1f3717 |
end;
|
|
Packit |
1f3717 |
end;
|
|
Packit |
1f3717 |
|
|
Packit |
1f3717 |
|
|
Packit |
1f3717 |
combi_rule lukusana_sisäkerroin_sijapääte ($vasen, $oikea, $sana, $index):
|
|
Packit |
1f3717 |
####define $profile := transmit ("lukusana_sisäkerroin_sijapääte ($vasen, $oikea, $sana, $index):");
|
|
Packit |
1f3717 |
? $oikea.luokka = sijapääte;
|
|
Packit |
1f3717 |
define $edellinen := $vasen.($index - 1);
|
|
Packit |
1f3717 |
? $oikea.sija in $edellinen.jatko;
|
|
Packit |
1f3717 |
? äs_ok($edellinen, $oikea);
|
|
Packit |
1f3717 |
if $oikea.äs = aä then $oikea.äs := $edellinen.äs; end;
|
|
Packit |
1f3717 |
|
|
Packit |
1f3717 |
define $sijamuoto := sijamuoto_sijasta($oikea.sija);
|
|
Packit |
1f3717 |
? $edellinen.sijamuoto = nil or $edellinen.sijamuoto = $sijamuoto;
|
|
Packit |
1f3717 |
? $edellinen.luku = nil or $edellinen.luku = $oikea.luku;
|
|
Packit |
1f3717 |
|
|
Packit |
1f3717 |
define $res := $vasen + <[alku: $sana, sijamuoto: $sijamuoto, lukutyyppi: $edellinen.lukutyyppi] + $oikea>;
|
|
Packit |
1f3717 |
if omistusliite in $oikea.jatko then
|
|
Packit |
1f3717 |
result $res, rules omistusliite;
|
|
Packit |
1f3717 |
end;
|
|
Packit |
1f3717 |
if loppu in $oikea.jatko then
|
|
Packit |
1f3717 |
result $res, accept;
|
|
Packit |
1f3717 |
end;
|
|
Packit |
1f3717 |
result $res, rules lukusana,
|
|
Packit |
1f3717 |
liitesana, lukusanan_jälkiliite;
|
|
Packit |
1f3717 |
## nimisana, laatusana;
|
|
Packit |
1f3717 |
## nimisana, inen_johdos_nimisanasta, inen_päätteinen_laatusana;
|
|
Packit |
1f3717 |
end;
|
|
Packit |
1f3717 |
|
|
Packit |
1f3717 |
combi_rule lukusana_sisäkerroin_osanto ($vasen, $oikea, $sana, $index):
|
|
Packit |
1f3717 |
####define $profile := transmit ("lukusana_sisäkerroin_osanto ($vasen, $oikea, $sana, $index):");
|
|
Packit |
1f3717 |
? $oikea.luokka = sijapääte;
|
|
Packit |
1f3717 |
define $edellinen := $vasen.($index - 1);
|
|
Packit |
1f3717 |
? $oikea.sija in $edellinen.jatko;
|
|
Packit |
1f3717 |
? sijamuoto_sijasta($oikea.sija) = osanto;
|
|
Packit |
1f3717 |
? äs_ok($edellinen, $oikea);
|
|
Packit |
1f3717 |
if $oikea.äs = aä then $oikea.äs := $edellinen.äs; end;
|
|
Packit |
1f3717 |
|
|
Packit |
1f3717 |
define $res := $vasen + <[alku: $sana, lukutyyppi: $edellinen.lukutyyppi] + $oikea>;
|
|
Packit |
1f3717 |
if omistusliite in $oikea.jatko then
|
|
Packit |
1f3717 |
result $res, rules omistusliite;
|
|
Packit |
1f3717 |
end;
|
|
Packit |
1f3717 |
if loppu in $oikea.jatko then
|
|
Packit |
1f3717 |
result $res, accept;
|
|
Packit |
1f3717 |
end;
|
|
Packit |
1f3717 |
result $res, rules lukusana, lukusanan_jälkiliite,
|
|
Packit |
1f3717 |
liitesana;
|
|
Packit |
1f3717 |
##, yhdyssana;
|
|
Packit |
1f3717 |
## nimisana, laatusana; ##, inen_johdos_nimisanasta, inen_päätteinen_laatusana;
|
|
Packit |
1f3717 |
end;
|
|
Packit |
1f3717 |
|
|
Packit |
1f3717 |
combi_rule lukusana_toista ($vasen, $oikea, $sana, $index):
|
|
Packit |
1f3717 |
####define $profile := transmit ("lukusana_toista ($vasen, $oikea, $sana, $index):");
|
|
Packit |
1f3717 |
? $oikea.luokka = lukusana;
|
|
Packit |
1f3717 |
? $oikea.alaluokka = toista;
|
|
Packit |
1f3717 |
define $edellinen := $vasen.($index - 1);
|
|
Packit |
1f3717 |
define $res := $vasen + <[alku: $sana, sijamuoto: $edellinen.sijamuoto,
|
|
Packit |
1f3717 |
luku: $edellinen.luku, lukutyyppi: $edellinen.lukutyyppi] + $oikea>;
|
|
Packit |
1f3717 |
if loppu in $oikea.jatko then
|
|
Packit |
1f3717 |
result $res, accept;
|
|
Packit |
1f3717 |
end;
|
|
Packit |
1f3717 |
if liitesana in $oikea.jatko then
|
|
Packit |
1f3717 |
result $res, rules liitesana;
|
|
Packit |
1f3717 |
end;
|
|
Packit |
1f3717 |
result $res, rules lukusana_sisäkerroin,
|
|
Packit |
1f3717 |
## lukusanan_jälkiliite,
|
|
Packit |
1f3717 |
## inen_johdos_nimisanasta,
|
|
Packit |
1f3717 |
## inen_päätteinen_laatusana,
|
|
Packit |
1f3717 |
yhdyssana,
|
|
Packit |
1f3717 |
tavuviiva;
|
|
Packit |
1f3717 |
end;
|
|
Packit |
1f3717 |
|
|
Packit |
1f3717 |
|
|
Packit |
1f3717 |
combi_rule lukusanan_jälkiliite ($vasen, $oikea, $sana, $index):
|
|
Packit |
1f3717 |
####define $profile := transmit ("lukusanan_jälkiliite ($vasen, $oikea, $sana, $index):");
|
|
Packit |
1f3717 |
# define $a := transmit ($vasen);
|
|
Packit |
1f3717 |
# define $b := transmit ($oikea);
|
|
Packit |
1f3717 |
# define $c := transmit ($sana);
|
|
Packit |
1f3717 |
# define $d := transmit ($index);
|
|
Packit |
1f3717 |
|
|
Packit |
1f3717 |
? $oikea.luokka in <lukusanan_jälkiliite, tavuviiva>;
|
|
Packit |
1f3717 |
# ? $oikea.luokka in <nimisana, laatusana, nimi_laatusana, tavuviiva>;
|
|
Packit |
1f3717 |
# FIXME: yhdysviivan käyttöä ei vielä tueta lukusanan ja sen jälkiliitteen välissä
|
|
Packit |
1f3717 |
define $res := $vasen + <[alku: $sana] + $oikea>;
|
|
Packit |
1f3717 |
if $oikea.luokka = tavuviiva then
|
|
Packit |
1f3717 |
result $res, accept;
|
|
Packit |
1f3717 |
else
|
|
Packit |
1f3717 |
define $edellinen := $vasen.($index - 1);
|
|
Packit |
1f3717 |
? $edellinen.lukutyyppi = nil or $edellinen.lukutyyppi = $oikea.lukutyyppi;
|
|
Packit |
1f3717 |
if omistusliite in $oikea.jatko then
|
|
Packit |
1f3717 |
result $res, rules omistusliite;
|
|
Packit |
1f3717 |
end;
|
|
Packit |
1f3717 |
if tavuviiva in $oikea.jatko then
|
|
Packit |
1f3717 |
result $res, rules tavuviiva;
|
|
Packit |
1f3717 |
end;
|
|
Packit |
1f3717 |
if loppu in $oikea.jatko then
|
|
Packit |
1f3717 |
result $res, accept;
|
|
Packit |
1f3717 |
end;
|
|
Packit |
1f3717 |
result $res,
|
|
Packit |
1f3717 |
rules ## ei_ys_sijapääte,
|
|
Packit |
1f3717 |
yhdyssana,
|
|
Packit |
1f3717 |
sijapääte,
|
|
Packit |
1f3717 |
liitesana;
|
|
Packit |
1f3717 |
end;
|
|
Packit |
1f3717 |
end;
|
|
Packit |
1f3717 |
|
|
Packit |
1f3717 |
combi_rule lukusana_numero ($vasen, $oikea, $sana, $index):
|
|
Packit |
1f3717 |
####define $profile := transmit ("lukusana_numero ($vasen, $oikea, $sana, $index):");
|
|
Packit |
1f3717 |
? $oikea.luokka = lukusana;
|
|
Packit |
1f3717 |
|
|
Packit |
1f3717 |
define $edellinen := $vasen.($index - 1);
|
|
Packit |
1f3717 |
$oikea :=+ [pilkku: $edellinen.pilkku];
|
|
Packit |
1f3717 |
define $res := $vasen + <[alku: $sana] + $oikea>;
|
|
Packit |
1f3717 |
|
|
Packit |
1f3717 |
if $oikea.alaluokka = numeromerkki then
|
|
Packit |
1f3717 |
result $res, rules lukusana_numero; ##, yhdysmerkki_numeron_jälkeen;
|
|
Packit |
1f3717 |
result $res, accept;
|
|
Packit |
1f3717 |
elseif $oikea.alaluokka = pilkku and $oikea.pilkku /= yes then
|
|
Packit |
1f3717 |
$oikea :=+ [pilkku: yes];
|
|
Packit |
1f3717 |
result $vasen + <[alku: $sana] + $oikea>, rules lukusana_numero;
|
|
Packit |
1f3717 |
end;
|
|
Packit |
1f3717 |
end;
|
|
Packit |
1f3717 |
|
|
Packit |
1f3717 |
|
|
Packit |
1f3717 |
# Aputaulukko funktiolle sijamuoto_sijasta
|
|
Packit |
1f3717 |
define @sijamuoto_sijasta_muunnostaulu :=
|
|
Packit |
1f3717 |
[nimentö: nimentö,
|
|
Packit |
1f3717 |
nimentö_t: nimentö,
|
|
Packit |
1f3717 |
nimentö_tkA: nimentö,
|
|
Packit |
1f3717 |
omanto_n: omanto,
|
|
Packit |
1f3717 |
omanto_nkA: omanto,
|
|
Packit |
1f3717 |
omanto_ien: omanto,
|
|
Packit |
1f3717 |
omanto_jen: omanto,
|
|
Packit |
1f3717 |
omanto_en: omanto,
|
|
Packit |
1f3717 |
omanto_in: omanto,
|
|
Packit |
1f3717 |
omanto_ten: omanto,
|
|
Packit |
1f3717 |
omanto_iT: omanto,
|
|
Packit |
1f3717 |
omanto_idän: omanto,
|
|
Packit |
1f3717 |
kohdanto_idät: kohdanto,
|
|
Packit |
1f3717 |
kohdanto_t: kohdanto,
|
|
Packit |
1f3717 |
osanto_A: osanto,
|
|
Packit |
1f3717 |
osanto_AA: osanto,
|
|
Packit |
1f3717 |
osanto_iA: osanto,
|
|
Packit |
1f3717 |
osanto_jA: osanto,
|
|
Packit |
1f3717 |
osanto_ttA: osanto,
|
|
Packit |
1f3717 |
osanto_itA: osanto,
|
|
Packit |
1f3717 |
osanto_tA: osanto,
|
|
Packit |
1f3717 |
olento_nA: olento,
|
|
Packit |
1f3717 |
olento_inA: olento,
|
|
Packit |
1f3717 |
tulento_ksi: tulento,
|
|
Packit |
1f3717 |
tulento_iksi: tulento,
|
|
Packit |
1f3717 |
sisäolento_ssA: sisäolento,
|
|
Packit |
1f3717 |
sisäolento_issA: sisäolento,
|
|
Packit |
1f3717 |
sisäolento_nA: sisäolento,
|
|
Packit |
1f3717 |
sisäeronto_stA: sisäeronto,
|
|
Packit |
1f3717 |
sisäeronto_istA: sisäeronto,
|
|
Packit |
1f3717 |
sisäeronto_tA: sisäeronto,
|
|
Packit |
1f3717 |
sisätulento_Vn: sisätulento,
|
|
Packit |
1f3717 |
sisätulento_VVn: sisätulento,
|
|
Packit |
1f3717 |
sisätulento_hVn: sisätulento,
|
|
Packit |
1f3717 |
sisätulento_iin: sisätulento,
|
|
Packit |
1f3717 |
sisätulento_ihin: sisätulento,
|
|
Packit |
1f3717 |
sisätulento_seen: sisätulento,
|
|
Packit |
1f3717 |
sisätulento_isiin: sisätulento,
|
|
Packit |
1f3717 |
sisätulento_sen: sisätulento,
|
|
Packit |
1f3717 |
sisätulento_isin: sisätulento,
|
|
Packit |
1f3717 |
sisätulento_nne: sisätulento,
|
|
Packit |
1f3717 |
ulko_olento_llA: ulko_olento,
|
|
Packit |
1f3717 |
ulko_olento_illA: ulko_olento,
|
|
Packit |
1f3717 |
ulkoeronto_ltA: ulkoeronto,
|
|
Packit |
1f3717 |
ulkoeronto_iltA: ulkoeronto,
|
|
Packit |
1f3717 |
ulkotulento_lle: ulkotulento,
|
|
Packit |
1f3717 |
ulkotulento_ille: ulkotulento,
|
|
Packit |
1f3717 |
vajanto_ttA: vajanto,
|
|
Packit |
1f3717 |
vajanto_ittA: vajanto,
|
|
Packit |
1f3717 |
seuranto_ine: seuranto,
|
|
Packit |
1f3717 |
keinonto_n: keinonto,
|
|
Packit |
1f3717 |
keinonto_in: keinonto,
|
|
Packit |
1f3717 |
tulento_s: tulento
|
|
Packit |
1f3717 |
];
|
|
Packit |
1f3717 |
|
|
Packit |
1f3717 |
|
|
Packit |
1f3717 |
# Palauttaa annettua sijasymbolia vastaavan sijamuodon
|
|
Packit |
1f3717 |
subrule sijamuoto_sijasta($sija):
|
|
Packit |
1f3717 |
return @sijamuoto_sijasta_muunnostaulu.$sija;
|
|
Packit |
1f3717 |
end;
|
|
Packit |
1f3717 |
|
|
Packit |
1f3717 |
|
|
Packit |
1f3717 |
#robust_rule robust ($surface, $remain_input):
|
|
Packit |
1f3717 |
# define $a := transmit (<"a"> + <$surface>);
|
|
Packit |
1f3717 |
# define $b := transmit (<"b"> + <$remain_input>);
|
|
Packit |
1f3717 |
#end;
|
|
Packit |
1f3717 |
|
|
Packit |
1f3717 |
|
|
Packit |
1f3717 |
combi_rule yhdyssana ($vasen, $oikea, $sana, $n):
|
|
Packit |
1f3717 |
#define $profile := transmit ("yhdyssana ($vasen, $oikea, $sana, $n):");
|
|
Packit |
1f3717 |
|
|
Packit |
1f3717 |
# ? $oikea.luokka /= lukusana;
|
|
Packit |
1f3717 |
#if ($oikea.luokka = lukusana) then
|
|
Packit |
1f3717 |
#define $a := transmit (($vasen.1).alku);
|
|
Packit |
1f3717 |
#define $b := transmit ($oikea.luokka);
|
|
Packit |
1f3717 |
#define $c := transmit (<$sana> + <"§">);
|
|
Packit |
1f3717 |
#end;
|
|
Packit |
1f3717 |
|
|
Packit |
1f3717 |
define $i := $n - 1;
|
|
Packit |
1f3717 |
|
|
Packit |
1f3717 |
##assert ($n-1 = length($vasen));
|
|
Packit |
1f3717 |
|
|
Packit |
1f3717 |
#define $aa := transmit (<"Huu"> + <$vasen.$i> + <$sana> + <$oikea>);
|
|
Packit |
1f3717 |
|
|
Packit |
1f3717 |
if ($oikea.luokka = seikkasana and $oikea.tiedot /= nil and
|
|
Packit |
1f3717 |
ys_perusosa in $oikea.tiedot and $vasen /= <>) then
|
|
Packit |
1f3717 |
define $res := $vasen + <[alku: $sana] + $oikea>;
|
|
Packit |
1f3717 |
|
|
Packit |
1f3717 |
if (loppu in $oikea.jatko) then
|
|
Packit |
1f3717 |
result $res, accept;
|
|
Packit |
1f3717 |
end;
|
|
Packit |
1f3717 |
if (liitesana in $oikea.jatko) then
|
|
Packit |
1f3717 |
result $res, rules liitesana;
|
|
Packit |
1f3717 |
end;
|
|
Packit |
1f3717 |
if (omistusliite in $oikea.jatko) then
|
|
Packit |
1f3717 |
result $res, rules omistusliite;
|
|
Packit |
1f3717 |
end;
|
|
Packit |
1f3717 |
result $res, rules ei_ys_sijapääte;
|
|
Packit |
1f3717 |
end;
|
|
Packit |
1f3717 |
|
|
Packit |
1f3717 |
? ($oikea.luokka in $vasen.$i.jatko) or
|
|
Packit |
1f3717 |
(yhdyssana in $vasen.$i.jatko) or
|
|
Packit |
1f3717 |
($oikea.luokka in <paikannimi, sukunimi, teonsana>);
|
|
Packit |
1f3717 |
|
|
Packit |
1f3717 |
|
|
Packit |
1f3717 |
if ((($vasen.$i.tiedot /= nil) and ((ei_ys in $vasen.$i.tiedot) or (ei_ysa in $vasen.$i.tiedot))) or
|
|
Packit |
1f3717 |
(($oikea.tiedot /= nil) and ((ei_ys in $oikea.tiedot)))) then
|
|
Packit |
1f3717 |
#define $d := transmit (<"yhdyssana_oikein-d">);
|
|
Packit |
1f3717 |
stop;
|
|
Packit |
1f3717 |
end;
|
|
Packit |
1f3717 |
if (($vasen.$i.luokka /= tavuviiva) and ($oikea.tiedot /= nil) and (ei_ysj in $oikea.tiedot)) then
|
|
Packit |
1f3717 |
stop;
|
|
Packit |
1f3717 |
end;
|
|
Packit |
1f3717 |
if (($vasen.$i.perusmuoto /= nil) and ($oikea.perusmuoto /= nil)) then
|
|
Packit |
1f3717 |
define $s := $vasen.$i.perusmuoto;
|
|
Packit |
1f3717 |
#define $iii := transmit($vasen.$i.alku);
|
|
Packit |
1f3717 |
if (length($vasen.$i.alku) greater length($vasen.$i.perusmuoto)) then
|
|
Packit |
1f3717 |
$s := $vasen.$i.alku;
|
|
Packit |
1f3717 |
end;
|
|
Packit |
1f3717 |
define $s1 := substring($s,1R);
|
|
Packit |
1f3717 |
define $s2 := substring($oikea.perusmuoto,1);
|
|
Packit |
1f3717 |
if (($s1 = $s2) and ($s1 matches @ääntiö) and ($s2 matches @ääntiö)) then
|
|
Packit |
1f3717 |
stop;
|
|
Packit |
1f3717 |
end;
|
|
Packit |
1f3717 |
end;
|
|
Packit |
1f3717 |
## ? yhdyssana_oikein ($vasen, $oikea, $i);
|
|
Packit |
1f3717 |
|
|
Packit |
1f3717 |
define $res := $vasen + <[alku: $sana] + $oikea>;
|
|
Packit |
1f3717 |
|
|
Packit |
1f3717 |
if ($oikea.luokka in <nimisana, laatusana, nimi_laatusana>) then
|
|
Packit |
1f3717 |
|
|
Packit |
1f3717 |
#define $a := transmit ($vasen);
|
|
Packit |
1f3717 |
if (tavuviiva in $oikea.jatko) then
|
|
Packit |
1f3717 |
result $res, rules tavuviiva;
|
|
Packit |
1f3717 |
end;
|
|
Packit |
1f3717 |
if (yhdyssana in $oikea.jatko) then
|
|
Packit |
1f3717 |
result $res, rules yhdyssana;
|
|
Packit |
1f3717 |
end;
|
|
Packit |
1f3717 |
|
|
Packit |
1f3717 |
if ($vasen.$i.luokka = tavuviiva) or
|
|
Packit |
1f3717 |
###### ($oikea.tiedot = nil or not (ei_ysj in $oikea.tiedot)) then
|
|
Packit |
1f3717 |
($oikea.tiedot = nil or (not ((ei_ys in $oikea.tiedot) or (ei_ysj in $oikea.tiedot)))) then
|
|
Packit |
1f3717 |
#define $a := transmit ($oikea);
|
|
Packit |
1f3717 |
#define $b := transmit ($oikea.tiedot);
|
|
Packit |
1f3717 |
if (omistusliite in $oikea.jatko) then
|
|
Packit |
1f3717 |
result $res, rules omistusliite;
|
|
Packit |
1f3717 |
end;
|
|
Packit |
1f3717 |
if (liitesana in $oikea.jatko) then
|
|
Packit |
1f3717 |
result $res, rules liitesana;
|
|
Packit |
1f3717 |
end;
|
|
Packit |
1f3717 |
if (loppu in $oikea.jatko) then
|
|
Packit |
1f3717 |
result $res, accept;
|
|
Packit |
1f3717 |
end;
|
|
Packit |
1f3717 |
result $res, rules sijapääte;
|
|
Packit |
1f3717 |
end;
|
|
Packit |
1f3717 |
|
|
Packit |
1f3717 |
if ($oikea.luokka = nimisana) then
|
|
Packit |
1f3717 |
if (@nimisanasta_johdettu_laatusana * $oikea.jatko /= <>) then
|
|
Packit |
1f3717 |
result $res, rules nimisanasta_johdettu_laatusana;
|
|
Packit |
1f3717 |
end;
|
|
Packit |
1f3717 |
if (@nimisanasta_johdettu_seikkasana * $oikea.jatko /= <>) then
|
|
Packit |
1f3717 |
result $res, rules nimisanasta_johdettu_seikkasana;
|
|
Packit |
1f3717 |
end;
|
|
Packit |
1f3717 |
if (@nimi_laatusanan_johdin * $oikea.jatko /= <>) then
|
|
Packit |
1f3717 |
result $res, rules nimi_laatusanan_johdin;
|
|
Packit |
1f3717 |
end;
|
|
Packit |
1f3717 |
|
|
Packit |
1f3717 |
elseif ($oikea.luokka = laatusana) then
|
|
Packit |
1f3717 |
if (@nimi_laatusanan_johdin * $oikea.jatko /= <>) then
|
|
Packit |
1f3717 |
result $res, rules nimi_laatusanan_johdin;
|
|
Packit |
1f3717 |
end;
|
|
Packit |
1f3717 |
if (@voittoaste + @yliaste * $oikea.jatko /= <>) then
|
|
Packit |
1f3717 |
result $res, rules voitto_yliaste;
|
|
Packit |
1f3717 |
end;
|
|
Packit |
1f3717 |
if (@laatusanasta_johdettu_nimisana * $oikea.jatko /= <>) then
|
|
Packit |
1f3717 |
result $res, rules laatusanasta_johdettu_nimisana;
|
|
Packit |
1f3717 |
end;
|
|
Packit |
1f3717 |
|
|
Packit |
1f3717 |
elseif ($oikea.luokka = nimi_laatusana) then
|
|
Packit |
1f3717 |
if ((voittoaste in $oikea.jatko) or (yliaste in $oikea.jatko)) then
|
|
Packit |
1f3717 |
result $res, rules voitto_yliaste;
|
|
Packit |
1f3717 |
end;
|
|
Packit |
1f3717 |
if (@laatusanasta_johdettu_nimisana * $oikea.jatko /= <>) then
|
|
Packit |
1f3717 |
result $res, rules laatusanasta_johdettu_nimisana;
|
|
Packit |
1f3717 |
end;
|
|
Packit |
1f3717 |
if (@nimisanasta_johdettu_seikkasana * $oikea.jatko /= <>) then
|
|
Packit |
1f3717 |
result $res, rules nimisanasta_johdettu_seikkasana;
|
|
Packit |
1f3717 |
end;
|
|
Packit |
1f3717 |
if (@nimi_laatusanan_johdin * $oikea.jatko /= <>) then
|
|
Packit |
1f3717 |
result $res, rules nimi_laatusanan_johdin;
|
|
Packit |
1f3717 |
end;
|
|
Packit |
1f3717 |
if (@nimisanasta_johdettu_laatusana * $oikea.jatko /= <>) then
|
|
Packit |
1f3717 |
result $res, rules nimisanasta_johdettu_laatusana;
|
|
Packit |
1f3717 |
end;
|
|
Packit |
1f3717 |
end;
|
|
Packit |
1f3717 |
|
|
Packit |
1f3717 |
elseif ($oikea.luokka = teonsana) then
|
|
Packit |
1f3717 |
? $vasen.$i.jatko * <yhdyssana, nimisana, laatusana, nimi_laatusana, etuliite> /= <>;
|
|
Packit |
1f3717 |
if ($oikea.jatko * @teonsanasta_johdettu_nimisana /= <>) then
|
|
Packit |
1f3717 |
result $res, rules teonsanan_johdos_nimisana;
|
|
Packit |
1f3717 |
end;
|
|
Packit |
1f3717 |
if ($oikea.jatko * @teonsanasta_johdettu_laatusana /= <>) then
|
|
Packit |
1f3717 |
result $res, rules teonsanan_johdos_laatusana;
|
|
Packit |
1f3717 |
end;
|
|
Packit |
1f3717 |
if ($oikea.jatko * @teonsanasta_johdettu_teonsana /= <>) then
|
|
Packit |
1f3717 |
result $res, rules teonsanan_johdos_teonsana_nimisana,
|
|
Packit |
1f3717 |
teonsanan_johdos_teonsana_laatusana;
|
|
Packit |
1f3717 |
end;
|
|
Packit |
1f3717 |
|
|
Packit |
1f3717 |
elseif ($oikea.luokka = etuliite) then
|
|
Packit |
1f3717 |
? ($vasen.$i.luokka = tavuviiva) or
|
|
Packit |
1f3717 |
(($oikea.tiedot = nil) or not ((ei_ys in $oikea.tiedot) or (ei_ysj in $oikea.tiedot)));
|
|
Packit |
1f3717 |
? (<nimisana, nimi_laatusana, laatusana> * $oikea.jatko /= <>);
|
|
Packit |
1f3717 |
result $res, rules yhdyssana, tavuviiva;
|
|
Packit |
1f3717 |
|
|
Packit |
1f3717 |
elseif ($oikea.luokka in <paikannimi, sukunimi>) then
|
|
Packit |
1f3717 |
? johdin_lAinen in $oikea.jatko;
|
|
Packit |
1f3717 |
result $res, rules paikannimen_ja_sukunimen_lainen_johdin;
|
|
Packit |
1f3717 |
end;
|
|
Packit |
1f3717 |
end;
|