summaryrefslogtreecommitdiff
path: root/src/GF/Grammar/PatternMatch.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/Grammar/PatternMatch.hs
parent4e42d73ee508715e83c8f1a160b7bc696b78571b (diff)
regular expression patterns
Diffstat (limited to 'src/GF/Grammar/PatternMatch.hs')
-rw-r--r--src/GF/Grammar/PatternMatch.hs4
1 files changed, 4 insertions, 0 deletions
diff --git a/src/GF/Grammar/PatternMatch.hs b/src/GF/Grammar/PatternMatch.hs
index 4e3feb5dc..f850981f0 100644
--- a/src/GF/Grammar/PatternMatch.hs
+++ b/src/GF/Grammar/PatternMatch.hs
@@ -95,6 +95,10 @@ tryMatch (p,t) = do
(PAlt p1 p2,_) -> checks [trym p1 t', trym p2 t']
+ (PNeg p',_) -> case tryMatch (p',t) of
+ Bad _ -> return []
+ _ -> prtBad "no match with negative pattern" p
+
(PSeq p1 p2, ([],K s, [])) -> do
let cuts = [splitAt n s | n <- [0 .. length s]]
matches <- checks [mapM tryMatch [(p1,K s1),(p2,K s2)] | (s1,s2) <- cuts]