Safe Haskell | None |
---|
Yi.Lexer.JavaScript
- initState :: HlState
- alexScanToken :: (AlexState HlState, AlexInput) -> Maybe (Tok Token, (AlexState HlState, AlexInput))
- tokenToStyle :: Token -> UIStyle -> Style
- type TT = Tok Token
- data Token
- data Reserved
- data Operator
- = Add'
- | Subtract'
- | Multiply'
- | Divide'
- | Modulo'
- | Increment'
- | Decrement'
- | Assign'
- | AddAssign'
- | SubtractAssign'
- | MultiplyAssign'
- | DivideAssign'
- | ModuloAssign'
- | Equals'
- | NotEquals'
- | GT'
- | GTE'
- | LT'
- | LTE'
- | EqualsType'
- | NotEqualsType'
- | And'
- | Or'
- | Not'
- | BitAnd'
- | BitOr'
- | BitXor'
- | LeftShift'
- | RightShift'
- | RightShiftZ'
- | BitNot'
- | Qualify'
- type HlState = Int
- prefixOperators :: [Operator]
- infixOperators :: [Operator]
- postfixOperators :: [Operator]
Documentation
alexScanToken :: (AlexState HlState, AlexInput) -> Maybe (Tok Token, (AlexState HlState, AlexInput))Source
Scan one token. Return (maybe) a token and a new state.
tokenToStyle :: Token -> UIStyle -> StyleSource
Takes a Token
and returns a style to be used for that type of token.
TODO: The elem
check is potentially unnecessarily slow. We could split
the Const constructor into two different ones, one for builtins and one for
others.
The different tokens.
Constructors
Unknown | |
Res !Reserved | |
Str !String | |
Rex !String | |
Op !Operator | |
Special !Char | |
Number !String | |
ValidName !String | |
Comment !CommentType | |
Const !String |
Instances
Eq Token | |
Show Token | |
Strokable (Tok Token) | |
Strokable (KeyValue TT) | |
Strokable (Array TT) | |
Strokable (Expr TT) | |
Strokable (VarDecAss TT) | |
Strokable (Block TT) | |
Strokable (ForContent TT) | |
Strokable (ParExpr TT) | |
Strokable (Parameters TT) | |
Strokable (Statement TT) | TODO: This code is *screaming* for some generic programming. TODO: Somehow fix Failable and failStroker to be more generic. This will make these instances much nicer and we won't have to make ad-hoc stuff like this. |
The constructors for Reserved
have an apostrophe as a suffix because
Default
is already used. Also note that Undefined'
is not intended as
some sort of backup reserved word for things we don't care about -- it
really means the undefined built-in in JavaScript.
The constructors for Operator
have an apostrophe as a suffix because
e.g. LT
is already used by Prelude
.
Constructors
prefixOperators :: [Operator]Source
Prefix operators. NOTE: Add' is also a valid prefix operator, but since it's completely useless in the real world, we don't care about it here. Doing this makes parsing much, much easier.
infixOperators :: [Operator]Source
Infix operators.
postfixOperators :: [Operator]Source
Postfix operators.