ruler-0.4.0.0: src/Scanner.chs
%%[1 hs module (Scanner)
%%]
%%[1 hs export (module ScannerMachine)
%%]
%%[1 hs export (module UU.Scanner.Token)
%%]
%%[1 hs export (module UU.Scanner.TokenParser)
%%]
%%[1 hs export (module UU.Scanner.Position)
%%]
%%[1 hs export (SPos, emptySPos)
%%]
%%[1 hs export (scanFile, scanHandle)
%%]
%%[1 hs export (offsideScanHandle)
%%]
%%[1 hs import (System.IO)
%%]
%%[1 hs import (ScannerMachine)
%%]
%%[1 hs import (UU.Scanner.Token)
%%]
%%[1 hs import (UU.Scanner.TokenParser)
%%]
%%[1 hs import (UU.Scanner.Position)
%%]
%%[1 hs import (UHC.Util.ScanUtils)
%%]
%%[1 hs import (UU.Parsing.Offside)
%%]
-- instances
%%[1 hs import (UU.Scanner.TokenShow())
%%]
%%[1 hs import (UU.Scanner.GenTokenOrd())
%%]
%%[1 hs import (UU.Scanner.GenTokenSymbol())
%%]
%%[1 hs
-------------------------------------------------------------------------
-- Symbol position
-------------------------------------------------------------------------
type SPos = (String,Pos)
emptySPos = ("",noPos)
-------------------------------------------------------------------------
-- Wrappers around scan
-------------------------------------------------------------------------
scanHandle :: ScanOpts -> FilePath -> Handle -> IO [Token]
scanHandle opts fn fh
= do { txt <- hGetContents fh
; return (scan opts (initPos fn) txt)
}
scanFile :: ScanOpts -> FilePath -> IO [Token]
scanFile opts fn =
do txt <- readFile fn
return (scan opts (initPos fn) txt)
offsideScanHandle :: ScanOpts -> FilePath -> Handle -> IO (OffsideInput [Token] Token (Maybe Token))
offsideScanHandle opts fn fh
= do { tokens <- scanHandle opts fn fh
; return (scanOffside moduleT oBrace cBrace triggers tokens)
}
where moduleT = reserved (scoOffsideModule opts) noPos
oBrace = reserved (scoOffsideOpen opts) noPos
cBrace = reserved (scoOffsideClose opts) noPos
triggers = [ reserved x noPos | x <- scoOffsideTrigs opts ]
%%]