packages feed

flp-0.1.0.0: src/Language/Floorplan/Token.x

{
{-# OPTIONS_GHC -w #-}
module Language.Floorplan.Token (Token(..), scanTokens) where
import Language.Floorplan.Syntax
}

%wrapper "basic"

$digit = 0-9
$alpha = [a-zA-Z]
$eol   = [\n]

tokens :-
  $eol      ;
  $white+   ;
  "//".*    ;
  seq       { \s -> TokenSeq }
  union     { \s -> TokenUnion }
  contains  { \s -> TokenContains }
  bits      { \s -> TokenBits }
  bytes     { \s -> TokenBytes }
  words     { \s -> TokenWords }
  pages     { \s -> TokenPages }
  ptr       { \s -> TokenPtr }
  enum      { \s -> TokenEnum }
  "->"      { \s -> TokenArrow }
  "@("      { \s -> TokenAtParen }
  ")@"      { \s -> TokenParenAt }
  "@|"      { \s -> TokenAtBar }
  "|@"      { \s -> TokenBarAt }
  "<$"      { \s -> TokenLessD }
  "$>"      { \s -> TokenGreaterD }
  \(        { \s -> TokenLParen }
  \)        { \s -> TokenRParen }
  \<        { \s -> TokenLess }
  \>        { \s -> TokenGreater }
  \|        { \s -> TokenBar }
  \|\|      { \s -> TokenBarBar }
  \{        { \s -> TokenLCurl }
  \}        { \s -> TokenRCurl }
  \#        { \s -> TokenPound }
  \:        { \s -> TokenColon }
  \,        { \s -> TokenComma }
  [\+]      { \s -> TokenPlus }
  [\-]      { \s -> TokenMinus }
  [\*]      { \s -> TokenTimes }
  [\/]      { \s -> TokenDiv }
  [\^]      { \s -> TokenExponent }
  $digit+   { \s -> TokenNum (read s) }
  0b [01]+  { \s -> TokenNum (bin2int s) }
  [a-z] [$alpha $digit \_]* { \s -> TokenLowerID s }
  [A-Z] [$alpha $digit \_]* { \s -> TokenUpperID s}

{
data Token =
    TokenSeq
  | TokenUnion
  | TokenContains
  | TokenBits
  | TokenBytes
  | TokenWords
  | TokenPages
  | TokenPtr
  | TokenEnum
  | TokenArrow
  | TokenAtParen
  | TokenParenAt
  | TokenAtBar
  | TokenBarAt
  | TokenLParen
  | TokenRParen
  | TokenLess
  | TokenGreater
  | TokenLessD
  | TokenGreaterD
  | TokenBar
  | TokenBarBar
  | TokenLCurl
  | TokenRCurl
  | TokenPound
  | TokenColon
  | TokenComma
  | TokenPlus
  | TokenMinus
  | TokenTimes
  | TokenDiv
  | TokenExponent
  | TokenNum Int
  | TokenUpperID String
  | TokenLowerID String
  deriving (Eq, Ord, Show)

scanTokens = alexScanTokens
}