language-lua-0.1.1: src/Language/Lua/Token.hs
module Language.Lua.Token (LToken(..), tokenValue) where
-- ^Lua tokens
data LToken = LTokPlus -- ^+
| LTokMinus -- ^\-
| LTokStar -- ^\*
| LTokSlash -- ^/
| LTokPercent -- ^%
| LTokExp -- ^^
| LTokSh -- ^#
| LTokEqual -- ^==
| LTokNotequal -- ^~=
| LTokLEq -- ^<=
| LTokGEq -- ^\>=
| LTokLT -- ^<
| LTokGT -- ^\>
| LTokAssign -- ^=
| LTokLParen -- ^(
| LTokRParen -- ^)
| LTokLBrace -- ^{
| LTokRBrace -- ^}
| LTokLBracket -- ^\[
| LTokRBracket -- ^]
| LTokDColon -- ^::
| LTokSemic -- ^;
| LTokColon -- ^:
| LTokComma -- ^,
| LTokDot -- ^.
| LTokDDot -- ^..
| LTokEllipsis -- ^...
| LTokAnd -- ^and
| LTokBreak -- ^break
| LTokDo -- ^do
| LTokElse -- ^else
| LTokElseIf -- ^elseif
| LTokEnd -- ^end
| LTokFalse -- ^false
| LTokFor -- ^for
| LTokFunction -- ^function
| LTokGoto -- ^goto
| LTokIf -- ^if
| LTokIn -- ^in
| LTokLocal -- ^local
| LTokNil -- ^nil
| LTokNot -- ^not
| LTokOr -- ^or
| LTokRepeat -- ^repeat
| LTokReturn -- ^return
| LTokThen -- ^then
| LTokTrue -- ^true
| LTokUntil -- ^until
| LTokWhile -- ^while
| LTokNum String -- ^number constant
| LTokSLit String -- ^string constant
| LTokIdent String -- ^identifier
| LTokEof -- ^end of file
deriving Eq
instance Show LToken where
show LTokPlus = "`+`"
show LTokMinus = "`-`"
show LTokStar = "`*`"
show LTokSlash = "`/`"
show LTokPercent = "`%`"
show LTokExp = "`^`"
show LTokSh = "`#`"
show LTokEqual = "`=`"
show LTokNotequal = "`~=`"
show LTokLEq = "`<=`"
show LTokGEq = "`>=`"
show LTokLT = "`<`"
show LTokGT = "`>`"
show LTokAssign = "`=`"
show LTokLParen = "`(`"
show LTokRParen = "`)`"
show LTokLBrace = "`{`"
show LTokRBrace = "`}`"
show LTokLBracket = "`[`"
show LTokRBracket = "`]`"
show LTokDColon = "`::`"
show LTokSemic = "`;`"
show LTokColon = "`:`"
show LTokComma = "`,`"
show LTokDot = "`.`"
show LTokDDot = "`..`"
show LTokEllipsis = "`...`"
show LTokAnd = "`and`"
show LTokBreak = "`break`"
show LTokDo = "`do`"
show LTokElse = "`else`"
show LTokElseIf = "`elseif`"
show LTokEnd = "`end`"
show LTokFalse = "`false`"
show LTokFor = "`for`"
show LTokFunction = "`function`"
show LTokGoto = "`goto`"
show LTokIf = "`if`"
show LTokIn = "`in`"
show LTokLocal = "`local`"
show LTokNil = "`nil`"
show LTokNot = "`not`"
show LTokOr = "`or`"
show LTokRepeat = "`repeat`"
show LTokReturn = "`return`"
show LTokThen = "`then`"
show LTokTrue = "`true`"
show LTokUntil = "`until`"
show LTokWhile = "`while`"
show (LTokNum n) = "number: " ++ show n
show (LTokSLit s) = "string: " ++ show s
show (LTokIdent i) = "identifier: " ++ show i
show LTokEof = "EOF"
-- | Partial function, returns value of `LTokNum`, `LTokSLit` and `LTokIdent`.
tokenValue :: LToken -> String
tokenValue (LTokNum n) = n
tokenValue (LTokSLit s) = s
tokenValue (LTokIdent i) = i
tokenValue tok = error ("trying to get value of " ++ show tok)