|
|
- {
- module Presyntax.Lexer where
-
- import qualified Data.ByteString.Lazy as Lbs
- import qualified Data.Text.Encoding as T
- import qualified Data.ByteString as Sbs
-
- import Presyntax.Tokens
- }
-
- %wrapper "monad-bytestring"
-
- $alpha = [a-zA-Z]
- $digit = [0-9]
-
- tokens :-
- $white+ ;
- $alpha [$alpha $digit \_ \']* { yield TokVar }
-
- \= { always TokEqual }
- \: { always TokColon }
-
- \\ { always TokLambda }
- "->" { always TokArrow }
-
- \( { always TokOParen }
- \{ { always TokOBrace }
-
- \) { always TokCParen }
- \} { always TokCBrace }
-
- {
- alexEOF :: Alex Token
- alexEOF = do
- (AlexPn _ l c, _, _, _) <- alexGetInput
- pure $ Token TokEof l c
-
- yield k t@(AlexPn _ l c, _, s, _) i = pure (Token (k $! (T.decodeUtf8 (Lbs.toStrict (Lbs.take i s)))) l c)
- always k x i = yield (const k) x i
- }
|