regexSplit, ptrace (parsec trace) utilities
This commit is contained in:
parent
211327c758
commit
51a8adf273
@ -228,6 +228,9 @@ regexReplaceBy r replfn s = gsubRegexPRBy r replfn s
|
|||||||
regexToCaseInsensitive :: String -> String
|
regexToCaseInsensitive :: String -> String
|
||||||
regexToCaseInsensitive r = "(?i)"++ r
|
regexToCaseInsensitive r = "(?i)"++ r
|
||||||
|
|
||||||
|
regexSplit :: String -> String -> [String]
|
||||||
|
regexSplit = splitRegexPR
|
||||||
|
|
||||||
-- lists
|
-- lists
|
||||||
|
|
||||||
splitAtElement :: Eq a => a -> [a] -> [[a]]
|
splitAtElement :: Eq a => a -> [a] -> [[a]]
|
||||||
@ -340,6 +343,26 @@ mtrace a = strace a `seq` return a
|
|||||||
tracewith :: (a -> String) -> a -> a
|
tracewith :: (a -> String) -> a -> a
|
||||||
tracewith f e = trace (f e) e
|
tracewith f e = trace (f e) e
|
||||||
|
|
||||||
|
-- | Parsec trace - show the current parsec position and next input,
|
||||||
|
-- prefixed by the specified label if it's non-null.
|
||||||
|
ptrace :: String -> GenParser Char st ()
|
||||||
|
ptrace label = do
|
||||||
|
let label' = if null label then "" else label ++ ": "
|
||||||
|
pos <- getPosition
|
||||||
|
let (line,col) = (sourceLine pos, sourceColumn pos)
|
||||||
|
next <- take 20 `fmap` getInput
|
||||||
|
mtrace (printf "%-10sat line %2d col %2d looking at >>>%s<<<" label' line col next :: String)
|
||||||
|
return ()
|
||||||
|
|
||||||
|
ptrace' :: (Show a) => String -> GenParser a st ()
|
||||||
|
ptrace' label = do
|
||||||
|
let label' = if null label then "" else label ++ ": "
|
||||||
|
pos <- getPosition
|
||||||
|
let (line,col) = (sourceLine pos, sourceColumn pos)
|
||||||
|
next <- take 20 `fmap` getInput
|
||||||
|
mtrace (printf "%-10sat line %2d col %2d looking at %s" label' line col (show next) :: String)
|
||||||
|
return ()
|
||||||
|
|
||||||
-- parsing
|
-- parsing
|
||||||
|
|
||||||
-- | Backtracking choice, use this when alternatives share a prefix.
|
-- | Backtracking choice, use this when alternatives share a prefix.
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user