forked from GitHub/gf-core
58 lines
1.8 KiB
Plaintext
58 lines
1.8 KiB
Plaintext
-- testing transfer: aggregation by def definitions. AR 12/4/2003 -- 9/10
|
|
|
|
-- p "Mary runs or John runs and John walks" | l -transfer=Aggregation
|
|
-- Mary runs or John runs and walks
|
|
-- Mary or John runs and John walks
|
|
|
|
-- The two results are due to ambiguity in parsing. Thus it is not spurious!
|
|
|
|
abstract Abstract = {
|
|
|
|
cat
|
|
S ; NP ; VP ; Conj ;
|
|
|
|
fun
|
|
Pred : NP -> VP -> S ;
|
|
ConjS : Conj -> S -> S -> S ;
|
|
ConjVP : Conj -> VP -> VP -> VP ;
|
|
ConjNP : Conj -> NP -> NP -> NP ;
|
|
|
|
John, Mary, Bill : NP ;
|
|
Walk, Run, Swim : VP ;
|
|
And, Or : Conj ;
|
|
|
|
fun aggreg : S -> S ;
|
|
def
|
|
aggreg (ConjS c (Pred Q F) B) = aggrAux c Q F B ;
|
|
aggreg (ConjS c A B) = ConjS c (aggreg A) (aggreg B) ;
|
|
aggreg A = A ;
|
|
|
|
-- this auxiliary makes pattern matching on NP to test equality
|
|
|
|
fun aggrAux : Conj -> NP -> VP -> S -> S ;
|
|
def
|
|
-- aggregate verbs with shared subject
|
|
aggrAux c John F (Pred John G) = Pred John (ConjVP c F G) ;
|
|
aggrAux c Mary F (Pred Mary G) = Pred Mary (ConjVP c F G) ;
|
|
aggrAux c Bill F (Pred Bill G) = Pred Bill (ConjVP c F G) ;
|
|
|
|
-- aggregate subjects with shared verbs
|
|
aggrAux c Q Run (Pred R Run) = Pred (ConjNP c Q R) Run ;
|
|
aggrAux c Q Walk (Pred R Walk) = Pred (ConjNP c Q R) Walk ;
|
|
aggrAux c Q Swim (Pred R Swim) = Pred (ConjNP c Q R) Swim ;
|
|
|
|
-- this case takes care of munching
|
|
aggrAux c Q F (ConjS e A B) = aggrAux c Q F (aggreg (ConjS e A B)) ;
|
|
|
|
aggrAux c Q F B = ConjS c (Pred Q F) (aggreg B) ;
|
|
|
|
-- unfortunately we cannot test string equality for Name : String -> NP ;
|
|
-- It would also be tedious to test the equality of complex
|
|
-- NPs and VPs, but not impossible.
|
|
|
|
-- have to add these, otherwise constants are not constructor patterns!
|
|
|
|
data NP = John | Mary | Bill ;
|
|
data VP = Run | Walk | Swim ;
|
|
}
|