%{ import System import Char import Alex %} "pp_lx"/"pp_acts":- { ^s = ^w#^n } -- spaces and tabs, etc. { ^f = [A-Za-z0-9`~%-_.,/'] } -- file name character ::= ^#include^s+^"^f+^"^s*^n ::= .*^n %{ inc p c inp len cont st = pp fn >> cont st where fn = (takeWhile ('"'/=) . tail . dropWhile isSpace . drop 8) inp txt p c inp len cont st = putStr (take len inp) >> cont st main:: IO () main = getArgs >>= \args -> case args of [fn] -> pp fn _ -> error "usage: pp file\n" pp:: String -> IO () pp fn = readFile fn >>= \cts -> gscan pp_scan () cts pp_scan:: GScan () (IO ()) pp_scan = load_gscan (pp_acts,stop_act) pp_lx where stop_act _ _ _ _ = return () %}