rendered paste body-- Simple lexer for MiniBasic
-- 2009 N.T.U.A.
{
import Yi.Lexer.Alex
import Yi.Style
}
$D = [0-9]
$L = [a-z]
$W = [ \t\r]
$normal = [=\(\)\+\-\*\<\>]
@reserved = print | let | for | do | begin | end | if | then
@ops = "+" | "-" | "/" | "*" | "."
haskell :-
<0> {
$W+ ;
$D+ { cs $ Number }
@ops { cs $ (Op . OpToOp) }
@reserved { cs $ (Res . resToRes) }
$L { cs $ Identifier }
$W+ ;
}
{
type TT = Tok Token
data Reserved = Print' | Let' | For' | Do' | Begin' | End' | If' | 'Then'
deriving (Show, Eq)
data Operator = Add' | Subtract' | Multiply' | Divide' | Dot'
deriving (Show, Eq)
data Token = Res !Reserved
| Op !Operator
| Num !Number
| Id !Identifier
deriving (Show, Eq)
stateToInit x = 0
initState :: Int
initState = 0
tokenToStyle (Res _) = keywordStyle
tokenToStyle (Op _) = defaultStyle
tokenToStyle (Num _) = numberStyle
tokenToStyle (Id _) = defaultStyle
opToOp :: String -> Operator
opToOp "+" -> Add'
opToOp "-" -> Subtract'
opToOp "*" -> Multiply'
opToOp "/" -> Divide'
opToOP "." -> Dot'
resToRes :: String -> Reserved
resToRes "print" -> Print'
resToRes "for" -> For'
resToRes "do" -> Do'
resToRes "begin" -> Begin'
resToRes "end" -> End'
resToRes "if" -> If'
resToRes "then" -> Then'
#include "alex.hsinc"
}