Blame tests/tokens.x

Packit 2cbdf3
{
Packit 2cbdf3
module Main (main) where
Packit 2cbdf3
import System.Exit
Packit 2cbdf3
}
Packit 2cbdf3
Packit 2cbdf3
%wrapper "basic"
Packit 2cbdf3
Packit 2cbdf3
$digit=0-9                      -- digits
Packit 2cbdf3
$alpha = [a-zA-Z]               -- alphabetic characters
Packit 2cbdf3
Packit 2cbdf3
tokens :-
Packit 2cbdf3
Packit 2cbdf3
  $white+				;
Packit 2cbdf3
  "--".*				;
Packit 2cbdf3
  let					{ \_ -> Let }
Packit 2cbdf3
  in					{ \_ -> In }
Packit 2cbdf3
  $digit+				{ \s -> Int (read s) }
Packit 2cbdf3
  [\=\+\-\*\/\(\)]			{ \s -> Sym (head s) }
Packit 2cbdf3
  $alpha [$alpha $digit \_ \']*		{ \s -> Var s }
Packit 2cbdf3
Packit 2cbdf3
  -- a left-context pattern for testing
Packit 2cbdf3
  ^ \#                                  ;
Packit 2cbdf3
Packit 2cbdf3
{
Packit 2cbdf3
-- Each right-hand side has type :: String -> Token
Packit 2cbdf3
Packit 2cbdf3
-- The token type:
Packit 2cbdf3
data Token =
Packit 2cbdf3
	Let 		|
Packit 2cbdf3
	In  		|
Packit 2cbdf3
	Sym Char	|
Packit 2cbdf3
	Var String	|
Packit 2cbdf3
	Int Int		|
Packit 2cbdf3
	Err
Packit 2cbdf3
	deriving (Eq,Show)
Packit 2cbdf3
Packit 2cbdf3
main = if test1 /= result1 then exitFailure
Packit 2cbdf3
			   else exitWith ExitSuccess
Packit 2cbdf3
Packit 2cbdf3
test1 = alexScanTokens "  let in 012334\n=+*foo bar__'"
Packit 2cbdf3
result1 = identifierWithLotsOfQuotes''
Packit 2cbdf3
Packit 2cbdf3
identifierWithLotsOfQuotes'' :: [Token]
Packit 2cbdf3
identifierWithLotsOfQuotes'' =
Packit 2cbdf3
  [Let,In,Int 12334,Sym '=',Sym '+',Sym '*',Var "foo",Var "bar__'"]
Packit 2cbdf3
Packit 2cbdf3
}