/** * 参考 * http://jt.mozilla.gr.jp/js/language/js20/core/lexer.html * * * * ■JavaScript 2.0の予約語のうちで未処理のもの * as const export extends final import instanceof * is namespace package private public static super use * * * * メモ * ---------------------------------------------------------------------- * JavaScript 2.0 では以下の区切り文字が新しく使用できる: * &&= ... ^^ ^^= ||= * ---------------------------------------------------------------------- * JavaScript 2.0 では以下の予約語が使用されている: * * as break case catch class const continue default * delete do else export extends false final finally * for function if import in instanceof is namespace * new null package private public return static * super switch this throw true try typeof use var * void while with * * また、以下のものが将来のために予約されている: * * abstract debugger enum goto implements interface * native protected synchronized throws transient volatile * ---------------------------------------------------------------------- * 以下の語は JavaScript 2.0 のいくつかのコンテキストで特別な意味を持つが、 * これらは予約語ではなく識別子として使用することができる: * * exclude get include named set * * 以下の語は JavaScript 1.5 で予約語とされていたが * JavaScript 2.0 では予約語でなくなった: * * boolean byte char double float int long short * ---------------------------------------------------------------------- * セミコロンの挿入 * JavaScript 2.0 構文の文法 では以下のような場合で * 明示的にセミコロンをオプションとしている。 * * あらゆる } の前 * if-else 文の else の前 * do-while 文の while の前 (ただし while 文の while の前は例外) * プログラムの終点の前 * ---------------------------------------------------------------------- */ function class__Symbols__(window) { var classId = arguments.callee.toString().match(/class__(\w+)__/)[1]; var F = window[classId] = function(){ }; /* * 一人言 * * 色々なソースコードをプログラムで解析して, * キーワードの出現頻度を計算, * んで頻度の高いものに小さい数字を割り当てると最高なんだけどね. * いつかやってみたいなあ. */ F.TOKEN_ID__WHITESPACE = F[" "] = 100; F.TOKEN_ID__COMMENT_LINE = F["//"] = 101; F.TOKEN_ID__COMMENT_BLOCK = F["/*"] = 102; F.TOKEN_ID__COMMENT_JAVADOC = 104; F.TOKEN_ID__EOF = F["EOF"] = 105; F.TOKEN_ID__ERROR = 106; F.TOKEN_ID__identifier = F["identifier"] = 320; F.TOKEN_ID__abstract = 340; F.TOKEN_ID__assert = 130; F.TOKEN_ID__boolean = 140; F.TOKEN_ID__break = 150; F.TOKEN_ID__byte = 160; F.TOKEN_ID__case = 170; F.TOKEN_ID__catch = 180; F.TOKEN_ID__char = 190; F.TOKEN_ID__class = 200; F.TOKEN_ID__continue = 210; F.TOKEN_ID__default = 220; F.TOKEN_ID__delete = 230; F.TOKEN_ID__do = 240; F.TOKEN_ID__double = 250; F.TOKEN_ID__else = 260; F.TOKEN_ID__extends = 270; F.TOKEN_ID__false = 280; F.TOKEN_ID__final = 290; F.TOKEN_ID__finally = 300; F.TOKEN_ID__float = 310; F.TOKEN_ID__for = F["for"] = 110; F.TOKEN_ID__function = F["function"] = 330; F.TOKEN_ID__if = 120; F.TOKEN_ID__implements = 350; F.TOKEN_ID__import = 360; F.TOKEN_ID__instanceof = 370; F.TOKEN_ID__in = F["in"] = 380; F.TOKEN_ID__int = 390; F.TOKEN_ID__interface = 400; F.TOKEN_ID__long = 410; F.TOKEN_ID__native = 420; F.TOKEN_ID__new = 430; F.TOKEN_ID__null = 440; F.TOKEN_ID__package = 450; F.TOKEN_ID__private = 460; F.TOKEN_ID__protected = 470; F.TOKEN_ID__public = 480; F.TOKEN_ID__return = 490; F.TOKEN_ID__short = 500; F.TOKEN_ID__static = 510; F.TOKEN_ID__strictfp = 520; F.TOKEN_ID__super = 530; F.TOKEN_ID__switch = 540; F.TOKEN_ID__synchronized = 550; F.TOKEN_ID__this = 560; F.TOKEN_ID__throw = 570; F.TOKEN_ID__throws = 580; F.TOKEN_ID__transient = 590; F.TOKEN_ID__true = 600; F.TOKEN_ID__try = 610; F.TOKEN_ID__typeof = 620; F.TOKEN_ID__undefined = 630; F.TOKEN_ID__var = F["var"] = 640; F.TOKEN_ID__void = 650; F.TOKEN_ID__volatile = 660; F.TOKEN_ID__while = 670; F.TOKEN_ID__with = 680; F.TOKEN_ID__IntegerLiteral = 50; // F.TOKEN_ID__LongLiteral = 51; // F.TOKEN_ID__FloatingPointLiteral = 52; // F.TOKEN_ID__DoubleLiteral = 53; // F.TOKEN_ID__NumberLiteral = 54; // F.TOKEN_ID__CharacterLiteral = 55; // F.TOKEN_ID__StringLiteral = 56; // F.TOKEN_ID__SingleQuotationStringLiteral = 57; // F.TOKEN_ID__DoubleQuotationStringLiteral = 58; // F.TOKEN_ID__RegExpLiteral = 59; // F.TOKEN_ID__Plus = 1; // + F.TOKEN_ID__Minus = 10; // - F.TOKEN_ID__Not = 3; // ! F.TOKEN_ID__Remainder = 12; // % F.TOKEN_ID__Xor = 16; // ^ F.TOKEN_ID__And = 6; // & F.TOKEN_ID__Multiply = 7; // * F.TOKEN_ID__Or = 8; // | F.TOKEN_ID__Twiddle = 9; // ~ F.TOKEN_ID__Divide = 2; // / F.TOKEN_ID__Greater = 11; // > F.TOKEN_ID__Less = 4; // < F.TOKEN_ID__LeftParen = F["("] = 17; // ( F.TOKEN_ID__RightParen = F[")"] = 18; // ) F.TOKEN_ID__LeftBrace = F["{"] = 19; // { F.TOKEN_ID__RightBrace = F["}"] = 20; // } F.TOKEN_ID__LeftBracket = 21; // [ F.TOKEN_ID__RightBracket = 22; // ] F.TOKEN_ID__Colon = 23; // : F.TOKEN_ID__Semicolon = F[";"] = 24; // ; F.TOKEN_ID__Question = 15; // ? F.TOKEN_ID__Comma = 14; // , F.TOKEN_ID__Dot = 13; // . F.TOKEN_ID__Equal = 5; // = F.TOKEN_ID__PlusPlus = 28; // ++ F.TOKEN_ID__MinusMinus = 29; // -- F.TOKEN_ID__EqualEqual = 30; // == F.TOKEN_ID__LessEqual = 31; // <= F.TOKEN_ID__GreaterEqual = 32; // >= F.TOKEN_ID__NotEqual = 33; // != F.TOKEN_ID__LeftShift = 34; // << F.TOKEN_ID__RightShift = 35; // >> F.TOKEN_ID__UnsignedRightShift = 36; // >>> F.TOKEN_ID__EqualEqualEqual = 37; // === F.TOKEN_ID__NotEqualEqual = 38; // !== F.TOKEN_ID__PlusEqual = 39; // += F.TOKEN_ID__MinusEqual = 40; // -= F.TOKEN_ID__MutiplyEqual = 41; // *= F.TOKEN_ID__DivideEqual = 42; // /= F.TOKEN_ID__AndEqual = 43; // &= F.TOKEN_ID__OrEqual = 44; // |= F.TOKEN_ID__XorEqual = 45; // ^= F.TOKEN_ID__RemainderEqual = 46; // %= F.TOKEN_ID__LeftShiftEqual = 47; // >>= F.TOKEN_ID__RightShiftEqual = 48; // <<= F.TOKEN_ID__UnsignedRightShiftEqual = 49; // >>>= F.TOKEN_ID__OrOr = 25; // || F.TOKEN_ID__AndAnd = 26; // && F.checkCode = function() { var tmp = new Array(); for (var i in F) { if (i.indexOf("TOKEN_ID__") == 0) { if (tmp[F[i]]) { alert(i + " = " + F[i]); break; } else { tmp[F[i]] = true; } } } }; } class__Symbols__(window);