sasha-0: tests/Sasha/Example/Sasha.hs
module Sasha.Example.Sasha (sashaToken, sashaUtf8) where
import Algebra.Lattice ((/\))
import qualified Data.ByteString as BS
import Sasha.Example.Token
import Sasha
-- | Lexer specification of JSON(like) tokens.
grammar :: Sasha Tk
grammar =
[ TkSpace := plus (unions (map utf8Char (" \t\r\n")))
, TkBraceOpen := "{"
, TkBraceClose := "}"
, TkBracketOpen := "["
, TkBracketClose := "]"
, TkComma := ","
, TkColon := ":"
, TkString := appends [ "\"", star (anyChar /\ complement (utf8Char '"')), "\"" ]
, TkNumber := plus digit
, TkTrue := "true"
, TkFalse := "false"
, TkNull := "null"
]
sashaToken :: BS.ByteString -> Maybe (Tk, BS.ByteString, BS.ByteString)
sashaToken = sasha grammar
sashaUtf8 :: BS.ByteString -> Maybe ((), BS.ByteString, BS.ByteString)
sashaUtf8 = sasha [ () := anyUtf8Char ]