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)