diff --git a/examples/phrasebook/SentencesTha.gf b/examples/phrasebook/SentencesTha.gf index 2e2aebe09..ea5d7fbe9 100644 --- a/examples/phrasebook/SentencesTha.gf +++ b/examples/phrasebook/SentencesTha.gf @@ -1,6 +1,7 @@ concrete SentencesTha of Sentences = NumeralTha ** SentencesI - [ PGreetingMale, PGreetingFemale, GObjectPlease, + IMale, YouFamMale, YouFamFemale, ACitizen ] with (Syntax = SyntaxTha), @@ -17,6 +18,9 @@ lin ACitizen p n = mkCl p.name (mkVP (mkCN n (P.personN R.khon_s))) ; + IMale = mkPerson (R.mkNP "ผม") ; + YouFamMale, YouFamFemale = mkPerson (R.mkNP "เธอ") ; + oper thpron = R.thpron ; } diff --git a/examples/phrasebook/WordsTha.gf b/examples/phrasebook/WordsTha.gf index b6f3215b1..89659eb15 100644 --- a/examples/phrasebook/WordsTha.gf +++ b/examples/phrasebook/WordsTha.gf @@ -155,12 +155,12 @@ concrete WordsTha of Words = SentencesTha ** HowMuchCost item = mkQS (mkQCl (mkIComp how8much_IAdv) item) ; ItCost item price = mkCl item (mkV2 (R.thword "เป็น" "รา" "คา")) price ; - PropOpen p = mkCl p.name open_Adv ; - PropClosed p = mkCl p.name closed_Adv ; - PropOpenDate p d = mkCl p.name (mkVP (mkVP open_Adv) d) ; - PropClosedDate p d = mkCl p.name (mkVP (mkVP closed_Adv) d) ; - PropOpenDay p d = mkCl p.name (mkVP (mkVP open_Adv) d.habitual) ; - PropClosedDay p d = mkCl p.name (mkVP (mkVP closed_Adv) d.habitual) ; + PropOpen p = mkCl p.name open_A ; + PropClosed p = mkCl p.name closed_A ; + PropOpenDate p d = mkCl p.name (mkVP (mkVP open_A) d) ; + PropClosedDate p d = mkCl p.name (mkVP (mkVP closed_A) d) ; + PropOpenDay p d = mkCl p.name (mkVP (mkVP open_A) d.habitual) ; + PropClosedDay p d = mkCl p.name (mkVP (mkVP closed_A) d.habitual) ; -- Building phrases from strings is complicated: the solution is to use -- mkText : Text -> Text -> Text ; @@ -244,8 +244,8 @@ concrete WordsTha of Words = SentencesTha ** mkPlace : N -> {name : CN ; at : Prep ; to : Prep; isPl : Bool} = \p -> mkCNPlace (mkCN p) at_Prep noPrep ; - open_Adv = P.mkAdv "เปิด" ; - closed_Adv = P.mkAdv "ปิด" ; + open_A = P.mkA "เปิด" ; + closed_A = P.mkA "ปิด" ; xOf : Str -> NPPerson -> NPPerson = \f,p -> {name = mkNP the_Det (mkCN (personN f) (SyntaxTha.mkAdv possess_Prep p.name)) ; diff --git a/examples/phrasebook/missing.txt b/examples/phrasebook/missing.txt index d16355ca4..93d0b9d03 100644 --- a/examples/phrasebook/missing.txt +++ b/examples/phrasebook/missing.txt @@ -1,5 +1,5 @@ DisambPhrasebookEng : -PhrasebookBul : ABusinessman ACook ADoctor AEngineer ALawyer AProfessor AStudent ATeacher Baht Beach Beef Chili Coke Durian Egg Garlic IceCream ItsCold ItsRaining ItsWarm ItsWindy Lemonade Mango Noodles ObjPlur OrangeJuice Pineapple Pork Rice Salad Shrimps Smoke SunShine Thai ThesPlur ThesePlur ThosePlur +PhrasebookBul : Noodles PhrasebookCat : ABusinessman ACook ADoctor AEngineer ALawyer AProfessor AStudent ATeacher Baht Beach Beef Chili Coke Durian Egg Garlic IceCream ItsCold ItsRaining ItsWarm ItsWindy Lemonade MMust Mango Noodles ObjPlur OrangeJuice Pineapple Pork Rice Salad Shrimps Smoke SunShine Thai ThesPlur ThesePlur ThosePlur PhrasebookDan : ABusinessman ACook ADoctor AEngineer ALawyer AProfessor AStudent ATeacher Baht Beach Beef Chili Coke Durian Egg Garlic IceCream ItsCold ItsRaining ItsWarm ItsWindy Lemonade Mango Noodles ObjPlur OrangeJuice Pineapple Pork Rice Salad Shrimps Smoke SunShine Thai ThesPlur ThesePlur ThosePlur PhrasebookDut : ABusinessman ACook ADoctor AEngineer ALawyer AProfessor AStudent ATeacher Baht Beach Beef Chili Coke Durian Egg Garlic IceCream ItsCold ItsRaining ItsWarm ItsWindy Lemonade Mango Noodles ObjPlur OrangeJuice Pineapple Pork Rice Salad Shrimps Smoke SunShine Thai ThesPlur ThesePlur ThosePlur diff --git a/lib/doc/CC_eng_tha.txt b/lib/doc/CC_eng_tha.txt index 406964ffd..3d33db6bd 100644 --- a/lib/doc/CC_eng_tha.txt +++ b/lib/doc/CC_eng_tha.txt @@ -65,11 +65,11 @@ she sleeps mkUtt (mkQS pastTense negativePol (mkQCl who_IP sleep_V)) who didn't sleep -ไครไม่นอนหลับ -- neg place not preferred +ใครไม่นอนหลับ -- neg place not preferred mkUtt (mkQCl who_IP sleep_V) who sleeps -ไครนอนหลับ +ใครนอนหลับ mkUtt pluralImpForm negativePol (mkImp (mkVP man_N)) don't be men @@ -217,7 +217,7 @@ she answers to him that we sleep mkCl she_NP ask_V2Q he_NP (mkQS (mkQCl who_IP sleep_V)) she asks him who sleeps -หล่อนถามเขาว่าไครนอนหลับ +หล่อนถามเขาว่าใครนอนหลับ mkCl she_NP beg_V2V he_NP (mkVP sleep_V) she begs him to sleep @@ -854,7 +854,7 @@ it is good that she sleeps mkCl (mkVP (mkAP (mkAP uncertain_A) (mkQS (mkQCl who_IP sleep_V)))) it is uncertain who sleeps -ลังเลใจว่าไครนอนหลับ +ลังเลใจว่าใครนอนหลับ mkCl she_NP (mkAP (mkAP ready_A) (mkVP sleep_V)) she is ready to sleep diff --git a/lib/doc/Test.hs b/lib/doc/Test.hs new file mode 100644 index 000000000..25165cb0a --- /dev/null +++ b/lib/doc/Test.hs @@ -0,0 +1,22 @@ +import qualified Data.Map as Map +import Data.Char + +gold = "CC_eng_tha.txt" +tested = "api-examples-Tha.txt" + +main = do + s <- readFile gold + let corrects = Map.fromList $ exx 1 5 2 (lines s) +-- mapM_ putStrLn $ concat [[t,s] | (t,s) <- Map.toList corrects] + t <- readFile tested + mapM_ (doTest corrects) (exx 18 22 1 (map (drop 4) (lines t))) + +exx x y z ss = [(ss!!k,ss!!(k+z)) | k <- [x,y .. length ss - 2]] + +doTest corrects (t,s) = case Map.lookup t corrects of + Just c -> if unspace s == uncomment c then return () else mapM_ putStrLn [t,unspace s,c] + _ -> return () + +unspace = filter (not . isSpace) +uncomment = unspace . takeWhile (/= '-') + diff --git a/lib/doc/api-examples.txt b/lib/doc/api-examples.txt index 9b781cd3a..782e13f17 100644 --- a/lib/doc/api-examples.txt +++ b/lib/doc/api-examples.txt @@ -750,7 +750,7 @@ mkUtt everything_NP everywhere_Adv : Adv everywhere_Adv few_Det : Det -mkUtt (mkNP few_Det women_N) +mkUtt (mkNP few_Det woman_N) for_Prep : Prep mkAdv for_Prep it_NP from_Prep : Prep diff --git a/lib/doc/synopsis.html b/lib/doc/synopsis.html index f6b6f1dd1..c91ad5037 100644 --- a/lib/doc/synopsis.html +++ b/lib/doc/synopsis.html @@ -542,7 +542,7 @@ Lexical category, constructors given in
mkAP-> NP -> APmkAP married_A2 she_NP mkAP married_A2 she_NP mkAPmkAP-> S -> APmkCl (mkVP (mkAP (mkAP good_A) (mkS (mkCl she_NP sleep_V)))) mkCl (mkVP (mkAP (mkAP good_A) (mkS (mkCl she_NP sleep_V)))) mkAP-> QS -> APmkCl (mkVP (mkAP (mkAP uncertain_A) (mkQS (mkQCl who_IP sleep_V)))) mkCl (mkVP (mkAP (mkAP uncertain_A) (mkQS (mkQCl who_IP sleep_V)))) mkAP-> VP -> APmkCl she_NP (mkAP (mkAP ready_A) (mkVP sleep_V)) mkCl she_NP (mkAP (mkAP ready_A) (mkVP sleep_V)) mkAP-> SC -> APmkCl she_NP (mkAP (mkAP ready_A) (mkSC (mkVP sleep_V))) mkCl she_NP (mkAP (mkAP ready_A) (mkSC (mkVP sleep_V))) mkAPmkAP-> ListAP -> APmkAP and_Conj (mkListAP (mkAP old_A) (mkListAP (mkAP big_A) (mkAP warm_A))) mkAP and_Conj (mkListAP (mkAP old_A) (mkListAP (mkAP big_A) (mkAP warm_A))) mkAPmkAP-> AP -> NP -> APmkAP as_CAdv (mkAP old_A) she_NP mkAP as_CAdv (mkAP old_A) she_NP reflAPalmost_AdAmkAP almost_AdA red_A mkAP almost_AdA red_A quite_Advquite_Adv quite_Adv so_AdAso_AdA so_AdA too_AdAalmost_AdNmkCard almost_AdN (mkCard (mkNumeral n8_Unit)) mkCard almost_AdN (mkCard (mkNumeral n8_Unit)) at_least_AdNmkCard at_least_AdN (mkCard (mkNumeral n8_Unit)) mkCard at_least_AdN (mkCard (mkNumeral n8_Unit)) at_most_AdNmkCard at_most_AdN (mkCard (mkNumeral n8_Unit)) mkCard at_most_AdN (mkCard (mkNumeral n8_Unit)) mkAdN-> AdNmkCard (mkAdN more_CAdv) (mkCard (mkNumeral n8_Unit)) mkCard (mkAdN more_CAdv) (mkCard (mkNumeral n8_Unit)) always_AdValways_AdV always_AdV mkAdv-> S -> AdvmkAdv when_Subj (mkS (mkCl she_NP sleep_V)) mkAdv when_Subj (mkS (mkCl she_NP sleep_V)) mkAdv-> A -> NP -> AdvmkAdv more_CAdv warm_A he_NP mkAdv more_CAdv warm_A he_NP mkAdv-> A -> S -> AdvmkAdv more_CAdv warm_A (mkS (mkCl he_NP run_V)) mkAdv more_CAdv warm_A (mkS (mkCl he_NP run_V)) mkAdvmkAdv-> Adv -> Adv -> AdvmkAdv and_Conj here_Adv now_Adv mkAdv and_Conj here_Adv now_Adv mkAdv-> ListAdv -> AdvmkAdv and_Conj (mkListAdv (mkAdv with_Prep she_NP) (mkListAdv here_Adv now_Adv)) mkAdv and_Conj (mkListAdv (mkAdv with_Prep she_NP) (mkListAdv here_Adv now_Adv)) somewhere_AdvanteriorAntmkS anteriorAnt (mkCl she_NP sleep_V) mkS anteriorAnt (mkCl she_NP sleep_V) simultaneousAntmkS simultaneousAnt (mkCl she_NP sleep_V) mkS simultaneousAnt (mkCl she_NP sleep_V) mkCN-> NP -> CNmkCN mother_N2 (mkNP the_Det king_N) mkCN mother_N2 (mkNP the_Det king_N) mkCNmkCN-> CN -> CNmkCN big_A (mkCN blue_A house_N) mkCN big_A (mkCN blue_A house_N) mkCNmkCN-> CN -> CNmkCN (mkAP very_AdA big_A) (mkCN blue_A house_N) mkCN (mkAP very_AdA big_A) (mkCN blue_A house_N) mkCN-> RS -> CNmkCN man_N (mkRS (mkRCl which_RP she_NP love_V2)) mkCN man_N (mkRS (mkRCl which_RP she_NP love_V2)) mkCN-> RS -> CNmkCN (mkCN old_A man_N) (mkRS (mkRCl which_RP she_NP love_V2)) mkCN (mkCN old_A man_N) (mkRS (mkRCl which_RP she_NP love_V2)) mkCNmkCN-> S -> CNmkNum (mkCard almost_AdN (mkCard (mkNumeral n5_Unit))) mkNum (mkCard almost_AdN (mkCard (mkNumeral n5_Unit))) mkCN-> QS -> CNmkNum (mkCard almost_AdN (mkCard (mkNumeral n5_Unit))) mkNum (mkCard almost_AdN (mkCard (mkNumeral n5_Unit))) mkCNmkCl-> V -> ClmkCl she_NP sleep_V mkCl she_NP sleep_V mkCl-> V2 -> NP -> ClmkCl she_NP love_V2 he_NP mkCl she_NP love_V2 he_NP mkCl-> V3 -> NP -> NP -> ClmkCl she_NP send_V3 it_NP he_NP mkCl she_NP send_V3 it_NP he_NP mkCl-> VV -> VP -> ClmkCl she_NP want_VV (mkVP sleep_V) mkCl she_NP want_VV (mkVP sleep_V) mkCl-> VS -> S -> ClmkCl she_NP say_VS (mkS (mkCl i_NP sleep_V)) mkCl she_NP say_VS (mkS (mkCl i_NP sleep_V)) mkCl-> VQ -> QS -> ClmkCl she_NP wonder_VQ (mkQS (mkQCl who_IP sleep_V)) mkCl she_NP wonder_VQ (mkQS (mkQCl who_IP sleep_V)) mkCl-> VA -> A -> ClmkCl she_NP become_VA old_A mkCl she_NP become_VA old_A mkCl-> VA -> AP -> ClmkCl she_NP become_VA (mkAP very_AdA old_A) mkCl she_NP become_VA (mkAP very_AdA old_A) mkCl-> V2A -> NP -> A -> ClmkCl she_NP paint_V2A it_NP red_A mkCl she_NP paint_V2A it_NP red_A mkCl-> V2A -> NP -> AP -> ClmkCl she_NP paint_V2A it_NP (mkAP red_A) mkCl she_NP paint_V2A it_NP (mkAP red_A) mkCl-> V2S -> NP -> S -> ClmkCl she_NP answer_V2S he_NP (mkS (mkCl we_NP sleep_V)) mkCl she_NP answer_V2S he_NP (mkS (mkCl we_NP sleep_V)) mkCl-> V2Q -> NP -> QS -> ClmkCl she_NP ask_V2Q he_NP (mkQS (mkQCl who_IP sleep_V)) mkCl she_NP ask_V2Q he_NP (mkQS (mkQCl who_IP sleep_V)) mkCl-> V2V -> NP -> VP -> ClmkCl she_NP beg_V2V he_NP (mkVP sleep_V) mkCl she_NP beg_V2V he_NP (mkVP sleep_V) mkCl-> A -> ClmkCl she_NP old_A mkCl she_NP old_A mkCl-> A -> NP -> ClmkCl she_NP old_A he_NP mkCl she_NP old_A he_NP mkCl-> A2 -> NP -> ClmkCl she_NP married_A2 he_NP mkCl she_NP married_A2 he_NP mkCl-> AP -> ClmkCl she_NP (mkAP very_AdA old_A) mkCl she_NP (mkAP very_AdA old_A) mkCl-> NP -> ClmkCl she_NP (mkNP the_Det woman_N) mkCl she_NP (mkNP the_Det woman_N) mkCl-> N -> ClmkCl she_NP woman_N mkCl she_NP woman_N mkCl-> CN -> ClmkCl she_NP (mkCN old_A woman_N) mkCl she_NP (mkCN old_A woman_N) mkCl-> Adv -> ClmkCl she_NP here_Adv mkCl she_NP here_Adv mkCl-> VP -> ClmkCl she_NP (mkVP always_AdV (mkVP sleep_V)) mkCl she_NP (mkVP always_AdV (mkVP sleep_V)) mkClmkCl-> RS -> ClmkCl she_NP (mkRS (mkRCl which_RP (mkVP sleep_V))) mkCl she_NP (mkRS (mkRCl which_RP (mkVP sleep_V))) mkCl-> S -> ClmkCl here_Adv (mkS (mkCl she_NP sleep_V)) mkCl here_Adv (mkS (mkCl she_NP sleep_V)) mkClmkCl-> VP -> ClmkCl (mkSC (mkS (mkCl she_NP sleep_V))) (mkVP good_A) mkCl (mkSC (mkS (mkCl she_NP sleep_V))) (mkVP good_A) mkClSlash-> VPSlash -> ClSlashmkQCl who_IP (mkClSlash she_NP (mkVPSlash see_V2)) mkQCl who_IP (mkClSlash she_NP (mkVPSlash see_V2)) mkClSlash-> V2 -> ClSlashmkQCl who_IP (mkClSlash she_NP see_V2) mkQCl who_IP (mkClSlash she_NP see_V2) mkClSlash-> VV -> V2 -> ClSlashmkQCl who_IP (mkClSlash she_NP want_VV see_V2) mkQCl who_IP (mkClSlash she_NP want_VV see_V2) mkClSlash-> Prep -> ClSlashmkQCl who_IP (mkClSlash (mkCl she_NP sleep_V) with_Prep) mkQCl who_IP (mkClSlash (mkCl she_NP sleep_V) with_Prep) mkClSlash-> Adv -> ClSlashmkQCl who_IP (mkClSlash (mkClSlash she_NP see_V2) today_Adv) mkQCl who_IP (mkClSlash (mkClSlash she_NP see_V2) today_Adv) mkClSlash-> VS -> SSlash -> ClSlashmkQCl who_IP (mkClSlash she_NP know_VS (mkSSlash (mkTemp pastTense anteriorAnt) negativePol (mkClSlash we_NP (mkVPSlash see_V2)))) mkQCl who_IP (mkClSlash she_NP know_VS (mkSSlash (mkTemp pastTense anteriorAnt) negativePol (mkClSlash we_NP (mkVPSlash see_V2)))) and_ConjmkAdv and_Conj here_Adv now_Adv mkAdv and_Conj here_Adv now_Adv both7and_DConjmkAdv both7and_DConj here_Adv there_Adv mkAdv both7and_DConj here_Adv there_Adv either7or_DConjmkAdv either7or_DConj here_Adv there_Adv mkAdv either7or_DConj here_Adv there_Adv if_then_Conjfew_DetmkUtt (mkNP few_Det women_N) mkUtt (mkNP few_Det woman_N) many_Detmuch_DetmkUtt (mkNP much_Det wine_N) mkUtt (mkNP much_Det wine_N) somePl_DetmkUtt (mkNP somePl_Det woman_N) mkUtt (mkNP somePl_Det woman_N) someSg_DetmkUtt (mkNP someSg_Det wine_N) mkUtt (mkNP someSg_Det wine_N) that_Detwhy_IAdvmkUtt why_IAdv mkUtt why_IAdv mkIP-> Adv -> IPmkIP who_IP (mkAdv in_Prep (mkNP paris_PN)) mkIP who_IP (mkAdv in_Prep (mkNP paris_PN)) whatPl_IPwhoPl_IPwhoPl_IP whoPl_IP whoSg_IPwhoSg_IP whoSg_IP who_IPmkUtt who_IP mkUtt who_IP everybody_NPmkUtt everybody_NP mkUtt everybody_NP everything_NPmkNP-> NP -> NPmkUtt (mkNP only_Predet (mkNP this_Det woman_N)) mkUtt (mkNP only_Predet (mkNP this_Det woman_N)) mkNPmkNP-> ListNP -> NPmkUtt (mkNP or_Conj (mkListNP (mkNP this_Det woman_N) (mkListNP (mkNP john_PN) i_NP))) mkUtt (mkNP or_Conj (mkListNP (mkNP this_Det woman_N) (mkListNP (mkNP john_PN) i_NP))) nobody_NPshe_NPmkUtt she_NP mkUtt she_NP somebody_NPthey_NPmkUtt they_NP mkUtt they_NP this_NPyouPl_NPmkUtt youPl_NP mkUtt youPl_NP youPol_NPmkNum-> NummkNum (mkCard almost_AdN (mkCard (mkNumeral n5_Unit))) mkNum (mkCard almost_AdN (mkCard (mkNumeral n5_Unit))) mkNum-> Card -> NummkNum (mkCard almost_AdN (mkCard (mkNumeral n5_Unit))) mkNum (mkCard almost_AdN (mkCard (mkNumeral n5_Unit))) pluralNummkNumeral-> NumeralmkNumeral (mkSub1000 n9_Unit (mkSub100 n9_Unit n9_Unit)) mkNumeral (mkSub1000 n9_Unit (mkSub100 n9_Unit n9_Unit)) mkNumeral-> Sub1000 -> NumeralmkNumeral (mkSub1000 n9_Unit (mkSub100 n9_Unit n9_Unit)) (mkSub1000 n9_Unit (mkSub100 n9_Unit n9_Unit)) mkNumeral (mkSub1000 n9_Unit (mkSub100 n9_Unit n9_Unit)) (mkSub1000 n9_Unit (mkSub100 n9_Unit n9_Unit)) mkNumeralthousandfoldNumeral-> NumeralthousandfoldNumeral (mkSub1000 n9_Unit (mkSub100 n9_Unit n9_Unit)) thousandfoldNumeral (mkSub1000 n9_Unit (mkSub100 n9_Unit n9_Unit)) mkPConj-> PConjmkPhr (mkPConj and_Conj) (mkUtt now_Adv) mkPhr (mkPConj and_Conj) (mkUtt now_Adv) otherwise_PConjotherwise_PConj otherwise_PConj therefore_PConjmkPhr-> PhrmkPhr (mkS futureTense negativePol (mkCl she_NP sleep_V)) mkPhr (mkS futureTense negativePol (mkCl she_NP sleep_V)) mkPhr-> PhrmkPhr (mkCl she_NP sleep_V) mkPhr (mkCl she_NP sleep_V) mkPhr-> PhrmkPhr (mkQS conditionalTense (mkQCl (mkCl she_NP sleep_V))) mkPhr (mkQS conditionalTense (mkQCl (mkCl she_NP sleep_V))) mkPhrnegativePolmkS negativePol (mkCl she_NP sleep_V) mkS negativePol (mkCl she_NP sleep_V) positivePolmkS positivePol (mkCl she_NP sleep_V) mkS positivePol (mkCl she_NP sleep_V) not_PredetmkUtt (mkNP not_Predet everybody_NP) mkUtt (mkNP not_Predet everybody_NP) only_Predetonly_Predet only_Predet after_PrepmkAdv after_Prep it_NP mkAdv after_Prep it_NP before_Prepbetween_PrepmkAdv between_Prep (mkNP and_Conj you_NP i_NP) mkAdv between_Prep (mkNP and_Conj you_NP i_NP) by8agent_Prepduring_PrepmkAdv during_Prep it_NP mkAdv during_Prep it_NP except_Prepwithout_PrepmkAdv without_Prep it_NP mkAdv without_Prep it_NP she_PronmkUtt (mkNP she_Pron) mkUtt (mkNP she_Pron) they_PronmkUtt (mkNP they_Pron) mkUtt (mkNP they_Pron) we_PronyouPl_PronmkUtt (mkNP youPl_Pron) mkUtt (mkNP youPl_Pron) youPol_PronmkQCl-> QClmkQCl (mkCl she_NP sleep_V) mkQCl (mkCl she_NP sleep_V) mkQCl-> VP -> QClmkQCl who_IP (mkVP always_AdV (mkVP sleep_V)) mkQCl who_IP (mkVP always_AdV (mkVP sleep_V)) mkQCl-> V -> QClmkQCl who_IP sleep_V mkQCl who_IP sleep_V mkQCl-> V2 -> NP -> QClmkQCl who_IP love_V2 she_NP mkQCl who_IP love_V2 she_NP mkQCl-> V3 -> NP -> NP -> QClmkQCl who_IP send_V3 it_NP she_NP mkQCl who_IP send_V3 it_NP she_NP mkQCl-> VV -> VP -> QClmkQCl who_IP want_VV (mkVP sleep_V) mkQCl who_IP want_VV (mkVP sleep_V) mkQCl-> VS -> S -> QClmkQCl who_IP say_VS (mkS (mkCl i_NP sleep_V)) mkQCl who_IP say_VS (mkS (mkCl i_NP sleep_V)) mkQCl-> VQ -> QS -> QClmkQCl who_IP wonder_VQ (mkQS (mkQCl who_IP sleep_V)) mkQCl who_IP wonder_VQ (mkQS (mkQCl who_IP sleep_V)) mkQCl-> VA -> A -> QClmkQCl who_IP become_VA old_A mkQCl who_IP become_VA old_A mkQCl-> VA -> AP -> QClmkQCl who_IP become_VA (mkAP very_AdA old_A) mkQCl who_IP become_VA (mkAP very_AdA old_A) mkQCl-> V2A -> NP -> A -> QClmkQCl who_IP paint_V2A it_NP red_A mkQCl who_IP paint_V2A it_NP red_A mkQCl-> V2A -> NP -> AP -> QClmkQCl who_IP paint_V2A it_NP (mkAP very_AdA red_A) mkQCl who_IP paint_V2A it_NP (mkAP very_AdA red_A) mkQCl-> V2S -> NP -> S -> QClmkQCl who_IP answer_V2S he_NP (mkS (mkCl we_NP sleep_V)) mkQCl who_IP answer_V2S he_NP (mkS (mkCl we_NP sleep_V)) mkQCl-> V2Q -> NP -> QS -> QClmkQCl who_IP ask_V2Q he_NP (mkQS (mkQCl who_IP sleep_V)) mkQCl who_IP ask_V2Q he_NP (mkQS (mkQCl who_IP sleep_V)) mkQCl-> V2V -> NP -> VP -> QClmkQCl who_IP beg_V2V he_NP (mkVP sleep_V) mkQCl who_IP beg_V2V he_NP (mkVP sleep_V) mkQCl-> A -> QClmkQCl who_IP old_A mkQCl who_IP old_A mkQCl-> A -> NP -> QClmkQCl who_IP old_A he_NP mkQCl who_IP old_A he_NP mkQCl-> A2 -> NP -> QClmkQCl who_IP married_A2 he_NP mkQCl who_IP married_A2 he_NP mkQCl-> AP -> QClmkQCl who_IP (mkAP very_AdA old_A) mkQCl who_IP (mkAP very_AdA old_A) mkQCl-> NP -> QClmkQCl who_IP (mkNP the_Det woman_N) mkQCl who_IP (mkNP the_Det woman_N) mkQCl-> N -> QClmkQCl who_IP woman_N mkQCl who_IP woman_N mkQCl-> CN -> QClmkQCl who_IP (mkCN old_A woman_N) mkQCl who_IP (mkCN old_A woman_N) mkQCl-> Adv -> QClmkQCl who_IP here_Adv mkQCl who_IP here_Adv mkQCl-> NP -> V2 -> QClmkQCl who_IP she_NP mkQCl who_IP she_NP mkQCl-> ClSlash -> QClmkQCl who_IP (mkClSlash (mkClSlash she_NP love_V2) today_Adv) mkQCl who_IP (mkClSlash (mkClSlash she_NP love_V2) today_Adv) mkQCl-> Cl -> QClmkQCl why_IAdv (mkCl she_NP sleep_V) mkQCl why_IAdv (mkCl she_NP sleep_V) mkQCl-> IP -> Cl -> QClmkQCl with_Prep who_IP (mkCl she_NP sleep_V) mkQCl with_Prep who_IP (mkCl she_NP sleep_V) mkQCl-> NP -> QClmkQCl where_IAdv she_NP mkQCl where_IAdv she_NP mkQCl-> NP -> QClmkQCl (mkIComp who_IP) (mkNP this_Det man_N) mkQCl (mkIComp who_IP) (mkNP this_Det man_N) mkQClmkQS-> (Ant) -> (Pol) -> QCl -> QSmkQS conditionalTense anteriorAnt negativePol (mkQCl who_IP sleep_V) mkQS conditionalTense anteriorAnt negativePol (mkQCl who_IP sleep_V) mkQS-> QSmkQS (mkCl she_NP sleep_V) mkQS (mkCl she_NP sleep_V) no_QuantmkUtt (mkNP no_Quant house_N) mkUtt (mkNP no_Quant house_N) that_QuantmkRCl-> VP -> RClmkCN woman_N (mkRS (mkRCl which_RP (mkVP always_AdV (mkVP sleep_V)))) mkCN woman_N (mkRS (mkRCl which_RP (mkVP always_AdV (mkVP sleep_V)))) mkRClmkRCl-> V3 -> NP -> NP -> RClmkCN woman_N (mkRS (mkRCl which_RP send_V3 it_NP he_NP)) mkCN woman_N (mkRS (mkRCl which_RP send_V3 it_NP he_NP)) mkRClmkRCl-> VS -> S -> RClmkCN woman_N (mkRS (mkRCl which_RP say_VS (mkS (mkCl i_NP sleep_V)))) mkCN woman_N (mkRS (mkRCl which_RP say_VS (mkS (mkCl i_NP sleep_V)))) mkRCl-> VQ -> QS -> RClmkCN woman_N (mkRS (mkRCl which_RP wonder_VQ (mkQS (mkQCl who_IP sleep_V)))) mkCN woman_N (mkRS (mkRCl which_RP wonder_VQ (mkQS (mkQCl who_IP sleep_V)))) mkRClmkRCl-> V2A -> NP -> A -> RClmkCN woman_N (mkRS (mkRCl which_RP paint_V2A it_NP red_A)) mkCN woman_N (mkRS (mkRCl which_RP paint_V2A it_NP red_A)) mkRCl-> V2A -> NP -> AP -> RClmkCN woman_N (mkRS (mkRCl which_RP paint_V2A it_NP (mkAP very_AdA red_A))) mkCN woman_N (mkRS (mkRCl which_RP paint_V2A it_NP (mkAP very_AdA red_A))) mkRCl-> V2S -> NP -> S -> RClmkCN woman_N (mkRS (mkRCl which_RP answer_V2S he_NP (mkS (mkCl we_NP sleep_V)))) mkCN woman_N (mkRS (mkRCl which_RP answer_V2S he_NP (mkS (mkCl we_NP sleep_V)))) mkRCl-> V2Q -> NP -> QS -> RClmkCN woman_N (mkRS (mkRCl which_RP ask_V2Q he_NP (mkQS (mkQCl who_IP sleep_V)))) mkCN woman_N (mkRS (mkRCl which_RP ask_V2Q he_NP (mkQS (mkQCl who_IP sleep_V)))) mkRCl-> V2V -> NP -> VP -> RClmkCN woman_N (mkRS (mkRCl which_RP beg_V2V he_NP (mkVP sleep_V))) mkCN woman_N (mkRS (mkRCl which_RP beg_V2V he_NP (mkVP sleep_V))) mkRClmkRCl-> ClSlash -> RClmkCN woman_N (mkRS (mkRCl which_RP (mkClSlash (mkClSlash she_NP love_V2) today_Adv))) mkCN woman_N (mkRS (mkRCl which_RP (mkClSlash (mkClSlash she_NP love_V2) today_Adv))) mkRClmkS-> (Ant) -> (Pol) -> Cl -> SmkS conditionalTense anteriorAnt negativePol (mkCl she_NP sleep_V) mkS conditionalTense anteriorAnt negativePol (mkCl she_NP sleep_V) mkSmkS-> S -> S -> SmkS and_Conj (mkS (mkCl she_NP sleep_V)) (mkS (mkCl i_NP run_V)) mkS and_Conj (mkS (mkCl she_NP sleep_V)) (mkS (mkCl i_NP run_V)) mkS-> ListS -> SmkS and_Conj (mkListS (mkS (mkCl she_NP sleep_V)) (mkListS (mkS (mkCl i_NP run_V)) (mkS (mkCl (mkNP youSg_Pron) walk_V)))) mkS and_Conj (mkListS (mkS (mkCl she_NP sleep_V)) (mkListS (mkS (mkCl i_NP run_V)) (mkS (mkCl (mkNP youSg_Pron) walk_V)))) mkS-> S -> SmkS today_Adv (mkS (mkCl she_NP sleep_V)) mkS today_Adv (mkS (mkCl she_NP sleep_V)) mkSC-> SCmkSC (mkS (mkCl she_NP sleep_V)) mkSC (mkS (mkCl she_NP sleep_V)) mkSC-> SCmkSC (mkQS (mkQCl who_IP sleep_V)) mkSC (mkQS (mkQCl who_IP sleep_V)) mkSCmkSSlash-> Pol -> ClSlash -> SSlashmkSSlash (mkTemp pastTense anteriorAnt) negativePol (mkClSlash she_NP (mkVPSlash see_V2)) mkSSlash (mkTemp pastTense anteriorAnt) negativePol (mkClSlash she_NP (mkVPSlash see_V2)) mkSub1000-> Sub1000mkNumeral (mkSub1000 (mkSub100 n9_Unit n9_Unit)) mkNumeral (mkSub1000 (mkSub100 n9_Unit n9_Unit)) mkSub1000-> Sub1000mkNumeral (mkSub1000 n9_Unit) mkNumeral (mkSub1000 n9_Unit) mkSub1000-> Sub100 -> Sub1000mkNumeral (mkSub1000 n9_Unit (mkSub100 n9_Unit n9_Unit)) mkNumeral (mkSub1000 n9_Unit (mkSub100 n9_Unit n9_Unit)) although_SubjmkAdv although_Subj (mkS (mkCl she_NP sleep_V)) mkAdv although_Subj (mkS (mkCl she_NP sleep_V)) because_SubjmkAdv because_Subj (mkS (mkCl she_NP sleep_V)) mkAdv because_Subj (mkS (mkCl she_NP sleep_V)) if_SubjmkAdv if_Subj (mkS (mkCl she_NP sleep_V)) mkAdv if_Subj (mkS (mkCl she_NP sleep_V)) that_SubjmkAdv that_Subj (mkS (mkCl she_NP sleep_V)) mkAdv that_Subj (mkS (mkCl she_NP sleep_V)) when_SubjmkAdv when_Subj (mkS (mkCl she_NP sleep_V)) mkAdv when_Subj (mkS (mkCl she_NP sleep_V)) conditionalTensemkS conditionalTense (mkCl she_NP sleep_V) mkS conditionalTense (mkCl she_NP sleep_V) futureTensemkS futureTense (mkCl she_NP sleep_V) mkS futureTense (mkCl she_NP sleep_V) pastTensemkS pastTense (mkCl she_NP sleep_V) mkS pastTense (mkCl she_NP sleep_V) presentTensemkS presentTense (mkCl she_NP sleep_V) mkS presentTense (mkCl she_NP sleep_V) mkText-> (Punct) -> (Text) -> TextmkText (mkPhr (mkQS (mkCl she_NP sleep_V))) questMarkPunct (mkText (mkPhr yes_Utt) fullStopPunct) mkText (mkPhr (mkQS (mkCl she_NP sleep_V))) questMarkPunct (mkText (mkPhr yes_Utt) fullStopPunct) mkTextmkText-> TextmkText (mkS pastTense (mkCl she_NP sleep_V)) mkText (mkS pastTense (mkCl she_NP sleep_V)) mkText-> TextmkText (mkCl she_NP sleep_V) mkText (mkCl she_NP sleep_V) mkText-> TextmkText (mkQS pastTense (mkQCl (mkCl she_NP sleep_V))) mkText (mkQS pastTense (mkQCl (mkCl she_NP sleep_V))) mkTextmkText-> Text -> TextmkText (mkText (mkPhr (mkUtt where_IAdv)) questMarkPunct (mkText (mkPhr (mkUtt here_Adv)))) (mkText (mkPhr (mkUtt when_IAdv)) questMarkPunct (mkText (mkPhr (mkUtt now_Adv)) exclMarkPunct)) mkText (mkText (mkPhr (mkUtt where_IAdv)) questMarkPunct (mkText (mkPhr (mkUtt here_Adv)))) (mkText (mkPhr (mkUtt when_IAdv)) questMarkPunct (mkText (mkPhr (mkUtt now_Adv)) exclMarkPunct)) n9_UnitmkNumeral n9_Unit mkNumeral n9_Unit mkUtt-> UttmkUtt (mkS pastTense (mkCl she_NP sleep_V)) mkUtt (mkS pastTense (mkCl she_NP sleep_V)) mkUtt-> UttmkUtt (mkCl she_NP sleep_V) mkUtt (mkCl she_NP sleep_V) mkUtt-> UttmkUtt (mkQS pastTense negativePol (mkQCl who_IP sleep_V)) mkUtt (mkQS pastTense negativePol (mkQCl who_IP sleep_V)) mkUtt-> UttmkUtt (mkQCl who_IP sleep_V) mkUtt (mkQCl who_IP sleep_V) mkUttmkUtt-> UttmkUtt who_IP mkUtt who_IP mkUtt-> UttmkUtt why_IAdv mkUtt why_IAdv mkUttmkVP-> NP -> NP -> VPmkUtt (mkVP send_V3 it_NP he_NP) mkUtt (mkVP send_V3 it_NP he_NP) mkVPmkVP-> S -> VPmkUtt (mkVP know_VS (mkS (mkCl she_NP sleep_V))) mkUtt (mkVP know_VS (mkS (mkCl she_NP sleep_V))) mkVP-> QS -> VPmkUtt (mkVP wonder_VQ (mkQS (mkQCl who_IP sleep_V))) mkUtt (mkVP wonder_VQ (mkQS (mkQCl who_IP sleep_V))) mkVP-> AP -> VPmkUtt (mkVP become_VA (mkAP red_A)) mkUtt (mkVP become_VA (mkAP red_A)) mkVP-> NP -> AP -> VPmkUtt (mkVP paint_V2A it_NP (mkAP red_A)) mkUtt (mkVP paint_V2A it_NP (mkAP red_A)) mkVP-> NP -> S -> VPmkUtt (mkVP answer_V2S he_NP (mkS (mkCl she_NP sleep_V))) mkUtt (mkVP answer_V2S he_NP (mkS (mkCl she_NP sleep_V))) mkVP-> NP -> QS -> VPmkUtt (mkVP ask_V2Q he_NP (mkQS (mkQCl who_IP sleep_V))) mkUtt (mkVP ask_V2Q he_NP (mkQS (mkQCl who_IP sleep_V))) mkVP-> NP -> VP -> VPmkUtt (mkVP beg_V2V he_NP (mkVP sleep_V)) mkUtt (mkVP beg_V2V he_NP (mkVP sleep_V)) mkVPmkVP-> VP -> VPmkUtt (mkVP always_AdV (mkVP sleep_V)) mkUtt (mkVP always_AdV (mkVP sleep_V)) mkVP-> NP -> VPmkUtt (mkVP (mkVPSlash paint_V2A (mkAP black_A)) it_NP) mkUtt (mkVP (mkVPSlash paint_V2A (mkAP black_A)) it_NP) mkVP-> VPmkUtt (reflexiveVP (mkVPSlash paint_V2A (mkAP black_A))) mkUtt (reflexiveVP (mkVPSlash paint_V2A (mkAP black_A))) mkVPpassiveVP-> NP -> VPmkUtt (passiveVP love_V2 she_NP) mkUtt (passiveVP love_V2 she_NP) progressiveVPmkVPSlash-> VPSlashmkQCl who_IP (mkClSlash she_NP (mkVPSlash see_V2)) mkQCl who_IP (mkClSlash she_NP (mkVPSlash see_V2)) mkVPSlash-> NP -> VPSlashmkQCl who_IP (mkClSlash she_NP (mkVPSlash send_V3 it_NP)) mkQCl who_IP (mkClSlash she_NP (mkVPSlash send_V3 it_NP)) mkVPSlash-> AP -> VPSlashmkQCl who_IP (mkClSlash she_NP (mkVPSlash paint_V2A (mkAP red_A))) mkQCl who_IP (mkClSlash she_NP (mkVPSlash paint_V2A (mkAP red_A))) mkVPSlash-> QS -> VPSlashmkQCl who_IP (mkClSlash she_NP (mkVPSlash ask_V2Q (mkQS (mkQCl where_IAdv (mkCl i_NP sleep_V))))) mkQCl who_IP (mkClSlash she_NP (mkVPSlash ask_V2Q (mkQS (mkQCl where_IAdv (mkCl i_NP sleep_V))))) mkVPSlash-> S -> VPSlashmkQCl who_IP (mkClSlash she_NP (mkVPSlash answer_V2S (mkS (mkCl i_NP sleep_V)))) mkQCl who_IP (mkClSlash she_NP (mkVPSlash answer_V2S (mkS (mkCl i_NP sleep_V)))) mkVPSlash-> VP -> VPSlashmkQCl who_IP (mkClSlash she_NP (mkVPSlash beg_V2V (mkVP sleep_V))) mkQCl who_IP (mkClSlash she_NP (mkVPSlash beg_V2V (mkVP sleep_V))) mkVPSlash-> VPSlash -> VPSlashmkQCl who_IP (mkClSlash she_NP (mkVPSlash want_VV (mkVPSlash see_V2))) mkQCl who_IP (mkClSlash she_NP (mkVPSlash want_VV (mkVPSlash see_V2))) mkVPSlash-> NP -> VPSlash -> VPSlashmkQCl who_IP (mkClSlash she_NP (mkVPSlash beg_V2V i_NP (mkVPSlash see_V2))) mkQCl who_IP (mkClSlash she_NP (mkVPSlash beg_V2V i_NP (mkVPSlash see_V2))) mkV(breken,brak,gebroken : Str) -> V-> Str -> V2V =
+-> Str -> Str -> V2V =-> Str -> V2A =
+-> Str -> Str -> V2A =