summaryrefslogtreecommitdiff
path: root/src/GF/Grammar
diff options
context:
space:
mode:
authoraarne <aarne@cs.chalmers.se>2008-01-04 15:54:40 +0000
committeraarne <aarne@cs.chalmers.se>2008-01-04 15:54:40 +0000
commitd5500498736ff9cdce7d23e336357742c5799825 (patch)
tree53d4fe137e04c79d521fc373d41f5c38eb1bb5e9 /src/GF/Grammar
parent934d4dbd7c922fdc30b0bd6225c0dc44fea16ddb (diff)
finalizing experiments with Finnish nouns
Diffstat (limited to 'src/GF/Grammar')
-rw-r--r--src/GF/Grammar/Grammar.hs1
-rw-r--r--src/GF/Grammar/Macros.hs3
-rw-r--r--src/GF/Grammar/PatternMatch.hs2
3 files changed, 6 insertions, 0 deletions
diff --git a/src/GF/Grammar/Grammar.hs b/src/GF/Grammar/Grammar.hs
index 58634c31c..85e515342 100644
--- a/src/GF/Grammar/Grammar.hs
+++ b/src/GF/Grammar/Grammar.hs
@@ -190,6 +190,7 @@ data Patt =
| PAlt Patt Patt -- ^ disjunctive pattern: p1 | p2
| PSeq Patt Patt -- ^ sequence of token parts: p + q
| PRep Patt -- ^ repetition of token part: p*
+ | PChar -- ^ string of length one
deriving (Read, Show, Eq, Ord)
diff --git a/src/GF/Grammar/Macros.hs b/src/GF/Grammar/Macros.hs
index 51f483a0a..8e3332b12 100644
--- a/src/GF/Grammar/Macros.hs
+++ b/src/GF/Grammar/Macros.hs
@@ -521,6 +521,8 @@ term2patt trm = case termForm trm of
Ok ([], Cn (IC "*"), [a]) -> do
a' <- term2patt a
return (PRep a')
+ Ok ([], Cn (IC "?"), []) -> do
+ return PChar
Ok ([], Cn (IC "+"), [a,b]) -> do
a' <- term2patt a
b' <- term2patt b
@@ -547,6 +549,7 @@ patt2term pt = case pt of
PString s -> K s
PAs x p -> appc "@" [Vr x, patt2term p] --- an encoding
+ PChar -> appc "?" [] --- an encoding
PSeq a b -> appc "+" [(patt2term a), (patt2term b)] --- an encoding
PAlt a b -> appc "|" [(patt2term a), (patt2term b)] --- an encoding
PRep a -> appc "*" [(patt2term a)] --- an encoding
diff --git a/src/GF/Grammar/PatternMatch.hs b/src/GF/Grammar/PatternMatch.hs
index 881f10198..4b69c3ffd 100644
--- a/src/GF/Grammar/PatternMatch.hs
+++ b/src/GF/Grammar/PatternMatch.hs
@@ -111,6 +111,8 @@ tryMatch (p,t) = do
matches <- checks [mapM tryMatch [(p1,K s1),(p2,K s2)] | (s1,s2) <- cuts]
return (concat matches)
+ (PChar, ([],K [_],[])) -> return []
+
(PRep p1, ([],K s, [])) -> checks [
trym (foldr (const (PSeq p1)) (PString "")
[1..n]) t' | n <- [0 .. length s]