diff options
| author | aarne <unknown> | 2003-10-09 15:23:32 +0000 |
|---|---|---|
| committer | aarne <unknown> | 2003-10-09 15:23:32 +0000 |
| commit | 2ee936c7e23bd690b05b8362179911a2d176f150 (patch) | |
| tree | 00e54d208f21b4f0278aab96ae551ecd6cae4abc /grammars/aggregation/Abstract.gf | |
| parent | ddd103ccd7422c35b5af0bcb5bad5edd49b080bb (diff) | |
Added treatment of transfer modules. Aggregation is an example.
Diffstat (limited to 'grammars/aggregation/Abstract.gf')
| -rw-r--r-- | grammars/aggregation/Abstract.gf | 57 |
1 files changed, 57 insertions, 0 deletions
diff --git a/grammars/aggregation/Abstract.gf b/grammars/aggregation/Abstract.gf new file mode 100644 index 000000000..719bfe150 --- /dev/null +++ b/grammars/aggregation/Abstract.gf @@ -0,0 +1,57 @@ +-- 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 ; +} |
