packages feed

setdown-0.1.3.0: src/SetLanguage.x

{
{-# OPTIONS_GHC -w #-}
module SetLanguage where

import qualified Data.ByteString.Lazy    as ByteString
import qualified Data.Text.Lazy          as TL
import qualified Data.Text.Lazy.Encoding as TLE
}

%wrapper "posn-bytestring"

$digit = [0-9]
$nonFilename = [^\\\/\?\%\*\:\|\<\>\ ]
$ident = [a-zA-Z0-9\-\_]

tokens :-

   $white+           ;
   "--".*            ;
   "("               { tok LParenTok }
   ")"               { tok RParenTok }
   "/\"              { tok IntersectionTok }
   "\/"              { tok UnionTok }
   "∪"               { tok UnionTok }
   "∩"               { tok IntersectionTok }
   "-"               { tok DifferenceTok }
   "><"              { tok SymmetricDifferenceTok }
   "△"               { tok SymmetricDifferenceTok }
   \"[^\"]+\"        { \pos bs -> LocatedToken pos (FilenameTok . TL.unpack . TL.init . TL.tail . TLE.decodeUtf8 $ bs) }
   $ident+$white*":" { \pos bs -> LocatedToken pos (IdentifierDefinitionTok . TL.strip . TL.init . TLE.decodeUtf8 $ bs) }
   $ident+           { \pos bs -> LocatedToken pos (IdentifierTok . TLE.decodeUtf8 $ bs) }

{
data SetToken
   = FilenameTok FilePath
   | IdentifierDefinitionTok TL.Text
   | IdentifierTok TL.Text
   | IntersectionTok
   | UnionTok
   | DifferenceTok
   | LParenTok
   | RParenTok
   | SymmetricDifferenceTok
   deriving(Show, Eq)

prettyToken :: SetToken -> String
prettyToken (FilenameTok fp)               = "\"" ++ fp ++ "\""
prettyToken (IdentifierDefinitionTok name) = TL.unpack name ++ ":"
prettyToken (IdentifierTok name)           = TL.unpack name
prettyToken IntersectionTok                = "/\\"
prettyToken UnionTok                       = "\\/"
prettyToken DifferenceTok                  = "-"
prettyToken SymmetricDifferenceTok         = "><"
prettyToken LParenTok                      = "("
prettyToken RParenTok                      = ")"

data LocatedToken = LocatedToken AlexPosn SetToken deriving (Show, Eq)

tok :: SetToken -> AlexPosn -> ByteString.ByteString -> LocatedToken
tok t pos _ = LocatedToken pos t
}