summaryrefslogtreecommitdiff
path: root/src/GF/Compile
diff options
context:
space:
mode:
authoraarne <aarne@cs.chalmers.se>2006-01-07 12:26:11 +0000
committeraarne <aarne@cs.chalmers.se>2006-01-07 12:26:11 +0000
commit4e42d73ee508715e83c8f1a160b7bc696b78571b (patch)
treeb5d4f72f694bb4c73075a6f9402444eb8085ae96 /src/GF/Compile
parenta641bf4004cc248a33904fa0ac8c11ce2460ea5e (diff)
regex patterns for tokens
Diffstat (limited to 'src/GF/Compile')
-rw-r--r--src/GF/Compile/CheckGrammar.hs22
-rw-r--r--src/GF/Compile/Rename.hs18
2 files changed, 38 insertions, 2 deletions
diff --git a/src/GF/Compile/CheckGrammar.hs b/src/GF/Compile/CheckGrammar.hs
index 3b3e9eaa6..33db87e37 100644
--- a/src/GF/Compile/CheckGrammar.hs
+++ b/src/GF/Compile/CheckGrammar.hs
@@ -512,6 +512,10 @@ inferLType gr trm = case trm of
PString _ -> True
PInt _ -> True
PFloat _ -> True
+ PSeq p q -> isConstPatt p && isConstPatt q
+ PAlt p q -> isConstPatt p && isConstPatt q
+ PRep p -> isConstPatt p
+ PAs _ p -> isConstPatt p
_ -> False
inferPatt p = case p of
@@ -664,7 +668,7 @@ checkLType env trm typ0 = do
pattContext :: LTEnv -> Type -> Patt -> Check Context
pattContext env typ p = case p of
PV x -> return [(x,typ)]
- PP q c ps | q /= cPredef || prt c == "CC" -> do ---- why this /=? AR 6/1/2006
+ PP q c ps | q /= cPredef -> do ---- why this /=? AR 6/1/2006
t <- checkErr $ lookupResType cnc q c
(cont,v) <- checkErr $ typeFormCnc t
checkCond ("wrong number of arguments for constructor in" +++ prt p)
@@ -683,7 +687,21 @@ pattContext env typ p = case p of
checkEqLType env typ t (patt2term p')
pattContext env typ p'
- _ -> return [] ----
+ PAs x p -> do
+ g <- pattContext env typ p
+ return $ (x,typ):g
+
+ PAlt p q -> do
+ g1 <- pattContext env typ p
+ g2 <- pattContext env typ q
+ return $ filter (flip elem g1) g2 -- must be in both
+ PSeq p q -> do
+ g1 <- pattContext env typ p
+ g2 <- pattContext env typ q
+ return $ g1 ++ g2
+ PRep p -> pattContext env typeStr p
+
+ _ -> return [] ---- check types!
where
cnc = env
diff --git a/src/GF/Compile/Rename.hs b/src/GF/Compile/Rename.hs
index c3369e9ef..61f26b89e 100644
--- a/src/GF/Compile/Rename.hs
+++ b/src/GF/Compile/Rename.hs
@@ -241,6 +241,24 @@ renamePattern env patt = case patt of
let (ps',vs') = unzip psvss
return (PR (zip ls ps'), concat vs')
+ PAlt p q -> do
+ (p',vs) <- renp p
+ (q',ws) <- renp q
+ return (PAlt p' q', vs ++ ws)
+
+ PSeq p q -> do
+ (p',vs) <- renp p
+ (q',ws) <- renp q
+ return (PSeq p' q', vs ++ ws)
+
+ PRep p -> do
+ (p',vs) <- renp p
+ return (PRep p', vs)
+
+ PAs x p -> do
+ (p',vs) <- renp p
+ return (PAs x p', x:vs)
+
_ -> return (patt,[])
where