| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189 |
- //-------------------------------------------------------------------------------------------------------
- // Copyright (C) Microsoft. All rights reserved.
- // Licensed under the MIT license. See LICENSE.txt file in the project root for full license information.
- //-------------------------------------------------------------------------------------------------------
- #ifndef KEYWORD
- #define KEYWORD(tk,f,prec2,nop2,prec1,nop1,name)
- #endif //!KEYWORD
- #ifndef S_KEYWORD
- #define S_KEYWORD(name,f,lab)
- #endif //!S_KEYWORD
- // token reserved word? (see fidXXX values in enum, in hash.h)
- // binary operator precedence
- // binary operator
- // unary operator precedence
- // unary operator
- // name
- KEYWORD(tkABSTRACT ,0, No, knopNone , No, knopNone , abstract)
- KEYWORD(tkASSERT ,0, No, knopNone , No, knopNone , assert)
- KEYWORD(tkAWAIT ,1, No, knopNone ,Uni, knopAwait , await)
- KEYWORD(tkBOOLEAN ,0, No, knopNone , No, knopNone , boolean)
- KEYWORD(tkBREAK ,1, No, knopNone , No, knopNone , break)
- KEYWORD(tkBYTE ,0, No, knopNone , No, knopNone , byte)
- KEYWORD(tkCASE ,1, No, knopNone , No, knopNone , case)
- KEYWORD(tkCATCH ,1, No, knopNone , No, knopNone , catch)
- KEYWORD(tkCHAR ,0, No, knopNone , No, knopNone , char)
- KEYWORD(tkCONTINUE ,1, No, knopNone , No, knopNone , continue)
- KEYWORD(tkDEBUGGER ,1, No, knopNone , No, knopNone , debugger)
- KEYWORD(tkDECIMAL ,0, No, knopNone , No, knopNone , decimal)
- KEYWORD(tkDEFAULT ,1, No, knopNone , No, knopNone , default)
- KEYWORD(tkDELETE ,1, No, knopNone ,Uni, knopDelete , delete)
- KEYWORD(tkDO ,1, No, knopNone , No, knopNone , do)
- KEYWORD(tkDOUBLE ,0, No, knopNone , No, knopNone , double)
- KEYWORD(tkELSE ,1, No, knopNone , No, knopNone , else)
- KEYWORD(tkENSURE ,0, No, knopNone , No, knopNone , ensure)
- KEYWORD(tkEVENT ,0, No, knopNone , No, knopNone , event)
- KEYWORD(tkFALSE ,1, No, knopNone , No, knopNone , false)
- KEYWORD(tkFINAL ,0, No, knopNone , No, knopNone , final)
- KEYWORD(tkFINALLY ,1, No, knopNone , No, knopNone , finally)
- KEYWORD(tkFLOAT ,0, No, knopNone , No, knopNone , float)
- KEYWORD(tkFOR ,1, No, knopNone , No, knopNone , for)
- KEYWORD(tkFUNCTION ,1, No, knopNone , No, knopNone , function)
- KEYWORD(tkGET ,0, No, knopNone , No, knopNone , get)
- KEYWORD(tkGOTO ,0, No, knopNone , No, knopNone , goto)
- KEYWORD(tkIF ,1, No, knopNone , No, knopNone , if)
- KEYWORD(tkIN ,1, Cmp, knopIn , No, knopNone , in)
- KEYWORD(tkINSTANCEOF ,1, Cmp,knopInstOf , No, knopNone , instanceof)
- KEYWORD(tkINT ,0, No, knopNone , No, knopNone , int)
- KEYWORD(tkINTERNAL ,0, No, knopNone , No, knopNone , internal)
- KEYWORD(tkINVARIANT ,0, No, knopNone , No, knopNone , invariant)
- KEYWORD(tkLONG ,0, No, knopNone , No, knopNone , long)
- KEYWORD(tkNAMESPACE ,0, No, knopNone , No, knopNone , namespace)
- KEYWORD(tkNATIVE ,0, No, knopNone , No, knopNone , native)
- KEYWORD(tkNEW ,1, No, knopNone , No, knopNone , new)
- KEYWORD(tkNULL ,1, No, knopNone , No, knopNone , null)
- KEYWORD(tkREQUIRE ,0, No, knopNone , No, knopNone , require)
- KEYWORD(tkRETURN ,1, No, knopNone , No, knopNone , return)
- KEYWORD(tkSBYTE ,0, No, knopNone , No, knopNone , sbyte)
- KEYWORD(tkSET ,0, No, knopNone , No, knopNone , set)
- KEYWORD(tkSHORT ,0, No, knopNone , No, knopNone , short)
- KEYWORD(tkSWITCH ,1, No, knopNone , No, knopNone , switch)
- KEYWORD(tkSYNCHRONIZED,0, No, knopNone , No, knopNone , synchronized)
- KEYWORD(tkTHIS ,1, No, knopNone , No, knopNone , this)
- KEYWORD(tkTHROW ,1, No, knopNone , No, knopNone , throw)
- KEYWORD(tkTHROWS ,0, No, knopNone , No, knopNone , throws)
- KEYWORD(tkTRANSIENT ,0, No, knopNone , No, knopNone , transient)
- KEYWORD(tkTRUE ,1, No, knopNone , No, knopNone , true)
- KEYWORD(tkTRY ,1, No, knopNone , No, knopNone , try)
- KEYWORD(tkTYPEOF ,1, No, knopNone ,Uni, knopTypeof , typeof)
- KEYWORD(tkUINT ,0, No, knopNone , No, knopNone , uint)
- KEYWORD(tkULONG ,0, No, knopNone , No, knopNone , ulong)
- KEYWORD(tkUSE ,0, No, knopNone , No, knopNone , use)
- KEYWORD(tkUSHORT ,0, No, knopNone , No, knopNone , ushort)
- KEYWORD(tkVAR ,1, No, knopNone , No, knopNone , var)
- KEYWORD(tkVOID ,1, No, knopNone ,Uni, knopVoid , void)
- KEYWORD(tkVOLATILE ,0, No, knopNone , No, knopNone , volatile)
- KEYWORD(tkWHILE ,1, No, knopNone , No, knopNone , while)
- KEYWORD(tkWITH ,1, No, knopNone , No, knopNone , with)
- // Future reserved words that become keywords in ES6
- KEYWORD(tkCLASS ,1, No, knopNone , No, knopNone , class)
- KEYWORD(tkCONST ,1, No, knopNone , No, knopNone , const)
- KEYWORD(tkEXPORT ,1, No, knopNone , No, knopNone , export)
- KEYWORD(tkEXTENDS ,1, No, knopNone , No, knopNone , extends)
- KEYWORD(tkIMPORT ,1, No, knopNone , No, knopNone , import)
- KEYWORD(tkSUPER ,1, No, knopNone , No, knopNone , super)
- // Note: yield is still treated as an identifier in non-strict, non-generator functions
- // and is special cased in jsscan.js when generating kwd-swtch.h
- // Note: yield is a weird operator in that it has assignment expression level precedence
- // but looks like a unary operator
- KEYWORD(tkYIELD ,1, No, knopNone ,Asg, knopYield , yield)
- // Future reserved words in strict and non-strict modes
- KEYWORD(tkENUM ,1, No, knopNone , No, knopNone , enum)
- // Additional future reserved words in strict mode
- KEYWORD(tkIMPLEMENTS ,2, No, knopNone , No, knopNone , implements)
- KEYWORD(tkINTERFACE ,2, No, knopNone , No, knopNone , interface)
- KEYWORD(tkLET ,2, No, knopNone , No, knopNone , let)
- KEYWORD(tkPACKAGE ,2, No, knopNone , No, knopNone , package)
- KEYWORD(tkPRIVATE ,2, No, knopNone , No, knopNone , private)
- KEYWORD(tkPROTECTED ,2, No, knopNone , No, knopNone , protected)
- KEYWORD(tkPUBLIC ,2, No, knopNone , No, knopNone , public)
- KEYWORD(tkSTATIC ,2, No, knopNone , No, knopNone , static)
- S_KEYWORD(LEval ,3, eval)
- S_KEYWORD(LArguments ,3, arguments)
- S_KEYWORD(LTarget ,3, target)
- #undef KEYWORD
- #ifndef TOK_DCL
- #define TOK_DCL(tk,prec2,nop2,prec1,nop1)
- #endif //!TOK_DCL
- // The identifier token must follow the last identifier keyword
- TOK_DCL(tkID , No, knopNone , No, knopNone)
- // Non-operator non-identifier tokens
- TOK_DCL(tkSColon , No, knopNone , No, knopNone ) // ;
- TOK_DCL(tkRParen , No, knopNone , No, knopNone ) // )
- TOK_DCL(tkRBrack , No, knopNone , No, knopNone ) // ]
- TOK_DCL(tkLCurly , No, knopNone , No, knopNone ) // {
- TOK_DCL(tkRCurly , No, knopNone , No, knopNone ) // }
- // Operator non-identifier tokens
- TOK_DCL(tkComma ,Cma, knopComma , No, knopNone ) // ,
- TOK_DCL(tkDArrow ,Asg, knopFncDecl, No, knopNone ) // =>
- TOK_DCL(tkAsg ,Asg, knopAsg , No, knopNone ) // =
- TOK_DCL(tkAsgAdd ,Asg, knopAsgAdd , No, knopNone ) // +=
- TOK_DCL(tkAsgSub ,Asg, knopAsgSub , No, knopNone ) // -=
- TOK_DCL(tkAsgMul ,Asg, knopAsgMul , No, knopNone ) // *=
- TOK_DCL(tkAsgDiv ,Asg, knopAsgDiv , No, knopNone ) // /=
- TOK_DCL(tkAsgExpo ,Asg, knopAsgExpo, No, knopNone ) // **=
- TOK_DCL(tkAsgMod ,Asg, knopAsgMod , No, knopNone ) // %=
- TOK_DCL(tkAsgAnd ,Asg, knopAsgAnd , No, knopNone ) // &=
- TOK_DCL(tkAsgXor ,Asg, knopAsgXor , No, knopNone ) // ^=
- TOK_DCL(tkAsgOr ,Asg, knopAsgOr , No, knopNone ) // |=
- TOK_DCL(tkAsgLsh ,Asg, knopAsgLsh , No, knopNone ) // <<=
- TOK_DCL(tkAsgRsh ,Asg, knopAsgRsh , No, knopNone ) // >>=
- TOK_DCL(tkAsgRs2 ,Asg, knopAsgRs2 , No, knopNone ) // >>>=
- TOK_DCL(tkQMark ,Que, knopQmark , No, knopNone ) // ?
- TOK_DCL(tkColon , No, knopNone , No, knopNone ) // :
- TOK_DCL(tkLogOr ,Lor, knopLogOr , No, knopNone ) // ||
- TOK_DCL(tkLogAnd ,Lan, knopLogAnd , No, knopNone ) // &&
- TOK_DCL(tkOr ,Bor, knopOr , No, knopNone ) // |
- TOK_DCL(tkXor ,Xor, knopXor , No, knopNone ) // ^
- TOK_DCL(tkAnd ,Ban, knopAnd , No, knopNone ) // &
- TOK_DCL(tkEQ ,Equ, knopEq , No, knopNone ) // ==
- TOK_DCL(tkNE ,Equ, knopNe , No, knopNone ) // !=
- TOK_DCL(tkEqv ,Equ, knopEqv , No, knopNone ) // ===
- TOK_DCL(tkNEqv ,Equ, knopNEqv , No, knopNone ) // !==
- TOK_DCL(tkLT ,Cmp, knopLt , No, knopNone ) // <
- TOK_DCL(tkLE ,Cmp, knopLe , No, knopNone ) // <=
- TOK_DCL(tkGT ,Cmp, knopGt , No, knopNone ) // >
- TOK_DCL(tkGE ,Cmp, knopGe , No, knopNone ) // >=
- TOK_DCL(tkLsh ,Shf, knopLsh , No, knopNone ) // <<
- TOK_DCL(tkRsh ,Shf, knopRsh , No, knopNone ) // >>
- TOK_DCL(tkRs2 ,Shf, knopRs2 , No, knopNone ) // >>>
- TOK_DCL(tkAdd ,Add, knopAdd ,Uni, knopPos ) // +
- TOK_DCL(tkSub ,Add, knopSub ,Uni, knopNeg ) // -
- TOK_DCL(tkExpo ,Expo, knopExpo , No, knopNone ) // **
- TOK_DCL(tkStar ,Mul, knopMul , No, knopNone ) // *
- TOK_DCL(tkDiv ,Mul, knopDiv , No, knopNone ) // /
- TOK_DCL(tkPct ,Mul, knopMod , No, knopNone ) // %
- TOK_DCL(tkTilde , No, knopNone ,Uni, knopNot ) // ~
- TOK_DCL(tkBang , No, knopNone ,Uni, knopLogNot ) // !
- TOK_DCL(tkInc , No, knopNone ,Uni, knopIncPre ) // ++
- TOK_DCL(tkDec , No, knopNone ,Uni, knopDecPre ) // --
- TOK_DCL(tkEllipsis , No, knopNone ,Spr, knopEllipsis ) // ...
- TOK_DCL(tkLParen , No, knopNone , No, knopNone ) // (
- TOK_DCL(tkLBrack , No, knopNone , No, knopNone ) // [
- TOK_DCL(tkDot , No, knopNone , No, knopNone ) // .
- // String template tokens
- TOK_DCL(tkStrTmplBasic , No, knopNone , No, knopNone ) // `...`
- TOK_DCL(tkStrTmplBegin , No, knopNone , No, knopNone ) // `...${
- TOK_DCL(tkStrTmplMid , No, knopNone , No, knopNone ) // }...${ Note: tkStrTmplMid and tkStrTmplEnd tokens do not actually contain the opening '}' character.
- TOK_DCL(tkStrTmplEnd , No, knopNone , No, knopNone ) // }...` Since the scanner can't disambiguate a tkRCurly which is part of the expression, literal, or string template syntax
- // we check to make sure the token after parsing the expression is a tkRCurly and put the scanner into a string template
- // scanning mode which will scan the string literal and search for the closing '${' or '`'.
- TOK_DCL(tkComment , No, knopNone, No, knopNone ) // Comment for syntax coloring
- TOK_DCL(tkScanError , No, knopNone, No, knopNone ) // Error in syntax coloring
- #undef TOK_DCL
|