module Language.Lua.Token where
import Data.Data
import GHC.Generics (Generic)
data Token
= TkAnd
| TkBreak
| TkDo
| TkElse
| TkElseif
| TkEnd
| TkFalse
| TkFor
| TkFunction
| TkGoto
| TkIf
| TkIn
| TkLocal
| TkNil
| TkNot
| TkOr
| TkRepeat
| TkReturn
| TkThen
| TkTrue
| TkUntil
| TkWhile
| TkPlus
| TkDash
| TkMult
| TkFloatDiv
| TkModulo
| TkExponent
| TkLength
| TkBitwiseAnd
| TkTilde
| TkBitwiseOr
| TkLShift
| TkRShift
| TkFloorDiv
| TkEq
| TkNeq
| TkLeq
| TkGeq
| TkLt
| TkGt
| TkAssign
| TkLParen
| TkRParen
| TkLBrace
| TkRBrace
| TkLBracket
| TkRBracket
| TkLabel
| TkSemi
| TkColon
| TkComma
| TkDot
| TkConcat
| TkVararg
| TkQuote
| TkDoubleQuote
| TkIdent String
| TkStringLit String
| TkIntLit String
| TkFloatLit String
deriving (Data, Eq, Generic, Show, Typeable)
showToken :: Token -> String
showToken TkAnd = "and"
showToken TkBreak = "break"
showToken TkDo = "do"
showToken TkElse = "else"
showToken TkElseif = "elseif"
showToken TkEnd = "end"
showToken TkFalse = "false"
showToken TkFor = "for"
showToken TkFunction = "function"
showToken TkGoto = "goto"
showToken TkIf = "if"
showToken TkIn = "in"
showToken TkLocal = "local"
showToken TkNil = "nil"
showToken TkNot = "not"
showToken TkOr = "or"
showToken TkRepeat = "repeat"
showToken TkReturn = "return"
showToken TkThen = "then"
showToken TkTrue = "true"
showToken TkUntil = "until"
showToken TkWhile = "while"
showToken TkPlus = "+"
showToken TkDash = "-"
showToken TkMult = "*"
showToken TkFloatDiv = "/"
showToken TkModulo = "%"
showToken TkExponent = "^"
showToken TkLength = "#"
showToken TkBitwiseAnd = "&"
showToken TkTilde = "~"
showToken TkBitwiseOr = "|"
showToken TkLShift = "<<"
showToken TkRShift = ">>"
showToken TkFloorDiv = "//"
showToken TkEq = "=="
showToken TkNeq = "~="
showToken TkLeq = "<="
showToken TkGeq = ">="
showToken TkLt = "<"
showToken TkGt = ">"
showToken TkAssign = "="
showToken TkLParen = "("
showToken TkRParen = ")"
showToken TkLBrace = "{"
showToken TkRBrace = "}"
showToken TkLBracket = "["
showToken TkRBracket = "]"
showToken TkLabel = "::"
showToken TkSemi = ";"
showToken TkColon = ":"
showToken TkComma = ","
showToken TkDot = "."
showToken TkConcat = ".."
showToken TkVararg = "..."
showToken TkQuote = "'"
showToken TkDoubleQuote = "\""
showToken (TkIdent s) = s
showToken (TkStringLit s) = s
showToken (TkIntLit s) = s
showToken (TkFloatLit s) = s