Changeset 2940
- Timestamp:
- 05/10/05 20:45:26 (4 years ago)
- svk:copy_cache_prev:
- 4498
- Location:
- src/Pugs
- Files:
-
- 2 modified
Legend:
- Unmodified
- Added
- Removed
-
src/Pugs/Eval.hs
r2895 r2940 541 541 Just v -> fromVal v 542 542 Nothing -> fromAdverb hv ks 543 "//" -> reduce (Syn "rx" exps) 544 "match" -> reduce (Syn "rx" exps) -- XXX - this is wrong 543 545 "subst" -> do 544 546 let [exp, subst, adverbs] = exps -
src/Pugs/Parser.hs
r2931 r2940 126 126 mergeStmts (Sym scope name x) y = Sym scope name (mergeStmts x y) 127 127 mergeStmts (Pad scope lex x) y = Pad scope lex (mergeStmts x y) 128 mergeStmts x@(Pos pos (Syn "rx" _)) y=128 mergeStmts x@(Pos pos (Syn syn _)) y | (syn ==) `any` words "subst match //" = 129 129 mergeStmts (Pos pos (App (Var "&infix:~~") [Var "$_", x] [])) y 130 mergeStmts x y@(Pos pos (Syn "rx" _)) = 131 mergeStmts x (Pos pos (App (Var "&infix:~~") [Var "$_", y] [])) 132 mergeStmts x@(Pos pos (Syn "subst" _)) y = 133 mergeStmts (Pos pos (App (Var "&infix:~~") [Var "$_", x] [])) y 134 mergeStmts x y@(Pos pos (Syn "subst" _)) = 130 mergeStmts x y@(Pos pos (Syn syn _)) | (syn ==) `any` words "subst match //" = 135 131 mergeStmts x (Pos pos (App (Var "&infix:~~") [Var "$_", y] [])) 136 132 mergeStmts x@(Pos pos (Syn "sub" [Val (VCode sub)])) y … … 1467 1463 1468 1464 -- Regexps 1465 rxLiteralAny adverbs 1466 | Syn "\\{}" [Syn "," pairs] <- adverbs 1467 , not (null [ True | (App (Var "&infix:=>") [Val (VStr "P5"), _] []) <- pairs ]) 1468 = rxLiteral5 1469 | otherwise 1470 = rxLiteral6 1471 1469 1472 rxLiteral5 :: Char -- ^ Closing delimiter 1470 1473 -> RuleParser Exp … … 1489 1492 let endch = balancedDelim ch 1490 1493 -- XXX - probe for adverbs to determine p5 vs p6 1491 expr <- rxLiteral 5endch1494 expr <- rxLiteralAny adverbs endch 1492 1495 ch <- if ch == endch then return ch else do { whiteSpace ; anyChar } 1493 1496 let endch = balancedDelim ch … … 1497 1500 rxLiteral :: RuleParser Exp 1498 1501 rxLiteral = try $ do 1499 symbol "rx" 1502 sym <- symbol "rx" <|> do { symbol "m"; return "match" } <|> do 1503 symbol "rule" 1504 lookAhead (char '{') 1505 return "rx" 1500 1506 adverbs <- ruleAdverbHash 1501 1507 ch <- anyChar 1502 1508 -- XXX - probe for adverbs to determine p5 vs p6 1503 expr <- rxLiteral 5$ balancedDelim ch1504 return $ Syn "rx"[expr, adverbs]1509 expr <- rxLiteralAny adverbs $ balancedDelim ch 1510 return $ Syn sym [expr, adverbs] 1505 1511 1506 1512 rxLiteralBare :: RuleParser Exp … … 1508 1514 ch <- char '/' 1509 1515 expr <- rxLiteral6 $ balancedDelim ch 1510 return $ Syn " rx" [expr, Val undef]1516 return $ Syn "//" [expr, Val undef] 1511 1517 1512 1518 namedLiteral :: String -> Val -> RuleParser Exp
