forked from GitHub/gf-core
record extension typs checking fixed
This commit is contained in:
@@ -113,9 +113,7 @@ instance SyntaxDan of SyntaxScand = TypesDan **
|
|||||||
progressiveClause : NounPhrase -> VerbPhrase -> Clause = \np,vp ->
|
progressiveClause : NounPhrase -> VerbPhrase -> Clause = \np,vp ->
|
||||||
predVerbGroupClause np
|
predVerbGroupClause np
|
||||||
(complVerbVerb
|
(complVerbVerb
|
||||||
(verbVara **
|
{s = verbVara.s ; s1 = "ved" ; isAux = False}
|
||||||
{isAux = False} ----- {s3 = ["ved at"]}
|
|
||||||
)
|
|
||||||
vp) ;
|
vp) ;
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -68,6 +68,7 @@ lincat
|
|||||||
V2S = TransVerb ;
|
V2S = TransVerb ;
|
||||||
V2Q = TransVerb ;
|
V2Q = TransVerb ;
|
||||||
V2V = TransVerb ** {s4 : Str} ;
|
V2V = TransVerb ** {s4 : Str} ;
|
||||||
|
----V2V = {s : VForm => Str ; s1 : Particle ; s3, s4 : Str} ;
|
||||||
V2A = TransVerb ;
|
V2A = TransVerb ;
|
||||||
V0 = Verb ;
|
V0 = Verb ;
|
||||||
|
|
||||||
|
|||||||
@@ -86,7 +86,7 @@ lin
|
|||||||
|
|
||||||
AdjPart = adjPastPart ;
|
AdjPart = adjPastPart ;
|
||||||
|
|
||||||
UseV2V x = x ** {isAux = False} ;
|
UseV2V x = verb2aux x ** {isAux = False} ;
|
||||||
UseV2S x = x ;
|
UseV2S x = x ;
|
||||||
UseV2Q x = x ;
|
UseV2Q x = x ;
|
||||||
UseA2S x = x ;
|
UseA2S x = x ;
|
||||||
|
|||||||
@@ -329,7 +329,7 @@ oper
|
|||||||
mkV0 v = v ** {lock_V0 = <>} ;
|
mkV0 v = v ** {lock_V0 = <>} ;
|
||||||
mkVS v = v ** {mn,mp = Ind ; lock_VS = <>} ; ---- more moods
|
mkVS v = v ** {mn,mp = Ind ; lock_VS = <>} ; ---- more moods
|
||||||
mkV2S v p = mkV2 v p ** {mn,mp = Ind ; lock_V2S = <>} ;
|
mkV2S v p = mkV2 v p ** {mn,mp = Ind ; lock_V2S = <>} ;
|
||||||
mkVV v = v ** {c = accusative ; lock_VV = <>} ;
|
mkVV v = v ** {c = accusative.p1 ; lock_VV = <>} ;
|
||||||
deVV v = v ** {c = genitive.p1 ; lock_VV = <>} ;
|
deVV v = v ** {c = genitive.p1 ; lock_VV = <>} ;
|
||||||
aVV v = v ** {c = dative.p1 ; lock_VV = <>} ;
|
aVV v = v ** {c = dative.p1 ; lock_VV = <>} ;
|
||||||
mkV2V v p t = mkV2 v p ** {c3 = t.p1 ; s3 = p.p2 ; lock_V2V = <>} ;
|
mkV2V v p t = mkV2 v p ** {c3 = t.p1 ; s3 = p.p2 ; lock_V2V = <>} ;
|
||||||
|
|||||||
@@ -347,7 +347,7 @@ oper
|
|||||||
mkV0 v = v ** {lock_V0 = <>} ;
|
mkV0 v = v ** {lock_V0 = <>} ;
|
||||||
mkVS v = v ** {mn,mp = Ind ; lock_VS = <>} ; ---- more moods
|
mkVS v = v ** {mn,mp = Ind ; lock_VS = <>} ; ---- more moods
|
||||||
mkV2S v p = mkV2 v p ** {mn,mp = Ind ; lock_V2S = <>} ;
|
mkV2S v p = mkV2 v p ** {mn,mp = Ind ; lock_V2S = <>} ;
|
||||||
mkVV v = v ** {c = accusative ; lock_VV = <>} ;
|
mkVV v = v ** {c = accusative.p1 ; lock_VV = <>} ;
|
||||||
deVV v = v ** {c = genitive.p1 ; lock_VV = <>} ;
|
deVV v = v ** {c = genitive.p1 ; lock_VV = <>} ;
|
||||||
aVV v = v ** {c = dative.p1 ; lock_VV = <>} ;
|
aVV v = v ** {c = dative.p1 ; lock_VV = <>} ;
|
||||||
mkV2V v p t = mkV2 v p ** {c3 = t.p1 ; s3 = p.p2 ; lock_V2V = <>} ;
|
mkV2V v p t = mkV2 v p ** {c3 = t.p1 ; s3 = p.p2 ; lock_V2V = <>} ;
|
||||||
|
|||||||
@@ -114,8 +114,6 @@ instance SyntaxNor of SyntaxScand = TypesNor **
|
|||||||
progressiveClause : NounPhrase -> VerbPhrase -> Clause = \np,vp ->
|
progressiveClause : NounPhrase -> VerbPhrase -> Clause = \np,vp ->
|
||||||
predVerbGroupClause np
|
predVerbGroupClause np
|
||||||
(complVerbVerb
|
(complVerbVerb
|
||||||
(verbVara **
|
({s = verbVara.s ; s1 = "ved" ; isAux = False})
|
||||||
{isAux = False} ----- {s3 = ["ved at"]}
|
|
||||||
)
|
|
||||||
vp) ;
|
vp) ;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -637,7 +637,7 @@ oper
|
|||||||
|
|
||||||
mkVerbGroupCopula : (Gender => Number => Person => Str) -> VerbGroup =
|
mkVerbGroupCopula : (Gender => Number => Person => Str) -> VerbGroup =
|
||||||
\obj ->
|
\obj ->
|
||||||
mkVerbGroupObject (verbVara ** {s1 = []}) obj ;
|
mkVerbGroupObject verbVara obj ;
|
||||||
|
|
||||||
-----------------------
|
-----------------------
|
||||||
|
|
||||||
@@ -688,7 +688,7 @@ oper
|
|||||||
-- on semantic grounds.
|
-- on semantic grounds.
|
||||||
|
|
||||||
vara : (Gender => Number => Person => Str) -> VerbGroup =
|
vara : (Gender => Number => Person => Str) -> VerbGroup =
|
||||||
useVerb (verbVara ** {s1 = []}) ;
|
useVerb verbVara ;
|
||||||
|
|
||||||
predAdjective : Adjective -> VerbGroup = \arg ->
|
predAdjective : Adjective -> VerbGroup = \arg ->
|
||||||
vara (\\g,n,_ => arg.s ! predFormAdj g n ! Nom) ;
|
vara (\\g,n,_ => arg.s ! predFormAdj g n ! Nom) ;
|
||||||
@@ -1016,7 +1016,7 @@ oper
|
|||||||
insertObject (mkSats subj verb) obj ;
|
insertObject (mkSats subj verb) obj ;
|
||||||
|
|
||||||
mkSatsCopula : NounPhrase -> Str -> Sats = \subj,obj ->
|
mkSatsCopula : NounPhrase -> Str -> Sats = \subj,obj ->
|
||||||
mkSatsObject subj (verbVara ** {s1 = []}) obj ;
|
mkSatsObject subj verbVara obj ;
|
||||||
|
|
||||||
|
|
||||||
--3 Sentence-complement verbs
|
--3 Sentence-complement verbs
|
||||||
|
|||||||
@@ -338,7 +338,7 @@ oper
|
|||||||
mkV0 v = v ** {lock_V0 = <>} ;
|
mkV0 v = v ** {lock_V0 = <>} ;
|
||||||
mkVS v = v ** {mn,mp = Ind ; lock_VS = <>} ; ---- more moods
|
mkVS v = v ** {mn,mp = Ind ; lock_VS = <>} ; ---- more moods
|
||||||
mkV2S v p = mkV2 v p ** {mn,mp = Ind ; lock_V2S = <>} ;
|
mkV2S v p = mkV2 v p ** {mn,mp = Ind ; lock_V2S = <>} ;
|
||||||
mkVV v = v ** {c = accusative ; lock_VV = <>} ;
|
mkVV v = v ** {c = accusative.p1 ; lock_VV = <>} ;
|
||||||
deVV v = v ** {c = genitive.p1 ; lock_VV = <>} ;
|
deVV v = v ** {c = genitive.p1 ; lock_VV = <>} ;
|
||||||
aVV v = v ** {c = dative.p1 ; lock_VV = <>} ;
|
aVV v = v ** {c = dative.p1 ; lock_VV = <>} ;
|
||||||
mkV2V v p t = mkV2 v p ** {c3 = t.p1 ; s3 = p.p2 ; lock_V2V = <>} ;
|
mkV2V v p t = mkV2 v p ** {c3 = t.p1 ; s3 = p.p2 ; lock_V2V = <>} ;
|
||||||
|
|||||||
@@ -5,9 +5,9 @@
|
|||||||
-- Stability : (stable)
|
-- Stability : (stable)
|
||||||
-- Portability : (portable)
|
-- Portability : (portable)
|
||||||
--
|
--
|
||||||
-- > CVS $Date: 2005/04/21 16:21:34 $
|
-- > CVS $Date: 2005/04/25 18:19:32 $
|
||||||
-- > CVS $Author: bringert $
|
-- > CVS $Author: aarne $
|
||||||
-- > CVS $Revision: 1.23 $
|
-- > CVS $Revision: 1.24 $
|
||||||
--
|
--
|
||||||
-- AR 4\/12\/1999 -- 1\/4\/2000 -- 8\/9\/2001 -- 15\/5\/2002 -- 27\/11\/2002 -- 18\/6\/2003
|
-- AR 4\/12\/1999 -- 1\/4\/2000 -- 8\/9\/2001 -- 15\/5\/2002 -- 27\/11\/2002 -- 18\/6\/2003
|
||||||
--
|
--
|
||||||
@@ -429,7 +429,7 @@ inferLType gr trm = case trm of
|
|||||||
case (rT', sT') of
|
case (rT', sT') of
|
||||||
(RecType rs, RecType ss) -> do
|
(RecType rs, RecType ss) -> do
|
||||||
rt <- checkErr $ plusRecType rT' sT'
|
rt <- checkErr $ plusRecType rT' sT'
|
||||||
return (trm', rt)
|
check trm' rt ---- return (trm', rt)
|
||||||
_ | rT' == typeType && sT' == typeType -> return (trm', typeType)
|
_ | rT' == typeType && sT' == typeType -> return (trm', typeType)
|
||||||
_ -> prtFail "records or record types expected in" trm
|
_ -> prtFail "records or record types expected in" trm
|
||||||
|
|
||||||
@@ -543,21 +543,21 @@ checkLType env trm typ0 = do
|
|||||||
case trm' of
|
case trm' of
|
||||||
RecType _ -> termWith trm $ return typeType
|
RecType _ -> termWith trm $ return typeType
|
||||||
_ -> prtFail "invalid record type extension" trm
|
_ -> prtFail "invalid record type extension" trm
|
||||||
RecType rr -> checks [
|
RecType rr -> do
|
||||||
do (r',ty) <- infer r
|
(r',ty,s') <- checks [
|
||||||
case ty of
|
do (r',ty) <- infer r
|
||||||
RecType rr1 -> do
|
return (r',ty,s)
|
||||||
s' <- justCheck s (minusRecType rr rr1)
|
,
|
||||||
return $ (ExtR r' s', typ)
|
do (s',ty) <- infer s
|
||||||
_ -> prtFail "record type expected in extension of" r
|
return (s',ty,r)
|
||||||
,
|
]
|
||||||
do (s',ty) <- infer s
|
case ty of
|
||||||
case ty of
|
RecType rr1 -> do
|
||||||
RecType rr2 -> do
|
let (rr0,rr2) = recParts rr rr1
|
||||||
r' <- justCheck r (minusRecType rr rr2)
|
r2 <- justCheck r' rr0
|
||||||
return $ (ExtR r' s', typ)
|
s2 <- justCheck s' rr2
|
||||||
_ -> prtFail "record type expected in extension with" s
|
return $ (ExtR r2 s2, typ)
|
||||||
]
|
_ -> raise ("record type expected in extension of" +++ prt r +++ "but found" +++ prt ty)
|
||||||
_ -> prtFail "record extension not meaningful for" typ
|
_ -> prtFail "record extension not meaningful for" typ
|
||||||
|
|
||||||
FV vs -> do
|
FV vs -> do
|
||||||
@@ -600,7 +600,8 @@ checkLType env trm typ0 = do
|
|||||||
|
|
||||||
checkEq = checkEqLType env
|
checkEq = checkEqLType env
|
||||||
|
|
||||||
minusRecType rr rr1 = RecType [(l,v) | (l,v) <- rr, notElem l (map fst rr1)]
|
recParts rr t = (RecType rr1,RecType rr2) where
|
||||||
|
(rr1,rr2) = partition (flip elem (map fst t) . fst) rr
|
||||||
|
|
||||||
checkM rms (l,ty) = case lookup l rms of
|
checkM rms (l,ty) = case lookup l rms of
|
||||||
Just (Just ty0,t) -> do
|
Just (Just ty0,t) -> do
|
||||||
|
|||||||
Reference in New Issue
Block a user