{
module Main (main) where
}
%wrapper "gscan"
state :-
$white+ { skip }
\{ [^\}]* \} { code }
[A-Za-z]+ { ide }
{
code _ _ inp len cont (sc,frags) = cont (sc,frag:frags)
where
frag = take (len-4) (drop 2 inp)
ide _ _ inp len cont st = Ide (take len inp):cont st
skip _ _ inp len cont st = cont st
data Token = Ide String | Eof String | Err deriving Show
stop_act _ _ "" (_,frags) = [Eof (unlines(reverse frags))]
stop_act _ _ _ _ = [Err]
tokens:: String -> [Token]
tokens inp = alexGScan stop_act [] inp
main:: IO ()
main = interact (show.tokens)
}