summaryrefslogtreecommitdiff
path: root/src/GF/Compile/CheckGrammar.hs
diff options
context:
space:
mode:
authoraarne <aarne@cs.chalmers.se>2006-01-07 14:39:40 +0000
committeraarne <aarne@cs.chalmers.se>2006-01-07 14:39:40 +0000
commitd133e0353ca614b36357dadb782aea43de895e09 (patch)
treea68ecef132a1b18a12899ef9b718ed411816528f /src/GF/Compile/CheckGrammar.hs
parent4e42d73ee508715e83c8f1a160b7bc696b78571b (diff)
regular expression patterns
Diffstat (limited to 'src/GF/Compile/CheckGrammar.hs')
-rw-r--r--src/GF/Compile/CheckGrammar.hs7
1 files changed, 7 insertions, 0 deletions
diff --git a/src/GF/Compile/CheckGrammar.hs b/src/GF/Compile/CheckGrammar.hs
index 33db87e37..c55873409 100644
--- a/src/GF/Compile/CheckGrammar.hs
+++ b/src/GF/Compile/CheckGrammar.hs
@@ -515,11 +515,17 @@ inferLType gr trm = case trm of
PSeq p q -> isConstPatt p && isConstPatt q
PAlt p q -> isConstPatt p && isConstPatt q
PRep p -> isConstPatt p
+ PNeg p -> isConstPatt p
PAs _ p -> isConstPatt p
_ -> False
inferPatt p = case p of
PP q c ps | q /= cPredef -> checkErr $ lookupResType gr q c >>= valTypeCnc
+ PAs _ p -> inferPatt p
+ PNeg p -> inferPatt p
+ PAlt p q -> checks [inferPatt p, inferPatt q]
+ PSeq _ _ -> return $ typeTok
+ PRep _ -> return $ typeTok
_ -> infer (patt2term p) >>= return . snd
checkLType :: SourceGrammar -> Term -> Type -> Check (Term, Type)
@@ -700,6 +706,7 @@ pattContext env typ p = case p of
g2 <- pattContext env typ q
return $ g1 ++ g2
PRep p -> pattContext env typeStr p
+ PNeg p -> pattContext env typeStr p
_ -> return [] ---- check types!
where