Changeset 3210
- Timestamp:
- 05/14/05 12:35:26 (4 years ago)
- svk:copy_cache_prev:
- 4718
- Location:
- src/Pugs
- Files:
-
- 4 modified
Legend:
- Unmodified
- Added
- Removed
-
src/Pugs/Eval.hs
r3195 r3210 536 536 flag_g <- fromAdverb hv ["g", "global"] 537 537 flag_i <- fromAdverb hv ["i", "ignorecase"] 538 let rx | p5 = (`MkRulePCRE` g) . mkRegexWithPCRE (encodeUTF8 str) $ 538 flag_s <- fromAdverb hv ["stringify"] -- XXX hack 539 let rx | p5 = MkRulePCRE p5re g flag_s 540 | otherwise = MkRulePGE str g flag_s 541 g = ('g' `elem` p5flags || flag_g) 542 p5re = mkRegexWithPCRE (encodeUTF8 str) $ 539 543 [ pcreUtf8 540 544 , ('i' `elem` p5flags || flag_i) `implies` pcreCaseless … … 543 547 , ('x' `elem` p5flags) `implies` pcreExtended 544 548 ] 545 | otherwise = MkRulePGE str g546 g = ('g' `elem` p5flags || flag_g)547 549 retVal $ VRule rx 548 550 where … … 808 810 val <- evalExp exp 809 811 evalValType val 810 evalExpType exp = 811 let exp' = unwrap exp in 812 if exp == exp' 813 then return $ mkType "Any" 814 else evalExpType exp' 812 evalExpType (Cxt cxt _) = return $ typeOfCxt cxt 813 evalExpType (Pos _ exp) = evalExpType exp 814 evalExpType (Pad _ _ exp) = evalExpType exp 815 evalExpType (Sym _ _ exp) = evalExpType exp 816 evalExpType (Stmts _ exp) = evalExpType exp 817 evalExpType _ = return $ mkType "Any" 815 818 816 819 -- OK... Now let's implement the hideously clever autothreading algorithm. -
src/Pugs/Parser.hs
r3209 r3210 1403 1403 doSplit (Cxt (CxtItem _) (Val (VStr str))) = doSplitStr str 1404 1404 1405 doSplit expr = Cxt cxtSlurpyAny $App (Var "&infix:~~") [expr, rxSplit] []1405 doSplit expr = App (Var "&infix:~~") [expr, rxSplit] [] 1406 1406 rxSplit = Syn "rx" $ 1407 1407 [ Val $ VStr "(\\S+)" … … 1409 1409 [ castV (VStr "P5", VInt 1) 1410 1410 , castV (VStr "g", VInt 1) 1411 , castV (VStr "stringify", VInt 1) 1411 1412 ] 1412 1413 ] -
src/Pugs/Prim/Match.hs
r3119 r3210 120 120 str <- fromVal x 121 121 rv <- matchOnce str 122 ifListContext 123 (return $ VList rv) 124 (return . VInt $ genericLength rv) 122 cxt <- asks envContext 123 if (not $ isSlurpyCxt cxt) 124 then return (VInt $ genericLength rv) 125 else return . VList $ if rxStringify rx 126 then map (VStr . vCast) rv 127 else rv 125 128 where 126 129 matchOnce :: String -> Eval [Val] -
src/Pugs/Types.hs
r2956 r3210 128 128 { rxRegex :: !Regex -- ^ The \'regular\' expression 129 129 , rxGlobal :: !Bool -- ^ Flag indicating \'global\' (match-all) 130 , rxStringify :: !Bool 130 131 } 131 132 | MkRulePGE 132 133 { rxRule :: !String -- ^ The \'rule\' expression 133 134 , rxGlobal :: !Bool -- ^ Flag indicating \'global\' (match-all) 135 , rxStringify :: !Bool 134 136 } 135 137 deriving (Show, Eq, Ord, Typeable)
