esr/lexer/
token.rs

1// Lookup table layout:
2// ====================
3//
4// EOF   ;     :     ,     (     )     [     ]     {     }     =>    NEW
5// ++    --    !     ~     TYPOF VOID  DELET *     /     %     **    +
6// -     <<    >>    >>>   <     <=    >     >=    INSOF IN    ===   !==
7// ==    !=    &     ^     |     &&    ||    ?     =     +=    -=    **=
8// *=    /=    %=    <<=   >>=   >>>=  &=    ^=    |=    ...   VAR   LET
9// CONST BREAK DO    CASE  ELSE  CATCH EXPRT CLASS EXTND RET   WHILE FINLY
10// SUPER WITH  CONT  FOR   SWTCH YIELD DBGGR FUNCT THIS  DEFLT IF    THROW
11// IMPRT TRY   STATI TRUE  FALSE NULL  UNDEF STR   NUM   BIN   REGEX ENUM
12// IMPL  PCKG  PROT  IFACE PRIV  PUBLI IDENT ACCSS TPL_O TPL_C ERR_T ERR_E
13
14#[derive(Debug, PartialEq, Clone, Copy)]
15pub enum Token {
16    EndOfProgram,
17    Semicolon,
18    Colon,
19    Comma,
20    ParenOpen,
21    ParenClose,
22    BracketOpen,
23    BracketClose,
24    BraceOpen,
25    BraceClose,
26    OperatorFatArrow,         //   …  => …
27    OperatorNew,              //     new …
28    OperatorIncrement,        //      ++ … | … ++
29    OperatorDecrement,        //      -- … | … --
30    OperatorLogicalNot,       //       ! …
31    OperatorBitwiseNot,       //       ~ …
32    OperatorTypeof,           //  typeof …
33    OperatorVoid,             //    void …
34    OperatorDelete,           //  delete …
35    OperatorMultiplication,   //   …  *  …
36    OperatorDivision,         //   …  /  …
37    OperatorRemainder,        //   …  %  …
38    OperatorExponent,         //   …  ** …
39    OperatorAddition,         //   …  +  … | + …
40    OperatorSubtraction,     //   …  -  … | - …
41    OperatorBitShiftLeft,     //   …  << …
42    OperatorBitShiftRight,    //   …  >> …
43    OperatorUBitShiftRight,   //   … >>> …
44    OperatorLesser,           //   …  <  …
45    OperatorLesserEquals,     //   …  <= …
46    OperatorGreater,          //   …  >  …
47    OperatorGreaterEquals,    //   …  >= …
48    OperatorInstanceof,       //   … instanceof …
49    OperatorIn,               //   …  in …
50    OperatorStrictEquality,   //   … === …
51    OperatorStrictInequality, //   … !== …
52    OperatorEquality,         //   …  == …
53    OperatorInequality,       //   …  != …
54    OperatorBitwiseAnd,       //   …  &  …
55    OperatorBitwiseXor,       //   …  ^  …
56    OperatorBitwiseOr,        //   …  |  …
57    OperatorLogicalAnd,       //   …  && …
58    OperatorLogicalOr,        //   …  || …
59    OperatorConditional,      //   …  ?  …  :  …
60    OperatorAssign,           //   …  =  …
61    OperatorAddAssign,        //   …  += …
62    OperatorSubtractAssign,  //   …  -= …
63    OperatorExponentAssign,   //   … **= …
64    OperatorMultiplyAssign,   //   …  *= …
65    OperatorDivideAssign,     //   …  /= …
66    OperatorRemainderAssign,  //   …  %= …
67    OperatorBSLAssign,        //   … <<= …
68    OperatorBSRAssign,        //   … >>= …
69    OperatorUBSRAssign,       //   … >>>= …
70    OperatorBitAndAssign,     //   …  &= …
71    OperatorBitXorAssign,     //   …  ^= …
72    OperatorBitOrAssign,      //   …  |= …
73    OperatorSpread,           //     ... …
74    DeclarationVar,
75    DeclarationLet,
76    DeclarationConst,
77    Break,
78    Do,
79    Case,
80    Else,
81    Catch,
82    Export,
83    Class,
84    Extends,
85    Return,
86    While,
87    Finally,
88    Super,
89    With,
90    Continue,
91    For,
92    Switch,
93    Yield,
94    Debugger,
95    Function,
96    This,
97    Default,
98    If,
99    Throw,
100    Import,
101    Try,
102    Static,
103    LiteralTrue,
104    LiteralFalse,
105    LiteralNull,
106    LiteralUndefined,
107    LiteralString,
108    LiteralNumber,
109    LiteralBinary,
110    LiteralRegEx,
111    ReservedEnum,
112    ReservedImplements,
113    ReservedPackage,
114    ReservedProtected,
115    ReservedInterface,
116    ReservedPrivate,
117    ReservedPublic,
118    Identifier,
119    Accessor,
120    TemplateOpen,
121    TemplateClosed,
122    UnexpectedToken,
123    UnexpectedEndOfProgram,
124}
125
126impl Token {
127    #[inline]
128    pub fn is_word(&self) -> bool {
129        use self::Token::*;
130
131        match self {
132            Identifier         |
133            Break              |
134            Do                 |
135            Case               |
136            Else               |
137            Catch              |
138            Export             |
139            Class              |
140            Extends            |
141            Return             |
142            While              |
143            Finally            |
144            Super              |
145            With               |
146            Continue           |
147            For                |
148            Switch             |
149            Yield              |
150            Debugger           |
151            Function           |
152            This               |
153            Default            |
154            If                 |
155            Throw              |
156            Import             |
157            Try                |
158            Static             |
159            OperatorNew        |
160            OperatorTypeof     |
161            OperatorVoid       |
162            OperatorDelete     |
163            OperatorInstanceof |
164            LiteralTrue        |
165            LiteralFalse       |
166            LiteralNull        |
167            LiteralUndefined   => true,
168
169            _                  => false,
170        }
171    }
172}