Blame tests/gscan_typeclass.x

Packit 2cbdf3
{
Packit 2cbdf3
Packit 2cbdf3
module Main (main) where
Packit 2cbdf3
import System.Exit
Packit 2cbdf3
import Prelude hiding (lex)
Packit 2cbdf3
Packit 2cbdf3
}
Packit 2cbdf3
Packit 2cbdf3
%wrapper "gscan"
Packit 2cbdf3
%token "[Token s]"
Packit 2cbdf3
%typeclass "Read s"
Packit 2cbdf3
Packit 2cbdf3
tokens :-
Packit 2cbdf3
Packit 2cbdf3
[a-b]+$                     { idtoken 0 }
Packit 2cbdf3
[c-d]+/"."                  { idtoken 1 }
Packit 2cbdf3
[e-f]+/{ tokpred }          { idtoken 2 }
Packit 2cbdf3
^[g-h]+$                    { idtoken 3 }
Packit 2cbdf3
^[i-j]+/"."                 { idtoken 4 }
Packit 2cbdf3
^[k-l]+/{ tokpred }         { idtoken 5 }
Packit 2cbdf3
[m-n]+$                     { idtoken 6 }
Packit 2cbdf3
[o-p]+/"."                  { idtoken 7 }
Packit 2cbdf3
[q-r]+/{ tokpred }          { idtoken 8 }
Packit 2cbdf3
[0-1]^[s-t]+$               { idtoken 9 }
Packit 2cbdf3
[2-3]^[u-v]+/"."            { idtoken 10 }
Packit 2cbdf3
[4-5]^[w-x]+/{ tokpred }    { idtoken 11 }
Packit 2cbdf3
[y-z]+                      { idtoken 12 }
Packit 2cbdf3
[A-B]+$                     ;
Packit 2cbdf3
[C-D]+/"."                  ;
Packit 2cbdf3
[E-F]+/{ tokpred }          ;
Packit 2cbdf3
^[G-H]+$                    ;
Packit 2cbdf3
^[I-J]+/"."                 ;
Packit 2cbdf3
^[K-L]+/{ tokpred }         ;
Packit 2cbdf3
[M-N]+$                     ;
Packit 2cbdf3
[O-P]+/"."                  ;
Packit 2cbdf3
[Q-R]+/{ tokpred }          ;
Packit 2cbdf3
[0-1]^[S-T]+$               ;
Packit 2cbdf3
[2-3]^[U-V]+/"."            ;
Packit 2cbdf3
[4-5]^[W-X]+/{ tokpred }    ;
Packit 2cbdf3
[Y-Z]+                      ;
Packit 2cbdf3
\.                          ;
Packit 2cbdf3
[ \n\t\r]+                  ;
Packit 2cbdf3
[0-9]                       ;
Packit 2cbdf3
Packit 2cbdf3
{
Packit 2cbdf3
Packit 2cbdf3
tokpred :: () -> AlexInput -> Int -> AlexInput -> Bool
Packit 2cbdf3
tokpred _ _ _ _ = True
Packit 2cbdf3
Packit 2cbdf3
idtoken :: Read s => Int -> AlexPosn -> Char -> String -> Int ->
Packit 2cbdf3
                     ((Int,state) -> [Token s]) -> (Int,state) -> [Token s]
Packit 2cbdf3
idtoken n _ _ s len cont st = Id n (read ("\"" ++ take len s ++ "\"")) : cont st
Packit 2cbdf3
Packit 2cbdf3
data Token s = Id Int s deriving Eq
Packit 2cbdf3
Packit 2cbdf3
lex :: Read s => String -> [Token s]
Packit 2cbdf3
lex str = alexGScan (\_ _ _ _ -> []) (0 :: Int) str
Packit 2cbdf3
Packit 2cbdf3
input = "abab\ndddc.fff\ngh\nijji.\nllmnm\noop.rq0tsst\n3uuvu.5xxw"
Packit 2cbdf3
Packit 2cbdf3
tokens = [ Id 0 "abab", Id 1 "dddc", Id 2 "fff", Id 3 "gh", Id 4 "ijji",
Packit 2cbdf3
           Id 5 "ll", Id 6 "mnm", Id 7 "oop", Id 8 "rq", Id 9 "tsst",
Packit 2cbdf3
           Id 10 "uuvu", Id 11 "xxw"]
Packit 2cbdf3
Packit 2cbdf3
main :: IO ()
Packit 2cbdf3
main =
Packit 2cbdf3
  let
Packit 2cbdf3
    result :: [Token String]
Packit 2cbdf3
    result = lex input
Packit 2cbdf3
  in do
Packit 2cbdf3
    if result /= tokens
Packit 2cbdf3
      then exitFailure
Packit 2cbdf3
      else exitWith ExitSuccess
Packit 2cbdf3
Packit 2cbdf3
}