summaryrefslogtreecommitdiff
path: root/src/GF/Compile
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
parent4e42d73ee508715e83c8f1a160b7bc696b78571b (diff)
regular expression patterns
Diffstat (limited to 'src/GF/Compile')
-rw-r--r--src/GF/Compile/CheckGrammar.hs7
-rw-r--r--src/GF/Compile/Rename.hs4
2 files changed, 11 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
diff --git a/src/GF/Compile/Rename.hs b/src/GF/Compile/Rename.hs
index 61f26b89e..ecabf03b1 100644
--- a/src/GF/Compile/Rename.hs
+++ b/src/GF/Compile/Rename.hs
@@ -255,6 +255,10 @@ renamePattern env patt = case patt of
(p',vs) <- renp p
return (PRep p', vs)
+ PNeg p -> do
+ (p',vs) <- renp p
+ return (PNeg p', vs)
+
PAs x p -> do
(p',vs) <- renp p
return (PAs x p', x:vs)