From 4e42d73ee508715e83c8f1a160b7bc696b78571b Mon Sep 17 00:00:00 2001 From: aarne Date: Sat, 7 Jan 2006 12:26:11 +0000 Subject: regex patterns for tokens --- src/GF/Grammar/Macros.hs | 26 +++++++++++++++++++++++++- 1 file changed, 25 insertions(+), 1 deletion(-) (limited to 'src/GF/Grammar/Macros.hs') diff --git a/src/GF/Grammar/Macros.hs b/src/GF/Grammar/Macros.hs index dc4f790fd..bc394b143 100644 --- a/src/GF/Grammar/Macros.hs +++ b/src/GF/Grammar/Macros.hs @@ -504,6 +504,24 @@ term2patt trm = case termForm trm of Ok ([],EInt i,[]) -> return $ PInt i Ok ([],EFloat i,[]) -> return $ PFloat i Ok ([],K s, []) -> return $ PString s + +--- encodings due to excessive use of term-patt convs. AR 7/1/2005 + Ok ([], Cn (IC "@"), [Vr a,b]) -> do + b' <- term2patt b + return (PAs a b') + Ok ([], Cn (IC "*"), [a]) -> do + a' <- term2patt a + return (PRep a') + Ok ([], Cn (IC "+"), [a,b]) -> do + a' <- term2patt a + b' <- term2patt b + return (PSeq a' b') + Ok ([], Cn (IC "|"), [a,b]) -> do + a' <- term2patt a + b' <- term2patt b + return (PAlt a' b') + + _ -> prtBad "no pattern corresponds to term" trm patt2term :: Patt -> Term @@ -513,11 +531,17 @@ patt2term pt = case pt of PC c pp -> mkApp (Con c) (map patt2term pp) PP p c pp -> mkApp (QC p c) (map patt2term pp) PR r -> R [assign l (patt2term p) | (l,p) <- r] - PT _ p -> patt2term p + PT _ p -> patt2term p PInt i -> EInt i PFloat i -> EFloat i PString s -> K s + PAs x p -> appc "@" [Vr x, patt2term p] --- 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 + + redirectTerm :: Ident -> Term -> Term redirectTerm n t = case t of QC _ f -> QC n f -- cgit v1.2.3