mirror of
https://github.com/GrammaticalFramework/gf-core.git
synced 2026-05-22 01:22:51 -06:00
experiment in discontinuous Cl type in Romance, tried in French. The current result is that compilation is twice as fast as before, but parsing becomes slower. Hence not in the main RGL yet.
This commit is contained in:
148
lib/src/french/exper/ConstructionFre.gf
Normal file
148
lib/src/french/exper/ConstructionFre.gf
Normal file
@@ -0,0 +1,148 @@
|
||||
--# -path=alltenses:.:../abstract
|
||||
|
||||
concrete ConstructionFre of Construction = CatFre **
|
||||
open SyntaxFre, SymbolicFre, ParadigmsFre,
|
||||
(L = LexiconFre), (E = ExtraFre), (I = IrregFre), (R = ResFre), (C = CommonRomance),
|
||||
Prelude in {
|
||||
flags coding=utf8 ;
|
||||
|
||||
|
||||
lin
|
||||
hungry_VP = E.ComplCN have_V2 (mkCN (mkN "faim")) ;
|
||||
thirsty_VP = E.ComplCN have_V2 (mkCN (mkN "soif")) ;
|
||||
has_age_VP card = mkVP have_V2 (mkNP <lin Card card : Card> L.year_N) ;
|
||||
|
||||
have_name_Cl x y = mkCl x (mkV2 (reflV (mkV "appeler"))) y ;
|
||||
---- married_Cl x y = mkCl (lin NP x) L.married_A2 (lin NP y) | mkCl (mkNP and_Conj (lin NP x) (lin NP y)) (mkA "marié") ;
|
||||
|
||||
---- what_name_QCl x = mkQCl how_IAdv (mkCl (lin NP x) (reflV (mkV "appeler"))) ;
|
||||
---- how_old_QCl x = mkQCl (mkIP whichSg_IDet (mkN "âge" masculine)) (lin NP x) have_V2 ;
|
||||
how_far_QCl x = mkQCl (mkIAdv dative (mkIP which_IDet (mkN "distance"))) x ;
|
||||
|
||||
-- some more things
|
||||
weather_adjCl ap = mkCl (mkVP (mkVA (mkV I.faire_V2)) (lin AP ap)) ;
|
||||
|
||||
is_right_VP = E.ComplCN have_V2 (mkCN (mkN "raison")) ;
|
||||
is_wrong_VP = E.ComplCN have_V2 (mkCN (mkN "tort")) ;
|
||||
|
||||
n_units_AP card cn a = mkAP (lin AdA (mkUtt (mkNP <lin Card card : Card> (lin CN cn)))) (lin A a) ;
|
||||
|
||||
bottle_of_CN np = mkCN (lin N2 (mkN2 (mkN "bouteille" feminine) part_Prep)) np ;
|
||||
cup_of_CN np = mkCN (lin N2 (mkN2 (mkN "tasse") part_Prep)) np ;
|
||||
glass_of_CN np = mkCN (lin N2 (mkN2 (mkN "verre") part_Prep)) np ;
|
||||
|
||||
{-
|
||||
-- spatial deixis and motion verbs
|
||||
|
||||
where_go_QCl np = mkQCl where_IAdv (mkCl np (mkVP L.go_V)) ;
|
||||
where_come_from_QCl np = mkQCl (lin IAdv (ss "d'où")) (mkCl np (mkVP L.go_V)) ;
|
||||
|
||||
go_here_VP = mkVP (mkVP L.go_V) here_Adv ;
|
||||
come_here_VP = mkVP (mkVP L.come_V) here_Adv ;
|
||||
come_from_here_VP = mkVP (mkVP L.come_V) (mkAdv "d'ici") ;
|
||||
|
||||
go_there_VP = mkVP (mkVP L.go_V) there_Adv ;
|
||||
come_there_VP = mkVP (mkVP L.come_V) there_Adv ;
|
||||
come_from_there_VP = mkVP (mkVP L.come_V) (mkAdv "de là") ;
|
||||
-}
|
||||
|
||||
lincat
|
||||
Weekday = N ;
|
||||
Monthday = NP ;
|
||||
Month = N ;
|
||||
Year = NP ;
|
||||
oper
|
||||
noPrep : Prep = mkPrep [] ;
|
||||
|
||||
lin
|
||||
weekdayPunctualAdv w = lin Adv {s = w.s ! C.Sg} ; -- lundi
|
||||
weekdayHabitualAdv w = SyntaxFre.mkAdv noPrep (mkNP the_Det w) ; -- le lundi
|
||||
weekdayLastAdv w = SyntaxFre.mkAdv noPrep (mkNP the_Det (mkCN (mkA "dernier") w)) ; -- le lundi dernier
|
||||
weekdayNextAdv w = SyntaxFre.mkAdv noPrep (mkNP the_Det (mkCN (mkA "prochain") w)) ; -- le lundi prochain
|
||||
|
||||
monthAdv m = lin Adv {s = "en" ++ m.s ! C.Sg} ; -- en mai
|
||||
yearAdv y = SyntaxFre.mkAdv (mkPrep "en") y ;
|
||||
dayMonthAdv d m = ParadigmsFre.mkAdv ("le" ++ (d.s ! R.Nom).comp ++ m.s ! C.Sg) ; -- le 17 mai ---- le 1 mai should be le 1er mai
|
||||
monthYearAdv m y = lin Adv {s = "en" ++ m.s ! C.Sg ++ (y.s ! R.Nom).comp} ; -- en mai 2012
|
||||
dayMonthYearAdv d m y = ParadigmsFre.mkAdv ("le" ++ (d.s ! R.Nom).comp ++ m.s ! C.Sg ++ (y.s ! R.Nom).comp) ; -- le 17 mai 2013
|
||||
|
||||
intYear = symb ;
|
||||
intMonthday = symb ;
|
||||
|
||||
|
||||
lincat Language = N ;
|
||||
|
||||
lin InLanguage l = SyntaxFre.mkAdv (mkPrep "en") (mkNP l) ;
|
||||
|
||||
lin
|
||||
weekdayN w = w ;
|
||||
|
||||
weekdayPN w = mkPN w ;
|
||||
monthPN m = mkPN m ;
|
||||
|
||||
languageCN l = mkCN l ;
|
||||
languageNP l = mkNP the_Det l ;
|
||||
|
||||
oper mkLanguage : Str -> N = \s -> mkN s ;
|
||||
|
||||
----------------------------------------------
|
||||
---- lexicon of special names
|
||||
|
||||
lin monday_Weekday = mkN "lundi" ;
|
||||
lin tuesday_Weekday = mkN "mardi" ;
|
||||
lin wednesday_Weekday = mkN "mercredi" ;
|
||||
lin thursday_Weekday = mkN "jeudi" ;
|
||||
lin friday_Weekday = mkN "vendredi" ;
|
||||
lin saturday_Weekday = mkN "samedi" ;
|
||||
lin sunday_Weekday = mkN "dimanche" masculine ;
|
||||
|
||||
lin january_Month = mkN "janvier" ;
|
||||
lin february_Month = mkN "février" ;
|
||||
lin march_Month = mkN "mars" ;
|
||||
lin april_Month = mkN "avril" ;
|
||||
lin may_Month = mkN "mai" ;
|
||||
lin june_Month = mkN "juin" ;
|
||||
lin july_Month = mkN "juillet" ;
|
||||
lin august_Month = mkN "août" ;
|
||||
lin september_Month = mkN "septembre" ;
|
||||
lin october_Month = mkN "octobre" ;
|
||||
lin november_Month = mkN "novembre" ;
|
||||
lin december_Month = mkN "décembre" ;
|
||||
|
||||
lin afrikaans_Language = mkLanguage "afrikaans" ;
|
||||
lin amharic_Language = mkLanguage "amharique" ; ----
|
||||
lin arabic_Language = mkLanguage "arabe" ;
|
||||
lin bulgarian_Language = mkLanguage "bulgare" ;
|
||||
lin catalan_Language = mkLanguage "catalan" ;
|
||||
lin chinese_Language = mkLanguage "chinois" ;
|
||||
lin danish_Language = mkLanguage "danois" ;
|
||||
lin dutch_Language = mkLanguage "hollandais" ;
|
||||
lin english_Language = mkLanguage "anglais" ;
|
||||
lin estonian_Language = mkLanguage "estonien" ;
|
||||
lin finnish_Language = mkLanguage "finnois" ;
|
||||
lin french_Language = mkLanguage "français" ;
|
||||
lin german_Language = mkLanguage "allemand" ;
|
||||
lin greek_Language = mkLanguage "grècque" ;
|
||||
lin hebrew_Language = mkLanguage "hebreu" ;
|
||||
lin hindi_Language = mkLanguage "hindi" ;
|
||||
lin japanese_Language = mkLanguage "japonais" ;
|
||||
lin italian_Language = mkLanguage "italien" ;
|
||||
lin latin_Language = mkLanguage "latin" ;
|
||||
lin latvian_Language = mkLanguage "letton" ;
|
||||
lin maltese_Language = mkLanguage "maltais" ;
|
||||
lin nepali_Language = mkLanguage "nepali" ;
|
||||
lin norwegian_Language = mkLanguage "norvégien" ;
|
||||
lin persian_Language = mkLanguage "persien" ;
|
||||
lin polish_Language = mkLanguage "polonais" ;
|
||||
lin punjabi_Language = mkLanguage "punjabi" ;
|
||||
lin romanian_Language = mkLanguage "roumain" ;
|
||||
lin russian_Language = mkLanguage "russe" ;
|
||||
lin sindhi_Language = mkLanguage "sindhi" ;
|
||||
lin spanish_Language = mkLanguage "espagnol" ;
|
||||
lin swahili_Language = mkLanguage "swahili" ;
|
||||
lin swedish_Language = mkLanguage "suédois" ;
|
||||
lin thai_Language = mkLanguage "thaï" ;
|
||||
lin turkish_Language = mkLanguage "turque" ;
|
||||
lin urdu_Language = mkLanguage "urdu" ;
|
||||
|
||||
}
|
||||
89
lib/src/french/exper/ExtraFre.gf
Normal file
89
lib/src/french/exper/ExtraFre.gf
Normal file
@@ -0,0 +1,89 @@
|
||||
concrete ExtraFre of ExtraFreAbs = ExtraRomanceFre **
|
||||
open CommonRomance, PhonoFre, MorphoFre, ParadigmsFre, ParamX, ResFre, Prelude in {
|
||||
|
||||
flags coding=utf8 ;
|
||||
lin
|
||||
EstcequeS qs = {s = "est-ce" ++ elisQue ++ qs.s ! Indic} ;
|
||||
EstcequeIAdvS idet qs = {s = idet.s ++ "est-ce" ++ elisQue ++ qs.s ! Indic} ;
|
||||
|
||||
QueestcequeIP = {
|
||||
s = table {
|
||||
c => prepQue c ++ "est-ce" ++ caseQue c
|
||||
} ;
|
||||
a = aagr Fem Pl
|
||||
} ;
|
||||
|
||||
QuiestcequeIP = {
|
||||
s = table {
|
||||
c => prepQue c ++ "qui" ++ "est-ce" ++ caseQue c
|
||||
} ;
|
||||
a = aagr Fem Pl
|
||||
} ;
|
||||
|
||||
i8fem_Pron = mkPronoun
|
||||
(elision "j") (elision "m") (elision "m") "moi" "mon" (elisPoss "m") "mes"
|
||||
Fem Sg P1 ;
|
||||
these8fem_NP = makeNP ["celles-ci"] Fem Pl ;
|
||||
they8fem_Pron = mkPronoun
|
||||
"elles" "les" "leur" "eux" "leur" "leur" "leurs"
|
||||
Fem Pl P3 ;
|
||||
this8fem_NP = pn2np (mkPN ["celle-ci"] Fem) ;
|
||||
those8fem_NP = makeNP ["celles-là"] Fem Pl ;
|
||||
we8fem_Pron = mkPronoun "nous" "nous" "nous" "nous" "notre" "notre" "nos"
|
||||
Fem Pl P1 ;
|
||||
whoPl8fem_IP =
|
||||
{s = \\c => "les" + quelPron ! a ; a = a}
|
||||
where {a = aagr Fem Pl} ;
|
||||
whoSg8fem_IP =
|
||||
{s = \\c => "la" + quelPron ! a ; a = a}
|
||||
where {a = aagr Fem Pl} ;
|
||||
|
||||
youSg8fem_Pron = mkPronoun
|
||||
"tu" (elision "t") (elision "t") "toi" "ton" (elisPoss "t") "tes"
|
||||
Fem Sg P2 ;
|
||||
youPl8fem_Pron =
|
||||
let vous = mkPronoun "vous" "vous" "vous" "vous" "votre" "votre" "vos" Fem Pl P2
|
||||
in
|
||||
{s = vous.s ; hasClit = vous.hasClit ; poss = vous.poss ; a = vous.a ; isPol = False ; isNeg = False} ;
|
||||
youPol8fem_Pron =
|
||||
let vous = mkPronoun "vous" "vous" "vous" "vous" "votre" "votre" "vos" Fem Pl P2
|
||||
in
|
||||
{s = vous.s ; hasClit = vous.hasClit ; poss = vous.poss ; a = vous.a ; isPol = True ; isNeg = False} ;
|
||||
|
||||
ce_Pron =
|
||||
let ce = elision "c"
|
||||
in
|
||||
mkPronoun ce ce ce ("cela" | "ça") "son" (elisPoss "s") "ses" Masc Sg P3 ; ---- variants?
|
||||
|
||||
AdvDatVP = insertClit3 datClit ;
|
||||
AdvGenVP = insertClit3 genClit ;
|
||||
|
||||
oper
|
||||
prepQue : Case -> Str = \c -> case c of {
|
||||
Nom | Acc => elisQue ;
|
||||
_ => prepCase c ++ "qui" ---
|
||||
} ;
|
||||
caseQue : Case -> Str = \c -> case c of {
|
||||
Nom => "qui" ;
|
||||
_ => elisQue
|
||||
} ;
|
||||
|
||||
lin
|
||||
tout_Det = {
|
||||
s = \\g,c => prepCase c ++ genForms "tout" "toute" ! g ;
|
||||
sp = \\g,c => prepCase c ++ genForms "tout" "toute" ! g ;
|
||||
n = Sg ;
|
||||
s2 = [] ;
|
||||
isNeg = False
|
||||
} ;
|
||||
|
||||
PNegNe = {s = [] ; p = RNeg True} ;
|
||||
|
||||
ExistsNP np =
|
||||
mknpClause "il" (insertComplement (\\_ => (np.s ! Nom).ton) (predV (regV "exister"))) ; ---- np.a
|
||||
|
||||
--- in ExtraRomance
|
||||
-- PassAgentVPSlash vps np = passVPSlash
|
||||
-- vps ("par" ++ (np.s ! Acc).ton) ;
|
||||
|
||||
}
|
||||
67
lib/src/french/exper/IdiomFre.gf
Normal file
67
lib/src/french/exper/IdiomFre.gf
Normal file
@@ -0,0 +1,67 @@
|
||||
concrete IdiomFre of Idiom = CatFre **
|
||||
open (P = ParamX), PhonoFre, MorphoFre, ParadigmsFre, Prelude in {
|
||||
|
||||
flags optimize=all_subs ;
|
||||
flags coding=utf8 ;
|
||||
|
||||
lin
|
||||
ImpersCl vp = mknpClause "il" vp ;
|
||||
GenericCl vp = mknpClause "on" vp ;
|
||||
|
||||
ExistNP np =
|
||||
mknpClause "il"
|
||||
(insertClit3 "y" (insertComplement (\\_ => (np.s ! Acc).ton) (predV avoir_V))) ;
|
||||
|
||||
ExistIP ip =
|
||||
mknpClause "il"
|
||||
(insertClit3 "y" (predV avoir_V)) ** {ip = ip.s ! Nom ; isSent = False} ;
|
||||
|
||||
CleftNP np rs = mknpClause elisCe ---- True np.isPol (agrP3 Masc Sg)
|
||||
(insertComplement (\\_ => rs.s ! Indic ! np.a)
|
||||
(insertComplement (\\_ => (np.s ! rs.c).ton) (predV copula))) ;
|
||||
|
||||
CleftAdv ad s = mknpClause elisCe
|
||||
(insertComplement (\\_ => conjThat ++ s.s ! Indic)
|
||||
(insertComplement (\\_ => ad.s) (predV copula))) ;
|
||||
|
||||
|
||||
ProgrVP vp =
|
||||
insertComplement
|
||||
(\\a => "en" ++ "train" ++ elisDe ++ infVP vp a)
|
||||
(predV copula) ;
|
||||
|
||||
ImpPl1 vp = {
|
||||
s = mkImperative False P1 vp ! RPos ! Masc ! Pl --- fem
|
||||
} ;
|
||||
|
||||
ImpP3 np vp = {
|
||||
s = (mkClause (np.s ! Nom).comp np.hasClit False np.a vp).s
|
||||
! DInv ! RPres ! Simul ! RPos ! Conjunct
|
||||
} ;
|
||||
|
||||
|
||||
SelfAdvVP vp = insertComplement memePron vp ;
|
||||
SelfAdVVP vp = insertComplement memePron vp ; ---- should be AdV
|
||||
SelfNP np = heavyNP {
|
||||
s = \\c => (np.s ! c).ton ++ memePron ! np.a ; ---- moi moi-même ?
|
||||
a = np.a
|
||||
} ;
|
||||
|
||||
oper
|
||||
elisCe = elision "c" ;
|
||||
|
||||
memePron : Agr => Str = table {
|
||||
{n = Sg ; p = P1} => "moi-même" ;
|
||||
{n = Sg ; p = P2} => "toi-même" ;
|
||||
{g = Masc ; n = Sg ; p = P3} => "lui-même" ;
|
||||
{g = Fem ; n = Sg ; p = P3} => "elle-même" ;
|
||||
{n = Pl ; p = P1} => "nous-mêmes" ;
|
||||
{n = Pl ; p = P2} => "vous-mêmes" ;
|
||||
{g = Masc ; n = Pl ; p = P3} => "eux-mêmes" ;
|
||||
{g = Fem ; n = Pl ; p = P3} => "elles-mêmes"
|
||||
} ;
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
75
lib/src/french/exper/TranslateFre.gf
Normal file
75
lib/src/french/exper/TranslateFre.gf
Normal file
@@ -0,0 +1,75 @@
|
||||
--# -path=.:../chunk:alltenses
|
||||
|
||||
concrete TranslateFre of Translate =
|
||||
TenseFre,
|
||||
NounFre - [PPartNP],
|
||||
AdjectiveFre,
|
||||
NumeralFre,
|
||||
SymbolFre [
|
||||
PN, Symb, String, CN, Card, NP, MkSymb, SymbPN, CNNumNP
|
||||
],
|
||||
ConjunctionFre,
|
||||
VerbFre - [
|
||||
UseCopula,
|
||||
PassV2 -- generalized in Extensions
|
||||
],
|
||||
AdverbFre,
|
||||
PhraseFre,
|
||||
SentenceFre,
|
||||
QuestionFre ---- - [
|
||||
---- QuestCl,QuestIAdv -- french-specific overrides
|
||||
---- ]
|
||||
,
|
||||
RelativeFre,
|
||||
IdiomFre,
|
||||
ConstructionFre,
|
||||
DocumentationFre,
|
||||
|
||||
ChunkFre,
|
||||
ExtensionsFre [
|
||||
CompoundN,AdAdV,UttAdV,ApposNP,MkVPI, MkVPS, PredVPS, PassVPSlash, PassAgentVPSlash, CompoundAP
|
||||
, PastPartAP, PastPartAgentAP, PresPartAP, GerundNP, GerundAdv
|
||||
, WithoutVP, InOrderToVP, ByVP
|
||||
],
|
||||
|
||||
DictionaryFre **
|
||||
open PhonoFre, MorphoFre, ResFre, CommonRomance, ParadigmsFre, SyntaxFre, Prelude, (G = GrammarFre) in {
|
||||
|
||||
flags
|
||||
literal=Symb ;
|
||||
coding = utf8 ;
|
||||
|
||||
-- overrides from Lang
|
||||
{- -----
|
||||
lin
|
||||
QuestCl cl =
|
||||
{s = \\t,a,p => -- est-ce qu'il dort ?
|
||||
let cls = cl.s ! DDir ! t ! a ! p
|
||||
in table {
|
||||
QDir => "est-ce" ++ elisQue ++ cls ! Indic ;
|
||||
QIndir => subjIf ++ cls ! Indic
|
||||
}
|
||||
}
|
||||
| {s = \\t,a,p => -- dort-il ?
|
||||
let cls = cl.s ! DInv ! t ! a ! p
|
||||
in table {
|
||||
QDir => cls ! Indic ;
|
||||
QIndir => subjIf ++ cls ! Indic
|
||||
}
|
||||
}
|
||||
| G.QuestCl cl -- il dort ?
|
||||
;
|
||||
|
||||
|
||||
QuestIAdv iadv cl =
|
||||
G.QuestIAdv iadv cl -- où dort-il
|
||||
| {s = \\t,a,p,q => -- où est-ce qu'il dort
|
||||
let
|
||||
ord = DDir ;
|
||||
cls = cl.s ! ord ! t ! a ! p ! Indic ;
|
||||
why = iadv.s
|
||||
in why ++ "est-ce" ++ elisQue ++ cls
|
||||
} ;
|
||||
-}
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user