less prototype, less bad code implementation of CCHM type theory
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

43 lines
1.2 KiB

  1. {
  2. module Presyntax.Lexer where
  3. import qualified Data.ByteString.Lazy as Lbs
  4. import qualified Data.Text.Encoding as T
  5. import Presyntax.Tokens
  6. }
  7. %wrapper "monad-bytestring"
  8. $alpha = [a-zA-Z]
  9. $digit = [0-9]
  10. tokens :-
  11. $white+ ;
  12. $alpha [$alpha $digit \_ \']* { yield TokVar }
  13. \= { always TokEqual }
  14. \: { always TokColon }
  15. \, { always TokComma }
  16. \* { always TokStar }
  17. ".1" { always TokPi1 }
  18. ".2" { always TokPi2 }
  19. \\ { always TokLambda }
  20. "->" { always TokArrow }
  21. \( { always TokOParen }
  22. \{ { always TokOBrace }
  23. \) { always TokCParen }
  24. \} { always TokCBrace }
  25. {
  26. alexEOF :: Alex Token
  27. alexEOF = do
  28. (AlexPn _ l c, _, _, _) <- alexGetInput
  29. pure $ Token TokEof l c
  30. yield k (AlexPn _ l c, _, s, _) i = pure (Token (k $! (T.decodeUtf8 (Lbs.toStrict (Lbs.take i s)))) l c)
  31. always k x i = yield (const k) x i
  32. }